diff --git a/appveyor.yml b/appveyor.yml index bb1e12123..11b0aebe2 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -42,7 +42,7 @@ install: build_script: - set PSDKDir=C:\Program Files\Microsoft SDKs\Windows\v7.1 - - call "C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\SetEnv.Cmd" /xp /x64 /Release + - call "C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\SetEnv.Cmd" /win7 /x64 /Release - set WIXDIR="c:\Program Files (x86)\Windows Installer XML v3.5" # We're not doing any codesigning in the Appveyor build yet. - SET CODESIGN_PKT=0000000000000000 diff --git a/include/config.h.w32 b/include/config.h.w32 index 8033476c3..c3a06b2c6 100644 --- a/include/config.h.w32 +++ b/include/config.h.w32 @@ -905,6 +905,17 @@ static const char *const rcsid[] = { (const char *)rcsid, "@(#)" msg } /* Define if you have the function `strtok_r'. */ /* #define HAVE_STRTOK_R 1 */ +#if defined(__has_include) +# if __has_include() +# define HAVE_UCRT 1 +# endif +#endif + +#ifdef HAVE_UCRT +#define HAVE_STRTOLL 1 +#define HAVE_STRTOULL 1 +#endif + /* Define to 1 if the system has the type `struct addrinfo'. */ #define HAVE_STRUCT_ADDRINFO 1 diff --git a/lib/roken/roken.h.in b/lib/roken/roken.h.in index e1aa6b7b6..79bac4fec 100644 --- a/lib/roken/roken.h.in +++ b/lib/roken/roken.h.in @@ -356,7 +356,16 @@ ROKEN_CPP_START #define fsync _commit -/* The MSVC implementation of snprintf is not C99 compliant. */ +#define timezone _timezone + +#define tzname _tzname + +#define _PIPE_BUFFER_SZ 8192 +#define pipe(fds) _pipe((fds), _PIPE_BUFFER_SZ, O_BINARY); + +#define ftruncate(fd, sz) _chsize((fd), (sz)) + +#if !defined(HAVE_UCRT) #define snprintf rk_snprintf #define vsnprintf rk_vsnprintf #define vasnprintf rk_vasnprintf @@ -364,11 +373,6 @@ ROKEN_CPP_START #define asnprintf rk_asnprintf #define asprintf rk_asprintf -#define _PIPE_BUFFER_SZ 8192 -#define pipe(fds) _pipe((fds), _PIPE_BUFFER_SZ, O_BINARY); - -#define ftruncate(fd, sz) _chsize((fd), (sz)) - ROKEN_LIB_FUNCTION int ROKEN_LIB_CALL rk_snprintf (char *str, size_t sz, const char *format, ...); @@ -386,6 +390,7 @@ rk_vasnprintf (char **ret, size_t max_sz, const char *format, va_list args); ROKEN_LIB_FUNCTION int ROKEN_LIB_CALL rk_vsnprintf (char *str, size_t sz, const char *format, va_list args); +#endif /* !defined(HAVE_UCRT) */ /* missing stat.h predicates */ diff --git a/lib/roken/strtoll.c b/lib/roken/strtoll.c index 0d895d54a..96c1b2509 100644 --- a/lib/roken/strtoll.c +++ b/lib/roken/strtoll.c @@ -38,6 +38,8 @@ #include "roken.h" +#ifndef HAVE_STRTOLL + /* #include */ #include @@ -150,3 +152,4 @@ noconv: *endptr = (char *)(any ? s - 1 : nptr); return ret; } +#endif /* !HAVE_STRTOLL */ diff --git a/lib/roken/strtoull.c b/lib/roken/strtoull.c index 94530e574..0516e18f9 100644 --- a/lib/roken/strtoull.c +++ b/lib/roken/strtoull.c @@ -38,6 +38,8 @@ #include "roken.h" +#ifndef HAVE_STRTOULL + /* #include */ #include @@ -124,3 +126,4 @@ noconv: *endptr = (char *)(any ? s - 1 : nptr); return (acc); } +#endif /* !HAVE_STRTOULL */ diff --git a/packages/windows/installer/NTMakefile b/packages/windows/installer/NTMakefile index ad63ae04f..2923e649b 100644 --- a/packages/windows/installer/NTMakefile +++ b/packages/windows/installer/NTMakefile @@ -133,7 +133,13 @@ clean:: ###################################################################### # Runtime modules -!if [ $(PERL) $(SRC)\cf\w32-detect-vc-version.pl $(CC) ]==16 +!if [ $(PERL) $(SRC)\cf\w32-detect-vc-version.pl $(CC) ]==19 +VCVER=VC2019 +!elseif [ $(PERL) $(SRC)\cf\w32-detect-vc-version.pl $(CC) ]==18 +VCVER=VC2018 +!elseif [ $(PERL) $(SRC)\cf\w32-detect-vc-version.pl $(CC) ]==17 +VCVER=VC2017 +!elseif [ $(PERL) $(SRC)\cf\w32-detect-vc-version.pl $(CC) ]==16 VCVER=VC100 !elseif [ $(PERL) $(SRC)\cf\w32-detect-vc-version.pl $(CC) ]==15 VCVER=VC90 @@ -164,22 +170,27 @@ MMDIR=$(SystemDrive)\Program Files (x86)\Common Files\Merge Modules !endif !endif -!if exist("$(MMDIR)") - +# +# Don't specify a runtime module when the Universal C Runtime +# is available. +# +!if "$(APPVER)"=="10.0" +RUNTIMEMODULE32="" +RUNTIMEMODULE64="" +!else +! if exist("$(MMDIR)") RUNTIMEMODULE32="$(MMDIR)\Microsoft_$(VCVER)_$(CRTNAME)_x86.msm" -!if "$(VCVER)"=="VC100" -RUNTIMEMODULE64="$(MMDIR)\Microsoft_$(VCVER)_$(CRTNAME)_x64.msm" -!else +! if "$(VCVER)"=="VC90" || "$(VCVER)"=="VC80" RUNTIMEMODULE64="$(MMDIR)\Microsoft_$(VCVER)_$(CRTNAME)_x86_x64.msm" -!endif - -!else +! else +RUNTIMEMODULE64="$(MMDIR)\Microsoft_$(VCVER)_$(CRTNAME)_x64.msm" +! endif +! else RUNTIMEMODULE32="$(MSSDK)\Redist\VC\microsoft.vcxx.crt.x86_msm.msm" RUNTIMEMODULE64="$(MSSDK)\Redist\VC\microsoft.vcxx.crt.x64_msm.msm" - +! endif !endif - ###################################################################### # Heimdal installer diff --git a/packages/windows/installer/heimdal-installer.wxs b/packages/windows/installer/heimdal-installer.wxs index 0b6000d1b..8ac6cc665 100644 --- a/packages/windows/installer/heimdal-installer.wxs +++ b/packages/windows/installer/heimdal-installer.wxs @@ -99,9 +99,10 @@ - - + + + @@ -127,9 +128,10 @@ - - + + + @@ -370,12 +372,12 @@ - + - + @@ -393,7 +395,7 @@ - + diff --git a/windows/NTMakefile.sdk b/windows/NTMakefile.sdk new file mode 100644 index 000000000..bb06c0866 --- /dev/null +++ b/windows/NTMakefile.sdk @@ -0,0 +1,128 @@ +######################################################################## +# +# Copyright (c) 2021, PADL Software Pty Ltd. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# - Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# - Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN if ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# + +!if !defined(CPU) || "$(CPU)" == "" +CPU =AMD64 +!endif + +!if "$(CPU)" == "X86" || "$(CPU)" == "x86" +CPU =i386 +!endif + +!if !defined(APPVER) +APPVER =6.1 +!endif + +!if "$(APPVER)" == "5.0" +NMAKE_WINVER=0x0500 +!elseif "$(APPVER)" == "5.01" +NMAKE_WINVER=0x0501 +!elseif "$(APPVER)" == "5.02" +NMAKE_WINVER=0x0502 +!elseif "$(APPVER)" == "6.0" +NMAKE_WINVER=0x0600 +!elseif "$(APPVER)" == "6.1" +NMAKE_WINVER=0x0601 +!elseif "$(APPVER)" == "10.0" +NMAKE_WINVER=0x0A00 +!endif + +cc = cl +link = link +implib = lib + +cflags = -c -DCRTAPI1=_cdecl -DCRTAPI2=_cdecl -nologo -GS -W4 + +!if "$(CPU)" == "i386" +cflags = $(cflags) -D_X86_=1 +!endif +!if "$(CPU)" == "AMD64" +cflags = $(cflags) -D_AMD64_=1 +!endif +!if "$(CPU)" == "ARM" +cflags = $(cflags) -D_ARM_=1 +!endif +!if "$(CPU)" == "ARM64" +cflags = $(cflags) -D_ARM64_=1 +!endif + +cflags = $(cflags) -DWIN32 -D_WIN32 +!if "$(CPU)" == "AMD64" || "$(CPU)" == "ARM64" +cflags = $(cflags) -DWIN64 -D_WIN64 +!endif + +cflags = $(cflags) -D_WINNT -D_WIN32_WINNT=$(NMAKE_WINVER) +cflags = $(cflags) -DNTDDI_VERSION=$(NMAKE_WINVER)0000 +cflags = $(cflags) -D_WIN32_IE=$(NMAKE_WINVER) -DWINVER=$(NMAKE_WINVER) + +!ifdef NODEBUG +cdebug = -Ox -DNDEBUG +!else +cdebug = -Zi -Od -DDEBUG +!endif + +cvarsmt = -D_MT +cvarsdll = -D_MT -D_DLL +!ifdef NODEBUG +cvarsmt = $(cvarsmt) -MTd +cvarsdll = $(cvarsdll) -MDd +!else +cvarsmt = $(cvarsmt) -MT +cvarsdll = $(cvarsdll) -MD +!endif +cvars = $(cvarsmt) + +lflags = $(lflags) /INCREMENTAL:NO /NOLOGO +!ifdef NODEBUG +ldebug = /RELEASE +!else +ldebug = /DEBUG /DEBUGTYPE:cv +!endif + +!if "$(CPU)" == "i386" +dllentry = _DllMainCRTStartup@12 +!else +dllentry = _DllMainCRTStartup +!endif + +conlflags = $(lflags) -subsystem:console,$(APPVER) +guilflags = $(lflags) -subsystem:windows,$(APPVER) +dlllflags = $(lflags) -entry:$(dllentry) -dll + +baselibs = kernel32.lib ws2_32.lib mswsock.lib advapi32.lib +conlibs = $(baselibs) +conlibsmt = $(baselibs) +conlibsdll = $(baselibs) + +winlibs = $(baselibs) user32.lib gdi32.lib comdlg32.lib winspool.lib +guilibs = $(winlibs) +guilibsmt = $(winlibs) +guilibsdll = $(winlibs) diff --git a/windows/NTMakefile.w32 b/windows/NTMakefile.w32 index 40e714d8c..929bcf5e4 100644 --- a/windows/NTMakefile.w32 +++ b/windows/NTMakefile.w32 @@ -39,7 +39,7 @@ prep:: all:: prep -!include +!include "NTMakefile.sdk" !ifdef NODEBUG BUILD=rel