kwo pushed a commit to branch master.

http://git.enlightenment.org/e16/e16.git/commit/?id=8e866cf49ca6bb962a4c04d5f39f1a2d3aba5d24

commit 8e866cf49ca6bb962a4c04d5f39f1a2d3aba5d24
Author: Kim Woelders <k...@woelders.dk>
Date:   Thu Dec 25 15:33:14 2014 +0100

    Visibility cosmetics (use EC_C_VISIBILITY).
---
 configure.ac        | 11 ++-------
 lib/Makefile.am     |  5 ++--
 m4/ec_visibility.m4 | 69 +++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/Makefile.am     |  1 +
 src/util.h          |  9 -------
 5 files changed, 75 insertions(+), 20 deletions(-)

diff --git a/configure.ac b/configure.ac
index 0496427..658125d 100644
--- a/configure.ac
+++ b/configure.ac
@@ -45,6 +45,8 @@ AC_C_CONST
 AC_C_INLINE
 EC_C___ATTRIBUTE__
 EC_C___FUNC__
+EC_C_VISIBILITY(yes)
+
 AC_CHECK_SIZEOF(int, 4)
 AC_CHECK_SIZEOF(long, 4)
 AC_CHECK_SIZEOF(wchar_t, 4)
@@ -399,15 +401,6 @@ if test "x$enable_modules" = "xyes"; then
 fi
 AM_CONDITIONAL(BUILD_MODULES, test "x$enable_modules" = "xyes")
 
