Esempio n. 1
0
    def test_deps_cpp_info_paths(self):
        deps_cpp_info = DepsCppInfo()

        folder1 = temp_folder()
        dep1 = CppInfo(folder1)
        os.mkdir(os.path.join(folder1, "include"))
        os.mkdir(os.path.join(folder1, "includea"))
        os.mkdir(os.path.join(folder1, "includeb"))
        dep1.components["liba"].includedirs.append("includea")
        dep1.components["libb"].includedirs.append("includeb")
        deps_cpp_info.update(DepCppInfo(dep1), "dep1")

        folder2 = temp_folder()
        dep2 = CppInfo(folder2)
        os.mkdir(os.path.join(folder2, "include"))
        os.mkdir(os.path.join(folder2, "includec"))
        os.mkdir(os.path.join(folder2, "included"))
        dep2.components["libc"].includedirs.append("includec")
        dep2.components["libd"].includedirs.append("included")
        deps_cpp_info.update(DepCppInfo(dep2), "dep2")

        self.assertListEqual([os.path.join(folder1, "include"), os.path.join(folder1, "includea"),
                              os.path.join(folder1, "includeb")],
                             deps_cpp_info["dep1"].include_paths)
        self.assertListEqual([os.path.join(folder2, "include"), os.path.join(folder2, "includec"),
                              os.path.join(folder2, "included")],
                             deps_cpp_info["dep2"].include_paths)
        self.assertListEqual([os.path.join(folder1, "include"), os.path.join(folder1, "includea"),
                              os.path.join(folder1, "includeb"), os.path.join(folder2, "include"),
                              os.path.join(folder2, "includec"), os.path.join(folder2, "included")],
                             deps_cpp_info.include_paths)
Esempio n. 2
0
    def test_deps_cpp_info_libs_release_debug(self):
        deps_cpp_info = DepsCppInfo()

        dep1 = CppInfo("dep1", "root")
        dep1.components["liba"].libs.append("liba")
        with self.assertRaises(AttributeError):
            dep1.release.components["libb"].libs.append("libb")
        with self.assertRaises(AttributeError):
            dep1.debug.components["libb"].libs.append("libb_d")
        deps_cpp_info.add("dep1", DepCppInfo(dep1))

        dep2 = CppInfo("dep2", "root")
        dep2.release.libs.append("libdep2")
        dep2.debug.libs.append("libdep2_d")
        with self.assertRaises(AttributeError):
            dep2.components["libc"].release.libs.append("libc")
        with self.assertRaises(AttributeError):
            dep2.components["libc"].debug.libs.append("libc_d")
        dep2.components["libc"].libs.append("libc")
        dep2.components["libc"].libs.append("libc2")
        deps_cpp_info.add("dep2", DepCppInfo(dep2))

        self.assertListEqual(["liba"], deps_cpp_info["dep1"].libs)
        self.assertListEqual(["libc", "libc2"], deps_cpp_info["dep2"].libs)
        self.assertListEqual(["liba", "libc", "libc2"], deps_cpp_info.libs)

        self.assertListEqual([], deps_cpp_info["dep1"].release.libs)
        self.assertListEqual(["libdep2"], deps_cpp_info["dep2"].release.libs)
        self.assertListEqual(["libdep2"], deps_cpp_info.release.libs)

        self.assertListEqual([], deps_cpp_info["dep1"].debug.libs)
        self.assertListEqual(["libdep2_d"], deps_cpp_info["dep2"].debug.libs)
        self.assertListEqual(["libdep2_d"], deps_cpp_info.debug.libs)
Esempio n. 3
0
 def cppinfo_inexistent_component_dep_test(self):
     info = CppInfo(None)
     info.components["LIB1"].requires = ["LIB2"]
     with six.assertRaisesRegex(self, ConanException, "Component 'LIB1' "
                                                      "declares a missing dependency"):
         DepCppInfo(info).libs
     info.components["LIB1"].requires = ["::LIB2"]
     with six.assertRaisesRegex(self, ConanException, "Leading character '::' not allowed in "
                                                      "LIB1 requires"):
         DepCppInfo(info).libs
Esempio n. 4
0
 def cpp_info_system_libs_test(self):
     info1 = CppInfo("dep1", "folder1")
     info1.system_libs = ["sysdep1"]
     info2 = CppInfo("dep2", "folder2")
     info2.system_libs = ["sysdep2", "sysdep3"]
     deps_cpp_info = DepsCppInfo()
     deps_cpp_info.add("dep1", DepCppInfo(info1))
     deps_cpp_info.add("dep2", DepCppInfo(info2))
     self.assertListEqual(["sysdep1", "sysdep2", "sysdep3"], list(deps_cpp_info.system_libs))
     self.assertListEqual(["sysdep1"], list(deps_cpp_info["dep1"].system_libs))
     self.assertListEqual(["sysdep2", "sysdep3"], list(deps_cpp_info["dep2"].system_libs))
