diff -ur ghostscript-9.50.orig/base/fapi_ft.c ghostscript-9.50/base/fapi_ft.c
--- ghostscript-9.50.orig/base/fapi_ft.c	2020-12-27 14:29:32.714236780 -0500
+++ ghostscript-9.50/base/fapi_ft.c	2020-12-27 14:30:34.503600642 -0500
@@ -125,6 +125,10 @@
 delete_inc_int_info(gs_fapi_server * a_server,
                     FT_IncrementalRec * a_inc_int_info);
 
+#ifndef FT_CALLBACK_DEF
+  #define FT_CALLBACK_DEF(X) X
+#endif
+
 FT_CALLBACK_DEF(void *)
 FF_alloc(FT_Memory memory, long size)
 {
diff -ur ghostscript-9.50.orig/base/gp_unix.c ghostscript-9.50/base/gp_unix.c
--- ghostscript-9.50.orig/base/gp_unix.c	2020-12-27 14:29:32.703236181 -0500
+++ ghostscript-9.50/base/gp_unix.c	2020-12-27 18:25:25.242079971 -0500
@@ -16,6 +16,9 @@
 
 /* Unix-specific routines for Ghostscript */
 
+#ifdef __MINGW32__
+#  include "windows_.h"
+#endif
 #include "pipe_.h"
 #include "string_.h"
 #include "time_.h"
@@ -466,3 +469,54 @@
     }
 #endif
 }
+
+/* A function to decode the next codepoint of the supplied args from the
+ * local windows codepage, or -1 for EOF.
+ * (copied from gp_win32.c)
+ */
+
+#ifdef __MINGW32__
+int
+gp_local_arg_encoding_get_codepoint(gp_file *file, const char **astr)
+{
+    int len;
+    int c;
+    char arg[3];
+    wchar_t unicode[2];
+    char utf8[4];
+
+    if (file) {
+        c = fgetc(file);
+        if (c == EOF)
+            return EOF;
+    } else if (**astr) {
+        c = *(*astr)++;
+        if (c == 0)
+            return EOF;
+    } else {
+        return EOF;
+    }
+
+    arg[0] = c;
+    if (IsDBCSLeadByte(c)) {
+        if (file) {
+            c = fgetc(file);
+            if (c == EOF)
+                return EOF;
+        } else if (**astr) {
+            c = *(*astr)++;
+            if (c == 0)
+                return EOF;
+        }
+        arg[1] = c;
+        len = 2;
+    } else {
+        len = 1;
+    }
+
+    /* Convert the string (unterminated in, unterminated out) */
+    len = MultiByteToWideChar(CP_ACP, 0, arg, len, unicode, 2);
+
+    return unicode[0];
+}
+#endif /* __MINGW32__ */
Only in ghostscript-9.50/base: gp_unix.c.orig
diff -ur ghostscript-9.50.orig/base/unix-aux.mak ghostscript-9.50/base/unix-aux.mak
--- ghostscript-9.50.orig/base/unix-aux.mak	2020-12-27 14:29:32.718236997 -0500
+++ ghostscript-9.50/base/unix-aux.mak	2020-12-27 18:25:25.242079971 -0500
@@ -57,23 +57,29 @@
 # -------------------------- Auxiliary programs --------------------------- #
 
 $(ECHOGS_XE): $(GLSRC)echogs.c $(AK) $(stdpre_h) $(UNIX_AUX_MAK) $(MAKEDIRS)
+	test -e $(ECHOGS_XE) || \
 	$(CCAUX_) $(I_)$(GLSRCDIR)$(_I) $(O_)$(ECHOGS_XE) $(GLSRC)echogs.c $(AUXEXTRALIBS)
 
 $(PACKPS_XE): $(GLSRC)pack_ps.c $(stdpre_h) $(UNIX_AUX_MAK) $(MAKEDIRS)
+	test -e $(PACKPS_XE) || \
 	$(CCAUX_) $(I_)$(GLSRCDIR)$(_I) $(O_)$(PACKPS_XE) $(GLSRC)pack_ps.c $(AUXEXTRALIBS)
 
 # On the RS/6000 (at least), compiling genarch.c with gcc with -O
 # produces a buggy executable.
 $(GENARCH_XE): $(GLSRC)genarch.c $(AK) $(GENARCH_DEPS) $(UNIX_AUX_MAK) $(MAKEDIRS)
+	test -e $(GENARCH_XE) || \
 	$(CCAUX_) $(I_)$(GLSRCDIR)$(_I) $(O_)$(GENARCH_XE) $(GLSRC)genarch.c $(AUXEXTRALIBS)
 
 $(GENCONF_XE): $(GLSRC)genconf.c $(AK) $(GENCONF_DEPS) $(UNIX_AUX_MAK) $(MAKEDIRS)
