From 8e55a85d141d67f37845a4fbcfbddafc9442836cc21a93c3d7fe286663e3abdd Mon Sep 17 00:00:00 2001 From: OBS User unknown Date: Mon, 18 Dec 2006 23:17:44 +0000 Subject: [PATCH] OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/rpm?expand=0&rev=1 --- RPM-Changes.html.tar.bz2 | 3 + aloffbyone.diff | 16 + assumeexec.diff | 27 - autodeps.diff | 52 +- badforsyntax.diff | 17 + baselibs.conf | 3 - brp.diff | 60 +- brpcombress.diff | 56 + brpcompress.diff | 96 -- build.diff | 580 +++++++++- buildidprov.diff | 62 -- buildpipe.diff | 29 - buildsubdir.diff | 24 + checkfilesnoinfodir.diff | 14 +- chownwarn.diff | 70 +- compress.diff | 31 + convertdb1static.diff | 400 +------ db-4.8.30.tar.bz2 | 3 - db.diff | 151 ++- dbfsync.diff | 58 +- dbprivate.diff | 24 +- dbrointerruptable.diff | 67 +- debugedit-canon-fix.diff | 119 -- debugedit-comp-dir.diff | 51 - debugedit.diff | 39 +- debuginfo-mono.patch | 20 - debuglink.diff | 12 - debugsource-package.diff | 57 - debugsubpkg.diff | 322 ------ diskspace.diff | 23 + disttag-macro.diff | 31 - docdir_fmt.diff | 36 + elfutils-0.97.diff | 151 +++ elfutils-0.97.tar.bz2 | 3 + emptychangelog.diff | 11 - emptyfilelist.diff | 16 + emptyprep.diff | 13 - erasebadreturn.diff | 16 + eraseignoresize.diff | 28 + eraseordered.diff | 21 + exitstatus.diff | 15 + extcond.diff | 45 +- fileattrs.diff | 85 -- filenonull.diff | 12 + filequery.diff | 14 + files.diff | 17 - finddebuginfo-absolute-links.diff | 41 - finddebuginfo.diff | 205 ++-- findfplistexclude.diff | 114 ++ findksyms.diff | 92 +- findlang.diff | 147 +-- findsupplements.diff | 75 -- firmware.diff | 37 - fontprovides.diff | 54 - forkfailed.diff | 40 + getcwdresult.diff | 30 + ghost.diff | 17 + globlstat.diff | 18 + globoffbyone.diff | 13 + headeradddb.diff | 55 - initdbret.diff | 25 + initscriptsprov.diff | 50 - langnoc.diff | 127 --- lazystatfs.diff | 50 - legacyprereq.diff | 16 + localetag.diff | 143 ++- luanoreadline.diff | 32 + luaroot.diff | 75 ++ macrosin.diff | 235 ++-- magic_and_path.diff | 23 - missingok.diff | 33 +- modalias-encode.diff | 40 - modalias-kernel_module.diff | 25 +- modalias.diff | 81 +- nameversioncompare.diff | 43 +- no_rep_autop.diff | 12 - nobuildcolor.diff | 13 - nodefattr.diff | 15 + nolua.diff | 83 ++ nomagiccheck.diff | 13 - noneon.diff | 292 +++++ noprereqdeprec.diff | 22 - nostdoutclose.diff | 13 + obeynodbsync.diff | 14 + openallbuttemp.diff | 55 + patchrpms.diff | 743 +++++++++++++ payloadformat.diff | 40 + perlprov.diff | 13 - pgpdecodeearly.diff | 18 + platformin.diff | 31 +- prereqorder.diff | 21 + probfilter.diff | 14 + pythondeps.diff | 48 - querybuffer.diff | 43 + ready | 0 rebuilddbroot.diff | 22 + refreshtestarch.diff | 31 +- remove-brp-strips.diff | 16 - remove-translations.diff | 20 - repackage-nomd5.diff | 31 - requires-ge-macro.diff | 12 - rpm-4.4.2.tar.bz2 | 3 + rpm-4.9.0.tar.bz2 | 3 - rpm-beecrypt.diff | 1726 ----------------------------- rpm-gst-provides.patch | 14 - rpm-python.changes | 55 - rpm-python.spec | 50 +- rpm-shorten-changelog.diff | 88 -- rpm-suse_macros | 403 ++++--- rpm.changes | 883 +-------------- rpm.spec | 1359 +++++++++++++++++++---- rpmconfigcheck | 8 +- rpmdb_get_open_flags.diff | 13 - rpmpopt.diff | 85 +- rpmqpack.diff | 67 +- rpmrc.diff | 135 ++- rpmrctests.diff | 83 +- rpmsort | 36 +- safemacro.diff | 21 - safeugid.diff | 213 ---- sbitcheck.diff | 105 ++ setpermsugids.diff | 20 + signature.diff | 21 + signwriteerror.diff | 16 + specfilemacro.diff | 10 - spectest.diff | 19 + sqcondmutex.diff | 119 ++ srcdefattr.diff | 68 ++ suspendlock.diff | 267 ++--- taggedfileindex.diff | 133 ++- tagsbackport.diff | 37 + totalsizenoexclude.diff | 13 + translockroot.diff | 37 + vercmp.diff | 31 + verify_p.diff | 49 - verifylstatfail.diff | 15 + waitlock.diff | 176 ++- weakdeps.diff | 382 ++++--- whatrequires-doc.diff | 14 - 139 files changed, 6470 insertions(+), 6878 deletions(-) create mode 100644 RPM-Changes.html.tar.bz2 create mode 100644 aloffbyone.diff delete mode 100644 assumeexec.diff create mode 100644 badforsyntax.diff delete mode 100644 baselibs.conf create mode 100644 brpcombress.diff delete mode 100644 brpcompress.diff delete mode 100644 buildidprov.diff delete mode 100644 buildpipe.diff create mode 100644 buildsubdir.diff create mode 100644 compress.diff delete mode 100644 db-4.8.30.tar.bz2 delete mode 100644 debugedit-canon-fix.diff delete mode 100644 debugedit-comp-dir.diff delete mode 100644 debuginfo-mono.patch delete mode 100644 debuglink.diff delete mode 100644 debugsource-package.diff delete mode 100644 debugsubpkg.diff create mode 100644 diskspace.diff delete mode 100644 disttag-macro.diff create mode 100644 docdir_fmt.diff create mode 100644 elfutils-0.97.diff create mode 100644 elfutils-0.97.tar.bz2 delete mode 100644 emptychangelog.diff create mode 100644 emptyfilelist.diff delete mode 100644 emptyprep.diff create mode 100644 erasebadreturn.diff create mode 100644 eraseignoresize.diff create mode 100644 eraseordered.diff create mode 100644 exitstatus.diff delete mode 100644 fileattrs.diff create mode 100644 filenonull.diff create mode 100644 filequery.diff delete mode 100644 files.diff delete mode 100644 finddebuginfo-absolute-links.diff create mode 100644 findfplistexclude.diff delete mode 100644 findsupplements.diff delete mode 100644 firmware.diff delete mode 100644 fontprovides.diff create mode 100644 forkfailed.diff create mode 100644 getcwdresult.diff create mode 100644 ghost.diff create mode 100644 globlstat.diff create mode 100644 globoffbyone.diff delete mode 100644 headeradddb.diff create mode 100644 initdbret.diff delete mode 100644 initscriptsprov.diff delete mode 100644 langnoc.diff delete mode 100644 lazystatfs.diff create mode 100644 legacyprereq.diff create mode 100644 luanoreadline.diff create mode 100644 luaroot.diff delete mode 100644 magic_and_path.diff delete mode 100644 modalias-encode.diff delete mode 100644 no_rep_autop.diff delete mode 100644 nobuildcolor.diff create mode 100644 nodefattr.diff create mode 100644 nolua.diff delete mode 100644 nomagiccheck.diff create mode 100644 noneon.diff delete mode 100644 noprereqdeprec.diff create mode 100644 nostdoutclose.diff create mode 100644 obeynodbsync.diff create mode 100644 openallbuttemp.diff create mode 100644 patchrpms.diff create mode 100644 payloadformat.diff delete mode 100644 perlprov.diff create mode 100644 pgpdecodeearly.diff create mode 100644 prereqorder.diff create mode 100644 probfilter.diff delete mode 100644 pythondeps.diff create mode 100644 querybuffer.diff create mode 100644 ready create mode 100644 rebuilddbroot.diff delete mode 100644 remove-brp-strips.diff delete mode 100644 remove-translations.diff delete mode 100644 repackage-nomd5.diff delete mode 100644 requires-ge-macro.diff create mode 100644 rpm-4.4.2.tar.bz2 delete mode 100644 rpm-4.9.0.tar.bz2 delete mode 100644 rpm-beecrypt.diff delete mode 100644 rpm-gst-provides.patch delete mode 100644 rpm-shorten-changelog.diff delete mode 100644 rpmdb_get_open_flags.diff delete mode 100644 safemacro.diff delete mode 100644 safeugid.diff create mode 100644 sbitcheck.diff create mode 100644 setpermsugids.diff create mode 100644 signature.diff create mode 100644 signwriteerror.diff delete mode 100644 specfilemacro.diff create mode 100644 spectest.diff create mode 100644 sqcondmutex.diff create mode 100644 srcdefattr.diff create mode 100644 tagsbackport.diff create mode 100644 totalsizenoexclude.diff create mode 100644 translockroot.diff create mode 100644 vercmp.diff delete mode 100644 verify_p.diff create mode 100644 verifylstatfail.diff delete mode 100644 whatrequires-doc.diff diff --git a/RPM-Changes.html.tar.bz2 b/RPM-Changes.html.tar.bz2 new file mode 100644 index 0000000..5cb5122 --- /dev/null +++ b/RPM-Changes.html.tar.bz2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1b1d6954ea1c3fd4681d1419dbbae6907fac09ac9e8ea8cd33b08e930873e4c2 +size 9527 diff --git a/aloffbyone.diff b/aloffbyone.diff new file mode 100644 index 0000000..080d2f9 --- /dev/null +++ b/aloffbyone.diff @@ -0,0 +1,16 @@ +Fixes an off-by-one error in rpmalAllFileSatisfiesDepend() which +could lead to a segfault. + +Already included in rpm-4.4.7 + +--- ./lib/rpmal.c.orig 2005-12-14 20:53:12.000000000 +0000 ++++ ./lib/rpmal.c 2005-12-14 20:54:28.000000000 +0000 +@@ -744,7 +744,7 @@ rpmalAllFileSatisfiesDepend(const rpmal + + /*@-branchstate@*/ /* FIX: ret is a problem */ + for (found = 0, ret = NULL; +- die <= al->dirs + al->numDirs && dieCompare(die, dieNeedle) == 0; ++ die < al->dirs + al->numDirs && dieCompare(die, dieNeedle) == 0; + die++) + { + diff --git a/assumeexec.diff b/assumeexec.diff deleted file mode 100644 index d74def4..0000000 --- a/assumeexec.diff +++ /dev/null @@ -1,27 +0,0 @@ ---- tools/elfdeps.c.orig 2011-06-03 13:12:32.000000000 +0000 -+++ tools/elfdeps.c 2011-06-03 13:17:45.000000000 +0000 -@@ -14,6 +14,7 @@ - - int filter_private = 0; - int soname_only = 0; -+int assume_exec = 0; - - typedef struct elfInfo_s { - Elf *elf; -@@ -226,7 +227,7 @@ static int processFile(const char *fn, i - ei->isElf64 = 0; - #endif - ei->isDSO = (ehdr->e_type == ET_DYN); -- ei->isExec = (st.st_mode & (S_IXUSR|S_IXGRP|S_IXOTH)); -+ ei->isExec = assume_exec || (st.st_mode & (S_IXUSR|S_IXGRP|S_IXOTH)); - - processSections(ei); - } -@@ -279,6 +280,7 @@ int main(int argc, char *argv[]) - { "requires", 'R', POPT_ARG_VAL, &requires, -1, NULL, NULL }, - { "filter-private", 0, POPT_ARG_VAL, &filter_private, -1, NULL, NULL }, - { "soname-only", 0, POPT_ARG_VAL, &soname_only, -1, NULL, NULL }, -+ { "assume-exec", 0, POPT_ARG_VAL, &assume_exec, -1, NULL, NULL }, - POPT_AUTOHELP - POPT_TABLEEND - }; diff --git a/autodeps.diff b/autodeps.diff index f8ad21f..eb8e567 100644 --- a/autodeps.diff +++ b/autodeps.diff @@ -1,6 +1,8 @@ ---- ./autodeps/linux.prov.orig 2010-12-03 12:11:57.000000000 +0000 -+++ ./autodeps/linux.prov 2011-05-11 14:27:40.000000000 +0000 -@@ -2,60 +2,72 @@ +Some (probably SUSE specific) changes to linux.prov and linux.req + +--- ./autodeps/linux.prov.orig 2002-04-08 19:13:35.000000000 +0000 ++++ ./autodeps/linux.prov 2005-12-17 01:49:17.000000000 +0000 +@@ -2,60 +2,71 @@ # This script reads filenames from STDIN and outputs any relevant provides # information that needs to be included in the package. @@ -91,9 +93,8 @@ +# +# --- Mono exes/dlls +: ${MONO_PREFIX=/usr} -+if [ -x $MONO_PREFIX/bin/mono -a -n "$monolist" ] ; then -+ printf "%s\n" "${monolist[@]}" | MONO_PATH=$MONO_PREFIX/lib${MONO_PATH:+:$MONO_PATH} prefix=$MONO_PREFIX $MONO_PREFIX/bin/mono-find-provides || echo "WARNING: MONO RPM PROVIDES WERE NOT GENERATED FOR THIS BUILD!!" 1>&2 -+fi ++[ -x $MONO_PREFIX/bin/mono -a -f $MONO_PREFIX/bin/mono-find-provides -a -n "$monolist" ] && ++ printf "%s\n" "${monolist[@]}" | MONO_PATH=$MONO_PREFIX/lib${MONO_PATH:+:$MONO_PATH} prefix=$MONO_PREFIX $MONO_PREFIX/bin/mono-find-provides + +# +# --- Kernel module exported symbols @@ -101,20 +102,26 @@ + printf "%s\n" "${filelist[@]}" | /usr/lib/rpm/find-provides.ksyms "$@" exit 0 ---- ./autodeps/linux.req.orig 2010-12-03 12:11:57.000000000 +0000 -+++ ./autodeps/linux.req 2011-05-11 14:28:45.000000000 +0000 -@@ -19,18 +19,21 @@ fi +--- ./autodeps/linux.req.orig 2002-11-14 12:53:11.000000000 +0000 ++++ ./autodeps/linux.req 2005-12-17 01:50:07.000000000 +0000 +@@ -19,18 +19,22 @@ fi # # --- Grab the file manifest and classify files. #filelist=`sed "s/['\"]/\\\&/g"` -filelist=`sed "s/[]['\"*?{}]/\\\\\&/g"` --exelist=`echo $filelist | xargs -r file | grep -Ev ":.* (commands|script) " | \ +-exelist=`echo $filelist | xargs -r file | egrep -v ":.* (commands|script) " | \ - grep ":.*executable" | cut -d: -f1` -scriptlist=`echo $filelist | xargs -r file | \ -- grep -E ":.* (commands|script) " | cut -d: -f1` +- egrep ":.* (commands|script) " | cut -d: -f1` -liblist=`echo $filelist | xargs -r file | \ - grep ":.*shared object" | cut -d : -f1` +- +-interplist= +-perllist= +-pythonlist= +-tcllist= +#filelist=`sed "s/[]['\"*?{}]/\\\\\&/g"` ++IFS=$'\n' +filelist=($(grep -Ev '/usr/doc/|/usr/share/doc/')) +exelist=($(printf "%s\0" "${filelist[@]}" | xargs -0 -r file | \ + egrep -v ":.* (commands|script) " | \ @@ -123,20 +130,16 @@ + egrep ":.* (commands|script) " | cut -d: -f1)) +liblist=($(printf "%s\0" "${filelist[@]}" | xargs -0 -r file | \ + grep ":.*shared object" | cut -d : -f1)) - --interplist= --perllist= --pythonlist= --tcllist= ++ +interplist=() +perllist=() +pythonlist=() +tcllist=() -+monolist=($(printf "%s\n" "${filelist[@]}" | egrep "\\.(exe|dll)(\\.config)?\$")) ++monolist=($(printf "%s\n" "${filelist[@]}" | egrep "\\.(exe|dll)\$")) # # --- Alpha does not mark 64bit dependencies -@@ -42,12 +45,12 @@ esac +@@ -42,12 +46,12 @@ esac if [ "$needed" -eq 0 ]; then # # --- Executable dependency sonames. @@ -154,7 +157,7 @@ gsub(/'\''"/,"\\&",$1); printf "%s'$lib64'\n", $1 } -@@ -56,12 +59,12 @@ if [ "$needed" -eq 0 ]; then +@@ -56,12 +60,12 @@ if [ "$needed" -eq 0 ]; then # # --- Library dependency sonames. @@ -172,7 +175,7 @@ gsub(/'\''"/,"\\&",$1); printf "%s'$lib64'\n", $1 } -@@ -71,30 +74,30 @@ fi +@@ -71,30 +75,30 @@ fi # # --- Script interpreters. @@ -215,7 +218,7 @@ /^$/ { START=0; } /^Dynamic Section:$/ { START=1; } (START==1) && /NEEDED/ { -@@ -111,7 +114,7 @@ for f in $liblist $exelist ; do +@@ -110,7 +114,7 @@ for f in $liblist $exelist ; do sub(/:/, "", $3); LIBNAME=$3; } @@ -224,7 +227,7 @@ print LIBNAME "(" $4 ")'$lib64'"; } ' -@@ -119,17 +122,29 @@ done | sort -u +@@ -118,17 +122,28 @@ done | sort -u # # --- Perl modules. @@ -248,9 +251,8 @@ +# +# --- Mono exes/dlls +: ${MONO_PREFIX=/usr} -+if [ -x $MONO_PREFIX/bin/mono -a -n "$monolist" ] ; then -+ printf "%s\n" "${monolist[@]}" | MONO_PATH=$MONO_PREFIX/lib${MONO_PATH:+:$MONO_PATH} prefix=$MONO_PREFIX $MONO_PREFIX/bin/mono-find-requires || echo "WARNING: MONO RPM REQUIRES WERE NOT GENERATED FOR THIS BUILD!!" 1>&2 -+fi ++[ -x $MONO_PREFIX/bin/mono -a -f $MONO_PREFIX/bin/mono-find-requires -a -n "$monolist" ] && ++ printf "%s\n" "${monolist[@]}" | MONO_PATH=$MONO_PREFIX/lib${MONO_PATH:+:$MONO_PATH} prefix=$MONO_PREFIX $MONO_PREFIX/bin/mono-find-requires + +# +# --- Kernel module imported symbols diff --git a/badforsyntax.diff b/badforsyntax.diff new file mode 100644 index 0000000..8b4716b --- /dev/null +++ b/badforsyntax.diff @@ -0,0 +1,17 @@ +This fixes a typo that caused a compiler warning [#178055]. + +Already included in rpm-4.4.7. + +Index: ./rpmdb/header_internal.c +=================================================================== +--- ./rpmdb/header_internal.c ++++ ./rpmdb/header_internal.c +@@ -22,7 +22,7 @@ char ** headerGetLangs(Header h) + if ((table = (char **)xcalloc((count+1), sizeof(char *))) == NULL) + return NULL; + +- for (i = 0, e = *s; i < count > 0; i++, e += strlen(e)+1) ++ for (i = 0, e = *s; i < count; i++, e += strlen(e)+1) + table[i] = e; + table[count] = NULL; + diff --git a/baselibs.conf b/baselibs.conf deleted file mode 100644 index bdc5343..0000000 --- a/baselibs.conf +++ /dev/null @@ -1,3 +0,0 @@ -rpm -arch ppc package rpm-devel -arch sparcv9 package rpm-devel diff --git a/brp.diff b/brp.diff index 27fe6b5..fdaf8c5 100644 --- a/brp.diff +++ b/brp.diff @@ -1,27 +1,9 @@ SUSE specific brp script patches ---- ./scripts/Makefile.am.orig 2010-12-03 12:11:57.000000000 +0000 -+++ ./scripts/Makefile.am 2011-05-11 14:31:45.000000000 +0000 -@@ -6,6 +6,7 @@ CLEANFILES = - - EXTRA_DIST = \ - brp-compress brp-python-bytecompile brp-java-gcjcompile \ -+ brp-lib64-linux brp-symlink \ - brp-strip brp-strip-comment-note brp-python-hardlink \ - brp-strip-shared brp-strip-static-archive \ - check-files check-prereqs \ -@@ -24,6 +25,7 @@ EXTRA_DIST = \ - - rpmconfig_SCRIPTS = \ - brp-compress brp-python-bytecompile brp-java-gcjcompile \ -+ brp-lib64-linux brp-symlink \ - brp-strip brp-strip-comment-note brp-python-hardlink \ - brp-strip-shared brp-strip-static-archive \ - check-files check-prereqs \ ---- ./scripts/brp-lib64-linux.orig 2011-05-11 14:30:08.000000000 +0000 -+++ ./scripts/brp-lib64-linux 2011-05-11 14:30:08.000000000 +0000 +--- ./scripts/brp-lib64-linux.orig 2005-12-15 14:04:13.000000000 +0000 ++++ ./scripts/brp-lib64-linux 2006-01-27 19:44:16.000000000 +0000 @@ -0,0 +1,42 @@ -+#!/bin/bash ++#!/bin/bash +# script checks wether package is 64-bit clean +# and also for a linker bug. (linker allows 64bit libs to link 32bit libs) +echo "sf@suse.de: if you find problems with this script, drop me a note" @@ -63,9 +45,19 @@ SUSE specific brp script patches + fi +done +exit 0 ---- ./scripts/brp-strip-comment-note.orig 2010-12-03 12:11:57.000000000 +0000 -+++ ./scripts/brp-strip-comment-note 2011-05-11 14:30:08.000000000 +0000 -@@ -16,6 +16,8 @@ esac +--- ./scripts/brp-sparc64-linux.orig 2000-06-01 00:54:36.000000000 +0000 ++++ ./scripts/brp-sparc64-linux 2005-12-15 14:05:06.000000000 +0000 +@@ -6,6 +6,7 @@ fi + files= + LC_ALL= + LANG= ++LC_TIME=POSIX + + # Move 64bit ELF objects from /lib, /usr/lib, /usr/X11R6/lib to */lib64 + # directories +--- ./scripts/brp-strip-comment-note.orig 2005-05-30 06:41:52.000000000 +0000 ++++ ./scripts/brp-strip-comment-note 2005-12-15 14:06:07.000000000 +0000 +@@ -13,6 +13,8 @@ esac # for already stripped elf files in the build root for f in `find $RPM_BUILD_ROOT -type f \( -perm -0100 -or -perm -0010 -or -perm -0001 \) -exec file {} \; | \ grep -v "^${RPM_BUILD_ROOT}/\?usr/lib/debug" | \ @@ -73,20 +65,20 @@ SUSE specific brp script patches + grep -v '/lib/modules/' | \ sed -n -e 's/^\(.*\):[ ]*ELF.*, stripped/\1/p'`; do note="-R .note" - if $OBJDUMP -h $f | grep '^[ ]*[0-9]*[ ]*.note[ ]' -A 1 | \ ---- ./scripts/brp-strip.orig 2010-12-03 12:11:57.000000000 +0000 -+++ ./scripts/brp-strip 2011-05-11 14:30:08.000000000 +0000 -@@ -15,6 +15,7 @@ esac + if objdump -h $f | grep '^[ ]*[0-9]*[ ]*.note[ ]' -A 1 | \ +--- ./scripts/brp-strip.orig 2005-05-30 06:40:24.000000000 +0000 ++++ ./scripts/brp-strip 2005-12-15 14:06:37.000000000 +0000 +@@ -13,6 +13,7 @@ esac for f in `find $RPM_BUILD_ROOT -type f \( -perm -0100 -or -perm -0010 -or -perm -0001 \) -exec file {} \; | \ grep -v "^${RPM_BUILD_ROOT}/\?usr/lib/debug" | \ grep -v ' shared object,' | \ + grep -v '/lib/modules/' | \ sed -n -e 's/^\(.*\):[ ]*ELF.*, not stripped/\1/p'`; do - $STRIP -g "$f" || : + strip -g "$f" || : done ---- ./scripts/brp-symlink.orig 2011-05-11 14:30:08.000000000 +0000 -+++ ./scripts/brp-symlink 2011-05-11 14:30:08.000000000 +0000 -@@ -0,0 +1,184 @@ +--- ./scripts/brp-symlink.orig 2005-12-15 14:06:58.000000000 +0000 ++++ ./scripts/brp-symlink 2006-01-27 19:41:58.000000000 +0000 +@@ -0,0 +1,182 @@ +#!/bin/sh + +# Task: go through the files in $RPM_BUILD_ROOT and @@ -182,9 +174,7 @@ SUSE specific brp script patches + echo " skip the files from packaging)" + exit 1 + ;; -+ *,/opt/kde3/share/doc*/HTML/*/common) # white listed for not existant -+ ;; -+ *,/usr/share/doc/kde/HTML/*/common) # white listed for not existant ++ *,/opt/kde3/share/doc/HTML/*/common) # white listed for not existant + ;; + *,/proc/*) # links pointing into /proc file system + ;; diff --git a/brpcombress.diff b/brpcombress.diff new file mode 100644 index 0000000..f46c29b --- /dev/null +++ b/brpcombress.diff @@ -0,0 +1,56 @@ +make brp-compress deal correctly with hardlinked man pages + +--- ./scripts/brp-compress.orig 2004-10-17 18:49:52.000000000 +0000 ++++ ./scripts/brp-compress 2005-12-15 14:03:58.000000000 +0000 +@@ -5,12 +5,38 @@ if [ -z "$RPM_BUILD_ROOT" -o "$RPM_BUILD + exit 0 + fi + ++LC_ALL= ++LANG= ++LC_TIME=POSIX ++ + cd $RPM_BUILD_ROOT + + # Compress man pages + COMPRESS="gzip -9 -n" + COMPRESS_EXT=.gz + ++function check_for_hard_link ++{ ++ dir=$1 ++ b=$2 ++ type=$3 ++ ++ inode=`ls -i $b | awk '{ print $1 }'` ++ others=`find $dir -type f -inum $inode` ++ for afile in $others ; do ++ [ "$afile" != "$b" ] && rm -f $afile ++ done ++ ++ case $type in ++ Z|gz) gunzip $b ;; ++ bz2) bunzip2 $b ;; ++ esac ++ ++ for afile in $others ; do ++ [ "${afile%.$type}" != "${b%.$type}" ] && ln ${b%.$type} ${afile%.$type} ++ done ++} ++ + for d in ./usr/man/man* ./usr/man/*/man* ./usr/info \ + ./usr/share/man/man* ./usr/share/man/*/man* ./usr/share/info \ + ./usr/kerberos/man ./usr/X11R6/man/man* ./usr/lib/perl5/man/man* \ +@@ -23,9 +49,9 @@ do + [ "`basename $f`" = "dir" ] && continue + + case "$f" in +- *.Z) gunzip $f; b=`echo $f | sed -e 's/\.Z$//'`;; +- *.gz) gunzip $f; b=`echo $f | sed -e 's/\.gz$//'`;; +- *.bz2) bunzip2 $f; b=`echo $f | sed -e 's/\.bz2$//'`;; ++ *.Z) gunzip $f || check_for_hard_link $d $f Z; b=`echo $f | sed -e 's/\.Z$//'`;; ++ *.gz) gunzip $f || check_for_hard_link $d $f gz; b=`echo $f | sed -e 's/\.gz$//'`;; ++ *.bz2) bunzip2 $f || check_for_hard_link $d $f bz2; b=`echo $f | sed -e 's/\.bz2$//'`;; + *) b=$f;; + esac + diff --git a/brpcompress.diff b/brpcompress.diff deleted file mode 100644 index 07e5174..0000000 --- a/brpcompress.diff +++ /dev/null @@ -1,96 +0,0 @@ ---- ./scripts/brp-compress.orig 2010-12-03 12:11:57.000000000 +0000 -+++ ./scripts/brp-compress 2011-05-11 14:44:21.000000000 +0000 -@@ -5,51 +5,78 @@ if [ -z "$RPM_BUILD_ROOT" -o "$RPM_BUILD - exit 0 - fi - -+LC_ALL= -+LANG= -+LC_TIME=POSIX -+ - cd $RPM_BUILD_ROOT - - # Compress man pages - COMPRESS="gzip -9 -n" - COMPRESS_EXT=.gz - -+function check_for_hard_link -+{ -+ dir=$1 -+ b=$2 -+ -+ inode=`ls -i $b | awk '{ print $1 }'` -+ others=`find $dir -type f -inum $inode` -+ for afile in $others ; do -+ [ "$afile" != "$b" ] && rm -f "$afile" -+ done -+ -+ case $b in -+ *.Z|*.gz) gunzip $b ;; -+ *.bz2) bunzip2 $b ;; -+ *.xz|*.lzma) unxz $b ;; -+ esac -+ -+ type=${b##*.} -+ for afile in $others ; do -+ [ "${afile%.$type}" != "${b%.$type}" ] && ln ${b%.$type} ${afile%.$type} -+ done -+} -+ - for d in ./usr/man/man* ./usr/man/*/man* ./usr/info \ - ./usr/share/man/man* ./usr/share/man/*/man* ./usr/share/info \ - ./usr/kerberos/man ./usr/X11R6/man/man* ./usr/lib/perl5/man/man* \ - ./usr/share/doc/*/man/man* ./usr/lib/*/man/man* - do - [ -d $d ] || continue -- for f in `find $d -type f ! -name dir` -+ find $d -type f ! -name dir | while read f - do - [ -f "$f" ] || continue - - case "$f" in -- *.gz|*.Z) gunzip -f $f; b=`echo $f | sed -e 's/\.\(gz\|Z\)$//'`;; -- *.bz2) bunzip2 -f $f; b=`echo $f | sed -e 's/\.bz2$//'`;; -- *.xz|*.lzma) unxz -f $f; b=`echo $f | sed -e 's/\.\(xz\|lzma\)$//'`;; -- *) b=$f;; -+ *.gz|*.Z) gunzip "$f" || check_for_hard_link $d "$f"; b=`echo $f | sed -e 's/\.\(gz\|Z\)$//'`;; -+ *.bz2) bunzip2 "$f" || check_for_hard_link $d "$f"; b=`echo $f | sed -e 's/\.bz2$//'`;; -+ *.xz|*.lzma) unxz "$f" || check_for_hard_link $d "$f"; b=`echo $f | sed -e 's/\.\(xz\|lzma\)$//'`;; -+ *) b="$f";; - esac - -- $COMPRESS $b /dev/null || { -+ $COMPRESS "$b" /dev/null || { - inode=`ls -i $b | awk '{ print $1 }'` - others=`find $d -type f -inum $inode` - if [ -n "$others" ]; then - for afile in $others ; do -- [ "$afile" != "$b" ] && rm -f $afile -+ [ "$afile" != "$b" ] && rm -f "$afile" - done -- $COMPRESS -f $b -+ $COMPRESS -f "$b" - for afile in $others ; do -- [ "$afile" != "$b" ] && ln $b$COMPRESS_EXT $afile$COMPRESS_EXT -+ [ "$afile" != "$b" ] && ln "$b$COMPRESS_EXT" "$afile$COMPRESS_EXT" - done - else -- $COMPRESS -f $b -+ $COMPRESS -f "$b" - fi - } - done - -- for f in `find $d -type l` -+ find $d -type l | while read f - do -- l=`ls -l $f | sed -e 's/.* -> //' -e 's/\.\(gz\|Z\|bz2\|xz\|lzma\)$//'` -- rm -f $f -- b=`echo $f | sed -e 's/\.\(gz\|Z\|bz2\|xz\|lzma\)$//'` -- ln -sf $l$COMPRESS_EXT $b$COMPRESS_EXT -+ l="`ls -l "$f" | sed -e 's/.* -> //' -e 's/\.\(gz\|Z\|bz2\|xz\|lzma\)$//'`" -+ rm -f "$f" -+ b="`echo "$f" | sed -e 's/\.\(gz\|Z\|bz2\|xz\|lzma\)$//'`" -+ ln -sf "$l$COMPRESS_EXT" "$b$COMPRESS_EXT" - done - done diff --git a/build.diff b/build.diff index 65d851b..b050cfd 100644 --- a/build.diff +++ b/build.diff @@ -1,64 +1,378 @@ Many changes to Makefiles/autogen and the like to make it build on SUSE systems. ---- ./configure.ac.orig 2011-05-11 14:27:32.000000000 +0000 -+++ ./configure.ac 2011-05-11 15:18:44.000000000 +0000 -@@ -850,6 +850,7 @@ arm*) RPMCANONCOLOR=0; RPMCANONARCH=arm +Index: Makefile.am +=================================================================== +--- Makefile.am.orig ++++ Makefile.am +@@ -15,7 +15,7 @@ EXTRA_DIST = CHANGES CREDITS Doxyheader + po/*.in po/*.po po/rpm.pot \ + rpm.magic rpmpopt-$(VERSION) rpmqv.c rpm.c + +-SUBDIRS = intl po misc @WITH_ZLIB_SUBDIR@ @WITH_ELFUTILS_SUBDIR@ @WITH_MAGIC_SUBDIR@ @WITH_DB_SUBDIR@ @WITH_SQLITE3_SUBDIR@ @WITH_POPT_SUBDIR@ @WITH_BEECRYPT_SUBDIR@ @WITH_NEON_SUBDIR@ lua rpmio rpmdb lib build @WITH_PYTHON_SUBDIR@ tools scripts tests doc . ++SUBDIRS = intl po misc @WITH_ZLIB_SUBDIR@ @WITH_ELFUTILS_SUBDIR@ @WITH_MAGIC_SUBDIR@ @WITH_DB_SUBDIR@ @WITH_SQLITE3_SUBDIR@ @WITH_POPT_SUBDIR@ beecrypt @WITH_NEON_SUBDIR@ @WITH_LUA_SUBDIR@ rpmio rpmdb lib build @WITH_PYTHON_SUBDIR@ tools scripts tests doc . + + INCLUDES = \ + -I$(top_srcdir)/build \ +Index: autogen.sh +=================================================================== +--- autogen.sh.orig ++++ autogen.sh +@@ -26,12 +26,12 @@ case $libtoolize in + esac + esac + +-[ "`$libtoolize --version | head -1`" != "$LTV" ] && echo "$USAGE" && exit 1 +-[ "`autoconf --version | head -1`" != "$ACV" ] && echo "$USAGE" && exit 1 +-[ "`automake --version | head -1 | sed -e 's/1\.4[a-z]/1.4/'`" != "$AMV" ] && echo "$USAGE" # && exit 1 ++#[ "`$libtoolize --version | head -1`" != "$LTV" ] && echo "$USAGE" && exit 1 ++#[ "`autoconf --version | head -1`" != "$ACV" ] && echo "$USAGE" && exit 1 ++#[ "`automake --version | head -1 | sed -e 's/1\.4[a-z]/1.4/'`" != "$AMV" ] && echo "$USAGE" # && exit 1 + + myopts= +-if [ X"$@" = X -a "X`uname -s`" = "XDarwin" -a -d /opt/local ]; then ++if [ X"$*" = X -a "X`uname -s`" = "XDarwin" -a -d /opt/local ]; then + export myopts="--prefix=/usr --disable-nls" + export CPPFLAGS="-I${myprefix}/include" + fi +@@ -43,7 +43,8 @@ if [ -d zlib ]; then + (echo "--- zlib"; cd zlib; ./autogen.sh --noconfigure "$@") + fi + if [ -d beecrypt ]; then +- (echo "--- beecrypt"; cd beecrypt; ./autogen.sh --noconfigure "$@") ++ #(echo "--- beecrypt"; cd beecrypt; ./autogen.sh --noconfigure "$@") ++ (echo "--- beecrypt"; cd beecrypt; ./autogen.sh --without-cplusplus --without-java --without-python "$@") + fi + if [ -d elfutils ]; then + (echo "--- elfutils"; cd elfutils; ./autogen.sh --noconfigure "$@") +@@ -54,6 +55,7 @@ fi + if [ -d neon ]; then + (echo "--- neon"; cd neon; ./autogen.sh "$@") + fi ++(echo "--- db"; cd db/dist; libtoolize --copy --force ; cp /usr/share/aclocal/libtool.m4 aclocal/libtool.ac ; ./s_config ) + + echo "--- rpm" + $libtoolize --copy --force +@@ -66,7 +68,7 @@ if [ "$1" = "--noconfigure" ]; then + exit 0; + fi + +-if [ X"$@" = X -a "X`uname -s`" = "XLinux" ]; then ++if [ X"$*" = X -a "X`uname -s`" = "XLinux" ]; then + if [ -d /usr/share/man ]; then + mandir=/usr/share/man + infodir=/usr/share/info +Index: build/Makefile.am +=================================================================== +--- build/Makefile.am.orig ++++ build/Makefile.am +@@ -22,7 +22,7 @@ pkgincdir = $(pkgincludedir) + pkginc_HEADERS = rpmbuild.h rpmfc.h rpmfile.h rpmspec.h + noinst_HEADERS = buildio.h + +-LDFLAGS = -L$(RPM_BUILD_ROOT)$(usrlibdir) -L$(DESTDIR)$(usrlibdir) ++LDFLAGS = + + usrlibdir = $(libdir)@MARK64@ + usrlib_LTLIBRARIES = librpmbuild.la +Index: configure.ac +=================================================================== +--- configure.ac.orig ++++ configure.ac +@@ -1,30 +1,3 @@ +- +-echo " +-**************************************************************************** +-* * +-* *** WARNING WARNING WARNING *** * +-* * +-* This is source code from the development branch of rpm-4.4.2. * +-* * +-* If you want the "production" rpm-4.3.3 code, then you should use a * +-* rpm-4.3.3 src.rpm. Alternatively, if using a CVS checkout, do * +-* the following: * +-* * +-* cvs -d :pserver:anonymous@cvs.rpm.org:/cvs/devel login * +-* (no password, just carriage return) * +-* cvs -d :pserver:anonymous@cvs.rpm.org:/cvs/devel get rpm * +-* cd rpm * +-* * +-* Here's the rpm-4_3 branch, latest is rpm-4.3.3: * +-* cvs up -r rpm-4_3 * +-* * +-* Here's the rpm-4_2 branch, latest is rpm-4.2.3: * +-* cvs up -r rpm-4_2 * +-* * +-**************************************************************************** +-" +-sleep 10 +- + AC_PREREQ(2.59) + AC_INIT(rpm, 4.4.2, rpm-devel@lists.dulug.duke.edu) + AC_CANONICAL_TARGET +@@ -34,10 +7,9 @@ AM_CONFIG_HEADER([config.h]) + AM_INIT_AUTOMAKE([foreign]) + + dnl Set of available languages. +-ALL_LINGUAS="cs da de fi fr gl is ja ko no pl pt pt_BR ro ru sk sl sr sv tr" ++ALL_LINGUAS="cs da de fi fr gl is ja ko nb pl pt pt_BR ro ru sk sl sr sv tr" + + dnl Checks for programs. +-AC_PROG_CXX + AC_PROG_AWK + AC_PROG_CC + AC_PROG_CPP +@@ -310,7 +282,7 @@ WITH_ZLIB_INCLUDE= + WITH_ZLIB_LIB= + if test -d zlib ; then + WITH_ZLIB_SUBDIR=zlib +- addlib \${top_builddir}/zlib ++ # addlib \${top_builddir}/zlib + WITH_ZLIB_INCLUDE="-I\${top_srcdir}/${WITH_ZLIB_SUBDIR}" + INCPATH="$INCPATH -I\${top_srcdir}/${WITH_ZLIB_SUBDIR}" + WITH_ZLIB_LIB="\${top_builddir}/${WITH_ZLIB_SUBDIR}/libz.la" +@@ -350,9 +322,9 @@ AC_SUBST(WITH_BZIP2) + localdone= + + dirs=$prefix +-if test "$cross_compiling" != "yes"; then +- dirs="$dirs /usr/local" +-fi ++#if test "$cross_compiling" != "yes"; then ++# dirs="$dirs /usr/local" ++#fi + for dir in $dirs + do + case $dir in +@@ -463,7 +435,7 @@ AC_CHECK_HEADER([gelf.h], [ + AC_DEFINE(HAVE_LIBELF, 1, [Define to 1 if you have the 'elf' library (-lelf).]) + WITH_ELFUTILS_SUBDIR=elfutils + WITH_LIBELF_INCLUDE="-I\${top_srcdir}/${WITH_ELFUTILS_SUBDIR}/libelf" +- WITH_LIBELF_LIB="\${top_builddir}/${WITH_ELFUTILS_SUBDIR}/libelf/libelf.a" ++ WITH_LIBELF_LIB="\${top_builddir}/${WITH_ELFUTILS_SUBDIR}/libelf/libelf_pic.a" + fi + ]) + AC_SUBST(WITH_ELFUTILS_SUBDIR) +@@ -504,7 +476,8 @@ AC_CHECK_HEADER([beecrypt/beecrypt.h], [ + AC_DEFINE(HAVE_LIBBEECRYPT, 1, [Define to 1 if you have the 'beecrypt' library (-lbeecrypt).]) + WITH_BEECRYPT_SUBDIR=beecrypt + WITH_BEECRYPT_INCLUDE="-I\${top_srcdir}/${WITH_BEECRYPT_SUBDIR}" +- WITH_BEECRYPT_LIB="\${top_builddir}/${WITH_BEECRYPT_SUBDIR}/libbeecrypt.la" ++ dnl WITH_BEECRYPT_LIB="\${top_builddir}/${WITH_BEECRYPT_SUBDIR}/libbeecrypt.la" ++ AC_DEFINE(HAVE_BEECRYPT_API_H, 1, [Define to 1 if you have the header file.]) + fi + ]) + AC_SUBST(WITH_BEECRYPT_SUBDIR) +@@ -648,6 +621,9 @@ dnl AmigaOS and IXEmul have a fork() dum + esac + + AM_GNU_GETTEXT ++AM_GNU_GETTEXT_VERSION(0.11.2) ++MKINSTALLDIRS="\$(top_builddir)/./mkinstalldirs" ++AC_SUBST(MKINSTALLDIRS) + dnl TVM: + dnl horrible *temporary* hack to make sure that if we found gettext() in + dnl -lintl that we add -lintl *back* to $LIBS. +@@ -943,54 +919,74 @@ withval=auto + AC_ARG_WITH(python, [ --with-python build rpm python bindings ]) + + WITH_PYTHON_VERSION=$withval +-if test $withval = auto ; then + ++if test "$WITH_PYTHON_VERSION" = auto ; then ++AC_MSG_CHECKING(for python 2.5) ++AC_RUN_IFELSE([AC_LANG_SOURCE([[ ++#include ++main() { ++ exit(strncmp("2.5", PY_VERSION, 3)); ++} ]])],[withval=yes],[withval=no],[withval=yes]) ++AC_MSG_RESULT($withval) ++if test $withval = yes ; then ++ WITH_PYTHON_VERSION="2.5" ++fi ++fi ++ ++if test "$WITH_PYTHON_VERSION" = auto ; then + AC_MSG_CHECKING(for python 2.4) + AC_RUN_IFELSE([AC_LANG_SOURCE([[ + #include + main() { + exit(strncmp("2.4", PY_VERSION, 3)); + } ]])],[withval=yes],[withval=no],[withval=yes]) +- AC_MSG_RESULT($withval) +- if test $withval = yes ; then +- WITH_PYTHON_VERSION="2.4" +- else +- +- AC_MSG_CHECKING(for python 2.3) +- AC_RUN_IFELSE([AC_LANG_SOURCE([[ +- #include +- main() { +- exit(strncmp("2.3", PY_VERSION, 3)); +- } ]])],[withval=yes],[withval=no],[withval=yes]) +- AC_MSG_RESULT($withval) +- if test $withval = yes ; then +- WITH_PYTHON_VERSION="2.3" +- else +- +- AC_MSG_CHECKING(for python 2.2) +- AC_RUN_IFELSE([AC_LANG_SOURCE([[ +- #include +- main() { +- exit(strncmp("2.2", PY_VERSION, 3)); +- } ]])],[withval=yes],[withval=no],[withval=yes]) +- AC_MSG_RESULT($withval) +- if test $withval = yes ; then +- WITH_PYTHON_VERSION="2.2" +- else +- +- AC_MSG_CHECKING(for python 1.5.2) +- AC_RUN_IFELSE([AC_LANG_SOURCE([[ +- #include +- main() { +- exit(strcmp("1.5.2", PY_VERSION)); +- } ]])],[withval=yes],[withval=no],[withval=yes]) +- AC_MSG_RESULT($withval) +- if test $withval = yes ; then +- WITH_PYTHON_VERSION="1.5" +- fi +- fi +- fi +- fi ++AC_MSG_RESULT($withval) ++if test $withval = yes ; then ++ WITH_PYTHON_VERSION="2.4" ++fi ++fi ++ ++if test "$WITH_PYTHON_VERSION" = auto ; then ++AC_MSG_CHECKING(for python 2.3) ++AC_RUN_IFELSE([AC_LANG_SOURCE([[ ++#include ++main() { ++ exit(strncmp("2.3", PY_VERSION, 3)); ++} ]])],[withval=yes],[withval=no],[withval=yes]) ++AC_MSG_RESULT($withval) ++if test $withval = yes ; then ++ WITH_PYTHON_VERSION="2.3" ++fi ++fi ++ ++if test "$WITH_PYTHON_VERSION" = auto ; then ++AC_MSG_CHECKING(for python 2.2) ++AC_RUN_IFELSE([AC_LANG_SOURCE([[ ++#include ++main() { ++ exit(strncmp("2.2", PY_VERSION, 3)); ++} ]])],[withval=yes],[withval=no],[withval=yes]) ++AC_MSG_RESULT($withval) ++if test $withval = yes ; then ++ WITH_PYTHON_VERSION="2.2" ++fi ++fi ++ ++if test "$WITH_PYTHON_VERSION" = auto ; then ++AC_MSG_CHECKING(for python 1.5.2) ++AC_RUN_IFELSE([AC_LANG_SOURCE([[ ++#include ++main() { ++ exit(strcmp("1.5.2", PY_VERSION)); ++} ]])],[withval=yes],[withval=no],[withval=yes]) ++AC_MSG_RESULT($withval) ++if test $withval = yes ; then ++ WITH_PYTHON_VERSION="1.5" ++fi ++fi ++ ++if test "$WITH_PYTHON_VERSION" = auto ; then ++ WITH_PYTHON_VERSION=no + fi + + if test "$WITH_PYTHON_VERSION" != no ; then +@@ -1283,6 +1279,7 @@ arm*) RPMCANONCOLOR=0; RPMCANONARCH="${ mipsel*) RPMCANONCOLOR=0; RPMCANONARCH=mipsel ;; mips*) RPMCANONCOLOR=0; RPMCANONARCH=mips ;; m68k*) RPMCANONCOLOR=0; RPMCANONARCH=m68k ;; +parisc*|hppa*) RPMCANONCOLOR=0; RPMCANONARCH=hppa ;; - sh3*) RPMCANONCOLOR=0; RPMCANONARCH=sh3 ;; - sh4*) RPMCANONCOLOR=0; RPMCANONARCH=sh4 ;; *) RPMCANONCOLOR=0; RPMCANONARCH=unknown ;; -@@ -860,6 +861,7 @@ esac + esac + case "${build_os_noversion}" in +@@ -1290,7 +1287,7 @@ mint) RPMCANONARCH=m68kmint ;; + esac RPMCANONVENDOR="$build_vendor" case "${build_vendor}" in - unknown|pc|ibm|redhat|pld|mandrake|conectiva|lvr|yellowdog|caos|suse) -+ RPMCANONVENDOR=suse +-unknown|pc|ibm|redhat|pld|mandrake|conectiva|lvr|yellowdog|caos) ++unknown|pc|ibm|redhat|pld|mandrake|conectiva|lvr|yellowdog|caos|suse) test -f /etc/redhat-release && RPMCANONVENDOR=redhat - test -f /etc/SuSE-release && RPMCANONVENDOR=suse test -f /etc/pld-release && RPMCANONVENDOR=pld -@@ -872,6 +874,9 @@ unknown|pc|ibm|redhat|pld|mandrake|conec + test -f /etc/mandrake-release && RPMCANONVENDOR=mandrake +@@ -1298,6 +1295,7 @@ unknown|pc|ibm|redhat|pld|mandrake|conec + test -f /etc/lvr-release && RPMCANONVENDOR=lvr + test -f /etc/yellowdog-release && RPMCANONVENDOR=yellowdog + test -f /etc/caos-release && RPMCANONVENDOR=caos ++ test -f /etc/SuSE-release -o -f /.buildenv && RPMCANONVENDOR=suse + ;; esac - RPMCANONOS="$host_os_noversion" - RPMCANONGNU="$host_os_gnu" -+if test "$RPMCANONVENDOR" = suse ; then -+ RPMCANONCOLOR=0 -+fi - AC_SUBST(RPMCANONCOLOR) - AC_SUBST(RPMCANONARCH) - AC_SUBST(RPMCANONVENDOR) ---- ./db3/configure.orig 2010-12-03 12:11:57.000000000 +0000 -+++ ./db3/configure 2011-05-11 15:18:44.000000000 +0000 + RPMCANONOS="$build_os_noversion" +@@ -1372,7 +1370,7 @@ dnl XXX this causes popt to depend on zl + dnl # XXX Propagate -lucb to popt ... + dnl export LIBS INCPATH CONFIG_SITE + +-AC_CONFIG_SUBDIRS(popt zlib file sqlite db3) ++AC_CONFIG_SUBDIRS(popt zlib file sqlite db3 elfutils) + + AC_CONFIG_FILES([ Doxyfile Makefile rpmrc macros platform rpmpopt rpm.spec + rpmio/Makefile rpmdb/Makefile lib/Makefile build/Makefile +Index: db3/configure +=================================================================== +--- db3/configure.orig ++++ db3/configure @@ -10,9 +10,9 @@ rm -f config.cache # XXX edit CFLAGS= ... out of invocation args ??? - ARGS="`echo $* | sed -e 's% [^ ]*CFLAGS=[^ ]*%%' -e 's% -[^-][^ ]*%%g' -e 's% --param=[^ ]*%%g' -e 's%--cache-file=.*$%%'`" + ARGS="`echo $* | sed -e 's% [^ ]*CFLAGS=[^ ]*%%' -e 's% -[^-][^ ]*%%g' -e 's%--cache-file=.*$%%'`" -CC="$CC" CFLAGS="$CFLAGS" $db_dist/configure $ARGS \ -+CC="$CC" CFLAGS="$CFLAGS" $db_dist/configure \ - --enable-shared --enable-static \ +- --enable-shared --enable-static --enable-rpc \ - --with-uniquename=_rpmdb --srcdir=$db_dist ++CC="$CC" CFLAGS="$CFLAGS" $db_dist/configure \ ++ --enable-shared --enable-static \ + --with-uniquename=_rpmdb --srcdir=$db_dist $ARGS mv Makefile Makefile.orig cat Makefile.orig | sed -e '/^install[:-]/c\ ---- ./installplatform.orig 2010-12-03 12:11:57.000000000 +0000 -+++ ./installplatform 2011-05-11 15:18:44.000000000 +0000 -@@ -47,9 +47,9 @@ for SUBST in $SUBSTS ; do - ARCH_INSTALL_POST='%{nil}' - case "${ARCH}-${OS}" in - sparc64*-linux) LIB=lib64 ;; -- s390x-linux) LIB=lib64 ;; -- ppc64-linux|powerpc64-linux) LIB=lib64 ;; -- x86_64-linux|amd64-linux|ia32e-linux) LIB=lib64 ;; -+ s390x-linux) ARCH_INSTALL_POST=${pkglibdir}/brp-lib64-linux ; LIB=lib64 ;; -+ ppc64-linux|powerpc64-linux) ARCH_INSTALL_POST=${pkglibdir}/brp-lib64-linux ; LIB=lib64 ;; -+ x86_64-linux|amd64-linux|ia32e-linux) ARCH_INSTALL_POST=${pkglibdir}/brp-lib64-linux ; LIB=lib64 ;; - *) LIB=lib;; +Index: file/src/Makefile.am +=================================================================== +--- file/src/Makefile.am.orig ++++ file/src/Makefile.am +@@ -26,7 +26,7 @@ libmagic_la_LDFLAGS = -version-info 1:0: + + noinst_PROGRAMS = file + file_SOURCES = file.c +-file_LDFLAGS = -L../../zlib # -all-static ++file_LDFLAGS = # -L../../zlib # -all-static + file_LDADD = libmagic.la + + listobjs: +Index: installplatform +=================================================================== +--- installplatform.orig ++++ installplatform +@@ -62,11 +62,11 @@ for SUBST in $SUBSTS ; do + sparcv9-linux) MULTILIBNO=1 ;; + sparc64-linux) ARCH_INSTALL_POST=${pkglibdir}/brp-sparc64-linux; LIB=lib64; MULTILIBNO=2 ;; + s390-linux) MULTILIBNO=1 ;; +- s390x-linux) LIB=lib64; MULTILIBNO=2 ;; ++ s390x-linux) ARCH_INSTALL_POST=${pkglibdir}/brp-lib64-linux; LIB=lib64; MULTILIBNO=2 ;; + ppc-linux) MULTILIBNO=1 ;; +- ppc64-linux) LIB=lib64; MULTILIBNO=2 ;; ++ ppc64-linux) ARCH_INSTALL_POST=${pkglibdir}/brp-lib64-linux; LIB=lib64; MULTILIBNO=2 ;; + i?86-linux|pentium?-linux|athlon-linux) MULTILIBNO=1 ;; +- x86_64-linux|amd64-linux|ia32e-linux) LIB=lib64; MULTILIBNO=2 ;; ++ x86_64-linux|amd64-linux|ia32e-linux) ARCH_INSTALL_POST=${pkglibdir}/brp-lib64-linux; LIB=lib64; MULTILIBNO=2 ;; esac -@@ -129,6 +129,9 @@ for SUBST in $SUBSTS ; do + if [ -n "$MULTILIBNO" ]; then +@@ -96,6 +96,9 @@ for SUBST in $SUBSTS ; do apple) VENDORSED='-e s,^@apple@,,' ;; @@ -67,4 +381,194 @@ on SUSE systems. + ;; esac - CANONARCH="`echo $ARCH|sed -e "$canonarch_sed"`" + cat $PLATFORM \ +Index: lib/Makefile.am +=================================================================== +--- lib/Makefile.am.orig ++++ lib/Makefile.am +@@ -29,7 +29,7 @@ noinst_HEADERS = \ + mylibs = librpm.la + LIBS = + +-LDFLAGS = -L$(RPM_BUILD_ROOT)$(usrlibdir) -L$(DESTDIR)$(usrlibdir) ++LDFLAGS = + + usrlibdir = $(libdir)@MARK64@ + usrlib_LTLIBRARIES = librpm.la +Index: po/Makefile.in +=================================================================== +--- po/Makefile.in.orig ++++ po/Makefile.in +@@ -29,7 +29,7 @@ gettextsrcdir = $(datadir)/gettext/po + INSTALL = /usr/bin/install -c + INSTALL_DATA = ${INSTALL} -m 644 + MKINSTALLDIRS = $(top_builddir)/./mkinstalldirs +-mkinstalldirs = $(SHELL) `case "$(MKINSTALLDIRS)" in /*) echo "$(MKINSTALLDIRS)" ;; *) echo "$(top_builddir)/mkinstalldirs" ;; esac` ++mkinstalldirs = $(SHELL) $(MKINSTALLDIRS) + + CC = gcc + GMSGFMT = /usr/bin/msgfmt +Index: po/Makefile.in.in +=================================================================== +--- po/Makefile.in.in.orig ++++ po/Makefile.in.in +@@ -29,7 +29,7 @@ gettextsrcdir = $(datadir)/gettext/po + INSTALL = @INSTALL@ + INSTALL_DATA = @INSTALL_DATA@ + MKINSTALLDIRS = @MKINSTALLDIRS@ +-mkinstalldirs = $(SHELL) `case "$(MKINSTALLDIRS)" in /*) echo "$(MKINSTALLDIRS)" ;; *) echo "$(top_builddir)/mkinstalldirs" ;; esac` ++mkinstalldirs = $(SHELL) $(MKINSTALLDIRS) + + CC = @CC@ + GMSGFMT = @GMSGFMT@ +Index: popt/autogen.sh +=================================================================== +--- popt/autogen.sh.orig ++++ popt/autogen.sh +@@ -28,7 +28,7 @@ fi + + cd "$THEDIR" + +-if [ X"$@" = X -a "X`uname -s`" = "XLinux" ]; then ++if [ X"$*" = X -a "X`uname -s`" = "XLinux" ]; then + $srcdir/configure --prefix=/usr "$@" + else + $srcdir/configure "$@" +Index: popt/configure.ac +=================================================================== +--- popt/configure.ac.orig ++++ popt/configure.ac +@@ -1,11 +1,12 @@ + AC_INIT(popt.h) + AC_CANONICAL_SYSTEM + AC_PREREQ(2.12) +-AC_CONFIG_HEADERS + AM_INIT_AUTOMAKE(popt, 1.10.2) + AM_CONFIG_HEADER(config.h) + +-ALL_LINGUAS="cs da de es eu_ES fi fr gl hu id is it ja ko no pl pt pt_BR ro ru sk sl sr sv tr uk wa zh zh_CN zh_TW" ++ALL_LINGUAS="cs da de es eu_ES fi fr gl hu id is it ja ko nb pl pt pt_BR ro ru sk sl sr sv tr uk wa zh zh_CN zh_TW" ++MKINSTALLDIRS="\$(top_builddir)/./mkinstalldirs" ++AC_SUBST(MKINSTALLDIRS) + + AC_ISC_POSIX + +Index: popt/po/Makefile.in +=================================================================== +--- popt/po/Makefile.in.orig ++++ popt/po/Makefile.in +@@ -29,7 +29,7 @@ gettextsrcdir = $(datadir)/gettext/po + INSTALL = /usr/bin/install -c + INSTALL_DATA = ${INSTALL} -m 644 + MKINSTALLDIRS = $(top_builddir)/./../mkinstalldirs +-mkinstalldirs = $(SHELL) `case "$(MKINSTALLDIRS)" in /*) echo "$(MKINSTALLDIRS)" ;; *) echo "$(top_builddir)/mkinstalldirs" ;; esac` ++mkinstalldirs = $(SHELL) $(MKINSTALLDIRS) + + CC = gcc + GMSGFMT = /usr/bin/msgfmt +Index: popt/po/Makefile.in.in +=================================================================== +--- popt/po/Makefile.in.in.orig ++++ popt/po/Makefile.in.in +@@ -29,7 +29,7 @@ gettextsrcdir = $(datadir)/gettext/po + INSTALL = @INSTALL@ + INSTALL_DATA = @INSTALL_DATA@ + MKINSTALLDIRS = @MKINSTALLDIRS@ +-mkinstalldirs = $(SHELL) `case "$(MKINSTALLDIRS)" in /*) echo "$(MKINSTALLDIRS)" ;; *) echo "$(top_builddir)/mkinstalldirs" ;; esac` ++mkinstalldirs = $(SHELL) $(MKINSTALLDIRS) + + CC = @CC@ + GMSGFMT = @GMSGFMT@ +Index: rpmdb/Makefile.am +=================================================================== +--- rpmdb/Makefile.am.orig ++++ rpmdb/Makefile.am +@@ -31,7 +31,7 @@ noinst_HEADERS = fprint.h header_interna + pkgbindir = @RPMCONFIGDIR@ + pkgbin_PROGRAMS = \ + rpmdb_archive rpmdb_checkpoint rpmdb_deadlock rpmdb_dump rpmdb_load \ +- rpmdb_printlog rpmdb_recover rpmdb_svc rpmdb_stat rpmdb_upgrade \ ++ rpmdb_printlog rpmdb_recover rpmdb_stat rpmdb_upgrade \ + rpmdb_verify + + mylibs = librpmdb.la +@@ -42,7 +42,7 @@ LIBS = + libdb_la = $(top_builddir)/$(WITH_DB_SUBDIR)/libdb.la + + # XXX grrr, RPM_BUILD_ROOT prevents build pollution if/when -lrpm different +-LDFLAGS = -L$(RPM_BUILD_ROOT)$(usrlibdir) -L$(DESTDIR)$(usrlibdir) ++LDFLAGS = + + usrlibdir = $(libdir)@MARK64@ + usrlib_LTLIBRARIES = librpmdb.la +Index: rpmio/Makefile.am +=================================================================== +--- rpmio/Makefile.am.orig ++++ rpmio/Makefile.am +@@ -24,9 +24,9 @@ pkginc_HEADERS = \ + rpmsq.h rpmsw.h ugid.h + noinst_HEADERS = rpmio_internal.h rpmlua.h rpmhook.h + +-BEECRYPTLOBJS = $(shell test X"@WITH_BEECRYPT_SUBDIR@" != X && cat $(top_builddir)/@WITH_BEECTYPT_SUBDIR@/listobjs) ++BEECRYPTLOBJS = $(shell test X"@WITH_BEECRYPT_SUBDIR@" != X && cat $(top_builddir)/@WITH_BEECRYPT_SUBDIR@/listobjs) + +-LDFLAGS = -L$(RPM_BUILD_ROOT)$(usrlibdir) -L$(DESTDIR)$(usrlibdir) ++LDFLAGS = + + usrlibdir = $(libdir)@MARK64@ + usrlib_LTLIBRARIES = librpmio.la +@@ -41,14 +41,14 @@ librpmio_la_LDFLAGS = -release 4.4 $(LDF + @WITH_MAGIC_LIB@ \ + @WITH_ZLIB_LIB@ \ + -lpthread +-librpmio_la_LIBADD = # $(BEECRYPTLOBJS) +-librpmio_la_DEPENDENCIES = # .created ++librpmio_la_LIBADD = $(BEECRYPTLOBJS) ++librpmio_la_DEPENDENCIES = .created + + .created: + if test X"@WITH_BEECRYPT_SUBDIR@" != X; then \ + ${MAKE} -C $(top_builddir)/@WITH_BEECRYPT_SUBDIR@ listobjs ; \ + for lo in $(BEECRYPTLOBJS); do \ +- [ -f $$lo ] || $(LN_S) $(top_builddir)/@WITH_BEECRYPT_SUBDIR@/$$lo $$lo ; \ ++ [ -f $$lo ] || sed -e "s!'!'$(top_builddir)/beecrypt/!" < $(top_builddir)/beecrypt/$$lo > $$lo ; \ + done \ + fi + touch $@ +Index: scripts/Makefile.am +=================================================================== +--- scripts/Makefile.am.orig ++++ scripts/Makefile.am +@@ -6,6 +6,7 @@ EXTRA_DIST = \ + brp-compress brp-python-bytecompile brp-java-gcjcompile brp-redhat \ + brp-strip brp-strip-comment-note \ + brp-strip-shared brp-strip-static-archive brp-sparc64-linux \ ++ brp-lib64-linux brp-symlink \ + check-files check-prereqs convertrpmrc.sh cross-build \ + find-debuginfo.sh find-lang.sh find-prov.pl find-req.pl \ + cpanflute cpanflute2 Specfile.pm find-provides.perl \ +@@ -17,7 +18,8 @@ EXTRA_DIST = \ + sql.prov sql.req tcl.req tgpg trpm u_pkg.sh \ + vpkg-provides.sh vpkg-provides2.sh \ + macros.perl* macros.python* \ +- macros.php* find-*.php find-php-* ++ macros.php* find-*.php find-php-* \ ++ find-provides.ksyms find-requires.ksyms + + installprefix = $(DESTDIR) + +@@ -28,6 +30,7 @@ config_SCRIPTS = \ + brp-compress brp-python-bytecompile brp-java-gcjcompile brp-redhat \ + brp-strip brp-strip-comment-note \ + brp-strip-shared brp-strip-static-archive brp-sparc64-linux \ ++ brp-lib64-linux brp-symlink \ + check-files check-prereqs convertrpmrc.sh cross-build \ + find-debuginfo.sh find-lang.sh find-prov.pl find-req.pl \ + cpanflute cpanflute2 Specfile.pm find-provides.perl \ +@@ -36,4 +39,5 @@ config_SCRIPTS = \ + rpmdb_loadcvt rpmdiff rpmdiff.cgi \ + rpm.daily rpm.log rpm.xinetd rpm2cpio.sh \ + sql.prov sql.req tcl.req tgpg trpm u_pkg.sh \ +- vpkg-provides.sh vpkg-provides2.sh ++ vpkg-provides.sh vpkg-provides2.sh \ ++ find-provides.ksyms find-requires.ksyms diff --git a/buildidprov.diff b/buildidprov.diff deleted file mode 100644 index fd5b417..0000000 --- a/buildidprov.diff +++ /dev/null @@ -1,62 +0,0 @@ -From: Jan Blunck -Subject: Let debuginfo packages provide the build-id - -This patch lets debuginfo packages provide build-id like follows: - - debuginfo(build-id) = c63cb23876c5fa85f36beaff58f8557e1bf22517 - -Users can therefore ask zypper to install the correct debuginfo package with: - - zypper install -C "debuginfo(build-id) = c63cb23876c5fa85f36beaff58f8557e1bf22517" - ---- ./autodeps/linux.prov.orig 2011-05-11 15:58:28.000000000 +0000 -+++ ./autodeps/linux.prov 2011-05-11 15:59:31.000000000 +0000 -@@ -5,6 +5,9 @@ - IFS=$'\n' - filelist=($(cat)) - -+debuginfolist=($(printf "%s\n" "${filelist[@]}" | grep "/usr/lib/debug/")) -+filelist=($(printf "%s\n" "${filelist[@]}" | grep -v "/usr/lib/debug/")) -+ - solist=($(printf "%s\n" "${filelist[@]}" | grep "\\.so" | grep -v "^/lib/ld.so" | \ - tr '\n' '\0' | xargs -0 -r file -L | grep "ELF.*shared object" | \ - cut -d: -f1)) -@@ -71,6 +74,11 @@ done | sort -u - printf "%s\n" "${firmwarelist[@]}" | /usr/lib/rpm/firmware.prov | sort -u - - # -+# --- debuginfo files -+[ -x /usr/lib/rpm/debuginfo.prov -a -n "$debuginfolist" ] && -+ printf "%s\n" "${debuginfolist[@]}" | /usr/lib/rpm/debuginfo.prov | sort -u -+ -+# - # --- Mono exes/dlls - : ${MONO_PREFIX=/usr} - if [ -x $MONO_PREFIX/bin/mono -a -n "$monolist" ] ; then ---- ./macros.in.orig 2011-05-11 15:59:08.000000000 +0000 -+++ ./macros.in 2011-05-11 15:59:31.000000000 +0000 -@@ -182,7 +182,8 @@ - %package debuginfo\ - Summary: Debug information for package %{name}\ - Group: Development/Debug\ --AutoReqProv: 0\ -+AutoReq: 0\ -+AutoProv: 1\ - #Requires: %{?!debug_package_requires:%{name} = %{version}-%{release}}%{?debug_package_requires}\ - %description debuginfo\ - This package provides debug information for package %{name}.\ ---- ./scripts/debuginfo.prov.orig 2011-05-11 15:59:31.000000000 +0000 -+++ ./scripts/debuginfo.prov 2011-05-11 15:59:31.000000000 +0000 -@@ -0,0 +1,12 @@ -+#!/bin/sh -+ -+while read instfile ; do -+ case $instfile in -+ */usr/lib/debug/.build-id/*.debug) -+ if [ -f "$instfile" ] ; then -+ BUILDID=$(echo $instfile | sed -ne 's|.*/usr/lib/debug/.build-id/\([0-9a-f]*\)/\([0-9a-f]*\)\.debug|\1\2|p') -+ echo "debuginfo(build-id) = $BUILDID" -+ fi -+ ;; -+ esac -+done diff --git a/buildpipe.diff b/buildpipe.diff deleted file mode 100644 index 81099ed..0000000 --- a/buildpipe.diff +++ /dev/null @@ -1,29 +0,0 @@ ---- build/rpmfc.c.orig 2011-06-06 11:27:32.000000000 +0000 -+++ build/rpmfc.c 2011-06-08 10:00:38.000000000 +0000 -@@ -165,12 +165,14 @@ static int sigpipe_init(void) - fcntl(_sigpipe[1], F_SETFD, (fcntl(_sigpipe[1], F_GETFD)|FD_CLOEXEC)); - /* XXX SIGPIPE too, but NSPR disables it already, dont mess with it */ - signal(SIGCHLD, sigpipe_handler); -+ signal(SIGPIPE, SIG_IGN); - return _sigpipe[0]; - } - - static void sigpipe_finish(void) - { - signal(SIGCHLD, SIG_DFL); -+ signal(SIGPIPE, SIG_DFL); - close(_sigpipe[0]); - close(_sigpipe[1]); - _sigpipe[0] = -1; -@@ -298,10 +300,9 @@ static StringBuf getOutputFrom(ARGV_t ar - appendStringBuf(readBuff, buf); - } - -- /* Child exited, we're done */ -+ /* Child exited, we're maybe done */ - if (FD_ISSET(sigpipe, &ibits)) { - while (read(sigpipe, buf, sizeof(buf)) > 0) {}; -- break; - } - } - diff --git a/buildsubdir.diff b/buildsubdir.diff new file mode 100644 index 0000000..fc7923b --- /dev/null +++ b/buildsubdir.diff @@ -0,0 +1,24 @@ +Fix a typo: the macro is currently called %{buildsubdir} + +--- ./build/files.c.orig 2005-12-14 19:22:43.000000000 +0000 ++++ ./build/files.c 2006-02-17 13:57:25.000000000 +0000 +@@ -1942,7 +1954,7 @@ static int processPackageFiles(Spec spec + if (*pkg->fileFile == '/') { + ffn = rpmGetPath(pkg->fileFile, NULL); + } else { +- /* XXX FIXME: add %{_buildsubdir} */ ++ /* XXX FIXME: add %{buildsubdir} */ + ffn = rpmGetPath("%{_builddir}/", + (spec->buildSubdir ? spec->buildSubdir : "") , + "/", pkg->fileFile, NULL); +--- ./build/pack.c.orig 2005-07-15 15:06:57.000000000 +0000 ++++ ./build/pack.c 2005-12-18 15:14:56.000000000 +0000 +@@ -138,7 +138,7 @@ static /*@only@*/ /*@null@*/ StringBuf a + FILE * f; + FD_t fd; + +- fn = rpmGetPath("%{_builddir}/%{?_buildsubdir:%{_buildsubdir}/}", file, NULL); ++ fn = rpmGetPath("%{_builddir}/%{?buildsubdir:%{buildsubdir}/}", file, NULL); + + fd = Fopen(fn, "r.ufdio"); + if (fn != buf) fn = _free(fn); diff --git a/checkfilesnoinfodir.diff b/checkfilesnoinfodir.diff index 7a467db..48821b9 100644 --- a/checkfilesnoinfodir.diff +++ b/checkfilesnoinfodir.diff @@ -1,17 +1,15 @@ Exclude /usr/share/info/dir from check-files. Probably only interesting for SUSE. -Index: scripts/check-files -=================================================================== ---- scripts/check-files.orig -+++ scripts/check-files -@@ -22,7 +22,9 @@ LC_ALL=C sort > $FILES_RPM +--- ./scripts/check-files.orig 2005-12-15 14:07:15.000000000 +0000 ++++ ./scripts/check-files 2005-12-15 14:09:34.000000000 +0000 +@@ -21,7 +21,9 @@ find $RPM_BUILD_ROOT -type f -o -type l + LC_ALL=C sort > $FILES_RPM - diff -d "$FILES_DISK" "$FILES_RPM" | grep "^< " | cut -c3- | - while read f; do + for f in `diff -d "$FILES_DISK" "$FILES_RPM" | grep "^< " | cut -c3-`; do - echo $f | sed -e "s#^$RPM_BUILD_ROOT# #g" + if test "$RPM_BUILD_ROOT/usr/share/info/dir" != "$f" ; then -+ echo $f | sed -e "s#^$RPM_BUILD_ROOT# #g" ++ echo $f | sed -e "s#^$RPM_BUILD_ROOT# #g" + fi done diff --git a/chownwarn.diff b/chownwarn.diff index fccaa1a..c435432 100644 --- a/chownwarn.diff +++ b/chownwarn.diff @@ -1,50 +1,26 @@ -Do not abort if chown/chmod fails but the file is already correct +Warn the user if chown/fchown fails. ---- ./lib/fsm.c.orig 2011-03-02 06:46:13.000000000 +0000 -+++ ./lib/fsm.c 2011-05-10 16:30:55.000000000 +0000 -@@ -1449,6 +1449,11 @@ static int fsmRename(FSM_t fsm) - static int fsmChown(FSM_t fsm) - { - int rc = chown(fsm->path, fsm->sb.st_uid, fsm->sb.st_gid); -+ if (rc < 0) { -+ struct stat st; -+ if (lstat(fsm->path, &st) == 0 && st.st_uid == fsm->sb.st_uid && st.st_gid == fsm->sb.st_gid) +--- ./lib/fsm.c.orig 2005-12-14 20:08:04.000000000 +0000 ++++ ./lib/fsm.c 2005-12-16 18:19:37.000000000 +0000 +@@ -2186,6 +2191,10 @@ if (!(fsm->mapFlags & CPIO_ALL_HARDLINKS + break; + case FSM_CHOWN: + rc = chown(fsm->path, st->st_uid, st->st_gid); ++ if (rc < 0 && errno == EPERM) { ++ rpmMessage(RPMMESS_WARNING, "can't chown %s (%s)\n", fsm->path, strerror(errno)); + rc = 0; -+ } - if (_fsm_debug && (FSM_CHOWN & FSM_SYSCALL)) - rpmlog(RPMLOG_DEBUG, " %8s (%s, %d, %d) %s\n", fileStageString(FSM_CHOWN), - fsm->path, (int)fsm->sb.st_uid, (int)fsm->sb.st_gid, -@@ -1461,6 +1466,11 @@ static int fsmLChown(FSM_t fsm) - { - int rc = 0; - rc = lchown(fsm->path, fsm->sb.st_uid, fsm->sb.st_gid); -+ if (rc < 0) { -+ struct stat st; -+ if (lstat(fsm->path, &st) == 0 && st.st_uid == fsm->sb.st_uid && st.st_gid == fsm->sb.st_gid) ++ } + if (_fsm_debug && (stage & FSM_SYSCALL)) + rpmMessage(RPMMESS_DEBUG, " %8s (%s, %d, %d) %s\n", cur, + fsm->path, (int)st->st_uid, (int)st->st_gid, +@@ -2195,6 +2204,10 @@ if (!(fsm->mapFlags & CPIO_ALL_HARDLINKS + case FSM_LCHOWN: + #if ! CHOWN_FOLLOWS_SYMLINK + rc = lchown(fsm->path, st->st_uid, st->st_gid); ++ if (rc < 0 && errno == EPERM) { ++ rpmMessage(RPMMESS_WARNING, "can't lchown %s (%s)\n", fsm->path, strerror(errno)); + rc = 0; -+ } - if (_fsm_debug && (FSM_LCHOWN & FSM_SYSCALL)) - rpmlog(RPMLOG_DEBUG, " %8s (%s, %d, %d) %s\n", fileStageString(FSM_LCHOWN), - fsm->path, (int)fsm->sb.st_uid, (int)fsm->sb.st_gid, -@@ -1472,6 +1482,11 @@ static int fsmLChown(FSM_t fsm) - static int fsmChmod(FSM_t fsm) - { - int rc = chmod(fsm->path, (fsm->sb.st_mode & 07777)); -+ if (rc < 0) { -+ struct stat st; -+ if (lstat(fsm->path, &st) == 0 && (st.st_mode & 07777) == (fsm->sb.st_mode & 07777)) -+ rc = 0; -+ } - if (_fsm_debug && (FSM_CHMOD & FSM_SYSCALL)) - rpmlog(RPMLOG_DEBUG, " %8s (%s, 0%04o) %s\n", fileStageString(FSM_CHMOD), - fsm->path, (unsigned)(fsm->sb.st_mode & 07777), -@@ -2033,6 +2048,9 @@ if (!(fsm->mapFlags & CPIO_ALL_HARDLINKS - st->st_mtime = rpmfiFMtimeIndex(fi, fsm->ix); - rc = fsmUtime(fsm); - st->st_mtime = mtime; -+ /* utime error is not critical for directories */ -+ if (rc && S_ISDIR(st->st_mode)) -+ rc = 0; - } - #if WITH_CAP - if (!rc && !S_ISDIR(st->st_mode) && !getuid()) { ++ } + if (_fsm_debug && (stage & FSM_SYSCALL)) + rpmMessage(RPMMESS_DEBUG, " %8s (%s, %d, %d) %s\n", cur, + fsm->path, (int)st->st_uid, (int)st->st_gid, diff --git a/compress.diff b/compress.diff new file mode 100644 index 0000000..82295f3 --- /dev/null +++ b/compress.diff @@ -0,0 +1,31 @@ +Fix uncompress waitpid logic to shut up the compiler [#160434] + +--- ./file/src/compress.c.orig 2006-03-24 15:37:23.000000000 +0000 ++++ ./file/src/compress.c 2006-03-24 15:42:52.000000000 +0000 +@@ -341,6 +341,7 @@ uncompressbuf(struct magic_set *ms, int + file_error(ms, errno, "cannot create pipe"); + return 0; + } ++ pid2 = (pid_t)-1; + switch ((pid1=fork())) { + case 0: /* child */ + (void) close(0); +@@ -382,7 +383,7 @@ uncompressbuf(struct magic_set *ms, int + * fork again, to avoid blocking because both + * pipes filled + */ +- switch (fork()) { ++ switch ((pid2 = fork())) { + case 0: /* child */ + (void)close(fdout[0]); + if (swrite(fdin[1], old, n) != n) { +@@ -439,7 +440,8 @@ err: + (void) close(fdin[1]); + (void) close(fdout[0]); + waitpid(pid1, NULL, 0); +- waitpid(pid2, NULL, 0); ++ if (pid2 != (pid_t)-1) ++ waitpid(pid2, NULL, 0); + return n; + } + /*@notreached@*/ diff --git a/convertdb1static.diff b/convertdb1static.diff index 1b9e796..52caaf5 100644 --- a/convertdb1static.diff +++ b/convertdb1static.diff @@ -1,369 +1,35 @@ -Build convertdb1, too. +Build convertdb1 as static binary so that it always works. ---- ./Makefile.am.orig 2011-05-11 15:15:27.000000000 +0000 -+++ ./Makefile.am 2011-05-11 15:18:21.000000000 +0000 -@@ -174,6 +174,10 @@ bin_PROGRAMS += rpmqpack - rpmqpack_SOURCES = rpmqpack.c - rpmqpack_LDADD = lib/librpm.la +diff -ur ./tools/Makefile.am ../rpm-4.4.2.orig/tools/Makefile.am +--- ./tools/Makefile.am 2006-09-21 19:35:56.000000000 +0200 ++++ ../rpm-4.4.2.orig/tools/Makefile.am 2006-09-21 20:59:01.000000000 +0200 +@@ -18,22 +18,26 @@ -+bin_PROGRAMS += convertdb1 -+convertdb1_SOURCES = tools/convertdb1.c -+convertdb1_LDADD = lib/librpm.la -+ - rpmconfig_DATA = rpmrc - rpmrc: $(top_srcdir)/rpmrc.in - @$(SED) \ ---- tools/convertdb1.c.orig 2011-05-12 13:31:37.000000000 +0000 -+++ tools/convertdb1.c 2011-05-12 13:31:28.000000000 +0000 -@@ -0,0 +1,351 @@ -+#if defined(HAVE_CONFIG_H) -+#include "system.h" -+const char *__progname; -+#else -+#include -+#include -+#include -+#endif -+ -+#include -+#include -+#include -+#include -+#include -+ -+#define FA_MAGIC 0x02050920 -+ -+struct faFileHeader{ -+ unsigned int magic; -+ unsigned int firstFree; -+}; -+ -+struct faHeader { -+ unsigned int size; -+ unsigned int freeNext; /* offset of the next free block, 0 if none */ -+ unsigned int freePrev; -+ unsigned int isFree; -+ -+ /* note that the u16's appear last for alignment/space reasons */ -+}; -+ -+ -+static int fadFileSize; -+ -+static ssize_t Pread(FD_t fd, void * buf, size_t count, off_t offset) { -+ if (Fseek(fd, offset, SEEK_SET) < 0) -+ return -1; -+ return Fread(buf, sizeof(char), count, fd); -+} -+ -+static FD_t fadOpen(const char * path) -+{ -+ struct faFileHeader newHdr; -+ FD_t fd; -+ struct stat stb; -+ -+ fd = Fopen(path, "r.fdio"); -+ if (!fd || Ferror(fd)) -+ return NULL; -+ -+ if (fstat(Fileno(fd), &stb)) { -+ Fclose(fd); -+ return NULL; -+ } -+ fadFileSize = stb.st_size; -+ -+ /* is this file brand new? */ -+ if (fadFileSize == 0) { -+ Fclose(fd); -+ return NULL; -+ } -+ if (Pread(fd, &newHdr, sizeof(newHdr), 0) != sizeof(newHdr)) { -+ Fclose(fd); -+ return NULL; -+ } -+ if (newHdr.magic != FA_MAGIC) { -+ Fclose(fd); -+ return NULL; -+ } -+ /*@-refcounttrans@*/ return fd /*@=refcounttrans@*/ ; -+} -+ -+static int fadNextOffset(FD_t fd, unsigned int lastOffset) -+{ -+ struct faHeader header; -+ int offset; -+ -+ offset = (lastOffset) -+ ? (lastOffset - sizeof(header)) -+ : sizeof(struct faFileHeader); -+ -+ if (offset >= fadFileSize) -+ return 0; -+ -+ if (Pread(fd, &header, sizeof(header), offset) != sizeof(header)) -+ return 0; -+ -+ if (!lastOffset && !header.isFree) -+ return (offset + sizeof(header)); -+ -+ do { -+ offset += header.size; -+ -+ if (Pread(fd, &header, sizeof(header), offset) != sizeof(header)) -+ return 0; -+ -+ if (!header.isFree) break; -+ } while (offset < fadFileSize && header.isFree); -+ -+ if (offset < fadFileSize) { -+ /* Sanity check this to make sure we're not going in loops */ -+ offset += sizeof(header); -+ -+ if (offset <= lastOffset) return -1; -+ -+ return offset; -+ } else -+ return 0; -+} -+ -+static int fadFirstOffset(FD_t fd) -+{ -+ return fadNextOffset(fd, 0); -+} -+ -+/*@-boundsread@*/ -+static int dncmp(const void * a, const void * b) -+ /*@*/ -+{ -+ const char *const * first = a; -+ const char *const * second = b; -+ return strcmp(*first, *second); -+} -+/*@=boundsread@*/ -+ -+static void compressFilelist(Header h) -+{ -+ struct rpmtd_s fileNames; -+ char ** dirNames; -+ const char ** baseNames; -+ uint32_t * dirIndexes; -+ rpm_count_t count; -+ int xx, i; -+ int dirIndex = -1; -+ -+ /* -+ * This assumes the file list is already sorted, and begins with a -+ * single '/'. That assumption isn't critical, but it makes things go -+ * a bit faster. -+ */ -+ -+ if (headerIsEntry(h, RPMTAG_DIRNAMES)) { -+ xx = headerDel(h, RPMTAG_OLDFILENAMES); -+ return; /* Already converted. */ -+ } -+ -+ if (!headerGet(h, RPMTAG_OLDFILENAMES, &fileNames, HEADERGET_MINMEM)) -+ return; -+ count = rpmtdCount(&fileNames); -+ if (count < 1) -+ return; -+ -+ dirNames = xmalloc(sizeof(*dirNames) * count); /* worst case */ -+ baseNames = xmalloc(sizeof(*dirNames) * count); -+ dirIndexes = xmalloc(sizeof(*dirIndexes) * count); -+ -+ /* HACK. Source RPM, so just do things differently */ -+ { const char *fn = rpmtdGetString(&fileNames); -+ if (fn && *fn != '/') { -+ dirIndex = 0; -+ dirNames[dirIndex] = xstrdup(""); -+ while ((i = rpmtdNext(&fileNames)) >= 0) { -+ dirIndexes[i] = dirIndex; -+ baseNames[i] = rpmtdGetString(&fileNames); -+ } -+ goto exit; -+ } -+ } -+ -+ while ((i = rpmtdNext(&fileNames)) >= 0) { -+ char ** needle; -+ char savechar; -+ char * baseName; -+ size_t len; -+ const char *filename = rpmtdGetString(&fileNames); -+ -+ if (filename == NULL) /* XXX can't happen */ -+ continue; -+ baseName = strrchr(filename, '/') + 1; -+ len = baseName - filename; -+ needle = dirNames; -+ savechar = *baseName; -+ *baseName = '\0'; -+ if (dirIndex < 0 || -+ (needle = bsearch(&filename, dirNames, dirIndex + 1, sizeof(dirNames[0]), dncmp)) == NULL) { -+ char *s = xmalloc(len + 1); -+ rstrlcpy(s, filename, len + 1); -+ dirIndexes[i] = ++dirIndex; -+ dirNames[dirIndex] = s; -+ } else -+ dirIndexes[i] = needle - dirNames; -+ -+ *baseName = savechar; -+ baseNames[i] = baseName; -+ } -+ -+exit: -+ if (count > 0) { -+ headerPutUint32(h, RPMTAG_DIRINDEXES, dirIndexes, count); -+ headerPutStringArray(h, RPMTAG_BASENAMES, baseNames, count); -+ headerPutStringArray(h, RPMTAG_DIRNAMES, -+ (const char **) dirNames, dirIndex + 1); -+ } -+ -+ rpmtdFreeData(&fileNames); -+ for (i = 0; i <= dirIndex; i++) { -+ free(dirNames[i]); -+ } -+ free(dirNames); -+ free(baseNames); -+ free(dirIndexes); -+ -+ xx = headerDel(h, RPMTAG_OLDFILENAMES); -+} -+ -+/* -+ * Up to rpm 3.0.4, packages implicitly provided their own name-version-release. -+ * Retrofit an explicit "Provides: name = epoch:version-release. -+ */ -+static void providePackageNVR(Header h) -+{ -+ const char *name; -+ char *pEVR; -+ rpmsenseFlags pFlags = RPMSENSE_EQUAL; -+ int bingo = 1; -+ struct rpmtd_s pnames; -+ rpmds hds, nvrds; -+ -+ /* Generate provides for this package name-version-release. */ -+ pEVR = headerGetEVR(h, &name); -+ if (!(name && pEVR)) -+ return; -+ -+ /* -+ * Rpm prior to 3.0.3 does not have versioned provides. -+ * If no provides at all are available, we can just add. -+ */ -+ if (!headerGet(h, RPMTAG_PROVIDENAME, &pnames, HEADERGET_MINMEM)) { -+ goto exit; -+ } -+ -+ /* -+ * Otherwise, fill in entries on legacy packages. -+ */ -+ if (!headerIsEntry(h, RPMTAG_PROVIDEVERSION)) { -+ while (rpmtdNext(&pnames) >= 0) { -+ rpmsenseFlags fdummy = RPMSENSE_ANY; -+ -+ headerPutString(h, RPMTAG_PROVIDEVERSION, ""); -+ headerPutUint32(h, RPMTAG_PROVIDEFLAGS, &fdummy, 1); -+ } -+ goto exit; -+ } -+ -+ /* see if we already have this provide */ -+ hds = rpmdsNew(h, RPMTAG_PROVIDENAME, 0); -+ nvrds = rpmdsSingle(RPMTAG_PROVIDENAME, name, pEVR, pFlags); -+ if (rpmdsFind(hds, nvrds) >= 0) { -+ bingo = 0; -+ } -+ rpmdsFree(hds); -+ rpmdsFree(nvrds); -+ -+exit: -+ if (bingo) { -+ const char *evr = pEVR; -+ headerPutString(h, RPMTAG_PROVIDENAME, name); -+ headerPutString(h, RPMTAG_PROVIDEVERSION, evr); -+ headerPutUint32(h, RPMTAG_PROVIDEFLAGS, &pFlags, 1); -+ } -+ rpmtdFreeData(&pnames); -+ free(pEVR); -+} -+/*@=bounds@*/ -+ -+static rpmdb db; -+ -+int -+main(int argc, char ** argv) -+{ -+ FD_t fd; -+ int offset; -+ Header h; -+ const char *name; -+ const char *version; -+ const char *release; -+ rpmts ts; -+ -+ if (argc != 2) -+ { -+ fprintf(stderr, "usage: %s \n", argv[0]); -+ exit(1); -+ } -+ if ((fd = fadOpen(argv[1])) == 0) -+ { -+ fprintf(stderr, "could not open %s\n", argv[1]); -+ exit(1); -+ } -+ rpmInitMacros(NULL, "/usr/lib/rpm/macros"); -+ -+ /* speed things up */ -+ (void) rpmDefineMacro(NULL, "_rpmdb_rebuild %{nil}", -1); -+ -+ ts = rpmtsCreate(); -+ -+ if (rpmtsOpenDB(ts, O_RDWR)) { -+ fprintf(stderr, "could not open rpm database\n"); -+ exit(1); -+ } -+ -+ for (offset = fadFirstOffset(fd); offset; offset = fadNextOffset(fd, offset)) -+ { -+ rpmdbMatchIterator mi; -+ -+ /* have to use lseek instead of Fseek because headerRead -+ * uses low level IO -+ */ -+ if (lseek(Fileno(fd), (off_t)offset, SEEK_SET) == -1) -+ { -+ perror("lseek"); -+ continue; -+ } -+ h = headerRead(fd, HEADER_MAGIC_NO); -+ if (!h) -+ continue; -+ compressFilelist(h); -+ providePackageNVR(h); -+ headerNVR(h, &name, &version, &release); -+ mi = rpmdbInitIterator(db, RPMTAG_NAME, name, 0); -+ rpmdbSetIteratorRE(mi, RPMTAG_VERSION, RPMMIRE_DEFAULT, version); -+ rpmdbSetIteratorRE(mi, RPMTAG_RELEASE, RPMMIRE_DEFAULT, release); -+ if (rpmdbNextIterator(mi)) -+ { -+ printf("%s-%s-%s is already in database\n", name, version, release); -+ rpmdbFreeIterator(mi); -+ headerFree(h); -+ continue; -+ } -+ rpmdbFreeIterator(mi); -+ if (rpmtsHeaderAddDB(ts, h)) -+ { -+ fprintf(stderr, "could not add %s-%s-%s!\n", name, version, release); -+ } -+ headerFree(h); -+ } -+ Fclose(fd); -+ rpmtsCloseDB(ts); -+ rpmtsFree(ts); -+ return 0; -+} -+ + EXTRA_DIST = rpminject.c rpmsort.c rpmxml.c rpmxp.c rpmxp.h hashtab.h + +-EXTRA_PROGRAMS = debugedit convertdb1 rpminject rpmsort rpmtool rpmxml ++EXTRA_PROGRAMS = rpminject rpmsort rpmtool rpmxml + + LDADD = \ + $(top_builddir)/lib/librpm.la + +-staticLDFLAGS = @LDFLAGS_STATIC@ @LDFLAGS_NPTL@ ++staticLDFLAGS = @LDFLAGS_STATIC@ # @LDFLAGS_NPTL@ + + noinst_PROGRAMS = dumpdb + + pkgbindir = @RPMCONFIGDIR@ +-pkgbin_PROGRAMS = @WITH_LIBDWARF_DEBUGEDIT@ javadeps rpmcache rpmdeps rpmfile ++pkgbin_PROGRAMS = debugedit javadeps rpmcache rpmdeps rpmfile convertdb1 + MAGIC = $(pkgbindir)/magic + + bin_PROGRAMS = rpmgraph + + convertdb1_SOURCES = convertdb1.c ++convertdb1_LDFLAGS = $(staticLDFLAGS) ++convertdb1_LDADD = \ ++ $(top_builddir)/lib/librpm.la \ ++ @WITH_LIBELF_LIB@ + + debugedit_SOURCES = debugedit.c hashtab.c + debugedit_LDADD = @LDFLAGS_STATIC@ \ diff --git a/db-4.8.30.tar.bz2 b/db-4.8.30.tar.bz2 deleted file mode 100644 index b0fa0be..0000000 --- a/db-4.8.30.tar.bz2 +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:2ba998b7451758928011878514c78b8a6f0fbfd49ebf5cc9f4269f4666414ab4 -size 19969243 diff --git a/db.diff b/db.diff index 0d389f0..121ae44 100644 --- a/db.diff +++ b/db.diff @@ -1,82 +1,111 @@ ---- db/db/db.c.orig 2010-04-12 20:25:22.000000000 +0000 -+++ db/db/db.c 2011-05-12 11:38:59.000000000 +0000 -@@ -646,6 +646,8 @@ __env_mpool(dbp, fname, flags) - MAKE_INMEM(dbp); +--- db/db/db.c.orig 2004-11-11 15:58:46.000000000 +0000 ++++ db/db/db.c 2005-12-15 16:17:45.000000000 +0000 +@@ -591,6 +591,8 @@ __db_dbenv_mpool(dbp, fname, flags) + (F_ISSET(dbp, DB_AM_NOT_DURABLE) ? DB_TXN_NOT_DURABLE : 0), + 0, dbp->pgsize)) != 0) return (ret); - } + if (LF_ISSET(DB_NOFSYNC) && mpf->mfp) + F_SET(mpf->mfp, MP_NOFSYNC); - /* - * Set the open flag. We use it to mean that the dbp has gone ---- db/db/db_iface.c.orig 2010-04-12 20:25:22.000000000 +0000 -+++ db/db/db_iface.c 2011-05-12 11:21:32.000000000 +0000 -@@ -1230,6 +1230,7 @@ __db_open_arg(dbp, txn, fname, dname, ty + return (0); + } +--- db/db/db_iface.c.orig 2004-10-16 01:31:54.000000000 +0000 ++++ db/db/db_iface.c 2005-12-15 16:17:45.000000000 +0000 +@@ -1068,7 +1068,7 @@ __db_open_arg(dbp, txn, fname, dname, ty #define OKFLAGS \ - (DB_AUTO_COMMIT | DB_CREATE | DB_EXCL | DB_FCNTL_LOCKING | \ - DB_MULTIVERSION | DB_NOMMAP | DB_NO_AUTO_COMMIT | DB_RDONLY | \ -+ DB_NOFSYNC | \ - DB_RDWRMASTER | DB_READ_UNCOMMITTED | DB_THREAD | DB_TRUNCATE) - if ((ret = __db_fchk(env, "DB->open", flags, OKFLAGS)) != 0) + (DB_AUTO_COMMIT | DB_CREATE | DB_DIRTY_READ | DB_EXCL | \ + DB_FCNTL_LOCKING | DB_NO_AUTO_COMMIT | DB_NOMMAP | DB_RDONLY | \ +- DB_RDWRMASTER | DB_THREAD | DB_TRUNCATE | DB_WRITEOPEN) ++ DB_RDWRMASTER | DB_THREAD | DB_TRUNCATE | DB_WRITEOPEN | DB_NOFSYNC) + if ((ret = __db_fchk(dbenv, "DB->open", flags, OKFLAGS)) != 0) return (ret); ---- db/dbinc/mp.h.orig 2010-04-12 20:25:22.000000000 +0000 -+++ db/dbinc/mp.h 2011-05-12 12:01:32.000000000 +0000 -@@ -467,6 +467,7 @@ struct __mpoolfile { + if (LF_ISSET(DB_EXCL) && !LF_ISSET(DB_CREATE)) +--- db/dbinc/db.in.orig 2004-10-16 01:31:54.000000000 +0000 ++++ db/dbinc/db.in 2005-12-15 16:17:45.000000000 +0000 +@@ -260,6 +260,7 @@ struct __db_dbt { + #define DB_FCNTL_LOCKING 0x0002000 /* UNDOC: fcntl(2) locking. */ + #define DB_RDWRMASTER 0x0004000 /* UNDOC: allow subdb master open R/W */ + #define DB_WRITEOPEN 0x0008000 /* UNDOC: open with write lock. */ ++#define DB_NOFSYNC 0x0010000 /* UNDOC: don't fsync */ + + /* + * Flags private to DB_ENV->txn_begin. +--- db/dbinc/mp.h.orig 2004-10-16 01:31:54.000000000 +0000 ++++ db/dbinc/mp.h 2005-12-15 16:25:56.000000000 +0000 +@@ -309,6 +309,7 @@ struct __mpoolfile { #define MP_FAKE_UOC 0x080 /* Unlink_on_close field: fake flag. */ #define MP_NOT_DURABLE 0x100 /* File is not durable. */ #define MP_TEMP 0x200 /* Backing file is a temporary. */ -+#define MP_NOFSYNC 0x400 /* Don't fsync */ ++#define MP_NOFSYNC 0x400 /* Don't fsync */ u_int32_t flags; }; ---- db/dbinc_auto/api_flags.in.orig 2011-05-12 11:40:57.000000000 +0000 -+++ db/dbinc_auto/api_flags.in 2011-05-12 11:55:10.000000000 +0000 -@@ -83,6 +83,7 @@ - #define DB_NOORDERCHK 0x00000002 - #define DB_NOPANIC 0x00000800 - #define DB_NO_AUTO_COMMIT 0x00001000 -+#define DB_NOFSYNC 0x00040000 - #define DB_ODDFILESIZE 0x00000080 - #define DB_ORDERCHKONLY 0x00000004 - #define DB_OVERWRITE 0x00001000 ---- db/dist/s_config.orig 2010-04-12 20:25:23.000000000 +0000 -+++ db/dist/s_config 2011-05-12 12:00:34.000000000 +0000 -@@ -8,7 +8,8 @@ trap 'rm -f aclocal.m4 ; exit 0' 0 1 2 3 - . ./RELEASE - - echo "autoconf: building aclocal.m4..." --cat aclocal/*.m4 aclocal_java/*.m4 > aclocal.m4 -+cat aclocal/*.m4 aclocal_java/*.m4 > acinclude.m4 -+aclocal - - echo "autoconf: running autoheader to build config.hin..." - rm -f config.hin ---- db/mp/mp_sync.c.orig 2010-04-12 20:25:34.000000000 +0000 -+++ db/mp/mp_sync.c 2011-05-12 11:36:58.000000000 +0000 -@@ -578,7 +578,7 @@ done: /* - if (ret == 0 && required_write) { +--- db/mp/mp_sync.c.orig 2004-11-11 15:58:48.000000000 +0000 ++++ db/mp/mp_sync.c 2005-12-15 16:23:57.000000000 +0000 +@@ -553,7 +553,7 @@ done: /* + if (ret == 0 && (op == DB_SYNC_CACHE || op == DB_SYNC_FILE)) { if (dbmfp == NULL) - ret = __memp_sync_files(env); + ret = __memp_sync_files(dbenv, dbmp); - else -+ else if (!F_ISSET(dbmfp->mfp, MP_NOFSYNC)) - ret = __os_fsync(env, dbmfp->fhp); ++ else if (!dbmfp->mfp || !F_ISSET(dbmfp->mfp, MP_NOFSYNC)) + ret = __os_fsync(dbenv, dbmfp->fhp); } -@@ -665,7 +665,7 @@ __memp_sync_file(env, mfp, argp, countp, - "%s: unable to flush", (char *) - R_ADDR(dbmp->reginfo, mfp->path_off)); - } -- } else -+ } else if (!F_ISSET(dbmfp->mfp, MP_NOFSYNC)) - ret = __os_fsync(env, dbmfp->fhp); +@@ -600,7 +600,7 @@ int __memp_sync_files(dbenv, dbmp) + MUTEX_THREAD_LOCK(dbenv, dbmp->mutexp); + for (dbmfp = TAILQ_FIRST(&dbmp->dbmfq); + dbmfp != NULL; dbmfp = TAILQ_NEXT(dbmfp, q)) { +- if (dbmfp->mfp != mfp || F_ISSET(dbmfp, MP_READONLY)) ++ if (dbmfp->mfp != mfp || F_ISSET(dbmfp, MP_READONLY | MP_NOFSYNC)) + continue; + ret = __os_fsync(dbenv, dbmfp->fhp); + break; +@@ -662,6 +662,9 @@ __memp_mf_sync(dbmp, mfp) - /* -@@ -801,6 +801,8 @@ __memp_mf_sync(dbmp, mfp, locked) - COMPQUIET(hp, NULL); - env = dbmp->env; + dbenv = dbmp->dbenv; + if (F_ISSET(mfp, MP_NOFSYNC)) + return 0; ++ /* - * We need to be holding the hash lock: we're using the path name - * and __memp_nameop might try and rename the file. + * Expects caller to be holding the region lock: we're using the path + * name and __memp_nameop might try and rename the file. +--- db/dist/s_config.orig 2003-12-15 21:42:41.000000000 +0000 ++++ db/dist/s_config 2005-02-11 14:44:09.018907747 +0000 +@@ -20,14 +20,15 @@ + autoconf + + # Edit version information we couldn't pre-compute. +-(echo "1,\$s/__EDIT_DB_VERSION_MAJOR__/$DB_VERSION_MAJOR/g" && +- echo "1,\$s/__EDIT_DB_VERSION_MINOR__/$DB_VERSION_MINOR/g" && +- echo "1,\$s/__EDIT_DB_VERSION_PATCH__/$DB_VERSION_PATCH/g" && +- echo "1,\$s/__EDIT_DB_VERSION_STRING__/$DB_VERSION_STRING/g" && +- echo "1,\$s/__EDIT_DB_VERSION_UNIQUE_NAME__/$DB_VERSION_UNIQUE_NAME/g" && +- echo "1,\$s/__EDIT_DB_VERSION__/$DB_VERSION/g" && +- echo "w" && +- echo "q") | ed configure ++mv configure configure.old ++sed -e "s/__EDIT_DB_VERSION_MAJOR__/$DB_VERSION_MAJOR/g" \ ++ -e "s/__EDIT_DB_VERSION_MINOR__/$DB_VERSION_MINOR/g" \ ++ -e "s/__EDIT_DB_VERSION_PATCH__/$DB_VERSION_PATCH/g" \ ++ -e "s/__EDIT_DB_VERSION_STRING__/$DB_VERSION_STRING/g" \ ++ -e "s/__EDIT_DB_VERSION_UNIQUE_NAME__/$DB_VERSION_UNIQUE_NAME/g" \ ++ -e "s/__EDIT_DB_VERSION__/$DB_VERSION/g" \ ++< configure.old > configure ++rm -f configure.old + + rm -rf autom4te.cache + chmod 555 configure +--- db/dist/aclocal/options.ac.orig 2005-12-15 16:43:14.000000000 +0000 ++++ db/dist/aclocal/options.ac 2005-12-15 16:43:40.000000000 +0000 +@@ -277,10 +277,6 @@ fi + + # Uniquename excludes C++, Java, RPC. + if test "$db_cv_uniquename" = "yes"; then +- if test "$db_cv_rpc" = "yes"; then +- AC_MSG_ERROR( +- [--with-uniquename is not compatible with --enable-rpc]) +- fi + if test "$db_cv_cxx" = "yes"; then + AC_MSG_ERROR( + [--with-uniquename is not compatible with --enable-cxx]) diff --git a/dbfsync.diff b/dbfsync.diff index a71fb23..00da14c 100644 --- a/dbfsync.diff +++ b/dbfsync.diff @@ -1,24 +1,54 @@ Support a database-local fsync setting. Needs berkeley db patch. ---- ./lib/backend/dbconfig.c.orig 2011-01-03 13:57:41.000000000 +0000 -+++ ./lib/backend/dbconfig.c 2011-05-10 17:00:29.000000000 +0000 -@@ -58,8 +58,10 @@ static const struct poptOption rdbOption - { "mp_size", 0,POPT_ARG_INT, &staticcfg.db_cachesize, 0, - NULL, NULL }, +--- ./rpmdb/db3.c.orig 2005-03-23 18:15:28.000000000 +0000 ++++ ./rpmdb/db3.c 2006-01-27 20:08:29.000000000 +0000 +@@ -211,11 +211,13 @@ static int db_fini(dbiIndex dbi, const c + return rc; + } +#if 0 - { "nofsync", 0,POPT_ARG_NONE, &staticcfg.db_no_fsync, 0, - NULL, NULL }, + static int db3_fsync_disable(/*@unused@*/ int fd) + /*@*/ + { + return 0; + } +#endif - /* Per-dbi options */ - { "nommap", 0,POPT_BIT_SET, &staticdbi.dbi_oflags, DB_NOMMAP, -@@ -69,6 +71,8 @@ static const struct poptOption rdbOption + #if 0 + #if HAVE_LIBPTHREAD +@@ -414,6 +416,7 @@ static int db_init(dbiIndex dbi, const c + /* dbenv->set_rep_transport(???) */ + /* dbenv->set_rep_limit(???) */ + ++#if 0 + if (dbi->dbi_no_fsync) { + #if (DB_VERSION_MAJOR == 3 && DB_VERSION_MINOR != 0) || (DB_VERSION_MAJOR == 4) + xx = db_env_set_func_fsync(db3_fsync_disable); +@@ -422,6 +425,7 @@ static int db_init(dbiIndex dbi, const c + #endif + xx = cvtdberr(dbi, "db_env_set_func_fsync", xx, _debug); + } ++#endif + + if (dbi->dbi_shmkey) { + xx = dbenv->set_shm_key(dbenv, dbi->dbi_shmkey); +--- ./rpmdb/dbconfig.c.orig 2004-10-16 12:50:52.000000000 +0000 ++++ ./rpmdb/dbconfig.c 2005-12-15 13:12:32.000000000 +0000 +@@ -99,6 +99,8 @@ struct poptOption rdbOptions[] = { NULL, NULL }, - { "lockdbfd", 0,POPT_ARG_NONE, &staticdbi.dbi_lockdbfd, 0, + { "fcntl_locking",0,POPT_BIT_SET, &db3dbi.dbi_oflags, DB_FCNTL_LOCKING, NULL, NULL }, -+ { "nofsync", 0,POPT_BIT_SET, &staticdbi.dbi_oflags, DB_NOFSYNC, ++ { "nofsync", 0,POPT_BIT_SET, &db3dbi.dbi_oflags, DB_NOFSYNC, + NULL, NULL }, - POPT_TABLEEND - }; + { "btree", 0,POPT_ARG_VAL, &db3dbi.dbi_type, DB_BTREE, + NULL, NULL }, +@@ -145,8 +147,6 @@ struct poptOption rdbOptions[] = { + NULL, NULL }, + { "usedbenv", 0,POPT_ARG_NONE, &db3dbi.dbi_use_dbenv, 0, + NULL, NULL }, +- { "nofsync", 0,POPT_ARG_NONE, &db3dbi.dbi_no_fsync, 0, +- NULL, NULL }, + { "nodbsync", 0,POPT_ARG_NONE, &db3dbi.dbi_no_dbsync, 0, + NULL, NULL }, + { "lockdbfd", 0,POPT_ARG_NONE, &db3dbi.dbi_lockdbfd, 0, diff --git a/dbprivate.diff b/dbprivate.diff index 48d3912..28aeda3 100644 --- a/dbprivate.diff +++ b/dbprivate.diff @@ -1,14 +1,14 @@ -Always use DB_PRIVATE. Unfortunately no longer configurable -in the macros file. +Always use DB_PRIVATE. Should probably be configured instead. ---- lib/backend/db3.c.orig 2011-05-12 15:38:18.000000000 +0000 -+++ lib/backend/db3.c 2011-05-12 15:38:41.000000000 +0000 -@@ -119,7 +119,7 @@ static int db_init(rpmdb rdb, const char - int retry_open = 2; - struct _dbConfig * cfg = &rdb->cfg; - /* This is our setup, thou shall not have other setups before us */ -- uint32_t eflags = (DB_CREATE|DB_INIT_MPOOL|DB_INIT_CDB); -+ uint32_t eflags = (DB_CREATE|DB_INIT_MPOOL|DB_INIT_CDB|DB_PRIVATE); +--- ./rpmdb/db3.c.orig 2005-03-23 18:15:28.000000000 +0000 ++++ ./rpmdb/db3.c 2006-01-27 20:08:29.000000000 +0000 +@@ -1034,6 +1050,9 @@ static int db3open(rpmdb rpmdb, rpmTag r + #endif + #endif - if (rdb->db_dbenv != NULL) { - rdb->db_opens++; ++ /* always use fcntl lock */ ++ dbi->dbi_eflags |= DB_PRIVATE; ++ + if (access(dbhome, W_OK) == -1) { + + /* dbhome is unwritable, don't attempt DB_CREATE on DB->open ... */ diff --git a/dbrointerruptable.diff b/dbrointerruptable.diff index 1fb0233..7a59346 100644 --- a/dbrointerruptable.diff +++ b/dbrointerruptable.diff @@ -1,11 +1,11 @@ -Do not block signals if the database is opened read-only, it just +Do not block signals if the database is opened read-only, it jst annoys the users. [#48026] ---- ./lib/rpmdb.c.orig 2011-02-28 09:57:27.000000000 +0000 -+++ ./lib/rpmdb.c 2011-05-10 16:58:21.000000000 +0000 -@@ -623,10 +623,12 @@ int rpmdbClose(rpmdb db) - { +--- ./rpmdb/rpmdb.c.orig 2005-02-16 03:18:19.000000000 +0000 ++++ ./rpmdb/rpmdb.c 2006-02-21 20:37:44.000000000 +0000 +@@ -846,10 +873,12 @@ int rpmdbClose(rpmdb db) rpmdb * prev, next; + int dbix; int rc = 0; + int dbmode; @@ -13,18 +13,13 @@ annoys the users. [#48026] goto exit; + dbmode = db->db_mode; - (void) rpmdbUnlink(db); + (void) rpmdbUnlink(db, "rpmdbClose"); - if (db->nrefs > 0) -@@ -655,11 +657,13 @@ int rpmdbClose(rpmdb db) - db = _free(db); + /*@-usereleased@*/ +@@ -886,12 +915,14 @@ int rpmdbClose(rpmdb db) + /*@-refcounttrans@*/ db = _free(db); /*@=refcounttrans@*/ + /*@=usereleased@*/ - exit: -- (void) rpmsqEnable(-SIGHUP, NULL); -- (void) rpmsqEnable(-SIGINT, NULL); -- (void) rpmsqEnable(-SIGTERM,NULL); -- (void) rpmsqEnable(-SIGQUIT,NULL); -- (void) rpmsqEnable(-SIGPIPE,NULL); + if ((dbmode & (O_RDWR|O_WRONLY)) != 0) { + (void) rpmsqEnable(-SIGHUP, NULL); + (void) rpmsqEnable(-SIGINT, NULL); @@ -32,25 +27,31 @@ annoys the users. [#48026] + (void) rpmsqEnable(-SIGQUIT,NULL); + (void) rpmsqEnable(-SIGPIPE,NULL); + } + exit: +- (void) rpmsqEnable(-SIGHUP, NULL); +- (void) rpmsqEnable(-SIGINT, NULL); +- (void) rpmsqEnable(-SIGTERM,NULL); +- (void) rpmsqEnable(-SIGQUIT,NULL); +- (void) rpmsqEnable(-SIGPIPE,NULL); return rc; } + /*@=incondefs@*/ +@@ -1021,11 +1070,13 @@ static int openDatabase(/*@null@*/ const + if (db == NULL) + return 1; -@@ -721,11 +725,13 @@ static int openDatabase(const char * pre - /* Try to ensure db home exists, error out if we cant even create */ - rc = rpmioMkpath(rpmdbHome(db), 0755, getuid(), getgid()); - if (rc == 0) { -- (void) rpmsqEnable(SIGHUP, NULL); -- (void) rpmsqEnable(SIGINT, NULL); -- (void) rpmsqEnable(SIGTERM,NULL); -- (void) rpmsqEnable(SIGQUIT,NULL); -- (void) rpmsqEnable(SIGPIPE,NULL); -+ if ((db->db_mode & (O_RDWR|O_WRONLY)) != 0) { -+ (void) rpmsqEnable(SIGHUP, NULL); -+ (void) rpmsqEnable(SIGINT, NULL); -+ (void) rpmsqEnable(SIGTERM,NULL); -+ (void) rpmsqEnable(SIGQUIT,NULL); -+ (void) rpmsqEnable(SIGPIPE,NULL); -+ } +- (void) rpmsqEnable(SIGHUP, NULL); +- (void) rpmsqEnable(SIGINT, NULL); +- (void) rpmsqEnable(SIGTERM,NULL); +- (void) rpmsqEnable(SIGQUIT,NULL); +- (void) rpmsqEnable(SIGPIPE,NULL); ++ if ((db->db_mode & (O_RDWR|O_WRONLY)) != 0) { ++ (void) rpmsqEnable(SIGHUP, NULL); ++ (void) rpmsqEnable(SIGINT, NULL); ++ (void) rpmsqEnable(SIGTERM,NULL); ++ (void) rpmsqEnable(SIGQUIT,NULL); ++ (void) rpmsqEnable(SIGPIPE,NULL); ++ } + + db->db_api = _dbapi; - /* Just the primary Packages database opened here */ - rc = (rpmdbOpenIndex(db, RPMDBI_PACKAGES, db->db_flags) != NULL) ? 0 : -2; diff --git a/debugedit-canon-fix.diff b/debugedit-canon-fix.diff deleted file mode 100644 index f2be21b..0000000 --- a/debugedit-canon-fix.diff +++ /dev/null @@ -1,119 +0,0 @@ ---- ./tools/debugedit.c.orig 2011-05-20 11:26:04.000000000 +0000 -+++ ./tools/debugedit.c 2011-05-20 11:27:56.000000000 +0000 -@@ -158,7 +158,7 @@ strptr (DSO *dso, int sec, off_t offset) - { - if (data->d_buf - && offset >= data->d_off -- && offset < data->d_off + data->d_size) -+ && offset < data->d_off + (off_t)data->d_size) - return (const char *) data->d_buf + (offset - data->d_off); - } - } -@@ -496,9 +496,10 @@ static int - edit_dwarf2_line (DSO *dso, uint32_t off, char *comp_dir, int phase) - { - unsigned char *ptr = debug_sections[DEBUG_LINE].data, *dir; -- unsigned char **dirt; -+ char **dirt; - unsigned char *endsec = ptr + debug_sections[DEBUG_LINE].size; - unsigned char *endcu, *endprol; -+ char line_base; - unsigned char opcode_base; - uint32_t value, dirt_cnt; - size_t comp_dir_len = strlen (comp_dir); -@@ -542,6 +543,7 @@ edit_dwarf2_line (DSO *dso, uint32_t off - return 1; - } - -+ line_base = (char) (ptr[2] & 0xff); - opcode_base = ptr[4]; - ptr = dir = ptr + 4 + opcode_base; - -@@ -553,13 +555,13 @@ edit_dwarf2_line (DSO *dso, uint32_t off - ++value; - } - -- dirt = (unsigned char **) alloca (value * sizeof (unsigned char *)); -+ dirt = (char **) alloca (value * sizeof (unsigned char *)); - dirt[0] = (unsigned char *) "."; - dirt_cnt = 1; - ptr = dir; - while (*ptr != 0) - { -- dirt[dirt_cnt++] = ptr; -+ dirt[dirt_cnt++] = (char *)ptr; - ptr = (unsigned char *) strchr ((char *)ptr, 0) + 1; - } - ptr++; -@@ -672,7 +674,7 @@ edit_dwarf2_line (DSO *dso, uint32_t off - - if (dest_dir) - { -- unsigned char *srcptr, *buf = NULL; -+ char *srcptr, *buf = NULL; - size_t base_len = strlen (base_dir); - size_t dest_len = strlen (dest_dir); - size_t shrank = 0; -@@ -686,11 +688,14 @@ edit_dwarf2_line (DSO *dso, uint32_t off - ptr = dir; - } - else -- ptr = srcptr = dir; -+ { -+ ptr = dir; -+ srcptr = (char *)dir; -+ } - while (*srcptr != 0) - { - size_t len = strlen ((char *)srcptr) + 1; -- const unsigned char *readptr = srcptr; -+ const char *readptr = srcptr; - - char *orig = strdup ((const char *) srcptr); - -@@ -717,10 +722,13 @@ edit_dwarf2_line (DSO *dso, uint32_t off - - if (shrank > 0) - { -- if (--shrank == 0) -+ --shrank; -+#if 0 -+ if (shrank == 0) - error (EXIT_FAILURE, 0, - "canonicalization unexpectedly shrank by one character"); - else -+#endif - { - memset (ptr, 'X', shrank); - ptr += shrank; -@@ -756,21 +764,26 @@ edit_dwarf2_line (DSO *dso, uint32_t off - } - dirty_section (DEBUG_STR); - } -- else if (ptr != srcptr) -+ else if ((char *)ptr != srcptr) - memmove (ptr, srcptr, len); - srcptr += len; - ptr += len; -- dir = srcptr; -+ dir = (unsigned char *)srcptr; - read_uleb128 (srcptr); - read_uleb128 (srcptr); - read_uleb128 (srcptr); - if (ptr != dir) -- memmove (ptr, dir, srcptr - dir); -- ptr += srcptr - dir; -+ memmove (ptr, dir, (unsigned char *)srcptr - dir); -+ ptr += (unsigned char *)srcptr - dir; - } - *ptr = '\0'; - free (buf); - } -+ -+ ptr++; -+ /* fill the rest until the line number program starts with NOP opcode */ -+ memset(ptr, opcode_base - line_base, endprol - ptr); -+ /* don't touch the line number program */ - return 0; - } - diff --git a/debugedit-comp-dir.diff b/debugedit-comp-dir.diff deleted file mode 100644 index 288ed10..0000000 --- a/debugedit-comp-dir.diff +++ /dev/null @@ -1,51 +0,0 @@ -Include compilation directory in source file list if used. - ---- ./tools/debugedit.c.orig 2011-05-11 14:27:32.000000000 +0000 -+++ ./tools/debugedit.c 2011-05-11 15:31:31.000000000 +0000 -@@ -503,6 +503,7 @@ edit_dwarf2_line (DSO *dso, uint32_t off - uint32_t value, dirt_cnt; - size_t comp_dir_len = strlen (comp_dir); - size_t abs_file_cnt = 0, abs_dir_cnt = 0; -+ int comp_dir_used = 0; - - if (phase != 0) - return 0; -@@ -611,6 +612,7 @@ edit_dwarf2_line (DSO *dso, uint32_t off - memcpy (p, dirt[value], dir_len); - p[dir_len] = '/'; - memcpy (p + dir_len + 1, file, file_len + 1); -+ comp_dir_used = 1; - } - canonicalize_path (s, s); - if (list_file_fd != -1) -@@ -644,6 +646,30 @@ edit_dwarf2_line (DSO *dso, uint32_t off - } - ++ptr; - -+ if (comp_dir_used && list_file_fd != -1 -+ && (base_dir == NULL || has_prefix (comp_dir, base_dir))) -+ { -+ char *p; -+ size_t size; -+ ssize_t ret; -+ -+ size = comp_dir_len + 1; -+ p = comp_dir; -+ if (base_dir) -+ { -+ p += strlen (base_dir); -+ size -= strlen (base_dir); -+ } -+ while (size > 0) -+ { -+ ret = write (list_file_fd, p, size); -+ if (ret == -1) -+ break; -+ size -= ret; -+ p += ret; -+ } -+ } -+ - if (dest_dir) - { - unsigned char *srcptr, *buf = NULL; diff --git a/debugedit.diff b/debugedit.diff index ad9ec99..5a3bc06 100644 --- a/debugedit.diff +++ b/debugedit.diff @@ -1,26 +1,8 @@ -Make debugedit build without dwarf.h +Make debugedit build without dwarf.h. Also fixes a logic bug for ppc. ---- ./Makefile.am.orig 2010-12-22 11:17:20.000000000 +0000 -+++ ./Makefile.am 2011-05-10 16:03:49.000000000 +0000 -@@ -143,7 +143,6 @@ rpm2cpio_LDADD += @WITH_NSS_LIB@ @WITH_P - - - if LIBELF --if LIBDWARF - rpmconfig_SCRIPTS += scripts/find-debuginfo.sh - - rpmlibexec_PROGRAMS += debugedit -@@ -156,7 +155,6 @@ elfdeps_SOURCES = tools/elfdeps.c - elfdeps_LDADD = rpmio/librpmio.la - elfdeps_LDADD += @WITH_LIBELF_LIB@ @WITH_POPT_LIB@ - endif --endif - - rpmlibexec_PROGRAMS += javadeps - javadeps_SOURCES = tools/javadeps.c ---- ./tools/debugedit.c.orig 2010-12-03 12:11:57.000000000 +0000 -+++ ./tools/debugedit.c 2011-05-10 16:03:49.000000000 +0000 -@@ -37,7 +37,37 @@ +--- ./tools/debugedit.c.orig 2005-12-15 14:28:49.000000000 +0000 ++++ ./tools/debugedit.c 2006-03-17 13:01:53.000000000 +0000 +@@ -34,7 +34,37 @@ #include #include @@ -57,5 +39,14 @@ Make debugedit build without dwarf.h +#define DW_FORM_ref_udata 0x15 +#define DW_FORM_indirect 0x16 - #include - #include + #include "hashtab.h" + +@@ -1039,7 +1069,7 @@ edit_dwarf2 (DSO *dso) + break; + case EM_PPC: + case EM_PPC64: +- if (rtype != R_PPC_ADDR32 || rtype != R_PPC_UADDR32) ++ if (rtype != R_PPC_ADDR32 && rtype != R_PPC_UADDR32) + goto fail; + break; + case EM_S390: diff --git a/debuginfo-mono.patch b/debuginfo-mono.patch deleted file mode 100644 index d877a73..0000000 --- a/debuginfo-mono.patch +++ /dev/null @@ -1,20 +0,0 @@ ---- ./scripts/find-debuginfo.sh.orig 2011-05-11 16:10:22.000000000 +0000 -+++ ./scripts/find-debuginfo.sh 2011-05-11 16:10:48.000000000 +0000 -@@ -211,6 +211,17 @@ while read nlinks inum f; do - ;; - *) continue ;; - esac -+ # double check that we really have an ELF file, -+ # to handle monodevelop-debugger-gdb and monodevelop-debugger-mdb -+ ftype=`/usr/bin/file $f | cut -d: -f2-` -+ case $ftype in -+ *ELF*) ;; -+ *) -+ echo "$f is not an ELF file, skipping" -+ continue -+ ;; -+ esac -+ - get_debugfn "$f" - [ -f "${debugfn}" ] && continue - diff --git a/debuglink.diff b/debuglink.diff deleted file mode 100644 index 4a97043..0000000 --- a/debuglink.diff +++ /dev/null @@ -1,12 +0,0 @@ ---- ./scripts/find-debuginfo.sh.orig 2011-05-11 15:59:44.000000000 +0000 -+++ ./scripts/find-debuginfo.sh 2011-05-11 16:10:22.000000000 +0000 -@@ -186,7 +186,8 @@ make_id_link() - get_debugfn() - { - dn=$(dirname "${1#$RPM_BUILD_ROOT}") -- bn=$(basename "$1" .debug).debug -+# Do not strip existing .debug suffixes -+ bn=$(basename "$1").debug - - debugdn=${debugdir}${dn} - debugfn=${debugdn}/${bn} diff --git a/debugsource-package.diff b/debugsource-package.diff deleted file mode 100644 index 11eae89..0000000 --- a/debugsource-package.diff +++ /dev/null @@ -1,57 +0,0 @@ -Subject: Split sources for debugging into separate -debugsource package - -At the moment the -debuginfo package also include the sources where used to -build the binary. The patches moves them into a separate package -debugsource. - ---- ./macros.in.orig 2011-05-11 15:01:39.000000000 +0000 -+++ ./macros.in 2011-05-11 15:36:05.000000000 +0000 -@@ -190,6 +190,18 @@ Debug information is useful when develop - package or when debugging this package.\ - %files debuginfo -f debugfiles.list\ - %defattr(-,root,root)\ -+\ -+%package debugsource\ -+Summary: Debug sources for package %{name}\ -+Group: Development/Debug\ -+AutoReqProv: 0\ -+Requires: %{name}-debuginfo = %{version}-%{release}\ -+%description debugsource\ -+This package provides debug sources for package %{name}.\ -+Debug sources are useful when developing applications that use this\ -+package or when debugging this package.\ -+%files debugsource -f debugsources.list\ -+%defattr(-,root,root)\ - %{nil} - - %_defaultdocdir %{_datadir}/doc/packages ---- ./scripts/find-debuginfo.sh.orig 2011-05-11 14:46:18.000000000 +0000 -+++ ./scripts/find-debuginfo.sh 2011-05-11 15:36:05.000000000 +0000 -@@ -187,8 +187,8 @@ set -o pipefail - strict_error=ERROR - $strict || strict_error=WARNING - --# Strip ELF binaries --find $RPM_BUILD_ROOT ! -path "${debugdir}/*.debug" -type f \( -perm +111 -or -name "*.so*" -or -name "*.ko" \) -print 0 | sort -z | -+# Strip ELF binaries (and no static libraries) -+find $RPM_BUILD_ROOT ! -path "${debugdir}/*.debug" -type f \( -perm +111 -or -name "*.so*" -or -name "*.ko" \) ! -name "*.a" -print0 | sort -z | - xargs --no-run-if-empty -0 stat -c '%h %D_%i %n' | - while read nlinks inum f; do - case $(objdump -h $f 2>/dev/null | egrep -o '(debug[\.a-z_]*|gnu.version)') in -@@ -300,10 +300,16 @@ if [ -d "${RPM_BUILD_ROOT}/usr/lib" -o - - - (cd "${RPM_BUILD_ROOT}/usr" - test ! -d lib/debug || find lib/debug ! -type d -- test ! -d src/debug || find src/debug -mindepth 1 -maxdepth 1 - ) | sed 's,^,/usr/,' >> "$LISTFILE" - fi - -+: > "$SOURCEFILE" -+if [ -d "${RPM_BUILD_ROOT}/usr/src" ]; then -+ (cd "${RPM_BUILD_ROOT}/usr" -+ test ! -d src/debug || find src/debug -mindepth 1 -maxdepth 1 -+ ) | sed 's,^,/usr/,' >> "$SOURCEFILE" -+fi -+ - # Append to $1 only the lines from stdin not already in the file. - append_uniq() - { diff --git a/debugsubpkg.diff b/debugsubpkg.diff deleted file mode 100644 index 2f9157e..0000000 --- a/debugsubpkg.diff +++ /dev/null @@ -1,322 +0,0 @@ -Create a debuginfo package for each subpackage. - ---- ./build/files.c.orig 2011-05-13 15:34:01.000000000 +0000 -+++ ./build/files.c 2011-05-13 15:35:42.000000000 +0000 -@@ -20,6 +20,10 @@ - #include /* rpmDoDigest() */ - #include - -+#if HAVE_GELF_H -+#include -+#endif -+ - #include "rpmio/rpmio_internal.h" /* XXX rpmioSlurp */ - #include "rpmio/base64.h" - #include "misc/fts.h" -@@ -2105,13 +2109,237 @@ exit: - return rc; - } - -+#if HAVE_GELF_H && HAVE_LIBELF -+/* Query the build-id from the ELF file NAME and store it in the newly -+ allocated *build_id array of size *build_id_size. Returns -1 on -+ error. */ -+ -+int -+getELFBuildId (const char *name, -+ unsigned char **id, size_t *id_size) -+{ -+ int fd, i; -+ Elf *elf; -+ GElf_Ehdr ehdr; -+ Elf_Data *build_id = NULL; -+ size_t build_id_offset = 0, build_id_size = 0; -+ -+ /* Now query the build-id of the file and add the -+ corresponding links in the .build-id tree. -+ The following code is based on tools/debugedit.c. */ -+ fd = open (name, O_RDONLY); -+ if (fd < 0) -+ return -1; -+ elf = elf_begin (fd, ELF_C_READ_MMAP, NULL); -+ if (elf == NULL) -+ { -+ fprintf (stderr, "cannot open ELF file: %s", -+ elf_errmsg (-1)); -+ close (fd); -+ return -1; -+ } -+ if (elf_kind (elf) != ELF_K_ELF -+ || gelf_getehdr (elf, &ehdr) == NULL -+ || (ehdr.e_type != ET_DYN -+ && ehdr.e_type != ET_EXEC -+ && ehdr.e_type != ET_REL)) -+ { -+ elf_end (elf); -+ close (fd); -+ return -1; -+ } -+ for (i = 0; i < ehdr.e_shnum; ++i) -+ { -+ Elf_Scn *s = elf_getscn (elf, i); -+ GElf_Shdr shdr; -+ Elf_Data *data; -+ Elf32_Nhdr nh; -+ Elf_Data dst = -+ { -+ .d_version = EV_CURRENT, .d_type = ELF_T_NHDR, -+ .d_buf = &nh, .d_size = sizeof nh -+ }; -+ Elf_Data src = dst; -+ -+ gelf_getshdr (s, &shdr); -+ if (shdr.sh_type != SHT_NOTE -+ || !(shdr.sh_flags & SHF_ALLOC)) -+ continue; -+ -+ /* Look for a build-ID note here. */ -+ data = elf_rawdata (s, NULL); -+ src.d_buf = data->d_buf; -+ assert (sizeof (Elf32_Nhdr) == sizeof (Elf64_Nhdr)); -+ while (data->d_buf + data->d_size - src.d_buf > (int) sizeof nh -+ && elf32_xlatetom (&dst, &src, ehdr.e_ident[EI_DATA])) -+ { -+ Elf32_Word len = sizeof nh + nh.n_namesz; -+ len = (len + 3) & ~3; -+ -+ if (nh.n_namesz == sizeof "GNU" && nh.n_type == 3 -+ && !memcmp (src.d_buf + sizeof nh, "GNU", sizeof "GNU")) -+ { -+ build_id = data; -+ build_id_offset = src.d_buf + len - data->d_buf; -+ build_id_size = nh.n_descsz; -+ break; -+ } -+ -+ len += nh.n_descsz; -+ len = (len + 3) & ~3; -+ src.d_buf += len; -+ } -+ -+ if (build_id != NULL) -+ break; -+ } -+ -+ if (build_id == NULL) -+ return -1; -+ -+ *id = malloc (build_id_size); -+ *id_size = build_id_size; -+ memcpy (*id, build_id->d_buf + build_id_offset, build_id_size); -+ -+ elf_end (elf); -+ close (fd); -+ -+ return 0; -+} -+ -+ -+static rpmTag copyTagsForDebug[] = { -+ RPMTAG_EPOCH, -+ RPMTAG_VERSION, -+ RPMTAG_RELEASE, -+ RPMTAG_LICENSE, -+ RPMTAG_PACKAGER, -+ RPMTAG_DISTRIBUTION, -+ RPMTAG_DISTURL, -+ RPMTAG_VENDOR, -+ RPMTAG_ICON, -+ RPMTAG_URL, -+ RPMTAG_CHANGELOGTIME, -+ RPMTAG_CHANGELOGNAME, -+ RPMTAG_CHANGELOGTEXT, -+ RPMTAG_PREFIXES, -+ RPMTAG_RHNPLATFORM, -+ RPMTAG_OS, -+ RPMTAG_DISTTAG, -+ RPMTAG_CVSID, -+ RPMTAG_ARCH, -+ 0 -+}; -+ -+static void addDebuginfoPackage(rpmSpec spec, Package pkg, char *buildroot) -+{ -+ const char *a; -+ -+ elf_version(EV_CURRENT); -+ a = headerGetString(pkg->header, RPMTAG_ARCH); -+ if (strcmp(a, "noarch") != 0 && strcmp(a, "src") != 0 && strcmp(a, "nosrc") != 0) -+ { -+ Package dbg; -+ rpmfi fi = pkg->cpioList; -+ char tmp[1024]; -+ const char *name; -+ ARGV_t files = NULL; -+ int seen_build_id = 0; -+ -+ /* Check if the current package has files with debug info -+ and record them. */ -+ fi = rpmfiInit (fi, 0); -+ while (rpmfiNext (fi) >= 0) -+ { -+ const char *base; -+ int i; -+ unsigned char *build_id; -+ size_t build_id_size = 0; -+ struct stat sbuf; -+ -+ name = rpmfiFN (fi); -+ /* Skip leading buildroot. */ -+ base = name + strlen (buildroot); -+ /* Pre-pend %buildroot/usr/lib/debug and append .debug. */ -+ snprintf (tmp, 1024, "%s/usr/lib/debug%s.debug", -+ buildroot, base); -+ /* If that file exists we have debug information for it. */ -+ if (access (tmp, F_OK) != 0) -+ continue; -+ -+ /* Append the file list preamble. */ -+ if (!files) -+ { -+ argvAdd(&files, "%defattr(-,root,root)"); -+ argvAdd(&files, "%dir /usr/lib/debug"); -+ } -+ /* Add the files main debug-info file. */ -+ snprintf (tmp, 1024, "/usr/lib/debug/%s.debug", base); -+ argvAdd(&files, tmp); -+ -+ /* Do not bother to check build-ids for symbolic links. -+ We'll handle them for the link target. */ -+ if (lstat (name, &sbuf) == -1 -+ || S_ISLNK (sbuf.st_mode)) -+ continue; -+ -+ /* Try to gather the build-id from the binary. */ -+ if (getELFBuildId (name, &build_id, &build_id_size) == -1) -+ continue; -+ -+ /* If we see build-id links for the first time add the -+ directory. */ -+ if (!seen_build_id) -+ argvAdd(&files, "%dir /usr/lib/debug/.build-id"); -+ -+ /* From the build-id construct the two links pointing back -+ to the debug information file and the binary. */ -+ snprintf (tmp, 1024, "/usr/lib/debug/.build-id/%02x/", -+ build_id[0]); -+ for (i = 1; i < build_id_size; ++i) -+ sprintf (tmp + strlen (tmp), "%02x", build_id[i]); -+ argvAdd(&files, tmp); -+ sprintf (tmp + strlen (tmp), ".debug"); -+ argvAdd(&files, tmp); -+ -+ free (build_id); -+ } -+ -+ /* If there are debuginfo files for this package add a -+ new debuginfo package. */ -+ if (files) -+ { -+ dbg = newPackage (spec); -+ headerNVR (pkg->header, &name, NULL, NULL); -+ /* Set name, summary and group. */ -+ snprintf (tmp, 1024, "%s-debuginfo", name); -+ headerPutString(dbg->header, RPMTAG_NAME, tmp); -+ snprintf (tmp, 1024, "Debug information for package %s", name); -+ headerPutString(dbg->header, RPMTAG_SUMMARY, tmp); -+ snprintf (tmp, 1024, "This package provides debug information for package %s.\n" -+ "Debug information is useful when developing applications that use this\n" -+ "package or when debugging this package.", name); -+ headerPutString(dbg->header, RPMTAG_DESCRIPTION, tmp); -+ headerPutString(dbg->header, RPMTAG_GROUP, "Development/Debug"); -+ /* Inherit other tags from parent. */ -+ headerCopyTags (pkg->header, dbg->header, copyTagsForDebug); -+ -+ /* Build up the files list. */ -+ dbg->fileList = files; -+ } -+ } -+} -+#endif -+ - rpmRC processBinaryFiles(rpmSpec spec, rpmBuildPkgFlags pkgFlags, - int installSpecialDoc, int test) - { - Package pkg; - rpmRC rc = RPMRC_OK; -+ char *buildroot; - - check_fileList = newStringBuf(); -+ buildroot = rpmGenPath(spec->rootDir, spec->buildRoot, NULL); - genSourceRpmName(spec); - - for (pkg = spec->packages; pkg != NULL; pkg = pkg->next) { -@@ -2127,8 +2355,12 @@ rpmRC processBinaryFiles(rpmSpec spec, r - rpmlog(RPMLOG_NOTICE, _("Processing files: %s\n"), nvr); - free(nvr); - -- if ((rc = processPackageFiles(spec, pkgFlags, pkg, installSpecialDoc, test)) != RPMRC_OK || -- (rc = rpmfcGenerateDepends(spec, pkg)) != RPMRC_OK) -+ if ((rc = processPackageFiles(spec, pkgFlags, pkg, installSpecialDoc, test)) != RPMRC_OK) -+ goto exit; -+#if HAVE_GELF_H && HAVE_LIBELF -+ addDebuginfoPackage(spec, pkg, buildroot); -+#endif -+ if ((rc = rpmfcGenerateDepends(spec, pkg)) != RPMRC_OK) - goto exit; - - a = headerGetString(pkg->header, RPMTAG_ARCH); ---- ./macros.in.orig 2011-05-13 15:34:01.000000000 +0000 -+++ ./macros.in 2011-05-13 15:34:10.000000000 +0000 -@@ -179,24 +179,10 @@ - # Template for debug information sub-package. - %debug_package \ - %global __debug_package 1\ --%package debuginfo\ --Summary: Debug information for package %{name}\ --Group: Development/Debug\ --AutoReq: 0\ --AutoProv: 1\ --#Requires: %{?!debug_package_requires:%{name} = %{version}-%{release}}%{?debug_package_requires}\ --%description debuginfo\ --This package provides debug information for package %{name}.\ --Debug information is useful when developing applications that use this\ --package or when debugging this package.\ --%files debuginfo -f debugfiles.list\ --%defattr(-,root,root)\ --\ - %package debugsource\ - Summary: Debug sources for package %{name}\ - Group: Development/Debug\ - AutoReqProv: 0\ --Requires: %{name}-debuginfo = %{version}-%{release}\ - %description debugsource\ - This package provides debug sources for package %{name}.\ - Debug sources are useful when developing applications that use this\ ---- ./scripts/find-debuginfo.sh.orig 2011-05-13 15:34:01.000000000 +0000 -+++ ./scripts/find-debuginfo.sh 2011-05-13 15:34:10.000000000 +0000 -@@ -277,19 +277,11 @@ while read nlinks inum f; do - fi - done || exit - --# For each symlink whose target has a .debug file, --# make a .debug symlink to that file. --find $RPM_BUILD_ROOT ! -path "${debugdir}/*" -type l -print | --while read f --do -- t=$(readlink -m "$f").debug -- f=${f#$RPM_BUILD_ROOT} -- t=${t#$RPM_BUILD_ROOT} -- if [ -f "$debugdir$t" ]; then -- echo "symlinked /usr/lib/debug$t to /usr/lib/debug${f}.debug" -- debug_link "/usr/lib/debug$t" "${f}.debug" -- fi --done -+# We used to make a .debug symlink for each symlink whose target -+# has a .debug file to that file. This is not necessary because -+# the debuglink section contains only the destination of those links. -+# Creating those links anyway results in debuginfo packages for -+# devel packages just because of the .so symlinks in them. - - if [ -s "$SOURCEFILE" ]; then - mkdir -p "${RPM_BUILD_ROOT}/usr/src/debug" diff --git a/diskspace.diff b/diskspace.diff new file mode 100644 index 0000000..461a851 --- /dev/null +++ b/diskspace.diff @@ -0,0 +1,23 @@ +Make the numbers reported for diskspace problems more user +friendly. Probably a bad idea, as it changes the semantics. Instead, +the messages should be changed. + +--- ./lib/rpmts.c.orig 2005-02-13 03:12:03.000000000 +0000 ++++ ./lib/rpmts.c 2005-12-15 15:12:10.000000000 +0000 +@@ -1358,14 +1363,14 @@ void rpmtsCheckDSIProblems(const rpmts t + rpmpsAppend(ps, RPMPROB_DISKSPACE, + rpmteNEVR(te), rpmteKey(te), + ts->filesystems[i], NULL, NULL, +- (adj_fs_blocks(dsi->bneeded) - dsi->bavail) * dsi->bsize); ++ (adj_fs_blocks(dsi->bneeded)) * dsi->bsize); + } + + if (dsi->iavail > 0 && adj_fs_blocks(dsi->ineeded) > dsi->iavail) { + rpmpsAppend(ps, RPMPROB_DISKNODES, + rpmteNEVR(te), rpmteKey(te), + ts->filesystems[i], NULL, NULL, +- (adj_fs_blocks(dsi->ineeded) - dsi->iavail)); ++ (adj_fs_blocks(dsi->ineeded))); + } + } + ps = rpmpsFree(ps); diff --git a/disttag-macro.diff b/disttag-macro.diff deleted file mode 100644 index 795e52c..0000000 --- a/disttag-macro.diff +++ /dev/null @@ -1,31 +0,0 @@ -Hmm, SUSE doesn't use it, so what's the purpose of this patch? - ---- ./build/parsePreamble.c.orig 2011-05-11 14:27:32.000000000 +0000 -+++ ./build/parsePreamble.c 2011-05-11 15:59:08.000000000 +0000 -@@ -485,6 +485,7 @@ static struct optionalTag { - { RPMTAG_PACKAGER, "%{packager}" }, - { RPMTAG_DISTRIBUTION, "%{distribution}" }, - { RPMTAG_DISTURL, "%{disturl}" }, -+ { RPMTAG_DISTTAG, "%{disttag}" }, - { RPMTAG_BUGURL, "%{bugurl}" }, - { -1, NULL } - }; ---- ./macros.in.orig 2011-05-11 15:38:44.000000000 +0000 -+++ ./macros.in 2011-05-11 15:59:08.000000000 +0000 -@@ -279,6 +279,16 @@ package or when debugging this package.\ - # - #%bugurl - -+# Configurable distribution tag, same as Disttag: tag in a specfile. -+# The tag will be used to supply reliable information to tools like -+# rpmfind. -+# -+# Note: You should not configure with disturl (or build packages with -+# the Disttag: tag) unless you are willing to supply content in a -+# yet-to-be-determined format at the tag specified. -+# -+#%disttag -+ - # Boolean (i.e. 1 == "yes", 0 == "no") that controls whether files - # marked as %doc should be installed. - #%_excludedocs diff --git a/docdir_fmt.diff b/docdir_fmt.diff new file mode 100644 index 0000000..bd82d26 --- /dev/null +++ b/docdir_fmt.diff @@ -0,0 +1,36 @@ +Add support for a new macro, %{_docdir}. It can be used to specify +the name of the directory for %doc files. +Default is "%{NAME}-%{VERSION}", SUSE uses just "%{NAME}". +rh#125514 + +--- ./build/files.c.orig 2005-12-14 19:22:43.000000000 +0000 ++++ ./build/files.c 2006-02-17 13:57:25.000000000 +0000 +@@ -1006,11 +1006,23 @@ static int parseForSimple(/*@unused@*/Sp + res = 1; + } else { + /* XXX WATCHOUT: buf is an arg */ +- { const char *ddir, *n, *v; +- +- (void) headerNVR(pkg->header, &n, &v, NULL); +- +- ddir = rpmGetPath("%{_docdir}/", n, "-", v, NULL); ++ { ++ static char *_docdir_fmt= 0; ++ static int oneshot = 0; ++ const char *ddir, *fmt, *errstr; ++ if (!oneshot) { ++ _docdir_fmt = rpmExpand("%{?_docdir_fmt}", NULL); ++ if (!_docdir_fmt || !*_docdir_fmt) ++ _docdir_fmt = "%{NAME}-%{VERSION}"; ++ oneshot = 1; ++ } ++ fmt = headerSprintf(pkg->header, _docdir_fmt, rpmTagTable, rpmHeaderFormats, &errstr); ++ if (!fmt) { ++ rpmError(RPMERR_BADSPEC, _("illegal _docdir_fmt: %s\n"), errstr); ++ fl->processingFailed = 1; ++ res = 1; ++ } ++ ddir = rpmGetPath("%{_docdir}/", fmt, NULL); + strcpy(buf, ddir); + ddir = _free(ddir); + } diff --git a/elfutils-0.97.diff b/elfutils-0.97.diff new file mode 100644 index 0000000..caf8519 --- /dev/null +++ b/elfutils-0.97.diff @@ -0,0 +1,151 @@ +--- elfutils-0.97/Makefile.am.orig 2004-01-18 23:24:16.000000000 +0000 ++++ elfutils-0.97/Makefile.am 2005-02-10 18:01:28.029920520 +0000 +@@ -18,9 +18,8 @@ + ## + ACLOCAL_AMFLAGS = -I m4 + +-mini_SUBDIRS = config m4 lib libelf libelf-po +-all_SUBDIRS = doc libebl libdw libcpu libasm src po tests +-SUBDIRS = $(mini_SUBDIRS) $(all_SUBDIRS) ++mini_SUBDIRS = config m4 libelf libelf-po ++SUBDIRS = $(mini_SUBDIRS) + + EXTRA_DIST = splint.rc elfutils.spec GPG-KEY NOTES COPYING.GPL + +--- elfutils-0.97/configure.ac.orig 2004-09-25 19:41:03.000000000 +0000 ++++ elfutils-0.97/configure.ac 2005-02-10 18:01:28.030920377 +0000 +@@ -130,34 +130,9 @@ + + dnl The directories with content. + +-dnl Documentation. +-AC_CONFIG_FILES([doc/Makefile]) +- +-dnl Support library. +-AC_CONFIG_FILES([lib/Makefile]) +- + dnl ELF library. + AC_CONFIG_FILES([libelf/Makefile libelf-po/Makefile.in]) + +-dnl Higher-level ELF support library. +-AC_CONFIG_FILES([libebl/Makefile]) +- +-dnl DWARF library. +-AC_CONFIG_FILES([libdw/Makefile]) +- +-dnl CPU handling library. +-AC_CONFIG_FILES([libcpu/Makefile]) +- +-dnl Assembler library. +-AC_CONFIG_FILES([libasm/Makefile]) +- +-dnl Tools. +-AC_CONFIG_FILES([src/Makefile po/Makefile.in]) +- +-dnl Test suite. +-AC_CONFIG_FILES([tests/Makefile]) +- +- + dnl Test of the config.h file. We hide all kinds of configuration magic + dnl in there. + AH_BOTTOM([ +--- elfutils-0.97/libelf-po/Makefile.in.in.orig 2004-01-18 23:51:37.000000000 +0000 ++++ elfutils-0.97/libelf-po/Makefile.in.in 2005-02-10 18:01:28.030920377 +0000 +@@ -28,7 +28,7 @@ + INSTALL = @INSTALL@ + INSTALL_DATA = @INSTALL_DATA@ + MKINSTALLDIRS = @MKINSTALLDIRS@ +-mkinstalldirs = $(SHELL) `case "$(MKINSTALLDIRS)" in /*) echo "$(MKINSTALLDIRS)" ;; *) echo "$(top_builddir)/$(MKINSTALLDIRS)" ;; esac` ++mkinstalldirs = @MKINSTALLDIRS@ + + GMSGFMT = @GMSGFMT@ + MSGFMT = @MSGFMT@ +--- elfutils-0.97/libelf/Makefile.am.orig 2004-01-23 10:38:49.000000000 +0000 ++++ elfutils-0.97/libelf/Makefile.am 2005-02-10 18:03:15.337610448 +0000 +@@ -31,15 +31,15 @@ + + LINT = splint + +-lib_LIBRARIES = libelf.a ++#lib_LIBRARIES = libelf.a + if !MUDFLAP +-noinst_LIBRARIES = libelf_pic.a +-noinst_PROGRAMS = $(noinst_LIBRARIES:_pic.a=.so) ++noinst_LIBRARIES = libelf.a libelf_pic.a ++noinst_PROGRAMS = libelf.so + endif +-include_HEADERS = libelf.h gelf.h nlist.h ++#include_HEADERS = libelf.h gelf.h nlist.h + +-euincludedir = $(includedir)/elfutils +-euinclude_HEADERS = elf-knowledge.h ++#euincludedir = $(includedir)/elfutils ++#euinclude_HEADERS = elf-knowledge.h + + libelf_a_SOURCES = elf_version.c elf_hash.c elf_error.c elf_fill.c \ + elf_begin.c elf_next.c elf_rand.c elf_end.c elf_kind.c \ +@@ -96,7 +96,7 @@ + ln -fs $@ $@.$(VERSION) + + %.os: %.c %.o +- if $(COMPILE) -c -o $@ -fpic -DPIC -DSHARED -MT $@ -MD -MP \ ++ if $(COMPILE) -c -o $@ -fPIC -DPIC -DSHARED -MT $@ -MD -MP \ + -MF "$(DEPDIR)/$*.Tpo" `test -f '$<' || echo '$(srcdir)/'`$<; \ + then cat "$(DEPDIR)/$*.Tpo" >> "$(DEPDIR)/$*.Po"; \ + rm -f "$(DEPDIR)/$*.Tpo"; \ +@@ -104,15 +104,15 @@ + fi + + install: install-am libelf.so +- $(mkinstalldirs) $(DESTDIR)$(libdir) +- $(INSTALL_PROGRAM) libelf.so $(DESTDIR)$(libdir)/libelf-$(PACKAGE_VERSION).so +- ln -fs libelf-$(PACKAGE_VERSION).so $(DESTDIR)$(libdir)/libelf.so.$(VERSION) +- ln -fs libelf.so.$(VERSION) $(DESTDIR)$(libdir)/libelf.so ++# $(mkinstalldirs) $(DESTDIR)$(libdir) ++# $(INSTALL_PROGRAM) libelf.so $(DESTDIR)$(libdir)/libelf-$(PACKAGE_VERSION).so ++# ln -fs libelf-$(PACKAGE_VERSION).so $(DESTDIR)$(libdir)/libelf.so.$(VERSION) ++# ln -fs libelf.so.$(VERSION) $(DESTDIR)$(libdir)/libelf.so + + uninstall: uninstall-am +- rm -f $(DESTDIR)$(libdir)/libelf-$(PACKAGE_VERSION).so +- rm -f $(DESTDIR)$(libdir)/libelf.so.$(VERSION) +- rm -f $(DESTDIR)$(libdir)/libelf.so ++# rm -f $(DESTDIR)$(libdir)/libelf-$(PACKAGE_VERSION).so ++# rm -f $(DESTDIR)$(libdir)/libelf.so.$(VERSION) ++# rm -f $(DESTDIR)$(libdir)/libelf.so + endif + + .PSEUDO: lint +--- elfutils-0.97/libelf/Makefile.in.orig 2004-09-25 19:41:08.000000000 +0000 ++++ elfutils-0.97/libelf/Makefile.in 2005-02-10 18:01:28.028920662 +0000 +@@ -731,7 +731,7 @@ + @MUDFLAP_FALSE@ ln -fs $@ $@.$(VERSION) + + @MUDFLAP_FALSE@%.os: %.c %.o +-@MUDFLAP_FALSE@ if $(COMPILE) -c -o $@ -fpic -DPIC -DSHARED -MT $@ -MD -MP \ ++@MUDFLAP_FALSE@ if $(COMPILE) -c -o $@ -fPIC -DPIC -DSHARED -MT $@ -MD -MP \ + @MUDFLAP_FALSE@ -MF "$(DEPDIR)/$*.Tpo" `test -f '$<' || echo '$(srcdir)/'`$<; \ + @MUDFLAP_FALSE@ then cat "$(DEPDIR)/$*.Tpo" >> "$(DEPDIR)/$*.Po"; \ + @MUDFLAP_FALSE@ rm -f "$(DEPDIR)/$*.Tpo"; \ +--- elfutils-0.97/libelf/libelfP.h.orig 2003-12-25 18:43:31.000000000 +0000 ++++ elfutils-0.97/libelf/libelfP.h 2005-02-10 18:01:28.029920520 +0000 +@@ -387,7 +387,7 @@ + extern int __libelf_fill_byte attribute_hidden; + + /* Nonzero if the version was set. */ +-extern int __libelf_version_initialized attribute_hidden; ++extern int __libelf_version_initialized /* attribute_hidden */; + + + /* The libelf API does not have such a function but it is still useful. +--- elfutils-0.97/configure.ac 2006/08/14 23:04:23 1.1 ++++ elfutils-0.97/configure.ac 2006/08/14 23:06:50 +@@ -53,6 +53,8 @@ + AC_PROG_CPP + AC_PROG_GCC_TRADITIONAL + AM_GNU_GETTEXT([external]) ++MKINSTALLDIRS="\$(SHELL) \$(top_srcdir)/config/mkinstalldirs" ++AC_SUBST(MKINSTALLDIRS) + AC_PROG_RANLIB + AC_PROG_YACC + AM_PROG_LEX diff --git a/elfutils-0.97.tar.bz2 b/elfutils-0.97.tar.bz2 new file mode 100644 index 0000000..0402483 --- /dev/null +++ b/elfutils-0.97.tar.bz2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:105115416927f1498abecd7741af0d178a31a2bc780b3ab935b78bac48bac342 +size 216798 diff --git a/emptychangelog.diff b/emptychangelog.diff deleted file mode 100644 index cdcc15c..0000000 --- a/emptychangelog.diff +++ /dev/null @@ -1,11 +0,0 @@ ---- ./build/parseChangelog.c.orig 2011-05-23 14:19:48.000000000 +0000 -+++ ./build/parseChangelog.c 2011-05-23 14:20:36.000000000 +0000 -@@ -238,7 +238,7 @@ int parseChangelog(rpmSpec spec) - } - } - -- if (addChangelog(spec->packages->header, sb)) { -+ if (sb && addChangelog(spec->packages->header, sb)) { - goto exit; - } - res = nextPart; diff --git a/emptyfilelist.diff b/emptyfilelist.diff new file mode 100644 index 0000000..95103d6 --- /dev/null +++ b/emptyfilelist.diff @@ -0,0 +1,16 @@ +Fix segfault when rpmbuild stumbles over an empty file list. +The "+ 1" is a remedy for xmalloc(0), which would return NULL. + +Index: ./build/files.c +=================================================================== +--- ./build/files.c ++++ ./build/files.c +@@ -1380,7 +1380,7 @@ static void genCpioListAndHeader(/*@part + : (int *)(fi->bnl + fi->fc); + /*@=dependenttrans@*/ + +- fi->apath = xmalloc(fi->fc * sizeof(*fi->apath) + apathlen); ++ fi->apath = xmalloc(fi->fc * sizeof(*fi->apath) + apathlen + 1); + a = (char *)(fi->apath + fi->fc); + *a = '\0'; + diff --git a/emptyprep.diff b/emptyprep.diff deleted file mode 100644 index 1b53278..0000000 --- a/emptyprep.diff +++ /dev/null @@ -1,13 +0,0 @@ -Do not segfault if the prep section is empty - ---- build/parsePrep.c.orig 2011-05-13 16:22:59.000000000 +0000 -+++ build/parsePrep.c 2011-05-13 16:23:41.000000000 +0000 -@@ -518,7 +518,7 @@ int parsePrep(rpmSpec spec) - } - } - -- for (ARGV_const_t lines = saveLines; *lines; lines++) { -+ for (ARGV_const_t lines = saveLines; lines && *lines; lines++) { - res = 0; - if (rstreqn(*lines, "%setup", sizeof("%setup")-1)) { - res = doSetupMacro(spec, *lines); diff --git a/erasebadreturn.diff b/erasebadreturn.diff new file mode 100644 index 0000000..554c4dc --- /dev/null +++ b/erasebadreturn.diff @@ -0,0 +1,16 @@ +Do not call rpmtsRun with an empty transaction list, it returns -1 +which messes up the numFailed counter. [#43267] + +Index: lib/rpminstall.c +=================================================================== +--- lib/rpminstall.c.orig ++++ lib/rpminstall.c +@@ -844,7 +844,7 @@ int rpmErase(rpmts ts, struct rpmInstall + } + #endif + +- if (!stopUninstall) { ++ if (numPackages && !stopUninstall) { + (void) rpmtsSetFlags(ts, (rpmtsFlags(ts) | RPMTRANS_FLAG_REVERSE)); + + /* Drop added/available package indices and dependency sets. */ diff --git a/eraseignoresize.diff b/eraseignoresize.diff new file mode 100644 index 0000000..b384f41 --- /dev/null +++ b/eraseignoresize.diff @@ -0,0 +1,28 @@ +Allow "--ignoresize" for erase operations. + +Index: lib/rpminstall.c +=================================================================== +--- lib/rpminstall.c.orig ++++ lib/rpminstall.c +@@ -850,7 +850,7 @@ int rpmErase(rpmts ts, struct rpmInstall + /* Drop added/available package indices and dependency sets. */ + rpmtsClean(ts); + +- numPackages = rpmtsRun(ts, NULL, 0); ++ numPackages = rpmtsRun(ts, NULL, ia->probFilter & (RPMPROB_FILTER_DISKSPACE|RPMPROB_FILTER_DISKNODES)); + ps = rpmtsProblems(ts); + if (rpmpsNumProblems(ps) > 0) + rpmpsPrint(NULL, ps); +Index: rpmqv.c +=================================================================== +--- rpmqv.c.orig ++++ rpmqv.c +@@ -468,7 +468,7 @@ int main(int argc, const char ** argv) + argerror(_("--ignoreos may only be specified during package " + "installation")); + +- if (bigMode != MODE_INSTALL && ++ if (bigMode != MODE_INSTALL && bigMode != MODE_ERASE && + (ia->probFilter & (RPMPROB_FILTER_DISKSPACE|RPMPROB_FILTER_DISKNODES))) + argerror(_("--ignoresize may only be specified during package " + "installation")); diff --git a/eraseordered.diff b/eraseordered.diff new file mode 100644 index 0000000..e7093bb --- /dev/null +++ b/eraseordered.diff @@ -0,0 +1,21 @@ +Order packages when erasing. Not tested very well. + +Index: lib/rpminstall.c +=================================================================== +--- lib/rpminstall.c.orig ++++ lib/rpminstall.c +@@ -835,14 +835,12 @@ int rpmErase(rpmts ts, struct rpmInstall + ps = rpmpsFree(ps); + } + +-#ifdef NOTYET + if (!stopUninstall && !(ia->installInterfaceFlags & INSTALL_NOORDER)) { + if (rpmtsOrder(ts)) { + numFailed += numPackages; + stopUninstall = 1; + } + } +-#endif + + if (!stopUninstall) { + (void) rpmtsSetFlags(ts, (rpmtsFlags(ts) | RPMTRANS_FLAG_REVERSE)); diff --git a/exitstatus.diff b/exitstatus.diff new file mode 100644 index 0000000..f77e0e8 --- /dev/null +++ b/exitstatus.diff @@ -0,0 +1,15 @@ +Deal with a return value of "-2" when database locking failed. + +--- ./lib/rpminstall.c.orig 2005-12-14 21:01:09.000000000 +0000 ++++ ./lib/rpminstall.c 2005-12-15 14:47:35.000000000 +0000 +@@ -599,6 +611,10 @@ if (fileURL[0] == '=') { + eiu->numFailed++; + goto exit; + /*@notreached@*/ /*@switchbreak@*/ break; ++ default: ++ eiu->numFailed++; ++ goto exit; ++ /*@notreached@*/ /*@switchbreak@*/ break; + } + + eiu->numRPMS++; diff --git a/extcond.diff b/extcond.diff index 32d8e81..bd5055c 100644 --- a/extcond.diff +++ b/extcond.diff @@ -4,9 +4,9 @@ assumed to be true. This mechanism is used by the weakdeps patch to filter the "RPMSENSE_STRONG" flag. ---- ./lib/headerfmt.c.orig 2010-12-03 12:11:57.000000000 +0000 -+++ ./lib/headerfmt.c 2011-05-10 17:06:49.000000000 +0000 -@@ -568,8 +568,12 @@ static int parseExpression(headerSprintf +--- ./rpmdb/header.c.orig 2005-06-06 23:33:54.000000000 +0000 ++++ ./rpmdb/header.c 2006-03-17 18:08:02.000000000 +0000 +@@ -2980,8 +2980,12 @@ static int parseExpression(headerSprintf *endPtr = chptr; @@ -19,16 +19,16 @@ This mechanism is used by the weakdeps patch to filter the (void) findTag(hsa, token, str); return 0; -@@ -657,6 +661,7 @@ static char * singleSprintf(headerSprint - int i, j, found; - rpm_count_t count, numElements; +@@ -3239,6 +3243,7 @@ static char * singleSprintf(headerSprint + int_32 type; + int_32 count; sprintfToken spft; + sprintfTag stag; int condNumFormats; size_t need; -@@ -687,6 +692,18 @@ static char * singleSprintf(headerSprint - headerIsEntry(hsa->h, token->u.cond.tag.tag)) { +@@ -3270,6 +3275,18 @@ static char * singleSprintf(headerSprint + if (token->u.cond.tag.ext || headerIsEntry(hsa->h, token->u.cond.tag.tag)) { spft = token->u.cond.ifFormat; condNumFormats = token->u.cond.numIfTokens; + if (token->u.cond.tag.fmt) { @@ -46,20 +46,33 @@ This mechanism is used by the weakdeps patch to filter the } else { spft = token->u.cond.elseFormat; condNumFormats = token->u.cond.numElseTokens; -@@ -710,10 +727,13 @@ static char * singleSprintf(headerSprint +@@ -3291,19 +3308,22 @@ static char * singleSprintf(headerSprint + spft = token->u.array.format; for (i = 0; i < token->u.array.numTokens; i++, spft++) { - rpmtd td = NULL; - if (spft->type != PTOK_TAG || +- spft->u.tag.arrayCount || - spft->u.tag.justOne) continue; + if (spft->type != PTOK_TAG && spft->type != PTOK_COND) + continue; ++ + stag = (spft->type == PTOK_COND ? &spft->u.cond.tag : &spft->u.tag); -+ if (stag->justOne) ++ if (stag->arrayCount || stag->justOne) + continue; -- if (!(td = getData(hsa, spft->u.tag.tag))) { -+ if (!(td = getData(hsa, stag->tag))) { - continue; - } - +- if (spft->u.tag.ext) { ++ if (stag->ext) { + /*@-boundswrite@*/ +- if (getExtension(hsa, spft->u.tag.ext, &type, NULL, &count, +- hsa->ec + spft->u.tag.extNum)) ++ if (getExtension(hsa, stag->ext, &type, NULL, &count, ++ hsa->ec + stag->extNum)) + continue; + /*@=boundswrite@*/ + } else { + /*@-boundswrite@*/ +- if (!headerGetEntry(hsa->h, spft->u.tag.tag, &type, NULL, &count)) ++ if (!headerGetEntry(hsa->h, stag->tag, &type, NULL, &count)) + continue; + /*@=boundswrite@*/ + } diff --git a/fileattrs.diff b/fileattrs.diff deleted file mode 100644 index 155a52b..0000000 --- a/fileattrs.diff +++ /dev/null @@ -1,85 +0,0 @@ -Index: fileattrs/debuginfo.attr -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ fileattrs/debuginfo.attr 2011-06-06 16:16:00.853820498 +0200 -@@ -0,0 +1,2 @@ -+%__debuginfo_provides %{_rpmconfigdir}/debuginfo.prov -+%__debuginfo_path ^/usr/lib/debug/ -Index: fileattrs/elf.attr -=================================================================== ---- fileattrs/elf.attr.orig 2011-06-06 16:15:01.591403879 +0200 -+++ fileattrs/elf.attr 2011-06-06 16:16:00.853820498 +0200 -@@ -1,4 +1,5 @@ - %__elf_provides %{_rpmconfigdir}/elfdeps --provides %{?__filter_GLIBC_PRIVATE:--filter-private} - %__elf_requires %{_rpmconfigdir}/elfdeps --requires %{?__filter_GLIBC_PRIVATE:--filter-private} --%__elf_magic ^ELF (32|64)-bit.*$ -+%__elf_magic ^ELF (32|64)-bit.*executable - %__elf_flags exeonly -+%__elf_exclude_path ^/usr/lib/debug/ -Index: fileattrs/elflib.attr -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ fileattrs/elflib.attr 2011-06-06 16:16:00.854820404 +0200 -@@ -0,0 +1,4 @@ -+%__elflib_provides %{_rpmconfigdir}/elfdeps --assume-exec --provides %{?__filter_GLIBC_PRIVATE:--filter-private} -+%__elflib_requires %{_rpmconfigdir}/elfdeps --assume-exec --requires %{?__filter_GLIBC_PRIVATE:--filter-private} -+%__elflib_magic ^ELF (32|64)-bit.*shared object -+%__elflib_exclude_path ^/usr/lib/debug/ -Index: fileattrs/firmware.attr -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ fileattrs/firmware.attr 2011-06-06 16:16:00.854820404 +0200 -@@ -0,0 +1,2 @@ -+%__firmware_provides %{_rpmconfigdir}/firmware.prov -+%__firmware_path /lib/firmware/ -Index: fileattrs/ksyms.attr -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ fileattrs/ksyms.attr 2011-06-06 16:16:00.854820404 +0200 -@@ -0,0 +1,4 @@ -+%__ksyms_provides %{_rpmconfigdir}/find-provides.ksyms %name -+%__ksyms_requires %{_rpmconfigdir}/find-requires.ksyms %name -+%__ksyms_supplements %{_rpmconfigdir}/find-supplements.ksyms %name -+%__ksyms_path (/lib/modules/.*\.ko(\.gz)?)|(/boot/vmlinu[xz].*)$ -Index: fileattrs/Makefile.am -=================================================================== ---- fileattrs/Makefile.am.orig 2011-06-06 16:15:01.590403974 +0200 -+++ fileattrs/Makefile.am 2011-06-06 16:16:08.852066946 +0200 -@@ -5,7 +5,8 @@ include $(top_srcdir)/rpm.am - fattrsdir = $(rpmconfigdir)/fileattrs - - fattrs_DATA = \ -- desktop.attr elf.attr font.attr libtool.attr perl.attr perllib.attr \ -- pkgconfig.attr python.attr ocaml.attr script.attr mono.attr -+ elf.attr font.attr libtool.attr perl.attr perllib.attr \ -+ pkgconfig.attr python.attr ocaml.attr script.attr mono.attr \ -+ debuginfo.attr elflib.attr firmware.attr ksyms.attr sysvinit.attr - - EXTRA_DIST = $(fattrs_DATA) -Index: fileattrs/perl.attr -=================================================================== ---- fileattrs/perl.attr.orig 2011-06-06 16:15:01.591403879 +0200 -+++ fileattrs/perl.attr 2011-06-06 16:16:00.855820310 +0200 -@@ -1,3 +1,4 @@ --%__perl_requires %{_rpmconfigdir}/perl.req -+# disabled for now -+#%__perl_requires %{_rpmconfigdir}/perl.req - %__perl_magic ^.*perl .*$ - %__perl_flags exeonly -Index: fileattrs/perllib.attr -=================================================================== ---- fileattrs/perllib.attr.orig 2011-06-06 16:15:01.591403879 +0200 -+++ fileattrs/perllib.attr 2011-06-06 16:16:00.855820310 +0200 -@@ -1,3 +1,4 @@ - %__perllib_provides %{_rpmconfigdir}/perl.prov --%__perllib_requires %{_rpmconfigdir}/perl.req -+#disabled for now -+#%__perllib_requires %{_rpmconfigdir}/perl.req - %__perllib_magic ^Perl[[:digit:]] module source.* -Index: fileattrs/sysvinit.attr -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ fileattrs/sysvinit.attr 2011-06-06 16:16:00.856820216 +0200 -@@ -0,0 +1,2 @@ -+%__sysvinit_provides %{_rpmconfigdir}/sysvinitdeps.sh --provides -+%__sysvinit_path ^/etc/init\.d/ diff --git a/filenonull.diff b/filenonull.diff new file mode 100644 index 0000000..ff1fc86 --- /dev/null +++ b/filenonull.diff @@ -0,0 +1,12 @@ +Return an error if Fileno is called with NULL instead of segfaulting. + +--- ./rpmio/rpmio.c.orig 2005-01-26 03:39:58.000000000 +0000 ++++ ./rpmio/rpmio.c 2005-12-16 17:51:19.000000000 +0000 +@@ -3094,6 +3164,7 @@ int Fileno(FD_t fd) + { + int i, rc = -1; + ++ if (fd == NULL) return -1; + if (fd->req != NULL) + rc = 123456789; /* HACK: https has no steenkin fileno. */ + else diff --git a/filequery.diff b/filequery.diff new file mode 100644 index 0000000..e96020a --- /dev/null +++ b/filequery.diff @@ -0,0 +1,14 @@ +Do not check package provides if there is no slash in the file path. +bugzilla [#32467], rh#125516. + +--- ./lib/query.c.orig 2004-10-26 23:29:28.000000000 +0000 ++++ ./lib/query.c 2005-12-16 18:22:19.000000000 +0000 +@@ -614,7 +637,7 @@ int rpmQueryVerify(QVA_t qva, rpmts ts, + if (qva->qva_mi == NULL) { + if (access(fn, F_OK) != 0) + myerrno = errno; +- else if (!provides_checked) ++ else if (!provides_checked && strchr(fn, '/')) + qva->qva_mi = rpmtsInitIterator(ts, RPMTAG_PROVIDENAME, fn, 0); + } + diff --git a/files.diff b/files.diff deleted file mode 100644 index 32c6fa2..0000000 --- a/files.diff +++ /dev/null @@ -1,17 +0,0 @@ -Print "unpackaged files" section even if there was an error -in the filelist. - ---- ./build/files.c.orig 2011-05-11 15:27:11.000000000 +0000 -+++ ./build/files.c 2011-05-11 15:29:12.000000000 +0000 -@@ -2149,10 +2149,10 @@ rpmRC processBinaryFiles(rpmSpec spec, r - */ - - -+exit: - if (checkFiles(spec->buildRoot, check_fileList) > 0) { - rc = RPMRC_FAIL; - } --exit: - check_fileList = freeStringBuf(check_fileList); - - return rc; diff --git a/finddebuginfo-absolute-links.diff b/finddebuginfo-absolute-links.diff deleted file mode 100644 index 9cd08c7..0000000 --- a/finddebuginfo-absolute-links.diff +++ /dev/null @@ -1,41 +0,0 @@ -From: Jan Blunck -Subject: Do the symbolic links right in the first place - -Since brp-symlink relinks symbolic links to enforce a certain policy we should -do it right in the first place. So this patch changes find-debuginfo.sh scripts -behavior to reflect that policy. - -Signed-off-by: Jan Blunck - ---- ./scripts/find-debuginfo.sh.orig 2011-05-11 15:36:05.000000000 +0000 -+++ ./scripts/find-debuginfo.sh 2011-05-11 15:58:17.000000000 +0000 -@@ -124,7 +124,17 @@ debug_link() - local l="/usr/lib/debug$2" - local t="$1" - echo >> "$LINKSFILE" "$l $t" -- link_relative "$t" "$l" "$RPM_BUILD_ROOT" -+ -+ # this should correspond to what brp-symlink is doing -+ case $t in -+ /usr*) -+ link_relative "$t" "$l" "$RPM_BUILD_ROOT" -+ ;; -+ *) -+ mkdir -p "$(dirname "$RPM_BUILD_ROOT$l")" && \ -+ ln -snf "$t" "$RPM_BUILD_ROOT$l" -+ ;; -+ esac - } - - # Compare two binaries but ignore the .note.gnu.build-id section -@@ -158,8 +168,8 @@ make_id_link() - - local other=$(readlink -m "$root_idfile") - other=${other#$RPM_BUILD_ROOT} -- if cmp -s "$root_idfile" "$RPM_BUILD_ROOT$file" || -- elfcmp "$root_idfile" "$RPM_BUILD_ROOT$file" ; then -+ if cmp -s "$RPM_BUILD_ROOT$other" "$RPM_BUILD_ROOT$file" || -+ elfcmp "$RPM_BUILD_ROOT$other" "$RPM_BUILD_ROOT$file" ; then - # Two copies. Maybe one has to be setuid or something. - echo >&2 "*** WARNING: identical binaries are copied, not linked:" - echo >&2 " $file" diff --git a/finddebuginfo.diff b/finddebuginfo.diff index d382d24..f53501f 100644 --- a/finddebuginfo.diff +++ b/finddebuginfo.diff @@ -1,119 +1,102 @@ ---- ./scripts/find-debuginfo.sh.orig 2010-12-03 12:11:57.000000000 +0000 -+++ ./scripts/find-debuginfo.sh 2011-05-11 14:46:18.000000000 +0000 -@@ -127,6 +127,20 @@ debug_link() - link_relative "$t" "$l" "$RPM_BUILD_ROOT" - } - -+# Compare two binaries but ignore the .note.gnu.build-id section -+elfcmp() -+{ -+ local tmp1=$(mktemp -t ${1##*/}.XXXXXX) -+ local tmp2=$(mktemp -t ${2##*/}.XXXXXX) -+ -+ objcopy -R .note.gnu.build-id -R .gnu_debuglink $1 $tmp1 -+ objcopy -R .note.gnu.build-id -R .gnu_debuglink $2 $tmp2 -+ cmp -s $tmp1 $tmp2 -+ local res=$? -+ rm -f $tmp1 $tmp2 -+ return $res -+} -+ - # Make a build-id symlink for id $1 with suffix $3 to file $2. - make_id_link() - { -@@ -145,7 +159,7 @@ make_id_link() - local other=$(readlink -m "$root_idfile") - other=${other#$RPM_BUILD_ROOT} - if cmp -s "$root_idfile" "$RPM_BUILD_ROOT$file" || -- eu-elfcmp -q "$root_idfile" "$RPM_BUILD_ROOT$file" 2> /dev/null; then -+ elfcmp "$root_idfile" "$RPM_BUILD_ROOT$file" ; then - # Two copies. Maybe one has to be setuid or something. - echo >&2 "*** WARNING: identical binaries are copied, not linked:" - echo >&2 " $file" -@@ -174,12 +188,18 @@ strict_error=ERROR - $strict || strict_error=WARNING +SUSE specific find-debuginfo changes. + +--- ./scripts/find-debuginfo.sh.orig 2005-07-14 15:52:31.000000000 +0000 ++++ ./scripts/find-debuginfo.sh 2006-03-17 13:13:03.000000000 +0000 +@@ -14,9 +14,18 @@ debugdir="${RPM_BUILD_ROOT}/usr/lib/debu + echo -n > $SOURCEFILE # Strip ELF binaries --find "$RPM_BUILD_ROOT" ! -path "${debugdir}/*.debug" -type f \ -- \( -perm -0100 -or -perm -0010 -or -perm -0001 \) \ -- -print | --file -N -f - | sed -n -e 's/^\(.*\):[ ]*.*ELF.*, not stripped/\1/p' | --xargs --no-run-if-empty stat -c '%h %D_%i %n' | -+find $RPM_BUILD_ROOT ! -path "${debugdir}/*.debug" -type f \( -perm +111 -or -name "*.so*" -or -name "*.ko" \) -print 0 | sort -z | -+xargs --no-run-if-empty -0 stat -c '%h %D_%i %n' | - while read nlinks inum f; do -+ case $(objdump -h $f 2>/dev/null | egrep -o '(debug[\.a-z_]*|gnu.version)') in -+ *debuglink*) continue ;; -+ *debug*) ;; -+ *gnu.version*) -+ echo "WARNING: "`echo $f | sed -e "s,^$RPM_BUILD_ROOT/*,/,"`" is already stripped!" -+ continue -+ ;; -+ *) continue ;; -+ esac - get_debugfn "$f" - [ -f "${debugfn}" ] && continue +-for f in `find $RPM_BUILD_ROOT ! -path "${debugdir}/*.debug" -type f \( -perm -0100 -or -perm -0010 -or -perm -0001 \) -exec file {} \; | \ +- sed -n -e 's/^\(.*\):[ ]*.*ELF.*, not stripped/\1/p'` ++for f in `find $RPM_BUILD_ROOT ! -path "${debugdir}/*.debug" -type f \( -perm +111 -or -name "*.so*" -or -name "*.ko" \) ` + do ++ case $(objdump -h $f 2>/dev/null | egrep -o '(debug[\.a-z_]*|gnu.version)') in ++ *debuglink*) continue ;; ++ *debug*) ;; ++ *gnu.version*) ++ echo "WARNING: "`echo $f | sed -e "s,^$RPM_BUILD_ROOT/*,/,"`" is already stripped!" ++ continue ++ ;; ++ *) continue ;; ++ esac ++ + dn=$(dirname $f | sed -n -e "s#^$RPM_BUILD_ROOT##p") + bn=$(basename $f .debug).debug -@@ -200,8 +220,11 @@ while read nlinks inum f; do - fi +@@ -25,6 +34,8 @@ do + [ -f "${debugfn}" ] && continue - echo "extracting debug info from $f" -- id=$(/usr/lib/rpm/debugedit -b "$RPM_BUILD_DIR" -d /usr/src/debug \ -- -i -l "$SOURCEFILE" "$f") || exit -+ mode=$(stat -c %a "$f") -+ chmod +w "$f" -+ id=$($(DEBUGEDIT=$(which debugedit 2>/dev/null); \ -+ echo ${DEBUGEDIT:-/usr/lib/rpm/debugedit}) -b "$RPM_BUILD_DIR" \ -+ -d /usr/src/debug -i -l "$SOURCEFILE" "$f") || exit - if [ -z "$id" ]; then - echo >&2 "*** ${strict_error}: No build ID note found in $f" - $strict && exit 2 -@@ -218,13 +241,25 @@ while read nlinks inum f; do - esac + echo extracting debug info from $f ++ mode=$(stat -c %a $f) ++ chmod +w $f + /usr/lib/rpm/debugedit -b "$RPM_BUILD_DIR" -d /usr/src/debug -l "$SOURCEFILE" "$f" - mkdir -p "${debugdn}" -- if test -w "$f"; then -- strip_to_debug "${debugfn}" "$f" -- else -- chmod u+w "$f" -- strip_to_debug "${debugfn}" "$f" -- chmod u-w "$f" -- fi -+ objcopy --only-keep-debug $f $debugfn || : -+ ( -+ shopt -s extglob -+ strip_option="--strip-all" -+ case "$f" in -+ *.ko) -+ strip_option="--strip-debug" ;; -+ *$STRIP_KEEP_SYMTAB*) -+ if test -n "$STRIP_KEEP_SYMTAB"; then -+ strip_option="--strip-debug" -+ fi -+ ;; -+ esac -+ if test "$NO_DEBUGINFO_STRIP_DEBUG" = true ; then -+ strip_option= -+ fi -+ objcopy --add-gnu-debuglink=$debugfn -R .comment -R .GCC.command.line $strip_option $f -+ chmod $mode $f -+ ) || : + # A binary already copied into /usr/lib/debug doesn't get stripped, +@@ -34,19 +45,56 @@ do + esac - if [ -n "$id" ]; then - make_id_link "$id" "$dn/$(basename $f)" -@@ -253,12 +288,14 @@ if [ -s "$SOURCEFILE" ]; then - # stupid cpio creates new directories in mode 0700, fixup - find "${RPM_BUILD_ROOT}/usr/src/debug" -type d -print0 | - xargs --no-run-if-empty -0 chmod a+rx -+ find "${RPM_BUILD_ROOT}/usr/src/debug" -type f -print0 | -+ xargs --no-run-if-empty -0 chmod a+r - fi + mkdir -p "${debugdn}" +- if test -w "$f"; then +- eu-strip -f "${debugfn}" "$f" || : +- else +- chmod u+w "$f" +- eu-strip -f "${debugfn}" "$f" || : +- chmod u-w "$f" ++ objcopy --only-keep-debug $f $debugfn || : ++ strip_option="--strip-all" ++ case "$f" in ++ *.ko|*.a) strip_option="--strip-debug" ;; ++ esac ++ if test -n "$STRIP_KEEP_SYMTAB" ; then ++ strip_option="--strip-debug" + fi ++ if test "$NO_DEBUGINFO_STRIP_DEBUG" = true ; then ++ strip_option= ++ fi ++ objcopy --add-gnu-debuglink=$debugfn $strip_option $f || : ++ chmod $mode $f + done - if [ -d "${RPM_BUILD_ROOT}/usr/lib" -o -d "${RPM_BUILD_ROOT}/usr/src" ]; then - ((nout > 0)) || - test ! -d "${RPM_BUILD_ROOT}/usr/lib" || -- (cd "${RPM_BUILD_ROOT}/usr/lib"; find debug -type d) | -+ (cd "${RPM_BUILD_ROOT}/usr/lib"; test ! -d debug || find debug -type d) | - sed 's,^,%dir /usr/lib/,' >> "$LISTFILE" ++for f in `find $RPM_BUILD_ROOT ! -path "${debugdir}/*.debug" -type f \( -name "*.exe.mdb" -or -name "*.dll.mdb" \) ` ++do ++ dn=$(dirname $f | sed -n -e "s#^$RPM_BUILD_ROOT##p") ++ case "$dn" in ++ /usr/lib/debug/*) continue ;; ++ esac ++ debugdn="${debugdir}${dn}" ++ mkdir -p "${debugdn}" ++ mv "$f" "${debugdn}" ++done ++ ++ + mkdir -p ${RPM_BUILD_ROOT}/usr/src/debug +-cat $SOURCEFILE | (cd $RPM_BUILD_DIR; LANG=C sort -z -u | cpio -pd0m ${RPM_BUILD_ROOT}/usr/src/debug) +-# stupid cpio creates new directories in mode 0700, fixup +-find ${RPM_BUILD_ROOT}/usr/src/debug -type d -print0 | xargs -0 chmod a+rx ++(cd $RPM_BUILD_DIR; LANG=C sort -z -u | cpio -pd0m ${RPM_BUILD_ROOT}/usr/src/debug) < $SOURCEFILE - (cd "${RPM_BUILD_ROOT}/usr" +-find ${RPM_BUILD_ROOT}/usr/lib/debug -type f | sed -n -e "s#^$RPM_BUILD_ROOT##p" > $LISTFILE +-find ${RPM_BUILD_ROOT}/usr/src/debug -mindepth 1 -maxdepth 1 | sed -n -e "s#^$RPM_BUILD_ROOT##p" >> $LISTFILE ++# trying to replace dangling and/or absolute symlink ++DBASE=${RPM_BUILD_ROOT}/usr/src/debug ++for link in `find $DBASE -type l -printf "%P\n"` ; do ++ link_file=`readlink $RPM_BUILD_DIR/$link` ++ case $link_file in ++ /*) is_abs=true ;; ++ *) is_abs= ;; ++ esac ++ if test ! -e "$DBASE/$link" -o -n "$is_abs" ; then # dangling ++ rm -f "$DBASE/$link" ++ cp "`readlink -f $RPM_BUILD_DIR/$link`" "$DBASE/$link" ++ fi ++done ++ ++{ ++ test -d ${RPM_BUILD_ROOT}/usr/lib/debug && echo /usr/lib/debug ++ echo /usr/src/debug ++} > $LISTFILE ++ ++for p in $(<$LISTFILE); do ++ find $RPM_BUILD_ROOT/$p -type f -print0 | xargs -0 -r chmod 0644 ++ find $RPM_BUILD_ROOT/$p -type d -print0 | xargs -0 -r chmod 0755 ++done diff --git a/findfplistexclude.diff b/findfplistexclude.diff new file mode 100644 index 0000000..45b185f --- /dev/null +++ b/findfplistexclude.diff @@ -0,0 +1,114 @@ +Allow an "exclude" parameter for rpmdbFindFp, specifying a header +that is to be excluded in the match. Used to speed up package erase +operations. +Also fixes the skipDir problem that made rpm incorrectly delete +files even if another package still references them. +rh#140055 + +Index: lib/transaction.c +=================================================================== +--- lib/transaction.c.orig ++++ lib/transaction.c +@@ -1745,7 +1745,7 @@ rpmMessage(RPMMESS_DEBUG, _("computing f + (void) rpmswEnter(rpmtsOp(ts, RPMTS_OP_FINGERPRINT), 0); + /* Extract file info for all files in this package from the database. */ + matches = xcalloc(fc, sizeof(*matches)); +- if (rpmdbFindFpList(rpmtsGetRdb(ts), fi->fps, matches, fc)) { ++ if (rpmdbFindFpListExclude(rpmtsGetRdb(ts), fi->fps, matches, fc, rpmteType(p) == TR_REMOVED ? fi->record : 0)) { + ps = rpmpsFree(ps); + rpmtsFreeLock(lock); + return 1; /* XXX WTFO? */ +Index: rpmdb/fprint.h +=================================================================== +--- rpmdb/fprint.h.orig ++++ rpmdb/fprint.h +@@ -79,6 +79,12 @@ int rpmdbFindFpList(/*@null@*/ rpmdb db, + /*@modifies db, *matchList, rpmGlobalMacroContext, + fileSystem, internalState @*/; + ++int rpmdbFindFpListExclude(/*@null@*/ rpmdb db, fingerPrint * fpList, ++ /*@out@*/ dbiIndexSet * matchList, int numItems, unsigned int exclude) ++ /*@globals rpmGlobalMacroContext, fileSystem, internalState @*/ ++ /*@modifies db, *matchList, rpmGlobalMacroContext, ++ fileSystem, internalState @*/; ++ + /* Be carefull with the memory... assert(*fullName == '/' || !scareMemory) */ + + /** +Index: rpmdb/rpmdb.c +=================================================================== +--- rpmdb/rpmdb.c.orig ++++ rpmdb/rpmdb.c +@@ -2358,7 +2358,7 @@ static void rpmdbSortIterator(/*@null@*/ + } + + /*@-bounds@*/ /* LCL: segfault */ +-static int rpmdbGrowIterator(/*@null@*/ rpmdbMatchIterator mi, int fpNum) ++static int rpmdbGrowIterator(/*@null@*/ rpmdbMatchIterator mi, int fpNum, unsigned int exclude) + /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/ + /*@modifies mi, rpmGlobalMacroContext, fileSystem, internalState @*/ + { +@@ -2369,7 +2369,7 @@ static int rpmdbGrowIterator(/*@null@*/ + dbiIndexSet set; + int rc; + int xx; +- int i; ++ int i, j; + + if (mi == NULL) + return 1; +@@ -2405,6 +2405,25 @@ static int rpmdbGrowIterator(/*@null@*/ + + set = NULL; + (void) dbt2set(dbi, data, &set); ++ ++ /* prune the set against exclude */ ++ for (i = j = 0; i < set->count; i++) { ++ if (exclude && set->recs[i].hdrNum == exclude) ++ continue; ++ if (i != j) ++ set->recs[j] = set->recs[i]; ++ j++; ++ } ++ if (j == 0) { ++#ifdef SQLITE_HACK ++ xx = dbiCclose(dbi, dbcursor, 0); ++ dbcursor = NULL; ++#endif ++ set = dbiFreeIndexSet(set); ++ return DB_NOTFOUND; ++ } ++ set->count = j; ++ + for (i = 0; i < set->count; i++) + set->recs[i].fpNum = fpNum; + +@@ -3393,6 +3412,12 @@ static int skipDir(const char * dn) + int rpmdbFindFpList(rpmdb db, fingerPrint * fpList, dbiIndexSet * matchList, + int numItems) + { ++ return rpmdbFindFpListExclude(db, fpList, matchList, numItems, 0); ++} ++ ++int rpmdbFindFpListExclude(rpmdb db, fingerPrint * fpList, dbiIndexSet * matchList, ++ int numItems, unsigned int exclude) ++{ + DBT * key; + DBT * data; + HGE_t hge = (HGE_t)headerGetEntryMinMemory; +@@ -3424,10 +3449,13 @@ key->data = (void *) fpList[i].baseName; + key->size = strlen((char *)key->data); + if (key->size == 0) key->size++; /* XXX "/" fixup. */ + +- if (skipDir(fpList[i].entry->dirName)) ++ /* HACK HACK HACK: don't skip dirs while removing ++ * packages as we will loose files on conflicts. ++ * exclude is not zero when removing */ ++ if (!exclude && skipDir(fpList[i].entry->dirName)) + continue; + +- xx = rpmdbGrowIterator(mi, i); ++ xx = rpmdbGrowIterator(mi, i, exclude); + + } + diff --git a/findksyms.diff b/findksyms.diff index 786cc91..88d4f02 100644 --- a/findksyms.diff +++ b/findksyms.diff @@ -1,26 +1,10 @@ SUSE specific kernel provides/requires scripts ---- ./scripts/Makefile.am.orig 2011-05-11 14:31:45.000000000 +0000 -+++ ./scripts/Makefile.am 2011-05-11 14:46:38.000000000 +0000 -@@ -16,6 +16,7 @@ EXTRA_DIST = \ - rpmdb_loadcvt rpm.daily rpm.log rpm2cpio.sh \ - tcl.req tgpg vpkg-provides.sh \ - find-requires.php find-provides.php \ -+ find-requires.ksyms find-provides.ksyms \ - find-php-provides find-php-requires \ - mono-find-requires mono-find-provides \ - ocaml-find-requires.sh ocaml-find-provides.sh \ -@@ -32,6 +33,7 @@ rpmconfig_SCRIPTS = \ - check-buildroot check-rpaths check-rpaths-worker \ - find-lang.sh \ - perl.prov perl.req perldeps.pl pythondeps.sh osgideps.pl \ -+ find-requires.ksyms find-provides.ksyms \ - mono-find-requires mono-find-provides \ - pkgconfigdeps.sh libtooldeps.sh \ - ocaml-find-requires.sh ocaml-find-provides.sh \ ---- ./scripts/find-provides.ksyms.orig 2011-05-11 14:46:38.000000000 +0000 -+++ ./scripts/find-provides.ksyms 2011-05-11 14:46:38.000000000 +0000 -@@ -0,0 +1,41 @@ +Index: scripts/find-provides.ksyms +=================================================================== +--- /dev/null ++++ scripts/find-provides.ksyms +@@ -0,0 +1,20 @@ +#! /bin/sh + +IFS=$'\n' @@ -28,43 +12,24 @@ SUSE specific kernel provides/requires scripts +case "$1" in +kernel-module-*) ;; # Fedora kernel module package names start with + # kernel-module. -+kernel*) kernel_flavor=${1#kernel-} ;; ++kernel*) is_kernel_package=1 ;; +esac + -+trap 'rm -f "$tmp"' EXIT -+tmp=$(mktemp) -+while read f; do -+ test -e "$f" || continue -+ case "$f" in -+ *.debug) -+ continue -+ ;; -+ */lib/modules/*/*.ko | */lib/modules/*/*.ko.gz | */boot/vmlinu[xz]*) -+ ;; -+ *) -+ continue -+ esac -+ unzip=false -+ case "$f" in -+ *.gz | */boot/vmlinuz*) -+ unzip=true -+ esac -+ if $unzip && gzip -cd "$f" >"$tmp"; then -+ f=$tmp -+ fi -+ flavor=$(/sbin/modinfo -F vermagic "$f") -+ flavor=${flavor%% *} -+ flavor=${flavor##*-} -+ if test -z "$flavor"; then -+ flavor=$kernel_flavor -+ fi -+ nm "$f" \ -+ | sed -r -ne "s/^0*([0-9a-f]+) A __crc_(.+)/ksym($flavor:\\2) = \\1/p" ++if ! [ -z "$is_kernel_package" ]; then ++ cat > /dev/null ++ exit 0 ++fi ++ ++for module in $(grep -E '/lib/modules/.+\.ko$'); do ++ nm "$module" \ ++ | sed -r -ne 's:^0*([0-9a-f]+) A __crc_(.+):ksym(\2) = \1:p' +done \ +| sort -u ---- ./scripts/find-requires.ksyms.orig 2011-05-11 14:46:38.000000000 +0000 -+++ ./scripts/find-requires.ksyms 2011-05-11 14:46:38.000000000 +0000 -@@ -0,0 +1,57 @@ +Index: scripts/find-requires.ksyms +=================================================================== +--- /dev/null ++++ scripts/find-requires.ksyms +@@ -0,0 +1,58 @@ +#! /bin/bash + +IFS=$'\n' @@ -80,16 +45,18 @@ SUSE specific kernel provides/requires scripts + nm "$module" + done \ + | sed -r -ne 's:^0*([0-9a-f]+) A __crc_(.+):\1\t\2:p' \ -+ | sort -t $'\t' -k2 -u ++ | sort -k2 -u +} + +all_requires() { + for module in "$@"; do + set -- $(/sbin/modinfo -F vermagic "$module" | sed -e 's: .*::' -e q) -+ /sbin/modprobe --dump-modversions "$module" \ ++ if [ -e "/boot/symsets-$1.tar.gz" ]; then ++ /sbin/modprobe --dump-modversions "$module" \ + | sed -r -e 's:^0x0*::' -e 's:$:\t'"$1"':' ++ fi + done \ -+ | sort -t $'\t' -k2 -u ++ | sort -k2 -u +} + +if ! [ -z "$is_kernel_package" -a -e /sbin/modinfo -a -e /sbin/modprobe ]; then @@ -100,7 +67,7 @@ SUSE specific kernel provides/requires scripts +modules=($(grep -E '/lib/modules/.+\.ko$')) +if [ ${#modules[@]} -gt 0 ]; then + symset_table=$(mktemp -t ${0##*/}.XXXXX) -+ /usr/lib/rpm/symset-table | sort -t $'\t' -k 1,1 > $symset_table ++ /usr/lib/rpm/symset-table | sort > $symset_table + + join -t $'\t' -j 1 -a 2 $symset_table <( + # Filter out requirements that we fulfill ourself. @@ -111,14 +78,13 @@ SUSE specific kernel provides/requires scripts + BEGIN { FS = "\t" ; OFS = "\t" } + { print $3 "/" $2 "/" $1 } + ' \ -+ | sort -t $'\t' -k 1,1 -u) \ ++ | sort -u) \ + | sort -u \ + | awk ' + { FS = "\t" ; OFS = "\t" } -+ { split($1, arr, "/") -+ flavor = gensub(/.*-/, "", "", arr[1]) } -+ NF == 3 { print "kernel(" flavor ":" $2 ") = " $3 ++ NF == 3 { print "kernel(" $2 ") = " $3 + next } -+ { print "ksym(" flavor ":" arr[3] ") = " arr[2] } ++ { split($1, arr, "/") ++ print "ksym(" arr[3] ") = " arr[2] } + ' +fi diff --git a/findlang.diff b/findlang.diff index 51b9ab3..235d1a8 100644 --- a/findlang.diff +++ b/findlang.diff @@ -1,20 +1,22 @@ ---- ./scripts/find-lang.sh.orig 2010-12-03 12:11:57.000000000 +0000 -+++ ./scripts/find-lang.sh 2011-05-11 14:53:34.000000000 +0000 +SUSE patches for find-lang. + +--- ./scripts/find-lang.sh.orig 2004-06-20 18:55:19.000000000 +0000 ++++ ./scripts/find-lang.sh 2005-12-19 15:22:52.000000000 +0000 @@ -28,10 +28,10 @@ the top of the tree containing the files PACKAGE_NAME is the %{name} of the package. This should also be the basename of the .mo files. the output is written to PACKAGE_NAME.lang unless \$3 is given in which case output is written -to \$3. -+to \$3 (note that \$3 is appended to if given). ++to \$3 (note, that \$3 is appended to if given). Additional options: - --with-gnome find GNOME help files - --with-kde find KDE help files -+ --without-gnome do not find GNOME help files -+ --without-kde do not find KDE help files - --with-qt find Qt translation files - --with-man find localized man pages ++ --without-gnome find GNOME help files ++ --without-kde find KDE help files --all-name match all package/domain names -@@ -54,8 +54,8 @@ else NAME=$1 + --without-mo not find locales files + EOF +@@ -52,8 +52,8 @@ else NAME=$1 fi shift @@ -22,54 +24,64 @@ -KDE=# +GNOME= +KDE= - QT=# - MAN=# MO= -@@ -73,6 +73,14 @@ while test $# -gt 0 ; do - KDE= - shift - ;; + MO_NAME=$NAME.lang + ALL_NAME=# +@@ -61,12 +61,12 @@ NO_ALL_NAME= + + while test $# -gt 0 ; do + case "${1}" in +- --with-gnome ) +- GNOME= + --without-gnome ) + GNOME=# -+ shift -+ ;; + shift + ;; +- --with-kde ) +- KDE= + --without-kde ) + KDE=# -+ shift -+ ;; - --with-qt ) - QT= shift -@@ -97,33 +105,40 @@ while test $# -gt 0 ; do + ;; + --without-mo ) +@@ -85,26 +85,43 @@ while test $# -gt 0 ; do esac done +-find $TOP_DIR -type f|sed ' ++ +if ! test -s $MO_NAME ; then -+ echo "%defattr (644, root, root, 755)" > $MO_NAME ++ echo "%defattr (644, root, root, 755)" > $MO_NAME +fi + +MO_NAME_NEW=$MO_NAME.tmp.$$ +rm -f $MO_NAME_NEW + - find $TOP_DIR -type f -o -type l|sed ' ++find $TOP_DIR -type f -o -type l|sed ' s:'"$TOP_DIR"':: --'"$ALL_NAME$MO"'s:\(.*/locale/\)\([^/_]\+\)\(.*\.mo$\):%lang(\2) \1\2\3: --'"$NO_ALL_NAME$MO"'s:\(.*/locale/\)\([^/_]\+\)\(.*/'"$NAME"'\.mo$\):%lang(\2) \1\2\3: -+'"$ALL_NAME$MO"'s:\(.*/locale/\)\([^/_]\+\)\(.*\.mo$\):%lang(\2) %doc \1\2\3: -+'"$NO_ALL_NAME$MO"'s:\(.*/locale/\)\([^/_]\+\)\(.*/'"$NAME"'\.mo$\):%lang(\2) %doc \1\2\3: + '"$ALL_NAME$MO"'s:\(.*/share/locale/\)\([^/_]\+\)\(.*\.mo$\):%lang(\2) \1\2\3: + '"$NO_ALL_NAME$MO"'s:\(.*/share/locale/\)\([^/_]\+\)\(.*/'"$NAME"'\.mo$\):%lang(\2) \1\2\3: s:^\([^%].*\):: s:%lang(C) :: -/^$/d' > $MO_NAME -+/^$/d' >> $MO_NAME_NEW ++/^ *$/d' >> $MO_NAME_NEW ++ ++find $TOP_DIR -type f -o -type l|sed ' ++s:'"$TOP_DIR"':: ++/\/share\/locale\//d ++'"$ALL_NAME$MO"'s:\(.*/locale/\)\([^/_]\+\)\([^/]*\)\(.*\)/LC_MESSAGES/.*\.mo$:%lang(\2) %doc \1\2\3\4: ++'"$NO_ALL_NAME$MO"'s:\(.*/locale/\)\([^/_]\+\)\([^/]*\)\(.*\)/LC_MESSAGES/'"$NAME"'\.mo$:%lang(\2) %doc \1\2\3\4: ++s:^\([^%].*\):: ++s:%lang(C) :: ++/^ *$/d' >> $MO_NAME_NEW find $TOP_DIR -type d|sed ' s:'"$TOP_DIR"':: -'"$NO_ALL_NAME$GNOME"'s:\(.*/gnome/help/'"$NAME"'$\):%dir \1: +'"$NO_ALL_NAME$GNOME"'s:\(.*/gnome/help/'"$NAME"'$\):%dir %doc \1: '"$NO_ALL_NAME$GNOME"'s:\(.*/gnome/help/'"$NAME"'/[a-zA-Z0-9.\_\-]/.\+\):: --'"$NO_ALL_NAME$GNOME"'s:\(.*/gnome/help/'"$NAME"'\/\)\([^/_]\+\):%lang(\2) \1\2: + '"$NO_ALL_NAME$GNOME"'s:\(.*/gnome/help/'"$NAME"'\/\)\([^/_]\+\):%lang(\2) \1\2: -'"$ALL_NAME$GNOME"'s:\(.*/gnome/help/[a-zA-Z0-9.\_\-]\+$\):%dir \1: -+'"$NO_ALL_NAME$GNOME"'s:\(.*/gnome/help/'"$NAME"'\/\)\([^/_]\+\):%lang(\2) %doc \1\2: +'"$ALL_NAME$GNOME"'s:\(.*/gnome/help/[a-zA-Z0-9.\_\-]\+$\):%dir %doc \1: '"$ALL_NAME$GNOME"'s:\(.*/gnome/help/[a-zA-Z0-9.\_\-]\+/[a-zA-Z0-9.\_\-]/.\+\):: -'"$ALL_NAME$GNOME"'s:\(.*/gnome/help/[a-zA-Z0-9.\_\-]\+\/\)\([^/_]\+\):%lang(\2) \1\2: @@ -78,77 +90,30 @@ s:^\([^%].*\):: s:%lang(C) :: -/^$/d' >> $MO_NAME -+/^$/d' >> $MO_NAME_NEW ++/^ *$/d' >> $MO_NAME_NEW find $TOP_DIR -type d|sed ' s:'"$TOP_DIR"':: - '"$NO_ALL_NAME$GNOME"'s:\(.*/omf/'"$NAME"'$\):%dir \1: - '"$ALL_NAME$GNOME"'s:\(.*/omf/[a-zA-Z0-9.\_\-]\+$\):%dir \1: - s:^\([^%].*\):: --/^$/d' >> $MO_NAME -+/^$/d' >> $MO_NAME_NEW - - find $TOP_DIR -type f|sed ' - s:'"$TOP_DIR"':: -@@ -131,7 +146,7 @@ s:'"$TOP_DIR"':: - '"$ALL_NAME$GNOME"'s:\(.*/omf/[a-zA-Z0-9.\_\-]\+/[a-zA-Z0-9.\_\-]\+-\([^/.]\+\)\.omf\):%lang(\2) \1: - s:^[^%].*:: - s:%lang(C) :: --/^$/d' >> $MO_NAME -+/^$/d' >> $MO_NAME_NEW - - KDE3_HTML=`kde-config --expandvars --install html 2>/dev/null` - if [ x"$KDE3_HTML" != x -a -d "$TOP_DIR$KDE3_HTML" ]; then -@@ -143,7 +158,7 @@ s:'"$TOP_DIR"':: - '"$ALL_NAME$KDE"'s:\(.*/HTML/\)\([^/_]\+\)\(.*/[a-zA-Z0-9.\_\-]\+$\):%lang(\2) \1\2\3: +@@ -112,12 +129,20 @@ s:'"$TOP_DIR"':: + '"$NO_ALL_NAME$KDE"'s:\(.*/doc/kde/HTML/\)\([^/_]\+\)\(.*/'"$NAME"'\)$:%lang(\2) \1\2\3: + '"$ALL_NAME$KDE"'s:\(.*/doc/kde/HTML/\)\([^/_]\+\)\(.*/[a-zA-Z0-9.\_\-]\+/\):: + '"$ALL_NAME$KDE"'s:\(.*/doc/kde/HTML/\)\([^/_]\+\)\(.*/[a-zA-Z0-9.\_\-]\+$\):%lang(\2) \1\2\3: ++'"$NO_ALL_NAME$KDE"'s:\(.*/kde.*share/doc/HTML/\)\([^/_]\+\)\(.*/'"$NAME"'/\):: ++'"$NO_ALL_NAME$KDE"'s:\(.*/kde.*share/doc/HTML/\)\([^/_]\+\)\(.*/'"$NAME"'\)$:%lang(\2) \1\2\3: ++'"$ALL_NAME$KDE"'s:\(.*/kde.*share/doc/HTML/\)\([^/_]\+\)\(.*/[a-zA-Z0-9.\_\-]\+/\):: ++'"$ALL_NAME$KDE"'s:\(.*/kde.*share/doc/HTML/\)\([^/_]\+\)\(.*/[a-zA-Z0-9.\_\-]\+$\):%lang(\2) \1\2\3: s:^\([^%].*\):: s:%lang(C) :: -/^$/d' >> $MO_NAME -+/^$/d' >> $MO_NAME_NEW - fi - - KDE4_HTML=`kde4-config --expandvars --install html 2>/dev/null` -@@ -156,7 +171,7 @@ s:'"$TOP_DIR"':: - '"$ALL_NAME$KDE"'s:\(.*/HTML/\)\([^/_]\+\)\(.*/[a-zA-Z0-9.\_\-]\+$\):%lang(\2) \1\2\3: - s:^\([^%].*\):: - s:%lang(C) :: --/^$/d' >> $MO_NAME -+/^$/d' >> $MO_NAME_NEW - fi - - find $TOP_DIR -type f -o -type l|sed ' -@@ -168,7 +183,7 @@ s:'"$TOP_DIR"':: - '"$ALL_NAME$QT"'s:^\([^%].*/[^/]\+_\([a-zA-Z]\{2\}\)\.qm$\):%lang(\2) \1: - s:^[^%].*:: - s:%lang(C) :: --/^$/d' >> $MO_NAME -+/^$/d' >> $MO_NAME_NEW - - find $TOP_DIR -type d|sed ' - s:'"$TOP_DIR"':: -@@ -176,17 +191,22 @@ s:'"$TOP_DIR"':: - '"$ALL_NAME$MAN"'s:\(.*/man/\([^/_]\+\).*/man[a-z0-9]\+$\):%lang(\2) \1*: - s:^\([^%].*\):: - s:%lang(C) :: --/^$/d' >> $MO_NAME -+/^$/d' >> $MO_NAME_NEW - - find $TOP_DIR -type f -o -type l|sed ' - s:'"$TOP_DIR"':: - '"$NO_ALL_NAME$MAN"'s:\(.*/man/\([^/_]\+\).*/man[a-z0-9]\+/'"$NAME"'\.[a-z0-9].*\):%lang(\2) \1*: - s:^\([^%].*\):: - s:%lang(C) :: --/^$/d' >> $MO_NAME -+/^$/d' >> $MO_NAME_NEW ++/^ *$/d' >> $MO_NAME_NEW -if ! grep -q / $MO_NAME; then -+if ! grep -q / $MO_NAME_NEW; then ++if ! grep -q / $MO_NAME_NEW ; then echo "No translations found for ${NAME} in ${TOP_DIR}" + rm -f $MO_NAME_NEW exit 1 ++else ++ sort -u $MO_NAME_NEW >> $MO_NAME ++ rm -f $MO_NAME_NEW fi -+ -+sort -u $MO_NAME_NEW >> $MO_NAME -+rm -f $MO_NAME_NEW -+ exit 0 diff --git a/findsupplements.diff b/findsupplements.diff deleted file mode 100644 index 83476d0..0000000 --- a/findsupplements.diff +++ /dev/null @@ -1,75 +0,0 @@ -Add support for supplements to the internal dependency -generator. - ---- build/rpmfc.c.orig 2011-05-13 16:54:26.000000000 +0000 -+++ build/rpmfc.c 2011-05-13 17:11:20.000000000 +0000 -@@ -54,6 +54,7 @@ struct rpmfc_s { - - rpmds provides; /*!< (no. provides) package provides */ - rpmds requires; /*!< (no. requires) package requires */ -+ rpmds supplements; /*!< (no. supplements) package supplements */ - }; - - struct rpmfcTokens_s { -@@ -481,6 +482,14 @@ static int rpmfcHelper(rpmfc fc, unsigne - dsContext = RPMSENSE_FIND_REQUIRES; - tagN = RPMTAG_REQUIRENAME; - break; -+ case 'S': -+ if (fc->skipProv) -+ return 0; -+ depname = "supplements"; -+ depsp = &fc->supplements; -+ dsContext = RPMSENSE_FIND_REQUIRES|RPMSENSE_STRONG|RPMSENSE_MISSINGOK; -+ tagN = RPMTAG_ENHANCESNAME; -+ break; - } - - /* If the entire path is filtered out, there's nothing more to do */ -@@ -752,6 +761,7 @@ rpmfc rpmfcFree(rpmfc fc) - - fc->provides = rpmdsFree(fc->provides); - fc->requires = rpmdsFree(fc->requires); -+ fc->supplements = rpmdsFree(fc->supplements); - } - fc = _free(fc); - return NULL; -@@ -804,6 +814,7 @@ rpmRC rpmfcApply(rpmfc fc) - for (ARGV_t fattr = fc->fattrs[fc->ix]; fattr && *fattr; fattr++) { - xx += rpmfcHelper(fc, 'P', *fattr); - xx += rpmfcHelper(fc, 'R', *fattr); -+ xx += rpmfcHelper(fc, 'S', *fattr); - } - } - -@@ -846,6 +857,11 @@ rpmRC rpmfcApply(rpmfc fc) - dix = rpmdsFind(fc->requires, ds); - ds = rpmdsFree(ds); - break; -+ case 'S': -+ ds = rpmdsSingle(RPMTAG_ENHANCESNAME, N, EVR, Flags); -+ dix = rpmdsFind(fc->supplements, ds); -+ ds = rpmdsFree(ds); -+ break; - } - - /* XXX assertion incorrect while generating -debuginfo deps. */ -@@ -1357,6 +1373,18 @@ rpmRC rpmfcGenerateDepends(const rpmSpec - } - } - -+ /* Add Supplements: */ -+ if (fc->supplements != NULL && rpmdsCount(fc->supplements) > 0 && !fc->skipReq) { -+ rpmds pi = rpmdsInit(fc->supplements); -+ while (rpmdsNext(pi) >= 0) { -+ rpmsenseFlags flags = rpmdsFlags(pi); -+ -+ headerPutString(pkg->header, RPMTAG_ENHANCESNAME, rpmdsN(pi)); -+ headerPutString(pkg->header, RPMTAG_ENHANCESVERSION, rpmdsEVR(pi)); -+ headerPutUint32(pkg->header, RPMTAG_ENHANCESFLAGS, &flags, 1); -+ } -+ } -+ - /* Add dependency dictionary(#dependencies) */ - if (rpmtdFromArgi(&td, RPMTAG_DEPENDSDICT, fc->ddictx)) { - assert(rpmtdType(&td) == RPM_INT32_TYPE); diff --git a/firmware.diff b/firmware.diff deleted file mode 100644 index 13f7bae..0000000 --- a/firmware.diff +++ /dev/null @@ -1,37 +0,0 @@ -Index: autodeps/linux.prov -=================================================================== ---- autodeps/linux.prov.orig 2011-06-08 13:28:10.000000000 +0200 -+++ autodeps/linux.prov 2011-06-08 13:28:51.755445342 +0200 -@@ -11,6 +11,7 @@ solist=($(printf "%s\n" "${filelist[@]}" - pythonlist= - tcllist= - monolist=($(printf "%s\n" "${filelist[@]}" | egrep "\\.(exe|dll)\$")) -+firmwarelist=($(printf "%s\n" "${filelist[@]}" | grep "/lib/firmware/")) - - # - # --- Alpha does not mark 64bit dependencies -@@ -59,6 +60,11 @@ done | sort -u - printf "%s\n" "${tcllist[@]}" | /usr/lib/rpm/tcl.prov | sort -u - - # -+# --- firmware files -+[ -x /usr/lib/rpm/firmware.prov -a -n "$firmwarelist" ] && -+ printf "%s\n" "${firmwarelist[@]}" | /usr/lib/rpm/firmware.prov | sort -u -+ -+# - # --- Mono exes/dlls - : ${MONO_PREFIX=/usr} - if [ -x $MONO_PREFIX/bin/mono -a -n "$monolist" ] ; then -Index: scripts/firmware.prov -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ scripts/firmware.prov 2011-06-08 13:28:33.117204009 +0200 -@@ -0,0 +1,8 @@ -+#!/bin/sh -+# Add firmware files in /lib/firmware into RPM provides -+ -+while read instfile ; do -+ case $instfile in -+ */lib/firmware/*) test -f "$instfile" && echo "firmware(${instfile##*/lib/firmware/})" ;; -+ esac -+done diff --git a/fontprovides.diff b/fontprovides.diff deleted file mode 100644 index a22cb85..0000000 --- a/fontprovides.diff +++ /dev/null @@ -1,54 +0,0 @@ -Index: autodeps/linux.prov -=================================================================== ---- autodeps/linux.prov.orig 2011-06-08 13:37:46.951974468 +0200 -+++ autodeps/linux.prov 2011-06-08 13:37:46.967972960 +0200 -@@ -15,6 +15,8 @@ pythonlist=($(printf "%s\n" "${filelist[ - tcllist= - monolist=($(printf "%s\n" "${filelist[@]}" | egrep "\\.(exe|dll)\$")) - firmwarelist=($(printf "%s\n" "${filelist[@]}" | grep "/lib/firmware/")) -+pkgconfiglist=($(printf "%s\n" "${filelist[@]}" | egrep '\.pc$')) -+fontlist=($(printf "%s\n" "${filelist[@]}" | egrep -i "/usr/share/fonts/.*\.(ttf|otf|pfa)$")) - - # - # --- Alpha does not mark 64bit dependencies -@@ -80,6 +82,16 @@ if [ -x $MONO_PREFIX/bin/mono -a -n "$mo - fi - - # -+# --- pkgconfig provides -+[ -x /usr/lib/rpm/pkgconfigdeps.sh -a -n "$pkgconfiglist" ] && -+ printf "%s\n" "${pkgconfiglist[@]}" | /usr/lib/rpm/pkgconfigdeps.sh -P | sort -u -+ -+# -+# --- font provides -+[ -x /usr/lib/rpm/fontconfig.prov -a -n "$fontlist" ] && -+ printf "%s\n" "${fontlist[@]}" | /usr/lib/rpm/fontconfig.prov | sort -u -+ -+# - # --- Kernel module exported symbols - [ -x /usr/lib/rpm/find-provides.ksyms ] && - printf "%s\n" "${filelist[@]}" | /usr/lib/rpm/find-provides.ksyms "$@" -Index: autodeps/linux.req -=================================================================== ---- autodeps/linux.req.orig 2011-06-08 13:37:46.951974468 +0200 -+++ autodeps/linux.req 2011-06-08 13:37:46.968972865 +0200 -@@ -34,6 +34,7 @@ perllist=() - pythonlist=($(printf "%s\n" "${filelist[@]}" | egrep '/usr/lib[^/]*/python.\..')) - tcllist=() - monolist=($(printf "%s\n" "${filelist[@]}" | egrep "\\.(exe|dll)(\\.config)?\$")) -+pkgconfiglist=($(printf "%s\n" "${filelist[@]}" | egrep '\.pc$')) - - # - # --- Alpha does not mark 64bit dependencies -@@ -143,6 +144,11 @@ if [ -x $MONO_PREFIX/bin/mono -a -n "$mo - fi - - # -+# --- pkgconfig requires -+[ -x /usr/lib/rpm/pkgconfigdeps.sh -a -n "$pkgconfiglist" ] && -+ printf "%s\n" "${pkgconfiglist[@]}" | /usr/lib/rpm/pkgconfigdeps.sh -R | sort -u -+ -+# - # --- Kernel module imported symbols - [ -x ${0%/*}/find-requires.ksyms ] && - printf "%s\n" "${filelist[@]}" | ${0%/*}/find-requires.ksyms "$@" diff --git a/forkfailed.diff b/forkfailed.diff new file mode 100644 index 0000000..f5af4d0 --- /dev/null +++ b/forkfailed.diff @@ -0,0 +1,40 @@ +Print error message if scriptlet fork fails instead if silently +dying. [#152779] + +Index: lib/psm.c +=================================================================== +--- lib/psm.c.orig ++++ lib/psm.c +@@ -910,6 +910,12 @@ static rpmRC runScript(rpmpsm psm, Heade + } + /*@=branchstate@*/ + ++ if (psm->sq.child == (pid_t)-1) { ++ rpmError(RPMERR_FORK, _("Couldn't fork %s: %s\n"), sln, strerror(errno)); ++ rc = RPMRC_FAIL; ++ goto exit; ++ } ++ + (void) psmWait(psm); + + /* XXX filter order dependent multilib "other" arch helper error. */ +@@ -934,6 +940,7 @@ static rpmRC runScript(rpmpsm psm, Heade + } + } + ++exit: + if (freePrefixes) prefixes = hfd(prefixes, ipt); + + xx = Fclose(out); /* XXX dup'd STDOUT_FILENO */ +Index: rpmio/rpmsq.c +=================================================================== +--- rpmio/rpmsq.c.orig ++++ rpmio/rpmsq.c +@@ -407,6 +407,7 @@ fprintf(stderr, " Enable(%p): %p\n", + + pid = fork(); + if (pid < (pid_t) 0) { /* fork failed. */ ++ sq->child = (pid_t)-1; + /*@-bounds@*/ + xx = close(sq->pipes[0]); + xx = close(sq->pipes[1]); diff --git a/getcwdresult.diff b/getcwdresult.diff new file mode 100644 index 0000000..44b246f --- /dev/null +++ b/getcwdresult.diff @@ -0,0 +1,30 @@ +Check getcwd return value, abort if rpm cannot determine current +directory. + +--- ./build.c.orig 2004-10-17 19:00:10.000000000 +0000 ++++ ./build.c 2005-12-19 17:52:25.000000000 +0000 +@@ -206,7 +211,10 @@ static int buildForTarget(rpmts ts, cons + directory for this run */ + + if (*arg != '/') { +- (void)getcwd(buf, BUFSIZ); ++ if (!getcwd(buf, BUFSIZ)) { ++ rpmError(RPMERR_STAT, "getcwd failed: %m\n"); ++ return 1; ++ } + strcat(buf, "/"); + strcat(buf, arg); + } else +@@ -225,7 +233,11 @@ static int buildForTarget(rpmts ts, cons + specut = urlPath(specURL, &specFile); + if (*specFile != '/') { + char *s = alloca(BUFSIZ); +- (void)getcwd(s, BUFSIZ); ++ if (!getcwd(s, BUFSIZ)) { ++ rpmError(RPMERR_STAT, "getcwd failed: %m\n"); ++ rc = 1; ++ goto exit; ++ } + strcat(s, "/"); + strcat(s, arg); + specURL = s; diff --git a/ghost.diff b/ghost.diff new file mode 100644 index 0000000..23bc798 --- /dev/null +++ b/ghost.diff @@ -0,0 +1,17 @@ +Fix --noghost query option. rh#103207 + +Already in rpm-4.4.7 + +Index: lib/query.c +=================================================================== +--- lib/query.c.orig ++++ lib/query.c +@@ -222,7 +222,7 @@ int showQueryPackage(QVA_t qva, rpmts ts + continue; + + /* If not querying %ghost, skip ghost files. */ +- if (!(qva->qva_fflags & RPMFILE_GHOST) && (fflags & RPMFILE_GHOST)) ++ if ((qva->qva_fflags & RPMFILE_GHOST) && (fflags & RPMFILE_GHOST)) + continue; + + /*@-boundswrite@*/ diff --git a/globlstat.diff b/globlstat.diff new file mode 100644 index 0000000..e587fdd --- /dev/null +++ b/globlstat.diff @@ -0,0 +1,18 @@ +Always use lstat in glob call to work around a change in glibc's +glob code. [#129434], rh#126460 + +rpm-4.4.7 comes with its own glob implementation, so it doesn't +need this patch (but it also doesn't hurt). + +--- ./rpmio/rpmrpc.c.orig 2005-12-16 15:01:26.000000000 +0000 ++++ ./rpmio/rpmrpc.c 2006-02-13 18:55:39.000000000 +0000 +@@ -1450,7 +1462,8 @@ fprintf(stderr, "*** Glob(%s,0x%x,%p,%p) + pglob->gl_readdir = Readdir; + pglob->gl_opendir = Opendir; + pglob->gl_lstat = Lstat; +- pglob->gl_stat = Stat; ++ /* always use lstat to glob symlinks */ ++ pglob->gl_stat = Lstat; + /*@=type@*/ + flags |= GLOB_ALTDIRFUNC; + flags &= ~GLOB_TILDE; diff --git a/globoffbyone.diff b/globoffbyone.diff new file mode 100644 index 0000000..3fff8cf --- /dev/null +++ b/globoffbyone.diff @@ -0,0 +1,13 @@ +Fix off-by-one error in glob call. + +--- ./rpmio/rpmrpc.c.orig 2005-12-16 15:01:26.000000000 +0000 ++++ ./rpmio/rpmrpc.c 2006-02-13 18:55:39.000000000 +0000 +@@ -1403,7 +1415,7 @@ int Glob_pattern_p (const char * pattern + case '*': + return (1); + case '\\': +- if (quote && p[1] != '\0') ++ if (quote && *p != '\0') + p++; + continue; + diff --git a/headeradddb.diff b/headeradddb.diff deleted file mode 100644 index af197df..0000000 --- a/headeradddb.diff +++ /dev/null @@ -1,55 +0,0 @@ -Add rpmtsHeaderAddDB and rpmtsHeaderRemoveDB so that -convertdb1 will build again. - ---- lib/rpmts.c.orig 2011-05-12 13:21:03.000000000 +0000 -+++ lib/rpmts.c 2011-05-12 13:26:25.000000000 +0000 -@@ -159,6 +159,24 @@ int rpmtsVerifyDB(rpmts ts) - return rc; - } - -+int rpmtsHeaderAddDB(rpmts ts, Header h) -+{ -+ if (rpmtsOpenDB(ts, (O_RDWR|O_CREAT))) -+ return RPMRC_FAIL; -+ if (rpmdbAdd(rpmtsGetRdb(ts), h) != 0) -+ return RPMRC_FAIL; -+ return RPMRC_OK; -+} -+ -+int rpmtsHeaderRemoveDB(rpmts ts, unsigned int hdrNum) -+{ -+ if (rpmtsOpenDB(ts, (O_RDWR|O_CREAT))) -+ return RPMRC_FAIL; -+ if (rpmdbRemove(rpmtsGetRdb(ts), hdrNum) != 0) -+ return RPMRC_FAIL; -+ return RPMRC_OK; -+} -+ - /* keyp might no be defined. */ - rpmdbMatchIterator rpmtsInitIterator(const rpmts ts, rpmDbiTagVal rpmtag, - const void * keyp, size_t keylen) ---- lib/rpmts.h.orig 2011-05-12 13:21:11.000000000 +0000 -+++ lib/rpmts.h 2011-05-12 13:28:32.000000000 +0000 -@@ -264,6 +264,22 @@ int rpmtsRebuildDB(rpmts ts); - int rpmtsVerifyDB(rpmts ts); - - /** \ingroup rpmts -+ * Add a header to the database used by the transaction. -+ * @param ts transaction set -+ * @param h header to add -+ * @return 0 on success -+ */ -+int rpmtsHeaderAddDB(rpmts ts, Header h); -+ -+/** \ingroup rpmts -+ * Remove a header from the database used by the transaction. -+ * @param ts transaction set -+ * @param hdrNum index of header to remove -+ * @return 0 on success -+ */ -+int rpmtsHeaderRemoveDB(rpmts ts, unsigned int hdrNum); -+ -+/** \ingroup rpmts - * Return transaction database iterator. - * @param ts transaction set - * @param rpmtag database index tag diff --git a/initdbret.diff b/initdbret.diff new file mode 100644 index 0000000..ac42891 --- /dev/null +++ b/initdbret.diff @@ -0,0 +1,25 @@ +Check rpmtsInitDB return value. Also patches rpm.c, which +actually is not used anymore. + +--- ./rpm.c.orig 2005-12-15 11:59:33.000000000 +0000 ++++ ./rpm.c 2005-12-15 11:59:53.000000000 +0000 +@@ -1119,7 +1119,7 @@ int main(int argc, const char ** argv) + break; + + case MODE_INITDB: +- rpmdbInit(rootdir, 0644); ++ ec = rpmdbInit(rootdir, 0644); + break; + + case MODE_CHECKSIG: +--- ./rpmqv.c.orig 2005-12-15 13:46:45.000000000 +0000 ++++ ./rpmqv.c 2005-12-15 13:47:37.000000000 +0000 +@@ -624,7 +624,7 @@ int main(int argc, const char ** argv) + switch (bigMode) { + #ifdef IAM_RPMDB + case MODE_INITDB: +- (void) rpmtsInitDB(ts, 0644); ++ ec = rpmtsInitDB(ts, 0644); + break; + + case MODE_REBUILDDB: diff --git a/initscriptsprov.diff b/initscriptsprov.diff deleted file mode 100644 index 8a5c2f0..0000000 --- a/initscriptsprov.diff +++ /dev/null @@ -1,50 +0,0 @@ ---- ./autodeps/linux.prov.orig 2011-05-11 16:45:13.000000000 +0000 -+++ ./autodeps/linux.prov 2011-05-11 16:51:10.000000000 +0000 -@@ -107,4 +107,9 @@ fi - [ -x /usr/lib/rpm/gstreamer-provides ] && - printf "%s\n" "${filelist[@]}" | /usr/lib/rpm/gstreamer-provides | sort -u - -+# -+# --- Provides of sysvinit scripts -+[ -x /usr/lib/rpm/sysvinitdeps.sh ] && -+ printf "%s\n" "${filelist[@]}" | /usr/lib/rpm/sysvinitdeps.sh -P | sort -u -+ - exit 0 ---- ./scripts/Makefile.am.orig 2011-05-11 14:46:38.000000000 +0000 -+++ ./scripts/Makefile.am 2011-05-11 16:52:10.000000000 +0000 -@@ -22,6 +22,7 @@ EXTRA_DIST = \ - ocaml-find-requires.sh ocaml-find-provides.sh \ - pkgconfigdeps.sh libtooldeps.sh \ - fontconfig.prov desktop-file.prov script.req \ -+ sysvinitdeps.sh \ - macros.perl macros.php macros.python - - rpmconfig_SCRIPTS = \ -@@ -38,6 +39,7 @@ rpmconfig_SCRIPTS = \ - pkgconfigdeps.sh libtooldeps.sh \ - ocaml-find-requires.sh ocaml-find-provides.sh \ - fontconfig.prov desktop-file.prov script.req \ -+ sysvinitdeps.sh \ - rpmdb_loadcvt rpm2cpio.sh tcl.req tgpg - - rpmconfig_DATA = \ ---- ./scripts/sysvinitdeps.sh.orig 2011-05-11 16:51:10.000000000 +0000 -+++ ./scripts/sysvinitdeps.sh 2011-05-11 16:54:33.000000000 +0000 -@@ -0,0 +1,17 @@ -+#!/bin/sh -+ -+[ "$1" = '-P' -o "$1" = '--provides' ] || { -+ cat > /dev/null -+ exit 0 -+} -+ -+while read file; do -+ case $file in -+ */etc/init.d/*) -+ provs=`grep '^# *Provides:' $file | sed 's,^.*:,,'` -+ for p in $provs; do -+ echo "sysvinit($p)" -+ done -+ ;; -+ esac -+done diff --git a/langnoc.diff b/langnoc.diff deleted file mode 100644 index ab99287..0000000 --- a/langnoc.diff +++ /dev/null @@ -1,127 +0,0 @@ ---- ./macros.in.orig 2011-05-11 15:59:44.000000000 +0000 -+++ ./macros.in 2011-05-11 16:45:30.000000000 +0000 -@@ -1247,6 +1247,7 @@ EOF - # %files -f %{name}.lang - # - %find_lang %{_rpmconfigdir}/find-lang.sh %{buildroot} -+%no_lang_C --without-C - - # Commands + opts to use for retrieving remote files - # Proxy opts can be set through --httpproxy/--httpport popt aliases, ---- ./scripts/find-lang.sh.orig 2011-05-11 14:53:34.000000000 +0000 -+++ ./scripts/find-lang.sh 2011-05-11 16:45:30.000000000 +0000 -@@ -62,6 +62,8 @@ MO= - MO_NAME=$NAME.lang - ALL_NAME=# - NO_ALL_NAME= -+ONLY_C=# -+NO_C=# - - while test $# -gt 0 ; do - case "${1}" in -@@ -98,6 +100,14 @@ while test $# -gt 0 ; do - NO_ALL_NAME=# - shift - ;; -+ --with-only-C ) -+ ONLY_C= -+ shift -+ ;; -+ --without-C ) -+ NO_C= -+ shift -+ ;; - * ) - MO_NAME=${1} - shift -@@ -117,27 +127,32 @@ s:'"$TOP_DIR"':: - '"$ALL_NAME$MO"'s:\(.*/locale/\)\([^/_]\+\)\(.*\.mo$\):%lang(\2) %doc \1\2\3: - '"$NO_ALL_NAME$MO"'s:\(.*/locale/\)\([^/_]\+\)\(.*/'"$NAME"'\.mo$\):%lang(\2) %doc \1\2\3: - s:^\([^%].*\):: -+'"$ONLY_C"'/%lang(C)/!d -+'"$NO_C"'/%lang(C)/d - s:%lang(C) :: - /^$/d' >> $MO_NAME_NEW - - find $TOP_DIR -type d|sed ' - s:'"$TOP_DIR"':: --'"$NO_ALL_NAME$GNOME"'s:\(.*/gnome/help/'"$NAME"'$\):%dir %doc \1: -+'"$NO_ALL_NAME$GNOME"'s:\(.*/gnome/help/'"$NAME"'$\):%lang(C) %dir %doc \1: - '"$NO_ALL_NAME$GNOME"'s:\(.*/gnome/help/'"$NAME"'/[a-zA-Z0-9.\_\-]/.\+\):: - '"$NO_ALL_NAME$GNOME"'s:\(.*/gnome/help/'"$NAME"'\/\)\([^/_]\+\):%lang(\2) %doc \1\2: --'"$ALL_NAME$GNOME"'s:\(.*/gnome/help/[a-zA-Z0-9.\_\-]\+$\):%dir %doc \1: -+'"$ALL_NAME$GNOME"'s:\(.*/gnome/help/[a-zA-Z0-9.\_\-]\+$\):%lang(C) %dir %doc \1: - '"$ALL_NAME$GNOME"'s:\(.*/gnome/help/[a-zA-Z0-9.\_\-]\+/[a-zA-Z0-9.\_\-]/.\+\):: - '"$ALL_NAME$GNOME"'s:\(.*/gnome/help/[a-zA-Z0-9.\_\-]\+\/\)\([^/_]\+\):%lang(\2) %doc \1\2: - s:%lang(.*) .*/gnome/help/[a-zA-Z0-9.\_\-]\+/[a-zA-Z0-9.\_\-]\+/.*:: - s:^\([^%].*\):: -+'"$ONLY_C"'/%lang(C)/!d -+'"$NO_C"'/%lang(C)/d - s:%lang(C) :: - /^$/d' >> $MO_NAME_NEW - - find $TOP_DIR -type d|sed ' - s:'"$TOP_DIR"':: --'"$NO_ALL_NAME$GNOME"'s:\(.*/omf/'"$NAME"'$\):%dir \1: --'"$ALL_NAME$GNOME"'s:\(.*/omf/[a-zA-Z0-9.\_\-]\+$\):%dir \1: -+'"$NO_ALL_NAME$GNOME"'s:\(.*/omf/'"$NAME"'$\):%lang(C) %dir \1: -+'"$ALL_NAME$GNOME"'s:\(.*/omf/[a-zA-Z0-9.\_\-]\+$\):%lang(C) %dir \1: - s:^\([^%].*\):: -+s:%lang(C) :: - /^$/d' >> $MO_NAME_NEW - - find $TOP_DIR -type f|sed ' -@@ -145,6 +160,8 @@ s:'"$TOP_DIR"':: - '"$NO_ALL_NAME$GNOME"'s:\(.*/omf/'"$NAME"'/'"$NAME"'-\([^/.]\+\)\.omf\):%lang(\2) \1: - '"$ALL_NAME$GNOME"'s:\(.*/omf/[a-zA-Z0-9.\_\-]\+/[a-zA-Z0-9.\_\-]\+-\([^/.]\+\)\.omf\):%lang(\2) \1: - s:^[^%].*:: -+'"$ONLY_C"'/%lang(C)/!d -+'"$NO_C"'/%lang(C)/d - s:%lang(C) :: - /^$/d' >> $MO_NAME_NEW - -@@ -157,6 +174,8 @@ s:'"$TOP_DIR"':: - '"$ALL_NAME$KDE"'s:\(.*/HTML/\)\([^/_]\+\)\(.*/[a-zA-Z0-9.\_\-]\+/\):: - '"$ALL_NAME$KDE"'s:\(.*/HTML/\)\([^/_]\+\)\(.*/[a-zA-Z0-9.\_\-]\+$\):%lang(\2) \1\2\3: - s:^\([^%].*\):: -+'"$ONLY_C"'/%lang(C)/!d -+'"$NO_C"'/%lang(C)/d - s:%lang(C) :: - /^$/d' >> $MO_NAME_NEW - fi -@@ -170,6 +189,8 @@ s:'"$TOP_DIR"':: - '"$ALL_NAME$KDE"'s:\(.*/HTML/\)\([^/_]\+\)\(.*/[a-zA-Z0-9.\_\-]\+/\):: - '"$ALL_NAME$KDE"'s:\(.*/HTML/\)\([^/_]\+\)\(.*/[a-zA-Z0-9.\_\-]\+$\):%lang(\2) \1\2\3: - s:^\([^%].*\):: -+'"$ONLY_C"'/%lang(C)/!d -+'"$NO_C"'/%lang(C)/d - s:%lang(C) :: - /^$/d' >> $MO_NAME_NEW - fi -@@ -182,6 +203,8 @@ s:'"$TOP_DIR"':: - '"$ALL_NAME$QT"'s:^\([^%].*/[^/]\+_\([a-zA-Z]\{2\}_[a-zA-Z]\{2\}\)\.qm$\):%lang(\2) \1: - '"$ALL_NAME$QT"'s:^\([^%].*/[^/]\+_\([a-zA-Z]\{2\}\)\.qm$\):%lang(\2) \1: - s:^[^%].*:: -+'"$ONLY_C"'/%lang(C)/!d -+'"$NO_C"'/%lang(C)/d - s:%lang(C) :: - /^$/d' >> $MO_NAME_NEW - -@@ -190,6 +213,8 @@ s:'"$TOP_DIR"':: - '"$ALL_NAME$MAN"'s:\(.*/man/\([^/_]\+\).*/man[a-z0-9]\+/\):: - '"$ALL_NAME$MAN"'s:\(.*/man/\([^/_]\+\).*/man[a-z0-9]\+$\):%lang(\2) \1*: - s:^\([^%].*\):: -+'"$ONLY_C"'/%lang(C)/!d -+'"$NO_C"'/%lang(C)/d - s:%lang(C) :: - /^$/d' >> $MO_NAME_NEW - -@@ -197,6 +222,8 @@ find $TOP_DIR -type f -o -type l|sed ' - s:'"$TOP_DIR"':: - '"$NO_ALL_NAME$MAN"'s:\(.*/man/\([^/_]\+\).*/man[a-z0-9]\+/'"$NAME"'\.[a-z0-9].*\):%lang(\2) \1*: - s:^\([^%].*\):: -+'"$ONLY_C"'/%lang(C)/!d -+'"$NO_C"'/%lang(C)/d - s:%lang(C) :: - /^$/d' >> $MO_NAME_NEW - diff --git a/lazystatfs.diff b/lazystatfs.diff deleted file mode 100644 index 5869a23..0000000 --- a/lazystatfs.diff +++ /dev/null @@ -1,50 +0,0 @@ -Prefer sys/vfs.h, as statvfs stats all filesystems again ---- ./configure.ac.orig 2011-05-12 12:36:32.000000000 +0000 -+++ ./configure.ac 2011-05-12 12:36:42.000000000 +0000 -@@ -402,25 +402,25 @@ dnl - found_struct_statfs=no - - if test X$found_struct_statfs = Xno ; then --dnl Solaris 2.6+ wants to use statvfs -+dnl first try including sys/vfs.h - AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ - #ifdef HAVE_SYS_TYPES_H - #include - #endif --#include ]], [[struct statvfs sfs;]])],[AC_MSG_RESULT(in sys/statvfs.h) -- AC_DEFINE(STATFS_IN_SYS_STATVFS, 1, -- [statfs in (for solaris 2.6+ systems)]) -+#include ]], [[struct statfs sfs;]])],[AC_MSG_RESULT(in sys/vfs.h) -+ AC_DEFINE(STATFS_IN_SYS_VFS, 1, [statfs in (for linux systems)]) - found_struct_statfs=yes],[]) - fi - - if test X$found_struct_statfs = Xno ; then --dnl first try including sys/vfs.h -+dnl Solaris 2.6+ wants to use statvfs - AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ - #ifdef HAVE_SYS_TYPES_H - #include - #endif --#include ]], [[struct statfs sfs;]])],[AC_MSG_RESULT(in sys/vfs.h) -- AC_DEFINE(STATFS_IN_SYS_VFS, 1, [statfs in (for linux systems)]) -+#include ]], [[struct statvfs sfs;]])],[AC_MSG_RESULT(in sys/statvfs.h) -+ AC_DEFINE(STATFS_IN_SYS_STATVFS, 1, -+ [statfs in (for solaris 2.6+ systems)]) - found_struct_statfs=yes],[]) - fi - ---- ./lib/transaction.c.orig 2011-05-12 12:36:55.000000000 +0000 -+++ ./lib/transaction.c 2011-05-12 12:38:03.000000000 +0000 -@@ -114,7 +114,11 @@ static rpmDiskSpaceInfo rpmtsCreateDSI(c - dsi->bneeded = 0; - dsi->ineeded = 0; - #ifdef STATFS_HAS_F_BAVAIL -+# ifdef ST_RDONLY - dsi->bavail = (sfb.f_flag & ST_RDONLY) ? 0 : sfb.f_bavail; -+# else -+ dsi->bavail = sfb.f_bavail; -+# endif - #else - /* FIXME: the statfs struct doesn't have a member to tell how many blocks are - * available for non-superusers. f_blocks - f_bfree is probably too big, but diff --git a/legacyprereq.diff b/legacyprereq.diff new file mode 100644 index 0000000..2f7af00 --- /dev/null +++ b/legacyprereq.diff @@ -0,0 +1,16 @@ +Keep RPMSENSE_PREREQ definition to be compatible with older +versions. Maybe not needed. + +diff -ur ./lib/rpmlib.h ../rpm-4.4.2.orig/lib/rpmlib.h +--- ./lib/rpmlib.h 2006-09-21 21:07:18.000000000 +0200 ++++ ../rpm-4.4.2.orig/lib/rpmlib.h 2006-09-21 20:59:00.000000000 +0200 +@@ -517,8 +517,7 @@ + RPMSENSE_EQUAL = (1 << 3), + RPMSENSE_PROVIDES = (1 << 4), /* only used internally by builds */ + RPMSENSE_CONFLICTS = (1 << 5), /* only used internally by builds */ +- /* bit 6 used to be RPMSENSE_PREREQ */ +-#define RPMSENSE_PREREQ RPMSENSE_ANY ++ RPMSENSE_PREREQ = (1 << 6), /*!< @todo Legacy. */ + RPMSENSE_OBSOLETES = (1 << 7), /* only used internally by builds */ + RPMSENSE_INTERP = (1 << 8), /*!< Interpreter used by scriptlet. */ + RPMSENSE_SCRIPT_PRE = ((1 << 9)|RPMSENSE_PREREQ), /*!< %pre dependency. */ diff --git a/localetag.diff b/localetag.diff index c21a9cb..3a2e0fa 100644 --- a/localetag.diff +++ b/localetag.diff @@ -1,21 +1,23 @@ -Convert output to the current locale. Assumes utf8 input if the -decoding works, otherwise iso-8859-1. +Convert changelog and i18n header elements to current locale. +[#43347], rh#140050 ---- ./lib/tagexts.c.orig 2010-12-03 12:11:57.000000000 +0000 -+++ ./lib/tagexts.c 2011-05-10 16:05:30.000000000 +0000 +Already in rpm-4.4.7 + +--- ./lib/formats.c.orig 2005-01-26 04:46:54.000000000 +0000 ++++ ./lib/formats.c 2006-03-17 15:27:06.000000000 +0000 @@ -2,6 +2,7 @@ * \file lib/formats.c */ +#include #include "system.h" + #include "rpmio_internal.h" + #include +@@ -18,6 +19,114 @@ + /*@access pgpDig @*/ + /*@access pgpDigParams @*/ - #include -@@ -150,6 +151,114 @@ exit: - return rc; - } - -+static char * strtolocale(char *str) ++static const char * strtolocale(const char *str) +{ + wchar_t *wstr, *wp; + const unsigned char *cp; @@ -97,7 +99,7 @@ decoding works, otherwise iso-8859-1. + wstr = _free(wstr); + return str; + } -+ str = _free((char *)str); ++ str = _free(str); + memset(&ps, 0, sizeof(ps)); + ccl = cca = 0; + for (wp = wstr; ; wp++) { @@ -120,77 +122,104 @@ decoding works, otherwise iso-8859-1. + } + } + wstr = _free(wstr); -+ return (char *)cc; ++ return (const char *)cc; +} + /** - * Retrieve trigger info. - * @param h header -@@ -435,10 +544,41 @@ static int i18nTag(Header h, rpmTag tag, - #endif + * Identify type of trigger. + * @param type tag type +@@ -1077,6 +1220,7 @@ static int i18nTag(Header h, int_32 tag, - rc = headerGet(h, tag, td, HEADERGET_ALLOC); -+ if (rc && td->data) { -+ td->data = strtolocale(td->data); -+ } - return rc; + if (rc && (*data) != NULL) { + *data = xstrdup(*data); ++ *data = strtolocale(*data); + *freeData = 1; + return 0; + } +@@ -1088,6 +1232,56 @@ static int i18nTag(Header h, int_32 tag, } /** + * Retrieve text and convert to locale. + */ -+static int localeTag(Header h, rpmTag tag, rpmtd td) ++static int localeTag(Header h, int_32 tag, /*@out@*/ rpmTagType * type, ++ /*@out@*/ const void ** data, /*@out@*/ int_32 * count, ++ /*@out@*/ int * freeData) +{ -+ int rc; -+ rc = headerGet(h, tag, td, HEADERGET_ALLOC); -+ if (!rc) -+ return 0; -+ if (td->type == RPM_STRING_TYPE) { -+ td->data = strtolocale(td->data); -+ td->count = 1; -+ } else if (td->type == RPM_STRING_ARRAY_TYPE) { -+ char **arr; -+ int i; -+ arr = xmalloc(td->count * sizeof(*arr)); -+ for (i = 0; i < td->count; i++) { -+ arr[i] = xstrdup(((char **)td->data)[i]); -+ arr[i] = strtolocale(arr[i]); -+ } -+ _free(td->data); -+ td->data = arr; -+ td->flags = RPMTD_ALLOCED | RPMTD_PTR_ALLOCED; ++ HGE_t hge = (HGE_t)headerGetEntryMinMemory; ++ rpmTagType t; ++ char **d, **d2, *dp; ++ int rc, i, l; ++ ++ rc = hge(h, tag, &t, (void **)&d, count); ++ if (!rc || d == NULL || *count == 0) { ++ *freeData = 0; ++ *data = NULL; ++ *count = 0; ++ return 1; + } -+ return rc; ++ if (type) ++ *type = t; ++ if (t == RPM_STRING_TYPE) { ++ d = (char **)xstrdup((char *)d); ++ d = (char **)strtolocale((char *)d); ++ *freeData = 1; ++ } else if (t == RPM_STRING_ARRAY_TYPE) { ++ l = 0; ++ for (i = 0; i < *count; i++) { ++ d[i] = xstrdup(d[i]); ++ d[i] = (char *)strtolocale(d[i]); ++ l += strlen(d[i]) + 1; ++ } ++ d2 = xmalloc(*count * sizeof(char *) + l); ++ dp = (char *)(d2 + *count); ++ for (i = 0; i < *count; i++) { ++ d2[i] = dp; ++ strcpy(dp, d[i]); ++ dp += strlen(dp) + 1; ++ d[i] = _free(d[i]); ++ } ++ d = _free(d); ++ d = d2; ++ *freeData = 1; ++ } else ++ *freeData = 0; ++ *data = (void **)d; ++ return 0; +} + + +/** * Retrieve summary text. * @param h header - * @retval td tag data container -@@ -460,6 +600,16 @@ static int descriptionTag(Header h, rpmt - return i18nTag(h, RPMTAG_DESCRIPTION, td, hgflags); + * @retval *type tag type +@@ -1127,6 +1321,20 @@ static int descriptionTag(Header h, /*@o + return i18nTag(h, RPMTAG_DESCRIPTION, type, data, count, freeData); } -+static int changelognameTag(Header h, rpmtd td) ++static int changelognameTag(Header h, /*@out@*/ rpmTagType * type, ++ /*@out@*/ const void ** data, /*@out@*/ int_32 * count, ++ /*@out@*/ int * freeData) +{ -+ return localeTag(h, RPMTAG_CHANGELOGNAME, td); ++ return localeTag(h, RPMTAG_CHANGELOGNAME, type, data, count, freeData); +} + -+static int changelogtextTag(Header h, rpmtd td) ++static int changelogtextTag(Header h, /*@out@*/ rpmTagType * type, ++ /*@out@*/ const void ** data, /*@out@*/ int_32 * count, ++ /*@out@*/ int * freeData) +{ -+ return localeTag(h, RPMTAG_CHANGELOGTEXT, td); ++ return localeTag(h, RPMTAG_CHANGELOGTEXT, type, data, count, freeData); +} + /** * Retrieve group text. * @param h header -@@ -677,6 +827,8 @@ static const struct headerTagFunc_s rpmH - { RPMTAG_LONGARCHIVESIZE, longarchivesizeTag }, - { RPMTAG_LONGSIZE, longsizeTag }, - { RPMTAG_LONGSIGSIZE, longsigsizeTag }, -+ { RPMTAG_CHANGELOGNAME, changelognameTag }, -+ { RPMTAG_CHANGELOGTEXT, changelogtextTag }, - { RPMTAG_DBINSTANCE, dbinstanceTag }, - { RPMTAG_EVR, evrTag }, - { RPMTAG_NVR, nvrTag }, +@@ -1152,6 +1360,8 @@ const struct headerSprintfExtension_s rp + { HEADER_EXT_TAG, "RPMTAG_GROUP", { groupTag } }, + { HEADER_EXT_TAG, "RPMTAG_DESCRIPTION", { descriptionTag } }, + { HEADER_EXT_TAG, "RPMTAG_SUMMARY", { summaryTag } }, ++ { HEADER_EXT_TAG, "RPMTAG_CHANGELOGNAME", { changelognameTag } }, ++ { HEADER_EXT_TAG, "RPMTAG_CHANGELOGTEXT", { changelogtextTag } }, + { HEADER_EXT_TAG, "RPMTAG_FILECLASS", { fileclassTag } }, + { HEADER_EXT_TAG, "RPMTAG_FILECONTEXTS", { filecontextsTag } }, + { HEADER_EXT_TAG, "RPMTAG_FILENAMES", { filenamesTag } }, diff --git a/luanoreadline.diff b/luanoreadline.diff new file mode 100644 index 0000000..72ad014 --- /dev/null +++ b/luanoreadline.diff @@ -0,0 +1,32 @@ +Build lua without readling support. + +--- ./lua/Makefile.am.orig 2006-01-28 00:27:50.000000000 +0000 ++++ ./lua/Makefile.am 2006-01-28 00:28:25.000000000 +0000 +@@ -16,7 +16,7 @@ INCLUDES = -I$(srcdir)/include -I$(srcdi + + lua_lua_SOURCES = lua/lua.c + lua_lua_CFLAGS = -DLUA_USERCONFIG='"$(srcdir)/local/userconfig.c"' +-lua_lua_LDADD = $(LDADD) -L/usr/lib -lreadline -lhistory -lncurses ++lua_lua_LDADD = $(LDADD) -lncurses + luac_luac_SOURCES = luac/luac.c luac/print.c lopcodes.c + luac_luac_CFLAGS = -DLUA_OPNAMES + +--- ./lua/local/userconfig.c.orig 2004-03-16 21:58:30.000000000 +0000 ++++ ./lua/local/userconfig.c 2006-01-28 00:34:39.000000000 +0000 +@@ -9,6 +9,8 @@ + {"rex", luaopen_rex}, \ + {"luapath", luapath}, + ++#if 0 ++ + #define lua_readline myreadline + #define lua_saveline mysaveline + +@@ -45,6 +47,7 @@ static void mysaveline (lua_State *L, co + } + } + } ++#endif + + static int luapath(lua_State *L) + { diff --git a/luaroot.diff b/luaroot.diff new file mode 100644 index 0000000..4d66cb4 --- /dev/null +++ b/luaroot.diff @@ -0,0 +1,75 @@ +Index: lib/psm.c +=================================================================== +--- lib/psm.c.orig ++++ lib/psm.c +@@ -502,6 +502,8 @@ static rpmRC runLuaScript(rpmpsm psm, He + { + const rpmts ts = psm->ts; + int rootFd = -1; ++ int chroot_done; ++ const char *rootDir; + const char *n, *v, *r; + rpmRC rc = RPMRC_OK; + int i; +@@ -511,20 +513,27 @@ static rpmRC runLuaScript(rpmpsm psm, He + + xx = headerNVR(h, &n, &v, &r); + +- if (!rpmtsChrootDone(ts)) { +- const char *rootDir = rpmtsRootDir(ts); +- xx = chdir("/"); ++ chroot_done = rpmtsChrootDone(ts); ++ rootDir = rpmtsRootDir(ts); ++ if (!chroot_done) { ++ if (rootDir != NULL && strcmp(rootDir, "/") && *rootDir == '/') { ++ xx = chdir("/"); + /*@-nullpass@*/ +- rootFd = open(".", O_RDONLY, 0); ++ rootFd = open(".", O_RDONLY, 0); + /*@=nullpass@*/ +- if (rootFd >= 0) { +- /*@-superuser -noeffect @*/ +- if (rootDir != NULL && strcmp(rootDir, "/") && *rootDir == '/') ++ if (rootFd >= 0) { ++ /*@-superuser -noeffect @*/ + xx = chroot(rootDir); +- /*@=superuser =noeffect @*/ +- xx = rpmtsSetChrootDone(ts, 1); ++ /*@=superuser =noeffect @*/ ++ xx = rpmtsSetChrootDone(ts, 1); ++ } + } ++ } else { ++/*@-nullpass@*/ ++ rootFd = open(".", O_RDONLY, 0); ++/*@=nullpass@*/ + } ++ xx = chdir("/"); + + /* Create arg variable */ + rpmluaPushTable(lua, "arg"); +@@ -561,14 +570,19 @@ static rpmRC runLuaScript(rpmpsm psm, He + rpmluaDelVar(lua, "arg"); + + if (rootFd >= 0) { +- const char *rootDir = rpmtsRootDir(ts); + xx = fchdir(rootFd); + xx = close(rootFd); +- /*@-superuser -noeffect @*/ +- if (rootDir != NULL && strcmp(rootDir, "/") && *rootDir == '/') ++ if (!chroot_done) { ++ /*@-superuser -noeffect @*/ + xx = chroot("."); +- /*@=superuser =noeffect @*/ +- xx = rpmtsSetChrootDone(ts, 0); ++ /*@=superuser =noeffect @*/ ++ xx = rpmtsSetChrootDone(ts, 0); ++ } ++ } ++ if (!chroot_done) { ++ const char *currDir = rpmtsCurrDir(ts); ++ if (currDir != NULL) ++ xx = chdir(currDir); + } + + return rc; diff --git a/macrosin.diff b/macrosin.diff index 3c9fcb5..f8fb3e9 100644 --- a/macrosin.diff +++ b/macrosin.diff @@ -1,6 +1,10 @@ ---- ./macros.in.orig 2011-01-03 13:57:41.000000000 +0000 -+++ ./macros.in 2011-05-12 14:32:18.000000000 +0000 -@@ -178,22 +178,22 @@ +SUSE specific macro changes. + +Index: macros.in +=================================================================== +--- macros.in.orig ++++ macros.in +@@ -166,22 +166,22 @@ # Template for debug information sub-package. %debug_package \ @@ -12,7 +16,7 @@ Group: Development/Debug\ AutoReqProv: 0\ -%description debug\ -+#Requires: %{?!debug_package_requires:%{name} = %{version}-%{release}}%{?debug_package_requires}\ ++Requires: %{name} = %{version}-%{release}\ +%description debuginfo\ This package provides debug information for package %{name}.\ Debug information is useful when developing applications that use this\ @@ -23,81 +27,184 @@ -%endif\ %{nil} --%_defaultdocdir %{_datadir}/doc -+%_defaultdocdir %{_datadir}/doc/packages -+%_docdir_fmt %%{NAME} +-%_defaultdocdir %{_usr}/doc ++%_defaultdocdir %{_usr}/doc/packages ++%_docdir_fmt %%{NAME} # The path to the gzip executable (legacy, use %{__gzip} instead). %_gzipbin %{__gzip} -@@ -230,7 +230,7 @@ package or when debugging this package.\ +@@ -218,7 +218,7 @@ package or when debugging this package.\ %_tmppath %{_var}/tmp # Path to top of build area. --%_topdir %{getenv:HOME}/rpmbuild +-%_topdir %{_usrsrc}/redhat +%_topdir %{_usrsrc}/packages # The path to the unzip executable (legacy, use %{__unzip} instead). %_unzipbin %{__unzip} -@@ -333,7 +333,7 @@ package or when debugging this package.\ - # "w7.lzdio" lzma-alone level 7, lzma's default +@@ -323,7 +323,7 @@ package or when debugging this package.\ + # "w9.bzdio" bzip2 level 9. # #%_source_payload w9.gzdio -#%_binary_payload w9.gzdio -+%_binary_payload w5.lzdio ++%_binary_payload w9.bzdio - # Algorithm to use for generating file checksum digests on build. - # If not specified or 0, MD5 is used. -@@ -417,7 +417,7 @@ package or when debugging this package.\ + # The signature to use and the location of configuration files for + # signing packages with PGP. +@@ -371,7 +371,7 @@ package or when debugging this package.\ # # Use internal dependency generator rather than external helpers? -%_use_internal_dependency_generator 1 -+%_use_internal_dependency_generator 1 ++%_use_internal_dependency_generator 0 # # Filter GLIBC_PRIVATE Provides: and Requires: -@@ -463,16 +463,22 @@ print (t)\ - # Undefined, missing or %{nil} will use package content (if available). - %_verify_file_context_path %{__file_context_path} - -+# maxnum,cuttime,minnum -+# 2009/03/01 (SLES11 GA) -+%_binarychangelogtrim 0,1235862000,10 -+ - # - # Path to scripts to autogenerate package dependencies, - # +@@ -420,20 +420,22 @@ print (t)\ # Note: Used iff _use_internal_dependency_generator is zero. - #%__find_provides %{_rpmconfigdir}/rpmdeps --provides - #%__find_requires %{_rpmconfigdir}/rpmdeps --requires --%__find_provides %{_rpmconfigdir}/find-provides --%__find_requires %{_rpmconfigdir}/find-requires -+%__find_provides %{_rpmconfigdir}/find-provides %name -+%__find_requires %{_rpmconfigdir}/find-requires %name + #%__find_provides @RPMCONFIGDIR@/rpmdeps --provides + #%__find_requires @RPMCONFIGDIR@/rpmdeps --requires +-%__find_provides @RPMCONFIGDIR@/find-provides +-%__find_requires @RPMCONFIGDIR@/find-requires ++%__find_provides @RPMCONFIGDIR@/find-provides %name ++%__find_requires @RPMCONFIGDIR@/find-requires %name #%__find_conflicts ??? #%__find_obsoletes ??? +#%__find_supplements ??? +#%__find_enhances ??? - # - # Path to file attribute classifications for automatic dependency -@@ -533,12 +539,12 @@ print (t)\ # + # Path to scripts to autogenerate per-interpreter package dependencies, + # + # Note: Used iff _use_internal_dependency_generator is non-zero. The + # helpers are also used by @RPMCONFIGDIR@/rpmdeps {--provides|--requires}. +-%__perl_provides @RPMCONFIGDIR@/perldeps.pl --provides +-%__perl_requires @RPMCONFIGDIR@/perldeps.pl --requires +-#%__perl_provides @RPMCONFIGDIR@/perl.prov +-#%__perl_requires @RPMCONFIGDIR@/perl.req ++#%__perl_provides @RPMCONFIGDIR@/perldeps.pl --provides ++#%__perl_requires @RPMCONFIGDIR@/perldeps.pl --requires ++%__perl_provides @RPMCONFIGDIR@/perl.prov ++%__perl_requires @RPMCONFIGDIR@/perl.req - # Misc BDB tuning options --%__dbi_other mp_mmapsize=128Mb mp_size=64Mb -+%__dbi_other mp_mmapsize=128Mb mp_size=64Mb + %__python_provides @RPMCONFIGDIR@/pythondeps.sh --provides + %__python_requires @RPMCONFIGDIR@/pythondeps.sh --requires +@@ -591,15 +593,15 @@ print (t)\ + %_dbi_config_Packages %{_dbi_htconfig} lockdbfd --%_dbi_config %{?__dbi_other} -+%_dbi_config %{?__dbi_other} nofsync + # "Depends" is a per-transaction cache of known dependency resolutions. +-%_dbi_config_Depends %{_dbi_htconfig} temporary private ++%_dbi_config_Depends %{_dbi_htconfig} temporary private nofsync - # "Packages" should have shared/exclusive fcntl(2) lock using "lockdbfd". --%_dbi_config_Packages %{?_dbi_config} lockdbfd -+%_dbi_config_Packages %{?__dbi_other} lockdbfd +-%_dbi_config_Dirnames %{_dbi_btconfig} +-%_dbi_config_Requireversion %{_dbi_btconfig} +-%_dbi_config_Provideversion %{_dbi_btconfig} +-%_dbi_config_Installtid %{_dbi_btconfig} +-%_dbi_config_Removetid %{_dbi_btconfig} ++%_dbi_config_Dirnames %{_dbi_btconfig} nofsync ++%_dbi_config_Requireversion %{_dbi_btconfig} nofsync ++%_dbi_config_Provideversion %{_dbi_btconfig} nofsync ++%_dbi_config_Installtid %{_dbi_btconfig} nofsync ++%_dbi_config_Removetid %{_dbi_btconfig} nofsync + +-%_dbi_config %{_dbi_htconfig} ++%_dbi_config %{_dbi_htconfig} nofsync + + # XXX legacy configuration. + # Choose db interface: +@@ -658,8 +660,8 @@ print (t)\ + + # Horowitz Key Protocol server configuration + # +-%_hkp_keyserver hkp://pgp.mit.edu +-%_hkp_keyserver_query %{_hkp_keyserver}/pks/lookup?op=get&search=0x ++#%_hkp_keyserver hkp://pgp.mit.edu ++#%_hkp_keyserver_query %{_hkp_keyserver}/pks/lookup?op=get&search=0x #============================================================================== - # ---- GPG/PGP/PGP5 signature macros. -@@ -857,7 +863,7 @@ print (t)\ + # ---- Transaction macros. +@@ -767,80 +769,6 @@ print (t)\ + # + # XXX Note: that there cannot be any whitespace within the string "p>q", + # and that both p and q are package names (i.e. no version/release). +-# +-#%_dependency_whiteout_5_2 \ +-# pam>pamconfig +-#%_dependency_whiteout_6_1 \ +-# pilot-link-devel>pilot-link +-#%_dependency_whiteout_6_2 \ +-# egcs-c++>libstdc++ +-%_dependency_whiteout_7_0 \ +- pango-gtkbeta-devel>pango-gtkbeta\ +- XFree86>Mesa \ +- compat-glibc>db2 \ +- compat-glibc>db1 \ +- pam>initscripts \ +- initscripts>sysklogd +-%_dependency_whiteout_7_1 \ +- arts>kdelibs-sound +-%_dependency_whiteout_7_2 \ +- libgnomeprint15>gnome-print \ +- nautilus>nautilus-mozilla \ +- tcl>postgresql-tcl +-#%_dependency_whiteout_8_0 \ +-# perl>perl-Parse-RecDescent \ +-# XFree86-libs>XFree86-Mesa-libGL \ +-# perl>perl-Filter \ +-# perl>mrtg \ +-# perl>mod_perl \ +-# mysql>perl-DBD-MySQL \ +-# ghostscript>gimp-print \ +-# arts>kde2-compat \ +-# perl-Date-Calc>perl-Bit-Vector \ +-# glibc-debug>glibc-devel +- +-%_dependency_whiteout_8_0 \ +- mysql>perl-DBD-MySQL \ +- perl>perl-Filter \ +- perl>mrtg \ +- perl>mod_perl \ +- perl-Date-Calc>perl-Bit-Vector \ +- +-%_dependency_whiteout_fc3 \ +- coreutils>pam \ +- nautilus>nautilus-cd-burner \ +- aspell>aspell-en \ +- kernel>initscripts \ +- kernel-smp>initscripts \ +- xorg-x11-libs>xorg-x11-Mesa-libGL \ +- openldap>cyrus-sasl-md5 \ +- openldap>cyrus-sasl \ +- openjade>docbook-dtds \ +- gtk+>gdk-pixbuf \ +- xorg-x11>xinitrc \ +- gnome-python2>gnome-python2-bonobo \ +- httpd-suexec>httpd \ +- xemacs-sumo>apel-xemacs \ +- php>php-pear \ +- openoffice.org-libs>openoffice.org +- +-%_dependency_whiteout \ +- libtermcap>bash \ +- modutils>vixie-cron \ +- ypbind>yp-tools \ +- ghostscript-fonts>ghostscript \ +- %{?_dependency_whiteout_fc3} \ +- %{?_dependency_whiteout_fc2} \ +- %{?_dependency_whiteout_fc1} \ +- %{?_dependency_whiteout_9} \ +- %{?_dependency_whiteout_8_0} \ +- %{?_dependency_whiteout_7_2} \ +- %{?_dependency_whiteout_7_1} \ +- %{?_dependency_whiteout_7_0} \ +- %{?_dependency_whiteout_6_2} \ +- %{?_dependency_whiteout_6_1} \ +- %{?_dependency_whiteout_5_2} \ +- %{nil} + + # + # Default headerSprintf() output format string for rpm -qa +@@ -1093,7 +1021,7 @@ print (t)\ %_build_vendor %{_host_vendor} %_build_os %{_host_os} %_host @host@ @@ -106,10 +213,10 @@ %_host_cpu @host_cpu@ %_host_vendor @host_vendor@ %_host_os @host_os@ -@@ -1020,6 +1026,181 @@ done \ - %python_sitearch %(%{__python} -c "from distutils.sysconfig import get_python_lib; import sys; sys.stdout.write(get_python_lib(1))") - %python_version %(%{__python} -c "import sys; sys.stdout.write(sys.version[:3])") +@@ -1250,12 +1178,191 @@ done \ + %perl_privlib %(eval "`%{__perl} -V:installprivlib`"; echo $installprivlib) + #------------------------------------------------------------------------------ +# More useful perl macros (from Raul Dias ) +# +%perl_version %(perl -V:version | sed "s!.*='!!;s!'.*!!") @@ -285,21 +392,20 @@ +run "\\$@"\ +EOF + - #------------------------------------------------------------------------------ ++#------------------------------------------------------------------------------ # arch macro for all Intel i?86 compatibile processors # (Note: This macro (and it's analogues) will probably be obsoleted when -@@ -1030,7 +1211,9 @@ done \ - - #------------------------------------------------------------------------------ - # arch macro for all supported ARM processors --%arm armv3l armv4b armv4l armv4tl armv5tel armv5tejl armv6l armv7l -+%arm armv3l armv4b armv4l armv4tl armv5b armv5l armv5teb armv5tel armv5tejl armv6l armv7l -+%arml armv3l armv4l armv5l armv5tel armv6l armv7l + # rpm can use regular expressions against target platforms in macro + # conditionals. + # + %ix86 i386 i486 i586 i686 pentium3 pentium4 athlon ++%arm armv4l armv4b armv5l armv5b armv5tel armv5teb ++%arml armv4l armv5l armv5tel +%armb armv4b armv5b armv5teb - #------------------------------------------------------------------------------ - # arch macro for all supported Sparc processors -@@ -1070,3 +1253,26 @@ done \ + #------------------------------------------------------------------------ + # Use in %install to generate locale specific file lists. For example, +@@ -1270,3 +1377,17 @@ done \ # \endverbatim #*/ @@ -317,12 +423,3 @@ +%info_del() test -x /sbin/install-info -a ! -f %{?2}%{?!2:%{_infodir}}/%{1}%ext_info && /sbin/install-info --quiet --delete --info-dir=%{?2}%{?!2:%{_infodir}} %{?2}%{?!2:%{_infodir}}/%{1}%ext_info \ +%{nil} + -+%service_add() %{fillup_and_insserv %{1}} -+%service_del_preun() %{stop_on_removal %{1}} -+%service_del_postun() %{restart_on_update %{1}} -+ -+%user_group_add() \ -+/usr/sbin/groupadd -o -r %{1} 2>/dev/null || :\ -+/usr/sbin/useradd -o -r -g %{1} -d %{2} -s %{3} -c %{4} %{1} 2>/dev/null || :\ -+%{nil} -+ diff --git a/magic_and_path.diff b/magic_and_path.diff deleted file mode 100644 index de74ea7..0000000 --- a/magic_and_path.diff +++ /dev/null @@ -1,23 +0,0 @@ -Allow "magic_and_path" flag to configure that files must -match both regexpes to be sent to the dependency generator. - ---- build/rpmfc.c.orig 2011-05-16 10:46:20.000000000 +0000 -+++ build/rpmfc.c 2011-05-16 11:02:56.000000000 +0000 -@@ -630,10 +631,13 @@ static void rpmfcAttributes(rpmfc fc, co - continue; - - /* Add attributes on libmagic type & path pattern matches */ -- if (regMatch((*attr)->magic, ftype)) -- argvAddTokens(&fc->fattrs[fc->ix], (*attr)->name); -- if (regMatch((*attr)->path, path)) -- argvAddTokens(&fc->fattrs[fc->ix], (*attr)->name); -+ if ((*attr)->magic && (*attr)->path && hasAttr((*attr)->flags, "magic_and_path")) { -+ if (regMatch((*attr)->magic, ftype) && regMatch((*attr)->path, path)) -+ argvAddTokens(&fc->fattrs[fc->ix], (*attr)->name); -+ } else { -+ if (regMatch((*attr)->magic, ftype) || regMatch((*attr)->path, path)) -+ argvAddTokens(&fc->fattrs[fc->ix], (*attr)->name); -+ } - } - } - diff --git a/missingok.diff b/missingok.diff index 7647696..96133c9 100644 --- a/missingok.diff +++ b/missingok.diff @@ -1,9 +1,9 @@ -support missingok dependency bit +Obey MISSINGOK flag for dependencies. Backport from rpm-4.4.7. ---- ./lib/depends.c.orig 2011-02-15 13:10:59.000000000 +0000 -+++ ./lib/depends.c 2011-05-10 16:06:39.000000000 +0000 -@@ -448,8 +448,13 @@ retry: - } +--- ./lib/depends.c.orig 2005-12-14 19:51:34.000000000 +0000 ++++ ./lib/depends.c 2006-01-27 21:05:13.000000000 +0000 +@@ -581,8 +632,13 @@ retry: + /*@=boundsread@*/ unsatisfied: - rc = 1; /* dependency is unsatisfied */ @@ -17,14 +17,23 @@ support missingok dependency bit + } exit: - return rc; ---- ./lib/rpmds.h.orig 2011-05-10 16:09:22.000000000 +0000 -+++ ./lib/rpmds.h 2011-05-10 16:08:04.000000000 +0000 -@@ -68,6 +68,7 @@ typedef rpmFlags rpmsenseFlags; + /* +@@ -975,6 +1082,8 @@ static inline /*@observer@*/ const char + return "Requires(postun):"; + if (f & RPMSENSE_SCRIPT_VERIFY) + return "Requires(verify):"; ++ if (f & RPMSENSE_MISSINGOK) ++ return "Requires(hint):"; + if (f & RPMSENSE_FIND_REQUIRES) + return "Requires(auto):"; + return "Requires:"; +--- ./lib/rpmlib.h.orig 2005-12-15 14:50:30.000000000 +0000 ++++ ./lib/rpmlib.h 2006-02-03 13:22:27.000000000 +0000 +@@ -547,6 +561,7 @@ typedef enum rpmsenseFlags_e { RPMSENSE_SCRIPT_POSTUN | \ RPMSENSE_SCRIPT_VERIFY | \ RPMSENSE_FIND_REQUIRES | \ + RPMSENSE_MISSINGOK | \ - RPMSENSE_RPMLIB | \ - RPMSENSE_KEYRING | \ - RPMSENSE_PRETRANS | \ + RPMSENSE_SCRIPT_PREP | \ + RPMSENSE_SCRIPT_BUILD | \ + RPMSENSE_SCRIPT_INSTALL | \ diff --git a/modalias-encode.diff b/modalias-encode.diff deleted file mode 100644 index c92f195..0000000 --- a/modalias-encode.diff +++ /dev/null @@ -1,40 +0,0 @@ -Module aliases (modinfo -F alias ) may contain special characters -that rpm does not allow in dependencies, such as commas. Encode those as -%XX to avoid generating broken dependencies. - -Signed-off-by: Andreas Gruenbacher - -Index: rpm-4.4.2.3/scripts/find-supplements.ksyms -=================================================================== ---- scripts/find-supplements.ksyms -+++ scripts/find-supplements.ksyms -@@ -48,6 +48,21 @@ combine_modaliases() { - print_modaliases "$class" "$variants" "$pos" - } - -+# Encode all characters other than [*:a-zA-Z0-9] in stdin as %XX. -+# (This includes the % character itself, which becomes %25.) -+hexenc() { -+ local line hex -+ -+ while read line; do -+ set -- "" "$line" -+ while [[ "$2" =~ ([*:a-zA-Z0-9]*)([^*:a-zA-Z0-9])(.*) ]]; do -+ hex=$(echo -n "${BASH_REMATCH[2]}" | hexdump -e '"%X"') -+ set -- "$1${BASH_REMATCH[1]}%$hex" "${BASH_REMATCH[3]}" -+ done -+ echo "$1$2" -+ done -+} -+ - aliases_of_filelist() { - modlist=$(mktemp) - have_module=1 -@@ -60,6 +75,7 @@ aliases_of_filelist() { - fi - have_module=0 - /sbin/modinfo -F alias "$module" \ -+ | hexenc \ - | sed -nre "s,(.+:.+),modalias(kernel-${krel##*-}:\\1),p" | tee -a $modlist - done - if ! test -s "$modlist" && test $have_module = 0; then diff --git a/modalias-kernel_module.diff b/modalias-kernel_module.diff index 524e02e..4add934 100644 --- a/modalias-kernel_module.diff +++ b/modalias-kernel_module.diff @@ -1,17 +1,15 @@ Index: scripts/find-supplements.ksyms =================================================================== ---- scripts/find-supplements.ksyms.orig +--- scripts/find-supplements.ksyms +++ scripts/find-supplements.ksyms -@@ -1,6 +1,8 @@ +@@ -1,5 +1,6 @@ #! /bin/sh -+SPECFILE=${RPMBUILD_SPECFILE:-/usr/src/packages/SOURCES/$1.spec} ++RPM_SOURCE_DIR=/usr/src/packages/SOURCES IFS=$'\n' -+PACKAGE=$1 case "$1" in - kernel-module-*) ;; # Fedora kernel module package names start with -@@ -46,11 +48,54 @@ combine_modaliases() { +@@ -46,11 +47,43 @@ combine_modaliases() { print_modaliases "$class" "$variants" "$pos" } @@ -22,23 +20,12 @@ Index: scripts/find-supplements.ksyms - | sed -nre "s,(.+:.+),modalias(kernel-${krel##*-}:\\1),p" -done \ +aliases_of_filelist() { -+ modlist=$(mktemp) -+ have_module=1 + for module in $(grep -E '/lib/modules/.+\.ko$'); do + vermagic=$(/sbin/modinfo -F vermagic "$module") + krel=${vermagic%% *} -+ if ! test -x /sbin/modinfo; then -+ echo "ERROR: add module-init-tools to BuildRequires" >&2 -+ exit 1 -+ fi -+ have_module=0 + /sbin/modinfo -F alias "$module" \ -+ | sed -nre "s,(.+:.+),modalias(kernel-${krel##*-}:\\1),p" | tee -a $modlist ++ | sed -nre "s,(.+:.+),modalias(kernel-${krel##*-}:\\1),p" + done -+ if ! test -s "$modlist" && test $have_module = 0; then -+ echo "packageand(kernel-${krel##*-}:$PACKAGE)" -+ fi -+ rm -f $modlist +} + +aliases_of_specfile_macro() { @@ -47,7 +34,7 @@ Index: scripts/find-supplements.ksyms + regex=$( + set -o noglob + set -- $(sed -ne 's:^%supplements_kernel_module[ \t]::p' \ -+ $SPECFILE) ++ $RPM_SOURCE_DIR/$1.spec) + while [ $# -ge 1 ]; do + regex=$(echo "$1" \ + | sed -e 's:[.]:\\.:g' \ diff --git a/modalias.diff b/modalias.diff index abcdefd..ccfe6b6 100644 --- a/modalias.diff +++ b/modalias.diff @@ -1,29 +1,28 @@ ---- ./macros.in.orig 2011-05-11 14:57:08.000000000 +0000 -+++ ./macros.in 2011-05-11 15:01:39.000000000 +0000 -@@ -470,14 +470,18 @@ print (t)\ - # - # Path to scripts to autogenerate package dependencies, - # -+%__set_helper_env %{lua: -+posix.setenv("RPMBUILD_SPECFILE",rpm.expand("%?_specfile")); -+posix.setenv("RPMBUILD_SOURCEDIR",rpm.expand("%?_sourcedir")); -+} - # Note: Used iff _use_internal_dependency_generator is zero. - #%__find_provides %{_rpmconfigdir}/rpmdeps --provides - #%__find_requires %{_rpmconfigdir}/rpmdeps --requires --%__find_provides %{_rpmconfigdir}/find-provides %name --%__find_requires %{_rpmconfigdir}/find-requires %name -+%__find_provides %{__set_helper_env}%{_rpmconfigdir}/find-provides %name -+%__find_requires %{__set_helper_env}%{_rpmconfigdir}/find-requires %name - #%__find_conflicts ??? - #%__find_obsoletes ??? --#%__find_supplements ??? -+%__find_supplements %{__set_helper_env}%{_rpmconfigdir}/find-supplements %name - #%__find_enhances ??? - - # ---- ./scripts/find-supplements.ksyms.orig 2011-05-11 15:01:39.000000000 +0000 -+++ ./scripts/find-supplements.ksyms 2011-05-11 15:01:39.000000000 +0000 +SUSE specific find-supplements, used for kernel builds + +Index: ./scripts/find-supplements +=================================================================== +--- /dev/null ++++ ./scripts/find-supplements +@@ -0,0 +1,14 @@ ++#!/bin/bash ++ ++# This script reads filenames from STDIN and outputs any relevant provides ++# information that needs to be included in the package. ++IFS=$'\n' ++filelist=($(cat)) ++ ++# ++# --- Kernel module hardware identifiers ++# (e.g., modalias(pci:v0000109Ed00000878sv00000070sd0000FF01bc*sc*i*) ++[ -x /usr/lib/rpm/find-supplements.ksyms ] && ++ printf "%s\n" "${filelist[@]}" | /usr/lib/rpm/find-supplements.ksyms "$@" ++ ++exit 0 +Index: ./scripts/find-supplements.ksyms +=================================================================== +--- /dev/null ++++ ./scripts/find-supplements.ksyms @@ -0,0 +1,56 @@ +#! /bin/sh + @@ -81,20 +80,16 @@ +done \ +| sort -u \ +| combine_modaliases ---- ./scripts/find-supplements.orig 2011-05-11 15:01:39.000000000 +0000 -+++ ./scripts/find-supplements 2011-05-11 15:01:39.000000000 +0000 -@@ -0,0 +1,14 @@ -+#!/bin/bash -+ -+# This script reads filenames from STDIN and outputs any relevant provides -+# information that needs to be included in the package. -+IFS=$'\n' -+filelist=($(cat)) -+ -+# -+# --- Kernel module hardware identifiers -+# (e.g., modalias(pci:v0000109Ed00000878sv00000070sd0000FF01bc*sc*i*) -+[ -x /usr/lib/rpm/find-supplements.ksyms ] && -+ printf "%s\n" "${filelist[@]}" | /usr/lib/rpm/find-supplements.ksyms "$@" -+ -+exit 0 +Index: ./macros.in +=================================================================== +--- ./macros.in ++++ ./macros.in +@@ -424,7 +424,7 @@ print (t)\ + %__find_requires @RPMCONFIGDIR@/find-requires %name + #%__find_conflicts ??? + #%__find_obsoletes ??? +-#%__find_supplements ??? ++%__find_supplements @RPMCONFIGDIR@/find-supplements %name + #%__find_enhances ??? + + # diff --git a/nameversioncompare.diff b/nameversioncompare.diff index ebede1f..0bd74c4 100644 --- a/nameversioncompare.diff +++ b/nameversioncompare.diff @@ -1,10 +1,10 @@ Also compare the name and not only the version when checking if two packages are the same. rh#104066 ---- ./lib/depends.c.orig 2011-05-12 12:20:01.000000000 +0000 -+++ ./lib/depends.c 2011-05-12 12:26:25.000000000 +0000 -@@ -95,6 +95,24 @@ static rpmdbMatchIterator rpmtsPrunedIte - return mi; +--- ./lib/depends.c.orig 2005-12-14 19:51:34.000000000 +0000 ++++ ./lib/depends.c 2006-01-27 21:05:13.000000000 +0000 +@@ -124,6 +124,24 @@ static int removePackage(rpmts ts, Heade + return 0; } +static int rpmNameVersionCompare(Header first, Header second) @@ -12,23 +12,23 @@ two packages are the same. rh#104066 + const char * one, * two; + int rc; + -+ one = headerGetString(first, RPMTAG_NAME); -+ two = headerGetString(second, RPMTAG_NAME); ++ rc = headerGetEntry(first, RPMTAG_NAME, NULL, (void **) &one, NULL); ++ rc = headerGetEntry(second, RPMTAG_NAME, NULL, (void **) &two, NULL); + rc = strcmp(one, two); + if (rc) + return rc; -+ one = headerGetString(first, RPMTAG_ARCH); -+ two = headerGetString(second, RPMTAG_ARCH); ++ rc = headerGetEntry(first, RPMTAG_ARCH, NULL, (void **) &one, NULL); ++ rc = headerGetEntry(second, RPMTAG_ARCH, NULL, (void **) &two, NULL); + rc = strcmp(one, two); + if (rc) + return rc; + return rpmVersionCompare(first, second); +} + - #define skipColor(_tscolor, _color, _ocolor) \ - ((_tscolor) && (_color) && (_ocolor) && !((_color) & (_ocolor))) - -@@ -111,7 +129,7 @@ static void addUpgradeErasures(rpmts ts, + int rpmtsAddInstallElement(rpmts ts, Header h, + fnpyKey key, int upgrade, rpmRelocation * relocs) + { +@@ -303,7 +322,7 @@ addheader: continue; /* Skip packages that contain identical NEVR. */ @@ -36,13 +36,18 @@ two packages are the same. rh#104066 + if (rpmNameVersionCompare(h, oh) == 0) continue; - removePackage(ts, oh, p); -@@ -150,7 +168,7 @@ static void addObsoleteErasures(rpmts ts + xx = removePackage(ts, oh, rpmdbGetIteratorOffset(mi), pkgKey); +@@ -354,11 +373,9 @@ addheader: * If no obsoletes version info is available, match all names. */ if (rpmdsEVR(obsoletes) == NULL -- || rpmdsAnyMatchesDep(oh, obsoletes, _rpmds_nopromote)) { -+ || rpmdsNVRMatchesDep(oh, obsoletes, _rpmds_nopromote)) { - char * ohNEVRA = headerGetAsString(oh, RPMTAG_NEVRA); - rpmlog(RPMLOG_DEBUG, " Obsoletes: %s\t\terases %s\n", - rpmdsDNEVR(obsoletes)+2, ohNEVRA); +- || rpmdsAnyMatchesDep(oh, obsoletes, _rpmds_nopromote)) { ++ || rpmdsNVRMatchesDep(oh, obsoletes, _rpmds_nopromote)) { + const char * ohNEVRA = hGetNEVRA(oh, NULL); +-#ifdef DYING /* XXX see http://bugzilla.redhat.com #134497 */ +- if (rpmVersionCompare(h, oh)) +-#endif ++ if (rpmNameVersionCompare(h, oh)) + xx = removePackage(ts, oh, rpmdbGetIteratorOffset(mi), pkgKey); + /*@-nullptrarith@*/ + rpmMessage(RPMMESS_DEBUG, _(" Obsoletes: %s\t\terases %s\n"), diff --git a/no_rep_autop.diff b/no_rep_autop.diff deleted file mode 100644 index 4027c96..0000000 --- a/no_rep_autop.diff +++ /dev/null @@ -1,12 +0,0 @@ -It seems to be gone... - ---- lib/Makefile.am.orig 2011-05-12 12:59:42.000000000 +0000 -+++ lib/Makefile.am 2011-05-12 12:59:59.000000000 +0000 -@@ -126,7 +126,6 @@ rpmdb_printlog_LDADD = \ - $(top_builddir)/db3/fileops_autop.o \ - $(top_builddir)/db3/hash_autop.o \ - $(top_builddir)/db3/qam_autop.o \ -- $(top_builddir)/db3/rep_autop.o \ - $(top_builddir)/db3/txn_autop.o \ - $(top_builddir)/db3/util_sig.o \ - librpm.la diff --git a/nobuildcolor.diff b/nobuildcolor.diff deleted file mode 100644 index ed58d0d..0000000 --- a/nobuildcolor.diff +++ /dev/null @@ -1,13 +0,0 @@ -Disable file coloring for SUSE systems - ---- build/rpmfc.c.orig 2011-05-13 12:35:29.000000000 +0000 -+++ build/rpmfc.c 2011-05-13 13:49:37.000000000 +0000 -@@ -1312,7 +1312,7 @@ rpmRC rpmfcGenerateDepends(const rpmSpec - goto exit; - - /* Add per-file colors(#files) */ -- if (rpmtdFromArgi(&td, RPMTAG_FILECOLORS, fc->fcolor)) { -+ if (rpmExpandNumeric("%{?_transaction_color}") != 0 && rpmtdFromArgi(&td, RPMTAG_FILECOLORS, fc->fcolor)) { - rpm_color_t *fcolor; - assert(rpmtdType(&td) == RPM_INT32_TYPE); - /* XXX Make sure only primary (i.e. Elf32/Elf64) colors are added. */ diff --git a/nodefattr.diff b/nodefattr.diff new file mode 100644 index 0000000..227668d --- /dev/null +++ b/nodefattr.diff @@ -0,0 +1,15 @@ +Revert upstream patch that always uses %defattr(-,root,root). +Upstream should probably use a macro instead. + +--- ./build/files.c.orig 2005-12-14 19:22:43.000000000 +0000 ++++ ./build/files.c 2006-02-17 13:57:25.000000000 +0000 +@@ -2000,7 +2012,9 @@ static int processPackageFiles(Spec spec + + nullAttrRec(&fl.cur_ar); + nullAttrRec(&fl.def_ar); ++#if 0 + dupAttrRec(&root_ar, &fl.def_ar); /* XXX assume %defattr(-,root,root) */ ++#endif + + fl.defVerifyFlags = RPMVERIFY_ALL; + fl.nLangs = 0; diff --git a/nolua.diff b/nolua.diff new file mode 100644 index 0000000..2244136 --- /dev/null +++ b/nolua.diff @@ -0,0 +1,83 @@ +Allow build without lua support. + +--- ./build/parseScript.c.orig 2005-12-16 18:34:36.000000000 +0000 ++++ ./build/parseScript.c 2005-12-16 18:36:08.000000000 +0000 +@@ -283,6 +283,7 @@ int parseScript(Spec spec, int parsePart + stripTrailingBlanksStringBuf(sb); + p = getStringBuf(sb); + ++#ifdef WITH_LUA + if (!strcmp(progArgv[0], "")) { + rpmlua lua = NULL; /* Global state. */ + if (rpmluaCheckScript(lua, p, partname) != RPMRC_OK) { +@@ -291,7 +292,9 @@ int parseScript(Spec spec, int parsePart + } + (void) rpmlibNeedsFeature(pkg->header, + "BuiltinLuaScripts", "4.2.2-1"); +- } else if (progArgv[0][0] == '<') { ++ } else ++#endif ++ if (progArgv[0][0] == '<') { + rpmError(RPMERR_BADSPEC, + _("line %d: unsupported internal script: %s\n"), + spec->lineNum, progArgv[0]); +--- ./lib/psm.c.orig 2005-12-14 18:59:10.000000000 +0000 ++++ ./lib/psm.c 2006-02-24 11:46:54.000000000 +0000 +@@ -490,6 +490,7 @@ static pid_t psmWait(rpmpsm psm) + return psm->sq.reaped; + } + ++#ifdef WITH_LUA + /** + * Run internal Lua script. + */ +@@ -572,6 +573,7 @@ static rpmRC runLuaScript(rpmpsm psm, He + + return rc; + } ++#endif + + /** + */ +@@ -637,11 +639,15 @@ static rpmRC runScript(rpmpsm psm, Heade + xx = hge(h, RPMTAG_ARCH, NULL, (void **) &a, NULL); + + if (progArgv && strcmp(progArgv[0], "") == 0) { ++#ifdef WITH_LUA + rpmMessage(RPMMESS_DEBUG, + _("%s: %s(%s-%s-%s.%s) running scriptlet.\n"), + psm->stepName, tag2sln(psm->scriptTag), n, v, r, a); + return runLuaScript(psm, h, sln, progArgc, progArgv, + script, arg1, arg2); ++#else ++ return RPMRC_FAIL; ++#endif + } + + psm->sq.reaper = 1; +--- ./lib/rpmlibprov.c.orig 2004-03-16 21:58:29.000000000 +0000 ++++ ./lib/rpmlibprov.c 2006-06-14 13:52:46.000000000 +0000 +@@ -51,9 +54,11 @@ static struct rpmlibProvides_s rpmlibPro + { "rpmlib(ConcurrentAccess)", "4.1-1", + ( RPMSENSE_EQUAL), + N_("package scriptlets may access the rpm database while installing.") }, ++#ifdef WITH_LUA + { "rpmlib(BuiltinLuaScripts)", "4.2.2-1", + ( RPMSENSE_EQUAL), + N_("internal support for lua scripts.") }, ++#endif + { NULL, NULL, 0, NULL } + }; + +--- ./lib/rpmrc.c.orig 2005-01-17 18:46:23.000000000 +0000 ++++ ./lib/rpmrc.c 2005-12-16 18:30:29.000000000 +0000 +@@ -1883,7 +1873,9 @@ int rpmReadConfigFiles(const char * file + } + + /* Force Lua state initialization */ ++#ifdef WITH_LUA + (void)rpmluaGetPrintBuffer(NULL); ++#endif + + return 0; + } diff --git a/nomagiccheck.diff b/nomagiccheck.diff deleted file mode 100644 index 1ae6ccf..0000000 --- a/nomagiccheck.diff +++ /dev/null @@ -1,13 +0,0 @@ -Don't let rpm complain about a missing /etc/magic.mgc file - ---- build/rpmfc.c.orig 2011-05-13 16:33:20.000000000 +0000 -+++ build/rpmfc.c 2011-05-13 16:33:55.000000000 +0000 -@@ -896,7 +896,7 @@ rpmRC rpmfcClassify(rpmfc fc, ARGV_t arg - { - ARGV_t fcav = NULL; - int xx; -- int msflags = MAGIC_CHECK | MAGIC_COMPRESS | MAGIC_NO_CHECK_TOKENS; -+ int msflags = MAGIC_COMPRESS | MAGIC_NO_CHECK_TOKENS; - magic_t ms = NULL; - rpmRC rc = RPMRC_FAIL; - diff --git a/noneon.diff b/noneon.diff new file mode 100644 index 0000000..b1ff9ca --- /dev/null +++ b/noneon.diff @@ -0,0 +1,292 @@ +Allow build without the neon library. Resurrects old httpOpen +code from rpm-4.1.1. +Building without neon means no webdav file uploads, though. + +--- ./rpmio/rpmdav.c.orig 2005-12-16 18:04:29.000000000 +0000 ++++ ./rpmio/rpmdav.c 2005-12-16 18:17:53.000000000 +0000 +@@ -9,6 +9,8 @@ + #include + #endif + ++#ifdef WITH_NEON ++ + #include "ne_alloc.h" + #include "ne_auth.h" + #include "ne_basic.h" +@@ -27,6 +29,8 @@ + #include "ne_string.h" + #include "ne_utils.h" + ++#endif /* WITH_NEON */ ++ + #include + + #define _RPMDAV_INTERNAL +@@ -61,6 +65,8 @@ _free(/*@only@*/ /*@null@*/ /*@out@*/ co + return NULL; + } + ++#ifdef WITH_NEON ++ + /* =============================================================== */ + static int davFree(urlinfo u) + /*@globals internalState @*/ +@@ -1370,6 +1376,8 @@ fprintf(stderr, "*** davReadlink(%s) rc + } + #endif /* NOTYET */ + ++#endif /* WITH_NEON */ ++ + /* =============================================================== */ + /*@unchecked@*/ + int avmagicdir = 0x3607113; +@@ -1494,6 +1502,8 @@ fprintf(stderr, "*** avOpendir(%s)\n", p + } + /*@=boundswrite@*/ + ++#ifdef WITH_NEON ++ + /* =============================================================== */ + /*@unchecked@*/ + int davmagicdir = 0x8440291; +@@ -1661,4 +1671,6 @@ fprintf(stderr, "*** davOpendir(%s)\n", + return (DIR *) avdir; + /*@=kepttrans@*/ + } ++ ++#endif /* WITH_NEON */ + /*@=modfilesys@*/ +--- ./rpmio/rpmio.c.orig 2005-01-26 03:39:58.000000000 +0000 ++++ ./rpmio/rpmio.c 2005-12-16 17:51:19.000000000 +0000 +@@ -371,7 +371,11 @@ static ssize_t fdRead(void * cookie, /*@ + /*@-boundswrite@*/ + /* HACK: flimsy wiring for davRead */ + if (fd->req != NULL) { ++#ifdef WITH_NEON + rc = davRead(fd, buf, (count > fd->bytesRemain ? fd->bytesRemain : count)); ++#else ++ rc = -1; ++#endif + /* XXX Chunked davRead EOF. */ + if (rc == 0) + fd->bytesRemain = 0; +@@ -404,9 +408,13 @@ static ssize_t fdWrite(void * cookie, co + fdstat_enter(fd, FDSTAT_WRITE); + /*@-boundsread@*/ + /* HACK: flimsy wiring for davWrite */ +- if (fd->req != NULL) ++ if (fd->req != NULL) { ++#ifdef WITH_NEON + rc = davWrite(fd, buf, (count > fd->bytesRemain ? fd->bytesRemain : count)); +- else ++#else ++ return -1; ++#endif ++ } else + rc = write(fdno, buf, (count > fd->bytesRemain ? fd->bytesRemain : count)); + /*@=boundsread@*/ + fdstat_exit(fd, FDSTAT_WRITE, rc); +@@ -455,9 +463,13 @@ static int fdClose( /*@only@*/ void * co + fdstat_enter(fd, FDSTAT_CLOSE); + /* HACK: flimsy wiring for davClose */ + /*@-branchstate@*/ +- if (fd->req != NULL) ++ if (fd->req != NULL) { ++#ifdef WITH_NEON + rc = davClose(fd); +- else ++#else ++ return -1; ++#endif ++ } else + rc = ((fdno >= 0) ? close(fdno) : -2); + /*@=branchstate@*/ + fdstat_exit(fd, FDSTAT_CLOSE, rc); +@@ -2029,6 +2041,56 @@ exit: + } + /*@=nullstate@*/ + ++#ifndef WITH_NEON ++/*@-nullstate@*/ /* FIX: u->{ctrl,data}->url undef after XurlLink. */ ++static /*@null@*/ FD_t httpOpen(const char * url, /*@unused@*/ int flags, ++ /*@unused@*/ mode_t mode, /*@out@*/ urlinfo * uret) ++ /*@globals internalState @*/ ++ /*@modifies *uret, internalState @*/ ++{ ++ urlinfo u = NULL; ++ FD_t fd = NULL; ++ ++#if 0 /* XXX makeTempFile() heartburn */ ++ assert(!(flags & O_RDWR)); ++#endif ++ if (urlSplit(url, &u)) ++ goto exit; ++ ++ if (u->ctrl == NULL) ++ u->ctrl = fdNew("persist ctrl (httpOpen)"); ++ if (u->ctrl->nrefs > 2 && u->data == NULL) ++ u->data = fdNew("persist data (httpOpen)"); ++ ++ if (u->ctrl->url == NULL) ++ fd = fdLink(u->ctrl, "grab ctrl (httpOpen persist ctrl)"); ++ else if (u->data->url == NULL) ++ fd = fdLink(u->data, "grab ctrl (httpOpen persist data)"); ++ else ++ fd = fdNew("grab ctrl (httpOpen)"); ++ ++ if (fd) { ++ fdSetIo(fd, ufdio); ++ fd->ftpFileDoneNeeded = 0; ++ fd->rd_timeoutsecs = httpTimeoutSecs; ++ fd->contentLength = fd->bytesRemain = -1; ++ fd->url = urlLink(u, "url (httpOpen)"); ++ fd = fdLink(fd, "grab data (httpOpen)"); ++ fd->urlType = URL_IS_HTTP; ++ } ++ ++exit: ++/*@-boundswrite@*/ ++ if (uret) ++ *uret = u; ++/*@=boundswrite@*/ ++ /*@-refcounttrans@*/ ++ return fd; ++ /*@=refcounttrans@*/ ++} ++/*@=nullstate@*/ ++#endif ++ + static /*@null@*/ FD_t ufdOpen(const char * url, int flags, mode_t mode) + /*@globals h_errno, fileSystem, internalState @*/ + /*@modifies fileSystem, internalState @*/ +@@ -2067,7 +2129,11 @@ fprintf(stderr, "*** ufdOpen(%s,0x%x,0%o + case URL_IS_HTTPS: + case URL_IS_HTTP: + case URL_IS_HKP: ++#ifdef WITH_NEON + fd = davOpen(url, flags, mode, &u); ++#else ++ fd = httpOpen(url, flags, mode, &u); ++#endif + if (fd == NULL || u == NULL) + break; + +@@ -2075,7 +2141,11 @@ fprintf(stderr, "*** ufdOpen(%s,0x%x,0%o + ? ((flags & O_APPEND) ? "PUT" : + ((flags & O_CREAT) ? "PUT" : "PUT")) + : "GET"); ++#ifdef WITH_NEON + u->openError = davReq(fd, cmd, path); ++#else ++ u->openError = httpReq(fd, cmd, path); ++#endif + if (u->openError < 0) { + /* XXX make sure that we can exit through ufdClose */ + fd = fdLink(fd, "error ctrl (ufdOpen HTTP)"); +--- ./rpmio/rpmrpc.c.orig 2005-12-16 15:01:26.000000000 +0000 ++++ ./rpmio/rpmrpc.c 2006-02-13 18:55:39.000000000 +0000 +@@ -93,7 +93,9 @@ int Mkdir (const char * path, mode_t mod + /*@notreached@*/ break; + case URL_IS_HTTPS: + case URL_IS_HTTP: ++#ifdef WITH_NEON + return davMkdir(path, mode); ++#endif + /*@notreached@*/ break; + case URL_IS_PATH: + path = lpath; +@@ -151,7 +153,9 @@ int Rmdir (const char * path) + /*@notreached@*/ break; + case URL_IS_HTTPS: + case URL_IS_HTTP: ++#ifdef WITH_NEON + return davRmdir(path); ++#endif + /*@notreached@*/ break; + case URL_IS_PATH: + path = lpath; +@@ -182,7 +186,9 @@ int Rename (const char * oldpath, const + switch (oldut) { + case URL_IS_HTTPS: + case URL_IS_HTTP: ++#ifdef WITH_NEON + return davRename(oldpath, newpath); ++#endif + /*@notreached@*/ break; + case URL_IS_FTP: /* XXX WRONG WRONG WRONG */ + case URL_IS_PATH: +@@ -280,7 +286,9 @@ int Unlink(const char * path) { + /*@notreached@*/ break; + case URL_IS_HTTPS: + case URL_IS_HTTP: ++#ifdef WITH_NEON + return davUnlink(path); ++#endif + /*@notreached@*/ break; + case URL_IS_PATH: + path = lpath; +@@ -1282,7 +1290,9 @@ fprintf(stderr, "*** Stat(%s,%p)\n", pat + /*@notreached@*/ break; + case URL_IS_HTTPS: + case URL_IS_HTTP: ++#ifdef WITH_NEON + return davStat(path, st); ++#endif + /*@notreached@*/ break; + case URL_IS_PATH: + path = lpath; +@@ -1311,7 +1321,9 @@ fprintf(stderr, "*** Lstat(%s,%p)\n", pa + /*@notreached@*/ break; + case URL_IS_HTTPS: + case URL_IS_HTTP: ++#ifdef WITH_NEON + return davLstat(path, st); ++#endif + /*@notreached@*/ break; + case URL_IS_PATH: + path = lpath; +@@ -1489,7 +1502,9 @@ fprintf(stderr, "*** Opendir(%s)\n", pat + /*@notreached@*/ break; + case URL_IS_HTTPS: + case URL_IS_HTTP: ++#ifdef WITH_NEON + return davOpendir(path); ++#endif + /*@notreached@*/ break; + case URL_IS_PATH: + path = lpath; +@@ -1515,8 +1530,10 @@ fprintf(stderr, "*** Readdir(%p)\n", (vo + return NULL; + if (ISAVMAGIC(dir)) + return avReaddir(dir); ++#ifdef WITH_NEON + if (ISDAVMAGIC(dir)) + return davReaddir(dir); ++#endif + return readdir(dir); + } + +@@ -1528,8 +1545,10 @@ fprintf(stderr, "*** Closedir(%p)\n", (v + return 0; + if (ISAVMAGIC(dir)) + return avClosedir(dir); ++#ifdef WITH_NEON + if (ISDAVMAGIC(dir)) + return davClosedir(dir); ++#endif + return closedir(dir); + } + +--- ./rpmio/url.c.orig 2005-12-16 15:24:25.000000000 +0000 ++++ ./rpmio/url.c 2005-12-16 17:08:21.000000000 +0000 +@@ -147,8 +147,10 @@ URLDBGREFS(0, (stderr, "--> url %p -- %d + /*@=usereleased@*/ + } + if (u->sess != NULL) { ++#ifdef WITH_NEON + /* HACK: neon include has prototype. */ + ne_session_destroy(u->sess); ++#endif + u->sess = NULL; + } + u->buf = _free(u->buf); diff --git a/noprereqdeprec.diff b/noprereqdeprec.diff deleted file mode 100644 index 5d38711..0000000 --- a/noprereqdeprec.diff +++ /dev/null @@ -1,22 +0,0 @@ -Not deprecated for SUSE builds. - ---- ./build/parsePreamble.c.orig 2011-05-11 15:59:08.000000000 +0000 -+++ ./build/parsePreamble.c 2011-05-11 16:35:47.000000000 +0000 -@@ -891,7 +891,7 @@ static struct PreambleRec_s const preamb - {RPMTAG_ICON, 0, 0, LEN_AND_STR("icon")}, - {RPMTAG_PROVIDEFLAGS, 0, 0, LEN_AND_STR("provides")}, - {RPMTAG_REQUIREFLAGS, 2, 0, LEN_AND_STR("requires")}, -- {RPMTAG_PREREQ, 2, 1, LEN_AND_STR("prereq")}, -+ {RPMTAG_PREREQ, 2, 0, LEN_AND_STR("prereq")}, - {RPMTAG_CONFLICTFLAGS, 0, 0, LEN_AND_STR("conflicts")}, - {RPMTAG_OBSOLETEFLAGS, 0, 0, LEN_AND_STR("obsoletes")}, - {RPMTAG_PREFIXES, 0, 0, LEN_AND_STR("prefixes")}, -@@ -900,7 +900,7 @@ static struct PreambleRec_s const preamb - {RPMTAG_BUILDARCHS, 0, 0, LEN_AND_STR("buildarchitectures")}, - {RPMTAG_BUILDARCHS, 0, 0, LEN_AND_STR("buildarch")}, - {RPMTAG_BUILDCONFLICTS, 0, 0, LEN_AND_STR("buildconflicts")}, -- {RPMTAG_BUILDPREREQ, 0, 1, LEN_AND_STR("buildprereq")}, -+ {RPMTAG_BUILDPREREQ, 0, 0, LEN_AND_STR("buildprereq")}, - {RPMTAG_BUILDREQUIRES, 0, 0, LEN_AND_STR("buildrequires")}, - {RPMTAG_AUTOREQPROV, 0, 0, LEN_AND_STR("autoreqprov")}, - {RPMTAG_AUTOREQ, 0, 0, LEN_AND_STR("autoreq")}, diff --git a/nostdoutclose.diff b/nostdoutclose.diff new file mode 100644 index 0000000..3810ecf --- /dev/null +++ b/nostdoutclose.diff @@ -0,0 +1,13 @@ +Do not close stdout for scriptlets. + +--- ./lib/psm.c.orig 2005-12-14 18:59:10.000000000 +0000 ++++ ./lib/psm.c 2006-02-24 11:46:54.000000000 +0000 +@@ -829,7 +837,7 @@ static rpmRC runScript(rpmpsm psm, Heade + xx = Fclose (out); + if (sfdno > STDERR_FILENO) + xx = Fclose (scriptFd); +- else { ++ else if (Fileno(out) > STDERR_FILENO) { + /*@-usereleased@*/ + xx = Fclose(out); + /*@=usereleased@*/ diff --git a/obeynodbsync.diff b/obeynodbsync.diff new file mode 100644 index 0000000..abd73dd --- /dev/null +++ b/obeynodbsync.diff @@ -0,0 +1,14 @@ +Make rpmdbSync obey the no_dbsync flag + +--- ./rpmdb/rpmdb.c.orig 2005-02-16 03:18:19.000000000 +0000 ++++ ./rpmdb/rpmdb.c 2006-02-21 20:37:44.000000000 +0000 + /*@=incondefs@*/ +@@ -906,6 +937,8 @@ int rpmdbSync(rpmdb db) + int xx; + if (db->_dbi[dbix] == NULL) + continue; ++ if (db->_dbi[dbix]->dbi_no_dbsync) ++ continue; + xx = dbiSync(db->_dbi[dbix], 0); + if (xx && rc == 0) rc = xx; + } diff --git a/openallbuttemp.diff b/openallbuttemp.diff new file mode 100644 index 0000000..156e274 --- /dev/null +++ b/openallbuttemp.diff @@ -0,0 +1,55 @@ +Open all rpm databases before doing chroot. [#43266], [#44584] +rh#103852 + +Already in rpm-4.4.7, configurable with a macro (for whatever reason). + +--- ./lib/transaction.c.orig 2005-12-14 21:15:40.000000000 +0000 ++++ ./lib/transaction.c 2006-01-27 20:05:40.000000000 +0000 +@@ -1677,8 +1859,10 @@ rpmMessage(RPMMESS_DEBUG, _("computing % + const char * rootDir = rpmtsRootDir(ts); + xx = chdir("/"); + /*@-superuser -noeffect @*/ +- if (rootDir != NULL && strcmp(rootDir, "/") && *rootDir == '/') ++ if (rootDir != NULL && strcmp(rootDir, "/") && *rootDir == '/') { ++ rpmdbOpenAllButTemporary(ts->rdb); + xx = chroot(rootDir); ++ } + /*@=superuser =noeffect @*/ + (void) rpmtsSetChrootDone(ts, 1); + } +--- ./rpmdb/rpmdb.c.orig 2005-02-16 03:18:19.000000000 +0000 ++++ ./rpmdb/rpmdb.c 2006-02-21 20:37:44.000000000 +0000 +@@ -811,6 +811,33 @@ int rpmdbOpenAll(rpmdb db) + return rc; + } + ++int rpmdbOpenAllButTemporary(rpmdb db) ++{ ++ int dbix; ++ int rc = 0; ++ ++ if (db == NULL) return -2; ++ ++ if (dbiTags != NULL) ++ for (dbix = 0; dbix < dbiTagsMax; dbix++) { ++ if (db->_dbi[dbix] != NULL) ++ continue; ++ /* Filter out temporary databases */ ++ switch ((dbiTags[dbix])) { ++ case RPMDBI_AVAILABLE: ++ case RPMDBI_ADDED: ++ case RPMDBI_REMOVED: ++ case RPMDBI_DEPENDS: ++ continue; ++ /*@notreached@*/ /*@switchbreak@*/ break; ++ default: ++ /*@switchbreak@*/ break; ++ } ++ (void) dbiOpen(db, dbiTags[dbix], db->db_flags); ++ } ++ return rc; ++} ++ + int rpmdbCloseDBI(rpmdb db, int rpmtag) + { + int dbix; diff --git a/patchrpms.diff b/patchrpms.diff new file mode 100644 index 0000000..050189d --- /dev/null +++ b/patchrpms.diff @@ -0,0 +1,743 @@ +Add support for patch rpms. Maybe not needed that much any more, +as delta rpms are more efficient and do not need so much evil +rpm patchery. +rh#103205 + +Index: lib/depends.c +=================================================================== +--- lib/depends.c.orig ++++ lib/depends.c +@@ -159,6 +159,7 @@ int rpmtsAddInstallElement(rpmts ts, Hea + const char * os; + rpmds oldChk, newChk; + rpmds obsoletes; ++ rpmds patches; + alKey pkgKey; /* addedPackages key */ + int xx; + int ec = 0; +@@ -387,6 +388,40 @@ addheader: + } + obsoletes = rpmdsFree(obsoletes); + ++ patches = rpmdsLink(rpmteDS(p, RPMTAG_PATCHESNAME), "Patches"); ++ patches = rpmdsInit(patches); ++ if (patches != NULL) ++ while (rpmdsNext(patches) >= 0) { ++ const char * Name; ++ ++ if ((Name = rpmdsN(patches)) == NULL) ++ continue; /* XXX can't happen */ ++ ++ /* Ignore colored patches not in our rainbow. */ ++ dscolor = rpmdsColor(patches); ++ if (tscolor && dscolor && !(tscolor & dscolor)) ++ continue; ++ ++ mi = rpmtsInitIterator(ts, RPMTAG_NAME, Name, 0); ++ ++ xx = rpmdbPruneIterator(mi, ++ ts->removedPackages, ts->numRemovedPackages, 1); ++ ++ while((oh = rpmdbNextIterator(mi)) != NULL) { ++ /* Ignore colored packages not in our rainbow. */ ++ ohcolor = hGetColor(oh); ++ if (tscolor && hcolor && ohcolor && !(hcolor & ohcolor)) ++ /*@innercontinue@*/ continue; ++ if (rpmdsEVR(patches) == NULL ++ || rpmdsNVRMatchesDep(oh, patches, _rpmds_nopromote)) { ++ if (rpmVersionCompare(h, oh)) ++ xx = removePackage(ts, oh, rpmdbGetIteratorOffset(mi), pkgKey); ++ } ++ } ++ mi = rpmdbFreeIterator(mi); ++ } ++ patches = rpmdsFree(patches); ++ + ec = 0; + + exit: +@@ -644,6 +679,57 @@ exit: + return rc; + } + ++static int checkPatchDeps(rpmts ts, rpmte p, int reportprobs) ++{ ++ const char * Name; ++ Header h; ++ rpmds patches; ++ rpmds this; ++ rpmdbMatchIterator mi; ++ ++ patches = rpmdsInit(rpmteDS(p, RPMTAG_PATCHESNAME)); ++ if (!patches) ++ return 0; ++ this = rpmteDS(p, RPMTAG_NAME); ++ ++ mi = rpmtsInitIterator(ts, RPMTAG_NAME, rpmdsN(this), 0); ++ while ((h = rpmdbNextIterator(mi)) != NULL) { ++ if (rpmdsNVRMatchesDep(h, this, _rpmds_nopromote)) { ++ rpmdsNotify(this, _("(patch refresh)"), 0); ++ p->hPatched = headerLink(h); ++ p->isPatchRefresh = 1; ++ mi = rpmdbFreeIterator(mi); ++ return 0; ++ } ++ } ++ mi = rpmdbFreeIterator(mi); ++ ++ while (rpmdsNext(patches) >= 0) { ++ if ((Name = rpmdsN(patches)) == NULL) ++ return 1; /* XXX can't happen */ ++ mi = rpmtsInitIterator(ts, RPMTAG_NAME, Name, 0); ++ while ((h = rpmdbNextIterator(mi)) != NULL) { ++ if (rpmdsNVRMatchesDep(h, patches, _rpmds_nopromote)) { ++ rpmdsNotify(patches, _("(db package)"), 0); ++ p->hPatched = headerLink(h); ++ p->isPatchRefresh = 0; ++ mi = rpmdbFreeIterator(mi); ++ return 0; ++ } ++ } ++ mi = rpmdbFreeIterator(mi); ++ } ++ ++ rpmdsNotify(patches, NULL, 1); ++ if (reportprobs) { ++ patches = rpmdsInit(patches); ++ rpmdsNext(patches); ++ rpmdsProblem(ts->probs, rpmteNEVR(p), patches, NULL, 1); ++ } ++ return 0; ++} ++ ++ + /** + * Check added requires/conflicts against against installed+added packages. + * @param ts transaction set +@@ -1727,6 +1813,7 @@ int rpmtsCheck(rpmts ts) + rpmteDS(p, RPMTAG_CONFLICTNAME), + NULL, + tscolor, 1); ++ rc |= checkPatchDeps(ts, p, 1); + if (rc) + goto exit; + +@@ -1824,3 +1911,22 @@ exit: + /*@=branchstate@*/ + return rc; + } ++ ++void rpmtsPatchCheck(rpmts ts) ++{ ++ int closeatexit = 0; ++ rpmtsi pi = NULL; rpmte p; ++ ++ if (rpmtsGetRdb(ts) == NULL && ts->dbmode != -1) { ++ if ((rpmtsOpenDB(ts, ts->dbmode)) != 0) ++ return; ++ closeatexit = 1; ++ } ++ pi = rpmtsiInit(ts); ++ while ((p = rpmtsiNext(pi, TR_ADDED)) != NULL) ++ if (p->key) /* key is filename for install, zero for verify */ ++ (void)checkPatchDeps(ts, p, 0); ++ pi = rpmtsiFree(pi); ++ if (closeatexit) ++ (void)rpmtsCloseDB(ts); ++} +Index: lib/formats.c +=================================================================== +--- lib/formats.c.orig ++++ lib/formats.c +@@ -232,6 +232,8 @@ static /*@only@*/ char * fflagsFormat(in + strcat(buf, "l"); + if (anint & RPMFILE_README) + strcat(buf, "r"); ++ if (anint & RPMFILE_UNPATCHED) ++ strcat(buf, "u"); + /*@=boundswrite@*/ + + val = xmalloc(5 + padding); +Index: lib/fsm.c +=================================================================== +--- lib/fsm.c.orig ++++ lib/fsm.c +@@ -707,7 +707,7 @@ assert(rpmteType(fi->te) == TR_ADDED); + break; + + case FA_BACKUP: +- if (!(fsm->fflags & RPMFILE_GHOST)) /* XXX Don't if %ghost file. */ ++ if (!(fsm->fflags & (RPMFILE_GHOST|RPMFILE_UNPATCHED))) /* XXX Don't if %ghost file. */ + switch (rpmteType(fi->te)) { + case TR_ADDED: + fsm->osuffix = SUFFIX_RPMORIG; +@@ -720,13 +720,13 @@ assert(rpmteType(fi->te) == TR_ADDED); + + case FA_ALTNAME: + assert(rpmteType(fi->te) == TR_ADDED); +- if (!(fsm->fflags & RPMFILE_GHOST)) /* XXX Don't if %ghost file. */ ++ if (!(fsm->fflags & (RPMFILE_GHOST|RPMFILE_UNPATCHED))) /* XXX Don't if %ghost file. */ + fsm->nsuffix = SUFFIX_RPMNEW; + break; + + case FA_SAVE: + assert(rpmteType(fi->te) == TR_ADDED); +- if (!(fsm->fflags & RPMFILE_GHOST)) /* XXX Don't if %ghost file. */ ++ if (!(fsm->fflags & (RPMFILE_GHOST|RPMFILE_UNPATCHED))) /* XXX Don't if %ghost file. */ + fsm->osuffix = SUFFIX_RPMSAVE; + break; + case FA_ERASE: +@@ -1740,7 +1740,7 @@ int fsmStage(FSM_t fsm, fileStage stage) + } + + if (fsm->goal == FSM_PKGBUILD) { +- if (fsm->fflags & RPMFILE_GHOST) /* XXX Don't if %ghost file. */ ++ if (fsm->fflags & (RPMFILE_GHOST|RPMFILE_UNPATCHED)) /* XXX Don't if %ghost file. */ + break; + if (!S_ISDIR(st->st_mode) && st->st_nlink > 1) { + struct hardLink_s * li, * prev; +Index: lib/poptQV.c +=================================================================== +--- lib/poptQV.c.orig ++++ lib/poptQV.c +@@ -171,6 +171,7 @@ static void queryArgCallback(poptContext + case 'l': qva->qva_flags |= QUERY_FOR_LIST; break; + case 's': qva->qva_flags |= QUERY_FOR_STATE | QUERY_FOR_LIST; + break; ++ case 'P': qva->qva_flags |= QUERY_FOR_PATCHES; break; + case POPT_DUMP: qva->qva_flags |= QUERY_FOR_DUMPFILES | QUERY_FOR_LIST; + break; + +@@ -278,6 +279,8 @@ struct poptOption rpmQueryPoptTable[] = + N_("skip %%readme files"), NULL }, + #endif + ++ { "patches", 'P', 0, 0, 'P', ++ N_("list patches or patched files "), NULL }, + { "qf", '\0', POPT_ARG_STRING | POPT_ARGFLAG_DOC_HIDDEN, 0, + POPT_QUERYFORMAT, NULL, NULL }, + { "queryformat", '\0', POPT_ARG_STRING, 0, POPT_QUERYFORMAT, +Index: lib/query.c +=================================================================== +--- lib/query.c.orig ++++ lib/query.c +@@ -225,6 +225,10 @@ int showQueryPackage(QVA_t qva, rpmts ts + if ((qva->qva_fflags & RPMFILE_GHOST) && (fflags & RPMFILE_GHOST)) + continue; + ++ /* If querying patches, skip unpatched files. */ ++ if ((qva->qva_flags & QUERY_FOR_PATCHES) && (fflags & RPMFILE_UNPATCHED)) ++ continue; ++ + /*@-boundswrite@*/ + if (!rpmIsVerbose() && prefix) + te = stpcpy(te, prefix); +@@ -362,6 +366,21 @@ void rpmDisplayQueryTags(FILE * fp) + } + } + ++static int isPatch(Header h) ++{ ++ int i, requiresCount = 0; ++ const char ** requires; ++ ++ if (!headerGetEntry(h, RPMTAG_REQUIRENAME, NULL, (void **) &requires, &requiresCount)) ++ return 0; ++ for (i = 0; i < requiresCount; i++) ++ if (!strcmp("rpmlib(PatchRPMs)", requires[i])) ++ break; ++ if (requiresCount) ++ free(requires); ++ return i < requiresCount; ++} ++ + static int rpmgiShowMatches(QVA_t qva, rpmts ts) + /*@globals rpmGlobalMacroContext, h_errno, internalState @*/ + /*@modifies qva, rpmGlobalMacroContext, h_errno, internalState @*/ +@@ -376,6 +395,8 @@ static int rpmgiShowMatches(QVA_t qva, r + h = rpmgiHeader(gi); + if (h == NULL) /* XXX perhaps stricter break instead? */ + continue; ++ if ((qva->qva_flags & QUERY_FOR_PATCHES) != 0 && !isPatch(h)) ++ continue; + if ((rc = qva->qva_showPackage(qva, ts, h)) != 0) + ec = rc; + if (qva->qva_source == RPMQV_DBOFFSET) +@@ -391,6 +412,8 @@ int rpmcliShowMatches(QVA_t qva, rpmts t + + while ((h = rpmdbNextIterator(qva->qva_mi)) != NULL) { + int rc; ++ if ((qva->qva_flags & QUERY_FOR_PATCHES) != 0 && !isPatch(h)) ++ continue; + if ((rc = qva->qva_showPackage(qva, ts, h)) != 0) + ec = rc; + if (qva->qva_source == RPMQV_DBOFFSET) +@@ -685,7 +708,15 @@ int rpmcliArgIter(rpmts ts, QVA_t qva, A + + switch (qva->qva_source) { + case RPMQV_ALL: +- qva->qva_gi = rpmgiNew(ts, RPMDBI_PACKAGES, NULL, 0); ++ if ((!argv || !*argv) && (qva->qva_flags & QUERY_FOR_PATCHES) != 0) { ++ qva->qva_gi = rpmgiNew(ts, RPMTAG_REQUIRENAME, "rpmlib(PatchRPMs)", 0); ++ if (qva->qva_gi->mi == NULL) { ++ rpmError(RPMERR_QUERYINFO, _("no patch-rpm installed\n")); ++ break; ++ } ++ } else { ++ qva->qva_gi = rpmgiNew(ts, RPMDBI_PACKAGES, NULL, 0); ++ } + qva->qva_rc = rpmgiSetArgs(qva->qva_gi, argv, ftsOpts, RPMGI_NONE); + + if (qva->qva_gi != NULL && (qva->qva_gi->flags & RPMGI_TSADD)) /* Load the ts with headers. */ +Index: lib/rpmcli.h +=================================================================== +--- lib/rpmcli.h.orig ++++ lib/rpmcli.h +@@ -165,7 +165,7 @@ typedef enum rpmQueryFlags_e { + QUERY_SCRIPT = (1 << 18), /*!< verify: from --noscripts */ + QUERY_DIGEST = (1 << 19), /*!< verify: from --nodigest */ + QUERY_SIGNATURE = (1 << 20), /*!< verify: from --nosignature */ +- QUERY_PATCHES = (1 << 21), /*!< verify: from --nopatches */ ++ QUERY_FOR_PATCHES = (1 << 21), /*!< verify: from --patches */ + QUERY_HDRCHK = (1 << 22), /*!< verify: from --nohdrchk */ + /*@=enummemuse@*/ + QUERY_FOR_LIST = (1 << 23), /*!< query: from --list */ +Index: lib/rpmds.c +=================================================================== +--- lib/rpmds.c.orig ++++ lib/rpmds.c +@@ -87,6 +87,10 @@ fprintf(stderr, "*** ds %p\t%s[%d]\n", d + tagEVR = RPMTAG_TRIGGERVERSION; + tagF = RPMTAG_TRIGGERFLAGS; + } else ++ if (ds->tagN == RPMTAG_PATCHESNAME) { ++ tagEVR = RPMTAG_PATCHESVERSION; ++ tagF = RPMTAG_PATCHESFLAGS; ++ } else + return NULL; + + /*@-branchstate@*/ +@@ -325,6 +329,11 @@ rpmds rpmdsNew(Header h, rpmTag tagN, in + tagEVR = RPMTAG_ENHANCESVERSION; + tagF = RPMTAG_ENHANCESFLAGS; + } else ++ if (tagN == RPMTAG_PATCHESNAME) { ++ Type = "patches"; ++ tagEVR = RPMTAG_PATCHESVERSION; ++ tagF = RPMTAG_PATCHESFLAGS; ++ } else + goto exit; + + /*@-branchstate@*/ +@@ -1127,14 +1136,28 @@ void rpmdsProblem(rpmps ps, const char * + if (DNEVR == NULL) DNEVR = "? ?N? ?OP? ?EVR?"; + /*@=branchstate@*/ + +- rpmMessage(RPMMESS_DEBUG, _("package %s has unsatisfied %s: %s\n"), +- pkgNEVR, ds->Type, DNEVR+2); +- + switch ((unsigned)DNEVR[0]) { + case 'C': type = RPMPROB_CONFLICT; break; + default: + case 'R': type = RPMPROB_REQUIRES; break; + } ++ if (DNEVR[0] == 'p') { ++ const char *d; ++ char *dn; ++ rpmds pds = rpmdsInit(ds); ++ dn = xstrdup("p "); ++ while (rpmdsNext(pds) >= 0) { ++ d = rpmdsDNEVR(ds) + 2; ++ dn = xrealloc(dn, strlen(dn) + strlen(d) + 4); ++ if (dn[2]) ++ strcat(dn, " | "); ++ strcat(dn, d); ++ } ++ DNEVR = (const char *)dn; ++ } ++ ++ rpmMessage(RPMMESS_DEBUG, _("package %s has unsatisfied %s: %s\n"), ++ pkgNEVR, ds->Type, DNEVR+2); + + key = (suggestedKeys ? suggestedKeys[0] : NULL); + rpmpsAppend(ps, type, pkgNEVR, key, NULL, NULL, DNEVR, adding); +Index: lib/rpminstall.c +=================================================================== +--- lib/rpminstall.c.orig ++++ lib/rpminstall.c +@@ -692,6 +692,11 @@ maybe_manifest: + /*@=branchstate@*/ + } + ps = rpmpsFree(ps); ++ } else if (eiu->numRPMS) { ++ /* needed in rpmtsOrder */ ++ rpmalMakeIndex(ts->addedPackages); ++ /* need patch references */ ++ rpmtsPatchCheck(ts); + } + + if (eiu->numRPMS && !(ia->installInterfaceFlags & INSTALL_NOORDER)) { +@@ -797,7 +802,7 @@ int rpmErase(rpmts ts, struct rpmInstall + { int notifyFlags; + notifyFlags = ia->eraseInterfaceFlags | (rpmIsVerbose() ? INSTALL_LABEL : 0 ); + xx = rpmtsSetNotifyCallback(ts, +- rpmShowProgress, (void *) ((long)notifyFlags) ++ rpmShowProgress, (void *) ((long)notifyFlags)) + } + #endif + +Index: lib/rpmlibprov.c +=================================================================== +--- lib/rpmlibprov.c.orig ++++ lib/rpmlibprov.c +@@ -33,6 +33,9 @@ static struct rpmlibProvides_s rpmlibPro + { "rpmlib(PayloadIsBzip2)", "3.0.5-1", + (RPMSENSE_RPMLIB|RPMSENSE_EQUAL), + N_("package payload can be compressed using bzip2.") }, ++ { "rpmlib(PatchRPMs)", "3.0.6-1", ++ (RPMSENSE_RPMLIB|RPMSENSE_EQUAL), ++ N_("understand rpms that replace a subset of files.") }, + { "rpmlib(PayloadFilesHavePrefix)", "4.0-1", + (RPMSENSE_RPMLIB|RPMSENSE_EQUAL), + N_("package payload file(s) have \"./\" prefix.") }, +Index: lib/rpmte.c +=================================================================== +--- lib/rpmte.c.orig ++++ lib/rpmte.c +@@ -64,6 +64,7 @@ static void delTE(rpmte p) + p->NEVRA = _free(p->NEVRA); + + p->h = headerFree(p->h); ++ p->hPatched = headerFree(p->hPatched); + + /*@-boundswrite@*/ + memset(p, 0, sizeof(*p)); /* XXX trash and burn */ +@@ -183,6 +184,9 @@ static void addTE(rpmts ts, rpmte p, Hea + p->requires = rpmdsNew(h, RPMTAG_REQUIRENAME, scareMem); + p->conflicts = rpmdsNew(h, RPMTAG_CONFLICTNAME, scareMem); + p->obsoletes = rpmdsNew(h, RPMTAG_OBSOLETENAME, scareMem); ++ p->patches = rpmdsNew(h, RPMTAG_PATCHESNAME, scareMem | 2); ++ p->hPatched = NULL; ++ p->isPatchRefresh = 0; + + savep = rpmtsSetRelocateElement(ts, p); + p->fi = rpmfiNew(ts, h, RPMTAG_BASENAMES, scareMem); +@@ -520,6 +524,9 @@ rpmds rpmteDS(rpmte te, rpmTag tag) + if (tag == RPMTAG_OBSOLETENAME) + return te->obsoletes; + else ++ if (tag == RPMTAG_PATCHESNAME) ++ return te->patches; ++ else + return NULL; + /*@=compdef =refcounttrans =retalias =retexpose =usereleased @*/ + } +Index: lib/rpmte.h +=================================================================== +--- lib/rpmte.h.orig ++++ lib/rpmte.h +@@ -115,6 +115,9 @@ struct rpmte_s { + int autorelocatex; /*!< (TR_ADDED) Auto relocation entry index. */ + /*@refcounted@*/ /*@null@*/ + FD_t fd; /*!< (TR_ADDED) Payload file descriptor. */ ++ rpmds patches; /*!< Patches: dependencies. */ ++ Header hPatched; /*!< (TR_ADDED) Header of package we patch */ ++ int isPatchRefresh; /*!< (TR_ADDED) is a patch refresh */ + + /*@-fielduse@*/ /* LCL: confused by union? */ + union { +Index: lib/transaction.c +=================================================================== +--- lib/transaction.c.orig ++++ lib/transaction.c +@@ -198,6 +198,11 @@ static int handleInstInstalledFiles(cons + int rConflicts; + + rConflicts = reportConflicts; ++ if (rConflicts && p->hPatched && p->isPatchRefresh) { ++ /* If same package (patch refresh) turn off conflicts */ ++ /* Handling of unpatched files not worth the trouble */ ++ rConflicts = 0; ++ } + /* Resolve file conflicts to prefer Elf64 (if not forced). */ + if (tscolor != 0 && FColor != 0 && FColor != oFColor) + { +@@ -972,6 +977,176 @@ rpmfi rpmtsiFi(const rpmtsi tsi) + /*@=compdef =refcounttrans =usereleased @*/ + } + ++static int_32 *dupint32(int_32 *old, int cnt) ++{ ++ int i; ++ int_32 *new = xmalloc(cnt * sizeof(int_32)); ++ for (i = 0; i < cnt; i++) ++ new[i] = old[i]; ++ return new; ++} ++ ++static void patchUnpatchedFiles(Header oldh, Header h, int isRefresh) ++{ ++ int fileCount, oldfileCount, i, j, oldidx, oldidxj; ++ const char ** baseNames, ** dirNames; ++ int_32 * dirIndexes; ++ int_32 * fileMtimes; ++ int_32 * fileSizes; ++ int_32 * fileFlags; ++ char ** fileMd5s; ++ const char ** oldbaseNames, ** olddirNames; ++ int_32 * olddirIndexes; ++ int_32 * oldfileMtimes; ++ int_32 * oldfileSizes; ++ int_32 * oldfileFlags; ++ char ** oldfileMd5s; ++ const char * name, * version, * release; ++ char * evr; ++ int_32 sense; ++ int_32 *epochp; ++ int save = 0; ++ char epoch[20]; ++ const char ** oldpatches, **oldpatchesEVR = NULL; ++ int_32 * oldpatchesFlags; ++ int oldpatchesCount; ++ ++ if (!oldh) { ++ headerRemoveEntry(h, RPMTAG_PATCHESNAME); ++ headerRemoveEntry(h, RPMTAG_PATCHESFLAGS); ++ headerRemoveEntry(h, RPMTAG_PATCHESVERSION); ++#if 1 ++ name = "(none)"; ++ sense = 0; ++ evr = ""; ++ headerAddEntry(h, RPMTAG_PATCHESNAME, RPM_STRING_ARRAY_TYPE, &name, 1); ++ headerAddEntry(h, RPMTAG_PATCHESFLAGS, RPM_INT32_TYPE, &sense, 1); ++ headerAddEntry(h, RPMTAG_PATCHESVERSION, RPM_STRING_ARRAY_TYPE, &evr, 1); ++#endif ++ return; ++ } ++ if (!headerGetEntry(h, RPMTAG_BASENAMES, NULL, ++ (void **) &baseNames, &fileCount)) ++ return; ++ headerGetEntry(h, RPMTAG_DIRNAMES, NULL, ++ (void **) &dirNames, NULL); ++ headerGetEntry(h, RPMTAG_DIRINDEXES, NULL, ++ (void **) &dirIndexes, NULL); ++ headerGetEntry(h, RPMTAG_FILESIZES, NULL, ++ (void **) &fileSizes, NULL); ++ headerGetEntry(h, RPMTAG_FILEMD5S, NULL, ++ (void **) &fileMd5s, NULL); ++ headerGetEntry(h, RPMTAG_FILEMTIMES, NULL, ++ (void **) &fileMtimes, NULL); ++ headerGetEntry(h, RPMTAG_FILEFLAGS, NULL, ++ (void **) &fileFlags, NULL); ++ ++ if (!headerGetEntry(oldh, RPMTAG_BASENAMES, NULL, ++ (void **) &oldbaseNames, &oldfileCount)) ++ return; ++ headerGetEntry(oldh, RPMTAG_DIRNAMES, NULL, ++ (void **) &olddirNames, NULL); ++ headerGetEntry(oldh, RPMTAG_DIRINDEXES, NULL, ++ (void **) &olddirIndexes, NULL); ++ headerGetEntry(oldh, RPMTAG_FILESIZES, NULL, ++ (void **) &oldfileSizes, NULL); ++ headerGetEntry(oldh, RPMTAG_FILEMD5S, NULL, ++ (void **) &oldfileMd5s, NULL); ++ headerGetEntry(oldh, RPMTAG_FILEMTIMES, NULL, ++ (void **) &oldfileMtimes, NULL); ++ headerGetEntry(oldh, RPMTAG_FILEFLAGS, NULL, ++ (void **) &oldfileFlags, NULL); ++ ++ oldidx = -1; ++ oldidxj = 0; ++ for (i = 0; i < fileCount; i++) { ++ if (!(fileFlags[i] & RPMFILE_UNPATCHED)) ++ continue; ++ if (dirIndexes[i] != oldidx) { ++ for (j = 0; j < oldfileCount; j++) ++ if (strcmp(dirNames[dirIndexes[i]], olddirNames[olddirIndexes[j]]) == 0) ++ break; ++ if (j == oldfileCount) { ++ while (i + 1 < fileCount && dirIndexes[i] == dirIndexes[i + 1]) ++ i++; ++ continue; ++ } ++ oldidx = olddirIndexes[j]; ++ oldidxj = j; ++ } ++ for (j = oldidxj; j < oldfileCount; j++) ++ if (olddirIndexes[j] == oldidx && !strcmp(baseNames[i], oldbaseNames[j])) { ++ if (!save) { ++ /* duplicate fileSizes, fileMtimes, fileFlags ++ * so we can modify them */ ++ fileSizes = dupint32(fileSizes, fileCount); ++ fileMtimes = dupint32(fileMtimes, fileCount); ++ fileFlags = dupint32(fileFlags, fileCount); ++ } ++ fileSizes[i] = oldfileSizes[j]; ++ fileMtimes[i] = oldfileMtimes[j]; ++ fileMd5s[i] = oldfileMd5s[j]; ++ fileFlags[i] = oldfileFlags[j] | RPMFILE_UNPATCHED; ++ save = 1; ++ break; ++ } ++ } ++ if (save) { ++ headerModifyEntry(h, RPMTAG_FILESIZES, RPM_INT32_TYPE, ++ (void *) fileSizes, fileCount); ++ headerModifyEntry(h, RPMTAG_FILEMD5S, RPM_STRING_ARRAY_TYPE, ++ (void *) fileMd5s, fileCount); ++ headerModifyEntry(h, RPMTAG_FILEMTIMES, RPM_INT32_TYPE, ++ (void *) fileMtimes, fileCount); ++ headerModifyEntry(h, RPMTAG_FILEFLAGS, RPM_INT32_TYPE, ++ (void *) fileFlags, fileCount); ++ free(fileSizes); ++ free(fileMtimes); ++ free(fileFlags); ++ } ++ free(baseNames); ++ free(dirNames); ++ free(fileMd5s); ++ free(oldbaseNames); ++ free(olddirNames); ++ free(oldfileMd5s); ++ ++ if (isRefresh) { ++ /* same patch installed, this is just a refresh operation */ ++ headerRemoveEntry(h, RPMTAG_PATCHESNAME); ++ headerRemoveEntry(h, RPMTAG_PATCHESFLAGS); ++ headerRemoveEntry(h, RPMTAG_PATCHESVERSION); ++ if (headerGetEntry(oldh, RPMTAG_PATCHESNAME, NULL, (void **) &oldpatches, &oldpatchesCount) && oldpatchesCount) { ++ headerGetEntry(oldh, RPMTAG_PATCHESFLAGS, NULL, (void **) &oldpatchesFlags, &oldpatchesCount); ++ headerGetEntry(oldh, RPMTAG_PATCHESVERSION, NULL, (void **) &oldpatchesEVR, &oldpatchesCount); ++ headerAddEntry(h, RPMTAG_PATCHESNAME, RPM_STRING_ARRAY_TYPE, oldpatches, oldpatchesCount); ++ headerAddEntry(h, RPMTAG_PATCHESFLAGS, RPM_INT32_TYPE, oldpatchesFlags, oldpatchesCount); ++ headerAddEntry(h, RPMTAG_PATCHESVERSION, RPM_STRING_ARRAY_TYPE, oldpatchesEVR, oldpatchesCount); ++ free(oldpatches); ++ free(oldpatchesEVR); ++ } ++ return; ++ } ++ headerNVR(oldh, &name, &version, &release); ++ *epoch = 0; ++ if (headerGetEntry(h, RPMTAG_EPOCH, NULL, (void **) &epochp, NULL)) ++ sprintf(epoch, "%d:", *epochp); ++ evr = xmalloc(strlen(epoch) + strlen(version) + strlen(release) + 2); ++ strcpy(evr, epoch); ++ strcat(evr, version); ++ strcat(evr, "-"); ++ strcat(evr, release); ++ sense = RPMSENSE_EQUAL; ++ headerRemoveEntry(h, RPMTAG_PATCHESNAME); ++ headerRemoveEntry(h, RPMTAG_PATCHESFLAGS); ++ headerRemoveEntry(h, RPMTAG_PATCHESVERSION); ++ headerAddEntry(h, RPMTAG_PATCHESNAME, RPM_STRING_ARRAY_TYPE, &name, 1); ++ headerAddEntry(h, RPMTAG_PATCHESFLAGS, RPM_INT32_TYPE, &sense, 1); ++ headerAddEntry(h, RPMTAG_PATCHESVERSION, RPM_STRING_ARRAY_TYPE, &evr, 1); ++ free(evr); ++} ++ ++ + /** + * This is not a generalized function to be called from outside + * librpm. It is called internally by rpmtsRun() to rollback +@@ -2137,6 +2312,8 @@ assert(psm != NULL); + } + psm->fi = rpmfiLink(p->fi, NULL); + ++ if (p->hPatched || rpmteDS(p, RPMTAG_PATCHESNAME)) ++ patchUnpatchedFiles(p->hPatched, p->fi->h, p->isPatchRefresh); + /*@-nullstate@*/ /* FIX: psm->fi may be NULL */ + if (rpmpsmStage(psm, PSM_PKGINSTALL)) { + ourrc++; +Index: doc/rpm.8 +=================================================================== +--- doc/rpm.8.orig ++++ doc/rpm.8 +@@ -68,7 +68,8 @@ rpm \- RPM Package Manager + + + [\fB\fIPACKAGE_NAME\fB\fR] [\fB-a,--all\fR] [\fB-f,--file \fIFILE\fB\fR] +- [\fB-g,--group \fIGROUP\fB\fR] {\fB-p,--package \fIPACKAGE_FILE\fB\fR] ++ [\fB-g,--group \fIGROUP\fB\fR] [\fB-p,--package \fIPACKAGE_FILE\fB\fR] ++ [\fB-P,--patches\fR] + [\fB--fileid \fIMD5\fB\fR] [\fB--hdrid \fISHA1\fB\fR] [\fB--pkgid \fIMD5\fB\fR] [\fB--tid \fITID\fB\fR] + [\fB--querybynumber \fIHDRNUM\fB\fR] [\fB--triggeredby \fIPACKAGE_NAME\fB\fR] + [\fB--whatprovides \fICAPABILITY\fB\fR] [\fB--whatrequires \fICAPABILITY\fB\fR] +@@ -77,7 +78,8 @@ rpm \- RPM Package Manager + .PP + + +- [\fB--changelog\fR] [\fB-c,--configfiles\fR] [\fB-d,--docfiles\fR] [\fB--dump\fR] ++ [\fB--basedon\fR] [\fB--changelog\fR] [\fB-c,--configfiles\fR] ++ [\fB-d,--docfiles\fR] [\fB--dump\fR] + [\fB--filesbypkg\fR] [\fB-i,--info\fR] [\fB--last\fR] [\fB-l,--list\fR] + [\fB--provides\fR] [\fB--qf,--queryformat \fIQUERYFMT\fB\fR] + [\fB-R,--requires\fR] [\fB--scripts\fR] [\fB-s,--state\fR] +@@ -547,6 +549,10 @@ that will be expanded to paths that are + the package manifest as additional \fIPACKAGE_FILE\fR + arguments to the query. + .TP ++\fB-P, --patches\fP ++Limit the selected packages to patch-rpms. As a side effect, limit ++the file list to patched files. ++.TP + \fB--pkgid \fIMD5\fB\fR + Query package that contains a given package identifier, i.e. the + \fIMD5\fR digest of the combined header and +@@ -581,6 +587,10 @@ Query all packages that requires \fICAPA + .SS "PACKAGE QUERY OPTIONS:" + .PP + .TP ++\fB--basedon\fR ++Show what packages a patch-rpm is based on. A patch-rpm can only be ++installed if one of the packages it is based on is installed. ++.TP + \fB--changelog\fR + Display change information for the package. + .TP +@@ -618,7 +628,8 @@ Orders the package listing by install ti + packages are at the top. + .TP + \fB-l, --list\fR +-List files in package. ++List files in package. If the \fB\-P\fP option is also given, only ++patched files are shown. + .TP + \fB--provides\fR + List capabilities this package provides. +Index: rpmpopt.in +=================================================================== +--- rpmpopt.in.orig ++++ rpmpopt.in +@@ -76,6 +76,10 @@ rpm alias --supplements --qf \ + "[%|ENHANCESFLAGS:depflag_strong?{%{ENHANCESNAME} %{ENHANCESFLAGS:depflags} %{ENHANCESVERSION}\n}|]" \ + --POPTdesc=$"list capabilities this package supplements" + ++rpm alias --basedon --qf \ ++ "[%{PATCHESNAME} %{PATCHESFLAGS:depflags} %{PATCHESVERSION}\n]" \ ++ --POPTdesc=$"list packages this patch-rpm is based on" ++ + rpm alias --info --qf 'Name : %-27{NAME} Relocations: %|PREFIXES?{[%{PREFIXES} ]}:{(not relocatable)}|\n\ + Version : %-27{VERSION} Vendor: %{VENDOR}\n\ + Release : %-27{RELEASE} Build Date: %{BUILDTIME:date}\n\ +@@ -373,6 +377,10 @@ rpmq alias --supplements --qf \ + "[%|ENHANCESFLAGS:depflag_strong?{%{ENHANCESNAME} %{ENHANCESFLAGS:depflags} %{ENHANCESVERSION}\n}|]" \ + --POPTdesc=$"list capabilities this package supplements" + ++rpmq alias --basedon --qf \ ++ "[%{PATCHESNAME} %{PATCHESFLAGS:depflags} %{PATCHESVERSION}\n]" \ ++ --POPTdesc=$"list packages this patch-rpm is based on" ++ + rpmq alias --info --qf 'Name : %-27{NAME} Relocations: %|PREFIXES?{[%{PREFIXES} ]}:{(not relocatable)}|\n\ + Version : %-27{VERSION} Vendor: %{VENDOR}\n\ + Release : %-27{RELEASE} Build Date: %{BUILDTIME:date}\n\ +@@ -488,6 +496,10 @@ rpmquery alias --supplements --qf \ + "[%|ENHANCESFLAGS:depflag_strong?{%{ENHANCESNAME} %{ENHANCESFLAGS:depflags} %{ENHANCESVERSION}\n}|]" \ + --POPTdesc=$"list capabilities this package supplements" + ++rpmquery alias --basedon --qf \ ++ "[%{PATCHESNAME} %{PATCHESFLAGS:depflags} %{PATCHESVERSION}\n]" \ ++ --POPTdesc=$"list packages this patch-rpm is based on" ++ + rpmquery alias --info --qf 'Name : %-27{NAME} Relocations: %|PREFIXES?{[%{PREFIXES} ]}:{(not relocatable)}|\n\ + Version : %-27{VERSION} Vendor: %{VENDOR}\n\ + Release : %-27{RELEASE} Build Date: %{BUILDTIME:date}\n\ diff --git a/payloadformat.diff b/payloadformat.diff new file mode 100644 index 0000000..821978c --- /dev/null +++ b/payloadformat.diff @@ -0,0 +1,40 @@ +Check if the payloadformat really is "cpio", fail with an error +message if it is not. Use a different message for the "drpm" +delta-rpm format. rh#140052 + +Upstream proposes a different approach, patching the "Requires" +list, which the current deltarpm implementation can't do, because +it uses a verbatim copy of the original header. Sigh. + +I still believe that rpm should check for known formats, i.e. +now that rpm understands ustar it should insist that the format +is either "cpio" or "ustar". + +--- ./lib/rpminstall.c.orig 2005-12-14 21:01:09.000000000 +0000 ++++ ./lib/rpminstall.c 2005-12-15 14:47:35.000000000 +0000 +@@ -470,6 +470,7 @@ if (fileURL[0] == '=') { + eiu->fnp++, eiu->prevx++) + { + const char * fileName; ++ const char * payloadformat; + + rpmMessage(RPMMESS_DEBUG, "============== %s\n", *eiu->fnp); + (void) urlPath(*eiu->fnp, &fileName); +@@ -510,6 +511,17 @@ if (fileURL[0] == '=') { + /*@switchbreak@*/ break; + } + ++ payloadformat = 0; ++ if (!headerGetEntry(eiu->h, RPMTAG_PAYLOADFORMAT, NULL, (void **)&payloadformat, NULL)) ++ payloadformat = 0; ++ if (payloadformat && strcmp(payloadformat, "cpio") != 0) { ++ if (!strcmp(payloadformat, "drpm")) ++ rpmMessage(RPMMESS_ERROR, _("%s is a deltarpm, create a real rpm from it first!\n"), *eiu->fnp); ++ else ++ rpmMessage(RPMMESS_ERROR, _("%s contains no cpio payload\n"), *eiu->fnp); ++ eiu->numFailed++; *eiu->fnp = NULL; ++ continue; ++ } + eiu->isSource = headerIsEntry(eiu->h, RPMTAG_SOURCEPACKAGE); + + if (eiu->isSource) { diff --git a/perlprov.diff b/perlprov.diff deleted file mode 100644 index 323c180..0000000 --- a/perlprov.diff +++ /dev/null @@ -1,13 +0,0 @@ -Support a "first version wins" semantics. - ---- ./scripts/perl.prov.orig 2010-12-03 12:11:57.000000000 +0000 -+++ ./scripts/perl.prov 2011-05-11 15:32:39.000000000 +0000 -@@ -170,7 +170,7 @@ sub process_file { - - $version = $1; - } -- $require{$package} = $version; -+ $require{$package} ||= $version; - } - - # Allow someone to have a variable that defines virtual packages diff --git a/pgpdecodeearly.diff b/pgpdecodeearly.diff new file mode 100644 index 0000000..60adc1b --- /dev/null +++ b/pgpdecodeearly.diff @@ -0,0 +1,18 @@ +Also decode early for PGP sigtags, which are actually header+payload +RSA signatures. Without this patch, verification of a package +that has just a header+payload RSA signature but no header-only RSA +signature fails. + +Already in rpm-4.4.7. + +--- ./lib/rpmchecksig.c.orig 2005-12-14 20:54:39.000000000 +0000 ++++ ./lib/rpmchecksig.c 2006-03-21 18:00:22.000000000 +0000 +@@ -801,7 +805,7 @@ int rpmVerifySignatures(QVA_t qva, rpmts + sigp = rpmtsSignature(ts); + + /* XXX RSA needs the hash_algo, so decode early. */ +- if (sigtag == RPMSIGTAG_RSA) { ++ if (sigtag == RPMSIGTAG_RSA || sigtag == RPMSIGTAG_PGP) { + xx = headerGetEntry(sigh, sigtag, &sigtype, &sig, &siglen); + xx = pgpPrtPkts(sig, siglen, dig, 0); + sig = headerFreeData(sig, sigtype); diff --git a/platformin.diff b/platformin.diff index 77e7828..43c96e1 100644 --- a/platformin.diff +++ b/platformin.diff @@ -1,26 +1,31 @@ -SUSE specific platform changes. +SUSE specific platform changes. The libexecdir definition is probably +wrong, LSB seems to demand "%{_exec_prefix}/lib". ---- ./platform.in.orig 2010-12-03 12:11:57.000000000 +0000 -+++ ./platform.in 2011-05-11 15:02:03.000000000 +0000 -@@ -21,7 +21,7 @@ +--- ./platform.in.orig 2005-01-26 03:39:54.000000000 +0000 ++++ ./platform.in 2006-02-17 14:18:30.000000000 +0000 +@@ -17,18 +17,18 @@ %_exec_prefix @exec_prefix@ %_bindir @bindir@ %_sbindir @sbindir@ -%_libexecdir @libexecdir@ -+%_libexecdir %{_exec_prefix}/lib - %_datarootdir @datarootdir@ ++%_libexecdir %{_libdir} %_datadir @datadir@ %_sysconfdir @sysconfdir@ -@@ -33,7 +33,7 @@ + %_sharedstatedir @sharedstatedir@ + %_localstatedir @localstatedir@ + %_lib @LIB@ +-%_libdir @LIBDIR@ ++%_libdir %{_exec_prefix}/%{_lib} + %_includedir @includedir@ %_oldincludedir @oldincludedir@ %_infodir @infodir@ %_mandir @mandir@ --%_initddir %{_sysconfdir}/rc.d/init.d -+%_initddir %{_sysconfdir}/init.d - # Deprecated misspelling, present for backwards compatibility. - %_initrddir %{_initddir} +-%_initrddir %{_sysconfdir}/rc.d/init.d ++%_initrddir %{_sysconfdir}/init.d -@@ -143,3 +143,21 @@ + %_defaultdocdir @DEFAULTDOCDIR@ + +@@ -148,3 +148,21 @@ @mandrake@%_gamesdir games @mandrake@%_gamesbindir %{_prefix}/%{_gamesdir} @mandrake@%_gamesdatadir %{_datadir}/%{_gamesdir} @@ -31,7 +36,7 @@ SUSE specific platform changes. +@SuSE@%__chown_Rhf @__CHOWN_RHF@ +@SuSE@%__chgrp_Rhf @__CHGRP_RHF@ +@SuSE@%_fixowner [ `%{__id_u}` = '0' ] && %{__chown_Rhf} root -+@SuSE@%_fixgroup [ `%{__id_u}` = '0' ] && %{__chgrp_Rhf} root ++@SuSE@%_fixgroup [ `%{__id_u}` = '0' ] && %{__chgrp_Rhf} @ROOT_GROUP@ +@SuSE@%_fixperms %{__chmod} -Rf @FIXPERMS@ +@SuSE@ +@SuSE@#--------------------------------------------------------------------- diff --git a/prereqorder.diff b/prereqorder.diff new file mode 100644 index 0000000..1e73d91 --- /dev/null +++ b/prereqorder.diff @@ -0,0 +1,21 @@ +Backported fix. Seems to do no harm. + +--- ./lib/depends.c.orig 2005-12-14 19:51:34.000000000 +0000 ++++ ./lib/depends.c 2006-01-27 21:05:13.000000000 +0000 +@@ -1294,14 +1403,12 @@ int rpmtsOrder(rpmts ts) + switch (rpmteType(p)) { + case TR_REMOVED: + /* Skip if not %preun/%postun requires or legacy prereq. */ +- if (isInstallPreReq(Flags) +- || !( isErasePreReq(Flags) || isLegacyPreReq(Flags) ) ) ++ if (!( isErasePreReq(Flags) || isLegacyPreReq(Flags) ) ) + /*@innercontinue@*/ continue; + /*@switchbreak@*/ break; + case TR_ADDED: + /* Skip if not %pre/%post requires or legacy prereq. */ +- if (isErasePreReq(Flags) +- || !( isInstallPreReq(Flags) || isLegacyPreReq(Flags) ) ) ++ if (!( isInstallPreReq(Flags) || isLegacyPreReq(Flags) ) ) + /*@innercontinue@*/ continue; + /*@switchbreak@*/ break; + } diff --git a/probfilter.diff b/probfilter.diff new file mode 100644 index 0000000..79eeba5 --- /dev/null +++ b/probfilter.diff @@ -0,0 +1,14 @@ +Revert rpm-4.4.2 probFilter change. + +--- ./lib/poptI.c.orig 2005-12-15 14:34:45.000000000 +0000 ++++ ./lib/poptI.c 2005-12-15 14:35:16.000000000 +0000 +@@ -16,8 +16,7 @@ extern time_t get_date(const char * p, v + /*@unchecked@*/ + struct rpmInstallArguments_s rpmIArgs = { + 0, /* transFlags */ +- /* probFilter */ +- (RPMPROB_FILTER_REPLACEOLDFILES | RPMPROB_FILTER_REPLACENEWFILES), ++ 0, /* probFilter */ + 0, /* installInterfaceFlags */ + 0, /* eraseInterfaceFlags */ + 0, /* qva_flags */ diff --git a/pythondeps.diff b/pythondeps.diff deleted file mode 100644 index af85219..0000000 --- a/pythondeps.diff +++ /dev/null @@ -1,48 +0,0 @@ -Index: autodeps/linux.prov -=================================================================== ---- autodeps/linux.prov.orig 2011-06-08 13:31:39.000000000 +0200 -+++ autodeps/linux.prov 2011-06-08 13:31:39.191646314 +0200 -@@ -11,7 +11,7 @@ filelist=($(printf "%s\n" "${filelist[@] - solist=($(printf "%s\n" "${filelist[@]}" | grep "\\.so" | grep -v "^/lib/ld.so" | \ - tr '\n' '\0' | xargs -0 -r file -L | grep "ELF.*shared object" | \ - cut -d: -f1)) --pythonlist= -+pythonlist=($(printf "%s\n" "${filelist[@]}" | egrep '/usr/bin/python.\..$')) - tcllist= - monolist=($(printf "%s\n" "${filelist[@]}" | egrep "\\.(exe|dll)\$")) - firmwarelist=($(printf "%s\n" "${filelist[@]}" | grep "/lib/firmware/")) -@@ -54,8 +54,8 @@ done | sort -u - - # - # --- Python modules. --[ -x /usr/lib/rpm/python.prov -a -n "$pythonlist" ] && -- printf "%s\n" "${pythonlist[@]}" | /usr/lib/rpm/python.prov | sort -u -+[ -x /usr/lib/rpm/pythondeps.sh -a -n "$pythonlist" ] && -+ printf "%s\n" "${pythonlist[@]}" | /usr/lib/rpm/pythondeps.sh -P | sort -u - - # - # --- Tcl modules. -Index: autodeps/linux.req -=================================================================== ---- autodeps/linux.req.orig 2011-06-08 13:31:38.000000000 +0200 -+++ autodeps/linux.req 2011-06-08 13:31:39.191646314 +0200 -@@ -31,7 +31,7 @@ liblist=($(printf "%s\0" "${filelist[@]} - - interplist=() - perllist=() --pythonlist=() -+pythonlist=($(printf "%s\n" "${filelist[@]}" | egrep '/usr/lib[^/]*/python.\..')) - tcllist=() - monolist=($(printf "%s\n" "${filelist[@]}" | egrep "\\.(exe|dll)(\\.config)?\$")) - -@@ -127,8 +127,8 @@ done | sort -u - - # - # --- Python modules. --[ -x /usr/lib/rpm/python.req -a -n "$pythonlist" ] && \ -- printf "%s\n" "${pythonlist[@]}" | /usr/lib/rpm/python.req | sort -u -+[ -x /usr/lib/rpm/pythondeps.sh -a -n "$pythonlist" ] && \ -+ printf "%s\n" "${pythonlist[@]}" | /usr/lib/rpm/pythondeps.sh -R | sort -u - - # - # --- Tcl modules. diff --git a/querybuffer.diff b/querybuffer.diff new file mode 100644 index 0000000..e3cb3bc --- /dev/null +++ b/querybuffer.diff @@ -0,0 +1,43 @@ +fix a buffer overflow in the query function [#218983] +rh#212833 + +--- lib/query.c.orig 2006-11-24 13:24:30.000000000 +0000 ++++ lib/query.c 2006-11-24 13:43:47.000000000 +0000 +@@ -133,8 +133,10 @@ int showQueryPackage(QVA_t qva, rpmts ts + int rc = 0; /* XXX FIXME: need real return code */ + int nonewline = 0; + int i; ++ size_t tsize; + +- te = t = xmalloc(BUFSIZ); ++ tsize = BUFSIZ * 2; ++ te = t = xmalloc(tsize); + /*@-boundswrite@*/ + *te = '\0'; + /*@=boundswrite@*/ +@@ -147,8 +149,9 @@ int showQueryPackage(QVA_t qva, rpmts ts + size_t tb = (te - t); + size_t sb = strlen(str); + +- if (sb >= (BUFSIZ - tb)) { +- t = xrealloc(t, BUFSIZ+sb); ++ if (sb > 0) { ++ tsize += sb; ++ t = xrealloc(t, tsize); + te = t + tb; + } + /*@-boundswrite@*/ +@@ -261,6 +264,13 @@ int showQueryPackage(QVA_t qva, rpmts ts + } + /*@=boundswrite@*/ + ++ if (strlen(fn) + BUFSIZ > tsize) { ++ size_t tb = (te - t); ++ tsize = strlen(fn) + BUFSIZ * 2; ++ t = xrealloc(t, tsize); ++ te = t + tb; ++ } ++ + if (qva->qva_flags & QUERY_FOR_DUMPFILES) { + sprintf(te, "%s %d %d %s 0%o ", fn, (int)fsize, fmtime, fmd5, fmode); + te += strlen(te); diff --git a/ready b/ready new file mode 100644 index 0000000..473a0f4 diff --git a/rebuilddbroot.diff b/rebuilddbroot.diff new file mode 100644 index 0000000..88e5e13 --- /dev/null +++ b/rebuilddbroot.diff @@ -0,0 +1,22 @@ +Make rebuilddb work with the --root option. [#65993] + +--- ./rpmdb/rpmdb.c.orig 2005-02-16 03:18:19.000000000 +0000 ++++ ./rpmdb/rpmdb.c 2006-02-21 20:37:44.000000000 +0000 +@@ -3771,7 +3887,7 @@ int rpmdbRebuild(const char * prefix, rp + } + dbpath = rootdbpath = rpmGetPath(prefix, tfn, NULL); + if (!(prefix[0] == '/' && prefix[1] == '\0')) +- dbpath += strlen(prefix); ++ dbpath += strlen(prefix) - 1; + tfn = _free(tfn); + + /*@-nullpass@*/ +@@ -3794,7 +3910,7 @@ int rpmdbRebuild(const char * prefix, rp + } + newdbpath = newrootdbpath = rpmGetPath(prefix, tfn, NULL); + if (!(prefix[0] == '/' && prefix[1] == '\0')) +- newdbpath += strlen(prefix); ++ newdbpath += strlen(prefix) - 1; + tfn = _free(tfn); + + rpmMessage(RPMMESS_DEBUG, _("rebuilding database %s into %s\n"), diff --git a/refreshtestarch.diff b/refreshtestarch.diff index 12642dd..161eae2 100644 --- a/refreshtestarch.diff +++ b/refreshtestarch.diff @@ -1,25 +1,24 @@ Also test architecture in "refresh" test when not colored. This allows -updates to different architectures. +updates to different architecture possible again. ---- ./lib/psm.c.orig 2010-12-21 09:50:23.000000000 +0000 -+++ ./lib/psm.c 2011-05-11 12:47:13.000000000 +0000 -@@ -723,6 +723,7 @@ static rpmRC rpmpsmStage(rpmpsm psm, pkg - - psm->scriptArg = psm->npkgs_installed + 1; +--- ./lib/psm.c.orig 2005-12-14 18:59:10.000000000 +0000 ++++ ./lib/psm.c 2006-02-24 11:46:54.000000000 +0000 +@@ -1425,15 +1441,16 @@ rpmRC rpmpsmStage(rpmpsm psm, pkgStage s + assert(psm->mi == NULL); + psm->mi = rpmtsInitIterator(ts, RPMTAG_NAME, rpmteN(psm->te), 0); + /* this must match rpmNameVersionCompare in depends.c */ - mi = rpmtsInitIterator(ts, RPMDBI_NAME, rpmteN(psm->te), 0); - xx = rpmdbSetIteratorRE(mi, RPMTAG_EPOCH, RPMMIRE_STRCMP, + xx = rpmdbSetIteratorRE(psm->mi, RPMTAG_EPOCH, RPMMIRE_STRCMP, rpmteE(psm->te)); -@@ -730,9 +731,9 @@ static rpmRC rpmpsmStage(rpmpsm psm, pkg + xx = rpmdbSetIteratorRE(psm->mi, RPMTAG_VERSION, RPMMIRE_STRCMP, rpmteV(psm->te)); - xx = rpmdbSetIteratorRE(mi, RPMTAG_RELEASE, RPMMIRE_STRCMP, + xx = rpmdbSetIteratorRE(psm->mi, RPMTAG_RELEASE, RPMMIRE_STRCMP, rpmteR(psm->te)); -+ xx = rpmdbSetIteratorRE(mi, RPMTAG_ARCH, RPMMIRE_STRCMP, -+ rpmteA(psm->te)); - if (tscolor) { -- xx = rpmdbSetIteratorRE(mi, RPMTAG_ARCH, RPMMIRE_STRCMP, -- rpmteA(psm->te)); - xx = rpmdbSetIteratorRE(mi, RPMTAG_OS, RPMMIRE_STRCMP, +- if (tscolor) { +- xx = rpmdbSetIteratorRE(psm->mi, RPMTAG_ARCH, RPMMIRE_STRCMP, ++ xx = rpmdbSetIteratorRE(psm->mi, RPMTAG_ARCH, RPMMIRE_STRCMP, + rpmteA(psm->te)); ++ if (tscolor) { + xx = rpmdbSetIteratorRE(psm->mi, RPMTAG_OS, RPMMIRE_STRCMP, rpmteO(psm->te)); } diff --git a/remove-brp-strips.diff b/remove-brp-strips.diff deleted file mode 100644 index 466a948..0000000 --- a/remove-brp-strips.diff +++ /dev/null @@ -1,16 +0,0 @@ -Subject: remove references to removed brp scripts - -Some brp-scripts are not used in openSUSE, remove references -to it - ---- ./platform.in.orig 2011-05-11 15:02:03.000000000 +0000 -+++ ./platform.in 2011-05-11 15:38:05.000000000 +0000 -@@ -55,8 +55,6 @@ - %__os_install_post \ - %{_rpmconfigdir}/brp-compress \ - %{_rpmconfigdir}/brp-strip %{__strip} \ -- %{_rpmconfigdir}/brp-strip-static-archive %{__strip} \ -- %{_rpmconfigdir}/brp-strip-comment-note %{__strip} %{__objdump} \ - %{nil} - - %__spec_install_post\ diff --git a/remove-translations.diff b/remove-translations.diff deleted file mode 100644 index b7453e2..0000000 --- a/remove-translations.diff +++ /dev/null @@ -1,20 +0,0 @@ ---- ./scripts/find-lang.sh.orig 2011-05-11 16:45:30.000000000 +0000 -+++ ./scripts/find-lang.sh 2011-05-11 16:55:14.000000000 +0000 -@@ -122,6 +122,17 @@ fi - MO_NAME_NEW=$MO_NAME.tmp.$$ - rm -f $MO_NAME_NEW - -+# remove languages we do not yet support - but give out statistics -+find $TOP_DIR/usr/share/locale/ -maxdepth 1 -type d | sed 's:'"$TOP_DIR"/usr/share/locale/'::; /^$/d' | while read dir; do -+ if ! rpm -ql filesystem | egrep -q "/usr/share/locale/$dir"$; then -+ find $TOP_DIR/usr/share/locale/$dir -name *.mo | sed 's:'"$TOP_DIR"'::' | while read file; do -+ echo -n "removing translation $file: " -+ msgunfmt "$TOP_DIR/$file" | msgfmt --statistics -o /dev/null - -+ done -+ rm -rf $TOP_DIR/usr/share/locale/$dir -+ fi -+done -+ - find $TOP_DIR -type f -o -type l|sed ' - s:'"$TOP_DIR"':: - '"$ALL_NAME$MO"'s:\(.*/locale/\)\([^/_]\+\)\(.*\.mo$\):%lang(\2) %doc \1\2\3: diff --git a/repackage-nomd5.diff b/repackage-nomd5.diff deleted file mode 100644 index 16e243e..0000000 --- a/repackage-nomd5.diff +++ /dev/null @@ -1,31 +0,0 @@ -Don't complain about a bad md5 sum for repackaged rpms. - ---- ./lib/psm.c.orig 2011-05-11 14:27:32.000000000 +0000 -+++ ./lib/psm.c 2011-05-11 16:32:11.000000000 +0000 -@@ -811,6 +811,7 @@ static rpmRC rpmpsmStage(rpmpsm psm, pkg - case PSM_PROCESS: - if (psm->goal == PKG_INSTALL) { - FD_t payload = NULL; -+ rpmtransFlags oldtsflags; - - if (rpmtsFlags(ts) & RPMTRANS_FLAG_JUSTDB) break; - -@@ -828,6 +829,9 @@ static rpmRC rpmpsmStage(rpmpsm psm, pkg - break; - } - -+ oldtsflags = rpmtsFlags(ts); -+ if (headerIsEntry(fi->h, RPMTAG_REMOVETID)) -+ (void) rpmtsSetFlags(ts, oldtsflags | RPMTRANS_FLAG_NOMD5); - rc = fsmSetup(rpmfiFSM(fi), FSM_PKGINSTALL, ts, psm->te, fi, - payload, NULL, &psm->failedFile); - (void) rpmswAdd(rpmtsOp(ts, RPMTS_OP_UNCOMPRESS), -@@ -835,6 +839,8 @@ static rpmRC rpmpsmStage(rpmpsm psm, pkg - (void) rpmswAdd(rpmtsOp(ts, RPMTS_OP_DIGEST), - fdOp(payload, FDSTAT_DIGEST)); - xx = fsmTeardown(rpmfiFSM(fi)); -+ if (headerIsEntry(fi->h, RPMTAG_REMOVETID)) -+ (void) rpmtsSetFlags(ts, oldtsflags); - - saveerrno = errno; /* XXX FIXME: Fclose with libio destroys errno */ - xx = Fclose(payload); diff --git a/requires-ge-macro.diff b/requires-ge-macro.diff deleted file mode 100644 index 51c3e50..0000000 --- a/requires-ge-macro.diff +++ /dev/null @@ -1,12 +0,0 @@ ---- ./macros.in.orig 2011-05-11 15:36:05.000000000 +0000 -+++ ./macros.in 2011-05-11 15:38:44.000000000 +0000 -@@ -1027,7 +1027,8 @@ done \ - # %{perl_sitearch}/Image - # %dir %{perl_sitearch}/auto/Image - # --%requires_eq() %(LC_ALL="C" echo '%*' | xargs -r rpm -q --qf 'Requires: %%{name} = %%{epoch}:%%{version}\\n' | sed -e 's/ (none):/ /' -e 's/ 0:/ /' | grep -v "is not") -+%requires_eq() %(echo '%*' | LC_ALL=C xargs -r rpm -q --qf 'Requires: %%{name} = %%{epoch}:%%{version}\\n' | sed -e 's/ (none):/ /' -e 's/ 0:/ /' | grep -v "is not") -+%requires_ge() %(echo '%*' | LC_ALL=C xargs -r rpm -q --qf 'Requires: %%{name} >= %%{epoch}:%%{version}\\n' | sed -e 's/ (none):/ /' -e 's/ 0:/ /' | grep -v "is not") - %perl_sitearch %(eval "`%{__perl} -V:installsitearch`"; echo $installsitearch) - %perl_sitelib %(eval "`%{__perl} -V:installsitelib`"; echo $installsitelib) - %perl_vendorarch %(eval "`%{__perl} -V:installvendorarch`"; echo $installvendorarch) diff --git a/rpm-4.4.2.tar.bz2 b/rpm-4.4.2.tar.bz2 new file mode 100644 index 0000000..0659a80 --- /dev/null +++ b/rpm-4.4.2.tar.bz2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:abc1b6a909e904ee220e32cd0c534fe19b8ea7cb2d3e8cfe395e221773e62c8c +size 8955447 diff --git a/rpm-4.9.0.tar.bz2 b/rpm-4.9.0.tar.bz2 deleted file mode 100644 index 5a813cd..0000000 --- a/rpm-4.9.0.tar.bz2 +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:9af1a56b05fc2c54935062e04a3e02999110c74d00bfd5b5c5ff3a03dde61688 -size 3410799 diff --git a/rpm-beecrypt.diff b/rpm-beecrypt.diff deleted file mode 100644 index ecf9284..0000000 --- a/rpm-beecrypt.diff +++ /dev/null @@ -1,1726 +0,0 @@ ---- ./config.h.in.orig 2011-03-02 06:46:47.000000000 +0000 -+++ ./config.h.in 2011-05-10 15:54:41.000000000 +0000 -@@ -13,6 +13,9 @@ - /* Define to 1 if you have the `basename' function. */ - #undef HAVE_BASENAME - -+/* Define to 1 if you have the header file. */ -+#undef HAVE_BEECRYPT_API_H -+ - /* Define as 1 if you bzip2 1.0 */ - #undef HAVE_BZ2_1_0 - -@@ -77,7 +80,7 @@ - /* Define as 1 if your zlib has gzseek() */ - #undef HAVE_GZSEEK - --/* Define if you have the iconv() function. */ -+/* Define if you have the iconv() function and it works. */ - #undef HAVE_ICONV - - /* Define to 1 if you have the header file. */ -@@ -224,6 +227,10 @@ - */ - #undef LT_OBJDIR - -+/* Define to the sub-directory in which libtool stores uninstalled libraries. -+ */ -+#undef LT_OBJDIR -+ - /* Define to 1 if `major', `minor', and `makedev' are declared in . - */ - #undef MAJOR_IN_MKDEV -@@ -308,6 +315,9 @@ - /* Build with acl support? */ - #undef WITH_ACL - -+/* Build with beecrypt instead of nss3 support? */ -+#undef WITH_BEECRYPT -+ - /* Build with capability support? */ - #undef WITH_CAP - ---- ./configure.ac.orig 2011-03-02 06:46:20.000000000 +0000 -+++ ./configure.ac 2011-05-10 15:54:41.000000000 +0000 -@@ -246,12 +246,43 @@ AC_CHECK_HEADERS([dwarf.h], [ - AM_CONDITIONAL(LIBDWARF,[test "$WITH_LIBDWARF" = yes]) - - #================= -+# Check for beecrypt library if requested. -+AC_ARG_WITH(beecrypt, [ --with-beecrypt build with beecrypt support ],,[with_beecrypt=yes]) -+AC_ARG_WITH(internal_beecrypt, [ --with-internal-beecrypt build with internal beecrypt library ],,[with_internal_beecrypt=yes]) -+AM_CONDITIONAL([WITH_INTERNAL_BEECRYPT],[test "$with_internal_beecrypt" = yes]) -+if test "$with_internal_beecrypt" = yes ; then -+ with_beecrypt=yes -+fi -+AM_CONDITIONAL([WITH_BEECRYPT],[test "$with_beecrypt" = yes]) -+ -+WITH_BEECRYPT_INCLUDE= -+WITH_BEECRYPT_LIB= -+if test "$with_beecrypt" = yes ; then -+ AC_DEFINE(WITH_BEECRYPT, 1, [Build with beecrypt instead of nss3 support?]) -+ if test "$with_internal_beecrypt" = yes ; then -+ WITH_BEECRYPT_INCLUDE="-I\$(top_srcdir)/beecrypt" -+ AC_DEFINE(HAVE_BEECRYPT_API_H, 1, [Define to 1 if you have the header file.]) -+ else -+ AC_CHECK_LIB(beecrypt, mpfprintln, [ -+ WITH_BEECRYPT_LIB="-lbeecrypt" -+ ],[ -+ AC_MSG_ERROR([missing required library 'beecrypt']) -+ ]) -+ AC_CHECK_HEADER([beecrypt/api.h], [AC_DEFINE(HAVE_BEECRYPT_API_H, 1, [Define to 1 if you have the header file.]) -+ ]) -+ fi -+fi -+AC_SUBST(WITH_BEECRYPT_LIB) -+AC_SUBST(WITH_BEECRYPT_INCLUDE) -+ -+#================= - # Check for NSS library. - # We need nss.h from NSS which needs nspr.h. Unfortunately both glibc and NSS - # have a header named nss.h... so make extra check for NSS's sechash.h - # which we use too and hopefully is slightly more unique to NSS. - WITH_NSS_INCLUDE= - WITH_NSS_LIB= -+if test "$with_beecrypt" != yes ; then - AC_CHECK_HEADERS([nspr.h nss.h sechash.h], [], [ - AC_MSG_ERROR([missing required NSPR / NSS header]) - ]) -@@ -260,6 +291,7 @@ AC_CHECK_LIB(nss3, NSS_NoDB_Init, [ - ], [ - AC_MSG_ERROR([missing required NSS library 'nss3']) - ]) -+fi - AC_SUBST(WITH_NSS_INCLUDE) - AC_SUBST(WITH_NSS_LIB) - ---- ./rpmio/Makefile.am.orig 2010-12-03 12:11:57.000000000 +0000 -+++ ./rpmio/Makefile.am 2011-05-10 15:56:13.000000000 +0000 -@@ -2,6 +2,7 @@ - - AM_CPPFLAGS = -I$(top_builddir) -I$(top_srcdir) -I$(top_builddir)/include/ - AM_CPPFLAGS += @WITH_NSS_INCLUDE@ -+AM_CPPFLAGS += @WITH_BEECRYPT_INCLUDE@ - AM_CPPFLAGS += @WITH_LUA_INCLUDE@ - AM_CPPFLAGS += @WITH_POPT_INCLUDE@ - AM_CPPFLAGS += -I$(top_srcdir)/misc -@@ -18,10 +19,17 @@ librpmio_la_SOURCES = \ - rpmstring.c rpmfileutil.c \ - rpmkeyring.c - -+if WITH_BEECRYPT -+librpmio_la_SOURCES += digest_beecrypt.c -+else -+librpmio_la_SOURCES += digest_nss.c -+endif -+ - librpmio_la_LDFLAGS = -version-info 2:0:0 - librpmio_la_LIBADD = \ - ../misc/libmisc.la \ - @WITH_NSS_LIB@ \ -+ @WITH_BEECRYPT_LIB@ \ - @WITH_LUA_LIB@ \ - @WITH_BZ2_LIB@ \ - @WITH_ZLIB_LIB@ \ -@@ -30,6 +38,15 @@ librpmio_la_LIBADD = \ - @WITH_LZMA_LIB@ \ - -lpthread - -+if WITH_INTERNAL_BEECRYPT -+librpmio_la_LIBADD += $(libbeecrypt_la) -+ -+libbeecrypt_la = $(top_builddir)/beecrypt/libbeecrypt_nolibdir.la -+ -+$(top_builddir)/beecrypt/libbeecrypt_nolibdir.la: $(top_builddir)/beecrypt/libbeecrypt.la -+ sed -e 's/libdir=.*/libdir=/' < $(top_builddir)/beecrypt/libbeecrypt.la > $(top_builddir)/beecrypt/libbeecrypt_nolibdir.la -+endif -+ - if WITH_LUAEXT - AM_CPPFLAGS += -I$(top_srcdir)/luaext/ - librpmio_la_LIBADD += $(top_builddir)/luaext/libluaext.la ---- ./rpmio/base64.c.orig 2010-12-03 12:11:57.000000000 +0000 -+++ ./rpmio/base64.c 2011-05-10 15:54:41.000000000 +0000 -@@ -4,8 +4,11 @@ - #include - #include - -+#include "system.h" -+ - #include "rpmio/base64.h" - -+#ifndef WITH_BEECRYPT - - static char base64_encode_value(char value_in) - { -@@ -253,3 +256,4 @@ int main(int argc, char *argv[]) - } - #endif - -+#endif /* WITH_BEECRYPT */ ---- ./rpmio/digest.c.orig 2010-12-03 12:11:57.000000000 +0000 -+++ ./rpmio/digest.c 2011-05-10 16:00:19.000000000 +0000 -@@ -4,25 +4,12 @@ - - #include "system.h" - -+#include - #include "rpmio/digest.h" -+#include "rpmio/rpmio_internal.h" - - #include "debug.h" - --#ifdef SHA_DEBUG --#define DPRINTF(_a) fprintf _a --#else --#define DPRINTF(_a) --#endif -- -- --/** -- * MD5/SHA1 digest private data. -- */ --struct DIGEST_CTX_s { -- rpmDigestFlags flags; /*!< Bit(s) to control digest operation. */ -- HASHContext *hashctx; /*!< Internal NSS hash context. */ -- int algo; /*!< Used hash algorithm */ --}; - - #define DIGESTS_MAX 11 - struct rpmDigestBundle_s { -@@ -109,138 +96,3 @@ DIGEST_CTX rpmDigestBundleDupCtx(rpmDige - return dup; - } - --DIGEST_CTX --rpmDigestDup(DIGEST_CTX octx) --{ -- DIGEST_CTX nctx = NULL; -- if (octx) { -- HASHContext *hctx = HASH_Clone(octx->hashctx); -- if (hctx) { -- nctx = memcpy(xcalloc(1, sizeof(*nctx)), octx, sizeof(*nctx)); -- nctx->hashctx = hctx; -- } -- } -- return nctx; --} -- --RPM_GNUC_PURE --static HASH_HashType getHashType(int hashalgo) --{ -- switch (hashalgo) { -- case PGPHASHALGO_MD5: -- return HASH_AlgMD5; -- break; -- case PGPHASHALGO_MD2: -- return HASH_AlgMD2; -- break; -- case PGPHASHALGO_SHA1: -- return HASH_AlgSHA1; -- break; -- case PGPHASHALGO_SHA256: -- return HASH_AlgSHA256; -- break; -- case PGPHASHALGO_SHA384: -- return HASH_AlgSHA384; -- break; -- case PGPHASHALGO_SHA512: -- return HASH_AlgSHA512; -- break; -- case PGPHASHALGO_RIPEMD160: -- case PGPHASHALGO_TIGER192: -- case PGPHASHALGO_HAVAL_5_160: -- default: -- return HASH_AlgNULL; -- break; -- } --} -- --size_t --rpmDigestLength(int hashalgo) --{ -- return HASH_ResultLen(getHashType(hashalgo)); --} -- --DIGEST_CTX --rpmDigestInit(int hashalgo, rpmDigestFlags flags) --{ -- HASH_HashType type = getHashType(hashalgo); -- HASHContext *hashctx = NULL; -- DIGEST_CTX ctx = NULL; -- -- if (type == HASH_AlgNULL || rpmInitCrypto() < 0) -- goto exit; -- -- if ((hashctx = HASH_Create(type)) != NULL) { -- ctx = xcalloc(1, sizeof(*ctx)); -- ctx->flags = flags; -- ctx->algo = hashalgo; -- ctx->hashctx = hashctx; -- HASH_Begin(ctx->hashctx); -- } -- --DPRINTF((stderr, "*** Init(%x) ctx %p hashctx %p\n", flags, ctx, ctx->hashctx)); --exit: -- return ctx; --} -- --int --rpmDigestUpdate(DIGEST_CTX ctx, const void * data, size_t len) --{ -- size_t partlen; -- const unsigned char *ptr = data; -- -- if (ctx == NULL) -- return -1; -- --DPRINTF((stderr, "*** Update(%p,%p,%zd) hashctx %p \"%s\"\n", ctx, data, len, ctx->hashctx, ((char *)data))); -- partlen = ~(unsigned int)0xFF; -- while (len > 0) { -- if (len < partlen) { -- partlen = len; -- } -- HASH_Update(ctx->hashctx, ptr, partlen); -- ptr += partlen; -- len -= partlen; -- } -- return 0; --} -- --int --rpmDigestFinal(DIGEST_CTX ctx, void ** datap, size_t *lenp, int asAscii) --{ -- unsigned char * digest; -- unsigned int digestlen; -- -- if (ctx == NULL) -- return -1; -- digestlen = HASH_ResultLenContext(ctx->hashctx); -- digest = xmalloc(digestlen); -- --DPRINTF((stderr, "*** Final(%p,%p,%p,%zd) hashctx %p digest %p\n", ctx, datap, lenp, asAscii, ctx->hashctx, digest)); --/* FIX: check rc */ -- HASH_End(ctx->hashctx, digest, (unsigned int *) &digestlen, digestlen); -- -- /* Return final digest. */ -- if (!asAscii) { -- if (lenp) *lenp = digestlen; -- if (datap) { -- *datap = digest; -- digest = NULL; -- } -- } else { -- if (lenp) *lenp = (2*digestlen) + 1; -- if (datap) { -- const uint8_t * s = (const uint8_t *) digest; -- *datap = pgpHexStr(s, digestlen); -- } -- } -- if (digest) { -- memset(digest, 0, digestlen); /* In case it's sensitive */ -- free(digest); -- } -- HASH_Destroy(ctx->hashctx); -- memset(ctx, 0, sizeof(*ctx)); /* In case it's sensitive */ -- free(ctx); -- return 0; --} -- ---- ./rpmio/digest.h.orig 2010-12-03 12:11:57.000000000 +0000 -+++ ./rpmio/digest.h 2011-05-10 15:54:41.000000000 +0000 -@@ -1,11 +1,6 @@ - #ifndef _RPMDIGEST_H - #define _RPMDIGEST_H - --#include --#include --#include --#include -- - #include - #include "rpmio/base64.h" - -@@ -42,8 +37,18 @@ struct pgpDig_s { - struct pgpDigParams_s pubkey; - - /* DSA/RSA parameters */ -- SECKEYPublicKey *keydata; -- SECItem *sigdata; -+ void *keydata; -+ void *sigdata; - }; - -+void pgpCleanRSADSA(pgpDig dig); -+ -+int pgpSetSigMpiRSA(pgpDig dig, int num, const uint8_t *p); -+int pgpSetPubMpiRSA(pgpDig dig, int num, const uint8_t *p); -+int pgpVerifyRSA(pgpDig dig, uint8_t *hash, size_t hashlen); -+ -+int pgpSetSigMpiDSA(pgpDig dig, int num, const uint8_t *p); -+int pgpSetPubMpiDSA(pgpDig dig, int num, const uint8_t *p); -+int pgpVerifyDSA(pgpDig dig, uint8_t *hash, size_t hashlen); -+ - #endif /* _RPMDIGEST_H */ ---- ./rpmio/digest_beecrypt.c.orig 2011-05-10 15:54:41.000000000 +0000 -+++ ./rpmio/digest_beecrypt.c 2011-05-10 15:54:41.000000000 +0000 -@@ -0,0 +1,493 @@ -+#include "system.h" -+ -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#if HAVE_BEECRYPT_API_H -+#include -+#include -+#include -+#endif -+ -+#include -+#include "rpmio/digest.h" -+#include "rpmio/rpmio_internal.h" -+ -+#include "debug.h" -+ -+/* interface to beecrpyt crypto framework */ -+ -+/**************************** init ************************************/ -+ -+int rpmInitCrypto(void) { -+ return 0; -+} -+ -+int rpmFreeCrypto(void) { -+ return 0; -+} -+ -+/**************************** helpers ************************************/ -+ -+static inline unsigned int pgpMpiBits(const uint8_t *p) -+{ -+ return ((p[0] << 8) | p[1]); -+} -+ -+static inline size_t pgpMpiLen(const uint8_t *p) -+{ -+ return (2 + ((pgpMpiBits(p)+7)>>3)); -+} -+ -+static inline char * pgpHexCvt(char *t, const byte *s, int nbytes) -+ /*@modifies *t @*/ -+{ -+ static char hex[] = "0123456789abcdef"; -+ while (nbytes-- > 0) { -+ unsigned int i; -+ i = *s++; -+ *t++ = hex[ (i >> 4) & 0xf ]; -+ *t++ = hex[ (i ) & 0xf ]; -+ } -+ *t = '\0'; -+ return t; -+} -+ -+static const char * pgpMpiHex(const byte *p) -+{ -+ static char prbuf[2048]; -+ char *t = prbuf; -+ t = pgpHexCvt(t, p+2, pgpMpiLen(p)-2); -+ return prbuf; -+} -+ -+static int pgpHexSet(int lbits, mpnumber * mpn, const byte * p) -+{ -+ unsigned int mbits = pgpMpiBits(p); -+ unsigned int nbits; -+ unsigned int nbytes; -+ char *t; -+ unsigned int ix; -+ -+ nbits = (lbits > mbits ? lbits : mbits); -+ nbytes = ((nbits + 7) >> 3); -+ t = xmalloc(2*nbytes+1); -+ ix = 2 * ((nbits - mbits) >> 3); -+ -+ if (ix > 0) memset(t, (int)'0', ix); -+ strcpy(t+ix, pgpMpiHex(p)); -+ (void) mpnsethex(mpn, t); -+ t = _free(t); -+ return 0; -+} -+ -+void pgpCleanRSADSA(pgpDig dig) -+{ -+ if (!dig) -+ return; -+ if (dig->keydata) { -+ dig->keydata= _free(dig->keydata); -+ } -+ if (dig->sigdata) { -+ dig->sigdata = _free(dig->sigdata); -+ } -+} -+ -+ -+/****************************** RSA **************************************/ -+ -+struct pgpDigSigRSA_s { -+ mpnumber c; -+}; -+ -+struct pgpDigPubRSA_s { -+ rsapk rsa_pk; -+}; -+ -+int -+pgpSetSigMpiRSA(pgpDig dig, int num, const uint8_t *p) -+{ -+ struct pgpDigSigRSA_s *sig; -+ if (num != 0) -+ return 1; -+ if (!dig->sigdata) -+ dig->sigdata = xcalloc(1, sizeof(*sig)); -+ sig = dig->sigdata; -+ if (!sig) -+ return 1; -+ (void) mpnsethex(&sig->c, pgpMpiHex(p)); -+ return 0; -+} -+ -+int -+pgpSetPubMpiRSA(pgpDig dig, int num, const uint8_t *p) -+{ -+ struct pgpDigPubRSA_s *pub; -+ -+ if (!dig->keydata) -+ dig->keydata = xcalloc(1, sizeof(*pub)); -+ pub = dig->keydata; -+ if (!pub) -+ return 1; -+ switch(num) { -+ case 0: -+ (void) mpbsethex(&pub->rsa_pk.n, pgpMpiHex(p)); -+ return 0; -+ case 1: -+ (void) mpnsethex(&pub->rsa_pk.e, pgpMpiHex(p)); -+ return 0; -+ default: -+ return 1; -+ } -+} -+ -+static inline unsigned char nibble(char c) -+{ -+ if (c >= '0' && c <= '9') -+ return (c - '0'); -+ if (c >= 'A' && c <= 'F') -+ return (c - 'A') + 10; -+ if (c >= 'a' && c <= 'f') -+ return (c - 'a') + 10; -+ return 0; -+} -+ -+int pgpVerifyRSA(pgpDig dig, uint8_t *hash, size_t hashlen) -+{ -+ const char * prefix = NULL; -+ int res; -+ mpnumber rsahm; -+ struct pgpDigSigRSA_s *sig; -+ struct pgpDigPubRSA_s *pub; -+ -+ sig = dig->sigdata; -+ pub = dig->keydata; -+ if (!sig || !pub) -+ return 1; -+ -+ switch (dig->signature.hash_algo) { -+ case PGPHASHALGO_MD5: -+ prefix = "3020300c06082a864886f70d020505000410"; -+ break; -+ case PGPHASHALGO_SHA1: -+ prefix = "3021300906052b0e03021a05000414"; -+ break; -+ case PGPHASHALGO_MD2: -+ prefix = "3020300c06082a864886f70d020205000410"; -+ break; -+ case PGPHASHALGO_SHA256: -+ prefix = "3031300d060960864801650304020105000420"; -+ break; -+ case PGPHASHALGO_SHA384: -+ prefix = "3041300d060960864801650304020205000430"; -+ break; -+ case PGPHASHALGO_SHA512: -+ prefix = "3051300d060960864801650304020305000440"; -+ break; -+ /* fallthrough for unsupported / unknown types */ -+ default: -+ return 1; -+ } -+ -+ /* Generate RSA modulus parameter. */ -+ { unsigned int nbits = MP_WORDS_TO_BITS(sig->c.size); -+ unsigned int nb = (nbits + 7) >> 3; -+ byte *buf, *bp; -+ -+ if (nb < 3) -+ return 1; -+ buf = xmalloc(nb); -+ memset(buf, 0xff, nb); -+ buf[0] = 0x00; -+ buf[1] = 0x01; -+ bp = buf + nb - strlen(prefix)/2 - hashlen - 1; -+ if (bp < buf) -+ return 1; -+ *bp++ = 0; -+ for (; *prefix; prefix += 2) -+ *bp++ = (nibble(prefix[0]) << 4) | nibble(prefix[1]); -+ memcpy(bp, hash, hashlen); -+ mpnzero(&rsahm); -+ (void) mpnsetbin(&rsahm, buf, nb); -+ buf = _free(buf); -+ } -+#if HAVE_BEECRYPT_API_H -+ res = rsavrfy(&pub->rsa_pk.n, &pub->rsa_pk.e, &sig->c, &rsahm) == 1 ? 0 : 1; -+#else -+ res = rsavrfy(&pub->rsa_pk, &rsahm, &sig->c) == 1 ? 0 : 1; -+#endif -+ mpnfree(&rsahm); -+ return res; -+} -+ -+ -+/****************************** DSA **************************************/ -+ -+struct pgpDigSigDSA_s { -+ mpnumber r; -+ mpnumber s; -+}; -+ -+struct pgpDigPubDSA_s { -+ mpbarrett p; -+ mpbarrett q; -+ mpnumber g; -+ mpnumber y; -+}; -+ -+int -+pgpSetSigMpiDSA(pgpDig dig, int num, const uint8_t *p) -+{ -+ struct pgpDigSigDSA_s *sig; -+ -+ if (!dig->sigdata) -+ dig->sigdata = xcalloc(1, sizeof(*sig)); -+ sig = dig->sigdata; -+ if (!sig) -+ return 1; -+ switch(num) { -+ case 0: -+ return pgpHexSet(160, &sig->r, p); -+ case 1: -+ return pgpHexSet(160, &sig->s, p); -+ default: -+ return 1; -+ } -+} -+ -+int -+pgpSetPubMpiDSA(pgpDig dig, int num, const uint8_t *p) -+{ -+ struct pgpDigPubDSA_s *pub; -+ -+ if (!dig->keydata) -+ dig->keydata = xcalloc(1, sizeof(*pub)); -+ pub = dig->keydata; -+ if (!pub) -+ return 1; -+ switch(num) { -+ case 0: -+ mpbsethex(&pub->p, pgpMpiHex(p)); -+ return 0; -+ case 1: -+ mpbsethex(&pub->q, pgpMpiHex(p)); -+ return 0; -+ case 2: -+ mpnsethex(&pub->g, pgpMpiHex(p)); -+ return 0; -+ case 3: -+ mpnsethex(&pub->y, pgpMpiHex(p)); -+ return 0; -+ default: -+ return 1; -+ } -+} -+ -+int pgpVerifyDSA(pgpDig dig, uint8_t *hash, size_t hashlen) -+{ -+ struct pgpDigSigDSA_s *sig; -+ struct pgpDigPubDSA_s *pub; -+ mpnumber hm; -+ int res; -+ -+ sig = dig->sigdata; -+ pub = dig->keydata; -+ if (!sig || !pub) -+ return 1; -+ mpnzero(&hm); -+ mpnsetbin(&hm, hash, hashlen); -+ res = dsavrfy(&pub->p, &pub->q, &pub->g, &hm, &pub->y, &sig->r, &sig->s) == 1 ? 0 : 1; -+ mpnfree(&hm); -+ return res; -+} -+ -+/**************************** digest ************************************/ -+ -+#ifdef SHA_DEBUG -+#define DPRINTF(_a) fprintf _a -+#else -+#define DPRINTF(_a) -+#endif -+ -+/** -+ * MD5/SHA1 digest private data. -+ */ -+struct DIGEST_CTX_s { -+ rpmDigestFlags flags; /*!< Bit(s) to control digest operation. */ -+ int algo; /*!< Used hash algorithm */ -+ uint32_t datalen; /*!< No. bytes in block of plaintext data. */ -+ uint32_t paramlen; /*!< No. bytes of digest parameters. */ -+ uint32_t digestlen; /*!< No. bytes of digest. */ -+ void * param; /*!< Digest parameters. */ -+ int (*Reset) (void * param) -+ /*@modifies param @*/; /*!< Digest initialize. */ -+ int (*Update) (void * param, const byte * data, size_t size) -+ /*@modifies param @*/; /*!< Digest transform. */ -+ int (*Digest) (void * param, /*@out@*/ byte * digest) -+ /*@modifies param, digest @*/; /*!< Digest finish. */ -+}; -+ -+DIGEST_CTX -+rpmDigestDup(DIGEST_CTX octx) -+{ -+ DIGEST_CTX nctx; -+ nctx = memcpy(xcalloc(1, sizeof(*nctx)), octx, sizeof(*nctx)); -+ nctx->param = memcpy(xcalloc(1, nctx->paramlen), octx->param, nctx->paramlen); -+ return nctx; -+} -+ -+size_t -+rpmDigestLength(int hashalgo) -+{ -+ switch (hashalgo) { -+ case PGPHASHALGO_MD5: -+ return 16; -+ case PGPHASHALGO_SHA1: -+ return 20; -+#if HAVE_BEECRYPT_API_H -+ case PGPHASHALGO_SHA256: -+ return 32; -+ case PGPHASHALGO_SHA384: -+ return 48; -+ case PGPHASHALGO_SHA512: -+ return 64; -+#endif -+ default: -+ return 0; -+ } -+} -+ -+DIGEST_CTX -+rpmDigestInit(int hashalgo, rpmDigestFlags flags) -+{ -+ DIGEST_CTX ctx = xcalloc(1, sizeof(*ctx)); -+ int xx; -+ -+ ctx->flags = flags; -+ ctx->algo = hashalgo; -+ -+ switch (hashalgo) { -+ case PGPHASHALGO_MD5: -+ ctx->digestlen = 16; -+ ctx->datalen = 64; -+ ctx->paramlen = sizeof(md5Param); -+ ctx->param = xcalloc(1, ctx->paramlen); -+ ctx->Reset = (void *) md5Reset; -+ ctx->Update = (void *) md5Update; -+ ctx->Digest = (void *) md5Digest; -+ break; -+ case PGPHASHALGO_SHA1: -+ ctx->digestlen = 20; -+ ctx->datalen = 64; -+ ctx->paramlen = sizeof(sha1Param); -+ ctx->param = xcalloc(1, ctx->paramlen); -+ ctx->Reset = (void *) sha1Reset; -+ ctx->Update = (void *) sha1Update; -+ ctx->Digest = (void *) sha1Digest; -+ break; -+#if HAVE_BEECRYPT_API_H -+ case PGPHASHALGO_SHA256: -+ ctx->digestlen = 32; -+ ctx->datalen = 64; -+ ctx->paramlen = sizeof(sha256Param); -+ ctx->param = xcalloc(1, ctx->paramlen); -+ ctx->Reset = (void *) sha256Reset; -+ ctx->Update = (void *) sha256Update; -+ ctx->Digest = (void *) sha256Digest; -+ break; -+ case PGPHASHALGO_SHA384: -+ ctx->digestlen = 48; -+ ctx->datalen = 128; -+ ctx->paramlen = sizeof(sha384Param); -+ ctx->param = xcalloc(1, ctx->paramlen); -+ ctx->Reset = (void *) sha384Reset; -+ ctx->Update = (void *) sha384Update; -+ ctx->Digest = (void *) sha384Digest; -+ break; -+ case PGPHASHALGO_SHA512: -+ ctx->digestlen = 64; -+ ctx->datalen = 128; -+ ctx->paramlen = sizeof(sha512Param); -+ ctx->param = xcalloc(1, ctx->paramlen); -+ ctx->Reset = (void *) sha512Reset; -+ ctx->Update = (void *) sha512Update; -+ ctx->Digest = (void *) sha512Digest; -+ break; -+#endif -+ case PGPHASHALGO_RIPEMD160: -+ case PGPHASHALGO_MD2: -+ case PGPHASHALGO_TIGER192: -+ case PGPHASHALGO_HAVAL_5_160: -+ default: -+ free(ctx); -+ return NULL; -+ } -+ -+ xx = (*ctx->Reset) (ctx->param); -+ -+DPRINTF((stderr, "*** Init(%x) ctx %p param %p\n", flags, ctx, ctx->param)); -+ return ctx; -+} -+ -+/* LCL: ctx->param may be modified, but ctx is abstract @*/ -+int -+rpmDigestUpdate(DIGEST_CTX ctx, const void * data, size_t len) -+{ -+ if (ctx == NULL) -+ return -1; -+ -+DPRINTF((stderr, "*** Update(%p,%p,%d) param %p \"%s\"\n", ctx, data, len, ctx->param, ((char *)data))); -+ return (*ctx->Update) (ctx->param, data, len); -+} -+ -+int -+rpmDigestFinal(DIGEST_CTX ctx, void ** datap, size_t *lenp, int asAscii) -+{ -+ byte * digest; -+ char * t; -+ int i; -+ -+ if (ctx == NULL) -+ return -1; -+ digest = xmalloc(ctx->digestlen); -+ -+DPRINTF((stderr, "*** Final(%p,%p,%p,%d) param %p digest %p\n", ctx, datap, lenp, asAscii, ctx->param, digest)); -+ /* FIX: check rc */ -+ (void) (*ctx->Digest) (ctx->param, digest); -+ -+ /* Return final digest. */ -+ if (!asAscii) { -+ if (lenp) *lenp = ctx->digestlen; -+ if (datap) { -+ *datap = digest; -+ digest = NULL; -+ } -+ } else { -+ if (lenp) *lenp = (2*ctx->digestlen) + 1; -+ if (datap) { -+ const byte * s = (const byte *) digest; -+ static const char hex[] = "0123456789abcdef"; -+ -+ *datap = t = xmalloc((2*ctx->digestlen) + 1); -+ for (i = 0 ; i < ctx->digestlen; i++) { -+ *t++ = hex[ (unsigned)((*s >> 4) & 0x0f) ]; -+ *t++ = hex[ (unsigned)((*s++ ) & 0x0f) ]; -+ } -+ *t = '\0'; -+ } -+ } -+ if (digest) { -+ memset(digest, 0, ctx->digestlen); /* In case it's sensitive */ -+ free(digest); -+ } -+ memset(ctx->param, 0, ctx->paramlen); /* In case it's sensitive */ -+ free(ctx->param); -+ memset(ctx, 0, sizeof(*ctx)); /* In case it's sensitive */ -+ free(ctx); -+ return 0; -+} ---- ./rpmio/digest_nss.c.orig 2011-05-10 15:54:41.000000000 +0000 -+++ ./rpmio/digest_nss.c 2011-05-10 15:54:41.000000000 +0000 -@@ -0,0 +1,500 @@ -+#include -+#include -+#include -+#include -+ -+#include "system.h" -+ -+#include -+#include "rpmio/rpmio_internal.h" -+#include "rpmio/digest.h" -+ -+#include "debug.h" -+ -+/* interface to nss crypto framework */ -+ -+/**************************** init ************************************/ -+ -+static int _crypto_initialized = 0; -+static int _new_process = 1; -+ -+/* -+ * Only flag for re-initialization here, in the common case the child -+ * exec()'s something else shutting down NSS here would be waste of time. -+ */ -+static void at_forkchild(void) { -+ _new_process = 1; -+} -+ -+int rpmInitCrypto(void) { -+ int rc = 0; -+ -+ /* Lazy NSS shutdown for re-initialization after fork() */ -+ if (_new_process && _crypto_initialized) { -+ rpmFreeCrypto(); -+ } -+ -+ /* Initialize NSS if not already done */ -+ if (!_crypto_initialized) { -+ if (NSS_NoDB_Init(NULL) != SECSuccess) { -+ rc = -1; -+ } else { -+ _crypto_initialized = 1; -+ } -+ } -+ -+ /* Register one post-fork handler per process */ -+ if (_new_process) { -+ if (pthread_atfork(NULL, NULL, at_forkchild) != 0) { -+ rpmlog(RPMLOG_WARNING, _("Failed to register fork handler: %m\n")); -+ } -+ _new_process = 0; -+ } -+ return rc; -+} -+ -+int rpmInitCrypto(void) { -+ int rc = 0; -+ -+ if (!_crypto_initialized) { -+ if (NSS_NoDB_Init(NULL) != SECSuccess) { -+ rc = -1; -+ } else { -+ _crypto_initialized = 1; -+ } -+ } -+ return rc; -+} -+ -+int rpmFreeCrypto(void) -+{ -+ int rc = 0; -+ if (_crypto_initialized) { -+ rc = (NSS_Shutdown() != SECSuccess); -+ _crypto_initialized = 0; -+ } -+ return rc; -+} -+ -+/**************************** helpers ************************************/ -+ -+static SECKEYPublicKey *pgpNewPublicKey(KeyType type) -+{ -+ PRArenaPool *arena; -+ SECKEYPublicKey *key; -+ -+ arena = PORT_NewArena(DER_DEFAULT_CHUNKSIZE); -+ if (arena == NULL) -+ return NULL; -+ -+ key = PORT_ArenaZAlloc(arena, sizeof(SECKEYPublicKey)); -+ -+ if (key == NULL) { -+ PORT_FreeArena(arena, PR_FALSE); -+ return NULL; -+ } -+ -+ key->keyType = type; -+ key->pkcs11ID = CK_INVALID_HANDLE; -+ key->pkcs11Slot = NULL; -+ key->arena = arena; -+ return key; -+} -+ -+static SECItem *pgpMpiItem(PRArenaPool *arena, SECItem *item, const uint8_t *p) -+{ -+ size_t nbytes = pgpMpiLen(p)-2; -+ -+ if (item == NULL) { -+ if ((item=SECITEM_AllocItem(arena, item, nbytes)) == NULL) -+ return item; -+ } else { -+ if (arena != NULL) -+ item->data = PORT_ArenaGrow(arena, item->data, item->len, nbytes); -+ else -+ item->data = PORT_Realloc(item->data, nbytes); -+ -+ if (item->data == NULL) { -+ if (arena == NULL) -+ SECITEM_FreeItem(item, PR_TRUE); -+ return NULL; -+ } -+ } -+ -+ memcpy(item->data, p+2, nbytes); -+ item->len = nbytes; -+ return item; -+} -+ -+static int pgpMpiSet(unsigned int lbits, -+ void *dest, const uint8_t * p, const uint8_t * pend) -+{ -+ unsigned int mbits = pgpMpiBits(p); -+ unsigned int nbits; -+ size_t nbytes; -+ char *t = dest; -+ unsigned int ix; -+ -+ if ((p + ((mbits+7) >> 3)) > pend) -+ return 1; -+ -+ if (mbits > lbits) -+ return 1; -+ -+ nbits = (lbits > mbits ? lbits : mbits); -+ nbytes = ((nbits + 7) >> 3); -+ ix = (nbits - mbits) >> 3; -+ -+ if (ix > 0) memset(t, '\0', ix); -+ memcpy(t+ix, p+2, nbytes-ix); -+ -+ return 0; -+} -+ -+void pgpCleanRSADSA(pgpDig dig) -+{ -+ if (!dig) -+ return; -+ if (dig->keydata) { -+ SECKEY_DestroyPublicKey(dig->keydata); -+ dig->keydata = NULL; -+ } -+ if (dig->sigdata) { -+ SECITEM_ZfreeItem(dig->sigdata, PR_TRUE); -+ dig->sigdata = NULL; -+ } -+} -+ -+/****************************** RSA **************************************/ -+ -+int -+pgpSetSigMpiRSA(struct pgpDig_s *dig, int num, const uint8_t *p, const uint8_t *pend) -+{ -+ SECItem *sig; -+ -+ if (num != 0) -+ return 1; -+ sig = dig->rsasigdata; -+ sig = pgpMpiItem(NULL, sig, p); -+ dig->rsasigdata = sig; -+ if (sig == NULL) -+ return 1; -+ return 0; -+} -+ -+int -+pgpSetPubMpiRSA(struct pgpDig_s *dig, int num, const uint8_t *p, const uint8_t *pend) -+{ -+ SECKEYPublicKey *pub; -+ -+ if (!dig->keydata) -+ dig->keydata = pgpNewPublicKey(rsaKey); -+ pub = dig->keydata; -+ if (!pub) -+ return 1; -+ switch(num) { -+ case 0: -+ pgpMpiItem(pub->arena, &pub->u.rsa.modulus, p); -+ return 0; -+ case 1: -+ pgpMpiItem(pub->arena, &pub->u.rsa.publicExponent, p); -+ return 0; -+ default: -+ return 1; -+ } -+} -+ -+int pgpVerifyRSA(pgpDig dig, uint8_t *hash, size_t hashlen) -+{ -+ SECOidTag sigalg; -+ SECItem digest; -+ SECKEYPublicKey *pub; -+ SECItem *sig; -+ SECItem *newsig = NULL; -+ size_t siglen; -+ int res; -+ -+ switch (dig->hash_algo) { -+ case PGPHASHALGO_MD5: -+ sigalg = SEC_OID_PKCS1_MD5_WITH_RSA_ENCRYPTION; -+ break; -+ case PGPHASHALGO_SHA1: -+ sigalg = SEC_OID_PKCS1_SHA1_WITH_RSA_ENCRYPTION; -+ break; -+ case PGPHASHALGO_MD2: -+ sigalg = SEC_OID_PKCS1_MD2_WITH_RSA_ENCRYPTION; -+ break; -+ case PGPHASHALGO_SHA256: -+ sigalg = SEC_OID_PKCS1_SHA256_WITH_RSA_ENCRYPTION; -+ break; -+ case PGPHASHALGO_SHA384: -+ sigalg = SEC_OID_PKCS1_SHA384_WITH_RSA_ENCRYPTION; -+ break; -+ case PGPHASHALGO_SHA512: -+ sigalg = SEC_OID_PKCS1_SHA512_WITH_RSA_ENCRYPTION; -+ break; -+ /* fallthrough for unsupported / unknown types */ -+ default: -+ sigalg = SEC_OID_UNKNOWN; -+ break; -+ } -+ digest.type = siBuffer; -+ digest.data = hash; -+ digest.len = hashlen; -+ -+ pub = dig->keydata; -+ sig = dig->sigdata; -+ siglen = SECKEY_SignatureLen(dig->keydata); -+ -+ /* Zero-pad signature data up to expected size if necessary */ -+ if (siglen > sig->len) { -+ size_t pad = siglen - sig->len; -+ if ((newsig = SECITEM_AllocItem(NULL, NULL, siglen)) == NULL) { -+ return 1; -+ } -+ memset(newsig->data, 0, pad); -+ memcpy(newsig->data+pad, sig->data, sig->len); -+ sig = newsig; -+ } -+ -+ if (VFY_VerifyDigest(&digest, pub, sig, sigalg, NULL) == SECSuccess) -+ res = 0; -+ else -+ res = 1; -+ -+ if (newsig) { -+ SECITEM_ZfreeItem(newsig, 1); -+ } -+ return res; -+} -+ -+ -+/****************************** DSA **************************************/ -+ -+int -+pgpSetSigMpiDSA(struct pgpDig_s *dig, int num, const uint8_t *p, const uint8_t *pend) -+{ -+ SECItem *sig, *new; -+ -+ switch(num) { -+ case 0: -+ sig = SECITEM_AllocItem(NULL, NULL, 2*DSA_SUBPRIME_LEN); -+ dig->sigdata = sig; -+ memset(sig->data, 0, 2*DSA_SUBPRIME_LEN); -+ pgpMpiSet(DSA_SUBPRIME_LEN*8, sig->data, p, pend); -+ return 0; -+ case 1: -+ sig = dig->sigdata; -+ if (!sig) -+ return 1; -+ pgpMpiSet(DSA_SUBPRIME_LEN*8, sig->data + DSA_SUBPRIME_LEN, p, pend); -+ new = SECITEM_AllocItem(NULL, NULL, 0); -+ if (!new) -+ return 1; -+ if (DSAU_EncodeDerSig(new, sig) != SECSuccess) -+ return 1; -+ SECITEM_FreeItem(sig, PR_TRUE); -+ dig->sigdata = new; -+ return 0; -+ default: -+ return 1; -+ } -+} -+ -+int -+pgpSetPubMpiDSA(struct pgpDig_s *dig, int num, const uint8_t *p, const uint8_t *pend) -+{ -+ SECKEYPublicKey *pub; -+ -+ if (!dig->keydata) -+ dig->keydata = pgpNewPublicKey(dsaKey); -+ pub = dig->keydata; -+ if (!pub) -+ return 1; -+ switch(num) { -+ case 0: -+ pgpMpiItem(pub->arena, &pub->u.dsa.params.prime, p); -+ return 0; -+ case 1: -+ pgpMpiItem(pub->arena, &pub->u.dsa.params.subPrime, p); -+ return 0; -+ case 2: -+ pgpMpiItem(pub->arena, &pub->u.dsa.params.base, p); -+ return 0; -+ case 3: -+ pgpMpiItem(pub->arena, &pub->u.dsa.publicValue, p); -+ return 0; -+ default: -+ return 1; -+ } -+} -+ -+int pgpVerifyDSA(pgpDig dig, uint8_t *hash, size_t hashlen) -+{ -+ SECItem digest; -+ SECKEYPublicKey *pub; -+ SECItem *sig; -+ -+ sig = dig->sigdata; -+ pub = dig->keydata; -+ digest.type = siBuffer; -+ digest.data = hash; -+ digest.len = hashlen; -+ if (VFY_VerifyDigest(&digest, pub, sig, SEC_OID_ANSIX9_DSA_SIGNATURE_WITH_SHA1_DIGEST, NULL) == SECSuccess) -+ return 0; -+ else -+ return 1; -+} -+ -+ -+/**************************** digest ************************************/ -+ -+ -+#ifdef SHA_DEBUG -+#define DPRINTF(_a) fprintf _a -+#else -+#define DPRINTF(_a) -+#endif -+ -+ -+/** -+ * MD5/SHA1 digest private data. -+ */ -+struct DIGEST_CTX_s { -+ rpmDigestFlags flags; /*!< Bit(s) to control digest operation. */ -+ HASHContext *hashctx; /*!< Internal NSS hash context. */ -+ int algo; /*!< Used hash algorithm */ -+}; -+ -+DIGEST_CTX -+rpmDigestDup(DIGEST_CTX octx) -+{ -+ DIGEST_CTX nctx; -+ nctx = memcpy(xcalloc(1, sizeof(*nctx)), octx, sizeof(*nctx)); -+ nctx->hashctx = HASH_Clone(octx->hashctx); -+ if (nctx->hashctx == NULL) { -+ fprintf(stderr, "HASH_Clone failed\n"); -+ exit(EXIT_FAILURE); /* FIX: callers do not bother checking error return */ -+ } -+ return nctx; -+} -+ -+RPM_GNUC_PURE -+static HASH_HashType getHashType(int hashalgo) -+{ -+ switch (hashalgo) { -+ case PGPHASHALGO_MD5: -+ return HASH_AlgMD5; -+ break; -+ case PGPHASHALGO_MD2: -+ return HASH_AlgMD2; -+ break; -+ case PGPHASHALGO_SHA1: -+ return HASH_AlgSHA1; -+ break; -+ case PGPHASHALGO_SHA256: -+ return HASH_AlgSHA256; -+ break; -+ case PGPHASHALGO_SHA384: -+ return HASH_AlgSHA384; -+ break; -+ case PGPHASHALGO_SHA512: -+ return HASH_AlgSHA512; -+ break; -+ case PGPHASHALGO_RIPEMD160: -+ case PGPHASHALGO_TIGER192: -+ case PGPHASHALGO_HAVAL_5_160: -+ default: -+ return HASH_AlgNULL; -+ break; -+ } -+} -+ -+size_t -+rpmDigestLength(int hashalgo) -+{ -+ return HASH_ResultLen(getHashType(hashalgo)); -+} -+ -+DIGEST_CTX -+rpmDigestInit(int hashalgo, rpmDigestFlags flags) -+{ -+ HASH_HashType type; -+ HASHContext *hashctx = NULL; -+ DIGEST_CTX ctx = NULL; -+ -+ if (type == HASH_AlgNULL || rpmInitCrypto() < 0) -+ return NULL; -+ -+ if ((hashctx = HASH_Create(type)) == NULL) -+ return NULL; -+ ctx = xcalloc(1, sizeof(*ctx)); -+ ctx->flags = flags; -+ ctx->algo = hashalgo; -+ ctx->hashctx = hashctx; -+ HASH_Begin(ctx->hashctx); -+ -+DPRINTF((stderr, "*** Init(%x) ctx %p hashctx %p\n", flags, ctx, ctx->hashctx)); -+ return ctx; -+} -+ -+int -+rpmDigestUpdate(DIGEST_CTX ctx, const void * data, size_t len) -+{ -+ size_t partlen; -+ const unsigned char *ptr = data; -+ -+ if (ctx == NULL) -+ return -1; -+ -+DPRINTF((stderr, "*** Update(%p,%p,%zd) hashctx %p \"%s\"\n", ctx, data, len, ctx->hashctx, ((char *)data))); -+ partlen = ~(unsigned int)0xFF; -+ while (len > 0) { -+ if (len < partlen) { -+ partlen = len; -+ } -+ HASH_Update(ctx->hashctx, ptr, partlen); -+ ptr += partlen; -+ len -= partlen; -+ } -+ return 0; -+} -+ -+int -+rpmDigestFinal(DIGEST_CTX ctx, void ** datap, size_t *lenp, int asAscii) -+{ -+ unsigned char * digest; -+ unsigned int digestlen; -+ -+ if (ctx == NULL) -+ return -1; -+ digestlen = HASH_ResultLenContext(ctx->hashctx); -+ digest = xmalloc(digestlen); -+ -+DPRINTF((stderr, "*** Final(%p,%p,%p,%zd) hashctx %p digest %p\n", ctx, datap, lenp, asAscii, ctx->hashctx, digest)); -+/* FIX: check rc */ -+ HASH_End(ctx->hashctx, digest, (unsigned int *) &digestlen, digestlen); -+ -+ /* Return final digest. */ -+ if (!asAscii) { -+ if (lenp) *lenp = digestlen; -+ if (datap) { -+ *datap = digest; -+ digest = NULL; -+ } -+ } else { -+ if (lenp) *lenp = (2*digestlen) + 1; -+ if (datap) { -+ const uint8_t * s = (const uint8_t *) digest; -+ *datap = pgpHexStr(s, digestlen); -+ } -+ } -+ if (digest) { -+ memset(digest, 0, digestlen); /* In case it's sensitive */ -+ free(digest); -+ } -+ HASH_Destroy(ctx->hashctx); -+ memset(ctx, 0, sizeof(*ctx)); /* In case it's sensitive */ -+ free(ctx); -+ return 0; -+} ---- ./rpmio/rpmpgp.c.orig 2010-12-03 12:11:57.000000000 +0000 -+++ ./rpmio/rpmpgp.c 2011-05-10 16:01:58.000000000 +0000 -@@ -20,9 +20,6 @@ static int _debug = 0; - - static int _print = 0; - --static int _crypto_initialized = 0; --static int _new_process = 1; -- - typedef const struct pgpValTbl_s { - int val; - char const * const str; -@@ -315,89 +312,6 @@ int pgpValTok(pgpValTbl vs, const char * - } while ((++vs)->val != -1); - return vs->val; - } --/** -- * @return 0 on success -- */ --static int pgpMpiSet(const char * pre, unsigned int lbits, -- uint8_t *dest, const uint8_t * p, const uint8_t * pend) --{ -- unsigned int mbits = pgpMpiBits(p); -- unsigned int nbits; -- size_t nbytes; -- uint8_t *t = dest; -- unsigned int ix; -- -- if ((p + ((mbits+7) >> 3)) > pend) -- return 1; -- -- if (mbits > lbits) -- return 1; -- -- nbits = (lbits > mbits ? lbits : mbits); -- nbytes = ((nbits + 7) >> 3); -- ix = (nbits - mbits) >> 3; -- --if (_debug) --fprintf(stderr, "*** mbits %u nbits %u nbytes %zu ix %u\n", mbits, nbits, nbytes, ix); -- if (ix > 0) memset(t, '\0', ix); -- memcpy(t+ix, p+2, nbytes-ix); --if (_debug) --fprintf(stderr, "*** %s %s\n", pre, pgpHexStr(dest, nbytes)); -- -- return 0; --} -- --/** -- * @return NULL on error -- */ --static SECItem *pgpMpiItem(PRArenaPool *arena, SECItem *item, const uint8_t *p) --{ -- size_t nbytes = pgpMpiLen(p)-2; -- -- if (item == NULL) { -- if ((item=SECITEM_AllocItem(arena, item, nbytes)) == NULL) -- return item; -- } else { -- if (arena != NULL) -- item->data = PORT_ArenaGrow(arena, item->data, item->len, nbytes); -- else -- item->data = PORT_Realloc(item->data, nbytes); -- -- if (item->data == NULL) { -- if (arena == NULL) -- SECITEM_FreeItem(item, PR_TRUE); -- return NULL; -- } -- } -- -- memcpy(item->data, p+2, nbytes); -- item->len = nbytes; -- return item; --} --/*@=boundswrite@*/ -- --static SECKEYPublicKey *pgpNewPublicKey(KeyType type) --{ -- PRArenaPool *arena; -- SECKEYPublicKey *key; -- -- arena = PORT_NewArena(DER_DEFAULT_CHUNKSIZE); -- if (arena == NULL) -- return NULL; -- -- key = PORT_ArenaZAlloc(arena, sizeof(SECKEYPublicKey)); -- -- if (key == NULL) { -- PORT_FreeArena(arena, PR_FALSE); -- return NULL; -- } -- -- key->keyType = type; -- key->pkcs11ID = CK_INVALID_HANDLE; -- key->pkcs11Slot = NULL; -- key->arena = arena; -- return key; --} - - /** \ingroup rpmpgp - * Is buffer at beginning of an OpenPGP packet? -@@ -593,29 +507,16 @@ static int pgpPrtSigParams(pgpTag tag, u - { - const uint8_t * pend = h + hlen; - size_t i; -- SECItem dsaraw; -- unsigned char dsabuf[2*DSA_SUBPRIME_LEN]; - char *mpi; - -- dsaraw.type = 0; -- dsaraw.data = dsabuf; -- dsaraw.len = sizeof(dsabuf); -- - for (i = 0; p < pend; i++, p += pgpMpiLen(p)) { - if (pubkey_algo == PGPPUBKEYALGO_RSA) { - if (i >= 1) break; - if (_dig && - (sigtype == PGPSIGTYPE_BINARY || sigtype == PGPSIGTYPE_TEXT)) - { -- switch (i) { -- case 0: /* m**d */ -- _dig->sigdata = pgpMpiItem(NULL, _dig->sigdata, p); -- if (_dig->sigdata == NULL) -- return 1; -- break; -- default: -- break; -- } -+ if (pgpSetSigMpiRSA(_dig, i, p)) -+ return 1; - } - pgpPrtStr("", pgpSigRSA[i]); - } else if (pubkey_algo == PGPPUBKEYALGO_DSA) { -@@ -623,30 +524,8 @@ static int pgpPrtSigParams(pgpTag tag, u - if (_dig && - (sigtype == PGPSIGTYPE_BINARY || sigtype == PGPSIGTYPE_TEXT)) - { -- int xx; -- xx = 0; -- switch (i) { -- case 0: -- memset(dsaraw.data, '\0', 2*DSA_SUBPRIME_LEN); -- /* r */ -- xx = pgpMpiSet(pgpSigDSA[i], DSA_SUBPRIME_LEN*8, dsaraw.data, p, pend); -- break; -- case 1: /* s */ -- xx = pgpMpiSet(pgpSigDSA[i], DSA_SUBPRIME_LEN*8, dsaraw.data + DSA_SUBPRIME_LEN, p, pend); -- if (_dig->sigdata != NULL) -- SECITEM_FreeItem(_dig->sigdata, PR_FALSE); -- else if ((_dig->sigdata=SECITEM_AllocItem(NULL, NULL, 0)) == NULL) { -- xx = 1; -- break; -- } -- if (DSAU_EncodeDerSig(_dig->sigdata, &dsaraw) != SECSuccess) -- xx = 1; -- break; -- default: -- xx = 1; -- break; -- } -- if (xx) return xx; -+ if (pgpSetSigMpiDSA(_dig, i, p)) -+ return 1; - } - pgpPrtStr("", pgpSigDSA[i]); - } else { -@@ -838,49 +717,11 @@ static const uint8_t * pgpPrtPubkeyParam - char * mpi; - if (pubkey_algo == PGPPUBKEYALGO_RSA) { - if (i >= 2) break; -- if (_dig) { -- if (_dig->keydata == NULL) { -- _dig->keydata = pgpNewPublicKey(rsaKey); -- if (_dig->keydata == NULL) -- break; /* error abort? */ -- } -- switch (i) { -- case 0: /* n */ -- pgpMpiItem(_dig->keydata->arena, &_dig->keydata->u.rsa.modulus, p); -- break; -- case 1: /* e */ -- pgpMpiItem(_dig->keydata->arena, &_dig->keydata->u.rsa.publicExponent, p); -- break; -- default: -- break; -- } -- } -+ pgpSetPubMpiRSA(_dig, i, p); - pgpPrtStr("", pgpPublicRSA[i]); - } else if (pubkey_algo == PGPPUBKEYALGO_DSA) { - if (i >= 4) break; -- if (_dig) { -- if (_dig->keydata == NULL) { -- _dig->keydata = pgpNewPublicKey(dsaKey); -- if (_dig->keydata == NULL) -- break; /* error abort? */ -- } -- switch (i) { -- case 0: /* p */ -- pgpMpiItem(_dig->keydata->arena, &_dig->keydata->u.dsa.params.prime, p); -- break; -- case 1: /* q */ -- pgpMpiItem(_dig->keydata->arena, &_dig->keydata->u.dsa.params.subPrime, p); -- break; -- case 2: /* g */ -- pgpMpiItem(_dig->keydata->arena, &_dig->keydata->u.dsa.params.base, p); -- break; -- case 3: /* y */ -- pgpMpiItem(_dig->keydata->arena, &_dig->keydata->u.dsa.publicValue, p); -- break; -- default: -- break; -- } -- } -+ pgpSetPubMpiDSA(_dig, i, p); - pgpPrtStr("", pgpPublicDSA[i]); - } else if (pubkey_algo == PGPPUBKEYALGO_ELGAMAL_ENCRYPT) { - if (i >= 3) break; -@@ -1265,15 +1106,7 @@ void pgpCleanDig(pgpDig dig) - memset(&dig->signature, 0, sizeof(dig->signature)); - memset(&dig->pubkey, 0, sizeof(dig->pubkey)); - -- if (dig->keydata != NULL) { -- SECKEY_DestroyPublicKey(dig->keydata); -- dig->keydata = NULL; -- } -- -- if (dig->sigdata != NULL) { -- SECITEM_ZfreeItem(dig->sigdata, PR_TRUE); -- dig->sigdata = NULL; -- } -+ pgpCleanRSADSA(dig); - } - return; - } -@@ -1315,39 +1148,6 @@ int pgpPrtPkts(const uint8_t * pkts, siz - return 0; - } - --static SECOidTag getSigAlg(pgpDigParams sigp) --{ -- SECOidTag sigalg = SEC_OID_UNKNOWN; -- if (sigp->pubkey_algo == PGPPUBKEYALGO_DSA) { -- /* assume SHA1 for now, NSS doesn't have SECOID's for other types */ -- sigalg = SEC_OID_ANSIX9_DSA_SIGNATURE_WITH_SHA1_DIGEST; -- } else if (sigp->pubkey_algo == PGPPUBKEYALGO_RSA) { -- switch (sigp->hash_algo) { -- case PGPHASHALGO_MD5: -- sigalg = SEC_OID_PKCS1_MD5_WITH_RSA_ENCRYPTION; -- break; -- case PGPHASHALGO_MD2: -- sigalg = SEC_OID_PKCS1_MD2_WITH_RSA_ENCRYPTION; -- break; -- case PGPHASHALGO_SHA1: -- sigalg = SEC_OID_PKCS1_SHA1_WITH_RSA_ENCRYPTION; -- break; -- case PGPHASHALGO_SHA256: -- sigalg = SEC_OID_PKCS1_SHA256_WITH_RSA_ENCRYPTION; -- break; -- case PGPHASHALGO_SHA384: -- sigalg = SEC_OID_PKCS1_SHA384_WITH_RSA_ENCRYPTION; -- break; -- case PGPHASHALGO_SHA512: -- sigalg = SEC_OID_PKCS1_SHA512_WITH_RSA_ENCRYPTION; -- break; -- default: -- break; -- } -- } -- return sigalg; --} -- - char *pgpIdentItem(pgpDigParams digp) - { - char *id = NULL; -@@ -1396,30 +1196,12 @@ rpmRC pgpVerifySig(pgpDig dig, DIGEST_CT - - /* Compare leading 16 bits of digest for quick check. */ - if (hash && memcmp(hash, sigp->signhash16, 2) == 0) { -- SECItem digest = { .type = siBuffer, .data = hash, .len = hashlen }; -- SECItem *sig = dig->sigdata; -- -- /* Zero-pad RSA signature to expected size if necessary */ -- if (sigp->pubkey_algo == PGPPUBKEYALGO_RSA) { -- size_t siglen = SECKEY_SignatureLen(dig->keydata); -- if (siglen > sig->len) { -- size_t pad = siglen - sig->len; -- if ((sig = SECITEM_AllocItem(NULL, NULL, siglen)) == NULL) { -- goto exit; -- } -- memset(sig->data, 0, pad); -- memcpy(sig->data+pad, dig->sigdata->data, dig->sigdata->len); -- } -- } -- -- /* XXX VFY_VerifyDigest() is deprecated in NSS 3.12 */ -- if (VFY_VerifyDigest(&digest, dig->keydata, sig, -- getSigAlg(sigp), NULL) == SECSuccess) { -- res = RPMRC_OK; -- } -- -- if (sig != dig->sigdata) { -- SECITEM_ZfreeItem(sig, 1); -+ if (sigp->pubkey_algo == PGPPUBKEYALGO_RSA) { -+ if (!pgpVerifyRSA(dig, hash, hashlen)) -+ res = RPMRC_OK; -+ } else if (sigp->pubkey_algo == PGPPUBKEYALGO_DSA) { -+ if (!pgpVerifyDSA(dig, hash, hashlen)) -+ res = RPMRC_OK; - } - } - -@@ -1607,50 +1389,3 @@ char * pgpArmorWrap(int atype, const uns - return val; - } - --/* -- * Only flag for re-initialization here, in the common case the child -- * exec()'s something else shutting down NSS here would be waste of time. -- */ --static void at_forkchild(void) --{ -- _new_process = 1; --} -- --int rpmInitCrypto(void) { -- int rc = 0; -- -- /* Lazy NSS shutdown for re-initialization after fork() */ -- if (_new_process && _crypto_initialized) { -- rpmFreeCrypto(); -- } -- -- /* Initialize NSS if not already done */ -- if (!_crypto_initialized) { -- if (NSS_NoDB_Init(NULL) != SECSuccess) { -- rc = -1; -- } else { -- _crypto_initialized = 1; -- } -- } -- -- /* Register one post-fork handler per process */ -- if (_new_process) { -- if (pthread_atfork(NULL, NULL, at_forkchild) != 0) { -- rpmlog(RPMLOG_WARNING, _("Failed to register fork handler: %m\n")); -- } -- _new_process = 0; -- } -- return rc; --} -- --int rpmFreeCrypto(void) --{ -- int rc = 0; -- if (_crypto_initialized) { -- rc = (NSS_Shutdown() != SECSuccess); -- _crypto_initialized = 0; -- } -- return rc; --} -- -- diff --git a/rpm-gst-provides.patch b/rpm-gst-provides.patch deleted file mode 100644 index 7c4fe6c..0000000 --- a/rpm-gst-provides.patch +++ /dev/null @@ -1,14 +0,0 @@ -Index: ./autodeps/linux.prov -=================================================================== ---- ./autodeps/linux.prov -+++ ./autodeps/linux.prov -@@ -102,4 +102,9 @@ fi - [ -x /usr/lib/rpm/find-provides.ksyms ] && - printf "%s\n" "${filelist[@]}" | /usr/lib/rpm/find-provides.ksyms "$@" - -+# -+# --- GStreamer provides, codecs -+[ -x /usr/lib/rpm/gstreamer-provides ] && -+ printf "%s\n" "${filelist[@]}" | /usr/lib/rpm/gstreamer-provides | sort -u -+ - exit 0 diff --git a/rpm-python.changes b/rpm-python.changes index 2c2353d..0746aa6 100644 --- a/rpm-python.changes +++ b/rpm-python.changes @@ -1,58 +1,3 @@ -------------------------------------------------------------------- -Wed Feb 23 14:01:41 CET 2011 - mls@suse.de - -- drop standard python directories from filelist [bnc#229189] - -------------------------------------------------------------------- -Fri Oct 22 15:52:32 UTC 2010 - coolo@novell.com - -- adapt second spec file to changes done to rpm.spec - -------------------------------------------------------------------- -Mon Oct 18 11:03:53 CEST 2010 - dmueller@suse.de - -- adapt buildrequires - -------------------------------------------------------------------- -Thu Feb 12 16:52:26 CET 2009 - ro@suse.de - -- adapt buildrequires - -------------------------------------------------------------------- -Wed Oct 8 11:24:22 CEST 2008 - cthiel@suse.de - -- added libelf-devel to BuildRequires to fix build - -------------------------------------------------------------------- -Thu Sep 11 15:33:52 CEST 2008 - mls@suse.de - -- update to 4.4.2.3 to get rid of >50 patches - -------------------------------------------------------------------- -Sat Aug 30 21:23:38 CEST 2008 - cthiel@suse.de - -- add libselinux-devel to BuildRequires - -------------------------------------------------------------------- -Thu Aug 7 16:05:51 CEST 2008 - dmueller@suse.de - -- fix build against python 2.6 - -------------------------------------------------------------------- -Thu Mar 27 14:47:18 CET 2008 - coolo@suse.de - -- fix buildrequires - -------------------------------------------------------------------- -Fri May 25 16:20:53 CEST 2007 - mls@suse.de - -- fix unicode queries - -------------------------------------------------------------------- -Fri Mar 30 15:06:28 CEST 2007 - rguenther@suse.de - -- add ncurses-devel and zlib-devel BuildRequires. - ------------------------------------------------------------------- Wed Oct 18 22:59:02 CEST 2006 - mls@suse.de diff --git a/rpm-python.spec b/rpm-python.spec index 60aa95f..ef05e37 100644 --- a/rpm-python.spec +++ b/rpm-python.spec @@ -1,37 +1,27 @@ # -# spec file for package rpm-python +# spec file for package rpm-python (Version 4.4.2) # -# Copyright (c) 2011 SUSE LINUX Products GmbH, Nuernberg, Germany. +# Copyright (c) 2006 SUSE LINUX Products GmbH, Nuernberg, Germany. +# This file and all modifications and additions to the pristine +# package are under the same license as the package itself. # -# All modifications and additions to the file contributed by third parties -# remain the property of their copyright owners, unless otherwise agreed -# upon. The license for this file, and modifications and additions to the -# file, is the same license as for the pristine package itself (unless the -# license for the pristine package is not an Open Source License, in which -# case the license is the MIT License). An "Open Source License" is a -# license that conforms to the Open Source Definition (Version 1.9) -# published by the Open Source Initiative. - # Please submit bugfixes or comments via http://bugs.opensuse.org/ # # norootforbuild - Name: rpm-python -BuildRequires: file-devel libbz2-devel libelf-devel libselinux-devel libsemanage-devel lua-devel ncurses-devel popt-devel -BuildRequires: libacl-devel libcap-devel python-devel xz-devel zlib-devel -#!BuildIgnore: rpmlint-Factory -License: GPLv2+ +BuildRequires: python-devel +License: GNU General Public License (GPL) Group: System/Packages Summary: Python Bindings for Manipulating RPM Packages -Version: 4.9.0 -Release: 7 +Version: 4.4.2 +Release: 76 Requires: rpm = %{version} + %py_requires Source99: rpm.spec %{expand:%(sed -n -e '/^Source:/,/^BuildRoot:/p' <%_sourcedir/rpm.spec)} -%global with_python 1 %description The rpm-python package contains a module that permits applications @@ -54,7 +44,7 @@ Authors: %install rm -rf $RPM_BUILD_ROOT mkdir -p $RPM_BUILD_ROOT/usr/lib -# only installing in python/ does not work because rpm links against +# only installing in python/ does not work because rpm links agains # installed libs at install time make DESTDIR="$RPM_BUILD_ROOT" install find "%{buildroot}" -not -type d -and -not -path %{buildroot}%{_libdir}/python%{py_ver}/site-packages/rpm/\* -print0 | xargs -0 rm @@ -69,6 +59,22 @@ rm -rf $RPM_BUILD_ROOT %files %defattr(-,root,root) -%{_libdir}/python*/*/* +%{_libdir}/python* -%changelog +%changelog -n rpm-python +* Wed Oct 18 2006 - mls@suse.de +- use rpm.spec for building instead of duplication everything +- delete superfluous .a and .la files [#202604] +- create .pyc and .pyo files [#205711] +* Sun Oct 15 2006 - schwab@suse.de +- Make sure config.rpath is present. +* Fri Sep 22 2006 - aj@suse.de +- Fix for python2.5. +* Thu Sep 21 2006 - lnussel@suse.de +- do not package beecrypt python bindings as libbeecrypt is not + packaged either +- fix literal %%{version} in Requires tag +* Thu Sep 21 2006 - lnussel@suse.de +- fix build with python 2.5 by overriding autodetection +* Tue Sep 19 2006 - rguenther@suse.de +- split from rpm package diff --git a/rpm-shorten-changelog.diff b/rpm-shorten-changelog.diff deleted file mode 100644 index 7090250..0000000 --- a/rpm-shorten-changelog.diff +++ /dev/null @@ -1,88 +0,0 @@ ---- ./build/pack.c.orig 2011-02-15 13:03:56.000000000 +0000 -+++ ./build/pack.c 2011-05-11 15:35:07.000000000 +0000 -@@ -671,6 +671,63 @@ static rpmRC checkPackages(char *pkgchec - return RPMRC_OK; - } - -+static void trimChangelog(Header h) -+{ -+ static int oneshot; -+ static int cuttime, minnum, maxnum; -+ int * times; -+ char ** names = 0, ** texts = 0; -+ int i, keep, count = 0; -+ -+ if (!oneshot) { -+ char *binarychangelogtrim = rpmExpand("%{?_binarychangelogtrim}", NULL); -+ oneshot = 1; -+ if (binarychangelogtrim && *binarychangelogtrim) { -+ maxnum = atoi(binarychangelogtrim); -+ binarychangelogtrim = strchr(binarychangelogtrim, ','); -+ if (binarychangelogtrim) -+ binarychangelogtrim++; -+ } -+ if (binarychangelogtrim && *binarychangelogtrim) { -+ cuttime = atoi(binarychangelogtrim); -+ binarychangelogtrim = strchr(binarychangelogtrim, ','); -+ if (binarychangelogtrim) -+ binarychangelogtrim++; -+ } -+ if (binarychangelogtrim && *binarychangelogtrim) { -+ minnum = atoi(binarychangelogtrim); -+ binarychangelogtrim = strchr(binarychangelogtrim, ','); -+ } -+ } -+ if (!cuttime && !minnum && !maxnum) { -+ return; -+ } -+ if (!headerGetEntry(h, RPMTAG_CHANGELOGTIME, NULL, (void **) ×, &count)) -+ return; -+ if ((!cuttime || count <= minnum) && (!maxnum || count <= maxnum)) { -+ return; -+ } -+ keep = count; -+ if (maxnum && keep > maxnum) -+ keep = maxnum; -+ if (cuttime) { -+ for (i = 0; i < keep; i++) { -+ if (i >= minnum && times[i] < cuttime) -+ break; -+ } -+ keep = i; -+ } -+ if (keep >= count) -+ return; -+ headerGetEntry(h, RPMTAG_CHANGELOGNAME, NULL, (void **) &names, &count); -+ headerGetEntry(h, RPMTAG_CHANGELOGTEXT, NULL, (void **) &texts, &count); -+ headerModifyEntry(h, RPMTAG_CHANGELOGTIME, RPM_INT32_TYPE, times, keep); -+ headerModifyEntry(h, RPMTAG_CHANGELOGNAME, RPM_STRING_ARRAY_TYPE, names, keep); -+ headerModifyEntry(h, RPMTAG_CHANGELOGTEXT, RPM_STRING_ARRAY_TYPE, texts, keep); -+ free(names); -+ free(texts); -+} -+ - rpmRC packageBinaries(rpmSpec spec, const char *cookie, int cheating) - { - struct cpioSourceArchive_s csabuf; -@@ -680,6 +737,7 @@ rpmRC packageBinaries(rpmSpec spec, cons - Package pkg; - char *pkglist = NULL; - -+ trimChangelog(spec->packages->header); - for (pkg = spec->packages; pkg != NULL; pkg = pkg->next) { - char *fn; - ---- ./build/parseChangelog.c.orig 2010-12-03 12:11:57.000000000 +0000 -+++ ./build/parseChangelog.c 2011-05-11 15:33:22.000000000 +0000 -@@ -168,6 +168,11 @@ static rpmRC addChangelog(Header h, ARGV - return RPMRC_FAIL; - } - -+ /* workaround old suse oddity */ -+ if (*s == '-' && s[1] == ' ') { -+ s += 2; -+ } -+ - /* name */ - name = s; - while (*s != '\0') s++; diff --git a/rpm-suse_macros b/rpm-suse_macros index 37237e0..12d409f 100644 --- a/rpm-suse_macros +++ b/rpm-suse_macros @@ -1,5 +1,10 @@ -# need to keep this around for a while -%suse_check %{nil} +%suse_check \ + %{?buildroot:RPM_BUILD_ROOT=\"%{buildroot}\"\ + export RPM_BUILD_ROOT}\ + test -x /usr/sbin/Check -a $UID = 0 -o -x /usr/sbin/Check -a ! -z "$RPM_BUILD_ROOT" && {\ + echo "I call /usr/sbin/Check..."\ + /usr/sbin/Check\ + } # directories %_infodir %{_prefix}/share/info @@ -9,20 +14,35 @@ %_defaultdocdir %{_usr}/share/doc/packages # package build macros -%make_install make install DESTDIR=%{?buildroot} -%makeinstall make DESTDIR=%{?buildroot:%{buildroot}} install -%rb_arch %(echo %{_host_cpu}-linux | sed -e "s/i686/i586/" -e "s/armv5tel/armv4l/" -e "s/hppa2.0/hppa/") -%rb_ver %(/usr/bin/ruby -e 'puts VERSION.sub(/\\\.\\\d$/, "")') -%insserv_prereq insserv sed -%fillup_prereq fillup coreutils grep diffutils -%suseconfig_fonts_prereq perl aaa_base +%makeinstall make DESTDIR=%{buildroot} install +%tcl_version %(echo 'puts [package require Tcl]' | tclsh) +%insserv_prereq insserv +%fillup_prereq fillup fileutils %install_info_prereq info -# _suse_os_install_post is defined in brp-checks-suse -%__os_install_post %{?_suse_os_install_post}%{!?_suse_os_install_post: \ +%__os_install_post \ + %{suse_check} \ /usr/lib/rpm/brp-compress \ - /usr/lib/rpm/brp-symlink \ -%{nil}} +%{nil} + +# perl_vendorarch is defined +# perl_vendorlib is defined +%perl_make_install make DESTDIR=$RPM_BUILD_ROOT install_vendor + +%perl_process_packlist(n:) \ + mkdir -p $RPM_BUILD_ROOT/var/adm/perl-modules \ + test -f $RPM_BUILD_ROOT%{perl_archlib}/perllocal.pod && { sed -e "s@$RPM_BUILD_ROOT@@g" < $RPM_BUILD_ROOT%{perl_archlib}/perllocal.pod > $RPM_BUILD_ROOT/var/adm/perl-modules/%{-n:%{-n*}}%{!-n:%{name}} ; } ; \ + test -n "$RPM_BUILD_ROOT" -a -d $RPM_BUILD_ROOT/%perl_sitearch/auto && find $RPM_BUILD_ROOT/%perl_sitearch/auto -name .packlist -print0 | xargs -0 -r perl -spi -e "s@$RPM_BUILD_ROOT@@g" ; \ + test -n "$RPM_BUILD_ROOT" -a -d $RPM_BUILD_ROOT/%perl_vendorarch/auto && find $RPM_BUILD_ROOT/%perl_vendorarch/auto -name .packlist -print0 | xargs -0 -r perl -spi -e "s@$RPM_BUILD_ROOT@@g" ; \ + rm -f $RPM_BUILD_ROOT%{perl_archlib}/perllocal.pod \ + %nil + +# macro: %suse_update_desktop_file +# Used to add easily a category to .desktop files according to XDG +# standard. +%suse_update_desktop_file(:-:) \ + /usr/lib/rpm/suse_update_desktop_file.sh %{**} || exit 1 \ + %nil # macro: %restart_on_update() # Used to restart a service in postun section, if we are @@ -68,7 +88,6 @@ %is_plus %(if test -f /.buildenv ; then source /.buildenv ; if [[ "$BUILD_BASENAME" == *+kde ]] ; then echo 1 ; else echo 0 ; fi ; else echo 0 ; fi) -# deprecated, use %set_permissions instead %run_permissions() \ if test "$YAST_IS_RUNNING" != "instsys" ; then \ if test -x /sbin/SuSEconfig -a -f /sbin/conf.d/SuSEconfig.permissions ; then \ @@ -83,37 +102,23 @@ if test -x /sbin/SuSEconfig -a -f /sbin/conf.d/SuSEconfig.%{-m*} ; then \ /sbin/SuSEconfig --module %{-m*} \ else \ - echo -e "\\nWARNING: SuSEconfig or requested SuSEconfig module not present!\\n" ; \ + echo -e "\\nERROR: SuSEconfig or requested SuSEconfig module not present!\\n" ; exit 1 \ fi \ fi \ %nil -# macro: run_suseconfig_fonts -# call SuSEconfig modules necessary for font setup -# options: -# -c (the fonts are CJK fonts, also do setup which is only needed -# for CJK) -%run_suseconfig_fonts(c) \ - if test -z "$YAST_IS_RUNNING" ; then \ - if test -x /sbin/conf.d/SuSEconfig.fonts ; then \ - %run_suseconfig -m fonts \ - fi \ - %{-c:if test -x /sbin/conf.d/SuSEconfig.ghostscript-cjk ; then \ - %run_suseconfig -m ghostscript-cjk \ - fi} \ - fi \ - %nil - -%set_permissions(f:) \ - if [ -x /usr/bin/chkstat ]; then \ - /usr/bin/chkstat -n --set --system %{**} \ - fi \ - %nil - -%verify_permissions(e:f:) \ - /usr/bin/chkstat -n --warn --system %{**} 1>&2 \ +%verify_permissions(:-:) \ + if test -f /etc/sysconfig/security ; then \ + source /etc/sysconfig/security \ + fi \ + PERMFILES="/etc/permissions" \ + for PERMEXT in $PERMISSION_SECURITY ; do \ + if test -f /etc/permissions.$PERMEXT ; then \ + PERMFILES="$PERMFILES /etc/permissions.$PERMEXT" \ + fi \ + done \ + /usr/bin/chkstat -n %{**} $PERMFILES 1>&2 \ %nil - # %{suse_update_config [-fcl] [dirs...]} # -f: force, ignore timestamp # -c: no config.guess,config.sub @@ -174,9 +179,11 @@ # instead of package name) # -f (skip fillup parts) # -i (skip insserv parts) +# -s (specify START_ variable names, otherwise tr a-z A-Z is used) # -y (default start-variable value to yes) # Used only if X-UnitedLinux-Default-Enabled is not specified # in the init script +# -p (ignored for backwards compatibility) # -Y (force_yes: always activate, discard setting before update) # arguments: # [if "-n" first argument as package name] @@ -185,61 +192,110 @@ # and # name of (old) START variable (unless -s is given) # -# template for variables into /etc/sysconfig/package: -# /var/adm/fillup-templates/sysconfig.package +# template for variables into etc/sysconfig/package: +# var/adm/fillup-templates/sysconfig.package +# template for variables into etc/rc.config: +# var/adm/fillup-templates/rc.config.package %fillup_and_insserv(finpsyY) \ - %{-p:echo "-p option for fillup_and_insserv no longer supported (ever only used on SL8.0)"; exit 1;} \ - %{-s:echo "STARTVAR for fillup_and_insserv no longer supported (rc.config is gone since SL8.0)"; exit 1;} \ - test -n "$FIRST_ARG" || FIRST_ARG=$1 \ - %{-Y:FORCE_YES=1}%{!-Y:FORCE_YES=0} \ - set -- %{?*} \ - %{-n:PNAME=$1 ; shift }%{!-n:PNAME=%{name}} \ - INSSRV_ARRAY="" \ - while [ ${#*} -gt 0 ] ; do \ - SCRIPTNAME=$1 \ - shift \ - SV_B='^### BEGIN INIT INFO' \ - SV_E='^### END INIT INFO' \ - SV_KW=Default-Enabled \ - SV_VALUE=`sed -n -e "/$SV_B/,/$SV_E/{/^# [^[:space:]]*$SV_KW:[[:space:]]*\\([^[:space:]]*\\).*/s//\\1/p;}" < /etc/init.d/$SCRIPTNAME` \ - test "$FORCE_YES" = "1" && SV_VALUE="yes" \ - test -n "$SV_VALUE" || SV_VALUE=%{-y:"yes"}%{!-y:"no"} \ - INSSRV_ARRAY="$INSSRV_ARRAY $SCRIPTNAME $SV_VALUE" \ - done \ - %{!-f: %{do_real_fillup}} \ - %{!-i: %{add_start_if_needed $INSSRV_ARRAY } } \ - %nil + test -n "$FIRST_ARG" || FIRST_ARG=$1 \ + %{-Y:FORCE_YES=1}%{!-Y:FORCE_YES=0} \ + REMOVED_START=no \ + set -- %{?*} \ + %{-n:PNAME=$1 ; shift }%{!-n:PNAME=%{name}} \ + INSSRV_ARRAY="" \ + while [ ${#*} -gt 0 ] ; do \ + SCRIPTNAME=$1 \ + shift \ + %{-s:STARTVAR=$1 ; shift} \ + %{!-s:STARTVAR=START_`echo $SCRIPTNAME | tr a-z.- A-Z__`} \ + SV_B='^### BEGIN INIT INFO' \ + SV_E='^### END INIT INFO' \ + SV_KW=X-UnitedLinux-Default-Enabled \ + SV_VAL=`sed -n -e "/$SV_B/,/$SV_E/{/^# $SV_KW:[[:space:]]*\\([^[:space:]]*\\).*/s//\\1/p;}" < etc/init.d/$SCRIPTNAME` \ + test -n "$SV_VAL" || SV_VAL=%{-y:"yes"}%{!-y:"no"} \ + eval $STARTVAR=$SV_VAL \ + test -n "$STARTVAR" -a -n "$SCRIPTNAME" || { \ + echo "STARTVARIABLE or SCRIPTNAME unknown" \ + exit 1 \ + } \ + INSSRV_ARRAY="$INSSRV_ARRAY $SCRIPTNAME $STARTVAR" \ + %{!-f:%{!-i:grep -q "$STARTVAR=" var/adm/fillup-templates/rc.config.$PNAME.del 2>/dev/null || \ + echo -e "#\\n# Start service $SCRIPTNAME\\n#\\n$STARTVAR=\\"${!STARTVAR}\\"\\n\\n" >> var/adm/fillup-templates/rc.config.$PNAME.del } } \ + done \ + %{!-f: %{do_real_fillup}} \ + %{!-i: %{add_start_if_needed $INSSRV_ARRAY } } # do_real_fillup: internal macro # this part really calls fillup for the appropriate files # %do_real_fillup() \ - TEMPLATE_DIR=/var/adm/fillup-templates \ + TEMPLATE_DIR=var/adm/fillup-templates \ SYSC_TEMPLATE=$TEMPLATE_DIR/sysconfig.$PNAME \ + RC_TEMPLATE=$TEMPLATE_DIR/rc.config.$PNAME \ SD_NAME="" \ - %{sysc_fillup} + if [ -x bin/fillup ] ; then \ + %{sysc_fillup} \ + # remove the START_ variables from the base fillup template \ + if [ -f $RC_TEMPLATE.del -a -f $RC_TEMPLATE ] ; then \ + bin/fillup -q -r -i $RC_TEMPLATE $RC_TEMPLATE.del /dev/null \ + mv $RC_TEMPLATE.new $RC_TEMPLATE \ + fi \ + if [ -f etc/rc.config ] ; then \ + %{rc_fillup} \ + # remove the deprecated START_ variables from rc.config \ + if [ -f $TEMPLATE_DIR/rc.config.$PNAME.del ] ; then \ + rm -f etc/rc.config.xtract \ + bin/fillup -q -r -i etc/rc.config $RC_TEMPLATE.del etc/rc.config.xtract \ + if [ -f etc/rc.config.xtract ] ; then \ + . etc/rc.config.xtract \ + fi \ + rm -f etc/rc.config.xtract $RC_TEMPLATE.del \ + if [ -f etc/rc.config.new ] ; then \ + cmp -s etc/rc.config.new etc/rc.config || REMOVED_START=yes \ + mv etc/rc.config.new etc/rc.config \ + fi \ + fi \ + fi \ + else \ + echo "ERROR: fillup not found. This should not happen. Please compare" \ + echo "etc/rc.config and $TEMPLATE_DIR/rc.config.$PNAME and" \ + echo "update by hand." \ + fi # add_start_if_needed: internally used by fillup_and_insserv %add_start_if_needed() \ - set -- %{?*} \ + set -- %{?*} \ while [ ${#*} -gt 0 ] ; do \ SCRIPTNAME=$1 \ - SV_VALUE=$2 \ + STARTVAR=$2 \ shift 2 \ - test -n "$SCRIPTNAME" -a -n "$SV_VALUE" || { echo "SCRIPTNAME or SV_VALUE unknown"; exit 1;} \ - if test "$FIRST_ARG" = "1" -a "$SV_VALUE" = "no" ; then \ - /sbin/insserv ${YAST_IS_RUNNING:+-f} -r /etc/init.d/$SCRIPTNAME \ - elif test "$FIRST_ARG" = "1" -o "$FORCE_YES" = "1" ; then \ - /sbin/insserv ${YAST_IS_RUNNING:+-f} /etc/init.d/$SCRIPTNAME \ + test -n "$STARTVAR" -a -n "$SCRIPTNAME" || { \ + echo "STARTVAR or SCRIPTNAME unknown" \ + exit 1 \ + } \ + if test "$FIRST_ARG" = "1" -o "$REMOVED_START" = "yes" -o "$FORCE_YES" = "1" ; then \ + if test -n "$YAST_IS_RUNNING" ; then \ + INSSERV_FORCE="-f" \ + else \ + INSSERV_FORCE="" \ + fi \ + if test "${!STARTVAR}" = "yes" -o "$FORCE_YES" = "1" ; then \ + sbin/insserv $INSSERV_FORCE etc/init.d/$SCRIPTNAME \ + else \ + sbin/insserv $INSSERV_FORCE -r etc/init.d/$SCRIPTNAME \ + fi \ fi \ done # macro: insserv_cleanup +# only here to be able to define this to nil +# for versions prior to 7.1 %insserv_cleanup() \ - /sbin/insserv /etc/init.d + sbin/insserv etc/init.d # macro: fillup_only -# do the fillup for sysconfig files +# do the fillup for sysconfig files and if needed extraction +# of older variables from rc.config and rc.config.d # template naming convention: # .../fillup-templates/sysconfig.$NAME1[-$NAME2] # NAME1: the name of the sysconfig-file @@ -252,115 +308,152 @@ # -d use a subdirectory of sysconfig # (last arg as directory name) %fillup_only(dans) \ - %{-n:PNAME=%{1}}%{!-n:PNAME=%{name}} \ - %{-s:SUBPNAME=-%{2}}%{!-s:SUBPNAME=%{-a:-%{name}}} \ - TEMPLATE_DIR=/var/adm/fillup-templates \ + %{-n:PNAME=%{1}}%{!-n:PNAME=%{name}} \ + %{-s:SUBPNAME=-%{2}}%{!-s:SUBPNAME=%{-a:-%{name}}} \ + TEMPLATE_DIR=var/adm/fillup-templates \ SYSC_TEMPLATE=$TEMPLATE_DIR/sysconfig.$PNAME$SUBPNAME \ + RC_TEMPLATE=$TEMPLATE_DIR/rc.config.$PNAME \ SD_NAME="" \ %{-d:%{-s:SD_NAME=%{3}/}%{!-s:SD_NAME=%{2}/}} \ - %{sysc_fillup} \ - %nil - -# internal only: sysc_fillup -%sysc_fillup() \ - if [ -x /bin/fillup ] ; then \ - if [ -f $SYSC_TEMPLATE ] ; then \ - echo "Updating /etc/sysconfig/$SD_NAME$PNAME..." \ - mkdir -p /etc/sysconfig/$SD_NAME \ - touch /etc/sysconfig/$SD_NAME$PNAME \ - /bin/fillup -q /etc/sysconfig/$SD_NAME$PNAME $SYSC_TEMPLATE \ - fi \ + if [ -x bin/fillup ] ; then \ + %{sysc_fillup} \ + %{rc_fillup} \ else \ echo "ERROR: fillup not found. This should not happen. Please compare" \ - echo "/etc/sysconfig/$PNAME and $TEMPLATE_DIR/sysconfig.$PNAME and" \ + echo "etc/rc.config and $RC_TEMPLATE and" \ echo "update by hand." \ fi +# internal only: rc_fillup +%rc_fillup() \ + # maybe the fillup template for rc.config is old, make sure we do not readd stuff here \ + if [ -f $SYSC_TEMPLATE -a -f $RC_TEMPLATE ] ; then \ + bin/fillup -q -r -i $RC_TEMPLATE $SYSC_TEMPLATE /dev/null \ + mv $RC_TEMPLATE.new $RC_TEMPLATE \ + fi \ + # do the normal fillup for the rc.config variables \ + if [ -f $RC_TEMPLATE ] ; then \ + bin/fillup -q -d = etc/rc.config $RC_TEMPLATE \ + fi + +# internal only: sysc_fillup +%sysc_fillup() \ + if [ -f $SYSC_TEMPLATE ] ; then \ + echo "Updating etc/sysconfig/$SD_NAME$PNAME..." \ + if [ ! -d etc/sysconfig/$SD_NAME ] ; then \ + mkdir -p etc/sysconfig/$SD_NAME \ + fi \ + if [ -f etc/rc.config.d/$PNAME.rc.config ] ; then \ + if [ -f etc/sysconfig/$SD_NAME$PNAME ] ; then \ + bin/fillup -q etc/sysconfig/$SD_NAME$PNAME etc/rc.config.d/$PNAME.rc.config \ + rm -f etc/rc.config.d/$PNAME.rc.config \ + else \ + mv etc/rc.config.d/$PNAME.rc.config etc/sysconfig/$SD_NAME$PNAME \ + fi \ + fi \ + if [ ! -f etc/rc.config ] ; then \ + test -f etc/sysconfig/$SD_NAME$PNAME || touch etc/sysconfig/$SD_NAME$PNAME \ + bin/fillup -q etc/sysconfig/$SD_NAME$PNAME $SYSC_TEMPLATE \ + else \ + if [ ! -f etc/sysconfig/$SD_NAME$PNAME ] ; then \ + bin/fillup -q -r -i etc/rc.config $SYSC_TEMPLATE etc/sysconfig/$SD_NAME$PNAME \ + else \ + bin/fillup -q -r -i etc/rc.config $SYSC_TEMPLATE etc/sysconfig/$SD_NAME$PNAME.tmp \ + bin/fillup -q etc/sysconfig/$SD_NAME$PNAME etc/sysconfig/$SD_NAME$PNAME.tmp \ + rm -f etc/sysconfig/$SD_NAME$PNAME.tmp \ + fi \ + if [ -f etc/rc.config.new ] ; then \ + mv etc/rc.config.new etc/rc.config \ + fi \ + fi\ + fi + # macro: rename_sysconfig_variable -# as the name says, rename a variable in the file given with -f +# as the name says, rename a variable in rc.config +# or with -f in the given file %rename_sysconfig_variable(f:) \ - %{!-f:echo "missing argument for rename_sysconfig_variable"; exit 1; }%{-f:FILE=%{-f*}} \ - if [ -f $FILE ] ; then \ - sed -i -e "s/^%{1}=/%{2}=/" $FILE \ - fi + %{!-f:FILE=etc/rc.config}%{-f:FILE=%{-f*}} \ + if [ -f $FILE ] ; then \ + sed -e "s/^%{1}=/%{2}=/" $FILE > $FILE.new \ + mv $FILE.new $FILE \ + fi + +# macro: save_rc_config_d_was_in_filelist +# only used for packages that erroneously had the rc.config.d file +# in their filelist +%save_rc_config_d_was_in_filelist(n) \ + %{-n:PNAME=%{?*}}%{!-n:PNAME=%{name}} \ + mkdir -p etc/sysconfig \ + if [ -f etc/rc.config.d/$PNAME.rc.config -a ! -f etc/sysconfig/$PNAME ] ; then \ + cp etc/rc.config.d/$PNAME.rc.config etc/sysconfig/$PNAME \ + fi # macro: remove_and_set -# remove variables from sysconfig.$NAME +# remove variables from rc.config and sysconfig.$NAME # (both if existant) and set them in the environment # for further handling in postinstall # options: -n set package name # -y default to yes if not found (otherwise no) %remove_and_set(n:y) \ - %{-n:PNAME=%{-n*}}%{!-n:PNAME=%{name}} \ - DEF_VAL=%{-y:"yes"}%{!-y:"no"} \ - DEL_TEMPL=/var/adm/fillup-templates/$PNAME.del \ - rm -f $DEL_TEMPL \ - for var in %{?*} ; do \ - echo -e "#\\n$var=$DEF_VAL\\n" >> $DEL_TEMPL \ - done \ - if [ -f /etc/sysconfig/$PNAME ] ; then \ - /bin/fillup -q -t -r -i -d "=" /etc/sysconfig/$PNAME $DEL_TEMPL /etc/sysconfig/$PNAME.deleted.$$ \ - test -f /etc/sysconfig/$PNAME.new && mv /etc/sysconfig/$PNAME.new /etc/sysconfig/$PNAME \ - fi \ - for i in $DEL_TEMPL /etc/sysconfig/$PNAME.deleted.$$ ; do \ - if [ -f $i ] ; then \ - . $i \ - rm -f $i \ - fi \ - done + %{-n:PNAME=%{-n*}}%{!-n:PNAME=%{name}} \ + DEF_VAL=%{-y:"yes"}%{!-y:"no"} \ + DEL_TEMPL=var/adm/fillup-templates/$PNAME.del \ + rm -f $DEL_TEMPL \ + for var in %{?*} ; do \ + echo -e "#\\n$var=$DEF_VAL\\n" >> $DEL_TEMPL \ + done \ + if [ -f etc/rc.config ] ; then \ + bin/fillup -q -t -r -i -d "=" etc/rc.config $DEL_TEMPL etc/rc.config.xtract \ + test -f etc/rc.config.new && mv etc/rc.config.new etc/rc.config \ + fi \ + if [ -f etc/sysconfig/$PNAME ] ; then \ + bin/fillup -q -t -r -i -d "=" etc/sysconfig/$PNAME $DEL_TEMPL etc/rc.config.xtract.too \ + test -f etc/sysconfig/$PNAME.new && mv etc/sysconfig/$PNAME.new etc/sysconfig/$PNAME \ + fi \ + for i in $DEL_TEMPL etc/rc.config.xtract etc/rc.config.xtract.too ; do \ + if [ -f $i ] ; then \ + . $i \ + rm -f $i \ + fi \ + done %insserv_force_if_yast() \ - /sbin/insserv ${YAST_IS_RUNNING:+-f} %{?*} + if test -n "$YAST_IS_RUNNING" ; then \ + INSSERV_FORCE="-f" \ + else \ + INSSERV_FORCE="" \ + fi \ + sbin/insserv $INSSERV_FORCE %{?*} %run_ldconfig /sbin/ldconfig %install_info(:-:) \ - ALL_ARGS=(%{**}) \ - NUM_ARGS=${#ALL_ARGS[@]} \ - if test -x /sbin/install-info ; then \ - if test -e "${ALL_ARGS[$((NUM_ARGS-1))]}" ; then \ - /sbin/install-info "${ALL_ARGS[@]}" \ - fi \ - fi ; + ALL_ARGS=(%{**}) \ + NUM_ARGS=${#ALL_ARGS[@]} \ + if test -x sbin/install-info ; then \ + if test -e "${ALL_ARGS[$((NUM_ARGS-1))]}" ; then \ + sbin/install-info "${ALL_ARGS[@]}" \ + fi \ + fi ; %install_info_delete(:-:) \ - ALL_ARGS=(%{**}) \ - NUM_ARGS=${#ALL_ARGS[@]} \ - if test -x /sbin/install-info ; then \ - if ! test -e "${ALL_ARGS[$((NUM_ARGS-1))]}" ; then \ - /sbin/install-info --quiet --delete "${ALL_ARGS[@]}" \ - fi ; \ - fi ; + ALL_ARGS=(%{**}) \ + NUM_ARGS=${#ALL_ARGS[@]} \ + if test -x sbin/install-info ; then \ + if ! test -e "${ALL_ARGS[$((NUM_ARGS-1))]}" ; then \ + sbin/install-info --quiet --delete "${ALL_ARGS[@]}" \ + fi ; \ + fi ; -# find-supplements.ksyms parses this macro directly out of the spec file: -%supplements_kernel_module() \ - %{expand:%(if ! rpm -q kernel-syms > /dev/null; then echo "%fail Please add the kernel-syms package to BuildRequires"; fi)} - -%suse_version 1140 +%suse_version 901 %sles_version 0 %ul_version 0 + %do_profiling 1 -%cflags_profile_generate -fprofile-generate -%cflags_profile_feedback -fprofile-use - -%suse_install_update_message() \ - install -D -m 644 %1 %buildroot/var/adm/update-messages/%{name}-%{version}-%{release}-%(basename %1).txt \ -%nil - -%suse_install_update_script() \ - install -D -m 755 %1 %buildroot/var/adm/update-scripts/%{name}-%{version}-%{release}-%(basename %1).txt \ -%nil - -# Template for lang sub-package. -%lang_package(n:) \ -%package %{-n:-n %{-n*}-}lang \ -Summary: Languages for package %{name} \ -Group: System/Localization \ -Requires: %{-n:%{-n*}}%{!-n:%{name}} = %{version} \ -Provides: %{-n:%{-n*}}%{!-n:%{name}}-lang-all = %{version} \ -Supplements: packageand(bundle-lang-other:%{-n:%{-n*}}%{!-n:%{name}}) \ -BuildArch: noarch \ -%description %{-n:-n %{-n*}-}lang \ -Provides translations to the package %{name} +%cflags_profile_generate -fprofile-arcs +%cflags_profile_feedback -fbranch-probabilities +# find-supplements.ksyms parses this macro directly out of the spec file: +%supplements_kernel_module() \ + %{expand:%(if ! rpm -q kernel-syms > /dev/null; then echo "%fail Please add the kernel-syms package to BuildRequires"; fi)} diff --git a/rpm.changes b/rpm.changes index 9426b3c..11db5f0 100644 --- a/rpm.changes +++ b/rpm.changes @@ -1,876 +1,3 @@ -------------------------------------------------------------------- -Wed Jun 8 12:02:51 CEST 2011 - mls@suse.de - -- change sigpipe fix so that the code really reads everything - from the pipe - -------------------------------------------------------------------- -Mon Jun 6 14:16:49 UTC 2011 - coolo@novell.com - -- move desktop.attr to update-desktop-files - -------------------------------------------------------------------- -Mon Jun 6 13:30:05 CEST 2011 - mls@suse.de - -- ignore SIGPIPE when writing to dependency helpers, so that - builds don't randomly abort when a helper is missing - -------------------------------------------------------------------- -Fri Jun 3 15:19:02 CEST 2011 - mls@suse.de - -- add --assume-exec option to elfdeps, so that the dependency - generator really works for libs without x-bits - -------------------------------------------------------------------- -Mon May 23 16:21:52 CEST 2011 - mls@suse.de - -- do not die if the changelog section is empty [bnc#695400] - -------------------------------------------------------------------- -Fri May 20 13:28:37 CEST 2011 - mls@suse.de - -- get rid of "unexpectedly shrank by one" error - -------------------------------------------------------------------- -Thu May 19 14:51:13 CEST 2011 - mls@suse.de - -- remove gstreamer from fileattrs -- remove unused var from magic_and_path patch - -------------------------------------------------------------------- -Thu May 19 11:59:38 CEST 2011 - mls@suse.de - -- disable perl requires generation completely - -------------------------------------------------------------------- -Wed May 18 11:34:17 CEST 2011 - mls@suse.de - -- split elflib from elf fileattrs so that libraries without - x-bits are also scanned - -------------------------------------------------------------------- -Tue May 17 10:47:00 CEST 2011 - mls@suse.de - -- allow macro undef/change while expanding the macro itself - -------------------------------------------------------------------- -Mon May 16 14:45:05 CEST 2011 - mls@suse.de - -- update to rpm-4.9.0: - * use internal dependency generator - * pluggable autodeps generators - * update to berkeleydb 4.8.30 - * fixed dependency match corner cases - * experimental collection implementation - -------------------------------------------------------------------- -Wed May 4 12:42:33 UTC 2011 - mmarek@novell.com - -- rpmsort - + Fix comparison function to match rpm (bnc#644515, thanks to - Michael Schroeder). - + Add --test option to verify result against zypper vcmp. - -------------------------------------------------------------------- -Sat Feb 19 12:39:31 CET 2011 - vuntz@opensuse.org - -- Don't call /sbin/conf.d/SuSEconfig.pango in - %run_suseconfig_fonts: it has been removed during 11.4 - development. - -------------------------------------------------------------------- -Fri Jan 14 08:58:40 UTC 2011 - coolo@novell.com - -- let %find_lang remove (with a comment) languages not supported. - Supported languages are in filesystem.rpm's file list (bnc#659001) - -------------------------------------------------------------------- -Mon Dec 20 11:50:55 CET 2010 - mls@suse.de - -- fix depflag_strong filter, all weak deps were shown as - strong (bnc#359566). - -------------------------------------------------------------------- -Thu Dec 9 16:44:10 UTC 2010 - meissner@novell.com - -- fixed two more remaining filenames with spaces issues. - -------------------------------------------------------------------- -Wed Dec 8 13:05:06 UTC 2010 - meissner@novell.com - -- handle spaces in manpage filenames (like e.g. in boost). - -------------------------------------------------------------------- -Tue Dec 7 14:33:33 UTC 2010 - coolo@novell.com - -- add script to provide sysvinit() from /etc/init.d/* - -------------------------------------------------------------------- -Fri Nov 19 16:09:20 UTC 2010 - chris@computersalat.de - -- remove perl macro stuff from suse_macros - o provided with perl /etc/rpm/macros.perl - -------------------------------------------------------------------- -Tue Nov 16 15:25:45 UTC 2010 - lnussel@suse.de - -- fix %verify_permissions to actually only warn -- introduce %set_permissions to replace %run_permissions in the future - -------------------------------------------------------------------- -Tue Nov 9 15:07:52 UTC 2010 - lnussel@suse.de - -- don't call /usr/bin/Check at all anymore. superfluous - -------------------------------------------------------------------- -Tue Nov 9 13:04:21 UTC 2010 - lnussel@suse.de - -- change %verify_permissions to use new system mode of chkstat - -------------------------------------------------------------------- -Fri Oct 29 15:03:50 CEST 2010 - mls@suse.de - -- add support --with-only-C and --without-C options to find-lang.sh, - add %no_lang_C macro to allow compatible builds [bnc#449847] - -------------------------------------------------------------------- -Mon Oct 4 17:34:52 UTC 2010 - cristian.rodriguez@opensuse.org - -- Enable libcap support so we can use the %caps macro in spec - files to set POSIX capabilities. - -------------------------------------------------------------------- -Wed Sep 8 11:35:46 CEST 2010 - ro@suse.de - -- add leading / where appropriate in rpm-suse_macros (bnc#625763) - -------------------------------------------------------------------- -Thu Sep 2 10:26:05 UTC 2010 - dimstar@opensuse.org - -- Add rpm-gst-provides.patch to allow rpm to collect provides of - gstreamer codecs. This will help pk-gstreamer-install to also - find the codecs it is looking for. - -------------------------------------------------------------------- -Thu Aug 12 17:17:49 CEST 2010 - vuntz@opensuse.org - -- Add pkgconfig-0.24.diff: starting with pkg-config 0.24, the - --print-requires command was upstreamed, but split in - --print-requires and --print-requires-private. We need both in - pkgconfigdeps.sh, though. If accepted, the patch should get - upstreamed. - -------------------------------------------------------------------- -Tue Jul 20 11:47:29 UTC 2010 - coolo@novell.com - -- make suse_version 1140 - -------------------------------------------------------------------- -Mon Jun 28 06:38:35 UTC 2010 - jengelh@medozas.de - -- use %_smp_mflags - -------------------------------------------------------------------- -Fri Jun 4 16:44:29 CEST 2010 - mls@suse.de - -- update changelog trim date - -------------------------------------------------------------------- -Fri Jun 4 15:00:54 CEST 2010 - mls@suse.de - -- fix sbit removal code [bnc#610941] -- sort permlist file - -------------------------------------------------------------------- -Fri Apr 9 12:00:29 CEST 2010 - mls@suse.de - -- do not load keyring if signature checking is disabled [bnc#554552] -- fix nosource/nopatch srpm tag generation - -------------------------------------------------------------------- -Thu Apr 8 17:11:08 CEST 2010 - mls@suse.de - -- backport some fixes from upstream -- add generation of python/font/pkgconfig dependencies - -------------------------------------------------------------------- -Wed Apr 7 16:59:58 CEST 2010 - mls@suse.de - -- work around spurious tar message [bnc#558475] -- fix defattr reset bug [bnc#594310] -- make 'rpmconfigcheck status' exit with 4 [bnc#592269] -- don't consider prereq deprecated for now - -------------------------------------------------------------------- -Fri Mar 26 16:29:36 CET 2010 - mls@suse.de - -- port sles11-sp1 repackage-nomd5.diff and safeugid.diff - -------------------------------------------------------------------- -Fri Mar 26 11:49:59 CET 2010 - mls@suse.de - -- update to rpm-4.8.0 - * updated python bindings - * new transaction ordering code - -------------------------------------------------------------------- -Wed Feb 24 11:57:30 CET 2010 - mls@suse.de - -- fix readLine segfault [bnc#582599] - -------------------------------------------------------------------- -Sat Dec 12 23:42:26 CET 2009 - jengelh@medozas.de - -- add baselibs.conf as a source -- add SPARC baselibs - -------------------------------------------------------------------- -Wed Nov 4 09:43:43 UTC 2009 - coolo@novell.com - -- set suse_version to 1130 - -------------------------------------------------------------------- -Wed Nov 4 08:52:48 UTC 2009 - coolo@novell.com - -- do not overwrite the default fuzz factor any longer -- change the payload compression to 5 - -------------------------------------------------------------------- -Fri Oct 23 17:56:28 CEST 2009 - mls@suse.de - -- add make_install macro definition for real - -------------------------------------------------------------------- -Tue Sep 8 02:40:55 CEST 2009 - crrodriguez@suse.de - -- make lang_package(s) Noarch - -------------------------------------------------------------------- -Fri Sep 4 11:32:33 CEST 2009 - mls@suse.de - -- do not statfs all filesystems until there is something - to report -- cherry pick default clean section patch from upstream -- add make_install macro definition - -------------------------------------------------------------------- -Wed Sep 2 17:16:37 CEST 2009 - mls@suse.de - -- allow ufdio payload -- pack db.h include file -- fix abs filelist specification [bnc#535594] -- fix query return value [bnc#527191] - -------------------------------------------------------------------- -Mon Aug 31 18:59:12 UTC 2009 - aj@suse.de - -- Fix debuginfo handling for monodevelop-debugger-gdb and - monodevelop-debugger-mdb packages (bnc#535543). - -------------------------------------------------------------------- -Wed Aug 26 14:39:44 CEST 2009 - mls@suse.de - -- set fuzz factor back to 2 for now - -------------------------------------------------------------------- -Mon Aug 24 15:06:57 CEST 2009 - mls@suse.de - -- update to rpm-4.7.1 - -------------------------------------------------------------------- -Mon Jul 27 18:02:37 CEST 2009 - rguenther@suse.de - -- add description to debuginfo packages - -------------------------------------------------------------------- -Mon Jul 27 15:46:36 CEST 2009 - rguenther@suse.de - -- do not strip .debug suffix during debug-link generation -- do not add requires based on private ELF flags [bnc#524681] -- remove requires on debuginfo from debugsource package - -------------------------------------------------------------------- -Sat Jul 25 12:04:11 CEST 2009 - rguenther@suse.de - -- fix debuginfo package generation for binaries without build-id - -------------------------------------------------------------------- -Fri Jul 24 11:39:04 CEST 2009 - rguenther@suse.de - -- revert SUSEBuildCnt patch -- fix debuginfo package generation for build root URLs with macros - -------------------------------------------------------------------- -Thu Jul 23 12:48:50 CEST 2009 - rguenther@suse.de - -- add support for SUSEBuildCnt tag - -------------------------------------------------------------------- -Thu Jul 23 11:41:54 CEST 2009 - rguenther@suse.de - -- generate debuginfo packages for each sub-package with corresponding - debug information - -------------------------------------------------------------------- -Mon Jul 13 12:50:30 CEST 2009 - coolo@novell.com - -- the correct value for libexecdir is exec_prefix/lib (as the - comment rightfully already mentioned) - -------------------------------------------------------------------- -Tue Jun 9 11:53:50 CEST 2009 - mmarek@suse.cz - -- findksyms.diff: also generate provides for kernel packages. - -------------------------------------------------------------------- -Mon Apr 6 02:09:43 CEST 2009 - ro@suse.de - -- fix typo in brp-symlink (bnc#457908) - -------------------------------------------------------------------- -Tue Mar 31 11:25:14 CEST 2009 - mmarek@suse.cz - -- findksyms.diff: don't check for /boot/symsets-*, generate ksym() - requires if not present. - -------------------------------------------------------------------- -Thu Mar 19 15:42:20 CET 2009 - ro@suse.de - -- rpm-suse_macros: suse_version to 1120 - -------------------------------------------------------------------- -Thu Feb 19 11:05:37 CET 2009 - schwab@suse.de - -- Add support for xz compressed sources. - -------------------------------------------------------------------- -Wed Feb 18 11:04:35 CET 2009 - jblunck@suse.de - -- Add debuginfo.prov helper script for build-id provides. - -------------------------------------------------------------------- -Mon Feb 16 17:10:31 CET 2009 - ro@suse.de - -- fix sort call in finddebuginfo again - -------------------------------------------------------------------- -Wed Feb 11 14:01:51 CET 2009 - coolo@suse.de - -- sort the result of find to make symlinks stable in finddebuginfo - -------------------------------------------------------------------- -Wed Feb 11 13:02:12 CET 2009 - coolo@suse.de - -- adapt to new API of xz, sticking with the old LZMA format (not XZ) - -------------------------------------------------------------------- -Mon Feb 9 14:16:52 CET 2009 - ro@suse.de - -- define disttag as optional tag with macro just like disturl - -------------------------------------------------------------------- -Thu Jan 29 10:34:22 CET 2009 - olh@suse.de - -- obsolete old -XXbit packages (bnc#437293) - -------------------------------------------------------------------- -Tue Jan 27 21:19:51 CET 2009 - agruen@suse.de - -- find-supplements.ksyms: Fix "Supplements: packageand( - kernel-$flavor:$package)" dependency (bnc#429254). - -------------------------------------------------------------------- -Mon Jan 5 15:37:07 CET 2009 - mmarek@suse.cz - -- findksyms.diff: make sure that the input files for join are - sorted properly (bnc#450714) - -------------------------------------------------------------------- -Fri Dec 19 15:26:30 CET 2008 - mls@suse.de - -- add popt-devel and rpm-devel to baselibs config (bnc#445037) - -------------------------------------------------------------------- -Thu Dec 11 17:18:49 CET 2008 - ro@suse.de - -- brp-symlink: whitelist kde4 doc path (bnc#457908) - -------------------------------------------------------------------- -Thu Dec 11 08:14:27 CET 2008 - agruen@suse.de - -- find-supplements.ksyms: Module aliases may contain special - characters that rpm does not allow in dependencies, such as - commas. Encode those as %XX to avoid generating broken - dependencies (bnc#456695). - -------------------------------------------------------------------- -Tue Dec 9 16:45:44 CET 2008 - schwab@suse.de - -- find-debuginfo.sh: Don't convert to binary. - -------------------------------------------------------------------- -Mon Dec 1 12:35:39 CET 2008 - ro@suse.de - -- add rpm to baselibs.conf (for net-snmp) -- append a "nil" after suse_install_update_script and _message - -------------------------------------------------------------------- -Fri Nov 28 15:15:10 CET 2008 - dmueller@suse.de - -- fix build -- fix stack based buffer overflow in filelist parsing (bnc#397006) -- add macros for update messages and update scripts - -------------------------------------------------------------------- -Fri Nov 28 14:46:04 CET 2008 - mls@suse.de - -- disable debug package requires for now, they cause more harm - than benefits - -------------------------------------------------------------------- -Thu Nov 27 11:37:30 CET 2008 - mls@suse.de - -- remove '-m64' from ppc64 optflags [bnc#447002] -- add _specfile macro -- set RPMBUILD_ env vars for file helpers -- make find-supplements.ksyms use RPMBUILD_SPECFILE [bnc#443815] - -------------------------------------------------------------------- -Tue Nov 25 17:10:40 CET 2008 - jblunck@suse.de - -- find-debuginfo.sh: fix for handling absolute symlinks - -------------------------------------------------------------------- -Fri Nov 21 16:30:19 CET 2008 - mls@suse.de - -- add firmware.prov provides helper - -------------------------------------------------------------------- -Fri Nov 21 14:38:57 CET 2008 - mmarek@suse.cz - -- fixed sed expression in find-provides.ksyms - -------------------------------------------------------------------- -Tue Nov 18 17:46:53 CET 2008 - jblunck@suse.de - -- find-debuginfo.sh: Create symlinks reflecting the policy from brp-symlink - -------------------------------------------------------------------- -Thu Nov 13 18:16:14 CET 2008 - agruen@suse.de - -- Fix the ksym(...) provides to also include the kernel flavor - (bnc#444698). - -------------------------------------------------------------------- -Fri Nov 7 15:03:25 CET 2008 - ro@suse.de - -- update gcc flags to current set - -------------------------------------------------------------------- -Fri Oct 31 18:59:25 CET 2008 - coolo@suse.de - -- moved suse_update_desktop_files to package update_desktop_files - -------------------------------------------------------------------- -Tue Oct 28 19:07:02 CET 2008 - jblunck@suse.de - -- debugedit: Don't emit NOPs at the end of the line number program but at the - beginning (bnc #433182 again) -- debugedit: Fix an uninitialized variable use that lead to segfaults from - time to time - -------------------------------------------------------------------- -Tue Oct 28 17:18:03 CET 2008 - mls@suse.de - -- fix fingerprint computation for gpg checksums - -------------------------------------------------------------------- -Tue Oct 21 11:22:22 CEST 2008 - jblunck@suse.de - -- debugedit: Fix debuginfo problems introduced by last patch (bnc #433182) - -------------------------------------------------------------------- -Mon Oct 20 16:16:01 CEST 2008 - mls@suse.de - -- drop static libraries and libtool archives - -------------------------------------------------------------------- -Thu Oct 2 18:30:41 CEST 2008 - vuntz@suse.de - -- support the new -t option of suse_update_desktop_file.sh in - rpm-suse_macros - -------------------------------------------------------------------- -Thu Oct 2 17:43:59 CEST 2008 - mls@suse.de - -- fix rpmrc compile options for ia64 [bnc#431345] - -------------------------------------------------------------------- -Thu Oct 2 16:19:03 CEST 2008 - jblunck@suse.de - -- debugedit: Fix some compilation warnings and the canonicalization error. - -------------------------------------------------------------------- -Tue Sep 16 01:01:30 CEST 2008 - ro@suse.de - -- fix find-debuginfo.sh and debugsource-package.diff to even - apply (directory depth) -- add hack from jblunck using home made elfcmp - -------------------------------------------------------------------- -Mon Sep 15 20:32:32 CEST 2008 - jblunck@suse.de - -- fix find-debuginfo.sh to work on filenames with spaces in - -------------------------------------------------------------------- -Fri Sep 12 18:16:33 CEST 2008 - mls@suse.de - -- fix changelog cutter -- fix find-requires script -- add mimetype.diff patch from Scott Reeves - -------------------------------------------------------------------- -Thu Sep 11 15:33:52 CEST 2008 - mls@suse.de - -- update to 4.4.2.3 to get rid of >50 patches -- make changelog cutter configurable -- update rpm-suse_macros - -------------------------------------------------------------------- -Fri Sep 5 16:56:23 CEST 2008 - dmueller@suse.de - -- strip .comment and .GCC.command.line sections from ELF binaries - -------------------------------------------------------------------- -Mon Aug 25 14:48:28 CEST 2008 - prusnak@suse.cz - -- enabled SELinux support [Fate#303662] - -------------------------------------------------------------------- -Thu Aug 21 01:49:00 CEST 2008 - ro@suse.de - -- update rpm-suse_macros - -------------------------------------------------------------------- -Wed Aug 20 12:39:53 CEST 2008 - agruen@suse.de - -- rpmconfigcheck: set Required-Stop to $null; this init script - only performs some checks when started. -- /usr/lib/python* belongs to the rpm-python package; remove from - the main rpm package. - -------------------------------------------------------------------- -Mon Jun 30 14:02:35 CEST 2008 - dmueller@suse.de - -- add a requires_ge macro as well - -------------------------------------------------------------------- -Thu Jun 26 18:40:46 CEST 2008 - schwab@suse.de - -- Fix db configure script. - -------------------------------------------------------------------- -Thu May 15 14:31:51 CEST 2008 - dmueller@suse.de - -- remove references to brp-strip-comment-note (bnc#390163) - -------------------------------------------------------------------- -Tue May 6 18:01:34 CEST 2008 - mls@suse.de - -- enable all parts of the noprovides patch again, making our rpm - compatible to rpm4 - -------------------------------------------------------------------- -Fri May 2 15:50:17 CEST 2008 - dmueller@suse.de - -- add at least one supplements prefering the right kernel flavour - if no modalias could be generated (bnc#384084) - -------------------------------------------------------------------- -Thu May 1 22:43:17 CEST 2008 - agruen@suse.de - -- For kernel modules, require "kernel(flavor:symset) = version" - instead of "kernel(symset) = version". This disambiguates - the case where several kernel flavors end up with the same - modver checksums (190163, 355628). - -------------------------------------------------------------------- -Wed Apr 16 17:57:43 CEST 2008 - jblunck@suse.de - -- Get rid of noise when no debuginfo was generated -- Never strip static libraries in find-debuginfo script - -------------------------------------------------------------------- -Thu Apr 10 12:50:33 CEST 2008 - ro@suse.de - -- added baselibs.conf file for xxbit packages - -------------------------------------------------------------------- -Thu Apr 10 12:32:46 CEST 2008 - jw@suse.de - -- added whatrequires-doc.diff - Adds a hint to the misleading --whatrequires option, pointing to - the more useful -e --test. - Motivated by a talk thread started by Hubert. - -------------------------------------------------------------------- -Wed Apr 9 23:15:48 CEST 2008 - mrueckert@suse.de - -- revert the last change as it leads to duplicated entries in the - file list - -------------------------------------------------------------------- -Wed Apr 9 21:00:30 CEST 2008 - jblunck@suse.de - -- Fix a bug in last commit that leads to /usr/src/debug not belonging - to any package. - -------------------------------------------------------------------- -Wed Apr 9 12:56:57 CEST 2008 - jblunck@suse.de - -- Put debug sources into separate -debugsource package. - -------------------------------------------------------------------- -Fri Mar 28 14:54:04 CET 2008 - coolo@suse.de - -- leave the rpm package itself with bzip payload to - avoid blocking updates from within running system - -------------------------------------------------------------------- -Thu Mar 27 14:43:24 CET 2008 - coolo@suse.de - -- switch payload default to lzma -2 -- flag GNOME docu as %doc (bnc#358838) - -------------------------------------------------------------------- -Tue Mar 18 17:12:00 CET 2008 - mls@suse.de - -- make ia32 compatible to ia64, like it was in SLES9 [bnc#367705] -- fix memory leak and endless loops in lzma code -- make rpm provide the right lzma rpmlib name - -------------------------------------------------------------------- -Tue Mar 18 13:33:25 CET 2008 - schwab@suse.de - -- Fix broken db configuration. - -------------------------------------------------------------------- -Fri Mar 14 21:54:57 CET 2008 - coolo@suse.de - -- change it to the "alone" file format used by stable - distributions of 7zip and lzma - -------------------------------------------------------------------- -Fri Mar 14 18:05:18 CET 2008 - coolo@suse.de - -- daring some more compression time to get an overall picture - -------------------------------------------------------------------- -Thu Mar 13 08:11:47 CET 2008 - coolo@suse.de - -- support lzma payload using liblzma - -------------------------------------------------------------------- -Thu Feb 21 21:58:39 CET 2008 - mls@suse.de - -- do not configure autoreloc or colors - -------------------------------------------------------------------- -Thu Jan 31 15:12:55 CET 2008 - ro@suse.de - -- brp-symlink: whitelist /opt/kde3/share/doc*/HTML/*/common - -------------------------------------------------------------------- -Mon Jan 28 16:35:46 CET 2008 - ro@suse.de - -- finddebuginfo.diff: disable debuginfo for mono at the moment - -------------------------------------------------------------------- -Mon Jan 21 12:27:18 CET 2008 - mls@suse.de - -- change vendor detection so that it works in build service, too - -------------------------------------------------------------------- -Sat Jan 19 17:14:55 CET 2008 - mls@suse.de - -- update rpm-suse_macros so that the build service can build, too - -------------------------------------------------------------------- -Thu Jan 17 19:19:09 CET 2008 - wberrier@suse.de - -- autodeps.diff - pass .config files to mono-find-requires, not mono-find-provides - -------------------------------------------------------------------- -Mon Dec 3 13:38:20 CET 2007 - dmueller@suse.de - -- list email address completely again (#344147) - -------------------------------------------------------------------- -Fri Nov 16 20:46:42 CET 2007 - dmueller@suse.de - -- shorten changelogs in binary rpms (#308569) - * saves 4.3MB for the one CD media - -------------------------------------------------------------------- -Thu Oct 11 13:37:16 CEST 2007 - schwab@suse.de - -- Add support for lzma compressed archives. - -------------------------------------------------------------------- -Sun Sep 30 18:28:23 CEST 2007 - rguenther@suse.de - -- fix build with gcc43 - -------------------------------------------------------------------- -Mon Sep 3 13:27:57 CEST 2007 - dmueller@suse.de - -- change %lang_package implementation once again - to support bundle-lang-other for only one desktop (#302270) - -------------------------------------------------------------------- -Fri Aug 31 18:41:04 CEST 2007 - dmueller@suse.de - -- implement supplements for lang_packages (#306412) - -------------------------------------------------------------------- -Fri Aug 10 16:40:10 CEST 2007 - dmueller@suse.de - -- package size reduction (#217472) - -------------------------------------------------------------------- -Wed Aug 8 23:25:56 CEST 2007 - dmueller@suse.de - -- support optional -n parameter in %lang_package -- make %lang_package export a -all provides that - can be used to resolve conflicts with the bundle - -------------------------------------------------------------------- -Thu Aug 2 15:28:09 CEST 2007 - mls@suse.de - -- let the debug_package_requires macro overwrite the - default requires in the debuginfo package - -------------------------------------------------------------------- -Tue Jul 24 13:29:10 CEST 2007 - dmueller@suse.de - -- hardcode rpm in patch name - -------------------------------------------------------------------- -Fri Jun 15 08:30:07 CEST 2007 - dmueller@suse.de - -- package size reduction (28%) - -------------------------------------------------------------------- -Sun May 27 16:43:25 CEST 2007 - schwab@suse.de - -- Remove duplicate rpmpopt alias. - -------------------------------------------------------------------- -Fri May 25 16:18:07 CEST 2007 - mls@suse.de - -- fix patch-rpm query -- do not link convertdb1 statically [#274694] -- use --wildcards option for tar [#272519] -- fix perl.prov [#255009] -- show pre/posttrans scripts in --scripts query [#253620] -- remove popt version requires [#246871] -- fix missing file error - -------------------------------------------------------------------- -Wed May 16 12:16:44 CEST 2007 - mls@suse.de - -- fix autodeps.diff mono logic - -------------------------------------------------------------------- -Mon May 14 13:47:02 CEST 2007 - coolo@suse.de - -- correctly mark KDE documentation as %doc in find-lang.sh - -------------------------------------------------------------------- -Fri May 11 14:34:35 CEST 2007 - coolo@suse.de - -- adding %lang_package to simplify seperating translations - -------------------------------------------------------------------- -Sat Apr 28 00:43:30 CEST 2007 - wberrier@suse.de - -- autodeps.diff - bnc #227362 - -Print warning if mono assembiles are found but mono-find-* fails - (solution is to make sure mono-devel is installed) - -Also include .config files when searching for mono assemblies. - (bnc #210224) - -------------------------------------------------------------------- -Tue Apr 24 17:12:47 CEST 2007 - mls@suse.de - -- enable noprovides patch again. - disable part of the patch so that rpm checks the package provides - again instead of just package name when going through the - obsoletes list. This makes rpm behaviour consistent with the - updated libzypp. [#232127] - -------------------------------------------------------------------- -Sun Apr 22 15:23:12 CEST 2007 - dmueller@suse.de - -- fix stripping of symbol table - -------------------------------------------------------------------- -Tue Apr 17 14:24:01 CEST 2007 - dmueller@suse.de - -- strip comment and gcc command line sections from the packages -- rework SYMTAB_KEEP to accept a file pattern - -------------------------------------------------------------------- -Sun Apr 8 23:22:12 CEST 2007 - schwab@suse.de - -- Include compilation directory in debuginfo file list. - -------------------------------------------------------------------- -Sat Mar 24 12:22:23 CET 2007 - ro@suse.de - -- added libbz2-devel to BuildRequires and Requires for -devel - -------------------------------------------------------------------- -Fri Mar 23 16:14:28 CET 2007 - dmueller@suse.de - -- drop custom libpopt so versioning -- move libpopt to /lib(64) for cryptsetup -- adjust installed libtool files -- Fix rpm buildrequires / devel requires - -------------------------------------------------------------------- -Thu Mar 22 16:41:44 CET 2007 - stbinner@suse.de - -- files.diff: when checking %files list also show unpackaged files - after "not found" error message [#255780] - -------------------------------------------------------------------- -Thu Mar 22 10:45:08 CET 2007 - dmueller@suse.de - -- remove strangely duplicated libpopt -- remove static popt and corresponding .la file to reduce - dependencies -- Fix various format string errors in german translation - which cause crashes - -------------------------------------------------------------------- -Mon Mar 19 16:48:22 CET 2007 - rguenther@suse.de - -- do not require build-key - -------------------------------------------------------------------- -Tue Mar 6 20:19:40 CET 2007 - rguenther@suse.de - -- adjust cflags_profile_generate and cflags_profile_feedback to - enable tree profiling - -------------------------------------------------------------------- -Fri Jan 26 16:55:15 CET 2007 - mls@suse.de - -- create /var/spool/repackage directory [#230866] -- do not run pre/posttrans scripts in test mode [#235361] - ------------------------------------------------------------------- Thu Nov 30 14:04:56 CET 2006 - mls@suse.de @@ -1265,8 +392,8 @@ Wed Sep 7 18:13:11 CEST 2005 - matz@suse.de - Make debuginfo packages require exact version of base rpm. - ------------------------------------------------------------------- + Fri Sep 2 13:07:08 CEST 2005 - mls@suse.de - backport CLOEXEC workaround [#93727] @@ -2768,7 +1895,7 @@ Mon Feb 22 15:08:09 MET 1999 - ro@suse.de - update to 2.91 - ported ma's fixes -------------------------------------------------------------------- +------------------------------------------------------------------ Wed Nov 25 19:06:11 MET 1998 - ma@suse.de - new version 2.5.5 @@ -2854,7 +1981,7 @@ Mon Oct 27 15:29:41 MET 1997 - ma@suse.de - patch: ignore errors when installing a symlink and called from YaST - de.po update -------------------------------------------------------------------- +---------------------------------------------------------------------- Thu Aug 7 17:46:48 MEST 1997 - ma@suse.de - duplicate '--nodeps' entry in rpm manpage deleted. @@ -2863,13 +1990,13 @@ Thu Aug 7 17:46:48 MEST 1997 - ma@suse.de is disabeled, unless environment variable RPM_IgnoreFailedSymlinks is set. -------------------------------------------------------------------- +---------------------------------------------------------------------- Tue Jul 15 13:24:22 MEST 1997 - ro@suse.de - added workaround to skip installing a symlink when impossible to remove an existing directory -------------------------------------------------------------------- +---------------------------------------------------------------------- Thu Jun 26 19:10:48 MEST 1997 - ma@suse.de - introducing rpm, version 2.4.1 diff --git a/rpm.spec b/rpm.spec index 32484a7..c32da45 100644 --- a/rpm.spec +++ b/rpm.spec @@ -1,127 +1,123 @@ # -# spec file for package rpm +# spec file for package rpm (Version 4.4.2) # -# Copyright (c) 2011 SUSE LINUX Products GmbH, Nuernberg, Germany. +# Copyright (c) 2006 SUSE LINUX Products GmbH, Nuernberg, Germany. +# This file and all modifications and additions to the pristine +# package are under the same license as the package itself. # -# All modifications and additions to the file contributed by third parties -# remain the property of their copyright owners, unless otherwise agreed -# upon. The license for this file, and modifications and additions to the -# file, is the same license as for the pristine package itself (unless the -# license for the pristine package is not an Open Source License, in which -# case the license is the MIT License). An "Open Source License" is a -# license that conforms to the Open Source Definition (Version 1.9) -# published by the Open Source Initiative. - # Please submit bugfixes or comments via http://bugs.opensuse.org/ # - +# norootforbuild Name: rpm -License: GPLv2+ +License: GNU General Public License (GPL) Group: System/Packages -BuildRequires: file-devel libbz2-devel libelf-devel libselinux-devel libsemanage-devel lua-devel ncurses-devel xz-devel zlib-devel -BuildRequires: popt-devel -BuildRequires: libacl-devel libcap-devel -#!BuildIgnore: rpmlint-Factory Provides: rpminst -PreReq: %insserv_prereq %fillup_prereq permissions -AutoReqProv: on +Requires: build-key +%define popt_version 1.7 +PreReq: %insserv_prereq %fillup_prereq popt = %{popt_version} permissions +Autoreqprov: on Summary: The RPM Package Manager -Version: 4.9.0 -Release: 13 +Version: 4.4.2 +Release: 76 Source: rpm-%{version}.tar.bz2 Source1: RPM-HOWTO.tar.bz2 Source2: RPM-Tips.html.tar.bz2 +Source3: RPM-Changes.html.tar.bz2 Source4: rpm-suse_macros Source5: rpmsort Source6: symset-table Source8: rpmconfigcheck Source9: sysconfig.services-rpm -Source10: beecrypt-4.1.2.tar.bz2 -Source11: db-4.8.30.tar.bz2 -Source12: baselibs.conf -Patch1: beecrypt-4.1.2.diff -Patch2: db.diff +Source10: elfutils-0.97.tar.bz2 +Source11: beecrypt-4.1.2.tar.bz2 +Patch1: elfutils-0.97.diff +Patch2: beecrypt-4.1.2.diff +Patch3: db.diff # quilt patches start here -Patch10: rpm-beecrypt.diff -Patch11: debugedit.diff -Patch12: localetag.diff -Patch13: missingok.diff -Patch14: nameversioncompare.diff -Patch15: chownwarn.diff -Patch16: dbfsync.diff -Patch17: dbrointerruptable.diff -Patch18: extcond.diff -Patch19: refreshtestarch.diff -Patch20: rpmrctests.diff -Patch21: waitlock.diff -Patch22: suspendlock.diff -Patch23: weakdeps.diff -Patch24: autodeps.diff -Patch25: brp.diff -Patch26: brpcompress.diff -Patch27: checkfilesnoinfodir.diff -Patch28: finddebuginfo.diff -Patch29: findksyms.diff -Patch30: findlang.diff -Patch31: macrosin.diff -Patch32: modalias.diff -Patch33: platformin.diff -Patch34: rpmpopt.diff -Patch35: rpmrc.diff -Patch36: taggedfileindex.diff -Patch37: rpmqpack.diff -Patch38: convertdb1static.diff -Patch39: build.diff -Patch40: modalias-kernel_module.diff -Patch41: files.diff -Patch42: debugedit-comp-dir.diff -Patch43: perlprov.diff -Patch44: rpm-shorten-changelog.diff -Patch45: debugsource-package.diff -Patch46: whatrequires-doc.diff -Patch47: remove-brp-strips.diff -Patch48: requires-ge-macro.diff -Patch50: debugedit-canon-fix.diff -Patch51: finddebuginfo-absolute-links.diff -Patch52: firmware.diff -Patch53: specfilemacro.diff -Patch54: modalias-encode.diff -Patch55: disttag-macro.diff -Patch56: buildidprov.diff -Patch57: debugsubpkg.diff -Patch58: debuglink.diff -Patch59: debuginfo-mono.patch -Patch60: lazystatfs.diff -Patch61: repackage-nomd5.diff -Patch62: safeugid.diff -Patch63: noprereqdeprec.diff -Patch64: pythondeps.diff -Patch65: fontprovides.diff -Patch66: rpm-gst-provides.patch -Patch67: langnoc.diff -Patch68: initscriptsprov.diff -Patch69: remove-translations.diff -Patch70: no_rep_autop.diff -Patch71: headeradddb.diff -Patch72: rpmdb_get_open_flags.diff -Patch73: verify_p.diff -Patch74: dbprivate.diff -Patch75: nobuildcolor.diff -Patch76: fileattrs.diff -Patch77: emptyprep.diff -Patch78: nomagiccheck.diff -Patch79: findsupplements.diff -Patch80: magic_and_path.diff -Patch81: safemacro.diff -Patch82: emptychangelog.diff -Patch83: assumeexec.diff -Patch84: buildpipe.diff +Patch10: aloffbyone.diff +Patch11: badforsyntax.diff +Patch12: buildsubdir.diff +Patch13: compress.diff +Patch14: debugedit.diff +Patch15: docdir_fmt.diff +Patch16: emptyfilelist.diff +Patch17: eraseignoresize.diff +Patch18: erasebadreturn.diff +Patch19: eraseordered.diff +Patch20: exitstatus.diff +Patch21: filenonull.diff +Patch22: filequery.diff +Patch23: findfplistexclude.diff +Patch24: forkfailed.diff +Patch25: getcwdresult.diff +Patch26: ghost.diff +Patch27: globoffbyone.diff +Patch28: initdbret.diff +Patch29: localetag.diff +Patch30: luanoreadline.diff +Patch31: missingok.diff +Patch32: nameversioncompare.diff +Patch33: nostdoutclose.diff +Patch34: obeynodbsync.diff +Patch35: payloadformat.diff +Patch36: pgpdecodeearly.diff +Patch37: prereqorder.diff +Patch38: probfilter.diff +Patch39: rebuilddbroot.diff +Patch40: sbitcheck.diff +Patch41: setpermsugids.diff +Patch42: signature.diff +Patch43: signwriteerror.diff +Patch44: spectest.diff +Patch45: sqcondmutex.diff +Patch46: srcdefattr.diff +Patch47: totalsizenoexclude.diff +Patch48: translockroot.diff +Patch49: vercmp.diff +Patch50: verifylstatfail.diff +Patch51: chownwarn.diff +Patch52: dbfsync.diff +Patch53: dbrointerruptable.diff +Patch54: diskspace.diff +Patch55: extcond.diff +Patch56: globlstat.diff +Patch57: nodefattr.diff +Patch58: nolua.diff +Patch59: luaroot.diff +Patch60: noneon.diff +#Patch61: noprovides.diff +Patch62: openallbuttemp.diff +Patch63: refreshtestarch.diff +Patch64: rpmrctests.diff +Patch65: suspendlock.diff +Patch66: tagsbackport.diff +Patch67: waitlock.diff +Patch68: dbprivate.diff +Patch69: legacyprereq.diff +Patch70: weakdeps.diff +Patch71: autodeps.diff +Patch72: brp.diff +Patch73: brpcombress.diff +Patch74: checkfilesnoinfodir.diff +Patch75: finddebuginfo.diff +Patch76: findksyms.diff +Patch77: findlang.diff +Patch78: macrosin.diff +Patch79: modalias.diff +Patch80: platformin.diff +Patch81: rpmpopt.diff +Patch82: rpmrc.diff +Patch83: patchrpms.diff +Patch84: taggedfileindex.diff +Patch85: rpmqpack.diff +Patch86: convertdb1static.diff +Patch87: build.diff +Patch88: modalias-kernel_module.diff +Patch89: querybuffer.diff BuildRoot: %{_tmppath}/%{name}-%{version}-build # -# avoid bootstrapping problem -%define _binary_payload w9.bzdio %description RPM Package Manager is the main tool for managing the software packages @@ -140,8 +136,8 @@ Authors: Marc Ewing %package devel -Summary: Include Files and Libraries mandatory for Development -License: GPLv2+ +Summary: Include Files and Libraries mandatory for Development. +License: GNU General Public License (GPL) Group: System/Packages Requires: rpm = %{version} Requires: popt-devel @@ -163,129 +159,98 @@ Authors: %prep %setup -q -n rpm-%{version} rm -rf sqlite +rm -rf elfutils rm -rf beecrypt tar xjf %{SOURCE10} +ln -s elfutils-0.97 elfutils +# remove all OSL stuff +rm -rf elfutils/doc elfutils/libebl elfutils/libdw elfutils/libcpu elfutils/libasm elfutils/src elfutils/po elfutils/tests +rm -rf elfutils/lib/dynamicsizehash.c elfutils/lib/dynamicsizehash.h elfutils/lib/list.h elfutils/lib/xmalloc.c elfutils/lib/xstrdup.c elfutils/lib/xstrndup.c tar xjf %{SOURCE11} -ln -s db-4.8.30 db ln -s beecrypt-4.1.2 beecrypt -chmod -R u+w db/* #tar xjf %{SOURCE12} #ln -s neon-0.24.7 neon # will get linked from db3 rm -f rpmdb/db.h -%patch -P 1 -P 2 +# separate popt source +# %setup -q -D -T -a 9 +# mv popt popt.orig +# ln -s popt-%{popt_version} popt +%patch -P 1 -P 2 -P 3 %patch -P 10 -P 11 -P 12 -P 13 -P 14 -P 15 -P 16 -P 17 -P 18 -P 19 %patch -P 20 -P 21 -P 22 -P 23 -P 24 -P 25 -P 26 -P 27 -P 28 -P 29 %patch -P 30 -P 31 -P 32 -P 33 -P 34 -P 35 -P 36 -P 37 -P 38 -P 39 -%patch -P 40 -P 41 -P 42 -P 43 -P 44 -P 45 -P 46 -P 47 -P 48 +%patch -P 40 -P 41 -P 42 -P 43 -P 44 -P 45 -P 46 -P 47 -P 48 -P 49 %patch -P 50 -P 51 -P 52 -P 53 -P 54 -P 55 -P 56 -P 57 -P 58 -P 59 -%patch -P 60 -P 61 -P 62 -P 63 -P 64 -P 65 -P 66 -P 67 -P 68 -P 69 +%patch -P 60 -P 62 -P 63 -P 64 -P 65 -P 66 -P 67 -P 68 -P 69 %patch -P 70 -P 71 -P 72 -P 73 -P 74 -P 75 -P 76 -P 77 -P 78 -P 79 -%patch -P 80 -P 81 -P 82 -P 83 -P 84 -#chmod 755 scripts/find-supplements{,.ksyms} -#chmod 755 scripts/find-provides.ksyms scripts/find-requires.ksyms -#chmod 755 scripts/firmware.prov -#chmod 755 scripts/debuginfo.prov +%patch -P 80 -P 81 -P 82 -P 83 -P 84 -P 85 -P 86 -P 87 -P 88 -P 89 +chmod 755 scripts/find-supplements{,.ksyms} +chmod 755 scripts/find-provides.ksyms scripts/find-requires.ksyms tar -xjvf %{SOURCE1} tar -xjvf %{SOURCE2} +tar -xjvf %{SOURCE3} if [ -s /etc/rpm/suse_macros ]; then cp -a /etc/rpm/suse_macros %{SOURCE4} fi cp -a %{SOURCE4} suse_macros -rm -f m4/libtool.m4 -rm -f m4/lt*.m4 +rename no nb po/no.* popt/po/no.* %build -export CFLAGS="$RPM_OPT_FLAGS -fno-strict-aliasing -ffunction-sections" -export LDFLAGS="-Wl,-Bsymbolic-functions -ffunction-sections" +%{?suse_update_config:%{suse_update_config -f popt}} +export CFLAGS="$RPM_OPT_FLAGS -fno-strict-aliasing" %ifarch alpha export CFLAGS="-g -O0 -fno-strict-aliasing" %endif -#cp -p /usr/share/gettext/config.rpath . -cp autogen.sh beecrypt -pushd beecrypt -./autogen.sh --with-pic --without-python -make %{?_smp_mflags} -popd -./autogen.sh --prefix=%{_prefix} --mandir=%{_mandir} --infodir=%{_infodir} \ ---libdir=%{_libdir} --sysconfdir=/etc --localstatedir=/var --with-lua \ ---with-selinux --with-internal-beecrypt --with-acl --with-cap --enable-shared %{?with_python: --enable-python} +#cp popt/autogen.sh zlib +rm -rf zlib +cp /usr/share/gettext/config.rpath . +cp popt/autogen.sh beecrypt +cp popt/autogen.sh libelf +cp popt/autogen.sh elfutils +cp popt/autogen.sh file +# cp popt/autogen.sh neon +./autogen.sh --prefix=%{_prefix} --mandir=%{_mandir} --infodir=%{_infodir} --libdir=/usr/lib --sysconfdir=/etc --localstatedir=/var --with-lua --without-selinux --enable-shared rm po/de.gmo -make %{?_smp_mflags} -make convertdb1 +make %{?jobs:-j%jobs} +(cd popt; gcc -shared .libs/popt.o .libs/findme.o .libs/poptparse.o .libs/poptconfig.o .libs/popthelp.o $RPM_OPT_FLAGS -Wl,-soname -Wl,libpopt.so.1 -o .libs/libpopt.so.1.0.0) %install +rm -rf $RPM_BUILD_ROOT +mkdir $RPM_BUILD_ROOT mkdir -p $RPM_BUILD_ROOT/usr/lib mkdir -p $RPM_BUILD_ROOT/usr/share/locale ln -s ../share/locale $RPM_BUILD_ROOT/usr/lib/locale make DESTDIR="$RPM_BUILD_ROOT" install -install -m 755 convertdb1 $RPM_BUILD_ROOT/usr/lib/rpm -install -m 644 db3/db.h $RPM_BUILD_ROOT/usr/include/rpm -# remove .la file and the static variant of libpopt -# have to remove the dependency from other .la files as well -for f in $RPM_BUILD_ROOT/%{_libdir}/*.la; do - sed -i -e "s,/%_lib/libpopt.la,-lpopt,g" $f -done +cp popt/.libs/libpopt.so.1.0.0 $RPM_BUILD_ROOT/%{_libdir} +ln -sf libpopt.so.1.0.0 $RPM_BUILD_ROOT/%{_libdir}/libpopt.so.1 mkdir -p $RPM_BUILD_ROOT/etc/init.d install -m 755 %{SOURCE8} $RPM_BUILD_ROOT/etc/init.d mkdir -p $RPM_BUILD_ROOT/usr/sbin ln -sf ../../etc/init.d/rpmconfigcheck $RPM_BUILD_ROOT/usr/sbin/rcrpmconfigcheck cp -a suse_macros $RPM_BUILD_ROOT/usr/lib/rpm -mkdir -p $RPM_BUILD_ROOT/usr/lib/rpm/suse -ln -s ../suse_macros $RPM_BUILD_ROOT/usr/lib/rpm/suse/macros -for d in BUILD RPMS SOURCES SPECS SRPMS BUILDROOT ; do - mkdir -p $RPM_BUILD_ROOT/usr/src/packages/$d - chmod 1777 $RPM_BUILD_ROOT/usr/src/packages/$d -done -for d in $RPM_BUILD_ROOT/usr/lib/rpm/platform/*-linux/macros ; do - dd=${d%%-linux/macros} - dd=${dd##*/} - mkdir $RPM_BUILD_ROOT/usr/src/packages/RPMS/$dd - chmod 1777 $RPM_BUILD_ROOT/usr/src/packages/RPMS/$dd -done +mv $RPM_BUILD_ROOT/usr/src/* $RPM_BUILD_ROOT/usr/src/packages mkdir -p $RPM_BUILD_ROOT/var/lib/rpm +rm -rf $RPM_BUILD_ROOT/usr/include/beecrypt $RPM_BUILD_ROOT/usr/include/libelf $RPM_BUILD_ROOT/%{_libdir}/libbeecrypt* $RPM_BUILD_ROOT/usr/lib/libelf* gzip -9 $RPM_BUILD_ROOT/%{_mandir}/man[18]/*.[18] export RPM_BUILD_ROOT %ifarch s390x [ -f scripts/brp-%_arch-linux ] && sh scripts/brp-%_arch-linux %endif chmod 755 doc/manual -rm -rf doc/manual/Makefile* rm -f $RPM_BUILD_ROOT/usr/lib/rpmpopt rm -rf $RPM_BUILD_ROOT%{_mandir}/{fr,ja,ko,pl,ru,sk} rm -f $RPM_BUILD_ROOT%{_prefix}/share/locale/de/LC_MESSAGES/rpm.mo mkdir -p $RPM_BUILD_ROOT/var/adm/fillup-templates install -c -m0644 %{SOURCE9} $RPM_BUILD_ROOT/var/adm/fillup-templates/ rm -f $RPM_BUILD_ROOT/usr/lib/rpm/cpanflute $RPM_BUILD_ROOT/usr/lib/rpm/cpanflute2 -find $RPM_BUILD_ROOT/usr/src/packages/* -type d | sed -e "s@$RPM_BUILD_ROOT@@" | sort > $RPM_BUILD_ROOT/usr/lib/rpm/permlist +find $RPM_BUILD_ROOT/usr/src/packages/* -type d | sed -e "s@$RPM_BUILD_ROOT@@" > $RPM_BUILD_ROOT/usr/lib/rpm/permlist install -m 755 %{SOURCE5} $RPM_BUILD_ROOT/usr/lib/rpm install -m 755 %{SOURCE6} $RPM_BUILD_ROOT/usr/lib/rpm install -m 755 scripts/find-supplements{,.ksyms} $RPM_BUILD_ROOT/usr/lib/rpm -install -m 755 scripts/firmware.prov $RPM_BUILD_ROOT/usr/lib/rpm -install -m 755 scripts/debuginfo.prov $RPM_BUILD_ROOT/usr/lib/rpm rm -f $RPM_BUILD_ROOT/usr/lib/locale $RPM_BUILD_ROOT/usr/lib/rpmrc mkdir -p $RPM_BUILD_ROOT/etc/rpm chmod 755 $RPM_BUILD_ROOT/etc/rpm -# remove some nonsense or non-working scripts -pushd $RPM_BUILD_ROOT/usr/lib/rpm/ -for f in rpm2cpio.sh rpm.daily rpmdiff* rpm.log rpm.xinetd freshen.sh u_pkg.sh \ - magic magic.mgc magic.mime* rpmfile *.pl javadeps brp-redhat \ - brp-strip-static-archive vpkg-provides*.sh http.req sql.req tcl.req \ - rpmdb_* brp-sparc64-linux brp-strip-comment-note brp-java-gcjcompile -do - rm -f $f -done -for i in /usr/share/automake-*/*; do - if test -f "$i" && test -f "${i##*/}"; then - rm -f "${i##*/}" - fi -done -popd -gzip -9 CHANGES -rm -rf $RPM_BUILD_ROOT/%{_libdir}/python%{py_ver} -rm -f $RPM_BUILD_ROOT%{_libdir}/*.la -rm -f $RPM_BUILD_ROOT%{_libdir}/rpm-plugins/*.la -sh $RPM_BUILD_ROOT/usr/lib/rpm/find-lang.sh $RPM_BUILD_ROOT rpm %clean rm -rf $RPM_BUILD_ROOT @@ -300,8 +265,6 @@ if test -s var/lib/rpm/packages.rpm ; then mv -f var/lib/rpm/packages.rpm var/lib/rpm/packages.rpm3 rm -f var/lib/rpm/conflictsindex.rpm var/lib/rpm/fileindex.rpm var/lib/rpm/groupindex.rpm var/lib/rpm/nameindex.rpm var/lib/rpm/providesindex.rpm var/lib/rpm/requiredby.rpm var/lib/rpm/triggerindex.rpm fi -# delete no longer maintained databases -rm -f var/lib/rpm/Filemd5s var/lib/rpm/Filedigests var/lib/rpm/Requireversion var/lib/rpm/Provideversion %postun %{insserv_cleanup} @@ -309,40 +272,1064 @@ rm -f var/lib/rpm/Filemd5s var/lib/rpm/Filedigests var/lib/rpm/Requireversion va %verifyscript %verify_permissions -f /usr/lib/rpm/permlist -%files -f rpm.lang +%files %defattr(-,root,root) -%doc CHANGES.gz COPYING GROUPS +%doc RPM-PGP-KEY RPM-GPG-KEY CHANGES COPYING GROUPS %doc doc/manual -%doc RPM-HOWTO RPM-Tips +%doc RPM-HOWTO RPM-Tips RPM-Changes /etc/rpm /bin/rpm /usr/bin/* /etc/init.d/rpmconfigcheck /usr/sbin/rcrpmconfigcheck /usr/lib/rpm - %{_libdir}/rpm-plugins - %{_libdir}/librpm.so.* - %{_libdir}/librpmbuild.so.* - %{_libdir}/librpmio.so.* - %{_libdir}/librpmsign.so.* + %{_libdir}/librpm*-*.so %doc %{_mandir}/man[18]/*.[18]* +#%doc %{_mandir}/*/man[18]/*.[18]* + /usr/share/locale/*/LC_MESSAGES/rpm.mo %dir /var/lib/rpm %verify(not mode) %dir %attr(755,root,root) /usr/src/packages/BUILD %verify(not mode) %dir %attr(755,root,root) /usr/src/packages/SPECS %verify(not mode) %dir %attr(755,root,root) /usr/src/packages/SOURCES %verify(not mode) %dir %attr(755,root,root) /usr/src/packages/SRPMS %verify(not mode) %dir %attr(755,root,root) /usr/src/packages/RPMS -%verify(not mode) %dir %attr(755,root,root) /usr/src/packages/BUILDROOT %verify(not mode) %dir %attr(755,root,root) /usr/src/packages/RPMS/* /var/adm/fillup-templates/sysconfig.services-rpm %files devel %defattr(644,root,root,755) /usr/include/rpm + %{_libdir}/librpm*.a + %{_libdir}/librpm*.la %{_libdir}/librpm.so %{_libdir}/librpmbuild.so + %{_libdir}/librpmdb.so %{_libdir}/librpmio.so - %{_libdir}/librpmsign.so - %{_libdir}/pkgconfig/rpm.pc +%package -n popt +Summary: A C library for parsing command line parameters +License: GNU Library General Public License v. 2.0 and 2.1 (LGPL), Other License(s), see package +Group: System/Libraries +Version: 1.7 +Release: 304 +# -%changelog +%description -n popt +Popt is a C library for parsing command line parameters. Popt was +heavily influenced by the getopt() and getopt_long() functions. It +improves on them by allowing more powerful argument expansion. Popt can +parse arbitrary argv[] style arrays and automatically set variables +based on command line arguments. Popt allows command line arguments to +be aliased via configuration files and includes utility functions for +parsing arbitrary strings into argv[] arrays using shell-like rules. + + + +Authors: +-------- + Erik Troan + +%package -n popt-devel +Summary: C Library for Parsing Command Line Parameters +License: GNU Library General Public License v. 2.0 and 2.1 (LGPL), Other License(s), see package +Group: System/Libraries +Version: 1.7 +Release: 304 +Requires: popt = 1.7 +Requires: glibc-devel + +%description -n popt-devel +Popt is a C library for parsing command line parameters. Popt was +heavily influenced by the getopt() and getopt_long() functions, but it +improves on them by allowing more powerful argument expansion. Popt can +parse arbitrary argv[] style arrays and automatically set variables +based on command line arguments. Popt allows command line arguments to +be aliased via configuration files and includes utility functions for +parsing arbitrary strings into argv[] arrays using shell-like rules. + + + +Authors: +-------- + Erik Troan + + +%post -n popt -p /sbin/ldconfig + +%postun -n popt -p /sbin/ldconfig + +%files -n popt +%defattr(-,root,root) + %{_libdir}/libpopt.so.* + /usr/share/locale/*/LC_MESSAGES/popt.mo + +%files -n popt-devel +%defattr(644,root,root,755) + /usr/include/popt.h + %{_libdir}/libpopt.a + %{_libdir}/libpopt.la + %{_libdir}/libpopt.so +%doc %{_mandir}/man3/popt.3* + +%changelog -n rpm +* Thu Nov 30 2006 - mls@suse.de +- disable noprovides patch [#224824] +* Fri Nov 24 2006 - mls@suse.de +- fix buffer overflow in query function [#218983] +- fix off-by-two error in formatStrong [#210135] +- fix typo in (unused) beecrypt code [#219738] +- add standard buildservice macros +* Tue Nov 14 2006 - agruen@suse.de +- Add %%supplements_kernel_module macro for use in firmware and + similar packages which are related to modules in a + kernel-$flavor package: RPM then extracts the modaliases from + the specified module(s) and adds them as Supplements: + modalias(...) tags, so that the package magaer will add + such packages automatically when the respective hardware is + present. +* Wed Nov 08 2006 - agruen@suse.de +- Move the Kernel Module specific macros into the kernel-source + package. +* Fri Oct 20 2006 - agruen@suse.de +- Support the distribution-independent macros + %%kernel_module_package_buildreq, %%kernel_module_package, and + inside %%kernel_module_package, the macros %%flavors_to_build and + %%kernel_source. +* Wed Oct 18 2006 - mls@suse.de +- split up jumbo patch in 78 small patches +- fix lua directory handling [#201518] +- add /etc/rpm directory to filelist [#208762] +* Mon Oct 16 2006 - agruen@suse.de +- Fix the KMP Package spec file template so that whenever the + initrd contains a module that the KMP includes, the initrd will + be regenerated (211646). +* Sun Oct 15 2006 - schwab@suse.de +- Make sure config.rpath is present. +* Mon Oct 02 2006 - agruen@suse.de +- %%suse_kernel_module_package: Abort when trying to build for a + kernel that doesn't have an associated /boot/symsets-$krel.tar.gz + file: we cannot generate the appropriate dependencies without. +* Mon Oct 02 2006 - agruen@suse.de +- Allow kernel modules in packages even when the dependencies + between those packages and the matching kernel packages cannot + be tracked (199474). +* Sun Oct 01 2006 - agruen@suse.de +- Make find-*.ksyms more robust. +* Tue Sep 19 2006 - rguenther@suse.de +- split rpm-python to separate spec file +- remove python-devel BuildRequires +* Tue Aug 15 2006 - ro@suse.de +- workaround for gettext using MKINSTALLDIRS in configure.ac +* Wed Jun 14 2006 - mls@suse.de +- make rpmlib provide rpmlib(PatchRPMs) [#184856] +* Wed Apr 26 2006 - agruen@suse.de +- rpm-suse-kernel-module-subpackage: Use a temporary file location + that only root can write to (169378). +* Fri Apr 21 2006 - mls@suse.de +- copy suse_macros file back into source rpm +* Mon Apr 10 2006 - agruen@suse.de +- rpm-suse-kernel-module-subpackage: Arguments to -p and -f should + be relative to %%_sourcedir. +* Fri Mar 24 2006 - mls@suse.de +- fix uninitialized variable in unused file code [#160434] +* Fri Mar 24 2006 - agruen@suse.de +- %%suse_kernel_module_package: Fix -x case when multiple flavors + to include are specified. Do not build KMP packages without + modversions or kernel(...) requirements. +* Tue Mar 21 2006 - mls@suse.de +- fix PGP signature checking when there is no RSA sig +* Mon Mar 20 2006 - agruen@suse.de +- Switch from modalias(foo) to modalias(kernel-flavor:foo) + supplements to give the resolver enough information to do "the + right thing". +* Sun Mar 19 2006 - agruen@suse.de +- Allow paths relative to %%_sourcedir in + %%suse_kernel_module_package. +* Sat Mar 18 2006 - agruen@suse.de +- Clarify rpm --help texts. +* Fri Mar 17 2006 - mls@suse.de +- fix cond queries that return no result +* Fri Mar 17 2006 - mls@suse.de +- work around broken patchrpm database entries [#156347] +- add query support for suggests/recommends/enhances/supplements + [#155301] +* Sun Mar 12 2006 - agruen@suse.de +- find-supplements.ksyms: Don't generate too many Supplements; + anything that does not have a colon in it (like pci:...) is not + a modalias. +* Sat Mar 11 2006 - ro@suse.de +- find-debuginfo: only "strip-debug" for static libs, + do not use "strip-all" there +* Fri Mar 10 2006 - agruen@suse.de +- Make KMP sub-packages require kernel-$flavor instead of kernel + (mostly cosmetic). +* Fri Mar 10 2006 - dmueller@suse.de +- patch for improved debuginfo extraction (#150940) +* Thu Mar 09 2006 - agruen@suse.de +- find-scripts.diff: Add support for %%__find_enhances and + %%__find_supplements scripts (from mls@suse.de). +- modalias.diff: Add modalias(...) Supplements tags that define + the hardware that kernel module packages support (e.g., + modalias(pci:vBADOFBADdDEADBEEFsv*sd*bc*sc*i*)). +* Mon Mar 06 2006 - agruen@suse.de +- %%suse_kernel_module_package: Add a -p option for defining + additional preamble lines in sub-packages, subject to the same + macro expansion as the sub-package (-s) itself. +* Wed Mar 01 2006 - schwab@suse.de +- Fix logic error in find_debuginfo.sh [#144629]. +* Fri Feb 24 2006 - mls@suse.de +- fix cursor leak in rpmdbGrowIterator [#151953] +- print error message if scriptlet fork fails [#152779] +* Sun Feb 19 2006 - agruen@suse.de +- scripts/find-requires.ksyms: Fix bug in last find-requires.ksyms + fix. +* Sat Feb 18 2006 - ro@suse.de +- allow debuginfo packages also for noarch (for mono,java) +* Fri Feb 17 2006 - mls@suse.de +- put mono debug files in debuginfo packages [#151353] +- fix off-by-one error in glob code +- define _libexecdir to be _libdir [#136762] +- rename improves to supplements +* Thu Feb 16 2006 - agruen@suse.de +- scripts/find-requires.ksyms: Tolerate kernel modules that have + more than one vermagic info entry (it happened!). +* Mon Feb 13 2006 - agruen@suse.de +- rpm-suse-kernel-module-subpackage: + + Search for the spec file in %%_sourcedir and %%_specdir (150119). + + If no KMP subpackage exists, use the Group and Summary tags + of the main package. +* Fri Feb 10 2006 - mls@suse.de +- add back missing chunk of srcdefattr patch [#48870] +- add rpmvercmp patch from Peter Bowan +- add -m32 to ix86 optflags to make --target work [#141206] +* Sat Feb 04 2006 - agruen@suse.de +- rpm-suse-kernel-module-subpackage: Allow to specify a list of + kernel flavors to build (-x) instead of specifying an exclude + list. +* Fri Feb 03 2006 - mls@suse.de +- use RPMSENSE_STRONG instead of RPMSENSE_WEAK +- drop support for EssentialFor +* Wed Feb 01 2006 - agruen@suse.de +- rpm-suse-kernel-module-subpackage: Allow to specify a custom + %%files list for the kernel-specific sub-packages. Use the + Summary and Group tags, and the %%description section from the + KMP sub-package for the kernel-specific sub-packages. +* Tue Jan 31 2006 - agruen@suse.de +- rpm-suse-kernel-module-subpackage: Add version to additional + Provides tag. We may need this for future Obsoletes. +* Fri Jan 27 2006 - mls@suse.de +- added support for EssentialFor and Supports +- enabled support for lua scripts +* Fri Jan 27 2006 - agruen@suse.de +- rpm-suse-kernel-module-subpackage: Add "Requires: kernel". Add + -r option to override the release number. Clean up. +* Thu Jan 26 2006 - agruen@suse.de +- rpm-suse_macros: Add -v option to %%suse_kernel_module_package + to allow specifying a kernel module version different from the + main package version. Restore the %%version, %%summary, and + %%group macros of the main package at the end of + %%suse_kernel_module_package. +* Wed Jan 25 2006 - mls@suse.de +- converted neededforbuild to BuildRequires +* Tue Jan 17 2006 - agruen@suse.de +- rpm-suse_macros: Add %%suse_kernel_module_package macro for + building kernel module packages. +* Wed Jan 11 2006 - agruen@suse.de +- rpm-4.4.2.diff: find-requires.ksyms must not print "Requires:". + Remove trailing whitespace. +* Wed Dec 21 2005 - mls@suse.de +- make transaction lock --root aware +* Mon Dec 19 2005 - mls@suse.de +- don't ignore getcwd return value in build.c +* Mon Dec 19 2005 - mls@suse.de +- fix find-lang.sh script +* Sun Dec 18 2005 - mls@suse.de +- fix find-debuginfo script +* Sun Dec 18 2005 - mls@suse.de +- don't assume root:root defattr +* Sun Dec 18 2005 - agruen@suse.de +- fix wrong buildsubdir macro name +* Thu Dec 15 2005 - mls@suse.de +- update to version 4.4.2 + for now without lua, rpc, dav support +* Wed Dec 07 2005 - agruen@suse.de +- Add find-{requires,provides}.ksyms and invoke them from the + global find-{requires,provides} scripts. The scripts add + "kernel(symbol set) = version" and "kver(symbol) = version" + provides and requires to kernel module packages. +- Add symset-table script used to generate a table of known + kernel symbol sets from /boot/symsets-*.tar.gz. +- Add rpmsort script to sort a file into RPM version order. Used + in kernel scripts to sort kernel packages by version. +* Tue Nov 22 2005 - ro@suse.de +- change NO_BRP_STRIP_DEBUG to NO_DEBUGINFO_STRIP_DEBUG +- fix patchrpm code not to modify immutable header parts +* Fri Nov 18 2005 - ro@suse.de +- honor NO_BRP_STRIP_DEBUG in find-debuginfo.sh +* Sat Oct 29 2005 - mls@suse.de +- use lstat instead of stat when globbing (#129434) +- add RPMTAG_PKGID and RPMTAG_HDRID +- make python always return requires/provides/obsoletes/conflicts + as array +* Mon Oct 24 2005 - ro@suse.de +- find-requires/find-provides: fix MONO_PATH +* Thu Oct 20 2005 - ro@suse.de +- find-requires/find-provides: update mono hooks +* Wed Sep 07 2005 - matz@suse.de +- Make debuginfo packages require exact version of base rpm. +* Fri Sep 02 2005 - mls@suse.de +- backport CLOEXEC workaround [#93727] +- fix typo in man page [#114909] +* Thu Aug 25 2005 - mls@suse.de +- don't catch ignored signals [#74560] +- unblock all signals when running scripts +* Mon Aug 22 2005 - mls@suse.de +- do not try to mmap zero sized files in domd5() +* Fri Aug 12 2005 - mls@suse.de +- change -mcpu to -mtune and add -D_FORTIFY_SOURCE=2 [#104241] +* Wed Aug 03 2005 - mls@suse.de +- ignore /media when creating fdilesystem list +- allow --ignoresize when erasing packages +* Fri Jul 01 2005 - schwab@suse.de +- Fix ppc assembly syntax. +* Wed Jun 08 2005 - matz@suse.de +- add STRIP_KEEP_SYMTAB to find-debuginfo.sh +* Sat May 21 2005 - schwab@suse.de +- find-debuginfo.sh: make writable before extracting debug info, simplify. +* Thu May 19 2005 - schwab@suse.de +- Replace absolute symlinks when copying sources for debuginfo package. +* Wed Apr 06 2005 - schwab@suse.de +- Cleanup neededforbuild. +* Wed Apr 06 2005 - meissner@suse.de +- Added gettext-devel +* Tue Apr 05 2005 - bg@suse.de +- add noarch to valid hppa architectures +* Thu Mar 24 2005 - uli@suse.de +- better ARM support +* Sun Feb 20 2005 - od@suse.de +- fix debugedit for relocatable files (kernel modules) on ppc +* Fri Feb 18 2005 - mls@suse.de +- update debugedit program +* Fri Feb 18 2005 - od@suse.de +- make find-debuginfo.sh handle kernel modules +* Wed Feb 16 2005 - mls@suse.de +- fix --rebuilddb with --root [#50993] +* Fri Feb 11 2005 - mls@suse.de +- update to elfutils-0.97 [#47746], [#48471] +- update to db-4.2.52 [#44193] +- pack brp-symlink +* Fri Feb 11 2005 - ro@suse.de +- remove -fsigned-char from rpmrc (#49877) +* Sat Feb 05 2005 - schwab@suse.de +- Fix building with gcc 4. +* Fri Feb 04 2005 - mls@suse.de +- make python-2.4 work [#49990] +- fix --setguids / --setperms [#47122] +- makd gpgv4 signatures work [#42282] +- add brp-symlink [#49596] +* Fri Feb 04 2005 - ro@suse.de +- fix one regexp in find_lang change +* Thu Feb 03 2005 - ro@suse.de +- hppa may install noarch +* Wed Feb 02 2005 - schwab@suse.de +- Remove compatibility provides on ia64. +* Mon Jan 31 2005 - adrian@suse.de +- handle also ??_?? languages in %%find_lang. +* Fri Jan 28 2005 - coolo@suse.de +- let the debuginfo packages work again +* Fri Jan 21 2005 - skh@suse.de +- changed jpackage macros +* Fri Jan 21 2005 - coolo@suse.de +- use binutils for debuginfo packages +* Fri Jan 14 2005 - coolo@suse.de +- name the debug package -debuginfo to sync with redhat/fedora +* Mon Dec 13 2004 - sndirsch@suse.de +- moved chinese popt mo file to correct directory (Bug #47262) +* Fri Dec 03 2004 - mls@suse.de +- fix update of rpm with same name/version/release but different + architecture +* Thu Nov 25 2004 - ro@suse.de +- fix build with python-2.4 +* Tue Nov 16 2004 - ro@suse.de +- update permissions handling +* Tue Oct 19 2004 - ro@suse.de +- locale rename: no -> nb +* Mon Sep 27 2004 - mls@suse.de +- move TE type initializaten before the addTE call to make + relocations work [#34871, #43557] +* Fri Sep 24 2004 - mls@suse.de +- check payloadformat for "cpio", print extra deltarpm message +- don't skip directories in the fingerprint check when deleting rpms +* Thu Sep 23 2004 - mls@suse.de +- allow database read access in scripts +* Wed Sep 22 2004 - mls@suse.de +- only retry locking if errno is EAGAIN [#45704] +* Fri Sep 17 2004 - mls@suse.de +- fix isSpecfile fix +- reset SIGILL handler in RPMClass() +* Mon Sep 13 2004 - mls@suse.de +- glob.h: add workaround for invalid prototypes +* Thu Sep 09 2004 - mls@suse.de +- fix jpackage macros +- change binary payload compression to w9.bzdio +- fix localization of query results [#38474] +- delete unmaintained cpanflute scripts [#39988] +- patch isSpecfile to be less restrictive [#40328] +- wait up to 3 minutes for the package lock [#40961] +* Thu Sep 02 2004 - mls@suse.de +- add jpackage macros +* Fri Aug 06 2004 - mls@suse.de +- make it build with new automake +* Wed Jun 23 2004 - mls@suse.de +- add support for mono provides/requires autodetection. + limited to *.exe and *.dll for now. +* Sun May 23 2004 - schwab@suse.de +- Don't record timestamp in compressed manpages. +* Thu Apr 22 2004 - mls@suse.de +- add DISABLE_RESTART_ON_UPDATE and DISABLE_STOP_ON_REMOVAL + sysconfig variables +* Mon Apr 19 2004 - mls@suse.de +- go back to libpopt.so.0.0.0 +- also create and pack libpopt.so.1.0.0 for compatibility +* Wed Mar 31 2004 - uli@suse.de +- added detection of i686-capable Transmeta Crusoe that reports + as being i586 (bug #37713). This patch is necessary because YaST + (rightfully) tries to install an i686 glibc on machines with this CPU, but + RPM refuses to do so -> BOOM. This patch is safe because it only uses + cpuid functions already used earlier in RPMClass() and does not do + anything if the CPU identification string does not end in "ineTMx86". +* Wed Mar 31 2004 - ke@suse.de +- remove broken german translation file [#30665], +* Fri Mar 26 2004 - mls@suse.de +- use the system's zlib, fixes python segfault [#36810] +* Sun Mar 21 2004 - aj@suse.de +- Work around lvalue used as cast problems. +* Thu Mar 18 2004 - mls@suse.de +- convert query results to locale encoding [#28347] +- don't check provides if filename doesn't contain '/' [#32078] +- allow interrups if database is RDONLY [#33026] +- added _srcdefattr macro to set defattr for srpms [#33870] +- drop sbits from old files if installing new version [#35376] +- remove bogus entries from .la files [#36346] +- add _docdir_fmt macro to make it possible to create rpms + for other distributions +* Sat Mar 06 2004 - ro@suse.de +- readd lost patch hunk from last change: + set docdir default back to .../packages/%%name (w/o version) +* Fri Mar 05 2004 - mls@suse.de +- backport some fixes from rpm-4.2 +- match py_libdir macro definition with python +- clean and re-create buildroot in a safe way +* Sat Feb 28 2004 - schwab@suse.de +- Remove anchor from pattern in find-requires. +* Fri Feb 27 2004 - schwab@suse.de +- Silence error from find. +* Fri Feb 27 2004 - mls@suse.de +- fix definition of _initrddir +- set sysconfdir to /etc +- set localstatedir to /var +* Thu Feb 26 2004 - schwab@suse.de +- Handle more cases of filenames with spaces. +* Thu Feb 26 2004 - ro@suse.de +- some fixes in linux.prov to survive filenames with spaces +* Thu Feb 12 2004 - mls@suse.de +- fixed linux.req soname generation (#21664) +- disable nptl for now +* Mon Feb 09 2004 - kukuk@suse.de +- linux.req: Fix finding of interpreters +* Sat Feb 07 2004 - olh@suse.de +- disable redhat's uname hack for ppc +* Thu Feb 05 2004 - ro@suse.de +- linux.prov: don't block soname in versioned-requires +- linux.req: disable perl-requires, it's broken +* Tue Feb 03 2004 - schwab@suse.de +- Readd ia64 64bit provides hack. +* Tue Feb 03 2004 - kukuk@suse.de +- Remove all special find-requires scripts and use the default one +* Sat Jan 17 2004 - schwab@suse.de +- Filter out linux-gate.so. +* Thu Jan 15 2004 - schwab@suse.de +- For ia64 require 64bit symbols and provide them both with and without + 64bit. +* Tue Jan 13 2004 - adrian@suse.de +- call ldconfig +- add missing Requires in -devel packages +- add %%defattr +* Fri Jan 09 2004 - kukuk@suse.de +- Coompile with "-fno-strict-aliasing" +* Fri Nov 14 2003 - bg@suse.de +- added changes for hppa +- fix build for hppa +* Fri Oct 10 2003 - sf@suse.de +- added alias 'amd64' for 'x86_64' +* Fri Oct 10 2003 - ro@suse.de +- ignore "linux-gate.so" in ldd output (on 2.6 systems) +* Wed Oct 08 2003 - schwab@suse.de +- Add popt to prerequires for rpm. +* Tue Sep 23 2003 - mls@suse.de +- really disable rpmconfigcheck +* Sat Sep 20 2003 - kukuk@suse.de +- Don't enable rpmconfigcheck per default +* Fri Sep 19 2003 - schwab@suse.de +- Fix descriptor leak [#31450]. +* Mon Sep 15 2003 - mls@suse.de +- remove redhat options from popt (#30302) +- check name and arch to find out if two packages are the same +* Fri Sep 05 2003 - mls@suse.de +- fix rpmalMakeIndex and off by one error in rpmalAllSatisfiesDepend +* Fri Sep 05 2003 - mls@suse.de +- use mkstemp in build.c +- fix --noghost query option +* Fri Sep 05 2003 - mls@suse.de +- escape '+' in MIRE_DEFAULT iterator +- use MIRE_STRCMP when going for an exact match +- update rpmrc +* Wed Sep 03 2003 - mls@suse.de +- speed up installation by making nofsync local and setting it + for all databases but Packages +- fix database locking issue (#29407) +- don't open temporary databases in chroot case (may fix #29584) +* Mon Sep 01 2003 - schwab@suse.de +- Fix assembler routines to not clobber predicate registers. +* Fri Aug 29 2003 - mcihar@suse.cz +- rpm-python require same python version as it was built with +* Fri Aug 22 2003 - mls@suse.de +- make usage of / in post section consistent +- don't force the activation of rpmconfigcheck +* Tue Aug 05 2003 - coolo@suse.de +- give libpopt a soname > 0 as it's not compatible to the libpopt + on SL 8.2 (now that we link shared, it does matter) +* Fri Aug 01 2003 - mls@suse.de +- fix segfault in rpmdbFindByFile +* Thu Jul 31 2003 - mls@suse.de +- added directory tagging to speed up installation/updates +* Tue Jul 29 2003 - mls@suse.de +- add support for patch-rpms +- fix --root option (#28266) +- fix erase exit status (#28267) +- fix database open ignoring locks the second time +* Fri Jul 11 2003 - mls@suse.de +- add perl_vendorlib and perl_vendorarch +- integrate patches +* Tue Jul 01 2003 - coolo@suse.de +- update find-debuginfo.sh to fix permissions of copied files +- give warning on already stripped files +* Fri Jun 27 2003 - schwab@suse.de +- Fix configure scripts. +- Don't link rpm statically. +* Fri Jun 20 2003 - kukuk@suse.de +- use -fPIC, not -fpic to compile elfutils +* Thu Jun 19 2003 - ro@suse.de +- fix build (gettext and definition of mkinstalldirs) +* Mon Jun 16 2003 - kukuk@suse.de +- Don't call find on /usr/share/locale if directory does not exist. +* Sat Jun 14 2003 - coolo@suse.de +- avoid stale links in /usr/src/debug +* Fri Jun 13 2003 - mls@suse.de +- make PreReqs work again if --nodeps is used +- fix rpmconfigcheck +- apply find-debuginfo.sh patch from coolo +* Thu Jun 12 2003 - kukuk@suse.de +- Fix find-lang.sh (special /usr/share/locale handling) +* Thu Jun 12 2003 - coolo@suse.de +- enhancing find-lang.sh to take KDE/GNOME into account and label + them correctly +* Wed Jun 11 2003 - kukuk@suse.de +- Remove translated manual pages +* Fri Jun 06 2003 - mls@suse.de +- fix vendor for s390/s390x +* Thu Jun 05 2003 - mls@suse.de +- no longer build rpm static +- add --fileclass and --filecolor macros to rpmpopt +* Thu Jun 05 2003 - ro@suse.de +- remove dangling rpmpopt symlink +* Mon Jun 02 2003 - mls@suse.de +- convertdb1: call providePackageNVR to retrofit "Provide: name = EVR" + into converted headers +* Fri May 23 2003 - ro@suse.de +- fixed brp-compress to convert bzip2 man pages into gziped ones + (even if hardlinked). (#21121) (from ma) +* Fri May 16 2003 - mls@suse.de +- fixed x86_64 build +* Thu May 15 2003 - mls@suse.de +- update to rpm-4.1.1 +* Tue May 13 2003 - mls@suse.de +- don't obsolete own package when refreshing +- fix parsing of nested conditionals (again) +* Tue May 13 2003 - mls@suse.de +- created rpm-python subpackage +- fix check-files/fixowner, second try +* Mon May 12 2003 - mls@suse.de +- fix check-files to work without buildroot +* Mon May 12 2003 - mls@suse.de +- re-activate fixowner/group/perms +- allow /usr/share/info/dir in check-files +- fix 'head -n 1' in /usr/lib/rpm/find-requires +* Thu May 08 2003 - mls@suse.de +- update to rpm-4.1 +* Mon Apr 07 2003 - ro@suse.de +- fix for new head(1) syntax +* Mon Mar 10 2003 - mls@suse.de +- fix exit status if file to be installed is not a rpm package +* Fri Feb 28 2003 - mls@suse.de +- use mkstemp instead of tempnam (#24478) +* Thu Feb 20 2003 - ma@suse.de +- Work arround rpm2cpio wrongly reporting an error, if the rpm file + is read from stdin. (#16800) +* Mon Feb 17 2003 - mls@suse.de +- made rpmconfigcheck add new files to /var/log/update-messages +* Fri Feb 14 2003 - schwab@suse.de +- Save errno inside Fclose, its return value is never checked anyway. +* Fri Feb 14 2003 - pthomas@suse.de +- find-provides for elf64 systems used to omit symbol versions + if they contained the soname, fixed by find_provides_soname.diff. +* Wed Feb 12 2003 - mls@suse.de +- removed runlevels '1' and 'S' from rpmconfigcheck +* Fri Feb 07 2003 - mls@suse.de +- speed up rpmconfigcheck by just checking the old conflicts if + no rpm was installed +- rerun gpg if gpg fails with "option file created" +- set LC_ALL to C before calling gpg +* Tue Jan 28 2003 - kukuk@suse.de +- Remove wrong Provides "rpm-devel" and "rpm-python" from Provides +* Sun Jan 26 2003 - olh@suse.de +- the official arch_canon value for ppc64 is 16, not 5 +* Thu Jan 16 2003 - ma@suse.de +- update subpackage popt to 1.6.4 +* Thu Dec 19 2002 - schwab@suse.de +- Update autogen patch. +* Mon Nov 18 2002 - stepan@suse.de +- add m68k as chanonical architecture to configure.in +* Mon Nov 18 2002 - ro@suse.de +- adapt to latest autoconf +- use host instead of host_alias for %%host_alias since the latter + is not set +* Mon Nov 11 2002 - ma@suse.de +- let linux.prov list vrsion definitions in libraries/plugins without + soname. (find_provides.diff) (#21664) +* Fri Oct 25 2002 - sf@suse.de +- corrected %%_libdir-macro (rpm-3.0.6-platform.diff) +* Mon Oct 21 2002 - schwab@suse.de +- Fix read beyond EOS. +* Mon Oct 07 2002 - ro@suse.de +- fixed brp-compress script for current fileutils + (add LC_TIME=POSIX, this bug lead to broken tcl man pages) +* Wed Oct 02 2002 - mls@suse.de +- update unpatched files in patchrpms even if --nodeps is used + [Bug #20418] +* Sat Aug 24 2002 - ro@suse.de +- fix popt-devel requires +* Sun Aug 18 2002 - olh@suse.de +- adding -mminimal-toc to each package is a boring job + use it per default on ppc64 +* Thu Aug 15 2002 - kukuk@suse.de +- Add insserv PreRequires [Bug #17969] +* Mon Aug 12 2002 - bk@suse.de +- rpmrc/s390{,x}: change dummy -fomit-frame-pointer to -fsigned-char +* Sat Aug 10 2002 - schwab@suse.de +- Make ia64 arch_compat to i686. +* Sat Aug 10 2002 - kukuk@suse.de +- Fix version number of popt-devel +* Fri Aug 09 2002 - kukuk@suse.de +- Fix typo +* Fri Aug 09 2002 - kukuk@suse.de +- Fix requires of rpm-devel and popt-devel +* Fri Aug 09 2002 - ro@suse.de +- adapt automake version in configure +* Fri Jul 26 2002 - mls@suse.de +- Added perl/python macros from conectiva +* Fri Jul 26 2002 - kukuk@suse.de +- Create rpm-devel and popt-devel subpackages [Bug #17225] +* Fri Jul 26 2002 - kukuk@suse.de +- Change Requires for suse-build-key to build-key +* Thu Jul 25 2002 - mls@suse.de +- renamed rpmconfigscan to rpmconfigcheck +- fixed elf64-linux.req to ignore scripts without #! +- disabled tag check in rpmdbFindByFile, too dangerous +* Thu Jul 18 2002 - mls@suse.de +- fixed double free of header if the postinstall script failed +- return exit status when doing --initdb +* Thu Jul 11 2002 - mls@suse.de +- use "officially reserved" value of RPMFILE_UNPATCHED +- added rpmconfigcheck script to search for unresolved config + file changes +* Mon Jul 08 2002 - mls@suse.de +- new version of patchrpm diff: handle patch "freshen" operations + gracefully +- documented patchrpm options +- taggedindex diff: add directory tags to the fileindex to speed + up file conflict detection +* Tue Jul 02 2002 - ke@suse.de +- Update German program messages using translations by Christian + Kirsch. Add as Source7; drop Patch19 [# 8442]. +* Fri Jun 21 2002 - ro@suse.de +- automake is 1.6.2 +* Wed Jun 12 2002 - bk@suse.de +- ppc: fix arch for elf64.prov and elf64.req to powerpc(from olh) +- s390x: fix brp-lib64-linux to ignore */lib/ld64.so.1 in lib check +- remove obsolete x64_64 scripts, replaced by generic elf64 scripts +- rpm-3.0.6.pkg_build.diff: remove obsolete diff for sparc-linux.req +* Fri May 31 2002 - olh@suse.de +- remove ppc64 hack +* Mon May 27 2002 - bk@suse.de +- all lib64 platforms use the same brp, req and prov scripts now. +- merge mips diff to not include private flags into linux.req.suse +- merge last rpm-3.0.6-s390x-lib64.diff into rpm-3.0.6.config.diff +- add (64bit) fix for empty soname in elf64.prov from sles7-s390x +* Fri May 17 2002 - olh@suse.de +- add more ppc64 changes, add brp-ppc64-linux +- apply mips, x86_64 and s390x patches on all archs +- rpm-3.0.6.lib64.diff: merged all lib64 stuff and add SUBSTS macros + for uname->target_cpu handling on ppc64, s390 and x86_64 +* Wed May 15 2002 - ro@suse.de +- update brp-x86_64-linux +* Wed May 15 2002 - mfabian@suse.de +- fix ja.po, it contained some junk which caused mojibake on + output, especially in ja_JP.UTF-8 locale. Remove a lot + of fuzzies which had correct translations. +* Mon May 13 2002 - olh@suse.de +- do not translate ppc64 to ppc anymore +* Fri Apr 26 2002 - sf@suse.de +- fixed brp-x86_64-linux script +- added *.a-files to brp-script +- look _only_ for files or links with names *.a, *.so* +- added /opt/gnome/lib and /opt/kde/lib +* Wed Apr 24 2002 - sf@suse.de +- added script to show requires and provides with 64 bit + (like s390 and sparc64) +- rpm will now stop (on x86_64) if a 64-bit binary + (or a link to one) is found in + $RPM_BUILD_ROOT{, /usr, /usr/X11R6}/lib +* Wed Apr 24 2002 - ke@suse.de +- patch19: Fix 1 german message (3 strings) in de.po [# 8442]. +* Mon Apr 22 2002 - kukuk@suse.de +- Remove broken s390x try to fix lib64 library location +* Thu Apr 18 2002 - kukuk@suse.de +- x86_64 can also build noarch packages +* Wed Apr 17 2002 - sf@suse.de +- install i386-rpms on x86_64 +- patch65 only, if not on s390x (doesn't apply) +- patch to build with new automake (ro) +* Fri Apr 12 2002 - kukuk@suse.de +- Don't apply s390x 64bit hacks on sparc64, sparc64 has a working + libtool +* Thu Apr 11 2002 - mls@suse.de +- fixed bug in patchrpm case that prevented the reuse of + old timestamps in unpatched files in some cases +- fixed patchrpm dependency failure message +* Wed Apr 10 2002 - sf@suse.de +- added x86_64 architecture +- added --libdir to autogen.sh to copy the libs depending on + architecture (lib / lib64) +* Fri Mar 29 2002 - schwab@suse.de +- Fix for new autotools. +* Fri Mar 22 2002 - mls@suse.de +- added rpmqpack program to speed up susehelp +* Wed Mar 20 2002 - ro@suse.de +- modified config.diff for currently used optflags (#15123) +* Mon Mar 18 2002 - schwab@suse.de +- Don't lose errno. +* Mon Mar 11 2002 - mls@suse.de +- use gpg --keyring when checking keys with uid != 0 +- use hardcoded keyring path if _gpg_path is not set and uid == 0 +- removed _gpg_path from suse_macros +* Sat Mar 09 2002 - bk@suse.de +- brp-s390x-linux: merge lib64 fix: patch .la files when moving +* Fri Mar 08 2002 - ma@suse.de +- introduced x86_64 architecture in rpmrc (#14110) +* Fri Mar 08 2002 - mls@suse.de +- backported rpm4 fix to get mtime right on s390x +* Mon Feb 25 2002 - mls@suse.de +- added patchrpm support +- changed rpm -qi to include the distribution +* Thu Feb 21 2002 - schwab@suse.de +- Fix to build with new gettext. +* Mon Feb 18 2002 - ro@suse.de +- added requires for suse-build-key +* Mon Feb 11 2002 - ro@suse.de +- tar option for bz2 is now "j" (re-added) +* Mon Feb 11 2002 - ma@suse.de +- unk_ugname_cached.diff: Upon building a package, unpacking sources + by calling tar from the spec file, may lead to files with unknown + user/group names. If those files are to be included in the final + package, it's not appropriate to simply map unknown user/group names + to the builders user/group (usg. root). This behaviour has been disabled + and building the package will fail. There are ample means to propperly + define file attributes. If a spec file does not use them, although it + should, it's considered broken. + Unknown user/group names lead to NULL entries in rpms user/group name cache, + which may cause a segmentation fault on cache lookup. This has been fixed. +* Sat Jan 26 2002 - ro@suse.de +- apply configure-diff also on s390x +* Mon Jan 21 2002 - bk@suse.de +- use RPM_OPT_FLAGS for compilation +- add lib64 support for s390x +- update srcdir-supplied rpm-suse_macros file to newest version + adds: %%_lib handling for ltconfig/-main and macro suse_update_libdir +- sparc64 and s390x: call scripts/brp-%%_arch-linux at the end of install +* Wed Jan 16 2002 - schwab@suse.de +- Fix parsing of nested conditionals. +* Wed Jan 02 2002 - schwab@suse.de +- Remove wrong assertion. +* Tue Dec 18 2001 - adrian@suse.de +- fix find-requires for objdump with private flags finaly +* Mon Dec 17 2001 - adrian@suse.de +- apply mips patch only on mips architecture +- fix mips patch +* Sun Dec 16 2001 - adrian@suse.de +- fix find-requires script for mips + ( do not include private flags from objdump to dependencies ) +* Wed Dec 05 2001 - schwab@suse.de +- Use optind = 0 to reset getopt in glibc. +* Mon Dec 03 2001 - schwab@suse.de +- Fix another endian bug due to pointer mismatch. +* Thu Nov 22 2001 - mls@suse.de +- reset getopt in grabArgs() macro expansion +* Thu Nov 15 2001 - ma@suse.de +- Fixed: copyFile() in rpmchecksig didn't recognize 'No space left on + device' condition, when creating tempfiles. rpm reported that the + signature was not ok instead. (#12294) +* Thu Nov 08 2001 - adrian@suse.de +- name mips big endian as "mips" instead of "mipseb" + this is compatible to all GNU tools and to the SGI distribution +* Sat Nov 03 2001 - ro@suse.de +- accept automake 1.5 (still needs depcomp added) +* Tue Sep 04 2001 - schwab@suse.de +- Accept libtool 1.4.1. +* Fri Aug 17 2001 - ro@suse.de +- Exclude /usr/share/doc from Requires +* Sat Jul 21 2001 - schwab@suse.de +- Adapt for autoconf 2.52. +- Allow libtool version suffix. +* Tue Jul 03 2001 - kukuk@suse.de +- Fix typo in last change +* Mon Jul 02 2001 - ma@suse.de +- Change -m486 to -mcpu=i486 in optflags +* Wed Jun 20 2001 - ma@suse.de +- Don't define popt version via macro. Abuild does not like it (#8224). +- Patches for rpmrc.in (ia64.dif,ppc64.rpmrc.diff) incorporated + into config.diff. +- Patches for brp scripts (strip_no_lib.dif) and sparc64-linux.{req,prov} + scripts (sparc64.dif) incorporated into pkg_build.diff. +* Wed Jun 13 2001 - bk@suse.de +- rpm-3.0.6.config.diff: add s390x support +* Mon Jun 11 2001 - olh@suse.de +- add ppc64 diff +* Fri Jun 08 2001 - schwab@suse.de +- Fix endian bugs. +* Mon Jun 04 2001 - kukuk@suse.de +- Fix requires/provides scripts for sparc64 +* Fri Jun 01 2001 - schwab@suse.de +- Fix for new configure tools. +* Wed May 09 2001 - mfabian@suse.de +- bzip2 sources +* Thu May 03 2001 - ma@suse.de +- provides script shouldn't block soname as version +* Tue May 01 2001 - kukuk@suse.de +- modify spec file for sparc64 +* Thu Apr 12 2001 - ro@suse.de +- gettextize to compile with new gettext +* Fri Apr 06 2001 - kukuk@suse.de +- Make some changes to the changes entries so rpm likes it again +* Thu Mar 29 2001 - ro@suse.de +- provides/requires script: add "-n200" to xargs arguments +* Mon Feb 26 2001 - ro@suse.de +- no optimization for alpha for now ... +* Wed Feb 14 2001 - ma@suse.de +- Fix rpmio (unknown type off64_t) with glibc >= 2.2 +- Fix configure.in to recognize SuSE as platform specific vendor +* Tue Feb 06 2001 - ro@suse.de +- popt: include float.h to make it compile +* Wed Jan 17 2001 - schwab@suse.de +- Mark ia64 as compatible to i386. +* Mon Jan 08 2001 - ma@suse.de +- fixed previous fix (error occuring outside %%doc was lost) +* Sat Jan 06 2001 - ma@suse.de +- fixed rpm does not abort build if %%doc file is missing (#503) +* Mon Nov 27 2000 - ma@suse.de +- wrongly free() after alloca() fixed +* Thu Nov 23 2000 - bk@suse.de +- removed old s390 hack(not needed-breaks with new rpm and glibc) +* Tue Nov 14 2000 - ro@suse.de +- added patch not to strip all shared libs and + files with "/lib/modules/" in path +* Fri Nov 03 2000 - ma@suse.de +- let 'rpm -e --root ..' remove files/dirs chroot. +* Wed Oct 25 2000 - ma@suse.de +- update subpackage popt to 1.6 +* Tue Oct 17 2000 - ma@suse.de +- fixed missing libpopt.so in popt subpackage +* Fri Oct 06 2000 - ma@suse.de +- update to 3.0.6 +* Fri Sep 29 2000 - schwab@suse.de +- Fix last change to stay compatible with glibc < 2.2. +* Fri Sep 29 2000 - schwab@suse.de +- Fix libio cookie function pointer clash in rpmio. +* Fri Jul 28 2000 - ma@suse.de +- update to 3.0.5 (handles RPM v4 packages) +- ia64/s309 patches incorporated +* Wed Jul 26 2000 - ma@suse.de +- ignore chown() errors eg. if files are installed on a DOS partition +* Fri Jul 14 2000 - ma@suse.de +- fixed: ignore dependencies below /usr/share/doc. +- rpmrc: synced s390 entries with those in rpm-4.0. +* Mon Jun 26 2000 - bk@suse.de +- build static on s390 too. +* Fri May 26 2000 - schwab@suse.de +- For for new libbz2 API. +* Thu May 18 2000 - kasal@suse.de +- hope now rpm-3.0.4-macro-grabArgs.patch works +* Wed May 17 2000 - kasal@suse.cz +- fixed a typo in rpm-3.0.4-macro-grabArgs.patch (c=='?') +- fixed a problem when + ifarch someother + define macro sometext + endif + defined macro anyway +* Tue May 16 2000 - kasal@suse.cz +- fixed the bug with {?suse_update_config:%%{suse_update_config -f}} +* Fri May 12 2000 - schwab@suse.de +- Make ia64 compatible with noarch. +* Wed Apr 26 2000 - ma@suse.de +- updated 3.0.4, removed obsolete patches, builds on + libc5 +* Fri Apr 14 2000 - ma@suse.de +- Update for RPM-HOWTO +- Fix in config.diff (use Makefile.am not Makefile.in) +* Mon Apr 10 2000 - schwab@suse.de +- Fix config patch. +* Thu Apr 06 2000 - bk@suse.de +- added /lib/libpopt.so* to filelist on s390 +* Wed Apr 05 2000 - bk@suse.de +- uses autoconf and automake now +- added /lib/libbz2.so* and /lib/libz.so* to filelist on s390 +* Sat Apr 01 2000 - bk@suse.de +- add s390 architecture support to rpm +- add required %%suse_update_config for s390 +- rpm is NOT linked statically on s390 for now +* Tue Mar 28 2000 - ma@suse.de +- rpm.spec: avoid macro usage in 'Version:' entry +* Thu Mar 02 2000 - schwab@suse.de +- Fix md5 for ia64. +* Mon Feb 28 2000 - ma@suse.de +- remove 'libNoVersion' in find-requires +* Wed Feb 23 2000 - schwab@suse.de +- recognize ia64 as architecture. +* Mon Feb 07 2000 - ma@suse.de +- rebuilddb fix +- set info/mandir macros to /usr/share/... +* Wed Feb 02 2000 - ma@suse.de +- update to 3.0.4 (popt-1.5) +- new subpackage: popt +* Sat Nov 13 1999 - kukuk@suse.de +- Add sparc64 directory +- Fix installation into RPM_BUILD_ROOT directory +* Mon Nov 08 1999 - kukuk@suse.de +- add directory /usr/src/packages/RPMS/sparc +* Thu Nov 04 1999 - bs@suse.de +- fixed bug in find-requires regarding pseudo scripts + starting with "#! --" +* Thu Oct 28 1999 - bs@suse.de +- added directories /usr/src/packages/RPMS/{ppc,noarch} +* Wed Oct 27 1999 - ma@suse.de +- place suse_macrofile in source/binary package +- don't check reqires below /usr/doc/ +* Mon Sep 13 1999 - bs@suse.de +- ran old prepare_spec on spec file to switch to new prepare_spec. +* Thu Sep 09 1999 - bs@suse.de +- fixed call of Check at the end of %%install section +* Mon Jul 19 1999 - ma@suse.de +- again rebuilddb.patch +* Wed Jul 14 1999 - ro@suse.de +- update to 3.0.3 +* Mon Jun 28 1999 - ro@suse.de +- changed macros.in for libc5 : no "h" parameter for chown,chmod +* Fri Jun 25 1999 - ro@suse.de +- update to rpm-3.0.2 +- added librpmbuild.a to filelist +- added patch not to generate dependency for libNoVersion +- rebuilddb.patch removed (incorporated in source) +* Thu Jun 17 1999 - ma@suse.de +- fixed bug when --rebuilddb and --root where used + at the same time. +* Wed May 26 1999 - ro@suse.de +- update to 3.0.1 +* Mon Apr 26 1999 - werner@suse.de +- Speed up find-requires for linux +* Mon Apr 26 1999 - ro@suse.de +- update to 3.0 (noreplace fix has been incorporated) +* Mon Apr 12 1999 - ro@suse.de +- update to 2.93 +* Fri Mar 19 1999 - ro@suse.de +- update to 2.92 +* Thu Mar 18 1999 - ro@suse.de +- respect movement of libz to usr/lib +* Sun Feb 28 1999 - ro@suse.de +- update to rpm-src from 99/02/25 +* Sat Feb 27 1999 - ro@suse.de +- install both dirs RPM/i386 and RPM/alpha (since buildarch doesn't + seem to be defined now ?) +* Tue Feb 23 1999 - ro@suse.de +- adapted macros file to SuSE +- fixed segfault when not using BuildRoot +* Tue Feb 23 1999 - ro@suse.de +- modified diff-style +- use additional parameter "-h" on chown after unpacking in build +* Mon Feb 22 1999 - ro@suse.de +- update to 2.91 +- ported ma's fixes +* Wed Nov 25 1998 - ma@suse.de +- new version 2.5.5 +- fixed in 2.5.5: find-requires/provides bug +- fixed in 2.5.5: rebuilddb +* Wed Nov 18 1998 - ma@suse.de +- link rpm.dyn dynamic against libc only +* Mon Nov 16 1998 - ma@suse.de +- shared binary (/usr/lib/rpm/rpm.dyn) added +* Tue Nov 10 1998 - ro@suse.de +- fixed find-requires (linux.req) +* Mon Nov 09 1998 - ro@suse.de +- added %%post: do rpm --initdb if triggerindex.rpm doesn't exist +- do chown root.root for RPM-HOWTO +* Thu Nov 05 1998 - ma@suse.de +- new version 2.5.4 +- fix for rebuilddb +- fix for %%config(noreplace) +- RPM-Changes html document that describes the important changes + in RPM since what is documented in Maximum RPM. +* Tue Nov 03 1998 - ro@suse.de +- disabled glibc-patch for build in glibc-2.0 +* Sun Sep 20 1998 - ro@suse.de +- use libdb185.a for rpm in glibc system +* Thu Sep 03 1998 - ma@suse.de +- glibc patches +* Thu Feb 05 1998 - ro@suse.de +- update to 2.4.12 +* Tue Dec 09 1997 - bs@suse.de +- skip *.SuSE-dynamic in find-requires +* Wed Nov 12 1997 - ma@suse.de +- new version 2.4.10 +* Sat Nov 08 1997 - ma@suse.de +- patch: rpmdbFindByFile() didn't work for "/". Thus "/" wasn't + handled correctly in querries and upon updates ("rmdir /"). +* Mon Oct 27 1997 - ma@suse.de +- new version 2.4.8 +- spec file for autobuild provided + - dirs below /usr/src/packages are installed mode 1777 +- obsolete: patch to allow installing rpm v1 packages (from Aug 7 1997) + Seems to be fixed in 2.4.8 +- patch: always 'chdir /' before executing scripts. +- patch: remove empty dirs when installing a symlink +- patch: ignore errors when installing a symlink and called from YaST +- de.po update +* Thu Aug 07 1997 - ma@suse.de +- duplicate '--nodeps' entry in rpm manpage deleted. +- quick patch to allow installing rpm v1 packages. +- workaround to skip installing a symlink (Jul 15 1997) + is disabeled, unless environment variable RPM_IgnoreFailedSymlinks + is set. +* Tue Jul 15 1997 - ro@suse.de +- added workaround to skip installing a symlink when + impossible to remove an existing directory +* Thu Jun 26 1997 - ma@suse.de +- introducing rpm, version 2.4.1 +- documentation (ascii,html) in usr/doc/packages/rpm diff --git a/rpmconfigcheck b/rpmconfigcheck index 7699148..c7a1267 100644 --- a/rpmconfigcheck +++ b/rpmconfigcheck @@ -11,7 +11,7 @@ ### BEGIN INIT INFO # Provides: rpmconfigcheck # Required-Start: $remote_fs -# Required-Stop: $null +# Required-Stop: # Default-Start: 2 3 5 # Default-Stop: # Description: rpm config file scan @@ -66,11 +66,7 @@ case "$1" in rm -f $configcheckfile.old $configcheckfile.dup $configcheckfile.new fi ;; - stop) - ;; - status) - rc_failed 4 - rc_status -v + stop|status) ;; *) echo "Usage: $0 {start}" diff --git a/rpmdb_get_open_flags.diff b/rpmdb_get_open_flags.diff deleted file mode 100644 index eab0b19..0000000 --- a/rpmdb_get_open_flags.diff +++ /dev/null @@ -1,13 +0,0 @@ -Suppress berkeleydb error messages when doing 'rpm --verifydb'. - ---- lib/rpmdb.c.orig 2011-05-12 14:08:07.000000000 +0000 -+++ lib/rpmdb.c 2011-05-12 14:09:06.000000000 +0000 -@@ -165,7 +165,7 @@ static dbiIndex rpmdbOpenIndex(rpmdb db, - uintId, uintCmp, NULL); - } - /* If primary got created, we can safely run without fsync */ -- if ((dbiFlags(dbi) & DBI_CREATED) || db->cfg.db_no_fsync) { -+ if ((!verifyonly && (dbiFlags(dbi) & DBI_CREATED)) || db->cfg.db_no_fsync) { - rpmlog(RPMLOG_DEBUG, "disabling fsync on database\n"); - db->cfg.db_no_fsync = 1; - dbSetFSync(db->db_dbenv, 0); diff --git a/rpmpopt.diff b/rpmpopt.diff index 0a00ea8..6f88a93 100644 --- a/rpmpopt.diff +++ b/rpmpopt.diff @@ -1,8 +1,10 @@ ---- ./rpmpopt.in.orig 2011-05-11 14:27:32.000000000 +0000 -+++ ./rpmpopt.in 2011-05-11 15:02:34.000000000 +0000 -@@ -101,7 +101,8 @@ Relocations : %|PREFIXES?{[%{PREFIXES} ] +Index: rpmpopt.in +=================================================================== +--- rpmpopt.in.orig ++++ rpmpopt.in +@@ -86,7 +86,8 @@ Signature : %|DSAHEADER?{%{DSAHEADER:p + %|PACKAGER?{Packager : %{PACKAGER}\n}|\ %|URL?{URL : %{URL}\n}|\ - %|BUGURL?{Bug URL : %{BUGURL}\n}|\ Summary : %{SUMMARY}\n\ -Description :\n%{DESCRIPTION}\n' \ +Description :\n%{DESCRIPTION}\n\ @@ -10,3 +12,78 @@ --POPTdesc=$"list descriptive information from package(s)" rpm alias --changelog --qf '[* %{CHANGELOGTIME:day} %{CHANGELOGNAME}\n%{CHANGELOGTEXT}\n\n]' \ +@@ -129,11 +130,11 @@ rpm alias --fileprovide --qf '[%{FILENAM + rpm alias --filerequire --qf '[%{FILENAMES}\t%{FILEREQUIRE}\n]' \ + --POPTdesc=$"list file names with requires" + +-rpm alias --redhatprovides -q --define '_dbpath /usr/lib/rpmdb/%{_arch}-%{_vendor}-%{_os}/redhat' --whatprovides \ +- --POPTdesc=$"find package name that contains a provided capability (needs rpmdb-redhat package installed)" ++rpm alias --fileclass --qf '[%{FILENAMES}\t%{FILECLASS}\n]' \ ++ --POPTdesc=$"list file names with classes" + +-rpm alias --redhatrequires -q --define '_dbpath /usr/lib/rpmdb/%{_arch}-%{_vendor}-%{_os}/redhat' --whatrequires \ +- --POPTdesc=$"find package name that contains a required capability (needs rpmdb-redhat package installed)" ++rpm alias --filecolor --qf '[%{FILENAMES}\t%{FILECOLORS}\n]' \ ++ --POPTdesc=$"list file names with colors" + + # colon separated i18n domains to use as PO catalogue lookaside for + * retrieving header group/description/summary. +@@ -201,22 +202,22 @@ rpm alias --timecheck --define '_timeche + #rpm exec --target rpmb --target + #rpm exec --short-circuit rpmb --short-circuit + +-rpm exec --initdb rpmd --initdb +-rpm exec --rebuilddb rpmd --rebuilddb +-rpm exec --verifydb rpmd --verifydb +- +-rpm exec --addsign rpmk --addsign +-rpm exec -K rpmk -K +-rpm exec --checksig rpmk --checksig +-rpm exec --import rpmk --import +-rpm exec --resign rpmk --resign +- +-rpm exec -q rpmq -q +-rpm exec --query rpmq --query +-rpm exec --querytags rpmq --querytags +-rpm exec -V rpmv -V +-rpm exec -y rpmv -y +-rpm exec --verify rpmv --verify ++#rpm exec --initdb rpmd --initdb ++#rpm exec --rebuilddb rpmd --rebuilddb ++#rpm exec --verifydb rpmd --verifydb ++ ++#rpm exec --addsign rpmk --addsign ++#rpm exec -K rpmk -K ++#rpm exec --checksig rpmk --checksig ++#rpm exec --import rpmk --import ++#rpm exec --resign rpmk --resign ++ ++#rpm exec -q rpmq -q ++#rpm exec --query rpmq --query ++#rpm exec --querytags rpmq --querytags ++#rpm exec -V rpmv -V ++#rpm exec -y rpmv -y ++#rpm exec --verify rpmv --verify + + #rpm exec -i rpmi -i + #rpm exec --install rpmi --install +@@ -382,7 +383,8 @@ Signature : %|DSAHEADER?{%{DSAHEADER:p + %|PACKAGER?{Packager : %{PACKAGER}\n}|\ + %|URL?{URL : %{URL}\n}|\ + Summary : %{SUMMARY}\n\ +-Description :\n%{DESCRIPTION}\n' \ ++Description :\n%{DESCRIPTION}\n\ ++Distribution: %{DISTRIBUTION}\n' \ + --POPTdesc=$"list descriptive information from package(s)" + + rpmq alias --changelog --qf '[* %{CHANGELOGTIME:day} %{CHANGELOGNAME}\n%{CHANGELOGTEXT}\n\n]' \ +@@ -495,7 +497,8 @@ Size : %-27{SIZE}%|LICENSE?{ + %|PACKAGER?{Packager : %{PACKAGER}\n}|\ + %|URL?{URL : %{URL}\n}|\ + Summary : %{SUMMARY}\n\ +-Description :\n%{DESCRIPTION}\n' \ ++Description :\n%{DESCRIPTION}\n\ ++Distribution: %{DISTRIBUTION}\n' \ + --POPTdesc=$"list descriptive information from package(s)" + + rpmquery alias --changelog --qf '[* %{CHANGELOGTIME:day} %{CHANGELOGNAME}\n%{CHANGELOGTEXT}\n\n]' \ diff --git a/rpmqpack.diff b/rpmqpack.diff index 63605be..3013c3a 100644 --- a/rpmqpack.diff +++ b/rpmqpack.diff @@ -1,32 +1,51 @@ Provide rpmqpack, a fast way to list all installed packages are check if some package is installed. This is a hack. ---- ./Makefile.am.orig 2011-05-11 14:27:32.000000000 +0000 -+++ ./Makefile.am 2011-05-11 15:15:27.000000000 +0000 -@@ -170,6 +170,10 @@ rpmgraph_LDADD = lib/librpm.la rpmio/lib +--- Makefile.am ++++ Makefile.am +@@ -48,7 +48,7 @@ + bin_SCRIPTS = gendiff - dist_bin_SCRIPTS = scripts/gendiff + pkglibdir = @RPMCONFIGDIR@ +-pkglib_PROGRAMS = rpmb rpmd rpmi rpmk rpmq ++pkglib_PROGRAMS = rpmb rpmd rpmi rpmk rpmq rpmqpack + pkglib_DATA = rpmrc rpmpopt-$(VERSION) macros + pkglib_SCRIPTS = find-provides find-requires mkinstalldirs \ + config.guess config.sub config.site +@@ -98,6 +98,12 @@ + rpm2cpio_LDFLAGS = $(myLDFLAGS) + rpm2cpio_LDADD = $(myLDADD) @LIBMISC@ -+bin_PROGRAMS += rpmqpack -+rpmqpack_SOURCES = rpmqpack.c -+rpmqpack_LDADD = lib/librpm.la ++rpmqpack_SOURCES = rpmqpack.c ++rpmqpack_LDFLAGS = $(myLDFLAGS) ++rpmqpack_LDADD = $(top_builddir)/rpmdb/librpmdb.la \ ++ $(top_builddir)/rpmio/librpmio.la \ ++ $(top_builddir)/popt/libpopt.la + - rpmconfig_DATA = rpmrc - rpmrc: $(top_srcdir)/rpmrc.in - @$(SED) \ ---- ./doc/Makefile.am.orig 2011-01-05 08:11:09.000000000 +0000 -+++ ./doc/Makefile.am 2011-05-11 15:16:24.000000000 +0000 -@@ -8,7 +8,7 @@ EXTRA_DIST += $(man_man1_DATA) + $(PROGRAMS): $(myLDADD) @WITH_APIDOCS_TARGET@ - man_man8dir = $(mandir)/man8 - man_man8_DATA = rpm.8 rpmbuild.8 rpmdeps.8 rpmgraph.8 rpm2cpio.8 --man_man8_DATA += rpmdb.8 rpmkeys.8 rpmsign.8 rpmspec.8 -+man_man8_DATA += rpmdb.8 rpmkeys.8 rpmsign.8 rpmspec.8 rpmqpack.8 - EXTRA_DIST += $(man_man8_DATA) + .PHONY: splint +@@ -147,6 +153,8 @@ + @LN_S@ ../lib/rpm/rpmv $(DESTDIR)$(bindir)/rpmverify + rm -f $(DESTDIR)$(bindir)/rpmsign + @LN_S@ ../lib/rpm/rpmk $(DESTDIR)$(bindir)/rpmsign ++ rm -f $(DESTDIR)$(bindir)/rpmqpack ++ @LN_S@ ../lib/rpm/rpmqpack $(DESTDIR)$(bindir)/rpmqpack + rm -f $(DESTDIR)$(bindir)/rpmdb ; \ + @LN_S@ ../lib/rpm/rpmd $(DESTDIR)$(bindir)/rpmdb ; \ + for bf in e i u ; do \ +--- doc/Makefile.am ++++ doc/Makefile.am +@@ -2,6 +2,6 @@ - man_fr_man8dir = $(mandir)/fr/man8 ---- ./doc/rpmqpack.8.orig 2011-05-11 15:15:27.000000000 +0000 -+++ ./doc/rpmqpack.8 2011-05-11 15:15:27.000000000 +0000 + SUBDIRS = manual fr ja ko pl ru sk + +-man_MANS = gendiff.1 rpm.8 rpmbuild.8 rpmcache.8 rpmdeps.8 rpmgraph.8 rpm2cpio.8 ++man_MANS = gendiff.1 rpm.8 rpmbuild.8 rpmcache.8 rpmdeps.8 rpmgraph.8 rpm2cpio.8 rpmqpack.8 + + EXTRA_DIST = $(man_MANS) +--- doc/rpmqpack.8 ++++ doc/rpmqpack.8 @@ -0,0 +1,25 @@ +.TH RPMQPACK 8 "Mar 2002" +.SH NAME @@ -53,8 +72,8 @@ check if some package is installed. This is a hack. + +.SH AUTHOR +Michael Schroeder ---- ./rpmqpack.c.orig 2011-05-11 15:15:27.000000000 +0000 -+++ ./rpmqpack.c 2011-05-11 15:15:27.000000000 +0000 +--- rpmqpack.c ++++ rpmqpack.c @@ -0,0 +1,59 @@ +#include +#include @@ -80,7 +99,7 @@ check if some package is installed. This is a hack. + perror("db_create"); + exit(1); + } -+ if (db->open(db, 0, "/var/lib/rpm/Name", 0, DB_UNKNOWN, DB_RDONLY, 0664)) ++ if (db->open(db, 0, "/var/lib/rpm/Name", 0, DB_HASH, DB_RDONLY, 0664)) + { + perror("db->open"); + exit(1); diff --git a/rpmrc.diff b/rpmrc.diff index f2d5b84..399a67a 100644 --- a/rpmrc.diff +++ b/rpmrc.diff @@ -4,33 +4,46 @@ Index: rpmrc.in =================================================================== --- rpmrc.in.orig +++ rpmrc.in -@@ -12,16 +12,16 @@ +@@ -15,41 +15,42 @@ # "fat" binary with both archs, for Darwin optflags: fat -O2 -g -arch i386 -arch ppc --optflags: i386 -O2 -g -march=i386 -mtune=i686 +-optflags: i386 -O2 -g -march=i386 -mcpu=i686 -optflags: i486 -O2 -g -march=i486 -optflags: i586 -O2 -g -march=i586 -optflags: i686 -O2 -g -march=i686 --optflags: pentium3 -O2 -g -march=pentium3 --optflags: pentium4 -O2 -g -march=pentium4 --optflags: athlon -O2 -g -march=athlon -+optflags: i386 -O2 -g -m32 -march=i486 -fmessage-length=0 -D_FORTIFY_SOURCE=2 -fstack-protector -funwind-tables -fasynchronous-unwind-tables -+optflags: i486 -O2 -g -m32 -march=i486 -fmessage-length=0 -D_FORTIFY_SOURCE=2 -fstack-protector -funwind-tables -fasynchronous-unwind-tables -+optflags: i586 -O2 -g -m32 -march=i586 -mtune=i686 -fmessage-length=0 -D_FORTIFY_SOURCE=2 -fstack-protector -funwind-tables -fasynchronous-unwind-tables -+optflags: i686 -O2 -g -m32 -march=i686 -mtune=i686 -fmessage-length=0 -D_FORTIFY_SOURCE=2 -fstack-protector -funwind-tables -fasynchronous-unwind-tables -+optflags: pentium3 -O2 -g -m32 -march=pentium3 -+optflags: pentium4 -O2 -g -m32 -march=pentium4 -+optflags: athlon -O2 -g -m32 -march=athlon - optflags: geode -Os -g -m32 -march=geode ++optflags: i386 -O2 -g -m32 -march=i486 -fmessage-length=0 -D_FORTIFY_SOURCE=2 ++optflags: i486 -O2 -g -m32 -march=i486 ++optflags: i586 -O2 -g -m32 -march=i586 -mtune=i686 -fmessage-length=0 -D_FORTIFY_SOURCE=2 ++optflags: i686 -O2 -g -m32 -march=i686 -mtune=i686 -fmessage-length=0 -D_FORTIFY_SOURCE=2 + optflags: pentium3 -O2 -g -march=pentium3 + optflags: pentium4 -O2 -g -march=pentium4 + optflags: athlon -O2 -g -march=athlon -optflags: ia64 -O2 -g -optflags: x86_64 -O2 -g -+optflags: ia64 -O2 -g -fmessage-length=0 -D_FORTIFY_SOURCE=2 -fstack-protector -funwind-tables -fasynchronous-unwind-tables -+optflags: x86_64 -O2 -g -m64 -fmessage-length=0 -D_FORTIFY_SOURCE=2 -fstack-protector -funwind-tables -fasynchronous-unwind-tables ++optflags: ia64 -O2 -g -fmessage-length=0 -D_FORTIFY_SOURCE=2 ++optflags: x86_64 -O2 -g -fmessage-length=0 -D_FORTIFY_SOURCE=2 optflags: amd64 -O2 -g optflags: ia32e -O2 -g -@@ -41,15 +41,16 @@ optflags: sparc64v -O2 -g -m64 -mtune=ni + optflags: alpha -O2 -g -mieee +-optflags: alphaev5 -O2 -g -mieee -mcpu=ev5 +-optflags: alphaev56 -O2 -g -mieee -mcpu=ev56 +-optflags: alphapca56 -O2 -g -mieee -mcpu=pca56 +-optflags: alphaev6 -O2 -g -mieee -mcpu=ev6 +-optflags: alphaev67 -O2 -g -mieee -mcpu=ev67 ++optflags: alphaev5 -O2 -g -mieee -mtune=ev5 ++optflags: alphaev56 -O2 -g -mieee -mtune=ev56 ++optflags: alphapca56 -O2 -g -mieee -mtune=pca56 ++optflags: alphaev6 -O2 -g -mieee -mtune=ev6 ++optflags: alphaev67 -O2 -g -mieee -mtune=ev67 + + optflags: sparc -O2 -g -m32 -mtune=ultrasparc + optflags: sparcv8 -O2 -g -m32 -mtune=ultrasparc -mv8 +-optflags: sparcv9 -O2 -g -m32 -mcpu=ultrasparc +-optflags: sparc64 -O2 -g -m64 -mcpu=ultrasparc ++optflags: sparcv9 -O2 -g -m32 -mtune=ultrasparc ++optflags: sparc64 -O2 -g -m64 -mtune=ultrasparc optflags: m68k -O2 -g -fomit-frame-pointer @@ -41,31 +54,44 @@ Index: rpmrc.in -optflags: ppciseries -O2 -g -fsigned-char -optflags: ppcpseries -O2 -g -fsigned-char -optflags: ppc64 -O2 -g -fsigned-char -+optflags: ppc -O2 -g -m32 -fmessage-length=0 -D_FORTIFY_SOURCE=2 -fstack-protector -funwind-tables -fasynchronous-unwind-tables -+optflags: ppc8260 -O2 -g -m32 -+optflags: ppc8560 -O2 -g -m32 -+optflags: ppc32dy4 -O2 -g -m32 -+optflags: ppciseries -O2 -g -m32 -+optflags: ppcpseries -O2 -g -m32 -+optflags: ppc64 -O2 -g -fmessage-length=0 -D_FORTIFY_SOURCE=2 -fstack-protector -funwind-tables -fasynchronous-unwind-tables ++optflags: ppc -O2 -g -fmessage-length=0 -D_FORTIFY_SOURCE=2 ++optflags: ppc8260 -O2 -g ++optflags: ppc8560 -O2 -g ++optflags: ppc32dy4 -O2 -g ++optflags: ppciseries -O2 -g ++optflags: ppcpseries -O2 -g ++optflags: ppc64 -O2 -g -fmessage-length=0 -D_FORTIFY_SOURCE=2 optflags: parisc -O2 -g -mpa-risc-1-0 +optflags: hppa -O2 -g -mpa-risc-1-0 optflags: hppa1.0 -O2 -g -mpa-risc-1-0 optflags: hppa1.1 -O2 -g -mpa-risc-1-0 optflags: hppa1.2 -O2 -g -mpa-risc-1-0 -@@ -75,8 +76,8 @@ optflags: atariclone -O2 -g -fomit-frame +@@ -58,9 +59,9 @@ optflags: hppa2.0 -O2 -g -mpa-risc-1-0 + optflags: mips -O2 -g + optflags: mipsel -O2 -g + +-optflags: armv3l -O2 -g -fsigned-char -fomit-frame-pointer -march=armv3 +-optflags: armv4b -O2 -g -fsigned-char -fomit-frame-pointer -march=armv4 +-optflags: armv4l -O2 -g -fsigned-char -fomit-frame-pointer -march=armv4 ++optflags: armv3l -O2 -g -march=armv3 ++optflags: armv4b -O2 -g -march=armv4 ++optflags: armv4l -O2 -g -march=armv4 + + optflags: atarist -O2 -g -fomit-frame-pointer + optflags: atariste -O2 -g -fomit-frame-pointer +@@ -70,8 +71,8 @@ optflags: atariclone -O2 -g -fomit-frame optflags: milan -O2 -g -fomit-frame-pointer optflags: hades -O2 -g -fomit-frame-pointer -optflags: s390 -O2 -g -optflags: s390x -O2 -g -+optflags: s390 -O2 -g -m31 -fmessage-length=0 -D_FORTIFY_SOURCE=2 -fstack-protector -funwind-tables -fasynchronous-unwind-tables -+optflags: s390x -O2 -g -m64 -fmessage-length=0 -D_FORTIFY_SOURCE=2 -fstack-protector -funwind-tables -fasynchronous-unwind-tables ++optflags: s390 -O2 -g -fmessage-length=0 ++optflags: s390x -O2 -g -fmessage-length=0 - optflags: sh3 -O2 -g - optflags: sh4 -O2 -g -mieee -@@ -200,17 +201,17 @@ os_canon: MacOSX: macosx 21 + ############################################################# + # Canonical arch names and numbers +@@ -181,16 +182,16 @@ os_canon: MacOSX: macosx 21 ############################################################# # For a given uname().machine, the default build arch @@ -77,13 +103,11 @@ Index: rpmrc.in buildarchtranslate: osfmach3_i386: i386 -buildarchtranslate: athlon: i386 --buildarchtranslate: geode: i386 -buildarchtranslate: pentium4: i386 -buildarchtranslate: pentium3: i386 -buildarchtranslate: i686: i386 -buildarchtranslate: i586: i386 +buildarchtranslate: athlon: i586 -+buildarchtranslate: geode: i586 +buildarchtranslate: pentium4: i586 +buildarchtranslate: pentium3: i586 +buildarchtranslate: i686: i586 @@ -91,17 +115,17 @@ Index: rpmrc.in buildarchtranslate: i486: i386 buildarchtranslate: i386: i386 -@@ -239,6 +240,7 @@ buildarchtranslate: ppciseries: ppc +@@ -217,6 +218,7 @@ buildarchtranslate: ppciseries: ppc buildarchtranslate: ppcpseries: ppc buildarchtranslate: ppc64iseries: ppc64 buildarchtranslate: ppc64pseries: ppc64 +buildarchtranslate: powerpc64: ppc64 - buildarchtranslate: armv3l: armv3l - buildarchtranslate: armv4b: armv4b -@@ -270,6 +272,15 @@ buildarchtranslate: sh3: sh3 - buildarchtranslate: sh4: sh4 - buildarchtranslate: sh4a: sh4 + buildarchtranslate: atarist: m68kmint + buildarchtranslate: atariste: m68kmint +@@ -235,6 +237,15 @@ buildarchtranslate: x86_64: x86_64 + buildarchtranslate: amd64: x86_64 + buildarchtranslate: ia32e: x86_64 +buildarchtranslate: parisc: hppa +buildarchtranslate: hppa2.0: hppa @@ -115,7 +139,7 @@ Index: rpmrc.in ############################################################# # Architecture compatibility -@@ -325,14 +336,18 @@ arch_compat: mipsel: noarch +@@ -287,10 +298,16 @@ arch_compat: mipsel: noarch arch_compat: hppa2.0: hppa1.2 arch_compat: hppa1.2: hppa1.1 arch_compat: hppa1.1: hppa1.0 @@ -127,28 +151,30 @@ Index: rpmrc.in +arch_compat: armv5teb: armv5b +arch_compat: armv5b: armv4b arch_compat: armv4b: noarch - arch_compat: armv7l: armv6l - arch_compat: armv6l: armv5tejl - arch_compat: armv5tejl: armv5tel --arch_compat: armv5tel: armv4tl ++ +arch_compat: armv5tel: armv5l -+arch_compat: armv5l: armv4tl - arch_compat: armv4tl: armv4l ++arch_compat: armv5l: armv4l arch_compat: armv4l: armv3l arch_compat: armv3l: noarch -@@ -349,9 +364,9 @@ arch_compat: i370: noarch - arch_compat: s390: noarch - arch_compat: s390x: s390 noarch --arch_compat: ia64: noarch -+arch_compat: ia64: i686 noarch +@@ -308,7 +325,7 @@ arch_compat: s390x: s390 noarch + + arch_compat: ia64: noarch -arch_compat: x86_64: amd64 athlon noarch +arch_compat: x86_64: amd64 em64t athlon noarch arch_compat: amd64: x86_64 athlon noarch arch_compat: ia32e: x86_64 athlon noarch -@@ -444,7 +459,8 @@ buildarch_compat: armv3l: noarch +@@ -384,11 +401,16 @@ buildarch_compat: mipsel: noarch + buildarch_compat: armv3l: noarch + buildarch_compat: armv4b: noarch + buildarch_compat: armv4l: noarch ++buildarch_compat: armv5b: noarch ++buildarch_compat: armv5l: noarch ++buildarch_compat: armv5teb: noarch ++buildarch_compat: armv5tel: noarch + buildarch_compat: hppa2.0: hppa1.2 buildarch_compat: hppa1.2: hppa1.1 buildarch_compat: hppa1.1: hppa1.0 @@ -158,3 +184,12 @@ Index: rpmrc.in buildarch_compat: parisc: noarch buildarch_compat: atarist: m68kmint noarch +@@ -408,7 +430,7 @@ buildarch_compat: x86_64: noarch + buildarch_compat: amd64: x86_64 + buildarch_compat: ia32e: x86_64 + +-macrofiles: @RPMCONFIGDIR@/macros:@RPMCONFIGDIR@/%{_target}/macros:@SYSCONFIGDIR@/macros.*:@SYSCONFIGDIR@/macros:@SYSCONFIGDIR@/%{_target}/macros:~/.rpmmacros ++macrofiles: @RPMCONFIGDIR@/macros:@RPMCONFIGDIR@/%{_target}/macros:@RPMCONFIGDIR@/suse_macros:@SYSCONFIGDIR@/macros.*:@SYSCONFIGDIR@/macros:@SYSCONFIGDIR@/%{_target}/macros:~/.rpmmacros + + # \endverbatim + #*/ diff --git a/rpmrctests.diff b/rpmrctests.diff index 34e42fe..d756989 100644 --- a/rpmrctests.diff +++ b/rpmrctests.diff @@ -1,8 +1,9 @@ -Patch machine detection code: detect transmeta, rename parisc to hppa. [#52713] +Patch machine detection code: always use "ppc", restore SIGILL +handler, detect transmeta. [#52713] ---- ./lib/rpmrc.c.orig 2010-12-03 12:11:57.000000000 +0000 -+++ ./lib/rpmrc.c 2011-05-11 12:48:02.000000000 +0000 -@@ -1,9 +1,6 @@ +--- ./lib/rpmrc.c.orig 2005-01-17 18:46:23.000000000 +0000 ++++ ./lib/rpmrc.c 2005-12-16 18:30:29.000000000 +0000 +@@ -2,9 +2,6 @@ #include "system.h" #include @@ -10,13 +11,37 @@ Patch machine detection code: detect transmeta, rename parisc to hppa. [#52713] -#include -#endif - #if HAVE_SYS_UTSNAME_H - #include -@@ -788,6 +785,14 @@ static inline int RPMClass(void) + #include /* XXX for /etc/rpm/platform contents */ + +@@ -953,20 +950,38 @@ static inline int RPMClass(void) + { + int cpu; + unsigned int tfms, junk, cap, capamd; ++ struct sigaction oldsa; + ++ sigaction(SIGILL, NULL, &oldsa); + signal(SIGILL, model3); + +- if (sigsetjmp(jenv, 1)) ++ if (sigsetjmp(jenv, 1)) { ++ sigaction(SIGILL, &oldsa, NULL); + return 3; ++ } + +- if (cpuid_eax(0x000000000)==0) ++ if (cpuid_eax(0x000000000)==0) { ++ sigaction(SIGILL, &oldsa, NULL); + return 4; ++ } + + cpuid(0x00000001, &tfms, &junk, &junk, &cap); + cpuid(0x80000001, &junk, &junk, &junk, &capamd); cpu = (tfms>>8)&15; -+ if (cpu == 5 ++ /* Check if we have a Transmeta i686-compatible CPU ++ that reports as being i586 */ ++ if(cpu == 5 + && cpuid_ecx(0)=='68xM' + && cpuid_edx(0)=='Teni' + && (cpuid_edx(1) & ((1<<8)|(1<<15))) == ((1<<8)|(1<<15))) { @@ -24,11 +49,13 @@ Patch machine detection code: detect transmeta, rename parisc to hppa. [#52713] + return 6; /* has CX8 and CMOV */ + } + - sigaction(SIGILL, &oldsa, NULL); - ++ sigaction(SIGILL, &oldsa, NULL); ++ if (cpu < 6) -@@ -924,15 +929,6 @@ static int is_geode() - } + return cpu; + +@@ -1076,15 +1091,6 @@ static int is_pentium4() + #endif -#if defined(__linux__) && defined(__powerpc__) @@ -42,8 +69,8 @@ Patch machine detection code: detect transmeta, rename parisc to hppa. [#52713] - /** */ - static void defaultMachine(const char ** arch, -@@ -1059,6 +1055,11 @@ static void defaultMachine(const char ** + static void defaultMachine(/*@out@*/ const char ** arch, +@@ -1219,6 +1225,11 @@ static void defaultMachine(/*@out@*/ con /* big endian */ strcpy(un.machine, "mips"); # endif @@ -55,3 +82,31 @@ Patch machine detection code: detect transmeta, rename parisc to hppa. [#52713] # if defined(__hpux) && defined(_SC_CPU_VERSION) { +@@ -1326,27 +1337,6 @@ static void defaultMachine(/*@out@*/ con + } + # endif + +-# if defined(__linux__) && defined(__powerpc__) +- { +- unsigned pvr = 0; +- __sighandler_t oldh = signal(SIGILL, mfspr_ill); +- if (setjmp(mfspr_jmpbuf) == 0) { +- __asm__ __volatile__ ("mfspr %0, 287" : "=r" (pvr)); +- } +- signal(SIGILL, oldh); +- +- if ( pvr ) { +- pvr >>= 16; +- if ( pvr >= 0x40) +- strcpy(un.machine, "ppcpseries"); +- else if ( (pvr == 0x36) || (pvr == 0x37) ) +- strcpy(un.machine, "ppciseries"); +- else +- strcpy(un.machine, "ppc"); +- } +- } +-# endif +- + /* the uname() result goes through the arch_canon table */ + canon = lookupInCanonTable(un.machine, + tables[RPM_MACHTABLE_INSTARCH].canons, diff --git a/rpmsort b/rpmsort index 841c2d7..a73478b 100644 --- a/rpmsort +++ b/rpmsort @@ -17,7 +17,7 @@ use Getopt::Long qw(:config gnu_getopt); -sub do_rpm_cmp_versions { +sub rpm_cmp_versions { my ($evr1, $evr2) = @_; sub _rpm_cmp { @@ -31,10 +31,8 @@ sub do_rpm_cmp_versions { $s1 =~ s/^[^a-zA-Z0-9]+//; $s2 =~ s/^[^a-zA-Z0-9]+//; if ($s1 =~ /^\d/ || $s2 =~ /^\d/) { - $s1 =~ s/^(0*(\d*))//; $x1 = $2; - return -1 if $1 eq ''; - $s2 =~ s/^(0*(\d*))//; $x2 = $2; - return 1 if $1 eq ''; + $s1 =~ s/^0*(\d*)//; $x1 = $1; + $s2 =~ s/^0*(\d*)//; $x2 = $1; $r = length $x1 <=> length $x2 || $x1 cmp $x2; } else { $s1 =~ s/^([a-zA-Z]*)//; $x1 = $1; @@ -59,35 +57,11 @@ sub do_rpm_cmp_versions { my $reorder = sub { return @_ }; my $key = 0; -my $test = 0; - -sub rpm_cmp_versions { - my ($evr1, $evr2) = @_; - - chomp($evr1, $evr2); - my $res1 = do_rpm_cmp_versions($evr1, $evr2); - if ($test) { - open(my $fd, '-|', 'zypper', '--terse', 'versioncmp', - $evr1, $evr2) or die "zypper: $!\n"; - my $res2 = <$fd>; - close($fd) or die "zypper: $!\n"; - chomp $res2; - if ($res1 != $res2) { - my @operators = qw(< == >); - my $op1 = $operators[$res1 + 1]; - my $op2 = $operators[$res2 + 1]; - - print STDERR "BUG: $evr1 $op1 $evr2 vs. zypper: $evr1 $op2 $evr2\n"; - } - } - return $res1; -} GetOptions ("r|reverse" => sub { $reorder = sub { return reverse @_ } }, - "k|key=i" => \$key, - "test" => \$test) + "k|key=i" => \$key) or do { - print STDERR "Usage $0 [-r, --reverse] [-k N, --key=N] [--test]\n"; + print STDERR "Usage\n"; exit 1; }; diff --git a/safemacro.diff b/safemacro.diff deleted file mode 100644 index 96f065a..0000000 --- a/safemacro.diff +++ /dev/null @@ -1,21 +0,0 @@ ---- rpmio/macro.c.orig 2011-05-17 08:43:40.000000000 +0000 -+++ rpmio/macro.c 2011-05-17 08:44:48.000000000 +0000 -@@ -1016,12 +1016,12 @@ expandMacro(MacroBuf mb, const char *src - char *source = NULL; - - /* Handle non-terminated substrings by creating a terminated copy */ -- if (slen > 0) { -- source = xmalloc(slen + 1); -- strncpy(source, src, slen); -- source[slen] = '\0'; -- s = source; -- } -+ if (!slen) -+ slen = strlen(src); -+ source = xmalloc(slen + 1); -+ strncpy(source, src, slen); -+ source[slen] = '\0'; -+ s = source; - - if (mb->buf == NULL) { - size_t blen = MACROBUFSIZ + strlen(s); diff --git a/safeugid.diff b/safeugid.diff deleted file mode 100644 index 859dd02..0000000 --- a/safeugid.diff +++ /dev/null @@ -1,213 +0,0 @@ -Work around glibc/nscd caching problems when doing 'rpm --root'. - ---- ./lib/rpmchroot.c.orig 2011-05-12 08:26:10.000000000 +0000 -+++ ./lib/rpmchroot.c 2011-05-12 08:28:32.000000000 +0000 -@@ -66,6 +66,7 @@ int rpmChrootIn(void) - } else if (rootState.chrootDone == 0) { - if (chdir("/") == 0 && chroot(rootState.rootDir) == 0) { - rootState.chrootDone = 1; -+ rpmugChroot(1); - } else { - rpmlog(RPMLOG_ERR, _("Unable to change root directory: %m\n")); - rc = -1; -@@ -91,6 +92,7 @@ int rpmChrootOut(void) - } else if (rootState.chrootDone == 1) { - if (chroot(".") == 0 && fchdir(rootState.cwd) == 0) { - rootState.chrootDone = 0; -+ rpmugChroot(0); - } else { - rpmlog(RPMLOG_ERR, _("Unable to restore root directory: %m\n")); - rc = -1; ---- ./lib/rpmug.c.orig 2011-05-12 08:13:52.000000000 +0000 -+++ ./lib/rpmug.c 2011-05-12 08:33:28.000000000 +0000 -@@ -35,6 +35,47 @@ const char * rpmugStashStr(const char *s - return ret; - } - -+#if defined(__GLIBC__) -+ -+static int inchroot; -+ -+/* -+ * Unfortunatelly glibc caches nss/nscd data and there is no -+ * good way to flush those caches when we did a chroot(). Thus -+ * we need to parse /etc/passwd and /etc/group ourselfs. -+ */ -+static int safe_lookup(const char * file, const char * name) -+{ -+ FILE *fp; -+ int l; -+ char buf[4096], *p; -+ -+ if (!name || !*name) -+ return -1; -+ l = strlen(name); -+ if ((fp = fopen(file, "r")) == 0) -+ return -1; -+ while ((p = fgets(buf, sizeof(buf), fp)) != 0) { -+ if (*p == '#') -+ continue; -+ while (*p && (*p == ' ' || *p == '\t')) -+ p++; -+ if (strncmp(p, name, l) != 0 || p[l] != ':') -+ continue; -+ p = strchr(p + l + 1, ':'); -+ if (!p) -+ continue; -+ fclose(fp); -+ p++; -+ while (*p && (*p == ' ' || *p == '\t')) -+ p++; -+ return atoi(p); -+ } -+ fclose(fp); -+ return -1; -+} -+#endif -+ - /* - * These really ought to use hash tables. I just made the - * guess that most files would be owned by root or the same person/group -@@ -68,17 +109,28 @@ int rpmugUid(const char * thisUname, uid - lastUnameAlloced = thisUnameLen + 10; - lastUname = xrealloc(lastUname, lastUnameAlloced); /* XXX memory leak */ - } -- strcpy(lastUname, thisUname); - -- pwent = getpwnam(thisUname); -- if (pwent == NULL) { -- /* FIX: shrug */ -- endpwent(); -+#if defined(__GLIBC__) -+ if (inchroot) { -+ int uid = safe_lookup("/etc/passwd", thisUname); -+ if (uid < 0) -+ return -1; -+ lastUid = uid; -+ } else -+#endif -+ { - pwent = getpwnam(thisUname); -- if (pwent == NULL) return -1; -+ if (pwent == NULL) { -+ /* FIX: shrug */ -+ endpwent(); -+ pwent = getpwnam(thisUname); -+ if (pwent == NULL) return -1; -+ } -+ lastUid = pwent->pw_uid; - } - -- lastUid = pwent->pw_uid; -+ strcpy(lastUname, thisUname); -+ lastUnameLen = thisUnameLen; - } - - *uid = lastUid; -@@ -111,18 +163,29 @@ int rpmugGid(const char * thisGname, gid - lastGnameAlloced = thisGnameLen + 10; - lastGname = xrealloc(lastGname, lastGnameAlloced); /* XXX memory leak */ - } -- strcpy(lastGname, thisGname); - -- grent = getgrnam(thisGname); -- if (grent == NULL) { -- /* FIX: shrug */ -- endgrent(); -+#if defined(__GLIBC__) -+ if (inchroot) { -+ int gid = safe_lookup("/etc/group", thisGname); -+ if (gid < 0) -+ return -1; -+ lastGid = gid; -+ } else -+#endif -+ { - grent = getgrnam(thisGname); - if (grent == NULL) { -- return -1; -+ /* FIX: shrug */ -+ endgrent(); -+ grent = getgrnam(thisGname); -+ if (grent == NULL) { -+ return -1; -+ } - } -+ lastGid = grent->gr_gid; - } -- lastGid = grent->gr_gid; -+ strcpy(lastGname, thisGname); -+ lastGnameLen = thisGnameLen; - } - - *gid = lastGid; -@@ -134,7 +197,7 @@ const char * rpmugUname(uid_t uid) - { - static uid_t lastUid = (uid_t) -1; - static char * lastUname = NULL; -- static size_t lastUnameLen = 0; -+ static size_t lastUnameAlloced = 0; - - if (uid == (uid_t) -1) { - lastUid = (uid_t) -1; -@@ -151,9 +214,9 @@ const char * rpmugUname(uid_t uid) - - lastUid = uid; - len = strlen(pwent->pw_name); -- if (lastUnameLen < len + 1) { -- lastUnameLen = len + 20; -- lastUname = xrealloc(lastUname, lastUnameLen); -+ if (lastUnameAlloced < len + 1) { -+ lastUnameAlloced = len + 20; -+ lastUname = xrealloc(lastUname, lastUnameAlloced); - } - strcpy(lastUname, pwent->pw_name); - -@@ -165,7 +228,7 @@ const char * rpmugGname(gid_t gid) - { - static gid_t lastGid = (gid_t) -1; - static char * lastGname = NULL; -- static size_t lastGnameLen = 0; -+ static size_t lastGnameAlloced = 0; - - if (gid == (gid_t) -1) { - lastGid = (gid_t) -1; -@@ -182,9 +245,9 @@ const char * rpmugGname(gid_t gid) - - lastGid = gid; - len = strlen(grent->gr_name); -- if (lastGnameLen < len + 1) { -- lastGnameLen = len + 20; -- lastGname = xrealloc(lastGname, lastGnameLen); -+ if (lastGnameAlloced < len + 1) { -+ lastGnameAlloced = len + 20; -+ lastGname = xrealloc(lastGname, lastGnameAlloced); - } - strcpy(lastGname, grent->gr_name); - -@@ -200,3 +263,16 @@ void rpmugFree(void) - rpmugGname(-1); - strStash = strCacheFree(strStash); - } -+ -+void rpmugChroot(int in) -+{ -+ /* tell libc to drop caches / file descriptors */ -+ endpwent(); -+ endgrent(); -+ /* drop our own caches */ -+ rpmugUid(NULL, NULL); -+ rpmugGid(NULL, NULL); -+#if defined(__GLIBC__) -+ inchroot = in; -+#endif -+} ---- ./lib/rpmug.h.orig 2011-05-12 08:13:52.000000000 +0000 -+++ ./lib/rpmug.h 2011-05-12 08:26:56.000000000 +0000 -@@ -15,4 +15,6 @@ const char * rpmugGname(gid_t gid); - - void rpmugFree(void); - -+void rpmugChroot(int in); -+ - #endif /* _RPMUG_H */ diff --git a/sbitcheck.diff b/sbitcheck.diff new file mode 100644 index 0000000..368e3de --- /dev/null +++ b/sbitcheck.diff @@ -0,0 +1,105 @@ +When deleting files, drop any s-bit first, so that a malicious +user does not have access to old programs if he hard links them +to some other directory. [#50376] rh#125517 + +Already in rpm-4.4.7. + +Index: lib/cpio.h +=================================================================== +--- lib/cpio.h.orig ++++ lib/cpio.h +@@ -64,7 +64,8 @@ typedef enum cpioMapFlags_e { + CPIO_MAP_ABSOLUTE = (1 << 5), + CPIO_MAP_ADDDOT = (1 << 6), + CPIO_ALL_HARDLINKS = (1 << 7), /*!< fail if hardlinks are missing. */ +- CPIO_MAP_TYPE = (1 << 8) /*!< only for building. */ ++ CPIO_MAP_TYPE = (1 << 8), /*!< only for building. */ ++ CPIO_SBIT_CHECK = (1 << 9) + } cpioMapFlags; + + #define CPIO_NEWC_MAGIC "070701" +Index: lib/fsm.c +=================================================================== +--- lib/fsm.c.orig ++++ lib/fsm.c +@@ -2127,6 +2127,11 @@ if (!(fsm->mapFlags & CPIO_ALL_HARDLINKS + /*@notreached@*/ break; + + case FSM_UNLINK: ++ if (fsm->mapFlags & CPIO_SBIT_CHECK) { ++ struct stat stb; ++ if (Lstat(fsm->path, &stb) == 0 && S_ISREG(stb.st_mode) && (stb.st_mode & 06000) != 0) ++ chmod(fsm->path, stb.st_mode & 0777); ++ } + rc = Unlink(fsm->path); + if (_fsm_debug && (stage & FSM_SYSCALL)) + rpmMessage(RPMMESS_DEBUG, " %8s (%s) %s\n", cur, +Index: lib/psm.c +=================================================================== +--- lib/psm.c.orig ++++ lib/psm.c +@@ -1472,7 +1472,7 @@ assert(psm->mi == NULL); + fi->striplen = (xx ? strlen(p) + 1 : 1); + } + fi->mapflags = +- CPIO_MAP_PATH | CPIO_MAP_MODE | CPIO_MAP_UID | CPIO_MAP_GID; ++ CPIO_MAP_PATH | CPIO_MAP_MODE | CPIO_MAP_UID | CPIO_MAP_GID | (fi->mapflags & CPIO_SBIT_CHECK); + + if (headerIsEntry(fi->h, RPMTAG_ORIGBASENAMES)) + rpmfiBuildFNames(fi->h, RPMTAG_ORIGBASENAMES, &fi->apath, NULL); +Index: lib/transaction.c +=================================================================== +--- lib/transaction.c.orig ++++ lib/transaction.c +@@ -187,6 +187,13 @@ static int handleInstInstalledFiles(cons + if (XFA_SKIPPING(fi->actions[fileNum])) + continue; + ++ if (!(fi->mapflags & CPIO_SBIT_CHECK)) { ++ int_16 omode = rpmfiFMode(otherFi); ++ if (S_ISREG(omode) && (omode & 06000) != 0) { ++ fi->mapflags |= CPIO_SBIT_CHECK; ++ } ++ } ++ + if (rpmfiCompare(otherFi, fi)) { + int rConflicts; + +@@ -1843,6 +1850,20 @@ rpmMessage(RPMMESS_DEBUG, _("computing f + case TR_REMOVED: + /*@switchbreak@*/ break; + } ++ /* check for s-bit files to be removed */ ++ if (rpmteType(p) == TR_REMOVED) { ++ fi = rpmfiInit(fi, 0); ++ while ((i = rpmfiNext(fi)) >= 0) { ++ int_16 mode; ++ if (XFA_SKIPPING(fi->actions[i])) ++ continue; ++ (void) rpmfiSetFX(fi, i); ++ mode = rpmfiFMode(fi); ++ if (S_ISREG(mode) && (mode & 06000) != 0) { ++ fi->mapflags |= CPIO_SBIT_CHECK; ++ } ++ } ++ } + (void) rpmswExit(rpmtsOp(ts, RPMTS_OP_FINGERPRINT), fc); + } + pi = rpmtsiFree(pi); +@@ -2088,6 +2109,7 @@ assert(psm != NULL); + { + char * fstates = fi->fstates; + fileAction * actions = fi->actions; ++ int mapflags = fi->mapflags; + rpmte savep; + + fi->fstates = NULL; +@@ -2106,6 +2128,8 @@ assert(psm != NULL); + fi->fstates = fstates; + fi->actions = _free(fi->actions); + fi->actions = actions; ++ if (mapflags & CPIO_SBIT_CHECK) ++ fi->mapflags |= CPIO_SBIT_CHECK; + p->fi = fi; + } + } diff --git a/setpermsugids.diff b/setpermsugids.diff new file mode 100644 index 0000000..7501f4e --- /dev/null +++ b/setpermsugids.diff @@ -0,0 +1,20 @@ +Deal with bad lines in --setperms and --setugids. Happens for example if +a package is not installed (--pipe also captures stderr). [#52122] + +--- ./rpmpopt.in.orig 2005-02-16 19:05:36.000000000 +0000 ++++ ./rpmpopt.in 2006-03-21 17:58:43.000000000 +0000 +@@ -37,12 +37,12 @@ rpm alias --scripts --qf '\ + --POPTdesc=$"list install/erase scriptlets from package(s)" + + rpm alias --setperms -q --qf '[\[ -L %{FILENAMES:shescape} \] || chmod %7.7{FILEMODES:octal} %{FILENAMES:shescape}\n]' \ +- --pipe "grep -v \(none\) | sed 's/chmod .../chmod /' | sh" \ ++ --pipe "grep -v \(none\) | grep '^. -L ' | sed 's/chmod .../chmod /' | sh" \ + --POPTdesc=$"set permissions of files in a package" + + rpm alias --setugids -q --qf \ + '[ch %{FILEUSERNAME:shescape} %{FILEGROUPNAME:shescape} %{FILENAMES:shescape}\n]' \ +- --pipe "(echo 'ch() { chown -- \"$1\" \"$3\";chgrp -- \"$2\" \"$3\"; }';grep -v \(none\))|sh" \ ++ --pipe "(echo 'ch() { chown -h -- \"$1\" \"$3\";chgrp -h -- \"$2\" \"$3\"; }';grep '^ch '|grep -v \(none\))|sh" \ + --POPTdesc=$"set user/group ownership of files in a package" + + rpm alias --conflicts --qf \ diff --git a/signature.diff b/signature.diff new file mode 100644 index 0000000..d2de3a3 --- /dev/null +++ b/signature.diff @@ -0,0 +1,21 @@ +Backported fix. + +--- ./lib/signature.c.orig 2005-12-14 21:14:45.000000000 +0000 ++++ ./lib/signature.c 2005-12-16 18:24:53.000000000 +0000 +@@ -268,7 +268,7 @@ rpmRC rpmReadSignature(FD_t fd, Header * + + xx = headerVerifyInfo(1, dl, info, &entry->info, 1); + if (xx != -1 || +- !(entry->info.tag == RPMTAG_HEADERSIGNATURES ++ !((entry->info.tag == RPMTAG_HEADERSIGNATURES || entry->info.tag == RPMTAG_HEADERIMAGE) + && entry->info.type == RPM_BIN_TYPE + && entry->info.count == REGION_TAG_COUNT)) + { +@@ -583,6 +583,7 @@ static int makeGPGSignature(const char * + if (gpg_path && *gpg_path != '\0') + (void) dosetenv("GNUPGHOME", gpg_path, 1); + /*@=boundsread@*/ ++ (void) dosetenv("LC_ALL", "C", 1); + + unsetenv("MALLOC_CHECK_"); + cmd = rpmExpand("%{?__gpg_sign_cmd}", NULL); diff --git a/signwriteerror.diff b/signwriteerror.diff new file mode 100644 index 0000000..87174fb --- /dev/null +++ b/signwriteerror.diff @@ -0,0 +1,16 @@ +Call Fflush at the end of writeing a signed package to catch out +of disk space errors. + +--- ./lib/rpmchecksig.c.orig 2005-12-14 20:54:39.000000000 +0000 ++++ ./lib/rpmchecksig.c 2006-03-21 18:00:22.000000000 +0000 +@@ -116,6 +116,10 @@ static int copyFile(FD_t *sfdp, const ch + rpmError(RPMERR_FREAD, _("%s: Fread failed: %s\n"), *sfnp, Fstrerror(*sfdp)); + goto exit; + } ++ if (Fflush(*tfdp) != 0) { ++ rpmError(RPMERR_FWRITE, _("%s: Fflush failed: %s\n"), *tfnp, ++ Fstrerror(*tfdp)); ++ } + + rc = 0; + diff --git a/specfilemacro.diff b/specfilemacro.diff deleted file mode 100644 index a9663dc..0000000 --- a/specfilemacro.diff +++ /dev/null @@ -1,10 +0,0 @@ ---- ./build/parseSpec.c.orig 2010-12-03 12:11:57.000000000 +0000 -+++ ./build/parseSpec.c 2011-05-11 15:58:37.000000000 +0000 -@@ -519,6 +519,7 @@ static rpmSpec parseSpec(const char *spe - spec = newSpec(); - - spec->specFile = rpmGetPath(specFile, NULL); -+ addMacro(spec->macros, "_specfile", NULL, spec->specFile, RMIL_SPEC); - spec->fileStack = newOpenFileInfo(); - spec->fileStack->fileName = xstrdup(spec->specFile); - /* If buildRoot not specified, use default %{buildroot} */ diff --git a/spectest.diff b/spectest.diff new file mode 100644 index 0000000..5416193 --- /dev/null +++ b/spectest.diff @@ -0,0 +1,19 @@ +Allow characters >127 that don't fit the current locale in the +specfile (e.g. latin1 in utf-8 locale). + +--- ./build.c.orig 2004-10-17 19:00:10.000000000 +0000 ++++ ./build.c 2005-12-19 17:52:25.000000000 +0000 +@@ -87,8 +87,13 @@ static int isSpecFile(const char * specf + /*@switchbreak@*/ break; + /*@-boundsread@*/ + default: ++#if 0 + if (checking && !(isprint(*s) || isspace(*s))) return 0; + /*@switchbreak@*/ break; ++#else ++ if (checking && !(isprint(*s) || isspace(*s)) && *(unsigned char *)s < 32) return 0; ++ /*@switchbreak@*/ break; ++#endif + /*@=boundsread@*/ + } + } diff --git a/sqcondmutex.diff b/sqcondmutex.diff new file mode 100644 index 0000000..61fed9f --- /dev/null +++ b/sqcondmutex.diff @@ -0,0 +1,119 @@ +Backported fix. AFAIK needed for smart. + +Index: rpmio/rpmsq.c +=================================================================== +--- rpmio/rpmsq.c.orig ++++ rpmio/rpmsq.c +@@ -218,7 +218,6 @@ fprintf(stderr, " Insert(%p): %p\n", + + sq->id = ME(); + ret = pthread_mutex_init(&sq->mutex, NULL); +- ret = pthread_cond_init(&sq->cond, NULL); + insque(elem, (prev != NULL ? prev : rpmsqQueue)); + ret = sigrelse(SIGCHLD); + } +@@ -240,8 +239,11 @@ fprintf(stderr, " Remove(%p): %p\n", + ret = sighold (SIGCHLD); + if (ret == 0) { + remque(elem); +- ret = pthread_cond_destroy(&sq->cond); +- ret = pthread_mutex_destroy(&sq->mutex); ++ ++ /* Unlock the mutex and then destroy it */ ++ if((ret = pthread_mutex_unlock(&sq->mutex)) == 0) ++ ret = pthread_mutex_destroy(&sq->mutex); ++ + sq->id = NULL; + /*@-bounds@*/ + if (sq->pipes[1]) ret = close(sq->pipes[1]); +@@ -315,11 +317,20 @@ void rpmsqAction(int signum, + sq != NULL && sq != rpmsqQueue; + sq = sq->q_forw) + { ++ int ret; ++ + if (sq->child != reaped) + /*@innercontinue@*/ continue; + sq->reaped = reaped; + sq->status = status; +- (void) pthread_cond_signal(&sq->cond); ++ ++ /* Unlock the mutex. The waiter will then be able to ++ * aquire the lock. ++ * ++ * XXX: jbj, wtd, if this fails? ++ */ ++ ret = pthread_mutex_unlock(&sq->mutex); ++ + /*@innerbreak@*/ break; + } + } +@@ -391,6 +402,7 @@ pid_t rpmsqFork(rpmsq sq) + { + pid_t pid; + int xx; ++ int nothreads = 0; /* XXX: Shouldn't this be a global? */ + + if (sq->reaper) { + xx = rpmsqInsert(sq, NULL); +@@ -405,6 +417,24 @@ fprintf(stderr, " Enable(%p): %p\n", + + xx = sighold(SIGCHLD); + ++ /* ++ * Initialize the cond var mutex. We have to aquire the lock we ++ * use for the condition before we fork. Otherwise it is possible for ++ * the child to exit, we get sigchild and the sig handler to send ++ * the condition signal before we are waiting on the condition. ++ */ ++ if (!nothreads) { ++ if(pthread_mutex_lock(&sq->mutex)) { ++ /* Yack we did not get the lock, lets just give up */ ++/*@-bounds@*/ ++ xx = close(sq->pipes[0]); ++ xx = close(sq->pipes[1]); ++ sq->pipes[0] = sq->pipes[1] = -1; ++/*@=bounds@*/ ++ goto out; ++ } ++ } ++ + pid = fork(); + if (pid < (pid_t) 0) { /* fork failed. */ + sq->child = (pid_t)-1; +@@ -463,10 +493,6 @@ static int rpmsqWaitUnregister(rpmsq sq) + /* Protect sq->reaped from handler changes. */ + ret = sighold(SIGCHLD); + +- /* Initialize the cond var mutex. */ +- if (!nothreads) +- ret = pthread_mutex_lock(&sq->mutex); +- + /* Start the child, linux often runs child before parent. */ + /*@-bounds@*/ + if (sq->pipes[0] >= 0) +@@ -487,7 +513,13 @@ static int rpmsqWaitUnregister(rpmsq sq) + ret = sigpause(SIGCHLD); + else { + xx = sigrelse(SIGCHLD); +- ret = pthread_cond_wait(&sq->cond, &sq->mutex); ++ ++ /* ++ * We start before the fork with this mutex locked; ++ * The only one that unlocks this the signal handler. ++ * So if we get the lock the child has been reaped. ++ */ ++ ret = pthread_mutex_lock(&sq->mutex); + xx = sighold(SIGCHLD); + } + } +@@ -496,9 +528,6 @@ static int rpmsqWaitUnregister(rpmsq sq) + /* Accumulate stopwatch time spent waiting, potential performance gain. */ + sq->ms_scriptlets += rpmswExit(&sq->op, -1)/1000; + +- /* Tear down cond var mutex, our child has been reaped. */ +- if (!nothreads) +- xx = pthread_mutex_unlock(&sq->mutex); + xx = sigrelse(SIGCHLD); + + #ifdef _RPMSQ_DEBUG diff --git a/srcdefattr.diff b/srcdefattr.diff new file mode 100644 index 0000000..a2f0df6 --- /dev/null +++ b/srcdefattr.diff @@ -0,0 +1,68 @@ +Add new srcdefattr macro. Usefull for assuring that all files +in the src rpms belong to root:root [#48870] rh#125515 + +--- ./build/files.c.orig 2005-12-14 19:22:43.000000000 +0000 ++++ ./build/files.c 2006-02-17 13:57:25.000000000 +0000 +@@ -2260,7 +2274,15 @@ int processSourceFiles(Spec spec) + struct FileList_s fl; + char *s, **files, **fp; + Package pkg; ++ static char *_srcdefattr; ++ static int oneshot; + ++ if (!oneshot) { ++ _srcdefattr = rpmExpand("%{?_srcdefattr}", NULL); ++ if (_srcdefattr && !*_srcdefattr) ++ _srcdefattr = _free(_srcdefattr); ++ oneshot = 1; ++ } + sourceFiles = newStringBuf(); + + /* XXX +@@ -2311,6 +2333,15 @@ int processSourceFiles(Spec spec) + + spec->sourceCpioList = NULL; + ++ /* Init the file list structure */ ++ memset(&fl, 0, sizeof(fl)); ++ if (_srcdefattr) { ++ char *a = xmalloc(strlen(_srcdefattr) + 9 + 1); ++ strcpy(a, "%defattr "); ++ strcpy(a + 9, _srcdefattr); ++ parseForAttr(a, &fl); ++ a = _free(a); ++ } + fl.fileList = xcalloc((spec->numSources + 1), sizeof(*fl.fileList)); + fl.processingFailed = 0; + fl.fileListRecsUsed = 0; +@@ -2359,8 +2390,20 @@ int processSourceFiles(Spec spec) + fl.processingFailed = 1; + } + +- flp->uname = getUname(flp->fl_uid); +- flp->gname = getGname(flp->fl_gid); ++ if (fl.def_ar.ar_fmodestr) { ++ flp->fl_mode &= S_IFMT; ++ flp->fl_mode |= fl.def_ar.ar_fmode; ++ } ++ if (fl.def_ar.ar_user) { ++ flp->uname = getUnameS(fl.def_ar.ar_user); ++ } else { ++ flp->uname = getUname(flp->fl_uid); ++ } ++ if (fl.def_ar.ar_group) { ++ flp->gname = getGnameS(fl.def_ar.ar_group); ++ } else { ++ flp->gname = getGname(flp->fl_gid); ++ } + flp->langs = xstrdup(""); + + fl.totalFileSize += flp->fl_size; +@@ -2384,6 +2427,7 @@ int processSourceFiles(Spec spec) + + sourceFiles = freeStringBuf(sourceFiles); + fl.fileList = freeFileList(fl.fileList, fl.fileListRecsUsed); ++ freeAttrRec(&fl.def_ar); + return fl.processingFailed; + } + diff --git a/suspendlock.diff b/suspendlock.diff index f4c981b..be5188f 100644 --- a/suspendlock.diff +++ b/suspendlock.diff @@ -2,128 +2,36 @@ Suspend exclusive database lock when scriptlets get called, allowing read access in scriptlets. Only needed for DB_PRIVATE (aka global) locking. ---- ./lib/backend/db3.c.orig 2011-05-12 10:24:20.000000000 +0000 -+++ ./lib/backend/db3.c 2011-05-12 10:26:14.000000000 +0000 -@@ -640,3 +640,59 @@ int dbiOpen(rpmdb rdb, rpmDbiTagVal rpmt - - return rc; - } -+ -+int dbiSuspendDBLock(dbiIndex dbi, unsigned int flags) -+{ -+ struct flock l; -+ int rc = 0; -+ int fdno = -1; -+ -+ if (!dbi->dbi_lockdbfd) -+ return 0; -+ if (!(dbi->dbi_rpmdb->db_mode & (O_RDWR|O_WRONLY))) -+ return 0; -+ if (_lockdbfd == 0) -+ return 0; -+ if (!(dbi->dbi_db->fd(dbi->dbi_db, &fdno) == 0 && fdno >= 0)) -+ return 1; -+ memset(&l, 0, sizeof(l)); -+ l.l_whence = 0; -+ l.l_start = 0; -+ l.l_len = 0; -+ l.l_type = F_RDLCK; -+ rc = fcntl(fdno, F_SETLK, (void *)&l); -+ if (rc) -+ rpmlog(RPMLOG_WARNING, _("could not suspend database lock\n")); -+ return rc; -+} -+ -+int dbiResumeDBLock(dbiIndex dbi, unsigned int flags) -+{ -+ struct flock l; -+ int rc = 0; -+ int tries; -+ int fdno = -1; -+ -+ if (!dbi->dbi_lockdbfd) -+ return 0; -+ if (!(dbi->dbi_rpmdb->db_mode & (O_RDWR|O_WRONLY))) -+ return 0; -+ if (_lockdbfd == 0) -+ return 0; -+ if (!(dbi->dbi_db->fd(dbi->dbi_db, &fdno) == 0 && fdno >= 0)) -+ return 1; -+ for (tries = 0; tries < 2; tries++) { -+ memset(&l, 0, sizeof(l)); -+ l.l_whence = 0; -+ l.l_start = 0; -+ l.l_len = 0; -+ l.l_type = F_WRLCK; -+ rc = fcntl(fdno, tries ? F_SETLKW : F_SETLK, (void *)&l); -+ if (!rc) -+ break; -+ if (tries == 0) -+ rpmlog(RPMLOG_WARNING, _("waiting to reestablish exclusive database lock\n")); -+ } -+ return rc; -+} -+ ---- ./lib/backend/dbi.h.orig 2010-12-21 09:48:21.000000000 +0000 -+++ ./lib/backend/dbi.h 2011-05-12 10:24:57.000000000 +0000 -@@ -263,6 +263,24 @@ int dbiFlags(dbiIndex dbi); - RPM_GNUC_INTERNAL - const char * dbiName(dbiIndex dbi); - -+/** \ingroup dbi -+ * Suspend the exclusive lock on the dbi -+ * @param dbi index database handle -+ * @param flags (unused) -+ * @return 0 on success -+ */ -+RPM_GNUC_INTERNAL -+int dbiSuspendDBLock(dbiIndex dbi, unsigned int flags); -+ -+/** \ingroup dbi -+ * Reacquire an exclusive lock on the dbi -+ * @param dbi index database handle -+ * @param flags (unused) -+ * @return 0 on success -+ */ -+RPM_GNUC_INTERNAL -+int dbiResumeDBLock(dbiIndex dbi, unsigned int flags); -+ - #ifdef __cplusplus - } - #endif ---- ./lib/psm.c.orig 2011-05-12 10:23:47.000000000 +0000 -+++ ./lib/psm.c 2011-05-12 10:24:57.000000000 +0000 -@@ -412,10 +412,12 @@ static rpmRC runScript(rpmpsm psm, ARGV_ - script->tag != RPMTAG_VERIFYSCRIPT); - int selinux = !(rpmtsFlags(psm->ts) & RPMTRANS_FLAG_NOCONTEXTS); +I hijacked the dbiSync function for this because I did not want +to change the ABI. + +Index: lib/psm.c +=================================================================== +--- lib/psm.c.orig ++++ lib/psm.c +@@ -799,6 +799,8 @@ static rpmRC runScript(rpmpsm psm, Heade + } + if (out == NULL) return RPMRC_FAIL; /* XXX can't happen */ + rpmtsSuspendResumeDBLock(psm->ts, 0); - rpmswEnter(rpmtsOp(psm->ts, RPMTS_OP_SCRIPTLETS), 0); - rc = rpmScriptRun(script, arg1, arg2, rpmtsScriptFd(psm->ts), - prefixes, warn_only, selinux); - rpmswExit(rpmtsOp(psm->ts, RPMTS_OP_SCRIPTLETS), 0); -+ rpmtsSuspendResumeDBLock(psm->ts, 1); - - /* - * Notify callback for all errors. "total" abused for warning/error, ---- ./lib/rpmdb.c.orig 2011-05-12 10:23:47.000000000 +0000 -+++ ./lib/rpmdb.c 2011-05-12 10:24:57.000000000 +0000 -@@ -674,6 +674,12 @@ int rpmdbSync(rpmdb db) - return dbiForeach(db->_dbi, dbiSync, 0); - } - -+int rpmdbSuspendResumeDBLock(rpmdb db, int mode) -+{ -+ if (db == NULL) return 0; -+ return dbiForeach(db->_dbi, mode ? dbiResumeDBLock : dbiSuspendDBLock, 0); -+} + - static rpmdb newRpmdb(const char * root, const char * home, - int mode, int perms, int flags) - { ---- ./lib/rpmts.c.orig 2010-12-22 11:17:20.000000000 +0000 -+++ ./lib/rpmts.c 2011-05-12 10:24:57.000000000 +0000 -@@ -95,6 +95,11 @@ int rpmtsOpenDB(rpmts ts, int dbmode) + /*@-branchstate@*/ + xx = rpmsqFork(&psm->sq); + if (psm->sq.child == 0) { +@@ -924,6 +926,8 @@ static rpmRC runScript(rpmpsm psm, Heade + + (void) psmWait(psm); + ++ rpmtsSuspendResumeDBLock(psm->ts, 1); ++ + /* XXX filter order dependent multilib "other" arch helper error. */ + if (!(psm->sq.reaped >= 0 && !strcmp(argv[0], "/usr/sbin/glibc_post_upgrade") && WEXITSTATUS(psm->sq.status) == 110)) { + if (psm->sq.reaped < 0) { +Index: lib/rpmts.c +=================================================================== +--- lib/rpmts.c.orig ++++ lib/rpmts.c +@@ -190,6 +190,11 @@ int rpmtsOpenDB(rpmts ts, int dbmode) return rc; } @@ -134,15 +42,120 @@ locking. + int rpmtsInitDB(rpmts ts, int dbmode) { - rpmlock lock = rpmtsAcquireLock(ts); ---- ./lib/rpmts.h.orig 2010-12-21 09:50:50.000000000 +0000 -+++ ./lib/rpmts.h 2011-05-12 10:24:57.000000000 +0000 -@@ -423,6 +423,8 @@ rpmdb rpmtsGetRdb(rpmts ts); - void * rpmtsNotify(rpmts ts, rpmte te, - rpmCallbackType what, rpm_loff_t amount, rpm_loff_t total); + void *lock = rpmtsAcquireLock(ts); +Index: lib/rpmts.h +=================================================================== +--- lib/rpmts.h.orig ++++ lib/rpmts.h +@@ -470,6 +470,10 @@ int rpmtsRebuildDB(rpmts ts) + /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/ + /*@modifies ts, rpmGlobalMacroContext, fileSystem, internalState @*/; -+int rpmtsSuspendResumeDBLock(rpmts ts, int mode); ++int rpmtsSuspendResumeDBLock(rpmts ts, int mode) ++ /*@globals fileSystem @*/ ++ /*@modifies fileSystem @*/; + /** \ingroup rpmts - * Return number of (ordered) transaction set elements. + * Verify the database used by the transaction. * @param ts transaction set +Index: rpmdb/db3.c +=================================================================== +--- rpmdb/db3.c.orig ++++ rpmdb/db3.c +@@ -458,6 +458,8 @@ errxit: + } + /*@=moduncon@*/ + ++static int db3SuspendResumeLock(dbiIndex dbi, int mode); ++ + static int db3sync(dbiIndex dbi, unsigned int flags) + /*@globals fileSystem @*/ + /*@modifies fileSystem @*/ +@@ -466,6 +468,10 @@ static int db3sync(dbiIndex dbi, unsigne + int rc = 0; + int _printit; + ++ if (flags == (unsigned int)-1) ++ return db3SuspendResumeLock(dbi, 0); ++ if (flags == (unsigned int)-2) ++ return db3SuspendResumeLock(dbi, 1); + if (db != NULL) + rc = db->sync(db, flags); + /* XXX DB_INCOMPLETE is returned occaisionally with multiple access. */ +@@ -1412,6 +1418,50 @@ static int db3open(rpmdb rpmdb, rpmTag r + /*@=nullstate =compmempass@*/ + } + ++static int ++db3SuspendResumeLock(dbiIndex dbi, int mode) ++{ ++ struct flock l; ++ int rc = 0; ++ int tries; ++ int fdno = -1; ++ ++ if (!dbi->dbi_lockdbfd) ++ return 0; ++ if (!(dbi->dbi_mode & (O_RDWR|O_WRONLY))) ++ return 0; ++ if ((dbi->dbi_ecflags & DB_CLIENT) && dbi->dbi_host) ++ return 0; ++ if (dbi->dbi_use_dbenv && _lockdbfd == 0) ++ return 0; ++ if (!(dbi->dbi_db->fd(dbi->dbi_db, &fdno) == 0 && fdno >= 0)) ++ return 1; ++ if (mode == 0) { ++ memset(&l, 0, sizeof(l)); ++ l.l_whence = 0; ++ l.l_start = 0; ++ l.l_len = 0; ++ l.l_type = F_RDLCK; ++ rc = fcntl(fdno, F_SETLK, (void *) &l); ++ if (rc) ++ rpmMessage(RPMMESS_WARNING, _("could not suspend database lock\n")); ++ } else { ++ for (tries = 0; tries < 2; tries++) { ++ memset(&l, 0, sizeof(l)); ++ l.l_whence = 0; ++ l.l_start = 0; ++ l.l_len = 0; ++ l.l_type = F_WRLCK; ++ rc = fcntl(fdno, tries ? F_SETLKW : F_SETLK, (void *) &l); ++ if (!rc) ++ break; ++ if (tries == 0) ++ rpmMessage(RPMMESS_WARNING, _("waiting to reestablish exclusive database lock\n")); ++ } ++ } ++ return rc; ++} ++ + /** \ingroup db3 + */ + /*@-exportheadervar@*/ +Index: rpmdb/rpmdb.c +=================================================================== +--- rpmdb/rpmdb.c.orig ++++ rpmdb/rpmdb.c +@@ -945,6 +945,21 @@ int rpmdbSync(rpmdb db) + return rc; + } + ++int rpmdbSuspendResumeDBLock(rpmdb db, int mode) ++{ ++ int dbix; ++ int rc = 0; ++ if (db == NULL) return 0; ++ for (dbix = 0; dbix < db->db_ndbi; dbix++) { ++ int xx; ++ if (db->_dbi[dbix] == NULL) ++ continue; ++ xx = dbiSync(db->_dbi[dbix], mode ? -2 : -1); ++ if (xx && rc == 0) rc = xx; ++ } ++ return rc; ++} ++ + /*@-mods@*/ /* FIX: dbTemplate structure assignment */ + static /*@only@*/ /*@null@*/ + rpmdb newRpmdb(/*@kept@*/ /*@null@*/ const char * root, diff --git a/taggedfileindex.diff b/taggedfileindex.diff index 7fc306d..693e28d 100644 --- a/taggedfileindex.diff +++ b/taggedfileindex.diff @@ -1,14 +1,119 @@ -This used to be the taggedfileindex patch, but it's gone. -The remaining part just strips off the tag. ---- ./lib/rpmdb.c.orig 2011-05-11 14:27:32.000000000 +0000 -+++ ./lib/rpmdb.c 2011-05-11 15:14:39.000000000 +0000 -@@ -257,6 +257,9 @@ static int dbt2set(dbiIndex dbi, DBT * d - _DBSWAP(hdrNum); - _DBSWAP(tagNum); - } -+ /* remove tagged directory info */ -+ if (tagNum.ui & 0x80000000) -+ tagNum.ui &= 0x0000ffff; - set->recs[i].hdrNum = hdrNum.ui; - set->recs[i].tagNum = tagNum.ui; - } +The taggedfileindex patch. Speeds up database searches, but breaks +fingerprint semantics. Needs findfplistexclude.diff. +rh#103204 + +Index: rpmdb/rpmdb.c +=================================================================== +--- rpmdb/rpmdb.c.orig ++++ rpmdb/rpmdb.c +@@ -1223,6 +1223,16 @@ int rpmdbVerify(const char * prefix) + return rc; + } + ++static inline unsigned int taghash(const char *s) ++{ ++ int c; ++ unsigned int r = 0; ++ while ((c = *(const unsigned char *)s++) != 0) ++ if (c != '/') ++ r += (r << 3) + c; ++ return ((r & 0x7fff) | 0x8000) << 16; ++} ++ + /** + * Find file matches in database. + * @param db rpm database +@@ -1302,6 +1312,11 @@ if (key->size == 0) key->size++; /* XXX + if (rc == 0) + (void) dbt2set(dbi, data, &allMatches); + ++ /* strip off directory tags */ ++ if (allMatches != NULL) ++ for (i = 0; i < allMatches->count; i++) ++ if (allMatches->recs[i].tagNum & 0x80000000) ++ allMatches->recs[i].tagNum &= 0x0000ffff; + xx = dbiCclose(dbi, dbcursor, 0); + dbcursor = NULL; + } else +@@ -2408,7 +2423,7 @@ static void rpmdbSortIterator(/*@null@*/ + } + + /*@-bounds@*/ /* LCL: segfault */ +-static int rpmdbGrowIterator(/*@null@*/ rpmdbMatchIterator mi, int fpNum, unsigned int exclude) ++static int rpmdbGrowIterator(/*@null@*/ rpmdbMatchIterator mi, int fpNum, unsigned int exclude, unsigned int tag) + /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/ + /*@modifies mi, rpmGlobalMacroContext, fileSystem, internalState @*/ + { +@@ -2456,10 +2471,16 @@ static int rpmdbGrowIterator(/*@null@*/ + set = NULL; + (void) dbt2set(dbi, data, &set); + +- /* prune the set against exclude */ ++ /* prune the set against exclude and tag */ + for (i = j = 0; i < set->count; i++) { + if (exclude && set->recs[i].hdrNum == exclude) + continue; ++ if (set->recs[i].tagNum & 0x80000000) { ++ /* tagged entry */ ++ if ((set->recs[i].tagNum & 0xffff0000) != tag) ++ continue; ++ set->recs[i].tagNum &= 0x0000ffff; ++ } + if (i != j) + set->recs[j] = set->recs[i]; + j++; +@@ -2987,7 +3008,9 @@ DBT * data = alloca(sizeof(*data)); + HFD_t hfd = headerFreeData; + sigset_t signalMask; + const char ** baseNames; +- rpmTagType bnt; ++ const char ** dirNames; ++ int_32 * dirIndexes, *dirs; ++ rpmTagType bnt, dit, dnt; + int count = 0; + dbiIndex dbi; + int dbix; +@@ -3027,6 +3050,13 @@ memset(data, 0, sizeof(*data)); + */ + + xx = hge(h, RPMTAG_BASENAMES, &bnt, (void **) &baseNames, &count); ++ xx = hge(h, RPMTAG_DIRINDEXES, &dit, (void **) &dirIndexes, NULL); ++ xx = hge(h, RPMTAG_DIRNAMES, &dnt, (void **) &dirNames, NULL); ++ ++ /* save dirIndexes, because expandFilelist may free it */ ++ dirs = alloca(count * sizeof(*dirs)); ++ for (xx = 0; xx < count; xx++) ++ dirs[xx] = dirIndexes[xx]; + + if (_noDirTokens) + expandFilelist(h); +@@ -3243,6 +3273,11 @@ data->size = 0; + */ + rec->tagNum = i; + switch (dbi->dbi_rpmtag) { ++ case RPMTAG_BASENAMES: ++ /* tag index entry with directory hash */ ++ if (i < 0x010000) ++ rec->tagNum |= taghash(dirNames[dirs[i]]); ++ /*@switchbreak@*/ break; + case RPMTAG_PUBKEYS: + /*@switchbreak@*/ break; + case RPMTAG_FILEMD5S: +@@ -3417,6 +3452,8 @@ if (key->size == 0) key->size++; /* XXX + } + + exit: ++ dirIndexes = hfd(dirIndexes, dit); ++ dirNames = hfd(dirNames, dnt); + (void) unblockSignals(db, &signalMask); + + return ret; +@@ -3505,7 +3542,7 @@ if (key->size == 0) key->size++; /* XXX + if (!exclude && skipDir(fpList[i].entry->dirName)) + continue; + +- xx = rpmdbGrowIterator(mi, i, exclude); ++ xx = rpmdbGrowIterator(mi, i, exclude, taghash(fpList[i].entry->dirName)); + + } + diff --git a/tagsbackport.diff b/tagsbackport.diff new file mode 100644 index 0000000..69d6830 --- /dev/null +++ b/tagsbackport.diff @@ -0,0 +1,37 @@ +Backported some new tags and sense values. + +Index: lib/rpmlib.h +=================================================================== +--- lib/rpmlib.h.orig ++++ lib/rpmlib.h +@@ -447,6 +447,19 @@ typedef enum rpmTag_e { + RPMTAG_PRIORITY = 1162, /* i extension placeholder */ + RPMTAG_CVSID = 1163, /* s */ + #define RPMTAG_SVNID RPMTAG_CVSID /* s */ ++ RPMTAG_BLINKPKGID = 1164, /* s[] */ ++ RPMTAG_BLINKHDRID = 1165, /* s[] */ ++ RPMTAG_BLINKNEVRA = 1166, /* s[] */ ++ RPMTAG_FLINKPKGID = 1167, /* s[] */ ++ RPMTAG_FLINKHDRID = 1168, /* s[] */ ++ RPMTAG_FLINKNEVRA = 1169, /* s[] */ ++ RPMTAG_PACKAGEORIGIN = 1170, /* s */ ++ RPMTAG_TRIGGERPREIN = 1171, /*!< internal */ ++ RPMTAG_BUILDSUGGESTS = 1172, /*!< internal */ ++ RPMTAG_BUILDENHANCES = 1173, /*!< internal */ ++ RPMTAG_SCRIPTSTATES = 1174, /*!< i scriptlet exit codes */ ++ RPMTAG_SCRIPTMETRICS = 1175, /*!< i scriptlet execution times */ ++ RPMTAG_BUILDCPUCLOCK = 1176, /*!< i */ + + /*@-enummemuse@*/ + RPMTAG_FIRSTFREE_TAG /*!< internal */ +@@ -530,7 +543,9 @@ typedef enum rpmsenseFlags_e { + /*@=enummemuse@*/ + RPMSENSE_KEYRING = (1 << 26), + RPMSENSE_PATCHES = (1 << 27), +- RPMSENSE_CONFIG = (1 << 28) ++ RPMSENSE_CONFIG = (1 << 28), ++ RPMSENSE_PROBE = (1 << 29), ++ RPMSENSE_PACKAGE = (1 << 30) + } rpmsenseFlags; + + #define RPMSENSE_SENSEMASK 15 /* Mask to get senses, ie serial, */ diff --git a/totalsizenoexclude.diff b/totalsizenoexclude.diff new file mode 100644 index 0000000..84f9509 --- /dev/null +++ b/totalsizenoexclude.diff @@ -0,0 +1,13 @@ +Do not could exlcuded files in disk space calculation. Backported. + +--- ./build/files.c.orig 2005-12-14 19:22:43.000000000 +0000 ++++ ./build/files.c 2006-02-17 13:57:25.000000000 +0000 +@@ -1677,7 +1689,7 @@ static int addFile(FileList fl, const ch + } else + i = fl->fileListRecsUsed; + +- if (S_ISREG(flp->fl_mode) && i >= fl->fileListRecsUsed) ++ if (!(flp->flags & RPMFILE_EXCLUDE) && S_ISREG(flp->fl_mode) && i >= fl->fileListRecsUsed) + fl->totalFileSize += flp->fl_size; + } + diff --git a/translockroot.diff b/translockroot.diff new file mode 100644 index 0000000..fa9bc5f --- /dev/null +++ b/translockroot.diff @@ -0,0 +1,37 @@ +Obey --root option when calculating the directory of the +transaction lock. + +Already fixed in rpm-4.4.7. + +--- ./lib/rpmlock.c.orig 2005-12-21 14:34:27.000000000 +0000 ++++ ./lib/rpmlock.c 2005-12-21 14:42:59.000000000 +0000 +@@ -45,12 +45,18 @@ static rpmlock rpmlock_new(/*@unused@*/ + } + if (lock != NULL) { + mode_t oldmask = umask(022); +- lock->fd = open(rpmlock_path, O_RDWR|O_CREAT, 0644); ++ char *path = rpmlock_path; ++ if (rootdir && *rootdir == '/' && rootdir[1] != 0) { ++ path = xmalloc(strlen(rootdir) + strlen(rpmlock_path) + 1); ++ strcpy(path, rootdir); ++ strcat(path, rpmlock_path); ++ } ++ lock->fd = open(path, O_RDWR|O_CREAT, 0644); + (void) umask(oldmask); + + /*@-branchstate@*/ + if (lock->fd == -1) { +- lock->fd = open(rpmlock_path, O_RDONLY); ++ lock->fd = open(path, O_RDONLY); + if (lock->fd == -1) { + free(lock); + lock = NULL; +@@ -64,6 +70,8 @@ static rpmlock rpmlock_new(/*@unused@*/ + lock->openmode = RPMLOCK_WRITE | RPMLOCK_READ; + /*@=nullderef@*/ + } ++ if (path != rpmlock_path) ++ free(path); + /*@=branchstate@*/ + } + /*@-compdef@*/ diff --git a/vercmp.diff b/vercmp.diff new file mode 100644 index 0000000..8a2bfd8 --- /dev/null +++ b/vercmp.diff @@ -0,0 +1,31 @@ +Patch rpmvercmp corner case where it said both A < B and B < A. +Also clarifies some comments. +Patch from Peter Bowan. + +--- ./lib/rpmvercmp.c.orig 2006-02-10 16:22:02.000000000 +0000 ++++ ./lib/rpmvercmp.c 2006-02-10 16:20:49.000000000 +0000 +@@ -39,6 +39,9 @@ int rpmvercmp(const char * a, const char + while (*one && !xisalnum(*one)) one++; + while (*two && !xisalnum(*two)) two++; + ++ /* If we ran to the end of either, we are finished with the loop */ ++ if (!(*one && *two)) break; ++ + str1 = one; + str2 = two; + +@@ -64,9 +67,13 @@ int rpmvercmp(const char * a, const char + *str2 = '\0'; + /*@=boundswrite@*/ + ++ /* this cannot happen, as we previously tested to make sure that */ ++ /* the first string has a non-null segment */ ++ if (one == str1) return -1; /* arbitrary */ ++ + /* take care of the case where the two version segments are */ + /* different types: one numeric, the other alpha (i.e. empty) */ +- if (one == str1) return -1; /* arbitrary */ ++ /* numeric segments are always newer than alpha segments */ + /* XXX See patch #60884 (and details) from bugzilla #50977. */ + if (two == str2) return (isnum ? 1 : -1); + diff --git a/verify_p.diff b/verify_p.diff deleted file mode 100644 index 8eeea06..0000000 --- a/verify_p.diff +++ /dev/null @@ -1,49 +0,0 @@ -Make 'rpm -Vp ' work again. - ---- ./lib/rpmte.c.orig 2011-05-12 15:22:06.000000000 +0000 -+++ ./lib/rpmte.c 2011-05-12 15:23:39.000000000 +0000 -@@ -905,15 +905,19 @@ int rpmteProcess(rpmte te, pkgGoal goal) - } - } - -- rpmteRunAllCollections(te, PLUGINHOOK_COLL_PRE_REMOVE); -- -- if (rpmteOpen(te, reset_fi)) { -+ if (goal == PKG_VERIFY) { - failed = rpmpsmRun(te->ts, te, goal); -- rpmteClose(te, reset_fi); -- } -+ } else { -+ rpmteRunAllCollections(te, PLUGINHOOK_COLL_PRE_REMOVE); -+ -+ if (rpmteOpen(te, reset_fi)) { -+ failed = rpmpsmRun(te->ts, te, goal); -+ rpmteClose(te, reset_fi); -+ } - -- rpmteRunAllCollections(te, PLUGINHOOK_COLL_POST_ADD); -- rpmteRunAllCollections(te, PLUGINHOOK_COLL_POST_ANY); -+ rpmteRunAllCollections(te, PLUGINHOOK_COLL_POST_ADD); -+ rpmteRunAllCollections(te, PLUGINHOOK_COLL_POST_ANY); -+ } - - /* XXX should %pretrans failure fail the package install? */ - if (failed && !scriptstage) { ---- ./lib/verify.c.orig 2011-05-12 15:22:01.000000000 +0000 -+++ ./lib/verify.c 2011-05-12 15:22:49.000000000 +0000 -@@ -267,11 +267,11 @@ static int rpmVerifyScript(rpmts ts, Hea - - if (headerIsEntry(h, RPMTAG_VERIFYSCRIPT)) { - /* fake up a erasure transaction element */ -- (void) rpmtsAddEraseElement(ts, h, -1); -- -- rc = (rpmteProcess(rpmtsElement(ts, 0), PKG_VERIFY) != RPMRC_OK); -- -+ rpmte p = rpmteNew(ts, h, TR_REMOVED, NULL, NULL); -+ rpmteSetHeader(p, h); -+ rc = (rpmteProcess(p, PKG_VERIFY) != RPMRC_OK); - /* clean up our fake transaction bits */ -+ rpmteFree(p); - rpmtsEmpty(ts); - } - diff --git a/verifylstatfail.diff b/verifylstatfail.diff new file mode 100644 index 0000000..d0fd950 --- /dev/null +++ b/verifylstatfail.diff @@ -0,0 +1,15 @@ +Tell user the reason why the lstat failed in a verify operation. + +--- ./lib/verify.c.orig 2005-12-15 15:17:41.000000000 +0000 ++++ ./lib/verify.c 2005-12-15 15:24:48.000000000 +0000 +@@ -327,6 +327,10 @@ static int verifyHeader(QVA_t qva, const + (fileAttrs & RPMFILE_README) ? 'r' : ' '), + rpmfiFN(fi)); + te += strlen(te); ++ if ((rc & RPMVERIFY_LSTATFAIL) != 0) { ++ sprintf(te, " (%s)", strerror(errno)); ++ te += strlen(te); ++ } + ec = rc; + } + } else if (verifyResult || rpmIsVerbose()) { diff --git a/waitlock.diff b/waitlock.diff index 8a811c5..79ae33d 100644 --- a/waitlock.diff +++ b/waitlock.diff @@ -1,104 +1,98 @@ Fix global (DB_PRIVATE) lock code: fix recursion counter, retry failed lock operations for up to 3 minutes. - ---- ./lib/backend/db3.c.orig 2011-03-02 06:40:10.000000000 +0000 -+++ ./lib/backend/db3.c 2011-05-12 10:24:20.000000000 +0000 -@@ -432,6 +432,8 @@ int dbiVerify(dbiIndex dbi, unsigned int - return rc; +--- ./rpmdb/db3.c.orig 2005-03-23 18:15:28.000000000 +0000 ++++ ./rpmdb/db3.c 2006-01-27 20:08:29.000000000 +0000 +@@ -759,6 +769,8 @@ assert(db != NULL); } + /*@=mustmod@*/ +static int _lockdbfd = 0; + - int dbiClose(dbiIndex dbi, unsigned int flags) - { - rpmdb rdb = dbi->dbi_rpmdb; -@@ -451,6 +453,8 @@ int dbiClose(dbiIndex dbi, unsigned int + /*@-moduncon@*/ /* FIX: annotate db3 methods */ + static int db3close(/*@only@*/ dbiIndex dbi, /*@unused@*/ unsigned int flags) + /*@globals rpmGlobalMacroContext, h_errno, +@@ -818,6 +830,10 @@ static int db3close(/*@only@*/ dbiIndex - rpmlog(RPMLOG_DEBUG, "closed db index %s/%s\n", - dbhome, dbi->dbi_file); -+ if (dbi->dbi_lockdbfd && _lockdbfd) + rpmMessage(RPMMESS_DEBUG, _("closed db index %s/%s\n"), + dbhome, (dbfile ? dbfile : tagName(dbi->dbi_rpmtag))); ++ if (dbi->dbi_lockdbfd && ++ !((dbi->dbi_ecflags & DB_CLIENT) && dbi->dbi_host) && ++ _lockdbfd) + _lockdbfd--; + } - xx = db_fini(rdb, dbhome ? dbhome : ""); -@@ -490,6 +494,7 @@ static int dbiFlock(dbiIndex dbi, int mo - rc = 1; - } else { - const char *dbhome = rpmdbHome(dbi->dbi_rpmdb); -+ int tries; - struct flock l; - memset(&l, 0, sizeof(l)); - l.l_whence = 0; -@@ -499,20 +504,38 @@ static int dbiFlock(dbiIndex dbi, int mo - ? F_RDLCK : F_WRLCK; - l.l_pid = 0; +@@ -1138,8 +1157,6 @@ static int db3open(rpmdb rpmdb, rpmTag r + prDbiOpenFlags(oflags, 0), dbi->dbi_mode); -- rc = fcntl(fdno, F_SETLK, (void *) &l); -- if (rc) { -- uint32_t eflags = db_envflags(db); -- /* Warning iff using non-private CDB locking. */ -- rc = (((eflags & DB_INIT_CDB) && !(eflags & DB_PRIVATE)) ? 0 : 1); -- rpmlog( (rc ? RPMLOG_ERR : RPMLOG_WARNING), -- _("cannot get %s lock on %s/%s\n"), -- ((mode & O_ACCMODE) == O_RDONLY) -- ? _("shared") : _("exclusive"), -- dbhome, dbi->dbi_file); -- } else { -- rpmlog(RPMLOG_DEBUG, -- "locked db index %s/%s\n", -- dbhome, dbi->dbi_file); -+ for (tries = 0; ; tries++) { -+ rc = fcntl(fdno, F_SETLK, (void *) &l); -+ if (rc) { -+ uint32_t eflags = db_envflags(db); -+ /* Warning iff using non-private CDB locking. */ -+ rc = (((eflags & DB_INIT_CDB) && !(eflags & DB_PRIVATE)) ? 0 : 1); -+ if (errno == EAGAIN && rc) { -+ struct timespec ts; -+ if (tries == 0) -+ rpmlog(RPMLOG_WARNING, -+ _("waiting for %s lock on %s/%s\n"), -+ ((mode & O_ACCMODE) == O_RDONLY) -+ ? _("shared") : _("exclusive"), -+ dbhome, dbi->dbi_file); -+ ts.tv_sec = (time_t)0; -+ ts.tv_nsec = 100000000; /* .1 seconds */ -+ if (tries < 10*60*3) { /* 3 minutes */ -+ nanosleep(&ts, (struct timespec *)0); -+ continue; -+ } -+ } -+ rpmlog( (rc ? RPMLOG_ERR : RPMLOG_WARNING), -+ _("cannot get %s lock on %s/%s\n"), -+ ((mode & O_ACCMODE) == O_RDONLY) -+ ? _("shared") : _("exclusive"), -+ dbhome, dbi->dbi_file); -+ } else { -+ rpmlog(RPMLOG_DEBUG, -+ "locked db index %s/%s\n", -+ dbhome, dbi->dbi_file); -+ } -+ break; + if (rc == 0) { +- static int _lockdbfd = 0; +- + /*@-moduncon@*/ /* FIX: annotate db3 methods */ + rc = db_create(&db, dbenv, dbi->dbi_cflags); + /*@=moduncon@*/ +@@ -1356,6 +1373,7 @@ static int db3open(rpmdb rpmdb, rpmTag r + if (!(db->fd(db, &fdno) == 0 && fdno >= 0)) { + rc = 1; + } else { ++ int tries; + struct flock l; + /*@-boundswrite@*/ + memset(&l, 0, sizeof(l)); +@@ -1367,24 +1385,40 @@ static int db3open(rpmdb rpmdb, rpmTag r + ? F_WRLCK : F_RDLCK; + l.l_pid = 0; + +- rc = fcntl(fdno, F_SETLK, (void *) &l); +- if (rc) { +- /* Warning iff using non-private CDB locking. */ +- rc = ((dbi->dbi_use_dbenv && +- (dbi->dbi_eflags & DB_INIT_CDB) && +- !(dbi->dbi_eflags & DB_PRIVATE)) +- ? 0 : 1); +- rpmError( (rc ? RPMERR_FLOCK : RPMWARN_FLOCK), +- _("cannot get %s lock on %s/%s\n"), +- ((dbi->dbi_mode & (O_RDWR|O_WRONLY)) +- ? _("exclusive") : _("shared")), +- dbhome, (dbfile ? dbfile : "")); +- } else if (dbfile) { +- rpmMessage(RPMMESS_DEBUG, +- _("locked db index %s/%s\n"), +- dbhome, dbfile); ++ for (tries = 0; ; tries++) { ++ rc = fcntl(fdno, F_SETLK, (void *) &l); ++ if (rc) { ++ /* Warning iff using non-private CDB locking. */ ++ rc = ((dbi->dbi_use_dbenv && ++ (dbi->dbi_eflags & DB_INIT_CDB) && ++ !(dbi->dbi_eflags & DB_PRIVATE)) ++ ? 0 : 1); ++ if (errno == EAGAIN && rc) { ++ struct timespec ts; ++ if (tries == 0) ++ rpmMessage(RPMMESS_WARNING, _("waiting for %s lock on %s/%s\n"), ((dbi->dbi_mode & (O_RDWR|O_WRONLY)) ? _("exclusive") : _("shared")), dbhome, (dbfile ? dbfile : "")); ++ ts.tv_sec = (time_t)0; ++ ts.tv_nsec = 100000000; ++ if (tries < 10*60*3) { ++ nanosleep(&ts, (struct timespec *)0); ++ continue; ++ } ++ } ++ rpmError( (rc ? RPMERR_FLOCK : RPMWARN_FLOCK), ++ _("cannot get %s lock on %s/%s\n"), ++ ((dbi->dbi_mode & (O_RDWR|O_WRONLY)) ++ ? _("exclusive") : _("shared")), ++ dbhome, (dbfile ? dbfile : "")); ++ } else if (dbfile) { ++ rpmMessage(RPMMESS_DEBUG, ++ _("locked db index %s/%s\n"), ++ dbhome, dbfile); ++ } ++ break; + } + } ++ if (rc && dbi->dbi_use_dbenv) ++ _lockdbfd--; + } } } - return rc; -@@ -529,7 +552,6 @@ int dbiOpen(rpmdb rdb, rpmDbiTagVal rpmt - DB * db = NULL; - DBTYPE dbtype = DB_UNKNOWN; - uint32_t oflags; -- static int _lockdbfd = 0; - - if (dbip) - *dbip = NULL; -@@ -603,7 +625,10 @@ int dbiOpen(rpmdb rdb, rpmDbiTagVal rpmt - dbi->dbi_db = db; - dbi->dbi_oflags = oflags; - -- if (!verifyonly && rc == 0 && dbi->dbi_lockdbfd && _lockdbfd++ == 0) { -+ if (verifyonly) -+ dbi->dbi_lockdbfd = 0; /* disable locking in verify mode */ -+ -+ if (rc == 0 && dbi->dbi_lockdbfd && _lockdbfd++ == 0) { - rc = dbiFlock(dbi, rdb->db_mode); - } - diff --git a/weakdeps.diff b/weakdeps.diff index f46e0cc..b5ad2b6 100644 --- a/weakdeps.diff +++ b/weakdeps.diff @@ -14,18 +14,29 @@ B) use RPMSENSE_STRONG to support a "strong" version, "Recommends" Needs extcond.diff for query operations. ---- ./build/parsePreamble.c.orig 2011-01-25 13:52:28.000000000 +0000 -+++ ./build/parsePreamble.c 2011-05-11 14:09:07.000000000 +0000 -@@ -310,6 +310,8 @@ static struct tokenBits_s const installS +Index: build/parsePreamble.c +=================================================================== +--- build/parsePreamble.c.orig ++++ build/parsePreamble.c +@@ -129,6 +129,8 @@ static struct tokenBits_s installScriptB + { "post", RPMSENSE_SCRIPT_POST }, + { "rpmlib", RPMSENSE_RPMLIB }, { "verify", RPMSENSE_SCRIPT_VERIFY }, - { "pretrans", RPMSENSE_PRETRANS }, - { "posttrans", RPMSENSE_POSTTRANS }, -+ { "hint", RPMSENSE_MISSINGOK }, -+ { "strong", RPMSENSE_STRONG }, ++ { "hint", RPMSENSE_MISSINGOK }, ++ { "strong", RPMSENSE_STRONG }, { NULL, 0 } }; -@@ -790,6 +792,18 @@ static int handlePreambleTag(rpmSpec spe +@@ -140,6 +142,8 @@ static struct tokenBits_s buildScriptBit + { "build", RPMSENSE_SCRIPT_BUILD }, + { "install", RPMSENSE_SCRIPT_INSTALL }, + { "clean", RPMSENSE_SCRIPT_CLEAN }, ++ { "hint", RPMSENSE_MISSINGOK }, ++ { "strong", RPMSENSE_STRONG }, + { NULL, 0 } + }; + +@@ -692,6 +696,18 @@ static int handlePreambleTag(Spec spec, if ((rc = parseRCPOT(spec, pkg, field, tag, 0, tagflags))) return rc; break; @@ -44,66 +55,66 @@ Needs extcond.diff for query operations. case RPMTAG_EXCLUDEARCH: case RPMTAG_EXCLUSIVEARCH: case RPMTAG_EXCLUDEOS: -@@ -895,6 +909,14 @@ static struct PreambleRec_s const preamb - {RPMTAG_BUGURL, 0, 0, LEN_AND_STR("bugurl")}, - {RPMTAG_COLLECTIONS, 0, 0, LEN_AND_STR("collections")}, - {RPMTAG_ORDERFLAGS, 2, 0, LEN_AND_STR("orderwithrequires")}, -+ {RPMTAG_SUGGESTSFLAGS, 0, 0, LEN_AND_STR("recommends")}, -+ {RPMTAG_SUGGESTSFLAGS, 0, 0, LEN_AND_STR("suggests")}, -+ {RPMTAG_ENHANCESFLAGS, 0, 0, LEN_AND_STR("supplements")}, -+ {RPMTAG_ENHANCESFLAGS, 0, 0, LEN_AND_STR("enhances")}, -+ {RPMTAG_BUILDSUGGESTS, 0, 0, LEN_AND_STR("buildrecommends")}, -+ {RPMTAG_BUILDSUGGESTS, 0, 0, LEN_AND_STR("buildsuggests")}, -+ {RPMTAG_BUILDENHANCES, 0, 0, LEN_AND_STR("buildsupplements")}, -+ {RPMTAG_BUILDENHANCES, 0, 0, LEN_AND_STR("buildenhances")}, - {0, 0, 0, 0} - }; - ---- ./build/parseReqs.c.orig 2010-12-13 14:01:56.000000000 +0000 -+++ ./build/parseReqs.c 2011-05-11 14:16:43.000000000 +0000 -@@ -95,6 +95,20 @@ rpmRC parseRCPOT(rpmSpec spec, Package p - nametag = RPMTAG_CONFLICTNAME; +@@ -783,6 +799,14 @@ static struct PreambleRec_s preambleList + {RPMTAG_DISTTAG, 0, 0, 0, "disttag"}, + {RPMTAG_CVSID, 0, 0, 0, "cvsid"}, + {RPMTAG_SVNID, 0, 0, 0, "svnid"}, ++ {RPMTAG_SUGGESTSFLAGS, 0, 0, 0, "recommends"}, ++ {RPMTAG_SUGGESTSFLAGS, 0, 0, 0, "suggests"}, ++ {RPMTAG_ENHANCESFLAGS, 0, 0, 0, "supplements"}, ++ {RPMTAG_ENHANCESFLAGS, 0, 0, 0, "enhances"}, ++ {RPMTAG_BUILDSUGGESTS, 0, 0, 0, "buildrecommends"}, ++ {RPMTAG_BUILDSUGGESTS, 0, 0, 0, "buildsuggests"}, ++ {RPMTAG_BUILDENHANCES, 0, 0, 0, "buildsupplements"}, ++ {RPMTAG_BUILDENHANCES, 0, 0, 0, "buildenhances"}, + /*@-nullassign@*/ /* LCL: can't add null annotation */ + {0, 0, 0, 0, 0} + /*@=nullassign@*/ +Index: build/parseReqs.c +=================================================================== +--- build/parseReqs.c.orig ++++ build/parseReqs.c +@@ -81,6 +81,14 @@ int parseRCPOT(Spec spec, Package pkg, c + tagflags |= RPMSENSE_ANY; h = spec->buildRestrictions; break; + case RPMTAG_SUGGESTSFLAGS: -+ nametag = RPMTAG_SUGGESTSNAME; -+ break; + case RPMTAG_ENHANCESFLAGS: -+ nametag = RPMTAG_ENHANCESNAME; ++ h = pkg->header; + break; + case RPMTAG_BUILDSUGGESTS: -+ nametag = RPMTAG_SUGGESTSNAME; -+ h = spec->buildRestrictions; -+ break; + case RPMTAG_BUILDENHANCES: -+ nametag = RPMTAG_ENHANCESNAME; -+ h = spec->buildRestrictions; -+ break; - } - - for (r = field; *r != '\0'; r = re) { ---- ./build/reqprov.c.orig 2010-12-13 14:01:56.000000000 +0000 -+++ ./build/reqprov.c 2011-05-11 14:15:02.000000000 +0000 -@@ -75,6 +75,16 @@ int addReqProv(Header h, rpmTagVal tagN, ++ h = spec->buildRestrictions; ++ break; + default: + case RPMTAG_REQUIREFLAGS: + tagflags |= RPMSENSE_ANY; +Index: build/reqprov.c +=================================================================== +--- build/reqprov.c.orig ++++ build/reqprov.c +@@ -48,6 +48,16 @@ int addReqProv(/*@unused@*/ Spec spec, H + flagtag = RPMTAG_TRIGGERFLAGS; indextag = RPMTAG_TRIGGERINDEX; extra = Flags & RPMSENSE_TRIGGER; - break; -+ case RPMTAG_SUGGESTSNAME: ++ } else if (tagN == RPMTAG_SUGGESTSFLAGS || tagN == RPMTAG_BUILDSUGGESTS) { ++ nametag = RPMTAG_SUGGESTSNAME; + versiontag = RPMTAG_SUGGESTSVERSION; + flagtag = RPMTAG_SUGGESTSFLAGS; + extra = Flags & _ALL_REQUIRES_MASK; -+ break; -+ case RPMTAG_ENHANCESNAME: ++ } else if (tagN == RPMTAG_ENHANCESFLAGS || tagN == RPMTAG_BUILDENHANCES) { ++ nametag = RPMTAG_ENHANCESNAME; + versiontag = RPMTAG_ENHANCESVERSION; + flagtag = RPMTAG_ENHANCESFLAGS; + extra = Flags & _ALL_REQUIRES_MASK; -+ break; - case RPMTAG_REQUIRENAME: - default: - tagN = RPMTAG_REQUIRENAME; ---- ./build/rpmfc.c.orig 2011-02-28 09:57:21.000000000 +0000 -+++ ./build/rpmfc.c 2011-05-11 13:58:33.000000000 +0000 -@@ -1075,6 +1075,12 @@ static struct DepMsg_s depMsgs[] = { + } else { + nametag = RPMTAG_REQUIRENAME; + versiontag = RPMTAG_REQUIREVERSION; +Index: build/rpmfc.c +=================================================================== +--- build/rpmfc.c.orig ++++ build/rpmfc.c +@@ -1350,6 +1350,12 @@ static struct DepMsg_s depMsgs[] = { { "Obsoletes", { "%{?__find_obsoletes}", NULL, NULL, NULL }, RPMTAG_OBSOLETENAME, RPMTAG_OBSOLETEVERSION, RPMTAG_OBSOLETEFLAGS, 0, -1 }, @@ -116,10 +127,10 @@ Needs extcond.diff for query operations. { NULL, { NULL, NULL, NULL, NULL }, 0, 0, 0, 0, 0 } }; -@@ -1160,6 +1166,14 @@ static rpmRC rpmfcGenerateDependsHelper( +@@ -1445,6 +1451,14 @@ static int rpmfcGenerateDependsHelper(co failnonzero = 0; tagflags = RPMSENSE_FIND_REQUIRES; - break; + /*@switchbreak@*/ break; + case RPMTAG_ENHANCESFLAGS: + if (!pkg->autoProv) + continue; @@ -127,144 +138,181 @@ Needs extcond.diff for query operations. + tagflags = RPMSENSE_FIND_REQUIRES | RPMSENSE_MISSINGOK; + if (strcmp(dm->msg, "Supplements") == 0) + tagflags |= RPMSENSE_STRONG; -+ break; ++ /*@switchbreak@*/ break; default: continue; - break; ---- ./lib/formats.c.orig 2011-01-25 13:52:28.000000000 +0000 -+++ ./lib/formats.c 2011-05-11 14:02:09.000000000 +0000 -@@ -560,6 +560,24 @@ static char * depflagsFormat(rpmtd td, c - return val; - } - -+static char * depflag_strongFormat(rpmtd td, char * formatPrefix) -+{ -+ char * val = NULL; -+ -+ if (rpmtdClass(td) != RPM_NUMERIC_CLASS) { -+ val = xstrdup(_("(not a number)")); -+ } else { -+ uint64_t anint = rpmtdGetNumber(td); -+ char buf[10]; -+ buf[0] = '\0'; -+ if (anint & RPMSENSE_STRONG) -+ strcat(buf, "strong"); -+ strcat(formatPrefix, "s"); -+ rasprintf(&val, formatPrefix, buf); -+ } -+ return val; -+} -+ - /** - * Return tag container array size. - * @param td tag data container -@@ -672,6 +690,7 @@ static const struct headerFormatFunc_s r - { RPMTD_FORMAT_VFLAGS, "vflags", vflagsFormat }, - { RPMTD_FORMAT_EXPAND, "expand", expandFormat }, - { RPMTD_FORMAT_FSTATUS, "fstatus", fstatusFormat }, -+ { RPMTD_FORMAT_DEPFLAG_STRONG, "depflag_strong", depflag_strongFormat }, - { -1, NULL, NULL } - }; - ---- ./lib/rpmds.c.orig 2011-02-15 13:04:04.000000000 +0000 -+++ ./lib/rpmds.c 2011-05-11 13:58:33.000000000 +0000 -@@ -69,6 +69,10 @@ static int dsType(rpmTagVal tag, - t = "Trigger"; - evr = RPMTAG_TRIGGERVERSION; - f = RPMTAG_TRIGGERFLAGS; -+ } else if (tag == RPMTAG_ENHANCESNAME) { -+ t = "Enhances"; -+ evr = RPMTAG_ENHANCESVERSION; -+ f = RPMTAG_ENHANCESFLAGS; - } else { - rc = 1; - } ---- ./lib/rpmds.h.orig 2011-05-11 09:15:33.000000000 +0000 -+++ ./lib/rpmds.h 2011-05-11 14:01:07.000000000 +0000 -@@ -48,7 +48,7 @@ enum rpmsenseFlags_e { - RPMSENSE_RPMLIB = (1 << 24), /*!< rpmlib(feature) dependency. */ - RPMSENSE_TRIGGERPREIN = (1 << 25), /*!< %triggerprein dependency. */ + /*@notreached@*/ /*@switchbreak@*/ break; +Index: lib/rpmlib.h +=================================================================== +--- lib/rpmlib.h.orig ++++ lib/rpmlib.h +@@ -541,7 +541,7 @@ typedef enum rpmsenseFlags_e { + RPMSENSE_TRIGGERPREIN = (1 << 25), /*!< @todo Implement %triggerprein. */ + /*@=enummemuse@*/ RPMSENSE_KEYRING = (1 << 26), -- /* bit 27 unused */ -+ RPMSENSE_STRONG = (1 << 27), - RPMSENSE_CONFIG = (1 << 28) - }; - -@@ -69,6 +69,7 @@ typedef rpmFlags rpmsenseFlags; +- RPMSENSE_PATCHES = (1 << 27), ++ RPMSENSE_STRONG = (1 << 27), + RPMSENSE_CONFIG = (1 << 28), + RPMSENSE_PROBE = (1 << 29), + RPMSENSE_PACKAGE = (1 << 30) +@@ -562,6 +562,7 @@ typedef enum rpmsenseFlags_e { RPMSENSE_SCRIPT_VERIFY | \ RPMSENSE_FIND_REQUIRES | \ RPMSENSE_MISSINGOK | \ + RPMSENSE_STRONG | \ - RPMSENSE_RPMLIB | \ - RPMSENSE_KEYRING | \ - RPMSENSE_PRETRANS | \ ---- ./lib/rpmtag.h.orig 2010-12-13 14:01:56.000000000 +0000 -+++ ./lib/rpmtag.h 2011-05-11 13:58:33.000000000 +0000 -@@ -217,14 +217,14 @@ typedef enum rpmTag_e { - RPMTAG_PRETRANSPROG = 1153, /* s */ - RPMTAG_POSTTRANSPROG = 1154, /* s */ - RPMTAG_DISTTAG = 1155, /* s */ -- RPMTAG_SUGGESTSNAME = 1156, /* s[] extension (unimplemented) */ --#define RPMTAG_SUGGESTS RPMTAG_SUGGESTSNAME /* s[] (unimplemented) */ -- RPMTAG_SUGGESTSVERSION = 1157, /* s[] extension (unimplemented) */ -- RPMTAG_SUGGESTSFLAGS = 1158, /* i[] extension (unimplemented) */ -- RPMTAG_ENHANCESNAME = 1159, /* s[] extension placeholder (unimplemented) */ --#define RPMTAG_ENHANCES RPMTAG_ENHANCESNAME /* s[] (unimplemented) */ -- RPMTAG_ENHANCESVERSION = 1160, /* s[] extension placeholder (unimplemented) */ -- RPMTAG_ENHANCESFLAGS = 1161, /* i[] extension placeholder (unimplemented) */ -+ RPMTAG_SUGGESTSNAME = 1156, /* s[] extension */ -+#define RPMTAG_SUGGESTS RPMTAG_SUGGESTSNAME /* s[] */ -+ RPMTAG_SUGGESTSVERSION = 1157, /* s[] extension */ -+ RPMTAG_SUGGESTSFLAGS = 1158, /* i[] extension */ -+ RPMTAG_ENHANCESNAME = 1159, /* s[] extension */ -+#define RPMTAG_ENHANCES RPMTAG_ENHANCESNAME /* s[] */ -+ RPMTAG_ENHANCESVERSION = 1160, /* s[] extension */ -+ RPMTAG_ENHANCESFLAGS = 1161, /* i[] extension */ - RPMTAG_PRIORITY = 1162, /* i[] extension placeholder (unimplemented) */ - RPMTAG_CVSID = 1163, /* s (unimplemented) */ - #define RPMTAG_SVNID RPMTAG_CVSID /* s (unimplemented) */ ---- ./lib/rpmtd.h.orig 2010-12-03 12:11:57.000000000 +0000 -+++ ./lib/rpmtd.h 2011-05-11 14:00:06.000000000 +0000 -@@ -220,6 +220,7 @@ typedef enum rpmtdFormats_e { - RPMTD_FORMAT_VFLAGS = 17, /* file verify flags (int types) */ - RPMTD_FORMAT_EXPAND = 18, /* macro expansion (string types) */ - RPMTD_FORMAT_FSTATUS = 19, /* file verify status (int types) */ -+ RPMTD_FORMAT_DEPFLAG_STRONG = 20, /* strong dependency (int types) */ - } rpmtdFormats; - - /** \ingroup rpmtd ---- ./python/rpmmodule.c.orig 2010-12-03 12:11:57.000000000 +0000 -+++ ./python/rpmmodule.c 2011-05-11 14:19:37.000000000 +0000 -@@ -376,6 +376,7 @@ static int initModule(PyObject *m) + RPMSENSE_SCRIPT_PREP | \ + RPMSENSE_SCRIPT_BUILD | \ + RPMSENSE_SCRIPT_INSTALL | \ +Index: python/rpmmodule.c +=================================================================== +--- python/rpmmodule.c.orig ++++ python/rpmmodule.c +@@ -354,7 +354,7 @@ void init_rpm(void) REGISTER_ENUM(RPMSENSE_RPMLIB); REGISTER_ENUM(RPMSENSE_TRIGGERPREIN); REGISTER_ENUM(RPMSENSE_KEYRING); +- REGISTER_ENUM(RPMSENSE_PATCHES); + REGISTER_ENUM(RPMSENSE_STRONG); REGISTER_ENUM(RPMSENSE_CONFIG); REGISTER_ENUM(RPMTRANS_FLAG_TEST); ---- ./rpmpopt.in.orig 2011-01-11 07:04:51.000000000 +0000 -+++ ./rpmpopt.in 2011-05-11 14:18:47.000000000 +0000 -@@ -65,6 +65,22 @@ rpm alias --requires --qf \ +Index: lib/rpmds.c +=================================================================== +--- lib/rpmds.c.orig ++++ lib/rpmds.c +@@ -320,6 +320,11 @@ rpmds rpmdsNew(Header h, rpmTag tagN, in + tagEVR = RPMTAG_TRIGGERVERSION; + tagF = RPMTAG_TRIGGERFLAGS; + } else ++ if (tagN == RPMTAG_ENHANCESNAME) { ++ Type = "Enhances"; ++ tagEVR = RPMTAG_ENHANCESVERSION; ++ tagF = RPMTAG_ENHANCESFLAGS; ++ } else + goto exit; + + /*@-branchstate@*/ +Index: rpmpopt.in +=================================================================== +--- rpmpopt.in.orig ++++ rpmpopt.in +@@ -60,6 +60,22 @@ rpm alias --requires --qf \ --POPTdesc=$"list capabilities required by package(s)" rpm alias -R --requires -+rpm alias --suggests --qf \ ++rpm alias --suggests --qf \ + "[%|SUGGESTSFLAGS:depflag_strong?{}:{%{SUGGESTSNAME} %{SUGGESTSFLAGS:depflags} %{SUGGESTSVERSION}\n}|]" \ + --POPTdesc=$"list capabilities this package suggests" + -+rpm alias --recommends --qf \ ++rpm alias --recommends --qf \ + "[%|SUGGESTSFLAGS:depflag_strong?{%{SUGGESTSNAME} %{SUGGESTSFLAGS:depflags} %{SUGGESTSVERSION}\n}|]" \ + --POPTdesc=$"list capabilities this package recommends" + -+rpm alias --enhances --qf \ ++rpm alias --enhances --qf \ + "[%|ENHANCESFLAGS:depflag_strong?{}:{%{ENHANCESNAME} %{ENHANCESFLAGS:depflags} %{ENHANCESVERSION}\n}|]" \ + --POPTdesc=$"list capabilities this package enhances" + -+rpm alias --supplements --qf \ ++rpm alias --supplements --qf \ + "[%|ENHANCESFLAGS:depflag_strong?{%{ENHANCESNAME} %{ENHANCESFLAGS:depflags} %{ENHANCESVERSION}\n}|]" \ + --POPTdesc=$"list capabilities this package supplements" + - rpm alias --info --qf '\ - Name : %{NAME}\n\ - %|EPOCH?{Epoch : %{EPOCH}\n}|\ + rpm alias --info --qf 'Name : %-27{NAME} Relocations: %|PREFIXES?{[%{PREFIXES} ]}:{(not relocatable)}|\n\ + Version : %-27{VERSION} Vendor: %{VENDOR}\n\ + Release : %-27{RELEASE} Build Date: %{BUILDTIME:date}\n\ +@@ -340,6 +356,22 @@ rpmq alias --requires --qf \ + --POPTdesc=$"list capabilities required by package(s)" + rpmq alias -R --requires + ++rpmq alias --suggests --qf \ ++ "[%|SUGGESTSFLAGS:depflag_strong?{}:{%{SUGGESTSNAME} %{SUGGESTSFLAGS:depflags} %{SUGGESTSVERSION}\n}|]" \ ++ --POPTdesc=$"list capabilities this package suggests" ++ ++rpmq alias --recommends --qf \ ++ "[%|SUGGESTSFLAGS:depflag_strong?{%{SUGGESTSNAME} %{SUGGESTSFLAGS:depflags} %{SUGGESTSVERSION}\n}|]" \ ++ --POPTdesc=$"list capabilities this package recommends" ++ ++rpmq alias --enhances --qf \ ++ "[%|ENHANCESFLAGS:depflag_strong?{}:{%{ENHANCESNAME} %{ENHANCESFLAGS:depflags} %{ENHANCESVERSION}\n}|]" \ ++ --POPTdesc=$"list capabilities this package enhances" ++ ++rpmq alias --supplements --qf \ ++ "[%|ENHANCESFLAGS:depflag_strong?{%{ENHANCESNAME} %{ENHANCESFLAGS:depflags} %{ENHANCESVERSION}\n}|]" \ ++ --POPTdesc=$"list capabilities this package supplements" ++ + rpmq alias --info --qf 'Name : %-27{NAME} Relocations: %|PREFIXES?{[%{PREFIXES} ]}:{(not relocatable)}|\n\ + Version : %-27{VERSION} Vendor: %{VENDOR}\n\ + Release : %-27{RELEASE} Build Date: %{BUILDTIME:date}\n\ +@@ -438,6 +470,22 @@ rpmquery alias --requires --qf \ + --POPTdesc=$"list capabilities required by package(s)" + rpmquery alias -R --requires + ++rpmquery alias --suggests --qf \ ++ "[%|SUGGESTSFLAGS:depflag_strong?{}:{%{SUGGESTSNAME} %{SUGGESTSFLAGS:depflags} %{SUGGESTSVERSION}\n}|]" \ ++ --POPTdesc=$"list capabilities this package suggests" ++ ++rpmquery alias --recommends --qf \ ++ "[%|SUGGESTSFLAGS:depflag_strong?{%{SUGGESTSNAME} %{SUGGESTSFLAGS:depflags} %{SUGGESTSVERSION}\n}|]" \ ++ --POPTdesc=$"list capabilities this package recommends" ++ ++rpmquery alias --enhances --qf \ ++ "[%|ENHANCESFLAGS:depflag_strong?{}:{%{ENHANCESNAME} %{ENHANCESFLAGS:depflags} %{ENHANCESVERSION}\n}|]" \ ++ --POPTdesc=$"list capabilities this package enhances" ++ ++rpmquery alias --supplements --qf \ ++ "[%|ENHANCESFLAGS:depflag_strong?{%{ENHANCESNAME} %{ENHANCESFLAGS:depflags} %{ENHANCESVERSION}\n}|]" \ ++ --POPTdesc=$"list capabilities this package supplements" ++ + rpmquery alias --info --qf 'Name : %-27{NAME} Relocations: %|PREFIXES?{[%{PREFIXES} ]}:{(not relocatable)}|\n\ + Version : %-27{VERSION} Vendor: %{VENDOR}\n\ + Release : %-27{RELEASE} Build Date: %{BUILDTIME:date}\n\ +Index: lib/formats.c +=================================================================== +--- lib/formats.c.orig ++++ lib/formats.c +@@ -652,6 +652,38 @@ static /*@only@*/ char * depflagsFormat( + return val; + } + ++static /*@only@*/ char * depflag_strongFormat(int_32 type, const void * data, ++ char * formatPrefix, int padding, /*@unused@*/ int element) ++ /*@modifies formatPrefix @*/ ++ /*@requires maxRead(data) >= 0 @*/ ++{ ++ char * val; ++ char buf[10]; ++ int anint; ++ ++ if (type != RPM_INT32_TYPE) { ++ val = xstrdup(_("(not a number)")); ++ } else { ++ anint = *((int_32 *) data); ++ buf[0] = '\0'; ++ ++/*@-boundswrite@*/ ++ if (anint & RPMSENSE_STRONG) ++ strcat(buf, "strong"); ++/*@=boundswrite@*/ ++ ++ val = xmalloc(7 + padding); ++/*@-boundswrite@*/ ++ strcat(formatPrefix, "s"); ++/*@=boundswrite@*/ ++ /*@-formatconst@*/ ++ sprintf(val, formatPrefix, buf); ++ /*@=formatconst@*/ ++ } ++ ++ return val; ++} ++ + /** + * Retrieve mounted file system paths. + * @param h header +@@ -1344,6 +1376,7 @@ const struct headerSprintfExtension_s rp + { HEADER_EXT_FORMAT, "base64", { base64Format } }, + { HEADER_EXT_FORMAT, "pgpsig", { pgpsigFormat } }, + { HEADER_EXT_FORMAT, "depflags", { depflagsFormat } }, ++ { HEADER_EXT_FORMAT, "depflag_strong", { depflag_strongFormat } }, + { HEADER_EXT_FORMAT, "fflags", { fflagsFormat } }, + { HEADER_EXT_FORMAT, "perms", { permsFormat } }, + { HEADER_EXT_FORMAT, "permissions", { permsFormat } }, diff --git a/whatrequires-doc.diff b/whatrequires-doc.diff deleted file mode 100644 index 96cf15f..0000000 --- a/whatrequires-doc.diff +++ /dev/null @@ -1,14 +0,0 @@ ---- ./doc/rpm.8.orig 2011-01-05 08:11:09.000000000 +0000 -+++ ./doc/rpm.8 2011-05-11 15:36:18.000000000 +0000 -@@ -564,6 +564,11 @@ Query all packages that provide the \fIC - .TP - \fB--whatrequires \fICAPABILITY\fB\fR - Query all packages that require \fICAPABILITY\fR for proper functioning. -+.br -+Note that this does not return what requires a given package. -+A package usually provides multiple capabilities and file-names on which -+other packages may depend. To see the complete dependencies -+for a package, use \fB-e --test \fIPACKAGE_NAME\fB\fR - .SS "PACKAGE QUERY OPTIONS:" - .PP - .TP