Skip to content

Commit f37e5ed

Browse files
committed
Merge branch 'release/1.55' into develop
2 parents 5ffd262 + 7395ddd commit f37e5ed

File tree

10 files changed

+94
-36
lines changed

10 files changed

+94
-36
lines changed

conan/tools/cmake/toolchain/blocks.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -682,7 +682,7 @@ def context(self):
682682
compilers = {}
683683
# Allowed <LANG> variables (and <LANG>_LAUNCHER)
684684
compilers_mapping = {"c": "C", "cuda": "CUDA", "cpp": "CXX", "objc": "OBJC",
685-
"objcxx": "OBJCXX", "rc": "RC", 'fortran': "Fortran", 'asm': "ASM",
685+
"objcpp": "OBJCXX", "rc": "RC", 'fortran': "Fortran", 'asm': "ASM",
686686
"hip": "HIP", "ispc": "ISPC"}
687687
for comp, lang in compilers_mapping.items():
688688
# To set CMAKE_<LANG>_COMPILER

conan/tools/meson/toolchain.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -258,7 +258,7 @@ def _resolve_apple_flags_and_variables(self, build_env, compilers_by_conf):
258258
self.apple_min_version_flag = [apple_min_version_flag(self._conanfile)]
259259
# Objective C/C++ ones
260260
self.objc = compilers_by_conf.get("objc", "clang")
261-
self.objcpp = compilers_by_conf.get("objcxx", "clang++")
261+
self.objcpp = compilers_by_conf.get("objcpp", "clang++")
262262
self.objc_args = self._get_env_list(build_env.get('OBJCFLAGS', []))
263263
self.objc_link_args = self._get_env_list(build_env.get('LDFLAGS', []))
264264
self.objcpp_args = self._get_env_list(build_env.get('OBJCXXFLAGS', []))

conans/client/installer.py

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -689,6 +689,12 @@ def _call_package_info(self, conanfile, package_folder, ref, is_editable):
689689
conanfile.cpp_info.public_deps = public_deps
690690

691691
if not is_editable:
692+
# IMPORTANT: Need to go first, otherwise fill_old_cppinfo() destroys
693+
# component information
694+
conanfile.layouts.package.set_relative_base_folder(conanfile.package_folder)
695+
conanfile.buildenv_info.compose_env(conanfile.layouts.package.buildenv_info)
696+
conanfile.runenv_info.compose_env(conanfile.layouts.package.runenv_info)
697+
conanfile.conf_info.compose_conf(conanfile.layouts.package.conf_info)
692698
# Copy the infos.package into the old cppinfo
693699
fill_old_cppinfo(conanfile.cpp.package, conanfile.cpp_info)
694700
else:
@@ -701,22 +707,23 @@ def _call_package_info(self, conanfile, package_folder, ref, is_editable):
701707
# cppinfos inside
702708
# convert directory entries to be relative to the declared folders.build
703709
conanfile.cpp.build.set_relative_base_folder(conanfile.build_folder)
704-
710+
conanfile.layouts.build.set_relative_base_folder(conanfile.build_folder)
705711
# convert directory entries to be relative to the declared folders.source
706712
conanfile.cpp.source.set_relative_base_folder(conanfile.source_folder)
713+
conanfile.layouts.source.set_relative_base_folder(conanfile.source_folder)
707714

