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)
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)
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)
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)
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"))
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)
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)
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)
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)
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)
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)
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)