environment: get environment variables for both host and build machines

Fixes #8605
0.57
Dylan Baker 4 years ago committed by Nirbheek Chauhan
parent 258fb72b95
commit 3e6578ad34
  1. 23
      mesonbuild/compilers/compilers.py
  2. 8
      mesonbuild/environment.py

@ -1228,19 +1228,26 @@ def get_global_options(lang: str,
largkey = argkey.evolve('link_args') largkey = argkey.evolve('link_args')
envkey = argkey.evolve('env_args') envkey = argkey.evolve('env_args')
comp_key = argkey if argkey in env.options else envkey
comp_options = env.options.get(comp_key, [])
link_options = env.options.get(largkey, [])
cargs = coredata.UserArrayOption( cargs = coredata.UserArrayOption(
description + ' compiler', description + ' compiler',
env.options.get(argkey, []), split_args=True, user_input=True, allow_dups=True) comp_options, split_args=True, user_input=True, allow_dups=True)
# the compiler args always gets the environemtn variable arguments
cargs.extend_value(env.options.get(envkey, []))
largs = coredata.UserArrayOption( largs = coredata.UserArrayOption(
description + ' linker', description + ' linker',
env.options.get(largkey, []), split_args=True, user_input=True, allow_dups=True) link_options, split_args=True, user_input=True, allow_dups=True)
# The linker gets the compiler environment variable only if the comiler
# acts as the linker if comp.INVOKES_LINKER and comp_key == envkey:
if comp.INVOKES_LINKER: # If the compiler acts as a linker driver, and we're using the
largs.extend_value(env.options.get(envkey, [])) # environment variable flags for both the compiler and linker
# arguments, then put the compiler flags in the linker flags as well.
# This is how autotools works, and the env vars freature is for
# autotools compatibility.
largs.extend_value(comp_options)
opts: 'KeyedOptionDictType' = {argkey: cargs, largkey: largs} opts: 'KeyedOptionDictType' = {argkey: cargs, largkey: largs}

@ -797,11 +797,7 @@ class Environment:
env_opts: T.DefaultDict[OptionKey, T.List[str]] = collections.defaultdict(list) env_opts: T.DefaultDict[OptionKey, T.List[str]] = collections.defaultdict(list)
if self.is_cross_build(): for (evar, keyname), for_machine in itertools.product(opts, MachineChoice):
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) p_env = _get_env_var(for_machine, self.is_cross_build(), evar)
if p_env is not None: if p_env is not None:
# these may contain duplicates, which must be removed, else # these may contain duplicates, which must be removed, else
@ -831,7 +827,7 @@ class Environment:
key = key.evolve(lang=lang) key = key.evolve(lang=lang)
env_opts[key].extend(p_list) env_opts[key].extend(p_list)
elif keyname == 'cppflags': elif keyname == 'cppflags':
key = OptionKey('args', machine=for_machine, lang='c') key = OptionKey('env_args', machine=for_machine, lang='c')
for lang in compilers.compilers.LANGUAGES_USING_CPPFLAGS: for lang in compilers.compilers.LANGUAGES_USING_CPPFLAGS:
key = key.evolve(lang=lang) key = key.evolve(lang=lang)
env_opts[key].extend(p_list) env_opts[key].extend(p_list)

Loading…
Cancel
Save