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')
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')