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
This commit is contained in:
Zbigniew Jędrzejewski-Szmek 2017-04-24 21:03:35 -04:00
parent b884196cc1
commit 6e2afb1cab
4 changed files with 17 additions and 5 deletions

View File

@ -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')

View File

@ -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

View File

@ -1,3 +1,3 @@
#!/bin/sh -eu
"$@" '-' '-c' -o/dev/null </dev/null
"$@" '-' -o/dev/null </dev/null

1
tools/meson-link-test.c Normal file
View File

@ -0,0 +1 @@
int main(void) {return 0;}