+	test -e $(GENCONF_XE) || \
 	$(CCAUX_) $(I_)$(GLSRCDIR)$(_I) $(O_)$(GENCONF_XE) $(GLSRC)genconf.c $(AUXEXTRALIBS)
 
 $(GENDEV_XE): $(GLSRC)gendev.c $(AK) $(GENDEV_DEPS) $(UNIX_AUX_MAK) $(MAKEDIRS)
+	test -e $(GENDEV_XE) || \
 	$(CCAUX_) $(I_)$(GLSRCDIR)$(_I) $(O_)$(GENDEV_XE) $(GLSRC)gendev.c $(AUXEXTRALIBS)
 
 $(GENHT_XE): $(GLSRC)genht.c $(AK) $(GENHT_DEPS) $(UNIX_AUX_MAK) $(MAKEDIRS)
+	test -e $(GENHT_XE) || \
 	$(CCAUX_) $(GENHT_CFLAGS) $(O_)$(GENHT_XE) $(GLSRC)genht.c $(AUXEXTRALIBS)
 
 # To get GS to use the system zlib, you remove/hide the gs/zlib directory
@@ -84,6 +90,7 @@
  $(AUX)gp_stdia.$(OBJ) $(AUX)gsutil.$(OBJ) $(AUX)memento.$(OBJ)
 
 $(MKROMFS_XE)_0: $(GLSRC)mkromfs.c $(MKROMFS_COMMON_DEPS) $(MKROMFS_OBJS_0) $(UNIX_AUX_MAK) $(MAKEDIRS)
+	test -e $(MKROMFS_XE)_0 || \
 	$(CCAUX_) $(GENOPTAUX) $(I_)$(GLSRCDIR)$(_I) $(I_)$(GLOBJ)$(_I) $(I_)$(ZSRCDIR)$(_I) $(GLSRC)mkromfs.c $(O_)$(MKROMFS_XE)_0 $(MKROMFS_OBJS_0) $(AUXEXTRALIBS)
 
 # .... and one using the zlib library linked via the command line
@@ -93,9 +100,11 @@
  $(AUX)gp_stdia.$(OBJ) $(AUX)gsutil.$(OBJ)
 
 $(MKROMFS_XE)_1: $(GLSRC)mkromfs.c $(MKROMFS_COMMON_DEPS) $(MKROMFS_OBJS_1) $(UNIX_AUX_MAK) $(MAKEDIRS)
+	test -e $(MKROMFS_XE)_1 || \
 	$(CCAUX_) $(GENOPTAUX) $(I_)$(GLSRCDIR)$(_I) $(I_)$(GLOBJ)$(_I) $(I_)$(ZSRCDIR)$(_I) $(GLSRC)mkromfs.c $(O_)$(MKROMFS_XE)_1 $(MKROMFS_OBJS_1) $(AUXEXTRALIBS)
 
 $(MKROMFS_XE): $(MKROMFS_XE)_$(SHARE_ZLIB) $(UNIX_AUX_MAK) $(MAKEDIRS)
+	test -e $(MKROMFS_XE) || \
 	$(CP_) $(MKROMFS_XE)_$(SHARE_ZLIB) $(MKROMFS_XE)
 
 # Query the environment to construct gconfig_.h.
diff -ur ghostscript-9.50.orig/base/unix-dll.mak ghostscript-9.50/base/unix-dll.mak
--- ghostscript-9.50.orig/base/unix-dll.mak	2020-12-27 14:29:32.690235473 -0500
+++ ghostscript-9.50/base/unix-dll.mak	2020-12-27 18:25:25.242079971 -0500
@@ -66,9 +66,6 @@
 GS_SOEXT=$(SO_LIB_EXT)
 GS_DLLEXT=$(DLL_EXT)
 
-GS_SONAME=$(GS_SONAME_BASE)$(GS_SOEXT)$(GS_DLLEXT)
-GS_SONAME_MAJOR=$(GS_SONAME_BASE)$(GS_SOEXT)$(SO_LIB_VERSION_SEPARATOR)$(GS_VERSION_MAJOR)$(GS_DLLEXT)
-GS_SONAME_MAJOR_MINOR=$(GS_SONAME_BASE)$(GS_SOEXT)$(SO_LIB_VERSION_SEPARATOR)$(GS_VERSION_MAJOR)$(SO_LIB_VERSION_SEPARATOR)$(GS_VERSION_MINOR)$(GS_DLLEXT)
 
 PCL_SONAME=$(PCL_SONAME_BASE)$(GS_SOEXT)$(GS_DLLEXT)
 PCL_SONAME_MAJOR=$(PCL_SONAME_BASE)$(GS_SOEXT)$(SO_LIB_VERSION_SEPARATOR)$(GS_VERSION_MAJOR)$(GS_DLLEXT)
