Пример #1
0
    def test__CMAKE_CMAKELISTS_ADD_INCLUDE_DIRECTORY_local(self):
        fs = FileSystem(path=[''])
        fs.rootdirectory().add(
            name=const.CONFIX2_PKG,
            entry=File(lines=[
                'PACKAGE_NAME("test_CMAKE_CMAKELISTS_ADD_INCLUDE_DIRECTORY_local")',
                'PACKAGE_VERSION("1.2.3")'
            ]))
        fs.rootdirectory().add(name=const.CONFIX2_DIR,
                               entry=File(lines=['DIRECTORY(["subdir"])']))

        subdir = fs.rootdirectory().add(name='subdir', entry=Directory())
        subdir.add(
            name=const.CONFIX2_DIR,
            entry=File(lines=[
                'CMAKE_CMAKELISTS_ADD_INCLUDE_DIRECTORY("include-directory", CMAKE_BUILDINFO_LOCAL)'
            ]))

        package = LocalPackage(rootdirectory=fs.rootdirectory(),
                               setups=[ExplicitDirectorySetup(),
                                       CMakeSetup()])
        package.boil(external_nodes=[])
        package.output()

        cmake_output_builder = find_cmake_output_builder(
            package.rootbuilder().find_entry_builder(['subdir']))
        self.failUnless('include-directory' in cmake_output_builder.
                        local_cmakelists().get_include_directories())
        pass
Пример #2
0
    def test__implicit_name(self):
        fs = FileSystem(path=[])
        fs.rootdirectory().add(name=const.CONFIX2_PKG,
                               entry=File(lines=[
                                   "PACKAGE_NAME('ExecutableInMemoryTest')",
                                   "PACKAGE_VERSION('1.2.3')"
                               ]))
        fs.rootdirectory().add(
            name=const.CONFIX2_DIR,
            entry=File(
                lines=["EXECUTABLE(center=C(filename='main.c'), members=[])"]))
        fs.rootdirectory().add(name='main.c', entry=File())

        package = LocalPackage(rootdirectory=fs.rootdirectory(),
                               setups=[ExplicitSetup(use_libtool=False)])
        package.boil(external_nodes=[])

        found_exe_builder = None
        for b in package.rootbuilder().iter_builders():
            if isinstance(b, ExecutableBuilder):
                self.failUnless(found_exe_builder is None)
                found_exe_builder = b
                continue
            pass
        self.failIf(found_exe_builder is None)
        self.failUnless(
            found_exe_builder.exename() == 'ExecutableInMemoryTest_main')
        pass
Пример #3
0
    def test(self):
        fs = dirhier.packageroot()
        fs.rootdirectory().add(name='file.h', entry=File(lines=[]))
        fs.rootdirectory().add(name='file.c', entry=File(lines=[]))

        package = LocalPackage(rootdirectory=fs.rootdirectory(),
                               setups=[ConfixSetup(use_libtool=False)])
        package.boil(external_nodes=[])

        file_h_builder = None
        file_c_builder = None
        library_builder = None
        for b in package.rootbuilder().iter_builders():
            if isinstance(b, FileBuilder):
                if b.file().name() == 'file.h' and isinstance(
                        b, HeaderBuilder):
                    file_h_builder = b
                    pass
                if b.file().name() == 'file.c' and isinstance(b, CBuilder):
                    file_c_builder = b
                    pass
                pass
            if isinstance(b, LibraryBuilder):
                library_builder = b
                pass
            pass
        self.failUnless(isinstance(file_h_builder, HeaderBuilder))
        self.failUnless(isinstance(file_c_builder, CBuilder))
        self.failUnless(isinstance(library_builder, LibraryBuilder))

        self.failUnless(file_h_builder in library_builder.members())
        self.failUnless(file_c_builder in library_builder.members())
        pass
