This file is part of MXE. See LICENSE.md for licensing information. Contains ad hoc patches for cross building. From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: darealshinji Date: Mon, 3 Dec 2018 21:05:41 +0100 Subject: [PATCH 1/1] cross-build fixes, hide libgs symbols diff --git a/Makefile.in b/Makefile.in index 1111111..2222222 100644 --- a/Makefile.in +++ b/Makefile.in @@ -172,6 +172,9 @@ CAPOPT= @HAVE_MKSTEMP@ @HAVE_FILE64@ @HAVE_FSEEKO@ @HAVE_MKSTEMP64@ @HAVE_FONTCO 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=@GPDL@ GPDL_SO_BASE=@GPDL@ XE=@EXEEXT@ -XEAUX=@EXEEXT@ +XEAUX=@AUXEXEEXT@ PCL_TARGET=@PCL_TARGET@ XPS_TARGET=@XPS_TARGET@ diff --git a/base/gp_unix.c b/base/gp_unix.c index 1111111..2222222 100644 --- a/base/gp_unix.c +++ b/base/gp_unix.c @@ -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 @@ void gp_enumerate_fonts_free(void *enum_state) } #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__ */ diff --git a/base/unix-aux.mak b/base/unix-aux.mak index 1111111..2222222 100644 --- a/base/unix-aux.mak +++ b/base/unix-aux.mak @@ -57,23 +57,29 @@ $(AUX)gp_stdia.$(OBJ): $(GLSRC)gp_stdia.c $(AK)\ # -------------------------- 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 @@ MKROMFS_OBJS_0=$(MKROMFS_ZLIB_OBJS) $(AUX)gpmisc.$(OBJ) $(AUX)gp_getnv.$(OBJ) \ $(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 @@ MKROMFS_OBJS_1=$(AUX)gscdefs.$(OBJ) \ $(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 --git a/base/unix-dll.mak b/base/unix-dll.mak index 1111111..2222222 100644 --- a/base/unix-dll.mak +++ b/base/unix-dll.mak @@ -66,9 +66,6 @@ GPDL_SONAME_BASE=lib$(GPDL_SO_BASE) 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 --git a/configure.ac b/configure.ac index 1111111..2222222 100644 --- a/configure.ac +++ b/configure.ac @@ -23,6 +23,7 @@ AC_INIT 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 @@ AUXEXTRALIBSTMP="\$(EXTRALIBS)" # 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 @@ if test x"$CCAUX" != x"" ; then 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 @@ AC_PATH_TOOL(PKGCONFIG, pkg-config) # 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 @@ AC_PATH_TOOL(STRIP_XE, strip) # 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 @@ CONTRIBINCLUDE="include $srcdir/contrib/contrib.mak" 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 @@ dnl -------------------------------------------------- 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 @@ else fi ;; esac -fi AC_SUBST(SET_DT_SONAME) @@ -368,18 +369,20 @@ AC_ARG_WITH([arch_h], AC_HELP_STRING([--with-arch_h=], 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 Set options that we want to pass into all other 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 test x"$enable_fapi" != xno; then 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(FTSRCDIR) 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 @@ else [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 @@ ZLIBDIR=src 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 @@ else 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(ZLIBDIR) 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 @@ fi 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 @@ else fi fi +fi # $enable_auxtools_only + AC_SUBST(SHARELCMS) AC_SUBST(WHICHLCMS) AC_SUBST(LCMS2DIR) @@ -1349,7 +1385,7 @@ EXPATDIR=src 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 @@ dnl look for IJS implementation 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 @@ if test x$with_luratech != xno; then 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 @@ if test x$with_luratech != xno; then 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 @@ if test x$with_luratech != xno; then 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 @@ if test x$with_luratech != xno; then JPX_AUTOCONF_CFLAGS="-DUSE_LWF_JP2 -DLINUX=1 -DFORTE" ;; esac - fi JPXDEVS='$(PSD)jpx.dev' else AC_MSG_RESULT([no]) @@ -2506,22 +2524,15 @@ SO_LIB_EXT=".so" 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 @@ else 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 @@ else 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 @@ else 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 @@ AC_ARG_ENABLE([dynamic], AC_HELP_STRING([--enable-dynamic], 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 @@ AC_SUBST(AUXDIRPOSTFIX) # 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 @@ fi AC_SUBST(CLUSTER_CFLAGS) -if test x"$CCAUX" != x"$CC"; then +if test x"$build" != x"$host"; then ilog2() { @@ -3174,7 +3200,7 @@ AC_SUBST(AUXEXTRALIBS) 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 diff --git a/psi/iapi.h b/psi/iapi.h index 1111111..2222222 100644 --- a/psi/iapi.h +++ b/psi/iapi.h @@ -68,6 +68,11 @@ extern "C" { # define GSDLLEXPORT # endif # endif +# ifdef __MINGW32__ +/* export stdcall functions as "name" instead of "_name@ordinal" */ +# undef GSDLLAPI +# define GSDLLAPI +# endif # ifndef GSDLLAPI # define GSDLLAPI __stdcall # endif