Hello folks, I ran into #249435 while building a debugging package for one of my packages and decided to take some time to fix it.
This is the largest patch I've written for lintian so far and it includes a new test suite package, so I'd rather someone else look it over before I just commit it. Could someone take a look when you get a chance and let me know if it's sane? Thanks! Index: debian/changelog =================================================================== --- debian/changelog (revision 561) +++ debian/changelog (working copy) @@ -1,5 +1,9 @@ lintian (1.23.16) UNRELEASED; urgency=low + * checks/binaries{.desc,}: + + [RA] Add a check for the new "Invalid operation" error from + objdump -T. Skip shared-lib-without-dependency-information for + files in /usr/lib/debug. * checks/changelog-file: + [FL] Add line number to output of wrong-bug-number-in-closes. Inspired by #349761 from Steinar H. Gunderson. @@ -28,6 +32,10 @@ + [JvW] Fix postinst-must-call-ldconfig to also get emitted when there is no postinst at all, instead of just one lacking a ldconfig call + * collection/objdump-info: + + [RA] Pass "Invalid operation" errors from objdump -T on to the check + scripts instead of failing. (Closes: #249435) + * testset/runtests: + [RA] Filter out dpkg-source warnings about unsigned source packages. Index: checks/binaries =================================================================== --- checks/binaries (revision 560) +++ checks/binaries (working copy) @@ -106,6 +106,8 @@ fail("file format not recognized for $1\nif you are checking non-i386 binaries, you'll need to install binutils-multiarch\n"); } elsif (m/^objdump: \.(.*?): Packed with UPX$/) { tag "binary-file-compressed-with-upx", "$1"; + } elsif (m/^objdump: \.(.*?): Invalid operation$/) { + tag "binary-with-bad-dynamic-table", "$file" unless $file =~ m%^\./usr/lib/debug/%; } elsif (m/CXXABI/) { $CXXABI{$file} = 1; } @@ -219,7 +221,7 @@ my %libc5_binary; my @needed; if (!exists($NEEDED{$file}) && !defined($NEEDED{$file})) { - if ($info =~ m/shared object/o) { + if ($info =~ m/shared object/o && $file !~ m#^\./usr/lib/debug/#) { tag "shared-lib-without-dependency-information", "$file"; } else { # Some exceptions: files in /boot, /usr/lib/debug/*, named *-static or Index: checks/binaries.desc =================================================================== --- checks/binaries.desc (revision 560) +++ checks/binaries.desc (working copy) @@ -139,3 +139,9 @@ . $ objdump -p /path/to/libfoo-bar.so.1.2.3 | sed -n -e's/^[[:space:]]*SONAME[[:space:]]*//p' | sed -e's/\([0-9]\)\.so\./\1-/; s/\.so\.//' Ref: Library Packaging guide 5 + +Tag: binary-with-bad-dynamic-table +Type: error +Info: This appears to be an ELF file but objdump -T cannot parse it. + If it is external debugging symbols for another file, it should be + installed under /usr/lib/debug. Index: collection/objdump-info =================================================================== --- collection/objdump-info (revision 560) +++ collection/objdump-info (working copy) @@ -46,7 +46,19 @@ if head $bin | grep -q 'packed.*with.*UPX'; then echo "objdump: $bin: Packed with UPX" >> ../objdump-info else - objdump --headers --private-headers -T $bin >> ../objdump-info 2>&1 + if objdump --headers --private-headers -T $bin >> ../objdump-info 2>&1 ; then + # everything is ok + : + else + # If the objdump error is "Invalid operation", we handle it later + # in the check script, since this is the expected output (for now) + # on detached debugging information in /usr/lib/debug. + if objdump -T $bin 2>&1 | grep -q 'Invalid operation$' ; then + : + else + exit 1 + fi + fi fi done Index: testset/tags.debug =================================================================== --- testset/tags.debug (revision 0) +++ testset/tags.debug (revision 0) @@ -0,0 +1,7 @@ +E: hello: statically-linked-binary ./usr/bin/hello.dbg +E: hello: unstripped-binary-or-object ./usr/bin/hello.dbg +E: libhello0-dbg: binary-with-bad-dynamic-table ./usr/lib/libhello.so.dbg +E: libhello0-dbg: sharedobject-in-library-directory-not-actually-a-shlib usr/lib/libhello.so.dbg +W: hello: binary-without-manpage hello +W: hello: binary-without-manpage hello.dbg +W: libhello0-dbg: shared-lib-without-dependency-information ./usr/lib/libhello.so.dbg Index: testset/debug/libhello.h =================================================================== --- testset/debug/libhello.h (revision 0) +++ testset/debug/libhello.h (revision 0) @@ -0,0 +1 @@ +void hello(void); Index: testset/debug/debian/control =================================================================== --- testset/debug/debian/control (revision 0) +++ testset/debug/debian/control (revision 0) @@ -0,0 +1,34 @@ +Source: debug +Section: utils +Priority: optional +Maintainer: Russ Allbery <[EMAIL PROTECTED]> +Build-Depends: debhelper (>= 5.0.0) +Standards-Version: 3.6.2 + +Package: hello +Architecture: any +Depends: ${shlibs:Depends}, ${misc:Depends} +Description: Test for external debugging information + lintian regression test for external debugging file handling. + +Package: hello-dbg +Priority: extra +Architecture: any +Depends: hello (= ${Source-Version}), ${shlibs:Depends}, ${misc:Depends} +Description: Test for external debugging information + lintian regression test for external debugging file handling. + +Package: libhello0 +Section: libs +Architecture: any +Depends: ${shlibs:Depends}, ${misc:Depends} +Description: Test for external debugging information + lintian regression test for external debugging file handling. + +Package: libhello0-dbg +Section: libdevel +Priority: extra +Architecture: any +Depends: libhello (= ${Source-Version}), ${shlibs:Depends}, ${misc:Depends} +Description: Test for external debugging information + lintian regression test for external debugging file handling. Index: testset/debug/debian/changelog =================================================================== --- testset/debug/debian/changelog (revision 0) +++ testset/debug/debian/changelog (revision 0) @@ -0,0 +1,6 @@ +debug (1.0) unstable; urgency=low + + * Initial version. + + -- Russ Allbery <[EMAIL PROTECTED]> Sat, 4 Mar 2006 21:31:06 -0800 + Index: testset/debug/debian/copyright =================================================================== --- testset/debug/debian/copyright (revision 0) +++ testset/debug/debian/copyright (revision 0) @@ -0,0 +1 @@ +Written Sat, 04 Mar 2006 21:30:01 -0800 by Russ Allbery <[EMAIL PROTECTED]>. Index: testset/debug/debian/rules =================================================================== --- testset/debug/debian/rules (revision 0) +++ testset/debug/debian/rules (revision 0) @@ -0,0 +1,62 @@ +#!/usr/bin/make -f +# Sample debian/rules that uses debhelper. +# This file is public domain software, originally written by Joey Hess. + +export DH_COMPAT := 5 + +build: build-stamp +build-stamp: + dh_testdir + gcc -D_REENTRANT -fPIC -c libhello.c + gcc -o libhello.so.0.0 -shared -Wl,-soname,libhello.so.0 libhello.o + ln -s libhello.so.0.0 libhello.so + gcc -o hello hello.c -L. -lhello + touch build-stamp + +clean: + dh_testdir + dh_testroot + rm -f build-stamp *.o libhello.so.0.0 + dh_clean + +install: build-stamp + dh_testdir + dh_testroot + dh_clean -k + install -D hello $(CURDIR)/debian/hello/usr/bin/hello + install -D libhello.so.0.0 \ + $(CURDIR)/debian/libhello0/usr/lib/libhello.so.0.0 + ln -s libhello.so.0.0 \ + $(CURDIR)/debian/libhello0/usr/lib/libhello.so.0 + +# Build architecture-dependent files here. +export DH_OPTIONS +binary-arch: DH_OPTIONS=-a +binary-arch: build-stamp install + dh_testdir + dh_testroot + dh_installchangelogs + dh_installdocs + DH_OPTIONS= dh_strip -phello --dbg-package=hello-dbg + DH_OPTIONS= dh_strip -plibhello0 --dbg-package=libhello0-dbg + + # Now break a few things. Copy the debugging data into places it + # shouldn't be. + cp $(CURDIR)/debian/hello-dbg/usr/lib/debug/usr/bin/hello \ + $(CURDIR)/debian/hello/usr/bin/hello.dbg + cp $(CURDIR)/debian/libhello0-dbg/usr/lib/debug/usr/lib/libhello.so.0.0 \ + $(CURDIR)/debian/libhello0-dbg/usr/lib/libhello.so.dbg + + dh_link + dh_compress + dh_fixperms + dh_makeshlibs + dh_installdeb + dh_shlibdeps + dh_gencontrol + dh_md5sums + dh_builddeb + +binary-indep: +binary: binary-indep binary-arch +.PHONY: binary binary-indep binary-arch build clean install Property changes on: testset/debug/debian/rules ___________________________________________________________________ Name: svn:executable + * Index: testset/debug/hello.c =================================================================== --- testset/debug/hello.c (revision 0) +++ testset/debug/hello.c (revision 0) @@ -0,0 +1,9 @@ +#include <stdlib.h> +#include "libhello.h" + +int +main(void) +{ + hello(); + exit(0); +} Index: testset/debug/libhello.c =================================================================== --- testset/debug/libhello.c (revision 0) +++ testset/debug/libhello.c (revision 0) @@ -0,0 +1,7 @@ +#include <stdio.h> + +void +hello(void) +{ + printf("Hello, World!\n"); +} -- Russ Allbery ([EMAIL PROTECTED]) <http://www.eyrie.org/~eagle/> -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]