]> git.ipfire.org Git - pakfire.git/commitdiff
Run ldconfig only when we have extracted .so files
authorMichael Tremer <michael.tremer@ipfire.org>
Tue, 20 Apr 2021 13:04:24 +0000 (13:04 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Tue, 20 Apr 2021 13:04:24 +0000 (13:04 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/libpakfire/archive.c
src/libpakfire/filelist.c
src/libpakfire/include/pakfire/filelist.h
src/libpakfire/step.c

index d36166452c4a3613576400ec79dc2bf6f6ae3ed0..43192c2966db64081fc9df45af107408eb97745b 100644 (file)
@@ -931,7 +931,15 @@ PAKFIRE_EXPORT unsigned int pakfire_archive_get_format(PakfireArchive archive) {
 }
 
 PAKFIRE_EXPORT PakfireFilelist pakfire_archive_get_filelist(PakfireArchive archive) {
-       return archive->filelist;
+#if 0
+       if (!archive->filelist) {
+               int r = pakfire_archive_load_filelist(archive);
+               if (r)
+                       return NULL;
+       }
+#endif
+
+       return pakfire_filelist_ref(archive->filelist);
 }
 
 PAKFIRE_EXPORT const char* pakfire_archive_signature_get_data(PakfireArchiveSignature signature) {
index 2951d85de0a8d6dfecd4a25b8686be679bc6f70a..39069c1f9ac2294879ad1815879722935fe162ac 100644 (file)
@@ -301,3 +301,24 @@ ERROR:
 
        return r;
 }
+
+int pakfire_filelist_contains(PakfireFilelist list, const char* pattern) {
+       if (!pattern) {
+               errno = EINVAL;
+               return -1;
+       }
+
+       for (unsigned int i = 0; i < list->size; i++) {
+               PakfireFile file = list->elements[i];
+
+               const char* path = pakfire_file_get_path(file);
+               if (!path)
+                       return -1;
+
+               int r = fnmatch(pattern, path, 0);
+               if (r == 0)
+                       return 1;
+       }
+
+       return 0;
+}
index 5d2498ff11cb2a56524a621ca655e22aa6736adc..493c58b3a7ea58234246d2a37a52052a85dbc834 100644 (file)
@@ -44,6 +44,8 @@ size_t pakfire_filelist_total_filesize(PakfireFilelist list);
 int pakfire_filelist_scan(PakfireFilelist list, const char* root,
                const char** includes, const char** excludes);
 
+int pakfire_filelist_contains(PakfireFilelist list, const char* pattern);
+
 #endif
 
 #endif /* PAKFIRE_FILELIST_H */
index fad805fa6f914180b84ae2ed14cd1778a02c6965..de1c93fdc617efe9d2a46c62523e00872bc52096 100644 (file)
@@ -300,8 +300,17 @@ static int pakfire_step_extract(PakfireStep step) {
                free(nevra);
        }
 
-       // Update the runtime linker cache
-       pakfire_run_ldconfig(step);
+       // Is it necessary to call ldconfig?
+       PakfireFilelist filelist = pakfire_archive_get_filelist(step->archive);
+       if (filelist) {
+               int need_ldconfig = pakfire_filelist_contains(filelist, "*/lib*.so.?");
+
+               // Update the runtime linker cache
+               if (need_ldconfig)
+                       pakfire_run_ldconfig(step);
+
+               pakfire_filelist_unref(filelist);
+       }
 
        return r;
 }