We need to use re.search() rather than re.match() most of the time in this rule. Also simplify it, add some more architectures to look for, and update the tests accordingly so they are actually correct and match what the rule is trying to do. Signed-off-by: Dan McGee <dan@archlinux.org> --- Namcap/rules/carch.py | 18 ++++++++-------- Namcap/tests/pkgbuild/test_carch.py | 38 +++++++++++++++++++++++----------- namcap-tags | 2 +- 3 files changed, 36 insertions(+), 22 deletions(-) diff --git a/Namcap/rules/carch.py b/Namcap/rules/carch.py index 0469460..7cb3319 100644 --- a/Namcap/rules/carch.py +++ b/Namcap/rules/carch.py @@ -26,15 +26,15 @@ class package(PkgbuildRule): name = "carch" description = "Verifies that no specific host type is used" def analyze(self, pkginfo, tar): - arches = ['i686', 'i586', 'x86_64'] - archmatch = re.compile('%s' % '|'.join(arches)) + arches = ['arm', 'i586', 'i686', 'ppc', 'x86_64'] + archmatch = re.compile(r'\b(%s)\b' % '|'.join(arches)) # Match an arch=(i686) line - archline = re.compile('arch=\w*(%s)' % '|'.join(arches)) - # Match a [ "$CARCH" = "x86_64" ] line - archif = re.compile('''\[\s*("|')\$CARCH("|').*("|')(%s)("|')\s*\]''' % '|'.join(arches)) - for i in pkginfo.pkgbuild: - if archmatch.match(i): - if not archline.match(i) and not archif.match(i): - self.warnings.append(("specific-host-type-used %s", ",".join(arches))) + archline = re.compile(r'\w*arch=') + for line in pkginfo.pkgbuild: + # strip any comments + line = line.split('#')[0] + match = archmatch.search(line) + if match and not archline.match(line) and not '$CARCH' in line: + self.warnings.append(("specific-host-type-used %s", match.group(1))) # vim: set ts=4 sw=4 noet: diff --git a/Namcap/tests/pkgbuild/test_carch.py b/Namcap/tests/pkgbuild/test_carch.py index 1ec8597..2d95b81 100644 --- a/Namcap/tests/pkgbuild/test_carch.py +++ b/Namcap/tests/pkgbuild/test_carch.py @@ -25,24 +25,32 @@ import Namcap.rules.carch as module class NamcapSpecialArchTest(PkgbuildTest): pkgbuild1 = """ -# Maintainer: Arch Linux <archlinux@example.com> -# Contributor: Arch Linux <archlinux@example.com> +pkgname=mypackage +pkgver=1.0 +pkgrel=1 +pkgdesc="A package" +arch=('i686') + +build() { + cd "${srcdir}"/${pkgname}-${pkgver} + [[ $CARCH == x86_64 ]] && CFLAGS+="-m64" + [ '$CARCH' = 'i686' ] && CFLAGS+="-m32" + ./configure --prefix=/usr + make +} +""" + pkgbuild2 = """ pkgname=mypackage pkgver=1.0 pkgrel=1 pkgdesc="A package" arch=('i686') -url="http://www.example.com/" -license=('GPL') -depends=('glibc') -options=('!libtool') -source=(ftp://ftp.example.com/pub/mypackage-0.1.tar.gz) -md5sums=('abcdefabcdef12345678901234567890') build() { cd "${srcdir}"/${pkgname}-${pkgver} - [[ $CARCH == x86_64 ]] && CFLAGS+="-m32" + [[ $CARCH == x86_64 ]] && CFLAGS+="-m64" + [ '$CARCH' = 'i686' ] && CFLAGS+="-m32" ./configure --prefix=/usr make } @@ -51,6 +59,7 @@ package() { cd "${srcdir}"/${pkgname}-${pkgver} ./configure --prefix=/usr make DESTDIR="${pkgdir}" install + cp foobar /usr/lib/i686/pkg/ } """ @@ -59,12 +68,17 @@ package() { def preSetUp(self): self.rule = module.package - @unittest.expectedFailure def test_example1(self): - # Example 1 r = self.run_on_pkg(self.pkgbuild1) self.assertEqual(r.errors, []) - self.assertEqual(r.warnings, ("specific-host-type-used %s", "i686")) + self.assertEqual(r.warnings, []) self.assertEqual(r.infos, []) + def test_example2(self): + r = self.run_on_pkg(self.pkgbuild2) + self.assertEqual(r.errors, []) + self.assertEqual(r.warnings, [("specific-host-type-used %s", "i686")]) + self.assertEqual(r.infos, []) + + # vim: set ts=4 sw=4 noet: diff --git a/namcap-tags b/namcap-tags index 46ef2a0..a342590 100644 --- a/namcap-tags +++ b/namcap-tags @@ -66,7 +66,7 @@ potential-non-fhs-info-page %s :: Potential non-FHS info page (%s) found. potential-non-fhs-man-page %s :: Potential non-FHS man page (%s) found. script-link-detected %s in %s :: Script link detected (%s) in file %s scrollkeeper-dir-exists %s :: Scrollkeeper directory exists (%s). Remember to not run scrollkeeper till post_{install,upgrade,remove}. -specific-host-type-used %s :: Reference to one of %s should be changed to $CARCH +specific-host-type-used %s :: Reference to %s should be changed to $CARCH specific-sourceforge-mirror :: Attempting to use specific sourceforge mirror, use downloads.sourceforge.net instead symlink-found %s points to %s :: Symlink (%s) found that points to %s too-many-checksums %s %i needed :: Too many %s: %i needed -- 1.7.5.2