Example #1
0
class Project:
    def __init__(self, out):
        self.out = out
        self.config = ProjectConfig()
        self.config.load()

    def name(self):
        return self.config.name()

    def version(self):
        return self.config.version()

    def load_options(self, opt):
        opt.load('compiler_c')
        opt.load('vala')

    def load_configure(self, conf):
        conf.load('compiler_c')
        conf.load('vala')
        conf.find_program('g-ir-compiler', var='GIR_COMPILER')
        for lib in self.config.glib_libs():
            conf.check_cfg(
                package = lib,
                uselib_store = lib ,
                atleast_version = self.config.min_glib_version(),
                args = '--cflags --libs'
            )

        for lib in self.config.libs():
            conf.check_cfg(
                package = lib.name_version,
                uselib_store = lib.name_version,
                atleast_version = lib.min_version,
                args = '--cflags --libs'
            )


    def load_build(self, bld):
        for lib in self.__builds_for('src/lib'):
            self.__load_lib_build_tasks(bld, lib)

        for bin in self.__builds_for('src/bin'):
            self.__load_bin_build_tasks(bld, bin)

        for test in self.__builds_for('tests/lib'):
            self.__load_test_build_tasks(bld, test)

    def load_test(self, ctx):
        env = { 'LD_LIBRARY_PATH': self.out }
        for test in _listdirs('tests/lib'):
            command = '%s/lib%s_TESTS' % (self.out, test)
            if ctx.exec_command(command, env=env) != 0:
                raise Errors.WafError('Tests failed')

    def __builds_for(self, base_dir):
        for name in _listdirs(base_dir):
            yield BuildConfig(base_dir, name, self.config)

    def __load_bin_build_tasks(self, bld, bin):
        bld(
            features     = 'c cprogram',
            source       = bld.path.ant_glob(bin.source_pattern()),
            target       = bin.name,
            vapi_dirs    = self.config.vapi_dirs(),
            uselib       = bin.external_packages(),
            packages     = bin.external_packages(),
            use          = bin.internal_packages(),
        )

    def __load_test_build_tasks(self, bld, test):
        bld(
            features     = 'c cprogram',
            source       = bld.path.ant_glob('tests/helpers/**/*.vala') +
                           bld.path.ant_glob(test.source_pattern()),
            target       = 'lib%s_TESTS' % test.name,
            install_path = False,
            vapi_dirs    = self.config.vapi_dirs(),
            uselib       = test.external_packages(),
            packages     = test.external_packages(),
            use          = test.internal_packages(),
        )

    def __load_lib_build_tasks(self, bld, lib):
        bld(
            features     = 'c cshlib',
            source       = bld.path.ant_glob(lib.source_pattern()),
            target       = lib.name_version(),
            pkg_name     = lib.name,
            gir          = lib.gir_name_version(),
            vapi_dirs    = self.config.vapi_dirs(),
            vnum         = self.config.so_version(),
            uselib       = lib.external_packages(),
            packages     = lib.external_packages(),
            use          = lib.internal_packages(),
        )

        bld(
            after        = lib.name_version(),
            source       = '%s.gir' % lib.gir_name_version(),
            target       = '%s.typelib' % lib.gir_name_version(),
            install_path = '${LIBDIR}/girepository-1.0',
            rule         = '${GIR_COMPILER} ${SRC} -o ${TGT}',
        )

        bld(
            features     = 'subst',
            source       = path.join(PKG_DIR, 'lib.pc.in'),
            target       = '%s.pc' % lib.name_version(),
            install_path = '${LIBDIR}/pkgconfig',
            VERSION      = self.config.version(),
            NAME_VERSION = lib.name_version(),
            GIR_NAME     = lib.gir_name(),
            DESCRIPTION  = lib.description(),
            PACKAGES     = lib.pkg_configs(),
        )