This is an automated email from the git hooks/post-receive script. broucaries-guest pushed a commit to branch master in repository lintian.
commit 978b7cce1dedbad6b4a3aeebcf9c3535aeeecb6b Author: Bastien ROUCARIÈS <roucaries.bastien+deb...@gmail.com> Date: Sat Jan 2 21:48:24 2016 +0100 Check for old config file and multi-arch Signed-off-by: Bastien ROUCARIÈS <roucaries.bastien+deb...@gmail.com> --- checks/files.desc | 37 +++++++++++++++++++ checks/files.pm | 41 ++++++++++++++++++++++ t/tests/files-old-config-script/debian/Makefile | 18 ++++++++++ .../debian/debian/config-ma-foreign.install | 1 + .../debian/debian/config-ma-no.install | 1 + .../debian/debian/control.in | 28 +++++++++++++++ .../debian/generated/arch-cross-foreign-config.in | 3 ++ .../debian/generated/arch-cross-no-config.in | 3 ++ .../debian/generated/arch-foreign-config.in | 2 ++ .../debian/generated/arch-no-config.in | 2 ++ t/tests/files-old-config-script/desc | 8 +++++ t/tests/files-old-config-script/post_test | 2 ++ t/tests/files-old-config-script/tags | 10 ++++++ 13 files changed, 156 insertions(+) diff --git a/checks/files.desc b/checks/files.desc index 808606d..02e064c 100644 --- a/checks/files.desc +++ b/checks/files.desc @@ -661,6 +661,43 @@ Info: Lintian overrides should be put in a regular file named format. Ref: lintian 2.4 +Tag: old-style-config-script +Severity: pedantic +Certainty: possible +Info: The following file is a old style config file, used + used to retrieve information about installed libraries in the system. + It is typically used to compile and link against one or more libraries. + . + Using this kind of system to pass compile file is obsolete and + will likely introduce bugs in a multi-arch system. Particularly, + this kind of script could only belong to Multi-Arch: no + package. + . + You should consider to move to pkg-config file and + warn your user to not use this script, and open a bug upstream. + . + You should also consider to implement this file as a compatibility + wrapper over pkg-config. + . + After fixing every reverse depends of your package and use + pkg-config reverse depends makefile, you should + consider to put this script, as a temporarly convenience of your users, + under /usr/lib/$DEB_HOST_MULTIARCH/$PACKAGE/bin where + $DEB_HOST_MULTIARCH is the multi-arch triplet and $PACKAGE is the + package name. You should also consider to add a NEWS.Debian entry. +Ref: pkg-config(1), + http://sources.debian.net/src/imagemagick/8:6.8.9.9-6/debian/NEWS/ + +Tag: old-style-config-script-multiarch-path +Severity: serious +Certainty: possible +Info: The following file is a old style config file, used + used to retrieve information about installed libraries in the system. + It is typically used to compile and link against one or more libraries. + . + This old style config file contains a multi-arch path and the package + is not Multi-arch: no. + Tag: package-contains-upstream-install-documentation Severity: normal Certainty: possible diff --git a/checks/files.pm b/checks/files.pm index 96024fe..97e5191 100644 --- a/checks/files.pm +++ b/checks/files.pm @@ -827,6 +827,47 @@ sub run { and $fname !~ m,^usr/bin/(?:X11|mh)/,) { tag 'subdir-in-usr-bin', $file; } + # check old style config script + elsif ($file->is_regular_file + && $fname =~ m,-config$,) { + if ($script{$file}) { + # try to find some indication of + # config file (read only one block) + my $fd = $file->open(':raw'); + my $sfd = Lintian::SlidingWindow->new($fd); + my $block = $sfd->readwindow(); + if ($block) { + # some common stuff found in config file + if ( index($block,'flag')>-1 + or index($block,'/include/') > -1 + or index($block,'pkg-config') > -1) { + # ok old config style script tag it + tag 'old-style-config-script',$file; + my $multiarch = $info->field('multi-arch',''); + # could be ok but only if multi-arch: no + unless($multiarch eq 'no') { + # check multi-arch path + foreach my $arch ($MULTIARCH_DIRS->all) { + my $madir + = $MULTIARCH_DIRS->value($arch); + if ($block =~ m{\W\Q$madir\E(\W|$)}xms) + { + #<<< No perltidy - tag name too long + tag + 'old-style-config-script-multiarch-path', + $file, + 'full text contains architecture specific dir', + $madir; + #>>> + last; + } + } + } + } + } + close($fd); + } + } } # ---------------- /usr subdirs elsif ($type ne 'udeb' and $fname =~ m,^usr/[^/]+/$,) diff --git a/t/tests/files-old-config-script/debian/Makefile b/t/tests/files-old-config-script/debian/Makefile new file mode 100644 index 0000000..5026efd --- /dev/null +++ b/t/tests/files-old-config-script/debian/Makefile @@ -0,0 +1,18 @@ +ARCH=$(shell dpkg-architecture -qDEB_HOST_MULTIARCH) +ifeq ($(ARCH), x86_64-linux-gnu) + ARCH_CROSS=i386-linux-gnu +else + ARCH_CROSS=x86_64-linux-gnu +endif + +all: + find generated -name '*-config.in' -exec sh -c 'echo "build" {} && cat {} | sed s/\$$\(ARCH\)/$(ARCH)/g | sed s/\$$\(ARCH_CROSS\)/$(ARCH_CROSS)/g > `echo {} | sed s/\-config\.in$$/\-config/g`' \; + +install: + install -d $(DESTDIR)/usr/bin + install -m 755 generated/*-config $(DESTDIR)/usr/bin + +clean distclean: + rm -f generated/*.config + +check test: diff --git a/t/tests/files-old-config-script/debian/debian/config-ma-foreign.install b/t/tests/files-old-config-script/debian/debian/config-ma-foreign.install new file mode 100644 index 0000000..156218d --- /dev/null +++ b/t/tests/files-old-config-script/debian/debian/config-ma-foreign.install @@ -0,0 +1 @@ +usr/bin/*-foreign-config diff --git a/t/tests/files-old-config-script/debian/debian/config-ma-no.install b/t/tests/files-old-config-script/debian/debian/config-ma-no.install new file mode 100644 index 0000000..a3a2d45 --- /dev/null +++ b/t/tests/files-old-config-script/debian/debian/config-ma-no.install @@ -0,0 +1 @@ +usr/bin/*-no-config diff --git a/t/tests/files-old-config-script/debian/debian/control.in b/t/tests/files-old-config-script/debian/debian/control.in new file mode 100644 index 0000000..4da8a79 --- /dev/null +++ b/t/tests/files-old-config-script/debian/debian/control.in @@ -0,0 +1,28 @@ +Source: {$source} +Priority: extra +Section: devel +Maintainer: {$author} +Standards-Version: {$standards_version} +Build-Depends: debhelper (>= 9) + +Package: config-ma-no +Architecture: all +Depends: $\{misc:Depends\}, $\{shlib:Depends\} +Multi-arch: no +Description: Contains config test file no + This is a test package designed to exercise some feature or tag of + Lintian for arch all pkgconfig files. + It is part of the Lintian test suite and may do very odd + things. It should not be installed like a regular package. It may + be an empty package. + +Package: config-ma-foreign +Architecture: all +Multi-arch: foreign +Depends: $\{misc:Depends\}, $\{shlib:Depends\} +Description: Contains config test file foreign + This is a test package designed to exercise some feature or tag of + Lintian for arch any pkgconfig files. + It is part of the Lintian test suite and may do very odd + things. It should not be installed like a regular package. It may + be an empty package. diff --git a/t/tests/files-old-config-script/debian/generated/arch-cross-foreign-config.in b/t/tests/files-old-config-script/debian/generated/arch-cross-foreign-config.in new file mode 100644 index 0000000..665922b --- /dev/null +++ b/t/tests/files-old-config-script/debian/generated/arch-cross-foreign-config.in @@ -0,0 +1,3 @@ +#!/bin/sh +echo "-I/usr/include/$(ARCH_CROSS)/someconfig.h" + diff --git a/t/tests/files-old-config-script/debian/generated/arch-cross-no-config.in b/t/tests/files-old-config-script/debian/generated/arch-cross-no-config.in new file mode 100644 index 0000000..665922b --- /dev/null +++ b/t/tests/files-old-config-script/debian/generated/arch-cross-no-config.in @@ -0,0 +1,3 @@ +#!/bin/sh +echo "-I/usr/include/$(ARCH_CROSS)/someconfig.h" + diff --git a/t/tests/files-old-config-script/debian/generated/arch-foreign-config.in b/t/tests/files-old-config-script/debian/generated/arch-foreign-config.in new file mode 100644 index 0000000..9d7a85c --- /dev/null +++ b/t/tests/files-old-config-script/debian/generated/arch-foreign-config.in @@ -0,0 +1,2 @@ +#!/bin/bash +echo "-I/usr/include/$(ARCH)/arch-include-arch" diff --git a/t/tests/files-old-config-script/debian/generated/arch-no-config.in b/t/tests/files-old-config-script/debian/generated/arch-no-config.in new file mode 100644 index 0000000..9d7a85c --- /dev/null +++ b/t/tests/files-old-config-script/debian/generated/arch-no-config.in @@ -0,0 +1,2 @@ +#!/bin/bash +echo "-I/usr/include/$(ARCH)/arch-include-arch" diff --git a/t/tests/files-old-config-script/desc b/t/tests/files-old-config-script/desc new file mode 100644 index 0000000..a5b7052 --- /dev/null +++ b/t/tests/files-old-config-script/desc @@ -0,0 +1,8 @@ +Testname: files-old-config-script +Sequence: 6000 +Version: 1.0 +Description: Check for detection of old style config script +Options: --pedantic -I -E +Test-For: + old-style-config-script + old-style-config-script-multiarch-path diff --git a/t/tests/files-old-config-script/post_test b/t/tests/files-old-config-script/post_test new file mode 100644 index 0000000..006ffa0 --- /dev/null +++ b/t/tests/files-old-config-script/post_test @@ -0,0 +1,2 @@ +s/full text contains architecture specific dir \S+$/full text contains architecture specific dir ARCH/ +s, usr/lib/[^/]+/, usr/lib/ARCH/, diff --git a/t/tests/files-old-config-script/tags b/t/tests/files-old-config-script/tags new file mode 100644 index 0000000..67fbe68 --- /dev/null +++ b/t/tests/files-old-config-script/tags @@ -0,0 +1,10 @@ +E: config-ma-foreign: old-style-config-script-multiarch-path usr/bin/arch-cross-foreign-config full text contains architecture specific dir ARCH +E: config-ma-foreign: old-style-config-script-multiarch-path usr/bin/arch-foreign-config full text contains architecture specific dir ARCH +P: config-ma-foreign: old-style-config-script usr/bin/arch-cross-foreign-config +P: config-ma-foreign: old-style-config-script usr/bin/arch-foreign-config +P: config-ma-no: old-style-config-script usr/bin/arch-cross-no-config +P: config-ma-no: old-style-config-script usr/bin/arch-no-config +W: config-ma-foreign: binary-without-manpage usr/bin/arch-cross-foreign-config +W: config-ma-foreign: binary-without-manpage usr/bin/arch-foreign-config +W: config-ma-no: binary-without-manpage usr/bin/arch-cross-no-config +W: config-ma-no: binary-without-manpage usr/bin/arch-no-config -- Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/lintian/lintian.git