diff --git a/RPM-Changes.html.tar.bz2 b/RPM-Changes.html.tar.bz2
new file mode 100644
index 0000000..5cb5122
--- /dev/null
+++ b/RPM-Changes.html.tar.bz2
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1b1d6954ea1c3fd4681d1419dbbae6907fac09ac9e8ea8cd33b08e930873e4c2
+size 9527
diff --git a/aloffbyone.diff b/aloffbyone.diff
new file mode 100644
index 0000000..080d2f9
--- /dev/null
+++ b/aloffbyone.diff
@@ -0,0 +1,16 @@
+Fixes an off-by-one error in rpmalAllFileSatisfiesDepend() which
+could lead to a segfault.
+
+Already included in rpm-4.4.7
+
+--- ./lib/rpmal.c.orig	2005-12-14 20:53:12.000000000 +0000
++++ ./lib/rpmal.c	2005-12-14 20:54:28.000000000 +0000
+@@ -744,7 +744,7 @@ rpmalAllFileSatisfiesDepend(const rpmal 
+ 
+     /*@-branchstate@*/ /* FIX: ret is a problem */
+     for (found = 0, ret = NULL;
+-	 die <= al->dirs + al->numDirs && dieCompare(die, dieNeedle) == 0;
++	 die < al->dirs + al->numDirs && dieCompare(die, dieNeedle) == 0;
+ 	 die++)
+     {
+ 
diff --git a/assumeexec.diff b/assumeexec.diff
deleted file mode 100644
index d74def4..0000000
--- a/assumeexec.diff
+++ /dev/null
@@ -1,27 +0,0 @@
---- tools/elfdeps.c.orig	2011-06-03 13:12:32.000000000 +0000
-+++ tools/elfdeps.c	2011-06-03 13:17:45.000000000 +0000
-@@ -14,6 +14,7 @@
- 
- int filter_private = 0;
- int soname_only = 0;
-+int assume_exec = 0;
- 
- typedef struct elfInfo_s {
-     Elf *elf;
-@@ -226,7 +227,7 @@ static int processFile(const char *fn, i
- 	ei->isElf64 = 0;
- #endif
-     	ei->isDSO = (ehdr->e_type == ET_DYN);
--	ei->isExec = (st.st_mode & (S_IXUSR|S_IXGRP|S_IXOTH));
-+	ei->isExec = assume_exec || (st.st_mode & (S_IXUSR|S_IXGRP|S_IXOTH));
- 
- 	processSections(ei);
-     }
-@@ -279,6 +280,7 @@ int main(int argc, char *argv[])
- 	{ "requires", 'R', POPT_ARG_VAL, &requires, -1, NULL, NULL },
- 	{ "filter-private", 0, POPT_ARG_VAL, &filter_private, -1, NULL, NULL },
- 	{ "soname-only", 0, POPT_ARG_VAL, &soname_only, -1, NULL, NULL },
-+	{ "assume-exec", 0, POPT_ARG_VAL, &assume_exec, -1, NULL, NULL },
- 	POPT_AUTOHELP 
- 	POPT_TABLEEND
-     };
diff --git a/autodeps.diff b/autodeps.diff
index f8ad21f..eb8e567 100644
--- a/autodeps.diff
+++ b/autodeps.diff
@@ -1,6 +1,8 @@
---- ./autodeps/linux.prov.orig	2010-12-03 12:11:57.000000000 +0000
-+++ ./autodeps/linux.prov	2011-05-11 14:27:40.000000000 +0000
-@@ -2,60 +2,72 @@
+Some (probably SUSE specific) changes to linux.prov and linux.req
+
+--- ./autodeps/linux.prov.orig	2002-04-08 19:13:35.000000000 +0000
++++ ./autodeps/linux.prov	2005-12-17 01:49:17.000000000 +0000
+@@ -2,60 +2,71 @@
  
  # This script reads filenames from STDIN and outputs any relevant provides
  # information that needs to be included in the package.
@@ -91,9 +93,8 @@
 +#
 +# --- Mono exes/dlls
 +: ${MONO_PREFIX=/usr}
-+if [ -x $MONO_PREFIX/bin/mono -a -n "$monolist" ] ; then
-+    printf "%s\n" "${monolist[@]}" | MONO_PATH=$MONO_PREFIX/lib${MONO_PATH:+:$MONO_PATH} prefix=$MONO_PREFIX $MONO_PREFIX/bin/mono-find-provides || echo "WARNING: MONO RPM PROVIDES WERE NOT GENERATED FOR THIS BUILD!!" 1>&2
-+fi
++[ -x $MONO_PREFIX/bin/mono -a -f $MONO_PREFIX/bin/mono-find-provides -a -n "$monolist" ] &&
++    printf "%s\n" "${monolist[@]}" | MONO_PATH=$MONO_PREFIX/lib${MONO_PATH:+:$MONO_PATH} prefix=$MONO_PREFIX $MONO_PREFIX/bin/mono-find-provides
 +
 +#
 +# --- Kernel module exported symbols
@@ -101,20 +102,26 @@
 +    printf "%s\n" "${filelist[@]}" | /usr/lib/rpm/find-provides.ksyms "$@"
  
  exit 0
---- ./autodeps/linux.req.orig	2010-12-03 12:11:57.000000000 +0000
-+++ ./autodeps/linux.req	2011-05-11 14:28:45.000000000 +0000
-@@ -19,18 +19,21 @@ fi
+--- ./autodeps/linux.req.orig	2002-11-14 12:53:11.000000000 +0000
++++ ./autodeps/linux.req	2005-12-17 01:50:07.000000000 +0000
+@@ -19,18 +19,22 @@ fi
  #
  # --- Grab the file manifest and classify files.
  #filelist=`sed "s/['\"]/\\\&/g"`
 -filelist=`sed "s/[]['\"*?{}]/\\\\\&/g"`
--exelist=`echo $filelist | xargs -r file | grep -Ev ":.* (commands|script) " | \
+-exelist=`echo $filelist | xargs -r file | egrep -v ":.* (commands|script) " | \
 -	grep ":.*executable" | cut -d: -f1`
 -scriptlist=`echo $filelist | xargs -r file | \
--	grep -E ":.* (commands|script) " | cut -d: -f1`
+-	egrep ":.* (commands|script) " | cut -d: -f1`
 -liblist=`echo $filelist | xargs -r file | \
 -	grep ":.*shared object" | cut -d : -f1`
+-
+-interplist=
+-perllist=
+-pythonlist=
+-tcllist=
 +#filelist=`sed "s/[]['\"*?{}]/\\\\\&/g"`
++IFS=$'\n'
 +filelist=($(grep -Ev '/usr/doc/|/usr/share/doc/'))
 +exelist=($(printf "%s\0" "${filelist[@]}" | xargs -0 -r file | \
 +	egrep -v ":.* (commands|script) " | \
@@ -123,20 +130,16 @@
 +	egrep ":.* (commands|script) " | cut -d: -f1))
 +liblist=($(printf "%s\0" "${filelist[@]}" | xargs -0 -r file | \
 +	grep ":.*shared object" | cut -d : -f1))
- 
--interplist=
--perllist=
--pythonlist=
--tcllist=
++
 +interplist=()
 +perllist=()
 +pythonlist=()
 +tcllist=()
-+monolist=($(printf "%s\n" "${filelist[@]}" | egrep "\\.(exe|dll)(\\.config)?\$"))
++monolist=($(printf "%s\n" "${filelist[@]}" | egrep "\\.(exe|dll)\$"))
  
  #
  # --- Alpha does not mark 64bit dependencies
-@@ -42,12 +45,12 @@ esac
+@@ -42,12 +46,12 @@ esac
  if [ "$needed" -eq 0 ]; then
  #
  # --- Executable dependency sonames.
@@ -154,7 +157,7 @@
  	    gsub(/'\''"/,"\\&",$1);
  	    printf "%s'$lib64'\n", $1
  	}
-@@ -56,12 +59,12 @@ if [ "$needed" -eq 0 ]; then
+@@ -56,12 +60,12 @@ if [ "$needed" -eq 0 ]; then
  
  #
  # --- Library dependency sonames.
@@ -172,7 +175,7 @@
  	    gsub(/'\''"/,"\\&",$1);
  	    printf "%s'$lib64'\n", $1
  	}
-@@ -71,30 +74,30 @@ fi
+@@ -71,30 +75,30 @@ fi
  
  #
  # --- Script interpreters.
@@ -215,7 +218,7 @@
  	/^$/ { START=0; }
  	/^Dynamic Section:$/ { START=1; }
  	(START==1) && /NEEDED/ {
-@@ -111,7 +114,7 @@ for f in $liblist $exelist ; do
+@@ -110,7 +114,7 @@ for f in $liblist $exelist ; do
  	    sub(/:/, "", $3);
  	    LIBNAME=$3;
  	}
@@ -224,7 +227,7 @@
  	    print LIBNAME "(" $4 ")'$lib64'";
  	}
      '
-@@ -119,17 +122,29 @@ done | sort -u
+@@ -118,17 +122,28 @@ done | sort -u
  
  #
  # --- Perl modules.
@@ -248,9 +251,8 @@
 +#
 +# --- Mono exes/dlls
 +: ${MONO_PREFIX=/usr}
-+if [ -x $MONO_PREFIX/bin/mono -a -n "$monolist" ] ; then
-+    printf "%s\n" "${monolist[@]}" | MONO_PATH=$MONO_PREFIX/lib${MONO_PATH:+:$MONO_PATH} prefix=$MONO_PREFIX $MONO_PREFIX/bin/mono-find-requires || echo "WARNING: MONO RPM REQUIRES WERE NOT GENERATED FOR THIS BUILD!!" 1>&2
-+fi
++[ -x $MONO_PREFIX/bin/mono -a -f $MONO_PREFIX/bin/mono-find-requires -a -n "$monolist" ] &&
++    printf "%s\n" "${monolist[@]}" | MONO_PATH=$MONO_PREFIX/lib${MONO_PATH:+:$MONO_PATH} prefix=$MONO_PREFIX $MONO_PREFIX/bin/mono-find-requires
 +
 +#
 +# --- Kernel module imported symbols
diff --git a/badforsyntax.diff b/badforsyntax.diff
new file mode 100644
index 0000000..8b4716b
--- /dev/null
+++ b/badforsyntax.diff
@@ -0,0 +1,17 @@
+This fixes a typo that caused a compiler warning [#178055].
+
+Already included in rpm-4.4.7.
+
+Index: ./rpmdb/header_internal.c
+===================================================================
+--- ./rpmdb/header_internal.c
++++ ./rpmdb/header_internal.c
+@@ -22,7 +22,7 @@ char ** headerGetLangs(Header h)
+     if ((table = (char **)xcalloc((count+1), sizeof(char *))) == NULL)
+ 	return NULL;
+ 
+-    for (i = 0, e = *s; i < count > 0; i++, e += strlen(e)+1)
++    for (i = 0, e = *s; i < count; i++, e += strlen(e)+1)
+ 	table[i] = e;
+     table[count] = NULL;
+ 
diff --git a/baselibs.conf b/baselibs.conf
deleted file mode 100644
index bdc5343..0000000
--- a/baselibs.conf
+++ /dev/null
@@ -1,3 +0,0 @@
-rpm
-arch ppc package rpm-devel
-arch sparcv9 package rpm-devel
diff --git a/brp.diff b/brp.diff
index 27fe6b5..fdaf8c5 100644
--- a/brp.diff
+++ b/brp.diff
@@ -1,27 +1,9 @@
 SUSE specific brp script patches
 
---- ./scripts/Makefile.am.orig	2010-12-03 12:11:57.000000000 +0000
-+++ ./scripts/Makefile.am	2011-05-11 14:31:45.000000000 +0000
-@@ -6,6 +6,7 @@ CLEANFILES =
- 
- EXTRA_DIST = \
- 	brp-compress brp-python-bytecompile brp-java-gcjcompile \
-+	brp-lib64-linux brp-symlink \
- 	brp-strip brp-strip-comment-note brp-python-hardlink \
- 	brp-strip-shared brp-strip-static-archive \
- 	check-files check-prereqs \
-@@ -24,6 +25,7 @@ EXTRA_DIST = \
- 
- rpmconfig_SCRIPTS = \
- 	brp-compress brp-python-bytecompile brp-java-gcjcompile \
-+	brp-lib64-linux brp-symlink \
- 	brp-strip brp-strip-comment-note brp-python-hardlink \
- 	brp-strip-shared brp-strip-static-archive \
- 	check-files check-prereqs \
---- ./scripts/brp-lib64-linux.orig	2011-05-11 14:30:08.000000000 +0000
-+++ ./scripts/brp-lib64-linux	2011-05-11 14:30:08.000000000 +0000
+--- ./scripts/brp-lib64-linux.orig	2005-12-15 14:04:13.000000000 +0000
++++ ./scripts/brp-lib64-linux	2006-01-27 19:44:16.000000000 +0000
 @@ -0,0 +1,42 @@
-+#!/bin/bash
++#!/bin/bash   
 +# script checks wether package is 64-bit clean
 +# and also for a linker bug. (linker allows 64bit libs to link 32bit libs)
 +echo "sf@suse.de: if you find problems with this script, drop me a note"
@@ -63,9 +45,19 @@ SUSE specific brp script patches
 +  fi
 +done
 +exit 0
---- ./scripts/brp-strip-comment-note.orig	2010-12-03 12:11:57.000000000 +0000
-+++ ./scripts/brp-strip-comment-note	2011-05-11 14:30:08.000000000 +0000
-@@ -16,6 +16,8 @@ esac
+--- ./scripts/brp-sparc64-linux.orig	2000-06-01 00:54:36.000000000 +0000
++++ ./scripts/brp-sparc64-linux	2005-12-15 14:05:06.000000000 +0000
+@@ -6,6 +6,7 @@ fi
+ files=
+ LC_ALL=
+ LANG=
++LC_TIME=POSIX
+ 
+ # Move 64bit ELF objects from /lib, /usr/lib, /usr/X11R6/lib to */lib64
+ # directories
+--- ./scripts/brp-strip-comment-note.orig	2005-05-30 06:41:52.000000000 +0000
++++ ./scripts/brp-strip-comment-note	2005-12-15 14:06:07.000000000 +0000
+@@ -13,6 +13,8 @@ esac
  # for already stripped elf files in the build root
  for f in `find $RPM_BUILD_ROOT -type f \( -perm -0100 -or -perm -0010 -or -perm -0001 \) -exec file {} \; | \
          grep -v "^${RPM_BUILD_ROOT}/\?usr/lib/debug"  | \
@@ -73,20 +65,20 @@ SUSE specific brp script patches
 +	grep -v '/lib/modules/' | \
  	sed -n -e 's/^\(.*\):[ 	]*ELF.*, stripped/\1/p'`; do
  	note="-R .note"
- 	if $OBJDUMP -h $f | grep '^[ 	]*[0-9]*[ 	]*.note[ 	]' -A 1 | \
---- ./scripts/brp-strip.orig	2010-12-03 12:11:57.000000000 +0000
-+++ ./scripts/brp-strip	2011-05-11 14:30:08.000000000 +0000
-@@ -15,6 +15,7 @@ esac
+ 	if objdump -h $f | grep '^[ 	]*[0-9]*[ 	]*.note[ 	]' -A 1 | \
+--- ./scripts/brp-strip.orig	2005-05-30 06:40:24.000000000 +0000
++++ ./scripts/brp-strip	2005-12-15 14:06:37.000000000 +0000
+@@ -13,6 +13,7 @@ esac
  for f in `find $RPM_BUILD_ROOT -type f \( -perm -0100 -or -perm -0010 -or -perm -0001 \) -exec file {} \; | \
          grep -v "^${RPM_BUILD_ROOT}/\?usr/lib/debug"  | \
  	grep -v ' shared object,' | \
 +	grep -v '/lib/modules/' | \
  	sed -n -e 's/^\(.*\):[ 	]*ELF.*, not stripped/\1/p'`; do
- 	$STRIP -g "$f" || :
+ 	strip -g "$f" || :
  done
---- ./scripts/brp-symlink.orig	2011-05-11 14:30:08.000000000 +0000
-+++ ./scripts/brp-symlink	2011-05-11 14:30:08.000000000 +0000
-@@ -0,0 +1,184 @@
+--- ./scripts/brp-symlink.orig	2005-12-15 14:06:58.000000000 +0000
++++ ./scripts/brp-symlink	2006-01-27 19:41:58.000000000 +0000
+@@ -0,0 +1,182 @@
 +#!/bin/sh
 +
 +# Task: go through the files in $RPM_BUILD_ROOT and
@@ -182,9 +174,7 @@ SUSE specific brp script patches
 +	     echo " skip the files from packaging)"
 +	     exit 1
 +	     ;;
-+	*,/opt/kde3/share/doc*/HTML/*/common) # white listed for not existant
-+	     ;;
-+	*,/usr/share/doc/kde/HTML/*/common) # white listed for not existant
++	*,/opt/kde3/share/doc/HTML/*/common) # white listed for not existant
 +	     ;;
 +	*,/proc/*) # links pointing into /proc file system
 +	     ;;
diff --git a/brpcombress.diff b/brpcombress.diff
new file mode 100644
index 0000000..f46c29b
--- /dev/null
+++ b/brpcombress.diff
@@ -0,0 +1,56 @@
+make brp-compress deal correctly with hardlinked man pages
+
+--- ./scripts/brp-compress.orig	2004-10-17 18:49:52.000000000 +0000
++++ ./scripts/brp-compress	2005-12-15 14:03:58.000000000 +0000
+@@ -5,12 +5,38 @@ if [ -z "$RPM_BUILD_ROOT" -o "$RPM_BUILD
+ 	exit 0
+ fi
+ 
++LC_ALL=
++LANG=
++LC_TIME=POSIX
++
+ cd $RPM_BUILD_ROOT
+ 
+ # Compress man pages
+ COMPRESS="gzip -9 -n"
+ COMPRESS_EXT=.gz
+ 
++function check_for_hard_link
++{
++    dir=$1
++    b=$2
++    type=$3
++
++    inode=`ls -i $b | awk '{ print $1 }'`
++    others=`find $dir -type f -inum $inode`
++    for afile in $others ; do
++	[ "$afile" != "$b" ] && rm -f $afile
++    done
++
++    case $type in
++	Z|gz) gunzip $b ;;
++	bz2) bunzip2 $b ;;
++    esac
++
++    for afile in $others ; do
++	[ "${afile%.$type}" != "${b%.$type}" ] && ln ${b%.$type} ${afile%.$type}
++    done
++}
++
+ for d in ./usr/man/man* ./usr/man/*/man* ./usr/info \
+ 	./usr/share/man/man* ./usr/share/man/*/man* ./usr/share/info \
+ 	./usr/kerberos/man ./usr/X11R6/man/man* ./usr/lib/perl5/man/man* \
+@@ -23,9 +49,9 @@ do
+ 	[ "`basename $f`" = "dir" ] && continue
+ 
+ 	case "$f" in
+-	 *.Z) gunzip $f; b=`echo $f | sed -e 's/\.Z$//'`;;
+-	 *.gz) gunzip $f; b=`echo $f | sed -e 's/\.gz$//'`;;
+-	 *.bz2) bunzip2 $f; b=`echo $f | sed -e 's/\.bz2$//'`;;
++	 *.Z) gunzip $f || check_for_hard_link $d $f Z; b=`echo $f | sed -e 's/\.Z$//'`;;
++	 *.gz) gunzip $f || check_for_hard_link $d $f gz; b=`echo $f | sed -e 's/\.gz$//'`;;
++	 *.bz2) bunzip2 $f || check_for_hard_link $d $f bz2; b=`echo $f | sed -e 's/\.bz2$//'`;;
+ 	 *) b=$f;;
+ 	esac
+ 
diff --git a/brpcompress.diff b/brpcompress.diff
deleted file mode 100644
index 07e5174..0000000
--- a/brpcompress.diff
+++ /dev/null
@@ -1,96 +0,0 @@
---- ./scripts/brp-compress.orig	2010-12-03 12:11:57.000000000 +0000
-+++ ./scripts/brp-compress	2011-05-11 14:44:21.000000000 +0000
-@@ -5,51 +5,78 @@ if [ -z "$RPM_BUILD_ROOT" -o "$RPM_BUILD
- 	exit 0
- fi
- 
-+LC_ALL=
-+LANG=
-+LC_TIME=POSIX
-+
- cd $RPM_BUILD_ROOT
- 
- # Compress man pages
- COMPRESS="gzip -9 -n"
- COMPRESS_EXT=.gz
- 
-+function check_for_hard_link
-+{
-+    dir=$1
-+    b=$2
-+
-+    inode=`ls -i $b | awk '{ print $1 }'`
-+    others=`find $dir -type f -inum $inode`
-+    for afile in $others ; do
-+	[ "$afile" != "$b" ] && rm -f "$afile"
-+    done
-+
-+    case $b in
-+	*.Z|*.gz)     gunzip  $b ;;
-+	*.bz2)        bunzip2 $b ;;
-+	*.xz|*.lzma)  unxz    $b ;;
-+    esac
-+
-+    type=${b##*.}
-+    for afile in $others ; do
-+	[ "${afile%.$type}" != "${b%.$type}" ] && ln ${b%.$type} ${afile%.$type}
-+    done
-+}
-+
- for d in ./usr/man/man* ./usr/man/*/man* ./usr/info \
- 	./usr/share/man/man* ./usr/share/man/*/man* ./usr/share/info \
- 	./usr/kerberos/man ./usr/X11R6/man/man* ./usr/lib/perl5/man/man* \
- 	./usr/share/doc/*/man/man* ./usr/lib/*/man/man*
- do
-     [ -d $d ] || continue
--    for f in `find $d -type f ! -name dir`
-+    find $d -type f ! -name dir | while read f
-     do
-         [ -f "$f" ] || continue
- 
- 	case "$f" in
--	 *.gz|*.Z)    gunzip  -f $f; b=`echo $f | sed -e 's/\.\(gz\|Z\)$//'`;;
--	 *.bz2)       bunzip2 -f $f; b=`echo $f | sed -e 's/\.bz2$//'`;;
--	 *.xz|*.lzma) unxz    -f $f; b=`echo $f | sed -e 's/\.\(xz\|lzma\)$//'`;;
--	 *) b=$f;;
-+	 *.gz|*.Z)    gunzip  "$f" || check_for_hard_link $d "$f"; b=`echo $f | sed -e 's/\.\(gz\|Z\)$//'`;;
-+	 *.bz2)       bunzip2 "$f" || check_for_hard_link $d "$f"; b=`echo $f | sed -e 's/\.bz2$//'`;;
-+	 *.xz|*.lzma) unxz    "$f" || check_for_hard_link $d "$f"; b=`echo $f | sed -e 's/\.\(xz\|lzma\)$//'`;;
-+	 *) b="$f";;
- 	esac
- 
--	$COMPRESS $b </dev/null 2>/dev/null || {
-+	$COMPRESS "$b" </dev/null 2>/dev/null || {
- 	    inode=`ls -i $b | awk '{ print $1 }'`
- 	    others=`find $d -type f -inum $inode`
- 	    if [ -n "$others" ]; then
- 		for afile in $others ; do
--		    [ "$afile" != "$b" ] && rm -f $afile
-+		    [ "$afile" != "$b" ] && rm -f "$afile"
- 		done
--		$COMPRESS -f $b
-+		$COMPRESS -f "$b"
- 		for afile in $others ; do
--		    [ "$afile" != "$b" ] && ln $b$COMPRESS_EXT $afile$COMPRESS_EXT
-+		    [ "$afile" != "$b" ] && ln "$b$COMPRESS_EXT" "$afile$COMPRESS_EXT"
- 		done
- 	    else
--		$COMPRESS -f $b
-+		$COMPRESS -f "$b"
- 	    fi
- 	}
-     done
- 
--    for f in `find $d -type l`
-+    find $d -type l | while read f
-     do
--	l=`ls -l $f | sed -e 's/.* -> //' -e 's/\.\(gz\|Z\|bz2\|xz\|lzma\)$//'`
--	rm -f $f
--	b=`echo $f | sed -e 's/\.\(gz\|Z\|bz2\|xz\|lzma\)$//'`
--	ln -sf $l$COMPRESS_EXT $b$COMPRESS_EXT
-+	l="`ls -l "$f" | sed -e 's/.* -> //' -e 's/\.\(gz\|Z\|bz2\|xz\|lzma\)$//'`"
-+	rm -f "$f"
-+	b="`echo "$f" | sed -e 's/\.\(gz\|Z\|bz2\|xz\|lzma\)$//'`"
-+	ln -sf "$l$COMPRESS_EXT" "$b$COMPRESS_EXT"
-     done
- done
diff --git a/build.diff b/build.diff
index 65d851b..b050cfd 100644
--- a/build.diff
+++ b/build.diff
@@ -1,64 +1,378 @@
 Many changes to Makefiles/autogen and the like to make it build
 on SUSE systems.
 
---- ./configure.ac.orig	2011-05-11 14:27:32.000000000 +0000
-+++ ./configure.ac	2011-05-11 15:18:44.000000000 +0000
-@@ -850,6 +850,7 @@ arm*)		RPMCANONCOLOR=0; RPMCANONARCH=arm
+Index: Makefile.am
+===================================================================
+--- Makefile.am.orig
++++ Makefile.am
+@@ -15,7 +15,7 @@ EXTRA_DIST = CHANGES CREDITS Doxyheader 
+ 	po/*.in po/*.po po/rpm.pot \
+ 	rpm.magic rpmpopt-$(VERSION) rpmqv.c rpm.c
+ 
+-SUBDIRS = intl po misc @WITH_ZLIB_SUBDIR@ @WITH_ELFUTILS_SUBDIR@ @WITH_MAGIC_SUBDIR@ @WITH_DB_SUBDIR@ @WITH_SQLITE3_SUBDIR@ @WITH_POPT_SUBDIR@ @WITH_BEECRYPT_SUBDIR@ @WITH_NEON_SUBDIR@ lua rpmio rpmdb lib build @WITH_PYTHON_SUBDIR@ tools scripts tests doc .
++SUBDIRS = intl po misc @WITH_ZLIB_SUBDIR@ @WITH_ELFUTILS_SUBDIR@ @WITH_MAGIC_SUBDIR@ @WITH_DB_SUBDIR@ @WITH_SQLITE3_SUBDIR@ @WITH_POPT_SUBDIR@ beecrypt @WITH_NEON_SUBDIR@ @WITH_LUA_SUBDIR@ rpmio rpmdb lib build @WITH_PYTHON_SUBDIR@ tools scripts tests doc .
+ 
+ INCLUDES = \
+ 	-I$(top_srcdir)/build \
+Index: autogen.sh
+===================================================================
+--- autogen.sh.orig
++++ autogen.sh
+@@ -26,12 +26,12 @@ case $libtoolize in
+     esac
+ esac
+ 
+-[ "`$libtoolize --version | head -1`" != "$LTV" ] && echo "$USAGE" && exit 1
+-[ "`autoconf --version | head -1`" != "$ACV" ] && echo "$USAGE" && exit 1
+-[ "`automake --version | head -1 | sed -e 's/1\.4[a-z]/1.4/'`" != "$AMV" ] && echo "$USAGE" # && exit 1
++#[ "`$libtoolize --version | head -1`" != "$LTV" ] && echo "$USAGE" && exit 1
++#[ "`autoconf --version | head -1`" != "$ACV" ] && echo "$USAGE" && exit 1
++#[ "`automake --version | head -1 | sed -e 's/1\.4[a-z]/1.4/'`" != "$AMV" ] && echo "$USAGE" # && exit 1
+ 
+ myopts=
+-if [ X"$@" = X  -a "X`uname -s`" = "XDarwin" -a -d /opt/local ]; then
++if [ X"$*" = X  -a "X`uname -s`" = "XDarwin" -a -d /opt/local ]; then
+     export myopts="--prefix=/usr --disable-nls"
+     export CPPFLAGS="-I${myprefix}/include"
+ fi
+@@ -43,7 +43,8 @@ if [ -d zlib ]; then
+     (echo "--- zlib"; cd zlib; ./autogen.sh --noconfigure "$@")
+ fi
+ if [ -d beecrypt ]; then
+-    (echo "--- beecrypt"; cd beecrypt; ./autogen.sh --noconfigure "$@")
++    #(echo "--- beecrypt"; cd beecrypt; ./autogen.sh --noconfigure "$@")
++    (echo "--- beecrypt"; cd beecrypt; ./autogen.sh --without-cplusplus --without-java --without-python "$@")
+ fi
+ if [ -d elfutils ]; then
+     (echo "--- elfutils"; cd elfutils; ./autogen.sh --noconfigure "$@")
+@@ -54,6 +55,7 @@ fi
+ if [ -d neon ]; then
+     (echo "--- neon"; cd neon; ./autogen.sh "$@")
+ fi
++(echo "--- db"; cd db/dist; libtoolize --copy --force ; cp /usr/share/aclocal/libtool.m4 aclocal/libtool.ac ; ./s_config )
+ 
+ echo "--- rpm"
+ $libtoolize --copy --force
+@@ -66,7 +68,7 @@ if [ "$1" = "--noconfigure" ]; then 
+     exit 0;
+ fi
+ 
+-if [ X"$@" = X  -a "X`uname -s`" = "XLinux" ]; then
++if [ X"$*" = X  -a "X`uname -s`" = "XLinux" ]; then
+     if [ -d /usr/share/man ]; then
+ 	mandir=/usr/share/man
+ 	infodir=/usr/share/info
+Index: build/Makefile.am
+===================================================================
+--- build/Makefile.am.orig
++++ build/Makefile.am
+@@ -22,7 +22,7 @@ pkgincdir = $(pkgincludedir)
+ pkginc_HEADERS = rpmbuild.h rpmfc.h rpmfile.h rpmspec.h
+ noinst_HEADERS = buildio.h
+ 
+-LDFLAGS = -L$(RPM_BUILD_ROOT)$(usrlibdir) -L$(DESTDIR)$(usrlibdir)
++LDFLAGS =
+ 
+ usrlibdir = $(libdir)@MARK64@
+ usrlib_LTLIBRARIES = librpmbuild.la
+Index: configure.ac
+===================================================================
+--- configure.ac.orig
++++ configure.ac
+@@ -1,30 +1,3 @@
+-
+-echo "
+-****************************************************************************
+-*                                                                          *
+-*                   *** WARNING WARNING WARNING ***                        *
+-*                                                                          *
+-* This is source code from the development branch of rpm-4.4.2.            *
+-*                                                                          *
+-* If you want the "production" rpm-4.3.3 code, then you should use a       *
+-* rpm-4.3.3 src.rpm. Alternatively, if using a CVS checkout, do            *
+-* the following:                                                           *
+-*                                                                          *
+-*       cvs -d :pserver:anonymous@cvs.rpm.org:/cvs/devel login             *
+-*       (no password, just carriage return)                                *
+-*       cvs -d :pserver:anonymous@cvs.rpm.org:/cvs/devel get rpm           *
+-*       cd rpm                                                             *
+-*                                                                          *
+-* Here's the rpm-4_3 branch, latest is rpm-4.3.3:                          *
+-*       cvs up -r rpm-4_3                                                  *
+-*                                                                          *
+-* Here's the rpm-4_2 branch, latest is rpm-4.2.3:                          *
+-*       cvs up -r rpm-4_2                                                  *
+-*                                                                          *
+-****************************************************************************
+-"
+-sleep 10
+-
+ AC_PREREQ(2.59)
+ AC_INIT(rpm, 4.4.2, rpm-devel@lists.dulug.duke.edu)
+ AC_CANONICAL_TARGET
+@@ -34,10 +7,9 @@ AM_CONFIG_HEADER([config.h])
+ AM_INIT_AUTOMAKE([foreign])
+ 
+ dnl Set of available languages.
+-ALL_LINGUAS="cs da de fi fr gl is ja ko no pl pt pt_BR ro ru sk sl sr sv tr"
++ALL_LINGUAS="cs da de fi fr gl is ja ko nb pl pt pt_BR ro ru sk sl sr sv tr"
+ 
+ dnl Checks for programs.
+-AC_PROG_CXX
+ AC_PROG_AWK
+ AC_PROG_CC
+ AC_PROG_CPP
+@@ -310,7 +282,7 @@ WITH_ZLIB_INCLUDE=
+ WITH_ZLIB_LIB=
+ if test -d zlib ; then
+   WITH_ZLIB_SUBDIR=zlib
+-  addlib \${top_builddir}/zlib
++  # addlib \${top_builddir}/zlib
+   WITH_ZLIB_INCLUDE="-I\${top_srcdir}/${WITH_ZLIB_SUBDIR}"
+   INCPATH="$INCPATH -I\${top_srcdir}/${WITH_ZLIB_SUBDIR}"
+   WITH_ZLIB_LIB="\${top_builddir}/${WITH_ZLIB_SUBDIR}/libz.la"
+@@ -350,9 +322,9 @@ AC_SUBST(WITH_BZIP2)
+ localdone=
+ 
+ dirs=$prefix
+-if test "$cross_compiling" != "yes"; then
+-  dirs="$dirs /usr/local"
+-fi
++#if test "$cross_compiling" != "yes"; then
++#  dirs="$dirs /usr/local"
++#fi
+ for dir in $dirs
+ do
+ 	case $dir in
+@@ -463,7 +435,7 @@ AC_CHECK_HEADER([gelf.h], [
+ 	    AC_DEFINE(HAVE_LIBELF, 1, [Define to 1 if you have the 'elf' library (-lelf).])
+ 	    WITH_ELFUTILS_SUBDIR=elfutils
+ 	    WITH_LIBELF_INCLUDE="-I\${top_srcdir}/${WITH_ELFUTILS_SUBDIR}/libelf"
+-	    WITH_LIBELF_LIB="\${top_builddir}/${WITH_ELFUTILS_SUBDIR}/libelf/libelf.a"
++	    WITH_LIBELF_LIB="\${top_builddir}/${WITH_ELFUTILS_SUBDIR}/libelf/libelf_pic.a"
+ 	fi
+ ])
+ AC_SUBST(WITH_ELFUTILS_SUBDIR)
+@@ -504,7 +476,8 @@ AC_CHECK_HEADER([beecrypt/beecrypt.h], [
+     AC_DEFINE(HAVE_LIBBEECRYPT, 1, [Define to 1 if you have the 'beecrypt' library (-lbeecrypt).])
+     WITH_BEECRYPT_SUBDIR=beecrypt
+     WITH_BEECRYPT_INCLUDE="-I\${top_srcdir}/${WITH_BEECRYPT_SUBDIR}"
+-    WITH_BEECRYPT_LIB="\${top_builddir}/${WITH_BEECRYPT_SUBDIR}/libbeecrypt.la"
++    dnl WITH_BEECRYPT_LIB="\${top_builddir}/${WITH_BEECRYPT_SUBDIR}/libbeecrypt.la"
++    AC_DEFINE(HAVE_BEECRYPT_API_H, 1, [Define to 1 if you have the <beecrypt/api.h> header file.])
+   fi
+ ])
+ AC_SUBST(WITH_BEECRYPT_SUBDIR)
+@@ -648,6 +621,9 @@ dnl AmigaOS and IXEmul have a fork() dum
+   esac
+ 
+ AM_GNU_GETTEXT
++AM_GNU_GETTEXT_VERSION(0.11.2)
++MKINSTALLDIRS="\$(top_builddir)/./mkinstalldirs"
++AC_SUBST(MKINSTALLDIRS)
+ dnl TVM:
+ dnl horrible *temporary* hack to make sure that if we found gettext() in
+ dnl -lintl that we add -lintl *back* to $LIBS.
+@@ -943,54 +919,74 @@ withval=auto
+ AC_ARG_WITH(python, [  --with-python           build rpm python bindings ])
+ 
+ WITH_PYTHON_VERSION=$withval
+-if test $withval = auto ; then
+ 
++if test "$WITH_PYTHON_VERSION" = auto ; then
++AC_MSG_CHECKING(for python 2.5)
++AC_RUN_IFELSE([AC_LANG_SOURCE([[
++#include <python2.5/Python.h>
++main() {
++  exit(strncmp("2.5", PY_VERSION, 3));
++} ]])],[withval=yes],[withval=no],[withval=yes])
++AC_MSG_RESULT($withval)
++if test $withval = yes ; then
++  WITH_PYTHON_VERSION="2.5"
++fi
++fi
++
++if test "$WITH_PYTHON_VERSION" = auto ; then
+ AC_MSG_CHECKING(for python 2.4)
+ AC_RUN_IFELSE([AC_LANG_SOURCE([[
+ #include <python2.4/Python.h>
+ main() {
+   exit(strncmp("2.4", PY_VERSION, 3));
+ } ]])],[withval=yes],[withval=no],[withval=yes])
+-  AC_MSG_RESULT($withval)
+-  if test $withval = yes ; then
+-    WITH_PYTHON_VERSION="2.4"
+-  else
+-    
+-  AC_MSG_CHECKING(for python 2.3)
+-  AC_RUN_IFELSE([AC_LANG_SOURCE([[
+-  #include <python2.3/Python.h>
+-  main() {
+-    exit(strncmp("2.3", PY_VERSION, 3));
+-  } ]])],[withval=yes],[withval=no],[withval=yes])
+-    AC_MSG_RESULT($withval)
+-    if test $withval = yes ; then
+-      WITH_PYTHON_VERSION="2.3"
+-    else
+-    
+-      AC_MSG_CHECKING(for python 2.2)
+-      AC_RUN_IFELSE([AC_LANG_SOURCE([[
+-    #include <python2.2/Python.h>
+-    main() {
+-      exit(strncmp("2.2", PY_VERSION, 3));
+-    } ]])],[withval=yes],[withval=no],[withval=yes])
+-      AC_MSG_RESULT($withval)
+-      if test $withval = yes ; then
+-        WITH_PYTHON_VERSION="2.2"
+-      else
+-    
+-        AC_MSG_CHECKING(for python 1.5.2)
+-        AC_RUN_IFELSE([AC_LANG_SOURCE([[
+-    #include <python1.5/Python.h>
+-    main() {
+-      exit(strcmp("1.5.2", PY_VERSION));
+-    } ]])],[withval=yes],[withval=no],[withval=yes])
+-        AC_MSG_RESULT($withval)
+-        if test $withval = yes ; then
+-          WITH_PYTHON_VERSION="1.5"
+-        fi
+-      fi
+-    fi
+-  fi
++AC_MSG_RESULT($withval)
++if test $withval = yes ; then
++  WITH_PYTHON_VERSION="2.4"
++fi
++fi
++
++if test "$WITH_PYTHON_VERSION" = auto ; then
++AC_MSG_CHECKING(for python 2.3)
++AC_RUN_IFELSE([AC_LANG_SOURCE([[
++#include <python2.3/Python.h>
++main() {
++  exit(strncmp("2.3", PY_VERSION, 3));
++} ]])],[withval=yes],[withval=no],[withval=yes])
++AC_MSG_RESULT($withval)
++if test $withval = yes ; then
++  WITH_PYTHON_VERSION="2.3"
++fi
++fi
++
++if test "$WITH_PYTHON_VERSION" = auto ; then
++AC_MSG_CHECKING(for python 2.2)
++AC_RUN_IFELSE([AC_LANG_SOURCE([[
++#include <python2.2/Python.h>
++main() {
++  exit(strncmp("2.2", PY_VERSION, 3));
++} ]])],[withval=yes],[withval=no],[withval=yes])
++AC_MSG_RESULT($withval)
++if test $withval = yes ; then
++  WITH_PYTHON_VERSION="2.2"
++fi
++fi
++
++if test "$WITH_PYTHON_VERSION" = auto ; then
++AC_MSG_CHECKING(for python 1.5.2)
++AC_RUN_IFELSE([AC_LANG_SOURCE([[
++#include <python1.5/Python.h>
++main() {
++  exit(strcmp("1.5.2", PY_VERSION));
++} ]])],[withval=yes],[withval=no],[withval=yes])
++AC_MSG_RESULT($withval)
++if test $withval = yes ; then
++  WITH_PYTHON_VERSION="1.5"
++fi
++fi
++
++if test "$WITH_PYTHON_VERSION" = auto ; then
++  WITH_PYTHON_VERSION=no
+ fi
+ 
+ if test "$WITH_PYTHON_VERSION" != no ; then
+@@ -1283,6 +1279,7 @@ arm*)		RPMCANONCOLOR=0; RPMCANONARCH="${
  mipsel*)	RPMCANONCOLOR=0; RPMCANONARCH=mipsel ;;
  mips*)		RPMCANONCOLOR=0; RPMCANONARCH=mips ;;
  m68k*)		RPMCANONCOLOR=0; RPMCANONARCH=m68k ;;
 +parisc*|hppa*)	RPMCANONCOLOR=0; RPMCANONARCH=hppa ;;
- sh3*)		RPMCANONCOLOR=0; RPMCANONARCH=sh3 ;;
- sh4*)		RPMCANONCOLOR=0; RPMCANONARCH=sh4 ;;
  *)		RPMCANONCOLOR=0; RPMCANONARCH=unknown ;;
-@@ -860,6 +861,7 @@ esac
+ esac
+ case "${build_os_noversion}" in
+@@ -1290,7 +1287,7 @@ mint)		RPMCANONARCH=m68kmint ;;
+ esac
  RPMCANONVENDOR="$build_vendor"
  case "${build_vendor}" in
- unknown|pc|ibm|redhat|pld|mandrake|conectiva|lvr|yellowdog|caos|suse)
-+	RPMCANONVENDOR=suse
+-unknown|pc|ibm|redhat|pld|mandrake|conectiva|lvr|yellowdog|caos)
++unknown|pc|ibm|redhat|pld|mandrake|conectiva|lvr|yellowdog|caos|suse)
  	test -f /etc/redhat-release &&		RPMCANONVENDOR=redhat
- 	test -f /etc/SuSE-release &&		RPMCANONVENDOR=suse
  	test -f /etc/pld-release &&		RPMCANONVENDOR=pld
-@@ -872,6 +874,9 @@ unknown|pc|ibm|redhat|pld|mandrake|conec
+ 	test -f /etc/mandrake-release &&	RPMCANONVENDOR=mandrake
+@@ -1298,6 +1295,7 @@ unknown|pc|ibm|redhat|pld|mandrake|conec
+ 	test -f /etc/lvr-release &&		RPMCANONVENDOR=lvr
+ 	test -f /etc/yellowdog-release &&	RPMCANONVENDOR=yellowdog
+ 	test -f /etc/caos-release &&		RPMCANONVENDOR=caos
++	test -f /etc/SuSE-release -o -f /.buildenv && RPMCANONVENDOR=suse
+ 	;;
  esac
- RPMCANONOS="$host_os_noversion"
- RPMCANONGNU="$host_os_gnu"
-+if test "$RPMCANONVENDOR" = suse ; then
-+    RPMCANONCOLOR=0
-+fi
- AC_SUBST(RPMCANONCOLOR)
- AC_SUBST(RPMCANONARCH)
- AC_SUBST(RPMCANONVENDOR)
---- ./db3/configure.orig	2010-12-03 12:11:57.000000000 +0000
-+++ ./db3/configure	2011-05-11 15:18:44.000000000 +0000
+ RPMCANONOS="$build_os_noversion"
+@@ -1372,7 +1370,7 @@ dnl XXX this causes popt to depend on zl
+ dnl # XXX Propagate -lucb to popt ...
+ dnl export LIBS INCPATH CONFIG_SITE
+ 
+-AC_CONFIG_SUBDIRS(popt zlib file sqlite db3)
++AC_CONFIG_SUBDIRS(popt zlib file sqlite db3 elfutils)
+ 
+ AC_CONFIG_FILES([ Doxyfile Makefile rpmrc macros platform rpmpopt rpm.spec
+ 	rpmio/Makefile rpmdb/Makefile lib/Makefile build/Makefile
+Index: db3/configure
+===================================================================
+--- db3/configure.orig
++++ db3/configure
 @@ -10,9 +10,9 @@ rm -f config.cache
  # XXX edit CFLAGS= ... out of invocation args ???
- ARGS="`echo $* | sed -e 's% [^ ]*CFLAGS=[^ ]*%%' -e 's% -[^-][^ ]*%%g' -e 's% --param=[^ ]*%%g' -e 's%--cache-file=.*$%%'`"
+ ARGS="`echo $* | sed -e 's% [^ ]*CFLAGS=[^ ]*%%' -e 's% -[^-][^ ]*%%g' -e 's%--cache-file=.*$%%'`"
  
 -CC="$CC" CFLAGS="$CFLAGS" $db_dist/configure $ARGS \
-+CC="$CC" CFLAGS="$CFLAGS" $db_dist/configure \
- 	--enable-shared --enable-static \
+-	--enable-shared --enable-static --enable-rpc \
 -	--with-uniquename=_rpmdb --srcdir=$db_dist
++CC="$CC" CFLAGS="$CFLAGS" $db_dist/configure \
++	--enable-shared --enable-static \
 +	--with-uniquename=_rpmdb --srcdir=$db_dist $ARGS
  
  mv Makefile Makefile.orig
  cat Makefile.orig | sed -e '/^install[:-]/c\
---- ./installplatform.orig	2010-12-03 12:11:57.000000000 +0000
-+++ ./installplatform	2011-05-11 15:18:44.000000000 +0000
-@@ -47,9 +47,9 @@ for SUBST in $SUBSTS ; do
-   ARCH_INSTALL_POST='%{nil}'
-   case "${ARCH}-${OS}" in
-     sparc64*-linux) LIB=lib64 ;;
--    s390x-linux) LIB=lib64 ;;
--    ppc64-linux|powerpc64-linux) LIB=lib64 ;;
--    x86_64-linux|amd64-linux|ia32e-linux) LIB=lib64 ;;
-+    s390x-linux) ARCH_INSTALL_POST=${pkglibdir}/brp-lib64-linux ; LIB=lib64 ;;
-+    ppc64-linux|powerpc64-linux) ARCH_INSTALL_POST=${pkglibdir}/brp-lib64-linux ; LIB=lib64 ;;
-+    x86_64-linux|amd64-linux|ia32e-linux) ARCH_INSTALL_POST=${pkglibdir}/brp-lib64-linux ; LIB=lib64 ;;
-     *) LIB=lib;;
+Index: file/src/Makefile.am
+===================================================================
+--- file/src/Makefile.am.orig
++++ file/src/Makefile.am
+@@ -26,7 +26,7 @@ libmagic_la_LDFLAGS = -version-info 1:0:
+ 
+ noinst_PROGRAMS = file
+ file_SOURCES = file.c
+-file_LDFLAGS = -L../../zlib # -all-static
++file_LDFLAGS = # -L../../zlib # -all-static
+ file_LDADD = libmagic.la
+ 
+ listobjs:
+Index: installplatform
+===================================================================
+--- installplatform.orig
++++ installplatform
+@@ -62,11 +62,11 @@ for SUBST in $SUBSTS ; do
+     sparcv9-linux) MULTILIBNO=1 ;;
+     sparc64-linux) ARCH_INSTALL_POST=${pkglibdir}/brp-sparc64-linux; LIB=lib64; MULTILIBNO=2 ;;
+     s390-linux) MULTILIBNO=1 ;;
+-    s390x-linux) LIB=lib64; MULTILIBNO=2 ;;
++    s390x-linux) ARCH_INSTALL_POST=${pkglibdir}/brp-lib64-linux; LIB=lib64; MULTILIBNO=2 ;;
+     ppc-linux) MULTILIBNO=1 ;;
+-    ppc64-linux) LIB=lib64; MULTILIBNO=2 ;;
++    ppc64-linux) ARCH_INSTALL_POST=${pkglibdir}/brp-lib64-linux; LIB=lib64; MULTILIBNO=2 ;;
+     i?86-linux|pentium?-linux|athlon-linux) MULTILIBNO=1 ;;
+-    x86_64-linux|amd64-linux|ia32e-linux) LIB=lib64; MULTILIBNO=2 ;;
++    x86_64-linux|amd64-linux|ia32e-linux) ARCH_INSTALL_POST=${pkglibdir}/brp-lib64-linux; LIB=lib64; MULTILIBNO=2 ;;
    esac
  
-@@ -129,6 +129,9 @@ for SUBST in $SUBSTS ; do
+   if [ -n "$MULTILIBNO" ]; then
+@@ -96,6 +96,9 @@ for SUBST in $SUBSTS ; do
    apple)
      VENDORSED='-e s,^@apple@,,'
      ;;
@@ -67,4 +381,194 @@ on SUSE systems.
 +    ;;
    esac
  
-   CANONARCH="`echo $ARCH|sed -e "$canonarch_sed"`"
+   cat $PLATFORM \
+Index: lib/Makefile.am
+===================================================================
+--- lib/Makefile.am.orig
++++ lib/Makefile.am
+@@ -29,7 +29,7 @@ noinst_HEADERS = \
+ mylibs = librpm.la
+ LIBS =
+ 
+-LDFLAGS = -L$(RPM_BUILD_ROOT)$(usrlibdir) -L$(DESTDIR)$(usrlibdir)
++LDFLAGS =
+ 
+ usrlibdir = $(libdir)@MARK64@
+ usrlib_LTLIBRARIES = librpm.la
+Index: po/Makefile.in
+===================================================================
+--- po/Makefile.in.orig
++++ po/Makefile.in
+@@ -29,7 +29,7 @@ gettextsrcdir = $(datadir)/gettext/po
+ INSTALL = /usr/bin/install -c
+ INSTALL_DATA = ${INSTALL} -m 644
+ MKINSTALLDIRS = $(top_builddir)/./mkinstalldirs
+-mkinstalldirs = $(SHELL) `case "$(MKINSTALLDIRS)" in /*) echo "$(MKINSTALLDIRS)" ;; *) echo "$(top_builddir)/mkinstalldirs" ;; esac`
++mkinstalldirs = $(SHELL) $(MKINSTALLDIRS)
+ 
+ CC = gcc
+ GMSGFMT = /usr/bin/msgfmt
+Index: po/Makefile.in.in
+===================================================================
+--- po/Makefile.in.in.orig
++++ po/Makefile.in.in
+@@ -29,7 +29,7 @@ gettextsrcdir = $(datadir)/gettext/po
+ INSTALL = @INSTALL@
+ INSTALL_DATA = @INSTALL_DATA@
+ MKINSTALLDIRS = @MKINSTALLDIRS@
+-mkinstalldirs = $(SHELL) `case "$(MKINSTALLDIRS)" in /*) echo "$(MKINSTALLDIRS)" ;; *) echo "$(top_builddir)/mkinstalldirs" ;; esac`
++mkinstalldirs = $(SHELL) $(MKINSTALLDIRS)
+ 
+ CC = @CC@
+ GMSGFMT = @GMSGFMT@
+Index: popt/autogen.sh
+===================================================================
+--- popt/autogen.sh.orig
++++ popt/autogen.sh
+@@ -28,7 +28,7 @@ fi
+ 
+ cd "$THEDIR"
+ 
+-if [ X"$@" = X  -a "X`uname -s`" = "XLinux" ]; then
++if [ X"$*" = X  -a "X`uname -s`" = "XLinux" ]; then
+     $srcdir/configure --prefix=/usr "$@"
+ else
+     $srcdir/configure "$@"
+Index: popt/configure.ac
+===================================================================
+--- popt/configure.ac.orig
++++ popt/configure.ac
+@@ -1,11 +1,12 @@
+ AC_INIT(popt.h)
+ AC_CANONICAL_SYSTEM
+ AC_PREREQ(2.12)
+-AC_CONFIG_HEADERS
+ AM_INIT_AUTOMAKE(popt, 1.10.2)
+ AM_CONFIG_HEADER(config.h)
+ 
+-ALL_LINGUAS="cs da de es eu_ES fi fr gl hu id is it ja ko no pl pt pt_BR ro ru sk sl sr sv tr uk wa zh zh_CN zh_TW"
++ALL_LINGUAS="cs da de es eu_ES fi fr gl hu id is it ja ko nb pl pt pt_BR ro ru sk sl sr sv tr uk wa zh zh_CN zh_TW"
++MKINSTALLDIRS="\$(top_builddir)/./mkinstalldirs"
++AC_SUBST(MKINSTALLDIRS)
+ 
+ AC_ISC_POSIX
+ 
+Index: popt/po/Makefile.in
+===================================================================
+--- popt/po/Makefile.in.orig
++++ popt/po/Makefile.in
+@@ -29,7 +29,7 @@ gettextsrcdir = $(datadir)/gettext/po
+ INSTALL = /usr/bin/install -c
+ INSTALL_DATA = ${INSTALL} -m 644
+ MKINSTALLDIRS = $(top_builddir)/./../mkinstalldirs
+-mkinstalldirs = $(SHELL) `case "$(MKINSTALLDIRS)" in /*) echo "$(MKINSTALLDIRS)" ;; *) echo "$(top_builddir)/mkinstalldirs" ;; esac`
++mkinstalldirs = $(SHELL) $(MKINSTALLDIRS)
+ 
+ CC = gcc
+ GMSGFMT = /usr/bin/msgfmt
+Index: popt/po/Makefile.in.in
+===================================================================
+--- popt/po/Makefile.in.in.orig
++++ popt/po/Makefile.in.in
+@@ -29,7 +29,7 @@ gettextsrcdir = $(datadir)/gettext/po
+ INSTALL = @INSTALL@
+ INSTALL_DATA = @INSTALL_DATA@
+ MKINSTALLDIRS = @MKINSTALLDIRS@
+-mkinstalldirs = $(SHELL) `case "$(MKINSTALLDIRS)" in /*) echo "$(MKINSTALLDIRS)" ;; *) echo "$(top_builddir)/mkinstalldirs" ;; esac`
++mkinstalldirs = $(SHELL) $(MKINSTALLDIRS)
+ 
+ CC = @CC@
+ GMSGFMT = @GMSGFMT@
+Index: rpmdb/Makefile.am
+===================================================================
+--- rpmdb/Makefile.am.orig
++++ rpmdb/Makefile.am
+@@ -31,7 +31,7 @@ noinst_HEADERS = fprint.h header_interna
+ pkgbindir = @RPMCONFIGDIR@
+ pkgbin_PROGRAMS = \
+ 	rpmdb_archive rpmdb_checkpoint rpmdb_deadlock rpmdb_dump rpmdb_load \
+-	rpmdb_printlog rpmdb_recover rpmdb_svc rpmdb_stat rpmdb_upgrade \
++	rpmdb_printlog rpmdb_recover rpmdb_stat rpmdb_upgrade \
+ 	rpmdb_verify 
+ 
+ mylibs = librpmdb.la
+@@ -42,7 +42,7 @@ LIBS =
+ libdb_la = $(top_builddir)/$(WITH_DB_SUBDIR)/libdb.la
+ 
+ # XXX grrr, RPM_BUILD_ROOT prevents build pollution if/when -lrpm different
+-LDFLAGS = -L$(RPM_BUILD_ROOT)$(usrlibdir) -L$(DESTDIR)$(usrlibdir)
++LDFLAGS =
+ 
+ usrlibdir = $(libdir)@MARK64@
+ usrlib_LTLIBRARIES = librpmdb.la
+Index: rpmio/Makefile.am
+===================================================================
+--- rpmio/Makefile.am.orig
++++ rpmio/Makefile.am
+@@ -24,9 +24,9 @@ pkginc_HEADERS = \
+ 	rpmsq.h rpmsw.h ugid.h
+ noinst_HEADERS = rpmio_internal.h rpmlua.h rpmhook.h
+ 
+-BEECRYPTLOBJS = $(shell test X"@WITH_BEECRYPT_SUBDIR@" != X && cat $(top_builddir)/@WITH_BEECTYPT_SUBDIR@/listobjs)
++BEECRYPTLOBJS = $(shell test X"@WITH_BEECRYPT_SUBDIR@" != X && cat $(top_builddir)/@WITH_BEECRYPT_SUBDIR@/listobjs)
+ 
+-LDFLAGS = -L$(RPM_BUILD_ROOT)$(usrlibdir) -L$(DESTDIR)$(usrlibdir)
++LDFLAGS =
+ 
+ usrlibdir = $(libdir)@MARK64@
+ usrlib_LTLIBRARIES = librpmio.la
+@@ -41,14 +41,14 @@ librpmio_la_LDFLAGS = -release 4.4 $(LDF
+ 	@WITH_MAGIC_LIB@ \
+ 	@WITH_ZLIB_LIB@ \
+ 	-lpthread
+-librpmio_la_LIBADD = # $(BEECRYPTLOBJS)
+-librpmio_la_DEPENDENCIES = # .created
++librpmio_la_LIBADD = $(BEECRYPTLOBJS)
++librpmio_la_DEPENDENCIES = .created
+ 
+ .created:
+ 	if test X"@WITH_BEECRYPT_SUBDIR@" != X; then \
+ 	${MAKE} -C $(top_builddir)/@WITH_BEECRYPT_SUBDIR@ listobjs ; \
+ 	for lo in $(BEECRYPTLOBJS); do \
+-	  [ -f $$lo ] || $(LN_S) $(top_builddir)/@WITH_BEECRYPT_SUBDIR@/$$lo $$lo ; \
++	  [ -f $$lo ] || sed -e "s!'!'$(top_builddir)/beecrypt/!" < $(top_builddir)/beecrypt/$$lo > $$lo ; \
+ 	done \
+ 	fi
+ 	touch $@
+Index: scripts/Makefile.am
+===================================================================
+--- scripts/Makefile.am.orig
++++ scripts/Makefile.am
+@@ -6,6 +6,7 @@ EXTRA_DIST = \
+ 	brp-compress brp-python-bytecompile brp-java-gcjcompile brp-redhat \
+ 	brp-strip brp-strip-comment-note \
+ 	brp-strip-shared brp-strip-static-archive brp-sparc64-linux \
++	brp-lib64-linux brp-symlink \
+ 	check-files check-prereqs convertrpmrc.sh cross-build \
+ 	find-debuginfo.sh find-lang.sh find-prov.pl find-req.pl \
+ 	cpanflute cpanflute2 Specfile.pm find-provides.perl \
+@@ -17,7 +18,8 @@ EXTRA_DIST = \
+ 	sql.prov sql.req tcl.req tgpg trpm u_pkg.sh \
+ 	vpkg-provides.sh vpkg-provides2.sh \
+ 	macros.perl* macros.python* \
+-	macros.php* find-*.php find-php-*
++	macros.php* find-*.php find-php-* \
++	find-provides.ksyms find-requires.ksyms
+ 
+ installprefix = $(DESTDIR)
+ 
+@@ -28,6 +30,7 @@ config_SCRIPTS = \
+ 	brp-compress brp-python-bytecompile brp-java-gcjcompile brp-redhat \
+ 	brp-strip brp-strip-comment-note \
+ 	brp-strip-shared brp-strip-static-archive brp-sparc64-linux \
++	brp-lib64-linux brp-symlink \
+ 	check-files check-prereqs convertrpmrc.sh cross-build \
+ 	find-debuginfo.sh find-lang.sh find-prov.pl find-req.pl \
+ 	cpanflute cpanflute2 Specfile.pm find-provides.perl \
+@@ -36,4 +39,5 @@ config_SCRIPTS = \
+ 	rpmdb_loadcvt rpmdiff rpmdiff.cgi \
+ 	rpm.daily rpm.log rpm.xinetd rpm2cpio.sh \
+ 	sql.prov sql.req tcl.req tgpg trpm u_pkg.sh \
+-	vpkg-provides.sh vpkg-provides2.sh
++	vpkg-provides.sh vpkg-provides2.sh \
++	find-provides.ksyms find-requires.ksyms
diff --git a/buildidprov.diff b/buildidprov.diff
deleted file mode 100644
index fd5b417..0000000
--- a/buildidprov.diff
+++ /dev/null
@@ -1,62 +0,0 @@
-From: Jan Blunck <jblunck@suse.de>
-Subject: Let debuginfo packages provide the build-id
-
-This patch lets debuginfo packages provide build-id like follows:
-
- debuginfo(build-id) = c63cb23876c5fa85f36beaff58f8557e1bf22517
-
-Users can therefore ask zypper to install the correct debuginfo package with:
-
- zypper install -C "debuginfo(build-id) = c63cb23876c5fa85f36beaff58f8557e1bf22517"
-
---- ./autodeps/linux.prov.orig	2011-05-11 15:58:28.000000000 +0000
-+++ ./autodeps/linux.prov	2011-05-11 15:59:31.000000000 +0000
-@@ -5,6 +5,9 @@
- IFS=$'\n'
- filelist=($(cat))
- 
-+debuginfolist=($(printf "%s\n" "${filelist[@]}" | grep "/usr/lib/debug/"))
-+filelist=($(printf "%s\n" "${filelist[@]}" | grep -v "/usr/lib/debug/"))
-+
- solist=($(printf "%s\n" "${filelist[@]}" | grep "\\.so" | grep -v "^/lib/ld.so" | \
- 	  tr '\n' '\0' | xargs -0 -r file -L | grep "ELF.*shared object" | \
- 	  cut -d: -f1))
-@@ -71,6 +74,11 @@ done | sort -u
-      printf "%s\n" "${firmwarelist[@]}" | /usr/lib/rpm/firmware.prov | sort -u
- 
- #
-+# --- debuginfo files
-+[ -x /usr/lib/rpm/debuginfo.prov -a -n "$debuginfolist" ] &&
-+     printf "%s\n" "${debuginfolist[@]}" | /usr/lib/rpm/debuginfo.prov | sort -u
-+
-+#
- # --- Mono exes/dlls
- : ${MONO_PREFIX=/usr}
- if [ -x $MONO_PREFIX/bin/mono -a -n "$monolist" ] ; then
---- ./macros.in.orig	2011-05-11 15:59:08.000000000 +0000
-+++ ./macros.in	2011-05-11 15:59:31.000000000 +0000
-@@ -182,7 +182,8 @@
- %package debuginfo\
- Summary: Debug information for package %{name}\
- Group: Development/Debug\
--AutoReqProv: 0\
-+AutoReq: 0\
-+AutoProv: 1\
- #Requires: %{?!debug_package_requires:%{name} = %{version}-%{release}}%{?debug_package_requires}\
- %description debuginfo\
- This package provides debug information for package %{name}.\
---- ./scripts/debuginfo.prov.orig	2011-05-11 15:59:31.000000000 +0000
-+++ ./scripts/debuginfo.prov	2011-05-11 15:59:31.000000000 +0000
-@@ -0,0 +1,12 @@
-+#!/bin/sh
-+
-+while read instfile ; do
-+    case $instfile in
-+	*/usr/lib/debug/.build-id/*.debug)
-+	    if [ -f "$instfile" ] ; then
-+		BUILDID=$(echo $instfile | sed -ne 's|.*/usr/lib/debug/.build-id/\([0-9a-f]*\)/\([0-9a-f]*\)\.debug|\1\2|p')
-+		echo "debuginfo(build-id) = $BUILDID"
-+	    fi
-+	    ;;
-+    esac
-+done
diff --git a/buildpipe.diff b/buildpipe.diff
deleted file mode 100644
index 81099ed..0000000
--- a/buildpipe.diff
+++ /dev/null
@@ -1,29 +0,0 @@
---- build/rpmfc.c.orig	2011-06-06 11:27:32.000000000 +0000
-+++ build/rpmfc.c	2011-06-08 10:00:38.000000000 +0000
-@@ -165,12 +165,14 @@ static int sigpipe_init(void)
-     fcntl(_sigpipe[1], F_SETFD, (fcntl(_sigpipe[1], F_GETFD)|FD_CLOEXEC));
-     /* XXX SIGPIPE too, but NSPR disables it already, dont mess with it */
-     signal(SIGCHLD, sigpipe_handler); 
-+    signal(SIGPIPE, SIG_IGN); 
-     return _sigpipe[0];
- }
- 
- static void sigpipe_finish(void)
- {
-     signal(SIGCHLD, SIG_DFL); 
-+    signal(SIGPIPE, SIG_DFL); 
-     close(_sigpipe[0]);
-     close(_sigpipe[1]);
-     _sigpipe[0] = -1;
-@@ -298,10 +300,9 @@ static StringBuf getOutputFrom(ARGV_t ar
- 	    appendStringBuf(readBuff, buf);
- 	}
- 
--	/* Child exited, we're done */
-+	/* Child exited, we're maybe done */
- 	if (FD_ISSET(sigpipe, &ibits)) {
- 	    while (read(sigpipe, buf, sizeof(buf)) > 0) {};
--	    break;
- 	}
-     }
- 
diff --git a/buildsubdir.diff b/buildsubdir.diff
new file mode 100644
index 0000000..fc7923b
--- /dev/null
+++ b/buildsubdir.diff
@@ -0,0 +1,24 @@
+Fix a typo: the macro is currently called %{buildsubdir}
+
+--- ./build/files.c.orig	2005-12-14 19:22:43.000000000 +0000
++++ ./build/files.c	2006-02-17 13:57:25.000000000 +0000
+@@ -1942,7 +1954,7 @@ static int processPackageFiles(Spec spec
+ 	if (*pkg->fileFile == '/') {
+ 	    ffn = rpmGetPath(pkg->fileFile, NULL);
+ 	} else {
+-	    /* XXX FIXME: add %{_buildsubdir} */
++	    /* XXX FIXME: add %{buildsubdir} */
+ 	    ffn = rpmGetPath("%{_builddir}/",
+ 		(spec->buildSubdir ? spec->buildSubdir : "") ,
+ 		"/", pkg->fileFile, NULL);
+--- ./build/pack.c.orig	2005-07-15 15:06:57.000000000 +0000
++++ ./build/pack.c	2005-12-18 15:14:56.000000000 +0000
+@@ -138,7 +138,7 @@ static /*@only@*/ /*@null@*/ StringBuf a
+     FILE * f;
+     FD_t fd;
+ 
+-    fn = rpmGetPath("%{_builddir}/%{?_buildsubdir:%{_buildsubdir}/}", file, NULL);
++    fn = rpmGetPath("%{_builddir}/%{?buildsubdir:%{buildsubdir}/}", file, NULL);
+ 
+     fd = Fopen(fn, "r.ufdio");
+     if (fn != buf) fn = _free(fn);
diff --git a/checkfilesnoinfodir.diff b/checkfilesnoinfodir.diff
index 7a467db..48821b9 100644
--- a/checkfilesnoinfodir.diff
+++ b/checkfilesnoinfodir.diff
@@ -1,17 +1,15 @@
 Exclude /usr/share/info/dir from check-files. Probably only
 interesting for SUSE.
 
-Index: scripts/check-files
-===================================================================
---- scripts/check-files.orig
-+++ scripts/check-files
-@@ -22,7 +22,9 @@ LC_ALL=C sort > $FILES_RPM
+--- ./scripts/check-files.orig	2005-12-15 14:07:15.000000000 +0000
++++ ./scripts/check-files	2005-12-15 14:09:34.000000000 +0000
+@@ -21,7 +21,9 @@ find $RPM_BUILD_ROOT -type f -o -type l 
+ LC_ALL=C sort > $FILES_RPM
  
- diff -d "$FILES_DISK" "$FILES_RPM" | grep "^< " | cut -c3- | 
- while read f; do
+ for f in `diff -d "$FILES_DISK" "$FILES_RPM" | grep "^< " | cut -c3-`; do
 -	echo $f | sed -e "s#^$RPM_BUILD_ROOT#   #g"
 +	if test "$RPM_BUILD_ROOT/usr/share/info/dir" != "$f" ; then
-+		echo $f | sed -e "s#^$RPM_BUILD_ROOT#   #g"
++	    echo $f | sed -e "s#^$RPM_BUILD_ROOT#   #g"
 +	fi
  done
  
diff --git a/chownwarn.diff b/chownwarn.diff
index fccaa1a..c435432 100644
--- a/chownwarn.diff
+++ b/chownwarn.diff
@@ -1,50 +1,26 @@
-Do not abort if chown/chmod fails but the file is already correct
+Warn the user if chown/fchown fails.
 
---- ./lib/fsm.c.orig	2011-03-02 06:46:13.000000000 +0000
-+++ ./lib/fsm.c	2011-05-10 16:30:55.000000000 +0000
-@@ -1449,6 +1449,11 @@ static int fsmRename(FSM_t fsm)
- static int fsmChown(FSM_t fsm)
- {
-     int rc = chown(fsm->path, fsm->sb.st_uid, fsm->sb.st_gid);
-+    if (rc < 0) {
-+	struct stat st;
-+	if (lstat(fsm->path, &st) == 0 && st.st_uid == fsm->sb.st_uid && st.st_gid == fsm->sb.st_gid)
+--- ./lib/fsm.c.orig	2005-12-14 20:08:04.000000000 +0000
++++ ./lib/fsm.c	2005-12-16 18:19:37.000000000 +0000
+@@ -2186,6 +2191,10 @@ if (!(fsm->mapFlags & CPIO_ALL_HARDLINKS
+ 	break;
+     case FSM_CHOWN:
+ 	rc = chown(fsm->path, st->st_uid, st->st_gid);
++	if (rc < 0 && errno == EPERM) {
++	    rpmMessage(RPMMESS_WARNING, "can't chown %s (%s)\n", fsm->path, strerror(errno));
 +	    rc = 0;
-+    }
-     if (_fsm_debug && (FSM_CHOWN & FSM_SYSCALL))
- 	rpmlog(RPMLOG_DEBUG, " %8s (%s, %d, %d) %s\n", fileStageString(FSM_CHOWN),
- 	       fsm->path, (int)fsm->sb.st_uid, (int)fsm->sb.st_gid,
-@@ -1461,6 +1466,11 @@ static int fsmLChown(FSM_t fsm)
- {
-     int rc = 0;
-     rc = lchown(fsm->path, fsm->sb.st_uid, fsm->sb.st_gid);
-+    if (rc < 0) {
-+	struct stat st;
-+	if (lstat(fsm->path, &st) == 0 && st.st_uid == fsm->sb.st_uid && st.st_gid == fsm->sb.st_gid)
++	}
+ 	if (_fsm_debug && (stage & FSM_SYSCALL))
+ 	    rpmMessage(RPMMESS_DEBUG, " %8s (%s, %d, %d) %s\n", cur,
+ 		fsm->path, (int)st->st_uid, (int)st->st_gid,
+@@ -2195,6 +2204,10 @@ if (!(fsm->mapFlags & CPIO_ALL_HARDLINKS
+     case FSM_LCHOWN:
+ #if ! CHOWN_FOLLOWS_SYMLINK
+ 	rc = lchown(fsm->path, st->st_uid, st->st_gid);
++	if (rc < 0 && errno == EPERM) {
++	    rpmMessage(RPMMESS_WARNING, "can't lchown %s (%s)\n", fsm->path, strerror(errno));
 +	    rc = 0;
-+    }
-     if (_fsm_debug && (FSM_LCHOWN & FSM_SYSCALL))
- 	rpmlog(RPMLOG_DEBUG, " %8s (%s, %d, %d) %s\n", fileStageString(FSM_LCHOWN),
- 	       fsm->path, (int)fsm->sb.st_uid, (int)fsm->sb.st_gid,
-@@ -1472,6 +1482,11 @@ static int fsmLChown(FSM_t fsm)
- static int fsmChmod(FSM_t fsm)
- {
-     int rc = chmod(fsm->path, (fsm->sb.st_mode & 07777));
-+    if (rc < 0) {
-+	struct stat st;
-+	if (lstat(fsm->path, &st) == 0 && (st.st_mode & 07777) == (fsm->sb.st_mode & 07777))
-+	    rc = 0;
-+    }
-     if (_fsm_debug && (FSM_CHMOD & FSM_SYSCALL))
- 	rpmlog(RPMLOG_DEBUG, " %8s (%s, 0%04o) %s\n", fileStageString(FSM_CHMOD),
- 	       fsm->path, (unsigned)(fsm->sb.st_mode & 07777),
-@@ -2033,6 +2048,9 @@ if (!(fsm->mapFlags & CPIO_ALL_HARDLINKS
- 		    st->st_mtime = rpmfiFMtimeIndex(fi, fsm->ix);
- 		    rc = fsmUtime(fsm);
- 		    st->st_mtime = mtime;
-+		    /* utime error is not critical for directories */
-+		    if (rc && S_ISDIR(st->st_mode))
-+			rc = 0;
- 		}
- #if WITH_CAP
- 		if (!rc && !S_ISDIR(st->st_mode) && !getuid()) {
++	}
+ 	if (_fsm_debug && (stage & FSM_SYSCALL))
+ 	    rpmMessage(RPMMESS_DEBUG, " %8s (%s, %d, %d) %s\n", cur,
+ 		fsm->path, (int)st->st_uid, (int)st->st_gid,
diff --git a/compress.diff b/compress.diff
new file mode 100644
index 0000000..82295f3
--- /dev/null
+++ b/compress.diff
@@ -0,0 +1,31 @@
+Fix uncompress waitpid logic to shut up the compiler [#160434]
+
+--- ./file/src/compress.c.orig	2006-03-24 15:37:23.000000000 +0000
++++ ./file/src/compress.c	2006-03-24 15:42:52.000000000 +0000
+@@ -341,6 +341,7 @@ uncompressbuf(struct magic_set *ms, int 
+ 		file_error(ms, errno, "cannot create pipe");	
+ 		return 0;
+ 	}
++	pid2 = (pid_t)-1;
+ 	switch ((pid1=fork())) {
+ 	case 0:	/* child */
+ 		(void) close(0);
+@@ -382,7 +383,7 @@ uncompressbuf(struct magic_set *ms, int 
+ 			 * fork again, to avoid blocking because both
+ 			 * pipes filled
+ 			 */
+-			switch (fork()) {
++			switch ((pid2 = fork())) {
+ 			case 0: /* child */
+ 				(void)close(fdout[0]);
+ 				if (swrite(fdin[1], old, n) != n) {
+@@ -439,7 +440,8 @@ err:
+ 			(void) close(fdin[1]);
+ 		(void) close(fdout[0]);
+ 		waitpid(pid1, NULL, 0);
+-		waitpid(pid2, NULL, 0);
++		if (pid2 != (pid_t)-1)
++			waitpid(pid2, NULL, 0);
+ 		return n;
+ 	}
+ 	/*@notreached@*/
diff --git a/convertdb1static.diff b/convertdb1static.diff
index 1b9e796..52caaf5 100644
--- a/convertdb1static.diff
+++ b/convertdb1static.diff
@@ -1,369 +1,35 @@
-Build convertdb1, too.
+Build convertdb1 as static binary so that it always works.
 
---- ./Makefile.am.orig	2011-05-11 15:15:27.000000000 +0000
-+++ ./Makefile.am	2011-05-11 15:18:21.000000000 +0000
-@@ -174,6 +174,10 @@ bin_PROGRAMS +=		rpmqpack
- rpmqpack_SOURCES =      rpmqpack.c
- rpmqpack_LDADD =        lib/librpm.la
+diff -ur ./tools/Makefile.am ../rpm-4.4.2.orig/tools/Makefile.am
+--- ./tools/Makefile.am	2006-09-21 19:35:56.000000000 +0200
++++ ../rpm-4.4.2.orig/tools/Makefile.am	2006-09-21 20:59:01.000000000 +0200
+@@ -18,22 +18,26 @@
  
-+bin_PROGRAMS +=	convertdb1
-+convertdb1_SOURCES =	tools/convertdb1.c
-+convertdb1_LDADD =	lib/librpm.la
-+
- rpmconfig_DATA = rpmrc
- rpmrc: $(top_srcdir)/rpmrc.in
- 	@$(SED) \
---- tools/convertdb1.c.orig	2011-05-12 13:31:37.000000000 +0000
-+++ tools/convertdb1.c	2011-05-12 13:31:28.000000000 +0000
-@@ -0,0 +1,351 @@
-+#if defined(HAVE_CONFIG_H)
-+#include "system.h"
-+const char *__progname;
-+#else
-+#include <sys/types.h>
-+#include <fcntl.h>
-+#include <string.h>
-+#endif
-+
-+#include <rpmlib.h>
-+#include <rpmts.h>
-+#include <rpmdb.h>
-+#include <rpmio.h>
-+#include <rpmmacro.h>
-+
-+#define FA_MAGIC      0x02050920
-+
-+struct faFileHeader{
-+    unsigned int magic;
-+    unsigned int firstFree;
-+};
-+
-+struct faHeader {
-+    unsigned int size;
-+    unsigned int freeNext; /* offset of the next free block, 0 if none */
-+    unsigned int freePrev;
-+    unsigned int isFree;
-+
-+    /* note that the u16's appear last for alignment/space reasons */
-+};
-+
-+
-+static int fadFileSize;
-+
-+static ssize_t Pread(FD_t fd, void * buf, size_t count, off_t offset) {
-+    if (Fseek(fd, offset, SEEK_SET) < 0)
-+        return -1;
-+    return Fread(buf, sizeof(char), count, fd);
-+}
-+
-+static FD_t fadOpen(const char * path)
-+{
-+    struct faFileHeader newHdr;
-+    FD_t fd;
-+    struct stat stb;
-+
-+    fd = Fopen(path, "r.fdio");
-+    if (!fd || Ferror(fd))
-+	return NULL;
-+
-+    if (fstat(Fileno(fd), &stb)) {
-+	Fclose(fd);
-+        return NULL;
-+    }
-+    fadFileSize = stb.st_size;
-+
-+    /* is this file brand new? */
-+    if (fadFileSize == 0) {
-+	Fclose(fd);
-+	return NULL;
-+    }
-+    if (Pread(fd, &newHdr, sizeof(newHdr), 0) != sizeof(newHdr)) {
-+	Fclose(fd);
-+	return NULL;
-+    }
-+    if (newHdr.magic != FA_MAGIC) {
-+	Fclose(fd);
-+	return NULL;
-+    }
-+    /*@-refcounttrans@*/ return fd /*@=refcounttrans@*/ ;
-+}
-+
-+static int fadNextOffset(FD_t fd, unsigned int lastOffset)
-+{
-+    struct faHeader header;
-+    int offset;
-+
-+    offset = (lastOffset)
-+	? (lastOffset - sizeof(header))
-+	: sizeof(struct faFileHeader);
-+
-+    if (offset >= fadFileSize)
-+	return 0;
-+
-+    if (Pread(fd, &header, sizeof(header), offset) != sizeof(header))
-+	return 0;
-+
-+    if (!lastOffset && !header.isFree)
-+	return (offset + sizeof(header));
-+
-+    do {
-+	offset += header.size;
-+
-+	if (Pread(fd, &header, sizeof(header), offset) != sizeof(header))
-+	    return 0;
-+
-+	if (!header.isFree) break;
-+    } while (offset < fadFileSize && header.isFree);
-+
-+    if (offset < fadFileSize) {
-+	/* Sanity check this to make sure we're not going in loops */
-+	offset += sizeof(header);
-+
-+	if (offset <= lastOffset) return -1;
-+
-+	return offset;
-+    } else
-+	return 0;
-+}
-+
-+static int fadFirstOffset(FD_t fd)
-+{
-+    return fadNextOffset(fd, 0);
-+}
-+
-+/*@-boundsread@*/
-+static int dncmp(const void * a, const void * b)
-+	/*@*/
-+{
-+    const char *const * first = a;
-+    const char *const * second = b;
-+    return strcmp(*first, *second);
-+}
-+/*@=boundsread@*/
-+
-+static void compressFilelist(Header h)
-+{
-+    struct rpmtd_s fileNames;
-+    char ** dirNames;
-+    const char ** baseNames;
-+    uint32_t * dirIndexes;
-+    rpm_count_t count;
-+    int xx, i;
-+    int dirIndex = -1;
-+
-+    /*
-+     * This assumes the file list is already sorted, and begins with a
-+     * single '/'. That assumption isn't critical, but it makes things go
-+     * a bit faster.
-+     */
-+
-+    if (headerIsEntry(h, RPMTAG_DIRNAMES)) {
-+	xx = headerDel(h, RPMTAG_OLDFILENAMES);
-+	return;		/* Already converted. */
-+    }
-+
-+    if (!headerGet(h, RPMTAG_OLDFILENAMES, &fileNames, HEADERGET_MINMEM))
-+	return;
-+    count = rpmtdCount(&fileNames);
-+    if (count < 1)
-+	return;
-+
-+    dirNames = xmalloc(sizeof(*dirNames) * count);	/* worst case */
-+    baseNames = xmalloc(sizeof(*dirNames) * count);
-+    dirIndexes = xmalloc(sizeof(*dirIndexes) * count);
-+
-+    /* HACK. Source RPM, so just do things differently */
-+    {	const char *fn = rpmtdGetString(&fileNames);
-+	if (fn && *fn != '/') {
-+	    dirIndex = 0;
-+	    dirNames[dirIndex] = xstrdup("");
-+	    while ((i = rpmtdNext(&fileNames)) >= 0) {
-+		dirIndexes[i] = dirIndex;
-+		baseNames[i] = rpmtdGetString(&fileNames);
-+	    }
-+	    goto exit;
-+	}
-+    }
-+
-+    while ((i = rpmtdNext(&fileNames)) >= 0) {
-+	char ** needle;
-+	char savechar;
-+	char * baseName;
-+	size_t len;
-+	const char *filename = rpmtdGetString(&fileNames);
-+
-+	if (filename == NULL)	/* XXX can't happen */
-+	    continue;
-+	baseName = strrchr(filename, '/') + 1;
-+	len = baseName - filename;
-+	needle = dirNames;
-+	savechar = *baseName;
-+	*baseName = '\0';
-+	if (dirIndex < 0 ||
-+	    (needle = bsearch(&filename, dirNames, dirIndex + 1, sizeof(dirNames[0]), dncmp)) == NULL) {
-+	    char *s = xmalloc(len + 1);
-+	    rstrlcpy(s, filename, len + 1);
-+	    dirIndexes[i] = ++dirIndex;
-+	    dirNames[dirIndex] = s;
-+	} else
-+	    dirIndexes[i] = needle - dirNames;
-+
-+	*baseName = savechar;
-+	baseNames[i] = baseName;
-+    }
-+
-+exit:
-+    if (count > 0) {
-+	headerPutUint32(h, RPMTAG_DIRINDEXES, dirIndexes, count);
-+	headerPutStringArray(h, RPMTAG_BASENAMES, baseNames, count);
-+	headerPutStringArray(h, RPMTAG_DIRNAMES,
-+			     (const char **) dirNames, dirIndex + 1);
-+    }
-+
-+    rpmtdFreeData(&fileNames);
-+    for (i = 0; i <= dirIndex; i++) {
-+	free(dirNames[i]);
-+    }
-+    free(dirNames);
-+    free(baseNames);
-+    free(dirIndexes);
-+
-+    xx = headerDel(h, RPMTAG_OLDFILENAMES);
-+}
-+
-+/*
-+ * Up to rpm 3.0.4, packages implicitly provided their own name-version-release.
-+ * Retrofit an explicit "Provides: name = epoch:version-release.
-+ */
-+static void providePackageNVR(Header h)
-+{
-+    const char *name;
-+    char *pEVR;
-+    rpmsenseFlags pFlags = RPMSENSE_EQUAL;
-+    int bingo = 1;
-+    struct rpmtd_s pnames;
-+    rpmds hds, nvrds;
-+
-+    /* Generate provides for this package name-version-release. */
-+    pEVR = headerGetEVR(h, &name);
-+    if (!(name && pEVR))
-+	return;
-+
-+    /*
-+     * Rpm prior to 3.0.3 does not have versioned provides.
-+     * If no provides at all are available, we can just add.
-+     */
-+    if (!headerGet(h, RPMTAG_PROVIDENAME, &pnames, HEADERGET_MINMEM)) {
-+	goto exit;
-+    }
-+
-+    /*
-+     * Otherwise, fill in entries on legacy packages.
-+     */
-+    if (!headerIsEntry(h, RPMTAG_PROVIDEVERSION)) {
-+	while (rpmtdNext(&pnames) >= 0) {
-+	    rpmsenseFlags fdummy = RPMSENSE_ANY;
-+
-+	    headerPutString(h, RPMTAG_PROVIDEVERSION, "");
-+	    headerPutUint32(h, RPMTAG_PROVIDEFLAGS, &fdummy, 1);
-+	}
-+	goto exit;
-+    }
-+
-+    /* see if we already have this provide */
-+    hds = rpmdsNew(h, RPMTAG_PROVIDENAME, 0);
-+    nvrds = rpmdsSingle(RPMTAG_PROVIDENAME, name, pEVR, pFlags);
-+    if (rpmdsFind(hds, nvrds) >= 0) {
-+	bingo = 0;
-+    }
-+    rpmdsFree(hds);
-+    rpmdsFree(nvrds);
-+
-+exit:
-+    if (bingo) {
-+	const char *evr = pEVR;
-+	headerPutString(h, RPMTAG_PROVIDENAME, name);
-+	headerPutString(h, RPMTAG_PROVIDEVERSION, evr);
-+	headerPutUint32(h, RPMTAG_PROVIDEFLAGS, &pFlags, 1);
-+    }
-+    rpmtdFreeData(&pnames);
-+    free(pEVR);
-+}
-+/*@=bounds@*/
-+
-+static rpmdb db;
-+
-+int
-+main(int argc, char ** argv)
-+{
-+  FD_t fd;
-+  int offset;
-+  Header h;
-+  const char *name;
-+  const char *version;
-+  const char *release;
-+  rpmts ts;
-+
-+  if (argc != 2)
-+    {
-+      fprintf(stderr, "usage: %s <packages.rpm>\n", argv[0]);
-+      exit(1);
-+    }
-+  if ((fd = fadOpen(argv[1])) == 0)
-+    {
-+      fprintf(stderr, "could not open %s\n", argv[1]);
-+      exit(1);
-+    }
-+  rpmInitMacros(NULL, "/usr/lib/rpm/macros");
-+
-+  /* speed things up */
-+  (void) rpmDefineMacro(NULL, "_rpmdb_rebuild %{nil}", -1);
-+
-+  ts = rpmtsCreate();
-+
-+  if (rpmtsOpenDB(ts, O_RDWR)) {
-+    fprintf(stderr, "could not open rpm database\n");
-+    exit(1);
-+  }
-+
-+  for (offset = fadFirstOffset(fd); offset; offset = fadNextOffset(fd, offset))
-+    {
-+      rpmdbMatchIterator mi;
-+
-+      /* have to use lseek instead of Fseek because headerRead
-+       * uses low level IO
-+       */
-+      if (lseek(Fileno(fd), (off_t)offset, SEEK_SET) == -1)
-+	{
-+	  perror("lseek");
-+	  continue;
-+	}
-+      h = headerRead(fd, HEADER_MAGIC_NO);
-+      if (!h)
-+	continue;
-+      compressFilelist(h);
-+      providePackageNVR(h);
-+      headerNVR(h, &name, &version, &release);
-+      mi = rpmdbInitIterator(db, RPMTAG_NAME, name, 0);
-+      rpmdbSetIteratorRE(mi, RPMTAG_VERSION, RPMMIRE_DEFAULT, version);
-+      rpmdbSetIteratorRE(mi, RPMTAG_RELEASE, RPMMIRE_DEFAULT, release);
-+      if (rpmdbNextIterator(mi))
-+        {
-+	  printf("%s-%s-%s is already in database\n", name, version, release);
-+	  rpmdbFreeIterator(mi);
-+	  headerFree(h);
-+	  continue;
-+        }
-+      rpmdbFreeIterator(mi);
-+      if (rpmtsHeaderAddDB(ts, h))
-+	{
-+	  fprintf(stderr, "could not add %s-%s-%s!\n", name, version, release);
-+	}
-+      headerFree(h);
-+    }
-+  Fclose(fd);
-+  rpmtsCloseDB(ts);
-+  rpmtsFree(ts);
-+  return 0;
-+}
-+
+ EXTRA_DIST =	rpminject.c rpmsort.c rpmxml.c rpmxp.c rpmxp.h hashtab.h
+ 
+-EXTRA_PROGRAMS = debugedit convertdb1 rpminject rpmsort rpmtool rpmxml
++EXTRA_PROGRAMS = rpminject rpmsort rpmtool rpmxml
+ 
+ LDADD = \
+ 	$(top_builddir)/lib/librpm.la
+ 
+-staticLDFLAGS = @LDFLAGS_STATIC@ @LDFLAGS_NPTL@
++staticLDFLAGS = @LDFLAGS_STATIC@ # @LDFLAGS_NPTL@
+ 
+ noinst_PROGRAMS = dumpdb
+ 
+ pkgbindir = @RPMCONFIGDIR@
+-pkgbin_PROGRAMS = @WITH_LIBDWARF_DEBUGEDIT@ javadeps rpmcache rpmdeps rpmfile
++pkgbin_PROGRAMS = debugedit javadeps rpmcache rpmdeps rpmfile convertdb1
+ MAGIC	= $(pkgbindir)/magic
+ 
+ bin_PROGRAMS =	rpmgraph
+ 
+ convertdb1_SOURCES =	convertdb1.c
++convertdb1_LDFLAGS =	$(staticLDFLAGS)
++convertdb1_LDADD = \
++	$(top_builddir)/lib/librpm.la \
++	@WITH_LIBELF_LIB@
+ 
+ debugedit_SOURCES =	debugedit.c hashtab.c
+ debugedit_LDADD =	@LDFLAGS_STATIC@ \
diff --git a/db-4.8.30.tar.bz2 b/db-4.8.30.tar.bz2
deleted file mode 100644
index b0fa0be..0000000
--- a/db-4.8.30.tar.bz2
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:2ba998b7451758928011878514c78b8a6f0fbfd49ebf5cc9f4269f4666414ab4
-size 19969243
diff --git a/db.diff b/db.diff
index 0d389f0..121ae44 100644
--- a/db.diff
+++ b/db.diff
@@ -1,82 +1,111 @@
---- db/db/db.c.orig	2010-04-12 20:25:22.000000000 +0000
-+++ db/db/db.c	2011-05-12 11:38:59.000000000 +0000
-@@ -646,6 +646,8 @@ __env_mpool(dbp, fname, flags)
- 			MAKE_INMEM(dbp);
+--- db/db/db.c.orig	2004-11-11 15:58:46.000000000 +0000
++++ db/db/db.c	2005-12-15 16:17:45.000000000 +0000
+@@ -591,6 +591,8 @@ __db_dbenv_mpool(dbp, fname, flags)
+ 	    (F_ISSET(dbp, DB_AM_NOT_DURABLE) ? DB_TXN_NOT_DURABLE : 0),
+ 	    0, dbp->pgsize)) != 0)
  		return (ret);
- 	}
 +	if (LF_ISSET(DB_NOFSYNC) && mpf->mfp)
 +	    F_SET(mpf->mfp, MP_NOFSYNC);
  
- 	/*
- 	 * Set the open flag.  We use it to mean that the dbp has gone
---- db/db/db_iface.c.orig	2010-04-12 20:25:22.000000000 +0000
-+++ db/db/db_iface.c	2011-05-12 11:21:32.000000000 +0000
-@@ -1230,6 +1230,7 @@ __db_open_arg(dbp, txn, fname, dname, ty
+ 	return (0);
+ }
+--- db/db/db_iface.c.orig	2004-10-16 01:31:54.000000000 +0000
++++ db/db/db_iface.c	2005-12-15 16:17:45.000000000 +0000
+@@ -1068,7 +1068,7 @@ __db_open_arg(dbp, txn, fname, dname, ty
  #define	OKFLAGS								\
- 	(DB_AUTO_COMMIT | DB_CREATE | DB_EXCL | DB_FCNTL_LOCKING |	\
- 	DB_MULTIVERSION | DB_NOMMAP | DB_NO_AUTO_COMMIT | DB_RDONLY |	\
-+	DB_NOFSYNC |							\
- 	DB_RDWRMASTER | DB_READ_UNCOMMITTED | DB_THREAD | DB_TRUNCATE)
- 	if ((ret = __db_fchk(env, "DB->open", flags, OKFLAGS)) != 0)
+     (DB_AUTO_COMMIT | DB_CREATE | DB_DIRTY_READ | DB_EXCL |		\
+      DB_FCNTL_LOCKING | DB_NO_AUTO_COMMIT | DB_NOMMAP | DB_RDONLY |	\
+-     DB_RDWRMASTER | DB_THREAD | DB_TRUNCATE | DB_WRITEOPEN)
++     DB_RDWRMASTER | DB_THREAD | DB_TRUNCATE | DB_WRITEOPEN | DB_NOFSYNC)
+ 	if ((ret = __db_fchk(dbenv, "DB->open", flags, OKFLAGS)) != 0)
  		return (ret);
---- db/dbinc/mp.h.orig	2010-04-12 20:25:22.000000000 +0000
-+++ db/dbinc/mp.h	2011-05-12 12:01:32.000000000 +0000
-@@ -467,6 +467,7 @@ struct __mpoolfile {
+ 	if (LF_ISSET(DB_EXCL) && !LF_ISSET(DB_CREATE))
+--- db/dbinc/db.in.orig	2004-10-16 01:31:54.000000000 +0000
++++ db/dbinc/db.in	2005-12-15 16:17:45.000000000 +0000
+@@ -260,6 +260,7 @@ struct __db_dbt {
+ #define	DB_FCNTL_LOCKING      0x0002000	/* UNDOC: fcntl(2) locking. */
+ #define	DB_RDWRMASTER	      0x0004000	/* UNDOC: allow subdb master open R/W */
+ #define	DB_WRITEOPEN	      0x0008000	/* UNDOC: open with write lock. */
++#define	DB_NOFSYNC	      0x0010000	/* UNDOC: don't fsync */
+ 
+ /*
+  * Flags private to DB_ENV->txn_begin.
+--- db/dbinc/mp.h.orig	2004-10-16 01:31:54.000000000 +0000
++++ db/dbinc/mp.h	2005-12-15 16:25:56.000000000 +0000
+@@ -309,6 +309,7 @@ struct __mpoolfile {
  #define	MP_FAKE_UOC		0x080	/* Unlink_on_close field: fake flag. */
  #define	MP_NOT_DURABLE		0x100	/* File is not durable. */
  #define	MP_TEMP			0x200	/* Backing file is a temporary. */
-+#define	MP_NOFSYNC		0x400	/* Don't fsync */
++#define MP_NOFSYNC		0x400	/* Don't fsync */
  	u_int32_t  flags;
  };
  
---- db/dbinc_auto/api_flags.in.orig	2011-05-12 11:40:57.000000000 +0000
-+++ db/dbinc_auto/api_flags.in	2011-05-12 11:55:10.000000000 +0000
-@@ -83,6 +83,7 @@
- #define	DB_NOORDERCHK				0x00000002
- #define	DB_NOPANIC				0x00000800
- #define	DB_NO_AUTO_COMMIT			0x00001000
-+#define	DB_NOFSYNC				0x00040000
- #define	DB_ODDFILESIZE				0x00000080
- #define	DB_ORDERCHKONLY				0x00000004
- #define	DB_OVERWRITE				0x00001000
---- db/dist/s_config.orig	2010-04-12 20:25:23.000000000 +0000
-+++ db/dist/s_config	2011-05-12 12:00:34.000000000 +0000
-@@ -8,7 +8,8 @@ trap 'rm -f aclocal.m4 ; exit 0' 0 1 2 3
- . ./RELEASE
- 
- echo "autoconf: building aclocal.m4..."
--cat aclocal/*.m4 aclocal_java/*.m4 > aclocal.m4
-+cat aclocal/*.m4 aclocal_java/*.m4 > acinclude.m4
-+aclocal
- 
- echo "autoconf: running autoheader to build config.hin..."
- rm -f config.hin
---- db/mp/mp_sync.c.orig	2010-04-12 20:25:34.000000000 +0000
-+++ db/mp/mp_sync.c	2011-05-12 11:36:58.000000000 +0000
-@@ -578,7 +578,7 @@ done:	/*
- 	if (ret == 0 && required_write) {
+--- db/mp/mp_sync.c.orig	2004-11-11 15:58:48.000000000 +0000
++++ db/mp/mp_sync.c	2005-12-15 16:23:57.000000000 +0000
+@@ -553,7 +553,7 @@ done:	/*
+ 	if (ret == 0 && (op == DB_SYNC_CACHE || op == DB_SYNC_FILE)) {
  		if (dbmfp == NULL)
- 			ret = __memp_sync_files(env);
+ 			ret = __memp_sync_files(dbenv, dbmp);
 -		else
-+		else if (!F_ISSET(dbmfp->mfp, MP_NOFSYNC))
- 			ret = __os_fsync(env, dbmfp->fhp);
++		else if (!dbmfp->mfp || !F_ISSET(dbmfp->mfp, MP_NOFSYNC))
+ 			ret = __os_fsync(dbenv, dbmfp->fhp);
  	}
  
-@@ -665,7 +665,7 @@ __memp_sync_file(env, mfp, argp, countp,
- 			    "%s: unable to flush", (char *)
- 			    R_ADDR(dbmp->reginfo, mfp->path_off));
- 		}
--	} else
-+	} else if (!F_ISSET(dbmfp->mfp, MP_NOFSYNC))
- 		ret = __os_fsync(env, dbmfp->fhp);
+@@ -600,7 +600,7 @@ int __memp_sync_files(dbenv, dbmp)
+ 		MUTEX_THREAD_LOCK(dbenv, dbmp->mutexp);
+ 		for (dbmfp = TAILQ_FIRST(&dbmp->dbmfq);
+ 		    dbmfp != NULL; dbmfp = TAILQ_NEXT(dbmfp, q)) {
+-			if (dbmfp->mfp != mfp || F_ISSET(dbmfp, MP_READONLY))
++			if (dbmfp->mfp != mfp || F_ISSET(dbmfp, MP_READONLY | MP_NOFSYNC))
+ 				continue;
+ 			ret = __os_fsync(dbenv, dbmfp->fhp);
+ 			break;
+@@ -662,6 +662,9 @@ __memp_mf_sync(dbmp, mfp)
  
- 	/*
-@@ -801,6 +801,8 @@ __memp_mf_sync(dbmp, mfp, locked)
- 	COMPQUIET(hp, NULL);
- 	env = dbmp->env;
+ 	dbenv = dbmp->dbenv;
  
 +	if (F_ISSET(mfp, MP_NOFSYNC))
 +	    return 0;
++
  	/*
- 	 * We need to be holding the hash lock: we're using the path name
- 	 * and __memp_nameop might try and rename the file.
+ 	 * Expects caller to be holding the region lock: we're using the path
+ 	 * name and __memp_nameop might try and rename the file.
+--- db/dist/s_config.orig	2003-12-15 21:42:41.000000000 +0000
++++ db/dist/s_config	2005-02-11 14:44:09.018907747 +0000
+@@ -20,14 +20,15 @@
+ autoconf
+ 
+ # Edit version information we couldn't pre-compute.
+-(echo "1,\$s/__EDIT_DB_VERSION_MAJOR__/$DB_VERSION_MAJOR/g" &&
+- echo "1,\$s/__EDIT_DB_VERSION_MINOR__/$DB_VERSION_MINOR/g" &&
+- echo "1,\$s/__EDIT_DB_VERSION_PATCH__/$DB_VERSION_PATCH/g" &&
+- echo "1,\$s/__EDIT_DB_VERSION_STRING__/$DB_VERSION_STRING/g" &&
+- echo "1,\$s/__EDIT_DB_VERSION_UNIQUE_NAME__/$DB_VERSION_UNIQUE_NAME/g" &&
+- echo "1,\$s/__EDIT_DB_VERSION__/$DB_VERSION/g" &&
+- echo "w" &&
+- echo "q") | ed configure
++mv configure configure.old
++sed -e "s/__EDIT_DB_VERSION_MAJOR__/$DB_VERSION_MAJOR/g" \
++    -e "s/__EDIT_DB_VERSION_MINOR__/$DB_VERSION_MINOR/g" \
++    -e "s/__EDIT_DB_VERSION_PATCH__/$DB_VERSION_PATCH/g" \
++    -e "s/__EDIT_DB_VERSION_STRING__/$DB_VERSION_STRING/g" \
++    -e "s/__EDIT_DB_VERSION_UNIQUE_NAME__/$DB_VERSION_UNIQUE_NAME/g" \
++    -e "s/__EDIT_DB_VERSION__/$DB_VERSION/g" \
++< configure.old > configure
++rm -f configure.old
+ 
+ rm -rf autom4te.cache
+ chmod 555 configure
+--- db/dist/aclocal/options.ac.orig	2005-12-15 16:43:14.000000000 +0000
++++ db/dist/aclocal/options.ac	2005-12-15 16:43:40.000000000 +0000
+@@ -277,10 +277,6 @@ fi
+ 
+ # Uniquename excludes C++, Java, RPC.
+ if test "$db_cv_uniquename" = "yes"; then
+-	if test "$db_cv_rpc" = "yes"; then
+-		AC_MSG_ERROR(
+-		    [--with-uniquename is not compatible with --enable-rpc])
+-	fi
+ 	if test "$db_cv_cxx" = "yes"; then
+ 		AC_MSG_ERROR(
+ 		    [--with-uniquename is not compatible with --enable-cxx])
diff --git a/dbfsync.diff b/dbfsync.diff
index a71fb23..00da14c 100644
--- a/dbfsync.diff
+++ b/dbfsync.diff
@@ -1,24 +1,54 @@
 Support a database-local fsync setting. Needs berkeley db patch.
 
---- ./lib/backend/dbconfig.c.orig	2011-01-03 13:57:41.000000000 +0000
-+++ ./lib/backend/dbconfig.c	2011-05-10 17:00:29.000000000 +0000
-@@ -58,8 +58,10 @@ static const struct poptOption rdbOption
-  { "mp_size",	0,POPT_ARG_INT,		&staticcfg.db_cachesize, 0,
- 	NULL, NULL },
+--- ./rpmdb/db3.c.orig	2005-03-23 18:15:28.000000000 +0000
++++ ./rpmdb/db3.c	2006-01-27 20:08:29.000000000 +0000
+@@ -211,11 +211,13 @@ static int db_fini(dbiIndex dbi, const c
+     return rc;
+ }
  
 +#if 0
-  { "nofsync",	0,POPT_ARG_NONE,	&staticcfg.db_no_fsync, 0,
- 	NULL, NULL },
+ static int db3_fsync_disable(/*@unused@*/ int fd)
+ 	/*@*/
+ {
+     return 0;
+ }
 +#endif
  
-  /* Per-dbi options */
-  { "nommap",	0,POPT_BIT_SET,		&staticdbi.dbi_oflags, DB_NOMMAP,
-@@ -69,6 +71,8 @@ static const struct poptOption rdbOption
+ #if 0
+ #if HAVE_LIBPTHREAD
+@@ -414,6 +416,7 @@ static int db_init(dbiIndex dbi, const c
+  /* dbenv->set_rep_transport(???) */
+  /* dbenv->set_rep_limit(???) */
+ 
++#if 0
+     if (dbi->dbi_no_fsync) {
+ #if (DB_VERSION_MAJOR == 3 && DB_VERSION_MINOR != 0) || (DB_VERSION_MAJOR == 4)
+ 	xx = db_env_set_func_fsync(db3_fsync_disable);
+@@ -422,6 +425,7 @@ static int db_init(dbiIndex dbi, const c
+ #endif
+ 	xx = cvtdberr(dbi, "db_env_set_func_fsync", xx, _debug);
+     }
++#endif
+ 
+     if (dbi->dbi_shmkey) {
+ 	xx = dbenv->set_shm_key(dbenv, dbi->dbi_shmkey);
+--- ./rpmdb/dbconfig.c.orig	2004-10-16 12:50:52.000000000 +0000
++++ ./rpmdb/dbconfig.c	2005-12-15 13:12:32.000000000 +0000
+@@ -99,6 +99,8 @@ struct poptOption rdbOptions[] = {
  	NULL, NULL },
-  { "lockdbfd",	0,POPT_ARG_NONE,	&staticdbi.dbi_lockdbfd, 0,
+  { "fcntl_locking",0,POPT_BIT_SET,	&db3dbi.dbi_oflags, DB_FCNTL_LOCKING,
  	NULL, NULL },
-+ { "nofsync",	0,POPT_BIT_SET,		&staticdbi.dbi_oflags, DB_NOFSYNC,
++ { "nofsync",	0,POPT_BIT_SET,		&db3dbi.dbi_oflags, DB_NOFSYNC,
 +	NULL, NULL },
  
-     POPT_TABLEEND
- };
+  { "btree",	0,POPT_ARG_VAL,		&db3dbi.dbi_type, DB_BTREE,
+ 	NULL, NULL },
+@@ -145,8 +147,6 @@ struct poptOption rdbOptions[] = {
+ 	NULL, NULL },
+  { "usedbenv",	0,POPT_ARG_NONE,	&db3dbi.dbi_use_dbenv, 0,
+ 	NULL, NULL },
+- { "nofsync",	0,POPT_ARG_NONE,	&db3dbi.dbi_no_fsync, 0,
+-	NULL, NULL },
+  { "nodbsync",	0,POPT_ARG_NONE,	&db3dbi.dbi_no_dbsync, 0,
+ 	NULL, NULL },
+  { "lockdbfd",	0,POPT_ARG_NONE,	&db3dbi.dbi_lockdbfd, 0,
diff --git a/dbprivate.diff b/dbprivate.diff
index 48d3912..28aeda3 100644
--- a/dbprivate.diff
+++ b/dbprivate.diff
@@ -1,14 +1,14 @@
-Always use DB_PRIVATE. Unfortunately no longer configurable
-in the macros file.
+Always use DB_PRIVATE. Should probably be configured instead.
 
---- lib/backend/db3.c.orig	2011-05-12 15:38:18.000000000 +0000
-+++ lib/backend/db3.c	2011-05-12 15:38:41.000000000 +0000
-@@ -119,7 +119,7 @@ static int db_init(rpmdb rdb, const char
-     int retry_open = 2;
-     struct _dbConfig * cfg = &rdb->cfg;
-     /* This is our setup, thou shall not have other setups before us */
--    uint32_t eflags = (DB_CREATE|DB_INIT_MPOOL|DB_INIT_CDB);
-+    uint32_t eflags = (DB_CREATE|DB_INIT_MPOOL|DB_INIT_CDB|DB_PRIVATE);
+--- ./rpmdb/db3.c.orig	2005-03-23 18:15:28.000000000 +0000
++++ ./rpmdb/db3.c	2006-01-27 20:08:29.000000000 +0000
+@@ -1034,6 +1050,9 @@ static int db3open(rpmdb rpmdb, rpmTag r
+ #endif
+ #endif
  
-     if (rdb->db_dbenv != NULL) {
- 	rdb->db_opens++;
++	/* always use fcntl lock */
++	dbi->dbi_eflags |= DB_PRIVATE;
++
+ 	if (access(dbhome, W_OK) == -1) {
+ 
+ 	    /* dbhome is unwritable, don't attempt DB_CREATE on DB->open ... */
diff --git a/dbrointerruptable.diff b/dbrointerruptable.diff
index 1fb0233..7a59346 100644
--- a/dbrointerruptable.diff
+++ b/dbrointerruptable.diff
@@ -1,11 +1,11 @@
-Do not block signals if the database is opened read-only, it just
+Do not block signals if the database is opened read-only, it jst
 annoys the users. [#48026]
 
---- ./lib/rpmdb.c.orig	2011-02-28 09:57:27.000000000 +0000
-+++ ./lib/rpmdb.c	2011-05-10 16:58:21.000000000 +0000
-@@ -623,10 +623,12 @@ int rpmdbClose(rpmdb db)
- {
+--- ./rpmdb/rpmdb.c.orig	2005-02-16 03:18:19.000000000 +0000
++++ ./rpmdb/rpmdb.c	2006-02-21 20:37:44.000000000 +0000
+@@ -846,10 +873,12 @@ int rpmdbClose(rpmdb db)
      rpmdb * prev, next;
+     int dbix;
      int rc = 0;
 +    int dbmode;
  
@@ -13,18 +13,13 @@ annoys the users. [#48026]
  	goto exit;
  
 +    dbmode = db->db_mode;
-     (void) rpmdbUnlink(db);
+     (void) rpmdbUnlink(db, "rpmdbClose");
  
-     if (db->nrefs > 0)
-@@ -655,11 +657,13 @@ int rpmdbClose(rpmdb db)
-     db = _free(db);
+     /*@-usereleased@*/
+@@ -886,12 +915,14 @@ int rpmdbClose(rpmdb db)
+     /*@-refcounttrans@*/ db = _free(db); /*@=refcounttrans@*/
+     /*@=usereleased@*/
  
- exit:
--    (void) rpmsqEnable(-SIGHUP,	NULL);
--    (void) rpmsqEnable(-SIGINT,	NULL);
--    (void) rpmsqEnable(-SIGTERM,NULL);
--    (void) rpmsqEnable(-SIGQUIT,NULL);
--    (void) rpmsqEnable(-SIGPIPE,NULL);
 +    if ((dbmode & (O_RDWR|O_WRONLY)) != 0) {
 +	(void) rpmsqEnable(-SIGHUP,	NULL);
 +	(void) rpmsqEnable(-SIGINT,	NULL);
@@ -32,25 +27,31 @@ annoys the users. [#48026]
 +	(void) rpmsqEnable(-SIGQUIT,NULL);
 +	(void) rpmsqEnable(-SIGPIPE,NULL);
 +    }
+ exit:
+-    (void) rpmsqEnable(-SIGHUP,	NULL);
+-    (void) rpmsqEnable(-SIGINT,	NULL);
+-    (void) rpmsqEnable(-SIGTERM,NULL);
+-    (void) rpmsqEnable(-SIGQUIT,NULL);
+-    (void) rpmsqEnable(-SIGPIPE,NULL);
      return rc;
  }
+ /*@=incondefs@*/
+@@ -1021,11 +1070,13 @@ static int openDatabase(/*@null@*/ const
+     if (db == NULL)
+ 	return 1;
  
-@@ -721,11 +725,13 @@ static int openDatabase(const char * pre
-     /* Try to ensure db home exists, error out if we cant even create */
-     rc = rpmioMkpath(rpmdbHome(db), 0755, getuid(), getgid());
-     if (rc == 0) {
--	(void) rpmsqEnable(SIGHUP, NULL);
--	(void) rpmsqEnable(SIGINT, NULL);
--	(void) rpmsqEnable(SIGTERM,NULL);
--	(void) rpmsqEnable(SIGQUIT,NULL);
--	(void) rpmsqEnable(SIGPIPE,NULL);
-+	if ((db->db_mode & (O_RDWR|O_WRONLY)) != 0) {
-+	    (void) rpmsqEnable(SIGHUP, NULL);
-+	    (void) rpmsqEnable(SIGINT, NULL);
-+	    (void) rpmsqEnable(SIGTERM,NULL);
-+	    (void) rpmsqEnable(SIGQUIT,NULL);
-+	    (void) rpmsqEnable(SIGPIPE,NULL);
-+	}
+-    (void) rpmsqEnable(SIGHUP,	NULL);
+-    (void) rpmsqEnable(SIGINT,	NULL);
+-    (void) rpmsqEnable(SIGTERM,NULL);
+-    (void) rpmsqEnable(SIGQUIT,NULL);
+-    (void) rpmsqEnable(SIGPIPE,NULL);
++    if ((db->db_mode & (O_RDWR|O_WRONLY)) != 0) {
++	(void) rpmsqEnable(SIGHUP,	NULL);
++	(void) rpmsqEnable(SIGINT,	NULL);
++	(void) rpmsqEnable(SIGTERM,NULL);
++	(void) rpmsqEnable(SIGQUIT,NULL);
++	(void) rpmsqEnable(SIGPIPE,NULL);
++    }
+ 
+     db->db_api = _dbapi;
  
- 	/* Just the primary Packages database opened here */
- 	rc = (rpmdbOpenIndex(db, RPMDBI_PACKAGES, db->db_flags) != NULL) ? 0 : -2;
diff --git a/debugedit-canon-fix.diff b/debugedit-canon-fix.diff
deleted file mode 100644
index f2be21b..0000000
--- a/debugedit-canon-fix.diff
+++ /dev/null
@@ -1,119 +0,0 @@
---- ./tools/debugedit.c.orig	2011-05-20 11:26:04.000000000 +0000
-+++ ./tools/debugedit.c	2011-05-20 11:27:56.000000000 +0000
-@@ -158,7 +158,7 @@ strptr (DSO *dso, int sec, off_t offset)
- 	{
- 	  if (data->d_buf
- 	      && offset >= data->d_off
--	      && offset < data->d_off + data->d_size)
-+	      && offset < data->d_off + (off_t)data->d_size)
- 	    return (const char *) data->d_buf + (offset - data->d_off);
- 	}
-     }
-@@ -496,9 +496,10 @@ static int
- edit_dwarf2_line (DSO *dso, uint32_t off, char *comp_dir, int phase)
- {
-   unsigned char *ptr = debug_sections[DEBUG_LINE].data, *dir;
--  unsigned char **dirt;
-+  char **dirt;
-   unsigned char *endsec = ptr + debug_sections[DEBUG_LINE].size;
-   unsigned char *endcu, *endprol;
-+  char line_base;
-   unsigned char opcode_base;
-   uint32_t value, dirt_cnt;
-   size_t comp_dir_len = strlen (comp_dir);
-@@ -542,6 +543,7 @@ edit_dwarf2_line (DSO *dso, uint32_t off
-       return 1;
-     }
- 
-+  line_base = (char) (ptr[2] & 0xff);
-   opcode_base = ptr[4];
-   ptr = dir = ptr + 4 + opcode_base;
- 
-@@ -553,13 +555,13 @@ edit_dwarf2_line (DSO *dso, uint32_t off
-       ++value;
-     }
- 
--  dirt = (unsigned char **) alloca (value * sizeof (unsigned char *));
-+  dirt = (char **) alloca (value * sizeof (unsigned char *));
-   dirt[0] = (unsigned char *) ".";
-   dirt_cnt = 1;
-   ptr = dir;
-   while (*ptr != 0)
-     {
--      dirt[dirt_cnt++] = ptr;
-+      dirt[dirt_cnt++] = (char *)ptr;
-       ptr = (unsigned char *) strchr ((char *)ptr, 0) + 1;
-     }
-   ptr++;
-@@ -672,7 +674,7 @@ edit_dwarf2_line (DSO *dso, uint32_t off
- 
-   if (dest_dir)
-     {
--      unsigned char *srcptr, *buf = NULL;
-+      char *srcptr, *buf = NULL;
-       size_t base_len = strlen (base_dir);
-       size_t dest_len = strlen (dest_dir);
-       size_t shrank = 0;
-@@ -686,11 +688,14 @@ edit_dwarf2_line (DSO *dso, uint32_t off
- 	  ptr = dir;
- 	}
-       else
--	ptr = srcptr = dir;
-+	{
-+	  ptr = dir;
-+	  srcptr = (char *)dir;
-+	}
-       while (*srcptr != 0)
- 	{
- 	  size_t len = strlen ((char *)srcptr) + 1;
--	  const unsigned char *readptr = srcptr;
-+	  const char *readptr = srcptr;
- 
- 	  char *orig = strdup ((const char *) srcptr);
- 
-@@ -717,10 +722,13 @@ edit_dwarf2_line (DSO *dso, uint32_t off
- 
-       if (shrank > 0)
- 	{
--	  if (--shrank == 0)
-+	  --shrank;
-+#if 0
-+	  if (shrank == 0)
- 	    error (EXIT_FAILURE, 0,
- 		   "canonicalization unexpectedly shrank by one character");
- 	  else
-+#endif
- 	    {
- 	      memset (ptr, 'X', shrank);
- 	      ptr += shrank;
-@@ -756,21 +764,26 @@ edit_dwarf2_line (DSO *dso, uint32_t off
- 		}
- 	      dirty_section (DEBUG_STR);
- 	    }
--	  else if (ptr != srcptr)
-+	  else if ((char *)ptr != srcptr)
- 	    memmove (ptr, srcptr, len);
- 	  srcptr += len;
- 	  ptr += len;
--	  dir = srcptr;
-+	  dir = (unsigned char *)srcptr;
- 	  read_uleb128 (srcptr);
- 	  read_uleb128 (srcptr);
- 	  read_uleb128 (srcptr);
- 	  if (ptr != dir)
--	    memmove (ptr, dir, srcptr - dir);
--	  ptr += srcptr - dir;
-+	    memmove (ptr, dir, (unsigned char *)srcptr - dir);
-+	  ptr += (unsigned char *)srcptr - dir;
- 	}
-       *ptr = '\0';
-       free (buf);
-     }
-+
-+  ptr++;
-+  /* fill the rest until the line number program starts with NOP opcode */
-+  memset(ptr, opcode_base - line_base, endprol - ptr);
-+  /* don't touch the line number program */
-   return 0;
- }
- 
diff --git a/debugedit-comp-dir.diff b/debugedit-comp-dir.diff
deleted file mode 100644
index 288ed10..0000000
--- a/debugedit-comp-dir.diff
+++ /dev/null
@@ -1,51 +0,0 @@
-Include compilation directory in source file list if used.
-
---- ./tools/debugedit.c.orig	2011-05-11 14:27:32.000000000 +0000
-+++ ./tools/debugedit.c	2011-05-11 15:31:31.000000000 +0000
-@@ -503,6 +503,7 @@ edit_dwarf2_line (DSO *dso, uint32_t off
-   uint32_t value, dirt_cnt;
-   size_t comp_dir_len = strlen (comp_dir);
-   size_t abs_file_cnt = 0, abs_dir_cnt = 0;
-+  int comp_dir_used = 0;
- 
-   if (phase != 0)
-     return 0;
-@@ -611,6 +612,7 @@ edit_dwarf2_line (DSO *dso, uint32_t off
- 	  memcpy (p, dirt[value], dir_len);
- 	  p[dir_len] = '/';
- 	  memcpy (p + dir_len + 1, file, file_len + 1);
-+	  comp_dir_used = 1;
- 	}
-       canonicalize_path (s, s);
-       if (list_file_fd != -1)
-@@ -644,6 +646,30 @@ edit_dwarf2_line (DSO *dso, uint32_t off
-     }
-   ++ptr;
- 
-+  if (comp_dir_used && list_file_fd != -1
-+      && (base_dir == NULL || has_prefix (comp_dir, base_dir)))
-+    {
-+      char *p;
-+      size_t size;
-+      ssize_t ret;
-+
-+      size = comp_dir_len + 1;
-+      p = comp_dir;
-+      if (base_dir)
-+	{
-+	  p += strlen (base_dir);
-+	  size -= strlen (base_dir);
-+	}
-+      while (size > 0)
-+	{
-+	  ret = write (list_file_fd, p, size);
-+	  if (ret == -1)
-+	    break;
-+	  size -= ret;
-+	  p += ret;
-+	}
-+    }
-+
-   if (dest_dir)
-     {
-       unsigned char *srcptr, *buf = NULL;
diff --git a/debugedit.diff b/debugedit.diff
index ad9ec99..5a3bc06 100644
--- a/debugedit.diff
+++ b/debugedit.diff
@@ -1,26 +1,8 @@
-Make debugedit build without dwarf.h
+Make debugedit build without dwarf.h. Also fixes a logic bug for ppc.
 
---- ./Makefile.am.orig	2010-12-22 11:17:20.000000000 +0000
-+++ ./Makefile.am	2011-05-10 16:03:49.000000000 +0000
-@@ -143,7 +143,6 @@ rpm2cpio_LDADD +=	@WITH_NSS_LIB@ @WITH_P
- 
- 
- if LIBELF
--if LIBDWARF
- rpmconfig_SCRIPTS += scripts/find-debuginfo.sh
- 
- rpmlibexec_PROGRAMS +=	debugedit
-@@ -156,7 +155,6 @@ elfdeps_SOURCES =	tools/elfdeps.c
- elfdeps_LDADD =		rpmio/librpmio.la
- elfdeps_LDADD +=	@WITH_LIBELF_LIB@ @WITH_POPT_LIB@
- endif
--endif
- 
- rpmlibexec_PROGRAMS +=	javadeps
- javadeps_SOURCES =	tools/javadeps.c
---- ./tools/debugedit.c.orig	2010-12-03 12:11:57.000000000 +0000
-+++ ./tools/debugedit.c	2011-05-10 16:03:49.000000000 +0000
-@@ -37,7 +37,37 @@
+--- ./tools/debugedit.c.orig	2005-12-15 14:28:49.000000000 +0000
++++ ./tools/debugedit.c	2006-03-17 13:01:53.000000000 +0000
+@@ -34,7 +34,37 @@
  #include <popt.h>
  
  #include <gelf.h>
@@ -57,5 +39,14 @@ Make debugedit build without dwarf.h
 +#define DW_FORM_ref_udata	0x15
 +#define DW_FORM_indirect	0x16
  
- #include <rpm/rpmio.h>
- #include <rpm/rpmpgp.h>
+ #include "hashtab.h"
+ 
+@@ -1039,7 +1069,7 @@ edit_dwarf2 (DSO *dso)
+ 		  break;
+ 		case EM_PPC:
+ 		case EM_PPC64:
+-		  if (rtype != R_PPC_ADDR32 || rtype != R_PPC_UADDR32)
++		  if (rtype != R_PPC_ADDR32 && rtype != R_PPC_UADDR32)
+ 		    goto fail;
+ 		  break;
+ 		case EM_S390:
diff --git a/debuginfo-mono.patch b/debuginfo-mono.patch
deleted file mode 100644
index d877a73..0000000
--- a/debuginfo-mono.patch
+++ /dev/null
@@ -1,20 +0,0 @@
---- ./scripts/find-debuginfo.sh.orig	2011-05-11 16:10:22.000000000 +0000
-+++ ./scripts/find-debuginfo.sh	2011-05-11 16:10:48.000000000 +0000
-@@ -211,6 +211,17 @@ while read nlinks inum f; do
- 	;;
-     *) continue ;;
-   esac
-+  # double check that we really have an ELF file,
-+  # to handle monodevelop-debugger-gdb and monodevelop-debugger-mdb
-+  ftype=`/usr/bin/file $f | cut -d: -f2-`
-+  case $ftype in
-+    *ELF*) ;;
-+    *)
-+	echo "$f is not an ELF file, skipping"
-+	continue
-+	;;
-+  esac
-+
-   get_debugfn "$f"
-   [ -f "${debugfn}" ] && continue
- 
diff --git a/debuglink.diff b/debuglink.diff
deleted file mode 100644
index 4a97043..0000000
--- a/debuglink.diff
+++ /dev/null
@@ -1,12 +0,0 @@
---- ./scripts/find-debuginfo.sh.orig	2011-05-11 15:59:44.000000000 +0000
-+++ ./scripts/find-debuginfo.sh	2011-05-11 16:10:22.000000000 +0000
-@@ -186,7 +186,8 @@ make_id_link()
- get_debugfn()
- {
-   dn=$(dirname "${1#$RPM_BUILD_ROOT}")
--  bn=$(basename "$1" .debug).debug
-+# Do not strip existing .debug suffixes
-+  bn=$(basename "$1").debug
- 
-   debugdn=${debugdir}${dn}
-   debugfn=${debugdn}/${bn}
diff --git a/debugsource-package.diff b/debugsource-package.diff
deleted file mode 100644
index 11eae89..0000000
--- a/debugsource-package.diff
+++ /dev/null
@@ -1,57 +0,0 @@
-Subject: Split sources for debugging into separate -debugsource package
-
-At the moment the -debuginfo package also include the sources where used to
-build the binary. The patches moves them into a separate package -debugsource.
-
---- ./macros.in.orig	2011-05-11 15:01:39.000000000 +0000
-+++ ./macros.in	2011-05-11 15:36:05.000000000 +0000
-@@ -190,6 +190,18 @@ Debug information is useful when develop
- package or when debugging this package.\
- %files debuginfo -f debugfiles.list\
- %defattr(-,root,root)\
-+\
-+%package debugsource\
-+Summary: Debug sources for package %{name}\
-+Group: Development/Debug\
-+AutoReqProv: 0\
-+Requires: %{name}-debuginfo = %{version}-%{release}\
-+%description debugsource\
-+This package provides debug sources for package %{name}.\
-+Debug sources are useful when developing applications that use this\
-+package or when debugging this package.\
-+%files debugsource -f debugsources.list\
-+%defattr(-,root,root)\
- %{nil}
- 
- %_defaultdocdir		%{_datadir}/doc/packages
---- ./scripts/find-debuginfo.sh.orig	2011-05-11 14:46:18.000000000 +0000
-+++ ./scripts/find-debuginfo.sh	2011-05-11 15:36:05.000000000 +0000
-@@ -187,8 +187,8 @@ set -o pipefail
- strict_error=ERROR
- $strict || strict_error=WARNING
- 
--# Strip ELF binaries
--find $RPM_BUILD_ROOT ! -path "${debugdir}/*.debug" -type f \( -perm +111 -or -name "*.so*" -or -name "*.ko" \) -print 0 | sort -z |
-+# Strip ELF binaries (and no static libraries)
-+find $RPM_BUILD_ROOT ! -path "${debugdir}/*.debug" -type f \( -perm +111 -or -name "*.so*" -or -name "*.ko" \) ! -name "*.a" -print0 | sort -z |
- xargs --no-run-if-empty -0 stat -c '%h %D_%i %n' |
- while read nlinks inum f; do
-   case $(objdump -h $f 2>/dev/null | egrep -o '(debug[\.a-z_]*|gnu.version)') in
-@@ -300,10 +300,16 @@ if [ -d "${RPM_BUILD_ROOT}/usr/lib" -o -
- 
-   (cd "${RPM_BUILD_ROOT}/usr"
-    test ! -d lib/debug || find lib/debug ! -type d
--   test ! -d src/debug || find src/debug -mindepth 1 -maxdepth 1
-   ) | sed 's,^,/usr/,' >> "$LISTFILE"
- fi
- 
-+: > "$SOURCEFILE"
-+if [ -d "${RPM_BUILD_ROOT}/usr/src" ]; then
-+  (cd "${RPM_BUILD_ROOT}/usr"
-+   test ! -d src/debug || find src/debug -mindepth 1 -maxdepth 1
-+  ) | sed 's,^,/usr/,' >> "$SOURCEFILE"
-+fi
-+
- # Append to $1 only the lines from stdin not already in the file.
- append_uniq()
- {
diff --git a/debugsubpkg.diff b/debugsubpkg.diff
deleted file mode 100644
index 2f9157e..0000000
--- a/debugsubpkg.diff
+++ /dev/null
@@ -1,322 +0,0 @@
-Create a debuginfo package for each subpackage.
-
---- ./build/files.c.orig	2011-05-13 15:34:01.000000000 +0000
-+++ ./build/files.c	2011-05-13 15:35:42.000000000 +0000
-@@ -20,6 +20,10 @@
- #include <rpm/rpmfileutil.h>	/* rpmDoDigest() */
- #include <rpm/rpmlog.h>
- 
-+#if HAVE_GELF_H
-+#include <gelf.h>
-+#endif
-+
- #include "rpmio/rpmio_internal.h"	/* XXX rpmioSlurp */
- #include "rpmio/base64.h"
- #include "misc/fts.h"
-@@ -2105,13 +2109,237 @@ exit:
-     return rc;
- }
- 
-+#if HAVE_GELF_H && HAVE_LIBELF
-+/* Query the build-id from the ELF file NAME and store it in the newly
-+   allocated *build_id array of size *build_id_size.  Returns -1 on
-+   error.  */
-+
-+int
-+getELFBuildId (const char *name,
-+	       unsigned char **id, size_t *id_size)
-+{
-+  int fd, i;
-+  Elf *elf;
-+  GElf_Ehdr ehdr;
-+  Elf_Data *build_id = NULL;
-+  size_t build_id_offset = 0, build_id_size = 0;
-+
-+  /* Now query the build-id of the file and add the
-+     corresponding links in the .build-id tree.
-+     The following code is based on tools/debugedit.c.  */
-+  fd = open (name, O_RDONLY);
-+  if (fd < 0)
-+    return -1;
-+  elf = elf_begin (fd, ELF_C_READ_MMAP, NULL);
-+  if (elf == NULL)
-+    {
-+      fprintf (stderr, "cannot open ELF file: %s",
-+	       elf_errmsg (-1));
-+      close (fd);
-+      return -1;
-+    }
-+  if (elf_kind (elf) != ELF_K_ELF
-+      || gelf_getehdr (elf, &ehdr) == NULL
-+      || (ehdr.e_type != ET_DYN
-+	  && ehdr.e_type != ET_EXEC
-+	  && ehdr.e_type != ET_REL))
-+    {
-+      elf_end (elf);
-+      close (fd);
-+      return -1;
-+    }
-+  for (i = 0; i < ehdr.e_shnum; ++i)
-+    {
-+      Elf_Scn *s = elf_getscn (elf, i);
-+      GElf_Shdr shdr;
-+      Elf_Data *data;
-+      Elf32_Nhdr nh;
-+      Elf_Data dst =
-+	{
-+	  .d_version = EV_CURRENT, .d_type = ELF_T_NHDR,
-+	  .d_buf = &nh, .d_size = sizeof nh
-+	};
-+      Elf_Data src = dst;
-+
-+      gelf_getshdr (s, &shdr);
-+      if (shdr.sh_type != SHT_NOTE
-+	  || !(shdr.sh_flags & SHF_ALLOC))
-+	continue;
-+
-+      /* Look for a build-ID note here.  */
-+      data = elf_rawdata (s, NULL);
-+      src.d_buf = data->d_buf;
-+      assert (sizeof (Elf32_Nhdr) == sizeof (Elf64_Nhdr));
-+      while (data->d_buf + data->d_size - src.d_buf > (int) sizeof nh
-+	     && elf32_xlatetom (&dst, &src, ehdr.e_ident[EI_DATA]))
-+	{
-+	  Elf32_Word len = sizeof nh + nh.n_namesz;
-+	  len = (len + 3) & ~3;
-+
-+	  if (nh.n_namesz == sizeof "GNU" && nh.n_type == 3
-+	      && !memcmp (src.d_buf + sizeof nh, "GNU", sizeof "GNU"))
-+	    {
-+	      build_id = data;
-+	      build_id_offset = src.d_buf + len - data->d_buf;
-+	      build_id_size = nh.n_descsz;
-+	      break;
-+	    }
-+
-+	  len += nh.n_descsz;
-+	  len = (len + 3) & ~3;
-+	  src.d_buf += len;
-+	}
-+
-+      if (build_id != NULL)
-+	break;
-+    }
-+
-+  if (build_id == NULL)
-+    return -1;
-+
-+  *id = malloc (build_id_size);
-+  *id_size = build_id_size;
-+  memcpy (*id, build_id->d_buf + build_id_offset, build_id_size);
-+
-+  elf_end (elf);
-+  close (fd);
-+
-+  return 0;
-+}
-+
-+
-+static rpmTag copyTagsForDebug[] = {
-+    RPMTAG_EPOCH,
-+    RPMTAG_VERSION,
-+    RPMTAG_RELEASE,
-+    RPMTAG_LICENSE,
-+    RPMTAG_PACKAGER,
-+    RPMTAG_DISTRIBUTION,
-+    RPMTAG_DISTURL,
-+    RPMTAG_VENDOR,
-+    RPMTAG_ICON,
-+    RPMTAG_URL,
-+    RPMTAG_CHANGELOGTIME,
-+    RPMTAG_CHANGELOGNAME,
-+    RPMTAG_CHANGELOGTEXT,
-+    RPMTAG_PREFIXES,
-+    RPMTAG_RHNPLATFORM,
-+    RPMTAG_OS,
-+    RPMTAG_DISTTAG,
-+    RPMTAG_CVSID,
-+    RPMTAG_ARCH,
-+    0
-+};
-+
-+static void addDebuginfoPackage(rpmSpec spec, Package pkg, char *buildroot)
-+{
-+    const char *a;
-+
-+    elf_version(EV_CURRENT);
-+    a = headerGetString(pkg->header, RPMTAG_ARCH);
-+    if (strcmp(a, "noarch") != 0 && strcmp(a, "src") != 0 && strcmp(a, "nosrc") != 0)
-+      {
-+	Package dbg;
-+	rpmfi fi = pkg->cpioList;
-+	char tmp[1024];
-+	const char *name;
-+	ARGV_t files = NULL;
-+	int seen_build_id = 0;
-+
-+	/* Check if the current package has files with debug info
-+	   and record them.  */
-+	fi = rpmfiInit (fi, 0);
-+	while (rpmfiNext (fi) >= 0)
-+	  {
-+	    const char *base;
-+	    int i;
-+	    unsigned char *build_id;
-+	    size_t build_id_size = 0;
-+	    struct stat sbuf;
-+
-+	    name = rpmfiFN (fi);
-+	    /* Skip leading buildroot.  */
-+	    base = name + strlen (buildroot);
-+	    /* Pre-pend %buildroot/usr/lib/debug and append .debug.  */
-+	    snprintf (tmp, 1024, "%s/usr/lib/debug%s.debug",
-+		      buildroot, base);
-+	    /* If that file exists we have debug information for it.  */
-+	    if (access (tmp, F_OK) != 0)
-+	      continue;
-+
-+	    /* Append the file list preamble.  */
-+	    if (!files)
-+	      {
-+		argvAdd(&files, "%defattr(-,root,root)");
-+		argvAdd(&files, "%dir /usr/lib/debug");
-+	      }
-+	    /* Add the files main debug-info file.  */
-+	    snprintf (tmp, 1024, "/usr/lib/debug/%s.debug", base);
-+	    argvAdd(&files, tmp);
-+
-+	    /* Do not bother to check build-ids for symbolic links.
-+	       We'll handle them for the link target.  */
-+	    if (lstat (name, &sbuf) == -1
-+		|| S_ISLNK (sbuf.st_mode))
-+	      continue;
-+
-+	    /* Try to gather the build-id from the binary.  */
-+	    if (getELFBuildId (name, &build_id, &build_id_size) == -1)
-+	      continue;
-+
-+	    /* If we see build-id links for the first time add the
-+	       directory.  */
-+	    if (!seen_build_id)
-+	      argvAdd(&files, "%dir /usr/lib/debug/.build-id");
-+
-+	    /* From the build-id construct the two links pointing back
-+	       to the debug information file and the binary.  */
-+	    snprintf (tmp, 1024, "/usr/lib/debug/.build-id/%02x/",
-+		      build_id[0]);
-+	    for (i = 1; i < build_id_size; ++i)
-+	      sprintf (tmp + strlen (tmp), "%02x", build_id[i]);
-+	    argvAdd(&files, tmp);
-+	    sprintf (tmp + strlen (tmp), ".debug");
-+	    argvAdd(&files, tmp);
-+
-+	    free (build_id);
-+	  }
-+
-+	/* If there are debuginfo files for this package add a
-+	   new debuginfo package.  */
-+	if (files)
-+	  {
-+	    dbg = newPackage (spec);
-+	    headerNVR (pkg->header, &name, NULL, NULL);
-+	    /* Set name, summary and group.  */
-+	    snprintf (tmp, 1024, "%s-debuginfo", name);
-+	    headerPutString(dbg->header, RPMTAG_NAME, tmp);
-+	    snprintf (tmp, 1024, "Debug information for package %s", name);
-+	    headerPutString(dbg->header, RPMTAG_SUMMARY, tmp);
-+	    snprintf (tmp, 1024, "This package provides debug information for package %s.\n"
-+		      "Debug information is useful when developing applications that use this\n"
-+		      "package or when debugging this package.", name);
-+	    headerPutString(dbg->header, RPMTAG_DESCRIPTION, tmp);
-+	    headerPutString(dbg->header, RPMTAG_GROUP, "Development/Debug");
-+	    /* Inherit other tags from parent.  */
-+	    headerCopyTags (pkg->header, dbg->header, copyTagsForDebug);
-+
-+	    /* Build up the files list.  */
-+	    dbg->fileList = files;
-+	  }
-+      }
-+}
-+#endif
-+
- rpmRC processBinaryFiles(rpmSpec spec, rpmBuildPkgFlags pkgFlags,
- 			int installSpecialDoc, int test)
- {
-     Package pkg;
-     rpmRC rc = RPMRC_OK;
-+    char *buildroot;
-     
-     check_fileList = newStringBuf();
-+    buildroot = rpmGenPath(spec->rootDir, spec->buildRoot, NULL);
-     genSourceRpmName(spec);
-     
-     for (pkg = spec->packages; pkg != NULL; pkg = pkg->next) {
-@@ -2127,8 +2355,12 @@ rpmRC processBinaryFiles(rpmSpec spec, r
- 	rpmlog(RPMLOG_NOTICE, _("Processing files: %s\n"), nvr);
- 	free(nvr);
- 		   
--	if ((rc = processPackageFiles(spec, pkgFlags, pkg, installSpecialDoc, test)) != RPMRC_OK ||
--	    (rc = rpmfcGenerateDepends(spec, pkg)) != RPMRC_OK)
-+	if ((rc = processPackageFiles(spec, pkgFlags, pkg, installSpecialDoc, test)) != RPMRC_OK)
-+	    goto exit;
-+#if HAVE_GELF_H && HAVE_LIBELF
-+        addDebuginfoPackage(spec, pkg, buildroot);
-+#endif
-+	if ((rc = rpmfcGenerateDepends(spec, pkg)) != RPMRC_OK)
- 	    goto exit;
- 
- 	a = headerGetString(pkg->header, RPMTAG_ARCH);
---- ./macros.in.orig	2011-05-13 15:34:01.000000000 +0000
-+++ ./macros.in	2011-05-13 15:34:10.000000000 +0000
-@@ -179,24 +179,10 @@
- #	Template for debug information sub-package.
- %debug_package \
- %global __debug_package 1\
--%package debuginfo\
--Summary: Debug information for package %{name}\
--Group: Development/Debug\
--AutoReq: 0\
--AutoProv: 1\
--#Requires: %{?!debug_package_requires:%{name} = %{version}-%{release}}%{?debug_package_requires}\
--%description debuginfo\
--This package provides debug information for package %{name}.\
--Debug information is useful when developing applications that use this\
--package or when debugging this package.\
--%files debuginfo -f debugfiles.list\
--%defattr(-,root,root)\
--\
- %package debugsource\
- Summary: Debug sources for package %{name}\
- Group: Development/Debug\
- AutoReqProv: 0\
--Requires: %{name}-debuginfo = %{version}-%{release}\
- %description debugsource\
- This package provides debug sources for package %{name}.\
- Debug sources are useful when developing applications that use this\
---- ./scripts/find-debuginfo.sh.orig	2011-05-13 15:34:01.000000000 +0000
-+++ ./scripts/find-debuginfo.sh	2011-05-13 15:34:10.000000000 +0000
-@@ -277,19 +277,11 @@ while read nlinks inum f; do
-   fi
- done || exit
- 
--# For each symlink whose target has a .debug file,
--# make a .debug symlink to that file.
--find $RPM_BUILD_ROOT ! -path "${debugdir}/*" -type l -print |
--while read f
--do
--  t=$(readlink -m "$f").debug
--  f=${f#$RPM_BUILD_ROOT}
--  t=${t#$RPM_BUILD_ROOT}
--  if [ -f "$debugdir$t" ]; then
--    echo "symlinked /usr/lib/debug$t to /usr/lib/debug${f}.debug"
--    debug_link "/usr/lib/debug$t" "${f}.debug"
--  fi
--done
-+# We used to make a .debug symlink for each symlink whose target
-+# has a .debug file to that file.  This is not necessary because
-+# the debuglink section contains only the destination of those links.
-+# Creating those links anyway results in debuginfo packages for
-+# devel packages just because of the .so symlinks in them.
- 
- if [ -s "$SOURCEFILE" ]; then
-   mkdir -p "${RPM_BUILD_ROOT}/usr/src/debug"
diff --git a/diskspace.diff b/diskspace.diff
new file mode 100644
index 0000000..461a851
--- /dev/null
+++ b/diskspace.diff
@@ -0,0 +1,23 @@
+Make the numbers reported for diskspace problems more user
+friendly. Probably a bad idea, as it changes the semantics. Instead,
+the messages should be changed.
+
+--- ./lib/rpmts.c.orig	2005-02-13 03:12:03.000000000 +0000
++++ ./lib/rpmts.c	2005-12-15 15:12:10.000000000 +0000
+@@ -1358,14 +1363,14 @@ void rpmtsCheckDSIProblems(const rpmts t
+ 	    rpmpsAppend(ps, RPMPROB_DISKSPACE,
+ 			rpmteNEVR(te), rpmteKey(te),
+ 			ts->filesystems[i], NULL, NULL,
+- 	   (adj_fs_blocks(dsi->bneeded) - dsi->bavail) * dsi->bsize);
++ 	   (adj_fs_blocks(dsi->bneeded)) * dsi->bsize);
+ 	}
+ 
+ 	if (dsi->iavail > 0 && adj_fs_blocks(dsi->ineeded) > dsi->iavail) {
+ 	    rpmpsAppend(ps, RPMPROB_DISKNODES,
+ 			rpmteNEVR(te), rpmteKey(te),
+ 			ts->filesystems[i], NULL, NULL,
+- 	    (adj_fs_blocks(dsi->ineeded) - dsi->iavail));
++ 	    (adj_fs_blocks(dsi->ineeded)));
+ 	}
+     }
+     ps = rpmpsFree(ps);
diff --git a/disttag-macro.diff b/disttag-macro.diff
deleted file mode 100644
index 795e52c..0000000
--- a/disttag-macro.diff
+++ /dev/null
@@ -1,31 +0,0 @@
-Hmm, SUSE doesn't use it, so what's the purpose of this patch?
-
---- ./build/parsePreamble.c.orig	2011-05-11 14:27:32.000000000 +0000
-+++ ./build/parsePreamble.c	2011-05-11 15:59:08.000000000 +0000
-@@ -485,6 +485,7 @@ static struct optionalTag {
-     { RPMTAG_PACKAGER,		"%{packager}" },
-     { RPMTAG_DISTRIBUTION,	"%{distribution}" },
-     { RPMTAG_DISTURL,		"%{disturl}" },
-+    { RPMTAG_DISTTAG,		"%{disttag}" },
-     { RPMTAG_BUGURL,		"%{bugurl}" },
-     { -1, NULL }
- };
---- ./macros.in.orig	2011-05-11 15:38:44.000000000 +0000
-+++ ./macros.in	2011-05-11 15:59:08.000000000 +0000
-@@ -279,6 +279,16 @@ package or when debugging this package.\
- #
- #%bugurl
- 
-+#	Configurable distribution tag, same as Disttag: tag in a specfile.
-+#	The tag will be used to supply reliable information to tools like
-+#	rpmfind.
-+#
-+# Note: You should not configure with disturl (or build packages with
-+# the Disttag: tag) unless you are willing to supply content in a
-+# yet-to-be-determined format at the tag specified.
-+#
-+#%disttag
-+
- #	Boolean (i.e. 1 == "yes", 0 == "no") that controls whether files
- #	marked as %doc should be installed.
- #%_excludedocs
diff --git a/docdir_fmt.diff b/docdir_fmt.diff
new file mode 100644
index 0000000..bd82d26
--- /dev/null
+++ b/docdir_fmt.diff
@@ -0,0 +1,36 @@
+Add support for a new macro, %{_docdir}. It can be used to specify
+the name of the directory for %doc files.
+Default is "%{NAME}-%{VERSION}", SUSE uses just "%{NAME}".
+rh#125514
+
+--- ./build/files.c.orig	2005-12-14 19:22:43.000000000 +0000
++++ ./build/files.c	2006-02-17 13:57:25.000000000 +0000
+@@ -1006,11 +1006,23 @@ static int parseForSimple(/*@unused@*/Sp
+ 	    res = 1;
+ 	} else {
+ 	/* XXX WATCHOUT: buf is an arg */
+-	    {	const char *ddir, *n, *v;
+-
+-		(void) headerNVR(pkg->header, &n, &v, NULL);
+-
+-		ddir = rpmGetPath("%{_docdir}/", n, "-", v, NULL);
++	   {
++		static char *_docdir_fmt= 0;
++		static int oneshot = 0;
++		const char *ddir, *fmt, *errstr;
++		if (!oneshot) {
++		    _docdir_fmt = rpmExpand("%{?_docdir_fmt}", NULL);
++		    if (!_docdir_fmt || !*_docdir_fmt)
++			_docdir_fmt = "%{NAME}-%{VERSION}";
++		    oneshot = 1;
++		}
++		fmt = headerSprintf(pkg->header, _docdir_fmt, rpmTagTable, rpmHeaderFormats, &errstr);
++		if (!fmt) {
++		    rpmError(RPMERR_BADSPEC, _("illegal _docdir_fmt: %s\n"), errstr);
++		    fl->processingFailed = 1;
++		    res = 1;
++		}
++		ddir = rpmGetPath("%{_docdir}/", fmt, NULL);
+ 		strcpy(buf, ddir);
+ 		ddir = _free(ddir);
+ 	    }
diff --git a/elfutils-0.97.diff b/elfutils-0.97.diff
new file mode 100644
index 0000000..caf8519
--- /dev/null
+++ b/elfutils-0.97.diff
@@ -0,0 +1,151 @@
+--- elfutils-0.97/Makefile.am.orig	2004-01-18 23:24:16.000000000 +0000
++++ elfutils-0.97/Makefile.am	2005-02-10 18:01:28.029920520 +0000
+@@ -18,9 +18,8 @@
+ ##
+ ACLOCAL_AMFLAGS = -I m4
+ 
+-mini_SUBDIRS = config m4 lib libelf libelf-po
+-all_SUBDIRS = doc libebl libdw libcpu libasm src po tests
+-SUBDIRS = $(mini_SUBDIRS) $(all_SUBDIRS)
++mini_SUBDIRS = config m4 libelf libelf-po
++SUBDIRS = $(mini_SUBDIRS)
+ 
+ EXTRA_DIST = splint.rc elfutils.spec GPG-KEY NOTES COPYING.GPL
+ 
+--- elfutils-0.97/configure.ac.orig	2004-09-25 19:41:03.000000000 +0000
++++ elfutils-0.97/configure.ac	2005-02-10 18:01:28.030920377 +0000
+@@ -130,34 +130,9 @@
+ 
+ dnl The directories with content.
+ 
+-dnl Documentation.
+-AC_CONFIG_FILES([doc/Makefile])
+-
+-dnl Support library.
+-AC_CONFIG_FILES([lib/Makefile])
+-
+ dnl ELF library.
+ AC_CONFIG_FILES([libelf/Makefile libelf-po/Makefile.in])
+ 
+-dnl Higher-level ELF support library.
+-AC_CONFIG_FILES([libebl/Makefile])
+-
+-dnl DWARF library.
+-AC_CONFIG_FILES([libdw/Makefile])
+-
+-dnl CPU handling library.
+-AC_CONFIG_FILES([libcpu/Makefile])
+-
+-dnl Assembler library.
+-AC_CONFIG_FILES([libasm/Makefile])
+-
+-dnl Tools.
+-AC_CONFIG_FILES([src/Makefile po/Makefile.in])
+-
+-dnl Test suite.
+-AC_CONFIG_FILES([tests/Makefile])
+-
+-
+ dnl Test of the config.h file.  We hide all kinds of configuration magic
+ dnl in there.
+ AH_BOTTOM([
+--- elfutils-0.97/libelf-po/Makefile.in.in.orig	2004-01-18 23:51:37.000000000 +0000
++++ elfutils-0.97/libelf-po/Makefile.in.in	2005-02-10 18:01:28.030920377 +0000
+@@ -28,7 +28,7 @@
+ INSTALL = @INSTALL@
+ INSTALL_DATA = @INSTALL_DATA@
+ MKINSTALLDIRS = @MKINSTALLDIRS@
+-mkinstalldirs = $(SHELL) `case "$(MKINSTALLDIRS)" in /*) echo "$(MKINSTALLDIRS)" ;; *) echo "$(top_builddir)/$(MKINSTALLDIRS)" ;; esac`
++mkinstalldirs = @MKINSTALLDIRS@
+ 
+ GMSGFMT = @GMSGFMT@
+ MSGFMT = @MSGFMT@
+--- elfutils-0.97/libelf/Makefile.am.orig	2004-01-23 10:38:49.000000000 +0000
++++ elfutils-0.97/libelf/Makefile.am	2005-02-10 18:03:15.337610448 +0000
+@@ -31,15 +31,15 @@
+ 
+ LINT = splint
+ 
+-lib_LIBRARIES = libelf.a
++#lib_LIBRARIES = libelf.a
+ if !MUDFLAP
+-noinst_LIBRARIES = libelf_pic.a
+-noinst_PROGRAMS = $(noinst_LIBRARIES:_pic.a=.so)
++noinst_LIBRARIES = libelf.a libelf_pic.a
++noinst_PROGRAMS = libelf.so
+ endif
+-include_HEADERS = libelf.h gelf.h nlist.h
++#include_HEADERS = libelf.h gelf.h nlist.h
+ 
+-euincludedir = $(includedir)/elfutils
+-euinclude_HEADERS = elf-knowledge.h
++#euincludedir = $(includedir)/elfutils
++#euinclude_HEADERS = elf-knowledge.h
+ 
+ libelf_a_SOURCES = elf_version.c elf_hash.c elf_error.c elf_fill.c \
+ 		   elf_begin.c elf_next.c elf_rand.c elf_end.c elf_kind.c \
+@@ -96,7 +96,7 @@
+ 	ln -fs $@ $@.$(VERSION)
+ 
+ %.os: %.c %.o
+-	if $(COMPILE) -c -o $@ -fpic -DPIC -DSHARED -MT $@ -MD -MP \
++	if $(COMPILE) -c -o $@ -fPIC -DPIC -DSHARED -MT $@ -MD -MP \
+ 	  -MF "$(DEPDIR)/$*.Tpo" `test -f '$<' || echo '$(srcdir)/'`$<; \
+ 	then cat "$(DEPDIR)/$*.Tpo" >> "$(DEPDIR)/$*.Po"; \
+ 	     rm -f "$(DEPDIR)/$*.Tpo"; \
+@@ -104,15 +104,15 @@
+ 	fi
+ 
+ install: install-am libelf.so
+-	$(mkinstalldirs) $(DESTDIR)$(libdir)
+-	$(INSTALL_PROGRAM) libelf.so $(DESTDIR)$(libdir)/libelf-$(PACKAGE_VERSION).so
+-	ln -fs libelf-$(PACKAGE_VERSION).so $(DESTDIR)$(libdir)/libelf.so.$(VERSION)
+-	ln -fs libelf.so.$(VERSION) $(DESTDIR)$(libdir)/libelf.so
++#	$(mkinstalldirs) $(DESTDIR)$(libdir)
++#	$(INSTALL_PROGRAM) libelf.so $(DESTDIR)$(libdir)/libelf-$(PACKAGE_VERSION).so
++#	ln -fs libelf-$(PACKAGE_VERSION).so $(DESTDIR)$(libdir)/libelf.so.$(VERSION)
++#	ln -fs libelf.so.$(VERSION) $(DESTDIR)$(libdir)/libelf.so
+ 
+ uninstall: uninstall-am
+-	rm -f $(DESTDIR)$(libdir)/libelf-$(PACKAGE_VERSION).so
+-	rm -f $(DESTDIR)$(libdir)/libelf.so.$(VERSION)
+-	rm -f $(DESTDIR)$(libdir)/libelf.so
++#	rm -f $(DESTDIR)$(libdir)/libelf-$(PACKAGE_VERSION).so
++#	rm -f $(DESTDIR)$(libdir)/libelf.so.$(VERSION)
++#	rm -f $(DESTDIR)$(libdir)/libelf.so
+ endif
+ 
+ .PSEUDO: lint
+--- elfutils-0.97/libelf/Makefile.in.orig	2004-09-25 19:41:08.000000000 +0000
++++ elfutils-0.97/libelf/Makefile.in	2005-02-10 18:01:28.028920662 +0000
+@@ -731,7 +731,7 @@
+ @MUDFLAP_FALSE@	ln -fs $@ $@.$(VERSION)
+ 
+ @MUDFLAP_FALSE@%.os: %.c %.o
+-@MUDFLAP_FALSE@	if $(COMPILE) -c -o $@ -fpic -DPIC -DSHARED -MT $@ -MD -MP \
++@MUDFLAP_FALSE@	if $(COMPILE) -c -o $@ -fPIC -DPIC -DSHARED -MT $@ -MD -MP \
+ @MUDFLAP_FALSE@	  -MF "$(DEPDIR)/$*.Tpo" `test -f '$<' || echo '$(srcdir)/'`$<; \
+ @MUDFLAP_FALSE@	then cat "$(DEPDIR)/$*.Tpo" >> "$(DEPDIR)/$*.Po"; \
+ @MUDFLAP_FALSE@	     rm -f "$(DEPDIR)/$*.Tpo"; \
+--- elfutils-0.97/libelf/libelfP.h.orig	2003-12-25 18:43:31.000000000 +0000
++++ elfutils-0.97/libelf/libelfP.h	2005-02-10 18:01:28.029920520 +0000
+@@ -387,7 +387,7 @@
+ extern int __libelf_fill_byte attribute_hidden;
+ 
+ /* Nonzero if the version was set.  */
+-extern int __libelf_version_initialized attribute_hidden;
++extern int __libelf_version_initialized /* attribute_hidden */;
+ 
+ 
+ /* The libelf API does not have such a function but it is still useful.
+--- elfutils-0.97/configure.ac	2006/08/14 23:04:23	1.1
++++ elfutils-0.97/configure.ac	2006/08/14 23:06:50
+@@ -53,6 +53,8 @@
+ AC_PROG_CPP
+ AC_PROG_GCC_TRADITIONAL
+ AM_GNU_GETTEXT([external])
++MKINSTALLDIRS="\$(SHELL) \$(top_srcdir)/config/mkinstalldirs"
++AC_SUBST(MKINSTALLDIRS)
+ AC_PROG_RANLIB
+ AC_PROG_YACC
+ AM_PROG_LEX
diff --git a/elfutils-0.97.tar.bz2 b/elfutils-0.97.tar.bz2
new file mode 100644
index 0000000..0402483
--- /dev/null
+++ b/elfutils-0.97.tar.bz2
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:105115416927f1498abecd7741af0d178a31a2bc780b3ab935b78bac48bac342
+size 216798
diff --git a/emptychangelog.diff b/emptychangelog.diff
deleted file mode 100644
index cdcc15c..0000000
--- a/emptychangelog.diff
+++ /dev/null
@@ -1,11 +0,0 @@
---- ./build/parseChangelog.c.orig	2011-05-23 14:19:48.000000000 +0000
-+++ ./build/parseChangelog.c	2011-05-23 14:20:36.000000000 +0000
-@@ -238,7 +238,7 @@ int parseChangelog(rpmSpec spec)
- 	}
-     }
- 
--    if (addChangelog(spec->packages->header, sb)) {
-+    if (sb && addChangelog(spec->packages->header, sb)) {
- 	goto exit;
-     }
-     res = nextPart;
diff --git a/emptyfilelist.diff b/emptyfilelist.diff
new file mode 100644
index 0000000..95103d6
--- /dev/null
+++ b/emptyfilelist.diff
@@ -0,0 +1,16 @@
+Fix segfault when rpmbuild stumbles over an empty file list.
+The "+ 1" is a remedy for xmalloc(0), which would return NULL.
+
+Index: ./build/files.c
+===================================================================
+--- ./build/files.c
++++ ./build/files.c
+@@ -1380,7 +1380,7 @@ static void genCpioListAndHeader(/*@part
+ 	: (int *)(fi->bnl + fi->fc);
+ /*@=dependenttrans@*/
+ 
+-    fi->apath = xmalloc(fi->fc * sizeof(*fi->apath) + apathlen);
++    fi->apath = xmalloc(fi->fc * sizeof(*fi->apath) + apathlen + 1);
+     a = (char *)(fi->apath + fi->fc);
+     *a = '\0';
+ 
diff --git a/emptyprep.diff b/emptyprep.diff
deleted file mode 100644
index 1b53278..0000000
--- a/emptyprep.diff
+++ /dev/null
@@ -1,13 +0,0 @@
-Do not segfault if the prep section is empty
-
---- build/parsePrep.c.orig	2011-05-13 16:22:59.000000000 +0000
-+++ build/parsePrep.c	2011-05-13 16:23:41.000000000 +0000
-@@ -518,7 +518,7 @@ int parsePrep(rpmSpec spec)
- 	}
-     }
- 
--    for (ARGV_const_t lines = saveLines; *lines; lines++) {
-+    for (ARGV_const_t lines = saveLines; lines && *lines; lines++) {
- 	res = 0;
- 	if (rstreqn(*lines, "%setup", sizeof("%setup")-1)) {
- 	    res = doSetupMacro(spec, *lines);
diff --git a/erasebadreturn.diff b/erasebadreturn.diff
new file mode 100644
index 0000000..554c4dc
--- /dev/null
+++ b/erasebadreturn.diff
@@ -0,0 +1,16 @@
+Do not call rpmtsRun with an empty transaction list, it returns -1
+which messes up the numFailed counter. [#43267]
+
+Index: lib/rpminstall.c
+===================================================================
+--- lib/rpminstall.c.orig
++++ lib/rpminstall.c
+@@ -844,7 +844,7 @@ int rpmErase(rpmts ts, struct rpmInstall
+     }
+ #endif
+ 
+-    if (!stopUninstall) {
++    if (numPackages && !stopUninstall) {
+ 	(void) rpmtsSetFlags(ts, (rpmtsFlags(ts) | RPMTRANS_FLAG_REVERSE));
+ 
+ 	/* Drop added/available package indices and dependency sets. */
diff --git a/eraseignoresize.diff b/eraseignoresize.diff
new file mode 100644
index 0000000..b384f41
--- /dev/null
+++ b/eraseignoresize.diff
@@ -0,0 +1,28 @@
+Allow "--ignoresize" for erase operations.
+
+Index: lib/rpminstall.c
+===================================================================
+--- lib/rpminstall.c.orig
++++ lib/rpminstall.c
+@@ -850,7 +850,7 @@ int rpmErase(rpmts ts, struct rpmInstall
+ 	/* Drop added/available package indices and dependency sets. */
+ 	rpmtsClean(ts);
+ 
+-	numPackages = rpmtsRun(ts, NULL, 0);
++	numPackages = rpmtsRun(ts, NULL, ia->probFilter & (RPMPROB_FILTER_DISKSPACE|RPMPROB_FILTER_DISKNODES));
+ 	ps = rpmtsProblems(ts);
+ 	if (rpmpsNumProblems(ps) > 0)
+ 	    rpmpsPrint(NULL, ps);
+Index: rpmqv.c
+===================================================================
+--- rpmqv.c.orig
++++ rpmqv.c
+@@ -468,7 +468,7 @@ int main(int argc, const char ** argv)
+ 	argerror(_("--ignoreos may only be specified during package "
+ 		   "installation"));
+ 
+-    if (bigMode != MODE_INSTALL &&
++    if (bigMode != MODE_INSTALL && bigMode != MODE_ERASE &&
+ 	(ia->probFilter & (RPMPROB_FILTER_DISKSPACE|RPMPROB_FILTER_DISKNODES)))
+ 	argerror(_("--ignoresize may only be specified during package "
+ 		   "installation"));
diff --git a/eraseordered.diff b/eraseordered.diff
new file mode 100644
index 0000000..e7093bb
--- /dev/null
+++ b/eraseordered.diff
@@ -0,0 +1,21 @@
+Order packages when erasing. Not tested very well.
+
+Index: lib/rpminstall.c
+===================================================================
+--- lib/rpminstall.c.orig
++++ lib/rpminstall.c
+@@ -835,14 +835,12 @@ int rpmErase(rpmts ts, struct rpmInstall
+ 	ps = rpmpsFree(ps);
+     }
+ 
+-#ifdef	NOTYET
+     if (!stopUninstall && !(ia->installInterfaceFlags & INSTALL_NOORDER)) {
+ 	if (rpmtsOrder(ts)) {
+ 	    numFailed += numPackages;
+ 	    stopUninstall = 1;
+ 	}
+     }
+-#endif
+ 
+     if (!stopUninstall) {
+ 	(void) rpmtsSetFlags(ts, (rpmtsFlags(ts) | RPMTRANS_FLAG_REVERSE));
diff --git a/exitstatus.diff b/exitstatus.diff
new file mode 100644
index 0000000..f77e0e8
--- /dev/null
+++ b/exitstatus.diff
@@ -0,0 +1,15 @@
+Deal with a return value of "-2" when database locking failed.
+
+--- ./lib/rpminstall.c.orig	2005-12-14 21:01:09.000000000 +0000
++++ ./lib/rpminstall.c	2005-12-15 14:47:35.000000000 +0000
+@@ -599,6 +611,10 @@ if (fileURL[0] == '=') {
+ 	    eiu->numFailed++;
+ 	    goto exit;
+ 	    /*@notreached@*/ /*@switchbreak@*/ break;
++	default:
++	    eiu->numFailed++;
++	    goto exit;
++	    /*@notreached@*/ /*@switchbreak@*/ break;
+ 	}
+ 
+ 	eiu->numRPMS++;
diff --git a/extcond.diff b/extcond.diff
index 32d8e81..bd5055c 100644
--- a/extcond.diff
+++ b/extcond.diff
@@ -4,9 +4,9 @@ assumed to be true.
 This mechanism is used by the weakdeps patch to filter the
 "RPMSENSE_STRONG" flag.
 
---- ./lib/headerfmt.c.orig	2010-12-03 12:11:57.000000000 +0000
-+++ ./lib/headerfmt.c	2011-05-10 17:06:49.000000000 +0000
-@@ -568,8 +568,12 @@ static int parseExpression(headerSprintf
+--- ./rpmdb/header.c.orig	2005-06-06 23:33:54.000000000 +0000
++++ ./rpmdb/header.c	2006-03-17 18:08:02.000000000 +0000
+@@ -2980,8 +2980,12 @@ static int parseExpression(headerSprintf
  
      *endPtr = chptr;
  
@@ -19,16 +19,16 @@ This mechanism is used by the weakdeps patch to filter the
      (void) findTag(hsa, token, str);
  
      return 0;
-@@ -657,6 +661,7 @@ static char * singleSprintf(headerSprint
-     int i, j, found;
-     rpm_count_t count, numElements;
+@@ -3239,6 +3243,7 @@ static char * singleSprintf(headerSprint
+     int_32 type;
+     int_32 count;
      sprintfToken spft;
 +    sprintfTag stag;
      int condNumFormats;
      size_t need;
  
-@@ -687,6 +692,18 @@ static char * singleSprintf(headerSprint
- 		      headerIsEntry(hsa->h, token->u.cond.tag.tag)) {
+@@ -3270,6 +3275,18 @@ static char * singleSprintf(headerSprint
+ 	if (token->u.cond.tag.ext || headerIsEntry(hsa->h, token->u.cond.tag.tag)) {
  	    spft = token->u.cond.ifFormat;
  	    condNumFormats = token->u.cond.numIfTokens;
 +	    if (token->u.cond.tag.fmt) {
@@ -46,20 +46,33 @@ This mechanism is used by the weakdeps patch to filter the
  	} else {
  	    spft = token->u.cond.elseFormat;
  	    condNumFormats = token->u.cond.numElseTokens;
-@@ -710,10 +727,13 @@ static char * singleSprintf(headerSprint
+@@ -3291,19 +3308,22 @@ static char * singleSprintf(headerSprint
+ 	spft = token->u.array.format;
  	for (i = 0; i < token->u.array.numTokens; i++, spft++)
  	{
- 	    rpmtd td = NULL;
 -	    if (spft->type != PTOK_TAG ||
+-		spft->u.tag.arrayCount ||
 -		spft->u.tag.justOne) continue;
 +	    if (spft->type != PTOK_TAG && spft->type != PTOK_COND)
 +		continue;
++
 +	    stag = (spft->type == PTOK_COND ? &spft->u.cond.tag : &spft->u.tag);
-+	    if (stag->justOne)
++	    if (stag->arrayCount || stag->justOne)
 +		continue;
  
--	    if (!(td = getData(hsa, spft->u.tag.tag))) {
-+	    if (!(td = getData(hsa, stag->tag))) {
- 		continue;
- 	    }
- 
+-	    if (spft->u.tag.ext) {
++	    if (stag->ext) {
+ /*@-boundswrite@*/
+-		if (getExtension(hsa, spft->u.tag.ext, &type, NULL, &count, 
+-				 hsa->ec + spft->u.tag.extNum))
++		if (getExtension(hsa, stag->ext, &type, NULL, &count, 
++				 hsa->ec + stag->extNum))
+ 		     continue;
+ /*@=boundswrite@*/
+ 	    } else {
+ /*@-boundswrite@*/
+-		if (!headerGetEntry(hsa->h, spft->u.tag.tag, &type, NULL, &count))
++		if (!headerGetEntry(hsa->h, stag->tag, &type, NULL, &count))
+ 		    continue;
+ /*@=boundswrite@*/
+ 	    } 
diff --git a/fileattrs.diff b/fileattrs.diff
deleted file mode 100644
index 155a52b..0000000
--- a/fileattrs.diff
+++ /dev/null
@@ -1,85 +0,0 @@
-Index: fileattrs/debuginfo.attr
-===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ fileattrs/debuginfo.attr	2011-06-06 16:16:00.853820498 +0200
-@@ -0,0 +1,2 @@
-+%__debuginfo_provides	%{_rpmconfigdir}/debuginfo.prov
-+%__debuginfo_path	^/usr/lib/debug/
-Index: fileattrs/elf.attr
-===================================================================
---- fileattrs/elf.attr.orig	2011-06-06 16:15:01.591403879 +0200
-+++ fileattrs/elf.attr	2011-06-06 16:16:00.853820498 +0200
-@@ -1,4 +1,5 @@
- %__elf_provides		%{_rpmconfigdir}/elfdeps --provides %{?__filter_GLIBC_PRIVATE:--filter-private}
- %__elf_requires		%{_rpmconfigdir}/elfdeps --requires %{?__filter_GLIBC_PRIVATE:--filter-private}
--%__elf_magic		^ELF (32|64)-bit.*$
-+%__elf_magic		^ELF (32|64)-bit.*executable
- %__elf_flags		exeonly
-+%__elf_exclude_path	^/usr/lib/debug/
-Index: fileattrs/elflib.attr
-===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ fileattrs/elflib.attr	2011-06-06 16:16:00.854820404 +0200
-@@ -0,0 +1,4 @@
-+%__elflib_provides	%{_rpmconfigdir}/elfdeps --assume-exec --provides %{?__filter_GLIBC_PRIVATE:--filter-private}
-+%__elflib_requires	%{_rpmconfigdir}/elfdeps --assume-exec --requires %{?__filter_GLIBC_PRIVATE:--filter-private}
-+%__elflib_magic		^ELF (32|64)-bit.*shared object
-+%__elflib_exclude_path	^/usr/lib/debug/
-Index: fileattrs/firmware.attr
-===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ fileattrs/firmware.attr	2011-06-06 16:16:00.854820404 +0200
-@@ -0,0 +1,2 @@
-+%__firmware_provides	%{_rpmconfigdir}/firmware.prov
-+%__firmware_path	/lib/firmware/
-Index: fileattrs/ksyms.attr
-===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ fileattrs/ksyms.attr	2011-06-06 16:16:00.854820404 +0200
-@@ -0,0 +1,4 @@
-+%__ksyms_provides	%{_rpmconfigdir}/find-provides.ksyms %name
-+%__ksyms_requires	%{_rpmconfigdir}/find-requires.ksyms %name
-+%__ksyms_supplements	%{_rpmconfigdir}/find-supplements.ksyms %name
-+%__ksyms_path	(/lib/modules/.*\.ko(\.gz)?)|(/boot/vmlinu[xz].*)$
-Index: fileattrs/Makefile.am
-===================================================================
---- fileattrs/Makefile.am.orig	2011-06-06 16:15:01.590403974 +0200
-+++ fileattrs/Makefile.am	2011-06-06 16:16:08.852066946 +0200
-@@ -5,7 +5,8 @@ include $(top_srcdir)/rpm.am
- fattrsdir = $(rpmconfigdir)/fileattrs
- 
- fattrs_DATA = \
--	desktop.attr elf.attr font.attr libtool.attr perl.attr perllib.attr \
--	pkgconfig.attr python.attr ocaml.attr script.attr mono.attr
-+	elf.attr font.attr libtool.attr perl.attr perllib.attr \
-+	pkgconfig.attr python.attr ocaml.attr script.attr mono.attr \
-+	debuginfo.attr elflib.attr firmware.attr ksyms.attr sysvinit.attr
- 
- EXTRA_DIST = $(fattrs_DATA)
-Index: fileattrs/perl.attr
-===================================================================
---- fileattrs/perl.attr.orig	2011-06-06 16:15:01.591403879 +0200
-+++ fileattrs/perl.attr	2011-06-06 16:16:00.855820310 +0200
-@@ -1,3 +1,4 @@
--%__perl_requires	%{_rpmconfigdir}/perl.req
-+# disabled for now
-+#%__perl_requires	%{_rpmconfigdir}/perl.req
- %__perl_magic		^.*perl .*$
- %__perl_flags		exeonly
-Index: fileattrs/perllib.attr
-===================================================================
---- fileattrs/perllib.attr.orig	2011-06-06 16:15:01.591403879 +0200
-+++ fileattrs/perllib.attr	2011-06-06 16:16:00.855820310 +0200
-@@ -1,3 +1,4 @@
- %__perllib_provides	%{_rpmconfigdir}/perl.prov
--%__perllib_requires	%{_rpmconfigdir}/perl.req
-+#disabled for now
-+#%__perllib_requires	%{_rpmconfigdir}/perl.req
- %__perllib_magic	^Perl[[:digit:]] module source.*
-Index: fileattrs/sysvinit.attr
-===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ fileattrs/sysvinit.attr	2011-06-06 16:16:00.856820216 +0200
-@@ -0,0 +1,2 @@
-+%__sysvinit_provides	%{_rpmconfigdir}/sysvinitdeps.sh --provides
-+%__sysvinit_path	^/etc/init\.d/
diff --git a/filenonull.diff b/filenonull.diff
new file mode 100644
index 0000000..ff1fc86
--- /dev/null
+++ b/filenonull.diff
@@ -0,0 +1,12 @@
+Return an error if Fileno is called with NULL instead of segfaulting.
+
+--- ./rpmio/rpmio.c.orig	2005-01-26 03:39:58.000000000 +0000
++++ ./rpmio/rpmio.c	2005-12-16 17:51:19.000000000 +0000
+@@ -3094,6 +3164,7 @@ int Fileno(FD_t fd)
+ {
+     int i, rc = -1;
+ 
++    if (fd == NULL) return -1;
+     if (fd->req != NULL)
+ 	rc = 123456789;	/* HACK: https has no steenkin fileno. */
+     else
diff --git a/filequery.diff b/filequery.diff
new file mode 100644
index 0000000..e96020a
--- /dev/null
+++ b/filequery.diff
@@ -0,0 +1,14 @@
+Do not check package provides if there is no slash in the file path.
+bugzilla [#32467], rh#125516.
+
+--- ./lib/query.c.orig	2004-10-26 23:29:28.000000000 +0000
++++ ./lib/query.c	2005-12-16 18:22:19.000000000 +0000
+@@ -614,7 +637,7 @@ int rpmQueryVerify(QVA_t qva, rpmts ts, 
+ 	if (qva->qva_mi == NULL) {
+ 	    if (access(fn, F_OK) != 0)
+ 		myerrno = errno;
+-	    else if (!provides_checked)
++	    else if (!provides_checked && strchr(fn, '/'))
+ 		qva->qva_mi = rpmtsInitIterator(ts, RPMTAG_PROVIDENAME, fn, 0);
+ 	}
+ 
diff --git a/files.diff b/files.diff
deleted file mode 100644
index 32c6fa2..0000000
--- a/files.diff
+++ /dev/null
@@ -1,17 +0,0 @@
-Print "unpackaged files" section even if there was an error
-in the filelist.
-
---- ./build/files.c.orig	2011-05-11 15:27:11.000000000 +0000
-+++ ./build/files.c	2011-05-11 15:29:12.000000000 +0000
-@@ -2149,10 +2149,10 @@ rpmRC processBinaryFiles(rpmSpec spec, r
-      */
-     
-     
-+exit:
-     if (checkFiles(spec->buildRoot, check_fileList) > 0) {
- 	rc = RPMRC_FAIL;
-     }
--exit:
-     check_fileList = freeStringBuf(check_fileList);
-     
-     return rc;
diff --git a/finddebuginfo-absolute-links.diff b/finddebuginfo-absolute-links.diff
deleted file mode 100644
index 9cd08c7..0000000
--- a/finddebuginfo-absolute-links.diff
+++ /dev/null
@@ -1,41 +0,0 @@
-From: Jan Blunck <jblunck@suse.de>
-Subject: Do the symbolic links right in the first place
-
-Since brp-symlink relinks symbolic links to enforce a certain policy we should
-do it right in the first place. So this patch changes find-debuginfo.sh scripts
-behavior to reflect that policy.
-
-Signed-off-by: Jan Blunck <jblunck@suse.de>
-
---- ./scripts/find-debuginfo.sh.orig	2011-05-11 15:36:05.000000000 +0000
-+++ ./scripts/find-debuginfo.sh	2011-05-11 15:58:17.000000000 +0000
-@@ -124,7 +124,17 @@ debug_link()
-   local l="/usr/lib/debug$2"
-   local t="$1"
-   echo >> "$LINKSFILE" "$l $t"
--  link_relative "$t" "$l" "$RPM_BUILD_ROOT"
-+
-+  # this should correspond to what brp-symlink is doing
-+  case $t in
-+      /usr*)
-+	  link_relative "$t" "$l" "$RPM_BUILD_ROOT"
-+	  ;;
-+      *)
-+	  mkdir -p "$(dirname "$RPM_BUILD_ROOT$l")" && \
-+	      ln -snf "$t" "$RPM_BUILD_ROOT$l"
-+	  ;;
-+  esac
- }
- 
- # Compare two binaries but ignore the .note.gnu.build-id section
-@@ -158,8 +168,8 @@ make_id_link()
- 
-   local other=$(readlink -m "$root_idfile")
-   other=${other#$RPM_BUILD_ROOT}
--  if cmp -s "$root_idfile" "$RPM_BUILD_ROOT$file" ||
--     elfcmp "$root_idfile" "$RPM_BUILD_ROOT$file" ; then
-+  if cmp -s "$RPM_BUILD_ROOT$other" "$RPM_BUILD_ROOT$file" ||
-+     elfcmp "$RPM_BUILD_ROOT$other" "$RPM_BUILD_ROOT$file" ; then
-     # Two copies.  Maybe one has to be setuid or something.
-     echo >&2 "*** WARNING: identical binaries are copied, not linked:"
-     echo >&2 "        $file"
diff --git a/finddebuginfo.diff b/finddebuginfo.diff
index d382d24..f53501f 100644
--- a/finddebuginfo.diff
+++ b/finddebuginfo.diff
@@ -1,119 +1,102 @@
---- ./scripts/find-debuginfo.sh.orig	2010-12-03 12:11:57.000000000 +0000
-+++ ./scripts/find-debuginfo.sh	2011-05-11 14:46:18.000000000 +0000
-@@ -127,6 +127,20 @@ debug_link()
-   link_relative "$t" "$l" "$RPM_BUILD_ROOT"
- }
- 
-+# Compare two binaries but ignore the .note.gnu.build-id section
-+elfcmp()
-+{
-+  local tmp1=$(mktemp -t ${1##*/}.XXXXXX)
-+  local tmp2=$(mktemp -t ${2##*/}.XXXXXX)
-+
-+  objcopy -R .note.gnu.build-id -R .gnu_debuglink $1 $tmp1
-+  objcopy -R .note.gnu.build-id -R .gnu_debuglink $2 $tmp2
-+  cmp -s $tmp1 $tmp2
-+  local res=$?
-+  rm -f $tmp1 $tmp2
-+  return $res
-+}
-+
- # Make a build-id symlink for id $1 with suffix $3 to file $2.
- make_id_link()
- {
-@@ -145,7 +159,7 @@ make_id_link()
-   local other=$(readlink -m "$root_idfile")
-   other=${other#$RPM_BUILD_ROOT}
-   if cmp -s "$root_idfile" "$RPM_BUILD_ROOT$file" ||
--     eu-elfcmp -q "$root_idfile" "$RPM_BUILD_ROOT$file" 2> /dev/null; then
-+     elfcmp "$root_idfile" "$RPM_BUILD_ROOT$file" ; then
-     # Two copies.  Maybe one has to be setuid or something.
-     echo >&2 "*** WARNING: identical binaries are copied, not linked:"
-     echo >&2 "        $file"
-@@ -174,12 +188,18 @@ strict_error=ERROR
- $strict || strict_error=WARNING
+SUSE specific find-debuginfo changes.
+
+--- ./scripts/find-debuginfo.sh.orig	2005-07-14 15:52:31.000000000 +0000
++++ ./scripts/find-debuginfo.sh	2006-03-17 13:13:03.000000000 +0000
+@@ -14,9 +14,18 @@ debugdir="${RPM_BUILD_ROOT}/usr/lib/debu
+ echo -n > $SOURCEFILE
  
  # Strip ELF binaries
--find "$RPM_BUILD_ROOT" ! -path "${debugdir}/*.debug" -type f \
--     		     \( -perm -0100 -or -perm -0010 -or -perm -0001 \) \
--		     -print |
--file -N -f - | sed -n -e 's/^\(.*\):[ 	]*.*ELF.*, not stripped/\1/p' |
--xargs --no-run-if-empty stat -c '%h %D_%i %n' |
-+find $RPM_BUILD_ROOT ! -path "${debugdir}/*.debug" -type f \( -perm +111 -or -name "*.so*" -or -name "*.ko" \) -print 0 | sort -z |
-+xargs --no-run-if-empty -0 stat -c '%h %D_%i %n' |
- while read nlinks inum f; do
-+  case $(objdump -h $f 2>/dev/null | egrep -o '(debug[\.a-z_]*|gnu.version)') in
-+    *debuglink*) continue ;;
-+    *debug*) ;;
-+    *gnu.version*)
-+	echo "WARNING: "`echo $f | sed -e "s,^$RPM_BUILD_ROOT/*,/,"`" is already stripped!"
-+	continue
-+	;;
-+    *) continue ;;
-+  esac
-   get_debugfn "$f"
-   [ -f "${debugfn}" ] && continue
+-for f in `find $RPM_BUILD_ROOT ! -path "${debugdir}/*.debug" -type f \( -perm -0100 -or -perm -0010 -or -perm -0001 \) -exec file {} \; | \
+-	sed -n -e 's/^\(.*\):[ 	]*.*ELF.*, not stripped/\1/p'`
++for f in `find $RPM_BUILD_ROOT ! -path "${debugdir}/*.debug" -type f \( -perm +111 -or -name "*.so*" -or -name "*.ko" \) `
+ do
++	case $(objdump -h $f 2>/dev/null | egrep -o '(debug[\.a-z_]*|gnu.version)') in
++	    *debuglink*) continue ;;
++	    *debug*) ;;
++	    *gnu.version*)
++		echo "WARNING: "`echo $f | sed -e "s,^$RPM_BUILD_ROOT/*,/,"`" is already stripped!"
++		continue
++		;;
++	    *) continue ;;
++	esac
++
+ 	dn=$(dirname $f | sed -n -e "s#^$RPM_BUILD_ROOT##p")
+ 	bn=$(basename $f .debug).debug
  
-@@ -200,8 +220,11 @@ while read nlinks inum f; do
-   fi
+@@ -25,6 +34,8 @@ do
+ 	[ -f "${debugfn}" ] && continue
  
-   echo "extracting debug info from $f"
--  id=$(/usr/lib/rpm/debugedit -b "$RPM_BUILD_DIR" -d /usr/src/debug \
--			      -i -l "$SOURCEFILE" "$f") || exit
-+  mode=$(stat -c %a "$f")
-+  chmod +w "$f"
-+  id=$($(DEBUGEDIT=$(which debugedit 2>/dev/null); \
-+      echo ${DEBUGEDIT:-/usr/lib/rpm/debugedit}) -b "$RPM_BUILD_DIR" \
-+      -d /usr/src/debug -i -l "$SOURCEFILE" "$f") || exit
-   if [ -z "$id" ]; then
-     echo >&2 "*** ${strict_error}: No build ID note found in $f"
-     $strict && exit 2
-@@ -218,13 +241,25 @@ while read nlinks inum f; do
-   esac
+ 	echo extracting debug info from $f
++	mode=$(stat -c %a $f)
++	chmod +w $f
+ 	/usr/lib/rpm/debugedit -b "$RPM_BUILD_DIR" -d /usr/src/debug -l "$SOURCEFILE" "$f"
  
-   mkdir -p "${debugdn}"
--  if test -w "$f"; then
--    strip_to_debug "${debugfn}" "$f"
--  else
--    chmod u+w "$f"
--    strip_to_debug "${debugfn}" "$f"
--    chmod u-w "$f"
--  fi
-+  objcopy --only-keep-debug $f $debugfn || :
-+  (
-+    shopt -s extglob
-+    strip_option="--strip-all"
-+    case "$f" in
-+      *.ko)
-+	strip_option="--strip-debug" ;;
-+      *$STRIP_KEEP_SYMTAB*)
-+	if test -n "$STRIP_KEEP_SYMTAB"; then
-+	  strip_option="--strip-debug"
-+        fi
-+        ;;
-+    esac
-+    if test "$NO_DEBUGINFO_STRIP_DEBUG" = true ; then
-+      strip_option=
-+    fi
-+    objcopy --add-gnu-debuglink=$debugfn -R .comment -R .GCC.command.line $strip_option $f
-+    chmod $mode $f
-+  ) || :
+ 	# A binary already copied into /usr/lib/debug doesn't get stripped,
+@@ -34,19 +45,56 @@ do
+ 	esac
  
-   if [ -n "$id" ]; then
-     make_id_link "$id" "$dn/$(basename $f)"
-@@ -253,12 +288,14 @@ if [ -s "$SOURCEFILE" ]; then
-   # stupid cpio creates new directories in mode 0700, fixup
-   find "${RPM_BUILD_ROOT}/usr/src/debug" -type d -print0 |
-   xargs --no-run-if-empty -0 chmod a+rx
-+  find "${RPM_BUILD_ROOT}/usr/src/debug" -type f -print0 |
-+  xargs --no-run-if-empty -0 chmod a+r
- fi
+ 	mkdir -p "${debugdn}"
+-	if test -w "$f"; then
+-		eu-strip -f "${debugfn}" "$f" || :
+-	else
+-		chmod u+w "$f"
+-		eu-strip -f "${debugfn}" "$f" || :
+-		chmod u-w "$f"
++	objcopy --only-keep-debug $f $debugfn || :
++	strip_option="--strip-all"
++	case "$f" in
++	    *.ko|*.a) strip_option="--strip-debug" ;;
++	esac
++	if test -n "$STRIP_KEEP_SYMTAB" ; then
++	    strip_option="--strip-debug"
+ 	fi
++	if test "$NO_DEBUGINFO_STRIP_DEBUG" = true ; then
++	    strip_option=
++	fi
++	objcopy --add-gnu-debuglink=$debugfn $strip_option $f || :
++	chmod $mode $f
+ done
  
- if [ -d "${RPM_BUILD_ROOT}/usr/lib" -o -d "${RPM_BUILD_ROOT}/usr/src" ]; then
-   ((nout > 0)) ||
-   test ! -d "${RPM_BUILD_ROOT}/usr/lib" ||
--  (cd "${RPM_BUILD_ROOT}/usr/lib"; find debug -type d) |
-+  (cd "${RPM_BUILD_ROOT}/usr/lib"; test ! -d debug || find debug -type d) |
-   sed 's,^,%dir /usr/lib/,' >> "$LISTFILE"
++for f in `find $RPM_BUILD_ROOT ! -path "${debugdir}/*.debug" -type f \( -name "*.exe.mdb" -or -name "*.dll.mdb" \) `
++do
++	dn=$(dirname $f | sed -n -e "s#^$RPM_BUILD_ROOT##p")
++	case "$dn" in
++	/usr/lib/debug/*) continue ;;
++	esac
++	debugdn="${debugdir}${dn}"
++	mkdir -p "${debugdn}"
++	mv "$f" "${debugdn}"
++done
++
++
+ mkdir -p ${RPM_BUILD_ROOT}/usr/src/debug
+-cat $SOURCEFILE | (cd $RPM_BUILD_DIR; LANG=C sort -z -u | cpio -pd0m ${RPM_BUILD_ROOT}/usr/src/debug)
+-# stupid cpio creates new directories in mode 0700, fixup
+-find ${RPM_BUILD_ROOT}/usr/src/debug -type d -print0 | xargs -0 chmod a+rx
++(cd $RPM_BUILD_DIR; LANG=C sort -z -u | cpio -pd0m ${RPM_BUILD_ROOT}/usr/src/debug) < $SOURCEFILE
  
-   (cd "${RPM_BUILD_ROOT}/usr"
+-find ${RPM_BUILD_ROOT}/usr/lib/debug -type f | sed -n -e "s#^$RPM_BUILD_ROOT##p" > $LISTFILE
+-find ${RPM_BUILD_ROOT}/usr/src/debug -mindepth 1 -maxdepth 1 | sed -n -e "s#^$RPM_BUILD_ROOT##p" >> $LISTFILE
++# trying to replace dangling and/or absolute symlink
++DBASE=${RPM_BUILD_ROOT}/usr/src/debug
++for link in `find $DBASE -type l -printf "%P\n"` ; do
++	link_file=`readlink $RPM_BUILD_DIR/$link`
++	case $link_file in
++	    /*) is_abs=true ;;
++	    *)  is_abs= ;;
++	esac
++	if test ! -e "$DBASE/$link" -o -n "$is_abs" ; then # dangling
++		rm -f "$DBASE/$link"
++		cp "`readlink -f $RPM_BUILD_DIR/$link`" "$DBASE/$link"
++	fi
++done
++
++{
++	test -d ${RPM_BUILD_ROOT}/usr/lib/debug && echo /usr/lib/debug
++	echo /usr/src/debug
++} > $LISTFILE
++
++for p in $(<$LISTFILE); do
++  find $RPM_BUILD_ROOT/$p -type f -print0 | xargs -0 -r chmod 0644
++  find $RPM_BUILD_ROOT/$p -type d -print0 | xargs -0 -r chmod 0755
++done
diff --git a/findfplistexclude.diff b/findfplistexclude.diff
new file mode 100644
index 0000000..45b185f
--- /dev/null
+++ b/findfplistexclude.diff
@@ -0,0 +1,114 @@
+Allow an "exclude" parameter for rpmdbFindFp, specifying a header
+that is to be excluded in the match. Used to speed up package erase
+operations.
+Also fixes the skipDir problem that made rpm incorrectly delete
+files even if another package still references them.
+rh#140055
+
+Index: lib/transaction.c
+===================================================================
+--- lib/transaction.c.orig
++++ lib/transaction.c
+@@ -1745,7 +1745,7 @@ rpmMessage(RPMMESS_DEBUG, _("computing f
+ 	(void) rpmswEnter(rpmtsOp(ts, RPMTS_OP_FINGERPRINT), 0);
+ 	/* Extract file info for all files in this package from the database. */
+ 	matches = xcalloc(fc, sizeof(*matches));
+-	if (rpmdbFindFpList(rpmtsGetRdb(ts), fi->fps, matches, fc)) {
++	if (rpmdbFindFpListExclude(rpmtsGetRdb(ts), fi->fps, matches, fc, rpmteType(p) == TR_REMOVED ? fi->record : 0)) {
+ 	    ps = rpmpsFree(ps);
+ 	    rpmtsFreeLock(lock);
+ 	    return 1;	/* XXX WTFO? */
+Index: rpmdb/fprint.h
+===================================================================
+--- rpmdb/fprint.h.orig
++++ rpmdb/fprint.h
+@@ -79,6 +79,12 @@ int rpmdbFindFpList(/*@null@*/ rpmdb db,
+ 	/*@modifies db, *matchList, rpmGlobalMacroContext,
+ 		fileSystem, internalState @*/;
+ 
++int rpmdbFindFpListExclude(/*@null@*/ rpmdb db, fingerPrint  * fpList,
++		/*@out@*/ dbiIndexSet * matchList, int numItems, unsigned int exclude)
++	/*@globals rpmGlobalMacroContext, fileSystem, internalState @*/
++	/*@modifies db, *matchList, rpmGlobalMacroContext,
++		fileSystem, internalState @*/;
++
+ /* Be carefull with the memory... assert(*fullName == '/' || !scareMemory) */
+ 
+ /**
+Index: rpmdb/rpmdb.c
+===================================================================
+--- rpmdb/rpmdb.c.orig
++++ rpmdb/rpmdb.c
+@@ -2358,7 +2358,7 @@ static void rpmdbSortIterator(/*@null@*/
+ }
+ 
+ /*@-bounds@*/ /* LCL: segfault */
+-static int rpmdbGrowIterator(/*@null@*/ rpmdbMatchIterator mi, int fpNum)
++static int rpmdbGrowIterator(/*@null@*/ rpmdbMatchIterator mi, int fpNum, unsigned int exclude)
+ 	/*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/
+ 	/*@modifies mi, rpmGlobalMacroContext, fileSystem, internalState @*/
+ {
+@@ -2369,7 +2369,7 @@ static int rpmdbGrowIterator(/*@null@*/ 
+     dbiIndexSet set;
+     int rc;
+     int xx;
+-    int i;
++    int i, j;
+ 
+     if (mi == NULL)
+ 	return 1;
+@@ -2405,6 +2405,25 @@ static int rpmdbGrowIterator(/*@null@*/ 
+ 
+     set = NULL;
+     (void) dbt2set(dbi, data, &set);
++
++    /* prune the set against exclude */
++    for (i = j = 0; i < set->count; i++) {
++	if (exclude && set->recs[i].hdrNum == exclude)
++	    continue;
++	if (i != j)
++	    set->recs[j] = set->recs[i];
++	j++;
++    }
++    if (j == 0) {
++#ifdef	SQLITE_HACK
++	xx = dbiCclose(dbi, dbcursor, 0);
++	dbcursor = NULL;
++#endif
++	set = dbiFreeIndexSet(set);
++	return DB_NOTFOUND;
++    }
++    set->count = j;
++
+     for (i = 0; i < set->count; i++)
+ 	set->recs[i].fpNum = fpNum;
+ 
+@@ -3393,6 +3412,12 @@ static int skipDir(const char * dn)
+ int rpmdbFindFpList(rpmdb db, fingerPrint * fpList, dbiIndexSet * matchList, 
+ 		    int numItems)
+ {
++    return rpmdbFindFpListExclude(db, fpList, matchList, numItems, 0);
++}
++
++int rpmdbFindFpListExclude(rpmdb db, fingerPrint * fpList, dbiIndexSet * matchList,
++		    int numItems, unsigned int exclude)
++{
+ DBT * key;
+ DBT * data;
+     HGE_t hge = (HGE_t)headerGetEntryMinMemory;
+@@ -3424,10 +3449,13 @@ key->data = (void *) fpList[i].baseName;
+ key->size = strlen((char *)key->data);
+ if (key->size == 0) key->size++;	/* XXX "/" fixup. */
+ 
+-	if (skipDir(fpList[i].entry->dirName))
++	/* HACK HACK HACK: don't skip dirs while removing
++	 * packages as we will loose files on conflicts.
++	 * exclude is not zero when removing */
++	if (!exclude && skipDir(fpList[i].entry->dirName))
+ 	    continue;
+ 
+-	xx = rpmdbGrowIterator(mi, i);
++	xx = rpmdbGrowIterator(mi, i, exclude);
+ 
+     }
+ 
diff --git a/findksyms.diff b/findksyms.diff
index 786cc91..88d4f02 100644
--- a/findksyms.diff
+++ b/findksyms.diff
@@ -1,26 +1,10 @@
 SUSE specific kernel provides/requires scripts
 
---- ./scripts/Makefile.am.orig	2011-05-11 14:31:45.000000000 +0000
-+++ ./scripts/Makefile.am	2011-05-11 14:46:38.000000000 +0000
-@@ -16,6 +16,7 @@ EXTRA_DIST = \
- 	rpmdb_loadcvt rpm.daily rpm.log rpm2cpio.sh \
- 	tcl.req tgpg vpkg-provides.sh \
- 	find-requires.php find-provides.php \
-+	find-requires.ksyms find-provides.ksyms \
- 	find-php-provides find-php-requires \
- 	mono-find-requires mono-find-provides \
- 	ocaml-find-requires.sh ocaml-find-provides.sh \
-@@ -32,6 +33,7 @@ rpmconfig_SCRIPTS = \
- 	check-buildroot check-rpaths check-rpaths-worker \
- 	find-lang.sh \
- 	perl.prov perl.req perldeps.pl pythondeps.sh osgideps.pl \
-+	find-requires.ksyms find-provides.ksyms \
- 	mono-find-requires mono-find-provides \
- 	pkgconfigdeps.sh libtooldeps.sh \
- 	ocaml-find-requires.sh ocaml-find-provides.sh \
---- ./scripts/find-provides.ksyms.orig	2011-05-11 14:46:38.000000000 +0000
-+++ ./scripts/find-provides.ksyms	2011-05-11 14:46:38.000000000 +0000
-@@ -0,0 +1,41 @@
+Index: scripts/find-provides.ksyms
+===================================================================
+--- /dev/null
++++ scripts/find-provides.ksyms
+@@ -0,0 +1,20 @@
 +#! /bin/sh
 +
 +IFS=$'\n'
@@ -28,43 +12,24 @@ SUSE specific kernel provides/requires scripts
 +case "$1" in
 +kernel-module-*)    ;; # Fedora kernel module package names start with
 +		       # kernel-module.
-+kernel*)	    kernel_flavor=${1#kernel-} ;;
++kernel*)	    is_kernel_package=1 ;;
 +esac
 +
-+trap 'rm -f "$tmp"' EXIT
-+tmp=$(mktemp)
-+while read f; do
-+    test -e "$f" || continue
-+    case "$f" in
-+    *.debug)
-+        continue
-+        ;;
-+    */lib/modules/*/*.ko | */lib/modules/*/*.ko.gz | */boot/vmlinu[xz]*)
-+        ;;
-+    *)
-+        continue
-+    esac
-+    unzip=false
-+    case "$f" in
-+    *.gz | */boot/vmlinuz*)
-+        unzip=true
-+    esac
-+    if $unzip && gzip -cd "$f" >"$tmp"; then
-+        f=$tmp
-+    fi
-+    flavor=$(/sbin/modinfo -F vermagic "$f")
-+    flavor=${flavor%% *}
-+    flavor=${flavor##*-}
-+    if test -z "$flavor"; then
-+        flavor=$kernel_flavor
-+    fi
-+    nm "$f" \
-+    | sed -r -ne "s/^0*([0-9a-f]+) A __crc_(.+)/ksym($flavor:\\2) = \\1/p"
++if ! [ -z "$is_kernel_package" ]; then
++    cat > /dev/null
++    exit 0
++fi
++
++for module in $(grep -E '/lib/modules/.+\.ko$'); do
++    nm "$module" \
++    | sed -r -ne 's:^0*([0-9a-f]+) A __crc_(.+):ksym(\2) = \1:p'
 +done \
 +| sort -u
---- ./scripts/find-requires.ksyms.orig	2011-05-11 14:46:38.000000000 +0000
-+++ ./scripts/find-requires.ksyms	2011-05-11 14:46:38.000000000 +0000
-@@ -0,0 +1,57 @@
+Index: scripts/find-requires.ksyms
+===================================================================
+--- /dev/null
++++ scripts/find-requires.ksyms
+@@ -0,0 +1,58 @@
 +#! /bin/bash
 +
 +IFS=$'\n'
@@ -80,16 +45,18 @@ SUSE specific kernel provides/requires scripts
 +	nm "$module"
 +    done \
 +    | sed -r -ne 's:^0*([0-9a-f]+) A __crc_(.+):\1\t\2:p' \
-+    | sort -t $'\t' -k2 -u
++    | sort -k2 -u
 +}
 +
 +all_requires() {
 +    for module in "$@"; do
 +	set -- $(/sbin/modinfo -F vermagic "$module" | sed -e 's: .*::' -e q)
-+	/sbin/modprobe --dump-modversions "$module" \
++	if [ -e "/boot/symsets-$1.tar.gz" ]; then
++	    /sbin/modprobe --dump-modversions "$module" \
 +	    | sed -r -e 's:^0x0*::' -e 's:$:\t'"$1"':'
++	fi
 +    done \
-+    | sort -t $'\t' -k2 -u
++    | sort -k2 -u
 +}
 +
 +if ! [ -z "$is_kernel_package" -a -e /sbin/modinfo -a -e /sbin/modprobe ]; then
@@ -100,7 +67,7 @@ SUSE specific kernel provides/requires scripts
 +modules=($(grep -E '/lib/modules/.+\.ko$'))
 +if [ ${#modules[@]} -gt 0 ]; then
 +    symset_table=$(mktemp -t ${0##*/}.XXXXX)
-+    /usr/lib/rpm/symset-table | sort -t $'\t' -k 1,1 > $symset_table
++    /usr/lib/rpm/symset-table | sort > $symset_table
 +
 +    join -t $'\t' -j 1 -a 2 $symset_table <(
 +	# Filter out requirements that we fulfill ourself.
@@ -111,14 +78,13 @@ SUSE specific kernel provides/requires scripts
 +	BEGIN { FS = "\t" ; OFS = "\t" }
 +	{ print $3 "/" $2 "/" $1 }
 +	' \
-+	| sort -t $'\t' -k 1,1 -u) \
++	| sort -u) \
 +    | sort -u \
 +    | awk '
 +    { FS = "\t" ; OFS = "\t" }
-+	    { split($1, arr, "/")
-+	      flavor = gensub(/.*-/, "", "", arr[1]) }
-+    NF == 3 { print "kernel(" flavor ":" $2 ") = " $3
++    NF == 3 { print "kernel(" $2 ") = " $3
 +	      next }
-+	    { print "ksym(" flavor ":" arr[3] ") = " arr[2] }
++	    { split($1, arr, "/")
++	      print "ksym(" arr[3] ") = " arr[2] }
 +    '
 +fi
diff --git a/findlang.diff b/findlang.diff
index 51b9ab3..235d1a8 100644
--- a/findlang.diff
+++ b/findlang.diff
@@ -1,20 +1,22 @@
---- ./scripts/find-lang.sh.orig	2010-12-03 12:11:57.000000000 +0000
-+++ ./scripts/find-lang.sh	2011-05-11 14:53:34.000000000 +0000
+SUSE patches for find-lang.
+
+--- ./scripts/find-lang.sh.orig	2004-06-20 18:55:19.000000000 +0000
++++ ./scripts/find-lang.sh	2005-12-19 15:22:52.000000000 +0000
 @@ -28,10 +28,10 @@ the top of the tree containing the files
  PACKAGE_NAME is the %{name} of the package. This should also be
  the basename of the .mo files.  the output is written to
  PACKAGE_NAME.lang unless \$3 is given in which case output is written
 -to \$3.
-+to \$3 (note that \$3 is appended to if given).
++to \$3 (note, that \$3 is appended to if given).
  Additional options:
 -  --with-gnome		find GNOME help files
 -  --with-kde		find KDE help files
-+  --without-gnome	do not find GNOME help files
-+  --without-kde		do not find KDE help files
-   --with-qt		find Qt translation files
-   --with-man		find localized man pages
++  --without-gnome	find GNOME help files
++  --without-kde		find KDE help files
    --all-name		match all package/domain names
-@@ -54,8 +54,8 @@ else NAME=$1
+   --without-mo		not find locales files
+ EOF
+@@ -52,8 +52,8 @@ else NAME=$1
  fi
  shift
  
@@ -22,54 +24,64 @@
 -KDE=#
 +GNOME=
 +KDE=
- QT=#
- MAN=#
  MO=
-@@ -73,6 +73,14 @@ while test $# -gt 0 ; do
- 		KDE=
- 		shift
- 		;;
+ MO_NAME=$NAME.lang
+ ALL_NAME=#
+@@ -61,12 +61,12 @@ NO_ALL_NAME=
+ 
+ while test $# -gt 0 ; do
+     case "${1}" in
+-	--with-gnome )
+-  		GNOME=
 +	--without-gnome )
 +  		GNOME=#
-+		shift
-+		;;
+ 		shift
+ 		;;
+-	--with-kde )
+-		KDE=
 +	--without-kde )
 +		KDE=#
-+		shift
-+		;;
- 	--with-qt )
- 		QT=
  		shift
-@@ -97,33 +105,40 @@ while test $# -gt 0 ; do
+ 		;;
+ 	--without-mo )
+@@ -85,26 +85,43 @@ while test $# -gt 0 ; do
      esac
  done    
  
+-find $TOP_DIR -type f|sed '
++
 +if ! test -s $MO_NAME ; then
-+	echo "%defattr (644, root, root, 755)" > $MO_NAME
++    echo "%defattr (644, root, root, 755)" > $MO_NAME
 +fi
 +
 +MO_NAME_NEW=$MO_NAME.tmp.$$
 +rm -f $MO_NAME_NEW
 +
- find $TOP_DIR -type f -o -type l|sed '
++find $TOP_DIR -type f -o -type l|sed '
  s:'"$TOP_DIR"'::
--'"$ALL_NAME$MO"'s:\(.*/locale/\)\([^/_]\+\)\(.*\.mo$\):%lang(\2) \1\2\3:
--'"$NO_ALL_NAME$MO"'s:\(.*/locale/\)\([^/_]\+\)\(.*/'"$NAME"'\.mo$\):%lang(\2) \1\2\3:
-+'"$ALL_NAME$MO"'s:\(.*/locale/\)\([^/_]\+\)\(.*\.mo$\):%lang(\2) %doc \1\2\3:
-+'"$NO_ALL_NAME$MO"'s:\(.*/locale/\)\([^/_]\+\)\(.*/'"$NAME"'\.mo$\):%lang(\2) %doc \1\2\3:
+ '"$ALL_NAME$MO"'s:\(.*/share/locale/\)\([^/_]\+\)\(.*\.mo$\):%lang(\2) \1\2\3:
+ '"$NO_ALL_NAME$MO"'s:\(.*/share/locale/\)\([^/_]\+\)\(.*/'"$NAME"'\.mo$\):%lang(\2) \1\2\3:
  s:^\([^%].*\)::
  s:%lang(C) ::
 -/^$/d' > $MO_NAME
-+/^$/d' >> $MO_NAME_NEW
++/^ *$/d' >> $MO_NAME_NEW
++
++find $TOP_DIR -type f -o -type l|sed '
++s:'"$TOP_DIR"'::
++/\/share\/locale\//d
++'"$ALL_NAME$MO"'s:\(.*/locale/\)\([^/_]\+\)\([^/]*\)\(.*\)/LC_MESSAGES/.*\.mo$:%lang(\2) %doc \1\2\3\4:
++'"$NO_ALL_NAME$MO"'s:\(.*/locale/\)\([^/_]\+\)\([^/]*\)\(.*\)/LC_MESSAGES/'"$NAME"'\.mo$:%lang(\2) %doc \1\2\3\4:
++s:^\([^%].*\)::
++s:%lang(C) ::
++/^ *$/d' >> $MO_NAME_NEW
  
  find $TOP_DIR -type d|sed '
  s:'"$TOP_DIR"'::
 -'"$NO_ALL_NAME$GNOME"'s:\(.*/gnome/help/'"$NAME"'$\):%dir \1:
 +'"$NO_ALL_NAME$GNOME"'s:\(.*/gnome/help/'"$NAME"'$\):%dir %doc \1:
  '"$NO_ALL_NAME$GNOME"'s:\(.*/gnome/help/'"$NAME"'/[a-zA-Z0-9.\_\-]/.\+\)::
--'"$NO_ALL_NAME$GNOME"'s:\(.*/gnome/help/'"$NAME"'\/\)\([^/_]\+\):%lang(\2) \1\2:
+ '"$NO_ALL_NAME$GNOME"'s:\(.*/gnome/help/'"$NAME"'\/\)\([^/_]\+\):%lang(\2) \1\2:
 -'"$ALL_NAME$GNOME"'s:\(.*/gnome/help/[a-zA-Z0-9.\_\-]\+$\):%dir \1:
-+'"$NO_ALL_NAME$GNOME"'s:\(.*/gnome/help/'"$NAME"'\/\)\([^/_]\+\):%lang(\2) %doc \1\2:
 +'"$ALL_NAME$GNOME"'s:\(.*/gnome/help/[a-zA-Z0-9.\_\-]\+$\):%dir %doc \1:
  '"$ALL_NAME$GNOME"'s:\(.*/gnome/help/[a-zA-Z0-9.\_\-]\+/[a-zA-Z0-9.\_\-]/.\+\)::
 -'"$ALL_NAME$GNOME"'s:\(.*/gnome/help/[a-zA-Z0-9.\_\-]\+\/\)\([^/_]\+\):%lang(\2) \1\2:
@@ -78,77 +90,30 @@
  s:^\([^%].*\)::
  s:%lang(C) ::
 -/^$/d' >> $MO_NAME
-+/^$/d' >> $MO_NAME_NEW
++/^ *$/d' >> $MO_NAME_NEW
  
  find $TOP_DIR -type d|sed '
  s:'"$TOP_DIR"'::
- '"$NO_ALL_NAME$GNOME"'s:\(.*/omf/'"$NAME"'$\):%dir \1:
- '"$ALL_NAME$GNOME"'s:\(.*/omf/[a-zA-Z0-9.\_\-]\+$\):%dir \1:
- s:^\([^%].*\)::
--/^$/d' >> $MO_NAME
-+/^$/d' >> $MO_NAME_NEW
- 
- find $TOP_DIR -type f|sed '
- s:'"$TOP_DIR"'::
-@@ -131,7 +146,7 @@ s:'"$TOP_DIR"'::
- '"$ALL_NAME$GNOME"'s:\(.*/omf/[a-zA-Z0-9.\_\-]\+/[a-zA-Z0-9.\_\-]\+-\([^/.]\+\)\.omf\):%lang(\2) \1:
- s:^[^%].*::
- s:%lang(C) ::
--/^$/d' >> $MO_NAME
-+/^$/d' >> $MO_NAME_NEW
- 
- KDE3_HTML=`kde-config --expandvars --install html 2>/dev/null`
- if [ x"$KDE3_HTML" != x -a -d "$TOP_DIR$KDE3_HTML" ]; then
-@@ -143,7 +158,7 @@ s:'"$TOP_DIR"'::
- '"$ALL_NAME$KDE"'s:\(.*/HTML/\)\([^/_]\+\)\(.*/[a-zA-Z0-9.\_\-]\+$\):%lang(\2) \1\2\3:
+@@ -112,12 +129,20 @@ s:'"$TOP_DIR"'::
+ '"$NO_ALL_NAME$KDE"'s:\(.*/doc/kde/HTML/\)\([^/_]\+\)\(.*/'"$NAME"'\)$:%lang(\2) \1\2\3:
+ '"$ALL_NAME$KDE"'s:\(.*/doc/kde/HTML/\)\([^/_]\+\)\(.*/[a-zA-Z0-9.\_\-]\+/\)::
+ '"$ALL_NAME$KDE"'s:\(.*/doc/kde/HTML/\)\([^/_]\+\)\(.*/[a-zA-Z0-9.\_\-]\+$\):%lang(\2) \1\2\3:
++'"$NO_ALL_NAME$KDE"'s:\(.*/kde.*share/doc/HTML/\)\([^/_]\+\)\(.*/'"$NAME"'/\)::
++'"$NO_ALL_NAME$KDE"'s:\(.*/kde.*share/doc/HTML/\)\([^/_]\+\)\(.*/'"$NAME"'\)$:%lang(\2) \1\2\3:
++'"$ALL_NAME$KDE"'s:\(.*/kde.*share/doc/HTML/\)\([^/_]\+\)\(.*/[a-zA-Z0-9.\_\-]\+/\)::
++'"$ALL_NAME$KDE"'s:\(.*/kde.*share/doc/HTML/\)\([^/_]\+\)\(.*/[a-zA-Z0-9.\_\-]\+$\):%lang(\2) \1\2\3:
  s:^\([^%].*\)::
  s:%lang(C) ::
 -/^$/d' >> $MO_NAME
-+/^$/d' >> $MO_NAME_NEW
- fi
- 
- KDE4_HTML=`kde4-config --expandvars --install html 2>/dev/null`
-@@ -156,7 +171,7 @@ s:'"$TOP_DIR"'::
- '"$ALL_NAME$KDE"'s:\(.*/HTML/\)\([^/_]\+\)\(.*/[a-zA-Z0-9.\_\-]\+$\):%lang(\2) \1\2\3:
- s:^\([^%].*\)::
- s:%lang(C) ::
--/^$/d' >> $MO_NAME
-+/^$/d' >> $MO_NAME_NEW
- fi
- 
- find $TOP_DIR -type f -o -type l|sed '
-@@ -168,7 +183,7 @@ s:'"$TOP_DIR"'::
- '"$ALL_NAME$QT"'s:^\([^%].*/[^/]\+_\([a-zA-Z]\{2\}\)\.qm$\):%lang(\2) \1:
- s:^[^%].*::
- s:%lang(C) ::
--/^$/d' >> $MO_NAME
-+/^$/d' >> $MO_NAME_NEW
- 
- find $TOP_DIR -type d|sed '
- s:'"$TOP_DIR"'::
-@@ -176,17 +191,22 @@ s:'"$TOP_DIR"'::
- '"$ALL_NAME$MAN"'s:\(.*/man/\([^/_]\+\).*/man[a-z0-9]\+$\):%lang(\2) \1*:
- s:^\([^%].*\)::
- s:%lang(C) ::
--/^$/d' >> $MO_NAME
-+/^$/d' >> $MO_NAME_NEW
- 
- find $TOP_DIR -type f -o -type l|sed '
- s:'"$TOP_DIR"'::
- '"$NO_ALL_NAME$MAN"'s:\(.*/man/\([^/_]\+\).*/man[a-z0-9]\+/'"$NAME"'\.[a-z0-9].*\):%lang(\2) \1*:
- s:^\([^%].*\)::
- s:%lang(C) ::
--/^$/d' >> $MO_NAME
-+/^$/d' >> $MO_NAME_NEW
++/^ *$/d' >> $MO_NAME_NEW
  
 -if ! grep -q / $MO_NAME; then
-+if ! grep -q / $MO_NAME_NEW; then
++if ! grep -q / $MO_NAME_NEW ; then
  	echo "No translations found for ${NAME} in ${TOP_DIR}"
 +	rm -f $MO_NAME_NEW
  	exit 1
++else
++	sort -u $MO_NAME_NEW >> $MO_NAME
++	rm -f $MO_NAME_NEW
  fi
-+
-+sort -u $MO_NAME_NEW >> $MO_NAME
-+rm -f $MO_NAME_NEW
-+
  exit 0
diff --git a/findsupplements.diff b/findsupplements.diff
deleted file mode 100644
index 83476d0..0000000
--- a/findsupplements.diff
+++ /dev/null
@@ -1,75 +0,0 @@
-Add support for supplements to the internal dependency
-generator.
-
---- build/rpmfc.c.orig	2011-05-13 16:54:26.000000000 +0000
-+++ build/rpmfc.c	2011-05-13 17:11:20.000000000 +0000
-@@ -54,6 +54,7 @@ struct rpmfc_s {
- 
-     rpmds provides;	/*!< (no. provides) package provides */
-     rpmds requires;	/*!< (no. requires) package requires */
-+    rpmds supplements;	/*!< (no. supplements) package supplements */
- };
- 
- struct rpmfcTokens_s {
-@@ -481,6 +482,14 @@ static int rpmfcHelper(rpmfc fc, unsigne
- 	dsContext = RPMSENSE_FIND_REQUIRES;
- 	tagN = RPMTAG_REQUIRENAME;
- 	break;
-+    case 'S':
-+	if (fc->skipProv)
-+	    return 0;
-+	depname = "supplements";
-+	depsp = &fc->supplements;
-+	dsContext = RPMSENSE_FIND_REQUIRES|RPMSENSE_STRONG|RPMSENSE_MISSINGOK;
-+	tagN = RPMTAG_ENHANCESNAME;
-+	break;
-     }
- 
-     /* If the entire path is filtered out, there's nothing more to do */
-@@ -752,6 +761,7 @@ rpmfc rpmfcFree(rpmfc fc)
- 
- 	fc->provides = rpmdsFree(fc->provides);
- 	fc->requires = rpmdsFree(fc->requires);
-+	fc->supplements = rpmdsFree(fc->supplements);
-     }
-     fc = _free(fc);
-     return NULL;
-@@ -804,6 +814,7 @@ rpmRC rpmfcApply(rpmfc fc)
- 	for (ARGV_t fattr = fc->fattrs[fc->ix]; fattr && *fattr; fattr++) {
- 	    xx += rpmfcHelper(fc, 'P', *fattr);
- 	    xx += rpmfcHelper(fc, 'R', *fattr);
-+	    xx += rpmfcHelper(fc, 'S', *fattr);
- 	}
-     }
- 
-@@ -846,6 +857,11 @@ rpmRC rpmfcApply(rpmfc fc)
- 	    dix = rpmdsFind(fc->requires, ds);
- 	    ds = rpmdsFree(ds);
- 	    break;
-+	case 'S':
-+	    ds = rpmdsSingle(RPMTAG_ENHANCESNAME, N, EVR, Flags);
-+	    dix = rpmdsFind(fc->supplements, ds);
-+	    ds = rpmdsFree(ds);
-+	    break;
- 	}
- 
- /* XXX assertion incorrect while generating -debuginfo deps. */
-@@ -1357,6 +1373,18 @@ rpmRC rpmfcGenerateDepends(const rpmSpec
- 	}
-     }
- 
-+    /* Add Supplements: */
-+    if (fc->supplements != NULL && rpmdsCount(fc->supplements) > 0 && !fc->skipReq) {
-+	rpmds pi = rpmdsInit(fc->supplements);
-+	while (rpmdsNext(pi) >= 0) {
-+	    rpmsenseFlags flags = rpmdsFlags(pi);
-+	
-+	    headerPutString(pkg->header, RPMTAG_ENHANCESNAME, rpmdsN(pi));
-+	    headerPutString(pkg->header, RPMTAG_ENHANCESVERSION, rpmdsEVR(pi));
-+	    headerPutUint32(pkg->header, RPMTAG_ENHANCESFLAGS, &flags, 1);
-+	}
-+    }
-+
-     /* Add dependency dictionary(#dependencies) */
-     if (rpmtdFromArgi(&td, RPMTAG_DEPENDSDICT, fc->ddictx)) {
- 	assert(rpmtdType(&td) == RPM_INT32_TYPE);
diff --git a/firmware.diff b/firmware.diff
deleted file mode 100644
index 13f7bae..0000000
--- a/firmware.diff
+++ /dev/null
@@ -1,37 +0,0 @@
-Index: autodeps/linux.prov
-===================================================================
---- autodeps/linux.prov.orig	2011-06-08 13:28:10.000000000 +0200
-+++ autodeps/linux.prov	2011-06-08 13:28:51.755445342 +0200
-@@ -11,6 +11,7 @@ solist=($(printf "%s\n" "${filelist[@]}"
- pythonlist=
- tcllist=
- monolist=($(printf "%s\n" "${filelist[@]}" | egrep "\\.(exe|dll)\$"))
-+firmwarelist=($(printf "%s\n" "${filelist[@]}" | grep "/lib/firmware/"))
- 
- #
- # --- Alpha does not mark 64bit dependencies
-@@ -59,6 +60,11 @@ done | sort -u
-     printf "%s\n" "${tcllist[@]}" | /usr/lib/rpm/tcl.prov | sort -u
- 
- #
-+# --- firmware files
-+[ -x /usr/lib/rpm/firmware.prov -a -n "$firmwarelist" ] &&
-+     printf "%s\n" "${firmwarelist[@]}" | /usr/lib/rpm/firmware.prov | sort -u
-+
-+#
- # --- Mono exes/dlls
- : ${MONO_PREFIX=/usr}
- if [ -x $MONO_PREFIX/bin/mono -a -n "$monolist" ] ; then
-Index: scripts/firmware.prov
-===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ scripts/firmware.prov	2011-06-08 13:28:33.117204009 +0200
-@@ -0,0 +1,8 @@
-+#!/bin/sh
-+# Add firmware files in /lib/firmware into RPM provides
-+
-+while read instfile ; do
-+  case $instfile in
-+    */lib/firmware/*) test -f "$instfile" && echo "firmware(${instfile##*/lib/firmware/})" ;;
-+  esac
-+done
diff --git a/fontprovides.diff b/fontprovides.diff
deleted file mode 100644
index a22cb85..0000000
--- a/fontprovides.diff
+++ /dev/null
@@ -1,54 +0,0 @@
-Index: autodeps/linux.prov
-===================================================================
---- autodeps/linux.prov.orig	2011-06-08 13:37:46.951974468 +0200
-+++ autodeps/linux.prov	2011-06-08 13:37:46.967972960 +0200
-@@ -15,6 +15,8 @@ pythonlist=($(printf "%s\n" "${filelist[
- tcllist=
- monolist=($(printf "%s\n" "${filelist[@]}" | egrep "\\.(exe|dll)\$"))
- firmwarelist=($(printf "%s\n" "${filelist[@]}" | grep "/lib/firmware/"))
-+pkgconfiglist=($(printf "%s\n" "${filelist[@]}" | egrep '\.pc$'))
-+fontlist=($(printf "%s\n" "${filelist[@]}" | egrep -i "/usr/share/fonts/.*\.(ttf|otf|pfa)$"))
- 
- #
- # --- Alpha does not mark 64bit dependencies
-@@ -80,6 +82,16 @@ if [ -x $MONO_PREFIX/bin/mono -a -n "$mo
- fi
- 
- #
-+# --- pkgconfig provides
-+[ -x /usr/lib/rpm/pkgconfigdeps.sh -a -n "$pkgconfiglist" ] &&
-+     printf "%s\n" "${pkgconfiglist[@]}" | /usr/lib/rpm/pkgconfigdeps.sh -P | sort -u
-+
-+#
-+# --- font provides
-+[ -x /usr/lib/rpm/fontconfig.prov -a -n "$fontlist" ] &&
-+     printf "%s\n" "${fontlist[@]}" | /usr/lib/rpm/fontconfig.prov | sort -u
-+
-+#
- # --- Kernel module exported symbols
- [ -x /usr/lib/rpm/find-provides.ksyms ] &&
-     printf "%s\n" "${filelist[@]}" | /usr/lib/rpm/find-provides.ksyms "$@"
-Index: autodeps/linux.req
-===================================================================
---- autodeps/linux.req.orig	2011-06-08 13:37:46.951974468 +0200
-+++ autodeps/linux.req	2011-06-08 13:37:46.968972865 +0200
-@@ -34,6 +34,7 @@ perllist=()
- pythonlist=($(printf "%s\n" "${filelist[@]}" | egrep '/usr/lib[^/]*/python.\..'))
- tcllist=()
- monolist=($(printf "%s\n" "${filelist[@]}" | egrep "\\.(exe|dll)(\\.config)?\$"))
-+pkgconfiglist=($(printf "%s\n" "${filelist[@]}" | egrep '\.pc$'))
- 
- #
- # --- Alpha does not mark 64bit dependencies
-@@ -143,6 +144,11 @@ if [ -x $MONO_PREFIX/bin/mono -a -n "$mo
- fi
- 
- #
-+# --- pkgconfig requires
-+[ -x /usr/lib/rpm/pkgconfigdeps.sh -a -n "$pkgconfiglist" ] &&
-+     printf "%s\n" "${pkgconfiglist[@]}" | /usr/lib/rpm/pkgconfigdeps.sh -R | sort -u
-+
-+#
- # --- Kernel module imported symbols
- [ -x ${0%/*}/find-requires.ksyms ] &&
-     printf "%s\n" "${filelist[@]}" | ${0%/*}/find-requires.ksyms "$@"
diff --git a/forkfailed.diff b/forkfailed.diff
new file mode 100644
index 0000000..f5af4d0
--- /dev/null
+++ b/forkfailed.diff
@@ -0,0 +1,40 @@
+Print error message if scriptlet fork fails instead if silently
+dying. [#152779]
+
+Index: lib/psm.c
+===================================================================
+--- lib/psm.c.orig
++++ lib/psm.c
+@@ -910,6 +910,12 @@ static rpmRC runScript(rpmpsm psm, Heade
+     }
+     /*@=branchstate@*/
+ 
++    if (psm->sq.child == (pid_t)-1) {
++	rpmError(RPMERR_FORK, _("Couldn't fork %s: %s\n"), sln, strerror(errno));
++	rc = RPMRC_FAIL;
++	goto exit;
++    }
++
+     (void) psmWait(psm);
+ 
+   /* XXX filter order dependent multilib "other" arch helper error. */
+@@ -934,6 +940,7 @@ static rpmRC runScript(rpmpsm psm, Heade
+     }
+   }
+ 
++exit:
+     if (freePrefixes) prefixes = hfd(prefixes, ipt);
+ 
+     xx = Fclose(out);	/* XXX dup'd STDOUT_FILENO */
+Index: rpmio/rpmsq.c
+===================================================================
+--- rpmio/rpmsq.c.orig
++++ rpmio/rpmsq.c
+@@ -407,6 +407,7 @@ fprintf(stderr, "    Enable(%p): %p\n", 
+ 
+     pid = fork();
+     if (pid < (pid_t) 0) {		/* fork failed.  */
++	sq->child = (pid_t)-1;
+ /*@-bounds@*/
+ 	xx = close(sq->pipes[0]);
+ 	xx = close(sq->pipes[1]);
diff --git a/getcwdresult.diff b/getcwdresult.diff
new file mode 100644
index 0000000..44b246f
--- /dev/null
+++ b/getcwdresult.diff
@@ -0,0 +1,30 @@
+Check getcwd return value, abort if rpm cannot determine current
+directory.
+
+--- ./build.c.orig	2004-10-17 19:00:10.000000000 +0000
++++ ./build.c	2005-12-19 17:52:25.000000000 +0000
+@@ -206,7 +211,10 @@ static int buildForTarget(rpmts ts, cons
+ 	   directory for this run */
+ 
+ 	if (*arg != '/') {
+-	    (void)getcwd(buf, BUFSIZ);
++	    if (!getcwd(buf, BUFSIZ)) {
++		rpmError(RPMERR_STAT, "getcwd failed: %m\n");
++		return 1;
++	    }
+ 	    strcat(buf, "/");
+ 	    strcat(buf, arg);
+ 	} else 
+@@ -225,7 +233,11 @@ static int buildForTarget(rpmts ts, cons
+     specut = urlPath(specURL, &specFile);
+     if (*specFile != '/') {
+ 	char *s = alloca(BUFSIZ);
+-	(void)getcwd(s, BUFSIZ);
++	if (!getcwd(s, BUFSIZ)) {
++	    rpmError(RPMERR_STAT, "getcwd failed: %m\n");
++	    rc = 1;
++	    goto exit;
++	}
+ 	strcat(s, "/");
+ 	strcat(s, arg);
+ 	specURL = s;
diff --git a/ghost.diff b/ghost.diff
new file mode 100644
index 0000000..23bc798
--- /dev/null
+++ b/ghost.diff
@@ -0,0 +1,17 @@
+Fix --noghost query option. rh#103207
+
+Already in rpm-4.4.7
+
+Index: lib/query.c
+===================================================================
+--- lib/query.c.orig
++++ lib/query.c
+@@ -222,7 +222,7 @@ int showQueryPackage(QVA_t qva, rpmts ts
+ 	    continue;
+ 
+ 	/* If not querying %ghost, skip ghost files. */
+-	if (!(qva->qva_fflags & RPMFILE_GHOST) && (fflags & RPMFILE_GHOST))
++	if ((qva->qva_fflags & RPMFILE_GHOST) && (fflags & RPMFILE_GHOST))
+ 	    continue;
+ 
+ /*@-boundswrite@*/
diff --git a/globlstat.diff b/globlstat.diff
new file mode 100644
index 0000000..e587fdd
--- /dev/null
+++ b/globlstat.diff
@@ -0,0 +1,18 @@
+Always use lstat in glob call to work around a change in glibc's
+glob code. [#129434], rh#126460
+
+rpm-4.4.7 comes with its own glob implementation, so it doesn't
+need this patch (but it also doesn't hurt).
+
+--- ./rpmio/rpmrpc.c.orig	2005-12-16 15:01:26.000000000 +0000
++++ ./rpmio/rpmrpc.c	2006-02-13 18:55:39.000000000 +0000
+@@ -1450,7 +1462,8 @@ fprintf(stderr, "*** Glob(%s,0x%x,%p,%p)
+ 	pglob->gl_readdir = Readdir;
+ 	pglob->gl_opendir = Opendir;
+ 	pglob->gl_lstat = Lstat;
+-	pglob->gl_stat = Stat;
++	/* always use lstat to glob symlinks */
++	pglob->gl_stat = Lstat;
+ /*@=type@*/
+ 	flags |= GLOB_ALTDIRFUNC;
+ 	flags &= ~GLOB_TILDE;
diff --git a/globoffbyone.diff b/globoffbyone.diff
new file mode 100644
index 0000000..3fff8cf
--- /dev/null
+++ b/globoffbyone.diff
@@ -0,0 +1,13 @@
+Fix off-by-one error in glob call.
+
+--- ./rpmio/rpmrpc.c.orig	2005-12-16 15:01:26.000000000 +0000
++++ ./rpmio/rpmrpc.c	2006-02-13 18:55:39.000000000 +0000
+@@ -1403,7 +1415,7 @@ int Glob_pattern_p (const char * pattern
+ 	case '*':
+ 	    return (1);
+ 	case '\\':
+-	    if (quote && p[1] != '\0')
++	    if (quote && *p != '\0')
+ 		p++;
+ 	    continue;
+ 
diff --git a/headeradddb.diff b/headeradddb.diff
deleted file mode 100644
index af197df..0000000
--- a/headeradddb.diff
+++ /dev/null
@@ -1,55 +0,0 @@
-Add rpmtsHeaderAddDB and rpmtsHeaderRemoveDB so that
-convertdb1 will build again.
-
---- lib/rpmts.c.orig	2011-05-12 13:21:03.000000000 +0000
-+++ lib/rpmts.c	2011-05-12 13:26:25.000000000 +0000
-@@ -159,6 +159,24 @@ int rpmtsVerifyDB(rpmts ts)
-     return rc;
- }
- 
-+int rpmtsHeaderAddDB(rpmts ts, Header h)
-+{
-+    if (rpmtsOpenDB(ts, (O_RDWR|O_CREAT)))
-+	return RPMRC_FAIL;
-+    if (rpmdbAdd(rpmtsGetRdb(ts), h) != 0)
-+	return RPMRC_FAIL;
-+    return RPMRC_OK;
-+}
-+
-+int rpmtsHeaderRemoveDB(rpmts ts, unsigned int hdrNum)
-+{
-+    if (rpmtsOpenDB(ts, (O_RDWR|O_CREAT)))
-+	return RPMRC_FAIL;
-+    if (rpmdbRemove(rpmtsGetRdb(ts), hdrNum) != 0)
-+	return RPMRC_FAIL;
-+    return RPMRC_OK;
-+}
-+
- /* keyp might no be defined. */
- rpmdbMatchIterator rpmtsInitIterator(const rpmts ts, rpmDbiTagVal rpmtag,
- 			const void * keyp, size_t keylen)
---- lib/rpmts.h.orig	2011-05-12 13:21:11.000000000 +0000
-+++ lib/rpmts.h	2011-05-12 13:28:32.000000000 +0000
-@@ -264,6 +264,22 @@ int rpmtsRebuildDB(rpmts ts);
- int rpmtsVerifyDB(rpmts ts);
- 
- /** \ingroup rpmts
-+ * Add a header to the database used by the transaction.
-+ * @param ts            transaction set 
-+ * @param h             header to add
-+ * @return              0 on success
-+ */
-+int rpmtsHeaderAddDB(rpmts ts, Header h);
-+
-+/** \ingroup rpmts
-+ * Remove a header from the database used by the transaction.
-+ * @param ts            transaction set 
-+ * @param hdrNum        index of header to remove
-+ * @return              0 on success
-+ */
-+int rpmtsHeaderRemoveDB(rpmts ts, unsigned int hdrNum);
-+
-+/** \ingroup rpmts
-  * Return transaction database iterator.
-  * @param ts		transaction set
-  * @param rpmtag	database index tag
diff --git a/initdbret.diff b/initdbret.diff
new file mode 100644
index 0000000..ac42891
--- /dev/null
+++ b/initdbret.diff
@@ -0,0 +1,25 @@
+Check rpmtsInitDB return value. Also patches rpm.c, which
+actually is not used anymore.
+
+--- ./rpm.c.orig	2005-12-15 11:59:33.000000000 +0000
++++ ./rpm.c	2005-12-15 11:59:53.000000000 +0000
+@@ -1119,7 +1119,7 @@ int main(int argc, const char ** argv)
+ 	break;
+ 
+       case MODE_INITDB:
+-	rpmdbInit(rootdir, 0644);
++	ec = rpmdbInit(rootdir, 0644);
+ 	break;
+ 
+       case MODE_CHECKSIG:
+--- ./rpmqv.c.orig	2005-12-15 13:46:45.000000000 +0000
++++ ./rpmqv.c	2005-12-15 13:47:37.000000000 +0000
+@@ -624,7 +624,7 @@ int main(int argc, const char ** argv)
+     switch (bigMode) {
+ #ifdef	IAM_RPMDB
+     case MODE_INITDB:
+-	(void) rpmtsInitDB(ts, 0644);
++	ec = rpmtsInitDB(ts, 0644);
+ 	break;
+ 
+     case MODE_REBUILDDB:
diff --git a/initscriptsprov.diff b/initscriptsprov.diff
deleted file mode 100644
index 8a5c2f0..0000000
--- a/initscriptsprov.diff
+++ /dev/null
@@ -1,50 +0,0 @@
---- ./autodeps/linux.prov.orig	2011-05-11 16:45:13.000000000 +0000
-+++ ./autodeps/linux.prov	2011-05-11 16:51:10.000000000 +0000
-@@ -107,4 +107,9 @@ fi
- [ -x /usr/lib/rpm/gstreamer-provides ] &&
-     printf "%s\n" "${filelist[@]}" | /usr/lib/rpm/gstreamer-provides | sort -u
- 
-+#
-+# --- Provides of sysvinit scripts
-+[ -x /usr/lib/rpm/sysvinitdeps.sh ] &&
-+    printf "%s\n" "${filelist[@]}" | /usr/lib/rpm/sysvinitdeps.sh -P | sort -u
-+
- exit 0
---- ./scripts/Makefile.am.orig	2011-05-11 14:46:38.000000000 +0000
-+++ ./scripts/Makefile.am	2011-05-11 16:52:10.000000000 +0000
-@@ -22,6 +22,7 @@ EXTRA_DIST = \
- 	ocaml-find-requires.sh ocaml-find-provides.sh \
- 	pkgconfigdeps.sh libtooldeps.sh \
- 	fontconfig.prov desktop-file.prov script.req \
-+	sysvinitdeps.sh \
- 	macros.perl macros.php macros.python
- 
- rpmconfig_SCRIPTS = \
-@@ -38,6 +39,7 @@ rpmconfig_SCRIPTS = \
- 	pkgconfigdeps.sh libtooldeps.sh \
- 	ocaml-find-requires.sh ocaml-find-provides.sh \
- 	fontconfig.prov desktop-file.prov script.req \
-+	sysvinitdeps.sh \
- 	rpmdb_loadcvt rpm2cpio.sh tcl.req tgpg 
- 
- rpmconfig_DATA = \
---- ./scripts/sysvinitdeps.sh.orig	2011-05-11 16:51:10.000000000 +0000
-+++ ./scripts/sysvinitdeps.sh	2011-05-11 16:54:33.000000000 +0000
-@@ -0,0 +1,17 @@
-+#!/bin/sh
-+
-+[ "$1" = '-P' -o "$1" = '--provides' ] || {
-+    cat > /dev/null
-+    exit 0
-+}
-+
-+while read file; do
-+	case $file in
-+          */etc/init.d/*)
-+		provs=`grep '^# *Provides:' $file | sed 's,^.*:,,'`
-+		for p in $provs; do
-+			echo "sysvinit($p)"
-+		done
-+	  ;;
-+        esac
-+done
diff --git a/langnoc.diff b/langnoc.diff
deleted file mode 100644
index ab99287..0000000
--- a/langnoc.diff
+++ /dev/null
@@ -1,127 +0,0 @@
---- ./macros.in.orig	2011-05-11 15:59:44.000000000 +0000
-+++ ./macros.in	2011-05-11 16:45:30.000000000 +0000
-@@ -1247,6 +1247,7 @@ EOF
- # %files -f %{name}.lang
- #
- %find_lang	%{_rpmconfigdir}/find-lang.sh %{buildroot}
-+%no_lang_C	--without-C
- 
- # Commands + opts to use for retrieving remote files
- # Proxy opts can be set through --httpproxy/--httpport popt aliases,
---- ./scripts/find-lang.sh.orig	2011-05-11 14:53:34.000000000 +0000
-+++ ./scripts/find-lang.sh	2011-05-11 16:45:30.000000000 +0000
-@@ -62,6 +62,8 @@ MO=
- MO_NAME=$NAME.lang
- ALL_NAME=#
- NO_ALL_NAME=
-+ONLY_C=#
-+NO_C=#
- 
- while test $# -gt 0 ; do
-     case "${1}" in
-@@ -98,6 +100,14 @@ while test $# -gt 0 ; do
- 		NO_ALL_NAME=#
- 		shift
- 		;;
-+	--with-only-C )
-+		ONLY_C=
-+		shift
-+		;;
-+	--without-C )
-+		NO_C=
-+		shift
-+		;;
- 	* )
- 		MO_NAME=${1}
- 		shift
-@@ -117,27 +127,32 @@ s:'"$TOP_DIR"'::
- '"$ALL_NAME$MO"'s:\(.*/locale/\)\([^/_]\+\)\(.*\.mo$\):%lang(\2) %doc \1\2\3:
- '"$NO_ALL_NAME$MO"'s:\(.*/locale/\)\([^/_]\+\)\(.*/'"$NAME"'\.mo$\):%lang(\2) %doc \1\2\3:
- s:^\([^%].*\)::
-+'"$ONLY_C"'/%lang(C)/!d
-+'"$NO_C"'/%lang(C)/d
- s:%lang(C) ::
- /^$/d' >> $MO_NAME_NEW
- 
- find $TOP_DIR -type d|sed '
- s:'"$TOP_DIR"'::
--'"$NO_ALL_NAME$GNOME"'s:\(.*/gnome/help/'"$NAME"'$\):%dir %doc \1:
-+'"$NO_ALL_NAME$GNOME"'s:\(.*/gnome/help/'"$NAME"'$\):%lang(C) %dir %doc \1:
- '"$NO_ALL_NAME$GNOME"'s:\(.*/gnome/help/'"$NAME"'/[a-zA-Z0-9.\_\-]/.\+\)::
- '"$NO_ALL_NAME$GNOME"'s:\(.*/gnome/help/'"$NAME"'\/\)\([^/_]\+\):%lang(\2) %doc \1\2:
--'"$ALL_NAME$GNOME"'s:\(.*/gnome/help/[a-zA-Z0-9.\_\-]\+$\):%dir %doc \1:
-+'"$ALL_NAME$GNOME"'s:\(.*/gnome/help/[a-zA-Z0-9.\_\-]\+$\):%lang(C) %dir %doc \1:
- '"$ALL_NAME$GNOME"'s:\(.*/gnome/help/[a-zA-Z0-9.\_\-]\+/[a-zA-Z0-9.\_\-]/.\+\)::
- '"$ALL_NAME$GNOME"'s:\(.*/gnome/help/[a-zA-Z0-9.\_\-]\+\/\)\([^/_]\+\):%lang(\2) %doc \1\2:
- s:%lang(.*) .*/gnome/help/[a-zA-Z0-9.\_\-]\+/[a-zA-Z0-9.\_\-]\+/.*::
- s:^\([^%].*\)::
-+'"$ONLY_C"'/%lang(C)/!d
-+'"$NO_C"'/%lang(C)/d
- s:%lang(C) ::
- /^$/d' >> $MO_NAME_NEW
- 
- find $TOP_DIR -type d|sed '
- s:'"$TOP_DIR"'::
--'"$NO_ALL_NAME$GNOME"'s:\(.*/omf/'"$NAME"'$\):%dir \1:
--'"$ALL_NAME$GNOME"'s:\(.*/omf/[a-zA-Z0-9.\_\-]\+$\):%dir \1:
-+'"$NO_ALL_NAME$GNOME"'s:\(.*/omf/'"$NAME"'$\):%lang(C) %dir \1:
-+'"$ALL_NAME$GNOME"'s:\(.*/omf/[a-zA-Z0-9.\_\-]\+$\):%lang(C) %dir \1:
- s:^\([^%].*\)::
-+s:%lang(C) ::
- /^$/d' >> $MO_NAME_NEW
- 
- find $TOP_DIR -type f|sed '
-@@ -145,6 +160,8 @@ s:'"$TOP_DIR"'::
- '"$NO_ALL_NAME$GNOME"'s:\(.*/omf/'"$NAME"'/'"$NAME"'-\([^/.]\+\)\.omf\):%lang(\2) \1:
- '"$ALL_NAME$GNOME"'s:\(.*/omf/[a-zA-Z0-9.\_\-]\+/[a-zA-Z0-9.\_\-]\+-\([^/.]\+\)\.omf\):%lang(\2) \1:
- s:^[^%].*::
-+'"$ONLY_C"'/%lang(C)/!d
-+'"$NO_C"'/%lang(C)/d
- s:%lang(C) ::
- /^$/d' >> $MO_NAME_NEW
- 
-@@ -157,6 +174,8 @@ s:'"$TOP_DIR"'::
- '"$ALL_NAME$KDE"'s:\(.*/HTML/\)\([^/_]\+\)\(.*/[a-zA-Z0-9.\_\-]\+/\)::
- '"$ALL_NAME$KDE"'s:\(.*/HTML/\)\([^/_]\+\)\(.*/[a-zA-Z0-9.\_\-]\+$\):%lang(\2) \1\2\3:
- s:^\([^%].*\)::
-+'"$ONLY_C"'/%lang(C)/!d
-+'"$NO_C"'/%lang(C)/d
- s:%lang(C) ::
- /^$/d' >> $MO_NAME_NEW
- fi
-@@ -170,6 +189,8 @@ s:'"$TOP_DIR"'::
- '"$ALL_NAME$KDE"'s:\(.*/HTML/\)\([^/_]\+\)\(.*/[a-zA-Z0-9.\_\-]\+/\)::
- '"$ALL_NAME$KDE"'s:\(.*/HTML/\)\([^/_]\+\)\(.*/[a-zA-Z0-9.\_\-]\+$\):%lang(\2) \1\2\3:
- s:^\([^%].*\)::
-+'"$ONLY_C"'/%lang(C)/!d
-+'"$NO_C"'/%lang(C)/d
- s:%lang(C) ::
- /^$/d' >> $MO_NAME_NEW
- fi
-@@ -182,6 +203,8 @@ s:'"$TOP_DIR"'::
- '"$ALL_NAME$QT"'s:^\([^%].*/[^/]\+_\([a-zA-Z]\{2\}_[a-zA-Z]\{2\}\)\.qm$\):%lang(\2) \1:
- '"$ALL_NAME$QT"'s:^\([^%].*/[^/]\+_\([a-zA-Z]\{2\}\)\.qm$\):%lang(\2) \1:
- s:^[^%].*::
-+'"$ONLY_C"'/%lang(C)/!d
-+'"$NO_C"'/%lang(C)/d
- s:%lang(C) ::
- /^$/d' >> $MO_NAME_NEW
- 
-@@ -190,6 +213,8 @@ s:'"$TOP_DIR"'::
- '"$ALL_NAME$MAN"'s:\(.*/man/\([^/_]\+\).*/man[a-z0-9]\+/\)::
- '"$ALL_NAME$MAN"'s:\(.*/man/\([^/_]\+\).*/man[a-z0-9]\+$\):%lang(\2) \1*:
- s:^\([^%].*\)::
-+'"$ONLY_C"'/%lang(C)/!d
-+'"$NO_C"'/%lang(C)/d
- s:%lang(C) ::
- /^$/d' >> $MO_NAME_NEW
- 
-@@ -197,6 +222,8 @@ find $TOP_DIR -type f -o -type l|sed '
- s:'"$TOP_DIR"'::
- '"$NO_ALL_NAME$MAN"'s:\(.*/man/\([^/_]\+\).*/man[a-z0-9]\+/'"$NAME"'\.[a-z0-9].*\):%lang(\2) \1*:
- s:^\([^%].*\)::
-+'"$ONLY_C"'/%lang(C)/!d
-+'"$NO_C"'/%lang(C)/d
- s:%lang(C) ::
- /^$/d' >> $MO_NAME_NEW
- 
diff --git a/lazystatfs.diff b/lazystatfs.diff
deleted file mode 100644
index 5869a23..0000000
--- a/lazystatfs.diff
+++ /dev/null
@@ -1,50 +0,0 @@
-Prefer sys/vfs.h, as statvfs stats all filesystems again
---- ./configure.ac.orig	2011-05-12 12:36:32.000000000 +0000
-+++ ./configure.ac	2011-05-12 12:36:42.000000000 +0000
-@@ -402,25 +402,25 @@ dnl
- found_struct_statfs=no
- 
- if test X$found_struct_statfs = Xno ; then
--dnl Solaris 2.6+ wants to use statvfs
-+dnl first try including sys/vfs.h
- AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
- #ifdef HAVE_SYS_TYPES_H
- #include <sys/types.h>
- #endif
--#include <sys/statvfs.h> ]], [[struct statvfs sfs;]])],[AC_MSG_RESULT(in sys/statvfs.h)
--	AC_DEFINE(STATFS_IN_SYS_STATVFS, 1,
--		[statfs in <sys/statvfs.h> (for solaris 2.6+ systems)])
-+#include <sys/vfs.h> ]], [[struct statfs sfs;]])],[AC_MSG_RESULT(in sys/vfs.h)
-+	AC_DEFINE(STATFS_IN_SYS_VFS, 1, [statfs in <sys/vfs.h> (for linux systems)])
- 	found_struct_statfs=yes],[])
- fi
- 
- if test X$found_struct_statfs = Xno ; then
--dnl first try including sys/vfs.h
-+dnl Solaris 2.6+ wants to use statvfs
- AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
- #ifdef HAVE_SYS_TYPES_H
- #include <sys/types.h>
- #endif
--#include <sys/vfs.h> ]], [[struct statfs sfs;]])],[AC_MSG_RESULT(in sys/vfs.h)
--	AC_DEFINE(STATFS_IN_SYS_VFS, 1, [statfs in <sys/vfs.h> (for linux systems)])
-+#include <sys/statvfs.h> ]], [[struct statvfs sfs;]])],[AC_MSG_RESULT(in sys/statvfs.h)
-+	AC_DEFINE(STATFS_IN_SYS_STATVFS, 1,
-+		[statfs in <sys/statvfs.h> (for solaris 2.6+ systems)])
- 	found_struct_statfs=yes],[])
- fi
- 
---- ./lib/transaction.c.orig	2011-05-12 12:36:55.000000000 +0000
-+++ ./lib/transaction.c	2011-05-12 12:38:03.000000000 +0000
-@@ -114,7 +114,11 @@ static rpmDiskSpaceInfo rpmtsCreateDSI(c
-     dsi->bneeded = 0;
-     dsi->ineeded = 0;
- #ifdef STATFS_HAS_F_BAVAIL
-+# ifdef ST_RDONLY
-     dsi->bavail = (sfb.f_flag & ST_RDONLY) ? 0 : sfb.f_bavail;
-+# else
-+    dsi->bavail = sfb.f_bavail;
-+# endif
- #else
- /* FIXME: the statfs struct doesn't have a member to tell how many blocks are
-  * available for non-superusers.  f_blocks - f_bfree is probably too big, but
diff --git a/legacyprereq.diff b/legacyprereq.diff
new file mode 100644
index 0000000..2f7af00
--- /dev/null
+++ b/legacyprereq.diff
@@ -0,0 +1,16 @@
+Keep RPMSENSE_PREREQ definition to be compatible with older
+versions. Maybe not needed.
+
+diff -ur ./lib/rpmlib.h ../rpm-4.4.2.orig/lib/rpmlib.h
+--- ./lib/rpmlib.h	2006-09-21 21:07:18.000000000 +0200
++++ ../rpm-4.4.2.orig/lib/rpmlib.h	2006-09-21 20:59:00.000000000 +0200
+@@ -517,8 +517,7 @@
+     RPMSENSE_EQUAL	= (1 << 3),
+     RPMSENSE_PROVIDES	= (1 << 4), /* only used internally by builds */
+     RPMSENSE_CONFLICTS	= (1 << 5), /* only used internally by builds */
+-	/* bit 6 used to be RPMSENSE_PREREQ */
+-#define	RPMSENSE_PREREQ	RPMSENSE_ANY
++    RPMSENSE_PREREQ	= (1 << 6), /*!< @todo Legacy. */
+     RPMSENSE_OBSOLETES	= (1 << 7), /* only used internally by builds */
+     RPMSENSE_INTERP	= (1 << 8),	/*!< Interpreter used by scriptlet. */
+     RPMSENSE_SCRIPT_PRE	= ((1 << 9)|RPMSENSE_PREREQ), /*!< %pre dependency. */
diff --git a/localetag.diff b/localetag.diff
index c21a9cb..3a2e0fa 100644
--- a/localetag.diff
+++ b/localetag.diff
@@ -1,21 +1,23 @@
-Convert output to the current locale. Assumes utf8 input if the
-decoding works, otherwise iso-8859-1.
+Convert changelog and i18n header elements to current locale.
+[#43347], rh#140050
 
---- ./lib/tagexts.c.orig	2010-12-03 12:11:57.000000000 +0000
-+++ ./lib/tagexts.c	2011-05-10 16:05:30.000000000 +0000
+Already in rpm-4.4.7
+
+--- ./lib/formats.c.orig	2005-01-26 04:46:54.000000000 +0000
++++ ./lib/formats.c	2006-03-17 15:27:06.000000000 +0000
 @@ -2,6 +2,7 @@
   * \file lib/formats.c
   */
  
 +#include <wchar.h>
  #include "system.h"
+ #include "rpmio_internal.h"
+ #include <rpmlib.h>
+@@ -18,6 +19,114 @@
+ /*@access pgpDig @*/
+ /*@access pgpDigParams @*/
  
- #include <rpm/rpmtypes.h>
-@@ -150,6 +151,114 @@ exit:
-     return rc;
- }
- 
-+static char * strtolocale(char *str)
++static const char * strtolocale(const char *str)
 +{
 +    wchar_t *wstr, *wp;
 +    const unsigned char *cp;
@@ -97,7 +99,7 @@ decoding works, otherwise iso-8859-1.
 +	wstr = _free(wstr);
 +	return str;
 +    }
-+    str = _free((char *)str);
++    str = _free(str);
 +    memset(&ps, 0, sizeof(ps));
 +    ccl = cca = 0;
 +    for (wp = wstr; ; wp++) {
@@ -120,77 +122,104 @@ decoding works, otherwise iso-8859-1.
 +	}
 +    }
 +    wstr = _free(wstr);
-+    return (char *)cc;
++    return (const char *)cc;
 +}
 +
  /**
-  * Retrieve trigger info.
-  * @param h		header
-@@ -435,10 +544,41 @@ static int i18nTag(Header h, rpmTag tag,
- #endif
+  * Identify type of trigger.
+  * @param type		tag type
+@@ -1077,6 +1220,7 @@ static int i18nTag(Header h, int_32 tag,
  
-     rc = headerGet(h, tag, td, HEADERGET_ALLOC);
-+    if (rc && td->data) {
-+	td->data = strtolocale(td->data);
-+    }
-     return rc;
+     if (rc && (*data) != NULL) {
+ 	*data = xstrdup(*data);
++	*data = strtolocale(*data);
+ 	*freeData = 1;
+ 	return 0;
+     }
+@@ -1088,6 +1232,56 @@ static int i18nTag(Header h, int_32 tag,
  }
  
  /**
 + * Retrieve text and convert to locale.
 + */
-+static int localeTag(Header h, rpmTag tag, rpmtd td)
++static int localeTag(Header h, int_32 tag, /*@out@*/ rpmTagType * type,
++		/*@out@*/ const void ** data, /*@out@*/ int_32 * count,
++		/*@out@*/ int * freeData)
 +{
-+    int rc;
-+    rc = headerGet(h, tag, td, HEADERGET_ALLOC);
-+    if (!rc)
-+	return 0;
-+    if (td->type == RPM_STRING_TYPE) {
-+	td->data = strtolocale(td->data);
-+	td->count = 1;
-+    } else if (td->type == RPM_STRING_ARRAY_TYPE) {
-+	char **arr;
-+	int i;
-+	arr = xmalloc(td->count * sizeof(*arr));
-+	for (i = 0; i < td->count; i++) {
-+	    arr[i] = xstrdup(((char **)td->data)[i]);
-+	    arr[i] = strtolocale(arr[i]);
-+	}
-+	_free(td->data);
-+	td->data = arr;
-+	td->flags = RPMTD_ALLOCED | RPMTD_PTR_ALLOCED;
++    HGE_t hge = (HGE_t)headerGetEntryMinMemory;
++    rpmTagType t;
++    char **d, **d2, *dp;
++    int rc, i, l;
++
++    rc = hge(h, tag, &t, (void **)&d, count);
++    if (!rc || d == NULL || *count == 0) {
++	*freeData = 0;
++	*data = NULL;
++	*count = 0;
++	return 1;
 +    }
-+    return rc; 
++    if (type)
++	*type = t;
++    if (t == RPM_STRING_TYPE) {
++	d = (char **)xstrdup((char *)d);
++	d = (char **)strtolocale((char *)d);
++	*freeData = 1;
++    } else if (t == RPM_STRING_ARRAY_TYPE) {
++	l = 0;
++        for (i = 0; i < *count; i++) {
++	    d[i] = xstrdup(d[i]);
++	    d[i] = (char *)strtolocale(d[i]);
++	    l += strlen(d[i]) + 1;
++	}
++	d2 = xmalloc(*count * sizeof(char *) + l);
++	dp = (char *)(d2 + *count);
++        for (i = 0; i < *count; i++) {
++	    d2[i] = dp;
++	    strcpy(dp, d[i]);
++	    dp += strlen(dp) + 1;
++	    d[i] = _free(d[i]);
++	}
++	d = _free(d);
++	d = d2;
++	*freeData = 1;
++    } else
++	*freeData = 0;
++    *data = (void **)d;
++    return 0;
 +}
 +
 +
 +/**
   * Retrieve summary text.
   * @param h		header
-  * @retval td		tag data container
-@@ -460,6 +600,16 @@ static int descriptionTag(Header h, rpmt
-     return i18nTag(h, RPMTAG_DESCRIPTION, td, hgflags);
+  * @retval *type	tag type
+@@ -1127,6 +1321,20 @@ static int descriptionTag(Header h, /*@o
+     return i18nTag(h, RPMTAG_DESCRIPTION, type, data, count, freeData);
  }
  
-+static int changelognameTag(Header h, rpmtd td)
++static int changelognameTag(Header h, /*@out@*/ rpmTagType * type,
++		/*@out@*/ const void ** data, /*@out@*/ int_32 * count,
++		/*@out@*/ int * freeData)
 +{
-+    return localeTag(h, RPMTAG_CHANGELOGNAME, td);
++    return localeTag(h, RPMTAG_CHANGELOGNAME, type, data, count, freeData);
 +}
 +
-+static int changelogtextTag(Header h, rpmtd td)
++static int changelogtextTag(Header h, /*@out@*/ rpmTagType * type,
++		/*@out@*/ const void ** data, /*@out@*/ int_32 * count,
++		/*@out@*/ int * freeData)
 +{
-+    return localeTag(h, RPMTAG_CHANGELOGTEXT, td);
++    return localeTag(h, RPMTAG_CHANGELOGTEXT, type, data, count, freeData);
 +}
 +
  /**
   * Retrieve group text.
   * @param h		header
-@@ -677,6 +827,8 @@ static const struct headerTagFunc_s rpmH
-     { RPMTAG_LONGARCHIVESIZE,	longarchivesizeTag },
-     { RPMTAG_LONGSIZE,		longsizeTag },
-     { RPMTAG_LONGSIGSIZE,	longsigsizeTag },
-+    { RPMTAG_CHANGELOGNAME,     changelognameTag },
-+    { RPMTAG_CHANGELOGTEXT,     changelogtextTag },
-     { RPMTAG_DBINSTANCE,	dbinstanceTag },
-     { RPMTAG_EVR,		evrTag },
-     { RPMTAG_NVR,		nvrTag },
+@@ -1152,6 +1360,8 @@ const struct headerSprintfExtension_s rp
+     { HEADER_EXT_TAG, "RPMTAG_GROUP",		{ groupTag } },
+     { HEADER_EXT_TAG, "RPMTAG_DESCRIPTION",	{ descriptionTag } },
+     { HEADER_EXT_TAG, "RPMTAG_SUMMARY",		{ summaryTag } },
++    { HEADER_EXT_TAG, "RPMTAG_CHANGELOGNAME",	{ changelognameTag } },
++    { HEADER_EXT_TAG, "RPMTAG_CHANGELOGTEXT",	{ changelogtextTag } },
+     { HEADER_EXT_TAG, "RPMTAG_FILECLASS",	{ fileclassTag } },
+     { HEADER_EXT_TAG, "RPMTAG_FILECONTEXTS",	{ filecontextsTag } },
+     { HEADER_EXT_TAG, "RPMTAG_FILENAMES",	{ filenamesTag } },
diff --git a/luanoreadline.diff b/luanoreadline.diff
new file mode 100644
index 0000000..72ad014
--- /dev/null
+++ b/luanoreadline.diff
@@ -0,0 +1,32 @@
+Build lua without readling support.
+
+--- ./lua/Makefile.am.orig	2006-01-28 00:27:50.000000000 +0000
++++ ./lua/Makefile.am	2006-01-28 00:28:25.000000000 +0000
+@@ -16,7 +16,7 @@ INCLUDES = -I$(srcdir)/include -I$(srcdi
+ 
+ lua_lua_SOURCES = lua/lua.c
+ lua_lua_CFLAGS = -DLUA_USERCONFIG='"$(srcdir)/local/userconfig.c"'
+-lua_lua_LDADD = $(LDADD) -L/usr/lib -lreadline -lhistory -lncurses
++lua_lua_LDADD = $(LDADD) -lncurses
+ luac_luac_SOURCES = luac/luac.c luac/print.c lopcodes.c
+ luac_luac_CFLAGS = -DLUA_OPNAMES
+ 
+--- ./lua/local/userconfig.c.orig	2004-03-16 21:58:30.000000000 +0000
++++ ./lua/local/userconfig.c	2006-01-28 00:34:39.000000000 +0000
+@@ -9,6 +9,8 @@
+ 	{"rex", luaopen_rex}, \
+ 	{"luapath", luapath},
+ 
++#if 0
++
+ #define lua_readline	myreadline
+ #define lua_saveline	mysaveline
+ 
+@@ -45,6 +47,7 @@ static void mysaveline (lua_State *L, co
+     }
+   }
+ }
++#endif
+ 
+ static int luapath(lua_State *L)
+ {
diff --git a/luaroot.diff b/luaroot.diff
new file mode 100644
index 0000000..4d66cb4
--- /dev/null
+++ b/luaroot.diff
@@ -0,0 +1,75 @@
+Index: lib/psm.c
+===================================================================
+--- lib/psm.c.orig
++++ lib/psm.c
+@@ -502,6 +502,8 @@ static rpmRC runLuaScript(rpmpsm psm, He
+ {
+     const rpmts ts = psm->ts;
+     int rootFd = -1;
++    int chroot_done;
++    const char *rootDir;
+     const char *n, *v, *r;
+     rpmRC rc = RPMRC_OK;
+     int i;
+@@ -511,20 +513,27 @@ static rpmRC runLuaScript(rpmpsm psm, He
+ 
+     xx = headerNVR(h, &n, &v, &r);
+ 
+-    if (!rpmtsChrootDone(ts)) {
+-	const char *rootDir = rpmtsRootDir(ts);
+-	xx = chdir("/");
++    chroot_done = rpmtsChrootDone(ts);
++    rootDir = rpmtsRootDir(ts);
++    if (!chroot_done) {
++	if (rootDir != NULL && strcmp(rootDir, "/") && *rootDir == '/') {
++	    xx = chdir("/");
+ /*@-nullpass@*/
+-	rootFd = open(".", O_RDONLY, 0);
++	    rootFd = open(".", O_RDONLY, 0);
+ /*@=nullpass@*/
+-	if (rootFd >= 0) {
+-	    /*@-superuser -noeffect @*/
+-	    if (rootDir != NULL && strcmp(rootDir, "/") && *rootDir == '/')
++	    if (rootFd >= 0) {
++		/*@-superuser -noeffect @*/
+ 		xx = chroot(rootDir);
+-	    /*@=superuser =noeffect @*/
+-	    xx = rpmtsSetChrootDone(ts, 1);
++		/*@=superuser =noeffect @*/
++		xx = rpmtsSetChrootDone(ts, 1);
++	    }
+ 	}
++    } else {
++/*@-nullpass@*/
++	rootFd = open(".", O_RDONLY, 0);
++/*@=nullpass@*/
+     }
++    xx = chdir("/");
+ 
+     /* Create arg variable */
+     rpmluaPushTable(lua, "arg");
+@@ -561,14 +570,19 @@ static rpmRC runLuaScript(rpmpsm psm, He
+     rpmluaDelVar(lua, "arg");
+ 
+     if (rootFd >= 0) {
+-	const char *rootDir = rpmtsRootDir(ts);
+ 	xx = fchdir(rootFd);
+ 	xx = close(rootFd);
+-	/*@-superuser -noeffect @*/
+-	if (rootDir != NULL && strcmp(rootDir, "/") && *rootDir == '/')
++	if (!chroot_done) {
++	    /*@-superuser -noeffect @*/
+ 	    xx = chroot(".");
+-	/*@=superuser =noeffect @*/
+-	xx = rpmtsSetChrootDone(ts, 0);
++	    /*@=superuser =noeffect @*/
++	    xx = rpmtsSetChrootDone(ts, 0);
++	}
++    }
++    if (!chroot_done) {
++	const char *currDir = rpmtsCurrDir(ts);
++	if (currDir != NULL)
++	    xx = chdir(currDir);
+     }
+ 
+     return rc;
diff --git a/macrosin.diff b/macrosin.diff
index 3c9fcb5..f8fb3e9 100644
--- a/macrosin.diff
+++ b/macrosin.diff
@@ -1,6 +1,10 @@
---- ./macros.in.orig	2011-01-03 13:57:41.000000000 +0000
-+++ ./macros.in	2011-05-12 14:32:18.000000000 +0000
-@@ -178,22 +178,22 @@
+SUSE specific macro changes.
+
+Index: macros.in
+===================================================================
+--- macros.in.orig
++++ macros.in
+@@ -166,22 +166,22 @@
  
  #	Template for debug information sub-package.
  %debug_package \
@@ -12,7 +16,7 @@
  Group: Development/Debug\
  AutoReqProv: 0\
 -%description debug\
-+#Requires: %{?!debug_package_requires:%{name} = %{version}-%{release}}%{?debug_package_requires}\
++Requires: %{name} = %{version}-%{release}\
 +%description debuginfo\
  This package provides debug information for package %{name}.\
  Debug information is useful when developing applications that use this\
@@ -23,81 +27,184 @@
 -%endif\
  %{nil}
  
--%_defaultdocdir		%{_datadir}/doc
-+%_defaultdocdir		%{_datadir}/doc/packages
-+%_docdir_fmt          %%{NAME}
+-%_defaultdocdir		%{_usr}/doc
++%_defaultdocdir		%{_usr}/doc/packages
++%_docdir_fmt		%%{NAME}
  
  #	The path to the gzip executable (legacy, use %{__gzip} instead).
  %_gzipbin		%{__gzip}
-@@ -230,7 +230,7 @@ package or when debugging this package.\
+@@ -218,7 +218,7 @@ package or when debugging this package.\
  %_tmppath		%{_var}/tmp
  
  #	Path to top of build area.
--%_topdir		%{getenv:HOME}/rpmbuild
+-%_topdir		%{_usrsrc}/redhat
 +%_topdir		%{_usrsrc}/packages
  
  #	The path to the unzip executable (legacy, use %{__unzip} instead).
  %_unzipbin		%{__unzip}
-@@ -333,7 +333,7 @@ package or when debugging this package.\
- #		"w7.lzdio"	lzma-alone level 7, lzma's default
+@@ -323,7 +323,7 @@ package or when debugging this package.\
+ #		"w9.bzdio"	bzip2 level 9.
  #
  #%_source_payload	w9.gzdio
 -#%_binary_payload	w9.gzdio
-+%_binary_payload	w5.lzdio
++%_binary_payload	w9.bzdio
  
- #	Algorithm to use for generating file checksum digests on build.
- #	If not specified or 0, MD5 is used.
-@@ -417,7 +417,7 @@ package or when debugging this package.\
+ #	The signature to use and the location of configuration files for
+ #	signing packages with PGP.
+@@ -371,7 +371,7 @@ package or when debugging this package.\
  
  #
  # Use internal dependency generator rather than external helpers?
 -%_use_internal_dependency_generator	1
-+%_use_internal_dependency_generator	1
++%_use_internal_dependency_generator	0
  
  #
  # Filter GLIBC_PRIVATE Provides: and Requires:
-@@ -463,16 +463,22 @@ print (t)\
- # Undefined, missing or %{nil} will use package content (if available).
- %_verify_file_context_path 	%{__file_context_path}
- 
-+# maxnum,cuttime,minnum
-+# 2009/03/01 (SLES11 GA)
-+%_binarychangelogtrim 0,1235862000,10
-+
- #
- # Path to scripts to autogenerate package dependencies,
- #
+@@ -420,20 +420,22 @@ print (t)\
  # Note: Used iff _use_internal_dependency_generator is zero.
- #%__find_provides	%{_rpmconfigdir}/rpmdeps --provides
- #%__find_requires	%{_rpmconfigdir}/rpmdeps --requires
--%__find_provides	%{_rpmconfigdir}/find-provides
--%__find_requires	%{_rpmconfigdir}/find-requires
-+%__find_provides	%{_rpmconfigdir}/find-provides %name
-+%__find_requires	%{_rpmconfigdir}/find-requires %name
+ #%__find_provides	@RPMCONFIGDIR@/rpmdeps --provides
+ #%__find_requires	@RPMCONFIGDIR@/rpmdeps --requires
+-%__find_provides	@RPMCONFIGDIR@/find-provides
+-%__find_requires	@RPMCONFIGDIR@/find-requires
++%__find_provides	@RPMCONFIGDIR@/find-provides %name
++%__find_requires	@RPMCONFIGDIR@/find-requires %name
  #%__find_conflicts	???
  #%__find_obsoletes	???
 +#%__find_supplements	???
 +#%__find_enhances	???
  
- # 
- # Path to file attribute classifications for automatic dependency 
-@@ -533,12 +539,12 @@ print (t)\
  #
+ # Path to scripts to autogenerate per-interpreter package dependencies,
+ #
+ # Note: Used iff _use_internal_dependency_generator is non-zero. The
+ # helpers are also used by @RPMCONFIGDIR@/rpmdeps {--provides|--requires}.
+-%__perl_provides	@RPMCONFIGDIR@/perldeps.pl --provides
+-%__perl_requires	@RPMCONFIGDIR@/perldeps.pl --requires
+-#%__perl_provides	@RPMCONFIGDIR@/perl.prov
+-#%__perl_requires	@RPMCONFIGDIR@/perl.req
++#%__perl_provides	@RPMCONFIGDIR@/perldeps.pl --provides
++#%__perl_requires	@RPMCONFIGDIR@/perldeps.pl --requires
++%__perl_provides	@RPMCONFIGDIR@/perl.prov
++%__perl_requires	@RPMCONFIGDIR@/perl.req
  
- # Misc BDB tuning options
--%__dbi_other			mp_mmapsize=128Mb mp_size=64Mb
-+%__dbi_other			mp_mmapsize=128Mb mp_size=64Mb
+ %__python_provides	@RPMCONFIGDIR@/pythondeps.sh --provides
+ %__python_requires	@RPMCONFIGDIR@/pythondeps.sh --requires
+@@ -591,15 +593,15 @@ print (t)\
+ %_dbi_config_Packages		%{_dbi_htconfig} lockdbfd
  
--%_dbi_config			%{?__dbi_other}
-+%_dbi_config			%{?__dbi_other} nofsync
+ # "Depends" is a per-transaction cache of known dependency resolutions.
+-%_dbi_config_Depends		%{_dbi_htconfig} temporary private
++%_dbi_config_Depends		%{_dbi_htconfig} temporary private nofsync
  
- # "Packages" should have shared/exclusive fcntl(2) lock using "lockdbfd".
--%_dbi_config_Packages		%{?_dbi_config} lockdbfd
-+%_dbi_config_Packages		%{?__dbi_other} lockdbfd
+-%_dbi_config_Dirnames		%{_dbi_btconfig}
+-%_dbi_config_Requireversion	%{_dbi_btconfig}
+-%_dbi_config_Provideversion	%{_dbi_btconfig}
+-%_dbi_config_Installtid		%{_dbi_btconfig}
+-%_dbi_config_Removetid		%{_dbi_btconfig}
++%_dbi_config_Dirnames		%{_dbi_btconfig} nofsync
++%_dbi_config_Requireversion	%{_dbi_btconfig} nofsync
++%_dbi_config_Provideversion	%{_dbi_btconfig} nofsync
++%_dbi_config_Installtid		%{_dbi_btconfig} nofsync
++%_dbi_config_Removetid		%{_dbi_btconfig} nofsync
+ 
+-%_dbi_config	%{_dbi_htconfig}
++%_dbi_config	%{_dbi_htconfig} nofsync
+ 
+ # XXX legacy configuration.
+ # Choose db interface:
+@@ -658,8 +660,8 @@ print (t)\
+ 
+ # Horowitz Key Protocol server configuration
+ #
+-%_hkp_keyserver         hkp://pgp.mit.edu
+-%_hkp_keyserver_query   %{_hkp_keyserver}/pks/lookup?op=get&search=0x
++#%_hkp_keyserver         hkp://pgp.mit.edu
++#%_hkp_keyserver_query   %{_hkp_keyserver}/pks/lookup?op=get&search=0x
  
  #==============================================================================
- # ---- GPG/PGP/PGP5 signature macros.
-@@ -857,7 +863,7 @@ print (t)\
+ # ---- Transaction macros.
+@@ -767,80 +769,6 @@ print (t)\
+ #
+ # XXX	Note: that there cannot be any whitespace within the string "p>q",
+ #	and that both p and q are package names (i.e. no version/release).
+-#
+-#%_dependency_whiteout_5_2		\
+-#	pam>pamconfig
+-#%_dependency_whiteout_6_1		\
+-#	pilot-link-devel>pilot-link
+-#%_dependency_whiteout_6_2		\
+-#	egcs-c++>libstdc++
+-%_dependency_whiteout_7_0		\
+-	pango-gtkbeta-devel>pango-gtkbeta\
+-	XFree86>Mesa			\
+-	compat-glibc>db2		\
+-	compat-glibc>db1		\
+-	pam>initscripts			\
+-	initscripts>sysklogd
+-%_dependency_whiteout_7_1		\
+-	arts>kdelibs-sound
+-%_dependency_whiteout_7_2		\
+-	libgnomeprint15>gnome-print	\
+-	nautilus>nautilus-mozilla	\
+-	tcl>postgresql-tcl
+-#%_dependency_whiteout_8_0		\
+-#	perl>perl-Parse-RecDescent	\
+-#	XFree86-libs>XFree86-Mesa-libGL	\
+-#	perl>perl-Filter		\
+-#	perl>mrtg			\
+-#	perl>mod_perl			\
+-#	mysql>perl-DBD-MySQL		\
+-#	ghostscript>gimp-print		\
+-#	arts>kde2-compat		\
+-#	perl-Date-Calc>perl-Bit-Vector	\
+-#	glibc-debug>glibc-devel
+-
+-%_dependency_whiteout_8_0		\
+-	mysql>perl-DBD-MySQL		\
+-	perl>perl-Filter		\
+-	perl>mrtg			\
+-	perl>mod_perl			\
+-	perl-Date-Calc>perl-Bit-Vector	\
+-
+-%_dependency_whiteout_fc3		\
+-	coreutils>pam			\
+-	nautilus>nautilus-cd-burner	\
+-	aspell>aspell-en		\
+-	kernel>initscripts		\
+-	kernel-smp>initscripts		\
+-	xorg-x11-libs>xorg-x11-Mesa-libGL \
+-	openldap>cyrus-sasl-md5		\
+-	openldap>cyrus-sasl		\
+-	openjade>docbook-dtds		\
+-	gtk+>gdk-pixbuf			\
+-	xorg-x11>xinitrc		\
+-	gnome-python2>gnome-python2-bonobo \
+-	httpd-suexec>httpd		\
+-	xemacs-sumo>apel-xemacs		\
+-	php>php-pear			\
+-	openoffice.org-libs>openoffice.org
+-
+-%_dependency_whiteout			\
+-	libtermcap>bash			\
+-	modutils>vixie-cron		\
+-	ypbind>yp-tools			\
+-	ghostscript-fonts>ghostscript	\
+-	%{?_dependency_whiteout_fc3}	\
+-	%{?_dependency_whiteout_fc2}	\
+-	%{?_dependency_whiteout_fc1}	\
+-	%{?_dependency_whiteout_9}	\
+-	%{?_dependency_whiteout_8_0}	\
+-	%{?_dependency_whiteout_7_2}	\
+-	%{?_dependency_whiteout_7_1}	\
+-	%{?_dependency_whiteout_7_0}	\
+-	%{?_dependency_whiteout_6_2}	\
+-	%{?_dependency_whiteout_6_1}	\
+-	%{?_dependency_whiteout_5_2}	\
+-	%{nil}
+ 
+ #
+ # Default headerSprintf() output format string for rpm -qa
+@@ -1093,7 +1021,7 @@ print (t)\
  %_build_vendor		%{_host_vendor}
  %_build_os		%{_host_os}
  %_host			@host@
@@ -106,10 +213,10 @@
  %_host_cpu		@host_cpu@
  %_host_vendor		@host_vendor@
  %_host_os		@host_os@
-@@ -1020,6 +1026,181 @@ done \
- %python_sitearch %(%{__python} -c "from distutils.sysconfig import get_python_lib; import sys; sys.stdout.write(get_python_lib(1))")
- %python_version %(%{__python} -c "import sys; sys.stdout.write(sys.version[:3])")
+@@ -1250,12 +1178,191 @@ done \
+ %perl_privlib	%(eval "`%{__perl} -V:installprivlib`"; echo $installprivlib)
  
+ #------------------------------------------------------------------------------
 +# More useful perl macros (from Raul Dias <rsd@swi.com.br>)
 +#
 +%perl_version		%(perl -V:version | sed "s!.*='!!;s!'.*!!")
@@ -285,21 +392,20 @@
 +run "\\$@"\
 +EOF
 +
- #------------------------------------------------------------------------------
++#------------------------------------------------------------------------------
  # arch macro for all Intel i?86 compatibile processors
  #  (Note: This macro (and it's analogues) will probably be obsoleted when
-@@ -1030,7 +1211,9 @@ done \
- 
- #------------------------------------------------------------------------------
- # arch macro for all supported ARM processors
--%arm	armv3l armv4b armv4l armv4tl armv5tel armv5tejl armv6l armv7l
-+%arm	armv3l armv4b armv4l armv4tl armv5b armv5l armv5teb armv5tel armv5tejl armv6l armv7l
-+%arml	armv3l armv4l armv5l armv5tel armv6l armv7l
+ #   rpm can use regular expressions against target platforms in macro
+ #   conditionals.
+ #
+ %ix86   i386 i486 i586 i686 pentium3 pentium4 athlon
++%arm	armv4l armv4b armv5l armv5b armv5tel armv5teb
++%arml	armv4l armv5l armv5tel
 +%armb	armv4b armv5b armv5teb
  
- #------------------------------------------------------------------------------
- # arch macro for all supported Sparc processors
-@@ -1070,3 +1253,26 @@ done \
+ #------------------------------------------------------------------------
+ # Use in %install to generate locale specific file lists. For example,
+@@ -1270,3 +1377,17 @@ done \
  
  # \endverbatim
  #*/
@@ -317,12 +423,3 @@
 +%info_del() test -x /sbin/install-info -a ! -f %{?2}%{?!2:%{_infodir}}/%{1}%ext_info && /sbin/install-info --quiet --delete --info-dir=%{?2}%{?!2:%{_infodir}} %{?2}%{?!2:%{_infodir}}/%{1}%ext_info \
 +%{nil}
 +
-+%service_add() %{fillup_and_insserv %{1}}
-+%service_del_preun() %{stop_on_removal %{1}}
-+%service_del_postun() %{restart_on_update %{1}}
-+
-+%user_group_add() \
-+/usr/sbin/groupadd -o -r %{1} 2>/dev/null || :\
-+/usr/sbin/useradd -o -r -g %{1} -d %{2} -s %{3} -c %{4} %{1} 2>/dev/null || :\
-+%{nil}
-+
diff --git a/magic_and_path.diff b/magic_and_path.diff
deleted file mode 100644
index de74ea7..0000000
--- a/magic_and_path.diff
+++ /dev/null
@@ -1,23 +0,0 @@
-Allow "magic_and_path" flag to configure that files must
-match both regexpes to be sent to the dependency generator.
-
---- build/rpmfc.c.orig	2011-05-16 10:46:20.000000000 +0000
-+++ build/rpmfc.c	2011-05-16 11:02:56.000000000 +0000
-@@ -630,10 +631,13 @@ static void rpmfcAttributes(rpmfc fc, co
- 	    continue;
- 
- 	/* Add attributes on libmagic type & path pattern matches */
--	if (regMatch((*attr)->magic, ftype))
--	    argvAddTokens(&fc->fattrs[fc->ix], (*attr)->name);
--	if (regMatch((*attr)->path, path))
--	    argvAddTokens(&fc->fattrs[fc->ix], (*attr)->name);
-+	if ((*attr)->magic && (*attr)->path && hasAttr((*attr)->flags, "magic_and_path")) {
-+	    if (regMatch((*attr)->magic, ftype) && regMatch((*attr)->path, path))
-+		argvAddTokens(&fc->fattrs[fc->ix], (*attr)->name);
-+	} else {
-+	    if (regMatch((*attr)->magic, ftype) || regMatch((*attr)->path, path))
-+		argvAddTokens(&fc->fattrs[fc->ix], (*attr)->name);
-+	}
-     }
- }
- 
diff --git a/missingok.diff b/missingok.diff
index 7647696..96133c9 100644
--- a/missingok.diff
+++ b/missingok.diff
@@ -1,9 +1,9 @@
-support missingok dependency bit
+Obey MISSINGOK flag for dependencies. Backport from rpm-4.4.7.
 
---- ./lib/depends.c.orig	2011-02-15 13:10:59.000000000 +0000
-+++ ./lib/depends.c	2011-05-10 16:06:39.000000000 +0000
-@@ -448,8 +448,13 @@ retry:
-     }
+--- ./lib/depends.c.orig	2005-12-14 19:51:34.000000000 +0000
++++ ./lib/depends.c	2006-01-27 21:05:13.000000000 +0000
+@@ -581,8 +632,13 @@ retry:
+ /*@=boundsread@*/
  
  unsatisfied:
 -    rc = 1;	/* dependency is unsatisfied */
@@ -17,14 +17,23 @@ support missingok dependency bit
 +    }
  
  exit:
-     return rc;
---- ./lib/rpmds.h.orig	2011-05-10 16:09:22.000000000 +0000
-+++ ./lib/rpmds.h	2011-05-10 16:08:04.000000000 +0000
-@@ -68,6 +68,7 @@ typedef rpmFlags rpmsenseFlags;
+     /*
+@@ -975,6 +1082,8 @@ static inline /*@observer@*/ const char 
+ 	return "Requires(postun):";
+     if (f & RPMSENSE_SCRIPT_VERIFY)
+ 	return "Requires(verify):";
++    if (f & RPMSENSE_MISSINGOK)
++	return "Requires(hint):";
+     if (f & RPMSENSE_FIND_REQUIRES)
+ 	return "Requires(auto):";
+     return "Requires:";
+--- ./lib/rpmlib.h.orig	2005-12-15 14:50:30.000000000 +0000
++++ ./lib/rpmlib.h	2006-02-03 13:22:27.000000000 +0000
+@@ -547,6 +561,7 @@ typedef	enum rpmsenseFlags_e {
      RPMSENSE_SCRIPT_POSTUN | \
      RPMSENSE_SCRIPT_VERIFY | \
      RPMSENSE_FIND_REQUIRES | \
 +    RPMSENSE_MISSINGOK | \
-     RPMSENSE_RPMLIB | \
-     RPMSENSE_KEYRING | \
-     RPMSENSE_PRETRANS | \
+     RPMSENSE_SCRIPT_PREP | \
+     RPMSENSE_SCRIPT_BUILD | \
+     RPMSENSE_SCRIPT_INSTALL | \
diff --git a/modalias-encode.diff b/modalias-encode.diff
deleted file mode 100644
index c92f195..0000000
--- a/modalias-encode.diff
+++ /dev/null
@@ -1,40 +0,0 @@
-Module aliases (modinfo -F alias <module>) may contain special characters
-that rpm does not allow in dependencies, such as commas. Encode those as
-%XX to avoid generating broken dependencies.
-
-Signed-off-by: Andreas Gruenbacher <agruen@suse.de>
-
-Index: rpm-4.4.2.3/scripts/find-supplements.ksyms
-===================================================================
---- scripts/find-supplements.ksyms
-+++ scripts/find-supplements.ksyms
-@@ -48,6 +48,21 @@ combine_modaliases() {
-     print_modaliases "$class" "$variants" "$pos"
- }
- 
-+# Encode all characters other than [*:a-zA-Z0-9] in stdin as %XX.
-+# (This includes the % character itself, which becomes %25.)
-+hexenc() {
-+    local line hex
-+
-+    while read line; do
-+            set -- "" "$line"
-+            while [[ "$2" =~ ([*:a-zA-Z0-9]*)([^*:a-zA-Z0-9])(.*) ]]; do
-+                hex=$(echo -n "${BASH_REMATCH[2]}" | hexdump -e '"%X"')
-+                set -- "$1${BASH_REMATCH[1]}%$hex" "${BASH_REMATCH[3]}"
-+            done
-+            echo "$1$2"
-+    done
-+}
-+
- aliases_of_filelist() {
-     modlist=$(mktemp)
-     have_module=1
-@@ -60,6 +75,7 @@ aliases_of_filelist() {
- 	fi
- 	have_module=0
- 	/sbin/modinfo -F alias "$module" \
-+	| hexenc \
- 	| sed -nre "s,(.+:.+),modalias(kernel-${krel##*-}:\\1),p" | tee -a $modlist
-     done
-     if ! test -s "$modlist" && test $have_module = 0; then
diff --git a/modalias-kernel_module.diff b/modalias-kernel_module.diff
index 524e02e..4add934 100644
--- a/modalias-kernel_module.diff
+++ b/modalias-kernel_module.diff
@@ -1,17 +1,15 @@
 Index: scripts/find-supplements.ksyms
 ===================================================================
---- scripts/find-supplements.ksyms.orig
+--- scripts/find-supplements.ksyms
 +++ scripts/find-supplements.ksyms
-@@ -1,6 +1,8 @@
+@@ -1,5 +1,6 @@
  #! /bin/sh
  
-+SPECFILE=${RPMBUILD_SPECFILE:-/usr/src/packages/SOURCES/$1.spec}
++RPM_SOURCE_DIR=/usr/src/packages/SOURCES
  IFS=$'\n'
-+PACKAGE=$1
  
  case "$1" in
- kernel-module-*)    ;; # Fedora kernel module package names start with
-@@ -46,11 +48,54 @@ combine_modaliases() {
+@@ -46,11 +47,43 @@ combine_modaliases() {
      print_modaliases "$class" "$variants" "$pos"
  }
  
@@ -22,23 +20,12 @@ Index: scripts/find-supplements.ksyms
 -    | sed -nre "s,(.+:.+),modalias(kernel-${krel##*-}:\\1),p"
 -done \
 +aliases_of_filelist() {
-+    modlist=$(mktemp)
-+    have_module=1
 +    for module in $(grep -E '/lib/modules/.+\.ko$'); do
 +	vermagic=$(/sbin/modinfo -F vermagic "$module")
 +	krel=${vermagic%% *}
-+	if ! test -x /sbin/modinfo; then
-+		echo "ERROR: add module-init-tools to BuildRequires" >&2
-+		exit 1
-+	fi
-+	have_module=0
 +	/sbin/modinfo -F alias "$module" \
-+	| sed -nre "s,(.+:.+),modalias(kernel-${krel##*-}:\\1),p" | tee -a $modlist
++	| sed -nre "s,(.+:.+),modalias(kernel-${krel##*-}:\\1),p"
 +    done
-+    if ! test -s "$modlist" && test $have_module = 0; then
-+        echo "packageand(kernel-${krel##*-}:$PACKAGE)"
-+    fi
-+    rm -f $modlist
 +}
 +
 +aliases_of_specfile_macro() {
@@ -47,7 +34,7 @@ Index: scripts/find-supplements.ksyms
 +    regex=$(
 +	set -o noglob
 +	set -- $(sed -ne 's:^%supplements_kernel_module[ \t]::p' \
-+		     $SPECFILE)
++		     $RPM_SOURCE_DIR/$1.spec)
 +	while [ $# -ge 1 ]; do
 +	    regex=$(echo "$1" \
 +		    | sed -e 's:[.]:\\.:g' \
diff --git a/modalias.diff b/modalias.diff
index abcdefd..ccfe6b6 100644
--- a/modalias.diff
+++ b/modalias.diff
@@ -1,29 +1,28 @@
---- ./macros.in.orig	2011-05-11 14:57:08.000000000 +0000
-+++ ./macros.in	2011-05-11 15:01:39.000000000 +0000
-@@ -470,14 +470,18 @@ print (t)\
- #
- # Path to scripts to autogenerate package dependencies,
- #
-+%__set_helper_env %{lua:
-+posix.setenv("RPMBUILD_SPECFILE",rpm.expand("%?_specfile"));
-+posix.setenv("RPMBUILD_SOURCEDIR",rpm.expand("%?_sourcedir"));
-+}
- # Note: Used iff _use_internal_dependency_generator is zero.
- #%__find_provides	%{_rpmconfigdir}/rpmdeps --provides
- #%__find_requires	%{_rpmconfigdir}/rpmdeps --requires
--%__find_provides	%{_rpmconfigdir}/find-provides %name
--%__find_requires	%{_rpmconfigdir}/find-requires %name
-+%__find_provides	%{__set_helper_env}%{_rpmconfigdir}/find-provides %name
-+%__find_requires	%{__set_helper_env}%{_rpmconfigdir}/find-requires %name
- #%__find_conflicts	???
- #%__find_obsoletes	???
--#%__find_supplements	???
-+%__find_supplements	%{__set_helper_env}%{_rpmconfigdir}/find-supplements %name
- #%__find_enhances	???
- 
- # 
---- ./scripts/find-supplements.ksyms.orig	2011-05-11 15:01:39.000000000 +0000
-+++ ./scripts/find-supplements.ksyms	2011-05-11 15:01:39.000000000 +0000
+SUSE specific find-supplements, used for kernel builds
+
+Index: ./scripts/find-supplements
+===================================================================
+--- /dev/null
++++ ./scripts/find-supplements
+@@ -0,0 +1,14 @@
++#!/bin/bash
++
++# This script reads filenames from STDIN and outputs any relevant provides
++# information that needs to be included in the package.
++IFS=$'\n'
++filelist=($(cat))
++
++#
++# --- Kernel module hardware identifiers
++# (e.g., modalias(pci:v0000109Ed00000878sv00000070sd0000FF01bc*sc*i*)
++[ -x /usr/lib/rpm/find-supplements.ksyms ] &&
++    printf "%s\n" "${filelist[@]}" | /usr/lib/rpm/find-supplements.ksyms "$@"
++
++exit 0
+Index: ./scripts/find-supplements.ksyms
+===================================================================
+--- /dev/null
++++ ./scripts/find-supplements.ksyms
 @@ -0,0 +1,56 @@
 +#! /bin/sh
 +
@@ -81,20 +80,16 @@
 +done \
 +| sort -u \
 +| combine_modaliases
---- ./scripts/find-supplements.orig	2011-05-11 15:01:39.000000000 +0000
-+++ ./scripts/find-supplements	2011-05-11 15:01:39.000000000 +0000
-@@ -0,0 +1,14 @@
-+#!/bin/bash
-+
-+# This script reads filenames from STDIN and outputs any relevant provides
-+# information that needs to be included in the package.
-+IFS=$'\n'
-+filelist=($(cat))
-+
-+#
-+# --- Kernel module hardware identifiers
-+# (e.g., modalias(pci:v0000109Ed00000878sv00000070sd0000FF01bc*sc*i*)
-+[ -x /usr/lib/rpm/find-supplements.ksyms ] &&
-+    printf "%s\n" "${filelist[@]}" | /usr/lib/rpm/find-supplements.ksyms "$@"
-+
-+exit 0
+Index: ./macros.in
+===================================================================
+--- ./macros.in
++++ ./macros.in
+@@ -424,7 +424,7 @@ print (t)\
+ %__find_requires	@RPMCONFIGDIR@/find-requires %name
+ #%__find_conflicts	???
+ #%__find_obsoletes	???
+-#%__find_supplements	???
++%__find_supplements	@RPMCONFIGDIR@/find-supplements %name
+ #%__find_enhances	???
+ 
+ #
diff --git a/nameversioncompare.diff b/nameversioncompare.diff
index ebede1f..0bd74c4 100644
--- a/nameversioncompare.diff
+++ b/nameversioncompare.diff
@@ -1,10 +1,10 @@
 Also compare the name and not only the version when checking if
 two packages are the same. rh#104066
 
---- ./lib/depends.c.orig	2011-05-12 12:20:01.000000000 +0000
-+++ ./lib/depends.c	2011-05-12 12:26:25.000000000 +0000
-@@ -95,6 +95,24 @@ static rpmdbMatchIterator rpmtsPrunedIte
-     return mi;
+--- ./lib/depends.c.orig	2005-12-14 19:51:34.000000000 +0000
++++ ./lib/depends.c	2006-01-27 21:05:13.000000000 +0000
+@@ -124,6 +124,24 @@ static int removePackage(rpmts ts, Heade
+     return 0;
  }
  
 +static int rpmNameVersionCompare(Header first, Header second)
@@ -12,23 +12,23 @@ two packages are the same. rh#104066
 +    const char * one, * two;
 +    int rc;
 +
-+    one = headerGetString(first, RPMTAG_NAME);
-+    two = headerGetString(second, RPMTAG_NAME);
++    rc = headerGetEntry(first, RPMTAG_NAME, NULL, (void **) &one, NULL);
++    rc = headerGetEntry(second, RPMTAG_NAME, NULL, (void **) &two, NULL);
 +    rc = strcmp(one, two);
 +    if (rc)
 +	return rc;
-+    one = headerGetString(first, RPMTAG_ARCH);
-+    two = headerGetString(second, RPMTAG_ARCH);
++    rc = headerGetEntry(first, RPMTAG_ARCH, NULL, (void **) &one, NULL);
++    rc = headerGetEntry(second, RPMTAG_ARCH, NULL, (void **) &two, NULL);
 +    rc = strcmp(one, two);
 +    if (rc)
 +	return rc;
 +    return rpmVersionCompare(first, second);
 +}
 +
- #define skipColor(_tscolor, _color, _ocolor) \
- 	((_tscolor) && (_color) && (_ocolor) && !((_color) & (_ocolor)))
- 
-@@ -111,7 +129,7 @@ static void addUpgradeErasures(rpmts ts,
+ int rpmtsAddInstallElement(rpmts ts, Header h,
+ 			fnpyKey key, int upgrade, rpmRelocation * relocs)
+ {
+@@ -303,7 +322,7 @@ addheader:
  	    continue;
  
  	/* Skip packages that contain identical NEVR. */
@@ -36,13 +36,18 @@ two packages are the same. rh#104066
 +	if (rpmNameVersionCompare(h, oh) == 0)
  	    continue;
  
- 	removePackage(ts, oh, p);
-@@ -150,7 +168,7 @@ static void addObsoleteErasures(rpmts ts
+ 	xx = removePackage(ts, oh, rpmdbGetIteratorOffset(mi), pkgKey);
+@@ -354,11 +373,9 @@ addheader:
  	     * If no obsoletes version info is available, match all names.
  	     */
  	    if (rpmdsEVR(obsoletes) == NULL
--		     || rpmdsAnyMatchesDep(oh, obsoletes, _rpmds_nopromote)) {
-+		     || rpmdsNVRMatchesDep(oh, obsoletes, _rpmds_nopromote)) {
- 		char * ohNEVRA = headerGetAsString(oh, RPMTAG_NEVRA);
- 		rpmlog(RPMLOG_DEBUG, "  Obsoletes: %s\t\terases %s\n",
- 			rpmdsDNEVR(obsoletes)+2, ohNEVRA);
+-	     || rpmdsAnyMatchesDep(oh, obsoletes, _rpmds_nopromote)) {
++	     || rpmdsNVRMatchesDep(oh, obsoletes, _rpmds_nopromote)) {
+ 		const char * ohNEVRA = hGetNEVRA(oh, NULL);
+-#ifdef	DYING	/* XXX see http://bugzilla.redhat.com #134497 */
+-		if (rpmVersionCompare(h, oh))
+-#endif
++		if (rpmNameVersionCompare(h, oh))
+ 		    xx = removePackage(ts, oh, rpmdbGetIteratorOffset(mi), pkgKey);
+ /*@-nullptrarith@*/
+ 		rpmMessage(RPMMESS_DEBUG, _("  Obsoletes: %s\t\terases %s\n"),
diff --git a/no_rep_autop.diff b/no_rep_autop.diff
deleted file mode 100644
index 4027c96..0000000
--- a/no_rep_autop.diff
+++ /dev/null
@@ -1,12 +0,0 @@
-It seems to be gone...
-
---- lib/Makefile.am.orig	2011-05-12 12:59:42.000000000 +0000
-+++ lib/Makefile.am	2011-05-12 12:59:59.000000000 +0000
-@@ -126,7 +126,6 @@ rpmdb_printlog_LDADD = \
- 	$(top_builddir)/db3/fileops_autop.o \
- 	$(top_builddir)/db3/hash_autop.o \
- 	$(top_builddir)/db3/qam_autop.o \
--	$(top_builddir)/db3/rep_autop.o \
- 	$(top_builddir)/db3/txn_autop.o \
- 	$(top_builddir)/db3/util_sig.o \
- 	librpm.la
diff --git a/nobuildcolor.diff b/nobuildcolor.diff
deleted file mode 100644
index ed58d0d..0000000
--- a/nobuildcolor.diff
+++ /dev/null
@@ -1,13 +0,0 @@
-Disable file coloring for SUSE systems
-
---- build/rpmfc.c.orig	2011-05-13 12:35:29.000000000 +0000
-+++ build/rpmfc.c	2011-05-13 13:49:37.000000000 +0000
-@@ -1312,7 +1312,7 @@ rpmRC rpmfcGenerateDepends(const rpmSpec
- 	goto exit;
- 
-     /* Add per-file colors(#files) */
--    if (rpmtdFromArgi(&td, RPMTAG_FILECOLORS, fc->fcolor)) {
-+    if (rpmExpandNumeric("%{?_transaction_color}") != 0 && rpmtdFromArgi(&td, RPMTAG_FILECOLORS, fc->fcolor)) {
- 	rpm_color_t *fcolor;
- 	assert(rpmtdType(&td) == RPM_INT32_TYPE);
- 	/* XXX Make sure only primary (i.e. Elf32/Elf64) colors are added. */
diff --git a/nodefattr.diff b/nodefattr.diff
new file mode 100644
index 0000000..227668d
--- /dev/null
+++ b/nodefattr.diff
@@ -0,0 +1,15 @@
+Revert upstream patch that always uses %defattr(-,root,root).
+Upstream should probably use a macro instead.
+
+--- ./build/files.c.orig	2005-12-14 19:22:43.000000000 +0000
++++ ./build/files.c	2006-02-17 13:57:25.000000000 +0000
+@@ -2000,7 +2012,9 @@ static int processPackageFiles(Spec spec
+ 
+     nullAttrRec(&fl.cur_ar);
+     nullAttrRec(&fl.def_ar);
++#if 0
+     dupAttrRec(&root_ar, &fl.def_ar);	/* XXX assume %defattr(-,root,root) */
++#endif
+ 
+     fl.defVerifyFlags = RPMVERIFY_ALL;
+     fl.nLangs = 0;
diff --git a/nolua.diff b/nolua.diff
new file mode 100644
index 0000000..2244136
--- /dev/null
+++ b/nolua.diff
@@ -0,0 +1,83 @@
+Allow build without lua support.
+
+--- ./build/parseScript.c.orig	2005-12-16 18:34:36.000000000 +0000
++++ ./build/parseScript.c	2005-12-16 18:36:08.000000000 +0000
+@@ -283,6 +283,7 @@ int parseScript(Spec spec, int parsePart
+     stripTrailingBlanksStringBuf(sb);
+     p = getStringBuf(sb);
+ 
++#ifdef WITH_LUA
+     if (!strcmp(progArgv[0], "<lua>")) {
+ 	rpmlua lua = NULL; /* Global state. */
+ 	if (rpmluaCheckScript(lua, p, partname) != RPMRC_OK) {
+@@ -291,7 +292,9 @@ int parseScript(Spec spec, int parsePart
+ 	}
+ 	(void) rpmlibNeedsFeature(pkg->header,
+ 				  "BuiltinLuaScripts", "4.2.2-1");
+-    } else if (progArgv[0][0] == '<') {
++    } else
++#endif
++    if (progArgv[0][0] == '<') {
+ 	rpmError(RPMERR_BADSPEC,
+ 		 _("line %d: unsupported internal script: %s\n"),
+ 		 spec->lineNum, progArgv[0]);
+--- ./lib/psm.c.orig	2005-12-14 18:59:10.000000000 +0000
++++ ./lib/psm.c	2006-02-24 11:46:54.000000000 +0000
+@@ -490,6 +490,7 @@ static pid_t psmWait(rpmpsm psm)
+     return psm->sq.reaped;
+ }
+ 
++#ifdef WITH_LUA
+ /**
+  * Run internal Lua script.
+  */
+@@ -572,6 +573,7 @@ static rpmRC runLuaScript(rpmpsm psm, He
+ 
+     return rc;
+ }
++#endif
+ 
+ /**
+  */
+@@ -637,11 +639,15 @@ static rpmRC runScript(rpmpsm psm, Heade
+     xx = hge(h, RPMTAG_ARCH, NULL, (void **) &a, NULL);
+ 
+     if (progArgv && strcmp(progArgv[0], "<lua>") == 0) {
++#ifdef WITH_LUA
+ 	rpmMessage(RPMMESS_DEBUG,
+ 		_("%s: %s(%s-%s-%s.%s) running <lua> scriptlet.\n"),
+ 		psm->stepName, tag2sln(psm->scriptTag), n, v, r, a);
+ 	return runLuaScript(psm, h, sln, progArgc, progArgv,
+ 			    script, arg1, arg2);
++#else
++	return RPMRC_FAIL;
++#endif
+     }
+ 
+     psm->sq.reaper = 1;
+--- ./lib/rpmlibprov.c.orig	2004-03-16 21:58:29.000000000 +0000
++++ ./lib/rpmlibprov.c	2006-06-14 13:52:46.000000000 +0000
+@@ -51,9 +54,11 @@ static struct rpmlibProvides_s rpmlibPro
+     { "rpmlib(ConcurrentAccess)",    "4.1-1",
+ 	(                RPMSENSE_EQUAL),
+     N_("package scriptlets may access the rpm database while installing.") },
++#ifdef WITH_LUA
+     { "rpmlib(BuiltinLuaScripts)",    "4.2.2-1",
+ 	(                RPMSENSE_EQUAL),
+     N_("internal support for lua scripts.") },
++#endif
+     { NULL,				NULL, 0,	NULL }
+ };
+ 
+--- ./lib/rpmrc.c.orig	2005-01-17 18:46:23.000000000 +0000
++++ ./lib/rpmrc.c	2005-12-16 18:30:29.000000000 +0000
+@@ -1883,7 +1873,9 @@ int rpmReadConfigFiles(const char * file
+     }
+ 
+     /* Force Lua state initialization */
++#ifdef WITH_LUA
+     (void)rpmluaGetPrintBuffer(NULL);
++#endif
+ 
+     return 0;
+ }
diff --git a/nomagiccheck.diff b/nomagiccheck.diff
deleted file mode 100644
index 1ae6ccf..0000000
--- a/nomagiccheck.diff
+++ /dev/null
@@ -1,13 +0,0 @@
-Don't let rpm complain about a missing /etc/magic.mgc file
-
---- build/rpmfc.c.orig	2011-05-13 16:33:20.000000000 +0000
-+++ build/rpmfc.c	2011-05-13 16:33:55.000000000 +0000
-@@ -896,7 +896,7 @@ rpmRC rpmfcClassify(rpmfc fc, ARGV_t arg
- {
-     ARGV_t fcav = NULL;
-     int xx;
--    int msflags = MAGIC_CHECK | MAGIC_COMPRESS | MAGIC_NO_CHECK_TOKENS;
-+    int msflags = MAGIC_COMPRESS | MAGIC_NO_CHECK_TOKENS;
-     magic_t ms = NULL;
-     rpmRC rc = RPMRC_FAIL;
- 
diff --git a/noneon.diff b/noneon.diff
new file mode 100644
index 0000000..b1ff9ca
--- /dev/null
+++ b/noneon.diff
@@ -0,0 +1,292 @@
+Allow build without the neon library. Resurrects old httpOpen
+code from rpm-4.1.1.
+Building without neon means no webdav file uploads, though.
+
+--- ./rpmio/rpmdav.c.orig	2005-12-16 18:04:29.000000000 +0000
++++ ./rpmio/rpmdav.c	2005-12-16 18:17:53.000000000 +0000
+@@ -9,6 +9,8 @@
+ #include <pthread.h>
+ #endif
+ 
++#ifdef WITH_NEON
++
+ #include "ne_alloc.h"
+ #include "ne_auth.h"
+ #include "ne_basic.h"
+@@ -27,6 +29,8 @@
+ #include "ne_string.h"
+ #include "ne_utils.h"
+ 
++#endif /* WITH_NEON */
++
+ #include <rpmio_internal.h>
+ 
+ #define _RPMDAV_INTERNAL
+@@ -61,6 +65,8 @@ _free(/*@only@*/ /*@null@*/ /*@out@*/ co
+     return NULL;
+ }
+ 
++#ifdef WITH_NEON
++
+ /* =============================================================== */
+ static int davFree(urlinfo u)
+ 	/*@globals internalState @*/
+@@ -1370,6 +1376,8 @@ fprintf(stderr, "*** davReadlink(%s) rc 
+ }
+ #endif	/* NOTYET */
+ 
++#endif /* WITH_NEON */
++
+ /* =============================================================== */
+ /*@unchecked@*/
+ int avmagicdir = 0x3607113;
+@@ -1494,6 +1502,8 @@ fprintf(stderr, "*** avOpendir(%s)\n", p
+ }
+ /*@=boundswrite@*/
+ 
++#ifdef WITH_NEON
++
+ /* =============================================================== */
+ /*@unchecked@*/
+ int davmagicdir = 0x8440291;
+@@ -1661,4 +1671,6 @@ fprintf(stderr, "*** davOpendir(%s)\n", 
+     return (DIR *) avdir;
+ /*@=kepttrans@*/
+ }
++
++#endif /* WITH_NEON */
+ /*@=modfilesys@*/
+--- ./rpmio/rpmio.c.orig	2005-01-26 03:39:58.000000000 +0000
++++ ./rpmio/rpmio.c	2005-12-16 17:51:19.000000000 +0000
+@@ -371,7 +371,11 @@ static ssize_t fdRead(void * cookie, /*@
+ /*@-boundswrite@*/
+     /* HACK: flimsy wiring for davRead */
+     if (fd->req != NULL) {
++#ifdef WITH_NEON
+ 	rc = davRead(fd, buf, (count > fd->bytesRemain ? fd->bytesRemain : count));
++#else
++	rc = -1;
++#endif
+ 	/* XXX Chunked davRead EOF. */
+ 	if (rc == 0)
+ 	    fd->bytesRemain = 0;
+@@ -404,9 +408,13 @@ static ssize_t fdWrite(void * cookie, co
+     fdstat_enter(fd, FDSTAT_WRITE);
+ /*@-boundsread@*/
+     /* HACK: flimsy wiring for davWrite */
+-    if (fd->req != NULL)
++    if (fd->req != NULL) {
++#ifdef WITH_NEON
+ 	rc = davWrite(fd, buf, (count > fd->bytesRemain ? fd->bytesRemain : count));
+-    else
++#else
++	return -1;
++#endif
++    } else
+ 	rc = write(fdno, buf, (count > fd->bytesRemain ? fd->bytesRemain : count));
+ /*@=boundsread@*/
+     fdstat_exit(fd, FDSTAT_WRITE, rc);
+@@ -455,9 +463,13 @@ static int fdClose( /*@only@*/ void * co
+     fdstat_enter(fd, FDSTAT_CLOSE);
+     /* HACK: flimsy wiring for davClose */
+ /*@-branchstate@*/
+-    if (fd->req != NULL)
++    if (fd->req != NULL) {
++#ifdef WITH_NEON
+ 	rc = davClose(fd);
+-    else
++#else
++	return -1;
++#endif
++    } else
+ 	rc = ((fdno >= 0) ? close(fdno) : -2);
+ /*@=branchstate@*/
+     fdstat_exit(fd, FDSTAT_CLOSE, rc);
+@@ -2029,6 +2041,56 @@ exit:
+ }
+ /*@=nullstate@*/
+ 
++#ifndef WITH_NEON
++/*@-nullstate@*/        /* FIX: u->{ctrl,data}->url undef after XurlLink. */
++static /*@null@*/ FD_t httpOpen(const char * url, /*@unused@*/ int flags,
++                /*@unused@*/ mode_t mode, /*@out@*/ urlinfo * uret)
++        /*@globals internalState @*/
++        /*@modifies *uret, internalState @*/
++{
++    urlinfo u = NULL;
++    FD_t fd = NULL;
++
++#if 0   /* XXX makeTempFile() heartburn */
++    assert(!(flags & O_RDWR));
++#endif
++    if (urlSplit(url, &u))
++        goto exit;
++
++    if (u->ctrl == NULL)
++        u->ctrl = fdNew("persist ctrl (httpOpen)");
++    if (u->ctrl->nrefs > 2 && u->data == NULL)
++        u->data = fdNew("persist data (httpOpen)");
++
++    if (u->ctrl->url == NULL)
++        fd = fdLink(u->ctrl, "grab ctrl (httpOpen persist ctrl)");
++    else if (u->data->url == NULL)
++        fd = fdLink(u->data, "grab ctrl (httpOpen persist data)");
++    else
++        fd = fdNew("grab ctrl (httpOpen)");
++
++    if (fd) {
++        fdSetIo(fd, ufdio);
++        fd->ftpFileDoneNeeded = 0;
++        fd->rd_timeoutsecs = httpTimeoutSecs;
++        fd->contentLength = fd->bytesRemain = -1;
++        fd->url = urlLink(u, "url (httpOpen)");
++        fd = fdLink(fd, "grab data (httpOpen)");
++        fd->urlType = URL_IS_HTTP;
++    }
++
++exit:
++/*@-boundswrite@*/
++    if (uret)
++        *uret = u;
++/*@=boundswrite@*/
++    /*@-refcounttrans@*/
++    return fd;
++    /*@=refcounttrans@*/
++}
++/*@=nullstate@*/
++#endif
++
+ static /*@null@*/ FD_t ufdOpen(const char * url, int flags, mode_t mode)
+ 	/*@globals h_errno, fileSystem, internalState @*/
+ 	/*@modifies fileSystem, internalState @*/
+@@ -2067,7 +2129,11 @@ fprintf(stderr, "*** ufdOpen(%s,0x%x,0%o
+     case URL_IS_HTTPS:
+     case URL_IS_HTTP:
+     case URL_IS_HKP:
++#ifdef WITH_NEON
+ 	fd = davOpen(url, flags, mode, &u);
++#else
++	fd = httpOpen(url, flags, mode, &u);
++#endif
+ 	if (fd == NULL || u == NULL)
+ 	    break;
+ 
+@@ -2075,7 +2141,11 @@ fprintf(stderr, "*** ufdOpen(%s,0x%x,0%o
+ 		?  ((flags & O_APPEND) ? "PUT" :
+ 		   ((flags & O_CREAT) ? "PUT" : "PUT"))
+ 		: "GET");
++#ifdef WITH_NEON
+ 	u->openError = davReq(fd, cmd, path);
++#else
++	u->openError = httpReq(fd, cmd, path);
++#endif
+ 	if (u->openError < 0) {
+ 	    /* XXX make sure that we can exit through ufdClose */
+ 	    fd = fdLink(fd, "error ctrl (ufdOpen HTTP)");
+--- ./rpmio/rpmrpc.c.orig	2005-12-16 15:01:26.000000000 +0000
++++ ./rpmio/rpmrpc.c	2006-02-13 18:55:39.000000000 +0000
+@@ -93,7 +93,9 @@ int Mkdir (const char * path, mode_t mod
+ 	/*@notreached@*/ break;
+     case URL_IS_HTTPS:
+     case URL_IS_HTTP:
++#ifdef WITH_NEON
+ 	return davMkdir(path, mode);
++#endif
+ 	/*@notreached@*/ break;
+     case URL_IS_PATH:
+ 	path = lpath;
+@@ -151,7 +153,9 @@ int Rmdir (const char * path)
+ 	/*@notreached@*/ break;
+     case URL_IS_HTTPS:
+     case URL_IS_HTTP:
++#ifdef WITH_NEON
+ 	return davRmdir(path);
++#endif
+ 	/*@notreached@*/ break;
+     case URL_IS_PATH:
+ 	path = lpath;
+@@ -182,7 +186,9 @@ int Rename (const char * oldpath, const 
+     switch (oldut) {
+     case URL_IS_HTTPS:
+     case URL_IS_HTTP:
++#ifdef WITH_NEON
+ 	return davRename(oldpath, newpath);
++#endif
+ 	/*@notreached@*/ break;
+     case URL_IS_FTP:		/* XXX WRONG WRONG WRONG */
+     case URL_IS_PATH:
+@@ -280,7 +286,9 @@ int Unlink(const char * path) {
+ 	/*@notreached@*/ break;
+     case URL_IS_HTTPS:
+     case URL_IS_HTTP:
++#ifdef WITH_NEON
+ 	return davUnlink(path);
++#endif
+ 	/*@notreached@*/ break;
+     case URL_IS_PATH:
+ 	path = lpath;
+@@ -1282,7 +1290,9 @@ fprintf(stderr, "*** Stat(%s,%p)\n", pat
+ 	/*@notreached@*/ break;
+     case URL_IS_HTTPS:
+     case URL_IS_HTTP:
++#ifdef WITH_NEON
+ 	return davStat(path, st);
++#endif
+ 	/*@notreached@*/ break;
+     case URL_IS_PATH:
+ 	path = lpath;
+@@ -1311,7 +1321,9 @@ fprintf(stderr, "*** Lstat(%s,%p)\n", pa
+ 	/*@notreached@*/ break;
+     case URL_IS_HTTPS:
+     case URL_IS_HTTP:
++#ifdef WITH_NEON
+ 	return davLstat(path, st);
++#endif
+ 	/*@notreached@*/ break;
+     case URL_IS_PATH:
+ 	path = lpath;
+@@ -1489,7 +1502,9 @@ fprintf(stderr, "*** Opendir(%s)\n", pat
+ 	/*@notreached@*/ break;
+     case URL_IS_HTTPS:	
+     case URL_IS_HTTP:
++#ifdef WITH_NEON
+ 	return davOpendir(path);
++#endif
+ 	/*@notreached@*/ break;
+     case URL_IS_PATH:
+ 	path = lpath;
+@@ -1515,8 +1530,10 @@ fprintf(stderr, "*** Readdir(%p)\n", (vo
+ 	return NULL;
+     if (ISAVMAGIC(dir))
+ 	return avReaddir(dir);
++#ifdef WITH_NEON
+     if (ISDAVMAGIC(dir))
+ 	return davReaddir(dir);
++#endif
+     return readdir(dir);
+ }
+ 
+@@ -1528,8 +1545,10 @@ fprintf(stderr, "*** Closedir(%p)\n", (v
+ 	return 0;
+     if (ISAVMAGIC(dir))
+ 	return avClosedir(dir);
++#ifdef WITH_NEON
+     if (ISDAVMAGIC(dir))
+ 	return davClosedir(dir);
++#endif
+     return closedir(dir);
+ }
+ 
+--- ./rpmio/url.c.orig	2005-12-16 15:24:25.000000000 +0000
++++ ./rpmio/url.c	2005-12-16 17:08:21.000000000 +0000
+@@ -147,8 +147,10 @@ URLDBGREFS(0, (stderr, "--> url %p -- %d
+ 	/*@=usereleased@*/
+     }
+     if (u->sess != NULL) {
++#ifdef WITH_NEON
+ 	/* HACK: neon include has prototype. */
+ 	ne_session_destroy(u->sess);
++#endif
+ 	u->sess = NULL;
+     }
+     u->buf = _free(u->buf);
diff --git a/noprereqdeprec.diff b/noprereqdeprec.diff
deleted file mode 100644
index 5d38711..0000000
--- a/noprereqdeprec.diff
+++ /dev/null
@@ -1,22 +0,0 @@
-Not deprecated for SUSE builds.
-
---- ./build/parsePreamble.c.orig	2011-05-11 15:59:08.000000000 +0000
-+++ ./build/parsePreamble.c	2011-05-11 16:35:47.000000000 +0000
-@@ -891,7 +891,7 @@ static struct PreambleRec_s const preamb
-     {RPMTAG_ICON,		0, 0, LEN_AND_STR("icon")},
-     {RPMTAG_PROVIDEFLAGS,	0, 0, LEN_AND_STR("provides")},
-     {RPMTAG_REQUIREFLAGS,	2, 0, LEN_AND_STR("requires")},
--    {RPMTAG_PREREQ,		2, 1, LEN_AND_STR("prereq")},
-+    {RPMTAG_PREREQ,		2, 0, LEN_AND_STR("prereq")},
-     {RPMTAG_CONFLICTFLAGS,	0, 0, LEN_AND_STR("conflicts")},
-     {RPMTAG_OBSOLETEFLAGS,	0, 0, LEN_AND_STR("obsoletes")},
-     {RPMTAG_PREFIXES,		0, 0, LEN_AND_STR("prefixes")},
-@@ -900,7 +900,7 @@ static struct PreambleRec_s const preamb
-     {RPMTAG_BUILDARCHS,		0, 0, LEN_AND_STR("buildarchitectures")},
-     {RPMTAG_BUILDARCHS,		0, 0, LEN_AND_STR("buildarch")},
-     {RPMTAG_BUILDCONFLICTS,	0, 0, LEN_AND_STR("buildconflicts")},
--    {RPMTAG_BUILDPREREQ,	0, 1, LEN_AND_STR("buildprereq")},
-+    {RPMTAG_BUILDPREREQ,	0, 0, LEN_AND_STR("buildprereq")},
-     {RPMTAG_BUILDREQUIRES,	0, 0, LEN_AND_STR("buildrequires")},
-     {RPMTAG_AUTOREQPROV,	0, 0, LEN_AND_STR("autoreqprov")},
-     {RPMTAG_AUTOREQ,		0, 0, LEN_AND_STR("autoreq")},
diff --git a/nostdoutclose.diff b/nostdoutclose.diff
new file mode 100644
index 0000000..3810ecf
--- /dev/null
+++ b/nostdoutclose.diff
@@ -0,0 +1,13 @@
+Do not close stdout for scriptlets.
+
+--- ./lib/psm.c.orig	2005-12-14 18:59:10.000000000 +0000
++++ ./lib/psm.c	2006-02-24 11:46:54.000000000 +0000
+@@ -829,7 +837,7 @@ static rpmRC runScript(rpmpsm psm, Heade
+ 		xx = Fclose (out);
+ 	    if (sfdno > STDERR_FILENO)
+ 		xx = Fclose (scriptFd);
+-	    else {
++	    else if (Fileno(out) > STDERR_FILENO) {
+ /*@-usereleased@*/
+ 		xx = Fclose(out);
+ /*@=usereleased@*/
diff --git a/obeynodbsync.diff b/obeynodbsync.diff
new file mode 100644
index 0000000..abd73dd
--- /dev/null
+++ b/obeynodbsync.diff
@@ -0,0 +1,14 @@
+Make rpmdbSync obey the no_dbsync flag
+
+--- ./rpmdb/rpmdb.c.orig	2005-02-16 03:18:19.000000000 +0000
++++ ./rpmdb/rpmdb.c	2006-02-21 20:37:44.000000000 +0000
+ /*@=incondefs@*/
+@@ -906,6 +937,8 @@ int rpmdbSync(rpmdb db)
+ 	int xx;
+ 	if (db->_dbi[dbix] == NULL)
+ 	    continue;
++	if (db->_dbi[dbix]->dbi_no_dbsync)
++	    continue;
+     	xx = dbiSync(db->_dbi[dbix], 0);
+ 	if (xx && rc == 0) rc = xx;
+     }
diff --git a/openallbuttemp.diff b/openallbuttemp.diff
new file mode 100644
index 0000000..156e274
--- /dev/null
+++ b/openallbuttemp.diff
@@ -0,0 +1,55 @@
+Open all rpm databases before doing chroot. [#43266], [#44584]
+rh#103852
+
+Already in rpm-4.4.7, configurable with a macro (for whatever reason).
+
+--- ./lib/transaction.c.orig	2005-12-14 21:15:40.000000000 +0000
++++ ./lib/transaction.c	2006-01-27 20:05:40.000000000 +0000
+@@ -1677,8 +1859,10 @@ rpmMessage(RPMMESS_DEBUG, _("computing %
+ 	const char * rootDir = rpmtsRootDir(ts);
+ 	xx = chdir("/");
+ 	/*@-superuser -noeffect @*/
+-	if (rootDir != NULL && strcmp(rootDir, "/") && *rootDir == '/')
++	if (rootDir != NULL && strcmp(rootDir, "/") && *rootDir == '/') {
++	    rpmdbOpenAllButTemporary(ts->rdb);
+ 	    xx = chroot(rootDir);
++	}
+ 	/*@=superuser =noeffect @*/
+ 	(void) rpmtsSetChrootDone(ts, 1);
+     }
+--- ./rpmdb/rpmdb.c.orig	2005-02-16 03:18:19.000000000 +0000
++++ ./rpmdb/rpmdb.c	2006-02-21 20:37:44.000000000 +0000
+@@ -811,6 +811,33 @@ int rpmdbOpenAll(rpmdb db)
+     return rc;
+ }
+ 
++int rpmdbOpenAllButTemporary(rpmdb db)
++{
++    int dbix;
++    int rc = 0;
++
++    if (db == NULL) return -2;
++
++    if (dbiTags != NULL)
++    for (dbix = 0; dbix < dbiTagsMax; dbix++) {
++	if (db->_dbi[dbix] != NULL)
++	    continue;
++	/* Filter out temporary databases */
++	switch ((dbiTags[dbix])) {
++	case RPMDBI_AVAILABLE:
++	case RPMDBI_ADDED:
++	case RPMDBI_REMOVED:
++	case RPMDBI_DEPENDS:
++	    continue;
++	    /*@notreached@*/ /*@switchbreak@*/ break;
++	default:
++	    /*@switchbreak@*/ break;
++	}
++	(void) dbiOpen(db, dbiTags[dbix], db->db_flags);
++    }
++    return rc;
++}
++
+ int rpmdbCloseDBI(rpmdb db, int rpmtag)
+ {
+     int dbix;
diff --git a/patchrpms.diff b/patchrpms.diff
new file mode 100644
index 0000000..050189d
--- /dev/null
+++ b/patchrpms.diff
@@ -0,0 +1,743 @@
+Add support for patch rpms. Maybe not needed that much any more,
+as delta rpms are more efficient and do not need so much evil
+rpm patchery.
+rh#103205
+
+Index: lib/depends.c
+===================================================================
+--- lib/depends.c.orig
++++ lib/depends.c
+@@ -159,6 +159,7 @@ int rpmtsAddInstallElement(rpmts ts, Hea
+     const char * os;
+     rpmds oldChk, newChk;
+     rpmds obsoletes;
++    rpmds patches;
+     alKey pkgKey;	/* addedPackages key */
+     int xx;
+     int ec = 0;
+@@ -387,6 +388,40 @@ addheader:
+     }
+     obsoletes = rpmdsFree(obsoletes);
+ 
++    patches = rpmdsLink(rpmteDS(p, RPMTAG_PATCHESNAME), "Patches");
++    patches = rpmdsInit(patches);
++    if (patches != NULL)
++    while (rpmdsNext(patches) >= 0) {
++	const char * Name;
++
++	if ((Name = rpmdsN(patches)) == NULL)
++	    continue;   /* XXX can't happen */
++
++	/* Ignore colored patches  not in our rainbow. */
++	dscolor = rpmdsColor(patches);
++	if (tscolor && dscolor && !(tscolor & dscolor))
++	    continue;
++
++	mi = rpmtsInitIterator(ts, RPMTAG_NAME, Name, 0);
++
++	xx = rpmdbPruneIterator(mi,
++	    ts->removedPackages, ts->numRemovedPackages, 1);
++
++	while((oh = rpmdbNextIterator(mi)) != NULL) {
++	    /* Ignore colored packages not in our rainbow. */
++	    ohcolor = hGetColor(oh);
++	    if (tscolor && hcolor && ohcolor && !(hcolor & ohcolor))
++		/*@innercontinue@*/ continue;
++	    if (rpmdsEVR(patches) == NULL
++	     || rpmdsNVRMatchesDep(oh, patches, _rpmds_nopromote)) {
++		if (rpmVersionCompare(h, oh))
++		    xx = removePackage(ts, oh, rpmdbGetIteratorOffset(mi), pkgKey);
++	    }
++	}
++	mi = rpmdbFreeIterator(mi);
++    }
++    patches = rpmdsFree(patches);
++
+     ec = 0;
+ 
+ exit:
+@@ -644,6 +679,57 @@ exit:
+     return rc;
+ }
+ 
++static int checkPatchDeps(rpmts ts, rpmte p, int reportprobs)
++{
++    const char * Name;
++    Header h;
++    rpmds patches;
++    rpmds this;
++    rpmdbMatchIterator mi;
++
++    patches = rpmdsInit(rpmteDS(p, RPMTAG_PATCHESNAME));
++    if (!patches)
++	return 0;
++    this = rpmteDS(p, RPMTAG_NAME);
++
++    mi = rpmtsInitIterator(ts, RPMTAG_NAME, rpmdsN(this), 0);
++    while ((h = rpmdbNextIterator(mi)) != NULL) {
++	if (rpmdsNVRMatchesDep(h, this, _rpmds_nopromote)) {
++	    rpmdsNotify(this, _("(patch refresh)"), 0);
++	    p->hPatched = headerLink(h);
++	    p->isPatchRefresh = 1;
++	    mi = rpmdbFreeIterator(mi);
++	    return 0;
++	}
++    }
++    mi = rpmdbFreeIterator(mi);
++
++    while (rpmdsNext(patches) >= 0) {
++	if ((Name = rpmdsN(patches)) == NULL)
++	    return 1;   /* XXX can't happen */
++	mi = rpmtsInitIterator(ts, RPMTAG_NAME, Name, 0);
++	while ((h = rpmdbNextIterator(mi)) != NULL) {
++	    if (rpmdsNVRMatchesDep(h, patches, _rpmds_nopromote)) {
++		rpmdsNotify(patches, _("(db package)"), 0);
++		p->hPatched = headerLink(h);
++		p->isPatchRefresh = 0;
++		mi = rpmdbFreeIterator(mi);
++		return 0;
++	    }
++	}
++	mi = rpmdbFreeIterator(mi);
++    }
++
++    rpmdsNotify(patches, NULL, 1);
++    if (reportprobs) {
++	patches = rpmdsInit(patches);
++	rpmdsNext(patches);
++	rpmdsProblem(ts->probs, rpmteNEVR(p), patches, NULL, 1);
++    }
++    return 0;
++}
++
++
+ /**
+  * Check added requires/conflicts against against installed+added packages.
+  * @param ts		transaction set
+@@ -1727,6 +1813,7 @@ int rpmtsCheck(rpmts ts)
+ 			rpmteDS(p, RPMTAG_CONFLICTNAME),
+ 			NULL,
+ 			tscolor, 1);
++	rc |= checkPatchDeps(ts, p, 1);
+ 	if (rc)
+ 	    goto exit;
+ 
+@@ -1824,3 +1911,22 @@ exit:
+     /*@=branchstate@*/
+     return rc;
+ }
++
++void rpmtsPatchCheck(rpmts ts)
++{
++    int closeatexit = 0;
++    rpmtsi pi = NULL; rpmte p;
++
++    if (rpmtsGetRdb(ts) == NULL && ts->dbmode != -1) {
++	if ((rpmtsOpenDB(ts, ts->dbmode)) != 0)
++	    return;
++	closeatexit = 1;
++    }
++    pi = rpmtsiInit(ts);
++    while ((p = rpmtsiNext(pi, TR_ADDED)) != NULL)
++	if (p->key)     /* key is filename for install, zero for verify */
++	    (void)checkPatchDeps(ts, p, 0);
++    pi = rpmtsiFree(pi);
++    if (closeatexit)
++	(void)rpmtsCloseDB(ts);
++}
+Index: lib/formats.c
+===================================================================
+--- lib/formats.c.orig
++++ lib/formats.c
+@@ -232,6 +232,8 @@ static /*@only@*/ char * fflagsFormat(in
+ 	    strcat(buf, "l");
+ 	if (anint & RPMFILE_README)
+ 	    strcat(buf, "r");
++	if (anint & RPMFILE_UNPATCHED)
++	    strcat(buf, "u");
+ /*@=boundswrite@*/
+ 
+ 	val = xmalloc(5 + padding);
+Index: lib/fsm.c
+===================================================================
+--- lib/fsm.c.orig
++++ lib/fsm.c
+@@ -707,7 +707,7 @@ assert(rpmteType(fi->te) == TR_ADDED);
+ 	    break;
+ 
+ 	case FA_BACKUP:
+-	    if (!(fsm->fflags & RPMFILE_GHOST)) /* XXX Don't if %ghost file. */
++	    if (!(fsm->fflags & (RPMFILE_GHOST|RPMFILE_UNPATCHED))) /* XXX Don't if %ghost file. */
+ 	    switch (rpmteType(fi->te)) {
+ 	    case TR_ADDED:
+ 		fsm->osuffix = SUFFIX_RPMORIG;
+@@ -720,13 +720,13 @@ assert(rpmteType(fi->te) == TR_ADDED);
+ 
+ 	case FA_ALTNAME:
+ assert(rpmteType(fi->te) == TR_ADDED);
+-	    if (!(fsm->fflags & RPMFILE_GHOST)) /* XXX Don't if %ghost file. */
++	    if (!(fsm->fflags & (RPMFILE_GHOST|RPMFILE_UNPATCHED))) /* XXX Don't if %ghost file. */
+ 		fsm->nsuffix = SUFFIX_RPMNEW;
+ 	    break;
+ 
+ 	case FA_SAVE:
+ assert(rpmteType(fi->te) == TR_ADDED);
+-	    if (!(fsm->fflags & RPMFILE_GHOST)) /* XXX Don't if %ghost file. */
++	    if (!(fsm->fflags & (RPMFILE_GHOST|RPMFILE_UNPATCHED))) /* XXX Don't if %ghost file. */
+ 		fsm->osuffix = SUFFIX_RPMSAVE;
+ 	    break;
+ 	case FA_ERASE:
+@@ -1740,7 +1740,7 @@ int fsmStage(FSM_t fsm, fileStage stage)
+ 	}
+ 
+ 	if (fsm->goal == FSM_PKGBUILD) {
+-	    if (fsm->fflags & RPMFILE_GHOST) /* XXX Don't if %ghost file. */
++	    if (fsm->fflags & (RPMFILE_GHOST|RPMFILE_UNPATCHED)) /* XXX Don't if %ghost file. */
+ 		break;
+ 	    if (!S_ISDIR(st->st_mode) && st->st_nlink > 1) {
+ 		struct hardLink_s * li, * prev;
+Index: lib/poptQV.c
+===================================================================
+--- lib/poptQV.c.orig
++++ lib/poptQV.c
+@@ -171,6 +171,7 @@ static void queryArgCallback(poptContext
+     case 'l': qva->qva_flags |= QUERY_FOR_LIST; break;
+     case 's': qva->qva_flags |= QUERY_FOR_STATE | QUERY_FOR_LIST;
+ 	break;
++    case 'P': qva->qva_flags |= QUERY_FOR_PATCHES; break;
+     case POPT_DUMP: qva->qva_flags |= QUERY_FOR_DUMPFILES | QUERY_FOR_LIST;
+ 	break;
+ 
+@@ -278,6 +279,8 @@ struct poptOption rpmQueryPoptTable[] = 
+         N_("skip %%readme files"), NULL },
+ #endif
+ 
++ { "patches", 'P', 0, 0, 'P',
++	N_("list patches or patched files "), NULL },
+  { "qf", '\0', POPT_ARG_STRING | POPT_ARGFLAG_DOC_HIDDEN, 0, 
+ 	POPT_QUERYFORMAT, NULL, NULL },
+  { "queryformat", '\0', POPT_ARG_STRING, 0, POPT_QUERYFORMAT,
+Index: lib/query.c
+===================================================================
+--- lib/query.c.orig
++++ lib/query.c
+@@ -225,6 +225,10 @@ int showQueryPackage(QVA_t qva, rpmts ts
+ 	if ((qva->qva_fflags & RPMFILE_GHOST) && (fflags & RPMFILE_GHOST))
+ 	    continue;
+ 
++	/* If querying patches, skip unpatched files. */
++	if ((qva->qva_flags & QUERY_FOR_PATCHES) && (fflags & RPMFILE_UNPATCHED))
++	    continue;
++
+ /*@-boundswrite@*/
+ 	if (!rpmIsVerbose() && prefix)
+ 	    te = stpcpy(te, prefix);
+@@ -362,6 +366,21 @@ void rpmDisplayQueryTags(FILE * fp)
+     }
+ }
+ 
++static int isPatch(Header h)
++{
++    int i, requiresCount = 0;
++    const char ** requires;
++
++    if (!headerGetEntry(h, RPMTAG_REQUIRENAME, NULL, (void **) &requires, &requiresCount))
++	return 0;
++    for (i = 0; i < requiresCount; i++)
++	if (!strcmp("rpmlib(PatchRPMs)", requires[i]))
++	    break;
++    if (requiresCount)
++	free(requires);
++    return i < requiresCount;
++}
++
+ static int rpmgiShowMatches(QVA_t qva, rpmts ts)
+ 	/*@globals rpmGlobalMacroContext, h_errno, internalState @*/
+         /*@modifies qva, rpmGlobalMacroContext, h_errno, internalState @*/
+@@ -376,6 +395,8 @@ static int rpmgiShowMatches(QVA_t qva, r
+ 	h = rpmgiHeader(gi);
+ 	if (h == NULL)		/* XXX perhaps stricter break instead? */
+ 	    continue;
++	if ((qva->qva_flags & QUERY_FOR_PATCHES) != 0 && !isPatch(h))
++	    continue;
+ 	if ((rc = qva->qva_showPackage(qva, ts, h)) != 0)
+ 	    ec = rc;
+ 	if (qva->qva_source == RPMQV_DBOFFSET)
+@@ -391,6 +412,8 @@ int rpmcliShowMatches(QVA_t qva, rpmts t
+ 
+     while ((h = rpmdbNextIterator(qva->qva_mi)) != NULL) {
+ 	int rc;
++	if ((qva->qva_flags & QUERY_FOR_PATCHES) != 0 && !isPatch(h))
++	    continue;
+ 	if ((rc = qva->qva_showPackage(qva, ts, h)) != 0)
+ 	    ec = rc;
+ 	if (qva->qva_source == RPMQV_DBOFFSET)
+@@ -685,7 +708,15 @@ int rpmcliArgIter(rpmts ts, QVA_t qva, A
+ 
+     switch (qva->qva_source) {
+     case RPMQV_ALL:
+-	qva->qva_gi = rpmgiNew(ts, RPMDBI_PACKAGES, NULL, 0);
++	if ((!argv || !*argv) && (qva->qva_flags & QUERY_FOR_PATCHES) != 0) {
++	    qva->qva_gi = rpmgiNew(ts, RPMTAG_REQUIRENAME, "rpmlib(PatchRPMs)", 0);
++	    if (qva->qva_gi->mi == NULL) {
++		rpmError(RPMERR_QUERYINFO, _("no patch-rpm installed\n"));
++		break;
++	    }
++	} else {
++	    qva->qva_gi = rpmgiNew(ts, RPMDBI_PACKAGES, NULL, 0);
++	}
+ 	qva->qva_rc = rpmgiSetArgs(qva->qva_gi, argv, ftsOpts, RPMGI_NONE);
+ 
+ 	if (qva->qva_gi != NULL && (qva->qva_gi->flags & RPMGI_TSADD))	/* Load the ts with headers. */
+Index: lib/rpmcli.h
+===================================================================
+--- lib/rpmcli.h.orig
++++ lib/rpmcli.h
+@@ -165,7 +165,7 @@ typedef enum rpmQueryFlags_e {
+     QUERY_SCRIPT	= (1 << 18),	/*!< verify: from --noscripts */
+     QUERY_DIGEST	= (1 << 19),	/*!< verify: from --nodigest */
+     QUERY_SIGNATURE	= (1 << 20),	/*!< verify: from --nosignature */
+-    QUERY_PATCHES	= (1 << 21),	/*!< verify: from --nopatches */
++    QUERY_FOR_PATCHES	= (1 << 21),	/*!< verify: from --patches */
+     QUERY_HDRCHK	= (1 << 22),	/*!< verify: from --nohdrchk */
+ /*@=enummemuse@*/
+     QUERY_FOR_LIST	= (1 << 23),	/*!< query:  from --list */
+Index: lib/rpmds.c
+===================================================================
+--- lib/rpmds.c.orig
++++ lib/rpmds.c
+@@ -87,6 +87,10 @@ fprintf(stderr, "*** ds %p\t%s[%d]\n", d
+ 	tagEVR = RPMTAG_TRIGGERVERSION;
+ 	tagF = RPMTAG_TRIGGERFLAGS;
+     } else
++    if (ds->tagN == RPMTAG_PATCHESNAME) {
++	tagEVR = RPMTAG_PATCHESVERSION;
++	tagF = RPMTAG_PATCHESFLAGS;
++    } else
+ 	return NULL;
+ 
+     /*@-branchstate@*/
+@@ -325,6 +329,11 @@ rpmds rpmdsNew(Header h, rpmTag tagN, in
+ 	tagEVR = RPMTAG_ENHANCESVERSION;
+ 	tagF = RPMTAG_ENHANCESFLAGS;
+     } else
++    if (tagN == RPMTAG_PATCHESNAME) {
++	Type = "patches";
++	tagEVR = RPMTAG_PATCHESVERSION;
++	tagF = RPMTAG_PATCHESFLAGS;
++    } else
+ 	goto exit;
+ 
+     /*@-branchstate@*/
+@@ -1127,14 +1136,28 @@ void rpmdsProblem(rpmps ps, const char *
+     if (DNEVR == NULL) DNEVR = "? ?N? ?OP? ?EVR?";
+     /*@=branchstate@*/
+ 
+-    rpmMessage(RPMMESS_DEBUG, _("package %s has unsatisfied %s: %s\n"),
+-	    pkgNEVR, ds->Type, DNEVR+2);
+-
+     switch ((unsigned)DNEVR[0]) {
+     case 'C':	type = RPMPROB_CONFLICT;	break;
+     default:
+     case 'R':	type = RPMPROB_REQUIRES;	break;
+     }
++    if (DNEVR[0] == 'p') {
++	const char *d;
++	char *dn;
++	rpmds pds = rpmdsInit(ds);
++        dn = xstrdup("p ");
++	while (rpmdsNext(pds) >= 0) {
++	    d = rpmdsDNEVR(ds) + 2;
++	    dn = xrealloc(dn, strlen(dn) + strlen(d) + 4);
++	    if (dn[2])
++		strcat(dn, " | ");
++	    strcat(dn, d);
++	}
++	DNEVR = (const char *)dn;
++    }
++
++    rpmMessage(RPMMESS_DEBUG, _("package %s has unsatisfied %s: %s\n"),
++	    pkgNEVR, ds->Type, DNEVR+2);
+ 
+     key = (suggestedKeys ? suggestedKeys[0] : NULL);
+     rpmpsAppend(ps, type, pkgNEVR, key, NULL, NULL, DNEVR, adding);
+Index: lib/rpminstall.c
+===================================================================
+--- lib/rpminstall.c.orig
++++ lib/rpminstall.c
+@@ -692,6 +692,11 @@ maybe_manifest:
+ 	    /*@=branchstate@*/
+ 	}
+ 	ps = rpmpsFree(ps);
++    } else if (eiu->numRPMS) {
++	/* needed in rpmtsOrder */
++	rpmalMakeIndex(ts->addedPackages);
++	/* need patch references */
++	rpmtsPatchCheck(ts);
+     }
+ 
+     if (eiu->numRPMS && !(ia->installInterfaceFlags & INSTALL_NOORDER)) {
+@@ -797,7 +802,7 @@ int rpmErase(rpmts ts, struct rpmInstall
+     {	int notifyFlags;
+ 	notifyFlags = ia->eraseInterfaceFlags | (rpmIsVerbose() ? INSTALL_LABEL : 0 );
+ 	xx = rpmtsSetNotifyCallback(ts,
+-			rpmShowProgress, (void *) ((long)notifyFlags)
++			rpmShowProgress, (void *) ((long)notifyFlags))
+     }
+ #endif
+ 
+Index: lib/rpmlibprov.c
+===================================================================
+--- lib/rpmlibprov.c.orig
++++ lib/rpmlibprov.c
+@@ -33,6 +33,9 @@ static struct rpmlibProvides_s rpmlibPro
+     { "rpmlib(PayloadIsBzip2)",		"3.0.5-1",
+ 	(RPMSENSE_RPMLIB|RPMSENSE_EQUAL),
+     N_("package payload can be compressed using bzip2.") },
++    { "rpmlib(PatchRPMs)",		"3.0.6-1",
++        (RPMSENSE_RPMLIB|RPMSENSE_EQUAL),
++    N_("understand rpms that replace a subset of files.") },
+     { "rpmlib(PayloadFilesHavePrefix)",	"4.0-1",
+ 	(RPMSENSE_RPMLIB|RPMSENSE_EQUAL),
+     N_("package payload file(s) have \"./\" prefix.") },
+Index: lib/rpmte.c
+===================================================================
+--- lib/rpmte.c.orig
++++ lib/rpmte.c
+@@ -64,6 +64,7 @@ static void delTE(rpmte p)
+     p->NEVRA = _free(p->NEVRA);
+ 
+     p->h = headerFree(p->h);
++    p->hPatched = headerFree(p->hPatched);
+ 
+ /*@-boundswrite@*/
+     memset(p, 0, sizeof(*p));	/* XXX trash and burn */
+@@ -183,6 +184,9 @@ static void addTE(rpmts ts, rpmte p, Hea
+     p->requires = rpmdsNew(h, RPMTAG_REQUIRENAME, scareMem);
+     p->conflicts = rpmdsNew(h, RPMTAG_CONFLICTNAME, scareMem);
+     p->obsoletes = rpmdsNew(h, RPMTAG_OBSOLETENAME, scareMem);
++    p->patches = rpmdsNew(h, RPMTAG_PATCHESNAME, scareMem | 2);
++    p->hPatched = NULL;
++    p->isPatchRefresh = 0;
+ 
+     savep = rpmtsSetRelocateElement(ts, p);
+     p->fi = rpmfiNew(ts, h, RPMTAG_BASENAMES, scareMem);
+@@ -520,6 +524,9 @@ rpmds rpmteDS(rpmte te, rpmTag tag)
+     if (tag == RPMTAG_OBSOLETENAME)
+ 	return te->obsoletes;
+     else
++    if (tag == RPMTAG_PATCHESNAME)
++	return te->patches;
++    else
+ 	return NULL;
+     /*@=compdef =refcounttrans =retalias =retexpose =usereleased @*/
+ }
+Index: lib/rpmte.h
+===================================================================
+--- lib/rpmte.h.orig
++++ lib/rpmte.h
+@@ -115,6 +115,9 @@ struct rpmte_s {
+     int autorelocatex;		/*!< (TR_ADDED) Auto relocation entry index. */
+ /*@refcounted@*/ /*@null@*/	
+     FD_t fd;			/*!< (TR_ADDED) Payload file descriptor. */
++    rpmds patches;		/*!< Patches: dependencies. */
++    Header hPatched;		/*!< (TR_ADDED) Header of package we patch */
++    int isPatchRefresh;		/*!< (TR_ADDED) is a patch refresh */
+ 
+ /*@-fielduse@*/	/* LCL: confused by union? */
+     union {
+Index: lib/transaction.c
+===================================================================
+--- lib/transaction.c.orig
++++ lib/transaction.c
+@@ -198,6 +198,11 @@ static int handleInstInstalledFiles(cons
+ 	    int rConflicts;
+ 
+ 	    rConflicts = reportConflicts;
++	    if (rConflicts && p->hPatched && p->isPatchRefresh) {
++		/* If same package (patch refresh) turn off conflicts */
++		/* Handling of unpatched files not worth the trouble */
++		rConflicts = 0;
++	    }
+ 	    /* Resolve file conflicts to prefer Elf64 (if not forced). */
+ 	    if (tscolor != 0 && FColor != 0 && FColor != oFColor)
+ 	    {
+@@ -972,6 +977,176 @@ rpmfi rpmtsiFi(const rpmtsi tsi)
+     /*@=compdef =refcounttrans =usereleased @*/
+ }
+ 
++static int_32 *dupint32(int_32 *old, int cnt)
++{
++    int i;
++    int_32 *new = xmalloc(cnt * sizeof(int_32));
++    for (i = 0; i < cnt; i++)
++	new[i] = old[i];
++    return new;
++}
++
++static void patchUnpatchedFiles(Header oldh, Header h, int isRefresh)
++{
++    int fileCount, oldfileCount, i, j, oldidx, oldidxj;
++    const char ** baseNames, ** dirNames;
++    int_32 * dirIndexes;
++    int_32 * fileMtimes;
++    int_32 * fileSizes;
++    int_32 * fileFlags;
++    char ** fileMd5s;
++    const char ** oldbaseNames, ** olddirNames;
++    int_32 * olddirIndexes;
++    int_32 * oldfileMtimes;
++    int_32 * oldfileSizes;
++    int_32 * oldfileFlags;
++    char ** oldfileMd5s;
++    const char * name, * version, * release;
++    char * evr;
++    int_32 sense;
++    int_32 *epochp;
++    int save = 0;
++    char epoch[20];
++    const char ** oldpatches, **oldpatchesEVR = NULL;
++    int_32 * oldpatchesFlags;
++    int oldpatchesCount;
++
++    if (!oldh) {
++	headerRemoveEntry(h, RPMTAG_PATCHESNAME);
++	headerRemoveEntry(h, RPMTAG_PATCHESFLAGS);
++	headerRemoveEntry(h, RPMTAG_PATCHESVERSION);
++#if 1
++	name = "(none)";
++	sense = 0;
++	evr = "";
++	headerAddEntry(h, RPMTAG_PATCHESNAME, RPM_STRING_ARRAY_TYPE, &name, 1);
++	headerAddEntry(h, RPMTAG_PATCHESFLAGS, RPM_INT32_TYPE, &sense, 1);
++	headerAddEntry(h, RPMTAG_PATCHESVERSION, RPM_STRING_ARRAY_TYPE, &evr, 1);
++#endif
++	return;
++    }
++    if (!headerGetEntry(h, RPMTAG_BASENAMES, NULL,
++		  (void **) &baseNames, &fileCount))
++	return;
++    headerGetEntry(h, RPMTAG_DIRNAMES, NULL,
++		(void **) &dirNames, NULL);
++    headerGetEntry(h, RPMTAG_DIRINDEXES, NULL,
++		(void **) &dirIndexes, NULL);
++    headerGetEntry(h, RPMTAG_FILESIZES, NULL,
++		(void **) &fileSizes, NULL);
++    headerGetEntry(h, RPMTAG_FILEMD5S, NULL,
++		(void **) &fileMd5s, NULL);
++    headerGetEntry(h, RPMTAG_FILEMTIMES, NULL,
++		(void **) &fileMtimes, NULL);
++    headerGetEntry(h, RPMTAG_FILEFLAGS, NULL,
++		(void **) &fileFlags, NULL);
++
++    if (!headerGetEntry(oldh, RPMTAG_BASENAMES, NULL,
++		  (void **) &oldbaseNames, &oldfileCount))
++	return;
++    headerGetEntry(oldh, RPMTAG_DIRNAMES, NULL,
++		(void **) &olddirNames, NULL);
++    headerGetEntry(oldh, RPMTAG_DIRINDEXES, NULL,
++		(void **) &olddirIndexes, NULL);
++    headerGetEntry(oldh, RPMTAG_FILESIZES, NULL,
++		(void **) &oldfileSizes, NULL);
++    headerGetEntry(oldh, RPMTAG_FILEMD5S, NULL,
++		(void **) &oldfileMd5s, NULL);
++    headerGetEntry(oldh, RPMTAG_FILEMTIMES, NULL,
++		(void **) &oldfileMtimes, NULL);
++    headerGetEntry(oldh, RPMTAG_FILEFLAGS, NULL,
++		(void **) &oldfileFlags, NULL);
++
++    oldidx = -1;
++    oldidxj = 0;
++    for (i = 0; i < fileCount; i++) {
++	if (!(fileFlags[i] & RPMFILE_UNPATCHED))
++	    continue;
++	if (dirIndexes[i] != oldidx) {
++	    for (j = 0; j < oldfileCount; j++)
++		if (strcmp(dirNames[dirIndexes[i]], olddirNames[olddirIndexes[j]]) == 0)
++		    break;
++	    if (j == oldfileCount) {
++		while (i + 1 < fileCount && dirIndexes[i] == dirIndexes[i + 1])
++		    i++;
++		continue;
++	    }
++	    oldidx = olddirIndexes[j];
++	    oldidxj = j;
++	}
++	for (j = oldidxj; j < oldfileCount; j++)
++	    if (olddirIndexes[j] == oldidx && !strcmp(baseNames[i], oldbaseNames[j])) {
++		if (!save) {
++		    /* duplicate fileSizes, fileMtimes, fileFlags
++		     * so we can modify them */
++		    fileSizes = dupint32(fileSizes, fileCount);
++		    fileMtimes = dupint32(fileMtimes, fileCount);
++		    fileFlags = dupint32(fileFlags, fileCount);
++		}
++		fileSizes[i] = oldfileSizes[j];
++		fileMtimes[i] = oldfileMtimes[j];
++		fileMd5s[i] = oldfileMd5s[j];
++		fileFlags[i] = oldfileFlags[j] | RPMFILE_UNPATCHED;
++		save = 1;
++		break;
++	    }
++    }
++    if (save) {
++	headerModifyEntry(h, RPMTAG_FILESIZES, RPM_INT32_TYPE,
++		    (void *) fileSizes, fileCount);
++	headerModifyEntry(h, RPMTAG_FILEMD5S, RPM_STRING_ARRAY_TYPE,
++		    (void *) fileMd5s, fileCount);
++	headerModifyEntry(h, RPMTAG_FILEMTIMES, RPM_INT32_TYPE,
++		    (void *) fileMtimes, fileCount);
++	headerModifyEntry(h, RPMTAG_FILEFLAGS, RPM_INT32_TYPE,
++		    (void *) fileFlags, fileCount);
++	free(fileSizes);
++	free(fileMtimes);
++	free(fileFlags);
++    }
++    free(baseNames);
++    free(dirNames);
++    free(fileMd5s);
++    free(oldbaseNames);
++    free(olddirNames);
++    free(oldfileMd5s);
++
++    if (isRefresh) {
++	/* same patch installed, this is just a refresh operation */
++	headerRemoveEntry(h, RPMTAG_PATCHESNAME);
++	headerRemoveEntry(h, RPMTAG_PATCHESFLAGS);
++	headerRemoveEntry(h, RPMTAG_PATCHESVERSION);
++	if (headerGetEntry(oldh, RPMTAG_PATCHESNAME, NULL, (void **) &oldpatches, &oldpatchesCount) && oldpatchesCount) {
++	    headerGetEntry(oldh, RPMTAG_PATCHESFLAGS, NULL, (void **) &oldpatchesFlags, &oldpatchesCount);
++	    headerGetEntry(oldh, RPMTAG_PATCHESVERSION, NULL, (void **) &oldpatchesEVR, &oldpatchesCount);
++	    headerAddEntry(h, RPMTAG_PATCHESNAME, RPM_STRING_ARRAY_TYPE, oldpatches, oldpatchesCount);
++	    headerAddEntry(h, RPMTAG_PATCHESFLAGS, RPM_INT32_TYPE, oldpatchesFlags, oldpatchesCount);
++	    headerAddEntry(h, RPMTAG_PATCHESVERSION, RPM_STRING_ARRAY_TYPE, oldpatchesEVR, oldpatchesCount);
++	    free(oldpatches);
++	    free(oldpatchesEVR);
++	}
++	return;
++    }
++    headerNVR(oldh, &name, &version, &release);
++    *epoch = 0;
++    if (headerGetEntry(h, RPMTAG_EPOCH, NULL, (void **) &epochp, NULL))
++	sprintf(epoch, "%d:", *epochp);
++    evr = xmalloc(strlen(epoch) + strlen(version) + strlen(release) + 2);
++    strcpy(evr, epoch);
++    strcat(evr, version);
++    strcat(evr, "-");
++    strcat(evr, release);
++    sense = RPMSENSE_EQUAL;
++    headerRemoveEntry(h, RPMTAG_PATCHESNAME);
++    headerRemoveEntry(h, RPMTAG_PATCHESFLAGS);
++    headerRemoveEntry(h, RPMTAG_PATCHESVERSION);
++    headerAddEntry(h, RPMTAG_PATCHESNAME, RPM_STRING_ARRAY_TYPE, &name, 1);
++    headerAddEntry(h, RPMTAG_PATCHESFLAGS, RPM_INT32_TYPE, &sense, 1);
++    headerAddEntry(h, RPMTAG_PATCHESVERSION, RPM_STRING_ARRAY_TYPE, &evr, 1);
++    free(evr);
++}
++
++
+ /**
+  * This is not a generalized function to be called from outside
+  * librpm.  It is called internally by rpmtsRun() to rollback
+@@ -2137,6 +2312,8 @@ assert(psm != NULL);
+ 		}
+ 		psm->fi = rpmfiLink(p->fi, NULL);
+ 
++		if (p->hPatched || rpmteDS(p, RPMTAG_PATCHESNAME))
++		    patchUnpatchedFiles(p->hPatched, p->fi->h, p->isPatchRefresh);
+ /*@-nullstate@*/ /* FIX: psm->fi may be NULL */
+ 		if (rpmpsmStage(psm, PSM_PKGINSTALL)) {
+ 		    ourrc++;
+Index: doc/rpm.8
+===================================================================
+--- doc/rpm.8.orig
++++ doc/rpm.8
+@@ -68,7 +68,8 @@ rpm \- RPM Package Manager
+ 
+ 
+  [\fB\fIPACKAGE_NAME\fB\fR] [\fB-a,--all\fR] [\fB-f,--file \fIFILE\fB\fR]
+- [\fB-g,--group \fIGROUP\fB\fR] {\fB-p,--package \fIPACKAGE_FILE\fB\fR]
++ [\fB-g,--group \fIGROUP\fB\fR] [\fB-p,--package \fIPACKAGE_FILE\fB\fR]
++ [\fB-P,--patches\fR]
+  [\fB--fileid \fIMD5\fB\fR] [\fB--hdrid \fISHA1\fB\fR] [\fB--pkgid \fIMD5\fB\fR] [\fB--tid \fITID\fB\fR]
+  [\fB--querybynumber \fIHDRNUM\fB\fR] [\fB--triggeredby \fIPACKAGE_NAME\fB\fR]
+  [\fB--whatprovides \fICAPABILITY\fB\fR] [\fB--whatrequires \fICAPABILITY\fB\fR]
+@@ -77,7 +78,8 @@ rpm \- RPM Package Manager
+ .PP
+ 
+ 
+- [\fB--changelog\fR] [\fB-c,--configfiles\fR] [\fB-d,--docfiles\fR] [\fB--dump\fR]
++ [\fB--basedon\fR] [\fB--changelog\fR] [\fB-c,--configfiles\fR]
++ [\fB-d,--docfiles\fR] [\fB--dump\fR]
+  [\fB--filesbypkg\fR] [\fB-i,--info\fR] [\fB--last\fR] [\fB-l,--list\fR]
+  [\fB--provides\fR] [\fB--qf,--queryformat \fIQUERYFMT\fB\fR]
+  [\fB-R,--requires\fR] [\fB--scripts\fR] [\fB-s,--state\fR]
+@@ -547,6 +549,10 @@ that will be expanded to paths that are 
+ the package manifest as additional \fIPACKAGE_FILE\fR
+ arguments to the query.
+ .TP
++\fB-P, --patches\fP
++Limit the selected packages to patch-rpms. As a side effect, limit
++the file list to patched files.
++.TP
+ \fB--pkgid \fIMD5\fB\fR
+ Query package that contains a given package identifier, i.e. the
+ \fIMD5\fR digest of the combined header and
+@@ -581,6 +587,10 @@ Query all packages that requires \fICAPA
+ .SS "PACKAGE QUERY OPTIONS:"
+ .PP
+ .TP
++\fB--basedon\fR
++Show what packages a patch-rpm is based on. A patch-rpm can only be
++installed if one of the packages it is based on is installed.
++.TP
+ \fB--changelog\fR
+ Display change information for the package.
+ .TP
+@@ -618,7 +628,8 @@ Orders the package listing by install ti
+ packages are at the top.
+ .TP
+ \fB-l, --list\fR
+-List files in package.
++List files in package. If the \fB\-P\fP option is also given, only
++patched files are shown.
+ .TP
+ \fB--provides\fR
+ List capabilities this package provides.
+Index: rpmpopt.in
+===================================================================
+--- rpmpopt.in.orig
++++ rpmpopt.in
+@@ -76,6 +76,10 @@ rpm	alias --supplements	--qf \
+   "[%|ENHANCESFLAGS:depflag_strong?{%{ENHANCESNAME} %{ENHANCESFLAGS:depflags} %{ENHANCESVERSION}\n}|]" \
+ 	--POPTdesc=$"list capabilities this package supplements"
+ 
++rpm	alias --basedon		--qf \
++  "[%{PATCHESNAME} %{PATCHESFLAGS:depflags} %{PATCHESVERSION}\n]" \
++	--POPTdesc=$"list packages this patch-rpm is based on"
++
+ rpm	alias --info --qf 'Name        : %-27{NAME}  Relocations: %|PREFIXES?{[%{PREFIXES} ]}:{(not relocatable)}|\n\
+ Version     : %-27{VERSION}       Vendor: %{VENDOR}\n\
+ Release     : %-27{RELEASE}   Build Date: %{BUILDTIME:date}\n\
+@@ -373,6 +377,10 @@ rpmq	alias --supplements	--qf \
+   "[%|ENHANCESFLAGS:depflag_strong?{%{ENHANCESNAME} %{ENHANCESFLAGS:depflags} %{ENHANCESVERSION}\n}|]" \
+ 	--POPTdesc=$"list capabilities this package supplements"
+ 
++rpmq	alias --basedon		--qf \
++  "[%{PATCHESNAME} %{PATCHESFLAGS:depflags} %{PATCHESVERSION}\n]" \
++	--POPTdesc=$"list packages this patch-rpm is based on"
++
+ rpmq	alias --info --qf 'Name        : %-27{NAME}  Relocations: %|PREFIXES?{[%{PREFIXES} ]}:{(not relocatable)}|\n\
+ Version     : %-27{VERSION}       Vendor: %{VENDOR}\n\
+ Release     : %-27{RELEASE}   Build Date: %{BUILDTIME:date}\n\
+@@ -488,6 +496,10 @@ rpmquery	alias --supplements	--qf \
+   "[%|ENHANCESFLAGS:depflag_strong?{%{ENHANCESNAME} %{ENHANCESFLAGS:depflags} %{ENHANCESVERSION}\n}|]" \
+ 	--POPTdesc=$"list capabilities this package supplements"
+ 
++rpmquery	alias --basedon		--qf \
++  "[%{PATCHESNAME} %{PATCHESFLAGS:depflags} %{PATCHESVERSION}\n]" \
++	--POPTdesc=$"list packages this patch-rpm is based on"
++
+ rpmquery	alias --info --qf 'Name        : %-27{NAME}  Relocations: %|PREFIXES?{[%{PREFIXES} ]}:{(not relocatable)}|\n\
+ Version     : %-27{VERSION}       Vendor: %{VENDOR}\n\
+ Release     : %-27{RELEASE}   Build Date: %{BUILDTIME:date}\n\
diff --git a/payloadformat.diff b/payloadformat.diff
new file mode 100644
index 0000000..821978c
--- /dev/null
+++ b/payloadformat.diff
@@ -0,0 +1,40 @@
+Check if the payloadformat really is "cpio", fail with an error
+message if it is not. Use a different message for the "drpm"
+delta-rpm format. rh#140052
+
+Upstream proposes a different approach, patching the "Requires"
+list, which the current deltarpm implementation can't do, because
+it uses a verbatim copy of the original header. Sigh.
+
+I still believe that rpm should check for known formats, i.e.
+now that rpm understands ustar it should insist that the format
+is either "cpio" or "ustar".
+
+--- ./lib/rpminstall.c.orig	2005-12-14 21:01:09.000000000 +0000
++++ ./lib/rpminstall.c	2005-12-15 14:47:35.000000000 +0000
+@@ -470,6 +470,7 @@ if (fileURL[0] == '=') {
+ 	 eiu->fnp++, eiu->prevx++)
+     {
+ 	const char * fileName;
++	const char * payloadformat;
+ 
+ 	rpmMessage(RPMMESS_DEBUG, "============== %s\n", *eiu->fnp);
+ 	(void) urlPath(*eiu->fnp, &fileName);
+@@ -510,6 +511,17 @@ if (fileURL[0] == '=') {
+ 	    /*@switchbreak@*/ break;
+ 	}
+ 
++	payloadformat = 0;
++	if (!headerGetEntry(eiu->h, RPMTAG_PAYLOADFORMAT, NULL, (void **)&payloadformat, NULL))
++	    payloadformat = 0;
++	if (payloadformat && strcmp(payloadformat, "cpio") != 0) {
++	    if (!strcmp(payloadformat, "drpm"))
++		rpmMessage(RPMMESS_ERROR, _("%s is a deltarpm, create a real rpm from it first!\n"), *eiu->fnp);
++	    else
++		rpmMessage(RPMMESS_ERROR, _("%s contains no cpio payload\n"), *eiu->fnp);
++	    eiu->numFailed++; *eiu->fnp = NULL;
++	    continue;
++	}
+ 	eiu->isSource = headerIsEntry(eiu->h, RPMTAG_SOURCEPACKAGE);
+ 
+ 	if (eiu->isSource) {
diff --git a/perlprov.diff b/perlprov.diff
deleted file mode 100644
index 323c180..0000000
--- a/perlprov.diff
+++ /dev/null
@@ -1,13 +0,0 @@
-Support a "first version wins" semantics.
-
---- ./scripts/perl.prov.orig	2010-12-03 12:11:57.000000000 +0000
-+++ ./scripts/perl.prov	2011-05-11 15:32:39.000000000 +0000
-@@ -170,7 +170,7 @@ sub process_file {
- 
-         $version = $1;
-       }
--      $require{$package} = $version;
-+      $require{$package} ||= $version;
-     }
- 
-     # Allow someone to have a variable that defines virtual packages
diff --git a/pgpdecodeearly.diff b/pgpdecodeearly.diff
new file mode 100644
index 0000000..60adc1b
--- /dev/null
+++ b/pgpdecodeearly.diff
@@ -0,0 +1,18 @@
+Also decode early for PGP sigtags, which are actually header+payload
+RSA signatures. Without this patch, verification of a package
+that has just a header+payload RSA signature but no header-only RSA
+signature fails.
+
+Already in rpm-4.4.7.
+
+--- ./lib/rpmchecksig.c.orig	2005-12-14 20:54:39.000000000 +0000
++++ ./lib/rpmchecksig.c	2006-03-21 18:00:22.000000000 +0000
+@@ -801,7 +805,7 @@ int rpmVerifySignatures(QVA_t qva, rpmts
+ 	sigp = rpmtsSignature(ts);
+ 
+ 	/* XXX RSA needs the hash_algo, so decode early. */
+-	if (sigtag == RPMSIGTAG_RSA) {
++	if (sigtag == RPMSIGTAG_RSA || sigtag == RPMSIGTAG_PGP) {
+ 	    xx = headerGetEntry(sigh, sigtag, &sigtype, &sig, &siglen);
+ 	    xx = pgpPrtPkts(sig, siglen, dig, 0);
+ 	    sig = headerFreeData(sig, sigtype);
diff --git a/platformin.diff b/platformin.diff
index 77e7828..43c96e1 100644
--- a/platformin.diff
+++ b/platformin.diff
@@ -1,26 +1,31 @@
-SUSE specific platform changes. 
+SUSE specific platform changes. The libexecdir definition is probably
+wrong, LSB seems to demand "%{_exec_prefix}/lib".
 
---- ./platform.in.orig	2010-12-03 12:11:57.000000000 +0000
-+++ ./platform.in	2011-05-11 15:02:03.000000000 +0000
-@@ -21,7 +21,7 @@
+--- ./platform.in.orig	2005-01-26 03:39:54.000000000 +0000
++++ ./platform.in	2006-02-17 14:18:30.000000000 +0000
+@@ -17,18 +17,18 @@
  %_exec_prefix		@exec_prefix@
  %_bindir		@bindir@
  %_sbindir		@sbindir@
 -%_libexecdir		@libexecdir@
-+%_libexecdir		%{_exec_prefix}/lib
- %_datarootdir		@datarootdir@
++%_libexecdir		%{_libdir}
  %_datadir		@datadir@
  %_sysconfdir		@sysconfdir@
-@@ -33,7 +33,7 @@
+ %_sharedstatedir	@sharedstatedir@
+ %_localstatedir		@localstatedir@
+ %_lib			@LIB@
+-%_libdir		@LIBDIR@
++%_libdir		%{_exec_prefix}/%{_lib}
+ %_includedir		@includedir@
  %_oldincludedir		@oldincludedir@
  %_infodir		@infodir@
  %_mandir		@mandir@
--%_initddir		%{_sysconfdir}/rc.d/init.d
-+%_initddir		%{_sysconfdir}/init.d
- # Deprecated misspelling, present for backwards compatibility.
- %_initrddir		%{_initddir}
+-%_initrddir		%{_sysconfdir}/rc.d/init.d
++%_initrddir		%{_sysconfdir}/init.d
  
-@@ -143,3 +143,21 @@
+ %_defaultdocdir		@DEFAULTDOCDIR@
+ 
+@@ -148,3 +148,21 @@
  @mandrake@%_gamesdir	games
  @mandrake@%_gamesbindir   %{_prefix}/%{_gamesdir}
  @mandrake@%_gamesdatadir  %{_datadir}/%{_gamesdir}
@@ -31,7 +36,7 @@ SUSE specific platform changes.
 +@SuSE@%__chown_Rhf     @__CHOWN_RHF@
 +@SuSE@%__chgrp_Rhf     @__CHGRP_RHF@
 +@SuSE@%_fixowner       [ `%{__id_u}` = '0' ] && %{__chown_Rhf} root
-+@SuSE@%_fixgroup       [ `%{__id_u}` = '0' ] && %{__chgrp_Rhf} root
++@SuSE@%_fixgroup       [ `%{__id_u}` = '0' ] && %{__chgrp_Rhf} @ROOT_GROUP@
 +@SuSE@%_fixperms       %{__chmod} -Rf @FIXPERMS@
 +@SuSE@
 +@SuSE@#---------------------------------------------------------------------
diff --git a/prereqorder.diff b/prereqorder.diff
new file mode 100644
index 0000000..1e73d91
--- /dev/null
+++ b/prereqorder.diff
@@ -0,0 +1,21 @@
+Backported fix. Seems to do no harm.
+
+--- ./lib/depends.c.orig	2005-12-14 19:51:34.000000000 +0000
++++ ./lib/depends.c	2006-01-27 21:05:13.000000000 +0000
+@@ -1294,14 +1403,12 @@ int rpmtsOrder(rpmts ts)
+ 	    switch (rpmteType(p)) {
+ 	    case TR_REMOVED:
+ 		/* Skip if not %preun/%postun requires or legacy prereq. */
+-		if (isInstallPreReq(Flags)
+-		 || !( isErasePreReq(Flags) || isLegacyPreReq(Flags) ) )
++		if (!( isErasePreReq(Flags) || isLegacyPreReq(Flags) ) )
+ 		    /*@innercontinue@*/ continue;
+ 		/*@switchbreak@*/ break;
+ 	    case TR_ADDED:
+ 		/* Skip if not %pre/%post requires or legacy prereq. */
+-		if (isErasePreReq(Flags)
+-		 || !( isInstallPreReq(Flags) || isLegacyPreReq(Flags) ) )
++		if (!( isInstallPreReq(Flags) || isLegacyPreReq(Flags) ) )
+ 		    /*@innercontinue@*/ continue;
+ 		/*@switchbreak@*/ break;
+ 	    }
diff --git a/probfilter.diff b/probfilter.diff
new file mode 100644
index 0000000..79eeba5
--- /dev/null
+++ b/probfilter.diff
@@ -0,0 +1,14 @@
+Revert rpm-4.4.2 probFilter change.
+
+--- ./lib/poptI.c.orig	2005-12-15 14:34:45.000000000 +0000
++++ ./lib/poptI.c	2005-12-15 14:35:16.000000000 +0000
+@@ -16,8 +16,7 @@ extern time_t get_date(const char * p, v
+ /*@unchecked@*/
+ struct rpmInstallArguments_s rpmIArgs = {
+     0,			/* transFlags */
+-			/* probFilter */
+-    (RPMPROB_FILTER_REPLACEOLDFILES | RPMPROB_FILTER_REPLACENEWFILES),
++    0,			/* probFilter */
+     0,			/* installInterfaceFlags */
+     0,			/* eraseInterfaceFlags */
+     0,			/* qva_flags */
diff --git a/pythondeps.diff b/pythondeps.diff
deleted file mode 100644
index af85219..0000000
--- a/pythondeps.diff
+++ /dev/null
@@ -1,48 +0,0 @@
-Index: autodeps/linux.prov
-===================================================================
---- autodeps/linux.prov.orig	2011-06-08 13:31:39.000000000 +0200
-+++ autodeps/linux.prov	2011-06-08 13:31:39.191646314 +0200
-@@ -11,7 +11,7 @@ filelist=($(printf "%s\n" "${filelist[@]
- solist=($(printf "%s\n" "${filelist[@]}" | grep "\\.so" | grep -v "^/lib/ld.so" | \
- 	  tr '\n' '\0' | xargs -0 -r file -L | grep "ELF.*shared object" | \
- 	  cut -d: -f1))
--pythonlist=
-+pythonlist=($(printf "%s\n" "${filelist[@]}" | egrep '/usr/bin/python.\..$'))
- tcllist=
- monolist=($(printf "%s\n" "${filelist[@]}" | egrep "\\.(exe|dll)\$"))
- firmwarelist=($(printf "%s\n" "${filelist[@]}" | grep "/lib/firmware/"))
-@@ -54,8 +54,8 @@ done | sort -u
- 
- #
- # --- Python modules.
--[ -x /usr/lib/rpm/python.prov -a -n "$pythonlist" ] &&
--    printf "%s\n" "${pythonlist[@]}" | /usr/lib/rpm/python.prov | sort -u
-+[ -x /usr/lib/rpm/pythondeps.sh -a -n "$pythonlist" ] &&
-+    printf "%s\n" "${pythonlist[@]}" | /usr/lib/rpm/pythondeps.sh -P | sort -u
- 
- #
- # --- Tcl modules.
-Index: autodeps/linux.req
-===================================================================
---- autodeps/linux.req.orig	2011-06-08 13:31:38.000000000 +0200
-+++ autodeps/linux.req	2011-06-08 13:31:39.191646314 +0200
-@@ -31,7 +31,7 @@ liblist=($(printf "%s\0" "${filelist[@]}
- 
- interplist=()
- perllist=()
--pythonlist=()
-+pythonlist=($(printf "%s\n" "${filelist[@]}" | egrep '/usr/lib[^/]*/python.\..'))
- tcllist=()
- monolist=($(printf "%s\n" "${filelist[@]}" | egrep "\\.(exe|dll)(\\.config)?\$"))
- 
-@@ -127,8 +127,8 @@ done | sort -u
- 
- #
- # --- Python modules.
--[ -x /usr/lib/rpm/python.req -a -n "$pythonlist" ] && \
--    printf "%s\n" "${pythonlist[@]}" | /usr/lib/rpm/python.req | sort -u
-+[ -x /usr/lib/rpm/pythondeps.sh -a -n "$pythonlist" ] && \
-+    printf "%s\n" "${pythonlist[@]}" | /usr/lib/rpm/pythondeps.sh -R | sort -u
- 
- #
- # --- Tcl modules.
diff --git a/querybuffer.diff b/querybuffer.diff
new file mode 100644
index 0000000..e3cb3bc
--- /dev/null
+++ b/querybuffer.diff
@@ -0,0 +1,43 @@
+fix a buffer overflow in the query function [#218983]
+rh#212833
+
+--- lib/query.c.orig	2006-11-24 13:24:30.000000000 +0000
++++ lib/query.c	2006-11-24 13:43:47.000000000 +0000
+@@ -133,8 +133,10 @@ int showQueryPackage(QVA_t qva, rpmts ts
+     int rc = 0;		/* XXX FIXME: need real return code */
+     int nonewline = 0;
+     int i;
++    size_t tsize;
+ 
+-    te = t = xmalloc(BUFSIZ);
++    tsize = BUFSIZ * 2;
++    te = t = xmalloc(tsize);
+ /*@-boundswrite@*/
+     *te = '\0';
+ /*@=boundswrite@*/
+@@ -147,8 +149,9 @@ int showQueryPackage(QVA_t qva, rpmts ts
+ 	    size_t tb = (te - t);
+ 	    size_t sb = strlen(str);
+ 
+-	    if (sb >= (BUFSIZ - tb)) {
+-		t = xrealloc(t, BUFSIZ+sb);
++	    if (sb > 0) {
++		tsize += sb;
++		t = xrealloc(t, tsize);
+ 		te = t + tb;
+ 	    }
+ /*@-boundswrite@*/
+@@ -261,6 +264,13 @@ int showQueryPackage(QVA_t qva, rpmts ts
+ 	}
+ /*@=boundswrite@*/
+ 
++	if (strlen(fn) + BUFSIZ > tsize) {
++	    size_t tb = (te - t);
++	    tsize = strlen(fn) + BUFSIZ * 2;
++	    t = xrealloc(t, tsize);
++	    te = t + tb;
++	}
++
+ 	if (qva->qva_flags & QUERY_FOR_DUMPFILES) {
+ 	    sprintf(te, "%s %d %d %s 0%o ", fn, (int)fsize, fmtime, fmd5, fmode);
+ 	    te += strlen(te);
diff --git a/ready b/ready
new file mode 100644
index 0000000..473a0f4
diff --git a/rebuilddbroot.diff b/rebuilddbroot.diff
new file mode 100644
index 0000000..88e5e13
--- /dev/null
+++ b/rebuilddbroot.diff
@@ -0,0 +1,22 @@
+Make rebuilddb work with the --root option. [#65993]
+
+--- ./rpmdb/rpmdb.c.orig	2005-02-16 03:18:19.000000000 +0000
++++ ./rpmdb/rpmdb.c	2006-02-21 20:37:44.000000000 +0000
+@@ -3771,7 +3887,7 @@ int rpmdbRebuild(const char * prefix, rp
+     }
+     dbpath = rootdbpath = rpmGetPath(prefix, tfn, NULL);
+     if (!(prefix[0] == '/' && prefix[1] == '\0'))
+-	dbpath += strlen(prefix);
++	dbpath += strlen(prefix) - 1;
+     tfn = _free(tfn);
+ 
+     /*@-nullpass@*/
+@@ -3794,7 +3910,7 @@ int rpmdbRebuild(const char * prefix, rp
+     }
+     newdbpath = newrootdbpath = rpmGetPath(prefix, tfn, NULL);
+     if (!(prefix[0] == '/' && prefix[1] == '\0'))
+-	newdbpath += strlen(prefix);
++	newdbpath += strlen(prefix) - 1;
+     tfn = _free(tfn);
+ 
+     rpmMessage(RPMMESS_DEBUG, _("rebuilding database %s into %s\n"),
diff --git a/refreshtestarch.diff b/refreshtestarch.diff
index 12642dd..161eae2 100644
--- a/refreshtestarch.diff
+++ b/refreshtestarch.diff
@@ -1,25 +1,24 @@
 Also test architecture in "refresh" test when not colored. This allows
-updates to different architectures.
+updates to different architecture possible again.
 
---- ./lib/psm.c.orig	2010-12-21 09:50:23.000000000 +0000
-+++ ./lib/psm.c	2011-05-11 12:47:13.000000000 +0000
-@@ -723,6 +723,7 @@ static rpmRC rpmpsmStage(rpmpsm psm, pkg
- 
- 	    psm->scriptArg = psm->npkgs_installed + 1;
+--- ./lib/psm.c.orig	2005-12-14 18:59:10.000000000 +0000
++++ ./lib/psm.c	2006-02-24 11:46:54.000000000 +0000
+@@ -1425,15 +1441,16 @@ rpmRC rpmpsmStage(rpmpsm psm, pkgStage s
  
+ assert(psm->mi == NULL);
+ 	    psm->mi = rpmtsInitIterator(ts, RPMTAG_NAME, rpmteN(psm->te), 0);
 +	    /* this must match rpmNameVersionCompare in depends.c */
- 	    mi = rpmtsInitIterator(ts, RPMDBI_NAME, rpmteN(psm->te), 0);
- 	    xx = rpmdbSetIteratorRE(mi, RPMTAG_EPOCH, RPMMIRE_STRCMP,
+ 	    xx = rpmdbSetIteratorRE(psm->mi, RPMTAG_EPOCH, RPMMIRE_STRCMP,
  			rpmteE(psm->te));
-@@ -730,9 +731,9 @@ static rpmRC rpmpsmStage(rpmpsm psm, pkg
+ 	    xx = rpmdbSetIteratorRE(psm->mi, RPMTAG_VERSION, RPMMIRE_STRCMP,
  			rpmteV(psm->te));
- 	    xx = rpmdbSetIteratorRE(mi, RPMTAG_RELEASE, RPMMIRE_STRCMP,
+ 	    xx = rpmdbSetIteratorRE(psm->mi, RPMTAG_RELEASE, RPMMIRE_STRCMP,
  			rpmteR(psm->te));
-+	    xx = rpmdbSetIteratorRE(mi, RPMTAG_ARCH, RPMMIRE_STRCMP,
-+		    rpmteA(psm->te));
- 	    if (tscolor) {
--		xx = rpmdbSetIteratorRE(mi, RPMTAG_ARCH, RPMMIRE_STRCMP,
--			rpmteA(psm->te));
- 		xx = rpmdbSetIteratorRE(mi, RPMTAG_OS, RPMMIRE_STRCMP,
+-	    if (tscolor) {
+-		xx = rpmdbSetIteratorRE(psm->mi, RPMTAG_ARCH, RPMMIRE_STRCMP,
++	    xx = rpmdbSetIteratorRE(psm->mi, RPMTAG_ARCH, RPMMIRE_STRCMP,
+ 			rpmteA(psm->te));
++	    if (tscolor) {
+ 		xx = rpmdbSetIteratorRE(psm->mi, RPMTAG_OS, RPMMIRE_STRCMP,
  			rpmteO(psm->te));
  	    }
diff --git a/remove-brp-strips.diff b/remove-brp-strips.diff
deleted file mode 100644
index 466a948..0000000
--- a/remove-brp-strips.diff
+++ /dev/null
@@ -1,16 +0,0 @@
-Subject: remove references to removed brp scripts
-
-Some brp-scripts are not used in openSUSE, remove references
-to it
-
---- ./platform.in.orig	2011-05-11 15:02:03.000000000 +0000
-+++ ./platform.in	2011-05-11 15:38:05.000000000 +0000
-@@ -55,8 +55,6 @@
- %__os_install_post    \
-     %{_rpmconfigdir}/brp-compress \
-     %{_rpmconfigdir}/brp-strip %{__strip} \
--    %{_rpmconfigdir}/brp-strip-static-archive %{__strip} \
--    %{_rpmconfigdir}/brp-strip-comment-note %{__strip} %{__objdump} \
- %{nil}
- 
- %__spec_install_post\
diff --git a/remove-translations.diff b/remove-translations.diff
deleted file mode 100644
index b7453e2..0000000
--- a/remove-translations.diff
+++ /dev/null
@@ -1,20 +0,0 @@
---- ./scripts/find-lang.sh.orig	2011-05-11 16:45:30.000000000 +0000
-+++ ./scripts/find-lang.sh	2011-05-11 16:55:14.000000000 +0000
-@@ -122,6 +122,17 @@ fi
- MO_NAME_NEW=$MO_NAME.tmp.$$
- rm -f $MO_NAME_NEW
- 
-+# remove languages we do not yet support - but give out statistics
-+find $TOP_DIR/usr/share/locale/ -maxdepth 1 -type d | sed 's:'"$TOP_DIR"/usr/share/locale/'::; /^$/d' | while read dir; do
-+  if ! rpm -ql filesystem | egrep -q "/usr/share/locale/$dir"$; then
-+    find $TOP_DIR/usr/share/locale/$dir -name *.mo | sed 's:'"$TOP_DIR"'::' | while read file; do
-+        echo -n "removing translation $file: "
-+	msgunfmt "$TOP_DIR/$file" | msgfmt --statistics -o /dev/null -
-+    done
-+    rm -rf $TOP_DIR/usr/share/locale/$dir
-+  fi
-+done
-+
- find $TOP_DIR -type f -o -type l|sed '
- s:'"$TOP_DIR"'::
- '"$ALL_NAME$MO"'s:\(.*/locale/\)\([^/_]\+\)\(.*\.mo$\):%lang(\2) %doc \1\2\3:
diff --git a/repackage-nomd5.diff b/repackage-nomd5.diff
deleted file mode 100644
index 16e243e..0000000
--- a/repackage-nomd5.diff
+++ /dev/null
@@ -1,31 +0,0 @@
-Don't complain about a bad md5 sum for repackaged rpms.
-
---- ./lib/psm.c.orig	2011-05-11 14:27:32.000000000 +0000
-+++ ./lib/psm.c	2011-05-11 16:32:11.000000000 +0000
-@@ -811,6 +811,7 @@ static rpmRC rpmpsmStage(rpmpsm psm, pkg
-     case PSM_PROCESS:
- 	if (psm->goal == PKG_INSTALL) {
- 	    FD_t payload = NULL;
-+	    rpmtransFlags oldtsflags;
- 
- 	    if (rpmtsFlags(ts) & RPMTRANS_FLAG_JUSTDB)	break;
- 
-@@ -828,6 +829,9 @@ static rpmRC rpmpsmStage(rpmpsm psm, pkg
- 		break;
- 	    }
- 
-+	    oldtsflags = rpmtsFlags(ts);
-+	    if (headerIsEntry(fi->h, RPMTAG_REMOVETID))
-+		(void) rpmtsSetFlags(ts, oldtsflags | RPMTRANS_FLAG_NOMD5);
- 	    rc = fsmSetup(rpmfiFSM(fi), FSM_PKGINSTALL, ts, psm->te, fi,
- 			payload, NULL, &psm->failedFile);
- 	    (void) rpmswAdd(rpmtsOp(ts, RPMTS_OP_UNCOMPRESS),
-@@ -835,6 +839,8 @@ static rpmRC rpmpsmStage(rpmpsm psm, pkg
- 	    (void) rpmswAdd(rpmtsOp(ts, RPMTS_OP_DIGEST),
- 			fdOp(payload, FDSTAT_DIGEST));
- 	    xx = fsmTeardown(rpmfiFSM(fi));
-+	    if (headerIsEntry(fi->h, RPMTAG_REMOVETID))
-+		(void) rpmtsSetFlags(ts, oldtsflags);
- 
- 	    saveerrno = errno; /* XXX FIXME: Fclose with libio destroys errno */
- 	    xx = Fclose(payload);
diff --git a/requires-ge-macro.diff b/requires-ge-macro.diff
deleted file mode 100644
index 51c3e50..0000000
--- a/requires-ge-macro.diff
+++ /dev/null
@@ -1,12 +0,0 @@
---- ./macros.in.orig	2011-05-11 15:36:05.000000000 +0000
-+++ ./macros.in	2011-05-11 15:38:44.000000000 +0000
-@@ -1027,7 +1027,8 @@ done \
- #	%{perl_sitearch}/Image
- #	%dir %{perl_sitearch}/auto/Image
- #
--%requires_eq()	%(LC_ALL="C" echo '%*' | xargs -r rpm -q --qf 'Requires: %%{name} = %%{epoch}:%%{version}\\n' | sed -e 's/ (none):/ /' -e 's/ 0:/ /' | grep -v "is not")
-+%requires_eq()	%(echo '%*' | LC_ALL=C xargs -r rpm -q --qf 'Requires: %%{name} = %%{epoch}:%%{version}\\n' | sed -e 's/ (none):/ /' -e 's/ 0:/ /' | grep -v "is not")
-+%requires_ge()	%(echo '%*' | LC_ALL=C xargs -r rpm -q --qf 'Requires: %%{name} >= %%{epoch}:%%{version}\\n' | sed -e 's/ (none):/ /' -e 's/ 0:/ /' | grep -v "is not")
- %perl_sitearch	%(eval "`%{__perl} -V:installsitearch`"; echo $installsitearch)
- %perl_sitelib	%(eval "`%{__perl} -V:installsitelib`"; echo $installsitelib)
- %perl_vendorarch %(eval "`%{__perl} -V:installvendorarch`"; echo $installvendorarch)
diff --git a/rpm-4.4.2.tar.bz2 b/rpm-4.4.2.tar.bz2
new file mode 100644
index 0000000..0659a80
--- /dev/null
+++ b/rpm-4.4.2.tar.bz2
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:abc1b6a909e904ee220e32cd0c534fe19b8ea7cb2d3e8cfe395e221773e62c8c
+size 8955447
diff --git a/rpm-4.9.0.tar.bz2 b/rpm-4.9.0.tar.bz2
deleted file mode 100644
index 5a813cd..0000000
--- a/rpm-4.9.0.tar.bz2
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:9af1a56b05fc2c54935062e04a3e02999110c74d00bfd5b5c5ff3a03dde61688
-size 3410799
diff --git a/rpm-beecrypt.diff b/rpm-beecrypt.diff
deleted file mode 100644
index ecf9284..0000000
--- a/rpm-beecrypt.diff
+++ /dev/null
@@ -1,1726 +0,0 @@
---- ./config.h.in.orig	2011-03-02 06:46:47.000000000 +0000
-+++ ./config.h.in	2011-05-10 15:54:41.000000000 +0000
-@@ -13,6 +13,9 @@
- /* Define to 1 if you have the `basename' function. */
- #undef HAVE_BASENAME
- 
-+/* Define to 1 if you have the <beecrypt/api.h> header file. */
-+#undef HAVE_BEECRYPT_API_H
-+
- /* Define as 1 if you bzip2 1.0 */
- #undef HAVE_BZ2_1_0
- 
-@@ -77,7 +80,7 @@
- /* Define as 1 if your zlib has gzseek() */
- #undef HAVE_GZSEEK
- 
--/* Define if you have the iconv() function. */
-+/* Define if you have the iconv() function and it works. */
- #undef HAVE_ICONV
- 
- /* Define to 1 if you have the <inttypes.h> header file. */
-@@ -224,6 +227,10 @@
-    */
- #undef LT_OBJDIR
- 
-+/* Define to the sub-directory in which libtool stores uninstalled libraries.
-+   */
-+#undef LT_OBJDIR
-+
- /* Define to 1 if `major', `minor', and `makedev' are declared in <mkdev.h>.
-    */
- #undef MAJOR_IN_MKDEV
-@@ -308,6 +315,9 @@
- /* Build with acl support? */
- #undef WITH_ACL
- 
-+/* Build with beecrypt instead of nss3 support? */
-+#undef WITH_BEECRYPT
-+
- /* Build with capability support? */
- #undef WITH_CAP
- 
---- ./configure.ac.orig	2011-03-02 06:46:20.000000000 +0000
-+++ ./configure.ac	2011-05-10 15:54:41.000000000 +0000
-@@ -246,12 +246,43 @@ AC_CHECK_HEADERS([dwarf.h], [
- AM_CONDITIONAL(LIBDWARF,[test "$WITH_LIBDWARF" = yes])
- 
- #=================
-+# Check for beecrypt library if requested.
-+AC_ARG_WITH(beecrypt, [  --with-beecrypt         build with beecrypt support ],,[with_beecrypt=yes])
-+AC_ARG_WITH(internal_beecrypt, [  --with-internal-beecrypt build with internal beecrypt library ],,[with_internal_beecrypt=yes])
-+AM_CONDITIONAL([WITH_INTERNAL_BEECRYPT],[test "$with_internal_beecrypt" = yes])
-+if test "$with_internal_beecrypt" = yes ; then
-+  with_beecrypt=yes
-+fi
-+AM_CONDITIONAL([WITH_BEECRYPT],[test "$with_beecrypt" = yes])
-+
-+WITH_BEECRYPT_INCLUDE=
-+WITH_BEECRYPT_LIB=
-+if test "$with_beecrypt" = yes ; then
-+  AC_DEFINE(WITH_BEECRYPT, 1, [Build with beecrypt instead of nss3 support?])
-+  if test "$with_internal_beecrypt" = yes ; then
-+    WITH_BEECRYPT_INCLUDE="-I\$(top_srcdir)/beecrypt"
-+    AC_DEFINE(HAVE_BEECRYPT_API_H, 1, [Define to 1 if you have the <beecrypt/api.h> header file.])
-+  else
-+    AC_CHECK_LIB(beecrypt, mpfprintln, [
-+      WITH_BEECRYPT_LIB="-lbeecrypt"
-+    ],[
-+      AC_MSG_ERROR([missing required library 'beecrypt']) 
-+    ])
-+    AC_CHECK_HEADER([beecrypt/api.h], [AC_DEFINE(HAVE_BEECRYPT_API_H, 1, [Define to 1 if you have the <beecrypt/api.h> header file.])
-+    ])
-+  fi
-+fi
-+AC_SUBST(WITH_BEECRYPT_LIB)
-+AC_SUBST(WITH_BEECRYPT_INCLUDE)
-+
-+#=================
- # Check for NSS library.
- # We need nss.h from NSS which needs nspr.h. Unfortunately both glibc and NSS 
- # have a header named nss.h... so make extra check for NSS's sechash.h 
- # which we use too and hopefully is slightly more unique to NSS.
- WITH_NSS_INCLUDE=
- WITH_NSS_LIB=
-+if test "$with_beecrypt" != yes ; then
- AC_CHECK_HEADERS([nspr.h nss.h sechash.h], [], [
-   AC_MSG_ERROR([missing required NSPR / NSS header])
- ])
-@@ -260,6 +291,7 @@ AC_CHECK_LIB(nss3, NSS_NoDB_Init, [
- ], [
-   AC_MSG_ERROR([missing required NSS library 'nss3'])
- ])
-+fi
- AC_SUBST(WITH_NSS_INCLUDE)
- AC_SUBST(WITH_NSS_LIB)
- 
---- ./rpmio/Makefile.am.orig	2010-12-03 12:11:57.000000000 +0000
-+++ ./rpmio/Makefile.am	2011-05-10 15:56:13.000000000 +0000
-@@ -2,6 +2,7 @@
- 
- AM_CPPFLAGS = -I$(top_builddir) -I$(top_srcdir) -I$(top_builddir)/include/
- AM_CPPFLAGS += @WITH_NSS_INCLUDE@
-+AM_CPPFLAGS += @WITH_BEECRYPT_INCLUDE@
- AM_CPPFLAGS += @WITH_LUA_INCLUDE@
- AM_CPPFLAGS += @WITH_POPT_INCLUDE@
- AM_CPPFLAGS += -I$(top_srcdir)/misc
-@@ -18,10 +19,17 @@ librpmio_la_SOURCES = \
- 	rpmstring.c rpmfileutil.c \
- 	rpmkeyring.c
- 
-+if WITH_BEECRYPT
-+librpmio_la_SOURCES += digest_beecrypt.c
-+else
-+librpmio_la_SOURCES += digest_nss.c
-+endif
-+
- librpmio_la_LDFLAGS = -version-info 2:0:0
- librpmio_la_LIBADD = \
- 	../misc/libmisc.la \
- 	@WITH_NSS_LIB@ \
-+	@WITH_BEECRYPT_LIB@ \
- 	@WITH_LUA_LIB@ \
- 	@WITH_BZ2_LIB@ \
- 	@WITH_ZLIB_LIB@ \
-@@ -30,6 +38,15 @@ librpmio_la_LIBADD = \
- 	@WITH_LZMA_LIB@ \
- 	-lpthread
- 
-+if WITH_INTERNAL_BEECRYPT
-+librpmio_la_LIBADD += $(libbeecrypt_la)
-+
-+libbeecrypt_la = $(top_builddir)/beecrypt/libbeecrypt_nolibdir.la
-+
-+$(top_builddir)/beecrypt/libbeecrypt_nolibdir.la: $(top_builddir)/beecrypt/libbeecrypt.la
-+	sed -e 's/libdir=.*/libdir=/' < $(top_builddir)/beecrypt/libbeecrypt.la > $(top_builddir)/beecrypt/libbeecrypt_nolibdir.la
-+endif
-+
- if WITH_LUAEXT
- AM_CPPFLAGS += -I$(top_srcdir)/luaext/
- librpmio_la_LIBADD += $(top_builddir)/luaext/libluaext.la
---- ./rpmio/base64.c.orig	2010-12-03 12:11:57.000000000 +0000
-+++ ./rpmio/base64.c	2011-05-10 15:54:41.000000000 +0000
-@@ -4,8 +4,11 @@
- #include <arpa/inet.h>
- #include <stdlib.h>
- 
-+#include "system.h"
-+
- #include "rpmio/base64.h"
- 
-+#ifndef WITH_BEECRYPT
- 
- static char base64_encode_value(char value_in)
- {
-@@ -253,3 +256,4 @@ int main(int argc, char *argv[])
- }
- #endif
- 
-+#endif	/* WITH_BEECRYPT */
---- ./rpmio/digest.c.orig	2010-12-03 12:11:57.000000000 +0000
-+++ ./rpmio/digest.c	2011-05-10 16:00:19.000000000 +0000
-@@ -4,25 +4,12 @@
- 
- #include "system.h"
- 
-+#include <rpm/rpmpgp.h>
- #include "rpmio/digest.h"
-+#include "rpmio/rpmio_internal.h"
- 
- #include "debug.h"
- 
--#ifdef	SHA_DEBUG
--#define	DPRINTF(_a)	fprintf _a
--#else
--#define	DPRINTF(_a)
--#endif
--
--
--/**
-- * MD5/SHA1 digest private data.
-- */
--struct DIGEST_CTX_s {
--    rpmDigestFlags flags;	/*!< Bit(s) to control digest operation. */
--    HASHContext *hashctx;	/*!< Internal NSS hash context. */
--    int algo;			/*!< Used hash algorithm */
--};
- 
- #define DIGESTS_MAX 11
- struct rpmDigestBundle_s {
-@@ -109,138 +96,3 @@ DIGEST_CTX rpmDigestBundleDupCtx(rpmDige
-     return dup;
- }
- 
--DIGEST_CTX
--rpmDigestDup(DIGEST_CTX octx)
--{
--    DIGEST_CTX nctx = NULL;
--    if (octx) {
--	HASHContext *hctx = HASH_Clone(octx->hashctx);
--	if (hctx) {
--	    nctx = memcpy(xcalloc(1, sizeof(*nctx)), octx, sizeof(*nctx));
--	    nctx->hashctx = hctx;
--	}
--    }
--    return nctx;
--}
--
--RPM_GNUC_PURE
--static HASH_HashType getHashType(int hashalgo)
--{
--    switch (hashalgo) {
--    case PGPHASHALGO_MD5:
--	return HASH_AlgMD5;
--	break;
--    case PGPHASHALGO_MD2:
--	return HASH_AlgMD2;
--	break;
--    case PGPHASHALGO_SHA1:
--	return HASH_AlgSHA1;
--	break;
--    case PGPHASHALGO_SHA256:
--	return HASH_AlgSHA256;
--	break;
--    case PGPHASHALGO_SHA384:
--	return HASH_AlgSHA384;
--	break;
--    case PGPHASHALGO_SHA512:
--	return HASH_AlgSHA512;
--	break;
--    case PGPHASHALGO_RIPEMD160:
--    case PGPHASHALGO_TIGER192:
--    case PGPHASHALGO_HAVAL_5_160:
--    default:
--	return HASH_AlgNULL;
--	break;
--    }
--}
--
--size_t
--rpmDigestLength(int hashalgo)
--{
--    return HASH_ResultLen(getHashType(hashalgo));
--}
--
--DIGEST_CTX
--rpmDigestInit(int hashalgo, rpmDigestFlags flags)
--{
--    HASH_HashType type = getHashType(hashalgo);
--    HASHContext *hashctx = NULL;
--    DIGEST_CTX ctx = NULL;
--
--    if (type == HASH_AlgNULL || rpmInitCrypto() < 0)
--	goto exit;
--
--    if ((hashctx = HASH_Create(type)) != NULL) {
--	ctx = xcalloc(1, sizeof(*ctx));
--	ctx->flags = flags;
--	ctx->algo = hashalgo;
--	ctx->hashctx = hashctx;
--    	HASH_Begin(ctx->hashctx);
--    }
--    
--DPRINTF((stderr, "*** Init(%x) ctx %p hashctx %p\n", flags, ctx, ctx->hashctx));
--exit:
--    return ctx;
--}
--
--int
--rpmDigestUpdate(DIGEST_CTX ctx, const void * data, size_t len)
--{
--    size_t partlen;
--    const unsigned char *ptr = data;
--
--    if (ctx == NULL)
--	return -1;
--
--DPRINTF((stderr, "*** Update(%p,%p,%zd) hashctx %p \"%s\"\n", ctx, data, len, ctx->hashctx, ((char *)data)));
--   partlen = ~(unsigned int)0xFF;
--   while (len > 0) {
--   	if (len < partlen) {
--   		partlen = len;
--   	}
--	HASH_Update(ctx->hashctx, ptr, partlen);
--	ptr += partlen;
--	len -= partlen;
--   }
--   return 0;
--}
--
--int
--rpmDigestFinal(DIGEST_CTX ctx, void ** datap, size_t *lenp, int asAscii)
--{
--    unsigned char * digest;
--    unsigned int digestlen;
--
--    if (ctx == NULL)
--	return -1;
--    digestlen = HASH_ResultLenContext(ctx->hashctx);
--    digest = xmalloc(digestlen);
--
--DPRINTF((stderr, "*** Final(%p,%p,%p,%zd) hashctx %p digest %p\n", ctx, datap, lenp, asAscii, ctx->hashctx, digest));
--/* FIX: check rc */
--    HASH_End(ctx->hashctx, digest, (unsigned int *) &digestlen, digestlen);
--
--    /* Return final digest. */
--    if (!asAscii) {
--	if (lenp) *lenp = digestlen;
--	if (datap) {
--	    *datap = digest;
--	    digest = NULL;
--	}
--    } else {
--	if (lenp) *lenp = (2*digestlen) + 1;
--	if (datap) {
--	    const uint8_t * s = (const uint8_t *) digest;
--	    *datap = pgpHexStr(s, digestlen);
--	}
--    }
--    if (digest) {
--	memset(digest, 0, digestlen);	/* In case it's sensitive */
--	free(digest);
--    }
--    HASH_Destroy(ctx->hashctx);
--    memset(ctx, 0, sizeof(*ctx));	/* In case it's sensitive */
--    free(ctx);
--    return 0;
--}
--
---- ./rpmio/digest.h.orig	2010-12-03 12:11:57.000000000 +0000
-+++ ./rpmio/digest.h	2011-05-10 15:54:41.000000000 +0000
-@@ -1,11 +1,6 @@
- #ifndef _RPMDIGEST_H
- #define _RPMDIGEST_H
- 
--#include <nss.h>
--#include <sechash.h>
--#include <keyhi.h>
--#include <cryptohi.h>
--
- #include <rpm/rpmpgp.h>
- #include "rpmio/base64.h"
- 
-@@ -42,8 +37,18 @@ struct pgpDig_s {
-     struct pgpDigParams_s pubkey;
- 
-     /* DSA/RSA parameters */
--    SECKEYPublicKey *keydata;
--    SECItem *sigdata;
-+    void *keydata;
-+    void *sigdata;
- };
- 
-+void pgpCleanRSADSA(pgpDig dig);
-+
-+int pgpSetSigMpiRSA(pgpDig dig, int num, const uint8_t *p);
-+int pgpSetPubMpiRSA(pgpDig dig, int num, const uint8_t *p);
-+int pgpVerifyRSA(pgpDig dig, uint8_t *hash, size_t hashlen);
-+
-+int pgpSetSigMpiDSA(pgpDig dig, int num, const uint8_t *p);
-+int pgpSetPubMpiDSA(pgpDig dig, int num, const uint8_t *p);
-+int pgpVerifyDSA(pgpDig dig, uint8_t *hash, size_t hashlen);
-+
- #endif /* _RPMDIGEST_H */
---- ./rpmio/digest_beecrypt.c.orig	2011-05-10 15:54:41.000000000 +0000
-+++ ./rpmio/digest_beecrypt.c	2011-05-10 15:54:41.000000000 +0000
-@@ -0,0 +1,493 @@
-+#include "system.h"
-+
-+#include <beecrypt.h>
-+#include <dsa.h>
-+#include <endianness.h>
-+#include <md5.h>
-+#include <mp.h>
-+#include <rsa.h>
-+#include <rsapk.h>
-+#include <sha1.h>
-+#if HAVE_BEECRYPT_API_H
-+#include <sha256.h>
-+#include <sha384.h>
-+#include <sha512.h>
-+#endif
-+
-+#include <rpm/rpmpgp.h>
-+#include "rpmio/digest.h"
-+#include "rpmio/rpmio_internal.h"
-+
-+#include "debug.h"
-+
-+/* interface to beecrpyt crypto framework */
-+
-+/****************************  init   ************************************/
-+
-+int rpmInitCrypto(void) {
-+    return 0;
-+}
-+
-+int rpmFreeCrypto(void) {
-+    return 0;
-+}
-+
-+/**************************** helpers ************************************/
-+
-+static inline unsigned int pgpMpiBits(const uint8_t *p)
-+{
-+    return ((p[0] << 8) | p[1]);
-+}
-+
-+static inline size_t pgpMpiLen(const uint8_t *p)
-+{
-+    return (2 + ((pgpMpiBits(p)+7)>>3));
-+}
-+
-+static inline char * pgpHexCvt(char *t, const byte *s, int nbytes)
-+        /*@modifies *t @*/
-+{
-+    static char hex[] = "0123456789abcdef";
-+    while (nbytes-- > 0) { 
-+        unsigned int i;
-+        i = *s++;
-+        *t++ = hex[ (i >> 4) & 0xf ];
-+        *t++ = hex[ (i     ) & 0xf ];
-+    }    
-+    *t = '\0';
-+    return t;
-+}
-+
-+static const char * pgpMpiHex(const byte *p)
-+{
-+    static char prbuf[2048];
-+    char *t = prbuf;
-+    t = pgpHexCvt(t, p+2, pgpMpiLen(p)-2);
-+    return prbuf;
-+}
-+
-+static int pgpHexSet(int lbits, mpnumber * mpn, const byte * p)
-+{
-+    unsigned int mbits = pgpMpiBits(p);
-+    unsigned int nbits;
-+    unsigned int nbytes;
-+    char *t;
-+    unsigned int ix;
-+
-+    nbits = (lbits > mbits ? lbits : mbits);
-+    nbytes = ((nbits + 7) >> 3);
-+    t = xmalloc(2*nbytes+1);
-+    ix = 2 * ((nbits - mbits) >> 3);
-+
-+    if (ix > 0) memset(t, (int)'0', ix);
-+    strcpy(t+ix, pgpMpiHex(p));
-+    (void) mpnsethex(mpn, t);
-+    t = _free(t);
-+    return 0;
-+}
-+
-+void pgpCleanRSADSA(pgpDig dig)
-+{
-+    if (!dig)
-+	return;
-+    if (dig->keydata) {
-+	dig->keydata= _free(dig->keydata);
-+    }
-+    if (dig->sigdata) {
-+	dig->sigdata = _free(dig->sigdata);
-+    }
-+}
-+
-+
-+/****************************** RSA **************************************/
-+
-+struct pgpDigSigRSA_s {
-+    mpnumber c;
-+};
-+
-+struct pgpDigPubRSA_s {
-+    rsapk rsa_pk;
-+};
-+
-+int
-+pgpSetSigMpiRSA(pgpDig dig, int num, const uint8_t *p)
-+{
-+    struct pgpDigSigRSA_s *sig;
-+    if (num != 0)
-+	return 1;
-+    if (!dig->sigdata)
-+	dig->sigdata = xcalloc(1, sizeof(*sig));
-+    sig = dig->sigdata;
-+    if (!sig)
-+	return 1;
-+    (void) mpnsethex(&sig->c, pgpMpiHex(p));
-+    return 0;
-+}
-+
-+int
-+pgpSetPubMpiRSA(pgpDig dig, int num, const uint8_t *p)
-+{
-+    struct pgpDigPubRSA_s *pub;
-+
-+    if (!dig->keydata)
-+	dig->keydata = xcalloc(1, sizeof(*pub));
-+    pub = dig->keydata;
-+    if (!pub)
-+	return 1;
-+    switch(num) {
-+    case 0:
-+	(void) mpbsethex(&pub->rsa_pk.n, pgpMpiHex(p));
-+	return 0;
-+    case 1:
-+	(void) mpnsethex(&pub->rsa_pk.e, pgpMpiHex(p));
-+	return 0;
-+    default:
-+	return 1;
-+    }
-+}
-+
-+static inline unsigned char nibble(char c)
-+{
-+    if (c >= '0' && c <= '9')
-+        return (c - '0');
-+    if (c >= 'A' && c <= 'F')
-+        return (c - 'A') + 10;
-+    if (c >= 'a' && c <= 'f')
-+        return (c - 'a') + 10;
-+    return 0;
-+}
-+
-+int pgpVerifyRSA(pgpDig dig, uint8_t *hash, size_t hashlen)
-+{
-+    const char * prefix = NULL;
-+    int res;
-+    mpnumber rsahm;
-+    struct pgpDigSigRSA_s *sig;
-+    struct pgpDigPubRSA_s *pub;
-+
-+    sig = dig->sigdata;
-+    pub = dig->keydata;
-+    if (!sig || !pub)
-+	return 1;
-+
-+    switch (dig->signature.hash_algo) {
-+    case PGPHASHALGO_MD5:
-+        prefix = "3020300c06082a864886f70d020505000410";
-+        break;
-+    case PGPHASHALGO_SHA1:
-+        prefix = "3021300906052b0e03021a05000414";
-+        break;
-+    case PGPHASHALGO_MD2:
-+        prefix = "3020300c06082a864886f70d020205000410";
-+        break;
-+    case PGPHASHALGO_SHA256:
-+        prefix = "3031300d060960864801650304020105000420";
-+        break;
-+    case PGPHASHALGO_SHA384:
-+        prefix = "3041300d060960864801650304020205000430";
-+        break;
-+    case PGPHASHALGO_SHA512:
-+        prefix = "3051300d060960864801650304020305000440";
-+        break;
-+    /* fallthrough for unsupported / unknown types */
-+    default:
-+	return 1;
-+    }
-+
-+    /* Generate RSA modulus parameter. */
-+    {   unsigned int nbits = MP_WORDS_TO_BITS(sig->c.size);
-+        unsigned int nb = (nbits + 7) >> 3;
-+        byte *buf, *bp;
-+
-+	if (nb < 3)
-+	    return 1;
-+	buf = xmalloc(nb);
-+	memset(buf, 0xff, nb);
-+	buf[0] = 0x00;
-+	buf[1] = 0x01;
-+	bp = buf + nb - strlen(prefix)/2 - hashlen - 1;
-+	if (bp < buf)
-+	    return 1;
-+	*bp++ = 0;
-+	for (; *prefix; prefix += 2)
-+	    *bp++ = (nibble(prefix[0]) << 4) | nibble(prefix[1]);
-+        memcpy(bp, hash, hashlen);
-+        mpnzero(&rsahm);
-+        (void) mpnsetbin(&rsahm, buf, nb);
-+        buf = _free(buf);
-+    }
-+#if HAVE_BEECRYPT_API_H
-+    res = rsavrfy(&pub->rsa_pk.n, &pub->rsa_pk.e, &sig->c, &rsahm) == 1 ? 0 : 1;
-+#else
-+    res = rsavrfy(&pub->rsa_pk, &rsahm, &sig->c) == 1 ? 0 : 1;
-+#endif
-+    mpnfree(&rsahm);
-+    return res;
-+}
-+
-+
-+/****************************** DSA **************************************/
-+
-+struct pgpDigSigDSA_s {
-+    mpnumber r;
-+    mpnumber s;
-+};
-+
-+struct pgpDigPubDSA_s {
-+    mpbarrett p;
-+    mpbarrett q;
-+    mpnumber g;
-+    mpnumber y;
-+};
-+
-+int
-+pgpSetSigMpiDSA(pgpDig dig, int num, const uint8_t *p)
-+{
-+    struct pgpDigSigDSA_s *sig;
-+
-+    if (!dig->sigdata)
-+	dig->sigdata = xcalloc(1, sizeof(*sig));
-+    sig = dig->sigdata;
-+    if (!sig)
-+	return 1;
-+    switch(num) {
-+    case 0:
-+	return pgpHexSet(160, &sig->r, p);
-+    case 1:
-+	return pgpHexSet(160, &sig->s, p);
-+    default:
-+	return 1;
-+    }
-+}
-+
-+int
-+pgpSetPubMpiDSA(pgpDig dig, int num, const uint8_t *p)
-+{
-+    struct pgpDigPubDSA_s *pub;
-+
-+    if (!dig->keydata)
-+	dig->keydata = xcalloc(1, sizeof(*pub));
-+    pub = dig->keydata;
-+    if (!pub)
-+	return 1;
-+    switch(num) {
-+    case 0:
-+	mpbsethex(&pub->p, pgpMpiHex(p));
-+	return 0;
-+    case 1:
-+	mpbsethex(&pub->q, pgpMpiHex(p));
-+	return 0;
-+    case 2:
-+	mpnsethex(&pub->g, pgpMpiHex(p));
-+	return 0;
-+    case 3:
-+	mpnsethex(&pub->y, pgpMpiHex(p));
-+	return 0;
-+    default:
-+	return 1;
-+    }
-+}
-+
-+int pgpVerifyDSA(pgpDig dig, uint8_t *hash, size_t hashlen)
-+{
-+    struct pgpDigSigDSA_s *sig;
-+    struct pgpDigPubDSA_s *pub;
-+    mpnumber hm;
-+    int res;
-+
-+    sig = dig->sigdata;
-+    pub = dig->keydata;
-+    if (!sig || !pub)
-+	return 1;
-+    mpnzero(&hm);
-+    mpnsetbin(&hm, hash, hashlen);
-+    res = dsavrfy(&pub->p, &pub->q, &pub->g, &hm, &pub->y, &sig->r, &sig->s) == 1 ? 0 : 1;
-+    mpnfree(&hm);
-+    return res;
-+}
-+
-+/****************************  digest ************************************/
-+
-+#ifdef	SHA_DEBUG
-+#define	DPRINTF(_a)	fprintf _a
-+#else
-+#define	DPRINTF(_a)
-+#endif
-+
-+/**
-+ * MD5/SHA1 digest private data.
-+ */
-+struct DIGEST_CTX_s {
-+    rpmDigestFlags flags;	/*!< Bit(s) to control digest operation. */
-+    int algo;			/*!< Used hash algorithm */
-+    uint32_t datalen;		/*!< No. bytes in block of plaintext data. */
-+    uint32_t paramlen;		/*!< No. bytes of digest parameters. */
-+    uint32_t digestlen;		/*!< No. bytes of digest. */
-+    void * param;		/*!< Digest parameters. */
-+    int (*Reset) (void * param)
-+	/*@modifies param @*/;	/*!< Digest initialize. */
-+    int (*Update) (void * param, const byte * data, size_t size)
-+	/*@modifies param @*/;	/*!< Digest transform. */
-+    int (*Digest) (void * param, /*@out@*/ byte * digest)
-+	/*@modifies param, digest @*/;	/*!< Digest finish. */
-+};
-+
-+DIGEST_CTX
-+rpmDigestDup(DIGEST_CTX octx)
-+{
-+    DIGEST_CTX nctx;
-+    nctx = memcpy(xcalloc(1, sizeof(*nctx)), octx, sizeof(*nctx));
-+    nctx->param = memcpy(xcalloc(1, nctx->paramlen), octx->param, nctx->paramlen);
-+    return nctx;
-+}
-+
-+size_t
-+rpmDigestLength(int hashalgo)
-+{
-+    switch (hashalgo) {
-+    case PGPHASHALGO_MD5:
-+	return 16;
-+    case PGPHASHALGO_SHA1:
-+	return 20;
-+#if HAVE_BEECRYPT_API_H
-+    case PGPHASHALGO_SHA256:
-+	return 32;
-+    case PGPHASHALGO_SHA384:
-+	return 48;
-+    case PGPHASHALGO_SHA512:
-+	return 64;
-+#endif
-+    default:
-+	return 0;
-+    }
-+}
-+
-+DIGEST_CTX
-+rpmDigestInit(int hashalgo, rpmDigestFlags flags)
-+{
-+    DIGEST_CTX ctx = xcalloc(1, sizeof(*ctx));
-+    int xx;
-+
-+    ctx->flags = flags;
-+    ctx->algo = hashalgo;
-+
-+    switch (hashalgo) {
-+    case PGPHASHALGO_MD5:
-+	ctx->digestlen = 16;
-+	ctx->datalen = 64;
-+	ctx->paramlen = sizeof(md5Param);
-+	ctx->param = xcalloc(1, ctx->paramlen);
-+	ctx->Reset = (void *) md5Reset;
-+	ctx->Update = (void *) md5Update;
-+	ctx->Digest = (void *) md5Digest;
-+	break;
-+    case PGPHASHALGO_SHA1:
-+	ctx->digestlen = 20;
-+	ctx->datalen = 64;
-+	ctx->paramlen = sizeof(sha1Param);
-+	ctx->param = xcalloc(1, ctx->paramlen);
-+	ctx->Reset = (void *) sha1Reset;
-+	ctx->Update = (void *) sha1Update;
-+	ctx->Digest = (void *) sha1Digest;
-+	break;
-+#if HAVE_BEECRYPT_API_H
-+    case PGPHASHALGO_SHA256:
-+	ctx->digestlen = 32;
-+	ctx->datalen = 64;
-+	ctx->paramlen = sizeof(sha256Param);
-+	ctx->param = xcalloc(1, ctx->paramlen);
-+	ctx->Reset = (void *) sha256Reset;
-+	ctx->Update = (void *) sha256Update;
-+	ctx->Digest = (void *) sha256Digest;
-+	break;
-+    case PGPHASHALGO_SHA384:
-+	ctx->digestlen = 48;
-+	ctx->datalen = 128;
-+	ctx->paramlen = sizeof(sha384Param);
-+	ctx->param = xcalloc(1, ctx->paramlen);
-+	ctx->Reset = (void *) sha384Reset;
-+	ctx->Update = (void *) sha384Update;
-+	ctx->Digest = (void *) sha384Digest;
-+	break;
-+    case PGPHASHALGO_SHA512:
-+	ctx->digestlen = 64;
-+	ctx->datalen = 128;
-+	ctx->paramlen = sizeof(sha512Param);
-+	ctx->param = xcalloc(1, ctx->paramlen);
-+	ctx->Reset = (void *) sha512Reset;
-+	ctx->Update = (void *) sha512Update;
-+	ctx->Digest = (void *) sha512Digest;
-+	break;
-+#endif
-+    case PGPHASHALGO_RIPEMD160:
-+    case PGPHASHALGO_MD2:
-+    case PGPHASHALGO_TIGER192:
-+    case PGPHASHALGO_HAVAL_5_160:
-+    default:
-+	free(ctx);
-+	return NULL;
-+    }
-+
-+    xx = (*ctx->Reset) (ctx->param);
-+
-+DPRINTF((stderr, "*** Init(%x) ctx %p param %p\n", flags, ctx, ctx->param));
-+    return ctx;
-+}
-+
-+/* LCL: ctx->param may be modified, but ctx is abstract @*/
-+int
-+rpmDigestUpdate(DIGEST_CTX ctx, const void * data, size_t len)
-+{
-+    if (ctx == NULL)
-+	return -1;
-+
-+DPRINTF((stderr, "*** Update(%p,%p,%d) param %p \"%s\"\n", ctx, data, len, ctx->param, ((char *)data)));
-+    return (*ctx->Update) (ctx->param, data, len);
-+}
-+
-+int
-+rpmDigestFinal(DIGEST_CTX ctx, void ** datap, size_t *lenp, int asAscii)
-+{
-+    byte * digest;
-+    char * t;
-+    int i;
-+
-+    if (ctx == NULL)
-+	return -1;
-+    digest = xmalloc(ctx->digestlen);
-+
-+DPRINTF((stderr, "*** Final(%p,%p,%p,%d) param %p digest %p\n", ctx, datap, lenp, asAscii, ctx->param, digest));
-+    /* FIX: check rc */
-+    (void) (*ctx->Digest) (ctx->param, digest);
-+
-+    /* Return final digest. */
-+    if (!asAscii) {
-+	if (lenp) *lenp = ctx->digestlen;
-+	if (datap) {
-+	    *datap = digest;
-+	    digest = NULL;
-+	}
-+    } else {
-+	if (lenp) *lenp = (2*ctx->digestlen) + 1;
-+	if (datap) {
-+	    const byte * s = (const byte *) digest;
-+	    static const char hex[] = "0123456789abcdef";
-+
-+	    *datap = t = xmalloc((2*ctx->digestlen) + 1);
-+	    for (i = 0 ; i < ctx->digestlen; i++) {
-+		*t++ = hex[ (unsigned)((*s >> 4) & 0x0f) ];
-+		*t++ = hex[ (unsigned)((*s++   ) & 0x0f) ];
-+	    }
-+	    *t = '\0';
-+	}
-+    }
-+    if (digest) {
-+	memset(digest, 0, ctx->digestlen);	/* In case it's sensitive */
-+	free(digest);
-+    }
-+    memset(ctx->param, 0, ctx->paramlen);	/* In case it's sensitive */
-+    free(ctx->param);
-+    memset(ctx, 0, sizeof(*ctx));	/* In case it's sensitive */
-+    free(ctx);
-+    return 0;
-+}
---- ./rpmio/digest_nss.c.orig	2011-05-10 15:54:41.000000000 +0000
-+++ ./rpmio/digest_nss.c	2011-05-10 15:54:41.000000000 +0000
-@@ -0,0 +1,500 @@
-+#include <nss.h>
-+#include <sechash.h>
-+#include <keyhi.h>
-+#include <cryptohi.h>
-+
-+#include "system.h"
-+
-+#include <rpm/rpmpgp.h>
-+#include "rpmio/rpmio_internal.h"
-+#include "rpmio/digest.h"
-+
-+#include "debug.h"
-+
-+/* interface to nss crypto framework */
-+
-+/****************************  init   ************************************/
-+
-+static int _crypto_initialized = 0;
-+static int _new_process = 1;
-+
-+/*
-+ * Only flag for re-initialization here, in the common case the child
-+ * exec()'s something else shutting down NSS here would be waste of time.
-+ */
-+static void at_forkchild(void) {
-+    _new_process = 1; 
-+}
-+
-+int rpmInitCrypto(void) {
-+    int rc = 0; 
-+
-+    /* Lazy NSS shutdown for re-initialization after fork() */
-+    if (_new_process && _crypto_initialized) {
-+	rpmFreeCrypto();
-+    }    
-+
-+    /* Initialize NSS if not already done */
-+    if (!_crypto_initialized) {
-+	if (NSS_NoDB_Init(NULL) != SECSuccess) {
-+	    rc = -1;
-+	} else {
-+	    _crypto_initialized = 1; 
-+	}
-+    }
-+
-+    /* Register one post-fork handler per process */
-+    if (_new_process) {
-+	if (pthread_atfork(NULL, NULL, at_forkchild) != 0) { 
-+	    rpmlog(RPMLOG_WARNING, _("Failed to register fork handler: %m\n"));
-+	}
-+	_new_process = 0;
-+    }
-+    return rc;
-+}
-+
-+int rpmInitCrypto(void) {
-+    int rc = 0; 
-+
-+    if (!_crypto_initialized) {
-+	if (NSS_NoDB_Init(NULL) != SECSuccess) {
-+	    rc = -1;
-+	} else {
-+	    _crypto_initialized = 1; 
-+	}
-+    }    
-+    return rc;
-+}
-+
-+int rpmFreeCrypto(void) 
-+{
-+    int rc = 0; 
-+    if (_crypto_initialized) {
-+        rc = (NSS_Shutdown() != SECSuccess);
-+        _crypto_initialized = 0; 
-+    }
-+    return rc;
-+}
-+
-+/**************************** helpers ************************************/
-+
-+static SECKEYPublicKey *pgpNewPublicKey(KeyType type)
-+{
-+    PRArenaPool *arena;
-+    SECKEYPublicKey *key;
-+    
-+    arena = PORT_NewArena(DER_DEFAULT_CHUNKSIZE);
-+    if (arena == NULL)
-+        return NULL;
-+    
-+    key = PORT_ArenaZAlloc(arena, sizeof(SECKEYPublicKey));
-+    
-+    if (key == NULL) {
-+        PORT_FreeArena(arena, PR_FALSE);
-+        return NULL;
-+    }    
-+    
-+    key->keyType = type;
-+    key->pkcs11ID = CK_INVALID_HANDLE;
-+    key->pkcs11Slot = NULL;
-+    key->arena = arena;
-+    return key; 
-+}
-+
-+static SECItem *pgpMpiItem(PRArenaPool *arena, SECItem *item, const uint8_t *p)
-+{
-+    size_t nbytes = pgpMpiLen(p)-2;
-+
-+    if (item == NULL) {
-+        if ((item=SECITEM_AllocItem(arena, item, nbytes)) == NULL)
-+            return item;
-+    } else {
-+        if (arena != NULL)
-+            item->data = PORT_ArenaGrow(arena, item->data, item->len, nbytes);
-+        else
-+            item->data = PORT_Realloc(item->data, nbytes);
-+     
-+        if (item->data == NULL) {
-+            if (arena == NULL)
-+                SECITEM_FreeItem(item, PR_TRUE);
-+            return NULL;
-+        }
-+    }    
-+
-+    memcpy(item->data, p+2, nbytes);
-+    item->len = nbytes;
-+    return item;
-+}
-+
-+static int pgpMpiSet(unsigned int lbits,
-+                void *dest, const uint8_t * p, const uint8_t * pend)
-+{
-+    unsigned int mbits = pgpMpiBits(p);
-+    unsigned int nbits;
-+    size_t nbytes;
-+    char *t = dest;
-+    unsigned int ix;
-+
-+    if ((p + ((mbits+7) >> 3)) > pend)
-+        return 1;
-+
-+    if (mbits > lbits)
-+        return 1;
-+
-+    nbits = (lbits > mbits ? lbits : mbits);
-+    nbytes = ((nbits + 7) >> 3);
-+    ix = (nbits - mbits) >> 3;
-+
-+    if (ix > 0) memset(t, '\0', ix); 
-+    memcpy(t+ix, p+2, nbytes-ix);
-+
-+    return 0;
-+}
-+
-+void pgpCleanRSADSA(pgpDig dig)
-+{
-+    if (!dig)
-+	return;
-+    if (dig->keydata) {
-+	SECKEY_DestroyPublicKey(dig->keydata);
-+	dig->keydata = NULL;
-+    }
-+    if (dig->sigdata) {
-+	SECITEM_ZfreeItem(dig->sigdata, PR_TRUE);
-+	dig->sigdata = NULL;
-+    }
-+}
-+
-+/****************************** RSA **************************************/
-+
-+int
-+pgpSetSigMpiRSA(struct pgpDig_s *dig, int num, const uint8_t *p, const uint8_t *pend)
-+{
-+    SECItem *sig;
-+
-+    if (num != 0)
-+	return 1;
-+    sig = dig->rsasigdata;
-+    sig = pgpMpiItem(NULL, sig, p);
-+    dig->rsasigdata = sig;
-+    if (sig == NULL)
-+	return 1;
-+    return 0;
-+}
-+
-+int
-+pgpSetPubMpiRSA(struct pgpDig_s *dig, int num, const uint8_t *p, const uint8_t *pend)
-+{
-+    SECKEYPublicKey *pub;
-+
-+    if (!dig->keydata)
-+	dig->keydata = pgpNewPublicKey(rsaKey);
-+    pub = dig->keydata;
-+    if (!pub)
-+	return 1;
-+    switch(num) {
-+    case 0:
-+	pgpMpiItem(pub->arena, &pub->u.rsa.modulus, p);
-+	return 0;
-+    case 1:
-+	pgpMpiItem(pub->arena, &pub->u.rsa.publicExponent, p);
-+	return 0;
-+    default:
-+	return 1;
-+    }
-+}
-+
-+int pgpVerifyRSA(pgpDig dig, uint8_t *hash, size_t hashlen)
-+{
-+    SECOidTag sigalg;
-+    SECItem digest;
-+    SECKEYPublicKey *pub;
-+    SECItem *sig;
-+    SECItem *newsig = NULL;
-+    size_t siglen;
-+    int res;
-+
-+    switch (dig->hash_algo) {
-+    case PGPHASHALGO_MD5:
-+        sigalg = SEC_OID_PKCS1_MD5_WITH_RSA_ENCRYPTION;
-+        break;
-+    case PGPHASHALGO_SHA1:
-+        sigalg = SEC_OID_PKCS1_SHA1_WITH_RSA_ENCRYPTION;
-+        break;
-+    case PGPHASHALGO_MD2:
-+        sigalg = SEC_OID_PKCS1_MD2_WITH_RSA_ENCRYPTION;
-+        break;
-+    case PGPHASHALGO_SHA256:
-+        sigalg = SEC_OID_PKCS1_SHA256_WITH_RSA_ENCRYPTION;
-+        break;
-+    case PGPHASHALGO_SHA384:
-+        sigalg = SEC_OID_PKCS1_SHA384_WITH_RSA_ENCRYPTION;
-+        break;
-+    case PGPHASHALGO_SHA512:
-+        sigalg = SEC_OID_PKCS1_SHA512_WITH_RSA_ENCRYPTION;
-+        break;
-+    /* fallthrough for unsupported / unknown types */
-+    default:
-+        sigalg = SEC_OID_UNKNOWN;
-+        break;
-+    }
-+    digest.type = siBuffer;
-+    digest.data = hash;
-+    digest.len = hashlen;
-+
-+    pub = dig->keydata;
-+    sig = dig->sigdata;
-+    siglen = SECKEY_SignatureLen(dig->keydata);
-+
-+    /* Zero-pad signature data up to expected size if necessary */
-+    if (siglen > sig->len) {
-+	size_t pad = siglen - sig->len;
-+	if ((newsig = SECITEM_AllocItem(NULL, NULL, siglen)) == NULL) {
-+	    return 1;
-+	}
-+	memset(newsig->data, 0, pad);
-+	memcpy(newsig->data+pad, sig->data, sig->len);
-+	sig = newsig;
-+    }
-+
-+    if (VFY_VerifyDigest(&digest, pub, sig, sigalg, NULL) == SECSuccess)
-+	res = 0;
-+    else
-+	res = 1;
-+
-+    if (newsig) {
-+	SECITEM_ZfreeItem(newsig, 1);
-+    }
-+    return res;
-+}
-+
-+
-+/****************************** DSA **************************************/
-+
-+int
-+pgpSetSigMpiDSA(struct pgpDig_s *dig, int num, const uint8_t *p, const uint8_t *pend)
-+{
-+    SECItem *sig, *new;
-+
-+    switch(num) {
-+    case 0:
-+	sig = SECITEM_AllocItem(NULL, NULL, 2*DSA_SUBPRIME_LEN);
-+	dig->sigdata = sig;
-+	memset(sig->data, 0, 2*DSA_SUBPRIME_LEN);
-+	pgpMpiSet(DSA_SUBPRIME_LEN*8, sig->data, p, pend);
-+	return 0;
-+    case 1:
-+	sig = dig->sigdata;
-+	if (!sig)
-+	    return 1;
-+	pgpMpiSet(DSA_SUBPRIME_LEN*8, sig->data + DSA_SUBPRIME_LEN, p, pend);
-+	new = SECITEM_AllocItem(NULL, NULL, 0);
-+	if (!new)
-+	    return 1;
-+	if (DSAU_EncodeDerSig(new, sig) != SECSuccess)
-+	    return 1;
-+	SECITEM_FreeItem(sig, PR_TRUE);
-+	dig->sigdata = new;
-+	return 0;
-+    default:
-+	return 1;
-+    }
-+}
-+
-+int
-+pgpSetPubMpiDSA(struct pgpDig_s *dig, int num, const uint8_t *p, const uint8_t *pend)
-+{
-+    SECKEYPublicKey *pub;
-+
-+    if (!dig->keydata)
-+	dig->keydata = pgpNewPublicKey(dsaKey);
-+    pub = dig->keydata;
-+    if (!pub)
-+	return 1;
-+    switch(num) {
-+    case 0:
-+	pgpMpiItem(pub->arena, &pub->u.dsa.params.prime, p);
-+	return 0;
-+    case 1:
-+	pgpMpiItem(pub->arena, &pub->u.dsa.params.subPrime, p);
-+	return 0;
-+    case 2:
-+	pgpMpiItem(pub->arena, &pub->u.dsa.params.base, p);
-+	return 0;
-+    case 3:
-+	pgpMpiItem(pub->arena, &pub->u.dsa.publicValue, p);
-+	return 0;
-+    default:
-+	return 1;
-+    }
-+}
-+
-+int pgpVerifyDSA(pgpDig dig, uint8_t *hash, size_t hashlen)
-+{
-+    SECItem digest;
-+    SECKEYPublicKey *pub;
-+    SECItem *sig;
-+
-+    sig = dig->sigdata;
-+    pub = dig->keydata;
-+    digest.type = siBuffer;
-+    digest.data = hash;
-+    digest.len = hashlen;
-+    if (VFY_VerifyDigest(&digest, pub, sig, SEC_OID_ANSIX9_DSA_SIGNATURE_WITH_SHA1_DIGEST, NULL) == SECSuccess)
-+	return 0;
-+    else
-+	return 1;
-+}
-+
-+
-+/****************************  digest ************************************/
-+
-+
-+#ifdef	SHA_DEBUG
-+#define	DPRINTF(_a)	fprintf _a
-+#else
-+#define	DPRINTF(_a)
-+#endif
-+
-+
-+/**
-+ * MD5/SHA1 digest private data.
-+ */
-+struct DIGEST_CTX_s {
-+    rpmDigestFlags flags;	/*!< Bit(s) to control digest operation. */
-+    HASHContext *hashctx;	/*!< Internal NSS hash context. */
-+    int algo;			/*!< Used hash algorithm */
-+};
-+
-+DIGEST_CTX
-+rpmDigestDup(DIGEST_CTX octx)
-+{
-+    DIGEST_CTX nctx;
-+    nctx = memcpy(xcalloc(1, sizeof(*nctx)), octx, sizeof(*nctx));
-+    nctx->hashctx = HASH_Clone(octx->hashctx);
-+    if (nctx->hashctx == NULL) {
-+    	fprintf(stderr, "HASH_Clone failed\n");
-+    	exit(EXIT_FAILURE);  /* FIX: callers do not bother checking error return */
-+    }
-+    return nctx;
-+}
-+
-+RPM_GNUC_PURE
-+static HASH_HashType getHashType(int hashalgo)
-+{
-+    switch (hashalgo) {
-+    case PGPHASHALGO_MD5:
-+	return HASH_AlgMD5;
-+	break;
-+    case PGPHASHALGO_MD2:
-+	return HASH_AlgMD2;
-+	break;
-+    case PGPHASHALGO_SHA1:
-+	return HASH_AlgSHA1;
-+	break;
-+    case PGPHASHALGO_SHA256:
-+	return HASH_AlgSHA256;
-+	break;
-+    case PGPHASHALGO_SHA384:
-+	return HASH_AlgSHA384;
-+	break;
-+    case PGPHASHALGO_SHA512:
-+	return HASH_AlgSHA512;
-+	break;
-+    case PGPHASHALGO_RIPEMD160:
-+    case PGPHASHALGO_TIGER192:
-+    case PGPHASHALGO_HAVAL_5_160:
-+    default:
-+	return HASH_AlgNULL;
-+	break;
-+    }
-+}
-+
-+size_t
-+rpmDigestLength(int hashalgo)
-+{
-+    return HASH_ResultLen(getHashType(hashalgo));
-+}
-+
-+DIGEST_CTX
-+rpmDigestInit(int hashalgo, rpmDigestFlags flags)
-+{
-+    HASH_HashType type;
-+    HASHContext *hashctx = NULL;
-+    DIGEST_CTX ctx = NULL;
-+
-+    if (type == HASH_AlgNULL || rpmInitCrypto() < 0)
-+	return NULL;
-+
-+    if ((hashctx = HASH_Create(type)) == NULL)
-+	return NULL;
-+    ctx = xcalloc(1, sizeof(*ctx));
-+    ctx->flags = flags;
-+    ctx->algo = hashalgo;
-+    ctx->hashctx = hashctx;
-+    HASH_Begin(ctx->hashctx);
-+    
-+DPRINTF((stderr, "*** Init(%x) ctx %p hashctx %p\n", flags, ctx, ctx->hashctx));
-+    return ctx;
-+}
-+
-+int
-+rpmDigestUpdate(DIGEST_CTX ctx, const void * data, size_t len)
-+{
-+    size_t partlen;
-+    const unsigned char *ptr = data;
-+
-+    if (ctx == NULL)
-+	return -1;
-+
-+DPRINTF((stderr, "*** Update(%p,%p,%zd) hashctx %p \"%s\"\n", ctx, data, len, ctx->hashctx, ((char *)data)));
-+   partlen = ~(unsigned int)0xFF;
-+   while (len > 0) {
-+   	if (len < partlen) {
-+   		partlen = len;
-+   	}
-+	HASH_Update(ctx->hashctx, ptr, partlen);
-+	ptr += partlen;
-+	len -= partlen;
-+   }
-+   return 0;
-+}
-+
-+int
-+rpmDigestFinal(DIGEST_CTX ctx, void ** datap, size_t *lenp, int asAscii)
-+{
-+    unsigned char * digest;
-+    unsigned int digestlen;
-+
-+    if (ctx == NULL)
-+	return -1;
-+    digestlen = HASH_ResultLenContext(ctx->hashctx);
-+    digest = xmalloc(digestlen);
-+
-+DPRINTF((stderr, "*** Final(%p,%p,%p,%zd) hashctx %p digest %p\n", ctx, datap, lenp, asAscii, ctx->hashctx, digest));
-+/* FIX: check rc */
-+    HASH_End(ctx->hashctx, digest, (unsigned int *) &digestlen, digestlen);
-+
-+    /* Return final digest. */
-+    if (!asAscii) {
-+	if (lenp) *lenp = digestlen;
-+	if (datap) {
-+	    *datap = digest;
-+	    digest = NULL;
-+	}
-+    } else {
-+	if (lenp) *lenp = (2*digestlen) + 1;
-+	if (datap) {
-+	    const uint8_t * s = (const uint8_t *) digest;
-+	    *datap = pgpHexStr(s, digestlen);
-+	}
-+    }
-+    if (digest) {
-+	memset(digest, 0, digestlen);	/* In case it's sensitive */
-+	free(digest);
-+    }
-+    HASH_Destroy(ctx->hashctx);
-+    memset(ctx, 0, sizeof(*ctx));	/* In case it's sensitive */
-+    free(ctx);
-+    return 0;
-+}
---- ./rpmio/rpmpgp.c.orig	2010-12-03 12:11:57.000000000 +0000
-+++ ./rpmio/rpmpgp.c	2011-05-10 16:01:58.000000000 +0000
-@@ -20,9 +20,6 @@ static int _debug = 0;
- 
- static int _print = 0;
- 
--static int _crypto_initialized = 0;
--static int _new_process = 1;
--
- typedef const struct pgpValTbl_s {
-     int val;
-     char const * const str;
-@@ -315,89 +312,6 @@ int pgpValTok(pgpValTbl vs, const char *
-     } while ((++vs)->val != -1);
-     return vs->val;
- }
--/**
-- * @return		0 on success
-- */
--static int pgpMpiSet(const char * pre, unsigned int lbits,
--		uint8_t *dest, const uint8_t * p, const uint8_t * pend)
--{
--    unsigned int mbits = pgpMpiBits(p);
--    unsigned int nbits;
--    size_t nbytes;
--    uint8_t *t = dest;
--    unsigned int ix;
--
--    if ((p + ((mbits+7) >> 3)) > pend)
--	return 1;
--
--    if (mbits > lbits)
--	return 1;
--
--    nbits = (lbits > mbits ? lbits : mbits);
--    nbytes = ((nbits + 7) >> 3);
--    ix = (nbits - mbits) >> 3;
--
--if (_debug)
--fprintf(stderr, "*** mbits %u nbits %u nbytes %zu ix %u\n", mbits, nbits, nbytes, ix);
--    if (ix > 0) memset(t, '\0', ix);
--    memcpy(t+ix, p+2, nbytes-ix);
--if (_debug)
--fprintf(stderr, "*** %s %s\n", pre, pgpHexStr(dest, nbytes));
--
--    return 0;
--}
--
--/**
-- * @return		NULL on error
-- */
--static SECItem *pgpMpiItem(PRArenaPool *arena, SECItem *item, const uint8_t *p)
--{
--    size_t nbytes = pgpMpiLen(p)-2;
--
--    if (item == NULL) {
--    	if ((item=SECITEM_AllocItem(arena, item, nbytes)) == NULL)
--    	    return item;
--    } else {
--    	if (arena != NULL)
--    	    item->data = PORT_ArenaGrow(arena, item->data, item->len, nbytes);
--    	else
--    	    item->data = PORT_Realloc(item->data, nbytes);
--    	
--    	if (item->data == NULL) {
--    	    if (arena == NULL)
--    		SECITEM_FreeItem(item, PR_TRUE);
--    	    return NULL;
--    	}
--    }
--
--    memcpy(item->data, p+2, nbytes);
--    item->len = nbytes;
--    return item;
--}
--/*@=boundswrite@*/
--
--static SECKEYPublicKey *pgpNewPublicKey(KeyType type)
--{
--    PRArenaPool *arena;
--    SECKEYPublicKey *key;
--    
--    arena = PORT_NewArena(DER_DEFAULT_CHUNKSIZE);
--    if (arena == NULL)
--	return NULL;
--    
--    key = PORT_ArenaZAlloc(arena, sizeof(SECKEYPublicKey));
--    
--    if (key == NULL) {
--	PORT_FreeArena(arena, PR_FALSE);
--	return NULL;
--    }
--    
--    key->keyType = type;
--    key->pkcs11ID = CK_INVALID_HANDLE;
--    key->pkcs11Slot = NULL;
--    key->arena = arena;
--    return key;
--}
- 
- /** \ingroup rpmpgp
-  * Is buffer at beginning of an OpenPGP packet?
-@@ -593,29 +507,16 @@ static int pgpPrtSigParams(pgpTag tag, u
- {
-     const uint8_t * pend = h + hlen;
-     size_t i;
--    SECItem dsaraw;
--    unsigned char dsabuf[2*DSA_SUBPRIME_LEN];
-     char *mpi;
- 
--    dsaraw.type = 0;
--    dsaraw.data = dsabuf;
--    dsaraw.len = sizeof(dsabuf);
--    
-     for (i = 0; p < pend; i++, p += pgpMpiLen(p)) {
- 	if (pubkey_algo == PGPPUBKEYALGO_RSA) {
- 	    if (i >= 1) break;
- 	    if (_dig &&
- 	(sigtype == PGPSIGTYPE_BINARY || sigtype == PGPSIGTYPE_TEXT))
- 	    {
--		switch (i) {
--		case 0:		/* m**d */
--		    _dig->sigdata = pgpMpiItem(NULL, _dig->sigdata, p);
--		    if (_dig->sigdata == NULL)
--			return 1;
--		    break;
--		default:
--		    break;
--		}
-+		if (pgpSetSigMpiRSA(_dig, i, p))
-+		    return 1;
- 	    }
- 	    pgpPrtStr("", pgpSigRSA[i]);
- 	} else if (pubkey_algo == PGPPUBKEYALGO_DSA) {
-@@ -623,30 +524,8 @@ static int pgpPrtSigParams(pgpTag tag, u
- 	    if (_dig &&
- 	(sigtype == PGPSIGTYPE_BINARY || sigtype == PGPSIGTYPE_TEXT))
- 	    {
--		int xx;
--		xx = 0;
--		switch (i) {
--		case 0:
--		    memset(dsaraw.data, '\0', 2*DSA_SUBPRIME_LEN);
--				/* r */
--		    xx = pgpMpiSet(pgpSigDSA[i], DSA_SUBPRIME_LEN*8, dsaraw.data, p, pend);
--		    break;
--		case 1:		/* s */
--		    xx = pgpMpiSet(pgpSigDSA[i], DSA_SUBPRIME_LEN*8, dsaraw.data + DSA_SUBPRIME_LEN, p, pend);
--		    if (_dig->sigdata != NULL)
--		    	SECITEM_FreeItem(_dig->sigdata, PR_FALSE);
--		    else if ((_dig->sigdata=SECITEM_AllocItem(NULL, NULL, 0)) == NULL) {
--		        xx = 1;
--		        break;
--		    }
--		    if (DSAU_EncodeDerSig(_dig->sigdata, &dsaraw) != SECSuccess)
--		    	xx = 1;
--		    break;
--		default:
--		    xx = 1;
--		    break;
--		}
--		if (xx) return xx;
-+		if (pgpSetSigMpiDSA(_dig, i, p))
-+		    return 1;
- 	    }
- 	    pgpPrtStr("", pgpSigDSA[i]);
- 	} else {
-@@ -838,49 +717,11 @@ static const uint8_t * pgpPrtPubkeyParam
- 	char * mpi;
- 	if (pubkey_algo == PGPPUBKEYALGO_RSA) {
- 	    if (i >= 2) break;
--	    if (_dig) {
--		if (_dig->keydata == NULL) {
--		    _dig->keydata = pgpNewPublicKey(rsaKey);
--		    if (_dig->keydata == NULL)
--			break; /* error abort? */
--		}
--		switch (i) {
--		case 0:		/* n */
--		    pgpMpiItem(_dig->keydata->arena, &_dig->keydata->u.rsa.modulus, p);
--		    break;
--		case 1:		/* e */
--		    pgpMpiItem(_dig->keydata->arena, &_dig->keydata->u.rsa.publicExponent, p);
--		    break;
--		default:
--		    break;
--		}
--	    }
-+	    pgpSetPubMpiRSA(_dig, i, p);
- 	    pgpPrtStr("", pgpPublicRSA[i]);
- 	} else if (pubkey_algo == PGPPUBKEYALGO_DSA) {
- 	    if (i >= 4) break;
--	    if (_dig) {
--		if (_dig->keydata == NULL) {
--		    _dig->keydata = pgpNewPublicKey(dsaKey);
--		    if (_dig->keydata == NULL)
--			break; /* error abort? */
--		}
--		switch (i) {
--		case 0:		/* p */
--		    pgpMpiItem(_dig->keydata->arena, &_dig->keydata->u.dsa.params.prime, p);
--		    break;
--		case 1:		/* q */
--		    pgpMpiItem(_dig->keydata->arena, &_dig->keydata->u.dsa.params.subPrime, p);
--		    break;
--		case 2:		/* g */
--		    pgpMpiItem(_dig->keydata->arena, &_dig->keydata->u.dsa.params.base, p);
--		    break;
--		case 3:		/* y */
--		    pgpMpiItem(_dig->keydata->arena, &_dig->keydata->u.dsa.publicValue, p);
--		    break;
--		default:
--		    break;
--		}
--	    }
-+	    pgpSetPubMpiDSA(_dig, i, p);
- 	    pgpPrtStr("", pgpPublicDSA[i]);
- 	} else if (pubkey_algo == PGPPUBKEYALGO_ELGAMAL_ENCRYPT) {
- 	    if (i >= 3) break;
-@@ -1265,15 +1106,7 @@ void pgpCleanDig(pgpDig dig)
- 	memset(&dig->signature, 0, sizeof(dig->signature));
- 	memset(&dig->pubkey, 0, sizeof(dig->pubkey));
- 
--	if (dig->keydata != NULL) {
--	    SECKEY_DestroyPublicKey(dig->keydata);
--	    dig->keydata = NULL;
--	}
--
--	if (dig->sigdata != NULL) {
--	    SECITEM_ZfreeItem(dig->sigdata, PR_TRUE);
--	    dig->sigdata = NULL;
--	}
-+        pgpCleanRSADSA(dig);
-     }
-     return;
- }
-@@ -1315,39 +1148,6 @@ int pgpPrtPkts(const uint8_t * pkts, siz
-     return 0;
- }
- 
--static SECOidTag getSigAlg(pgpDigParams sigp)
--{
--    SECOidTag sigalg = SEC_OID_UNKNOWN;
--    if (sigp->pubkey_algo == PGPPUBKEYALGO_DSA) {
--	/* assume SHA1 for now, NSS doesn't have SECOID's for other types */
--	sigalg = SEC_OID_ANSIX9_DSA_SIGNATURE_WITH_SHA1_DIGEST;
--    } else if (sigp->pubkey_algo == PGPPUBKEYALGO_RSA) {
--	switch (sigp->hash_algo) {
--	case PGPHASHALGO_MD5:
--	    sigalg = SEC_OID_PKCS1_MD5_WITH_RSA_ENCRYPTION;
--	    break;
--	case PGPHASHALGO_MD2:
--	    sigalg = SEC_OID_PKCS1_MD2_WITH_RSA_ENCRYPTION;
--	    break;
--	case PGPHASHALGO_SHA1:
--	    sigalg = SEC_OID_PKCS1_SHA1_WITH_RSA_ENCRYPTION;
--	    break;
--	case PGPHASHALGO_SHA256:
--	    sigalg = SEC_OID_PKCS1_SHA256_WITH_RSA_ENCRYPTION;
--	    break;
--	case PGPHASHALGO_SHA384:
--	     sigalg = SEC_OID_PKCS1_SHA384_WITH_RSA_ENCRYPTION;
--	    break;
--	case PGPHASHALGO_SHA512:
--	    sigalg = SEC_OID_PKCS1_SHA512_WITH_RSA_ENCRYPTION;
--	    break;
--	default:
--	    break;
--	}
--    }
--    return sigalg;
--}
--
- char *pgpIdentItem(pgpDigParams digp)
- {
-     char *id = NULL;
-@@ -1396,30 +1196,12 @@ rpmRC pgpVerifySig(pgpDig dig, DIGEST_CT
- 
-     /* Compare leading 16 bits of digest for quick check. */
-     if (hash && memcmp(hash, sigp->signhash16, 2) == 0) {
--	SECItem digest = { .type = siBuffer, .data = hash, .len = hashlen };
--	SECItem *sig = dig->sigdata;
--
--	/* Zero-pad RSA signature to expected size if necessary */
--	if (sigp->pubkey_algo == PGPPUBKEYALGO_RSA) {
--	    size_t siglen = SECKEY_SignatureLen(dig->keydata);
--	    if (siglen > sig->len) {
--		size_t pad = siglen - sig->len;
--		if ((sig = SECITEM_AllocItem(NULL, NULL, siglen)) == NULL) {
--		    goto exit;
--		}
--		memset(sig->data, 0, pad);
--		memcpy(sig->data+pad, dig->sigdata->data, dig->sigdata->len);
--	    }
--	}
--
--	/* XXX VFY_VerifyDigest() is deprecated in NSS 3.12 */ 
--	if (VFY_VerifyDigest(&digest, dig->keydata, sig,
--			     getSigAlg(sigp), NULL) == SECSuccess) {
--	    res = RPMRC_OK;
--	}
--
--	if (sig != dig->sigdata) {
--	    SECITEM_ZfreeItem(sig, 1);
-+        if (sigp->pubkey_algo == PGPPUBKEYALGO_RSA) {
-+	    if (!pgpVerifyRSA(dig, hash, hashlen))
-+		res = RPMRC_OK;
-+	} else if (sigp->pubkey_algo == PGPPUBKEYALGO_DSA) {
-+	    if (!pgpVerifyDSA(dig, hash, hashlen))
-+		res = RPMRC_OK;
- 	}
-     }
- 
-@@ -1607,50 +1389,3 @@ char * pgpArmorWrap(int atype, const uns
-     return val;
- }
- 
--/*
-- * Only flag for re-initialization here, in the common case the child
-- * exec()'s something else shutting down NSS here would be waste of time.
-- */
--static void at_forkchild(void)
--{
--    _new_process = 1;
--}
--
--int rpmInitCrypto(void) {
--    int rc = 0;
--
--    /* Lazy NSS shutdown for re-initialization after fork() */
--    if (_new_process && _crypto_initialized) {
--	rpmFreeCrypto();
--    }
--
--    /* Initialize NSS if not already done */
--    if (!_crypto_initialized) {
--	if (NSS_NoDB_Init(NULL) != SECSuccess) {
--	    rc = -1;
--	} else {
--	    _crypto_initialized = 1;
--	}
--    }
--
--    /* Register one post-fork handler per process */
--    if (_new_process) {
--	if (pthread_atfork(NULL, NULL, at_forkchild) != 0) {
--	    rpmlog(RPMLOG_WARNING, _("Failed to register fork handler: %m\n"));
--	}
--	_new_process = 0;
--    }
--    return rc;
--}
--
--int rpmFreeCrypto(void) 
--{
--    int rc = 0;
--    if (_crypto_initialized) {
--	rc = (NSS_Shutdown() != SECSuccess);
--    	_crypto_initialized = 0;
--    }
--    return rc;
--}
--	
--	
diff --git a/rpm-gst-provides.patch b/rpm-gst-provides.patch
deleted file mode 100644
index 7c4fe6c..0000000
--- a/rpm-gst-provides.patch
+++ /dev/null
@@ -1,14 +0,0 @@
-Index: ./autodeps/linux.prov
-===================================================================
---- ./autodeps/linux.prov
-+++ ./autodeps/linux.prov
-@@ -102,4 +102,9 @@ fi
- [ -x /usr/lib/rpm/find-provides.ksyms ] &&
-     printf "%s\n" "${filelist[@]}" | /usr/lib/rpm/find-provides.ksyms "$@"
- 
-+#
-+# --- GStreamer provides, codecs
-+[ -x /usr/lib/rpm/gstreamer-provides ] &&
-+    printf "%s\n" "${filelist[@]}" | /usr/lib/rpm/gstreamer-provides | sort -u
-+
- exit 0
diff --git a/rpm-python.changes b/rpm-python.changes
index 2c2353d..0746aa6 100644
--- a/rpm-python.changes
+++ b/rpm-python.changes
@@ -1,58 +1,3 @@
--------------------------------------------------------------------
-Wed Feb 23 14:01:41 CET 2011 - mls@suse.de
-
-- drop standard python directories from filelist [bnc#229189]
-
--------------------------------------------------------------------
-Fri Oct 22 15:52:32 UTC 2010 - coolo@novell.com
-
-- adapt second spec file to changes done to rpm.spec
-
--------------------------------------------------------------------
-Mon Oct 18 11:03:53 CEST 2010 - dmueller@suse.de
-
-- adapt buildrequires 
-
--------------------------------------------------------------------
-Thu Feb 12 16:52:26 CET 2009 - ro@suse.de
-
-- adapt buildrequires 
-
--------------------------------------------------------------------
-Wed Oct  8 11:24:22 CEST 2008 - cthiel@suse.de
-
-- added libelf-devel to BuildRequires to fix build
-
--------------------------------------------------------------------
-Thu Sep 11 15:33:52 CEST 2008 - mls@suse.de
-
-- update to 4.4.2.3 to get rid of >50 patches
-
--------------------------------------------------------------------
-Sat Aug 30 21:23:38 CEST 2008 - cthiel@suse.de
-
-- add libselinux-devel to BuildRequires
-
--------------------------------------------------------------------
-Thu Aug  7 16:05:51 CEST 2008 - dmueller@suse.de
-
-- fix build against python 2.6
-
--------------------------------------------------------------------
-Thu Mar 27 14:47:18 CET 2008 - coolo@suse.de
-
-- fix buildrequires
-
--------------------------------------------------------------------
-Fri May 25 16:20:53 CEST 2007 - mls@suse.de
-
-- fix unicode queries
-
--------------------------------------------------------------------
-Fri Mar 30 15:06:28 CEST 2007 - rguenther@suse.de
-
-- add ncurses-devel and zlib-devel BuildRequires.
-
 -------------------------------------------------------------------
 Wed Oct 18 22:59:02 CEST 2006 - mls@suse.de
 
diff --git a/rpm-python.spec b/rpm-python.spec
index 60aa95f..ef05e37 100644
--- a/rpm-python.spec
+++ b/rpm-python.spec
@@ -1,37 +1,27 @@
 #
-# spec file for package rpm-python
+# spec file for package rpm-python (Version 4.4.2)
 #
-# Copyright (c) 2011 SUSE LINUX Products GmbH, Nuernberg, Germany.
+# Copyright (c) 2006 SUSE LINUX Products GmbH, Nuernberg, Germany.
+# This file and all modifications and additions to the pristine
+# package are under the same license as the package itself.
 #
-# All modifications and additions to the file contributed by third parties
-# remain the property of their copyright owners, unless otherwise agreed
-# upon. The license for this file, and modifications and additions to the
-# file, is the same license as for the pristine package itself (unless the
-# license for the pristine package is not an Open Source License, in which
-# case the license is the MIT License). An "Open Source License" is a
-# license that conforms to the Open Source Definition (Version 1.9)
-# published by the Open Source Initiative.
-
 # Please submit bugfixes or comments via http://bugs.opensuse.org/
 #
 
 # norootforbuild
 
-
 Name:           rpm-python
-BuildRequires:  file-devel libbz2-devel libelf-devel libselinux-devel libsemanage-devel lua-devel ncurses-devel popt-devel
-BuildRequires:  libacl-devel libcap-devel python-devel xz-devel zlib-devel
-#!BuildIgnore:  rpmlint-Factory
-License:        GPLv2+
+BuildRequires:  python-devel
+License:        GNU General Public License (GPL)
 Group:          System/Packages
 Summary:        Python Bindings for Manipulating RPM Packages
-Version:        4.9.0
-Release:        7
+Version:        4.4.2
+Release:        76
 Requires:       rpm = %{version}
+
 %py_requires
 Source99:       rpm.spec
 %{expand:%(sed -n -e '/^Source:/,/^BuildRoot:/p' <%_sourcedir/rpm.spec)}
-%global with_python 1
 
 %description
 The rpm-python package contains a module that permits applications
@@ -54,7 +44,7 @@ Authors:
 %install
 rm -rf $RPM_BUILD_ROOT
 mkdir -p $RPM_BUILD_ROOT/usr/lib
-# only installing in python/ does not work because rpm links against
+# only installing in python/ does not work because rpm links agains
 # installed libs at install time
 make DESTDIR="$RPM_BUILD_ROOT" install
 find "%{buildroot}" -not -type d -and -not -path %{buildroot}%{_libdir}/python%{py_ver}/site-packages/rpm/\* -print0 | xargs -0 rm
@@ -69,6 +59,22 @@ rm -rf $RPM_BUILD_ROOT
 
 %files
 %defattr(-,root,root)
-%{_libdir}/python*/*/*
+%{_libdir}/python*
 
-%changelog
+%changelog -n rpm-python
+* Wed Oct 18 2006 - mls@suse.de
+- use rpm.spec for building instead of duplication everything
+- delete superfluous .a and .la files [#202604]
+- create .pyc and .pyo files [#205711]
+* Sun Oct 15 2006 - schwab@suse.de
+- Make sure config.rpath is present.
+* Fri Sep 22 2006 - aj@suse.de
+- Fix for python2.5.
+* Thu Sep 21 2006 - lnussel@suse.de
+- do not package beecrypt python bindings as libbeecrypt is not
+  packaged either
+- fix literal %%{version} in Requires tag
+* Thu Sep 21 2006 - lnussel@suse.de
+- fix build with python 2.5 by overriding autodetection
+* Tue Sep 19 2006 - rguenther@suse.de
+- split from rpm package
diff --git a/rpm-shorten-changelog.diff b/rpm-shorten-changelog.diff
deleted file mode 100644
index 7090250..0000000
--- a/rpm-shorten-changelog.diff
+++ /dev/null
@@ -1,88 +0,0 @@
---- ./build/pack.c.orig	2011-02-15 13:03:56.000000000 +0000
-+++ ./build/pack.c	2011-05-11 15:35:07.000000000 +0000
-@@ -671,6 +671,63 @@ static rpmRC checkPackages(char *pkgchec
-     return RPMRC_OK;
- }
- 
-+static void trimChangelog(Header h)
-+{
-+    static int oneshot;
-+    static int cuttime, minnum, maxnum;
-+    int * times;
-+    char ** names = 0, ** texts = 0;
-+    int i, keep, count = 0;
-+
-+    if (!oneshot) {
-+	char *binarychangelogtrim = rpmExpand("%{?_binarychangelogtrim}", NULL);
-+	oneshot = 1;
-+	if (binarychangelogtrim && *binarychangelogtrim) {
-+	    maxnum = atoi(binarychangelogtrim);
-+	    binarychangelogtrim = strchr(binarychangelogtrim, ',');
-+	    if (binarychangelogtrim)
-+	      binarychangelogtrim++;
-+	}
-+	if (binarychangelogtrim && *binarychangelogtrim) {
-+	    cuttime = atoi(binarychangelogtrim);
-+	    binarychangelogtrim = strchr(binarychangelogtrim, ',');
-+	    if (binarychangelogtrim)
-+	      binarychangelogtrim++;
-+	}
-+	if (binarychangelogtrim && *binarychangelogtrim) {
-+	    minnum = atoi(binarychangelogtrim);
-+	    binarychangelogtrim = strchr(binarychangelogtrim, ',');
-+	}
-+    }
-+    if (!cuttime && !minnum && !maxnum) {
-+	return;
-+    }
-+    if (!headerGetEntry(h, RPMTAG_CHANGELOGTIME, NULL, (void **) &times, &count))
-+	return;
-+    if ((!cuttime || count <= minnum) && (!maxnum || count <= maxnum)) {
-+	return;
-+    }
-+    keep = count;
-+    if (maxnum && keep > maxnum)
-+	keep = maxnum;
-+    if (cuttime) {
-+	for (i = 0; i < keep; i++) {
-+	    if (i >= minnum && times[i] < cuttime)
-+		break;
-+	}
-+	keep = i;
-+    }
-+    if (keep >= count)
-+	return;
-+    headerGetEntry(h, RPMTAG_CHANGELOGNAME, NULL, (void **) &names, &count);
-+    headerGetEntry(h, RPMTAG_CHANGELOGTEXT, NULL, (void **) &texts, &count);
-+    headerModifyEntry(h, RPMTAG_CHANGELOGTIME, RPM_INT32_TYPE, times, keep);
-+    headerModifyEntry(h, RPMTAG_CHANGELOGNAME, RPM_STRING_ARRAY_TYPE, names, keep);
-+    headerModifyEntry(h, RPMTAG_CHANGELOGTEXT, RPM_STRING_ARRAY_TYPE, texts, keep);
-+    free(names);
-+    free(texts);
-+}
-+
- rpmRC packageBinaries(rpmSpec spec, const char *cookie, int cheating)
- {
-     struct cpioSourceArchive_s csabuf;
-@@ -680,6 +737,7 @@ rpmRC packageBinaries(rpmSpec spec, cons
-     Package pkg;
-     char *pkglist = NULL;
- 
-+    trimChangelog(spec->packages->header);
-     for (pkg = spec->packages; pkg != NULL; pkg = pkg->next) {
- 	char *fn;
- 
---- ./build/parseChangelog.c.orig	2010-12-03 12:11:57.000000000 +0000
-+++ ./build/parseChangelog.c	2011-05-11 15:33:22.000000000 +0000
-@@ -168,6 +168,11 @@ static rpmRC addChangelog(Header h, ARGV
- 	    return RPMRC_FAIL;
- 	}
- 
-+        /* workaround old suse oddity */
-+        if (*s == '-' && s[1] == ' ') {
-+            s += 2;
-+        }
-+
- 	/* name */
- 	name = s;
- 	while (*s != '\0') s++;
diff --git a/rpm-suse_macros b/rpm-suse_macros
index 37237e0..12d409f 100644
--- a/rpm-suse_macros
+++ b/rpm-suse_macros
@@ -1,5 +1,10 @@
-# need to keep this around for a while
-%suse_check             %{nil}
+%suse_check \
+        %{?buildroot:RPM_BUILD_ROOT=\"%{buildroot}\"\
+        export RPM_BUILD_ROOT}\
+        test -x /usr/sbin/Check -a $UID = 0 -o -x /usr/sbin/Check -a ! -z "$RPM_BUILD_ROOT" && {\
+            echo "I call /usr/sbin/Check..."\
+            /usr/sbin/Check\
+        }
 
 # directories
 %_infodir               %{_prefix}/share/info
@@ -9,20 +14,35 @@
 %_defaultdocdir         %{_usr}/share/doc/packages
 
 # package build macros
-%make_install           make install DESTDIR=%{?buildroot}
-%makeinstall            make DESTDIR=%{?buildroot:%{buildroot}} install
-%rb_arch                %(echo %{_host_cpu}-linux | sed -e "s/i686/i586/" -e "s/armv5tel/armv4l/" -e "s/hppa2.0/hppa/")
-%rb_ver                 %(/usr/bin/ruby -e 'puts VERSION.sub(/\\\.\\\d$/, "")')
-%insserv_prereq         insserv sed
-%fillup_prereq          fillup coreutils grep diffutils
-%suseconfig_fonts_prereq          perl aaa_base
+%makeinstall            make DESTDIR=%{buildroot} install
+%tcl_version            %(echo 'puts [package require Tcl]' | tclsh)
+%insserv_prereq         insserv
+%fillup_prereq          fillup fileutils
 %install_info_prereq    info
 
-# _suse_os_install_post is defined in brp-checks-suse
-%__os_install_post    %{?_suse_os_install_post}%{!?_suse_os_install_post: \
+%__os_install_post    \
+    %{suse_check} \
     /usr/lib/rpm/brp-compress \
-    /usr/lib/rpm/brp-symlink  \
-%{nil}}
+%{nil}
+
+# perl_vendorarch is defined
+# perl_vendorlib  is defined
+%perl_make_install make DESTDIR=$RPM_BUILD_ROOT install_vendor
+
+%perl_process_packlist(n:) \
+  mkdir -p $RPM_BUILD_ROOT/var/adm/perl-modules \
+  test -f $RPM_BUILD_ROOT%{perl_archlib}/perllocal.pod && { sed -e "s@$RPM_BUILD_ROOT@@g" < $RPM_BUILD_ROOT%{perl_archlib}/perllocal.pod > $RPM_BUILD_ROOT/var/adm/perl-modules/%{-n:%{-n*}}%{!-n:%{name}} ; } ; \
+  test -n "$RPM_BUILD_ROOT" -a -d $RPM_BUILD_ROOT/%perl_sitearch/auto && find $RPM_BUILD_ROOT/%perl_sitearch/auto -name .packlist -print0 | xargs -0 -r perl -spi -e "s@$RPM_BUILD_ROOT@@g" ; \
+  test -n "$RPM_BUILD_ROOT" -a -d $RPM_BUILD_ROOT/%perl_vendorarch/auto && find $RPM_BUILD_ROOT/%perl_vendorarch/auto -name .packlist -print0 | xargs -0 -r perl -spi -e "s@$RPM_BUILD_ROOT@@g" ; \
+  rm -f $RPM_BUILD_ROOT%{perl_archlib}/perllocal.pod \
+  %nil
+
+# macro: %suse_update_desktop_file
+#     Used to add easily a category to .desktop files according to XDG
+#     standard.
+%suse_update_desktop_file(:-:) \
+  /usr/lib/rpm/suse_update_desktop_file.sh %{**} || exit 1 \
+  %nil
 
 # macro: %restart_on_update()
 #	Used to restart a service in postun section, if we are
@@ -68,7 +88,6 @@
 
 %is_plus %(if test -f /.buildenv ; then source /.buildenv ; if [[ "$BUILD_BASENAME" == *+kde ]] ; then echo 1 ; else echo 0 ; fi ; else echo 0 ; fi)
 
-# deprecated, use %set_permissions instead
 %run_permissions() \
 	if test "$YAST_IS_RUNNING" != "instsys" ; then \
 	    if test -x /sbin/SuSEconfig -a -f /sbin/conf.d/SuSEconfig.permissions ; then \
@@ -83,37 +102,23 @@
      if test -x /sbin/SuSEconfig -a -f /sbin/conf.d/SuSEconfig.%{-m*} ; then \
        /sbin/SuSEconfig --module %{-m*} \
      else \
-       echo -e "\\nWARNING: SuSEconfig or requested SuSEconfig module not present!\\n" ; \
+       echo -e "\\nERROR: SuSEconfig or requested SuSEconfig module not present!\\n" ; exit 1 \
      fi \
    fi \
    %nil
 
-# macro: run_suseconfig_fonts
-# call SuSEconfig modules necessary for font setup
-# options:
-#         -c  (the fonts are CJK fonts, also do setup which is only needed
-#              for CJK)
-%run_suseconfig_fonts(c) \
-  if test -z "$YAST_IS_RUNNING" ; then \
-  if test -x /sbin/conf.d/SuSEconfig.fonts ; then \
-    %run_suseconfig -m fonts \
-  fi \
-  %{-c:if test -x /sbin/conf.d/SuSEconfig.ghostscript-cjk ; then \
-         %run_suseconfig -m ghostscript-cjk \
-       fi} \
-  fi \
-  %nil
-
-%set_permissions(f:) \
-  if [ -x /usr/bin/chkstat ]; then \
-    /usr/bin/chkstat -n --set --system %{**} \
-  fi \
-  %nil
-
-%verify_permissions(e:f:) \
-   /usr/bin/chkstat -n --warn --system %{**} 1>&2 \
+%verify_permissions(:-:) \
+   if test -f /etc/sysconfig/security ; then \
+      source /etc/sysconfig/security \
+   fi \
+   PERMFILES="/etc/permissions" \
+   for PERMEXT in $PERMISSION_SECURITY ; do \
+     if test -f /etc/permissions.$PERMEXT ; then \
+       PERMFILES="$PERMFILES /etc/permissions.$PERMEXT" \
+     fi \
+   done \
+   /usr/bin/chkstat -n %{**} $PERMFILES 1>&2 \
    %nil
-
 # %{suse_update_config [-fcl] [dirs...]}
 #   -f: force, ignore timestamp
 #   -c: no config.guess,config.sub
@@ -174,9 +179,11 @@
 #		instead of package name)
 #         -f  (skip fillup parts)
 #         -i  (skip insserv parts)
+#         -s  (specify START_ variable names, otherwise tr a-z A-Z is used)
 #         -y  (default start-variable value to yes)
 #             Used only if X-UnitedLinux-Default-Enabled is not specified
 #             in the init script
+#         -p  (ignored for backwards compatibility)
 #         -Y  (force_yes: always activate, discard setting before update)
 # arguments:
 #         [if "-n" first argument as package name]
@@ -185,61 +192,110 @@
 #           and
 #            name of (old) START variable (unless -s is given)
 #
-# template for variables into /etc/sysconfig/package:
-#     /var/adm/fillup-templates/sysconfig.package
+# template for variables into etc/sysconfig/package:
+#     var/adm/fillup-templates/sysconfig.package
+# template for variables into etc/rc.config:
+#     var/adm/fillup-templates/rc.config.package
 %fillup_and_insserv(finpsyY) \
-    %{-p:echo "-p option for fillup_and_insserv no longer supported (ever only used on SL8.0)"; exit 1;} \
-    %{-s:echo "STARTVAR for fillup_and_insserv no longer supported (rc.config is gone since SL8.0)"; exit 1;} \
-    test -n "$FIRST_ARG" || FIRST_ARG=$1 \
-    %{-Y:FORCE_YES=1}%{!-Y:FORCE_YES=0} \
-    set -- %{?*} \
-    %{-n:PNAME=$1 ; shift }%{!-n:PNAME=%{name}} \
-    INSSRV_ARRAY="" \
-    while [ ${#*} -gt 0 ] ; do \
-	SCRIPTNAME=$1 \
-	shift \
-	SV_B='^### BEGIN INIT INFO' \
-	SV_E='^### END INIT INFO' \
-	SV_KW=Default-Enabled \
-	SV_VALUE=`sed -n -e "/$SV_B/,/$SV_E/{/^# [^[:space:]]*$SV_KW:[[:space:]]*\\([^[:space:]]*\\).*/s//\\1/p;}" < /etc/init.d/$SCRIPTNAME` \
-	test "$FORCE_YES" = "1" && SV_VALUE="yes" \
-	test -n "$SV_VALUE" || SV_VALUE=%{-y:"yes"}%{!-y:"no"} \
-	INSSRV_ARRAY="$INSSRV_ARRAY $SCRIPTNAME $SV_VALUE" \
-    done \
-    %{!-f: %{do_real_fillup}} \
-    %{!-i: %{add_start_if_needed $INSSRV_ARRAY } } \
-    %nil
+  test -n "$FIRST_ARG" || FIRST_ARG=$1 \
+  %{-Y:FORCE_YES=1}%{!-Y:FORCE_YES=0} \
+  REMOVED_START=no \
+  set -- %{?*} \
+  %{-n:PNAME=$1 ; shift }%{!-n:PNAME=%{name}} \
+  INSSRV_ARRAY="" \
+  while [ ${#*} -gt 0 ] ; do \
+    SCRIPTNAME=$1 \
+    shift \
+    %{-s:STARTVAR=$1 ; shift} \
+    %{!-s:STARTVAR=START_`echo $SCRIPTNAME | tr a-z.- A-Z__`} \
+    SV_B='^### BEGIN INIT INFO' \
+    SV_E='^### END INIT INFO' \
+    SV_KW=X-UnitedLinux-Default-Enabled \
+    SV_VAL=`sed -n -e "/$SV_B/,/$SV_E/{/^# $SV_KW:[[:space:]]*\\([^[:space:]]*\\).*/s//\\1/p;}" < etc/init.d/$SCRIPTNAME` \
+    test -n "$SV_VAL" || SV_VAL=%{-y:"yes"}%{!-y:"no"} \
+    eval $STARTVAR=$SV_VAL \
+    test -n "$STARTVAR" -a -n "$SCRIPTNAME" || { \
+	echo "STARTVARIABLE or SCRIPTNAME unknown" \
+	exit 1 \
+    } \
+    INSSRV_ARRAY="$INSSRV_ARRAY $SCRIPTNAME $STARTVAR" \
+    %{!-f:%{!-i:grep -q "$STARTVAR=" var/adm/fillup-templates/rc.config.$PNAME.del 2>/dev/null || \
+	echo -e "#\\n# Start service $SCRIPTNAME\\n#\\n$STARTVAR=\\"${!STARTVAR}\\"\\n\\n" >> var/adm/fillup-templates/rc.config.$PNAME.del } } \
+  done \
+  %{!-f: %{do_real_fillup}} \
+  %{!-i: %{add_start_if_needed $INSSRV_ARRAY } }
 
 # do_real_fillup: internal macro
 # this part really calls fillup for the appropriate files
 #
 %do_real_fillup() \
-    TEMPLATE_DIR=/var/adm/fillup-templates \
+    TEMPLATE_DIR=var/adm/fillup-templates \
     SYSC_TEMPLATE=$TEMPLATE_DIR/sysconfig.$PNAME \
+    RC_TEMPLATE=$TEMPLATE_DIR/rc.config.$PNAME \
     SD_NAME="" \
-    %{sysc_fillup}
+    if [ -x bin/fillup ] ; then \
+	%{sysc_fillup} \
+	# remove the START_ variables from the base fillup template \
+	if [ -f $RC_TEMPLATE.del -a -f $RC_TEMPLATE ] ; then \
+	  bin/fillup -q -r -i  $RC_TEMPLATE $RC_TEMPLATE.del /dev/null \
+	  mv $RC_TEMPLATE.new $RC_TEMPLATE \
+	fi \
+	if [ -f etc/rc.config ] ; then \
+	  %{rc_fillup} \
+	  # remove the deprecated START_ variables from rc.config \
+	  if [ -f $TEMPLATE_DIR/rc.config.$PNAME.del ] ; then \
+	    rm -f etc/rc.config.xtract \
+	    bin/fillup -q -r -i etc/rc.config $RC_TEMPLATE.del etc/rc.config.xtract \
+	    if [ -f etc/rc.config.xtract ] ; then \
+	      . etc/rc.config.xtract \
+	    fi \
+	    rm -f etc/rc.config.xtract $RC_TEMPLATE.del \
+	    if [ -f etc/rc.config.new ] ; then \
+	      cmp -s etc/rc.config.new etc/rc.config || REMOVED_START=yes \
+	      mv etc/rc.config.new etc/rc.config \
+	    fi \
+	  fi \
+	fi \
+    else \
+	echo "ERROR: fillup not found. This should not happen. Please compare" \
+	echo "etc/rc.config and $TEMPLATE_DIR/rc.config.$PNAME and" \
+	echo "update by hand." \
+    fi
 
 # add_start_if_needed: internally used by fillup_and_insserv
 %add_start_if_needed() \
-    set -- %{?*} \
+   set -- %{?*} \
     while [ ${#*} -gt 0 ] ; do \
 	SCRIPTNAME=$1 \
-	SV_VALUE=$2 \
+	STARTVAR=$2 \
 	shift 2 \
-	test -n "$SCRIPTNAME" -a -n "$SV_VALUE" || { echo "SCRIPTNAME or SV_VALUE unknown"; exit 1;} \
-	if test "$FIRST_ARG" = "1" -a "$SV_VALUE" = "no" ; then \
-	    /sbin/insserv ${YAST_IS_RUNNING:+-f} -r /etc/init.d/$SCRIPTNAME \
-	elif test "$FIRST_ARG" = "1" -o "$FORCE_YES" = "1" ; then \
-	    /sbin/insserv ${YAST_IS_RUNNING:+-f} /etc/init.d/$SCRIPTNAME \
+	test -n "$STARTVAR" -a -n "$SCRIPTNAME" || { \
+	    echo "STARTVAR or SCRIPTNAME unknown" \
+	    exit 1 \
+	} \
+	if test "$FIRST_ARG" = "1" -o "$REMOVED_START" = "yes" -o "$FORCE_YES" = "1" ; then \
+	  if test -n "$YAST_IS_RUNNING" ; then \
+	    INSSERV_FORCE="-f" \
+	  else \
+	    INSSERV_FORCE="" \
+	  fi \
+	  if test "${!STARTVAR}" = "yes" -o "$FORCE_YES" = "1" ; then \
+	    sbin/insserv $INSSERV_FORCE etc/init.d/$SCRIPTNAME \
+	  else \
+	    sbin/insserv $INSSERV_FORCE -r etc/init.d/$SCRIPTNAME \
+	  fi \
 	fi \
     done 
 
 # macro: insserv_cleanup
+# only here to be able to define this to nil
+# for versions prior to 7.1
 %insserv_cleanup() \
-    /sbin/insserv /etc/init.d
+	sbin/insserv etc/init.d
 
 # macro: fillup_only
-#    do the fillup for sysconfig files
+#    do the fillup for sysconfig files and if needed extraction
+#    of older variables from rc.config and rc.config.d
 #   template naming convention:
 #     .../fillup-templates/sysconfig.$NAME1[-$NAME2]
 #     NAME1: the name of the sysconfig-file
@@ -252,115 +308,152 @@
 #           -d use a subdirectory of sysconfig
 #              (last arg as directory name)
 %fillup_only(dans) \
-    %{-n:PNAME=%{1}}%{!-n:PNAME=%{name}} \
-    %{-s:SUBPNAME=-%{2}}%{!-s:SUBPNAME=%{-a:-%{name}}} \
-    TEMPLATE_DIR=/var/adm/fillup-templates \
+  %{-n:PNAME=%{1}}%{!-n:PNAME=%{name}} \
+  %{-s:SUBPNAME=-%{2}}%{!-s:SUBPNAME=%{-a:-%{name}}} \
+    TEMPLATE_DIR=var/adm/fillup-templates \
     SYSC_TEMPLATE=$TEMPLATE_DIR/sysconfig.$PNAME$SUBPNAME \
+    RC_TEMPLATE=$TEMPLATE_DIR/rc.config.$PNAME \
     SD_NAME="" \
     %{-d:%{-s:SD_NAME=%{3}/}%{!-s:SD_NAME=%{2}/}} \
-    %{sysc_fillup} \
-    %nil
-
-# internal only: sysc_fillup
-%sysc_fillup() \
-    if [ -x /bin/fillup ] ; then \
-	if [ -f $SYSC_TEMPLATE ] ; then \
-	    echo "Updating /etc/sysconfig/$SD_NAME$PNAME..." \
-	    mkdir -p /etc/sysconfig/$SD_NAME \
-	    touch /etc/sysconfig/$SD_NAME$PNAME \
-	    /bin/fillup -q /etc/sysconfig/$SD_NAME$PNAME $SYSC_TEMPLATE \
-	fi \
+    if [ -x bin/fillup ] ; then \
+	%{sysc_fillup} \
+	%{rc_fillup} \
     else \
 	echo "ERROR: fillup not found. This should not happen. Please compare" \
-	echo "/etc/sysconfig/$PNAME and $TEMPLATE_DIR/sysconfig.$PNAME and" \
+	echo "etc/rc.config and $RC_TEMPLATE and" \
 	echo "update by hand." \
     fi
 
+# internal only: rc_fillup
+%rc_fillup() \
+	# maybe the fillup template for rc.config is old, make sure we do not readd stuff here \
+	if [ -f $SYSC_TEMPLATE -a -f $RC_TEMPLATE ] ; then \
+	  bin/fillup -q -r -i $RC_TEMPLATE $SYSC_TEMPLATE /dev/null \
+	  mv $RC_TEMPLATE.new $RC_TEMPLATE \
+	fi \
+	# do the normal fillup for the rc.config variables \
+	if [ -f $RC_TEMPLATE ] ; then \
+	  bin/fillup -q -d = etc/rc.config $RC_TEMPLATE \
+	fi
+
+# internal only: sysc_fillup
+%sysc_fillup() \
+	if [ -f $SYSC_TEMPLATE ] ; then \
+	    echo "Updating etc/sysconfig/$SD_NAME$PNAME..." \
+	    if [ ! -d etc/sysconfig/$SD_NAME ] ; then \
+		mkdir -p etc/sysconfig/$SD_NAME \
+	    fi \
+	    if [ -f etc/rc.config.d/$PNAME.rc.config ] ; then \
+		if [ -f etc/sysconfig/$SD_NAME$PNAME ] ; then \
+		    bin/fillup -q etc/sysconfig/$SD_NAME$PNAME etc/rc.config.d/$PNAME.rc.config \
+		    rm -f etc/rc.config.d/$PNAME.rc.config \
+		else \
+		    mv etc/rc.config.d/$PNAME.rc.config etc/sysconfig/$SD_NAME$PNAME \
+		fi \
+	    fi \
+	    if [ ! -f etc/rc.config ] ; then \
+		test -f etc/sysconfig/$SD_NAME$PNAME || touch etc/sysconfig/$SD_NAME$PNAME \
+		bin/fillup -q etc/sysconfig/$SD_NAME$PNAME $SYSC_TEMPLATE \
+	    else \
+	        if [ ! -f etc/sysconfig/$SD_NAME$PNAME ] ; then \
+		    bin/fillup -q -r -i etc/rc.config $SYSC_TEMPLATE etc/sysconfig/$SD_NAME$PNAME \
+	        else \
+		    bin/fillup -q -r -i etc/rc.config $SYSC_TEMPLATE etc/sysconfig/$SD_NAME$PNAME.tmp \
+		    bin/fillup -q etc/sysconfig/$SD_NAME$PNAME etc/sysconfig/$SD_NAME$PNAME.tmp \
+		    rm -f etc/sysconfig/$SD_NAME$PNAME.tmp \
+	        fi \
+	        if [ -f etc/rc.config.new ] ; then \
+		    mv etc/rc.config.new etc/rc.config \
+	        fi \
+	    fi\
+	fi
+
 # macro: rename_sysconfig_variable
-#     as the name says, rename a variable in the file given with -f
+#     as the name says, rename a variable in rc.config
+#     or with -f in the given file
 %rename_sysconfig_variable(f:) \
-    %{!-f:echo "missing argument for rename_sysconfig_variable"; exit 1; }%{-f:FILE=%{-f*}} \
-    if [ -f $FILE ] ; then \
-	sed -i -e "s/^%{1}=/%{2}=/" $FILE \
-    fi
+	%{!-f:FILE=etc/rc.config}%{-f:FILE=%{-f*}} \
+	if [ -f $FILE ] ; then \
+	  sed -e "s/^%{1}=/%{2}=/" $FILE > $FILE.new \
+	  mv $FILE.new $FILE \
+	fi
+
+# macro: save_rc_config_d_was_in_filelist
+#    only used for packages that erroneously had the rc.config.d file
+#    in their filelist
+%save_rc_config_d_was_in_filelist(n) \
+  %{-n:PNAME=%{?*}}%{!-n:PNAME=%{name}} \
+  mkdir -p etc/sysconfig \
+  if [ -f etc/rc.config.d/$PNAME.rc.config -a ! -f etc/sysconfig/$PNAME ] ; then \
+    cp etc/rc.config.d/$PNAME.rc.config etc/sysconfig/$PNAME \
+  fi
 
 # macro: remove_and_set
-#      remove variables from sysconfig.$NAME
+#      remove variables from rc.config and sysconfig.$NAME
 #      (both if existant) and set them in the environment
 #      for further handling in postinstall
 #  options: -n set package name
 #           -y default to yes if not found (otherwise no)
 %remove_and_set(n:y) \
-    %{-n:PNAME=%{-n*}}%{!-n:PNAME=%{name}} \
-    DEF_VAL=%{-y:"yes"}%{!-y:"no"} \
-    DEL_TEMPL=/var/adm/fillup-templates/$PNAME.del \
-    rm -f $DEL_TEMPL \
-    for var in %{?*} ; do \
-	echo -e "#\\n$var=$DEF_VAL\\n" >> $DEL_TEMPL \
-    done \
-    if [ -f /etc/sysconfig/$PNAME ] ; then \
-	/bin/fillup -q -t -r -i -d "=" /etc/sysconfig/$PNAME $DEL_TEMPL /etc/sysconfig/$PNAME.deleted.$$ \
-	test -f /etc/sysconfig/$PNAME.new && mv /etc/sysconfig/$PNAME.new /etc/sysconfig/$PNAME \
-    fi  \
-    for i in $DEL_TEMPL /etc/sysconfig/$PNAME.deleted.$$ ; do \
-	if [ -f $i ] ; then \
-	    . $i \
-	    rm -f $i \
-	fi \
-    done
+  %{-n:PNAME=%{-n*}}%{!-n:PNAME=%{name}} \
+  DEF_VAL=%{-y:"yes"}%{!-y:"no"} \
+  DEL_TEMPL=var/adm/fillup-templates/$PNAME.del \
+  rm -f $DEL_TEMPL \
+  for var in %{?*} ; do \
+    echo -e "#\\n$var=$DEF_VAL\\n" >> $DEL_TEMPL \
+  done \
+  if [ -f etc/rc.config ]  ; then \
+    bin/fillup -q -t -r -i -d "=" etc/rc.config $DEL_TEMPL etc/rc.config.xtract \
+    test -f etc/rc.config.new && mv etc/rc.config.new etc/rc.config \
+  fi \
+  if [ -f etc/sysconfig/$PNAME ] ; then \
+    bin/fillup -q -t -r -i -d "=" etc/sysconfig/$PNAME $DEL_TEMPL etc/rc.config.xtract.too \
+    test -f etc/sysconfig/$PNAME.new && mv etc/sysconfig/$PNAME.new etc/sysconfig/$PNAME \
+  fi  \
+  for i in $DEL_TEMPL etc/rc.config.xtract etc/rc.config.xtract.too ; do \
+    if [ -f $i ] ; then \
+     . $i \
+     rm -f $i \
+    fi \
+  done
 
 %insserv_force_if_yast() \
-    /sbin/insserv ${YAST_IS_RUNNING:+-f} %{?*}
+	if test -n "$YAST_IS_RUNNING" ; then \
+            INSSERV_FORCE="-f" \
+	else \
+	    INSSERV_FORCE="" \
+	fi \
+	sbin/insserv $INSSERV_FORCE %{?*}
 
 %run_ldconfig /sbin/ldconfig
 
 %install_info(:-:) \
-    ALL_ARGS=(%{**}) \
-    NUM_ARGS=${#ALL_ARGS[@]} \
-    if test -x /sbin/install-info ; then \
-	if test -e "${ALL_ARGS[$((NUM_ARGS-1))]}" ; then \
-	    /sbin/install-info "${ALL_ARGS[@]}" \
-	fi \
-    fi ; 
+	ALL_ARGS=(%{**}) \
+	NUM_ARGS=${#ALL_ARGS[@]} \
+	if test -x sbin/install-info ; then \
+	    if test -e "${ALL_ARGS[$((NUM_ARGS-1))]}" ; then \
+		sbin/install-info "${ALL_ARGS[@]}" \
+	    fi \
+	fi ; 
 
 %install_info_delete(:-:) \
-    ALL_ARGS=(%{**}) \
-    NUM_ARGS=${#ALL_ARGS[@]} \
-    if test -x /sbin/install-info ; then \
-	if ! test -e "${ALL_ARGS[$((NUM_ARGS-1))]}" ; then \
-	    /sbin/install-info --quiet --delete "${ALL_ARGS[@]}" \
-	fi ; \
-    fi ; 
+	ALL_ARGS=(%{**}) \
+	NUM_ARGS=${#ALL_ARGS[@]} \
+	if test -x sbin/install-info ; then \
+	   if ! test -e "${ALL_ARGS[$((NUM_ARGS-1))]}" ; then \
+		sbin/install-info --quiet --delete "${ALL_ARGS[@]}" \
+	   fi ; \
+	fi ; 
 
-# find-supplements.ksyms parses this macro directly out of the spec file:
-%supplements_kernel_module() \
-    %{expand:%(if ! rpm -q kernel-syms > /dev/null; then echo "%fail Please add the kernel-syms package to BuildRequires"; fi)}
-
-%suse_version 1140
+%suse_version 901
 %sles_version 0
 %ul_version 0
 
+
 %do_profiling 1
-%cflags_profile_generate -fprofile-generate
-%cflags_profile_feedback -fprofile-use
-
-%suse_install_update_message() \
-    install -D -m 644 %1 %buildroot/var/adm/update-messages/%{name}-%{version}-%{release}-%(basename %1).txt \
-%nil
-
-%suse_install_update_script() \
-     install -D -m 755 %1 %buildroot/var/adm/update-scripts/%{name}-%{version}-%{release}-%(basename %1).txt \
-%nil
-
-# Template for lang sub-package.
-%lang_package(n:) \
-%package %{-n:-n %{-n*}-}lang \
-Summary: Languages for package %{name} \
-Group: System/Localization \
-Requires: %{-n:%{-n*}}%{!-n:%{name}} = %{version} \
-Provides: %{-n:%{-n*}}%{!-n:%{name}}-lang-all = %{version} \
-Supplements: packageand(bundle-lang-other:%{-n:%{-n*}}%{!-n:%{name}}) \
-BuildArch: noarch \
-%description %{-n:-n %{-n*}-}lang \
-Provides translations to the package %{name}
+%cflags_profile_generate -fprofile-arcs
+%cflags_profile_feedback -fbranch-probabilities
 
+# find-supplements.ksyms parses this macro directly out of the spec file:
+%supplements_kernel_module() \
+	%{expand:%(if ! rpm -q kernel-syms > /dev/null; then echo "%fail Please add the kernel-syms package to BuildRequires"; fi)}
diff --git a/rpm.changes b/rpm.changes
index 9426b3c..11db5f0 100644
--- a/rpm.changes
+++ b/rpm.changes
@@ -1,876 +1,3 @@
--------------------------------------------------------------------
-Wed Jun  8 12:02:51 CEST 2011 - mls@suse.de
-
-- change sigpipe fix so that the code really reads everything
-  from the pipe
-
--------------------------------------------------------------------
-Mon Jun  6 14:16:49 UTC 2011 - coolo@novell.com
-
-- move desktop.attr to update-desktop-files
-
--------------------------------------------------------------------
-Mon Jun  6 13:30:05 CEST 2011 - mls@suse.de
-
-- ignore SIGPIPE when writing to dependency helpers, so that
-  builds don't randomly abort when a helper is missing
-
--------------------------------------------------------------------
-Fri Jun  3 15:19:02 CEST 2011 - mls@suse.de
-
-- add --assume-exec option to elfdeps, so that the dependency
-  generator really works for libs without x-bits
-
--------------------------------------------------------------------
-Mon May 23 16:21:52 CEST 2011 - mls@suse.de
-
-- do not die if the changelog section is empty [bnc#695400]
-
--------------------------------------------------------------------
-Fri May 20 13:28:37 CEST 2011 - mls@suse.de
-
-- get rid of "unexpectedly shrank by one" error
-
--------------------------------------------------------------------
-Thu May 19 14:51:13 CEST 2011 - mls@suse.de
-
-- remove gstreamer from fileattrs
-- remove unused var from magic_and_path patch
-
--------------------------------------------------------------------
-Thu May 19 11:59:38 CEST 2011 - mls@suse.de
-
-- disable perl requires generation completely
-
--------------------------------------------------------------------
-Wed May 18 11:34:17 CEST 2011 - mls@suse.de
-
-- split elflib from elf fileattrs so that libraries without
-  x-bits are also scanned
-
--------------------------------------------------------------------
-Tue May 17 10:47:00 CEST 2011 - mls@suse.de
-
-- allow macro undef/change while expanding the macro itself
-
--------------------------------------------------------------------
-Mon May 16 14:45:05 CEST 2011 - mls@suse.de
-
-- update to rpm-4.9.0:
-  * use internal dependency generator
-  * pluggable autodeps generators
-  * update to berkeleydb 4.8.30
-  * fixed dependency match corner cases
-  * experimental collection implementation
-
--------------------------------------------------------------------
-Wed May  4 12:42:33 UTC 2011 - mmarek@novell.com
-
-- rpmsort
-  + Fix comparison function to match rpm (bnc#644515, thanks to
-    Michael Schroeder).
-  + Add --test option to verify result against zypper vcmp.
-
--------------------------------------------------------------------
-Sat Feb 19 12:39:31 CET 2011 - vuntz@opensuse.org
-
-- Don't call /sbin/conf.d/SuSEconfig.pango in
-  %run_suseconfig_fonts: it has been removed during 11.4
-  development.
-
--------------------------------------------------------------------
-Fri Jan 14 08:58:40 UTC 2011 - coolo@novell.com
-
-- let %find_lang remove (with a comment) languages not supported.
-  Supported languages are in filesystem.rpm's file list (bnc#659001)
-
--------------------------------------------------------------------
-Mon Dec 20 11:50:55 CET 2010 - mls@suse.de
-
-- fix depflag_strong filter, all weak deps were shown as
-  strong (bnc#359566).
-
--------------------------------------------------------------------
-Thu Dec  9 16:44:10 UTC 2010 - meissner@novell.com
-
-- fixed two more remaining filenames with spaces issues.
-
--------------------------------------------------------------------
-Wed Dec  8 13:05:06 UTC 2010 - meissner@novell.com
-
-- handle spaces in manpage filenames (like e.g. in boost).
-
--------------------------------------------------------------------
-Tue Dec  7 14:33:33 UTC 2010 - coolo@novell.com
-
-- add script to provide sysvinit(<PROV>) from /etc/init.d/*
-
--------------------------------------------------------------------
-Fri Nov 19 16:09:20 UTC 2010 - chris@computersalat.de
-
-- remove perl macro stuff from suse_macros
-  o provided with perl /etc/rpm/macros.perl
-
--------------------------------------------------------------------
-Tue Nov 16 15:25:45 UTC 2010 - lnussel@suse.de
-
-- fix %verify_permissions to actually only warn
-- introduce %set_permissions to replace %run_permissions in the future
-
--------------------------------------------------------------------
-Tue Nov  9 15:07:52 UTC 2010 - lnussel@suse.de
-
-- don't call /usr/bin/Check at all anymore. superfluous
-
--------------------------------------------------------------------
-Tue Nov  9 13:04:21 UTC 2010 - lnussel@suse.de
-
-- change %verify_permissions to use new system mode of chkstat
-
--------------------------------------------------------------------
-Fri Oct 29 15:03:50 CEST 2010 - mls@suse.de
-
-- add support --with-only-C and --without-C options to find-lang.sh,
-  add %no_lang_C macro to allow compatible builds [bnc#449847]
-
--------------------------------------------------------------------
-Mon Oct  4 17:34:52 UTC 2010 - cristian.rodriguez@opensuse.org
-
-- Enable libcap support so we can use the %caps macro in spec
-  files to set POSIX capabilities. 
-
--------------------------------------------------------------------
-Wed Sep  8 11:35:46 CEST 2010 - ro@suse.de
-
-- add leading / where appropriate in rpm-suse_macros (bnc#625763)
-
--------------------------------------------------------------------
-Thu Sep  2 10:26:05 UTC 2010 - dimstar@opensuse.org
-
-- Add rpm-gst-provides.patch to allow rpm to collect provides of
-  gstreamer codecs. This will help pk-gstreamer-install to also
-  find the codecs it is looking for.
-
--------------------------------------------------------------------
-Thu Aug 12 17:17:49 CEST 2010 - vuntz@opensuse.org
-
-- Add pkgconfig-0.24.diff: starting with pkg-config 0.24, the
-  --print-requires command was upstreamed, but split in
-  --print-requires and --print-requires-private. We need both in
-  pkgconfigdeps.sh, though. If accepted, the patch should get
-  upstreamed.
-
--------------------------------------------------------------------
-Tue Jul 20 11:47:29 UTC 2010 - coolo@novell.com
-
-- make suse_version 1140
-
--------------------------------------------------------------------
-Mon Jun 28 06:38:35 UTC 2010 - jengelh@medozas.de
-
-- use %_smp_mflags
-
--------------------------------------------------------------------
-Fri Jun  4 16:44:29 CEST 2010 - mls@suse.de
-
-- update changelog trim date
-
--------------------------------------------------------------------
-Fri Jun  4 15:00:54 CEST 2010 - mls@suse.de
-
-- fix sbit removal code [bnc#610941]
-- sort permlist file
-
--------------------------------------------------------------------
-Fri Apr  9 12:00:29 CEST 2010 - mls@suse.de
-
-- do not load keyring if signature checking is disabled [bnc#554552]
-- fix nosource/nopatch srpm tag generation
-
--------------------------------------------------------------------
-Thu Apr  8 17:11:08 CEST 2010 - mls@suse.de
-
-- backport some fixes from upstream
-- add generation of python/font/pkgconfig dependencies
-
--------------------------------------------------------------------
-Wed Apr  7 16:59:58 CEST 2010 - mls@suse.de
-
-- work around spurious tar message [bnc#558475]
-- fix defattr reset bug [bnc#594310]
-- make 'rpmconfigcheck status' exit with 4 [bnc#592269]
-- don't consider prereq deprecated for now
-
--------------------------------------------------------------------
-Fri Mar 26 16:29:36 CET 2010 - mls@suse.de
-
-- port sles11-sp1 repackage-nomd5.diff and safeugid.diff
-
--------------------------------------------------------------------
-Fri Mar 26 11:49:59 CET 2010 - mls@suse.de
-
-- update to rpm-4.8.0
-  * updated python bindings
-  * new transaction ordering code
-
--------------------------------------------------------------------
-Wed Feb 24 11:57:30 CET 2010 - mls@suse.de
-
-- fix readLine segfault [bnc#582599]
-
--------------------------------------------------------------------
-Sat Dec 12 23:42:26 CET 2009 - jengelh@medozas.de
-
-- add baselibs.conf as a source
-- add SPARC baselibs
-
--------------------------------------------------------------------
-Wed Nov  4 09:43:43 UTC 2009 - coolo@novell.com
-
-- set suse_version to 1130
-
--------------------------------------------------------------------
-Wed Nov  4 08:52:48 UTC 2009 - coolo@novell.com
-
-- do not overwrite the default fuzz factor any longer
-- change the payload compression to 5
-
--------------------------------------------------------------------
-Fri Oct 23 17:56:28 CEST 2009 - mls@suse.de
-
-- add make_install macro definition for real
-
--------------------------------------------------------------------
-Tue Sep  8 02:40:55 CEST 2009 - crrodriguez@suse.de
-
-- make lang_package(s) Noarch 
-
--------------------------------------------------------------------
-Fri Sep  4 11:32:33 CEST 2009 - mls@suse.de
-
-- do not statfs all filesystems until there is something
-  to report
-- cherry pick default clean section patch from upstream
-- add make_install macro definition
-
--------------------------------------------------------------------
-Wed Sep  2 17:16:37 CEST 2009 - mls@suse.de
-
-- allow ufdio payload
-- pack db.h include file
-- fix abs filelist specification [bnc#535594]
-- fix query return value [bnc#527191]
-
--------------------------------------------------------------------
-Mon Aug 31 18:59:12 UTC 2009 - aj@suse.de
-
-- Fix debuginfo handling for monodevelop-debugger-gdb and
-  monodevelop-debugger-mdb packages (bnc#535543).
-
--------------------------------------------------------------------
-Wed Aug 26 14:39:44 CEST 2009 - mls@suse.de
-
-- set fuzz factor back to 2 for now
-
--------------------------------------------------------------------
-Mon Aug 24 15:06:57 CEST 2009 - mls@suse.de
-
-- update to rpm-4.7.1
-
--------------------------------------------------------------------
-Mon Jul 27 18:02:37 CEST 2009 - rguenther@suse.de
-
-- add description to debuginfo packages
-
--------------------------------------------------------------------
-Mon Jul 27 15:46:36 CEST 2009 - rguenther@suse.de
-
-- do not strip .debug suffix during debug-link generation
-- do not add requires based on private ELF flags  [bnc#524681]
-- remove requires on debuginfo from debugsource package
-
--------------------------------------------------------------------
-Sat Jul 25 12:04:11 CEST 2009 - rguenther@suse.de
-
-- fix debuginfo package generation for binaries without build-id
-
--------------------------------------------------------------------
-Fri Jul 24 11:39:04 CEST 2009 - rguenther@suse.de
-
-- revert SUSEBuildCnt patch
-- fix debuginfo package generation for build root URLs with macros
-
--------------------------------------------------------------------
-Thu Jul 23 12:48:50 CEST 2009 - rguenther@suse.de
-
-- add support for SUSEBuildCnt tag
-
--------------------------------------------------------------------
-Thu Jul 23 11:41:54 CEST 2009 - rguenther@suse.de
-
-- generate debuginfo packages for each sub-package with corresponding
-  debug information
-
--------------------------------------------------------------------
-Mon Jul 13 12:50:30 CEST 2009 - coolo@novell.com
-
-- the correct value for libexecdir is exec_prefix/lib (as the
-  comment rightfully already mentioned)
-
--------------------------------------------------------------------
-Tue Jun  9 11:53:50 CEST 2009 - mmarek@suse.cz
-
-- findksyms.diff: also generate provides for kernel packages.
-
--------------------------------------------------------------------
-Mon Apr  6 02:09:43 CEST 2009 - ro@suse.de
-
-- fix typo in brp-symlink (bnc#457908) 
-
--------------------------------------------------------------------
-Tue Mar 31 11:25:14 CEST 2009 - mmarek@suse.cz
-
-- findksyms.diff: don't check for /boot/symsets-*, generate ksym()
-  requires if not present.
-
--------------------------------------------------------------------
-Thu Mar 19 15:42:20 CET 2009 - ro@suse.de
-
-- rpm-suse_macros: suse_version to 1120
-
--------------------------------------------------------------------
-Thu Feb 19 11:05:37 CET 2009 - schwab@suse.de
-
-- Add support for xz compressed sources.
-
--------------------------------------------------------------------
-Wed Feb 18 11:04:35 CET 2009 - jblunck@suse.de
-
-- Add debuginfo.prov helper script for build-id provides.
-
--------------------------------------------------------------------
-Mon Feb 16 17:10:31 CET 2009 - ro@suse.de
-
-- fix sort call in finddebuginfo again 
-
--------------------------------------------------------------------
-Wed Feb 11 14:01:51 CET 2009 - coolo@suse.de
-
-- sort the result of find to make symlinks stable in finddebuginfo
-
--------------------------------------------------------------------
-Wed Feb 11 13:02:12 CET 2009 - coolo@suse.de
-
-- adapt to new API of xz, sticking with the old LZMA format (not XZ)
-
--------------------------------------------------------------------
-Mon Feb  9 14:16:52 CET 2009 - ro@suse.de
-
-- define disttag as optional tag with macro just like disturl
-
--------------------------------------------------------------------
-Thu Jan 29 10:34:22 CET 2009 - olh@suse.de
-
-- obsolete old -XXbit packages (bnc#437293)
-
--------------------------------------------------------------------
-Tue Jan 27 21:19:51 CET 2009 - agruen@suse.de
-
-- find-supplements.ksyms: Fix "Supplements: packageand(
-  kernel-$flavor:$package)" dependency (bnc#429254).
-
--------------------------------------------------------------------
-Mon Jan  5 15:37:07 CET 2009 - mmarek@suse.cz
-
-- findksyms.diff: make sure that the input files for join are
-  sorted properly (bnc#450714)
-
--------------------------------------------------------------------
-Fri Dec 19 15:26:30 CET 2008 - mls@suse.de
-
-- add popt-devel and rpm-devel to baselibs config (bnc#445037)
-
--------------------------------------------------------------------
-Thu Dec 11 17:18:49 CET 2008 - ro@suse.de
-
-- brp-symlink: whitelist kde4 doc path (bnc#457908) 
-
--------------------------------------------------------------------
-Thu Dec 11 08:14:27 CET 2008 - agruen@suse.de
-
-- find-supplements.ksyms: Module aliases may contain special
-  characters that rpm does not allow in dependencies, such as
-  commas. Encode those as %XX to avoid generating broken
-  dependencies (bnc#456695).
-
--------------------------------------------------------------------
-Tue Dec  9 16:45:44 CET 2008 - schwab@suse.de
-
-- find-debuginfo.sh: Don't convert to binary.
-
--------------------------------------------------------------------
-Mon Dec  1 12:35:39 CET 2008 - ro@suse.de
-
-- add rpm to baselibs.conf (for net-snmp) 
-- append a "nil" after suse_install_update_script and _message
-
--------------------------------------------------------------------
-Fri Nov 28 15:15:10 CET 2008 - dmueller@suse.de
-
-- fix build
-- fix stack based buffer overflow in filelist parsing (bnc#397006)
-- add macros for update messages and update scripts
-
--------------------------------------------------------------------
-Fri Nov 28 14:46:04 CET 2008 - mls@suse.de
-
-- disable debug package requires for now, they cause more harm
-  than benefits
-
--------------------------------------------------------------------
-Thu Nov 27 11:37:30 CET 2008 - mls@suse.de
-
-- remove '-m64' from ppc64 optflags [bnc#447002]
-- add _specfile macro
-- set RPMBUILD_ env vars for file helpers
-- make find-supplements.ksyms use RPMBUILD_SPECFILE [bnc#443815]
-
--------------------------------------------------------------------
-Tue Nov 25 17:10:40 CET 2008 - jblunck@suse.de
-
-- find-debuginfo.sh: fix for handling absolute symlinks
-
--------------------------------------------------------------------
-Fri Nov 21 16:30:19 CET 2008 - mls@suse.de
-
-- add firmware.prov provides helper
-
--------------------------------------------------------------------
-Fri Nov 21 14:38:57 CET 2008 - mmarek@suse.cz
-
-- fixed sed expression in find-provides.ksyms
-
--------------------------------------------------------------------
-Tue Nov 18 17:46:53 CET 2008 - jblunck@suse.de
-
-- find-debuginfo.sh: Create symlinks reflecting the policy from brp-symlink
-
--------------------------------------------------------------------
-Thu Nov 13 18:16:14 CET 2008 - agruen@suse.de
-
-- Fix the ksym(...) provides to also include the kernel flavor
-  (bnc#444698).
-
--------------------------------------------------------------------
-Fri Nov  7 15:03:25 CET 2008 - ro@suse.de
-
-- update gcc flags to current set 
-
--------------------------------------------------------------------
-Fri Oct 31 18:59:25 CET 2008 - coolo@suse.de
-
-- moved suse_update_desktop_files to package update_desktop_files
-
--------------------------------------------------------------------
-Tue Oct 28 19:07:02 CET 2008 - jblunck@suse.de
-
-- debugedit: Don't emit NOPs at the end of the line number program but at the
-  beginning (bnc #433182 again)
-- debugedit: Fix an uninitialized variable use that lead to segfaults from
-  time to time
-
--------------------------------------------------------------------
-Tue Oct 28 17:18:03 CET 2008 - mls@suse.de
-
-- fix fingerprint computation for gpg checksums
-
--------------------------------------------------------------------
-Tue Oct 21 11:22:22 CEST 2008 - jblunck@suse.de
-
-- debugedit: Fix debuginfo problems introduced by last patch (bnc #433182)
-
--------------------------------------------------------------------
-Mon Oct 20 16:16:01 CEST 2008 - mls@suse.de
-
-- drop static libraries and libtool archives
-
--------------------------------------------------------------------
-Thu Oct  2 18:30:41 CEST 2008 - vuntz@suse.de
-
-- support the new -t option of suse_update_desktop_file.sh in
-  rpm-suse_macros
-
--------------------------------------------------------------------
-Thu Oct  2 17:43:59 CEST 2008 - mls@suse.de
-
-- fix rpmrc compile options for ia64 [bnc#431345]
-
--------------------------------------------------------------------
-Thu Oct  2 16:19:03 CEST 2008 - jblunck@suse.de
-
-- debugedit: Fix some compilation warnings and the canonicalization error.
-
--------------------------------------------------------------------
-Tue Sep 16 01:01:30 CEST 2008 - ro@suse.de
-
-- fix find-debuginfo.sh and debugsource-package.diff to even
-  apply (directory depth)
-- add hack from jblunck using home made elfcmp 
-
--------------------------------------------------------------------
-Mon Sep 15 20:32:32 CEST 2008 - jblunck@suse.de
-
-- fix find-debuginfo.sh to work on filenames with spaces in
-
--------------------------------------------------------------------
-Fri Sep 12 18:16:33 CEST 2008 - mls@suse.de
-
-- fix changelog cutter
-- fix find-requires script
-- add mimetype.diff patch from Scott Reeves
-
--------------------------------------------------------------------
-Thu Sep 11 15:33:52 CEST 2008 - mls@suse.de
-
-- update to 4.4.2.3 to get rid of >50 patches
-- make changelog cutter configurable
-- update rpm-suse_macros 
-
--------------------------------------------------------------------
-Fri Sep  5 16:56:23 CEST 2008 - dmueller@suse.de
-
-- strip .comment and .GCC.command.line sections from ELF binaries
-
--------------------------------------------------------------------
-Mon Aug 25 14:48:28 CEST 2008 - prusnak@suse.cz
-
-- enabled SELinux support [Fate#303662]
-
--------------------------------------------------------------------
-Thu Aug 21 01:49:00 CEST 2008 - ro@suse.de
-
-- update rpm-suse_macros 
-
--------------------------------------------------------------------
-Wed Aug 20 12:39:53 CEST 2008 - agruen@suse.de
-
-- rpmconfigcheck: set Required-Stop to $null; this init script
-  only performs some checks when started.
-- /usr/lib/python* belongs to the rpm-python package; remove from
-  the main rpm package.
-
--------------------------------------------------------------------
-Mon Jun 30 14:02:35 CEST 2008 - dmueller@suse.de
-
-- add a requires_ge macro as well
-
--------------------------------------------------------------------
-Thu Jun 26 18:40:46 CEST 2008 - schwab@suse.de
-
-- Fix db configure script.
-
--------------------------------------------------------------------
-Thu May 15 14:31:51 CEST 2008 - dmueller@suse.de
-
-- remove references to brp-strip-comment-note (bnc#390163)
-
--------------------------------------------------------------------
-Tue May  6 18:01:34 CEST 2008 - mls@suse.de
-
-- enable all parts of the noprovides patch again, making our rpm
-  compatible to rpm4
-
--------------------------------------------------------------------
-Fri May  2 15:50:17 CEST 2008 - dmueller@suse.de
-
-- add at least one supplements prefering the right kernel flavour
-  if no modalias could be generated (bnc#384084)
-
--------------------------------------------------------------------
-Thu May  1 22:43:17 CEST 2008 - agruen@suse.de
-
-- For kernel modules, require "kernel(flavor:symset) = version"
-  instead of "kernel(symset) = version". This disambiguates
-  the case where several kernel flavors end up with the same
-  modver checksums (190163, 355628).
-
--------------------------------------------------------------------
-Wed Apr 16 17:57:43 CEST 2008 - jblunck@suse.de
-
-- Get rid of noise when no debuginfo was generated
-- Never strip static libraries in find-debuginfo script
-
--------------------------------------------------------------------
-Thu Apr 10 12:50:33 CEST 2008 - ro@suse.de
-
-- added baselibs.conf file for xxbit packages 
-
--------------------------------------------------------------------
-Thu Apr 10 12:32:46 CEST 2008 - jw@suse.de
-
-- added whatrequires-doc.diff
-  Adds a hint to the misleading --whatrequires option, pointing to
-  the more useful -e --test.  
-  Motivated by a talk thread started by Hubert.
-
--------------------------------------------------------------------
-Wed Apr  9 23:15:48 CEST 2008 - mrueckert@suse.de
-
-- revert the last change as it leads to duplicated entries in the
-  file list
-
--------------------------------------------------------------------
-Wed Apr  9 21:00:30 CEST 2008 - jblunck@suse.de
-
-- Fix a bug in last commit that leads to /usr/src/debug not belonging
-  to any package.
-
--------------------------------------------------------------------
-Wed Apr  9 12:56:57 CEST 2008 - jblunck@suse.de
-
-- Put debug sources into separate -debugsource package.
-
--------------------------------------------------------------------
-Fri Mar 28 14:54:04 CET 2008 - coolo@suse.de
-
-- leave the rpm package itself with bzip payload to 
-  avoid blocking updates from within running system
-
--------------------------------------------------------------------
-Thu Mar 27 14:43:24 CET 2008 - coolo@suse.de
-
-- switch payload default to lzma -2 
-- flag GNOME docu as %doc (bnc#358838)
-
--------------------------------------------------------------------
-Tue Mar 18 17:12:00 CET 2008 - mls@suse.de
-
-- make ia32 compatible to ia64, like it was in SLES9 [bnc#367705]
-- fix memory leak and endless loops in lzma code
-- make rpm provide the right lzma rpmlib name
-
--------------------------------------------------------------------
-Tue Mar 18 13:33:25 CET 2008 - schwab@suse.de
-
-- Fix broken db configuration.
-
--------------------------------------------------------------------
-Fri Mar 14 21:54:57 CET 2008 - coolo@suse.de
-
-- change it to the "alone" file format used by stable
-  distributions of 7zip and lzma
-
--------------------------------------------------------------------
-Fri Mar 14 18:05:18 CET 2008 - coolo@suse.de
-
-- daring some more compression time to get an overall picture
-
--------------------------------------------------------------------
-Thu Mar 13 08:11:47 CET 2008 - coolo@suse.de
-
-- support lzma payload using liblzma 
-
--------------------------------------------------------------------
-Thu Feb 21 21:58:39 CET 2008 - mls@suse.de
-
-- do not configure autoreloc or colors
-
--------------------------------------------------------------------
-Thu Jan 31 15:12:55 CET 2008 - ro@suse.de
-
-- brp-symlink: whitelist /opt/kde3/share/doc*/HTML/*/common 
-
--------------------------------------------------------------------
-Mon Jan 28 16:35:46 CET 2008 - ro@suse.de
-
-- finddebuginfo.diff: disable debuginfo for mono at the moment 
-
--------------------------------------------------------------------
-Mon Jan 21 12:27:18 CET 2008 - mls@suse.de
-
-- change vendor detection so that it works in build service, too
-
--------------------------------------------------------------------
-Sat Jan 19 17:14:55 CET 2008 - mls@suse.de
-
-- update rpm-suse_macros so that the build service can build, too
-
--------------------------------------------------------------------
-Thu Jan 17 19:19:09 CET 2008 - wberrier@suse.de
-
-- autodeps.diff
-  pass .config files to mono-find-requires, not mono-find-provides
-
--------------------------------------------------------------------
-Mon Dec  3 13:38:20 CET 2007 - dmueller@suse.de
-
-- list email address completely again (#344147)
-
--------------------------------------------------------------------
-Fri Nov 16 20:46:42 CET 2007 - dmueller@suse.de
-
-- shorten changelogs in binary rpms (#308569) 
-  * saves 4.3MB for the one CD media 
-
--------------------------------------------------------------------
-Thu Oct 11 13:37:16 CEST 2007 - schwab@suse.de
-
-- Add support for lzma compressed archives.
-
--------------------------------------------------------------------
-Sun Sep 30 18:28:23 CEST 2007 - rguenther@suse.de
-
-- fix build with gcc43
-
--------------------------------------------------------------------
-Mon Sep  3 13:27:57 CEST 2007 - dmueller@suse.de
-
-- change %lang_package implementation once again
-  to support bundle-lang-other for only one desktop (#302270)
-
--------------------------------------------------------------------
-Fri Aug 31 18:41:04 CEST 2007 - dmueller@suse.de
-
-- implement supplements for lang_packages (#306412) 
-
--------------------------------------------------------------------
-Fri Aug 10 16:40:10 CEST 2007 - dmueller@suse.de
-
-- package size reduction (#217472)
-
--------------------------------------------------------------------
-Wed Aug  8 23:25:56 CEST 2007 - dmueller@suse.de
-
-- support optional -n parameter in %lang_package
-- make %lang_package export a -all provides that
-  can be used to resolve conflicts with the bundle
-
--------------------------------------------------------------------
-Thu Aug  2 15:28:09 CEST 2007 - mls@suse.de
-
-- let the debug_package_requires macro overwrite the
-  default requires in the debuginfo package
-
--------------------------------------------------------------------
-Tue Jul 24 13:29:10 CEST 2007 - dmueller@suse.de
-
-- hardcode rpm in patch name
-
--------------------------------------------------------------------
-Fri Jun 15 08:30:07 CEST 2007 - dmueller@suse.de
-
-- package size reduction (28%)
-
--------------------------------------------------------------------
-Sun May 27 16:43:25 CEST 2007 - schwab@suse.de
-
-- Remove duplicate rpmpopt alias.
-
--------------------------------------------------------------------
-Fri May 25 16:18:07 CEST 2007 - mls@suse.de
-
-- fix patch-rpm query
-- do not link convertdb1 statically [#274694]
-- use --wildcards option for tar [#272519]
-- fix perl.prov [#255009]
-- show pre/posttrans scripts in --scripts query [#253620]
-- remove popt version requires [#246871]
-- fix missing file error
-
--------------------------------------------------------------------
-Wed May 16 12:16:44 CEST 2007 - mls@suse.de
-
-- fix autodeps.diff mono logic
-
--------------------------------------------------------------------
-Mon May 14 13:47:02 CEST 2007 - coolo@suse.de
-
-- correctly mark KDE documentation as %doc in find-lang.sh
-
--------------------------------------------------------------------
-Fri May 11 14:34:35 CEST 2007 - coolo@suse.de
-
-- adding %lang_package to simplify seperating translations
-
--------------------------------------------------------------------
-Sat Apr 28 00:43:30 CEST 2007 - wberrier@suse.de
-
-- autodeps.diff - bnc #227362
-  -Print warning if mono assembiles are found but mono-find-* fails
-  (solution is to make sure mono-devel is installed)
-  -Also include .config files when searching for mono assemblies.
-   (bnc #210224)
-
--------------------------------------------------------------------
-Tue Apr 24 17:12:47 CEST 2007 - mls@suse.de
-
-- enable noprovides patch again.
-  disable part of the patch so that rpm checks the package provides
-  again instead of just package name when going through the
-  obsoletes list. This makes rpm behaviour consistent with the
-  updated libzypp. [#232127]
-
--------------------------------------------------------------------
-Sun Apr 22 15:23:12 CEST 2007 - dmueller@suse.de
-
-- fix stripping of symbol table
-
--------------------------------------------------------------------
-Tue Apr 17 14:24:01 CEST 2007 - dmueller@suse.de
-
-- strip comment and gcc command line sections from the packages
-- rework SYMTAB_KEEP to accept a file pattern
-
--------------------------------------------------------------------
-Sun Apr  8 23:22:12 CEST 2007 - schwab@suse.de
-
-- Include compilation directory in debuginfo file list.
-
--------------------------------------------------------------------
-Sat Mar 24 12:22:23 CET 2007 - ro@suse.de
-
-- added libbz2-devel to BuildRequires and Requires for -devel 
-
--------------------------------------------------------------------
-Fri Mar 23 16:14:28 CET 2007 - dmueller@suse.de
-
-- drop custom libpopt so versioning
-- move libpopt to /lib(64) for cryptsetup
-- adjust installed libtool files
-- Fix rpm buildrequires / devel requires
-
--------------------------------------------------------------------
-Thu Mar 22 16:41:44 CET 2007 - stbinner@suse.de
-
-- files.diff: when checking %files list also show unpackaged files
-  after "not found" error message [#255780]
-
--------------------------------------------------------------------
-Thu Mar 22 10:45:08 CET 2007 - dmueller@suse.de
-
-- remove strangely duplicated libpopt
-- remove static popt and corresponding .la file to reduce
-  dependencies
-- Fix various format string errors in german translation
-  which cause crashes
-
--------------------------------------------------------------------
-Mon Mar 19 16:48:22 CET 2007 - rguenther@suse.de
-
-- do not require build-key
-
--------------------------------------------------------------------
-Tue Mar  6 20:19:40 CET 2007 - rguenther@suse.de
-
-- adjust cflags_profile_generate and cflags_profile_feedback to
-  enable tree profiling
-
--------------------------------------------------------------------
-Fri Jan 26 16:55:15 CET 2007 - mls@suse.de
-
-- create /var/spool/repackage directory [#230866]
-- do not run pre/posttrans scripts in test mode [#235361]
-
 -------------------------------------------------------------------
 Thu Nov 30 14:04:56 CET 2006 - mls@suse.de
 
@@ -1265,8 +392,8 @@ Wed Sep  7 18:13:11 CEST 2005 - matz@suse.de
 
 - Make debuginfo packages require exact version of base rpm.
 
-
 -------------------------------------------------------------------
+
 Fri Sep  2 13:07:08 CEST 2005 - mls@suse.de
 
 - backport CLOEXEC workaround [#93727]
@@ -2768,7 +1895,7 @@ Mon Feb 22 15:08:09 MET 1999 - ro@suse.de
 - update to 2.91
 - ported ma's fixes
 
--------------------------------------------------------------------
+------------------------------------------------------------------
 Wed Nov 25 19:06:11 MET 1998 - ma@suse.de
 
 - new version 2.5.5
@@ -2854,7 +1981,7 @@ Mon Oct 27 15:29:41 MET 1997 - ma@suse.de
 - patch: ignore errors when installing a symlink and called from YaST
 - de.po update 
 
--------------------------------------------------------------------
+----------------------------------------------------------------------
 Thu Aug  7 17:46:48 MEST 1997 - ma@suse.de
 
 - duplicate '--nodeps' entry in rpm manpage deleted.
@@ -2863,13 +1990,13 @@ Thu Aug  7 17:46:48 MEST 1997 - ma@suse.de
   is disabeled, unless environment variable RPM_IgnoreFailedSymlinks
   is set.
 
--------------------------------------------------------------------
+----------------------------------------------------------------------
 Tue Jul 15 13:24:22 MEST 1997 - ro@suse.de
 
 - added workaround to skip installing a symlink when
   impossible to remove an existing directory
 
--------------------------------------------------------------------
+----------------------------------------------------------------------
 Thu Jun 26 19:10:48 MEST 1997 - ma@suse.de
 
 - introducing rpm, version 2.4.1
diff --git a/rpm.spec b/rpm.spec
index 32484a7..c32da45 100644
--- a/rpm.spec
+++ b/rpm.spec
@@ -1,127 +1,123 @@
 #
-# spec file for package rpm
+# spec file for package rpm (Version 4.4.2)
 #
-# Copyright (c) 2011 SUSE LINUX Products GmbH, Nuernberg, Germany.
+# Copyright (c) 2006 SUSE LINUX Products GmbH, Nuernberg, Germany.
+# This file and all modifications and additions to the pristine
+# package are under the same license as the package itself.
 #
-# All modifications and additions to the file contributed by third parties
-# remain the property of their copyright owners, unless otherwise agreed
-# upon. The license for this file, and modifications and additions to the
-# file, is the same license as for the pristine package itself (unless the
-# license for the pristine package is not an Open Source License, in which
-# case the license is the MIT License). An "Open Source License" is a
-# license that conforms to the Open Source Definition (Version 1.9)
-# published by the Open Source Initiative.
-
 # Please submit bugfixes or comments via http://bugs.opensuse.org/
 #
 
-
+# norootforbuild
 
 Name:           rpm
-License:        GPLv2+
+License:        GNU General Public License (GPL)
 Group:          System/Packages
-BuildRequires:  file-devel libbz2-devel libelf-devel libselinux-devel libsemanage-devel lua-devel ncurses-devel xz-devel zlib-devel
-BuildRequires:  popt-devel
-BuildRequires:  libacl-devel libcap-devel
-#!BuildIgnore:  rpmlint-Factory
 Provides:       rpminst
-PreReq:         %insserv_prereq %fillup_prereq permissions
-AutoReqProv:    on
+Requires:       build-key
+%define       popt_version 1.7
+PreReq:         %insserv_prereq %fillup_prereq popt = %{popt_version} permissions
+Autoreqprov:    on
 Summary:        The RPM Package Manager
-Version:        4.9.0
-Release:        13
+Version:        4.4.2
+Release:        76
 Source:         rpm-%{version}.tar.bz2
 Source1:        RPM-HOWTO.tar.bz2
 Source2:        RPM-Tips.html.tar.bz2
+Source3:        RPM-Changes.html.tar.bz2
 Source4:        rpm-suse_macros
 Source5:        rpmsort
 Source6:        symset-table
 Source8:        rpmconfigcheck
 Source9:        sysconfig.services-rpm
-Source10:       beecrypt-4.1.2.tar.bz2
-Source11:       db-4.8.30.tar.bz2
-Source12:       baselibs.conf
-Patch1:         beecrypt-4.1.2.diff
-Patch2:         db.diff
+Source10:       elfutils-0.97.tar.bz2
+Source11:       beecrypt-4.1.2.tar.bz2
+Patch1:         elfutils-0.97.diff
+Patch2:         beecrypt-4.1.2.diff
+Patch3:         db.diff
 # quilt patches start here
-Patch10:        rpm-beecrypt.diff
-Patch11:        debugedit.diff
-Patch12:        localetag.diff
-Patch13:        missingok.diff
-Patch14:        nameversioncompare.diff
-Patch15:        chownwarn.diff
-Patch16:        dbfsync.diff
-Patch17:        dbrointerruptable.diff
-Patch18:        extcond.diff
-Patch19:        refreshtestarch.diff
-Patch20:        rpmrctests.diff
-Patch21:        waitlock.diff
-Patch22:        suspendlock.diff
-Patch23:        weakdeps.diff
-Patch24:        autodeps.diff
-Patch25:        brp.diff
-Patch26:        brpcompress.diff
-Patch27:        checkfilesnoinfodir.diff
-Patch28:        finddebuginfo.diff
-Patch29:        findksyms.diff
-Patch30:        findlang.diff
-Patch31:        macrosin.diff
-Patch32:        modalias.diff
-Patch33:        platformin.diff
-Patch34:        rpmpopt.diff
-Patch35:        rpmrc.diff
-Patch36:        taggedfileindex.diff
-Patch37:        rpmqpack.diff
-Patch38:        convertdb1static.diff
-Patch39:        build.diff
-Patch40:        modalias-kernel_module.diff
-Patch41:        files.diff
-Patch42:        debugedit-comp-dir.diff
-Patch43:        perlprov.diff
-Patch44:        rpm-shorten-changelog.diff
-Patch45:        debugsource-package.diff
-Patch46:        whatrequires-doc.diff
-Patch47:        remove-brp-strips.diff
-Patch48:        requires-ge-macro.diff
-Patch50:        debugedit-canon-fix.diff
-Patch51:        finddebuginfo-absolute-links.diff
-Patch52:        firmware.diff
-Patch53:        specfilemacro.diff
-Patch54:        modalias-encode.diff
-Patch55:        disttag-macro.diff
-Patch56:        buildidprov.diff
-Patch57:        debugsubpkg.diff
-Patch58:        debuglink.diff
-Patch59:        debuginfo-mono.patch
-Patch60:        lazystatfs.diff
-Patch61:        repackage-nomd5.diff
-Patch62:        safeugid.diff
-Patch63:        noprereqdeprec.diff
-Patch64:        pythondeps.diff
-Patch65:        fontprovides.diff
-Patch66:        rpm-gst-provides.patch
-Patch67:        langnoc.diff
-Patch68:        initscriptsprov.diff
-Patch69:        remove-translations.diff
-Patch70:        no_rep_autop.diff
-Patch71:        headeradddb.diff
-Patch72:        rpmdb_get_open_flags.diff
-Patch73:        verify_p.diff
-Patch74:        dbprivate.diff
-Patch75:        nobuildcolor.diff
-Patch76:        fileattrs.diff
-Patch77:        emptyprep.diff
-Patch78:        nomagiccheck.diff
-Patch79:        findsupplements.diff
-Patch80:        magic_and_path.diff
-Patch81:        safemacro.diff
-Patch82:        emptychangelog.diff
-Patch83:        assumeexec.diff
-Patch84:        buildpipe.diff
+Patch10:        aloffbyone.diff
+Patch11:        badforsyntax.diff
+Patch12:        buildsubdir.diff
+Patch13:        compress.diff
+Patch14:        debugedit.diff
+Patch15:        docdir_fmt.diff
+Patch16:        emptyfilelist.diff
+Patch17:        eraseignoresize.diff
+Patch18:        erasebadreturn.diff
+Patch19:        eraseordered.diff
+Patch20:        exitstatus.diff
+Patch21:        filenonull.diff
+Patch22:        filequery.diff
+Patch23:        findfplistexclude.diff
+Patch24:        forkfailed.diff
+Patch25:        getcwdresult.diff
+Patch26:        ghost.diff
+Patch27:        globoffbyone.diff
+Patch28:        initdbret.diff
+Patch29:        localetag.diff
+Patch30:        luanoreadline.diff
+Patch31:        missingok.diff
+Patch32:        nameversioncompare.diff
+Patch33:        nostdoutclose.diff
+Patch34:        obeynodbsync.diff
+Patch35:        payloadformat.diff
+Patch36:        pgpdecodeearly.diff
+Patch37:        prereqorder.diff
+Patch38:        probfilter.diff
+Patch39:        rebuilddbroot.diff
+Patch40:        sbitcheck.diff
+Patch41:        setpermsugids.diff
+Patch42:        signature.diff
+Patch43:        signwriteerror.diff
+Patch44:        spectest.diff
+Patch45:        sqcondmutex.diff
+Patch46:        srcdefattr.diff
+Patch47:        totalsizenoexclude.diff
+Patch48:        translockroot.diff
+Patch49:        vercmp.diff
+Patch50:        verifylstatfail.diff
+Patch51:        chownwarn.diff
+Patch52:        dbfsync.diff
+Patch53:        dbrointerruptable.diff
+Patch54:        diskspace.diff
+Patch55:        extcond.diff
+Patch56:        globlstat.diff
+Patch57:        nodefattr.diff
+Patch58:        nolua.diff
+Patch59:        luaroot.diff
+Patch60:        noneon.diff
+#Patch61:        noprovides.diff
+Patch62:        openallbuttemp.diff
+Patch63:        refreshtestarch.diff
+Patch64:        rpmrctests.diff
+Patch65:        suspendlock.diff
+Patch66:        tagsbackport.diff
+Patch67:        waitlock.diff
+Patch68:        dbprivate.diff
+Patch69:        legacyprereq.diff
+Patch70:        weakdeps.diff
+Patch71:        autodeps.diff
+Patch72:        brp.diff
+Patch73:        brpcombress.diff
+Patch74:        checkfilesnoinfodir.diff
+Patch75:        finddebuginfo.diff
+Patch76:        findksyms.diff
+Patch77:        findlang.diff
+Patch78:        macrosin.diff
+Patch79:        modalias.diff
+Patch80:        platformin.diff
+Patch81:        rpmpopt.diff
+Patch82:        rpmrc.diff
+Patch83:        patchrpms.diff
+Patch84:        taggedfileindex.diff
+Patch85:        rpmqpack.diff
+Patch86:        convertdb1static.diff
+Patch87:        build.diff
+Patch88:        modalias-kernel_module.diff
+Patch89:        querybuffer.diff
 BuildRoot:      %{_tmppath}/%{name}-%{version}-build
 #
-# avoid bootstrapping problem
-%define _binary_payload w9.bzdio
 
 %description
 RPM Package Manager is the main tool for managing the software packages
@@ -140,8 +136,8 @@ Authors:
     Marc Ewing <marc@redhat.com>
 
 %package devel
-Summary:        Include Files and Libraries mandatory for Development
-License:        GPLv2+
+Summary:        Include Files and Libraries mandatory for Development.
+License:        GNU General Public License (GPL)
 Group:          System/Packages
 Requires:       rpm = %{version}
 Requires:       popt-devel
@@ -163,129 +159,98 @@ Authors:
 %prep
 %setup -q -n rpm-%{version}
 rm -rf sqlite
+rm -rf elfutils
 rm -rf beecrypt
 tar xjf %{SOURCE10}
+ln -s elfutils-0.97 elfutils
+# remove all OSL stuff
+rm -rf elfutils/doc elfutils/libebl elfutils/libdw elfutils/libcpu elfutils/libasm elfutils/src elfutils/po elfutils/tests
+rm -rf elfutils/lib/dynamicsizehash.c elfutils/lib/dynamicsizehash.h elfutils/lib/list.h elfutils/lib/xmalloc.c elfutils/lib/xstrdup.c elfutils/lib/xstrndup.c
 tar xjf %{SOURCE11}
-ln -s db-4.8.30 db
 ln -s beecrypt-4.1.2 beecrypt
-chmod -R u+w db/*
 #tar xjf %{SOURCE12}
 #ln -s neon-0.24.7 neon
 # will get linked from db3
 rm -f rpmdb/db.h
-%patch -P 1 -P 2
+# separate popt source
+# %setup -q -D -T -a 9
+# mv popt popt.orig
+# ln -s popt-%{popt_version} popt
+%patch -P 1 -P 2 -P 3
 %patch -P 10 -P 11 -P 12 -P 13 -P 14 -P 15 -P 16 -P 17 -P 18 -P 19
 %patch -P 20 -P 21 -P 22 -P 23 -P 24 -P 25 -P 26 -P 27 -P 28 -P 29
 %patch -P 30 -P 31 -P 32 -P 33 -P 34 -P 35 -P 36 -P 37 -P 38 -P 39
-%patch -P 40 -P 41 -P 42 -P 43 -P 44 -P 45 -P 46 -P 47 -P 48 
+%patch -P 40 -P 41 -P 42 -P 43 -P 44 -P 45 -P 46 -P 47 -P 48 -P 49
 %patch -P 50 -P 51 -P 52 -P 53 -P 54 -P 55 -P 56 -P 57 -P 58 -P 59
-%patch -P 60 -P 61 -P 62 -P 63 -P 64 -P 65 -P 66 -P 67 -P 68 -P 69
+%patch -P 60       -P 62 -P 63 -P 64 -P 65 -P 66 -P 67 -P 68 -P 69
 %patch -P 70 -P 71 -P 72 -P 73 -P 74 -P 75 -P 76 -P 77 -P 78 -P 79
-%patch -P 80 -P 81 -P 82 -P 83 -P 84
-#chmod 755 scripts/find-supplements{,.ksyms}
-#chmod 755 scripts/find-provides.ksyms scripts/find-requires.ksyms
-#chmod 755 scripts/firmware.prov
-#chmod 755 scripts/debuginfo.prov
+%patch -P 80 -P 81 -P 82 -P 83 -P 84 -P 85 -P 86 -P 87 -P 88 -P 89
+chmod 755 scripts/find-supplements{,.ksyms}
+chmod 755 scripts/find-provides.ksyms scripts/find-requires.ksyms
 tar -xjvf %{SOURCE1}
 tar -xjvf %{SOURCE2}
+tar -xjvf %{SOURCE3}
 if [ -s /etc/rpm/suse_macros ]; then
 	cp -a /etc/rpm/suse_macros %{SOURCE4}
 fi
 cp -a %{SOURCE4} suse_macros
-rm -f m4/libtool.m4
-rm -f m4/lt*.m4
+rename no nb po/no.* popt/po/no.*
 
 %build
-export CFLAGS="$RPM_OPT_FLAGS -fno-strict-aliasing -ffunction-sections"
-export LDFLAGS="-Wl,-Bsymbolic-functions -ffunction-sections"
+%{?suse_update_config:%{suse_update_config -f popt}}
+export CFLAGS="$RPM_OPT_FLAGS -fno-strict-aliasing"
 %ifarch alpha
 export CFLAGS="-g -O0 -fno-strict-aliasing"
 %endif
-#cp -p /usr/share/gettext/config.rpath .
-cp autogen.sh beecrypt
-pushd beecrypt
-./autogen.sh --with-pic --without-python
-make %{?_smp_mflags}
-popd
-./autogen.sh --prefix=%{_prefix} --mandir=%{_mandir} --infodir=%{_infodir} \
---libdir=%{_libdir} --sysconfdir=/etc --localstatedir=/var --with-lua \
---with-selinux --with-internal-beecrypt --with-acl --with-cap --enable-shared %{?with_python: --enable-python}
+#cp popt/autogen.sh zlib
+rm -rf zlib
+cp /usr/share/gettext/config.rpath .
+cp popt/autogen.sh beecrypt
+cp popt/autogen.sh libelf
+cp popt/autogen.sh elfutils
+cp popt/autogen.sh file
+# cp popt/autogen.sh neon
+./autogen.sh --prefix=%{_prefix} --mandir=%{_mandir} --infodir=%{_infodir} --libdir=/usr/lib --sysconfdir=/etc --localstatedir=/var --with-lua --without-selinux --enable-shared
 rm po/de.gmo
-make %{?_smp_mflags}
-make convertdb1
+make %{?jobs:-j%jobs}
+(cd popt; gcc -shared  .libs/popt.o .libs/findme.o .libs/poptparse.o .libs/poptconfig.o .libs/popthelp.o $RPM_OPT_FLAGS -Wl,-soname -Wl,libpopt.so.1 -o .libs/libpopt.so.1.0.0)
 
 %install
+rm -rf $RPM_BUILD_ROOT
+mkdir $RPM_BUILD_ROOT
 mkdir -p $RPM_BUILD_ROOT/usr/lib
 mkdir -p $RPM_BUILD_ROOT/usr/share/locale
 ln -s ../share/locale $RPM_BUILD_ROOT/usr/lib/locale
 make DESTDIR="$RPM_BUILD_ROOT" install
-install -m 755 convertdb1 $RPM_BUILD_ROOT/usr/lib/rpm
-install -m 644 db3/db.h $RPM_BUILD_ROOT/usr/include/rpm
-# remove .la file and the static variant of libpopt
-# have to remove the dependency from other .la files as well
-for f in $RPM_BUILD_ROOT/%{_libdir}/*.la; do
-    sed -i -e "s,/%_lib/libpopt.la,-lpopt,g" $f
-done
+cp popt/.libs/libpopt.so.1.0.0 $RPM_BUILD_ROOT/%{_libdir}
+ln -sf libpopt.so.1.0.0 $RPM_BUILD_ROOT/%{_libdir}/libpopt.so.1
 mkdir -p $RPM_BUILD_ROOT/etc/init.d
 install -m 755 %{SOURCE8} $RPM_BUILD_ROOT/etc/init.d
 mkdir -p $RPM_BUILD_ROOT/usr/sbin
 ln -sf ../../etc/init.d/rpmconfigcheck $RPM_BUILD_ROOT/usr/sbin/rcrpmconfigcheck
 cp -a suse_macros $RPM_BUILD_ROOT/usr/lib/rpm
-mkdir -p $RPM_BUILD_ROOT/usr/lib/rpm/suse
-ln -s ../suse_macros $RPM_BUILD_ROOT/usr/lib/rpm/suse/macros
-for d in BUILD RPMS SOURCES SPECS SRPMS BUILDROOT ; do
-  mkdir -p $RPM_BUILD_ROOT/usr/src/packages/$d
-  chmod 1777 $RPM_BUILD_ROOT/usr/src/packages/$d
-done
-for d in $RPM_BUILD_ROOT/usr/lib/rpm/platform/*-linux/macros ; do
-  dd=${d%%-linux/macros}
-  dd=${dd##*/}
-  mkdir $RPM_BUILD_ROOT/usr/src/packages/RPMS/$dd
-  chmod 1777 $RPM_BUILD_ROOT/usr/src/packages/RPMS/$dd
-done
+mv $RPM_BUILD_ROOT/usr/src/* $RPM_BUILD_ROOT/usr/src/packages
 mkdir -p $RPM_BUILD_ROOT/var/lib/rpm
+rm -rf $RPM_BUILD_ROOT/usr/include/beecrypt $RPM_BUILD_ROOT/usr/include/libelf $RPM_BUILD_ROOT/%{_libdir}/libbeecrypt* $RPM_BUILD_ROOT/usr/lib/libelf*
 gzip -9 $RPM_BUILD_ROOT/%{_mandir}/man[18]/*.[18]
 export RPM_BUILD_ROOT
 %ifarch s390x
 [ -f scripts/brp-%_arch-linux ] && sh scripts/brp-%_arch-linux
 %endif
 chmod 755 doc/manual
-rm -rf doc/manual/Makefile*
 rm -f $RPM_BUILD_ROOT/usr/lib/rpmpopt
 rm -rf $RPM_BUILD_ROOT%{_mandir}/{fr,ja,ko,pl,ru,sk}
 rm -f $RPM_BUILD_ROOT%{_prefix}/share/locale/de/LC_MESSAGES/rpm.mo
 mkdir -p $RPM_BUILD_ROOT/var/adm/fillup-templates
 install -c -m0644 %{SOURCE9} $RPM_BUILD_ROOT/var/adm/fillup-templates/
 rm -f $RPM_BUILD_ROOT/usr/lib/rpm/cpanflute $RPM_BUILD_ROOT/usr/lib/rpm/cpanflute2
-find $RPM_BUILD_ROOT/usr/src/packages/* -type d | sed -e "s@$RPM_BUILD_ROOT@@" | sort > $RPM_BUILD_ROOT/usr/lib/rpm/permlist
+find $RPM_BUILD_ROOT/usr/src/packages/* -type d | sed -e "s@$RPM_BUILD_ROOT@@" > $RPM_BUILD_ROOT/usr/lib/rpm/permlist
 install -m 755 %{SOURCE5} $RPM_BUILD_ROOT/usr/lib/rpm
 install -m 755 %{SOURCE6} $RPM_BUILD_ROOT/usr/lib/rpm
 install -m 755 scripts/find-supplements{,.ksyms} $RPM_BUILD_ROOT/usr/lib/rpm
-install -m 755 scripts/firmware.prov $RPM_BUILD_ROOT/usr/lib/rpm
-install -m 755 scripts/debuginfo.prov $RPM_BUILD_ROOT/usr/lib/rpm
 rm -f $RPM_BUILD_ROOT/usr/lib/locale $RPM_BUILD_ROOT/usr/lib/rpmrc
 mkdir -p $RPM_BUILD_ROOT/etc/rpm
 chmod 755 $RPM_BUILD_ROOT/etc/rpm
-# remove some nonsense or non-working scripts
-pushd $RPM_BUILD_ROOT/usr/lib/rpm/
-for f in rpm2cpio.sh rpm.daily rpmdiff* rpm.log rpm.xinetd freshen.sh u_pkg.sh \
-         magic magic.mgc magic.mime* rpmfile *.pl javadeps brp-redhat \
-         brp-strip-static-archive vpkg-provides*.sh http.req sql.req tcl.req \
-         rpmdb_* brp-sparc64-linux brp-strip-comment-note brp-java-gcjcompile
-do
-    rm -f $f
-done
-for i in /usr/share/automake-*/*; do
-  if test -f "$i" && test -f "${i##*/}"; then
-    rm -f "${i##*/}"
-  fi
-done
-popd
-gzip -9 CHANGES
-rm -rf $RPM_BUILD_ROOT/%{_libdir}/python%{py_ver}
-rm -f $RPM_BUILD_ROOT%{_libdir}/*.la
-rm -f $RPM_BUILD_ROOT%{_libdir}/rpm-plugins/*.la
-sh $RPM_BUILD_ROOT/usr/lib/rpm/find-lang.sh $RPM_BUILD_ROOT rpm
 
 %clean
 rm -rf $RPM_BUILD_ROOT
@@ -300,8 +265,6 @@ if test -s var/lib/rpm/packages.rpm ; then
   mv -f var/lib/rpm/packages.rpm var/lib/rpm/packages.rpm3
   rm -f var/lib/rpm/conflictsindex.rpm var/lib/rpm/fileindex.rpm var/lib/rpm/groupindex.rpm var/lib/rpm/nameindex.rpm var/lib/rpm/providesindex.rpm var/lib/rpm/requiredby.rpm var/lib/rpm/triggerindex.rpm
 fi
-# delete no longer maintained databases
-rm -f var/lib/rpm/Filemd5s var/lib/rpm/Filedigests var/lib/rpm/Requireversion var/lib/rpm/Provideversion
 
 %postun
 %{insserv_cleanup}
@@ -309,40 +272,1064 @@ rm -f var/lib/rpm/Filemd5s var/lib/rpm/Filedigests var/lib/rpm/Requireversion va
 %verifyscript
 %verify_permissions -f /usr/lib/rpm/permlist
 
-%files -f rpm.lang
+%files
 %defattr(-,root,root)
-%doc 	CHANGES.gz COPYING GROUPS
+%doc 	RPM-PGP-KEY RPM-GPG-KEY CHANGES COPYING GROUPS
 %doc 	doc/manual
-%doc    RPM-HOWTO RPM-Tips
+%doc 	RPM-HOWTO RPM-Tips RPM-Changes
 	/etc/rpm
 	/bin/rpm
 	/usr/bin/*
 	/etc/init.d/rpmconfigcheck
 	/usr/sbin/rcrpmconfigcheck
 	/usr/lib/rpm
-	%{_libdir}/rpm-plugins
-	%{_libdir}/librpm.so.*
-	%{_libdir}/librpmbuild.so.*
-	%{_libdir}/librpmio.so.*
-	%{_libdir}/librpmsign.so.*
+	%{_libdir}/librpm*-*.so
 %doc	%{_mandir}/man[18]/*.[18]*
+#%doc	%{_mandir}/*/man[18]/*.[18]*
+	/usr/share/locale/*/LC_MESSAGES/rpm.mo
 %dir 	/var/lib/rpm
 %verify(not mode) %dir 	%attr(755,root,root) /usr/src/packages/BUILD
 %verify(not mode) %dir 	%attr(755,root,root) /usr/src/packages/SPECS
 %verify(not mode) %dir 	%attr(755,root,root) /usr/src/packages/SOURCES
 %verify(not mode) %dir 	%attr(755,root,root) /usr/src/packages/SRPMS
 %verify(not mode) %dir	%attr(755,root,root)  /usr/src/packages/RPMS
-%verify(not mode) %dir	%attr(755,root,root)  /usr/src/packages/BUILDROOT
 %verify(not mode) %dir	%attr(755,root,root) /usr/src/packages/RPMS/*
 	/var/adm/fillup-templates/sysconfig.services-rpm
 
 %files devel
 %defattr(644,root,root,755)
 	/usr/include/rpm
+        %{_libdir}/librpm*.a
+        %{_libdir}/librpm*.la
         %{_libdir}/librpm.so
         %{_libdir}/librpmbuild.so
+        %{_libdir}/librpmdb.so
         %{_libdir}/librpmio.so
-        %{_libdir}/librpmsign.so
-        %{_libdir}/pkgconfig/rpm.pc
+%package -n popt
+Summary:        A C library for parsing command line parameters
+License:        GNU Library General Public License v. 2.0 and 2.1 (LGPL), Other License(s), see package
+Group:          System/Libraries
+Version:        1.7
+Release:        304
+#
 
-%changelog
+%description -n popt
+Popt is a C library for parsing command line parameters.  Popt was
+heavily influenced by the getopt() and getopt_long() functions. It
+improves on them by allowing more powerful argument expansion. Popt can
+parse arbitrary argv[] style arrays and automatically set variables
+based on command line arguments.  Popt allows command line arguments to
+be aliased via configuration files and includes utility functions for
+parsing arbitrary strings into argv[] arrays using shell-like rules.
+
+
+
+Authors:
+--------
+    Erik Troan <ewt@redhat.com>
+
+%package -n popt-devel
+Summary:        C Library for Parsing Command Line Parameters
+License:        GNU Library General Public License v. 2.0 and 2.1 (LGPL), Other License(s), see package
+Group:          System/Libraries
+Version:        1.7
+Release:        304
+Requires:       popt = 1.7
+Requires:       glibc-devel
+
+%description -n popt-devel
+Popt is a C library for parsing command line parameters.  Popt was
+heavily influenced by the getopt() and getopt_long() functions, but it
+improves on them by allowing more powerful argument expansion. Popt can
+parse arbitrary argv[] style arrays and automatically set variables
+based on command line arguments.  Popt allows command line arguments to
+be aliased via configuration files and includes utility functions for
+parsing arbitrary strings into argv[] arrays using shell-like rules.
+
+
+
+Authors:
+--------
+    Erik Troan <ewt@redhat.com>
+
+
+%post -n popt -p /sbin/ldconfig
+
+%postun -n popt -p /sbin/ldconfig
+
+%files -n popt
+%defattr(-,root,root)
+        %{_libdir}/libpopt.so.*
+	/usr/share/locale/*/LC_MESSAGES/popt.mo
+
+%files -n popt-devel
+%defattr(644,root,root,755)
+	/usr/include/popt.h
+        %{_libdir}/libpopt.a
+        %{_libdir}/libpopt.la
+        %{_libdir}/libpopt.so
+%doc	%{_mandir}/man3/popt.3*
+
+%changelog -n rpm
+* Thu Nov 30 2006 - mls@suse.de
+- disable noprovides patch [#224824]
+* Fri Nov 24 2006 - mls@suse.de
+- fix buffer overflow in query function [#218983]
+- fix off-by-two error in formatStrong [#210135]
+- fix typo in (unused) beecrypt code [#219738]
+- add standard buildservice macros
+* Tue Nov 14 2006 - agruen@suse.de
+- Add %%supplements_kernel_module macro for use in firmware and
+  similar packages which are related to modules in a
+  kernel-$flavor package: RPM then extracts the modaliases from
+  the specified module(s) and adds them as Supplements:
+  modalias(...) tags, so that the package magaer will add
+  such packages automatically when the respective hardware is
+  present.
+* Wed Nov 08 2006 - agruen@suse.de
+- Move the Kernel Module specific macros into the kernel-source
+  package.
+* Fri Oct 20 2006 - agruen@suse.de
+- Support the distribution-independent macros
+  %%kernel_module_package_buildreq, %%kernel_module_package, and
+  inside %%kernel_module_package, the macros %%flavors_to_build and
+  %%kernel_source.
+* Wed Oct 18 2006 - mls@suse.de
+- split up jumbo patch in 78 small patches
+- fix lua directory handling [#201518]
+- add /etc/rpm directory to filelist [#208762]
+* Mon Oct 16 2006 - agruen@suse.de
+- Fix the KMP Package spec file template so that whenever the
+  initrd contains a module that the KMP includes, the initrd will
+  be regenerated (211646).
+* Sun Oct 15 2006 - schwab@suse.de
+- Make sure config.rpath is present.
+* Mon Oct 02 2006 - agruen@suse.de
+- %%suse_kernel_module_package: Abort when trying to build for a
+  kernel that doesn't have an associated /boot/symsets-$krel.tar.gz
+  file: we cannot generate the appropriate dependencies without.
+* Mon Oct 02 2006 - agruen@suse.de
+- Allow kernel modules in packages even when the dependencies
+  between those packages and the matching kernel packages cannot
+  be tracked (199474).
+* Sun Oct 01 2006 - agruen@suse.de
+- Make find-*.ksyms more robust.
+* Tue Sep 19 2006 - rguenther@suse.de
+- split rpm-python to separate spec file
+- remove python-devel BuildRequires
+* Tue Aug 15 2006 - ro@suse.de
+- workaround for gettext using MKINSTALLDIRS in configure.ac
+* Wed Jun 14 2006 - mls@suse.de
+- make rpmlib provide rpmlib(PatchRPMs) [#184856]
+* Wed Apr 26 2006 - agruen@suse.de
+- rpm-suse-kernel-module-subpackage: Use a temporary file location
+  that only root can write to (169378).
+* Fri Apr 21 2006 - mls@suse.de
+- copy suse_macros file back into source rpm
+* Mon Apr 10 2006 - agruen@suse.de
+- rpm-suse-kernel-module-subpackage: Arguments to -p and -f should
+  be relative to %%_sourcedir.
+* Fri Mar 24 2006 - mls@suse.de
+- fix uninitialized variable in unused file code [#160434]
+* Fri Mar 24 2006 - agruen@suse.de
+- %%suse_kernel_module_package: Fix -x case when multiple flavors
+  to include are specified. Do not build KMP packages without
+  modversions or kernel(...) requirements.
+* Tue Mar 21 2006 - mls@suse.de
+- fix PGP signature checking when there is no RSA sig
+* Mon Mar 20 2006 - agruen@suse.de
+- Switch from modalias(foo) to modalias(kernel-flavor:foo)
+  supplements to give the resolver enough information to do "the
+  right thing".
+* Sun Mar 19 2006 - agruen@suse.de
+- Allow paths relative to %%_sourcedir in
+  %%suse_kernel_module_package.
+* Sat Mar 18 2006 - agruen@suse.de
+- Clarify rpm --help texts.
+* Fri Mar 17 2006 - mls@suse.de
+- fix cond queries that return no result
+* Fri Mar 17 2006 - mls@suse.de
+- work around broken patchrpm database entries [#156347]
+- add query support for suggests/recommends/enhances/supplements
+  [#155301]
+* Sun Mar 12 2006 - agruen@suse.de
+- find-supplements.ksyms: Don't generate too many Supplements;
+  anything that does not have a colon in it (like pci:...) is not
+  a modalias.
+* Sat Mar 11 2006 - ro@suse.de
+- find-debuginfo: only "strip-debug" for static libs,
+  do not use "strip-all" there
+* Fri Mar 10 2006 - agruen@suse.de
+- Make KMP sub-packages require kernel-$flavor instead of kernel
+  (mostly cosmetic).
+* Fri Mar 10 2006 - dmueller@suse.de
+- patch for improved debuginfo extraction (#150940)
+* Thu Mar 09 2006 - agruen@suse.de
+- find-scripts.diff: Add support for %%__find_enhances and
+  %%__find_supplements scripts (from mls@suse.de).
+- modalias.diff: Add modalias(...) Supplements tags that define
+  the hardware that kernel module packages support (e.g.,
+  modalias(pci:vBADOFBADdDEADBEEFsv*sd*bc*sc*i*)).
+* Mon Mar 06 2006 - agruen@suse.de
+- %%suse_kernel_module_package: Add a -p option for defining
+  additional preamble lines in sub-packages, subject to the same
+  macro expansion as the sub-package (-s) itself.
+* Wed Mar 01 2006 - schwab@suse.de
+- Fix logic error in find_debuginfo.sh [#144629].
+* Fri Feb 24 2006 - mls@suse.de
+- fix cursor leak in rpmdbGrowIterator [#151953]
+- print error message if scriptlet fork fails [#152779]
+* Sun Feb 19 2006 - agruen@suse.de
+- scripts/find-requires.ksyms: Fix bug in last find-requires.ksyms
+  fix.
+* Sat Feb 18 2006 - ro@suse.de
+- allow debuginfo packages also for noarch (for mono,java)
+* Fri Feb 17 2006 - mls@suse.de
+- put mono debug files in debuginfo packages [#151353]
+- fix off-by-one error in glob code
+- define _libexecdir to be _libdir [#136762]
+- rename improves to supplements
+* Thu Feb 16 2006 - agruen@suse.de
+- scripts/find-requires.ksyms: Tolerate kernel modules that have
+  more than one vermagic info entry (it happened!).
+* Mon Feb 13 2006 - agruen@suse.de
+- rpm-suse-kernel-module-subpackage:
+  + Search for the spec file in %%_sourcedir and %%_specdir (150119).
+  + If no KMP subpackage exists, use the Group and Summary tags
+  of the main package.
+* Fri Feb 10 2006 - mls@suse.de
+- add back missing chunk of srcdefattr patch [#48870]
+- add rpmvercmp patch from Peter Bowan
+- add -m32 to ix86 optflags to make --target work [#141206]
+* Sat Feb 04 2006 - agruen@suse.de
+- rpm-suse-kernel-module-subpackage: Allow to specify a list of
+  kernel flavors to build (-x) instead of specifying an exclude
+  list.
+* Fri Feb 03 2006 - mls@suse.de
+- use RPMSENSE_STRONG instead of RPMSENSE_WEAK
+- drop support for EssentialFor
+* Wed Feb 01 2006 - agruen@suse.de
+- rpm-suse-kernel-module-subpackage: Allow to specify a custom
+  %%files list for the kernel-specific sub-packages. Use the
+  Summary and Group tags, and the %%description section from the
+  KMP sub-package for the kernel-specific sub-packages.
+* Tue Jan 31 2006 - agruen@suse.de
+- rpm-suse-kernel-module-subpackage: Add version to additional
+  Provides tag. We may need this for future Obsoletes.
+* Fri Jan 27 2006 - mls@suse.de
+- added support for EssentialFor and Supports
+- enabled support for lua scripts
+* Fri Jan 27 2006 - agruen@suse.de
+- rpm-suse-kernel-module-subpackage: Add "Requires: kernel". Add
+  -r option to override the release number. Clean up.
+* Thu Jan 26 2006 - agruen@suse.de
+- rpm-suse_macros: Add -v option to %%suse_kernel_module_package
+  to allow specifying a kernel module version different from the
+  main package version. Restore the %%version, %%summary, and
+  %%group macros of the main package at the end of
+  %%suse_kernel_module_package.
+* Wed Jan 25 2006 - mls@suse.de
+- converted neededforbuild to BuildRequires
+* Tue Jan 17 2006 - agruen@suse.de
+- rpm-suse_macros: Add %%suse_kernel_module_package macro for
+  building kernel module packages.
+* Wed Jan 11 2006 - agruen@suse.de
+- rpm-4.4.2.diff: find-requires.ksyms must not print "Requires:".
+  Remove trailing whitespace.
+* Wed Dec 21 2005 - mls@suse.de
+- make transaction lock --root aware
+* Mon Dec 19 2005 - mls@suse.de
+- don't ignore getcwd return value in build.c
+* Mon Dec 19 2005 - mls@suse.de
+- fix find-lang.sh script
+* Sun Dec 18 2005 - mls@suse.de
+- fix find-debuginfo script
+* Sun Dec 18 2005 - mls@suse.de
+- don't assume root:root defattr
+* Sun Dec 18 2005 - agruen@suse.de
+- fix wrong buildsubdir macro name
+* Thu Dec 15 2005 - mls@suse.de
+- update to version 4.4.2
+  for now without lua, rpc, dav support
+* Wed Dec 07 2005 - agruen@suse.de
+- Add find-{requires,provides}.ksyms and invoke them from the
+  global find-{requires,provides} scripts. The scripts add
+  "kernel(symbol set) = version" and "kver(symbol) = version"
+  provides and requires to kernel module packages.
+- Add symset-table script used to generate a table of known
+  kernel symbol sets from /boot/symsets-*.tar.gz.
+- Add rpmsort script to sort a file into RPM version order. Used
+  in kernel scripts to sort kernel packages by version.
+* Tue Nov 22 2005 - ro@suse.de
+- change NO_BRP_STRIP_DEBUG to NO_DEBUGINFO_STRIP_DEBUG
+- fix patchrpm code not to modify immutable header parts
+* Fri Nov 18 2005 - ro@suse.de
+- honor NO_BRP_STRIP_DEBUG in find-debuginfo.sh
+* Sat Oct 29 2005 - mls@suse.de
+- use lstat instead of stat when globbing (#129434)
+- add RPMTAG_PKGID and RPMTAG_HDRID
+- make python always return requires/provides/obsoletes/conflicts
+  as array
+* Mon Oct 24 2005 - ro@suse.de
+- find-requires/find-provides: fix MONO_PATH
+* Thu Oct 20 2005 - ro@suse.de
+- find-requires/find-provides: update mono hooks
+* Wed Sep 07 2005 - matz@suse.de
+- Make debuginfo packages require exact version of base rpm.
+* Fri Sep 02 2005 - mls@suse.de
+- backport CLOEXEC workaround [#93727]
+- fix typo in man page [#114909]
+* Thu Aug 25 2005 - mls@suse.de
+- don't catch ignored signals [#74560]
+- unblock all signals when running scripts
+* Mon Aug 22 2005 - mls@suse.de
+- do not try to mmap zero sized files in domd5()
+* Fri Aug 12 2005 - mls@suse.de
+- change -mcpu to -mtune and add -D_FORTIFY_SOURCE=2 [#104241]
+* Wed Aug 03 2005 - mls@suse.de
+- ignore /media when creating fdilesystem list
+- allow --ignoresize when erasing packages
+* Fri Jul 01 2005 - schwab@suse.de
+- Fix ppc assembly syntax.
+* Wed Jun 08 2005 - matz@suse.de
+- add STRIP_KEEP_SYMTAB to find-debuginfo.sh
+* Sat May 21 2005 - schwab@suse.de
+- find-debuginfo.sh: make writable before extracting debug info, simplify.
+* Thu May 19 2005 - schwab@suse.de
+- Replace absolute symlinks when copying sources for debuginfo package.
+* Wed Apr 06 2005 - schwab@suse.de
+- Cleanup neededforbuild.
+* Wed Apr 06 2005 - meissner@suse.de
+- Added gettext-devel
+* Tue Apr 05 2005 - bg@suse.de
+- add noarch to valid hppa architectures
+* Thu Mar 24 2005 - uli@suse.de
+- better ARM support
+* Sun Feb 20 2005 - od@suse.de
+- fix debugedit for relocatable files (kernel modules) on ppc
+* Fri Feb 18 2005 - mls@suse.de
+- update debugedit program
+* Fri Feb 18 2005 - od@suse.de
+- make find-debuginfo.sh handle kernel modules
+* Wed Feb 16 2005 - mls@suse.de
+- fix --rebuilddb with --root [#50993]
+* Fri Feb 11 2005 - mls@suse.de
+- update to elfutils-0.97 [#47746], [#48471]
+- update to db-4.2.52 [#44193]
+- pack brp-symlink
+* Fri Feb 11 2005 - ro@suse.de
+- remove -fsigned-char from rpmrc (#49877)
+* Sat Feb 05 2005 - schwab@suse.de
+- Fix building with gcc 4.
+* Fri Feb 04 2005 - mls@suse.de
+- make python-2.4 work [#49990]
+- fix --setguids / --setperms [#47122]
+- makd gpgv4 signatures work [#42282]
+- add brp-symlink [#49596]
+* Fri Feb 04 2005 - ro@suse.de
+- fix one regexp in find_lang change
+* Thu Feb 03 2005 - ro@suse.de
+- hppa may install noarch
+* Wed Feb 02 2005 - schwab@suse.de
+- Remove compatibility provides on ia64.
+* Mon Jan 31 2005 - adrian@suse.de
+- handle also ??_?? languages in %%find_lang.
+* Fri Jan 28 2005 - coolo@suse.de
+- let the debuginfo packages work again
+* Fri Jan 21 2005 - skh@suse.de
+- changed jpackage macros
+* Fri Jan 21 2005 - coolo@suse.de
+- use binutils for debuginfo packages
+* Fri Jan 14 2005 - coolo@suse.de
+- name the debug package -debuginfo to sync with redhat/fedora
+* Mon Dec 13 2004 - sndirsch@suse.de
+- moved chinese popt mo file to correct directory (Bug #47262)
+* Fri Dec 03 2004 - mls@suse.de
+- fix update of rpm with same name/version/release but different
+  architecture
+* Thu Nov 25 2004 - ro@suse.de
+- fix build with python-2.4
+* Tue Nov 16 2004 - ro@suse.de
+- update permissions handling
+* Tue Oct 19 2004 - ro@suse.de
+- locale rename: no -> nb
+* Mon Sep 27 2004 - mls@suse.de
+- move TE type initializaten before the addTE call to make
+  relocations work [#34871, #43557]
+* Fri Sep 24 2004 - mls@suse.de
+- check payloadformat for "cpio", print extra deltarpm message
+- don't skip directories in the fingerprint check when deleting rpms
+* Thu Sep 23 2004 - mls@suse.de
+- allow database read access in scripts
+* Wed Sep 22 2004 - mls@suse.de
+- only retry locking if errno is EAGAIN [#45704]
+* Fri Sep 17 2004 - mls@suse.de
+- fix isSpecfile fix
+- reset SIGILL handler in RPMClass()
+* Mon Sep 13 2004 - mls@suse.de
+- glob.h: add workaround for invalid prototypes
+* Thu Sep 09 2004 - mls@suse.de
+- fix jpackage macros
+- change binary payload compression to w9.bzdio
+- fix localization of query results [#38474]
+- delete unmaintained cpanflute scripts [#39988]
+- patch isSpecfile to be less restrictive [#40328]
+- wait up to 3 minutes for the package lock [#40961]
+* Thu Sep 02 2004 - mls@suse.de
+- add jpackage macros
+* Fri Aug 06 2004 - mls@suse.de
+- make it build with new automake
+* Wed Jun 23 2004 - mls@suse.de
+- add support for mono provides/requires autodetection.
+  limited to *.exe and *.dll for now.
+* Sun May 23 2004 - schwab@suse.de
+- Don't record timestamp in compressed manpages.
+* Thu Apr 22 2004 - mls@suse.de
+- add DISABLE_RESTART_ON_UPDATE and DISABLE_STOP_ON_REMOVAL
+  sysconfig variables
+* Mon Apr 19 2004 - mls@suse.de
+- go back to libpopt.so.0.0.0
+- also create and pack libpopt.so.1.0.0 for compatibility
+* Wed Mar 31 2004 - uli@suse.de
+- added detection of i686-capable Transmeta Crusoe that reports
+  as being i586 (bug #37713). This patch is necessary because YaST
+  (rightfully) tries to install an i686 glibc on machines with this CPU, but
+  RPM refuses to do so -> BOOM. This patch is safe because it only uses
+  cpuid functions already used earlier in RPMClass() and does not do
+  anything if the CPU identification string does not end in "ineTMx86".
+* Wed Mar 31 2004 - ke@suse.de
+- remove broken german translation file [#30665],
+* Fri Mar 26 2004 - mls@suse.de
+- use the system's zlib, fixes python segfault [#36810]
+* Sun Mar 21 2004 - aj@suse.de
+- Work around lvalue used as cast problems.
+* Thu Mar 18 2004 - mls@suse.de
+- convert query results to locale encoding [#28347]
+- don't check provides if filename doesn't contain '/' [#32078]
+- allow interrups if database is RDONLY [#33026]
+- added _srcdefattr macro to set defattr for srpms [#33870]
+- drop sbits from old files if installing new version [#35376]
+- remove bogus entries from .la files [#36346]
+- add _docdir_fmt macro to make it possible to create rpms
+  for other distributions
+* Sat Mar 06 2004 - ro@suse.de
+- readd lost patch hunk from last change:
+  set docdir default back to .../packages/%%name (w/o version)
+* Fri Mar 05 2004 - mls@suse.de
+- backport some fixes from rpm-4.2
+- match py_libdir macro definition with python
+- clean and re-create buildroot in a safe way
+* Sat Feb 28 2004 - schwab@suse.de
+- Remove anchor from pattern in find-requires.
+* Fri Feb 27 2004 - schwab@suse.de
+- Silence error from find.
+* Fri Feb 27 2004 - mls@suse.de
+- fix definition of _initrddir
+- set sysconfdir to /etc
+- set localstatedir to /var
+* Thu Feb 26 2004 - schwab@suse.de
+- Handle more cases of filenames with spaces.
+* Thu Feb 26 2004 - ro@suse.de
+- some fixes in linux.prov to survive filenames with spaces
+* Thu Feb 12 2004 - mls@suse.de
+- fixed linux.req soname generation (#21664)
+- disable nptl for now
+* Mon Feb 09 2004 - kukuk@suse.de
+- linux.req: Fix finding of interpreters
+* Sat Feb 07 2004 - olh@suse.de
+- disable redhat's uname hack for ppc
+* Thu Feb 05 2004 - ro@suse.de
+- linux.prov: don't block soname in versioned-requires
+- linux.req: disable perl-requires, it's broken
+* Tue Feb 03 2004 - schwab@suse.de
+- Readd ia64 64bit provides hack.
+* Tue Feb 03 2004 - kukuk@suse.de
+- Remove all special find-requires scripts and use the default one
+* Sat Jan 17 2004 - schwab@suse.de
+- Filter out linux-gate.so.
+* Thu Jan 15 2004 - schwab@suse.de
+- For ia64 require 64bit symbols and provide them both with and without
+  64bit.
+* Tue Jan 13 2004 - adrian@suse.de
+- call ldconfig
+- add missing Requires in -devel packages
+- add %%defattr
+* Fri Jan 09 2004 - kukuk@suse.de
+- Coompile with "-fno-strict-aliasing"
+* Fri Nov 14 2003 - bg@suse.de
+- added changes for hppa
+- fix build for hppa
+* Fri Oct 10 2003 - sf@suse.de
+- added alias 'amd64' for 'x86_64'
+* Fri Oct 10 2003 - ro@suse.de
+- ignore "linux-gate.so" in ldd output (on 2.6 systems)
+* Wed Oct 08 2003 - schwab@suse.de
+- Add popt to prerequires for rpm.
+* Tue Sep 23 2003 - mls@suse.de
+- really disable rpmconfigcheck
+* Sat Sep 20 2003 - kukuk@suse.de
+- Don't enable rpmconfigcheck per default
+* Fri Sep 19 2003 - schwab@suse.de
+- Fix descriptor leak [#31450].
+* Mon Sep 15 2003 - mls@suse.de
+- remove redhat options from popt (#30302)
+- check name and arch to find out if two packages are the same
+* Fri Sep 05 2003 - mls@suse.de
+- fix rpmalMakeIndex and off by one error in rpmalAllSatisfiesDepend
+* Fri Sep 05 2003 - mls@suse.de
+- use mkstemp in build.c
+- fix --noghost query option
+* Fri Sep 05 2003 - mls@suse.de
+- escape '+' in MIRE_DEFAULT iterator
+- use MIRE_STRCMP when going for an exact match
+- update rpmrc
+* Wed Sep 03 2003 - mls@suse.de
+- speed up installation by making nofsync local and setting it
+  for all databases but Packages
+- fix database locking issue (#29407)
+- don't open temporary databases in chroot case (may fix #29584)
+* Mon Sep 01 2003 - schwab@suse.de
+- Fix assembler routines to not clobber predicate registers.
+* Fri Aug 29 2003 - mcihar@suse.cz
+- rpm-python require same python version as it was built with
+* Fri Aug 22 2003 - mls@suse.de
+- make usage of / in post section consistent
+- don't force the activation of rpmconfigcheck
+* Tue Aug 05 2003 - coolo@suse.de
+- give libpopt a soname > 0 as it's not compatible to the libpopt
+  on SL 8.2 (now that we link shared, it does matter)
+* Fri Aug 01 2003 - mls@suse.de
+- fix segfault in rpmdbFindByFile
+* Thu Jul 31 2003 - mls@suse.de
+- added directory tagging to speed up installation/updates
+* Tue Jul 29 2003 - mls@suse.de
+- add support for patch-rpms
+- fix --root option (#28266)
+- fix erase exit status (#28267)
+- fix database open ignoring locks the second time
+* Fri Jul 11 2003 - mls@suse.de
+- add perl_vendorlib and perl_vendorarch
+- integrate patches
+* Tue Jul 01 2003 - coolo@suse.de
+- update find-debuginfo.sh to fix permissions of copied files
+- give warning on already stripped files
+* Fri Jun 27 2003 - schwab@suse.de
+- Fix configure scripts.
+- Don't link rpm statically.
+* Fri Jun 20 2003 - kukuk@suse.de
+- use -fPIC, not -fpic to compile elfutils
+* Thu Jun 19 2003 - ro@suse.de
+- fix build (gettext and definition of mkinstalldirs)
+* Mon Jun 16 2003 - kukuk@suse.de
+- Don't call find on /usr/share/locale if directory does not exist.
+* Sat Jun 14 2003 - coolo@suse.de
+- avoid stale links in /usr/src/debug
+* Fri Jun 13 2003 - mls@suse.de
+- make PreReqs work again if --nodeps is used
+- fix rpmconfigcheck
+- apply find-debuginfo.sh patch from coolo
+* Thu Jun 12 2003 - kukuk@suse.de
+- Fix find-lang.sh (special /usr/share/locale handling)
+* Thu Jun 12 2003 - coolo@suse.de
+- enhancing find-lang.sh to take KDE/GNOME into account and label
+  them correctly
+* Wed Jun 11 2003 - kukuk@suse.de
+- Remove translated manual pages
+* Fri Jun 06 2003 - mls@suse.de
+- fix vendor for s390/s390x
+* Thu Jun 05 2003 - mls@suse.de
+- no longer build rpm static
+- add --fileclass and --filecolor macros to rpmpopt
+* Thu Jun 05 2003 - ro@suse.de
+- remove dangling rpmpopt symlink
+* Mon Jun 02 2003 - mls@suse.de
+- convertdb1: call providePackageNVR to retrofit "Provide: name = EVR"
+  into converted headers
+* Fri May 23 2003 - ro@suse.de
+- fixed brp-compress to convert bzip2 man pages into gziped ones
+  (even if hardlinked). (#21121) (from ma)
+* Fri May 16 2003 - mls@suse.de
+- fixed x86_64 build
+* Thu May 15 2003 - mls@suse.de
+- update to rpm-4.1.1
+* Tue May 13 2003 - mls@suse.de
+- don't obsolete own package when refreshing
+- fix parsing of nested conditionals (again)
+* Tue May 13 2003 - mls@suse.de
+- created rpm-python subpackage
+- fix check-files/fixowner, second try
+* Mon May 12 2003 - mls@suse.de
+- fix check-files to work without buildroot
+* Mon May 12 2003 - mls@suse.de
+- re-activate fixowner/group/perms
+- allow /usr/share/info/dir in check-files
+- fix 'head -n 1' in /usr/lib/rpm/find-requires
+* Thu May 08 2003 - mls@suse.de
+- update to rpm-4.1
+* Mon Apr 07 2003 - ro@suse.de
+- fix for new head(1) syntax
+* Mon Mar 10 2003 - mls@suse.de
+- fix exit status if file to be installed is not a rpm package
+* Fri Feb 28 2003 - mls@suse.de
+- use mkstemp instead of tempnam (#24478)
+* Thu Feb 20 2003 - ma@suse.de
+- Work arround rpm2cpio wrongly reporting an error, if the rpm file
+  is read from stdin. (#16800)
+* Mon Feb 17 2003 - mls@suse.de
+- made rpmconfigcheck add new files to /var/log/update-messages
+* Fri Feb 14 2003 - schwab@suse.de
+- Save errno inside Fclose, its return value is never checked anyway.
+* Fri Feb 14 2003 - pthomas@suse.de
+- find-provides for elf64 systems used to omit symbol versions
+  if they contained the soname, fixed by find_provides_soname.diff.
+* Wed Feb 12 2003 - mls@suse.de
+- removed runlevels '1' and 'S' from rpmconfigcheck
+* Fri Feb 07 2003 - mls@suse.de
+- speed up rpmconfigcheck by just checking the old conflicts if
+  no rpm was installed
+- rerun gpg if gpg fails with "option file created"
+- set LC_ALL to C before calling gpg
+* Tue Jan 28 2003 - kukuk@suse.de
+- Remove wrong Provides "rpm-devel" and "rpm-python" from Provides
+* Sun Jan 26 2003 - olh@suse.de
+- the official arch_canon value for ppc64 is 16, not 5
+* Thu Jan 16 2003 - ma@suse.de
+- update subpackage popt to 1.6.4
+* Thu Dec 19 2002 - schwab@suse.de
+- Update autogen patch.
+* Mon Nov 18 2002 - stepan@suse.de
+- add m68k as chanonical architecture to configure.in
+* Mon Nov 18 2002 - ro@suse.de
+- adapt to latest autoconf
+- use host instead of host_alias for %%host_alias since the latter
+  is not set
+* Mon Nov 11 2002 - ma@suse.de
+- let linux.prov list vrsion definitions in libraries/plugins without
+  soname. (find_provides.diff)  (#21664)
+* Fri Oct 25 2002 - sf@suse.de
+- corrected %%_libdir-macro (rpm-3.0.6-platform.diff)
+* Mon Oct 21 2002 - schwab@suse.de
+- Fix read beyond EOS.
+* Mon Oct 07 2002 - ro@suse.de
+- fixed brp-compress script for current fileutils
+  (add LC_TIME=POSIX, this bug lead to broken tcl man pages)
+* Wed Oct 02 2002 - mls@suse.de
+- update unpatched files in patchrpms even if --nodeps is used
+  [Bug #20418]
+* Sat Aug 24 2002 - ro@suse.de
+- fix popt-devel requires
+* Sun Aug 18 2002 - olh@suse.de
+- adding -mminimal-toc to each package is a boring job
+  use it per default on ppc64
+* Thu Aug 15 2002 - kukuk@suse.de
+- Add insserv PreRequires [Bug #17969]
+* Mon Aug 12 2002 - bk@suse.de
+- rpmrc/s390{,x}: change dummy -fomit-frame-pointer to -fsigned-char
+* Sat Aug 10 2002 - schwab@suse.de
+- Make ia64 arch_compat to i686.
+* Sat Aug 10 2002 - kukuk@suse.de
+- Fix version number of popt-devel
+* Fri Aug 09 2002 - kukuk@suse.de
+- Fix typo
+* Fri Aug 09 2002 - kukuk@suse.de
+- Fix requires of rpm-devel and popt-devel
+* Fri Aug 09 2002 - ro@suse.de
+- adapt automake version in configure
+* Fri Jul 26 2002 - mls@suse.de
+- Added perl/python macros from conectiva
+* Fri Jul 26 2002 - kukuk@suse.de
+- Create rpm-devel and popt-devel subpackages [Bug #17225]
+* Fri Jul 26 2002 - kukuk@suse.de
+- Change Requires for suse-build-key to build-key
+* Thu Jul 25 2002 - mls@suse.de
+- renamed rpmconfigscan to rpmconfigcheck
+- fixed elf64-linux.req to ignore scripts without #!
+- disabled tag check in rpmdbFindByFile, too dangerous
+* Thu Jul 18 2002 - mls@suse.de
+- fixed double free of header if the postinstall script failed
+- return exit status when doing --initdb
+* Thu Jul 11 2002 - mls@suse.de
+- use "officially reserved" value of RPMFILE_UNPATCHED
+- added rpmconfigcheck script to search for unresolved config
+  file changes
+* Mon Jul 08 2002 - mls@suse.de
+- new version of patchrpm diff: handle patch "freshen" operations
+  gracefully
+- documented patchrpm options
+- taggedindex diff: add directory tags to the fileindex to speed
+  up file conflict detection
+* Tue Jul 02 2002 - ke@suse.de
+- Update German program messages using translations by Christian
+  Kirsch.  Add as Source7; drop Patch19 [# 8442].
+* Fri Jun 21 2002 - ro@suse.de
+- automake is 1.6.2
+* Wed Jun 12 2002 - bk@suse.de
+- ppc: fix arch for elf64.prov and elf64.req to powerpc(from olh)
+- s390x: fix brp-lib64-linux to ignore */lib/ld64.so.1 in lib check
+- remove obsolete x64_64 scripts, replaced by generic elf64 scripts
+- rpm-3.0.6.pkg_build.diff: remove obsolete diff for sparc-linux.req
+* Fri May 31 2002 - olh@suse.de
+- remove ppc64 hack
+* Mon May 27 2002 - bk@suse.de
+- all lib64 platforms use the same brp, req and prov scripts now.
+- merge mips diff to not include private flags into linux.req.suse
+- merge last rpm-3.0.6-s390x-lib64.diff into rpm-3.0.6.config.diff
+- add (64bit) fix for empty soname in elf64.prov from sles7-s390x
+* Fri May 17 2002 - olh@suse.de
+- add more ppc64 changes, add brp-ppc64-linux
+- apply mips, x86_64 and s390x patches on all archs
+- rpm-3.0.6.lib64.diff: merged all lib64 stuff and add SUBSTS macros
+  for uname->target_cpu handling on ppc64, s390 and x86_64
+* Wed May 15 2002 - ro@suse.de
+- update brp-x86_64-linux
+* Wed May 15 2002 - mfabian@suse.de
+- fix ja.po, it contained some junk which caused mojibake on
+  output, especially in ja_JP.UTF-8 locale. Remove a lot
+  of fuzzies which had correct translations.
+* Mon May 13 2002 - olh@suse.de
+- do not translate ppc64 to ppc anymore
+* Fri Apr 26 2002 - sf@suse.de
+- fixed brp-x86_64-linux script
+- added *.a-files to brp-script
+- look _only_ for files or links with names *.a, *.so*
+- added /opt/gnome/lib and /opt/kde/lib
+* Wed Apr 24 2002 - sf@suse.de
+- added script to show requires and provides with 64 bit
+  (like s390 and sparc64)
+- rpm will now stop (on x86_64) if a 64-bit binary
+  (or a link to one) is found in
+  $RPM_BUILD_ROOT{, /usr, /usr/X11R6}/lib
+* Wed Apr 24 2002 - ke@suse.de
+- patch19: Fix 1 german message (3 strings) in de.po [# 8442].
+* Mon Apr 22 2002 - kukuk@suse.de
+- Remove broken s390x try to fix lib64 library location
+* Thu Apr 18 2002 - kukuk@suse.de
+- x86_64 can also build noarch packages
+* Wed Apr 17 2002 - sf@suse.de
+- install i386-rpms on x86_64
+- patch65 only, if not on s390x (doesn't apply)
+- patch  to build with new automake (ro)
+* Fri Apr 12 2002 - kukuk@suse.de
+- Don't apply s390x 64bit hacks on sparc64, sparc64 has a working
+  libtool
+* Thu Apr 11 2002 - mls@suse.de
+- fixed bug in patchrpm case that prevented the reuse of
+  old timestamps in unpatched files in some cases
+- fixed patchrpm dependency failure message
+* Wed Apr 10 2002 - sf@suse.de
+- added x86_64 architecture
+- added --libdir to autogen.sh to copy the libs depending on
+  architecture (lib / lib64)
+* Fri Mar 29 2002 - schwab@suse.de
+- Fix for new autotools.
+* Fri Mar 22 2002 - mls@suse.de
+- added rpmqpack program to speed up susehelp
+* Wed Mar 20 2002 - ro@suse.de
+- modified config.diff for currently used optflags (#15123)
+* Mon Mar 18 2002 - schwab@suse.de
+- Don't lose errno.
+* Mon Mar 11 2002 - mls@suse.de
+- use gpg --keyring when checking keys with uid != 0
+- use hardcoded keyring path if _gpg_path is not set and uid == 0
+- removed _gpg_path from suse_macros
+* Sat Mar 09 2002 - bk@suse.de
+- brp-s390x-linux: merge lib64 fix: patch .la files when moving
+* Fri Mar 08 2002 - ma@suse.de
+- introduced x86_64 architecture in rpmrc (#14110)
+* Fri Mar 08 2002 - mls@suse.de
+- backported rpm4 fix to get mtime right on s390x
+* Mon Feb 25 2002 - mls@suse.de
+- added patchrpm support
+- changed rpm -qi to include the distribution
+* Thu Feb 21 2002 - schwab@suse.de
+- Fix to build with new gettext.
+* Mon Feb 18 2002 - ro@suse.de
+- added requires for suse-build-key
+* Mon Feb 11 2002 - ro@suse.de
+- tar option for bz2 is now "j" (re-added)
+* Mon Feb 11 2002 - ma@suse.de
+- unk_ugname_cached.diff: Upon building a package, unpacking sources
+  by calling tar from the spec file, may lead to files with unknown
+  user/group names. If those files are to be included in the final
+  package, it's not appropriate to simply map unknown user/group names
+  to the builders user/group (usg. root). This behaviour has been disabled
+  and building the package will fail. There are ample means to propperly
+  define file attributes. If a spec file does not use them, although it
+  should, it's considered broken.
+  Unknown user/group names lead to NULL entries in rpms user/group name cache,
+  which may cause a segmentation fault on cache lookup. This has been fixed.
+* Sat Jan 26 2002 - ro@suse.de
+- apply configure-diff also on s390x
+* Mon Jan 21 2002 - bk@suse.de
+- use RPM_OPT_FLAGS for compilation
+- add lib64 support for s390x
+- update srcdir-supplied rpm-suse_macros file to newest version
+  adds: %%_lib handling for ltconfig/-main and macro suse_update_libdir
+- sparc64 and s390x: call scripts/brp-%%_arch-linux at the end of install
+* Wed Jan 16 2002 - schwab@suse.de
+- Fix parsing of nested conditionals.
+* Wed Jan 02 2002 - schwab@suse.de
+- Remove wrong assertion.
+* Tue Dec 18 2001 - adrian@suse.de
+- fix find-requires for objdump with private flags finaly
+* Mon Dec 17 2001 - adrian@suse.de
+- apply mips patch only on mips architecture
+- fix mips patch
+* Sun Dec 16 2001 - adrian@suse.de
+- fix find-requires script for mips
+  ( do not include private flags from objdump to dependencies )
+* Wed Dec 05 2001 - schwab@suse.de
+- Use optind = 0 to reset getopt in glibc.
+* Mon Dec 03 2001 - schwab@suse.de
+- Fix another endian bug due to pointer mismatch.
+* Thu Nov 22 2001 - mls@suse.de
+- reset getopt in grabArgs() macro expansion
+* Thu Nov 15 2001 - ma@suse.de
+- Fixed: copyFile() in rpmchecksig didn't recognize 'No space left on
+  device' condition, when creating tempfiles. rpm reported that the
+  signature was not ok instead. (#12294)
+* Thu Nov 08 2001 - adrian@suse.de
+- name mips big endian as "mips" instead of "mipseb"
+  this is compatible to all GNU tools and to the SGI distribution
+* Sat Nov 03 2001 - ro@suse.de
+- accept automake 1.5 (still needs depcomp added)
+* Tue Sep 04 2001 - schwab@suse.de
+- Accept libtool 1.4.1.
+* Fri Aug 17 2001 - ro@suse.de
+- Exclude /usr/share/doc from Requires
+* Sat Jul 21 2001 - schwab@suse.de
+- Adapt for autoconf 2.52.
+- Allow libtool version suffix.
+* Tue Jul 03 2001 - kukuk@suse.de
+- Fix typo in last change
+* Mon Jul 02 2001 - ma@suse.de
+- Change -m486 to -mcpu=i486 in optflags
+* Wed Jun 20 2001 - ma@suse.de
+- Don't define popt version via macro. Abuild does not like it (#8224).
+- Patches for rpmrc.in (ia64.dif,ppc64.rpmrc.diff) incorporated
+  into config.diff.
+- Patches for brp scripts (strip_no_lib.dif) and sparc64-linux.{req,prov}
+  scripts (sparc64.dif) incorporated into pkg_build.diff.
+* Wed Jun 13 2001 - bk@suse.de
+- rpm-3.0.6.config.diff: add s390x support
+* Mon Jun 11 2001 - olh@suse.de
+- add ppc64 diff
+* Fri Jun 08 2001 - schwab@suse.de
+- Fix endian bugs.
+* Mon Jun 04 2001 - kukuk@suse.de
+- Fix requires/provides scripts for sparc64
+* Fri Jun 01 2001 - schwab@suse.de
+- Fix for new configure tools.
+* Wed May 09 2001 - mfabian@suse.de
+- bzip2 sources
+* Thu May 03 2001 - ma@suse.de
+- provides script shouldn't block soname as version
+* Tue May 01 2001 - kukuk@suse.de
+- modify spec file for sparc64
+* Thu Apr 12 2001 - ro@suse.de
+- gettextize to compile with new gettext
+* Fri Apr 06 2001 - kukuk@suse.de
+- Make some changes to the changes entries so rpm likes it again
+* Thu Mar 29 2001 - ro@suse.de
+- provides/requires script: add "-n200" to xargs arguments
+* Mon Feb 26 2001 - ro@suse.de
+- no optimization for alpha for now ...
+* Wed Feb 14 2001 - ma@suse.de
+- Fix rpmio (unknown type off64_t) with glibc >= 2.2
+- Fix configure.in to recognize SuSE as platform specific vendor
+* Tue Feb 06 2001 - ro@suse.de
+- popt: include float.h to make it compile
+* Wed Jan 17 2001 - schwab@suse.de
+- Mark ia64 as compatible to i386.
+* Mon Jan 08 2001 - ma@suse.de
+- fixed previous fix (error occuring outside %%doc was lost)
+* Sat Jan 06 2001 - ma@suse.de
+- fixed rpm does not abort build if %%doc file is missing (#503)
+* Mon Nov 27 2000 - ma@suse.de
+- wrongly free() after alloca() fixed
+* Thu Nov 23 2000 - bk@suse.de
+- removed old s390 hack(not needed-breaks with new rpm and glibc)
+* Tue Nov 14 2000 - ro@suse.de
+- added patch not to strip all shared libs and
+  files with "/lib/modules/" in path
+* Fri Nov 03 2000 - ma@suse.de
+- let 'rpm -e --root ..' remove files/dirs chroot.
+* Wed Oct 25 2000 - ma@suse.de
+- update subpackage popt to 1.6
+* Tue Oct 17 2000 - ma@suse.de
+- fixed missing libpopt.so in popt subpackage
+* Fri Oct 06 2000 - ma@suse.de
+- update to 3.0.6
+* Fri Sep 29 2000 - schwab@suse.de
+- Fix last change to stay compatible with glibc < 2.2.
+* Fri Sep 29 2000 - schwab@suse.de
+- Fix libio cookie function pointer clash in rpmio.
+* Fri Jul 28 2000 - ma@suse.de
+- update to 3.0.5 (handles RPM v4 packages)
+- ia64/s309 patches incorporated
+* Wed Jul 26 2000 - ma@suse.de
+- ignore chown() errors eg. if files are installed on a DOS partition
+* Fri Jul 14 2000 - ma@suse.de
+- fixed: ignore dependencies below /usr/share/doc.
+- rpmrc: synced s390 entries with those in rpm-4.0.
+* Mon Jun 26 2000 - bk@suse.de
+- build static on s390 too.
+* Fri May 26 2000 - schwab@suse.de
+- For for new libbz2 API.
+* Thu May 18 2000 - kasal@suse.de
+- hope now rpm-3.0.4-macro-grabArgs.patch works
+* Wed May 17 2000 - kasal@suse.cz
+- fixed a typo in rpm-3.0.4-macro-grabArgs.patch (c=='?')
+- fixed a problem when
+  ifarch someother
+  define macro sometext
+  endif
+  defined macro anyway
+* Tue May 16 2000 - kasal@suse.cz
+- fixed the bug with {?suse_update_config:%%{suse_update_config -f}}
+* Fri May 12 2000 - schwab@suse.de
+- Make ia64 compatible with noarch.
+* Wed Apr 26 2000 - ma@suse.de
+- updated 3.0.4, removed obsolete patches, builds on
+  libc5
+* Fri Apr 14 2000 - ma@suse.de
+- Update for RPM-HOWTO
+- Fix in config.diff (use Makefile.am not Makefile.in)
+* Mon Apr 10 2000 - schwab@suse.de
+- Fix config patch.
+* Thu Apr 06 2000 - bk@suse.de
+- added /lib/libpopt.so* to filelist on s390
+* Wed Apr 05 2000 - bk@suse.de
+- uses autoconf and automake now
+- added /lib/libbz2.so* and /lib/libz.so* to filelist on s390
+* Sat Apr 01 2000 - bk@suse.de
+- add s390 architecture support to rpm
+- add required %%suse_update_config for s390
+- rpm is NOT linked statically on s390 for now
+* Tue Mar 28 2000 - ma@suse.de
+- rpm.spec: avoid macro usage in 'Version:' entry
+* Thu Mar 02 2000 - schwab@suse.de
+- Fix md5 for ia64.
+* Mon Feb 28 2000 - ma@suse.de
+- remove 'libNoVersion' in find-requires
+* Wed Feb 23 2000 - schwab@suse.de
+- recognize ia64 as architecture.
+* Mon Feb 07 2000 - ma@suse.de
+- rebuilddb fix
+- set info/mandir macros to /usr/share/...
+* Wed Feb 02 2000 - ma@suse.de
+- update to 3.0.4 (popt-1.5)
+- new subpackage: popt
+* Sat Nov 13 1999 - kukuk@suse.de
+- Add sparc64 directory
+- Fix installation into RPM_BUILD_ROOT directory
+* Mon Nov 08 1999 - kukuk@suse.de
+- add directory /usr/src/packages/RPMS/sparc
+* Thu Nov 04 1999 - bs@suse.de
+- fixed bug in find-requires regarding pseudo scripts
+  starting with "#! --"
+* Thu Oct 28 1999 - bs@suse.de
+- added directories /usr/src/packages/RPMS/{ppc,noarch}
+* Wed Oct 27 1999 - ma@suse.de
+- place suse_macrofile in source/binary package
+- don't check reqires below /usr/doc/
+* Mon Sep 13 1999 - bs@suse.de
+- ran old prepare_spec on spec file to switch to new prepare_spec.
+* Thu Sep 09 1999 - bs@suse.de
+- fixed call of Check at the end of %%install section
+* Mon Jul 19 1999 - ma@suse.de
+- again rebuilddb.patch
+* Wed Jul 14 1999 - ro@suse.de
+- update to 3.0.3
+* Mon Jun 28 1999 - ro@suse.de
+- changed macros.in for libc5 : no "h" parameter for chown,chmod
+* Fri Jun 25 1999 - ro@suse.de
+- update to rpm-3.0.2
+- added librpmbuild.a to filelist
+- added patch not to generate dependency for libNoVersion
+- rebuilddb.patch removed (incorporated in source)
+* Thu Jun 17 1999 - ma@suse.de
+- fixed bug when --rebuilddb and --root where used
+  at the same time.
+* Wed May 26 1999 - ro@suse.de
+- update to 3.0.1
+* Mon Apr 26 1999 - werner@suse.de
+- Speed up find-requires for linux
+* Mon Apr 26 1999 - ro@suse.de
+- update to 3.0 (noreplace fix has been incorporated)
+* Mon Apr 12 1999 - ro@suse.de
+- update to 2.93
+* Fri Mar 19 1999 - ro@suse.de
+- update to 2.92
+* Thu Mar 18 1999 - ro@suse.de
+- respect movement of libz to usr/lib
+* Sun Feb 28 1999 - ro@suse.de
+- update to rpm-src from 99/02/25
+* Sat Feb 27 1999 - ro@suse.de
+- install both dirs RPM/i386 and RPM/alpha (since buildarch doesn't
+  seem to be defined now ?)
+* Tue Feb 23 1999 - ro@suse.de
+- adapted macros file to SuSE
+- fixed segfault when not using BuildRoot
+* Tue Feb 23 1999 - ro@suse.de
+- modified diff-style
+- use additional parameter "-h" on chown after unpacking in build
+* Mon Feb 22 1999 - ro@suse.de
+- update to 2.91
+- ported ma's fixes
+* Wed Nov 25 1998 - ma@suse.de
+- new version 2.5.5
+- fixed in 2.5.5: find-requires/provides bug
+- fixed in 2.5.5: rebuilddb
+* Wed Nov 18 1998 - ma@suse.de
+- link rpm.dyn dynamic against libc only
+* Mon Nov 16 1998 - ma@suse.de
+- shared binary (/usr/lib/rpm/rpm.dyn) added
+* Tue Nov 10 1998 - ro@suse.de
+- fixed find-requires (linux.req)
+* Mon Nov 09 1998 - ro@suse.de
+- added %%post: do rpm --initdb if triggerindex.rpm doesn't exist
+- do chown root.root for RPM-HOWTO
+* Thu Nov 05 1998 - ma@suse.de
+- new version 2.5.4
+- fix for rebuilddb
+- fix for %%config(noreplace)
+- RPM-Changes html document that describes the important changes
+  in RPM since what is documented in Maximum RPM.
+* Tue Nov 03 1998 - ro@suse.de
+- disabled glibc-patch for build in glibc-2.0
+* Sun Sep 20 1998 - ro@suse.de
+- use libdb185.a for rpm in glibc system
+* Thu Sep 03 1998 - ma@suse.de
+- glibc patches
+* Thu Feb 05 1998 - ro@suse.de
+- update to 2.4.12
+* Tue Dec 09 1997 - bs@suse.de
+- skip *.SuSE-dynamic in find-requires
+* Wed Nov 12 1997 - ma@suse.de
+- new version 2.4.10
+* Sat Nov 08 1997 - ma@suse.de
+- patch: rpmdbFindByFile() didn't work for "/". Thus "/" wasn't
+  handled correctly in querries and upon updates ("rmdir /").
+* Mon Oct 27 1997 - ma@suse.de
+- new version 2.4.8
+- spec file for autobuild provided
+    - dirs below /usr/src/packages are installed mode 1777
+- obsolete: patch to allow installing rpm v1 packages (from Aug  7 1997)
+  Seems to be fixed in 2.4.8
+- patch: always 'chdir /' before executing scripts.
+- patch: remove empty dirs when installing a symlink
+- patch: ignore errors when installing a symlink and called from YaST
+- de.po update
+* Thu Aug 07 1997 - ma@suse.de
+- duplicate '--nodeps' entry in rpm manpage deleted.
+- quick patch to allow installing rpm v1 packages.
+- workaround to skip installing a symlink (Jul 15 1997)
+  is disabeled, unless environment variable RPM_IgnoreFailedSymlinks
+  is set.
+* Tue Jul 15 1997 - ro@suse.de
+- added workaround to skip installing a symlink when
+  impossible to remove an existing directory
+* Thu Jun 26 1997 - ma@suse.de
+- introducing rpm, version 2.4.1
+- documentation (ascii,html) in usr/doc/packages/rpm
diff --git a/rpmconfigcheck b/rpmconfigcheck
index 7699148..c7a1267 100644
--- a/rpmconfigcheck
+++ b/rpmconfigcheck
@@ -11,7 +11,7 @@
 ### BEGIN INIT INFO
 # Provides: rpmconfigcheck
 # Required-Start: $remote_fs
-# Required-Stop: $null
+# Required-Stop:
 # Default-Start: 2 3 5
 # Default-Stop:
 # Description: rpm config file scan
@@ -66,11 +66,7 @@ case "$1" in
 	    rm -f $configcheckfile.old $configcheckfile.dup $configcheckfile.new
 	fi
 	;;
-    stop)
-	;;
-    status)
-	rc_failed 4
-	rc_status -v
+    stop|status)
 	;;
      *)
 	echo "Usage: $0 {start}"
diff --git a/rpmdb_get_open_flags.diff b/rpmdb_get_open_flags.diff
deleted file mode 100644
index eab0b19..0000000
--- a/rpmdb_get_open_flags.diff
+++ /dev/null
@@ -1,13 +0,0 @@
-Suppress berkeleydb error messages when doing 'rpm --verifydb'.
-
---- lib/rpmdb.c.orig	2011-05-12 14:08:07.000000000 +0000
-+++ lib/rpmdb.c	2011-05-12 14:09:06.000000000 +0000
-@@ -165,7 +165,7 @@ static dbiIndex rpmdbOpenIndex(rpmdb db,
- 						uintId, uintCmp, NULL);
- 	    }
- 	    /* If primary got created, we can safely run without fsync */
--	    if ((dbiFlags(dbi) & DBI_CREATED) || db->cfg.db_no_fsync) {
-+	    if ((!verifyonly && (dbiFlags(dbi) & DBI_CREATED)) || db->cfg.db_no_fsync) {
- 		rpmlog(RPMLOG_DEBUG, "disabling fsync on database\n");
-                 db->cfg.db_no_fsync = 1;
- 		dbSetFSync(db->db_dbenv, 0);
diff --git a/rpmpopt.diff b/rpmpopt.diff
index 0a00ea8..6f88a93 100644
--- a/rpmpopt.diff
+++ b/rpmpopt.diff
@@ -1,8 +1,10 @@
---- ./rpmpopt.in.orig	2011-05-11 14:27:32.000000000 +0000
-+++ ./rpmpopt.in	2011-05-11 15:02:34.000000000 +0000
-@@ -101,7 +101,8 @@ Relocations : %|PREFIXES?{[%{PREFIXES} ]
+Index: rpmpopt.in
+===================================================================
+--- rpmpopt.in.orig
++++ rpmpopt.in
+@@ -86,7 +86,8 @@ Signature   : %|DSAHEADER?{%{DSAHEADER:p
+ %|PACKAGER?{Packager    : %{PACKAGER}\n}|\
  %|URL?{URL         : %{URL}\n}|\
- %|BUGURL?{Bug URL     : %{BUGURL}\n}|\
  Summary     : %{SUMMARY}\n\
 -Description :\n%{DESCRIPTION}\n' \
 +Description :\n%{DESCRIPTION}\n\
@@ -10,3 +12,78 @@
  	--POPTdesc=$"list descriptive information from package(s)"
  
  rpm	alias --changelog --qf '[* %{CHANGELOGTIME:day} %{CHANGELOGNAME}\n%{CHANGELOGTEXT}\n\n]' \
+@@ -129,11 +130,11 @@ rpm	alias --fileprovide --qf '[%{FILENAM
+ rpm	alias --filerequire --qf '[%{FILENAMES}\t%{FILEREQUIRE}\n]' \
+ 	--POPTdesc=$"list file names with requires"
+ 
+-rpm alias --redhatprovides -q --define '_dbpath /usr/lib/rpmdb/%{_arch}-%{_vendor}-%{_os}/redhat' --whatprovides \
+-	--POPTdesc=$"find package name that contains a provided capability (needs rpmdb-redhat package installed)"
++rpm	alias --fileclass --qf '[%{FILENAMES}\t%{FILECLASS}\n]' \
++	--POPTdesc=$"list file names with classes"
+ 
+-rpm alias --redhatrequires -q --define '_dbpath /usr/lib/rpmdb/%{_arch}-%{_vendor}-%{_os}/redhat' --whatrequires \
+-	--POPTdesc=$"find package name that contains a required capability (needs rpmdb-redhat package installed)"
++rpm	alias --filecolor --qf '[%{FILENAMES}\t%{FILECOLORS}\n]' \
++	--POPTdesc=$"list file names with colors"
+ 
+ # colon separated i18n domains to use as PO catalogue lookaside for
+ * retrieving header group/description/summary.
+@@ -201,22 +202,22 @@ rpm	alias --timecheck	--define '_timeche
+ #rpm	exec --target		rpmb --target
+ #rpm	exec --short-circuit	rpmb --short-circuit
+ 
+-rpm	exec --initdb		rpmd --initdb
+-rpm	exec --rebuilddb	rpmd --rebuilddb
+-rpm	exec --verifydb		rpmd --verifydb
+-
+-rpm	exec --addsign		rpmk --addsign
+-rpm	exec -K			rpmk -K
+-rpm	exec --checksig		rpmk --checksig
+-rpm	exec --import		rpmk --import
+-rpm	exec --resign		rpmk --resign
+-
+-rpm	exec -q			rpmq -q
+-rpm	exec --query		rpmq --query
+-rpm	exec --querytags	rpmq --querytags
+-rpm	exec -V			rpmv -V
+-rpm	exec -y			rpmv -y
+-rpm	exec --verify		rpmv --verify
++#rpm	exec --initdb		rpmd --initdb
++#rpm	exec --rebuilddb	rpmd --rebuilddb
++#rpm	exec --verifydb		rpmd --verifydb
++
++#rpm	exec --addsign		rpmk --addsign
++#rpm	exec -K			rpmk -K
++#rpm	exec --checksig		rpmk --checksig
++#rpm	exec --import		rpmk --import
++#rpm	exec --resign		rpmk --resign
++
++#rpm	exec -q			rpmq -q
++#rpm	exec --query		rpmq --query
++#rpm	exec --querytags	rpmq --querytags
++#rpm	exec -V			rpmv -V
++#rpm	exec -y			rpmv -y
++#rpm	exec --verify		rpmv --verify
+ 
+ #rpm	exec -i			rpmi -i
+ #rpm	exec --install		rpmi --install
+@@ -382,7 +383,8 @@ Signature   : %|DSAHEADER?{%{DSAHEADER:p
+ %|PACKAGER?{Packager    : %{PACKAGER}\n}|\
+ %|URL?{URL         : %{URL}\n}|\
+ Summary     : %{SUMMARY}\n\
+-Description :\n%{DESCRIPTION}\n' \
++Description :\n%{DESCRIPTION}\n\
++Distribution: %{DISTRIBUTION}\n' \
+ 	--POPTdesc=$"list descriptive information from package(s)"
+ 
+ rpmq	alias --changelog --qf '[* %{CHANGELOGTIME:day} %{CHANGELOGNAME}\n%{CHANGELOGTEXT}\n\n]' \
+@@ -495,7 +497,8 @@ Size        : %-27{SIZE}%|LICENSE?{     
+ %|PACKAGER?{Packager    : %{PACKAGER}\n}|\
+ %|URL?{URL         : %{URL}\n}|\
+ Summary     : %{SUMMARY}\n\
+-Description :\n%{DESCRIPTION}\n' \
++Description :\n%{DESCRIPTION}\n\
++Distribution: %{DISTRIBUTION}\n' \
+ 	--POPTdesc=$"list descriptive information from package(s)"
+ 
+ rpmquery	alias --changelog --qf '[* %{CHANGELOGTIME:day} %{CHANGELOGNAME}\n%{CHANGELOGTEXT}\n\n]' \
diff --git a/rpmqpack.diff b/rpmqpack.diff
index 63605be..3013c3a 100644
--- a/rpmqpack.diff
+++ b/rpmqpack.diff
@@ -1,32 +1,51 @@
 Provide rpmqpack, a fast way to list all installed packages are
 check if some package is installed. This is a hack.
 
---- ./Makefile.am.orig	2011-05-11 14:27:32.000000000 +0000
-+++ ./Makefile.am	2011-05-11 15:15:27.000000000 +0000
-@@ -170,6 +170,10 @@ rpmgraph_LDADD =	lib/librpm.la rpmio/lib
+--- Makefile.am
++++ Makefile.am
+@@ -48,7 +48,7 @@
+ bin_SCRIPTS =		gendiff
  
- dist_bin_SCRIPTS =	scripts/gendiff
+ pkglibdir =		@RPMCONFIGDIR@
+-pkglib_PROGRAMS =	rpmb rpmd rpmi rpmk rpmq
++pkglib_PROGRAMS =	rpmb rpmd rpmi rpmk rpmq rpmqpack
+ pkglib_DATA =		rpmrc rpmpopt-$(VERSION) macros
+ pkglib_SCRIPTS =	find-provides find-requires mkinstalldirs \
+ 			config.guess config.sub config.site
+@@ -98,6 +98,12 @@
+ rpm2cpio_LDFLAGS =	$(myLDFLAGS)
+ rpm2cpio_LDADD =	$(myLDADD) @LIBMISC@
  
-+bin_PROGRAMS +=		rpmqpack
-+rpmqpack_SOURCES =      rpmqpack.c
-+rpmqpack_LDADD =        lib/librpm.la
++rpmqpack_SOURCES =	rpmqpack.c
++rpmqpack_LDFLAGS =	$(myLDFLAGS)
++rpmqpack_LDADD =	$(top_builddir)/rpmdb/librpmdb.la \
++			$(top_builddir)/rpmio/librpmio.la \
++			$(top_builddir)/popt/libpopt.la
 +
- rpmconfig_DATA = rpmrc
- rpmrc: $(top_srcdir)/rpmrc.in
- 	@$(SED) \
---- ./doc/Makefile.am.orig	2011-01-05 08:11:09.000000000 +0000
-+++ ./doc/Makefile.am	2011-05-11 15:16:24.000000000 +0000
-@@ -8,7 +8,7 @@ EXTRA_DIST += $(man_man1_DATA)
+ $(PROGRAMS): 		$(myLDADD) @WITH_APIDOCS_TARGET@
  
- man_man8dir = $(mandir)/man8
- man_man8_DATA = rpm.8 rpmbuild.8 rpmdeps.8 rpmgraph.8 rpm2cpio.8
--man_man8_DATA += rpmdb.8 rpmkeys.8 rpmsign.8 rpmspec.8
-+man_man8_DATA += rpmdb.8 rpmkeys.8 rpmsign.8 rpmspec.8 rpmqpack.8
- EXTRA_DIST += $(man_man8_DATA)
+ .PHONY:	splint
+@@ -147,6 +153,8 @@
+ 	@LN_S@ ../lib/rpm/rpmv $(DESTDIR)$(bindir)/rpmverify
+ 	rm -f $(DESTDIR)$(bindir)/rpmsign
+ 	@LN_S@ ../lib/rpm/rpmk $(DESTDIR)$(bindir)/rpmsign
++	rm -f $(DESTDIR)$(bindir)/rpmqpack
++	@LN_S@ ../lib/rpm/rpmqpack $(DESTDIR)$(bindir)/rpmqpack
+ 	rm -f $(DESTDIR)$(bindir)/rpmdb ; \
+ 	@LN_S@ ../lib/rpm/rpmd $(DESTDIR)$(bindir)/rpmdb ; \
+ 	for bf in e i u ; do \
+--- doc/Makefile.am
++++ doc/Makefile.am
+@@ -2,6 +2,6 @@
  
- man_fr_man8dir = $(mandir)/fr/man8
---- ./doc/rpmqpack.8.orig	2011-05-11 15:15:27.000000000 +0000
-+++ ./doc/rpmqpack.8	2011-05-11 15:15:27.000000000 +0000
+ SUBDIRS		= manual fr ja ko pl ru sk
+ 
+-man_MANS	= gendiff.1 rpm.8 rpmbuild.8 rpmcache.8 rpmdeps.8 rpmgraph.8 rpm2cpio.8
++man_MANS	= gendiff.1 rpm.8 rpmbuild.8 rpmcache.8 rpmdeps.8 rpmgraph.8 rpm2cpio.8 rpmqpack.8
+ 
+ EXTRA_DIST	= $(man_MANS)
+--- doc/rpmqpack.8
++++ doc/rpmqpack.8
 @@ -0,0 +1,25 @@
 +.TH RPMQPACK 8 "Mar 2002"
 +.SH NAME
@@ -53,8 +72,8 @@ check if some package is installed. This is a hack.
 +
 +.SH AUTHOR
 +Michael Schroeder <mls@suse.de>
---- ./rpmqpack.c.orig	2011-05-11 15:15:27.000000000 +0000
-+++ ./rpmqpack.c	2011-05-11 15:15:27.000000000 +0000
+--- rpmqpack.c
++++ rpmqpack.c
 @@ -0,0 +1,59 @@
 +#include <sys/types.h>
 +#include <limits.h>
@@ -80,7 +99,7 @@ check if some package is installed. This is a hack.
 +      perror("db_create");
 +      exit(1);
 +    }
-+  if (db->open(db, 0, "/var/lib/rpm/Name", 0, DB_UNKNOWN, DB_RDONLY, 0664))
++  if (db->open(db, 0, "/var/lib/rpm/Name", 0, DB_HASH, DB_RDONLY, 0664))
 +    {
 +      perror("db->open");
 +      exit(1);
diff --git a/rpmrc.diff b/rpmrc.diff
index f2d5b84..399a67a 100644
--- a/rpmrc.diff
+++ b/rpmrc.diff
@@ -4,33 +4,46 @@ Index: rpmrc.in
 ===================================================================
 --- rpmrc.in.orig
 +++ rpmrc.in
-@@ -12,16 +12,16 @@
+@@ -15,41 +15,42 @@
  # "fat" binary with both archs, for Darwin
  optflags: fat -O2 -g -arch i386 -arch ppc
  
--optflags: i386 -O2 -g -march=i386 -mtune=i686
+-optflags: i386 -O2 -g -march=i386 -mcpu=i686
 -optflags: i486 -O2 -g -march=i486
 -optflags: i586 -O2 -g -march=i586
 -optflags: i686 -O2 -g -march=i686
--optflags: pentium3 -O2 -g -march=pentium3
--optflags: pentium4 -O2 -g -march=pentium4
--optflags: athlon -O2 -g -march=athlon
-+optflags: i386 -O2 -g -m32 -march=i486 -fmessage-length=0 -D_FORTIFY_SOURCE=2 -fstack-protector -funwind-tables -fasynchronous-unwind-tables
-+optflags: i486 -O2 -g -m32 -march=i486 -fmessage-length=0 -D_FORTIFY_SOURCE=2 -fstack-protector -funwind-tables -fasynchronous-unwind-tables
-+optflags: i586 -O2 -g -m32 -march=i586 -mtune=i686 -fmessage-length=0 -D_FORTIFY_SOURCE=2 -fstack-protector -funwind-tables -fasynchronous-unwind-tables
-+optflags: i686 -O2 -g -m32 -march=i686 -mtune=i686 -fmessage-length=0 -D_FORTIFY_SOURCE=2 -fstack-protector -funwind-tables -fasynchronous-unwind-tables
-+optflags: pentium3 -O2 -g -m32 -march=pentium3
-+optflags: pentium4 -O2 -g -m32 -march=pentium4
-+optflags: athlon -O2 -g -m32 -march=athlon
- optflags: geode -Os -g -m32 -march=geode
++optflags: i386 -O2 -g -m32 -march=i486 -fmessage-length=0 -D_FORTIFY_SOURCE=2
++optflags: i486 -O2 -g -m32 -march=i486
++optflags: i586 -O2 -g -m32 -march=i586 -mtune=i686 -fmessage-length=0 -D_FORTIFY_SOURCE=2
++optflags: i686 -O2 -g -m32 -march=i686 -mtune=i686 -fmessage-length=0 -D_FORTIFY_SOURCE=2
+ optflags: pentium3 -O2 -g -march=pentium3
+ optflags: pentium4 -O2 -g -march=pentium4
+ optflags: athlon -O2 -g -march=athlon
 -optflags: ia64 -O2 -g
 -optflags: x86_64 -O2 -g
-+optflags: ia64 -O2 -g -fmessage-length=0 -D_FORTIFY_SOURCE=2 -fstack-protector -funwind-tables -fasynchronous-unwind-tables
-+optflags: x86_64 -O2 -g -m64 -fmessage-length=0 -D_FORTIFY_SOURCE=2 -fstack-protector -funwind-tables -fasynchronous-unwind-tables
++optflags: ia64 -O2 -g -fmessage-length=0 -D_FORTIFY_SOURCE=2
++optflags: x86_64 -O2 -g -fmessage-length=0 -D_FORTIFY_SOURCE=2
  optflags: amd64 -O2 -g
  optflags: ia32e -O2 -g
  
-@@ -41,15 +41,16 @@ optflags: sparc64v -O2 -g -m64 -mtune=ni
+ optflags: alpha -O2 -g -mieee
+-optflags: alphaev5 -O2 -g -mieee -mcpu=ev5
+-optflags: alphaev56 -O2 -g -mieee -mcpu=ev56
+-optflags: alphapca56 -O2 -g -mieee -mcpu=pca56
+-optflags: alphaev6 -O2 -g -mieee -mcpu=ev6
+-optflags: alphaev67 -O2 -g -mieee -mcpu=ev67
++optflags: alphaev5 -O2 -g -mieee -mtune=ev5
++optflags: alphaev56 -O2 -g -mieee -mtune=ev56
++optflags: alphapca56 -O2 -g -mieee -mtune=pca56
++optflags: alphaev6 -O2 -g -mieee -mtune=ev6
++optflags: alphaev67 -O2 -g -mieee -mtune=ev67
+ 
+ optflags: sparc -O2 -g -m32 -mtune=ultrasparc
+ optflags: sparcv8 -O2 -g -m32 -mtune=ultrasparc -mv8
+-optflags: sparcv9 -O2 -g -m32 -mcpu=ultrasparc
+-optflags: sparc64 -O2 -g -m64 -mcpu=ultrasparc
++optflags: sparcv9 -O2 -g -m32 -mtune=ultrasparc
++optflags: sparc64 -O2 -g -m64 -mtune=ultrasparc
  
  optflags: m68k -O2 -g -fomit-frame-pointer
  
@@ -41,31 +54,44 @@ Index: rpmrc.in
 -optflags: ppciseries -O2 -g -fsigned-char
 -optflags: ppcpseries -O2 -g -fsigned-char
 -optflags: ppc64 -O2 -g -fsigned-char
-+optflags: ppc -O2 -g -m32 -fmessage-length=0 -D_FORTIFY_SOURCE=2 -fstack-protector -funwind-tables -fasynchronous-unwind-tables
-+optflags: ppc8260 -O2 -g -m32
-+optflags: ppc8560 -O2 -g -m32
-+optflags: ppc32dy4 -O2 -g -m32
-+optflags: ppciseries -O2 -g -m32
-+optflags: ppcpseries -O2 -g -m32
-+optflags: ppc64 -O2 -g -fmessage-length=0 -D_FORTIFY_SOURCE=2 -fstack-protector -funwind-tables -fasynchronous-unwind-tables
++optflags: ppc -O2 -g -fmessage-length=0 -D_FORTIFY_SOURCE=2
++optflags: ppc8260 -O2 -g
++optflags: ppc8560 -O2 -g
++optflags: ppc32dy4 -O2 -g
++optflags: ppciseries -O2 -g
++optflags: ppcpseries -O2 -g
++optflags: ppc64 -O2 -g -fmessage-length=0 -D_FORTIFY_SOURCE=2
  
  optflags: parisc -O2 -g -mpa-risc-1-0
 +optflags: hppa -O2 -g -mpa-risc-1-0
  optflags: hppa1.0 -O2 -g -mpa-risc-1-0
  optflags: hppa1.1 -O2 -g -mpa-risc-1-0
  optflags: hppa1.2 -O2 -g -mpa-risc-1-0
-@@ -75,8 +76,8 @@ optflags: atariclone -O2 -g -fomit-frame
+@@ -58,9 +59,9 @@ optflags: hppa2.0 -O2 -g -mpa-risc-1-0
+ optflags: mips -O2 -g
+ optflags: mipsel -O2 -g
+ 
+-optflags: armv3l -O2 -g -fsigned-char -fomit-frame-pointer -march=armv3
+-optflags: armv4b -O2 -g -fsigned-char -fomit-frame-pointer -march=armv4
+-optflags: armv4l -O2 -g -fsigned-char -fomit-frame-pointer -march=armv4
++optflags: armv3l -O2 -g -march=armv3
++optflags: armv4b -O2 -g -march=armv4
++optflags: armv4l -O2 -g -march=armv4
+ 
+ optflags: atarist -O2 -g -fomit-frame-pointer
+ optflags: atariste -O2 -g -fomit-frame-pointer
+@@ -70,8 +71,8 @@ optflags: atariclone -O2 -g -fomit-frame
  optflags: milan -O2 -g -fomit-frame-pointer
  optflags: hades -O2 -g -fomit-frame-pointer
  
 -optflags: s390 -O2 -g
 -optflags: s390x -O2 -g
-+optflags: s390 -O2 -g -m31 -fmessage-length=0 -D_FORTIFY_SOURCE=2 -fstack-protector -funwind-tables -fasynchronous-unwind-tables
-+optflags: s390x -O2 -g -m64 -fmessage-length=0 -D_FORTIFY_SOURCE=2 -fstack-protector -funwind-tables -fasynchronous-unwind-tables
++optflags: s390 -O2 -g -fmessage-length=0
++optflags: s390x -O2 -g -fmessage-length=0
  
- optflags: sh3 -O2 -g
- optflags: sh4 -O2 -g -mieee
-@@ -200,17 +201,17 @@ os_canon:       MacOSX: macosx	21
+ #############################################################
+ # Canonical arch names and numbers
+@@ -181,16 +182,16 @@ os_canon:       MacOSX: macosx	21
  #############################################################
  # For a given uname().machine, the default build arch
  
@@ -77,13 +103,11 @@ Index: rpmrc.in
  buildarchtranslate: osfmach3_i386: i386
  
 -buildarchtranslate: athlon: i386
--buildarchtranslate: geode: i386
 -buildarchtranslate: pentium4: i386
 -buildarchtranslate: pentium3: i386
 -buildarchtranslate: i686: i386
 -buildarchtranslate: i586: i386
 +buildarchtranslate: athlon: i586
-+buildarchtranslate: geode: i586
 +buildarchtranslate: pentium4: i586
 +buildarchtranslate: pentium3: i586
 +buildarchtranslate: i686: i586
@@ -91,17 +115,17 @@ Index: rpmrc.in
  buildarchtranslate: i486: i386
  buildarchtranslate: i386: i386
  
-@@ -239,6 +240,7 @@ buildarchtranslate: ppciseries: ppc
+@@ -217,6 +218,7 @@ buildarchtranslate: ppciseries: ppc
  buildarchtranslate: ppcpseries: ppc
  buildarchtranslate: ppc64iseries: ppc64
  buildarchtranslate: ppc64pseries: ppc64
 +buildarchtranslate: powerpc64: ppc64
  
- buildarchtranslate: armv3l: armv3l
- buildarchtranslate: armv4b: armv4b
-@@ -270,6 +272,15 @@ buildarchtranslate: sh3: sh3
- buildarchtranslate: sh4: sh4
- buildarchtranslate: sh4a: sh4
+ buildarchtranslate: atarist: m68kmint
+ buildarchtranslate: atariste: m68kmint
+@@ -235,6 +237,15 @@ buildarchtranslate: x86_64: x86_64
+ buildarchtranslate: amd64: x86_64
+ buildarchtranslate: ia32e: x86_64
  
 +buildarchtranslate: parisc: hppa
 +buildarchtranslate: hppa2.0: hppa
@@ -115,7 +139,7 @@ Index: rpmrc.in
  #############################################################
  # Architecture compatibility
  
-@@ -325,14 +336,18 @@ arch_compat: mipsel: noarch
+@@ -287,10 +298,16 @@ arch_compat: mipsel: noarch
  arch_compat: hppa2.0: hppa1.2
  arch_compat: hppa1.2: hppa1.1
  arch_compat: hppa1.1: hppa1.0
@@ -127,28 +151,30 @@ Index: rpmrc.in
 +arch_compat: armv5teb: armv5b
 +arch_compat: armv5b: armv4b
  arch_compat: armv4b: noarch
- arch_compat: armv7l: armv6l
- arch_compat: armv6l: armv5tejl
- arch_compat: armv5tejl: armv5tel
--arch_compat: armv5tel: armv4tl
++
 +arch_compat: armv5tel: armv5l
-+arch_compat: armv5l: armv4tl
- arch_compat: armv4tl: armv4l
++arch_compat: armv5l: armv4l
  arch_compat: armv4l: armv3l
  arch_compat: armv3l: noarch
-@@ -349,9 +364,9 @@ arch_compat: i370: noarch
- arch_compat: s390: noarch
- arch_compat: s390x: s390 noarch
  
--arch_compat: ia64: noarch
-+arch_compat: ia64: i686 noarch
+@@ -308,7 +325,7 @@ arch_compat: s390x: s390 noarch
+ 
+ arch_compat: ia64: noarch
  
 -arch_compat: x86_64: amd64 athlon noarch
 +arch_compat: x86_64: amd64 em64t athlon noarch
  arch_compat: amd64: x86_64 athlon noarch
  arch_compat: ia32e: x86_64 athlon noarch
  
-@@ -444,7 +459,8 @@ buildarch_compat: armv3l: noarch
+@@ -384,11 +401,16 @@ buildarch_compat: mipsel: noarch
+ buildarch_compat: armv3l: noarch
+ buildarch_compat: armv4b: noarch
+ buildarch_compat: armv4l: noarch
++buildarch_compat: armv5b: noarch
++buildarch_compat: armv5l: noarch
++buildarch_compat: armv5teb: noarch
++buildarch_compat: armv5tel: noarch
+ 
  buildarch_compat: hppa2.0: hppa1.2
  buildarch_compat: hppa1.2: hppa1.1
  buildarch_compat: hppa1.1: hppa1.0
@@ -158,3 +184,12 @@ Index: rpmrc.in
  buildarch_compat: parisc: noarch
  
  buildarch_compat: atarist: m68kmint noarch
+@@ -408,7 +430,7 @@ buildarch_compat: x86_64: noarch
+ buildarch_compat: amd64: x86_64
+ buildarch_compat: ia32e: x86_64
+ 
+-macrofiles:	@RPMCONFIGDIR@/macros:@RPMCONFIGDIR@/%{_target}/macros:@SYSCONFIGDIR@/macros.*:@SYSCONFIGDIR@/macros:@SYSCONFIGDIR@/%{_target}/macros:~/.rpmmacros
++macrofiles:	@RPMCONFIGDIR@/macros:@RPMCONFIGDIR@/%{_target}/macros:@RPMCONFIGDIR@/suse_macros:@SYSCONFIGDIR@/macros.*:@SYSCONFIGDIR@/macros:@SYSCONFIGDIR@/%{_target}/macros:~/.rpmmacros
+ 
+ # \endverbatim
+ #*/
diff --git a/rpmrctests.diff b/rpmrctests.diff
index 34e42fe..d756989 100644
--- a/rpmrctests.diff
+++ b/rpmrctests.diff
@@ -1,8 +1,9 @@
-Patch machine detection code: detect transmeta, rename parisc to hppa. [#52713]
+Patch machine detection code: always use "ppc", restore SIGILL
+handler, detect transmeta. [#52713]
 
---- ./lib/rpmrc.c.orig	2010-12-03 12:11:57.000000000 +0000
-+++ ./lib/rpmrc.c	2011-05-11 12:48:02.000000000 +0000
-@@ -1,9 +1,6 @@
+--- ./lib/rpmrc.c.orig	2005-01-17 18:46:23.000000000 +0000
++++ ./lib/rpmrc.c	2005-12-16 18:30:29.000000000 +0000
+@@ -2,9 +2,6 @@
  #include "system.h"
  
  #include <stdarg.h>
@@ -10,13 +11,37 @@ Patch machine detection code: detect transmeta, rename parisc to hppa. [#52713]
 -#include <setjmp.h>
 -#endif
  
- #if HAVE_SYS_UTSNAME_H
- #include <sys/utsname.h>
-@@ -788,6 +785,14 @@ static inline int RPMClass(void)
+ #include <ctype.h>	/* XXX for /etc/rpm/platform contents */
+ 
+@@ -953,20 +950,38 @@ static inline int RPMClass(void)
+ {
+ 	int cpu;
+ 	unsigned int tfms, junk, cap, capamd;
++	struct sigaction oldsa;
+ 	
++	sigaction(SIGILL, NULL, &oldsa);
+ 	signal(SIGILL, model3);
+ 	
+-	if (sigsetjmp(jenv, 1))
++	if (sigsetjmp(jenv, 1)) {
++		sigaction(SIGILL, &oldsa, NULL);
+ 		return 3;
++	}
+ 		
+-	if (cpuid_eax(0x000000000)==0)
++	if (cpuid_eax(0x000000000)==0) {
++		sigaction(SIGILL, &oldsa, NULL);
+ 		return 4;
++	}
+ 
+ 	cpuid(0x00000001, &tfms, &junk, &junk, &cap);
+ 	cpuid(0x80000001, &junk, &junk, &junk, &capamd);
  	
  	cpu = (tfms>>8)&15;
  	
-+	if (cpu == 5
++        /* Check if we have a Transmeta i686-compatible CPU
++           that reports as being i586 */
++	if(cpu == 5
 +	    && cpuid_ecx(0)=='68xM'
 +	    && cpuid_edx(0)=='Teni'
 +	    && (cpuid_edx(1) & ((1<<8)|(1<<15))) == ((1<<8)|(1<<15))) {
@@ -24,11 +49,13 @@ Patch machine detection code: detect transmeta, rename parisc to hppa. [#52713]
 +		return 6;       /* has CX8 and CMOV */
 +	}
 +
- 	sigaction(SIGILL, &oldsa, NULL);
- 
++	sigaction(SIGILL, &oldsa, NULL);
++
  	if (cpu < 6)
-@@ -924,15 +929,6 @@ static int is_geode()
- }
+ 		return cpu;
+ 		
+@@ -1076,15 +1091,6 @@ static int is_pentium4()
+ 
  #endif
  
 -#if defined(__linux__) && defined(__powerpc__)
@@ -42,8 +69,8 @@ Patch machine detection code: detect transmeta, rename parisc to hppa. [#52713]
 -
  /**
   */
- static void defaultMachine(const char ** arch,
-@@ -1059,6 +1055,11 @@ static void defaultMachine(const char **
+ static void defaultMachine(/*@out@*/ const char ** arch,
+@@ -1219,6 +1225,11 @@ static void defaultMachine(/*@out@*/ con
  	   /* big endian */
  		strcpy(un.machine, "mips");
  #	endif
@@ -55,3 +82,31 @@ Patch machine detection code: detect transmeta, rename parisc to hppa. [#52713]
  
  #	if defined(__hpux) && defined(_SC_CPU_VERSION)
  	{
+@@ -1326,27 +1337,6 @@ static void defaultMachine(/*@out@*/ con
+ 	}
+ #	endif
+ 
+-#	if defined(__linux__) && defined(__powerpc__)
+-	{
+-	    unsigned pvr = 0;
+-	    __sighandler_t oldh = signal(SIGILL, mfspr_ill);
+-	    if (setjmp(mfspr_jmpbuf) == 0) {
+-		__asm__ __volatile__ ("mfspr %0, 287" : "=r" (pvr));
+-	    }
+-	    signal(SIGILL, oldh);
+-
+-	    if ( pvr ) {
+-		pvr >>= 16;
+-		if ( pvr >= 0x40)
+-		    strcpy(un.machine, "ppcpseries");
+-		else if ( (pvr == 0x36) || (pvr == 0x37) )
+-		    strcpy(un.machine, "ppciseries");
+-		else
+-		    strcpy(un.machine, "ppc");
+-	    }
+-	}
+-#	endif
+-
+ 	/* the uname() result goes through the arch_canon table */
+ 	canon = lookupInCanonTable(un.machine,
+ 				   tables[RPM_MACHTABLE_INSTARCH].canons,
diff --git a/rpmsort b/rpmsort
index 841c2d7..a73478b 100644
--- a/rpmsort
+++ b/rpmsort
@@ -17,7 +17,7 @@
 
 use Getopt::Long qw(:config gnu_getopt);
 
-sub do_rpm_cmp_versions {
+sub rpm_cmp_versions {
     my ($evr1, $evr2) = @_;
 
     sub _rpm_cmp {
@@ -31,10 +31,8 @@ sub do_rpm_cmp_versions {
 	    $s1 =~ s/^[^a-zA-Z0-9]+//;
 	    $s2 =~ s/^[^a-zA-Z0-9]+//;
 	    if ($s1 =~ /^\d/ || $s2 =~ /^\d/) {
-		$s1 =~ s/^(0*(\d*))//;  $x1 = $2;
-		return -1 if $1 eq '';
-		$s2 =~ s/^(0*(\d*))//;  $x2 = $2;
-		return 1 if $1 eq '';
+		$s1 =~ s/^0*(\d*)//;  $x1 = $1;
+		$s2 =~ s/^0*(\d*)//;  $x2 = $1;
 		$r = length $x1 <=> length $x2 || $x1 cmp $x2;
 	    } else {
 		$s1 =~ s/^([a-zA-Z]*)//;  $x1 = $1;
@@ -59,35 +57,11 @@ sub do_rpm_cmp_versions {
 
 my $reorder = sub { return @_ };
 my $key = 0;
-my $test = 0;
-
-sub rpm_cmp_versions {
-	my ($evr1, $evr2) = @_;
-
-	chomp($evr1, $evr2);
-	my $res1 = do_rpm_cmp_versions($evr1, $evr2);
-	if ($test) {
-		open(my $fd, '-|', 'zypper', '--terse', 'versioncmp',
-			$evr1, $evr2) or die "zypper: $!\n";
-		my $res2 = <$fd>;
-		close($fd) or die "zypper: $!\n";
-		chomp $res2;
-		if ($res1 != $res2) {
-			my @operators = qw(< == >);
-			my $op1 = $operators[$res1 + 1];
-			my $op2 = $operators[$res2 + 1];
-
-			print STDERR "BUG: $evr1 $op1 $evr2 vs. zypper: $evr1 $op2 $evr2\n";
-		}
-	}
-	return $res1;
-}
 
 GetOptions ("r|reverse"	    => sub { $reorder = sub { return reverse @_ } },
-	    "k|key=i"	    => \$key,
-	    "test"        => \$test)
+	    "k|key=i"	    => \$key)
 or do {
-    print STDERR "Usage $0 [-r, --reverse] [-k N, --key=N] [--test]\n";
+    print STDERR "Usage\n";
     exit 1;
 };
 
diff --git a/safemacro.diff b/safemacro.diff
deleted file mode 100644
index 96f065a..0000000
--- a/safemacro.diff
+++ /dev/null
@@ -1,21 +0,0 @@
---- rpmio/macro.c.orig	2011-05-17 08:43:40.000000000 +0000
-+++ rpmio/macro.c	2011-05-17 08:44:48.000000000 +0000
-@@ -1016,12 +1016,12 @@ expandMacro(MacroBuf mb, const char *src
-     char *source = NULL;
- 
-     /* Handle non-terminated substrings by creating a terminated copy */
--    if (slen > 0) {
--	source = xmalloc(slen + 1);
--	strncpy(source, src, slen);
--	source[slen] = '\0';
--	s = source;
--    }
-+    if (!slen)
-+	slen = strlen(src);
-+    source = xmalloc(slen + 1);
-+    strncpy(source, src, slen);
-+    source[slen] = '\0';
-+    s = source;
- 
-     if (mb->buf == NULL) {
- 	size_t blen = MACROBUFSIZ + strlen(s);
diff --git a/safeugid.diff b/safeugid.diff
deleted file mode 100644
index 859dd02..0000000
--- a/safeugid.diff
+++ /dev/null
@@ -1,213 +0,0 @@
-Work around glibc/nscd caching problems when doing 'rpm --root'.
-
---- ./lib/rpmchroot.c.orig	2011-05-12 08:26:10.000000000 +0000
-+++ ./lib/rpmchroot.c	2011-05-12 08:28:32.000000000 +0000
-@@ -66,6 +66,7 @@ int rpmChrootIn(void)
-     } else if (rootState.chrootDone == 0) {
- 	if (chdir("/") == 0 && chroot(rootState.rootDir) == 0) {
- 	    rootState.chrootDone = 1;
-+	    rpmugChroot(1);
- 	} else {
- 	    rpmlog(RPMLOG_ERR, _("Unable to change root directory: %m\n"));
- 	    rc = -1;
-@@ -91,6 +92,7 @@ int rpmChrootOut(void)
-     } else if (rootState.chrootDone == 1) {
- 	if (chroot(".") == 0 && fchdir(rootState.cwd) == 0) {
- 	    rootState.chrootDone = 0;
-+	    rpmugChroot(0);
- 	} else {
- 	    rpmlog(RPMLOG_ERR, _("Unable to restore root directory: %m\n"));
- 	    rc = -1;
---- ./lib/rpmug.c.orig	2011-05-12 08:13:52.000000000 +0000
-+++ ./lib/rpmug.c	2011-05-12 08:33:28.000000000 +0000
-@@ -35,6 +35,47 @@ const char * rpmugStashStr(const char *s
-     return ret;
- }
- 
-+#if defined(__GLIBC__)
-+
-+static int inchroot;
-+
-+/*
-+ * Unfortunatelly glibc caches nss/nscd data and there is no
-+ * good way to flush those caches when we did a chroot(). Thus
-+ * we need to parse /etc/passwd and /etc/group ourselfs.
-+ */
-+static int safe_lookup(const char * file, const char * name)
-+{
-+    FILE *fp;
-+    int l;
-+    char buf[4096], *p;
-+
-+    if (!name || !*name)
-+	return -1;
-+    l = strlen(name);
-+    if ((fp = fopen(file, "r")) == 0)
-+	return -1;
-+    while ((p = fgets(buf, sizeof(buf), fp)) != 0) {
-+	if (*p == '#')
-+	    continue;
-+	while (*p && (*p == ' ' || *p == '\t'))
-+	    p++;
-+	if (strncmp(p, name, l) != 0 || p[l] != ':')
-+	    continue;
-+	p = strchr(p + l + 1, ':');
-+	if (!p)
-+	    continue;
-+	fclose(fp);
-+	p++;
-+	while (*p && (*p == ' ' || *p == '\t'))
-+	    p++;
-+	return atoi(p);
-+    }
-+    fclose(fp);
-+    return -1;
-+}
-+#endif
-+
- /* 
-  * These really ought to use hash tables. I just made the
-  * guess that most files would be owned by root or the same person/group
-@@ -68,17 +109,28 @@ int rpmugUid(const char * thisUname, uid
- 	    lastUnameAlloced = thisUnameLen + 10;
- 	    lastUname = xrealloc(lastUname, lastUnameAlloced);	/* XXX memory leak */
- 	}
--	strcpy(lastUname, thisUname);
- 
--	pwent = getpwnam(thisUname);
--	if (pwent == NULL) {
--	    /* FIX: shrug */
--	    endpwent();
-+#if defined(__GLIBC__)
-+	if (inchroot) {
-+	    int uid =  safe_lookup("/etc/passwd", thisUname);
-+	    if (uid < 0)
-+		return -1;
-+	    lastUid = uid;
-+	} else
-+#endif
-+	{
- 	    pwent = getpwnam(thisUname);
--	    if (pwent == NULL) return -1;
-+	    if (pwent == NULL) {
-+		/* FIX: shrug */
-+		endpwent();
-+		pwent = getpwnam(thisUname);
-+		if (pwent == NULL) return -1;
-+	    }
-+	    lastUid = pwent->pw_uid;
- 	}
- 
--	lastUid = pwent->pw_uid;
-+	strcpy(lastUname, thisUname);
-+	lastUnameLen = thisUnameLen;
-     }
- 
-     *uid = lastUid;
-@@ -111,18 +163,29 @@ int rpmugGid(const char * thisGname, gid
- 	    lastGnameAlloced = thisGnameLen + 10;
- 	    lastGname = xrealloc(lastGname, lastGnameAlloced);	/* XXX memory leak */
- 	}
--	strcpy(lastGname, thisGname);
- 
--	grent = getgrnam(thisGname);
--	if (grent == NULL) {
--	    /* FIX: shrug */
--	    endgrent();
-+#if defined(__GLIBC__)
-+	if (inchroot) {
-+	    int gid =  safe_lookup("/etc/group", thisGname);
-+	    if (gid < 0)
-+		return -1;
-+	    lastGid = gid;
-+	} else
-+#endif
-+	{
- 	    grent = getgrnam(thisGname);
- 	    if (grent == NULL) {
--		return -1;
-+		/* FIX: shrug */
-+		endgrent();
-+		grent = getgrnam(thisGname);
-+		if (grent == NULL) {
-+		    return -1;
-+		}
- 	    }
-+	    lastGid = grent->gr_gid;
- 	}
--	lastGid = grent->gr_gid;
-+	strcpy(lastGname, thisGname);
-+	lastGnameLen = thisGnameLen;
-     }
- 
-     *gid = lastGid;
-@@ -134,7 +197,7 @@ const char * rpmugUname(uid_t uid)
- {
-     static uid_t lastUid = (uid_t) -1;
-     static char * lastUname = NULL;
--    static size_t lastUnameLen = 0;
-+    static size_t lastUnameAlloced = 0;
- 
-     if (uid == (uid_t) -1) {
- 	lastUid = (uid_t) -1;
-@@ -151,9 +214,9 @@ const char * rpmugUname(uid_t uid)
- 
- 	lastUid = uid;
- 	len = strlen(pwent->pw_name);
--	if (lastUnameLen < len + 1) {
--	    lastUnameLen = len + 20;
--	    lastUname = xrealloc(lastUname, lastUnameLen);
-+	if (lastUnameAlloced < len + 1) {
-+	    lastUnameAlloced = len + 20;
-+	    lastUname = xrealloc(lastUname, lastUnameAlloced);
- 	}
- 	strcpy(lastUname, pwent->pw_name);
- 
-@@ -165,7 +228,7 @@ const char * rpmugGname(gid_t gid)
- {
-     static gid_t lastGid = (gid_t) -1;
-     static char * lastGname = NULL;
--    static size_t lastGnameLen = 0;
-+    static size_t lastGnameAlloced = 0;
- 
-     if (gid == (gid_t) -1) {
- 	lastGid = (gid_t) -1;
-@@ -182,9 +245,9 @@ const char * rpmugGname(gid_t gid)
- 
- 	lastGid = gid;
- 	len = strlen(grent->gr_name);
--	if (lastGnameLen < len + 1) {
--	    lastGnameLen = len + 20;
--	    lastGname = xrealloc(lastGname, lastGnameLen);
-+	if (lastGnameAlloced < len + 1) {
-+	    lastGnameAlloced = len + 20;
-+	    lastGname = xrealloc(lastGname, lastGnameAlloced);
- 	}
- 	strcpy(lastGname, grent->gr_name);
- 
-@@ -200,3 +263,16 @@ void rpmugFree(void)
-     rpmugGname(-1);
-     strStash = strCacheFree(strStash);
- }
-+
-+void rpmugChroot(int in)
-+{
-+    /* tell libc to drop caches / file descriptors */
-+    endpwent();
-+    endgrent();
-+    /* drop our own caches */
-+    rpmugUid(NULL, NULL);
-+    rpmugGid(NULL, NULL);
-+#if defined(__GLIBC__)
-+    inchroot = in;
-+#endif
-+}
---- ./lib/rpmug.h.orig	2011-05-12 08:13:52.000000000 +0000
-+++ ./lib/rpmug.h	2011-05-12 08:26:56.000000000 +0000
-@@ -15,4 +15,6 @@ const char * rpmugGname(gid_t gid);
- 
- void rpmugFree(void);
- 
-+void rpmugChroot(int in);
-+
- #endif /* _RPMUG_H */
diff --git a/sbitcheck.diff b/sbitcheck.diff
new file mode 100644
index 0000000..368e3de
--- /dev/null
+++ b/sbitcheck.diff
@@ -0,0 +1,105 @@
+When deleting files, drop any s-bit first, so that a malicious
+user does not have access to old programs if he hard links them
+to some other directory. [#50376] rh#125517
+
+Already in rpm-4.4.7.
+
+Index: lib/cpio.h
+===================================================================
+--- lib/cpio.h.orig
++++ lib/cpio.h
+@@ -64,7 +64,8 @@ typedef enum cpioMapFlags_e {
+     CPIO_MAP_ABSOLUTE	= (1 << 5),
+     CPIO_MAP_ADDDOT	= (1 << 6),
+     CPIO_ALL_HARDLINKS	= (1 << 7), /*!< fail if hardlinks are missing. */
+-    CPIO_MAP_TYPE	= (1 << 8)  /*!< only for building. */
++    CPIO_MAP_TYPE	= (1 << 8),  /*!< only for building. */
++    CPIO_SBIT_CHECK	= (1 << 9)
+ } cpioMapFlags;
+ 
+ #define CPIO_NEWC_MAGIC	"070701"
+Index: lib/fsm.c
+===================================================================
+--- lib/fsm.c.orig
++++ lib/fsm.c
+@@ -2127,6 +2127,11 @@ if (!(fsm->mapFlags & CPIO_ALL_HARDLINKS
+ 	/*@notreached@*/ break;
+ 
+     case FSM_UNLINK:
++	if (fsm->mapFlags & CPIO_SBIT_CHECK) {
++	    struct stat stb;
++	    if (Lstat(fsm->path, &stb) == 0 && S_ISREG(stb.st_mode) && (stb.st_mode & 06000) != 0)
++		chmod(fsm->path, stb.st_mode & 0777);
++	}
+ 	rc = Unlink(fsm->path);
+ 	if (_fsm_debug && (stage & FSM_SYSCALL))
+ 	    rpmMessage(RPMMESS_DEBUG, " %8s (%s) %s\n", cur,
+Index: lib/psm.c
+===================================================================
+--- lib/psm.c.orig
++++ lib/psm.c
+@@ -1472,7 +1472,7 @@ assert(psm->mi == NULL);
+ 		fi->striplen = (xx ? strlen(p) + 1 : 1);
+ 	    }
+ 	    fi->mapflags =
+-		CPIO_MAP_PATH | CPIO_MAP_MODE | CPIO_MAP_UID | CPIO_MAP_GID;
++		CPIO_MAP_PATH | CPIO_MAP_MODE | CPIO_MAP_UID | CPIO_MAP_GID | (fi->mapflags & CPIO_SBIT_CHECK);
+ 	
+ 	    if (headerIsEntry(fi->h, RPMTAG_ORIGBASENAMES))
+ 		rpmfiBuildFNames(fi->h, RPMTAG_ORIGBASENAMES, &fi->apath, NULL);
+Index: lib/transaction.c
+===================================================================
+--- lib/transaction.c.orig
++++ lib/transaction.c
+@@ -187,6 +187,13 @@ static int handleInstInstalledFiles(cons
+ 	if (XFA_SKIPPING(fi->actions[fileNum]))
+ 	    continue;
+ 
++	if (!(fi->mapflags & CPIO_SBIT_CHECK)) {
++	    int_16 omode = rpmfiFMode(otherFi);
++	    if (S_ISREG(omode) && (omode & 06000) != 0) {
++		fi->mapflags |= CPIO_SBIT_CHECK;
++	    }
++	}
++
+ 	if (rpmfiCompare(otherFi, fi)) {
+ 	    int rConflicts;
+ 
+@@ -1843,6 +1850,20 @@ rpmMessage(RPMMESS_DEBUG, _("computing f
+ 	case TR_REMOVED:
+ 	    /*@switchbreak@*/ break;
+ 	}
++	/* check for s-bit files to be removed */
++	if (rpmteType(p) == TR_REMOVED) {
++	    fi = rpmfiInit(fi, 0);
++	    while ((i = rpmfiNext(fi)) >= 0) {
++		int_16 mode;
++		if (XFA_SKIPPING(fi->actions[i]))
++		    continue;
++		(void) rpmfiSetFX(fi, i);
++		mode = rpmfiFMode(fi);
++		if (S_ISREG(mode) && (mode & 06000) != 0) {
++		    fi->mapflags |= CPIO_SBIT_CHECK;
++		}
++	    }
++	}
+ 	(void) rpmswExit(rpmtsOp(ts, RPMTS_OP_FINGERPRINT), fc);
+     }
+     pi = rpmtsiFree(pi);
+@@ -2088,6 +2109,7 @@ assert(psm != NULL);
+ 		{
+ 		    char * fstates = fi->fstates;
+ 		    fileAction * actions = fi->actions;
++		    int mapflags = fi->mapflags;
+ 		    rpmte savep;
+ 
+ 		    fi->fstates = NULL;
+@@ -2106,6 +2128,8 @@ assert(psm != NULL);
+ 			fi->fstates = fstates;
+ 			fi->actions = _free(fi->actions);
+ 			fi->actions = actions;
++			if (mapflags & CPIO_SBIT_CHECK)
++			    fi->mapflags |= CPIO_SBIT_CHECK;
+ 			p->fi = fi;
+ 		    }
+ 		}
diff --git a/setpermsugids.diff b/setpermsugids.diff
new file mode 100644
index 0000000..7501f4e
--- /dev/null
+++ b/setpermsugids.diff
@@ -0,0 +1,20 @@
+Deal with bad lines in --setperms and --setugids. Happens for example if
+a package is not installed (--pipe also captures stderr). [#52122]
+
+--- ./rpmpopt.in.orig	2005-02-16 19:05:36.000000000 +0000
++++ ./rpmpopt.in	2006-03-21 17:58:43.000000000 +0000
+@@ -37,12 +37,12 @@ rpm	alias --scripts --qf '\
+ 	--POPTdesc=$"list install/erase scriptlets from package(s)"
+ 
+ rpm	alias --setperms -q --qf '[\[ -L %{FILENAMES:shescape} \] || chmod %7.7{FILEMODES:octal} %{FILENAMES:shescape}\n]' \
+-		   --pipe "grep -v \(none\) | sed 's/chmod .../chmod /' | sh" \
++		   --pipe "grep -v \(none\) | grep '^. -L ' | sed 's/chmod .../chmod /' | sh" \
+ 	--POPTdesc=$"set permissions of files in a package"
+ 
+ rpm	alias --setugids -q --qf \
+         '[ch %{FILEUSERNAME:shescape} %{FILEGROUPNAME:shescape} %{FILENAMES:shescape}\n]' \
+-        --pipe "(echo 'ch() { chown -- \"$1\" \"$3\";chgrp -- \"$2\" \"$3\"; }';grep -v \(none\))|sh" \
++        --pipe "(echo 'ch() { chown -h -- \"$1\" \"$3\";chgrp -h -- \"$2\" \"$3\"; }';grep '^ch '|grep -v \(none\))|sh" \
+ 	--POPTdesc=$"set user/group ownership of files in a package"
+ 
+ rpm	alias --conflicts	--qf \
diff --git a/signature.diff b/signature.diff
new file mode 100644
index 0000000..d2de3a3
--- /dev/null
+++ b/signature.diff
@@ -0,0 +1,21 @@
+Backported fix.
+
+--- ./lib/signature.c.orig	2005-12-14 21:14:45.000000000 +0000
++++ ./lib/signature.c	2005-12-16 18:24:53.000000000 +0000
+@@ -268,7 +268,7 @@ rpmRC rpmReadSignature(FD_t fd, Header *
+ 
+ 	xx = headerVerifyInfo(1, dl, info, &entry->info, 1);
+ 	if (xx != -1 ||
+-	    !(entry->info.tag == RPMTAG_HEADERSIGNATURES
++	    !((entry->info.tag == RPMTAG_HEADERSIGNATURES || entry->info.tag == RPMTAG_HEADERIMAGE)
+ 	   && entry->info.type == RPM_BIN_TYPE
+ 	   && entry->info.count == REGION_TAG_COUNT))
+ 	{
+@@ -583,6 +583,7 @@ static int makeGPGSignature(const char *
+ 	if (gpg_path && *gpg_path != '\0')
+ 	    (void) dosetenv("GNUPGHOME", gpg_path, 1);
+ /*@=boundsread@*/
++	(void) dosetenv("LC_ALL", "C", 1);
+ 
+ 	unsetenv("MALLOC_CHECK_");
+ 	cmd = rpmExpand("%{?__gpg_sign_cmd}", NULL);
diff --git a/signwriteerror.diff b/signwriteerror.diff
new file mode 100644
index 0000000..87174fb
--- /dev/null
+++ b/signwriteerror.diff
@@ -0,0 +1,16 @@
+Call Fflush at the end of writeing a signed package to catch out
+of disk space errors.
+
+--- ./lib/rpmchecksig.c.orig	2005-12-14 20:54:39.000000000 +0000
++++ ./lib/rpmchecksig.c	2006-03-21 18:00:22.000000000 +0000
+@@ -116,6 +116,10 @@ static int copyFile(FD_t *sfdp, const ch
+ 	rpmError(RPMERR_FREAD, _("%s: Fread failed: %s\n"), *sfnp, Fstrerror(*sfdp));
+ 	goto exit;
+     }
++    if (Fflush(*tfdp) != 0) {
++	rpmError(RPMERR_FWRITE, _("%s: Fflush failed: %s\n"), *tfnp,
++	    Fstrerror(*tfdp));
++    }
+ 
+     rc = 0;
+ 
diff --git a/specfilemacro.diff b/specfilemacro.diff
deleted file mode 100644
index a9663dc..0000000
--- a/specfilemacro.diff
+++ /dev/null
@@ -1,10 +0,0 @@
---- ./build/parseSpec.c.orig	2010-12-03 12:11:57.000000000 +0000
-+++ ./build/parseSpec.c	2011-05-11 15:58:37.000000000 +0000
-@@ -519,6 +519,7 @@ static rpmSpec parseSpec(const char *spe
-     spec = newSpec();
- 
-     spec->specFile = rpmGetPath(specFile, NULL);
-+    addMacro(spec->macros, "_specfile", NULL, spec->specFile, RMIL_SPEC);
-     spec->fileStack = newOpenFileInfo();
-     spec->fileStack->fileName = xstrdup(spec->specFile);
-     /* If buildRoot not specified, use default %{buildroot} */
diff --git a/spectest.diff b/spectest.diff
new file mode 100644
index 0000000..5416193
--- /dev/null
+++ b/spectest.diff
@@ -0,0 +1,19 @@
+Allow characters >127 that don't fit the current locale in the
+specfile (e.g. latin1 in utf-8 locale).
+
+--- ./build.c.orig	2004-10-17 19:00:10.000000000 +0000
++++ ./build.c	2005-12-19 17:52:25.000000000 +0000
+@@ -87,8 +87,13 @@ static int isSpecFile(const char * specf
+ 	    /*@switchbreak@*/ break;
+ /*@-boundsread@*/
+ 	default:
++#if 0
+ 	    if (checking && !(isprint(*s) || isspace(*s))) return 0;
+ 	    /*@switchbreak@*/ break;
++#else
++	    if (checking && !(isprint(*s) || isspace(*s)) && *(unsigned char *)s < 32) return 0;
++	    /*@switchbreak@*/ break;
++#endif
+ /*@=boundsread@*/
+ 	}
+     }
diff --git a/sqcondmutex.diff b/sqcondmutex.diff
new file mode 100644
index 0000000..61fed9f
--- /dev/null
+++ b/sqcondmutex.diff
@@ -0,0 +1,119 @@
+Backported fix. AFAIK needed for smart.
+
+Index: rpmio/rpmsq.c
+===================================================================
+--- rpmio/rpmsq.c.orig
++++ rpmio/rpmsq.c
+@@ -218,7 +218,6 @@ fprintf(stderr, "    Insert(%p): %p\n", 
+ 
+ 	    sq->id = ME();
+ 	    ret = pthread_mutex_init(&sq->mutex, NULL);
+-	    ret = pthread_cond_init(&sq->cond, NULL);
+ 	    insque(elem, (prev != NULL ? prev : rpmsqQueue));
+ 	    ret = sigrelse(SIGCHLD);
+ 	}
+@@ -240,8 +239,11 @@ fprintf(stderr, "    Remove(%p): %p\n", 
+ 	ret = sighold (SIGCHLD);
+ 	if (ret == 0) {
+ 	    remque(elem);
+-	    ret = pthread_cond_destroy(&sq->cond);
+-	    ret = pthread_mutex_destroy(&sq->mutex);
++	   
++	    /* Unlock the mutex and then destroy it */ 
++	    if((ret = pthread_mutex_unlock(&sq->mutex)) == 0)
++		ret = pthread_mutex_destroy(&sq->mutex);
++
+ 	    sq->id = NULL;
+ /*@-bounds@*/
+ 	    if (sq->pipes[1])	ret = close(sq->pipes[1]);
+@@ -315,11 +317,20 @@ void rpmsqAction(int signum,
+ 		     sq != NULL && sq != rpmsqQueue;
+ 		     sq = sq->q_forw)
+ 		{
++		    int ret;
++
+ 		    if (sq->child != reaped)
+ 			/*@innercontinue@*/ continue;
+ 		    sq->reaped = reaped;
+ 		    sq->status = status;
+-		    (void) pthread_cond_signal(&sq->cond);
++
++		    /* Unlock the mutex.  The waiter will then be able to 
++		     * aquire the lock.  
++		     *
++		     * XXX: jbj, wtd, if this fails? 
++		     */
++		    ret = pthread_mutex_unlock(&sq->mutex); 
++
+ 		    /*@innerbreak@*/ break;
+ 		}
+ 	    }
+@@ -391,6 +402,7 @@ pid_t rpmsqFork(rpmsq sq)
+ {
+     pid_t pid;
+     int xx;
++    int nothreads = 0;   /* XXX: Shouldn't this be a global? */
+ 
+     if (sq->reaper) {
+ 	xx = rpmsqInsert(sq, NULL);
+@@ -405,6 +417,24 @@ fprintf(stderr, "    Enable(%p): %p\n", 
+ 
+     xx = sighold(SIGCHLD);
+ 
++    /* 
++     * Initialize the cond var mutex.   We have to aquire the lock we 
++     * use for the condition before we fork.  Otherwise it is possible for
++     * the child to exit, we get sigchild and the sig handler to send 
++     * the condition signal before we are waiting on the condition.
++     */
++    if (!nothreads) {
++	if(pthread_mutex_lock(&sq->mutex)) {
++	    /* Yack we did not get the lock, lets just give up */
++/*@-bounds@*/
++	    xx = close(sq->pipes[0]);
++	    xx = close(sq->pipes[1]);
++	    sq->pipes[0] = sq->pipes[1] = -1;
++/*@=bounds@*/
++	    goto out;
++	}
++    }
++
+     pid = fork();
+     if (pid < (pid_t) 0) {		/* fork failed.  */
+ 	sq->child = (pid_t)-1;
+@@ -463,10 +493,6 @@ static int rpmsqWaitUnregister(rpmsq sq)
+     /* Protect sq->reaped from handler changes. */
+     ret = sighold(SIGCHLD);
+ 
+-    /* Initialize the cond var mutex. */
+-    if (!nothreads)
+-	ret = pthread_mutex_lock(&sq->mutex);
+-
+     /* Start the child, linux often runs child before parent. */
+ /*@-bounds@*/
+     if (sq->pipes[0] >= 0)
+@@ -487,7 +513,13 @@ static int rpmsqWaitUnregister(rpmsq sq)
+ 	    ret = sigpause(SIGCHLD);
+ 	else {
+ 	    xx = sigrelse(SIGCHLD);
+-	    ret = pthread_cond_wait(&sq->cond, &sq->mutex);
++	    
++	    /* 
++	     * We start before the fork with this mutex locked;
++	     * The only one that unlocks this the signal handler.
++	     * So if we get the lock the child has been reaped.
++	     */
++	    ret = pthread_mutex_lock(&sq->mutex);
+ 	    xx = sighold(SIGCHLD);
+ 	}
+     }
+@@ -496,9 +528,6 @@ static int rpmsqWaitUnregister(rpmsq sq)
+     /* Accumulate stopwatch time spent waiting, potential performance gain. */
+     sq->ms_scriptlets += rpmswExit(&sq->op, -1)/1000;
+ 
+-    /* Tear down cond var mutex, our child has been reaped. */
+-    if (!nothreads)
+-	xx = pthread_mutex_unlock(&sq->mutex);
+     xx = sigrelse(SIGCHLD);
+ 
+ #ifdef _RPMSQ_DEBUG
diff --git a/srcdefattr.diff b/srcdefattr.diff
new file mode 100644
index 0000000..a2f0df6
--- /dev/null
+++ b/srcdefattr.diff
@@ -0,0 +1,68 @@
+Add new srcdefattr macro. Usefull for assuring that all files
+in the src rpms belong to root:root [#48870] rh#125515
+
+--- ./build/files.c.orig	2005-12-14 19:22:43.000000000 +0000
++++ ./build/files.c	2006-02-17 13:57:25.000000000 +0000
+@@ -2260,7 +2274,15 @@ int processSourceFiles(Spec spec)
+     struct FileList_s fl;
+     char *s, **files, **fp;
+     Package pkg;
++    static char *_srcdefattr;
++    static int oneshot;
+ 
++    if (!oneshot) {
++	_srcdefattr = rpmExpand("%{?_srcdefattr}", NULL);
++	if (_srcdefattr && !*_srcdefattr)
++	    _srcdefattr = _free(_srcdefattr);
++	oneshot = 1;
++    }
+     sourceFiles = newStringBuf();
+ 
+     /* XXX
+@@ -2311,6 +2333,15 @@ int processSourceFiles(Spec spec)
+ 
+     spec->sourceCpioList = NULL;
+ 
++    /* Init the file list structure */
++    memset(&fl, 0, sizeof(fl));
++    if (_srcdefattr) {
++	char *a = xmalloc(strlen(_srcdefattr) + 9 + 1);
++	strcpy(a, "%defattr ");
++	strcpy(a + 9, _srcdefattr);
++	parseForAttr(a, &fl);
++	a = _free(a);
++    }
+     fl.fileList = xcalloc((spec->numSources + 1), sizeof(*fl.fileList));
+     fl.processingFailed = 0;
+     fl.fileListRecsUsed = 0;
+@@ -2359,8 +2390,20 @@ int processSourceFiles(Spec spec)
+ 	    fl.processingFailed = 1;
+ 	}
+ 
+-	flp->uname = getUname(flp->fl_uid);
+-	flp->gname = getGname(flp->fl_gid);
++	if (fl.def_ar.ar_fmodestr) {
++	    flp->fl_mode &= S_IFMT;
++	    flp->fl_mode |= fl.def_ar.ar_fmode;
++	}
++	if (fl.def_ar.ar_user) {
++	    flp->uname = getUnameS(fl.def_ar.ar_user);
++	} else {
++	    flp->uname = getUname(flp->fl_uid);
++	}
++	if (fl.def_ar.ar_group) {
++	    flp->gname = getGnameS(fl.def_ar.ar_group);
++	} else {
++	    flp->gname = getGname(flp->fl_gid);
++	}
+ 	flp->langs = xstrdup("");
+ 	
+ 	fl.totalFileSize += flp->fl_size;
+@@ -2384,6 +2427,7 @@ int processSourceFiles(Spec spec)
+ 
+     sourceFiles = freeStringBuf(sourceFiles);
+     fl.fileList = freeFileList(fl.fileList, fl.fileListRecsUsed);
++    freeAttrRec(&fl.def_ar);
+     return fl.processingFailed;
+ }
+ 
diff --git a/suspendlock.diff b/suspendlock.diff
index f4c981b..be5188f 100644
--- a/suspendlock.diff
+++ b/suspendlock.diff
@@ -2,128 +2,36 @@ Suspend exclusive database lock when scriptlets get called, allowing
 read access in scriptlets. Only needed for DB_PRIVATE (aka global)
 locking.
 
---- ./lib/backend/db3.c.orig	2011-05-12 10:24:20.000000000 +0000
-+++ ./lib/backend/db3.c	2011-05-12 10:26:14.000000000 +0000
-@@ -640,3 +640,59 @@ int dbiOpen(rpmdb rdb, rpmDbiTagVal rpmt
- 
-     return rc;
- }
-+
-+int dbiSuspendDBLock(dbiIndex dbi, unsigned int flags)
-+{
-+    struct flock l;
-+    int rc = 0;
-+    int fdno = -1;
-+
-+    if (!dbi->dbi_lockdbfd)
-+	return 0;
-+    if (!(dbi->dbi_rpmdb->db_mode & (O_RDWR|O_WRONLY)))
-+	return 0;
-+    if (_lockdbfd == 0)
-+	return 0;
-+    if (!(dbi->dbi_db->fd(dbi->dbi_db, &fdno) == 0 && fdno >= 0))
-+	return 1;
-+    memset(&l, 0, sizeof(l));
-+    l.l_whence = 0;
-+    l.l_start = 0;
-+    l.l_len = 0;
-+    l.l_type = F_RDLCK;
-+    rc = fcntl(fdno, F_SETLK, (void *)&l);
-+    if (rc)
-+	rpmlog(RPMLOG_WARNING, _("could not suspend database lock\n"));
-+    return rc;
-+}
-+
-+int dbiResumeDBLock(dbiIndex dbi, unsigned int flags)
-+{
-+    struct flock l;
-+    int rc = 0;
-+    int tries;
-+    int fdno = -1;
-+
-+    if (!dbi->dbi_lockdbfd)
-+	return 0;
-+    if (!(dbi->dbi_rpmdb->db_mode & (O_RDWR|O_WRONLY)))
-+	return 0;
-+    if (_lockdbfd == 0)
-+	return 0;
-+    if (!(dbi->dbi_db->fd(dbi->dbi_db, &fdno) == 0 && fdno >= 0))
-+	return 1;
-+    for (tries = 0; tries < 2; tries++) {
-+	memset(&l, 0, sizeof(l));
-+	l.l_whence = 0;
-+	l.l_start = 0;
-+	l.l_len = 0;
-+	l.l_type = F_WRLCK;
-+	rc = fcntl(fdno, tries ? F_SETLKW : F_SETLK, (void *)&l);
-+	if (!rc)
-+	    break;
-+	if (tries == 0)
-+	    rpmlog(RPMLOG_WARNING, _("waiting to reestablish exclusive database lock\n"));
-+    }
-+    return rc;
-+}
-+
---- ./lib/backend/dbi.h.orig	2010-12-21 09:48:21.000000000 +0000
-+++ ./lib/backend/dbi.h	2011-05-12 10:24:57.000000000 +0000
-@@ -263,6 +263,24 @@ int dbiFlags(dbiIndex dbi);
- RPM_GNUC_INTERNAL
- const char * dbiName(dbiIndex dbi);
- 
-+/** \ingroup dbi
-+ * Suspend the exclusive lock on the dbi
-+ * @param dbi		index database handle
-+ * @param flags		(unused)
-+ * @return		0 on success
-+ */
-+RPM_GNUC_INTERNAL
-+int dbiSuspendDBLock(dbiIndex dbi, unsigned int flags);
-+
-+/** \ingroup dbi
-+ * Reacquire an exclusive lock on the dbi
-+ * @param dbi		index database handle
-+ * @param flags		(unused)
-+ * @return		0 on success
-+ */
-+RPM_GNUC_INTERNAL
-+int dbiResumeDBLock(dbiIndex dbi, unsigned int flags);
-+
- #ifdef __cplusplus
- }
- #endif
---- ./lib/psm.c.orig	2011-05-12 10:23:47.000000000 +0000
-+++ ./lib/psm.c	2011-05-12 10:24:57.000000000 +0000
-@@ -412,10 +412,12 @@ static rpmRC runScript(rpmpsm psm, ARGV_
- 		     script->tag != RPMTAG_VERIFYSCRIPT);
-     int selinux = !(rpmtsFlags(psm->ts) & RPMTRANS_FLAG_NOCONTEXTS);
+I hijacked the dbiSync function for this because I did not want
+to change the ABI.
+
+Index: lib/psm.c
+===================================================================
+--- lib/psm.c.orig
++++ lib/psm.c
+@@ -799,6 +799,8 @@ static rpmRC runScript(rpmpsm psm, Heade
+     }
+     if (out == NULL) return RPMRC_FAIL;	/* XXX can't happen */
  
 +    rpmtsSuspendResumeDBLock(psm->ts, 0);
-     rpmswEnter(rpmtsOp(psm->ts, RPMTS_OP_SCRIPTLETS), 0);
-     rc = rpmScriptRun(script, arg1, arg2, rpmtsScriptFd(psm->ts),
- 		      prefixes, warn_only, selinux);
-     rpmswExit(rpmtsOp(psm->ts, RPMTS_OP_SCRIPTLETS), 0);
-+    rpmtsSuspendResumeDBLock(psm->ts, 1);
- 
-     /* 
-      * Notify callback for all errors. "total" abused for warning/error,
---- ./lib/rpmdb.c.orig	2011-05-12 10:23:47.000000000 +0000
-+++ ./lib/rpmdb.c	2011-05-12 10:24:57.000000000 +0000
-@@ -674,6 +674,12 @@ int rpmdbSync(rpmdb db)
-     return dbiForeach(db->_dbi, dbiSync, 0);
- }
- 
-+int rpmdbSuspendResumeDBLock(rpmdb db, int mode)
-+{
-+    if (db == NULL) return 0;
-+    return dbiForeach(db->_dbi, mode ? dbiResumeDBLock : dbiSuspendDBLock, 0);
-+}
 +
- static rpmdb newRpmdb(const char * root, const char * home,
- 		      int mode, int perms, int flags)
- {
---- ./lib/rpmts.c.orig	2010-12-22 11:17:20.000000000 +0000
-+++ ./lib/rpmts.c	2011-05-12 10:24:57.000000000 +0000
-@@ -95,6 +95,11 @@ int rpmtsOpenDB(rpmts ts, int dbmode)
+     /*@-branchstate@*/
+     xx = rpmsqFork(&psm->sq);
+     if (psm->sq.child == 0) {
+@@ -924,6 +926,8 @@ static rpmRC runScript(rpmpsm psm, Heade
+ 
+     (void) psmWait(psm);
+ 
++    rpmtsSuspendResumeDBLock(psm->ts, 1);
++
+   /* XXX filter order dependent multilib "other" arch helper error. */
+   if (!(psm->sq.reaped >= 0 && !strcmp(argv[0], "/usr/sbin/glibc_post_upgrade") && WEXITSTATUS(psm->sq.status) == 110)) {
+     if (psm->sq.reaped < 0) {
+Index: lib/rpmts.c
+===================================================================
+--- lib/rpmts.c.orig
++++ lib/rpmts.c
+@@ -190,6 +190,11 @@ int rpmtsOpenDB(rpmts ts, int dbmode)
      return rc;
  }
  
@@ -134,15 +42,120 @@ locking.
 +
  int rpmtsInitDB(rpmts ts, int dbmode)
  {
-     rpmlock lock = rpmtsAcquireLock(ts);
---- ./lib/rpmts.h.orig	2010-12-21 09:50:50.000000000 +0000
-+++ ./lib/rpmts.h	2011-05-12 10:24:57.000000000 +0000
-@@ -423,6 +423,8 @@ rpmdb rpmtsGetRdb(rpmts ts);
- void * rpmtsNotify(rpmts ts, rpmte te,
-                 rpmCallbackType what, rpm_loff_t amount, rpm_loff_t total);
+     void *lock = rpmtsAcquireLock(ts);
+Index: lib/rpmts.h
+===================================================================
+--- lib/rpmts.h.orig
++++ lib/rpmts.h
+@@ -470,6 +470,10 @@ int rpmtsRebuildDB(rpmts ts)
+ 	/*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/
+ 	/*@modifies ts, rpmGlobalMacroContext, fileSystem, internalState @*/;
  
-+int rpmtsSuspendResumeDBLock(rpmts ts, int mode);
++int rpmtsSuspendResumeDBLock(rpmts ts, int mode)
++	/*@globals fileSystem @*/
++	/*@modifies fileSystem @*/;
 +
  /** \ingroup rpmts
-  * Return number of (ordered) transaction set elements.
+  * Verify the database used by the transaction.
   * @param ts		transaction set
+Index: rpmdb/db3.c
+===================================================================
+--- rpmdb/db3.c.orig
++++ rpmdb/db3.c
+@@ -458,6 +458,8 @@ errxit:
+ }
+ /*@=moduncon@*/
+ 
++static int db3SuspendResumeLock(dbiIndex dbi, int mode);
++
+ static int db3sync(dbiIndex dbi, unsigned int flags)
+ 	/*@globals fileSystem @*/
+ 	/*@modifies fileSystem @*/
+@@ -466,6 +468,10 @@ static int db3sync(dbiIndex dbi, unsigne
+     int rc = 0;
+     int _printit;
+ 
++    if (flags == (unsigned int)-1)
++	return db3SuspendResumeLock(dbi, 0);
++    if (flags == (unsigned int)-2)
++	return db3SuspendResumeLock(dbi, 1);
+     if (db != NULL)
+ 	rc = db->sync(db, flags);
+     /* XXX DB_INCOMPLETE is returned occaisionally with multiple access. */
+@@ -1412,6 +1418,50 @@ static int db3open(rpmdb rpmdb, rpmTag r
+     /*@=nullstate =compmempass@*/
+ }
+ 
++static int
++db3SuspendResumeLock(dbiIndex dbi, int mode)
++{
++    struct flock l;
++    int rc = 0;
++    int tries;
++    int fdno = -1;
++
++    if (!dbi->dbi_lockdbfd)
++	return 0;
++    if (!(dbi->dbi_mode & (O_RDWR|O_WRONLY)))
++	return 0;
++    if ((dbi->dbi_ecflags & DB_CLIENT) && dbi->dbi_host)
++	return 0;
++    if (dbi->dbi_use_dbenv && _lockdbfd == 0)
++	return 0;
++    if (!(dbi->dbi_db->fd(dbi->dbi_db, &fdno) == 0 && fdno >= 0))
++	return 1;
++    if (mode == 0) {
++	memset(&l, 0, sizeof(l));
++	l.l_whence = 0;
++	l.l_start = 0;
++	l.l_len = 0;
++	l.l_type = F_RDLCK;
++	rc = fcntl(fdno, F_SETLK, (void *) &l);
++	if (rc)
++	    rpmMessage(RPMMESS_WARNING, _("could not suspend database lock\n"));
++    } else {
++	for (tries = 0; tries < 2; tries++) {
++	    memset(&l, 0, sizeof(l));
++	    l.l_whence = 0;
++	    l.l_start = 0;
++	    l.l_len = 0;
++	    l.l_type = F_WRLCK;
++	    rc = fcntl(fdno, tries ? F_SETLKW : F_SETLK, (void *) &l);
++	    if (!rc)
++		break;
++	    if (tries == 0)
++		rpmMessage(RPMMESS_WARNING, _("waiting to reestablish exclusive database lock\n"));
++	}
++    }
++    return rc;
++}
++
+ /** \ingroup db3
+  */
+ /*@-exportheadervar@*/
+Index: rpmdb/rpmdb.c
+===================================================================
+--- rpmdb/rpmdb.c.orig
++++ rpmdb/rpmdb.c
+@@ -945,6 +945,21 @@ int rpmdbSync(rpmdb db)
+     return rc;
+ }
+ 
++int rpmdbSuspendResumeDBLock(rpmdb db, int mode)
++{
++    int dbix;
++    int rc = 0;
++    if (db == NULL) return 0;
++    for (dbix = 0; dbix < db->db_ndbi; dbix++) {
++	int xx;
++	if (db->_dbi[dbix] == NULL)
++	    continue;
++	xx = dbiSync(db->_dbi[dbix], mode ? -2 : -1);
++	if (xx && rc == 0) rc = xx;
++    }
++    return rc;
++}
++
+ /*@-mods@*/	/* FIX: dbTemplate structure assignment */
+ static /*@only@*/ /*@null@*/
+ rpmdb newRpmdb(/*@kept@*/ /*@null@*/ const char * root,
diff --git a/taggedfileindex.diff b/taggedfileindex.diff
index 7fc306d..693e28d 100644
--- a/taggedfileindex.diff
+++ b/taggedfileindex.diff
@@ -1,14 +1,119 @@
-This used to be the taggedfileindex patch, but it's gone.
-The remaining part just strips off the tag.
---- ./lib/rpmdb.c.orig	2011-05-11 14:27:32.000000000 +0000
-+++ ./lib/rpmdb.c	2011-05-11 15:14:39.000000000 +0000
-@@ -257,6 +257,9 @@ static int dbt2set(dbiIndex dbi, DBT * d
- 		_DBSWAP(hdrNum);
- 		_DBSWAP(tagNum);
- 	    }
-+	    /* remove tagged directory info */
-+	    if (tagNum.ui & 0x80000000)
-+		tagNum.ui &= 0x0000ffff;
- 	    set->recs[i].hdrNum = hdrNum.ui;
- 	    set->recs[i].tagNum = tagNum.ui;
- 	}
+The taggedfileindex patch. Speeds up database searches, but breaks
+fingerprint semantics. Needs findfplistexclude.diff.
+rh#103204
+
+Index: rpmdb/rpmdb.c
+===================================================================
+--- rpmdb/rpmdb.c.orig
++++ rpmdb/rpmdb.c
+@@ -1223,6 +1223,16 @@ int rpmdbVerify(const char * prefix)
+     return rc;
+ }
+ 
++static inline unsigned int taghash(const char *s)
++{
++    int c;
++    unsigned int r = 0;
++    while ((c = *(const unsigned char *)s++) != 0)
++	if (c != '/')
++	    r += (r << 3) + c;
++    return ((r & 0x7fff) | 0x8000) << 16;
++}
++
+ /**
+  * Find file matches in database.
+  * @param db		rpm database
+@@ -1302,6 +1312,11 @@ if (key->size == 0) key->size++;	/* XXX 
+ if (rc == 0)
+ (void) dbt2set(dbi, data, &allMatches);
+ 
++	/* strip off directory tags */
++	if (allMatches != NULL)
++	    for (i = 0; i < allMatches->count; i++)
++		if (allMatches->recs[i].tagNum & 0x80000000)
++		    allMatches->recs[i].tagNum &= 0x0000ffff;
+ 	xx = dbiCclose(dbi, dbcursor, 0);
+ 	dbcursor = NULL;
+     } else
+@@ -2408,7 +2423,7 @@ static void rpmdbSortIterator(/*@null@*/
+ }
+ 
+ /*@-bounds@*/ /* LCL: segfault */
+-static int rpmdbGrowIterator(/*@null@*/ rpmdbMatchIterator mi, int fpNum, unsigned int exclude)
++static int rpmdbGrowIterator(/*@null@*/ rpmdbMatchIterator mi, int fpNum, unsigned int exclude, unsigned int tag)
+ 	/*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/
+ 	/*@modifies mi, rpmGlobalMacroContext, fileSystem, internalState @*/
+ {
+@@ -2456,10 +2471,16 @@ static int rpmdbGrowIterator(/*@null@*/ 
+     set = NULL;
+     (void) dbt2set(dbi, data, &set);
+ 
+-    /* prune the set against exclude */
++    /* prune the set against exclude and tag */
+     for (i = j = 0; i < set->count; i++) {
+ 	if (exclude && set->recs[i].hdrNum == exclude)
+ 	    continue;
++	if (set->recs[i].tagNum & 0x80000000) {
++	    /* tagged entry */
++	    if ((set->recs[i].tagNum & 0xffff0000) != tag)
++		continue;
++	    set->recs[i].tagNum &= 0x0000ffff;
++	}
+ 	if (i != j)
+ 	    set->recs[j] = set->recs[i];
+ 	j++;
+@@ -2987,7 +3008,9 @@ DBT * data = alloca(sizeof(*data));
+     HFD_t hfd = headerFreeData;
+     sigset_t signalMask;
+     const char ** baseNames;
+-    rpmTagType bnt;
++    const char ** dirNames;
++    int_32 * dirIndexes, *dirs;
++    rpmTagType bnt, dit, dnt;
+     int count = 0;
+     dbiIndex dbi;
+     int dbix;
+@@ -3027,6 +3050,13 @@ memset(data, 0, sizeof(*data));
+      */
+ 
+     xx = hge(h, RPMTAG_BASENAMES, &bnt, (void **) &baseNames, &count);
++    xx = hge(h, RPMTAG_DIRINDEXES, &dit, (void **) &dirIndexes, NULL);
++    xx = hge(h, RPMTAG_DIRNAMES, &dnt, (void **) &dirNames, NULL);
++
++    /* save dirIndexes, because expandFilelist may free it */
++    dirs = alloca(count * sizeof(*dirs));
++    for (xx = 0; xx < count; xx++)
++	dirs[xx] = dirIndexes[xx];
+ 
+     if (_noDirTokens)
+ 	expandFilelist(h);
+@@ -3243,6 +3273,11 @@ data->size = 0;
+ 		 */
+ 		rec->tagNum = i;
+ 		switch (dbi->dbi_rpmtag) {
++		case RPMTAG_BASENAMES:
++		    /* tag index entry with directory hash */
++		    if (i < 0x010000)
++			rec->tagNum |= taghash(dirNames[dirs[i]]);
++		    /*@switchbreak@*/ break;
+ 		case RPMTAG_PUBKEYS:
+ 		    /*@switchbreak@*/ break;
+ 		case RPMTAG_FILEMD5S:
+@@ -3417,6 +3452,8 @@ if (key->size == 0) key->size++;	/* XXX 
+     }
+ 
+ exit:
++    dirIndexes = hfd(dirIndexes, dit);
++    dirNames = hfd(dirNames, dnt);
+     (void) unblockSignals(db, &signalMask);
+ 
+     return ret;
+@@ -3505,7 +3542,7 @@ if (key->size == 0) key->size++;	/* XXX 
+ 	if (!exclude && skipDir(fpList[i].entry->dirName))
+ 	    continue;
+ 
+-	xx = rpmdbGrowIterator(mi, i, exclude);
++	xx = rpmdbGrowIterator(mi, i, exclude, taghash(fpList[i].entry->dirName));
+ 
+     }
+ 
diff --git a/tagsbackport.diff b/tagsbackport.diff
new file mode 100644
index 0000000..69d6830
--- /dev/null
+++ b/tagsbackport.diff
@@ -0,0 +1,37 @@
+Backported some new tags and sense values.
+
+Index: lib/rpmlib.h
+===================================================================
+--- lib/rpmlib.h.orig
++++ lib/rpmlib.h
+@@ -447,6 +447,19 @@ typedef enum rpmTag_e {
+     RPMTAG_PRIORITY		= 1162, /* i   extension placeholder */
+     RPMTAG_CVSID		= 1163, /* s */
+ #define	RPMTAG_SVNID	RPMTAG_CVSID	/* s */
++    RPMTAG_BLINKPKGID		= 1164, /* s[] */
++    RPMTAG_BLINKHDRID		= 1165, /* s[] */
++    RPMTAG_BLINKNEVRA		= 1166, /* s[] */
++    RPMTAG_FLINKPKGID		= 1167, /* s[] */
++    RPMTAG_FLINKHDRID		= 1168, /* s[] */
++    RPMTAG_FLINKNEVRA		= 1169, /* s[] */
++    RPMTAG_PACKAGEORIGIN	= 1170, /* s */
++    RPMTAG_TRIGGERPREIN		= 1171, /*!< internal */
++    RPMTAG_BUILDSUGGESTS	= 1172, /*!< internal */
++    RPMTAG_BUILDENHANCES	= 1173, /*!< internal */
++    RPMTAG_SCRIPTSTATES		= 1174, /*!< i scriptlet exit codes */
++    RPMTAG_SCRIPTMETRICS	= 1175, /*!< i scriptlet execution times */
++    RPMTAG_BUILDCPUCLOCK	= 1176, /*!< i */
+ 
+ /*@-enummemuse@*/
+     RPMTAG_FIRSTFREE_TAG	/*!< internal */
+@@ -530,7 +543,9 @@ typedef	enum rpmsenseFlags_e {
+ /*@=enummemuse@*/
+     RPMSENSE_KEYRING	= (1 << 26),
+     RPMSENSE_PATCHES	= (1 << 27),
+-    RPMSENSE_CONFIG	= (1 << 28)
++    RPMSENSE_CONFIG	= (1 << 28),
++    RPMSENSE_PROBE	= (1 << 29),
++    RPMSENSE_PACKAGE	= (1 << 30)
+ } rpmsenseFlags;
+ 
+ #define	RPMSENSE_SENSEMASK	15	 /* Mask to get senses, ie serial, */
diff --git a/totalsizenoexclude.diff b/totalsizenoexclude.diff
new file mode 100644
index 0000000..84f9509
--- /dev/null
+++ b/totalsizenoexclude.diff
@@ -0,0 +1,13 @@
+Do not could exlcuded files in disk space calculation. Backported.
+
+--- ./build/files.c.orig	2005-12-14 19:22:43.000000000 +0000
++++ ./build/files.c	2006-02-17 13:57:25.000000000 +0000
+@@ -1677,7 +1689,7 @@ static int addFile(FileList fl, const ch
+ 	} else
+ 	    i = fl->fileListRecsUsed;
+ 
+-	if (S_ISREG(flp->fl_mode) && i >= fl->fileListRecsUsed)
++	if (!(flp->flags & RPMFILE_EXCLUDE) && S_ISREG(flp->fl_mode) && i >= fl->fileListRecsUsed)
+ 	    fl->totalFileSize += flp->fl_size;
+     }
+ 
diff --git a/translockroot.diff b/translockroot.diff
new file mode 100644
index 0000000..fa9bc5f
--- /dev/null
+++ b/translockroot.diff
@@ -0,0 +1,37 @@
+Obey --root option when calculating the directory of the
+transaction lock.
+
+Already fixed in rpm-4.4.7.
+
+--- ./lib/rpmlock.c.orig	2005-12-21 14:34:27.000000000 +0000
++++ ./lib/rpmlock.c	2005-12-21 14:42:59.000000000 +0000
+@@ -45,12 +45,18 @@ static rpmlock rpmlock_new(/*@unused@*/ 
+ 	}
+ 	if (lock != NULL) {
+ 		mode_t oldmask = umask(022);
+-		lock->fd = open(rpmlock_path, O_RDWR|O_CREAT, 0644);
++		char *path = rpmlock_path;
++		if (rootdir && *rootdir == '/' && rootdir[1] != 0) {
++			path = xmalloc(strlen(rootdir) + strlen(rpmlock_path) + 1);
++			strcpy(path, rootdir);
++			strcat(path, rpmlock_path);
++		}
++		lock->fd = open(path, O_RDWR|O_CREAT, 0644);
+ 		(void) umask(oldmask);
+ 
+ /*@-branchstate@*/
+ 		if (lock->fd == -1) {
+-			lock->fd = open(rpmlock_path, O_RDONLY);
++			lock->fd = open(path, O_RDONLY);
+ 			if (lock->fd == -1) {
+ 				free(lock);
+ 				lock = NULL;
+@@ -64,6 +70,8 @@ static rpmlock rpmlock_new(/*@unused@*/ 
+ 			lock->openmode = RPMLOCK_WRITE | RPMLOCK_READ;
+ /*@=nullderef@*/
+ 		}
++		if (path != rpmlock_path)
++			free(path);
+ /*@=branchstate@*/
+ 	}
+ /*@-compdef@*/
diff --git a/vercmp.diff b/vercmp.diff
new file mode 100644
index 0000000..8a2bfd8
--- /dev/null
+++ b/vercmp.diff
@@ -0,0 +1,31 @@
+Patch rpmvercmp corner case where it said both A < B and B < A.
+Also clarifies some comments.
+Patch from Peter Bowan.
+
+--- ./lib/rpmvercmp.c.orig	2006-02-10 16:22:02.000000000 +0000
++++ ./lib/rpmvercmp.c	2006-02-10 16:20:49.000000000 +0000
+@@ -39,6 +39,9 @@ int rpmvercmp(const char * a, const char
+ 	while (*one && !xisalnum(*one)) one++;
+ 	while (*two && !xisalnum(*two)) two++;
+ 
++	/* If we ran to the end of either, we are finished with the loop */
++	if (!(*one && *two)) break;
++
+ 	str1 = one;
+ 	str2 = two;
+ 
+@@ -64,9 +67,13 @@ int rpmvercmp(const char * a, const char
+ 	*str2 = '\0';
+ /*@=boundswrite@*/
+ 
++	/* this cannot happen, as we previously tested to make sure that */
++	/* the first string has a non-null segment */
++	if (one == str1) return -1;	/* arbitrary */
++
+ 	/* take care of the case where the two version segments are */
+ 	/* different types: one numeric, the other alpha (i.e. empty) */
+-	if (one == str1) return -1;	/* arbitrary */
++	/* numeric segments are always newer than alpha segments */
+ 	/* XXX See patch #60884 (and details) from bugzilla #50977. */
+ 	if (two == str2) return (isnum ? 1 : -1);
+ 
diff --git a/verify_p.diff b/verify_p.diff
deleted file mode 100644
index 8eeea06..0000000
--- a/verify_p.diff
+++ /dev/null
@@ -1,49 +0,0 @@
-Make 'rpm -Vp <rpm>' work again.
-
---- ./lib/rpmte.c.orig	2011-05-12 15:22:06.000000000 +0000
-+++ ./lib/rpmte.c	2011-05-12 15:23:39.000000000 +0000
-@@ -905,15 +905,19 @@ int rpmteProcess(rpmte te, pkgGoal goal)
- 	}
-     }
- 
--    rpmteRunAllCollections(te, PLUGINHOOK_COLL_PRE_REMOVE);
--
--    if (rpmteOpen(te, reset_fi)) {
-+    if (goal == PKG_VERIFY) {
- 	failed = rpmpsmRun(te->ts, te, goal);
--	rpmteClose(te, reset_fi);
--    }
-+    } else {
-+	rpmteRunAllCollections(te, PLUGINHOOK_COLL_PRE_REMOVE);
-+
-+	if (rpmteOpen(te, reset_fi)) {
-+	    failed = rpmpsmRun(te->ts, te, goal);
-+	    rpmteClose(te, reset_fi);
-+	}
-     
--    rpmteRunAllCollections(te, PLUGINHOOK_COLL_POST_ADD);
--    rpmteRunAllCollections(te, PLUGINHOOK_COLL_POST_ANY);
-+	rpmteRunAllCollections(te, PLUGINHOOK_COLL_POST_ADD);
-+	rpmteRunAllCollections(te, PLUGINHOOK_COLL_POST_ANY);
-+    }
- 
-     /* XXX should %pretrans failure fail the package install? */
-     if (failed && !scriptstage) {
---- ./lib/verify.c.orig	2011-05-12 15:22:01.000000000 +0000
-+++ ./lib/verify.c	2011-05-12 15:22:49.000000000 +0000
-@@ -267,11 +267,11 @@ static int rpmVerifyScript(rpmts ts, Hea
- 
-     if (headerIsEntry(h, RPMTAG_VERIFYSCRIPT)) {
- 	/* fake up a erasure transaction element */
--	(void) rpmtsAddEraseElement(ts, h, -1);
--
--	rc = (rpmteProcess(rpmtsElement(ts, 0), PKG_VERIFY) != RPMRC_OK);
--
-+	rpmte p = rpmteNew(ts, h, TR_REMOVED, NULL, NULL);
-+	rpmteSetHeader(p, h);
-+	rc = (rpmteProcess(p, PKG_VERIFY) != RPMRC_OK);
- 	/* clean up our fake transaction bits */
-+	rpmteFree(p);
- 	rpmtsEmpty(ts);
-     }
- 
diff --git a/verifylstatfail.diff b/verifylstatfail.diff
new file mode 100644
index 0000000..d0fd950
--- /dev/null
+++ b/verifylstatfail.diff
@@ -0,0 +1,15 @@
+Tell user the reason why the lstat failed in a verify operation.
+
+--- ./lib/verify.c.orig	2005-12-15 15:17:41.000000000 +0000
++++ ./lib/verify.c	2005-12-15 15:24:48.000000000 +0000
+@@ -327,6 +327,10 @@ static int verifyHeader(QVA_t qva, const
+ 			 (fileAttrs & RPMFILE_README)	? 'r' : ' '), 
+ 			rpmfiFN(fi));
+ 		te += strlen(te);
++		if ((rc & RPMVERIFY_LSTATFAIL) != 0) {
++		    sprintf(te, " (%s)", strerror(errno));
++		    te += strlen(te);
++		}
+ 		ec = rc;
+ 	    }
+ 	} else if (verifyResult || rpmIsVerbose()) {
diff --git a/waitlock.diff b/waitlock.diff
index 8a811c5..79ae33d 100644
--- a/waitlock.diff
+++ b/waitlock.diff
@@ -1,104 +1,98 @@
 Fix global (DB_PRIVATE) lock code: fix recursion counter, retry
 failed lock operations for up to 3 minutes.
-
---- ./lib/backend/db3.c.orig	2011-03-02 06:40:10.000000000 +0000
-+++ ./lib/backend/db3.c	2011-05-12 10:24:20.000000000 +0000
-@@ -432,6 +432,8 @@ int dbiVerify(dbiIndex dbi, unsigned int
-     return rc;
+--- ./rpmdb/db3.c.orig	2005-03-23 18:15:28.000000000 +0000
++++ ./rpmdb/db3.c	2006-01-27 20:08:29.000000000 +0000
+@@ -759,6 +769,8 @@ assert(db != NULL);
  }
+ /*@=mustmod@*/
  
 +static int _lockdbfd = 0;
 +
- int dbiClose(dbiIndex dbi, unsigned int flags)
- {
-     rpmdb rdb = dbi->dbi_rpmdb;
-@@ -451,6 +453,8 @@ int dbiClose(dbiIndex dbi, unsigned int
+ /*@-moduncon@*/ /* FIX: annotate db3 methods */
+ static int db3close(/*@only@*/ dbiIndex dbi, /*@unused@*/ unsigned int flags)
+ 	/*@globals rpmGlobalMacroContext, h_errno,
+@@ -818,6 +830,10 @@ static int db3close(/*@only@*/ dbiIndex 
  
- 	rpmlog(RPMLOG_DEBUG, "closed   db index       %s/%s\n",
- 		dbhome, dbi->dbi_file);
-+	if (dbi->dbi_lockdbfd && _lockdbfd)
+ 	rpmMessage(RPMMESS_DEBUG, _("closed   db index       %s/%s\n"),
+ 		dbhome, (dbfile ? dbfile : tagName(dbi->dbi_rpmtag)));
++	if (dbi->dbi_lockdbfd &&
++	    !((dbi->dbi_ecflags & DB_CLIENT) && dbi->dbi_host) &&
++	    _lockdbfd)
 +	    _lockdbfd--;
+ 
      }
  
-     xx = db_fini(rdb, dbhome ? dbhome : "");
-@@ -490,6 +494,7 @@ static int dbiFlock(dbiIndex dbi, int mo
- 	rc = 1;
-     } else {
- 	const char *dbhome = rpmdbHome(dbi->dbi_rpmdb);
-+	int tries;
- 	struct flock l;
- 	memset(&l, 0, sizeof(l));
- 	l.l_whence = 0;
-@@ -499,20 +504,38 @@ static int dbiFlock(dbiIndex dbi, int mo
- 		    ? F_RDLCK : F_WRLCK;
- 	l.l_pid = 0;
+@@ -1138,8 +1157,6 @@ static int db3open(rpmdb rpmdb, rpmTag r
+ 		prDbiOpenFlags(oflags, 0), dbi->dbi_mode);
  
--	rc = fcntl(fdno, F_SETLK, (void *) &l);
--	if (rc) {
--	    uint32_t eflags = db_envflags(db);
--	    /* Warning iff using non-private CDB locking. */
--	    rc = (((eflags & DB_INIT_CDB) && !(eflags & DB_PRIVATE)) ? 0 : 1);
--	    rpmlog( (rc ? RPMLOG_ERR : RPMLOG_WARNING),
--		    _("cannot get %s lock on %s/%s\n"),
--		    ((mode & O_ACCMODE) == O_RDONLY)
--			    ? _("shared") : _("exclusive"),
--		    dbhome, dbi->dbi_file);
--	} else {
--	    rpmlog(RPMLOG_DEBUG,
--		    "locked   db index       %s/%s\n",
--		    dbhome, dbi->dbi_file);
-+	for (tries = 0; ; tries++) {
-+	    rc = fcntl(fdno, F_SETLK, (void *) &l);
-+	    if (rc) {
-+		uint32_t eflags = db_envflags(db);
-+		/* Warning iff using non-private CDB locking. */
-+		rc = (((eflags & DB_INIT_CDB) && !(eflags & DB_PRIVATE)) ? 0 : 1);
-+		if (errno == EAGAIN && rc) {
-+		    struct timespec ts;
-+		    if (tries == 0)
-+			rpmlog(RPMLOG_WARNING,
-+				_("waiting for %s lock on %s/%s\n"),
-+				((mode & O_ACCMODE) == O_RDONLY)
-+					? _("shared") : _("exclusive"),
-+				dbhome, dbi->dbi_file);
-+		    ts.tv_sec = (time_t)0;
-+		    ts.tv_nsec = 100000000;	/* .1 seconds */
-+		    if (tries < 10*60*3) {	/* 3 minutes */
-+			nanosleep(&ts, (struct timespec *)0);
-+			continue;
-+		    }
-+		}
-+		rpmlog( (rc ? RPMLOG_ERR : RPMLOG_WARNING),
-+			_("cannot get %s lock on %s/%s\n"),
-+			((mode & O_ACCMODE) == O_RDONLY)
-+				? _("shared") : _("exclusive"),
-+			dbhome, dbi->dbi_file);
-+	    } else {
-+		rpmlog(RPMLOG_DEBUG,
-+			"locked   db index       %s/%s\n",
-+			dbhome, dbi->dbi_file);
-+	    }
-+	    break;
+     if (rc == 0) {
+-	static int _lockdbfd = 0;
+-
+ 	/*@-moduncon@*/ /* FIX: annotate db3 methods */
+ 	rc = db_create(&db, dbenv, dbi->dbi_cflags);
+ 	/*@=moduncon@*/
+@@ -1356,6 +1373,7 @@ static int db3open(rpmdb rpmdb, rpmTag r
+ 		if (!(db->fd(db, &fdno) == 0 && fdno >= 0)) {
+ 		    rc = 1;
+ 		} else {
++		    int tries;
+ 		    struct flock l;
+ /*@-boundswrite@*/
+ 		    memset(&l, 0, sizeof(l));
+@@ -1367,24 +1385,40 @@ static int db3open(rpmdb rpmdb, rpmTag r
+ 				? F_WRLCK : F_RDLCK;
+ 		    l.l_pid = 0;
+ 
+-		    rc = fcntl(fdno, F_SETLK, (void *) &l);
+-		    if (rc) {
+-			/* Warning iff using non-private CDB locking. */
+-			rc = ((dbi->dbi_use_dbenv &&
+-				(dbi->dbi_eflags & DB_INIT_CDB) &&
+-				!(dbi->dbi_eflags & DB_PRIVATE))
+-			    ? 0 : 1);
+-			rpmError( (rc ? RPMERR_FLOCK : RPMWARN_FLOCK),
+-				_("cannot get %s lock on %s/%s\n"),
+-				((dbi->dbi_mode & (O_RDWR|O_WRONLY))
+-					? _("exclusive") : _("shared")),
+-				dbhome, (dbfile ? dbfile : ""));
+-		    } else if (dbfile) {
+-			rpmMessage(RPMMESS_DEBUG,
+-				_("locked   db index       %s/%s\n"),
+-				dbhome, dbfile);
++		    for (tries = 0; ; tries++) {
++			rc = fcntl(fdno, F_SETLK, (void *) &l);
++			if (rc) {
++			    /* Warning iff using non-private CDB locking. */
++			    rc = ((dbi->dbi_use_dbenv &&
++				    (dbi->dbi_eflags & DB_INIT_CDB) &&
++				    !(dbi->dbi_eflags & DB_PRIVATE))
++				? 0 : 1);
++			    if (errno == EAGAIN && rc) {
++				struct timespec ts;
++				if (tries == 0)
++				    rpmMessage(RPMMESS_WARNING, _("waiting for %s lock on %s/%s\n"), ((dbi->dbi_mode & (O_RDWR|O_WRONLY)) ? _("exclusive") : _("shared")), dbhome, (dbfile ? dbfile : ""));
++				ts.tv_sec = (time_t)0;
++				ts.tv_nsec = 100000000;
++				if (tries < 10*60*3) {
++				    nanosleep(&ts, (struct timespec *)0);
++				    continue;
++				}
++			    }
++			    rpmError( (rc ? RPMERR_FLOCK : RPMWARN_FLOCK),
++				    _("cannot get %s lock on %s/%s\n"),
++				    ((dbi->dbi_mode & (O_RDWR|O_WRONLY))
++					    ? _("exclusive") : _("shared")),
++				    dbhome, (dbfile ? dbfile : ""));
++			} else if (dbfile) {
++			    rpmMessage(RPMMESS_DEBUG,
++				    _("locked   db index       %s/%s\n"),
++				    dbhome, dbfile);
++			}
++			break;
+ 		    }
+ 		}
++		if (rc && dbi->dbi_use_dbenv)
++		    _lockdbfd--;
+ 	    }
  	}
      }
-     return rc;
-@@ -529,7 +552,6 @@ int dbiOpen(rpmdb rdb, rpmDbiTagVal rpmt
-     DB * db = NULL;
-     DBTYPE dbtype = DB_UNKNOWN;
-     uint32_t oflags;
--    static int _lockdbfd = 0;
- 
-     if (dbip)
- 	*dbip = NULL;
-@@ -603,7 +625,10 @@ int dbiOpen(rpmdb rdb, rpmDbiTagVal rpmt
-     dbi->dbi_db = db;
-     dbi->dbi_oflags = oflags;
- 
--    if (!verifyonly && rc == 0 && dbi->dbi_lockdbfd && _lockdbfd++ == 0) {
-+    if (verifyonly)
-+	dbi->dbi_lockdbfd = 0;	/* disable locking in verify mode */
-+
-+    if (rc == 0 && dbi->dbi_lockdbfd && _lockdbfd++ == 0) {
- 	rc = dbiFlock(dbi, rdb->db_mode);
-     }
- 
diff --git a/weakdeps.diff b/weakdeps.diff
index f46e0cc..b5ad2b6 100644
--- a/weakdeps.diff
+++ b/weakdeps.diff
@@ -14,18 +14,29 @@ B) use RPMSENSE_STRONG to support a "strong" version, "Recommends"
 
 Needs extcond.diff for query operations.
 
---- ./build/parsePreamble.c.orig	2011-01-25 13:52:28.000000000 +0000
-+++ ./build/parsePreamble.c	2011-05-11 14:09:07.000000000 +0000
-@@ -310,6 +310,8 @@ static struct tokenBits_s const installS
+Index: build/parsePreamble.c
+===================================================================
+--- build/parsePreamble.c.orig
++++ build/parsePreamble.c
+@@ -129,6 +129,8 @@ static struct tokenBits_s installScriptB
+     { "post",		RPMSENSE_SCRIPT_POST },
+     { "rpmlib",		RPMSENSE_RPMLIB },
      { "verify",		RPMSENSE_SCRIPT_VERIFY },
-     { "pretrans",	RPMSENSE_PRETRANS },
-     { "posttrans",	RPMSENSE_POSTTRANS },
-+    { "hint", 		RPMSENSE_MISSINGOK },
-+    { "strong", 	RPMSENSE_STRONG },
++    { "hint",		RPMSENSE_MISSINGOK },
++    { "strong",		RPMSENSE_STRONG },
      { NULL, 0 }
  };
  
-@@ -790,6 +792,18 @@ static int handlePreambleTag(rpmSpec spe
+@@ -140,6 +142,8 @@ static struct tokenBits_s buildScriptBit
+     { "build",		RPMSENSE_SCRIPT_BUILD },
+     { "install",	RPMSENSE_SCRIPT_INSTALL },
+     { "clean",		RPMSENSE_SCRIPT_CLEAN },
++    { "hint",		RPMSENSE_MISSINGOK },
++    { "strong",		RPMSENSE_STRONG },
+     { NULL, 0 }
+ };
+ 
+@@ -692,6 +696,18 @@ static int handlePreambleTag(Spec spec, 
  	if ((rc = parseRCPOT(spec, pkg, field, tag, 0, tagflags)))
  	    return rc;
  	break;
@@ -44,66 +55,66 @@ Needs extcond.diff for query operations.
      case RPMTAG_EXCLUDEARCH:
      case RPMTAG_EXCLUSIVEARCH:
      case RPMTAG_EXCLUDEOS:
-@@ -895,6 +909,14 @@ static struct PreambleRec_s const preamb
-     {RPMTAG_BUGURL,		0, 0, LEN_AND_STR("bugurl")},
-     {RPMTAG_COLLECTIONS,	0, 0, LEN_AND_STR("collections")},
-     {RPMTAG_ORDERFLAGS,		2, 0, LEN_AND_STR("orderwithrequires")},
-+    {RPMTAG_SUGGESTSFLAGS,	0, 0, LEN_AND_STR("recommends")},
-+    {RPMTAG_SUGGESTSFLAGS,	0, 0, LEN_AND_STR("suggests")},
-+    {RPMTAG_ENHANCESFLAGS,	0, 0, LEN_AND_STR("supplements")},
-+    {RPMTAG_ENHANCESFLAGS,	0, 0, LEN_AND_STR("enhances")},
-+    {RPMTAG_BUILDSUGGESTS,	0, 0, LEN_AND_STR("buildrecommends")},
-+    {RPMTAG_BUILDSUGGESTS,	0, 0, LEN_AND_STR("buildsuggests")},
-+    {RPMTAG_BUILDENHANCES,	0, 0, LEN_AND_STR("buildsupplements")},
-+    {RPMTAG_BUILDENHANCES,	0, 0, LEN_AND_STR("buildenhances")},
-     {0, 0, 0, 0}
- };
- 
---- ./build/parseReqs.c.orig	2010-12-13 14:01:56.000000000 +0000
-+++ ./build/parseReqs.c	2011-05-11 14:16:43.000000000 +0000
-@@ -95,6 +95,20 @@ rpmRC parseRCPOT(rpmSpec spec, Package p
- 	nametag = RPMTAG_CONFLICTNAME;
+@@ -783,6 +799,14 @@ static struct PreambleRec_s preambleList
+     {RPMTAG_DISTTAG,		0, 0, 0, "disttag"},
+     {RPMTAG_CVSID,		0, 0, 0, "cvsid"},
+     {RPMTAG_SVNID,		0, 0, 0, "svnid"},
++    {RPMTAG_SUGGESTSFLAGS,	0, 0, 0, "recommends"},
++    {RPMTAG_SUGGESTSFLAGS,	0, 0, 0, "suggests"},
++    {RPMTAG_ENHANCESFLAGS,	0, 0, 0, "supplements"},
++    {RPMTAG_ENHANCESFLAGS,	0, 0, 0, "enhances"},
++    {RPMTAG_BUILDSUGGESTS,	0, 0, 0, "buildrecommends"},
++    {RPMTAG_BUILDSUGGESTS,	0, 0, 0, "buildsuggests"},
++    {RPMTAG_BUILDENHANCES,	0, 0, 0, "buildsupplements"},
++    {RPMTAG_BUILDENHANCES,	0, 0, 0, "buildenhances"},
+     /*@-nullassign@*/	/* LCL: can't add null annotation */
+     {0, 0, 0, 0, 0}
+     /*@=nullassign@*/
+Index: build/parseReqs.c
+===================================================================
+--- build/parseReqs.c.orig
++++ build/parseReqs.c
+@@ -81,6 +81,14 @@ int parseRCPOT(Spec spec, Package pkg, c
+ 	tagflags |= RPMSENSE_ANY;
  	h = spec->buildRestrictions;
  	break;
 +    case RPMTAG_SUGGESTSFLAGS:
-+	nametag = RPMTAG_SUGGESTSNAME;
-+	break;
 +    case RPMTAG_ENHANCESFLAGS:
-+	nametag = RPMTAG_ENHANCESNAME;
++	h = pkg->header;
 +	break;
 +    case RPMTAG_BUILDSUGGESTS:
-+	nametag = RPMTAG_SUGGESTSNAME;
-+	h = spec->buildRestrictions;
-+	break;
 +    case RPMTAG_BUILDENHANCES:
-+	nametag = RPMTAG_ENHANCESNAME;
-+	h = spec->buildRestrictions;
-+	break;
-     }
- 
-     for (r = field; *r != '\0'; r = re) {
---- ./build/reqprov.c.orig	2010-12-13 14:01:56.000000000 +0000
-+++ ./build/reqprov.c	2011-05-11 14:15:02.000000000 +0000
-@@ -75,6 +75,16 @@ int addReqProv(Header h, rpmTagVal tagN,
++        h = spec->buildRestrictions;
++        break;
+     default:
+     case RPMTAG_REQUIREFLAGS:
+ 	tagflags |= RPMSENSE_ANY;
+Index: build/reqprov.c
+===================================================================
+--- build/reqprov.c.orig
++++ build/reqprov.c
+@@ -48,6 +48,16 @@ int addReqProv(/*@unused@*/ Spec spec, H
+ 	flagtag = RPMTAG_TRIGGERFLAGS;
  	indextag = RPMTAG_TRIGGERINDEX;
  	extra = Flags & RPMSENSE_TRIGGER;
- 	break;
-+    case RPMTAG_SUGGESTSNAME:
++    } else if (tagN == RPMTAG_SUGGESTSFLAGS || tagN == RPMTAG_BUILDSUGGESTS) {
++	nametag = RPMTAG_SUGGESTSNAME;
 +	versiontag = RPMTAG_SUGGESTSVERSION;
 +	flagtag = RPMTAG_SUGGESTSFLAGS;
 +	extra = Flags & _ALL_REQUIRES_MASK;
-+	break;
-+    case RPMTAG_ENHANCESNAME:
++    } else if (tagN == RPMTAG_ENHANCESFLAGS || tagN == RPMTAG_BUILDENHANCES) {
++	nametag = RPMTAG_ENHANCESNAME;
 +	versiontag = RPMTAG_ENHANCESVERSION;
 +	flagtag = RPMTAG_ENHANCESFLAGS;
 +	extra = Flags & _ALL_REQUIRES_MASK;
-+	break;
-     case RPMTAG_REQUIRENAME:
-     default:
- 	tagN = RPMTAG_REQUIRENAME;
---- ./build/rpmfc.c.orig	2011-02-28 09:57:21.000000000 +0000
-+++ ./build/rpmfc.c	2011-05-11 13:58:33.000000000 +0000
-@@ -1075,6 +1075,12 @@ static struct DepMsg_s depMsgs[] = {
+     } else {
+ 	nametag = RPMTAG_REQUIRENAME;
+ 	versiontag = RPMTAG_REQUIREVERSION;
+Index: build/rpmfc.c
+===================================================================
+--- build/rpmfc.c.orig
++++ build/rpmfc.c
+@@ -1350,6 +1350,12 @@ static struct DepMsg_s depMsgs[] = {
    { "Obsoletes",	{ "%{?__find_obsoletes}", NULL, NULL, NULL },
  	RPMTAG_OBSOLETENAME, RPMTAG_OBSOLETEVERSION, RPMTAG_OBSOLETEFLAGS,
  	0, -1 },
@@ -116,10 +127,10 @@ Needs extcond.diff for query operations.
    { NULL,		{ NULL, NULL, NULL, NULL },	0, 0, 0, 0, 0 }
  };
  
-@@ -1160,6 +1166,14 @@ static rpmRC rpmfcGenerateDependsHelper(
+@@ -1445,6 +1451,14 @@ static int rpmfcGenerateDependsHelper(co
  	    failnonzero = 0;
  	    tagflags = RPMSENSE_FIND_REQUIRES;
- 	    break;
+ 	    /*@switchbreak@*/ break;
 +	case RPMTAG_ENHANCESFLAGS:
 +	    if (!pkg->autoProv)
 +		continue;
@@ -127,144 +138,181 @@ Needs extcond.diff for query operations.
 +	    tagflags = RPMSENSE_FIND_REQUIRES | RPMSENSE_MISSINGOK;
 +	    if (strcmp(dm->msg, "Supplements") == 0)
 +		tagflags |= RPMSENSE_STRONG;
-+	    break;
++	    /*@switchbreak@*/ break;
  	default:
  	    continue;
- 	    break;
---- ./lib/formats.c.orig	2011-01-25 13:52:28.000000000 +0000
-+++ ./lib/formats.c	2011-05-11 14:02:09.000000000 +0000
-@@ -560,6 +560,24 @@ static char * depflagsFormat(rpmtd td, c
-     return val;
- }
- 
-+static char * depflag_strongFormat(rpmtd td, char * formatPrefix)
-+{
-+    char * val = NULL;
-+
-+    if (rpmtdClass(td) != RPM_NUMERIC_CLASS) {
-+	val = xstrdup(_("(not a number)"));
-+    } else {
-+	uint64_t anint = rpmtdGetNumber(td);
-+	char buf[10];
-+	buf[0] = '\0';
-+	if (anint & RPMSENSE_STRONG)
-+	    strcat(buf, "strong");
-+	strcat(formatPrefix, "s");
-+	rasprintf(&val, formatPrefix, buf);
-+    }
-+    return val;
-+}
-+
- /**
-  * Return tag container array size.
-  * @param td		tag data container
-@@ -672,6 +690,7 @@ static const struct headerFormatFunc_s r
-     { RPMTD_FORMAT_VFLAGS,	"vflags",	vflagsFormat },
-     { RPMTD_FORMAT_EXPAND,	"expand",	expandFormat },
-     { RPMTD_FORMAT_FSTATUS,	"fstatus",	fstatusFormat },
-+    { RPMTD_FORMAT_DEPFLAG_STRONG,	"depflag_strong",	depflag_strongFormat },
-     { -1,			NULL, 		NULL }
- };
- 
---- ./lib/rpmds.c.orig	2011-02-15 13:04:04.000000000 +0000
-+++ ./lib/rpmds.c	2011-05-11 13:58:33.000000000 +0000
-@@ -69,6 +69,10 @@ static int dsType(rpmTagVal tag,
- 	t = "Trigger";
- 	evr = RPMTAG_TRIGGERVERSION;
- 	f = RPMTAG_TRIGGERFLAGS;
-+    } else if (tag == RPMTAG_ENHANCESNAME) {
-+	t = "Enhances";
-+	evr = RPMTAG_ENHANCESVERSION;
-+	f = RPMTAG_ENHANCESFLAGS;
-     } else {
- 	rc = 1;
-     } 
---- ./lib/rpmds.h.orig	2011-05-11 09:15:33.000000000 +0000
-+++ ./lib/rpmds.h	2011-05-11 14:01:07.000000000 +0000
-@@ -48,7 +48,7 @@ enum rpmsenseFlags_e {
-     RPMSENSE_RPMLIB = (1 << 24),	/*!< rpmlib(feature) dependency. */
-     RPMSENSE_TRIGGERPREIN = (1 << 25),	/*!< %triggerprein dependency. */
+ 	    /*@notreached@*/ /*@switchbreak@*/ break;
+Index: lib/rpmlib.h
+===================================================================
+--- lib/rpmlib.h.orig
++++ lib/rpmlib.h
+@@ -541,7 +541,7 @@ typedef	enum rpmsenseFlags_e {
+     RPMSENSE_TRIGGERPREIN = (1 << 25),	/*!< @todo Implement %triggerprein. */
+ /*@=enummemuse@*/
      RPMSENSE_KEYRING	= (1 << 26),
--    /* bit 27 unused */
-+    RPMSENSE_STRONG     = (1 << 27),
-     RPMSENSE_CONFIG	= (1 << 28)
- };
- 
-@@ -69,6 +69,7 @@ typedef rpmFlags rpmsenseFlags;
+-    RPMSENSE_PATCHES	= (1 << 27),
++    RPMSENSE_STRONG	= (1 << 27),
+     RPMSENSE_CONFIG	= (1 << 28),
+     RPMSENSE_PROBE	= (1 << 29),
+     RPMSENSE_PACKAGE	= (1 << 30)
+@@ -562,6 +562,7 @@ typedef	enum rpmsenseFlags_e {
      RPMSENSE_SCRIPT_VERIFY | \
      RPMSENSE_FIND_REQUIRES | \
      RPMSENSE_MISSINGOK | \
 +    RPMSENSE_STRONG | \
-     RPMSENSE_RPMLIB | \
-     RPMSENSE_KEYRING | \
-     RPMSENSE_PRETRANS | \
---- ./lib/rpmtag.h.orig	2010-12-13 14:01:56.000000000 +0000
-+++ ./lib/rpmtag.h	2011-05-11 13:58:33.000000000 +0000
-@@ -217,14 +217,14 @@ typedef enum rpmTag_e {
-     RPMTAG_PRETRANSPROG		= 1153,	/* s */
-     RPMTAG_POSTTRANSPROG	= 1154,	/* s */
-     RPMTAG_DISTTAG		= 1155,	/* s */
--    RPMTAG_SUGGESTSNAME		= 1156,	/* s[] extension (unimplemented) */
--#define	RPMTAG_SUGGESTS RPMTAG_SUGGESTSNAME	/* s[] (unimplemented) */
--    RPMTAG_SUGGESTSVERSION	= 1157,	/* s[] extension (unimplemented) */
--    RPMTAG_SUGGESTSFLAGS	= 1158,	/* i[] extension (unimplemented) */
--    RPMTAG_ENHANCESNAME		= 1159,	/* s[] extension placeholder (unimplemented) */
--#define	RPMTAG_ENHANCES RPMTAG_ENHANCESNAME	/* s[] (unimplemented) */
--    RPMTAG_ENHANCESVERSION	= 1160,	/* s[] extension placeholder (unimplemented) */
--    RPMTAG_ENHANCESFLAGS	= 1161,	/* i[] extension placeholder (unimplemented) */
-+    RPMTAG_SUGGESTSNAME		= 1156,	/* s[] extension */
-+#define	RPMTAG_SUGGESTS RPMTAG_SUGGESTSNAME	/* s[] */
-+    RPMTAG_SUGGESTSVERSION	= 1157,	/* s[] extension */
-+    RPMTAG_SUGGESTSFLAGS	= 1158,	/* i[] extension */
-+    RPMTAG_ENHANCESNAME		= 1159,	/* s[] extension */
-+#define	RPMTAG_ENHANCES RPMTAG_ENHANCESNAME	/* s[] */
-+    RPMTAG_ENHANCESVERSION	= 1160,	/* s[] extension */
-+    RPMTAG_ENHANCESFLAGS	= 1161,	/* i[] extension */
-     RPMTAG_PRIORITY		= 1162, /* i[] extension placeholder (unimplemented) */
-     RPMTAG_CVSID		= 1163, /* s (unimplemented) */
- #define	RPMTAG_SVNID	RPMTAG_CVSID	/* s (unimplemented) */
---- ./lib/rpmtd.h.orig	2010-12-03 12:11:57.000000000 +0000
-+++ ./lib/rpmtd.h	2011-05-11 14:00:06.000000000 +0000
-@@ -220,6 +220,7 @@ typedef enum rpmtdFormats_e {
-     RPMTD_FORMAT_VFLAGS		= 17,	/* file verify flags (int types) */
-     RPMTD_FORMAT_EXPAND		= 18,	/* macro expansion (string types) */
-     RPMTD_FORMAT_FSTATUS	= 19,	/* file verify status (int types) */
-+    RPMTD_FORMAT_DEPFLAG_STRONG	= 20,	/* strong dependency (int types) */
- } rpmtdFormats;
- 
- /** \ingroup rpmtd
---- ./python/rpmmodule.c.orig	2010-12-03 12:11:57.000000000 +0000
-+++ ./python/rpmmodule.c	2011-05-11 14:19:37.000000000 +0000
-@@ -376,6 +376,7 @@ static int initModule(PyObject *m)
+     RPMSENSE_SCRIPT_PREP | \
+     RPMSENSE_SCRIPT_BUILD | \
+     RPMSENSE_SCRIPT_INSTALL | \
+Index: python/rpmmodule.c
+===================================================================
+--- python/rpmmodule.c.orig
++++ python/rpmmodule.c
+@@ -354,7 +354,7 @@ void init_rpm(void)
      REGISTER_ENUM(RPMSENSE_RPMLIB);
      REGISTER_ENUM(RPMSENSE_TRIGGERPREIN);
      REGISTER_ENUM(RPMSENSE_KEYRING);
+-    REGISTER_ENUM(RPMSENSE_PATCHES);
 +    REGISTER_ENUM(RPMSENSE_STRONG);
      REGISTER_ENUM(RPMSENSE_CONFIG);
  
      REGISTER_ENUM(RPMTRANS_FLAG_TEST);
---- ./rpmpopt.in.orig	2011-01-11 07:04:51.000000000 +0000
-+++ ./rpmpopt.in	2011-05-11 14:18:47.000000000 +0000
-@@ -65,6 +65,22 @@ rpm	alias --requires	--qf \
+Index: lib/rpmds.c
+===================================================================
+--- lib/rpmds.c.orig
++++ lib/rpmds.c
+@@ -320,6 +320,11 @@ rpmds rpmdsNew(Header h, rpmTag tagN, in
+ 	tagEVR = RPMTAG_TRIGGERVERSION;
+ 	tagF = RPMTAG_TRIGGERFLAGS;
+     } else
++    if (tagN == RPMTAG_ENHANCESNAME) {
++	Type = "Enhances";
++	tagEVR = RPMTAG_ENHANCESVERSION;
++	tagF = RPMTAG_ENHANCESFLAGS;
++    } else
+ 	goto exit;
+ 
+     /*@-branchstate@*/
+Index: rpmpopt.in
+===================================================================
+--- rpmpopt.in.orig
++++ rpmpopt.in
+@@ -60,6 +60,22 @@ rpm	alias --requires	--qf \
  	--POPTdesc=$"list capabilities required by package(s)"
  rpm	alias -R --requires
  
-+rpm    alias --suggests        --qf \
++rpm	alias --suggests	--qf \
 +  "[%|SUGGESTSFLAGS:depflag_strong?{}:{%{SUGGESTSNAME} %{SUGGESTSFLAGS:depflags} %{SUGGESTSVERSION}\n}|]" \
 +	--POPTdesc=$"list capabilities this package suggests"
 +
-+rpm    alias --recommends      --qf \
++rpm	alias --recommends	--qf \
 +  "[%|SUGGESTSFLAGS:depflag_strong?{%{SUGGESTSNAME} %{SUGGESTSFLAGS:depflags} %{SUGGESTSVERSION}\n}|]" \
 +	--POPTdesc=$"list capabilities this package recommends"
 +
-+rpm    alias --enhances        --qf \
++rpm	alias --enhances	--qf \
 +  "[%|ENHANCESFLAGS:depflag_strong?{}:{%{ENHANCESNAME} %{ENHANCESFLAGS:depflags} %{ENHANCESVERSION}\n}|]" \
 +	--POPTdesc=$"list capabilities this package enhances"
 +
-+rpm    alias --supplements     --qf \
++rpm	alias --supplements	--qf \
 +  "[%|ENHANCESFLAGS:depflag_strong?{%{ENHANCESNAME} %{ENHANCESFLAGS:depflags} %{ENHANCESVERSION}\n}|]" \
 +	--POPTdesc=$"list capabilities this package supplements"
 +
- rpm	alias --info --qf '\
- Name        : %{NAME}\n\
- %|EPOCH?{Epoch       : %{EPOCH}\n}|\
+ rpm	alias --info --qf 'Name        : %-27{NAME}  Relocations: %|PREFIXES?{[%{PREFIXES} ]}:{(not relocatable)}|\n\
+ Version     : %-27{VERSION}       Vendor: %{VENDOR}\n\
+ Release     : %-27{RELEASE}   Build Date: %{BUILDTIME:date}\n\
+@@ -340,6 +356,22 @@ rpmq	alias --requires	--qf \
+ 	--POPTdesc=$"list capabilities required by package(s)"
+ rpmq	alias -R --requires
+ 
++rpmq	alias --suggests	--qf \
++  "[%|SUGGESTSFLAGS:depflag_strong?{}:{%{SUGGESTSNAME} %{SUGGESTSFLAGS:depflags} %{SUGGESTSVERSION}\n}|]" \
++	--POPTdesc=$"list capabilities this package suggests"
++
++rpmq	alias --recommends	--qf \
++  "[%|SUGGESTSFLAGS:depflag_strong?{%{SUGGESTSNAME} %{SUGGESTSFLAGS:depflags} %{SUGGESTSVERSION}\n}|]" \
++	--POPTdesc=$"list capabilities this package recommends"
++
++rpmq	alias --enhances	--qf \
++  "[%|ENHANCESFLAGS:depflag_strong?{}:{%{ENHANCESNAME} %{ENHANCESFLAGS:depflags} %{ENHANCESVERSION}\n}|]" \
++	--POPTdesc=$"list capabilities this package enhances"
++
++rpmq	alias --supplements	--qf \
++  "[%|ENHANCESFLAGS:depflag_strong?{%{ENHANCESNAME} %{ENHANCESFLAGS:depflags} %{ENHANCESVERSION}\n}|]" \
++	--POPTdesc=$"list capabilities this package supplements"
++
+ rpmq	alias --info --qf 'Name        : %-27{NAME}  Relocations: %|PREFIXES?{[%{PREFIXES} ]}:{(not relocatable)}|\n\
+ Version     : %-27{VERSION}       Vendor: %{VENDOR}\n\
+ Release     : %-27{RELEASE}   Build Date: %{BUILDTIME:date}\n\
+@@ -438,6 +470,22 @@ rpmquery	alias --requires	--qf \
+ 	--POPTdesc=$"list capabilities required by package(s)"
+ rpmquery	alias -R --requires
+ 
++rpmquery	alias --suggests	--qf \
++  "[%|SUGGESTSFLAGS:depflag_strong?{}:{%{SUGGESTSNAME} %{SUGGESTSFLAGS:depflags} %{SUGGESTSVERSION}\n}|]" \
++	--POPTdesc=$"list capabilities this package suggests"
++
++rpmquery	alias --recommends	--qf \
++  "[%|SUGGESTSFLAGS:depflag_strong?{%{SUGGESTSNAME} %{SUGGESTSFLAGS:depflags} %{SUGGESTSVERSION}\n}|]" \
++	--POPTdesc=$"list capabilities this package recommends"
++
++rpmquery	alias --enhances	--qf \
++  "[%|ENHANCESFLAGS:depflag_strong?{}:{%{ENHANCESNAME} %{ENHANCESFLAGS:depflags} %{ENHANCESVERSION}\n}|]" \
++	--POPTdesc=$"list capabilities this package enhances"
++
++rpmquery	alias --supplements	--qf \
++  "[%|ENHANCESFLAGS:depflag_strong?{%{ENHANCESNAME} %{ENHANCESFLAGS:depflags} %{ENHANCESVERSION}\n}|]" \
++	--POPTdesc=$"list capabilities this package supplements"
++
+ rpmquery	alias --info --qf 'Name        : %-27{NAME}  Relocations: %|PREFIXES?{[%{PREFIXES} ]}:{(not relocatable)}|\n\
+ Version     : %-27{VERSION}       Vendor: %{VENDOR}\n\
+ Release     : %-27{RELEASE}   Build Date: %{BUILDTIME:date}\n\
+Index: lib/formats.c
+===================================================================
+--- lib/formats.c.orig
++++ lib/formats.c
+@@ -652,6 +652,38 @@ static /*@only@*/ char * depflagsFormat(
+     return val;
+ }
+ 
++static /*@only@*/ char * depflag_strongFormat(int_32 type, const void * data,
++		char * formatPrefix, int padding, /*@unused@*/ int element)
++	/*@modifies formatPrefix @*/
++	/*@requires maxRead(data) >= 0 @*/
++{
++    char * val;
++    char buf[10];
++    int anint;
++
++    if (type != RPM_INT32_TYPE) {
++	val = xstrdup(_("(not a number)"));
++    } else {
++	anint = *((int_32 *) data);
++	buf[0] = '\0';
++
++/*@-boundswrite@*/
++	if (anint & RPMSENSE_STRONG)
++	    strcat(buf, "strong");
++/*@=boundswrite@*/
++
++	val = xmalloc(7 + padding);
++/*@-boundswrite@*/
++	strcat(formatPrefix, "s");
++/*@=boundswrite@*/
++	/*@-formatconst@*/
++	sprintf(val, formatPrefix, buf);
++	/*@=formatconst@*/
++    }
++
++    return val;
++}
++
+ /**
+  * Retrieve mounted file system paths.
+  * @param h		header
+@@ -1344,6 +1376,7 @@ const struct headerSprintfExtension_s rp
+     { HEADER_EXT_FORMAT, "base64",		{ base64Format } },
+     { HEADER_EXT_FORMAT, "pgpsig",		{ pgpsigFormat } },
+     { HEADER_EXT_FORMAT, "depflags",		{ depflagsFormat } },
++    { HEADER_EXT_FORMAT, "depflag_strong",	{ depflag_strongFormat } },
+     { HEADER_EXT_FORMAT, "fflags",		{ fflagsFormat } },
+     { HEADER_EXT_FORMAT, "perms",		{ permsFormat } },
+     { HEADER_EXT_FORMAT, "permissions",		{ permsFormat } },
diff --git a/whatrequires-doc.diff b/whatrequires-doc.diff
deleted file mode 100644
index 96cf15f..0000000
--- a/whatrequires-doc.diff
+++ /dev/null
@@ -1,14 +0,0 @@
---- ./doc/rpm.8.orig	2011-01-05 08:11:09.000000000 +0000
-+++ ./doc/rpm.8	2011-05-11 15:36:18.000000000 +0000
-@@ -564,6 +564,11 @@ Query all packages that provide the \fIC
- .TP
- \fB--whatrequires \fICAPABILITY\fB\fR
- Query all packages that require \fICAPABILITY\fR for proper functioning.
-+.br
-+Note that this does not return what requires a given package.
-+A package usually provides multiple capabilities and file-names on which
-+other packages may depend. To see the complete dependencies
-+for a package, use \fB-e --test \fIPACKAGE_NAME\fB\fR
- .SS "PACKAGE QUERY OPTIONS:"
- .PP
- .TP