kwo pushed a commit to branch master.

http://git.enlightenment.org/legacy/imlib2_loaders.git/commit/?id=5c823a3ebd73c4dcc997969a9e5f1bcbc348386b

commit 5c823a3ebd73c4dcc997969a9e5f1bcbc348386b
Author: Kim Woelders <k...@woelders.dk>
Date:   Fri Apr 6 06:28:12 2018 +0200

    Enable visibility hiding
---
 configure.ac                        |  3 ++
 m4/ec_visibility.m4                 | 69 +++++++++++++++++++++++++++++++++++++
 src/modules/loaders/Makefile.am     |  2 +-
 src/modules/loaders/loader_common.h |  6 ++--
 4 files changed, 76 insertions(+), 4 deletions(-)

diff --git a/configure.ac b/configure.ac
index 5fa0182..8665a31 100644
--- a/configure.ac
+++ b/configure.ac
@@ -67,6 +67,7 @@ AM_CONDITIONAL(BUILD_ICO_LOADER, test x$ico != xno)
 AM_CONDITIONAL(BUILD_XCF_LOADER, test x$xcf != xno)
 
 EC_C_WARNINGS()
+EC_C_VISIBILITY(yes)
 
 AC_CONFIG_HEADERS(config.h)
 AC_CONFIG_FILES([
@@ -97,5 +98,7 @@ echo "  EET.....................: $eet"
 echo "  ICO.....................: $ico"
 echo "  XCF.....................: $xcf"
 echo
+echo "Use visibility hiding.....: $enable_visibility_hiding"
+echo
 echo "Installation path.........: $prefix"
 echo
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/modules/loaders/Makefile.am b/src/modules/loaders/Makefile.am
index 00626f8..6244449 100644
--- a/src/modules/loaders/Makefile.am
+++ b/src/modules/loaders/Makefile.am
@@ -1,6 +1,6 @@
 MAINTAINERCLEANFILES = Makefile.in
 
-AM_CFLAGS            = $(CFLAGS_WARNINGS)
+AM_CFLAGS            = $(CFLAGS_WARNINGS) $(CFLAGS_VISIBILITY)
 
 pkgdir               = $(libdir)/imlib2/loaders
 
diff --git a/src/modules/loaders/loader_common.h 
b/src/modules/loaders/loader_common.h
index 35f71e0..45ea759 100644
--- a/src/modules/loaders/loader_common.h
+++ b/src/modules/loaders/loader_common.h
@@ -5,10 +5,10 @@
 #include "common.h"
 #include "image.h"
 
-char            load(ImlibImage * im, ImlibProgressFunction progress,
+__EXPORT__ char load(ImlibImage * im, ImlibProgressFunction progress,
                      char progress_granularity, char immediate_load);
-char            save(ImlibImage * im, ImlibProgressFunction progress,
+__EXPORT__ char save(ImlibImage * im, ImlibProgressFunction progress,
                      char progress_granularity);
-void            formats(ImlibLoader * l);
+__EXPORT__ void formats(ImlibLoader * l);
 
 #endif /* __LOADER_COMMON_H */

-- 


Reply via email to