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
def test__publicinstall_flat(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('test_publicinstall_flat')", "PACKAGE_VERSION('1.2.3')" ])) source.add(name=const.CONFIX2_DIR, entry=File()) source.add(name='file.idl', entry=File()) package = LocalPackage(rootdirectory=source, setups=[ AutoBoilerplate(), CMake(library_dependencies=False), IDLSetup() ]) 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.failUnless(install.find(['include', 'file.idl'])) pass
def test__localinstall_not_absolutely_necessary(self): fs = FileSystem(path=self.rootpath()) source = fs.rootdirectory().add(name='source', entry=Directory()) build = fs.rootdirectory().add(name='build', entry=Directory()) source.add( name=const.CONFIX2_PKG, entry=File(lines=[ "PACKAGE_NAME('test_localinstall_not_absolutely_necessary')", "PACKAGE_VERSION('1.2.3')" ])) source.add(name=const.CONFIX2_DIR, entry=File()) source.add(name='file.idl', entry=File()) package = LocalPackage(rootdirectory=source, setups=[ AutoBoilerplate(), CMake(library_dependencies=False), IDLSetup() ]) package.boil(external_nodes=[]) package.output() fs.sync() commands.cmake(packageroot=source.abspath(), builddir=build.abspath(), args=[]) commands.make(builddir=build.abspath(), args=[]) scan.rescan_dir(build) self.failUnless(build.find(['confix-include', 'file.idl'])) pass
def test(self): fs = FileSystem(path=self.rootpath()) source = fs.rootdirectory().add(name='source', entry=intra_package.make_source_tree()) build = fs.rootdirectory().add(name='build', entry=Directory()) package = LocalPackage( rootdirectory=source, setups=[ExplicitDirectorySetup(), ExplicitCSetup(), CMakeSetup()]) package.boil(external_nodes=[]) package.output() fs.sync() commands.cmake(packageroot=source.abspath(), builddir=build.abspath(), args=[]) commands.make(builddir=build.abspath(), args=[]) scan.rescan_dir(build) # I doubt that this will hold on Windows :-) if it becomes an # issue we will skip this check self.failUnless(build.find(['lo', 'liblo.a'])) self.failUnless(build.find(['hi', 'libhi.a'])) self.failUnless(build.find(['exe', 'exe'])) pass
def test__basic(self): linked_package = LocalPackage( rootdirectory=self.__linked_sourcedir, setups=[ExplicitDirectorySetup(), ExplicitCSetup(), CMakeSetup()]) # read repo files along the cascade repo = AutomakeCascadedPackageRepository( prefix=self.__regular_installdir.abspath(), readonly_prefixes=[ self.__two_readonly_installdir.abspath(), self.__one_readonly_installdir.abspath() ]) linked_package.boil(external_nodes=repo.iter_nodes()) linked_package.output() self.__fs.sync() commands.cmake( packageroot=self.__linked_sourcedir.abspath(), builddir=self.__linked_builddir.abspath(), args=[ '-DCMAKE_INSTALL_PREFIX=' + '/'.join(self.__regular_installdir.abspath()), '-DREADONLY_PREFIXES=' + '/'.join(self.__one_readonly_installdir.abspath()) + ';' + '/'.join(self.__two_readonly_installdir.abspath()) ]) commands.make(builddir=self.__linked_builddir.abspath(), args=[]) self.failUnless( os.path.isfile( os.sep.join(self.__linked_builddir.abspath() + ['exe']))) pass
def test__basic(self): fs = FileSystem(path=self.rootpath()) source = fs.rootdirectory().add(name='source', entry=make_package()) build = fs.rootdirectory().add(name='build', entry=Directory()) install = fs.rootdirectory().add(name='install', entry=Directory()) package = LocalPackage(rootdirectory=source, setups=[ Boilerplate(), Plainfile(), 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']) self.failUnless( os.path.isfile( os.sep.join( self.rootpath() + ['install', 'share', 'subdir', 'data', 'plainfile_data']))) self.failUnless( os.path.isfile( os.sep.join( self.rootpath() + ['install', 'subdir', 'prefix', 'plainfile_prefix']))) pass
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
def test__generated_plainfile_install(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('generated_plainfile_install')", "PACKAGE_VERSION('1.2.3')" ])) source.add( name=const.CONFIX2_DIR, entry=File(lines=[ "ADD_PLAINFILE(filename='prefixfile', prefixdir='prefixdir')", "ADD_PLAINFILE(filename='datafile', datadir='datadir')", "CMAKE_CMAKELISTS_ADD_CUSTOM_COMMAND__OUTPUT(", " outputs=['prefixfile', 'datafile'],", " commands=[('touch', ['prefixfile']),", " ('touch', ['datafile'])],", " depends=[],", ")", # without doing anything, nothing will be built. hook # it to the 'all' target. "CMAKE_CMAKELISTS_ADD_CUSTOM_TARGET(", " name='generate_those_bloody_files_when_I_say_make',", " all=True,", " depends=['prefixfile', 'datafile'],", ")", ])) source.add(name='prefixfile', entry=File(state=FileState.VIRTUAL, lines=[])) source.add(name='datafile', entry=File(state=FileState.VIRTUAL, lines=[])) package = LocalPackage(rootdirectory=source, setups=[ Boilerplate(), Plainfile(), 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.failUnless(install.find(['prefixdir', 'prefixfile'])) self.failUnless(install.find(['share', 'datadir', 'datafile'])) pass
def test__no_timestamp_clobber(self): fs = FileSystem(path=self.rootpath()) source = fs.rootdirectory().add(name='source', entry=Directory()) build = fs.rootdirectory().add(name='build', entry=Directory()) source.add(name=const.CONFIX2_PKG, entry=File(lines=[ "PACKAGE_NAME('test_no_timestamp_clobber')", "PACKAGE_VERSION('1.2.3')" ])) source.add(name=const.CONFIX2_DIR, entry=File(lines=[ "for f in xrange(200):", " H(filename='%s.h' % str(f), install=['subdir'])", ])) for f in xrange(200): source.add(name='%s.h' % str(f), entry=File()) pass package = LocalPackage( rootdirectory=source, setups=[ExplicitDirectorySetup(), ExplicitCSetup(), CMakeSetup()]) package.boil(external_nodes=[]) package.output() fs.sync() commands.cmake(packageroot=source.abspath(), builddir=build.abspath(), args=[]) commands.make(builddir=build.abspath(), args=[]) mtimes = {} for f in xrange(200): mtime = os.stat( os.sep.join(build.abspath() + ['confix-include', 'subdir', '%s.h' % str(f)])).st_mtime mtimes[f] = mtime pass # wait a bit and then call 'make' again time.sleep(1) commands.make(builddir=build.abspath(), args=[]) for f in xrange(200): mtime = os.stat( os.sep.join(build.abspath() + ['confix-include', 'subdir', '%s.h' % str(f)])).st_mtime self.failIf(mtime != mtimes[f], f) pass pass
def test__two_directories_with_generator_same_outputfilename(self): """ The artificial custom target that we generate for every custom command has a name that is derived from the command's output(s). This leads to clashes when two directories have commands that generate outputs with the same name. """ fs = FileSystem(path=self.rootpath()) source = fs.rootdirectory().add(name='source', entry=Directory()) build = fs.rootdirectory().add(name='build', entry=Directory()) source.add( name=const.CONFIX2_PKG, entry=File(lines=[ "PACKAGE_NAME('two_directories_with_generator_same_outputfilename')", "PACKAGE_VERSION('1.2.3')" ])) source.add( name=const.CONFIX2_DIR, entry=File(lines=['DIRECTORY(["dira"])', 'DIRECTORY(["dirb"])'])) dira = source.add(name='dira', entry=Directory()) dira.add(name=const.CONFIX2_DIR, entry=File(lines=[ 'CMAKE_CMAKELISTS_ADD_CUSTOM_COMMAND__OUTPUT(', ' outputs=["output"],', ' commands=[("touch", ["output"])],', ' depends=[])' ])) dirb = source.add(name='dirb', entry=Directory()) dirb.add(name=const.CONFIX2_DIR, entry=File(lines=[ 'CMAKE_CMAKELISTS_ADD_CUSTOM_COMMAND__OUTPUT(', ' outputs=["output"],', ' commands=[("touch", ["output"])],', ' depends=[])' ])) package = LocalPackage(rootdirectory=source, setups=[ Boilerplate(), Plainfile(), CMake(library_dependencies=False) ]) package.boil(external_nodes=[]) package.output() fs.sync() commands.cmake(packageroot=source.abspath(), builddir=build.abspath(), args=[]) commands.make(builddir=build.abspath(), args=[]) pass
def test__library_depends_on_generated_header__from_a_header_only_directory( self): fs = FileSystem(path=self.rootpath()) source = fs.rootdirectory().add(name='source', entry=Directory()) build = fs.rootdirectory().add(name='build', entry=Directory()) source.add( name=const.CONFIX2_PKG, entry=File(lines=[ "PACKAGE_NAME('library_depends_on_generated_header__from_a_header_only_directory')", "PACKAGE_VERSION('1.2.3')" ])) generated_header = source.add(name='generated-header', entry=Directory()) source.add(name=const.CONFIX2_DIR, entry=File(lines=[ "DIRECTORY(['generated-header'])", "DIRECTORY(['library1'])", "DIRECTORY(['library2'])", ])) library1 = source.add(name='library1', entry=Directory()) library1.add( name=const.CONFIX2_DIR, entry=File(lines=[ "LIBRARY(members=[C(filename='using-generated-header.c')])" ])) library1.add(name='using-generated-header.c', entry=File(lines=['#include <generated-header.h>'])) library2 = source.add(name='library2', entry=Directory()) library2.add( name=const.CONFIX2_DIR, entry=File(lines=[ "LIBRARY(members=[C(filename='using-generated-header.c')])" ])) library2.add(name='using-generated-header.c', entry=File(lines=['#include <generated-header.h>'])) package = LocalPackage(rootdirectory=source, setups=[ Boilerplate(), C(), CMake(library_dependencies=False), GeneratedHeaderSetup() ]) package.boil(external_nodes=[]) package.output() fs.sync() commands.cmake(packageroot=source.abspath(), builddir=build.abspath()) commands.make(builddir=build.abspath(), args=['-j', 'VERBOSE=1']) pass
def test__parallel_build(self): num_dirs = 50 fs = FileSystem(path=self.rootpath()) source = fs.rootdirectory().add(name='source', entry=Directory()) build = fs.rootdirectory().add(name='build', entry=Directory()) source.add(name=const.CONFIX2_PKG, entry=File(lines=[ "PACKAGE_NAME('test_basic')", "PACKAGE_VERSION('1.2.3')" ])) source.add(name=const.CONFIX2_DIR, entry=File(lines=[ 'DIRECTORY(["dir_' + str(i) + '"])' for i in xrange(50) ] + ['DIRECTORY(["user"])'])) for i in xrange(num_dirs): dir_i = source.add(name='dir_' + str(i), entry=Directory()) dir_i.add( name=const.CONFIX2_DIR, entry=File(lines=[ "LIBRARY(members=[H(filename='file_" + str(i) + ".h', ", " install=['prefix', 'subdir_" + str(i) + "']), ", " C(filename='file_" + str(i) + ".c')])" ])) dir_i.add(name='file_' + str(i) + '.h', entry=File()) dir_i.add(name='file_' + str(i) + '.c', entry=File()) pass user = source.add(name='user', entry=Directory()) user.add(name=const.CONFIX2_DIR, entry=File(lines=["LIBRARY(members=[C(filename='user.c')])"])) user.add(name='user.c', entry=File(lines=[ '#include <prefix/subdir_' + str(i) + '/file_' + str(i) + '.h>' for i in xrange(num_dirs) ])) 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=[]) commands.make(builddir=build.abspath(), args=['-j']) pass
def test__reproduce_two_custom_targets(self): fs = FileSystem(path=self.rootpath()) source = fs.rootdirectory().add( name='source', entry=Directory()) build = fs.rootdirectory().add( name='build', entry=Directory()) source.add( name=const.CONFIX2_PKG, entry=File(lines=["PACKAGE_NAME('test_reproduce_two_custom_targets')", "PACKAGE_VERSION('1.2.3')"])) source.add( name=const.CONFIX2_DIR, entry=File(lines=[ 'CMAKE_CMAKELISTS_ADD_FIND_CALL(', ' find_call=["ADD_CUSTOM_COMMAND(",', ' " OUTPUT generated",', ' " COMMAND sleep 1",', ' " COMMAND echo custom command running",', ' " COMMAND echo I was here >> generated",', ' " COMMAND touch generated",', ' ")",', ' "ADD_CUSTOM_TARGET(",', ' " my-all-1",', ' " ALL",', ' " DEPENDS generated",', ' ")",', ' "ADD_CUSTOM_TARGET(",', ' " my-all-2",', ' " ALL",', ' " DEPENDS generated",', ' ")",', ' ],', ' flags=CMAKE_BUILDINFO_LOCAL)', ])) package = LocalPackage(rootdirectory=source, setups=[Boilerplate(), CMake(library_dependencies=False)]) package.boil(external_nodes=[]) package.output() fs.sync() commands.cmake(packageroot=source.abspath(), builddir=build.abspath(), args=[]) commands.make(builddir=build.abspath(), args=['-j2']) scan.rescan_dir(build) self.failUnlessEqual(build.get('generated').lines(), ['I was here', 'I was here']) pass
def test__sourcefile_dependency(self): fs = FileSystem(path=self.rootpath()) source = fs.rootdirectory().add(name='source', entry=Directory()) build = fs.rootdirectory().add(name='build', entry=Directory()) source.add(name=const.CONFIX2_PKG, entry=File(lines=[ "PACKAGE_NAME('test_sourcefile_dependency')", "PACKAGE_VERSION('1.2.3')" ])) source.add(name=const.CONFIX2_DIR, entry=File(lines=[ "H(filename='h.h', install=['subdir'])", ])) h = source.add(name='h.h', entry=File()) package = LocalPackage( rootdirectory=source, setups=[ExplicitDirectorySetup(), ExplicitCSetup(), CMakeSetup()]) package.boil(external_nodes=[]) package.output() fs.sync() commands.cmake(packageroot=source.abspath(), builddir=build.abspath(), args=[]) commands.make(builddir=build.abspath(), args=[]) before_mtime = os.stat( os.sep.join(build.abspath() + ['confix-include', 'subdir', 'h.h'])).st_mtime # wait a bit. then touch the source file, call make again, and # check that the file was locally installed again. time.sleep(1) h.add_lines(['x']) fs.sync() commands.make(builddir=build.abspath(), args=[]) self.failUnless( os.stat( os.sep.join(build.abspath() + ['confix-include', 'subdir', 'h.h'])).st_mtime > before_mtime) pass
def test__workaround_library_and_custom_target(self): fs = FileSystem(path=self.rootpath()) source = fs.rootdirectory().add( name='source', entry=Directory()) build = fs.rootdirectory().add( name='build', entry=Directory()) source.add( name=const.CONFIX2_PKG, entry=File(lines=["PACKAGE_NAME('test_workaround_library_and_custom_target')", "PACKAGE_VERSION('1.2.3')"])) source.add( name=const.CONFIX2_DIR, entry=File(lines=[ 'from libconfix.core.filesys.file import File, FileState', 'from libconfix.plugins.cmake.out_cmake import find_cmake_output_builder', 'cmake_output_builder = find_cmake_output_builder(CURRENT_BUILDER())', 'cmake_output_builder.local_cmakelists().add_find_call(', ' find_call=["ADD_CUSTOM_COMMAND(",', ' " OUTPUT generated.c file",', ' " COMMAND sleep 1",', ' " COMMAND echo custom command running",', ' " COMMAND echo I was here >> generated",', ' " COMMAND touch generated.c file",', ' ")",', ' ]),', 'CURRENT_BUILDER().directory().add(name="generated.c", entry=File(lines=[], state=FileState.VIRTUAL))', 'LIBRARY([C(filename="generated.c")])', 'cmake_output_builder.local_cmakelists().add_custom_target(name="my-all-target", all=True, depends=["file"])', ])) package = LocalPackage(rootdirectory=source, setups=[Boilerplate(), CMake(library_dependencies=False), C()]) package.boil(external_nodes=[]) package.output() fs.sync() commands.cmake(packageroot=source.abspath(), builddir=build.abspath(), args=[]) commands.make(builddir=build.abspath(), args=['-j2']) scan.rescan_dir(build) self.failUnlessEqual(build.get('generated').lines(), ['I was here']) pass
def test__generated_headers_public_install(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('generated_headers_public_install')", "PACKAGE_VERSION('1.2.3')" ])) source.add( name=const.CONFIX2_DIR, entry=File(lines=[ "LIBRARY(members=[H(filename='generated.h'), C(filename='generated.c')])", "CMAKE_CMAKELISTS_ADD_CUSTOM_COMMAND__OUTPUT(", " outputs=['generated.h', 'generated.c'],", " commands=[('touch', ['generated.h']),", " ('touch', ['generated.c'])],", " depends=[],", ")", ])) source.add(name='generated.h', entry=File(state=FileState.VIRTUAL, lines=[])) source.add(name='generated.c', entry=File(state=FileState.VIRTUAL, lines=[])) 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.failUnless(install.find(['include', 'generated.h'])) pass
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()) source.add(name=const.CONFIX2_PKG, entry=File(lines=[ "PACKAGE_NAME('test_basic')", "PACKAGE_VERSION('1.2.3')" ])) source.add( name=const.CONFIX2_DIR, entry=File(lines=[ "CMAKE_CMAKELISTS_ADD_CUSTOM_COMMAND__OUTPUT(", " outputs=['main.c'],", " commands=[('cp', ", " ['${PROJECT_SOURCE_DIR}/main.c.template', '${PROJECT_BINARY_DIR}/main.c'])],", " depends=['${PROJECT_SOURCE_DIR}/main.c.template'],", ")", "EXECUTABLE(", " exename='exe',", " center=C(filename='main.c')", ")" ])) source.add(name='main.c.template', entry=File(lines=['int main(void) { return 0; }'])) source.add(name='main.c', entry=File(state=FileState.VIRTUAL, lines=[])) 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=[]) commands.make(builddir=build.abspath(), args=[]) scan.rescan_dir(build) # I doubt that this will hold under Windows :-) if it becomes # an issue we will skip this check self.failUnless(build.find(['exe'])) pass
def test(self): fs = FileSystem(path=self.rootpath()) source = fs.rootdirectory().add( name='source', entry=Directory()) source.add( name=const.CONFIX2_PKG, entry=File(lines=['PACKAGE_NAME("Repo-Install")', 'PACKAGE_VERSION("1.2.3")'])) source.add( name=const.CONFIX2_DIR, entry=File()) build = fs.rootdirectory().add( name='build', entry=Directory()) install = fs.rootdirectory().add( name='install', entry=Directory()) package = LocalPackage(rootdirectory=source, setups=[Boilerplate(), CMake(library_dependencies=False)]) package.boil(external_nodes=[]) package.output() fs.sync() commands.cmake( packageroot=source.abspath(), builddir=build.abspath(), args=['-DCMAKE_INSTALL_PREFIX='+os.sep.join(install.abspath())]) commands.make( builddir=build.abspath(), args=['repo-install']) scan.rescan_dir(install) self.failUnless(install.find(AutomakePackageRepository.REPO_FULL_PATH+['Repo-Install.repo'])) pass
def test(self): fs = FileSystem(path=self.rootpath()) source = fs.rootdirectory().add(name='source', entry=inter_package.make_source_tree()) lo_source = source.find(['lo']) mid_source = source.find(['mid']) hi_source = source.find(['hi']) build = fs.rootdirectory().add(name='build', entry=Directory()) lo_build = build.add(name='lo', entry=Directory()) mid_build = build.add(name='mid', entry=Directory()) hi_build = build.add(name='hi', entry=Directory()) install = fs.rootdirectory().add(name='install', entry=Directory()) # build and install lo if True: lo_package = LocalPackage(rootdirectory=lo_source, setups=[ ExplicitDirectorySetup(), ExplicitCSetup(), CMakeSetup() ]) lo_package.boil(external_nodes=[]) lo_package.output() fs.sync() commands.cmake( packageroot=lo_source.abspath(), builddir=lo_build.abspath(), args=['-DCMAKE_INSTALL_PREFIX=' + '/'.join(install.abspath())]) commands.make(builddir=lo_build.abspath(), args=['install']) pass # build and install mid if True: repo = AutomakeCascadedPackageRepository(prefix=install.abspath(), readonly_prefixes=[]) mid_package = LocalPackage(rootdirectory=mid_source, setups=[ ExplicitDirectorySetup(), ExplicitCSetup(), CMakeSetup() ]) mid_package.boil(external_nodes=repo.iter_nodes()) mid_package.output() fs.sync() commands.cmake( packageroot=mid_source.abspath(), builddir=mid_build.abspath(), args=['-DCMAKE_INSTALL_PREFIX=' + '/'.join(install.abspath())]) commands.make(builddir=mid_build.abspath(), args=['install']) pass # build and install hi if True: repo = AutomakeCascadedPackageRepository(prefix=install.abspath(), readonly_prefixes=[]) hi_package = LocalPackage(rootdirectory=hi_source, setups=[ ExplicitDirectorySetup(), ExplicitCSetup(), CMakeSetup() ]) hi_package.boil(external_nodes=repo.iter_nodes()) hi_package.output() fs.sync() commands.cmake( packageroot=hi_source.abspath(), builddir=hi_build.abspath(), args=['-DCMAKE_INSTALL_PREFIX=' + '/'.join(install.abspath())]) commands.make(builddir=hi_build.abspath(), args=['install']) pass # call the program and see if everything's fine. pipe = subprocess.Popen( [os.sep.join(install.abspath() + ['bin', 'exe'])], stdout=subprocess.PIPE) self.failUnlessEqual(pipe.stdout.next(), 'main was here\n') pass
def test_intra_package(self): fs = FileSystem(path=self.rootpath()) source = fs.rootdirectory().add(name='source', entry=Directory()) build = fs.rootdirectory().add(name='build', entry=Directory()) source.add(name=const.CONFIX2_PKG, entry=File(lines=[ "PACKAGE_NAME('LibraryDependencies-Intra-Package')", "PACKAGE_VERSION('1.2.3')" ])) source.add( name=const.CONFIX2_DIR, entry=File(lines=["DIRECTORY(['lib'])", "DIRECTORY(['exe'])"])) lib = source.add(name='lib', entry=Directory()) lib.add( name=const.CONFIX2_DIR, entry=File(lines=[ "LIBRARY(basename='lib', members=[H(filename='lib.h'), C(filename='lib.c')])" ])) lib.add(name='lib.h', entry=File(lines=[ '#ifndef lib_h', '#define lib_h', 'void lib();', '#endif' ])) lib.add(name='lib.c', entry=File(lines=['#include "lib.h"', 'void lib() {}'])) exe = source.add(name='exe', entry=Directory()) exe.add(name=const.CONFIX2_DIR, entry=File(lines=[ 'EXECUTABLE(exename="exe", center=C(filename="main.c"))' ])) exe.add(name='main.c', entry=File(lines=[ '#include <lib.h>', '// CONFIX:REQUIRE_H("lib.h", URGENCY_ERROR)', 'int main(void) {', ' lib(); ', ' return 0;', '}' ])) package = LocalPackage( rootdirectory=source, setups=[ExplicitDirectorySetup(), ExplicitCSetup(), CMakeSetup()]) package.boil(external_nodes=[]) package.output() fs.sync() commands.cmake(packageroot=source.abspath(), builddir=build.abspath(), args=[]) commands.make(builddir=build.abspath(), args=[]) # wait a bit and then touch liblo.a. (is there a better way # than sleeping?) time.sleep(1) lib_library = os.sep.join(build.abspath() + ['lib', 'liblib.a']) os.utime(lib_library, None) lib_library_stat = os.stat(lib_library) # exe is rebuilt as it depends on liblib.a if True: commands.make(builddir=build.abspath(), args=[]) self.failUnless( os.stat(os.sep.join(build.abspath() + ['exe', 'exe'])).st_mtime >= lib_library_stat.st_mtime) pass pass
def test_inter_package(self): fs = FileSystem(path=self.rootpath()) source = fs.rootdirectory().add(name='source', entry=inter_package.make_source_tree()) lo_source = source.find(['lo']) mid_source = source.find(['mid']) hi_source = source.find(['hi']) build = fs.rootdirectory().add(name='build', entry=Directory()) lo_build = build.add(name='lo', entry=Directory()) mid_build = build.add(name='mid', entry=Directory()) hi_build = build.add(name='hi', entry=Directory()) install = fs.rootdirectory().add(name='install', entry=Directory()) # build and install lo if True: lo_package = LocalPackage(rootdirectory=lo_source, setups=[ ExplicitDirectorySetup(), ExplicitCSetup(), CMakeSetup() ]) lo_package.boil(external_nodes=[]) lo_package.output() fs.sync() commands.cmake( packageroot=lo_source.abspath(), builddir=lo_build.abspath(), args=['-DCMAKE_INSTALL_PREFIX=' + '/'.join(install.abspath())]) commands.make(builddir=lo_build.abspath(), args=['install']) pass # build and install mid if True: repo = AutomakeCascadedPackageRepository(prefix=install.abspath(), readonly_prefixes=[]) mid_package = LocalPackage(rootdirectory=mid_source, setups=[ ExplicitDirectorySetup(), ExplicitCSetup(), CMakeSetup() ]) mid_package.boil(external_nodes=repo.iter_nodes()) mid_package.output() fs.sync() commands.cmake( packageroot=mid_source.abspath(), builddir=mid_build.abspath(), args=['-DCMAKE_INSTALL_PREFIX=' + '/'.join(install.abspath())]) commands.make(builddir=mid_build.abspath(), args=['install']) pass # build and install hi. declare that I want library # dependencies. if True: repo = AutomakeCascadedPackageRepository(prefix=install.abspath(), readonly_prefixes=[]) hi_package = LocalPackage(rootdirectory=hi_source, setups=[ ExplicitDirectorySetup(), ExplicitCSetup(), CMakeSetup(), LibraryDependenciesSetup() ]) hi_package.boil(external_nodes=repo.iter_nodes()) hi_package.output() fs.sync() commands.cmake( packageroot=hi_source.abspath(), builddir=hi_build.abspath(), args=['-DCMAKE_INSTALL_PREFIX=' + '/'.join(install.abspath())]) commands.make(builddir=hi_build.abspath(), args=['install']) pass # wait a bit and then touch liblo.a. (is there a better way # than sleeping?) time.sleep(1) lo_lib = os.sep.join(install.abspath() + ['lib', 'liblo.a']) os.utime(lo_lib, None) lo_stat = os.stat(lo_lib) # libmid.a is not rebuilt. if True: commands.make(builddir=mid_build.abspath(), args=['install']) self.failIf( os.stat(os.sep.join(install.abspath() + ['lib', 'libmid.a'])). st_mtime >= lo_stat.st_mtime) pass # exe is rebuilt as it has liblo.a linked in. if True: commands.make(builddir=hi_build.abspath(), args=['install']) self.failUnless( os.stat(os.sep.join(install.abspath() + ['bin', 'exe'])). st_mtime >= lo_stat.st_mtime) pass pass
def setUp(self): super(ReadonlyPrefixesBuildTest, self).setUp() # one-readonly, installed in prefix one-readonly # two-readonly, installed in prefix two-readonly # three-regular, installed on regular prefix # linked, using all three self.__fs = FileSystem(path=self.rootpath()) sourcedir = self.__fs.rootdirectory().add(name='source', entry=Directory()) builddir = self.__fs.rootdirectory().add(name='build', entry=Directory()) installdir = self.__fs.rootdirectory().add(name='install', entry=Directory()) self.__regular_installdir = self.__fs.rootdirectory().add( name='regular', entry=Directory()) self.__one_readonly_sourcedir = sourcedir.add(name='one-readonly', entry=Directory()) self.__one_readonly_builddir = builddir.add(name='one-readonly', entry=Directory()) self.__one_readonly_installdir = installdir.add(name='one-readonly', entry=Directory()) self.__two_readonly_sourcedir = sourcedir.add(name='two-readonly', entry=Directory()) self.__two_readonly_builddir = builddir.add(name='two-readonly', entry=Directory()) self.__two_readonly_installdir = installdir.add(name='two-readonly', entry=Directory()) self.__three_regular_sourcedir = sourcedir.add(name='three-regular', entry=Directory()) self.__three_regular_builddir = builddir.add(name='three-regular', entry=Directory()) self.__linked_sourcedir = sourcedir.add(name='linked', entry=Directory()) self.__linked_builddir = builddir.add(name='linked', entry=Directory()) # one_readonly source if True: self.__one_readonly_sourcedir.add( name=const.CONFIX2_PKG, entry=File(lines=[ 'PACKAGE_NAME("one-readonly")', 'PACKAGE_VERSION("1.2.3")' ])) self.__one_readonly_sourcedir.add( name=const.CONFIX2_DIR, entry=File(lines=[ 'LIBRARY(basename="one", members=[H(filename="one_readonly.h"), C(filename="one_readonly.c")])' ])) self.__one_readonly_sourcedir.add(name='one_readonly.h', entry=File(lines=[ '#ifndef one_readonly_h', '#define one_readonly_h', 'void one_readonly();', '#endif', ])) self.__one_readonly_sourcedir.add( name='one_readonly.c', entry=File(lines=[ '#include "one_readonly.h"', 'void one_readonly() {}' ])) pass # two_readonly source if True: self.__two_readonly_sourcedir.add( name=const.CONFIX2_PKG, entry=File(lines=[ 'PACKAGE_NAME("two-readonly")', 'PACKAGE_VERSION("1.2.3")' ])) self.__two_readonly_sourcedir.add( name=const.CONFIX2_DIR, entry=File(lines=[ 'LIBRARY(basename="two", members=[H(filename="two_readonly.h"), C(filename="two_readonly.c")])' ])) self.__two_readonly_sourcedir.add(name='two_readonly.h', entry=File(lines=[ '#ifndef two_readonly_h', '#define two_readonly_h', 'void two_readonly();', '#endif', ])) self.__two_readonly_sourcedir.add( name='two_readonly.c', entry=File(lines=[ '#include "two_readonly.h"', 'void two_readonly() {}' ])) pass # three_regular source if True: self.__three_regular_sourcedir.add( name=const.CONFIX2_PKG, entry=File(lines=[ 'PACKAGE_NAME("three-regular")', 'PACKAGE_VERSION("1.2.3")' ])) self.__three_regular_sourcedir.add( name=const.CONFIX2_DIR, entry=File(lines=[ 'LIBRARY(basename="three", members=[H(filename="three_regular.h"), C(filename="three_regular.c")])' ])) self.__three_regular_sourcedir.add(name='three_regular.h', entry=File(lines=[ '#ifndef three_regular_h', '#define three_regular_h', 'void three_regular();', '#endif', ])) self.__three_regular_sourcedir.add( name='three_regular.c', entry=File(lines=[ '#include "three_regular.h"', 'void three_regular() {}' ])) pass # linked source if True: self.__linked_sourcedir.add( name=const.CONFIX2_PKG, entry=File(lines=[ 'PACKAGE_NAME("linked")', 'PACKAGE_VERSION("1.2.3")' ])) self.__linked_sourcedir.add( name=const.CONFIX2_DIR, entry=File(lines=[ 'EXECUTABLE(exename="exe", center=C(filename="main.c"))' ])) self.__linked_sourcedir.add( name='main.c', entry=File(lines=[ '#include <one_readonly.h>', '#include <two_readonly.h>', '#include <three_regular.h>', '// CONFIX:REQUIRE_H("one_readonly.h", URGENCY_ERROR)', '// CONFIX:REQUIRE_H("two_readonly.h", URGENCY_ERROR)', '// CONFIX:REQUIRE_H("three_regular.h", URGENCY_ERROR)', 'int main(void) {', ' one_readonly();', ' two_readonly();', ' three_regular();', '}' ])) pass # build the three installed packages if True: one_readonly_package = LocalPackage( rootdirectory=self.__one_readonly_sourcedir, setups=[ ExplicitDirectorySetup(), ExplicitCSetup(), CMakeSetup() ]) one_readonly_package.boil(external_nodes=[]) one_readonly_package.output() self.__fs.sync() commands.cmake( packageroot=self.__one_readonly_sourcedir.abspath(), builddir=self.__one_readonly_builddir.abspath(), args=[ '-DCMAKE_INSTALL_PREFIX=' + '/'.join(self.__one_readonly_installdir.abspath()) ]) commands.make(builddir=self.__one_readonly_builddir.abspath(), args=['install']) # paranoia self.failUnless( os.path.isdir( os.sep.join(self.__one_readonly_installdir.abspath() + ['lib']))) self.failUnless( os.path.isfile( os.sep.join(self.__one_readonly_installdir.abspath() + ['include', 'one_readonly.h']))) pass if True: two_readonly_package = LocalPackage( rootdirectory=self.__two_readonly_sourcedir, setups=[ ExplicitDirectorySetup(), ExplicitCSetup(), CMakeSetup() ]) two_readonly_package.boil(external_nodes=[]) two_readonly_package.output() self.__fs.sync() commands.cmake( packageroot=self.__two_readonly_sourcedir.abspath(), builddir=self.__two_readonly_builddir.abspath(), args=[ '-DCMAKE_INSTALL_PREFIX=' + '/'.join(self.__two_readonly_installdir.abspath()) ]) commands.make(builddir=self.__two_readonly_builddir.abspath(), args=['install']) # paranoia self.failUnless( os.path.isdir( os.sep.join(self.__two_readonly_installdir.abspath() + ['lib']))) self.failUnless( os.path.isfile( os.sep.join(self.__two_readonly_installdir.abspath() + ['include', 'two_readonly.h']))) pass if True: three_regular_package = LocalPackage( rootdirectory=self.__three_regular_sourcedir, setups=[ ExplicitDirectorySetup(), ExplicitCSetup(), CMakeSetup() ]) three_regular_package.boil(external_nodes=[]) three_regular_package.output() self.__fs.sync() commands.cmake( packageroot=self.__three_regular_sourcedir.abspath(), builddir=self.__three_regular_builddir.abspath(), args=[ '-DCMAKE_INSTALL_PREFIX=' + '/'.join(self.__regular_installdir.abspath()) ]) commands.make(builddir=self.__three_regular_builddir.abspath(), args=['install']) # paranoia self.failUnless( os.path.isdir( os.sep.join(self.__regular_installdir.abspath() + ['lib']))) self.failUnless( os.path.isfile( os.sep.join(self.__regular_installdir.abspath() + ['include', 'three_regular.h']))) pass pass
def test__copy_include_files_to_local_package(self): fs = FileSystem(path=self.rootpath()) if True: # readonly_prefix1 has a file flatfile.h, flat in # prefix/include. readonly_prefix1_source = fs.rootdirectory().add( name='readonly_prefix1_source', entry=Directory()) readonly_prefix1_source.add(name=const.CONFIX2_PKG, entry=File(lines=[ "PACKAGE_NAME('readonly_prefix1')", "PACKAGE_VERSION('1.2.3')" ])) readonly_prefix1_source.add( name=const.CONFIX2_DIR, entry=File(lines=["H(filename='flatfile.h')"])) readonly_prefix1_source.add(name='flatfile.h', entry=File()) readonly_prefix1_build = fs.rootdirectory().add( name='readonly_prefix1_build', entry=Directory()) readonly_prefix1_install = fs.rootdirectory().add( name='readonly_prefix1_install', entry=Directory()) readonly_prefix1_package = LocalPackage( rootdirectory=readonly_prefix1_source, setups=[Boilerplate(), C(), CMake(library_dependencies=False)]) readonly_prefix1_package.boil(external_nodes=[]) readonly_prefix1_package.output() fs.sync() commands.cmake(packageroot=readonly_prefix1_source.abspath(), builddir=readonly_prefix1_build.abspath(), prefix=readonly_prefix1_install.abspath()) commands.make(builddir=readonly_prefix1_build.abspath(), args=['install']) # readonly_prefix2 has a file subdirfile.h, in a subdir, # prefix/include/subdir. readonly_prefix2_source = fs.rootdirectory().add( name='readonly_prefix2_source', entry=Directory()) readonly_prefix2_source.add(name=const.CONFIX2_PKG, entry=File(lines=[ "PACKAGE_NAME('readonly_prefix2')", "PACKAGE_VERSION('1.2.3')" ])) readonly_prefix2_source.add( name=const.CONFIX2_DIR, entry=File( lines=["H(filename='subdirfile.h', install=['subdir'])"])) readonly_prefix2_source.add(name='subdirfile.h', entry=File()) readonly_prefix2_build = fs.rootdirectory().add( name='readonly_prefix2_build', entry=Directory()) readonly_prefix2_install = fs.rootdirectory().add( name='readonly_prefix2_install', entry=Directory()) readonly_prefix2_package = LocalPackage( rootdirectory=readonly_prefix2_source, setups=[Boilerplate(), C(), CMake(library_dependencies=False)]) readonly_prefix2_package.boil( external_nodes=readonly_prefix1_package.install().nodes()) readonly_prefix2_package.output() fs.sync() commands.cmake(packageroot=readonly_prefix2_source.abspath(), builddir=readonly_prefix2_build.abspath(), prefix=readonly_prefix2_install.abspath()) commands.make(builddir=readonly_prefix2_build.abspath(), args=['install']) # prefix has # prefix/include/prefixsubdir/prefixsubdirfile.h prefix_source = fs.rootdirectory().add(name='prefix_source', entry=Directory()) prefix_source.add( name=const.CONFIX2_PKG, entry=File(lines=[ "PACKAGE_NAME('prefix')", "PACKAGE_VERSION('1.2.3')" ])) prefix_source.add( name=const.CONFIX2_DIR, entry=File(lines=[ "H(filename='prefixsubdirfile.h', install=['prefixsubdir'])" ])) prefix_source.add(name='prefixsubdirfile.h', entry=File()) prefix_build = fs.rootdirectory().add(name='prefix_build', entry=Directory()) prefix_install = fs.rootdirectory().add(name='prefix_install', entry=Directory()) prefix_package = LocalPackage( rootdirectory=prefix_source, setups=[Boilerplate(), C(), CMake(library_dependencies=False)]) prefix_package.boil( external_nodes=readonly_prefix1_package.install().nodes() + readonly_prefix2_package.install().nodes()) prefix_package.output() fs.sync() commands.cmake(packageroot=prefix_source.abspath(), builddir=prefix_build.abspath(), prefix=prefix_install.abspath()) commands.make(builddir=prefix_build.abspath(), args=['install']) pass test_source = fs.rootdirectory().add(name='test_source', entry=Directory()) test_source.add( name=const.CONFIX2_PKG, entry=File(lines=[ "PACKAGE_NAME('test_source')", "PACKAGE_VERSION('1.2.3')" ])) test_source.add( name=const.CONFIX2_DIR, entry=File(lines=[ 'CMAKE_CMAKELISTS_ADD_FIND_CALL([', ' "ConfixFindNativeInstalledFile(flatfile_dir flatfile.h include)",', ' "ConfixFindNativeInstalledFile(subdirfile_dir subdirfile.h include/subdir)",', ' "ConfixFindNativeInstalledFile(prefixsubdirfile_dir prefixsubdirfile.h include/prefixsubdir)",', ' "MESSAGE(STATUS flatfile: ${flatfile_dir})",', ' "MESSAGE(STATUS subdirfile: ${subdirfile_dir})",', ' "MESSAGE(STATUS prefixsubdirfile: ${prefixsubdirfile_dir})",', ' ],', ' flags=CMAKE_BUILDINFO_LOCAL,', ')', 'CMAKE_CMAKELISTS_ADD_CUSTOM_COMMAND__OUTPUT(', ' outputs=["flatfile-copy.h"],', ' commands=[("cp ${flatfile_dir}/flatfile.h flatfile-copy.h", [])],', ' depends=["${flatfile_dir}/flatfile.h"],', ')', 'CMAKE_CMAKELISTS_ADD_CUSTOM_COMMAND__OUTPUT(', ' outputs=["subdirfile-copy.h"],', ' commands=[("cp ${subdirfile_dir}/subdirfile.h subdirfile-copy.h", [])],', ' depends=["${subdirfile_dir}/subdirfile.h"],', ')', 'CMAKE_CMAKELISTS_ADD_CUSTOM_COMMAND__OUTPUT(', ' outputs=["prefixsubdirfile-copy.h"],', ' commands=[("cp ${prefixsubdirfile_dir}/prefixsubdirfile.h prefixsubdirfile-copy.h", [])],', ' depends=["${prefixsubdirfile_dir}/prefixsubdirfile.h"],', ')', 'CMAKE_CMAKELISTS_ADD_CUSTOM_TARGET(', ' name="we-make-them-with-all-target",', ' all=True,', ' depends=["flatfile-copy.h", "subdirfile-copy.h", "prefixsubdirfile-copy.h"])', ])) test_build = fs.rootdirectory().add(name='test_build', entry=Directory()) test_package = LocalPackage( rootdirectory=test_source, setups=[Boilerplate(), C(), CMake(library_dependencies=False)]) test_package.boil(external_nodes=readonly_prefix1_package.install().nodes() + \ readonly_prefix2_package.install().nodes() + \ prefix_package.install().nodes()) test_package.output() fs.sync() commands.cmake( packageroot=test_source.abspath(), builddir=test_build.abspath(), args=['-DREADONLY_PREFIXES='+\ '/'.join(prefix_install.abspath())+';'+ \ '/'.join(readonly_prefix2_install.abspath())+';'+ \ '/'.join(readonly_prefix1_install.abspath())]) commands.make(builddir=test_build.abspath()) scan.rescan_dir(test_build) self.failUnless(test_build.get('flatfile-copy.h')) self.failUnless(test_build.get('subdirfile-copy.h')) self.failUnless(test_build.get('prefixsubdirfile-copy.h')) pass
def test__library_dependencies_with_readonly_prefixes(self): # boil package with library dependencies enabled. linked_package = LocalPackage(rootdirectory=self.__linked_sourcedir, setups=[ LibraryDependenciesSetup(), ExplicitDirectorySetup(), ExplicitCSetup(), CMakeSetup() ]) # read repo files along the cascade repo = AutomakeCascadedPackageRepository( prefix=self.__regular_installdir.abspath(), readonly_prefixes=[ self.__two_readonly_installdir.abspath(), self.__one_readonly_installdir.abspath() ]) linked_package.boil(external_nodes=repo.iter_nodes()) linked_package.output() self.__fs.sync() commands.cmake( packageroot=self.__linked_sourcedir.abspath(), builddir=self.__linked_builddir.abspath(), args=[ '-DCMAKE_INSTALL_PREFIX=' + '/'.join(self.__regular_installdir.abspath()), '-DREADONLY_PREFIXES=' + '/'.join(self.__one_readonly_installdir.abspath()) + ';' + '/'.join(self.__two_readonly_installdir.abspath()) ]) commands.make(builddir=self.__linked_builddir.abspath(), args=[]) # wait a bit and then touch libone.a. if True: time.sleep(1) libone = os.sep.join(self.__one_readonly_installdir.abspath() + ['lib', 'libone.a']) os.utime(libone, None) libone_stat = os.stat(libone) # exe is rebuilt as it depends on libone.a if True: commands.make(builddir=self.__linked_builddir.abspath(), args=[]) self.failUnless( os.stat( os.sep.join(self.__linked_builddir.abspath() + ['exe'])).st_mtime >= libone_stat.st_mtime) pass pass # wait a bit and then touch libtwo.a. if True: time.sleep(1) libtwo = os.sep.join(self.__two_readonly_installdir.abspath() + ['lib', 'libtwo.a']) os.utime(libtwo, None) libtwo_stat = os.stat(libtwo) # exe is rebuilt as it depends on libtwo.a if True: commands.make(builddir=self.__linked_builddir.abspath(), args=[]) self.failUnless( os.stat( os.sep.join(self.__linked_builddir.abspath() + ['exe'])).st_mtime >= libtwo_stat.st_mtime) pass pass # wait a bit and then touch libone.a. if True: time.sleep(1) libthree = os.sep.join(self.__regular_installdir.abspath() + ['lib', 'libthree.a']) os.utime(libthree, None) libthree_stat = os.stat(libthree) # exe is rebuilt as it depends on libthree.a if True: commands.make(builddir=self.__linked_builddir.abspath(), args=[]) self.failUnless( os.stat( os.sep.join(self.__linked_builddir.abspath() + ['exe']) ).st_mtime >= libthree_stat.st_mtime) pass pass pass
def test__basic(self): source = Directory() source.add( name=const.CONFIX2_PKG, entry=File(lines=[ 'PACKAGE_NAME("Local-Install")', 'PACKAGE_VERSION("1.2.3")' ])) source.add( name=const.CONFIX2_DIR, entry=File(lines=[ 'DIRECTORY(["headers-only"])', 'DIRECTORY(["headers-with-library"])', 'DIRECTORY(["exe"])' ])) headers_only = source.add(name='headers-only', entry=Directory()) headers_with_library = source.add(name='headers-with-library', entry=Directory()) exe = source.add(name='exe', entry=Directory()) headers_only.add( name=const.CONFIX2_DIR, entry=File(lines=[ 'H(filename="header-1.h", install=["headers-only-install"])', 'H(filename="header-2.h", install=["headers-only-install"])' ])) headers_only.add(name='header-1.h', entry=File()) headers_only.add(name='header-2.h', entry=File()) headers_with_library.add( name=const.CONFIX2_DIR, entry=File(lines=[ 'LIBRARY(members=[H(filename="library-1.h", install=["headers-with-library-install"]),' ' H(filename="library-2.h", install=["headers-with-library-install"]),' ' C(filename="library-1.c"),' ' C(filename="library-2.c")', ' ]', ' )' ])) headers_with_library.add(name='library-1.h', entry=File(lines=['void library1(void);'])) headers_with_library.add(name='library-2.h', entry=File(lines=['void library2(void);'])) headers_with_library.add( name='library-1.c', entry=File(lines=[ '#include <headers-only-install/header-1.h>', 'void library1(void) {}' ])) headers_with_library.add( name='library-2.c', entry=File(lines=[ '#include <headers-only-install/header-2.h>', 'void library2(void) {}' ])) exe.add(name=const.CONFIX2_DIR, entry=File(lines=[ 'EXECUTABLE(exename="exe",', ' center=C(filename="main.c"))', ])) exe.add( name='main.c', entry=File(lines=[ '#include <headers-only-install/header-1.h>', '#include <headers-only-install/header-2.h>', '#include <headers-with-library-install/library-1.h>', '#include <headers-with-library-install/library-2.h>', 'int main(void) {', ' library1();', ' library2();', '}' ])) fs = FileSystem(path=self.rootpath()) source = fs.rootdirectory().add(name='source', entry=source) build = fs.rootdirectory().add(name='build', entry=Directory()) package = LocalPackage( rootdirectory=source, setups=[ExplicitDirectorySetup(), ExplicitCSetup(), CMakeSetup()]) package.boil(external_nodes=[]) package.output() fs.sync() commands.cmake(packageroot=source.abspath(), builddir=build.abspath(), args=[]) commands.make(builddir=build.abspath(), args=[]) scan.rescan_dir(build) # I doubt that this will hold under Windows :-) if it becomes # an issue we will skip this check self.failUnless(build.find(['exe', 'exe'])) pass
def test__quoting(self): fs = FileSystem(path=self.rootpath()) source = fs.rootdirectory().add(name='source', entry=Directory()) build = fs.rootdirectory().add(name='build', entry=Directory()) source.add( name=const.CONFIX2_PKG, entry=File(lines=[ "PACKAGE_NAME('test_quoting')", "PACKAGE_VERSION('1.2.3')" ])) source.add( name=const.CONFIX2_DIR, entry=File(lines=[ "CMAKE_CMAKELISTS_ADD_CUSTOM_COMMAND__OUTPUT(", " outputs=['greater_file'],", " commands=[('touch greater_file > greater_sideeffect', [])],", " depends=[],", ")", "CMAKE_CMAKELISTS_ADD_CUSTOM_COMMAND__OUTPUT(", " outputs=['less_file'],", " commands=[('echo xxx > tmp_file', []),", " ('cat < tmp_file > less_file', [])],", " depends=[],", ")", "", "CMAKE_CMAKELISTS_ADD_CUSTOM_TARGET(", " name='beitl',", " all=True,", " depends=['greater_file',", " 'less_file',", " ]", ")", "", ])) package = LocalPackage( rootdirectory=source, setups=[Boilerplate(), CMake(library_dependencies=False)]) package.boil(external_nodes=[]) package.output() fs.sync() commands.cmake(packageroot=source.abspath(), builddir=build.abspath(), args=[]) commands.make(builddir=build.abspath(), args=[]) scan.rescan_dir(build) self.failUnless(build.find(['greater_file'])) self.failUnless(build.find(['greater_sideeffect'])) self.failIf(build.find(['>'])) less_file = build.find(['less_file']) self.failUnless(less_file) self.failUnlessEqual(len(less_file.lines()), 1) self.failUnlessEqual(less_file.lines()[0], 'xxx') pass
def test(self): source = Directory() source.add( name=const.CONFIX2_PKG, entry=File(lines=[ 'PACKAGE_NAME("Public-Install")', 'PACKAGE_VERSION("1.2.3")' ])) source.add(name=const.CONFIX2_DIR, entry=File(lines=[ 'DIRECTORY(["headers"])', 'DIRECTORY(["library"])', 'DIRECTORY(["exe"])', 'DIRECTORY(["test"])' ])) headers = source.add(name='headers', entry=Directory()) library = source.add(name='library', entry=Directory()) exe = source.add(name='exe', entry=Directory()) test = source.add(name='test', entry=Directory()) headers.add(name=const.CONFIX2_DIR, entry=File(lines=[ 'H(filename="flat-header.h")', 'H(filename="subdir-header.h", install=["subdir"])', ])) headers.add(name='flat-header.h', entry=File()) headers.add(name='subdir-header.h', entry=File()) library.add( name=const.CONFIX2_DIR, entry=File(lines=[ 'LIBRARY(basename="rary", members=[C(filename="library.c")])' ])) library.add(name='library.c', entry=File()) exe.add(name=const.CONFIX2_DIR, entry=File(lines=[ 'EXECUTABLE(exename="exe",', ' center=C(filename="main.c"))', ])) exe.add(name='main.c', entry=File(lines=['int main(void) { return 0; }'])) test.add(name=const.CONFIX2_DIR, entry=File(lines=[ 'EXECUTABLE(exename="test",', ' center=C(filename="main.c"),', ' what=EXECUTABLE_CHECK)', ])) test.add(name='main.c', entry=File(lines=['int main(void) { return 0; }'])) fs = FileSystem(path=self.rootpath()) source = fs.rootdirectory().add(name='source', entry=source) build = fs.rootdirectory().add(name='build', entry=Directory()) install = fs.rootdirectory().add(name='install', entry=Directory()) package = LocalPackage( rootdirectory=source, setups=[ExplicitDirectorySetup(), ExplicitCSetup(), CMakeSetup()]) package.boil(external_nodes=[]) package.output() fs.sync() commands.cmake( packageroot=source.abspath(), builddir=build.abspath(), args=['-DCMAKE_INSTALL_PREFIX=' + os.sep.join(install.abspath())]) commands.make(builddir=build.abspath(), args=['install']) scan.rescan_dir(install) self.failUnless(install.find(['include', 'flat-header.h'])) self.failUnless(install.find(['include', 'subdir', 'subdir-header.h'])) # if this fails, then you probably are running on Windows. self.failUnless(install.find(['lib', 'library.a'])) self.failUnless(install.find(['bin', 'exe'])) self.failIf(install.find(['bin', 'test'])) self.failUnless( install.find([ 'share', 'confix-%s' % const.REPO_VERSION, 'repo', package.repofilename() ])) pass