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
/* Define if you have the function `strtok_r'. */
/* #define HAVE_STRTOK_R 1 */
+#if defined(__has_include)
+# if __has_include(<corecrt.h>)
+# 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
#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
#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, ...);
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 */
#include "roken.h"
+#ifndef HAVE_STRTOLL
+
/* #include <sys/cdefs.h> */
#include <limits.h>
*endptr = (char *)(any ? s - 1 : nptr);
return ret;
}
+#endif /* !HAVE_STRTOLL */
#include "roken.h"
+#ifndef HAVE_STRTOULL
+
/* #include <sys/cdefs.h> */
#include <limits.h>
*endptr = (char *)(any ? s - 1 : nptr);
return (acc);
}
+#endif /* !HAVE_STRTOULL */
######################################################################
# 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
!endif
!endif
-!if exist("$(MMDIR)")
-
-RUNTIMEMODULE32="$(MMDIR)\Microsoft_$(VCVER)_$(CRTNAME)_x86.msm"
-!if "$(VCVER)"=="VC100"
-RUNTIMEMODULE64="$(MMDIR)\Microsoft_$(VCVER)_$(CRTNAME)_x64.msm"
+#
+# 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)"=="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
<Merge Id='Heimdal.Policy.32' Language='0'
SourceFile='$(var.InstDir32)\Heimdal.Policy.msm' />
- <Merge Id='Runtime.32' Language='0'
- SourceFile='$(var.RuntimeModule32)' />
-
+ <?if "$(var.RuntimeModule32)" != "" ?>
+ <Merge Id='Runtime.32' Language='0'
+ SourceFile='$(var.RuntimeModule32)' />
+ <?endif?>
</DirectoryRef>
<?endif?>
<Merge Id='Heimdal.Policy.64' Language='0'
SourceFile='$(var.InstDir64)\Heimdal.Policy.msm' />
- <Merge Id='Runtime.64' Language='0'
- SourceFile='$(var.RuntimeModule64)' />
-
+ <?if "$(var.RuntimeModule64)" != "" ?>
+ <Merge Id='Runtime.64' Language='0'
+ SourceFile='$(var.RuntimeModule64)' />
+ <?endif?>
</DirectoryRef>
<?endif?>
<MergeRef Id='Heimdal.Assemblies.64' />
<MergeRef Id='Heimdal.GSS.64' />
<MergeRef Id='Heimdal.Policy.64' />
- <MergeRef Id='Runtime.64' />
+ <?if "$(var.RuntimeModule64)" != "" ?><MergeRef Id='Runtime.64' /><?endif?>
<?else?>
<MergeRef Id='Heimdal.Assemblies.32' />
<MergeRef Id='Heimdal.GSS.32' />
<MergeRef Id='Heimdal.Policy.32' />
- <MergeRef Id='Runtime.32' />
+ <?if "$(var.RuntimeModule32)" != "" ?><MergeRef Id='Runtime.32' /><?endif?>
<?endif?>
<?ifdef Target32?>
<MergeRef Id='Heimdal.Assemblies.32' />
<MergeRef Id='Heimdal.GSS.32' />
<MergeRef Id='Heimdal.Policy.32' />
- <MergeRef Id='Runtime.32' />
+ <?if "$(var.RuntimeModule32)" != "" ?><MergeRef Id='Runtime.32' /><?endif?>
</Feature>
<?endif?>
<?endif?>
--- /dev/null
+########################################################################
+#
+# 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)
all:: prep
-!include <Win32.Mak>
+!include "NTMakefile.sdk"
!ifdef NODEBUG
BUILD=rel