708715
full_editable_cppinfo = NewCppInfo()
709716
full_editable_cppinfo.merge(conanfile.cpp.source)
710717
full_editable_cppinfo.merge(conanfile.cpp.build)
711718
# Paste the editable cpp_info but prioritizing it, only if a
712719
# variable is not declared at build/source, the package will keep the value
713720
fill_old_cppinfo(full_editable_cppinfo, conanfile.cpp_info)
714-
conanfile.buildenv_info.compose_env(conanfile.cpp.source.buildenv_info)
715-
conanfile.buildenv_info.compose_env(conanfile.cpp.build.buildenv_info)
716-
conanfile.runenv_info.compose_env(conanfile.cpp.source.runenv_info)
717-
conanfile.runenv_info.compose_env(conanfile.cpp.build.runenv_info)
718-
conanfile.conf_info.compose_conf(conanfile.cpp.source.conf_info)
719-
conanfile.conf_info.compose_conf(conanfile.cpp.build.conf_info)
721+
conanfile.buildenv_info.compose_env(conanfile.layouts.source.buildenv_info)
722+
conanfile.buildenv_info.compose_env(conanfile.layouts.build.buildenv_info)
723+
conanfile.runenv_info.compose_env(conanfile.layouts.source.runenv_info)
724+
conanfile.runenv_info.compose_env(conanfile.layouts.build.runenv_info)
725+
conanfile.conf_info.compose_conf(conanfile.layouts.source.conf_info)
726+
conanfile.conf_info.compose_conf(conanfile.layouts.build.conf_info)
720727

721728
if conanfile._conan_dep_cpp_info is None:
722729
try:

conans/model/conan_file.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
from conans.model.conf import Conf
1818
from conans.model.dependencies import ConanFileDependencies
1919
from conans.model.env_info import DepsEnvInfo
20-
from conans.model.layout import Folders, Infos
20+
from conans.model.layout import Folders, Infos, Layouts
2121
from conans.model.new_build_info import from_old_cppinfo
2222
from conans.model.options import Options, OptionsValues, PackageOptions
2323
from conans.model.requires import Requirements
@@ -175,6 +175,7 @@ def __init__(self, output, runner, display_name="", user=None, channel=None):
175175
# layout() method related variables:
176176
self.folders = Folders()
177177
self.cpp = Infos()
178+
self.layouts = Layouts()
178179

179180
self.cpp.package.includedirs = ["include"]
180181
self.cpp.package.libdirs = ["lib"]

conans/model/conf.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@
5353
"tools.build:defines": "List of extra definition flags used by different toolchains like CMakeToolchain and AutotoolsToolchain",
5454
"tools.build:sharedlinkflags": "List of extra flags used by CMakeToolchain for CMAKE_SHARED_LINKER_FLAGS_INIT variable",
5555
"tools.build:exelinkflags": "List of extra flags used by CMakeToolchain for CMAKE_EXE_LINKER_FLAGS_INIT variable",
56-
"tools.build:compiler_executables": "Defines a Python dict-like with the compilers path to be used. Allowed keys {'c', 'cpp', 'cuda', 'objc', 'objcxx', 'rc', 'fortran', 'asm', 'hip', 'ispc'}",
56+
"tools.build:compiler_executables": "Defines a Python dict-like with the compilers path to be used. Allowed keys {'c', 'cpp', 'cuda', 'objc', 'objcpp', 'rc', 'fortran', 'asm', 'hip', 'ispc'}",
5757
"tools.microsoft.bash:subsystem": "Set subsystem to use for Windows. Possible values: 'msys2', 'msys', 'cygwin', 'wsl' and 'sfu'",
5858
"tools.microsoft.bash:path": "Path to the shell executable. Default: 'bash'",
5959
"tools.apple:sdk_path": "Path for the sdk location. This value will be passed as SDKROOT or -isysroot depending on the generator used",

conans/model/layout.py

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,27 +4,32 @@
44
from conans.model.new_build_info import NewCppInfo
55

66

7-
class _SubInfo(NewCppInfo):
8-
def __init__(self, with_defaults=False):
9-
super().__init__(with_defaults)
7+
class Infos(object):
8+
9+
def __init__(self):
10+
self.source = NewCppInfo()
11+
self.build = NewCppInfo()
12+
self.package = NewCppInfo(with_defaults=True)
13+
14+
15+
class PartialLayout(object):
16+
def __init__(self):
1017
from conan.tools.env import Environment
1118
self.buildenv_info = Environment()
1219
self.runenv_info = Environment()
1320
self.conf_info = Conf()
1421

1522
def set_relative_base_folder(self, folder):
16-
super().set_relative_base_folder(folder)
1723
self.buildenv_info.set_relative_base_folder(folder)
1824
self.runenv_info.set_relative_base_folder(folder)
1925
self.conf_info.set_relative_base_folder(folder)
2026

