def _build_configure_env(user_libs, user_cflags):
    paths = []
    libs = []
    cflags = []
    pkg_config_paths = []

    for dep_name in _info.dependency_map().iterkeys():
        if dep_name == _info.name:
            continue
        p = packageinfo.get(dep_name).install_dir
        bin_dir = path.join(p, 'bin')
        lib_dir = path.join(p, 'lib')
        include_dir = path.join(p, 'include')
        pkg_config_dir = path.join(p, 'lib', 'pkgconfig')

        if path.exists(bin_dir):
            paths.append(bin_dir)
        if path.exists(lib_dir):
            libs.append('-L' + cmdutil.to_unix_path(lib_dir))
        if path.exists(include_dir):
            cflags.append('-I' + cmdutil.to_unix_path(include_dir))
        if path.exists(pkg_config_dir):
            pkg_config_paths.append(cmdutil.to_unix_path(pkg_config_dir))

    env_libs = config.get_list('libs') + config.get_list(_info.name + '-libs')
    env_cflags = config.get_list('cflags') + config.get_list(_info.name + '-cflags')

    result_path = os.pathsep.join(paths)
    result_libs = ' '.join(libs + user_libs + env_libs)
    result_cflags = ' '.join(cflags + user_cflags + env_cflags)
    result_pkg_config_path = ':'.join(pkg_config_paths)

    result = {
        'PATH'            : result_path,
        'LIBS'            : result_libs,
        'CFLAGS'          : result_cflags,
        'CXXFLAGS'        : result_cflags,
        'PKG_CONFIG_PATH' : result_pkg_config_path,
    }

    if toolchain.crossbuild:
        pkg_config_libdir = path.join(toolchain.sysroot, 'lib', 'pkgconfig')
        result.update({
            'AR'      : toolchain.tool_name('ar'),
            'AS'      : toolchain.tool_name('as'),
            'CC'      : toolchain.tool_name('gcc'),
            'CXX'     : toolchain.tool_name('g++'),
            'LD'      : toolchain.tool_name('ld'),
            'NM'      : toolchain.tool_name('nm'),
            'DLLTOOL' : toolchain.tool_name('dlltool'),
            'OBJDUMP' : toolchain.tool_name('objdump'),
            'RANLIB'  : toolchain.tool_name('ranlib'),
            'STRIP'   : toolchain.tool_name('strip'),
            'WINRC'   : toolchain.tool_name('windres'),
            'PKG_CONFIG_LIBDIR' : cmdutil.to_unix_path(pkg_config_libdir)
        })

    return result
def build(static_lib = False, shared_lib = False, options = '',
          crossbuild_options=True, libs = '', cflags = '', subdir = ''):
    if static_lib and shared_lib:
        raise ValueError('Both static_lib and shared_lib options are specified')

    build_dir = _add_subpath(_info.build_dir, subdir)
    all_options = [
        _find_configure(build_dir),
        '--prefix=' + cmdutil.to_unix_path(_info.install_dir)
    ]
    if toolchain.crossbuild and crossbuild_options:
        all_options.extend([
            '--build=' + toolchain.build_triplet,
            '--host=' + toolchain.host_triplet])
    if static_lib:
        all_options.extend(['--enable-static', '--disable-shared'])
    if shared_lib:
        all_options.extend(['--enable-shared', '--disable-static'])
    all_options.extend(options.split())
    all_options.extend(config.get_list('options'))
    all_options.extend(config.get_list(_info.name + '-options'))
    env = _build_configure_env(libs.split(), cflags.split())

    cmdutil.unix_exec('sh', all_options, work_dir=build_dir, extra_env=env)
    cmdutil.unix_make([], work_dir=build_dir)
    cmdutil.unix_make(['install'], work_dir=build_dir)
def generate_pkg_config(pkgname, libname = None, version = None):
    if not libname:
        libname = _info.short_name
    if not version:
        version = '1.0.0'
    output_file = path.join(_info.install_dir, 'lib', 'pkgconfig', pkgname + '.pc')
    fsutil.make_dir(path.dirname(output_file))
    with open(output_file, 'wb') as f:
        f.write('prefix=%s\n' % cmdutil.to_unix_path(_info.install_dir))
        f.write('exec_prefix=${prefix}\n')
        f.write('libdir=${exec_prefix}/lib\n')
        f.write('includedir=${prefix}/include\n')
        f.write('\n')
        f.write('Name: %s\n' % pkgname)
        f.write('Description: %s library\n' % libname)
        f.write('Version: %s\n' % version)
        f.write('Libs: -L${libdir} -l%s\n' % libname)
        f.write('Cflags: -I${includedir}\n')
Beispiel #4
0
import cmdutil, toolchain

install_dir = cmdutil.to_unix_path(info.install_dir)

make_args = ('install -fwin32/Makefile.gcc SHARED_MODE=0' +
     ' INCLUDE_PATH=' + install_dir + '/include' +
     ' BINARY_PATH='  + install_dir + '/bin' +
     ' LIBRARY_PATH=' + install_dir + '/lib' +
     ' prefix=' + install_dir)

if toolchain.crossbuild:
    make_args += ' PREFIX=' + toolchain.host_triplet + '-'

make(make_args)
collect_licenses('README')