Selaa lähdekoodia

configure: reworked _MHD_EXTERN definition

Evgeny Grin (Karlson2k) 1 vuosi sitten
vanhempi
sitoutus
98c94f3b26
4 muutettua tiedostoa jossa 52 lisäystä ja 38 poistoa
  1. 24 26
      configure.ac
  2. 26 10
      src/include/mhd_options.h
  3. 1 1
      src/microhttpd/Makefile.am
  4. 1 1
      src/microhttpd_ws/Makefile.am

+ 24 - 26
configure.ac

@@ -3265,42 +3265,40 @@ MHD_CHECK_FUNC([[sysctlbyname]], [[
 MHD_CHECK_FUNC([[usleep]], [[#include <unistd.h>]], [[usleep(100000);]])
 MHD_CHECK_FUNC([[nanosleep]], [[#include <time.h>]], [[struct timespec ts2, ts1 = {0, 0}; nanosleep(&ts1, &ts2);]])
 
-HIDDEN_VISIBILITY_CFLAGS=""
-AH_TEMPLATE([_MHD_EXTERN],[defines how to decorate public symbols w][hile building the library])
-CFLAGS="${user_CFLAGS}"
-MHD_CHECK_CC_CFLAG([-fvisibility=hidden],[CFLAGS_ac],
+# NOTE: require setting of errattr_CFLAGS above
+CFLAGS="${CFLAGS_ac} ${user_CFLAGS} ${errattr_CFLAGS}"
+AC_CACHE_CHECK([whether $CC supports __attribute__((visibility("default")))],[mhd_cv_cc_attr_visibility_default],
   [
-    # NOTE: require setting of errattr_CFLAGS above
-    CFLAGS="${CFLAGS_ac} -fvisibility=hidden ${user_CFLAGS} ${errattr_CFLAGS}"
-    AC_CACHE_CHECK([whether $CC supports __attribute__((visibility("default")))],[mhd_cv_cc_attr_visibility],
-      [
-        AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
-extern __attribute__((visibility("default"))) int test_extrn_func(void);
+    AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
+extern __attribute__((visibility("default"))) int
+test_extrn_func(void);
 
-int test_extrn_func(void) {return 0;}
-              ]])
-          ],
-          [mhd_cv_cc_attr_visibility="yes"],[mhd_cv_cc_attr_visibility="no"]
-        )
-      ]
+extern __attribute__((visibility("default"))) int
+test_extrn_func(void) {return 0;}
+          ]])
+      ],
+      [mhd_cv_cc_attr_visibility_default="yes"],[mhd_cv_cc_attr_visibility_default="no"]
+    )
+  ]
+)
+AS_VAR_IF([mhd_cv_cc_attr_visibility_default],["yes"],
+  [
+    AC_DEFINE([HAVE_ATTR_VISIBILITY_DEFAULT],[1],
+      [Define to '1' if your compiler supports __attribute__((visibility("default")))]
     )
-    AS_VAR_IF([mhd_cv_cc_attr_visibility],["yes"],
+
+    CFLAGS="${user_CFLAGS}"
+    MHD_CHECK_CC_CFLAG([-fvisibility=hidden],[CFLAGS_ac],
       [
-        HIDDEN_VISIBILITY_CFLAGS="-fvisibility=hidden"
-        AS_IF([test "x$os_is_native_w32" = "xyes" && test "x$enable_shared" = "xyes"],
-          [AC_DEFINE([_MHD_EXTERN], [__attribute__((visibility("default"))) __declspec(dllexport) extern])],
-          [AC_DEFINE([_MHD_EXTERN], [__attribute__((visibility("default"))) extern])]
-        )
+        MHD_APPEND_FLAG_TO_VAR([MHD_LIB_CFLAGS],[-fvisibility=hidden])
       ],
       [
-        AC_MSG_WARN([$CC supports -fvisibility, but does not support __attribute__((visibility("default"))). Check compiler and compiler flags.])
-        AC_DEFINE([_MHD_EXTERN], [extern])
+        AC_MSG_WARN([[$CC supports __attribute__((visibility("default"))), but does not support -fvisibility=hidden. Check compiler and compiler flags.]])
       ]
     )
-  ],[AC_DEFINE([_MHD_EXTERN], [extern])]
+  ]
 )
 CFLAGS="${CFLAGS_ac} ${user_CFLAGS}"
-AC_SUBST([HIDDEN_VISIBILITY_CFLAGS])
 
 # libcurl (required for testing)
 AC_ARG_ENABLE([curl],

+ 26 - 10
src/include/mhd_options.h

@@ -1,6 +1,6 @@
 /*
   This file is part of libmicrohttpd
-  Copyright (C) 2016-2021 Karlson2k (Evgeny Grin)
+  Copyright (C) 2016-2024 Karlson2k (Evgeny Grin)
 
   This library is free software; you can redistribute it and/or
   modify it under the terms of the GNU Lesser General Public
@@ -41,17 +41,33 @@
  */
 #define _(String) (String)
 
-#if defined(_MHD_EXTERN) && ! defined(BUILDING_MHD_LIB)
-#undef _MHD_EXTERN
-#endif /* _MHD_EXTERN && ! BUILDING_MHD_LIB */
+#ifdef HAVE_ATTR_VISIBILITY_DEFAULT
+#  define MHD_VISIBILITY_EXTERN __attribute__((visibility ("default")))
+#else
+#  define MHD_VISIBILITY_EXTERN /* empty */
+#endif
+
+#if ! defined(_WIN32) || \
+  (! defined(DLL_EXPORT)    /* Defined by libtool for shared version */ \
+  && ! defined(MHD_W32DLL) /* Defined by MS VS projects for MHD DLL */)
+#  define MHD_EXPORTED /* empty */
+#else
+#  define MHD_EXPORTED __declspec(dllexport)
+#endif
+
+#if defined(_MHD_EXTERN) && defined(BUILDING_MHD_LIB)
+#  undef _MHD_EXTERN
+#endif /* _MHD_EXTERN && BUILDING_MHD_LIB */
 
 #ifndef _MHD_EXTERN
-#if defined(BUILDING_MHD_LIB) && defined(_WIN32) && \
-  (defined(DLL_EXPORT) || defined(MHD_W32DLL))
-#define _MHD_EXTERN __declspec(dllexport) extern
-#else   /* !BUILDING_MHD_LIB || !_WIN32 || (!DLL_EXPORT && !MHD_W32DLL) */
-#define _MHD_EXTERN extern
-#endif  /* !BUILDING_MHD_LIB || !_WIN32 || (!DLL_EXPORT && !MHD_W32DLL) */
+#  ifdef BUILDING_MHD_LIB
+/* Building MHD itself */
+#    define _MHD_EXTERN \
+  extern MHD_VISIBILITY_EXTERN MHD_EXPORTED
+#  else  /* ! BUILDING_MHD_LIB */
+/* Test or example code, using MHD as a library */
+#    define _MHD_EXTERN extern
+#  endif /* ! BUILDING_MHD_LIB */
 #endif  /* ! _MHD_EXTERN */
 
 /* Some platforms (FreeBSD, Solaris, W32) allow to override

+ 1 - 1
src/microhttpd/Makefile.am

@@ -4,7 +4,7 @@ AM_CPPFLAGS = \
   -I$(top_srcdir)/src/include \
   $(CPPFLAGS_ac)
 
-AM_CFLAGS = $(CFLAGS_ac) $(HIDDEN_VISIBILITY_CFLAGS)
+AM_CFLAGS = $(CFLAGS_ac)
 
 AM_LDFLAGS = $(LDFLAGS_ac)
 

+ 1 - 1
src/microhttpd_ws/Makefile.am

@@ -3,7 +3,7 @@ AM_CPPFLAGS = \
   -I$(top_srcdir)/src/include \
   -I$(top_srcdir)/src/microhttpd
 
-AM_CFLAGS = $(HIDDEN_VISIBILITY_CFLAGS)
+AM_CFLAGS = $(CFLAGS_ac)
 
 $(top_builddir)/src/microhttpd/libmicrohttpd.la: $(top_builddir)/src/microhttpd/Makefile
 	@echo ' cd $(top_builddir)/src/microhttpd && $(MAKE) $(AM_MAKEFLAGS) libmicrohttpd.la'; \