diff options
author | Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> | 2017-04-24 21:03:35 -0400 |
---|---|---|
committer | Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> | 2017-04-25 08:49:16 -0400 |
commit | 6e2afb1cab76ef31a31c7e4123b9d8ec34a3e824 (patch) | |
tree | 81650e2a2f2f2a90004d6d18eb6ff40029c8b7f8 | |
parent | b884196cc1565eaf1b97141fbfa0667ee348e463 (diff) |
meson: fix checking of linker args
Previous checks did nothing, because cc.has_argument only does compilation,
without any linking. Unfortunately cc.links() cannot be used, because it does
not accept any options. Providing the test file as a static source is easiest,
even if not every elegant.
https://github.com/mesonbuild/meson/issues/1676
-rw-r--r-- | meson.build | 17 | ||||
-rw-r--r-- | src/systemd/meson.build | 2 | ||||
-rwxr-xr-x | tools/meson-check-compilation.sh | 2 | ||||
-rw-r--r-- | tools/meson-link-test.c | 1 |
4 files changed, 17 insertions, 5 deletions
diff --git a/meson.build b/meson.build index 991836a976..778fe636fb 100644 --- a/meson.build +++ b/meson.build @@ -222,6 +222,7 @@ substs.set('RC_LOCAL_SCRIPT_PATH_STOP', get_option('halt-l cc = meson.get_compiler('c') pkgconfig = import('pkgconfig') +check_compilation_sh = find_program('tools/meson-check-compilation.sh') foreach arg : ['-Wundef', '-Wlogical-op', @@ -291,6 +292,8 @@ if cc.get_id() == 'clang' endforeach endif +link_test_c = files('tools/meson-link-test.c') + # --as-needed and --no-undefined are provided by meson by default, # run mesonconf to see what is enabled foreach arg : ['-Wl,-z,relro', @@ -298,7 +301,12 @@ foreach arg : ['-Wl,-z,relro', '-pie', '-Wl,-fuse-ld=gold', ] - if cc.has_argument(arg) + + have = run_command(check_compilation_sh, + cc.cmd_array(), '-x', 'c', arg, + '-include', link_test_c).returncode() == 0 + message('Linking with @0@ supported: @1@'.format(arg, have ? 'yes' : 'no')) + if have add_project_link_arguments(arg, language : 'c') endif endforeach @@ -312,7 +320,11 @@ if get_option('buildtype') != 'debug' endforeach foreach arg : ['-Wl,--gc-sections'] - if cc.has_argument(arg) + have = run_command(check_compilation_sh, + cc.cmd_array(), '-x', 'c', arg, + '-include', link_test_c).returncode() == 0 + message('Linking with @0@ supported: @1@'.format(arg, have ? 'yes' : 'no')) + if have add_project_link_arguments(arg, language : 'c') endif endforeach @@ -429,7 +441,6 @@ etags = find_program('etags', required : false) meson_make_symlink = meson.source_root() + '/tools/meson-make-symlink.sh' mkdir_p = 'mkdir -p $DESTDIR/@0@' -check_compilation_sh = find_program('tools/meson-check-compilation.sh') test_efi_create_disk_sh = find_program('test/test-efi-create-disk.sh') splash_bmp = files('test/splash.bmp') diff --git a/src/systemd/meson.build b/src/systemd/meson.build index 0f5a853e2e..43fd0130b9 100644 --- a/src/systemd/meson.build +++ b/src/systemd/meson.build @@ -47,7 +47,7 @@ foreach header : _systemd_headers name = ''.join([header] + opt) test('cc-' + name, check_compilation_sh, - args : cc.cmd_array() + ['-x', 'c'] + opt + + args : cc.cmd_array() + ['-x', 'c', '-c'] + opt + ['-Werror', '-include', join_paths(meson.current_source_dir(), header)]) endforeach diff --git a/tools/meson-check-compilation.sh b/tools/meson-check-compilation.sh index e24194247e..d3b2a312fd 100755 --- a/tools/meson-check-compilation.sh +++ b/tools/meson-check-compilation.sh @@ -1,3 +1,3 @@ #!/bin/sh -eu -"$@" '-' '-c' -o/dev/null </dev/null +"$@" '-' -o/dev/null </dev/null diff --git a/tools/meson-link-test.c b/tools/meson-link-test.c new file mode 100644 index 0000000000..825bbff05f --- /dev/null +++ b/tools/meson-link-test.c @@ -0,0 +1 @@ +int main(void) {return 0;} |