I am uploading a NMU to DELAYED/10 in order to fix this. The debdiff is attached.
diff -Nru binstats-1.08/Makefile binstats-1.08/Makefile --- binstats-1.08/Makefile 2024-02-18 16:23:57.000000000 +0000 +++ binstats-1.08/Makefile 1999-12-06 19:36:05.000000000 +0000 @@ -12,8 +12,8 @@ PREFIX= /usr/local # If you want to install derefsymlink in some place other than # /usr/local/bin then make sure PATH is set accordingly in binstats -DESTBIN= $(DESTDIR)/$(PREFIX)/bin -DESTMAN= $(DESTDIR)/$(PREFIX)/man/man1 +DESTBIN= $(PREFIX)/bin +DESTMAN= $(PREFIX)/man/man1 derefsymlink: derefsymlink.o $(CC) -o $@ $(CFLAGS) $(LDFLAGS) derefsymlink.o @@ -24,4 +24,4 @@ install -m 644 binstats.1 derefsymlink.1 $(DESTMAN) clean: - rm -f derefsymlink derefsymlink.o *~ *.00 bstats.log* + rm -f derefsymlink derefsymlink.o diff -Nru binstats-1.08/binstats binstats-1.08/binstats --- binstats-1.08/binstats 2024-02-18 16:23:57.000000000 +0000 +++ binstats-1.08/binstats 2001-01-18 12:31:38.000000000 +0000 @@ -100,7 +100,6 @@ # your system or ignore if USEPATH=1) EXEDIR="/bin /usr/bin /usr/local/bin /sbin /usr/sbin /usr/local/sbin /usr/X11R6/bin /usr/games" -USEMANPATH=1 # the list of directories where your man pages reside MANDIR="/usr/man /usr/share/man /usr/X11R6/man /usr/local/man" @@ -136,8 +135,6 @@ DEBUG=0 # another debugging option, set to 0 to reuse old temp files FILEOPS=1 -# Debian checks? Set to 1 to skip Debian-specific checks -NODEBIAN=0 #----------process command line arguments--------------- CLI_USAGE=\ @@ -146,7 +143,7 @@ [-l[ibraries]=\"/lib /usr/lib\"] [-m[anuals]=\"/usr/man /usr/local/man\"] [-p[ath]=\"/bin:/usr/bin:/usr/local/bin\"] - [-t[emp]=/tmp] [-s[kip-debian] [-v[ersion]]" + [-t[emp]=/tmp] [-v[ersion]]" for CLI_OPT do @@ -165,11 +162,8 @@ -l*=*) USELDSOCONF=0 DLIBDIR="$CLI_ARG" ;; -m*=*) MANDIR="$CLI_ARG" ;; - -m*=*) USEMANPATH=0 - MANDIR="$CLI_ARG" ;; -p*=*) PATH="$CLI_ARG" ;; -t*=*) TMPDIR="$CLI_ARG" ;; - -s*=*) NODEBIAN=1 ;; -v*) echo "binstats-$BSVER" exit 0 ;; *) echo "$CLI_USAGE" @@ -183,23 +177,10 @@ EXEDIR=`echo $OLDPATH | tr : ' ' | sed s:\~:$HOME:g` fi -if [ $USEMANPATH -eq 1 ];then - MANDIR=`manpath | tr : ' '` -fi - if [ $USELDSOCONF -eq 1 ]; then # use /etc/ld.so.conf plus the two "trusted" locations - LDSOCONF=`cat /etc/ld.so.conf | grep -v '^#' | grep -v '^include ' | xargs echo` + LDSOCONF=`cat /etc/ld.so.conf | grep -v '^#' | xargs echo` DLIBDIR="/lib /usr/lib $LDSOCONF" - - # Handle includes in LDSOCONF - LDSOCONF_INC=`cat /etc/ld.so.conf | grep -v '^#' | grep '^include ' | sed -e 's/^include //' | xargs echo` - for file in `ls $LDSOCONF_INC 2>/dev/null`; do - if [ -e "$file" ]; then - LDSOCONF=`cat $file | grep -v '^#' | grep -v '^include ' | xargs echo` - DLIBDIR="$DLIBDIR $LDSOCONF" - fi - done fi # ID number @@ -207,107 +188,52 @@ # name of temp log BSLOGTMP=$BSLOG.$PIDNO -# Create the files we are going to use -# backup old log file -if [ -f $BSLOG ]; then mv -f $BSLOG $BSLOG~; fi -{ umask 066; touch $BSLOG; [ -e $BSLOGTMP ] && rm -f $BSLOGTMP; touch $BSLOGTMP ; } if [ $DEBUG -gt 0 ]; then - BINSDIR=. + TMPDIR=. PIDNO=00 else - BINSDIR=`mktemp -t -d binstats.XXXXXX` || { echo "$0: Cannot create temporary directory!" >&2; exit 1; } -fi -# tidy up -if [ $DEBUG -eq 0 ]; then - trap " [ -d \"$BINSDIR\" ] && /bin/rm -rf -- \"$BINSDIR\"" 0 1 2 3 13 15 + TMPDIR=$TMPDIR/binstats.$PIDNO + mkdir -m 700 $TMPDIR || exit 1 fi + # list of executables -EXELIST=$BINSDIR/exelist.$PIDNO +EXELIST=$TMPDIR/exelist.$PIDNO # list of dynamic libraries -DLIBLIST=$BINSDIR/dliblist.$PIDNO +DLIBLIST=$TMPDIR/dliblist.$PIDNO # list of man pages -MANLIST=$BINSDIR/manlist.$PIDNO +MANLIST=$TMPDIR/manlist.$PIDNO # executable types -EXEFILE=$BINSDIR/exefile.$PIDNO +EXEFILE=$TMPDIR/exefile.$PIDNO # list of dependent (used) libraries -EXELIB=$BINSDIR/exelib.$PIDNO +EXELIB=$TMPDIR/exelib.$PIDNO # list of unused libraries -DLIBUN=$BINSDIR/dlibun.$PIDNO -# list of unused libraries with packages -DLIBUNP=$BINSDIR/dlibunp.$PIDNO - -# Unused library packages -LIBPUN=$BINSDIR/libpun.$PIDNO -# Package list -PACKLIST=$BINSDIR/packlist.$PIDNO +DLIBUN=$TMPDIR/dlibun.$PIDNO # temporary storage -DTEMPA=$BINSDIR/dtempa.$PIDNO # all dynamic libs in $DLIBDIR -DTEMPB=$BINSDIR/dtempb.$PIDNO # missing dynamic libs in $EXELIB -DTEMPC=$BINSDIR/dtempc.$PIDNO # dereferenced list of $DTEMPA - -ETEMPA=$BINSDIR/etempa.$PIDNO # all files in $EXEDIR -ETEMPB=$BINSDIR/etempb.$PIDNO # output of ldd on files in $EXEFILE -ETEMPC=$BINSDIR/etempc.$PIDNO # statically linked binaries in $ETEMPB -ETEMPD=$BINSDIR/etempd.$PIDNO # duplicate executable names in $ETEMPA -ETEMPE=$BINSDIR/etempe.$PIDNO # 'not stripped' binaries in $EXEFILE -ETEMPF=$BINSDIR/etempf.$PIDNO # setuid binaries in $EXEFILE +DTEMPA=$TMPDIR/dtempa.$PIDNO # all dynamic libs in $DLIBDIR +DTEMPB=$TMPDIR/dtempb.$PIDNO # missing dynamic libs in $EXELIB +DTEMPC=$TMPDIR/dtempc.$PIDNO # dereferenced list of $DTEMPA + +ETEMPA=$TMPDIR/etempa.$PIDNO # all files in $EXEDIR +ETEMPB=$TMPDIR/etempb.$PIDNO # output of ldd on files in $EXEFILE +ETEMPC=$TMPDIR/etempc.$PIDNO # statically linked binaries in $ETEMPB +ETEMPD=$TMPDIR/etempd.$PIDNO # duplicate executable names in $ETEMPA +ETEMPE=$TMPDIR/etempe.$PIDNO # 'not stripped' binaries in $EXEFILE +ETEMPF=$TMPDIR/etempf.$PIDNO # setuid binaries in $EXEFILE -MTEMPA=$BINSDIR/mtempa.$PIDNO # all files in $MANDIR -MTEMPB=$BINSDIR/mtempb.$PIDNO # duplicate executable names in $MTEMPA - -# A wrapper around readlink(1). -derefsymlink() -{ - while [ $# -gt 0 ]; do - if [ "$1" = -f ]; then - shift - while read f; do - readlink -f "$f" || echo "$f" - done < "$1" - elif [ "$1" = -s ]; then - while read f; do - readlink -f "$f" || echo "$f" - done - else - readlink -f "$1" || echo "$1" - fi - shift - done -} - -isdebian() -{ - if [ -e /etc/debian_version ] && [ "$NODEBIAN" -eq 0 ] ; then - return 0 - else - return 1 - fi -} - -# Abort gracefully if a file is missing -check_aborted() -{ - file=$1 - if [ ! -e "$file" ] ; then - echo "$0: Task aborted and missing temporary file ($file). Exiting. " >&2 - exit 1 - fi - return 0 -} +MTEMPA=$TMPDIR/mtempa.$PIDNO # all files in $MANDIR +MTEMPB=$TMPDIR/mtempb.$PIDNO # duplicate executable names in $MTEMPA #----------begin program--------------- if [ $FILEOPS -gt 0 ]; then echo "Look in $EXEDIR for executables" -find $EXEDIR -perm /111 -maxdepth 1 -type f -follow -print 2>/dev/null| \ +find $EXEDIR -perm +111 -maxdepth 1 -type f -follow -print | \ derefsymlink -s | sort | uniq | \ awk -F '/' '{ printf "%s:%s\n", $NF, $0 }' > $ETEMPA -check_aborted $ETEMPA - echo "Find duplicated executable names" # use an awk script instead of whereis later (as suggested by Preston Crow) # R=repetition, N=name, P=path @@ -321,33 +247,27 @@ END { if (R==1) {printf("%s\n",P)} }' \ > $ETEMPD -check_aborted $ETEMPD - echo "Sort out list by alphabetical order" sort -t ':' $ETEMPA | cut -d ':' -f 2- > $EXELIST -check_aborted $EXELIST - echo "Find executable type (this will take a long time)" cat $EXELIST | xargs file > $EXEFILE -check_aborted $EXEFILE - echo "Look for dynamic library dependence (this will take an even longer time)" # hmm, ldd (1.7.14) seems to output some unprintable character when it # encounters a static a.out image # And ldd (1.9.2) prints some hex numbers after library name in parentheses if [ $LDDBA -eq 0 ]; then grep 'executable' $EXEFILE | cut -d ':' -f 1 | \ - xargs ldd 2>/dev/null | col -b | cut -d '(' -f 1 >& $ETEMPB + xargs ldd | col -b | cut -d '(' -f 1 >& $ETEMPB else grep 'executable' $EXEFILE | cut -d ':' -f 1 | \ - xargs ldd 2>/dev/null | awk cut -d '(' -f 1 >& $ETEMPB + xargs ldd | awk cut -d '(' -f 1 >& $ETEMPB fi echo "List the used dynamic libraries" grep 'lib[^:]*\.so' $ETEMPB | sort -b | uniq -c > $EXELIB -grep 'statically linked' $EXEFILE > $ETEMPC +grep 'statically linked' $ETEMPB > $ETEMPC echo "Hunt down binaries that depend on missing libraries" awk \ @@ -355,61 +275,18 @@ /not found/ { if (NEW == 1) print CURPROG; NEW = 0 }' \ $ETEMPB > $DTEMPB -check_aborted $DTEMPB - echo "Look in $DLIBDIR for dynamic libraries" find $DLIBDIR -maxdepth 1 -type f -name 'lib*.so*' | \ derefsymlink -s | sort | uniq > $DLIBLIST -check_aborted $DLIBLIST - echo "Search for unused dynamic libraries" grep -v 'not found' $EXELIB | cut -d '/' -f 2- | cut -d ' ' -f 1 | \ sort | uniq | sed 's,^,/,g' > $DTEMPA -check_aborted $DTEMPA - derefsymlink -f $DTEMPA | sort | uniq > $DTEMPC -check_aborted $DTEMPC - diff -du $DLIBLIST $DTEMPC | grep '^-/' | cut -b 2- > $DLIBUN -check_aborted $DLIBUN - -# If this is a Debian system, add the packages in too -if isdebian ; then - echo "Search for packages holding unused dynamic libraries" - >$PACKLIST - >$DLIBUNP - cat $DLIBUN | - while read file; do - package=`dpkg -S $file 2>/dev/null | cut -f 1 -d :` - if [ -n "$package" ] ; then - echo $package >>$PACKLIST - echo "$file ($package)" >>$DLIBUNP - else - echo "$file" >>$DLIBUNP - fi - done - echo "Reviewing packages holding unused dynamic libraries" - cat $PACKLIST | sort -u | - while read package ; do - # TODO, could be done on packages that begin with 'lib' - unused=1 - for library in `dpkg -L $package |grep lib/`; do - if [ -z "`grep ^$library\$ $DLIBUN`" ] ; then - unused=0 - break - fi - done - if [ $unused -eq 1 ] ; then - echo "$package" >>$LIBPUN - fi - done -fi - - echo "Find un-stripped binaries" grep 'not stripped' $EXEFILE | sort > $ETEMPE @@ -423,8 +300,6 @@ derefsymlink -s | sort | uniq | \ awk -F '/' '{ printf "%s;%s\n", $NF, $0 }' > $MTEMPA -check_aborted $MTEMPA - echo "Find duplicated man page names" sort -t ';' $MTEMPA | awk -F ';' \ 'BEGIN { R=0;N="";P="" } @@ -436,8 +311,6 @@ END { if (R==1) {printf("%s\n",P)} }' \ > $MTEMPB -check_aborted $MTEMPB - # finish messing around with files and lists of files # now work out some numbers @@ -452,7 +325,6 @@ JAVAC=`grep 'Java bytecode' $EXEFILE | wc -l` LIBC=`cat $EXELIB | wc -l` UNLIBC=`cat $DLIBUN | wc -l` -LIBPUNC=`cat $LIBPUN | wc -l` DLLIBC=`grep 'DLL' $EXELIB | wc -l` SELFC=`grep 'ELF' $ETEMPC | wc -l` SECOFFC=`grep 'ECOFF' $ETEMPC | wc -l` @@ -533,9 +405,6 @@ echo "Used libraries: $LIBC" >> $BSLOGTMP echo " DLL: $DLLIBC" >> $BSLOGTMP echo "Unused libs: $UNLIBC" >> $BSLOGTMP -if isdebian ; then -echo "Packages with unused libs: $LIBPUNC" >> $BSLOGTMP -fi echo "Man pages: $MANC" >> $BSLOGTMP echo " Duplicate names: $MANDUPC" >> $BSLOGTMP @@ -601,7 +470,8 @@ DOTLINE=0 if [ $SELFC -gt 0 ]; then echo "statically linked (ELF):" >> $BSLOGTMP - grep 'ELF' $ETEMPC | cut -d ':' -f 1 >> $BSLOGTMP + grep -B 1 'statically linked (ELF)' $ETEMPB | grep '^/' | \ + cut -d ':' -f 1 >> $BSLOGTMP DOTLINE=1 fi if [ $ELFUNSTR -gt 0 ]; then @@ -701,18 +571,7 @@ if [ $UNLIBC -gt 0 ]; then echo "--------------------------------------------------------------" >> $BSLOGTMP echo "unused:" >> $BSLOGTMP - if isdebian ; then - cat $DLIBUNP >> $BSLOGTMP - else - cat $DLIBUN >> $BSLOGTMP - fi -fi -echo "==============================================================" >> $BSLOGTMP -if isdebian && [ $LIBPUNC -gt 0 ]; then - echo "PACKAGES:" >> $BSLOGTMP - echo "--------------------------------------------------------------" >> $BSLOGTMP - echo "with all libraries unused:" >> $BSLOGTMP - cat $LIBPUN >> $BSLOGTMP + cat $DLIBUN >> $BSLOGTMP fi echo "==============================================================" >> $BSLOGTMP if [ $MANDUPC -gt 0 ]; then @@ -721,6 +580,8 @@ echo "==============================================================" >> $BSLOGTMP fi +# backup old log file +if [ -f $BSLOG ]; then mv -f $BSLOG $BSLOG~; fi # filter through sed to beautify (note the embedded TAB) sed -e 's,^/\(.*[^:]\)$, /\1,g' $BSLOGTMP > $BSLOG rm -f $BSLOGTMP @@ -777,6 +638,10 @@ echo "Man pages: $MANC" echo " Duplicate names: $MANDUPC" +# tidy up +if [ $DEBUG -eq 0 ]; then + rm -rf $TMPDIR +fi echo "==============================================================" echo "More detailed information can be obtained in $BSLOG" diff -Nru binstats-1.08/binstats.1 binstats-1.08/binstats.1 --- binstats-1.08/binstats.1 2024-02-18 16:23:57.000000000 +0000 +++ binstats-1.08/binstats.1 1999-12-06 19:37:56.000000000 +0000 @@ -6,7 +6,6 @@ .RB [ -b [ inaries ]\c .RI = bindirs ] .RB [ -d [ ebug ]] -.RB [ -s [ kip-debian ] .RB [ -f [ ile ]\c .RI = logfile ] .RB [ -l [ ibraries ]\c @@ -34,10 +33,6 @@ Store temporary files in the current directory and do not remove them when finished. .TP -.B -skip-debian -Skip Debian tests that analyse installed packages even if this is a -Debian system. -.TP .BI -file " logfile" Output report to .I logfile diff -Nru binstats-1.08/debian/changelog binstats-1.08/debian/changelog --- binstats-1.08/debian/changelog 2024-02-18 16:23:57.000000000 +0000 +++ binstats-1.08/debian/changelog 2024-02-18 16:19:50.000000000 +0000 @@ -1,3 +1,10 @@ +binstats (1.08-9.2) unstable; urgency=medium + + * Non-maintainer upload + * Convert to source format 3.0 (Closes: #1007548) + + -- Bastian Germann <b...@debian.org> Sun, 18 Feb 2024 16:19:50 +0000 + binstats (1.08-9.1) unstable; urgency=medium * Non-maintainer upload. diff -Nru binstats-1.08/debian/patches/debian.patch binstats-1.08/debian/patches/debian.patch --- binstats-1.08/debian/patches/debian.patch 1970-01-01 00:00:00.000000000 +0000 +++ binstats-1.08/debian/patches/debian.patch 2024-02-18 16:19:50.000000000 +0000 @@ -0,0 +1,421 @@ +--- binstats-1.08.orig/Makefile ++++ binstats-1.08/Makefile +@@ -12,8 +12,8 @@ LDFLAGS= -s + PREFIX= /usr/local + # If you want to install derefsymlink in some place other than + # /usr/local/bin then make sure PATH is set accordingly in binstats +-DESTBIN= $(PREFIX)/bin +-DESTMAN= $(PREFIX)/man/man1 ++DESTBIN= $(DESTDIR)/$(PREFIX)/bin ++DESTMAN= $(DESTDIR)/$(PREFIX)/man/man1 + + derefsymlink: derefsymlink.o + $(CC) -o $@ $(CFLAGS) $(LDFLAGS) derefsymlink.o +@@ -24,4 +24,4 @@ install:: derefsymlink + install -m 644 binstats.1 derefsymlink.1 $(DESTMAN) + + clean: +- rm -f derefsymlink derefsymlink.o ++ rm -f derefsymlink derefsymlink.o *~ *.00 bstats.log* +--- binstats-1.08.orig/binstats ++++ binstats-1.08/binstats +@@ -100,6 +100,7 @@ USEPATH=1 + # your system or ignore if USEPATH=1) + EXEDIR="/bin /usr/bin /usr/local/bin /sbin /usr/sbin /usr/local/sbin /usr/X11R6/bin /usr/games" + ++USEMANPATH=1 + # the list of directories where your man pages reside + MANDIR="/usr/man /usr/share/man /usr/X11R6/man /usr/local/man" + +@@ -135,6 +136,8 @@ LDDBB=0 # executable name missing for si + DEBUG=0 + # another debugging option, set to 0 to reuse old temp files + FILEOPS=1 ++# Debian checks? Set to 1 to skip Debian-specific checks ++NODEBIAN=0 + + #----------process command line arguments--------------- + CLI_USAGE=\ +@@ -143,7 +146,7 @@ CLI_USAGE=\ + [-l[ibraries]=\"/lib /usr/lib\"] + [-m[anuals]=\"/usr/man /usr/local/man\"] + [-p[ath]=\"/bin:/usr/bin:/usr/local/bin\"] +- [-t[emp]=/tmp] [-v[ersion]]" ++ [-t[emp]=/tmp] [-s[kip-debian] [-v[ersion]]" + + for CLI_OPT + do +@@ -162,8 +165,11 @@ do + -l*=*) USELDSOCONF=0 + DLIBDIR="$CLI_ARG" ;; + -m*=*) MANDIR="$CLI_ARG" ;; ++ -m*=*) USEMANPATH=0 ++ MANDIR="$CLI_ARG" ;; + -p*=*) PATH="$CLI_ARG" ;; + -t*=*) TMPDIR="$CLI_ARG" ;; ++ -s*=*) NODEBIAN=1 ;; + -v*) echo "binstats-$BSVER" + exit 0 ;; + *) echo "$CLI_USAGE" +@@ -177,10 +183,23 @@ if [ $USEPATH -eq 1 ]; then + EXEDIR=`echo $OLDPATH | tr : ' ' | sed s:\~:$HOME:g` + fi + ++if [ $USEMANPATH -eq 1 ];then ++ MANDIR=`manpath | tr : ' '` ++fi ++ + if [ $USELDSOCONF -eq 1 ]; then + # use /etc/ld.so.conf plus the two "trusted" locations +- LDSOCONF=`cat /etc/ld.so.conf | grep -v '^#' | xargs echo` ++ LDSOCONF=`cat /etc/ld.so.conf | grep -v '^#' | grep -v '^include ' | xargs echo` + DLIBDIR="/lib /usr/lib $LDSOCONF" ++ ++ # Handle includes in LDSOCONF ++ LDSOCONF_INC=`cat /etc/ld.so.conf | grep -v '^#' | grep '^include ' | sed -e 's/^include //' | xargs echo` ++ for file in `ls $LDSOCONF_INC 2>/dev/null`; do ++ if [ -e "$file" ]; then ++ LDSOCONF=`cat $file | grep -v '^#' | grep -v '^include ' | xargs echo` ++ DLIBDIR="$DLIBDIR $LDSOCONF" ++ fi ++ done + fi + + # ID number +@@ -188,52 +207,107 @@ PIDNO=$$ + + # name of temp log + BSLOGTMP=$BSLOG.$PIDNO ++# Create the files we are going to use ++# backup old log file ++if [ -f $BSLOG ]; then mv -f $BSLOG $BSLOG~; fi ++{ umask 066; touch $BSLOG; [ -e $BSLOGTMP ] && rm -f $BSLOGTMP; touch $BSLOGTMP ; } + + if [ $DEBUG -gt 0 ]; then +- TMPDIR=. ++ BINSDIR=. + PIDNO=00 + else +- TMPDIR=$TMPDIR/binstats.$PIDNO +- mkdir -m 700 $TMPDIR || exit 1 ++ BINSDIR=`mktemp -t -d binstats.XXXXXX` || { echo "$0: Cannot create temporary directory!" >&2; exit 1; } ++fi ++# tidy up ++if [ $DEBUG -eq 0 ]; then ++ trap " [ -d \"$BINSDIR\" ] && /bin/rm -rf -- \"$BINSDIR\"" 0 1 2 3 13 15 + fi +- + + # list of executables +-EXELIST=$TMPDIR/exelist.$PIDNO ++EXELIST=$BINSDIR/exelist.$PIDNO + # list of dynamic libraries +-DLIBLIST=$TMPDIR/dliblist.$PIDNO ++DLIBLIST=$BINSDIR/dliblist.$PIDNO + # list of man pages +-MANLIST=$TMPDIR/manlist.$PIDNO ++MANLIST=$BINSDIR/manlist.$PIDNO + # executable types +-EXEFILE=$TMPDIR/exefile.$PIDNO ++EXEFILE=$BINSDIR/exefile.$PIDNO + # list of dependent (used) libraries +-EXELIB=$TMPDIR/exelib.$PIDNO ++EXELIB=$BINSDIR/exelib.$PIDNO + # list of unused libraries +-DLIBUN=$TMPDIR/dlibun.$PIDNO ++DLIBUN=$BINSDIR/dlibun.$PIDNO ++# list of unused libraries with packages ++DLIBUNP=$BINSDIR/dlibunp.$PIDNO ++ ++# Unused library packages ++LIBPUN=$BINSDIR/libpun.$PIDNO ++# Package list ++PACKLIST=$BINSDIR/packlist.$PIDNO + + # temporary storage +-DTEMPA=$TMPDIR/dtempa.$PIDNO # all dynamic libs in $DLIBDIR +-DTEMPB=$TMPDIR/dtempb.$PIDNO # missing dynamic libs in $EXELIB +-DTEMPC=$TMPDIR/dtempc.$PIDNO # dereferenced list of $DTEMPA +- +-ETEMPA=$TMPDIR/etempa.$PIDNO # all files in $EXEDIR +-ETEMPB=$TMPDIR/etempb.$PIDNO # output of ldd on files in $EXEFILE +-ETEMPC=$TMPDIR/etempc.$PIDNO # statically linked binaries in $ETEMPB +-ETEMPD=$TMPDIR/etempd.$PIDNO # duplicate executable names in $ETEMPA +-ETEMPE=$TMPDIR/etempe.$PIDNO # 'not stripped' binaries in $EXEFILE +-ETEMPF=$TMPDIR/etempf.$PIDNO # setuid binaries in $EXEFILE ++DTEMPA=$BINSDIR/dtempa.$PIDNO # all dynamic libs in $DLIBDIR ++DTEMPB=$BINSDIR/dtempb.$PIDNO # missing dynamic libs in $EXELIB ++DTEMPC=$BINSDIR/dtempc.$PIDNO # dereferenced list of $DTEMPA ++ ++ETEMPA=$BINSDIR/etempa.$PIDNO # all files in $EXEDIR ++ETEMPB=$BINSDIR/etempb.$PIDNO # output of ldd on files in $EXEFILE ++ETEMPC=$BINSDIR/etempc.$PIDNO # statically linked binaries in $ETEMPB ++ETEMPD=$BINSDIR/etempd.$PIDNO # duplicate executable names in $ETEMPA ++ETEMPE=$BINSDIR/etempe.$PIDNO # 'not stripped' binaries in $EXEFILE ++ETEMPF=$BINSDIR/etempf.$PIDNO # setuid binaries in $EXEFILE + +-MTEMPA=$TMPDIR/mtempa.$PIDNO # all files in $MANDIR +-MTEMPB=$TMPDIR/mtempb.$PIDNO # duplicate executable names in $MTEMPA ++MTEMPA=$BINSDIR/mtempa.$PIDNO # all files in $MANDIR ++MTEMPB=$BINSDIR/mtempb.$PIDNO # duplicate executable names in $MTEMPA ++ ++# A wrapper around readlink(1). ++derefsymlink() ++{ ++ while [ $# -gt 0 ]; do ++ if [ "$1" = -f ]; then ++ shift ++ while read f; do ++ readlink -f "$f" || echo "$f" ++ done < "$1" ++ elif [ "$1" = -s ]; then ++ while read f; do ++ readlink -f "$f" || echo "$f" ++ done ++ else ++ readlink -f "$1" || echo "$1" ++ fi ++ shift ++ done ++} ++ ++isdebian() ++{ ++ if [ -e /etc/debian_version ] && [ "$NODEBIAN" -eq 0 ] ; then ++ return 0 ++ else ++ return 1 ++ fi ++} ++ ++# Abort gracefully if a file is missing ++check_aborted() ++{ ++ file=$1 ++ if [ ! -e "$file" ] ; then ++ echo "$0: Task aborted and missing temporary file ($file). Exiting. " >&2 ++ exit 1 ++ fi ++ return 0 ++} + + #----------begin program--------------- + if [ $FILEOPS -gt 0 ]; then + + echo "Look in $EXEDIR for executables" +-find $EXEDIR -perm +111 -maxdepth 1 -type f -follow -print | \ ++find $EXEDIR -perm /111 -maxdepth 1 -type f -follow -print 2>/dev/null| \ + derefsymlink -s | sort | uniq | \ + awk -F '/' '{ printf "%s:%s\n", $NF, $0 }' > $ETEMPA + ++check_aborted $ETEMPA ++ + echo "Find duplicated executable names" + # use an awk script instead of whereis later (as suggested by Preston Crow) + # R=repetition, N=name, P=path +@@ -247,27 +321,33 @@ sort -t ':' $ETEMPA | awk -F ':' \ + END { if (R==1) {printf("%s\n",P)} }' \ + > $ETEMPD + ++check_aborted $ETEMPD ++ + echo "Sort out list by alphabetical order" + sort -t ':' $ETEMPA | cut -d ':' -f 2- > $EXELIST + ++check_aborted $EXELIST ++ + echo "Find executable type (this will take a long time)" + cat $EXELIST | xargs file > $EXEFILE + ++check_aborted $EXEFILE ++ + echo "Look for dynamic library dependence (this will take an even longer time)" + # hmm, ldd (1.7.14) seems to output some unprintable character when it + # encounters a static a.out image + # And ldd (1.9.2) prints some hex numbers after library name in parentheses + if [ $LDDBA -eq 0 ]; then + grep 'executable' $EXEFILE | cut -d ':' -f 1 | \ +- xargs ldd | col -b | cut -d '(' -f 1 >& $ETEMPB ++ xargs ldd 2>/dev/null | col -b | cut -d '(' -f 1 >& $ETEMPB + else + grep 'executable' $EXEFILE | cut -d ':' -f 1 | \ +- xargs ldd | awk cut -d '(' -f 1 >& $ETEMPB ++ xargs ldd 2>/dev/null | awk cut -d '(' -f 1 >& $ETEMPB + fi + + echo "List the used dynamic libraries" + grep 'lib[^:]*\.so' $ETEMPB | sort -b | uniq -c > $EXELIB +-grep 'statically linked' $ETEMPB > $ETEMPC ++grep 'statically linked' $EXEFILE > $ETEMPC + + echo "Hunt down binaries that depend on missing libraries" + awk \ +@@ -275,18 +355,61 @@ awk \ + /not found/ { if (NEW == 1) print CURPROG; NEW = 0 }' \ + $ETEMPB > $DTEMPB + ++check_aborted $DTEMPB ++ + echo "Look in $DLIBDIR for dynamic libraries" + find $DLIBDIR -maxdepth 1 -type f -name 'lib*.so*' | \ + derefsymlink -s | sort | uniq > $DLIBLIST + ++check_aborted $DLIBLIST ++ + echo "Search for unused dynamic libraries" + grep -v 'not found' $EXELIB | cut -d '/' -f 2- | cut -d ' ' -f 1 | \ + sort | uniq | sed 's,^,/,g' > $DTEMPA + ++check_aborted $DTEMPA ++ + derefsymlink -f $DTEMPA | sort | uniq > $DTEMPC + ++check_aborted $DTEMPC ++ + diff -du $DLIBLIST $DTEMPC | grep '^-/' | cut -b 2- > $DLIBUN + ++check_aborted $DLIBUN ++ ++# If this is a Debian system, add the packages in too ++if isdebian ; then ++ echo "Search for packages holding unused dynamic libraries" ++ >$PACKLIST ++ >$DLIBUNP ++ cat $DLIBUN | ++ while read file; do ++ package=`dpkg -S $file 2>/dev/null | cut -f 1 -d :` ++ if [ -n "$package" ] ; then ++ echo $package >>$PACKLIST ++ echo "$file ($package)" >>$DLIBUNP ++ else ++ echo "$file" >>$DLIBUNP ++ fi ++ done ++ echo "Reviewing packages holding unused dynamic libraries" ++ cat $PACKLIST | sort -u | ++ while read package ; do ++ # TODO, could be done on packages that begin with 'lib' ++ unused=1 ++ for library in `dpkg -L $package |grep lib/`; do ++ if [ -z "`grep ^$library\$ $DLIBUN`" ] ; then ++ unused=0 ++ break ++ fi ++ done ++ if [ $unused -eq 1 ] ; then ++ echo "$package" >>$LIBPUN ++ fi ++ done ++fi ++ ++ + echo "Find un-stripped binaries" + grep 'not stripped' $EXEFILE | sort > $ETEMPE + +@@ -300,6 +423,8 @@ find $MANDIR -maxdepth 2 -type f -follow + derefsymlink -s | sort | uniq | \ + awk -F '/' '{ printf "%s;%s\n", $NF, $0 }' > $MTEMPA + ++check_aborted $MTEMPA ++ + echo "Find duplicated man page names" + sort -t ';' $MTEMPA | awk -F ';' \ + 'BEGIN { R=0;N="";P="" } +@@ -311,6 +436,8 @@ sort -t ';' $MTEMPA | awk -F ';' \ + END { if (R==1) {printf("%s\n",P)} }' \ + > $MTEMPB + ++check_aborted $MTEMPB ++ + + # finish messing around with files and lists of files + # now work out some numbers +@@ -325,6 +452,7 @@ ECOFFC=`grep 'ECOFF.*executable' $EXEFIL + JAVAC=`grep 'Java bytecode' $EXEFILE | wc -l` + LIBC=`cat $EXELIB | wc -l` + UNLIBC=`cat $DLIBUN | wc -l` ++LIBPUNC=`cat $LIBPUN | wc -l` + DLLIBC=`grep 'DLL' $EXELIB | wc -l` + SELFC=`grep 'ELF' $ETEMPC | wc -l` + SECOFFC=`grep 'ECOFF' $ETEMPC | wc -l` +@@ -405,6 +533,9 @@ fi + echo "Used libraries: $LIBC" >> $BSLOGTMP + echo " DLL: $DLLIBC" >> $BSLOGTMP + echo "Unused libs: $UNLIBC" >> $BSLOGTMP ++if isdebian ; then ++echo "Packages with unused libs: $LIBPUNC" >> $BSLOGTMP ++fi + echo "Man pages: $MANC" >> $BSLOGTMP + echo " Duplicate names: $MANDUPC" >> $BSLOGTMP + +@@ -470,8 +601,7 @@ fi + DOTLINE=0 + if [ $SELFC -gt 0 ]; then + echo "statically linked (ELF):" >> $BSLOGTMP +- grep -B 1 'statically linked (ELF)' $ETEMPB | grep '^/' | \ +- cut -d ':' -f 1 >> $BSLOGTMP ++ grep 'ELF' $ETEMPC | cut -d ':' -f 1 >> $BSLOGTMP + DOTLINE=1 + fi + if [ $ELFUNSTR -gt 0 ]; then +@@ -571,7 +701,18 @@ grep -v 'DLL' $EXELIB >> $BSLOGTMP + if [ $UNLIBC -gt 0 ]; then + echo "--------------------------------------------------------------" >> $BSLOGTMP + echo "unused:" >> $BSLOGTMP +- cat $DLIBUN >> $BSLOGTMP ++ if isdebian ; then ++ cat $DLIBUNP >> $BSLOGTMP ++ else ++ cat $DLIBUN >> $BSLOGTMP ++ fi ++fi ++echo "==============================================================" >> $BSLOGTMP ++if isdebian && [ $LIBPUNC -gt 0 ]; then ++ echo "PACKAGES:" >> $BSLOGTMP ++ echo "--------------------------------------------------------------" >> $BSLOGTMP ++ echo "with all libraries unused:" >> $BSLOGTMP ++ cat $LIBPUN >> $BSLOGTMP + fi + echo "==============================================================" >> $BSLOGTMP + if [ $MANDUPC -gt 0 ]; then +@@ -580,8 +721,6 @@ if [ $MANDUPC -gt 0 ]; then + echo "==============================================================" >> $BSLOGTMP + fi + +-# backup old log file +-if [ -f $BSLOG ]; then mv -f $BSLOG $BSLOG~; fi + # filter through sed to beautify (note the embedded TAB) + sed -e 's,^/\(.*[^:]\)$, /\1,g' $BSLOGTMP > $BSLOG + rm -f $BSLOGTMP +@@ -638,10 +777,6 @@ echo "Unused libs: $UNLIBC" + echo "Man pages: $MANC" + echo " Duplicate names: $MANDUPC" + +-# tidy up +-if [ $DEBUG -eq 0 ]; then +- rm -rf $TMPDIR +-fi + + echo "==============================================================" + echo "More detailed information can be obtained in $BSLOG" +--- binstats-1.08.orig/binstats.1 ++++ binstats-1.08/binstats.1 +@@ -6,6 +6,7 @@ binstats \- display statistics about pro + .RB [ -b [ inaries ]\c + .RI = bindirs ] + .RB [ -d [ ebug ]] ++.RB [ -s [ kip-debian ] + .RB [ -f [ ile ]\c + .RI = logfile ] + .RB [ -l [ ibraries ]\c +@@ -33,6 +34,10 @@ be searched for. + Store temporary files in the current directory and do not remove them when + finished. + .TP ++.B -skip-debian ++Skip Debian tests that analyse installed packages even if this is a ++Debian system. ++.TP + .BI -file " logfile" + Output report to + .I logfile diff -Nru binstats-1.08/debian/patches/series binstats-1.08/debian/patches/series --- binstats-1.08/debian/patches/series 1970-01-01 00:00:00.000000000 +0000 +++ binstats-1.08/debian/patches/series 2024-02-18 16:19:50.000000000 +0000 @@ -0,0 +1 @@ +debian.patch diff -Nru binstats-1.08/debian/source/format binstats-1.08/debian/source/format --- binstats-1.08/debian/source/format 2024-02-18 16:23:57.000000000 +0000 +++ binstats-1.08/debian/source/format 2024-02-18 16:19:50.000000000 +0000 @@ -1 +1 @@ -1.0 +3.0 (quilt)