]> git.ipfire.org Git - pakfire.git/commitdiff
parser: Read dependencies from package blocks
authorMichael Tremer <michael.tremer@ipfire.org>
Mon, 24 May 2021 13:00:57 +0000 (13:00 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Mon, 24 May 2021 13:00:57 +0000 (13:00 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/libpakfire/parser.c

index 99991038cecad188ace820f38a6eeb2868311d34..320db7f84562709365e0af6dcf6b8bd31529544f 100644 (file)
@@ -924,9 +924,35 @@ PAKFIRE_EXPORT int pakfire_parser_create_package(PakfireParser parser,
        // Fetch build dependencies
        if (is_source) {
                char* requires = pakfire_parser_get(parser, "build", "requires");
-               if (requires && *requires)
+               if (requires) {
                        pakfire_parse_deps(parser->pakfire, *pkg,
                                pakfire_package_add_requires, requires);
+                       free(requires);
+               }
+       } else {
+               const struct relation {
+                       const char* type;
+                       void (*func)(PakfirePackage, const char* dep);
+               } relations[] = {
+                       { "provides", pakfire_package_add_provides },
+                       { "prerequires", pakfire_package_add_prerequires },
+                       { "requires", pakfire_package_add_requires },
+                       { "conflicts", pakfire_package_add_conflicts },
+                       { "obsoletes", pakfire_package_add_obsoletes },
+                       { "recommends", pakfire_package_add_recommends },
+                       { "suggests", pakfire_package_add_suggests },
+                       { "supplements", pakfire_package_add_supplements },
+                       { "enhances", pakfire_package_add_enhances },
+                       { NULL, NULL },
+               };
+
+               for (const struct relation* relation = relations; relation->type; relation++) {
+                       char* relations = pakfire_parser_get(parser, namespace, relation->type);
+                       if (relations) {
+                               pakfire_parse_deps(parser->pakfire, *pkg, relation->func, relations);
+                               free(relations);
+                       }
+               }
        }
 
        // All okay