From: Eric Biggers Date: Sat, 9 Mar 2013 19:51:59 +0000 (-0600) Subject: Support for making DLL correctly on Cygwin X-Git-Tag: v1.3.0~42 X-Git-Url: https://wimlib.net/git/?p=wimlib;a=commitdiff_plain;h=c8b34bffb7884de559d6ac208e0bd982ea318a36 Support for making DLL correctly on Cygwin --- diff --git a/Makefile.am b/Makefile.am index 1e545bb1..9f455622 100644 --- a/Makefile.am +++ b/Makefile.am @@ -7,7 +7,7 @@ AM_CFLAGS = -std=gnu99 -D_LARGEFILE_SOURCE \ lib_LTLIBRARIES = libwim.la -libwim_la_LDFLAGS = -version-info 4:0:2 +libwim_la_LDFLAGS = -version-info 4:0:2 $(CYGWIN_EXTRA_LDFLAGS) libwim_la_SOURCES = \ src/add_image.c \ @@ -86,7 +86,7 @@ libwim_la_LIBADD = \ libwim_la_CFLAGS = \ $(AM_CFLAGS) \ - -fvisibility=hidden \ + $(VISIBILITY_CFLAGS) \ $(LIBXML2_CFLAGS) \ $(LIBFUSE_CFLAGS) \ $(LIBNTFS_3G_CFLAGS) \ diff --git a/configure.ac b/configure.ac index 3b02ef84..c0c0f132 100644 --- a/configure.ac +++ b/configure.ac @@ -323,4 +323,22 @@ AC_SUBST([LIBCRYPTO_LDADD], [$LIBCRYPTO_LDADD]) AC_SUBST([LIBCRYPTO_CFLAGS], [$LIBCRYPTO_CFLAGS]) AC_SUBST([SHA1_SOURCES], [$SHA1_SOURCES]) +case "$host" in + *-*-cygwin*) + dnl -no-undefined is needed to build a DLL in a Cygwin environment. + CYGWIN_EXTRA_LDFLAGS="-no-undefined" + + dnl -fvisibility=hidden should not be used in a Cygwin + dnl environment + VISIBILITY_CFLAGS="" + ;; + *) + CYGWIN_EXTRA_LDFLAGS="" + VISIBILITY_CFLAGS="-fvisibility=hidden" + ;; +esac + +AC_SUBST([CYGWIN_EXTRA_LDFLAGS], [$CYGWIN_EXTRA_LDFLAGS]) +AC_SUBST([VISIBILITY_CFLAGS], [$VISIBILITY_CFLAGS]) + AC_OUTPUT diff --git a/src/util.h b/src/util.h index 4f405666..b79490e8 100644 --- a/src/util.h +++ b/src/util.h @@ -9,7 +9,11 @@ #include "config.h" #ifdef __GNUC__ -# define WIMLIBAPI __attribute__((visibility("default"))) +# if defined(__CYGWIN__) || defined(__WIN32__) +# define WIMLIBAPI __declspec(dllexport) +# else +# define WIMLIBAPI __attribute__((visibility("default"))) +# endif # define ALWAYS_INLINE inline __attribute__((always_inline)) # define PACKED __attribute__((packed)) # define FORMAT(type, format_str, args_start) \