Skip to content

Commit 69f6203

Browse files
[AutotoolsToolchain] Added [CC|CXX]_FOR_BUILD env var (#16391)
* Added CC_FOR_BUILD env var * Added conf_build to ConanFileMock * Added CXX_FOR_BUILD too
1 parent 3b46dca commit 69f6203

File tree

4 files changed

+25
-7
lines changed

4 files changed

+25
-7
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ venv/
2222
*.egg-info/
2323
.installed.cfg
2424
*.egg
25+
pip-wheel-metadata/
2526

2627
# PyInstaller
2728
# Usually these files are written by a python script from a template

conan/test/utils/mocks.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,7 @@ def __init__(self, settings=None, options=None, runner=None, display_name=""):
9292
self.options = options or Options()
9393
self.generators = []
9494
self.conf = Conf()
95+
self.conf_build = Conf()
9596
self.folders = Folders()
9697
self.folders.set_base_source(".")
9798
self.folders.set_base_export_sources(".")

conan/tools/gnu/autotoolstoolchain.py

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -60,8 +60,8 @@ def __init__(self, conanfile, namespace=None, prefix="/"):
6060
self._build = self._conanfile.conf.get("tools.gnu:build_triplet")
6161
self._target = None
6262

63-
is_cross_building = cross_building(self._conanfile)
64-
if is_cross_building:
63+
self._is_cross_building = cross_building(self._conanfile)
64+
if self._is_cross_building:
6565
os_host = conanfile.settings.get_safe("os")
6666
arch_host = conanfile.settings.get_safe("arch")
6767
os_build = conanfile.settings_build.get_safe('os')
@@ -84,11 +84,12 @@ def __init__(self, conanfile, namespace=None, prefix="/"):
8484
self.autoreconf_args = self._default_autoreconf_flags()
8585
self.make_args = []
8686
# Apple stuff
87-
is_cross_building_osx = (is_cross_building
87+
is_cross_building_osx = (self._is_cross_building
8888
and conanfile.settings_build.get_safe('os') == "Macos"
8989
and is_apple_os(conanfile))
90-
min_flag, arch_flag, isysroot_flag = resolve_apple_flags(conanfile,
91-
is_cross_building=is_cross_building_osx)
90+
min_flag, arch_flag, isysroot_flag = (
91+
resolve_apple_flags(conanfile, is_cross_building=is_cross_building_osx)
92+
)
9293
# https://man.archlinux.org/man/clang.1.en#Target_Selection_Options
9394
self.apple_arch_flag = arch_flag
9495
# -isysroot makes all includes for your library relative to the build directory
@@ -102,7 +103,8 @@ def _get_msvc_runtime_flag(self):
102103
return flag
103104

104105
def _msvc_extra_flags(self):
105-
if is_msvc(self._conanfile) and check_min_vs(self._conanfile, "180", raise_invalid=False):
106+
if is_msvc(self._conanfile) and check_min_vs(self._conanfile, "180",
107+
raise_invalid=False):
106108
return ["-FS"]
107109
return []
108110

@@ -160,7 +162,8 @@ def environment(self):
160162
compilers_by_conf = self._conanfile.conf.get("tools.build:compiler_executables", default={},
161163
check_type=dict)
162164
if compilers_by_conf:
163-
compilers_mapping = {"c": "CC", "cpp": "CXX", "cuda": "NVCC", "fortran": "FC", "rc": "RC"}
165+
compilers_mapping = {"c": "CC", "cpp": "CXX", "cuda": "NVCC", "fortran": "FC",
166+
"rc": "RC"}
164167
for comp, env_var in compilers_mapping.items():
165168
if comp in compilers_by_conf:
166169
compiler = compilers_by_conf[comp]
@@ -172,6 +175,16 @@ def environment(self):
172175
env.append("CFLAGS", self.cflags)
173176
env.append("LDFLAGS", self.ldflags)
174177
env.prepend_path("PKG_CONFIG_PATH", self._conanfile.generators_folder)
178+
# Issue related: https://github.com/conan-io/conan/issues/15486
179+
if self._is_cross_building and self._conanfile.conf_build:
180+
compilers_build_mapping = (
181+
self._conanfile.conf_build.get("tools.build:compiler_executables", default={},
182+
check_type=dict)
183+
)
184+
if "c" in compilers_build_mapping:
185+
env.define("CC_FOR_BUILD", compilers_build_mapping["c"])
186+
if "cpp" in compilers_build_mapping:
187+
env.define("CXX_FOR_BUILD", compilers_build_mapping["cpp"])
175188
return env
176189

177190
def vars(self):

test/integration/toolchains/gnu/test_autotoolstoolchain.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -266,6 +266,9 @@ def build(self):
266266
assert 'export CC="gcc"' in content
267267
assert 'export CXX="g++"' in content
268268
assert 'export RC="windres"' in content
269+
# Issue: https://github.com/conan-io/conan/issues/15486
270+
assert 'export CC_FOR_BUILD="clang"' in content
271+
assert 'export CXX_FOR_BUILD="clang++"' in content
269272
""")
270273
client = TestClient()
271274
client.save({

0 commit comments

Comments
 (0)