Control: severity -1 important

On Wed, Sep 02, 2026 at 01:31:23PM +0200, Jochen Sprickerhof wrote:
> * Chow Loong Jin <[email protected]> [2026-09-02 18:40]:
> > Thanks for the help! I hadn't gotten as far as examining the individual
> > object files, but I did do some testing locally, here are my findings:
> > - sbuild multiple times from the git packaging seems to generate the same
> >   binaries (including dbgsym)
> > - debrebuild seems to generate a different NT_GNU_BUILD_ID value every
> >   time, but no other changes in the Hyprland binary itself.
> 
> That sounds strange as debrebuild is only calling sbuild. Do you call
> debrebuild with the buildinfo from your sbuild run?
> How exactly do you call sbuild and debrebuild?

I call sbuild like so:
  $ gbp buildpackage --git-builder="sbuild -s -d unstable"
  
And debrebuild like so:
  $ debrebuild --builder=sbuild+unshare --cache=../cache --respect-build-path 
../../hyprland_0.56.2+ds-3_amd64.buildinfo

My sbuild is still configured to use the schroot backend, but I'm unable
to get debrebuild to work with the `sbuild` (schroot) backend, so
there's a difference there I guess.

> > - diffing the output of `readelf --all usr/bin/Hyprland` and `objdump
> >   --disassemble usr/bin/Hyprland` of each variant shows that only the
> >   build ID changes, nothing else
> > - diffing the output of `readelf --all --debug-dump` on the debug shows
> >   a lot of different offsets, but the diff output is 3.2GB and I
> >   haven't managed to figure out what's different apart from offsets.
> 
> That seems consistent with my findings. The question is why the offsets are
> different. My next step would be to safe all input files to the gcc call and
> check if we can reproduce the different offsets by calling gcc alone. Could
> you try this?

I was hoping to do so by extracting the build directory from debrebuild,
but have been unsuccessful in doing so thus far. I haven't had time to
have another go at it sincec, but my next attempt was going to be to put
a long sleep at the end of the build and just try copying the folder out
while the build directory is propped alive by the sleep.

