Call it gnu_symbol_visibility instead.

pull/3831/head
Jussi Pakkanen 6 years ago
parent d7d948db0d
commit fb2cdd0fe2
  1. 6
      docs/markdown/Reference-manual.md
  2. 4
      docs/markdown/snippets/visibility.md
  3. 2
      mesonbuild/backend/ninjabackend.py
  4. 14
      mesonbuild/build.py
  5. 24
      mesonbuild/compilers/compilers.py
  6. 2
      mesonbuild/interpreter.py
  7. 4
      mesonbuild/minit.py
  8. 6
      test cases/failing build/2 hidden symbol/meson.build

@ -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

@ -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

@ -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.

@ -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):

@ -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):

@ -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

@ -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}',

@ -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)

Loading…
Cancel
Save