]> git.ipfire.org Git - pakfire.git/commitdiff
Enhance the "virtual dependencies" that were already used for pkgconfig.
authorMichael Tremer <michael.tremer@ipfire.org>
Wed, 9 Mar 2011 00:09:51 +0000 (01:09 +0100)
committerMichael Tremer <michael.tremer@ipfire.org>
Wed, 9 Mar 2011 00:09:51 +0000 (01:09 +0100)
This does this in a general way so we could use it for anything.

pakfire/depsolve.py
pakfire/packages/base.py
pakfire/packages/util.py

index 7bd7c0f27a8fda792dc1d67811f8e640cde4e1de..3bb998a6ea46f12fc6170f2bb6c83665b72cf6dc 100644 (file)
@@ -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:
index 5b346253c161d08be3471f5923db2ff1d0549d50..bd537a73dced324d492052cd331e8ec0cf68636a 100644 (file)
@@ -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.
index 3b6bb9d41948c2d0d03b0cf5c46b78f80c12fdec..04c3ee9d5ad621cdb3efa03ddb5c0dbde83f3f66 100644 (file)
@@ -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()