def test(self): fs = FileSystem(path=['', 'path', 'to', 'it']) fs.rootdirectory().add(name=const.CONFIX2_PKG, entry=File(lines=[ "PACKAGE_NAME('ProvideRequireInclude')", "PACKAGE_VERSION('1.2.3')" ])) fs.rootdirectory().add(name=const.CONFIX2_DIR, entry=File()) lo = fs.rootdirectory().add(name='lo', entry=Directory()) lo.add(name=const.CONFIX2_DIR, entry=File(lines=["PROVIDE_H('lo.h')"])) hi = fs.rootdirectory().add(name='hi', entry=Directory()) hi.add(name=const.CONFIX2_DIR, entry=File(lines=["REQUIRE_H('lo.h', URGENCY_ERROR)"])) package = LocalPackage(rootdirectory=fs.rootdirectory(), setups=[ConfixSetup(use_libtool=False)]) package.boil(external_nodes=[]) lo_builder = package.rootbuilder().find_entry_builder(['lo']) hi_builder = package.rootbuilder().find_entry_builder(['hi']) self.failUnless(lo_builder in package.digraph().successors(hi_builder)) pass
def test(self): fs = FileSystem(path=[]) fs.rootdirectory().add( name=const.CONFIX2_PKG, entry=File(lines=['PACKAGE_NAME("'+self.__class__.__name__+'")', 'PACKAGE_VERSION("1.2.3")'])) fs.rootdirectory().add( name=const.CONFIX2_DIR, entry=File()) lo = fs.rootdirectory().add( name='lo', entry=Directory()) hi = fs.rootdirectory().add( name='hi', entry=Directory()) package = LocalPackage(rootdirectory=fs.rootdirectory(), setups=[NullSetup()]) lodir_builder = DirectoryBuilder(directory=lo) lodir_builder.add_builder(DeferredProvider(provide=Provide_Symbol(symbol='the_deferred_provided_symbol'))) package.rootbuilder().add_builder(lodir_builder) hidir_builder = DirectoryBuilder(directory=hi) hidir_builder.add_require(Require_Symbol(symbol='the_deferred_provided_symbol', found_in=[], urgency=Require.URGENCY_ERROR)) package.rootbuilder().add_builder(hidir_builder) package.boil(external_nodes=[]) self.failUnless(lodir_builder in package.digraph().successors(hidir_builder)) pass
def test(self): fs = dirhier.packageroot() lodir = dirhier.subdir(fs.rootdirectory(), 'lo') lofile = lodir.add(name='lo.iface', entry=File(lines=['PROVIDE_SYMBOL(symbol="lo")'])) hidir = dirhier.subdir(fs.rootdirectory(), 'hi') hifile = hidir.add(name='hi.iface', entry=File(lines=['REQUIRE_SYMBOL(symbol="lo", urgency=URGENCY_ERROR)'])) package = LocalPackage(rootdirectory=fs.rootdirectory(), setups=[ImplicitDirectorySetup(), FileInterfaceTestSetup()]) package.boil(external_nodes=[]) lodirbuilder = package.rootbuilder().find_entry_builder(['lo']) hidirbuilder = package.rootbuilder().find_entry_builder(['hi']) # root, lo, hi self.assertEqual(len(package.digraph().nodes()), 3) rootnode = None lonode = None hinode = None for n in package.digraph().nodes(): if n is package.rootbuilder(): rootnode = n continue if n is lodirbuilder: lonode = n continue if n is hidirbuilder: hinode = n continue pass self.assertEqual(len(package.digraph().successors(hinode)), 1) self.assertEqual(len(package.digraph().successors(lonode)), 0) self.assert_(lonode in package.digraph().successors(hinode)) pass
def test__basic(self): package = LocalPackage( rootdirectory=relocated_header.make_package_source( package_name=self.__class__.__name__), setups=[ExplicitSetup(use_libtool=False)]) package.boil(external_nodes=[]) exe_builder = package.rootbuilder().find_entry_builder(['exe']) lib_implementation_builder = package.rootbuilder().find_entry_builder( ['lib_implementation']) include_builder = package.rootbuilder().find_entry_builder(['include']) self.failIf(exe_builder is None) self.failIf(lib_implementation_builder is None) self.failIf(include_builder is None) self.failUnless(lib_implementation_builder in package.digraph().successors(exe_builder)) self.failUnless(include_builder in package.digraph().successors( lib_implementation_builder)) pass
class RelateBasic(unittest.TestCase): def setUp(self): fs = FileSystem(path=[''], rootdirectory=packages.lo_hi1_hi2_highest_exe( name='xxx', version='1.2.3')) self.package_ = LocalPackage(rootdirectory=fs.rootdirectory(), setups=[ConfixSetup(use_libtool=False)]) self.package_.boil(external_nodes=[]) # from here on, we collect things that we will need in the # test cases. # directory and file builder instances self.lodir_builder_ = self.package_.rootbuilder().find_entry_builder( ['lo']) self.lodir_lo_h_builder_ = self.package_.rootbuilder( ).find_entry_builder(['lo', 'lo.h']) self.lodir_lo_c_builder_ = self.package_.rootbuilder( ).find_entry_builder(['lo', 'lo.c']) self.hi1dir_builder_ = self.package_.rootbuilder().find_entry_builder( ['hi1']) self.hi1dir_hi1_h_builder_ = self.package_.rootbuilder( ).find_entry_builder(['hi1', 'hi1.h']) self.hi1dir_hi1_c_builder_ = self.package_.rootbuilder( ).find_entry_builder(['hi1', 'hi1.c']) self.hi2dir_builder_ = self.package_.rootbuilder().find_entry_builder( ['hi2']) self.hi2dir_hi2_h_builder_ = self.package_.rootbuilder( ).find_entry_builder(['hi2', 'hi2.h']) self.hi2dir_hi2_c_builder_ = self.package_.rootbuilder( ).find_entry_builder(['hi2', 'hi2.c']) self.highestdir_builder_ = self.package_.rootbuilder( ).find_entry_builder(['highest']) self.highestdir_highest_c_builder_ = self.package_.rootbuilder( ).find_entry_builder(['highest', 'highest.c']) self.exedir_builder_ = self.package_.rootbuilder().find_entry_builder( ['exe']) self.exedir_main_c_builder_ = self.package_.rootbuilder( ).find_entry_builder(['exe', 'main.c']) # library and executable builder instances self.lodir_lib_builder_ = None self.hi1dir_lib_builder_ = None self.hi2dir_lib_builder_ = None self.highestdir_lib_builder_ = None self.exedir_exe_builder_ = None for b in self.lodir_builder_.iter_builders(): if isinstance(b, LibraryBuilder): self.failIf(self.lodir_lib_builder_ is not None) self.lodir_lib_builder_ = b pass pass for b in self.hi1dir_builder_.iter_builders(): if isinstance(b, LibraryBuilder): self.failIf(self.hi1dir_lib_builder_ is not None) self.hi1dir_lib_builder_ = b pass pass for b in self.hi2dir_builder_.iter_builders(): if isinstance(b, LibraryBuilder): self.failIf(self.hi2dir_lib_builder_ is not None) self.hi2dir_lib_builder_ = b pass pass for b in self.highestdir_builder_.iter_builders(): if isinstance(b, LibraryBuilder): self.failIf(self.highestdir_lib_builder_ is not None) self.highestdir_lib_builder_ = b pass pass for b in self.exedir_builder_.iter_builders(): if isinstance(b, ExecutableBuilder): self.failIf(self.exedir_exe_builder_ is not None) self.exedir_exe_builder_ = b pass pass # relevant build information self.lodir_lib_libinfo_ = None for bi in self.lodir_lib_builder_.iter_buildinfos(): if isinstance(bi, BuildInfo_CLibrary_NativeLocal): self.failIf(self.lodir_lib_libinfo_ is not None) self.lodir_lib_libinfo_ = bi pass pass self.hi1dir_lib_libinfo_ = None for bi in self.hi1dir_lib_builder_.iter_buildinfos(): if isinstance(bi, BuildInfo_CLibrary_NativeLocal): self.failIf(self.hi1dir_lib_libinfo_ is not None) self.hi1dir_lib_libinfo_ = bi pass pass self.hi2dir_lib_libinfo_ = None for bi in self.hi2dir_lib_builder_.iter_buildinfos(): if isinstance(bi, BuildInfo_CLibrary_NativeLocal): self.failIf(self.hi2dir_lib_libinfo_ is not None) self.hi2dir_lib_libinfo_ = bi pass pass self.highestdir_lib_libinfo_ = None for bi in self.highestdir_lib_builder_.iter_buildinfos(): if isinstance(bi, BuildInfo_CLibrary_NativeLocal): self.failIf(self.highestdir_lib_libinfo_ is not None) self.highestdir_lib_libinfo_ = bi pass pass pass def testGraph(self): self.failUnless(self.lodir_builder_ in self.package_.digraph(). successors(self.hi1dir_builder_)) self.failUnless(self.lodir_builder_ in self.package_.digraph(). successors(self.hi2dir_builder_)) self.failUnless(self.hi1dir_builder_ in self.package_.digraph(). successors(self.highestdir_builder_)) self.failUnless(self.hi2dir_builder_ in self.package_.digraph(). successors(self.highestdir_builder_)) self.failUnless(self.hi1dir_builder_ in self.package_.digraph(). successors(self.exedir_builder_)) self.failUnless(self.hi2dir_builder_ in self.package_.digraph(). successors(self.exedir_builder_)) pass def testLocalBuildInfo(self): # see if everyone who is involved in the game has the right # buildinfo. for bi in self.lodir_builder_.find_entry_builder(['lo.h' ]).iter_buildinfos(): if isinstance(bi, BuildInfo_CIncludePath_NativeLocal): break pass else: self.fail() pass for bi in self.lodir_lib_builder_.iter_buildinfos(): if isinstance(bi, BuildInfo_CLibrary_NativeLocal): break pass else: self.fail() pass for bi in self.hi1dir_lib_builder_.iter_buildinfos(): if isinstance(bi, BuildInfo_CLibrary_NativeLocal): break pass else: self.fail() pass for bi in self.hi1dir_builder_.find_entry_builder( ['hi1.h']).iter_buildinfos(): if isinstance(bi, BuildInfo_CIncludePath_NativeLocal): break pass else: self.fail() pass for bi in self.hi2dir_lib_builder_.iter_buildinfos(): if isinstance(bi, BuildInfo_CLibrary_NativeLocal): hi2_lib = bi continue pass for bi in self.hi2dir_builder_.find_entry_builder( ['hi2.h']).iter_buildinfos(): if isinstance(bi, BuildInfo_CIncludePath_NativeLocal): break pass else: self.fail() pass pass def testPropagatedLibraryInfo(self): # hi1 depends on lo self.failUnless(self.lodir_lib_libinfo_.basename() in ( bi.basename() for bi in self.hi1dir_lib_builder_.direct_libraries())) self.failUnless(self.lodir_lib_libinfo_.basename() in ( bi.basename() for bi in self.hi1dir_lib_builder_.topo_libraries())) self.failUnlessEqual(len(self.hi1dir_lib_builder_.topo_libraries()), 1) self.failUnlessEqual(len(self.hi1dir_lib_builder_.direct_libraries()), 1) # hi2 depends on lo self.failUnless(self.lodir_lib_libinfo_.basename() in ( bi.basename() for bi in self.hi2dir_lib_builder_.direct_libraries())) self.failUnless(self.lodir_lib_libinfo_.basename() in ( bi.basename() for bi in self.hi2dir_lib_builder_.topo_libraries())) self.failUnlessEqual(len(self.hi2dir_lib_builder_.topo_libraries()), 1) self.failUnlessEqual(len(self.hi2dir_lib_builder_.direct_libraries()), 1) # highest depends on lo (indirect) and hi1, hi2 (direct) self.failIf(self.lodir_lib_libinfo_ in self.highestdir_lib_builder_.direct_libraries()) self.failUnless(self.hi1dir_lib_libinfo_.basename() in ( bi.basename() for bi in self.highestdir_lib_builder_.direct_libraries())) self.failUnless(self.hi2dir_lib_libinfo_.basename() in ( bi.basename() for bi in self.highestdir_lib_builder_.direct_libraries())) self.failUnless(self.lodir_lib_libinfo_.basename() in ( bi.basename() for bi in self.highestdir_lib_builder_.topo_libraries())) self.failUnless(self.hi1dir_lib_libinfo_.basename() in ( bi.basename() for bi in self.highestdir_lib_builder_.topo_libraries())) self.failUnless(self.hi2dir_lib_libinfo_.basename() in ( bi.basename() for bi in self.highestdir_lib_builder_.topo_libraries())) self.failUnlessEqual( len(self.highestdir_lib_builder_.topo_libraries()), 3) self.failUnlessEqual( len(self.highestdir_lib_builder_.direct_libraries()), 2) # exe depends on lo (indirect) and hi1, hi2 (direct) self.failIf(self.lodir_lib_libinfo_.basename() in ( bi.basename() for bi in self.exedir_exe_builder_.direct_libraries())) self.failUnless(self.hi1dir_lib_libinfo_.basename() in ( bi.basename() for bi in self.exedir_exe_builder_.direct_libraries())) self.failUnless(self.hi2dir_lib_libinfo_.basename() in ( bi.basename() for bi in self.exedir_exe_builder_.direct_libraries())) self.failUnless(self.lodir_lib_libinfo_.basename() in ( bi.basename() for bi in self.exedir_exe_builder_.topo_libraries())) self.failUnless(self.hi1dir_lib_libinfo_.basename() in ( bi.basename() for bi in self.exedir_exe_builder_.topo_libraries())) self.failUnless(self.hi2dir_lib_libinfo_.basename() in ( bi.basename() for bi in self.exedir_exe_builder_.topo_libraries())) self.failUnlessEqual(len(self.exedir_exe_builder_.topo_libraries()), 3) self.failUnlessEqual(len(self.exedir_exe_builder_.direct_libraries()), 2) pass def testPropagatedIncludeInfo(self): # lo.c has no native includes self.failIf( len(self.lodir_lo_c_builder_.native_local_include_dirs()) > 0) # whereas all the others have self.failUnless( len(self.hi1dir_hi1_c_builder_.native_local_include_dirs()) > 0) self.failUnless( len(self.hi2dir_hi2_c_builder_.native_local_include_dirs()) > 0) self.failUnless( len(self.highestdir_highest_c_builder_.native_local_include_dirs()) > 0) self.failUnless( len(self.exedir_main_c_builder_.native_local_include_dirs()) > 0) pass def testLinkOrder(self): # highest # ------- # highest depends on hi1, hi2, lo self.failUnlessEqual( len(self.highestdir_lib_builder_.topo_libraries()), 3) # lo is the lowest in the dependency list, so it must come at the end self.failUnlessEqual( self.lodir_lib_libinfo_.basename(), self.highestdir_lib_builder_.topo_libraries()[2].basename()) # hi1 and hi2 are equal orders, so they must come either first or second self.failUnless(self.hi1dir_lib_libinfo_.basename() in ( bi.basename() for bi in self.highestdir_lib_builder_.topo_libraries()[0:2])) self.failUnless(self.hi2dir_lib_libinfo_.basename() in ( bi.basename() for bi in self.highestdir_lib_builder_.topo_libraries()[0:2])) # exe # --- # exe depends on hi1, hi2, lo self.failUnlessEqual( len(self.highestdir_lib_builder_.topo_libraries()), 3) # lo is the lowest in the dependency list, so it must come at the end self.failUnlessEqual( self.lodir_lib_libinfo_.basename(), self.exedir_exe_builder_.topo_libraries()[2].basename()) # hi1 and hi2 are equal orders, so they must come either first or second self.failUnless(self.hi1dir_lib_libinfo_.basename() in ( bi.basename() for bi in self.exedir_exe_builder_.topo_libraries()[0:2])) self.failUnless(self.hi2dir_lib_libinfo_.basename() in ( bi.basename() for bi in self.exedir_exe_builder_.topo_libraries()[0:2])) pass pass
def test__basic(self): fs = FileSystem(path=['dont\'t', 'care']) fs.rootdirectory().add(name=const.CONFIX2_PKG, entry=File(lines=[ "PACKAGE_NAME('" + self.__class__.__name__ + "')", "PACKAGE_VERSION('1.2.3')" ])) fs.rootdirectory().add(name=const.CONFIX2_DIR, entry=File()) include = fs.rootdirectory().add(name='include', entry=Directory()) include.add(name=const.CONFIX2_DIR, entry=File(lines=[ "INSTALLDIR_H('interface')", "RELOCATE_HEADER(filename='a_interface.h',", " directory=['a'])", "RELOCATE_HEADER(filename='b_interface.h',", " directory=['b'])" ])) include.add(name='a_interface.h', entry=File(lines=[ '#ifndef A_INTERFACE_H', '#define A_INTERFACE_H', 'void a(void);' '#endif' ])) include.add(name='b_interface.h', entry=File(lines=[ '#ifndef B_INTERFACE_H', '#define B_INTERFACE_H', 'void b(void);' '#endif' ])) a = fs.rootdirectory().add(name='a', entry=Directory()) a.add(name=const.CONFIX2_DIR, entry=File()) a.add(name='a.cc', entry=File(lines=[ "#include <interface/a.h>", "#include <c.h>", "// CONFIX:REQUIRE_H('interface/a_interface.h', REQUIRED)", "// CONFIX:REQUIRE_H('c.h', REQUIRED)", "void a(void) {", " c();", "}" ])) b = fs.rootdirectory().add(name='b', entry=Directory()) b.add(name=const.CONFIX2_DIR, entry=File()) b.add(name='b.cc', entry=File(lines=[ "#include <interface/b_interface.h>", "#include <c.h>", "// CONFIX:REQUIRE_H('interface/b_interface.h', REQUIRED)", "// CONFIX:REQUIRE_H('c.h', REQUIRED)", "void b(void) {", " c();", "}" ])) c = fs.rootdirectory().add(name='c', entry=Directory()) c.add(name=const.CONFIX2_DIR, entry=File()) c.add(name='c.h', entry=File(lines=[ "#ifndef C_H", "#define C_H", "void c(void);", "#endif" ])) c.add(name='c.cc', entry=File(lines=["#include <c.h>", "void c(void) {}"])) exe = fs.rootdirectory().add(name='exe', entry=Directory()) exe.add(name=const.CONFIX2_DIR, entry=File()) exe.add(name='main.cc', entry=File(lines=[ "#include <interface/a_interface.h>", "#include <interface/b_interface.h>", "// CONFIX:REQUIRE_H('interface/a_interface.h', REQUIRED)", "// CONFIX:REQUIRE_H('interface/b_interface.h', REQUIRED)", "int main(void) {", " a();", " b();", "}" ])) package = LocalPackage(rootdirectory=fs.rootdirectory(), setups=[ConfixSetup(use_libtool=False)]) package.boil(external_nodes=[]) include_builder = package.rootbuilder().find_entry_builder(['include']) a_builder = package.rootbuilder().find_entry_builder(['a']) b_builder = package.rootbuilder().find_entry_builder(['b']) c_builder = package.rootbuilder().find_entry_builder(['c']) exe_builder = package.rootbuilder().find_entry_builder(['exe']) self.failIf(include_builder is None) self.failIf(a_builder is None) self.failIf(b_builder is None) self.failIf(c_builder is None) self.failIf(exe_builder is None) # verify dependency graph # these two are crucial because they come from the relocated # headers a_interface.h and b_interface.h, respectively. self.failUnless(a_builder in package.digraph().successors(exe_builder)) self.failUnless(b_builder in package.digraph().successors(exe_builder)) # a and b depend on include ... self.failUnless( include_builder in package.digraph().successors(a_builder)) self.failUnless( include_builder in package.digraph().successors(b_builder)) # ... and on c, of course. self.failUnless(c_builder in package.digraph().successors(a_builder)) self.failUnless(c_builder in package.digraph().successors(b_builder)) pass