pkgconfig non-determinism
While working on reproducible builds for openSUSE (sponsored by the NLnet NGI0 fund), I found that our gstreamer-plugins-rs (gst-plugins-rs-0.12.2) package varied in many .pc files like this:
--- old//usr/lib64/pkgconfig/gsttogglerecord.pc 2024-02-29 11:52:02.000000000 +0000
+++ new//usr/lib64/pkgconfig/gsttogglerecord.pc 2024-02-29 11:52:02.000000000 +0000
@@ -8,5 +8,5 @@
Version: 0.12.2
Libs: -L${libdir}/gstreamer-1.0 -lgsttogglerecord
Cflags:
-Libs.private: -lgstwebrtc-1.0 -lgstaudio-1.0 -lgstbase-1.0 -lgstreamer-1.0 -lelf -lgobject-2.0 -lglib-2.0 -lgstsdp-1.0 -lgstaudio-1.0 -lgstreamer-1.0 -lelf -lgobject-2.0 -lglib-2.0 -lgstvideo-1.0 -lgstbase-1.0 -lgstreamer-1.0 -lelf -lgobject-2.0 -lglib-2.0 -lgstapp-1.0 -lgstbase-1.0 -lgstreamer-1.0 -lelf -lgobject-2.0 -lglib-2.0 -lgstrtp-1.0 -lgstbase-1.0 -lgstreamer-1.0 -lelf -lgobject-2.0 -lglib-2.0 -lgstbase-1.0 -lgstreamer-1.0 -lelf -lgobject-2.0 -lglib-2.0 -lssl -lcrypto -lgobject-2.0 -lgio-2.0 -lgobject-2.0 -lglib-2.0 -lgstreamer-1.0 -lgobject-2.0 -lglib-2.0 -lelf -lgobject-2.0 -lglib-2.0 -lgobject-2.0 -lglib-2.0 -lgcc_s -lutil -lrt -lpthread -lm -ldl -lc
+Libs.private: -lgstaudio-1.0 -lgstbase-1.0 -lgstreamer-1.0 -lelf -lgobject-2.0 -lglib-2.0 -lgstbase-1.0 -lgstreamer-1.0 -lelf -lgobject-2.0 -lglib-2.0 -lgobject-2.0 -lgio-2.0 -lgobject-2.0 -lglib-2.0 -lgstreamer-1.0 -lgobject-2.0 -lglib-2.0 -lelf -lgobject-2.0 -lglib-2.0 -lgobject-2.0 -lglib-2.0 -lgcc_s -lutil -lrt -lpthread -lm -ldl -lc
Requires.private: gstreamer-1.0, gstreamer-audio-1.0, gstreamer-video-1.0, gobject-2.0, glib-2.0, gmodule-2.0
--- old//usr/lib64/pkgconfig/gsturiplaylistbin.pc 2024-02-29 11:52:02.000000000 +0000
+++ new//usr/lib64/pkgconfig/gsturiplaylistbin.pc 2024-02-29 11:52:02.000000000 +0000
@@ -8,5 +8,5 @@
Version: 0.12.2
Libs: -L${libdir}/gstreamer-1.0 -lgsturiplaylistbin
Cflags:
-Libs.private: -lgstwebrtc-1.0 -lgstaudio-1.0 -lgstbase-1.0 -lgstreamer-1.0 -lelf -lgobject-2.0 -lglib-2.0 -lgstsdp-1.0 -lgstaudio-1.0 -lgstreamer-1.0 -lelf -lgobject-2.0 -lglib-2.0 -lgstvideo-1.0 -lgstbase-1.0 -lgstreamer-1.0 -lelf -lgobject-2.0 -lglib-2.0 -lgstapp-1.0 -lgstbase-1.0 -lgstreamer-1.0 -lelf -lgobject-2.0 -lglib-2.0 -lgstrtp-1.0 -lgstbase-1.0 -lgstreamer-1.0 -lelf -lgobject-2.0 -lglib-2.0 -lgstbase-1.0 -lgstreamer-1.0 -lelf -lgobject-2.0 -lglib-2.0 -lssl -lcrypto -lgobject-2.0 -lgio-2.0 -lgobject-2.0 -lglib-2.0 -lgstreamer-1.0 -lgobject-2.0 -lglib-2.0 -lelf -lgobject-2.0 -lglib-2.0 -lgobject-2.0 -lglib-2.0 -lgcc_s -lutil -lrt -lpthread -lm -ldl -lc
+Libs.private: -lgstaudio-1.0 -lgstbase-1.0 -lgstreamer-1.0 -lelf -lgobject-2.0 -lglib-2.0 -lgstbase-1.0 -lgstreamer-1.0 -lelf -lgobject-2.0 -lglib-2.0 -lgobject-2.0 -lgio-2.0 -lgobject-2.0 -lglib-2.0 -lgstreamer-1.0 -lgobject-2.0 -lglib-2.0 -lelf -lgobject-2.0 -lglib-2.0 -lgobject-2.0 -lglib-2.0 -lgcc_s -lutil -lrt -lpthread -lm -ldl -lc
Requires.private: gstreamer-1.0, gobject-2.0, glib-2.0, gmodule-2.0
Not only did the order vary, but there are also random repeats.
Besides that, I also observed an embedded date:
--- old /usr/lib64/gstreamer-1.0/libgstdav1d.so (objdump)
+++ new /usr/lib64/gstreamer-1.0/libgstdav1d.so (objdump)
@@ -24153,7 +24153,7 @@
5fc80 7470733a 2f2f6769 746c6162 2e667265 tps://gitlab.fre
5fc90 65646573 6b746f70 2e6f7267 2f677374 edesktop.org/gst
5fca0 7265616d 65722f67 73742d70 6c756769 reamer/gst-plugi
- 5fcb0 6e732d72 73003230 32342d30 372d3331 ns-rs.2024-07-31
+ 5fcb0 6e732d72 73003230 34302d30 392d3032 ns-rs.2040-09-02
5fcc0 00766964 656f2f64 61763164 2f737263 .video/dav1d/src
Build outputs should be deterministic.