forked from pool/rpmlint
This commit is contained in:
parent
b6e725ef80
commit
be02ab9e01
@ -525,7 +525,7 @@ class LibraryPolicyCheck(AbstractCheck.AbstractCheck):
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
std_dirs = dirs.intersection(('/lib', '/lib64', '/usr/lib', '/usr/lib64',
|
std_dirs = dirs.intersection(('/lib', '/lib64', '/usr/lib', '/usr/lib64',
|
||||||
'/opt/kde3/lib'))
|
'/opt/kde3/lib', '/opt/kde3/lib64'))
|
||||||
|
|
||||||
non_std_dirs = dirs.difference(std_dirs)
|
non_std_dirs = dirs.difference(std_dirs)
|
||||||
|
|
||||||
@ -542,6 +542,8 @@ class LibraryPolicyCheck(AbstractCheck.AbstractCheck):
|
|||||||
if std_lib_package:
|
if std_lib_package:
|
||||||
for lib in libs.copy():
|
for lib in libs.copy():
|
||||||
lib_dir = libs_to_dir[lib]
|
lib_dir = libs_to_dir[lib]
|
||||||
|
if lib_dir.startswith("/opt/kde3"):
|
||||||
|
continue
|
||||||
for lib_part in lib_dir.split('/'):
|
for lib_part in lib_dir.split('/'):
|
||||||
if len(lib_part) == 0:
|
if len(lib_part) == 0:
|
||||||
continue
|
continue
|
||||||
|
@ -1,40 +0,0 @@
|
|||||||
--- SpecCheck.py
|
|
||||||
+++ SpecCheck.py
|
|
||||||
@@ -24,8 +24,8 @@
|
|
||||||
DEFAULT_HARDCODED_LIB_PATH_EXCEPTIONS = '/lib/(modules|cpp|perl5|rpm|hotplug|firmware)($|[\s/,])'
|
|
||||||
|
|
||||||
patch_regex = re.compile("^Patch(\d*)\s*:\s*([^\s]+)", re.IGNORECASE)
|
|
||||||
-# TODO: http://rpmlint.zarb.org/cgi-bin/trac.cgi/ticket/59
|
|
||||||
-applied_patch_regex = re.compile("^%patch.*-P\s+(\d+)|^%patch(\d*)\s")
|
|
||||||
+applied_patch_regex = re.compile("^\s*%patch(\d*)")
|
|
||||||
+applied_patch_p_regex = re.compile("-P\s*([\d]*)")
|
|
||||||
source_dir_regex = re.compile("^[^#]*(\$RPM_SOURCE_DIR|%{?_sourcedir}?)")
|
|
||||||
obsolete_tags_regex = re.compile("^(Copyright|Serial)\s*:\s*([^\s]+)")
|
|
||||||
buildroot_regex = re.compile('Buildroot\s*:\s*([^\s]+)', re.IGNORECASE)
|
|
||||||
@@ -147,8 +147,8 @@
|
|
||||||
|
|
||||||
def check_spec(self, pkg, spec_lines):
|
|
||||||
patches = {}
|
|
||||||
- applied_patches = []
|
|
||||||
- applied_patches_ifarch = []
|
|
||||||
+ applied_patches = set()
|
|
||||||
+ applied_patches_ifarch = set()
|
|
||||||
source_dir = None
|
|
||||||
buildroot = 0
|
|
||||||
configure = 0
|
|
||||||
@@ -230,10 +230,11 @@
|
|
||||||
else:
|
|
||||||
res = applied_patch_regex.search(line)
|
|
||||||
if res:
|
|
||||||
- pnum = int(res.group(1) or res.group(2) or 0)
|
|
||||||
- applied_patches.append(pnum)
|
|
||||||
- if ifarch_depth > 0:
|
|
||||||
- applied_patches_ifarch.append(pnum)
|
|
||||||
+ for tmp in applied_patch_p_regex.findall(line) or [res.group(1)]:
|
|
||||||
+ pnum=int(tmp or 0)
|
|
||||||
+ applied_patches.add(pnum)
|
|
||||||
+ if ifarch_depth > 0:
|
|
||||||
+ applied_patches_ifarch.add(pnum)
|
|
||||||
elif not source_dir:
|
|
||||||
res = source_dir_regex.search(line)
|
|
||||||
if res:
|
|
@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:549feb0da65719327afef7d30481111624379faadf0493d63151a9f517489869
|
|
||||||
size 82164
|
|
3
rpmlint-0.85.tar.bz2
Normal file
3
rpmlint-0.85.tar.bz2
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:2db36de1c9b60e77ae3fd4b63a89c69deccfb2ee53988dc359c43ec2ec3147f7
|
||||||
|
size 83579
|
@ -1,3 +1,10 @@
|
|||||||
|
-------------------------------------------------------------------
|
||||||
|
Fri Feb 27 17:05:41 CET 2009 - dmueller@suse.de
|
||||||
|
|
||||||
|
- update to 0.85:
|
||||||
|
* various new checks and fixes to existing checks
|
||||||
|
* remove upstreamed patches
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Thu Feb 26 11:11:54 CET 2009 - lnussel@suse.de
|
Thu Feb 26 11:11:54 CET 2009 - lnussel@suse.de
|
||||||
|
|
||||||
|
12
rpmlint.spec
12
rpmlint.spec
@ -1,5 +1,5 @@
|
|||||||
#
|
#
|
||||||
# spec file for package rpmlint (Version 0.84)
|
# spec file for package rpmlint (Version 0.85)
|
||||||
#
|
#
|
||||||
# Copyright (c) 2009 SUSE LINUX Products GmbH, Nuernberg, Germany.
|
# Copyright (c) 2009 SUSE LINUX Products GmbH, Nuernberg, Germany.
|
||||||
#
|
#
|
||||||
@ -21,8 +21,8 @@
|
|||||||
Name: rpmlint
|
Name: rpmlint
|
||||||
BuildRequires: rpm-python
|
BuildRequires: rpm-python
|
||||||
Summary: Rpm correctness checker
|
Summary: Rpm correctness checker
|
||||||
Version: 0.84
|
Version: 0.85
|
||||||
Release: 17
|
Release: 1
|
||||||
Source0: %{name}-%{version}.tar.bz2
|
Source0: %{name}-%{version}.tar.bz2
|
||||||
Source1: config
|
Source1: config
|
||||||
Source1001: config.in
|
Source1001: config.in
|
||||||
@ -84,7 +84,6 @@ Patch33: check-buildroot-during-install.diff
|
|||||||
Patch34: verify-buildrequires.diff
|
Patch34: verify-buildrequires.diff
|
||||||
Patch35: fix-versioned-prereq.diff
|
Patch35: fix-versioned-prereq.diff
|
||||||
Patch37: buildroot-in-scripts.diff
|
Patch37: buildroot-in-scripts.diff
|
||||||
Patch38: fix-patch-detection.diff
|
|
||||||
Patch39: libtool-wrapper-check.diff
|
Patch39: libtool-wrapper-check.diff
|
||||||
Patch41: perl-versioned-rpath-deps.diff
|
Patch41: perl-versioned-rpath-deps.diff
|
||||||
Patch42: check-cron-dependency.diff
|
Patch42: check-cron-dependency.diff
|
||||||
@ -156,7 +155,6 @@ Authors:
|
|||||||
%patch34
|
%patch34
|
||||||
%patch35
|
%patch35
|
||||||
%patch37
|
%patch37
|
||||||
%patch38
|
|
||||||
%patch39
|
%patch39
|
||||||
%patch41
|
%patch41
|
||||||
%patch42
|
%patch42
|
||||||
@ -224,6 +222,10 @@ rm -rf $RPM_BUILD_ROOT
|
|||||||
/usr/share/man/man1/rpmlint.1.gz
|
/usr/share/man/man1/rpmlint.1.gz
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Fri Feb 27 2009 dmueller@suse.de
|
||||||
|
- update to 0.85:
|
||||||
|
* various new checks and fixes to existing checks
|
||||||
|
* remove upstreamed patches
|
||||||
* Thu Feb 26 2009 lnussel@suse.de
|
* Thu Feb 26 2009 lnussel@suse.de
|
||||||
- use separate error for sysconfig stuff (bnc#470965)
|
- use separate error for sysconfig stuff (bnc#470965)
|
||||||
- move RCS detection to FilesCheck.py
|
- move RCS detection to FilesCheck.py
|
||||||
|
@ -1,23 +1,23 @@
|
|||||||
--- TagsCheck.py
|
--- TagsCheck.py
|
||||||
+++ TagsCheck.py
|
+++ TagsCheck.py
|
||||||
@@ -665,6 +665,7 @@ class TagsCheck(AbstractCheck.AbstractCheck):
|
@@ -680,6 +680,7 @@
|
||||||
|
|
||||||
obs=map(lambda x: x[0], pkg.obsoletes())
|
obs_names = map(lambda x: x[0], pkg.obsoletes())
|
||||||
provs=map(lambda x: x[0].split(':/')[0], pkg.provides())
|
prov_names = map(lambda x: x[0].split(':/')[0], pkg.provides())
|
||||||
+ conflicts=map(lambda x: x[0].split(':/')[0], pkg.conflicts())
|
+ conf_names = map(lambda x: x[0].split(':/')[0], pkg.conflicts())
|
||||||
reqs=map(lambda x: x[0], pkg.requires() + pkg.prereq())
|
req_names = map(lambda x: x[0], pkg.requires() + pkg.prereq())
|
||||||
if pkg.name in obs:
|
|
||||||
printError(pkg, 'obsolete-on-name')
|
|
||||||
@@ -677,6 +678,8 @@ class TagsCheck(AbstractCheck.AbstractCheck):
|
|
||||||
|
|
||||||
useless_provides=set()
|
if pkg.name in obs_names:
|
||||||
for p in provs:
|
@@ -695,6 +696,8 @@
|
||||||
+ if p in conflicts:
|
# https://bugzilla.redhat.com/460872
|
||||||
|
useless_provides=[]
|
||||||
|
for p in prov_names:
|
||||||
|
+ if p in conf_names:
|
||||||
+ printWarning(pkg, 'conflicts-with-provides', p)
|
+ printWarning(pkg, 'conflicts-with-provides', p)
|
||||||
if provs.count(p) != 1:
|
if prov_names.count(p) != 1:
|
||||||
if p not in useless_provides:
|
if p not in useless_provides:
|
||||||
useless_provides.add(p)
|
useless_provides.append(p)
|
||||||
@@ -776,6 +779,10 @@ the Release tag.''',
|
@@ -796,6 +799,10 @@
|
||||||
'''There is no Name tag in your package. You have to specify a name using the
|
'''There is no Name tag in your package. You have to specify a name using the
|
||||||
Name tag.''',
|
Name tag.''',
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
--- TagsCheck.py
|
--- TagsCheck.py
|
||||||
+++ TagsCheck.py
|
+++ TagsCheck.py
|
||||||
@@ -507,7 +507,7 @@ class TagsCheck(AbstractCheck.AbstractCheck):
|
@@ -509,7 +509,7 @@
|
||||||
printError(pkg, 'explicit-lib-dependency', d[0])
|
printError(pkg, 'explicit-lib-dependency', d[0])
|
||||||
if d[2] == rpm.RPMSENSE_EQUAL and string.find(d[1], '-') != -1:
|
if d[2] == rpm.RPMSENSE_EQUAL and string.find(d[1], '-') != -1:
|
||||||
printWarning(pkg, 'requires-on-release', d[0], d[1])
|
printWarning(pkg, 'requires-on-release', d[0], d[1])
|
||||||
@ -9,68 +9,48 @@
|
|||||||
printError(pkg, 'percent-in-dependency', d[0], d[1])
|
printError(pkg, 'percent-in-dependency', d[0], d[1])
|
||||||
|
|
||||||
if not name:
|
if not name:
|
||||||
@@ -665,29 +665,39 @@ class TagsCheck(AbstractCheck.AbstractCheck):
|
@@ -680,6 +680,7 @@
|
||||||
|
|
||||||
obs=map(lambda x: x[0], pkg.obsoletes())
|
obs_names = map(lambda x: x[0], pkg.obsoletes())
|
||||||
provs=map(lambda x: x[0].split(':/')[0], pkg.provides())
|
prov_names = map(lambda x: x[0].split(':/')[0], pkg.provides())
|
||||||
+ reqs=map(lambda x: x[0], pkg.requires() + pkg.prereq())
|
+ req_names = map(lambda x: x[0], pkg.requires() + pkg.prereq())
|
||||||
if pkg.name in obs:
|
|
||||||
|
if pkg.name in obs_names:
|
||||||
printError(pkg, 'obsolete-on-name')
|
printError(pkg, 'obsolete-on-name')
|
||||||
for o in obs:
|
@@ -687,7 +688,7 @@
|
||||||
if not o in provs:
|
if not o in prov_names:
|
||||||
printWarning(pkg, 'obsolete-not-provided', o)
|
printWarning(pkg, 'obsolete-not-provided', o)
|
||||||
for o in pkg.obsoletes():
|
for o in pkg.obsoletes():
|
||||||
- if string.find(o[1], '%') != -1:
|
- if string.find(o[1], '%') != -1:
|
||||||
+ if string.find(o[1], '%') != -1 or string.find(o[0], '%') != -1:
|
+ if string.find(o[1], '%') != -1 or string.find(o[0], '%') != -1:
|
||||||
printError(pkg, 'percent-in-obsoletes', o[0], o[1])
|
printError(pkg, 'percent-in-obsoletes', o[0], o[1])
|
||||||
|
|
||||||
- useless_provides=[]
|
# TODO: should take versions, <, <=, =, >=, > into account here
|
||||||
+ useless_provides=set()
|
@@ -700,14 +701,41 @@
|
||||||
for p in provs:
|
|
||||||
if provs.count(p) != 1:
|
|
||||||
if p not in useless_provides:
|
|
||||||
- useless_provides.append(p)
|
|
||||||
+ useless_provides.add(p)
|
|
||||||
for p in useless_provides:
|
for p in useless_provides:
|
||||||
printError(pkg, 'useless-explicit-provides',p)
|
printError(pkg, 'useless-provides', p)
|
||||||
|
|
||||||
+ useless_reqs=set()
|
+ useless_reqs=set()
|
||||||
+ for r in reqs:
|
+ for r in req_names:
|
||||||
+ if not r in useless_reqs:
|
+ if not r in useless_reqs:
|
||||||
+ useless_reqs.add(r)
|
+ useless_reqs.add(r)
|
||||||
+ else:
|
+ else:
|
||||||
+ if r[0] != '/':
|
+ if r[0] != '/':
|
||||||
+ printWarning(pkg, 'useless-explicit-requires', r)
|
+ printWarning(pkg, 'useless-explicit-requires', r)
|
||||||
|
+
|
||||||
for p in pkg.provides():
|
for p in pkg.provides():
|
||||||
- if string.find(p[1], '%') != -1:
|
- if string.find(p[1], '%') != -1:
|
||||||
+ if string.find(p[1], '%') != -1 or string.find(p[0], '%') != -1:
|
+ if string.find(p[1], '%') != -1 or string.find(p[0], '%') != -1:
|
||||||
printError(pkg, 'percent-in-provides', p[0], p[1])
|
printError(pkg, 'percent-in-provides', p[0], p[1])
|
||||||
|
|
||||||
+ if p[0] == pkg.name and not p[1]:
|
+ if p[0] == pkg.name and not p[1]:
|
||||||
+ printError(pkg, 'unversioned-explicit-self-provides', p[0])
|
+ printError(pkg, 'unversioned-explicit-self-provides', p[0])
|
||||||
|
+
|
||||||
for c in pkg.conflicts():
|
for c in pkg.conflicts():
|
||||||
- if string.find(c[1], '%') != -1:
|
- if string.find(c[1], '%') != -1:
|
||||||
+ if string.find(c[1], '%') != -1 or string.find(c[0], '%') != -1:
|
+ if string.find(c[1], '%') != -1 or string.find(c[0], '%') != -1:
|
||||||
printError(pkg, 'percent-in-conflicts', c[0], c[1])
|
printError(pkg, 'percent-in-conflicts', c[0], c[1])
|
||||||
|
|
||||||
expected='%s-%s-%s.%s.rpm' % (name, version, release, pkg.arch)
|
|
||||||
@@ -877,6 +887,10 @@ explicit Requires: tags.''',
|
|
||||||
'''This package provides 2 times the same capacity. It should only provide it
|
|
||||||
once.''',
|
|
||||||
|
|
||||||
+'unversioned-explicit-self-provides',
|
|
||||||
+'''This package provides it's own name explicitely, which might break
|
|
||||||
+upgrade path. self-provides are autogenerated. Remove the provide.''',
|
|
||||||
+
|
|
||||||
'obsolete-on-name',
|
|
||||||
'''A package should not obsolete itself, as it can cause weird errors in tools.''',
|
|
||||||
|
|
||||||
--- TagsCheck.py
|
|
||||||
+++ TagsCheck.py
|
|
||||||
@@ -711,6 +711,22 @@ class TagsCheck(AbstractCheck.AbstractCheck):
|
|
||||||
if string.find(c[1], '%') != -1 or string.find(c[0], '%') != -1:
|
|
||||||
printError(pkg, 'percent-in-conflicts', c[0], c[1])
|
|
||||||
|
|
||||||
+ for c in pkg.supplements():
|
+ for c in pkg.supplements():
|
||||||
+ if string.find(c[1], '%') != -1 or string.find(c[0], '%') != -1:
|
+ if string.find(c[1], '%') != -1 or string.find(c[0], '%') != -1:
|
||||||
+ printError(pkg, 'percent-in-supplements', c[0], c[1])
|
+ printError(pkg, 'percent-in-supplements', c[0], c[1])
|
||||||
@ -90,3 +70,15 @@
|
|||||||
expected='%s-%s-%s.%s.rpm' % (name, version, release, pkg.arch)
|
expected='%s-%s-%s.%s.rpm' % (name, version, release, pkg.arch)
|
||||||
basename=string.split(pkg.filename, '/')[-1]
|
basename=string.split(pkg.filename, '/')[-1]
|
||||||
if basename != expected:
|
if basename != expected:
|
||||||
|
@@ -897,6 +925,10 @@
|
||||||
|
'''This package provides 2 times the same capacity. It should only provide it
|
||||||
|
once.''',
|
||||||
|
|
||||||
|
+'unversioned-explicit-self-provides',
|
||||||
|
+'''This package provides it's own name explicitely, which might break
|
||||||
|
+upgrade path. self-provides are autogenerated. Remove the provide.''',
|
||||||
|
+
|
||||||
|
'obsolete-on-name',
|
||||||
|
'''A package should not obsolete itself, as it can cause weird errors in tools.''',
|
||||||
|
|
||||||
|
Nur in b/rpmlint-0.85: TagsCheck.py.rej.
|
||||||
|
@ -1,19 +1,19 @@
|
|||||||
--- BinariesCheck.py
|
--- BinariesCheck.py
|
||||||
+++ BinariesCheck.py
|
+++ BinariesCheck.py
|
||||||
@@ -51,10 +51,11 @@ class BinaryInfo:
|
@@ -56,10 +56,11 @@
|
||||||
self.exec_stack = 0
|
|
||||||
self.debuginfo=0
|
self.debuginfo=0
|
||||||
self.symtab=0
|
self.symtab=0
|
||||||
|
self.tail = ''
|
||||||
+ self.compileOpts = set()
|
+ self.compileOpts = set()
|
||||||
|
|
||||||
is_debug=BinaryInfo.debug_file_regex.search(path)
|
is_debug=BinaryInfo.debug_file_regex.search(path)
|
||||||
|
|
||||||
- cmd = ['env', 'LC_ALL=C', 'readelf', '-W', '-S', '-l', '-d']
|
- cmd = ['env', 'LC_ALL=C', 'readelf', '-W', '-S', '-l', '-d', '-s']
|
||||||
+ cmd = ['env', 'LC_ALL=C', 'readelf', '-W', '-S', '-l', '-d', '-p', '.comment.SUSE.OPTs']
|
+ cmd = ['env', 'LC_ALL=C', 'readelf', '-W', '-S', '-l', '-d', '-s', '-p', '.comment.SUSE.OPTs']
|
||||||
cmd.append(path)
|
cmd.append(path)
|
||||||
res = Pkg.getstatusoutput(cmd)
|
res = Pkg.getstatusoutput(cmd)
|
||||||
if not res[0]:
|
if not res[0]:
|
||||||
@@ -100,6 +101,9 @@ class BinaryInfo:
|
@@ -115,6 +116,9 @@
|
||||||
self.symtab=1
|
self.symtab=1
|
||||||
continue
|
continue
|
||||||
|
|
||||||
@ -22,4 +22,4 @@
|
|||||||
+
|
+
|
||||||
if self.non_pic:
|
if self.non_pic:
|
||||||
self.non_pic=BinaryInfo.non_pic_regex.search(res[1])
|
self.non_pic=BinaryInfo.non_pic_regex.search(res[1])
|
||||||
else:
|
|
||||||
|
@ -1,25 +1,25 @@
|
|||||||
--- BinariesCheck.py
|
--- BinariesCheck.py
|
||||||
+++ BinariesCheck.py
|
+++ BinariesCheck.py
|
||||||
@@ -34,6 +34,8 @@
|
@@ -36,6 +36,8 @@
|
||||||
undef_regex=re.compile('^undefined symbol:\s+(\S+)')
|
|
||||||
unused_regex=re.compile('^\s+(\S+)')
|
|
||||||
debug_file_regex=re.compile('\.debug$')
|
debug_file_regex=re.compile('\.debug$')
|
||||||
|
exit_call_regex = re.compile('\s+FUNC\s+.*?\s+(_?exit(?:@\S+)?)(?:\s|$)')
|
||||||
|
fork_call_regex = re.compile('\s+FUNC\s+.*?\s+(fork(?:@\S+)?)(?:\s|$)')
|
||||||
+ debuginfo_regex=re.compile('^\s+\[\s*\d+\]\s+\.debug_.*\s+')
|
+ debuginfo_regex=re.compile('^\s+\[\s*\d+\]\s+\.debug_.*\s+')
|
||||||
+ symtab_regex=re.compile('^\s+\[\s*\d+\]\s+\.symtab\s+')
|
+ symtab_regex=re.compile('^\s+\[\s*\d+\]\s+\.symtab\s+')
|
||||||
|
|
||||||
def __init__(self, pkg, path, file, is_ar):
|
def __init__(self, pkg, path, file, is_ar, is_shlib):
|
||||||
self.had_error=0
|
self.readelf_error = 0
|
||||||
@@ -46,6 +48,8 @@
|
@@ -50,6 +52,8 @@
|
||||||
self.non_pic=1
|
|
||||||
self.stack = 0
|
|
||||||
self.exec_stack = 0
|
self.exec_stack = 0
|
||||||
|
self.exit_calls = []
|
||||||
|
fork_called = 0
|
||||||
+ self.debuginfo = 0
|
+ self.debuginfo = 0
|
||||||
+ self.symtab=0
|
+ self.symtab=0
|
||||||
|
self.tail = ''
|
||||||
|
|
||||||
is_debug=BinaryInfo.debug_file_regex.search(path)
|
is_debug=BinaryInfo.debug_file_regex.search(path)
|
||||||
|
@@ -102,6 +106,14 @@
|
||||||
@@ -87,6 +91,14 @@
|
fork_called = 1
|
||||||
self.exec_stack = 1
|
|
||||||
continue
|
continue
|
||||||
|
|
||||||
+ if BinaryInfo.debuginfo_regex.search(l):
|
+ if BinaryInfo.debuginfo_regex.search(l):
|
||||||
@ -32,14 +32,14 @@
|
|||||||
+
|
+
|
||||||
if self.non_pic:
|
if self.non_pic:
|
||||||
self.non_pic=BinaryInfo.non_pic_regex.search(res[1])
|
self.non_pic=BinaryInfo.non_pic_regex.search(res[1])
|
||||||
else:
|
|
||||||
@@ -216,6 +228,17 @@
|
@@ -249,6 +261,17 @@
|
||||||
# inspect binary file
|
# inspect binary file
|
||||||
bin_info=BinaryInfo(pkg, pkg.dirName()+i[0], i[0], is_ar)
|
bin_info=BinaryInfo(pkg, pkg.dirName()+i[0], i[0], is_ar, is_shlib)
|
||||||
|
|
||||||
+ # stripped static library
|
+ # stripped static library
|
||||||
+ if is_ar:
|
+ if is_ar:
|
||||||
+ if bin_info.had_error:
|
+ if bin_info.readelf_error:
|
||||||
+ pass
|
+ pass
|
||||||
+ elif not bin_info.symtab:
|
+ elif not bin_info.symtab:
|
||||||
+ printError(pkg, 'static-library-without-symtab', i[0])
|
+ printError(pkg, 'static-library-without-symtab', i[0])
|
||||||
@ -49,9 +49,9 @@
|
|||||||
+ printWarning(pkg, 'static-library-without-debuginfo', i[0])
|
+ printWarning(pkg, 'static-library-without-debuginfo', i[0])
|
||||||
+
|
+
|
||||||
# so name in library
|
# so name in library
|
||||||
if so_regex.search(i[0]):
|
if is_shlib:
|
||||||
has_lib.append(i[0])
|
has_lib.append(i[0])
|
||||||
@@ -430,6 +453,14 @@
|
@@ -475,6 +498,14 @@
|
||||||
'ldd-failed',
|
'ldd-failed',
|
||||||
'''Executing ldd on this file failed, all checks could not be run.''',
|
'''Executing ldd on this file failed, all checks could not be run.''',
|
||||||
|
|
||||||
|
@ -1,20 +1,11 @@
|
|||||||
--- TagsCheck.py
|
--- TagsCheck.py
|
||||||
+++ TagsCheck.py
|
+++ TagsCheck.py
|
||||||
@@ -517,7 +517,7 @@ class TagsCheck(AbstractCheck.AbstractCheck):
|
|
||||||
base=is_devel.group(1)
|
|
||||||
dep=None
|
|
||||||
has_so=0
|
|
||||||
- for f in pkg.files().keys():
|
|
||||||
+ for f in pkg.files():
|
|
||||||
if f.endswith('.so'):
|
|
||||||
has_so=1
|
|
||||||
break
|
|
||||||
@@ -686,6 +686,17 @@ class TagsCheck(AbstractCheck.AbstractCheck):
|
@@ -686,6 +686,17 @@ class TagsCheck(AbstractCheck.AbstractCheck):
|
||||||
for p in useless_provides:
|
for p in useless_provides:
|
||||||
printError(pkg, 'useless-explicit-provides',p)
|
printError(pkg, 'useless-explicit-provides',p)
|
||||||
|
|
||||||
+ have_mono_reqs=False
|
+ have_mono_reqs=False
|
||||||
+ for r in reqs + provs:
|
+ for r in req_names + prov_names:
|
||||||
+ if r.startswith('mono('):
|
+ if r.startswith('mono('):
|
||||||
+ have_mono_reqs=True
|
+ have_mono_reqs=True
|
||||||
+ break
|
+ break
|
||||||
|
@ -8,22 +8,20 @@
|
|||||||
|
|
||||||
# Only check for /lib, /usr/lib, /usr/X11R6/lib
|
# Only check for /lib, /usr/lib, /usr/X11R6/lib
|
||||||
# TODO: better handling of X libraries and modules.
|
# TODO: better handling of X libraries and modules.
|
||||||
@@ -306,7 +307,13 @@
|
@@ -340,6 +341,12 @@
|
||||||
if lib_package_regex.search(line):
|
if res:
|
||||||
lib = 1
|
noarch = 1
|
||||||
|
|
||||||
- res = prereq_regex.search(line)
|
|
||||||
+ res = suse_version_regex.search(line)
|
+ res = suse_version_regex.search(line)
|
||||||
+ if res and int(res.group(1)) > 0 and int(res.group(1)) < 1030:
|
+ if res and int(res.group(1)) > 0 and int(res.group(1)) < 1030:
|
||||||
+ printWarning(pkg, "obsolete-suse-version-check", res.group(1))
|
+ printWarning(pkg, "obsolete-suse-version-check", res.group(1))
|
||||||
+ elif res and int(res.group(1)) > 1110:
|
+ elif res and int(res.group(1)) > 1110:
|
||||||
+ printError(pkg, "invalid-suse-version-check", res.group(1))
|
+ printError(pkg, "invalid-suse-version-check", res.group(1))
|
||||||
+
|
+
|
||||||
+ res = prereq_regex.search(line)
|
res = prereq_regex.search(line)
|
||||||
if res:
|
if res:
|
||||||
printWarning(pkg, 'prereq-use', res.group(2))
|
printError(pkg, 'prereq-use', res.group(2))
|
||||||
|
@@ -598,6 +605,16 @@
|
||||||
@@ -568,6 +575,16 @@
|
|
||||||
set which may result in security issues in the resulting binary package
|
set which may result in security issues in the resulting binary package
|
||||||
depending on the system where the package is built. Add default attributes
|
depending on the system where the package is built. Add default attributes
|
||||||
using %defattr before it in the %files section, or use per line %attr's.''',
|
using %defattr before it in the %files section, or use per line %attr's.''',
|
||||||
@ -40,3 +38,4 @@
|
|||||||
)
|
)
|
||||||
|
|
||||||
# SpecCheck.py ends here
|
# SpecCheck.py ends here
|
||||||
|
Nur in b/rpmlint-0.85: SpecCheck.py.orig.
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
--- SpecCheck.py
|
--- SpecCheck.py
|
||||||
+++ SpecCheck.py
|
+++ SpecCheck.py
|
||||||
@@ -44,7 +44,8 @@
|
@@ -45,7 +45,8 @@
|
||||||
biarch_package_regex = re.compile(DEFAULT_BIARCH_PACKAGES)
|
biarch_package_regex = re.compile(DEFAULT_BIARCH_PACKAGES)
|
||||||
hardcoded_lib_path_exceptions_regex = re.compile(Config.getOption('HardcodedLibPathExceptions', DEFAULT_HARDCODED_LIB_PATH_EXCEPTIONS))
|
hardcoded_lib_path_exceptions_regex = re.compile(Config.getOption('HardcodedLibPathExceptions', DEFAULT_HARDCODED_LIB_PATH_EXCEPTIONS))
|
||||||
prereq_regex = re.compile('^PreReq(\(.*\))?:\s*(.+?)\s*$', re.IGNORECASE)
|
prereq_regex = re.compile('^PreReq(\(.*\))?:\s*(.+?)\s*$', re.IGNORECASE)
|
||||||
@ -9,8 +9,8 @@
|
|||||||
+buildrequires_regex = re.compile('^\s*BuildRequires\s*:\s*(.+)\s*$', re.IGNORECASE)
|
+buildrequires_regex = re.compile('^\s*BuildRequires\s*:\s*(.+)\s*$', re.IGNORECASE)
|
||||||
use_utf8 = Config.getOption('UseUTF8', Config.USEUTF8_DEFAULT)
|
use_utf8 = Config.getOption('UseUTF8', Config.USEUTF8_DEFAULT)
|
||||||
macro_regex = re.compile('(%+)[{(]?(\w+)')
|
macro_regex = re.compile('(%+)[{(]?(\w+)')
|
||||||
suse_version_regex = re.compile('%suse_version\s*[<>=]+\s*(\d+)')
|
libdir_regex = re.compile('%{?_lib(?:dir)?\}?\\b')
|
||||||
@@ -111,6 +112,25 @@
|
@@ -126,6 +127,25 @@
|
||||||
res.append(tok)
|
res.append(tok)
|
||||||
return res
|
return res
|
||||||
|
|
||||||
@ -36,18 +36,18 @@
|
|||||||
def contains_buildroot(line):
|
def contains_buildroot(line):
|
||||||
'''Check if the given line contains use of rpm buildroot.'''
|
'''Check if the given line contains use of rpm buildroot.'''
|
||||||
res = rpm_buildroot_regex.search(line)
|
res = rpm_buildroot_regex.search(line)
|
||||||
@@ -174,6 +194,8 @@
|
@@ -188,6 +208,8 @@
|
||||||
indent_spaces = 0
|
|
||||||
indent_tabs = 0
|
indent_tabs = 0
|
||||||
|
files_has_defattr = 0
|
||||||
section = {}
|
section = {}
|
||||||
+ buildrequires = set()
|
+ buildrequires = set()
|
||||||
+
|
+
|
||||||
for sec in ['description', 'prep', 'build', 'install', 'clean',
|
for sec in ['description', 'prep', 'build', 'install', 'clean',
|
||||||
'files', 'changelog', 'package', 'check']:
|
'files', 'changelog', 'package', 'check']:
|
||||||
section[sec] = {
|
section[sec] = {
|
||||||
@@ -316,6 +338,14 @@
|
@@ -348,6 +370,14 @@
|
||||||
if res:
|
if res:
|
||||||
printWarning(pkg, 'buildprereq-use', res.group(1))
|
printError(pkg, 'buildprereq-use', res.group(1))
|
||||||
|
|
||||||
+ res = buildrequires_regex.search(line)
|
+ res = buildrequires_regex.search(line)
|
||||||
+ if not if_depth and res:
|
+ if not if_depth and res:
|
||||||
@ -57,10 +57,10 @@
|
|||||||
+ printWarning(pkg, 'duplicate-buildrequires', name)
|
+ printWarning(pkg, 'duplicate-buildrequires', name)
|
||||||
+ buildrequires.add(name)
|
+ buildrequires.add(name)
|
||||||
+
|
+
|
||||||
if scriptlet_requires_regex.search(line) and current_section == 'package':
|
if scriptlet_requires_regex.search(line):
|
||||||
printError(pkg, 'broken-syntax-in-scriptlet-requires', string.strip(line))
|
printError(pkg, 'broken-syntax-in-scriptlet-requires', string.strip(line))
|
||||||
|
|
||||||
@@ -376,6 +406,24 @@
|
@@ -420,6 +450,24 @@
|
||||||
'(spaces: line %d, tab: line %d)' %
|
'(spaces: line %d, tab: line %d)' %
|
||||||
(indent_spaces, indent_tabs))
|
(indent_spaces, indent_tabs))
|
||||||
|
|
||||||
@ -85,7 +85,7 @@
|
|||||||
# process gathered info
|
# process gathered info
|
||||||
for p in patches.keys():
|
for p in patches.keys():
|
||||||
if p in applied_patches_ifarch:
|
if p in applied_patches_ifarch:
|
||||||
@@ -522,6 +570,17 @@
|
@@ -557,6 +605,17 @@
|
||||||
odd entries eg. in source rpms, which is rarely wanted. Avoid use of macros
|
odd entries eg. in source rpms, which is rarely wanted. Avoid use of macros
|
||||||
in %changelog altogether, or use two '%'s to escape them, like '%%foo'.''',
|
in %changelog altogether, or use two '%'s to escape them, like '%%foo'.''',
|
||||||
|
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
--- TagsCheck.py
|
--- TagsCheck.py
|
||||||
+++ TagsCheck.py
|
+++ TagsCheck.py
|
||||||
@@ -648,7 +648,7 @@
|
@@ -670,7 +670,7 @@
|
||||||
printWarning(pkg, 'no-url-tag')
|
printWarning(pkg, 'no-url-tag')
|
||||||
|
|
||||||
obs=map(lambda x: x[0], pkg.obsoletes())
|
obs_names = map(lambda x: x[0], pkg.obsoletes())
|
||||||
- provs=map(lambda x: x[0], pkg.provides())
|
- prov_names = map(lambda x: x[0], pkg.provides())
|
||||||
+ provs=map(lambda x: x[0].split(':/')[0], pkg.provides())
|
+ prov_names = map(lambda x: x[0].split(':/')[0], pkg.provides())
|
||||||
if pkg.name in obs:
|
|
||||||
printError(pkg, 'obsolete-on-name')
|
|
||||||
|
|
||||||
|
if pkg.name in obs_names:
|
||||||
|
printError(pkg, 'obsolete-on-name')
|
||||||
|
Loading…
Reference in New Issue
Block a user