diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 8c1826bab93a6f92e607d60a7f6a6b74e0e7cfc6..2e36a21a957fd54cf170725ecfaabefbc6dd9d5e 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -51,13 +51,22 @@ include:
       has_gtk: "yes"
   - local: '.gitlab-ci-unix.yml'
     inputs:
-      os: 'mingw32-w64'
+      os: 'mingw-w64'
       platform: 'x86'
       tagname: 'FreeBSD'
       cross_platform: 'yes'
       build_flags: 'AR=/home/admin/mingw-w32/bin/i686-w64-mingw32-ar AS=/home/admin/mingw-w32/bin/i686-w64-mingw32-as CC=/home/admin/mingw-w32/bin/i686-w64-mingw32-gcc CXX=/home/admin/mingw-w32/bin/i686-w64-mingw32-g++ RANLIB=/home/admin/mingw-w32/bin/i686-w64-mingw32-ranlib WINDRES=/home/admin/mingw-w32/bin/i686-w64-mingw32-windres RELEASE=1'
       no_javascript: 'yes'
       has_curses: 'no'
+  - local: '.gitlab-ci-unix.yml'
+    inputs:
+      os: 'mingw-w64'
+      platform: 'x64'
+      tagname: 'FreeBSD'
+      cross_platform: 'yes'
+      build_flags: 'AR=/home/admin/mingw-w64/bin/x86_64-w64-mingw32-ar AS=/home/admin/mingw-w64/bin/x86_64-w64-mingw32-as CC=/home/admin/mingw-w64/bin/x86_64-w64-mingw32-gcc CXX=/home/admin/mingw-w64/bin/x86_64-w64-mingw32-g++ RANLIB=/home/admin/mingw-w64/bin/x86_64-w64-mingw32-ranlib WINDRES=/home/admin/mingw-w64/bin/x86_64-w64-mingw32-windres RELEASE=1'
+      no_javascript: 'yes'
+      has_curses: 'no'
 
 smoketest-jsexec-linux:
   tags: [Linux]
diff --git a/3rdp/build/GNUmakefile b/3rdp/build/GNUmakefile
index 255f32ed04dfe51a5473680802665d6bcafe40f2..cd73d947ab973adb73db7d09715e0a65e6779873 100644
--- a/3rdp/build/GNUmakefile
+++ b/3rdp/build/GNUmakefile
@@ -90,7 +90,7 @@ $(CRYPT_SRC): | $(3RDPSRCDIR)
 $(CRYPT_IDIR): | $(3RDPODIR)
 	$(QUIET)$(IFNOTEXIST) mkdir $(CRYPT_IDIR)
 