2127

22-
class Infos(object):
23-
28+
class Layouts(object):
2429
def __init__(self):
25-
self.source = _SubInfo()
26-
self.build = _SubInfo()
27-
self.package = _SubInfo(with_defaults=True)
30+
self.source = PartialLayout()
31+
self.build = PartialLayout()
32+
self.package = PartialLayout()
2833

2934

3035
class Folders(object):

conans/test/functional/toolchains/meson/test_meson_and_gnu_deps_flags.py

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -147,16 +147,6 @@ def build(self):
147147
client.run("install . %s -c 'tools.build:cxxflags=[%s]'" % (self._settings_str, flags))
148148
client.run("build .")
149149

150-
# FIXME: this should be tested elsewhere that we are passing this correctly
151-
# not checking the meson-log.txt
152-
meson_log_path = os.path.join(client.current_folder, "build", "meson-logs", "meson-log.txt")
153-
meson_log = load(None, meson_log_path)
154-
meson_log = meson_log.replace("\\", "/")
155-
assert "Build Options: " \
156-
"'--native-file {folder}/conan_meson_native.ini' " \
157-
"'--native-file {folder}/conan_meson_deps_flags.ini'" \
158-
"".format(folder=client.current_folder.replace("\\", "/")) in meson_log
159-
160150
app_name = "demo.exe" if platform.system() == "Windows" else "demo"
161151
client.run_command(os.path.join("build", app_name))
162152
assert 'VAR="VALUE' in client.out

conans/test/integration/editable/test_editable_envvars.py

Lines changed: 28 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,19 @@ def test_editable_envvars():
1010
dep = textwrap.dedent("""
1111
from conan import ConanFile
1212
class Dep(ConanFile):
13+
name = "dep"
14+
version = "1.0"
1315
def layout(self):
1416
self.folders.source = "mysource"
1517
self.folders.build = "mybuild"
16-
self.cpp.source.runenv_info.append_path("MYRUNPATH", "mylocalsrc")
17-
self.cpp.build.buildenv_info.define_path("MYBUILDPATH", "mylocalbuild")
18+
self.layouts.source.runenv_info.append_path("MYRUNPATH", "mylocalsrc")
19+
self.layouts.build.buildenv_info.define_path("MYBUILDPATH", "mylocalbuild")
20+
21+
self.layouts.package.buildenv_info.define_path("MYBUILDPATH", "mypkgbuild")
22+
self.layouts.package.runenv_info.append_path("MYRUNTPATH", "mypkgsrc")
23+
24+
def package_info(self):
25+
self.buildenv_info.define("OTHERVAR", "randomvalue")
1826
""")
1927