diff -ur ghostscript-9.50.orig/configure.ac ghostscript-9.50/configure.ac
--- ghostscript-9.50.orig/configure.ac	2020-12-27 14:29:32.689235419 -0500
+++ ghostscript-9.50/configure.ac	2020-12-27 18:25:25.243080026 -0500
@@ -23,6 +23,7 @@
 AC_PREREQ(2.63)
 AC_LANG(C)
 AC_CONFIG_SRCDIR(psi/gs.c)
+AC_CANONICAL_HOST
 
 dnl Inherit compiler flags from the environment...
 CFLAGS="${CFLAGS:=}"
@@ -125,8 +126,11 @@
 
 # purposefully do not include "help" output for this
 AC_ARG_ENABLE([save_confaux])
+AC_ARG_ENABLE([auxtools_only])
 
-if test x"$CCAUX" != x"" ; then
+absolute_source_path=$(cd "$(dirname "$0")" && pwd)
+
+if test x"$host" != x"$build" ; then
   # rerun configure for the AUX tools, disabling a load of tests not relevant for CCAUX
   olddir=`pwd`
   if test x"$enable_save_confaux" = x"yes"; then
@@ -146,9 +150,10 @@
   echo $AUXFLAGS_MAK_LINE06 >> $AUXFLAGS_MAK.in
   echo $AUXFLAGS_MAK_LINE07 >> $AUXFLAGS_MAK.in
 
-  ../$0 CC="$CCAUX" CFLAGS="$CFLAGSAUX" LDFLAGS="$LDFLAGSAUX" CCAUX= CFLAGSAUX= CFLAGSAUX= MAKEFILE=$AUXFLAGS_MAK --host= --build= --without-libtiff --disable-contrib --disable-fontconfig --disable-dbus --disable-freetype --disable-fapi --disable-cups --disable-openjpeg --disable-gtk --with-libiconv=no --without-libidn --without-libpaper --without-pdftoraster --without-ijs --without-luratech --without-jbig2dec --without-x --with-drivers=""
+  AC_MSG_NOTICE([Begin recursive call to configure script (for auxiliary tools)])
+  "$absolute_source_path/configure" CC="$CCAUX" CFLAGS="$CFLAGSAUX" LDFLAGS="$LDFLAGSAUX" CCAUX= CFLAGSAUX= CFLAGSAUX= MAKEFILE=$AUXFLAGS_MAK --host=$build --build=$build --enable-auxtools_only --with-local-zlib --without-libtiff --disable-contrib --disable-fontconfig --disable-dbus --disable-freetype --disable-fapi --disable-cups --disable-openjpeg --disable-gtk --with-libiconv=no --without-libidn --without-libpaper --without-pdftoraster --without-ijs --without-luratech --without-jbig2dec --without-x --with-drivers=""
   status=$?
-  cp config.log ../configaux.log
+  cp config.log $olddir/configaux.log
   if test $status -eq 0 ; then
     CCAUX=$(grep CCAUX $AUXFLAGS_MAK | sed "s/CCAUX=//g")
     GCFLAGSAUXTMP=$(grep GCFLAGSAUX $AUXFLAGS_MAK | sed "s/GCFLAGSAUX=//g")
@@ -204,7 +209,7 @@
 # but if we are cross compiling, and there isn't a matching
 # pkconfig for the --host setting, then don't use the 'local'
 # pkconfig at all
-if test x"$cross_compiling" = x"yes"; then
+if test x"$host" != x"$build" ; then
   AC_PATH_PROG(BUILD_PKGCONFIG, pkg-config)
   if test x"$BUILD_PKGCONFIG" = x"$PKGCONFIG" ; then
     PKGCONFIG=
@@ -217,7 +222,7 @@
 # but if we are cross compiling, and there isn't a matching
 # pkconfig for the --host setting, then don't use the 'local'
 # pkconfig at all
-if test x"$cross_compiling" = x"yes"; then
+if test x"$host" != x"$build" ; then
   AC_PATH_PROG(BUILD_STRIP_XE, strip)
   if test x"$BUILD_STRIP_XE" = x"$STRIP_XE" ; then
     STRIP_XE=