Пример #4
0
    def test__sync_mem2sync(self):
        fs = FileSystem(path=self.rootpath())
        subdir = Directory(mode=0700)
        fs.rootdirectory().add(name='subdir', entry=subdir)
        file = File(mode=0755)
        subdir.add(name='file', entry=file)

        self.failUnlessEqual(fs.rootdirectory().state(),
                             DirectoryState.INMEMORY)
        self.failUnlessEqual(subdir.state(), DirectoryState.INMEMORY)
        self.failUnlessEqual(file.state(), FileState.NEW)

        fs.sync()

        self.failUnlessEqual(fs.rootdirectory().state(), DirectoryState.SYNC)
        self.failUnlessEqual(subdir.state(), DirectoryState.SYNC)
        self.failUnlessEqual(file.state(), FileState.SYNC_INMEM)

        self.failUnless(os.path.isdir(os.sep.join(self.rootpath())))
        self.failUnless(
            os.path.isdir(os.sep.join(self.rootpath() + ['subdir'])))
        self.failUnless(
            os.path.isfile(os.sep.join(self.rootpath() + ['subdir', 'file'])))

        self.failUnlessEqual(
            stat.S_IMODE(
                os.stat(os.sep.join(self.rootpath() + ['subdir'])).st_mode),
            0700)
        self.failUnlessEqual(
            stat.S_IMODE(
                os.stat(os.sep.join(self.rootpath() +
                                    ['subdir', 'file'])).st_mode), 0755)
        pass
Пример #5
0
    def test__explicit_with_libtool(self):
        fs, source, build = _skeleton(path=self.rootpath())

        source.add(
            name=const.CONFIX2_PKG,
            entry=File(lines=[
                'PACKAGE_NAME("CheckProgramTest.test_implicit_without_libtool")',
                'PACKAGE_VERSION("1.2.3")'
            ]))
        source.add(name=const.CONFIX2_DIR,
                   entry=File(lines=[
                       "TESTS_ENVIRONMENT('name', 'value')",
                       "EXECUTABLE(center=C(filename='main.c'),",
                       "           exename='the-test-program',",
                       "           what=EXECUTABLE_CHECK)"
                   ]))
        source.add(name='main.c',
                   entry=File(lines=_check_program(
                       os.sep.join(build.abspath() + ['my-check-was-here']))))

        _generate(source=source, use_libtool=True, explicit=True)
        fs.sync()
        _build_and_check(source=source, build=build)

        # as a side effect, the test program creates a file for us.
        self.failUnless(
            os.path.isfile(os.sep.join(build.abspath() +
                                       ['my-check-was-here'])))
        pass
Пример #6
0
    def test__creator(self):
        fs = FileSystem(path=['a'])
        fs.rootdirectory().add(
            name=const.CONFIX2_PKG,
            entry=File(lines=[
                "PACKAGE_NAME('ignore-entries-c')", "PACKAGE_VERSION('6.6.6')"
            ]))
        fs.rootdirectory().add(name=const.CONFIX2_DIR,
                               entry=File(lines=[
                                   'IGNORE_ENTRIES(["ignored1.idl"])',
                                   'IGNORE_FILE("ignored2.idl")'
                               ]))
        fs.rootdirectory().add(name='ignored1.idl', entry=File())
        fs.rootdirectory().add(name='ignored2.idl', entry=File())
        fs.rootdirectory().add(name='not-ignored.idl', entry=File())

        package = LocalPackage(rootdirectory=fs.rootdirectory(),
                               setups=[ConfixSetup(use_libtool=False)])
        package.boil(external_nodes=[])

        self.failIf(
            package.rootbuilder().find_entry_builder(path=['ignored1.idl']))
        self.failIf(
            package.rootbuilder().find_entry_builder(path=['ignored2.idl']))
        self.failUnless(
            package.rootbuilder().find_entry_builder(path=['not-ignored.idl']))
        pass
Пример #7
0
    def test__long_mangled_name(self):
        fs = FileSystem(path=[])
        fs.rootdirectory().add(name=const.CONFIX2_PKG,
                               entry=File(lines=[
                                   "PACKAGE_NAME('LibraryInMemoryTest')",
                                   "PACKAGE_VERSION('1.2.3')"
                               ]))
        fs.rootdirectory().add(name=const.CONFIX2_DIR,
                               entry=File(lines=["LIBRARY(members=[])"]))

        package = LocalPackage(
            rootdirectory=fs.rootdirectory(),
            setups=[ExplicitDirectorySetup(),
                    ExplicitCSetup()])
        package.boil(external_nodes=[])

        found_lib_builder = None
        for b in package.rootbuilder().iter_builders():
            if type(b) is LibraryBuilder:
                self.failUnless(found_lib_builder is None)
                found_lib_builder = b
                continue
            pass
        self.failIf(found_lib_builder is None)
        self.failUnless(found_lib_builder.basename() == 'LibraryInMemoryTest')
        pass
