options.cflags or options.cflags_only_big_i or \
            options.cflags_only_other or options.list_all:
        if options.silence_errors:
            Options().set_option('print_errors', False)
        else:
            Options().set_option('print_errors', True)
    else:
        if options.print_errors:
            Options().set_option('print_errors', True)
        else:
            Options().set_option('print_errors', False)

    if options.list_all:
        Options().set_option('command', 'list-all')
        try:
            result = PkgCfgResult(global_variables)
            all_packages = result.known_packages_list()
        except:
            print 'Exception searching for packages:'
            traceback.print_exc()
            sys.exit(1)
        if all_packages:
            max_width = max([(len(p), p) for p, n, d in all_packages])
            for package, name, description in all_packages:
                print '{0:{3}}{1} - {2}'.format(package, name, description, max_width[0] + 1)
        sys.exit(0)

    try:
        Options().set_option('command', 'search')
        search = ' '.join(args)
        Options().set_option('search_string', search)
Example #2
0
 def __init__(self, distroFile2PackageResolver):
     self.distroFile2PackageResolver = distroFile2PackageResolver
     self.r = PkgCfgResult(self.globalz)
Example #3
0
def main(argv):
    parser = setup_option_parser()
    try:
        options, args = parser.parse_args()
    except OptionError as e:
        print('OptionError: ' + str (e))
        sys.exit(1)

    if options.realversion:
        print('{0} (Equivalent to {1}'.format(PYKG_CONFIG_VERSION,
                                              CORRESPONDING_VERSION))
        sys.exit(0)

    global_variables = {}

    zip_name = 'python{0}{1}.zip'.format(sys.version_info[0],
                                          sys.version_info[1])
    for path in sys.path:
        if path.endswith('64/' + zip_name):
            Options().set_option('is_64bit', True)
            break

    if getenv('PKG_CONFIG_SYSROOT_DIR'):
        global_variables['pc_sysrootdir'] = getenv('PKG_CONFIG_SYSROOT_DIR')
    if getenv('PKG_CONFIG_TOP_BUILD_DIR'):
        global_variables['pc_topbuilddir'] = getenv('PKG_CONFIG_TOP_BUILD_DIR')
    if getenv('PKG_CONFIG_DISABLE_UNINSTALLED'):
        Options().set_option('prefer_uninstalled', False)
    if getenv('PKG_CONFIG_ALLOW_SYSTEM_LIBS'):
        Options().set_option('forbidden_libdirs', [])
    else:
        if Options().get_option('is_64bit'):
            Options().set_option('forbidden_libdirs', ['/usr/lib64'])
        else:
            Options().set_option('forbidden_libdirs', ['/usr/lib'])
    if getenv('PKG_CONFIG_ALLOW_SYSTEM_CFLAGS'):
        Options().set_option('forbidden_cflags', [])
    else:
        forbidden = []
        if sys.platform != 'win32':
            forbidden.append('/usr/include')
        if getenv('C_INCLUDE_PATH'):
            forbidden.append(getenv('C_INCLUDE_PATH'))
        if getenv('CPLUS_INCLUDE_PATH'):
            forbidden.append(getenv('CPLUS_INCLUDE_PATH'))
        Options().set_option('forbidden_cflags', forbidden)

    if options.full_compatibility:
        Options().set_option('full_compatibility', True)
    else:
        Options().set_option('full_compatibility', False)

    if options.atleast_pkgconfig_version:
        other_version = Version(options.atleast_pkgconfig_version)
        if other_version > get_pkg_config_version():
            sys.exit(1)
        else:
            sys.exit(0)
    if options.static:
        Options().set_option('private_libs', True)
    if options.short_errors:
        Options().set_option('short_errors', True)
    if options.define_variable:
        for var_def in options.define_variable:
            sub_strings = var_def.split('=')
            if len(sub_strings) != 2:
                print('Bad argument format for define-variable: {1}'.format(var_def))
                sys.exit(1)
            global_variables[sub_strings[0]] = sub_strings[1]
    if options.debug:
        Options().set_option('debug', True)
    if options.errors_to_stdout:
        Options().set_option('error_dest', sys.stdout)
    if sys.platform == 'win32':
        if options.dont_define_prefix:
            Options().set_option('dont_define_prefix', True)
        else:
            Options().set_option('dont_define_prefix', False)
        if options.prefix_variable:
            Options().set_option('prefix_variable', options.prefix_variable)
        if options.msvc_syntax:
            Options().set_option('use_msvc_syntax', True)
        else:
            Options().set_option('use_msvc_syntax', False)
    if options.normalise_paths:
        Options().set_option('normalise_paths', True)
    else:
        Options().set_option('normalise_paths', False)

    if options.modversion or options.libs or options.libs_only_l or \
            options.libs_only_big_l or options.libs_only_other or \
            options.cflags or options.cflags_only_big_i or \
            options.cflags_only_other or options.list_all:
        if options.silence_errors:
            Options().set_option('print_errors', False)
        else:
            Options().set_option('print_errors', True)
    else:
        if options.print_errors:
            Options().set_option('print_errors', True)
        else:
            Options().set_option('print_errors', False)

    if options.list_all:
        Options().set_option('command', 'list-all')
        try:
            result = PkgCfgResult(global_variables)
            all_packages, errors = result.known_packages_list()
        except:
            ErrorPrinter().error('Exception searching for packages:')
            traceback.print_exc()
            sys.exit(1)
        if all_packages:
            max_width = max([(len(p), p) for p, n, d in all_packages])
            for package, name, description in all_packages:
                print('{0:{3}}{1} - {2}'.format(package, name, description, max_width[0] + 1))
        for e in errors:
            ErrorPrinter().error(e)
        sys.exit(0)

    try:
        Options().set_option('command', 'search')
        search = ' '.join(args)
        Options().set_option('search_string', search)
        result = PkgCfgResult(global_variables)
        result.find_packages(search, True)
    except NoOpenableFilesError as e:
        ErrorPrinter().verbose_error(str(e))
        sys.exit(1)
    except PackageNotFoundError as e:
        if not Options().get_option('short_errors'):
            ErrorPrinter().verbose_error('''Package {0} was not found in the \
pkg-config search path.
Perhaps you should add the directory containing `{0}.pc'
to the PKG_CONFIG_PATH environment variable'''.format(e.pkgname))
        ErrorPrinter().verbose_error(str(e))
        sys.exit(1)
    except NoPackagesSpecifiedError:
        Options().get_option('error_dest').write(
            'Must specify package names on the command line\n')
        sys.exit(1)
    except UndefinedVarError as e:
        ErrorPrinter().error("Variable '{0}' not defined in '{1}'".format(
            e.variable, e.pkgfile))
        sys.exit(1)
    except:
        print('Exception searching for packages')
        traceback.print_exc()
        sys.exit(1)

    if options.dump_package:
        result.dump_package()
        sys.exit(0)

    if options.exists:
        # Even if the packages don't meet the requirements, they exist, which
        # is good enough for the exists option.
        sys.exit(0)
    if options.uninstalled:
        # Check if any packages loaded (both searched-for and dependencies)
        # are uninstalled.
        if result.have_uninstalled():
            sys.exit(0)
        sys.exit(1)

    if options.modversion:
        for l in result.get_searched_pkgs_versions():
            print(l)
    found_version = \
        result.get_package_version(result.get_searched_pkg_list()[0].name)
    if options.atleast_version:
        if found_version < Version(options.atleast_version):
            sys.exit(1)
        sys.exit(0)
    if options.exact_version:
        if found_version != Version(options.exact_version):
            sys.exit(1)
        sys.exit(0)
    if options.max_version:
        if found_version > Version(options.max_version):
            sys.exit(1)
        sys.exit(0)

    if options.variable:
        value = result.get_variable_value(options.variable)
        if value == None:
            print('')
        else:
            print(value)
    if options.cflags_only_big_i:
        print(result.get_big_i_flags())
    if options.cflags_only_other:
        print(result.get_other_i_flags())
    if options.cflags:
        print(result.get_cflags())
    if options.libs_only_l:
        print(result.get_l_flags())
    if options.libs_only_big_l:
        print(result.get_big_l_flags())
    if options.libs_only_other:
        print(result.get_other_l_flags())
    if options.libs:
        print(result.get_all_lib_flags())