@@ -234,18 +239,14 @@
 INSTALL_CONTRIB="install-contrib-extras"
 
 if test x"$enable_contrib" = x; then
-  if test x"$cross_compiling" = x"yes"; then
-    enable_contrib=
-  else
-    case `uname` in
-      MINGW*|MSYS*)
+    case $host in
+      *-mingw*|*-msys*|*-cygwin*)
         AC_MSG_WARN([disabling contrib devices])
         enable_contrib=no
       ;;
       *)
       ;;
     esac
-  fi
 fi
 
 if test x"$enable_contrib" != x"no"; then
@@ -274,26 +275,27 @@
 CC_OPT_FLAGS_TO_TRY="-O"
 SET_DT_SONAME="-soname="
 
-if test x"$cross_compiling" = x"yes"; then
-  if test $ac_cv_prog_gcc = yes; then
-      CC_OPT_FLAGS_TO_TRY="-O2"
-      CC_DBG_FLAGS_TO_TRY="-gdwarf-2 -g3 -O0"
-  fi
-else
-  case `uname` in
-        Linux*|GNU*)
+  case $host in
+        *-mingw*|*-msys*|*-cygwin*)
         if test $ac_cv_prog_gcc = yes; then
             CC_OPT_FLAGS_TO_TRY="-O2"
             CC_DBG_FLAGS_TO_TRY="-gdwarf-2 -g3 -O0"
         fi
+        SET_DT_SONAME=""
         ;;
-        *BSD)
+        *-linux*|*-gnu)
+        if test $ac_cv_prog_gcc = yes; then
+            CC_OPT_FLAGS_TO_TRY="-O2"
+            CC_DBG_FLAGS_TO_TRY="-gdwarf-2 -g3 -O0"
+        fi
+        ;;
+        *bsd*)
         if test $ac_cv_prog_gcc = yes; then
             CC_OPT_FLAGS_TO_TRY="-O2"
             CC_DBG_FLAGS_TO_TRY="-gdwarf-2 -g3 -O0"
         fi
         ;;
-        Darwin*)
+        *-darwin*)
         if test $ac_cv_prog_gcc = yes; then
             CC_OPT_FLAGS_TO_TRY="-O2"
             CC_DBG_FLAGS_TO_TRY="-gdwarf-2 -g3 -O0"
@@ -321,7 +323,6 @@
         fi
         ;;
   esac
-fi
 
 AC_SUBST(SET_DT_SONAME)
 
@@ -368,18 +369,20 @@
 ARCH_CONF_HEADER=
 
 if test x"$with_arch_h" = x""; then
-  if test x"$cross_compiling" = x"yes"; then
-    ARCH_CONF_HEADER="\$(GLSRCDIR)/../$ARCH_AUTOCONF_HEADER"
-  else
-    case `uname` in
-          Darwin*)
+  case $host in
+          x86_64*-mingw*|x86_64*-msys*|x86_64*-cygwin*)
+            ARCH_CONF_HEADER="\$(GLSRCDIR)/../arch/windows-x64-msvc.h"
+          ;;
+          *-mingw*|*-msys*|*-cygwin*)
+            ARCH_CONF_HEADER="\$(GLSRCDIR)/../arch/windows-x86-msvc.h"
+          ;;
+          *-darwin*)
             ARCH_CONF_HEADER="\$(GLSRCDIR)/../arch/osx-x86-x86_64-ppc-gcc.h"
           ;;
           *)
             ARCH_CONF_HEADER=
           ;;
     esac
-  fi
 else
   ARCH_CONF_HEADER=$with_arch_h
 fi
@@ -658,15 +661,7 @@
 dnl configure scripts we might call
 dnl --------------------------------------------------
 
-SUBCONFIG_OPTS=""
-
-if test x"$build_alias" != x""; then
-  SUBCONFIG_OPTS="$SUBCONFIG_OPTS --build=$build_alias"
-fi
-
-if test x"$host_alias" != x""; then
-  SUBCONFIG_OPTS="$SUBCONFIG_OPTS --host=$host_alias"
-fi
+SUBCONFIG_OPTS="--build=$build --host=$host"
 
 dnl --------------------------------------------------
 dnl Check for libraries
@@ -996,7 +991,7 @@
             if $PKGCONFIG --atleast-version=12.0.6 freetype2; then
                 AC_MSG_RESULT(yes)
                 FT_CFLAGS="$CFLAGS `$PKGCONFIG --cflags freetype2`"
-                FT_LIBS="`$PKGCONFIG --libs freetype2`"
+                FT_LIBS="`$PKGCONFIG --libs-only-l freetype2`"
                 FT_BRIDGE=1
                 SHARE_FT=1
             else
