From: Michael Tremer Date: Tue, 17 May 2022 15:50:27 +0000 (+0000) Subject: build: Make installing the source package an essential job X-Git-Tag: 0.9.28~784 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=99a56775d552b0ec45a53bcb78aa725e42f761f9;p=pakfire.git build: Make installing the source package an essential job 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 --- diff --git a/src/libpakfire/build.c b/src/libpakfire/build.c index b7c91f815..12e951814 100644 --- a/src/libpakfire/build.c +++ b/src/libpakfire/build.c @@ -35,6 +35,7 @@ #include #include #include +#include #include #include @@ -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; diff --git a/src/libpakfire/include/pakfire/request.h b/src/libpakfire/include/pakfire/request.h index 02f95afce..61ffafa9a 100644 --- a/src/libpakfire/include/pakfire/request.h +++ b/src/libpakfire/include/pakfire/request.h @@ -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); diff --git a/src/libpakfire/pakfire.c b/src/libpakfire/pakfire.c index 5fe47ffae..744793887 100644 --- a/src/libpakfire/pakfire.c +++ b/src/libpakfire/pakfire.c @@ -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 diff --git a/src/libpakfire/request.c b/src/libpakfire/request.c index 724209116..87326c26f 100644 --- a/src/libpakfire/request.c +++ b/src/libpakfire/request.c @@ -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);