]> git.ipfire.org Git - thirdparty/libarchive.git/commitdiff
Hide internal symbols on platforms that support visibility annotations (see discussio...
authorYuri Gribov <tetra2005@gmail.com>
Sun, 3 Jul 2022 07:54:39 +0000 (10:54 +0300)
committerYuri Gribov <tetra2005@gmail.com>
Wed, 27 Jul 2022 18:46:34 +0000 (21:46 +0300)
CMakeLists.txt
configure.ac
libarchive/archive.h
libarchive/archive_entry.h

index 1e1ff575fd363eb1fc7795a81c5c90547bb91256..df83ed18835949385cb22e4a6e7d95a0663a81ea 100644 (file)
@@ -2024,6 +2024,17 @@ CHECK_CRYPTO("MD5;RMD160;SHA1;SHA256;SHA512" LIBMD)
 
 CHECK_CRYPTO_WIN("MD5;SHA1;SHA256;SHA384;SHA512")
 
+# Check visibility annotations
+SET(OLD_CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS}")
+SET(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -fvisibility=hidden -Werror")
+CHECK_C_SOURCE_COMPILES("void __attribute__((visibility(\"default\"))) foo(void);
+int main() { return 0; }" HAVE_VISIBILITY_ATTR)
+IF (HAVE_VISIBILITY_ATTR)
+  SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fvisibility=hidden")
+  ADD_DEFINITIONS(-D__LIBARCHIVE_ENABLE_VISIBILITY)
+ENDIF(HAVE_VISIBILITY_ATTR)
+SET(CMAKE_REQUIRED_FLAGS "${OLD_CMAKE_REQUIRED_FLAGS}")
+
 # Generate "config.h" from "build/cmake/config.h.in"
 CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/build/cmake/config.h.in
        ${CMAKE_CURRENT_BINARY_DIR}/config.h)
index b30430d21cc51b9b29b1634907bfe72752b0fcda..cc51badc041331a42d05da026616000270bfd426 100644 (file)
@@ -1247,6 +1247,18 @@ case "$host_os" in
        ;;
 esac
 
+dnl Visibility annotations...
+saved_CFLAGS="$CFLAGS"
+CFLAGS="$CFLAGS -fvisibility=hidden -Werror"
+AC_MSG_CHECKING(whether compiler supports visibility annotations)
+AC_LINK_IFELSE([AC_LANG_PROGRAM([
+                 int foo( void ) __attribute__((visibility("default")));
+               ])],
+               [CFLAGS="$saved_CFLAGS -fvisibility=hidden -D__LIBARCHIVE_ENABLE_VISIBILITY";
+                AC_MSG_RESULT(yes)],
+               [CFLAGS="$saved_CFLAGS"
+                AC_MSG_RESULT(no)])
+
 # Ensure test directories are present if building out-of-tree
 AC_CONFIG_COMMANDS([mkdirs],
                   [mkdir -p libarchive/test tar/test cat/test cpio/test])
index 7f58a1f2ab49af8ac7a8f03f4f2440ea60febac7..dcb8b0df2802a06c45f411f11f10e63c5cc196ae 100644 (file)
@@ -120,6 +120,8 @@ typedef ssize_t la_ssize_t;
 #   define __LA_DECL   __declspec(dllimport)
 #  endif
 # endif
+#elif defined __LIBARCHIVE_ENABLE_VISIBILITY
+#  define __LA_DECL __attribute__((visibility("default")))
 #else
 /* Static libraries or non-Windows needs no special declaration. */
 # define __LA_DECL
index 450b3cf957af8f62fc4a43ce59cc76e0145cd7b8..e579e9f33123a7777a08d33d8abdf44215602d8f 100644 (file)
@@ -122,6 +122,8 @@ typedef ssize_t la_ssize_t;
 #   define __LA_DECL   __declspec(dllimport)
 #  endif
 # endif
+#elif defined __LIBARCHIVE_ENABLE_VISIBILITY
+#  define __LA_DECL __attribute__((visibility("default")))
 #else
 /* Static libraries on all platforms and shared libraries on non-Windows. */
 # define __LA_DECL