2028
c.save({"dep/conanfile.py": dep,
@@ -27,10 +35,24 @@ def layout(self):
2735
build_path = os.path.join(c.current_folder, "dep", "mybuild", "mylocalbuild")
2836
buildenv = c.load("conanbuildenv.sh")
2937
assert f'export MYBUILDPATH="{build_path}"' in buildenv
38+
# The package_info() buildenv is aggregated, no prob
39+
# But don't use same vars
40+
assert 'export OTHERVAR="randomvalue"' in buildenv
3041
runenv = c.load("conanrunenv.sh")
3142
run_path = os.path.join(c.current_folder, "dep", "mysource", "mylocalsrc")
3243
assert f'export MYRUNPATH="$MYRUNPATH:{run_path}"' in runenv
3344

45+
c.run("editable remove dep/1.0")
46+
c.run("create dep")
47+
c.run("install pkg -s os=Linux -s:b os=Linux")
48+
buildenv = c.load("conanbuildenv.sh")
49+
assert 'mypkgbuild' in buildenv
50+
assert "mylocalbuild" not in buildenv
51+
assert 'export OTHERVAR="randomvalue"' in buildenv
52+
runenv = c.load("conanrunenv.sh")
53+
assert 'mypkgsrc' in runenv
54+
assert "mylocalsrc" not in runenv
55+
3456

3557
def test_editable_conf():
3658
c = TestClient()
@@ -41,10 +63,10 @@ class Dep(ConanFile):
4163
def layout(self):
4264
self.folders.source = "mysource"
4365
self.folders.build = "mybuild"
44-
self.cpp.source.conf_info.append_path("myconf", "mylocalsrc")
45-
self.cpp.build.conf_info.append_path("myconf", "mylocalbuild")
46-
self.cpp.build.conf_info.update_path("mydictconf", {"a": "mypatha", "b": "mypathb"})
47-
self.cpp.build.conf_info.define_path("mydictconf2", {"c": "mypathc"})
66+
self.layouts.source.conf_info.append_path("myconf", "mylocalsrc")
67+
self.layouts.build.conf_info.append_path("myconf", "mylocalbuild")
68+
self.layouts.build.conf_info.update_path("mydictconf", {"a": "mypatha", "b": "mypathb"})
69+
self.layouts.build.conf_info.define_path("mydictconf2", {"c": "mypathc"})
4870
""")
4971

5072
pkg = textwrap.dedent("""

conans/test/unittests/tools/cmake/test_cmaketoolchain.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -490,3 +490,18 @@ def test_variables_types(conanfile):
490490

491491
contents = load(os.path.join(conanfile.generators_folder, "conan_toolchain.cmake"))
492492
assert 'set(FOO ON CACHE BOOL "Variable FOO conan-toolchain defined")' in contents
493+
494+
495+
def test_compilers_block(conanfile):
496+
cmake_mapping = {"c": "C", "cuda": "CUDA", "cpp": "CXX", "objc": "OBJC",
497+
"objcpp": "OBJCXX", "rc": "RC", 'fortran': "Fortran", 'asm': "ASM",
498+
"hip": "HIP", "ispc": "ISPC"}
499+
compilers = {"c": "path_to_c", "cuda": "path_to_cuda", "cpp": "path_to_cpp",
500+
"objc": "path_to_objc", "objcpp": "path_to_objcpp", "rc": "path_to_rc",
501+
'fortran': "path_to_fortran", 'asm': "path_to_asm", "hip": "path_to_hip",
502+
"ispc": "path_to_ispc"}
503+
conanfile.conf.define("tools.build:compiler_executables", compilers)
504+
toolchain = CMakeToolchain(conanfile)
505+
content = toolchain.content
506+
for compiler, lang in cmake_mapping.items():
507+
assert f'set(CMAKE_{lang}_COMPILER "path_to_{compiler}")' in content

conans/test/unittests/tools/gnu/autotoolschain_test.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
from conan.tools.gnu import AutotoolsToolchain
44
from conans.errors import ConanException
5+
from conans.model.conf import Conf
56
from conans.test.utils.mocks import ConanFileMock, MockSettings
67

78

@@ -90,3 +91,20 @@ def test_get_gnu_triplet_for_cross_building_raise_error():
9091
msg = "'compiler' parameter for 'get_gnu_triplet()' is not specified and " \
9192
"needed for os=Windows"
9293
assert msg == str(conan_error.value)
94+
95+
96+
def test_compilers_mapping():
97+
autotools_mapping = {"c": "CC", "cpp": "CXX", "cuda": "NVCC", "fortran": "FC"}
98+
compilers = {"c": "path_to_c", "cpp": "path_to_cpp", "cuda": "path_to_cuda",
99+
"fortran": "path_to_fortran"}
100+
settings = MockSettings({"build_type": "Release",
101+
"os": "Windows",
102+
"arch": "x86_64"})
103+
conanfile = ConanFileMock()
104+
conanfile.conf = Conf()
105+
conanfile.conf.define("tools.build:compiler_executables", compilers)
106+
conanfile.settings = settings
107+
autotoolschain = AutotoolsToolchain(conanfile)
108+
env = autotoolschain.environment().vars(conanfile)
109+
for compiler, env_var in autotools_mapping.items():
110+
assert env[env_var] == f"path_to_{compiler}"

0 commit comments

Comments
 (0)