@@ -1047,6 +1042,14 @@
 AC_SUBST(FT_CFLAGS)
 AC_SUBST(FT_LIBS)
 
+if test x"$enable_auxtools_only" = x"yes" ; then
+  LIBJPEGDIR=
+  SHARE_LIBJPEG=0
+  AC_DEFINE([DONT_HAVE_JMEMSYS_H], 1, [])
+  AC_SUBST(SHARE_LIBJPEG)
+  AC_SUBST(LIBJPEGDIR)
+else
+
 AC_MSG_CHECKING([for local jpeg library source])
 dnl At present, we give the local source priority over the shared
 dnl build, so that the D_MAX_BLOCKS_IN_MCU patch will be applied.
@@ -1088,6 +1091,13 @@
     [define if the libjpeg memory system prototypes aren't available])
 fi
 
+fi # $enable_auxtools_only
+
+# this option is useful if you're cross-compiling and want to use
+# your toolchain's zlib for $host but the local one for $build
+AC_ARG_WITH([local-zlib], AC_HELP_STRING([--without-local-zlib],
+  [do not check for local zlib sources (has no effect on AUX toolchain when cross-building)]))
+
 AC_MSG_CHECKING([for local zlib source])
 dnl zlib is needed for language level 3, and libpng
 # we must define ZLIBDIR regardless because png.mak does a -I$(ZLIBDIR)
@@ -1096,6 +1106,13 @@
 AUX_SHARED_ZLIB=
 ZLIBCFLAGS=""
 
+if test x"$with_local_zlib" = x"no" ; then
+  AC_MSG_RESULT([skip])
+  AC_CHECK_LIB(z, deflate, [
+    AC_CHECK_HEADERS(zlib.h, [SHARE_ZLIB=1; AUX_SHARED_ZLIB="-l\$(ZLIB_NAME)"])
+  ])
+else
+
 if test -d $srcdir/zlib; then
         AC_MSG_RESULT([yes])
         SHARE_ZLIB=0
@@ -1110,6 +1127,9 @@
           AC_CHECK_HEADERS(zlib.h, [SHARE_ZLIB=1; AUX_SHARED_ZLIB="-l\$(ZLIB_NAME)"])
         ])
 fi
+
+fi # $with_local_zlib
+
 if test -z "$SHARE_ZLIB"; then
   AC_MSG_ERROR([I did not find a copy of zlib on your system.
   Please either install it, or unpack a copy of the source in a
@@ -1136,6 +1156,11 @@
 AC_SUBST(FT_SYS_ZLIB)
 
 dnl png for the png output device; it also requires zlib
+if test x"$enable_auxtools_only" = x"yes" ; then
+  LIBPNGDIR=""
+  SHARE_LIBPNG=0
+else
+
 LIBPNGDIR=src
 PNGDEVS=''
 PNGDEVS_ALL='png48 png16m pnggray pngmono pngmonod png256 png16 pngalpha'
@@ -1157,12 +1182,21 @@
 if test -z "$PNGDEVS"; then
   AC_MSG_NOTICE([disabling png output devices])
 fi
+
+fi # $enable_auxtools_only
+
 AC_SUBST(SHARE_LIBPNG)
 AC_SUBST(LIBPNGDIR)
 #AC_SUBST(PNGDEVS)
 
 WHICHLCMS=
 
+if test x"$enable_auxtools_only" = x"yes" ; then
+  SHARELCMS=0
+  LCMS2DIR=
+  LCMS2MTDIR=
+else
+
 AC_MSG_CHECKING([for local lcms2mt library source])
 LCMS2DIR=src
 LCMS2MTDIR=src
@@ -1197,6 +1231,8 @@
    fi
 fi
 
+fi # $enable_auxtools_only
+
 AC_SUBST(SHARELCMS)
 AC_SUBST(WHICHLCMS)
 AC_SUBST(LCMS2DIR)
@@ -1349,7 +1385,7 @@
 EXPAT_CFLAGS=
 EXPAT_LIBS=
 
-if test x"$with_xps" != x"no" ; then
+if test x"$with_xps" != x"no" -a x"$enable_auxtools_only" != x"yes" ; then
   if test -f $srcdir/xps/xps.mak; then
     AC_MSG_CHECKING([for local expat library source])
     if test -f $srcdir/expat/lib/expat.h ; then
@@ -1528,16 +1564,14 @@
 AC_ARG_WITH([ijs], AC_HELP_STRING([--without-ijs],
     [disable IJS driver support]))
 
-if test x"$cross_compiling" != x"yes"; then
-  case `uname` in
-    MINGW*|MSYS*)
+  case $host in
+    *-mingw*|*-msys*|*-cygwin*)
       AC_MSG_WARN([disabling the ijs device])
       with_ijs=no
     ;;
     *)
     ;;
   esac