-dnl Set default visibility to hidden (only useful with --enable-modules)
-AC_ARG_ENABLE(visibility-hiding,
-  AC_HELP_STRING([--enable-visibility-hiding], [enable visibility hiding 
@<:@default=no@:>@]),,
-  enable_visibility_hiding=no
-)
-if test "x$enable_visibility_hiding" = xyes ; then
-  CPPFLAGS="$CPPFLAGS -fvisibility=hidden"
-fi
-
 AC_ARG_ENABLE(dialogs,
   AC_HELP_STRING([--enable-dialogs],
                  [enable support for configuration dialogs 
@<:@default=yes@:>@]),,
diff --git a/lib/Makefile.am b/lib/Makefile.am
index c5abdf4..8323da3 100644
--- a/lib/Makefile.am
+++ b/lib/Makefile.am
@@ -2,12 +2,14 @@ libe16dir = $(pkglibdir)
 
 libe16_LTLIBRARIES = $(LIB_HACK) $(LIB_TRIP)
 
+AM_CPPFLAGS = -I$(top_srcdir)/src $(X_CFLAGS) \
+             $(CFLAGS_WARNINGS) $(CFLAGS_VISIBILITY)
+
 if BUILD_LIBHACK
 
 LIB_HACK = libhack.la
 
 libhack_la_SOURCES  = e16_hack.c
-libhack_la_CPPFLAGS = -I$(top_srcdir)/src $(X_CFLAGS) $(CFLAGS_WARNINGS)
 
 libhack_la_LIBADD   = $(DLOPEN_LIBS)
 libhack_la_LDFLAGS  = -module -avoid-version
@@ -19,7 +21,6 @@ if BUILD_LIBTRIP
 LIB_TRIP = libtrip.la
 
 libtrip_la_SOURCES  = e16_trip.c
-libtrip_la_CPPFLAGS = -I$(top_srcdir)/src $(X_CFLAGS) $(CFLAGS_WARNINGS)
 
 libtrip_la_LIBADD   = $(DLOPEN_LIBS)
 libtrip_la_LDFLAGS  = -module -avoid-version
diff --git a/m4/ec_visibility.m4 b/m4/ec_visibility.m4
new file mode 100644
index 0000000..ed64b12
--- /dev/null
+++ b/m4/ec_visibility.m4
@@ -0,0 +1,69 @@
+# visibility.m4 serial 1 (gettext-0.15)
+dnl Copyright (C) 2005 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+
+dnl Tests whether the compiler supports the command-line option
+dnl -fvisibility=hidden and the function and variable attributes
+dnl __attribute__((__visibility__("hidden"))) and
+dnl __attribute__((__visibility__("default"))).
+dnl Does *not* test for __visibility__("protected") - which has tricky
+dnl semantics (see the 'vismain' test in glibc) and does not exist e.g. on
+dnl MacOS X.
+dnl Does *not* test for __visibility__("internal") - which has processor
+dnl dependent semantics.
+dnl Does *not* test for #pragma GCC visibility push(hidden) - which is
+dnl "really only recommended for legacy code".
+dnl Set the variable CFLAGS_VISIBILITY.
+dnl Defines and sets the variable HAVE_VISIBILITY.
+
+dnl Modified for E stuff by Kim Woelders
+
+AC_DEFUN([EC_C_VISIBILITY],
+[
+  AC_REQUIRE([AC_PROG_CC])
+
+  define(ec_c_vis_default, ifelse([$1], [no], [no], [yes]))
+  CFLAGS_VISIBILITY=
+  HAVE_VISIBILITY=0
+
+  AC_ARG_ENABLE([visibility-hiding],
+    [AS_HELP_STRING([--enable-visibility-hiding],
+                    [enable visibility hiding 
@<:@default=]ec_c_vis_default[@:>@])],,
+    [enable_visibility_hiding=]ec_c_vis_default)
+
+  if test -n "$GCC" -a "x$enable_visibility_hiding" = "xyes"; then
+    AC_MSG_CHECKING([for simple visibility declarations])
+    AC_CACHE_VAL(ec_cv_cc_visibility, [
+      ec_save_CFLAGS="$CFLAGS"
+      CFLAGS="$CFLAGS -fvisibility=hidden"
+      AC_COMPILE_IFELSE([
+        AC_LANG_PROGRAM([[
+        ]], [[
+extern __attribute__((__visibility__("hidden"))) int hiddenvar;
+extern __attribute__((__visibility__("default"))) int exportedvar;
+extern __attribute__((__visibility__("hidden"))) int hiddenfunc (void);
+extern __attribute__((__visibility__("default"))) int exportedfunc (void);
+        ]])
+      ],
+        ec_cv_cc_visibility=yes,
+        ec_cv_cc_visibility=no)
+      CFLAGS="$ec_save_CFLAGS"])
+    AC_MSG_RESULT([$ec_cv_cc_visibility])
+    if test $ec_cv_cc_visibility = yes; then
+      CFLAGS_VISIBILITY="-fvisibility=hidden"
+      HAVE_VISIBILITY=1
+      AC_DEFINE(__EXPORT__, __attribute__((__visibility__("default"))), 
[Symbol is exported])
+    fi
+  else
+    enable_visibility_hiding=no
+  fi
+
+  AC_SUBST([CFLAGS_VISIBILITY])
+  AC_SUBST([HAVE_VISIBILITY])
+  AC_DEFINE_UNQUOTED([HAVE_VISIBILITY], [$HAVE_VISIBILITY],
+    [Define to 1 or 0, depending whether the compiler supports simple 
visibility declarations.])
+])
diff --git a/src/Makefile.am b/src/Makefile.am
index f6f30b2..88cbcb5 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -122,6 +122,7 @@ e16_SOURCES = \
 
 AM_CPPFLAGS = \
        $(CFLAGS_WARNINGS) \
+       $(CFLAGS_VISIBILITY) \
        -D LOCALEDIR=\"$(datadir)/locale\" \
        -D ENLIGHTENMENT_BIN=\"$(bindir)\" \
        -D ENLIGHTENMENT_LIB=\"$(pkglibdir)\" \
diff --git a/src/util.h b/src/util.h
index bbde8ef..7fca1a9 100644
--- a/src/util.h
+++ b/src/util.h
@@ -36,15 +36,6 @@
 #define INT2PTR(i) ((void*)(long)(i))
 #define PTR2INT(p) ((int)(long)(p))
 
-/* Inspired by Xfuncproto.h */
-#if defined(__GNUC__) && ((__GNUC__ * 100 + __GNUC_MINOR__) >= 303)
-#define __EXPORT__      __attribute__((visibility("default")))
-#elif defined(__SUNPRO_C) && (__SUNPRO_C >= 0x550)
-#define __EXPORT__      __global
-#else /* not gcc >= 3.3 and not Sun Studio >= 8 */
-#define __EXPORT__
-#endif
-
 #if HAVE___ATTRIBUTE__
 #define __PRINTF_N__(no)  __attribute__((__format__(__printf__, (no), (no)+1)))
 #define __NORETURN__      __attribute__((noreturn))

-- 


Reply via email to