예제 #1
0
 def cpp_info_name_test(self):
     folder = temp_folder()
     info = CppInfo(folder)
     info.name = "MyName"
     deps_cpp_info = DepsCppInfo()
     deps_cpp_info.update(info, "myname")
     self.assertIn("MyName", deps_cpp_info["myname"].name)
예제 #2
0
    def test_deps_cpp_info_libs_release_debug(self):
        deps_cpp_info = DepsCppInfo()

        dep1 = CppInfo("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.update(DepCppInfo(dep1), "dep1")

        dep2 = CppInfo("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.update(DepCppInfo(dep2), "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)
예제 #3
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)
예제 #4
0
 def cpp_info_build_modules_test(self):
     folder = temp_folder()
     info = CppInfo(folder)
     info.build_modules.append("my_module.cmake")
     info.debug.build_modules = ["mod-release.cmake"]
     deps_cpp_info = DepsCppInfo()
     deps_cpp_info.update(info, "myname")
     self.assertListEqual([os.path.join(folder, "my_module.cmake")],
                          deps_cpp_info["myname"].build_modules_paths)
     self.assertListEqual([os.path.join(folder, "mod-release.cmake")],
                          deps_cpp_info["myname"].debug.build_modules_paths)
예제 #5
0
 def cpp_info_name_test(self):
     folder = temp_folder()
     info = CppInfo(folder)
     info.name = "MyName"
     info.names["my_generator"] = "MyNameForMyGenerator"
     deps_cpp_info = DepsCppInfo()
     deps_cpp_info.update(info, "myname")
     self.assertIn("MyName", deps_cpp_info["myname"].name)
     self.assertIn("MyNameForMyGenerator", deps_cpp_info["myname"].names["my_generator"])
     self.assertIn("MyName", deps_cpp_info["myname"].get_name("my_undefined_generator"))
     self.assertIn("MyNameForMyGenerator", deps_cpp_info["myname"].get_name("my_generator"))
예제 #6
0
 def cpp_info_system_libs_test(self):
     info1 = CppInfo("folder1")
     info1.system_libs = ["sysdep1"]
     info2 = CppInfo("folder2")
     info2.system_libs = ["sysdep2", "sysdep3"]
     deps_cpp_info = DepsCppInfo()
     deps_cpp_info.update(info1, "dep1")
     deps_cpp_info.update(info2, "dep2")
     self.assertEqual(["sysdep1", "sysdep2", "sysdep3"], deps_cpp_info.system_libs)
     self.assertEqual(["sysdep1"], deps_cpp_info["dep1"].system_libs)
     self.assertEqual(["sysdep2", "sysdep3"], deps_cpp_info["dep2"].system_libs)
