From cebe6dd1a8f05985301176c08e5e2453bc0b4a3f057d20d0d7c10c47370f6c24 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20Schr=C3=B6der?= Date: Mon, 16 May 2011 16:07:44 +0000 Subject: [PATCH] update to rpm-4.9.0 OBS-URL: https://build.opensuse.org/package/show/Base:System/rpm?expand=0&rev=93 --- allowufdio.diff | 23 --- autodeps.diff | 42 ++-- backport.diff | 55 ------ brp.diff | 88 ++++----- brpcombress.diff => brpcompress.diff | 37 ++-- build.diff | 18 +- buildidprov.diff | 29 +-- chownwarn.diff | 72 ++++--- convertdb1static.diff | 29 +-- db-4.8.30.tar.bz2 | 3 + db.diff | 203 +++++-------------- dbfsync.diff | 54 ++---- dbprivate.diff | 26 ++- dbrointerruptable.diff | 67 +++---- debugedit-canon-fix.diff | 91 ++------- debugedit-comp-dir.diff | 20 +- debugedit.diff | 44 ++--- debuginfo-mono.patch | 8 +- debuglink.diff | 8 +- debugsource-package.diff | 23 +-- debugsubpkg.diff | 235 +++++++++++----------- defclean.diff | 16 -- diskspace.diff | 24 --- disttag-macro.diff | 12 +- emptyprep.diff | 13 ++ extcond.diff | 14 +- fileattrs.diff | 58 ++++++ files.diff | 28 +-- finddebuginfo-absolute-links.diff | 13 +- finddebuginfo.diff | 22 +-- findksyms.diff | 18 +- findlang.diff | 35 ++-- findsupplements.diff | 75 +++++++ fixsbits.diff | 47 ----- fontprovides.diff | 26 +-- headeradddb.diff | 55 ++++++ initscriptsprov.diff | 50 ++--- langnoc.diff | 30 ++- lazystatfs.diff | 244 +---------------------- localetag.diff | 19 +- luaroot.diff | 55 ------ macrosin.diff | 49 ++--- magic_and_path.diff | 31 +++ missingok.diff | 22 ++- modalias.diff | 54 +++--- modemuncher.diff | 16 -- nameversioncompare.diff | 37 ++-- no_rep_autop.diff | 12 ++ nobuildcolor.diff | 13 ++ nodefattr.diff | 17 -- nomagiccheck.diff | 13 ++ noprereqdeprec.diff | 22 ++- nosignature.diff | 23 --- nosource.diff | 36 ---- perlprov.diff | 18 +- pkgconfig-0.24.diff | 27 --- platformin.diff | 8 +- pythondeps.diff | 37 +--- readlineofi.diff | 10 - refreshtestarch.diff | 14 +- remove-brp-strips.diff | 12 +- remove-translations.diff | 6 +- repackage-nomd5.diff | 16 +- requires-ge-macro.diff | 8 +- resetdefattr.diff | 55 ------ rpm-4.4.2.3-db.tar.bz2 | 3 - rpm-4.8.0.tar.bz2 | 3 - rpm-4.9.0.tar.bz2 | 3 + rpm-beecrypt.diff | 125 ++++++------ rpm-python.spec | 4 +- rpm-shorten-changelog.diff | 45 ++--- rpm.changes | 10 + rpm.spec | 159 +++++++-------- rpmdb-no-svc.diff | 19 -- rpmdb_get_open_flags.diff | 13 ++ rpmpopt.diff | 14 +- rpmqpack.diff | 40 ++-- rpmrctests.diff | 16 +- safeugid.diff | 279 ++++++++++++--------------- specfilemacro.diff | 8 +- suspendlock.diff | 185 +++++++++--------- taggedfileindex.diff | 193 ++---------------- tarrecordsize.diff | 17 -- verify_p.diff | 49 +++++ waitlock.diff | 167 ++++++++-------- weakdeps.diff | 169 ++++++++-------- whatrequires-doc.diff | 8 +- 87 files changed, 1633 insertions(+), 2481 deletions(-) delete mode 100644 allowufdio.diff delete mode 100644 backport.diff rename brpcombress.diff => brpcompress.diff (64%) create mode 100644 db-4.8.30.tar.bz2 delete mode 100644 defclean.diff delete mode 100644 diskspace.diff create mode 100644 emptyprep.diff create mode 100644 fileattrs.diff create mode 100644 findsupplements.diff delete mode 100644 fixsbits.diff create mode 100644 headeradddb.diff delete mode 100644 luaroot.diff create mode 100644 magic_and_path.diff delete mode 100644 modemuncher.diff create mode 100644 no_rep_autop.diff create mode 100644 nobuildcolor.diff delete mode 100644 nodefattr.diff create mode 100644 nomagiccheck.diff delete mode 100644 nosignature.diff delete mode 100644 nosource.diff delete mode 100644 pkgconfig-0.24.diff delete mode 100644 readlineofi.diff delete mode 100644 resetdefattr.diff delete mode 100644 rpm-4.4.2.3-db.tar.bz2 delete mode 100644 rpm-4.8.0.tar.bz2 create mode 100644 rpm-4.9.0.tar.bz2 delete mode 100644 rpmdb-no-svc.diff create mode 100644 rpmdb_get_open_flags.diff delete mode 100644 tarrecordsize.diff create mode 100644 verify_p.diff diff --git a/allowufdio.diff b/allowufdio.diff deleted file mode 100644 index 57b0c3b..0000000 --- a/allowufdio.diff +++ /dev/null @@ -1,23 +0,0 @@ ---- ./build/pack.c.orig 2010-03-25 15:18:23.000000000 +0000 -+++ ./build/pack.c 2010-03-25 15:23:54.000000000 +0000 -@@ -375,7 +375,9 @@ rpmRC writeRPM(Header *hdrp, unsigned ch - const char *compr = NULL; - headerPutString(h, RPMTAG_PAYLOADFORMAT, "cpio"); - -- if (rstreq(s+1, "gzdio")) { -+ if (rstreq(s+1, "ufdio")) { -+ compr = NULL; -+ } else if (rstreq(s+1, "gzdio")) { - compr = "gzip"; - #if HAVE_BZLIB_H - } else if (rstreq(s+1, "bzdio")) { -@@ -398,7 +400,8 @@ rpmRC writeRPM(Header *hdrp, unsigned ch - goto exit; - } - -- headerPutString(h, RPMTAG_PAYLOADCOMPRESSOR, compr); -+ if (compr) -+ headerPutString(h, RPMTAG_PAYLOADCOMPRESSOR, compr); - buf = xstrdup(rpmio_flags); - buf[s - rpmio_flags] = '\0'; - headerPutString(h, RPMTAG_PAYLOADFLAGS, buf+1); diff --git a/autodeps.diff b/autodeps.diff index ffcf061..f8ad21f 100644 --- a/autodeps.diff +++ b/autodeps.diff @@ -1,9 +1,5 @@ -Some (probably SUSE specific) changes to linux.prov and linux.req - -Index: autodeps/linux.prov -=================================================================== ---- autodeps/linux.prov.orig -+++ autodeps/linux.prov +--- ./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 @@ # This script reads filenames from STDIN and outputs any relevant provides @@ -105,28 +101,20 @@ Index: autodeps/linux.prov + printf "%s\n" "${filelist[@]}" | /usr/lib/rpm/find-provides.ksyms "$@" exit 0 -Index: autodeps/linux.req -=================================================================== ---- autodeps/linux.req.orig -+++ autodeps/linux.req -@@ -19,18 +19,22 @@ fi +--- ./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 # # --- Grab the file manifest and classify files. #filelist=`sed "s/['\"]/\\\&/g"` -filelist=`sed "s/[]['\"*?{}]/\\\\\&/g"` --exelist=`echo $filelist | xargs -r file | egrep -v ":.* (commands|script) " | \ +-exelist=`echo $filelist | xargs -r file | grep -Ev ":.* (commands|script) " | \ - grep ":.*executable" | cut -d: -f1` -scriptlist=`echo $filelist | xargs -r file | \ -- egrep ":.* (commands|script) " | cut -d: -f1` +- grep -E ":.* (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) " | \ @@ -135,7 +123,11 @@ Index: autodeps/linux.req + 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=() @@ -144,7 +136,7 @@ Index: autodeps/linux.req # # --- Alpha does not mark 64bit dependencies -@@ -42,12 +46,12 @@ esac +@@ -42,12 +45,12 @@ esac if [ "$needed" -eq 0 ]; then # # --- Executable dependency sonames. @@ -162,7 +154,7 @@ Index: autodeps/linux.req gsub(/'\''"/,"\\&",$1); printf "%s'$lib64'\n", $1 } -@@ -56,12 +60,12 @@ if [ "$needed" -eq 0 ]; then +@@ -56,12 +59,12 @@ if [ "$needed" -eq 0 ]; then # # --- Library dependency sonames. @@ -180,7 +172,7 @@ Index: autodeps/linux.req gsub(/'\''"/,"\\&",$1); printf "%s'$lib64'\n", $1 } -@@ -71,30 +75,30 @@ fi +@@ -71,30 +74,30 @@ fi # # --- Script interpreters. @@ -223,7 +215,7 @@ Index: autodeps/linux.req /^$/ { START=0; } /^Dynamic Section:$/ { START=1; } (START==1) && /NEEDED/ { -@@ -111,7 +115,7 @@ for f in $liblist $exelist ; do +@@ -111,7 +114,7 @@ for f in $liblist $exelist ; do sub(/:/, "", $3); LIBNAME=$3; } @@ -232,7 +224,7 @@ Index: autodeps/linux.req print LIBNAME "(" $4 ")'$lib64'"; } ' -@@ -119,17 +123,29 @@ done | sort -u +@@ -119,17 +122,29 @@ done | sort -u # # --- Perl modules. diff --git a/backport.diff b/backport.diff deleted file mode 100644 index 734f84f..0000000 --- a/backport.diff +++ /dev/null @@ -1,55 +0,0 @@ -A couple of fixes picked from upstream. - ---- ./lib/rpminstall.c.orig 2010-04-08 12:35:48.000000000 +0000 -+++ ./lib/rpminstall.c 2010-04-08 12:36:00.000000000 +0000 -@@ -458,7 +458,7 @@ restart: - case URL_IS_HTTPS: - case URL_IS_HTTP: - case URL_IS_FTP: -- { char *tfn; -+ { char *tfn = NULL; - FD_t tfd; - - if (rpmIsVerbose()) ---- ./lib/transaction.c.orig 2010-04-08 12:33:22.000000000 +0000 -+++ ./lib/transaction.c 2010-04-08 12:35:00.000000000 +0000 -@@ -183,6 +183,10 @@ static void rpmtsUpdateDSI(const rpmts t - - if (fixupSize) - dsi->bneeded -= BLOCK_ROUND(fixupSize, dsi->bsize); -+ -+ /* adjust bookkeeping when requirements shrink */ -+ if (dsi->bneeded < dsi->obneeded) dsi->obneeded = dsi->bneeded; -+ if (dsi->ineeded < dsi->oineeded) dsi->oineeded = dsi->ineeded; - } - - static void rpmtsFindDSIMount(const rpmts ts, rpmDiskSpaceInfo dsi) -@@ -231,7 +235,7 @@ static void rpmtsCheckDSIProblems(const - for (; dsi->bsize; dsi++) { - - if (dsi->bavail >= 0 && adj_fs_blocks(dsi->bneeded) > dsi->bavail) { -- if (dsi->bneeded != dsi->obneeded) { -+ if (dsi->bneeded > dsi->obneeded) { - if (!dsi->mntPoint) - rpmtsFindDSIMount(ts, dsi); - rpmpsAppend(ps, RPMPROB_DISKSPACE, -@@ -243,7 +247,7 @@ static void rpmtsCheckDSIProblems(const - } - - if (dsi->iavail >= 0 && adj_fs_blocks(dsi->ineeded) > dsi->iavail) { -- if (dsi->ineeded != dsi->oineeded) { -+ if (dsi->ineeded > dsi->oineeded) { - if (!dsi->mntPoint) - rpmtsFindDSIMount(ts, dsi); - rpmpsAppend(ps, RPMPROB_DISKNODES, ---- ./lib/verify.c.orig 2010-04-08 12:36:09.000000000 +0000 -+++ ./lib/verify.c 2010-04-08 12:37:37.000000000 +0000 -@@ -348,7 +348,7 @@ static int verifyHeader(QVA_t qva, const - static const char *const aok = "."; - static const char *const unknown = "?"; - -- ec = (verifyResult != 0); -+ if (verifyResult) ec = 1; - - #define _verify(_RPMVERIFY_F, _C) \ - ((verifyResult & _RPMVERIFY_F) ? _C : aok) diff --git a/brp.diff b/brp.diff index 8eaf776..27fe6b5 100644 --- a/brp.diff +++ b/brp.diff @@ -1,9 +1,25 @@ SUSE specific brp script patches -Index: scripts/brp-lib64-linux -=================================================================== ---- /dev/null -+++ scripts/brp-lib64-linux +--- ./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 @@ -0,0 +1,42 @@ +#!/bin/bash +# script checks wether package is 64-bit clean @@ -47,23 +63,9 @@ Index: scripts/brp-lib64-linux + fi +done +exit 0 -Index: scripts/brp-strip -=================================================================== ---- scripts/brp-strip.orig -+++ scripts/brp-strip -@@ -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" || : - done -Index: scripts/brp-strip-comment-note -=================================================================== ---- scripts/brp-strip-comment-note.orig -+++ scripts/brp-strip-comment-note -@@ -13,6 +13,8 @@ esac +--- ./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 # 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" | \ @@ -71,11 +73,19 @@ Index: scripts/brp-strip-comment-note + 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 | \ -Index: scripts/brp-symlink -=================================================================== ---- /dev/null -+++ scripts/brp-symlink + 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 + 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" || : + 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 @@ +#!/bin/sh + @@ -261,29 +271,3 @@ Index: scripts/brp-symlink +if test "$had_errors" = 1; then + exit 1 +fi -Index: scripts/Makefile.am -=================================================================== ---- scripts/Makefile.am.orig -+++ scripts/Makefile.am -@@ -6,8 +6,10 @@ CLEANFILES = - - EXTRA_DIST = \ - brp-compress brp-python-bytecompile brp-java-gcjcompile \ -+ brp-lib64-linux \ - brp-strip brp-strip-comment-note \ - brp-strip-shared brp-strip-static-archive \ -+ brp-symlink \ - check-files check-prereqs \ - check-buildroot check-rpaths check-rpaths-worker \ - find-debuginfo.sh find-lang.sh \ -@@ -24,8 +26,10 @@ EXTRA_DIST = \ - - rpmconfig_SCRIPTS = \ - brp-compress brp-python-bytecompile brp-java-gcjcompile \ -+ brp-lib64-linux \ - brp-strip brp-strip-comment-note \ - brp-strip-shared brp-strip-static-archive \ -+ brp-symlink \ - check-files check-prereqs \ - check-buildroot check-rpaths check-rpaths-worker \ - find-lang.sh \ diff --git a/brpcombress.diff b/brpcompress.diff similarity index 64% rename from brpcombress.diff rename to brpcompress.diff index 57e2383..07e5174 100644 --- a/brpcombress.diff +++ b/brpcompress.diff @@ -1,13 +1,6 @@ -Index: scripts/brp-compress -=================================================================== ---- scripts/brp-compress.orig -+++ scripts/brp-compress -@@ -1,56 +1,83 @@ --#!/bin/sh -+#!/bin/bash - - # If using normal root, avoid changing anything. - if [ -z "$RPM_BUILD_ROOT" -o "$RPM_BUILD_ROOT" = "/" ]; then +--- ./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 @@ -29,13 +22,13 @@ Index: scripts/brp-compress + inode=`ls -i $b | awk '{ print $1 }'` + others=`find $dir -type f -inum $inode` + for afile in $others ; do -+ [ "$afile" != "$b" ] && rm -f $afile ++ [ "$afile" != "$b" ] && rm -f "$afile" + done + + case $b in + *.Z|*.gz) gunzip $b ;; + *.bz2) bunzip2 $b ;; -+ *.xz|*.lzma) unxz $b ;; ++ *.xz|*.lzma) unxz $b ;; + esac + + type=${b##*.} @@ -50,21 +43,19 @@ Index: scripts/brp-compress ./usr/share/doc/*/man/man* ./usr/lib/*/man/man* do [ -d $d ] || continue -- for f in `find $d -type f` -+ find $d -type f | while read f +- for f in `find $d -type f ! -name dir` ++ find $d -type f ! -name dir | while read f do [ -f "$f" ] || continue -- [ "`basename $f`" = "dir" ] && continue -+ [ "`basename \"$f\"`" = "dir" ] && continue case "$f" in -- *.gz|*.Z) gunzip $f; b=`echo $f | sed -e 's/\.\(gz\|Z\)$//'`;; -- *.bz2) bunzip2 $f; b=`echo $f | sed -e 's/\.bz2$//'`;; -- *.xz|*.lzma) unxz $f; b=`echo $f | sed -e 's/\.\(xz\|lzma\)$//'`;; +- *.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\)$//'`";; ++ *.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 @@ -99,7 +90,7 @@ Index: scripts/brp-compress - 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\)$//'`" ++ 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 861aa1b..65d851b 100644 --- a/build.diff +++ b/build.diff @@ -1,9 +1,9 @@ Many changes to Makefiles/autogen and the like to make it build on SUSE systems. ---- ./configure.ac.orig 2010-03-24 16:35:40.000000000 +0000 -+++ ./configure.ac 2010-03-25 15:16:21.000000000 +0000 -@@ -1006,6 +1006,7 @@ arm*) RPMCANONCOLOR=0; RPMCANONARCH=arm +--- ./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 mipsel*) RPMCANONCOLOR=0; RPMCANONARCH=mipsel ;; mips*) RPMCANONCOLOR=0; RPMCANONARCH=mips ;; m68k*) RPMCANONCOLOR=0; RPMCANONARCH=m68k ;; @@ -11,7 +11,7 @@ on SUSE systems. sh3*) RPMCANONCOLOR=0; RPMCANONARCH=sh3 ;; sh4*) RPMCANONCOLOR=0; RPMCANONARCH=sh4 ;; *) RPMCANONCOLOR=0; RPMCANONARCH=unknown ;; -@@ -1016,6 +1017,7 @@ esac +@@ -860,6 +861,7 @@ esac RPMCANONVENDOR="$build_vendor" case "${build_vendor}" in unknown|pc|ibm|redhat|pld|mandrake|conectiva|lvr|yellowdog|caos|suse) @@ -19,7 +19,7 @@ on SUSE systems. test -f /etc/redhat-release && RPMCANONVENDOR=redhat test -f /etc/SuSE-release && RPMCANONVENDOR=suse test -f /etc/pld-release && RPMCANONVENDOR=pld -@@ -1028,6 +1030,9 @@ unknown|pc|ibm|redhat|pld|mandrake|conec +@@ -872,6 +874,9 @@ unknown|pc|ibm|redhat|pld|mandrake|conec esac RPMCANONOS="$host_os_noversion" RPMCANONGNU="$host_os_gnu" @@ -29,8 +29,8 @@ on SUSE systems. AC_SUBST(RPMCANONCOLOR) AC_SUBST(RPMCANONARCH) AC_SUBST(RPMCANONVENDOR) ---- ./db3/configure.orig 2009-12-07 14:36:49.000000000 +0000 -+++ ./db3/configure 2010-03-25 15:17:41.000000000 +0000 +--- ./db3/configure.orig 2010-12-03 12:11:57.000000000 +0000 ++++ ./db3/configure 2011-05-11 15:18:44.000000000 +0000 @@ -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=.*$%%'`" @@ -43,8 +43,8 @@ on SUSE systems. mv Makefile Makefile.orig cat Makefile.orig | sed -e '/^install[:-]/c\ ---- ./installplatform.orig 2009-12-07 14:36:49.000000000 +0000 -+++ ./installplatform 2010-03-25 15:16:21.000000000 +0000 +--- ./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 diff --git a/buildidprov.diff b/buildidprov.diff index 6cbc765..fd5b417 100644 --- a/buildidprov.diff +++ b/buildidprov.diff @@ -1,7 +1,7 @@ From: Jan Blunck Subject: Let debuginfo packages provide the build-id -This patch let debuginfo packages provide build-id like follows: +This patch lets debuginfo packages provide build-id like follows: debuginfo(build-id) = c63cb23876c5fa85f36beaff58f8557e1bf22517 @@ -9,17 +9,8 @@ Users can therefore ask zypper to install the correct debuginfo package with: zypper install -C "debuginfo(build-id) = c63cb23876c5fa85f36beaff58f8557e1bf22517" -Signed-off-by: Jan Blunck ---- - autodeps/linux.prov | 8 ++++++++ - macros.in | 3 ++- - scripts/debuginfo.prov | 12 ++++++++++++ - 3 files changed, 22 insertions(+), 1 deletion(-) - -Index: autodeps/linux.prov -=================================================================== ---- autodeps/linux.prov.orig -+++ autodeps/linux.prov +--- ./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)) @@ -42,11 +33,9 @@ Index: autodeps/linux.prov # --- Mono exes/dlls : ${MONO_PREFIX=/usr} if [ -x $MONO_PREFIX/bin/mono -a -n "$monolist" ] ; then -Index: macros.in -=================================================================== ---- macros.in.orig -+++ macros.in -@@ -179,7 +179,8 @@ +--- ./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\ @@ -56,10 +45,8 @@ Index: macros.in #Requires: %{?!debug_package_requires:%{name} = %{version}-%{release}}%{?debug_package_requires}\ %description debuginfo\ This package provides debug information for package %{name}.\ -Index: scripts/debuginfo.prov -=================================================================== ---- /dev/null -+++ scripts/debuginfo.prov +--- ./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 + diff --git a/chownwarn.diff b/chownwarn.diff index 7d56a31..fccaa1a 100644 --- a/chownwarn.diff +++ b/chownwarn.diff @@ -1,28 +1,50 @@ -Warn the user if chown/fchown fails. +Do not abort if chown/chmod fails but the file is already correct -Index: lib/fsm.c -=================================================================== ---- lib/fsm.c.orig -+++ lib/fsm.c -@@ -2093,6 +2093,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) { -+ rpmlog(RPMLOG_WARNING, "can't chown %s (%s)\n", fsm->path, strerror(errno)); +--- ./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) + rc = 0; -+ } - if (_fsm_debug && (stage & FSM_SYSCALL)) - rpmlog(RPMLOG_DEBUG, " %8s (%s, %d, %d) %s\n", cur, - fsm->path, (int)st->st_uid, (int)st->st_gid, -@@ -2102,6 +2106,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) { -+ rpmlog(RPMLOG_WARNING, "can't lchown %s (%s)\n", fsm->path, strerror(errno)); ++ } + 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) + rc = 0; -+ } - if (_fsm_debug && (stage & FSM_SYSCALL)) - rpmlog(RPMLOG_DEBUG, " %8s (%s, %d, %d) %s\n", cur, - fsm->path, (int)st->st_uid, (int)st->st_gid, ++ } + 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()) { diff --git a/convertdb1static.diff b/convertdb1static.diff index f1ead10..1b9e796 100644 --- a/convertdb1static.diff +++ b/convertdb1static.diff @@ -1,25 +1,21 @@ Build convertdb1, too. -Index: Makefile.am -=================================================================== ---- Makefile.am.orig -+++ Makefile.am -@@ -143,6 +143,10 @@ bin_PROGRAMS += rpmqpack +--- ./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 -+check_PROGRAMS += convertdb1 ++bin_PROGRAMS += convertdb1 +convertdb1_SOURCES = tools/convertdb1.c +convertdb1_LDADD = lib/librpm.la + rpmconfig_DATA = rpmrc rpmrc: $(top_srcdir)/rpmrc.in @$(SED) \ -Index: tools/convertdb1.c -=================================================================== ---- /dev/null -+++ tools/convertdb1.c -@@ -0,0 +1,346 @@ +--- 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; @@ -30,6 +26,7 @@ Index: tools/convertdb1.c +#endif + +#include ++#include +#include +#include +#include @@ -305,6 +302,7 @@ Index: tools/convertdb1.c + const char *name; + const char *version; + const char *release; ++ rpmts ts; + + if (argc != 2) + { @@ -321,7 +319,9 @@ Index: tools/convertdb1.c + /* speed things up */ + (void) rpmDefineMacro(NULL, "_rpmdb_rebuild %{nil}", -1); + -+ if (rpmdbOpen("/", &db, O_RDWR, 0644)) { ++ ts = rpmtsCreate(); ++ ++ if (rpmtsOpenDB(ts, O_RDWR)) { + fprintf(stderr, "could not open rpm database\n"); + exit(1); + } @@ -355,14 +355,15 @@ Index: tools/convertdb1.c + continue; + } + rpmdbFreeIterator(mi); -+ if (rpmdbAdd(db, -1, h, 0, 0)) ++ if (rpmtsHeaderAddDB(ts, h)) + { + fprintf(stderr, "could not add %s-%s-%s!\n", name, version, release); + } + headerFree(h); + } + Fclose(fd); -+ rpmdbClose(db); ++ rpmtsCloseDB(ts); ++ rpmtsFree(ts); + return 0; +} + diff --git a/db-4.8.30.tar.bz2 b/db-4.8.30.tar.bz2 new file mode 100644 index 0000000..b0fa0be --- /dev/null +++ b/db-4.8.30.tar.bz2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2ba998b7451758928011878514c78b8a6f0fbfd49ebf5cc9f4269f4666414ab4 +size 19969243 diff --git a/db.diff b/db.diff index 741de66..0d389f0 100644 --- a/db.diff +++ b/db.diff @@ -1,179 +1,82 @@ ---- db/db/db.c -+++ db/db/db.c -@@ -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) +--- 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); return (ret); + } + if (LF_ISSET(DB_NOFSYNC) && mpf->mfp) + F_SET(mpf->mfp, MP_NOFSYNC); - return (0); - } ---- db/db/db_iface.c -+++ db/db/db_iface.c -@@ -1068,7 +1068,7 @@ __db_open_arg(dbp, txn, fname, dname, ty + /* + * 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 #define OKFLAGS \ - (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) + (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) return (ret); - if (LF_ISSET(DB_EXCL) && !LF_ISSET(DB_CREATE)) ---- db/dbinc/db.in -+++ db/dbinc/db.in -@@ -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 -+++ db/dbinc/mp.h -@@ -309,6 +309,7 @@ struct __mpoolfile { +--- 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 { #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/dist/aclocal/options.ac -+++ db/dist/aclocal/options.ac -@@ -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]) ---- db/dist/configure.ac -+++ db/dist/configure.ac -@@ -690,14 +690,14 @@ LTLIBOBJS=`echo "$LIB@&t@OBJS" | - AC_SUBST(LTLIBOBJS) - - # Initial output file list. --CREATE_LIST="Makefile -- db_cxx.h:$srcdir/../dbinc/db_cxx.in -- db_int.h:$srcdir/../dbinc/db_int.in -+CREATE_LIST="Makefile \ -+ db_cxx.h:$srcdir/../dbinc/db_cxx.in \ -+ db_int.h:$srcdir/../dbinc/db_int.in \ - include.tcl:$srcdir/../test/include.tcl" - - # MinGW needs win_db.h. - if test "$db_cv_mingw" = "yes"; then --CREATE_LIST="$CREATE_LIST -+CREATE_LIST="$CREATE_LIST \ - win_db.h:$srcdir/win_db.in" - fi - -@@ -705,10 +705,10 @@ fi - # prototypes, and, if configured for unique names, a list of #defines - # to do DB_VERSION_UNIQUE_NAME substitution. - if test "$db_cv_uniquename" = "yes"; then -- CREATE_LIST="$CREATE_LIST -+ CREATE_LIST="$CREATE_LIST \ - db.h:$srcdir/../dbinc/db.in:$srcdir/../dbinc_auto/ext_def.in:$srcdir/../dbinc_auto/ext_prot.in" - else -- CREATE_LIST="$CREATE_LIST -+ CREATE_LIST="$CREATE_LIST \ - db.h:$srcdir/../dbinc/db.in:$srcdir/../dbinc_auto/ext_prot.in" - fi - -@@ -716,7 +716,7 @@ fi - # does the DB_VERSION_UNIQUE_NAME substitution), which is included by - # the db_int.h file. - if test "$db_cv_uniquename" = "yes"; then -- CREATE_LIST="$CREATE_LIST -+ CREATE_LIST="$CREATE_LIST \ - db_int_def.h:$srcdir/../dbinc_auto/int_def.in" - db_int_def='#include "db_int_def.h"' - fi -@@ -726,12 +726,12 @@ fi - # of #defines to do DB_VERSION_UNIQUE_NAME substitution. - if test "$db_cv_compat185" = "yes"; then - if test "$db_cv_uniquename" = "yes"; then -- CREATE_LIST="$CREATE_LIST -- db_185.h:$srcdir/../dbinc/db_185.in:$srcdir/../dbinc_auto/ext_185_def.in:$srcdir/../dbinc_auto/ext_185_prot.in -+ CREATE_LIST="$CREATE_LIST \ -+ db_185.h:$srcdir/../dbinc/db_185.in:$srcdir/../dbinc_auto/ext_185_def.in:$srcdir/../dbinc_auto/ext_185_prot.in \ - db185_int.h:$srcdir/../db185/db185_int.in:$srcdir/../dbinc_auto/ext_185_def.in:$srcdir/../dbinc_auto/ext_185_prot.in" - else -- CREATE_LIST="$CREATE_LIST -- db_185.h:$srcdir/../dbinc/db_185.in:$srcdir/../dbinc_auto/ext_185_prot.in -+ CREATE_LIST="$CREATE_LIST \ -+ db_185.h:$srcdir/../dbinc/db_185.in:$srcdir/../dbinc_auto/ext_185_prot.in \ - db185_int.h:$srcdir/../db185/db185_int.in:$srcdir/../dbinc_auto/ext_185_prot.in" - fi - fi ---- db/dist/s_config -+++ db/dist/s_config +--- 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/*.ac aclocal_java/*.ac > aclocal.m4 -+cat aclocal/*.ac aclocal_java/*.ac > acinclude.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 -@@ -20,14 +21,13 @@ rm -f configure - 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 -+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" \ -+ -i configure - - rm -rf autom4te.cache - chmod 555 configure ---- db/mp/mp_sync.c -+++ db/mp/mp_sync.c -@@ -553,7 +553,7 @@ done: /* - if (ret == 0 && (op == DB_SYNC_CACHE || op == DB_SYNC_FILE)) { +--- 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) { if (dbmfp == NULL) - ret = __memp_sync_files(dbenv, dbmp); + ret = __memp_sync_files(env); - else -+ else if (!dbmfp->mfp || !F_ISSET(dbmfp->mfp, MP_NOFSYNC)) - ret = __os_fsync(dbenv, dbmfp->fhp); ++ 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) +@@ -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); - dbenv = dbmp->dbenv; + /* +@@ -801,6 +801,8 @@ __memp_mf_sync(dbmp, mfp, locked) + COMPQUIET(hp, NULL); + env = dbmp->env; + if (F_ISSET(mfp, MP_NOFSYNC)) + return 0; -+ /* - * Expects caller to be holding the region lock: we're using the path - * name and __memp_nameop might try and rename the file. + * We need to be holding the hash lock: we're using the path name + * and __memp_nameop might try and rename the file. diff --git a/dbfsync.diff b/dbfsync.diff index 2326504..a71fb23 100644 --- a/dbfsync.diff +++ b/dbfsync.diff @@ -1,50 +1,24 @@ Support a database-local fsync setting. Needs berkeley db patch. ---- ./lib/backend/db3.c.orig 2009-12-07 14:36:49.000000000 +0000 -+++ ./lib/backend/db3.c 2010-03-25 14:35:39.000000000 +0000 -@@ -62,10 +62,12 @@ static int db_fini(dbiIndex dbi, const c - return rc; - } +--- ./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 }, +#if 0 - static int db3_fsync_disable(int fd) - { - return 0; - } + { "nofsync", 0,POPT_ARG_NONE, &staticcfg.db_no_fsync, 0, + NULL, NULL }, +#endif - #if (DB_VERSION_MAJOR >= 4 && DB_VERSION_MINOR >= 5) - /* -@@ -168,10 +170,12 @@ static int db_init(dbiIndex dbi, const c - xx = cvtdberr(dbi, "dbenv->set_cachesize", xx, _debug); - } - -+#if 0 - if (dbi->dbi_no_fsync) { - xx = db_env_set_func_fsync(db3_fsync_disable); - xx = cvtdberr(dbi, "db_env_set_func_fsync", xx, _debug); - } -+#endif - - if (dbi->dbi_shmkey) { - xx = dbenv->set_shm_key(dbenv, dbi->dbi_shmkey); ---- ./lib/backend/dbconfig.c.orig 2009-12-07 14:36:49.000000000 +0000 -+++ ./lib/backend/dbconfig.c 2010-03-25 14:35:39.000000000 +0000 -@@ -72,6 +72,8 @@ static const struct poptOption rdbOption + /* Per-dbi options */ + { "nommap", 0,POPT_BIT_SET, &staticdbi.dbi_oflags, DB_NOMMAP, +@@ -69,6 +71,8 @@ static const struct poptOption rdbOption NULL, NULL }, - { "fcntl_locking",0,POPT_BIT_SET, &db3dbi.dbi_oflags, DB_FCNTL_LOCKING, + { "lockdbfd", 0,POPT_ARG_NONE, &staticdbi.dbi_lockdbfd, 0, NULL, NULL }, -+ { "nofsync", 0,POPT_BIT_SET, &db3dbi.dbi_oflags, DB_NOFSYNC, ++ { "nofsync", 0,POPT_BIT_SET, &staticdbi.dbi_oflags, DB_NOFSYNC, + NULL, NULL }, - { "btree", 0,POPT_ARG_VAL, &db3dbi.dbi_type, DB_BTREE, - NULL, NULL }, -@@ -101,8 +103,6 @@ static const struct poptOption rdbOption - 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, + POPT_TABLEEND + }; diff --git a/dbprivate.diff b/dbprivate.diff index da64e54..48d3912 100644 --- a/dbprivate.diff +++ b/dbprivate.diff @@ -1,16 +1,14 @@ -Always use DB_PRIVATE. Should probably be configured instead. +Always use DB_PRIVATE. Unfortunately no longer configurable +in the macros file. -Index: lib/backend/db3.c -=================================================================== ---- lib/backend/db3.c.orig -+++ lib/backend/db3.c -@@ -804,6 +804,9 @@ static int db3open(rpmdb rpmdb, rpmTag r - */ - if (dbi->dbi_use_dbenv) { +--- 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); -+ /* 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 ... */ + if (rdb->db_dbenv != NULL) { + rdb->db_opens++; diff --git a/dbrointerruptable.diff b/dbrointerruptable.diff index a9bc1c7..1fb0233 100644 --- a/dbrointerruptable.diff +++ b/dbrointerruptable.diff @@ -1,13 +1,11 @@ -Do not block signals if the database is opened read-only, it jst +Do not block signals if the database is opened read-only, it just annoys the users. [#48026] -Index: lib/rpmdb.c -=================================================================== ---- lib/rpmdb.c.orig -+++ lib/rpmdb.c -@@ -819,10 +819,12 @@ int rpmdbClose(rpmdb db) +--- ./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 * prev, next; - int dbix; int rc = 0; + int dbmode; @@ -15,13 +13,18 @@ Index: lib/rpmdb.c goto exit; + dbmode = db->db_mode; - (void) rpmdbUnlink(db, RPMDBG_M("rpmdbClose")); + (void) rpmdbUnlink(db); if (db->nrefs > 0) -@@ -855,12 +857,14 @@ int rpmdbClose(rpmdb db) - - dbiTagsFree(); +@@ -655,11 +657,13 @@ int rpmdbClose(rpmdb db) + db = _free(db); + 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); @@ -29,31 +32,25 @@ Index: lib/rpmdb.c + (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; } -@@ -956,11 +960,13 @@ static int openDatabase(const char * pre - if (db == NULL) - return 1; - -- (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; +@@ -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); ++ } + /* 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 index 8d6ad2a..2434272 100644 --- a/debugedit-canon-fix.diff +++ b/debugedit-canon-fix.diff @@ -3,14 +3,8 @@ Subject: Fix path canonicalization issues in debugedit This patch fixes multiple problems with path canonicalization in debugedit. This version of debugedit is taken from the dwarftools repository. ---- - tools/debugedit.c | 168 ++++++++++++++++++++++++++---------------------------- - 1 file changed, 82 insertions(+), 86 deletions(-) - -Index: tools/debugedit.c -=================================================================== ---- tools/debugedit.c.orig -+++ tools/debugedit.c +--- ./tools/debugedit.c.orig 2011-05-11 15:31:31.000000000 +0000 ++++ ./tools/debugedit.c 2011-05-11 15:54:49.000000000 +0000 @@ -158,7 +158,7 @@ strptr (DSO *dso, int sec, off_t offset) { if (data->d_buf @@ -20,7 +14,7 @@ Index: tools/debugedit.c return (const char *) data->d_buf + (offset - data->d_off); } } -@@ -488,9 +488,10 @@ static int +@@ -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; @@ -32,15 +26,15 @@ Index: tools/debugedit.c unsigned char opcode_base; uint32_t value, dirt_cnt; size_t comp_dir_len = strlen (comp_dir); -@@ -534,6 +535,7 @@ edit_dwarf2_line (DSO *dso, uint32_t off +@@ -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; - -@@ -545,13 +547,13 @@ edit_dwarf2_line (DSO *dso, uint32_t off + +@@ -553,13 +555,13 @@ edit_dwarf2_line (DSO *dso, uint32_t off ++value; } @@ -56,7 +50,7 @@ Index: tools/debugedit.c ptr = (unsigned char *) strchr ((char *)ptr, 0) + 1; } ptr++; -@@ -664,7 +666,7 @@ edit_dwarf2_line (DSO *dso, uint32_t off +@@ -672,7 +674,7 @@ edit_dwarf2_line (DSO *dso, uint32_t off if (dest_dir) { @@ -65,7 +59,7 @@ Index: tools/debugedit.c size_t base_len = strlen (base_dir); size_t dest_len = strlen (dest_dir); size_t shrank = 0; -@@ -678,11 +680,14 @@ edit_dwarf2_line (DSO *dso, uint32_t off +@@ -686,11 +688,14 @@ edit_dwarf2_line (DSO *dso, uint32_t off ptr = dir; } else @@ -76,72 +70,15 @@ Index: tools/debugedit.c + } while (*srcptr != 0) { -- size_t len = strlen ((char *)srcptr) + 1; + size_t len = strlen ((char *)srcptr) + 1; - const unsigned char *readptr = srcptr; -+ size_t len = strlen ((char *)srcptr); + const char *readptr = srcptr; - if (*srcptr == '/' && has_prefix ((char *)srcptr, base_dir)) - { -@@ -691,42 +696,27 @@ edit_dwarf2_line (DSO *dso, uint32_t off - memcpy (ptr, dest_dir, dest_len); - ptr += dest_len; - readptr += base_len; -- } -+ } - srcptr += len; + char *orig = strdup ((const char *) srcptr); - shrank += srcptr - readptr; - canonicalize_path ((char *)readptr, (char *)ptr); -- len = strlen ((char *)ptr) + 1; -- shrank -= len; -- ptr += len; -+ len = strlen ((char *)ptr); - -- elf_flagdata (debug_sections[DEBUG_STR].elf_data, -- ELF_C_SET, ELF_F_DIRTY); -- } -+#ifdef DEBUG -+ if ((srcptr - readptr) > len) -+ error(0, 0,"canonicalization unexpectedly shrank (%lu): \"%s\"\n", -+ (long unsigned int)(srcptr - readptr) - len, ptr); -+#endif - -- if (shrank > 0) -- { -- if (--shrank == 0) -- error (EXIT_FAILURE, 0, -- "canonicalization unexpectedly shrank by one character"); -- else -- { -- memset (ptr, 'X', shrank); -- ptr += shrank; -- *ptr++ = '\0'; -- } -+ shrank -= len; -+ ptr += len; -+ elf_flagdata (debug_sections[DEBUG_STR].elf_data, -+ ELF_C_SET, ELF_F_DIRTY); -+ ++ptr; -+ ++srcptr; - } - -- if (abs_dir_cnt + abs_file_cnt != 0) -- { -- size_t len = (abs_dir_cnt + abs_file_cnt) * (base_len - dest_len); -- -- if (len == 1) -- error (EXIT_FAILURE, 0, "-b arg has to be either the same length as -d arg, or more than 1 char shorter"); -- memset (ptr, 'X', len - 1); -- ptr += len - 1; -- *ptr++ = '\0'; -- } - *ptr++ = '\0'; - ++srcptr; - -@@ -746,21 +736,26 @@ edit_dwarf2_line (DSO *dso, uint32_t off - elf_flagdata (debug_sections[DEBUG_STR].elf_data, - ELF_C_SET, ELF_F_DIRTY); +@@ -756,21 +761,26 @@ edit_dwarf2_line (DSO *dso, uint32_t off + } + dirty_section (DEBUG_STR); } - else if (ptr != srcptr) + else if ((char *)ptr != srcptr) diff --git a/debugedit-comp-dir.diff b/debugedit-comp-dir.diff index 5dd5ae9..288ed10 100644 --- a/debugedit-comp-dir.diff +++ b/debugedit-comp-dir.diff @@ -1,14 +1,8 @@ Include compilation directory in source file list if used. ---- - tools/debugedit.c | 28 +++++++++++++++++++++++++++- - 1 file changed, 27 insertions(+), 1 deletion(-) - -Index: tools/debugedit.c -=================================================================== ---- tools/debugedit.c.orig -+++ tools/debugedit.c -@@ -495,6 +495,7 @@ edit_dwarf2_line (DSO *dso, uint32_t off +--- ./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; @@ -16,7 +10,7 @@ Index: tools/debugedit.c if (phase != 0) return 0; -@@ -603,6 +604,7 @@ edit_dwarf2_line (DSO *dso, uint32_t off +@@ -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); @@ -24,12 +18,10 @@ Index: tools/debugedit.c } canonicalize_path (s, s); if (list_file_fd != -1) -@@ -635,7 +637,31 @@ edit_dwarf2_line (DSO *dso, uint32_t off - read_uleb128 (ptr); +@@ -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))) + { diff --git a/debugedit.diff b/debugedit.diff index cb4c499..ad9ec99 100644 --- a/debugedit.diff +++ b/debugedit.diff @@ -1,9 +1,25 @@ Make debugedit build without dwarf.h -Index: tools/debugedit.c -=================================================================== ---- tools/debugedit.c.orig -+++ tools/debugedit.c +--- ./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 @@ #include @@ -43,23 +59,3 @@ Index: tools/debugedit.c #include #include -Index: Makefile.am -=================================================================== ---- Makefile.am.orig -+++ Makefile.am -@@ -103,7 +103,6 @@ rpm2cpio_LDADD += @WITH_LIBELF_LIB@ @WIT - - - if LIBELF --if LIBDWARF - rpmconfig_SCRIPTS += scripts/find-debuginfo.sh - - rpmlibexec_PROGRAMS += debugedit -@@ -111,7 +110,6 @@ debugedit_SOURCES = tools/debugedit.c to - debugedit_LDADD = rpmio/librpmio.la - debugedit_LDADD += @WITH_LIBELF_LIB@ @WITH_POPT_LIB@ - endif --endif - - rpmlibexec_PROGRAMS += javadeps - javadeps_SOURCES = tools/javadeps.c diff --git a/debuginfo-mono.patch b/debuginfo-mono.patch index 32e1bfd..d877a73 100644 --- a/debuginfo-mono.patch +++ b/debuginfo-mono.patch @@ -1,8 +1,6 @@ -Index: scripts/find-debuginfo.sh -=================================================================== ---- scripts/find-debuginfo.sh.orig -+++ scripts/find-debuginfo.sh -@@ -210,6 +210,17 @@ while read nlinks inum f; do +--- ./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 diff --git a/debuglink.diff b/debuglink.diff index 39892b5..4a97043 100644 --- a/debuglink.diff +++ b/debuglink.diff @@ -1,8 +1,6 @@ -Index: scripts/find-debuginfo.sh -=================================================================== ---- scripts/find-debuginfo.sh.orig 2009-07-27 12:06:41.000000000 +0200 -+++ scripts/find-debuginfo.sh 2009-07-27 12:08:05.000000000 +0200 -@@ -185,7 +185,8 @@ make_id_link() +--- ./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}") diff --git a/debugsource-package.diff b/debugsource-package.diff index 17e4599..11eae89 100644 --- a/debugsource-package.diff +++ b/debugsource-package.diff @@ -3,16 +3,9 @@ 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 | 12 ++++++++++++ - scripts/find-debuginfo.sh | 12 +++++++++--- - 2 files changed, 21 insertions(+), 3 deletions(-) - -Index: macros.in -=================================================================== ---- macros.in.orig -+++ macros.in -@@ -187,6 +187,18 @@ Debug information is useful when develop +--- ./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)\ @@ -31,11 +24,9 @@ Index: macros.in %{nil} %_defaultdocdir %{_datadir}/doc/packages -Index: scripts/find-debuginfo.sh -=================================================================== ---- scripts/find-debuginfo.sh.orig -+++ scripts/find-debuginfo.sh -@@ -186,8 +186,8 @@ set -o pipefail +--- ./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 @@ -46,7 +37,7 @@ Index: scripts/find-debuginfo.sh 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 -@@ -297,10 +297,16 @@ if [ -d "${RPM_BUILD_ROOT}/usr/lib" -o - +@@ -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 diff --git a/debugsubpkg.diff b/debugsubpkg.diff index e6002df..2f9157e 100644 --- a/debugsubpkg.diff +++ b/debugsubpkg.diff @@ -1,6 +1,8 @@ ---- ./build/files.c.orig 2010-03-25 15:18:05.000000000 +0000 -+++ ./build/files.c 2010-03-25 15:21:26.000000000 +0000 -@@ -17,6 +17,10 @@ +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 @@ -10,11 +12,12 @@ + #include "rpmio/rpmio_internal.h" /* XXX rpmioSlurp */ #include "rpmio/base64.h" - #include "rpmio/fts.h" -@@ -2230,12 +2234,136 @@ exit: + #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. */ @@ -136,11 +139,111 @@ + 0 +}; + ++static void addDebuginfoPackage(rpmSpec spec, Package pkg, char *buildroot) ++{ ++ const char *a; + - int processBinaryFiles(rpmSpec spec, int installSpecialDoc, int test) ++ 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; - int rc = RPMRC_OK; + rpmRC rc = RPMRC_OK; + char *buildroot; check_fileList = newStringBuf(); @@ -148,122 +251,24 @@ genSourceRpmName(spec); for (pkg = spec->packages; pkg != NULL; pkg = pkg->next) { -@@ -2250,8 +2378,110 @@ int processBinaryFiles(rpmSpec spec, int +@@ -2127,8 +2355,12 @@ rpmRC processBinaryFiles(rpmSpec spec, r rpmlog(RPMLOG_NOTICE, _("Processing files: %s\n"), nvr); free(nvr); -- if ((rc = processPackageFiles(spec, pkg, installSpecialDoc, test)) != RPMRC_OK || +- if ((rc = processPackageFiles(spec, pkgFlags, pkg, installSpecialDoc, test)) != RPMRC_OK || - (rc = rpmfcGenerateDepends(spec, pkg)) != RPMRC_OK) -+ if ((rc = processPackageFiles(spec, pkg, installSpecialDoc, test)) != RPMRC_OK) ++ if ((rc = processPackageFiles(spec, pkgFlags, pkg, installSpecialDoc, test)) != RPMRC_OK) + goto exit; -+ -+ /* BEGIN DEBUGPKG */ +#if HAVE_GELF_H && HAVE_LIBELF -+ 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; -+ StringBuf 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) -+ { -+ files = newStringBuf(); -+ appendStringBuf(files, "%defattr(-,root,root)\n"); -+ appendStringBuf(files, "%dir /usr/lib/debug\n"); -+ } -+ /* Add the files main debug-info file. */ -+ snprintf (tmp, 1024, "/usr/lib/debug/%s.debug\n", base); -+ appendStringBuf(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) -+ appendStringBuf(files, "%dir /usr/lib/debug/.build-id\n"); -+ -+ /* 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]); -+ appendStringBuf(files, tmp); -+ appendStringBuf(files, "\n"); -+ appendStringBuf(files, tmp); -+ appendStringBuf(files, ".debug\n"); -+ -+ 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; -+ } -+ } ++ addDebuginfoPackage(spec, pkg, buildroot); +#endif -+ /* END DEBUGPKG */ -+ + if ((rc = rpmfcGenerateDepends(spec, pkg)) != RPMRC_OK) goto exit; a = headerGetString(pkg->header, RPMTAG_ARCH); ---- ./macros.in.orig 2010-03-25 15:21:20.000000000 +0000 -+++ ./macros.in 2010-03-25 15:21:26.000000000 +0000 -@@ -176,24 +176,10 @@ +--- ./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\ @@ -288,9 +293,9 @@ %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 2010-03-25 15:19:04.000000000 +0000 -+++ ./scripts/find-debuginfo.sh 2010-03-25 15:21:26.000000000 +0000 -@@ -275,19 +275,11 @@ while read nlinks inum f; do +--- ./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 diff --git a/defclean.diff b/defclean.diff deleted file mode 100644 index 59ab7aa..0000000 --- a/defclean.diff +++ /dev/null @@ -1,16 +0,0 @@ ---- ./build/parseSpec.c.orig 2010-03-25 15:19:16.000000000 +0000 -+++ ./build/parseSpec.c 2010-03-25 15:45:25.000000000 +0000 -@@ -562,6 +562,13 @@ int parseSpec(rpmts ts, const char *spec - free(body); - } - -+ if (spec->clean == NULL) { -+ char *body = rpmExpand("%{?buildroot: %{__rm} -rf %{buildroot}}", NULL); -+ spec->clean = newStringBuf(); -+ appendLineStringBuf(spec->clean, body); -+ free(body); -+ } -+ - /* Check for description in each package and add arch and os */ - { - char *platform = rpmExpand("%{_target_platform}", NULL); diff --git a/diskspace.diff b/diskspace.diff deleted file mode 100644 index 1744881..0000000 --- a/diskspace.diff +++ /dev/null @@ -1,24 +0,0 @@ -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/transaction.c.orig 2010-03-25 14:37:50.000000000 +0000 -+++ ./lib/transaction.c 2010-03-25 14:38:27.000000000 +0000 -@@ -212,7 +212,7 @@ static void rpmtsCheckDSIProblems(const - rpmpsAppend(ps, RPMPROB_DISKSPACE, - rpmteNEVRA(te), rpmteKey(te), - ts->filesystems[i], NULL, NULL, -- (adj_fs_blocks(dsi->bneeded) - dsi->bavail) * dsi->bsize); -+ (adj_fs_blocks(dsi->bneeded)) * dsi->bsize); - dsi->obneeded = dsi->bneeded; - } - } -@@ -222,7 +222,7 @@ static void rpmtsCheckDSIProblems(const - rpmpsAppend(ps, RPMPROB_DISKNODES, - rpmteNEVRA(te), rpmteKey(te), - ts->filesystems[i], NULL, NULL, -- (adj_fs_blocks(dsi->ineeded) - dsi->iavail)); -+ (adj_fs_blocks(dsi->ineeded))); - dsi->oineeded = dsi->ineeded; - } - } diff --git a/disttag-macro.diff b/disttag-macro.diff index c9dd0f2..795e52c 100644 --- a/disttag-macro.diff +++ b/disttag-macro.diff @@ -1,6 +1,8 @@ ---- ./build/parsePreamble.c.orig 2010-03-25 14:56:24.000000000 +0000 -+++ ./build/parsePreamble.c 2010-03-25 15:20:35.000000000 +0000 -@@ -312,6 +312,7 @@ static struct optionalTag { +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}" }, @@ -8,8 +10,8 @@ { RPMTAG_BUGURL, "%{bugurl}" }, { -1, NULL } }; ---- ./macros.in.orig 2010-03-25 15:18:50.000000000 +0000 -+++ ./macros.in 2010-03-25 15:19:25.000000000 +0000 +--- ./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 diff --git a/emptyprep.diff b/emptyprep.diff new file mode 100644 index 0000000..1b53278 --- /dev/null +++ b/emptyprep.diff @@ -0,0 +1,13 @@ +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/extcond.diff b/extcond.diff index 20e2eed..32d8e81 100644 --- a/extcond.diff +++ b/extcond.diff @@ -4,11 +4,9 @@ assumed to be true. This mechanism is used by the weakdeps patch to filter the "RPMSENSE_STRONG" flag. -Index: lib/headerfmt.c -=================================================================== ---- lib/headerfmt.c.orig -+++ lib/headerfmt.c -@@ -582,8 +582,12 @@ static int parseExpression(headerSprintf +--- ./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 *endPtr = chptr; @@ -21,7 +19,7 @@ Index: lib/headerfmt.c (void) findTag(hsa, token, str); return 0; -@@ -675,6 +679,7 @@ static char * singleSprintf(headerSprint +@@ -657,6 +661,7 @@ static char * singleSprintf(headerSprint int i, j, found; rpm_count_t count, numElements; sprintfToken spft; @@ -29,7 +27,7 @@ Index: lib/headerfmt.c int condNumFormats; size_t need; -@@ -705,6 +710,18 @@ static char * singleSprintf(headerSprint +@@ -687,6 +692,18 @@ static char * singleSprintf(headerSprint headerIsEntry(hsa->h, token->u.cond.tag.tag)) { spft = token->u.cond.ifFormat; condNumFormats = token->u.cond.numIfTokens; @@ -48,7 +46,7 @@ Index: lib/headerfmt.c } else { spft = token->u.cond.elseFormat; condNumFormats = token->u.cond.numElseTokens; -@@ -728,10 +745,13 @@ static char * singleSprintf(headerSprint +@@ -710,10 +727,13 @@ static char * singleSprintf(headerSprint for (i = 0; i < token->u.array.numTokens; i++, spft++) { rpmtd td = NULL; diff --git a/fileattrs.diff b/fileattrs.diff new file mode 100644 index 0000000..fc29494 --- /dev/null +++ b/fileattrs.diff @@ -0,0 +1,58 @@ +Add needed fileattrs for compatibility. In the future they will +be moved into the corresponding packages. + +--- ./fileattrs/Makefile.am.orig 2011-05-13 14:34:47.000000000 +0000 ++++ ./fileattrs/Makefile.am 2011-05-13 14:35:28.000000000 +0000 +@@ -6,6 +6,7 @@ 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 ++ pkgconfig.attr python.attr ocaml.attr script.attr mono.attr \ ++ debuginfo.attr firmware.attr gstreamer.attr ksyms.attr sysvinit.attr + + EXTRA_DIST = $(fattrs_DATA) +--- ./fileattrs/debuginfo.attr.orig 2011-05-13 14:16:03.000000000 +0000 ++++ ./fileattrs/debuginfo.attr 2011-05-13 14:17:13.000000000 +0000 +@@ -0,0 +1,2 @@ ++%__debuginfo_provides %{_rpmconfigdir}/debuginfo.prov ++%__debuginfo_path ^/usr/lib/debug/ +--- ./fileattrs/desktop.attr.orig 2011-05-13 13:59:14.000000000 +0000 ++++ ./fileattrs/desktop.attr 2011-05-13 14:07:03.000000000 +0000 +@@ -1,2 +1,2 @@ +-%__desktop_provides %{_rpmconfigdir}/desktop-file.prov +-%__desktop_path ^%{_datadir}/applications/.*\\.desktop$ ++%__desktop_provides %{_rpmconfigdir}/mimetypes.prov ++%__desktop_path .*\\.desktop$ +--- ./fileattrs/firmware.attr.orig 2011-05-13 14:13:39.000000000 +0000 ++++ ./fileattrs/firmware.attr 2011-05-13 14:14:37.000000000 +0000 +@@ -0,0 +1,2 @@ ++%__firmware_provides %{_rpmconfigdir}/firmware.prov ++%__firmware_path /lib/firmware/ +--- ./fileattrs/gstreamer.attr.orig 2011-05-13 14:28:51.000000000 +0000 ++++ ./fileattrs/gstreamer.attr 2011-05-13 14:31:59.000000000 +0000 +@@ -0,0 +1,4 @@ ++%__gstreamer_provides %{_rpmconfigdir}/gstreamer-provides ++%__gstreamer_path libgst ++%__gstreamer_magic ELF.*shared object ++%__gstreamer_flags magic_and_path +--- ./fileattrs/ksyms.attr.orig 2011-05-13 14:20:57.000000000 +0000 ++++ ./fileattrs/ksyms.attr 2011-05-13 14:27:04.000000000 +0000 +@@ -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].*)$ +--- ./fileattrs/perl.attr.orig 2010-12-03 12:11:57.000000000 +0000 ++++ ./fileattrs/perl.attr 2011-05-13 14:09:31.000000000 +0000 +@@ -1,3 +1,4 @@ +-%__perl_requires %{_rpmconfigdir}/perl.req ++# disabled for now ++#%__perl_requires %{_rpmconfigdir}/perl.req + %__perl_magic ^.*perl .*$ + %__perl_flags exeonly +--- ./fileattrs/sysvinit.attr.orig 2011-05-13 14:32:30.000000000 +0000 ++++ ./fileattrs/sysvinit.attr 2011-05-13 14:33:56.000000000 +0000 +@@ -0,0 +1,2 @@ ++%__sysvinit_provides %{_rpmconfigdir}/sysvinitdeps.sh --provides ++%__sysvinit_path ^/etc/init\.d/ diff --git a/files.diff b/files.diff index a332314..32c6fa2 100644 --- a/files.diff +++ b/files.diff @@ -1,13 +1,17 @@ -Index: build/files.c -=================================================================== ---- build/files.c.orig -+++ build/files.c -@@ -2211,6 +2211,8 @@ static int checkFiles(StringBuf fileList - _("Installed (but unpackaged) file(s) found:\n%s"), t); - } - } -+ else -+ checkFiles(check_fileList); +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: - sb_stdout = freeStringBuf(sb_stdout); + ++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 index 20098fb..9cd08c7 100644 --- a/finddebuginfo-absolute-links.diff +++ b/finddebuginfo-absolute-links.diff @@ -6,15 +6,10 @@ 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 | 16 +++++++++++++--- - 1 file changed, 13 insertions(+), 3 deletions(-) -Index: b/scripts/find-debuginfo.sh -=================================================================== ---- scripts/find-debuginfo.sh -+++ scripts/find-debuginfo.sh -@@ -123,7 +123,17 @@ debug_link() +--- ./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" @@ -33,7 +28,7 @@ Index: b/scripts/find-debuginfo.sh } # Compare two binaries but ignore the .note.gnu.build-id section -@@ -157,8 +167,8 @@ make_id_link() +@@ -158,8 +168,8 @@ make_id_link() local other=$(readlink -m "$root_idfile") other=${other#$RPM_BUILD_ROOT} diff --git a/finddebuginfo.diff b/finddebuginfo.diff index 9cfe956..d382d24 100644 --- a/finddebuginfo.diff +++ b/finddebuginfo.diff @@ -1,12 +1,6 @@ ---- - scripts/find-debuginfo.sh | 69 +++++++++++++++++++++++++++++++++++----------- - 1 file changed, 53 insertions(+), 16 deletions(-) - -Index: scripts/find-debuginfo.sh -=================================================================== ---- scripts/find-debuginfo.sh.orig -+++ scripts/find-debuginfo.sh -@@ -126,6 +126,20 @@ debug_link() +--- ./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" } @@ -27,7 +21,7 @@ Index: scripts/find-debuginfo.sh # Make a build-id symlink for id $1 with suffix $3 to file $2. make_id_link() { -@@ -144,7 +158,7 @@ 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" || @@ -36,7 +30,7 @@ Index: scripts/find-debuginfo.sh # Two copies. Maybe one has to be setuid or something. echo >&2 "*** WARNING: identical binaries are copied, not linked:" echo >&2 " $file" -@@ -173,12 +187,18 @@ strict_error=ERROR +@@ -174,12 +188,18 @@ strict_error=ERROR $strict || strict_error=WARNING # Strip ELF binaries @@ -60,7 +54,7 @@ Index: scripts/find-debuginfo.sh get_debugfn "$f" [ -f "${debugfn}" ] && continue -@@ -199,8 +219,11 @@ while read nlinks inum f; do +@@ -200,8 +220,11 @@ while read nlinks inum f; do fi echo "extracting debug info from $f" @@ -74,7 +68,7 @@ Index: scripts/find-debuginfo.sh if [ -z "$id" ]; then echo >&2 "*** ${strict_error}: No build ID note found in $f" $strict && exit 2 -@@ -215,13 +238,25 @@ while read nlinks inum f; do +@@ -218,13 +241,25 @@ while read nlinks inum f; do esac mkdir -p "${debugdn}" @@ -107,7 +101,7 @@ Index: scripts/find-debuginfo.sh if [ -n "$id" ]; then make_id_link "$id" "$dn/$(basename $f)" -@@ -250,12 +285,14 @@ if [ -s "$SOURCEFILE" ]; then +@@ -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 diff --git a/findksyms.diff b/findksyms.diff index 5b14c52..786cc91 100644 --- a/findksyms.diff +++ b/findksyms.diff @@ -1,16 +1,16 @@ SUSE specific kernel provides/requires scripts ---- ./scripts/Makefile.am.orig 2010-03-25 16:39:30.000000000 +0000 -+++ ./scripts/Makefile.am 2010-03-25 16:39:56.000000000 +0000 -@@ -18,6 +18,7 @@ EXTRA_DIST = \ - rpm.daily rpm.log rpm.xinetd rpm2cpio.sh \ +--- ./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 \ -@@ -34,6 +35,7 @@ rpmconfig_SCRIPTS = \ +@@ -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 \ @@ -18,8 +18,8 @@ SUSE specific kernel provides/requires scripts mono-find-requires mono-find-provides \ pkgconfigdeps.sh libtooldeps.sh \ ocaml-find-requires.sh ocaml-find-provides.sh \ ---- ./scripts/find-provides.ksyms.orig 2010-03-25 16:39:56.000000000 +0000 -+++ ./scripts/find-provides.ksyms 2010-03-25 16:39:56.000000000 +0000 +--- ./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 @@ +#! /bin/sh + @@ -62,8 +62,8 @@ SUSE specific kernel provides/requires scripts + | sed -r -ne "s/^0*([0-9a-f]+) A __crc_(.+)/ksym($flavor:\\2) = \\1/p" +done \ +| sort -u ---- ./scripts/find-requires.ksyms.orig 2010-03-25 16:39:56.000000000 +0000 -+++ ./scripts/find-requires.ksyms 2010-03-25 16:39:56.000000000 +0000 +--- ./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 @@ +#! /bin/bash + diff --git a/findlang.diff b/findlang.diff index 3be64ba..51b9ab3 100644 --- a/findlang.diff +++ b/findlang.diff @@ -1,7 +1,5 @@ -Index: scripts/find-lang.sh -=================================================================== ---- scripts/find-lang.sh.orig -+++ scripts/find-lang.sh +--- ./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 @@ -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 @@ -42,12 +40,12 @@ Index: scripts/find-lang.sh --with-qt ) QT= shift -@@ -97,33 +105,49 @@ while test $# -gt 0 ; do +@@ -97,33 +105,40 @@ while test $# -gt 0 ; do esac done +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.$$ @@ -55,21 +53,14 @@ Index: scripts/find-lang.sh + find $TOP_DIR -type f -o -type l|sed ' s:'"$TOP_DIR"':: - '"$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: +-'"$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: s:^\([^%].*\):: s:%lang(C) :: -/^$/d' > $MO_NAME +/^$/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"':: @@ -99,7 +90,7 @@ Index: scripts/find-lang.sh find $TOP_DIR -type f|sed ' s:'"$TOP_DIR"':: -@@ -131,7 +155,7 @@ 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) :: @@ -108,7 +99,7 @@ Index: scripts/find-lang.sh KDE3_HTML=`kde-config --expandvars --install html 2>/dev/null` if [ x"$KDE3_HTML" != x -a -d "$TOP_DIR$KDE3_HTML" ]; then -@@ -143,7 +167,7 @@ s:'"$TOP_DIR"':: +@@ -143,7 +158,7 @@ s:'"$TOP_DIR"':: '"$ALL_NAME$KDE"'s:\(.*/HTML/\)\([^/_]\+\)\(.*/[a-zA-Z0-9.\_\-]\+$\):%lang(\2) \1\2\3: s:^\([^%].*\):: s:%lang(C) :: @@ -117,7 +108,7 @@ Index: scripts/find-lang.sh fi KDE4_HTML=`kde4-config --expandvars --install html 2>/dev/null` -@@ -156,7 +180,7 @@ s:'"$TOP_DIR"':: +@@ -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) :: @@ -126,7 +117,7 @@ Index: scripts/find-lang.sh fi find $TOP_DIR -type f -o -type l|sed ' -@@ -168,7 +192,7 @@ s:'"$TOP_DIR"':: +@@ -168,7 +183,7 @@ s:'"$TOP_DIR"':: '"$ALL_NAME$QT"'s:^\([^%].*/[^/]\+_\([a-zA-Z]\{2\}\)\.qm$\):%lang(\2) \1: s:^[^%].*:: s:%lang(C) :: @@ -135,7 +126,7 @@ Index: scripts/find-lang.sh find $TOP_DIR -type d|sed ' s:'"$TOP_DIR"':: -@@ -176,17 +200,22 @@ 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) :: diff --git a/findsupplements.diff b/findsupplements.diff new file mode 100644 index 0000000..83476d0 --- /dev/null +++ b/findsupplements.diff @@ -0,0 +1,75 @@ +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/fixsbits.diff b/fixsbits.diff deleted file mode 100644 index e54690e..0000000 --- a/fixsbits.diff +++ /dev/null @@ -1,47 +0,0 @@ ---- ./lib/fsm.c.orig 2010-06-04 13:47:57.000000000 +0000 -+++ ./lib/fsm.c 2010-06-04 13:48:07.000000000 +0000 -@@ -1323,6 +1323,21 @@ static const char * rpmteTypeString(rpmt - } - } - -+static void removeSBITS(const char *path) -+{ -+ struct stat stb; -+ if (lstat(path, &stb) == 0 && S_ISREG(stb.st_mode)) { -+ if ((stb.st_mode & 06000) != 0) { -+ (void) chmod(path, stb.st_mode & 0777); -+ } -+#if WITH_CAP -+ if (stb.st_mode & (S_IXUSR|S_IXGRP|S_IXOTH)) { -+ (void) cap_set_file(path, NULL); -+ } -+#endif -+ } -+} -+ - #define IS_DEV_LOG(_x) \ - ((_x) != NULL && strlen(_x) >= (sizeof("/dev/log")-1) && \ - rstreqn((_x), "/dev/log", sizeof("/dev/log")-1) && \ -@@ -2027,11 +2042,8 @@ if (!(fsm->mapFlags & CPIO_ALL_HARDLINKS - 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); -- } -+ if (fsm->mapFlags & CPIO_SBIT_CHECK) -+ removeSBITS(fsm->path); - rc = unlink(fsm->path); - if (_fsm_debug && (stage & FSM_SYSCALL)) - rpmlog(RPMLOG_DEBUG, " %8s (%s) %s\n", cur, -@@ -2040,6 +2052,8 @@ if (!(fsm->mapFlags & CPIO_ALL_HARDLINKS - rc = (errno == ENOENT ? CPIOERR_ENOENT : CPIOERR_UNLINK_FAILED); - break; - case FSM_RENAME: -+ if (fsm->mapFlags & CPIO_SBIT_CHECK) -+ removeSBITS(fsm->path); - rc = rename(fsm->opath, fsm->path); - #if defined(ETXTBSY) && defined(__HPUX__) - if (rc && errno == ETXTBSY) { diff --git a/fontprovides.diff b/fontprovides.diff index 70d7537..cc60af8 100644 --- a/fontprovides.diff +++ b/fontprovides.diff @@ -1,5 +1,5 @@ ---- ./autodeps/linux.prov.orig 2010-04-08 14:52:42.000000000 +0000 -+++ ./autodeps/linux.prov 2010-04-08 15:04:37.000000000 +0000 +--- ./autodeps/linux.prov.orig 2011-05-11 16:39:09.000000000 +0000 ++++ ./autodeps/linux.prov 2011-05-11 16:40:49.000000000 +0000 @@ -16,6 +16,8 @@ tcllist= monolist=($(printf "%s\n" "${filelist[@]}" | egrep "\\.(exe|dll)\$")) mimetypelist=($(printf "%s\n" "${filelist[@]}" | egrep "\\.(desktop)\$")) @@ -26,9 +26,9 @@ # --- Kernel module exported symbols [ -x /usr/lib/rpm/find-provides.ksyms ] && printf "%s\n" "${filelist[@]}" | /usr/lib/rpm/find-provides.ksyms "$@" ---- ./autodeps/linux.req.orig 2010-04-08 15:01:18.000000000 +0000 -+++ ./autodeps/linux.req 2010-04-08 15:04:20.000000000 +0000 -@@ -35,6 +35,7 @@ perllist=() +--- ./autodeps/linux.req.orig 2011-05-11 16:39:09.000000000 +0000 ++++ ./autodeps/linux.req 2011-05-11 16:40:49.000000000 +0000 +@@ -34,6 +34,7 @@ perllist=() pythonlist=($(printf "%s\n" "${filelist[@]}" | egrep '/usr/lib[^/]*/python.\..')) tcllist=() monolist=($(printf "%s\n" "${filelist[@]}" | egrep "\\.(exe|dll)(\\.config)?\$")) @@ -36,7 +36,7 @@ # # --- Alpha does not mark 64bit dependencies -@@ -144,6 +145,11 @@ if [ -x $MONO_PREFIX/bin/mono -a -n "$mo +@@ -143,6 +144,11 @@ if [ -x $MONO_PREFIX/bin/mono -a -n "$mo fi # @@ -48,17 +48,3 @@ # --- Kernel module imported symbols [ -x ${0%/*}/find-requires.ksyms ] && printf "%s\n" "${filelist[@]}" | ${0%/*}/find-requires.ksyms "$@" ---- ./scripts/fontconfig.prov.orig 2010-04-08 14:57:21.000000000 +0000 -+++ ./scripts/fontconfig.prov 2010-04-08 14:57:42.000000000 +0000 -@@ -12,7 +12,10 @@ - - fcquery=/usr/bin/fc-query - --[ -x $fcquery ] || exit 0 -+[ -x $fcquery ] || { -+ cat > /dev/null -+ exit 0 -+} - - # filter out anything outside main fontconfig path - grep /usr/share/fonts/ | diff --git a/headeradddb.diff b/headeradddb.diff new file mode 100644 index 0000000..af197df --- /dev/null +++ b/headeradddb.diff @@ -0,0 +1,55 @@ +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/initscriptsprov.diff b/initscriptsprov.diff index 4a95d90..8a5c2f0 100644 --- a/initscriptsprov.diff +++ b/initscriptsprov.diff @@ -1,7 +1,5 @@ -Index: rpm-4.8.0/autodeps/linux.prov -=================================================================== ---- rpm-4.8.0.orig/autodeps/linux.prov 2010-12-08 15:16:12.984842683 +0100 -+++ rpm-4.8.0/autodeps/linux.prov 2010-12-08 15:16:52.530842661 +0100 +--- ./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 @@ -12,14 +10,34 @@ Index: rpm-4.8.0/autodeps/linux.prov + printf "%s\n" "${filelist[@]}" | /usr/lib/rpm/sysvinitdeps.sh -P | sort -u + exit 0 -Index: rpm-4.8.0/scripts/sysvinitdeps.sh -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ rpm-4.8.0/scripts/sysvinitdeps.sh 2010-12-08 15:17:11.183843303 +0100 -@@ -0,0 +1,13 @@ +--- ./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 + -+# -P blindly assumed ++[ "$1" = '-P' -o "$1" = '--provides' ] || { ++ cat > /dev/null ++ exit 0 ++} ++ +while read file; do + case $file in + */etc/init.d/*) @@ -30,15 +48,3 @@ Index: rpm-4.8.0/scripts/sysvinitdeps.sh + ;; + esac +done -Index: rpm-4.8.0/scripts/Makefile.am -=================================================================== ---- rpm-4.8.0.orig/scripts/Makefile.am 2010-12-08 15:16:12.985844013 +0100 -+++ rpm-4.8.0/scripts/Makefile.am 2010-12-08 15:16:52.531842720 +0100 -@@ -40,6 +40,7 @@ rpmconfig_SCRIPTS = \ - pkgconfigdeps.sh libtooldeps.sh \ - ocaml-find-requires.sh ocaml-find-provides.sh \ - fontconfig.prov desktop-file.prov \ -+ sysvinitdeps.sh \ - rpmdb_loadcvt rpmdiff rpm2cpio.sh tcl.req tgpg - - rpmconfig_DATA = \ diff --git a/langnoc.diff b/langnoc.diff index e069a54..ab99287 100644 --- a/langnoc.diff +++ b/langnoc.diff @@ -1,6 +1,6 @@ ---- ./macros.in.orig 2010-10-28 13:57:37.000000000 +0000 -+++ ./macros.in 2010-10-29 12:35:39.000000000 +0000 -@@ -1381,6 +1381,7 @@ EOF +--- ./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} @@ -8,8 +8,8 @@ # Commands + opts to use for retrieving remote files # Proxy opts can be set through --httpproxy/--httpport popt aliases, ---- ./scripts/find-lang.sh.orig 2010-10-28 13:44:49.000000000 +0000 -+++ ./scripts/find-lang.sh 2010-10-29 09:39:22.000000000 +0000 +--- ./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=# @@ -34,17 +34,15 @@ * ) MO_NAME=${1} shift -@@ -117,6 +127,8 @@ s:'"$TOP_DIR"':: - '"$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: +@@ -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 -@@ -131,22 +143,25 @@ s:%lang(C) :: - find $TOP_DIR -type d|sed ' s:'"$TOP_DIR"':: -'"$NO_ALL_NAME$GNOME"'s:\(.*/gnome/help/'"$NAME"'$\):%dir %doc \1: @@ -73,7 +71,7 @@ /^$/d' >> $MO_NAME_NEW find $TOP_DIR -type f|sed ' -@@ -154,6 +169,8 @@ s:'"$TOP_DIR"':: +@@ -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:^[^%].*:: @@ -82,7 +80,7 @@ s:%lang(C) :: /^$/d' >> $MO_NAME_NEW -@@ -166,6 +183,8 @@ s:'"$TOP_DIR"':: +@@ -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:^\([^%].*\):: @@ -91,7 +89,7 @@ s:%lang(C) :: /^$/d' >> $MO_NAME_NEW fi -@@ -179,6 +198,8 @@ s:'"$TOP_DIR"':: +@@ -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:^\([^%].*\):: @@ -100,7 +98,7 @@ s:%lang(C) :: /^$/d' >> $MO_NAME_NEW fi -@@ -191,6 +212,8 @@ s:'"$TOP_DIR"':: +@@ -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:^[^%].*:: @@ -109,7 +107,7 @@ s:%lang(C) :: /^$/d' >> $MO_NAME_NEW -@@ -199,6 +222,8 @@ s:'"$TOP_DIR"':: +@@ -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:^\([^%].*\):: @@ -118,7 +116,7 @@ s:%lang(C) :: /^$/d' >> $MO_NAME_NEW -@@ -206,6 +231,8 @@ find $TOP_DIR -type f -o -type l|sed ' +@@ -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:^\([^%].*\):: diff --git a/lazystatfs.diff b/lazystatfs.diff index 71389f3..5869a23 100644 --- a/lazystatfs.diff +++ b/lazystatfs.diff @@ -1,6 +1,7 @@ ---- ./configure.ac.orig 2010-03-25 15:16:21.000000000 +0000 -+++ ./configure.ac 2010-03-25 15:27:47.000000000 +0000 -@@ -510,25 +510,25 @@ dnl +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 @@ -33,242 +34,17 @@ found_struct_statfs=yes],[]) fi ---- ./lib/transaction.c.orig 2010-03-25 15:14:38.000000000 +0000 -+++ ./lib/transaction.c 2010-03-25 15:44:25.000000000 +0000 -@@ -45,6 +45,7 @@ - #include "debug.h" - - struct diskspaceInfo_s { -+ const char *mntPoint; /*!< File system mount point */ - dev_t dev; /*!< File system device number. */ - int64_t bneeded; /*!< No. of blocks needed. */ - int64_t ineeded; /*!< No. of inodes needed. */ -@@ -61,83 +62,78 @@ struct diskspaceInfo_s { - - static int rpmtsInitDSI(const rpmts ts) - { -- rpmDiskSpaceInfo dsi; -- struct stat sb; -- int rc; -- int i; -- - if (rpmtsFilterFlags(ts) & RPMPROB_FILTER_DISKSPACE) - return 0; - -- rpmlog(RPMLOG_DEBUG, "mounted filesystems:\n"); -- rpmlog(RPMLOG_DEBUG, -- " i dev bsize bavail iavail mount point\n"); -- -- rc = rpmGetFilesystemList(&ts->filesystems, &ts->filesystemCount); -- if (rc || ts->filesystems == NULL || ts->filesystemCount <= 0) -- return rc; -- -- /* Get available space on mounted file systems. */ -- - ts->dsi = _free(ts->dsi); -- ts->dsi = xcalloc((ts->filesystemCount + 1), sizeof(*ts->dsi)); -+ ts->dsi = xcalloc(1, sizeof(*ts->dsi)); -+ return 0; -+} - -- dsi = ts->dsi; -+static rpmDiskSpaceInfo rpmtsCreateDSI(const rpmts ts, dev_t dev, const char *dirName, int count) -+{ -+ rpmDiskSpaceInfo dsi; -+ struct stat sb; -+ int rc; - -- if (dsi != NULL) -- for (i = 0; (i < ts->filesystemCount) && dsi; i++, dsi++) { - #if STATFS_IN_SYS_STATVFS -- struct statvfs sfb; -- memset(&sfb, 0, sizeof(sfb)); -- rc = statvfs(ts->filesystems[i], &sfb); -+ struct statvfs sfb; -+ memset(&sfb, 0, sizeof(sfb)); -+ rc = statvfs(ts->filesystems[i], &sfb); - #else -- struct statfs sfb; -- memset(&sfb, 0, sizeof(sfb)); -+ struct statfs sfb; -+ memset(&sfb, 0, sizeof(sfb)); - # if STAT_STATFS4 - /* This platform has the 4-argument version of the statfs call. The last two - * should be the size of struct statfs and 0, respectively. The 0 is the - * filesystem type, and is always 0 when statfs is called on a mounted - * filesystem, as we're doing. - */ -- rc = statfs(ts->filesystems[i], &sfb, sizeof(sfb), 0); -+ rc = statfs(dirName, &sfb, sizeof(sfb), 0); - # else -- rc = statfs(ts->filesystems[i], &sfb); -+ rc = statfs(dirName, &sfb); - # endif - #endif -- if (rc) -- break; -+ if (rc) -+ return NULL; - -- rc = stat(ts->filesystems[i], &sb); -- if (rc) -- break; -- dsi->dev = sb.st_dev; -+ rc = stat(dirName, &sb); -+ if (rc) -+ return NULL; -+ if (sb.st_dev != dev) -+ return NULL; - -- dsi->bsize = sfb.f_bsize; -- dsi->bneeded = 0; -- dsi->ineeded = 0; -+ ts->dsi = xrealloc(ts->dsi, (count + 2) * sizeof(*ts->dsi)); -+ dsi = ts->dsi + count; -+ memset(dsi, 0, 2 * sizeof(*dsi)); -+ -+ dsi->dev = sb.st_dev; -+ dsi->bsize = sfb.f_bsize; -+ if (!dsi->bsize) -+ dsi->bsize = 512; /* we need a bsize */ -+ dsi->bneeded = 0; -+ dsi->ineeded = 0; +--- ./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 -- dsi->bavail = (sfb.f_flag & ST_RDONLY) ? 0 : sfb.f_bavail; +# ifdef ST_RDONLY -+ dsi->bavail = (sfb.f_flag & ST_RDONLY) ? 0 : sfb.f_bavail; + 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 - * it's about all we can do. - */ -- dsi->bavail = sfb.f_blocks - sfb.f_bfree; -+ dsi->bavail = sfb.f_blocks - sfb.f_bfree; - #endif -- /* XXX Avoid FAT and other file systems that have not inodes. */ -- /* XXX assigning negative value to unsigned type */ -- dsi->iavail = !(sfb.f_ffree == 0 && sfb.f_files == 0) -- ? sfb.f_ffree : -1; -- rpmlog(RPMLOG_DEBUG, -- "%5d 0x%08x %8" PRId64 " %12" PRId64 " %12" PRId64" %s\n", -- i, (unsigned) dsi->dev, dsi->bsize, -- dsi->bavail, dsi->iavail, -- ts->filesystems[i]); -- } -- return rc; -+ /* XXX Avoid FAT and other file systems that have not inodes. */ -+ /* XXX assigning negative value to unsigned type */ -+ dsi->iavail = !(sfb.f_ffree == 0 && sfb.f_files == 0) -+ ? sfb.f_ffree : -1; -+ return dsi; - } - --static void rpmtsUpdateDSI(const rpmts ts, dev_t dev, -+static void rpmtsUpdateDSI(const rpmts ts, dev_t dev, const char *dirName, - rpm_loff_t fileSize, rpm_loff_t prevSize, rpm_loff_t fixupSize, - rpmFileAction action) - { -@@ -148,8 +140,10 @@ static void rpmtsUpdateDSI(const rpmts t - if (dsi) { - while (dsi->bsize && dsi->dev != dev) - dsi++; -- if (dsi->bsize == 0) -- dsi = NULL; -+ if (dsi->bsize == 0) { -+ /* create new entry */ -+ dsi = rpmtsCreateDSI(ts, dev, dirName, dsi - ts->dsi); -+ } - } - if (dsi == NULL) - return; -@@ -187,31 +181,58 @@ static void rpmtsUpdateDSI(const rpmts t - dsi->bneeded -= BLOCK_ROUND(fixupSize, dsi->bsize); - } - -+static void rpmtsFindDSIMount(const rpmts ts, rpmDiskSpaceInfo dsi) -+{ -+ int i; -+ struct stat sb; -+ -+ /* must leave chroot for this */ -+ if (rpmtsChrootDone(ts)) { -+ chroot("."); -+ } -+ if (!ts->filesystemCount) -+ rpmGetFilesystemList(&ts->filesystems, &ts->filesystemCount); -+ for (i = 0; i < ts->filesystemCount; i++) { -+ if (stat(ts->filesystems[i], &sb)) -+ continue; -+ if (sb.st_dev == dsi->dev) { -+ dsi->mntPoint = ts->filesystems[i]; -+ break; -+ } -+ } -+ if (i == ts->filesystemCount) { -+ /* file system not found, create something to display */ -+ dsi->mntPoint = xmalloc(20); -+ sprintf((char *)dsi->mntPoint, "dev 0x%08x", (unsigned)dsi->dev); -+ } -+ if (rpmtsChrootDone(ts)) { -+ chroot(ts->rootDir); -+ } -+} -+ - static void rpmtsCheckDSIProblems(const rpmts ts, const rpmte te) - { - rpmDiskSpaceInfo dsi; - rpmps ps; - int fc; -- int i; -- -- if (ts->filesystems == NULL || ts->filesystemCount <= 0) -- return; - - dsi = ts->dsi; -- if (dsi == NULL) -+ if (dsi == NULL || !dsi->bsize) - return; - fc = rpmfiFC(rpmteFI(te)); - if (fc <= 0) - return; - - ps = rpmtsProblems(ts); -- for (i = 0; i < ts->filesystemCount; i++, dsi++) { -+ for (; dsi->bsize; dsi++) { - - if (dsi->bavail >= 0 && adj_fs_blocks(dsi->bneeded) > dsi->bavail) { - if (dsi->bneeded != dsi->obneeded) { -+ if (!dsi->mntPoint) -+ rpmtsFindDSIMount(ts, dsi); - rpmpsAppend(ps, RPMPROB_DISKSPACE, - rpmteNEVRA(te), rpmteKey(te), -- ts->filesystems[i], NULL, NULL, -+ dsi->mntPoint, NULL, NULL, - (adj_fs_blocks(dsi->bneeded)) * dsi->bsize); - dsi->obneeded = dsi->bneeded; - } -@@ -219,9 +240,11 @@ static void rpmtsCheckDSIProblems(const - - if (dsi->iavail >= 0 && adj_fs_blocks(dsi->ineeded) > dsi->iavail) { - if (dsi->ineeded != dsi->oineeded) { -+ if (!dsi->mntPoint) -+ rpmtsFindDSIMount(ts, dsi); - rpmpsAppend(ps, RPMPROB_DISKNODES, - rpmteNEVRA(te), rpmteKey(te), -- ts->filesystems[i], NULL, NULL, -+ dsi->mntPoint, NULL, NULL, - (adj_fs_blocks(dsi->ineeded))); - dsi->oineeded = dsi->ineeded; - } -@@ -543,7 +566,7 @@ assert(otherFi != NULL); - } - - /* Update disk space info for a file. */ -- rpmtsUpdateDSI(ts, fiFps->entry->dev, rpmfiFSize(fi), -+ rpmtsUpdateDSI(ts, fiFps->entry->dev, fiFps->entry->dirName, rpmfiFSize(fi), - rpmfiFReplacedSize(fi), fixupSize, rpmfsGetAction(fs, i)); - - } diff --git a/localetag.diff b/localetag.diff index e3bea98..c21a9cb 100644 --- a/localetag.diff +++ b/localetag.diff @@ -1,5 +1,8 @@ ---- ./lib/tagexts.c.orig 2010-01-08 08:14:37.000000000 +0000 -+++ ./lib/tagexts.c 2010-03-24 16:46:03.000000000 +0000 +Convert output to the current locale. Assumes utf8 input if the +decoding works, otherwise iso-8859-1. + +--- ./lib/tagexts.c.orig 2010-12-03 12:11:57.000000000 +0000 ++++ ./lib/tagexts.c 2011-05-10 16:05:30.000000000 +0000 @@ -2,6 +2,7 @@ * \file lib/formats.c */ @@ -8,7 +11,7 @@ #include "system.h" #include -@@ -157,6 +158,114 @@ exit: +@@ -150,6 +151,114 @@ exit: return rc; } @@ -121,10 +124,10 @@ +} + /** - * Retrieve mounted file system paths. + * Retrieve trigger info. * @param h header -@@ -533,10 +642,41 @@ static int i18nTag(Header h, rpmTag tag, - dstring = _free(dstring); +@@ -435,10 +544,41 @@ static int i18nTag(Header h, rpmTag tag, + #endif rc = headerGet(h, tag, td, HEADERGET_ALLOC); + if (rc && td->data) { @@ -165,7 +168,7 @@ * Retrieve summary text. * @param h header * @retval td tag data container -@@ -558,6 +698,16 @@ static int descriptionTag(Header h, rpmt +@@ -460,6 +600,16 @@ static int descriptionTag(Header h, rpmt return i18nTag(h, RPMTAG_DESCRIPTION, td, hgflags); } @@ -182,7 +185,7 @@ /** * Retrieve group text. * @param h header -@@ -791,6 +941,8 @@ static const struct headerTagFunc_s rpmH +@@ -677,6 +827,8 @@ static const struct headerTagFunc_s rpmH { RPMTAG_LONGARCHIVESIZE, longarchivesizeTag }, { RPMTAG_LONGSIZE, longsizeTag }, { RPMTAG_LONGSIGSIZE, longsigsizeTag }, diff --git a/luaroot.diff b/luaroot.diff deleted file mode 100644 index db5bff2..0000000 --- a/luaroot.diff +++ /dev/null @@ -1,55 +0,0 @@ ---- ./lib/psm.c.orig 2009-12-07 14:36:49.000000000 +0000 -+++ ./lib/psm.c 2010-03-25 14:42:52.000000000 +0000 -@@ -455,6 +455,8 @@ static rpmRC runLuaScript(rpmpsm psm, He - #ifdef WITH_LUA - char *sname = NULL; - int rootFd = -1; -+ int chroot_done; -+ const char *rootDir; - int xx; - rpmlua lua = NULL; /* Global state. */ - rpmluav var; -@@ -463,6 +465,22 @@ static rpmRC runLuaScript(rpmpsm psm, He - - rpmlog(RPMLOG_DEBUG, "%s: %s running scriptlet.\n", - psm->stepName, sname); -+ chroot_done = rpmtsChrootDone(ts); -+ rootDir = rpmtsRootDir(ts); -+ if (!chroot_done) { -+ if (rootDir != NULL && strcmp(rootDir, "/") && *rootDir == '/') { -+ xx = chdir("/"); -+ rootFd = open(".", O_RDONLY, 0); -+ if (rootFd >= 0) { -+ xx = chroot(rootDir); -+ xx = rpmtsSetChrootDone(ts, 1); -+ } -+ } -+ } else { -+ rootFd = open(".", O_RDONLY, 0); -+ } -+ xx = chdir("/"); -+ - if (!rpmtsChrootDone(ts)) { - const char *rootDir = rpmtsRootDir(ts); - xx = chdir("/"); -@@ -505,12 +523,17 @@ static rpmRC runLuaScript(rpmpsm psm, He - rpmluaDelVar(lua, "arg"); - - if (rootFd >= 0) { -- const char *rootDir = rpmtsRootDir(ts); - xx = fchdir(rootFd); - xx = close(rootFd); -- if (rootDir != NULL && !rstreq(rootDir, "/") && *rootDir == '/') -+ if (!chroot_done) { - xx = chroot("."); -- xx = rpmtsSetChrootDone(ts, 0); -+ xx = rpmtsSetChrootDone(ts, 0); -+ } -+ } -+ if (!chroot_done) { -+ const char *currDir = rpmtsCurrDir(ts); -+ if (currDir != NULL) -+ xx = chdir(currDir); - } - free(sname); - #else diff --git a/macrosin.diff b/macrosin.diff index a86e0ab..3c9fcb5 100644 --- a/macrosin.diff +++ b/macrosin.diff @@ -1,6 +1,6 @@ ---- ./macros.in.orig 2009-12-07 14:36:49.000000000 +0000 -+++ ./macros.in 2010-03-25 15:13:43.000000000 +0000 -@@ -175,22 +175,22 @@ +--- ./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 @@ # Template for debug information sub-package. %debug_package \ @@ -52,7 +52,7 @@ # # Use internal dependency generator rather than external helpers? -%_use_internal_dependency_generator 1 -+%_use_internal_dependency_generator 0 ++%_use_internal_dependency_generator 1 # # Filter GLIBC_PRIVATE Provides: and Requires: @@ -79,32 +79,25 @@ +#%__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. -@@ -644,15 +650,15 @@ print (t)\ - %_dbi_config_Packages %{_dbi_htconfig} lockdbfd - # "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 + # Misc BDB tuning options +-%__dbi_other mp_mmapsize=128Mb mp_size=64Mb ++%__dbi_other mp_mmapsize=128Mb mp_size=64Mb --%_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_other} ++%_dbi_config %{?__dbi_other} nofsync --%_dbi_config %{_dbi_htconfig} -+%_dbi_config %{_dbi_htconfig} nofsync + # "Packages" should have shared/exclusive fcntl(2) lock using "lockdbfd". +-%_dbi_config_Packages %{?_dbi_config} lockdbfd ++%_dbi_config_Packages %{?__dbi_other} lockdbfd - # XXX legacy configuration. - # Choose db interface: -@@ -991,7 +997,7 @@ print (t)\ + #============================================================================== + # ---- GPG/PGP/PGP5 signature macros. +@@ -857,7 +863,7 @@ print (t)\ %_build_vendor %{_host_vendor} %_build_os %{_host_os} %_host @host@ @@ -113,7 +106,7 @@ %_host_cpu @host_cpu@ %_host_vendor @host_vendor@ %_host_os @host_os@ -@@ -1154,6 +1160,181 @@ done \ +@@ -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])") @@ -295,7 +288,7 @@ #------------------------------------------------------------------------------ # arch macro for all Intel i?86 compatibile processors # (Note: This macro (and it's analogues) will probably be obsoleted when -@@ -1164,7 +1345,9 @@ done \ +@@ -1030,7 +1211,9 @@ done \ #------------------------------------------------------------------------------ # arch macro for all supported ARM processors @@ -306,7 +299,7 @@ #------------------------------------------------------------------------------ # arch macro for all supported Sparc processors -@@ -1197,3 +1380,26 @@ done \ +@@ -1070,3 +1253,26 @@ done \ # \endverbatim #*/ diff --git a/magic_and_path.diff b/magic_and_path.diff new file mode 100644 index 0000000..8b3f5f2 --- /dev/null +++ b/magic_and_path.diff @@ -0,0 +1,31 @@ +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 +@@ -613,6 +613,7 @@ static void rpmfcAttributes(rpmfc fc, co + const char *path = fullpath + fc->brlen; + int is_executable = 0; + struct stat st; ++ int magic_and_path; + if (stat(fullpath, &st) == 0) { + is_executable = (S_ISREG(st.st_mode)) && + (st.st_mode & (S_IXUSR|S_IXGRP|S_IXOTH)); +@@ -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 39285dd..7647696 100644 --- a/missingok.diff +++ b/missingok.diff @@ -1,6 +1,8 @@ ---- ./lib/depends.c.orig 2009-12-07 14:36:49.000000000 +0000 -+++ ./lib/depends.c 2010-03-24 16:47:28.000000000 +0000 -@@ -450,8 +450,13 @@ retry: +support missingok dependency bit + +--- ./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: } unsatisfied: @@ -15,14 +17,14 @@ + } exit: - if (cacheThis) { ---- ./lib/rpmds.h.orig 2009-12-07 14:36:49.000000000 +0000 -+++ ./lib/rpmds.h 2010-03-24 16:47:28.000000000 +0000 -@@ -73,6 +73,7 @@ typedef enum rpmsenseFlags_e { + 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; RPMSENSE_SCRIPT_POSTUN | \ RPMSENSE_SCRIPT_VERIFY | \ RPMSENSE_FIND_REQUIRES | \ + RPMSENSE_MISSINGOK | \ - RPMSENSE_SCRIPT_PREP | \ - RPMSENSE_SCRIPT_BUILD | \ - RPMSENSE_SCRIPT_INSTALL | \ + RPMSENSE_RPMLIB | \ + RPMSENSE_KEYRING | \ + RPMSENSE_PRETRANS | \ diff --git a/modalias.diff b/modalias.diff index b6dcff6..abcdefd 100644 --- a/modalias.diff +++ b/modalias.diff @@ -1,10 +1,6 @@ -SUSE specific find-supplements, used for kernel builds - -Index: macros.in -=================================================================== ---- macros.in.orig -+++ macros.in -@@ -473,14 +473,18 @@ print (t)\ +--- ./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, # @@ -25,30 +21,9 @@ Index: macros.in +%__find_supplements %{__set_helper_env}%{_rpmconfigdir}/find-supplements %name #%__find_enhances ??? - # -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 + # +--- ./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 @@ -0,0 +1,56 @@ +#! /bin/sh + @@ -106,3 +81,20 @@ Index: scripts/find-supplements.ksyms +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 diff --git a/modemuncher.diff b/modemuncher.diff deleted file mode 100644 index f791f5e..0000000 --- a/modemuncher.diff +++ /dev/null @@ -1,16 +0,0 @@ ---- luaext/modemuncher.c.orig 2010-03-26 09:43:45.000000000 +0000 -+++ luaext/modemuncher.c 2010-03-26 09:44:54.000000000 +0000 -@@ -245,11 +245,11 @@ printf("modemuncher: doneflag = %u\n", d - if (ch_mode) switch (op) - { - case '+': -- *mode = *mode |= ch_mode & affected_bits; -+ *mode |= ch_mode & affected_bits; - break; - - case '-': -- *mode = *mode &= ~(ch_mode & affected_bits); -+ *mode &= ~(ch_mode & affected_bits); - break; - - case '=': diff --git a/nameversioncompare.diff b/nameversioncompare.diff index 99b21f0..ebede1f 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 2010-03-24 16:47:28.000000000 +0000 -+++ ./lib/depends.c 2010-03-24 16:52:00.000000000 +0000 -@@ -100,6 +100,24 @@ static int removePackage(rpmts ts, Heade - return 0; +--- ./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; } +static int rpmNameVersionCompare(Header first, Header second) @@ -12,23 +12,23 @@ two packages are the same. rh#104066 + const char * one, * two; + int rc; + -+ rc = headerGetEntry(first, RPMTAG_NAME, NULL, (void **) &one, NULL); -+ rc = headerGetEntry(second, RPMTAG_NAME, NULL, (void **) &two, NULL); ++ one = headerGetString(first, RPMTAG_NAME); ++ two = headerGetString(second, RPMTAG_NAME); + rc = strcmp(one, two); + if (rc) + return rc; -+ rc = headerGetEntry(first, RPMTAG_ARCH, NULL, (void **) &one, NULL); -+ rc = headerGetEntry(second, RPMTAG_ARCH, NULL, (void **) &two, NULL); ++ one = headerGetString(first, RPMTAG_ARCH); ++ two = headerGetString(second, RPMTAG_ARCH); + rc = strcmp(one, two); + if (rc) + return rc; + return rpmVersionCompare(first, second); +} + - int rpmtsAddInstallElement(rpmts ts, Header h, - fnpyKey key, int upgrade, rpmRelocation * relocs) - { -@@ -275,7 +293,7 @@ addheader: + #define skipColor(_tscolor, _color, _ocolor) \ + ((_tscolor) && (_color) && (_ocolor) && !((_color) & (_ocolor))) + +@@ -111,7 +129,7 @@ static void addUpgradeErasures(rpmts ts, continue; /* Skip packages that contain identical NEVR. */ @@ -36,18 +36,13 @@ two packages are the same. rh#104066 + if (rpmNameVersionCompare(h, oh) == 0) continue; - xx = removePackage(ts, oh, p); -@@ -316,11 +334,9 @@ addheader: + removePackage(ts, oh, p); +@@ -150,7 +168,7 @@ static void addObsoleteErasures(rpmts ts * If no obsoletes version info is available, match all names. */ if (rpmdsEVR(obsoletes) == NULL -- || rpmdsAnyMatchesDep(oh, obsoletes, _rpmds_nopromote)) { -+ || rpmdsNVRMatchesDep(oh, obsoletes, _rpmds_nopromote)) { +- || rpmdsAnyMatchesDep(oh, obsoletes, _rpmds_nopromote)) { ++ || rpmdsNVRMatchesDep(oh, obsoletes, _rpmds_nopromote)) { char * ohNEVRA = headerGetAsString(oh, RPMTAG_NEVRA); --#ifdef DYING /* XXX see http://bugzilla.redhat.com #134497 */ -- if (rpmVersionCompare(h, oh)) --#endif -+ if (rpmNameVersionCompare(h, oh)) - xx = removePackage(ts, oh, p); rpmlog(RPMLOG_DEBUG, " Obsoletes: %s\t\terases %s\n", rpmdsDNEVR(obsoletes)+2, ohNEVRA); diff --git a/no_rep_autop.diff b/no_rep_autop.diff new file mode 100644 index 0000000..4027c96 --- /dev/null +++ b/no_rep_autop.diff @@ -0,0 +1,12 @@ +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 new file mode 100644 index 0000000..ed58d0d --- /dev/null +++ b/nobuildcolor.diff @@ -0,0 +1,13 @@ +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 deleted file mode 100644 index d1fd124..0000000 --- a/nodefattr.diff +++ /dev/null @@ -1,17 +0,0 @@ -Revert upstream patch that always uses %defattr(-,root,root). -Upstream should probably use a macro instead. - -Index: build/files.c -=================================================================== ---- build/files.c.orig -+++ build/files.c -@@ -1793,7 +1793,9 @@ static rpmRC processPackageFiles(rpmSpec - - 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/nomagiccheck.diff b/nomagiccheck.diff new file mode 100644 index 0000000..1ae6ccf --- /dev/null +++ b/nomagiccheck.diff @@ -0,0 +1,13 @@ +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/noprereqdeprec.diff b/noprereqdeprec.diff index 7ac25c2..5d38711 100644 --- a/noprereqdeprec.diff +++ b/noprereqdeprec.diff @@ -1,20 +1,22 @@ ---- ./build/parsePreamble.c.orig 2010-04-07 14:52:57.000000000 +0000 -+++ ./build/parsePreamble.c 2010-04-07 14:53:51.000000000 +0000 -@@ -748,7 +748,7 @@ static struct PreambleRec_s const preamb +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, 1, 0, LEN_AND_STR("requires")}, -- {RPMTAG_PREREQ, 1, 1, LEN_AND_STR("prereq")}, -+ {RPMTAG_PREREQ, 1, 0, LEN_AND_STR("prereq")}, + {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")}, -@@ -757,7 +757,7 @@ static struct PreambleRec_s const preamb +@@ -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, 1, 1, LEN_AND_STR("buildprereq")}, -+ {RPMTAG_BUILDPREREQ, 1, 0, LEN_AND_STR("buildprereq")}, - {RPMTAG_BUILDREQUIRES, 1, 0, LEN_AND_STR("buildrequires")}, +- {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/nosignature.diff b/nosignature.diff deleted file mode 100644 index 0802056..0000000 --- a/nosignature.diff +++ /dev/null @@ -1,23 +0,0 @@ -Do not load keyring if signature checking is disabled. - ---- ./lib/package.c.orig 2010-04-09 09:56:42.000000000 +0000 -+++ ./lib/package.c 2010-04-09 09:57:50.000000000 +0000 -@@ -760,12 +760,16 @@ exit: - rpmRC rpmReadPackageFile(rpmts ts, FD_t fd, const char * fn, Header * hdrp) - { - rpmRC rc; -- rpmKeyring keyring = rpmtsGetKeyring(ts, 1); - rpmVSFlags vsflags = rpmtsVSFlags(ts); -+ rpmKeyring keyring = 0; -+ -+ if ((vsflags & _RPMVSF_NOSIGNATURES) != _RPMVSF_NOSIGNATURES) -+ keyring = rpmtsGetKeyring(ts, 1); - - rc = rpmpkgRead(keyring, vsflags, fd, fn, hdrp); - -- rpmKeyringFree(keyring); -+ if (keyring) -+ rpmKeyringFree(keyring); - return rc; - } - diff --git a/nosource.diff b/nosource.diff deleted file mode 100644 index e824db0..0000000 --- a/nosource.diff +++ /dev/null @@ -1,36 +0,0 @@ -rpm does not allow headerPutUint32 on internal tags, so use -headerPut instead. (Maybe NOSOURCE/NOPATCH should not be internal -at all, though.) - ---- ./build/files.c.orig 2010-04-08 16:23:42.000000000 +0000 -+++ ./build/files.c 2010-04-08 16:23:44.000000000 +0000 -@@ -2088,15 +2088,25 @@ int processSourceFiles(rpmSpec spec) - if (srcPtr->flags & RPMBUILD_ISSOURCE) { - headerPutString(spec->sourceHeader, RPMTAG_SOURCE, srcPtr->source); - if (srcPtr->flags & RPMBUILD_ISNO) { -- headerPutUint32(spec->sourceHeader, RPMTAG_NOSOURCE, -- &srcPtr->num, 1); -+ struct rpmtd_s td; -+ rpmtdReset(&td); -+ td.tag = RPMTAG_NOSOURCE; -+ td.type = RPM_INT32_TYPE; -+ td.data = &srcPtr->num; -+ td.count = 1; -+ headerPut(spec->sourceHeader, &td, HEADERPUT_APPEND); - } - } - if (srcPtr->flags & RPMBUILD_ISPATCH) { - headerPutString(spec->sourceHeader, RPMTAG_PATCH, srcPtr->source); - if (srcPtr->flags & RPMBUILD_ISNO) { -- headerPutUint32(spec->sourceHeader, RPMTAG_NOSOURCE, -- &srcPtr->num, 1); -+ struct rpmtd_s td; -+ rpmtdReset(&td); -+ td.tag = RPMTAG_NOPATCH; -+ td.type = RPM_INT32_TYPE; -+ td.data = &srcPtr->num; -+ td.count = 1; -+ headerPut(spec->sourceHeader, &td, HEADERPUT_APPEND); - } - } - diff --git a/perlprov.diff b/perlprov.diff index 1f08b97..323c180 100644 --- a/perlprov.diff +++ b/perlprov.diff @@ -1,13 +1,13 @@ -Index: scripts/perl.prov -=================================================================== ---- scripts/perl.prov.orig -+++ scripts/perl.prov -@@ -167,7 +167,7 @@ sub process_file { - - $version= $1; +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; + $require{$package} ||= $version; } - + # Allow someone to have a variable that defines virtual packages diff --git a/pkgconfig-0.24.diff b/pkgconfig-0.24.diff deleted file mode 100644 index 02291fd..0000000 --- a/pkgconfig-0.24.diff +++ /dev/null @@ -1,27 +0,0 @@ -Index: ./scripts/pkgconfigdeps.sh -=================================================================== ---- ./scripts/pkgconfigdeps.sh -+++ ./scripts/pkgconfigdeps.sh -@@ -11,6 +11,13 @@ test -x $pkgconfig || { - exit 0 - } - -+`$pkgconfig --exists "pkg-config >= 0.24" 2> /dev/null` -+if [ $? -eq 0 ]; then -+ PRINT_REQUIRES="--print-requires --print-requires-private" -+else -+ PRINT_REQUIRES="--print-requires" -+fi -+ - case $1 in - -P|--provides) - while read filename ; do -@@ -39,7 +46,7 @@ case $1 in - [ $i -eq 1 ] && echo "$pkgconfig" - DIR="`dirname ${filename}`" - export PKG_CONFIG_PATH="$DIR:$DIR/../../share/pkgconfig" -- $pkgconfig --print-requires "$filename" 2> /dev/null | while read n r v ; do -+ $pkgconfig $PRINT_REQUIRES "$filename" 2> /dev/null | while read n r v ; do - [ -n "$n" ] || continue - echo -n "pkgconfig($n) " - [ -n "$r" ] && [ -n "$v" ] && echo -n "$r" "$v" diff --git a/platformin.diff b/platformin.diff index 94bc710..77e7828 100644 --- a/platformin.diff +++ b/platformin.diff @@ -1,9 +1,7 @@ SUSE specific platform changes. -Index: platform.in -=================================================================== ---- platform.in.orig -+++ platform.in +--- ./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 @@ %_exec_prefix @exec_prefix@ %_bindir @bindir@ @@ -22,7 +20,7 @@ Index: platform.in # Deprecated misspelling, present for backwards compatibility. %_initrddir %{_initddir} -@@ -146,3 +146,21 @@ +@@ -143,3 +143,21 @@ @mandrake@%_gamesdir games @mandrake@%_gamesbindir %{_prefix}/%{_gamesdir} @mandrake@%_gamesdatadir %{_datadir}/%{_gamesdir} diff --git a/pythondeps.diff b/pythondeps.diff index 6f07ea7..c8882ef 100644 --- a/pythondeps.diff +++ b/pythondeps.diff @@ -1,5 +1,5 @@ ---- ./autodeps/linux.prov.orig 2010-04-08 13:32:56.000000000 +0000 -+++ ./autodeps/linux.prov 2010-04-08 13:38:44.000000000 +0000 +--- ./autodeps/linux.prov.orig 2011-05-11 15:59:31.000000000 +0000 ++++ ./autodeps/linux.prov 2011-05-11 16:39:09.000000000 +0000 @@ -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" | \ @@ -20,9 +20,9 @@ # # --- Tcl modules. ---- ./autodeps/linux.req.orig 2010-04-08 13:36:47.000000000 +0000 -+++ ./autodeps/linux.req 2010-04-08 13:40:25.000000000 +0000 -@@ -32,7 +32,7 @@ liblist=($(printf "%s\0" "${filelist[@]} +--- ./autodeps/linux.req.orig 2011-05-11 14:28:45.000000000 +0000 ++++ ./autodeps/linux.req 2011-05-11 16:39:09.000000000 +0000 +@@ -31,7 +31,7 @@ liblist=($(printf "%s\0" "${filelist[@]} interplist=() perllist=() @@ -31,7 +31,7 @@ tcllist=() monolist=($(printf "%s\n" "${filelist[@]}" | egrep "\\.(exe|dll)(\\.config)?\$")) -@@ -128,8 +128,8 @@ done | sort -u +@@ -127,8 +127,8 @@ done | sort -u # # --- Python modules. @@ -42,28 +42,3 @@ # # --- Tcl modules. ---- ./scripts/pythondeps.sh.orig 2010-04-08 13:40:34.000000000 +0000 -+++ ./scripts/pythondeps.sh 2010-04-08 13:42:19.000000000 +0000 -@@ -5,17 +5,17 @@ - exit 0 - } - --PYVER=`python -c "import sys; v=sys.version_info[:2]; print '%d.%d'%v"` - case $1 in - -P|--provides) - shift -- grep "/usr/bin/python\*\$" >& /dev/null && echo "python(abi) = ${PYVER}" -- exit 0 -+ grep "/usr/bin/python.\..$" \ -+ | sed -e "s|.*/usr/bin/python\(.\..\)|python(abi) = \1|" - ;; - -R|--requires) - shift -- grep "/usr/lib[^/]*/python${PYVER}/" >& /dev/null && echo "python(abi) = ${PYVER}" -- exit 0 -+ grep "/usr/lib[^/]*/python.\../.*" \ -+ | sed -e "s|.*/usr/lib[^/]*/python\(.\..\)/.*|python(abi) = \1|g" \ -+ | sort | uniq - ;; - esac - diff --git a/readlineofi.diff b/readlineofi.diff deleted file mode 100644 index d4123d1..0000000 --- a/readlineofi.diff +++ /dev/null @@ -1,10 +0,0 @@ ---- build/parseSpec.c.orig 2010-02-15 11:49:29.000000000 +0000 -+++ build/parseSpec.c 2010-02-24 10:38:25.000000000 +0000 -@@ -283,6 +283,7 @@ int readLine(rpmSpec spec, int strip) - retry: - if ((rc = readLineFromOFI(spec, ofi)) != 0) - return rc; -+ ofi = spec->fileStack; - - /* Copy next file line into the spec line buffer */ - rc = copyNextLineFromOFI(spec, ofi); diff --git a/refreshtestarch.diff b/refreshtestarch.diff index f429b2b..12642dd 100644 --- a/refreshtestarch.diff +++ b/refreshtestarch.diff @@ -1,19 +1,17 @@ Also test architecture in "refresh" test when not colored. This allows -updates to different architecture possible again. +updates to different architectures. -Index: lib/psm.c -=================================================================== ---- lib/psm.c.orig -+++ lib/psm.c -@@ -1202,6 +1202,7 @@ rpmRC rpmpsmStage(rpmpsm psm, pkgStage s +--- ./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; + /* this must match rpmNameVersionCompare in depends.c */ - mi = rpmtsInitIterator(ts, RPMTAG_NAME, rpmteN(psm->te), 0); + mi = rpmtsInitIterator(ts, RPMDBI_NAME, rpmteN(psm->te), 0); xx = rpmdbSetIteratorRE(mi, RPMTAG_EPOCH, RPMMIRE_STRCMP, rpmteE(psm->te)); -@@ -1209,9 +1210,9 @@ rpmRC rpmpsmStage(rpmpsm psm, pkgStage s +@@ -730,9 +731,9 @@ static rpmRC rpmpsmStage(rpmpsm psm, pkg rpmteV(psm->te)); xx = rpmdbSetIteratorRE(mi, RPMTAG_RELEASE, RPMMIRE_STRCMP, rpmteR(psm->te)); diff --git a/remove-brp-strips.diff b/remove-brp-strips.diff index c0ef51a..466a948 100644 --- a/remove-brp-strips.diff +++ b/remove-brp-strips.diff @@ -3,16 +3,14 @@ Subject: remove references to removed brp scripts Some brp-scripts are not used in openSUSE, remove references to it -Index: platform.in -=================================================================== ---- platform.in.orig -+++ platform.in +--- ./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 \ -- %{_rpmconfigdir}/brp-strip-static-archive \ -- %{_rpmconfigdir}/brp-strip-comment-note \ + %{_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 index 8a95025..b7453e2 100644 --- a/remove-translations.diff +++ b/remove-translations.diff @@ -1,5 +1,5 @@ ---- scripts/find-lang.sh 2011-01-13 13:44:01.000000000 +0100 -+++ scripts/find-lang.sh 2011-01-13 13:44:39.770439219 +0100 +--- ./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 @@ -17,4 +17,4 @@ + find $TOP_DIR -type f -o -type l|sed ' s:'"$TOP_DIR"':: - '"$ALL_NAME$MO"'s:\(.*/share/locale/\)\([^/_]\+\)\(.*\.mo$\):%lang(\2) \1\2\3: + '"$ALL_NAME$MO"'s:\(.*/locale/\)\([^/_]\+\)\(.*\.mo$\):%lang(\2) %doc \1\2\3: diff --git a/repackage-nomd5.diff b/repackage-nomd5.diff index 639b841..16e243e 100644 --- a/repackage-nomd5.diff +++ b/repackage-nomd5.diff @@ -1,14 +1,16 @@ ---- ./lib/psm.c.orig 2010-03-26 15:06:20.000000000 +0000 -+++ ./lib/psm.c 2010-03-26 15:11:27.000000000 +0000 -@@ -1318,6 +1318,7 @@ rpmRC rpmpsmStage(rpmpsm psm, pkgStage s - - if (psm->goal == PSM_PKGINSTALL) { +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; -@@ -1343,6 +1344,9 @@ rpmRC rpmpsmStage(rpmpsm psm, pkgStage s +@@ -828,6 +829,9 @@ static rpmRC rpmpsmStage(rpmpsm psm, pkg break; } @@ -18,7 +20,7 @@ rc = fsmSetup(rpmfiFSM(fi), FSM_PKGINSTALL, ts, psm->te, fi, payload, NULL, &psm->failedFile); (void) rpmswAdd(rpmtsOp(ts, RPMTS_OP_UNCOMPRESS), -@@ -1350,6 +1354,8 @@ rpmRC rpmpsmStage(rpmpsm psm, pkgStage s +@@ -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)); diff --git a/requires-ge-macro.diff b/requires-ge-macro.diff index 0873add..51c3e50 100644 --- a/requires-ge-macro.diff +++ b/requires-ge-macro.diff @@ -1,8 +1,6 @@ -Index: macros.in -=================================================================== ---- macros.in.orig -+++ macros.in -@@ -1182,7 +1182,8 @@ done \ +--- ./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 # diff --git a/resetdefattr.diff b/resetdefattr.diff deleted file mode 100644 index 0e2a892..0000000 --- a/resetdefattr.diff +++ /dev/null @@ -1,55 +0,0 @@ ---- ./build/files.c.orig 2010-04-07 14:27:54.000000000 +0000 -+++ ./build/files.c 2010-04-07 14:51:11.000000000 +0000 -@@ -561,8 +561,13 @@ static rpmRC parseForAttr(const char * b - } - ar->ar_fmode = ui; - } else { -- ar->ar_fmodestr = fl->def_ar.ar_fmodestr; -- ar->ar_fmode = fl->def_ar.ar_fmode; -+ if (ret_ar == &(fl->def_ar)) { -+ ar->ar_fmodestr = NULL; -+ ar->ar_fmode = 0; -+ } else { -+ ar->ar_fmodestr = fl->def_ar.ar_fmodestr; -+ ar->ar_fmode = fl->def_ar.ar_fmode; -+ } - } - - if (ar->ar_dmodestr && !isAttrDefault(ar->ar_dmodestr)) { -@@ -574,15 +579,30 @@ static rpmRC parseForAttr(const char * b - } - ar->ar_dmode = ui; - } else { -- ar->ar_dmodestr = fl->def_ar.ar_dmodestr; -- ar->ar_dmode = fl->def_ar.ar_dmode; -+ if (ret_ar == &(fl->def_ar)) { -+ ar->ar_dmodestr = NULL; -+ ar->ar_dmode = 0; -+ } else { -+ ar->ar_dmodestr = fl->def_ar.ar_dmodestr; -+ ar->ar_dmode = fl->def_ar.ar_dmode; -+ } - } - -- if (!(ar->ar_user && !isAttrDefault(ar->ar_user))) -- ar->ar_user = fl->def_ar.ar_user; -+ if (!(ar->ar_user && !isAttrDefault(ar->ar_user))) { -+ if (ret_ar == &(fl->def_ar)) { -+ ar->ar_user = NULL; -+ } else { -+ ar->ar_user = fl->def_ar.ar_user; -+ } -+ } - -- if (!(ar->ar_group && !isAttrDefault(ar->ar_group))) -- ar->ar_group = fl->def_ar.ar_group; -+ if (!(ar->ar_group && !isAttrDefault(ar->ar_group))) { -+ if (ret_ar == &(fl->def_ar)) { -+ ar->ar_group = 0; -+ } else { -+ ar->ar_group = fl->def_ar.ar_group; -+ } -+ } - - dupAttrRec(ar, ret_ar); - diff --git a/rpm-4.4.2.3-db.tar.bz2 b/rpm-4.4.2.3-db.tar.bz2 deleted file mode 100644 index 1a2af71..0000000 --- a/rpm-4.4.2.3-db.tar.bz2 +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:1226a5eeee069402b8dddfde652e2b0a44b64a193078b3c7276d97b1b5f756cb -size 5271325 diff --git a/rpm-4.8.0.tar.bz2 b/rpm-4.8.0.tar.bz2 deleted file mode 100644 index 2fec1e1..0000000 --- a/rpm-4.8.0.tar.bz2 +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:a3b4bb2d78eaf1f5200fdcd51372ca9cedce64e030046372e6a13e361cb82b64 -size 3692408 diff --git a/rpm-4.9.0.tar.bz2 b/rpm-4.9.0.tar.bz2 new file mode 100644 index 0000000..5a813cd --- /dev/null +++ b/rpm-4.9.0.tar.bz2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9af1a56b05fc2c54935062e04a3e02999110c74d00bfd5b5c5ff3a03dde61688 +size 3410799 diff --git a/rpm-beecrypt.diff b/rpm-beecrypt.diff index c4a2292..ecf9284 100644 --- a/rpm-beecrypt.diff +++ b/rpm-beecrypt.diff @@ -1,17 +1,5 @@ ---- ./Makefile.am.orig 2009-12-07 14:36:49.000000000 +0000 -+++ ./Makefile.am 2010-03-24 15:39:14.000000000 +0000 -@@ -87,7 +87,8 @@ DISTCLEANFILES += find-requires - - rpm_SOURCES = rpmqv.c debug.h system.h - rpm_CPPFLAGS = $(AM_CPPFLAGS) -DIAM_RPMDB -DIAM_RPMEIU -DIAM_RPMK -DIAM_RPMQV --rpm_LDADD = build/librpmbuild.la lib/librpm.la rpmio/librpmio.la -+rpm_LDADD = lib/librpm.la rpmio/librpmio.la -+rpm_LDADD += build/.libs/spec.o build/.libs/misc.o build/.libs/names.o build/.libs/expression.o build/.libs/reqprov.o build/.libs/poptBT.o build/.libs/parse*.o - rpm_LDADD += @WITH_LIBELF_LIB@ @WITH_NSS_LIB@ @WITH_POPT_LIB@ @WITH_ZLIB_LIB@ - - rpmbuild_SOURCES = build.c rpmqv.c build.h debug.h system.h ---- ./config.h.in.orig 2010-01-08 08:35:12.000000000 +0000 -+++ ./config.h.in 2010-03-24 15:39:14.000000000 +0000 +--- ./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 @@ -22,16 +10,16 @@ /* Define as 1 if you bzip2 1.0 */ #undef HAVE_BZ2_1_0 -@@ -110,7 +113,7 @@ - /* Define as 1 if defines h_errno */ - #undef HAVE_HERRNO +@@ -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 `inet_aton' function. */ -@@ -359,6 +362,10 @@ + /* Define to 1 if you have the header file. */ +@@ -224,6 +227,10 @@ */ #undef LT_OBJDIR @@ -42,7 +30,7 @@ /* Define to 1 if `major', `minor', and `makedev' are declared in . */ #undef MAJOR_IN_MKDEV -@@ -456,6 +463,9 @@ +@@ -308,6 +315,9 @@ /* Build with acl support? */ #undef WITH_ACL @@ -52,9 +40,9 @@ /* Build with capability support? */ #undef WITH_CAP ---- ./configure.ac.orig 2010-01-08 08:34:41.000000000 +0000 -+++ ./configure.ac 2010-03-24 15:39:14.000000000 +0000 -@@ -299,12 +299,43 @@ AC_CHECK_HEADERS([dwarf.h], [ +--- ./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]) #================= @@ -98,7 +86,7 @@ AC_CHECK_HEADERS([nspr.h nss.h sechash.h], [], [ AC_MSG_ERROR([missing required NSPR / NSS header]) ]) -@@ -313,6 +344,7 @@ AC_CHECK_LIB(nss3, NSS_NoDB_Init, [ +@@ -260,6 +291,7 @@ AC_CHECK_LIB(nss3, NSS_NoDB_Init, [ ], [ AC_MSG_ERROR([missing required NSS library 'nss3']) ]) @@ -106,8 +94,8 @@ AC_SUBST(WITH_NSS_INCLUDE) AC_SUBST(WITH_NSS_LIB) ---- ./rpmio/Makefile.am.orig 2009-12-07 14:36:49.000000000 +0000 -+++ ./rpmio/Makefile.am 2010-03-24 15:42:04.000000000 +0000 +--- ./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/ @@ -116,7 +104,7 @@ AM_CPPFLAGS += @WITH_LUA_INCLUDE@ AM_CPPFLAGS += @WITH_POPT_INCLUDE@ AM_CPPFLAGS += -I$(top_srcdir)/misc -@@ -19,10 +20,17 @@ librpmio_la_SOURCES = \ +@@ -18,10 +19,17 @@ librpmio_la_SOURCES = \ rpmstring.c rpmfileutil.c \ rpmkeyring.c @@ -126,7 +114,7 @@ +librpmio_la_SOURCES += digest_nss.c +endif + - librpmio_la_LDFLAGS = -version-info 1:0:0 + librpmio_la_LDFLAGS = -version-info 2:0:0 librpmio_la_LIBADD = \ ../misc/libmisc.la \ @WITH_NSS_LIB@ \ @@ -134,7 +122,7 @@ @WITH_LUA_LIB@ \ @WITH_BZ2_LIB@ \ @WITH_ZLIB_LIB@ \ -@@ -31,6 +39,15 @@ librpmio_la_LIBADD = \ +@@ -30,6 +38,15 @@ librpmio_la_LIBADD = \ @WITH_LZMA_LIB@ \ -lpthread @@ -150,8 +138,8 @@ if WITH_LUAEXT AM_CPPFLAGS += -I$(top_srcdir)/luaext/ librpmio_la_LIBADD += $(top_builddir)/luaext/libluaext.la ---- ./rpmio/base64.c.orig 2009-12-07 14:36:49.000000000 +0000 -+++ ./rpmio/base64.c 2010-03-24 15:39:14.000000000 +0000 +--- ./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 @@ -169,9 +157,9 @@ #endif +#endif /* WITH_BEECRYPT */ ---- ./rpmio/digest.c.orig 2009-12-07 14:36:49.000000000 +0000 -+++ ./rpmio/digest.c 2010-03-24 15:43:57.000000000 +0000 -@@ -4,26 +4,12 @@ +--- ./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" @@ -194,13 +182,12 @@ -struct DIGEST_CTX_s { - rpmDigestFlags flags; /*!< Bit(s) to control digest operation. */ - HASHContext *hashctx; /*!< Internal NSS hash context. */ -- pgpHashAlgo algo; /*!< Used hash algorithm */ +- int algo; /*!< Used hash algorithm */ -}; -- + #define DIGESTS_MAX 11 struct rpmDigestBundle_s { - int index_min; /*!< Smallest index of active digest */ -@@ -109,138 +95,3 @@ DIGEST_CTX rpmDigestBundleDupCtx(rpmDige +@@ -109,138 +96,3 @@ DIGEST_CTX rpmDigestBundleDupCtx(rpmDige return dup; } @@ -219,7 +206,7 @@ -} - -RPM_GNUC_PURE --static HASH_HashType getHashType(pgpHashAlgo hashalgo) +-static HASH_HashType getHashType(int hashalgo) -{ - switch (hashalgo) { - case PGPHASHALGO_MD5: @@ -250,13 +237,13 @@ -} - -size_t --rpmDigestLength(pgpHashAlgo hashalgo) +-rpmDigestLength(int hashalgo) -{ - return HASH_ResultLen(getHashType(hashalgo)); -} - -DIGEST_CTX --rpmDigestInit(pgpHashAlgo hashalgo, rpmDigestFlags flags) +-rpmDigestInit(int hashalgo, rpmDigestFlags flags) -{ - HASH_HashType type = getHashType(hashalgo); - HASHContext *hashctx = NULL; @@ -339,8 +326,8 @@ - return 0; -} - ---- ./rpmio/digest.h.orig 2009-12-07 14:36:49.000000000 +0000 -+++ ./rpmio/digest.h 2010-03-24 15:56:12.000000000 +0000 +--- ./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 @@ -374,8 +361,8 @@ +int pgpVerifyDSA(pgpDig dig, uint8_t *hash, size_t hashlen); + #endif /* _RPMDIGEST_H */ ---- ./rpmio/digest_beecrypt.c.orig 2010-03-24 15:39:14.000000000 +0000 -+++ ./rpmio/digest_beecrypt.c 2010-03-24 16:16:23.000000000 +0000 +--- ./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" + @@ -698,7 +685,7 @@ + */ +struct DIGEST_CTX_s { + rpmDigestFlags flags; /*!< Bit(s) to control digest operation. */ -+ pgpHashAlgo algo; /*!< Used hash algorithm */ ++ 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. */ @@ -721,7 +708,7 @@ +} + +size_t -+rpmDigestLength(pgpHashAlgo hashalgo) ++rpmDigestLength(int hashalgo) +{ + switch (hashalgo) { + case PGPHASHALGO_MD5: @@ -742,7 +729,7 @@ +} + +DIGEST_CTX -+rpmDigestInit(pgpHashAlgo hashalgo, rpmDigestFlags flags) ++rpmDigestInit(int hashalgo, rpmDigestFlags flags) +{ + DIGEST_CTX ctx = xcalloc(1, sizeof(*ctx)); + int xx; @@ -870,8 +857,8 @@ + free(ctx); + return 0; +} ---- ./rpmio/digest_nss.c.orig 2010-03-24 15:39:14.000000000 +0000 -+++ ./rpmio/digest_nss.c 2010-03-24 16:14:36.000000000 +0000 +--- ./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 @@ -1238,7 +1225,7 @@ +struct DIGEST_CTX_s { + rpmDigestFlags flags; /*!< Bit(s) to control digest operation. */ + HASHContext *hashctx; /*!< Internal NSS hash context. */ -+ pgpHashAlgo algo; /*!< Used hash algorithm */ ++ int algo; /*!< Used hash algorithm */ +}; + +DIGEST_CTX @@ -1255,7 +1242,7 @@ +} + +RPM_GNUC_PURE -+static HASH_HashType getHashType(pgpHashAlgo hashalgo) ++static HASH_HashType getHashType(int hashalgo) +{ + switch (hashalgo) { + case PGPHASHALGO_MD5: @@ -1286,13 +1273,13 @@ +} + +size_t -+rpmDigestLength(pgpHashAlgo hashalgo) ++rpmDigestLength(int hashalgo) +{ + return HASH_ResultLen(getHashType(hashalgo)); +} + +DIGEST_CTX -+rpmDigestInit(pgpHashAlgo hashalgo, rpmDigestFlags flags) ++rpmDigestInit(int hashalgo, rpmDigestFlags flags) +{ + HASH_HashType type; + HASHContext *hashctx = NULL; @@ -1373,8 +1360,8 @@ + free(ctx); + return 0; +} ---- ./rpmio/rpmpgp.c.orig 2009-12-07 14:36:49.000000000 +0000 -+++ ./rpmio/rpmpgp.c 2010-03-24 16:26:00.000000000 +0000 +--- ./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; @@ -1382,10 +1369,10 @@ -static int _crypto_initialized = 0; -static int _new_process = 1; - - static struct pgpValTbl_s const pgpSigTypeTbl[] = { - { PGPSIGTYPE_BINARY, "Binary document signature" }, - { PGPSIGTYPE_TEXT, "Text document signature" }, -@@ -291,89 +288,6 @@ int pgpValTok(pgpValTbl vs, const char * + 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; } @@ -1393,12 +1380,12 @@ - * @return 0 on success - */ -static int pgpMpiSet(const char * pre, unsigned int lbits, -- void *dest, const uint8_t * p, const uint8_t * pend) +- uint8_t *dest, const uint8_t * p, const uint8_t * pend) -{ - unsigned int mbits = pgpMpiBits(p); - unsigned int nbits; - size_t nbytes; -- char *t = dest; +- uint8_t *t = dest; - unsigned int ix; - - if ((p + ((mbits+7) >> 3)) > pend) @@ -1475,7 +1462,7 @@ /** \ingroup rpmpgp * Is buffer at beginning of an OpenPGP packet? -@@ -569,29 +483,16 @@ static int pgpPrtSigParams(pgpTag tag, u +@@ -593,29 +507,16 @@ static int pgpPrtSigParams(pgpTag tag, u { const uint8_t * pend = h + hlen; size_t i; @@ -1507,7 +1494,7 @@ } pgpPrtStr("", pgpSigRSA[i]); } else if (pubkey_algo == PGPPUBKEYALGO_DSA) { -@@ -599,30 +500,8 @@ static int pgpPrtSigParams(pgpTag tag, u +@@ -623,30 +524,8 @@ static int pgpPrtSigParams(pgpTag tag, u if (_dig && (sigtype == PGPSIGTYPE_BINARY || sigtype == PGPSIGTYPE_TEXT)) { @@ -1540,7 +1527,7 @@ } pgpPrtStr("", pgpSigDSA[i]); } else { -@@ -814,49 +693,11 @@ static const uint8_t * pgpPrtPubkeyParam +@@ -838,49 +717,11 @@ static const uint8_t * pgpPrtPubkeyParam char * mpi; if (pubkey_algo == PGPPUBKEYALGO_RSA) { if (i >= 2) break; @@ -1592,7 +1579,7 @@ pgpPrtStr("", pgpPublicDSA[i]); } else if (pubkey_algo == PGPPUBKEYALGO_ELGAMAL_ENCRYPT) { if (i >= 3) break; -@@ -1241,15 +1082,7 @@ void pgpCleanDig(pgpDig dig) +@@ -1265,15 +1106,7 @@ void pgpCleanDig(pgpDig dig) memset(&dig->signature, 0, sizeof(dig->signature)); memset(&dig->pubkey, 0, sizeof(dig->pubkey)); @@ -1609,7 +1596,7 @@ } return; } -@@ -1291,39 +1124,6 @@ int pgpPrtPkts(const uint8_t * pkts, siz +@@ -1315,39 +1148,6 @@ int pgpPrtPkts(const uint8_t * pkts, siz return 0; } @@ -1649,7 +1636,7 @@ char *pgpIdentItem(pgpDigParams digp) { char *id = NULL; -@@ -1372,30 +1172,12 @@ rpmRC pgpVerifySig(pgpDig dig, DIGEST_CT +@@ -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) { @@ -1686,7 +1673,7 @@ } } -@@ -1580,50 +1362,3 @@ char * pgpArmorWrap(int atype, const uns +@@ -1607,50 +1389,3 @@ char * pgpArmorWrap(int atype, const uns return val; } diff --git a/rpm-python.spec b/rpm-python.spec index a7ef82e..969532b 100644 --- a/rpm-python.spec +++ b/rpm-python.spec @@ -25,8 +25,8 @@ BuildRequires: libacl-devel libcap-devel python-devel xz-devel zlib-devel License: GPLv2+ Group: System/Packages Summary: Python Bindings for Manipulating RPM Packages -Version: 4.8.0 -Release: 21 +Version: 4.9.0 +Release: 1 Requires: rpm = %{version} %py_requires Source99: rpm.spec diff --git a/rpm-shorten-changelog.diff b/rpm-shorten-changelog.diff index 434eaa8..7090250 100644 --- a/rpm-shorten-changelog.diff +++ b/rpm-shorten-changelog.diff @@ -1,29 +1,10 @@ -Index: build/parseChangelog.c -=================================================================== ---- build/parseChangelog.c.orig -+++ build/parseChangelog.c -@@ -167,6 +167,11 @@ static rpmRC addChangelog(Header h, Stri - return RPMRC_FAIL; - } - -+ /* workaround old suse oddity */ -+ if (*s == '-' && s[1] == ' ') { -+ s += 2; -+ } -+ - /* name */ - name = s; - while (*s != '\0') s++; -Index: build/pack.c -=================================================================== ---- build/pack.c.orig -+++ build/pack.c -@@ -707,6 +707,64 @@ rpmRC checkPackages(char *pkgcheck) +--- ./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 void trimChangelog(Header h) +{ + static int oneshot; + static int cuttime, minnum, maxnum; @@ -80,10 +61,10 @@ Index: build/pack.c + free(texts); +} + - rpmRC packageBinaries(rpmSpec spec) + rpmRC packageBinaries(rpmSpec spec, const char *cookie, int cheating) { struct cpioSourceArchive_s csabuf; -@@ -716,6 +774,7 @@ rpmRC packageBinaries(rpmSpec spec) +@@ -680,6 +737,7 @@ rpmRC packageBinaries(rpmSpec spec, cons Package pkg; char *pkglist = NULL; @@ -91,3 +72,17 @@ Index: build/pack.c 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.changes b/rpm.changes index 7f29467..4825c6f 100644 --- a/rpm.changes +++ b/rpm.changes @@ -1,3 +1,13 @@ +------------------------------------------------------------------- +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 diff --git a/rpm.spec b/rpm.spec index 82a0d7d..1b82716 100644 --- a/rpm.spec +++ b/rpm.spec @@ -20,7 +20,7 @@ Name: rpm License: GPLv2+ Group: System/Packages -BuildRequires: file-devel libbz2-devel libelf-devel libselinux-devel lua-devel ncurses-devel xz-devel zlib-devel +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 @@ -28,8 +28,8 @@ Provides: rpminst PreReq: %insserv_prereq %fillup_prereq permissions AutoReqProv: on Summary: The RPM Package Manager -Version: 4.8.0 -Release: 32 +Version: 4.9.0 +Release: 1 Source: rpm-%{version}.tar.bz2 Source1: RPM-HOWTO.tar.bz2 Source2: RPM-Tips.html.tar.bz2 @@ -39,7 +39,7 @@ Source6: symset-table Source8: rpmconfigcheck Source9: sysconfig.services-rpm Source10: beecrypt-4.1.2.tar.bz2 -Source11: rpm-4.4.2.3-db.tar.bz2 +Source11: db-4.8.30.tar.bz2 Source12: baselibs.conf Patch1: beecrypt-4.1.2.diff Patch2: db.diff @@ -52,74 +52,69 @@ Patch14: nameversioncompare.diff Patch15: chownwarn.diff Patch16: dbfsync.diff Patch17: dbrointerruptable.diff -Patch18: diskspace.diff -Patch19: extcond.diff -Patch20: nodefattr.diff -Patch21: luaroot.diff -Patch22: refreshtestarch.diff -Patch23: rpmrctests.diff -Patch24: suspendlock.diff -Patch25: waitlock.diff -Patch26: dbprivate.diff -Patch27: weakdeps.diff -Patch28: autodeps.diff -Patch29: brp.diff -Patch30: brpcombress.diff -Patch31: checkfilesnoinfodir.diff -Patch32: finddebuginfo.diff -Patch33: findksyms.diff -Patch34: findlang.diff -Patch35: macrosin.diff -Patch36: modalias.diff -Patch37: platformin.diff -Patch38: rpmpopt.diff -Patch39: rpmrc.diff -Patch40: taggedfileindex.diff -Patch41: rpmqpack.diff -Patch42: convertdb1static.diff -Patch43: build.diff -Patch44: modalias-kernel_module.diff -Patch45: files.diff -Patch46: debugedit-comp-dir.diff -Patch47: perlprov.diff -Patch48: rpm-shorten-changelog.diff -Patch49: debugsource-package.diff -Patch50: whatrequires-doc.diff -Patch51: remove-brp-strips.diff -Patch52: requires-ge-macro.diff -Patch53: mimetype.diff -Patch54: debugedit-canon-fix.diff -Patch55: finddebuginfo-absolute-links.diff -Patch56: firmware.diff -Patch57: specfilemacro.diff -Patch58: modalias-encode.diff -Patch59: disttag-macro.diff -Patch60: buildidprov.diff -Patch61: debugsubpkg.diff -Patch62: debuglink.diff -Patch63: debuginfo-mono.patch -Patch64: allowufdio.diff -Patch65: lazystatfs.diff -Patch66: defclean.diff -Patch67: readlineofi.diff -Patch68: rpmdb-no-svc.diff -Patch69: modemuncher.diff -Patch70: repackage-nomd5.diff -Patch71: safeugid.diff -Patch72: resetdefattr.diff -Patch73: noprereqdeprec.diff -Patch74: tarrecordsize.diff -Patch75: backport.diff -Patch76: pythondeps.diff -Patch77: fontprovides.diff -Patch78: nosource.diff -Patch79: nosignature.diff -Patch80: fixsbits.diff -Patch81: pkgconfig-0.24.diff -Patch82: rpm-gst-provides.patch -Patch83: langnoc.diff -Patch84: initscriptsprov.diff -Patch85: remove-translations.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 +Patch49: mimetype.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 BuildRoot: %{_tmppath}/%{name}-%{version}-build # # avoid bootstrapping problem @@ -168,7 +163,9 @@ rm -rf sqlite rm -rf beecrypt tar xjf %{SOURCE10} 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 @@ -181,8 +178,7 @@ rm -f rpmdb/db.h %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 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 85 -%patch84 -p1 +%patch -P 80 #chmod 755 scripts/find-supplements{,.ksyms} #chmod 755 scripts/find-provides.ksyms scripts/find-requires.ksyms #chmod 755 scripts/firmware.prov @@ -193,6 +189,8 @@ 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 %build export CFLAGS="$RPM_OPT_FLAGS -fno-strict-aliasing -ffunction-sections" @@ -203,14 +201,14 @@ export CFLAGS="-g -O0 -fno-strict-aliasing" #cp -p /usr/share/gettext/config.rpath . cp autogen.sh beecrypt pushd beecrypt -./autogen.sh --with-pic +./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} rm po/de.gmo -make %{?_smp_mflags} +make #%{?_smp_mflags} make convertdb1 %install @@ -283,6 +281,7 @@ 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 @@ -298,9 +297,8 @@ 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 -if test -s var/lib/rpm/Filemd5s -a ! -e var/lib/rpm/Filedigests ; then - ln var/lib/rpm/Filemd5s var/lib/rpm/Filedigests -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} @@ -319,9 +317,11 @@ fi /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.* %doc %{_mandir}/man[18]/*.[18]* %dir /var/lib/rpm %verify(not mode) %dir %attr(755,root,root) /usr/src/packages/BUILD @@ -339,6 +339,7 @@ fi %{_libdir}/librpm.so %{_libdir}/librpmbuild.so %{_libdir}/librpmio.so + %{_libdir}/librpmsign.so %{_libdir}/pkgconfig/rpm.pc %changelog diff --git a/rpmdb-no-svc.diff b/rpmdb-no-svc.diff deleted file mode 100644 index f2a4787..0000000 --- a/rpmdb-no-svc.diff +++ /dev/null @@ -1,19 +0,0 @@ ---- lib/Makefile.am.orig 2010-03-26 09:34:16.000000000 +0000 -+++ lib/Makefile.am 2010-03-26 09:34:39.000000000 +0000 -@@ -148,16 +148,6 @@ rpmdb_stat_LDADD = \ - $(top_builddir)/db3/util_sig.o \ - librpm.la - --rpmlibexec_PROGRAMS += rpmdb_svc --rpmdb_svc_SOURCES = --rpmdb_svc_LDADD = \ -- $(top_builddir)/db3/db_server_proc.o \ -- $(top_builddir)/db3/db_server_svc.o \ -- $(top_builddir)/db3/db_server_util.o \ -- $(top_builddir)/db3/gen_db_server.o \ -- $(top_builddir)/db3/util_log.o \ -- librpm.la -- - rpmlibexec_PROGRAMS += rpmdb_upgrade - rpmdb_upgrade_SOURCES = - rpmdb_upgrade_LDADD = \ diff --git a/rpmdb_get_open_flags.diff b/rpmdb_get_open_flags.diff new file mode 100644 index 0000000..eab0b19 --- /dev/null +++ b/rpmdb_get_open_flags.diff @@ -0,0 +1,13 @@ +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 7809a60..0a00ea8 100644 --- a/rpmpopt.diff +++ b/rpmpopt.diff @@ -1,14 +1,8 @@ ---- - rpmpopt.in | 47 ++++++++++++++++++++++------------------------- - 1 file changed, 22 insertions(+), 25 deletions(-) - -Index: rpmpopt.in -=================================================================== ---- rpmpopt.in.orig -+++ rpmpopt.in -@@ -91,7 +91,8 @@ Signature : %|DSAHEADER?{%{DSAHEADER:p - %|PACKAGER?{Packager : %{PACKAGER}\n}|\ +--- ./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} ] %|URL?{URL : %{URL}\n}|\ + %|BUGURL?{Bug URL : %{BUGURL}\n}|\ Summary : %{SUMMARY}\n\ -Description :\n%{DESCRIPTION}\n' \ +Description :\n%{DESCRIPTION}\n\ diff --git a/rpmqpack.diff b/rpmqpack.diff index ff79989..63605be 100644 --- a/rpmqpack.diff +++ b/rpmqpack.diff @@ -1,13 +1,11 @@ Provide rpmqpack, a fast way to list all installed packages are check if some package is installed. This is a hack. -Index: Makefile.am -=================================================================== ---- Makefile.am.orig -+++ Makefile.am -@@ -139,6 +139,10 @@ check_PROGRAMS += rpmsort - rpmsort_SOURCES = tools/rpmsort.c - rpmsort_LDADD = lib/librpm.la +--- ./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 + + dist_bin_SCRIPTS = scripts/gendiff +bin_PROGRAMS += rpmqpack +rpmqpack_SOURCES = rpmqpack.c @@ -16,23 +14,19 @@ Index: Makefile.am rpmconfig_DATA = rpmrc rpmrc: $(top_srcdir)/rpmrc.in @$(SED) \ -Index: doc/Makefile.am -=================================================================== ---- doc/Makefile.am.orig -+++ doc/Makefile.am -@@ -7,7 +7,7 @@ man_man1_DATA = gendiff.1 - EXTRA_DIST += $(man_man1_DATA) +--- ./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) man_man8dir = $(mandir)/man8 --man_man8_DATA = rpm.8 rpmbuild.8 rpmdeps.8 rpmgraph.8 rpm2cpio.8 -+man_man8_DATA = rpm.8 rpmbuild.8 rpmdeps.8 rpmgraph.8 rpm2cpio.8 rpmqpack.8 + 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) man_fr_man8dir = $(mandir)/fr/man8 -Index: doc/rpmqpack.8 -=================================================================== ---- /dev/null -+++ doc/rpmqpack.8 +--- ./doc/rpmqpack.8.orig 2011-05-11 15:15:27.000000000 +0000 ++++ ./doc/rpmqpack.8 2011-05-11 15:15:27.000000000 +0000 @@ -0,0 +1,25 @@ +.TH RPMQPACK 8 "Mar 2002" +.SH NAME @@ -59,10 +53,8 @@ Index: doc/rpmqpack.8 + +.SH AUTHOR +Michael Schroeder -Index: rpmqpack.c -=================================================================== ---- /dev/null -+++ rpmqpack.c +--- ./rpmqpack.c.orig 2011-05-11 15:15:27.000000000 +0000 ++++ ./rpmqpack.c 2011-05-11 15:15:27.000000000 +0000 @@ -0,0 +1,59 @@ +#include +#include @@ -88,7 +80,7 @@ Index: rpmqpack.c + perror("db_create"); + exit(1); + } -+ if (db->open(db, 0, "/var/lib/rpm/Name", 0, DB_HASH, DB_RDONLY, 0664)) ++ if (db->open(db, 0, "/var/lib/rpm/Name", 0, DB_UNKNOWN, DB_RDONLY, 0664)) + { + perror("db->open"); + exit(1); diff --git a/rpmrctests.diff b/rpmrctests.diff index 4045e56..34e42fe 100644 --- a/rpmrctests.diff +++ b/rpmrctests.diff @@ -1,9 +1,7 @@ Patch machine detection code: detect transmeta, rename parisc to hppa. [#52713] -Index: lib/rpmrc.c -=================================================================== ---- lib/rpmrc.c.orig -+++ lib/rpmrc.c +--- ./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 @@ #include "system.h" @@ -12,9 +10,9 @@ Index: lib/rpmrc.c -#include -#endif - #include /* XXX for /etc/rpm/platform contents */ - -@@ -784,6 +781,14 @@ static inline int RPMClass(void) + #if HAVE_SYS_UTSNAME_H + #include +@@ -788,6 +785,14 @@ static inline int RPMClass(void) cpu = (tfms>>8)&15; @@ -29,7 +27,7 @@ Index: lib/rpmrc.c sigaction(SIGILL, &oldsa, NULL); if (cpu < 6) -@@ -920,15 +925,6 @@ static int is_geode() +@@ -924,15 +929,6 @@ static int is_geode() } #endif @@ -45,7 +43,7 @@ Index: lib/rpmrc.c /** */ static void defaultMachine(const char ** arch, -@@ -1055,6 +1051,11 @@ static void defaultMachine(const char ** +@@ -1059,6 +1055,11 @@ static void defaultMachine(const char ** /* big endian */ strcpy(un.machine, "mips"); # endif diff --git a/safeugid.diff b/safeugid.diff index f1e7509..859dd02 100644 --- a/safeugid.diff +++ b/safeugid.diff @@ -1,50 +1,33 @@ ---- lib/fsm.c.orig 2010-03-26 15:06:20.000000000 +0000 -+++ lib/fsm.c 2010-03-26 15:16:31.000000000 +0000 -@@ -736,22 +736,26 @@ static int fsmMapAttrs(FSM_t fsm) - - /* this check is pretty moot, rpmfi accessors check array bounds etc */ - if (fi && i >= 0 && i < rpmfiFC(fi)) { -+ rpmts ts = fsmGetTs(fsm); - mode_t finalMode = rpmfiFModeIndex(fi, i); - dev_t finalRdev = rpmfiFRdevIndex(fi, i); - time_t finalMtime = rpmfiFMtimeIndex(fi, i); - const char *user = rpmfiFUserIndex(fi, i); - const char *group = rpmfiFGroupIndex(fi, i); -+ int safe = rpmtsChrootDone(ts); -+ extern int unameToUid_safe(const char *, gid_t *, int); -+ extern int gnameToGid_safe(const char *, gid_t *, int); - uid_t uid = 0; - gid_t gid = 0; - -- if (user && unameToUid(user, &uid)) { -+ if (user && unameToUid_safe(user, &uid, safe)) { - if (fsm->goal == FSM_PKGINSTALL) - rpmlog(RPMLOG_WARNING, - _("user %s does not exist - using root\n"), user); - finalMode &= ~S_ISUID; /* turn off suid bit */ - } - -- if (group && gnameToGid(group, &gid)) { -+ if (group && gnameToGid_safe(group, &gid, safe)) { - if (fsm->goal == FSM_PKGINSTALL) - rpmlog(RPMLOG_WARNING, - _("group %s does not exist - using root\n"), group); -@@ -773,8 +777,7 @@ static int fsmMapAttrs(FSM_t fsm) - if (fsm->mapFlags & CPIO_MAP_GID) - st->st_gid = gid; - -- { rpmts ts = fsmGetTs(fsm); -- -+ { - /* - * Set file digest (if not disabled). - */ ---- lib/misc.c.orig 2009-12-07 14:36:49.000000000 +0000 -+++ lib/misc.c 2010-03-26 15:26:05.000000000 +0000 -@@ -14,6 +14,42 @@ const char * const RPMVERSION = VERSION; - - #include "debug.h" +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 @@ -80,50 +63,30 @@ + fclose(fp); + return -1; +} ++#endif + - /* unameToUid(), uidTouname() and the group variants are really poorly - implemented. They really ought to use hash tables. I just made the - guess that most files would be owned by root or the same person/group -@@ -21,11 +57,12 @@ const char * const RPMVERSION = VERSION; - is looked up via getpw() and getgr() functions. If this performs - too poorly I'll have to implement it properly :-( */ - --int unameToUid(const char * thisUname, uid_t * uid) -+int unameToUid_safe(const char * thisUname, uid_t * uid, int safe) - { - static char * lastUname = NULL; - static size_t lastUnameLen = 0; - static size_t lastUnameAlloced; -+ static int lastUnameSafe; - static uid_t lastUid; - struct passwd * pwent; - size_t thisUnameLen; -@@ -38,6 +75,11 @@ static char * lastUname = NULL; - return 0; - } - -+ if (safe != lastUnameSafe) { -+ lastUnameLen = 0; -+ lastUnameSafe = safe; -+ } -+ - thisUnameLen = strlen(thisUname); - if (lastUname == NULL || thisUnameLen != lastUnameLen || - !rstreq(thisUname, lastUname)) -@@ -48,15 +90,21 @@ static char * lastUname = NULL; + /* + * 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); +- strcpy(lastUname, thisUname); - pwent = getpwnam(thisUname); - if (pwent == NULL) { - /* FIX: shrug */ - endpwent(); -+ if (safe) { -+ int uid = safe_lookup("/etc/passwd", thisUname); ++#if defined(__GLIBC__) ++ if (inchroot) { ++ int uid = safe_lookup("/etc/passwd", thisUname); + if (uid < 0) + return -1; -+ lastUid = (uid_t)uid; -+ } else { ++ lastUid = uid; ++ } else ++#endif ++ { pwent = getpwnam(thisUname); - if (pwent == NULL) return -1; + if (pwent == NULL) { @@ -134,103 +97,117 @@ + } + lastUid = pwent->pw_uid; } -- + - lastUid = pwent->pw_uid; ++ strcpy(lastUname, thisUname); ++ lastUnameLen = thisUnameLen; } *uid = lastUid; -@@ -64,11 +112,18 @@ static char * lastUname = NULL; - return 0; - } - --int gnameToGid(const char * thisGname, gid_t * gid) -+int unameToUid(const char * thisUname, uid_t * uid) -+{ -+ return unameToUid_safe(thisUname, uid, 0); -+} -+ -+ -+int gnameToGid_safe(const char * thisGname, gid_t * gid, int safe) - { - static char * lastGname = NULL; - static size_t lastGnameLen = 0; - static size_t lastGnameAlloced; -+ static int lastGnameSafe; - static gid_t lastGid; - size_t thisGnameLen; - struct group * grent; -@@ -81,6 +136,11 @@ static char * lastGname = NULL; - return 0; - } - -+ if (safe != lastGnameSafe) { -+ lastGnameLen = 0; -+ lastGnameSafe = safe; -+ } -+ - thisGnameLen = strlen(thisGname); - if (lastGname == NULL || thisGnameLen != lastGnameLen || - !rstreq(thisGname, lastGname)) -@@ -91,25 +151,34 @@ static char * lastGname = NULL; +@@ -111,18 +163,29 @@ int rpmugGid(const char * thisGname, gid + lastGnameAlloced = thisGnameLen + 10; + lastGname = xrealloc(lastGname, lastGnameAlloced); /* XXX memory leak */ } - strcpy(lastGname, thisGname); +- strcpy(lastGname, thisGname); - grent = getgrnam(thisGname); - if (grent == NULL) { - /* FIX: shrug */ - endgrent(); -+ if (safe) { -+ int gid = safe_lookup("/etc/group", thisGname); ++#if defined(__GLIBC__) ++ if (inchroot) { ++ int gid = safe_lookup("/etc/group", thisGname); + if (gid < 0) + return -1; -+ lastGid = (gid_t)gid; -+ } else { ++ lastGid = gid; ++ } else ++#endif ++ { grent = getgrnam(thisGname); if (grent == NULL) { -- /* XXX The filesystem package needs group/lock w/o getgrnam. */ -- if (rstreq(thisGname, "lock")) { -- *gid = lastGid = 54; -- return 0; -- } else -- if (rstreq(thisGname, "mail")) { -- *gid = lastGid = 12; -- return 0; -- } else - return -1; + /* FIX: shrug */ + endgrent(); + grent = getgrnam(thisGname); + if (grent == NULL) { -+#ifdef STRANGE_FEDORA_HACKS -+ /* XXX The filesystem package needs group/lock w/o getgrnam. */ -+ if (rstreq(thisGname, "lock")) { -+ *gid = lastGid = 54; -+ return 0; -+ } else -+ if (rstreq(thisGname, "mail")) { -+ *gid = lastGid = 12; -+ return 0; -+ } else -+#endif + return -1; + } } + lastGid = grent->gr_gid; } - lastGid = grent->gr_gid; ++ strcpy(lastGname, thisGname); ++ lastGnameLen = thisGnameLen; } *gid = lastGid; -@@ -117,6 +186,12 @@ static char * lastGname = NULL; - return 0; - } - -+int gnameToGid(const char * thisGname, gid_t * gid) -+{ -+ return gnameToGid_safe(thisGname, gid, 0); -+} -+ -+ - const char * uidToUname(uid_t uid) +@@ -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/specfilemacro.diff b/specfilemacro.diff index 739e3cb..a9663dc 100644 --- a/specfilemacro.diff +++ b/specfilemacro.diff @@ -1,8 +1,6 @@ -Index: build/parseSpec.c -=================================================================== ---- build/parseSpec.c.orig -+++ build/parseSpec.c -@@ -425,6 +425,7 @@ int parseSpec(rpmts ts, const char *spec +--- ./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); diff --git a/suspendlock.diff b/suspendlock.diff index 3346b01..f4c981b 100644 --- a/suspendlock.diff +++ b/suspendlock.diff @@ -2,35 +2,39 @@ Suspend exclusive database lock when scriptlets get called, allowing read access in scriptlets. Only needed for DB_PRIVATE (aka global) locking. -I hijacked the dbiSync function for this because I did not want -to change the ABI. - ---- ./lib/backend/db3.c.orig 2010-03-25 14:35:39.000000000 +0000 -+++ ./lib/backend/db3.c 2010-03-25 14:44:42.000000000 +0000 -@@ -208,11 +208,17 @@ errxit: +--- ./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; } - -+static int db3SuspendResumeLock(dbiIndex dbi, int mode); + - static int db3sync(dbiIndex dbi, unsigned int flags) - { - DB * db = dbi->dbi_db; - int rc = 0; - -+ 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); - rc = cvtdberr(dbi, "db->sync", rc, _debug); -@@ -848,6 +854,48 @@ static int db3open(rpmdb rpmdb, rpmTag r - return rc; - } - -+static int -+db3SuspendResumeLock(dbiIndex dbi, int mode) ++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; @@ -39,88 +43,87 @@ to change the ABI. + + if (!dbi->dbi_lockdbfd) + return 0; -+ if (!(dbi->dbi_mode & (O_RDWR|O_WRONLY))) ++ if (!(dbi->dbi_rpmdb->db_mode & (O_RDWR|O_WRONLY))) + return 0; -+ if (dbi->dbi_use_dbenv && _lockdbfd == 0) ++ if (_lockdbfd == 0) + return 0; + if (!(dbi->dbi_db->fd(dbi->dbi_db, &fdno) == 0 && fdno >= 0)) + return 1; -+ if (mode == 0) { ++ 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_RDLCK; -+ rc = fcntl(fdno, F_SETLK, (void *) &l); -+ if (rc) -+ rpmlog(RPMLOG_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) -+ rpmlog(RPMLOG_WARNING, _("waiting to reestablish exclusive database lock\n")); -+ } ++ 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; +} + - /** \ingroup db3 - */ +--- ./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 ---- ./lib/psm.c.orig 2010-03-25 14:43:29.000000000 +0000 -+++ ./lib/psm.c 2010-03-25 14:43:41.000000000 +0000 -@@ -754,6 +754,8 @@ static rpmRC runScript(rpmpsm psm, Heade - goto exit; - } + 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); + rpmtsSuspendResumeDBLock(psm->ts, 0); -+ - xx = rpmsqFork(&psm->sq); - if (psm->sq.child == 0) { - rpmlog(RPMLOG_DEBUG, "%s: %s\texecv(%s) pid %d\n", -@@ -768,6 +770,8 @@ static rpmRC runScript(rpmpsm psm, Heade - - (void) psmWait(psm); - + 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); -+ - if (psm->sq.reaped < 0) { - rpmlog(RPMLOG_ERR, _("%s scriptlet failed, waitpid(%d) rc %d: %s\n"), - sname, psm->sq.child, psm->sq.reaped, strerror(errno)); ---- ./lib/rpmdb.c.orig 2010-03-25 14:36:57.000000000 +0000 -+++ ./lib/rpmdb.c 2010-03-25 14:43:41.000000000 +0000 -@@ -903,6 +903,21 @@ int rpmdbSync(rpmdb db) - return rc; + + /* + * 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) +{ -+ 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; ++ return dbiForeach(db->_dbi, mode ? dbiResumeDBLock : dbiSuspendDBLock, 0); +} + - /* FIX: dbTemplate structure assignment */ - static - rpmdb newRpmdb(const char * root, ---- ./lib/rpmts.c.orig 2009-12-17 09:05:37.000000000 +0000 -+++ ./lib/rpmts.c 2010-03-25 14:43:41.000000000 +0000 -@@ -89,6 +89,11 @@ int rpmtsOpenDB(rpmts ts, int dbmode) + 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) return rc; } @@ -131,16 +134,14 @@ to change the ABI. + int rpmtsInitDB(rpmts ts, int dbmode) { - void *lock = rpmtsAcquireLock(ts); ---- ./lib/rpmts.h.orig 2009-12-17 09:05:37.000000000 +0000 -+++ ./lib/rpmts.h 2010-03-25 14:43:41.000000000 +0000 -@@ -469,6 +469,10 @@ rpmdb rpmtsGetRdb(rpmts ts); + 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); -+int rpmtsSuspendResumeDBLock(rpmts ts, int mode) -+ /*@globals fileSystem @*/ -+ /*@modifies fileSystem @*/; ++int rpmtsSuspendResumeDBLock(rpmts ts, int mode); + /** \ingroup rpmts * Return number of (ordered) transaction set elements. diff --git a/taggedfileindex.diff b/taggedfileindex.diff index 52fe192..7fc306d 100644 --- a/taggedfileindex.diff +++ b/taggedfileindex.diff @@ -1,181 +1,14 @@ -The taggedfileindex patch. Speeds up database searches, but breaks -fingerprint semantics. -rh#103204 - ---- ./lib/rpmdb.c.orig 2010-03-25 14:43:41.000000000 +0000 -+++ ./lib/rpmdb.c 2010-03-25 15:15:14.000000000 +0000 -@@ -1122,6 +1122,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 -@@ -1181,6 +1191,11 @@ static int rpmdbFindByFile(rpmdb db, con - 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 -@@ -2182,7 +2197,7 @@ void rpmdbSortIterator(rpmdbMatchIterato - } - } - --static int rpmdbGrowIterator(rpmdbMatchIterator mi) -+static int rpmdbGrowIterator(rpmdbMatchIterator mi, unsigned int tag) - { - DBC * dbcursor; - DBT * key; -@@ -2232,6 +2247,27 @@ static int rpmdbGrowIterator(rpmdbMatchI - dbcursor = NULL; - #endif - -+ if (tag) { -+ int i, j; -+ /* prune the set against the tag */ -+ for (i = j = 0; i < set->count; i++) { -+ 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++; -+ } -+ set->count = j; -+ if (j == 0) { -+ set = dbiFreeIndexSet(set); -+ return DB_NOTFOUND; -+ } -+ } -+ - if (mi->mi_set == NULL) { - mi->mi_set = set; - } else { -@@ -2413,7 +2449,15 @@ int rpmdbExtendIterator(rpmdbMatchIterat - { - mi->mi_key.data = (void *) keyp; - mi->mi_key.size = keylen ? keylen : strlen(keyp); -- return rpmdbGrowIterator(mi); -+ return rpmdbGrowIterator(mi, 0); -+} -+ -+int rpmdbExtendIteratorDirtag(rpmdbMatchIterator mi, -+ const void * keyp, size_t keylen, const char *dirname) -+{ -+ mi->mi_key.data = (void *) keyp; -+ mi->mi_key.size = keylen ? keylen : strlen(keyp); -+ return rpmdbGrowIterator(mi, dirname ? taghash(dirname) : 0); - } - - /* -@@ -2808,8 +2852,16 @@ int rpmdbAdd(rpmdb db, int iid, Header h - - if (hdrNum) - { -+ struct rpmtd_s dn, di; -+ const char ** dirNames; -+ uint32_t * dirIndexes; - dbiIndexItem rec = dbiIndexNewItem(hdrNum, 0); - -+ headerGet(h, RPMTAG_DIRNAMES, &dn, HEADERGET_MINMEM); -+ headerGet(h, RPMTAG_DIRINDEXES, &di, HEADERGET_MINMEM); -+ dirNames = dn.data; -+ dirIndexes = di.data; -+ - if (dbiTags.tags != NULL) - for (dbix = 0; dbix < dbiTags.max; dbix++) { - rpmTag rpmtag; -@@ -2901,6 +2953,10 @@ int rpmdbAdd(rpmdb db, int iid, Header h - */ - i = rec->tagNum = rpmtdGetIndex(&tagdata); - switch (rpmtag) { -+ case RPMTAG_BASENAMES: -+ if (i < 0x010000) -+ rec->tagNum |= taghash(dirNames[dirIndexes[i]]); -+ break; - case RPMTAG_REQUIRENAME: { - /* Filter out install prerequisites. */ - rpm_flag_t *rflag = rpmtdNextUint32(&reqflags); -@@ -2986,6 +3042,9 @@ cont: - if (ret == 0) { - headerSetInstance(h, hdrNum); +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; } -+ -+ rpmtdFreeData(&dn); -+ rpmtdFreeData(&di); - } - - exit: ---- ./lib/rpmdb_internal.h.orig 2009-12-07 14:36:49.000000000 +0000 -+++ ./lib/rpmdb_internal.h 2010-03-25 15:14:38.000000000 +0000 -@@ -542,6 +542,9 @@ const char *rpmdbHome(rpmdb db); - int rpmdbExtendIterator(rpmdbMatchIterator mi, - const void * keyp, size_t keylen); - -+int rpmdbExtendIteratorDirtag(rpmdbMatchIterator mi, -+ const void * keyp, size_t keylen, const char *); -+ - /** \ingroup rpmdb - * sort the iterator by (recnum, filenum) - * Return database iterator. ---- ./lib/transaction.c.orig 2010-03-25 14:38:27.000000000 +0000 -+++ ./lib/transaction.c 2010-03-25 15:14:38.000000000 +0000 -@@ -848,9 +848,12 @@ rpmdbMatchIterator rpmFindBaseNamesInDB( - rpmdbMatchIterator mi; - int xx; - const char * baseName; -+ const char * dirName; - -+#if 0 - rpmStringSet baseNames = rpmStringSetCreate(fileCount, - hashFunctionString, strcmp, NULL); -+#endif - - mi = rpmdbInitIterator(rpmtsGetRdb(ts), RPMTAG_BASENAMES, NULL, 0); - -@@ -868,18 +871,25 @@ rpmdbMatchIterator rpmFindBaseNamesInDB( - while (rpmfiNext(fi) >= 0) { - size_t keylen; - baseName = rpmfiBN(fi); -+ dirName = rpmfiDN(fi); -+#if 0 - if (rpmStringSetHasEntry(baseNames, baseName)) - continue; -+#endif - - keylen = strlen(baseName); - if (keylen == 0) - keylen++; /* XXX "/" fixup. */ -- xx = rpmdbExtendIterator(mi, baseName, keylen); -+ xx = rpmdbExtendIteratorDirtag(mi, baseName, keylen, dirName); -+#if 0 - rpmStringSetAddEntry(baseNames, baseName); -+#endif - } - } - pi = rpmtsiFree(pi); -+#if 0 - rpmStringSetFree(baseNames); -+#endif - - rpmdbSortIterator(mi); - /* iterator is now sorted by (recnum, filenum) */ diff --git a/tarrecordsize.diff b/tarrecordsize.diff deleted file mode 100644 index 7b79d61..0000000 --- a/tarrecordsize.diff +++ /dev/null @@ -1,17 +0,0 @@ ---- ./build.c.orig 2010-04-07 14:56:36.000000000 +0000 -+++ ./build.c 2010-04-07 14:58:52.000000000 +0000 -@@ -126,7 +126,13 @@ static char * getTarSpec(const char *arg - if (!(fp = popen(cmd, "r"))) { - rpmlog(RPMLOG_ERR, _("Failed to open tar pipe: %m\n")); - } else { -- char *fok = fgets(tarbuf, sizeof(tarbuf) - 1, fp); -+ char *fok; -+ for (;;) { -+ fok = fgets(tarbuf, sizeof(tarbuf) - 1, fp); -+ /* tar sometimes prints "tar: Record size = 16" messages */ -+ if (!fok || strncmp(fok, "tar: ", 5) != 0) -+ break; -+ } - pclose(fp); - gotspec = (fok != NULL) && isSpecFile(tmpSpecFile); - } diff --git a/verify_p.diff b/verify_p.diff new file mode 100644 index 0000000..8eeea06 --- /dev/null +++ b/verify_p.diff @@ -0,0 +1,49 @@ +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/waitlock.diff b/waitlock.diff index d794d21..8a811c5 100644 --- a/waitlock.diff +++ b/waitlock.diff @@ -1,97 +1,104 @@ Fix global (DB_PRIVATE) lock code: fix recursion counter, retry failed lock operations for up to 3 minutes. ---- ./lib/backend/db3.c.orig 2010-03-25 14:44:42.000000000 +0000 -+++ ./lib/backend/db3.c 2010-03-25 14:52:05.000000000 +0000 -@@ -394,6 +394,8 @@ static int db3stat(dbiIndex dbi, unsigne +--- ./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; } +static int _lockdbfd = 0; + - static int db3close(dbiIndex dbi, unsigned int flags) + int dbiClose(dbiIndex dbi, unsigned int flags) { - rpmdb rpmdb = dbi->dbi_rpmdb; -@@ -414,6 +416,9 @@ static int db3close(dbiIndex dbi, unsign + rpmdb rdb = dbi->dbi_rpmdb; +@@ -451,6 +453,8 @@ int dbiClose(dbiIndex dbi, unsigned int + rpmlog(RPMLOG_DEBUG, "closed db index %s/%s\n", dbhome, dbi->dbi_file); - -+ if (dbi->dbi_lockdbfd && -+ _lockdbfd) ++ if (dbi->dbi_lockdbfd && _lockdbfd) + _lockdbfd--; } - if (rpmdb->db_dbenv != NULL && dbi->dbi_use_dbenv) { -@@ -645,8 +651,6 @@ static int db3open(rpmdb rpmdb, rpmTag r - } + 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; - if (rc == 0) { -- static int _lockdbfd = 0; -- - rc = db_create(&db, dbenv, dbi->dbi_cflags); - rc = cvtdberr(dbi, "db_create", rc, _debug); - if (rc == 0 && db != NULL) { -@@ -810,6 +814,7 @@ static int db3open(rpmdb rpmdb, rpmTag r - if (!(db->fd(db, &fdno) == 0 && fdno >= 0)) { - rc = 1; - } else { -+ int tries; - struct flock l; - memset(&l, 0, sizeof(l)); - l.l_whence = 0; -@@ -819,24 +824,39 @@ static int db3open(rpmdb rpmdb, rpmTag r - ? F_RDLCK : F_WRLCK; - 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); -- rpmlog( (rc ? RPMLOG_ERR : RPMLOG_WARNING), -- _("cannot get %s lock on %s/%s\n"), -- ((dbi->dbi_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) { -+ 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) -+ rpmlog(RPMLOG_WARNING, _("waiting for %s lock on %s/%s\n"), ((dbi->dbi_mode & (O_RDWR|O_WRONLY)) ? _("exclusive") : _("shared")), dbhome, dbi->dbi_file); -+ ts.tv_sec = (time_t)0; -+ ts.tv_nsec = 100000000; -+ if (tries < 10*60*3) { -+ nanosleep(&ts, (struct timespec *)0); -+ continue; -+ } -+ } -+ rpmlog( (rc ? RPMLOG_ERR : RPMLOG_WARNING), -+ _("cannot get %s lock on %s/%s\n"), -+ ((dbi->dbi_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 && dbi->dbi_use_dbenv) -+ _lockdbfd--; - } +- 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; } } + 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 7e12a74..f46e0cc 100644 --- a/weakdeps.diff +++ b/weakdeps.diff @@ -14,27 +14,18 @@ B) use RPMSENSE_STRONG to support a "strong" version, "Recommends" Needs extcond.diff for query operations. ---- ./build/parsePreamble.c.orig 2009-12-17 09:05:55.000000000 +0000 -+++ ./build/parsePreamble.c 2010-03-25 14:56:24.000000000 +0000 -@@ -124,6 +124,8 @@ static struct tokenBits_s const installS - { "post", RPMSENSE_SCRIPT_POST }, - { "rpmlib", RPMSENSE_RPMLIB }, +--- ./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 { "verify", RPMSENSE_SCRIPT_VERIFY }, -+ { "hint", RPMSENSE_MISSINGOK }, -+ { "strong", RPMSENSE_STRONG }, + { "pretrans", RPMSENSE_PRETRANS }, + { "posttrans", RPMSENSE_POSTTRANS }, ++ { "hint", RPMSENSE_MISSINGOK }, ++ { "strong", RPMSENSE_STRONG }, { NULL, 0 } }; -@@ -134,6 +136,8 @@ static const struct tokenBits_s const bu - { "build", RPMSENSE_SCRIPT_BUILD }, - { "install", RPMSENSE_SCRIPT_INSTALL }, - { "clean", RPMSENSE_SCRIPT_CLEAN }, -+ { "hint", RPMSENSE_MISSINGOK }, -+ { "strong", RPMSENSE_STRONG }, - { NULL, 0 } - }; - -@@ -649,6 +653,18 @@ static int handlePreambleTag(rpmSpec spe +@@ -790,6 +792,18 @@ static int handlePreambleTag(rpmSpec spe if ((rc = parseRCPOT(spec, pkg, field, tag, 0, tagflags))) return rc; break; @@ -53,10 +44,10 @@ Needs extcond.diff for query operations. case RPMTAG_EXCLUDEARCH: case RPMTAG_EXCLUSIVEARCH: case RPMTAG_EXCLUDEOS: -@@ -748,6 +764,14 @@ static struct PreambleRec_s const preamb - {RPMTAG_DOCDIR, 0, 0, LEN_AND_STR("docdir")}, - {RPMTAG_DISTTAG, 0, 0, LEN_AND_STR("disttag")}, +@@ -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")}, @@ -68,45 +59,51 @@ Needs extcond.diff for query operations. {0, 0, 0, 0} }; ---- ./build/parseReqs.c.orig 2009-12-17 09:05:55.000000000 +0000 -+++ ./build/parseReqs.c 2010-03-25 14:53:47.000000000 +0000 -@@ -85,6 +85,14 @@ rpmRC parseRCPOT(rpmSpec spec, Package p - tagflags |= RPMSENSE_ANY; +--- ./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; h = spec->buildRestrictions; break; + case RPMTAG_SUGGESTSFLAGS: ++ nametag = RPMTAG_SUGGESTSNAME; ++ break; + case RPMTAG_ENHANCESFLAGS: -+ h = pkg->header; ++ nametag = RPMTAG_ENHANCESNAME; + break; + case RPMTAG_BUILDSUGGESTS: ++ nametag = RPMTAG_SUGGESTSNAME; ++ h = spec->buildRestrictions; ++ break; + case RPMTAG_BUILDENHANCES: -+ h = spec->buildRestrictions; -+ break; - default: - case RPMTAG_REQUIREFLAGS: - tagflags |= RPMSENSE_ANY; ---- ./build/reqprov.c.orig 2009-12-07 14:36:49.000000000 +0000 -+++ ./build/reqprov.c 2010-03-25 14:53:47.000000000 +0000 -@@ -75,6 +75,16 @@ int addReqProv(rpmSpec spec, Header h, r - flagtag = RPMTAG_TRIGGERFLAGS; ++ 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, indextag = RPMTAG_TRIGGERINDEX; extra = Flags & RPMSENSE_TRIGGER; -+ } else if (tagN == RPMTAG_SUGGESTSFLAGS || tagN == RPMTAG_BUILDSUGGESTS) { -+ nametag = RPMTAG_SUGGESTSNAME; + break; ++ case RPMTAG_SUGGESTSNAME: + versiontag = RPMTAG_SUGGESTSVERSION; + flagtag = RPMTAG_SUGGESTSFLAGS; + extra = Flags & _ALL_REQUIRES_MASK; -+ } else if (tagN == RPMTAG_ENHANCESFLAGS || tagN == RPMTAG_BUILDENHANCES) { -+ nametag = RPMTAG_ENHANCESNAME; ++ break; ++ case RPMTAG_ENHANCESNAME: + versiontag = RPMTAG_ENHANCESVERSION; + flagtag = RPMTAG_ENHANCESFLAGS; + extra = Flags & _ALL_REQUIRES_MASK; - } else { - nametag = RPMTAG_REQUIRENAME; - versiontag = RPMTAG_REQUIREVERSION; ---- ./build/rpmfc.c.orig 2009-12-09 13:37:25.000000000 +0000 -+++ ./build/rpmfc.c 2010-03-25 14:53:47.000000000 +0000 -@@ -1405,6 +1405,12 @@ static struct DepMsg_s depMsgs[] = { ++ 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[] = { { "Obsoletes", { "%{?__find_obsoletes}", NULL, NULL, NULL }, RPMTAG_OBSOLETENAME, RPMTAG_OBSOLETEVERSION, RPMTAG_OBSOLETEFLAGS, 0, -1 }, @@ -119,7 +116,7 @@ Needs extcond.diff for query operations. { NULL, { NULL, NULL, NULL, NULL }, 0, 0, 0, 0, 0 } }; -@@ -1490,6 +1496,14 @@ static int rpmfcGenerateDependsHelper(co +@@ -1160,6 +1166,14 @@ static rpmRC rpmfcGenerateDependsHelper( failnonzero = 0; tagflags = RPMSENSE_FIND_REQUIRES; break; @@ -134,9 +131,9 @@ Needs extcond.diff for query operations. default: continue; break; ---- ./lib/formats.c.orig 2009-12-07 14:36:49.000000000 +0000 -+++ ./lib/formats.c 2010-03-25 15:00:15.000000000 +0000 -@@ -601,6 +601,24 @@ static char * depflagsFormat(rpmtd td, c +--- ./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; } @@ -161,16 +158,17 @@ Needs extcond.diff for query operations. /** * Return tag container array size. * @param td tag data container -@@ -738,5 +756,6 @@ static const struct headerFormatFunc_s r - { RPMTD_FORMAT_ARRAYSIZE, "arraysize", arraysizeFormat }, - { RPMTD_FORMAT_FSTATE, "fstate", fstateFormat }, +@@ -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 2009-12-07 14:36:49.000000000 +0000 -+++ ./lib/rpmds.c 2010-03-25 14:53:47.000000000 +0000 -@@ -66,6 +66,10 @@ static int dsType(rpmTag tag, + +--- ./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; @@ -181,28 +179,28 @@ Needs extcond.diff for query operations. } else { rc = 1; } ---- ./lib/rpmds.h.orig 2010-03-24 16:47:28.000000000 +0000 -+++ ./lib/rpmds.h 2010-03-25 14:53:47.000000000 +0000 -@@ -55,7 +55,7 @@ typedef enum rpmsenseFlags_e { +--- ./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. */ RPMSENSE_KEYRING = (1 << 26), -- RPMSENSE_PATCHES = (1 << 27), -+ RPMSENSE_STRONG = (1 << 27), +- /* bit 27 unused */ ++ RPMSENSE_STRONG = (1 << 27), RPMSENSE_CONFIG = (1 << 28) - } rpmsenseFlags; + }; -@@ -74,6 +74,7 @@ typedef enum rpmsenseFlags_e { +@@ -69,6 +69,7 @@ typedef rpmFlags rpmsenseFlags; RPMSENSE_SCRIPT_VERIFY | \ RPMSENSE_FIND_REQUIRES | \ RPMSENSE_MISSINGOK | \ + RPMSENSE_STRONG | \ - RPMSENSE_SCRIPT_PREP | \ - RPMSENSE_SCRIPT_BUILD | \ - RPMSENSE_SCRIPT_INSTALL | \ ---- ./lib/rpmtag.h.orig 2009-12-07 14:36:49.000000000 +0000 -+++ ./lib/rpmtag.h 2010-03-25 14:53:47.000000000 +0000 -@@ -228,14 +228,14 @@ typedef enum rpmTag_e { + 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 */ @@ -225,49 +223,48 @@ Needs extcond.diff for query operations. RPMTAG_PRIORITY = 1162, /* i[] extension placeholder (unimplemented) */ RPMTAG_CVSID = 1163, /* s (unimplemented) */ #define RPMTAG_SVNID RPMTAG_CVSID /* s (unimplemented) */ ---- ./lib/rpmtd.h.orig 2009-12-07 14:36:49.000000000 +0000 -+++ ./lib/rpmtd.h 2010-03-25 14:58:31.000000000 +0000 -@@ -216,6 +216,7 @@ typedef enum rpmtdFormats_e { - RPMTD_FORMAT_DEPTYPE = 15, /* dependency types (int types) */ - RPMTD_FORMAT_FSTATE = 16, /* file states (int types) */ +--- ./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_DEPFLAG_STRONG = 18, /* strong dependency */ + 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 2009-12-07 14:36:49.000000000 +0000 -+++ ./python/rpmmodule.c 2010-03-25 14:53:47.000000000 +0000 -@@ -373,7 +373,7 @@ static int initModule(PyObject *m) +--- ./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) 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 2009-12-07 14:36:49.000000000 +0000 -+++ ./rpmpopt.in 2010-03-25 14:53:47.000000000 +0000 +--- ./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 \ --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 : %-27{NAME} Relocations: %|PREFIXES?{[%{PREFIXES} ]}:{(not relocatable)}|\n\ - Version : %-27{VERSION} Vendor: %{VENDOR}\n\ - Release : %-27{RELEASE} Build Date: %{BUILDTIME:date}\n\ + rpm alias --info --qf '\ + Name : %{NAME}\n\ + %|EPOCH?{Epoch : %{EPOCH}\n}|\ diff --git a/whatrequires-doc.diff b/whatrequires-doc.diff index dff6c33..96cf15f 100644 --- a/whatrequires-doc.diff +++ b/whatrequires-doc.diff @@ -1,8 +1,6 @@ -Index: doc/rpm.8 -=================================================================== ---- doc/rpm.8.orig -+++ doc/rpm.8 -@@ -572,6 +572,11 @@ Query all packages that provide the \fIC +--- ./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.