]> git.ipfire.org Git - people/stevee/pakfire.git/commitdiff
build: Skip calling scripts if no file matches
authorMichael Tremer <michael.tremer@ipfire.org>
Mon, 20 Feb 2023 16:19:22 +0000 (16:19 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Mon, 20 Feb 2023 16:27:14 +0000 (16:27 +0000)
Fixes: #13038
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/libpakfire/build.c
src/libpakfire/filelist.c
src/libpakfire/include/pakfire/filelist.h

index 70d45d437147055d256795a9c8433dd159762e66..c585f4642279fe7e6f0165d3f7d4fce015679645 100644 (file)
@@ -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),
index d9e92b385b0274e3a427b8d0c956d32fdcdf689a..eb5e92623bee5df1a8f98aa022871b865fee3232 100644 (file)
@@ -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);
+}
index 6cf9632231b70cb2cce33a11759daf281094148c..c44ce5a7cf7cf21f0e75da636425165e17f5de4b 100644 (file)
@@ -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 */