Пример #8
0
    def test_auto_fileiface_only(self):
        fs = FileSystem(path=[])
        fs.rootdirectory().add(
            name=const.CONFIX2_PKG,
            entry=File(['PACKAGE_NAME("argh")', 'PACKAGE_VERSION("1.2.3")']))
        fs.rootdirectory().add(name=const.CONFIX2_DIR, entry=File())
        file = fs.rootdirectory().add(
            name='file.h',
            entry=File(lines=["// CONFIX:INSTALLPATH(['xxx'])"]))
        package = LocalPackage(rootdirectory=fs.rootdirectory(),
                               setups=[ConfixSetup(use_libtool=False)])
        package.boil(external_nodes=[])
        package.output()

        file_h_builder = package.rootbuilder().find_entry_builder(['file.h'])
        self.failIf(file_h_builder is None)
        self.failUnless(isinstance(file_h_builder, HeaderBuilder))

        self.failUnlessEqual(file_h_builder.visibility(), ['xxx'])
        self.failUnless(file_h_builder.public())
        self.failUnlessEqual(file_h_builder.package_visibility_action()[0],
                             HeaderBuilder.LOCALVISIBILITY_INSTALL)
        self.failUnlessEqual(file_h_builder.package_visibility_action()[1],
                             ['xxx'])
        pass
Пример #9
0
    def test_explicit_no_public_visibility(self):
        fs = FileSystem(path=[])
        fs.rootdirectory().add(
            name=const.CONFIX2_PKG,
            entry=File(
                lines=["PACKAGE_NAME('blah')", "PACKAGE_VERSION('1.2.3')"]))
        fs.rootdirectory().add(
            name=const.CONFIX2_DIR,
            entry=File(lines=["H(filename='header.h', public=False)"]))
        fs.rootdirectory().add(name='header.h', entry=File())

        package = LocalPackage(rootdirectory=fs.rootdirectory(),
                               setups=[Boilerplate(), C()])
        package.boil(external_nodes=[])
        package.output()

        h = package.rootbuilder().find_entry_builder(['header.h'])

        # no explicit local visibility is given, so the namespace
        # recognizer sees no namespace - and the file can locally be
        # included directly.
        self.failUnlessEqual(h.package_visibility_action()[0],
                             HeaderBuilder.LOCALVISIBILITY_DIRECT_INCLUDE)
        self.failUnlessEqual(h.package_visibility_action()[1], [])

        # public visibility is explicitly not wanted.
        self.failIf(h.public())
        pass
Пример #10
0
    def test__CMAKE_CMAKELISTS_ADD_INCLUDE_local_only(self):
        fs = FileSystem(path=[''])
        fs.rootdirectory().add(
            name=const.CONFIX2_PKG,
            entry=File(lines=[
                'PACKAGE_NAME("test_CMAKE_CMAKELISTS_ADD_INCLUDE_local_only")',
                'PACKAGE_VERSION("1.2.3")'
            ]))
        fs.rootdirectory().add(
            name=const.CONFIX2_DIR,
            entry=File(lines=[
                'CMAKE_CMAKELISTS_ADD_INCLUDE("include1", CMAKE_BUILDINFO_LOCAL)',
                'CMAKE_CMAKELISTS_ADD_INCLUDE("include2", CMAKE_BUILDINFO_LOCAL)'
            ]))

        package = LocalPackage(rootdirectory=fs.rootdirectory(),
                               setups=[ExplicitDirectorySetup(),
                                       CMakeSetup()])
        package.boil(external_nodes=[])
        package.output()

        self.failUnless('include1' in find_cmake_output_builder(
            package.rootbuilder()).top_cmakelists().get_includes())
        self.failUnless('include2' in find_cmake_output_builder(
            package.rootbuilder()).top_cmakelists().get_includes())

        for buildinfo in package.rootbuilder().iter_buildinfos():
            self.failIf(
                isinstance(buildinfo, BuildInfo_Toplevel_CMakeLists_Include))
            pass
        pass