예제 #7
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)
예제 #8
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)
예제 #9
0
    def test_deps_cpp_info_libs(self):
        deps_cpp_info = DepsCppInfo()

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

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

        dep3 = CppInfo("root")
        dep3.libs.append("libdep3")
        deps_cpp_info.update(DepCppInfo(dep3), "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)
예제 #10
0
    def test_deps_cpp_info_libs_defines_flags(self):
        deps_cpp_info = DepsCppInfo()

        dep1 = CppInfo("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.update(DepCppInfo(dep1), "dep1")

        dep2 = CppInfo("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.update(DepCppInfo(dep2), "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)
예제 #11
0
    def components_libs_order_test(self):
        info = CppInfo("")
        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.update(dep_cpp_info, "dep1")
        self.assertListEqual(["liba", "libb"], deps_cpp_info["dep1"].libs)
        self.assertListEqual(["liba", "libb"], deps_cpp_info.libs)

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

        info = CppInfo("")
        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.update(dep_cpp_info, "dep1")
        self.assertListEqual(["libb", "liba"], deps_cpp_info["dep1"].libs)
        self.assertListEqual(["libb", "liba"], deps_cpp_info.libs)

        info = CppInfo("")
        info.components["liba"].libs = ["liba"]
        info.components["libb"].libs = ["libb"]
        info.components["libb"].requires = ["liba"]
        dep_cpp_info = DepCppInfo(info)
        info2 = CppInfo("")
        info2.components["libc"].libs = ["libc"]
        dep_cpp_info2 = DepCppInfo(info2)
        deps_cpp_info = DepsCppInfo()
        # Update in reverse order
        deps_cpp_info.update(dep_cpp_info2, "dep2")
        deps_cpp_info.update(dep_cpp_info, "dep1")
        self.assertListEqual(["libb", "liba"], deps_cpp_info["dep1"].libs)
        self.assertListEqual(["libc"], deps_cpp_info["dep2"].libs)
        self.assertListEqual(["libc", "libb", "liba"], deps_cpp_info.libs)
예제 #12
0
    def cpp_info_link_order_test(self):

        def _assert_link_order(sorted_libs):
            """
            Assert that dependent libs of a component are always found later in the list
            """
            assert sorted_libs, "'sorted_libs' is empty"
            for num, lib in enumerate(sorted_libs):
                component_name = lib[-1]
                for dep in info.components[component_name].requires:
                    for lib in info.components[dep].libs:
                        self.assertIn(lib, sorted_libs[num:])

        info = CppInfo("")
        info.components["6"].libs = ["lib6"]
        info.components["6"].requires = ["4", "5"]
        info.components["5"].libs = ["lib5"]
        info.components["5"].requires = ["2"]
        info.components["4"].libs = ["lib4"]
        info.components["4"].requires = ["1"]
        info.components["3"].libs = ["lib3"]
        info.components["3"].requires = ["1"]
        info.components["1"].libs = ["lib1"]
        info.components["1"].requires = ["2"]
        info.components["2"].libs = ["lib2"]
        info.components["2"].requires = []
        dep_cpp_info = DepCppInfo(info)
        _assert_link_order(dep_cpp_info.libs)
        self.assertEqual(["lib6", "lib5", "lib4", "lib3", "lib1", "lib2"], dep_cpp_info.libs)
        deps_cpp_info = DepsCppInfo()
        deps_cpp_info.update(dep_cpp_info, "dep1")
        self.assertEqual(["lib6", "lib5", "lib4", "lib3", "lib1", "lib2"],
                         deps_cpp_info.libs)

        info = CppInfo("")
        info.components["K"].libs = ["libK"]
        info.components["K"].requires = ["G", "H"]
        info.components["J"].libs = ["libJ"]
        info.components["J"].requires = ["F"]
        info.components["G"].libs = ["libG"]
        info.components["G"].requires = ["F"]
        info.components["H"].libs = ["libH"]
        info.components["H"].requires = ["F", "E"]
        info.components["L"].libs = ["libL"]
        info.components["L"].requires = ["I"]
        info.components["F"].libs = ["libF"]
        info.components["F"].requires = ["C", "D"]
        info.components["I"].libs = ["libI"]
        info.components["I"].requires = ["E"]
        info.components["C"].libs = ["libC"]
        info.components["C"].requires = ["A"]
        info.components["D"].libs = ["libD"]
        info.components["D"].requires = ["A"]
        info.components["E"].libs = ["libE"]
        info.components["E"].requires = ["A", "B"]
        info.components["A"].libs = ["libA"]
        info.components["A"].requires = []
        info.components["B"].libs = ["libB"]
        info.components["B"].requires = []
        dep_cpp_info = DepCppInfo(info)
        _assert_link_order(dep_cpp_info.libs)
        self.assertEqual(["libK", "libJ", "libG", "libH", "libL", "libF", "libI", "libC", "libD",
                          "libE", "libA", "libB"], dep_cpp_info.libs)
        deps_cpp_info.update(dep_cpp_info, "dep2")
        self.assertEqual(["lib6", "lib5", "lib4", "lib3", "lib1", "lib2","libK", "libJ", "libG",
                          "libH", "libL", "libF", "libI", "libC", "libD", "libE", "libA", "libB"],
                         deps_cpp_info.libs)