From f75490e0dbb5da4f8a045d1aa4f92472a4c9b977 Mon Sep 17 00:00:00 2001 From: jgsogo Date: Thu, 2 Jan 2020 13:45:32 +0100 Subject: [PATCH 1/6] sentinel for changes in #6288 --- conans/test/sentinel/__init__.py | 0 conans/test/sentinel/test_cmake_generator.py | 84 ++++++++++++++++++++ 2 files changed, 84 insertions(+) create mode 100644 conans/test/sentinel/__init__.py create mode 100644 conans/test/sentinel/test_cmake_generator.py 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..1bd4dd114f9 --- /dev/null +++ b/conans/test/sentinel/test_cmake_generator.py @@ -0,0 +1,84 @@ +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 + + +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. + + 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): + 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" + 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) From d3535d2e2b30b757315ca5bc054d9d2d104bedca Mon Sep 17 00:00:00 2001 From: jgsogo Date: Thu, 2 Jan 2020 13:56:55 +0100 Subject: [PATCH 2/6] if using explicit names, it should use the new name --- conans/test/sentinel/test_cmake_generator.py | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/conans/test/sentinel/test_cmake_generator.py b/conans/test/sentinel/test_cmake_generator.py index 1bd4dd114f9..bf8efe040e9 100644 --- a/conans/test/sentinel/test_cmake_generator.py +++ b/conans/test/sentinel/test_cmake_generator.py @@ -57,7 +57,7 @@ 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): + def _generate_conanfile(self, with_names=None): conanfile = ConanFile(TestBufferConanOutput(), None) settings = _MockSettings() settings.build_type = "Debug" @@ -66,6 +66,8 @@ def _generate_conanfile(self): 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 @@ -82,3 +84,17 @@ def test_cmake_multi_generator(self): 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) From 2c741a52e44eec78e7169937f4233b5167a391e2 Mon Sep 17 00:00:00 2001 From: jgsogo Date: Thu, 2 Jan 2020 13:58:09 +0100 Subject: [PATCH 3/6] add notice on top --- conans/test/sentinel/test_cmake_generator.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/conans/test/sentinel/test_cmake_generator.py b/conans/test/sentinel/test_cmake_generator.py index bf8efe040e9..cfcd796fddf 100644 --- a/conans/test/sentinel/test_cmake_generator.py +++ b/conans/test/sentinel/test_cmake_generator.py @@ -43,6 +43,8 @@ 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 From a56105f8eecba66fa2e6ec06ec5731e3efac808d Mon Sep 17 00:00:00 2001 From: jgsogo Date: Thu, 2 Jan 2020 19:22:16 +0100 Subject: [PATCH 4/6] add an assert on top --- conans/test/sentinel/test_cmake_generator.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/conans/test/sentinel/test_cmake_generator.py b/conans/test/sentinel/test_cmake_generator.py index cfcd796fddf..35285685059 100644 --- a/conans/test/sentinel/test_cmake_generator.py +++ b/conans/test/sentinel/test_cmake_generator.py @@ -13,6 +13,10 @@ 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 From e55e53d4818a97c7726c8ae321a126c2ce7dafa5 Mon Sep 17 00:00:00 2001 From: memsharded Date: Fri, 17 Jan 2020 14:29:36 +0100 Subject: [PATCH 5/6] reverting behavior --- conans/client/generators/cmake.py | 4 ++-- conans/client/generators/cmake_common.py | 8 ++++---- conans/client/generators/cmake_multi.py | 4 ++-- conans/model/build_info.py | 5 ++--- 4 files changed, 10 insertions(+), 11 deletions(-) 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/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") From 736c3edcee854b99ac1cda4596a860b3328691ba Mon Sep 17 00:00:00 2001 From: memsharded Date: Fri, 17 Jan 2020 15:25:49 +0100 Subject: [PATCH 6/6] tests --- conans/client/generators/cmake_paths.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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: