From: Michael Tremer Date: Wed, 9 Mar 2011 00:09:51 +0000 (+0100) Subject: Enhance the "virtual dependencies" that were already used for pkgconfig. X-Git-Tag: 0.9.3~82 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ffd82391f5aa7232d090233ee8e58a2279071149;p=pakfire.git Enhance the "virtual dependencies" that were already used for pkgconfig. This does this in a general way so we could use it for anything. --- diff --git a/pakfire/depsolve.py b/pakfire/depsolve.py index 7bd7c0f27..3bb998a6e 100644 --- a/pakfire/depsolve.py +++ b/pakfire/depsolve.py @@ -34,8 +34,8 @@ class Requires(object): if self.requires.startswith("/"): return "file" - elif self.requires.startswith("pkgconfig("): - return "pkgconfig" + elif "(" in self.requires: + return "virtual" elif ">" in self.requires or "<" in self.requires or "=" in self.requires: return "expr" @@ -93,10 +93,6 @@ class DependencySet(object): self.add_package(pkg, transaction=False) def add_requires(self, requires, pkg=None, dep=False): - # XXX for now, we skip the virtual perl requires - if requires.startswith("perl(") or requires.startswith("perl>") or requires.startswith("perl="): - return - requires = Requires(pkg, requires, dep) if requires in self.__requires: diff --git a/pakfire/packages/base.py b/pakfire/packages/base.py index 5b346253c..bd537a73d 100644 --- a/pakfire/packages/base.py +++ b/pakfire/packages/base.py @@ -319,9 +319,9 @@ class Package(object): return False - elif requires.type == "pkgconfig": - (r_expr, r_name, r_version) = \ - util.parse_pkgconfig_expr(requires.requires) + elif requires.type == "virtual": + (r_type, r_expr, r_name, r_version) = \ + util.parse_virtual_expr(requires.requires) # If we get an invalid expression with no name, we # do not provide this. @@ -329,14 +329,11 @@ class Package(object): return False for provides in self.provides: - if not provides.startswith("pkgconfig("): - continue - - (p_expr, p_name, p_version) = \ - util.parse_pkgconfig_expr(provides) + (p_type, p_expr, p_name, p_version) = \ + util.parse_virtual_expr(provides) # If name does not match, we have no match at all. - if not p_name == r_name: + if not p_type == r_type or not p_name == r_name: continue # Check if the expression is fulfilled. diff --git a/pakfire/packages/util.py b/pakfire/packages/util.py index 3b6bb9d41..04c3ee9d5 100644 --- a/pakfire/packages/util.py +++ b/pakfire/packages/util.py @@ -127,21 +127,19 @@ def test_parse_pkg_expr(): for s in strings: print s, parse_pkg_expr(s) - -def parse_pkgconfig_expr(s): +def parse_virtual_expr(s): # pkgconfig(bla)=1.2.3 - (name, exp, version) = (None, None, None) + (type, name, exp, version) = (None, None, None, None) - m = re.match(r"^pkgconfig\(([A-Za-z0-9\.\-\+]+)\)(=|\<|\>|\>=|\<=)?([A-Za-z0-9\.\-]+)?", s) + m = re.match(r"^([A-Za-z0-9]+)\(([A-Za-z0-9\.\-\+:]+)\)?(=|\<|\>|\>=|\<=)?([A-Za-z0-9\.\-]+)?", s) if m: - (name, exp, version) = m.groups() - - return (exp, name, version) + (type, name, exp, version) = m.groups() + return (type, exp, name, version) -def test_parse_pkgconfig_expr(): +def test_parse_virtual_expr(): strings = ( "pkgconfig(libxml-2.0)", "pkgconfig(libxml-2.0)=1.2.3", @@ -149,8 +147,8 @@ def test_parse_pkgconfig_expr(): ) for s in strings: - print s, parse_pkgconfig_expr(s) + print s, parse_virtual_expr(s) if __name__ == "__main__": test_parse_pkg_expr() - test_parse_pkgconfig_expr() + test_parse_virtual_expr()