diff options
author | Dylan Baker <dylan@pnwbakers.com> | 2021-02-17 11:44:17 -0800 |
---|---|---|
committer | Nirbheek Chauhan <nirbheek@centricular.com> | 2021-02-20 15:38:09 +0530 |
commit | a0dc97f8fc897dc5a9c38fb24f72aa4db0f6a6cf (patch) | |
tree | 7ea3745cdd6e0af8ad6567ece3e4358802be130b | |
parent | b4f555084327b0cd1d118181c9de54b4a1ccff12 (diff) | |
download | meson-a0dc97f8fc897dc5a9c38fb24f72aa4db0f6a6cf.zip meson-a0dc97f8fc897dc5a9c38fb24f72aa4db0f6a6cf.tar.gz meson-a0dc97f8fc897dc5a9c38fb24f72aa4db0f6a6cf.tar.bz2 |
Ensure that $lang_args and $lang_link_args are properly parsed
Currently we don't handle things correctly if we get a string we should
split, and the linker and needs compiler arguments. It would result in
two unsplit strings in a list, instead of the split arguments in a list
Fixes: #8348
-rw-r--r-- | mesonbuild/compilers/compilers.py | 28 | ||||
-rw-r--r-- | test cases/common/237 proper args splitting/main.c | 11 | ||||
-rw-r--r-- | test cases/common/237 proper args splitting/meson.build | 9 | ||||
-rw-r--r-- | test cases/common/237 proper args splitting/test.json | 9 |
4 files changed, 41 insertions, 16 deletions
diff --git a/mesonbuild/compilers/compilers.py b/mesonbuild/compilers/compilers.py index a4823e2..a37e4da 100644 --- a/mesonbuild/compilers/compilers.py +++ b/mesonbuild/compilers/compilers.py @@ -1227,22 +1227,18 @@ def get_global_options(lang: str, argkey = OptionKey('args', lang=lang, machine=for_machine) largkey = argkey.evolve('link_args') - # We shouldn't need listify here, but until we have a separate - # linker-driver representation and can have that do the combine we have to - # do it this way. - compile_args = mesonlib.listify(env.options.get(argkey, [])) - link_args = mesonlib.listify(env.options.get(largkey, [])) - + cargs = coredata.UserArrayOption( + description + ' compiler', + env.options.get(argkey, []), split_args=True, user_input=True, allow_dups=True) + largs = coredata.UserArrayOption( + description + ' linker', + env.options.get(largkey, []), split_args=True, user_input=True, allow_dups=True) + + # This needs to be done here, so that if we have string values in the env + # options that we can safely combine them *after* they've been split if comp.INVOKES_LINKER: - link_args = compile_args + link_args - - opts: 'KeyedOptionDictType' = { - argkey: coredata.UserArrayOption( - description + ' compiler', - compile_args, split_args=True, user_input=True, allow_dups=True), - largkey: coredata.UserArrayOption( - description + ' linker', - link_args, split_args=True, user_input=True, allow_dups=True), - } + largs.set_value(largs.value + cargs.value) + + opts: 'KeyedOptionDictType' = {argkey: cargs, largkey: largs} return opts diff --git a/test cases/common/237 proper args splitting/main.c b/test cases/common/237 proper args splitting/main.c new file mode 100644 index 0000000..4b2038f --- /dev/null +++ b/test cases/common/237 proper args splitting/main.c @@ -0,0 +1,11 @@ +#ifndef FOO +# error "FOO is not defined" +#endif + +#ifndef BAR +# error "BAR is not defined" +#endif + +int main(void) { + return 0; +} diff --git a/test cases/common/237 proper args splitting/meson.build b/test cases/common/237 proper args splitting/meson.build new file mode 100644 index 0000000..4a36f9c --- /dev/null +++ b/test cases/common/237 proper args splitting/meson.build @@ -0,0 +1,9 @@ +project('proper args splitting', 'c') + +test( + 'main', + executable( + 'main', + 'main.c', + ) +) diff --git a/test cases/common/237 proper args splitting/test.json b/test cases/common/237 proper args splitting/test.json new file mode 100644 index 0000000..b1738aa --- /dev/null +++ b/test cases/common/237 proper args splitting/test.json @@ -0,0 +1,9 @@ +{ + "matrix": { + "options": { + "c_args": [ + { "val": "-DFOO -DBAR" } + ] + } + } +} |