Пример #11
0
    def testDirectory(self):
        fs = FileSystem(path=[])
        fs.rootdirectory().add(
            name=const.CONFIX2_PKG,
            entry=File(
                lines=["PACKAGE_NAME('xxx')", "PACKAGE_VERSION('6.6.6')"]))
        fs.rootdirectory().add(
            name=const.CONFIX2_DIR,
            entry=File(lines=[
                "SET_FILE_PROPERTY(", "    filename='file.h', ",
                "    name='INSTALLPATH_CINCLUDE',", "    value=['xxx'])"
            ]))
        fs.rootdirectory().add(name='file.h', entry=File(lines=[]))
        package = LocalPackage(rootdirectory=fs.rootdirectory(),
                               setups=[ConfixSetup(use_libtool=False)])
        package.boil(external_nodes=[])
        package.output()

        file_h_builder = package.rootbuilder().find_entry_builder(['file.h'])
        self.failIf(file_h_builder is None)
        self.failUnless(isinstance(file_h_builder, HeaderBuilder))

        self.failUnlessEqual(file_h_builder.visibility(), ['xxx'])
        self.failUnless(file_h_builder.public())
        self.failUnlessEqual(file_h_builder.package_visibility_action()[0],
                             HeaderBuilder.LOCALVISIBILITY_INSTALL)
        self.failUnlessEqual(file_h_builder.package_visibility_action()[1],
                             ['xxx'])
        pass
Пример #12
0
    def test__CMAKE_ADD_MODULE_FILE(self):
        fs = FileSystem(path=[''])
        fs.rootdirectory().add(
            name=const.CONFIX2_PKG,
            entry=File(lines=[
                'PACKAGE_NAME("test_CMAKE_ADD_MODULE_FILE")',
                'PACKAGE_VERSION("1.2.3")'
            ]))
        fs.rootdirectory().add(
            name=const.CONFIX2_DIR,
            entry=File(lines=[
                'CMAKE_ADD_MODULE_FILE(', '    name="file1",',
                '    lines=["xxx"],'
                '    flags=CMAKE_BUILDINFO_LOCAL)', 'CMAKE_ADD_MODULE_FILE(',
                '    name="file2",', '    lines=["xxx"],',
                '    flags=CMAKE_BUILDINFO_LOCAL)'
            ]))

        package = LocalPackage(rootdirectory=fs.rootdirectory(),
                               setups=[ExplicitDirectorySetup(),
                                       CMakeSetup()])
        package.boil(external_nodes=[])
        package.output()

        self.failUnless(fs.rootdirectory().find(
            ['confix-admin', 'cmake', 'Modules', 'file1']))
        self.failUnless(fs.rootdirectory().find(
            ['confix-admin', 'cmake', 'Modules', 'file2']))

        pass
Пример #13
0
    def test__CMAKE_CMDLINE_MACROS_local_only(self):
        fs = FileSystem(path=[])
        fs.rootdirectory().add(
            name=const.CONFIX2_PKG,
            entry=File(lines=[
                'PACKAGE_NAME("test_CMAKE_CMDLINE_MACROS_local_only")',
                'PACKAGE_VERSION("1.2.3")'
            ]))
        fs.rootdirectory().add(
            name=const.CONFIX2_DIR,
            entry=File(lines=[
                'CMAKE_CMDLINE_MACROS(macros={"macro1": "value1", "macro2": "value2"}, flags=CMAKE_BUILDINFO_LOCAL)'
            ]))

        package = LocalPackage(rootdirectory=fs.rootdirectory(),
                               setups=[ExplicitDirectorySetup(),
                                       CMakeSetup()])
        package.boil(external_nodes=[])
        package.output()

        self.failUnless("-Dmacro1=value1" in find_cmake_output_builder(
            package.rootbuilder()).local_cmakelists().get_definitions())
        self.failUnless("-Dmacro2=value2" in find_cmake_output_builder(
            package.rootbuilder()).local_cmakelists().get_definitions())

        for buildinfo in package.rootbuilder().iter_buildinfos():
            self.failIf(
                isinstance(buildinfo, BuildInfo_CommandlineMacros_CMake))
            pass
        pass
Пример #14
0
    def test__CMAKE_CMAKELISTS_ADD_FIND_CALL_propagate_and_local(self):
        fs = FileSystem(path=[''])
        fs.rootdirectory().add(
            name=const.CONFIX2_PKG,
            entry=File(lines=[
                'PACKAGE_NAME("test_CMAKE_CMAKELISTS_ADD_FIND_CALL_propagate_and_local")',
                'PACKAGE_VERSION("1.2.3")'
            ]))
        fs.rootdirectory().add(
            name=const.CONFIX2_DIR,
            entry=File(lines=[
                'CMAKE_CMAKELISTS_ADD_FIND_CALL("call", (CMAKE_BUILDINFO_PROPAGATE, CMAKE_BUILDINFO_LOCAL))'
            ]))

        package = LocalPackage(rootdirectory=fs.rootdirectory(),
                               setups=[ExplicitDirectorySetup(),
                                       CMakeSetup()])
        package.boil(external_nodes=[])
        package.output()

        self.failUnless('call' in find_cmake_output_builder(
            package.rootbuilder()).top_cmakelists().get_find_calls())

        for buildinfo in package.rootbuilder().iter_buildinfos():
            if isinstance(buildinfo, BuildInfo_Toplevel_CMakeLists_FindCall):
                break
            pass
        else:
            self.fail()
            pass
        pass