Esempio n. 5
0
 def cppinfo_inexistent_component_dep_test(self):
     info = CppInfo("", None)
     info.components["LIB1"].requires = ["LIB2"]
     with six.assertRaisesRegex(
             self, ConanException, "Component 'LIB1' required components "
             "not found in this package: 'LIB2'"):
         _ = DepCppInfo(info).libs
     info.components["LIB1"].requires = ["::LIB2"]
     with six.assertRaisesRegex(
             self, ConanException, "Leading character '::' not allowed in "
             "LIB1 requires"):
         _ = DepCppInfo(info).libs
Esempio n. 6
0
    def _call_package_info(self, conanfile, package_folder, ref):
        conanfile.cpp_info = CppInfo(conanfile.name, package_folder)
        conanfile.cpp_info.version = conanfile.version
        conanfile.cpp_info.description = conanfile.description
        conanfile.env_info = EnvInfo()
        conanfile.user_info = UserInfo()

        # Get deps_cpp_info from upstream nodes
        public_deps = [name for name, req in conanfile.requires.items() if not req.private
                       and not req.override]
        conanfile.cpp_info.public_deps = public_deps
        # Once the node is build, execute package info, so it has access to the
        # package folder and artifacts
        conan_v2 = get_env(CONAN_V2_MODE_ENVVAR, False)
        with pythonpath(conanfile) if not conan_v2 else no_op():  # Minimal pythonpath, not the whole context, make it 50% slower
            with tools.chdir(package_folder):
                with conanfile_exception_formatter(str(conanfile), "package_info"):
                    conanfile.package_folder = package_folder
                    conanfile.source_folder = None
                    conanfile.build_folder = None
                    conanfile.install_folder = None
                    self._hook_manager.execute("pre_package_info", conanfile=conanfile,
                                               reference=ref)
                    conanfile.package_info()
                    if conanfile._conan_dep_cpp_info is None:
                        try:
                            conanfile.cpp_info._raise_incorrect_components_definition(
                                conanfile.name, conanfile.requires)
                        except ConanException as e:
                            raise ConanException("%s package_info(): %s" % (str(conanfile), e))
                        conanfile._conan_dep_cpp_info = DepCppInfo(conanfile.cpp_info)
                    self._hook_manager.execute("post_package_info", conanfile=conanfile,
                                               reference=ref)
Esempio n. 7
0
    def help_test(self):
        deps_env_info = DepsEnvInfo()
        deps_cpp_info = DepsCppInfo()

        child = CppInfo("Boost", "F:")
        child.filter_empty = False
        child.includedirs.append("ChildrenPath")
        child.cxxflags.append("cxxmyflag")
        deps_cpp_info.add("Boost", DepCppInfo(child))

        fakeconan = namedtuple(
            "Conanfile",
            "deps_cpp_info cpp_info deps_env_info env_info user_info deps_user_info"
        )
        output = TXTGenerator(
            fakeconan(deps_cpp_info, None, deps_env_info, None, {},
                      defaultdict(dict))).content
        deps_cpp_info2, _, _, _ = TXTGenerator.loads(output)
        self.assertEqual(deps_cpp_info.configs, deps_cpp_info2.configs)
        self.assertEqual(deps_cpp_info.includedirs, deps_cpp_info2.includedirs)
        self.assertEqual(deps_cpp_info.libdirs, deps_cpp_info2.libdirs)
        self.assertEqual(deps_cpp_info.bindirs, deps_cpp_info2.bindirs)
        self.assertEqual(deps_cpp_info.libs, deps_cpp_info2.libs)
        self.assertEqual(len(deps_cpp_info._dependencies),
                         len(deps_cpp_info2._dependencies))
        self.assertEqual(deps_cpp_info["Boost"].includedirs,
                         deps_cpp_info2["Boost"].includedirs)
        self.assertEqual(deps_cpp_info["Boost"].cxxflags,
                         deps_cpp_info2["Boost"].cxxflags)
        self.assertEqual(deps_cpp_info["Boost"].cxxflags, ["cxxmyflag"])
Esempio n. 8
0
 def system_frameworks_libs_test(self):
     # https://github.com/conan-io/conan/issues/7301
     conanfile = ConanFile(TestBufferConanOutput(), None)
     conanfile.initialize(Settings({}), EnvValues())
     cpp_info = CppInfo("MyPkg", "/rootpath")
     cpp_info.version = "0.1"
     cpp_info.libs = ["mypkg"]
     cpp_info.system_libs = ["pthread"]
     cpp_info.frameworks = ["cocoa"]
     cpp_info.frameworkdirs = ["frameworks"]
     cpp_info.filter_empty = False
     conanfile.deps_cpp_info.add("MyPkg", DepCppInfo(cpp_info))
     generator = SConsGenerator(conanfile)
     content = generator.content
     scons_lines = content.splitlines()
     self.assertIn('        "LIBS"        : [\'mypkg\', \'pthread\'],',
                   scons_lines)
     self.assertIn('        "FRAMEWORKS"  : [\'cocoa\'],', scons_lines)
     if platform.system() == "Windows":
         self.assertIn(
             '        "FRAMEWORKPATH"  : [\'/rootpath\\\\frameworks\'],',
             scons_lines)
     else:
         self.assertIn(
             '        "FRAMEWORKPATH"  : [\'/rootpath/frameworks\'],',
             scons_lines)
     self.assertIn('    "MyPkg_version" : "0.1",', scons_lines)
