Hello community, here is the log from the commit of package rpmlint for openSUSE:Factory checked in at Mon Apr 26 23:34:56 CEST 2010. -------- --- rpmlint/rpmlint.changes 2010-04-06 18:31:58.000000000 +0200 +++ rpmlint/rpmlint.changes 2010-04-26 12:05:27.000000000 +0200 @@ -1,0 +2,27 @@ +Mon Apr 26 11:09:53 CEST 2010 - dmueller@suse.de + +- check for missing xinetd.d (bnc#436326) +- check for files in /var/run (fate#303793) + +------------------------------------------------------------------- +Thu Apr 22 12:02:26 CEST 2010 - dmueller@suse.de + +- check for live update problems (bnc#477649) +- rediff and enable the shared lib dependency check fix + +------------------------------------------------------------------- +Wed Apr 21 12:47:00 UTC 2010 - aj@suse.de + +- Add some missing rpm groups and sort list. + +------------------------------------------------------------------- +Mon Apr 19 11:26:37 CEST 2010 - dmueller@suse.de + +- tighten the interpreter check (bnc#574650) + +------------------------------------------------------------------- +Fri Apr 16 14:36:45 CEST 2010 - dmueller@suse.de + +- suppress warnings about cron.d symlinks (bnc#591431) + +------------------------------------------------------------------- calling whatdependson for head-i586 Old: ---- check-cron-dependency.diff New: ---- stricter-interpreter-check.diff suse-check-optional-dependencies.diff suse-file-var-run.diff suse-pkg-config-check.diff ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ rpmlint.spec ++++++ --- /var/tmp/diff_new_pack.uSckoE/_old 2010-04-26 23:33:58.000000000 +0200 +++ /var/tmp/diff_new_pack.uSckoE/_new 2010-04-26 23:33:58.000000000 +0200 @@ -23,7 +23,7 @@ BuildRequires: rpm-python Summary: Rpm correctness checker Version: 0.95 -Release: 3 +Release: 4 Source0: %{name}-%{version}.tar.bz2 Source1: config Source1001: config.in @@ -62,9 +62,11 @@ Patch4: invalid-filerequires.diff Patch5: suse-bzip-bigger-than-100k.diff Patch6: suse-filesystem.diff +Patch7: suse-pkg-config-check.diff Patch8: suse-debuginfo.diff Patch9: no-doc-for-lib.diff Patch10: add-scoring-support.diff +Patch11: suse-file-var-run.diff Patch12: usr-arch.diff Patch13: script-interpreter-only-for-exec-scripts.diff Patch14: sourced-dirs.diff @@ -89,7 +91,7 @@ Patch37: buildroot-in-scripts.diff Patch39: libtool-wrapper-check.diff Patch41: perl-versioned-rpath-deps.diff -Patch42: check-cron-dependency.diff +Patch42: suse-check-optional-dependencies.diff Patch46: locale-support.diff # not is also in CheckFilelist.py Patch47: noarch-lib64.diff @@ -111,6 +113,7 @@ Patch72: version-control-internal-file.diff Patch73: avoid-mismatched-libregex.diff Patch74: filename-non-utf8-exception.diff +Patch75: stricter-interpreter-check.diff %py_requires %description @@ -133,9 +136,11 @@ %patch4 %patch5 %patch6 +%patch7 %patch8 %patch9 #%patch10 +%patch11 %patch12 %patch13 %patch14 @@ -160,7 +165,7 @@ %patch37 #%patch39 #%patch41 -#%patch42 +%patch42 #%patch46 #%patch47 #%patch49 @@ -173,7 +178,7 @@ #%patch60 %patch62 #%patch63 -#%patch65 +%patch65 #%patch67 #%patch68 #%patch69 @@ -181,6 +186,7 @@ %patch72 %patch73 %patch74 +%patch75 cp -p %{SOURCE1} . cp -p %{SOURCE2} . cp -p %{SOURCE3} . ++++++ LibraryPolicyCheck.py ++++++ --- /var/tmp/diff_new_pack.uSckoE/_old 2010-04-26 23:33:58.000000000 +0200 +++ /var/tmp/diff_new_pack.uSckoE/_new 2010-04-26 23:33:58.000000000 +0200 @@ -589,6 +589,13 @@ if os.path.isdir(pkg.dirName()+f): dirs.add(f) + # Verify it doesn't have hard dependency on non-lib packages + for dep in pkg.requires(): + if (dep[0].startswith('rpmlib(')): + continue + if (dep[2] & (rpm.RPMSENSE_GREATER | rpm.RPMSENSE_EQUAL)) == rpm.RPMSENSE_EQUAL: + printWarning(pkg, "shlib-fixed-dependency", Pkg.formatRequire(dep[0], dep[1], dep[2])) + # Verify non-lib stuff does not add dependencies if libs: for dep in pkg_requires.difference(_essential_dependencies): @@ -638,6 +645,12 @@ """Your package starts with 'lib' as part of it's name, but does not provide any libraries. It must not be called a lib-package then. Give it a more sensible name.""", +'shlib-fixed-dependency', +"""Your shared library package requires a fixed version of another package. The +intention of the Shared Library Policy is to allow parallel installation of +multiple versions of the same shared library, hard dependencies likely make that +impossible. Please remove this dependency and instead move it to the runtime uses +of your library.""", 'shlib-unversioned-lib', """Your package matches the Shared Library Policy Naming Scheme but contains an unversioned library. Therefore it is very unlikely that your package can be installed ++++++ config ++++++ --- /var/tmp/diff_new_pack.uSckoE/_old 2010-04-26 23:33:58.000000000 +0200 +++ /var/tmp/diff_new_pack.uSckoE/_new 2010-04-26 23:33:58.000000000 +0200 @@ -74,6 +74,7 @@ addFilter(" dir-or-file-in-opt") addFilter("incoherent-version-in-changelog") addFilter(" no-signature") +addFilter(" symlink-crontab-file") #bnc591431 addFilter(" without-chkconfig") addFilter("unstripped-binary-or-object.*\.ko") addFilter(" no-chkconfig") ++++++ rpmgroups.config ++++++ --- /var/tmp/diff_new_pack.uSckoE/_old 2010-04-26 23:33:58.000000000 +0200 +++ /var/tmp/diff_new_pack.uSckoE/_new 2010-04-26 23:33:58.000000000 +0200 @@ -32,8 +32,10 @@ "Development/Languages/C and C++" ,\ "Development/Languages/Fortran" ,\ "Development/Languages/Java" ,\ + "Development/Languages/Mono" ,\ "Development/Languages/Other" ,\ "Development/Languages/Perl" ,\ + "Development/Libraries/PHP" ,\ "Development/Languages/Python" ,\ "Development/Languages/Ruby" ,\ "Development/Languages/Scheme" ,\ @@ -59,8 +61,8 @@ "Development/Tools/Navigators" ,\ "Development/Tools/Other" ,\ "Development/Tools/Version Control" ,\ - "Documentation/Howto" ,\ "Documentation/HTML" ,\ + "Documentation/Howto" ,\ "Documentation/Man" ,\ "Documentation/Other" ,\ "Documentation/SuSE" ,\ @@ -87,6 +89,9 @@ "Productivity/Databases/Clients" ,\ "Productivity/Databases/Servers" ,\ "Productivity/Databases/Tools" ,\ + "Productivity/Editors/Emacs" ,\ + "Productivity/Editors/Other" ,\ + "Productivity/Editors/Vi" ,\ "Productivity/File utilities" ,\ "Productivity/Graphics/3D Editors" ,\ "Productivity/Graphics/Bitmap Editors" ,\ @@ -122,9 +127,9 @@ "Productivity/Networking/Boot/Clients" ,\ "Productivity/Networking/Boot/Servers" ,\ "Productivity/Networking/Boot/Utilities" ,\ - "Productivity/Networking/Diagnostic" ,\ "Productivity/Networking/DNS/Servers" ,\ "Productivity/Networking/DNS/Utilities" ,\ + "Productivity/Networking/Diagnostic" ,\ "Productivity/Networking/Email/Clients" ,\ "Productivity/Networking/Email/Mailinglists" ,\ "Productivity/Networking/Email/Servers" ,\ @@ -133,26 +138,26 @@ "Productivity/Networking/Ftp/Clients" ,\ "Productivity/Networking/Ftp/Servers" ,\ "Productivity/Networking/ICQ" ,\ - "Productivity/Networking/Instant Messenger" ,\ "Productivity/Networking/IRC" ,\ + "Productivity/Networking/Instant Messenger" ,\ "Productivity/Networking/LDAP/Clients" ,\ "Productivity/Networking/LDAP/Servers" ,\ "Productivity/Networking/LDAP/Utilities" ,\ + "Productivity/Networking/NFS" ,\ + "Productivity/Networking/NIS" ,\ "Productivity/Networking/Napster" ,\ "Productivity/Networking/News/Clients" ,\ "Productivity/Networking/News/Servers" ,\ "Productivity/Networking/News/Utilities" ,\ - "Productivity/Networking/NFS" ,\ - "Productivity/Networking/NIS" ,\ "Productivity/Networking/Novell" ,\ "Productivity/Networking/Other" ,\ "Productivity/Networking/PPP" ,\ "Productivity/Networking/Radius/Clients" ,\ "Productivity/Networking/Radius/Servers" ,\ "Productivity/Networking/Routing" ,\ + "Productivity/Networking/SSH" ,\ "Productivity/Networking/Samba" ,\ "Productivity/Networking/Security" ,\ - "Productivity/Networking/SSH" ,\ "Productivity/Networking/System" ,\ "Productivity/Networking/Talk/Clients" ,\ "Productivity/Networking/Talk/Servers" ,\ @@ -175,8 +180,8 @@ "Productivity/Publishing/HTML/Tools" ,\ "Productivity/Publishing/Other" ,\ "Productivity/Publishing/PDF" ,\ - "Productivity/Publishing/Presentation" ,\ "Productivity/Publishing/PS" ,\ + "Productivity/Publishing/Presentation" ,\ "Productivity/Publishing/SGML" ,\ "Productivity/Publishing/TeX/Base" ,\ "Productivity/Publishing/TeX/Fonts" ,\ @@ -197,10 +202,10 @@ "Productivity/Telephony/H323/Clients" ,\ "Productivity/Telephony/H323/Servers" ,\ "Productivity/Telephony/H323/Utilities" ,\ - "Productivity/Telephony/Servers" ,\ "Productivity/Telephony/SIP/Clients" ,\ "Productivity/Telephony/SIP/Servers" ,\ "Productivity/Telephony/SIP/Utilities" ,\ + "Productivity/Telephony/Servers" ,\ "Productivity/Telephony/Utilities" ,\ "Productivity/Text/Convertors" ,\ "Productivity/Text/Editors" ,\ ++++++ stricter-interpreter-check.diff ++++++ --- FilesCheck.py +++ FilesCheck.py @@ -826,7 +826,7 @@ f.endswith('.la')): printError(pkg, 'script-without-shebang', f) - if mode & 0111 == 0 and not is_doc: + if mode & 0111 == 0 and not is_doc and interpreter.startswith("/"): printError(pkg, 'non-executable-script', f, oct(perm), interpreter) if line.endswith('\r\n') or line.endswith('\r'): ++++++ suse-check-optional-dependencies.diff ++++++ --- FilesCheck.py +++ FilesCheck.py @@ -428,6 +428,16 @@ if res.group(1) != pkg.name: printError(pkg, 'incoherent-logrotate-file', f) + deps=[x[0] for x in pkg.requires()+pkg.recommends()+pkg.suggests()] + if res and not ('logrotate' in deps) and pkg.name != "logrotate": + printError(pkg, 'missing-dependency-to-logrotate', "for logrotate script", f) + if f.startswith('/etc/cron.') \ + and not ('cron' in deps) and pkg.name != "cron": + printError(pkg, 'missing-dependency-to-cron', "for cron script", f) + if f.startswith('/etc/xinet.d/') \ + and not ('xinetd' in deps) and pkg.name != "xinetd": + printError(pkg, 'missing-dependency-to-xinetd', "for xinet.d script", f) + if link != '': ext = compr_regex.search(link) if ext: @@ -1186,6 +1196,24 @@ extraction not working as expected. Verify that the binaries are not unexpectedly stripped and that the intended compiler flags are used.''', +'missing-dependency-to-cron', +'''This package installs a file in /etc/cron.*/ but +doesn't require cron to be installed. as cron is not part of the essential packages, +your package should explicitely require cron to make sure that your cron job is +executed. If it is an optional feature of your package, recommend or suggest cron.''', + +'missing-dependency-to-logrotate', +'''This package installs a file in /etc/logrotate.d/ but +doesn't require logrotate to be installed. Because logrotate is not part of the essential packages, +your package should explicitely depend on logrotate to make sure that your logrotate +job is executed. If it is an optional feature of your package, recommend or suggest logrotate.''', + +'missing-dependency-to-xinetd', +'''This package installs a file in /etc/xinetd.d/ but +doesn't require xinetd to be installed. Because xinetd is not part of the essential packages, +your package should explicitely depend on logrotate to make sure that your xinetd +job is executed. If it is an optional feature of your package, recommend or suggest xinetd.''', + 'read-error', '''This file could not be read. A reason for this could be that the info about it in the rpm header indicates that it is supposed to be a readable normal file ++++++ suse-file-var-run.diff ++++++ --- FilesCheck.py +++ FilesCheck.py @@ -402,6 +402,8 @@ printError(pkg, 'dir-or-file-in-usr-local', f) elif f.startswith('/var/local/'): printError(pkg, 'dir-or-file-in-var-local', f) + elif f.startswith('/var/run/') and f not in ghost_files: + printError(pkg, 'dir-or-file-in-var-run', f) elif sub_bin_regex.search(f): printError(pkg, 'subdir-in-bin', f) elif f.startswith('/home/'): @@ -945,6 +947,12 @@ '''A file in the package is located in /var/local. It's not permitted for packages to install files in this directory.''', +'dir-or-file-in-var-run', +'''A file or directory in the package is located in /var/run. It's not +permitted for packages to install files in this directory as it might +be created as tmpfs during boot. Modify your package to create the +necessary files during runtime.''', + 'subdir-in-bin', '''The package contains a subdirectory in /usr/bin. It's not permitted to create a subdir there. Create it in /usr/lib/ instead.''', ++++++ suse-pkg-config-check.diff ++++++ --- TagsCheck.py +++ TagsCheck.py @@ -603,10 +603,12 @@ base = is_devel.group(1) dep = None has_so = False + has_pc = False for fname in pkg.files(): if fname.endswith('.so'): has_so = True - break + if fname.endswith('.pc'): + has_pc = True if has_so: base_or_libs = base + '/' + base + '-libs/lib' + base # try to match *%_isa as well (e.g. "(x86-64)", "(x86-32)") @@ -643,6 +645,15 @@ if prov not in (x[0] for x in pkg.provides()): printWarning(pkg, 'no-provides', prov) + if has_pc: + found_pkg_config_dep = False + for p in (x[0] for x in pkg.provides()): + if (p.startswith("pkgconfig(")): + found_pkg_config_dep = True + break + if not found_pkg_config_dep: + printWarning(pkg, 'no-pkg-config-provides') + # List of words to ignore in spell check ignored_words = [x.split('/')[-1] for x in pkg.files()] @@ -1049,6 +1060,11 @@ 'no-url-tag', '''The URL tag is missing.''', +'no-pkg-config-provides', +'''The package installes a .pc file but does not provide pkgconfig(..) provides. +The most likely reason for that is that it was built without BuildRequires: pkg-config. +Please double check your build dependencies.''', + 'name-repeated-in-summary', '''The name of the package is repeated in its summary. This is often redundant information and looks silly in various programs' output. Make the summary ++++++ suse-shlib-devel-dependency.diff ++++++ --- /var/tmp/diff_new_pack.uSckoE/_old 2010-04-26 23:33:58.000000000 +0200 +++ /var/tmp/diff_new_pack.uSckoE/_new 2010-04-26 23:33:58.000000000 +0200 @@ -1,14 +1,15 @@ --- TagsCheck.py +++ TagsCheck.py -@@ -524,9 +524,9 @@ class TagsCheck(AbstractCheck.AbstractCheck): - has_so=1 - break +@@ -610,10 +610,10 @@ + if fname.endswith('.pc'): + has_pc = True if has_so: - base_or_libs = base + '/' + base + '-libs/lib' + base -+ base_or_libs = base + '*/' + base + '-libs/lib' + base ++ base_or_libs = base + '*/' + base + '-libs/lib' + base + '*' + # try to match *%_isa as well (e.g. "(x86-64)", "(x86-32)") + base_or_libs_re = re.compile( +- '^(lib)?%s(-libs)?(\(\w+-\d+\))?$' % re.escape(base)) ++ '^(lib)?%s(-libs)?[\d_]*(\(\w+-\d+\))?$' % re.escape(base)) for d in deps: -- if d[0] == base or d[0] == base + '-libs' or d[0] == 'lib' + base: -+ if d[0] == base or d[0] == base + '-libs' or d[0] == 'lib' + base or d[0].startswith(base): - dep=d - break - if not dep: + if base_or_libs_re.match(d[0]): + dep = d ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Remember to have fun... -- To unsubscribe, e-mail: opensuse-commit+unsubscribe@opensuse.org For additional commands, e-mail: opensuse-commit+help@opensuse.org