-fi
 
 dnl set safe defaults
     IJSDIR=src
@@ -1589,15 +1623,8 @@
     SHARE_JBIG2=0
     JBIG2DIR=$srcdir/luratech/ldf_jb2
 
-    if test x"$cross_compiling" = x"yes"; then
-        if test x"$JBIG2_CFLAGS" != x""; then
-          JBIG2_AUTOCONF_CFLAGS="-DUSE_LDF_JB2 -fsigned-char $JBIG2_CFLAGS"
-        else
-          JBIG2_AUTOCONF_CFLAGS="-DUSE_LDF_JB2 -fsigned-char -DLINUX=1 -DFORTE"
-        fi
-    else
-      case `uname` in
-        Darwin*)
+      case $host in
+        *-darwin*)
           JBIG2_AUTOCONF_CFLAGS="-DUSE_LDF_JB2 -DMAC -DMAC_OS_X_BUILD -fsigned-char"
         ;;
         AIX)
@@ -1611,7 +1638,6 @@
           JBIG2_AUTOCONF_CFLAGS="-DUSE_LDF_JB2 -fsigned-char -DLINUX=1 -DFORTE"
         ;;
       esac
-    fi
 
     JBIG2FILEDEVS='$(DD)gdevjbig2.dev'
     JBIG2DEVS='$(PSD)jbig2.dev'
@@ -1734,15 +1760,8 @@
     SHARE_JPX=0
     JPXDIR=$srcdir/luratech/lwf_jp2
 
-    if test x"$cross_compiling" = x"yes"; then
-        if test x"$JPX_CFLAGS" != x""; then
-          JPX_AUTOCONF_CFLAGS="-DUSE_LWF_JP2 $JPX_CFLAGS"
-        else
-          JPX_AUTOCONF_CFLAGS="-DUSE_LWF_JP2 -DLINUX=1 -DFORTE"
-        fi
-    else
-      case `uname` in
-        Darwin*)
+      case $host in
+        *-darwin*)
           JPX_AUTOCONF_CFLAGS="-DUSE_LWF_JP2 -DMAC -DMAC_OS_X_BUILD"
         ;;
         AIX)
@@ -1756,7 +1775,6 @@
           JPX_AUTOCONF_CFLAGS="-DUSE_LWF_JP2 -DLINUX=1 -DFORTE"
         ;;
       esac
-    fi
     JPXDEVS='$(PSD)jpx.dev'
   else
     AC_MSG_RESULT([no])
@@ -2506,22 +2524,15 @@
 DLL_EXT=""
 SO_LIB_VERSION_SEPARATOR="."
 
-if test x"$cross_compiling" = x"yes"; then
-  DYNAMIC_CFLAGS="-fPIC"
-  GS_DYNAMIC_LDFLAGS="-shared -Wl,\$(LD_SET_DT_SONAME)\$(LDFLAGS_SO_PREFIX)\$(GS_SONAME_MAJOR)"
-  PCL_DYNAMIC_LDFLAGS="-shared -Wl,\$(LD_SET_DT_SONAME)\$(LDFLAGS_SO_PREFIX)\$(PCL_SONAME_MAJOR)"
-  XPS_DYNAMIC_LDFLAGS="-shared -Wl,\$(LD_SET_DT_SONAME)\$(LDFLAGS_SO_PREFIX)\$(XPS_SONAME_MAJOR)"
-  PDL_DYNAMIC_LDFLAGS="-shared -Wl,\$(LD_SET_DT_SONAME)\$(LDFLAGS_SO_PREFIX)\$(GPDL_SONAME_MAJOR)"
-  if test $ac_cv_prog_gcc = yes; then
-    # GCC high level flag
-    DYNAMIC_LIBS="-rdynamic"
-  else
-    DYNAMIC_LIBS=""
-  fi
-  SO_LIB_EXT=".so"
-else
-  case `uname` in
-    Linux*|GNU*)
+libname1="_SO_BASE)\$(GS_SOEXT)\$(DLL_EXT)"
+libname2="_SO_BASE)\$(GS_SOEXT)\$(SO_LIB_VERSION_SEPARATOR)\$(GS_VERSION_MAJOR)\$(DLL_EXT)"
+libname3="_SO_BASE)\$(GS_SOEXT)\$(SO_LIB_VERSION_SEPARATOR)\$(GS_VERSION_MAJOR)\$(SO_LIB_VERSION_SEPARATOR)\$(GS_VERSION_MINOR)\$(DLL_EXT)"
+GS_SONAME="lib\$(GS${libname1}"
+GS_SONAME_MAJOR="lib\$(GS${libname2}"
+GS_SONAME_MAJOR_MINOR="lib\$(GS${libname3}"
+
+case $host in
+    *-linux*|*-gnu)
       DYNAMIC_CFLAGS="-fPIC"
       GS_DYNAMIC_LDFLAGS="-shared -Wl,\$(LD_SET_DT_SONAME)\$(LDFLAGS_SO_PREFIX)\$(GS_SONAME_MAJOR)"
       PCL_DYNAMIC_LDFLAGS="-shared -Wl,\$(LD_SET_DT_SONAME)\$(LDFLAGS_SO_PREFIX)\$(PCL_SONAME_MAJOR)"