Esempio n. 9
0
def test_cpp_info_name_cmakedeps_components():
    conanfile = ConanFile(Mock(), None)
    conanfile.settings = "os", "compiler", "build_type", "arch"
    conanfile.initialize(
        Settings({
            "os": ["Windows"],
            "compiler": ["gcc"],
            "build_type": ["Release"],
            "arch": ["x86"]
        }), EnvValues())

    cpp_info = CppInfo("mypkg", "dummy_root_folder1")
    cpp_info.names["cmake_find_package_multi"] = "GlobakPkgName1"
    cpp_info.components["mycomp"].names[
        "cmake_find_package_multi"] = "MySuperPkg1"
    cpp_info.filenames["cmake_find_package_multi"] = "ComplexFileName1"
    conanfile.deps_cpp_info.add("mypkg", DepCppInfo(cpp_info))

    cmakedeps = CMakeDeps(conanfile)
    files = cmakedeps.content
    assert "TARGET GlobakPkgName1::MySuperPkg1" in files[
        "ComplexFileName1Config.cmake"]

    with pytest.raises(
            ConanException,
            match="'mypkg' defines information for 'cmake_find_package_multi'"
    ):
        with environment_append({CONAN_V2_MODE_ENVVAR: "1"}):
            _ = cmakedeps.content
Esempio n. 10
0
    def _content(self):
        # We cannot use self._conanfile.warn(), because that fails for virtual conanfile
        print("*** The 'msbuild' generator is EXPERIMENTAL ***")
        if not self._conanfile.settings.get_safe("build_type"):
            raise ConanException("The 'msbuild' generator requires a 'build_type' setting value")
        result = {}
        general_name = "conandeps.props"
        conf_name = self._config_filename()
        condition = self._condition()
        # Include all direct build_requires for host context. This might change
        direct_deps = self._conanfile.dependencies.host_requires
        result[general_name] = self._all_props_file(general_name, direct_deps)
        for dep in self._conanfile.dependencies.transitive_host_requires:
            dep_name = dep.ref.name
            cpp_info = DepCppInfo(dep.cpp_info)  # To account for automatic component aggregation
            public_deps = [d.ref.name for d in dep.dependencies.requires]
            # One file per configuration, with just the variables
            vars_props_name = "conan_%s_vars%s.props" % (dep_name, conf_name)
            result[vars_props_name] = self._vars_props_file(dep_name, cpp_info, public_deps)
            props_name = "conan_%s%s.props" % (dep_name, conf_name)
            result[props_name] = self._conf_props_file(dep_name, vars_props_name, public_deps)

            # The entry point for each package, it will have conditionals to the others
            file_dep_name = "conan_%s.props" % dep_name
            dep_content = self._dep_props_file(dep_name, file_dep_name, props_name, condition)
            result[file_dep_name] = dep_content

        return result
Esempio n. 11
0
 def test_cpp_info_build_modules(self):
     folder = temp_folder()
     info = CppInfo("myname", folder)
     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.debug.build_modules["other_gen"] = ["mod-release.cmake"]
     deps_cpp_info = DepsCppInfo()
     deps_cpp_info.add("myname", DepCppInfo(info))
     for gen in [
             "cmake", "cmake_multi", "cmake_find_package",
             "cmake_find_package_multi"
     ]:
         self.assertListEqual([
             os.path.join(folder, "old.cmake"),
             os.path.join(folder, "other_old.cmake")
         ], list(deps_cpp_info["myname"].build_modules_paths[gen]))
     self.assertListEqual(
         [os.path.join(folder, "my_module.cmake")],
         list(deps_cpp_info["myname"].build_modules_paths["generator"]))
     self.assertListEqual([
         os.path.join(folder, "mod-release.cmake")
     ], list(
         deps_cpp_info["myname"].debug.build_modules_paths["other_gen"]))
Esempio n. 12
0
 def cpp_info_components_requires_loop_test(self):
     info = CppInfo("", "")
     info.components["LIB1"].requires = ["LIB1"]
     msg = "There is a dependency loop in 'self.cpp_info.components' requires"
     with six.assertRaisesRegex(self, ConanException, msg):
         DepCppInfo(info).libs
     info = CppInfo("", "")
     info.components["LIB1"].requires = ["LIB2"]
     info.components["LIB2"].requires = ["LIB1", "LIB2"]
     with six.assertRaisesRegex(self, ConanException, msg):
         DepCppInfo(info).build_paths
     info = CppInfo("", "")
     info.components["LIB1"].requires = ["LIB2"]
     info.components["LIB2"].requires = ["LIB3"]
     info.components["LIB3"].requires = ["LIB1"]
     with six.assertRaisesRegex(self, ConanException, msg):
         DepCppInfo(info).defines
