From: Michael Tremer Date: Mon, 20 Feb 2023 16:19:22 +0000 (+0000) Subject: build: Skip calling scripts if no file matches X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=34dd7fbfd7638c3944e34a786123ad92e56b0621;p=people%2Fstevee%2Fpakfire.git build: Skip calling scripts if no file matches Fixes: #13038 Signed-off-by: Michael Tremer --- diff --git a/src/libpakfire/build.c b/src/libpakfire/build.c index 70d45d43..c585f464 100644 --- a/src/libpakfire/build.c +++ b/src/libpakfire/build.c @@ -454,8 +454,7 @@ ERROR: */ static int pakfire_build_find_deps(struct pakfire_build* build, struct pakfire_package* pkg, int dep, const char* script, - struct pakfire_filelist* filelist, const int class, const pcre2_code* filter) { - + struct pakfire_filelist* filelist, int class, const pcre2_code* filter) { // Construct the context struct pakfire_find_deps_ctx ctx = { .pkg = pkg, @@ -469,6 +468,12 @@ static int pakfire_build_find_deps(struct pakfire_build* build, }; int r; + // Skip calling the script if class doesn't match + if (class && !pakfire_filelist_matches_class(filelist, class)) { + DEBUG(build->pakfire, "Skipping calling %s as class does not match\n", script); + return 0; + } + // Pass the buildroot as first argument const char* args[] = { pakfire_relpath(build->pakfire, build->buildroot), diff --git a/src/libpakfire/filelist.c b/src/libpakfire/filelist.c index d9e92b38..eb5e9262 100644 --- a/src/libpakfire/filelist.c +++ b/src/libpakfire/filelist.c @@ -503,3 +503,17 @@ int pakfire_filelist_cleanup(struct pakfire_filelist* list) { return 0; } + +static int __pakfire_filelist_matches_class(struct pakfire* pakfire, + struct pakfire_file* file, void* p) { + int* class = (int*)p; + + return pakfire_file_matches_class(file, *class); +} + +/* + Returns true if any file on the list matches class +*/ +int pakfire_filelist_matches_class(struct pakfire_filelist* list, int class) { + return pakfire_filelist_walk(list, __pakfire_filelist_matches_class, &class); +} diff --git a/src/libpakfire/include/pakfire/filelist.h b/src/libpakfire/include/pakfire/filelist.h index 6cf96322..c44ce5a7 100644 --- a/src/libpakfire/include/pakfire/filelist.h +++ b/src/libpakfire/include/pakfire/filelist.h @@ -61,6 +61,8 @@ int pakfire_filelist_verify(struct pakfire_filelist* list, struct pakfire_fileli int pakfire_filelist_cleanup(struct pakfire_filelist* list); +int pakfire_filelist_matches_class(struct pakfire_filelist* list, int class); + #endif #endif /* PAKFIRE_FILELIST_H */