@@ -2535,17 +2546,21 @@
       fi
       SO_LIB_EXT=".so"
     ;;
-    MINGW*|MSYS*)
-      DYNAMIC_CFLAGS=""
-      GS_DYNAMIC_LDFLAGS="-shared  -Wl,--out-implib=\$(BINDIR)/lib\$(GS_SO_BASE).dll.a -Wl,--export-all-symbols -Wl,--enable-auto-import"
+    *-mingw*|*-msys*|*-cygwin*)
+      DYNAMIC_CFLAGS="-fvisibility=hidden -DGSDLLEXPORT=\"__declspec(dllexport)\""
+      GS_DYNAMIC_LDFLAGS="-shared -Wl,--out-implib=\$(BINDIR)/lib\$(GS_SO_BASE).dll.a -Wl,--enable-auto-import"
       PCL_DYNAMIC_LDFLAGS="-shared  -Wl,--out-implib=\$(BINDIR)/lib\$(PCL_SO_BASE).dll.a -Wl,--export-all-symbols -Wl,--enable-auto-import"
       XPS_DYNAMIC_LDFLAGS="-shared  -Wl,--out-implib=\$(BINDIR)/lib\$(XPS_SO_BASE).dll.a -Wl,--export-all-symbols -Wl,--enable-auto-import"
       PDL_DYNAMIC_LDFLAGS="-shared  -Wl,--out-implib=\$(BINDIR)/lib\$(PDL_SO_BASE).dll.a -Wl,--export-all-symbols -Wl,--enable-auto-import"
       SO_LIB_EXT=""
       DLL_EXT=".dll"
       SO_LIB_VERSION_SEPARATOR="-"
+      # make sure the import library doesn't link a program against the DLL with the minor version in it
+      GS_SONAME="lib\$(GS${libname1}"
+      GS_SONAME_MAJOR="lib\$(GS${libname3}"
+      GS_SONAME_MAJOR_MINOR="lib\$(GS${libname2}"
     ;;
-    *BSD)
+    *bsd*)
       DYNAMIC_CFLAGS="-fPIC"
       GS_DYNAMIC_LDFLAGS="-shared -Wl,\$(LD_SET_DT_SONAME)\$(LDFLAGS_SO_PREFIX)\$(GS_SONAME_MAJOR)"
       PCL_DYNAMIC_LDFLAGS="-shared -Wl,\$(LD_SET_DT_SONAME)\$(LDFLAGS_SO_PREFIX)\$(PCL_SONAME_MAJOR)"
@@ -2553,7 +2568,7 @@
       DYNAMIC_LIBS=""
       SO_LIB_EXT=".so"
     ;;
-    Darwin*)
+    *-darwin*)
       GS_DYNAMIC_LDFLAGS="-dynamiclib -install_name \$(GS_SONAME_MAJOR_MINOR)"
       PCL_DYNAMIC_LDFLAGS="-dynamiclib -install_name \$(PCL_SONAME_MAJOR_MINOR)"
       XPS_DYNAMIC_LDFLAGS="-dynamiclib -install_name \$(XPS_SONAME_MAJOR_MINOR)"
@@ -2591,15 +2606,18 @@
       fi
       SO_LIB_EXT=".so"
       ;;
-  esac
-fi
+esac
+
+AC_SUBST(GS_SONAME)
+AC_SUBST(GS_SONAME_MAJOR)
+AC_SUBST(GS_SONAME_MAJOR_MINOR)
 
 AC_ARG_ENABLE([dynamic], AC_HELP_STRING([--enable-dynamic],
     [Enable dynamically loaded drivers]),
 [
   if test "x$enable_dynamic" != xno; then
-    case `uname` in
-      Linux*|GNU*)
+    case $host in
+      *-linux*|*-gnu)
       INSTALL_SHARED="install-shared"
       if test "x$X_DEVS" != x; then
               DYNAMIC_DEVS="\$(GLOBJDIR)/X11.so"
