diff options
Diffstat (limited to 'mesonbuild')
-rw-r--r-- | mesonbuild/backend/ninjabackend.py | 3 | ||||
-rw-r--r-- | mesonbuild/build.py | 10 | ||||
-rw-r--r-- | mesonbuild/compilers.py | 4 | ||||
-rw-r--r-- | mesonbuild/interpreter.py | 10 |
4 files changed, 24 insertions, 3 deletions
diff --git a/mesonbuild/backend/ninjabackend.py b/mesonbuild/backend/ninjabackend.py index 659a53d..6e2b1ee 100644 --- a/mesonbuild/backend/ninjabackend.py +++ b/mesonbuild/backend/ninjabackend.py @@ -1927,7 +1927,8 @@ rule FORTRAN_DEP_HACK commands += linker.get_linker_always_args() if not isinstance(target, build.StaticLibrary): commands += compilers.get_base_link_args(self.environment.coredata.base_options, - linker) + linker, + isinstance(target, build.SharedModule)) commands += linker.get_buildtype_linker_args(self.environment.coredata.get_builtin_option('buildtype')) commands += linker.get_option_link_args(self.environment.coredata.compiler_options) commands += self.get_link_debugfile_args(linker, target, outname) diff --git a/mesonbuild/build.py b/mesonbuild/build.py index 39e215f..b5ca5aa 100644 --- a/mesonbuild/build.py +++ b/mesonbuild/build.py @@ -1129,6 +1129,16 @@ class SharedLibrary(BuildTarget): def type_suffix(self): return "@sha" +# A shared library that is meant to be used with dlopen rather than linking +# into something else. +class SharedModule(SharedLibrary): + def __init__(self, name, subdir, subproject, is_cross, sources, objects, environment, kwargs): + if 'version' in kwargs: + raise MesonException('Shared modules must not specify the version kwarg.') + if 'soversion' in kwargs: + raise MesonException('Shared modules must not specify the soversion kwarg.') + super().__init__(name, subdir, subproject, is_cross, sources, objects, environment, kwargs) + class CustomTarget: known_kwargs = {'input' : True, 'output' : True, diff --git a/mesonbuild/compilers.py b/mesonbuild/compilers.py index 8f8851f..c603f37 100644 --- a/mesonbuild/compilers.py +++ b/mesonbuild/compilers.py @@ -248,7 +248,7 @@ def get_base_compile_args(options, compiler): pass return args -def get_base_link_args(options, linker): +def get_base_link_args(options, linker, is_shared_module): args = [] # FIXME, gcc/clang specific. try: @@ -269,7 +269,7 @@ def get_base_link_args(options, linker): except KeyError: pass try: - if options['b_lundef'].value: + if not is_shared_module and options['b_lundef'].value: args.append('-Wl,--no-undefined') except KeyError: pass diff --git a/mesonbuild/interpreter.py b/mesonbuild/interpreter.py index ef99511..fefc1ff 100644 --- a/mesonbuild/interpreter.py +++ b/mesonbuild/interpreter.py @@ -586,6 +586,10 @@ class SharedLibraryHolder(BuildTargetHolder): def __init__(self, target, interp): super().__init__(target, interp) +class SharedModuleHolder(BuildTargetHolder): + def __init__(self, target, interp): + super().__init__(target, interp) + class JarHolder(BuildTargetHolder): def __init__(self, target, interp): super().__init__(target, interp) @@ -1203,6 +1207,7 @@ class Interpreter(): 'dependency' : self.func_dependency, 'static_library' : self.func_static_lib, 'shared_library' : self.func_shared_lib, + 'shared_module' : self.func_shared_module, 'library' : self.func_library, 'jar' : self.func_jar, 'build_target': self.func_build_target, @@ -1961,6 +1966,9 @@ requirements use the version keyword argument instead.''') def func_shared_lib(self, node, args, kwargs): return self.build_target(node, args, kwargs, SharedLibraryHolder) + def func_shared_module(self, node, args, kwargs): + return self.build_target(node, args, kwargs, SharedModuleHolder) + def func_library(self, node, args, kwargs): if self.coredata.get_builtin_option('default_library') == 'shared': return self.func_shared_lib(node, args, kwargs) @@ -2448,6 +2456,8 @@ requirements use the version keyword argument instead.''') targetclass = build.Executable elif targetholder is SharedLibraryHolder: targetclass = build.SharedLibrary + elif targetholder is SharedModuleHolder: + targetclass = build.SharedModule elif targetholder is StaticLibraryHolder: targetclass = build.StaticLibrary elif targetholder is JarHolder: |