#!/usr/bin/env python # Wrapper for pkg-config that keeps track of the packages that were requested. import sys, os, re import garstowlib def find_pc(p): for dir in os.getenv("PKG_CONFIG_PATH").split(":"): if dir != "": dir += "/" fn = dir + p + ".pc" try: os.stat(fn) return fn except OSError: pass return None logname = os.getenv("FAKE_PKG_CONFIG_LOG") packages = {} try: f = open(logname) for l in f.readlines(): packages[l.strip()] = 1 f.close() except IOError: pass if sys.argv[1] == "--fpc-dump" or sys.argv[1] == "--fpc-check": ps = packages.keys() ps.sort() used_pkgs = {} unknown_pcs = [] pns = garstowlib.get_package_names() for p in ps: pc = find_pc(p) if pc is None: unknown_pcs.append(p) else: pc = os.readlink(pc) pc = re.sub(r'.*/packages/([^/]+)/.*', r'\1', pc) used_pkgs[pc] = pns.get(pc, "unknown:" + pc) used_pkgs_full = used_pkgs.values() used_pkgs_full.sort() unknown_pcs.sort() if sys.argv[1] == "--fpc-dump": print "Needs pkg-config packages: " + " ".join(ps) print "Needs existing GARStow packages: " + " ".join(used_pkgs_full) print "Unknown pkg-config packages: " + " ".join(unknown_pcs) else: packagename = sys.argv[2] my_deps = garstowlib.get_dependencies(packagename) missing = [(dep, garstowlib.select_dep_type(dep)) for dep in used_pkgs.keys() if not dep in my_deps] full_pn = pns[packagename] if missing != []: ps = {} for (dep, var) in missing: ps.setdefault(var, []).append(dep) portfile = garstowlib.get_portfile(packagename) for (var, deps) in ps.items(): if portfile.variable(var) == "": print "sed -i 's,\(^CATEGORIES.*\),\\1\\n" + var + " =,' " + full_pn + "/Makefile" print "sed -i 's,\(^" + var + " =\)\(.*\),\\1 " + " ".join([used_pkgs[d] for d in deps]) + "\\2,' " + full_pn + "/Makefile" if unknown_pcs != []: print "# " + full_pn + " unknown: " + " ".join(unknown_pcs) else: tty = open("/dev/tty", "w") args = " ".join(sys.argv[1:]).split() while args != []: arg = args.pop(0) if arg[-1] == ",": arg = arg[:-1] if arg in (">=", "<=", ">", "<", "=", "!=", "--variable", "--atleast-pkgconfig-version", "--atleast-version", "--exact-version", "--max-version", "--define-variable"): args.pop(0) elif arg[0] == "-": continue else: tty.write("(fpc: " + arg + ")") packages[arg] = 1 f = open(logname, "w") for p in packages.keys(): print >>f, p f.close() tty.close() os.execvp("pkg-config", ["pkg-config"] + sys.argv[1:]) os.exit(20)