> > Since you've managed to get to different variants of the build
> > directory, are you able to checksum all the files there and see what
> > other files are different? There should be some autogenerated sources in
> > 
> > - src/protocols (generated by protocolnew calls in CMakeLists.txt)
> > - src/config/lua/DefaultConfigBytes.hpp (generated by xxd from
> >   hyprland.lua)
> > - src/render/shaders/Shaders.hpp (generated by
> >   scripts/generateShaderIncludes.sh, also see
> >   Fix-shader-inclusion-order.patch)
> 
> They where all the same. The complete diff was:
> 
> Files 
> hyprland-0.56.2+ds.1/build/CMakeFiles/4.3.4/CMakeDetermineCompilerABI_C.bin 
> and hyprland-0.56.2+ds/build/CMakeFiles/4.3.4/CMakeDetermineCompilerABI_C.bin 
> differ
> Files 
> hyprland-0.56.2+ds.1/build/CMakeFiles/4.3.4/CMakeDetermineCompilerABI_CXX.bin 
> and 
> hyprland-0.56.2+ds/build/CMakeFiles/4.3.4/CMakeDetermineCompilerABI_CXX.bin 
> differ
> Files hyprland-0.56.2+ds.1/build/CMakeFiles/CMakeConfigureLog.yaml and 
> hyprland-0.56.2+ds/build/CMakeFiles/CMakeConfigureLog.yaml differ
> Files 
> hyprland-0.56.2+ds.1/build/CMakeFiles/hyprland_lib.dir/cmake_pch.hxx.gch and 
> hyprland-0.56.2+ds/build/CMakeFiles/hyprland_lib.dir/cmake_pch.hxx.gch differ
> Files 
> hyprland-0.56.2+ds.1/build/CMakeFiles/hyprland_lib.dir/src/managers/fullscreen/FullscreenController.cpp.o
>  and 
> hyprland-0.56.2+ds/build/CMakeFiles/hyprland_lib.dir/src/managers/fullscreen/FullscreenController.cpp.o
>  differ
> Files 
> hyprland-0.56.2+ds.1/build/CMakeFiles/hyprland_lib.dir/src/plugins/PluginAPI.cpp.o
>  and 
> hyprland-0.56.2+ds/build/CMakeFiles/hyprland_lib.dir/src/plugins/PluginAPI.cpp.o
>  differ
> Files 
> hyprland-0.56.2+ds.1/build/CMakeFiles/hyprland_lib.dir/src/protocols/XDGShell.cpp.o
>  and 
> hyprland-0.56.2+ds/build/CMakeFiles/hyprland_lib.dir/src/protocols/XDGShell.cpp.o
>  differ
> Files hyprland-0.56.2+ds.1/build/dumpabiver and 
> hyprland-0.56.2+ds/build/dumpabiver differ
> Files hyprland-0.56.2+ds.1/build/Hyprland and 
> hyprland-0.56.2+ds/build/Hyprland differ
> Files hyprland-0.56.2+ds.1/build/libhyprland_lib.a and 
> hyprland-0.56.2+ds/build/libhyprland_lib.a differ
> Files hyprland-0.56.2+ds.1/debian/.debhelper/hyprland/dbgsym-build-ids and 
> hyprland-0.56.2+ds/debian/.debhelper/hyprland/dbgsym-build-ids differ
> Files 
> hyprland-0.56.2+ds.1/debian/.debhelper/hyprland/dbgsym-root/DEBIAN/control 
> and hyprland-0.56.2+ds/debian/.debhelper/hyprland/dbgsym-root/DEBIAN/control 
> differ
> Files 
> hyprland-0.56.2+ds.1/debian/.debhelper/hyprland/dbgsym-root/DEBIAN/md5sums 
> and hyprland-0.56.2+ds/debian/.debhelper/hyprland/dbgsym-root/DEBIAN/md5sums 
> differ
> Only in 
> hyprland-0.56.2+ds/debian/.debhelper/hyprland/dbgsym-root/usr/lib/debug/.build-id:
>  39
> Only in 
> hyprland-0.56.2+ds.1/debian/.debhelper/hyprland/dbgsym-root/usr/lib/debug/.build-id:
>  f8
> Files hyprland-0.56.2+ds.1/debian/hyprland/DEBIAN/md5sums and 
> hyprland-0.56.2+ds/debian/hyprland/DEBIAN/md5sums differ
> Files hyprland-0.56.2+ds.1/debian/hyprland/usr/bin/hyprland and 
> hyprland-0.56.2+ds/debian/hyprland/usr/bin/hyprland differ
> Files hyprland-0.56.2+ds.1/debian/hyprland/usr/bin/Hyprland and 
> hyprland-0.56.2+ds/debian/hyprland/usr/bin/Hyprland differ
> Files hyprland-0.56.2+ds.1/debian/tmp/usr/bin/Hyprland and 
> hyprland-0.56.2+ds/debian/tmp/usr/bin/Hyprland differ
> 
> > How were you able to grab the build directory out, btw? I haven't found
> > a way to do so with `debrebuild`.
> 
> I actually just compile on my normal system but you can do it in sbuild and
> debrebuild with this in your sbuild.conf:
> 
> $external_commands = {"post-build-commands" => [ [ '%e tar c %p > 
> snapshot.tar' ] ]};

This made the command run, but it looks like the snapshot.tar is just
tossed instead of being treated as an artifact. I've tried to use a
different name to try to get it to be recognized as a build artifact,
but no dice either:

  $external_commands = {"post-build-commands" => [ [ '%e tar cJ %p > 
%b/%SRCPACKAGE_VERSION.postbuild.tar.xz' ] ]};

In the meantime, it looks like 0.56.2+ds-3 is recognized as reproducible
in Debian so I'm going to downgrade this bug to important to let it
migrate.

-- 
Kind regards,
Loong Jin

Attachment: signature.asc
Description: PGP signature

Reply via email to