Пример #15
0
    def test__library(self):
        rootdir = Directory()
        rootdir.add(
            name=const.CONFIX2_PKG,
            entry=File(lines=["PACKAGE_NAME('LibtoolInMemoryTest.testLibrary')",
                              "PACKAGE_VERSION('1.2.3')"]))
        rootdir.add(
            name=const.CONFIX2_DIR,
            entry=File(lines=["LIBRARY(members=[C(filename='file.c')])"]))
        rootdir.add(
            name='file.c',
            entry=File())

        package = LocalPackage(rootdirectory=rootdir,
                               setups=[ExplicitSetup(use_libtool=True)])
        package.boil(external_nodes=[])
        package.output()

        library_builder = None
        for b in package.rootbuilder().iter_builders():
            if isinstance(b, LibraryBuilder):
                self.failUnless(library_builder is None)
                library_builder = b
                pass
            pass
        self.failIf(library_builder is None)

        automake_output_builder = find_automake_output_builder(package.rootbuilder())
        self.failUnless('lib'+library_builder.basename()+'.la' in automake_output_builder.makefile_am().ltlibraries())
        pass
Пример #16
0
    def test__explicit_no_public_visibility(self):
        fs = FileSystem(path=self.rootpath())
        source = fs.rootdirectory().add(name='source', entry=Directory())
        build = fs.rootdirectory().add(name='build', entry=Directory())
        install = fs.rootdirectory().add(name='install', entry=Directory())

        source.add(
            name=const.CONFIX2_PKG,
            entry=File(
                lines=["PACKAGE_NAME('blah')", "PACKAGE_VERSION('1.2.3')"]))
        source.add(name=const.CONFIX2_DIR,
                   entry=File(lines=["H(filename='header.h', public=False)"]))
        source.add(name='header.h', entry=File())

        package = LocalPackage(
            rootdirectory=source,
            setups=[Boilerplate(),
                    C(), CMake(library_dependencies=False)])
        package.boil(external_nodes=[])
        package.output()

        fs.sync()

        commands.cmake(
            packageroot=source.abspath(),
            builddir=build.abspath(),
            args=['-DCMAKE_INSTALL_PREFIX=' + '/'.join(install.abspath())])
        commands.make(builddir=build.abspath(), args=['install'])

        scan.rescan_dir(install)

        self.failIf(install.find(['include', 'header.h']))

        pass
Пример #17
0
    def test(self):
        fs = FileSystem(path=['don\'t', 'care'])
        fs.rootdirectory().add(
            name=const.CONFIX2_PKG,
            entry=File(lines=[
                "PACKAGE_NAME('" + self.__class__.__name__ +
                "')", "PACKAGE_VERSION('1.2.3')",
                "from libconfix.setups.explicit_setup import ExplicitSetup",
                "SETUP([ExplicitSetup(use_libtool=True)])"
            ]))
        fs.rootdirectory().add(
            name=const.CONFIX2_DIR,
            entry=File(lines=["DIRECTORY(['dir1'])", "DIRECTORY(['dir2'])"]))
        dir1 = fs.rootdirectory().add(name='dir1', entry=Directory())
        dir2 = fs.rootdirectory().add(name='dir2', entry=Directory())
        dir1.add(name=const.CONFIX2_DIR,
                 entry=File(lines=["PROVIDE_SYMBOL('x')"]))
        dir2.add(name=const.CONFIX2_DIR,
                 entry=File(lines=["PROVIDE_SYMBOL('x')"]))

        package = LocalPackage(rootdirectory=fs.rootdirectory(), setups=None)
        try:
            package.boil(external_nodes=[])
            self.fail()
        except Error:
            pass
        pass
