Allow using generated files to shared_library vs_module_defs. Closes #1605

This detects and allows passing a generated file as a vs_module_def, it
also adds a testcase that tests using configure_file to generate the
.def file.
pull/1606/head
Dylan Baker 8 years ago
parent 7d5e4012fe
commit c49f5aefd8
  1. 18
      mesonbuild/build.py
  2. 7
      test cases/windows/10 vs module defs generated/meson.build
  3. 5
      test cases/windows/10 vs module defs generated/prog.c
  4. 9
      test cases/windows/10 vs module defs generated/subdir/meson.build
  5. 5
      test cases/windows/10 vs module defs generated/subdir/somedll.c
  6. 2
      test cases/windows/10 vs module defs generated/subdir/somedll.def.in

@ -1191,12 +1191,18 @@ class SharedLibrary(BuildTarget):
# Visual Studio module-definitions file
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)
# link_depends can be an absolute path or relative to self.subdir
self.link_depends.append(path)
if isinstance(path, str):
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)
# link_depends can be an absolute path or relative to self.subdir
self.link_depends.append(path)
elif isinstance(path, File):
# When passing a generated file.
self.vs_module_defs = path
# link_depends can be an absolute path or relative to self.subdir
self.link_depends.append(path.absolute_path(environment.source_dir, environment.build_dir))
def check_unknown_kwargs(self, kwargs):
self.check_unknown_kwargs_int(kwargs, known_lib_kwargs)

@ -0,0 +1,7 @@
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

@ -0,0 +1,5 @@
int somedllfunc();
int main(int argc, char **argv) {
return somedllfunc() == 42 ? 0 : 1;
}

@ -0,0 +1,9 @@
conf = configuration_data()
conf.set('func', 'somedllfunc')
def_file = configure_file(
input: 'somedll.def.in',
output: 'somedll.def',
configuration : conf,
)
shlib = shared_library('somedll', 'somedll.c', vs_module_defs : def_file)

@ -0,0 +1,5 @@
#ifdef _MSC_VER
int somedllfunc() {
return 42;
}
#endif
Loading…
Cancel
Save