@@ -2611,14 +2629,14 @@
       OPT_CFLAGS="$DYNAMIC_CFLAGS $OPT_CFLAGS"
       DBG_CFLAGS="$DYNAMIC_CFLAGS $DBG_CFLAGS"
       ;;
-      *BSD)
+      *bsd*)
       DYNAMIC_DEVS="\$(GLOBJDIR)/X11.so"
       DYNAMIC_FLAGS="-DGS_DEVS_SHARED -DGS_DEVS_SHARED_DIR=\\\"\$(gssharedir)\\\""
       X11_DEVS=""
       OPT_CFLAGS="$DYNAMIC_CFLAGS $OPT_CFLAGS"
       DBG_CFLAGS="$DYNAMIC_CFLAGS $DBG_CFLAGS"
       ;;
-      Darwin*)
+      *-darwin*)
       INSTALL_SHARED="install-shared"
       DYNAMIC_FLAGS="-DGS_DEVS_SHARED -DGS_DEVS_SHARED_DIR=\\\"\$(gssharedir)\\\""
       X11_DEVS=""
@@ -2963,23 +2981,31 @@
 # usually empty on Unix-like systems
 # --------------------------------------------------
 EXEEXT=""
+AUXEXEEXT=""
+
+case $host in
+    *-mingw*|*-msys*|*-cygwin*)
+      EXEEXT=".exe"
+    ;;
+    *)
+    ;;
+esac
 
 AC_ARG_WITH([exe-ext],  AC_HELP_STRING([--with-exe-ext=EXT],
-    [set the file name executable extension (must include any separator e.g. the period in ".exe")]),[], [exe_ext=])
+    [set the file name executable extension (must include any separator e.g. the period in ".exe")]),
+    [EXEEXT="$with_exe_ext"])
 
-if test "x"$with_exe_ext != "x"; then
-  EXEEXT="$with_exe_ext"
-else
-  if test x"$cross_compiling" != x"yes"; then
-    case `uname` in
-      MINGW*|MSYS*)
-        EXEEXT=".exe"
-      ;;
-    esac
-  fi
-fi
+case $build in
+    *-mingw*|*-msys*|*-cygwin*)
+      AUXEXEEXT=".exe"
+    ;;
+    *)
+      AUXEXEEXT="$EXEEXT"
+    ;;
+esac
 
 AC_SUBST(EXEEXT)
+AC_SUBST(AUXEXEEXT)
 
 # --------------------------------------------------
 # Check for disabling of versioned path option.
@@ -3034,7 +3060,7 @@
 
 AC_SUBST(CLUSTER_CFLAGS)
 
-if test x"$CCAUX" != x"$CC"; then
+if test x"$build" != x"$host"; then
 
   ilog2()
   {
@@ -3174,7 +3200,7 @@
 
 CONFIG_FILES_LIST="$CONFIG_FILES_LIST $THEMAKEFILE"
 
-if test x"$THEMAKEFILE" != x"$MAKEFILE" && test x"$CCAUX" = x"$CC"; then
+if test x"$THEMAKEFILE" != x"$MAKEFILE" && test x"$build" = x"$host"; then
   CONFIG_FILES_LIST="$CONFIG_FILES_LIST"
 fi
 
Only in ghostscript-9.50: configure.ac.orig
diff -ur ghostscript-9.50.orig/Makefile.in ghostscript-9.50/Makefile.in
--- ghostscript-9.50.orig/Makefile.in	2020-12-27 14:29:32.689235419 -0500
+++ ghostscript-9.50/Makefile.in	2020-12-27 18:25:25.241079917 -0500
@@ -172,6 +172,9 @@
 
 GS=@GS@
 GS_SO_BASE=@GS@
+GS_SONAME=@GS_SONAME@
+GS_SONAME_MAJOR=@GS_SONAME_MAJOR@
+GS_SONAME_MAJOR_MINOR=@GS_SONAME_MAJOR_MINOR@
 
 PCL=@PCL@
 PCL_SO_BASE=@PCL@
@@ -183,7 +186,7 @@
 GPDL_SO_BASE=@GPDL@
 
 XE=@EXEEXT@
-XEAUX=@EXEEXT@
+XEAUX=@AUXEXEEXT@
 
 PCL_TARGET=@PCL_TARGET@
 XPS_TARGET=@XPS_TARGET@
Only in ghostscript-9.50: Makefile.in.orig
