diff options
Diffstat (limited to 'mesonbuild')
-rw-r--r-- | mesonbuild/backend/ninjabackend.py | 2 | ||||
-rw-r--r-- | mesonbuild/build.py | 9 | ||||
-rw-r--r-- | mesonbuild/compilers.py | 7 |
3 files changed, 17 insertions, 1 deletions
diff --git a/mesonbuild/backend/ninjabackend.py b/mesonbuild/backend/ninjabackend.py index 00b711d..4757bd3 100644 --- a/mesonbuild/backend/ninjabackend.py +++ b/mesonbuild/backend/ninjabackend.py @@ -1658,6 +1658,8 @@ rule FORTRAN_DEP_HACK else: soversion = None commands += linker.get_soname_args(target.name, abspath, soversion) + if target.vs_module_defs and hasattr(linker, 'gen_vs_module_defs_args'): + commands += linker.gen_vs_module_defs_args(target.vs_module_defs.rel_to_builddir(self.build_to_src)) elif isinstance(target, build.StaticLibrary): commands += linker.get_std_link_args() else: diff --git a/mesonbuild/build.py b/mesonbuild/build.py index 3f480e8..2a91aa3 100644 --- a/mesonbuild/build.py +++ b/mesonbuild/build.py @@ -47,7 +47,7 @@ known_shlib_kwargs.update({'version' : True, 'soversion' : True, 'name_prefix' : True, 'name_suffix' : True, - }) + 'vs_module_defs' : True}) backslash_explanation = \ '''Compiler arguments have a backslash "\\" character. This is unfortunately not @@ -703,6 +703,7 @@ class SharedLibrary(BuildTarget): def __init__(self, name, subdir, subproject, is_cross, sources, objects, environment, kwargs): self.version = None self.soversion = None + self.vs_module_defs = None super().__init__(name, subdir, subproject, is_cross, sources, objects, environment, kwargs); if len(self.sources) > 0 and self.sources[0].endswith('.cs'): prefix = 'lib' @@ -726,6 +727,12 @@ class SharedLibrary(BuildTarget): self.set_version(kwargs['version']) if 'soversion' in kwargs: self.set_soversion(kwargs['soversion']) + if 'vs_module_defs' in kwargs: + path = kwargs['vs_module_defs'] + if (os.path.isabs(path)): + self.vs_module_defs = File.from_absolute_file(path) + else: + self.vs_module_defs = File.from_source_file(environment.source_dir, self.subdir, path) def check_unknown_kwargs(self, kwargs): self.check_unknown_kwargs_int(kwargs, known_shlib_kwargs) diff --git a/mesonbuild/compilers.py b/mesonbuild/compilers.py index e87f974..7bc59d8 100644 --- a/mesonbuild/compilers.py +++ b/mesonbuild/compilers.py @@ -1256,6 +1256,13 @@ class VisualStudioCCompiler(CCompiler): def get_std_shared_lib_link_args(self): return ['/DLL'] + def gen_vs_module_defs_args(self, defsfile): + if not isinstance(defsfile, str): + raise RuntimeError('Module definitions file should be str') + # With MSVC, DLLs only export symbols that are explicitly exported, + # so if a module defs file is specified, we use that to export symbols + return ['/DEF:' + defsfile] + def gen_pch_args(self, header, source, pchname): objname = os.path.splitext(pchname)[0] + '.obj' return (objname, ['/Yc' + header, '/Fp' + pchname, '/Fo' + objname ]) |