[Pkg-tcltk-devel] Bug#1105593: tclx8.4: FTBFS with make --shuffle=reverse: dh_install: error: missing files, aborting

Lucas Nussbaum lucas at debian.org
Tue May 13 20:16:43 BST 2025


Source: tclx8.4
Version: 8.4.1-4
Severity: minor
Tags: trixie sid ftbfs
User: lucas at debian.org
Usertags: ftbfs-shuffle

Hi,

GNU Make now has a --shuffle option that simulates non-deterministic ordering
of target prerequisites. See
https://trofi.github.io/posts/238-new-make-shuffle-mode.html and also previous
work in Debian by Santiago Vila:
https://people.debian.org/~sanvila/make-shuffle/

This package fails to build with make --shuffle=reverse.
This is likely to be caused by a missing dependency in
debian/rules or an upstream Makefile.

More information about this mass bug filing is available at
https://wiki.debian.org/qa.debian.org/FTBFS/Shuffle

Relevant part (hopefully):
> make[1]: Entering directory '/build/reproducible-path/tclx8.4-8.4.1'
> Makefile:459: update target 'install-help' due to: target does not exist
> if test -d "/build/reproducible-path/tclx8.4-8.4.1/help" ; then \
>      echo "Installing TclX help files in `echo /build/reproducible-path/tclx8.4-8.4.1/debian/tmp/usr/lib/tclx8.4/help`"; \
>      mkdir -p `echo /build/reproducible-path/tclx8.4-8.4.1/debian/tmp/usr/lib/tclx8.4/help`; \
>      TCL_LIBRARY=`echo /usr/include/tcl8.6/tcl-private/library` TCLX_LIBRARY=`echo ./library` TCLX_HELP_DIR="`echo /build/reproducible-path/tclx8.4-8.4.1/help`" LD_LIBRARY_PATH=".:/usr/lib:" PATH=".:/usr/lib:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games" TCLLIBPATH="." /usr/bin/tclsh8.6 `echo ./unix/tools`/instcopy.tcl `echo /build/reproducible-path/tclx8.4-8.4.1/help` `echo /build/reproducible-path/tclx8.4-8.4.1/debian/tmp/usr/lib/tclx8.4/help`; \
> fi
> Makefile:223: update target 'install-doc' due to: target does not exist
> mkdir -p /build/reproducible-path/tclx8.4-8.4.1/debian/tmp/usr/share/man/mann
> echo "Installing documentation in /build/reproducible-path/tclx8.4-8.4.1/debian/tmp/usr/share/man"
> Installing documentation in /build/reproducible-path/tclx8.4-8.4.1/debian/tmp/usr/share/man
> list='./doc/*.n'; for i in $list; do \
>     echo "Installing $i"; \
>     rm -f /build/reproducible-path/tclx8.4-8.4.1/debian/tmp/usr/share/man/mann/`basename $i`; \
>     /usr/bin/install -c -m 644 $i /build/reproducible-path/tclx8.4-8.4.1/debian/tmp/usr/share/man/mann ; \
> done
> Installing ./doc/TclX.n
> Makefile:210: update target 'install-libraries' due to: target does not exist
> mkdir -p /build/reproducible-path/tclx8.4-8.4.1/debian/tmp/usr/include
> echo "Installing header files in /build/reproducible-path/tclx8.4-8.4.1/debian/tmp/usr/include"
> Installing header files in /build/reproducible-path/tclx8.4-8.4.1/debian/tmp/usr/include
> list='generic/tclExtend.h'; for i in $list; do \
>     echo "Installing ./$i" ; \
>     /usr/bin/install -c -m 644 ./$i /build/reproducible-path/tclx8.4-8.4.1/debian/tmp/usr/include ; \
> done;
> Installing ./generic/tclExtend.h
> Makefile:411: update target 'install-bin-binaries' due to: target does not exist
> mkdir -p /build/reproducible-path/tclx8.4-8.4.1/debian/tmp/usr/bin
> list=''; for p in $list; do \
>   if test -f $p; then \
>     echo " /usr/bin/install -c $p /build/reproducible-path/tclx8.4-8.4.1/debian/tmp/usr/bin/$p"; \
>     /usr/bin/install -c $p /build/reproducible-path/tclx8.4-8.4.1/debian/tmp/usr/bin/$p; \
>   fi; \
> done
> Makefile:366: update target 'install-lib-binaries' due to: target does not exist
> mkdir -p /build/reproducible-path/tclx8.4-8.4.1/debian/tmp/usr/lib/tclx8.4
> list='libtclx8.4.a'; for p in $list; do \
>   if test -f $p; then \
>     echo " /usr/bin/install -c $p /build/reproducible-path/tclx8.4-8.4.1/debian/tmp/usr/lib/tclx8.4/$p"; \
>     /usr/bin/install -c $p /build/reproducible-path/tclx8.4-8.4.1/debian/tmp/usr/lib/tclx8.4/$p; \
>     stub=`echo $p|sed -e "s/.*\(stub\).*/\1/"`; \
>     if test "x$stub" = "xstub"; then \
> 	echo " x86_64-linux-gnu-ranlib /build/reproducible-path/tclx8.4-8.4.1/debian/tmp/usr/lib/tclx8.4/$p"; \
> 	x86_64-linux-gnu-ranlib /build/reproducible-path/tclx8.4-8.4.1/debian/tmp/usr/lib/tclx8.4/$p; \
>     else \
> 	echo " x86_64-linux-gnu-ranlib /build/reproducible-path/tclx8.4-8.4.1/debian/tmp/usr/lib/tclx8.4/$p"; \
> 	x86_64-linux-gnu-ranlib /build/reproducible-path/tclx8.4-8.4.1/debian/tmp/usr/lib/tclx8.4/$p; \
>     fi; \
>     ext=`echo $p|sed -e "s/.*\.//"`; \
>     if test "x$ext" = "xdll"; then \
> 	lib=`basename $p|sed -e 's/.[^.]*$//'`.lib; \
> 	if test -f $lib; then \
> 	    echo " /usr/bin/install -c -m 644 $lib /build/reproducible-path/tclx8.4-8.4.1/debian/tmp/usr/lib/tclx8.4/$lib"; \
>             /usr/bin/install -c -m 644 $lib /build/reproducible-path/tclx8.4-8.4.1/debian/tmp/usr/lib/tclx8.4/$lib; \
> 	fi; \
>     fi; \
>   fi; \
> done
>  /usr/bin/install -c libtclx8.4.a /build/reproducible-path/tclx8.4-8.4.1/debian/tmp/usr/lib/tclx8.4/libtclx8.4.a
>  x86_64-linux-gnu-ranlib /build/reproducible-path/tclx8.4-8.4.1/debian/tmp/usr/lib/tclx8.4/libtclx8.4.a
> list='library/tclx.tcl library/autoload.tcl library/arrayprocs.tcl library/compat.tcl library/convlib.tcl library/edprocs.tcl library/events.tcl library/forfile.tcl library/globrecur.tcl library/help.tcl library/profrep.tcl library/pushd.tcl library/setfuncs.tcl library/showproc.tcl library/stringfile.tcl library/tcllib.tcl library/fmath.tcl library/buildhelp.tcl'; for p in $list; do \
>   if test -f ./$p; then \
>     destp=`basename $p`; \
>     echo " Install $destp /build/reproducible-path/tclx8.4-8.4.1/debian/tmp/usr/lib/tclx8.4/$destp"; \
>     /usr/bin/install -c -m 644 ./$p /build/reproducible-path/tclx8.4-8.4.1/debian/tmp/usr/lib/tclx8.4/$destp; \
>   fi; \
> done
>  Install tclx.tcl /build/reproducible-path/tclx8.4-8.4.1/debian/tmp/usr/lib/tclx8.4/tclx.tcl
>  Install autoload.tcl /build/reproducible-path/tclx8.4-8.4.1/debian/tmp/usr/lib/tclx8.4/autoload.tcl
>  Install arrayprocs.tcl /build/reproducible-path/tclx8.4-8.4.1/debian/tmp/usr/lib/tclx8.4/arrayprocs.tcl
>  Install compat.tcl /build/reproducible-path/tclx8.4-8.4.1/debian/tmp/usr/lib/tclx8.4/compat.tcl
>  Install convlib.tcl /build/reproducible-path/tclx8.4-8.4.1/debian/tmp/usr/lib/tclx8.4/convlib.tcl
>  Install edprocs.tcl /build/reproducible-path/tclx8.4-8.4.1/debian/tmp/usr/lib/tclx8.4/edprocs.tcl
>  Install events.tcl /build/reproducible-path/tclx8.4-8.4.1/debian/tmp/usr/lib/tclx8.4/events.tcl
>  Install forfile.tcl /build/reproducible-path/tclx8.4-8.4.1/debian/tmp/usr/lib/tclx8.4/forfile.tcl
>  Install globrecur.tcl /build/reproducible-path/tclx8.4-8.4.1/debian/tmp/usr/lib/tclx8.4/globrecur.tcl
>  Install help.tcl /build/reproducible-path/tclx8.4-8.4.1/debian/tmp/usr/lib/tclx8.4/help.tcl
>  Install profrep.tcl /build/reproducible-path/tclx8.4-8.4.1/debian/tmp/usr/lib/tclx8.4/profrep.tcl
>  Install pushd.tcl /build/reproducible-path/tclx8.4-8.4.1/debian/tmp/usr/lib/tclx8.4/pushd.tcl
>  Install setfuncs.tcl /build/reproducible-path/tclx8.4-8.4.1/debian/tmp/usr/lib/tclx8.4/setfuncs.tcl
>  Install showproc.tcl /build/reproducible-path/tclx8.4-8.4.1/debian/tmp/usr/lib/tclx8.4/showproc.tcl
>  Install stringfile.tcl /build/reproducible-path/tclx8.4-8.4.1/debian/tmp/usr/lib/tclx8.4/stringfile.tcl
>  Install tcllib.tcl /build/reproducible-path/tclx8.4-8.4.1/debian/tmp/usr/lib/tclx8.4/tcllib.tcl
>  Install fmath.tcl /build/reproducible-path/tclx8.4-8.4.1/debian/tmp/usr/lib/tclx8.4/fmath.tcl
>  Install buildhelp.tcl /build/reproducible-path/tclx8.4-8.4.1/debian/tmp/usr/lib/tclx8.4/buildhelp.tcl
> if test "x0" = "x1"; then \
>     echo " Install pkgIndex.tcl /build/reproducible-path/tclx8.4-8.4.1/debian/tmp/usr/lib/tclx8.4"; \
>     /usr/bin/install -c -m 644 pkgIndex.tcl /build/reproducible-path/tclx8.4-8.4.1/debian/tmp/usr/lib/tclx8.4; \
> fi
> make[1]: Leaving directory '/build/reproducible-path/tclx8.4-8.4.1'
> cp -fp libtclx*.a /build/reproducible-path/tclx8.4-8.4.1/debian/tmp/usr/lib/
> # Fix the installation
> mv /build/reproducible-path/tclx8.4-8.4.1/debian/tmp/usr/lib/tclx8.4/lib* /build/reproducible-path/tclx8.4-8.4.1/debian/tmp/usr/lib/
> ln -nfs libtclx8.4.so.0 \
>     /build/reproducible-path/tclx8.4-8.4.1/debian/tmp/usr/lib/libtclx8.4.so
> mkdir -p /build/reproducible-path/tclx8.4-8.4.1/debian/tmp/usr/include/tclx8.4
> mv /build/reproducible-path/tclx8.4-8.4.1/debian/tmp/usr/include/*.h \
>     /build/reproducible-path/tclx8.4-8.4.1/debian/tmp/usr/include/tclx8.4/
> sh ./debian/install_manpages /build/reproducible-path/tclx8.4-8.4.1/debian/tmp
> ln -nfs TclX.3tclx.gz /build/reproducible-path/tclx8.4-8.4.1/debian/tmp/usr/share/man/man3/tclx.3tclx.gz
> # Load only on tcl8.4
> echo 'if {[package vcompare [info tclversion] 8.4] < 0} return' \
>     > /build/reproducible-path/tclx8.4-8.4.1/debian/tmp/usr/lib/tclx8.4/pkgIndex.tcl
> sed 's|\$dir|/usr/lib|' < pkgIndex.tcl \
>     >>/build/reproducible-path/tclx8.4-8.4.1/debian/tmp/usr/lib/tclx8.4/pkgIndex.tcl
> # Copy files in packages directories
> dh_install -v --sourcedir=debian/tmp
> dh_install: warning: Cannot find (any matches for) "usr/lib/libtclx*.so.*" (tried in debian/tmp, debian/tmp)
> 
> dh_install: warning: tclx8.4 missing files: usr/lib/libtclx*.so.*
> dh_install: error: missing files, aborting
> make: *** [debian/rules:126: install] Error 255 shuffle=reverse


The full build log is available from:
http://qa-logs.debian.net/2025/05/05/shuffle/reverse/tclx8.4_8.4.1-4_unstable_reverse.log

If you reassign this bug to another package, please mark it as 'affects'-ing
this package. See https://www.debian.org/Bugs/server-control#affects



More information about the Pkg-tcltk-devel mailing list