-$(CRYPTLIB_BUILD): $(3RDP_ROOT)/dist/cryptlib.zip $(3RDP_ROOT)/build/cl-fix-test-select.patch $(3RDP_ROOT)/build/cl-terminal-params.patch $(3RDP_ROOT)/build/cl-mingw32-static.patch $(3RDP_ROOT)/build/cl-ranlib.patch $(3RDP_ROOT)/build/cl-win32-noasm.patch $(3RDP_ROOT)/build/cl-zz-country.patch $(3RDP_ROOT)/build/cl-algorithms.patch $(3RDP_ROOT)/build/cl-allow-duplicate-ext.patch $(3RDP_ROOT)/build/cl-macosx-minver.patch $(3RDP_ROOT)/build/cl-posix-me-gently.patch $(3RDP_ROOT)/build/cl-PAM-noprompts.patch $(3RDP_ROOT)/build/cl-zlib.patch $(3RDP_ROOT)/build/cl-Dynamic-linked-static-lib.patch $(3RDP_ROOT)/build/cl-SSL-fix.patch $(3RDP_ROOT)/build/cl-bigger-maxattribute.patch $(3RDP_ROOT)/build/cl-endian.patch $(3RDP_ROOT)/build/cl-vcxproj.patch $(3RDP_ROOT)/build/cl-mingw-vcver.patch $(3RDP_ROOT)/build/cl-win32-build-fix.patch $(3RDP_ROOT)/build/cl-no-odbc.patch $(3RDP_ROOT)/build/cl-noasm-defines.patch $(3RDP_ROOT)/build/cl-bn-noasm64-fix.patch $(3RDP_ROOT)/build/cl-prefer-ECC.patch $(3RDP_ROOT)/build/cl-prefer-ECC-harder.patch $(3RDP_ROOT)/build/cl-clear-GCM-flag.patch $(3RDP_ROOT)/build/cl-use-ssh-ctr.patch $(3RDP_ROOT)/build/cl-ssl-suite-blocksizes.patch $(3RDP_ROOT)/build/cl-no-tpm.patch $(3RDP_ROOT)/build/cl-no-via-aes.patch $(3RDP_ROOT)/build/cl-fix-ssh-ecc-ephemeral.patch $(3RDP_ROOT)/build/cl-just-use-cc.patch $(3RDP_ROOT)/build/cl-no-safe-stack.patch $(3RDP_ROOT)/build/cl-allow-pkcs12.patch $(3RDP_ROOT)/build/cl-openbsd-threads.patch $(3RDP_ROOT)/build/cl-allow-none-auth.patch $(3RDP_ROOT)/build/cl-mingw-add-m32.patch $(3RDP_ROOT)/build/cl-poll-not-select.patch $(3RDP_ROOT)/build/cl-good-sockets.patch $(3RDP_ROOT)/build/cl-moar-objects.patch $(3RDP_ROOT)/build/cl-server-term-support.patch $(3RDP_ROOT)/build/cl-add-pubkey-attribute.patch $(3RDP_ROOT)/build/cl-allow-ssh-auth-retries.patch $(3RDP_ROOT)/build/cl-fix-ssh-channel-close.patch $(3RDP_ROOT)/build/cl-vt-lt-2005-always-defined.patch $(3RDP_ROOT)/build/cl-no-pie.patch $(3RDP_ROOT)/build/cl-no-testobjs.patch $(3RDP_ROOT)/build/cl-win32-lean-and-mean.patch $(3RDP_ROOT)/build/cl-thats-not-asm.patch $(3RDP_ROOT)/build/cl-make-channels-work.patch $(3RDP_ROOT)/build/cl-allow-ssh-2.0-go.patch $(3RDP_ROOT)/build/cl-read-timeout-every-time.patch $(3RDP_ROOT)/build/cl-allow-servercheck-pubkeys.patch $(3RDP_ROOT)/build/cl-pass-after-pubkey.patch $(3RDP_ROOT)/build/cl-ssh-list-ctr-modes.patch $(3RDP_ROOT)/build/cl-double-delete-fine-on-close.patch $(3RDP_ROOT)/build/cl-handle-unsupported-pubkey.patch $(3RDP_ROOT)/build/cl-add-patches-info.patch $(3RDP_ROOT)/build/cl-netbsd-hmac-symbol.patch $(3RDP_ROOT)/build/cl-netbsd-no-getfsstat.patch GNUmakefile $(3RDP_ROOT)/build/cl-remove-march.patch | $(CRYPT_SRC) $(CRYPT_IDIR)
+$(CRYPTLIB_BUILD): $(3RDP_ROOT)/dist/cryptlib.zip $(3RDP_ROOT)/build/cl-fix-test-select.patch $(3RDP_ROOT)/build/cl-terminal-params.patch $(3RDP_ROOT)/build/cl-mingw32-static.patch $(3RDP_ROOT)/build/cl-ranlib.patch $(3RDP_ROOT)/build/cl-win32-noasm.patch $(3RDP_ROOT)/build/cl-zz-country.patch $(3RDP_ROOT)/build/cl-algorithms.patch $(3RDP_ROOT)/build/cl-allow-duplicate-ext.patch $(3RDP_ROOT)/build/cl-macosx-minver.patch $(3RDP_ROOT)/build/cl-posix-me-gently.patch $(3RDP_ROOT)/build/cl-PAM-noprompts.patch $(3RDP_ROOT)/build/cl-zlib.patch $(3RDP_ROOT)/build/cl-Dynamic-linked-static-lib.patch $(3RDP_ROOT)/build/cl-SSL-fix.patch $(3RDP_ROOT)/build/cl-bigger-maxattribute.patch $(3RDP_ROOT)/build/cl-endian.patch $(3RDP_ROOT)/build/cl-vcxproj.patch $(3RDP_ROOT)/build/cl-mingw-vcver.patch $(3RDP_ROOT)/build/cl-win32-build-fix.patch $(3RDP_ROOT)/build/cl-no-odbc.patch $(3RDP_ROOT)/build/cl-noasm-defines.patch $(3RDP_ROOT)/build/cl-bn-noasm64-fix.patch $(3RDP_ROOT)/build/cl-prefer-ECC.patch $(3RDP_ROOT)/build/cl-prefer-ECC-harder.patch $(3RDP_ROOT)/build/cl-clear-GCM-flag.patch $(3RDP_ROOT)/build/cl-use-ssh-ctr.patch $(3RDP_ROOT)/build/cl-ssl-suite-blocksizes.patch $(3RDP_ROOT)/build/cl-no-tpm.patch $(3RDP_ROOT)/build/cl-no-via-aes.patch $(3RDP_ROOT)/build/cl-fix-ssh-ecc-ephemeral.patch $(3RDP_ROOT)/build/cl-just-use-cc.patch $(3RDP_ROOT)/build/cl-no-safe-stack.patch $(3RDP_ROOT)/build/cl-allow-pkcs12.patch $(3RDP_ROOT)/build/cl-openbsd-threads.patch $(3RDP_ROOT)/build/cl-allow-none-auth.patch $(3RDP_ROOT)/build/cl-mingw-add-m32.patch $(3RDP_ROOT)/build/cl-poll-not-select.patch $(3RDP_ROOT)/build/cl-good-sockets.patch $(3RDP_ROOT)/build/cl-moar-objects.patch $(3RDP_ROOT)/build/cl-server-term-support.patch $(3RDP_ROOT)/build/cl-add-pubkey-attribute.patch $(3RDP_ROOT)/build/cl-allow-ssh-auth-retries.patch $(3RDP_ROOT)/build/cl-fix-ssh-channel-close.patch $(3RDP_ROOT)/build/cl-vt-lt-2005-always-defined.patch $(3RDP_ROOT)/build/cl-no-pie.patch $(3RDP_ROOT)/build/cl-no-testobjs.patch $(3RDP_ROOT)/build/cl-win32-lean-and-mean.patch $(3RDP_ROOT)/build/cl-thats-not-asm.patch $(3RDP_ROOT)/build/cl-make-channels-work.patch $(3RDP_ROOT)/build/cl-allow-ssh-2.0-go.patch $(3RDP_ROOT)/build/cl-read-timeout-every-time.patch $(3RDP_ROOT)/build/cl-allow-servercheck-pubkeys.patch $(3RDP_ROOT)/build/cl-pass-after-pubkey.patch $(3RDP_ROOT)/build/cl-ssh-list-ctr-modes.patch $(3RDP_ROOT)/build/cl-double-delete-fine-on-close.patch $(3RDP_ROOT)/build/cl-handle-unsupported-pubkey.patch $(3RDP_ROOT)/build/cl-add-patches-info.patch $(3RDP_ROOT)/build/cl-netbsd-hmac-symbol.patch $(3RDP_ROOT)/build/cl-netbsd-no-getfsstat.patch GNUmakefile $(3RDP_ROOT)/build/cl-remove-march.patch $(3RDP_ROOT)/build/cl-add-win64.patch $(3RDP_ROOT)/build/cl-fix-mb-w-conv-warnings.patch | $(CRYPT_SRC) $(CRYPT_IDIR)
 	@echo Creating $@ ...
 	$(QUIET)-rm -rf $(CRYPT_SRC)/*
 	$(QUIET)unzip -oa $(3RDPDISTDIR)/cryptlib.zip -d $(CRYPT_SRC)
@@ -155,17 +155,26 @@ $(CRYPTLIB_BUILD): $(3RDP_ROOT)/dist/cryptlib.zip $(3RDP_ROOT)/build/cl-fix-test
 	$(QUIET)patch -b -p0 -d $(CRYPT_SRC) < cl-add-patches-info.patch
 	$(QUIET)patch -b -p0 -d $(CRYPT_SRC) < cl-netbsd-hmac-symbol.patch
 	$(QUIET)patch -b -p0 -d $(CRYPT_SRC) < cl-netbsd-no-getfsstat.patch
+	$(QUIET)patch -b -p0 -d $(CRYPT_SRC) < cl-add-win64.patch
+	$(QUIET)patch -b -p0 -d $(CRYPT_SRC) < cl-fix-mb-w-conv-warnings.patch
 	$(QUIET)perl -pi.bak -e 's/^(#define CRYPTLIB_VERSION.*)$$/"$$1\n#define CRYPTLIB_PATCHES \"" . (chomp($$val = `cat cl-*.patch | if (which md5sum > \/dev\/null 2>&1); then md5sum; else md5; fi`), $$val) . "\""/e' $(CRYPT_SRC)/cryptlib.h
 ifeq ($(os),win32)
 	$(QUIET)cd $(CRYPT_SRC) && env - PATH="$(PATH)" CC="$(CC)" AR="$(AR)" RANLIB="$(RANLIB)" make directories
 	$(QUIET)cd $(CRYPT_SRC) && env - PATH="$(PATH)" CC="$(CC)" AR="$(AR)" RANLIB="$(RANLIB)" make toolscripts
 	$(QUIET)cd $(CRYPT_SRC) && env - PATH="$(PATH)" CC="$(CC)" AR="$(AR)" RANLIB="$(RANLIB)" make MINGW32_NT-6.1 OSNAME=win32
 else
+ifeq ($(os),win64)
+	$(QUIET)cd $(CRYPT_SRC) && ln -s win32.c random/win64.c
+	$(QUIET)cd $(CRYPT_SRC) && env - PATH="$(PATH)" CC="$(CC)" AR="$(AR)" RANLIB="$(RANLIB)" make directories
+	$(QUIET)cd $(CRYPT_SRC) && env - PATH="$(PATH)" CC="$(CC)" AR="$(AR)" RANLIB="$(RANLIB)" make toolscripts
+	$(QUIET)cd $(CRYPT_SRC) && env - PATH="$(PATH)" CC="$(CC)" AR="$(AR)" RANLIB="$(RANLIB)" make MINGW64_NT-6.1 OSNAME=win64
+else
 ifdef MINGW32
 	$(QUIET)cd $(CRYPT_SRC) && env - PATH="$(PATH)" CC="$(CC)" AR="$(AR)" RANLIB="$(RANLIB)" make target-mingw
 else
 	$(QUIET)cd $(CRYPT_SRC) && env - PATH="$(PATH)" CC="$(CC)" AR="$(AR)" RANLIB="$(RANLIB)" make
 endif
+endif
 endif
 	$(QUIET)cp $(CRYPT_SRC)/libcl.a $(CRYPT_IDIR)
 	$(QUIET)cp $(CRYPT_SRC)/cryptlib.h $(CRYPT_IDIR)
diff --git a/3rdp/build/cl-add-win64.patch b/3rdp/build/cl-add-win64.patch
new file mode 100644
index 0000000000000000000000000000000000000000..07dbaec7f192acfcb3128c9c40f86205c4f52626
--- /dev/null
+++ b/3rdp/build/cl-add-win64.patch
@@ -0,0 +1,18 @@
+--- makefile.orig	2024-02-20 20:08:15.914584000 -0500
++++ makefile	2024-02-20 20:09:10.012487000 -0500
+@@ -2140,6 +2140,15 @@
+ 	$(MAKE) OSNAME=win32 $(DEFINES) EXTRAOBJS="$(WIN32ASMOBJS)" \
+ 		CFLAGS="$(XCFLAGS) -O2 -m32 -Wl,--subsystem,windows,--output-def,cl32.def -DSTATIC_LIB"
+ 
++MINGW64_NT-5.1:
++	$(MAKE) OSNAME=win64 target-init
++	$(MAKE) $(DEFINES) CFLAGS="$(XCFLAGS) -O2 -m64"
++
++MINGW64_NT-6.1:
++	$(MAKE) OSNAME=win64 target-init
++	$(MAKE) OSNAME=win64 $(DEFINES) EXTRAOBJS="$(WIN32ASMOBJS)" \
++		CFLAGS="$(XCFLAGS) -O2 -m64 -Wl,--subsystem,windows,--output-def,cl32.def -DSTATIC_LIB"
++
+ # NCR MP-RAS: Use the NCR cc.  The "-DNCR_UST" is needed to enable threading
+ #			  (User-Space Threads).
+ 
diff --git a/3rdp/build/cl-fix-mb-w-conv-warnings.patch b/3rdp/build/cl-fix-mb-w-conv-warnings.patch
new file mode 100644
index 0000000000000000000000000000000000000000..71bdbc7c0b243c883c688990bcbe32a7d2a07211
--- /dev/null
+++ b/3rdp/build/cl-fix-mb-w-conv-warnings.patch
@@ -0,0 +1,33 @@
+--- misc/os_spec.h.orig	2024-02-20 21:13:23.001994000 -0500
++++ misc/os_spec.h	2024-02-20 21:15:43.649318000 -0500
+@@ -1164,10 +1164,12 @@
+   #endif /* OpenBSD safe string functions */
+ 
+   /* Widechar functions */
++#if (!defined(__GNUC__)) || (__GNUC__ < 5)
+   int mbstowcs_s( size_t *retval, wchar_t *dst, size_t dstmax, 
+ 				  const char *src, size_t len );
+   int wcstombs_s( size_t *retval, char *dst, size_t dstmax, 
+ 				  const wchar_t *src, size_t len );
++#endif
+   #if defined( USE_EMBEDDED_OS )
+     /* Support for the thread-safe mbtowc() is practially nonexistent in
+ 	   embedded OSes, but in any case is unlikely to be necessary since
+--- misc/int_string.c.orig	2024-02-20 21:26:17.818569000 -0500
++++ misc/int_string.c	2024-02-20 21:27:13.057203000 -0500
+@@ -475,6 +475,7 @@
+ ****************************************************************************/
+ 
+ #ifndef __STDC_LIB_EXT1__
++#if (!defined(__GNUC__)) || (__GNUC__ < 5)
+ 
+ /* Minimal wrappers for the TR 24731 functions to map them to older stdlib 
+    equivalents.  Because of potential issues when comparing a (signed)
+@@ -532,6 +533,7 @@
+ 	*retval = bytesCopied;
+ 	return( 0 );
+ 	}
++#endif
+ #endif /* !__STDC_LIB_EXT1__ */
+ 
+ /****************************************************************************
diff --git a/src/build/Common.gmake b/src/build/Common.gmake
index 8a8be866c6048b6fa4f94e4a3efb000baa75d233..6afa9a471ae6d6e75bacece325965c3f159dca1c 100644
--- a/src/build/Common.gmake
+++ b/src/build/Common.gmake
@@ -215,16 +215,28 @@ else
 endif
 BUILDPATH	?=	$(BUILD)
 
-gcc_machine		:= $(findstring mingw32,$(shell ${CC} -dumpmachine))
-gcc_w64                 := $(findstring w64,$(shell ${CC} -dumpmachine))
+gcc_machine := $(findstring mingw32,$(shell ${CC} -dumpmachine))
+gcc_w64     := $(findstring w64,$(shell ${CC} -dumpmachine))
+gcc_x86_64  := $(findstring x86_64,$(shell ${CC} -dumpmachine))
 ifeq ($(gcc_machine),mingw32)
- os		:= Win32
- CFLAGS	+=	-DMSVCRT_VERSION=0x0800 -m32
+ CFLAGS	+=	-DMSVCRT_VERSION=0x0800
+ ifeq ($(gcc_x86_64),x86_64)
+  os            := Win64
+  win           := 64
+  CFLAGS        += -m64
+  LDFLAGS       += -m64
+  machine_uname := x64
+ else
+  os            := Win32
+  win           := 32
+  CFLAGS        += -m32
+  LDFLAGS       += -m32
+  WINDRESFLAGS  += -Fpe-i386
+  machine_uname := x86
+ endif
  ifeq ($(gcc_w64),w64)
   CFLAGS += -DDISABLE_MKSTEMP_DEFINE
  endif
- LDFLAGS+=	-m32
- WINDRESFLAGS+=	-Fpe-i386
 endif
 
 # Get OS
@@ -233,14 +245,14 @@ ifndef os
 endif
 os      :=	$(shell echo $(os) | tr '[A-Z]' '[a-z]' | tr ' ' '_')
 
-ifneq ($(os),win32)
+ifndef win
  ifneq ($(os),darwin)
   CFLAGS +=	-DPREFER_POLL
  endif
+ machine_uname	:=	$(shell if uname -m | egrep -v "(i[3456789]*|x)86" > /dev/null; then uname -m | tr "[A-Z]" "[a-z]" | tr " " "_" ; fi)
+ machine_uname	:=	$(shell if uname -m | egrep "64" > /dev/null; then uname -m | tr "[A-Z]" "[a-z]" | tr " " "_" ; else echo $(machine_uname) ; fi)
 endif
 
-machine_uname	:=	$(shell if uname -m | egrep -v "(i[3456789]*|x)86" > /dev/null; then uname -m | tr "[A-Z]" "[a-z]" | tr " " "_" ; fi)
-machine_uname	:=	$(shell if uname -m | egrep "64" > /dev/null; then uname -m | tr "[A-Z]" "[a-z]" | tr " " "_" ; else echo $(machine_uname) ; fi)
 ifeq ($(os),darwin)
  ifeq ("$(machine_uname)","")
   ifeq ($(shell sysctl hw.optional.x86_64),hw.optional.x86_64: 1)
@@ -252,7 +264,7 @@ endif
 ifeq ($(machine_uname),x86_64)
  machine_uname	:= x64
 endif
-ifneq ($(os), win32)
+ifndef win
  CFLAGS +=	-fpic
 endif
 ifeq ($(machine_uname),sparc64)
@@ -313,7 +325,7 @@ endif
 LIBPREFIX	:= lib
 DIRSEP		:= /
 OFILE		:= .o
-ifeq ($(os),win32)
+ifdef win
  EXEFILE		:= .exe
 else
  ifeq ($(os),emscripten)
@@ -406,7 +418,7 @@ else
       # This makes ctime_r() be the correct one.
       #CFLAGS	   += -D_POSIX_PTHREAD_SEMANTICS
      else
-      ifeq ($(os),win32) # Windows
+      ifdef win # Windows
        CFLAGS		+= -U__STRICT_ANSI__ -D_WIN32 -D_WIN32_WINNT=0x0501 -DWINVER=0x0501 -D_WIN32_IE=0x0500
        MT_CFLAGS	+= -D_WIN32
       else
diff --git a/src/conio/Common.gmake b/src/conio/Common.gmake
index 1a2dbb70e9e1b000e68d22e710bd75e846670655..22383686b55efd8d9b86a870a290b0b8abfe7c09 100644
--- a/src/conio/Common.gmake
+++ b/src/conio/Common.gmake
@@ -20,11 +20,11 @@ endif
 ifeq ($(os),openbsd)
  CFLAGS += -DHAVE_VASPRINTF
 endif
-ifeq ($(os),win32)
+ifdef win
  CFLAGS += -I${3RDP_ROOT}/win32.release/sdl2/include
 endif
 
-ifneq ($(os),win32)
+ifndef win
  ifeq ($(shell pkg-config ncursesw --exists && echo YES), YES)
   CIOLIB-MT_LIBS += $(shell pkg-config ncursesw --libs)
   CIOLIB-MT_CFLAGS += $(shell pkg-config ncursesw --cflags)
@@ -56,9 +56,9 @@ ifneq ($(os),win32)
    endif
   endif
  else
-   ifeq ($(os),darwin)
-    CIOLIB-MT_CFLAGS		+=  -DDISABLE_X11=1
-   endif
+  ifeq ($(os),darwin)
+   CIOLIB-MT_CFLAGS		+=  -DDISABLE_X11=1
+  endif
  endif
 else
  NO_X			 :=  1
@@ -165,7 +165,7 @@ ifdef WITH_SDL
    CIOLIB_CFLAGS	+=	-I${SDL_FRAMEWORK_PATH}/SDL2.framework/Headers
    CIOLIB_LIBS	+=	-F${SDL_FRAMEWORK_PATH} -framework SDL2 -I${SDL_FRAMEWORK_PATH}/SDL2.framework/Headers
   else
-   ifeq ($(os),win32)
+   ifdef win
     CIOLIB-MT_CFLAGS	+=	-DWITH_SDL
     WITH_SDL	:=	1
     CIOLIB_CFLAGS	+=	-DWITH_SDL
diff --git a/src/conio/GNUmakefile b/src/conio/GNUmakefile
index 0c7062c36b799431bb80e7db8da2c644f89432a3..75dc5708470e4944175df3ee5eaba21c28a0e380 100644
--- a/src/conio/GNUmakefile
+++ b/src/conio/GNUmakefile
@@ -5,7 +5,7 @@ include $(SRC_ROOT)/build/Common.gmake	# defines clean and output directory rule
 CFLAGS += $(XPDEV-MT_CFLAGS) $(HASH_CFLAGS) $(ENCODE_CFLAGS) $(CIOLIB-MT_CFLAGS)
 VPATH = $(SRCODIR)
 
-ifeq ($(os),win32)
+ifdef win
  ifndef WITHOUT_GDI
   OBJS	+=	$(MTOBJODIR)$(DIRSEP)win32gdi$(OFILE)
   NEED_BITMAP := 1
@@ -59,7 +59,7 @@ $(CIOLIB-MT_SHLIB_BUILD): $(MTOBJODIR) $(OBJS)
 	@echo Creating $@
 	$(QUIET)$(MKSHLIB) $(LDFLAGS) $(OBJS) $(SHLIBOPTS) -o $@
 
-ifeq ($(os),win32)
+ifdef win
 mtlib: $(MTOBJODIR)$(DIRSEP)ciolib_res${OFILE}
 
 dl-mtlib: $(MTOBJODIR)$(DIRSEP)ciolib_res${OFILE}
diff --git a/src/syncterm/GNUmakefile b/src/syncterm/GNUmakefile
index 7733fe161bd27ecad78c625335117f71d8a6bc5e..1494068dcabe55c6502e591de3813dc42ee8885a 100644
--- a/src/syncterm/GNUmakefile
+++ b/src/syncterm/GNUmakefile
@@ -70,7 +70,7 @@ else
 endif
 INSTALL_DATA	?=	install -m 0644
 
-ifeq ($(os),win32)
+ifdef win
  OBJS	+= $(MTOBJODIR)$(DIRSEP)comio_win32$(OFILE) \
            $(MTOBJODIR)$(DIRSEP)modem$(OFILE) \
            $(MTOBJODIR)$(DIRSEP)comio$(OFILE) \
@@ -88,15 +88,15 @@ ifndef bcc
  ifneq ($(os),sunos)
   ifneq ($(os),darwin)
    ifneq ($(os),haiku)
-    ifneq ($(os),win32)
-      EXTRA_LIBS   +=  -lutil
+    ifndef win
+     EXTRA_LIBS   +=  -lutil
     endif
    endif
   endif
  endif
 endif
 
-ifeq ($(os),win32)
+ifdef win
  EXTRA_LIBS += -luuid
 endif
 
@@ -202,7 +202,7 @@ syncterm-clean:
 
 clean: syncterm-clean
 
-ifeq ($(os),win32)
+ifdef win
 $(MTOBJODIR)$(DIRSEP)syncterm_res${OFILE}: syncterm.rc
 	@echo Creating $< ...
 	$(QUIET)${WINDRES} $(WINDRESFLAGS) -O coff -i syncterm.rc -o $@
diff --git a/src/xpdev/Common.gmake b/src/xpdev/Common.gmake
index 17b2e6ce6688f959025d026211be446228074225..ca427c37816bbeccd84b1b389b2c73adbe785caf 100644
--- a/src/xpdev/Common.gmake
+++ b/src/xpdev/Common.gmake
@@ -28,11 +28,11 @@ endif
 ifeq ($(os),linux)	# Linux
  XPDEV-MT_LIBS	+=	-lpthread
 endif
-ifeq ($(os),win32)	# MinGW32
+ifdef win		# MinGW32
  XPDEV_LIBS	+=	-lws2_32 -lwinmm -lnetapi32 -liphlpapi
  XPDEV-MT_LIBS	+=	-lws2_32 -lwinmm -lnetapi32 -liphlpapi
 endif
-ifneq ($(os),win32)
+ifndef win
  ifeq ($(shell if [ -c /dev/urandom ] ; then echo YES ; fi),YES)
   XPDEV-MT_CFLAGS	+=	-DHAS_DEV_URANDOM -DURANDOM_DEV=\"/dev/urandom\"
   XPDEV_CFLAGS		+=	-DHAS_DEV_URANDOM -DURANDOM_DEV=\"/dev/urandom\"
diff --git a/src/xpdev/GNUmakefile b/src/xpdev/GNUmakefile
index f3425978211b469cceed1a04b2d080d3617a1c06..df7466d16e79efd2a76435a5cddb81efed0c3ca5 100644
--- a/src/xpdev/GNUmakefile
+++ b/src/xpdev/GNUmakefile
@@ -4,7 +4,7 @@ include $(SRC_ROOT)/build/Common.gmake
 ifdef XP_SEM
 	MTOBJS	+=	$(MTOBJODIR)$(DIRSEP)xpsem$(OFILE)
 endif
-ifneq ($(os),win32)
+ifndef win
  MTOBJS	+=	$(MTOBJODIR)$(DIRSEP)xpevent$(OFILE)
 endif