From 5f31f6ae279bfecabb9d158cbb9d9f4fb64268ef Mon Sep 17 00:00:00 2001 From: sam Date: Wed, 17 Sep 2003 13:18:59 +0000 Subject: [PATCH] * Proper DLL symbol exporting under Win32. git-svn-id: svn://svn.zoy.org/elk/trunk@162 55e467fa-43c5-0310-a8a2-de718669efc6 --- configure.ac | 35 ++++++++++++++++++++++++++++------- include/extern.h | 7 ++++++- include/misc.h | 2 +- include/site.h.in | 21 +++++++++++++++++++++ lib/misc/Makefile.am | 20 ++++++++++---------- src/Makefile.am | 4 ++-- 6 files changed, 68 insertions(+), 21 deletions(-) diff --git a/configure.ac b/configure.ac index 62205df..7cf61df 100644 --- a/configure.ac +++ b/configure.ac @@ -37,11 +37,18 @@ AC_SUBST(STDINT_HEADER) # type of system. AC_DEFINE_UNQUOTED(SYSTEMTYPE, ["${target_os}"], [Our operating system]) +MATH_LIBS="-lm" case "${target_os}" in *hpux*) AC_DEFINE(ARRAY_BROKEN, 1, [Define if a-=1000; a[1000] doesn't work]) ;; + *mingw32*) + ELK_CFLAGS="${ELK_CFLAGS} -DELK_BUILD_DLL" + ELK_LDFLAGS="${ELK_LDFLAGS} -no-undefined" + MATH_LIBS="" + ;; esac +ELK_LIBS="${ELK_LIBS} ${MATH_LIBS}" # Does the system support the vprintf library function? If not, # availability of the (non-portable) _doprnt function is assumed. @@ -190,6 +197,13 @@ if test "${ac_cv_my_can_load_lib}" = "no"; then ac_cv_my_can_load_lib=yes]) fi +# Win32 style +if test "${ac_cv_my_can_load_lib}" = "no"; then + AC_CHECK_LIB(kernel32, main, + [ELK_LIBS="${ELK_LIBS} -lkernel32" + ac_cv_my_can_load_lib=yes]) +fi + AC_CHECK_HEADERS(a.out.h) # Only test for dlopen() if the others didn't work @@ -369,7 +383,7 @@ AC_DEFINE(ANSI_CPP, 1, [FIXME HARD]) # The UNIX extension likes to know which of the following system calls, # library functions, and include files are supported by the system. -AC_CHECK_HEADERS(utime.h) +AC_CHECK_HEADERS(utime.h sys/wait.h) AC_CHECK_FUNCS(waitpid wait3 wait4 vfork uname gethostname gettimeofday ftime) AC_CHECK_FUNCS(mktemp tmpnam tempnam getcwd getwd rename regcomp) @@ -450,12 +464,17 @@ AM_CONDITIONAL(HAVE_X11, test "${ac_cv_my_have_x11}" = "yes") AC_SUBST(X_CFLAGS) AC_SUBST(X_LIBS) +AC_CHECK_LIB(Xmu, XmuDrawLogo, + [xmu_libraries="-lXmu"], + [xmu_libraries=""], + [[-lXt -lSM -lICE -lXext -lX11 -L${x_libraries}]]) + AC_CHECK_LIB(Xaw, XawTextSearch, [ ac_cv_my_have_xaw=yes XAW_CFLAGS="-I${x_includes}" - XAW_LIBS="-L${x_libraries} -lXaw -lXmu -lXt -lSM -lICE -lXext -lX11" + XAW_LIBS="-L${x_libraries} -lXaw ${xmu_libraries} -lXt -lSM -lICE -lXext -lX11" ], [ac_cv_my_have_xaw=no], - [[-lXmu -lXt -lSM -lICE -lXext -lX11 -L${x_libraries}]]) + [[${xmu_libraries} -lXt -lSM -lICE -lXext -lX11 -L${x_libraries}]]) AM_CONDITIONAL(HAVE_XAW, test "${ac_cv_my_have_xaw}" = "yes") AC_SUBST(XAW_CFLAGS) AC_SUBST(XAW_LIBS) @@ -463,17 +482,19 @@ AC_SUBST(XAW_LIBS) AC_CHECK_LIB(Xm, XmStringConcat, [ ac_cv_my_have_motif=yes MOTIF_CFLAGS="-I${x_includes} -I/usr/include/Xm" - MOTIF_LIBS="-L${x_libraries} -lXm -lXmu -lXt -lSM -lICE -lXext -lX11" + MOTIF_LIBS="-L${x_libraries} -lXm ${xmu_libraries} -lXt -lSM -lICE -lXext -lX11" ], [ac_cv_my_have_motif=no], - [[-lXmu -lXt -lSM -lICE -lXext -lX11 -L${x_libraries}]]) + [[${xmu_libraries} -lXt -lSM -lICE -lXext -lX11 -L${x_libraries}]]) AM_CONDITIONAL(HAVE_MOTIF, test "${ac_cv_my_have_motif}" = "yes") AC_SUBST(MOTIF_CFLAGS) AC_SUBST(MOTIF_LIBS) -dnl Export variables INCLUDES="${INCLUDES} -I\$(top_srcdir)/include -I\$(top_builddir)/include" -ELK_LIBS="${ELK_LIBS} -lm" AC_SUBST(INCLUDES) + +dnl Export variables +AC_SUBST(ELK_CFLAGS) +AC_SUBST(ELK_LDFLAGS) AC_SUBST(ELK_LIBS) dnl diff --git a/include/extern.h b/include/extern.h index 36666a6..2364291 100644 --- a/include/extern.h +++ b/include/extern.h @@ -442,7 +442,12 @@ extern void String_Ungetc P_((Object, register int)); /* Symbols, variables, frequently used Scheme objects */ -extern Object Null, True, False, Void, Newline, Eof; +extern_c Object elk_import Null; +extern_c Object elk_import True; +extern_c Object elk_import False; +extern_c Object elk_import Void; +extern_c Object elk_import Newline; +extern_c Object elk_import Eof; extern Object Intern P_((const char*)); extern Object CI_Intern P_((const char*)); extern Object P_Oblist P_((void)); diff --git a/include/misc.h b/include/misc.h index d5fa0e2..3b8414a 100644 --- a/include/misc.h +++ b/include/misc.h @@ -28,7 +28,7 @@ * THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. */ -extern Object False2; +extern_c Object elk_import False2; #define Nullp(x) (TYPE(x) == T_Null) #define Truep(x) (!EQ(x,False) && !EQ(x,False2)) diff --git a/include/site.h.in b/include/site.h.in index 480b0e0..c52f924 100644 --- a/include/site.h.in +++ b/include/site.h.in @@ -48,6 +48,27 @@ # define elk_attribute(att) /* */ #endif +/* Properly export Win32 symbols */ +#if (defined(_WIN32) || defined(__CYGWIN__)) && \ + !(defined(ELK_BUILD_DLL) || defined(ELK_STATIC)) +# define elk_import __declspec(dllimport) +#else +# define elk_import /* */ +#endif +#if defined(__cplusplus) +# define extern_c extern "C" +#else +# define extern_c /* */ +#endif + +/* Directory separator */ +#ifdef WIN32 +# define SEPARATOR_CHAR '\\' +# define SEPARATOR_STRING "\\" +#else +# define SEPARATOR_CHAR '/' +# define SEPARATOR_STRING "/" +#endif /* Arithmetic shift right for compilers that don't sign extend: */ diff --git a/lib/misc/Makefile.am b/lib/misc/Makefile.am index 7265bce..9172f8c 100644 --- a/lib/misc/Makefile.am +++ b/lib/misc/Makefile.am @@ -14,51 +14,51 @@ pkglib_LTLIBRARIES = \ $(NULL) bitstring_la_SOURCES = bitstring.c -bitstring_la_LDFLAGS = -module -avoid-version +bitstring_la_LDFLAGS = -module -avoid-version -no-undefined bitstring_la_LIBADD = $(top_builddir)/src/libelk.la elk_eval_la_SOURCES = elk-eval.c -elk_eval_la_LDFLAGS = -module -avoid-version +elk_eval_la_LDFLAGS = -module -avoid-version -no-undefined elk_eval_la_LIBADD = $(top_builddir)/src/libelk.la hack_la_SOURCES = hack.c -hack_la_LDFLAGS = -module -avoid-version +hack_la_LDFLAGS = -module -avoid-version -no-undefined hack_la_LIBADD = $(top_builddir)/src/libelk.la regexp_la_SOURCES = regexp.c -regexp_la_LDFLAGS = -module -avoid-version +regexp_la_LDFLAGS = -module -avoid-version -no-undefined regexp_la_LIBADD = $(top_builddir)/src/libelk.la debug_la_SOURCES = debug.c -debug_la_LDFLAGS = -module -avoid-version +debug_la_LDFLAGS = -module -avoid-version -no-undefined debug_la_LIBADD = $(top_builddir)/src/libelk.la if HAVE_GDBM gdbm_la = gdbm.la endif gdbm_la_SOURCES = gdbm.c -gdbm_la_LDFLAGS = -module -avoid-version +gdbm_la_LDFLAGS = -module -avoid-version -no-undefined gdbm_la_LIBADD = $(top_builddir)/src/libelk.la -lgdbm if HAVE_MONITOR monitor_la = monitor.la endif monitor_la_SOURCES = monitor.c -monitor_la_LDFLAGS = -module -avoid-version +monitor_la_LDFLAGS = -module -avoid-version -no-undefined monitor_la_LIBADD = $(top_builddir)/src/libelk.la record_la_SOURCES = record.c -record_la_LDFLAGS = -module -avoid-version +record_la_LDFLAGS = -module -avoid-version -no-undefined record_la_LIBADD = $(top_builddir)/src/libelk.la struct_la_SOURCES = struct.c -struct_la_LDFLAGS = -module -avoid-version +struct_la_LDFLAGS = -module -avoid-version -no-undefined struct_la_LIBADD = $(top_builddir)/src/libelk.la if HAVE_CXX newhandler_la = newhandler.la endif newhandler_la_SOURCES = newhandler.cpp -newhandler_la_LDFLAGS = -module -avoid-version +newhandler_la_LDFLAGS = -module -avoid-version -no-undefined newhandler_la_LIBADD = $(top_builddir)/src/libelk.la diff --git a/src/Makefile.am b/src/Makefile.am index 5f1cc3c..128eddb 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -1,8 +1,8 @@ NULL = lib_LTLIBRARIES = libelk.la -libelk_la_CFLAGS = -I/usr/include/libelf -libelk_la_LDFLAGS = +libelk_la_CFLAGS = @ELK_CFLAGS@ -I/usr/include/libelf +libelk_la_LDFLAGS = @ELK_LDFLAGS@ libelk_la_LIBADD = @ELK_LIBS@ libelk_la_SOURCES = \ autoload.c \