Esempio n. 13
0
 def cpp_info_name_test(self):
     folder = temp_folder()
     info = CppInfo("myname", folder)
     info.name = "MyName"
     info.names["my_generator"] = "MyNameForMyGenerator"
     deps_cpp_info = DepsCppInfo()
     deps_cpp_info.add("myname", DepCppInfo(info))
     self.assertIn("MyName", deps_cpp_info["myname"].get_name("my_undefined_generator"))
     self.assertIn("MyNameForMyGenerator", deps_cpp_info["myname"].get_name("my_generator"))
Esempio n. 14
0
    def configs_test(self):
        deps_cpp_info = DepsCppInfo()
        deps_cpp_info.filter_empty = False
        child = CppInfo("Boost", "F:/")
        child.filter_empty = False
        child.version = "<version>"
        child.includedirs.append("ChildrenPath")
        child.debug.includedirs.append("ChildrenDebugPath")
        child.cxxflags.append("cxxmyflag")
        child.debug.cxxflags.append("cxxmydebugflag")
        child.libs.extend(["math"])
        child.debug.libs.extend(["debug_Lib"])
        deps_cpp_info.add("Boost", DepCppInfo(child))

        deps_env_info = DepsEnvInfo()
        env_info_lib1 = EnvInfo()
        env_info_lib1.var = "32"
        env_info_lib1.othervar.append("somevalue")
        deps_env_info.update(env_info_lib1, "LIB1")

        deps_user_info = DepsUserInfo()
        deps_user_info["LIB2"].myuservar = "23"

        fakeconan = namedtuple("Conanfile", "deps_cpp_info cpp_info deps_env_info env_info user_info deps_user_info")
        output = TXTGenerator(fakeconan(deps_cpp_info, None, deps_env_info, deps_user_info, {}, defaultdict(dict))).content

        deps_cpp_info2, _, deps_env_info2, _ = TXTGenerator.loads(output, filter_empty=False)
        self.assertEqual(deps_cpp_info.includedirs, deps_cpp_info2.includedirs)
        self.assertEqual(deps_cpp_info.libdirs, deps_cpp_info2.libdirs)
        self.assertEqual(deps_cpp_info.bindirs, deps_cpp_info2.bindirs)
        self.assertEqual(deps_cpp_info.libs, deps_cpp_info2.libs)
        self.assertEqual(len(deps_cpp_info._dependencies),
                         len(deps_cpp_info2._dependencies))
        self.assertEqual(deps_cpp_info["Boost"].includedirs,
                         deps_cpp_info2["Boost"].includedirs)
        self.assertEqual(deps_cpp_info["Boost"].cxxflags,
                         deps_cpp_info2["Boost"].cxxflags)
        self.assertEqual(deps_cpp_info["Boost"].cxxflags, ["cxxmyflag"])

        self.assertEqual(deps_cpp_info.debug.includedirs, deps_cpp_info2.debug.includedirs)
        self.assertEqual(deps_cpp_info.debug.includedirs, ['F:/include', 'F:/ChildrenDebugPath'])

        self.assertEqual(deps_cpp_info.debug.libs, deps_cpp_info2.debug.libs)
        self.assertEqual(deps_cpp_info.debug.libs, ["debug_Lib"])

        self.assertEqual(deps_cpp_info["Boost"].debug.includedirs,
                         deps_cpp_info2["Boost"].debug.includedirs)
        self.assertEqual(deps_cpp_info["Boost"].debug.includedirs, ['include', 'ChildrenDebugPath'])
        self.assertEqual(deps_cpp_info["Boost"].debug.cxxflags,
                         deps_cpp_info2["Boost"].debug.cxxflags)
        self.assertEqual(deps_cpp_info["Boost"].debug.cxxflags, ["cxxmydebugflag"])

        self.assertEqual(deps_env_info["LIB1"].var, "32")
        self.assertEqual(deps_env_info["LIB1"].othervar, ["somevalue"])

        self.assertEqual(deps_user_info["LIB2"].myuservar, "23")
Esempio n. 15
0
 def cpp_info_build_modules_test(self):
     folder = temp_folder()
     info = CppInfo("myname", folder)
     info.build_modules.append("my_module.cmake")
     info.debug.build_modules = ["mod-release.cmake"]
     deps_cpp_info = DepsCppInfo()
     deps_cpp_info.add("myname", DepCppInfo(info))
     self.assertListEqual([os.path.join(folder, "my_module.cmake")],
                          list(deps_cpp_info["myname"].build_modules_paths))
     self.assertListEqual([os.path.join(folder, "mod-release.cmake")],
                          list(deps_cpp_info["myname"].debug.build_modules_paths))
Esempio n. 16
0
 def test_exelinkflags(self):
     conanfile = ConanFile(Mock(), None)
     conanfile.initialize(Settings({}), EnvValues())
     framework_path = os.getcwd()  # must exist, otherwise filtered by framework_paths
     cpp_info = CppInfo("MyPkg", "/rootpath")
     cpp_info.exelinkflags = ["-llibrary_for_exe"]
     conanfile.deps_cpp_info.add("MyPkg", DepCppInfo(cpp_info))
     generator = QmakeGenerator(conanfile)
     content = generator.content
     qmake_lines = content.splitlines()
     self.assertIn('CONAN_QMAKE_LFLAGS_APP += -llibrary_for_exe', qmake_lines)
