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

Reply via email to