From c2c764455e46f743c561d8d07c85328a3faa1fc9 Mon Sep 17 00:00:00 2001 From: czoido Date: Fri, 26 Mar 2021 10:37:01 +0100 Subject: [PATCH 01/59] wip --- conans/client/installer.py | 1 + 1 file changed, 1 insertion(+) diff --git a/conans/client/installer.py b/conans/client/installer.py index 44dc9faf8fa..b1a191afa81 100644 --- a/conans/client/installer.py +++ b/conans/client/installer.py @@ -637,6 +637,7 @@ def _call_package_info(self, conanfile, package_folder, ref): conanfile.name, conanfile.requires) except ConanException as e: raise ConanException("%s package_info(): %s" % (str(conanfile), e)) + conanfile.cpp_info.update_properties() conanfile._conan_dep_cpp_info = DepCppInfo(conanfile.cpp_info) self._hook_manager.execute("post_package_info", conanfile=conanfile, reference=ref) From 76c0a2faa6d2575d208f96dcba43783967d485a6 Mon Sep 17 00:00:00 2001 From: czoido Date: Fri, 26 Mar 2021 10:37:13 +0100 Subject: [PATCH 02/59] wip --- .../client/generators/cmake_find_package.py | 7 +++ conans/model/build_info.py | 35 +++++++++--- .../integration/generators/generators_test.py | 54 +++++++++++++++++++ 3 files changed, 89 insertions(+), 7 deletions(-) diff --git a/conans/client/generators/cmake_find_package.py b/conans/client/generators/cmake_find_package.py index d759759dc98..ed7136e856a 100644 --- a/conans/client/generators/cmake_find_package.py +++ b/conans/client/generators/cmake_find_package.py @@ -221,12 +221,19 @@ def filename(self): def _get_filename(cls, obj): return obj.get_filename(cls.name) + @classmethod + def _get_property(cls, obj, property_name, generator=None): + return obj.get_property(property_name, generator) + @property def content(self): ret = {} for pkg_name, cpp_info in self.deps_build_info.dependencies: pkg_filename = self._get_filename(cpp_info) pkg_findname = self._get_name(cpp_info) + print("---------") + #pkg_filename = self._get_property(cpp_info, "filenames", "cmake_find_package") + #pkg_findname = self._get_property(cpp_info, "names", "cmake_find_package") ret["Find%s.cmake" % pkg_filename] = self._find_for_dep( pkg_name=pkg_name, pkg_findname=pkg_findname, diff --git a/conans/model/build_info.py b/conans/model/build_info.py index 88fc0cd3e90..ddf691a1e40 100644 --- a/conans/model/build_info.py +++ b/conans/model/build_info.py @@ -104,6 +104,7 @@ class _CppInfo(object): def __init__(self): self._name = None + self._generator_properties = {} self.names = {} self.system_libs = [] # Ordered list of system libraries self.includedirs = [] # Ordered list of include paths @@ -209,14 +210,34 @@ def name(self): def name(self, value): self._name = value - def get_name(self, generator): - return self.names.get(generator, self._name) + def set_property(self, property_name, value, generator=None): + generator = generator or "conan_default_generators_value" + gen_dict = self._generator_properties.get(generator) + if gen_dict: + gen_dict.update({property_name: value}) + else: + self._generator_properties.update({generator: {property_name: value}}) - def get_filename(self, generator): - result = self.filenames.get(generator) - if result: - return result - return self.get_name(generator) + def get_property(self, property_name, generator=None): + generator = generator or "conan_default_generators_value" + try: + return self._generator_properties.get(generator).get(property_name) + except KeyError: + return None + # fall back in the default or throw an error ? + #return self._generator_properties.get("conan_default_generators_value").get(property_name) + + def update_properties(self): + for generator, value in self.names.items(): + self.set_property("name", value, generator=generator) + for generator, value in self.filenames.items(): + self.set_property("filenames", value, generator=generator) + + def get_name(self, generator=None): + return self.get_property("name", generator) or self._name + + def get_filename(self, generator=None): + return self.get_property("filenames", generator) or self._name # Compatibility for 'cppflags' (old style property to allow decoration) def get_cppflags(self): diff --git a/conans/test/integration/generators/generators_test.py b/conans/test/integration/generators/generators_test.py index c938eca7014..70ee5b3367e 100644 --- a/conans/test/integration/generators/generators_test.py +++ b/conans/test/integration/generators/generators_test.py @@ -179,3 +179,57 @@ def configure(self): client.run('install . -s os=Windows -s compiler="Visual Studio" -s compiler.version=15' ' -s compiler.runtime=MD -g cmake') self.assertIn("conanfile.py: Generator 'msbuild' calling 'generate()'", client.out) + + def test_misc(self): + client = TestClient() + conanfile = textwrap.dedent(""" + from conans import ConanFile + class Pkg(ConanFile): + name = "aws-checksums" + version = "1.0" + + def build(self): + pass + + def package(self): + pass + + def package_info(self): + self.cpp_info.filenames["cmake_find_package"] = "aws-checksums" + # self.cpp_info.filenames["cmake_find_package_multi"] = "aws-checksums" + # self.cpp_info.names["cmake_find_package"] = "AWS" + # self.cpp_info.names["cmake_find_package_multi"] = "AWS" + # self.cpp_info.components["aws-checksums-lib"].names["cmake_find_package"] = "aws-checksums" + # self.cpp_info.components["aws-checksums-lib"].names["cmake_find_package_multi"] = "aws-checksums" + # self.cpp_info.components["aws-checksums-lib"].libs = ["aws-checksums"] + # self.cpp_info.set_property("names", "default_name_new") + # self.cpp_info.set_property("filenames", "default_filenames_new") + # #self.cpp_info.filenames["cmake_find_package"] = "cmake_find_package_old" + # #self.cpp_info.names["cmake_find_package"] = "cmake_find_package_old" + # self.cpp_info.components["jander"].set_property("names", "cmake_find_package_new") + # self.cpp_info.components["jander"].names["cmake_find_package"] = "cmake_find_package_component_old" + """) + client.save({"conanfile.py": conanfile}) + client.run('create .') + conanfile = textwrap.dedent(""" + from conans import ConanFile, CMake + + + class ConanPKG(ConanFile): + name = "conanpkg" + version = "1.0" + generators = "cmake_find_package" + requires = "aws-checksums/1.0" + + def build(self): + pass + + def package(self): + pass + + def package_info(self): + pass + """) + client.save({"conanfile.py": conanfile}) + + client.run('create .') From 12bd1d403a69ca1805aef737fa61baa0df3a5146 Mon Sep 17 00:00:00 2001 From: czoido Date: Fri, 26 Mar 2021 11:25:04 +0100 Subject: [PATCH 03/59] wip --- conans/model/build_info.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/conans/model/build_info.py b/conans/model/build_info.py index ddf691a1e40..1747607e7ba 100644 --- a/conans/model/build_info.py +++ b/conans/model/build_info.py @@ -221,7 +221,11 @@ def set_property(self, property_name, value, generator=None): def get_property(self, property_name, generator=None): generator = generator or "conan_default_generators_value" try: - return self._generator_properties.get(generator).get(property_name) + gen_dict = self._generator_properties.get(generator) + if gen_dict: + return gen_dict.get(property_name) + else: + return None except KeyError: return None # fall back in the default or throw an error ? From 5f6332d5642998c175c68e9ebbef8531d52b2dfb Mon Sep 17 00:00:00 2001 From: czoido Date: Fri, 26 Mar 2021 12:34:43 +0100 Subject: [PATCH 04/59] wip --- conans/client/generators/cmake_find_package.py | 7 ++----- conans/model/build_info.py | 4 ++-- .../integration/generators/generators_test.py | 15 ++++++++------- 3 files changed, 12 insertions(+), 14 deletions(-) diff --git a/conans/client/generators/cmake_find_package.py b/conans/client/generators/cmake_find_package.py index ed7136e856a..933cc19472e 100644 --- a/conans/client/generators/cmake_find_package.py +++ b/conans/client/generators/cmake_find_package.py @@ -229,11 +229,8 @@ def _get_property(cls, obj, property_name, generator=None): def content(self): ret = {} for pkg_name, cpp_info in self.deps_build_info.dependencies: - pkg_filename = self._get_filename(cpp_info) - pkg_findname = self._get_name(cpp_info) - print("---------") - #pkg_filename = self._get_property(cpp_info, "filenames", "cmake_find_package") - #pkg_findname = self._get_property(cpp_info, "names", "cmake_find_package") + pkg_filename = self._get_property(cpp_info, "filenames", "cmake_find_package") + pkg_findname = self._get_property(cpp_info, "names", "cmake_find_package") ret["Find%s.cmake" % pkg_filename] = self._find_for_dep( pkg_name=pkg_name, pkg_findname=pkg_findname, diff --git a/conans/model/build_info.py b/conans/model/build_info.py index 1747607e7ba..21baf31996b 100644 --- a/conans/model/build_info.py +++ b/conans/model/build_info.py @@ -233,12 +233,12 @@ def get_property(self, property_name, generator=None): def update_properties(self): for generator, value in self.names.items(): - self.set_property("name", value, generator=generator) + self.set_property("names", value, generator=generator) for generator, value in self.filenames.items(): self.set_property("filenames", value, generator=generator) def get_name(self, generator=None): - return self.get_property("name", generator) or self._name + return self.get_property("names", generator) or self._name def get_filename(self, generator=None): return self.get_property("filenames", generator) or self._name diff --git a/conans/test/integration/generators/generators_test.py b/conans/test/integration/generators/generators_test.py index 70ee5b3367e..ec5b4063a74 100644 --- a/conans/test/integration/generators/generators_test.py +++ b/conans/test/integration/generators/generators_test.py @@ -196,12 +196,12 @@ def package(self): def package_info(self): self.cpp_info.filenames["cmake_find_package"] = "aws-checksums" - # self.cpp_info.filenames["cmake_find_package_multi"] = "aws-checksums" - # self.cpp_info.names["cmake_find_package"] = "AWS" - # self.cpp_info.names["cmake_find_package_multi"] = "AWS" - # self.cpp_info.components["aws-checksums-lib"].names["cmake_find_package"] = "aws-checksums" - # self.cpp_info.components["aws-checksums-lib"].names["cmake_find_package_multi"] = "aws-checksums" - # self.cpp_info.components["aws-checksums-lib"].libs = ["aws-checksums"] + self.cpp_info.filenames["cmake_find_package_multi"] = "aws-checksums" + self.cpp_info.names["cmake_find_package"] = "AWS" + self.cpp_info.names["cmake_find_package_multi"] = "AWS" + self.cpp_info.components["aws-checksums-lib"].names["cmake_find_package"] = "component-aws-checksums" + self.cpp_info.components["aws-checksums-lib"].names["cmake_find_package_multi"] = "component-aws-checksums" + self.cpp_info.components["aws-checksums-lib"].libs = ["component-aws-checksums"] # self.cpp_info.set_property("names", "default_name_new") # self.cpp_info.set_property("filenames", "default_filenames_new") # #self.cpp_info.filenames["cmake_find_package"] = "cmake_find_package_old" @@ -210,6 +210,7 @@ def package_info(self): # self.cpp_info.components["jander"].names["cmake_find_package"] = "cmake_find_package_component_old" """) client.save({"conanfile.py": conanfile}) + client.cache_folder = "/private/var/folders/6s/l9c3n5696gvg7qm3v7ms78lc0000gq/T/tmp3sy3m2zqconans" client.run('create .') conanfile = textwrap.dedent(""" from conans import ConanFile, CMake @@ -231,5 +232,5 @@ def package_info(self): pass """) client.save({"conanfile.py": conanfile}) - client.run('create .') + print("sdadas") From f0dadfd1e0fd5b4c667a4cfb597412409f377168 Mon Sep 17 00:00:00 2001 From: czoido Date: Sat, 27 Mar 2021 08:15:00 +0100 Subject: [PATCH 05/59] wip --- .../client/generators/cmake_find_package.py | 4 +-- conans/model/build_info.py | 4 +-- conans/model/conan_generator.py | 2 +- .../integration/generators/generators_test.py | 36 ++++++++++--------- 4 files changed, 24 insertions(+), 22 deletions(-) diff --git a/conans/client/generators/cmake_find_package.py b/conans/client/generators/cmake_find_package.py index 933cc19472e..a341b06a534 100644 --- a/conans/client/generators/cmake_find_package.py +++ b/conans/client/generators/cmake_find_package.py @@ -229,8 +229,8 @@ def _get_property(cls, obj, property_name, generator=None): def content(self): ret = {} for pkg_name, cpp_info in self.deps_build_info.dependencies: - pkg_filename = self._get_property(cpp_info, "filenames", "cmake_find_package") - pkg_findname = self._get_property(cpp_info, "names", "cmake_find_package") + pkg_filename = self._get_property(cpp_info, "filenames", self.name) + pkg_findname = self._get_property(cpp_info, "names", self.name) ret["Find%s.cmake" % pkg_filename] = self._find_for_dep( pkg_name=pkg_name, pkg_findname=pkg_findname, diff --git a/conans/model/build_info.py b/conans/model/build_info.py index 21baf31996b..7d7a1a8f382 100644 --- a/conans/model/build_info.py +++ b/conans/model/build_info.py @@ -224,8 +224,8 @@ def get_property(self, property_name, generator=None): gen_dict = self._generator_properties.get(generator) if gen_dict: return gen_dict.get(property_name) - else: - return None + elif self._generator_properties.get("conan_default_generators_value"): + return self._generator_properties.get("conan_default_generators_value").get(property_name) except KeyError: return None # fall back in the default or throw an error ? diff --git a/conans/model/conan_generator.py b/conans/model/conan_generator.py index 6109bf8dc25..0395ca8f506 100644 --- a/conans/model/conan_generator.py +++ b/conans/model/conan_generator.py @@ -93,7 +93,7 @@ def _get_require_name(self, pkg_name, req): def _get_components(self, pkg_name, cpp_info): ret = [] for comp_name, comp in self.sorted_components(cpp_info).items(): - comp_genname = self._get_name(cpp_info.components[comp_name]) + comp_genname = self._get_property(cpp_info.components[comp_name], "names", self.name) comp_requires_gennames = [] for require in comp.requires: comp_requires_gennames.append(self._get_require_name(pkg_name, require)) diff --git a/conans/test/integration/generators/generators_test.py b/conans/test/integration/generators/generators_test.py index ec5b4063a74..f644d7892d3 100644 --- a/conans/test/integration/generators/generators_test.py +++ b/conans/test/integration/generators/generators_test.py @@ -182,10 +182,12 @@ def configure(self): def test_misc(self): client = TestClient() + client.cache_folder = "/private/var/folders/6s/l9c3n5696gvg7qm3v7ms78lc0000gq/T/tmp3sy3m2zqconans" + client.current_folder = "/private/var/folders/6s/l9c3n5696gvg7qm3v7ms78lc0000gq/T/tmpajknbs00conans" conanfile = textwrap.dedent(""" from conans import ConanFile class Pkg(ConanFile): - name = "aws-checksums" + name = "mylib" version = "1.0" def build(self): @@ -195,22 +197,22 @@ def package(self): pass def package_info(self): - self.cpp_info.filenames["cmake_find_package"] = "aws-checksums" - self.cpp_info.filenames["cmake_find_package_multi"] = "aws-checksums" - self.cpp_info.names["cmake_find_package"] = "AWS" - self.cpp_info.names["cmake_find_package_multi"] = "AWS" - self.cpp_info.components["aws-checksums-lib"].names["cmake_find_package"] = "component-aws-checksums" - self.cpp_info.components["aws-checksums-lib"].names["cmake_find_package_multi"] = "component-aws-checksums" - self.cpp_info.components["aws-checksums-lib"].libs = ["component-aws-checksums"] - # self.cpp_info.set_property("names", "default_name_new") - # self.cpp_info.set_property("filenames", "default_filenames_new") - # #self.cpp_info.filenames["cmake_find_package"] = "cmake_find_package_old" - # #self.cpp_info.names["cmake_find_package"] = "cmake_find_package_old" - # self.cpp_info.components["jander"].set_property("names", "cmake_find_package_new") - # self.cpp_info.components["jander"].names["cmake_find_package"] = "cmake_find_package_component_old" + self.cpp_info.components["mylib-component"].set_property("names", "mylib-component-name") + # self.cpp_info.filenames["cmake_find_package"] = "aws-checksums" + # self.cpp_info.filenames["cmake_find_package_multi"] = "aws-checksums" + # self.cpp_info.names["cmake_find_package"] = "AWS" + # self.cpp_info.names["cmake_find_package_multi"] = "AWS" + # self.cpp_info.components["aws-checksums-lib"].names["cmake_find_package"] = "component-aws-checksums" + # self.cpp_info.components["aws-checksums-lib"].names["cmake_find_package_multi"] = "component-aws-checksums" + # self.cpp_info.components["aws-checksums-lib"].libs = ["component-aws-checksums"] + # # self.cpp_info.set_property("names", "default_name_new") + # # self.cpp_info.set_property("filenames", "default_filenames_new") + # # #self.cpp_info.filenames["cmake_find_package"] = "cmake_find_package_old" + # # #self.cpp_info.names["cmake_find_package"] = "cmake_find_package_old" + # # self.cpp_info.components["jander"].set_property("names", "cmake_find_package_new") + # # self.cpp_info.components["jander"].names["cmake_find_package"] = "cmake_find_package_component_old" """) client.save({"conanfile.py": conanfile}) - client.cache_folder = "/private/var/folders/6s/l9c3n5696gvg7qm3v7ms78lc0000gq/T/tmp3sy3m2zqconans" client.run('create .') conanfile = textwrap.dedent(""" from conans import ConanFile, CMake @@ -220,7 +222,7 @@ class ConanPKG(ConanFile): name = "conanpkg" version = "1.0" generators = "cmake_find_package" - requires = "aws-checksums/1.0" + requires = "mylib/1.0" def build(self): pass @@ -232,5 +234,5 @@ def package_info(self): pass """) client.save({"conanfile.py": conanfile}) - client.run('create .') + client.run('install .') print("sdadas") From aaa11da4192bbc386819575e783deac00e23a19a Mon Sep 17 00:00:00 2001 From: czoido Date: Sat, 27 Mar 2021 08:41:53 +0100 Subject: [PATCH 06/59] wip --- conans/client/generators/cmake_find_package.py | 4 ++-- conans/model/build_info.py | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/conans/client/generators/cmake_find_package.py b/conans/client/generators/cmake_find_package.py index a341b06a534..cb435a53e4b 100644 --- a/conans/client/generators/cmake_find_package.py +++ b/conans/client/generators/cmake_find_package.py @@ -229,8 +229,8 @@ def _get_property(cls, obj, property_name, generator=None): def content(self): ret = {} for pkg_name, cpp_info in self.deps_build_info.dependencies: - pkg_filename = self._get_property(cpp_info, "filenames", self.name) - pkg_findname = self._get_property(cpp_info, "names", self.name) + pkg_filename = self._get_name(cpp_info) + pkg_findname = self._get_filename(cpp_info) ret["Find%s.cmake" % pkg_filename] = self._find_for_dep( pkg_name=pkg_name, pkg_findname=pkg_findname, diff --git a/conans/model/build_info.py b/conans/model/build_info.py index 7d7a1a8f382..e5feb97b479 100644 --- a/conans/model/build_info.py +++ b/conans/model/build_info.py @@ -223,9 +223,9 @@ def get_property(self, property_name, generator=None): try: gen_dict = self._generator_properties.get(generator) if gen_dict: - return gen_dict.get(property_name) + return gen_dict.get(property_name) elif self._generator_properties.get("conan_default_generators_value"): - return self._generator_properties.get("conan_default_generators_value").get(property_name) + return self._generator_properties.get("conan_default_generators_value").get(property_name) except KeyError: return None # fall back in the default or throw an error ? From 78259396f224ff3d39dc07516b104ffb68779511 Mon Sep 17 00:00:00 2001 From: czoido Date: Sat, 27 Mar 2021 09:49:25 +0100 Subject: [PATCH 07/59] wip --- conans/model/conan_generator.py | 2 +- .../integration/generators/generators_test.py | 112 +++++++++--------- 2 files changed, 60 insertions(+), 54 deletions(-) diff --git a/conans/model/conan_generator.py b/conans/model/conan_generator.py index 0395ca8f506..6109bf8dc25 100644 --- a/conans/model/conan_generator.py +++ b/conans/model/conan_generator.py @@ -93,7 +93,7 @@ def _get_require_name(self, pkg_name, req): def _get_components(self, pkg_name, cpp_info): ret = [] for comp_name, comp in self.sorted_components(cpp_info).items(): - comp_genname = self._get_property(cpp_info.components[comp_name], "names", self.name) + comp_genname = self._get_name(cpp_info.components[comp_name]) comp_requires_gennames = [] for require in comp.requires: comp_requires_gennames.append(self._get_require_name(pkg_name, require)) diff --git a/conans/test/integration/generators/generators_test.py b/conans/test/integration/generators/generators_test.py index f644d7892d3..c5c3c55f868 100644 --- a/conans/test/integration/generators/generators_test.py +++ b/conans/test/integration/generators/generators_test.py @@ -182,57 +182,63 @@ def configure(self): def test_misc(self): client = TestClient() + client.run("config install /Users/carlos/.conan/generators/gyp-generator.py -tf generators") client.cache_folder = "/private/var/folders/6s/l9c3n5696gvg7qm3v7ms78lc0000gq/T/tmp3sy3m2zqconans" - client.current_folder = "/private/var/folders/6s/l9c3n5696gvg7qm3v7ms78lc0000gq/T/tmpajknbs00conans" - conanfile = textwrap.dedent(""" - from conans import ConanFile - class Pkg(ConanFile): - name = "mylib" - version = "1.0" - - def build(self): - pass - - def package(self): - pass - - def package_info(self): - self.cpp_info.components["mylib-component"].set_property("names", "mylib-component-name") - # self.cpp_info.filenames["cmake_find_package"] = "aws-checksums" - # self.cpp_info.filenames["cmake_find_package_multi"] = "aws-checksums" - # self.cpp_info.names["cmake_find_package"] = "AWS" - # self.cpp_info.names["cmake_find_package_multi"] = "AWS" - # self.cpp_info.components["aws-checksums-lib"].names["cmake_find_package"] = "component-aws-checksums" - # self.cpp_info.components["aws-checksums-lib"].names["cmake_find_package_multi"] = "component-aws-checksums" - # self.cpp_info.components["aws-checksums-lib"].libs = ["component-aws-checksums"] - # # self.cpp_info.set_property("names", "default_name_new") - # # self.cpp_info.set_property("filenames", "default_filenames_new") - # # #self.cpp_info.filenames["cmake_find_package"] = "cmake_find_package_old" - # # #self.cpp_info.names["cmake_find_package"] = "cmake_find_package_old" - # # self.cpp_info.components["jander"].set_property("names", "cmake_find_package_new") - # # self.cpp_info.components["jander"].names["cmake_find_package"] = "cmake_find_package_component_old" - """) - client.save({"conanfile.py": conanfile}) - client.run('create .') - conanfile = textwrap.dedent(""" - from conans import ConanFile, CMake - - - class ConanPKG(ConanFile): - name = "conanpkg" - version = "1.0" - generators = "cmake_find_package" - requires = "mylib/1.0" - - def build(self): - pass - - def package(self): - pass - - def package_info(self): - pass - """) - client.save({"conanfile.py": conanfile}) - client.run('install .') - print("sdadas") + client.current_folder = "/Users/carlos/Documents/developer/conan-develop/conan-center-index/recipes/chipmunk2d" + client.run('export all chipmunk2d/7.0.3@') + client.run('install all/test_package --build=missing') + # + # conanfile = textwrap.dedent(""" + # from conans import ConanFile + # class Pkg(ConanFile): + # name = "mylib" + # version = "1.0" + # + # def build(self): + # pass + # + # def package(self): + # pass + # + # def package_info(self): + # #self.cpp_info.components["mylib-component"].set_property("names", "mylib-component-name") + # self.cpp_info.set_property("names", "mylib-component-name") + # # self.cpp_info.filenames["cmake_find_package"] = "aws-checksums" + # # self.cpp_info.filenames["cmake_find_package_multi"] = "aws-checksums" + # # self.cpp_info.names["cmake_find_package"] = "AWS" + # # self.cpp_info.names["cmake_find_package_multi"] = "AWS" + # # self.cpp_info.components["aws-checksums-lib"].names["cmake_find_package"] = "component-aws-checksums" + # # self.cpp_info.components["aws-checksums-lib"].names["cmake_find_package_multi"] = "component-aws-checksums" + # # self.cpp_info.components["aws-checksums-lib"].libs = ["component-aws-checksums"] + # # # self.cpp_info.set_property("names", "default_name_new") + # # # self.cpp_info.set_property("filenames", "default_filenames_new") + # # # #self.cpp_info.filenames["cmake_find_package"] = "cmake_find_package_old" + # # # #self.cpp_info.names["cmake_find_package"] = "cmake_find_package_old" + # # # self.cpp_info.components["jander"].set_property("names", "cmake_find_package_new") + # # # self.cpp_info.components["jander"].names["cmake_find_package"] = "cmake_find_package_component_old" + # """) + # client.save({"conanfile.py": conanfile}) + # client.run('export .') + # conanfile = textwrap.dedent(""" + # from conans import ConanFile, CMake + # + # + # class ConanPKG(ConanFile): + # name = "conanpkg" + # version = "1.0" + # generators = "cmake", "cmake_find_package", "node_gyp" + # requires = "mylib/1.0" + # + # def build(self): + # pass + # + # def package(self): + # pass + # + # def package_info(self): + # pass + # """) + # client.save({"conanfile.py": conanfile}) + # client.run("config install /Users/carlos/.conan/generators/gyp-generator.py -tf generators") + # client.run('install .') + # print("sdadas") From c0f64321418d2ee3b329958710c593686e2b2ea6 Mon Sep 17 00:00:00 2001 From: czoido Date: Mon, 29 Mar 2021 09:42:57 +0200 Subject: [PATCH 08/59] fix --- conans/client/generators/cmake_find_package.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/conans/client/generators/cmake_find_package.py b/conans/client/generators/cmake_find_package.py index cb435a53e4b..3295959e25a 100644 --- a/conans/client/generators/cmake_find_package.py +++ b/conans/client/generators/cmake_find_package.py @@ -229,8 +229,8 @@ def _get_property(cls, obj, property_name, generator=None): def content(self): ret = {} for pkg_name, cpp_info in self.deps_build_info.dependencies: - pkg_filename = self._get_name(cpp_info) - pkg_findname = self._get_filename(cpp_info) + pkg_filename = self._get_filename(cpp_info) + pkg_findname = self._get_name(cpp_info) ret["Find%s.cmake" % pkg_filename] = self._find_for_dep( pkg_name=pkg_name, pkg_findname=pkg_findname, From 3f93a30c81a3eef3853f605cb2a3a02299a3ca96 Mon Sep 17 00:00:00 2001 From: czoido Date: Mon, 29 Mar 2021 12:36:04 +0200 Subject: [PATCH 09/59] wip --- .../cpp_info_set_properties_test.py | 95 +++++++++++++++++++ .../integration/generators/generators_test.py | 63 ------------ 2 files changed, 95 insertions(+), 63 deletions(-) create mode 100644 conans/test/functional/generators/cpp_info_set_properties_test.py diff --git a/conans/test/functional/generators/cpp_info_set_properties_test.py b/conans/test/functional/generators/cpp_info_set_properties_test.py new file mode 100644 index 00000000000..0c421423464 --- /dev/null +++ b/conans/test/functional/generators/cpp_info_set_properties_test.py @@ -0,0 +1,95 @@ +import os +import textwrap + +import pytest + +from conans.test.utils.tools import TestClient + + +@pytest.fixture(scope="module") +def setup_client(): + client = TestClient() + custom_generator = textwrap.dedent(""" + from conans.model import Generator + from conans import ConanFile + from conans.model.conan_generator import GeneratorComponentsMixin + import textwrap + import os + + class custom_generator(GeneratorComponentsMixin, Generator): + @property + def filename(self): + return "my-generator.txt" + + def _get_components(self, pkg_name, cpp_info): + components = super(custom_generator, self)._get_components(pkg_name, cpp_info) + ret = [] + for comp_genname, comp, comp_requires_gennames in components: + ret.append("{}:{}".format(comp.name, comp_genname)) + return ret + + @property + def content(self): + info = [] + for pkg_name, cpp_info in self.deps_build_info.dependencies: + info.extend(self._get_components(pkg_name, cpp_info)) + return os.linesep.join(info) + """) + client.save({"custom_generator.py": custom_generator}) + client.run("config install custom_generator.py -tf generators") + + mypkg = textwrap.dedent(""" + import os + from conans import ConanFile, CMake, tools + class MyPkg(ConanFile): + name = "mypkg" + version = "1.0" + settings = "os", "compiler", "build_type", "arch" + def package_info(self): + self.cpp_info.components["mycomponent"].libs = ["mycomponent-lib"] + self.cpp_info.components["mycomponent"].set_property("names", "mycomponent-name") + """) + + client.save({"mypkg.py": mypkg}) + client.run("create mypkg.py") + + consumer = textwrap.dedent(""" + from conans import ConanFile, CMake + class Consumer(ConanFile): + name = "consumer" + version = "1.0" + generators = "cmake", "cmake_find_package", "custom_generator" + requires = "mypkg/1.0" + """) + client.save({"consumer.py": consumer}) + return client + + +def test_same_results(setup_client): + client = setup_client + client.run("install consumer.py --build missing") + properties_find_package = os.path.join(client.current_folder, "Findmypkg.cmake") + properties_find_package_content = open(properties_find_package).read() + mypkg = textwrap.dedent(""" + import os + from conans import ConanFile, CMake, tools + class MyPkg(ConanFile): + name = "mypkg" + version = "1.0" + settings = "os", "compiler", "build_type", "arch" + def package_info(self): + self.cpp_info.components["mycomponent"].libs = ["mycomponent-lib"] + self.cpp_info.components["mycomponent"].names["cmake_find_package"] = "mycomponent-name" + """) + client.save({"mypkg.py": mypkg}) + client.run("create mypkg.py") + client.run("install consumer.py") + normal_find_package = os.path.join(client.current_folder, "Findmypkg.cmake") + normal_find_package_content = open(normal_find_package).read() + assert properties_find_package_content == normal_find_package_content + + +@pytest.mark.tool_compiler +@pytest.mark.tool_cmake +def test_custom_generator_access_properties(setup_client): + client = setup_client() diff --git a/conans/test/integration/generators/generators_test.py b/conans/test/integration/generators/generators_test.py index c5c3c55f868..c938eca7014 100644 --- a/conans/test/integration/generators/generators_test.py +++ b/conans/test/integration/generators/generators_test.py @@ -179,66 +179,3 @@ def configure(self): client.run('install . -s os=Windows -s compiler="Visual Studio" -s compiler.version=15' ' -s compiler.runtime=MD -g cmake') self.assertIn("conanfile.py: Generator 'msbuild' calling 'generate()'", client.out) - - def test_misc(self): - client = TestClient() - client.run("config install /Users/carlos/.conan/generators/gyp-generator.py -tf generators") - client.cache_folder = "/private/var/folders/6s/l9c3n5696gvg7qm3v7ms78lc0000gq/T/tmp3sy3m2zqconans" - client.current_folder = "/Users/carlos/Documents/developer/conan-develop/conan-center-index/recipes/chipmunk2d" - client.run('export all chipmunk2d/7.0.3@') - client.run('install all/test_package --build=missing') - # - # conanfile = textwrap.dedent(""" - # from conans import ConanFile - # class Pkg(ConanFile): - # name = "mylib" - # version = "1.0" - # - # def build(self): - # pass - # - # def package(self): - # pass - # - # def package_info(self): - # #self.cpp_info.components["mylib-component"].set_property("names", "mylib-component-name") - # self.cpp_info.set_property("names", "mylib-component-name") - # # self.cpp_info.filenames["cmake_find_package"] = "aws-checksums" - # # self.cpp_info.filenames["cmake_find_package_multi"] = "aws-checksums" - # # self.cpp_info.names["cmake_find_package"] = "AWS" - # # self.cpp_info.names["cmake_find_package_multi"] = "AWS" - # # self.cpp_info.components["aws-checksums-lib"].names["cmake_find_package"] = "component-aws-checksums" - # # self.cpp_info.components["aws-checksums-lib"].names["cmake_find_package_multi"] = "component-aws-checksums" - # # self.cpp_info.components["aws-checksums-lib"].libs = ["component-aws-checksums"] - # # # self.cpp_info.set_property("names", "default_name_new") - # # # self.cpp_info.set_property("filenames", "default_filenames_new") - # # # #self.cpp_info.filenames["cmake_find_package"] = "cmake_find_package_old" - # # # #self.cpp_info.names["cmake_find_package"] = "cmake_find_package_old" - # # # self.cpp_info.components["jander"].set_property("names", "cmake_find_package_new") - # # # self.cpp_info.components["jander"].names["cmake_find_package"] = "cmake_find_package_component_old" - # """) - # client.save({"conanfile.py": conanfile}) - # client.run('export .') - # conanfile = textwrap.dedent(""" - # from conans import ConanFile, CMake - # - # - # class ConanPKG(ConanFile): - # name = "conanpkg" - # version = "1.0" - # generators = "cmake", "cmake_find_package", "node_gyp" - # requires = "mylib/1.0" - # - # def build(self): - # pass - # - # def package(self): - # pass - # - # def package_info(self): - # pass - # """) - # client.save({"conanfile.py": conanfile}) - # client.run("config install /Users/carlos/.conan/generators/gyp-generator.py -tf generators") - # client.run('install .') - # print("sdadas") From e8f3c6f4079744945827eb33132bf6e6bca9c111 Mon Sep 17 00:00:00 2001 From: czoido Date: Mon, 29 Mar 2021 16:13:40 +0200 Subject: [PATCH 10/59] wip --- conans/model/build_info.py | 6 ++ .../cpp_info_set_properties_test.py | 93 ++++++++++++++----- 2 files changed, 76 insertions(+), 23 deletions(-) diff --git a/conans/model/build_info.py b/conans/model/build_info.py index e5feb97b479..7c11dc0e986 100644 --- a/conans/model/build_info.py +++ b/conans/model/build_info.py @@ -232,6 +232,12 @@ def get_property(self, property_name, generator=None): #return self._generator_properties.get("conan_default_generators_value").get(property_name) def update_properties(self): + for _, component in self.components.items(): + for generator, value in component.names.items(): + component.set_property("names", value, generator=generator) + for generator, value in component.filenames.items(): + component.set_property("filenames", value, generator=generator) + for generator, value in self.names.items(): self.set_property("names", value, generator=generator) for generator, value in self.filenames.items(): diff --git a/conans/test/functional/generators/cpp_info_set_properties_test.py b/conans/test/functional/generators/cpp_info_set_properties_test.py index 0c421423464..03982620789 100644 --- a/conans/test/functional/generators/cpp_info_set_properties_test.py +++ b/conans/test/functional/generators/cpp_info_set_properties_test.py @@ -3,6 +3,7 @@ import pytest +from conans.test.assets.genconanfile import GenConanfile from conans.test.utils.tools import TestClient @@ -17,6 +18,7 @@ def setup_client(): import os class custom_generator(GeneratorComponentsMixin, Generator): + name = "custom_generator" @property def filename(self): return "my-generator.txt" @@ -32,64 +34,109 @@ def _get_components(self, pkg_name, cpp_info): def content(self): info = [] for pkg_name, cpp_info in self.deps_build_info.dependencies: + info.append("{}:{}".format(pkg_name, self._get_name(cpp_info))) info.extend(self._get_components(pkg_name, cpp_info)) return os.linesep.join(info) """) client.save({"custom_generator.py": custom_generator}) client.run("config install custom_generator.py -tf generators") + client.save({"consumer.py": GenConanfile("consumer", "1.0").with_requires("mypkg/1.0"). + with_generator("custom_generator").with_generator("cmake_find_package")}) + return client + + +@pytest.mark.tool_cmake +def test_same_results_components(setup_client): + client = setup_client mypkg = textwrap.dedent(""" import os from conans import ConanFile, CMake, tools class MyPkg(ConanFile): name = "mypkg" version = "1.0" - settings = "os", "compiler", "build_type", "arch" def package_info(self): self.cpp_info.components["mycomponent"].libs = ["mycomponent-lib"] self.cpp_info.components["mycomponent"].set_property("names", "mycomponent-name") """) client.save({"mypkg.py": mypkg}) - client.run("create mypkg.py") + client.run("export mypkg.py") - consumer = textwrap.dedent(""" - from conans import ConanFile, CMake - class Consumer(ConanFile): - name = "consumer" - version = "1.0" - generators = "cmake", "cmake_find_package", "custom_generator" - requires = "mypkg/1.0" - """) - client.save({"consumer.py": consumer}) - return client + client.run("install consumer.py --build missing") + with open(os.path.join(client.current_folder, "my-generator.txt")) as custom_gen_file: + assert "mycomponent:mycomponent-name" in custom_gen_file.read() + + with open(os.path.join(client.current_folder, "Findmypkg.cmake")) as properties_package_file: + properties_find_package_content = properties_package_file.read() -def test_same_results(setup_client): - client = setup_client - client.run("install consumer.py --build missing") - properties_find_package = os.path.join(client.current_folder, "Findmypkg.cmake") - properties_find_package_content = open(properties_find_package).read() mypkg = textwrap.dedent(""" import os from conans import ConanFile, CMake, tools class MyPkg(ConanFile): name = "mypkg" version = "1.0" - settings = "os", "compiler", "build_type", "arch" def package_info(self): self.cpp_info.components["mycomponent"].libs = ["mycomponent-lib"] self.cpp_info.components["mycomponent"].names["cmake_find_package"] = "mycomponent-name" + self.cpp_info.components["mycomponent"].names["custom_generator"] = "mycomponent-name" """) client.save({"mypkg.py": mypkg}) client.run("create mypkg.py") client.run("install consumer.py") - normal_find_package = os.path.join(client.current_folder, "Findmypkg.cmake") - normal_find_package_content = open(normal_find_package).read() + + with open(os.path.join(client.current_folder, "my-generator.txt")) as custom_gen_file: + assert "mycomponent:mycomponent-name" in custom_gen_file.read() + + with open(os.path.join(client.current_folder, "Findmypkg.cmake")) as find_package_file: + normal_find_package_content = find_package_file.read() + assert properties_find_package_content == normal_find_package_content -@pytest.mark.tool_compiler @pytest.mark.tool_cmake -def test_custom_generator_access_properties(setup_client): - client = setup_client() +def test_same_results_without_components(setup_client): + client = setup_client + mypkg = textwrap.dedent(""" + import os + from conans import ConanFile, CMake, tools + class MyPkg(ConanFile): + name = "mypkg" + version = "1.0" + def package_info(self): + self.cpp_info.set_property("names", "mypkg-name") + """) + + client.save({"mypkg.py": mypkg}) + client.run("export mypkg.py") + + client.run("install consumer.py --build missing") + + with open(os.path.join(client.current_folder, "my-generator.txt")) as custom_gen_file: + assert "mypkg:mypkg-name" in custom_gen_file.read() + + with open(os.path.join(client.current_folder, "Findmypkg.cmake")) as properties_package_file: + properties_find_package_content = properties_package_file.read() + + mypkg = textwrap.dedent(""" + import os + from conans import ConanFile, CMake, tools + class MyPkg(ConanFile): + name = "mypkg" + version = "1.0" + def package_info(self): + self.cpp_info.names["cmake_find_package"] = "mypkg-name" + self.cpp_info.names["custom_generator"] = "mypkg-name" + """) + client.save({"mypkg.py": mypkg}) + client.run("create mypkg.py") + client.run("install consumer.py") + + with open(os.path.join(client.current_folder, "my-generator.txt")) as custom_gen_file: + assert "mypkg:mypkg-name" in custom_gen_file.read() + + with open(os.path.join(client.current_folder, "Findmypkg.cmake")) as find_package_file: + normal_find_package_content = find_package_file.read() + + assert properties_find_package_content == normal_find_package_content From 6183b0a13edbb22077266a6c4acb138277bbbce9 Mon Sep 17 00:00:00 2001 From: czoido Date: Mon, 29 Mar 2021 17:18:18 +0200 Subject: [PATCH 11/59] wip --- .../client/generators/cmake_find_package.py | 2 +- conans/client/installer.py | 2 +- conans/model/build_info.py | 20 +++++++++---------- ...cpp_info_set_generator_properties_test.py} | 4 ++-- 4 files changed, 13 insertions(+), 15 deletions(-) rename conans/test/functional/generators/{cpp_info_set_properties_test.py => cpp_info_set_generator_properties_test.py} (96%) diff --git a/conans/client/generators/cmake_find_package.py b/conans/client/generators/cmake_find_package.py index 3295959e25a..be305dac2be 100644 --- a/conans/client/generators/cmake_find_package.py +++ b/conans/client/generators/cmake_find_package.py @@ -223,7 +223,7 @@ def _get_filename(cls, obj): @classmethod def _get_property(cls, obj, property_name, generator=None): - return obj.get_property(property_name, generator) + return obj.get_generator_property(property_name, generator) @property def content(self): diff --git a/conans/client/installer.py b/conans/client/installer.py index b1a191afa81..b5f89ca6ff5 100644 --- a/conans/client/installer.py +++ b/conans/client/installer.py @@ -637,7 +637,7 @@ def _call_package_info(self, conanfile, package_folder, ref): conanfile.name, conanfile.requires) except ConanException as e: raise ConanException("%s package_info(): %s" % (str(conanfile), e)) - conanfile.cpp_info.update_properties() + conanfile.cpp_info.update_generator_properties() conanfile._conan_dep_cpp_info = DepCppInfo(conanfile.cpp_info) self._hook_manager.execute("post_package_info", conanfile=conanfile, reference=ref) diff --git a/conans/model/build_info.py b/conans/model/build_info.py index 7c11dc0e986..4f8206c6f32 100644 --- a/conans/model/build_info.py +++ b/conans/model/build_info.py @@ -210,7 +210,7 @@ def name(self): def name(self, value): self._name = value - def set_property(self, property_name, value, generator=None): + def set_generator_property(self, property_name, value, generator=None): generator = generator or "conan_default_generators_value" gen_dict = self._generator_properties.get(generator) if gen_dict: @@ -218,7 +218,7 @@ def set_property(self, property_name, value, generator=None): else: self._generator_properties.update({generator: {property_name: value}}) - def get_property(self, property_name, generator=None): + def get_generator_property(self, property_name, generator=None): generator = generator or "conan_default_generators_value" try: gen_dict = self._generator_properties.get(generator) @@ -228,26 +228,24 @@ def get_property(self, property_name, generator=None): return self._generator_properties.get("conan_default_generators_value").get(property_name) except KeyError: return None - # fall back in the default or throw an error ? - #return self._generator_properties.get("conan_default_generators_value").get(property_name) - def update_properties(self): + def update_generator_properties(self): for _, component in self.components.items(): for generator, value in component.names.items(): - component.set_property("names", value, generator=generator) + component.set_generator_property("names", value, generator=generator) for generator, value in component.filenames.items(): - component.set_property("filenames", value, generator=generator) + component.set_generator_property("filenames", value, generator=generator) for generator, value in self.names.items(): - self.set_property("names", value, generator=generator) + self.set_generator_property("names", value, generator=generator) for generator, value in self.filenames.items(): - self.set_property("filenames", value, generator=generator) + self.set_generator_property("filenames", value, generator=generator) def get_name(self, generator=None): - return self.get_property("names", generator) or self._name + return self.get_generator_property("names", generator) or self._name def get_filename(self, generator=None): - return self.get_property("filenames", generator) or self._name + return self.get_generator_property("filenames", generator) or self._name # Compatibility for 'cppflags' (old style property to allow decoration) def get_cppflags(self): diff --git a/conans/test/functional/generators/cpp_info_set_properties_test.py b/conans/test/functional/generators/cpp_info_set_generator_properties_test.py similarity index 96% rename from conans/test/functional/generators/cpp_info_set_properties_test.py rename to conans/test/functional/generators/cpp_info_set_generator_properties_test.py index 03982620789..a1bae23662b 100644 --- a/conans/test/functional/generators/cpp_info_set_properties_test.py +++ b/conans/test/functional/generators/cpp_info_set_generator_properties_test.py @@ -57,7 +57,7 @@ class MyPkg(ConanFile): version = "1.0" def package_info(self): self.cpp_info.components["mycomponent"].libs = ["mycomponent-lib"] - self.cpp_info.components["mycomponent"].set_property("names", "mycomponent-name") + self.cpp_info.components["mycomponent"].set_generator_property("names", "mycomponent-name") """) client.save({"mypkg.py": mypkg}) @@ -105,7 +105,7 @@ class MyPkg(ConanFile): name = "mypkg" version = "1.0" def package_info(self): - self.cpp_info.set_property("names", "mypkg-name") + self.cpp_info.set_generator_property("names", "mypkg-name") """) client.save({"mypkg.py": mypkg}) From 216d829cb38b243e43a647dabc67de3b3384cd17 Mon Sep 17 00:00:00 2001 From: czoido Date: Mon, 29 Mar 2021 17:31:07 +0200 Subject: [PATCH 12/59] wip --- .../generators/cpp_info_set_generator_properties_test.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conans/test/functional/generators/cpp_info_set_generator_properties_test.py b/conans/test/functional/generators/cpp_info_set_generator_properties_test.py index a1bae23662b..d26b8e5ba00 100644 --- a/conans/test/functional/generators/cpp_info_set_generator_properties_test.py +++ b/conans/test/functional/generators/cpp_info_set_generator_properties_test.py @@ -34,7 +34,7 @@ def _get_components(self, pkg_name, cpp_info): def content(self): info = [] for pkg_name, cpp_info in self.deps_build_info.dependencies: - info.append("{}:{}".format(pkg_name, self._get_name(cpp_info))) + info.append("{}:{}".format(pkg_name, cpp_info.get_generator_property("names", self.name))) info.extend(self._get_components(pkg_name, cpp_info)) return os.linesep.join(info) """) From 40b33f1c94af35291fa990303b6af0db174cd6fb Mon Sep 17 00:00:00 2001 From: czoido Date: Mon, 29 Mar 2021 18:07:30 +0200 Subject: [PATCH 13/59] remove unused --- conans/client/generators/cmake_find_package.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/conans/client/generators/cmake_find_package.py b/conans/client/generators/cmake_find_package.py index be305dac2be..d759759dc98 100644 --- a/conans/client/generators/cmake_find_package.py +++ b/conans/client/generators/cmake_find_package.py @@ -221,10 +221,6 @@ def filename(self): def _get_filename(cls, obj): return obj.get_filename(cls.name) - @classmethod - def _get_property(cls, obj, property_name, generator=None): - return obj.get_generator_property(property_name, generator) - @property def content(self): ret = {} From 9838b46084b27ba498d6256544dcfa540124dfad Mon Sep 17 00:00:00 2001 From: czoido Date: Mon, 29 Mar 2021 18:15:00 +0200 Subject: [PATCH 14/59] wip --- conans/client/generators/text.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/conans/client/generators/text.py b/conans/client/generators/text.py index 0fdcb07fb6f..351d716d0a3 100644 --- a/conans/client/generators/text.py +++ b/conans/client/generators/text.py @@ -172,11 +172,11 @@ def _populate_cpp_info(_cpp_info, _data, _rootpath): generatornames = no_config_data.pop("generatornames", []) # can be empty for n in generatornames: gen, value = n.split("=", 1) - dep_cpp_info.names[gen] = value + dep_cpp_info.set_generator_property("names", value, gen) generatorfilenames = no_config_data.pop("generatorfilenames", []) # can be empty for n in generatorfilenames: gen, value = n.split("=", 1) - dep_cpp_info.filenames[gen] = value + dep_cpp_info.set_generator_property("filenames", value, gen) dep_cpp_info.sysroot = no_config_data.pop('sysroot', [""])[0] _populate_cpp_info(dep_cpp_info, no_config_data, rootpath) From 9d820a8722c256a99fb5cf9f2ed12bcea2b5e60e Mon Sep 17 00:00:00 2001 From: czoido Date: Mon, 29 Mar 2021 18:26:11 +0200 Subject: [PATCH 15/59] wip --- conans/test/unittests/client/generators/cmake_paths_test.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conans/test/unittests/client/generators/cmake_paths_test.py b/conans/test/unittests/client/generators/cmake_paths_test.py index 82b11c56de1..fd4bd54cd2f 100644 --- a/conans/test/unittests/client/generators/cmake_paths_test.py +++ b/conans/test/unittests/client/generators/cmake_paths_test.py @@ -75,7 +75,7 @@ def test_cpp_info_names(self): tmp = temp_folder() cpp_info = CppInfo("pkg_reference_name", tmp) cpp_info.name = "PkgCMakeName" - cpp_info.names["cmake_paths"] = "MyCMakePathsPkgName" + cpp_info.set_generator_property("names", "MyCMakePathsPkgName", "cmake_paths") conanfile.deps_cpp_info.add("pkg_reference_name", cpp_info) generator = CMakePathsGenerator(conanfile) self.assertIn('set(CONAN_MYCMAKEPATHSPKGNAME_ROOT', generator.content) From dcac203ff41e398d60644eee786acb2f3b55f5cf Mon Sep 17 00:00:00 2001 From: czoido Date: Mon, 29 Mar 2021 18:40:16 +0200 Subject: [PATCH 16/59] wip --- conans/model/build_info.py | 2 ++ conans/test/unittests/client/generators/cmake_test.py | 2 ++ 2 files changed, 4 insertions(+) diff --git a/conans/model/build_info.py b/conans/model/build_info.py index 4f8206c6f32..dfb72931a00 100644 --- a/conans/model/build_info.py +++ b/conans/model/build_info.py @@ -233,11 +233,13 @@ def update_generator_properties(self): for _, component in self.components.items(): for generator, value in component.names.items(): component.set_generator_property("names", value, generator=generator) + component.set_generator_property("filenames", value, generator=generator) for generator, value in component.filenames.items(): component.set_generator_property("filenames", value, generator=generator) for generator, value in self.names.items(): self.set_generator_property("names", value, generator=generator) + self.set_generator_property("filenames", value, generator=generator) for generator, value in self.filenames.items(): self.set_generator_property("filenames", value, generator=generator) diff --git a/conans/test/unittests/client/generators/cmake_test.py b/conans/test/unittests/client/generators/cmake_test.py index 08e16b53bb5..d18da876e17 100644 --- a/conans/test/unittests/client/generators/cmake_test.py +++ b/conans/test/unittests/client/generators/cmake_test.py @@ -479,6 +479,7 @@ def setUp(self): cpp_info.names["cmake_multi"] = "MyCMakeMultiName" cpp_info.names["cmake_find_package"] = "MyCMakeFindPackageName" cpp_info.names["cmake_find_package_multi"] = "MyCMakeFindPackageMultiName" + cpp_info.update_generator_properties() self.conanfile.deps_cpp_info.add(ref.name, cpp_info) ref = ConanFileReference.loads("my_pkg2/0.1@lasote/stables") cpp_info = CppInfo(ref.name, "dummy_root_folder2") @@ -488,6 +489,7 @@ def setUp(self): cpp_info.names["cmake_find_package"] = "MyCMakeFindPackageName2" cpp_info.names["cmake_find_package_multi"] = "MyCMakeFindPackageMultiName2" cpp_info.public_deps = ["my_pkg"] + cpp_info.update_generator_properties() self.conanfile.deps_cpp_info.add(ref.name, cpp_info) def test_cmake(self): From e7eee31400dd6ff4e781213ea18cb05c57d6c1c3 Mon Sep 17 00:00:00 2001 From: czoido Date: Mon, 29 Mar 2021 18:55:30 +0200 Subject: [PATCH 17/59] wip --- conans/test/unittests/model/build_info_test.py | 1 + 1 file changed, 1 insertion(+) diff --git a/conans/test/unittests/model/build_info_test.py b/conans/test/unittests/model/build_info_test.py index 54b72e85bd9..5921fc88638 100644 --- a/conans/test/unittests/model/build_info_test.py +++ b/conans/test/unittests/model/build_info_test.py @@ -233,6 +233,7 @@ def test_cpp_info_name(self): info = CppInfo("myname", folder) info.name = "MyName" info.names["my_generator"] = "MyNameForMyGenerator" + info.update_generator_properties() deps_cpp_info = DepsCppInfo() deps_cpp_info.add("myname", DepCppInfo(info)) self.assertIn("MyName", deps_cpp_info["myname"].get_name("my_undefined_generator")) From 77dce8ff8da58cef897fa163741c481e4c012fbb Mon Sep 17 00:00:00 2001 From: czoido Date: Mon, 29 Mar 2021 20:09:22 +0200 Subject: [PATCH 18/59] wip --- conans/client/generators/text.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/conans/client/generators/text.py b/conans/client/generators/text.py index 351d716d0a3..0fdcb07fb6f 100644 --- a/conans/client/generators/text.py +++ b/conans/client/generators/text.py @@ -172,11 +172,11 @@ def _populate_cpp_info(_cpp_info, _data, _rootpath): generatornames = no_config_data.pop("generatornames", []) # can be empty for n in generatornames: gen, value = n.split("=", 1) - dep_cpp_info.set_generator_property("names", value, gen) + dep_cpp_info.names[gen] = value generatorfilenames = no_config_data.pop("generatorfilenames", []) # can be empty for n in generatorfilenames: gen, value = n.split("=", 1) - dep_cpp_info.set_generator_property("filenames", value, gen) + dep_cpp_info.filenames[gen] = value dep_cpp_info.sysroot = no_config_data.pop('sysroot', [""])[0] _populate_cpp_info(dep_cpp_info, no_config_data, rootpath) From 4c6c42b7fe908e4524991c8c4ba53bd67d0513c8 Mon Sep 17 00:00:00 2001 From: czoido Date: Mon, 29 Mar 2021 20:17:45 +0200 Subject: [PATCH 19/59] minor changes --- conans/test/unittests/client/generators/cmake_paths_test.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/conans/test/unittests/client/generators/cmake_paths_test.py b/conans/test/unittests/client/generators/cmake_paths_test.py index fd4bd54cd2f..4af448e9929 100644 --- a/conans/test/unittests/client/generators/cmake_paths_test.py +++ b/conans/test/unittests/client/generators/cmake_paths_test.py @@ -75,7 +75,8 @@ def test_cpp_info_names(self): tmp = temp_folder() cpp_info = CppInfo("pkg_reference_name", tmp) cpp_info.name = "PkgCMakeName" - cpp_info.set_generator_property("names", "MyCMakePathsPkgName", "cmake_paths") + cpp_info.names["cmake_paths"] = "MyCMakePathsPkgName" + cpp_info.update_generator_properties() conanfile.deps_cpp_info.add("pkg_reference_name", cpp_info) generator = CMakePathsGenerator(conanfile) self.assertIn('set(CONAN_MYCMAKEPATHSPKGNAME_ROOT', generator.content) From 39a31db156a2ae8edb776f17e0d7a77d980bab16 Mon Sep 17 00:00:00 2001 From: czoido Date: Mon, 29 Mar 2021 20:33:45 +0200 Subject: [PATCH 20/59] wip --- conans/test/unittests/client/generators/txt/test_dump_load.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/conans/test/unittests/client/generators/txt/test_dump_load.py b/conans/test/unittests/client/generators/txt/test_dump_load.py index 4d695756a53..d57e228826b 100644 --- a/conans/test/unittests/client/generators/txt/test_dump_load.py +++ b/conans/test/unittests/client/generators/txt/test_dump_load.py @@ -20,13 +20,14 @@ def test_names_per_generator(self): cpp_info.names["txt"] = "txt_name" cpp_info.names["cmake_find_package"] = "SpecialName" cpp_info.filenames["cmake_find_package"] = "SpecialFileName" + cpp_info.update_generator_properties() conanfile = ConanFile(Mock(), None) conanfile.initialize(Settings({}), EnvValues()) conanfile.deps_cpp_info.add("pkg_name", DepCppInfo(cpp_info)) content = TXTGenerator(conanfile).content parsed_deps_cpp_info, _, _, _ = TXTGenerator.loads(content, filter_empty=False) - parsed_cpp_info = parsed_deps_cpp_info["pkg_name"] + parsed_cpp_info.update_generator_properties() self.assertEqual(parsed_cpp_info.get_name("txt"), "txt_name") self.assertEqual(parsed_cpp_info.get_name("cmake_find_package"), "SpecialName") self.assertEqual(parsed_cpp_info.get_filename("cmake_find_package"), "SpecialFileName") From 3bb2de4c4463d5c00e2a20eb1a8eac8e2908c067 Mon Sep 17 00:00:00 2001 From: czoido Date: Tue, 30 Mar 2021 14:08:06 +0200 Subject: [PATCH 21/59] fix local flow --- conans/client/generators/text.py | 1 + 1 file changed, 1 insertion(+) diff --git a/conans/client/generators/text.py b/conans/client/generators/text.py index 0fdcb07fb6f..f2af763c4dc 100644 --- a/conans/client/generators/text.py +++ b/conans/client/generators/text.py @@ -185,6 +185,7 @@ def _populate_cpp_info(_cpp_info, _data, _rootpath): cpp_info_config = getattr(dep_cpp_info, config) _populate_cpp_info(cpp_info_config, config_data, rootpath) + dep_cpp_info.update_generator_properties() # Add to the dependecy list deps_cpp_info.add(dep, DepCppInfo(dep_cpp_info)) From 919b5d24c251dc3ad0574b0ce5a61ab592ce78a5 Mon Sep 17 00:00:00 2001 From: czoido Date: Tue, 30 Mar 2021 15:26:26 +0200 Subject: [PATCH 22/59] wip --- conans/test/unittests/client/generators/txt/test_dump_load.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/conans/test/unittests/client/generators/txt/test_dump_load.py b/conans/test/unittests/client/generators/txt/test_dump_load.py index d57e228826b..550587666b0 100644 --- a/conans/test/unittests/client/generators/txt/test_dump_load.py +++ b/conans/test/unittests/client/generators/txt/test_dump_load.py @@ -46,6 +46,7 @@ def test_idempotent(self): cpp_info.cxxflags = ["-cxxflag_parent"] cpp_info.includedirs = ["mypkg1/include"] cpp_info.filter_empty = False + cpp_info.update_generator_properties() conanfile.deps_cpp_info.add(ref.name, cpp_info) ref = ConanFileReference.loads("MyPkg2/0.1@lasote/stables") @@ -53,6 +54,7 @@ def test_idempotent(self): cpp_info.defines = ["MYDEFINE2"] cpp_info.cxxflags = ["-cxxflag_dep"] cpp_info.filter_empty = False + cpp_info.update_generator_properties() conanfile.deps_cpp_info.add(ref.name, cpp_info) # Add env_info From 90e6299013ccf0f2c843b1f19b1a9a8a0abb96b2 Mon Sep 17 00:00:00 2001 From: czoido Date: Wed, 31 Mar 2021 06:39:19 +0200 Subject: [PATCH 23/59] simplify code --- conans/model/build_info.py | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/conans/model/build_info.py b/conans/model/build_info.py index dfb72931a00..61d2e371759 100644 --- a/conans/model/build_info.py +++ b/conans/model/build_info.py @@ -220,14 +220,12 @@ def set_generator_property(self, property_name, value, generator=None): def get_generator_property(self, property_name, generator=None): generator = generator or "conan_default_generators_value" - try: - gen_dict = self._generator_properties.get(generator) - if gen_dict: - return gen_dict.get(property_name) - elif self._generator_properties.get("conan_default_generators_value"): - return self._generator_properties.get("conan_default_generators_value").get(property_name) - except KeyError: - return None + gen_dict = self._generator_properties.get(generator) + if gen_dict: + return gen_dict.get(property_name) + else: + gen_dict = self._generator_properties.get("conan_default_generators_value") + return gen_dict.get(property_name) if gen_dict else None def update_generator_properties(self): for _, component in self.components.items(): From 785cdbe6b5eb0dd65f4ae6bbd0783c90c6382d1a Mon Sep 17 00:00:00 2001 From: czoido Date: Wed, 31 Mar 2021 06:43:45 +0200 Subject: [PATCH 24/59] change update function name --- conans/client/generators/text.py | 2 +- conans/client/installer.py | 2 +- conans/model/build_info.py | 2 +- .../test/unittests/client/generators/cmake_paths_test.py | 2 +- conans/test/unittests/client/generators/cmake_test.py | 4 ++-- .../unittests/client/generators/txt/test_dump_load.py | 8 ++++---- conans/test/unittests/model/build_info_test.py | 2 +- 7 files changed, 11 insertions(+), 11 deletions(-) diff --git a/conans/client/generators/text.py b/conans/client/generators/text.py index f2af763c4dc..285a9ade029 100644 --- a/conans/client/generators/text.py +++ b/conans/client/generators/text.py @@ -185,7 +185,7 @@ def _populate_cpp_info(_cpp_info, _data, _rootpath): cpp_info_config = getattr(dep_cpp_info, config) _populate_cpp_info(cpp_info_config, config_data, rootpath) - dep_cpp_info.update_generator_properties() + dep_cpp_info.translate_cpp_info_generator_properties() # Add to the dependecy list deps_cpp_info.add(dep, DepCppInfo(dep_cpp_info)) diff --git a/conans/client/installer.py b/conans/client/installer.py index b5f89ca6ff5..2cfe3e84708 100644 --- a/conans/client/installer.py +++ b/conans/client/installer.py @@ -637,7 +637,7 @@ def _call_package_info(self, conanfile, package_folder, ref): conanfile.name, conanfile.requires) except ConanException as e: raise ConanException("%s package_info(): %s" % (str(conanfile), e)) - conanfile.cpp_info.update_generator_properties() + conanfile.cpp_info.translate_cpp_info_generator_properties() conanfile._conan_dep_cpp_info = DepCppInfo(conanfile.cpp_info) self._hook_manager.execute("post_package_info", conanfile=conanfile, reference=ref) diff --git a/conans/model/build_info.py b/conans/model/build_info.py index 61d2e371759..8774b823fec 100644 --- a/conans/model/build_info.py +++ b/conans/model/build_info.py @@ -227,7 +227,7 @@ def get_generator_property(self, property_name, generator=None): gen_dict = self._generator_properties.get("conan_default_generators_value") return gen_dict.get(property_name) if gen_dict else None - def update_generator_properties(self): + def translate_cpp_info_generator_properties(self): for _, component in self.components.items(): for generator, value in component.names.items(): component.set_generator_property("names", value, generator=generator) diff --git a/conans/test/unittests/client/generators/cmake_paths_test.py b/conans/test/unittests/client/generators/cmake_paths_test.py index 4af448e9929..0fead59ce27 100644 --- a/conans/test/unittests/client/generators/cmake_paths_test.py +++ b/conans/test/unittests/client/generators/cmake_paths_test.py @@ -76,7 +76,7 @@ def test_cpp_info_names(self): cpp_info = CppInfo("pkg_reference_name", tmp) cpp_info.name = "PkgCMakeName" cpp_info.names["cmake_paths"] = "MyCMakePathsPkgName" - cpp_info.update_generator_properties() + cpp_info.translate_cpp_info_generator_properties() conanfile.deps_cpp_info.add("pkg_reference_name", cpp_info) generator = CMakePathsGenerator(conanfile) self.assertIn('set(CONAN_MYCMAKEPATHSPKGNAME_ROOT', generator.content) diff --git a/conans/test/unittests/client/generators/cmake_test.py b/conans/test/unittests/client/generators/cmake_test.py index d18da876e17..c9f5397ae95 100644 --- a/conans/test/unittests/client/generators/cmake_test.py +++ b/conans/test/unittests/client/generators/cmake_test.py @@ -479,7 +479,7 @@ def setUp(self): cpp_info.names["cmake_multi"] = "MyCMakeMultiName" cpp_info.names["cmake_find_package"] = "MyCMakeFindPackageName" cpp_info.names["cmake_find_package_multi"] = "MyCMakeFindPackageMultiName" - cpp_info.update_generator_properties() + cpp_info.translate_cpp_info_generator_properties() self.conanfile.deps_cpp_info.add(ref.name, cpp_info) ref = ConanFileReference.loads("my_pkg2/0.1@lasote/stables") cpp_info = CppInfo(ref.name, "dummy_root_folder2") @@ -489,7 +489,7 @@ def setUp(self): cpp_info.names["cmake_find_package"] = "MyCMakeFindPackageName2" cpp_info.names["cmake_find_package_multi"] = "MyCMakeFindPackageMultiName2" cpp_info.public_deps = ["my_pkg"] - cpp_info.update_generator_properties() + cpp_info.translate_cpp_info_generator_properties() self.conanfile.deps_cpp_info.add(ref.name, cpp_info) def test_cmake(self): diff --git a/conans/test/unittests/client/generators/txt/test_dump_load.py b/conans/test/unittests/client/generators/txt/test_dump_load.py index 550587666b0..6f75732bae7 100644 --- a/conans/test/unittests/client/generators/txt/test_dump_load.py +++ b/conans/test/unittests/client/generators/txt/test_dump_load.py @@ -20,14 +20,14 @@ def test_names_per_generator(self): cpp_info.names["txt"] = "txt_name" cpp_info.names["cmake_find_package"] = "SpecialName" cpp_info.filenames["cmake_find_package"] = "SpecialFileName" - cpp_info.update_generator_properties() + cpp_info.translate_cpp_info_generator_properties() conanfile = ConanFile(Mock(), None) conanfile.initialize(Settings({}), EnvValues()) conanfile.deps_cpp_info.add("pkg_name", DepCppInfo(cpp_info)) content = TXTGenerator(conanfile).content parsed_deps_cpp_info, _, _, _ = TXTGenerator.loads(content, filter_empty=False) parsed_cpp_info = parsed_deps_cpp_info["pkg_name"] - parsed_cpp_info.update_generator_properties() + parsed_cpp_info.translate_cpp_info_generator_properties() self.assertEqual(parsed_cpp_info.get_name("txt"), "txt_name") self.assertEqual(parsed_cpp_info.get_name("cmake_find_package"), "SpecialName") self.assertEqual(parsed_cpp_info.get_filename("cmake_find_package"), "SpecialFileName") @@ -46,7 +46,7 @@ def test_idempotent(self): cpp_info.cxxflags = ["-cxxflag_parent"] cpp_info.includedirs = ["mypkg1/include"] cpp_info.filter_empty = False - cpp_info.update_generator_properties() + cpp_info.translate_cpp_info_generator_properties() conanfile.deps_cpp_info.add(ref.name, cpp_info) ref = ConanFileReference.loads("MyPkg2/0.1@lasote/stables") @@ -54,7 +54,7 @@ def test_idempotent(self): cpp_info.defines = ["MYDEFINE2"] cpp_info.cxxflags = ["-cxxflag_dep"] cpp_info.filter_empty = False - cpp_info.update_generator_properties() + cpp_info.translate_cpp_info_generator_properties() conanfile.deps_cpp_info.add(ref.name, cpp_info) # Add env_info diff --git a/conans/test/unittests/model/build_info_test.py b/conans/test/unittests/model/build_info_test.py index 5921fc88638..83113db0aca 100644 --- a/conans/test/unittests/model/build_info_test.py +++ b/conans/test/unittests/model/build_info_test.py @@ -233,7 +233,7 @@ def test_cpp_info_name(self): info = CppInfo("myname", folder) info.name = "MyName" info.names["my_generator"] = "MyNameForMyGenerator" - info.update_generator_properties() + info.translate_cpp_info_generator_properties() deps_cpp_info = DepsCppInfo() deps_cpp_info.add("myname", DepCppInfo(info)) self.assertIn("MyName", deps_cpp_info["myname"].get_name("my_undefined_generator")) From ec0475f282a9b18062c9bbbf763e155c6887577d Mon Sep 17 00:00:00 2001 From: czoido Date: Wed, 31 Mar 2021 06:45:21 +0200 Subject: [PATCH 25/59] generalize name --- conans/model/build_info.py | 20 +++++++++---------- .../cpp_info_set_generator_properties_test.py | 6 +++--- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/conans/model/build_info.py b/conans/model/build_info.py index 8774b823fec..50bce32eb29 100644 --- a/conans/model/build_info.py +++ b/conans/model/build_info.py @@ -210,7 +210,7 @@ def name(self): def name(self, value): self._name = value - def set_generator_property(self, property_name, value, generator=None): + def set_property(self, property_name, value, generator=None): generator = generator or "conan_default_generators_value" gen_dict = self._generator_properties.get(generator) if gen_dict: @@ -218,7 +218,7 @@ def set_generator_property(self, property_name, value, generator=None): else: self._generator_properties.update({generator: {property_name: value}}) - def get_generator_property(self, property_name, generator=None): + def get_property(self, property_name, generator=None): generator = generator or "conan_default_generators_value" gen_dict = self._generator_properties.get(generator) if gen_dict: @@ -230,22 +230,22 @@ def get_generator_property(self, property_name, generator=None): def translate_cpp_info_generator_properties(self): for _, component in self.components.items(): for generator, value in component.names.items(): - component.set_generator_property("names", value, generator=generator) - component.set_generator_property("filenames", value, generator=generator) + component.set_property("names", value, generator=generator) + component.set_property("filenames", value, generator=generator) for generator, value in component.filenames.items(): - component.set_generator_property("filenames", value, generator=generator) + component.set_property("filenames", value, generator=generator) for generator, value in self.names.items(): - self.set_generator_property("names", value, generator=generator) - self.set_generator_property("filenames", value, generator=generator) + self.set_property("names", value, generator=generator) + self.set_property("filenames", value, generator=generator) for generator, value in self.filenames.items(): - self.set_generator_property("filenames", value, generator=generator) + self.set_property("filenames", value, generator=generator) def get_name(self, generator=None): - return self.get_generator_property("names", generator) or self._name + return self.get_property("names", generator) or self._name def get_filename(self, generator=None): - return self.get_generator_property("filenames", generator) or self._name + return self.get_property("filenames", generator) or self._name # Compatibility for 'cppflags' (old style property to allow decoration) def get_cppflags(self): diff --git a/conans/test/functional/generators/cpp_info_set_generator_properties_test.py b/conans/test/functional/generators/cpp_info_set_generator_properties_test.py index d26b8e5ba00..30502b64308 100644 --- a/conans/test/functional/generators/cpp_info_set_generator_properties_test.py +++ b/conans/test/functional/generators/cpp_info_set_generator_properties_test.py @@ -34,7 +34,7 @@ def _get_components(self, pkg_name, cpp_info): def content(self): info = [] for pkg_name, cpp_info in self.deps_build_info.dependencies: - info.append("{}:{}".format(pkg_name, cpp_info.get_generator_property("names", self.name))) + info.append("{}:{}".format(pkg_name, cpp_info.get_property("names", self.name))) info.extend(self._get_components(pkg_name, cpp_info)) return os.linesep.join(info) """) @@ -57,7 +57,7 @@ class MyPkg(ConanFile): version = "1.0" def package_info(self): self.cpp_info.components["mycomponent"].libs = ["mycomponent-lib"] - self.cpp_info.components["mycomponent"].set_generator_property("names", "mycomponent-name") + self.cpp_info.components["mycomponent"].set_property("names", "mycomponent-name") """) client.save({"mypkg.py": mypkg}) @@ -105,7 +105,7 @@ class MyPkg(ConanFile): name = "mypkg" version = "1.0" def package_info(self): - self.cpp_info.set_generator_property("names", "mypkg-name") + self.cpp_info.set_property("names", "mypkg-name") """) client.save({"mypkg.py": mypkg}) From 234add72891b571871a91dae3ede0cbbc0b52c31 Mon Sep 17 00:00:00 2001 From: czoido Date: Wed, 31 Mar 2021 12:10:59 +0200 Subject: [PATCH 26/59] start build modules support --- conans/model/build_info.py | 4 ++++ .../cpp_info_set_generator_properties_test.py | 21 +++++++++++++++---- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/conans/model/build_info.py b/conans/model/build_info.py index 50bce32eb29..e9e1a1337a4 100644 --- a/conans/model/build_info.py +++ b/conans/model/build_info.py @@ -234,12 +234,16 @@ def translate_cpp_info_generator_properties(self): component.set_property("filenames", value, generator=generator) for generator, value in component.filenames.items(): component.set_property("filenames", value, generator=generator) + for generator, value in component.build_modules.items(): + component.set_property("build_modules", value, generator=generator) for generator, value in self.names.items(): self.set_property("names", value, generator=generator) self.set_property("filenames", value, generator=generator) for generator, value in self.filenames.items(): self.set_property("filenames", value, generator=generator) + for generator, value in self.build_modules.items(): + self.set_property("build_modules", value, generator=generator) def get_name(self, generator=None): return self.get_property("names", generator) or self._name diff --git a/conans/test/functional/generators/cpp_info_set_generator_properties_test.py b/conans/test/functional/generators/cpp_info_set_generator_properties_test.py index 30502b64308..814bbdae80d 100644 --- a/conans/test/functional/generators/cpp_info_set_generator_properties_test.py +++ b/conans/test/functional/generators/cpp_info_set_generator_properties_test.py @@ -41,8 +41,12 @@ def content(self): client.save({"custom_generator.py": custom_generator}) client.run("config install custom_generator.py -tf generators") + build_module = textwrap.dedent(""" + message("I am a build module") + """) client.save({"consumer.py": GenConanfile("consumer", "1.0").with_requires("mypkg/1.0"). - with_generator("custom_generator").with_generator("cmake_find_package")}) + with_generator("custom_generator").with_generator("cmake_find_package"), + "mypkg_bm.cmake": build_module}) return client @@ -55,16 +59,20 @@ def test_same_results_components(setup_client): class MyPkg(ConanFile): name = "mypkg" version = "1.0" + exports_sources = ["mypkg_bm.cmake"] + def package(self): + self.copy("mypkg_bm.cmake", dst="lib") def package_info(self): self.cpp_info.components["mycomponent"].libs = ["mycomponent-lib"] self.cpp_info.components["mycomponent"].set_property("names", "mycomponent-name") + self.cpp_info.components["mycomponent"].set_property("build_modules", + [os.path.join("lib", + "mypkg_bm.cmake")]) """) client.save({"mypkg.py": mypkg}) client.run("export mypkg.py") - client.run("install consumer.py --build missing") - with open(os.path.join(client.current_folder, "my-generator.txt")) as custom_gen_file: assert "mycomponent:mycomponent-name" in custom_gen_file.read() @@ -77,13 +85,18 @@ def package_info(self): class MyPkg(ConanFile): name = "mypkg" version = "1.0" + exports_sources = ["mypkg_bm.cmake"] + def package(self): + self.copy("mypkg_bm.cmake", dst="lib") def package_info(self): self.cpp_info.components["mycomponent"].libs = ["mycomponent-lib"] self.cpp_info.components["mycomponent"].names["cmake_find_package"] = "mycomponent-name" self.cpp_info.components["mycomponent"].names["custom_generator"] = "mycomponent-name" + self.cpp_info.components["mycomponent"].build_modules["cmake_find_package"].append(os.path.join("lib", + "mypkg_bm.cmake")) """) client.save({"mypkg.py": mypkg}) - client.run("create mypkg.py") + client.run("export mypkg.py") client.run("install consumer.py") with open(os.path.join(client.current_folder, "my-generator.txt")) as custom_gen_file: From 54f497da457ca20c85d5155d3f2dc9763592ca3c Mon Sep 17 00:00:00 2001 From: czoido Date: Wed, 31 Mar 2021 19:35:56 +0200 Subject: [PATCH 27/59] wip --- conans/model/build_info.py | 40 +++++++++++-------- .../cpp_info_set_generator_properties_test.py | 14 ++++++- .../test/unittests/model/build_info_test.py | 3 ++ 3 files changed, 38 insertions(+), 19 deletions(-) diff --git a/conans/model/build_info.py b/conans/model/build_info.py index e9e1a1337a4..4ae651e40a9 100644 --- a/conans/model/build_info.py +++ b/conans/model/build_info.py @@ -150,13 +150,8 @@ def _filter_paths(self, paths): @property def build_modules_paths(self): - if self._build_modules_paths is None: - if isinstance(self.build_modules, list): # FIXME: This should be just a plain dict - conan_v2_error("Use 'self.cpp_info.build_modules[\"\"] = " - "{the_list}' instead".format(the_list=self.build_modules)) - self.build_modules = BuildModulesDict.from_list(self.build_modules) - tmp = dict_to_abs_paths(BuildModulesDict(self.build_modules), self.rootpath) - self._build_modules_paths = tmp + tmp = dict_to_abs_paths(BuildModulesDict(self.get_build_modules()), self.rootpath) + self._build_modules_paths = tmp return self._build_modules_paths @property @@ -221,21 +216,22 @@ def set_property(self, property_name, value, generator=None): def get_property(self, property_name, generator=None): generator = generator or "conan_default_generators_value" gen_dict = self._generator_properties.get(generator) - if gen_dict: + if gen_dict and gen_dict.get(property_name): return gen_dict.get(property_name) else: gen_dict = self._generator_properties.get("conan_default_generators_value") return gen_dict.get(property_name) if gen_dict else None def translate_cpp_info_generator_properties(self): - for _, component in self.components.items(): - for generator, value in component.names.items(): - component.set_property("names", value, generator=generator) - component.set_property("filenames", value, generator=generator) - for generator, value in component.filenames.items(): - component.set_property("filenames", value, generator=generator) - for generator, value in component.build_modules.items(): - component.set_property("build_modules", value, generator=generator) + if isinstance(self, CppInfo): + for _, component in self.components.items(): + for generator, value in component.names.items(): + component.set_property("names", value, generator=generator) + component.set_property("filenames", value, generator=generator) + for generator, value in component.filenames.items(): + component.set_property("filenames", value, generator=generator) + for generator, value in component.build_modules.items(): + component.set_property("build_modules", value, generator=generator) for generator, value in self.names.items(): self.set_property("names", value, generator=generator) @@ -251,6 +247,16 @@ def get_name(self, generator=None): def get_filename(self, generator=None): return self.get_property("filenames", generator) or self._name + def get_build_modules(self, generator=None): + if generator: + values_dict = self._generator_properties.get(generator) + return values_dict if values_dict else {} + ret_dict = {} + for generator, values in self._generator_properties.items(): + if values.get("build_modules"): + ret_dict[generator] = values.get("build_modules") + return ret_dict + # Compatibility for 'cppflags' (old style property to allow decoration) def get_cppflags(self): conan_v2_error("'cpp_info.cppflags' is deprecated, use 'cxxflags' instead") @@ -476,7 +482,7 @@ def merge_lists(seq1, seq2): @property def build_modules_paths(self): - return self.build_modules + return self.get_build_modules() @property def include_paths(self): diff --git a/conans/test/functional/generators/cpp_info_set_generator_properties_test.py b/conans/test/functional/generators/cpp_info_set_generator_properties_test.py index 814bbdae80d..b94b6ba08ac 100644 --- a/conans/test/functional/generators/cpp_info_set_generator_properties_test.py +++ b/conans/test/functional/generators/cpp_info_set_generator_properties_test.py @@ -65,9 +65,10 @@ def package(self): def package_info(self): self.cpp_info.components["mycomponent"].libs = ["mycomponent-lib"] self.cpp_info.components["mycomponent"].set_property("names", "mycomponent-name") + self.cpp_info.components["mycomponent"].set_property("names", "mycomponent-name","custom_generator") self.cpp_info.components["mycomponent"].set_property("build_modules", [os.path.join("lib", - "mypkg_bm.cmake")]) + "mypkg_bm.cmake")], "cmake_find_package") """) client.save({"mypkg.py": mypkg}) @@ -93,7 +94,7 @@ def package_info(self): self.cpp_info.components["mycomponent"].names["cmake_find_package"] = "mycomponent-name" self.cpp_info.components["mycomponent"].names["custom_generator"] = "mycomponent-name" self.cpp_info.components["mycomponent"].build_modules["cmake_find_package"].append(os.path.join("lib", - "mypkg_bm.cmake")) + "mypkg_bm.cmake")) """) client.save({"mypkg.py": mypkg}) client.run("export mypkg.py") @@ -117,8 +118,13 @@ def test_same_results_without_components(setup_client): class MyPkg(ConanFile): name = "mypkg" version = "1.0" + exports_sources = ["mypkg_bm.cmake"] + def package(self): + self.copy("mypkg_bm.cmake", dst="lib") def package_info(self): self.cpp_info.set_property("names", "mypkg-name") + self.cpp_info.set_property("build_modules",[os.path.join("lib", + "mypkg_bm.cmake")], "cmake_find_package") """) client.save({"mypkg.py": mypkg}) @@ -138,9 +144,13 @@ def package_info(self): class MyPkg(ConanFile): name = "mypkg" version = "1.0" + exports_sources = ["mypkg_bm.cmake"] + def package(self): + self.copy("mypkg_bm.cmake", dst="lib") def package_info(self): self.cpp_info.names["cmake_find_package"] = "mypkg-name" self.cpp_info.names["custom_generator"] = "mypkg-name" + self.cpp_info.build_modules["cmake_find_package"].append(os.path.join("lib", "mypkg_bm.cmake")) """) client.save({"mypkg.py": mypkg}) client.run("create mypkg.py") diff --git a/conans/test/unittests/model/build_info_test.py b/conans/test/unittests/model/build_info_test.py index 83113db0aca..58979870240 100644 --- a/conans/test/unittests/model/build_info_test.py +++ b/conans/test/unittests/model/build_info_test.py @@ -245,7 +245,9 @@ def test_cpp_info_build_modules(self): info.build_modules.append("old.cmake") # Test old behavior with .cmake build modules info.build_modules.extend(["other_old.cmake", "file.pc"]) # .pc not considered info.build_modules["generator"].append("my_module.cmake") + info.translate_cpp_info_generator_properties() info.debug.build_modules["other_gen"] = ["mod-release.cmake"] + info.debug.translate_cpp_info_generator_properties() deps_cpp_info = DepsCppInfo() deps_cpp_info.add("myname", DepCppInfo(info)) for gen in ["cmake", "cmake_multi", "cmake_find_package", "cmake_find_package_multi"]: @@ -261,6 +263,7 @@ def test_cpp_info_build_modules_old_behavior(self): folder = temp_folder() info = CppInfo("myname", folder) info.build_modules = ["old.cmake"] # Test old behavior with .cmake build modules as list + info.translate_cpp_info_generator_properties() deps_cpp_info = DepsCppInfo() deps_cpp_info.add("myname", DepCppInfo(info)) for gen in ["cmake", "cmake_multi", "cmake_find_package", "cmake_find_package_multi"]: From edc7fc17bfe8402f937d1a0cc4059efa49203fda Mon Sep 17 00:00:00 2001 From: czoido Date: Thu, 1 Apr 2021 08:52:26 +0200 Subject: [PATCH 28/59] wip --- conans/test/unittests/client/generators/cmake_test.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/conans/test/unittests/client/generators/cmake_test.py b/conans/test/unittests/client/generators/cmake_test.py index c9f5397ae95..90140b337b1 100644 --- a/conans/test/unittests/client/generators/cmake_test.py +++ b/conans/test/unittests/client/generators/cmake_test.py @@ -562,6 +562,7 @@ def setUp(self): cpp_info.build_modules["cmake_multi"] = ["my-module.cmake"] cpp_info.build_modules["cmake_find_package"] = ["my-module.cmake"] cpp_info.build_modules["cmake_find_package_multi"] = ["my-module.cmake"] + cpp_info.translate_cpp_info_generator_properties() self.conanfile.deps_cpp_info.add(ref.name, cpp_info) ref = ConanFileReference.loads("my_pkg2/0.1@lasote/stables") cpp_info = CppInfo(ref.name, "dummy_root_folder2") @@ -572,10 +573,12 @@ def setUp(self): cpp_info.build_modules["cmake_find_package"] = ["other-mod.cmake", "not-a-cmake-module.pc"] cpp_info.build_modules["cmake_find_package_multi"] = ["other-mod.cmake", "not-a-cmake-module.pc"] + cpp_info.translate_cpp_info_generator_properties() cpp_info.release.build_modules["cmake"] = ["release-mod.cmake"] cpp_info.release.build_modules["cmake_multi"] = ["release-mod.cmake"] cpp_info.release.build_modules["cmake_find_package"] = ["release-mod.cmake"] cpp_info.release.build_modules["cmake_find_package_multi"] = ["release-mod.cmake"] + cpp_info.release.translate_cpp_info_generator_properties() self.conanfile.deps_cpp_info.add(ref.name, cpp_info) def test_cmake(self): From ade9123bd1301e64ae0e9f1f29988051ca557aad Mon Sep 17 00:00:00 2001 From: czoido Date: Thu, 1 Apr 2021 10:30:33 +0200 Subject: [PATCH 29/59] update test --- conans/test/unittests/client/generators/cmake_test.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/conans/test/unittests/client/generators/cmake_test.py b/conans/test/unittests/client/generators/cmake_test.py index 90140b337b1..e03dece5a87 100644 --- a/conans/test/unittests/client/generators/cmake_test.py +++ b/conans/test/unittests/client/generators/cmake_test.py @@ -564,6 +564,7 @@ def setUp(self): cpp_info.build_modules["cmake_find_package_multi"] = ["my-module.cmake"] cpp_info.translate_cpp_info_generator_properties() self.conanfile.deps_cpp_info.add(ref.name, cpp_info) + self.conanfile.deps_cpp_info.translate_cpp_info_generator_properties() ref = ConanFileReference.loads("my_pkg2/0.1@lasote/stables") cpp_info = CppInfo(ref.name, "dummy_root_folder2") cpp_info.filter_empty = False # For testing purposes only @@ -580,6 +581,7 @@ def setUp(self): cpp_info.release.build_modules["cmake_find_package_multi"] = ["release-mod.cmake"] cpp_info.release.translate_cpp_info_generator_properties() self.conanfile.deps_cpp_info.add(ref.name, cpp_info) + self.conanfile.deps_cpp_info.translate_cpp_info_generator_properties() def test_cmake(self): generator = CMakeGenerator(self.conanfile) From 3d51f943fd248592440dd6d55578a1f6854dfca0 Mon Sep 17 00:00:00 2001 From: czoido Date: Thu, 1 Apr 2021 10:38:07 +0200 Subject: [PATCH 30/59] old behaviour --- conans/model/build_info.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/conans/model/build_info.py b/conans/model/build_info.py index 4ae651e40a9..18efb8787f5 100644 --- a/conans/model/build_info.py +++ b/conans/model/build_info.py @@ -223,6 +223,11 @@ def get_property(self, property_name, generator=None): return gen_dict.get(property_name) if gen_dict else None def translate_cpp_info_generator_properties(self): + if isinstance(self.build_modules, list): # FIXME: This should be just a plain dict + conan_v2_error("Use 'self.cpp_info.build_modules[\"\"] = " + "{the_list}' instead".format(the_list=self.build_modules)) + self.build_modules = BuildModulesDict.from_list(self.build_modules) + if isinstance(self, CppInfo): for _, component in self.components.items(): for generator, value in component.names.items(): From 9a22ca589cea5cf05ac4a68b25b21142f4833d20 Mon Sep 17 00:00:00 2001 From: czoido Date: Thu, 1 Apr 2021 11:03:30 +0200 Subject: [PATCH 31/59] wip --- conans/client/generators/cmake_multi.py | 1 + 1 file changed, 1 insertion(+) diff --git a/conans/client/generators/cmake_multi.py b/conans/client/generators/cmake_multi.py index ba5672da553..6ae81e6ef09 100644 --- a/conans/client/generators/cmake_multi.py +++ b/conans/client/generators/cmake_multi.py @@ -30,6 +30,7 @@ def add_lists(seq1, seq2): result.exelinkflags = cpp_info.exelinkflags + config_info.exelinkflags result.system_libs = add_lists(cpp_info.system_libs, config_info.system_libs) result.build_modules = merge_dicts(cpp_info.build_modules, config_info.build_modules) + result.translate_cpp_info_generator_properties() return result return cpp_info From 5b04a7803579614d9636b285b79d63a9792c60a3 Mon Sep 17 00:00:00 2001 From: czoido Date: Fri, 2 Apr 2021 10:27:41 +0200 Subject: [PATCH 32/59] wip --- conans/model/build_info.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conans/model/build_info.py b/conans/model/build_info.py index 18efb8787f5..ea30d8b9e77 100644 --- a/conans/model/build_info.py +++ b/conans/model/build_info.py @@ -481,7 +481,7 @@ def merge_lists(seq1, seq2): self.cflags = merge_lists(dep_cpp_info.cflags, self.cflags) self.sharedlinkflags = merge_lists(dep_cpp_info.sharedlinkflags, self.sharedlinkflags) self.exelinkflags = merge_lists(dep_cpp_info.exelinkflags, self.exelinkflags) - + self.translate_cpp_info_generator_properties() if not self.sysroot: self.sysroot = dep_cpp_info.sysroot From 82188cb8c0e681b1187b9354057cf7024d76305f Mon Sep 17 00:00:00 2001 From: czoido Date: Sat, 3 Apr 2021 09:01:20 +0200 Subject: [PATCH 33/59] add custom content to pkg-config generator --- conans/client/generators/pkg_config.py | 4 +++ .../functional/generators/pkg_config_test.py | 35 +++++++++++++++++++ 2 files changed, 39 insertions(+) diff --git a/conans/client/generators/pkg_config.py b/conans/client/generators/pkg_config.py index 079d354d09e..1a6e4ef7d48 100644 --- a/conans/client/generators/pkg_config.py +++ b/conans/client/generators/pkg_config.py @@ -81,6 +81,10 @@ def _pc_file_content(self, name, cpp_info, requires_gennames): includedir_vars = varnames lines.extend(dir_lines) + custom_content = cpp_info.get_property("custom_content", self.name) + if custom_content: + lines.append(custom_content) + lines.append("") lines.append("Name: %s" % name) description = cpp_info.description or "Conan package: %s" % name diff --git a/conans/test/functional/generators/pkg_config_test.py b/conans/test/functional/generators/pkg_config_test.py index f24fe8167d5..878a65bc257 100644 --- a/conans/test/functional/generators/pkg_config_test.py +++ b/conans/test/functional/generators/pkg_config_test.py @@ -202,3 +202,38 @@ def test_empty_include(self): pc = client.load("pkg.pc") self.assertNotIn("libdir=${prefix}/lib", pc) self.assertNotIn("includedir=${prefix}/include", pc) + + def test_custom_content(self): + # https://github.com/conan-io/conan/issues/7661 + conanfile = textwrap.dedent(""" + from conans import ConanFile + from conans.tools import save + import os + import textwrap + + class PkgConfigConan(ConanFile): + def package(self): + save(os.path.join(self.package_folder, "include" ,"file"), "") + save(os.path.join(self.package_folder, "lib" ,"file"), "") + + def package_info(self): + custom_content = textwrap.dedent(\""" + datadir=${prefix}/share + schemasdir=${datadir}/mylib/schemas + bindir=${prefix}/bin + \""") + self.cpp_info.set_property("custom_content", custom_content, "pkg_config") + self.cpp_info.includedirs = ["include"] + self.cpp_info.libdirs = ["lib"] + """) + client = TestClient() + client.save({"conanfile.py": conanfile}) + client.run("create . pkg/0.1@") + client.run("install pkg/0.1@ -g pkg_config") + + pc_content = client.load("pkg.pc") + self.assertIn("libdir=${prefix}/lib", pc_content) + self.assertIn("datadir=${prefix}/share", pc_content) + self.assertIn("schemasdir=${datadir}/mylib/schemas", pc_content) + self.assertIn("bindir=${prefix}/bin", pc_content) + self.assertIn("Name: pkg", pc_content) From dcf3de954a83561c22a1a6a85d1dbbc5dde586c9 Mon Sep 17 00:00:00 2001 From: czoido Date: Mon, 5 Apr 2021 11:48:51 +0200 Subject: [PATCH 34/59] add tests with components --- .../functional/generators/pkg_config_test.py | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/conans/test/functional/generators/pkg_config_test.py b/conans/test/functional/generators/pkg_config_test.py index 878a65bc257..c7ffcabf267 100644 --- a/conans/test/functional/generators/pkg_config_test.py +++ b/conans/test/functional/generators/pkg_config_test.py @@ -237,3 +237,24 @@ def package_info(self): self.assertIn("schemasdir=${datadir}/mylib/schemas", pc_content) self.assertIn("bindir=${prefix}/bin", pc_content) self.assertIn("Name: pkg", pc_content) + + def test_custom_content(self): + conanfile = textwrap.dedent(""" + from conans import ConanFile + from conans.tools import save + import os + import textwrap + + class PkgConfigConan(ConanFile): + def package_info(self): + self.cpp_info.components["mycomponent"].set_property("custom_content", + "componentdir=${prefix}/mydir", + "pkg_config") + """) + client = TestClient() + client.save({"conanfile.py": conanfile}) + client.run("create . pkg/0.1@") + client.run("install pkg/0.1@ -g pkg_config") + + pc_content = client.load("mycomponent.pc") + self.assertIn("componentdir=${prefix}/mydir", pc_content) From f1f4259d1a1221dca9f985901eb2625629541dbb Mon Sep 17 00:00:00 2001 From: czoido Date: Tue, 6 Apr 2021 11:26:04 +0200 Subject: [PATCH 35/59] add some unit tests --- .../model/build_info/generic_properties_test.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 conans/test/unittests/model/build_info/generic_properties_test.py diff --git a/conans/test/unittests/model/build_info/generic_properties_test.py b/conans/test/unittests/model/build_info/generic_properties_test.py new file mode 100644 index 00000000000..ad30708564f --- /dev/null +++ b/conans/test/unittests/model/build_info/generic_properties_test.py @@ -0,0 +1,16 @@ +from conans.model.build_info import _CppInfo + + +def test_set_get_properties(): + cpp_info = _CppInfo() + cpp_info.set_property("my_property", "default_value") + assert cpp_info.get_property("my_property") == "default_value" + # can you do a get_property for just a family without generator? + assert cpp_info.get_property("my_property", generator="cmake_multi") == "default_value" + assert cpp_info.get_property("my_property", generator="pkg_config") == "default_value" + + cpp_info.set_property("my_property", "pkg_config_value", generator="pkg_config") + assert cpp_info.get_property("my_property", generator="pkg_config") == "pkg_config_value" + cpp_info.set_property("other_property", "other_pkg_config_value", generator="pkg_config") + assert not cpp_info.get_property("other_property") + assert cpp_info.get_property("other_property", generator="pkg_config") == "other_pkg_config_value" From 02c163db2a1d8641e21d45726866e82524add858 Mon Sep 17 00:00:00 2001 From: czoido Date: Tue, 6 Apr 2021 12:36:17 +0200 Subject: [PATCH 36/59] remove translate --- conans/client/generators/cmake_multi.py | 1 - conans/client/generators/text.py | 1 - conans/client/installer.py | 1 - conans/model/build_info.py | 1 - .../test/unittests/client/generators/cmake_paths_test.py | 1 - conans/test/unittests/client/generators/cmake_test.py | 7 ------- .../test/unittests/client/generators/txt/test_dump_load.py | 4 ---- conans/test/unittests/model/build_info_test.py | 4 ---- 8 files changed, 20 deletions(-) diff --git a/conans/client/generators/cmake_multi.py b/conans/client/generators/cmake_multi.py index 6ae81e6ef09..ba5672da553 100644 --- a/conans/client/generators/cmake_multi.py +++ b/conans/client/generators/cmake_multi.py @@ -30,7 +30,6 @@ def add_lists(seq1, seq2): result.exelinkflags = cpp_info.exelinkflags + config_info.exelinkflags result.system_libs = add_lists(cpp_info.system_libs, config_info.system_libs) result.build_modules = merge_dicts(cpp_info.build_modules, config_info.build_modules) - result.translate_cpp_info_generator_properties() return result return cpp_info diff --git a/conans/client/generators/text.py b/conans/client/generators/text.py index 285a9ade029..0fdcb07fb6f 100644 --- a/conans/client/generators/text.py +++ b/conans/client/generators/text.py @@ -185,7 +185,6 @@ def _populate_cpp_info(_cpp_info, _data, _rootpath): cpp_info_config = getattr(dep_cpp_info, config) _populate_cpp_info(cpp_info_config, config_data, rootpath) - dep_cpp_info.translate_cpp_info_generator_properties() # Add to the dependecy list deps_cpp_info.add(dep, DepCppInfo(dep_cpp_info)) diff --git a/conans/client/installer.py b/conans/client/installer.py index 2cfe3e84708..44dc9faf8fa 100644 --- a/conans/client/installer.py +++ b/conans/client/installer.py @@ -637,7 +637,6 @@ def _call_package_info(self, conanfile, package_folder, ref): conanfile.name, conanfile.requires) except ConanException as e: raise ConanException("%s package_info(): %s" % (str(conanfile), e)) - conanfile.cpp_info.translate_cpp_info_generator_properties() conanfile._conan_dep_cpp_info = DepCppInfo(conanfile.cpp_info) self._hook_manager.execute("post_package_info", conanfile=conanfile, reference=ref) diff --git a/conans/model/build_info.py b/conans/model/build_info.py index ea30d8b9e77..c13adbd0a38 100644 --- a/conans/model/build_info.py +++ b/conans/model/build_info.py @@ -481,7 +481,6 @@ def merge_lists(seq1, seq2): self.cflags = merge_lists(dep_cpp_info.cflags, self.cflags) self.sharedlinkflags = merge_lists(dep_cpp_info.sharedlinkflags, self.sharedlinkflags) self.exelinkflags = merge_lists(dep_cpp_info.exelinkflags, self.exelinkflags) - self.translate_cpp_info_generator_properties() if not self.sysroot: self.sysroot = dep_cpp_info.sysroot diff --git a/conans/test/unittests/client/generators/cmake_paths_test.py b/conans/test/unittests/client/generators/cmake_paths_test.py index 0fead59ce27..82b11c56de1 100644 --- a/conans/test/unittests/client/generators/cmake_paths_test.py +++ b/conans/test/unittests/client/generators/cmake_paths_test.py @@ -76,7 +76,6 @@ def test_cpp_info_names(self): cpp_info = CppInfo("pkg_reference_name", tmp) cpp_info.name = "PkgCMakeName" cpp_info.names["cmake_paths"] = "MyCMakePathsPkgName" - cpp_info.translate_cpp_info_generator_properties() conanfile.deps_cpp_info.add("pkg_reference_name", cpp_info) generator = CMakePathsGenerator(conanfile) self.assertIn('set(CONAN_MYCMAKEPATHSPKGNAME_ROOT', generator.content) diff --git a/conans/test/unittests/client/generators/cmake_test.py b/conans/test/unittests/client/generators/cmake_test.py index e03dece5a87..08e16b53bb5 100644 --- a/conans/test/unittests/client/generators/cmake_test.py +++ b/conans/test/unittests/client/generators/cmake_test.py @@ -479,7 +479,6 @@ def setUp(self): cpp_info.names["cmake_multi"] = "MyCMakeMultiName" cpp_info.names["cmake_find_package"] = "MyCMakeFindPackageName" cpp_info.names["cmake_find_package_multi"] = "MyCMakeFindPackageMultiName" - cpp_info.translate_cpp_info_generator_properties() self.conanfile.deps_cpp_info.add(ref.name, cpp_info) ref = ConanFileReference.loads("my_pkg2/0.1@lasote/stables") cpp_info = CppInfo(ref.name, "dummy_root_folder2") @@ -489,7 +488,6 @@ def setUp(self): cpp_info.names["cmake_find_package"] = "MyCMakeFindPackageName2" cpp_info.names["cmake_find_package_multi"] = "MyCMakeFindPackageMultiName2" cpp_info.public_deps = ["my_pkg"] - cpp_info.translate_cpp_info_generator_properties() self.conanfile.deps_cpp_info.add(ref.name, cpp_info) def test_cmake(self): @@ -562,9 +560,7 @@ def setUp(self): cpp_info.build_modules["cmake_multi"] = ["my-module.cmake"] cpp_info.build_modules["cmake_find_package"] = ["my-module.cmake"] cpp_info.build_modules["cmake_find_package_multi"] = ["my-module.cmake"] - cpp_info.translate_cpp_info_generator_properties() self.conanfile.deps_cpp_info.add(ref.name, cpp_info) - self.conanfile.deps_cpp_info.translate_cpp_info_generator_properties() ref = ConanFileReference.loads("my_pkg2/0.1@lasote/stables") cpp_info = CppInfo(ref.name, "dummy_root_folder2") cpp_info.filter_empty = False # For testing purposes only @@ -574,14 +570,11 @@ def setUp(self): cpp_info.build_modules["cmake_find_package"] = ["other-mod.cmake", "not-a-cmake-module.pc"] cpp_info.build_modules["cmake_find_package_multi"] = ["other-mod.cmake", "not-a-cmake-module.pc"] - cpp_info.translate_cpp_info_generator_properties() cpp_info.release.build_modules["cmake"] = ["release-mod.cmake"] cpp_info.release.build_modules["cmake_multi"] = ["release-mod.cmake"] cpp_info.release.build_modules["cmake_find_package"] = ["release-mod.cmake"] cpp_info.release.build_modules["cmake_find_package_multi"] = ["release-mod.cmake"] - cpp_info.release.translate_cpp_info_generator_properties() self.conanfile.deps_cpp_info.add(ref.name, cpp_info) - self.conanfile.deps_cpp_info.translate_cpp_info_generator_properties() def test_cmake(self): generator = CMakeGenerator(self.conanfile) diff --git a/conans/test/unittests/client/generators/txt/test_dump_load.py b/conans/test/unittests/client/generators/txt/test_dump_load.py index 6f75732bae7..6021601aff1 100644 --- a/conans/test/unittests/client/generators/txt/test_dump_load.py +++ b/conans/test/unittests/client/generators/txt/test_dump_load.py @@ -20,14 +20,12 @@ def test_names_per_generator(self): cpp_info.names["txt"] = "txt_name" cpp_info.names["cmake_find_package"] = "SpecialName" cpp_info.filenames["cmake_find_package"] = "SpecialFileName" - cpp_info.translate_cpp_info_generator_properties() conanfile = ConanFile(Mock(), None) conanfile.initialize(Settings({}), EnvValues()) conanfile.deps_cpp_info.add("pkg_name", DepCppInfo(cpp_info)) content = TXTGenerator(conanfile).content parsed_deps_cpp_info, _, _, _ = TXTGenerator.loads(content, filter_empty=False) parsed_cpp_info = parsed_deps_cpp_info["pkg_name"] - parsed_cpp_info.translate_cpp_info_generator_properties() self.assertEqual(parsed_cpp_info.get_name("txt"), "txt_name") self.assertEqual(parsed_cpp_info.get_name("cmake_find_package"), "SpecialName") self.assertEqual(parsed_cpp_info.get_filename("cmake_find_package"), "SpecialFileName") @@ -46,7 +44,6 @@ def test_idempotent(self): cpp_info.cxxflags = ["-cxxflag_parent"] cpp_info.includedirs = ["mypkg1/include"] cpp_info.filter_empty = False - cpp_info.translate_cpp_info_generator_properties() conanfile.deps_cpp_info.add(ref.name, cpp_info) ref = ConanFileReference.loads("MyPkg2/0.1@lasote/stables") @@ -54,7 +51,6 @@ def test_idempotent(self): cpp_info.defines = ["MYDEFINE2"] cpp_info.cxxflags = ["-cxxflag_dep"] cpp_info.filter_empty = False - cpp_info.translate_cpp_info_generator_properties() conanfile.deps_cpp_info.add(ref.name, cpp_info) # Add env_info diff --git a/conans/test/unittests/model/build_info_test.py b/conans/test/unittests/model/build_info_test.py index 58979870240..54b72e85bd9 100644 --- a/conans/test/unittests/model/build_info_test.py +++ b/conans/test/unittests/model/build_info_test.py @@ -233,7 +233,6 @@ def test_cpp_info_name(self): info = CppInfo("myname", folder) info.name = "MyName" info.names["my_generator"] = "MyNameForMyGenerator" - info.translate_cpp_info_generator_properties() deps_cpp_info = DepsCppInfo() deps_cpp_info.add("myname", DepCppInfo(info)) self.assertIn("MyName", deps_cpp_info["myname"].get_name("my_undefined_generator")) @@ -245,9 +244,7 @@ def test_cpp_info_build_modules(self): info.build_modules.append("old.cmake") # Test old behavior with .cmake build modules info.build_modules.extend(["other_old.cmake", "file.pc"]) # .pc not considered info.build_modules["generator"].append("my_module.cmake") - info.translate_cpp_info_generator_properties() info.debug.build_modules["other_gen"] = ["mod-release.cmake"] - info.debug.translate_cpp_info_generator_properties() deps_cpp_info = DepsCppInfo() deps_cpp_info.add("myname", DepCppInfo(info)) for gen in ["cmake", "cmake_multi", "cmake_find_package", "cmake_find_package_multi"]: @@ -263,7 +260,6 @@ def test_cpp_info_build_modules_old_behavior(self): folder = temp_folder() info = CppInfo("myname", folder) info.build_modules = ["old.cmake"] # Test old behavior with .cmake build modules as list - info.translate_cpp_info_generator_properties() deps_cpp_info = DepsCppInfo() deps_cpp_info.add("myname", DepCppInfo(info)) for gen in ["cmake", "cmake_multi", "cmake_find_package", "cmake_find_package_multi"]: From 6a9499f3d3c85a99af0d637daa3d0816d2f31da3 Mon Sep 17 00:00:00 2001 From: czoido Date: Tue, 6 Apr 2021 12:43:23 +0200 Subject: [PATCH 37/59] revert changes --- conans/model/build_info.py | 35 ++++++++--------------------------- 1 file changed, 8 insertions(+), 27 deletions(-) diff --git a/conans/model/build_info.py b/conans/model/build_info.py index c13adbd0a38..71656555605 100644 --- a/conans/model/build_info.py +++ b/conans/model/build_info.py @@ -150,8 +150,13 @@ def _filter_paths(self, paths): @property def build_modules_paths(self): - tmp = dict_to_abs_paths(BuildModulesDict(self.get_build_modules()), self.rootpath) - self._build_modules_paths = tmp + if self._build_modules_paths is None: + if isinstance(self.build_modules, list): # FIXME: This should be just a plain dict + conan_v2_error("Use 'self.cpp_info.build_modules[\"\"] = " + "{the_list}' instead".format(the_list=self.build_modules)) + self.build_modules = BuildModulesDict.from_list(self.build_modules) + tmp = dict_to_abs_paths(BuildModulesDict(self.build_modules), self.rootpath) + self._build_modules_paths = tmp return self._build_modules_paths @property @@ -222,30 +227,6 @@ def get_property(self, property_name, generator=None): gen_dict = self._generator_properties.get("conan_default_generators_value") return gen_dict.get(property_name) if gen_dict else None - def translate_cpp_info_generator_properties(self): - if isinstance(self.build_modules, list): # FIXME: This should be just a plain dict - conan_v2_error("Use 'self.cpp_info.build_modules[\"\"] = " - "{the_list}' instead".format(the_list=self.build_modules)) - self.build_modules = BuildModulesDict.from_list(self.build_modules) - - if isinstance(self, CppInfo): - for _, component in self.components.items(): - for generator, value in component.names.items(): - component.set_property("names", value, generator=generator) - component.set_property("filenames", value, generator=generator) - for generator, value in component.filenames.items(): - component.set_property("filenames", value, generator=generator) - for generator, value in component.build_modules.items(): - component.set_property("build_modules", value, generator=generator) - - for generator, value in self.names.items(): - self.set_property("names", value, generator=generator) - self.set_property("filenames", value, generator=generator) - for generator, value in self.filenames.items(): - self.set_property("filenames", value, generator=generator) - for generator, value in self.build_modules.items(): - self.set_property("build_modules", value, generator=generator) - def get_name(self, generator=None): return self.get_property("names", generator) or self._name @@ -486,7 +467,7 @@ def merge_lists(seq1, seq2): @property def build_modules_paths(self): - return self.get_build_modules() + return self.build_modules @property def include_paths(self): From 45929da6ffc553eee9e7fba4d2f6947034d73cbf Mon Sep 17 00:00:00 2001 From: czoido Date: Tue, 6 Apr 2021 12:45:21 +0200 Subject: [PATCH 38/59] revert changes --- conans/model/build_info.py | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/conans/model/build_info.py b/conans/model/build_info.py index 71656555605..9f2953ff67f 100644 --- a/conans/model/build_info.py +++ b/conans/model/build_info.py @@ -210,6 +210,15 @@ def name(self): def name(self, value): self._name = value + def get_name(self, generator=None): + return self.names.get(generator, self._name) + + def get_filename(self, generator): + result = self.filenames.get(generator) + if result: + return result + return self.get_name(generator) + def set_property(self, property_name, value, generator=None): generator = generator or "conan_default_generators_value" gen_dict = self._generator_properties.get(generator) @@ -227,12 +236,6 @@ def get_property(self, property_name, generator=None): gen_dict = self._generator_properties.get("conan_default_generators_value") return gen_dict.get(property_name) if gen_dict else None - def get_name(self, generator=None): - return self.get_property("names", generator) or self._name - - def get_filename(self, generator=None): - return self.get_property("filenames", generator) or self._name - def get_build_modules(self, generator=None): if generator: values_dict = self._generator_properties.get(generator) From 90e578c2425243996b43158904f7e76d8a48cd84 Mon Sep 17 00:00:00 2001 From: czoido Date: Tue, 6 Apr 2021 12:46:54 +0200 Subject: [PATCH 39/59] revert changes --- conans/model/build_info.py | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/conans/model/build_info.py b/conans/model/build_info.py index 9f2953ff67f..bbd523512d7 100644 --- a/conans/model/build_info.py +++ b/conans/model/build_info.py @@ -210,7 +210,7 @@ def name(self): def name(self, value): self._name = value - def get_name(self, generator=None): + def get_name(self, generator): return self.names.get(generator, self._name) def get_filename(self, generator): @@ -236,16 +236,6 @@ def get_property(self, property_name, generator=None): gen_dict = self._generator_properties.get("conan_default_generators_value") return gen_dict.get(property_name) if gen_dict else None - def get_build_modules(self, generator=None): - if generator: - values_dict = self._generator_properties.get(generator) - return values_dict if values_dict else {} - ret_dict = {} - for generator, values in self._generator_properties.items(): - if values.get("build_modules"): - ret_dict[generator] = values.get("build_modules") - return ret_dict - # Compatibility for 'cppflags' (old style property to allow decoration) def get_cppflags(self): conan_v2_error("'cpp_info.cppflags' is deprecated, use 'cxxflags' instead") From 7121b3d51f05dc019c86c67b7d1483f591b237c5 Mon Sep 17 00:00:00 2001 From: czoido Date: Tue, 6 Apr 2021 15:22:47 +0200 Subject: [PATCH 40/59] use other properties names --- conans/model/build_info.py | 31 ++++++++++++------ .../cpp_info_set_generator_properties_test.py | 32 ++++++++----------- 2 files changed, 35 insertions(+), 28 deletions(-) diff --git a/conans/model/build_info.py b/conans/model/build_info.py index bbd523512d7..4ec67f8bfb7 100644 --- a/conans/model/build_info.py +++ b/conans/model/build_info.py @@ -151,11 +151,12 @@ def _filter_paths(self, paths): @property def build_modules_paths(self): if self._build_modules_paths is None: - if isinstance(self.build_modules, list): # FIXME: This should be just a plain dict + build_modules = self.get_build_modules() + if isinstance(build_modules, list): # FIXME: This should be just a plain dict conan_v2_error("Use 'self.cpp_info.build_modules[\"\"] = " - "{the_list}' instead".format(the_list=self.build_modules)) - self.build_modules = BuildModulesDict.from_list(self.build_modules) - tmp = dict_to_abs_paths(BuildModulesDict(self.build_modules), self.rootpath) + "{the_list}' instead".format(the_list=build_modules)) + self.build_modules = BuildModulesDict.from_list(build_modules) + tmp = dict_to_abs_paths(BuildModulesDict(build_modules), self.rootpath) self._build_modules_paths = tmp return self._build_modules_paths @@ -211,14 +212,26 @@ def name(self, value): self._name = value def get_name(self, generator): - return self.names.get(generator, self._name) + property_name = "cmake_target_name" if "cmake" in generator else "pkg_config_name" + return self.get_property(property_name, generator) or self.names.get(generator, self._name) def get_filename(self, generator): - result = self.filenames.get(generator) + property_name = "cmake_file_name" if "cmake" in generator else "pkg_config_name" + result = self.get_property(property_name, generator) or self.filenames.get(generator) if result: return result return self.get_name(generator) + def get_build_modules(self, generator=None): + if generator: + values_dict = self._generator_properties.get(generator) + return values_dict if values_dict else {} + ret_dict = {} + for generator, values in self._generator_properties.items(): + if values.get("cmake_build_modules"): + ret_dict[generator] = values.get("cmake_build_modules") + return ret_dict if ret_dict else self.build_modules + def set_property(self, property_name, value, generator=None): generator = generator or "conan_default_generators_value" gen_dict = self._generator_properties.get(generator) @@ -372,7 +385,7 @@ def _raise_incorrect_components_definition(self, package_name, package_requires) self.cxxflags or self.sharedlinkflags or self.exelinkflags or - self.build_modules or + self.get_build_modules() or self.requires): raise ConanException("self.cpp_info.components cannot be used with self.cpp_info " "global values at the same time") @@ -445,7 +458,7 @@ def merge_lists(seq1, seq2): self.frameworkdirs = merge_lists(self.frameworkdirs, dep_cpp_info.framework_paths) self.libs = merge_lists(self.libs, dep_cpp_info.libs) self.frameworks = merge_lists(self.frameworks, dep_cpp_info.frameworks) - self.build_modules = merge_dicts(self.build_modules, dep_cpp_info.build_modules_paths) + self.build_modules = merge_dicts(self.get_build_modules(), dep_cpp_info.build_modules_paths) self.requires = merge_lists(self.requires, dep_cpp_info.requires) self.rootpaths.append(dep_cpp_info.rootpath) @@ -460,7 +473,7 @@ def merge_lists(seq1, seq2): @property def build_modules_paths(self): - return self.build_modules + return self.get_build_modules() @property def include_paths(self): diff --git a/conans/test/functional/generators/cpp_info_set_generator_properties_test.py b/conans/test/functional/generators/cpp_info_set_generator_properties_test.py index b94b6ba08ac..984758168bd 100644 --- a/conans/test/functional/generators/cpp_info_set_generator_properties_test.py +++ b/conans/test/functional/generators/cpp_info_set_generator_properties_test.py @@ -23,10 +23,10 @@ class custom_generator(GeneratorComponentsMixin, Generator): def filename(self): return "my-generator.txt" - def _get_components(self, pkg_name, cpp_info): - components = super(custom_generator, self)._get_components(pkg_name, cpp_info) - ret = [] - for comp_genname, comp, comp_requires_gennames in components: + def _get_components_custom_names(self, pkg_name, cpp_info): + ret=[] + for comp_name, comp in self.sorted_components(cpp_info).items(): + comp_genname = comp.get_property("custom_name", generator=self.name) ret.append("{}:{}".format(comp.name, comp_genname)) return ret @@ -34,8 +34,8 @@ def _get_components(self, pkg_name, cpp_info): def content(self): info = [] for pkg_name, cpp_info in self.deps_build_info.dependencies: - info.append("{}:{}".format(pkg_name, cpp_info.get_property("names", self.name))) - info.extend(self._get_components(pkg_name, cpp_info)) + info.append("{}:{}".format(pkg_name, cpp_info.get_property("custom_name", self.name))) + info.extend(self._get_components_custom_names(pkg_name, cpp_info)) return os.linesep.join(info) """) client.save({"custom_generator.py": custom_generator}) @@ -64,9 +64,9 @@ def package(self): self.copy("mypkg_bm.cmake", dst="lib") def package_info(self): self.cpp_info.components["mycomponent"].libs = ["mycomponent-lib"] - self.cpp_info.components["mycomponent"].set_property("names", "mycomponent-name") - self.cpp_info.components["mycomponent"].set_property("names", "mycomponent-name","custom_generator") - self.cpp_info.components["mycomponent"].set_property("build_modules", + self.cpp_info.components["mycomponent"].set_property("cmake_target_name", "mycomponent-name") + self.cpp_info.components["mycomponent"].set_property("custom_name", "mycomponent-name", "custom_generator") + self.cpp_info.components["mycomponent"].set_property("cmake_build_modules", [os.path.join("lib", "mypkg_bm.cmake")], "cmake_find_package") """) @@ -92,7 +92,6 @@ def package(self): def package_info(self): self.cpp_info.components["mycomponent"].libs = ["mycomponent-lib"] self.cpp_info.components["mycomponent"].names["cmake_find_package"] = "mycomponent-name" - self.cpp_info.components["mycomponent"].names["custom_generator"] = "mycomponent-name" self.cpp_info.components["mycomponent"].build_modules["cmake_find_package"].append(os.path.join("lib", "mypkg_bm.cmake")) """) @@ -100,9 +99,6 @@ def package_info(self): client.run("export mypkg.py") client.run("install consumer.py") - with open(os.path.join(client.current_folder, "my-generator.txt")) as custom_gen_file: - assert "mycomponent:mycomponent-name" in custom_gen_file.read() - with open(os.path.join(client.current_folder, "Findmypkg.cmake")) as find_package_file: normal_find_package_content = find_package_file.read() @@ -122,9 +118,10 @@ class MyPkg(ConanFile): def package(self): self.copy("mypkg_bm.cmake", dst="lib") def package_info(self): - self.cpp_info.set_property("names", "mypkg-name") - self.cpp_info.set_property("build_modules",[os.path.join("lib", - "mypkg_bm.cmake")], "cmake_find_package") + self.cpp_info.set_property("cmake_target_name", "mypkg-name") + self.cpp_info.set_property("cmake_build_modules",[os.path.join("lib", + "mypkg_bm.cmake")], "cmake_find_package") + self.cpp_info.set_property("custom_name", "mypkg-name", "custom_generator") """) client.save({"mypkg.py": mypkg}) @@ -156,9 +153,6 @@ def package_info(self): client.run("create mypkg.py") client.run("install consumer.py") - with open(os.path.join(client.current_folder, "my-generator.txt")) as custom_gen_file: - assert "mypkg:mypkg-name" in custom_gen_file.read() - with open(os.path.join(client.current_folder, "Findmypkg.cmake")) as find_package_file: normal_find_package_content = find_package_file.read() From 8cf1d7cd39d122787ad29a992735163c100d05b1 Mon Sep 17 00:00:00 2001 From: czoido Date: Tue, 6 Apr 2021 17:02:19 +0200 Subject: [PATCH 41/59] update tests --- conans/model/build_info.py | 9 +++- .../cpp_info_set_generator_properties_test.py | 50 ++++++++++++------- 2 files changed, 39 insertions(+), 20 deletions(-) diff --git a/conans/model/build_info.py b/conans/model/build_info.py index 4ec67f8bfb7..2b24f30ffa2 100644 --- a/conans/model/build_info.py +++ b/conans/model/build_info.py @@ -226,9 +226,14 @@ def get_build_modules(self, generator=None): if generator: values_dict = self._generator_properties.get(generator) return values_dict if values_dict else {} - ret_dict = {} + default_values_dict = self._generator_properties.get("conan_default_generators_value") + default_build_modules_value = default_values_dict.get("cmake_build_modules") if default_values_dict else None + ret_dict = {"cmake_find_package": default_build_modules_value, + "cmake_find_package_multi": default_build_modules_value, + "cmake": default_build_modules_value, + "cmake_multi": default_build_modules_value} if default_build_modules_value else {} for generator, values in self._generator_properties.items(): - if values.get("cmake_build_modules"): + if values.get("cmake_build_modules") and generator !="conan_default_generators_value": ret_dict[generator] = values.get("cmake_build_modules") return ret_dict if ret_dict else self.build_modules diff --git a/conans/test/functional/generators/cpp_info_set_generator_properties_test.py b/conans/test/functional/generators/cpp_info_set_generator_properties_test.py index 984758168bd..3373264a43e 100644 --- a/conans/test/functional/generators/cpp_info_set_generator_properties_test.py +++ b/conans/test/functional/generators/cpp_info_set_generator_properties_test.py @@ -45,11 +45,20 @@ def content(self): message("I am a build module") """) client.save({"consumer.py": GenConanfile("consumer", "1.0").with_requires("mypkg/1.0"). - with_generator("custom_generator").with_generator("cmake_find_package"), + with_generator("custom_generator").with_generator("cmake_find_package")#with_generator("cmake_find_package_multi"). + .with_generator("pkg_config"), "mypkg_bm.cmake": build_module}) return client +def get_files_contents(folder, filenames): + ret = [] + for filename in filenames: + with open(os.path.join(folder, filename)) as properties_package_file: + ret.append(properties_package_file.read()) + return ret + + @pytest.mark.tool_cmake def test_same_results_components(setup_client): client = setup_client @@ -63,22 +72,22 @@ class MyPkg(ConanFile): def package(self): self.copy("mypkg_bm.cmake", dst="lib") def package_info(self): + self.cpp_info.set_property("cmake_file_name", "MyFileName") self.cpp_info.components["mycomponent"].libs = ["mycomponent-lib"] self.cpp_info.components["mycomponent"].set_property("cmake_target_name", "mycomponent-name") + self.cpp_info.components["mycomponent"].set_property("cmake_build_modules", [os.path.join("lib", "mypkg_bm.cmake")]) self.cpp_info.components["mycomponent"].set_property("custom_name", "mycomponent-name", "custom_generator") - self.cpp_info.components["mycomponent"].set_property("cmake_build_modules", - [os.path.join("lib", - "mypkg_bm.cmake")], "cmake_find_package") """) client.save({"mypkg.py": mypkg}) client.run("export mypkg.py") client.run("install consumer.py --build missing") + with open(os.path.join(client.current_folder, "my-generator.txt")) as custom_gen_file: assert "mycomponent:mycomponent-name" in custom_gen_file.read() - with open(os.path.join(client.current_folder, "Findmypkg.cmake")) as properties_package_file: - properties_find_package_content = properties_package_file.read() + files_to_compare = ["FindMyFileName.cmake", "mypkg.pc", "mycomponent.pc"] + new_approach_contents = get_files_contents(client.current_folder, files_to_compare) mypkg = textwrap.dedent(""" import os @@ -91,18 +100,20 @@ def package(self): self.copy("mypkg_bm.cmake", dst="lib") def package_info(self): self.cpp_info.components["mycomponent"].libs = ["mycomponent-lib"] + self.cpp_info.filenames["cmake_find_package"] = "MyFileName" + self.cpp_info.filenames["cmake_find_package_multi"] = "MyFileName" self.cpp_info.components["mycomponent"].names["cmake_find_package"] = "mycomponent-name" - self.cpp_info.components["mycomponent"].build_modules["cmake_find_package"].append(os.path.join("lib", - "mypkg_bm.cmake")) + self.cpp_info.components["mycomponent"].names["cmake_find_package_multi"] = "mycomponent-name" + self.cpp_info.components["mycomponent"].build_modules.append(os.path.join("lib", "mypkg_bm.cmake")) + self.cpp_info.components["mycomponent"].build_modules["cmake_find_package_multi"].append(os.path.join("lib", "mypkg_bm.cmake")) """) client.save({"mypkg.py": mypkg}) client.run("export mypkg.py") client.run("install consumer.py") - with open(os.path.join(client.current_folder, "Findmypkg.cmake")) as find_package_file: - normal_find_package_content = find_package_file.read() + old_approach_contents = get_files_contents(client.current_folder, files_to_compare) - assert properties_find_package_content == normal_find_package_content + assert new_approach_contents == old_approach_contents @pytest.mark.tool_cmake @@ -118,9 +129,10 @@ class MyPkg(ConanFile): def package(self): self.copy("mypkg_bm.cmake", dst="lib") def package_info(self): + self.cpp_info.set_property("cmake_file_name", "MyFileName") self.cpp_info.set_property("cmake_target_name", "mypkg-name") self.cpp_info.set_property("cmake_build_modules",[os.path.join("lib", - "mypkg_bm.cmake")], "cmake_find_package") + "mypkg_bm.cmake")]) self.cpp_info.set_property("custom_name", "mypkg-name", "custom_generator") """) @@ -132,8 +144,8 @@ def package_info(self): with open(os.path.join(client.current_folder, "my-generator.txt")) as custom_gen_file: assert "mypkg:mypkg-name" in custom_gen_file.read() - with open(os.path.join(client.current_folder, "Findmypkg.cmake")) as properties_package_file: - properties_find_package_content = properties_package_file.read() + files_to_compare = ["FindMyFileName.cmake", "mypkg.pc"] + new_approach_contents = get_files_contents(client.current_folder, files_to_compare) mypkg = textwrap.dedent(""" import os @@ -145,15 +157,17 @@ class MyPkg(ConanFile): def package(self): self.copy("mypkg_bm.cmake", dst="lib") def package_info(self): + self.cpp_info.filenames["cmake_find_package"] = "MyFileName" + self.cpp_info.filenames["cmake_find_package_multi"] = "MyFileName" self.cpp_info.names["cmake_find_package"] = "mypkg-name" + self.cpp_info.names["cmake_find_package_multi"] = "mypkg-name" self.cpp_info.names["custom_generator"] = "mypkg-name" - self.cpp_info.build_modules["cmake_find_package"].append(os.path.join("lib", "mypkg_bm.cmake")) + self.cpp_info.build_modules.append(os.path.join("lib", "mypkg_bm.cmake")) """) client.save({"mypkg.py": mypkg}) client.run("create mypkg.py") client.run("install consumer.py") - with open(os.path.join(client.current_folder, "Findmypkg.cmake")) as find_package_file: - normal_find_package_content = find_package_file.read() + old_approach_contents = get_files_contents(client.current_folder, files_to_compare) - assert properties_find_package_content == normal_find_package_content + assert new_approach_contents == old_approach_contents From eaeb0c4870b07eb3f955fb39d214e6154f5406b1 Mon Sep 17 00:00:00 2001 From: czoido Date: Tue, 6 Apr 2021 17:21:52 +0200 Subject: [PATCH 42/59] fix filename --- conans/model/build_info.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conans/model/build_info.py b/conans/model/build_info.py index 2b24f30ffa2..54e88e10709 100644 --- a/conans/model/build_info.py +++ b/conans/model/build_info.py @@ -216,7 +216,7 @@ def get_name(self, generator): return self.get_property(property_name, generator) or self.names.get(generator, self._name) def get_filename(self, generator): - property_name = "cmake_file_name" if "cmake" in generator else "pkg_config_name" + property_name = "cmake_file_name" if "cmake" in generator else "pkg_config_file_name" result = self.get_property(property_name, generator) or self.filenames.get(generator) if result: return result From 7e287c64935cfc0efedb1d6bcdd41850e219f4ac Mon Sep 17 00:00:00 2001 From: czoido Date: Tue, 6 Apr 2021 17:42:06 +0200 Subject: [PATCH 43/59] fix gets --- conans/model/build_info.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/conans/model/build_info.py b/conans/model/build_info.py index 54e88e10709..e25fa799c8a 100644 --- a/conans/model/build_info.py +++ b/conans/model/build_info.py @@ -211,13 +211,15 @@ def name(self): def name(self, value): self._name = value + # TODO: Deprecate for 2.0. Only cmake and pkg_config generators should access this. + # Use get_property for 2.0 def get_name(self, generator): property_name = "cmake_target_name" if "cmake" in generator else "pkg_config_name" return self.get_property(property_name, generator) or self.names.get(generator, self._name) + # TODO: Deprecate for 2.0. Only cmake generators should access this. Use get_property for 2.0 def get_filename(self, generator): - property_name = "cmake_file_name" if "cmake" in generator else "pkg_config_file_name" - result = self.get_property(property_name, generator) or self.filenames.get(generator) + result = self.get_property("cmake_file_name", generator) or self.filenames.get(generator) if result: return result return self.get_name(generator) From 8aaa18c5755866b76e9dd1503fc25edd72d60844 Mon Sep 17 00:00:00 2001 From: czoido Date: Tue, 6 Apr 2021 17:42:11 +0200 Subject: [PATCH 44/59] add tests --- .../cpp_info_set_generator_properties_test.py | 33 ++++++++++++++++--- 1 file changed, 29 insertions(+), 4 deletions(-) diff --git a/conans/test/functional/generators/cpp_info_set_generator_properties_test.py b/conans/test/functional/generators/cpp_info_set_generator_properties_test.py index 3373264a43e..20282abcc73 100644 --- a/conans/test/functional/generators/cpp_info_set_generator_properties_test.py +++ b/conans/test/functional/generators/cpp_info_set_generator_properties_test.py @@ -45,8 +45,9 @@ def content(self): message("I am a build module") """) client.save({"consumer.py": GenConanfile("consumer", "1.0").with_requires("mypkg/1.0"). - with_generator("custom_generator").with_generator("cmake_find_package")#with_generator("cmake_find_package_multi"). - .with_generator("pkg_config"), + with_generator("custom_generator").with_generator("cmake_find_package"). + with_generator("cmake_find_package_multi").with_generator("pkg_config"). + with_setting("build_type"), "mypkg_bm.cmake": build_module}) return client @@ -59,13 +60,13 @@ def get_files_contents(folder, filenames): return ret -@pytest.mark.tool_cmake def test_same_results_components(setup_client): client = setup_client mypkg = textwrap.dedent(""" import os from conans import ConanFile, CMake, tools class MyPkg(ConanFile): + settings = "build_type" name = "mypkg" version = "1.0" exports_sources = ["mypkg_bm.cmake"] @@ -93,6 +94,7 @@ def package_info(self): import os from conans import ConanFile, CMake, tools class MyPkg(ConanFile): + settings = "build_type" name = "mypkg" version = "1.0" exports_sources = ["mypkg_bm.cmake"] @@ -116,13 +118,13 @@ def package_info(self): assert new_approach_contents == old_approach_contents -@pytest.mark.tool_cmake def test_same_results_without_components(setup_client): client = setup_client mypkg = textwrap.dedent(""" import os from conans import ConanFile, CMake, tools class MyPkg(ConanFile): + settings = "build_type" name = "mypkg" version = "1.0" exports_sources = ["mypkg_bm.cmake"] @@ -151,6 +153,7 @@ def package_info(self): import os from conans import ConanFile, CMake, tools class MyPkg(ConanFile): + settings = "build_type" name = "mypkg" version = "1.0" exports_sources = ["mypkg_bm.cmake"] @@ -171,3 +174,25 @@ def package_info(self): old_approach_contents = get_files_contents(client.current_folder, files_to_compare) assert new_approach_contents == old_approach_contents + + +def test_pkg_config_names(setup_client): + client = setup_client + mypkg = textwrap.dedent(""" + import os + from conans import ConanFile, CMake, tools + class MyPkg(ConanFile): + settings = "build_type" + name = "mypkg" + version = "1.0" + def package_info(self): + self.cpp_info.components["mycomponent"].libs = ["mycomponent-lib"] + self.cpp_info.components["mycomponent"].set_property("pkg_config_name", "mypkg-config-name") + """) + + client.save({"mypkg.py": mypkg}) + client.run("export mypkg.py") + client.run("install consumer.py --build missing") + + with open(os.path.join(client.current_folder, "mypkg-config-name.pc")) as gen_file: + assert "mypkg-config-name" in gen_file.read() From c5b48698091f697504621150de3e07d859f48e18 Mon Sep 17 00:00:00 2001 From: czoido Date: Tue, 6 Apr 2021 17:52:31 +0200 Subject: [PATCH 45/59] fix test --- conans/model/build_info.py | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/conans/model/build_info.py b/conans/model/build_info.py index e25fa799c8a..c35501503bd 100644 --- a/conans/model/build_info.py +++ b/conans/model/build_info.py @@ -151,12 +151,11 @@ def _filter_paths(self, paths): @property def build_modules_paths(self): if self._build_modules_paths is None: - build_modules = self.get_build_modules() - if isinstance(build_modules, list): # FIXME: This should be just a plain dict + if isinstance(self.get_build_modules(), list): # FIXME: This should be just a plain dict conan_v2_error("Use 'self.cpp_info.build_modules[\"\"] = " - "{the_list}' instead".format(the_list=build_modules)) - self.build_modules = BuildModulesDict.from_list(build_modules) - tmp = dict_to_abs_paths(BuildModulesDict(build_modules), self.rootpath) + "{the_list}' instead".format(the_list=self.get_build_modules())) + self.build_modules = BuildModulesDict.from_list(self.get_build_modules()) + tmp = dict_to_abs_paths(BuildModulesDict(self.get_build_modules()), self.rootpath) self._build_modules_paths = tmp return self._build_modules_paths From 2fa20cd7c07dab42707ea6d7f5041e715a9845d7 Mon Sep 17 00:00:00 2001 From: czoido Date: Tue, 6 Apr 2021 17:59:32 +0200 Subject: [PATCH 46/59] add note --- conans/model/build_info.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/conans/model/build_info.py b/conans/model/build_info.py index c35501503bd..cc2edd9c382 100644 --- a/conans/model/build_info.py +++ b/conans/model/build_info.py @@ -222,7 +222,8 @@ def get_filename(self, generator): if result: return result return self.get_name(generator) - + + # TODO: Deprecate for 2.0. Use get_property for 2.0 def get_build_modules(self, generator=None): if generator: values_dict = self._generator_properties.get(generator) From 547b6362235761fcb10c0edb4c43e355582c8e2b Mon Sep 17 00:00:00 2001 From: czoido Date: Tue, 6 Apr 2021 18:08:11 +0200 Subject: [PATCH 47/59] test multi --- .../cpp_info_set_generator_properties_test.py | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/conans/test/functional/generators/cpp_info_set_generator_properties_test.py b/conans/test/functional/generators/cpp_info_set_generator_properties_test.py index 20282abcc73..aeae711b569 100644 --- a/conans/test/functional/generators/cpp_info_set_generator_properties_test.py +++ b/conans/test/functional/generators/cpp_info_set_generator_properties_test.py @@ -82,12 +82,14 @@ def package_info(self): client.save({"mypkg.py": mypkg}) client.run("export mypkg.py") - client.run("install consumer.py --build missing") + client.run("install consumer.py --build missing -s build_type=Release") with open(os.path.join(client.current_folder, "my-generator.txt")) as custom_gen_file: assert "mycomponent:mycomponent-name" in custom_gen_file.read() - files_to_compare = ["FindMyFileName.cmake", "mypkg.pc", "mycomponent.pc"] + files_to_compare = ["FindMyFileName.cmake", "MyFileNameConfig.cmake", "MyFileNameTargets.cmake", + "MyFileNameTarget-release.cmake", "MyFileNameConfigVersion.cmake", "mypkg.pc", + "mycomponent.pc"] new_approach_contents = get_files_contents(client.current_folder, files_to_compare) mypkg = textwrap.dedent(""" @@ -107,11 +109,10 @@ def package_info(self): self.cpp_info.components["mycomponent"].names["cmake_find_package"] = "mycomponent-name" self.cpp_info.components["mycomponent"].names["cmake_find_package_multi"] = "mycomponent-name" self.cpp_info.components["mycomponent"].build_modules.append(os.path.join("lib", "mypkg_bm.cmake")) - self.cpp_info.components["mycomponent"].build_modules["cmake_find_package_multi"].append(os.path.join("lib", "mypkg_bm.cmake")) """) client.save({"mypkg.py": mypkg}) client.run("export mypkg.py") - client.run("install consumer.py") + client.run("install consumer.py -s build_type=Release") old_approach_contents = get_files_contents(client.current_folder, files_to_compare) @@ -141,12 +142,13 @@ def package_info(self): client.save({"mypkg.py": mypkg}) client.run("export mypkg.py") - client.run("install consumer.py --build missing") + client.run("install consumer.py --build missing -s build_type=Release") with open(os.path.join(client.current_folder, "my-generator.txt")) as custom_gen_file: assert "mypkg:mypkg-name" in custom_gen_file.read() - files_to_compare = ["FindMyFileName.cmake", "mypkg.pc"] + files_to_compare = ["FindMyFileName.cmake", "MyFileNameConfig.cmake", "MyFileNameTargets.cmake", + "MyFileNameTarget-release.cmake", "MyFileNameConfigVersion.cmake", "mypkg.pc"] new_approach_contents = get_files_contents(client.current_folder, files_to_compare) mypkg = textwrap.dedent(""" @@ -169,7 +171,7 @@ def package_info(self): """) client.save({"mypkg.py": mypkg}) client.run("create mypkg.py") - client.run("install consumer.py") + client.run("install consumer.py -s build_type=Release") old_approach_contents = get_files_contents(client.current_folder, files_to_compare) From 65d29c308c0f5541b5afbefc9119142ac8c2a13b Mon Sep 17 00:00:00 2001 From: czoido Date: Tue, 6 Apr 2021 18:09:24 +0200 Subject: [PATCH 48/59] move to integration --- .../generators/cpp_info_set_generator_properties_test.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename conans/test/{functional => integration}/generators/cpp_info_set_generator_properties_test.py (100%) diff --git a/conans/test/functional/generators/cpp_info_set_generator_properties_test.py b/conans/test/integration/generators/cpp_info_set_generator_properties_test.py similarity index 100% rename from conans/test/functional/generators/cpp_info_set_generator_properties_test.py rename to conans/test/integration/generators/cpp_info_set_generator_properties_test.py From bd839b35f38e3ba82cce3dba8f8f0e1b69c1d82d Mon Sep 17 00:00:00 2001 From: czoido Date: Tue, 6 Apr 2021 18:10:34 +0200 Subject: [PATCH 49/59] fix name --- conans/test/functional/generators/pkg_config_test.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conans/test/functional/generators/pkg_config_test.py b/conans/test/functional/generators/pkg_config_test.py index c7ffcabf267..d045403ae7b 100644 --- a/conans/test/functional/generators/pkg_config_test.py +++ b/conans/test/functional/generators/pkg_config_test.py @@ -238,7 +238,7 @@ def package_info(self): self.assertIn("bindir=${prefix}/bin", pc_content) self.assertIn("Name: pkg", pc_content) - def test_custom_content(self): + def test_custom_content_components(self): conanfile = textwrap.dedent(""" from conans import ConanFile from conans.tools import save From 95a7d7914532c222c4d08458f09ff41a5c24e624 Mon Sep 17 00:00:00 2001 From: czoido Date: Tue, 6 Apr 2021 18:11:52 +0200 Subject: [PATCH 50/59] revert change --- conans/test/unittests/client/generators/txt/test_dump_load.py | 1 + 1 file changed, 1 insertion(+) diff --git a/conans/test/unittests/client/generators/txt/test_dump_load.py b/conans/test/unittests/client/generators/txt/test_dump_load.py index 6021601aff1..4d695756a53 100644 --- a/conans/test/unittests/client/generators/txt/test_dump_load.py +++ b/conans/test/unittests/client/generators/txt/test_dump_load.py @@ -25,6 +25,7 @@ def test_names_per_generator(self): conanfile.deps_cpp_info.add("pkg_name", DepCppInfo(cpp_info)) content = TXTGenerator(conanfile).content parsed_deps_cpp_info, _, _, _ = TXTGenerator.loads(content, filter_empty=False) + parsed_cpp_info = parsed_deps_cpp_info["pkg_name"] self.assertEqual(parsed_cpp_info.get_name("txt"), "txt_name") self.assertEqual(parsed_cpp_info.get_name("cmake_find_package"), "SpecialName") From 491cc836376ac640659d9db5204fbe69c19e65db Mon Sep 17 00:00:00 2001 From: czoido Date: Tue, 6 Apr 2021 18:58:47 +0200 Subject: [PATCH 51/59] add more tests --- .../cpp_info_set_generator_properties_test.py | 68 ++++++++++++++++++- 1 file changed, 67 insertions(+), 1 deletion(-) diff --git a/conans/test/integration/generators/cpp_info_set_generator_properties_test.py b/conans/test/integration/generators/cpp_info_set_generator_properties_test.py index aeae711b569..fb3b3c27fcd 100644 --- a/conans/test/integration/generators/cpp_info_set_generator_properties_test.py +++ b/conans/test/integration/generators/cpp_info_set_generator_properties_test.py @@ -44,11 +44,16 @@ def content(self): build_module = textwrap.dedent(""" message("I am a build module") """) + + another_build_module = textwrap.dedent(""" + message("I am another build module") + """) + client.save({"consumer.py": GenConanfile("consumer", "1.0").with_requires("mypkg/1.0"). with_generator("custom_generator").with_generator("cmake_find_package"). with_generator("cmake_find_package_multi").with_generator("pkg_config"). with_setting("build_type"), - "mypkg_bm.cmake": build_module}) + "mypkg_bm.cmake": build_module, "mypkg_anootherbm.cmake": another_build_module}) return client @@ -178,6 +183,67 @@ def package_info(self): assert new_approach_contents == old_approach_contents +def test_same_results_specific_generators(setup_client): + client = setup_client + mypkg = textwrap.dedent(""" + import os + from conans import ConanFile, CMake, tools + class MyPkg(ConanFile): + settings = "build_type" + name = "mypkg" + version = "1.0" + exports_sources = ["mypkg_bm.cmake", "mypkg_anootherbm.cmake"] + def package(self): + self.copy("mypkg_bm.cmake", dst="lib") + self.copy("mypkg_anootherbm.cmake", dst="lib") + def package_info(self): + self.cpp_info.set_property("cmake_file_name", "MyFileName", "cmake_find_package") + self.cpp_info.set_property("cmake_file_name", "MyFileNameMulti", "cmake_find_package_multi") + self.cpp_info.set_property("cmake_target_name", "mypkg-name", "cmake_find_package") + self.cpp_info.set_property("cmake_target_name", "mypkg-name-multi", "cmake_find_package_multi") + self.cpp_info.set_property("cmake_build_modules",[os.path.join("lib", + "mypkg_bm.cmake")], "cmake_find_package") + self.cpp_info.set_property("cmake_build_modules",[os.path.join("lib", + "mypkg_anootherbm.cmake")], "cmake_find_package_multi") + """) + + client.save({"mypkg.py": mypkg}) + client.run("export mypkg.py") + + client.run("install consumer.py --build missing -s build_type=Release") + + files_to_compare = ["FindMyFileName.cmake", "MyFileNameMultiConfig.cmake", "MyFileNameMultiTargets.cmake", + "MyFileNameMultiTarget-release.cmake", "MyFileNameMultiConfigVersion.cmake"] + new_approach_contents = get_files_contents(client.current_folder, files_to_compare) + + mypkg = textwrap.dedent(""" + import os + from conans import ConanFile, CMake, tools + class MyPkg(ConanFile): + settings = "build_type" + name = "mypkg" + version = "1.0" + exports_sources = ["mypkg_bm.cmake", "mypkg_anootherbm.cmake"] + def package(self): + self.copy("mypkg_bm.cmake", dst="lib") + self.copy("mypkg_anootherbm.cmake", dst="lib") + def package_info(self): + self.cpp_info.filenames["cmake_find_package"] = "MyFileName" + self.cpp_info.filenames["cmake_find_package_multi"] = "MyFileNameMulti" + self.cpp_info.names["cmake_find_package"] = "mypkg-name" + self.cpp_info.names["cmake_find_package_multi"] = "mypkg-name-multi" + self.cpp_info.build_modules["cmake_find_package"].append(os.path.join("lib", "mypkg_bm.cmake")) + self.cpp_info.build_modules["cmake_find_package_multi"].append(os.path.join("lib", "mypkg_anootherbm.cmake")) + """) + client.save({"mypkg.py": mypkg}) + client.run("create mypkg.py") + client.run("install consumer.py -s build_type=Release") + + old_approach_contents = get_files_contents(client.current_folder, files_to_compare) + + assert new_approach_contents == old_approach_contents + + def test_pkg_config_names(setup_client): client = setup_client mypkg = textwrap.dedent(""" From d83e9795a566b377a2cf15bbb5ff87592a3847d9 Mon Sep 17 00:00:00 2001 From: czoido Date: Tue, 6 Apr 2021 19:03:46 +0200 Subject: [PATCH 52/59] remove argument --- conans/model/build_info.py | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/conans/model/build_info.py b/conans/model/build_info.py index cc2edd9c382..20a25bd218e 100644 --- a/conans/model/build_info.py +++ b/conans/model/build_info.py @@ -222,12 +222,9 @@ def get_filename(self, generator): if result: return result return self.get_name(generator) - + # TODO: Deprecate for 2.0. Use get_property for 2.0 - def get_build_modules(self, generator=None): - if generator: - values_dict = self._generator_properties.get(generator) - return values_dict if values_dict else {} + def get_build_modules(self): default_values_dict = self._generator_properties.get("conan_default_generators_value") default_build_modules_value = default_values_dict.get("cmake_build_modules") if default_values_dict else None ret_dict = {"cmake_find_package": default_build_modules_value, @@ -235,7 +232,7 @@ def get_build_modules(self, generator=None): "cmake": default_build_modules_value, "cmake_multi": default_build_modules_value} if default_build_modules_value else {} for generator, values in self._generator_properties.items(): - if values.get("cmake_build_modules") and generator !="conan_default_generators_value": + if values.get("cmake_build_modules") and generator != "conan_default_generators_value": ret_dict[generator] = values.get("cmake_build_modules") return ret_dict if ret_dict else self.build_modules From 85932a4f5245e6834b6b59a643f069fed5696c13 Mon Sep 17 00:00:00 2001 From: czoido Date: Wed, 7 Apr 2021 10:26:21 +0200 Subject: [PATCH 53/59] review --- conans/model/build_info.py | 27 +++++++++---------- .../build_info/generic_properties_test.py | 4 +++ 2 files changed, 16 insertions(+), 15 deletions(-) diff --git a/conans/model/build_info.py b/conans/model/build_info.py index 20a25bd218e..f78fd9e9f32 100644 --- a/conans/model/build_info.py +++ b/conans/model/build_info.py @@ -225,33 +225,30 @@ def get_filename(self, generator): # TODO: Deprecate for 2.0. Use get_property for 2.0 def get_build_modules(self): - default_values_dict = self._generator_properties.get("conan_default_generators_value") + default_values_dict = self._generator_properties.get(None) default_build_modules_value = default_values_dict.get("cmake_build_modules") if default_values_dict else None ret_dict = {"cmake_find_package": default_build_modules_value, "cmake_find_package_multi": default_build_modules_value, "cmake": default_build_modules_value, "cmake_multi": default_build_modules_value} if default_build_modules_value else {} for generator, values in self._generator_properties.items(): - if values.get("cmake_build_modules") and generator != "conan_default_generators_value": + if generator and values.get("cmake_build_modules"): ret_dict[generator] = values.get("cmake_build_modules") return ret_dict if ret_dict else self.build_modules def set_property(self, property_name, value, generator=None): - generator = generator or "conan_default_generators_value" - gen_dict = self._generator_properties.get(generator) - if gen_dict: - gen_dict.update({property_name: value}) - else: - self._generator_properties.update({generator: {property_name: value}}) + self._generator_properties.setdefault(generator, {})[property_name] = value def get_property(self, property_name, generator=None): - generator = generator or "conan_default_generators_value" - gen_dict = self._generator_properties.get(generator) - if gen_dict and gen_dict.get(property_name): - return gen_dict.get(property_name) - else: - gen_dict = self._generator_properties.get("conan_default_generators_value") - return gen_dict.get(property_name) if gen_dict else None + if generator: + try: + return self._generator_properties[generator][property_name] + except KeyError: + pass + try: + return self._generator_properties[None][property_name] + except KeyError: + pass # Compatibility for 'cppflags' (old style property to allow decoration) def get_cppflags(self): diff --git a/conans/test/unittests/model/build_info/generic_properties_test.py b/conans/test/unittests/model/build_info/generic_properties_test.py index ad30708564f..30ac0f3d5b9 100644 --- a/conans/test/unittests/model/build_info/generic_properties_test.py +++ b/conans/test/unittests/model/build_info/generic_properties_test.py @@ -3,6 +3,10 @@ def test_set_get_properties(): cpp_info = _CppInfo() + + assert not cpp_info.get_property("my_property") + assert not cpp_info.get_property("my_property", "some_generator") + cpp_info.set_property("my_property", "default_value") assert cpp_info.get_property("my_property") == "default_value" # can you do a get_property for just a family without generator? From 97df85e2518b86925e36d588e5173e8aa9991a9c Mon Sep 17 00:00:00 2001 From: czoido Date: Wed, 7 Apr 2021 10:31:58 +0200 Subject: [PATCH 54/59] review --- conans/model/build_info.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/conans/model/build_info.py b/conans/model/build_info.py index f78fd9e9f32..bbe41e6af20 100644 --- a/conans/model/build_info.py +++ b/conans/model/build_info.py @@ -213,7 +213,11 @@ def name(self, value): # TODO: Deprecate for 2.0. Only cmake and pkg_config generators should access this. # Use get_property for 2.0 def get_name(self, generator): - property_name = "cmake_target_name" if "cmake" in generator else "pkg_config_name" + property_name = None + if "cmake" in generator: + property_name = "cmake_target_name" + elif "pkg_config" in generator: + property_name = "pkg_config_name" return self.get_property(property_name, generator) or self.names.get(generator, self._name) # TODO: Deprecate for 2.0. Only cmake generators should access this. Use get_property for 2.0 From e74d73cafe988224ba7cd83d26cb464b52c88c94 Mon Sep 17 00:00:00 2001 From: czoido Date: Wed, 7 Apr 2021 10:35:35 +0200 Subject: [PATCH 55/59] minor refactor --- conans/model/build_info.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/conans/model/build_info.py b/conans/model/build_info.py index bbe41e6af20..e37c3fa6910 100644 --- a/conans/model/build_info.py +++ b/conans/model/build_info.py @@ -229,12 +229,17 @@ def get_filename(self, generator): # TODO: Deprecate for 2.0. Use get_property for 2.0 def get_build_modules(self): - default_values_dict = self._generator_properties.get(None) - default_build_modules_value = default_values_dict.get("cmake_build_modules") if default_values_dict else None + default_build_modules_value = None + try: + default_build_modules_value = self._generator_properties[None]["cmake_build_modules"] + except KeyError: + pass + ret_dict = {"cmake_find_package": default_build_modules_value, "cmake_find_package_multi": default_build_modules_value, "cmake": default_build_modules_value, "cmake_multi": default_build_modules_value} if default_build_modules_value else {} + for generator, values in self._generator_properties.items(): if generator and values.get("cmake_build_modules"): ret_dict[generator] = values.get("cmake_build_modules") From a7851e29e5a12b123b7dc1736125198abe13473b Mon Sep 17 00:00:00 2001 From: czoido Date: Mon, 12 Apr 2021 13:52:01 +0200 Subject: [PATCH 56/59] change name --- conans/client/generators/pkg_config.py | 6 +++--- conans/test/functional/generators/pkg_config_test.py | 7 +++---- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/conans/client/generators/pkg_config.py b/conans/client/generators/pkg_config.py index 1a6e4ef7d48..fbd1726a32d 100644 --- a/conans/client/generators/pkg_config.py +++ b/conans/client/generators/pkg_config.py @@ -81,9 +81,9 @@ def _pc_file_content(self, name, cpp_info, requires_gennames): includedir_vars = varnames lines.extend(dir_lines) - custom_content = cpp_info.get_property("custom_content", self.name) - if custom_content: - lines.append(custom_content) + pkg_config_custom_content = cpp_info.get_property("pkg_config_custom_content", self.name) + if pkg_config_custom_content: + lines.append(pkg_config_custom_content) lines.append("") lines.append("Name: %s" % name) diff --git a/conans/test/functional/generators/pkg_config_test.py b/conans/test/functional/generators/pkg_config_test.py index d045403ae7b..c863f52cb2a 100644 --- a/conans/test/functional/generators/pkg_config_test.py +++ b/conans/test/functional/generators/pkg_config_test.py @@ -222,7 +222,7 @@ def package_info(self): schemasdir=${datadir}/mylib/schemas bindir=${prefix}/bin \""") - self.cpp_info.set_property("custom_content", custom_content, "pkg_config") + self.cpp_info.set_property("pkg_config_custom_content", custom_content) self.cpp_info.includedirs = ["include"] self.cpp_info.libdirs = ["lib"] """) @@ -247,9 +247,8 @@ def test_custom_content_components(self): class PkgConfigConan(ConanFile): def package_info(self): - self.cpp_info.components["mycomponent"].set_property("custom_content", - "componentdir=${prefix}/mydir", - "pkg_config") + self.cpp_info.components["mycomponent"].set_property("pkg_config_custom_content", + "componentdir=${prefix}/mydir") """) client = TestClient() client.save({"conanfile.py": conanfile}) From aed135959acf8a59bc794103a7420a0d72c5d9b8 Mon Sep 17 00:00:00 2001 From: czoido Date: Thu, 15 Apr 2021 09:57:38 +0200 Subject: [PATCH 57/59] fix stylistic things --- .../cpp_info_set_generator_properties_test.py | 44 +++++++++---------- 1 file changed, 20 insertions(+), 24 deletions(-) diff --git a/conans/test/integration/generators/cpp_info_set_generator_properties_test.py b/conans/test/integration/generators/cpp_info_set_generator_properties_test.py index fb3b3c27fcd..55577696fd8 100644 --- a/conans/test/integration/generators/cpp_info_set_generator_properties_test.py +++ b/conans/test/integration/generators/cpp_info_set_generator_properties_test.py @@ -14,17 +14,17 @@ def setup_client(): from conans.model import Generator from conans import ConanFile from conans.model.conan_generator import GeneratorComponentsMixin - import textwrap import os + class custom_generator(GeneratorComponentsMixin, Generator): name = "custom_generator" @property def filename(self): return "my-generator.txt" - def _get_components_custom_names(self, pkg_name, cpp_info): - ret=[] + def _get_components_custom_names(self, cpp_info): + ret = [] for comp_name, comp in self.sorted_components(cpp_info).items(): comp_genname = comp.get_property("custom_name", generator=self.name) ret.append("{}:{}".format(comp.name, comp_genname)) @@ -35,7 +35,7 @@ def content(self): info = [] for pkg_name, cpp_info in self.deps_build_info.dependencies: info.append("{}:{}".format(pkg_name, cpp_info.get_property("custom_name", self.name))) - info.extend(self._get_components_custom_names(pkg_name, cpp_info)) + info.extend(self._get_components_custom_names(cpp_info)) return os.linesep.join(info) """) client.save({"custom_generator.py": custom_generator}) @@ -57,12 +57,8 @@ def content(self): return client -def get_files_contents(folder, filenames): - ret = [] - for filename in filenames: - with open(os.path.join(folder, filename)) as properties_package_file: - ret.append(properties_package_file.read()) - return ret +def get_files_contents(client, filenames): + return [client.load(f) for f in filenames] def test_same_results_components(setup_client): @@ -89,17 +85,17 @@ def package_info(self): client.run("export mypkg.py") client.run("install consumer.py --build missing -s build_type=Release") - with open(os.path.join(client.current_folder, "my-generator.txt")) as custom_gen_file: - assert "mycomponent:mycomponent-name" in custom_gen_file.read() + my_generator = client.load("my-generator.txt") + assert "mycomponent:mycomponent-name" in my_generator files_to_compare = ["FindMyFileName.cmake", "MyFileNameConfig.cmake", "MyFileNameTargets.cmake", "MyFileNameTarget-release.cmake", "MyFileNameConfigVersion.cmake", "mypkg.pc", "mycomponent.pc"] - new_approach_contents = get_files_contents(client.current_folder, files_to_compare) + new_approach_contents = get_files_contents(client, files_to_compare) mypkg = textwrap.dedent(""" import os - from conans import ConanFile, CMake, tools + from conans import ConanFile class MyPkg(ConanFile): settings = "build_type" name = "mypkg" @@ -119,7 +115,7 @@ def package_info(self): client.run("export mypkg.py") client.run("install consumer.py -s build_type=Release") - old_approach_contents = get_files_contents(client.current_folder, files_to_compare) + old_approach_contents = get_files_contents(client, files_to_compare) assert new_approach_contents == old_approach_contents @@ -128,7 +124,7 @@ def test_same_results_without_components(setup_client): client = setup_client mypkg = textwrap.dedent(""" import os - from conans import ConanFile, CMake, tools + from conans import ConanFile class MyPkg(ConanFile): settings = "build_type" name = "mypkg" @@ -154,11 +150,11 @@ def package_info(self): files_to_compare = ["FindMyFileName.cmake", "MyFileNameConfig.cmake", "MyFileNameTargets.cmake", "MyFileNameTarget-release.cmake", "MyFileNameConfigVersion.cmake", "mypkg.pc"] - new_approach_contents = get_files_contents(client.current_folder, files_to_compare) + new_approach_contents = get_files_contents(client, files_to_compare) mypkg = textwrap.dedent(""" import os - from conans import ConanFile, CMake, tools + from conans import ConanFile class MyPkg(ConanFile): settings = "build_type" name = "mypkg" @@ -178,7 +174,7 @@ def package_info(self): client.run("create mypkg.py") client.run("install consumer.py -s build_type=Release") - old_approach_contents = get_files_contents(client.current_folder, files_to_compare) + old_approach_contents = get_files_contents(client, files_to_compare) assert new_approach_contents == old_approach_contents @@ -187,7 +183,7 @@ def test_same_results_specific_generators(setup_client): client = setup_client mypkg = textwrap.dedent(""" import os - from conans import ConanFile, CMake, tools + from conans import ConanFile class MyPkg(ConanFile): settings = "build_type" name = "mypkg" @@ -214,11 +210,11 @@ def package_info(self): files_to_compare = ["FindMyFileName.cmake", "MyFileNameMultiConfig.cmake", "MyFileNameMultiTargets.cmake", "MyFileNameMultiTarget-release.cmake", "MyFileNameMultiConfigVersion.cmake"] - new_approach_contents = get_files_contents(client.current_folder, files_to_compare) + new_approach_contents = get_files_contents(client, files_to_compare) mypkg = textwrap.dedent(""" import os - from conans import ConanFile, CMake, tools + from conans import ConanFile class MyPkg(ConanFile): settings = "build_type" name = "mypkg" @@ -239,7 +235,7 @@ def package_info(self): client.run("create mypkg.py") client.run("install consumer.py -s build_type=Release") - old_approach_contents = get_files_contents(client.current_folder, files_to_compare) + old_approach_contents = get_files_contents(client, files_to_compare) assert new_approach_contents == old_approach_contents @@ -248,7 +244,7 @@ def test_pkg_config_names(setup_client): client = setup_client mypkg = textwrap.dedent(""" import os - from conans import ConanFile, CMake, tools + from conans import ConanFile class MyPkg(ConanFile): settings = "build_type" name = "mypkg" From fe274a463d8761f414e227a25a3dc65f10bc0d4a Mon Sep 17 00:00:00 2001 From: czoido Date: Thu, 15 Apr 2021 11:56:24 +0200 Subject: [PATCH 58/59] cache ret val --- conans/model/build_info.py | 31 ++++++++++++++++++------------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/conans/model/build_info.py b/conans/model/build_info.py index e37c3fa6910..03254bde15e 100644 --- a/conans/model/build_info.py +++ b/conans/model/build_info.py @@ -128,6 +128,7 @@ def __init__(self): self.sysroot = "" self.requires = [] self._build_modules_paths = None + self._build_modules = None self._include_paths = None self._lib_paths = None self._bin_paths = None @@ -229,21 +230,25 @@ def get_filename(self, generator): # TODO: Deprecate for 2.0. Use get_property for 2.0 def get_build_modules(self): - default_build_modules_value = None - try: - default_build_modules_value = self._generator_properties[None]["cmake_build_modules"] - except KeyError: - pass + if self._build_modules: + return self._build_modules + else: + default_build_modules_value = None + try: + default_build_modules_value = self._generator_properties[None]["cmake_build_modules"] + except KeyError: + pass - ret_dict = {"cmake_find_package": default_build_modules_value, - "cmake_find_package_multi": default_build_modules_value, - "cmake": default_build_modules_value, - "cmake_multi": default_build_modules_value} if default_build_modules_value else {} + ret_dict = {"cmake_find_package": default_build_modules_value, + "cmake_find_package_multi": default_build_modules_value, + "cmake": default_build_modules_value, + "cmake_multi": default_build_modules_value} if default_build_modules_value else {} - for generator, values in self._generator_properties.items(): - if generator and values.get("cmake_build_modules"): - ret_dict[generator] = values.get("cmake_build_modules") - return ret_dict if ret_dict else self.build_modules + for generator, values in self._generator_properties.items(): + if generator and values.get("cmake_build_modules"): + ret_dict[generator] = values.get("cmake_build_modules") + self._build_modules = ret_dict if ret_dict else self.build_modules + return self._build_modules def set_property(self, property_name, value, generator=None): self._generator_properties.setdefault(generator, {})[property_name] = value From a4b7e41aaa6c596dbb0d2005ba2468fd28d0ae35 Mon Sep 17 00:00:00 2001 From: memsharded Date: Thu, 15 Apr 2021 14:41:41 +0200 Subject: [PATCH 59/59] correct caching --- conans/model/build_info.py | 37 +++++++++++++++++++------------------ 1 file changed, 19 insertions(+), 18 deletions(-) diff --git a/conans/model/build_info.py b/conans/model/build_info.py index 03254bde15e..8573223d09e 100644 --- a/conans/model/build_info.py +++ b/conans/model/build_info.py @@ -152,10 +152,12 @@ def _filter_paths(self, paths): @property def build_modules_paths(self): if self._build_modules_paths is None: - if isinstance(self.get_build_modules(), list): # FIXME: This should be just a plain dict + if isinstance(self.build_modules, list): # FIXME: This should be just a plain dict conan_v2_error("Use 'self.cpp_info.build_modules[\"\"] = " - "{the_list}' instead".format(the_list=self.get_build_modules())) - self.build_modules = BuildModulesDict.from_list(self.get_build_modules()) + "{the_list}' instead".format(the_list=self.build_modules)) + self.build_modules = BuildModulesDict.from_list(self.build_modules) + # Invalidate necessary, get_build_modules used raise_incorrect_components_definition + self._build_modules = None tmp = dict_to_abs_paths(BuildModulesDict(self.get_build_modules()), self.rootpath) self._build_modules_paths = tmp return self._build_modules_paths @@ -230,25 +232,24 @@ def get_filename(self, generator): # TODO: Deprecate for 2.0. Use get_property for 2.0 def get_build_modules(self): - if self._build_modules: - return self._build_modules - else: - default_build_modules_value = None + if self._build_modules is None: # Not cached yet try: default_build_modules_value = self._generator_properties[None]["cmake_build_modules"] except KeyError: - pass - - ret_dict = {"cmake_find_package": default_build_modules_value, - "cmake_find_package_multi": default_build_modules_value, - "cmake": default_build_modules_value, - "cmake_multi": default_build_modules_value} if default_build_modules_value else {} + ret_dict = {} + else: + ret_dict = {"cmake_find_package": default_build_modules_value, + "cmake_find_package_multi": default_build_modules_value, + "cmake": default_build_modules_value, + "cmake_multi": default_build_modules_value} for generator, values in self._generator_properties.items(): - if generator and values.get("cmake_build_modules"): - ret_dict[generator] = values.get("cmake_build_modules") + if generator: + v = values.get("cmake_build_modules") + if v: + ret_dict[generator] = v self._build_modules = ret_dict if ret_dict else self.build_modules - return self._build_modules + return self._build_modules def set_property(self, property_name, value, generator=None): self._generator_properties.setdefault(generator, {})[property_name] = value @@ -473,7 +474,7 @@ def merge_lists(seq1, seq2): self.frameworkdirs = merge_lists(self.frameworkdirs, dep_cpp_info.framework_paths) self.libs = merge_lists(self.libs, dep_cpp_info.libs) self.frameworks = merge_lists(self.frameworks, dep_cpp_info.frameworks) - self.build_modules = merge_dicts(self.get_build_modules(), dep_cpp_info.build_modules_paths) + self.build_modules = merge_dicts(self.build_modules, dep_cpp_info.build_modules_paths) self.requires = merge_lists(self.requires, dep_cpp_info.requires) self.rootpaths.append(dep_cpp_info.rootpath) @@ -488,7 +489,7 @@ def merge_lists(seq1, seq2): @property def build_modules_paths(self): - return self.get_build_modules() + return self.build_modules @property def include_paths(self):