aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--docs/markdown/Reference-manual.md6
-rw-r--r--docs/markdown/snippets/visibility.md4
-rw-r--r--mesonbuild/backend/ninjabackend.py2
-rw-r--r--mesonbuild/build.py14
-rw-r--r--mesonbuild/compilers/compilers.py24
-rw-r--r--mesonbuild/interpreter.py2
-rw-r--r--mesonbuild/minit.py4
-rw-r--r--test cases/failing build/2 hidden symbol/meson.build6
8 files changed, 31 insertions, 31 deletions
diff --git a/docs/markdown/Reference-manual.md b/docs/markdown/Reference-manual.md
index d14f639..a7b8a2b 100644
--- a/docs/markdown/Reference-manual.md
+++ b/docs/markdown/Reference-manual.md
@@ -511,13 +511,13 @@ be passed to [shared and static libraries](#library).
- `override_options` takes an array of strings in the same format as
`project`'s `default_options` overriding the values of these options
for this target only, since 0.40.0
-- `symbol_visibility` specifies how symbols should be exported, see
+- `gnu_symbol_visibility` specifies how symbols should be exported, see
e.g [the GCC Wiki](https://gcc.gnu.org/wiki/Visibility) for more
information. This value can either be an empty string or one of
`default`, `internal`, `hidden`, `protected` or `inlineshidden`, which
is the same as `hidden` but also includes things like C++ implicit
- constructors as specified in the GCC manual. Available since
- 0.48.0.
+ constructors as specified in the GCC manual. Ignored on compilers that
+ do not support GNU visibility arguments. Available since 0.48.0.
- `d_import_dirs` list of directories to look in for string imports used
in the D programming language
- `d_unittest`, when set to true, the D modules are compiled in debug mode
diff --git a/docs/markdown/snippets/visibility.md b/docs/markdown/snippets/visibility.md
index f55a48f..4b67105 100644
--- a/docs/markdown/snippets/visibility.md
+++ b/docs/markdown/snippets/visibility.md
@@ -1,4 +1,4 @@
-## Keyword argument for symbol visibility
+## Keyword argument for GNU symbol visibility
Build targets got a new keyword, `symbol_visibility` that controls how
symbols are exported from shared libraries. This is most commonly used
@@ -6,7 +6,7 @@ to hide implementation symbols like this:
```meson
shared_library('mylib', ...
- symbol_visibility: 'hidden')
+ gnu_symbol_visibility: 'hidden')
```
In this case only symbols explicitly marked as visible in the source
diff --git a/mesonbuild/backend/ninjabackend.py b/mesonbuild/backend/ninjabackend.py
index f88c589..9dcf0fa 100644
--- a/mesonbuild/backend/ninjabackend.py
+++ b/mesonbuild/backend/ninjabackend.py
@@ -1952,7 +1952,7 @@ rule FORTRAN_DEP_HACK%s
# various sources in the order in which they must override each other
commands = CompilerArgs(compiler)
# Start with symbol visibility.
- commands += compiler.symbol_visibility_args(target.symbol_visibility)
+ commands += compiler.gnu_symbol_visibility_args(target.gnu_symbol_visibility)
# Add compiler args for compiling this target derived from 'base' build
# options passed on the command-line, in default_options, etc.
# These have the lowest priority.
diff --git a/mesonbuild/build.py b/mesonbuild/build.py
index 3d43c89..c1cb8a8 100644
--- a/mesonbuild/build.py
+++ b/mesonbuild/build.py
@@ -71,7 +71,7 @@ buildtarget_kwargs = set([
'objects',
'override_options',
'sources',
- 'symbol_visibility',
+ 'gnu_symbol_visibility',
])
known_build_target_kwargs = (
@@ -818,13 +818,13 @@ This will become a hard error in a future Meson release.''')
self.implicit_include_directories = kwargs.get('implicit_include_directories', True)
if not isinstance(self.implicit_include_directories, bool):
raise InvalidArguments('Implicit_include_directories must be a boolean.')
- self.symbol_visibility = kwargs.get('symbol_visibility', '')
- if not isinstance(self.symbol_visibility, str):
- raise InvalidArguments('Symbol visibility must be a string.')
- if self.symbol_visibility != '':
+ self.gnu_symbol_visibility = kwargs.get('gnu_symbol_visibility', '')
+ if not isinstance(self.gnu_symbol_visibility, str):
+ raise InvalidArguments('GNU symbol visibility must be a string.')
+ if self.gnu_symbol_visibility != '':
permitted = ['default', 'internal', 'hidden', 'protected', 'inlineshidden']
- if self.symbol_visibility not in permitted:
- raise InvalidArguments('Symbol visibility arg %s not one of: %s',
+ if self.gnu_symbol_visibility not in permitted:
+ raise InvalidArguments('GNU symbol visibility arg %s not one of: %s',
self.symbol_visibility, ', '.join(permitted))
def get_filename(self):
diff --git a/mesonbuild/compilers/compilers.py b/mesonbuild/compilers/compilers.py
index 3668a79..b62bc4a 100644
--- a/mesonbuild/compilers/compilers.py
+++ b/mesonbuild/compilers/compilers.py
@@ -311,13 +311,13 @@ vs64_instruction_set_args = {'mmx': ['/arch:AVX'],
'neon': None,
}
-common_symbol_visibility_args = {'': [],
- 'default': ['-fvisibility=default'],
- 'internal': ['-fvisibility=internal'],
- 'hidden': ['-fvisibility=hidden'],
- 'protected': ['-fvisibility=protected'],
- 'inlineshidden': ['-fvisibility=hidden', '-fvisibility-inlines-hidden'],
- }
+gnu_symbol_visibility_args = {'': [],
+ 'default': ['-fvisibility=default'],
+ 'internal': ['-fvisibility=internal'],
+ 'hidden': ['-fvisibility=hidden'],
+ 'protected': ['-fvisibility=protected'],
+ 'inlineshidden': ['-fvisibility=hidden', '-fvisibility-inlines-hidden'],
+ }
def sanitizer_compile_args(value):
if value == 'none':
@@ -1070,7 +1070,7 @@ class Compiler:
# building fails with undefined symbols.
return []
- def symbol_visibility_args(self, vistype):
+ def gnu_symbol_visibility_args(self, vistype):
return []
GCC_STANDARD = 0
@@ -1288,8 +1288,8 @@ class GnuCompiler:
def openmp_flags(self):
return ['-fopenmp']
- def symbol_visibility_args(self, vistype):
- return common_symbol_visibility_args[vistype]
+ def gnu_symbol_visibility_args(self, vistype):
+ return gnu_symbol_visibility_args[vistype]
class ElbrusCompiler(GnuCompiler):
# Elbrus compiler is nearly like GCC, but does not support
@@ -1432,8 +1432,8 @@ class ClangCompiler:
# Shouldn't work, but it'll be checked explicitly in the OpenMP dependency.
return []
- def symbol_visibility_args(self, vistype):
- return common_symbol_visibility_args[vistype]
+ def gnu_symbol_visibility_args(self, vistype):
+ return gnu_symbol_visibility_args[vistype]
class ArmclangCompiler:
def __init__(self):
diff --git a/mesonbuild/interpreter.py b/mesonbuild/interpreter.py
index c84ed96..c02201e 100644
--- a/mesonbuild/interpreter.py
+++ b/mesonbuild/interpreter.py
@@ -3850,7 +3850,7 @@ Try setting b_lundef to false instead.''')
@FeatureNewKwargs('build target', '0.42.0', ['rust_crate_type', 'build_rpath', 'implicit_include_directories'])
@FeatureNewKwargs('build target', '0.41.0', ['rust_args'])
@FeatureNewKwargs('build target', '0.40.0', ['build_by_default'])
- @FeatureNewKwargs('build target', '0.48.0', ['symbol_visibility'])
+ @FeatureNewKwargs('build target', '0.48.0', ['gnu_symbol_visibility'])
def build_target_decorator_caller(self, node, args, kwargs):
return True
diff --git a/mesonbuild/minit.py b/mesonbuild/minit.py
index 7dd482b..a66361f 100644
--- a/mesonbuild/minit.py
+++ b/mesonbuild/minit.py
@@ -75,7 +75,7 @@ lib_args = ['-DBUILDING_{utoken}']
shlib = shared_library('{lib_name}', '{source_file}',
install : true,
c_args : lib_args,
- symbol_visibility : 'hidden',
+ gnu_symbol_visibility : 'hidden',
)
test_exe = executable('{test_exe_name}', '{test_source_file}',
@@ -223,7 +223,7 @@ lib_args = ['-DBUILDING_{utoken}']
shlib = shared_library('{lib_name}', '{source_file}',
install : true,
cpp_args : lib_args,
- symbol_visibility : 'hidden',
+ gnu_symbol_visibility : 'hidden',
)
test_exe = executable('{test_exe_name}', '{test_source_file}',
diff --git a/test cases/failing build/2 hidden symbol/meson.build b/test cases/failing build/2 hidden symbol/meson.build
index d888385..0527347 100644
--- a/test cases/failing build/2 hidden symbol/meson.build
+++ b/test cases/failing build/2 hidden symbol/meson.build
@@ -1,14 +1,14 @@
project('hidden symbol', 'c')
-if host_machine.system() == 'windows'
+if host_machine.system() == 'windows' or host_machine.system() == 'cygwin'
cc = meson.get_compiler('c')
if cc.get_id() == 'gcc'
- error('MESON_SKIP_TEST -fvisibility=hidden does not work on MinGW.')
+ error('MESON_SKIP_TEST -fvisibility=hidden does not work on MinGW or Cygwin.')
endif
endif
l = shared_library('bob', 'bob.c',
- symbol_visibility: 'hidden')
+ gnu_symbol_visibility: 'hidden')
executable('bobuser', 'bobuser.c',
link_with: l)