Пример #18
0
    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(lines=["from libconfix.core.machinery.builder import Builder",
                              "class MyBuilder(Builder):",
                              "    def locally_unique_id(self): return 'my_builder_id'",
                              "ADD_BUILDER(builder=MyBuilder())"]))

        package = LocalPackage(rootdirectory=fs.rootdirectory(),
                               setups=[ExplicitSetup(use_libtool=True)])
        package.boil(external_nodes=[])

        for b in package.rootbuilder().iter_builders():
            if b.locally_unique_id() == 'my_builder_id':
                break
            pass
        else:
            self.fail()
            pass
        pass
Пример #19
0
    def test__basic(self):
        fs = FileSystem(path=self.rootpath())
        source = fs.rootdirectory().add(name='source', entry=Directory())
        build = fs.rootdirectory().add(name='build', entry=Directory())
        install = fs.rootdirectory().add(name='install', entry=Directory())

        source.add(
            name=const.CONFIX2_PKG,
            entry=File(lines=[
                "from libconfix.setups.boilerplate import Boilerplate",
                "from libconfix.setups.cmake import CMake",
                "from libconfix.setups.script import Script",
                "PACKAGE_NAME('cmake-script-build')",
                "PACKAGE_VERSION('1.2.3')",
                "SETUP([Boilerplate(), CMake(library_dependencies=False), Script()])",
            ]))
        source.add(name=const.CONFIX2_DIR,
                   entry=File(lines=['ADD_SCRIPT(filename="script")']))
        source.add(name='script', entry=File())

        package = LocalPackage(rootdirectory=source, setups=None)
        package.boil(external_nodes=[])
        package.output()
        fs.sync()

        commands.cmake(
            packageroot=source.abspath(),
            builddir=build.abspath(),
            args=['-DCMAKE_INSTALL_PREFIX=' + '/'.join(install.abspath())])
        commands.make(builddir=build.abspath(), args=['install'])

        stat = os.stat(os.sep.join(install.abspath() + ['bin', 'script']))
        pass
Пример #20
0
    def test__with_explicit_setup(self):
        filesys = FileSystem(path=[])
        filesys.rootdirectory().add(
            name=const.CONFIX2_PKG,
            entry=File(lines=[
                'PACKAGE_NAME("CheckProgramTest")', 'PACKAGE_VERSION("1.2.3")'
            ]))
        filesys.rootdirectory().add(
            name=const.CONFIX2_DIR,
            entry=File(lines=[
                "TESTS_ENVIRONMENT('name', 'value')",
                "EXECUTABLE(center=C(filename='main.c'),",
                "           exename='the-test-program',",
                "           what=EXECUTABLE_CHECK)"
            ]))
        filesys.rootdirectory().add(name='main.c',
                                    entry=File(lines=['int main(void) {}']))

        package = LocalPackage(rootdirectory=filesys.rootdirectory(),
                               setups=[ExplicitSetup(use_libtool=False)])
        package.boil(external_nodes=[])
        package.output()

        rootdir_output_builder = find_automake_output_builder(
            package.rootbuilder())
        self.failIf(rootdir_output_builder is None)

        self.failUnless('the-test-program' in
                        rootdir_output_builder.makefile_am().check_programs())
        self.failUnlessEqual(
            len(rootdir_output_builder.makefile_am().tests_environment()), 1)
        self.failUnlessEqual(
            rootdir_output_builder.makefile_am().tests_environment()['name'],
            'value')
Пример #21
0
 def test__sync_file_clear_on_sync_false(self):
     fs = FileSystem(path=self.rootpath())
     file = File(lines=['line'])
     fs.rootdirectory().add(name='file', entry=file)
     fs.sync()
     self.failIf(file.raw_lines() is None)
     pass
Пример #22
0
    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
Пример #23
0
    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())
        lo1 = fs.rootdirectory().add(
            name='lo1',
            entry=Directory())
        lo2 = fs.rootdirectory().add(
            name='lo2',
            entry=Directory())
        hi = fs.rootdirectory().add(
            name='hi',
            entry=Directory())
        package = LocalPackage(rootdirectory=fs.rootdirectory(), setups=[NullSetup()])

        lo1_builder = DirectoryBuilder(directory=lo1)
        lo1_builder.add_provide(Provide_Symbol(symbol='the_ambiguous_symbol'))
        package.rootbuilder().add_builder(lo1_builder)

        lo2_builder = DirectoryBuilder(directory=lo2)
        lo2_builder.add_provide(Provide_Symbol(symbol='the_ambiguous_symbol'))
        package.rootbuilder().add_builder(lo2_builder)

        hi_builder = DirectoryBuilder(directory=hi)
        hi_builder.add_require(Require_Symbol(symbol='the_ambiguous_symbol', found_in=[]))
        package.rootbuilder().add_builder(hi_builder)

        self.failUnlessRaises(Error, package.boil, external_nodes=[])
        pass
