From cee9638cc43682b6e371cc2becae745876c73bda Mon Sep 17 00:00:00 2001 From: Nirbheek Chauhan Date: Tue, 29 Nov 2016 03:15:03 +0530 Subject: Compiler check and extra args should always override We want compiler check arguments (-O0, -fpermissive, etc) to override all other arguments, and we want extra_args passed in by the build file to always override everything. To do this properly, we must split include arguments out, append them first, append all other arguments as usual, and then append the rest. As part of this, we also add the compiler check flags to the cc.compiles() and cc.links() helper functions since they also most likely need them. Also includes a unit test for all this. --- test cases/common/43 has function/meson.build | 32 +++++++++++++++++++-------- 1 file changed, 23 insertions(+), 9 deletions(-) (limited to 'test cases/common') diff --git a/test cases/common/43 has function/meson.build b/test cases/common/43 has function/meson.build index 61f96e11e..e0d3344f6 100644 --- a/test cases/common/43 has function/meson.build +++ b/test cases/common/43 has function/meson.build @@ -1,9 +1,12 @@ project('has function', 'c', 'cpp') +# This is used in the `test_compiler_check_flags_order` unit test +unit_test_args = '-I/tmp' compilers = [meson.get_compiler('c'), meson.get_compiler('cpp')] foreach cc : compilers - if not cc.has_function('printf', prefix : '#include') + if not cc.has_function('printf', prefix : '#include', + args : unit_test_args) error('"printf" function not found (should always exist).') endif @@ -13,12 +16,16 @@ foreach cc : compilers # On MSVC fprintf is defined as an inline function in the header, so it cannot # be found without the include. if cc.get_id() != 'msvc' - assert(cc.has_function('fprintf'), '"fprintf" function not found without include (on !msvc).') + assert(cc.has_function('fprintf', args : unit_test_args), + '"fprintf" function not found without include (on !msvc).') else - assert(cc.has_function('fprintf', prefix : '#include '), '"fprintf" function not found with include (on msvc).') + assert(cc.has_function('fprintf', prefix : '#include ', + args : unit_test_args), + '"fprintf" function not found with include (on msvc).') endif - if cc.has_function('hfkerhisadf', prefix : '#include') + if cc.has_function('hfkerhisadf', prefix : '#include', + args : unit_test_args) error('Found non-existent function "hfkerhisadf".') endif @@ -28,16 +35,23 @@ foreach cc : compilers # implemented in glibc it's probably not implemented in any other 'slimmer' # C library variants either, so the check should be safe either way hopefully. if host_machine.system() == 'linux' and cc.get_id() == 'gcc' - assert (cc.has_function('poll', prefix : '#include '), 'couldn\'t detect "poll" when defined by a header') - assert (not cc.has_function('lchmod', prefix : '''#include - #include '''), '"lchmod" check should have failed') + assert (cc.has_function('poll', prefix : '#include ', + args : unit_test_args), + 'couldn\'t detect "poll" when defined by a header') + lchmod_prefix = '#include \n#include ' + assert (not cc.has_function('lchmod', prefix : lchmod_prefix, + args : unit_test_args), + '"lchmod" check should have failed') endif # For some functions one needs to define _GNU_SOURCE before including the # right headers to get them picked up. Make sure we can detect these functions # as well without any prefix - if cc.has_header_symbol('sys/socket.h', 'recvmmsg', prefix : '#define _GNU_SOURCE') + if cc.has_header_symbol('sys/socket.h', 'recvmmsg', + prefix : '#define _GNU_SOURCE', + args : unit_test_args) # We assume that if recvmmsg exists sendmmsg does too - assert (cc.has_function('sendmmsg'), 'Failed to detect function "sendmmsg" (should always exist).') + assert (cc.has_function('sendmmsg', args : unit_test_args), + 'Failed to detect function "sendmmsg" (should always exist).') endif endforeach -- cgit v1.2.3