| --- a/base/gp_mswin.c |
| +++ b/base/gp_mswin.c |
| @@ -989,7 +989,7 @@ |
| |
| /* ------------------------- _snprintf -----------------------------*/ |
| |
| -#if defined(_MSC_VER) && _MSC_VER>=1900 /* VS 2014 and later have (finally) snprintf */ |
| +#if (defined(_MSC_VER) && _MSC_VER>=1900) || defined(__MINGW64_VERSION_MAJOR) /* VS 2014 and later have (finally) snprintf */ |
| # define STDC99 |
| #else |
| /* Microsoft Visual C++ 2005 doesn't properly define snprintf, |
| --- a/base/gp_mswin.h |
| +++ b/base/gp_mswin.h |
| @@ -56,4 +56,13 @@ |
| |
| #endif /* !defined(RC_INVOKED) */ |
| |
| +// in gp_mswin.c, mswin_popen is called |
| +// before it is implemented, so we must |
| +// provide a prototype (at least with GCC) to |
| +// avoid implicit definition with the wrong return type |
| + |
| +#ifdef __GNUC__ |
| +FILE *mswin_popen(const char *cmd, const char *mode); |
| +#endif |
| + |
| #endif /* gp_mswin_INCLUDED */ |
| --- a/base/gs.mak |
| +++ b/base/gs.mak |
| @@ -520,6 +520,7 @@ |
| # save our set of makefile variables that are defined in every build (paths, etc.) |
| $(gconfigd_h) : $(ECHOGS_XE) $(GS_MAK) $(GLSRCDIR)$(D)version.mak $(MAKEDIRS) |
| $(EXP)$(ECHOGS_XE) -w $(gconfigd_h) -x 23 define -s -u GS_LIB_DEFAULT -x 2022 $(GS_LIB_DEFAULT) -x 22 |
| + $(MINGW_FONTPATH_PATCH_OR_EMPTY_COMMAND) |
| $(EXP)$(ECHOGS_XE) -a $(gconfigd_h) -x 23 define -s -u GS_DEV_DEFAULT -x 2022 $(GS_DEV_DEFAULT) -x 22 |
| $(EXP)$(ECHOGS_XE) -a $(gconfigd_h) -x 23 define -s -u GS_CACHE_DIR -x 2022 $(GS_CACHE_DIR) -x 22 |
| $(EXP)$(ECHOGS_XE) -a $(gconfigd_h) -x 23 define -s -u SEARCH_HERE_FIRST -s $(SEARCH_HERE_FIRST) |
| --- a/base/lib.mak |
| +++ b/base/lib.mak |
| @@ -62,7 +62,7 @@ |
| # We can't use $(CC_) for GLLCMS2CC because that includes /Za on |
| # msvc builds, and lcms configures itself to depend on msvc extensions |
| # (inline asm, including windows.h) when compiled under msvc. |
| -GLLCMS2CC=$(CC) $(LCMS2_CFLAGS) $(CFLAGS) $(I_)$(GLI_) $(II)$(LCMS2SRCDIR)$(D)include$(_I) $(GLF_) |
| +GLLCMS2CC=$(CC) $(LCMS2_CFLAGS) $(CFLAGS) $(I_)$(GLI_) $(GLF_) |
| lcms2_h=$(LCMS2SRCDIR)$(D)include$(D)lcms2.h |
| lcms2_plugin_h=$(LCMS2SRCDIR)$(D)include$(D)lcms2_plugin.h |
| |
| --- /dev/null |
| +++ b/base/mingw-fp.sh |
| @@ -0,0 +1 @@ |
| +sed -i -e 's?\\?/?g' $1 |
| --- /dev/null |
| +++ b/base/mingw-fs.mak |
| @@ -0,0 +1,34 @@ |
| +# MSys/MinGW file- and operating-system section |
| +# adapted from winplat.mak |
| + |
| +# Define the name of this makefile. |
| + |
| +MINGW_FS_MAK=$(GLSRC)mingw-fs.mak |
| + |
| +# Define generic Windows-specific modules. |
| + |
| +mingw-fs_=$(GLOBJ)gp_ntfs.$(OBJ) $(GLOBJ)gp_win32.$(OBJ) |
| +$(GLD)mingw-fs.dev : $(MINGW_FS_MAK) $(ECHOGS_XE) $(mingw-fs_) |
| + $(SETMOD) $(GLD)mingw-fs $(mingw-fs_) |
| + |
| +$(GLOBJ)gp_ntfs.$(OBJ): $(GLSRC)gp_ntfs.c $(AK)\ |
| + $(dos__h) $(memory__h) $(stdio__h) $(string__h) $(windows__h)\ |
| + $(gp_h) $(gpmisc_h) $(gsmemory_h) $(gsstruct_h) $(gstypes_h) $(gsutil_h) |
| + $(GLCC) $(GLO_)gp_ntfs.$(OBJ) $(C_) $(GLSRC)gp_ntfs.c |
| + |
| +$(GLOBJ)gp_win32.$(OBJ): $(GLSRC)gp_win32.c $(AK)\ |
| + $(dos__h) $(malloc__h) $(stdio__h) $(string__h) $(windows__h)\ |
| + $(gp_h) $(gsmemory_h) $(gstypes_h) |
| + $(GLCC) $(GLO_)gp_win32.$(OBJ) $(C_) $(GLSRC)gp_win32.c |
| + |
| +# Define the Windows thread / synchronization module. |
| + |
| +winsync_=$(GLOBJ)gp_wsync.$(OBJ) |
| +$(GLD)winsync.dev : $(MINGW_FS_MAK) $(ECHOGS_XE) $(winsync_) |
| + $(SETMOD) $(GLD)winsync $(winsync_) |
| + $(ADDMOD) $(GLD)winsync -replace $(GLD)nosync |
| + |
| +$(GLOBJ)gp_wsync.$(OBJ): $(GLSRC)gp_wsync.c $(AK)\ |
| + $(dos__h) $(malloc__h) $(stdio__h) $(string__h) $(windows__h)\ |
| + $(gp_h) $(gsmemory_h) $(gstypes_h) |
| + $(GLCC) $(GLO_)gp_wsync.$(OBJ) $(C_) $(GLSRC)gp_wsync.c |
| --- /dev/null |
| +++ b/base/mingwlib.mak |
| @@ -0,0 +1,88 @@ |
| +# Common makefile section for MSys/MinGW |
| +# adapted from winlib.mak |
| + |
| +# Define the files to be removed by `make clean'. |
| +# nmake expands macros when encountered, not when used, |
| +# so this must precede the !include statements. |
| + |
| +BEGINFILES=$(GLGENDIR)\ccf32.tr\ |
| + $(GLOBJDIR)\*.res $(GLOBJDIR)\*.ico\ |
| + $(BINDIR)\$(GSDLL).dll $(BINDIR)\$(GSCONSOLE).exe\ |
| + $(BINDIR)\setupgs.exe $(BINDIR)\uninstgs.exe\ |
| + $(GLOBJDIR)\cups\*.h\ |
| + $(BEGINFILES2) |
| + |
| +# -------------------------------- Library -------------------------------- # |
| + |
| +# The MSys/MinGW Win32 platform |
| + |
| +mingw32__=$(GLOBJ)gp_mswin.$(OBJ) $(GLOBJ)gp_wgetv.$(OBJ) $(GLOBJ)gp_wpapr.$(OBJ) \ |
| + $(GLOBJ)gp_stdia.$(OBJ) $(GLOBJ)gp_wutf8.$(OBJ) $(GLOBJ)gp_winfs.$(OBJ) |
| +mingw32_inc=$(GLD)nosync.dev $(GLD)mingw-fs.dev |
| + |
| +$(GLGEN)mingw32_.dev: $(mingw32__) $(ECHOGS_XE) $(mingw32_inc) |
| + $(SETMOD) $(GLGEN)mingw32_ $(mingw32__) |
| + $(ADDMOD) $(GLGEN)mingw32_ -include $(mingw32_inc) |
| + |
| +$(GLOBJ)gp_mswin.$(OBJ): $(GLSRC)gp_mswin.c $(AK) $(gp_mswin_h) \ |
| + $(ctype__h) $(dos__h) $(malloc__h) $(memory__h) $(pipe__h) \ |
| + $(stdio__h) $(string__h) $(windows__h) $(winspool_h)\ |
| + $(gx_h) $(gp_h) $(gpcheck_h) $(gpmisc_h) $(gserrors_h) $(gsexit_h) |
| + $(GLCC) $(GLO_)gp_mswin.$(OBJ) $(C_) $(GLSRC)gp_mswin.c |
| + |
| +$(GLOBJ)gp_winfs.$(OBJ): $(GLSRC)gp_winfs.c $(AK) $(gp_mswin_h) \ |
| + $(memory__h) $(stdio__h) $(windows__h) $(gp_h) $(gserrors_h) |
| + $(GLCC) $(GLO_)gp_winfs.$(OBJ) $(C_) $(GLSRC)gp_winfs.c |
| + |
| +$(AUX)gp_winfs.$(OBJ): $(GLSRC)gp_winfs.c $(AK) $(gp_mswin_h) \ |
| + $(memory__h) $(stdio__h) $(windows__h) $(gp_h) $(gserrors_h) |
| + $(GLCCAUX) $(AUXO_)gp_winfs.$(OBJ) $(C_) $(GLSRC)gp_winfs.c |
| + |
| +$(AUX)gp_winfs2.$(OBJ): $(GLSRC)gp_winfs2.c $(AK) $(gp_mswin_h) \ |
| + $(memory__h) $(stdio__h) $(windows__h) $(gp_h) $(gserrors_h) |
| + $(GLCCAUX) $(AUXO_)gp_winfs2.$(OBJ) $(C_) $(GLSRC)gp_winfs2.c |
| + |
| +$(GLOBJ)gp_wutf8.$(OBJ): $(GLSRC)gp_wutf8.c $(windows__h) |
| + $(GLCC) $(GLO_)gp_wutf8.$(OBJ) $(C_) $(GLSRC)gp_wutf8.c |
| + |
| +$(GLOBJ)gp_wgetv.$(OBJ): $(GLSRC)gp_wgetv.c $(AK) $(gscdefs_h) |
| + $(GLCC) $(GLO_)gp_wgetv.$(OBJ) $(C_) $(GLSRC)gp_wgetv.c |
| + |
| +$(GLOBJ)gp_wpapr.$(OBJ): $(GLSRC)gp_wpapr.c $(AK) $(gp_h) |
| + $(GLCC) $(GLO_)gp_wpapr.$(OBJ) $(C_) $(GLSRC)gp_wpapr.c |
| + |
| +# Define MS-Windows handles (file system) as a separable feature. |
| + |
| +mshandle_=$(GLOBJ)gp_mshdl.$(OBJ) |
| +$(GLD)mshandle.dev: $(ECHOGS_XE) $(mshandle_) |
| + $(SETMOD) $(GLD)mshandle $(mshandle_) |
| + $(ADDMOD) $(GLD)mshandle -iodev handle |
| + |
| +$(GLOBJ)gp_mshdl.$(OBJ): $(GLSRC)gp_mshdl.c $(AK)\ |
| + $(ctype__h) $(errno__h) $(stdio__h) $(string__h)\ |
| + $(gsmemory_h) $(gstypes_h) $(gxiodev_h) $(gserrors_h) |
| + $(GLCC) $(GLO_)gp_mshdl.$(OBJ) $(C_) $(GLSRC)gp_mshdl.c |
| + |
| +# Define MS-Windows printer (file system) as a separable feature. |
| + |
| +msprinter_=$(GLOBJ)gp_msprn.$(OBJ) |
| +$(GLD)msprinter.dev: $(ECHOGS_XE) $(msprinter_) |
| + $(SETMOD) $(GLD)msprinter $(msprinter_) |
| + $(ADDMOD) $(GLD)msprinter -iodev printer |
| + |
| +$(GLOBJ)gp_msprn.$(OBJ): $(GLSRC)gp_msprn.c $(AK)\ |
| + $(ctype__h) $(errno__h) $(stdio__h) $(string__h)\ |
| + $(gsmemory_h) $(gstypes_h) $(gxiodev_h) |
| + $(GLCC) $(GLO_)gp_msprn.$(OBJ) $(C_) $(GLSRC)gp_msprn.c |
| + |
| +# Define MS-Windows polling as a separable feature |
| +# because it is not needed by the gslib. |
| +mspoll_=$(GLOBJ)gp_mspol.$(OBJ) |
| +$(GLD)mspoll.dev: $(ECHOGS_XE) $(mspoll_) |
| + $(SETMOD) $(GLD)mspoll $(mspoll_) |
| + |
| +$(GLOBJ)gp_mspol.$(OBJ): $(GLSRC)gp_mspol.c $(AK)\ |
| + $(gx_h) $(gp_h) $(gpcheck_h) |
| + $(GLCC) $(GLO_)gp_mspol.$(OBJ) $(C_) $(GLSRC)gp_mspol.c |
| + |
| +# end of mingwlib.mak |
| --- a/base/time_.h |
| +++ b/base/time_.h |
| @@ -78,7 +78,7 @@ |
| #endif |
| |
| /* Some System V environments, and Posix environments, need <sys/times.h>. */ |
| -#if defined(HAVE_SYS_TIMES_H) && HAVE_SYS_TIMES_H == 1 |
| +#if defined(HAVE_SYS_TIMES_H) && HAVE_SYS_TIMES_H == 1 && !defined(__MINGW32__) |
| # include <sys/times.h> |
| # define use_times_for_usertime 1 |
| /* Posix 1003.1b-1993 section 4.8.1.5 says that |
| --- a/base/unix-aux.mak |
| +++ b/base/unix-aux.mak |
| @@ -69,6 +69,13 @@ |
| $(UNIX_AUX_MAK) $(MAKEDIRS) |
| $(GLCC) $(GLO_)gp_sysv.$(OBJ) $(C_) $(GLSRC)gp_sysv.c |
| |
| +# the MINGW platform / build environment, joining unix for the ride |
| +mingw__=$(GLOBJ)gp_wgetv.$(OBJ) $(GLOBJ)gp_wpapr.$(OBJ) $(GLOBJ)gp_win32.$(OBJ) $(GLOBJ)gp_mswin.$(OBJ) $(GLOBJ)gp_ntfs.$(OBJ) $(GLOBJ)gp_winfs.$(OBJ) $(GLOBJ)gp_stdia.$(OBJ) $(GLOBJ)gp_wutf8.$(OBJ) $(GLOBJ)gp_nxpsprn.$(OBJ) |
| +$(GLGEN)mingw_.dev: $(mingw__) $(GLD)nosync.dev $(GLD)smd5.dev |
| + $(SETMOD) $(GLGEN)mingw_ $(mingw__) -include $(GLD)nosync |
| + $(ADDMOD) $(GLGEN)mingw_ -include $(GLD)smd5 |
| + |
| + |
| # -------------------------- Auxiliary programs --------------------------- # |
| |
| $(ECHOGS_XE): $(GLSRC)echogs.c $(AK) $(stdpre_h) $(UNIX_AUX_MAK) $(MAKEDIRS) |
| @@ -91,18 +98,31 @@ |
| # To get GS to use the system zlib, you remove/hide the gs/zlib directory |
| # which means that the mkromfs build can't find the zlib source it needs. |
| # So it's split into two targets, one using the zlib source directly..... |
| -MKROMFS_OBJS_0=$(MKROMFS_ZLIB_OBJS) $(AUX)gpmisc.$(OBJ) $(AUX)gp_getnv.$(OBJ) \ |
| - $(AUX)gscdefs.$(OBJ) $(AUX)gp_unix.$(OBJ) $(AUX)gp_unifs.$(OBJ) $(AUX)gp_unifn.$(OBJ) \ |
| - $(AUX)gp_stdia.$(OBJ) $(AUX)gsutil.$(OBJ) $(AUX)memento.$(OBJ) |
| +ifeq ($(MINGW_BUILD), 1) |
| + MKROMFS_OBJS_0=$(MKROMFS_ZLIB_OBJS) $(AUX)gpmisc.$(OBJ) $(AUX)gp_getnv.$(OBJ) \ |
| + $(AUX)gscdefs.$(OBJ) $(AUX)gp_ntfs.$(OBJ) $(AUX)gp_mswin.$(OBJ) $(AUX)gp_winfs.$(OBJ) $(AUX)gp_winfs2.$(OBJ) \ |
| + $(AUX)gp_stdia.$(OBJ) $(AUX)gsutil.$(OBJ) $(AUX)memento.$(OBJ) |
| +else |
| + MKROMFS_OBJS_0=$(MKROMFS_ZLIB_OBJS) $(AUX)gpmisc.$(OBJ) $(AUX)gp_getnv.$(OBJ) \ |
| + $(AUX)gscdefs.$(OBJ) $(AUX)gp_unix.$(OBJ) $(AUX)gp_unifs.$(OBJ) $(AUX)gp_unifn.$(OBJ) \ |
| + $(AUX)gp_stdia.$(OBJ) $(AUX)gsutil.$(OBJ) $(AUX)memento.$(OBJ) |
| +endif |
| |
| $(MKROMFS_XE)_0: $(GLSRC)mkromfs.c $(MKROMFS_COMMON_DEPS) $(MKROMFS_OBJS_0) $(UNIX_AUX_MAK) $(MAKEDIRS) |
| $(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 |
| -MKROMFS_OBJS_1=$(AUX)gscdefs.$(OBJ) \ |
| - $(AUX)gpmisc.$(OBJ) $(AUX)gp_getnv.$(OBJ) \ |
| - $(AUX)gp_unix.$(OBJ) $(AUX)gp_unifs.$(OBJ) $(AUX)gp_unifn.$(OBJ) \ |
| - $(AUX)gp_stdia.$(OBJ) $(AUX)gsutil.$(OBJ) |
| +# (here two, MINGW has a different set of dependencies, |
| +# most notably gp_ntfs and gp_wutf8) |
| +ifeq ($(MINGW_BUILD), 1) |
| + MKROMFS_OBJS_1=$(GLOBJ)gp_ntfs.$(OBJ) $(GLOBJ)gp_wutf8.$(OBJ) $(GLOBJ)gp_winfs.$(OBJ) \ |
| + $(GLOBJ)gpmisc.$(OBJ) $(GLOBJ)gp_wgetv.$(OBJ) $(GLOBJ)gscdefs.$(OBJ) |
| +else |
| + MKROMFS_OBJS_1=$(AUX)gscdefs.$(OBJ) \ |
| + $(AUX)gpmisc.$(OBJ) $(AUX)gp_getnv.$(OBJ) \ |
| + $(AUX)gp_unix.$(OBJ) $(AUX)gp_unifs.$(OBJ) $(AUX)gp_unifn.$(OBJ) \ |
| + $(AUX)gp_stdia.$(OBJ) $(AUX)gsutil.$(OBJ) |
| +endif |
| |
| $(MKROMFS_XE)_1: $(GLSRC)mkromfs.c $(MKROMFS_COMMON_DEPS) $(MKROMFS_OBJS_1) $(UNIX_AUX_MAK) $(MAKEDIRS) |
| $(CCAUX_) $(GENOPTAUX) $(I_)$(GLSRCDIR)$(_I) $(I_)$(GLOBJ)$(_I) $(I_)$(ZSRCDIR)$(_I) $(GLSRC)mkromfs.c $(O_)$(MKROMFS_XE)_1 $(MKROMFS_OBJS_1) $(AUXEXTRALIBS) |
| --- a/base/unix-dll.mak |
| +++ b/base/unix-dll.mak |
| @@ -35,7 +35,12 @@ |
| # Shared object names |
| |
| # simple loader (no support for display device) |
| -GSSOC_XENAME=$(GS_SO_BASE)c$(XE) |
| +ifeq ($(MINGW_WITH_WINLIB_NAMES), 1) |
| + GSSOC_XENAME=gswin$(MINGW_PLATFORM_BITS)c$(XE) |
| +else |
| + GSSOC_XENAME=$(GS_SO_BASE)c$(XE) |
| +endif |
| + |
| GSSOC_XE=$(BINDIR)/$(GSSOC_XENAME) |
| GSSOC=$(BINDIR)/$(GSSOC_XENAME) |
| |
| @@ -52,12 +52,28 @@ |
| GPDLSOC=$(BINDIR)/$(GPDLSOC_XENAME) |
| |
| # loader suporting display device using Gtk+ |
| -GSSOX_XENAME=$(GS_SO_BASE)x$(XE) |
| +ifeq ($(MINGW_WITH_WINLIB_NAMES), 1) |
| + GSSOX_XENAME=gswin$(MINGW_PLATFORM_BITS)$(XE) |
| +else |
| + GSSOX_XENAME=$(GS_SO_BASE)x$(XE) |
| +endif |
| + |
| GSSOX_XE=$(BINDIR)/$(GSSOX_XENAME) |
| GSSOX=$(BINDIR)/$(GSSOX_XENAME) |
| |
| -# shared library |
| -GS_SONAME_BASE=lib$(GS_SO_BASE) |
| +# shared library: handle unix and mingw library names |
| +ifeq ($(MINGW_BUILD), 1) |
| + ifeq ($(MINGW_WITH_WINLIB_NAMES), 1) |
| + GS_SONAME_BASE=gsdll$(MINGW_PLATFORM_BITS) |
| + GS_SONAME_LINK=$(GS_SONAME_BASE) |
| + else |
| + GS_SONAME_BASE=lib$(GS_SO_BASE) |
| + GS_SONAME_LINK=lib$(GS_SO_BASE) |
| + endif |
| +else |
| + GS_SONAME_BASE=lib$(GS_SO_BASE) |
| + GS_SONAME_LINK=$(GS_SO_BASE) |
| +endif |
| PCL_SONAME_BASE=lib$(PCL_SO_BASE) |
| XPS_SONAME_BASE=lib$(XPS_SO_BASE) |
| GPDL_SONAME_BASE=lib$(GPDL_SO_BASE) |
| @@ -140,13 +140,13 @@ |
| |
| # Create symbolic links to the Ghostscript interpreter library |
| |
| -$(GS_SO): $(GS_SO_MAJOR) $(UNIX_DLL_MAK) $(MAKEDIRS) |
| +$(GS_SO): $(GS_SO_MAJOR_MINOR) $(UNIX_DLL_MAK) $(MAKEDIRS) |
| $(RM_) $(GS_SO) |
| - ln -s $(GS_SONAME_MAJOR_MINOR) $(GS_SO) |
| + ln -s $(GS_SONAME_MAJOR) $(GS_SO) |
| |
| -$(GS_SO_MAJOR): $(GS_SO_MAJOR_MINOR) $(UNIX_DLL_MAK) $(MAKEDIRS) |
| - $(RM_) $(GS_SO_MAJOR) |
| - ln -s $(GS_SONAME_MAJOR_MINOR) $(GS_SO_MAJOR) |
| +$(GS_SO_MAJOR_MINOR): $(GS_SO_MAJOR) $(UNIX_DLL_MAK) $(MAKEDIRS) |
| + $(RM_) $(GS_SO_MAJOR_MINOR) |
| + ln -s $(GS_SONAME_MAJOR) $(GS_SO_MAJOR_MINOR) |
| |
| $(PCL_SO): $(PCL_SO_MAJOR) $(UNIX_DLL_MAK) $(MAKEDIRS) |
| $(RM_) $(PCL_SO) |
| @@ -212,12 +212,12 @@ |
| |
| # Build the small Ghostscript loaders, with Gtk+ and without |
| $(GSSOC_XE): gs-so-links-subtarget $(PSSRC)dxmainc.c $(UNIX_DLL_MAK) $(MAKEDIRS) |
| - $(GLCC) $(GLO_)dxmainc.$(OBJ) $(C_) $(PSSRC)dxmainc.c |
| - $(GLCC) -L$(BINDIR) $(LDFLAGS) $(O_) $(GSSOC_XE) $(GLOBJ)dxmainc.$(OBJ) -l$(GS_SO_BASE) |
| + $(GLCC) $(GLO_)$(SOC_LOADER_PLAIN).$(OBJ) $(C_) $(PSSRC)$(SOC_LOADER_PLAIN).c |
| + $(GLCC) -L$(BINDIR) $(LDFLAGS) $(O_) $(GSSOC_XE) $(GLOBJ)$(SOC_LOADER_PLAIN).$(OBJ) -l$(GS_SONAME_LINK) |
| |
| $(GSSOX_XE): gs-so-links-subtarget $(PSSRC)$(SOC_LOADER).c $(UNIX_DLL_MAK) $(MAKEDIRS) |
| $(GLCC) $(SOC_CFLAGS) $(GLO_)$(SOC_LOADER).$(OBJ) $(C_) $(PSSRC)$(SOC_LOADER).c |
| - $(GLCC) -L$(BINDIR) $(LDFLAGS) $(O_) $(GSSOX_XE) $(GLOBJ)$(SOC_LOADER).$(OBJ) -l$(GS_SO_BASE) $(SOC_LIBS) |
| + $(GLCC) -L$(BINDIR) $(LDFLAGS) $(O_) $(GSSOX_XE) $(GLOBJ)$(SOC_LOADER).$(OBJ) -l$(GS_SONAME_LINK) $(SOC_LIBS) |
| |
| $(PCLSOC_XE): gpcl6-so-links-subtarget $(UNIX_DLL_MAK) $(PLOBJ)$(REALMAIN_SRC).$(OBJ) $(MAKEDIRS) |
| $(GLCC) -L$(BINDIR) $(LDFLAGS) $(O_) $(PCLSOC_XE) $(PLOBJ)$(REALMAIN_SRC).$(OBJ) -l$(PCL_SO_BASE) |
| @@ -222,7 +222,7 @@ |
| SODEFS=\ |
| GS_DOT_O= \ |
| REALMAIN_OBJ= \ |
| - GS_XE=$(BINDIR)/$(GS_SONAME_MAJOR_MINOR) \ |
| + GS_XE=$(BINDIR)/$(GS_SONAME_MAJOR)\ |
| GPCL_XE=$(BINDIR)/$(PCL_SONAME_MAJOR_MINOR) \ |
| GXPS_XE=$(BINDIR)/$(XPS_SONAME_MAJOR_MINOR) \ |
| GPDL_XE=$(BINDIR)/$(GPDL_SONAME_MAJOR_MINOR) \ |
| @@ -313,11 +313,17 @@ |
| -mkdir -p $(DESTDIR)$(gsincludedir) |
| $(INSTALL_PROGRAM) $(GSSOC) $(DESTDIR)$(bindir)/$(GSSOC_XENAME) |
| $(INSTALL_PROGRAM) $(GSSOX) $(DESTDIR)$(bindir)/$(GSSOX_XENAME) |
| - $(INSTALL_PROGRAM) $(BINDIR)/$(GS_SONAME_MAJOR_MINOR) $(DESTDIR)$(libdir)/$(GS_SONAME_MAJOR_MINOR) |
| - $(RM_) $(DESTDIR)$(libdir)/$(GS_SONAME) |
| - ln -s $(GS_SONAME_MAJOR_MINOR) $(DESTDIR)$(libdir)/$(GS_SONAME) |
| - $(RM_) $(DESTDIR)$(libdir)/$(GS_SONAME_MAJOR) |
| - ln -s $(GS_SONAME_MAJOR_MINOR) $(DESTDIR)$(libdir)/$(GS_SONAME_MAJOR) |
| + @if test "$(MINGW_BUILD)" = "1" ; then \ |
| + $(INSTALL_PROGRAM) $(BINDIR)/$(GS_SONAME_MAJOR) $(DESTDIR)$(bindir)/$(GS_SONAME_MAJOR) ; \ |
| + $(INSTALL_PROGRAM) $(BINDIR)/$(GS_SONAME_LINK).dll.a $(DESTDIR)$(libdir)/$(GS_SONAME_LINK).dll.a ; \ |
| + else \ |
| + $(INSTALL_PROGRAM) $(BINDIR)/$(GS_SONAME_MAJOR) $(DESTDIR)$(libdir)/$(GS_SONAME_MAJOR) ; \ |
| + $(RM_) $(DESTDIR)$(libdir)/$(GS_SONAME) ; \ |
| + ln -s $(GS_SONAME_MAJOR) $(DESTDIR)$(libdir)/$(GS_SONAME) ; \ |
| + $(RM_) $(DESTDIR)$(libdir)/$(GS_SONAME_MAJOR) ; \ |
| + ln -s $(GS_SONAME_MAJOR) $(DESTDIR)$(libdir)/$(GS_SONAME_MAJOR_MINOR) ; \ |
| + fi |
| + $(INSTALL_DATA) $(GLSRCDIR)/gserrors.h $(DESTDIR)$(gsincludedir)gserrors.h |
| $(INSTALL_DATA) $(PSSRC)iapi.h $(DESTDIR)$(gsincludedir)iapi.h |
| $(INSTALL_DATA) $(PSSRC)ierrors.h $(DESTDIR)$(gsincludedir)ierrors.h |
| $(INSTALL_DATA) $(GLSRC)gserrors.h $(DESTDIR)$(gsincludedir)gserrors.h |
| --- a/base/unix-gcc.mak |
| +++ b/base/unix-gcc.mak |
| @@ -79,7 +79,7 @@ |
| INSTALL_DATA = $(INSTALL) -m 644 |
| INSTALL_SHARED = |
| |
| -prefix = /usr/local |
| +prefix = /usr |
| exec_prefix = ${prefix} |
| bindir = ${exec_prefix}/bin |
| scriptdir = $(bindir) |
| @@ -98,7 +98,7 @@ |
| gssharedir = ${exec_prefix}/lib/ghostscript/$(GS_DOT_VERSION) |
| gsincludedir = ${prefix}/include/ghostscript/ |
| |
| -docdir=$(gsdatadir)/doc |
| +docdir=$(gsdatadir)/doc/ghostscript-$(GS_DOT_VERSION) |
| exdir=$(gsdatadir)/examples |
| GS_DOCDIR=$(docdir) |
| |
| --- a/base/unixhead.mak |
| +++ b/base/unixhead.mak |
| @@ -22,7 +22,12 @@ |
| # Define the platform name. For a "stock" System V platform, |
| # use sysv_ instead of unix_. |
| |
| -GSPLATFORM=unix_ |
| +# select platform: unix or mingw |
| +ifeq ($(MINGW_BUILD), 1) |
| + GSPLATFORM=mingw_ |
| +else |
| + GSPLATFORM=unix_ |
| +endif |
| |
| # Define the syntax for command, object, and executable files. |
| |
| @@ -65,3 +70,9 @@ |
| # Define the compilation rules and flags. |
| |
| BEGINFILES= |
| + |
| +ifeq ($(MINGW_BUILD), 1) |
| + MINGW_FONTPATH_PATCH_OR_EMPTY_COMMAND=$(SH) $(GLSRCDIR)/mingw-fp.sh $(gconfigd_h) |
| +else |
| + MINGW_FONTPATH_PATCH_OR_EMPTY_COMMAND= |
| +endif |
| --- a/configure.ac |
| +++ b/configure.ac |
| @@ -312,6 +312,25 @@ |
| CC_DBG_FLAGS_TO_TRY="-gdwarf-2 -g3 -O0" |
| CC_VISIBILITY_FLAGS_TO_TRY="-fvisibility=hidden" |
| fi |
| + MINGW_BUILD=1 |
| + MINGW_PLATFORM=`uname` |
| + MINGW_XTLIBS="-lwinspool" |
| + LIBS="$LIBS $MINGW_XTLIBS" |
| + |
| + # inner MINGW case statement: 32/64 bits |
| + case $MINGW_PLATFORM in |
| + MINGW32*) |
| + MINGW_PLATFORM_BITS=32 |
| + ;; |
| + MINGW64*) |
| + MINGW_PLATFORM_BITS=64 |
| + ;; |
| + esac |
| + |
| + AC_SUBST(MINGW_BUILD) |
| + AC_SUBST(MINGW_PLATFORM) |
| + AC_SUBST(MINGW_PLATFORM_BITS) |
| + AC_SUBST(MINGW_XTLIBS) |
| SET_DT_SONAME="" |
| ;; |
| *-sun*|*-solaris*) |
| @@ -2353,12 +2372,41 @@ |
| AC_SUBST(CAL_AVX2_CFLAGS) |
| AC_SUBST(CAL_NEON_CFLAGS) |
| |
| +dnl checks for MinGW shared object name and gdi must precede the gtk checks |
| +dnl check whether MinGW should use the MSVC dll names |
| +AC_ARG_WITH([winlib-names], AC_HELP_STRING([--with-winlib-names], |
| + [MSys/MinGW only: dll and executable names should be gsdll32.dll (gsdll64.dll), gswin32.exe (gswin64.exe), and gswin32c.exe (gswin64c.exe)]), |
| + [], [with_winlib_names=no]) |
| +if test "x$with_winlib_names" = "xyes"; then |
| + MINGW_WITH_WINLIB_NAMES=1 |
| +fi |
| + |
| +dnl check whether MinGW should use the gdi-based (dwmain.c, dwmainc.c) front end |
| +AC_ARG_WITH([gdi], AC_HELP_STRING([--with-gdi], |
| + [MSys/MinGW only: use the gdi-based Shared Object loaders (dwmain.c & dwmainc.c; implies --with-winlib-names=yes): not yet implemented]), |
| + [], [with_gdi=no]) |
| +if test "x$with_gdi" = "xyes"; then |
| + MINGW_WITH_WINLIB_NAMES=1 |
| + MINGW_WITH_GDI=1 |
| + # SOC_LOADER value will be set after the initial gtk test |
| +fi |
| + |
| +AC_SUBST(MINGW_WITH_WINLIB_NAMES) |
| +AC_SUBST(MINGW_WITH_GDI) |
| + |
| dnl check if we can/should build the gtk loader |
| AC_ARG_ENABLE([gtk], AC_HELP_STRING([--disable-gtk], |
| [Do not build the gtk loader])) |
| SOC_CFLAGS="" |
| SOC_LIBS="" |
| -SOC_LOADER="" |
| +SOC_LOADER="" # default may not be set before the gtk+-2.0 test |
| +SOC_LOADER_PLAIN="" |
| + |
| +if test "x$with_gdi" = "xyes"; then |
| + AC_MSG_WARN([the gdi front end under MSys/MinGW is not yet implemented]) |
| + enable_gtk=yes # try to use gtk+ instead |
| +fi |
| + |
| if test "x$enable_gtk" != "xno"; then |
| # Try GTK+ 3.x first... |
| if test "x$PKGCONFIG" != x; then |
| @@ -2391,9 +2439,15 @@ |
| SOC_LOADER="dxmainc" |
| fi |
| |
| +dnl set default SOC_LOADER_PLAIN as necessary |
| +if test "x$SOC_LOADER_PLAIN" = x; then |
| + SOC_LOADER_PLAIN="dxmainc" |
| +fi |
| + |
| AC_SUBST(SOC_CFLAGS) |
| AC_SUBST(SOC_LIBS) |
| AC_SUBST(SOC_LOADER) |
| +AC_SUBST(SOC_LOADER_PLAIN) |
| |
| dnl optional X11 for display devices |
| if test x"$enable_auxtools_only" = x"yes" ; then |
| @@ -2972,17 +3026,17 @@ |
| 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}" |
| + GS_SONAME_MAJOR="lib\$(GS${libname2}" |
| + GS_SONAME_MAJOR_MINOR="lib\$(GS${libname3}" |
| PCL_SONAME="lib\$(PCL${libname1}" |
| - PCL_SONAME_MAJOR="lib\$(PCL${libname3}" |
| - PCL_SONAME_MAJOR_MINOR="lib\$(PCL${libname2}" |
| + PCL_SONAME_MAJOR="lib\$(PCL${libname2}" |
| + PCL_SONAME_MAJOR_MINOR="lib\$(PCL${libname3}" |
| XPS_SONAME="lib\$(XPS${libname1}" |
| - XPS_SONAME_MAJOR="lib\$(XPS${libname3}" |
| - XPS_SONAME_MAJOR_MINOR="lib\$(XPS${libname2}" |
| + XPS_SONAME_MAJOR="lib\$(XPS${libname2}" |
| + XPS_SONAME_MAJOR_MINOR="lib\$(XPS${libname3}" |
| GPDL_SONAME="lib\$(GPDL${libname1}" |
| - GPDL_SONAME_MAJOR="lib\$(GPDL${libname3}" |
| - GPDL_SONAME_MAJOR_MINOR="lib\$(GPDL${libname2}" |
| + GPDL_SONAME_MAJOR="lib\$(GPDL${libname2}" |
| + GPDL_SONAME_MAJOR_MINOR="lib\$(GPDL${libname3}" |
| ;; |
| *-cygwin*) |
| if test x$hide_symbols = xyes; then |
| @@ -3164,6 +3218,20 @@ |
| fi |
| |
| dnl Fix "fontpath" variable... |
| +if test $MINGW_BUILD = 1; then |
| + # Add a reference to the Windows Fonts directory. |
| + # This must take place priot to the test below, |
| + # as it is also our way to avoid inclusion |
| + # of the various unix font directories. |
| + # Since gs uses here a colon as delimiter, |
| + # we must refer to %windir% as /c/Windows |
| + if test "x$fontpath" = "x"; then |
| + fontpath="/c/Windows/Fonts" |
| + else |
| + fontpath="${fontpath}:/c/Windows/Fonts" |
| + fi |
| +fi |
| + |
| if test "x$fontpath" = "x"; then |
| # These font directories are used by various Linux distributions... |
| fontpath="$datadir/fonts/default/ghostscript" |
| --- a/Makefile.in |
| +++ b/Makefile.in |
| @@ -60,6 +60,14 @@ |
| |
| CONTRIBDIR=@srcdir@/contrib |
| |
| +# ------ MINGW options ------ # |
| + |
| +MINGW_BUILD=@MINGW_BUILD@ |
| +MINGW_PLATFORM=@MINGW_PLATFORM@ |
| +MINGW_PLATFORM_BITS=@MINGW_PLATFORM_BITS@ |
| +MINGW_WITH_WINLIB_NAMES=@MINGW_WITH_WINLIB_NAMES@ |
| +MINGW_WITH_GDI=@MINGW_WITH_GDI@ |
| + |
| # Do not edit the next group of lines. |
| |
| include $(GLSRCDIR)/version.mak |
| @@ -433,7 +441,7 @@ |
| # Solaris may need -lnsl -lsocket -lposix4. |
| # (Libraries required by individual drivers are handled automatically.) |
| |
| -EXTRALIBS=$(XTRALIBS) @LIBS@ @DYNAMIC_LIBS@ @FONTCONFIG_LIBS@ @FT_LIBS@ @JPX_AUTOCONF_LIBS@ @EXPAT_LIBS@ |
| +EXTRALIBS=$(XTRALIBS) @LIBS@ @MINGW_XTLIBS@ @DYNAMIC_LIBS@ @FONTCONFIG_LIBS@ @FT_LIBS@ @JPX_AUTOCONF_LIBS@ @EXPAT_LIBS@ |
| AUXEXTRALIBS=@AUXEXTRALIBS@ @AUX_SHARED_ZLIB@ |
| |
| # Define the standard libraries to search at the end of linking. |
| @@ -484,9 +492,10 @@ |
| RM=rm -f |
| |
| # ------ Dynamic loader options ------- # |
| -SOC_CFLAGS = @SOC_CFLAGS@ |
| -SOC_LIBS = @SOC_LIBS@ |
| -SOC_LOADER = @SOC_LOADER@ |
| +SOC_CFLAGS = @SOC_CFLAGS@ |
| +SOC_LIBS = @SOC_LIBS@ |
| +SOC_LOADER = @SOC_LOADER@ |
| +SOC_LOADER_PLAIN = @SOC_LOADER_PLAIN@ |
| |
| # on virtually every Unix-a-like system, this is "so", |
| # but Apple just had to be different, so it's now set |
| @@ -637,7 +646,16 @@ |
| CC_LEAF=$(CC_) |
| |
| CCFLAGSAUX=$(GENOPTAUX) $(CAPOPTAUX) $(CFLAGSAUX) |
| -CCAUX_=$(CCAUX) $(CCFLAGSAUX) |
| + |
| +ifeq ($(MINGW_BUILD), 1) |
| + # adding -lz to the compilation flags seems to be an error: |
| + # if not always, then at least under MSys/MinGW, |
| + # compiled against the system's zlib, |
| + # and having no zlib sub-folder (see also: unixaux.mak) |
| + CCAUX_=$(CCAUX) $(CCFLAGSAUX) |
| +else |
| + CCAUX_=$(CCAUX) $(CCFLAGSAUX) @AUX_SHARED_ZLIB@ |
| +endif |
| |
| # note gcc can't use -fomit-frame-pointer with -pg. |
| CC_LEAF_PG=$(CC_) |
| @@ -707,6 +726,12 @@ |
| @CONTRIBINCLUDE@ |
| @CUPSINCLUDE@ |
| |
| +# conditionally include the two .mak files that are only needed with a MINGW build |
| +ifeq ($(MINGW_BUILD), 1) |
| + include $(GLSRCDIR)/mingw-fs.mak |
| + include $(GLSRCDIR)/mingwlib.mak |
| +endif |
| + |
| # Clean up after the autotools scripts |
| distclean : clean config-clean soclean pgclean debugclean mementoclean |
| -$(RM_) -r $(BINDIR) $(GLOBJDIR) $(PSOBJDIR) $(AUXDIR) |
| --- a/base/stat_.h |
| +++ b/base/stat_.h |
| @@ -43,7 +43,7 @@ |
| * Microsoft C uses _stat instead of stat, |
| * for both the function name and the structure name. |
| */ |
| -#ifdef _MSC_VER |
| +#if defined(_MSC_VER) || defined(__MINGW32__) |
| # define stat __stat64 |
| # define struct_stat struct __stat64 |
| # define fstat _fstat64 |