Пример #24
0
    def test(self):
        fs = FileSystem(path=[])
        fs.rootdirectory().add(
            name=const.CONFIX2_PKG,
            entry=File(lines=[
                "PACKAGE_NAME('ExplicitLibraryVersionTest')",
                "PACKAGE_VERSION('1.2.3')"
            ]))
        fs.rootdirectory().add(name=const.CONFIX2_DIR,
                               entry=File(lines=["LIBRARY_VERSION((6,6,6))"]))
        fs.rootdirectory().add(name='file.c', entry=File())
        package = LocalPackage(rootdirectory=fs.rootdirectory(),
                               setups=[ConfixSetup(use_libtool=True)])
        package.boil(external_nodes=[])

        for b in package.rootbuilder().iter_builders():
            if isinstance(b, LibraryBuilder):
                lib_builder = b
                break
            pass
        else:
            self.fail()
            pass

        self.failUnlessEqual(lib_builder.version(), (6, 6, 6))
        self.failUnlessEqual(lib_builder.default_version(), "1.2.3")
        pass
Пример #25
0
    def test__basic(self):
        fs = FileSystem(path=[])
        fs.rootdirectory().add(
            name=const.CONFIX2_PKG,
            entry=File(lines=[
                'PACKAGE_NAME("HierarchyInMemoryTest.basic")',
                'PACKAGE_VERSION("1.2.3")'
            ]))
        fs.rootdirectory().add(
            name=const.CONFIX2_DIR,
            entry=File(lines=[
                'DIRECTORY(["directory0"])', 'DIRECTORY(["directory1"])'
            ]))
        fs.rootdirectory().add(name='directory0', entry=Directory())
        fs.rootdirectory().add(name='directory1', entry=Directory())

        package = LocalPackage(rootdirectory=fs.rootdirectory(),
                               setups=[ExplicitDirectorySetup(),
                                       CMakeSetup()])
        package.boil(external_nodes=[])
        package.output()

        cmake_output_builder = find_cmake_output_builder(package.rootbuilder())

        self.failUnlessEqual(
            len(cmake_output_builder.local_cmakelists().get_subdirectories()),
            2
            # plus the admin stuff, confix-admin/cmake/Modules
            + 4)
        self.failUnless('directory0' in cmake_output_builder.local_cmakelists(
        ).get_subdirectories())
        self.failUnless('directory1' in cmake_output_builder.local_cmakelists(
        ).get_subdirectories())

        pass
Пример #26
0
    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())
        fs.rootdirectory().add(name='main.cc',
                               entry=File(lines=[
                                   '// CONFIX:EXENAME("explicit-name")',
                                   'int main() { return 0; }'
                               ]))

        package = LocalPackage(rootdirectory=fs.rootdirectory(),
                               setups=[ConfixSetup(use_libtool=False)])
        package.boil(external_nodes=[])
        package.output()

        for b in package.rootbuilder().iter_builders():
            if isinstance(
                    b, ExecutableBuilder) and b.exename() == 'explicit-name':
                break
            pass
        else:
            self.fail()
            pass
        pass
Пример #27
0
    def testExplicitName(self):
        fs = FileSystem(path=['don\'t', 'care'])
        fs.rootdirectory().add(
            name=const.CONFIX2_PKG,
            entry=File(lines=[
                "PACKAGE_NAME('LibraryNames.testExplicitName')",
                "PACKAGE_VERSION('1.2.3')"
            ]))
        fs.rootdirectory().add(name=const.CONFIX2_DIR,
                               entry=File(lines=["LIBNAME('myownname')"]))
        fs.rootdirectory().add(name='file.c', entry=File())

        package = LocalPackage(rootdirectory=fs.rootdirectory(),
                               setups=[ConfixSetup(use_libtool=False)])
        package.boil(external_nodes=[])

        for b in package.rootbuilder().iter_builders():
            if isinstance(b, LibraryBuilder):
                self.failUnlessEqual(b.basename(), 'myownname')
                break
            pass
        else:
            self.fail()
            pass
        pass
