diff options
author | Dylan Baker <dylan@pnwbakers.com> | 2020-03-10 10:13:23 -0700 |
---|---|---|
committer | Dylan Baker <dylan@pnwbakers.com> | 2020-03-11 09:27:10 -0700 |
commit | d0172432a7eb95f1f5d16825d4440bc7e2da758f (patch) | |
tree | 927a6060cec2c1c29bccbef9da4002382ad0dbc7 /test cases/d | |
parent | 92e80d54e531dbf89b8cb74b2e54ee6f8f9f896b (diff) | |
download | meson-d0172432a7eb95f1f5d16825d4440bc7e2da758f.zip meson-d0172432a7eb95f1f5d16825d4440bc7e2da758f.tar.gz meson-d0172432a7eb95f1f5d16825d4440bc7e2da758f.tar.bz2 |
compilers: Don't put split soname args in start groups
Some compilers that act as linker drivers (dmd and ldc) need to split
arguments that GCC combines with , (ie, -Wl,-foo,bar -> -L=-foo -L=bar).
As such we need to detect that the previous argument contained -soname,
and not wrap that in a --start-group/--end-group
This modifies the shared library test to demonstrate the problem, with a
test case.
Fixes #6359
Diffstat (limited to 'test cases/d')
-rw-r--r-- | test cases/d/3 shared library/lld-test.py | 20 | ||||
-rw-r--r-- | test cases/d/3 shared library/meson.build | 7 | ||||
-rw-r--r-- | test cases/d/3 shared library/sub/libstuff.d | 14 | ||||
-rw-r--r-- | test cases/d/3 shared library/sub/meson.build | 2 |
4 files changed, 42 insertions, 1 deletions
diff --git a/test cases/d/3 shared library/lld-test.py b/test cases/d/3 shared library/lld-test.py new file mode 100644 index 0000000..3f32f59 --- /dev/null +++ b/test cases/d/3 shared library/lld-test.py @@ -0,0 +1,20 @@ +#!/usr/bin/env python3 + +import argparse +import subprocess + +def main(): + parser = argparse.ArgumentParser() + parser.add_argument('ldd') + parser.add_argument('bin') + args = parser.parse_args() + + p, o, _ = subprocess.run([args.ldd, args.bin], stdout=subprocess.PIPE) + assert p == 0 + o = o.decode() + assert 'libstuff.so =>' in o, 'libstuff so not in linker path.' + assert 'libstuff.so => not found' not in o, 'libstuff.so not found correctly' + + +if __name__ == '__main__': + main() diff --git a/test cases/d/3 shared library/meson.build b/test cases/d/3 shared library/meson.build index b37b700..fa41779 100644 --- a/test cases/d/3 shared library/meson.build +++ b/test cases/d/3 shared library/meson.build @@ -7,7 +7,7 @@ if dc.get_id() == 'gcc' endif endif -ldyn = shared_library('stuff', 'libstuff.d', install : true) +subdir('sub') ed = executable('app_d', 'app.d', link_with : ldyn, install : true) test('linktest_dyn', ed) @@ -19,3 +19,8 @@ pkgc.generate(name: 'test', description: 'A test of D attributes to pkgconfig.generate.', d_module_versions: ['Use_Static'] ) + +ldd = find_program('ldd', required : false) +if ldd.found() + test('ldd-test.py', ed) +endif diff --git a/test cases/d/3 shared library/sub/libstuff.d b/test cases/d/3 shared library/sub/libstuff.d new file mode 100644 index 0000000..8205490 --- /dev/null +++ b/test cases/d/3 shared library/sub/libstuff.d @@ -0,0 +1,14 @@ +import std.stdio; +import std.string : format; + +export int printLibraryString (string str) +{ + writeln ("Library says: %s".format (str)); + return 4; +} + +version (Windows) +{ + import core.sys.windows.dll; + mixin SimpleDllMain; +} diff --git a/test cases/d/3 shared library/sub/meson.build b/test cases/d/3 shared library/sub/meson.build new file mode 100644 index 0000000..fb4b996 --- /dev/null +++ b/test cases/d/3 shared library/sub/meson.build @@ -0,0 +1,2 @@ +ldyn = shared_library('stuff', 'libstuff.d', install : true) + |