def test_component_aggregation(): cppinfo = NewCppInfo() cppinfo.includedirs = ["includedir"] cppinfo.libdirs = ["libdir"] cppinfo.srcdirs = ["srcdir"] cppinfo.bindirs = ["bindir"] cppinfo.builddirs = ["builddir"] cppinfo.frameworkdirs = ["frameworkdir"] cppinfo.components["c2"].includedirs = ["includedir_c2"] cppinfo.components["c2"].libdirs = ["libdir_c2"] cppinfo.components["c2"].srcdirs = ["srcdir_c2"] cppinfo.components["c2"].bindirs = ["bindir_c2"] cppinfo.components["c2"].builddirs = ["builddir_c2"] cppinfo.components["c2"].frameworkdirs = ["frameworkdir_c2"] cppinfo.components["c2"].cxxflags = ["cxxflags_c2"] cppinfo.components["c2"].defines = ["defines_c2"] cppinfo.components["c1"].requires = ["c2", "LIB_A::C1"] cppinfo.components["c1"].includedirs = ["includedir_c1"] cppinfo.components["c1"].libdirs = ["libdir_c1"] cppinfo.components["c1"].srcdirs = ["srcdir_c1"] cppinfo.components["c1"].bindirs = ["bindir_c1"] cppinfo.components["c1"].builddirs = ["builddir_c1"] cppinfo.components["c1"].frameworkdirs = ["frameworkdir_c1"] cppinfo.components["c1"].cxxflags = ["cxxflags_c1"] cppinfo.components["c1"].defines = ["defines_c1"] ret = cppinfo.copy() ret.aggregate_components() assert ret.includedirs == ["includedir_c1", "includedir_c2"] assert ret.libdirs == ["libdir_c1", "libdir_c2"] assert ret.srcdirs == ["srcdir_c1", "srcdir_c2"] assert ret.bindirs == ["bindir_c1", "bindir_c2"] assert ret.builddirs == ["builddir_c1", "builddir_c2"] assert ret.frameworkdirs == ["frameworkdir_c1", "frameworkdir_c2"] assert ret.cxxflags == ["cxxflags_c1", "cxxflags_c2"] assert ret.defines == ["defines_c1", "defines_c2"] # If we change the internal graph the order is different cppinfo.components["c1"].requires = [] cppinfo.components["c2"].requires = ["c1"] ret = cppinfo.copy() ret.aggregate_components() assert ret.includedirs == ["includedir_c2", "includedir_c1"] assert ret.libdirs == ["libdir_c2", "libdir_c1"] assert ret.srcdirs == ["srcdir_c2", "srcdir_c1"] assert ret.bindirs == ["bindir_c2", "bindir_c1"] assert ret.builddirs == ["builddir_c2", "builddir_c1"] assert ret.frameworkdirs == ["frameworkdir_c2", "frameworkdir_c1"]
def test_component_aggregation(): cppinfo = NewCppInfo() cppinfo.includedirs = ["includedir"] cppinfo.libdirs = ["libdir"] cppinfo.srcdirs = ["srcdir"] cppinfo.bindirs = ["bindir"] cppinfo.builddirs = ["builddir"] cppinfo.frameworkdirs = ["frameworkdir"] cppinfo.set_property("foo", "bar") cppinfo.components["c2"].includedirs = ["includedir_c2"] cppinfo.components["c2"].libdirs = ["libdir_c2"] cppinfo.components["c2"].srcdirs = ["srcdir_c2"] cppinfo.components["c2"].bindirs = ["bindir_c2"] cppinfo.components["c2"].builddirs = ["builddir_c2"] cppinfo.components["c2"].frameworkdirs = ["frameworkdir_c2"] cppinfo.components["c2"].cxxflags = ["cxxflags_c2"] cppinfo.components["c2"].defines = ["defines_c2"] cppinfo.components["c2"].set_property("my_foo", ["bar", "bar2"]) cppinfo.components["c2"].set_property( "cmake_build_modules", ["build_module_c2", "build_module_c22"]) cppinfo.components["c1"].requires = ["c2", "LIB_A::C1"] cppinfo.components["c1"].includedirs = ["includedir_c1"] cppinfo.components["c1"].libdirs = ["libdir_c1"] cppinfo.components["c1"].srcdirs = ["srcdir_c1"] cppinfo.components["c1"].bindirs = ["bindir_c1"] cppinfo.components["c1"].builddirs = ["builddir_c1"] cppinfo.components["c1"].frameworkdirs = ["frameworkdir_c1"] cppinfo.components["c1"].cxxflags = ["cxxflags_c1"] cppinfo.components["c1"].defines = ["defines_c1"] cppinfo.components["c1"].set_property("my_foo", "jander") cppinfo.components["c1"].set_property("my_foo2", "bar2") ret = cppinfo.aggregated_components() assert ret.get_property("foo") == "bar" assert ret.includedirs == ["includedir_c1", "includedir_c2"] assert ret.libdirs == ["libdir_c1", "libdir_c2"] assert ret.srcdirs == ["srcdir_c1", "srcdir_c2"] assert ret.bindirs == ["bindir_c1", "bindir_c2"] assert ret.builddirs == ["builddir_c1", "builddir_c2"] assert ret.frameworkdirs == ["frameworkdir_c1", "frameworkdir_c2"] assert ret.cxxflags == ["cxxflags_c1", "cxxflags_c2"] assert ret.defines == ["defines_c1", "defines_c2"] # The properties are not aggregated because we cannot generalize the meaning of a property # that belongs to a component, it could make sense to aggregate it or not, "cmake_target_name" # for example, cannot be aggregated. But "cmake_build_modules" is aggregated. assert ret.get_property("my_foo") is None assert ret.get_property("my_foo2") is None assert ret.get_property("cmake_build_modules") == None # If we change the internal graph the order is different cppinfo.components["c1"].requires = [] cppinfo.components["c2"].requires = ["c1"] cppinfo._aggregated = None # Dirty, just to force recomputation ret = cppinfo.aggregated_components() assert ret.includedirs == ["includedir_c2", "includedir_c1"] assert ret.libdirs == ["libdir_c2", "libdir_c1"] assert ret.srcdirs == ["srcdir_c2", "srcdir_c1"] assert ret.bindirs == ["bindir_c2", "bindir_c1"] assert ret.builddirs == ["builddir_c2", "builddir_c1"] assert ret.frameworkdirs == ["frameworkdir_c2", "frameworkdir_c1"]