Пример #28
0
    def test__live(self):
        fs = FileSystem(path=[])
        fs.rootdirectory().add(name=const.CONFIX2_PKG,
                               entry=File(lines=[
                                   'PACKAGE_NAME("ModulesInMemoryTest")',
                                   'PACKAGE_VERSION("1.2.3")'
                               ]))
        fs.rootdirectory().add(
            name=const.CONFIX2_DIR,
            entry=File(lines=[
                'from libconfix.plugins.cmake.out_cmake import find_cmake_output_builder',
                'from libconfix.core.machinery.builder import Builder',
                'class ModuleAdder(Builder):', '     def output(self):',
                '         super(ModuleAdder, self).output()',
                '         cmake_out = find_cmake_output_builder(self.parentbuilder())',
                '         cmake_out.add_module_file(name="TestModule.cmake",',
                '                                   lines=["my content"])',
                '         pass', '     pass',
                '     def locally_unique_id(self):',
                '         return str(self.__class__)',
                'ADD_BUILDER(ModuleAdder())'
            ]))
        package = LocalPackage(rootdirectory=fs.rootdirectory(),
                               setups=[CMakeSetup(),
                                       ExplicitDirectorySetup()])
        package.boil(external_nodes=[])
        package.output()

        modulefile = fs.rootdirectory().find(
            ['confix-admin', 'cmake', 'Modules', 'TestModule.cmake'])
        self.failIf(modulefile is None)
        self.failIf(modulefile.lines()[0] != 'my content')

        pass
Пример #29
0
    def setUp(self):
        self.fs_ = dirhier.packageroot()
        liblo = self.fs_.rootdirectory().add(name='lo', entry=Directory())
        liblo.add(name=const.CONFIX2_DIR,
                  entry=File(lines=["LIBRARY_VERSION((1,2,3))"]))
        liblo.add(name='lo.h',
                  entry=File(lines=[
                      '#ifndef LO_H', '#  define LO_H', '#endif', 'void lo();'
                  ]))
        liblo.add(name='lo.c', entry=File(lines=['void lo() {}']))

        self.package_ = LocalPackage(
            rootdirectory=self.fs_.rootdirectory(),
            setups=[ConfixSetup(use_libtool=self.use_libtool())])
        self.package_.boil(external_nodes=[])
        self.package_.output()

        self.lodir_builder_ = self.package_.rootbuilder().find_entry_builder(
            ['lo'])
        self.failIf(self.lodir_builder_ is None)
        self.lodir_output_builder_ = find_automake_output_builder(
            self.lodir_builder_)
        self.failIf(self.lodir_output_builder_ is None)

        self.lolib_builder_ = None
        for b in self.lodir_builder_.iter_builders():
            if isinstance(b, LibraryBuilder):
                self.lolib_builder_ = b
                pass
            pass

        assert self.lolib_builder_ is not None

        pass
Пример #30
0
    def test__creator_with_params(self):
        fs = FileSystem(path=['don\'t', 'care'])
        fs.rootdirectory().add(
            name=const.CONFIX2_PKG,
            entry=File(lines=[
                "from libconfix.plugins.plainfile.setup import PlainFileCreatorSetup",
                "PACKAGE_NAME('PlainFileCreatorTest')",
                "PACKAGE_VERSION('1.2.3')", "SETUP([PlainFileCreatorSetup(",
                "           regex=r'\.data$',",
                "           datadir=['the', 'data', 'dir']),",
                "       PlainFileCreatorSetup(",
                "           regex=r'\.prefix$',",
                "           prefixdir=['the', 'prefix', 'dir'])])"
            ]))
        fs.rootdirectory().add(name=const.CONFIX2_DIR, entry=File())
        fs.rootdirectory().add(name='file.data', entry=File())
        fs.rootdirectory().add(name='file.prefix', entry=File())

        package = LocalPackage(rootdirectory=fs.rootdirectory(), setups=None)
        package.boil(external_nodes=[])

        databuilder = package.rootbuilder().find_entry_builder(['file.data'])
        prefixbuilder = package.rootbuilder().find_entry_builder(
            ['file.prefix'])
        self.failIf(databuilder is None)
        self.failIf(prefixbuilder is None)

        self.failUnless(databuilder.datadir() == ['the', 'data', 'dir'])
        self.failUnless(databuilder.prefixdir() is None)
        self.failUnless(prefixbuilder.prefixdir() == ['the', 'prefix', 'dir'])
        self.failUnless(prefixbuilder.datadir() is None)
        pass