From 0e7a1dee9be6ccc6bfbb2ab646b73c5ad1c199e4 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Thu, 8 Dec 2022 16:09:03 +0000 Subject: [PATCH] build: Fix checking scriptlets for any dependencies Signed-off-by: Michael Tremer --- src/libpakfire/build.c | 70 +++++++++++++----------------------- src/scripts/find-prerequires | 13 +------ 2 files changed, 26 insertions(+), 57 deletions(-) diff --git a/src/libpakfire/build.c b/src/libpakfire/build.c index 9ce8c82e8..abfd0e305 100644 --- a/src/libpakfire/build.c +++ b/src/libpakfire/build.c @@ -257,6 +257,7 @@ struct pakfire_find_deps_ctx { struct pakfire_package* pkg; int dep; struct pakfire_filelist* filelist; + struct pakfire_scriptlet* scriptlet; const char* pattern; }; @@ -486,65 +487,44 @@ ERROR: return r; } -static int pakfire_build_add_scriptlet_requires(struct pakfire_build* build, - struct pakfire_package* pkg, struct pakfire_scriptlet* scriptlet) { - char* prerequires = NULL; - char path[PATH_MAX]; - size_t size; - int r; - - const char* root = pakfire_get_path(build->pakfire); - - // Make filename - r = pakfire_path(build->pakfire, path, "%s", - PAKFIRE_TMP_DIR "/pakfire-scriptlet.XXXXXX"); - if (r) - return r; - - // Fetch scriptlet payload - const char* data = pakfire_scriptlet_get_data(scriptlet, &size); +static int pakfire_build_send_scriptlet(struct pakfire* pakfire, void* data, int fd) { + const struct pakfire_find_deps_ctx* ctx = (struct pakfire_find_deps_ctx*)data; + size_t length = 0; - // Create a temporary file - FILE* f = pakfire_mktemp(path, 0); - if (!f) + // Fetch the scriptlet + const char* p = pakfire_scriptlet_get_data(ctx->scriptlet, &length); + if (!p) { + ERROR(pakfire, "Could not fetch scriptlet: %m\n"); return 1; + } - // Write scriptlet - ssize_t bytes_written = fwrite(data, 1, size, f); + // Write it into the pipe + ssize_t bytes_written = write(fd, p, length); if (bytes_written < 0) { - ERROR(build->pakfire, "Could not write to %s: %m\n", path); - fclose(f); - goto ERROR; + ERROR(pakfire, "Could not send scriptlet: %m\n"); + return 1; } - // Close file - fclose(f); + return 0; +} - // Build commandline - const char* args[] = { - pakfire_path_relpath(root, path), - NULL, +static int pakfire_build_add_scriptlet_requires(struct pakfire_build* build, + struct pakfire_package* pkg, struct pakfire_scriptlet* scriptlet) { + int r; + + struct pakfire_find_deps_ctx ctx = { + .pkg = pkg, + .dep = PAKFIRE_PKG_PREREQUIRES, + .scriptlet = scriptlet, }; // Find all pre-requires - r = pakfire_build_run_script(build, "find-prerequires", args, &prerequires); + r = pakfire_build_run_script(build, "find-prerequires", NULL, + pakfire_build_send_scriptlet, pakfire_build_process_deps, &ctx); if (r) goto ERROR; - // Add all pre-requires to the package - if (prerequires) { - r = pakfire_str2deps(build->pakfire, pkg, PAKFIRE_PKG_PREREQUIRES, prerequires); - if (r) { - ERROR(build->pakfire, "Could not add pre-requires: %m\n"); - goto ERROR; - } - } - ERROR: - if (r && *path) - unlink(path); - if (prerequires) - free(prerequires); return r; } diff --git a/src/scripts/find-prerequires b/src/scripts/find-prerequires index 9ace9b7c8..b79308aae 100644 --- a/src/scripts/find-prerequires +++ b/src/scripts/find-prerequires @@ -19,18 +19,7 @@ # # ############################################################################### -error() { - echo "$@" >&2 -} - main() { - local scriptlet="${1}" - - if [ ! -r "${scriptlet}" ]; then - error "Input file is not readable" - return 1 - fi - # We require a shell echo "/bin/sh" @@ -44,7 +33,7 @@ main() { which "${req}" 2>/dev/null ;; esac - done < <(bash --rpm-requires < "${scriptlet}" | sed -e "s/^.*(//;s/)$//" | sort -u) + done < <(bash --rpm-requires | sed -e "s/^.*(//;s/)$//" | sort -u) return 0 } -- 2.39.5