diff --git a/conans/client/generators/cmake.py b/conans/client/generators/cmake.py index d160febadc2..e37efcf7a91 100644 --- a/conans/client/generators/cmake.py +++ b/conans/client/generators/cmake.py @@ -78,8 +78,8 @@ def content(self): sections.append(CMakeCommonMacros.apple_frameworks_macro) # Per requirement variables - for name, dep_cpp_info in self.deps_build_info.dependencies: - dep_name = dep_cpp_info.get_name("cmake", name) + for _, dep_cpp_info in self.deps_build_info.dependencies: + dep_name = dep_cpp_info.get_name("cmake") deps = DepsCppCmake(dep_cpp_info) dep_flags = cmake_dependency_vars(dep_name, deps=deps) sections.append(dep_flags) diff --git a/conans/client/generators/cmake_common.py b/conans/client/generators/cmake_common.py index 900927b56dc..2087b0431d3 100644 --- a/conans/client/generators/cmake_common.py +++ b/conans/client/generators/cmake_common.py @@ -190,14 +190,14 @@ def generate_targets_section(dependencies, generator_name): ' set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CONAN_CMD_C_FLAGS}")\n' ' set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${CONAN_CMD_SHARED_LINKER_FLAGS}")\n') dependencies_dict = {name: dep_info for name, dep_info in dependencies} - for name, dep_info in dependencies: - dep_name = dep_info.get_name(generator_name, name) - use_deps = ["CONAN_PKG::%s" % dependencies_dict[d].get_name(generator_name, d) for d in dep_info.public_deps] + for _, dep_info in dependencies: + dep_name = dep_info.get_name(generator_name) + use_deps = ["CONAN_PKG::%s" % dependencies_dict[d].get_name(generator_name) for d in dep_info.public_deps] deps = "" if not use_deps else " ".join(use_deps) section.append(_target_template.format(name="CONAN_PKG::%s" % dep_name, deps=deps, uname=dep_name.upper(), pkg_name=dep_name)) - all_targets = " ".join(["CONAN_PKG::%s" % dep_info.get_name(generator_name, name) for name, dep_info in dependencies]) + all_targets = " ".join(["CONAN_PKG::%s" % dep_info.get_name(generator_name) for _, dep_info in dependencies]) section.append(' set(CONAN_TARGETS %s)\n' % all_targets) section.append('endmacro()\n') return section diff --git a/conans/client/generators/cmake_multi.py b/conans/client/generators/cmake_multi.py index 40af0a11f6b..3a566d04518 100644 --- a/conans/client/generators/cmake_multi.py +++ b/conans/client/generators/cmake_multi.py @@ -50,8 +50,8 @@ def _content_type(self, build_type): sections = [] # Per requirement variables - for name, dep_cpp_info in self.deps_build_info.dependencies: - dep_name = dep_cpp_info.get_name("cmake_multi", name) + for _, dep_cpp_info in self.deps_build_info.dependencies: + dep_name = dep_cpp_info.get_name("cmake_multi") # Only the specific of the build_type dep_cpp_info = extend(dep_cpp_info, build_type) deps = DepsCppCmake(dep_cpp_info) diff --git a/conans/client/generators/cmake_paths.py b/conans/client/generators/cmake_paths.py index 9f6b36795ed..6e4554cce67 100644 --- a/conans/client/generators/cmake_paths.py +++ b/conans/client/generators/cmake_paths.py @@ -14,8 +14,8 @@ def content(self): # The CONAN_XXX_ROOT variables are needed because the FindXXX.cmake or XXXConfig.cmake # in a package could have been "patched" with the `cmake.patch_config_paths()` # replacing absolute paths with CONAN_XXX_ROOT variables. - for name, dep_cpp_info in self.deps_build_info.dependencies: - var_name = "CONAN_{}_ROOT".format(dep_cpp_info.get_name("cmake_paths", name).upper()) + for _, dep_cpp_info in self.deps_build_info.dependencies: + var_name = "CONAN_{}_ROOT".format(dep_cpp_info.get_name("cmake_paths").upper()) lines.append('set({} {})'.format(var_name, DepsCppCmake(dep_cpp_info).rootpath)) # We want to prioritize the FindXXX.cmake files: diff --git a/conans/model/build_info.py b/conans/model/build_info.py index 8c7826f487d..6b4c6794f9f 100644 --- a/conans/model/build_info.py +++ b/conans/model/build_info.py @@ -109,9 +109,8 @@ def framework_paths(self): self._framework_paths = self._filter_paths(self.frameworkdirs) return self._framework_paths - def get_name(self, generator, pkg_name=None): - fallback_name = self.name if generator not in ["cmake", "cmake_multi", "cmake_paths"] else pkg_name # FIXME: Remove in v1.22 (https://github.com/conan-io/conan/issues/6269#issuecomment-570182130) - return self.names.get(generator, fallback_name) + def get_name(self, generator): + return self.names.get(generator, self.name) # Compatibility for 'cppflags' (old style property to allow decoration) @deprecation.deprecated(deprecated_in="1.13", removed_in="2.0", details="Use 'cxxflags' instead") diff --git a/conans/test/sentinel/__init__.py b/conans/test/sentinel/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/conans/test/sentinel/test_cmake_generator.py b/conans/test/sentinel/test_cmake_generator.py new file mode 100644 index 00000000000..35285685059 --- /dev/null +++ b/conans/test/sentinel/test_cmake_generator.py @@ -0,0 +1,106 @@ +import unittest + +import semver + +from conans import __version__ +from conans.client.generators.cmake import CMakeGenerator +from conans.client.generators.cmake_multi import CMakeMultiGenerator +from conans.errors import ConanException +from conans.model.build_info import CppInfo +from conans.model.conan_file import ConanFile +from conans.model.env_info import EnvValues +from conans.model.ref import ConanFileReference +from conans.test.utils.tools import TestBufferConanOutput + + +# More info: https://github.com/conan-io/conan/pull/6292 +assert semver.compare(__version__, "1.22.0", loose=False) == -1, "File to be removed in v1.22 (tests should pass)" + + +class _MockSettings(object): + build_type = None + os = None + os_build = None + fields = [] + + def __init__(self, build_type=None): + self.build_type = build_type + + @property + def compiler(self): + raise ConanException("mock: not available") + + def constraint(self, _): + return self + + def get_safe(self, name): + if name == "build_type": + return self.build_type + return None + + def items(self): + return {} + + +class CMakeGeneratorSentinel(unittest.TestCase): + """ + In v1.21.1 we introduced a workaround to bypass the `cpp_info.name` for the `cmake` generator, that + behavior should be reverted and the recipes in `conan-center-index` should be fixed. + + *** These tests HAVE TO pass in v1.22 *** + + Rationale + https://github.com/conan-io/conan/issues/6269#issuecomment-570182130 + + Behavior not to be merged in v1.22 + https://github.com/conan-io/conan/pull/6288 + + This test is here just to be sure that the previous PR doesn't reach 1.22, afterwards, this file should + be removed + """ + + def test_conan_version(self): + # Remove this TestCase in v1.22 + self.assertEqual(semver.compare(__version__, "1.22.0", loose=False), -1, "Remove this TestCase") + + def _generate_conanfile(self, with_names=None): + conanfile = ConanFile(TestBufferConanOutput(), None) + settings = _MockSettings() + settings.build_type = "Debug" + conanfile.initialize(settings, EnvValues()) + + ref = ConanFileReference.loads("my_pkg/0.1@lasote/stables") + cpp_info = CppInfo("dummy_root_folder1") + cpp_info.name = "alternate_name" + if with_names: + cpp_info.names[with_names] = "alternate_name" + conanfile.deps_cpp_info.update(cpp_info, ref.name) + return conanfile + + def test_cmake_generator(self): + conanfile = self._generate_conanfile() + generator = CMakeGenerator(conanfile) + content = generator.content + self.assertIn("CONAN_PKG::alternate_name", content) + self.assertNotIn("CONAN_PKG::my_pkg", content) + + def test_cmake_multi_generator(self): + conanfile = self._generate_conanfile() + generator = CMakeMultiGenerator(conanfile) + content = generator.content['conanbuildinfo_multi.cmake'] + self.assertIn("CONAN_PKG::alternate_name", content) + self.assertNotIn("CONAN_PKG::my_pkg", content) + + def test_cmake_generator_with_names(self): + conanfile = self._generate_conanfile(with_names='cmake') + generator = CMakeGenerator(conanfile) + content = generator.content + self.assertIn("CONAN_PKG::alternate_name", content) + self.assertNotIn("CONAN_PKG::my_pkg", content) + + def test_cmake_multi_generator_with_names(self): + conanfile = self._generate_conanfile(with_names='cmake_multi') + generator = CMakeMultiGenerator(conanfile) + content = generator.content['conanbuildinfo_multi.cmake'] + self.assertIn("CONAN_PKG::alternate_name", content) + self.assertNotIn("CONAN_PKG::my_pkg", content)