Esempio n. 17
0
    def test_deps_cpp_info_libs(self):
        deps_cpp_info = DepsCppInfo()

        dep1 = CppInfo("dep1", "root")
        dep1.components["liba"].libs.append("liba")
        dep1.components["libb"].libs.append("libb")
        deps_cpp_info.add("dep1", DepCppInfo(dep1))

        dep2 = CppInfo("dep2", "root")
        dep2.components["libc"].libs.append("libc")
        dep2.components["libd"].libs.append("libd")
        deps_cpp_info.add("dep2", DepCppInfo(dep2))

        dep3 = CppInfo("dep3", "root")
        dep3.libs.append("libdep3")
        deps_cpp_info.add("dep3", DepCppInfo(dep3))

        self.assertListEqual(["liba", "libb"], deps_cpp_info["dep1"].libs)
        self.assertListEqual(["libc", "libd"], deps_cpp_info["dep2"].libs)
        self.assertListEqual(["libdep3"], deps_cpp_info["dep3"].libs)
        self.assertListEqual(["liba", "libb", "libc", "libd", "libdep3"],
                             deps_cpp_info.libs)
Esempio n. 18
0
 def test_system_libs(self):
     # https://github.com/conan-io/conan/issues/7558
     conanfile = ConanFile(TestBufferConanOutput(), None)
     conanfile.initialize(Settings({}), EnvValues())
     cpp_info = CppInfo("MyPkg", "/rootpath")
     cpp_info.libs = ["mypkg"]
     cpp_info.system_libs = ["pthread"]
     conanfile.deps_cpp_info.add("MyPkg", DepCppInfo(cpp_info))
     generator = QmakeGenerator(conanfile)
     content = generator.content
     qmake_lines = content.splitlines()
     self.assertIn('CONAN_LIBS += -lmypkg', qmake_lines)
     self.assertIn('CONAN_SYSTEMLIBS += -lpthread', qmake_lines)
Esempio n. 19
0
 def test_frameworks(self):
     conanfile = ConanFile(Mock(), None)
     conanfile.initialize(Settings({}), EnvValues())
     framework_path = os.getcwd()  # must exist, otherwise filtered by framework_paths
     cpp_info = CppInfo("MyPkg", "/rootpath")
     cpp_info.frameworks = ["HelloFramework"]
     cpp_info.frameworkdirs = [framework_path]
     conanfile.deps_cpp_info.add("MyPkg", DepCppInfo(cpp_info))
     generator = QmakeGenerator(conanfile)
     content = generator.content
     qmake_lines = content.splitlines()
     self.assertIn('CONAN_FRAMEWORKS += -framework HelloFramework', qmake_lines)
     self.assertIn('CONAN_FRAMEWORK_PATHS += -F%s' % framework_path, qmake_lines)
Esempio n. 20
0
 def test_deps_cpp_info_components_includedirs(self):
     info = CppInfo("my_lib", "root")
     info.components["component"].includedirs = ["include1", "include2"]
     info.components["component"].filter_empty = False
     dep_info = DepCppInfo(info)
     expected = [
         os.path.join("root", "include1"),
         os.path.join("root", "include2")
     ]
     self.assertListEqual(expected, list(dep_info.include_paths))
     deps_cpp_info = DepsCppInfo()
     deps_cpp_info.add("my_lib", dep_info)
     self.assertListEqual(expected, list(deps_cpp_info.includedirs))
Esempio n. 21
0
 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
     deps_cpp_info = DepsCppInfo()
     deps_cpp_info.add("myname", DepCppInfo(info))
     for gen in [
             "cmake", "cmake_multi", "cmake_find_package",
             "cmake_find_package_multi"
     ]:
         assert list(deps_cpp_info["myname"].build_modules_paths[gen]) ==\
                [os.path.join(folder, "old.cmake")]
Esempio n. 22
0
 def deps_cpp_info_components_test(self):
     folder = temp_folder()
     info = CppInfo(folder)
     # Create file so path is not cleared
     save(os.path.join(folder, "include", "my_file.h"), "")
     info.components["Component"].libs = ["libcomp"]
     dep_info = DepCppInfo(info)
     deps_cpp_info = DepsCppInfo()
     deps_cpp_info.update(dep_info, "my_lib")
     self.assertListEqual(["libcomp"], deps_cpp_info.libs)
     self.assertListEqual(["libcomp"], deps_cpp_info["my_lib"].components["Component"].libs)
     self.assertListEqual([os.path.join(folder, "include")], deps_cpp_info.include_paths)
     self.assertListEqual([os.path.join(folder, "include")],
                          deps_cpp_info["my_lib"].components["Component"].include_paths)
