[pacman-dev] [PATCH v2 2/3] meson: use hidden symbol visiblity by default

Emil Velikov emil.l.velikov at gmail.com
Tue Jan 5 00:48:12 UTC 2021


All the required public API is annotated with SYMEXPORT, so we can just
add the meson notation, to hide all the symbols by default.

Thus we no longer spill all the internal API into the global namespace.

This is effectively a regression from the autotools build, which used
hidden and internal for DARWIN and others respectively.

The use of hidden is considered sufficient, considering:
 - internal was introduced with commit 920b0d20 ("Update usage of gcc
   __attribute__ flags"), referencing the GCC manual and potential
   optimisations, although
 - the details about the optimisations or respective benefits are close
   to non-existent,
 - the code/data size of the binaries is identical across hidden and
   internal. While the latter produces slightly larger overall binaries.
 - Internal is not widely supported - missing on Darwin, the CMake build
   system lacks a wrapper (unlike for hidden)
 - Internal is not widely used in projects.

v2: Enumerate various points why hidden was chosen.

Signed-off-by: Emil Velikov <emil.l.velikov at gmail.com>
---
 meson.build | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/meson.build b/meson.build
index 740ad717..11b602aa 100644
--- a/meson.build
+++ b/meson.build
@@ -303,6 +303,7 @@ libcommon = static_library(
   'common',
   libcommon_sources,
   include_directories : includes,
+  gnu_symbol_visibility : 'hidden',
   install : false)
 
 alpm_deps = [crypto_provider, libarchive, libcurl, libintl, gpgme]
@@ -313,6 +314,7 @@ libalpm_a = static_library(
   # https://github.com/mesonbuild/meson/issues/3937
   objects : libcommon.extract_all_objects(),
   include_directories : includes,
+  gnu_symbol_visibility : 'hidden',
   dependencies : alpm_deps)
 
 libalpm = library(
-- 
2.30.0


More information about the pacman-dev mailing list