diff options
-rw-r--r-- | mesonbuild/interpreter.py | 27 | ||||
-rw-r--r-- | mesonbuild/mconf.py | 5 | ||||
-rw-r--r-- | test cases/common/181 initial c_args/meson.build | 2 |
3 files changed, 16 insertions, 18 deletions
diff --git a/mesonbuild/interpreter.py b/mesonbuild/interpreter.py index c948778..24f53e2 100644 --- a/mesonbuild/interpreter.py +++ b/mesonbuild/interpreter.py @@ -2386,24 +2386,21 @@ to directly access options of other subprojects.''') mlog.log('Native %s compiler: ' % comp.get_display_language(), mlog.bold(' '.join(comp.get_exelist())), version_string, sep='') # If <language>_args/_link_args settings are given on the - # command line, use them. + # command line, use them, otherwise take them from env. + (preproc_args, compile_args, link_args) = environment.get_args_from_envvars(comp) for optspec in self.build.environment.cmd_line_options.projectoptions: (optname, optvalue) = optspec.split('=', maxsplit=1) - if optname.endswith('_link_args'): - lang = optname[:-10] - self.coredata.external_link_args.setdefault(lang, []).append(optvalue) + if optname == lang + '_link_args': + link_args = shlex.split(optvalue) elif optname.endswith('_args'): - lang = optname[:-5] - self.coredata.external_args.setdefault(lang, []).append(optvalue) - # Otherwise, look for definitions from environment - # variables such as CFLAGS. - (preproc_args, compile_args, link_args) = environment.get_args_from_envvars(comp) - if not comp.get_language() in self.coredata.external_preprocess_args: - self.coredata.external_preprocess_args[comp.get_language()] = preproc_args - if not comp.get_language() in self.coredata.external_args: - self.coredata.external_args[comp.get_language()] = compile_args - if not comp.get_language() in self.coredata.external_link_args: - self.coredata.external_link_args[comp.get_language()] = link_args + compile_args = shlex.split(optvalue) + if lang not in self.coredata.external_preprocess_args: + self.coredata.external_preprocess_args[lang] = preproc_args + if lang not in self.coredata.external_args: + self.coredata.external_args[lang] = compile_args + if lang not in self.coredata.external_link_args: + self.coredata.external_link_args[lang] = link_args + self.build.add_compiler(comp) if need_cross_compiler: mlog.log('Cross %s compiler: ' % cross_comp.get_display_language(), mlog.bold(' '.join(cross_comp.get_exelist())), ' (%s %s)' % (cross_comp.id, cross_comp.version), sep='') diff --git a/mesonbuild/mconf.py b/mesonbuild/mconf.py index 363b4a9..f65d6ff 100644 --- a/mesonbuild/mconf.py +++ b/mesonbuild/mconf.py @@ -15,6 +15,7 @@ import os import sys import argparse +import shlex from . import (coredata, mesonlib, build) def buildparser(): @@ -119,14 +120,14 @@ class Conf: raise ConfException('Unknown language %s in linkargs.' % lang) # TODO, currently split on spaces, make it so that user # can pass in an array string. - newvalue = v.split() + newvalue = shlex.split(v) self.coredata.external_link_args[lang] = newvalue elif k.endswith('_args'): lang = k[:-5] if lang not in self.coredata.external_args: raise ConfException('Unknown language %s in compile args' % lang) # TODO same fix as above - newvalue = v.split() + newvalue = shlex.split(v) self.coredata.external_args[lang] = newvalue else: raise ConfException('Unknown option %s.' % k) diff --git a/test cases/common/181 initial c_args/meson.build b/test cases/common/181 initial c_args/meson.build index 70a6e7a..169d2bd 100644 --- a/test cases/common/181 initial c_args/meson.build +++ b/test cases/common/181 initial c_args/meson.build @@ -1,7 +1,7 @@ project('options', 'c') # Test passing c_args and c_link_args options from the command line. -assert(get_option('c_args') == ['-march=native', '-funroll-loops'], +assert(get_option('c_args') == ['-funroll-loops'], 'Incorrect value for c_args option.') assert(get_option('c_link_args') == ['-random_linker_option'], 'Incorrect value for c_link_args option.') |