Esempio n. 23
0
 def component_default_dirs_deps_cpp_info_test(self):
     folder = temp_folder()
     info = CppInfo(folder)
     info.components["Component"]
     info.components["Component"].filter_empty = False  # For testing purposes
     dep_info = DepCppInfo(info)
     deps_cpp_info = DepsCppInfo()
     deps_cpp_info.update(dep_info, "my_lib")
     self.assertListEqual([os.path.join(folder, "include")], deps_cpp_info.includedirs)
     self.assertListEqual([], deps_cpp_info.srcdirs)
     self.assertListEqual([os.path.join(folder, "lib")], deps_cpp_info.libdirs)
     self.assertListEqual([os.path.join(folder, "bin")], deps_cpp_info.bindirs)
     self.assertListEqual([os.path.join(folder, "")], deps_cpp_info.builddirs)
     self.assertListEqual([os.path.join(folder, "res")], deps_cpp_info.resdirs)
     self.assertListEqual([os.path.join(folder, "Frameworks")], deps_cpp_info.frameworkdirs)
Esempio n. 24
0
    def components_libs_order_test(self):
        info = CppInfo("dep1", "")
        info.components["liba"].libs = ["liba"]
        info.components["libb"].libs = ["libb"]
        dep_cpp_info = DepCppInfo(info)
        self.assertListEqual(["liba", "libb"], dep_cpp_info.libs)
        deps_cpp_info = DepsCppInfo()
        deps_cpp_info.add("dep1", dep_cpp_info)
        self.assertListEqual(["liba", "libb"], deps_cpp_info["dep1"].libs)
        self.assertListEqual(["liba", "libb"], list(deps_cpp_info.libs))

        info = CppInfo("dep1", "")
        info.components["liba"].libs = ["liba"]
        info.components["libb"].libs = ["libb"]
        dep_cpp_info = DepCppInfo(info)
        info2 = CppInfo("dep2", "")
        info2.components["libc"].libs = ["libc"]
        dep_cpp_info2 = DepCppInfo(info2)
        deps_cpp_info = DepsCppInfo()
        # Update in reverse order
        deps_cpp_info.add("dep2", dep_cpp_info2)
        deps_cpp_info.add("dep1", dep_cpp_info)
        self.assertListEqual(["liba", "libb"], deps_cpp_info["dep1"].libs)
        self.assertListEqual(["libc"], deps_cpp_info["dep2"].libs)
        self.assertListEqual(["libc", "liba", "libb"],
                             list(deps_cpp_info.libs))

        info = CppInfo("dep1", "")
        info.components["liba"].libs = ["liba"]
        info.components["libb"].libs = ["libb"]
        info.components["libb"].requires = ["liba"]
        dep_cpp_info = DepCppInfo(info)
        self.assertListEqual(["libb", "liba"], dep_cpp_info.libs)
        deps_cpp_info = DepsCppInfo()
        deps_cpp_info.add("dep1", dep_cpp_info)
        self.assertListEqual(["libb", "liba"], deps_cpp_info["dep1"].libs)
        self.assertListEqual(["libb", "liba"], list(deps_cpp_info.libs))

        info = CppInfo("dep1", "")
        info.components["liba"].libs = ["liba"]
        info.components["libb"].libs = ["libb"]
        info.components["libb"].requires = ["liba"]
        dep_cpp_info = DepCppInfo(info)
        info2 = CppInfo("dep2", "")
        info2.components["libc"].libs = ["libc"]
        dep_cpp_info2 = DepCppInfo(info2)
        deps_cpp_info = DepsCppInfo()
        # Update in reverse order
        deps_cpp_info.add("dep2", dep_cpp_info2)
        deps_cpp_info.add("dep1", dep_cpp_info)
        self.assertListEqual(["libb", "liba"], deps_cpp_info["dep1"].libs)
        self.assertListEqual(["libc"], deps_cpp_info["dep2"].libs)
        self.assertListEqual(["libc", "libb", "liba"],
                             list(deps_cpp_info.libs))
Esempio n. 25
0
    def test_names_per_generator(self):
        cpp_info = CppInfo("pkg_name", "root")
        cpp_info.name = "name"
        cpp_info.names["txt"] = "txt_name"
        cpp_info.names["cmake_find_package"] = "SpecialName"
        cpp_info.filenames["cmake_find_package"] = "SpecialFileName"
        conanfile = ConanFile(TestBufferConanOutput(), 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"]
        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")
        self.assertEqual(parsed_cpp_info.get_name("pkg_config"), "pkg_name")
Esempio n. 26
0
        def merge(dep):
            dep_cpp_info = DepCppInfo(dep.cpp_info)  # To deal with components
            self.system_libs = merge_lists(self.system_libs, dep_cpp_info.system_libs)
            self.include_paths = merge_lists(self.include_paths, dep_cpp_info.include_paths)
            self.lib_paths = merge_lists(self.lib_paths, dep_cpp_info.lib_paths)
            self.framework_paths = merge_lists(self.framework_paths, 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)

            # Note these are in reverse order
            self.defines = merge_lists(dep_cpp_info.defines, self.defines)
            self.cxxflags = merge_lists(dep_cpp_info.cxxflags, self.cxxflags)
            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)

            if not self.sysroot:
                self.sysroot = dep_cpp_info.sysroot
