From 2cd0723c42ae2076c7ba2b888fd7a5235d5cbf17 Mon Sep 17 00:00:00 2001 From: Dylan Baker Date: Tue, 23 Mar 2021 20:52:49 -0700 Subject: Split environment variable and command line cflags They are supposed to have different behavior. The environment variables apply to both the compiler and linker when the compiler acts as a linker, but the command line ones do not. Fixes #8345 --- mesonbuild/environment.py | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) (limited to 'mesonbuild/environment.py') diff --git a/mesonbuild/environment.py b/mesonbuild/environment.py index f59eb87..373c063 100644 --- a/mesonbuild/environment.py +++ b/mesonbuild/environment.py @@ -798,7 +798,11 @@ class Environment: env_opts: T.DefaultDict[OptionKey, T.List[str]] = collections.defaultdict(list) - for (evar, keyname), for_machine in itertools.product(opts, MachineChoice): + if self.is_cross_build(): + for_machine = MachineChoice.BUILD + else: + for_machine = MachineChoice.HOST + for evar, keyname in opts: p_env = _get_env_var(for_machine, self.is_cross_build(), evar) if p_env is not None: # these may contain duplicates, which must be removed, else @@ -834,6 +838,23 @@ class Environment: env_opts[key].extend(p_list) else: key = OptionKey.from_string(keyname).evolve(machine=for_machine) + if evar in compilers.compilers.CFLAGS_MAPPING.values(): + # If this is an environment variable, we have to + # store it separately until the compiler is + # instantiated, as we don't know whether the + # compiler will want to use these arguments at link + # time and compile time (instead of just at compile + # time) until we're instantiating that `Compiler` + # object. This is required so that passing + # `-Dc_args=` on the command line and `$CFLAGS` + # have subtely differen behavior. `$CFLAGS` will be + # added to the linker command line if the compiler + # acts as a linker driver, `-Dc_args` will not. + # + # We stil use the original key as the base here, as + # we want to inhert the machine and the compiler + # language + key = key.evolve('env_args') env_opts[key].extend(p_list) # Only store options that are not already in self.options, -- cgit v1.1