]> git.ipfire.org Git - pakfire.git/commitdiff
build: Make installing the source package an essential job
authorMichael Tremer <michael.tremer@ipfire.org>
Tue, 17 May 2022 15:50:27 +0000 (15:50 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Tue, 17 May 2022 15:50:27 +0000 (15:50 +0000)
This should help that the solver does not suggest to not install the
source package. That does not seem to be the best advice here.

Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/libpakfire/build.c
src/libpakfire/include/pakfire/request.h
src/libpakfire/pakfire.c
src/libpakfire/request.c

index b7c91f81588746e1e57ecf7216f5720d21264d39..12e951814a32cbcc7500648727f7e9a034420bdb 100644 (file)
@@ -35,6 +35,7 @@
 #include <pakfire/parser.h>
 #include <pakfire/private.h>
 #include <pakfire/repo.h>
+#include <pakfire/request.h>
 #include <pakfire/scriptlet.h>
 #include <pakfire/util.h>
 
@@ -775,7 +776,8 @@ PAKFIRE_EXPORT int pakfire_build(struct pakfire* pakfire, const char* path,
        };
 
        // Install the package into the build environment
-       r = pakfire_install(pakfire, 0, packages, NULL, 0, NULL, NULL, NULL);
+       r = pakfire_install(pakfire, 0, packages, NULL, PAKFIRE_REQUEST_ESSENTIAL,
+               NULL, NULL, NULL);
        if (r) {
                ERROR(pakfire, "Could not install %s\n", path);
                goto ERROR;
index 02f95afce7da7aade075295198baefb6c0629928..61ffafa9ae5ac689d83b56a1bc54b4c5bd8734e4 100644 (file)
@@ -37,6 +37,7 @@ enum pakfire_request_flags {
 enum pakfire_request_job_flags {
        PAKFIRE_REQUEST_KEEP_DEPS           = 1 << 0,
        PAKFIRE_REQUEST_KEEP_ORPHANED       = 1 << 1,
+       PAKFIRE_REQUEST_ESSENTIAL           = 1 << 2,
 };
 
 int pakfire_request_create(struct pakfire_request** request, struct pakfire* pakfire, int flags);
index 5fe47ffae31b74d424d150ab15c4ba1b8d78bf9f..7447938874141dd1f793f9bb63163d9d280159df 100644 (file)
@@ -430,7 +430,7 @@ static int pakfire_populate_pool(struct pakfire* pakfire) {
 
 #ifdef ENABLE_DEBUG
        // Enable debug output
-       pool_setdebuglevel(pool, 2);
+       pool_setdebuglevel(pool, 3);
 #endif
 
        // Set architecture of the pool
index 724209116ff383bc1c148f01dcb4196321b84ae4..87326c26f17964a36869a4cad3ad4be1bb008bb5 100644 (file)
@@ -69,12 +69,28 @@ static void pakfire_request_free(struct pakfire_request* request) {
        free(request);
 }
 
+/*
+       This function translates any modifying flags into flags for libsolv
+*/
+static int pakfire_request_job_flags(int flags) {
+       int solver_flags = 0;
+
+       // Essential jobs
+       if (flags & PAKFIRE_REQUEST_ESSENTIAL)
+               solver_flags |= SOLVER_ESSENTIAL;
+
+       return solver_flags;
+}
+
 static void pakfire_request_add_packages(struct pakfire_request* request,
                int flags, const char** packages) {
        Pool* pool = pakfire_get_solv_pool(request->pakfire);
        if (!pool)
                return;
 
+       // Translate flags
+       flags = pakfire_request_job_flags(flags);
+
        for (const char** package = packages; *package; package++) {
                Id id = pool_str2id(pool, *package, 1);
                if (id)
@@ -318,6 +334,9 @@ static int pakfire_request_add_package(struct pakfire_request* request, int acti
        // Get the solvable ID
        Id id = pakfire_package_id(pkg);
 
+       // Translate flags
+       flags = pakfire_request_job_flags(flags);
+
        // Add it to the job queue
        queue_push2(&request->jobs, SOLVER_SOLVABLE|action|flags, id);
 
@@ -377,9 +396,12 @@ static int pakfire_request_add_job(struct pakfire_request* request, int action,
 
        DEBUG(request->pakfire, "Found %d match(es) for '%s'\n", jobs.count / 2, what);
 
+       // Translate flags
+       const int job_flags = pakfire_request_job_flags(extra_flags);
+
        // Set action and global flags
        for (int i = 0; i < jobs.count; i += 2)
-               jobs.elements[i] |= action | extra_flags;
+               jobs.elements[i] |= action | job_flags;
 
        // Merge jobs into the main job queue
        queue_insertn(&request->jobs, request->jobs.count, jobs.count, jobs.elements);