Esempio n. 27
0
    def test_types(self):
        deps_cpp_info = DepsCppInfo()
        cpp_info = CppInfo("pkg", "rootpath")
        cpp_info.version = "version"
        cpp_info.libs = ["lib1", "lib2"]
        cpp_info.includedirs = ["include1"]
        deps_cpp_info.add("pkg", DepCppInfo(cpp_info))

        info_for_package = deps_cpp_info["pkg"]

        # Documented as list for 'self.cpp_info' object
        self.assertIsInstance(info_for_package.includedirs, list)
        self.assertIsInstance(info_for_package.libdirs, list)
        self.assertIsInstance(info_for_package.resdirs, list)
        self.assertIsInstance(info_for_package.bindirs, list)
        self.assertIsInstance(info_for_package.builddirs, list)
        self.assertIsInstance(info_for_package.libs, list)
        self.assertIsInstance(info_for_package.defines, list)
        self.assertIsInstance(info_for_package.cflags, list)
        self.assertIsInstance(info_for_package.cppflags, list)
        self.assertIsInstance(info_for_package.cxxflags, list)
        self.assertIsInstance(info_for_package.sharedlinkflags, list)
        self.assertIsInstance(info_for_package.exelinkflags, list)
        self.assertIsInstance(info_for_package.frameworks, list)
        self.assertIsInstance(info_for_package.frameworkdirs, list)
        self.assertIsInstance(info_for_package.rootpath, six.string_types)
        self.assertIsInstance(info_for_package.name, six.string_types)
        self.assertIsInstance(info_for_package.system_libs, list)
        self.assertIsInstance(info_for_package.build_modules, list)
        self.assertIsInstance(info_for_package.components, dict)

        # Documented as list for `deps_cpp_info["pkg"]`
        self.assertIsInstance(info_for_package.include_paths, list)
        self.assertIsInstance(info_for_package.lib_paths, list)
        self.assertIsInstance(info_for_package.bin_paths, list)
        self.assertIsInstance(info_for_package.build_paths, list)
        self.assertIsInstance(info_for_package.res_paths, list)
        self.assertIsInstance(info_for_package.framework_paths, list)
        self.assertIsInstance(info_for_package.build_modules_paths, list)
        self.assertIsInstance(info_for_package.get_name("generator"),
                              six.string_types)
        self.assertIsInstance(info_for_package.version, six.string_types)
        self.assertIsInstance(info_for_package.components, dict)
Esempio n. 28
0
    def _call_package_info(self, conanfile, package_folder, ref):
        conanfile.cpp_info = CppInfo(conanfile.name, package_folder)
        conanfile.cpp_info.version = conanfile.version
        conanfile.cpp_info.description = conanfile.description
        conanfile.env_info = EnvInfo()
        conanfile.user_info = UserInfo()

        # Get deps_cpp_info from upstream nodes
        public_deps = [
            name for name, req in conanfile.requires.items()
            if not req.private and not req.override
        ]
        conanfile.cpp_info.public_deps = public_deps
        # Once the node is build, execute package info, so it has access to the
        # package folder and artifacts
        # Minimal pythonpath, not the whole context, make it 50% slower
        # FIXME Conan 2.0, Remove old ways of reusing python code
        with pythonpath(conanfile):
            with tools.chdir(package_folder):
                with conanfile_exception_formatter(str(conanfile),
                                                   "package_info"):
                    conanfile.layout.set_base_package_folder(package_folder)
                    conanfile.layout.set_base_source_folder(None)
                    conanfile.layout.set_base_build_folder(None)
                    conanfile.layout.set_base_install_folder(None)
                    self._hook_manager.execute("pre_package_info",
                                               conanfile=conanfile,
                                               reference=ref)
                    conanfile.package_info()
                    if conanfile._conan_dep_cpp_info is None:
                        try:
                            conanfile.cpp_info._raise_incorrect_components_definition(
                                conanfile.name, conanfile.requires)
                        except ConanException as e:
                            raise ConanException("%s package_info(): %s" %
                                                 (str(conanfile), e))
                        conanfile._conan_dep_cpp_info = DepCppInfo(
                            conanfile.cpp_info)
                    self._hook_manager.execute("post_package_info",
                                               conanfile=conanfile,
                                               reference=ref)
