aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--docs/markdown/Reference-manual.md2
-rw-r--r--mesonbuild/backend/ninjabackend.py4
-rw-r--r--mesonbuild/compilers.py10
-rw-r--r--test cases/windows/10 vs module defs generated/meson.build8
-rw-r--r--test cases/windows/10 vs module defs generated/subdir/somedll.c2
-rw-r--r--test cases/windows/6 vs module defs/meson.build8
-rw-r--r--test cases/windows/6 vs module defs/subdir/somedll.c2
7 files changed, 19 insertions, 17 deletions
diff --git a/docs/markdown/Reference-manual.md b/docs/markdown/Reference-manual.md
index 6f34e5e..62c0fb3 100644
--- a/docs/markdown/Reference-manual.md
+++ b/docs/markdown/Reference-manual.md
@@ -582,7 +582,7 @@ Builds a shared library with the given sources. Positional and keyword arguments
- `version` a string specifying the version of this shared library, such as `1.1.0`. On Linux and OS X, this is used to set the shared library version in the filename, such as `libfoo.so.1.1.0` and `libfoo.1.1.0.dylib`. If this is not specified, `soversion` is used instead (see below).
- `soversion` a string specifying the soversion of this shared library, such as `0`. On Linux and Windows this is used to set the soversion (or equivalent) in the filename. For example, if `soversion` is `4`, a Windows DLL will be called `foo-4.dll` and one of the aliases of the Linux shared library would be `libfoo.so.4`. If this is not specified, the first part of `version` is used instead. For example, if `version` is `3.6.0` and `soversion` is not defined, it is set to `3`.
-- `vs_module_defs` a string pointing to a file or a File object that contains Visual Studio symbol export definitions.
+- `vs_module_defs` a string pointing to a file or a File object that is a Microsoft module definition file for controlling symbol exports, etc., on platforms where that is possible (e.g. Windows).
### shared_module()
diff --git a/mesonbuild/backend/ninjabackend.py b/mesonbuild/backend/ninjabackend.py
index 797fb64..b85b11a 100644
--- a/mesonbuild/backend/ninjabackend.py
+++ b/mesonbuild/backend/ninjabackend.py
@@ -2179,10 +2179,10 @@ rule FORTRAN_DEP_HACK
commands += linker.get_soname_args(target.prefix, target.name, target.suffix,
abspath, target.soversion,
isinstance(target, build.SharedModule))
- # This is only visited when using the Visual Studio toolchain
+ # This is only visited when building for Windows using either GCC or Visual Studio
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))
- # This is only visited when building for Windows using either MinGW/GCC or Visual Studio
+ # This is only visited when building for Windows using either GCC or Visual Studio
if target.import_filename:
commands += linker.gen_import_library_args(os.path.join(target.subdir, target.import_filename))
elif isinstance(target, build.StaticLibrary):
diff --git a/mesonbuild/compilers.py b/mesonbuild/compilers.py
index a36f184..c30e8fb 100644
--- a/mesonbuild/compilers.py
+++ b/mesonbuild/compilers.py
@@ -2451,6 +2451,16 @@ class GnuCompiler:
def get_link_whole_for(self, args):
return ['-Wl,--whole-archive'] + args + ['-Wl,--no-whole-archive']
+ def gen_vs_module_defs_args(self, defsfile):
+ if not isinstance(defsfile, str):
+ raise RuntimeError('Module definitions file should be str')
+ # On Windows targets, .def files may be specified on the linker command
+ # line like an object file.
+ if self.gcc_type in (GCC_CYGWIN, GCC_MINGW):
+ return [defsfile]
+ # For other targets, discard the .def file.
+ return []
+
class GnuCCompiler(GnuCompiler, CCompiler):
def __init__(self, exelist, version, gcc_type, is_cross, exe_wrapper=None, defines=None):
diff --git a/test cases/windows/10 vs module defs generated/meson.build b/test cases/windows/10 vs module defs generated/meson.build
index 5ce1a20..7728ca7 100644
--- a/test cases/windows/10 vs module defs generated/meson.build
+++ b/test cases/windows/10 vs module defs generated/meson.build
@@ -1,7 +1,5 @@
project('generated_dll_module_defs', 'c')
-if meson.get_compiler('c').get_id() == 'msvc'
- subdir('subdir')
- exe = executable('prog', 'prog.c', link_with : shlib)
- test('runtest', exe)
-endif
+subdir('subdir')
+exe = executable('prog', 'prog.c', link_with : shlib)
+test('runtest', exe)
diff --git a/test cases/windows/10 vs module defs generated/subdir/somedll.c b/test cases/windows/10 vs module defs generated/subdir/somedll.c
index df255e3..b23d8fe 100644
--- a/test cases/windows/10 vs module defs generated/subdir/somedll.c
+++ b/test cases/windows/10 vs module defs generated/subdir/somedll.c
@@ -1,5 +1,3 @@
-#ifdef _MSC_VER
int somedllfunc() {
return 42;
}
-#endif
diff --git a/test cases/windows/6 vs module defs/meson.build b/test cases/windows/6 vs module defs/meson.build
index 4b9e735..fb59028 100644
--- a/test cases/windows/6 vs module defs/meson.build
+++ b/test cases/windows/6 vs module defs/meson.build
@@ -1,7 +1,5 @@
project('dll_module_defs', 'c')
-if meson.get_compiler('c').get_id() == 'msvc'
- subdir('subdir')
- exe = executable('prog', 'prog.c', link_with : shlib)
- test('runtest', exe)
-endif
+subdir('subdir')
+exe = executable('prog', 'prog.c', link_with : shlib)
+test('runtest', exe)
diff --git a/test cases/windows/6 vs module defs/subdir/somedll.c b/test cases/windows/6 vs module defs/subdir/somedll.c
index df255e3..b23d8fe 100644
--- a/test cases/windows/6 vs module defs/subdir/somedll.c
+++ b/test cases/windows/6 vs module defs/subdir/somedll.c
@@ -1,5 +1,3 @@
-#ifdef _MSC_VER
int somedllfunc() {
return 42;
}
-#endif