Esempio n. 29
0
 def variables_setup_test(self):
     conanfile = ConanFile(TestBufferConanOutput(), None)
     conanfile.initialize(Settings({}), EnvValues())
     ref = ConanFileReference.loads("MyPkg/0.1@lasote/stables")
     cpp_info = CppInfo(ref.name, "")
     cpp_info.defines = ["MYDEFINE1"]
     cpp_info.version = "0.1"
     conanfile.deps_cpp_info.add(ref.name, cpp_info)
     ref = ConanFileReference.loads("MyPkg2/3.2.3@lasote/stables")
     cpp_info = CppInfo(ref.name, "")
     cpp_info.defines = ["MYDEFINE2"]
     cpp_info.version = "3.2.3"
     conanfile.deps_cpp_info.add(ref.name, DepCppInfo(cpp_info))
     generator = SConsGenerator(conanfile)
     content = generator.content
     scons_lines = content.splitlines()
     self.assertIn("        \"CPPDEFINES\"  : ['MYDEFINE2', 'MYDEFINE1'],",
                   scons_lines)
     self.assertIn("        \"CPPDEFINES\"  : ['MYDEFINE1'],", scons_lines)
     self.assertIn("        \"CPPDEFINES\"  : ['MYDEFINE2'],", scons_lines)
     self.assertIn('    "conan_version" : "None",', scons_lines)
     self.assertIn('    "MyPkg_version" : "0.1",', scons_lines)
     self.assertIn('    "MyPkg2_version" : "3.2.3",', scons_lines)
Esempio n. 30
0
    def test_deps_cpp_info_libs_defines_flags(self):
        deps_cpp_info = DepsCppInfo()

        dep1 = CppInfo("dep1", "root")
        dep1.components["liba"].libs.append("liba")
        dep1.components["liba"].defines.append("DEFINEA")
        dep1.components["liba"].system_libs.append("sysa")
        dep1.components["liba"].cxxflags.append("cxxflaga")
        dep1.components["liba"].cflags.append("cflaga")
        dep1.components["liba"].sharedlinkflags.append("slinka")
        dep1.components["liba"].frameworks.append("frameworka")
        dep1.components["liba"].exelinkflags.append("elinka")
        dep1.components["libb"].libs.append("libb")
        dep1.components["libb"].defines.append("DEFINEB")
        dep1.components["libb"].system_libs.append("sysb")
        dep1.components["libb"].cxxflags.append("cxxflagb")
        dep1.components["libb"].cflags.append("cflagb")
        dep1.components["libb"].sharedlinkflags.append("slinkb")
        dep1.components["libb"].frameworks.append("frameworkb")
        dep1.components["libb"].exelinkflags.append("elinkb")
        deps_cpp_info.add("dep1", DepCppInfo(dep1))

        dep2 = CppInfo("dep2", "root")
        dep2.components["libc"].libs.append("libc")
        dep2.components["libd"].libs.append("libd")
        dep2.components["systemlib"].system_libs = ["systemlib"]
        dep2.components["libc"].cxxflags = ["cxxflagc"]
        dep2.components["libd"].cflags = ["cflagd"]
        dep2.components["libc"].sharedlinkflags = ["slinkc"]
        dep2.components["libd"].sharedlinkflags = ["slinkd"]
        deps_cpp_info.add("dep2", DepCppInfo(dep2))

        self.assertListEqual(["liba", "libb"], deps_cpp_info["dep1"].libs)
        self.assertListEqual(["libc", "libd"], deps_cpp_info["dep2"].libs)
        self.assertListEqual(["liba", "libb", "libc", "libd"],
                             deps_cpp_info.libs)

        self.assertListEqual(["DEFINEA", "DEFINEB"],
                             deps_cpp_info["dep1"].defines)
        self.assertListEqual(["DEFINEA", "DEFINEB"], deps_cpp_info.defines)

        self.assertListEqual(["sysa", "sysb"],
                             deps_cpp_info["dep1"].system_libs)
        self.assertListEqual(["systemlib"], deps_cpp_info["dep2"].system_libs)
        self.assertListEqual(["sysa", "sysb", "systemlib"],
                             deps_cpp_info.system_libs)

        self.assertListEqual(["cxxflaga", "cxxflagb"],
                             deps_cpp_info["dep1"].cxxflags)
        self.assertListEqual(["cxxflagc"], deps_cpp_info["dep2"].cxxflags)
        self.assertListEqual(["cxxflagc", "cxxflaga", "cxxflagb"],
                             deps_cpp_info.cxxflags)

        self.assertListEqual(["cflaga", "cflagb"],
                             deps_cpp_info["dep1"].cflags)
        self.assertListEqual(["cflagd"], deps_cpp_info["dep2"].cflags)
        self.assertListEqual(["cflagd", "cflaga", "cflagb"],
                             deps_cpp_info.cflags)

        self.assertListEqual(["slinka", "slinkb"],
                             deps_cpp_info["dep1"].sharedlinkflags)
        self.assertListEqual(["slinkc", "slinkd"],
                             deps_cpp_info["dep2"].sharedlinkflags)
        self.assertListEqual(["slinkc", "slinkd", "slinka", "slinkb"],
                             deps_cpp_info.sharedlinkflags)

        self.assertListEqual(["frameworka", "frameworkb"],
                             deps_cpp_info["dep1"].frameworks)
        self.assertListEqual(["frameworka", "frameworkb"],
                             deps_cpp_info.frameworks)

        self.assertListEqual(["elinka", "elinkb"],
                             deps_cpp_info["dep1"].exelinkflags)
        self.assertListEqual([], deps_cpp_info["dep2"].exelinkflags)
        self.assertListEqual(["elinka", "elinkb"], deps_cpp_info.exelinkflags)