diff --git a/RPM-Changes.html.tar.bz2 b/RPM-Changes.html.tar.bz2
new file mode 100644
index 0000000..5cb5122
--- /dev/null
+++ b/RPM-Changes.html.tar.bz2
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1b1d6954ea1c3fd4681d1419dbbae6907fac09ac9e8ea8cd33b08e930873e4c2
+size 9527
diff --git a/aloffbyone.diff b/aloffbyone.diff
new file mode 100644
index 0000000..080d2f9
--- /dev/null
+++ b/aloffbyone.diff
@@ -0,0 +1,16 @@
+Fixes an off-by-one error in rpmalAllFileSatisfiesDepend() which
+could lead to a segfault.
+
+Already included in rpm-4.4.7
+
+--- ./lib/rpmal.c.orig 2005-12-14 20:53:12.000000000 +0000
++++ ./lib/rpmal.c 2005-12-14 20:54:28.000000000 +0000
+@@ -744,7 +744,7 @@ rpmalAllFileSatisfiesDepend(const rpmal
+
+ /*@-branchstate@*/ /* FIX: ret is a problem */
+ for (found = 0, ret = NULL;
+- die <= al->dirs + al->numDirs && dieCompare(die, dieNeedle) == 0;
++ die < al->dirs + al->numDirs && dieCompare(die, dieNeedle) == 0;
+ die++)
+ {
+
diff --git a/assumeexec.diff b/assumeexec.diff
deleted file mode 100644
index d74def4..0000000
--- a/assumeexec.diff
+++ /dev/null
@@ -1,27 +0,0 @@
---- tools/elfdeps.c.orig 2011-06-03 13:12:32.000000000 +0000
-+++ tools/elfdeps.c 2011-06-03 13:17:45.000000000 +0000
-@@ -14,6 +14,7 @@
-
- int filter_private = 0;
- int soname_only = 0;
-+int assume_exec = 0;
-
- typedef struct elfInfo_s {
- Elf *elf;
-@@ -226,7 +227,7 @@ static int processFile(const char *fn, i
- ei->isElf64 = 0;
- #endif
- ei->isDSO = (ehdr->e_type == ET_DYN);
-- ei->isExec = (st.st_mode & (S_IXUSR|S_IXGRP|S_IXOTH));
-+ ei->isExec = assume_exec || (st.st_mode & (S_IXUSR|S_IXGRP|S_IXOTH));
-
- processSections(ei);
- }
-@@ -279,6 +280,7 @@ int main(int argc, char *argv[])
- { "requires", 'R', POPT_ARG_VAL, &requires, -1, NULL, NULL },
- { "filter-private", 0, POPT_ARG_VAL, &filter_private, -1, NULL, NULL },
- { "soname-only", 0, POPT_ARG_VAL, &soname_only, -1, NULL, NULL },
-+ { "assume-exec", 0, POPT_ARG_VAL, &assume_exec, -1, NULL, NULL },
- POPT_AUTOHELP
- POPT_TABLEEND
- };
diff --git a/autodeps.diff b/autodeps.diff
index f8ad21f..eb8e567 100644
--- a/autodeps.diff
+++ b/autodeps.diff
@@ -1,6 +1,8 @@
---- ./autodeps/linux.prov.orig 2010-12-03 12:11:57.000000000 +0000
-+++ ./autodeps/linux.prov 2011-05-11 14:27:40.000000000 +0000
-@@ -2,60 +2,72 @@
+Some (probably SUSE specific) changes to linux.prov and linux.req
+
+--- ./autodeps/linux.prov.orig 2002-04-08 19:13:35.000000000 +0000
++++ ./autodeps/linux.prov 2005-12-17 01:49:17.000000000 +0000
+@@ -2,60 +2,71 @@
# This script reads filenames from STDIN and outputs any relevant provides
# information that needs to be included in the package.
@@ -91,9 +93,8 @@
+#
+# --- Mono exes/dlls
+: ${MONO_PREFIX=/usr}
-+if [ -x $MONO_PREFIX/bin/mono -a -n "$monolist" ] ; then
-+ printf "%s\n" "${monolist[@]}" | MONO_PATH=$MONO_PREFIX/lib${MONO_PATH:+:$MONO_PATH} prefix=$MONO_PREFIX $MONO_PREFIX/bin/mono-find-provides || echo "WARNING: MONO RPM PROVIDES WERE NOT GENERATED FOR THIS BUILD!!" 1>&2
-+fi
++[ -x $MONO_PREFIX/bin/mono -a -f $MONO_PREFIX/bin/mono-find-provides -a -n "$monolist" ] &&
++ printf "%s\n" "${monolist[@]}" | MONO_PATH=$MONO_PREFIX/lib${MONO_PATH:+:$MONO_PATH} prefix=$MONO_PREFIX $MONO_PREFIX/bin/mono-find-provides
+
+#
+# --- Kernel module exported symbols
@@ -101,20 +102,26 @@
+ printf "%s\n" "${filelist[@]}" | /usr/lib/rpm/find-provides.ksyms "$@"
exit 0
---- ./autodeps/linux.req.orig 2010-12-03 12:11:57.000000000 +0000
-+++ ./autodeps/linux.req 2011-05-11 14:28:45.000000000 +0000
-@@ -19,18 +19,21 @@ fi
+--- ./autodeps/linux.req.orig 2002-11-14 12:53:11.000000000 +0000
++++ ./autodeps/linux.req 2005-12-17 01:50:07.000000000 +0000
+@@ -19,18 +19,22 @@ fi
#
# --- Grab the file manifest and classify files.
#filelist=`sed "s/['\"]/\\\&/g"`
-filelist=`sed "s/[]['\"*?{}]/\\\\\&/g"`
--exelist=`echo $filelist | xargs -r file | grep -Ev ":.* (commands|script) " | \
+-exelist=`echo $filelist | xargs -r file | egrep -v ":.* (commands|script) " | \
- grep ":.*executable" | cut -d: -f1`
-scriptlist=`echo $filelist | xargs -r file | \
-- grep -E ":.* (commands|script) " | cut -d: -f1`
+- egrep ":.* (commands|script) " | cut -d: -f1`
-liblist=`echo $filelist | xargs -r file | \
- grep ":.*shared object" | cut -d : -f1`
+-
+-interplist=
+-perllist=
+-pythonlist=
+-tcllist=
+#filelist=`sed "s/[]['\"*?{}]/\\\\\&/g"`
++IFS=$'\n'
+filelist=($(grep -Ev '/usr/doc/|/usr/share/doc/'))
+exelist=($(printf "%s\0" "${filelist[@]}" | xargs -0 -r file | \
+ egrep -v ":.* (commands|script) " | \
@@ -123,20 +130,16 @@
+ egrep ":.* (commands|script) " | cut -d: -f1))
+liblist=($(printf "%s\0" "${filelist[@]}" | xargs -0 -r file | \
+ grep ":.*shared object" | cut -d : -f1))
-
--interplist=
--perllist=
--pythonlist=
--tcllist=
++
+interplist=()
+perllist=()
+pythonlist=()
+tcllist=()
-+monolist=($(printf "%s\n" "${filelist[@]}" | egrep "\\.(exe|dll)(\\.config)?\$"))
++monolist=($(printf "%s\n" "${filelist[@]}" | egrep "\\.(exe|dll)\$"))
#
# --- Alpha does not mark 64bit dependencies
-@@ -42,12 +45,12 @@ esac
+@@ -42,12 +46,12 @@ esac
if [ "$needed" -eq 0 ]; then
#
# --- Executable dependency sonames.
@@ -154,7 +157,7 @@
gsub(/'\''"/,"\\&",$1);
printf "%s'$lib64'\n", $1
}
-@@ -56,12 +59,12 @@ if [ "$needed" -eq 0 ]; then
+@@ -56,12 +60,12 @@ if [ "$needed" -eq 0 ]; then
#
# --- Library dependency sonames.
@@ -172,7 +175,7 @@
gsub(/'\''"/,"\\&",$1);
printf "%s'$lib64'\n", $1
}
-@@ -71,30 +74,30 @@ fi
+@@ -71,30 +75,30 @@ fi
#
# --- Script interpreters.
@@ -215,7 +218,7 @@
/^$/ { START=0; }
/^Dynamic Section:$/ { START=1; }
(START==1) && /NEEDED/ {
-@@ -111,7 +114,7 @@ for f in $liblist $exelist ; do
+@@ -110,7 +114,7 @@ for f in $liblist $exelist ; do
sub(/:/, "", $3);
LIBNAME=$3;
}
@@ -224,7 +227,7 @@
print LIBNAME "(" $4 ")'$lib64'";
}
'
-@@ -119,17 +122,29 @@ done | sort -u
+@@ -118,17 +122,28 @@ done | sort -u
#
# --- Perl modules.
@@ -248,9 +251,8 @@
+#
+# --- Mono exes/dlls
+: ${MONO_PREFIX=/usr}
-+if [ -x $MONO_PREFIX/bin/mono -a -n "$monolist" ] ; then
-+ printf "%s\n" "${monolist[@]}" | MONO_PATH=$MONO_PREFIX/lib${MONO_PATH:+:$MONO_PATH} prefix=$MONO_PREFIX $MONO_PREFIX/bin/mono-find-requires || echo "WARNING: MONO RPM REQUIRES WERE NOT GENERATED FOR THIS BUILD!!" 1>&2
-+fi
++[ -x $MONO_PREFIX/bin/mono -a -f $MONO_PREFIX/bin/mono-find-requires -a -n "$monolist" ] &&
++ printf "%s\n" "${monolist[@]}" | MONO_PATH=$MONO_PREFIX/lib${MONO_PATH:+:$MONO_PATH} prefix=$MONO_PREFIX $MONO_PREFIX/bin/mono-find-requires
+
+#
+# --- Kernel module imported symbols
diff --git a/badforsyntax.diff b/badforsyntax.diff
new file mode 100644
index 0000000..8b4716b
--- /dev/null
+++ b/badforsyntax.diff
@@ -0,0 +1,17 @@
+This fixes a typo that caused a compiler warning [#178055].
+
+Already included in rpm-4.4.7.
+
+Index: ./rpmdb/header_internal.c
+===================================================================
+--- ./rpmdb/header_internal.c
++++ ./rpmdb/header_internal.c
+@@ -22,7 +22,7 @@ char ** headerGetLangs(Header h)
+ if ((table = (char **)xcalloc((count+1), sizeof(char *))) == NULL)
+ return NULL;
+
+- for (i = 0, e = *s; i < count > 0; i++, e += strlen(e)+1)
++ for (i = 0, e = *s; i < count; i++, e += strlen(e)+1)
+ table[i] = e;
+ table[count] = NULL;
+
diff --git a/baselibs.conf b/baselibs.conf
deleted file mode 100644
index bdc5343..0000000
--- a/baselibs.conf
+++ /dev/null
@@ -1,3 +0,0 @@
-rpm
-arch ppc package rpm-devel
-arch sparcv9 package rpm-devel
diff --git a/brp.diff b/brp.diff
index 27fe6b5..fdaf8c5 100644
--- a/brp.diff
+++ b/brp.diff
@@ -1,27 +1,9 @@
SUSE specific brp script patches
---- ./scripts/Makefile.am.orig 2010-12-03 12:11:57.000000000 +0000
-+++ ./scripts/Makefile.am 2011-05-11 14:31:45.000000000 +0000
-@@ -6,6 +6,7 @@ CLEANFILES =
-
- EXTRA_DIST = \
- brp-compress brp-python-bytecompile brp-java-gcjcompile \
-+ brp-lib64-linux brp-symlink \
- brp-strip brp-strip-comment-note brp-python-hardlink \
- brp-strip-shared brp-strip-static-archive \
- check-files check-prereqs \
-@@ -24,6 +25,7 @@ EXTRA_DIST = \
-
- rpmconfig_SCRIPTS = \
- brp-compress brp-python-bytecompile brp-java-gcjcompile \
-+ brp-lib64-linux brp-symlink \
- brp-strip brp-strip-comment-note brp-python-hardlink \
- brp-strip-shared brp-strip-static-archive \
- check-files check-prereqs \
---- ./scripts/brp-lib64-linux.orig 2011-05-11 14:30:08.000000000 +0000
-+++ ./scripts/brp-lib64-linux 2011-05-11 14:30:08.000000000 +0000
+--- ./scripts/brp-lib64-linux.orig 2005-12-15 14:04:13.000000000 +0000
++++ ./scripts/brp-lib64-linux 2006-01-27 19:44:16.000000000 +0000
@@ -0,0 +1,42 @@
-+#!/bin/bash
++#!/bin/bash
+# script checks wether package is 64-bit clean
+# and also for a linker bug. (linker allows 64bit libs to link 32bit libs)
+echo "sf@suse.de: if you find problems with this script, drop me a note"
@@ -63,9 +45,19 @@ SUSE specific brp script patches
+ fi
+done
+exit 0
---- ./scripts/brp-strip-comment-note.orig 2010-12-03 12:11:57.000000000 +0000
-+++ ./scripts/brp-strip-comment-note 2011-05-11 14:30:08.000000000 +0000
-@@ -16,6 +16,8 @@ esac
+--- ./scripts/brp-sparc64-linux.orig 2000-06-01 00:54:36.000000000 +0000
++++ ./scripts/brp-sparc64-linux 2005-12-15 14:05:06.000000000 +0000
+@@ -6,6 +6,7 @@ fi
+ files=
+ LC_ALL=
+ LANG=
++LC_TIME=POSIX
+
+ # Move 64bit ELF objects from /lib, /usr/lib, /usr/X11R6/lib to */lib64
+ # directories
+--- ./scripts/brp-strip-comment-note.orig 2005-05-30 06:41:52.000000000 +0000
++++ ./scripts/brp-strip-comment-note 2005-12-15 14:06:07.000000000 +0000
+@@ -13,6 +13,8 @@ esac
# for already stripped elf files in the build root
for f in `find $RPM_BUILD_ROOT -type f \( -perm -0100 -or -perm -0010 -or -perm -0001 \) -exec file {} \; | \
grep -v "^${RPM_BUILD_ROOT}/\?usr/lib/debug" | \
@@ -73,20 +65,20 @@ SUSE specific brp script patches
+ grep -v '/lib/modules/' | \
sed -n -e 's/^\(.*\):[ ]*ELF.*, stripped/\1/p'`; do
note="-R .note"
- if $OBJDUMP -h $f | grep '^[ ]*[0-9]*[ ]*.note[ ]' -A 1 | \
---- ./scripts/brp-strip.orig 2010-12-03 12:11:57.000000000 +0000
-+++ ./scripts/brp-strip 2011-05-11 14:30:08.000000000 +0000
-@@ -15,6 +15,7 @@ esac
+ if objdump -h $f | grep '^[ ]*[0-9]*[ ]*.note[ ]' -A 1 | \
+--- ./scripts/brp-strip.orig 2005-05-30 06:40:24.000000000 +0000
++++ ./scripts/brp-strip 2005-12-15 14:06:37.000000000 +0000
+@@ -13,6 +13,7 @@ esac
for f in `find $RPM_BUILD_ROOT -type f \( -perm -0100 -or -perm -0010 -or -perm -0001 \) -exec file {} \; | \
grep -v "^${RPM_BUILD_ROOT}/\?usr/lib/debug" | \
grep -v ' shared object,' | \
+ grep -v '/lib/modules/' | \
sed -n -e 's/^\(.*\):[ ]*ELF.*, not stripped/\1/p'`; do
- $STRIP -g "$f" || :
+ strip -g "$f" || :
done
---- ./scripts/brp-symlink.orig 2011-05-11 14:30:08.000000000 +0000
-+++ ./scripts/brp-symlink 2011-05-11 14:30:08.000000000 +0000
-@@ -0,0 +1,184 @@
+--- ./scripts/brp-symlink.orig 2005-12-15 14:06:58.000000000 +0000
++++ ./scripts/brp-symlink 2006-01-27 19:41:58.000000000 +0000
+@@ -0,0 +1,182 @@
+#!/bin/sh
+
+# Task: go through the files in $RPM_BUILD_ROOT and
@@ -182,9 +174,7 @@ SUSE specific brp script patches
+ echo " skip the files from packaging)"
+ exit 1
+ ;;
-+ *,/opt/kde3/share/doc*/HTML/*/common) # white listed for not existant
-+ ;;
-+ *,/usr/share/doc/kde/HTML/*/common) # white listed for not existant
++ *,/opt/kde3/share/doc/HTML/*/common) # white listed for not existant
+ ;;
+ *,/proc/*) # links pointing into /proc file system
+ ;;
diff --git a/brpcombress.diff b/brpcombress.diff
new file mode 100644
index 0000000..f46c29b
--- /dev/null
+++ b/brpcombress.diff
@@ -0,0 +1,56 @@
+make brp-compress deal correctly with hardlinked man pages
+
+--- ./scripts/brp-compress.orig 2004-10-17 18:49:52.000000000 +0000
++++ ./scripts/brp-compress 2005-12-15 14:03:58.000000000 +0000
+@@ -5,12 +5,38 @@ if [ -z "$RPM_BUILD_ROOT" -o "$RPM_BUILD
+ exit 0
+ fi
+
++LC_ALL=
++LANG=
++LC_TIME=POSIX
++
+ cd $RPM_BUILD_ROOT
+
+ # Compress man pages
+ COMPRESS="gzip -9 -n"
+ COMPRESS_EXT=.gz
+
++function check_for_hard_link
++{
++ dir=$1
++ b=$2
++ type=$3
++
++ inode=`ls -i $b | awk '{ print $1 }'`
++ others=`find $dir -type f -inum $inode`
++ for afile in $others ; do
++ [ "$afile" != "$b" ] && rm -f $afile
++ done
++
++ case $type in
++ Z|gz) gunzip $b ;;
++ bz2) bunzip2 $b ;;
++ esac
++
++ for afile in $others ; do
++ [ "${afile%.$type}" != "${b%.$type}" ] && ln ${b%.$type} ${afile%.$type}
++ done
++}
++
+ for d in ./usr/man/man* ./usr/man/*/man* ./usr/info \
+ ./usr/share/man/man* ./usr/share/man/*/man* ./usr/share/info \
+ ./usr/kerberos/man ./usr/X11R6/man/man* ./usr/lib/perl5/man/man* \
+@@ -23,9 +49,9 @@ do
+ [ "`basename $f`" = "dir" ] && continue
+
+ case "$f" in
+- *.Z) gunzip $f; b=`echo $f | sed -e 's/\.Z$//'`;;
+- *.gz) gunzip $f; b=`echo $f | sed -e 's/\.gz$//'`;;
+- *.bz2) bunzip2 $f; b=`echo $f | sed -e 's/\.bz2$//'`;;
++ *.Z) gunzip $f || check_for_hard_link $d $f Z; b=`echo $f | sed -e 's/\.Z$//'`;;
++ *.gz) gunzip $f || check_for_hard_link $d $f gz; b=`echo $f | sed -e 's/\.gz$//'`;;
++ *.bz2) bunzip2 $f || check_for_hard_link $d $f bz2; b=`echo $f | sed -e 's/\.bz2$//'`;;
+ *) b=$f;;
+ esac
+
diff --git a/brpcompress.diff b/brpcompress.diff
deleted file mode 100644
index 07e5174..0000000
--- a/brpcompress.diff
+++ /dev/null
@@ -1,96 +0,0 @@
---- ./scripts/brp-compress.orig 2010-12-03 12:11:57.000000000 +0000
-+++ ./scripts/brp-compress 2011-05-11 14:44:21.000000000 +0000
-@@ -5,51 +5,78 @@ if [ -z "$RPM_BUILD_ROOT" -o "$RPM_BUILD
- exit 0
- fi
-
-+LC_ALL=
-+LANG=
-+LC_TIME=POSIX
-+
- cd $RPM_BUILD_ROOT
-
- # Compress man pages
- COMPRESS="gzip -9 -n"
- COMPRESS_EXT=.gz
-
-+function check_for_hard_link
-+{
-+ dir=$1
-+ b=$2
-+
-+ inode=`ls -i $b | awk '{ print $1 }'`
-+ others=`find $dir -type f -inum $inode`
-+ for afile in $others ; do
-+ [ "$afile" != "$b" ] && rm -f "$afile"
-+ done
-+
-+ case $b in
-+ *.Z|*.gz) gunzip $b ;;
-+ *.bz2) bunzip2 $b ;;
-+ *.xz|*.lzma) unxz $b ;;
-+ esac
-+
-+ type=${b##*.}
-+ for afile in $others ; do
-+ [ "${afile%.$type}" != "${b%.$type}" ] && ln ${b%.$type} ${afile%.$type}
-+ done
-+}
-+
- for d in ./usr/man/man* ./usr/man/*/man* ./usr/info \
- ./usr/share/man/man* ./usr/share/man/*/man* ./usr/share/info \
- ./usr/kerberos/man ./usr/X11R6/man/man* ./usr/lib/perl5/man/man* \
- ./usr/share/doc/*/man/man* ./usr/lib/*/man/man*
- do
- [ -d $d ] || continue
-- for f in `find $d -type f ! -name dir`
-+ find $d -type f ! -name dir | while read f
- do
- [ -f "$f" ] || continue
-
- case "$f" in
-- *.gz|*.Z) gunzip -f $f; b=`echo $f | sed -e 's/\.\(gz\|Z\)$//'`;;
-- *.bz2) bunzip2 -f $f; b=`echo $f | sed -e 's/\.bz2$//'`;;
-- *.xz|*.lzma) unxz -f $f; b=`echo $f | sed -e 's/\.\(xz\|lzma\)$//'`;;
-- *) b=$f;;
-+ *.gz|*.Z) gunzip "$f" || check_for_hard_link $d "$f"; b=`echo $f | sed -e 's/\.\(gz\|Z\)$//'`;;
-+ *.bz2) bunzip2 "$f" || check_for_hard_link $d "$f"; b=`echo $f | sed -e 's/\.bz2$//'`;;
-+ *.xz|*.lzma) unxz "$f" || check_for_hard_link $d "$f"; b=`echo $f | sed -e 's/\.\(xz\|lzma\)$//'`;;
-+ *) b="$f";;
- esac
-
-- $COMPRESS $b /dev/null || {
-+ $COMPRESS "$b" /dev/null || {
- inode=`ls -i $b | awk '{ print $1 }'`
- others=`find $d -type f -inum $inode`
- if [ -n "$others" ]; then
- for afile in $others ; do
-- [ "$afile" != "$b" ] && rm -f $afile
-+ [ "$afile" != "$b" ] && rm -f "$afile"
- done
-- $COMPRESS -f $b
-+ $COMPRESS -f "$b"
- for afile in $others ; do
-- [ "$afile" != "$b" ] && ln $b$COMPRESS_EXT $afile$COMPRESS_EXT
-+ [ "$afile" != "$b" ] && ln "$b$COMPRESS_EXT" "$afile$COMPRESS_EXT"
- done
- else
-- $COMPRESS -f $b
-+ $COMPRESS -f "$b"
- fi
- }
- done
-
-- for f in `find $d -type l`
-+ find $d -type l | while read f
- do
-- l=`ls -l $f | sed -e 's/.* -> //' -e 's/\.\(gz\|Z\|bz2\|xz\|lzma\)$//'`
-- rm -f $f
-- b=`echo $f | sed -e 's/\.\(gz\|Z\|bz2\|xz\|lzma\)$//'`
-- ln -sf $l$COMPRESS_EXT $b$COMPRESS_EXT
-+ l="`ls -l "$f" | sed -e 's/.* -> //' -e 's/\.\(gz\|Z\|bz2\|xz\|lzma\)$//'`"
-+ rm -f "$f"
-+ b="`echo "$f" | sed -e 's/\.\(gz\|Z\|bz2\|xz\|lzma\)$//'`"
-+ ln -sf "$l$COMPRESS_EXT" "$b$COMPRESS_EXT"
- done
- done
diff --git a/build.diff b/build.diff
index 65d851b..b050cfd 100644
--- a/build.diff
+++ b/build.diff
@@ -1,64 +1,378 @@
Many changes to Makefiles/autogen and the like to make it build
on SUSE systems.
---- ./configure.ac.orig 2011-05-11 14:27:32.000000000 +0000
-+++ ./configure.ac 2011-05-11 15:18:44.000000000 +0000
-@@ -850,6 +850,7 @@ arm*) RPMCANONCOLOR=0; RPMCANONARCH=arm
+Index: Makefile.am
+===================================================================
+--- Makefile.am.orig
++++ Makefile.am
+@@ -15,7 +15,7 @@ EXTRA_DIST = CHANGES CREDITS Doxyheader
+ po/*.in po/*.po po/rpm.pot \
+ rpm.magic rpmpopt-$(VERSION) rpmqv.c rpm.c
+
+-SUBDIRS = intl po misc @WITH_ZLIB_SUBDIR@ @WITH_ELFUTILS_SUBDIR@ @WITH_MAGIC_SUBDIR@ @WITH_DB_SUBDIR@ @WITH_SQLITE3_SUBDIR@ @WITH_POPT_SUBDIR@ @WITH_BEECRYPT_SUBDIR@ @WITH_NEON_SUBDIR@ lua rpmio rpmdb lib build @WITH_PYTHON_SUBDIR@ tools scripts tests doc .
++SUBDIRS = intl po misc @WITH_ZLIB_SUBDIR@ @WITH_ELFUTILS_SUBDIR@ @WITH_MAGIC_SUBDIR@ @WITH_DB_SUBDIR@ @WITH_SQLITE3_SUBDIR@ @WITH_POPT_SUBDIR@ beecrypt @WITH_NEON_SUBDIR@ @WITH_LUA_SUBDIR@ rpmio rpmdb lib build @WITH_PYTHON_SUBDIR@ tools scripts tests doc .
+
+ INCLUDES = \
+ -I$(top_srcdir)/build \
+Index: autogen.sh
+===================================================================
+--- autogen.sh.orig
++++ autogen.sh
+@@ -26,12 +26,12 @@ case $libtoolize in
+ esac
+ esac
+
+-[ "`$libtoolize --version | head -1`" != "$LTV" ] && echo "$USAGE" && exit 1
+-[ "`autoconf --version | head -1`" != "$ACV" ] && echo "$USAGE" && exit 1
+-[ "`automake --version | head -1 | sed -e 's/1\.4[a-z]/1.4/'`" != "$AMV" ] && echo "$USAGE" # && exit 1
++#[ "`$libtoolize --version | head -1`" != "$LTV" ] && echo "$USAGE" && exit 1
++#[ "`autoconf --version | head -1`" != "$ACV" ] && echo "$USAGE" && exit 1
++#[ "`automake --version | head -1 | sed -e 's/1\.4[a-z]/1.4/'`" != "$AMV" ] && echo "$USAGE" # && exit 1
+
+ myopts=
+-if [ X"$@" = X -a "X`uname -s`" = "XDarwin" -a -d /opt/local ]; then
++if [ X"$*" = X -a "X`uname -s`" = "XDarwin" -a -d /opt/local ]; then
+ export myopts="--prefix=/usr --disable-nls"
+ export CPPFLAGS="-I${myprefix}/include"
+ fi
+@@ -43,7 +43,8 @@ if [ -d zlib ]; then
+ (echo "--- zlib"; cd zlib; ./autogen.sh --noconfigure "$@")
+ fi
+ if [ -d beecrypt ]; then
+- (echo "--- beecrypt"; cd beecrypt; ./autogen.sh --noconfigure "$@")
++ #(echo "--- beecrypt"; cd beecrypt; ./autogen.sh --noconfigure "$@")
++ (echo "--- beecrypt"; cd beecrypt; ./autogen.sh --without-cplusplus --without-java --without-python "$@")
+ fi
+ if [ -d elfutils ]; then
+ (echo "--- elfutils"; cd elfutils; ./autogen.sh --noconfigure "$@")
+@@ -54,6 +55,7 @@ fi
+ if [ -d neon ]; then
+ (echo "--- neon"; cd neon; ./autogen.sh "$@")
+ fi
++(echo "--- db"; cd db/dist; libtoolize --copy --force ; cp /usr/share/aclocal/libtool.m4 aclocal/libtool.ac ; ./s_config )
+
+ echo "--- rpm"
+ $libtoolize --copy --force
+@@ -66,7 +68,7 @@ if [ "$1" = "--noconfigure" ]; then
+ exit 0;
+ fi
+
+-if [ X"$@" = X -a "X`uname -s`" = "XLinux" ]; then
++if [ X"$*" = X -a "X`uname -s`" = "XLinux" ]; then
+ if [ -d /usr/share/man ]; then
+ mandir=/usr/share/man
+ infodir=/usr/share/info
+Index: build/Makefile.am
+===================================================================
+--- build/Makefile.am.orig
++++ build/Makefile.am
+@@ -22,7 +22,7 @@ pkgincdir = $(pkgincludedir)
+ pkginc_HEADERS = rpmbuild.h rpmfc.h rpmfile.h rpmspec.h
+ noinst_HEADERS = buildio.h
+
+-LDFLAGS = -L$(RPM_BUILD_ROOT)$(usrlibdir) -L$(DESTDIR)$(usrlibdir)
++LDFLAGS =
+
+ usrlibdir = $(libdir)@MARK64@
+ usrlib_LTLIBRARIES = librpmbuild.la
+Index: configure.ac
+===================================================================
+--- configure.ac.orig
++++ configure.ac
+@@ -1,30 +1,3 @@
+-
+-echo "
+-****************************************************************************
+-* *
+-* *** WARNING WARNING WARNING *** *
+-* *
+-* This is source code from the development branch of rpm-4.4.2. *
+-* *
+-* If you want the "production" rpm-4.3.3 code, then you should use a *
+-* rpm-4.3.3 src.rpm. Alternatively, if using a CVS checkout, do *
+-* the following: *
+-* *
+-* cvs -d :pserver:anonymous@cvs.rpm.org:/cvs/devel login *
+-* (no password, just carriage return) *
+-* cvs -d :pserver:anonymous@cvs.rpm.org:/cvs/devel get rpm *
+-* cd rpm *
+-* *
+-* Here's the rpm-4_3 branch, latest is rpm-4.3.3: *
+-* cvs up -r rpm-4_3 *
+-* *
+-* Here's the rpm-4_2 branch, latest is rpm-4.2.3: *
+-* cvs up -r rpm-4_2 *
+-* *
+-****************************************************************************
+-"
+-sleep 10
+-
+ AC_PREREQ(2.59)
+ AC_INIT(rpm, 4.4.2, rpm-devel@lists.dulug.duke.edu)
+ AC_CANONICAL_TARGET
+@@ -34,10 +7,9 @@ AM_CONFIG_HEADER([config.h])
+ AM_INIT_AUTOMAKE([foreign])
+
+ dnl Set of available languages.
+-ALL_LINGUAS="cs da de fi fr gl is ja ko no pl pt pt_BR ro ru sk sl sr sv tr"
++ALL_LINGUAS="cs da de fi fr gl is ja ko nb pl pt pt_BR ro ru sk sl sr sv tr"
+
+ dnl Checks for programs.
+-AC_PROG_CXX
+ AC_PROG_AWK
+ AC_PROG_CC
+ AC_PROG_CPP
+@@ -310,7 +282,7 @@ WITH_ZLIB_INCLUDE=
+ WITH_ZLIB_LIB=
+ if test -d zlib ; then
+ WITH_ZLIB_SUBDIR=zlib
+- addlib \${top_builddir}/zlib
++ # addlib \${top_builddir}/zlib
+ WITH_ZLIB_INCLUDE="-I\${top_srcdir}/${WITH_ZLIB_SUBDIR}"
+ INCPATH="$INCPATH -I\${top_srcdir}/${WITH_ZLIB_SUBDIR}"
+ WITH_ZLIB_LIB="\${top_builddir}/${WITH_ZLIB_SUBDIR}/libz.la"
+@@ -350,9 +322,9 @@ AC_SUBST(WITH_BZIP2)
+ localdone=
+
+ dirs=$prefix
+-if test "$cross_compiling" != "yes"; then
+- dirs="$dirs /usr/local"
+-fi
++#if test "$cross_compiling" != "yes"; then
++# dirs="$dirs /usr/local"
++#fi
+ for dir in $dirs
+ do
+ case $dir in
+@@ -463,7 +435,7 @@ AC_CHECK_HEADER([gelf.h], [
+ AC_DEFINE(HAVE_LIBELF, 1, [Define to 1 if you have the 'elf' library (-lelf).])
+ WITH_ELFUTILS_SUBDIR=elfutils
+ WITH_LIBELF_INCLUDE="-I\${top_srcdir}/${WITH_ELFUTILS_SUBDIR}/libelf"
+- WITH_LIBELF_LIB="\${top_builddir}/${WITH_ELFUTILS_SUBDIR}/libelf/libelf.a"
++ WITH_LIBELF_LIB="\${top_builddir}/${WITH_ELFUTILS_SUBDIR}/libelf/libelf_pic.a"
+ fi
+ ])
+ AC_SUBST(WITH_ELFUTILS_SUBDIR)
+@@ -504,7 +476,8 @@ AC_CHECK_HEADER([beecrypt/beecrypt.h], [
+ AC_DEFINE(HAVE_LIBBEECRYPT, 1, [Define to 1 if you have the 'beecrypt' library (-lbeecrypt).])
+ WITH_BEECRYPT_SUBDIR=beecrypt
+ WITH_BEECRYPT_INCLUDE="-I\${top_srcdir}/${WITH_BEECRYPT_SUBDIR}"
+- WITH_BEECRYPT_LIB="\${top_builddir}/${WITH_BEECRYPT_SUBDIR}/libbeecrypt.la"
++ dnl WITH_BEECRYPT_LIB="\${top_builddir}/${WITH_BEECRYPT_SUBDIR}/libbeecrypt.la"
++ AC_DEFINE(HAVE_BEECRYPT_API_H, 1, [Define to 1 if you have the header file.])
+ fi
+ ])
+ AC_SUBST(WITH_BEECRYPT_SUBDIR)
+@@ -648,6 +621,9 @@ dnl AmigaOS and IXEmul have a fork() dum
+ esac
+
+ AM_GNU_GETTEXT
++AM_GNU_GETTEXT_VERSION(0.11.2)
++MKINSTALLDIRS="\$(top_builddir)/./mkinstalldirs"
++AC_SUBST(MKINSTALLDIRS)
+ dnl TVM:
+ dnl horrible *temporary* hack to make sure that if we found gettext() in
+ dnl -lintl that we add -lintl *back* to $LIBS.
+@@ -943,54 +919,74 @@ withval=auto
+ AC_ARG_WITH(python, [ --with-python build rpm python bindings ])
+
+ WITH_PYTHON_VERSION=$withval
+-if test $withval = auto ; then
+
++if test "$WITH_PYTHON_VERSION" = auto ; then
++AC_MSG_CHECKING(for python 2.5)
++AC_RUN_IFELSE([AC_LANG_SOURCE([[
++#include
++main() {
++ exit(strncmp("2.5", PY_VERSION, 3));
++} ]])],[withval=yes],[withval=no],[withval=yes])
++AC_MSG_RESULT($withval)
++if test $withval = yes ; then
++ WITH_PYTHON_VERSION="2.5"
++fi
++fi
++
++if test "$WITH_PYTHON_VERSION" = auto ; then
+ AC_MSG_CHECKING(for python 2.4)
+ AC_RUN_IFELSE([AC_LANG_SOURCE([[
+ #include
+ main() {
+ exit(strncmp("2.4", PY_VERSION, 3));
+ } ]])],[withval=yes],[withval=no],[withval=yes])
+- AC_MSG_RESULT($withval)
+- if test $withval = yes ; then
+- WITH_PYTHON_VERSION="2.4"
+- else
+-
+- AC_MSG_CHECKING(for python 2.3)
+- AC_RUN_IFELSE([AC_LANG_SOURCE([[
+- #include
+- main() {
+- exit(strncmp("2.3", PY_VERSION, 3));
+- } ]])],[withval=yes],[withval=no],[withval=yes])
+- AC_MSG_RESULT($withval)
+- if test $withval = yes ; then
+- WITH_PYTHON_VERSION="2.3"
+- else
+-
+- AC_MSG_CHECKING(for python 2.2)
+- AC_RUN_IFELSE([AC_LANG_SOURCE([[
+- #include
+- main() {
+- exit(strncmp("2.2", PY_VERSION, 3));
+- } ]])],[withval=yes],[withval=no],[withval=yes])
+- AC_MSG_RESULT($withval)
+- if test $withval = yes ; then
+- WITH_PYTHON_VERSION="2.2"
+- else
+-
+- AC_MSG_CHECKING(for python 1.5.2)
+- AC_RUN_IFELSE([AC_LANG_SOURCE([[
+- #include
+- main() {
+- exit(strcmp("1.5.2", PY_VERSION));
+- } ]])],[withval=yes],[withval=no],[withval=yes])
+- AC_MSG_RESULT($withval)
+- if test $withval = yes ; then
+- WITH_PYTHON_VERSION="1.5"
+- fi
+- fi
+- fi
+- fi
++AC_MSG_RESULT($withval)
++if test $withval = yes ; then
++ WITH_PYTHON_VERSION="2.4"
++fi
++fi
++
++if test "$WITH_PYTHON_VERSION" = auto ; then
++AC_MSG_CHECKING(for python 2.3)
++AC_RUN_IFELSE([AC_LANG_SOURCE([[
++#include
++main() {
++ exit(strncmp("2.3", PY_VERSION, 3));
++} ]])],[withval=yes],[withval=no],[withval=yes])
++AC_MSG_RESULT($withval)
++if test $withval = yes ; then
++ WITH_PYTHON_VERSION="2.3"
++fi
++fi
++
++if test "$WITH_PYTHON_VERSION" = auto ; then
++AC_MSG_CHECKING(for python 2.2)
++AC_RUN_IFELSE([AC_LANG_SOURCE([[
++#include
++main() {
++ exit(strncmp("2.2", PY_VERSION, 3));
++} ]])],[withval=yes],[withval=no],[withval=yes])
++AC_MSG_RESULT($withval)
++if test $withval = yes ; then
++ WITH_PYTHON_VERSION="2.2"
++fi
++fi
++
++if test "$WITH_PYTHON_VERSION" = auto ; then
++AC_MSG_CHECKING(for python 1.5.2)
++AC_RUN_IFELSE([AC_LANG_SOURCE([[
++#include
++main() {
++ exit(strcmp("1.5.2", PY_VERSION));
++} ]])],[withval=yes],[withval=no],[withval=yes])
++AC_MSG_RESULT($withval)
++if test $withval = yes ; then
++ WITH_PYTHON_VERSION="1.5"
++fi
++fi
++
++if test "$WITH_PYTHON_VERSION" = auto ; then
++ WITH_PYTHON_VERSION=no
+ fi
+
+ if test "$WITH_PYTHON_VERSION" != no ; then
+@@ -1283,6 +1279,7 @@ arm*) RPMCANONCOLOR=0; RPMCANONARCH="${
mipsel*) RPMCANONCOLOR=0; RPMCANONARCH=mipsel ;;
mips*) RPMCANONCOLOR=0; RPMCANONARCH=mips ;;
m68k*) RPMCANONCOLOR=0; RPMCANONARCH=m68k ;;
+parisc*|hppa*) RPMCANONCOLOR=0; RPMCANONARCH=hppa ;;
- sh3*) RPMCANONCOLOR=0; RPMCANONARCH=sh3 ;;
- sh4*) RPMCANONCOLOR=0; RPMCANONARCH=sh4 ;;
*) RPMCANONCOLOR=0; RPMCANONARCH=unknown ;;
-@@ -860,6 +861,7 @@ esac
+ esac
+ case "${build_os_noversion}" in
+@@ -1290,7 +1287,7 @@ mint) RPMCANONARCH=m68kmint ;;
+ esac
RPMCANONVENDOR="$build_vendor"
case "${build_vendor}" in
- unknown|pc|ibm|redhat|pld|mandrake|conectiva|lvr|yellowdog|caos|suse)
-+ RPMCANONVENDOR=suse
+-unknown|pc|ibm|redhat|pld|mandrake|conectiva|lvr|yellowdog|caos)
++unknown|pc|ibm|redhat|pld|mandrake|conectiva|lvr|yellowdog|caos|suse)
test -f /etc/redhat-release && RPMCANONVENDOR=redhat
- test -f /etc/SuSE-release && RPMCANONVENDOR=suse
test -f /etc/pld-release && RPMCANONVENDOR=pld
-@@ -872,6 +874,9 @@ unknown|pc|ibm|redhat|pld|mandrake|conec
+ test -f /etc/mandrake-release && RPMCANONVENDOR=mandrake
+@@ -1298,6 +1295,7 @@ unknown|pc|ibm|redhat|pld|mandrake|conec
+ test -f /etc/lvr-release && RPMCANONVENDOR=lvr
+ test -f /etc/yellowdog-release && RPMCANONVENDOR=yellowdog
+ test -f /etc/caos-release && RPMCANONVENDOR=caos
++ test -f /etc/SuSE-release -o -f /.buildenv && RPMCANONVENDOR=suse
+ ;;
esac
- RPMCANONOS="$host_os_noversion"
- RPMCANONGNU="$host_os_gnu"
-+if test "$RPMCANONVENDOR" = suse ; then
-+ RPMCANONCOLOR=0
-+fi
- AC_SUBST(RPMCANONCOLOR)
- AC_SUBST(RPMCANONARCH)
- AC_SUBST(RPMCANONVENDOR)
---- ./db3/configure.orig 2010-12-03 12:11:57.000000000 +0000
-+++ ./db3/configure 2011-05-11 15:18:44.000000000 +0000
+ RPMCANONOS="$build_os_noversion"
+@@ -1372,7 +1370,7 @@ dnl XXX this causes popt to depend on zl
+ dnl # XXX Propagate -lucb to popt ...
+ dnl export LIBS INCPATH CONFIG_SITE
+
+-AC_CONFIG_SUBDIRS(popt zlib file sqlite db3)
++AC_CONFIG_SUBDIRS(popt zlib file sqlite db3 elfutils)
+
+ AC_CONFIG_FILES([ Doxyfile Makefile rpmrc macros platform rpmpopt rpm.spec
+ rpmio/Makefile rpmdb/Makefile lib/Makefile build/Makefile
+Index: db3/configure
+===================================================================
+--- db3/configure.orig
++++ db3/configure
@@ -10,9 +10,9 @@ rm -f config.cache
# XXX edit CFLAGS= ... out of invocation args ???
- ARGS="`echo $* | sed -e 's% [^ ]*CFLAGS=[^ ]*%%' -e 's% -[^-][^ ]*%%g' -e 's% --param=[^ ]*%%g' -e 's%--cache-file=.*$%%'`"
+ ARGS="`echo $* | sed -e 's% [^ ]*CFLAGS=[^ ]*%%' -e 's% -[^-][^ ]*%%g' -e 's%--cache-file=.*$%%'`"
-CC="$CC" CFLAGS="$CFLAGS" $db_dist/configure $ARGS \
-+CC="$CC" CFLAGS="$CFLAGS" $db_dist/configure \
- --enable-shared --enable-static \
+- --enable-shared --enable-static --enable-rpc \
- --with-uniquename=_rpmdb --srcdir=$db_dist
++CC="$CC" CFLAGS="$CFLAGS" $db_dist/configure \
++ --enable-shared --enable-static \
+ --with-uniquename=_rpmdb --srcdir=$db_dist $ARGS
mv Makefile Makefile.orig
cat Makefile.orig | sed -e '/^install[:-]/c\
---- ./installplatform.orig 2010-12-03 12:11:57.000000000 +0000
-+++ ./installplatform 2011-05-11 15:18:44.000000000 +0000
-@@ -47,9 +47,9 @@ for SUBST in $SUBSTS ; do
- ARCH_INSTALL_POST='%{nil}'
- case "${ARCH}-${OS}" in
- sparc64*-linux) LIB=lib64 ;;
-- s390x-linux) LIB=lib64 ;;
-- ppc64-linux|powerpc64-linux) LIB=lib64 ;;
-- x86_64-linux|amd64-linux|ia32e-linux) LIB=lib64 ;;
-+ s390x-linux) ARCH_INSTALL_POST=${pkglibdir}/brp-lib64-linux ; LIB=lib64 ;;
-+ ppc64-linux|powerpc64-linux) ARCH_INSTALL_POST=${pkglibdir}/brp-lib64-linux ; LIB=lib64 ;;
-+ x86_64-linux|amd64-linux|ia32e-linux) ARCH_INSTALL_POST=${pkglibdir}/brp-lib64-linux ; LIB=lib64 ;;
- *) LIB=lib;;
+Index: file/src/Makefile.am
+===================================================================
+--- file/src/Makefile.am.orig
++++ file/src/Makefile.am
+@@ -26,7 +26,7 @@ libmagic_la_LDFLAGS = -version-info 1:0:
+
+ noinst_PROGRAMS = file
+ file_SOURCES = file.c
+-file_LDFLAGS = -L../../zlib # -all-static
++file_LDFLAGS = # -L../../zlib # -all-static
+ file_LDADD = libmagic.la
+
+ listobjs:
+Index: installplatform
+===================================================================
+--- installplatform.orig
++++ installplatform
+@@ -62,11 +62,11 @@ for SUBST in $SUBSTS ; do
+ sparcv9-linux) MULTILIBNO=1 ;;
+ sparc64-linux) ARCH_INSTALL_POST=${pkglibdir}/brp-sparc64-linux; LIB=lib64; MULTILIBNO=2 ;;
+ s390-linux) MULTILIBNO=1 ;;
+- s390x-linux) LIB=lib64; MULTILIBNO=2 ;;
++ s390x-linux) ARCH_INSTALL_POST=${pkglibdir}/brp-lib64-linux; LIB=lib64; MULTILIBNO=2 ;;
+ ppc-linux) MULTILIBNO=1 ;;
+- ppc64-linux) LIB=lib64; MULTILIBNO=2 ;;
++ ppc64-linux) ARCH_INSTALL_POST=${pkglibdir}/brp-lib64-linux; LIB=lib64; MULTILIBNO=2 ;;
+ i?86-linux|pentium?-linux|athlon-linux) MULTILIBNO=1 ;;
+- x86_64-linux|amd64-linux|ia32e-linux) LIB=lib64; MULTILIBNO=2 ;;
++ x86_64-linux|amd64-linux|ia32e-linux) ARCH_INSTALL_POST=${pkglibdir}/brp-lib64-linux; LIB=lib64; MULTILIBNO=2 ;;
esac
-@@ -129,6 +129,9 @@ for SUBST in $SUBSTS ; do
+ if [ -n "$MULTILIBNO" ]; then
+@@ -96,6 +96,9 @@ for SUBST in $SUBSTS ; do
apple)
VENDORSED='-e s,^@apple@,,'
;;
@@ -67,4 +381,194 @@ on SUSE systems.
+ ;;
esac
- CANONARCH="`echo $ARCH|sed -e "$canonarch_sed"`"
+ cat $PLATFORM \
+Index: lib/Makefile.am
+===================================================================
+--- lib/Makefile.am.orig
++++ lib/Makefile.am
+@@ -29,7 +29,7 @@ noinst_HEADERS = \
+ mylibs = librpm.la
+ LIBS =
+
+-LDFLAGS = -L$(RPM_BUILD_ROOT)$(usrlibdir) -L$(DESTDIR)$(usrlibdir)
++LDFLAGS =
+
+ usrlibdir = $(libdir)@MARK64@
+ usrlib_LTLIBRARIES = librpm.la
+Index: po/Makefile.in
+===================================================================
+--- po/Makefile.in.orig
++++ po/Makefile.in
+@@ -29,7 +29,7 @@ gettextsrcdir = $(datadir)/gettext/po
+ INSTALL = /usr/bin/install -c
+ INSTALL_DATA = ${INSTALL} -m 644
+ MKINSTALLDIRS = $(top_builddir)/./mkinstalldirs
+-mkinstalldirs = $(SHELL) `case "$(MKINSTALLDIRS)" in /*) echo "$(MKINSTALLDIRS)" ;; *) echo "$(top_builddir)/mkinstalldirs" ;; esac`
++mkinstalldirs = $(SHELL) $(MKINSTALLDIRS)
+
+ CC = gcc
+ GMSGFMT = /usr/bin/msgfmt
+Index: po/Makefile.in.in
+===================================================================
+--- po/Makefile.in.in.orig
++++ po/Makefile.in.in
+@@ -29,7 +29,7 @@ gettextsrcdir = $(datadir)/gettext/po
+ INSTALL = @INSTALL@
+ INSTALL_DATA = @INSTALL_DATA@
+ MKINSTALLDIRS = @MKINSTALLDIRS@
+-mkinstalldirs = $(SHELL) `case "$(MKINSTALLDIRS)" in /*) echo "$(MKINSTALLDIRS)" ;; *) echo "$(top_builddir)/mkinstalldirs" ;; esac`
++mkinstalldirs = $(SHELL) $(MKINSTALLDIRS)
+
+ CC = @CC@
+ GMSGFMT = @GMSGFMT@
+Index: popt/autogen.sh
+===================================================================
+--- popt/autogen.sh.orig
++++ popt/autogen.sh
+@@ -28,7 +28,7 @@ fi
+
+ cd "$THEDIR"
+
+-if [ X"$@" = X -a "X`uname -s`" = "XLinux" ]; then
++if [ X"$*" = X -a "X`uname -s`" = "XLinux" ]; then
+ $srcdir/configure --prefix=/usr "$@"
+ else
+ $srcdir/configure "$@"
+Index: popt/configure.ac
+===================================================================
+--- popt/configure.ac.orig
++++ popt/configure.ac
+@@ -1,11 +1,12 @@
+ AC_INIT(popt.h)
+ AC_CANONICAL_SYSTEM
+ AC_PREREQ(2.12)
+-AC_CONFIG_HEADERS
+ AM_INIT_AUTOMAKE(popt, 1.10.2)
+ AM_CONFIG_HEADER(config.h)
+
+-ALL_LINGUAS="cs da de es eu_ES fi fr gl hu id is it ja ko no pl pt pt_BR ro ru sk sl sr sv tr uk wa zh zh_CN zh_TW"
++ALL_LINGUAS="cs da de es eu_ES fi fr gl hu id is it ja ko nb pl pt pt_BR ro ru sk sl sr sv tr uk wa zh zh_CN zh_TW"
++MKINSTALLDIRS="\$(top_builddir)/./mkinstalldirs"
++AC_SUBST(MKINSTALLDIRS)
+
+ AC_ISC_POSIX
+
+Index: popt/po/Makefile.in
+===================================================================
+--- popt/po/Makefile.in.orig
++++ popt/po/Makefile.in
+@@ -29,7 +29,7 @@ gettextsrcdir = $(datadir)/gettext/po
+ INSTALL = /usr/bin/install -c
+ INSTALL_DATA = ${INSTALL} -m 644
+ MKINSTALLDIRS = $(top_builddir)/./../mkinstalldirs
+-mkinstalldirs = $(SHELL) `case "$(MKINSTALLDIRS)" in /*) echo "$(MKINSTALLDIRS)" ;; *) echo "$(top_builddir)/mkinstalldirs" ;; esac`
++mkinstalldirs = $(SHELL) $(MKINSTALLDIRS)
+
+ CC = gcc
+ GMSGFMT = /usr/bin/msgfmt
+Index: popt/po/Makefile.in.in
+===================================================================
+--- popt/po/Makefile.in.in.orig
++++ popt/po/Makefile.in.in
+@@ -29,7 +29,7 @@ gettextsrcdir = $(datadir)/gettext/po
+ INSTALL = @INSTALL@
+ INSTALL_DATA = @INSTALL_DATA@
+ MKINSTALLDIRS = @MKINSTALLDIRS@
+-mkinstalldirs = $(SHELL) `case "$(MKINSTALLDIRS)" in /*) echo "$(MKINSTALLDIRS)" ;; *) echo "$(top_builddir)/mkinstalldirs" ;; esac`
++mkinstalldirs = $(SHELL) $(MKINSTALLDIRS)
+
+ CC = @CC@
+ GMSGFMT = @GMSGFMT@
+Index: rpmdb/Makefile.am
+===================================================================
+--- rpmdb/Makefile.am.orig
++++ rpmdb/Makefile.am
+@@ -31,7 +31,7 @@ noinst_HEADERS = fprint.h header_interna
+ pkgbindir = @RPMCONFIGDIR@
+ pkgbin_PROGRAMS = \
+ rpmdb_archive rpmdb_checkpoint rpmdb_deadlock rpmdb_dump rpmdb_load \
+- rpmdb_printlog rpmdb_recover rpmdb_svc rpmdb_stat rpmdb_upgrade \
++ rpmdb_printlog rpmdb_recover rpmdb_stat rpmdb_upgrade \
+ rpmdb_verify
+
+ mylibs = librpmdb.la
+@@ -42,7 +42,7 @@ LIBS =
+ libdb_la = $(top_builddir)/$(WITH_DB_SUBDIR)/libdb.la
+
+ # XXX grrr, RPM_BUILD_ROOT prevents build pollution if/when -lrpm different
+-LDFLAGS = -L$(RPM_BUILD_ROOT)$(usrlibdir) -L$(DESTDIR)$(usrlibdir)
++LDFLAGS =
+
+ usrlibdir = $(libdir)@MARK64@
+ usrlib_LTLIBRARIES = librpmdb.la
+Index: rpmio/Makefile.am
+===================================================================
+--- rpmio/Makefile.am.orig
++++ rpmio/Makefile.am
+@@ -24,9 +24,9 @@ pkginc_HEADERS = \
+ rpmsq.h rpmsw.h ugid.h
+ noinst_HEADERS = rpmio_internal.h rpmlua.h rpmhook.h
+
+-BEECRYPTLOBJS = $(shell test X"@WITH_BEECRYPT_SUBDIR@" != X && cat $(top_builddir)/@WITH_BEECTYPT_SUBDIR@/listobjs)
++BEECRYPTLOBJS = $(shell test X"@WITH_BEECRYPT_SUBDIR@" != X && cat $(top_builddir)/@WITH_BEECRYPT_SUBDIR@/listobjs)
+
+-LDFLAGS = -L$(RPM_BUILD_ROOT)$(usrlibdir) -L$(DESTDIR)$(usrlibdir)
++LDFLAGS =
+
+ usrlibdir = $(libdir)@MARK64@
+ usrlib_LTLIBRARIES = librpmio.la
+@@ -41,14 +41,14 @@ librpmio_la_LDFLAGS = -release 4.4 $(LDF
+ @WITH_MAGIC_LIB@ \
+ @WITH_ZLIB_LIB@ \
+ -lpthread
+-librpmio_la_LIBADD = # $(BEECRYPTLOBJS)
+-librpmio_la_DEPENDENCIES = # .created
++librpmio_la_LIBADD = $(BEECRYPTLOBJS)
++librpmio_la_DEPENDENCIES = .created
+
+ .created:
+ if test X"@WITH_BEECRYPT_SUBDIR@" != X; then \
+ ${MAKE} -C $(top_builddir)/@WITH_BEECRYPT_SUBDIR@ listobjs ; \
+ for lo in $(BEECRYPTLOBJS); do \
+- [ -f $$lo ] || $(LN_S) $(top_builddir)/@WITH_BEECRYPT_SUBDIR@/$$lo $$lo ; \
++ [ -f $$lo ] || sed -e "s!'!'$(top_builddir)/beecrypt/!" < $(top_builddir)/beecrypt/$$lo > $$lo ; \
+ done \
+ fi
+ touch $@
+Index: scripts/Makefile.am
+===================================================================
+--- scripts/Makefile.am.orig
++++ scripts/Makefile.am
+@@ -6,6 +6,7 @@ EXTRA_DIST = \
+ brp-compress brp-python-bytecompile brp-java-gcjcompile brp-redhat \
+ brp-strip brp-strip-comment-note \
+ brp-strip-shared brp-strip-static-archive brp-sparc64-linux \
++ brp-lib64-linux brp-symlink \
+ check-files check-prereqs convertrpmrc.sh cross-build \
+ find-debuginfo.sh find-lang.sh find-prov.pl find-req.pl \
+ cpanflute cpanflute2 Specfile.pm find-provides.perl \
+@@ -17,7 +18,8 @@ EXTRA_DIST = \
+ sql.prov sql.req tcl.req tgpg trpm u_pkg.sh \
+ vpkg-provides.sh vpkg-provides2.sh \
+ macros.perl* macros.python* \
+- macros.php* find-*.php find-php-*
++ macros.php* find-*.php find-php-* \
++ find-provides.ksyms find-requires.ksyms
+
+ installprefix = $(DESTDIR)
+
+@@ -28,6 +30,7 @@ config_SCRIPTS = \
+ brp-compress brp-python-bytecompile brp-java-gcjcompile brp-redhat \
+ brp-strip brp-strip-comment-note \
+ brp-strip-shared brp-strip-static-archive brp-sparc64-linux \
++ brp-lib64-linux brp-symlink \
+ check-files check-prereqs convertrpmrc.sh cross-build \
+ find-debuginfo.sh find-lang.sh find-prov.pl find-req.pl \
+ cpanflute cpanflute2 Specfile.pm find-provides.perl \
+@@ -36,4 +39,5 @@ config_SCRIPTS = \
+ rpmdb_loadcvt rpmdiff rpmdiff.cgi \
+ rpm.daily rpm.log rpm.xinetd rpm2cpio.sh \
+ sql.prov sql.req tcl.req tgpg trpm u_pkg.sh \
+- vpkg-provides.sh vpkg-provides2.sh
++ vpkg-provides.sh vpkg-provides2.sh \
++ find-provides.ksyms find-requires.ksyms
diff --git a/buildidprov.diff b/buildidprov.diff
deleted file mode 100644
index fd5b417..0000000
--- a/buildidprov.diff
+++ /dev/null
@@ -1,62 +0,0 @@
-From: Jan Blunck
-Subject: Let debuginfo packages provide the build-id
-
-This patch lets debuginfo packages provide build-id like follows:
-
- debuginfo(build-id) = c63cb23876c5fa85f36beaff58f8557e1bf22517
-
-Users can therefore ask zypper to install the correct debuginfo package with:
-
- zypper install -C "debuginfo(build-id) = c63cb23876c5fa85f36beaff58f8557e1bf22517"
-
---- ./autodeps/linux.prov.orig 2011-05-11 15:58:28.000000000 +0000
-+++ ./autodeps/linux.prov 2011-05-11 15:59:31.000000000 +0000
-@@ -5,6 +5,9 @@
- IFS=$'\n'
- filelist=($(cat))
-
-+debuginfolist=($(printf "%s\n" "${filelist[@]}" | grep "/usr/lib/debug/"))
-+filelist=($(printf "%s\n" "${filelist[@]}" | grep -v "/usr/lib/debug/"))
-+
- solist=($(printf "%s\n" "${filelist[@]}" | grep "\\.so" | grep -v "^/lib/ld.so" | \
- tr '\n' '\0' | xargs -0 -r file -L | grep "ELF.*shared object" | \
- cut -d: -f1))
-@@ -71,6 +74,11 @@ done | sort -u
- printf "%s\n" "${firmwarelist[@]}" | /usr/lib/rpm/firmware.prov | sort -u
-
- #
-+# --- debuginfo files
-+[ -x /usr/lib/rpm/debuginfo.prov -a -n "$debuginfolist" ] &&
-+ printf "%s\n" "${debuginfolist[@]}" | /usr/lib/rpm/debuginfo.prov | sort -u
-+
-+#
- # --- Mono exes/dlls
- : ${MONO_PREFIX=/usr}
- if [ -x $MONO_PREFIX/bin/mono -a -n "$monolist" ] ; then
---- ./macros.in.orig 2011-05-11 15:59:08.000000000 +0000
-+++ ./macros.in 2011-05-11 15:59:31.000000000 +0000
-@@ -182,7 +182,8 @@
- %package debuginfo\
- Summary: Debug information for package %{name}\
- Group: Development/Debug\
--AutoReqProv: 0\
-+AutoReq: 0\
-+AutoProv: 1\
- #Requires: %{?!debug_package_requires:%{name} = %{version}-%{release}}%{?debug_package_requires}\
- %description debuginfo\
- This package provides debug information for package %{name}.\
---- ./scripts/debuginfo.prov.orig 2011-05-11 15:59:31.000000000 +0000
-+++ ./scripts/debuginfo.prov 2011-05-11 15:59:31.000000000 +0000
-@@ -0,0 +1,12 @@
-+#!/bin/sh
-+
-+while read instfile ; do
-+ case $instfile in
-+ */usr/lib/debug/.build-id/*.debug)
-+ if [ -f "$instfile" ] ; then
-+ BUILDID=$(echo $instfile | sed -ne 's|.*/usr/lib/debug/.build-id/\([0-9a-f]*\)/\([0-9a-f]*\)\.debug|\1\2|p')
-+ echo "debuginfo(build-id) = $BUILDID"
-+ fi
-+ ;;
-+ esac
-+done
diff --git a/buildpipe.diff b/buildpipe.diff
deleted file mode 100644
index 81099ed..0000000
--- a/buildpipe.diff
+++ /dev/null
@@ -1,29 +0,0 @@
---- build/rpmfc.c.orig 2011-06-06 11:27:32.000000000 +0000
-+++ build/rpmfc.c 2011-06-08 10:00:38.000000000 +0000
-@@ -165,12 +165,14 @@ static int sigpipe_init(void)
- fcntl(_sigpipe[1], F_SETFD, (fcntl(_sigpipe[1], F_GETFD)|FD_CLOEXEC));
- /* XXX SIGPIPE too, but NSPR disables it already, dont mess with it */
- signal(SIGCHLD, sigpipe_handler);
-+ signal(SIGPIPE, SIG_IGN);
- return _sigpipe[0];
- }
-
- static void sigpipe_finish(void)
- {
- signal(SIGCHLD, SIG_DFL);
-+ signal(SIGPIPE, SIG_DFL);
- close(_sigpipe[0]);
- close(_sigpipe[1]);
- _sigpipe[0] = -1;
-@@ -298,10 +300,9 @@ static StringBuf getOutputFrom(ARGV_t ar
- appendStringBuf(readBuff, buf);
- }
-
-- /* Child exited, we're done */
-+ /* Child exited, we're maybe done */
- if (FD_ISSET(sigpipe, &ibits)) {
- while (read(sigpipe, buf, sizeof(buf)) > 0) {};
-- break;
- }
- }
-
diff --git a/buildsubdir.diff b/buildsubdir.diff
new file mode 100644
index 0000000..fc7923b
--- /dev/null
+++ b/buildsubdir.diff
@@ -0,0 +1,24 @@
+Fix a typo: the macro is currently called %{buildsubdir}
+
+--- ./build/files.c.orig 2005-12-14 19:22:43.000000000 +0000
++++ ./build/files.c 2006-02-17 13:57:25.000000000 +0000
+@@ -1942,7 +1954,7 @@ static int processPackageFiles(Spec spec
+ if (*pkg->fileFile == '/') {
+ ffn = rpmGetPath(pkg->fileFile, NULL);
+ } else {
+- /* XXX FIXME: add %{_buildsubdir} */
++ /* XXX FIXME: add %{buildsubdir} */
+ ffn = rpmGetPath("%{_builddir}/",
+ (spec->buildSubdir ? spec->buildSubdir : "") ,
+ "/", pkg->fileFile, NULL);
+--- ./build/pack.c.orig 2005-07-15 15:06:57.000000000 +0000
++++ ./build/pack.c 2005-12-18 15:14:56.000000000 +0000
+@@ -138,7 +138,7 @@ static /*@only@*/ /*@null@*/ StringBuf a
+ FILE * f;
+ FD_t fd;
+
+- fn = rpmGetPath("%{_builddir}/%{?_buildsubdir:%{_buildsubdir}/}", file, NULL);
++ fn = rpmGetPath("%{_builddir}/%{?buildsubdir:%{buildsubdir}/}", file, NULL);
+
+ fd = Fopen(fn, "r.ufdio");
+ if (fn != buf) fn = _free(fn);
diff --git a/checkfilesnoinfodir.diff b/checkfilesnoinfodir.diff
index 7a467db..48821b9 100644
--- a/checkfilesnoinfodir.diff
+++ b/checkfilesnoinfodir.diff
@@ -1,17 +1,15 @@
Exclude /usr/share/info/dir from check-files. Probably only
interesting for SUSE.
-Index: scripts/check-files
-===================================================================
---- scripts/check-files.orig
-+++ scripts/check-files
-@@ -22,7 +22,9 @@ LC_ALL=C sort > $FILES_RPM
+--- ./scripts/check-files.orig 2005-12-15 14:07:15.000000000 +0000
++++ ./scripts/check-files 2005-12-15 14:09:34.000000000 +0000
+@@ -21,7 +21,9 @@ find $RPM_BUILD_ROOT -type f -o -type l
+ LC_ALL=C sort > $FILES_RPM
- diff -d "$FILES_DISK" "$FILES_RPM" | grep "^< " | cut -c3- |
- while read f; do
+ for f in `diff -d "$FILES_DISK" "$FILES_RPM" | grep "^< " | cut -c3-`; do
- echo $f | sed -e "s#^$RPM_BUILD_ROOT# #g"
+ if test "$RPM_BUILD_ROOT/usr/share/info/dir" != "$f" ; then
-+ echo $f | sed -e "s#^$RPM_BUILD_ROOT# #g"
++ echo $f | sed -e "s#^$RPM_BUILD_ROOT# #g"
+ fi
done
diff --git a/chownwarn.diff b/chownwarn.diff
index fccaa1a..c435432 100644
--- a/chownwarn.diff
+++ b/chownwarn.diff
@@ -1,50 +1,26 @@
-Do not abort if chown/chmod fails but the file is already correct
+Warn the user if chown/fchown fails.
---- ./lib/fsm.c.orig 2011-03-02 06:46:13.000000000 +0000
-+++ ./lib/fsm.c 2011-05-10 16:30:55.000000000 +0000
-@@ -1449,6 +1449,11 @@ static int fsmRename(FSM_t fsm)
- static int fsmChown(FSM_t fsm)
- {
- int rc = chown(fsm->path, fsm->sb.st_uid, fsm->sb.st_gid);
-+ if (rc < 0) {
-+ struct stat st;
-+ if (lstat(fsm->path, &st) == 0 && st.st_uid == fsm->sb.st_uid && st.st_gid == fsm->sb.st_gid)
+--- ./lib/fsm.c.orig 2005-12-14 20:08:04.000000000 +0000
++++ ./lib/fsm.c 2005-12-16 18:19:37.000000000 +0000
+@@ -2186,6 +2191,10 @@ if (!(fsm->mapFlags & CPIO_ALL_HARDLINKS
+ break;
+ case FSM_CHOWN:
+ rc = chown(fsm->path, st->st_uid, st->st_gid);
++ if (rc < 0 && errno == EPERM) {
++ rpmMessage(RPMMESS_WARNING, "can't chown %s (%s)\n", fsm->path, strerror(errno));
+ rc = 0;
-+ }
- if (_fsm_debug && (FSM_CHOWN & FSM_SYSCALL))
- rpmlog(RPMLOG_DEBUG, " %8s (%s, %d, %d) %s\n", fileStageString(FSM_CHOWN),
- fsm->path, (int)fsm->sb.st_uid, (int)fsm->sb.st_gid,
-@@ -1461,6 +1466,11 @@ static int fsmLChown(FSM_t fsm)
- {
- int rc = 0;
- rc = lchown(fsm->path, fsm->sb.st_uid, fsm->sb.st_gid);
-+ if (rc < 0) {
-+ struct stat st;
-+ if (lstat(fsm->path, &st) == 0 && st.st_uid == fsm->sb.st_uid && st.st_gid == fsm->sb.st_gid)
++ }
+ if (_fsm_debug && (stage & FSM_SYSCALL))
+ rpmMessage(RPMMESS_DEBUG, " %8s (%s, %d, %d) %s\n", cur,
+ fsm->path, (int)st->st_uid, (int)st->st_gid,
+@@ -2195,6 +2204,10 @@ if (!(fsm->mapFlags & CPIO_ALL_HARDLINKS
+ case FSM_LCHOWN:
+ #if ! CHOWN_FOLLOWS_SYMLINK
+ rc = lchown(fsm->path, st->st_uid, st->st_gid);
++ if (rc < 0 && errno == EPERM) {
++ rpmMessage(RPMMESS_WARNING, "can't lchown %s (%s)\n", fsm->path, strerror(errno));
+ rc = 0;
-+ }
- if (_fsm_debug && (FSM_LCHOWN & FSM_SYSCALL))
- rpmlog(RPMLOG_DEBUG, " %8s (%s, %d, %d) %s\n", fileStageString(FSM_LCHOWN),
- fsm->path, (int)fsm->sb.st_uid, (int)fsm->sb.st_gid,
-@@ -1472,6 +1482,11 @@ static int fsmLChown(FSM_t fsm)
- static int fsmChmod(FSM_t fsm)
- {
- int rc = chmod(fsm->path, (fsm->sb.st_mode & 07777));
-+ if (rc < 0) {
-+ struct stat st;
-+ if (lstat(fsm->path, &st) == 0 && (st.st_mode & 07777) == (fsm->sb.st_mode & 07777))
-+ rc = 0;
-+ }
- if (_fsm_debug && (FSM_CHMOD & FSM_SYSCALL))
- rpmlog(RPMLOG_DEBUG, " %8s (%s, 0%04o) %s\n", fileStageString(FSM_CHMOD),
- fsm->path, (unsigned)(fsm->sb.st_mode & 07777),
-@@ -2033,6 +2048,9 @@ if (!(fsm->mapFlags & CPIO_ALL_HARDLINKS
- st->st_mtime = rpmfiFMtimeIndex(fi, fsm->ix);
- rc = fsmUtime(fsm);
- st->st_mtime = mtime;
-+ /* utime error is not critical for directories */
-+ if (rc && S_ISDIR(st->st_mode))
-+ rc = 0;
- }
- #if WITH_CAP
- if (!rc && !S_ISDIR(st->st_mode) && !getuid()) {
++ }
+ if (_fsm_debug && (stage & FSM_SYSCALL))
+ rpmMessage(RPMMESS_DEBUG, " %8s (%s, %d, %d) %s\n", cur,
+ fsm->path, (int)st->st_uid, (int)st->st_gid,
diff --git a/compress.diff b/compress.diff
new file mode 100644
index 0000000..82295f3
--- /dev/null
+++ b/compress.diff
@@ -0,0 +1,31 @@
+Fix uncompress waitpid logic to shut up the compiler [#160434]
+
+--- ./file/src/compress.c.orig 2006-03-24 15:37:23.000000000 +0000
++++ ./file/src/compress.c 2006-03-24 15:42:52.000000000 +0000
+@@ -341,6 +341,7 @@ uncompressbuf(struct magic_set *ms, int
+ file_error(ms, errno, "cannot create pipe");
+ return 0;
+ }
++ pid2 = (pid_t)-1;
+ switch ((pid1=fork())) {
+ case 0: /* child */
+ (void) close(0);
+@@ -382,7 +383,7 @@ uncompressbuf(struct magic_set *ms, int
+ * fork again, to avoid blocking because both
+ * pipes filled
+ */
+- switch (fork()) {
++ switch ((pid2 = fork())) {
+ case 0: /* child */
+ (void)close(fdout[0]);
+ if (swrite(fdin[1], old, n) != n) {
+@@ -439,7 +440,8 @@ err:
+ (void) close(fdin[1]);
+ (void) close(fdout[0]);
+ waitpid(pid1, NULL, 0);
+- waitpid(pid2, NULL, 0);
++ if (pid2 != (pid_t)-1)
++ waitpid(pid2, NULL, 0);
+ return n;
+ }
+ /*@notreached@*/
diff --git a/convertdb1static.diff b/convertdb1static.diff
index 1b9e796..52caaf5 100644
--- a/convertdb1static.diff
+++ b/convertdb1static.diff
@@ -1,369 +1,35 @@
-Build convertdb1, too.
+Build convertdb1 as static binary so that it always works.
---- ./Makefile.am.orig 2011-05-11 15:15:27.000000000 +0000
-+++ ./Makefile.am 2011-05-11 15:18:21.000000000 +0000
-@@ -174,6 +174,10 @@ bin_PROGRAMS += rpmqpack
- rpmqpack_SOURCES = rpmqpack.c
- rpmqpack_LDADD = lib/librpm.la
+diff -ur ./tools/Makefile.am ../rpm-4.4.2.orig/tools/Makefile.am
+--- ./tools/Makefile.am 2006-09-21 19:35:56.000000000 +0200
++++ ../rpm-4.4.2.orig/tools/Makefile.am 2006-09-21 20:59:01.000000000 +0200
+@@ -18,22 +18,26 @@
-+bin_PROGRAMS += convertdb1
-+convertdb1_SOURCES = tools/convertdb1.c
-+convertdb1_LDADD = lib/librpm.la
-+
- rpmconfig_DATA = rpmrc
- rpmrc: $(top_srcdir)/rpmrc.in
- @$(SED) \
---- tools/convertdb1.c.orig 2011-05-12 13:31:37.000000000 +0000
-+++ tools/convertdb1.c 2011-05-12 13:31:28.000000000 +0000
-@@ -0,0 +1,351 @@
-+#if defined(HAVE_CONFIG_H)
-+#include "system.h"
-+const char *__progname;
-+#else
-+#include
-+#include
-+#include
-+#endif
-+
-+#include
-+#include
-+#include
-+#include
-+#include
-+
-+#define FA_MAGIC 0x02050920
-+
-+struct faFileHeader{
-+ unsigned int magic;
-+ unsigned int firstFree;
-+};
-+
-+struct faHeader {
-+ unsigned int size;
-+ unsigned int freeNext; /* offset of the next free block, 0 if none */
-+ unsigned int freePrev;
-+ unsigned int isFree;
-+
-+ /* note that the u16's appear last for alignment/space reasons */
-+};
-+
-+
-+static int fadFileSize;
-+
-+static ssize_t Pread(FD_t fd, void * buf, size_t count, off_t offset) {
-+ if (Fseek(fd, offset, SEEK_SET) < 0)
-+ return -1;
-+ return Fread(buf, sizeof(char), count, fd);
-+}
-+
-+static FD_t fadOpen(const char * path)
-+{
-+ struct faFileHeader newHdr;
-+ FD_t fd;
-+ struct stat stb;
-+
-+ fd = Fopen(path, "r.fdio");
-+ if (!fd || Ferror(fd))
-+ return NULL;
-+
-+ if (fstat(Fileno(fd), &stb)) {
-+ Fclose(fd);
-+ return NULL;
-+ }
-+ fadFileSize = stb.st_size;
-+
-+ /* is this file brand new? */
-+ if (fadFileSize == 0) {
-+ Fclose(fd);
-+ return NULL;
-+ }
-+ if (Pread(fd, &newHdr, sizeof(newHdr), 0) != sizeof(newHdr)) {
-+ Fclose(fd);
-+ return NULL;
-+ }
-+ if (newHdr.magic != FA_MAGIC) {
-+ Fclose(fd);
-+ return NULL;
-+ }
-+ /*@-refcounttrans@*/ return fd /*@=refcounttrans@*/ ;
-+}
-+
-+static int fadNextOffset(FD_t fd, unsigned int lastOffset)
-+{
-+ struct faHeader header;
-+ int offset;
-+
-+ offset = (lastOffset)
-+ ? (lastOffset - sizeof(header))
-+ : sizeof(struct faFileHeader);
-+
-+ if (offset >= fadFileSize)
-+ return 0;
-+
-+ if (Pread(fd, &header, sizeof(header), offset) != sizeof(header))
-+ return 0;
-+
-+ if (!lastOffset && !header.isFree)
-+ return (offset + sizeof(header));
-+
-+ do {
-+ offset += header.size;
-+
-+ if (Pread(fd, &header, sizeof(header), offset) != sizeof(header))
-+ return 0;
-+
-+ if (!header.isFree) break;
-+ } while (offset < fadFileSize && header.isFree);
-+
-+ if (offset < fadFileSize) {
-+ /* Sanity check this to make sure we're not going in loops */
-+ offset += sizeof(header);
-+
-+ if (offset <= lastOffset) return -1;
-+
-+ return offset;
-+ } else
-+ return 0;
-+}
-+
-+static int fadFirstOffset(FD_t fd)
-+{
-+ return fadNextOffset(fd, 0);
-+}
-+
-+/*@-boundsread@*/
-+static int dncmp(const void * a, const void * b)
-+ /*@*/
-+{
-+ const char *const * first = a;
-+ const char *const * second = b;
-+ return strcmp(*first, *second);
-+}
-+/*@=boundsread@*/
-+
-+static void compressFilelist(Header h)
-+{
-+ struct rpmtd_s fileNames;
-+ char ** dirNames;
-+ const char ** baseNames;
-+ uint32_t * dirIndexes;
-+ rpm_count_t count;
-+ int xx, i;
-+ int dirIndex = -1;
-+
-+ /*
-+ * This assumes the file list is already sorted, and begins with a
-+ * single '/'. That assumption isn't critical, but it makes things go
-+ * a bit faster.
-+ */
-+
-+ if (headerIsEntry(h, RPMTAG_DIRNAMES)) {
-+ xx = headerDel(h, RPMTAG_OLDFILENAMES);
-+ return; /* Already converted. */
-+ }
-+
-+ if (!headerGet(h, RPMTAG_OLDFILENAMES, &fileNames, HEADERGET_MINMEM))
-+ return;
-+ count = rpmtdCount(&fileNames);
-+ if (count < 1)
-+ return;
-+
-+ dirNames = xmalloc(sizeof(*dirNames) * count); /* worst case */
-+ baseNames = xmalloc(sizeof(*dirNames) * count);
-+ dirIndexes = xmalloc(sizeof(*dirIndexes) * count);
-+
-+ /* HACK. Source RPM, so just do things differently */
-+ { const char *fn = rpmtdGetString(&fileNames);
-+ if (fn && *fn != '/') {
-+ dirIndex = 0;
-+ dirNames[dirIndex] = xstrdup("");
-+ while ((i = rpmtdNext(&fileNames)) >= 0) {
-+ dirIndexes[i] = dirIndex;
-+ baseNames[i] = rpmtdGetString(&fileNames);
-+ }
-+ goto exit;
-+ }
-+ }
-+
-+ while ((i = rpmtdNext(&fileNames)) >= 0) {
-+ char ** needle;
-+ char savechar;
-+ char * baseName;
-+ size_t len;
-+ const char *filename = rpmtdGetString(&fileNames);
-+
-+ if (filename == NULL) /* XXX can't happen */
-+ continue;
-+ baseName = strrchr(filename, '/') + 1;
-+ len = baseName - filename;
-+ needle = dirNames;
-+ savechar = *baseName;
-+ *baseName = '\0';
-+ if (dirIndex < 0 ||
-+ (needle = bsearch(&filename, dirNames, dirIndex + 1, sizeof(dirNames[0]), dncmp)) == NULL) {
-+ char *s = xmalloc(len + 1);
-+ rstrlcpy(s, filename, len + 1);
-+ dirIndexes[i] = ++dirIndex;
-+ dirNames[dirIndex] = s;
-+ } else
-+ dirIndexes[i] = needle - dirNames;
-+
-+ *baseName = savechar;
-+ baseNames[i] = baseName;
-+ }
-+
-+exit:
-+ if (count > 0) {
-+ headerPutUint32(h, RPMTAG_DIRINDEXES, dirIndexes, count);
-+ headerPutStringArray(h, RPMTAG_BASENAMES, baseNames, count);
-+ headerPutStringArray(h, RPMTAG_DIRNAMES,
-+ (const char **) dirNames, dirIndex + 1);
-+ }
-+
-+ rpmtdFreeData(&fileNames);
-+ for (i = 0; i <= dirIndex; i++) {
-+ free(dirNames[i]);
-+ }
-+ free(dirNames);
-+ free(baseNames);
-+ free(dirIndexes);
-+
-+ xx = headerDel(h, RPMTAG_OLDFILENAMES);
-+}
-+
-+/*
-+ * Up to rpm 3.0.4, packages implicitly provided their own name-version-release.
-+ * Retrofit an explicit "Provides: name = epoch:version-release.
-+ */
-+static void providePackageNVR(Header h)
-+{
-+ const char *name;
-+ char *pEVR;
-+ rpmsenseFlags pFlags = RPMSENSE_EQUAL;
-+ int bingo = 1;
-+ struct rpmtd_s pnames;
-+ rpmds hds, nvrds;
-+
-+ /* Generate provides for this package name-version-release. */
-+ pEVR = headerGetEVR(h, &name);
-+ if (!(name && pEVR))
-+ return;
-+
-+ /*
-+ * Rpm prior to 3.0.3 does not have versioned provides.
-+ * If no provides at all are available, we can just add.
-+ */
-+ if (!headerGet(h, RPMTAG_PROVIDENAME, &pnames, HEADERGET_MINMEM)) {
-+ goto exit;
-+ }
-+
-+ /*
-+ * Otherwise, fill in entries on legacy packages.
-+ */
-+ if (!headerIsEntry(h, RPMTAG_PROVIDEVERSION)) {
-+ while (rpmtdNext(&pnames) >= 0) {
-+ rpmsenseFlags fdummy = RPMSENSE_ANY;
-+
-+ headerPutString(h, RPMTAG_PROVIDEVERSION, "");
-+ headerPutUint32(h, RPMTAG_PROVIDEFLAGS, &fdummy, 1);
-+ }
-+ goto exit;
-+ }
-+
-+ /* see if we already have this provide */
-+ hds = rpmdsNew(h, RPMTAG_PROVIDENAME, 0);
-+ nvrds = rpmdsSingle(RPMTAG_PROVIDENAME, name, pEVR, pFlags);
-+ if (rpmdsFind(hds, nvrds) >= 0) {
-+ bingo = 0;
-+ }
-+ rpmdsFree(hds);
-+ rpmdsFree(nvrds);
-+
-+exit:
-+ if (bingo) {
-+ const char *evr = pEVR;
-+ headerPutString(h, RPMTAG_PROVIDENAME, name);
-+ headerPutString(h, RPMTAG_PROVIDEVERSION, evr);
-+ headerPutUint32(h, RPMTAG_PROVIDEFLAGS, &pFlags, 1);
-+ }
-+ rpmtdFreeData(&pnames);
-+ free(pEVR);
-+}
-+/*@=bounds@*/
-+
-+static rpmdb db;
-+
-+int
-+main(int argc, char ** argv)
-+{
-+ FD_t fd;
-+ int offset;
-+ Header h;
-+ const char *name;
-+ const char *version;
-+ const char *release;
-+ rpmts ts;
-+
-+ if (argc != 2)
-+ {
-+ fprintf(stderr, "usage: %s \n", argv[0]);
-+ exit(1);
-+ }
-+ if ((fd = fadOpen(argv[1])) == 0)
-+ {
-+ fprintf(stderr, "could not open %s\n", argv[1]);
-+ exit(1);
-+ }
-+ rpmInitMacros(NULL, "/usr/lib/rpm/macros");
-+
-+ /* speed things up */
-+ (void) rpmDefineMacro(NULL, "_rpmdb_rebuild %{nil}", -1);
-+
-+ ts = rpmtsCreate();
-+
-+ if (rpmtsOpenDB(ts, O_RDWR)) {
-+ fprintf(stderr, "could not open rpm database\n");
-+ exit(1);
-+ }
-+
-+ for (offset = fadFirstOffset(fd); offset; offset = fadNextOffset(fd, offset))
-+ {
-+ rpmdbMatchIterator mi;
-+
-+ /* have to use lseek instead of Fseek because headerRead
-+ * uses low level IO
-+ */
-+ if (lseek(Fileno(fd), (off_t)offset, SEEK_SET) == -1)
-+ {
-+ perror("lseek");
-+ continue;
-+ }
-+ h = headerRead(fd, HEADER_MAGIC_NO);
-+ if (!h)
-+ continue;
-+ compressFilelist(h);
-+ providePackageNVR(h);
-+ headerNVR(h, &name, &version, &release);
-+ mi = rpmdbInitIterator(db, RPMTAG_NAME, name, 0);
-+ rpmdbSetIteratorRE(mi, RPMTAG_VERSION, RPMMIRE_DEFAULT, version);
-+ rpmdbSetIteratorRE(mi, RPMTAG_RELEASE, RPMMIRE_DEFAULT, release);
-+ if (rpmdbNextIterator(mi))
-+ {
-+ printf("%s-%s-%s is already in database\n", name, version, release);
-+ rpmdbFreeIterator(mi);
-+ headerFree(h);
-+ continue;
-+ }
-+ rpmdbFreeIterator(mi);
-+ if (rpmtsHeaderAddDB(ts, h))
-+ {
-+ fprintf(stderr, "could not add %s-%s-%s!\n", name, version, release);
-+ }
-+ headerFree(h);
-+ }
-+ Fclose(fd);
-+ rpmtsCloseDB(ts);
-+ rpmtsFree(ts);
-+ return 0;
-+}
-+
+ EXTRA_DIST = rpminject.c rpmsort.c rpmxml.c rpmxp.c rpmxp.h hashtab.h
+
+-EXTRA_PROGRAMS = debugedit convertdb1 rpminject rpmsort rpmtool rpmxml
++EXTRA_PROGRAMS = rpminject rpmsort rpmtool rpmxml
+
+ LDADD = \
+ $(top_builddir)/lib/librpm.la
+
+-staticLDFLAGS = @LDFLAGS_STATIC@ @LDFLAGS_NPTL@
++staticLDFLAGS = @LDFLAGS_STATIC@ # @LDFLAGS_NPTL@
+
+ noinst_PROGRAMS = dumpdb
+
+ pkgbindir = @RPMCONFIGDIR@
+-pkgbin_PROGRAMS = @WITH_LIBDWARF_DEBUGEDIT@ javadeps rpmcache rpmdeps rpmfile
++pkgbin_PROGRAMS = debugedit javadeps rpmcache rpmdeps rpmfile convertdb1
+ MAGIC = $(pkgbindir)/magic
+
+ bin_PROGRAMS = rpmgraph
+
+ convertdb1_SOURCES = convertdb1.c
++convertdb1_LDFLAGS = $(staticLDFLAGS)
++convertdb1_LDADD = \
++ $(top_builddir)/lib/librpm.la \
++ @WITH_LIBELF_LIB@
+
+ debugedit_SOURCES = debugedit.c hashtab.c
+ debugedit_LDADD = @LDFLAGS_STATIC@ \
diff --git a/db-4.8.30.tar.bz2 b/db-4.8.30.tar.bz2
deleted file mode 100644
index b0fa0be..0000000
--- a/db-4.8.30.tar.bz2
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:2ba998b7451758928011878514c78b8a6f0fbfd49ebf5cc9f4269f4666414ab4
-size 19969243
diff --git a/db.diff b/db.diff
index 0d389f0..121ae44 100644
--- a/db.diff
+++ b/db.diff
@@ -1,82 +1,111 @@
---- db/db/db.c.orig 2010-04-12 20:25:22.000000000 +0000
-+++ db/db/db.c 2011-05-12 11:38:59.000000000 +0000
-@@ -646,6 +646,8 @@ __env_mpool(dbp, fname, flags)
- MAKE_INMEM(dbp);
+--- db/db/db.c.orig 2004-11-11 15:58:46.000000000 +0000
++++ db/db/db.c 2005-12-15 16:17:45.000000000 +0000
+@@ -591,6 +591,8 @@ __db_dbenv_mpool(dbp, fname, flags)
+ (F_ISSET(dbp, DB_AM_NOT_DURABLE) ? DB_TXN_NOT_DURABLE : 0),
+ 0, dbp->pgsize)) != 0)
return (ret);
- }
+ if (LF_ISSET(DB_NOFSYNC) && mpf->mfp)
+ F_SET(mpf->mfp, MP_NOFSYNC);
- /*
- * Set the open flag. We use it to mean that the dbp has gone
---- db/db/db_iface.c.orig 2010-04-12 20:25:22.000000000 +0000
-+++ db/db/db_iface.c 2011-05-12 11:21:32.000000000 +0000
-@@ -1230,6 +1230,7 @@ __db_open_arg(dbp, txn, fname, dname, ty
+ return (0);
+ }
+--- db/db/db_iface.c.orig 2004-10-16 01:31:54.000000000 +0000
++++ db/db/db_iface.c 2005-12-15 16:17:45.000000000 +0000
+@@ -1068,7 +1068,7 @@ __db_open_arg(dbp, txn, fname, dname, ty
#define OKFLAGS \
- (DB_AUTO_COMMIT | DB_CREATE | DB_EXCL | DB_FCNTL_LOCKING | \
- DB_MULTIVERSION | DB_NOMMAP | DB_NO_AUTO_COMMIT | DB_RDONLY | \
-+ DB_NOFSYNC | \
- DB_RDWRMASTER | DB_READ_UNCOMMITTED | DB_THREAD | DB_TRUNCATE)
- if ((ret = __db_fchk(env, "DB->open", flags, OKFLAGS)) != 0)
+ (DB_AUTO_COMMIT | DB_CREATE | DB_DIRTY_READ | DB_EXCL | \
+ DB_FCNTL_LOCKING | DB_NO_AUTO_COMMIT | DB_NOMMAP | DB_RDONLY | \
+- DB_RDWRMASTER | DB_THREAD | DB_TRUNCATE | DB_WRITEOPEN)
++ DB_RDWRMASTER | DB_THREAD | DB_TRUNCATE | DB_WRITEOPEN | DB_NOFSYNC)
+ if ((ret = __db_fchk(dbenv, "DB->open", flags, OKFLAGS)) != 0)
return (ret);
---- db/dbinc/mp.h.orig 2010-04-12 20:25:22.000000000 +0000
-+++ db/dbinc/mp.h 2011-05-12 12:01:32.000000000 +0000
-@@ -467,6 +467,7 @@ struct __mpoolfile {
+ if (LF_ISSET(DB_EXCL) && !LF_ISSET(DB_CREATE))
+--- db/dbinc/db.in.orig 2004-10-16 01:31:54.000000000 +0000
++++ db/dbinc/db.in 2005-12-15 16:17:45.000000000 +0000
+@@ -260,6 +260,7 @@ struct __db_dbt {
+ #define DB_FCNTL_LOCKING 0x0002000 /* UNDOC: fcntl(2) locking. */
+ #define DB_RDWRMASTER 0x0004000 /* UNDOC: allow subdb master open R/W */
+ #define DB_WRITEOPEN 0x0008000 /* UNDOC: open with write lock. */
++#define DB_NOFSYNC 0x0010000 /* UNDOC: don't fsync */
+
+ /*
+ * Flags private to DB_ENV->txn_begin.
+--- db/dbinc/mp.h.orig 2004-10-16 01:31:54.000000000 +0000
++++ db/dbinc/mp.h 2005-12-15 16:25:56.000000000 +0000
+@@ -309,6 +309,7 @@ struct __mpoolfile {
#define MP_FAKE_UOC 0x080 /* Unlink_on_close field: fake flag. */
#define MP_NOT_DURABLE 0x100 /* File is not durable. */
#define MP_TEMP 0x200 /* Backing file is a temporary. */
-+#define MP_NOFSYNC 0x400 /* Don't fsync */
++#define MP_NOFSYNC 0x400 /* Don't fsync */
u_int32_t flags;
};
---- db/dbinc_auto/api_flags.in.orig 2011-05-12 11:40:57.000000000 +0000
-+++ db/dbinc_auto/api_flags.in 2011-05-12 11:55:10.000000000 +0000
-@@ -83,6 +83,7 @@
- #define DB_NOORDERCHK 0x00000002
- #define DB_NOPANIC 0x00000800
- #define DB_NO_AUTO_COMMIT 0x00001000
-+#define DB_NOFSYNC 0x00040000
- #define DB_ODDFILESIZE 0x00000080
- #define DB_ORDERCHKONLY 0x00000004
- #define DB_OVERWRITE 0x00001000
---- db/dist/s_config.orig 2010-04-12 20:25:23.000000000 +0000
-+++ db/dist/s_config 2011-05-12 12:00:34.000000000 +0000
-@@ -8,7 +8,8 @@ trap 'rm -f aclocal.m4 ; exit 0' 0 1 2 3
- . ./RELEASE
-
- echo "autoconf: building aclocal.m4..."
--cat aclocal/*.m4 aclocal_java/*.m4 > aclocal.m4
-+cat aclocal/*.m4 aclocal_java/*.m4 > acinclude.m4
-+aclocal
-
- echo "autoconf: running autoheader to build config.hin..."
- rm -f config.hin
---- db/mp/mp_sync.c.orig 2010-04-12 20:25:34.000000000 +0000
-+++ db/mp/mp_sync.c 2011-05-12 11:36:58.000000000 +0000
-@@ -578,7 +578,7 @@ done: /*
- if (ret == 0 && required_write) {
+--- db/mp/mp_sync.c.orig 2004-11-11 15:58:48.000000000 +0000
++++ db/mp/mp_sync.c 2005-12-15 16:23:57.000000000 +0000
+@@ -553,7 +553,7 @@ done: /*
+ if (ret == 0 && (op == DB_SYNC_CACHE || op == DB_SYNC_FILE)) {
if (dbmfp == NULL)
- ret = __memp_sync_files(env);
+ ret = __memp_sync_files(dbenv, dbmp);
- else
-+ else if (!F_ISSET(dbmfp->mfp, MP_NOFSYNC))
- ret = __os_fsync(env, dbmfp->fhp);
++ else if (!dbmfp->mfp || !F_ISSET(dbmfp->mfp, MP_NOFSYNC))
+ ret = __os_fsync(dbenv, dbmfp->fhp);
}
-@@ -665,7 +665,7 @@ __memp_sync_file(env, mfp, argp, countp,
- "%s: unable to flush", (char *)
- R_ADDR(dbmp->reginfo, mfp->path_off));
- }
-- } else
-+ } else if (!F_ISSET(dbmfp->mfp, MP_NOFSYNC))
- ret = __os_fsync(env, dbmfp->fhp);
+@@ -600,7 +600,7 @@ int __memp_sync_files(dbenv, dbmp)
+ MUTEX_THREAD_LOCK(dbenv, dbmp->mutexp);
+ for (dbmfp = TAILQ_FIRST(&dbmp->dbmfq);
+ dbmfp != NULL; dbmfp = TAILQ_NEXT(dbmfp, q)) {
+- if (dbmfp->mfp != mfp || F_ISSET(dbmfp, MP_READONLY))
++ if (dbmfp->mfp != mfp || F_ISSET(dbmfp, MP_READONLY | MP_NOFSYNC))
+ continue;
+ ret = __os_fsync(dbenv, dbmfp->fhp);
+ break;
+@@ -662,6 +662,9 @@ __memp_mf_sync(dbmp, mfp)
- /*
-@@ -801,6 +801,8 @@ __memp_mf_sync(dbmp, mfp, locked)
- COMPQUIET(hp, NULL);
- env = dbmp->env;
+ dbenv = dbmp->dbenv;
+ if (F_ISSET(mfp, MP_NOFSYNC))
+ return 0;
++
/*
- * We need to be holding the hash lock: we're using the path name
- * and __memp_nameop might try and rename the file.
+ * Expects caller to be holding the region lock: we're using the path
+ * name and __memp_nameop might try and rename the file.
+--- db/dist/s_config.orig 2003-12-15 21:42:41.000000000 +0000
++++ db/dist/s_config 2005-02-11 14:44:09.018907747 +0000
+@@ -20,14 +20,15 @@
+ autoconf
+
+ # Edit version information we couldn't pre-compute.
+-(echo "1,\$s/__EDIT_DB_VERSION_MAJOR__/$DB_VERSION_MAJOR/g" &&
+- echo "1,\$s/__EDIT_DB_VERSION_MINOR__/$DB_VERSION_MINOR/g" &&
+- echo "1,\$s/__EDIT_DB_VERSION_PATCH__/$DB_VERSION_PATCH/g" &&
+- echo "1,\$s/__EDIT_DB_VERSION_STRING__/$DB_VERSION_STRING/g" &&
+- echo "1,\$s/__EDIT_DB_VERSION_UNIQUE_NAME__/$DB_VERSION_UNIQUE_NAME/g" &&
+- echo "1,\$s/__EDIT_DB_VERSION__/$DB_VERSION/g" &&
+- echo "w" &&
+- echo "q") | ed configure
++mv configure configure.old
++sed -e "s/__EDIT_DB_VERSION_MAJOR__/$DB_VERSION_MAJOR/g" \
++ -e "s/__EDIT_DB_VERSION_MINOR__/$DB_VERSION_MINOR/g" \
++ -e "s/__EDIT_DB_VERSION_PATCH__/$DB_VERSION_PATCH/g" \
++ -e "s/__EDIT_DB_VERSION_STRING__/$DB_VERSION_STRING/g" \
++ -e "s/__EDIT_DB_VERSION_UNIQUE_NAME__/$DB_VERSION_UNIQUE_NAME/g" \
++ -e "s/__EDIT_DB_VERSION__/$DB_VERSION/g" \
++< configure.old > configure
++rm -f configure.old
+
+ rm -rf autom4te.cache
+ chmod 555 configure
+--- db/dist/aclocal/options.ac.orig 2005-12-15 16:43:14.000000000 +0000
++++ db/dist/aclocal/options.ac 2005-12-15 16:43:40.000000000 +0000
+@@ -277,10 +277,6 @@ fi
+
+ # Uniquename excludes C++, Java, RPC.
+ if test "$db_cv_uniquename" = "yes"; then
+- if test "$db_cv_rpc" = "yes"; then
+- AC_MSG_ERROR(
+- [--with-uniquename is not compatible with --enable-rpc])
+- fi
+ if test "$db_cv_cxx" = "yes"; then
+ AC_MSG_ERROR(
+ [--with-uniquename is not compatible with --enable-cxx])
diff --git a/dbfsync.diff b/dbfsync.diff
index a71fb23..00da14c 100644
--- a/dbfsync.diff
+++ b/dbfsync.diff
@@ -1,24 +1,54 @@
Support a database-local fsync setting. Needs berkeley db patch.
---- ./lib/backend/dbconfig.c.orig 2011-01-03 13:57:41.000000000 +0000
-+++ ./lib/backend/dbconfig.c 2011-05-10 17:00:29.000000000 +0000
-@@ -58,8 +58,10 @@ static const struct poptOption rdbOption
- { "mp_size", 0,POPT_ARG_INT, &staticcfg.db_cachesize, 0,
- NULL, NULL },
+--- ./rpmdb/db3.c.orig 2005-03-23 18:15:28.000000000 +0000
++++ ./rpmdb/db3.c 2006-01-27 20:08:29.000000000 +0000
+@@ -211,11 +211,13 @@ static int db_fini(dbiIndex dbi, const c
+ return rc;
+ }
+#if 0
- { "nofsync", 0,POPT_ARG_NONE, &staticcfg.db_no_fsync, 0,
- NULL, NULL },
+ static int db3_fsync_disable(/*@unused@*/ int fd)
+ /*@*/
+ {
+ return 0;
+ }
+#endif
- /* Per-dbi options */
- { "nommap", 0,POPT_BIT_SET, &staticdbi.dbi_oflags, DB_NOMMAP,
-@@ -69,6 +71,8 @@ static const struct poptOption rdbOption
+ #if 0
+ #if HAVE_LIBPTHREAD
+@@ -414,6 +416,7 @@ static int db_init(dbiIndex dbi, const c
+ /* dbenv->set_rep_transport(???) */
+ /* dbenv->set_rep_limit(???) */
+
++#if 0
+ if (dbi->dbi_no_fsync) {
+ #if (DB_VERSION_MAJOR == 3 && DB_VERSION_MINOR != 0) || (DB_VERSION_MAJOR == 4)
+ xx = db_env_set_func_fsync(db3_fsync_disable);
+@@ -422,6 +425,7 @@ static int db_init(dbiIndex dbi, const c
+ #endif
+ xx = cvtdberr(dbi, "db_env_set_func_fsync", xx, _debug);
+ }
++#endif
+
+ if (dbi->dbi_shmkey) {
+ xx = dbenv->set_shm_key(dbenv, dbi->dbi_shmkey);
+--- ./rpmdb/dbconfig.c.orig 2004-10-16 12:50:52.000000000 +0000
++++ ./rpmdb/dbconfig.c 2005-12-15 13:12:32.000000000 +0000
+@@ -99,6 +99,8 @@ struct poptOption rdbOptions[] = {
NULL, NULL },
- { "lockdbfd", 0,POPT_ARG_NONE, &staticdbi.dbi_lockdbfd, 0,
+ { "fcntl_locking",0,POPT_BIT_SET, &db3dbi.dbi_oflags, DB_FCNTL_LOCKING,
NULL, NULL },
-+ { "nofsync", 0,POPT_BIT_SET, &staticdbi.dbi_oflags, DB_NOFSYNC,
++ { "nofsync", 0,POPT_BIT_SET, &db3dbi.dbi_oflags, DB_NOFSYNC,
+ NULL, NULL },
- POPT_TABLEEND
- };
+ { "btree", 0,POPT_ARG_VAL, &db3dbi.dbi_type, DB_BTREE,
+ NULL, NULL },
+@@ -145,8 +147,6 @@ struct poptOption rdbOptions[] = {
+ NULL, NULL },
+ { "usedbenv", 0,POPT_ARG_NONE, &db3dbi.dbi_use_dbenv, 0,
+ NULL, NULL },
+- { "nofsync", 0,POPT_ARG_NONE, &db3dbi.dbi_no_fsync, 0,
+- NULL, NULL },
+ { "nodbsync", 0,POPT_ARG_NONE, &db3dbi.dbi_no_dbsync, 0,
+ NULL, NULL },
+ { "lockdbfd", 0,POPT_ARG_NONE, &db3dbi.dbi_lockdbfd, 0,
diff --git a/dbprivate.diff b/dbprivate.diff
index 48d3912..28aeda3 100644
--- a/dbprivate.diff
+++ b/dbprivate.diff
@@ -1,14 +1,14 @@
-Always use DB_PRIVATE. Unfortunately no longer configurable
-in the macros file.
+Always use DB_PRIVATE. Should probably be configured instead.
---- lib/backend/db3.c.orig 2011-05-12 15:38:18.000000000 +0000
-+++ lib/backend/db3.c 2011-05-12 15:38:41.000000000 +0000
-@@ -119,7 +119,7 @@ static int db_init(rpmdb rdb, const char
- int retry_open = 2;
- struct _dbConfig * cfg = &rdb->cfg;
- /* This is our setup, thou shall not have other setups before us */
-- uint32_t eflags = (DB_CREATE|DB_INIT_MPOOL|DB_INIT_CDB);
-+ uint32_t eflags = (DB_CREATE|DB_INIT_MPOOL|DB_INIT_CDB|DB_PRIVATE);
+--- ./rpmdb/db3.c.orig 2005-03-23 18:15:28.000000000 +0000
++++ ./rpmdb/db3.c 2006-01-27 20:08:29.000000000 +0000
+@@ -1034,6 +1050,9 @@ static int db3open(rpmdb rpmdb, rpmTag r
+ #endif
+ #endif
- if (rdb->db_dbenv != NULL) {
- rdb->db_opens++;
++ /* always use fcntl lock */
++ dbi->dbi_eflags |= DB_PRIVATE;
++
+ if (access(dbhome, W_OK) == -1) {
+
+ /* dbhome is unwritable, don't attempt DB_CREATE on DB->open ... */
diff --git a/dbrointerruptable.diff b/dbrointerruptable.diff
index 1fb0233..7a59346 100644
--- a/dbrointerruptable.diff
+++ b/dbrointerruptable.diff
@@ -1,11 +1,11 @@
-Do not block signals if the database is opened read-only, it just
+Do not block signals if the database is opened read-only, it jst
annoys the users. [#48026]
---- ./lib/rpmdb.c.orig 2011-02-28 09:57:27.000000000 +0000
-+++ ./lib/rpmdb.c 2011-05-10 16:58:21.000000000 +0000
-@@ -623,10 +623,12 @@ int rpmdbClose(rpmdb db)
- {
+--- ./rpmdb/rpmdb.c.orig 2005-02-16 03:18:19.000000000 +0000
++++ ./rpmdb/rpmdb.c 2006-02-21 20:37:44.000000000 +0000
+@@ -846,10 +873,12 @@ int rpmdbClose(rpmdb db)
rpmdb * prev, next;
+ int dbix;
int rc = 0;
+ int dbmode;
@@ -13,18 +13,13 @@ annoys the users. [#48026]
goto exit;
+ dbmode = db->db_mode;
- (void) rpmdbUnlink(db);
+ (void) rpmdbUnlink(db, "rpmdbClose");
- if (db->nrefs > 0)
-@@ -655,11 +657,13 @@ int rpmdbClose(rpmdb db)
- db = _free(db);
+ /*@-usereleased@*/
+@@ -886,12 +915,14 @@ int rpmdbClose(rpmdb db)
+ /*@-refcounttrans@*/ db = _free(db); /*@=refcounttrans@*/
+ /*@=usereleased@*/
- exit:
-- (void) rpmsqEnable(-SIGHUP, NULL);
-- (void) rpmsqEnable(-SIGINT, NULL);
-- (void) rpmsqEnable(-SIGTERM,NULL);
-- (void) rpmsqEnable(-SIGQUIT,NULL);
-- (void) rpmsqEnable(-SIGPIPE,NULL);
+ if ((dbmode & (O_RDWR|O_WRONLY)) != 0) {
+ (void) rpmsqEnable(-SIGHUP, NULL);
+ (void) rpmsqEnable(-SIGINT, NULL);
@@ -32,25 +27,31 @@ annoys the users. [#48026]
+ (void) rpmsqEnable(-SIGQUIT,NULL);
+ (void) rpmsqEnable(-SIGPIPE,NULL);
+ }
+ exit:
+- (void) rpmsqEnable(-SIGHUP, NULL);
+- (void) rpmsqEnable(-SIGINT, NULL);
+- (void) rpmsqEnable(-SIGTERM,NULL);
+- (void) rpmsqEnable(-SIGQUIT,NULL);
+- (void) rpmsqEnable(-SIGPIPE,NULL);
return rc;
}
+ /*@=incondefs@*/
+@@ -1021,11 +1070,13 @@ static int openDatabase(/*@null@*/ const
+ if (db == NULL)
+ return 1;
-@@ -721,11 +725,13 @@ static int openDatabase(const char * pre
- /* Try to ensure db home exists, error out if we cant even create */
- rc = rpmioMkpath(rpmdbHome(db), 0755, getuid(), getgid());
- if (rc == 0) {
-- (void) rpmsqEnable(SIGHUP, NULL);
-- (void) rpmsqEnable(SIGINT, NULL);
-- (void) rpmsqEnable(SIGTERM,NULL);
-- (void) rpmsqEnable(SIGQUIT,NULL);
-- (void) rpmsqEnable(SIGPIPE,NULL);
-+ if ((db->db_mode & (O_RDWR|O_WRONLY)) != 0) {
-+ (void) rpmsqEnable(SIGHUP, NULL);
-+ (void) rpmsqEnable(SIGINT, NULL);
-+ (void) rpmsqEnable(SIGTERM,NULL);
-+ (void) rpmsqEnable(SIGQUIT,NULL);
-+ (void) rpmsqEnable(SIGPIPE,NULL);
-+ }
+- (void) rpmsqEnable(SIGHUP, NULL);
+- (void) rpmsqEnable(SIGINT, NULL);
+- (void) rpmsqEnable(SIGTERM,NULL);
+- (void) rpmsqEnable(SIGQUIT,NULL);
+- (void) rpmsqEnable(SIGPIPE,NULL);
++ if ((db->db_mode & (O_RDWR|O_WRONLY)) != 0) {
++ (void) rpmsqEnable(SIGHUP, NULL);
++ (void) rpmsqEnable(SIGINT, NULL);
++ (void) rpmsqEnable(SIGTERM,NULL);
++ (void) rpmsqEnable(SIGQUIT,NULL);
++ (void) rpmsqEnable(SIGPIPE,NULL);
++ }
+
+ db->db_api = _dbapi;
- /* Just the primary Packages database opened here */
- rc = (rpmdbOpenIndex(db, RPMDBI_PACKAGES, db->db_flags) != NULL) ? 0 : -2;
diff --git a/debugedit-canon-fix.diff b/debugedit-canon-fix.diff
deleted file mode 100644
index f2be21b..0000000
--- a/debugedit-canon-fix.diff
+++ /dev/null
@@ -1,119 +0,0 @@
---- ./tools/debugedit.c.orig 2011-05-20 11:26:04.000000000 +0000
-+++ ./tools/debugedit.c 2011-05-20 11:27:56.000000000 +0000
-@@ -158,7 +158,7 @@ strptr (DSO *dso, int sec, off_t offset)
- {
- if (data->d_buf
- && offset >= data->d_off
-- && offset < data->d_off + data->d_size)
-+ && offset < data->d_off + (off_t)data->d_size)
- return (const char *) data->d_buf + (offset - data->d_off);
- }
- }
-@@ -496,9 +496,10 @@ static int
- edit_dwarf2_line (DSO *dso, uint32_t off, char *comp_dir, int phase)
- {
- unsigned char *ptr = debug_sections[DEBUG_LINE].data, *dir;
-- unsigned char **dirt;
-+ char **dirt;
- unsigned char *endsec = ptr + debug_sections[DEBUG_LINE].size;
- unsigned char *endcu, *endprol;
-+ char line_base;
- unsigned char opcode_base;
- uint32_t value, dirt_cnt;
- size_t comp_dir_len = strlen (comp_dir);
-@@ -542,6 +543,7 @@ edit_dwarf2_line (DSO *dso, uint32_t off
- return 1;
- }
-
-+ line_base = (char) (ptr[2] & 0xff);
- opcode_base = ptr[4];
- ptr = dir = ptr + 4 + opcode_base;
-
-@@ -553,13 +555,13 @@ edit_dwarf2_line (DSO *dso, uint32_t off
- ++value;
- }
-
-- dirt = (unsigned char **) alloca (value * sizeof (unsigned char *));
-+ dirt = (char **) alloca (value * sizeof (unsigned char *));
- dirt[0] = (unsigned char *) ".";
- dirt_cnt = 1;
- ptr = dir;
- while (*ptr != 0)
- {
-- dirt[dirt_cnt++] = ptr;
-+ dirt[dirt_cnt++] = (char *)ptr;
- ptr = (unsigned char *) strchr ((char *)ptr, 0) + 1;
- }
- ptr++;
-@@ -672,7 +674,7 @@ edit_dwarf2_line (DSO *dso, uint32_t off
-
- if (dest_dir)
- {
-- unsigned char *srcptr, *buf = NULL;
-+ char *srcptr, *buf = NULL;
- size_t base_len = strlen (base_dir);
- size_t dest_len = strlen (dest_dir);
- size_t shrank = 0;
-@@ -686,11 +688,14 @@ edit_dwarf2_line (DSO *dso, uint32_t off
- ptr = dir;
- }
- else
-- ptr = srcptr = dir;
-+ {
-+ ptr = dir;
-+ srcptr = (char *)dir;
-+ }
- while (*srcptr != 0)
- {
- size_t len = strlen ((char *)srcptr) + 1;
-- const unsigned char *readptr = srcptr;
-+ const char *readptr = srcptr;
-
- char *orig = strdup ((const char *) srcptr);
-
-@@ -717,10 +722,13 @@ edit_dwarf2_line (DSO *dso, uint32_t off
-
- if (shrank > 0)
- {
-- if (--shrank == 0)
-+ --shrank;
-+#if 0
-+ if (shrank == 0)
- error (EXIT_FAILURE, 0,
- "canonicalization unexpectedly shrank by one character");
- else
-+#endif
- {
- memset (ptr, 'X', shrank);
- ptr += shrank;
-@@ -756,21 +764,26 @@ edit_dwarf2_line (DSO *dso, uint32_t off
- }
- dirty_section (DEBUG_STR);
- }
-- else if (ptr != srcptr)
-+ else if ((char *)ptr != srcptr)
- memmove (ptr, srcptr, len);
- srcptr += len;
- ptr += len;
-- dir = srcptr;
-+ dir = (unsigned char *)srcptr;
- read_uleb128 (srcptr);
- read_uleb128 (srcptr);
- read_uleb128 (srcptr);
- if (ptr != dir)
-- memmove (ptr, dir, srcptr - dir);
-- ptr += srcptr - dir;
-+ memmove (ptr, dir, (unsigned char *)srcptr - dir);
-+ ptr += (unsigned char *)srcptr - dir;
- }
- *ptr = '\0';
- free (buf);
- }
-+
-+ ptr++;
-+ /* fill the rest until the line number program starts with NOP opcode */
-+ memset(ptr, opcode_base - line_base, endprol - ptr);
-+ /* don't touch the line number program */
- return 0;
- }
-
diff --git a/debugedit-comp-dir.diff b/debugedit-comp-dir.diff
deleted file mode 100644
index 288ed10..0000000
--- a/debugedit-comp-dir.diff
+++ /dev/null
@@ -1,51 +0,0 @@
-Include compilation directory in source file list if used.
-
---- ./tools/debugedit.c.orig 2011-05-11 14:27:32.000000000 +0000
-+++ ./tools/debugedit.c 2011-05-11 15:31:31.000000000 +0000
-@@ -503,6 +503,7 @@ edit_dwarf2_line (DSO *dso, uint32_t off
- uint32_t value, dirt_cnt;
- size_t comp_dir_len = strlen (comp_dir);
- size_t abs_file_cnt = 0, abs_dir_cnt = 0;
-+ int comp_dir_used = 0;
-
- if (phase != 0)
- return 0;
-@@ -611,6 +612,7 @@ edit_dwarf2_line (DSO *dso, uint32_t off
- memcpy (p, dirt[value], dir_len);
- p[dir_len] = '/';
- memcpy (p + dir_len + 1, file, file_len + 1);
-+ comp_dir_used = 1;
- }
- canonicalize_path (s, s);
- if (list_file_fd != -1)
-@@ -644,6 +646,30 @@ edit_dwarf2_line (DSO *dso, uint32_t off
- }
- ++ptr;
-
-+ if (comp_dir_used && list_file_fd != -1
-+ && (base_dir == NULL || has_prefix (comp_dir, base_dir)))
-+ {
-+ char *p;
-+ size_t size;
-+ ssize_t ret;
-+
-+ size = comp_dir_len + 1;
-+ p = comp_dir;
-+ if (base_dir)
-+ {
-+ p += strlen (base_dir);
-+ size -= strlen (base_dir);
-+ }
-+ while (size > 0)
-+ {
-+ ret = write (list_file_fd, p, size);
-+ if (ret == -1)
-+ break;
-+ size -= ret;
-+ p += ret;
-+ }
-+ }
-+
- if (dest_dir)
- {
- unsigned char *srcptr, *buf = NULL;
diff --git a/debugedit.diff b/debugedit.diff
index ad9ec99..5a3bc06 100644
--- a/debugedit.diff
+++ b/debugedit.diff
@@ -1,26 +1,8 @@
-Make debugedit build without dwarf.h
+Make debugedit build without dwarf.h. Also fixes a logic bug for ppc.
---- ./Makefile.am.orig 2010-12-22 11:17:20.000000000 +0000
-+++ ./Makefile.am 2011-05-10 16:03:49.000000000 +0000
-@@ -143,7 +143,6 @@ rpm2cpio_LDADD += @WITH_NSS_LIB@ @WITH_P
-
-
- if LIBELF
--if LIBDWARF
- rpmconfig_SCRIPTS += scripts/find-debuginfo.sh
-
- rpmlibexec_PROGRAMS += debugedit
-@@ -156,7 +155,6 @@ elfdeps_SOURCES = tools/elfdeps.c
- elfdeps_LDADD = rpmio/librpmio.la
- elfdeps_LDADD += @WITH_LIBELF_LIB@ @WITH_POPT_LIB@
- endif
--endif
-
- rpmlibexec_PROGRAMS += javadeps
- javadeps_SOURCES = tools/javadeps.c
---- ./tools/debugedit.c.orig 2010-12-03 12:11:57.000000000 +0000
-+++ ./tools/debugedit.c 2011-05-10 16:03:49.000000000 +0000
-@@ -37,7 +37,37 @@
+--- ./tools/debugedit.c.orig 2005-12-15 14:28:49.000000000 +0000
++++ ./tools/debugedit.c 2006-03-17 13:01:53.000000000 +0000
+@@ -34,7 +34,37 @@
#include
#include
@@ -57,5 +39,14 @@ Make debugedit build without dwarf.h
+#define DW_FORM_ref_udata 0x15
+#define DW_FORM_indirect 0x16
- #include
- #include
+ #include "hashtab.h"
+
+@@ -1039,7 +1069,7 @@ edit_dwarf2 (DSO *dso)
+ break;
+ case EM_PPC:
+ case EM_PPC64:
+- if (rtype != R_PPC_ADDR32 || rtype != R_PPC_UADDR32)
++ if (rtype != R_PPC_ADDR32 && rtype != R_PPC_UADDR32)
+ goto fail;
+ break;
+ case EM_S390:
diff --git a/debuginfo-mono.patch b/debuginfo-mono.patch
deleted file mode 100644
index d877a73..0000000
--- a/debuginfo-mono.patch
+++ /dev/null
@@ -1,20 +0,0 @@
---- ./scripts/find-debuginfo.sh.orig 2011-05-11 16:10:22.000000000 +0000
-+++ ./scripts/find-debuginfo.sh 2011-05-11 16:10:48.000000000 +0000
-@@ -211,6 +211,17 @@ while read nlinks inum f; do
- ;;
- *) continue ;;
- esac
-+ # double check that we really have an ELF file,
-+ # to handle monodevelop-debugger-gdb and monodevelop-debugger-mdb
-+ ftype=`/usr/bin/file $f | cut -d: -f2-`
-+ case $ftype in
-+ *ELF*) ;;
-+ *)
-+ echo "$f is not an ELF file, skipping"
-+ continue
-+ ;;
-+ esac
-+
- get_debugfn "$f"
- [ -f "${debugfn}" ] && continue
-
diff --git a/debuglink.diff b/debuglink.diff
deleted file mode 100644
index 4a97043..0000000
--- a/debuglink.diff
+++ /dev/null
@@ -1,12 +0,0 @@
---- ./scripts/find-debuginfo.sh.orig 2011-05-11 15:59:44.000000000 +0000
-+++ ./scripts/find-debuginfo.sh 2011-05-11 16:10:22.000000000 +0000
-@@ -186,7 +186,8 @@ make_id_link()
- get_debugfn()
- {
- dn=$(dirname "${1#$RPM_BUILD_ROOT}")
-- bn=$(basename "$1" .debug).debug
-+# Do not strip existing .debug suffixes
-+ bn=$(basename "$1").debug
-
- debugdn=${debugdir}${dn}
- debugfn=${debugdn}/${bn}
diff --git a/debugsource-package.diff b/debugsource-package.diff
deleted file mode 100644
index 11eae89..0000000
--- a/debugsource-package.diff
+++ /dev/null
@@ -1,57 +0,0 @@
-Subject: Split sources for debugging into separate -debugsource package
-
-At the moment the -debuginfo package also include the sources where used to
-build the binary. The patches moves them into a separate package -debugsource.
-
---- ./macros.in.orig 2011-05-11 15:01:39.000000000 +0000
-+++ ./macros.in 2011-05-11 15:36:05.000000000 +0000
-@@ -190,6 +190,18 @@ Debug information is useful when develop
- package or when debugging this package.\
- %files debuginfo -f debugfiles.list\
- %defattr(-,root,root)\
-+\
-+%package debugsource\
-+Summary: Debug sources for package %{name}\
-+Group: Development/Debug\
-+AutoReqProv: 0\
-+Requires: %{name}-debuginfo = %{version}-%{release}\
-+%description debugsource\
-+This package provides debug sources for package %{name}.\
-+Debug sources are useful when developing applications that use this\
-+package or when debugging this package.\
-+%files debugsource -f debugsources.list\
-+%defattr(-,root,root)\
- %{nil}
-
- %_defaultdocdir %{_datadir}/doc/packages
---- ./scripts/find-debuginfo.sh.orig 2011-05-11 14:46:18.000000000 +0000
-+++ ./scripts/find-debuginfo.sh 2011-05-11 15:36:05.000000000 +0000
-@@ -187,8 +187,8 @@ set -o pipefail
- strict_error=ERROR
- $strict || strict_error=WARNING
-
--# Strip ELF binaries
--find $RPM_BUILD_ROOT ! -path "${debugdir}/*.debug" -type f \( -perm +111 -or -name "*.so*" -or -name "*.ko" \) -print 0 | sort -z |
-+# Strip ELF binaries (and no static libraries)
-+find $RPM_BUILD_ROOT ! -path "${debugdir}/*.debug" -type f \( -perm +111 -or -name "*.so*" -or -name "*.ko" \) ! -name "*.a" -print0 | sort -z |
- xargs --no-run-if-empty -0 stat -c '%h %D_%i %n' |
- while read nlinks inum f; do
- case $(objdump -h $f 2>/dev/null | egrep -o '(debug[\.a-z_]*|gnu.version)') in
-@@ -300,10 +300,16 @@ if [ -d "${RPM_BUILD_ROOT}/usr/lib" -o -
-
- (cd "${RPM_BUILD_ROOT}/usr"
- test ! -d lib/debug || find lib/debug ! -type d
-- test ! -d src/debug || find src/debug -mindepth 1 -maxdepth 1
- ) | sed 's,^,/usr/,' >> "$LISTFILE"
- fi
-
-+: > "$SOURCEFILE"
-+if [ -d "${RPM_BUILD_ROOT}/usr/src" ]; then
-+ (cd "${RPM_BUILD_ROOT}/usr"
-+ test ! -d src/debug || find src/debug -mindepth 1 -maxdepth 1
-+ ) | sed 's,^,/usr/,' >> "$SOURCEFILE"
-+fi
-+
- # Append to $1 only the lines from stdin not already in the file.
- append_uniq()
- {
diff --git a/debugsubpkg.diff b/debugsubpkg.diff
deleted file mode 100644
index 2f9157e..0000000
--- a/debugsubpkg.diff
+++ /dev/null
@@ -1,322 +0,0 @@
-Create a debuginfo package for each subpackage.
-
---- ./build/files.c.orig 2011-05-13 15:34:01.000000000 +0000
-+++ ./build/files.c 2011-05-13 15:35:42.000000000 +0000
-@@ -20,6 +20,10 @@
- #include /* rpmDoDigest() */
- #include
-
-+#if HAVE_GELF_H
-+#include
-+#endif
-+
- #include "rpmio/rpmio_internal.h" /* XXX rpmioSlurp */
- #include "rpmio/base64.h"
- #include "misc/fts.h"
-@@ -2105,13 +2109,237 @@ exit:
- return rc;
- }
-
-+#if HAVE_GELF_H && HAVE_LIBELF
-+/* Query the build-id from the ELF file NAME and store it in the newly
-+ allocated *build_id array of size *build_id_size. Returns -1 on
-+ error. */
-+
-+int
-+getELFBuildId (const char *name,
-+ unsigned char **id, size_t *id_size)
-+{
-+ int fd, i;
-+ Elf *elf;
-+ GElf_Ehdr ehdr;
-+ Elf_Data *build_id = NULL;
-+ size_t build_id_offset = 0, build_id_size = 0;
-+
-+ /* Now query the build-id of the file and add the
-+ corresponding links in the .build-id tree.
-+ The following code is based on tools/debugedit.c. */
-+ fd = open (name, O_RDONLY);
-+ if (fd < 0)
-+ return -1;
-+ elf = elf_begin (fd, ELF_C_READ_MMAP, NULL);
-+ if (elf == NULL)
-+ {
-+ fprintf (stderr, "cannot open ELF file: %s",
-+ elf_errmsg (-1));
-+ close (fd);
-+ return -1;
-+ }
-+ if (elf_kind (elf) != ELF_K_ELF
-+ || gelf_getehdr (elf, &ehdr) == NULL
-+ || (ehdr.e_type != ET_DYN
-+ && ehdr.e_type != ET_EXEC
-+ && ehdr.e_type != ET_REL))
-+ {
-+ elf_end (elf);
-+ close (fd);
-+ return -1;
-+ }
-+ for (i = 0; i < ehdr.e_shnum; ++i)
-+ {
-+ Elf_Scn *s = elf_getscn (elf, i);
-+ GElf_Shdr shdr;
-+ Elf_Data *data;
-+ Elf32_Nhdr nh;
-+ Elf_Data dst =
-+ {
-+ .d_version = EV_CURRENT, .d_type = ELF_T_NHDR,
-+ .d_buf = &nh, .d_size = sizeof nh
-+ };
-+ Elf_Data src = dst;
-+
-+ gelf_getshdr (s, &shdr);
-+ if (shdr.sh_type != SHT_NOTE
-+ || !(shdr.sh_flags & SHF_ALLOC))
-+ continue;
-+
-+ /* Look for a build-ID note here. */
-+ data = elf_rawdata (s, NULL);
-+ src.d_buf = data->d_buf;
-+ assert (sizeof (Elf32_Nhdr) == sizeof (Elf64_Nhdr));
-+ while (data->d_buf + data->d_size - src.d_buf > (int) sizeof nh
-+ && elf32_xlatetom (&dst, &src, ehdr.e_ident[EI_DATA]))
-+ {
-+ Elf32_Word len = sizeof nh + nh.n_namesz;
-+ len = (len + 3) & ~3;
-+
-+ if (nh.n_namesz == sizeof "GNU" && nh.n_type == 3
-+ && !memcmp (src.d_buf + sizeof nh, "GNU", sizeof "GNU"))
-+ {
-+ build_id = data;
-+ build_id_offset = src.d_buf + len - data->d_buf;
-+ build_id_size = nh.n_descsz;
-+ break;
-+ }
-+
-+ len += nh.n_descsz;
-+ len = (len + 3) & ~3;
-+ src.d_buf += len;
-+ }
-+
-+ if (build_id != NULL)
-+ break;
-+ }
-+
-+ if (build_id == NULL)
-+ return -1;
-+
-+ *id = malloc (build_id_size);
-+ *id_size = build_id_size;
-+ memcpy (*id, build_id->d_buf + build_id_offset, build_id_size);
-+
-+ elf_end (elf);
-+ close (fd);
-+
-+ return 0;
-+}
-+
-+
-+static rpmTag copyTagsForDebug[] = {
-+ RPMTAG_EPOCH,
-+ RPMTAG_VERSION,
-+ RPMTAG_RELEASE,
-+ RPMTAG_LICENSE,
-+ RPMTAG_PACKAGER,
-+ RPMTAG_DISTRIBUTION,
-+ RPMTAG_DISTURL,
-+ RPMTAG_VENDOR,
-+ RPMTAG_ICON,
-+ RPMTAG_URL,
-+ RPMTAG_CHANGELOGTIME,
-+ RPMTAG_CHANGELOGNAME,
-+ RPMTAG_CHANGELOGTEXT,
-+ RPMTAG_PREFIXES,
-+ RPMTAG_RHNPLATFORM,
-+ RPMTAG_OS,
-+ RPMTAG_DISTTAG,
-+ RPMTAG_CVSID,
-+ RPMTAG_ARCH,
-+ 0
-+};
-+
-+static void addDebuginfoPackage(rpmSpec spec, Package pkg, char *buildroot)
-+{
-+ const char *a;
-+
-+ elf_version(EV_CURRENT);
-+ a = headerGetString(pkg->header, RPMTAG_ARCH);
-+ if (strcmp(a, "noarch") != 0 && strcmp(a, "src") != 0 && strcmp(a, "nosrc") != 0)
-+ {
-+ Package dbg;
-+ rpmfi fi = pkg->cpioList;
-+ char tmp[1024];
-+ const char *name;
-+ ARGV_t files = NULL;
-+ int seen_build_id = 0;
-+
-+ /* Check if the current package has files with debug info
-+ and record them. */
-+ fi = rpmfiInit (fi, 0);
-+ while (rpmfiNext (fi) >= 0)
-+ {
-+ const char *base;
-+ int i;
-+ unsigned char *build_id;
-+ size_t build_id_size = 0;
-+ struct stat sbuf;
-+
-+ name = rpmfiFN (fi);
-+ /* Skip leading buildroot. */
-+ base = name + strlen (buildroot);
-+ /* Pre-pend %buildroot/usr/lib/debug and append .debug. */
-+ snprintf (tmp, 1024, "%s/usr/lib/debug%s.debug",
-+ buildroot, base);
-+ /* If that file exists we have debug information for it. */
-+ if (access (tmp, F_OK) != 0)
-+ continue;
-+
-+ /* Append the file list preamble. */
-+ if (!files)
-+ {
-+ argvAdd(&files, "%defattr(-,root,root)");
-+ argvAdd(&files, "%dir /usr/lib/debug");
-+ }
-+ /* Add the files main debug-info file. */
-+ snprintf (tmp, 1024, "/usr/lib/debug/%s.debug", base);
-+ argvAdd(&files, tmp);
-+
-+ /* Do not bother to check build-ids for symbolic links.
-+ We'll handle them for the link target. */
-+ if (lstat (name, &sbuf) == -1
-+ || S_ISLNK (sbuf.st_mode))
-+ continue;
-+
-+ /* Try to gather the build-id from the binary. */
-+ if (getELFBuildId (name, &build_id, &build_id_size) == -1)
-+ continue;
-+
-+ /* If we see build-id links for the first time add the
-+ directory. */
-+ if (!seen_build_id)
-+ argvAdd(&files, "%dir /usr/lib/debug/.build-id");
-+
-+ /* From the build-id construct the two links pointing back
-+ to the debug information file and the binary. */
-+ snprintf (tmp, 1024, "/usr/lib/debug/.build-id/%02x/",
-+ build_id[0]);
-+ for (i = 1; i < build_id_size; ++i)
-+ sprintf (tmp + strlen (tmp), "%02x", build_id[i]);
-+ argvAdd(&files, tmp);
-+ sprintf (tmp + strlen (tmp), ".debug");
-+ argvAdd(&files, tmp);
-+
-+ free (build_id);
-+ }
-+
-+ /* If there are debuginfo files for this package add a
-+ new debuginfo package. */
-+ if (files)
-+ {
-+ dbg = newPackage (spec);
-+ headerNVR (pkg->header, &name, NULL, NULL);
-+ /* Set name, summary and group. */
-+ snprintf (tmp, 1024, "%s-debuginfo", name);
-+ headerPutString(dbg->header, RPMTAG_NAME, tmp);
-+ snprintf (tmp, 1024, "Debug information for package %s", name);
-+ headerPutString(dbg->header, RPMTAG_SUMMARY, tmp);
-+ snprintf (tmp, 1024, "This package provides debug information for package %s.\n"
-+ "Debug information is useful when developing applications that use this\n"
-+ "package or when debugging this package.", name);
-+ headerPutString(dbg->header, RPMTAG_DESCRIPTION, tmp);
-+ headerPutString(dbg->header, RPMTAG_GROUP, "Development/Debug");
-+ /* Inherit other tags from parent. */
-+ headerCopyTags (pkg->header, dbg->header, copyTagsForDebug);
-+
-+ /* Build up the files list. */
-+ dbg->fileList = files;
-+ }
-+ }
-+}
-+#endif
-+
- rpmRC processBinaryFiles(rpmSpec spec, rpmBuildPkgFlags pkgFlags,
- int installSpecialDoc, int test)
- {
- Package pkg;
- rpmRC rc = RPMRC_OK;
-+ char *buildroot;
-
- check_fileList = newStringBuf();
-+ buildroot = rpmGenPath(spec->rootDir, spec->buildRoot, NULL);
- genSourceRpmName(spec);
-
- for (pkg = spec->packages; pkg != NULL; pkg = pkg->next) {
-@@ -2127,8 +2355,12 @@ rpmRC processBinaryFiles(rpmSpec spec, r
- rpmlog(RPMLOG_NOTICE, _("Processing files: %s\n"), nvr);
- free(nvr);
-
-- if ((rc = processPackageFiles(spec, pkgFlags, pkg, installSpecialDoc, test)) != RPMRC_OK ||
-- (rc = rpmfcGenerateDepends(spec, pkg)) != RPMRC_OK)
-+ if ((rc = processPackageFiles(spec, pkgFlags, pkg, installSpecialDoc, test)) != RPMRC_OK)
-+ goto exit;
-+#if HAVE_GELF_H && HAVE_LIBELF
-+ addDebuginfoPackage(spec, pkg, buildroot);
-+#endif
-+ if ((rc = rpmfcGenerateDepends(spec, pkg)) != RPMRC_OK)
- goto exit;
-
- a = headerGetString(pkg->header, RPMTAG_ARCH);
---- ./macros.in.orig 2011-05-13 15:34:01.000000000 +0000
-+++ ./macros.in 2011-05-13 15:34:10.000000000 +0000
-@@ -179,24 +179,10 @@
- # Template for debug information sub-package.
- %debug_package \
- %global __debug_package 1\
--%package debuginfo\
--Summary: Debug information for package %{name}\
--Group: Development/Debug\
--AutoReq: 0\
--AutoProv: 1\
--#Requires: %{?!debug_package_requires:%{name} = %{version}-%{release}}%{?debug_package_requires}\
--%description debuginfo\
--This package provides debug information for package %{name}.\
--Debug information is useful when developing applications that use this\
--package or when debugging this package.\
--%files debuginfo -f debugfiles.list\
--%defattr(-,root,root)\
--\
- %package debugsource\
- Summary: Debug sources for package %{name}\
- Group: Development/Debug\
- AutoReqProv: 0\
--Requires: %{name}-debuginfo = %{version}-%{release}\
- %description debugsource\
- This package provides debug sources for package %{name}.\
- Debug sources are useful when developing applications that use this\
---- ./scripts/find-debuginfo.sh.orig 2011-05-13 15:34:01.000000000 +0000
-+++ ./scripts/find-debuginfo.sh 2011-05-13 15:34:10.000000000 +0000
-@@ -277,19 +277,11 @@ while read nlinks inum f; do
- fi
- done || exit
-
--# For each symlink whose target has a .debug file,
--# make a .debug symlink to that file.
--find $RPM_BUILD_ROOT ! -path "${debugdir}/*" -type l -print |
--while read f
--do
-- t=$(readlink -m "$f").debug
-- f=${f#$RPM_BUILD_ROOT}
-- t=${t#$RPM_BUILD_ROOT}
-- if [ -f "$debugdir$t" ]; then
-- echo "symlinked /usr/lib/debug$t to /usr/lib/debug${f}.debug"
-- debug_link "/usr/lib/debug$t" "${f}.debug"
-- fi
--done
-+# We used to make a .debug symlink for each symlink whose target
-+# has a .debug file to that file. This is not necessary because
-+# the debuglink section contains only the destination of those links.
-+# Creating those links anyway results in debuginfo packages for
-+# devel packages just because of the .so symlinks in them.
-
- if [ -s "$SOURCEFILE" ]; then
- mkdir -p "${RPM_BUILD_ROOT}/usr/src/debug"
diff --git a/diskspace.diff b/diskspace.diff
new file mode 100644
index 0000000..461a851
--- /dev/null
+++ b/diskspace.diff
@@ -0,0 +1,23 @@
+Make the numbers reported for diskspace problems more user
+friendly. Probably a bad idea, as it changes the semantics. Instead,
+the messages should be changed.
+
+--- ./lib/rpmts.c.orig 2005-02-13 03:12:03.000000000 +0000
++++ ./lib/rpmts.c 2005-12-15 15:12:10.000000000 +0000
+@@ -1358,14 +1363,14 @@ void rpmtsCheckDSIProblems(const rpmts t
+ rpmpsAppend(ps, RPMPROB_DISKSPACE,
+ rpmteNEVR(te), rpmteKey(te),
+ ts->filesystems[i], NULL, NULL,
+- (adj_fs_blocks(dsi->bneeded) - dsi->bavail) * dsi->bsize);
++ (adj_fs_blocks(dsi->bneeded)) * dsi->bsize);
+ }
+
+ if (dsi->iavail > 0 && adj_fs_blocks(dsi->ineeded) > dsi->iavail) {
+ rpmpsAppend(ps, RPMPROB_DISKNODES,
+ rpmteNEVR(te), rpmteKey(te),
+ ts->filesystems[i], NULL, NULL,
+- (adj_fs_blocks(dsi->ineeded) - dsi->iavail));
++ (adj_fs_blocks(dsi->ineeded)));
+ }
+ }
+ ps = rpmpsFree(ps);
diff --git a/disttag-macro.diff b/disttag-macro.diff
deleted file mode 100644
index 795e52c..0000000
--- a/disttag-macro.diff
+++ /dev/null
@@ -1,31 +0,0 @@
-Hmm, SUSE doesn't use it, so what's the purpose of this patch?
-
---- ./build/parsePreamble.c.orig 2011-05-11 14:27:32.000000000 +0000
-+++ ./build/parsePreamble.c 2011-05-11 15:59:08.000000000 +0000
-@@ -485,6 +485,7 @@ static struct optionalTag {
- { RPMTAG_PACKAGER, "%{packager}" },
- { RPMTAG_DISTRIBUTION, "%{distribution}" },
- { RPMTAG_DISTURL, "%{disturl}" },
-+ { RPMTAG_DISTTAG, "%{disttag}" },
- { RPMTAG_BUGURL, "%{bugurl}" },
- { -1, NULL }
- };
---- ./macros.in.orig 2011-05-11 15:38:44.000000000 +0000
-+++ ./macros.in 2011-05-11 15:59:08.000000000 +0000
-@@ -279,6 +279,16 @@ package or when debugging this package.\
- #
- #%bugurl
-
-+# Configurable distribution tag, same as Disttag: tag in a specfile.
-+# The tag will be used to supply reliable information to tools like
-+# rpmfind.
-+#
-+# Note: You should not configure with disturl (or build packages with
-+# the Disttag: tag) unless you are willing to supply content in a
-+# yet-to-be-determined format at the tag specified.
-+#
-+#%disttag
-+
- # Boolean (i.e. 1 == "yes", 0 == "no") that controls whether files
- # marked as %doc should be installed.
- #%_excludedocs
diff --git a/docdir_fmt.diff b/docdir_fmt.diff
new file mode 100644
index 0000000..bd82d26
--- /dev/null
+++ b/docdir_fmt.diff
@@ -0,0 +1,36 @@
+Add support for a new macro, %{_docdir}. It can be used to specify
+the name of the directory for %doc files.
+Default is "%{NAME}-%{VERSION}", SUSE uses just "%{NAME}".
+rh#125514
+
+--- ./build/files.c.orig 2005-12-14 19:22:43.000000000 +0000
++++ ./build/files.c 2006-02-17 13:57:25.000000000 +0000
+@@ -1006,11 +1006,23 @@ static int parseForSimple(/*@unused@*/Sp
+ res = 1;
+ } else {
+ /* XXX WATCHOUT: buf is an arg */
+- { const char *ddir, *n, *v;
+-
+- (void) headerNVR(pkg->header, &n, &v, NULL);
+-
+- ddir = rpmGetPath("%{_docdir}/", n, "-", v, NULL);
++ {
++ static char *_docdir_fmt= 0;
++ static int oneshot = 0;
++ const char *ddir, *fmt, *errstr;
++ if (!oneshot) {
++ _docdir_fmt = rpmExpand("%{?_docdir_fmt}", NULL);
++ if (!_docdir_fmt || !*_docdir_fmt)
++ _docdir_fmt = "%{NAME}-%{VERSION}";
++ oneshot = 1;
++ }
++ fmt = headerSprintf(pkg->header, _docdir_fmt, rpmTagTable, rpmHeaderFormats, &errstr);
++ if (!fmt) {
++ rpmError(RPMERR_BADSPEC, _("illegal _docdir_fmt: %s\n"), errstr);
++ fl->processingFailed = 1;
++ res = 1;
++ }
++ ddir = rpmGetPath("%{_docdir}/", fmt, NULL);
+ strcpy(buf, ddir);
+ ddir = _free(ddir);
+ }
diff --git a/elfutils-0.97.diff b/elfutils-0.97.diff
new file mode 100644
index 0000000..caf8519
--- /dev/null
+++ b/elfutils-0.97.diff
@@ -0,0 +1,151 @@
+--- elfutils-0.97/Makefile.am.orig 2004-01-18 23:24:16.000000000 +0000
++++ elfutils-0.97/Makefile.am 2005-02-10 18:01:28.029920520 +0000
+@@ -18,9 +18,8 @@
+ ##
+ ACLOCAL_AMFLAGS = -I m4
+
+-mini_SUBDIRS = config m4 lib libelf libelf-po
+-all_SUBDIRS = doc libebl libdw libcpu libasm src po tests
+-SUBDIRS = $(mini_SUBDIRS) $(all_SUBDIRS)
++mini_SUBDIRS = config m4 libelf libelf-po
++SUBDIRS = $(mini_SUBDIRS)
+
+ EXTRA_DIST = splint.rc elfutils.spec GPG-KEY NOTES COPYING.GPL
+
+--- elfutils-0.97/configure.ac.orig 2004-09-25 19:41:03.000000000 +0000
++++ elfutils-0.97/configure.ac 2005-02-10 18:01:28.030920377 +0000
+@@ -130,34 +130,9 @@
+
+ dnl The directories with content.
+
+-dnl Documentation.
+-AC_CONFIG_FILES([doc/Makefile])
+-
+-dnl Support library.
+-AC_CONFIG_FILES([lib/Makefile])
+-
+ dnl ELF library.
+ AC_CONFIG_FILES([libelf/Makefile libelf-po/Makefile.in])
+
+-dnl Higher-level ELF support library.
+-AC_CONFIG_FILES([libebl/Makefile])
+-
+-dnl DWARF library.
+-AC_CONFIG_FILES([libdw/Makefile])
+-
+-dnl CPU handling library.
+-AC_CONFIG_FILES([libcpu/Makefile])
+-
+-dnl Assembler library.
+-AC_CONFIG_FILES([libasm/Makefile])
+-
+-dnl Tools.
+-AC_CONFIG_FILES([src/Makefile po/Makefile.in])
+-
+-dnl Test suite.
+-AC_CONFIG_FILES([tests/Makefile])
+-
+-
+ dnl Test of the config.h file. We hide all kinds of configuration magic
+ dnl in there.
+ AH_BOTTOM([
+--- elfutils-0.97/libelf-po/Makefile.in.in.orig 2004-01-18 23:51:37.000000000 +0000
++++ elfutils-0.97/libelf-po/Makefile.in.in 2005-02-10 18:01:28.030920377 +0000
+@@ -28,7 +28,7 @@
+ INSTALL = @INSTALL@
+ INSTALL_DATA = @INSTALL_DATA@
+ MKINSTALLDIRS = @MKINSTALLDIRS@
+-mkinstalldirs = $(SHELL) `case "$(MKINSTALLDIRS)" in /*) echo "$(MKINSTALLDIRS)" ;; *) echo "$(top_builddir)/$(MKINSTALLDIRS)" ;; esac`
++mkinstalldirs = @MKINSTALLDIRS@
+
+ GMSGFMT = @GMSGFMT@
+ MSGFMT = @MSGFMT@
+--- elfutils-0.97/libelf/Makefile.am.orig 2004-01-23 10:38:49.000000000 +0000
++++ elfutils-0.97/libelf/Makefile.am 2005-02-10 18:03:15.337610448 +0000
+@@ -31,15 +31,15 @@
+
+ LINT = splint
+
+-lib_LIBRARIES = libelf.a
++#lib_LIBRARIES = libelf.a
+ if !MUDFLAP
+-noinst_LIBRARIES = libelf_pic.a
+-noinst_PROGRAMS = $(noinst_LIBRARIES:_pic.a=.so)
++noinst_LIBRARIES = libelf.a libelf_pic.a
++noinst_PROGRAMS = libelf.so
+ endif
+-include_HEADERS = libelf.h gelf.h nlist.h
++#include_HEADERS = libelf.h gelf.h nlist.h
+
+-euincludedir = $(includedir)/elfutils
+-euinclude_HEADERS = elf-knowledge.h
++#euincludedir = $(includedir)/elfutils
++#euinclude_HEADERS = elf-knowledge.h
+
+ libelf_a_SOURCES = elf_version.c elf_hash.c elf_error.c elf_fill.c \
+ elf_begin.c elf_next.c elf_rand.c elf_end.c elf_kind.c \
+@@ -96,7 +96,7 @@
+ ln -fs $@ $@.$(VERSION)
+
+ %.os: %.c %.o
+- if $(COMPILE) -c -o $@ -fpic -DPIC -DSHARED -MT $@ -MD -MP \
++ if $(COMPILE) -c -o $@ -fPIC -DPIC -DSHARED -MT $@ -MD -MP \
+ -MF "$(DEPDIR)/$*.Tpo" `test -f '$<' || echo '$(srcdir)/'`$<; \
+ then cat "$(DEPDIR)/$*.Tpo" >> "$(DEPDIR)/$*.Po"; \
+ rm -f "$(DEPDIR)/$*.Tpo"; \
+@@ -104,15 +104,15 @@
+ fi
+
+ install: install-am libelf.so
+- $(mkinstalldirs) $(DESTDIR)$(libdir)
+- $(INSTALL_PROGRAM) libelf.so $(DESTDIR)$(libdir)/libelf-$(PACKAGE_VERSION).so
+- ln -fs libelf-$(PACKAGE_VERSION).so $(DESTDIR)$(libdir)/libelf.so.$(VERSION)
+- ln -fs libelf.so.$(VERSION) $(DESTDIR)$(libdir)/libelf.so
++# $(mkinstalldirs) $(DESTDIR)$(libdir)
++# $(INSTALL_PROGRAM) libelf.so $(DESTDIR)$(libdir)/libelf-$(PACKAGE_VERSION).so
++# ln -fs libelf-$(PACKAGE_VERSION).so $(DESTDIR)$(libdir)/libelf.so.$(VERSION)
++# ln -fs libelf.so.$(VERSION) $(DESTDIR)$(libdir)/libelf.so
+
+ uninstall: uninstall-am
+- rm -f $(DESTDIR)$(libdir)/libelf-$(PACKAGE_VERSION).so
+- rm -f $(DESTDIR)$(libdir)/libelf.so.$(VERSION)
+- rm -f $(DESTDIR)$(libdir)/libelf.so
++# rm -f $(DESTDIR)$(libdir)/libelf-$(PACKAGE_VERSION).so
++# rm -f $(DESTDIR)$(libdir)/libelf.so.$(VERSION)
++# rm -f $(DESTDIR)$(libdir)/libelf.so
+ endif
+
+ .PSEUDO: lint
+--- elfutils-0.97/libelf/Makefile.in.orig 2004-09-25 19:41:08.000000000 +0000
++++ elfutils-0.97/libelf/Makefile.in 2005-02-10 18:01:28.028920662 +0000
+@@ -731,7 +731,7 @@
+ @MUDFLAP_FALSE@ ln -fs $@ $@.$(VERSION)
+
+ @MUDFLAP_FALSE@%.os: %.c %.o
+-@MUDFLAP_FALSE@ if $(COMPILE) -c -o $@ -fpic -DPIC -DSHARED -MT $@ -MD -MP \
++@MUDFLAP_FALSE@ if $(COMPILE) -c -o $@ -fPIC -DPIC -DSHARED -MT $@ -MD -MP \
+ @MUDFLAP_FALSE@ -MF "$(DEPDIR)/$*.Tpo" `test -f '$<' || echo '$(srcdir)/'`$<; \
+ @MUDFLAP_FALSE@ then cat "$(DEPDIR)/$*.Tpo" >> "$(DEPDIR)/$*.Po"; \
+ @MUDFLAP_FALSE@ rm -f "$(DEPDIR)/$*.Tpo"; \
+--- elfutils-0.97/libelf/libelfP.h.orig 2003-12-25 18:43:31.000000000 +0000
++++ elfutils-0.97/libelf/libelfP.h 2005-02-10 18:01:28.029920520 +0000
+@@ -387,7 +387,7 @@
+ extern int __libelf_fill_byte attribute_hidden;
+
+ /* Nonzero if the version was set. */
+-extern int __libelf_version_initialized attribute_hidden;
++extern int __libelf_version_initialized /* attribute_hidden */;
+
+
+ /* The libelf API does not have such a function but it is still useful.
+--- elfutils-0.97/configure.ac 2006/08/14 23:04:23 1.1
++++ elfutils-0.97/configure.ac 2006/08/14 23:06:50
+@@ -53,6 +53,8 @@
+ AC_PROG_CPP
+ AC_PROG_GCC_TRADITIONAL
+ AM_GNU_GETTEXT([external])
++MKINSTALLDIRS="\$(SHELL) \$(top_srcdir)/config/mkinstalldirs"
++AC_SUBST(MKINSTALLDIRS)
+ AC_PROG_RANLIB
+ AC_PROG_YACC
+ AM_PROG_LEX
diff --git a/elfutils-0.97.tar.bz2 b/elfutils-0.97.tar.bz2
new file mode 100644
index 0000000..0402483
--- /dev/null
+++ b/elfutils-0.97.tar.bz2
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:105115416927f1498abecd7741af0d178a31a2bc780b3ab935b78bac48bac342
+size 216798
diff --git a/emptychangelog.diff b/emptychangelog.diff
deleted file mode 100644
index cdcc15c..0000000
--- a/emptychangelog.diff
+++ /dev/null
@@ -1,11 +0,0 @@
---- ./build/parseChangelog.c.orig 2011-05-23 14:19:48.000000000 +0000
-+++ ./build/parseChangelog.c 2011-05-23 14:20:36.000000000 +0000
-@@ -238,7 +238,7 @@ int parseChangelog(rpmSpec spec)
- }
- }
-
-- if (addChangelog(spec->packages->header, sb)) {
-+ if (sb && addChangelog(spec->packages->header, sb)) {
- goto exit;
- }
- res = nextPart;
diff --git a/emptyfilelist.diff b/emptyfilelist.diff
new file mode 100644
index 0000000..95103d6
--- /dev/null
+++ b/emptyfilelist.diff
@@ -0,0 +1,16 @@
+Fix segfault when rpmbuild stumbles over an empty file list.
+The "+ 1" is a remedy for xmalloc(0), which would return NULL.
+
+Index: ./build/files.c
+===================================================================
+--- ./build/files.c
++++ ./build/files.c
+@@ -1380,7 +1380,7 @@ static void genCpioListAndHeader(/*@part
+ : (int *)(fi->bnl + fi->fc);
+ /*@=dependenttrans@*/
+
+- fi->apath = xmalloc(fi->fc * sizeof(*fi->apath) + apathlen);
++ fi->apath = xmalloc(fi->fc * sizeof(*fi->apath) + apathlen + 1);
+ a = (char *)(fi->apath + fi->fc);
+ *a = '\0';
+
diff --git a/emptyprep.diff b/emptyprep.diff
deleted file mode 100644
index 1b53278..0000000
--- a/emptyprep.diff
+++ /dev/null
@@ -1,13 +0,0 @@
-Do not segfault if the prep section is empty
-
---- build/parsePrep.c.orig 2011-05-13 16:22:59.000000000 +0000
-+++ build/parsePrep.c 2011-05-13 16:23:41.000000000 +0000
-@@ -518,7 +518,7 @@ int parsePrep(rpmSpec spec)
- }
- }
-
-- for (ARGV_const_t lines = saveLines; *lines; lines++) {
-+ for (ARGV_const_t lines = saveLines; lines && *lines; lines++) {
- res = 0;
- if (rstreqn(*lines, "%setup", sizeof("%setup")-1)) {
- res = doSetupMacro(spec, *lines);
diff --git a/erasebadreturn.diff b/erasebadreturn.diff
new file mode 100644
index 0000000..554c4dc
--- /dev/null
+++ b/erasebadreturn.diff
@@ -0,0 +1,16 @@
+Do not call rpmtsRun with an empty transaction list, it returns -1
+which messes up the numFailed counter. [#43267]
+
+Index: lib/rpminstall.c
+===================================================================
+--- lib/rpminstall.c.orig
++++ lib/rpminstall.c
+@@ -844,7 +844,7 @@ int rpmErase(rpmts ts, struct rpmInstall
+ }
+ #endif
+
+- if (!stopUninstall) {
++ if (numPackages && !stopUninstall) {
+ (void) rpmtsSetFlags(ts, (rpmtsFlags(ts) | RPMTRANS_FLAG_REVERSE));
+
+ /* Drop added/available package indices and dependency sets. */
diff --git a/eraseignoresize.diff b/eraseignoresize.diff
new file mode 100644
index 0000000..b384f41
--- /dev/null
+++ b/eraseignoresize.diff
@@ -0,0 +1,28 @@
+Allow "--ignoresize" for erase operations.
+
+Index: lib/rpminstall.c
+===================================================================
+--- lib/rpminstall.c.orig
++++ lib/rpminstall.c
+@@ -850,7 +850,7 @@ int rpmErase(rpmts ts, struct rpmInstall
+ /* Drop added/available package indices and dependency sets. */
+ rpmtsClean(ts);
+
+- numPackages = rpmtsRun(ts, NULL, 0);
++ numPackages = rpmtsRun(ts, NULL, ia->probFilter & (RPMPROB_FILTER_DISKSPACE|RPMPROB_FILTER_DISKNODES));
+ ps = rpmtsProblems(ts);
+ if (rpmpsNumProblems(ps) > 0)
+ rpmpsPrint(NULL, ps);
+Index: rpmqv.c
+===================================================================
+--- rpmqv.c.orig
++++ rpmqv.c
+@@ -468,7 +468,7 @@ int main(int argc, const char ** argv)
+ argerror(_("--ignoreos may only be specified during package "
+ "installation"));
+
+- if (bigMode != MODE_INSTALL &&
++ if (bigMode != MODE_INSTALL && bigMode != MODE_ERASE &&
+ (ia->probFilter & (RPMPROB_FILTER_DISKSPACE|RPMPROB_FILTER_DISKNODES)))
+ argerror(_("--ignoresize may only be specified during package "
+ "installation"));
diff --git a/eraseordered.diff b/eraseordered.diff
new file mode 100644
index 0000000..e7093bb
--- /dev/null
+++ b/eraseordered.diff
@@ -0,0 +1,21 @@
+Order packages when erasing. Not tested very well.
+
+Index: lib/rpminstall.c
+===================================================================
+--- lib/rpminstall.c.orig
++++ lib/rpminstall.c
+@@ -835,14 +835,12 @@ int rpmErase(rpmts ts, struct rpmInstall
+ ps = rpmpsFree(ps);
+ }
+
+-#ifdef NOTYET
+ if (!stopUninstall && !(ia->installInterfaceFlags & INSTALL_NOORDER)) {
+ if (rpmtsOrder(ts)) {
+ numFailed += numPackages;
+ stopUninstall = 1;
+ }
+ }
+-#endif
+
+ if (!stopUninstall) {
+ (void) rpmtsSetFlags(ts, (rpmtsFlags(ts) | RPMTRANS_FLAG_REVERSE));
diff --git a/exitstatus.diff b/exitstatus.diff
new file mode 100644
index 0000000..f77e0e8
--- /dev/null
+++ b/exitstatus.diff
@@ -0,0 +1,15 @@
+Deal with a return value of "-2" when database locking failed.
+
+--- ./lib/rpminstall.c.orig 2005-12-14 21:01:09.000000000 +0000
++++ ./lib/rpminstall.c 2005-12-15 14:47:35.000000000 +0000
+@@ -599,6 +611,10 @@ if (fileURL[0] == '=') {
+ eiu->numFailed++;
+ goto exit;
+ /*@notreached@*/ /*@switchbreak@*/ break;
++ default:
++ eiu->numFailed++;
++ goto exit;
++ /*@notreached@*/ /*@switchbreak@*/ break;
+ }
+
+ eiu->numRPMS++;
diff --git a/extcond.diff b/extcond.diff
index 32d8e81..bd5055c 100644
--- a/extcond.diff
+++ b/extcond.diff
@@ -4,9 +4,9 @@ assumed to be true.
This mechanism is used by the weakdeps patch to filter the
"RPMSENSE_STRONG" flag.
---- ./lib/headerfmt.c.orig 2010-12-03 12:11:57.000000000 +0000
-+++ ./lib/headerfmt.c 2011-05-10 17:06:49.000000000 +0000
-@@ -568,8 +568,12 @@ static int parseExpression(headerSprintf
+--- ./rpmdb/header.c.orig 2005-06-06 23:33:54.000000000 +0000
++++ ./rpmdb/header.c 2006-03-17 18:08:02.000000000 +0000
+@@ -2980,8 +2980,12 @@ static int parseExpression(headerSprintf
*endPtr = chptr;
@@ -19,16 +19,16 @@ This mechanism is used by the weakdeps patch to filter the
(void) findTag(hsa, token, str);
return 0;
-@@ -657,6 +661,7 @@ static char * singleSprintf(headerSprint
- int i, j, found;
- rpm_count_t count, numElements;
+@@ -3239,6 +3243,7 @@ static char * singleSprintf(headerSprint
+ int_32 type;
+ int_32 count;
sprintfToken spft;
+ sprintfTag stag;
int condNumFormats;
size_t need;
-@@ -687,6 +692,18 @@ static char * singleSprintf(headerSprint
- headerIsEntry(hsa->h, token->u.cond.tag.tag)) {
+@@ -3270,6 +3275,18 @@ static char * singleSprintf(headerSprint
+ if (token->u.cond.tag.ext || headerIsEntry(hsa->h, token->u.cond.tag.tag)) {
spft = token->u.cond.ifFormat;
condNumFormats = token->u.cond.numIfTokens;
+ if (token->u.cond.tag.fmt) {
@@ -46,20 +46,33 @@ This mechanism is used by the weakdeps patch to filter the
} else {
spft = token->u.cond.elseFormat;
condNumFormats = token->u.cond.numElseTokens;
-@@ -710,10 +727,13 @@ static char * singleSprintf(headerSprint
+@@ -3291,19 +3308,22 @@ static char * singleSprintf(headerSprint
+ spft = token->u.array.format;
for (i = 0; i < token->u.array.numTokens; i++, spft++)
{
- rpmtd td = NULL;
- if (spft->type != PTOK_TAG ||
+- spft->u.tag.arrayCount ||
- spft->u.tag.justOne) continue;
+ if (spft->type != PTOK_TAG && spft->type != PTOK_COND)
+ continue;
++
+ stag = (spft->type == PTOK_COND ? &spft->u.cond.tag : &spft->u.tag);
-+ if (stag->justOne)
++ if (stag->arrayCount || stag->justOne)
+ continue;
-- if (!(td = getData(hsa, spft->u.tag.tag))) {
-+ if (!(td = getData(hsa, stag->tag))) {
- continue;
- }
-
+- if (spft->u.tag.ext) {
++ if (stag->ext) {
+ /*@-boundswrite@*/
+- if (getExtension(hsa, spft->u.tag.ext, &type, NULL, &count,
+- hsa->ec + spft->u.tag.extNum))
++ if (getExtension(hsa, stag->ext, &type, NULL, &count,
++ hsa->ec + stag->extNum))
+ continue;
+ /*@=boundswrite@*/
+ } else {
+ /*@-boundswrite@*/
+- if (!headerGetEntry(hsa->h, spft->u.tag.tag, &type, NULL, &count))
++ if (!headerGetEntry(hsa->h, stag->tag, &type, NULL, &count))
+ continue;
+ /*@=boundswrite@*/
+ }
diff --git a/fileattrs.diff b/fileattrs.diff
deleted file mode 100644
index 155a52b..0000000
--- a/fileattrs.diff
+++ /dev/null
@@ -1,85 +0,0 @@
-Index: fileattrs/debuginfo.attr
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ fileattrs/debuginfo.attr 2011-06-06 16:16:00.853820498 +0200
-@@ -0,0 +1,2 @@
-+%__debuginfo_provides %{_rpmconfigdir}/debuginfo.prov
-+%__debuginfo_path ^/usr/lib/debug/
-Index: fileattrs/elf.attr
-===================================================================
---- fileattrs/elf.attr.orig 2011-06-06 16:15:01.591403879 +0200
-+++ fileattrs/elf.attr 2011-06-06 16:16:00.853820498 +0200
-@@ -1,4 +1,5 @@
- %__elf_provides %{_rpmconfigdir}/elfdeps --provides %{?__filter_GLIBC_PRIVATE:--filter-private}
- %__elf_requires %{_rpmconfigdir}/elfdeps --requires %{?__filter_GLIBC_PRIVATE:--filter-private}
--%__elf_magic ^ELF (32|64)-bit.*$
-+%__elf_magic ^ELF (32|64)-bit.*executable
- %__elf_flags exeonly
-+%__elf_exclude_path ^/usr/lib/debug/
-Index: fileattrs/elflib.attr
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ fileattrs/elflib.attr 2011-06-06 16:16:00.854820404 +0200
-@@ -0,0 +1,4 @@
-+%__elflib_provides %{_rpmconfigdir}/elfdeps --assume-exec --provides %{?__filter_GLIBC_PRIVATE:--filter-private}
-+%__elflib_requires %{_rpmconfigdir}/elfdeps --assume-exec --requires %{?__filter_GLIBC_PRIVATE:--filter-private}
-+%__elflib_magic ^ELF (32|64)-bit.*shared object
-+%__elflib_exclude_path ^/usr/lib/debug/
-Index: fileattrs/firmware.attr
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ fileattrs/firmware.attr 2011-06-06 16:16:00.854820404 +0200
-@@ -0,0 +1,2 @@
-+%__firmware_provides %{_rpmconfigdir}/firmware.prov
-+%__firmware_path /lib/firmware/
-Index: fileattrs/ksyms.attr
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ fileattrs/ksyms.attr 2011-06-06 16:16:00.854820404 +0200
-@@ -0,0 +1,4 @@
-+%__ksyms_provides %{_rpmconfigdir}/find-provides.ksyms %name
-+%__ksyms_requires %{_rpmconfigdir}/find-requires.ksyms %name
-+%__ksyms_supplements %{_rpmconfigdir}/find-supplements.ksyms %name
-+%__ksyms_path (/lib/modules/.*\.ko(\.gz)?)|(/boot/vmlinu[xz].*)$
-Index: fileattrs/Makefile.am
-===================================================================
---- fileattrs/Makefile.am.orig 2011-06-06 16:15:01.590403974 +0200
-+++ fileattrs/Makefile.am 2011-06-06 16:16:08.852066946 +0200
-@@ -5,7 +5,8 @@ include $(top_srcdir)/rpm.am
- fattrsdir = $(rpmconfigdir)/fileattrs
-
- fattrs_DATA = \
-- desktop.attr elf.attr font.attr libtool.attr perl.attr perllib.attr \
-- pkgconfig.attr python.attr ocaml.attr script.attr mono.attr
-+ elf.attr font.attr libtool.attr perl.attr perllib.attr \
-+ pkgconfig.attr python.attr ocaml.attr script.attr mono.attr \
-+ debuginfo.attr elflib.attr firmware.attr ksyms.attr sysvinit.attr
-
- EXTRA_DIST = $(fattrs_DATA)
-Index: fileattrs/perl.attr
-===================================================================
---- fileattrs/perl.attr.orig 2011-06-06 16:15:01.591403879 +0200
-+++ fileattrs/perl.attr 2011-06-06 16:16:00.855820310 +0200
-@@ -1,3 +1,4 @@
--%__perl_requires %{_rpmconfigdir}/perl.req
-+# disabled for now
-+#%__perl_requires %{_rpmconfigdir}/perl.req
- %__perl_magic ^.*perl .*$
- %__perl_flags exeonly
-Index: fileattrs/perllib.attr
-===================================================================
---- fileattrs/perllib.attr.orig 2011-06-06 16:15:01.591403879 +0200
-+++ fileattrs/perllib.attr 2011-06-06 16:16:00.855820310 +0200
-@@ -1,3 +1,4 @@
- %__perllib_provides %{_rpmconfigdir}/perl.prov
--%__perllib_requires %{_rpmconfigdir}/perl.req
-+#disabled for now
-+#%__perllib_requires %{_rpmconfigdir}/perl.req
- %__perllib_magic ^Perl[[:digit:]] module source.*
-Index: fileattrs/sysvinit.attr
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ fileattrs/sysvinit.attr 2011-06-06 16:16:00.856820216 +0200
-@@ -0,0 +1,2 @@
-+%__sysvinit_provides %{_rpmconfigdir}/sysvinitdeps.sh --provides
-+%__sysvinit_path ^/etc/init\.d/
diff --git a/filenonull.diff b/filenonull.diff
new file mode 100644
index 0000000..ff1fc86
--- /dev/null
+++ b/filenonull.diff
@@ -0,0 +1,12 @@
+Return an error if Fileno is called with NULL instead of segfaulting.
+
+--- ./rpmio/rpmio.c.orig 2005-01-26 03:39:58.000000000 +0000
++++ ./rpmio/rpmio.c 2005-12-16 17:51:19.000000000 +0000
+@@ -3094,6 +3164,7 @@ int Fileno(FD_t fd)
+ {
+ int i, rc = -1;
+
++ if (fd == NULL) return -1;
+ if (fd->req != NULL)
+ rc = 123456789; /* HACK: https has no steenkin fileno. */
+ else
diff --git a/filequery.diff b/filequery.diff
new file mode 100644
index 0000000..e96020a
--- /dev/null
+++ b/filequery.diff
@@ -0,0 +1,14 @@
+Do not check package provides if there is no slash in the file path.
+bugzilla [#32467], rh#125516.
+
+--- ./lib/query.c.orig 2004-10-26 23:29:28.000000000 +0000
++++ ./lib/query.c 2005-12-16 18:22:19.000000000 +0000
+@@ -614,7 +637,7 @@ int rpmQueryVerify(QVA_t qva, rpmts ts,
+ if (qva->qva_mi == NULL) {
+ if (access(fn, F_OK) != 0)
+ myerrno = errno;
+- else if (!provides_checked)
++ else if (!provides_checked && strchr(fn, '/'))
+ qva->qva_mi = rpmtsInitIterator(ts, RPMTAG_PROVIDENAME, fn, 0);
+ }
+
diff --git a/files.diff b/files.diff
deleted file mode 100644
index 32c6fa2..0000000
--- a/files.diff
+++ /dev/null
@@ -1,17 +0,0 @@
-Print "unpackaged files" section even if there was an error
-in the filelist.
-
---- ./build/files.c.orig 2011-05-11 15:27:11.000000000 +0000
-+++ ./build/files.c 2011-05-11 15:29:12.000000000 +0000
-@@ -2149,10 +2149,10 @@ rpmRC processBinaryFiles(rpmSpec spec, r
- */
-
-
-+exit:
- if (checkFiles(spec->buildRoot, check_fileList) > 0) {
- rc = RPMRC_FAIL;
- }
--exit:
- check_fileList = freeStringBuf(check_fileList);
-
- return rc;
diff --git a/finddebuginfo-absolute-links.diff b/finddebuginfo-absolute-links.diff
deleted file mode 100644
index 9cd08c7..0000000
--- a/finddebuginfo-absolute-links.diff
+++ /dev/null
@@ -1,41 +0,0 @@
-From: Jan Blunck
-Subject: Do the symbolic links right in the first place
-
-Since brp-symlink relinks symbolic links to enforce a certain policy we should
-do it right in the first place. So this patch changes find-debuginfo.sh scripts
-behavior to reflect that policy.
-
-Signed-off-by: Jan Blunck
-
---- ./scripts/find-debuginfo.sh.orig 2011-05-11 15:36:05.000000000 +0000
-+++ ./scripts/find-debuginfo.sh 2011-05-11 15:58:17.000000000 +0000
-@@ -124,7 +124,17 @@ debug_link()
- local l="/usr/lib/debug$2"
- local t="$1"
- echo >> "$LINKSFILE" "$l $t"
-- link_relative "$t" "$l" "$RPM_BUILD_ROOT"
-+
-+ # this should correspond to what brp-symlink is doing
-+ case $t in
-+ /usr*)
-+ link_relative "$t" "$l" "$RPM_BUILD_ROOT"
-+ ;;
-+ *)
-+ mkdir -p "$(dirname "$RPM_BUILD_ROOT$l")" && \
-+ ln -snf "$t" "$RPM_BUILD_ROOT$l"
-+ ;;
-+ esac
- }
-
- # Compare two binaries but ignore the .note.gnu.build-id section
-@@ -158,8 +168,8 @@ make_id_link()
-
- local other=$(readlink -m "$root_idfile")
- other=${other#$RPM_BUILD_ROOT}
-- if cmp -s "$root_idfile" "$RPM_BUILD_ROOT$file" ||
-- elfcmp "$root_idfile" "$RPM_BUILD_ROOT$file" ; then
-+ if cmp -s "$RPM_BUILD_ROOT$other" "$RPM_BUILD_ROOT$file" ||
-+ elfcmp "$RPM_BUILD_ROOT$other" "$RPM_BUILD_ROOT$file" ; then
- # Two copies. Maybe one has to be setuid or something.
- echo >&2 "*** WARNING: identical binaries are copied, not linked:"
- echo >&2 " $file"
diff --git a/finddebuginfo.diff b/finddebuginfo.diff
index d382d24..f53501f 100644
--- a/finddebuginfo.diff
+++ b/finddebuginfo.diff
@@ -1,119 +1,102 @@
---- ./scripts/find-debuginfo.sh.orig 2010-12-03 12:11:57.000000000 +0000
-+++ ./scripts/find-debuginfo.sh 2011-05-11 14:46:18.000000000 +0000
-@@ -127,6 +127,20 @@ debug_link()
- link_relative "$t" "$l" "$RPM_BUILD_ROOT"
- }
-
-+# Compare two binaries but ignore the .note.gnu.build-id section
-+elfcmp()
-+{
-+ local tmp1=$(mktemp -t ${1##*/}.XXXXXX)
-+ local tmp2=$(mktemp -t ${2##*/}.XXXXXX)
-+
-+ objcopy -R .note.gnu.build-id -R .gnu_debuglink $1 $tmp1
-+ objcopy -R .note.gnu.build-id -R .gnu_debuglink $2 $tmp2
-+ cmp -s $tmp1 $tmp2
-+ local res=$?
-+ rm -f $tmp1 $tmp2
-+ return $res
-+}
-+
- # Make a build-id symlink for id $1 with suffix $3 to file $2.
- make_id_link()
- {
-@@ -145,7 +159,7 @@ make_id_link()
- local other=$(readlink -m "$root_idfile")
- other=${other#$RPM_BUILD_ROOT}
- if cmp -s "$root_idfile" "$RPM_BUILD_ROOT$file" ||
-- eu-elfcmp -q "$root_idfile" "$RPM_BUILD_ROOT$file" 2> /dev/null; then
-+ elfcmp "$root_idfile" "$RPM_BUILD_ROOT$file" ; then
- # Two copies. Maybe one has to be setuid or something.
- echo >&2 "*** WARNING: identical binaries are copied, not linked:"
- echo >&2 " $file"
-@@ -174,12 +188,18 @@ strict_error=ERROR
- $strict || strict_error=WARNING
+SUSE specific find-debuginfo changes.
+
+--- ./scripts/find-debuginfo.sh.orig 2005-07-14 15:52:31.000000000 +0000
++++ ./scripts/find-debuginfo.sh 2006-03-17 13:13:03.000000000 +0000
+@@ -14,9 +14,18 @@ debugdir="${RPM_BUILD_ROOT}/usr/lib/debu
+ echo -n > $SOURCEFILE
# Strip ELF binaries
--find "$RPM_BUILD_ROOT" ! -path "${debugdir}/*.debug" -type f \
-- \( -perm -0100 -or -perm -0010 -or -perm -0001 \) \
-- -print |
--file -N -f - | sed -n -e 's/^\(.*\):[ ]*.*ELF.*, not stripped/\1/p' |
--xargs --no-run-if-empty stat -c '%h %D_%i %n' |
-+find $RPM_BUILD_ROOT ! -path "${debugdir}/*.debug" -type f \( -perm +111 -or -name "*.so*" -or -name "*.ko" \) -print 0 | sort -z |
-+xargs --no-run-if-empty -0 stat -c '%h %D_%i %n' |
- while read nlinks inum f; do
-+ case $(objdump -h $f 2>/dev/null | egrep -o '(debug[\.a-z_]*|gnu.version)') in
-+ *debuglink*) continue ;;
-+ *debug*) ;;
-+ *gnu.version*)
-+ echo "WARNING: "`echo $f | sed -e "s,^$RPM_BUILD_ROOT/*,/,"`" is already stripped!"
-+ continue
-+ ;;
-+ *) continue ;;
-+ esac
- get_debugfn "$f"
- [ -f "${debugfn}" ] && continue
+-for f in `find $RPM_BUILD_ROOT ! -path "${debugdir}/*.debug" -type f \( -perm -0100 -or -perm -0010 -or -perm -0001 \) -exec file {} \; | \
+- sed -n -e 's/^\(.*\):[ ]*.*ELF.*, not stripped/\1/p'`
++for f in `find $RPM_BUILD_ROOT ! -path "${debugdir}/*.debug" -type f \( -perm +111 -or -name "*.so*" -or -name "*.ko" \) `
+ do
++ case $(objdump -h $f 2>/dev/null | egrep -o '(debug[\.a-z_]*|gnu.version)') in
++ *debuglink*) continue ;;
++ *debug*) ;;
++ *gnu.version*)
++ echo "WARNING: "`echo $f | sed -e "s,^$RPM_BUILD_ROOT/*,/,"`" is already stripped!"
++ continue
++ ;;
++ *) continue ;;
++ esac
++
+ dn=$(dirname $f | sed -n -e "s#^$RPM_BUILD_ROOT##p")
+ bn=$(basename $f .debug).debug
-@@ -200,8 +220,11 @@ while read nlinks inum f; do
- fi
+@@ -25,6 +34,8 @@ do
+ [ -f "${debugfn}" ] && continue
- echo "extracting debug info from $f"
-- id=$(/usr/lib/rpm/debugedit -b "$RPM_BUILD_DIR" -d /usr/src/debug \
-- -i -l "$SOURCEFILE" "$f") || exit
-+ mode=$(stat -c %a "$f")
-+ chmod +w "$f"
-+ id=$($(DEBUGEDIT=$(which debugedit 2>/dev/null); \
-+ echo ${DEBUGEDIT:-/usr/lib/rpm/debugedit}) -b "$RPM_BUILD_DIR" \
-+ -d /usr/src/debug -i -l "$SOURCEFILE" "$f") || exit
- if [ -z "$id" ]; then
- echo >&2 "*** ${strict_error}: No build ID note found in $f"
- $strict && exit 2
-@@ -218,13 +241,25 @@ while read nlinks inum f; do
- esac
+ echo extracting debug info from $f
++ mode=$(stat -c %a $f)
++ chmod +w $f
+ /usr/lib/rpm/debugedit -b "$RPM_BUILD_DIR" -d /usr/src/debug -l "$SOURCEFILE" "$f"
- mkdir -p "${debugdn}"
-- if test -w "$f"; then
-- strip_to_debug "${debugfn}" "$f"
-- else
-- chmod u+w "$f"
-- strip_to_debug "${debugfn}" "$f"
-- chmod u-w "$f"
-- fi
-+ objcopy --only-keep-debug $f $debugfn || :
-+ (
-+ shopt -s extglob
-+ strip_option="--strip-all"
-+ case "$f" in
-+ *.ko)
-+ strip_option="--strip-debug" ;;
-+ *$STRIP_KEEP_SYMTAB*)
-+ if test -n "$STRIP_KEEP_SYMTAB"; then
-+ strip_option="--strip-debug"
-+ fi
-+ ;;
-+ esac
-+ if test "$NO_DEBUGINFO_STRIP_DEBUG" = true ; then
-+ strip_option=
-+ fi
-+ objcopy --add-gnu-debuglink=$debugfn -R .comment -R .GCC.command.line $strip_option $f
-+ chmod $mode $f
-+ ) || :
+ # A binary already copied into /usr/lib/debug doesn't get stripped,
+@@ -34,19 +45,56 @@ do
+ esac
- if [ -n "$id" ]; then
- make_id_link "$id" "$dn/$(basename $f)"
-@@ -253,12 +288,14 @@ if [ -s "$SOURCEFILE" ]; then
- # stupid cpio creates new directories in mode 0700, fixup
- find "${RPM_BUILD_ROOT}/usr/src/debug" -type d -print0 |
- xargs --no-run-if-empty -0 chmod a+rx
-+ find "${RPM_BUILD_ROOT}/usr/src/debug" -type f -print0 |
-+ xargs --no-run-if-empty -0 chmod a+r
- fi
+ mkdir -p "${debugdn}"
+- if test -w "$f"; then
+- eu-strip -f "${debugfn}" "$f" || :
+- else
+- chmod u+w "$f"
+- eu-strip -f "${debugfn}" "$f" || :
+- chmod u-w "$f"
++ objcopy --only-keep-debug $f $debugfn || :
++ strip_option="--strip-all"
++ case "$f" in
++ *.ko|*.a) strip_option="--strip-debug" ;;
++ esac
++ if test -n "$STRIP_KEEP_SYMTAB" ; then
++ strip_option="--strip-debug"
+ fi
++ if test "$NO_DEBUGINFO_STRIP_DEBUG" = true ; then
++ strip_option=
++ fi
++ objcopy --add-gnu-debuglink=$debugfn $strip_option $f || :
++ chmod $mode $f
+ done
- if [ -d "${RPM_BUILD_ROOT}/usr/lib" -o -d "${RPM_BUILD_ROOT}/usr/src" ]; then
- ((nout > 0)) ||
- test ! -d "${RPM_BUILD_ROOT}/usr/lib" ||
-- (cd "${RPM_BUILD_ROOT}/usr/lib"; find debug -type d) |
-+ (cd "${RPM_BUILD_ROOT}/usr/lib"; test ! -d debug || find debug -type d) |
- sed 's,^,%dir /usr/lib/,' >> "$LISTFILE"
++for f in `find $RPM_BUILD_ROOT ! -path "${debugdir}/*.debug" -type f \( -name "*.exe.mdb" -or -name "*.dll.mdb" \) `
++do
++ dn=$(dirname $f | sed -n -e "s#^$RPM_BUILD_ROOT##p")
++ case "$dn" in
++ /usr/lib/debug/*) continue ;;
++ esac
++ debugdn="${debugdir}${dn}"
++ mkdir -p "${debugdn}"
++ mv "$f" "${debugdn}"
++done
++
++
+ mkdir -p ${RPM_BUILD_ROOT}/usr/src/debug
+-cat $SOURCEFILE | (cd $RPM_BUILD_DIR; LANG=C sort -z -u | cpio -pd0m ${RPM_BUILD_ROOT}/usr/src/debug)
+-# stupid cpio creates new directories in mode 0700, fixup
+-find ${RPM_BUILD_ROOT}/usr/src/debug -type d -print0 | xargs -0 chmod a+rx
++(cd $RPM_BUILD_DIR; LANG=C sort -z -u | cpio -pd0m ${RPM_BUILD_ROOT}/usr/src/debug) < $SOURCEFILE
- (cd "${RPM_BUILD_ROOT}/usr"
+-find ${RPM_BUILD_ROOT}/usr/lib/debug -type f | sed -n -e "s#^$RPM_BUILD_ROOT##p" > $LISTFILE
+-find ${RPM_BUILD_ROOT}/usr/src/debug -mindepth 1 -maxdepth 1 | sed -n -e "s#^$RPM_BUILD_ROOT##p" >> $LISTFILE
++# trying to replace dangling and/or absolute symlink
++DBASE=${RPM_BUILD_ROOT}/usr/src/debug
++for link in `find $DBASE -type l -printf "%P\n"` ; do
++ link_file=`readlink $RPM_BUILD_DIR/$link`
++ case $link_file in
++ /*) is_abs=true ;;
++ *) is_abs= ;;
++ esac
++ if test ! -e "$DBASE/$link" -o -n "$is_abs" ; then # dangling
++ rm -f "$DBASE/$link"
++ cp "`readlink -f $RPM_BUILD_DIR/$link`" "$DBASE/$link"
++ fi
++done
++
++{
++ test -d ${RPM_BUILD_ROOT}/usr/lib/debug && echo /usr/lib/debug
++ echo /usr/src/debug
++} > $LISTFILE
++
++for p in $(<$LISTFILE); do
++ find $RPM_BUILD_ROOT/$p -type f -print0 | xargs -0 -r chmod 0644
++ find $RPM_BUILD_ROOT/$p -type d -print0 | xargs -0 -r chmod 0755
++done
diff --git a/findfplistexclude.diff b/findfplistexclude.diff
new file mode 100644
index 0000000..45b185f
--- /dev/null
+++ b/findfplistexclude.diff
@@ -0,0 +1,114 @@
+Allow an "exclude" parameter for rpmdbFindFp, specifying a header
+that is to be excluded in the match. Used to speed up package erase
+operations.
+Also fixes the skipDir problem that made rpm incorrectly delete
+files even if another package still references them.
+rh#140055
+
+Index: lib/transaction.c
+===================================================================
+--- lib/transaction.c.orig
++++ lib/transaction.c
+@@ -1745,7 +1745,7 @@ rpmMessage(RPMMESS_DEBUG, _("computing f
+ (void) rpmswEnter(rpmtsOp(ts, RPMTS_OP_FINGERPRINT), 0);
+ /* Extract file info for all files in this package from the database. */
+ matches = xcalloc(fc, sizeof(*matches));
+- if (rpmdbFindFpList(rpmtsGetRdb(ts), fi->fps, matches, fc)) {
++ if (rpmdbFindFpListExclude(rpmtsGetRdb(ts), fi->fps, matches, fc, rpmteType(p) == TR_REMOVED ? fi->record : 0)) {
+ ps = rpmpsFree(ps);
+ rpmtsFreeLock(lock);
+ return 1; /* XXX WTFO? */
+Index: rpmdb/fprint.h
+===================================================================
+--- rpmdb/fprint.h.orig
++++ rpmdb/fprint.h
+@@ -79,6 +79,12 @@ int rpmdbFindFpList(/*@null@*/ rpmdb db,
+ /*@modifies db, *matchList, rpmGlobalMacroContext,
+ fileSystem, internalState @*/;
+
++int rpmdbFindFpListExclude(/*@null@*/ rpmdb db, fingerPrint * fpList,
++ /*@out@*/ dbiIndexSet * matchList, int numItems, unsigned int exclude)
++ /*@globals rpmGlobalMacroContext, fileSystem, internalState @*/
++ /*@modifies db, *matchList, rpmGlobalMacroContext,
++ fileSystem, internalState @*/;
++
+ /* Be carefull with the memory... assert(*fullName == '/' || !scareMemory) */
+
+ /**
+Index: rpmdb/rpmdb.c
+===================================================================
+--- rpmdb/rpmdb.c.orig
++++ rpmdb/rpmdb.c
+@@ -2358,7 +2358,7 @@ static void rpmdbSortIterator(/*@null@*/
+ }
+
+ /*@-bounds@*/ /* LCL: segfault */
+-static int rpmdbGrowIterator(/*@null@*/ rpmdbMatchIterator mi, int fpNum)
++static int rpmdbGrowIterator(/*@null@*/ rpmdbMatchIterator mi, int fpNum, unsigned int exclude)
+ /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/
+ /*@modifies mi, rpmGlobalMacroContext, fileSystem, internalState @*/
+ {
+@@ -2369,7 +2369,7 @@ static int rpmdbGrowIterator(/*@null@*/
+ dbiIndexSet set;
+ int rc;
+ int xx;
+- int i;
++ int i, j;
+
+ if (mi == NULL)
+ return 1;
+@@ -2405,6 +2405,25 @@ static int rpmdbGrowIterator(/*@null@*/
+
+ set = NULL;
+ (void) dbt2set(dbi, data, &set);
++
++ /* prune the set against exclude */
++ for (i = j = 0; i < set->count; i++) {
++ if (exclude && set->recs[i].hdrNum == exclude)
++ continue;
++ if (i != j)
++ set->recs[j] = set->recs[i];
++ j++;
++ }
++ if (j == 0) {
++#ifdef SQLITE_HACK
++ xx = dbiCclose(dbi, dbcursor, 0);
++ dbcursor = NULL;
++#endif
++ set = dbiFreeIndexSet(set);
++ return DB_NOTFOUND;
++ }
++ set->count = j;
++
+ for (i = 0; i < set->count; i++)
+ set->recs[i].fpNum = fpNum;
+
+@@ -3393,6 +3412,12 @@ static int skipDir(const char * dn)
+ int rpmdbFindFpList(rpmdb db, fingerPrint * fpList, dbiIndexSet * matchList,
+ int numItems)
+ {
++ return rpmdbFindFpListExclude(db, fpList, matchList, numItems, 0);
++}
++
++int rpmdbFindFpListExclude(rpmdb db, fingerPrint * fpList, dbiIndexSet * matchList,
++ int numItems, unsigned int exclude)
++{
+ DBT * key;
+ DBT * data;
+ HGE_t hge = (HGE_t)headerGetEntryMinMemory;
+@@ -3424,10 +3449,13 @@ key->data = (void *) fpList[i].baseName;
+ key->size = strlen((char *)key->data);
+ if (key->size == 0) key->size++; /* XXX "/" fixup. */
+
+- if (skipDir(fpList[i].entry->dirName))
++ /* HACK HACK HACK: don't skip dirs while removing
++ * packages as we will loose files on conflicts.
++ * exclude is not zero when removing */
++ if (!exclude && skipDir(fpList[i].entry->dirName))
+ continue;
+
+- xx = rpmdbGrowIterator(mi, i);
++ xx = rpmdbGrowIterator(mi, i, exclude);
+
+ }
+
diff --git a/findksyms.diff b/findksyms.diff
index 786cc91..88d4f02 100644
--- a/findksyms.diff
+++ b/findksyms.diff
@@ -1,26 +1,10 @@
SUSE specific kernel provides/requires scripts
---- ./scripts/Makefile.am.orig 2011-05-11 14:31:45.000000000 +0000
-+++ ./scripts/Makefile.am 2011-05-11 14:46:38.000000000 +0000
-@@ -16,6 +16,7 @@ EXTRA_DIST = \
- rpmdb_loadcvt rpm.daily rpm.log rpm2cpio.sh \
- tcl.req tgpg vpkg-provides.sh \
- find-requires.php find-provides.php \
-+ find-requires.ksyms find-provides.ksyms \
- find-php-provides find-php-requires \
- mono-find-requires mono-find-provides \
- ocaml-find-requires.sh ocaml-find-provides.sh \
-@@ -32,6 +33,7 @@ rpmconfig_SCRIPTS = \
- check-buildroot check-rpaths check-rpaths-worker \
- find-lang.sh \
- perl.prov perl.req perldeps.pl pythondeps.sh osgideps.pl \
-+ find-requires.ksyms find-provides.ksyms \
- mono-find-requires mono-find-provides \
- pkgconfigdeps.sh libtooldeps.sh \
- ocaml-find-requires.sh ocaml-find-provides.sh \
---- ./scripts/find-provides.ksyms.orig 2011-05-11 14:46:38.000000000 +0000
-+++ ./scripts/find-provides.ksyms 2011-05-11 14:46:38.000000000 +0000
-@@ -0,0 +1,41 @@
+Index: scripts/find-provides.ksyms
+===================================================================
+--- /dev/null
++++ scripts/find-provides.ksyms
+@@ -0,0 +1,20 @@
+#! /bin/sh
+
+IFS=$'\n'
@@ -28,43 +12,24 @@ SUSE specific kernel provides/requires scripts
+case "$1" in
+kernel-module-*) ;; # Fedora kernel module package names start with
+ # kernel-module.
-+kernel*) kernel_flavor=${1#kernel-} ;;
++kernel*) is_kernel_package=1 ;;
+esac
+
-+trap 'rm -f "$tmp"' EXIT
-+tmp=$(mktemp)
-+while read f; do
-+ test -e "$f" || continue
-+ case "$f" in
-+ *.debug)
-+ continue
-+ ;;
-+ */lib/modules/*/*.ko | */lib/modules/*/*.ko.gz | */boot/vmlinu[xz]*)
-+ ;;
-+ *)
-+ continue
-+ esac
-+ unzip=false
-+ case "$f" in
-+ *.gz | */boot/vmlinuz*)
-+ unzip=true
-+ esac
-+ if $unzip && gzip -cd "$f" >"$tmp"; then
-+ f=$tmp
-+ fi
-+ flavor=$(/sbin/modinfo -F vermagic "$f")
-+ flavor=${flavor%% *}
-+ flavor=${flavor##*-}
-+ if test -z "$flavor"; then
-+ flavor=$kernel_flavor
-+ fi
-+ nm "$f" \
-+ | sed -r -ne "s/^0*([0-9a-f]+) A __crc_(.+)/ksym($flavor:\\2) = \\1/p"
++if ! [ -z "$is_kernel_package" ]; then
++ cat > /dev/null
++ exit 0
++fi
++
++for module in $(grep -E '/lib/modules/.+\.ko$'); do
++ nm "$module" \
++ | sed -r -ne 's:^0*([0-9a-f]+) A __crc_(.+):ksym(\2) = \1:p'
+done \
+| sort -u
---- ./scripts/find-requires.ksyms.orig 2011-05-11 14:46:38.000000000 +0000
-+++ ./scripts/find-requires.ksyms 2011-05-11 14:46:38.000000000 +0000
-@@ -0,0 +1,57 @@
+Index: scripts/find-requires.ksyms
+===================================================================
+--- /dev/null
++++ scripts/find-requires.ksyms
+@@ -0,0 +1,58 @@
+#! /bin/bash
+
+IFS=$'\n'
@@ -80,16 +45,18 @@ SUSE specific kernel provides/requires scripts
+ nm "$module"
+ done \
+ | sed -r -ne 's:^0*([0-9a-f]+) A __crc_(.+):\1\t\2:p' \
-+ | sort -t $'\t' -k2 -u
++ | sort -k2 -u
+}
+
+all_requires() {
+ for module in "$@"; do
+ set -- $(/sbin/modinfo -F vermagic "$module" | sed -e 's: .*::' -e q)
-+ /sbin/modprobe --dump-modversions "$module" \
++ if [ -e "/boot/symsets-$1.tar.gz" ]; then
++ /sbin/modprobe --dump-modversions "$module" \
+ | sed -r -e 's:^0x0*::' -e 's:$:\t'"$1"':'
++ fi
+ done \
-+ | sort -t $'\t' -k2 -u
++ | sort -k2 -u
+}
+
+if ! [ -z "$is_kernel_package" -a -e /sbin/modinfo -a -e /sbin/modprobe ]; then
@@ -100,7 +67,7 @@ SUSE specific kernel provides/requires scripts
+modules=($(grep -E '/lib/modules/.+\.ko$'))
+if [ ${#modules[@]} -gt 0 ]; then
+ symset_table=$(mktemp -t ${0##*/}.XXXXX)
-+ /usr/lib/rpm/symset-table | sort -t $'\t' -k 1,1 > $symset_table
++ /usr/lib/rpm/symset-table | sort > $symset_table
+
+ join -t $'\t' -j 1 -a 2 $symset_table <(
+ # Filter out requirements that we fulfill ourself.
@@ -111,14 +78,13 @@ SUSE specific kernel provides/requires scripts
+ BEGIN { FS = "\t" ; OFS = "\t" }
+ { print $3 "/" $2 "/" $1 }
+ ' \
-+ | sort -t $'\t' -k 1,1 -u) \
++ | sort -u) \
+ | sort -u \
+ | awk '
+ { FS = "\t" ; OFS = "\t" }
-+ { split($1, arr, "/")
-+ flavor = gensub(/.*-/, "", "", arr[1]) }
-+ NF == 3 { print "kernel(" flavor ":" $2 ") = " $3
++ NF == 3 { print "kernel(" $2 ") = " $3
+ next }
-+ { print "ksym(" flavor ":" arr[3] ") = " arr[2] }
++ { split($1, arr, "/")
++ print "ksym(" arr[3] ") = " arr[2] }
+ '
+fi
diff --git a/findlang.diff b/findlang.diff
index 51b9ab3..235d1a8 100644
--- a/findlang.diff
+++ b/findlang.diff
@@ -1,20 +1,22 @@
---- ./scripts/find-lang.sh.orig 2010-12-03 12:11:57.000000000 +0000
-+++ ./scripts/find-lang.sh 2011-05-11 14:53:34.000000000 +0000
+SUSE patches for find-lang.
+
+--- ./scripts/find-lang.sh.orig 2004-06-20 18:55:19.000000000 +0000
++++ ./scripts/find-lang.sh 2005-12-19 15:22:52.000000000 +0000
@@ -28,10 +28,10 @@ the top of the tree containing the files
PACKAGE_NAME is the %{name} of the package. This should also be
the basename of the .mo files. the output is written to
PACKAGE_NAME.lang unless \$3 is given in which case output is written
-to \$3.
-+to \$3 (note that \$3 is appended to if given).
++to \$3 (note, that \$3 is appended to if given).
Additional options:
- --with-gnome find GNOME help files
- --with-kde find KDE help files
-+ --without-gnome do not find GNOME help files
-+ --without-kde do not find KDE help files
- --with-qt find Qt translation files
- --with-man find localized man pages
++ --without-gnome find GNOME help files
++ --without-kde find KDE help files
--all-name match all package/domain names
-@@ -54,8 +54,8 @@ else NAME=$1
+ --without-mo not find locales files
+ EOF
+@@ -52,8 +52,8 @@ else NAME=$1
fi
shift
@@ -22,54 +24,64 @@
-KDE=#
+GNOME=
+KDE=
- QT=#
- MAN=#
MO=
-@@ -73,6 +73,14 @@ while test $# -gt 0 ; do
- KDE=
- shift
- ;;
+ MO_NAME=$NAME.lang
+ ALL_NAME=#
+@@ -61,12 +61,12 @@ NO_ALL_NAME=
+
+ while test $# -gt 0 ; do
+ case "${1}" in
+- --with-gnome )
+- GNOME=
+ --without-gnome )
+ GNOME=#
-+ shift
-+ ;;
+ shift
+ ;;
+- --with-kde )
+- KDE=
+ --without-kde )
+ KDE=#
-+ shift
-+ ;;
- --with-qt )
- QT=
shift
-@@ -97,33 +105,40 @@ while test $# -gt 0 ; do
+ ;;
+ --without-mo )
+@@ -85,26 +85,43 @@ while test $# -gt 0 ; do
esac
done
+-find $TOP_DIR -type f|sed '
++
+if ! test -s $MO_NAME ; then
-+ echo "%defattr (644, root, root, 755)" > $MO_NAME
++ echo "%defattr (644, root, root, 755)" > $MO_NAME
+fi
+
+MO_NAME_NEW=$MO_NAME.tmp.$$
+rm -f $MO_NAME_NEW
+
- find $TOP_DIR -type f -o -type l|sed '
++find $TOP_DIR -type f -o -type l|sed '
s:'"$TOP_DIR"'::
--'"$ALL_NAME$MO"'s:\(.*/locale/\)\([^/_]\+\)\(.*\.mo$\):%lang(\2) \1\2\3:
--'"$NO_ALL_NAME$MO"'s:\(.*/locale/\)\([^/_]\+\)\(.*/'"$NAME"'\.mo$\):%lang(\2) \1\2\3:
-+'"$ALL_NAME$MO"'s:\(.*/locale/\)\([^/_]\+\)\(.*\.mo$\):%lang(\2) %doc \1\2\3:
-+'"$NO_ALL_NAME$MO"'s:\(.*/locale/\)\([^/_]\+\)\(.*/'"$NAME"'\.mo$\):%lang(\2) %doc \1\2\3:
+ '"$ALL_NAME$MO"'s:\(.*/share/locale/\)\([^/_]\+\)\(.*\.mo$\):%lang(\2) \1\2\3:
+ '"$NO_ALL_NAME$MO"'s:\(.*/share/locale/\)\([^/_]\+\)\(.*/'"$NAME"'\.mo$\):%lang(\2) \1\2\3:
s:^\([^%].*\)::
s:%lang(C) ::
-/^$/d' > $MO_NAME
-+/^$/d' >> $MO_NAME_NEW
++/^ *$/d' >> $MO_NAME_NEW
++
++find $TOP_DIR -type f -o -type l|sed '
++s:'"$TOP_DIR"'::
++/\/share\/locale\//d
++'"$ALL_NAME$MO"'s:\(.*/locale/\)\([^/_]\+\)\([^/]*\)\(.*\)/LC_MESSAGES/.*\.mo$:%lang(\2) %doc \1\2\3\4:
++'"$NO_ALL_NAME$MO"'s:\(.*/locale/\)\([^/_]\+\)\([^/]*\)\(.*\)/LC_MESSAGES/'"$NAME"'\.mo$:%lang(\2) %doc \1\2\3\4:
++s:^\([^%].*\)::
++s:%lang(C) ::
++/^ *$/d' >> $MO_NAME_NEW
find $TOP_DIR -type d|sed '
s:'"$TOP_DIR"'::
-'"$NO_ALL_NAME$GNOME"'s:\(.*/gnome/help/'"$NAME"'$\):%dir \1:
+'"$NO_ALL_NAME$GNOME"'s:\(.*/gnome/help/'"$NAME"'$\):%dir %doc \1:
'"$NO_ALL_NAME$GNOME"'s:\(.*/gnome/help/'"$NAME"'/[a-zA-Z0-9.\_\-]/.\+\)::
--'"$NO_ALL_NAME$GNOME"'s:\(.*/gnome/help/'"$NAME"'\/\)\([^/_]\+\):%lang(\2) \1\2:
+ '"$NO_ALL_NAME$GNOME"'s:\(.*/gnome/help/'"$NAME"'\/\)\([^/_]\+\):%lang(\2) \1\2:
-'"$ALL_NAME$GNOME"'s:\(.*/gnome/help/[a-zA-Z0-9.\_\-]\+$\):%dir \1:
-+'"$NO_ALL_NAME$GNOME"'s:\(.*/gnome/help/'"$NAME"'\/\)\([^/_]\+\):%lang(\2) %doc \1\2:
+'"$ALL_NAME$GNOME"'s:\(.*/gnome/help/[a-zA-Z0-9.\_\-]\+$\):%dir %doc \1:
'"$ALL_NAME$GNOME"'s:\(.*/gnome/help/[a-zA-Z0-9.\_\-]\+/[a-zA-Z0-9.\_\-]/.\+\)::
-'"$ALL_NAME$GNOME"'s:\(.*/gnome/help/[a-zA-Z0-9.\_\-]\+\/\)\([^/_]\+\):%lang(\2) \1\2:
@@ -78,77 +90,30 @@
s:^\([^%].*\)::
s:%lang(C) ::
-/^$/d' >> $MO_NAME
-+/^$/d' >> $MO_NAME_NEW
++/^ *$/d' >> $MO_NAME_NEW
find $TOP_DIR -type d|sed '
s:'"$TOP_DIR"'::
- '"$NO_ALL_NAME$GNOME"'s:\(.*/omf/'"$NAME"'$\):%dir \1:
- '"$ALL_NAME$GNOME"'s:\(.*/omf/[a-zA-Z0-9.\_\-]\+$\):%dir \1:
- s:^\([^%].*\)::
--/^$/d' >> $MO_NAME
-+/^$/d' >> $MO_NAME_NEW
-
- find $TOP_DIR -type f|sed '
- s:'"$TOP_DIR"'::
-@@ -131,7 +146,7 @@ s:'"$TOP_DIR"'::
- '"$ALL_NAME$GNOME"'s:\(.*/omf/[a-zA-Z0-9.\_\-]\+/[a-zA-Z0-9.\_\-]\+-\([^/.]\+\)\.omf\):%lang(\2) \1:
- s:^[^%].*::
- s:%lang(C) ::
--/^$/d' >> $MO_NAME
-+/^$/d' >> $MO_NAME_NEW
-
- KDE3_HTML=`kde-config --expandvars --install html 2>/dev/null`
- if [ x"$KDE3_HTML" != x -a -d "$TOP_DIR$KDE3_HTML" ]; then
-@@ -143,7 +158,7 @@ s:'"$TOP_DIR"'::
- '"$ALL_NAME$KDE"'s:\(.*/HTML/\)\([^/_]\+\)\(.*/[a-zA-Z0-9.\_\-]\+$\):%lang(\2) \1\2\3:
+@@ -112,12 +129,20 @@ s:'"$TOP_DIR"'::
+ '"$NO_ALL_NAME$KDE"'s:\(.*/doc/kde/HTML/\)\([^/_]\+\)\(.*/'"$NAME"'\)$:%lang(\2) \1\2\3:
+ '"$ALL_NAME$KDE"'s:\(.*/doc/kde/HTML/\)\([^/_]\+\)\(.*/[a-zA-Z0-9.\_\-]\+/\)::
+ '"$ALL_NAME$KDE"'s:\(.*/doc/kde/HTML/\)\([^/_]\+\)\(.*/[a-zA-Z0-9.\_\-]\+$\):%lang(\2) \1\2\3:
++'"$NO_ALL_NAME$KDE"'s:\(.*/kde.*share/doc/HTML/\)\([^/_]\+\)\(.*/'"$NAME"'/\)::
++'"$NO_ALL_NAME$KDE"'s:\(.*/kde.*share/doc/HTML/\)\([^/_]\+\)\(.*/'"$NAME"'\)$:%lang(\2) \1\2\3:
++'"$ALL_NAME$KDE"'s:\(.*/kde.*share/doc/HTML/\)\([^/_]\+\)\(.*/[a-zA-Z0-9.\_\-]\+/\)::
++'"$ALL_NAME$KDE"'s:\(.*/kde.*share/doc/HTML/\)\([^/_]\+\)\(.*/[a-zA-Z0-9.\_\-]\+$\):%lang(\2) \1\2\3:
s:^\([^%].*\)::
s:%lang(C) ::
-/^$/d' >> $MO_NAME
-+/^$/d' >> $MO_NAME_NEW
- fi
-
- KDE4_HTML=`kde4-config --expandvars --install html 2>/dev/null`
-@@ -156,7 +171,7 @@ s:'"$TOP_DIR"'::
- '"$ALL_NAME$KDE"'s:\(.*/HTML/\)\([^/_]\+\)\(.*/[a-zA-Z0-9.\_\-]\+$\):%lang(\2) \1\2\3:
- s:^\([^%].*\)::
- s:%lang(C) ::
--/^$/d' >> $MO_NAME
-+/^$/d' >> $MO_NAME_NEW
- fi
-
- find $TOP_DIR -type f -o -type l|sed '
-@@ -168,7 +183,7 @@ s:'"$TOP_DIR"'::
- '"$ALL_NAME$QT"'s:^\([^%].*/[^/]\+_\([a-zA-Z]\{2\}\)\.qm$\):%lang(\2) \1:
- s:^[^%].*::
- s:%lang(C) ::
--/^$/d' >> $MO_NAME
-+/^$/d' >> $MO_NAME_NEW
-
- find $TOP_DIR -type d|sed '
- s:'"$TOP_DIR"'::
-@@ -176,17 +191,22 @@ s:'"$TOP_DIR"'::
- '"$ALL_NAME$MAN"'s:\(.*/man/\([^/_]\+\).*/man[a-z0-9]\+$\):%lang(\2) \1*:
- s:^\([^%].*\)::
- s:%lang(C) ::
--/^$/d' >> $MO_NAME
-+/^$/d' >> $MO_NAME_NEW
-
- find $TOP_DIR -type f -o -type l|sed '
- s:'"$TOP_DIR"'::
- '"$NO_ALL_NAME$MAN"'s:\(.*/man/\([^/_]\+\).*/man[a-z0-9]\+/'"$NAME"'\.[a-z0-9].*\):%lang(\2) \1*:
- s:^\([^%].*\)::
- s:%lang(C) ::
--/^$/d' >> $MO_NAME
-+/^$/d' >> $MO_NAME_NEW
++/^ *$/d' >> $MO_NAME_NEW
-if ! grep -q / $MO_NAME; then
-+if ! grep -q / $MO_NAME_NEW; then
++if ! grep -q / $MO_NAME_NEW ; then
echo "No translations found for ${NAME} in ${TOP_DIR}"
+ rm -f $MO_NAME_NEW
exit 1
++else
++ sort -u $MO_NAME_NEW >> $MO_NAME
++ rm -f $MO_NAME_NEW
fi
-+
-+sort -u $MO_NAME_NEW >> $MO_NAME
-+rm -f $MO_NAME_NEW
-+
exit 0
diff --git a/findsupplements.diff b/findsupplements.diff
deleted file mode 100644
index 83476d0..0000000
--- a/findsupplements.diff
+++ /dev/null
@@ -1,75 +0,0 @@
-Add support for supplements to the internal dependency
-generator.
-
---- build/rpmfc.c.orig 2011-05-13 16:54:26.000000000 +0000
-+++ build/rpmfc.c 2011-05-13 17:11:20.000000000 +0000
-@@ -54,6 +54,7 @@ struct rpmfc_s {
-
- rpmds provides; /*!< (no. provides) package provides */
- rpmds requires; /*!< (no. requires) package requires */
-+ rpmds supplements; /*!< (no. supplements) package supplements */
- };
-
- struct rpmfcTokens_s {
-@@ -481,6 +482,14 @@ static int rpmfcHelper(rpmfc fc, unsigne
- dsContext = RPMSENSE_FIND_REQUIRES;
- tagN = RPMTAG_REQUIRENAME;
- break;
-+ case 'S':
-+ if (fc->skipProv)
-+ return 0;
-+ depname = "supplements";
-+ depsp = &fc->supplements;
-+ dsContext = RPMSENSE_FIND_REQUIRES|RPMSENSE_STRONG|RPMSENSE_MISSINGOK;
-+ tagN = RPMTAG_ENHANCESNAME;
-+ break;
- }
-
- /* If the entire path is filtered out, there's nothing more to do */
-@@ -752,6 +761,7 @@ rpmfc rpmfcFree(rpmfc fc)
-
- fc->provides = rpmdsFree(fc->provides);
- fc->requires = rpmdsFree(fc->requires);
-+ fc->supplements = rpmdsFree(fc->supplements);
- }
- fc = _free(fc);
- return NULL;
-@@ -804,6 +814,7 @@ rpmRC rpmfcApply(rpmfc fc)
- for (ARGV_t fattr = fc->fattrs[fc->ix]; fattr && *fattr; fattr++) {
- xx += rpmfcHelper(fc, 'P', *fattr);
- xx += rpmfcHelper(fc, 'R', *fattr);
-+ xx += rpmfcHelper(fc, 'S', *fattr);
- }
- }
-
-@@ -846,6 +857,11 @@ rpmRC rpmfcApply(rpmfc fc)
- dix = rpmdsFind(fc->requires, ds);
- ds = rpmdsFree(ds);
- break;
-+ case 'S':
-+ ds = rpmdsSingle(RPMTAG_ENHANCESNAME, N, EVR, Flags);
-+ dix = rpmdsFind(fc->supplements, ds);
-+ ds = rpmdsFree(ds);
-+ break;
- }
-
- /* XXX assertion incorrect while generating -debuginfo deps. */
-@@ -1357,6 +1373,18 @@ rpmRC rpmfcGenerateDepends(const rpmSpec
- }
- }
-
-+ /* Add Supplements: */
-+ if (fc->supplements != NULL && rpmdsCount(fc->supplements) > 0 && !fc->skipReq) {
-+ rpmds pi = rpmdsInit(fc->supplements);
-+ while (rpmdsNext(pi) >= 0) {
-+ rpmsenseFlags flags = rpmdsFlags(pi);
-+
-+ headerPutString(pkg->header, RPMTAG_ENHANCESNAME, rpmdsN(pi));
-+ headerPutString(pkg->header, RPMTAG_ENHANCESVERSION, rpmdsEVR(pi));
-+ headerPutUint32(pkg->header, RPMTAG_ENHANCESFLAGS, &flags, 1);
-+ }
-+ }
-+
- /* Add dependency dictionary(#dependencies) */
- if (rpmtdFromArgi(&td, RPMTAG_DEPENDSDICT, fc->ddictx)) {
- assert(rpmtdType(&td) == RPM_INT32_TYPE);
diff --git a/firmware.diff b/firmware.diff
deleted file mode 100644
index 13f7bae..0000000
--- a/firmware.diff
+++ /dev/null
@@ -1,37 +0,0 @@
-Index: autodeps/linux.prov
-===================================================================
---- autodeps/linux.prov.orig 2011-06-08 13:28:10.000000000 +0200
-+++ autodeps/linux.prov 2011-06-08 13:28:51.755445342 +0200
-@@ -11,6 +11,7 @@ solist=($(printf "%s\n" "${filelist[@]}"
- pythonlist=
- tcllist=
- monolist=($(printf "%s\n" "${filelist[@]}" | egrep "\\.(exe|dll)\$"))
-+firmwarelist=($(printf "%s\n" "${filelist[@]}" | grep "/lib/firmware/"))
-
- #
- # --- Alpha does not mark 64bit dependencies
-@@ -59,6 +60,11 @@ done | sort -u
- printf "%s\n" "${tcllist[@]}" | /usr/lib/rpm/tcl.prov | sort -u
-
- #
-+# --- firmware files
-+[ -x /usr/lib/rpm/firmware.prov -a -n "$firmwarelist" ] &&
-+ printf "%s\n" "${firmwarelist[@]}" | /usr/lib/rpm/firmware.prov | sort -u
-+
-+#
- # --- Mono exes/dlls
- : ${MONO_PREFIX=/usr}
- if [ -x $MONO_PREFIX/bin/mono -a -n "$monolist" ] ; then
-Index: scripts/firmware.prov
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ scripts/firmware.prov 2011-06-08 13:28:33.117204009 +0200
-@@ -0,0 +1,8 @@
-+#!/bin/sh
-+# Add firmware files in /lib/firmware into RPM provides
-+
-+while read instfile ; do
-+ case $instfile in
-+ */lib/firmware/*) test -f "$instfile" && echo "firmware(${instfile##*/lib/firmware/})" ;;
-+ esac
-+done
diff --git a/fontprovides.diff b/fontprovides.diff
deleted file mode 100644
index a22cb85..0000000
--- a/fontprovides.diff
+++ /dev/null
@@ -1,54 +0,0 @@
-Index: autodeps/linux.prov
-===================================================================
---- autodeps/linux.prov.orig 2011-06-08 13:37:46.951974468 +0200
-+++ autodeps/linux.prov 2011-06-08 13:37:46.967972960 +0200
-@@ -15,6 +15,8 @@ pythonlist=($(printf "%s\n" "${filelist[
- tcllist=
- monolist=($(printf "%s\n" "${filelist[@]}" | egrep "\\.(exe|dll)\$"))
- firmwarelist=($(printf "%s\n" "${filelist[@]}" | grep "/lib/firmware/"))
-+pkgconfiglist=($(printf "%s\n" "${filelist[@]}" | egrep '\.pc$'))
-+fontlist=($(printf "%s\n" "${filelist[@]}" | egrep -i "/usr/share/fonts/.*\.(ttf|otf|pfa)$"))
-
- #
- # --- Alpha does not mark 64bit dependencies
-@@ -80,6 +82,16 @@ if [ -x $MONO_PREFIX/bin/mono -a -n "$mo
- fi
-
- #
-+# --- pkgconfig provides
-+[ -x /usr/lib/rpm/pkgconfigdeps.sh -a -n "$pkgconfiglist" ] &&
-+ printf "%s\n" "${pkgconfiglist[@]}" | /usr/lib/rpm/pkgconfigdeps.sh -P | sort -u
-+
-+#
-+# --- font provides
-+[ -x /usr/lib/rpm/fontconfig.prov -a -n "$fontlist" ] &&
-+ printf "%s\n" "${fontlist[@]}" | /usr/lib/rpm/fontconfig.prov | sort -u
-+
-+#
- # --- Kernel module exported symbols
- [ -x /usr/lib/rpm/find-provides.ksyms ] &&
- printf "%s\n" "${filelist[@]}" | /usr/lib/rpm/find-provides.ksyms "$@"
-Index: autodeps/linux.req
-===================================================================
---- autodeps/linux.req.orig 2011-06-08 13:37:46.951974468 +0200
-+++ autodeps/linux.req 2011-06-08 13:37:46.968972865 +0200
-@@ -34,6 +34,7 @@ perllist=()
- pythonlist=($(printf "%s\n" "${filelist[@]}" | egrep '/usr/lib[^/]*/python.\..'))
- tcllist=()
- monolist=($(printf "%s\n" "${filelist[@]}" | egrep "\\.(exe|dll)(\\.config)?\$"))
-+pkgconfiglist=($(printf "%s\n" "${filelist[@]}" | egrep '\.pc$'))
-
- #
- # --- Alpha does not mark 64bit dependencies
-@@ -143,6 +144,11 @@ if [ -x $MONO_PREFIX/bin/mono -a -n "$mo
- fi
-
- #
-+# --- pkgconfig requires
-+[ -x /usr/lib/rpm/pkgconfigdeps.sh -a -n "$pkgconfiglist" ] &&
-+ printf "%s\n" "${pkgconfiglist[@]}" | /usr/lib/rpm/pkgconfigdeps.sh -R | sort -u
-+
-+#
- # --- Kernel module imported symbols
- [ -x ${0%/*}/find-requires.ksyms ] &&
- printf "%s\n" "${filelist[@]}" | ${0%/*}/find-requires.ksyms "$@"
diff --git a/forkfailed.diff b/forkfailed.diff
new file mode 100644
index 0000000..f5af4d0
--- /dev/null
+++ b/forkfailed.diff
@@ -0,0 +1,40 @@
+Print error message if scriptlet fork fails instead if silently
+dying. [#152779]
+
+Index: lib/psm.c
+===================================================================
+--- lib/psm.c.orig
++++ lib/psm.c
+@@ -910,6 +910,12 @@ static rpmRC runScript(rpmpsm psm, Heade
+ }
+ /*@=branchstate@*/
+
++ if (psm->sq.child == (pid_t)-1) {
++ rpmError(RPMERR_FORK, _("Couldn't fork %s: %s\n"), sln, strerror(errno));
++ rc = RPMRC_FAIL;
++ goto exit;
++ }
++
+ (void) psmWait(psm);
+
+ /* XXX filter order dependent multilib "other" arch helper error. */
+@@ -934,6 +940,7 @@ static rpmRC runScript(rpmpsm psm, Heade
+ }
+ }
+
++exit:
+ if (freePrefixes) prefixes = hfd(prefixes, ipt);
+
+ xx = Fclose(out); /* XXX dup'd STDOUT_FILENO */
+Index: rpmio/rpmsq.c
+===================================================================
+--- rpmio/rpmsq.c.orig
++++ rpmio/rpmsq.c
+@@ -407,6 +407,7 @@ fprintf(stderr, " Enable(%p): %p\n",
+
+ pid = fork();
+ if (pid < (pid_t) 0) { /* fork failed. */
++ sq->child = (pid_t)-1;
+ /*@-bounds@*/
+ xx = close(sq->pipes[0]);
+ xx = close(sq->pipes[1]);
diff --git a/getcwdresult.diff b/getcwdresult.diff
new file mode 100644
index 0000000..44b246f
--- /dev/null
+++ b/getcwdresult.diff
@@ -0,0 +1,30 @@
+Check getcwd return value, abort if rpm cannot determine current
+directory.
+
+--- ./build.c.orig 2004-10-17 19:00:10.000000000 +0000
++++ ./build.c 2005-12-19 17:52:25.000000000 +0000
+@@ -206,7 +211,10 @@ static int buildForTarget(rpmts ts, cons
+ directory for this run */
+
+ if (*arg != '/') {
+- (void)getcwd(buf, BUFSIZ);
++ if (!getcwd(buf, BUFSIZ)) {
++ rpmError(RPMERR_STAT, "getcwd failed: %m\n");
++ return 1;
++ }
+ strcat(buf, "/");
+ strcat(buf, arg);
+ } else
+@@ -225,7 +233,11 @@ static int buildForTarget(rpmts ts, cons
+ specut = urlPath(specURL, &specFile);
+ if (*specFile != '/') {
+ char *s = alloca(BUFSIZ);
+- (void)getcwd(s, BUFSIZ);
++ if (!getcwd(s, BUFSIZ)) {
++ rpmError(RPMERR_STAT, "getcwd failed: %m\n");
++ rc = 1;
++ goto exit;
++ }
+ strcat(s, "/");
+ strcat(s, arg);
+ specURL = s;
diff --git a/ghost.diff b/ghost.diff
new file mode 100644
index 0000000..23bc798
--- /dev/null
+++ b/ghost.diff
@@ -0,0 +1,17 @@
+Fix --noghost query option. rh#103207
+
+Already in rpm-4.4.7
+
+Index: lib/query.c
+===================================================================
+--- lib/query.c.orig
++++ lib/query.c
+@@ -222,7 +222,7 @@ int showQueryPackage(QVA_t qva, rpmts ts
+ continue;
+
+ /* If not querying %ghost, skip ghost files. */
+- if (!(qva->qva_fflags & RPMFILE_GHOST) && (fflags & RPMFILE_GHOST))
++ if ((qva->qva_fflags & RPMFILE_GHOST) && (fflags & RPMFILE_GHOST))
+ continue;
+
+ /*@-boundswrite@*/
diff --git a/globlstat.diff b/globlstat.diff
new file mode 100644
index 0000000..e587fdd
--- /dev/null
+++ b/globlstat.diff
@@ -0,0 +1,18 @@
+Always use lstat in glob call to work around a change in glibc's
+glob code. [#129434], rh#126460
+
+rpm-4.4.7 comes with its own glob implementation, so it doesn't
+need this patch (but it also doesn't hurt).
+
+--- ./rpmio/rpmrpc.c.orig 2005-12-16 15:01:26.000000000 +0000
++++ ./rpmio/rpmrpc.c 2006-02-13 18:55:39.000000000 +0000
+@@ -1450,7 +1462,8 @@ fprintf(stderr, "*** Glob(%s,0x%x,%p,%p)
+ pglob->gl_readdir = Readdir;
+ pglob->gl_opendir = Opendir;
+ pglob->gl_lstat = Lstat;
+- pglob->gl_stat = Stat;
++ /* always use lstat to glob symlinks */
++ pglob->gl_stat = Lstat;
+ /*@=type@*/
+ flags |= GLOB_ALTDIRFUNC;
+ flags &= ~GLOB_TILDE;
diff --git a/globoffbyone.diff b/globoffbyone.diff
new file mode 100644
index 0000000..3fff8cf
--- /dev/null
+++ b/globoffbyone.diff
@@ -0,0 +1,13 @@
+Fix off-by-one error in glob call.
+
+--- ./rpmio/rpmrpc.c.orig 2005-12-16 15:01:26.000000000 +0000
++++ ./rpmio/rpmrpc.c 2006-02-13 18:55:39.000000000 +0000
+@@ -1403,7 +1415,7 @@ int Glob_pattern_p (const char * pattern
+ case '*':
+ return (1);
+ case '\\':
+- if (quote && p[1] != '\0')
++ if (quote && *p != '\0')
+ p++;
+ continue;
+
diff --git a/headeradddb.diff b/headeradddb.diff
deleted file mode 100644
index af197df..0000000
--- a/headeradddb.diff
+++ /dev/null
@@ -1,55 +0,0 @@
-Add rpmtsHeaderAddDB and rpmtsHeaderRemoveDB so that
-convertdb1 will build again.
-
---- lib/rpmts.c.orig 2011-05-12 13:21:03.000000000 +0000
-+++ lib/rpmts.c 2011-05-12 13:26:25.000000000 +0000
-@@ -159,6 +159,24 @@ int rpmtsVerifyDB(rpmts ts)
- return rc;
- }
-
-+int rpmtsHeaderAddDB(rpmts ts, Header h)
-+{
-+ if (rpmtsOpenDB(ts, (O_RDWR|O_CREAT)))
-+ return RPMRC_FAIL;
-+ if (rpmdbAdd(rpmtsGetRdb(ts), h) != 0)
-+ return RPMRC_FAIL;
-+ return RPMRC_OK;
-+}
-+
-+int rpmtsHeaderRemoveDB(rpmts ts, unsigned int hdrNum)
-+{
-+ if (rpmtsOpenDB(ts, (O_RDWR|O_CREAT)))
-+ return RPMRC_FAIL;
-+ if (rpmdbRemove(rpmtsGetRdb(ts), hdrNum) != 0)
-+ return RPMRC_FAIL;
-+ return RPMRC_OK;
-+}
-+
- /* keyp might no be defined. */
- rpmdbMatchIterator rpmtsInitIterator(const rpmts ts, rpmDbiTagVal rpmtag,
- const void * keyp, size_t keylen)
---- lib/rpmts.h.orig 2011-05-12 13:21:11.000000000 +0000
-+++ lib/rpmts.h 2011-05-12 13:28:32.000000000 +0000
-@@ -264,6 +264,22 @@ int rpmtsRebuildDB(rpmts ts);
- int rpmtsVerifyDB(rpmts ts);
-
- /** \ingroup rpmts
-+ * Add a header to the database used by the transaction.
-+ * @param ts transaction set
-+ * @param h header to add
-+ * @return 0 on success
-+ */
-+int rpmtsHeaderAddDB(rpmts ts, Header h);
-+
-+/** \ingroup rpmts
-+ * Remove a header from the database used by the transaction.
-+ * @param ts transaction set
-+ * @param hdrNum index of header to remove
-+ * @return 0 on success
-+ */
-+int rpmtsHeaderRemoveDB(rpmts ts, unsigned int hdrNum);
-+
-+/** \ingroup rpmts
- * Return transaction database iterator.
- * @param ts transaction set
- * @param rpmtag database index tag
diff --git a/initdbret.diff b/initdbret.diff
new file mode 100644
index 0000000..ac42891
--- /dev/null
+++ b/initdbret.diff
@@ -0,0 +1,25 @@
+Check rpmtsInitDB return value. Also patches rpm.c, which
+actually is not used anymore.
+
+--- ./rpm.c.orig 2005-12-15 11:59:33.000000000 +0000
++++ ./rpm.c 2005-12-15 11:59:53.000000000 +0000
+@@ -1119,7 +1119,7 @@ int main(int argc, const char ** argv)
+ break;
+
+ case MODE_INITDB:
+- rpmdbInit(rootdir, 0644);
++ ec = rpmdbInit(rootdir, 0644);
+ break;
+
+ case MODE_CHECKSIG:
+--- ./rpmqv.c.orig 2005-12-15 13:46:45.000000000 +0000
++++ ./rpmqv.c 2005-12-15 13:47:37.000000000 +0000
+@@ -624,7 +624,7 @@ int main(int argc, const char ** argv)
+ switch (bigMode) {
+ #ifdef IAM_RPMDB
+ case MODE_INITDB:
+- (void) rpmtsInitDB(ts, 0644);
++ ec = rpmtsInitDB(ts, 0644);
+ break;
+
+ case MODE_REBUILDDB:
diff --git a/initscriptsprov.diff b/initscriptsprov.diff
deleted file mode 100644
index 8a5c2f0..0000000
--- a/initscriptsprov.diff
+++ /dev/null
@@ -1,50 +0,0 @@
---- ./autodeps/linux.prov.orig 2011-05-11 16:45:13.000000000 +0000
-+++ ./autodeps/linux.prov 2011-05-11 16:51:10.000000000 +0000
-@@ -107,4 +107,9 @@ fi
- [ -x /usr/lib/rpm/gstreamer-provides ] &&
- printf "%s\n" "${filelist[@]}" | /usr/lib/rpm/gstreamer-provides | sort -u
-
-+#
-+# --- Provides of sysvinit scripts
-+[ -x /usr/lib/rpm/sysvinitdeps.sh ] &&
-+ printf "%s\n" "${filelist[@]}" | /usr/lib/rpm/sysvinitdeps.sh -P | sort -u
-+
- exit 0
---- ./scripts/Makefile.am.orig 2011-05-11 14:46:38.000000000 +0000
-+++ ./scripts/Makefile.am 2011-05-11 16:52:10.000000000 +0000
-@@ -22,6 +22,7 @@ EXTRA_DIST = \
- ocaml-find-requires.sh ocaml-find-provides.sh \
- pkgconfigdeps.sh libtooldeps.sh \
- fontconfig.prov desktop-file.prov script.req \
-+ sysvinitdeps.sh \
- macros.perl macros.php macros.python
-
- rpmconfig_SCRIPTS = \
-@@ -38,6 +39,7 @@ rpmconfig_SCRIPTS = \
- pkgconfigdeps.sh libtooldeps.sh \
- ocaml-find-requires.sh ocaml-find-provides.sh \
- fontconfig.prov desktop-file.prov script.req \
-+ sysvinitdeps.sh \
- rpmdb_loadcvt rpm2cpio.sh tcl.req tgpg
-
- rpmconfig_DATA = \
---- ./scripts/sysvinitdeps.sh.orig 2011-05-11 16:51:10.000000000 +0000
-+++ ./scripts/sysvinitdeps.sh 2011-05-11 16:54:33.000000000 +0000
-@@ -0,0 +1,17 @@
-+#!/bin/sh
-+
-+[ "$1" = '-P' -o "$1" = '--provides' ] || {
-+ cat > /dev/null
-+ exit 0
-+}
-+
-+while read file; do
-+ case $file in
-+ */etc/init.d/*)
-+ provs=`grep '^# *Provides:' $file | sed 's,^.*:,,'`
-+ for p in $provs; do
-+ echo "sysvinit($p)"
-+ done
-+ ;;
-+ esac
-+done
diff --git a/langnoc.diff b/langnoc.diff
deleted file mode 100644
index ab99287..0000000
--- a/langnoc.diff
+++ /dev/null
@@ -1,127 +0,0 @@
---- ./macros.in.orig 2011-05-11 15:59:44.000000000 +0000
-+++ ./macros.in 2011-05-11 16:45:30.000000000 +0000
-@@ -1247,6 +1247,7 @@ EOF
- # %files -f %{name}.lang
- #
- %find_lang %{_rpmconfigdir}/find-lang.sh %{buildroot}
-+%no_lang_C --without-C
-
- # Commands + opts to use for retrieving remote files
- # Proxy opts can be set through --httpproxy/--httpport popt aliases,
---- ./scripts/find-lang.sh.orig 2011-05-11 14:53:34.000000000 +0000
-+++ ./scripts/find-lang.sh 2011-05-11 16:45:30.000000000 +0000
-@@ -62,6 +62,8 @@ MO=
- MO_NAME=$NAME.lang
- ALL_NAME=#
- NO_ALL_NAME=
-+ONLY_C=#
-+NO_C=#
-
- while test $# -gt 0 ; do
- case "${1}" in
-@@ -98,6 +100,14 @@ while test $# -gt 0 ; do
- NO_ALL_NAME=#
- shift
- ;;
-+ --with-only-C )
-+ ONLY_C=
-+ shift
-+ ;;
-+ --without-C )
-+ NO_C=
-+ shift
-+ ;;
- * )
- MO_NAME=${1}
- shift
-@@ -117,27 +127,32 @@ s:'"$TOP_DIR"'::
- '"$ALL_NAME$MO"'s:\(.*/locale/\)\([^/_]\+\)\(.*\.mo$\):%lang(\2) %doc \1\2\3:
- '"$NO_ALL_NAME$MO"'s:\(.*/locale/\)\([^/_]\+\)\(.*/'"$NAME"'\.mo$\):%lang(\2) %doc \1\2\3:
- s:^\([^%].*\)::
-+'"$ONLY_C"'/%lang(C)/!d
-+'"$NO_C"'/%lang(C)/d
- s:%lang(C) ::
- /^$/d' >> $MO_NAME_NEW
-
- find $TOP_DIR -type d|sed '
- s:'"$TOP_DIR"'::
--'"$NO_ALL_NAME$GNOME"'s:\(.*/gnome/help/'"$NAME"'$\):%dir %doc \1:
-+'"$NO_ALL_NAME$GNOME"'s:\(.*/gnome/help/'"$NAME"'$\):%lang(C) %dir %doc \1:
- '"$NO_ALL_NAME$GNOME"'s:\(.*/gnome/help/'"$NAME"'/[a-zA-Z0-9.\_\-]/.\+\)::
- '"$NO_ALL_NAME$GNOME"'s:\(.*/gnome/help/'"$NAME"'\/\)\([^/_]\+\):%lang(\2) %doc \1\2:
--'"$ALL_NAME$GNOME"'s:\(.*/gnome/help/[a-zA-Z0-9.\_\-]\+$\):%dir %doc \1:
-+'"$ALL_NAME$GNOME"'s:\(.*/gnome/help/[a-zA-Z0-9.\_\-]\+$\):%lang(C) %dir %doc \1:
- '"$ALL_NAME$GNOME"'s:\(.*/gnome/help/[a-zA-Z0-9.\_\-]\+/[a-zA-Z0-9.\_\-]/.\+\)::
- '"$ALL_NAME$GNOME"'s:\(.*/gnome/help/[a-zA-Z0-9.\_\-]\+\/\)\([^/_]\+\):%lang(\2) %doc \1\2:
- s:%lang(.*) .*/gnome/help/[a-zA-Z0-9.\_\-]\+/[a-zA-Z0-9.\_\-]\+/.*::
- s:^\([^%].*\)::
-+'"$ONLY_C"'/%lang(C)/!d
-+'"$NO_C"'/%lang(C)/d
- s:%lang(C) ::
- /^$/d' >> $MO_NAME_NEW
-
- find $TOP_DIR -type d|sed '
- s:'"$TOP_DIR"'::
--'"$NO_ALL_NAME$GNOME"'s:\(.*/omf/'"$NAME"'$\):%dir \1:
--'"$ALL_NAME$GNOME"'s:\(.*/omf/[a-zA-Z0-9.\_\-]\+$\):%dir \1:
-+'"$NO_ALL_NAME$GNOME"'s:\(.*/omf/'"$NAME"'$\):%lang(C) %dir \1:
-+'"$ALL_NAME$GNOME"'s:\(.*/omf/[a-zA-Z0-9.\_\-]\+$\):%lang(C) %dir \1:
- s:^\([^%].*\)::
-+s:%lang(C) ::
- /^$/d' >> $MO_NAME_NEW
-
- find $TOP_DIR -type f|sed '
-@@ -145,6 +160,8 @@ s:'"$TOP_DIR"'::
- '"$NO_ALL_NAME$GNOME"'s:\(.*/omf/'"$NAME"'/'"$NAME"'-\([^/.]\+\)\.omf\):%lang(\2) \1:
- '"$ALL_NAME$GNOME"'s:\(.*/omf/[a-zA-Z0-9.\_\-]\+/[a-zA-Z0-9.\_\-]\+-\([^/.]\+\)\.omf\):%lang(\2) \1:
- s:^[^%].*::
-+'"$ONLY_C"'/%lang(C)/!d
-+'"$NO_C"'/%lang(C)/d
- s:%lang(C) ::
- /^$/d' >> $MO_NAME_NEW
-
-@@ -157,6 +174,8 @@ s:'"$TOP_DIR"'::
- '"$ALL_NAME$KDE"'s:\(.*/HTML/\)\([^/_]\+\)\(.*/[a-zA-Z0-9.\_\-]\+/\)::
- '"$ALL_NAME$KDE"'s:\(.*/HTML/\)\([^/_]\+\)\(.*/[a-zA-Z0-9.\_\-]\+$\):%lang(\2) \1\2\3:
- s:^\([^%].*\)::
-+'"$ONLY_C"'/%lang(C)/!d
-+'"$NO_C"'/%lang(C)/d
- s:%lang(C) ::
- /^$/d' >> $MO_NAME_NEW
- fi
-@@ -170,6 +189,8 @@ s:'"$TOP_DIR"'::
- '"$ALL_NAME$KDE"'s:\(.*/HTML/\)\([^/_]\+\)\(.*/[a-zA-Z0-9.\_\-]\+/\)::
- '"$ALL_NAME$KDE"'s:\(.*/HTML/\)\([^/_]\+\)\(.*/[a-zA-Z0-9.\_\-]\+$\):%lang(\2) \1\2\3:
- s:^\([^%].*\)::
-+'"$ONLY_C"'/%lang(C)/!d
-+'"$NO_C"'/%lang(C)/d
- s:%lang(C) ::
- /^$/d' >> $MO_NAME_NEW
- fi
-@@ -182,6 +203,8 @@ s:'"$TOP_DIR"'::
- '"$ALL_NAME$QT"'s:^\([^%].*/[^/]\+_\([a-zA-Z]\{2\}_[a-zA-Z]\{2\}\)\.qm$\):%lang(\2) \1:
- '"$ALL_NAME$QT"'s:^\([^%].*/[^/]\+_\([a-zA-Z]\{2\}\)\.qm$\):%lang(\2) \1:
- s:^[^%].*::
-+'"$ONLY_C"'/%lang(C)/!d
-+'"$NO_C"'/%lang(C)/d
- s:%lang(C) ::
- /^$/d' >> $MO_NAME_NEW
-
-@@ -190,6 +213,8 @@ s:'"$TOP_DIR"'::
- '"$ALL_NAME$MAN"'s:\(.*/man/\([^/_]\+\).*/man[a-z0-9]\+/\)::
- '"$ALL_NAME$MAN"'s:\(.*/man/\([^/_]\+\).*/man[a-z0-9]\+$\):%lang(\2) \1*:
- s:^\([^%].*\)::
-+'"$ONLY_C"'/%lang(C)/!d
-+'"$NO_C"'/%lang(C)/d
- s:%lang(C) ::
- /^$/d' >> $MO_NAME_NEW
-
-@@ -197,6 +222,8 @@ find $TOP_DIR -type f -o -type l|sed '
- s:'"$TOP_DIR"'::
- '"$NO_ALL_NAME$MAN"'s:\(.*/man/\([^/_]\+\).*/man[a-z0-9]\+/'"$NAME"'\.[a-z0-9].*\):%lang(\2) \1*:
- s:^\([^%].*\)::
-+'"$ONLY_C"'/%lang(C)/!d
-+'"$NO_C"'/%lang(C)/d
- s:%lang(C) ::
- /^$/d' >> $MO_NAME_NEW
-
diff --git a/lazystatfs.diff b/lazystatfs.diff
deleted file mode 100644
index 5869a23..0000000
--- a/lazystatfs.diff
+++ /dev/null
@@ -1,50 +0,0 @@
-Prefer sys/vfs.h, as statvfs stats all filesystems again
---- ./configure.ac.orig 2011-05-12 12:36:32.000000000 +0000
-+++ ./configure.ac 2011-05-12 12:36:42.000000000 +0000
-@@ -402,25 +402,25 @@ dnl
- found_struct_statfs=no
-
- if test X$found_struct_statfs = Xno ; then
--dnl Solaris 2.6+ wants to use statvfs
-+dnl first try including sys/vfs.h
- AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
- #ifdef HAVE_SYS_TYPES_H
- #include
- #endif
--#include ]], [[struct statvfs sfs;]])],[AC_MSG_RESULT(in sys/statvfs.h)
-- AC_DEFINE(STATFS_IN_SYS_STATVFS, 1,
-- [statfs in (for solaris 2.6+ systems)])
-+#include ]], [[struct statfs sfs;]])],[AC_MSG_RESULT(in sys/vfs.h)
-+ AC_DEFINE(STATFS_IN_SYS_VFS, 1, [statfs in (for linux systems)])
- found_struct_statfs=yes],[])
- fi
-
- if test X$found_struct_statfs = Xno ; then
--dnl first try including sys/vfs.h
-+dnl Solaris 2.6+ wants to use statvfs
- AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
- #ifdef HAVE_SYS_TYPES_H
- #include
- #endif
--#include ]], [[struct statfs sfs;]])],[AC_MSG_RESULT(in sys/vfs.h)
-- AC_DEFINE(STATFS_IN_SYS_VFS, 1, [statfs in (for linux systems)])
-+#include ]], [[struct statvfs sfs;]])],[AC_MSG_RESULT(in sys/statvfs.h)
-+ AC_DEFINE(STATFS_IN_SYS_STATVFS, 1,
-+ [statfs in (for solaris 2.6+ systems)])
- found_struct_statfs=yes],[])
- fi
-
---- ./lib/transaction.c.orig 2011-05-12 12:36:55.000000000 +0000
-+++ ./lib/transaction.c 2011-05-12 12:38:03.000000000 +0000
-@@ -114,7 +114,11 @@ static rpmDiskSpaceInfo rpmtsCreateDSI(c
- dsi->bneeded = 0;
- dsi->ineeded = 0;
- #ifdef STATFS_HAS_F_BAVAIL
-+# ifdef ST_RDONLY
- dsi->bavail = (sfb.f_flag & ST_RDONLY) ? 0 : sfb.f_bavail;
-+# else
-+ dsi->bavail = sfb.f_bavail;
-+# endif
- #else
- /* FIXME: the statfs struct doesn't have a member to tell how many blocks are
- * available for non-superusers. f_blocks - f_bfree is probably too big, but
diff --git a/legacyprereq.diff b/legacyprereq.diff
new file mode 100644
index 0000000..2f7af00
--- /dev/null
+++ b/legacyprereq.diff
@@ -0,0 +1,16 @@
+Keep RPMSENSE_PREREQ definition to be compatible with older
+versions. Maybe not needed.
+
+diff -ur ./lib/rpmlib.h ../rpm-4.4.2.orig/lib/rpmlib.h
+--- ./lib/rpmlib.h 2006-09-21 21:07:18.000000000 +0200
++++ ../rpm-4.4.2.orig/lib/rpmlib.h 2006-09-21 20:59:00.000000000 +0200
+@@ -517,8 +517,7 @@
+ RPMSENSE_EQUAL = (1 << 3),
+ RPMSENSE_PROVIDES = (1 << 4), /* only used internally by builds */
+ RPMSENSE_CONFLICTS = (1 << 5), /* only used internally by builds */
+- /* bit 6 used to be RPMSENSE_PREREQ */
+-#define RPMSENSE_PREREQ RPMSENSE_ANY
++ RPMSENSE_PREREQ = (1 << 6), /*!< @todo Legacy. */
+ RPMSENSE_OBSOLETES = (1 << 7), /* only used internally by builds */
+ RPMSENSE_INTERP = (1 << 8), /*!< Interpreter used by scriptlet. */
+ RPMSENSE_SCRIPT_PRE = ((1 << 9)|RPMSENSE_PREREQ), /*!< %pre dependency. */
diff --git a/localetag.diff b/localetag.diff
index c21a9cb..3a2e0fa 100644
--- a/localetag.diff
+++ b/localetag.diff
@@ -1,21 +1,23 @@
-Convert output to the current locale. Assumes utf8 input if the
-decoding works, otherwise iso-8859-1.
+Convert changelog and i18n header elements to current locale.
+[#43347], rh#140050
---- ./lib/tagexts.c.orig 2010-12-03 12:11:57.000000000 +0000
-+++ ./lib/tagexts.c 2011-05-10 16:05:30.000000000 +0000
+Already in rpm-4.4.7
+
+--- ./lib/formats.c.orig 2005-01-26 04:46:54.000000000 +0000
++++ ./lib/formats.c 2006-03-17 15:27:06.000000000 +0000
@@ -2,6 +2,7 @@
* \file lib/formats.c
*/
+#include
#include "system.h"
+ #include "rpmio_internal.h"
+ #include
+@@ -18,6 +19,114 @@
+ /*@access pgpDig @*/
+ /*@access pgpDigParams @*/
- #include
-@@ -150,6 +151,114 @@ exit:
- return rc;
- }
-
-+static char * strtolocale(char *str)
++static const char * strtolocale(const char *str)
+{
+ wchar_t *wstr, *wp;
+ const unsigned char *cp;
@@ -97,7 +99,7 @@ decoding works, otherwise iso-8859-1.
+ wstr = _free(wstr);
+ return str;
+ }
-+ str = _free((char *)str);
++ str = _free(str);
+ memset(&ps, 0, sizeof(ps));
+ ccl = cca = 0;
+ for (wp = wstr; ; wp++) {
@@ -120,77 +122,104 @@ decoding works, otherwise iso-8859-1.
+ }
+ }
+ wstr = _free(wstr);
-+ return (char *)cc;
++ return (const char *)cc;
+}
+
/**
- * Retrieve trigger info.
- * @param h header
-@@ -435,10 +544,41 @@ static int i18nTag(Header h, rpmTag tag,
- #endif
+ * Identify type of trigger.
+ * @param type tag type
+@@ -1077,6 +1220,7 @@ static int i18nTag(Header h, int_32 tag,
- rc = headerGet(h, tag, td, HEADERGET_ALLOC);
-+ if (rc && td->data) {
-+ td->data = strtolocale(td->data);
-+ }
- return rc;
+ if (rc && (*data) != NULL) {
+ *data = xstrdup(*data);
++ *data = strtolocale(*data);
+ *freeData = 1;
+ return 0;
+ }
+@@ -1088,6 +1232,56 @@ static int i18nTag(Header h, int_32 tag,
}
/**
+ * Retrieve text and convert to locale.
+ */
-+static int localeTag(Header h, rpmTag tag, rpmtd td)
++static int localeTag(Header h, int_32 tag, /*@out@*/ rpmTagType * type,
++ /*@out@*/ const void ** data, /*@out@*/ int_32 * count,
++ /*@out@*/ int * freeData)
+{
-+ int rc;
-+ rc = headerGet(h, tag, td, HEADERGET_ALLOC);
-+ if (!rc)
-+ return 0;
-+ if (td->type == RPM_STRING_TYPE) {
-+ td->data = strtolocale(td->data);
-+ td->count = 1;
-+ } else if (td->type == RPM_STRING_ARRAY_TYPE) {
-+ char **arr;
-+ int i;
-+ arr = xmalloc(td->count * sizeof(*arr));
-+ for (i = 0; i < td->count; i++) {
-+ arr[i] = xstrdup(((char **)td->data)[i]);
-+ arr[i] = strtolocale(arr[i]);
-+ }
-+ _free(td->data);
-+ td->data = arr;
-+ td->flags = RPMTD_ALLOCED | RPMTD_PTR_ALLOCED;
++ HGE_t hge = (HGE_t)headerGetEntryMinMemory;
++ rpmTagType t;
++ char **d, **d2, *dp;
++ int rc, i, l;
++
++ rc = hge(h, tag, &t, (void **)&d, count);
++ if (!rc || d == NULL || *count == 0) {
++ *freeData = 0;
++ *data = NULL;
++ *count = 0;
++ return 1;
+ }
-+ return rc;
++ if (type)
++ *type = t;
++ if (t == RPM_STRING_TYPE) {
++ d = (char **)xstrdup((char *)d);
++ d = (char **)strtolocale((char *)d);
++ *freeData = 1;
++ } else if (t == RPM_STRING_ARRAY_TYPE) {
++ l = 0;
++ for (i = 0; i < *count; i++) {
++ d[i] = xstrdup(d[i]);
++ d[i] = (char *)strtolocale(d[i]);
++ l += strlen(d[i]) + 1;
++ }
++ d2 = xmalloc(*count * sizeof(char *) + l);
++ dp = (char *)(d2 + *count);
++ for (i = 0; i < *count; i++) {
++ d2[i] = dp;
++ strcpy(dp, d[i]);
++ dp += strlen(dp) + 1;
++ d[i] = _free(d[i]);
++ }
++ d = _free(d);
++ d = d2;
++ *freeData = 1;
++ } else
++ *freeData = 0;
++ *data = (void **)d;
++ return 0;
+}
+
+
+/**
* Retrieve summary text.
* @param h header
- * @retval td tag data container
-@@ -460,6 +600,16 @@ static int descriptionTag(Header h, rpmt
- return i18nTag(h, RPMTAG_DESCRIPTION, td, hgflags);
+ * @retval *type tag type
+@@ -1127,6 +1321,20 @@ static int descriptionTag(Header h, /*@o
+ return i18nTag(h, RPMTAG_DESCRIPTION, type, data, count, freeData);
}
-+static int changelognameTag(Header h, rpmtd td)
++static int changelognameTag(Header h, /*@out@*/ rpmTagType * type,
++ /*@out@*/ const void ** data, /*@out@*/ int_32 * count,
++ /*@out@*/ int * freeData)
+{
-+ return localeTag(h, RPMTAG_CHANGELOGNAME, td);
++ return localeTag(h, RPMTAG_CHANGELOGNAME, type, data, count, freeData);
+}
+
-+static int changelogtextTag(Header h, rpmtd td)
++static int changelogtextTag(Header h, /*@out@*/ rpmTagType * type,
++ /*@out@*/ const void ** data, /*@out@*/ int_32 * count,
++ /*@out@*/ int * freeData)
+{
-+ return localeTag(h, RPMTAG_CHANGELOGTEXT, td);
++ return localeTag(h, RPMTAG_CHANGELOGTEXT, type, data, count, freeData);
+}
+
/**
* Retrieve group text.
* @param h header
-@@ -677,6 +827,8 @@ static const struct headerTagFunc_s rpmH
- { RPMTAG_LONGARCHIVESIZE, longarchivesizeTag },
- { RPMTAG_LONGSIZE, longsizeTag },
- { RPMTAG_LONGSIGSIZE, longsigsizeTag },
-+ { RPMTAG_CHANGELOGNAME, changelognameTag },
-+ { RPMTAG_CHANGELOGTEXT, changelogtextTag },
- { RPMTAG_DBINSTANCE, dbinstanceTag },
- { RPMTAG_EVR, evrTag },
- { RPMTAG_NVR, nvrTag },
+@@ -1152,6 +1360,8 @@ const struct headerSprintfExtension_s rp
+ { HEADER_EXT_TAG, "RPMTAG_GROUP", { groupTag } },
+ { HEADER_EXT_TAG, "RPMTAG_DESCRIPTION", { descriptionTag } },
+ { HEADER_EXT_TAG, "RPMTAG_SUMMARY", { summaryTag } },
++ { HEADER_EXT_TAG, "RPMTAG_CHANGELOGNAME", { changelognameTag } },
++ { HEADER_EXT_TAG, "RPMTAG_CHANGELOGTEXT", { changelogtextTag } },
+ { HEADER_EXT_TAG, "RPMTAG_FILECLASS", { fileclassTag } },
+ { HEADER_EXT_TAG, "RPMTAG_FILECONTEXTS", { filecontextsTag } },
+ { HEADER_EXT_TAG, "RPMTAG_FILENAMES", { filenamesTag } },
diff --git a/luanoreadline.diff b/luanoreadline.diff
new file mode 100644
index 0000000..72ad014
--- /dev/null
+++ b/luanoreadline.diff
@@ -0,0 +1,32 @@
+Build lua without readling support.
+
+--- ./lua/Makefile.am.orig 2006-01-28 00:27:50.000000000 +0000
++++ ./lua/Makefile.am 2006-01-28 00:28:25.000000000 +0000
+@@ -16,7 +16,7 @@ INCLUDES = -I$(srcdir)/include -I$(srcdi
+
+ lua_lua_SOURCES = lua/lua.c
+ lua_lua_CFLAGS = -DLUA_USERCONFIG='"$(srcdir)/local/userconfig.c"'
+-lua_lua_LDADD = $(LDADD) -L/usr/lib -lreadline -lhistory -lncurses
++lua_lua_LDADD = $(LDADD) -lncurses
+ luac_luac_SOURCES = luac/luac.c luac/print.c lopcodes.c
+ luac_luac_CFLAGS = -DLUA_OPNAMES
+
+--- ./lua/local/userconfig.c.orig 2004-03-16 21:58:30.000000000 +0000
++++ ./lua/local/userconfig.c 2006-01-28 00:34:39.000000000 +0000
+@@ -9,6 +9,8 @@
+ {"rex", luaopen_rex}, \
+ {"luapath", luapath},
+
++#if 0
++
+ #define lua_readline myreadline
+ #define lua_saveline mysaveline
+
+@@ -45,6 +47,7 @@ static void mysaveline (lua_State *L, co
+ }
+ }
+ }
++#endif
+
+ static int luapath(lua_State *L)
+ {
diff --git a/luaroot.diff b/luaroot.diff
new file mode 100644
index 0000000..4d66cb4
--- /dev/null
+++ b/luaroot.diff
@@ -0,0 +1,75 @@
+Index: lib/psm.c
+===================================================================
+--- lib/psm.c.orig
++++ lib/psm.c
+@@ -502,6 +502,8 @@ static rpmRC runLuaScript(rpmpsm psm, He
+ {
+ const rpmts ts = psm->ts;
+ int rootFd = -1;
++ int chroot_done;
++ const char *rootDir;
+ const char *n, *v, *r;
+ rpmRC rc = RPMRC_OK;
+ int i;
+@@ -511,20 +513,27 @@ static rpmRC runLuaScript(rpmpsm psm, He
+
+ xx = headerNVR(h, &n, &v, &r);
+
+- if (!rpmtsChrootDone(ts)) {
+- const char *rootDir = rpmtsRootDir(ts);
+- xx = chdir("/");
++ chroot_done = rpmtsChrootDone(ts);
++ rootDir = rpmtsRootDir(ts);
++ if (!chroot_done) {
++ if (rootDir != NULL && strcmp(rootDir, "/") && *rootDir == '/') {
++ xx = chdir("/");
+ /*@-nullpass@*/
+- rootFd = open(".", O_RDONLY, 0);
++ rootFd = open(".", O_RDONLY, 0);
+ /*@=nullpass@*/
+- if (rootFd >= 0) {
+- /*@-superuser -noeffect @*/
+- if (rootDir != NULL && strcmp(rootDir, "/") && *rootDir == '/')
++ if (rootFd >= 0) {
++ /*@-superuser -noeffect @*/
+ xx = chroot(rootDir);
+- /*@=superuser =noeffect @*/
+- xx = rpmtsSetChrootDone(ts, 1);
++ /*@=superuser =noeffect @*/
++ xx = rpmtsSetChrootDone(ts, 1);
++ }
+ }
++ } else {
++/*@-nullpass@*/
++ rootFd = open(".", O_RDONLY, 0);
++/*@=nullpass@*/
+ }
++ xx = chdir("/");
+
+ /* Create arg variable */
+ rpmluaPushTable(lua, "arg");
+@@ -561,14 +570,19 @@ static rpmRC runLuaScript(rpmpsm psm, He
+ rpmluaDelVar(lua, "arg");
+
+ if (rootFd >= 0) {
+- const char *rootDir = rpmtsRootDir(ts);
+ xx = fchdir(rootFd);
+ xx = close(rootFd);
+- /*@-superuser -noeffect @*/
+- if (rootDir != NULL && strcmp(rootDir, "/") && *rootDir == '/')
++ if (!chroot_done) {
++ /*@-superuser -noeffect @*/
+ xx = chroot(".");
+- /*@=superuser =noeffect @*/
+- xx = rpmtsSetChrootDone(ts, 0);
++ /*@=superuser =noeffect @*/
++ xx = rpmtsSetChrootDone(ts, 0);
++ }
++ }
++ if (!chroot_done) {
++ const char *currDir = rpmtsCurrDir(ts);
++ if (currDir != NULL)
++ xx = chdir(currDir);
+ }
+
+ return rc;
diff --git a/macrosin.diff b/macrosin.diff
index 3c9fcb5..f8fb3e9 100644
--- a/macrosin.diff
+++ b/macrosin.diff
@@ -1,6 +1,10 @@
---- ./macros.in.orig 2011-01-03 13:57:41.000000000 +0000
-+++ ./macros.in 2011-05-12 14:32:18.000000000 +0000
-@@ -178,22 +178,22 @@
+SUSE specific macro changes.
+
+Index: macros.in
+===================================================================
+--- macros.in.orig
++++ macros.in
+@@ -166,22 +166,22 @@
# Template for debug information sub-package.
%debug_package \
@@ -12,7 +16,7 @@
Group: Development/Debug\
AutoReqProv: 0\
-%description debug\
-+#Requires: %{?!debug_package_requires:%{name} = %{version}-%{release}}%{?debug_package_requires}\
++Requires: %{name} = %{version}-%{release}\
+%description debuginfo\
This package provides debug information for package %{name}.\
Debug information is useful when developing applications that use this\
@@ -23,81 +27,184 @@
-%endif\
%{nil}
--%_defaultdocdir %{_datadir}/doc
-+%_defaultdocdir %{_datadir}/doc/packages
-+%_docdir_fmt %%{NAME}
+-%_defaultdocdir %{_usr}/doc
++%_defaultdocdir %{_usr}/doc/packages
++%_docdir_fmt %%{NAME}
# The path to the gzip executable (legacy, use %{__gzip} instead).
%_gzipbin %{__gzip}
-@@ -230,7 +230,7 @@ package or when debugging this package.\
+@@ -218,7 +218,7 @@ package or when debugging this package.\
%_tmppath %{_var}/tmp
# Path to top of build area.
--%_topdir %{getenv:HOME}/rpmbuild
+-%_topdir %{_usrsrc}/redhat
+%_topdir %{_usrsrc}/packages
# The path to the unzip executable (legacy, use %{__unzip} instead).
%_unzipbin %{__unzip}
-@@ -333,7 +333,7 @@ package or when debugging this package.\
- # "w7.lzdio" lzma-alone level 7, lzma's default
+@@ -323,7 +323,7 @@ package or when debugging this package.\
+ # "w9.bzdio" bzip2 level 9.
#
#%_source_payload w9.gzdio
-#%_binary_payload w9.gzdio
-+%_binary_payload w5.lzdio
++%_binary_payload w9.bzdio
- # Algorithm to use for generating file checksum digests on build.
- # If not specified or 0, MD5 is used.
-@@ -417,7 +417,7 @@ package or when debugging this package.\
+ # The signature to use and the location of configuration files for
+ # signing packages with PGP.
+@@ -371,7 +371,7 @@ package or when debugging this package.\
#
# Use internal dependency generator rather than external helpers?
-%_use_internal_dependency_generator 1
-+%_use_internal_dependency_generator 1
++%_use_internal_dependency_generator 0
#
# Filter GLIBC_PRIVATE Provides: and Requires:
-@@ -463,16 +463,22 @@ print (t)\
- # Undefined, missing or %{nil} will use package content (if available).
- %_verify_file_context_path %{__file_context_path}
-
-+# maxnum,cuttime,minnum
-+# 2009/03/01 (SLES11 GA)
-+%_binarychangelogtrim 0,1235862000,10
-+
- #
- # Path to scripts to autogenerate package dependencies,
- #
+@@ -420,20 +420,22 @@ print (t)\
# Note: Used iff _use_internal_dependency_generator is zero.
- #%__find_provides %{_rpmconfigdir}/rpmdeps --provides
- #%__find_requires %{_rpmconfigdir}/rpmdeps --requires
--%__find_provides %{_rpmconfigdir}/find-provides
--%__find_requires %{_rpmconfigdir}/find-requires
-+%__find_provides %{_rpmconfigdir}/find-provides %name
-+%__find_requires %{_rpmconfigdir}/find-requires %name
+ #%__find_provides @RPMCONFIGDIR@/rpmdeps --provides
+ #%__find_requires @RPMCONFIGDIR@/rpmdeps --requires
+-%__find_provides @RPMCONFIGDIR@/find-provides
+-%__find_requires @RPMCONFIGDIR@/find-requires
++%__find_provides @RPMCONFIGDIR@/find-provides %name
++%__find_requires @RPMCONFIGDIR@/find-requires %name
#%__find_conflicts ???
#%__find_obsoletes ???
+#%__find_supplements ???
+#%__find_enhances ???
- #
- # Path to file attribute classifications for automatic dependency
-@@ -533,12 +539,12 @@ print (t)\
#
+ # Path to scripts to autogenerate per-interpreter package dependencies,
+ #
+ # Note: Used iff _use_internal_dependency_generator is non-zero. The
+ # helpers are also used by @RPMCONFIGDIR@/rpmdeps {--provides|--requires}.
+-%__perl_provides @RPMCONFIGDIR@/perldeps.pl --provides
+-%__perl_requires @RPMCONFIGDIR@/perldeps.pl --requires
+-#%__perl_provides @RPMCONFIGDIR@/perl.prov
+-#%__perl_requires @RPMCONFIGDIR@/perl.req
++#%__perl_provides @RPMCONFIGDIR@/perldeps.pl --provides
++#%__perl_requires @RPMCONFIGDIR@/perldeps.pl --requires
++%__perl_provides @RPMCONFIGDIR@/perl.prov
++%__perl_requires @RPMCONFIGDIR@/perl.req
- # Misc BDB tuning options
--%__dbi_other mp_mmapsize=128Mb mp_size=64Mb
-+%__dbi_other mp_mmapsize=128Mb mp_size=64Mb
+ %__python_provides @RPMCONFIGDIR@/pythondeps.sh --provides
+ %__python_requires @RPMCONFIGDIR@/pythondeps.sh --requires
+@@ -591,15 +593,15 @@ print (t)\
+ %_dbi_config_Packages %{_dbi_htconfig} lockdbfd
--%_dbi_config %{?__dbi_other}
-+%_dbi_config %{?__dbi_other} nofsync
+ # "Depends" is a per-transaction cache of known dependency resolutions.
+-%_dbi_config_Depends %{_dbi_htconfig} temporary private
++%_dbi_config_Depends %{_dbi_htconfig} temporary private nofsync
- # "Packages" should have shared/exclusive fcntl(2) lock using "lockdbfd".
--%_dbi_config_Packages %{?_dbi_config} lockdbfd
-+%_dbi_config_Packages %{?__dbi_other} lockdbfd
+-%_dbi_config_Dirnames %{_dbi_btconfig}
+-%_dbi_config_Requireversion %{_dbi_btconfig}
+-%_dbi_config_Provideversion %{_dbi_btconfig}
+-%_dbi_config_Installtid %{_dbi_btconfig}
+-%_dbi_config_Removetid %{_dbi_btconfig}
++%_dbi_config_Dirnames %{_dbi_btconfig} nofsync
++%_dbi_config_Requireversion %{_dbi_btconfig} nofsync
++%_dbi_config_Provideversion %{_dbi_btconfig} nofsync
++%_dbi_config_Installtid %{_dbi_btconfig} nofsync
++%_dbi_config_Removetid %{_dbi_btconfig} nofsync
+
+-%_dbi_config %{_dbi_htconfig}
++%_dbi_config %{_dbi_htconfig} nofsync
+
+ # XXX legacy configuration.
+ # Choose db interface:
+@@ -658,8 +660,8 @@ print (t)\
+
+ # Horowitz Key Protocol server configuration
+ #
+-%_hkp_keyserver hkp://pgp.mit.edu
+-%_hkp_keyserver_query %{_hkp_keyserver}/pks/lookup?op=get&search=0x
++#%_hkp_keyserver hkp://pgp.mit.edu
++#%_hkp_keyserver_query %{_hkp_keyserver}/pks/lookup?op=get&search=0x
#==============================================================================
- # ---- GPG/PGP/PGP5 signature macros.
-@@ -857,7 +863,7 @@ print (t)\
+ # ---- Transaction macros.
+@@ -767,80 +769,6 @@ print (t)\
+ #
+ # XXX Note: that there cannot be any whitespace within the string "p>q",
+ # and that both p and q are package names (i.e. no version/release).
+-#
+-#%_dependency_whiteout_5_2 \
+-# pam>pamconfig
+-#%_dependency_whiteout_6_1 \
+-# pilot-link-devel>pilot-link
+-#%_dependency_whiteout_6_2 \
+-# egcs-c++>libstdc++
+-%_dependency_whiteout_7_0 \
+- pango-gtkbeta-devel>pango-gtkbeta\
+- XFree86>Mesa \
+- compat-glibc>db2 \
+- compat-glibc>db1 \
+- pam>initscripts \
+- initscripts>sysklogd
+-%_dependency_whiteout_7_1 \
+- arts>kdelibs-sound
+-%_dependency_whiteout_7_2 \
+- libgnomeprint15>gnome-print \
+- nautilus>nautilus-mozilla \
+- tcl>postgresql-tcl
+-#%_dependency_whiteout_8_0 \
+-# perl>perl-Parse-RecDescent \
+-# XFree86-libs>XFree86-Mesa-libGL \
+-# perl>perl-Filter \
+-# perl>mrtg \
+-# perl>mod_perl \
+-# mysql>perl-DBD-MySQL \
+-# ghostscript>gimp-print \
+-# arts>kde2-compat \
+-# perl-Date-Calc>perl-Bit-Vector \
+-# glibc-debug>glibc-devel
+-
+-%_dependency_whiteout_8_0 \
+- mysql>perl-DBD-MySQL \
+- perl>perl-Filter \
+- perl>mrtg \
+- perl>mod_perl \
+- perl-Date-Calc>perl-Bit-Vector \
+-
+-%_dependency_whiteout_fc3 \
+- coreutils>pam \
+- nautilus>nautilus-cd-burner \
+- aspell>aspell-en \
+- kernel>initscripts \
+- kernel-smp>initscripts \
+- xorg-x11-libs>xorg-x11-Mesa-libGL \
+- openldap>cyrus-sasl-md5 \
+- openldap>cyrus-sasl \
+- openjade>docbook-dtds \
+- gtk+>gdk-pixbuf \
+- xorg-x11>xinitrc \
+- gnome-python2>gnome-python2-bonobo \
+- httpd-suexec>httpd \
+- xemacs-sumo>apel-xemacs \
+- php>php-pear \
+- openoffice.org-libs>openoffice.org
+-
+-%_dependency_whiteout \
+- libtermcap>bash \
+- modutils>vixie-cron \
+- ypbind>yp-tools \
+- ghostscript-fonts>ghostscript \
+- %{?_dependency_whiteout_fc3} \
+- %{?_dependency_whiteout_fc2} \
+- %{?_dependency_whiteout_fc1} \
+- %{?_dependency_whiteout_9} \
+- %{?_dependency_whiteout_8_0} \
+- %{?_dependency_whiteout_7_2} \
+- %{?_dependency_whiteout_7_1} \
+- %{?_dependency_whiteout_7_0} \
+- %{?_dependency_whiteout_6_2} \
+- %{?_dependency_whiteout_6_1} \
+- %{?_dependency_whiteout_5_2} \
+- %{nil}
+
+ #
+ # Default headerSprintf() output format string for rpm -qa
+@@ -1093,7 +1021,7 @@ print (t)\
%_build_vendor %{_host_vendor}
%_build_os %{_host_os}
%_host @host@
@@ -106,10 +213,10 @@
%_host_cpu @host_cpu@
%_host_vendor @host_vendor@
%_host_os @host_os@
-@@ -1020,6 +1026,181 @@ done \
- %python_sitearch %(%{__python} -c "from distutils.sysconfig import get_python_lib; import sys; sys.stdout.write(get_python_lib(1))")
- %python_version %(%{__python} -c "import sys; sys.stdout.write(sys.version[:3])")
+@@ -1250,12 +1178,191 @@ done \
+ %perl_privlib %(eval "`%{__perl} -V:installprivlib`"; echo $installprivlib)
+ #------------------------------------------------------------------------------
+# More useful perl macros (from Raul Dias )
+#
+%perl_version %(perl -V:version | sed "s!.*='!!;s!'.*!!")
@@ -285,21 +392,20 @@
+run "\\$@"\
+EOF
+
- #------------------------------------------------------------------------------
++#------------------------------------------------------------------------------
# arch macro for all Intel i?86 compatibile processors
# (Note: This macro (and it's analogues) will probably be obsoleted when
-@@ -1030,7 +1211,9 @@ done \
-
- #------------------------------------------------------------------------------
- # arch macro for all supported ARM processors
--%arm armv3l armv4b armv4l armv4tl armv5tel armv5tejl armv6l armv7l
-+%arm armv3l armv4b armv4l armv4tl armv5b armv5l armv5teb armv5tel armv5tejl armv6l armv7l
-+%arml armv3l armv4l armv5l armv5tel armv6l armv7l
+ # rpm can use regular expressions against target platforms in macro
+ # conditionals.
+ #
+ %ix86 i386 i486 i586 i686 pentium3 pentium4 athlon
++%arm armv4l armv4b armv5l armv5b armv5tel armv5teb
++%arml armv4l armv5l armv5tel
+%armb armv4b armv5b armv5teb
- #------------------------------------------------------------------------------
- # arch macro for all supported Sparc processors
-@@ -1070,3 +1253,26 @@ done \
+ #------------------------------------------------------------------------
+ # Use in %install to generate locale specific file lists. For example,
+@@ -1270,3 +1377,17 @@ done \
# \endverbatim
#*/
@@ -317,12 +423,3 @@
+%info_del() test -x /sbin/install-info -a ! -f %{?2}%{?!2:%{_infodir}}/%{1}%ext_info && /sbin/install-info --quiet --delete --info-dir=%{?2}%{?!2:%{_infodir}} %{?2}%{?!2:%{_infodir}}/%{1}%ext_info \
+%{nil}
+
-+%service_add() %{fillup_and_insserv %{1}}
-+%service_del_preun() %{stop_on_removal %{1}}
-+%service_del_postun() %{restart_on_update %{1}}
-+
-+%user_group_add() \
-+/usr/sbin/groupadd -o -r %{1} 2>/dev/null || :\
-+/usr/sbin/useradd -o -r -g %{1} -d %{2} -s %{3} -c %{4} %{1} 2>/dev/null || :\
-+%{nil}
-+
diff --git a/magic_and_path.diff b/magic_and_path.diff
deleted file mode 100644
index de74ea7..0000000
--- a/magic_and_path.diff
+++ /dev/null
@@ -1,23 +0,0 @@
-Allow "magic_and_path" flag to configure that files must
-match both regexpes to be sent to the dependency generator.
-
---- build/rpmfc.c.orig 2011-05-16 10:46:20.000000000 +0000
-+++ build/rpmfc.c 2011-05-16 11:02:56.000000000 +0000
-@@ -630,10 +631,13 @@ static void rpmfcAttributes(rpmfc fc, co
- continue;
-
- /* Add attributes on libmagic type & path pattern matches */
-- if (regMatch((*attr)->magic, ftype))
-- argvAddTokens(&fc->fattrs[fc->ix], (*attr)->name);
-- if (regMatch((*attr)->path, path))
-- argvAddTokens(&fc->fattrs[fc->ix], (*attr)->name);
-+ if ((*attr)->magic && (*attr)->path && hasAttr((*attr)->flags, "magic_and_path")) {
-+ if (regMatch((*attr)->magic, ftype) && regMatch((*attr)->path, path))
-+ argvAddTokens(&fc->fattrs[fc->ix], (*attr)->name);
-+ } else {
-+ if (regMatch((*attr)->magic, ftype) || regMatch((*attr)->path, path))
-+ argvAddTokens(&fc->fattrs[fc->ix], (*attr)->name);
-+ }
- }
- }
-
diff --git a/missingok.diff b/missingok.diff
index 7647696..96133c9 100644
--- a/missingok.diff
+++ b/missingok.diff
@@ -1,9 +1,9 @@
-support missingok dependency bit
+Obey MISSINGOK flag for dependencies. Backport from rpm-4.4.7.
---- ./lib/depends.c.orig 2011-02-15 13:10:59.000000000 +0000
-+++ ./lib/depends.c 2011-05-10 16:06:39.000000000 +0000
-@@ -448,8 +448,13 @@ retry:
- }
+--- ./lib/depends.c.orig 2005-12-14 19:51:34.000000000 +0000
++++ ./lib/depends.c 2006-01-27 21:05:13.000000000 +0000
+@@ -581,8 +632,13 @@ retry:
+ /*@=boundsread@*/
unsatisfied:
- rc = 1; /* dependency is unsatisfied */
@@ -17,14 +17,23 @@ support missingok dependency bit
+ }
exit:
- return rc;
---- ./lib/rpmds.h.orig 2011-05-10 16:09:22.000000000 +0000
-+++ ./lib/rpmds.h 2011-05-10 16:08:04.000000000 +0000
-@@ -68,6 +68,7 @@ typedef rpmFlags rpmsenseFlags;
+ /*
+@@ -975,6 +1082,8 @@ static inline /*@observer@*/ const char
+ return "Requires(postun):";
+ if (f & RPMSENSE_SCRIPT_VERIFY)
+ return "Requires(verify):";
++ if (f & RPMSENSE_MISSINGOK)
++ return "Requires(hint):";
+ if (f & RPMSENSE_FIND_REQUIRES)
+ return "Requires(auto):";
+ return "Requires:";
+--- ./lib/rpmlib.h.orig 2005-12-15 14:50:30.000000000 +0000
++++ ./lib/rpmlib.h 2006-02-03 13:22:27.000000000 +0000
+@@ -547,6 +561,7 @@ typedef enum rpmsenseFlags_e {
RPMSENSE_SCRIPT_POSTUN | \
RPMSENSE_SCRIPT_VERIFY | \
RPMSENSE_FIND_REQUIRES | \
+ RPMSENSE_MISSINGOK | \
- RPMSENSE_RPMLIB | \
- RPMSENSE_KEYRING | \
- RPMSENSE_PRETRANS | \
+ RPMSENSE_SCRIPT_PREP | \
+ RPMSENSE_SCRIPT_BUILD | \
+ RPMSENSE_SCRIPT_INSTALL | \
diff --git a/modalias-encode.diff b/modalias-encode.diff
deleted file mode 100644
index c92f195..0000000
--- a/modalias-encode.diff
+++ /dev/null
@@ -1,40 +0,0 @@
-Module aliases (modinfo -F alias ) may contain special characters
-that rpm does not allow in dependencies, such as commas. Encode those as
-%XX to avoid generating broken dependencies.
-
-Signed-off-by: Andreas Gruenbacher
-
-Index: rpm-4.4.2.3/scripts/find-supplements.ksyms
-===================================================================
---- scripts/find-supplements.ksyms
-+++ scripts/find-supplements.ksyms
-@@ -48,6 +48,21 @@ combine_modaliases() {
- print_modaliases "$class" "$variants" "$pos"
- }
-
-+# Encode all characters other than [*:a-zA-Z0-9] in stdin as %XX.
-+# (This includes the % character itself, which becomes %25.)
-+hexenc() {
-+ local line hex
-+
-+ while read line; do
-+ set -- "" "$line"
-+ while [[ "$2" =~ ([*:a-zA-Z0-9]*)([^*:a-zA-Z0-9])(.*) ]]; do
-+ hex=$(echo -n "${BASH_REMATCH[2]}" | hexdump -e '"%X"')
-+ set -- "$1${BASH_REMATCH[1]}%$hex" "${BASH_REMATCH[3]}"
-+ done
-+ echo "$1$2"
-+ done
-+}
-+
- aliases_of_filelist() {
- modlist=$(mktemp)
- have_module=1
-@@ -60,6 +75,7 @@ aliases_of_filelist() {
- fi
- have_module=0
- /sbin/modinfo -F alias "$module" \
-+ | hexenc \
- | sed -nre "s,(.+:.+),modalias(kernel-${krel##*-}:\\1),p" | tee -a $modlist
- done
- if ! test -s "$modlist" && test $have_module = 0; then
diff --git a/modalias-kernel_module.diff b/modalias-kernel_module.diff
index 524e02e..4add934 100644
--- a/modalias-kernel_module.diff
+++ b/modalias-kernel_module.diff
@@ -1,17 +1,15 @@
Index: scripts/find-supplements.ksyms
===================================================================
---- scripts/find-supplements.ksyms.orig
+--- scripts/find-supplements.ksyms
+++ scripts/find-supplements.ksyms
-@@ -1,6 +1,8 @@
+@@ -1,5 +1,6 @@
#! /bin/sh
-+SPECFILE=${RPMBUILD_SPECFILE:-/usr/src/packages/SOURCES/$1.spec}
++RPM_SOURCE_DIR=/usr/src/packages/SOURCES
IFS=$'\n'
-+PACKAGE=$1
case "$1" in
- kernel-module-*) ;; # Fedora kernel module package names start with
-@@ -46,11 +48,54 @@ combine_modaliases() {
+@@ -46,11 +47,43 @@ combine_modaliases() {
print_modaliases "$class" "$variants" "$pos"
}
@@ -22,23 +20,12 @@ Index: scripts/find-supplements.ksyms
- | sed -nre "s,(.+:.+),modalias(kernel-${krel##*-}:\\1),p"
-done \
+aliases_of_filelist() {
-+ modlist=$(mktemp)
-+ have_module=1
+ for module in $(grep -E '/lib/modules/.+\.ko$'); do
+ vermagic=$(/sbin/modinfo -F vermagic "$module")
+ krel=${vermagic%% *}
-+ if ! test -x /sbin/modinfo; then
-+ echo "ERROR: add module-init-tools to BuildRequires" >&2
-+ exit 1
-+ fi
-+ have_module=0
+ /sbin/modinfo -F alias "$module" \
-+ | sed -nre "s,(.+:.+),modalias(kernel-${krel##*-}:\\1),p" | tee -a $modlist
++ | sed -nre "s,(.+:.+),modalias(kernel-${krel##*-}:\\1),p"
+ done
-+ if ! test -s "$modlist" && test $have_module = 0; then
-+ echo "packageand(kernel-${krel##*-}:$PACKAGE)"
-+ fi
-+ rm -f $modlist
+}
+
+aliases_of_specfile_macro() {
@@ -47,7 +34,7 @@ Index: scripts/find-supplements.ksyms
+ regex=$(
+ set -o noglob
+ set -- $(sed -ne 's:^%supplements_kernel_module[ \t]::p' \
-+ $SPECFILE)
++ $RPM_SOURCE_DIR/$1.spec)
+ while [ $# -ge 1 ]; do
+ regex=$(echo "$1" \
+ | sed -e 's:[.]:\\.:g' \
diff --git a/modalias.diff b/modalias.diff
index abcdefd..ccfe6b6 100644
--- a/modalias.diff
+++ b/modalias.diff
@@ -1,29 +1,28 @@
---- ./macros.in.orig 2011-05-11 14:57:08.000000000 +0000
-+++ ./macros.in 2011-05-11 15:01:39.000000000 +0000
-@@ -470,14 +470,18 @@ print (t)\
- #
- # Path to scripts to autogenerate package dependencies,
- #
-+%__set_helper_env %{lua:
-+posix.setenv("RPMBUILD_SPECFILE",rpm.expand("%?_specfile"));
-+posix.setenv("RPMBUILD_SOURCEDIR",rpm.expand("%?_sourcedir"));
-+}
- # Note: Used iff _use_internal_dependency_generator is zero.
- #%__find_provides %{_rpmconfigdir}/rpmdeps --provides
- #%__find_requires %{_rpmconfigdir}/rpmdeps --requires
--%__find_provides %{_rpmconfigdir}/find-provides %name
--%__find_requires %{_rpmconfigdir}/find-requires %name
-+%__find_provides %{__set_helper_env}%{_rpmconfigdir}/find-provides %name
-+%__find_requires %{__set_helper_env}%{_rpmconfigdir}/find-requires %name
- #%__find_conflicts ???
- #%__find_obsoletes ???
--#%__find_supplements ???
-+%__find_supplements %{__set_helper_env}%{_rpmconfigdir}/find-supplements %name
- #%__find_enhances ???
-
- #
---- ./scripts/find-supplements.ksyms.orig 2011-05-11 15:01:39.000000000 +0000
-+++ ./scripts/find-supplements.ksyms 2011-05-11 15:01:39.000000000 +0000
+SUSE specific find-supplements, used for kernel builds
+
+Index: ./scripts/find-supplements
+===================================================================
+--- /dev/null
++++ ./scripts/find-supplements
+@@ -0,0 +1,14 @@
++#!/bin/bash
++
++# This script reads filenames from STDIN and outputs any relevant provides
++# information that needs to be included in the package.
++IFS=$'\n'
++filelist=($(cat))
++
++#
++# --- Kernel module hardware identifiers
++# (e.g., modalias(pci:v0000109Ed00000878sv00000070sd0000FF01bc*sc*i*)
++[ -x /usr/lib/rpm/find-supplements.ksyms ] &&
++ printf "%s\n" "${filelist[@]}" | /usr/lib/rpm/find-supplements.ksyms "$@"
++
++exit 0
+Index: ./scripts/find-supplements.ksyms
+===================================================================
+--- /dev/null
++++ ./scripts/find-supplements.ksyms
@@ -0,0 +1,56 @@
+#! /bin/sh
+
@@ -81,20 +80,16 @@
+done \
+| sort -u \
+| combine_modaliases
---- ./scripts/find-supplements.orig 2011-05-11 15:01:39.000000000 +0000
-+++ ./scripts/find-supplements 2011-05-11 15:01:39.000000000 +0000
-@@ -0,0 +1,14 @@
-+#!/bin/bash
-+
-+# This script reads filenames from STDIN and outputs any relevant provides
-+# information that needs to be included in the package.
-+IFS=$'\n'
-+filelist=($(cat))
-+
-+#
-+# --- Kernel module hardware identifiers
-+# (e.g., modalias(pci:v0000109Ed00000878sv00000070sd0000FF01bc*sc*i*)
-+[ -x /usr/lib/rpm/find-supplements.ksyms ] &&
-+ printf "%s\n" "${filelist[@]}" | /usr/lib/rpm/find-supplements.ksyms "$@"
-+
-+exit 0
+Index: ./macros.in
+===================================================================
+--- ./macros.in
++++ ./macros.in
+@@ -424,7 +424,7 @@ print (t)\
+ %__find_requires @RPMCONFIGDIR@/find-requires %name
+ #%__find_conflicts ???
+ #%__find_obsoletes ???
+-#%__find_supplements ???
++%__find_supplements @RPMCONFIGDIR@/find-supplements %name
+ #%__find_enhances ???
+
+ #
diff --git a/nameversioncompare.diff b/nameversioncompare.diff
index ebede1f..0bd74c4 100644
--- a/nameversioncompare.diff
+++ b/nameversioncompare.diff
@@ -1,10 +1,10 @@
Also compare the name and not only the version when checking if
two packages are the same. rh#104066
---- ./lib/depends.c.orig 2011-05-12 12:20:01.000000000 +0000
-+++ ./lib/depends.c 2011-05-12 12:26:25.000000000 +0000
-@@ -95,6 +95,24 @@ static rpmdbMatchIterator rpmtsPrunedIte
- return mi;
+--- ./lib/depends.c.orig 2005-12-14 19:51:34.000000000 +0000
++++ ./lib/depends.c 2006-01-27 21:05:13.000000000 +0000
+@@ -124,6 +124,24 @@ static int removePackage(rpmts ts, Heade
+ return 0;
}
+static int rpmNameVersionCompare(Header first, Header second)
@@ -12,23 +12,23 @@ two packages are the same. rh#104066
+ const char * one, * two;
+ int rc;
+
-+ one = headerGetString(first, RPMTAG_NAME);
-+ two = headerGetString(second, RPMTAG_NAME);
++ rc = headerGetEntry(first, RPMTAG_NAME, NULL, (void **) &one, NULL);
++ rc = headerGetEntry(second, RPMTAG_NAME, NULL, (void **) &two, NULL);
+ rc = strcmp(one, two);
+ if (rc)
+ return rc;
-+ one = headerGetString(first, RPMTAG_ARCH);
-+ two = headerGetString(second, RPMTAG_ARCH);
++ rc = headerGetEntry(first, RPMTAG_ARCH, NULL, (void **) &one, NULL);
++ rc = headerGetEntry(second, RPMTAG_ARCH, NULL, (void **) &two, NULL);
+ rc = strcmp(one, two);
+ if (rc)
+ return rc;
+ return rpmVersionCompare(first, second);
+}
+
- #define skipColor(_tscolor, _color, _ocolor) \
- ((_tscolor) && (_color) && (_ocolor) && !((_color) & (_ocolor)))
-
-@@ -111,7 +129,7 @@ static void addUpgradeErasures(rpmts ts,
+ int rpmtsAddInstallElement(rpmts ts, Header h,
+ fnpyKey key, int upgrade, rpmRelocation * relocs)
+ {
+@@ -303,7 +322,7 @@ addheader:
continue;
/* Skip packages that contain identical NEVR. */
@@ -36,13 +36,18 @@ two packages are the same. rh#104066
+ if (rpmNameVersionCompare(h, oh) == 0)
continue;
- removePackage(ts, oh, p);
-@@ -150,7 +168,7 @@ static void addObsoleteErasures(rpmts ts
+ xx = removePackage(ts, oh, rpmdbGetIteratorOffset(mi), pkgKey);
+@@ -354,11 +373,9 @@ addheader:
* If no obsoletes version info is available, match all names.
*/
if (rpmdsEVR(obsoletes) == NULL
-- || rpmdsAnyMatchesDep(oh, obsoletes, _rpmds_nopromote)) {
-+ || rpmdsNVRMatchesDep(oh, obsoletes, _rpmds_nopromote)) {
- char * ohNEVRA = headerGetAsString(oh, RPMTAG_NEVRA);
- rpmlog(RPMLOG_DEBUG, " Obsoletes: %s\t\terases %s\n",
- rpmdsDNEVR(obsoletes)+2, ohNEVRA);
+- || rpmdsAnyMatchesDep(oh, obsoletes, _rpmds_nopromote)) {
++ || rpmdsNVRMatchesDep(oh, obsoletes, _rpmds_nopromote)) {
+ const char * ohNEVRA = hGetNEVRA(oh, NULL);
+-#ifdef DYING /* XXX see http://bugzilla.redhat.com #134497 */
+- if (rpmVersionCompare(h, oh))
+-#endif
++ if (rpmNameVersionCompare(h, oh))
+ xx = removePackage(ts, oh, rpmdbGetIteratorOffset(mi), pkgKey);
+ /*@-nullptrarith@*/
+ rpmMessage(RPMMESS_DEBUG, _(" Obsoletes: %s\t\terases %s\n"),
diff --git a/no_rep_autop.diff b/no_rep_autop.diff
deleted file mode 100644
index 4027c96..0000000
--- a/no_rep_autop.diff
+++ /dev/null
@@ -1,12 +0,0 @@
-It seems to be gone...
-
---- lib/Makefile.am.orig 2011-05-12 12:59:42.000000000 +0000
-+++ lib/Makefile.am 2011-05-12 12:59:59.000000000 +0000
-@@ -126,7 +126,6 @@ rpmdb_printlog_LDADD = \
- $(top_builddir)/db3/fileops_autop.o \
- $(top_builddir)/db3/hash_autop.o \
- $(top_builddir)/db3/qam_autop.o \
-- $(top_builddir)/db3/rep_autop.o \
- $(top_builddir)/db3/txn_autop.o \
- $(top_builddir)/db3/util_sig.o \
- librpm.la
diff --git a/nobuildcolor.diff b/nobuildcolor.diff
deleted file mode 100644
index ed58d0d..0000000
--- a/nobuildcolor.diff
+++ /dev/null
@@ -1,13 +0,0 @@
-Disable file coloring for SUSE systems
-
---- build/rpmfc.c.orig 2011-05-13 12:35:29.000000000 +0000
-+++ build/rpmfc.c 2011-05-13 13:49:37.000000000 +0000
-@@ -1312,7 +1312,7 @@ rpmRC rpmfcGenerateDepends(const rpmSpec
- goto exit;
-
- /* Add per-file colors(#files) */
-- if (rpmtdFromArgi(&td, RPMTAG_FILECOLORS, fc->fcolor)) {
-+ if (rpmExpandNumeric("%{?_transaction_color}") != 0 && rpmtdFromArgi(&td, RPMTAG_FILECOLORS, fc->fcolor)) {
- rpm_color_t *fcolor;
- assert(rpmtdType(&td) == RPM_INT32_TYPE);
- /* XXX Make sure only primary (i.e. Elf32/Elf64) colors are added. */
diff --git a/nodefattr.diff b/nodefattr.diff
new file mode 100644
index 0000000..227668d
--- /dev/null
+++ b/nodefattr.diff
@@ -0,0 +1,15 @@
+Revert upstream patch that always uses %defattr(-,root,root).
+Upstream should probably use a macro instead.
+
+--- ./build/files.c.orig 2005-12-14 19:22:43.000000000 +0000
++++ ./build/files.c 2006-02-17 13:57:25.000000000 +0000
+@@ -2000,7 +2012,9 @@ static int processPackageFiles(Spec spec
+
+ nullAttrRec(&fl.cur_ar);
+ nullAttrRec(&fl.def_ar);
++#if 0
+ dupAttrRec(&root_ar, &fl.def_ar); /* XXX assume %defattr(-,root,root) */
++#endif
+
+ fl.defVerifyFlags = RPMVERIFY_ALL;
+ fl.nLangs = 0;
diff --git a/nolua.diff b/nolua.diff
new file mode 100644
index 0000000..2244136
--- /dev/null
+++ b/nolua.diff
@@ -0,0 +1,83 @@
+Allow build without lua support.
+
+--- ./build/parseScript.c.orig 2005-12-16 18:34:36.000000000 +0000
++++ ./build/parseScript.c 2005-12-16 18:36:08.000000000 +0000
+@@ -283,6 +283,7 @@ int parseScript(Spec spec, int parsePart
+ stripTrailingBlanksStringBuf(sb);
+ p = getStringBuf(sb);
+
++#ifdef WITH_LUA
+ if (!strcmp(progArgv[0], "")) {
+ rpmlua lua = NULL; /* Global state. */
+ if (rpmluaCheckScript(lua, p, partname) != RPMRC_OK) {
+@@ -291,7 +292,9 @@ int parseScript(Spec spec, int parsePart
+ }
+ (void) rpmlibNeedsFeature(pkg->header,
+ "BuiltinLuaScripts", "4.2.2-1");
+- } else if (progArgv[0][0] == '<') {
++ } else
++#endif
++ if (progArgv[0][0] == '<') {
+ rpmError(RPMERR_BADSPEC,
+ _("line %d: unsupported internal script: %s\n"),
+ spec->lineNum, progArgv[0]);
+--- ./lib/psm.c.orig 2005-12-14 18:59:10.000000000 +0000
++++ ./lib/psm.c 2006-02-24 11:46:54.000000000 +0000
+@@ -490,6 +490,7 @@ static pid_t psmWait(rpmpsm psm)
+ return psm->sq.reaped;
+ }
+
++#ifdef WITH_LUA
+ /**
+ * Run internal Lua script.
+ */
+@@ -572,6 +573,7 @@ static rpmRC runLuaScript(rpmpsm psm, He
+
+ return rc;
+ }
++#endif
+
+ /**
+ */
+@@ -637,11 +639,15 @@ static rpmRC runScript(rpmpsm psm, Heade
+ xx = hge(h, RPMTAG_ARCH, NULL, (void **) &a, NULL);
+
+ if (progArgv && strcmp(progArgv[0], "") == 0) {
++#ifdef WITH_LUA
+ rpmMessage(RPMMESS_DEBUG,
+ _("%s: %s(%s-%s-%s.%s) running scriptlet.\n"),
+ psm->stepName, tag2sln(psm->scriptTag), n, v, r, a);
+ return runLuaScript(psm, h, sln, progArgc, progArgv,
+ script, arg1, arg2);
++#else
++ return RPMRC_FAIL;
++#endif
+ }
+
+ psm->sq.reaper = 1;
+--- ./lib/rpmlibprov.c.orig 2004-03-16 21:58:29.000000000 +0000
++++ ./lib/rpmlibprov.c 2006-06-14 13:52:46.000000000 +0000
+@@ -51,9 +54,11 @@ static struct rpmlibProvides_s rpmlibPro
+ { "rpmlib(ConcurrentAccess)", "4.1-1",
+ ( RPMSENSE_EQUAL),
+ N_("package scriptlets may access the rpm database while installing.") },
++#ifdef WITH_LUA
+ { "rpmlib(BuiltinLuaScripts)", "4.2.2-1",
+ ( RPMSENSE_EQUAL),
+ N_("internal support for lua scripts.") },
++#endif
+ { NULL, NULL, 0, NULL }
+ };
+
+--- ./lib/rpmrc.c.orig 2005-01-17 18:46:23.000000000 +0000
++++ ./lib/rpmrc.c 2005-12-16 18:30:29.000000000 +0000
+@@ -1883,7 +1873,9 @@ int rpmReadConfigFiles(const char * file
+ }
+
+ /* Force Lua state initialization */
++#ifdef WITH_LUA
+ (void)rpmluaGetPrintBuffer(NULL);
++#endif
+
+ return 0;
+ }
diff --git a/nomagiccheck.diff b/nomagiccheck.diff
deleted file mode 100644
index 1ae6ccf..0000000
--- a/nomagiccheck.diff
+++ /dev/null
@@ -1,13 +0,0 @@
-Don't let rpm complain about a missing /etc/magic.mgc file
-
---- build/rpmfc.c.orig 2011-05-13 16:33:20.000000000 +0000
-+++ build/rpmfc.c 2011-05-13 16:33:55.000000000 +0000
-@@ -896,7 +896,7 @@ rpmRC rpmfcClassify(rpmfc fc, ARGV_t arg
- {
- ARGV_t fcav = NULL;
- int xx;
-- int msflags = MAGIC_CHECK | MAGIC_COMPRESS | MAGIC_NO_CHECK_TOKENS;
-+ int msflags = MAGIC_COMPRESS | MAGIC_NO_CHECK_TOKENS;
- magic_t ms = NULL;
- rpmRC rc = RPMRC_FAIL;
-
diff --git a/noneon.diff b/noneon.diff
new file mode 100644
index 0000000..b1ff9ca
--- /dev/null
+++ b/noneon.diff
@@ -0,0 +1,292 @@
+Allow build without the neon library. Resurrects old httpOpen
+code from rpm-4.1.1.
+Building without neon means no webdav file uploads, though.
+
+--- ./rpmio/rpmdav.c.orig 2005-12-16 18:04:29.000000000 +0000
++++ ./rpmio/rpmdav.c 2005-12-16 18:17:53.000000000 +0000
+@@ -9,6 +9,8 @@
+ #include
+ #endif
+
++#ifdef WITH_NEON
++
+ #include "ne_alloc.h"
+ #include "ne_auth.h"
+ #include "ne_basic.h"
+@@ -27,6 +29,8 @@
+ #include "ne_string.h"
+ #include "ne_utils.h"
+
++#endif /* WITH_NEON */
++
+ #include
+
+ #define _RPMDAV_INTERNAL
+@@ -61,6 +65,8 @@ _free(/*@only@*/ /*@null@*/ /*@out@*/ co
+ return NULL;
+ }
+
++#ifdef WITH_NEON
++
+ /* =============================================================== */
+ static int davFree(urlinfo u)
+ /*@globals internalState @*/
+@@ -1370,6 +1376,8 @@ fprintf(stderr, "*** davReadlink(%s) rc
+ }
+ #endif /* NOTYET */
+
++#endif /* WITH_NEON */
++
+ /* =============================================================== */
+ /*@unchecked@*/
+ int avmagicdir = 0x3607113;
+@@ -1494,6 +1502,8 @@ fprintf(stderr, "*** avOpendir(%s)\n", p
+ }
+ /*@=boundswrite@*/
+
++#ifdef WITH_NEON
++
+ /* =============================================================== */
+ /*@unchecked@*/
+ int davmagicdir = 0x8440291;
+@@ -1661,4 +1671,6 @@ fprintf(stderr, "*** davOpendir(%s)\n",
+ return (DIR *) avdir;
+ /*@=kepttrans@*/
+ }
++
++#endif /* WITH_NEON */
+ /*@=modfilesys@*/
+--- ./rpmio/rpmio.c.orig 2005-01-26 03:39:58.000000000 +0000
++++ ./rpmio/rpmio.c 2005-12-16 17:51:19.000000000 +0000
+@@ -371,7 +371,11 @@ static ssize_t fdRead(void * cookie, /*@
+ /*@-boundswrite@*/
+ /* HACK: flimsy wiring for davRead */
+ if (fd->req != NULL) {
++#ifdef WITH_NEON
+ rc = davRead(fd, buf, (count > fd->bytesRemain ? fd->bytesRemain : count));
++#else
++ rc = -1;
++#endif
+ /* XXX Chunked davRead EOF. */
+ if (rc == 0)
+ fd->bytesRemain = 0;
+@@ -404,9 +408,13 @@ static ssize_t fdWrite(void * cookie, co
+ fdstat_enter(fd, FDSTAT_WRITE);
+ /*@-boundsread@*/
+ /* HACK: flimsy wiring for davWrite */
+- if (fd->req != NULL)
++ if (fd->req != NULL) {
++#ifdef WITH_NEON
+ rc = davWrite(fd, buf, (count > fd->bytesRemain ? fd->bytesRemain : count));
+- else
++#else
++ return -1;
++#endif
++ } else
+ rc = write(fdno, buf, (count > fd->bytesRemain ? fd->bytesRemain : count));
+ /*@=boundsread@*/
+ fdstat_exit(fd, FDSTAT_WRITE, rc);
+@@ -455,9 +463,13 @@ static int fdClose( /*@only@*/ void * co
+ fdstat_enter(fd, FDSTAT_CLOSE);
+ /* HACK: flimsy wiring for davClose */
+ /*@-branchstate@*/
+- if (fd->req != NULL)
++ if (fd->req != NULL) {
++#ifdef WITH_NEON
+ rc = davClose(fd);
+- else
++#else
++ return -1;
++#endif
++ } else
+ rc = ((fdno >= 0) ? close(fdno) : -2);
+ /*@=branchstate@*/
+ fdstat_exit(fd, FDSTAT_CLOSE, rc);
+@@ -2029,6 +2041,56 @@ exit:
+ }
+ /*@=nullstate@*/
+
++#ifndef WITH_NEON
++/*@-nullstate@*/ /* FIX: u->{ctrl,data}->url undef after XurlLink. */
++static /*@null@*/ FD_t httpOpen(const char * url, /*@unused@*/ int flags,
++ /*@unused@*/ mode_t mode, /*@out@*/ urlinfo * uret)
++ /*@globals internalState @*/
++ /*@modifies *uret, internalState @*/
++{
++ urlinfo u = NULL;
++ FD_t fd = NULL;
++
++#if 0 /* XXX makeTempFile() heartburn */
++ assert(!(flags & O_RDWR));
++#endif
++ if (urlSplit(url, &u))
++ goto exit;
++
++ if (u->ctrl == NULL)
++ u->ctrl = fdNew("persist ctrl (httpOpen)");
++ if (u->ctrl->nrefs > 2 && u->data == NULL)
++ u->data = fdNew("persist data (httpOpen)");
++
++ if (u->ctrl->url == NULL)
++ fd = fdLink(u->ctrl, "grab ctrl (httpOpen persist ctrl)");
++ else if (u->data->url == NULL)
++ fd = fdLink(u->data, "grab ctrl (httpOpen persist data)");
++ else
++ fd = fdNew("grab ctrl (httpOpen)");
++
++ if (fd) {
++ fdSetIo(fd, ufdio);
++ fd->ftpFileDoneNeeded = 0;
++ fd->rd_timeoutsecs = httpTimeoutSecs;
++ fd->contentLength = fd->bytesRemain = -1;
++ fd->url = urlLink(u, "url (httpOpen)");
++ fd = fdLink(fd, "grab data (httpOpen)");
++ fd->urlType = URL_IS_HTTP;
++ }
++
++exit:
++/*@-boundswrite@*/
++ if (uret)
++ *uret = u;
++/*@=boundswrite@*/
++ /*@-refcounttrans@*/
++ return fd;
++ /*@=refcounttrans@*/
++}
++/*@=nullstate@*/
++#endif
++
+ static /*@null@*/ FD_t ufdOpen(const char * url, int flags, mode_t mode)
+ /*@globals h_errno, fileSystem, internalState @*/
+ /*@modifies fileSystem, internalState @*/
+@@ -2067,7 +2129,11 @@ fprintf(stderr, "*** ufdOpen(%s,0x%x,0%o
+ case URL_IS_HTTPS:
+ case URL_IS_HTTP:
+ case URL_IS_HKP:
++#ifdef WITH_NEON
+ fd = davOpen(url, flags, mode, &u);
++#else
++ fd = httpOpen(url, flags, mode, &u);
++#endif
+ if (fd == NULL || u == NULL)
+ break;
+
+@@ -2075,7 +2141,11 @@ fprintf(stderr, "*** ufdOpen(%s,0x%x,0%o
+ ? ((flags & O_APPEND) ? "PUT" :
+ ((flags & O_CREAT) ? "PUT" : "PUT"))
+ : "GET");
++#ifdef WITH_NEON
+ u->openError = davReq(fd, cmd, path);
++#else
++ u->openError = httpReq(fd, cmd, path);
++#endif
+ if (u->openError < 0) {
+ /* XXX make sure that we can exit through ufdClose */
+ fd = fdLink(fd, "error ctrl (ufdOpen HTTP)");
+--- ./rpmio/rpmrpc.c.orig 2005-12-16 15:01:26.000000000 +0000
++++ ./rpmio/rpmrpc.c 2006-02-13 18:55:39.000000000 +0000
+@@ -93,7 +93,9 @@ int Mkdir (const char * path, mode_t mod
+ /*@notreached@*/ break;
+ case URL_IS_HTTPS:
+ case URL_IS_HTTP:
++#ifdef WITH_NEON
+ return davMkdir(path, mode);
++#endif
+ /*@notreached@*/ break;
+ case URL_IS_PATH:
+ path = lpath;
+@@ -151,7 +153,9 @@ int Rmdir (const char * path)
+ /*@notreached@*/ break;
+ case URL_IS_HTTPS:
+ case URL_IS_HTTP:
++#ifdef WITH_NEON
+ return davRmdir(path);
++#endif
+ /*@notreached@*/ break;
+ case URL_IS_PATH:
+ path = lpath;
+@@ -182,7 +186,9 @@ int Rename (const char * oldpath, const
+ switch (oldut) {
+ case URL_IS_HTTPS:
+ case URL_IS_HTTP:
++#ifdef WITH_NEON
+ return davRename(oldpath, newpath);
++#endif
+ /*@notreached@*/ break;
+ case URL_IS_FTP: /* XXX WRONG WRONG WRONG */
+ case URL_IS_PATH:
+@@ -280,7 +286,9 @@ int Unlink(const char * path) {
+ /*@notreached@*/ break;
+ case URL_IS_HTTPS:
+ case URL_IS_HTTP:
++#ifdef WITH_NEON
+ return davUnlink(path);
++#endif
+ /*@notreached@*/ break;
+ case URL_IS_PATH:
+ path = lpath;
+@@ -1282,7 +1290,9 @@ fprintf(stderr, "*** Stat(%s,%p)\n", pat
+ /*@notreached@*/ break;
+ case URL_IS_HTTPS:
+ case URL_IS_HTTP:
++#ifdef WITH_NEON
+ return davStat(path, st);
++#endif
+ /*@notreached@*/ break;
+ case URL_IS_PATH:
+ path = lpath;
+@@ -1311,7 +1321,9 @@ fprintf(stderr, "*** Lstat(%s,%p)\n", pa
+ /*@notreached@*/ break;
+ case URL_IS_HTTPS:
+ case URL_IS_HTTP:
++#ifdef WITH_NEON
+ return davLstat(path, st);
++#endif
+ /*@notreached@*/ break;
+ case URL_IS_PATH:
+ path = lpath;
+@@ -1489,7 +1502,9 @@ fprintf(stderr, "*** Opendir(%s)\n", pat
+ /*@notreached@*/ break;
+ case URL_IS_HTTPS:
+ case URL_IS_HTTP:
++#ifdef WITH_NEON
+ return davOpendir(path);
++#endif
+ /*@notreached@*/ break;
+ case URL_IS_PATH:
+ path = lpath;
+@@ -1515,8 +1530,10 @@ fprintf(stderr, "*** Readdir(%p)\n", (vo
+ return NULL;
+ if (ISAVMAGIC(dir))
+ return avReaddir(dir);
++#ifdef WITH_NEON
+ if (ISDAVMAGIC(dir))
+ return davReaddir(dir);
++#endif
+ return readdir(dir);
+ }
+
+@@ -1528,8 +1545,10 @@ fprintf(stderr, "*** Closedir(%p)\n", (v
+ return 0;
+ if (ISAVMAGIC(dir))
+ return avClosedir(dir);
++#ifdef WITH_NEON
+ if (ISDAVMAGIC(dir))
+ return davClosedir(dir);
++#endif
+ return closedir(dir);
+ }
+
+--- ./rpmio/url.c.orig 2005-12-16 15:24:25.000000000 +0000
++++ ./rpmio/url.c 2005-12-16 17:08:21.000000000 +0000
+@@ -147,8 +147,10 @@ URLDBGREFS(0, (stderr, "--> url %p -- %d
+ /*@=usereleased@*/
+ }
+ if (u->sess != NULL) {
++#ifdef WITH_NEON
+ /* HACK: neon include has prototype. */
+ ne_session_destroy(u->sess);
++#endif
+ u->sess = NULL;
+ }
+ u->buf = _free(u->buf);
diff --git a/noprereqdeprec.diff b/noprereqdeprec.diff
deleted file mode 100644
index 5d38711..0000000
--- a/noprereqdeprec.diff
+++ /dev/null
@@ -1,22 +0,0 @@
-Not deprecated for SUSE builds.
-
---- ./build/parsePreamble.c.orig 2011-05-11 15:59:08.000000000 +0000
-+++ ./build/parsePreamble.c 2011-05-11 16:35:47.000000000 +0000
-@@ -891,7 +891,7 @@ static struct PreambleRec_s const preamb
- {RPMTAG_ICON, 0, 0, LEN_AND_STR("icon")},
- {RPMTAG_PROVIDEFLAGS, 0, 0, LEN_AND_STR("provides")},
- {RPMTAG_REQUIREFLAGS, 2, 0, LEN_AND_STR("requires")},
-- {RPMTAG_PREREQ, 2, 1, LEN_AND_STR("prereq")},
-+ {RPMTAG_PREREQ, 2, 0, LEN_AND_STR("prereq")},
- {RPMTAG_CONFLICTFLAGS, 0, 0, LEN_AND_STR("conflicts")},
- {RPMTAG_OBSOLETEFLAGS, 0, 0, LEN_AND_STR("obsoletes")},
- {RPMTAG_PREFIXES, 0, 0, LEN_AND_STR("prefixes")},
-@@ -900,7 +900,7 @@ static struct PreambleRec_s const preamb
- {RPMTAG_BUILDARCHS, 0, 0, LEN_AND_STR("buildarchitectures")},
- {RPMTAG_BUILDARCHS, 0, 0, LEN_AND_STR("buildarch")},
- {RPMTAG_BUILDCONFLICTS, 0, 0, LEN_AND_STR("buildconflicts")},
-- {RPMTAG_BUILDPREREQ, 0, 1, LEN_AND_STR("buildprereq")},
-+ {RPMTAG_BUILDPREREQ, 0, 0, LEN_AND_STR("buildprereq")},
- {RPMTAG_BUILDREQUIRES, 0, 0, LEN_AND_STR("buildrequires")},
- {RPMTAG_AUTOREQPROV, 0, 0, LEN_AND_STR("autoreqprov")},
- {RPMTAG_AUTOREQ, 0, 0, LEN_AND_STR("autoreq")},
diff --git a/nostdoutclose.diff b/nostdoutclose.diff
new file mode 100644
index 0000000..3810ecf
--- /dev/null
+++ b/nostdoutclose.diff
@@ -0,0 +1,13 @@
+Do not close stdout for scriptlets.
+
+--- ./lib/psm.c.orig 2005-12-14 18:59:10.000000000 +0000
++++ ./lib/psm.c 2006-02-24 11:46:54.000000000 +0000
+@@ -829,7 +837,7 @@ static rpmRC runScript(rpmpsm psm, Heade
+ xx = Fclose (out);
+ if (sfdno > STDERR_FILENO)
+ xx = Fclose (scriptFd);
+- else {
++ else if (Fileno(out) > STDERR_FILENO) {
+ /*@-usereleased@*/
+ xx = Fclose(out);
+ /*@=usereleased@*/
diff --git a/obeynodbsync.diff b/obeynodbsync.diff
new file mode 100644
index 0000000..abd73dd
--- /dev/null
+++ b/obeynodbsync.diff
@@ -0,0 +1,14 @@
+Make rpmdbSync obey the no_dbsync flag
+
+--- ./rpmdb/rpmdb.c.orig 2005-02-16 03:18:19.000000000 +0000
++++ ./rpmdb/rpmdb.c 2006-02-21 20:37:44.000000000 +0000
+ /*@=incondefs@*/
+@@ -906,6 +937,8 @@ int rpmdbSync(rpmdb db)
+ int xx;
+ if (db->_dbi[dbix] == NULL)
+ continue;
++ if (db->_dbi[dbix]->dbi_no_dbsync)
++ continue;
+ xx = dbiSync(db->_dbi[dbix], 0);
+ if (xx && rc == 0) rc = xx;
+ }
diff --git a/openallbuttemp.diff b/openallbuttemp.diff
new file mode 100644
index 0000000..156e274
--- /dev/null
+++ b/openallbuttemp.diff
@@ -0,0 +1,55 @@
+Open all rpm databases before doing chroot. [#43266], [#44584]
+rh#103852
+
+Already in rpm-4.4.7, configurable with a macro (for whatever reason).
+
+--- ./lib/transaction.c.orig 2005-12-14 21:15:40.000000000 +0000
++++ ./lib/transaction.c 2006-01-27 20:05:40.000000000 +0000
+@@ -1677,8 +1859,10 @@ rpmMessage(RPMMESS_DEBUG, _("computing %
+ const char * rootDir = rpmtsRootDir(ts);
+ xx = chdir("/");
+ /*@-superuser -noeffect @*/
+- if (rootDir != NULL && strcmp(rootDir, "/") && *rootDir == '/')
++ if (rootDir != NULL && strcmp(rootDir, "/") && *rootDir == '/') {
++ rpmdbOpenAllButTemporary(ts->rdb);
+ xx = chroot(rootDir);
++ }
+ /*@=superuser =noeffect @*/
+ (void) rpmtsSetChrootDone(ts, 1);
+ }
+--- ./rpmdb/rpmdb.c.orig 2005-02-16 03:18:19.000000000 +0000
++++ ./rpmdb/rpmdb.c 2006-02-21 20:37:44.000000000 +0000
+@@ -811,6 +811,33 @@ int rpmdbOpenAll(rpmdb db)
+ return rc;
+ }
+
++int rpmdbOpenAllButTemporary(rpmdb db)
++{
++ int dbix;
++ int rc = 0;
++
++ if (db == NULL) return -2;
++
++ if (dbiTags != NULL)
++ for (dbix = 0; dbix < dbiTagsMax; dbix++) {
++ if (db->_dbi[dbix] != NULL)
++ continue;
++ /* Filter out temporary databases */
++ switch ((dbiTags[dbix])) {
++ case RPMDBI_AVAILABLE:
++ case RPMDBI_ADDED:
++ case RPMDBI_REMOVED:
++ case RPMDBI_DEPENDS:
++ continue;
++ /*@notreached@*/ /*@switchbreak@*/ break;
++ default:
++ /*@switchbreak@*/ break;
++ }
++ (void) dbiOpen(db, dbiTags[dbix], db->db_flags);
++ }
++ return rc;
++}
++
+ int rpmdbCloseDBI(rpmdb db, int rpmtag)
+ {
+ int dbix;
diff --git a/patchrpms.diff b/patchrpms.diff
new file mode 100644
index 0000000..050189d
--- /dev/null
+++ b/patchrpms.diff
@@ -0,0 +1,743 @@
+Add support for patch rpms. Maybe not needed that much any more,
+as delta rpms are more efficient and do not need so much evil
+rpm patchery.
+rh#103205
+
+Index: lib/depends.c
+===================================================================
+--- lib/depends.c.orig
++++ lib/depends.c
+@@ -159,6 +159,7 @@ int rpmtsAddInstallElement(rpmts ts, Hea
+ const char * os;
+ rpmds oldChk, newChk;
+ rpmds obsoletes;
++ rpmds patches;
+ alKey pkgKey; /* addedPackages key */
+ int xx;
+ int ec = 0;
+@@ -387,6 +388,40 @@ addheader:
+ }
+ obsoletes = rpmdsFree(obsoletes);
+
++ patches = rpmdsLink(rpmteDS(p, RPMTAG_PATCHESNAME), "Patches");
++ patches = rpmdsInit(patches);
++ if (patches != NULL)
++ while (rpmdsNext(patches) >= 0) {
++ const char * Name;
++
++ if ((Name = rpmdsN(patches)) == NULL)
++ continue; /* XXX can't happen */
++
++ /* Ignore colored patches not in our rainbow. */
++ dscolor = rpmdsColor(patches);
++ if (tscolor && dscolor && !(tscolor & dscolor))
++ continue;
++
++ mi = rpmtsInitIterator(ts, RPMTAG_NAME, Name, 0);
++
++ xx = rpmdbPruneIterator(mi,
++ ts->removedPackages, ts->numRemovedPackages, 1);
++
++ while((oh = rpmdbNextIterator(mi)) != NULL) {
++ /* Ignore colored packages not in our rainbow. */
++ ohcolor = hGetColor(oh);
++ if (tscolor && hcolor && ohcolor && !(hcolor & ohcolor))
++ /*@innercontinue@*/ continue;
++ if (rpmdsEVR(patches) == NULL
++ || rpmdsNVRMatchesDep(oh, patches, _rpmds_nopromote)) {
++ if (rpmVersionCompare(h, oh))
++ xx = removePackage(ts, oh, rpmdbGetIteratorOffset(mi), pkgKey);
++ }
++ }
++ mi = rpmdbFreeIterator(mi);
++ }
++ patches = rpmdsFree(patches);
++
+ ec = 0;
+
+ exit:
+@@ -644,6 +679,57 @@ exit:
+ return rc;
+ }
+
++static int checkPatchDeps(rpmts ts, rpmte p, int reportprobs)
++{
++ const char * Name;
++ Header h;
++ rpmds patches;
++ rpmds this;
++ rpmdbMatchIterator mi;
++
++ patches = rpmdsInit(rpmteDS(p, RPMTAG_PATCHESNAME));
++ if (!patches)
++ return 0;
++ this = rpmteDS(p, RPMTAG_NAME);
++
++ mi = rpmtsInitIterator(ts, RPMTAG_NAME, rpmdsN(this), 0);
++ while ((h = rpmdbNextIterator(mi)) != NULL) {
++ if (rpmdsNVRMatchesDep(h, this, _rpmds_nopromote)) {
++ rpmdsNotify(this, _("(patch refresh)"), 0);
++ p->hPatched = headerLink(h);
++ p->isPatchRefresh = 1;
++ mi = rpmdbFreeIterator(mi);
++ return 0;
++ }
++ }
++ mi = rpmdbFreeIterator(mi);
++
++ while (rpmdsNext(patches) >= 0) {
++ if ((Name = rpmdsN(patches)) == NULL)
++ return 1; /* XXX can't happen */
++ mi = rpmtsInitIterator(ts, RPMTAG_NAME, Name, 0);
++ while ((h = rpmdbNextIterator(mi)) != NULL) {
++ if (rpmdsNVRMatchesDep(h, patches, _rpmds_nopromote)) {
++ rpmdsNotify(patches, _("(db package)"), 0);
++ p->hPatched = headerLink(h);
++ p->isPatchRefresh = 0;
++ mi = rpmdbFreeIterator(mi);
++ return 0;
++ }
++ }
++ mi = rpmdbFreeIterator(mi);
++ }
++
++ rpmdsNotify(patches, NULL, 1);
++ if (reportprobs) {
++ patches = rpmdsInit(patches);
++ rpmdsNext(patches);
++ rpmdsProblem(ts->probs, rpmteNEVR(p), patches, NULL, 1);
++ }
++ return 0;
++}
++
++
+ /**
+ * Check added requires/conflicts against against installed+added packages.
+ * @param ts transaction set
+@@ -1727,6 +1813,7 @@ int rpmtsCheck(rpmts ts)
+ rpmteDS(p, RPMTAG_CONFLICTNAME),
+ NULL,
+ tscolor, 1);
++ rc |= checkPatchDeps(ts, p, 1);
+ if (rc)
+ goto exit;
+
+@@ -1824,3 +1911,22 @@ exit:
+ /*@=branchstate@*/
+ return rc;
+ }
++
++void rpmtsPatchCheck(rpmts ts)
++{
++ int closeatexit = 0;
++ rpmtsi pi = NULL; rpmte p;
++
++ if (rpmtsGetRdb(ts) == NULL && ts->dbmode != -1) {
++ if ((rpmtsOpenDB(ts, ts->dbmode)) != 0)
++ return;
++ closeatexit = 1;
++ }
++ pi = rpmtsiInit(ts);
++ while ((p = rpmtsiNext(pi, TR_ADDED)) != NULL)
++ if (p->key) /* key is filename for install, zero for verify */
++ (void)checkPatchDeps(ts, p, 0);
++ pi = rpmtsiFree(pi);
++ if (closeatexit)
++ (void)rpmtsCloseDB(ts);
++}
+Index: lib/formats.c
+===================================================================
+--- lib/formats.c.orig
++++ lib/formats.c
+@@ -232,6 +232,8 @@ static /*@only@*/ char * fflagsFormat(in
+ strcat(buf, "l");
+ if (anint & RPMFILE_README)
+ strcat(buf, "r");
++ if (anint & RPMFILE_UNPATCHED)
++ strcat(buf, "u");
+ /*@=boundswrite@*/
+
+ val = xmalloc(5 + padding);
+Index: lib/fsm.c
+===================================================================
+--- lib/fsm.c.orig
++++ lib/fsm.c
+@@ -707,7 +707,7 @@ assert(rpmteType(fi->te) == TR_ADDED);
+ break;
+
+ case FA_BACKUP:
+- if (!(fsm->fflags & RPMFILE_GHOST)) /* XXX Don't if %ghost file. */
++ if (!(fsm->fflags & (RPMFILE_GHOST|RPMFILE_UNPATCHED))) /* XXX Don't if %ghost file. */
+ switch (rpmteType(fi->te)) {
+ case TR_ADDED:
+ fsm->osuffix = SUFFIX_RPMORIG;
+@@ -720,13 +720,13 @@ assert(rpmteType(fi->te) == TR_ADDED);
+
+ case FA_ALTNAME:
+ assert(rpmteType(fi->te) == TR_ADDED);
+- if (!(fsm->fflags & RPMFILE_GHOST)) /* XXX Don't if %ghost file. */
++ if (!(fsm->fflags & (RPMFILE_GHOST|RPMFILE_UNPATCHED))) /* XXX Don't if %ghost file. */
+ fsm->nsuffix = SUFFIX_RPMNEW;
+ break;
+
+ case FA_SAVE:
+ assert(rpmteType(fi->te) == TR_ADDED);
+- if (!(fsm->fflags & RPMFILE_GHOST)) /* XXX Don't if %ghost file. */
++ if (!(fsm->fflags & (RPMFILE_GHOST|RPMFILE_UNPATCHED))) /* XXX Don't if %ghost file. */
+ fsm->osuffix = SUFFIX_RPMSAVE;
+ break;
+ case FA_ERASE:
+@@ -1740,7 +1740,7 @@ int fsmStage(FSM_t fsm, fileStage stage)
+ }
+
+ if (fsm->goal == FSM_PKGBUILD) {
+- if (fsm->fflags & RPMFILE_GHOST) /* XXX Don't if %ghost file. */
++ if (fsm->fflags & (RPMFILE_GHOST|RPMFILE_UNPATCHED)) /* XXX Don't if %ghost file. */
+ break;
+ if (!S_ISDIR(st->st_mode) && st->st_nlink > 1) {
+ struct hardLink_s * li, * prev;
+Index: lib/poptQV.c
+===================================================================
+--- lib/poptQV.c.orig
++++ lib/poptQV.c
+@@ -171,6 +171,7 @@ static void queryArgCallback(poptContext
+ case 'l': qva->qva_flags |= QUERY_FOR_LIST; break;
+ case 's': qva->qva_flags |= QUERY_FOR_STATE | QUERY_FOR_LIST;
+ break;
++ case 'P': qva->qva_flags |= QUERY_FOR_PATCHES; break;
+ case POPT_DUMP: qva->qva_flags |= QUERY_FOR_DUMPFILES | QUERY_FOR_LIST;
+ break;
+
+@@ -278,6 +279,8 @@ struct poptOption rpmQueryPoptTable[] =
+ N_("skip %%readme files"), NULL },
+ #endif
+
++ { "patches", 'P', 0, 0, 'P',
++ N_("list patches or patched files "), NULL },
+ { "qf", '\0', POPT_ARG_STRING | POPT_ARGFLAG_DOC_HIDDEN, 0,
+ POPT_QUERYFORMAT, NULL, NULL },
+ { "queryformat", '\0', POPT_ARG_STRING, 0, POPT_QUERYFORMAT,
+Index: lib/query.c
+===================================================================
+--- lib/query.c.orig
++++ lib/query.c
+@@ -225,6 +225,10 @@ int showQueryPackage(QVA_t qva, rpmts ts
+ if ((qva->qva_fflags & RPMFILE_GHOST) && (fflags & RPMFILE_GHOST))
+ continue;
+
++ /* If querying patches, skip unpatched files. */
++ if ((qva->qva_flags & QUERY_FOR_PATCHES) && (fflags & RPMFILE_UNPATCHED))
++ continue;
++
+ /*@-boundswrite@*/
+ if (!rpmIsVerbose() && prefix)
+ te = stpcpy(te, prefix);
+@@ -362,6 +366,21 @@ void rpmDisplayQueryTags(FILE * fp)
+ }
+ }
+
++static int isPatch(Header h)
++{
++ int i, requiresCount = 0;
++ const char ** requires;
++
++ if (!headerGetEntry(h, RPMTAG_REQUIRENAME, NULL, (void **) &requires, &requiresCount))
++ return 0;
++ for (i = 0; i < requiresCount; i++)
++ if (!strcmp("rpmlib(PatchRPMs)", requires[i]))
++ break;
++ if (requiresCount)
++ free(requires);
++ return i < requiresCount;
++}
++
+ static int rpmgiShowMatches(QVA_t qva, rpmts ts)
+ /*@globals rpmGlobalMacroContext, h_errno, internalState @*/
+ /*@modifies qva, rpmGlobalMacroContext, h_errno, internalState @*/
+@@ -376,6 +395,8 @@ static int rpmgiShowMatches(QVA_t qva, r
+ h = rpmgiHeader(gi);
+ if (h == NULL) /* XXX perhaps stricter break instead? */
+ continue;
++ if ((qva->qva_flags & QUERY_FOR_PATCHES) != 0 && !isPatch(h))
++ continue;
+ if ((rc = qva->qva_showPackage(qva, ts, h)) != 0)
+ ec = rc;
+ if (qva->qva_source == RPMQV_DBOFFSET)
+@@ -391,6 +412,8 @@ int rpmcliShowMatches(QVA_t qva, rpmts t
+
+ while ((h = rpmdbNextIterator(qva->qva_mi)) != NULL) {
+ int rc;
++ if ((qva->qva_flags & QUERY_FOR_PATCHES) != 0 && !isPatch(h))
++ continue;
+ if ((rc = qva->qva_showPackage(qva, ts, h)) != 0)
+ ec = rc;
+ if (qva->qva_source == RPMQV_DBOFFSET)
+@@ -685,7 +708,15 @@ int rpmcliArgIter(rpmts ts, QVA_t qva, A
+
+ switch (qva->qva_source) {
+ case RPMQV_ALL:
+- qva->qva_gi = rpmgiNew(ts, RPMDBI_PACKAGES, NULL, 0);
++ if ((!argv || !*argv) && (qva->qva_flags & QUERY_FOR_PATCHES) != 0) {
++ qva->qva_gi = rpmgiNew(ts, RPMTAG_REQUIRENAME, "rpmlib(PatchRPMs)", 0);
++ if (qva->qva_gi->mi == NULL) {
++ rpmError(RPMERR_QUERYINFO, _("no patch-rpm installed\n"));
++ break;
++ }
++ } else {
++ qva->qva_gi = rpmgiNew(ts, RPMDBI_PACKAGES, NULL, 0);
++ }
+ qva->qva_rc = rpmgiSetArgs(qva->qva_gi, argv, ftsOpts, RPMGI_NONE);
+
+ if (qva->qva_gi != NULL && (qva->qva_gi->flags & RPMGI_TSADD)) /* Load the ts with headers. */
+Index: lib/rpmcli.h
+===================================================================
+--- lib/rpmcli.h.orig
++++ lib/rpmcli.h
+@@ -165,7 +165,7 @@ typedef enum rpmQueryFlags_e {
+ QUERY_SCRIPT = (1 << 18), /*!< verify: from --noscripts */
+ QUERY_DIGEST = (1 << 19), /*!< verify: from --nodigest */
+ QUERY_SIGNATURE = (1 << 20), /*!< verify: from --nosignature */
+- QUERY_PATCHES = (1 << 21), /*!< verify: from --nopatches */
++ QUERY_FOR_PATCHES = (1 << 21), /*!< verify: from --patches */
+ QUERY_HDRCHK = (1 << 22), /*!< verify: from --nohdrchk */
+ /*@=enummemuse@*/
+ QUERY_FOR_LIST = (1 << 23), /*!< query: from --list */
+Index: lib/rpmds.c
+===================================================================
+--- lib/rpmds.c.orig
++++ lib/rpmds.c
+@@ -87,6 +87,10 @@ fprintf(stderr, "*** ds %p\t%s[%d]\n", d
+ tagEVR = RPMTAG_TRIGGERVERSION;
+ tagF = RPMTAG_TRIGGERFLAGS;
+ } else
++ if (ds->tagN == RPMTAG_PATCHESNAME) {
++ tagEVR = RPMTAG_PATCHESVERSION;
++ tagF = RPMTAG_PATCHESFLAGS;
++ } else
+ return NULL;
+
+ /*@-branchstate@*/
+@@ -325,6 +329,11 @@ rpmds rpmdsNew(Header h, rpmTag tagN, in
+ tagEVR = RPMTAG_ENHANCESVERSION;
+ tagF = RPMTAG_ENHANCESFLAGS;
+ } else
++ if (tagN == RPMTAG_PATCHESNAME) {
++ Type = "patches";
++ tagEVR = RPMTAG_PATCHESVERSION;
++ tagF = RPMTAG_PATCHESFLAGS;
++ } else
+ goto exit;
+
+ /*@-branchstate@*/
+@@ -1127,14 +1136,28 @@ void rpmdsProblem(rpmps ps, const char *
+ if (DNEVR == NULL) DNEVR = "? ?N? ?OP? ?EVR?";
+ /*@=branchstate@*/
+
+- rpmMessage(RPMMESS_DEBUG, _("package %s has unsatisfied %s: %s\n"),
+- pkgNEVR, ds->Type, DNEVR+2);
+-
+ switch ((unsigned)DNEVR[0]) {
+ case 'C': type = RPMPROB_CONFLICT; break;
+ default:
+ case 'R': type = RPMPROB_REQUIRES; break;
+ }
++ if (DNEVR[0] == 'p') {
++ const char *d;
++ char *dn;
++ rpmds pds = rpmdsInit(ds);
++ dn = xstrdup("p ");
++ while (rpmdsNext(pds) >= 0) {
++ d = rpmdsDNEVR(ds) + 2;
++ dn = xrealloc(dn, strlen(dn) + strlen(d) + 4);
++ if (dn[2])
++ strcat(dn, " | ");
++ strcat(dn, d);
++ }
++ DNEVR = (const char *)dn;
++ }
++
++ rpmMessage(RPMMESS_DEBUG, _("package %s has unsatisfied %s: %s\n"),
++ pkgNEVR, ds->Type, DNEVR+2);
+
+ key = (suggestedKeys ? suggestedKeys[0] : NULL);
+ rpmpsAppend(ps, type, pkgNEVR, key, NULL, NULL, DNEVR, adding);
+Index: lib/rpminstall.c
+===================================================================
+--- lib/rpminstall.c.orig
++++ lib/rpminstall.c
+@@ -692,6 +692,11 @@ maybe_manifest:
+ /*@=branchstate@*/
+ }
+ ps = rpmpsFree(ps);
++ } else if (eiu->numRPMS) {
++ /* needed in rpmtsOrder */
++ rpmalMakeIndex(ts->addedPackages);
++ /* need patch references */
++ rpmtsPatchCheck(ts);
+ }
+
+ if (eiu->numRPMS && !(ia->installInterfaceFlags & INSTALL_NOORDER)) {
+@@ -797,7 +802,7 @@ int rpmErase(rpmts ts, struct rpmInstall
+ { int notifyFlags;
+ notifyFlags = ia->eraseInterfaceFlags | (rpmIsVerbose() ? INSTALL_LABEL : 0 );
+ xx = rpmtsSetNotifyCallback(ts,
+- rpmShowProgress, (void *) ((long)notifyFlags)
++ rpmShowProgress, (void *) ((long)notifyFlags))
+ }
+ #endif
+
+Index: lib/rpmlibprov.c
+===================================================================
+--- lib/rpmlibprov.c.orig
++++ lib/rpmlibprov.c
+@@ -33,6 +33,9 @@ static struct rpmlibProvides_s rpmlibPro
+ { "rpmlib(PayloadIsBzip2)", "3.0.5-1",
+ (RPMSENSE_RPMLIB|RPMSENSE_EQUAL),
+ N_("package payload can be compressed using bzip2.") },
++ { "rpmlib(PatchRPMs)", "3.0.6-1",
++ (RPMSENSE_RPMLIB|RPMSENSE_EQUAL),
++ N_("understand rpms that replace a subset of files.") },
+ { "rpmlib(PayloadFilesHavePrefix)", "4.0-1",
+ (RPMSENSE_RPMLIB|RPMSENSE_EQUAL),
+ N_("package payload file(s) have \"./\" prefix.") },
+Index: lib/rpmte.c
+===================================================================
+--- lib/rpmte.c.orig
++++ lib/rpmte.c
+@@ -64,6 +64,7 @@ static void delTE(rpmte p)
+ p->NEVRA = _free(p->NEVRA);
+
+ p->h = headerFree(p->h);
++ p->hPatched = headerFree(p->hPatched);
+
+ /*@-boundswrite@*/
+ memset(p, 0, sizeof(*p)); /* XXX trash and burn */
+@@ -183,6 +184,9 @@ static void addTE(rpmts ts, rpmte p, Hea
+ p->requires = rpmdsNew(h, RPMTAG_REQUIRENAME, scareMem);
+ p->conflicts = rpmdsNew(h, RPMTAG_CONFLICTNAME, scareMem);
+ p->obsoletes = rpmdsNew(h, RPMTAG_OBSOLETENAME, scareMem);
++ p->patches = rpmdsNew(h, RPMTAG_PATCHESNAME, scareMem | 2);
++ p->hPatched = NULL;
++ p->isPatchRefresh = 0;
+
+ savep = rpmtsSetRelocateElement(ts, p);
+ p->fi = rpmfiNew(ts, h, RPMTAG_BASENAMES, scareMem);
+@@ -520,6 +524,9 @@ rpmds rpmteDS(rpmte te, rpmTag tag)
+ if (tag == RPMTAG_OBSOLETENAME)
+ return te->obsoletes;
+ else
++ if (tag == RPMTAG_PATCHESNAME)
++ return te->patches;
++ else
+ return NULL;
+ /*@=compdef =refcounttrans =retalias =retexpose =usereleased @*/
+ }
+Index: lib/rpmte.h
+===================================================================
+--- lib/rpmte.h.orig
++++ lib/rpmte.h
+@@ -115,6 +115,9 @@ struct rpmte_s {
+ int autorelocatex; /*!< (TR_ADDED) Auto relocation entry index. */
+ /*@refcounted@*/ /*@null@*/
+ FD_t fd; /*!< (TR_ADDED) Payload file descriptor. */
++ rpmds patches; /*!< Patches: dependencies. */
++ Header hPatched; /*!< (TR_ADDED) Header of package we patch */
++ int isPatchRefresh; /*!< (TR_ADDED) is a patch refresh */
+
+ /*@-fielduse@*/ /* LCL: confused by union? */
+ union {
+Index: lib/transaction.c
+===================================================================
+--- lib/transaction.c.orig
++++ lib/transaction.c
+@@ -198,6 +198,11 @@ static int handleInstInstalledFiles(cons
+ int rConflicts;
+
+ rConflicts = reportConflicts;
++ if (rConflicts && p->hPatched && p->isPatchRefresh) {
++ /* If same package (patch refresh) turn off conflicts */
++ /* Handling of unpatched files not worth the trouble */
++ rConflicts = 0;
++ }
+ /* Resolve file conflicts to prefer Elf64 (if not forced). */
+ if (tscolor != 0 && FColor != 0 && FColor != oFColor)
+ {
+@@ -972,6 +977,176 @@ rpmfi rpmtsiFi(const rpmtsi tsi)
+ /*@=compdef =refcounttrans =usereleased @*/
+ }
+
++static int_32 *dupint32(int_32 *old, int cnt)
++{
++ int i;
++ int_32 *new = xmalloc(cnt * sizeof(int_32));
++ for (i = 0; i < cnt; i++)
++ new[i] = old[i];
++ return new;
++}
++
++static void patchUnpatchedFiles(Header oldh, Header h, int isRefresh)
++{
++ int fileCount, oldfileCount, i, j, oldidx, oldidxj;
++ const char ** baseNames, ** dirNames;
++ int_32 * dirIndexes;
++ int_32 * fileMtimes;
++ int_32 * fileSizes;
++ int_32 * fileFlags;
++ char ** fileMd5s;
++ const char ** oldbaseNames, ** olddirNames;
++ int_32 * olddirIndexes;
++ int_32 * oldfileMtimes;
++ int_32 * oldfileSizes;
++ int_32 * oldfileFlags;
++ char ** oldfileMd5s;
++ const char * name, * version, * release;
++ char * evr;
++ int_32 sense;
++ int_32 *epochp;
++ int save = 0;
++ char epoch[20];
++ const char ** oldpatches, **oldpatchesEVR = NULL;
++ int_32 * oldpatchesFlags;
++ int oldpatchesCount;
++
++ if (!oldh) {
++ headerRemoveEntry(h, RPMTAG_PATCHESNAME);
++ headerRemoveEntry(h, RPMTAG_PATCHESFLAGS);
++ headerRemoveEntry(h, RPMTAG_PATCHESVERSION);
++#if 1
++ name = "(none)";
++ sense = 0;
++ evr = "";
++ headerAddEntry(h, RPMTAG_PATCHESNAME, RPM_STRING_ARRAY_TYPE, &name, 1);
++ headerAddEntry(h, RPMTAG_PATCHESFLAGS, RPM_INT32_TYPE, &sense, 1);
++ headerAddEntry(h, RPMTAG_PATCHESVERSION, RPM_STRING_ARRAY_TYPE, &evr, 1);
++#endif
++ return;
++ }
++ if (!headerGetEntry(h, RPMTAG_BASENAMES, NULL,
++ (void **) &baseNames, &fileCount))
++ return;
++ headerGetEntry(h, RPMTAG_DIRNAMES, NULL,
++ (void **) &dirNames, NULL);
++ headerGetEntry(h, RPMTAG_DIRINDEXES, NULL,
++ (void **) &dirIndexes, NULL);
++ headerGetEntry(h, RPMTAG_FILESIZES, NULL,
++ (void **) &fileSizes, NULL);
++ headerGetEntry(h, RPMTAG_FILEMD5S, NULL,
++ (void **) &fileMd5s, NULL);
++ headerGetEntry(h, RPMTAG_FILEMTIMES, NULL,
++ (void **) &fileMtimes, NULL);
++ headerGetEntry(h, RPMTAG_FILEFLAGS, NULL,
++ (void **) &fileFlags, NULL);
++
++ if (!headerGetEntry(oldh, RPMTAG_BASENAMES, NULL,
++ (void **) &oldbaseNames, &oldfileCount))
++ return;
++ headerGetEntry(oldh, RPMTAG_DIRNAMES, NULL,
++ (void **) &olddirNames, NULL);
++ headerGetEntry(oldh, RPMTAG_DIRINDEXES, NULL,
++ (void **) &olddirIndexes, NULL);
++ headerGetEntry(oldh, RPMTAG_FILESIZES, NULL,
++ (void **) &oldfileSizes, NULL);
++ headerGetEntry(oldh, RPMTAG_FILEMD5S, NULL,
++ (void **) &oldfileMd5s, NULL);
++ headerGetEntry(oldh, RPMTAG_FILEMTIMES, NULL,
++ (void **) &oldfileMtimes, NULL);
++ headerGetEntry(oldh, RPMTAG_FILEFLAGS, NULL,
++ (void **) &oldfileFlags, NULL);
++
++ oldidx = -1;
++ oldidxj = 0;
++ for (i = 0; i < fileCount; i++) {
++ if (!(fileFlags[i] & RPMFILE_UNPATCHED))
++ continue;
++ if (dirIndexes[i] != oldidx) {
++ for (j = 0; j < oldfileCount; j++)
++ if (strcmp(dirNames[dirIndexes[i]], olddirNames[olddirIndexes[j]]) == 0)
++ break;
++ if (j == oldfileCount) {
++ while (i + 1 < fileCount && dirIndexes[i] == dirIndexes[i + 1])
++ i++;
++ continue;
++ }
++ oldidx = olddirIndexes[j];
++ oldidxj = j;
++ }
++ for (j = oldidxj; j < oldfileCount; j++)
++ if (olddirIndexes[j] == oldidx && !strcmp(baseNames[i], oldbaseNames[j])) {
++ if (!save) {
++ /* duplicate fileSizes, fileMtimes, fileFlags
++ * so we can modify them */
++ fileSizes = dupint32(fileSizes, fileCount);
++ fileMtimes = dupint32(fileMtimes, fileCount);
++ fileFlags = dupint32(fileFlags, fileCount);
++ }
++ fileSizes[i] = oldfileSizes[j];
++ fileMtimes[i] = oldfileMtimes[j];
++ fileMd5s[i] = oldfileMd5s[j];
++ fileFlags[i] = oldfileFlags[j] | RPMFILE_UNPATCHED;
++ save = 1;
++ break;
++ }
++ }
++ if (save) {
++ headerModifyEntry(h, RPMTAG_FILESIZES, RPM_INT32_TYPE,
++ (void *) fileSizes, fileCount);
++ headerModifyEntry(h, RPMTAG_FILEMD5S, RPM_STRING_ARRAY_TYPE,
++ (void *) fileMd5s, fileCount);
++ headerModifyEntry(h, RPMTAG_FILEMTIMES, RPM_INT32_TYPE,
++ (void *) fileMtimes, fileCount);
++ headerModifyEntry(h, RPMTAG_FILEFLAGS, RPM_INT32_TYPE,
++ (void *) fileFlags, fileCount);
++ free(fileSizes);
++ free(fileMtimes);
++ free(fileFlags);
++ }
++ free(baseNames);
++ free(dirNames);
++ free(fileMd5s);
++ free(oldbaseNames);
++ free(olddirNames);
++ free(oldfileMd5s);
++
++ if (isRefresh) {
++ /* same patch installed, this is just a refresh operation */
++ headerRemoveEntry(h, RPMTAG_PATCHESNAME);
++ headerRemoveEntry(h, RPMTAG_PATCHESFLAGS);
++ headerRemoveEntry(h, RPMTAG_PATCHESVERSION);
++ if (headerGetEntry(oldh, RPMTAG_PATCHESNAME, NULL, (void **) &oldpatches, &oldpatchesCount) && oldpatchesCount) {
++ headerGetEntry(oldh, RPMTAG_PATCHESFLAGS, NULL, (void **) &oldpatchesFlags, &oldpatchesCount);
++ headerGetEntry(oldh, RPMTAG_PATCHESVERSION, NULL, (void **) &oldpatchesEVR, &oldpatchesCount);
++ headerAddEntry(h, RPMTAG_PATCHESNAME, RPM_STRING_ARRAY_TYPE, oldpatches, oldpatchesCount);
++ headerAddEntry(h, RPMTAG_PATCHESFLAGS, RPM_INT32_TYPE, oldpatchesFlags, oldpatchesCount);
++ headerAddEntry(h, RPMTAG_PATCHESVERSION, RPM_STRING_ARRAY_TYPE, oldpatchesEVR, oldpatchesCount);
++ free(oldpatches);
++ free(oldpatchesEVR);
++ }
++ return;
++ }
++ headerNVR(oldh, &name, &version, &release);
++ *epoch = 0;
++ if (headerGetEntry(h, RPMTAG_EPOCH, NULL, (void **) &epochp, NULL))
++ sprintf(epoch, "%d:", *epochp);
++ evr = xmalloc(strlen(epoch) + strlen(version) + strlen(release) + 2);
++ strcpy(evr, epoch);
++ strcat(evr, version);
++ strcat(evr, "-");
++ strcat(evr, release);
++ sense = RPMSENSE_EQUAL;
++ headerRemoveEntry(h, RPMTAG_PATCHESNAME);
++ headerRemoveEntry(h, RPMTAG_PATCHESFLAGS);
++ headerRemoveEntry(h, RPMTAG_PATCHESVERSION);
++ headerAddEntry(h, RPMTAG_PATCHESNAME, RPM_STRING_ARRAY_TYPE, &name, 1);
++ headerAddEntry(h, RPMTAG_PATCHESFLAGS, RPM_INT32_TYPE, &sense, 1);
++ headerAddEntry(h, RPMTAG_PATCHESVERSION, RPM_STRING_ARRAY_TYPE, &evr, 1);
++ free(evr);
++}
++
++
+ /**
+ * This is not a generalized function to be called from outside
+ * librpm. It is called internally by rpmtsRun() to rollback
+@@ -2137,6 +2312,8 @@ assert(psm != NULL);
+ }
+ psm->fi = rpmfiLink(p->fi, NULL);
+
++ if (p->hPatched || rpmteDS(p, RPMTAG_PATCHESNAME))
++ patchUnpatchedFiles(p->hPatched, p->fi->h, p->isPatchRefresh);
+ /*@-nullstate@*/ /* FIX: psm->fi may be NULL */
+ if (rpmpsmStage(psm, PSM_PKGINSTALL)) {
+ ourrc++;
+Index: doc/rpm.8
+===================================================================
+--- doc/rpm.8.orig
++++ doc/rpm.8
+@@ -68,7 +68,8 @@ rpm \- RPM Package Manager
+
+
+ [\fB\fIPACKAGE_NAME\fB\fR] [\fB-a,--all\fR] [\fB-f,--file \fIFILE\fB\fR]
+- [\fB-g,--group \fIGROUP\fB\fR] {\fB-p,--package \fIPACKAGE_FILE\fB\fR]
++ [\fB-g,--group \fIGROUP\fB\fR] [\fB-p,--package \fIPACKAGE_FILE\fB\fR]
++ [\fB-P,--patches\fR]
+ [\fB--fileid \fIMD5\fB\fR] [\fB--hdrid \fISHA1\fB\fR] [\fB--pkgid \fIMD5\fB\fR] [\fB--tid \fITID\fB\fR]
+ [\fB--querybynumber \fIHDRNUM\fB\fR] [\fB--triggeredby \fIPACKAGE_NAME\fB\fR]
+ [\fB--whatprovides \fICAPABILITY\fB\fR] [\fB--whatrequires \fICAPABILITY\fB\fR]
+@@ -77,7 +78,8 @@ rpm \- RPM Package Manager
+ .PP
+
+
+- [\fB--changelog\fR] [\fB-c,--configfiles\fR] [\fB-d,--docfiles\fR] [\fB--dump\fR]
++ [\fB--basedon\fR] [\fB--changelog\fR] [\fB-c,--configfiles\fR]
++ [\fB-d,--docfiles\fR] [\fB--dump\fR]
+ [\fB--filesbypkg\fR] [\fB-i,--info\fR] [\fB--last\fR] [\fB-l,--list\fR]
+ [\fB--provides\fR] [\fB--qf,--queryformat \fIQUERYFMT\fB\fR]
+ [\fB-R,--requires\fR] [\fB--scripts\fR] [\fB-s,--state\fR]
+@@ -547,6 +549,10 @@ that will be expanded to paths that are
+ the package manifest as additional \fIPACKAGE_FILE\fR
+ arguments to the query.
+ .TP
++\fB-P, --patches\fP
++Limit the selected packages to patch-rpms. As a side effect, limit
++the file list to patched files.
++.TP
+ \fB--pkgid \fIMD5\fB\fR
+ Query package that contains a given package identifier, i.e. the
+ \fIMD5\fR digest of the combined header and
+@@ -581,6 +587,10 @@ Query all packages that requires \fICAPA
+ .SS "PACKAGE QUERY OPTIONS:"
+ .PP
+ .TP
++\fB--basedon\fR
++Show what packages a patch-rpm is based on. A patch-rpm can only be
++installed if one of the packages it is based on is installed.
++.TP
+ \fB--changelog\fR
+ Display change information for the package.
+ .TP
+@@ -618,7 +628,8 @@ Orders the package listing by install ti
+ packages are at the top.
+ .TP
+ \fB-l, --list\fR
+-List files in package.
++List files in package. If the \fB\-P\fP option is also given, only
++patched files are shown.
+ .TP
+ \fB--provides\fR
+ List capabilities this package provides.
+Index: rpmpopt.in
+===================================================================
+--- rpmpopt.in.orig
++++ rpmpopt.in
+@@ -76,6 +76,10 @@ rpm alias --supplements --qf \
+ "[%|ENHANCESFLAGS:depflag_strong?{%{ENHANCESNAME} %{ENHANCESFLAGS:depflags} %{ENHANCESVERSION}\n}|]" \
+ --POPTdesc=$"list capabilities this package supplements"
+
++rpm alias --basedon --qf \
++ "[%{PATCHESNAME} %{PATCHESFLAGS:depflags} %{PATCHESVERSION}\n]" \
++ --POPTdesc=$"list packages this patch-rpm is based on"
++
+ rpm alias --info --qf 'Name : %-27{NAME} Relocations: %|PREFIXES?{[%{PREFIXES} ]}:{(not relocatable)}|\n\
+ Version : %-27{VERSION} Vendor: %{VENDOR}\n\
+ Release : %-27{RELEASE} Build Date: %{BUILDTIME:date}\n\
+@@ -373,6 +377,10 @@ rpmq alias --supplements --qf \
+ "[%|ENHANCESFLAGS:depflag_strong?{%{ENHANCESNAME} %{ENHANCESFLAGS:depflags} %{ENHANCESVERSION}\n}|]" \
+ --POPTdesc=$"list capabilities this package supplements"
+
++rpmq alias --basedon --qf \
++ "[%{PATCHESNAME} %{PATCHESFLAGS:depflags} %{PATCHESVERSION}\n]" \
++ --POPTdesc=$"list packages this patch-rpm is based on"
++
+ rpmq alias --info --qf 'Name : %-27{NAME} Relocations: %|PREFIXES?{[%{PREFIXES} ]}:{(not relocatable)}|\n\
+ Version : %-27{VERSION} Vendor: %{VENDOR}\n\
+ Release : %-27{RELEASE} Build Date: %{BUILDTIME:date}\n\
+@@ -488,6 +496,10 @@ rpmquery alias --supplements --qf \
+ "[%|ENHANCESFLAGS:depflag_strong?{%{ENHANCESNAME} %{ENHANCESFLAGS:depflags} %{ENHANCESVERSION}\n}|]" \
+ --POPTdesc=$"list capabilities this package supplements"
+
++rpmquery alias --basedon --qf \
++ "[%{PATCHESNAME} %{PATCHESFLAGS:depflags} %{PATCHESVERSION}\n]" \
++ --POPTdesc=$"list packages this patch-rpm is based on"
++
+ rpmquery alias --info --qf 'Name : %-27{NAME} Relocations: %|PREFIXES?{[%{PREFIXES} ]}:{(not relocatable)}|\n\
+ Version : %-27{VERSION} Vendor: %{VENDOR}\n\
+ Release : %-27{RELEASE} Build Date: %{BUILDTIME:date}\n\
diff --git a/payloadformat.diff b/payloadformat.diff
new file mode 100644
index 0000000..821978c
--- /dev/null
+++ b/payloadformat.diff
@@ -0,0 +1,40 @@
+Check if the payloadformat really is "cpio", fail with an error
+message if it is not. Use a different message for the "drpm"
+delta-rpm format. rh#140052
+
+Upstream proposes a different approach, patching the "Requires"
+list, which the current deltarpm implementation can't do, because
+it uses a verbatim copy of the original header. Sigh.
+
+I still believe that rpm should check for known formats, i.e.
+now that rpm understands ustar it should insist that the format
+is either "cpio" or "ustar".
+
+--- ./lib/rpminstall.c.orig 2005-12-14 21:01:09.000000000 +0000
++++ ./lib/rpminstall.c 2005-12-15 14:47:35.000000000 +0000
+@@ -470,6 +470,7 @@ if (fileURL[0] == '=') {
+ eiu->fnp++, eiu->prevx++)
+ {
+ const char * fileName;
++ const char * payloadformat;
+
+ rpmMessage(RPMMESS_DEBUG, "============== %s\n", *eiu->fnp);
+ (void) urlPath(*eiu->fnp, &fileName);
+@@ -510,6 +511,17 @@ if (fileURL[0] == '=') {
+ /*@switchbreak@*/ break;
+ }
+
++ payloadformat = 0;
++ if (!headerGetEntry(eiu->h, RPMTAG_PAYLOADFORMAT, NULL, (void **)&payloadformat, NULL))
++ payloadformat = 0;
++ if (payloadformat && strcmp(payloadformat, "cpio") != 0) {
++ if (!strcmp(payloadformat, "drpm"))
++ rpmMessage(RPMMESS_ERROR, _("%s is a deltarpm, create a real rpm from it first!\n"), *eiu->fnp);
++ else
++ rpmMessage(RPMMESS_ERROR, _("%s contains no cpio payload\n"), *eiu->fnp);
++ eiu->numFailed++; *eiu->fnp = NULL;
++ continue;
++ }
+ eiu->isSource = headerIsEntry(eiu->h, RPMTAG_SOURCEPACKAGE);
+
+ if (eiu->isSource) {
diff --git a/perlprov.diff b/perlprov.diff
deleted file mode 100644
index 323c180..0000000
--- a/perlprov.diff
+++ /dev/null
@@ -1,13 +0,0 @@
-Support a "first version wins" semantics.
-
---- ./scripts/perl.prov.orig 2010-12-03 12:11:57.000000000 +0000
-+++ ./scripts/perl.prov 2011-05-11 15:32:39.000000000 +0000
-@@ -170,7 +170,7 @@ sub process_file {
-
- $version = $1;
- }
-- $require{$package} = $version;
-+ $require{$package} ||= $version;
- }
-
- # Allow someone to have a variable that defines virtual packages
diff --git a/pgpdecodeearly.diff b/pgpdecodeearly.diff
new file mode 100644
index 0000000..60adc1b
--- /dev/null
+++ b/pgpdecodeearly.diff
@@ -0,0 +1,18 @@
+Also decode early for PGP sigtags, which are actually header+payload
+RSA signatures. Without this patch, verification of a package
+that has just a header+payload RSA signature but no header-only RSA
+signature fails.
+
+Already in rpm-4.4.7.
+
+--- ./lib/rpmchecksig.c.orig 2005-12-14 20:54:39.000000000 +0000
++++ ./lib/rpmchecksig.c 2006-03-21 18:00:22.000000000 +0000
+@@ -801,7 +805,7 @@ int rpmVerifySignatures(QVA_t qva, rpmts
+ sigp = rpmtsSignature(ts);
+
+ /* XXX RSA needs the hash_algo, so decode early. */
+- if (sigtag == RPMSIGTAG_RSA) {
++ if (sigtag == RPMSIGTAG_RSA || sigtag == RPMSIGTAG_PGP) {
+ xx = headerGetEntry(sigh, sigtag, &sigtype, &sig, &siglen);
+ xx = pgpPrtPkts(sig, siglen, dig, 0);
+ sig = headerFreeData(sig, sigtype);
diff --git a/platformin.diff b/platformin.diff
index 77e7828..43c96e1 100644
--- a/platformin.diff
+++ b/platformin.diff
@@ -1,26 +1,31 @@
-SUSE specific platform changes.
+SUSE specific platform changes. The libexecdir definition is probably
+wrong, LSB seems to demand "%{_exec_prefix}/lib".
---- ./platform.in.orig 2010-12-03 12:11:57.000000000 +0000
-+++ ./platform.in 2011-05-11 15:02:03.000000000 +0000
-@@ -21,7 +21,7 @@
+--- ./platform.in.orig 2005-01-26 03:39:54.000000000 +0000
++++ ./platform.in 2006-02-17 14:18:30.000000000 +0000
+@@ -17,18 +17,18 @@
%_exec_prefix @exec_prefix@
%_bindir @bindir@
%_sbindir @sbindir@
-%_libexecdir @libexecdir@
-+%_libexecdir %{_exec_prefix}/lib
- %_datarootdir @datarootdir@
++%_libexecdir %{_libdir}
%_datadir @datadir@
%_sysconfdir @sysconfdir@
-@@ -33,7 +33,7 @@
+ %_sharedstatedir @sharedstatedir@
+ %_localstatedir @localstatedir@
+ %_lib @LIB@
+-%_libdir @LIBDIR@
++%_libdir %{_exec_prefix}/%{_lib}
+ %_includedir @includedir@
%_oldincludedir @oldincludedir@
%_infodir @infodir@
%_mandir @mandir@
--%_initddir %{_sysconfdir}/rc.d/init.d
-+%_initddir %{_sysconfdir}/init.d
- # Deprecated misspelling, present for backwards compatibility.
- %_initrddir %{_initddir}
+-%_initrddir %{_sysconfdir}/rc.d/init.d
++%_initrddir %{_sysconfdir}/init.d
-@@ -143,3 +143,21 @@
+ %_defaultdocdir @DEFAULTDOCDIR@
+
+@@ -148,3 +148,21 @@
@mandrake@%_gamesdir games
@mandrake@%_gamesbindir %{_prefix}/%{_gamesdir}
@mandrake@%_gamesdatadir %{_datadir}/%{_gamesdir}
@@ -31,7 +36,7 @@ SUSE specific platform changes.
+@SuSE@%__chown_Rhf @__CHOWN_RHF@
+@SuSE@%__chgrp_Rhf @__CHGRP_RHF@
+@SuSE@%_fixowner [ `%{__id_u}` = '0' ] && %{__chown_Rhf} root
-+@SuSE@%_fixgroup [ `%{__id_u}` = '0' ] && %{__chgrp_Rhf} root
++@SuSE@%_fixgroup [ `%{__id_u}` = '0' ] && %{__chgrp_Rhf} @ROOT_GROUP@
+@SuSE@%_fixperms %{__chmod} -Rf @FIXPERMS@
+@SuSE@
+@SuSE@#---------------------------------------------------------------------
diff --git a/prereqorder.diff b/prereqorder.diff
new file mode 100644
index 0000000..1e73d91
--- /dev/null
+++ b/prereqorder.diff
@@ -0,0 +1,21 @@
+Backported fix. Seems to do no harm.
+
+--- ./lib/depends.c.orig 2005-12-14 19:51:34.000000000 +0000
++++ ./lib/depends.c 2006-01-27 21:05:13.000000000 +0000
+@@ -1294,14 +1403,12 @@ int rpmtsOrder(rpmts ts)
+ switch (rpmteType(p)) {
+ case TR_REMOVED:
+ /* Skip if not %preun/%postun requires or legacy prereq. */
+- if (isInstallPreReq(Flags)
+- || !( isErasePreReq(Flags) || isLegacyPreReq(Flags) ) )
++ if (!( isErasePreReq(Flags) || isLegacyPreReq(Flags) ) )
+ /*@innercontinue@*/ continue;
+ /*@switchbreak@*/ break;
+ case TR_ADDED:
+ /* Skip if not %pre/%post requires or legacy prereq. */
+- if (isErasePreReq(Flags)
+- || !( isInstallPreReq(Flags) || isLegacyPreReq(Flags) ) )
++ if (!( isInstallPreReq(Flags) || isLegacyPreReq(Flags) ) )
+ /*@innercontinue@*/ continue;
+ /*@switchbreak@*/ break;
+ }
diff --git a/probfilter.diff b/probfilter.diff
new file mode 100644
index 0000000..79eeba5
--- /dev/null
+++ b/probfilter.diff
@@ -0,0 +1,14 @@
+Revert rpm-4.4.2 probFilter change.
+
+--- ./lib/poptI.c.orig 2005-12-15 14:34:45.000000000 +0000
++++ ./lib/poptI.c 2005-12-15 14:35:16.000000000 +0000
+@@ -16,8 +16,7 @@ extern time_t get_date(const char * p, v
+ /*@unchecked@*/
+ struct rpmInstallArguments_s rpmIArgs = {
+ 0, /* transFlags */
+- /* probFilter */
+- (RPMPROB_FILTER_REPLACEOLDFILES | RPMPROB_FILTER_REPLACENEWFILES),
++ 0, /* probFilter */
+ 0, /* installInterfaceFlags */
+ 0, /* eraseInterfaceFlags */
+ 0, /* qva_flags */
diff --git a/pythondeps.diff b/pythondeps.diff
deleted file mode 100644
index af85219..0000000
--- a/pythondeps.diff
+++ /dev/null
@@ -1,48 +0,0 @@
-Index: autodeps/linux.prov
-===================================================================
---- autodeps/linux.prov.orig 2011-06-08 13:31:39.000000000 +0200
-+++ autodeps/linux.prov 2011-06-08 13:31:39.191646314 +0200
-@@ -11,7 +11,7 @@ filelist=($(printf "%s\n" "${filelist[@]
- solist=($(printf "%s\n" "${filelist[@]}" | grep "\\.so" | grep -v "^/lib/ld.so" | \
- tr '\n' '\0' | xargs -0 -r file -L | grep "ELF.*shared object" | \
- cut -d: -f1))
--pythonlist=
-+pythonlist=($(printf "%s\n" "${filelist[@]}" | egrep '/usr/bin/python.\..$'))
- tcllist=
- monolist=($(printf "%s\n" "${filelist[@]}" | egrep "\\.(exe|dll)\$"))
- firmwarelist=($(printf "%s\n" "${filelist[@]}" | grep "/lib/firmware/"))
-@@ -54,8 +54,8 @@ done | sort -u
-
- #
- # --- Python modules.
--[ -x /usr/lib/rpm/python.prov -a -n "$pythonlist" ] &&
-- printf "%s\n" "${pythonlist[@]}" | /usr/lib/rpm/python.prov | sort -u
-+[ -x /usr/lib/rpm/pythondeps.sh -a -n "$pythonlist" ] &&
-+ printf "%s\n" "${pythonlist[@]}" | /usr/lib/rpm/pythondeps.sh -P | sort -u
-
- #
- # --- Tcl modules.
-Index: autodeps/linux.req
-===================================================================
---- autodeps/linux.req.orig 2011-06-08 13:31:38.000000000 +0200
-+++ autodeps/linux.req 2011-06-08 13:31:39.191646314 +0200
-@@ -31,7 +31,7 @@ liblist=($(printf "%s\0" "${filelist[@]}
-
- interplist=()
- perllist=()
--pythonlist=()
-+pythonlist=($(printf "%s\n" "${filelist[@]}" | egrep '/usr/lib[^/]*/python.\..'))
- tcllist=()
- monolist=($(printf "%s\n" "${filelist[@]}" | egrep "\\.(exe|dll)(\\.config)?\$"))
-
-@@ -127,8 +127,8 @@ done | sort -u
-
- #
- # --- Python modules.
--[ -x /usr/lib/rpm/python.req -a -n "$pythonlist" ] && \
-- printf "%s\n" "${pythonlist[@]}" | /usr/lib/rpm/python.req | sort -u
-+[ -x /usr/lib/rpm/pythondeps.sh -a -n "$pythonlist" ] && \
-+ printf "%s\n" "${pythonlist[@]}" | /usr/lib/rpm/pythondeps.sh -R | sort -u
-
- #
- # --- Tcl modules.
diff --git a/querybuffer.diff b/querybuffer.diff
new file mode 100644
index 0000000..e3cb3bc
--- /dev/null
+++ b/querybuffer.diff
@@ -0,0 +1,43 @@
+fix a buffer overflow in the query function [#218983]
+rh#212833
+
+--- lib/query.c.orig 2006-11-24 13:24:30.000000000 +0000
++++ lib/query.c 2006-11-24 13:43:47.000000000 +0000
+@@ -133,8 +133,10 @@ int showQueryPackage(QVA_t qva, rpmts ts
+ int rc = 0; /* XXX FIXME: need real return code */
+ int nonewline = 0;
+ int i;
++ size_t tsize;
+
+- te = t = xmalloc(BUFSIZ);
++ tsize = BUFSIZ * 2;
++ te = t = xmalloc(tsize);
+ /*@-boundswrite@*/
+ *te = '\0';
+ /*@=boundswrite@*/
+@@ -147,8 +149,9 @@ int showQueryPackage(QVA_t qva, rpmts ts
+ size_t tb = (te - t);
+ size_t sb = strlen(str);
+
+- if (sb >= (BUFSIZ - tb)) {
+- t = xrealloc(t, BUFSIZ+sb);
++ if (sb > 0) {
++ tsize += sb;
++ t = xrealloc(t, tsize);
+ te = t + tb;
+ }
+ /*@-boundswrite@*/
+@@ -261,6 +264,13 @@ int showQueryPackage(QVA_t qva, rpmts ts
+ }
+ /*@=boundswrite@*/
+
++ if (strlen(fn) + BUFSIZ > tsize) {
++ size_t tb = (te - t);
++ tsize = strlen(fn) + BUFSIZ * 2;
++ t = xrealloc(t, tsize);
++ te = t + tb;
++ }
++
+ if (qva->qva_flags & QUERY_FOR_DUMPFILES) {
+ sprintf(te, "%s %d %d %s 0%o ", fn, (int)fsize, fmtime, fmd5, fmode);
+ te += strlen(te);
diff --git a/ready b/ready
new file mode 100644
index 0000000..473a0f4
diff --git a/rebuilddbroot.diff b/rebuilddbroot.diff
new file mode 100644
index 0000000..88e5e13
--- /dev/null
+++ b/rebuilddbroot.diff
@@ -0,0 +1,22 @@
+Make rebuilddb work with the --root option. [#65993]
+
+--- ./rpmdb/rpmdb.c.orig 2005-02-16 03:18:19.000000000 +0000
++++ ./rpmdb/rpmdb.c 2006-02-21 20:37:44.000000000 +0000
+@@ -3771,7 +3887,7 @@ int rpmdbRebuild(const char * prefix, rp
+ }
+ dbpath = rootdbpath = rpmGetPath(prefix, tfn, NULL);
+ if (!(prefix[0] == '/' && prefix[1] == '\0'))
+- dbpath += strlen(prefix);
++ dbpath += strlen(prefix) - 1;
+ tfn = _free(tfn);
+
+ /*@-nullpass@*/
+@@ -3794,7 +3910,7 @@ int rpmdbRebuild(const char * prefix, rp
+ }
+ newdbpath = newrootdbpath = rpmGetPath(prefix, tfn, NULL);
+ if (!(prefix[0] == '/' && prefix[1] == '\0'))
+- newdbpath += strlen(prefix);
++ newdbpath += strlen(prefix) - 1;
+ tfn = _free(tfn);
+
+ rpmMessage(RPMMESS_DEBUG, _("rebuilding database %s into %s\n"),
diff --git a/refreshtestarch.diff b/refreshtestarch.diff
index 12642dd..161eae2 100644
--- a/refreshtestarch.diff
+++ b/refreshtestarch.diff
@@ -1,25 +1,24 @@
Also test architecture in "refresh" test when not colored. This allows
-updates to different architectures.
+updates to different architecture possible again.
---- ./lib/psm.c.orig 2010-12-21 09:50:23.000000000 +0000
-+++ ./lib/psm.c 2011-05-11 12:47:13.000000000 +0000
-@@ -723,6 +723,7 @@ static rpmRC rpmpsmStage(rpmpsm psm, pkg
-
- psm->scriptArg = psm->npkgs_installed + 1;
+--- ./lib/psm.c.orig 2005-12-14 18:59:10.000000000 +0000
++++ ./lib/psm.c 2006-02-24 11:46:54.000000000 +0000
+@@ -1425,15 +1441,16 @@ rpmRC rpmpsmStage(rpmpsm psm, pkgStage s
+ assert(psm->mi == NULL);
+ psm->mi = rpmtsInitIterator(ts, RPMTAG_NAME, rpmteN(psm->te), 0);
+ /* this must match rpmNameVersionCompare in depends.c */
- mi = rpmtsInitIterator(ts, RPMDBI_NAME, rpmteN(psm->te), 0);
- xx = rpmdbSetIteratorRE(mi, RPMTAG_EPOCH, RPMMIRE_STRCMP,
+ xx = rpmdbSetIteratorRE(psm->mi, RPMTAG_EPOCH, RPMMIRE_STRCMP,
rpmteE(psm->te));
-@@ -730,9 +731,9 @@ static rpmRC rpmpsmStage(rpmpsm psm, pkg
+ xx = rpmdbSetIteratorRE(psm->mi, RPMTAG_VERSION, RPMMIRE_STRCMP,
rpmteV(psm->te));
- xx = rpmdbSetIteratorRE(mi, RPMTAG_RELEASE, RPMMIRE_STRCMP,
+ xx = rpmdbSetIteratorRE(psm->mi, RPMTAG_RELEASE, RPMMIRE_STRCMP,
rpmteR(psm->te));
-+ xx = rpmdbSetIteratorRE(mi, RPMTAG_ARCH, RPMMIRE_STRCMP,
-+ rpmteA(psm->te));
- if (tscolor) {
-- xx = rpmdbSetIteratorRE(mi, RPMTAG_ARCH, RPMMIRE_STRCMP,
-- rpmteA(psm->te));
- xx = rpmdbSetIteratorRE(mi, RPMTAG_OS, RPMMIRE_STRCMP,
+- if (tscolor) {
+- xx = rpmdbSetIteratorRE(psm->mi, RPMTAG_ARCH, RPMMIRE_STRCMP,
++ xx = rpmdbSetIteratorRE(psm->mi, RPMTAG_ARCH, RPMMIRE_STRCMP,
+ rpmteA(psm->te));
++ if (tscolor) {
+ xx = rpmdbSetIteratorRE(psm->mi, RPMTAG_OS, RPMMIRE_STRCMP,
rpmteO(psm->te));
}
diff --git a/remove-brp-strips.diff b/remove-brp-strips.diff
deleted file mode 100644
index 466a948..0000000
--- a/remove-brp-strips.diff
+++ /dev/null
@@ -1,16 +0,0 @@
-Subject: remove references to removed brp scripts
-
-Some brp-scripts are not used in openSUSE, remove references
-to it
-
---- ./platform.in.orig 2011-05-11 15:02:03.000000000 +0000
-+++ ./platform.in 2011-05-11 15:38:05.000000000 +0000
-@@ -55,8 +55,6 @@
- %__os_install_post \
- %{_rpmconfigdir}/brp-compress \
- %{_rpmconfigdir}/brp-strip %{__strip} \
-- %{_rpmconfigdir}/brp-strip-static-archive %{__strip} \
-- %{_rpmconfigdir}/brp-strip-comment-note %{__strip} %{__objdump} \
- %{nil}
-
- %__spec_install_post\
diff --git a/remove-translations.diff b/remove-translations.diff
deleted file mode 100644
index b7453e2..0000000
--- a/remove-translations.diff
+++ /dev/null
@@ -1,20 +0,0 @@
---- ./scripts/find-lang.sh.orig 2011-05-11 16:45:30.000000000 +0000
-+++ ./scripts/find-lang.sh 2011-05-11 16:55:14.000000000 +0000
-@@ -122,6 +122,17 @@ fi
- MO_NAME_NEW=$MO_NAME.tmp.$$
- rm -f $MO_NAME_NEW
-
-+# remove languages we do not yet support - but give out statistics
-+find $TOP_DIR/usr/share/locale/ -maxdepth 1 -type d | sed 's:'"$TOP_DIR"/usr/share/locale/'::; /^$/d' | while read dir; do
-+ if ! rpm -ql filesystem | egrep -q "/usr/share/locale/$dir"$; then
-+ find $TOP_DIR/usr/share/locale/$dir -name *.mo | sed 's:'"$TOP_DIR"'::' | while read file; do
-+ echo -n "removing translation $file: "
-+ msgunfmt "$TOP_DIR/$file" | msgfmt --statistics -o /dev/null -
-+ done
-+ rm -rf $TOP_DIR/usr/share/locale/$dir
-+ fi
-+done
-+
- find $TOP_DIR -type f -o -type l|sed '
- s:'"$TOP_DIR"'::
- '"$ALL_NAME$MO"'s:\(.*/locale/\)\([^/_]\+\)\(.*\.mo$\):%lang(\2) %doc \1\2\3:
diff --git a/repackage-nomd5.diff b/repackage-nomd5.diff
deleted file mode 100644
index 16e243e..0000000
--- a/repackage-nomd5.diff
+++ /dev/null
@@ -1,31 +0,0 @@
-Don't complain about a bad md5 sum for repackaged rpms.
-
---- ./lib/psm.c.orig 2011-05-11 14:27:32.000000000 +0000
-+++ ./lib/psm.c 2011-05-11 16:32:11.000000000 +0000
-@@ -811,6 +811,7 @@ static rpmRC rpmpsmStage(rpmpsm psm, pkg
- case PSM_PROCESS:
- if (psm->goal == PKG_INSTALL) {
- FD_t payload = NULL;
-+ rpmtransFlags oldtsflags;
-
- if (rpmtsFlags(ts) & RPMTRANS_FLAG_JUSTDB) break;
-
-@@ -828,6 +829,9 @@ static rpmRC rpmpsmStage(rpmpsm psm, pkg
- break;
- }
-
-+ oldtsflags = rpmtsFlags(ts);
-+ if (headerIsEntry(fi->h, RPMTAG_REMOVETID))
-+ (void) rpmtsSetFlags(ts, oldtsflags | RPMTRANS_FLAG_NOMD5);
- rc = fsmSetup(rpmfiFSM(fi), FSM_PKGINSTALL, ts, psm->te, fi,
- payload, NULL, &psm->failedFile);
- (void) rpmswAdd(rpmtsOp(ts, RPMTS_OP_UNCOMPRESS),
-@@ -835,6 +839,8 @@ static rpmRC rpmpsmStage(rpmpsm psm, pkg
- (void) rpmswAdd(rpmtsOp(ts, RPMTS_OP_DIGEST),
- fdOp(payload, FDSTAT_DIGEST));
- xx = fsmTeardown(rpmfiFSM(fi));
-+ if (headerIsEntry(fi->h, RPMTAG_REMOVETID))
-+ (void) rpmtsSetFlags(ts, oldtsflags);
-
- saveerrno = errno; /* XXX FIXME: Fclose with libio destroys errno */
- xx = Fclose(payload);
diff --git a/requires-ge-macro.diff b/requires-ge-macro.diff
deleted file mode 100644
index 51c3e50..0000000
--- a/requires-ge-macro.diff
+++ /dev/null
@@ -1,12 +0,0 @@
---- ./macros.in.orig 2011-05-11 15:36:05.000000000 +0000
-+++ ./macros.in 2011-05-11 15:38:44.000000000 +0000
-@@ -1027,7 +1027,8 @@ done \
- # %{perl_sitearch}/Image
- # %dir %{perl_sitearch}/auto/Image
- #
--%requires_eq() %(LC_ALL="C" echo '%*' | xargs -r rpm -q --qf 'Requires: %%{name} = %%{epoch}:%%{version}\\n' | sed -e 's/ (none):/ /' -e 's/ 0:/ /' | grep -v "is not")
-+%requires_eq() %(echo '%*' | LC_ALL=C xargs -r rpm -q --qf 'Requires: %%{name} = %%{epoch}:%%{version}\\n' | sed -e 's/ (none):/ /' -e 's/ 0:/ /' | grep -v "is not")
-+%requires_ge() %(echo '%*' | LC_ALL=C xargs -r rpm -q --qf 'Requires: %%{name} >= %%{epoch}:%%{version}\\n' | sed -e 's/ (none):/ /' -e 's/ 0:/ /' | grep -v "is not")
- %perl_sitearch %(eval "`%{__perl} -V:installsitearch`"; echo $installsitearch)
- %perl_sitelib %(eval "`%{__perl} -V:installsitelib`"; echo $installsitelib)
- %perl_vendorarch %(eval "`%{__perl} -V:installvendorarch`"; echo $installvendorarch)
diff --git a/rpm-4.4.2.tar.bz2 b/rpm-4.4.2.tar.bz2
new file mode 100644
index 0000000..0659a80
--- /dev/null
+++ b/rpm-4.4.2.tar.bz2
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:abc1b6a909e904ee220e32cd0c534fe19b8ea7cb2d3e8cfe395e221773e62c8c
+size 8955447
diff --git a/rpm-4.9.0.tar.bz2 b/rpm-4.9.0.tar.bz2
deleted file mode 100644
index 5a813cd..0000000
--- a/rpm-4.9.0.tar.bz2
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:9af1a56b05fc2c54935062e04a3e02999110c74d00bfd5b5c5ff3a03dde61688
-size 3410799
diff --git a/rpm-beecrypt.diff b/rpm-beecrypt.diff
deleted file mode 100644
index ecf9284..0000000
--- a/rpm-beecrypt.diff
+++ /dev/null
@@ -1,1726 +0,0 @@
---- ./config.h.in.orig 2011-03-02 06:46:47.000000000 +0000
-+++ ./config.h.in 2011-05-10 15:54:41.000000000 +0000
-@@ -13,6 +13,9 @@
- /* Define to 1 if you have the `basename' function. */
- #undef HAVE_BASENAME
-
-+/* Define to 1 if you have the header file. */
-+#undef HAVE_BEECRYPT_API_H
-+
- /* Define as 1 if you bzip2 1.0 */
- #undef HAVE_BZ2_1_0
-
-@@ -77,7 +80,7 @@
- /* Define as 1 if your zlib has gzseek() */
- #undef HAVE_GZSEEK
-
--/* Define if you have the iconv() function. */
-+/* Define if you have the iconv() function and it works. */
- #undef HAVE_ICONV
-
- /* Define to 1 if you have the header file. */
-@@ -224,6 +227,10 @@
- */
- #undef LT_OBJDIR
-
-+/* Define to the sub-directory in which libtool stores uninstalled libraries.
-+ */
-+#undef LT_OBJDIR
-+
- /* Define to 1 if `major', `minor', and `makedev' are declared in .
- */
- #undef MAJOR_IN_MKDEV
-@@ -308,6 +315,9 @@
- /* Build with acl support? */
- #undef WITH_ACL
-
-+/* Build with beecrypt instead of nss3 support? */
-+#undef WITH_BEECRYPT
-+
- /* Build with capability support? */
- #undef WITH_CAP
-
---- ./configure.ac.orig 2011-03-02 06:46:20.000000000 +0000
-+++ ./configure.ac 2011-05-10 15:54:41.000000000 +0000
-@@ -246,12 +246,43 @@ AC_CHECK_HEADERS([dwarf.h], [
- AM_CONDITIONAL(LIBDWARF,[test "$WITH_LIBDWARF" = yes])
-
- #=================
-+# Check for beecrypt library if requested.
-+AC_ARG_WITH(beecrypt, [ --with-beecrypt build with beecrypt support ],,[with_beecrypt=yes])
-+AC_ARG_WITH(internal_beecrypt, [ --with-internal-beecrypt build with internal beecrypt library ],,[with_internal_beecrypt=yes])
-+AM_CONDITIONAL([WITH_INTERNAL_BEECRYPT],[test "$with_internal_beecrypt" = yes])
-+if test "$with_internal_beecrypt" = yes ; then
-+ with_beecrypt=yes
-+fi
-+AM_CONDITIONAL([WITH_BEECRYPT],[test "$with_beecrypt" = yes])
-+
-+WITH_BEECRYPT_INCLUDE=
-+WITH_BEECRYPT_LIB=
-+if test "$with_beecrypt" = yes ; then
-+ AC_DEFINE(WITH_BEECRYPT, 1, [Build with beecrypt instead of nss3 support?])
-+ if test "$with_internal_beecrypt" = yes ; then
-+ WITH_BEECRYPT_INCLUDE="-I\$(top_srcdir)/beecrypt"
-+ AC_DEFINE(HAVE_BEECRYPT_API_H, 1, [Define to 1 if you have the header file.])
-+ else
-+ AC_CHECK_LIB(beecrypt, mpfprintln, [
-+ WITH_BEECRYPT_LIB="-lbeecrypt"
-+ ],[
-+ AC_MSG_ERROR([missing required library 'beecrypt'])
-+ ])
-+ AC_CHECK_HEADER([beecrypt/api.h], [AC_DEFINE(HAVE_BEECRYPT_API_H, 1, [Define to 1 if you have the header file.])
-+ ])
-+ fi
-+fi
-+AC_SUBST(WITH_BEECRYPT_LIB)
-+AC_SUBST(WITH_BEECRYPT_INCLUDE)
-+
-+#=================
- # Check for NSS library.
- # We need nss.h from NSS which needs nspr.h. Unfortunately both glibc and NSS
- # have a header named nss.h... so make extra check for NSS's sechash.h
- # which we use too and hopefully is slightly more unique to NSS.
- WITH_NSS_INCLUDE=
- WITH_NSS_LIB=
-+if test "$with_beecrypt" != yes ; then
- AC_CHECK_HEADERS([nspr.h nss.h sechash.h], [], [
- AC_MSG_ERROR([missing required NSPR / NSS header])
- ])
-@@ -260,6 +291,7 @@ AC_CHECK_LIB(nss3, NSS_NoDB_Init, [
- ], [
- AC_MSG_ERROR([missing required NSS library 'nss3'])
- ])
-+fi
- AC_SUBST(WITH_NSS_INCLUDE)
- AC_SUBST(WITH_NSS_LIB)
-
---- ./rpmio/Makefile.am.orig 2010-12-03 12:11:57.000000000 +0000
-+++ ./rpmio/Makefile.am 2011-05-10 15:56:13.000000000 +0000
-@@ -2,6 +2,7 @@
-
- AM_CPPFLAGS = -I$(top_builddir) -I$(top_srcdir) -I$(top_builddir)/include/
- AM_CPPFLAGS += @WITH_NSS_INCLUDE@
-+AM_CPPFLAGS += @WITH_BEECRYPT_INCLUDE@
- AM_CPPFLAGS += @WITH_LUA_INCLUDE@
- AM_CPPFLAGS += @WITH_POPT_INCLUDE@
- AM_CPPFLAGS += -I$(top_srcdir)/misc
-@@ -18,10 +19,17 @@ librpmio_la_SOURCES = \
- rpmstring.c rpmfileutil.c \
- rpmkeyring.c
-
-+if WITH_BEECRYPT
-+librpmio_la_SOURCES += digest_beecrypt.c
-+else
-+librpmio_la_SOURCES += digest_nss.c
-+endif
-+
- librpmio_la_LDFLAGS = -version-info 2:0:0
- librpmio_la_LIBADD = \
- ../misc/libmisc.la \
- @WITH_NSS_LIB@ \
-+ @WITH_BEECRYPT_LIB@ \
- @WITH_LUA_LIB@ \
- @WITH_BZ2_LIB@ \
- @WITH_ZLIB_LIB@ \
-@@ -30,6 +38,15 @@ librpmio_la_LIBADD = \
- @WITH_LZMA_LIB@ \
- -lpthread
-
-+if WITH_INTERNAL_BEECRYPT
-+librpmio_la_LIBADD += $(libbeecrypt_la)
-+
-+libbeecrypt_la = $(top_builddir)/beecrypt/libbeecrypt_nolibdir.la
-+
-+$(top_builddir)/beecrypt/libbeecrypt_nolibdir.la: $(top_builddir)/beecrypt/libbeecrypt.la
-+ sed -e 's/libdir=.*/libdir=/' < $(top_builddir)/beecrypt/libbeecrypt.la > $(top_builddir)/beecrypt/libbeecrypt_nolibdir.la
-+endif
-+
- if WITH_LUAEXT
- AM_CPPFLAGS += -I$(top_srcdir)/luaext/
- librpmio_la_LIBADD += $(top_builddir)/luaext/libluaext.la
---- ./rpmio/base64.c.orig 2010-12-03 12:11:57.000000000 +0000
-+++ ./rpmio/base64.c 2011-05-10 15:54:41.000000000 +0000
-@@ -4,8 +4,11 @@
- #include
- #include
-
-+#include "system.h"
-+
- #include "rpmio/base64.h"
-
-+#ifndef WITH_BEECRYPT
-
- static char base64_encode_value(char value_in)
- {
-@@ -253,3 +256,4 @@ int main(int argc, char *argv[])
- }
- #endif
-
-+#endif /* WITH_BEECRYPT */
---- ./rpmio/digest.c.orig 2010-12-03 12:11:57.000000000 +0000
-+++ ./rpmio/digest.c 2011-05-10 16:00:19.000000000 +0000
-@@ -4,25 +4,12 @@
-
- #include "system.h"
-
-+#include
- #include "rpmio/digest.h"
-+#include "rpmio/rpmio_internal.h"
-
- #include "debug.h"
-
--#ifdef SHA_DEBUG
--#define DPRINTF(_a) fprintf _a
--#else
--#define DPRINTF(_a)
--#endif
--
--
--/**
-- * MD5/SHA1 digest private data.
-- */
--struct DIGEST_CTX_s {
-- rpmDigestFlags flags; /*!< Bit(s) to control digest operation. */
-- HASHContext *hashctx; /*!< Internal NSS hash context. */
-- int algo; /*!< Used hash algorithm */
--};
-
- #define DIGESTS_MAX 11
- struct rpmDigestBundle_s {
-@@ -109,138 +96,3 @@ DIGEST_CTX rpmDigestBundleDupCtx(rpmDige
- return dup;
- }
-
--DIGEST_CTX
--rpmDigestDup(DIGEST_CTX octx)
--{
-- DIGEST_CTX nctx = NULL;
-- if (octx) {
-- HASHContext *hctx = HASH_Clone(octx->hashctx);
-- if (hctx) {
-- nctx = memcpy(xcalloc(1, sizeof(*nctx)), octx, sizeof(*nctx));
-- nctx->hashctx = hctx;
-- }
-- }
-- return nctx;
--}
--
--RPM_GNUC_PURE
--static HASH_HashType getHashType(int hashalgo)
--{
-- switch (hashalgo) {
-- case PGPHASHALGO_MD5:
-- return HASH_AlgMD5;
-- break;
-- case PGPHASHALGO_MD2:
-- return HASH_AlgMD2;
-- break;
-- case PGPHASHALGO_SHA1:
-- return HASH_AlgSHA1;
-- break;
-- case PGPHASHALGO_SHA256:
-- return HASH_AlgSHA256;
-- break;
-- case PGPHASHALGO_SHA384:
-- return HASH_AlgSHA384;
-- break;
-- case PGPHASHALGO_SHA512:
-- return HASH_AlgSHA512;
-- break;
-- case PGPHASHALGO_RIPEMD160:
-- case PGPHASHALGO_TIGER192:
-- case PGPHASHALGO_HAVAL_5_160:
-- default:
-- return HASH_AlgNULL;
-- break;
-- }
--}
--
--size_t
--rpmDigestLength(int hashalgo)
--{
-- return HASH_ResultLen(getHashType(hashalgo));
--}
--
--DIGEST_CTX
--rpmDigestInit(int hashalgo, rpmDigestFlags flags)
--{
-- HASH_HashType type = getHashType(hashalgo);
-- HASHContext *hashctx = NULL;
-- DIGEST_CTX ctx = NULL;
--
-- if (type == HASH_AlgNULL || rpmInitCrypto() < 0)
-- goto exit;
--
-- if ((hashctx = HASH_Create(type)) != NULL) {
-- ctx = xcalloc(1, sizeof(*ctx));
-- ctx->flags = flags;
-- ctx->algo = hashalgo;
-- ctx->hashctx = hashctx;
-- HASH_Begin(ctx->hashctx);
-- }
--
--DPRINTF((stderr, "*** Init(%x) ctx %p hashctx %p\n", flags, ctx, ctx->hashctx));
--exit:
-- return ctx;
--}
--
--int
--rpmDigestUpdate(DIGEST_CTX ctx, const void * data, size_t len)
--{
-- size_t partlen;
-- const unsigned char *ptr = data;
--
-- if (ctx == NULL)
-- return -1;
--
--DPRINTF((stderr, "*** Update(%p,%p,%zd) hashctx %p \"%s\"\n", ctx, data, len, ctx->hashctx, ((char *)data)));
-- partlen = ~(unsigned int)0xFF;
-- while (len > 0) {
-- if (len < partlen) {
-- partlen = len;
-- }
-- HASH_Update(ctx->hashctx, ptr, partlen);
-- ptr += partlen;
-- len -= partlen;
-- }
-- return 0;
--}
--
--int
--rpmDigestFinal(DIGEST_CTX ctx, void ** datap, size_t *lenp, int asAscii)
--{
-- unsigned char * digest;
-- unsigned int digestlen;
--
-- if (ctx == NULL)
-- return -1;
-- digestlen = HASH_ResultLenContext(ctx->hashctx);
-- digest = xmalloc(digestlen);
--
--DPRINTF((stderr, "*** Final(%p,%p,%p,%zd) hashctx %p digest %p\n", ctx, datap, lenp, asAscii, ctx->hashctx, digest));
--/* FIX: check rc */
-- HASH_End(ctx->hashctx, digest, (unsigned int *) &digestlen, digestlen);
--
-- /* Return final digest. */
-- if (!asAscii) {
-- if (lenp) *lenp = digestlen;
-- if (datap) {
-- *datap = digest;
-- digest = NULL;
-- }
-- } else {
-- if (lenp) *lenp = (2*digestlen) + 1;
-- if (datap) {
-- const uint8_t * s = (const uint8_t *) digest;
-- *datap = pgpHexStr(s, digestlen);
-- }
-- }
-- if (digest) {
-- memset(digest, 0, digestlen); /* In case it's sensitive */
-- free(digest);
-- }
-- HASH_Destroy(ctx->hashctx);
-- memset(ctx, 0, sizeof(*ctx)); /* In case it's sensitive */
-- free(ctx);
-- return 0;
--}
--
---- ./rpmio/digest.h.orig 2010-12-03 12:11:57.000000000 +0000
-+++ ./rpmio/digest.h 2011-05-10 15:54:41.000000000 +0000
-@@ -1,11 +1,6 @@
- #ifndef _RPMDIGEST_H
- #define _RPMDIGEST_H
-
--#include
--#include
--#include
--#include
--
- #include
- #include "rpmio/base64.h"
-
-@@ -42,8 +37,18 @@ struct pgpDig_s {
- struct pgpDigParams_s pubkey;
-
- /* DSA/RSA parameters */
-- SECKEYPublicKey *keydata;
-- SECItem *sigdata;
-+ void *keydata;
-+ void *sigdata;
- };
-
-+void pgpCleanRSADSA(pgpDig dig);
-+
-+int pgpSetSigMpiRSA(pgpDig dig, int num, const uint8_t *p);
-+int pgpSetPubMpiRSA(pgpDig dig, int num, const uint8_t *p);
-+int pgpVerifyRSA(pgpDig dig, uint8_t *hash, size_t hashlen);
-+
-+int pgpSetSigMpiDSA(pgpDig dig, int num, const uint8_t *p);
-+int pgpSetPubMpiDSA(pgpDig dig, int num, const uint8_t *p);
-+int pgpVerifyDSA(pgpDig dig, uint8_t *hash, size_t hashlen);
-+
- #endif /* _RPMDIGEST_H */
---- ./rpmio/digest_beecrypt.c.orig 2011-05-10 15:54:41.000000000 +0000
-+++ ./rpmio/digest_beecrypt.c 2011-05-10 15:54:41.000000000 +0000
-@@ -0,0 +1,493 @@
-+#include "system.h"
-+
-+#include
-+#include
-+#include
-+#include
-+#include
-+#include
-+#include
-+#include
-+#if HAVE_BEECRYPT_API_H
-+#include
-+#include
-+#include
-+#endif
-+
-+#include
-+#include "rpmio/digest.h"
-+#include "rpmio/rpmio_internal.h"
-+
-+#include "debug.h"
-+
-+/* interface to beecrpyt crypto framework */
-+
-+/**************************** init ************************************/
-+
-+int rpmInitCrypto(void) {
-+ return 0;
-+}
-+
-+int rpmFreeCrypto(void) {
-+ return 0;
-+}
-+
-+/**************************** helpers ************************************/
-+
-+static inline unsigned int pgpMpiBits(const uint8_t *p)
-+{
-+ return ((p[0] << 8) | p[1]);
-+}
-+
-+static inline size_t pgpMpiLen(const uint8_t *p)
-+{
-+ return (2 + ((pgpMpiBits(p)+7)>>3));
-+}
-+
-+static inline char * pgpHexCvt(char *t, const byte *s, int nbytes)
-+ /*@modifies *t @*/
-+{
-+ static char hex[] = "0123456789abcdef";
-+ while (nbytes-- > 0) {
-+ unsigned int i;
-+ i = *s++;
-+ *t++ = hex[ (i >> 4) & 0xf ];
-+ *t++ = hex[ (i ) & 0xf ];
-+ }
-+ *t = '\0';
-+ return t;
-+}
-+
-+static const char * pgpMpiHex(const byte *p)
-+{
-+ static char prbuf[2048];
-+ char *t = prbuf;
-+ t = pgpHexCvt(t, p+2, pgpMpiLen(p)-2);
-+ return prbuf;
-+}
-+
-+static int pgpHexSet(int lbits, mpnumber * mpn, const byte * p)
-+{
-+ unsigned int mbits = pgpMpiBits(p);
-+ unsigned int nbits;
-+ unsigned int nbytes;
-+ char *t;
-+ unsigned int ix;
-+
-+ nbits = (lbits > mbits ? lbits : mbits);
-+ nbytes = ((nbits + 7) >> 3);
-+ t = xmalloc(2*nbytes+1);
-+ ix = 2 * ((nbits - mbits) >> 3);
-+
-+ if (ix > 0) memset(t, (int)'0', ix);
-+ strcpy(t+ix, pgpMpiHex(p));
-+ (void) mpnsethex(mpn, t);
-+ t = _free(t);
-+ return 0;
-+}
-+
-+void pgpCleanRSADSA(pgpDig dig)
-+{
-+ if (!dig)
-+ return;
-+ if (dig->keydata) {
-+ dig->keydata= _free(dig->keydata);
-+ }
-+ if (dig->sigdata) {
-+ dig->sigdata = _free(dig->sigdata);
-+ }
-+}
-+
-+
-+/****************************** RSA **************************************/
-+
-+struct pgpDigSigRSA_s {
-+ mpnumber c;
-+};
-+
-+struct pgpDigPubRSA_s {
-+ rsapk rsa_pk;
-+};
-+
-+int
-+pgpSetSigMpiRSA(pgpDig dig, int num, const uint8_t *p)
-+{
-+ struct pgpDigSigRSA_s *sig;
-+ if (num != 0)
-+ return 1;
-+ if (!dig->sigdata)
-+ dig->sigdata = xcalloc(1, sizeof(*sig));
-+ sig = dig->sigdata;
-+ if (!sig)
-+ return 1;
-+ (void) mpnsethex(&sig->c, pgpMpiHex(p));
-+ return 0;
-+}
-+
-+int
-+pgpSetPubMpiRSA(pgpDig dig, int num, const uint8_t *p)
-+{
-+ struct pgpDigPubRSA_s *pub;
-+
-+ if (!dig->keydata)
-+ dig->keydata = xcalloc(1, sizeof(*pub));
-+ pub = dig->keydata;
-+ if (!pub)
-+ return 1;
-+ switch(num) {
-+ case 0:
-+ (void) mpbsethex(&pub->rsa_pk.n, pgpMpiHex(p));
-+ return 0;
-+ case 1:
-+ (void) mpnsethex(&pub->rsa_pk.e, pgpMpiHex(p));
-+ return 0;
-+ default:
-+ return 1;
-+ }
-+}
-+
-+static inline unsigned char nibble(char c)
-+{
-+ if (c >= '0' && c <= '9')
-+ return (c - '0');
-+ if (c >= 'A' && c <= 'F')
-+ return (c - 'A') + 10;
-+ if (c >= 'a' && c <= 'f')
-+ return (c - 'a') + 10;
-+ return 0;
-+}
-+
-+int pgpVerifyRSA(pgpDig dig, uint8_t *hash, size_t hashlen)
-+{
-+ const char * prefix = NULL;
-+ int res;
-+ mpnumber rsahm;
-+ struct pgpDigSigRSA_s *sig;
-+ struct pgpDigPubRSA_s *pub;
-+
-+ sig = dig->sigdata;
-+ pub = dig->keydata;
-+ if (!sig || !pub)
-+ return 1;
-+
-+ switch (dig->signature.hash_algo) {
-+ case PGPHASHALGO_MD5:
-+ prefix = "3020300c06082a864886f70d020505000410";
-+ break;
-+ case PGPHASHALGO_SHA1:
-+ prefix = "3021300906052b0e03021a05000414";
-+ break;
-+ case PGPHASHALGO_MD2:
-+ prefix = "3020300c06082a864886f70d020205000410";
-+ break;
-+ case PGPHASHALGO_SHA256:
-+ prefix = "3031300d060960864801650304020105000420";
-+ break;
-+ case PGPHASHALGO_SHA384:
-+ prefix = "3041300d060960864801650304020205000430";
-+ break;
-+ case PGPHASHALGO_SHA512:
-+ prefix = "3051300d060960864801650304020305000440";
-+ break;
-+ /* fallthrough for unsupported / unknown types */
-+ default:
-+ return 1;
-+ }
-+
-+ /* Generate RSA modulus parameter. */
-+ { unsigned int nbits = MP_WORDS_TO_BITS(sig->c.size);
-+ unsigned int nb = (nbits + 7) >> 3;
-+ byte *buf, *bp;
-+
-+ if (nb < 3)
-+ return 1;
-+ buf = xmalloc(nb);
-+ memset(buf, 0xff, nb);
-+ buf[0] = 0x00;
-+ buf[1] = 0x01;
-+ bp = buf + nb - strlen(prefix)/2 - hashlen - 1;
-+ if (bp < buf)
-+ return 1;
-+ *bp++ = 0;
-+ for (; *prefix; prefix += 2)
-+ *bp++ = (nibble(prefix[0]) << 4) | nibble(prefix[1]);
-+ memcpy(bp, hash, hashlen);
-+ mpnzero(&rsahm);
-+ (void) mpnsetbin(&rsahm, buf, nb);
-+ buf = _free(buf);
-+ }
-+#if HAVE_BEECRYPT_API_H
-+ res = rsavrfy(&pub->rsa_pk.n, &pub->rsa_pk.e, &sig->c, &rsahm) == 1 ? 0 : 1;
-+#else
-+ res = rsavrfy(&pub->rsa_pk, &rsahm, &sig->c) == 1 ? 0 : 1;
-+#endif
-+ mpnfree(&rsahm);
-+ return res;
-+}
-+
-+
-+/****************************** DSA **************************************/
-+
-+struct pgpDigSigDSA_s {
-+ mpnumber r;
-+ mpnumber s;
-+};
-+
-+struct pgpDigPubDSA_s {
-+ mpbarrett p;
-+ mpbarrett q;
-+ mpnumber g;
-+ mpnumber y;
-+};
-+
-+int
-+pgpSetSigMpiDSA(pgpDig dig, int num, const uint8_t *p)
-+{
-+ struct pgpDigSigDSA_s *sig;
-+
-+ if (!dig->sigdata)
-+ dig->sigdata = xcalloc(1, sizeof(*sig));
-+ sig = dig->sigdata;
-+ if (!sig)
-+ return 1;
-+ switch(num) {
-+ case 0:
-+ return pgpHexSet(160, &sig->r, p);
-+ case 1:
-+ return pgpHexSet(160, &sig->s, p);
-+ default:
-+ return 1;
-+ }
-+}
-+
-+int
-+pgpSetPubMpiDSA(pgpDig dig, int num, const uint8_t *p)
-+{
-+ struct pgpDigPubDSA_s *pub;
-+
-+ if (!dig->keydata)
-+ dig->keydata = xcalloc(1, sizeof(*pub));
-+ pub = dig->keydata;
-+ if (!pub)
-+ return 1;
-+ switch(num) {
-+ case 0:
-+ mpbsethex(&pub->p, pgpMpiHex(p));
-+ return 0;
-+ case 1:
-+ mpbsethex(&pub->q, pgpMpiHex(p));
-+ return 0;
-+ case 2:
-+ mpnsethex(&pub->g, pgpMpiHex(p));
-+ return 0;
-+ case 3:
-+ mpnsethex(&pub->y, pgpMpiHex(p));
-+ return 0;
-+ default:
-+ return 1;
-+ }
-+}
-+
-+int pgpVerifyDSA(pgpDig dig, uint8_t *hash, size_t hashlen)
-+{
-+ struct pgpDigSigDSA_s *sig;
-+ struct pgpDigPubDSA_s *pub;
-+ mpnumber hm;
-+ int res;
-+
-+ sig = dig->sigdata;
-+ pub = dig->keydata;
-+ if (!sig || !pub)
-+ return 1;
-+ mpnzero(&hm);
-+ mpnsetbin(&hm, hash, hashlen);
-+ res = dsavrfy(&pub->p, &pub->q, &pub->g, &hm, &pub->y, &sig->r, &sig->s) == 1 ? 0 : 1;
-+ mpnfree(&hm);
-+ return res;
-+}
-+
-+/**************************** digest ************************************/
-+
-+#ifdef SHA_DEBUG
-+#define DPRINTF(_a) fprintf _a
-+#else
-+#define DPRINTF(_a)
-+#endif
-+
-+/**
-+ * MD5/SHA1 digest private data.
-+ */
-+struct DIGEST_CTX_s {
-+ rpmDigestFlags flags; /*!< Bit(s) to control digest operation. */
-+ int algo; /*!< Used hash algorithm */
-+ uint32_t datalen; /*!< No. bytes in block of plaintext data. */
-+ uint32_t paramlen; /*!< No. bytes of digest parameters. */
-+ uint32_t digestlen; /*!< No. bytes of digest. */
-+ void * param; /*!< Digest parameters. */
-+ int (*Reset) (void * param)
-+ /*@modifies param @*/; /*!< Digest initialize. */
-+ int (*Update) (void * param, const byte * data, size_t size)
-+ /*@modifies param @*/; /*!< Digest transform. */
-+ int (*Digest) (void * param, /*@out@*/ byte * digest)
-+ /*@modifies param, digest @*/; /*!< Digest finish. */
-+};
-+
-+DIGEST_CTX
-+rpmDigestDup(DIGEST_CTX octx)
-+{
-+ DIGEST_CTX nctx;
-+ nctx = memcpy(xcalloc(1, sizeof(*nctx)), octx, sizeof(*nctx));
-+ nctx->param = memcpy(xcalloc(1, nctx->paramlen), octx->param, nctx->paramlen);
-+ return nctx;
-+}
-+
-+size_t
-+rpmDigestLength(int hashalgo)
-+{
-+ switch (hashalgo) {
-+ case PGPHASHALGO_MD5:
-+ return 16;
-+ case PGPHASHALGO_SHA1:
-+ return 20;
-+#if HAVE_BEECRYPT_API_H
-+ case PGPHASHALGO_SHA256:
-+ return 32;
-+ case PGPHASHALGO_SHA384:
-+ return 48;
-+ case PGPHASHALGO_SHA512:
-+ return 64;
-+#endif
-+ default:
-+ return 0;
-+ }
-+}
-+
-+DIGEST_CTX
-+rpmDigestInit(int hashalgo, rpmDigestFlags flags)
-+{
-+ DIGEST_CTX ctx = xcalloc(1, sizeof(*ctx));
-+ int xx;
-+
-+ ctx->flags = flags;
-+ ctx->algo = hashalgo;
-+
-+ switch (hashalgo) {
-+ case PGPHASHALGO_MD5:
-+ ctx->digestlen = 16;
-+ ctx->datalen = 64;
-+ ctx->paramlen = sizeof(md5Param);
-+ ctx->param = xcalloc(1, ctx->paramlen);
-+ ctx->Reset = (void *) md5Reset;
-+ ctx->Update = (void *) md5Update;
-+ ctx->Digest = (void *) md5Digest;
-+ break;
-+ case PGPHASHALGO_SHA1:
-+ ctx->digestlen = 20;
-+ ctx->datalen = 64;
-+ ctx->paramlen = sizeof(sha1Param);
-+ ctx->param = xcalloc(1, ctx->paramlen);
-+ ctx->Reset = (void *) sha1Reset;
-+ ctx->Update = (void *) sha1Update;
-+ ctx->Digest = (void *) sha1Digest;
-+ break;
-+#if HAVE_BEECRYPT_API_H
-+ case PGPHASHALGO_SHA256:
-+ ctx->digestlen = 32;
-+ ctx->datalen = 64;
-+ ctx->paramlen = sizeof(sha256Param);
-+ ctx->param = xcalloc(1, ctx->paramlen);
-+ ctx->Reset = (void *) sha256Reset;
-+ ctx->Update = (void *) sha256Update;
-+ ctx->Digest = (void *) sha256Digest;
-+ break;
-+ case PGPHASHALGO_SHA384:
-+ ctx->digestlen = 48;
-+ ctx->datalen = 128;
-+ ctx->paramlen = sizeof(sha384Param);
-+ ctx->param = xcalloc(1, ctx->paramlen);
-+ ctx->Reset = (void *) sha384Reset;
-+ ctx->Update = (void *) sha384Update;
-+ ctx->Digest = (void *) sha384Digest;
-+ break;
-+ case PGPHASHALGO_SHA512:
-+ ctx->digestlen = 64;
-+ ctx->datalen = 128;
-+ ctx->paramlen = sizeof(sha512Param);
-+ ctx->param = xcalloc(1, ctx->paramlen);
-+ ctx->Reset = (void *) sha512Reset;
-+ ctx->Update = (void *) sha512Update;
-+ ctx->Digest = (void *) sha512Digest;
-+ break;
-+#endif
-+ case PGPHASHALGO_RIPEMD160:
-+ case PGPHASHALGO_MD2:
-+ case PGPHASHALGO_TIGER192:
-+ case PGPHASHALGO_HAVAL_5_160:
-+ default:
-+ free(ctx);
-+ return NULL;
-+ }
-+
-+ xx = (*ctx->Reset) (ctx->param);
-+
-+DPRINTF((stderr, "*** Init(%x) ctx %p param %p\n", flags, ctx, ctx->param));
-+ return ctx;
-+}
-+
-+/* LCL: ctx->param may be modified, but ctx is abstract @*/
-+int
-+rpmDigestUpdate(DIGEST_CTX ctx, const void * data, size_t len)
-+{
-+ if (ctx == NULL)
-+ return -1;
-+
-+DPRINTF((stderr, "*** Update(%p,%p,%d) param %p \"%s\"\n", ctx, data, len, ctx->param, ((char *)data)));
-+ return (*ctx->Update) (ctx->param, data, len);
-+}
-+
-+int
-+rpmDigestFinal(DIGEST_CTX ctx, void ** datap, size_t *lenp, int asAscii)
-+{
-+ byte * digest;
-+ char * t;
-+ int i;
-+
-+ if (ctx == NULL)
-+ return -1;
-+ digest = xmalloc(ctx->digestlen);
-+
-+DPRINTF((stderr, "*** Final(%p,%p,%p,%d) param %p digest %p\n", ctx, datap, lenp, asAscii, ctx->param, digest));
-+ /* FIX: check rc */
-+ (void) (*ctx->Digest) (ctx->param, digest);
-+
-+ /* Return final digest. */
-+ if (!asAscii) {
-+ if (lenp) *lenp = ctx->digestlen;
-+ if (datap) {
-+ *datap = digest;
-+ digest = NULL;
-+ }
-+ } else {
-+ if (lenp) *lenp = (2*ctx->digestlen) + 1;
-+ if (datap) {
-+ const byte * s = (const byte *) digest;
-+ static const char hex[] = "0123456789abcdef";
-+
-+ *datap = t = xmalloc((2*ctx->digestlen) + 1);
-+ for (i = 0 ; i < ctx->digestlen; i++) {
-+ *t++ = hex[ (unsigned)((*s >> 4) & 0x0f) ];
-+ *t++ = hex[ (unsigned)((*s++ ) & 0x0f) ];
-+ }
-+ *t = '\0';
-+ }
-+ }
-+ if (digest) {
-+ memset(digest, 0, ctx->digestlen); /* In case it's sensitive */
-+ free(digest);
-+ }
-+ memset(ctx->param, 0, ctx->paramlen); /* In case it's sensitive */
-+ free(ctx->param);
-+ memset(ctx, 0, sizeof(*ctx)); /* In case it's sensitive */
-+ free(ctx);
-+ return 0;
-+}
---- ./rpmio/digest_nss.c.orig 2011-05-10 15:54:41.000000000 +0000
-+++ ./rpmio/digest_nss.c 2011-05-10 15:54:41.000000000 +0000
-@@ -0,0 +1,500 @@
-+#include
-+#include
-+#include
-+#include
-+
-+#include "system.h"
-+
-+#include
-+#include "rpmio/rpmio_internal.h"
-+#include "rpmio/digest.h"
-+
-+#include "debug.h"
-+
-+/* interface to nss crypto framework */
-+
-+/**************************** init ************************************/
-+
-+static int _crypto_initialized = 0;
-+static int _new_process = 1;
-+
-+/*
-+ * Only flag for re-initialization here, in the common case the child
-+ * exec()'s something else shutting down NSS here would be waste of time.
-+ */
-+static void at_forkchild(void) {
-+ _new_process = 1;
-+}
-+
-+int rpmInitCrypto(void) {
-+ int rc = 0;
-+
-+ /* Lazy NSS shutdown for re-initialization after fork() */
-+ if (_new_process && _crypto_initialized) {
-+ rpmFreeCrypto();
-+ }
-+
-+ /* Initialize NSS if not already done */
-+ if (!_crypto_initialized) {
-+ if (NSS_NoDB_Init(NULL) != SECSuccess) {
-+ rc = -1;
-+ } else {
-+ _crypto_initialized = 1;
-+ }
-+ }
-+
-+ /* Register one post-fork handler per process */
-+ if (_new_process) {
-+ if (pthread_atfork(NULL, NULL, at_forkchild) != 0) {
-+ rpmlog(RPMLOG_WARNING, _("Failed to register fork handler: %m\n"));
-+ }
-+ _new_process = 0;
-+ }
-+ return rc;
-+}
-+
-+int rpmInitCrypto(void) {
-+ int rc = 0;
-+
-+ if (!_crypto_initialized) {
-+ if (NSS_NoDB_Init(NULL) != SECSuccess) {
-+ rc = -1;
-+ } else {
-+ _crypto_initialized = 1;
-+ }
-+ }
-+ return rc;
-+}
-+
-+int rpmFreeCrypto(void)
-+{
-+ int rc = 0;
-+ if (_crypto_initialized) {
-+ rc = (NSS_Shutdown() != SECSuccess);
-+ _crypto_initialized = 0;
-+ }
-+ return rc;
-+}
-+
-+/**************************** helpers ************************************/
-+
-+static SECKEYPublicKey *pgpNewPublicKey(KeyType type)
-+{
-+ PRArenaPool *arena;
-+ SECKEYPublicKey *key;
-+
-+ arena = PORT_NewArena(DER_DEFAULT_CHUNKSIZE);
-+ if (arena == NULL)
-+ return NULL;
-+
-+ key = PORT_ArenaZAlloc(arena, sizeof(SECKEYPublicKey));
-+
-+ if (key == NULL) {
-+ PORT_FreeArena(arena, PR_FALSE);
-+ return NULL;
-+ }
-+
-+ key->keyType = type;
-+ key->pkcs11ID = CK_INVALID_HANDLE;
-+ key->pkcs11Slot = NULL;
-+ key->arena = arena;
-+ return key;
-+}
-+
-+static SECItem *pgpMpiItem(PRArenaPool *arena, SECItem *item, const uint8_t *p)
-+{
-+ size_t nbytes = pgpMpiLen(p)-2;
-+
-+ if (item == NULL) {
-+ if ((item=SECITEM_AllocItem(arena, item, nbytes)) == NULL)
-+ return item;
-+ } else {
-+ if (arena != NULL)
-+ item->data = PORT_ArenaGrow(arena, item->data, item->len, nbytes);
-+ else
-+ item->data = PORT_Realloc(item->data, nbytes);
-+
-+ if (item->data == NULL) {
-+ if (arena == NULL)
-+ SECITEM_FreeItem(item, PR_TRUE);
-+ return NULL;
-+ }
-+ }
-+
-+ memcpy(item->data, p+2, nbytes);
-+ item->len = nbytes;
-+ return item;
-+}
-+
-+static int pgpMpiSet(unsigned int lbits,
-+ void *dest, const uint8_t * p, const uint8_t * pend)
-+{
-+ unsigned int mbits = pgpMpiBits(p);
-+ unsigned int nbits;
-+ size_t nbytes;
-+ char *t = dest;
-+ unsigned int ix;
-+
-+ if ((p + ((mbits+7) >> 3)) > pend)
-+ return 1;
-+
-+ if (mbits > lbits)
-+ return 1;
-+
-+ nbits = (lbits > mbits ? lbits : mbits);
-+ nbytes = ((nbits + 7) >> 3);
-+ ix = (nbits - mbits) >> 3;
-+
-+ if (ix > 0) memset(t, '\0', ix);
-+ memcpy(t+ix, p+2, nbytes-ix);
-+
-+ return 0;
-+}
-+
-+void pgpCleanRSADSA(pgpDig dig)
-+{
-+ if (!dig)
-+ return;
-+ if (dig->keydata) {
-+ SECKEY_DestroyPublicKey(dig->keydata);
-+ dig->keydata = NULL;
-+ }
-+ if (dig->sigdata) {
-+ SECITEM_ZfreeItem(dig->sigdata, PR_TRUE);
-+ dig->sigdata = NULL;
-+ }
-+}
-+
-+/****************************** RSA **************************************/
-+
-+int
-+pgpSetSigMpiRSA(struct pgpDig_s *dig, int num, const uint8_t *p, const uint8_t *pend)
-+{
-+ SECItem *sig;
-+
-+ if (num != 0)
-+ return 1;
-+ sig = dig->rsasigdata;
-+ sig = pgpMpiItem(NULL, sig, p);
-+ dig->rsasigdata = sig;
-+ if (sig == NULL)
-+ return 1;
-+ return 0;
-+}
-+
-+int
-+pgpSetPubMpiRSA(struct pgpDig_s *dig, int num, const uint8_t *p, const uint8_t *pend)
-+{
-+ SECKEYPublicKey *pub;
-+
-+ if (!dig->keydata)
-+ dig->keydata = pgpNewPublicKey(rsaKey);
-+ pub = dig->keydata;
-+ if (!pub)
-+ return 1;
-+ switch(num) {
-+ case 0:
-+ pgpMpiItem(pub->arena, &pub->u.rsa.modulus, p);
-+ return 0;
-+ case 1:
-+ pgpMpiItem(pub->arena, &pub->u.rsa.publicExponent, p);
-+ return 0;
-+ default:
-+ return 1;
-+ }
-+}
-+
-+int pgpVerifyRSA(pgpDig dig, uint8_t *hash, size_t hashlen)
-+{
-+ SECOidTag sigalg;
-+ SECItem digest;
-+ SECKEYPublicKey *pub;
-+ SECItem *sig;
-+ SECItem *newsig = NULL;
-+ size_t siglen;
-+ int res;
-+
-+ switch (dig->hash_algo) {
-+ case PGPHASHALGO_MD5:
-+ sigalg = SEC_OID_PKCS1_MD5_WITH_RSA_ENCRYPTION;
-+ break;
-+ case PGPHASHALGO_SHA1:
-+ sigalg = SEC_OID_PKCS1_SHA1_WITH_RSA_ENCRYPTION;
-+ break;
-+ case PGPHASHALGO_MD2:
-+ sigalg = SEC_OID_PKCS1_MD2_WITH_RSA_ENCRYPTION;
-+ break;
-+ case PGPHASHALGO_SHA256:
-+ sigalg = SEC_OID_PKCS1_SHA256_WITH_RSA_ENCRYPTION;
-+ break;
-+ case PGPHASHALGO_SHA384:
-+ sigalg = SEC_OID_PKCS1_SHA384_WITH_RSA_ENCRYPTION;
-+ break;
-+ case PGPHASHALGO_SHA512:
-+ sigalg = SEC_OID_PKCS1_SHA512_WITH_RSA_ENCRYPTION;
-+ break;
-+ /* fallthrough for unsupported / unknown types */
-+ default:
-+ sigalg = SEC_OID_UNKNOWN;
-+ break;
-+ }
-+ digest.type = siBuffer;
-+ digest.data = hash;
-+ digest.len = hashlen;
-+
-+ pub = dig->keydata;
-+ sig = dig->sigdata;
-+ siglen = SECKEY_SignatureLen(dig->keydata);
-+
-+ /* Zero-pad signature data up to expected size if necessary */
-+ if (siglen > sig->len) {
-+ size_t pad = siglen - sig->len;
-+ if ((newsig = SECITEM_AllocItem(NULL, NULL, siglen)) == NULL) {
-+ return 1;
-+ }
-+ memset(newsig->data, 0, pad);
-+ memcpy(newsig->data+pad, sig->data, sig->len);
-+ sig = newsig;
-+ }
-+
-+ if (VFY_VerifyDigest(&digest, pub, sig, sigalg, NULL) == SECSuccess)
-+ res = 0;
-+ else
-+ res = 1;
-+
-+ if (newsig) {
-+ SECITEM_ZfreeItem(newsig, 1);
-+ }
-+ return res;
-+}
-+
-+
-+/****************************** DSA **************************************/
-+
-+int
-+pgpSetSigMpiDSA(struct pgpDig_s *dig, int num, const uint8_t *p, const uint8_t *pend)
-+{
-+ SECItem *sig, *new;
-+
-+ switch(num) {
-+ case 0:
-+ sig = SECITEM_AllocItem(NULL, NULL, 2*DSA_SUBPRIME_LEN);
-+ dig->sigdata = sig;
-+ memset(sig->data, 0, 2*DSA_SUBPRIME_LEN);
-+ pgpMpiSet(DSA_SUBPRIME_LEN*8, sig->data, p, pend);
-+ return 0;
-+ case 1:
-+ sig = dig->sigdata;
-+ if (!sig)
-+ return 1;
-+ pgpMpiSet(DSA_SUBPRIME_LEN*8, sig->data + DSA_SUBPRIME_LEN, p, pend);
-+ new = SECITEM_AllocItem(NULL, NULL, 0);
-+ if (!new)
-+ return 1;
-+ if (DSAU_EncodeDerSig(new, sig) != SECSuccess)
-+ return 1;
-+ SECITEM_FreeItem(sig, PR_TRUE);
-+ dig->sigdata = new;
-+ return 0;
-+ default:
-+ return 1;
-+ }
-+}
-+
-+int
-+pgpSetPubMpiDSA(struct pgpDig_s *dig, int num, const uint8_t *p, const uint8_t *pend)
-+{
-+ SECKEYPublicKey *pub;
-+
-+ if (!dig->keydata)
-+ dig->keydata = pgpNewPublicKey(dsaKey);
-+ pub = dig->keydata;
-+ if (!pub)
-+ return 1;
-+ switch(num) {
-+ case 0:
-+ pgpMpiItem(pub->arena, &pub->u.dsa.params.prime, p);
-+ return 0;
-+ case 1:
-+ pgpMpiItem(pub->arena, &pub->u.dsa.params.subPrime, p);
-+ return 0;
-+ case 2:
-+ pgpMpiItem(pub->arena, &pub->u.dsa.params.base, p);
-+ return 0;
-+ case 3:
-+ pgpMpiItem(pub->arena, &pub->u.dsa.publicValue, p);
-+ return 0;
-+ default:
-+ return 1;
-+ }
-+}
-+
-+int pgpVerifyDSA(pgpDig dig, uint8_t *hash, size_t hashlen)
-+{
-+ SECItem digest;
-+ SECKEYPublicKey *pub;
-+ SECItem *sig;
-+
-+ sig = dig->sigdata;
-+ pub = dig->keydata;
-+ digest.type = siBuffer;
-+ digest.data = hash;
-+ digest.len = hashlen;
-+ if (VFY_VerifyDigest(&digest, pub, sig, SEC_OID_ANSIX9_DSA_SIGNATURE_WITH_SHA1_DIGEST, NULL) == SECSuccess)
-+ return 0;
-+ else
-+ return 1;
-+}
-+
-+
-+/**************************** digest ************************************/
-+
-+
-+#ifdef SHA_DEBUG
-+#define DPRINTF(_a) fprintf _a
-+#else
-+#define DPRINTF(_a)
-+#endif
-+
-+
-+/**
-+ * MD5/SHA1 digest private data.
-+ */
-+struct DIGEST_CTX_s {
-+ rpmDigestFlags flags; /*!< Bit(s) to control digest operation. */
-+ HASHContext *hashctx; /*!< Internal NSS hash context. */
-+ int algo; /*!< Used hash algorithm */
-+};
-+
-+DIGEST_CTX
-+rpmDigestDup(DIGEST_CTX octx)
-+{
-+ DIGEST_CTX nctx;
-+ nctx = memcpy(xcalloc(1, sizeof(*nctx)), octx, sizeof(*nctx));
-+ nctx->hashctx = HASH_Clone(octx->hashctx);
-+ if (nctx->hashctx == NULL) {
-+ fprintf(stderr, "HASH_Clone failed\n");
-+ exit(EXIT_FAILURE); /* FIX: callers do not bother checking error return */
-+ }
-+ return nctx;
-+}
-+
-+RPM_GNUC_PURE
-+static HASH_HashType getHashType(int hashalgo)
-+{
-+ switch (hashalgo) {
-+ case PGPHASHALGO_MD5:
-+ return HASH_AlgMD5;
-+ break;
-+ case PGPHASHALGO_MD2:
-+ return HASH_AlgMD2;
-+ break;
-+ case PGPHASHALGO_SHA1:
-+ return HASH_AlgSHA1;
-+ break;
-+ case PGPHASHALGO_SHA256:
-+ return HASH_AlgSHA256;
-+ break;
-+ case PGPHASHALGO_SHA384:
-+ return HASH_AlgSHA384;
-+ break;
-+ case PGPHASHALGO_SHA512:
-+ return HASH_AlgSHA512;
-+ break;
-+ case PGPHASHALGO_RIPEMD160:
-+ case PGPHASHALGO_TIGER192:
-+ case PGPHASHALGO_HAVAL_5_160:
-+ default:
-+ return HASH_AlgNULL;
-+ break;
-+ }
-+}
-+
-+size_t
-+rpmDigestLength(int hashalgo)
-+{
-+ return HASH_ResultLen(getHashType(hashalgo));
-+}
-+
-+DIGEST_CTX
-+rpmDigestInit(int hashalgo, rpmDigestFlags flags)
-+{
-+ HASH_HashType type;
-+ HASHContext *hashctx = NULL;
-+ DIGEST_CTX ctx = NULL;
-+
-+ if (type == HASH_AlgNULL || rpmInitCrypto() < 0)
-+ return NULL;
-+
-+ if ((hashctx = HASH_Create(type)) == NULL)
-+ return NULL;
-+ ctx = xcalloc(1, sizeof(*ctx));
-+ ctx->flags = flags;
-+ ctx->algo = hashalgo;
-+ ctx->hashctx = hashctx;
-+ HASH_Begin(ctx->hashctx);
-+
-+DPRINTF((stderr, "*** Init(%x) ctx %p hashctx %p\n", flags, ctx, ctx->hashctx));
-+ return ctx;
-+}
-+
-+int
-+rpmDigestUpdate(DIGEST_CTX ctx, const void * data, size_t len)
-+{
-+ size_t partlen;
-+ const unsigned char *ptr = data;
-+
-+ if (ctx == NULL)
-+ return -1;
-+
-+DPRINTF((stderr, "*** Update(%p,%p,%zd) hashctx %p \"%s\"\n", ctx, data, len, ctx->hashctx, ((char *)data)));
-+ partlen = ~(unsigned int)0xFF;
-+ while (len > 0) {
-+ if (len < partlen) {
-+ partlen = len;
-+ }
-+ HASH_Update(ctx->hashctx, ptr, partlen);
-+ ptr += partlen;
-+ len -= partlen;
-+ }
-+ return 0;
-+}
-+
-+int
-+rpmDigestFinal(DIGEST_CTX ctx, void ** datap, size_t *lenp, int asAscii)
-+{
-+ unsigned char * digest;
-+ unsigned int digestlen;
-+
-+ if (ctx == NULL)
-+ return -1;
-+ digestlen = HASH_ResultLenContext(ctx->hashctx);
-+ digest = xmalloc(digestlen);
-+
-+DPRINTF((stderr, "*** Final(%p,%p,%p,%zd) hashctx %p digest %p\n", ctx, datap, lenp, asAscii, ctx->hashctx, digest));
-+/* FIX: check rc */
-+ HASH_End(ctx->hashctx, digest, (unsigned int *) &digestlen, digestlen);
-+
-+ /* Return final digest. */
-+ if (!asAscii) {
-+ if (lenp) *lenp = digestlen;
-+ if (datap) {
-+ *datap = digest;
-+ digest = NULL;
-+ }
-+ } else {
-+ if (lenp) *lenp = (2*digestlen) + 1;
-+ if (datap) {
-+ const uint8_t * s = (const uint8_t *) digest;
-+ *datap = pgpHexStr(s, digestlen);
-+ }
-+ }
-+ if (digest) {
-+ memset(digest, 0, digestlen); /* In case it's sensitive */
-+ free(digest);
-+ }
-+ HASH_Destroy(ctx->hashctx);
-+ memset(ctx, 0, sizeof(*ctx)); /* In case it's sensitive */
-+ free(ctx);
-+ return 0;
-+}
---- ./rpmio/rpmpgp.c.orig 2010-12-03 12:11:57.000000000 +0000
-+++ ./rpmio/rpmpgp.c 2011-05-10 16:01:58.000000000 +0000
-@@ -20,9 +20,6 @@ static int _debug = 0;
-
- static int _print = 0;
-
--static int _crypto_initialized = 0;
--static int _new_process = 1;
--
- typedef const struct pgpValTbl_s {
- int val;
- char const * const str;
-@@ -315,89 +312,6 @@ int pgpValTok(pgpValTbl vs, const char *
- } while ((++vs)->val != -1);
- return vs->val;
- }
--/**
-- * @return 0 on success
-- */
--static int pgpMpiSet(const char * pre, unsigned int lbits,
-- uint8_t *dest, const uint8_t * p, const uint8_t * pend)
--{
-- unsigned int mbits = pgpMpiBits(p);
-- unsigned int nbits;
-- size_t nbytes;
-- uint8_t *t = dest;
-- unsigned int ix;
--
-- if ((p + ((mbits+7) >> 3)) > pend)
-- return 1;
--
-- if (mbits > lbits)
-- return 1;
--
-- nbits = (lbits > mbits ? lbits : mbits);
-- nbytes = ((nbits + 7) >> 3);
-- ix = (nbits - mbits) >> 3;
--
--if (_debug)
--fprintf(stderr, "*** mbits %u nbits %u nbytes %zu ix %u\n", mbits, nbits, nbytes, ix);
-- if (ix > 0) memset(t, '\0', ix);
-- memcpy(t+ix, p+2, nbytes-ix);
--if (_debug)
--fprintf(stderr, "*** %s %s\n", pre, pgpHexStr(dest, nbytes));
--
-- return 0;
--}
--
--/**
-- * @return NULL on error
-- */
--static SECItem *pgpMpiItem(PRArenaPool *arena, SECItem *item, const uint8_t *p)
--{
-- size_t nbytes = pgpMpiLen(p)-2;
--
-- if (item == NULL) {
-- if ((item=SECITEM_AllocItem(arena, item, nbytes)) == NULL)
-- return item;
-- } else {
-- if (arena != NULL)
-- item->data = PORT_ArenaGrow(arena, item->data, item->len, nbytes);
-- else
-- item->data = PORT_Realloc(item->data, nbytes);
--
-- if (item->data == NULL) {
-- if (arena == NULL)
-- SECITEM_FreeItem(item, PR_TRUE);
-- return NULL;
-- }
-- }
--
-- memcpy(item->data, p+2, nbytes);
-- item->len = nbytes;
-- return item;
--}
--/*@=boundswrite@*/
--
--static SECKEYPublicKey *pgpNewPublicKey(KeyType type)
--{
-- PRArenaPool *arena;
-- SECKEYPublicKey *key;
--
-- arena = PORT_NewArena(DER_DEFAULT_CHUNKSIZE);
-- if (arena == NULL)
-- return NULL;
--
-- key = PORT_ArenaZAlloc(arena, sizeof(SECKEYPublicKey));
--
-- if (key == NULL) {
-- PORT_FreeArena(arena, PR_FALSE);
-- return NULL;
-- }
--
-- key->keyType = type;
-- key->pkcs11ID = CK_INVALID_HANDLE;
-- key->pkcs11Slot = NULL;
-- key->arena = arena;
-- return key;
--}
-
- /** \ingroup rpmpgp
- * Is buffer at beginning of an OpenPGP packet?
-@@ -593,29 +507,16 @@ static int pgpPrtSigParams(pgpTag tag, u
- {
- const uint8_t * pend = h + hlen;
- size_t i;
-- SECItem dsaraw;
-- unsigned char dsabuf[2*DSA_SUBPRIME_LEN];
- char *mpi;
-
-- dsaraw.type = 0;
-- dsaraw.data = dsabuf;
-- dsaraw.len = sizeof(dsabuf);
--
- for (i = 0; p < pend; i++, p += pgpMpiLen(p)) {
- if (pubkey_algo == PGPPUBKEYALGO_RSA) {
- if (i >= 1) break;
- if (_dig &&
- (sigtype == PGPSIGTYPE_BINARY || sigtype == PGPSIGTYPE_TEXT))
- {
-- switch (i) {
-- case 0: /* m**d */
-- _dig->sigdata = pgpMpiItem(NULL, _dig->sigdata, p);
-- if (_dig->sigdata == NULL)
-- return 1;
-- break;
-- default:
-- break;
-- }
-+ if (pgpSetSigMpiRSA(_dig, i, p))
-+ return 1;
- }
- pgpPrtStr("", pgpSigRSA[i]);
- } else if (pubkey_algo == PGPPUBKEYALGO_DSA) {
-@@ -623,30 +524,8 @@ static int pgpPrtSigParams(pgpTag tag, u
- if (_dig &&
- (sigtype == PGPSIGTYPE_BINARY || sigtype == PGPSIGTYPE_TEXT))
- {
-- int xx;
-- xx = 0;
-- switch (i) {
-- case 0:
-- memset(dsaraw.data, '\0', 2*DSA_SUBPRIME_LEN);
-- /* r */
-- xx = pgpMpiSet(pgpSigDSA[i], DSA_SUBPRIME_LEN*8, dsaraw.data, p, pend);
-- break;
-- case 1: /* s */
-- xx = pgpMpiSet(pgpSigDSA[i], DSA_SUBPRIME_LEN*8, dsaraw.data + DSA_SUBPRIME_LEN, p, pend);
-- if (_dig->sigdata != NULL)
-- SECITEM_FreeItem(_dig->sigdata, PR_FALSE);
-- else if ((_dig->sigdata=SECITEM_AllocItem(NULL, NULL, 0)) == NULL) {
-- xx = 1;
-- break;
-- }
-- if (DSAU_EncodeDerSig(_dig->sigdata, &dsaraw) != SECSuccess)
-- xx = 1;
-- break;
-- default:
-- xx = 1;
-- break;
-- }
-- if (xx) return xx;
-+ if (pgpSetSigMpiDSA(_dig, i, p))
-+ return 1;
- }
- pgpPrtStr("", pgpSigDSA[i]);
- } else {
-@@ -838,49 +717,11 @@ static const uint8_t * pgpPrtPubkeyParam
- char * mpi;
- if (pubkey_algo == PGPPUBKEYALGO_RSA) {
- if (i >= 2) break;
-- if (_dig) {
-- if (_dig->keydata == NULL) {
-- _dig->keydata = pgpNewPublicKey(rsaKey);
-- if (_dig->keydata == NULL)
-- break; /* error abort? */
-- }
-- switch (i) {
-- case 0: /* n */
-- pgpMpiItem(_dig->keydata->arena, &_dig->keydata->u.rsa.modulus, p);
-- break;
-- case 1: /* e */
-- pgpMpiItem(_dig->keydata->arena, &_dig->keydata->u.rsa.publicExponent, p);
-- break;
-- default:
-- break;
-- }
-- }
-+ pgpSetPubMpiRSA(_dig, i, p);
- pgpPrtStr("", pgpPublicRSA[i]);
- } else if (pubkey_algo == PGPPUBKEYALGO_DSA) {
- if (i >= 4) break;
-- if (_dig) {
-- if (_dig->keydata == NULL) {
-- _dig->keydata = pgpNewPublicKey(dsaKey);
-- if (_dig->keydata == NULL)
-- break; /* error abort? */
-- }
-- switch (i) {
-- case 0: /* p */
-- pgpMpiItem(_dig->keydata->arena, &_dig->keydata->u.dsa.params.prime, p);
-- break;
-- case 1: /* q */
-- pgpMpiItem(_dig->keydata->arena, &_dig->keydata->u.dsa.params.subPrime, p);
-- break;
-- case 2: /* g */
-- pgpMpiItem(_dig->keydata->arena, &_dig->keydata->u.dsa.params.base, p);
-- break;
-- case 3: /* y */
-- pgpMpiItem(_dig->keydata->arena, &_dig->keydata->u.dsa.publicValue, p);
-- break;
-- default:
-- break;
-- }
-- }
-+ pgpSetPubMpiDSA(_dig, i, p);
- pgpPrtStr("", pgpPublicDSA[i]);
- } else if (pubkey_algo == PGPPUBKEYALGO_ELGAMAL_ENCRYPT) {
- if (i >= 3) break;
-@@ -1265,15 +1106,7 @@ void pgpCleanDig(pgpDig dig)
- memset(&dig->signature, 0, sizeof(dig->signature));
- memset(&dig->pubkey, 0, sizeof(dig->pubkey));
-
-- if (dig->keydata != NULL) {
-- SECKEY_DestroyPublicKey(dig->keydata);
-- dig->keydata = NULL;
-- }
--
-- if (dig->sigdata != NULL) {
-- SECITEM_ZfreeItem(dig->sigdata, PR_TRUE);
-- dig->sigdata = NULL;
-- }
-+ pgpCleanRSADSA(dig);
- }
- return;
- }
-@@ -1315,39 +1148,6 @@ int pgpPrtPkts(const uint8_t * pkts, siz
- return 0;
- }
-
--static SECOidTag getSigAlg(pgpDigParams sigp)
--{
-- SECOidTag sigalg = SEC_OID_UNKNOWN;
-- if (sigp->pubkey_algo == PGPPUBKEYALGO_DSA) {
-- /* assume SHA1 for now, NSS doesn't have SECOID's for other types */
-- sigalg = SEC_OID_ANSIX9_DSA_SIGNATURE_WITH_SHA1_DIGEST;
-- } else if (sigp->pubkey_algo == PGPPUBKEYALGO_RSA) {
-- switch (sigp->hash_algo) {
-- case PGPHASHALGO_MD5:
-- sigalg = SEC_OID_PKCS1_MD5_WITH_RSA_ENCRYPTION;
-- break;
-- case PGPHASHALGO_MD2:
-- sigalg = SEC_OID_PKCS1_MD2_WITH_RSA_ENCRYPTION;
-- break;
-- case PGPHASHALGO_SHA1:
-- sigalg = SEC_OID_PKCS1_SHA1_WITH_RSA_ENCRYPTION;
-- break;
-- case PGPHASHALGO_SHA256:
-- sigalg = SEC_OID_PKCS1_SHA256_WITH_RSA_ENCRYPTION;
-- break;
-- case PGPHASHALGO_SHA384:
-- sigalg = SEC_OID_PKCS1_SHA384_WITH_RSA_ENCRYPTION;
-- break;
-- case PGPHASHALGO_SHA512:
-- sigalg = SEC_OID_PKCS1_SHA512_WITH_RSA_ENCRYPTION;
-- break;
-- default:
-- break;
-- }
-- }
-- return sigalg;
--}
--
- char *pgpIdentItem(pgpDigParams digp)
- {
- char *id = NULL;
-@@ -1396,30 +1196,12 @@ rpmRC pgpVerifySig(pgpDig dig, DIGEST_CT
-
- /* Compare leading 16 bits of digest for quick check. */
- if (hash && memcmp(hash, sigp->signhash16, 2) == 0) {
-- SECItem digest = { .type = siBuffer, .data = hash, .len = hashlen };
-- SECItem *sig = dig->sigdata;
--
-- /* Zero-pad RSA signature to expected size if necessary */
-- if (sigp->pubkey_algo == PGPPUBKEYALGO_RSA) {
-- size_t siglen = SECKEY_SignatureLen(dig->keydata);
-- if (siglen > sig->len) {
-- size_t pad = siglen - sig->len;
-- if ((sig = SECITEM_AllocItem(NULL, NULL, siglen)) == NULL) {
-- goto exit;
-- }
-- memset(sig->data, 0, pad);
-- memcpy(sig->data+pad, dig->sigdata->data, dig->sigdata->len);
-- }
-- }
--
-- /* XXX VFY_VerifyDigest() is deprecated in NSS 3.12 */
-- if (VFY_VerifyDigest(&digest, dig->keydata, sig,
-- getSigAlg(sigp), NULL) == SECSuccess) {
-- res = RPMRC_OK;
-- }
--
-- if (sig != dig->sigdata) {
-- SECITEM_ZfreeItem(sig, 1);
-+ if (sigp->pubkey_algo == PGPPUBKEYALGO_RSA) {
-+ if (!pgpVerifyRSA(dig, hash, hashlen))
-+ res = RPMRC_OK;
-+ } else if (sigp->pubkey_algo == PGPPUBKEYALGO_DSA) {
-+ if (!pgpVerifyDSA(dig, hash, hashlen))
-+ res = RPMRC_OK;
- }
- }
-
-@@ -1607,50 +1389,3 @@ char * pgpArmorWrap(int atype, const uns
- return val;
- }
-
--/*
-- * Only flag for re-initialization here, in the common case the child
-- * exec()'s something else shutting down NSS here would be waste of time.
-- */
--static void at_forkchild(void)
--{
-- _new_process = 1;
--}
--
--int rpmInitCrypto(void) {
-- int rc = 0;
--
-- /* Lazy NSS shutdown for re-initialization after fork() */
-- if (_new_process && _crypto_initialized) {
-- rpmFreeCrypto();
-- }
--
-- /* Initialize NSS if not already done */
-- if (!_crypto_initialized) {
-- if (NSS_NoDB_Init(NULL) != SECSuccess) {
-- rc = -1;
-- } else {
-- _crypto_initialized = 1;
-- }
-- }
--
-- /* Register one post-fork handler per process */
-- if (_new_process) {
-- if (pthread_atfork(NULL, NULL, at_forkchild) != 0) {
-- rpmlog(RPMLOG_WARNING, _("Failed to register fork handler: %m\n"));
-- }
-- _new_process = 0;
-- }
-- return rc;
--}
--
--int rpmFreeCrypto(void)
--{
-- int rc = 0;
-- if (_crypto_initialized) {
-- rc = (NSS_Shutdown() != SECSuccess);
-- _crypto_initialized = 0;
-- }
-- return rc;
--}
--
--
diff --git a/rpm-gst-provides.patch b/rpm-gst-provides.patch
deleted file mode 100644
index 7c4fe6c..0000000
--- a/rpm-gst-provides.patch
+++ /dev/null
@@ -1,14 +0,0 @@
-Index: ./autodeps/linux.prov
-===================================================================
---- ./autodeps/linux.prov
-+++ ./autodeps/linux.prov
-@@ -102,4 +102,9 @@ fi
- [ -x /usr/lib/rpm/find-provides.ksyms ] &&
- printf "%s\n" "${filelist[@]}" | /usr/lib/rpm/find-provides.ksyms "$@"
-
-+#
-+# --- GStreamer provides, codecs
-+[ -x /usr/lib/rpm/gstreamer-provides ] &&
-+ printf "%s\n" "${filelist[@]}" | /usr/lib/rpm/gstreamer-provides | sort -u
-+
- exit 0
diff --git a/rpm-python.changes b/rpm-python.changes
index 2c2353d..0746aa6 100644
--- a/rpm-python.changes
+++ b/rpm-python.changes
@@ -1,58 +1,3 @@
--------------------------------------------------------------------
-Wed Feb 23 14:01:41 CET 2011 - mls@suse.de
-
-- drop standard python directories from filelist [bnc#229189]
-
--------------------------------------------------------------------
-Fri Oct 22 15:52:32 UTC 2010 - coolo@novell.com
-
-- adapt second spec file to changes done to rpm.spec
-
--------------------------------------------------------------------
-Mon Oct 18 11:03:53 CEST 2010 - dmueller@suse.de
-
-- adapt buildrequires
-
--------------------------------------------------------------------
-Thu Feb 12 16:52:26 CET 2009 - ro@suse.de
-
-- adapt buildrequires
-
--------------------------------------------------------------------
-Wed Oct 8 11:24:22 CEST 2008 - cthiel@suse.de
-
-- added libelf-devel to BuildRequires to fix build
-
--------------------------------------------------------------------
-Thu Sep 11 15:33:52 CEST 2008 - mls@suse.de
-
-- update to 4.4.2.3 to get rid of >50 patches
-
--------------------------------------------------------------------
-Sat Aug 30 21:23:38 CEST 2008 - cthiel@suse.de
-
-- add libselinux-devel to BuildRequires
-
--------------------------------------------------------------------
-Thu Aug 7 16:05:51 CEST 2008 - dmueller@suse.de
-
-- fix build against python 2.6
-
--------------------------------------------------------------------
-Thu Mar 27 14:47:18 CET 2008 - coolo@suse.de
-
-- fix buildrequires
-
--------------------------------------------------------------------
-Fri May 25 16:20:53 CEST 2007 - mls@suse.de
-
-- fix unicode queries
-
--------------------------------------------------------------------
-Fri Mar 30 15:06:28 CEST 2007 - rguenther@suse.de
-
-- add ncurses-devel and zlib-devel BuildRequires.
-
-------------------------------------------------------------------
Wed Oct 18 22:59:02 CEST 2006 - mls@suse.de
diff --git a/rpm-python.spec b/rpm-python.spec
index 60aa95f..ef05e37 100644
--- a/rpm-python.spec
+++ b/rpm-python.spec
@@ -1,37 +1,27 @@
#
-# spec file for package rpm-python
+# spec file for package rpm-python (Version 4.4.2)
#
-# Copyright (c) 2011 SUSE LINUX Products GmbH, Nuernberg, Germany.
+# Copyright (c) 2006 SUSE LINUX Products GmbH, Nuernberg, Germany.
+# This file and all modifications and additions to the pristine
+# package are under the same license as the package itself.
#
-# All modifications and additions to the file contributed by third parties
-# remain the property of their copyright owners, unless otherwise agreed
-# upon. The license for this file, and modifications and additions to the
-# file, is the same license as for the pristine package itself (unless the
-# license for the pristine package is not an Open Source License, in which
-# case the license is the MIT License). An "Open Source License" is a
-# license that conforms to the Open Source Definition (Version 1.9)
-# published by the Open Source Initiative.
-
# Please submit bugfixes or comments via http://bugs.opensuse.org/
#
# norootforbuild
-
Name: rpm-python
-BuildRequires: file-devel libbz2-devel libelf-devel libselinux-devel libsemanage-devel lua-devel ncurses-devel popt-devel
-BuildRequires: libacl-devel libcap-devel python-devel xz-devel zlib-devel
-#!BuildIgnore: rpmlint-Factory
-License: GPLv2+
+BuildRequires: python-devel
+License: GNU General Public License (GPL)
Group: System/Packages
Summary: Python Bindings for Manipulating RPM Packages
-Version: 4.9.0
-Release: 7
+Version: 4.4.2
+Release: 76
Requires: rpm = %{version}
+
%py_requires
Source99: rpm.spec
%{expand:%(sed -n -e '/^Source:/,/^BuildRoot:/p' <%_sourcedir/rpm.spec)}
-%global with_python 1
%description
The rpm-python package contains a module that permits applications
@@ -54,7 +44,7 @@ Authors:
%install
rm -rf $RPM_BUILD_ROOT
mkdir -p $RPM_BUILD_ROOT/usr/lib
-# only installing in python/ does not work because rpm links against
+# only installing in python/ does not work because rpm links agains
# installed libs at install time
make DESTDIR="$RPM_BUILD_ROOT" install
find "%{buildroot}" -not -type d -and -not -path %{buildroot}%{_libdir}/python%{py_ver}/site-packages/rpm/\* -print0 | xargs -0 rm
@@ -69,6 +59,22 @@ rm -rf $RPM_BUILD_ROOT
%files
%defattr(-,root,root)
-%{_libdir}/python*/*/*
+%{_libdir}/python*
-%changelog
+%changelog -n rpm-python
+* Wed Oct 18 2006 - mls@suse.de
+- use rpm.spec for building instead of duplication everything
+- delete superfluous .a and .la files [#202604]
+- create .pyc and .pyo files [#205711]
+* Sun Oct 15 2006 - schwab@suse.de
+- Make sure config.rpath is present.
+* Fri Sep 22 2006 - aj@suse.de
+- Fix for python2.5.
+* Thu Sep 21 2006 - lnussel@suse.de
+- do not package beecrypt python bindings as libbeecrypt is not
+ packaged either
+- fix literal %%{version} in Requires tag
+* Thu Sep 21 2006 - lnussel@suse.de
+- fix build with python 2.5 by overriding autodetection
+* Tue Sep 19 2006 - rguenther@suse.de
+- split from rpm package
diff --git a/rpm-shorten-changelog.diff b/rpm-shorten-changelog.diff
deleted file mode 100644
index 7090250..0000000
--- a/rpm-shorten-changelog.diff
+++ /dev/null
@@ -1,88 +0,0 @@
---- ./build/pack.c.orig 2011-02-15 13:03:56.000000000 +0000
-+++ ./build/pack.c 2011-05-11 15:35:07.000000000 +0000
-@@ -671,6 +671,63 @@ static rpmRC checkPackages(char *pkgchec
- return RPMRC_OK;
- }
-
-+static void trimChangelog(Header h)
-+{
-+ static int oneshot;
-+ static int cuttime, minnum, maxnum;
-+ int * times;
-+ char ** names = 0, ** texts = 0;
-+ int i, keep, count = 0;
-+
-+ if (!oneshot) {
-+ char *binarychangelogtrim = rpmExpand("%{?_binarychangelogtrim}", NULL);
-+ oneshot = 1;
-+ if (binarychangelogtrim && *binarychangelogtrim) {
-+ maxnum = atoi(binarychangelogtrim);
-+ binarychangelogtrim = strchr(binarychangelogtrim, ',');
-+ if (binarychangelogtrim)
-+ binarychangelogtrim++;
-+ }
-+ if (binarychangelogtrim && *binarychangelogtrim) {
-+ cuttime = atoi(binarychangelogtrim);
-+ binarychangelogtrim = strchr(binarychangelogtrim, ',');
-+ if (binarychangelogtrim)
-+ binarychangelogtrim++;
-+ }
-+ if (binarychangelogtrim && *binarychangelogtrim) {
-+ minnum = atoi(binarychangelogtrim);
-+ binarychangelogtrim = strchr(binarychangelogtrim, ',');
-+ }
-+ }
-+ if (!cuttime && !minnum && !maxnum) {
-+ return;
-+ }
-+ if (!headerGetEntry(h, RPMTAG_CHANGELOGTIME, NULL, (void **) ×, &count))
-+ return;
-+ if ((!cuttime || count <= minnum) && (!maxnum || count <= maxnum)) {
-+ return;
-+ }
-+ keep = count;
-+ if (maxnum && keep > maxnum)
-+ keep = maxnum;
-+ if (cuttime) {
-+ for (i = 0; i < keep; i++) {
-+ if (i >= minnum && times[i] < cuttime)
-+ break;
-+ }
-+ keep = i;
-+ }
-+ if (keep >= count)
-+ return;
-+ headerGetEntry(h, RPMTAG_CHANGELOGNAME, NULL, (void **) &names, &count);
-+ headerGetEntry(h, RPMTAG_CHANGELOGTEXT, NULL, (void **) &texts, &count);
-+ headerModifyEntry(h, RPMTAG_CHANGELOGTIME, RPM_INT32_TYPE, times, keep);
-+ headerModifyEntry(h, RPMTAG_CHANGELOGNAME, RPM_STRING_ARRAY_TYPE, names, keep);
-+ headerModifyEntry(h, RPMTAG_CHANGELOGTEXT, RPM_STRING_ARRAY_TYPE, texts, keep);
-+ free(names);
-+ free(texts);
-+}
-+
- rpmRC packageBinaries(rpmSpec spec, const char *cookie, int cheating)
- {
- struct cpioSourceArchive_s csabuf;
-@@ -680,6 +737,7 @@ rpmRC packageBinaries(rpmSpec spec, cons
- Package pkg;
- char *pkglist = NULL;
-
-+ trimChangelog(spec->packages->header);
- for (pkg = spec->packages; pkg != NULL; pkg = pkg->next) {
- char *fn;
-
---- ./build/parseChangelog.c.orig 2010-12-03 12:11:57.000000000 +0000
-+++ ./build/parseChangelog.c 2011-05-11 15:33:22.000000000 +0000
-@@ -168,6 +168,11 @@ static rpmRC addChangelog(Header h, ARGV
- return RPMRC_FAIL;
- }
-
-+ /* workaround old suse oddity */
-+ if (*s == '-' && s[1] == ' ') {
-+ s += 2;
-+ }
-+
- /* name */
- name = s;
- while (*s != '\0') s++;
diff --git a/rpm-suse_macros b/rpm-suse_macros
index 37237e0..12d409f 100644
--- a/rpm-suse_macros
+++ b/rpm-suse_macros
@@ -1,5 +1,10 @@
-# need to keep this around for a while
-%suse_check %{nil}
+%suse_check \
+ %{?buildroot:RPM_BUILD_ROOT=\"%{buildroot}\"\
+ export RPM_BUILD_ROOT}\
+ test -x /usr/sbin/Check -a $UID = 0 -o -x /usr/sbin/Check -a ! -z "$RPM_BUILD_ROOT" && {\
+ echo "I call /usr/sbin/Check..."\
+ /usr/sbin/Check\
+ }
# directories
%_infodir %{_prefix}/share/info
@@ -9,20 +14,35 @@
%_defaultdocdir %{_usr}/share/doc/packages
# package build macros
-%make_install make install DESTDIR=%{?buildroot}
-%makeinstall make DESTDIR=%{?buildroot:%{buildroot}} install
-%rb_arch %(echo %{_host_cpu}-linux | sed -e "s/i686/i586/" -e "s/armv5tel/armv4l/" -e "s/hppa2.0/hppa/")
-%rb_ver %(/usr/bin/ruby -e 'puts VERSION.sub(/\\\.\\\d$/, "")')
-%insserv_prereq insserv sed
-%fillup_prereq fillup coreutils grep diffutils
-%suseconfig_fonts_prereq perl aaa_base
+%makeinstall make DESTDIR=%{buildroot} install
+%tcl_version %(echo 'puts [package require Tcl]' | tclsh)
+%insserv_prereq insserv
+%fillup_prereq fillup fileutils
%install_info_prereq info
-# _suse_os_install_post is defined in brp-checks-suse
-%__os_install_post %{?_suse_os_install_post}%{!?_suse_os_install_post: \
+%__os_install_post \
+ %{suse_check} \
/usr/lib/rpm/brp-compress \
- /usr/lib/rpm/brp-symlink \
-%{nil}}
+%{nil}
+
+# perl_vendorarch is defined
+# perl_vendorlib is defined
+%perl_make_install make DESTDIR=$RPM_BUILD_ROOT install_vendor
+
+%perl_process_packlist(n:) \
+ mkdir -p $RPM_BUILD_ROOT/var/adm/perl-modules \
+ test -f $RPM_BUILD_ROOT%{perl_archlib}/perllocal.pod && { sed -e "s@$RPM_BUILD_ROOT@@g" < $RPM_BUILD_ROOT%{perl_archlib}/perllocal.pod > $RPM_BUILD_ROOT/var/adm/perl-modules/%{-n:%{-n*}}%{!-n:%{name}} ; } ; \
+ test -n "$RPM_BUILD_ROOT" -a -d $RPM_BUILD_ROOT/%perl_sitearch/auto && find $RPM_BUILD_ROOT/%perl_sitearch/auto -name .packlist -print0 | xargs -0 -r perl -spi -e "s@$RPM_BUILD_ROOT@@g" ; \
+ test -n "$RPM_BUILD_ROOT" -a -d $RPM_BUILD_ROOT/%perl_vendorarch/auto && find $RPM_BUILD_ROOT/%perl_vendorarch/auto -name .packlist -print0 | xargs -0 -r perl -spi -e "s@$RPM_BUILD_ROOT@@g" ; \
+ rm -f $RPM_BUILD_ROOT%{perl_archlib}/perllocal.pod \
+ %nil
+
+# macro: %suse_update_desktop_file
+# Used to add easily a category to .desktop files according to XDG
+# standard.
+%suse_update_desktop_file(:-:) \
+ /usr/lib/rpm/suse_update_desktop_file.sh %{**} || exit 1 \
+ %nil
# macro: %restart_on_update()
# Used to restart a service in postun section, if we are
@@ -68,7 +88,6 @@
%is_plus %(if test -f /.buildenv ; then source /.buildenv ; if [[ "$BUILD_BASENAME" == *+kde ]] ; then echo 1 ; else echo 0 ; fi ; else echo 0 ; fi)
-# deprecated, use %set_permissions instead
%run_permissions() \
if test "$YAST_IS_RUNNING" != "instsys" ; then \
if test -x /sbin/SuSEconfig -a -f /sbin/conf.d/SuSEconfig.permissions ; then \
@@ -83,37 +102,23 @@
if test -x /sbin/SuSEconfig -a -f /sbin/conf.d/SuSEconfig.%{-m*} ; then \
/sbin/SuSEconfig --module %{-m*} \
else \
- echo -e "\\nWARNING: SuSEconfig or requested SuSEconfig module not present!\\n" ; \
+ echo -e "\\nERROR: SuSEconfig or requested SuSEconfig module not present!\\n" ; exit 1 \
fi \
fi \
%nil
-# macro: run_suseconfig_fonts
-# call SuSEconfig modules necessary for font setup
-# options:
-# -c (the fonts are CJK fonts, also do setup which is only needed
-# for CJK)
-%run_suseconfig_fonts(c) \
- if test -z "$YAST_IS_RUNNING" ; then \
- if test -x /sbin/conf.d/SuSEconfig.fonts ; then \
- %run_suseconfig -m fonts \
- fi \
- %{-c:if test -x /sbin/conf.d/SuSEconfig.ghostscript-cjk ; then \
- %run_suseconfig -m ghostscript-cjk \
- fi} \
- fi \
- %nil
-
-%set_permissions(f:) \
- if [ -x /usr/bin/chkstat ]; then \
- /usr/bin/chkstat -n --set --system %{**} \
- fi \
- %nil
-
-%verify_permissions(e:f:) \
- /usr/bin/chkstat -n --warn --system %{**} 1>&2 \
+%verify_permissions(:-:) \
+ if test -f /etc/sysconfig/security ; then \
+ source /etc/sysconfig/security \
+ fi \
+ PERMFILES="/etc/permissions" \
+ for PERMEXT in $PERMISSION_SECURITY ; do \
+ if test -f /etc/permissions.$PERMEXT ; then \
+ PERMFILES="$PERMFILES /etc/permissions.$PERMEXT" \
+ fi \
+ done \
+ /usr/bin/chkstat -n %{**} $PERMFILES 1>&2 \
%nil
-
# %{suse_update_config [-fcl] [dirs...]}
# -f: force, ignore timestamp
# -c: no config.guess,config.sub
@@ -174,9 +179,11 @@
# instead of package name)
# -f (skip fillup parts)
# -i (skip insserv parts)
+# -s (specify START_ variable names, otherwise tr a-z A-Z is used)
# -y (default start-variable value to yes)
# Used only if X-UnitedLinux-Default-Enabled is not specified
# in the init script
+# -p (ignored for backwards compatibility)
# -Y (force_yes: always activate, discard setting before update)
# arguments:
# [if "-n" first argument as package name]
@@ -185,61 +192,110 @@
# and
# name of (old) START variable (unless -s is given)
#
-# template for variables into /etc/sysconfig/package:
-# /var/adm/fillup-templates/sysconfig.package
+# template for variables into etc/sysconfig/package:
+# var/adm/fillup-templates/sysconfig.package
+# template for variables into etc/rc.config:
+# var/adm/fillup-templates/rc.config.package
%fillup_and_insserv(finpsyY) \
- %{-p:echo "-p option for fillup_and_insserv no longer supported (ever only used on SL8.0)"; exit 1;} \
- %{-s:echo "STARTVAR for fillup_and_insserv no longer supported (rc.config is gone since SL8.0)"; exit 1;} \
- test -n "$FIRST_ARG" || FIRST_ARG=$1 \
- %{-Y:FORCE_YES=1}%{!-Y:FORCE_YES=0} \
- set -- %{?*} \
- %{-n:PNAME=$1 ; shift }%{!-n:PNAME=%{name}} \
- INSSRV_ARRAY="" \
- while [ ${#*} -gt 0 ] ; do \
- SCRIPTNAME=$1 \
- shift \
- SV_B='^### BEGIN INIT INFO' \
- SV_E='^### END INIT INFO' \
- SV_KW=Default-Enabled \
- SV_VALUE=`sed -n -e "/$SV_B/,/$SV_E/{/^# [^[:space:]]*$SV_KW:[[:space:]]*\\([^[:space:]]*\\).*/s//\\1/p;}" < /etc/init.d/$SCRIPTNAME` \
- test "$FORCE_YES" = "1" && SV_VALUE="yes" \
- test -n "$SV_VALUE" || SV_VALUE=%{-y:"yes"}%{!-y:"no"} \
- INSSRV_ARRAY="$INSSRV_ARRAY $SCRIPTNAME $SV_VALUE" \
- done \
- %{!-f: %{do_real_fillup}} \
- %{!-i: %{add_start_if_needed $INSSRV_ARRAY } } \
- %nil
+ test -n "$FIRST_ARG" || FIRST_ARG=$1 \
+ %{-Y:FORCE_YES=1}%{!-Y:FORCE_YES=0} \
+ REMOVED_START=no \
+ set -- %{?*} \
+ %{-n:PNAME=$1 ; shift }%{!-n:PNAME=%{name}} \
+ INSSRV_ARRAY="" \
+ while [ ${#*} -gt 0 ] ; do \
+ SCRIPTNAME=$1 \
+ shift \
+ %{-s:STARTVAR=$1 ; shift} \
+ %{!-s:STARTVAR=START_`echo $SCRIPTNAME | tr a-z.- A-Z__`} \
+ SV_B='^### BEGIN INIT INFO' \
+ SV_E='^### END INIT INFO' \
+ SV_KW=X-UnitedLinux-Default-Enabled \
+ SV_VAL=`sed -n -e "/$SV_B/,/$SV_E/{/^# $SV_KW:[[:space:]]*\\([^[:space:]]*\\).*/s//\\1/p;}" < etc/init.d/$SCRIPTNAME` \
+ test -n "$SV_VAL" || SV_VAL=%{-y:"yes"}%{!-y:"no"} \
+ eval $STARTVAR=$SV_VAL \
+ test -n "$STARTVAR" -a -n "$SCRIPTNAME" || { \
+ echo "STARTVARIABLE or SCRIPTNAME unknown" \
+ exit 1 \
+ } \
+ INSSRV_ARRAY="$INSSRV_ARRAY $SCRIPTNAME $STARTVAR" \
+ %{!-f:%{!-i:grep -q "$STARTVAR=" var/adm/fillup-templates/rc.config.$PNAME.del 2>/dev/null || \
+ echo -e "#\\n# Start service $SCRIPTNAME\\n#\\n$STARTVAR=\\"${!STARTVAR}\\"\\n\\n" >> var/adm/fillup-templates/rc.config.$PNAME.del } } \
+ done \
+ %{!-f: %{do_real_fillup}} \
+ %{!-i: %{add_start_if_needed $INSSRV_ARRAY } }
# do_real_fillup: internal macro
# this part really calls fillup for the appropriate files
#
%do_real_fillup() \
- TEMPLATE_DIR=/var/adm/fillup-templates \
+ TEMPLATE_DIR=var/adm/fillup-templates \
SYSC_TEMPLATE=$TEMPLATE_DIR/sysconfig.$PNAME \
+ RC_TEMPLATE=$TEMPLATE_DIR/rc.config.$PNAME \
SD_NAME="" \
- %{sysc_fillup}
+ if [ -x bin/fillup ] ; then \
+ %{sysc_fillup} \
+ # remove the START_ variables from the base fillup template \
+ if [ -f $RC_TEMPLATE.del -a -f $RC_TEMPLATE ] ; then \
+ bin/fillup -q -r -i $RC_TEMPLATE $RC_TEMPLATE.del /dev/null \
+ mv $RC_TEMPLATE.new $RC_TEMPLATE \
+ fi \
+ if [ -f etc/rc.config ] ; then \
+ %{rc_fillup} \
+ # remove the deprecated START_ variables from rc.config \
+ if [ -f $TEMPLATE_DIR/rc.config.$PNAME.del ] ; then \
+ rm -f etc/rc.config.xtract \
+ bin/fillup -q -r -i etc/rc.config $RC_TEMPLATE.del etc/rc.config.xtract \
+ if [ -f etc/rc.config.xtract ] ; then \
+ . etc/rc.config.xtract \
+ fi \
+ rm -f etc/rc.config.xtract $RC_TEMPLATE.del \
+ if [ -f etc/rc.config.new ] ; then \
+ cmp -s etc/rc.config.new etc/rc.config || REMOVED_START=yes \
+ mv etc/rc.config.new etc/rc.config \
+ fi \
+ fi \
+ fi \
+ else \
+ echo "ERROR: fillup not found. This should not happen. Please compare" \
+ echo "etc/rc.config and $TEMPLATE_DIR/rc.config.$PNAME and" \
+ echo "update by hand." \
+ fi
# add_start_if_needed: internally used by fillup_and_insserv
%add_start_if_needed() \
- set -- %{?*} \
+ set -- %{?*} \
while [ ${#*} -gt 0 ] ; do \
SCRIPTNAME=$1 \
- SV_VALUE=$2 \
+ STARTVAR=$2 \
shift 2 \
- test -n "$SCRIPTNAME" -a -n "$SV_VALUE" || { echo "SCRIPTNAME or SV_VALUE unknown"; exit 1;} \
- if test "$FIRST_ARG" = "1" -a "$SV_VALUE" = "no" ; then \
- /sbin/insserv ${YAST_IS_RUNNING:+-f} -r /etc/init.d/$SCRIPTNAME \
- elif test "$FIRST_ARG" = "1" -o "$FORCE_YES" = "1" ; then \
- /sbin/insserv ${YAST_IS_RUNNING:+-f} /etc/init.d/$SCRIPTNAME \
+ test -n "$STARTVAR" -a -n "$SCRIPTNAME" || { \
+ echo "STARTVAR or SCRIPTNAME unknown" \
+ exit 1 \
+ } \
+ if test "$FIRST_ARG" = "1" -o "$REMOVED_START" = "yes" -o "$FORCE_YES" = "1" ; then \
+ if test -n "$YAST_IS_RUNNING" ; then \
+ INSSERV_FORCE="-f" \
+ else \
+ INSSERV_FORCE="" \
+ fi \
+ if test "${!STARTVAR}" = "yes" -o "$FORCE_YES" = "1" ; then \
+ sbin/insserv $INSSERV_FORCE etc/init.d/$SCRIPTNAME \
+ else \
+ sbin/insserv $INSSERV_FORCE -r etc/init.d/$SCRIPTNAME \
+ fi \
fi \
done
# macro: insserv_cleanup
+# only here to be able to define this to nil
+# for versions prior to 7.1
%insserv_cleanup() \
- /sbin/insserv /etc/init.d
+ sbin/insserv etc/init.d
# macro: fillup_only
-# do the fillup for sysconfig files
+# do the fillup for sysconfig files and if needed extraction
+# of older variables from rc.config and rc.config.d
# template naming convention:
# .../fillup-templates/sysconfig.$NAME1[-$NAME2]
# NAME1: the name of the sysconfig-file
@@ -252,115 +308,152 @@
# -d use a subdirectory of sysconfig
# (last arg as directory name)
%fillup_only(dans) \
- %{-n:PNAME=%{1}}%{!-n:PNAME=%{name}} \
- %{-s:SUBPNAME=-%{2}}%{!-s:SUBPNAME=%{-a:-%{name}}} \
- TEMPLATE_DIR=/var/adm/fillup-templates \
+ %{-n:PNAME=%{1}}%{!-n:PNAME=%{name}} \
+ %{-s:SUBPNAME=-%{2}}%{!-s:SUBPNAME=%{-a:-%{name}}} \
+ TEMPLATE_DIR=var/adm/fillup-templates \
SYSC_TEMPLATE=$TEMPLATE_DIR/sysconfig.$PNAME$SUBPNAME \
+ RC_TEMPLATE=$TEMPLATE_DIR/rc.config.$PNAME \
SD_NAME="" \
%{-d:%{-s:SD_NAME=%{3}/}%{!-s:SD_NAME=%{2}/}} \
- %{sysc_fillup} \
- %nil
-
-# internal only: sysc_fillup
-%sysc_fillup() \
- if [ -x /bin/fillup ] ; then \
- if [ -f $SYSC_TEMPLATE ] ; then \
- echo "Updating /etc/sysconfig/$SD_NAME$PNAME..." \
- mkdir -p /etc/sysconfig/$SD_NAME \
- touch /etc/sysconfig/$SD_NAME$PNAME \
- /bin/fillup -q /etc/sysconfig/$SD_NAME$PNAME $SYSC_TEMPLATE \
- fi \
+ if [ -x bin/fillup ] ; then \
+ %{sysc_fillup} \
+ %{rc_fillup} \
else \
echo "ERROR: fillup not found. This should not happen. Please compare" \
- echo "/etc/sysconfig/$PNAME and $TEMPLATE_DIR/sysconfig.$PNAME and" \
+ echo "etc/rc.config and $RC_TEMPLATE and" \
echo "update by hand." \
fi
+# internal only: rc_fillup
+%rc_fillup() \
+ # maybe the fillup template for rc.config is old, make sure we do not readd stuff here \
+ if [ -f $SYSC_TEMPLATE -a -f $RC_TEMPLATE ] ; then \
+ bin/fillup -q -r -i $RC_TEMPLATE $SYSC_TEMPLATE /dev/null \
+ mv $RC_TEMPLATE.new $RC_TEMPLATE \
+ fi \
+ # do the normal fillup for the rc.config variables \
+ if [ -f $RC_TEMPLATE ] ; then \
+ bin/fillup -q -d = etc/rc.config $RC_TEMPLATE \
+ fi
+
+# internal only: sysc_fillup
+%sysc_fillup() \
+ if [ -f $SYSC_TEMPLATE ] ; then \
+ echo "Updating etc/sysconfig/$SD_NAME$PNAME..." \
+ if [ ! -d etc/sysconfig/$SD_NAME ] ; then \
+ mkdir -p etc/sysconfig/$SD_NAME \
+ fi \
+ if [ -f etc/rc.config.d/$PNAME.rc.config ] ; then \
+ if [ -f etc/sysconfig/$SD_NAME$PNAME ] ; then \
+ bin/fillup -q etc/sysconfig/$SD_NAME$PNAME etc/rc.config.d/$PNAME.rc.config \
+ rm -f etc/rc.config.d/$PNAME.rc.config \
+ else \
+ mv etc/rc.config.d/$PNAME.rc.config etc/sysconfig/$SD_NAME$PNAME \
+ fi \
+ fi \
+ if [ ! -f etc/rc.config ] ; then \
+ test -f etc/sysconfig/$SD_NAME$PNAME || touch etc/sysconfig/$SD_NAME$PNAME \
+ bin/fillup -q etc/sysconfig/$SD_NAME$PNAME $SYSC_TEMPLATE \
+ else \
+ if [ ! -f etc/sysconfig/$SD_NAME$PNAME ] ; then \
+ bin/fillup -q -r -i etc/rc.config $SYSC_TEMPLATE etc/sysconfig/$SD_NAME$PNAME \
+ else \
+ bin/fillup -q -r -i etc/rc.config $SYSC_TEMPLATE etc/sysconfig/$SD_NAME$PNAME.tmp \
+ bin/fillup -q etc/sysconfig/$SD_NAME$PNAME etc/sysconfig/$SD_NAME$PNAME.tmp \
+ rm -f etc/sysconfig/$SD_NAME$PNAME.tmp \
+ fi \
+ if [ -f etc/rc.config.new ] ; then \
+ mv etc/rc.config.new etc/rc.config \
+ fi \
+ fi\
+ fi
+
# macro: rename_sysconfig_variable
-# as the name says, rename a variable in the file given with -f
+# as the name says, rename a variable in rc.config
+# or with -f in the given file
%rename_sysconfig_variable(f:) \
- %{!-f:echo "missing argument for rename_sysconfig_variable"; exit 1; }%{-f:FILE=%{-f*}} \
- if [ -f $FILE ] ; then \
- sed -i -e "s/^%{1}=/%{2}=/" $FILE \
- fi
+ %{!-f:FILE=etc/rc.config}%{-f:FILE=%{-f*}} \
+ if [ -f $FILE ] ; then \
+ sed -e "s/^%{1}=/%{2}=/" $FILE > $FILE.new \
+ mv $FILE.new $FILE \
+ fi
+
+# macro: save_rc_config_d_was_in_filelist
+# only used for packages that erroneously had the rc.config.d file
+# in their filelist
+%save_rc_config_d_was_in_filelist(n) \
+ %{-n:PNAME=%{?*}}%{!-n:PNAME=%{name}} \
+ mkdir -p etc/sysconfig \
+ if [ -f etc/rc.config.d/$PNAME.rc.config -a ! -f etc/sysconfig/$PNAME ] ; then \
+ cp etc/rc.config.d/$PNAME.rc.config etc/sysconfig/$PNAME \
+ fi
# macro: remove_and_set
-# remove variables from sysconfig.$NAME
+# remove variables from rc.config and sysconfig.$NAME
# (both if existant) and set them in the environment
# for further handling in postinstall
# options: -n set package name
# -y default to yes if not found (otherwise no)
%remove_and_set(n:y) \
- %{-n:PNAME=%{-n*}}%{!-n:PNAME=%{name}} \
- DEF_VAL=%{-y:"yes"}%{!-y:"no"} \
- DEL_TEMPL=/var/adm/fillup-templates/$PNAME.del \
- rm -f $DEL_TEMPL \
- for var in %{?*} ; do \
- echo -e "#\\n$var=$DEF_VAL\\n" >> $DEL_TEMPL \
- done \
- if [ -f /etc/sysconfig/$PNAME ] ; then \
- /bin/fillup -q -t -r -i -d "=" /etc/sysconfig/$PNAME $DEL_TEMPL /etc/sysconfig/$PNAME.deleted.$$ \
- test -f /etc/sysconfig/$PNAME.new && mv /etc/sysconfig/$PNAME.new /etc/sysconfig/$PNAME \
- fi \
- for i in $DEL_TEMPL /etc/sysconfig/$PNAME.deleted.$$ ; do \
- if [ -f $i ] ; then \
- . $i \
- rm -f $i \
- fi \
- done
+ %{-n:PNAME=%{-n*}}%{!-n:PNAME=%{name}} \
+ DEF_VAL=%{-y:"yes"}%{!-y:"no"} \
+ DEL_TEMPL=var/adm/fillup-templates/$PNAME.del \
+ rm -f $DEL_TEMPL \
+ for var in %{?*} ; do \
+ echo -e "#\\n$var=$DEF_VAL\\n" >> $DEL_TEMPL \
+ done \
+ if [ -f etc/rc.config ] ; then \
+ bin/fillup -q -t -r -i -d "=" etc/rc.config $DEL_TEMPL etc/rc.config.xtract \
+ test -f etc/rc.config.new && mv etc/rc.config.new etc/rc.config \
+ fi \
+ if [ -f etc/sysconfig/$PNAME ] ; then \
+ bin/fillup -q -t -r -i -d "=" etc/sysconfig/$PNAME $DEL_TEMPL etc/rc.config.xtract.too \
+ test -f etc/sysconfig/$PNAME.new && mv etc/sysconfig/$PNAME.new etc/sysconfig/$PNAME \
+ fi \
+ for i in $DEL_TEMPL etc/rc.config.xtract etc/rc.config.xtract.too ; do \
+ if [ -f $i ] ; then \
+ . $i \
+ rm -f $i \
+ fi \
+ done
%insserv_force_if_yast() \
- /sbin/insserv ${YAST_IS_RUNNING:+-f} %{?*}
+ if test -n "$YAST_IS_RUNNING" ; then \
+ INSSERV_FORCE="-f" \
+ else \
+ INSSERV_FORCE="" \
+ fi \
+ sbin/insserv $INSSERV_FORCE %{?*}
%run_ldconfig /sbin/ldconfig
%install_info(:-:) \
- ALL_ARGS=(%{**}) \
- NUM_ARGS=${#ALL_ARGS[@]} \
- if test -x /sbin/install-info ; then \
- if test -e "${ALL_ARGS[$((NUM_ARGS-1))]}" ; then \
- /sbin/install-info "${ALL_ARGS[@]}" \
- fi \
- fi ;
+ ALL_ARGS=(%{**}) \
+ NUM_ARGS=${#ALL_ARGS[@]} \
+ if test -x sbin/install-info ; then \
+ if test -e "${ALL_ARGS[$((NUM_ARGS-1))]}" ; then \
+ sbin/install-info "${ALL_ARGS[@]}" \
+ fi \
+ fi ;
%install_info_delete(:-:) \
- ALL_ARGS=(%{**}) \
- NUM_ARGS=${#ALL_ARGS[@]} \
- if test -x /sbin/install-info ; then \
- if ! test -e "${ALL_ARGS[$((NUM_ARGS-1))]}" ; then \
- /sbin/install-info --quiet --delete "${ALL_ARGS[@]}" \
- fi ; \
- fi ;
+ ALL_ARGS=(%{**}) \
+ NUM_ARGS=${#ALL_ARGS[@]} \
+ if test -x sbin/install-info ; then \
+ if ! test -e "${ALL_ARGS[$((NUM_ARGS-1))]}" ; then \
+ sbin/install-info --quiet --delete "${ALL_ARGS[@]}" \
+ fi ; \
+ fi ;
-# find-supplements.ksyms parses this macro directly out of the spec file:
-%supplements_kernel_module() \
- %{expand:%(if ! rpm -q kernel-syms > /dev/null; then echo "%fail Please add the kernel-syms package to BuildRequires"; fi)}
-
-%suse_version 1140
+%suse_version 901
%sles_version 0
%ul_version 0
+
%do_profiling 1
-%cflags_profile_generate -fprofile-generate
-%cflags_profile_feedback -fprofile-use
-
-%suse_install_update_message() \
- install -D -m 644 %1 %buildroot/var/adm/update-messages/%{name}-%{version}-%{release}-%(basename %1).txt \
-%nil
-
-%suse_install_update_script() \
- install -D -m 755 %1 %buildroot/var/adm/update-scripts/%{name}-%{version}-%{release}-%(basename %1).txt \
-%nil
-
-# Template for lang sub-package.
-%lang_package(n:) \
-%package %{-n:-n %{-n*}-}lang \
-Summary: Languages for package %{name} \
-Group: System/Localization \
-Requires: %{-n:%{-n*}}%{!-n:%{name}} = %{version} \
-Provides: %{-n:%{-n*}}%{!-n:%{name}}-lang-all = %{version} \
-Supplements: packageand(bundle-lang-other:%{-n:%{-n*}}%{!-n:%{name}}) \
-BuildArch: noarch \
-%description %{-n:-n %{-n*}-}lang \
-Provides translations to the package %{name}
+%cflags_profile_generate -fprofile-arcs
+%cflags_profile_feedback -fbranch-probabilities
+# find-supplements.ksyms parses this macro directly out of the spec file:
+%supplements_kernel_module() \
+ %{expand:%(if ! rpm -q kernel-syms > /dev/null; then echo "%fail Please add the kernel-syms package to BuildRequires"; fi)}
diff --git a/rpm.changes b/rpm.changes
index 9426b3c..11db5f0 100644
--- a/rpm.changes
+++ b/rpm.changes
@@ -1,876 +1,3 @@
--------------------------------------------------------------------
-Wed Jun 8 12:02:51 CEST 2011 - mls@suse.de
-
-- change sigpipe fix so that the code really reads everything
- from the pipe
-
--------------------------------------------------------------------
-Mon Jun 6 14:16:49 UTC 2011 - coolo@novell.com
-
-- move desktop.attr to update-desktop-files
-
--------------------------------------------------------------------
-Mon Jun 6 13:30:05 CEST 2011 - mls@suse.de
-
-- ignore SIGPIPE when writing to dependency helpers, so that
- builds don't randomly abort when a helper is missing
-
--------------------------------------------------------------------
-Fri Jun 3 15:19:02 CEST 2011 - mls@suse.de
-
-- add --assume-exec option to elfdeps, so that the dependency
- generator really works for libs without x-bits
-
--------------------------------------------------------------------
-Mon May 23 16:21:52 CEST 2011 - mls@suse.de
-
-- do not die if the changelog section is empty [bnc#695400]
-
--------------------------------------------------------------------
-Fri May 20 13:28:37 CEST 2011 - mls@suse.de
-
-- get rid of "unexpectedly shrank by one" error
-
--------------------------------------------------------------------
-Thu May 19 14:51:13 CEST 2011 - mls@suse.de
-
-- remove gstreamer from fileattrs
-- remove unused var from magic_and_path patch
-
--------------------------------------------------------------------
-Thu May 19 11:59:38 CEST 2011 - mls@suse.de
-
-- disable perl requires generation completely
-
--------------------------------------------------------------------
-Wed May 18 11:34:17 CEST 2011 - mls@suse.de
-
-- split elflib from elf fileattrs so that libraries without
- x-bits are also scanned
-
--------------------------------------------------------------------
-Tue May 17 10:47:00 CEST 2011 - mls@suse.de
-
-- allow macro undef/change while expanding the macro itself
-
--------------------------------------------------------------------
-Mon May 16 14:45:05 CEST 2011 - mls@suse.de
-
-- update to rpm-4.9.0:
- * use internal dependency generator
- * pluggable autodeps generators
- * update to berkeleydb 4.8.30
- * fixed dependency match corner cases
- * experimental collection implementation
-
--------------------------------------------------------------------
-Wed May 4 12:42:33 UTC 2011 - mmarek@novell.com
-
-- rpmsort
- + Fix comparison function to match rpm (bnc#644515, thanks to
- Michael Schroeder).
- + Add --test option to verify result against zypper vcmp.
-
--------------------------------------------------------------------
-Sat Feb 19 12:39:31 CET 2011 - vuntz@opensuse.org
-
-- Don't call /sbin/conf.d/SuSEconfig.pango in
- %run_suseconfig_fonts: it has been removed during 11.4
- development.
-
--------------------------------------------------------------------
-Fri Jan 14 08:58:40 UTC 2011 - coolo@novell.com
-
-- let %find_lang remove (with a comment) languages not supported.
- Supported languages are in filesystem.rpm's file list (bnc#659001)
-
--------------------------------------------------------------------
-Mon Dec 20 11:50:55 CET 2010 - mls@suse.de
-
-- fix depflag_strong filter, all weak deps were shown as
- strong (bnc#359566).
-
--------------------------------------------------------------------
-Thu Dec 9 16:44:10 UTC 2010 - meissner@novell.com
-
-- fixed two more remaining filenames with spaces issues.
-
--------------------------------------------------------------------
-Wed Dec 8 13:05:06 UTC 2010 - meissner@novell.com
-
-- handle spaces in manpage filenames (like e.g. in boost).
-
--------------------------------------------------------------------
-Tue Dec 7 14:33:33 UTC 2010 - coolo@novell.com
-
-- add script to provide sysvinit() from /etc/init.d/*
-
--------------------------------------------------------------------
-Fri Nov 19 16:09:20 UTC 2010 - chris@computersalat.de
-
-- remove perl macro stuff from suse_macros
- o provided with perl /etc/rpm/macros.perl
-
--------------------------------------------------------------------
-Tue Nov 16 15:25:45 UTC 2010 - lnussel@suse.de
-
-- fix %verify_permissions to actually only warn
-- introduce %set_permissions to replace %run_permissions in the future
-
--------------------------------------------------------------------
-Tue Nov 9 15:07:52 UTC 2010 - lnussel@suse.de
-
-- don't call /usr/bin/Check at all anymore. superfluous
-
--------------------------------------------------------------------
-Tue Nov 9 13:04:21 UTC 2010 - lnussel@suse.de
-
-- change %verify_permissions to use new system mode of chkstat
-
--------------------------------------------------------------------
-Fri Oct 29 15:03:50 CEST 2010 - mls@suse.de
-
-- add support --with-only-C and --without-C options to find-lang.sh,
- add %no_lang_C macro to allow compatible builds [bnc#449847]
-
--------------------------------------------------------------------
-Mon Oct 4 17:34:52 UTC 2010 - cristian.rodriguez@opensuse.org
-
-- Enable libcap support so we can use the %caps macro in spec
- files to set POSIX capabilities.
-
--------------------------------------------------------------------
-Wed Sep 8 11:35:46 CEST 2010 - ro@suse.de
-
-- add leading / where appropriate in rpm-suse_macros (bnc#625763)
-
--------------------------------------------------------------------
-Thu Sep 2 10:26:05 UTC 2010 - dimstar@opensuse.org
-
-- Add rpm-gst-provides.patch to allow rpm to collect provides of
- gstreamer codecs. This will help pk-gstreamer-install to also
- find the codecs it is looking for.
-
--------------------------------------------------------------------
-Thu Aug 12 17:17:49 CEST 2010 - vuntz@opensuse.org
-
-- Add pkgconfig-0.24.diff: starting with pkg-config 0.24, the
- --print-requires command was upstreamed, but split in
- --print-requires and --print-requires-private. We need both in
- pkgconfigdeps.sh, though. If accepted, the patch should get
- upstreamed.
-
--------------------------------------------------------------------
-Tue Jul 20 11:47:29 UTC 2010 - coolo@novell.com
-
-- make suse_version 1140
-
--------------------------------------------------------------------
-Mon Jun 28 06:38:35 UTC 2010 - jengelh@medozas.de
-
-- use %_smp_mflags
-
--------------------------------------------------------------------
-Fri Jun 4 16:44:29 CEST 2010 - mls@suse.de
-
-- update changelog trim date
-
--------------------------------------------------------------------
-Fri Jun 4 15:00:54 CEST 2010 - mls@suse.de
-
-- fix sbit removal code [bnc#610941]
-- sort permlist file
-
--------------------------------------------------------------------
-Fri Apr 9 12:00:29 CEST 2010 - mls@suse.de
-
-- do not load keyring if signature checking is disabled [bnc#554552]
-- fix nosource/nopatch srpm tag generation
-
--------------------------------------------------------------------
-Thu Apr 8 17:11:08 CEST 2010 - mls@suse.de
-
-- backport some fixes from upstream
-- add generation of python/font/pkgconfig dependencies
-
--------------------------------------------------------------------
-Wed Apr 7 16:59:58 CEST 2010 - mls@suse.de
-
-- work around spurious tar message [bnc#558475]
-- fix defattr reset bug [bnc#594310]
-- make 'rpmconfigcheck status' exit with 4 [bnc#592269]
-- don't consider prereq deprecated for now
-
--------------------------------------------------------------------
-Fri Mar 26 16:29:36 CET 2010 - mls@suse.de
-
-- port sles11-sp1 repackage-nomd5.diff and safeugid.diff
-
--------------------------------------------------------------------
-Fri Mar 26 11:49:59 CET 2010 - mls@suse.de
-
-- update to rpm-4.8.0
- * updated python bindings
- * new transaction ordering code
-
--------------------------------------------------------------------
-Wed Feb 24 11:57:30 CET 2010 - mls@suse.de
-
-- fix readLine segfault [bnc#582599]
-
--------------------------------------------------------------------
-Sat Dec 12 23:42:26 CET 2009 - jengelh@medozas.de
-
-- add baselibs.conf as a source
-- add SPARC baselibs
-
--------------------------------------------------------------------
-Wed Nov 4 09:43:43 UTC 2009 - coolo@novell.com
-
-- set suse_version to 1130
-
--------------------------------------------------------------------
-Wed Nov 4 08:52:48 UTC 2009 - coolo@novell.com
-
-- do not overwrite the default fuzz factor any longer
-- change the payload compression to 5
-
--------------------------------------------------------------------
-Fri Oct 23 17:56:28 CEST 2009 - mls@suse.de
-
-- add make_install macro definition for real
-
--------------------------------------------------------------------
-Tue Sep 8 02:40:55 CEST 2009 - crrodriguez@suse.de
-
-- make lang_package(s) Noarch
-
--------------------------------------------------------------------
-Fri Sep 4 11:32:33 CEST 2009 - mls@suse.de
-
-- do not statfs all filesystems until there is something
- to report
-- cherry pick default clean section patch from upstream
-- add make_install macro definition
-
--------------------------------------------------------------------
-Wed Sep 2 17:16:37 CEST 2009 - mls@suse.de
-
-- allow ufdio payload
-- pack db.h include file
-- fix abs filelist specification [bnc#535594]
-- fix query return value [bnc#527191]
-
--------------------------------------------------------------------
-Mon Aug 31 18:59:12 UTC 2009 - aj@suse.de
-
-- Fix debuginfo handling for monodevelop-debugger-gdb and
- monodevelop-debugger-mdb packages (bnc#535543).
-
--------------------------------------------------------------------
-Wed Aug 26 14:39:44 CEST 2009 - mls@suse.de
-
-- set fuzz factor back to 2 for now
-
--------------------------------------------------------------------
-Mon Aug 24 15:06:57 CEST 2009 - mls@suse.de
-
-- update to rpm-4.7.1
-
--------------------------------------------------------------------
-Mon Jul 27 18:02:37 CEST 2009 - rguenther@suse.de
-
-- add description to debuginfo packages
-
--------------------------------------------------------------------
-Mon Jul 27 15:46:36 CEST 2009 - rguenther@suse.de
-
-- do not strip .debug suffix during debug-link generation
-- do not add requires based on private ELF flags [bnc#524681]
-- remove requires on debuginfo from debugsource package
-
--------------------------------------------------------------------
-Sat Jul 25 12:04:11 CEST 2009 - rguenther@suse.de
-
-- fix debuginfo package generation for binaries without build-id
-
--------------------------------------------------------------------
-Fri Jul 24 11:39:04 CEST 2009 - rguenther@suse.de
-
-- revert SUSEBuildCnt patch
-- fix debuginfo package generation for build root URLs with macros
-
--------------------------------------------------------------------
-Thu Jul 23 12:48:50 CEST 2009 - rguenther@suse.de
-
-- add support for SUSEBuildCnt tag
-
--------------------------------------------------------------------
-Thu Jul 23 11:41:54 CEST 2009 - rguenther@suse.de
-
-- generate debuginfo packages for each sub-package with corresponding
- debug information
-
--------------------------------------------------------------------
-Mon Jul 13 12:50:30 CEST 2009 - coolo@novell.com
-
-- the correct value for libexecdir is exec_prefix/lib (as the
- comment rightfully already mentioned)
-
--------------------------------------------------------------------
-Tue Jun 9 11:53:50 CEST 2009 - mmarek@suse.cz
-
-- findksyms.diff: also generate provides for kernel packages.
-
--------------------------------------------------------------------
-Mon Apr 6 02:09:43 CEST 2009 - ro@suse.de
-
-- fix typo in brp-symlink (bnc#457908)
-
--------------------------------------------------------------------
-Tue Mar 31 11:25:14 CEST 2009 - mmarek@suse.cz
-
-- findksyms.diff: don't check for /boot/symsets-*, generate ksym()
- requires if not present.
-
--------------------------------------------------------------------
-Thu Mar 19 15:42:20 CET 2009 - ro@suse.de
-
-- rpm-suse_macros: suse_version to 1120
-
--------------------------------------------------------------------
-Thu Feb 19 11:05:37 CET 2009 - schwab@suse.de
-
-- Add support for xz compressed sources.
-
--------------------------------------------------------------------
-Wed Feb 18 11:04:35 CET 2009 - jblunck@suse.de
-
-- Add debuginfo.prov helper script for build-id provides.
-
--------------------------------------------------------------------
-Mon Feb 16 17:10:31 CET 2009 - ro@suse.de
-
-- fix sort call in finddebuginfo again
-
--------------------------------------------------------------------
-Wed Feb 11 14:01:51 CET 2009 - coolo@suse.de
-
-- sort the result of find to make symlinks stable in finddebuginfo
-
--------------------------------------------------------------------
-Wed Feb 11 13:02:12 CET 2009 - coolo@suse.de
-
-- adapt to new API of xz, sticking with the old LZMA format (not XZ)
-
--------------------------------------------------------------------
-Mon Feb 9 14:16:52 CET 2009 - ro@suse.de
-
-- define disttag as optional tag with macro just like disturl
-
--------------------------------------------------------------------
-Thu Jan 29 10:34:22 CET 2009 - olh@suse.de
-
-- obsolete old -XXbit packages (bnc#437293)
-
--------------------------------------------------------------------
-Tue Jan 27 21:19:51 CET 2009 - agruen@suse.de
-
-- find-supplements.ksyms: Fix "Supplements: packageand(
- kernel-$flavor:$package)" dependency (bnc#429254).
-
--------------------------------------------------------------------
-Mon Jan 5 15:37:07 CET 2009 - mmarek@suse.cz
-
-- findksyms.diff: make sure that the input files for join are
- sorted properly (bnc#450714)
-
--------------------------------------------------------------------
-Fri Dec 19 15:26:30 CET 2008 - mls@suse.de
-
-- add popt-devel and rpm-devel to baselibs config (bnc#445037)
-
--------------------------------------------------------------------
-Thu Dec 11 17:18:49 CET 2008 - ro@suse.de
-
-- brp-symlink: whitelist kde4 doc path (bnc#457908)
-
--------------------------------------------------------------------
-Thu Dec 11 08:14:27 CET 2008 - agruen@suse.de
-
-- find-supplements.ksyms: Module aliases may contain special
- characters that rpm does not allow in dependencies, such as
- commas. Encode those as %XX to avoid generating broken
- dependencies (bnc#456695).
-
--------------------------------------------------------------------
-Tue Dec 9 16:45:44 CET 2008 - schwab@suse.de
-
-- find-debuginfo.sh: Don't convert to binary.
-
--------------------------------------------------------------------
-Mon Dec 1 12:35:39 CET 2008 - ro@suse.de
-
-- add rpm to baselibs.conf (for net-snmp)
-- append a "nil" after suse_install_update_script and _message
-
--------------------------------------------------------------------
-Fri Nov 28 15:15:10 CET 2008 - dmueller@suse.de
-
-- fix build
-- fix stack based buffer overflow in filelist parsing (bnc#397006)
-- add macros for update messages and update scripts
-
--------------------------------------------------------------------
-Fri Nov 28 14:46:04 CET 2008 - mls@suse.de
-
-- disable debug package requires for now, they cause more harm
- than benefits
-
--------------------------------------------------------------------
-Thu Nov 27 11:37:30 CET 2008 - mls@suse.de
-
-- remove '-m64' from ppc64 optflags [bnc#447002]
-- add _specfile macro
-- set RPMBUILD_ env vars for file helpers
-- make find-supplements.ksyms use RPMBUILD_SPECFILE [bnc#443815]
-
--------------------------------------------------------------------
-Tue Nov 25 17:10:40 CET 2008 - jblunck@suse.de
-
-- find-debuginfo.sh: fix for handling absolute symlinks
-
--------------------------------------------------------------------
-Fri Nov 21 16:30:19 CET 2008 - mls@suse.de
-
-- add firmware.prov provides helper
-
--------------------------------------------------------------------
-Fri Nov 21 14:38:57 CET 2008 - mmarek@suse.cz
-
-- fixed sed expression in find-provides.ksyms
-
--------------------------------------------------------------------
-Tue Nov 18 17:46:53 CET 2008 - jblunck@suse.de
-
-- find-debuginfo.sh: Create symlinks reflecting the policy from brp-symlink
-
--------------------------------------------------------------------
-Thu Nov 13 18:16:14 CET 2008 - agruen@suse.de
-
-- Fix the ksym(...) provides to also include the kernel flavor
- (bnc#444698).
-
--------------------------------------------------------------------
-Fri Nov 7 15:03:25 CET 2008 - ro@suse.de
-
-- update gcc flags to current set
-
--------------------------------------------------------------------
-Fri Oct 31 18:59:25 CET 2008 - coolo@suse.de
-
-- moved suse_update_desktop_files to package update_desktop_files
-
--------------------------------------------------------------------
-Tue Oct 28 19:07:02 CET 2008 - jblunck@suse.de
-
-- debugedit: Don't emit NOPs at the end of the line number program but at the
- beginning (bnc #433182 again)
-- debugedit: Fix an uninitialized variable use that lead to segfaults from
- time to time
-
--------------------------------------------------------------------
-Tue Oct 28 17:18:03 CET 2008 - mls@suse.de
-
-- fix fingerprint computation for gpg checksums
-
--------------------------------------------------------------------
-Tue Oct 21 11:22:22 CEST 2008 - jblunck@suse.de
-
-- debugedit: Fix debuginfo problems introduced by last patch (bnc #433182)
-
--------------------------------------------------------------------
-Mon Oct 20 16:16:01 CEST 2008 - mls@suse.de
-
-- drop static libraries and libtool archives
-
--------------------------------------------------------------------
-Thu Oct 2 18:30:41 CEST 2008 - vuntz@suse.de
-
-- support the new -t option of suse_update_desktop_file.sh in
- rpm-suse_macros
-
--------------------------------------------------------------------
-Thu Oct 2 17:43:59 CEST 2008 - mls@suse.de
-
-- fix rpmrc compile options for ia64 [bnc#431345]
-
--------------------------------------------------------------------
-Thu Oct 2 16:19:03 CEST 2008 - jblunck@suse.de
-
-- debugedit: Fix some compilation warnings and the canonicalization error.
-
--------------------------------------------------------------------
-Tue Sep 16 01:01:30 CEST 2008 - ro@suse.de
-
-- fix find-debuginfo.sh and debugsource-package.diff to even
- apply (directory depth)
-- add hack from jblunck using home made elfcmp
-
--------------------------------------------------------------------
-Mon Sep 15 20:32:32 CEST 2008 - jblunck@suse.de
-
-- fix find-debuginfo.sh to work on filenames with spaces in
-
--------------------------------------------------------------------
-Fri Sep 12 18:16:33 CEST 2008 - mls@suse.de
-
-- fix changelog cutter
-- fix find-requires script
-- add mimetype.diff patch from Scott Reeves
-
--------------------------------------------------------------------
-Thu Sep 11 15:33:52 CEST 2008 - mls@suse.de
-
-- update to 4.4.2.3 to get rid of >50 patches
-- make changelog cutter configurable
-- update rpm-suse_macros
-
--------------------------------------------------------------------
-Fri Sep 5 16:56:23 CEST 2008 - dmueller@suse.de
-
-- strip .comment and .GCC.command.line sections from ELF binaries
-
--------------------------------------------------------------------
-Mon Aug 25 14:48:28 CEST 2008 - prusnak@suse.cz
-
-- enabled SELinux support [Fate#303662]
-
--------------------------------------------------------------------
-Thu Aug 21 01:49:00 CEST 2008 - ro@suse.de
-
-- update rpm-suse_macros
-
--------------------------------------------------------------------
-Wed Aug 20 12:39:53 CEST 2008 - agruen@suse.de
-
-- rpmconfigcheck: set Required-Stop to $null; this init script
- only performs some checks when started.
-- /usr/lib/python* belongs to the rpm-python package; remove from
- the main rpm package.
-
--------------------------------------------------------------------
-Mon Jun 30 14:02:35 CEST 2008 - dmueller@suse.de
-
-- add a requires_ge macro as well
-
--------------------------------------------------------------------
-Thu Jun 26 18:40:46 CEST 2008 - schwab@suse.de
-
-- Fix db configure script.
-
--------------------------------------------------------------------
-Thu May 15 14:31:51 CEST 2008 - dmueller@suse.de
-
-- remove references to brp-strip-comment-note (bnc#390163)
-
--------------------------------------------------------------------
-Tue May 6 18:01:34 CEST 2008 - mls@suse.de
-
-- enable all parts of the noprovides patch again, making our rpm
- compatible to rpm4
-
--------------------------------------------------------------------
-Fri May 2 15:50:17 CEST 2008 - dmueller@suse.de
-
-- add at least one supplements prefering the right kernel flavour
- if no modalias could be generated (bnc#384084)
-
--------------------------------------------------------------------
-Thu May 1 22:43:17 CEST 2008 - agruen@suse.de
-
-- For kernel modules, require "kernel(flavor:symset) = version"
- instead of "kernel(symset) = version". This disambiguates
- the case where several kernel flavors end up with the same
- modver checksums (190163, 355628).
-
--------------------------------------------------------------------
-Wed Apr 16 17:57:43 CEST 2008 - jblunck@suse.de
-
-- Get rid of noise when no debuginfo was generated
-- Never strip static libraries in find-debuginfo script
-
--------------------------------------------------------------------
-Thu Apr 10 12:50:33 CEST 2008 - ro@suse.de
-
-- added baselibs.conf file for xxbit packages
-
--------------------------------------------------------------------
-Thu Apr 10 12:32:46 CEST 2008 - jw@suse.de
-
-- added whatrequires-doc.diff
- Adds a hint to the misleading --whatrequires option, pointing to
- the more useful -e --test.
- Motivated by a talk thread started by Hubert.
-
--------------------------------------------------------------------
-Wed Apr 9 23:15:48 CEST 2008 - mrueckert@suse.de
-
-- revert the last change as it leads to duplicated entries in the
- file list
-
--------------------------------------------------------------------
-Wed Apr 9 21:00:30 CEST 2008 - jblunck@suse.de
-
-- Fix a bug in last commit that leads to /usr/src/debug not belonging
- to any package.
-
--------------------------------------------------------------------
-Wed Apr 9 12:56:57 CEST 2008 - jblunck@suse.de
-
-- Put debug sources into separate -debugsource package.
-
--------------------------------------------------------------------
-Fri Mar 28 14:54:04 CET 2008 - coolo@suse.de
-
-- leave the rpm package itself with bzip payload to
- avoid blocking updates from within running system
-
--------------------------------------------------------------------
-Thu Mar 27 14:43:24 CET 2008 - coolo@suse.de
-
-- switch payload default to lzma -2
-- flag GNOME docu as %doc (bnc#358838)
-
--------------------------------------------------------------------
-Tue Mar 18 17:12:00 CET 2008 - mls@suse.de
-
-- make ia32 compatible to ia64, like it was in SLES9 [bnc#367705]
-- fix memory leak and endless loops in lzma code
-- make rpm provide the right lzma rpmlib name
-
--------------------------------------------------------------------
-Tue Mar 18 13:33:25 CET 2008 - schwab@suse.de
-
-- Fix broken db configuration.
-
--------------------------------------------------------------------
-Fri Mar 14 21:54:57 CET 2008 - coolo@suse.de
-
-- change it to the "alone" file format used by stable
- distributions of 7zip and lzma
-
--------------------------------------------------------------------
-Fri Mar 14 18:05:18 CET 2008 - coolo@suse.de
-
-- daring some more compression time to get an overall picture
-
--------------------------------------------------------------------
-Thu Mar 13 08:11:47 CET 2008 - coolo@suse.de
-
-- support lzma payload using liblzma
-
--------------------------------------------------------------------
-Thu Feb 21 21:58:39 CET 2008 - mls@suse.de
-
-- do not configure autoreloc or colors
-
--------------------------------------------------------------------
-Thu Jan 31 15:12:55 CET 2008 - ro@suse.de
-
-- brp-symlink: whitelist /opt/kde3/share/doc*/HTML/*/common
-
--------------------------------------------------------------------
-Mon Jan 28 16:35:46 CET 2008 - ro@suse.de
-
-- finddebuginfo.diff: disable debuginfo for mono at the moment
-
--------------------------------------------------------------------
-Mon Jan 21 12:27:18 CET 2008 - mls@suse.de
-
-- change vendor detection so that it works in build service, too
-
--------------------------------------------------------------------
-Sat Jan 19 17:14:55 CET 2008 - mls@suse.de
-
-- update rpm-suse_macros so that the build service can build, too
-
--------------------------------------------------------------------
-Thu Jan 17 19:19:09 CET 2008 - wberrier@suse.de
-
-- autodeps.diff
- pass .config files to mono-find-requires, not mono-find-provides
-
--------------------------------------------------------------------
-Mon Dec 3 13:38:20 CET 2007 - dmueller@suse.de
-
-- list email address completely again (#344147)
-
--------------------------------------------------------------------
-Fri Nov 16 20:46:42 CET 2007 - dmueller@suse.de
-
-- shorten changelogs in binary rpms (#308569)
- * saves 4.3MB for the one CD media
-
--------------------------------------------------------------------
-Thu Oct 11 13:37:16 CEST 2007 - schwab@suse.de
-
-- Add support for lzma compressed archives.
-
--------------------------------------------------------------------
-Sun Sep 30 18:28:23 CEST 2007 - rguenther@suse.de
-
-- fix build with gcc43
-
--------------------------------------------------------------------
-Mon Sep 3 13:27:57 CEST 2007 - dmueller@suse.de
-
-- change %lang_package implementation once again
- to support bundle-lang-other for only one desktop (#302270)
-
--------------------------------------------------------------------
-Fri Aug 31 18:41:04 CEST 2007 - dmueller@suse.de
-
-- implement supplements for lang_packages (#306412)
-
--------------------------------------------------------------------
-Fri Aug 10 16:40:10 CEST 2007 - dmueller@suse.de
-
-- package size reduction (#217472)
-
--------------------------------------------------------------------
-Wed Aug 8 23:25:56 CEST 2007 - dmueller@suse.de
-
-- support optional -n parameter in %lang_package
-- make %lang_package export a -all provides that
- can be used to resolve conflicts with the bundle
-
--------------------------------------------------------------------
-Thu Aug 2 15:28:09 CEST 2007 - mls@suse.de
-
-- let the debug_package_requires macro overwrite the
- default requires in the debuginfo package
-
--------------------------------------------------------------------
-Tue Jul 24 13:29:10 CEST 2007 - dmueller@suse.de
-
-- hardcode rpm in patch name
-
--------------------------------------------------------------------
-Fri Jun 15 08:30:07 CEST 2007 - dmueller@suse.de
-
-- package size reduction (28%)
-
--------------------------------------------------------------------
-Sun May 27 16:43:25 CEST 2007 - schwab@suse.de
-
-- Remove duplicate rpmpopt alias.
-
--------------------------------------------------------------------
-Fri May 25 16:18:07 CEST 2007 - mls@suse.de
-
-- fix patch-rpm query
-- do not link convertdb1 statically [#274694]
-- use --wildcards option for tar [#272519]
-- fix perl.prov [#255009]
-- show pre/posttrans scripts in --scripts query [#253620]
-- remove popt version requires [#246871]
-- fix missing file error
-
--------------------------------------------------------------------
-Wed May 16 12:16:44 CEST 2007 - mls@suse.de
-
-- fix autodeps.diff mono logic
-
--------------------------------------------------------------------
-Mon May 14 13:47:02 CEST 2007 - coolo@suse.de
-
-- correctly mark KDE documentation as %doc in find-lang.sh
-
--------------------------------------------------------------------
-Fri May 11 14:34:35 CEST 2007 - coolo@suse.de
-
-- adding %lang_package to simplify seperating translations
-
--------------------------------------------------------------------
-Sat Apr 28 00:43:30 CEST 2007 - wberrier@suse.de
-
-- autodeps.diff - bnc #227362
- -Print warning if mono assembiles are found but mono-find-* fails
- (solution is to make sure mono-devel is installed)
- -Also include .config files when searching for mono assemblies.
- (bnc #210224)
-
--------------------------------------------------------------------
-Tue Apr 24 17:12:47 CEST 2007 - mls@suse.de
-
-- enable noprovides patch again.
- disable part of the patch so that rpm checks the package provides
- again instead of just package name when going through the
- obsoletes list. This makes rpm behaviour consistent with the
- updated libzypp. [#232127]
-
--------------------------------------------------------------------
-Sun Apr 22 15:23:12 CEST 2007 - dmueller@suse.de
-
-- fix stripping of symbol table
-
--------------------------------------------------------------------
-Tue Apr 17 14:24:01 CEST 2007 - dmueller@suse.de
-
-- strip comment and gcc command line sections from the packages
-- rework SYMTAB_KEEP to accept a file pattern
-
--------------------------------------------------------------------
-Sun Apr 8 23:22:12 CEST 2007 - schwab@suse.de
-
-- Include compilation directory in debuginfo file list.
-
--------------------------------------------------------------------
-Sat Mar 24 12:22:23 CET 2007 - ro@suse.de
-
-- added libbz2-devel to BuildRequires and Requires for -devel
-
--------------------------------------------------------------------
-Fri Mar 23 16:14:28 CET 2007 - dmueller@suse.de
-
-- drop custom libpopt so versioning
-- move libpopt to /lib(64) for cryptsetup
-- adjust installed libtool files
-- Fix rpm buildrequires / devel requires
-
--------------------------------------------------------------------
-Thu Mar 22 16:41:44 CET 2007 - stbinner@suse.de
-
-- files.diff: when checking %files list also show unpackaged files
- after "not found" error message [#255780]
-
--------------------------------------------------------------------
-Thu Mar 22 10:45:08 CET 2007 - dmueller@suse.de
-
-- remove strangely duplicated libpopt
-- remove static popt and corresponding .la file to reduce
- dependencies
-- Fix various format string errors in german translation
- which cause crashes
-
--------------------------------------------------------------------
-Mon Mar 19 16:48:22 CET 2007 - rguenther@suse.de
-
-- do not require build-key
-
--------------------------------------------------------------------
-Tue Mar 6 20:19:40 CET 2007 - rguenther@suse.de
-
-- adjust cflags_profile_generate and cflags_profile_feedback to
- enable tree profiling
-
--------------------------------------------------------------------
-Fri Jan 26 16:55:15 CET 2007 - mls@suse.de
-
-- create /var/spool/repackage directory [#230866]
-- do not run pre/posttrans scripts in test mode [#235361]
-
-------------------------------------------------------------------
Thu Nov 30 14:04:56 CET 2006 - mls@suse.de
@@ -1265,8 +392,8 @@ Wed Sep 7 18:13:11 CEST 2005 - matz@suse.de
- Make debuginfo packages require exact version of base rpm.
-
-------------------------------------------------------------------
+
Fri Sep 2 13:07:08 CEST 2005 - mls@suse.de
- backport CLOEXEC workaround [#93727]
@@ -2768,7 +1895,7 @@ Mon Feb 22 15:08:09 MET 1999 - ro@suse.de
- update to 2.91
- ported ma's fixes
--------------------------------------------------------------------
+------------------------------------------------------------------
Wed Nov 25 19:06:11 MET 1998 - ma@suse.de
- new version 2.5.5
@@ -2854,7 +1981,7 @@ Mon Oct 27 15:29:41 MET 1997 - ma@suse.de
- patch: ignore errors when installing a symlink and called from YaST
- de.po update
--------------------------------------------------------------------
+----------------------------------------------------------------------
Thu Aug 7 17:46:48 MEST 1997 - ma@suse.de
- duplicate '--nodeps' entry in rpm manpage deleted.
@@ -2863,13 +1990,13 @@ Thu Aug 7 17:46:48 MEST 1997 - ma@suse.de
is disabeled, unless environment variable RPM_IgnoreFailedSymlinks
is set.
--------------------------------------------------------------------
+----------------------------------------------------------------------
Tue Jul 15 13:24:22 MEST 1997 - ro@suse.de
- added workaround to skip installing a symlink when
impossible to remove an existing directory
--------------------------------------------------------------------
+----------------------------------------------------------------------
Thu Jun 26 19:10:48 MEST 1997 - ma@suse.de
- introducing rpm, version 2.4.1
diff --git a/rpm.spec b/rpm.spec
index 32484a7..c32da45 100644
--- a/rpm.spec
+++ b/rpm.spec
@@ -1,127 +1,123 @@
#
-# spec file for package rpm
+# spec file for package rpm (Version 4.4.2)
#
-# Copyright (c) 2011 SUSE LINUX Products GmbH, Nuernberg, Germany.
+# Copyright (c) 2006 SUSE LINUX Products GmbH, Nuernberg, Germany.
+# This file and all modifications and additions to the pristine
+# package are under the same license as the package itself.
#
-# All modifications and additions to the file contributed by third parties
-# remain the property of their copyright owners, unless otherwise agreed
-# upon. The license for this file, and modifications and additions to the
-# file, is the same license as for the pristine package itself (unless the
-# license for the pristine package is not an Open Source License, in which
-# case the license is the MIT License). An "Open Source License" is a
-# license that conforms to the Open Source Definition (Version 1.9)
-# published by the Open Source Initiative.
-
# Please submit bugfixes or comments via http://bugs.opensuse.org/
#
-
+# norootforbuild
Name: rpm
-License: GPLv2+
+License: GNU General Public License (GPL)
Group: System/Packages
-BuildRequires: file-devel libbz2-devel libelf-devel libselinux-devel libsemanage-devel lua-devel ncurses-devel xz-devel zlib-devel
-BuildRequires: popt-devel
-BuildRequires: libacl-devel libcap-devel
-#!BuildIgnore: rpmlint-Factory
Provides: rpminst
-PreReq: %insserv_prereq %fillup_prereq permissions
-AutoReqProv: on
+Requires: build-key
+%define popt_version 1.7
+PreReq: %insserv_prereq %fillup_prereq popt = %{popt_version} permissions
+Autoreqprov: on
Summary: The RPM Package Manager
-Version: 4.9.0
-Release: 13
+Version: 4.4.2
+Release: 76
Source: rpm-%{version}.tar.bz2
Source1: RPM-HOWTO.tar.bz2
Source2: RPM-Tips.html.tar.bz2
+Source3: RPM-Changes.html.tar.bz2
Source4: rpm-suse_macros
Source5: rpmsort
Source6: symset-table
Source8: rpmconfigcheck
Source9: sysconfig.services-rpm
-Source10: beecrypt-4.1.2.tar.bz2
-Source11: db-4.8.30.tar.bz2
-Source12: baselibs.conf
-Patch1: beecrypt-4.1.2.diff
-Patch2: db.diff
+Source10: elfutils-0.97.tar.bz2
+Source11: beecrypt-4.1.2.tar.bz2
+Patch1: elfutils-0.97.diff
+Patch2: beecrypt-4.1.2.diff
+Patch3: db.diff
# quilt patches start here
-Patch10: rpm-beecrypt.diff
-Patch11: debugedit.diff
-Patch12: localetag.diff
-Patch13: missingok.diff
-Patch14: nameversioncompare.diff
-Patch15: chownwarn.diff
-Patch16: dbfsync.diff
-Patch17: dbrointerruptable.diff
-Patch18: extcond.diff
-Patch19: refreshtestarch.diff
-Patch20: rpmrctests.diff
-Patch21: waitlock.diff
-Patch22: suspendlock.diff
-Patch23: weakdeps.diff
-Patch24: autodeps.diff
-Patch25: brp.diff
-Patch26: brpcompress.diff
-Patch27: checkfilesnoinfodir.diff
-Patch28: finddebuginfo.diff
-Patch29: findksyms.diff
-Patch30: findlang.diff
-Patch31: macrosin.diff
-Patch32: modalias.diff
-Patch33: platformin.diff
-Patch34: rpmpopt.diff
-Patch35: rpmrc.diff
-Patch36: taggedfileindex.diff
-Patch37: rpmqpack.diff
-Patch38: convertdb1static.diff
-Patch39: build.diff
-Patch40: modalias-kernel_module.diff
-Patch41: files.diff
-Patch42: debugedit-comp-dir.diff
-Patch43: perlprov.diff
-Patch44: rpm-shorten-changelog.diff
-Patch45: debugsource-package.diff
-Patch46: whatrequires-doc.diff
-Patch47: remove-brp-strips.diff
-Patch48: requires-ge-macro.diff
-Patch50: debugedit-canon-fix.diff
-Patch51: finddebuginfo-absolute-links.diff
-Patch52: firmware.diff
-Patch53: specfilemacro.diff
-Patch54: modalias-encode.diff
-Patch55: disttag-macro.diff
-Patch56: buildidprov.diff
-Patch57: debugsubpkg.diff
-Patch58: debuglink.diff
-Patch59: debuginfo-mono.patch
-Patch60: lazystatfs.diff
-Patch61: repackage-nomd5.diff
-Patch62: safeugid.diff
-Patch63: noprereqdeprec.diff
-Patch64: pythondeps.diff
-Patch65: fontprovides.diff
-Patch66: rpm-gst-provides.patch
-Patch67: langnoc.diff
-Patch68: initscriptsprov.diff
-Patch69: remove-translations.diff
-Patch70: no_rep_autop.diff
-Patch71: headeradddb.diff
-Patch72: rpmdb_get_open_flags.diff
-Patch73: verify_p.diff
-Patch74: dbprivate.diff
-Patch75: nobuildcolor.diff
-Patch76: fileattrs.diff
-Patch77: emptyprep.diff
-Patch78: nomagiccheck.diff
-Patch79: findsupplements.diff
-Patch80: magic_and_path.diff
-Patch81: safemacro.diff
-Patch82: emptychangelog.diff
-Patch83: assumeexec.diff
-Patch84: buildpipe.diff
+Patch10: aloffbyone.diff
+Patch11: badforsyntax.diff
+Patch12: buildsubdir.diff
+Patch13: compress.diff
+Patch14: debugedit.diff
+Patch15: docdir_fmt.diff
+Patch16: emptyfilelist.diff
+Patch17: eraseignoresize.diff
+Patch18: erasebadreturn.diff
+Patch19: eraseordered.diff
+Patch20: exitstatus.diff
+Patch21: filenonull.diff
+Patch22: filequery.diff
+Patch23: findfplistexclude.diff
+Patch24: forkfailed.diff
+Patch25: getcwdresult.diff
+Patch26: ghost.diff
+Patch27: globoffbyone.diff
+Patch28: initdbret.diff
+Patch29: localetag.diff
+Patch30: luanoreadline.diff
+Patch31: missingok.diff
+Patch32: nameversioncompare.diff
+Patch33: nostdoutclose.diff
+Patch34: obeynodbsync.diff
+Patch35: payloadformat.diff
+Patch36: pgpdecodeearly.diff
+Patch37: prereqorder.diff
+Patch38: probfilter.diff
+Patch39: rebuilddbroot.diff
+Patch40: sbitcheck.diff
+Patch41: setpermsugids.diff
+Patch42: signature.diff
+Patch43: signwriteerror.diff
+Patch44: spectest.diff
+Patch45: sqcondmutex.diff
+Patch46: srcdefattr.diff
+Patch47: totalsizenoexclude.diff
+Patch48: translockroot.diff
+Patch49: vercmp.diff
+Patch50: verifylstatfail.diff
+Patch51: chownwarn.diff
+Patch52: dbfsync.diff
+Patch53: dbrointerruptable.diff
+Patch54: diskspace.diff
+Patch55: extcond.diff
+Patch56: globlstat.diff
+Patch57: nodefattr.diff
+Patch58: nolua.diff
+Patch59: luaroot.diff
+Patch60: noneon.diff
+#Patch61: noprovides.diff
+Patch62: openallbuttemp.diff
+Patch63: refreshtestarch.diff
+Patch64: rpmrctests.diff
+Patch65: suspendlock.diff
+Patch66: tagsbackport.diff
+Patch67: waitlock.diff
+Patch68: dbprivate.diff
+Patch69: legacyprereq.diff
+Patch70: weakdeps.diff
+Patch71: autodeps.diff
+Patch72: brp.diff
+Patch73: brpcombress.diff
+Patch74: checkfilesnoinfodir.diff
+Patch75: finddebuginfo.diff
+Patch76: findksyms.diff
+Patch77: findlang.diff
+Patch78: macrosin.diff
+Patch79: modalias.diff
+Patch80: platformin.diff
+Patch81: rpmpopt.diff
+Patch82: rpmrc.diff
+Patch83: patchrpms.diff
+Patch84: taggedfileindex.diff
+Patch85: rpmqpack.diff
+Patch86: convertdb1static.diff
+Patch87: build.diff
+Patch88: modalias-kernel_module.diff
+Patch89: querybuffer.diff
BuildRoot: %{_tmppath}/%{name}-%{version}-build
#
-# avoid bootstrapping problem
-%define _binary_payload w9.bzdio
%description
RPM Package Manager is the main tool for managing the software packages
@@ -140,8 +136,8 @@ Authors:
Marc Ewing
%package devel
-Summary: Include Files and Libraries mandatory for Development
-License: GPLv2+
+Summary: Include Files and Libraries mandatory for Development.
+License: GNU General Public License (GPL)
Group: System/Packages
Requires: rpm = %{version}
Requires: popt-devel
@@ -163,129 +159,98 @@ Authors:
%prep
%setup -q -n rpm-%{version}
rm -rf sqlite
+rm -rf elfutils
rm -rf beecrypt
tar xjf %{SOURCE10}
+ln -s elfutils-0.97 elfutils
+# remove all OSL stuff
+rm -rf elfutils/doc elfutils/libebl elfutils/libdw elfutils/libcpu elfutils/libasm elfutils/src elfutils/po elfutils/tests
+rm -rf elfutils/lib/dynamicsizehash.c elfutils/lib/dynamicsizehash.h elfutils/lib/list.h elfutils/lib/xmalloc.c elfutils/lib/xstrdup.c elfutils/lib/xstrndup.c
tar xjf %{SOURCE11}
-ln -s db-4.8.30 db
ln -s beecrypt-4.1.2 beecrypt
-chmod -R u+w db/*
#tar xjf %{SOURCE12}
#ln -s neon-0.24.7 neon
# will get linked from db3
rm -f rpmdb/db.h
-%patch -P 1 -P 2
+# separate popt source
+# %setup -q -D -T -a 9
+# mv popt popt.orig
+# ln -s popt-%{popt_version} popt
+%patch -P 1 -P 2 -P 3
%patch -P 10 -P 11 -P 12 -P 13 -P 14 -P 15 -P 16 -P 17 -P 18 -P 19
%patch -P 20 -P 21 -P 22 -P 23 -P 24 -P 25 -P 26 -P 27 -P 28 -P 29
%patch -P 30 -P 31 -P 32 -P 33 -P 34 -P 35 -P 36 -P 37 -P 38 -P 39
-%patch -P 40 -P 41 -P 42 -P 43 -P 44 -P 45 -P 46 -P 47 -P 48
+%patch -P 40 -P 41 -P 42 -P 43 -P 44 -P 45 -P 46 -P 47 -P 48 -P 49
%patch -P 50 -P 51 -P 52 -P 53 -P 54 -P 55 -P 56 -P 57 -P 58 -P 59
-%patch -P 60 -P 61 -P 62 -P 63 -P 64 -P 65 -P 66 -P 67 -P 68 -P 69
+%patch -P 60 -P 62 -P 63 -P 64 -P 65 -P 66 -P 67 -P 68 -P 69
%patch -P 70 -P 71 -P 72 -P 73 -P 74 -P 75 -P 76 -P 77 -P 78 -P 79
-%patch -P 80 -P 81 -P 82 -P 83 -P 84
-#chmod 755 scripts/find-supplements{,.ksyms}
-#chmod 755 scripts/find-provides.ksyms scripts/find-requires.ksyms
-#chmod 755 scripts/firmware.prov
-#chmod 755 scripts/debuginfo.prov
+%patch -P 80 -P 81 -P 82 -P 83 -P 84 -P 85 -P 86 -P 87 -P 88 -P 89
+chmod 755 scripts/find-supplements{,.ksyms}
+chmod 755 scripts/find-provides.ksyms scripts/find-requires.ksyms
tar -xjvf %{SOURCE1}
tar -xjvf %{SOURCE2}
+tar -xjvf %{SOURCE3}
if [ -s /etc/rpm/suse_macros ]; then
cp -a /etc/rpm/suse_macros %{SOURCE4}
fi
cp -a %{SOURCE4} suse_macros
-rm -f m4/libtool.m4
-rm -f m4/lt*.m4
+rename no nb po/no.* popt/po/no.*
%build
-export CFLAGS="$RPM_OPT_FLAGS -fno-strict-aliasing -ffunction-sections"
-export LDFLAGS="-Wl,-Bsymbolic-functions -ffunction-sections"
+%{?suse_update_config:%{suse_update_config -f popt}}
+export CFLAGS="$RPM_OPT_FLAGS -fno-strict-aliasing"
%ifarch alpha
export CFLAGS="-g -O0 -fno-strict-aliasing"
%endif
-#cp -p /usr/share/gettext/config.rpath .
-cp autogen.sh beecrypt
-pushd beecrypt
-./autogen.sh --with-pic --without-python
-make %{?_smp_mflags}
-popd
-./autogen.sh --prefix=%{_prefix} --mandir=%{_mandir} --infodir=%{_infodir} \
---libdir=%{_libdir} --sysconfdir=/etc --localstatedir=/var --with-lua \
---with-selinux --with-internal-beecrypt --with-acl --with-cap --enable-shared %{?with_python: --enable-python}
+#cp popt/autogen.sh zlib
+rm -rf zlib
+cp /usr/share/gettext/config.rpath .
+cp popt/autogen.sh beecrypt
+cp popt/autogen.sh libelf
+cp popt/autogen.sh elfutils
+cp popt/autogen.sh file
+# cp popt/autogen.sh neon
+./autogen.sh --prefix=%{_prefix} --mandir=%{_mandir} --infodir=%{_infodir} --libdir=/usr/lib --sysconfdir=/etc --localstatedir=/var --with-lua --without-selinux --enable-shared
rm po/de.gmo
-make %{?_smp_mflags}
-make convertdb1
+make %{?jobs:-j%jobs}
+(cd popt; gcc -shared .libs/popt.o .libs/findme.o .libs/poptparse.o .libs/poptconfig.o .libs/popthelp.o $RPM_OPT_FLAGS -Wl,-soname -Wl,libpopt.so.1 -o .libs/libpopt.so.1.0.0)
%install
+rm -rf $RPM_BUILD_ROOT
+mkdir $RPM_BUILD_ROOT
mkdir -p $RPM_BUILD_ROOT/usr/lib
mkdir -p $RPM_BUILD_ROOT/usr/share/locale
ln -s ../share/locale $RPM_BUILD_ROOT/usr/lib/locale
make DESTDIR="$RPM_BUILD_ROOT" install
-install -m 755 convertdb1 $RPM_BUILD_ROOT/usr/lib/rpm
-install -m 644 db3/db.h $RPM_BUILD_ROOT/usr/include/rpm
-# remove .la file and the static variant of libpopt
-# have to remove the dependency from other .la files as well
-for f in $RPM_BUILD_ROOT/%{_libdir}/*.la; do
- sed -i -e "s,/%_lib/libpopt.la,-lpopt,g" $f
-done
+cp popt/.libs/libpopt.so.1.0.0 $RPM_BUILD_ROOT/%{_libdir}
+ln -sf libpopt.so.1.0.0 $RPM_BUILD_ROOT/%{_libdir}/libpopt.so.1
mkdir -p $RPM_BUILD_ROOT/etc/init.d
install -m 755 %{SOURCE8} $RPM_BUILD_ROOT/etc/init.d
mkdir -p $RPM_BUILD_ROOT/usr/sbin
ln -sf ../../etc/init.d/rpmconfigcheck $RPM_BUILD_ROOT/usr/sbin/rcrpmconfigcheck
cp -a suse_macros $RPM_BUILD_ROOT/usr/lib/rpm
-mkdir -p $RPM_BUILD_ROOT/usr/lib/rpm/suse
-ln -s ../suse_macros $RPM_BUILD_ROOT/usr/lib/rpm/suse/macros
-for d in BUILD RPMS SOURCES SPECS SRPMS BUILDROOT ; do
- mkdir -p $RPM_BUILD_ROOT/usr/src/packages/$d
- chmod 1777 $RPM_BUILD_ROOT/usr/src/packages/$d
-done
-for d in $RPM_BUILD_ROOT/usr/lib/rpm/platform/*-linux/macros ; do
- dd=${d%%-linux/macros}
- dd=${dd##*/}
- mkdir $RPM_BUILD_ROOT/usr/src/packages/RPMS/$dd
- chmod 1777 $RPM_BUILD_ROOT/usr/src/packages/RPMS/$dd
-done
+mv $RPM_BUILD_ROOT/usr/src/* $RPM_BUILD_ROOT/usr/src/packages
mkdir -p $RPM_BUILD_ROOT/var/lib/rpm
+rm -rf $RPM_BUILD_ROOT/usr/include/beecrypt $RPM_BUILD_ROOT/usr/include/libelf $RPM_BUILD_ROOT/%{_libdir}/libbeecrypt* $RPM_BUILD_ROOT/usr/lib/libelf*
gzip -9 $RPM_BUILD_ROOT/%{_mandir}/man[18]/*.[18]
export RPM_BUILD_ROOT
%ifarch s390x
[ -f scripts/brp-%_arch-linux ] && sh scripts/brp-%_arch-linux
%endif
chmod 755 doc/manual
-rm -rf doc/manual/Makefile*
rm -f $RPM_BUILD_ROOT/usr/lib/rpmpopt
rm -rf $RPM_BUILD_ROOT%{_mandir}/{fr,ja,ko,pl,ru,sk}
rm -f $RPM_BUILD_ROOT%{_prefix}/share/locale/de/LC_MESSAGES/rpm.mo
mkdir -p $RPM_BUILD_ROOT/var/adm/fillup-templates
install -c -m0644 %{SOURCE9} $RPM_BUILD_ROOT/var/adm/fillup-templates/
rm -f $RPM_BUILD_ROOT/usr/lib/rpm/cpanflute $RPM_BUILD_ROOT/usr/lib/rpm/cpanflute2
-find $RPM_BUILD_ROOT/usr/src/packages/* -type d | sed -e "s@$RPM_BUILD_ROOT@@" | sort > $RPM_BUILD_ROOT/usr/lib/rpm/permlist
+find $RPM_BUILD_ROOT/usr/src/packages/* -type d | sed -e "s@$RPM_BUILD_ROOT@@" > $RPM_BUILD_ROOT/usr/lib/rpm/permlist
install -m 755 %{SOURCE5} $RPM_BUILD_ROOT/usr/lib/rpm
install -m 755 %{SOURCE6} $RPM_BUILD_ROOT/usr/lib/rpm
install -m 755 scripts/find-supplements{,.ksyms} $RPM_BUILD_ROOT/usr/lib/rpm
-install -m 755 scripts/firmware.prov $RPM_BUILD_ROOT/usr/lib/rpm
-install -m 755 scripts/debuginfo.prov $RPM_BUILD_ROOT/usr/lib/rpm
rm -f $RPM_BUILD_ROOT/usr/lib/locale $RPM_BUILD_ROOT/usr/lib/rpmrc
mkdir -p $RPM_BUILD_ROOT/etc/rpm
chmod 755 $RPM_BUILD_ROOT/etc/rpm
-# remove some nonsense or non-working scripts
-pushd $RPM_BUILD_ROOT/usr/lib/rpm/
-for f in rpm2cpio.sh rpm.daily rpmdiff* rpm.log rpm.xinetd freshen.sh u_pkg.sh \
- magic magic.mgc magic.mime* rpmfile *.pl javadeps brp-redhat \
- brp-strip-static-archive vpkg-provides*.sh http.req sql.req tcl.req \
- rpmdb_* brp-sparc64-linux brp-strip-comment-note brp-java-gcjcompile
-do
- rm -f $f
-done
-for i in /usr/share/automake-*/*; do
- if test -f "$i" && test -f "${i##*/}"; then
- rm -f "${i##*/}"
- fi
-done
-popd
-gzip -9 CHANGES
-rm -rf $RPM_BUILD_ROOT/%{_libdir}/python%{py_ver}
-rm -f $RPM_BUILD_ROOT%{_libdir}/*.la
-rm -f $RPM_BUILD_ROOT%{_libdir}/rpm-plugins/*.la
-sh $RPM_BUILD_ROOT/usr/lib/rpm/find-lang.sh $RPM_BUILD_ROOT rpm
%clean
rm -rf $RPM_BUILD_ROOT
@@ -300,8 +265,6 @@ if test -s var/lib/rpm/packages.rpm ; then
mv -f var/lib/rpm/packages.rpm var/lib/rpm/packages.rpm3
rm -f var/lib/rpm/conflictsindex.rpm var/lib/rpm/fileindex.rpm var/lib/rpm/groupindex.rpm var/lib/rpm/nameindex.rpm var/lib/rpm/providesindex.rpm var/lib/rpm/requiredby.rpm var/lib/rpm/triggerindex.rpm
fi
-# delete no longer maintained databases
-rm -f var/lib/rpm/Filemd5s var/lib/rpm/Filedigests var/lib/rpm/Requireversion var/lib/rpm/Provideversion
%postun
%{insserv_cleanup}
@@ -309,40 +272,1064 @@ rm -f var/lib/rpm/Filemd5s var/lib/rpm/Filedigests var/lib/rpm/Requireversion va
%verifyscript
%verify_permissions -f /usr/lib/rpm/permlist
-%files -f rpm.lang
+%files
%defattr(-,root,root)
-%doc CHANGES.gz COPYING GROUPS
+%doc RPM-PGP-KEY RPM-GPG-KEY CHANGES COPYING GROUPS
%doc doc/manual
-%doc RPM-HOWTO RPM-Tips
+%doc RPM-HOWTO RPM-Tips RPM-Changes
/etc/rpm
/bin/rpm
/usr/bin/*
/etc/init.d/rpmconfigcheck
/usr/sbin/rcrpmconfigcheck
/usr/lib/rpm
- %{_libdir}/rpm-plugins
- %{_libdir}/librpm.so.*
- %{_libdir}/librpmbuild.so.*
- %{_libdir}/librpmio.so.*
- %{_libdir}/librpmsign.so.*
+ %{_libdir}/librpm*-*.so
%doc %{_mandir}/man[18]/*.[18]*
+#%doc %{_mandir}/*/man[18]/*.[18]*
+ /usr/share/locale/*/LC_MESSAGES/rpm.mo
%dir /var/lib/rpm
%verify(not mode) %dir %attr(755,root,root) /usr/src/packages/BUILD
%verify(not mode) %dir %attr(755,root,root) /usr/src/packages/SPECS
%verify(not mode) %dir %attr(755,root,root) /usr/src/packages/SOURCES
%verify(not mode) %dir %attr(755,root,root) /usr/src/packages/SRPMS
%verify(not mode) %dir %attr(755,root,root) /usr/src/packages/RPMS
-%verify(not mode) %dir %attr(755,root,root) /usr/src/packages/BUILDROOT
%verify(not mode) %dir %attr(755,root,root) /usr/src/packages/RPMS/*
/var/adm/fillup-templates/sysconfig.services-rpm
%files devel
%defattr(644,root,root,755)
/usr/include/rpm
+ %{_libdir}/librpm*.a
+ %{_libdir}/librpm*.la
%{_libdir}/librpm.so
%{_libdir}/librpmbuild.so
+ %{_libdir}/librpmdb.so
%{_libdir}/librpmio.so
- %{_libdir}/librpmsign.so
- %{_libdir}/pkgconfig/rpm.pc
+%package -n popt
+Summary: A C library for parsing command line parameters
+License: GNU Library General Public License v. 2.0 and 2.1 (LGPL), Other License(s), see package
+Group: System/Libraries
+Version: 1.7
+Release: 304
+#
-%changelog
+%description -n popt
+Popt is a C library for parsing command line parameters. Popt was
+heavily influenced by the getopt() and getopt_long() functions. It
+improves on them by allowing more powerful argument expansion. Popt can
+parse arbitrary argv[] style arrays and automatically set variables
+based on command line arguments. Popt allows command line arguments to
+be aliased via configuration files and includes utility functions for
+parsing arbitrary strings into argv[] arrays using shell-like rules.
+
+
+
+Authors:
+--------
+ Erik Troan
+
+%package -n popt-devel
+Summary: C Library for Parsing Command Line Parameters
+License: GNU Library General Public License v. 2.0 and 2.1 (LGPL), Other License(s), see package
+Group: System/Libraries
+Version: 1.7
+Release: 304
+Requires: popt = 1.7
+Requires: glibc-devel
+
+%description -n popt-devel
+Popt is a C library for parsing command line parameters. Popt was
+heavily influenced by the getopt() and getopt_long() functions, but it
+improves on them by allowing more powerful argument expansion. Popt can
+parse arbitrary argv[] style arrays and automatically set variables
+based on command line arguments. Popt allows command line arguments to
+be aliased via configuration files and includes utility functions for
+parsing arbitrary strings into argv[] arrays using shell-like rules.
+
+
+
+Authors:
+--------
+ Erik Troan
+
+
+%post -n popt -p /sbin/ldconfig
+
+%postun -n popt -p /sbin/ldconfig
+
+%files -n popt
+%defattr(-,root,root)
+ %{_libdir}/libpopt.so.*
+ /usr/share/locale/*/LC_MESSAGES/popt.mo
+
+%files -n popt-devel
+%defattr(644,root,root,755)
+ /usr/include/popt.h
+ %{_libdir}/libpopt.a
+ %{_libdir}/libpopt.la
+ %{_libdir}/libpopt.so
+%doc %{_mandir}/man3/popt.3*
+
+%changelog -n rpm
+* Thu Nov 30 2006 - mls@suse.de
+- disable noprovides patch [#224824]
+* Fri Nov 24 2006 - mls@suse.de
+- fix buffer overflow in query function [#218983]
+- fix off-by-two error in formatStrong [#210135]
+- fix typo in (unused) beecrypt code [#219738]
+- add standard buildservice macros
+* Tue Nov 14 2006 - agruen@suse.de
+- Add %%supplements_kernel_module macro for use in firmware and
+ similar packages which are related to modules in a
+ kernel-$flavor package: RPM then extracts the modaliases from
+ the specified module(s) and adds them as Supplements:
+ modalias(...) tags, so that the package magaer will add
+ such packages automatically when the respective hardware is
+ present.
+* Wed Nov 08 2006 - agruen@suse.de
+- Move the Kernel Module specific macros into the kernel-source
+ package.
+* Fri Oct 20 2006 - agruen@suse.de
+- Support the distribution-independent macros
+ %%kernel_module_package_buildreq, %%kernel_module_package, and
+ inside %%kernel_module_package, the macros %%flavors_to_build and
+ %%kernel_source.
+* Wed Oct 18 2006 - mls@suse.de
+- split up jumbo patch in 78 small patches
+- fix lua directory handling [#201518]
+- add /etc/rpm directory to filelist [#208762]
+* Mon Oct 16 2006 - agruen@suse.de
+- Fix the KMP Package spec file template so that whenever the
+ initrd contains a module that the KMP includes, the initrd will
+ be regenerated (211646).
+* Sun Oct 15 2006 - schwab@suse.de
+- Make sure config.rpath is present.
+* Mon Oct 02 2006 - agruen@suse.de
+- %%suse_kernel_module_package: Abort when trying to build for a
+ kernel that doesn't have an associated /boot/symsets-$krel.tar.gz
+ file: we cannot generate the appropriate dependencies without.
+* Mon Oct 02 2006 - agruen@suse.de
+- Allow kernel modules in packages even when the dependencies
+ between those packages and the matching kernel packages cannot
+ be tracked (199474).
+* Sun Oct 01 2006 - agruen@suse.de
+- Make find-*.ksyms more robust.
+* Tue Sep 19 2006 - rguenther@suse.de
+- split rpm-python to separate spec file
+- remove python-devel BuildRequires
+* Tue Aug 15 2006 - ro@suse.de
+- workaround for gettext using MKINSTALLDIRS in configure.ac
+* Wed Jun 14 2006 - mls@suse.de
+- make rpmlib provide rpmlib(PatchRPMs) [#184856]
+* Wed Apr 26 2006 - agruen@suse.de
+- rpm-suse-kernel-module-subpackage: Use a temporary file location
+ that only root can write to (169378).
+* Fri Apr 21 2006 - mls@suse.de
+- copy suse_macros file back into source rpm
+* Mon Apr 10 2006 - agruen@suse.de
+- rpm-suse-kernel-module-subpackage: Arguments to -p and -f should
+ be relative to %%_sourcedir.
+* Fri Mar 24 2006 - mls@suse.de
+- fix uninitialized variable in unused file code [#160434]
+* Fri Mar 24 2006 - agruen@suse.de
+- %%suse_kernel_module_package: Fix -x case when multiple flavors
+ to include are specified. Do not build KMP packages without
+ modversions or kernel(...) requirements.
+* Tue Mar 21 2006 - mls@suse.de
+- fix PGP signature checking when there is no RSA sig
+* Mon Mar 20 2006 - agruen@suse.de
+- Switch from modalias(foo) to modalias(kernel-flavor:foo)
+ supplements to give the resolver enough information to do "the
+ right thing".
+* Sun Mar 19 2006 - agruen@suse.de
+- Allow paths relative to %%_sourcedir in
+ %%suse_kernel_module_package.
+* Sat Mar 18 2006 - agruen@suse.de
+- Clarify rpm --help texts.
+* Fri Mar 17 2006 - mls@suse.de
+- fix cond queries that return no result
+* Fri Mar 17 2006 - mls@suse.de
+- work around broken patchrpm database entries [#156347]
+- add query support for suggests/recommends/enhances/supplements
+ [#155301]
+* Sun Mar 12 2006 - agruen@suse.de
+- find-supplements.ksyms: Don't generate too many Supplements;
+ anything that does not have a colon in it (like pci:...) is not
+ a modalias.
+* Sat Mar 11 2006 - ro@suse.de
+- find-debuginfo: only "strip-debug" for static libs,
+ do not use "strip-all" there
+* Fri Mar 10 2006 - agruen@suse.de
+- Make KMP sub-packages require kernel-$flavor instead of kernel
+ (mostly cosmetic).
+* Fri Mar 10 2006 - dmueller@suse.de
+- patch for improved debuginfo extraction (#150940)
+* Thu Mar 09 2006 - agruen@suse.de
+- find-scripts.diff: Add support for %%__find_enhances and
+ %%__find_supplements scripts (from mls@suse.de).
+- modalias.diff: Add modalias(...) Supplements tags that define
+ the hardware that kernel module packages support (e.g.,
+ modalias(pci:vBADOFBADdDEADBEEFsv*sd*bc*sc*i*)).
+* Mon Mar 06 2006 - agruen@suse.de
+- %%suse_kernel_module_package: Add a -p option for defining
+ additional preamble lines in sub-packages, subject to the same
+ macro expansion as the sub-package (-s) itself.
+* Wed Mar 01 2006 - schwab@suse.de
+- Fix logic error in find_debuginfo.sh [#144629].
+* Fri Feb 24 2006 - mls@suse.de
+- fix cursor leak in rpmdbGrowIterator [#151953]
+- print error message if scriptlet fork fails [#152779]
+* Sun Feb 19 2006 - agruen@suse.de
+- scripts/find-requires.ksyms: Fix bug in last find-requires.ksyms
+ fix.
+* Sat Feb 18 2006 - ro@suse.de
+- allow debuginfo packages also for noarch (for mono,java)
+* Fri Feb 17 2006 - mls@suse.de
+- put mono debug files in debuginfo packages [#151353]
+- fix off-by-one error in glob code
+- define _libexecdir to be _libdir [#136762]
+- rename improves to supplements
+* Thu Feb 16 2006 - agruen@suse.de
+- scripts/find-requires.ksyms: Tolerate kernel modules that have
+ more than one vermagic info entry (it happened!).
+* Mon Feb 13 2006 - agruen@suse.de
+- rpm-suse-kernel-module-subpackage:
+ + Search for the spec file in %%_sourcedir and %%_specdir (150119).
+ + If no KMP subpackage exists, use the Group and Summary tags
+ of the main package.
+* Fri Feb 10 2006 - mls@suse.de
+- add back missing chunk of srcdefattr patch [#48870]
+- add rpmvercmp patch from Peter Bowan
+- add -m32 to ix86 optflags to make --target work [#141206]
+* Sat Feb 04 2006 - agruen@suse.de
+- rpm-suse-kernel-module-subpackage: Allow to specify a list of
+ kernel flavors to build (-x) instead of specifying an exclude
+ list.
+* Fri Feb 03 2006 - mls@suse.de
+- use RPMSENSE_STRONG instead of RPMSENSE_WEAK
+- drop support for EssentialFor
+* Wed Feb 01 2006 - agruen@suse.de
+- rpm-suse-kernel-module-subpackage: Allow to specify a custom
+ %%files list for the kernel-specific sub-packages. Use the
+ Summary and Group tags, and the %%description section from the
+ KMP sub-package for the kernel-specific sub-packages.
+* Tue Jan 31 2006 - agruen@suse.de
+- rpm-suse-kernel-module-subpackage: Add version to additional
+ Provides tag. We may need this for future Obsoletes.
+* Fri Jan 27 2006 - mls@suse.de
+- added support for EssentialFor and Supports
+- enabled support for lua scripts
+* Fri Jan 27 2006 - agruen@suse.de
+- rpm-suse-kernel-module-subpackage: Add "Requires: kernel". Add
+ -r option to override the release number. Clean up.
+* Thu Jan 26 2006 - agruen@suse.de
+- rpm-suse_macros: Add -v option to %%suse_kernel_module_package
+ to allow specifying a kernel module version different from the
+ main package version. Restore the %%version, %%summary, and
+ %%group macros of the main package at the end of
+ %%suse_kernel_module_package.
+* Wed Jan 25 2006 - mls@suse.de
+- converted neededforbuild to BuildRequires
+* Tue Jan 17 2006 - agruen@suse.de
+- rpm-suse_macros: Add %%suse_kernel_module_package macro for
+ building kernel module packages.
+* Wed Jan 11 2006 - agruen@suse.de
+- rpm-4.4.2.diff: find-requires.ksyms must not print "Requires:".
+ Remove trailing whitespace.
+* Wed Dec 21 2005 - mls@suse.de
+- make transaction lock --root aware
+* Mon Dec 19 2005 - mls@suse.de
+- don't ignore getcwd return value in build.c
+* Mon Dec 19 2005 - mls@suse.de
+- fix find-lang.sh script
+* Sun Dec 18 2005 - mls@suse.de
+- fix find-debuginfo script
+* Sun Dec 18 2005 - mls@suse.de
+- don't assume root:root defattr
+* Sun Dec 18 2005 - agruen@suse.de
+- fix wrong buildsubdir macro name
+* Thu Dec 15 2005 - mls@suse.de
+- update to version 4.4.2
+ for now without lua, rpc, dav support
+* Wed Dec 07 2005 - agruen@suse.de
+- Add find-{requires,provides}.ksyms and invoke them from the
+ global find-{requires,provides} scripts. The scripts add
+ "kernel(symbol set) = version" and "kver(symbol) = version"
+ provides and requires to kernel module packages.
+- Add symset-table script used to generate a table of known
+ kernel symbol sets from /boot/symsets-*.tar.gz.
+- Add rpmsort script to sort a file into RPM version order. Used
+ in kernel scripts to sort kernel packages by version.
+* Tue Nov 22 2005 - ro@suse.de
+- change NO_BRP_STRIP_DEBUG to NO_DEBUGINFO_STRIP_DEBUG
+- fix patchrpm code not to modify immutable header parts
+* Fri Nov 18 2005 - ro@suse.de
+- honor NO_BRP_STRIP_DEBUG in find-debuginfo.sh
+* Sat Oct 29 2005 - mls@suse.de
+- use lstat instead of stat when globbing (#129434)
+- add RPMTAG_PKGID and RPMTAG_HDRID
+- make python always return requires/provides/obsoletes/conflicts
+ as array
+* Mon Oct 24 2005 - ro@suse.de
+- find-requires/find-provides: fix MONO_PATH
+* Thu Oct 20 2005 - ro@suse.de
+- find-requires/find-provides: update mono hooks
+* Wed Sep 07 2005 - matz@suse.de
+- Make debuginfo packages require exact version of base rpm.
+* Fri Sep 02 2005 - mls@suse.de
+- backport CLOEXEC workaround [#93727]
+- fix typo in man page [#114909]
+* Thu Aug 25 2005 - mls@suse.de
+- don't catch ignored signals [#74560]
+- unblock all signals when running scripts
+* Mon Aug 22 2005 - mls@suse.de
+- do not try to mmap zero sized files in domd5()
+* Fri Aug 12 2005 - mls@suse.de
+- change -mcpu to -mtune and add -D_FORTIFY_SOURCE=2 [#104241]
+* Wed Aug 03 2005 - mls@suse.de
+- ignore /media when creating fdilesystem list
+- allow --ignoresize when erasing packages
+* Fri Jul 01 2005 - schwab@suse.de
+- Fix ppc assembly syntax.
+* Wed Jun 08 2005 - matz@suse.de
+- add STRIP_KEEP_SYMTAB to find-debuginfo.sh
+* Sat May 21 2005 - schwab@suse.de
+- find-debuginfo.sh: make writable before extracting debug info, simplify.
+* Thu May 19 2005 - schwab@suse.de
+- Replace absolute symlinks when copying sources for debuginfo package.
+* Wed Apr 06 2005 - schwab@suse.de
+- Cleanup neededforbuild.
+* Wed Apr 06 2005 - meissner@suse.de
+- Added gettext-devel
+* Tue Apr 05 2005 - bg@suse.de
+- add noarch to valid hppa architectures
+* Thu Mar 24 2005 - uli@suse.de
+- better ARM support
+* Sun Feb 20 2005 - od@suse.de
+- fix debugedit for relocatable files (kernel modules) on ppc
+* Fri Feb 18 2005 - mls@suse.de
+- update debugedit program
+* Fri Feb 18 2005 - od@suse.de
+- make find-debuginfo.sh handle kernel modules
+* Wed Feb 16 2005 - mls@suse.de
+- fix --rebuilddb with --root [#50993]
+* Fri Feb 11 2005 - mls@suse.de
+- update to elfutils-0.97 [#47746], [#48471]
+- update to db-4.2.52 [#44193]
+- pack brp-symlink
+* Fri Feb 11 2005 - ro@suse.de
+- remove -fsigned-char from rpmrc (#49877)
+* Sat Feb 05 2005 - schwab@suse.de
+- Fix building with gcc 4.
+* Fri Feb 04 2005 - mls@suse.de
+- make python-2.4 work [#49990]
+- fix --setguids / --setperms [#47122]
+- makd gpgv4 signatures work [#42282]
+- add brp-symlink [#49596]
+* Fri Feb 04 2005 - ro@suse.de
+- fix one regexp in find_lang change
+* Thu Feb 03 2005 - ro@suse.de
+- hppa may install noarch
+* Wed Feb 02 2005 - schwab@suse.de
+- Remove compatibility provides on ia64.
+* Mon Jan 31 2005 - adrian@suse.de
+- handle also ??_?? languages in %%find_lang.
+* Fri Jan 28 2005 - coolo@suse.de
+- let the debuginfo packages work again
+* Fri Jan 21 2005 - skh@suse.de
+- changed jpackage macros
+* Fri Jan 21 2005 - coolo@suse.de
+- use binutils for debuginfo packages
+* Fri Jan 14 2005 - coolo@suse.de
+- name the debug package -debuginfo to sync with redhat/fedora
+* Mon Dec 13 2004 - sndirsch@suse.de
+- moved chinese popt mo file to correct directory (Bug #47262)
+* Fri Dec 03 2004 - mls@suse.de
+- fix update of rpm with same name/version/release but different
+ architecture
+* Thu Nov 25 2004 - ro@suse.de
+- fix build with python-2.4
+* Tue Nov 16 2004 - ro@suse.de
+- update permissions handling
+* Tue Oct 19 2004 - ro@suse.de
+- locale rename: no -> nb
+* Mon Sep 27 2004 - mls@suse.de
+- move TE type initializaten before the addTE call to make
+ relocations work [#34871, #43557]
+* Fri Sep 24 2004 - mls@suse.de
+- check payloadformat for "cpio", print extra deltarpm message
+- don't skip directories in the fingerprint check when deleting rpms
+* Thu Sep 23 2004 - mls@suse.de
+- allow database read access in scripts
+* Wed Sep 22 2004 - mls@suse.de
+- only retry locking if errno is EAGAIN [#45704]
+* Fri Sep 17 2004 - mls@suse.de
+- fix isSpecfile fix
+- reset SIGILL handler in RPMClass()
+* Mon Sep 13 2004 - mls@suse.de
+- glob.h: add workaround for invalid prototypes
+* Thu Sep 09 2004 - mls@suse.de
+- fix jpackage macros
+- change binary payload compression to w9.bzdio
+- fix localization of query results [#38474]
+- delete unmaintained cpanflute scripts [#39988]
+- patch isSpecfile to be less restrictive [#40328]
+- wait up to 3 minutes for the package lock [#40961]
+* Thu Sep 02 2004 - mls@suse.de
+- add jpackage macros
+* Fri Aug 06 2004 - mls@suse.de
+- make it build with new automake
+* Wed Jun 23 2004 - mls@suse.de
+- add support for mono provides/requires autodetection.
+ limited to *.exe and *.dll for now.
+* Sun May 23 2004 - schwab@suse.de
+- Don't record timestamp in compressed manpages.
+* Thu Apr 22 2004 - mls@suse.de
+- add DISABLE_RESTART_ON_UPDATE and DISABLE_STOP_ON_REMOVAL
+ sysconfig variables
+* Mon Apr 19 2004 - mls@suse.de
+- go back to libpopt.so.0.0.0
+- also create and pack libpopt.so.1.0.0 for compatibility
+* Wed Mar 31 2004 - uli@suse.de
+- added detection of i686-capable Transmeta Crusoe that reports
+ as being i586 (bug #37713). This patch is necessary because YaST
+ (rightfully) tries to install an i686 glibc on machines with this CPU, but
+ RPM refuses to do so -> BOOM. This patch is safe because it only uses
+ cpuid functions already used earlier in RPMClass() and does not do
+ anything if the CPU identification string does not end in "ineTMx86".
+* Wed Mar 31 2004 - ke@suse.de
+- remove broken german translation file [#30665],
+* Fri Mar 26 2004 - mls@suse.de
+- use the system's zlib, fixes python segfault [#36810]
+* Sun Mar 21 2004 - aj@suse.de
+- Work around lvalue used as cast problems.
+* Thu Mar 18 2004 - mls@suse.de
+- convert query results to locale encoding [#28347]
+- don't check provides if filename doesn't contain '/' [#32078]
+- allow interrups if database is RDONLY [#33026]
+- added _srcdefattr macro to set defattr for srpms [#33870]
+- drop sbits from old files if installing new version [#35376]
+- remove bogus entries from .la files [#36346]
+- add _docdir_fmt macro to make it possible to create rpms
+ for other distributions
+* Sat Mar 06 2004 - ro@suse.de
+- readd lost patch hunk from last change:
+ set docdir default back to .../packages/%%name (w/o version)
+* Fri Mar 05 2004 - mls@suse.de
+- backport some fixes from rpm-4.2
+- match py_libdir macro definition with python
+- clean and re-create buildroot in a safe way
+* Sat Feb 28 2004 - schwab@suse.de
+- Remove anchor from pattern in find-requires.
+* Fri Feb 27 2004 - schwab@suse.de
+- Silence error from find.
+* Fri Feb 27 2004 - mls@suse.de
+- fix definition of _initrddir
+- set sysconfdir to /etc
+- set localstatedir to /var
+* Thu Feb 26 2004 - schwab@suse.de
+- Handle more cases of filenames with spaces.
+* Thu Feb 26 2004 - ro@suse.de
+- some fixes in linux.prov to survive filenames with spaces
+* Thu Feb 12 2004 - mls@suse.de
+- fixed linux.req soname generation (#21664)
+- disable nptl for now
+* Mon Feb 09 2004 - kukuk@suse.de
+- linux.req: Fix finding of interpreters
+* Sat Feb 07 2004 - olh@suse.de
+- disable redhat's uname hack for ppc
+* Thu Feb 05 2004 - ro@suse.de
+- linux.prov: don't block soname in versioned-requires
+- linux.req: disable perl-requires, it's broken
+* Tue Feb 03 2004 - schwab@suse.de
+- Readd ia64 64bit provides hack.
+* Tue Feb 03 2004 - kukuk@suse.de
+- Remove all special find-requires scripts and use the default one
+* Sat Jan 17 2004 - schwab@suse.de
+- Filter out linux-gate.so.
+* Thu Jan 15 2004 - schwab@suse.de
+- For ia64 require 64bit symbols and provide them both with and without
+ 64bit.
+* Tue Jan 13 2004 - adrian@suse.de
+- call ldconfig
+- add missing Requires in -devel packages
+- add %%defattr
+* Fri Jan 09 2004 - kukuk@suse.de
+- Coompile with "-fno-strict-aliasing"
+* Fri Nov 14 2003 - bg@suse.de
+- added changes for hppa
+- fix build for hppa
+* Fri Oct 10 2003 - sf@suse.de
+- added alias 'amd64' for 'x86_64'
+* Fri Oct 10 2003 - ro@suse.de
+- ignore "linux-gate.so" in ldd output (on 2.6 systems)
+* Wed Oct 08 2003 - schwab@suse.de
+- Add popt to prerequires for rpm.
+* Tue Sep 23 2003 - mls@suse.de
+- really disable rpmconfigcheck
+* Sat Sep 20 2003 - kukuk@suse.de
+- Don't enable rpmconfigcheck per default
+* Fri Sep 19 2003 - schwab@suse.de
+- Fix descriptor leak [#31450].
+* Mon Sep 15 2003 - mls@suse.de
+- remove redhat options from popt (#30302)
+- check name and arch to find out if two packages are the same
+* Fri Sep 05 2003 - mls@suse.de
+- fix rpmalMakeIndex and off by one error in rpmalAllSatisfiesDepend
+* Fri Sep 05 2003 - mls@suse.de
+- use mkstemp in build.c
+- fix --noghost query option
+* Fri Sep 05 2003 - mls@suse.de
+- escape '+' in MIRE_DEFAULT iterator
+- use MIRE_STRCMP when going for an exact match
+- update rpmrc
+* Wed Sep 03 2003 - mls@suse.de
+- speed up installation by making nofsync local and setting it
+ for all databases but Packages
+- fix database locking issue (#29407)
+- don't open temporary databases in chroot case (may fix #29584)
+* Mon Sep 01 2003 - schwab@suse.de
+- Fix assembler routines to not clobber predicate registers.
+* Fri Aug 29 2003 - mcihar@suse.cz
+- rpm-python require same python version as it was built with
+* Fri Aug 22 2003 - mls@suse.de
+- make usage of / in post section consistent
+- don't force the activation of rpmconfigcheck
+* Tue Aug 05 2003 - coolo@suse.de
+- give libpopt a soname > 0 as it's not compatible to the libpopt
+ on SL 8.2 (now that we link shared, it does matter)
+* Fri Aug 01 2003 - mls@suse.de
+- fix segfault in rpmdbFindByFile
+* Thu Jul 31 2003 - mls@suse.de
+- added directory tagging to speed up installation/updates
+* Tue Jul 29 2003 - mls@suse.de
+- add support for patch-rpms
+- fix --root option (#28266)
+- fix erase exit status (#28267)
+- fix database open ignoring locks the second time
+* Fri Jul 11 2003 - mls@suse.de
+- add perl_vendorlib and perl_vendorarch
+- integrate patches
+* Tue Jul 01 2003 - coolo@suse.de
+- update find-debuginfo.sh to fix permissions of copied files
+- give warning on already stripped files
+* Fri Jun 27 2003 - schwab@suse.de
+- Fix configure scripts.
+- Don't link rpm statically.
+* Fri Jun 20 2003 - kukuk@suse.de
+- use -fPIC, not -fpic to compile elfutils
+* Thu Jun 19 2003 - ro@suse.de
+- fix build (gettext and definition of mkinstalldirs)
+* Mon Jun 16 2003 - kukuk@suse.de
+- Don't call find on /usr/share/locale if directory does not exist.
+* Sat Jun 14 2003 - coolo@suse.de
+- avoid stale links in /usr/src/debug
+* Fri Jun 13 2003 - mls@suse.de
+- make PreReqs work again if --nodeps is used
+- fix rpmconfigcheck
+- apply find-debuginfo.sh patch from coolo
+* Thu Jun 12 2003 - kukuk@suse.de
+- Fix find-lang.sh (special /usr/share/locale handling)
+* Thu Jun 12 2003 - coolo@suse.de
+- enhancing find-lang.sh to take KDE/GNOME into account and label
+ them correctly
+* Wed Jun 11 2003 - kukuk@suse.de
+- Remove translated manual pages
+* Fri Jun 06 2003 - mls@suse.de
+- fix vendor for s390/s390x
+* Thu Jun 05 2003 - mls@suse.de
+- no longer build rpm static
+- add --fileclass and --filecolor macros to rpmpopt
+* Thu Jun 05 2003 - ro@suse.de
+- remove dangling rpmpopt symlink
+* Mon Jun 02 2003 - mls@suse.de
+- convertdb1: call providePackageNVR to retrofit "Provide: name = EVR"
+ into converted headers
+* Fri May 23 2003 - ro@suse.de
+- fixed brp-compress to convert bzip2 man pages into gziped ones
+ (even if hardlinked). (#21121) (from ma)
+* Fri May 16 2003 - mls@suse.de
+- fixed x86_64 build
+* Thu May 15 2003 - mls@suse.de
+- update to rpm-4.1.1
+* Tue May 13 2003 - mls@suse.de
+- don't obsolete own package when refreshing
+- fix parsing of nested conditionals (again)
+* Tue May 13 2003 - mls@suse.de
+- created rpm-python subpackage
+- fix check-files/fixowner, second try
+* Mon May 12 2003 - mls@suse.de
+- fix check-files to work without buildroot
+* Mon May 12 2003 - mls@suse.de
+- re-activate fixowner/group/perms
+- allow /usr/share/info/dir in check-files
+- fix 'head -n 1' in /usr/lib/rpm/find-requires
+* Thu May 08 2003 - mls@suse.de
+- update to rpm-4.1
+* Mon Apr 07 2003 - ro@suse.de
+- fix for new head(1) syntax
+* Mon Mar 10 2003 - mls@suse.de
+- fix exit status if file to be installed is not a rpm package
+* Fri Feb 28 2003 - mls@suse.de
+- use mkstemp instead of tempnam (#24478)
+* Thu Feb 20 2003 - ma@suse.de
+- Work arround rpm2cpio wrongly reporting an error, if the rpm file
+ is read from stdin. (#16800)
+* Mon Feb 17 2003 - mls@suse.de
+- made rpmconfigcheck add new files to /var/log/update-messages
+* Fri Feb 14 2003 - schwab@suse.de
+- Save errno inside Fclose, its return value is never checked anyway.
+* Fri Feb 14 2003 - pthomas@suse.de
+- find-provides for elf64 systems used to omit symbol versions
+ if they contained the soname, fixed by find_provides_soname.diff.
+* Wed Feb 12 2003 - mls@suse.de
+- removed runlevels '1' and 'S' from rpmconfigcheck
+* Fri Feb 07 2003 - mls@suse.de
+- speed up rpmconfigcheck by just checking the old conflicts if
+ no rpm was installed
+- rerun gpg if gpg fails with "option file created"
+- set LC_ALL to C before calling gpg
+* Tue Jan 28 2003 - kukuk@suse.de
+- Remove wrong Provides "rpm-devel" and "rpm-python" from Provides
+* Sun Jan 26 2003 - olh@suse.de
+- the official arch_canon value for ppc64 is 16, not 5
+* Thu Jan 16 2003 - ma@suse.de
+- update subpackage popt to 1.6.4
+* Thu Dec 19 2002 - schwab@suse.de
+- Update autogen patch.
+* Mon Nov 18 2002 - stepan@suse.de
+- add m68k as chanonical architecture to configure.in
+* Mon Nov 18 2002 - ro@suse.de
+- adapt to latest autoconf
+- use host instead of host_alias for %%host_alias since the latter
+ is not set
+* Mon Nov 11 2002 - ma@suse.de
+- let linux.prov list vrsion definitions in libraries/plugins without
+ soname. (find_provides.diff) (#21664)
+* Fri Oct 25 2002 - sf@suse.de
+- corrected %%_libdir-macro (rpm-3.0.6-platform.diff)
+* Mon Oct 21 2002 - schwab@suse.de
+- Fix read beyond EOS.
+* Mon Oct 07 2002 - ro@suse.de
+- fixed brp-compress script for current fileutils
+ (add LC_TIME=POSIX, this bug lead to broken tcl man pages)
+* Wed Oct 02 2002 - mls@suse.de
+- update unpatched files in patchrpms even if --nodeps is used
+ [Bug #20418]
+* Sat Aug 24 2002 - ro@suse.de
+- fix popt-devel requires
+* Sun Aug 18 2002 - olh@suse.de
+- adding -mminimal-toc to each package is a boring job
+ use it per default on ppc64
+* Thu Aug 15 2002 - kukuk@suse.de
+- Add insserv PreRequires [Bug #17969]
+* Mon Aug 12 2002 - bk@suse.de
+- rpmrc/s390{,x}: change dummy -fomit-frame-pointer to -fsigned-char
+* Sat Aug 10 2002 - schwab@suse.de
+- Make ia64 arch_compat to i686.
+* Sat Aug 10 2002 - kukuk@suse.de
+- Fix version number of popt-devel
+* Fri Aug 09 2002 - kukuk@suse.de
+- Fix typo
+* Fri Aug 09 2002 - kukuk@suse.de
+- Fix requires of rpm-devel and popt-devel
+* Fri Aug 09 2002 - ro@suse.de
+- adapt automake version in configure
+* Fri Jul 26 2002 - mls@suse.de
+- Added perl/python macros from conectiva
+* Fri Jul 26 2002 - kukuk@suse.de
+- Create rpm-devel and popt-devel subpackages [Bug #17225]
+* Fri Jul 26 2002 - kukuk@suse.de
+- Change Requires for suse-build-key to build-key
+* Thu Jul 25 2002 - mls@suse.de
+- renamed rpmconfigscan to rpmconfigcheck
+- fixed elf64-linux.req to ignore scripts without #!
+- disabled tag check in rpmdbFindByFile, too dangerous
+* Thu Jul 18 2002 - mls@suse.de
+- fixed double free of header if the postinstall script failed
+- return exit status when doing --initdb
+* Thu Jul 11 2002 - mls@suse.de
+- use "officially reserved" value of RPMFILE_UNPATCHED
+- added rpmconfigcheck script to search for unresolved config
+ file changes
+* Mon Jul 08 2002 - mls@suse.de
+- new version of patchrpm diff: handle patch "freshen" operations
+ gracefully
+- documented patchrpm options
+- taggedindex diff: add directory tags to the fileindex to speed
+ up file conflict detection
+* Tue Jul 02 2002 - ke@suse.de
+- Update German program messages using translations by Christian
+ Kirsch. Add as Source7; drop Patch19 [# 8442].
+* Fri Jun 21 2002 - ro@suse.de
+- automake is 1.6.2
+* Wed Jun 12 2002 - bk@suse.de
+- ppc: fix arch for elf64.prov and elf64.req to powerpc(from olh)
+- s390x: fix brp-lib64-linux to ignore */lib/ld64.so.1 in lib check
+- remove obsolete x64_64 scripts, replaced by generic elf64 scripts
+- rpm-3.0.6.pkg_build.diff: remove obsolete diff for sparc-linux.req
+* Fri May 31 2002 - olh@suse.de
+- remove ppc64 hack
+* Mon May 27 2002 - bk@suse.de
+- all lib64 platforms use the same brp, req and prov scripts now.
+- merge mips diff to not include private flags into linux.req.suse
+- merge last rpm-3.0.6-s390x-lib64.diff into rpm-3.0.6.config.diff
+- add (64bit) fix for empty soname in elf64.prov from sles7-s390x
+* Fri May 17 2002 - olh@suse.de
+- add more ppc64 changes, add brp-ppc64-linux
+- apply mips, x86_64 and s390x patches on all archs
+- rpm-3.0.6.lib64.diff: merged all lib64 stuff and add SUBSTS macros
+ for uname->target_cpu handling on ppc64, s390 and x86_64
+* Wed May 15 2002 - ro@suse.de
+- update brp-x86_64-linux
+* Wed May 15 2002 - mfabian@suse.de
+- fix ja.po, it contained some junk which caused mojibake on
+ output, especially in ja_JP.UTF-8 locale. Remove a lot
+ of fuzzies which had correct translations.
+* Mon May 13 2002 - olh@suse.de
+- do not translate ppc64 to ppc anymore
+* Fri Apr 26 2002 - sf@suse.de
+- fixed brp-x86_64-linux script
+- added *.a-files to brp-script
+- look _only_ for files or links with names *.a, *.so*
+- added /opt/gnome/lib and /opt/kde/lib
+* Wed Apr 24 2002 - sf@suse.de
+- added script to show requires and provides with 64 bit
+ (like s390 and sparc64)
+- rpm will now stop (on x86_64) if a 64-bit binary
+ (or a link to one) is found in
+ $RPM_BUILD_ROOT{, /usr, /usr/X11R6}/lib
+* Wed Apr 24 2002 - ke@suse.de
+- patch19: Fix 1 german message (3 strings) in de.po [# 8442].
+* Mon Apr 22 2002 - kukuk@suse.de
+- Remove broken s390x try to fix lib64 library location
+* Thu Apr 18 2002 - kukuk@suse.de
+- x86_64 can also build noarch packages
+* Wed Apr 17 2002 - sf@suse.de
+- install i386-rpms on x86_64
+- patch65 only, if not on s390x (doesn't apply)
+- patch to build with new automake (ro)
+* Fri Apr 12 2002 - kukuk@suse.de
+- Don't apply s390x 64bit hacks on sparc64, sparc64 has a working
+ libtool
+* Thu Apr 11 2002 - mls@suse.de
+- fixed bug in patchrpm case that prevented the reuse of
+ old timestamps in unpatched files in some cases
+- fixed patchrpm dependency failure message
+* Wed Apr 10 2002 - sf@suse.de
+- added x86_64 architecture
+- added --libdir to autogen.sh to copy the libs depending on
+ architecture (lib / lib64)
+* Fri Mar 29 2002 - schwab@suse.de
+- Fix for new autotools.
+* Fri Mar 22 2002 - mls@suse.de
+- added rpmqpack program to speed up susehelp
+* Wed Mar 20 2002 - ro@suse.de
+- modified config.diff for currently used optflags (#15123)
+* Mon Mar 18 2002 - schwab@suse.de
+- Don't lose errno.
+* Mon Mar 11 2002 - mls@suse.de
+- use gpg --keyring when checking keys with uid != 0
+- use hardcoded keyring path if _gpg_path is not set and uid == 0
+- removed _gpg_path from suse_macros
+* Sat Mar 09 2002 - bk@suse.de
+- brp-s390x-linux: merge lib64 fix: patch .la files when moving
+* Fri Mar 08 2002 - ma@suse.de
+- introduced x86_64 architecture in rpmrc (#14110)
+* Fri Mar 08 2002 - mls@suse.de
+- backported rpm4 fix to get mtime right on s390x
+* Mon Feb 25 2002 - mls@suse.de
+- added patchrpm support
+- changed rpm -qi to include the distribution
+* Thu Feb 21 2002 - schwab@suse.de
+- Fix to build with new gettext.
+* Mon Feb 18 2002 - ro@suse.de
+- added requires for suse-build-key
+* Mon Feb 11 2002 - ro@suse.de
+- tar option for bz2 is now "j" (re-added)
+* Mon Feb 11 2002 - ma@suse.de
+- unk_ugname_cached.diff: Upon building a package, unpacking sources
+ by calling tar from the spec file, may lead to files with unknown
+ user/group names. If those files are to be included in the final
+ package, it's not appropriate to simply map unknown user/group names
+ to the builders user/group (usg. root). This behaviour has been disabled
+ and building the package will fail. There are ample means to propperly
+ define file attributes. If a spec file does not use them, although it
+ should, it's considered broken.
+ Unknown user/group names lead to NULL entries in rpms user/group name cache,
+ which may cause a segmentation fault on cache lookup. This has been fixed.
+* Sat Jan 26 2002 - ro@suse.de
+- apply configure-diff also on s390x
+* Mon Jan 21 2002 - bk@suse.de
+- use RPM_OPT_FLAGS for compilation
+- add lib64 support for s390x
+- update srcdir-supplied rpm-suse_macros file to newest version
+ adds: %%_lib handling for ltconfig/-main and macro suse_update_libdir
+- sparc64 and s390x: call scripts/brp-%%_arch-linux at the end of install
+* Wed Jan 16 2002 - schwab@suse.de
+- Fix parsing of nested conditionals.
+* Wed Jan 02 2002 - schwab@suse.de
+- Remove wrong assertion.
+* Tue Dec 18 2001 - adrian@suse.de
+- fix find-requires for objdump with private flags finaly
+* Mon Dec 17 2001 - adrian@suse.de
+- apply mips patch only on mips architecture
+- fix mips patch
+* Sun Dec 16 2001 - adrian@suse.de
+- fix find-requires script for mips
+ ( do not include private flags from objdump to dependencies )
+* Wed Dec 05 2001 - schwab@suse.de
+- Use optind = 0 to reset getopt in glibc.
+* Mon Dec 03 2001 - schwab@suse.de
+- Fix another endian bug due to pointer mismatch.
+* Thu Nov 22 2001 - mls@suse.de
+- reset getopt in grabArgs() macro expansion
+* Thu Nov 15 2001 - ma@suse.de
+- Fixed: copyFile() in rpmchecksig didn't recognize 'No space left on
+ device' condition, when creating tempfiles. rpm reported that the
+ signature was not ok instead. (#12294)
+* Thu Nov 08 2001 - adrian@suse.de
+- name mips big endian as "mips" instead of "mipseb"
+ this is compatible to all GNU tools and to the SGI distribution
+* Sat Nov 03 2001 - ro@suse.de
+- accept automake 1.5 (still needs depcomp added)
+* Tue Sep 04 2001 - schwab@suse.de
+- Accept libtool 1.4.1.
+* Fri Aug 17 2001 - ro@suse.de
+- Exclude /usr/share/doc from Requires
+* Sat Jul 21 2001 - schwab@suse.de
+- Adapt for autoconf 2.52.
+- Allow libtool version suffix.
+* Tue Jul 03 2001 - kukuk@suse.de
+- Fix typo in last change
+* Mon Jul 02 2001 - ma@suse.de
+- Change -m486 to -mcpu=i486 in optflags
+* Wed Jun 20 2001 - ma@suse.de
+- Don't define popt version via macro. Abuild does not like it (#8224).
+- Patches for rpmrc.in (ia64.dif,ppc64.rpmrc.diff) incorporated
+ into config.diff.
+- Patches for brp scripts (strip_no_lib.dif) and sparc64-linux.{req,prov}
+ scripts (sparc64.dif) incorporated into pkg_build.diff.
+* Wed Jun 13 2001 - bk@suse.de
+- rpm-3.0.6.config.diff: add s390x support
+* Mon Jun 11 2001 - olh@suse.de
+- add ppc64 diff
+* Fri Jun 08 2001 - schwab@suse.de
+- Fix endian bugs.
+* Mon Jun 04 2001 - kukuk@suse.de
+- Fix requires/provides scripts for sparc64
+* Fri Jun 01 2001 - schwab@suse.de
+- Fix for new configure tools.
+* Wed May 09 2001 - mfabian@suse.de
+- bzip2 sources
+* Thu May 03 2001 - ma@suse.de
+- provides script shouldn't block soname as version
+* Tue May 01 2001 - kukuk@suse.de
+- modify spec file for sparc64
+* Thu Apr 12 2001 - ro@suse.de
+- gettextize to compile with new gettext
+* Fri Apr 06 2001 - kukuk@suse.de
+- Make some changes to the changes entries so rpm likes it again
+* Thu Mar 29 2001 - ro@suse.de
+- provides/requires script: add "-n200" to xargs arguments
+* Mon Feb 26 2001 - ro@suse.de
+- no optimization for alpha for now ...
+* Wed Feb 14 2001 - ma@suse.de
+- Fix rpmio (unknown type off64_t) with glibc >= 2.2
+- Fix configure.in to recognize SuSE as platform specific vendor
+* Tue Feb 06 2001 - ro@suse.de
+- popt: include float.h to make it compile
+* Wed Jan 17 2001 - schwab@suse.de
+- Mark ia64 as compatible to i386.
+* Mon Jan 08 2001 - ma@suse.de
+- fixed previous fix (error occuring outside %%doc was lost)
+* Sat Jan 06 2001 - ma@suse.de
+- fixed rpm does not abort build if %%doc file is missing (#503)
+* Mon Nov 27 2000 - ma@suse.de
+- wrongly free() after alloca() fixed
+* Thu Nov 23 2000 - bk@suse.de
+- removed old s390 hack(not needed-breaks with new rpm and glibc)
+* Tue Nov 14 2000 - ro@suse.de
+- added patch not to strip all shared libs and
+ files with "/lib/modules/" in path
+* Fri Nov 03 2000 - ma@suse.de
+- let 'rpm -e --root ..' remove files/dirs chroot.
+* Wed Oct 25 2000 - ma@suse.de
+- update subpackage popt to 1.6
+* Tue Oct 17 2000 - ma@suse.de
+- fixed missing libpopt.so in popt subpackage
+* Fri Oct 06 2000 - ma@suse.de
+- update to 3.0.6
+* Fri Sep 29 2000 - schwab@suse.de
+- Fix last change to stay compatible with glibc < 2.2.
+* Fri Sep 29 2000 - schwab@suse.de
+- Fix libio cookie function pointer clash in rpmio.
+* Fri Jul 28 2000 - ma@suse.de
+- update to 3.0.5 (handles RPM v4 packages)
+- ia64/s309 patches incorporated
+* Wed Jul 26 2000 - ma@suse.de
+- ignore chown() errors eg. if files are installed on a DOS partition
+* Fri Jul 14 2000 - ma@suse.de
+- fixed: ignore dependencies below /usr/share/doc.
+- rpmrc: synced s390 entries with those in rpm-4.0.
+* Mon Jun 26 2000 - bk@suse.de
+- build static on s390 too.
+* Fri May 26 2000 - schwab@suse.de
+- For for new libbz2 API.
+* Thu May 18 2000 - kasal@suse.de
+- hope now rpm-3.0.4-macro-grabArgs.patch works
+* Wed May 17 2000 - kasal@suse.cz
+- fixed a typo in rpm-3.0.4-macro-grabArgs.patch (c=='?')
+- fixed a problem when
+ ifarch someother
+ define macro sometext
+ endif
+ defined macro anyway
+* Tue May 16 2000 - kasal@suse.cz
+- fixed the bug with {?suse_update_config:%%{suse_update_config -f}}
+* Fri May 12 2000 - schwab@suse.de
+- Make ia64 compatible with noarch.
+* Wed Apr 26 2000 - ma@suse.de
+- updated 3.0.4, removed obsolete patches, builds on
+ libc5
+* Fri Apr 14 2000 - ma@suse.de
+- Update for RPM-HOWTO
+- Fix in config.diff (use Makefile.am not Makefile.in)
+* Mon Apr 10 2000 - schwab@suse.de
+- Fix config patch.
+* Thu Apr 06 2000 - bk@suse.de
+- added /lib/libpopt.so* to filelist on s390
+* Wed Apr 05 2000 - bk@suse.de
+- uses autoconf and automake now
+- added /lib/libbz2.so* and /lib/libz.so* to filelist on s390
+* Sat Apr 01 2000 - bk@suse.de
+- add s390 architecture support to rpm
+- add required %%suse_update_config for s390
+- rpm is NOT linked statically on s390 for now
+* Tue Mar 28 2000 - ma@suse.de
+- rpm.spec: avoid macro usage in 'Version:' entry
+* Thu Mar 02 2000 - schwab@suse.de
+- Fix md5 for ia64.
+* Mon Feb 28 2000 - ma@suse.de
+- remove 'libNoVersion' in find-requires
+* Wed Feb 23 2000 - schwab@suse.de
+- recognize ia64 as architecture.
+* Mon Feb 07 2000 - ma@suse.de
+- rebuilddb fix
+- set info/mandir macros to /usr/share/...
+* Wed Feb 02 2000 - ma@suse.de
+- update to 3.0.4 (popt-1.5)
+- new subpackage: popt
+* Sat Nov 13 1999 - kukuk@suse.de
+- Add sparc64 directory
+- Fix installation into RPM_BUILD_ROOT directory
+* Mon Nov 08 1999 - kukuk@suse.de
+- add directory /usr/src/packages/RPMS/sparc
+* Thu Nov 04 1999 - bs@suse.de
+- fixed bug in find-requires regarding pseudo scripts
+ starting with "#! --"
+* Thu Oct 28 1999 - bs@suse.de
+- added directories /usr/src/packages/RPMS/{ppc,noarch}
+* Wed Oct 27 1999 - ma@suse.de
+- place suse_macrofile in source/binary package
+- don't check reqires below /usr/doc/
+* Mon Sep 13 1999 - bs@suse.de
+- ran old prepare_spec on spec file to switch to new prepare_spec.
+* Thu Sep 09 1999 - bs@suse.de
+- fixed call of Check at the end of %%install section
+* Mon Jul 19 1999 - ma@suse.de
+- again rebuilddb.patch
+* Wed Jul 14 1999 - ro@suse.de
+- update to 3.0.3
+* Mon Jun 28 1999 - ro@suse.de
+- changed macros.in for libc5 : no "h" parameter for chown,chmod
+* Fri Jun 25 1999 - ro@suse.de
+- update to rpm-3.0.2
+- added librpmbuild.a to filelist
+- added patch not to generate dependency for libNoVersion
+- rebuilddb.patch removed (incorporated in source)
+* Thu Jun 17 1999 - ma@suse.de
+- fixed bug when --rebuilddb and --root where used
+ at the same time.
+* Wed May 26 1999 - ro@suse.de
+- update to 3.0.1
+* Mon Apr 26 1999 - werner@suse.de
+- Speed up find-requires for linux
+* Mon Apr 26 1999 - ro@suse.de
+- update to 3.0 (noreplace fix has been incorporated)
+* Mon Apr 12 1999 - ro@suse.de
+- update to 2.93
+* Fri Mar 19 1999 - ro@suse.de
+- update to 2.92
+* Thu Mar 18 1999 - ro@suse.de
+- respect movement of libz to usr/lib
+* Sun Feb 28 1999 - ro@suse.de
+- update to rpm-src from 99/02/25
+* Sat Feb 27 1999 - ro@suse.de
+- install both dirs RPM/i386 and RPM/alpha (since buildarch doesn't
+ seem to be defined now ?)
+* Tue Feb 23 1999 - ro@suse.de
+- adapted macros file to SuSE
+- fixed segfault when not using BuildRoot
+* Tue Feb 23 1999 - ro@suse.de
+- modified diff-style
+- use additional parameter "-h" on chown after unpacking in build
+* Mon Feb 22 1999 - ro@suse.de
+- update to 2.91
+- ported ma's fixes
+* Wed Nov 25 1998 - ma@suse.de
+- new version 2.5.5
+- fixed in 2.5.5: find-requires/provides bug
+- fixed in 2.5.5: rebuilddb
+* Wed Nov 18 1998 - ma@suse.de
+- link rpm.dyn dynamic against libc only
+* Mon Nov 16 1998 - ma@suse.de
+- shared binary (/usr/lib/rpm/rpm.dyn) added
+* Tue Nov 10 1998 - ro@suse.de
+- fixed find-requires (linux.req)
+* Mon Nov 09 1998 - ro@suse.de
+- added %%post: do rpm --initdb if triggerindex.rpm doesn't exist
+- do chown root.root for RPM-HOWTO
+* Thu Nov 05 1998 - ma@suse.de
+- new version 2.5.4
+- fix for rebuilddb
+- fix for %%config(noreplace)
+- RPM-Changes html document that describes the important changes
+ in RPM since what is documented in Maximum RPM.
+* Tue Nov 03 1998 - ro@suse.de
+- disabled glibc-patch for build in glibc-2.0
+* Sun Sep 20 1998 - ro@suse.de
+- use libdb185.a for rpm in glibc system
+* Thu Sep 03 1998 - ma@suse.de
+- glibc patches
+* Thu Feb 05 1998 - ro@suse.de
+- update to 2.4.12
+* Tue Dec 09 1997 - bs@suse.de
+- skip *.SuSE-dynamic in find-requires
+* Wed Nov 12 1997 - ma@suse.de
+- new version 2.4.10
+* Sat Nov 08 1997 - ma@suse.de
+- patch: rpmdbFindByFile() didn't work for "/". Thus "/" wasn't
+ handled correctly in querries and upon updates ("rmdir /").
+* Mon Oct 27 1997 - ma@suse.de
+- new version 2.4.8
+- spec file for autobuild provided
+ - dirs below /usr/src/packages are installed mode 1777
+- obsolete: patch to allow installing rpm v1 packages (from Aug 7 1997)
+ Seems to be fixed in 2.4.8
+- patch: always 'chdir /' before executing scripts.
+- patch: remove empty dirs when installing a symlink
+- patch: ignore errors when installing a symlink and called from YaST
+- de.po update
+* Thu Aug 07 1997 - ma@suse.de
+- duplicate '--nodeps' entry in rpm manpage deleted.
+- quick patch to allow installing rpm v1 packages.
+- workaround to skip installing a symlink (Jul 15 1997)
+ is disabeled, unless environment variable RPM_IgnoreFailedSymlinks
+ is set.
+* Tue Jul 15 1997 - ro@suse.de
+- added workaround to skip installing a symlink when
+ impossible to remove an existing directory
+* Thu Jun 26 1997 - ma@suse.de
+- introducing rpm, version 2.4.1
+- documentation (ascii,html) in usr/doc/packages/rpm
diff --git a/rpmconfigcheck b/rpmconfigcheck
index 7699148..c7a1267 100644
--- a/rpmconfigcheck
+++ b/rpmconfigcheck
@@ -11,7 +11,7 @@
### BEGIN INIT INFO
# Provides: rpmconfigcheck
# Required-Start: $remote_fs
-# Required-Stop: $null
+# Required-Stop:
# Default-Start: 2 3 5
# Default-Stop:
# Description: rpm config file scan
@@ -66,11 +66,7 @@ case "$1" in
rm -f $configcheckfile.old $configcheckfile.dup $configcheckfile.new
fi
;;
- stop)
- ;;
- status)
- rc_failed 4
- rc_status -v
+ stop|status)
;;
*)
echo "Usage: $0 {start}"
diff --git a/rpmdb_get_open_flags.diff b/rpmdb_get_open_flags.diff
deleted file mode 100644
index eab0b19..0000000
--- a/rpmdb_get_open_flags.diff
+++ /dev/null
@@ -1,13 +0,0 @@
-Suppress berkeleydb error messages when doing 'rpm --verifydb'.
-
---- lib/rpmdb.c.orig 2011-05-12 14:08:07.000000000 +0000
-+++ lib/rpmdb.c 2011-05-12 14:09:06.000000000 +0000
-@@ -165,7 +165,7 @@ static dbiIndex rpmdbOpenIndex(rpmdb db,
- uintId, uintCmp, NULL);
- }
- /* If primary got created, we can safely run without fsync */
-- if ((dbiFlags(dbi) & DBI_CREATED) || db->cfg.db_no_fsync) {
-+ if ((!verifyonly && (dbiFlags(dbi) & DBI_CREATED)) || db->cfg.db_no_fsync) {
- rpmlog(RPMLOG_DEBUG, "disabling fsync on database\n");
- db->cfg.db_no_fsync = 1;
- dbSetFSync(db->db_dbenv, 0);
diff --git a/rpmpopt.diff b/rpmpopt.diff
index 0a00ea8..6f88a93 100644
--- a/rpmpopt.diff
+++ b/rpmpopt.diff
@@ -1,8 +1,10 @@
---- ./rpmpopt.in.orig 2011-05-11 14:27:32.000000000 +0000
-+++ ./rpmpopt.in 2011-05-11 15:02:34.000000000 +0000
-@@ -101,7 +101,8 @@ Relocations : %|PREFIXES?{[%{PREFIXES} ]
+Index: rpmpopt.in
+===================================================================
+--- rpmpopt.in.orig
++++ rpmpopt.in
+@@ -86,7 +86,8 @@ Signature : %|DSAHEADER?{%{DSAHEADER:p
+ %|PACKAGER?{Packager : %{PACKAGER}\n}|\
%|URL?{URL : %{URL}\n}|\
- %|BUGURL?{Bug URL : %{BUGURL}\n}|\
Summary : %{SUMMARY}\n\
-Description :\n%{DESCRIPTION}\n' \
+Description :\n%{DESCRIPTION}\n\
@@ -10,3 +12,78 @@
--POPTdesc=$"list descriptive information from package(s)"
rpm alias --changelog --qf '[* %{CHANGELOGTIME:day} %{CHANGELOGNAME}\n%{CHANGELOGTEXT}\n\n]' \
+@@ -129,11 +130,11 @@ rpm alias --fileprovide --qf '[%{FILENAM
+ rpm alias --filerequire --qf '[%{FILENAMES}\t%{FILEREQUIRE}\n]' \
+ --POPTdesc=$"list file names with requires"
+
+-rpm alias --redhatprovides -q --define '_dbpath /usr/lib/rpmdb/%{_arch}-%{_vendor}-%{_os}/redhat' --whatprovides \
+- --POPTdesc=$"find package name that contains a provided capability (needs rpmdb-redhat package installed)"
++rpm alias --fileclass --qf '[%{FILENAMES}\t%{FILECLASS}\n]' \
++ --POPTdesc=$"list file names with classes"
+
+-rpm alias --redhatrequires -q --define '_dbpath /usr/lib/rpmdb/%{_arch}-%{_vendor}-%{_os}/redhat' --whatrequires \
+- --POPTdesc=$"find package name that contains a required capability (needs rpmdb-redhat package installed)"
++rpm alias --filecolor --qf '[%{FILENAMES}\t%{FILECOLORS}\n]' \
++ --POPTdesc=$"list file names with colors"
+
+ # colon separated i18n domains to use as PO catalogue lookaside for
+ * retrieving header group/description/summary.
+@@ -201,22 +202,22 @@ rpm alias --timecheck --define '_timeche
+ #rpm exec --target rpmb --target
+ #rpm exec --short-circuit rpmb --short-circuit
+
+-rpm exec --initdb rpmd --initdb
+-rpm exec --rebuilddb rpmd --rebuilddb
+-rpm exec --verifydb rpmd --verifydb
+-
+-rpm exec --addsign rpmk --addsign
+-rpm exec -K rpmk -K
+-rpm exec --checksig rpmk --checksig
+-rpm exec --import rpmk --import
+-rpm exec --resign rpmk --resign
+-
+-rpm exec -q rpmq -q
+-rpm exec --query rpmq --query
+-rpm exec --querytags rpmq --querytags
+-rpm exec -V rpmv -V
+-rpm exec -y rpmv -y
+-rpm exec --verify rpmv --verify
++#rpm exec --initdb rpmd --initdb
++#rpm exec --rebuilddb rpmd --rebuilddb
++#rpm exec --verifydb rpmd --verifydb
++
++#rpm exec --addsign rpmk --addsign
++#rpm exec -K rpmk -K
++#rpm exec --checksig rpmk --checksig
++#rpm exec --import rpmk --import
++#rpm exec --resign rpmk --resign
++
++#rpm exec -q rpmq -q
++#rpm exec --query rpmq --query
++#rpm exec --querytags rpmq --querytags
++#rpm exec -V rpmv -V
++#rpm exec -y rpmv -y
++#rpm exec --verify rpmv --verify
+
+ #rpm exec -i rpmi -i
+ #rpm exec --install rpmi --install
+@@ -382,7 +383,8 @@ Signature : %|DSAHEADER?{%{DSAHEADER:p
+ %|PACKAGER?{Packager : %{PACKAGER}\n}|\
+ %|URL?{URL : %{URL}\n}|\
+ Summary : %{SUMMARY}\n\
+-Description :\n%{DESCRIPTION}\n' \
++Description :\n%{DESCRIPTION}\n\
++Distribution: %{DISTRIBUTION}\n' \
+ --POPTdesc=$"list descriptive information from package(s)"
+
+ rpmq alias --changelog --qf '[* %{CHANGELOGTIME:day} %{CHANGELOGNAME}\n%{CHANGELOGTEXT}\n\n]' \
+@@ -495,7 +497,8 @@ Size : %-27{SIZE}%|LICENSE?{
+ %|PACKAGER?{Packager : %{PACKAGER}\n}|\
+ %|URL?{URL : %{URL}\n}|\
+ Summary : %{SUMMARY}\n\
+-Description :\n%{DESCRIPTION}\n' \
++Description :\n%{DESCRIPTION}\n\
++Distribution: %{DISTRIBUTION}\n' \
+ --POPTdesc=$"list descriptive information from package(s)"
+
+ rpmquery alias --changelog --qf '[* %{CHANGELOGTIME:day} %{CHANGELOGNAME}\n%{CHANGELOGTEXT}\n\n]' \
diff --git a/rpmqpack.diff b/rpmqpack.diff
index 63605be..3013c3a 100644
--- a/rpmqpack.diff
+++ b/rpmqpack.diff
@@ -1,32 +1,51 @@
Provide rpmqpack, a fast way to list all installed packages are
check if some package is installed. This is a hack.
---- ./Makefile.am.orig 2011-05-11 14:27:32.000000000 +0000
-+++ ./Makefile.am 2011-05-11 15:15:27.000000000 +0000
-@@ -170,6 +170,10 @@ rpmgraph_LDADD = lib/librpm.la rpmio/lib
+--- Makefile.am
++++ Makefile.am
+@@ -48,7 +48,7 @@
+ bin_SCRIPTS = gendiff
- dist_bin_SCRIPTS = scripts/gendiff
+ pkglibdir = @RPMCONFIGDIR@
+-pkglib_PROGRAMS = rpmb rpmd rpmi rpmk rpmq
++pkglib_PROGRAMS = rpmb rpmd rpmi rpmk rpmq rpmqpack
+ pkglib_DATA = rpmrc rpmpopt-$(VERSION) macros
+ pkglib_SCRIPTS = find-provides find-requires mkinstalldirs \
+ config.guess config.sub config.site
+@@ -98,6 +98,12 @@
+ rpm2cpio_LDFLAGS = $(myLDFLAGS)
+ rpm2cpio_LDADD = $(myLDADD) @LIBMISC@
-+bin_PROGRAMS += rpmqpack
-+rpmqpack_SOURCES = rpmqpack.c
-+rpmqpack_LDADD = lib/librpm.la
++rpmqpack_SOURCES = rpmqpack.c
++rpmqpack_LDFLAGS = $(myLDFLAGS)
++rpmqpack_LDADD = $(top_builddir)/rpmdb/librpmdb.la \
++ $(top_builddir)/rpmio/librpmio.la \
++ $(top_builddir)/popt/libpopt.la
+
- rpmconfig_DATA = rpmrc
- rpmrc: $(top_srcdir)/rpmrc.in
- @$(SED) \
---- ./doc/Makefile.am.orig 2011-01-05 08:11:09.000000000 +0000
-+++ ./doc/Makefile.am 2011-05-11 15:16:24.000000000 +0000
-@@ -8,7 +8,7 @@ EXTRA_DIST += $(man_man1_DATA)
+ $(PROGRAMS): $(myLDADD) @WITH_APIDOCS_TARGET@
- man_man8dir = $(mandir)/man8
- man_man8_DATA = rpm.8 rpmbuild.8 rpmdeps.8 rpmgraph.8 rpm2cpio.8
--man_man8_DATA += rpmdb.8 rpmkeys.8 rpmsign.8 rpmspec.8
-+man_man8_DATA += rpmdb.8 rpmkeys.8 rpmsign.8 rpmspec.8 rpmqpack.8
- EXTRA_DIST += $(man_man8_DATA)
+ .PHONY: splint
+@@ -147,6 +153,8 @@
+ @LN_S@ ../lib/rpm/rpmv $(DESTDIR)$(bindir)/rpmverify
+ rm -f $(DESTDIR)$(bindir)/rpmsign
+ @LN_S@ ../lib/rpm/rpmk $(DESTDIR)$(bindir)/rpmsign
++ rm -f $(DESTDIR)$(bindir)/rpmqpack
++ @LN_S@ ../lib/rpm/rpmqpack $(DESTDIR)$(bindir)/rpmqpack
+ rm -f $(DESTDIR)$(bindir)/rpmdb ; \
+ @LN_S@ ../lib/rpm/rpmd $(DESTDIR)$(bindir)/rpmdb ; \
+ for bf in e i u ; do \
+--- doc/Makefile.am
++++ doc/Makefile.am
+@@ -2,6 +2,6 @@
- man_fr_man8dir = $(mandir)/fr/man8
---- ./doc/rpmqpack.8.orig 2011-05-11 15:15:27.000000000 +0000
-+++ ./doc/rpmqpack.8 2011-05-11 15:15:27.000000000 +0000
+ SUBDIRS = manual fr ja ko pl ru sk
+
+-man_MANS = gendiff.1 rpm.8 rpmbuild.8 rpmcache.8 rpmdeps.8 rpmgraph.8 rpm2cpio.8
++man_MANS = gendiff.1 rpm.8 rpmbuild.8 rpmcache.8 rpmdeps.8 rpmgraph.8 rpm2cpio.8 rpmqpack.8
+
+ EXTRA_DIST = $(man_MANS)
+--- doc/rpmqpack.8
++++ doc/rpmqpack.8
@@ -0,0 +1,25 @@
+.TH RPMQPACK 8 "Mar 2002"
+.SH NAME
@@ -53,8 +72,8 @@ check if some package is installed. This is a hack.
+
+.SH AUTHOR
+Michael Schroeder
---- ./rpmqpack.c.orig 2011-05-11 15:15:27.000000000 +0000
-+++ ./rpmqpack.c 2011-05-11 15:15:27.000000000 +0000
+--- rpmqpack.c
++++ rpmqpack.c
@@ -0,0 +1,59 @@
+#include
+#include
@@ -80,7 +99,7 @@ check if some package is installed. This is a hack.
+ perror("db_create");
+ exit(1);
+ }
-+ if (db->open(db, 0, "/var/lib/rpm/Name", 0, DB_UNKNOWN, DB_RDONLY, 0664))
++ if (db->open(db, 0, "/var/lib/rpm/Name", 0, DB_HASH, DB_RDONLY, 0664))
+ {
+ perror("db->open");
+ exit(1);
diff --git a/rpmrc.diff b/rpmrc.diff
index f2d5b84..399a67a 100644
--- a/rpmrc.diff
+++ b/rpmrc.diff
@@ -4,33 +4,46 @@ Index: rpmrc.in
===================================================================
--- rpmrc.in.orig
+++ rpmrc.in
-@@ -12,16 +12,16 @@
+@@ -15,41 +15,42 @@
# "fat" binary with both archs, for Darwin
optflags: fat -O2 -g -arch i386 -arch ppc
--optflags: i386 -O2 -g -march=i386 -mtune=i686
+-optflags: i386 -O2 -g -march=i386 -mcpu=i686
-optflags: i486 -O2 -g -march=i486
-optflags: i586 -O2 -g -march=i586
-optflags: i686 -O2 -g -march=i686
--optflags: pentium3 -O2 -g -march=pentium3
--optflags: pentium4 -O2 -g -march=pentium4
--optflags: athlon -O2 -g -march=athlon
-+optflags: i386 -O2 -g -m32 -march=i486 -fmessage-length=0 -D_FORTIFY_SOURCE=2 -fstack-protector -funwind-tables -fasynchronous-unwind-tables
-+optflags: i486 -O2 -g -m32 -march=i486 -fmessage-length=0 -D_FORTIFY_SOURCE=2 -fstack-protector -funwind-tables -fasynchronous-unwind-tables
-+optflags: i586 -O2 -g -m32 -march=i586 -mtune=i686 -fmessage-length=0 -D_FORTIFY_SOURCE=2 -fstack-protector -funwind-tables -fasynchronous-unwind-tables
-+optflags: i686 -O2 -g -m32 -march=i686 -mtune=i686 -fmessage-length=0 -D_FORTIFY_SOURCE=2 -fstack-protector -funwind-tables -fasynchronous-unwind-tables
-+optflags: pentium3 -O2 -g -m32 -march=pentium3
-+optflags: pentium4 -O2 -g -m32 -march=pentium4
-+optflags: athlon -O2 -g -m32 -march=athlon
- optflags: geode -Os -g -m32 -march=geode
++optflags: i386 -O2 -g -m32 -march=i486 -fmessage-length=0 -D_FORTIFY_SOURCE=2
++optflags: i486 -O2 -g -m32 -march=i486
++optflags: i586 -O2 -g -m32 -march=i586 -mtune=i686 -fmessage-length=0 -D_FORTIFY_SOURCE=2
++optflags: i686 -O2 -g -m32 -march=i686 -mtune=i686 -fmessage-length=0 -D_FORTIFY_SOURCE=2
+ optflags: pentium3 -O2 -g -march=pentium3
+ optflags: pentium4 -O2 -g -march=pentium4
+ optflags: athlon -O2 -g -march=athlon
-optflags: ia64 -O2 -g
-optflags: x86_64 -O2 -g
-+optflags: ia64 -O2 -g -fmessage-length=0 -D_FORTIFY_SOURCE=2 -fstack-protector -funwind-tables -fasynchronous-unwind-tables
-+optflags: x86_64 -O2 -g -m64 -fmessage-length=0 -D_FORTIFY_SOURCE=2 -fstack-protector -funwind-tables -fasynchronous-unwind-tables
++optflags: ia64 -O2 -g -fmessage-length=0 -D_FORTIFY_SOURCE=2
++optflags: x86_64 -O2 -g -fmessage-length=0 -D_FORTIFY_SOURCE=2
optflags: amd64 -O2 -g
optflags: ia32e -O2 -g
-@@ -41,15 +41,16 @@ optflags: sparc64v -O2 -g -m64 -mtune=ni
+ optflags: alpha -O2 -g -mieee
+-optflags: alphaev5 -O2 -g -mieee -mcpu=ev5
+-optflags: alphaev56 -O2 -g -mieee -mcpu=ev56
+-optflags: alphapca56 -O2 -g -mieee -mcpu=pca56
+-optflags: alphaev6 -O2 -g -mieee -mcpu=ev6
+-optflags: alphaev67 -O2 -g -mieee -mcpu=ev67
++optflags: alphaev5 -O2 -g -mieee -mtune=ev5
++optflags: alphaev56 -O2 -g -mieee -mtune=ev56
++optflags: alphapca56 -O2 -g -mieee -mtune=pca56
++optflags: alphaev6 -O2 -g -mieee -mtune=ev6
++optflags: alphaev67 -O2 -g -mieee -mtune=ev67
+
+ optflags: sparc -O2 -g -m32 -mtune=ultrasparc
+ optflags: sparcv8 -O2 -g -m32 -mtune=ultrasparc -mv8
+-optflags: sparcv9 -O2 -g -m32 -mcpu=ultrasparc
+-optflags: sparc64 -O2 -g -m64 -mcpu=ultrasparc
++optflags: sparcv9 -O2 -g -m32 -mtune=ultrasparc
++optflags: sparc64 -O2 -g -m64 -mtune=ultrasparc
optflags: m68k -O2 -g -fomit-frame-pointer
@@ -41,31 +54,44 @@ Index: rpmrc.in
-optflags: ppciseries -O2 -g -fsigned-char
-optflags: ppcpseries -O2 -g -fsigned-char
-optflags: ppc64 -O2 -g -fsigned-char
-+optflags: ppc -O2 -g -m32 -fmessage-length=0 -D_FORTIFY_SOURCE=2 -fstack-protector -funwind-tables -fasynchronous-unwind-tables
-+optflags: ppc8260 -O2 -g -m32
-+optflags: ppc8560 -O2 -g -m32
-+optflags: ppc32dy4 -O2 -g -m32
-+optflags: ppciseries -O2 -g -m32
-+optflags: ppcpseries -O2 -g -m32
-+optflags: ppc64 -O2 -g -fmessage-length=0 -D_FORTIFY_SOURCE=2 -fstack-protector -funwind-tables -fasynchronous-unwind-tables
++optflags: ppc -O2 -g -fmessage-length=0 -D_FORTIFY_SOURCE=2
++optflags: ppc8260 -O2 -g
++optflags: ppc8560 -O2 -g
++optflags: ppc32dy4 -O2 -g
++optflags: ppciseries -O2 -g
++optflags: ppcpseries -O2 -g
++optflags: ppc64 -O2 -g -fmessage-length=0 -D_FORTIFY_SOURCE=2
optflags: parisc -O2 -g -mpa-risc-1-0
+optflags: hppa -O2 -g -mpa-risc-1-0
optflags: hppa1.0 -O2 -g -mpa-risc-1-0
optflags: hppa1.1 -O2 -g -mpa-risc-1-0
optflags: hppa1.2 -O2 -g -mpa-risc-1-0
-@@ -75,8 +76,8 @@ optflags: atariclone -O2 -g -fomit-frame
+@@ -58,9 +59,9 @@ optflags: hppa2.0 -O2 -g -mpa-risc-1-0
+ optflags: mips -O2 -g
+ optflags: mipsel -O2 -g
+
+-optflags: armv3l -O2 -g -fsigned-char -fomit-frame-pointer -march=armv3
+-optflags: armv4b -O2 -g -fsigned-char -fomit-frame-pointer -march=armv4
+-optflags: armv4l -O2 -g -fsigned-char -fomit-frame-pointer -march=armv4
++optflags: armv3l -O2 -g -march=armv3
++optflags: armv4b -O2 -g -march=armv4
++optflags: armv4l -O2 -g -march=armv4
+
+ optflags: atarist -O2 -g -fomit-frame-pointer
+ optflags: atariste -O2 -g -fomit-frame-pointer
+@@ -70,8 +71,8 @@ optflags: atariclone -O2 -g -fomit-frame
optflags: milan -O2 -g -fomit-frame-pointer
optflags: hades -O2 -g -fomit-frame-pointer
-optflags: s390 -O2 -g
-optflags: s390x -O2 -g
-+optflags: s390 -O2 -g -m31 -fmessage-length=0 -D_FORTIFY_SOURCE=2 -fstack-protector -funwind-tables -fasynchronous-unwind-tables
-+optflags: s390x -O2 -g -m64 -fmessage-length=0 -D_FORTIFY_SOURCE=2 -fstack-protector -funwind-tables -fasynchronous-unwind-tables
++optflags: s390 -O2 -g -fmessage-length=0
++optflags: s390x -O2 -g -fmessage-length=0
- optflags: sh3 -O2 -g
- optflags: sh4 -O2 -g -mieee
-@@ -200,17 +201,17 @@ os_canon: MacOSX: macosx 21
+ #############################################################
+ # Canonical arch names and numbers
+@@ -181,16 +182,16 @@ os_canon: MacOSX: macosx 21
#############################################################
# For a given uname().machine, the default build arch
@@ -77,13 +103,11 @@ Index: rpmrc.in
buildarchtranslate: osfmach3_i386: i386
-buildarchtranslate: athlon: i386
--buildarchtranslate: geode: i386
-buildarchtranslate: pentium4: i386
-buildarchtranslate: pentium3: i386
-buildarchtranslate: i686: i386
-buildarchtranslate: i586: i386
+buildarchtranslate: athlon: i586
-+buildarchtranslate: geode: i586
+buildarchtranslate: pentium4: i586
+buildarchtranslate: pentium3: i586
+buildarchtranslate: i686: i586
@@ -91,17 +115,17 @@ Index: rpmrc.in
buildarchtranslate: i486: i386
buildarchtranslate: i386: i386
-@@ -239,6 +240,7 @@ buildarchtranslate: ppciseries: ppc
+@@ -217,6 +218,7 @@ buildarchtranslate: ppciseries: ppc
buildarchtranslate: ppcpseries: ppc
buildarchtranslate: ppc64iseries: ppc64
buildarchtranslate: ppc64pseries: ppc64
+buildarchtranslate: powerpc64: ppc64
- buildarchtranslate: armv3l: armv3l
- buildarchtranslate: armv4b: armv4b
-@@ -270,6 +272,15 @@ buildarchtranslate: sh3: sh3
- buildarchtranslate: sh4: sh4
- buildarchtranslate: sh4a: sh4
+ buildarchtranslate: atarist: m68kmint
+ buildarchtranslate: atariste: m68kmint
+@@ -235,6 +237,15 @@ buildarchtranslate: x86_64: x86_64
+ buildarchtranslate: amd64: x86_64
+ buildarchtranslate: ia32e: x86_64
+buildarchtranslate: parisc: hppa
+buildarchtranslate: hppa2.0: hppa
@@ -115,7 +139,7 @@ Index: rpmrc.in
#############################################################
# Architecture compatibility
-@@ -325,14 +336,18 @@ arch_compat: mipsel: noarch
+@@ -287,10 +298,16 @@ arch_compat: mipsel: noarch
arch_compat: hppa2.0: hppa1.2
arch_compat: hppa1.2: hppa1.1
arch_compat: hppa1.1: hppa1.0
@@ -127,28 +151,30 @@ Index: rpmrc.in
+arch_compat: armv5teb: armv5b
+arch_compat: armv5b: armv4b
arch_compat: armv4b: noarch
- arch_compat: armv7l: armv6l
- arch_compat: armv6l: armv5tejl
- arch_compat: armv5tejl: armv5tel
--arch_compat: armv5tel: armv4tl
++
+arch_compat: armv5tel: armv5l
-+arch_compat: armv5l: armv4tl
- arch_compat: armv4tl: armv4l
++arch_compat: armv5l: armv4l
arch_compat: armv4l: armv3l
arch_compat: armv3l: noarch
-@@ -349,9 +364,9 @@ arch_compat: i370: noarch
- arch_compat: s390: noarch
- arch_compat: s390x: s390 noarch
--arch_compat: ia64: noarch
-+arch_compat: ia64: i686 noarch
+@@ -308,7 +325,7 @@ arch_compat: s390x: s390 noarch
+
+ arch_compat: ia64: noarch
-arch_compat: x86_64: amd64 athlon noarch
+arch_compat: x86_64: amd64 em64t athlon noarch
arch_compat: amd64: x86_64 athlon noarch
arch_compat: ia32e: x86_64 athlon noarch
-@@ -444,7 +459,8 @@ buildarch_compat: armv3l: noarch
+@@ -384,11 +401,16 @@ buildarch_compat: mipsel: noarch
+ buildarch_compat: armv3l: noarch
+ buildarch_compat: armv4b: noarch
+ buildarch_compat: armv4l: noarch
++buildarch_compat: armv5b: noarch
++buildarch_compat: armv5l: noarch
++buildarch_compat: armv5teb: noarch
++buildarch_compat: armv5tel: noarch
+
buildarch_compat: hppa2.0: hppa1.2
buildarch_compat: hppa1.2: hppa1.1
buildarch_compat: hppa1.1: hppa1.0
@@ -158,3 +184,12 @@ Index: rpmrc.in
buildarch_compat: parisc: noarch
buildarch_compat: atarist: m68kmint noarch
+@@ -408,7 +430,7 @@ buildarch_compat: x86_64: noarch
+ buildarch_compat: amd64: x86_64
+ buildarch_compat: ia32e: x86_64
+
+-macrofiles: @RPMCONFIGDIR@/macros:@RPMCONFIGDIR@/%{_target}/macros:@SYSCONFIGDIR@/macros.*:@SYSCONFIGDIR@/macros:@SYSCONFIGDIR@/%{_target}/macros:~/.rpmmacros
++macrofiles: @RPMCONFIGDIR@/macros:@RPMCONFIGDIR@/%{_target}/macros:@RPMCONFIGDIR@/suse_macros:@SYSCONFIGDIR@/macros.*:@SYSCONFIGDIR@/macros:@SYSCONFIGDIR@/%{_target}/macros:~/.rpmmacros
+
+ # \endverbatim
+ #*/
diff --git a/rpmrctests.diff b/rpmrctests.diff
index 34e42fe..d756989 100644
--- a/rpmrctests.diff
+++ b/rpmrctests.diff
@@ -1,8 +1,9 @@
-Patch machine detection code: detect transmeta, rename parisc to hppa. [#52713]
+Patch machine detection code: always use "ppc", restore SIGILL
+handler, detect transmeta. [#52713]
---- ./lib/rpmrc.c.orig 2010-12-03 12:11:57.000000000 +0000
-+++ ./lib/rpmrc.c 2011-05-11 12:48:02.000000000 +0000
-@@ -1,9 +1,6 @@
+--- ./lib/rpmrc.c.orig 2005-01-17 18:46:23.000000000 +0000
++++ ./lib/rpmrc.c 2005-12-16 18:30:29.000000000 +0000
+@@ -2,9 +2,6 @@
#include "system.h"
#include
@@ -10,13 +11,37 @@ Patch machine detection code: detect transmeta, rename parisc to hppa. [#52713]
-#include
-#endif
- #if HAVE_SYS_UTSNAME_H
- #include
-@@ -788,6 +785,14 @@ static inline int RPMClass(void)
+ #include /* XXX for /etc/rpm/platform contents */
+
+@@ -953,20 +950,38 @@ static inline int RPMClass(void)
+ {
+ int cpu;
+ unsigned int tfms, junk, cap, capamd;
++ struct sigaction oldsa;
+
++ sigaction(SIGILL, NULL, &oldsa);
+ signal(SIGILL, model3);
+
+- if (sigsetjmp(jenv, 1))
++ if (sigsetjmp(jenv, 1)) {
++ sigaction(SIGILL, &oldsa, NULL);
+ return 3;
++ }
+
+- if (cpuid_eax(0x000000000)==0)
++ if (cpuid_eax(0x000000000)==0) {
++ sigaction(SIGILL, &oldsa, NULL);
+ return 4;
++ }
+
+ cpuid(0x00000001, &tfms, &junk, &junk, &cap);
+ cpuid(0x80000001, &junk, &junk, &junk, &capamd);
cpu = (tfms>>8)&15;
-+ if (cpu == 5
++ /* Check if we have a Transmeta i686-compatible CPU
++ that reports as being i586 */
++ if(cpu == 5
+ && cpuid_ecx(0)=='68xM'
+ && cpuid_edx(0)=='Teni'
+ && (cpuid_edx(1) & ((1<<8)|(1<<15))) == ((1<<8)|(1<<15))) {
@@ -24,11 +49,13 @@ Patch machine detection code: detect transmeta, rename parisc to hppa. [#52713]
+ return 6; /* has CX8 and CMOV */
+ }
+
- sigaction(SIGILL, &oldsa, NULL);
-
++ sigaction(SIGILL, &oldsa, NULL);
++
if (cpu < 6)
-@@ -924,15 +929,6 @@ static int is_geode()
- }
+ return cpu;
+
+@@ -1076,15 +1091,6 @@ static int is_pentium4()
+
#endif
-#if defined(__linux__) && defined(__powerpc__)
@@ -42,8 +69,8 @@ Patch machine detection code: detect transmeta, rename parisc to hppa. [#52713]
-
/**
*/
- static void defaultMachine(const char ** arch,
-@@ -1059,6 +1055,11 @@ static void defaultMachine(const char **
+ static void defaultMachine(/*@out@*/ const char ** arch,
+@@ -1219,6 +1225,11 @@ static void defaultMachine(/*@out@*/ con
/* big endian */
strcpy(un.machine, "mips");
# endif
@@ -55,3 +82,31 @@ Patch machine detection code: detect transmeta, rename parisc to hppa. [#52713]
# if defined(__hpux) && defined(_SC_CPU_VERSION)
{
+@@ -1326,27 +1337,6 @@ static void defaultMachine(/*@out@*/ con
+ }
+ # endif
+
+-# if defined(__linux__) && defined(__powerpc__)
+- {
+- unsigned pvr = 0;
+- __sighandler_t oldh = signal(SIGILL, mfspr_ill);
+- if (setjmp(mfspr_jmpbuf) == 0) {
+- __asm__ __volatile__ ("mfspr %0, 287" : "=r" (pvr));
+- }
+- signal(SIGILL, oldh);
+-
+- if ( pvr ) {
+- pvr >>= 16;
+- if ( pvr >= 0x40)
+- strcpy(un.machine, "ppcpseries");
+- else if ( (pvr == 0x36) || (pvr == 0x37) )
+- strcpy(un.machine, "ppciseries");
+- else
+- strcpy(un.machine, "ppc");
+- }
+- }
+-# endif
+-
+ /* the uname() result goes through the arch_canon table */
+ canon = lookupInCanonTable(un.machine,
+ tables[RPM_MACHTABLE_INSTARCH].canons,
diff --git a/rpmsort b/rpmsort
index 841c2d7..a73478b 100644
--- a/rpmsort
+++ b/rpmsort
@@ -17,7 +17,7 @@
use Getopt::Long qw(:config gnu_getopt);
-sub do_rpm_cmp_versions {
+sub rpm_cmp_versions {
my ($evr1, $evr2) = @_;
sub _rpm_cmp {
@@ -31,10 +31,8 @@ sub do_rpm_cmp_versions {
$s1 =~ s/^[^a-zA-Z0-9]+//;
$s2 =~ s/^[^a-zA-Z0-9]+//;
if ($s1 =~ /^\d/ || $s2 =~ /^\d/) {
- $s1 =~ s/^(0*(\d*))//; $x1 = $2;
- return -1 if $1 eq '';
- $s2 =~ s/^(0*(\d*))//; $x2 = $2;
- return 1 if $1 eq '';
+ $s1 =~ s/^0*(\d*)//; $x1 = $1;
+ $s2 =~ s/^0*(\d*)//; $x2 = $1;
$r = length $x1 <=> length $x2 || $x1 cmp $x2;
} else {
$s1 =~ s/^([a-zA-Z]*)//; $x1 = $1;
@@ -59,35 +57,11 @@ sub do_rpm_cmp_versions {
my $reorder = sub { return @_ };
my $key = 0;
-my $test = 0;
-
-sub rpm_cmp_versions {
- my ($evr1, $evr2) = @_;
-
- chomp($evr1, $evr2);
- my $res1 = do_rpm_cmp_versions($evr1, $evr2);
- if ($test) {
- open(my $fd, '-|', 'zypper', '--terse', 'versioncmp',
- $evr1, $evr2) or die "zypper: $!\n";
- my $res2 = <$fd>;
- close($fd) or die "zypper: $!\n";
- chomp $res2;
- if ($res1 != $res2) {
- my @operators = qw(< == >);
- my $op1 = $operators[$res1 + 1];
- my $op2 = $operators[$res2 + 1];
-
- print STDERR "BUG: $evr1 $op1 $evr2 vs. zypper: $evr1 $op2 $evr2\n";
- }
- }
- return $res1;
-}
GetOptions ("r|reverse" => sub { $reorder = sub { return reverse @_ } },
- "k|key=i" => \$key,
- "test" => \$test)
+ "k|key=i" => \$key)
or do {
- print STDERR "Usage $0 [-r, --reverse] [-k N, --key=N] [--test]\n";
+ print STDERR "Usage\n";
exit 1;
};
diff --git a/safemacro.diff b/safemacro.diff
deleted file mode 100644
index 96f065a..0000000
--- a/safemacro.diff
+++ /dev/null
@@ -1,21 +0,0 @@
---- rpmio/macro.c.orig 2011-05-17 08:43:40.000000000 +0000
-+++ rpmio/macro.c 2011-05-17 08:44:48.000000000 +0000
-@@ -1016,12 +1016,12 @@ expandMacro(MacroBuf mb, const char *src
- char *source = NULL;
-
- /* Handle non-terminated substrings by creating a terminated copy */
-- if (slen > 0) {
-- source = xmalloc(slen + 1);
-- strncpy(source, src, slen);
-- source[slen] = '\0';
-- s = source;
-- }
-+ if (!slen)
-+ slen = strlen(src);
-+ source = xmalloc(slen + 1);
-+ strncpy(source, src, slen);
-+ source[slen] = '\0';
-+ s = source;
-
- if (mb->buf == NULL) {
- size_t blen = MACROBUFSIZ + strlen(s);
diff --git a/safeugid.diff b/safeugid.diff
deleted file mode 100644
index 859dd02..0000000
--- a/safeugid.diff
+++ /dev/null
@@ -1,213 +0,0 @@
-Work around glibc/nscd caching problems when doing 'rpm --root'.
-
---- ./lib/rpmchroot.c.orig 2011-05-12 08:26:10.000000000 +0000
-+++ ./lib/rpmchroot.c 2011-05-12 08:28:32.000000000 +0000
-@@ -66,6 +66,7 @@ int rpmChrootIn(void)
- } else if (rootState.chrootDone == 0) {
- if (chdir("/") == 0 && chroot(rootState.rootDir) == 0) {
- rootState.chrootDone = 1;
-+ rpmugChroot(1);
- } else {
- rpmlog(RPMLOG_ERR, _("Unable to change root directory: %m\n"));
- rc = -1;
-@@ -91,6 +92,7 @@ int rpmChrootOut(void)
- } else if (rootState.chrootDone == 1) {
- if (chroot(".") == 0 && fchdir(rootState.cwd) == 0) {
- rootState.chrootDone = 0;
-+ rpmugChroot(0);
- } else {
- rpmlog(RPMLOG_ERR, _("Unable to restore root directory: %m\n"));
- rc = -1;
---- ./lib/rpmug.c.orig 2011-05-12 08:13:52.000000000 +0000
-+++ ./lib/rpmug.c 2011-05-12 08:33:28.000000000 +0000
-@@ -35,6 +35,47 @@ const char * rpmugStashStr(const char *s
- return ret;
- }
-
-+#if defined(__GLIBC__)
-+
-+static int inchroot;
-+
-+/*
-+ * Unfortunatelly glibc caches nss/nscd data and there is no
-+ * good way to flush those caches when we did a chroot(). Thus
-+ * we need to parse /etc/passwd and /etc/group ourselfs.
-+ */
-+static int safe_lookup(const char * file, const char * name)
-+{
-+ FILE *fp;
-+ int l;
-+ char buf[4096], *p;
-+
-+ if (!name || !*name)
-+ return -1;
-+ l = strlen(name);
-+ if ((fp = fopen(file, "r")) == 0)
-+ return -1;
-+ while ((p = fgets(buf, sizeof(buf), fp)) != 0) {
-+ if (*p == '#')
-+ continue;
-+ while (*p && (*p == ' ' || *p == '\t'))
-+ p++;
-+ if (strncmp(p, name, l) != 0 || p[l] != ':')
-+ continue;
-+ p = strchr(p + l + 1, ':');
-+ if (!p)
-+ continue;
-+ fclose(fp);
-+ p++;
-+ while (*p && (*p == ' ' || *p == '\t'))
-+ p++;
-+ return atoi(p);
-+ }
-+ fclose(fp);
-+ return -1;
-+}
-+#endif
-+
- /*
- * These really ought to use hash tables. I just made the
- * guess that most files would be owned by root or the same person/group
-@@ -68,17 +109,28 @@ int rpmugUid(const char * thisUname, uid
- lastUnameAlloced = thisUnameLen + 10;
- lastUname = xrealloc(lastUname, lastUnameAlloced); /* XXX memory leak */
- }
-- strcpy(lastUname, thisUname);
-
-- pwent = getpwnam(thisUname);
-- if (pwent == NULL) {
-- /* FIX: shrug */
-- endpwent();
-+#if defined(__GLIBC__)
-+ if (inchroot) {
-+ int uid = safe_lookup("/etc/passwd", thisUname);
-+ if (uid < 0)
-+ return -1;
-+ lastUid = uid;
-+ } else
-+#endif
-+ {
- pwent = getpwnam(thisUname);
-- if (pwent == NULL) return -1;
-+ if (pwent == NULL) {
-+ /* FIX: shrug */
-+ endpwent();
-+ pwent = getpwnam(thisUname);
-+ if (pwent == NULL) return -1;
-+ }
-+ lastUid = pwent->pw_uid;
- }
-
-- lastUid = pwent->pw_uid;
-+ strcpy(lastUname, thisUname);
-+ lastUnameLen = thisUnameLen;
- }
-
- *uid = lastUid;
-@@ -111,18 +163,29 @@ int rpmugGid(const char * thisGname, gid
- lastGnameAlloced = thisGnameLen + 10;
- lastGname = xrealloc(lastGname, lastGnameAlloced); /* XXX memory leak */
- }
-- strcpy(lastGname, thisGname);
-
-- grent = getgrnam(thisGname);
-- if (grent == NULL) {
-- /* FIX: shrug */
-- endgrent();
-+#if defined(__GLIBC__)
-+ if (inchroot) {
-+ int gid = safe_lookup("/etc/group", thisGname);
-+ if (gid < 0)
-+ return -1;
-+ lastGid = gid;
-+ } else
-+#endif
-+ {
- grent = getgrnam(thisGname);
- if (grent == NULL) {
-- return -1;
-+ /* FIX: shrug */
-+ endgrent();
-+ grent = getgrnam(thisGname);
-+ if (grent == NULL) {
-+ return -1;
-+ }
- }
-+ lastGid = grent->gr_gid;
- }
-- lastGid = grent->gr_gid;
-+ strcpy(lastGname, thisGname);
-+ lastGnameLen = thisGnameLen;
- }
-
- *gid = lastGid;
-@@ -134,7 +197,7 @@ const char * rpmugUname(uid_t uid)
- {
- static uid_t lastUid = (uid_t) -1;
- static char * lastUname = NULL;
-- static size_t lastUnameLen = 0;
-+ static size_t lastUnameAlloced = 0;
-
- if (uid == (uid_t) -1) {
- lastUid = (uid_t) -1;
-@@ -151,9 +214,9 @@ const char * rpmugUname(uid_t uid)
-
- lastUid = uid;
- len = strlen(pwent->pw_name);
-- if (lastUnameLen < len + 1) {
-- lastUnameLen = len + 20;
-- lastUname = xrealloc(lastUname, lastUnameLen);
-+ if (lastUnameAlloced < len + 1) {
-+ lastUnameAlloced = len + 20;
-+ lastUname = xrealloc(lastUname, lastUnameAlloced);
- }
- strcpy(lastUname, pwent->pw_name);
-
-@@ -165,7 +228,7 @@ const char * rpmugGname(gid_t gid)
- {
- static gid_t lastGid = (gid_t) -1;
- static char * lastGname = NULL;
-- static size_t lastGnameLen = 0;
-+ static size_t lastGnameAlloced = 0;
-
- if (gid == (gid_t) -1) {
- lastGid = (gid_t) -1;
-@@ -182,9 +245,9 @@ const char * rpmugGname(gid_t gid)
-
- lastGid = gid;
- len = strlen(grent->gr_name);
-- if (lastGnameLen < len + 1) {
-- lastGnameLen = len + 20;
-- lastGname = xrealloc(lastGname, lastGnameLen);
-+ if (lastGnameAlloced < len + 1) {
-+ lastGnameAlloced = len + 20;
-+ lastGname = xrealloc(lastGname, lastGnameAlloced);
- }
- strcpy(lastGname, grent->gr_name);
-
-@@ -200,3 +263,16 @@ void rpmugFree(void)
- rpmugGname(-1);
- strStash = strCacheFree(strStash);
- }
-+
-+void rpmugChroot(int in)
-+{
-+ /* tell libc to drop caches / file descriptors */
-+ endpwent();
-+ endgrent();
-+ /* drop our own caches */
-+ rpmugUid(NULL, NULL);
-+ rpmugGid(NULL, NULL);
-+#if defined(__GLIBC__)
-+ inchroot = in;
-+#endif
-+}
---- ./lib/rpmug.h.orig 2011-05-12 08:13:52.000000000 +0000
-+++ ./lib/rpmug.h 2011-05-12 08:26:56.000000000 +0000
-@@ -15,4 +15,6 @@ const char * rpmugGname(gid_t gid);
-
- void rpmugFree(void);
-
-+void rpmugChroot(int in);
-+
- #endif /* _RPMUG_H */
diff --git a/sbitcheck.diff b/sbitcheck.diff
new file mode 100644
index 0000000..368e3de
--- /dev/null
+++ b/sbitcheck.diff
@@ -0,0 +1,105 @@
+When deleting files, drop any s-bit first, so that a malicious
+user does not have access to old programs if he hard links them
+to some other directory. [#50376] rh#125517
+
+Already in rpm-4.4.7.
+
+Index: lib/cpio.h
+===================================================================
+--- lib/cpio.h.orig
++++ lib/cpio.h
+@@ -64,7 +64,8 @@ typedef enum cpioMapFlags_e {
+ CPIO_MAP_ABSOLUTE = (1 << 5),
+ CPIO_MAP_ADDDOT = (1 << 6),
+ CPIO_ALL_HARDLINKS = (1 << 7), /*!< fail if hardlinks are missing. */
+- CPIO_MAP_TYPE = (1 << 8) /*!< only for building. */
++ CPIO_MAP_TYPE = (1 << 8), /*!< only for building. */
++ CPIO_SBIT_CHECK = (1 << 9)
+ } cpioMapFlags;
+
+ #define CPIO_NEWC_MAGIC "070701"
+Index: lib/fsm.c
+===================================================================
+--- lib/fsm.c.orig
++++ lib/fsm.c
+@@ -2127,6 +2127,11 @@ if (!(fsm->mapFlags & CPIO_ALL_HARDLINKS
+ /*@notreached@*/ break;
+
+ case FSM_UNLINK:
++ if (fsm->mapFlags & CPIO_SBIT_CHECK) {
++ struct stat stb;
++ if (Lstat(fsm->path, &stb) == 0 && S_ISREG(stb.st_mode) && (stb.st_mode & 06000) != 0)
++ chmod(fsm->path, stb.st_mode & 0777);
++ }
+ rc = Unlink(fsm->path);
+ if (_fsm_debug && (stage & FSM_SYSCALL))
+ rpmMessage(RPMMESS_DEBUG, " %8s (%s) %s\n", cur,
+Index: lib/psm.c
+===================================================================
+--- lib/psm.c.orig
++++ lib/psm.c
+@@ -1472,7 +1472,7 @@ assert(psm->mi == NULL);
+ fi->striplen = (xx ? strlen(p) + 1 : 1);
+ }
+ fi->mapflags =
+- CPIO_MAP_PATH | CPIO_MAP_MODE | CPIO_MAP_UID | CPIO_MAP_GID;
++ CPIO_MAP_PATH | CPIO_MAP_MODE | CPIO_MAP_UID | CPIO_MAP_GID | (fi->mapflags & CPIO_SBIT_CHECK);
+
+ if (headerIsEntry(fi->h, RPMTAG_ORIGBASENAMES))
+ rpmfiBuildFNames(fi->h, RPMTAG_ORIGBASENAMES, &fi->apath, NULL);
+Index: lib/transaction.c
+===================================================================
+--- lib/transaction.c.orig
++++ lib/transaction.c
+@@ -187,6 +187,13 @@ static int handleInstInstalledFiles(cons
+ if (XFA_SKIPPING(fi->actions[fileNum]))
+ continue;
+
++ if (!(fi->mapflags & CPIO_SBIT_CHECK)) {
++ int_16 omode = rpmfiFMode(otherFi);
++ if (S_ISREG(omode) && (omode & 06000) != 0) {
++ fi->mapflags |= CPIO_SBIT_CHECK;
++ }
++ }
++
+ if (rpmfiCompare(otherFi, fi)) {
+ int rConflicts;
+
+@@ -1843,6 +1850,20 @@ rpmMessage(RPMMESS_DEBUG, _("computing f
+ case TR_REMOVED:
+ /*@switchbreak@*/ break;
+ }
++ /* check for s-bit files to be removed */
++ if (rpmteType(p) == TR_REMOVED) {
++ fi = rpmfiInit(fi, 0);
++ while ((i = rpmfiNext(fi)) >= 0) {
++ int_16 mode;
++ if (XFA_SKIPPING(fi->actions[i]))
++ continue;
++ (void) rpmfiSetFX(fi, i);
++ mode = rpmfiFMode(fi);
++ if (S_ISREG(mode) && (mode & 06000) != 0) {
++ fi->mapflags |= CPIO_SBIT_CHECK;
++ }
++ }
++ }
+ (void) rpmswExit(rpmtsOp(ts, RPMTS_OP_FINGERPRINT), fc);
+ }
+ pi = rpmtsiFree(pi);
+@@ -2088,6 +2109,7 @@ assert(psm != NULL);
+ {
+ char * fstates = fi->fstates;
+ fileAction * actions = fi->actions;
++ int mapflags = fi->mapflags;
+ rpmte savep;
+
+ fi->fstates = NULL;
+@@ -2106,6 +2128,8 @@ assert(psm != NULL);
+ fi->fstates = fstates;
+ fi->actions = _free(fi->actions);
+ fi->actions = actions;
++ if (mapflags & CPIO_SBIT_CHECK)
++ fi->mapflags |= CPIO_SBIT_CHECK;
+ p->fi = fi;
+ }
+ }
diff --git a/setpermsugids.diff b/setpermsugids.diff
new file mode 100644
index 0000000..7501f4e
--- /dev/null
+++ b/setpermsugids.diff
@@ -0,0 +1,20 @@
+Deal with bad lines in --setperms and --setugids. Happens for example if
+a package is not installed (--pipe also captures stderr). [#52122]
+
+--- ./rpmpopt.in.orig 2005-02-16 19:05:36.000000000 +0000
++++ ./rpmpopt.in 2006-03-21 17:58:43.000000000 +0000
+@@ -37,12 +37,12 @@ rpm alias --scripts --qf '\
+ --POPTdesc=$"list install/erase scriptlets from package(s)"
+
+ rpm alias --setperms -q --qf '[\[ -L %{FILENAMES:shescape} \] || chmod %7.7{FILEMODES:octal} %{FILENAMES:shescape}\n]' \
+- --pipe "grep -v \(none\) | sed 's/chmod .../chmod /' | sh" \
++ --pipe "grep -v \(none\) | grep '^. -L ' | sed 's/chmod .../chmod /' | sh" \
+ --POPTdesc=$"set permissions of files in a package"
+
+ rpm alias --setugids -q --qf \
+ '[ch %{FILEUSERNAME:shescape} %{FILEGROUPNAME:shescape} %{FILENAMES:shescape}\n]' \
+- --pipe "(echo 'ch() { chown -- \"$1\" \"$3\";chgrp -- \"$2\" \"$3\"; }';grep -v \(none\))|sh" \
++ --pipe "(echo 'ch() { chown -h -- \"$1\" \"$3\";chgrp -h -- \"$2\" \"$3\"; }';grep '^ch '|grep -v \(none\))|sh" \
+ --POPTdesc=$"set user/group ownership of files in a package"
+
+ rpm alias --conflicts --qf \
diff --git a/signature.diff b/signature.diff
new file mode 100644
index 0000000..d2de3a3
--- /dev/null
+++ b/signature.diff
@@ -0,0 +1,21 @@
+Backported fix.
+
+--- ./lib/signature.c.orig 2005-12-14 21:14:45.000000000 +0000
++++ ./lib/signature.c 2005-12-16 18:24:53.000000000 +0000
+@@ -268,7 +268,7 @@ rpmRC rpmReadSignature(FD_t fd, Header *
+
+ xx = headerVerifyInfo(1, dl, info, &entry->info, 1);
+ if (xx != -1 ||
+- !(entry->info.tag == RPMTAG_HEADERSIGNATURES
++ !((entry->info.tag == RPMTAG_HEADERSIGNATURES || entry->info.tag == RPMTAG_HEADERIMAGE)
+ && entry->info.type == RPM_BIN_TYPE
+ && entry->info.count == REGION_TAG_COUNT))
+ {
+@@ -583,6 +583,7 @@ static int makeGPGSignature(const char *
+ if (gpg_path && *gpg_path != '\0')
+ (void) dosetenv("GNUPGHOME", gpg_path, 1);
+ /*@=boundsread@*/
++ (void) dosetenv("LC_ALL", "C", 1);
+
+ unsetenv("MALLOC_CHECK_");
+ cmd = rpmExpand("%{?__gpg_sign_cmd}", NULL);
diff --git a/signwriteerror.diff b/signwriteerror.diff
new file mode 100644
index 0000000..87174fb
--- /dev/null
+++ b/signwriteerror.diff
@@ -0,0 +1,16 @@
+Call Fflush at the end of writeing a signed package to catch out
+of disk space errors.
+
+--- ./lib/rpmchecksig.c.orig 2005-12-14 20:54:39.000000000 +0000
++++ ./lib/rpmchecksig.c 2006-03-21 18:00:22.000000000 +0000
+@@ -116,6 +116,10 @@ static int copyFile(FD_t *sfdp, const ch
+ rpmError(RPMERR_FREAD, _("%s: Fread failed: %s\n"), *sfnp, Fstrerror(*sfdp));
+ goto exit;
+ }
++ if (Fflush(*tfdp) != 0) {
++ rpmError(RPMERR_FWRITE, _("%s: Fflush failed: %s\n"), *tfnp,
++ Fstrerror(*tfdp));
++ }
+
+ rc = 0;
+
diff --git a/specfilemacro.diff b/specfilemacro.diff
deleted file mode 100644
index a9663dc..0000000
--- a/specfilemacro.diff
+++ /dev/null
@@ -1,10 +0,0 @@
---- ./build/parseSpec.c.orig 2010-12-03 12:11:57.000000000 +0000
-+++ ./build/parseSpec.c 2011-05-11 15:58:37.000000000 +0000
-@@ -519,6 +519,7 @@ static rpmSpec parseSpec(const char *spe
- spec = newSpec();
-
- spec->specFile = rpmGetPath(specFile, NULL);
-+ addMacro(spec->macros, "_specfile", NULL, spec->specFile, RMIL_SPEC);
- spec->fileStack = newOpenFileInfo();
- spec->fileStack->fileName = xstrdup(spec->specFile);
- /* If buildRoot not specified, use default %{buildroot} */
diff --git a/spectest.diff b/spectest.diff
new file mode 100644
index 0000000..5416193
--- /dev/null
+++ b/spectest.diff
@@ -0,0 +1,19 @@
+Allow characters >127 that don't fit the current locale in the
+specfile (e.g. latin1 in utf-8 locale).
+
+--- ./build.c.orig 2004-10-17 19:00:10.000000000 +0000
++++ ./build.c 2005-12-19 17:52:25.000000000 +0000
+@@ -87,8 +87,13 @@ static int isSpecFile(const char * specf
+ /*@switchbreak@*/ break;
+ /*@-boundsread@*/
+ default:
++#if 0
+ if (checking && !(isprint(*s) || isspace(*s))) return 0;
+ /*@switchbreak@*/ break;
++#else
++ if (checking && !(isprint(*s) || isspace(*s)) && *(unsigned char *)s < 32) return 0;
++ /*@switchbreak@*/ break;
++#endif
+ /*@=boundsread@*/
+ }
+ }
diff --git a/sqcondmutex.diff b/sqcondmutex.diff
new file mode 100644
index 0000000..61fed9f
--- /dev/null
+++ b/sqcondmutex.diff
@@ -0,0 +1,119 @@
+Backported fix. AFAIK needed for smart.
+
+Index: rpmio/rpmsq.c
+===================================================================
+--- rpmio/rpmsq.c.orig
++++ rpmio/rpmsq.c
+@@ -218,7 +218,6 @@ fprintf(stderr, " Insert(%p): %p\n",
+
+ sq->id = ME();
+ ret = pthread_mutex_init(&sq->mutex, NULL);
+- ret = pthread_cond_init(&sq->cond, NULL);
+ insque(elem, (prev != NULL ? prev : rpmsqQueue));
+ ret = sigrelse(SIGCHLD);
+ }
+@@ -240,8 +239,11 @@ fprintf(stderr, " Remove(%p): %p\n",
+ ret = sighold (SIGCHLD);
+ if (ret == 0) {
+ remque(elem);
+- ret = pthread_cond_destroy(&sq->cond);
+- ret = pthread_mutex_destroy(&sq->mutex);
++
++ /* Unlock the mutex and then destroy it */
++ if((ret = pthread_mutex_unlock(&sq->mutex)) == 0)
++ ret = pthread_mutex_destroy(&sq->mutex);
++
+ sq->id = NULL;
+ /*@-bounds@*/
+ if (sq->pipes[1]) ret = close(sq->pipes[1]);
+@@ -315,11 +317,20 @@ void rpmsqAction(int signum,
+ sq != NULL && sq != rpmsqQueue;
+ sq = sq->q_forw)
+ {
++ int ret;
++
+ if (sq->child != reaped)
+ /*@innercontinue@*/ continue;
+ sq->reaped = reaped;
+ sq->status = status;
+- (void) pthread_cond_signal(&sq->cond);
++
++ /* Unlock the mutex. The waiter will then be able to
++ * aquire the lock.
++ *
++ * XXX: jbj, wtd, if this fails?
++ */
++ ret = pthread_mutex_unlock(&sq->mutex);
++
+ /*@innerbreak@*/ break;
+ }
+ }
+@@ -391,6 +402,7 @@ pid_t rpmsqFork(rpmsq sq)
+ {
+ pid_t pid;
+ int xx;
++ int nothreads = 0; /* XXX: Shouldn't this be a global? */
+
+ if (sq->reaper) {
+ xx = rpmsqInsert(sq, NULL);
+@@ -405,6 +417,24 @@ fprintf(stderr, " Enable(%p): %p\n",
+
+ xx = sighold(SIGCHLD);
+
++ /*
++ * Initialize the cond var mutex. We have to aquire the lock we
++ * use for the condition before we fork. Otherwise it is possible for
++ * the child to exit, we get sigchild and the sig handler to send
++ * the condition signal before we are waiting on the condition.
++ */
++ if (!nothreads) {
++ if(pthread_mutex_lock(&sq->mutex)) {
++ /* Yack we did not get the lock, lets just give up */
++/*@-bounds@*/
++ xx = close(sq->pipes[0]);
++ xx = close(sq->pipes[1]);
++ sq->pipes[0] = sq->pipes[1] = -1;
++/*@=bounds@*/
++ goto out;
++ }
++ }
++
+ pid = fork();
+ if (pid < (pid_t) 0) { /* fork failed. */
+ sq->child = (pid_t)-1;
+@@ -463,10 +493,6 @@ static int rpmsqWaitUnregister(rpmsq sq)
+ /* Protect sq->reaped from handler changes. */
+ ret = sighold(SIGCHLD);
+
+- /* Initialize the cond var mutex. */
+- if (!nothreads)
+- ret = pthread_mutex_lock(&sq->mutex);
+-
+ /* Start the child, linux often runs child before parent. */
+ /*@-bounds@*/
+ if (sq->pipes[0] >= 0)
+@@ -487,7 +513,13 @@ static int rpmsqWaitUnregister(rpmsq sq)
+ ret = sigpause(SIGCHLD);
+ else {
+ xx = sigrelse(SIGCHLD);
+- ret = pthread_cond_wait(&sq->cond, &sq->mutex);
++
++ /*
++ * We start before the fork with this mutex locked;
++ * The only one that unlocks this the signal handler.
++ * So if we get the lock the child has been reaped.
++ */
++ ret = pthread_mutex_lock(&sq->mutex);
+ xx = sighold(SIGCHLD);
+ }
+ }
+@@ -496,9 +528,6 @@ static int rpmsqWaitUnregister(rpmsq sq)
+ /* Accumulate stopwatch time spent waiting, potential performance gain. */
+ sq->ms_scriptlets += rpmswExit(&sq->op, -1)/1000;
+
+- /* Tear down cond var mutex, our child has been reaped. */
+- if (!nothreads)
+- xx = pthread_mutex_unlock(&sq->mutex);
+ xx = sigrelse(SIGCHLD);
+
+ #ifdef _RPMSQ_DEBUG
diff --git a/srcdefattr.diff b/srcdefattr.diff
new file mode 100644
index 0000000..a2f0df6
--- /dev/null
+++ b/srcdefattr.diff
@@ -0,0 +1,68 @@
+Add new srcdefattr macro. Usefull for assuring that all files
+in the src rpms belong to root:root [#48870] rh#125515
+
+--- ./build/files.c.orig 2005-12-14 19:22:43.000000000 +0000
++++ ./build/files.c 2006-02-17 13:57:25.000000000 +0000
+@@ -2260,7 +2274,15 @@ int processSourceFiles(Spec spec)
+ struct FileList_s fl;
+ char *s, **files, **fp;
+ Package pkg;
++ static char *_srcdefattr;
++ static int oneshot;
+
++ if (!oneshot) {
++ _srcdefattr = rpmExpand("%{?_srcdefattr}", NULL);
++ if (_srcdefattr && !*_srcdefattr)
++ _srcdefattr = _free(_srcdefattr);
++ oneshot = 1;
++ }
+ sourceFiles = newStringBuf();
+
+ /* XXX
+@@ -2311,6 +2333,15 @@ int processSourceFiles(Spec spec)
+
+ spec->sourceCpioList = NULL;
+
++ /* Init the file list structure */
++ memset(&fl, 0, sizeof(fl));
++ if (_srcdefattr) {
++ char *a = xmalloc(strlen(_srcdefattr) + 9 + 1);
++ strcpy(a, "%defattr ");
++ strcpy(a + 9, _srcdefattr);
++ parseForAttr(a, &fl);
++ a = _free(a);
++ }
+ fl.fileList = xcalloc((spec->numSources + 1), sizeof(*fl.fileList));
+ fl.processingFailed = 0;
+ fl.fileListRecsUsed = 0;
+@@ -2359,8 +2390,20 @@ int processSourceFiles(Spec spec)
+ fl.processingFailed = 1;
+ }
+
+- flp->uname = getUname(flp->fl_uid);
+- flp->gname = getGname(flp->fl_gid);
++ if (fl.def_ar.ar_fmodestr) {
++ flp->fl_mode &= S_IFMT;
++ flp->fl_mode |= fl.def_ar.ar_fmode;
++ }
++ if (fl.def_ar.ar_user) {
++ flp->uname = getUnameS(fl.def_ar.ar_user);
++ } else {
++ flp->uname = getUname(flp->fl_uid);
++ }
++ if (fl.def_ar.ar_group) {
++ flp->gname = getGnameS(fl.def_ar.ar_group);
++ } else {
++ flp->gname = getGname(flp->fl_gid);
++ }
+ flp->langs = xstrdup("");
+
+ fl.totalFileSize += flp->fl_size;
+@@ -2384,6 +2427,7 @@ int processSourceFiles(Spec spec)
+
+ sourceFiles = freeStringBuf(sourceFiles);
+ fl.fileList = freeFileList(fl.fileList, fl.fileListRecsUsed);
++ freeAttrRec(&fl.def_ar);
+ return fl.processingFailed;
+ }
+
diff --git a/suspendlock.diff b/suspendlock.diff
index f4c981b..be5188f 100644
--- a/suspendlock.diff
+++ b/suspendlock.diff
@@ -2,128 +2,36 @@ Suspend exclusive database lock when scriptlets get called, allowing
read access in scriptlets. Only needed for DB_PRIVATE (aka global)
locking.
---- ./lib/backend/db3.c.orig 2011-05-12 10:24:20.000000000 +0000
-+++ ./lib/backend/db3.c 2011-05-12 10:26:14.000000000 +0000
-@@ -640,3 +640,59 @@ int dbiOpen(rpmdb rdb, rpmDbiTagVal rpmt
-
- return rc;
- }
-+
-+int dbiSuspendDBLock(dbiIndex dbi, unsigned int flags)
-+{
-+ struct flock l;
-+ int rc = 0;
-+ int fdno = -1;
-+
-+ if (!dbi->dbi_lockdbfd)
-+ return 0;
-+ if (!(dbi->dbi_rpmdb->db_mode & (O_RDWR|O_WRONLY)))
-+ return 0;
-+ if (_lockdbfd == 0)
-+ return 0;
-+ if (!(dbi->dbi_db->fd(dbi->dbi_db, &fdno) == 0 && fdno >= 0))
-+ return 1;
-+ memset(&l, 0, sizeof(l));
-+ l.l_whence = 0;
-+ l.l_start = 0;
-+ l.l_len = 0;
-+ l.l_type = F_RDLCK;
-+ rc = fcntl(fdno, F_SETLK, (void *)&l);
-+ if (rc)
-+ rpmlog(RPMLOG_WARNING, _("could not suspend database lock\n"));
-+ return rc;
-+}
-+
-+int dbiResumeDBLock(dbiIndex dbi, unsigned int flags)
-+{
-+ struct flock l;
-+ int rc = 0;
-+ int tries;
-+ int fdno = -1;
-+
-+ if (!dbi->dbi_lockdbfd)
-+ return 0;
-+ if (!(dbi->dbi_rpmdb->db_mode & (O_RDWR|O_WRONLY)))
-+ return 0;
-+ if (_lockdbfd == 0)
-+ return 0;
-+ if (!(dbi->dbi_db->fd(dbi->dbi_db, &fdno) == 0 && fdno >= 0))
-+ return 1;
-+ for (tries = 0; tries < 2; tries++) {
-+ memset(&l, 0, sizeof(l));
-+ l.l_whence = 0;
-+ l.l_start = 0;
-+ l.l_len = 0;
-+ l.l_type = F_WRLCK;
-+ rc = fcntl(fdno, tries ? F_SETLKW : F_SETLK, (void *)&l);
-+ if (!rc)
-+ break;
-+ if (tries == 0)
-+ rpmlog(RPMLOG_WARNING, _("waiting to reestablish exclusive database lock\n"));
-+ }
-+ return rc;
-+}
-+
---- ./lib/backend/dbi.h.orig 2010-12-21 09:48:21.000000000 +0000
-+++ ./lib/backend/dbi.h 2011-05-12 10:24:57.000000000 +0000
-@@ -263,6 +263,24 @@ int dbiFlags(dbiIndex dbi);
- RPM_GNUC_INTERNAL
- const char * dbiName(dbiIndex dbi);
-
-+/** \ingroup dbi
-+ * Suspend the exclusive lock on the dbi
-+ * @param dbi index database handle
-+ * @param flags (unused)
-+ * @return 0 on success
-+ */
-+RPM_GNUC_INTERNAL
-+int dbiSuspendDBLock(dbiIndex dbi, unsigned int flags);
-+
-+/** \ingroup dbi
-+ * Reacquire an exclusive lock on the dbi
-+ * @param dbi index database handle
-+ * @param flags (unused)
-+ * @return 0 on success
-+ */
-+RPM_GNUC_INTERNAL
-+int dbiResumeDBLock(dbiIndex dbi, unsigned int flags);
-+
- #ifdef __cplusplus
- }
- #endif
---- ./lib/psm.c.orig 2011-05-12 10:23:47.000000000 +0000
-+++ ./lib/psm.c 2011-05-12 10:24:57.000000000 +0000
-@@ -412,10 +412,12 @@ static rpmRC runScript(rpmpsm psm, ARGV_
- script->tag != RPMTAG_VERIFYSCRIPT);
- int selinux = !(rpmtsFlags(psm->ts) & RPMTRANS_FLAG_NOCONTEXTS);
+I hijacked the dbiSync function for this because I did not want
+to change the ABI.
+
+Index: lib/psm.c
+===================================================================
+--- lib/psm.c.orig
++++ lib/psm.c
+@@ -799,6 +799,8 @@ static rpmRC runScript(rpmpsm psm, Heade
+ }
+ if (out == NULL) return RPMRC_FAIL; /* XXX can't happen */
+ rpmtsSuspendResumeDBLock(psm->ts, 0);
- rpmswEnter(rpmtsOp(psm->ts, RPMTS_OP_SCRIPTLETS), 0);
- rc = rpmScriptRun(script, arg1, arg2, rpmtsScriptFd(psm->ts),
- prefixes, warn_only, selinux);
- rpmswExit(rpmtsOp(psm->ts, RPMTS_OP_SCRIPTLETS), 0);
-+ rpmtsSuspendResumeDBLock(psm->ts, 1);
-
- /*
- * Notify callback for all errors. "total" abused for warning/error,
---- ./lib/rpmdb.c.orig 2011-05-12 10:23:47.000000000 +0000
-+++ ./lib/rpmdb.c 2011-05-12 10:24:57.000000000 +0000
-@@ -674,6 +674,12 @@ int rpmdbSync(rpmdb db)
- return dbiForeach(db->_dbi, dbiSync, 0);
- }
-
-+int rpmdbSuspendResumeDBLock(rpmdb db, int mode)
-+{
-+ if (db == NULL) return 0;
-+ return dbiForeach(db->_dbi, mode ? dbiResumeDBLock : dbiSuspendDBLock, 0);
-+}
+
- static rpmdb newRpmdb(const char * root, const char * home,
- int mode, int perms, int flags)
- {
---- ./lib/rpmts.c.orig 2010-12-22 11:17:20.000000000 +0000
-+++ ./lib/rpmts.c 2011-05-12 10:24:57.000000000 +0000
-@@ -95,6 +95,11 @@ int rpmtsOpenDB(rpmts ts, int dbmode)
+ /*@-branchstate@*/
+ xx = rpmsqFork(&psm->sq);
+ if (psm->sq.child == 0) {
+@@ -924,6 +926,8 @@ static rpmRC runScript(rpmpsm psm, Heade
+
+ (void) psmWait(psm);
+
++ rpmtsSuspendResumeDBLock(psm->ts, 1);
++
+ /* XXX filter order dependent multilib "other" arch helper error. */
+ if (!(psm->sq.reaped >= 0 && !strcmp(argv[0], "/usr/sbin/glibc_post_upgrade") && WEXITSTATUS(psm->sq.status) == 110)) {
+ if (psm->sq.reaped < 0) {
+Index: lib/rpmts.c
+===================================================================
+--- lib/rpmts.c.orig
++++ lib/rpmts.c
+@@ -190,6 +190,11 @@ int rpmtsOpenDB(rpmts ts, int dbmode)
return rc;
}
@@ -134,15 +42,120 @@ locking.
+
int rpmtsInitDB(rpmts ts, int dbmode)
{
- rpmlock lock = rpmtsAcquireLock(ts);
---- ./lib/rpmts.h.orig 2010-12-21 09:50:50.000000000 +0000
-+++ ./lib/rpmts.h 2011-05-12 10:24:57.000000000 +0000
-@@ -423,6 +423,8 @@ rpmdb rpmtsGetRdb(rpmts ts);
- void * rpmtsNotify(rpmts ts, rpmte te,
- rpmCallbackType what, rpm_loff_t amount, rpm_loff_t total);
+ void *lock = rpmtsAcquireLock(ts);
+Index: lib/rpmts.h
+===================================================================
+--- lib/rpmts.h.orig
++++ lib/rpmts.h
+@@ -470,6 +470,10 @@ int rpmtsRebuildDB(rpmts ts)
+ /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/
+ /*@modifies ts, rpmGlobalMacroContext, fileSystem, internalState @*/;
-+int rpmtsSuspendResumeDBLock(rpmts ts, int mode);
++int rpmtsSuspendResumeDBLock(rpmts ts, int mode)
++ /*@globals fileSystem @*/
++ /*@modifies fileSystem @*/;
+
/** \ingroup rpmts
- * Return number of (ordered) transaction set elements.
+ * Verify the database used by the transaction.
* @param ts transaction set
+Index: rpmdb/db3.c
+===================================================================
+--- rpmdb/db3.c.orig
++++ rpmdb/db3.c
+@@ -458,6 +458,8 @@ errxit:
+ }
+ /*@=moduncon@*/
+
++static int db3SuspendResumeLock(dbiIndex dbi, int mode);
++
+ static int db3sync(dbiIndex dbi, unsigned int flags)
+ /*@globals fileSystem @*/
+ /*@modifies fileSystem @*/
+@@ -466,6 +468,10 @@ static int db3sync(dbiIndex dbi, unsigne
+ int rc = 0;
+ int _printit;
+
++ if (flags == (unsigned int)-1)
++ return db3SuspendResumeLock(dbi, 0);
++ if (flags == (unsigned int)-2)
++ return db3SuspendResumeLock(dbi, 1);
+ if (db != NULL)
+ rc = db->sync(db, flags);
+ /* XXX DB_INCOMPLETE is returned occaisionally with multiple access. */
+@@ -1412,6 +1418,50 @@ static int db3open(rpmdb rpmdb, rpmTag r
+ /*@=nullstate =compmempass@*/
+ }
+
++static int
++db3SuspendResumeLock(dbiIndex dbi, int mode)
++{
++ struct flock l;
++ int rc = 0;
++ int tries;
++ int fdno = -1;
++
++ if (!dbi->dbi_lockdbfd)
++ return 0;
++ if (!(dbi->dbi_mode & (O_RDWR|O_WRONLY)))
++ return 0;
++ if ((dbi->dbi_ecflags & DB_CLIENT) && dbi->dbi_host)
++ return 0;
++ if (dbi->dbi_use_dbenv && _lockdbfd == 0)
++ return 0;
++ if (!(dbi->dbi_db->fd(dbi->dbi_db, &fdno) == 0 && fdno >= 0))
++ return 1;
++ if (mode == 0) {
++ memset(&l, 0, sizeof(l));
++ l.l_whence = 0;
++ l.l_start = 0;
++ l.l_len = 0;
++ l.l_type = F_RDLCK;
++ rc = fcntl(fdno, F_SETLK, (void *) &l);
++ if (rc)
++ rpmMessage(RPMMESS_WARNING, _("could not suspend database lock\n"));
++ } else {
++ for (tries = 0; tries < 2; tries++) {
++ memset(&l, 0, sizeof(l));
++ l.l_whence = 0;
++ l.l_start = 0;
++ l.l_len = 0;
++ l.l_type = F_WRLCK;
++ rc = fcntl(fdno, tries ? F_SETLKW : F_SETLK, (void *) &l);
++ if (!rc)
++ break;
++ if (tries == 0)
++ rpmMessage(RPMMESS_WARNING, _("waiting to reestablish exclusive database lock\n"));
++ }
++ }
++ return rc;
++}
++
+ /** \ingroup db3
+ */
+ /*@-exportheadervar@*/
+Index: rpmdb/rpmdb.c
+===================================================================
+--- rpmdb/rpmdb.c.orig
++++ rpmdb/rpmdb.c
+@@ -945,6 +945,21 @@ int rpmdbSync(rpmdb db)
+ return rc;
+ }
+
++int rpmdbSuspendResumeDBLock(rpmdb db, int mode)
++{
++ int dbix;
++ int rc = 0;
++ if (db == NULL) return 0;
++ for (dbix = 0; dbix < db->db_ndbi; dbix++) {
++ int xx;
++ if (db->_dbi[dbix] == NULL)
++ continue;
++ xx = dbiSync(db->_dbi[dbix], mode ? -2 : -1);
++ if (xx && rc == 0) rc = xx;
++ }
++ return rc;
++}
++
+ /*@-mods@*/ /* FIX: dbTemplate structure assignment */
+ static /*@only@*/ /*@null@*/
+ rpmdb newRpmdb(/*@kept@*/ /*@null@*/ const char * root,
diff --git a/taggedfileindex.diff b/taggedfileindex.diff
index 7fc306d..693e28d 100644
--- a/taggedfileindex.diff
+++ b/taggedfileindex.diff
@@ -1,14 +1,119 @@
-This used to be the taggedfileindex patch, but it's gone.
-The remaining part just strips off the tag.
---- ./lib/rpmdb.c.orig 2011-05-11 14:27:32.000000000 +0000
-+++ ./lib/rpmdb.c 2011-05-11 15:14:39.000000000 +0000
-@@ -257,6 +257,9 @@ static int dbt2set(dbiIndex dbi, DBT * d
- _DBSWAP(hdrNum);
- _DBSWAP(tagNum);
- }
-+ /* remove tagged directory info */
-+ if (tagNum.ui & 0x80000000)
-+ tagNum.ui &= 0x0000ffff;
- set->recs[i].hdrNum = hdrNum.ui;
- set->recs[i].tagNum = tagNum.ui;
- }
+The taggedfileindex patch. Speeds up database searches, but breaks
+fingerprint semantics. Needs findfplistexclude.diff.
+rh#103204
+
+Index: rpmdb/rpmdb.c
+===================================================================
+--- rpmdb/rpmdb.c.orig
++++ rpmdb/rpmdb.c
+@@ -1223,6 +1223,16 @@ int rpmdbVerify(const char * prefix)
+ return rc;
+ }
+
++static inline unsigned int taghash(const char *s)
++{
++ int c;
++ unsigned int r = 0;
++ while ((c = *(const unsigned char *)s++) != 0)
++ if (c != '/')
++ r += (r << 3) + c;
++ return ((r & 0x7fff) | 0x8000) << 16;
++}
++
+ /**
+ * Find file matches in database.
+ * @param db rpm database
+@@ -1302,6 +1312,11 @@ if (key->size == 0) key->size++; /* XXX
+ if (rc == 0)
+ (void) dbt2set(dbi, data, &allMatches);
+
++ /* strip off directory tags */
++ if (allMatches != NULL)
++ for (i = 0; i < allMatches->count; i++)
++ if (allMatches->recs[i].tagNum & 0x80000000)
++ allMatches->recs[i].tagNum &= 0x0000ffff;
+ xx = dbiCclose(dbi, dbcursor, 0);
+ dbcursor = NULL;
+ } else
+@@ -2408,7 +2423,7 @@ static void rpmdbSortIterator(/*@null@*/
+ }
+
+ /*@-bounds@*/ /* LCL: segfault */
+-static int rpmdbGrowIterator(/*@null@*/ rpmdbMatchIterator mi, int fpNum, unsigned int exclude)
++static int rpmdbGrowIterator(/*@null@*/ rpmdbMatchIterator mi, int fpNum, unsigned int exclude, unsigned int tag)
+ /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/
+ /*@modifies mi, rpmGlobalMacroContext, fileSystem, internalState @*/
+ {
+@@ -2456,10 +2471,16 @@ static int rpmdbGrowIterator(/*@null@*/
+ set = NULL;
+ (void) dbt2set(dbi, data, &set);
+
+- /* prune the set against exclude */
++ /* prune the set against exclude and tag */
+ for (i = j = 0; i < set->count; i++) {
+ if (exclude && set->recs[i].hdrNum == exclude)
+ continue;
++ if (set->recs[i].tagNum & 0x80000000) {
++ /* tagged entry */
++ if ((set->recs[i].tagNum & 0xffff0000) != tag)
++ continue;
++ set->recs[i].tagNum &= 0x0000ffff;
++ }
+ if (i != j)
+ set->recs[j] = set->recs[i];
+ j++;
+@@ -2987,7 +3008,9 @@ DBT * data = alloca(sizeof(*data));
+ HFD_t hfd = headerFreeData;
+ sigset_t signalMask;
+ const char ** baseNames;
+- rpmTagType bnt;
++ const char ** dirNames;
++ int_32 * dirIndexes, *dirs;
++ rpmTagType bnt, dit, dnt;
+ int count = 0;
+ dbiIndex dbi;
+ int dbix;
+@@ -3027,6 +3050,13 @@ memset(data, 0, sizeof(*data));
+ */
+
+ xx = hge(h, RPMTAG_BASENAMES, &bnt, (void **) &baseNames, &count);
++ xx = hge(h, RPMTAG_DIRINDEXES, &dit, (void **) &dirIndexes, NULL);
++ xx = hge(h, RPMTAG_DIRNAMES, &dnt, (void **) &dirNames, NULL);
++
++ /* save dirIndexes, because expandFilelist may free it */
++ dirs = alloca(count * sizeof(*dirs));
++ for (xx = 0; xx < count; xx++)
++ dirs[xx] = dirIndexes[xx];
+
+ if (_noDirTokens)
+ expandFilelist(h);
+@@ -3243,6 +3273,11 @@ data->size = 0;
+ */
+ rec->tagNum = i;
+ switch (dbi->dbi_rpmtag) {
++ case RPMTAG_BASENAMES:
++ /* tag index entry with directory hash */
++ if (i < 0x010000)
++ rec->tagNum |= taghash(dirNames[dirs[i]]);
++ /*@switchbreak@*/ break;
+ case RPMTAG_PUBKEYS:
+ /*@switchbreak@*/ break;
+ case RPMTAG_FILEMD5S:
+@@ -3417,6 +3452,8 @@ if (key->size == 0) key->size++; /* XXX
+ }
+
+ exit:
++ dirIndexes = hfd(dirIndexes, dit);
++ dirNames = hfd(dirNames, dnt);
+ (void) unblockSignals(db, &signalMask);
+
+ return ret;
+@@ -3505,7 +3542,7 @@ if (key->size == 0) key->size++; /* XXX
+ if (!exclude && skipDir(fpList[i].entry->dirName))
+ continue;
+
+- xx = rpmdbGrowIterator(mi, i, exclude);
++ xx = rpmdbGrowIterator(mi, i, exclude, taghash(fpList[i].entry->dirName));
+
+ }
+
diff --git a/tagsbackport.diff b/tagsbackport.diff
new file mode 100644
index 0000000..69d6830
--- /dev/null
+++ b/tagsbackport.diff
@@ -0,0 +1,37 @@
+Backported some new tags and sense values.
+
+Index: lib/rpmlib.h
+===================================================================
+--- lib/rpmlib.h.orig
++++ lib/rpmlib.h
+@@ -447,6 +447,19 @@ typedef enum rpmTag_e {
+ RPMTAG_PRIORITY = 1162, /* i extension placeholder */
+ RPMTAG_CVSID = 1163, /* s */
+ #define RPMTAG_SVNID RPMTAG_CVSID /* s */
++ RPMTAG_BLINKPKGID = 1164, /* s[] */
++ RPMTAG_BLINKHDRID = 1165, /* s[] */
++ RPMTAG_BLINKNEVRA = 1166, /* s[] */
++ RPMTAG_FLINKPKGID = 1167, /* s[] */
++ RPMTAG_FLINKHDRID = 1168, /* s[] */
++ RPMTAG_FLINKNEVRA = 1169, /* s[] */
++ RPMTAG_PACKAGEORIGIN = 1170, /* s */
++ RPMTAG_TRIGGERPREIN = 1171, /*!< internal */
++ RPMTAG_BUILDSUGGESTS = 1172, /*!< internal */
++ RPMTAG_BUILDENHANCES = 1173, /*!< internal */
++ RPMTAG_SCRIPTSTATES = 1174, /*!< i scriptlet exit codes */
++ RPMTAG_SCRIPTMETRICS = 1175, /*!< i scriptlet execution times */
++ RPMTAG_BUILDCPUCLOCK = 1176, /*!< i */
+
+ /*@-enummemuse@*/
+ RPMTAG_FIRSTFREE_TAG /*!< internal */
+@@ -530,7 +543,9 @@ typedef enum rpmsenseFlags_e {
+ /*@=enummemuse@*/
+ RPMSENSE_KEYRING = (1 << 26),
+ RPMSENSE_PATCHES = (1 << 27),
+- RPMSENSE_CONFIG = (1 << 28)
++ RPMSENSE_CONFIG = (1 << 28),
++ RPMSENSE_PROBE = (1 << 29),
++ RPMSENSE_PACKAGE = (1 << 30)
+ } rpmsenseFlags;
+
+ #define RPMSENSE_SENSEMASK 15 /* Mask to get senses, ie serial, */
diff --git a/totalsizenoexclude.diff b/totalsizenoexclude.diff
new file mode 100644
index 0000000..84f9509
--- /dev/null
+++ b/totalsizenoexclude.diff
@@ -0,0 +1,13 @@
+Do not could exlcuded files in disk space calculation. Backported.
+
+--- ./build/files.c.orig 2005-12-14 19:22:43.000000000 +0000
++++ ./build/files.c 2006-02-17 13:57:25.000000000 +0000
+@@ -1677,7 +1689,7 @@ static int addFile(FileList fl, const ch
+ } else
+ i = fl->fileListRecsUsed;
+
+- if (S_ISREG(flp->fl_mode) && i >= fl->fileListRecsUsed)
++ if (!(flp->flags & RPMFILE_EXCLUDE) && S_ISREG(flp->fl_mode) && i >= fl->fileListRecsUsed)
+ fl->totalFileSize += flp->fl_size;
+ }
+
diff --git a/translockroot.diff b/translockroot.diff
new file mode 100644
index 0000000..fa9bc5f
--- /dev/null
+++ b/translockroot.diff
@@ -0,0 +1,37 @@
+Obey --root option when calculating the directory of the
+transaction lock.
+
+Already fixed in rpm-4.4.7.
+
+--- ./lib/rpmlock.c.orig 2005-12-21 14:34:27.000000000 +0000
++++ ./lib/rpmlock.c 2005-12-21 14:42:59.000000000 +0000
+@@ -45,12 +45,18 @@ static rpmlock rpmlock_new(/*@unused@*/
+ }
+ if (lock != NULL) {
+ mode_t oldmask = umask(022);
+- lock->fd = open(rpmlock_path, O_RDWR|O_CREAT, 0644);
++ char *path = rpmlock_path;
++ if (rootdir && *rootdir == '/' && rootdir[1] != 0) {
++ path = xmalloc(strlen(rootdir) + strlen(rpmlock_path) + 1);
++ strcpy(path, rootdir);
++ strcat(path, rpmlock_path);
++ }
++ lock->fd = open(path, O_RDWR|O_CREAT, 0644);
+ (void) umask(oldmask);
+
+ /*@-branchstate@*/
+ if (lock->fd == -1) {
+- lock->fd = open(rpmlock_path, O_RDONLY);
++ lock->fd = open(path, O_RDONLY);
+ if (lock->fd == -1) {
+ free(lock);
+ lock = NULL;
+@@ -64,6 +70,8 @@ static rpmlock rpmlock_new(/*@unused@*/
+ lock->openmode = RPMLOCK_WRITE | RPMLOCK_READ;
+ /*@=nullderef@*/
+ }
++ if (path != rpmlock_path)
++ free(path);
+ /*@=branchstate@*/
+ }
+ /*@-compdef@*/
diff --git a/vercmp.diff b/vercmp.diff
new file mode 100644
index 0000000..8a2bfd8
--- /dev/null
+++ b/vercmp.diff
@@ -0,0 +1,31 @@
+Patch rpmvercmp corner case where it said both A < B and B < A.
+Also clarifies some comments.
+Patch from Peter Bowan.
+
+--- ./lib/rpmvercmp.c.orig 2006-02-10 16:22:02.000000000 +0000
++++ ./lib/rpmvercmp.c 2006-02-10 16:20:49.000000000 +0000
+@@ -39,6 +39,9 @@ int rpmvercmp(const char * a, const char
+ while (*one && !xisalnum(*one)) one++;
+ while (*two && !xisalnum(*two)) two++;
+
++ /* If we ran to the end of either, we are finished with the loop */
++ if (!(*one && *two)) break;
++
+ str1 = one;
+ str2 = two;
+
+@@ -64,9 +67,13 @@ int rpmvercmp(const char * a, const char
+ *str2 = '\0';
+ /*@=boundswrite@*/
+
++ /* this cannot happen, as we previously tested to make sure that */
++ /* the first string has a non-null segment */
++ if (one == str1) return -1; /* arbitrary */
++
+ /* take care of the case where the two version segments are */
+ /* different types: one numeric, the other alpha (i.e. empty) */
+- if (one == str1) return -1; /* arbitrary */
++ /* numeric segments are always newer than alpha segments */
+ /* XXX See patch #60884 (and details) from bugzilla #50977. */
+ if (two == str2) return (isnum ? 1 : -1);
+
diff --git a/verify_p.diff b/verify_p.diff
deleted file mode 100644
index 8eeea06..0000000
--- a/verify_p.diff
+++ /dev/null
@@ -1,49 +0,0 @@
-Make 'rpm -Vp ' work again.
-
---- ./lib/rpmte.c.orig 2011-05-12 15:22:06.000000000 +0000
-+++ ./lib/rpmte.c 2011-05-12 15:23:39.000000000 +0000
-@@ -905,15 +905,19 @@ int rpmteProcess(rpmte te, pkgGoal goal)
- }
- }
-
-- rpmteRunAllCollections(te, PLUGINHOOK_COLL_PRE_REMOVE);
--
-- if (rpmteOpen(te, reset_fi)) {
-+ if (goal == PKG_VERIFY) {
- failed = rpmpsmRun(te->ts, te, goal);
-- rpmteClose(te, reset_fi);
-- }
-+ } else {
-+ rpmteRunAllCollections(te, PLUGINHOOK_COLL_PRE_REMOVE);
-+
-+ if (rpmteOpen(te, reset_fi)) {
-+ failed = rpmpsmRun(te->ts, te, goal);
-+ rpmteClose(te, reset_fi);
-+ }
-
-- rpmteRunAllCollections(te, PLUGINHOOK_COLL_POST_ADD);
-- rpmteRunAllCollections(te, PLUGINHOOK_COLL_POST_ANY);
-+ rpmteRunAllCollections(te, PLUGINHOOK_COLL_POST_ADD);
-+ rpmteRunAllCollections(te, PLUGINHOOK_COLL_POST_ANY);
-+ }
-
- /* XXX should %pretrans failure fail the package install? */
- if (failed && !scriptstage) {
---- ./lib/verify.c.orig 2011-05-12 15:22:01.000000000 +0000
-+++ ./lib/verify.c 2011-05-12 15:22:49.000000000 +0000
-@@ -267,11 +267,11 @@ static int rpmVerifyScript(rpmts ts, Hea
-
- if (headerIsEntry(h, RPMTAG_VERIFYSCRIPT)) {
- /* fake up a erasure transaction element */
-- (void) rpmtsAddEraseElement(ts, h, -1);
--
-- rc = (rpmteProcess(rpmtsElement(ts, 0), PKG_VERIFY) != RPMRC_OK);
--
-+ rpmte p = rpmteNew(ts, h, TR_REMOVED, NULL, NULL);
-+ rpmteSetHeader(p, h);
-+ rc = (rpmteProcess(p, PKG_VERIFY) != RPMRC_OK);
- /* clean up our fake transaction bits */
-+ rpmteFree(p);
- rpmtsEmpty(ts);
- }
-
diff --git a/verifylstatfail.diff b/verifylstatfail.diff
new file mode 100644
index 0000000..d0fd950
--- /dev/null
+++ b/verifylstatfail.diff
@@ -0,0 +1,15 @@
+Tell user the reason why the lstat failed in a verify operation.
+
+--- ./lib/verify.c.orig 2005-12-15 15:17:41.000000000 +0000
++++ ./lib/verify.c 2005-12-15 15:24:48.000000000 +0000
+@@ -327,6 +327,10 @@ static int verifyHeader(QVA_t qva, const
+ (fileAttrs & RPMFILE_README) ? 'r' : ' '),
+ rpmfiFN(fi));
+ te += strlen(te);
++ if ((rc & RPMVERIFY_LSTATFAIL) != 0) {
++ sprintf(te, " (%s)", strerror(errno));
++ te += strlen(te);
++ }
+ ec = rc;
+ }
+ } else if (verifyResult || rpmIsVerbose()) {
diff --git a/waitlock.diff b/waitlock.diff
index 8a811c5..79ae33d 100644
--- a/waitlock.diff
+++ b/waitlock.diff
@@ -1,104 +1,98 @@
Fix global (DB_PRIVATE) lock code: fix recursion counter, retry
failed lock operations for up to 3 minutes.
-
---- ./lib/backend/db3.c.orig 2011-03-02 06:40:10.000000000 +0000
-+++ ./lib/backend/db3.c 2011-05-12 10:24:20.000000000 +0000
-@@ -432,6 +432,8 @@ int dbiVerify(dbiIndex dbi, unsigned int
- return rc;
+--- ./rpmdb/db3.c.orig 2005-03-23 18:15:28.000000000 +0000
++++ ./rpmdb/db3.c 2006-01-27 20:08:29.000000000 +0000
+@@ -759,6 +769,8 @@ assert(db != NULL);
}
+ /*@=mustmod@*/
+static int _lockdbfd = 0;
+
- int dbiClose(dbiIndex dbi, unsigned int flags)
- {
- rpmdb rdb = dbi->dbi_rpmdb;
-@@ -451,6 +453,8 @@ int dbiClose(dbiIndex dbi, unsigned int
+ /*@-moduncon@*/ /* FIX: annotate db3 methods */
+ static int db3close(/*@only@*/ dbiIndex dbi, /*@unused@*/ unsigned int flags)
+ /*@globals rpmGlobalMacroContext, h_errno,
+@@ -818,6 +830,10 @@ static int db3close(/*@only@*/ dbiIndex
- rpmlog(RPMLOG_DEBUG, "closed db index %s/%s\n",
- dbhome, dbi->dbi_file);
-+ if (dbi->dbi_lockdbfd && _lockdbfd)
+ rpmMessage(RPMMESS_DEBUG, _("closed db index %s/%s\n"),
+ dbhome, (dbfile ? dbfile : tagName(dbi->dbi_rpmtag)));
++ if (dbi->dbi_lockdbfd &&
++ !((dbi->dbi_ecflags & DB_CLIENT) && dbi->dbi_host) &&
++ _lockdbfd)
+ _lockdbfd--;
+
}
- xx = db_fini(rdb, dbhome ? dbhome : "");
-@@ -490,6 +494,7 @@ static int dbiFlock(dbiIndex dbi, int mo
- rc = 1;
- } else {
- const char *dbhome = rpmdbHome(dbi->dbi_rpmdb);
-+ int tries;
- struct flock l;
- memset(&l, 0, sizeof(l));
- l.l_whence = 0;
-@@ -499,20 +504,38 @@ static int dbiFlock(dbiIndex dbi, int mo
- ? F_RDLCK : F_WRLCK;
- l.l_pid = 0;
+@@ -1138,8 +1157,6 @@ static int db3open(rpmdb rpmdb, rpmTag r
+ prDbiOpenFlags(oflags, 0), dbi->dbi_mode);
-- rc = fcntl(fdno, F_SETLK, (void *) &l);
-- if (rc) {
-- uint32_t eflags = db_envflags(db);
-- /* Warning iff using non-private CDB locking. */
-- rc = (((eflags & DB_INIT_CDB) && !(eflags & DB_PRIVATE)) ? 0 : 1);
-- rpmlog( (rc ? RPMLOG_ERR : RPMLOG_WARNING),
-- _("cannot get %s lock on %s/%s\n"),
-- ((mode & O_ACCMODE) == O_RDONLY)
-- ? _("shared") : _("exclusive"),
-- dbhome, dbi->dbi_file);
-- } else {
-- rpmlog(RPMLOG_DEBUG,
-- "locked db index %s/%s\n",
-- dbhome, dbi->dbi_file);
-+ for (tries = 0; ; tries++) {
-+ rc = fcntl(fdno, F_SETLK, (void *) &l);
-+ if (rc) {
-+ uint32_t eflags = db_envflags(db);
-+ /* Warning iff using non-private CDB locking. */
-+ rc = (((eflags & DB_INIT_CDB) && !(eflags & DB_PRIVATE)) ? 0 : 1);
-+ if (errno == EAGAIN && rc) {
-+ struct timespec ts;
-+ if (tries == 0)
-+ rpmlog(RPMLOG_WARNING,
-+ _("waiting for %s lock on %s/%s\n"),
-+ ((mode & O_ACCMODE) == O_RDONLY)
-+ ? _("shared") : _("exclusive"),
-+ dbhome, dbi->dbi_file);
-+ ts.tv_sec = (time_t)0;
-+ ts.tv_nsec = 100000000; /* .1 seconds */
-+ if (tries < 10*60*3) { /* 3 minutes */
-+ nanosleep(&ts, (struct timespec *)0);
-+ continue;
-+ }
-+ }
-+ rpmlog( (rc ? RPMLOG_ERR : RPMLOG_WARNING),
-+ _("cannot get %s lock on %s/%s\n"),
-+ ((mode & O_ACCMODE) == O_RDONLY)
-+ ? _("shared") : _("exclusive"),
-+ dbhome, dbi->dbi_file);
-+ } else {
-+ rpmlog(RPMLOG_DEBUG,
-+ "locked db index %s/%s\n",
-+ dbhome, dbi->dbi_file);
-+ }
-+ break;
+ if (rc == 0) {
+- static int _lockdbfd = 0;
+-
+ /*@-moduncon@*/ /* FIX: annotate db3 methods */
+ rc = db_create(&db, dbenv, dbi->dbi_cflags);
+ /*@=moduncon@*/
+@@ -1356,6 +1373,7 @@ static int db3open(rpmdb rpmdb, rpmTag r
+ if (!(db->fd(db, &fdno) == 0 && fdno >= 0)) {
+ rc = 1;
+ } else {
++ int tries;
+ struct flock l;
+ /*@-boundswrite@*/
+ memset(&l, 0, sizeof(l));
+@@ -1367,24 +1385,40 @@ static int db3open(rpmdb rpmdb, rpmTag r
+ ? F_WRLCK : F_RDLCK;
+ l.l_pid = 0;
+
+- rc = fcntl(fdno, F_SETLK, (void *) &l);
+- if (rc) {
+- /* Warning iff using non-private CDB locking. */
+- rc = ((dbi->dbi_use_dbenv &&
+- (dbi->dbi_eflags & DB_INIT_CDB) &&
+- !(dbi->dbi_eflags & DB_PRIVATE))
+- ? 0 : 1);
+- rpmError( (rc ? RPMERR_FLOCK : RPMWARN_FLOCK),
+- _("cannot get %s lock on %s/%s\n"),
+- ((dbi->dbi_mode & (O_RDWR|O_WRONLY))
+- ? _("exclusive") : _("shared")),
+- dbhome, (dbfile ? dbfile : ""));
+- } else if (dbfile) {
+- rpmMessage(RPMMESS_DEBUG,
+- _("locked db index %s/%s\n"),
+- dbhome, dbfile);
++ for (tries = 0; ; tries++) {
++ rc = fcntl(fdno, F_SETLK, (void *) &l);
++ if (rc) {
++ /* Warning iff using non-private CDB locking. */
++ rc = ((dbi->dbi_use_dbenv &&
++ (dbi->dbi_eflags & DB_INIT_CDB) &&
++ !(dbi->dbi_eflags & DB_PRIVATE))
++ ? 0 : 1);
++ if (errno == EAGAIN && rc) {
++ struct timespec ts;
++ if (tries == 0)
++ rpmMessage(RPMMESS_WARNING, _("waiting for %s lock on %s/%s\n"), ((dbi->dbi_mode & (O_RDWR|O_WRONLY)) ? _("exclusive") : _("shared")), dbhome, (dbfile ? dbfile : ""));
++ ts.tv_sec = (time_t)0;
++ ts.tv_nsec = 100000000;
++ if (tries < 10*60*3) {
++ nanosleep(&ts, (struct timespec *)0);
++ continue;
++ }
++ }
++ rpmError( (rc ? RPMERR_FLOCK : RPMWARN_FLOCK),
++ _("cannot get %s lock on %s/%s\n"),
++ ((dbi->dbi_mode & (O_RDWR|O_WRONLY))
++ ? _("exclusive") : _("shared")),
++ dbhome, (dbfile ? dbfile : ""));
++ } else if (dbfile) {
++ rpmMessage(RPMMESS_DEBUG,
++ _("locked db index %s/%s\n"),
++ dbhome, dbfile);
++ }
++ break;
+ }
+ }
++ if (rc && dbi->dbi_use_dbenv)
++ _lockdbfd--;
+ }
}
}
- return rc;
-@@ -529,7 +552,6 @@ int dbiOpen(rpmdb rdb, rpmDbiTagVal rpmt
- DB * db = NULL;
- DBTYPE dbtype = DB_UNKNOWN;
- uint32_t oflags;
-- static int _lockdbfd = 0;
-
- if (dbip)
- *dbip = NULL;
-@@ -603,7 +625,10 @@ int dbiOpen(rpmdb rdb, rpmDbiTagVal rpmt
- dbi->dbi_db = db;
- dbi->dbi_oflags = oflags;
-
-- if (!verifyonly && rc == 0 && dbi->dbi_lockdbfd && _lockdbfd++ == 0) {
-+ if (verifyonly)
-+ dbi->dbi_lockdbfd = 0; /* disable locking in verify mode */
-+
-+ if (rc == 0 && dbi->dbi_lockdbfd && _lockdbfd++ == 0) {
- rc = dbiFlock(dbi, rdb->db_mode);
- }
-
diff --git a/weakdeps.diff b/weakdeps.diff
index f46e0cc..b5ad2b6 100644
--- a/weakdeps.diff
+++ b/weakdeps.diff
@@ -14,18 +14,29 @@ B) use RPMSENSE_STRONG to support a "strong" version, "Recommends"
Needs extcond.diff for query operations.
---- ./build/parsePreamble.c.orig 2011-01-25 13:52:28.000000000 +0000
-+++ ./build/parsePreamble.c 2011-05-11 14:09:07.000000000 +0000
-@@ -310,6 +310,8 @@ static struct tokenBits_s const installS
+Index: build/parsePreamble.c
+===================================================================
+--- build/parsePreamble.c.orig
++++ build/parsePreamble.c
+@@ -129,6 +129,8 @@ static struct tokenBits_s installScriptB
+ { "post", RPMSENSE_SCRIPT_POST },
+ { "rpmlib", RPMSENSE_RPMLIB },
{ "verify", RPMSENSE_SCRIPT_VERIFY },
- { "pretrans", RPMSENSE_PRETRANS },
- { "posttrans", RPMSENSE_POSTTRANS },
-+ { "hint", RPMSENSE_MISSINGOK },
-+ { "strong", RPMSENSE_STRONG },
++ { "hint", RPMSENSE_MISSINGOK },
++ { "strong", RPMSENSE_STRONG },
{ NULL, 0 }
};
-@@ -790,6 +792,18 @@ static int handlePreambleTag(rpmSpec spe
+@@ -140,6 +142,8 @@ static struct tokenBits_s buildScriptBit
+ { "build", RPMSENSE_SCRIPT_BUILD },
+ { "install", RPMSENSE_SCRIPT_INSTALL },
+ { "clean", RPMSENSE_SCRIPT_CLEAN },
++ { "hint", RPMSENSE_MISSINGOK },
++ { "strong", RPMSENSE_STRONG },
+ { NULL, 0 }
+ };
+
+@@ -692,6 +696,18 @@ static int handlePreambleTag(Spec spec,
if ((rc = parseRCPOT(spec, pkg, field, tag, 0, tagflags)))
return rc;
break;
@@ -44,66 +55,66 @@ Needs extcond.diff for query operations.
case RPMTAG_EXCLUDEARCH:
case RPMTAG_EXCLUSIVEARCH:
case RPMTAG_EXCLUDEOS:
-@@ -895,6 +909,14 @@ static struct PreambleRec_s const preamb
- {RPMTAG_BUGURL, 0, 0, LEN_AND_STR("bugurl")},
- {RPMTAG_COLLECTIONS, 0, 0, LEN_AND_STR("collections")},
- {RPMTAG_ORDERFLAGS, 2, 0, LEN_AND_STR("orderwithrequires")},
-+ {RPMTAG_SUGGESTSFLAGS, 0, 0, LEN_AND_STR("recommends")},
-+ {RPMTAG_SUGGESTSFLAGS, 0, 0, LEN_AND_STR("suggests")},
-+ {RPMTAG_ENHANCESFLAGS, 0, 0, LEN_AND_STR("supplements")},
-+ {RPMTAG_ENHANCESFLAGS, 0, 0, LEN_AND_STR("enhances")},
-+ {RPMTAG_BUILDSUGGESTS, 0, 0, LEN_AND_STR("buildrecommends")},
-+ {RPMTAG_BUILDSUGGESTS, 0, 0, LEN_AND_STR("buildsuggests")},
-+ {RPMTAG_BUILDENHANCES, 0, 0, LEN_AND_STR("buildsupplements")},
-+ {RPMTAG_BUILDENHANCES, 0, 0, LEN_AND_STR("buildenhances")},
- {0, 0, 0, 0}
- };
-
---- ./build/parseReqs.c.orig 2010-12-13 14:01:56.000000000 +0000
-+++ ./build/parseReqs.c 2011-05-11 14:16:43.000000000 +0000
-@@ -95,6 +95,20 @@ rpmRC parseRCPOT(rpmSpec spec, Package p
- nametag = RPMTAG_CONFLICTNAME;
+@@ -783,6 +799,14 @@ static struct PreambleRec_s preambleList
+ {RPMTAG_DISTTAG, 0, 0, 0, "disttag"},
+ {RPMTAG_CVSID, 0, 0, 0, "cvsid"},
+ {RPMTAG_SVNID, 0, 0, 0, "svnid"},
++ {RPMTAG_SUGGESTSFLAGS, 0, 0, 0, "recommends"},
++ {RPMTAG_SUGGESTSFLAGS, 0, 0, 0, "suggests"},
++ {RPMTAG_ENHANCESFLAGS, 0, 0, 0, "supplements"},
++ {RPMTAG_ENHANCESFLAGS, 0, 0, 0, "enhances"},
++ {RPMTAG_BUILDSUGGESTS, 0, 0, 0, "buildrecommends"},
++ {RPMTAG_BUILDSUGGESTS, 0, 0, 0, "buildsuggests"},
++ {RPMTAG_BUILDENHANCES, 0, 0, 0, "buildsupplements"},
++ {RPMTAG_BUILDENHANCES, 0, 0, 0, "buildenhances"},
+ /*@-nullassign@*/ /* LCL: can't add null annotation */
+ {0, 0, 0, 0, 0}
+ /*@=nullassign@*/
+Index: build/parseReqs.c
+===================================================================
+--- build/parseReqs.c.orig
++++ build/parseReqs.c
+@@ -81,6 +81,14 @@ int parseRCPOT(Spec spec, Package pkg, c
+ tagflags |= RPMSENSE_ANY;
h = spec->buildRestrictions;
break;
+ case RPMTAG_SUGGESTSFLAGS:
-+ nametag = RPMTAG_SUGGESTSNAME;
-+ break;
+ case RPMTAG_ENHANCESFLAGS:
-+ nametag = RPMTAG_ENHANCESNAME;
++ h = pkg->header;
+ break;
+ case RPMTAG_BUILDSUGGESTS:
-+ nametag = RPMTAG_SUGGESTSNAME;
-+ h = spec->buildRestrictions;
-+ break;
+ case RPMTAG_BUILDENHANCES:
-+ nametag = RPMTAG_ENHANCESNAME;
-+ h = spec->buildRestrictions;
-+ break;
- }
-
- for (r = field; *r != '\0'; r = re) {
---- ./build/reqprov.c.orig 2010-12-13 14:01:56.000000000 +0000
-+++ ./build/reqprov.c 2011-05-11 14:15:02.000000000 +0000
-@@ -75,6 +75,16 @@ int addReqProv(Header h, rpmTagVal tagN,
++ h = spec->buildRestrictions;
++ break;
+ default:
+ case RPMTAG_REQUIREFLAGS:
+ tagflags |= RPMSENSE_ANY;
+Index: build/reqprov.c
+===================================================================
+--- build/reqprov.c.orig
++++ build/reqprov.c
+@@ -48,6 +48,16 @@ int addReqProv(/*@unused@*/ Spec spec, H
+ flagtag = RPMTAG_TRIGGERFLAGS;
indextag = RPMTAG_TRIGGERINDEX;
extra = Flags & RPMSENSE_TRIGGER;
- break;
-+ case RPMTAG_SUGGESTSNAME:
++ } else if (tagN == RPMTAG_SUGGESTSFLAGS || tagN == RPMTAG_BUILDSUGGESTS) {
++ nametag = RPMTAG_SUGGESTSNAME;
+ versiontag = RPMTAG_SUGGESTSVERSION;
+ flagtag = RPMTAG_SUGGESTSFLAGS;
+ extra = Flags & _ALL_REQUIRES_MASK;
-+ break;
-+ case RPMTAG_ENHANCESNAME:
++ } else if (tagN == RPMTAG_ENHANCESFLAGS || tagN == RPMTAG_BUILDENHANCES) {
++ nametag = RPMTAG_ENHANCESNAME;
+ versiontag = RPMTAG_ENHANCESVERSION;
+ flagtag = RPMTAG_ENHANCESFLAGS;
+ extra = Flags & _ALL_REQUIRES_MASK;
-+ break;
- case RPMTAG_REQUIRENAME:
- default:
- tagN = RPMTAG_REQUIRENAME;
---- ./build/rpmfc.c.orig 2011-02-28 09:57:21.000000000 +0000
-+++ ./build/rpmfc.c 2011-05-11 13:58:33.000000000 +0000
-@@ -1075,6 +1075,12 @@ static struct DepMsg_s depMsgs[] = {
+ } else {
+ nametag = RPMTAG_REQUIRENAME;
+ versiontag = RPMTAG_REQUIREVERSION;
+Index: build/rpmfc.c
+===================================================================
+--- build/rpmfc.c.orig
++++ build/rpmfc.c
+@@ -1350,6 +1350,12 @@ static struct DepMsg_s depMsgs[] = {
{ "Obsoletes", { "%{?__find_obsoletes}", NULL, NULL, NULL },
RPMTAG_OBSOLETENAME, RPMTAG_OBSOLETEVERSION, RPMTAG_OBSOLETEFLAGS,
0, -1 },
@@ -116,10 +127,10 @@ Needs extcond.diff for query operations.
{ NULL, { NULL, NULL, NULL, NULL }, 0, 0, 0, 0, 0 }
};
-@@ -1160,6 +1166,14 @@ static rpmRC rpmfcGenerateDependsHelper(
+@@ -1445,6 +1451,14 @@ static int rpmfcGenerateDependsHelper(co
failnonzero = 0;
tagflags = RPMSENSE_FIND_REQUIRES;
- break;
+ /*@switchbreak@*/ break;
+ case RPMTAG_ENHANCESFLAGS:
+ if (!pkg->autoProv)
+ continue;
@@ -127,144 +138,181 @@ Needs extcond.diff for query operations.
+ tagflags = RPMSENSE_FIND_REQUIRES | RPMSENSE_MISSINGOK;
+ if (strcmp(dm->msg, "Supplements") == 0)
+ tagflags |= RPMSENSE_STRONG;
-+ break;
++ /*@switchbreak@*/ break;
default:
continue;
- break;
---- ./lib/formats.c.orig 2011-01-25 13:52:28.000000000 +0000
-+++ ./lib/formats.c 2011-05-11 14:02:09.000000000 +0000
-@@ -560,6 +560,24 @@ static char * depflagsFormat(rpmtd td, c
- return val;
- }
-
-+static char * depflag_strongFormat(rpmtd td, char * formatPrefix)
-+{
-+ char * val = NULL;
-+
-+ if (rpmtdClass(td) != RPM_NUMERIC_CLASS) {
-+ val = xstrdup(_("(not a number)"));
-+ } else {
-+ uint64_t anint = rpmtdGetNumber(td);
-+ char buf[10];
-+ buf[0] = '\0';
-+ if (anint & RPMSENSE_STRONG)
-+ strcat(buf, "strong");
-+ strcat(formatPrefix, "s");
-+ rasprintf(&val, formatPrefix, buf);
-+ }
-+ return val;
-+}
-+
- /**
- * Return tag container array size.
- * @param td tag data container
-@@ -672,6 +690,7 @@ static const struct headerFormatFunc_s r
- { RPMTD_FORMAT_VFLAGS, "vflags", vflagsFormat },
- { RPMTD_FORMAT_EXPAND, "expand", expandFormat },
- { RPMTD_FORMAT_FSTATUS, "fstatus", fstatusFormat },
-+ { RPMTD_FORMAT_DEPFLAG_STRONG, "depflag_strong", depflag_strongFormat },
- { -1, NULL, NULL }
- };
-
---- ./lib/rpmds.c.orig 2011-02-15 13:04:04.000000000 +0000
-+++ ./lib/rpmds.c 2011-05-11 13:58:33.000000000 +0000
-@@ -69,6 +69,10 @@ static int dsType(rpmTagVal tag,
- t = "Trigger";
- evr = RPMTAG_TRIGGERVERSION;
- f = RPMTAG_TRIGGERFLAGS;
-+ } else if (tag == RPMTAG_ENHANCESNAME) {
-+ t = "Enhances";
-+ evr = RPMTAG_ENHANCESVERSION;
-+ f = RPMTAG_ENHANCESFLAGS;
- } else {
- rc = 1;
- }
---- ./lib/rpmds.h.orig 2011-05-11 09:15:33.000000000 +0000
-+++ ./lib/rpmds.h 2011-05-11 14:01:07.000000000 +0000
-@@ -48,7 +48,7 @@ enum rpmsenseFlags_e {
- RPMSENSE_RPMLIB = (1 << 24), /*!< rpmlib(feature) dependency. */
- RPMSENSE_TRIGGERPREIN = (1 << 25), /*!< %triggerprein dependency. */
+ /*@notreached@*/ /*@switchbreak@*/ break;
+Index: lib/rpmlib.h
+===================================================================
+--- lib/rpmlib.h.orig
++++ lib/rpmlib.h
+@@ -541,7 +541,7 @@ typedef enum rpmsenseFlags_e {
+ RPMSENSE_TRIGGERPREIN = (1 << 25), /*!< @todo Implement %triggerprein. */
+ /*@=enummemuse@*/
RPMSENSE_KEYRING = (1 << 26),
-- /* bit 27 unused */
-+ RPMSENSE_STRONG = (1 << 27),
- RPMSENSE_CONFIG = (1 << 28)
- };
-
-@@ -69,6 +69,7 @@ typedef rpmFlags rpmsenseFlags;
+- RPMSENSE_PATCHES = (1 << 27),
++ RPMSENSE_STRONG = (1 << 27),
+ RPMSENSE_CONFIG = (1 << 28),
+ RPMSENSE_PROBE = (1 << 29),
+ RPMSENSE_PACKAGE = (1 << 30)
+@@ -562,6 +562,7 @@ typedef enum rpmsenseFlags_e {
RPMSENSE_SCRIPT_VERIFY | \
RPMSENSE_FIND_REQUIRES | \
RPMSENSE_MISSINGOK | \
+ RPMSENSE_STRONG | \
- RPMSENSE_RPMLIB | \
- RPMSENSE_KEYRING | \
- RPMSENSE_PRETRANS | \
---- ./lib/rpmtag.h.orig 2010-12-13 14:01:56.000000000 +0000
-+++ ./lib/rpmtag.h 2011-05-11 13:58:33.000000000 +0000
-@@ -217,14 +217,14 @@ typedef enum rpmTag_e {
- RPMTAG_PRETRANSPROG = 1153, /* s */
- RPMTAG_POSTTRANSPROG = 1154, /* s */
- RPMTAG_DISTTAG = 1155, /* s */
-- RPMTAG_SUGGESTSNAME = 1156, /* s[] extension (unimplemented) */
--#define RPMTAG_SUGGESTS RPMTAG_SUGGESTSNAME /* s[] (unimplemented) */
-- RPMTAG_SUGGESTSVERSION = 1157, /* s[] extension (unimplemented) */
-- RPMTAG_SUGGESTSFLAGS = 1158, /* i[] extension (unimplemented) */
-- RPMTAG_ENHANCESNAME = 1159, /* s[] extension placeholder (unimplemented) */
--#define RPMTAG_ENHANCES RPMTAG_ENHANCESNAME /* s[] (unimplemented) */
-- RPMTAG_ENHANCESVERSION = 1160, /* s[] extension placeholder (unimplemented) */
-- RPMTAG_ENHANCESFLAGS = 1161, /* i[] extension placeholder (unimplemented) */
-+ RPMTAG_SUGGESTSNAME = 1156, /* s[] extension */
-+#define RPMTAG_SUGGESTS RPMTAG_SUGGESTSNAME /* s[] */
-+ RPMTAG_SUGGESTSVERSION = 1157, /* s[] extension */
-+ RPMTAG_SUGGESTSFLAGS = 1158, /* i[] extension */
-+ RPMTAG_ENHANCESNAME = 1159, /* s[] extension */
-+#define RPMTAG_ENHANCES RPMTAG_ENHANCESNAME /* s[] */
-+ RPMTAG_ENHANCESVERSION = 1160, /* s[] extension */
-+ RPMTAG_ENHANCESFLAGS = 1161, /* i[] extension */
- RPMTAG_PRIORITY = 1162, /* i[] extension placeholder (unimplemented) */
- RPMTAG_CVSID = 1163, /* s (unimplemented) */
- #define RPMTAG_SVNID RPMTAG_CVSID /* s (unimplemented) */
---- ./lib/rpmtd.h.orig 2010-12-03 12:11:57.000000000 +0000
-+++ ./lib/rpmtd.h 2011-05-11 14:00:06.000000000 +0000
-@@ -220,6 +220,7 @@ typedef enum rpmtdFormats_e {
- RPMTD_FORMAT_VFLAGS = 17, /* file verify flags (int types) */
- RPMTD_FORMAT_EXPAND = 18, /* macro expansion (string types) */
- RPMTD_FORMAT_FSTATUS = 19, /* file verify status (int types) */
-+ RPMTD_FORMAT_DEPFLAG_STRONG = 20, /* strong dependency (int types) */
- } rpmtdFormats;
-
- /** \ingroup rpmtd
---- ./python/rpmmodule.c.orig 2010-12-03 12:11:57.000000000 +0000
-+++ ./python/rpmmodule.c 2011-05-11 14:19:37.000000000 +0000
-@@ -376,6 +376,7 @@ static int initModule(PyObject *m)
+ RPMSENSE_SCRIPT_PREP | \
+ RPMSENSE_SCRIPT_BUILD | \
+ RPMSENSE_SCRIPT_INSTALL | \
+Index: python/rpmmodule.c
+===================================================================
+--- python/rpmmodule.c.orig
++++ python/rpmmodule.c
+@@ -354,7 +354,7 @@ void init_rpm(void)
REGISTER_ENUM(RPMSENSE_RPMLIB);
REGISTER_ENUM(RPMSENSE_TRIGGERPREIN);
REGISTER_ENUM(RPMSENSE_KEYRING);
+- REGISTER_ENUM(RPMSENSE_PATCHES);
+ REGISTER_ENUM(RPMSENSE_STRONG);
REGISTER_ENUM(RPMSENSE_CONFIG);
REGISTER_ENUM(RPMTRANS_FLAG_TEST);
---- ./rpmpopt.in.orig 2011-01-11 07:04:51.000000000 +0000
-+++ ./rpmpopt.in 2011-05-11 14:18:47.000000000 +0000
-@@ -65,6 +65,22 @@ rpm alias --requires --qf \
+Index: lib/rpmds.c
+===================================================================
+--- lib/rpmds.c.orig
++++ lib/rpmds.c
+@@ -320,6 +320,11 @@ rpmds rpmdsNew(Header h, rpmTag tagN, in
+ tagEVR = RPMTAG_TRIGGERVERSION;
+ tagF = RPMTAG_TRIGGERFLAGS;
+ } else
++ if (tagN == RPMTAG_ENHANCESNAME) {
++ Type = "Enhances";
++ tagEVR = RPMTAG_ENHANCESVERSION;
++ tagF = RPMTAG_ENHANCESFLAGS;
++ } else
+ goto exit;
+
+ /*@-branchstate@*/
+Index: rpmpopt.in
+===================================================================
+--- rpmpopt.in.orig
++++ rpmpopt.in
+@@ -60,6 +60,22 @@ rpm alias --requires --qf \
--POPTdesc=$"list capabilities required by package(s)"
rpm alias -R --requires
-+rpm alias --suggests --qf \
++rpm alias --suggests --qf \
+ "[%|SUGGESTSFLAGS:depflag_strong?{}:{%{SUGGESTSNAME} %{SUGGESTSFLAGS:depflags} %{SUGGESTSVERSION}\n}|]" \
+ --POPTdesc=$"list capabilities this package suggests"
+
-+rpm alias --recommends --qf \
++rpm alias --recommends --qf \
+ "[%|SUGGESTSFLAGS:depflag_strong?{%{SUGGESTSNAME} %{SUGGESTSFLAGS:depflags} %{SUGGESTSVERSION}\n}|]" \
+ --POPTdesc=$"list capabilities this package recommends"
+
-+rpm alias --enhances --qf \
++rpm alias --enhances --qf \
+ "[%|ENHANCESFLAGS:depflag_strong?{}:{%{ENHANCESNAME} %{ENHANCESFLAGS:depflags} %{ENHANCESVERSION}\n}|]" \
+ --POPTdesc=$"list capabilities this package enhances"
+
-+rpm alias --supplements --qf \
++rpm alias --supplements --qf \
+ "[%|ENHANCESFLAGS:depflag_strong?{%{ENHANCESNAME} %{ENHANCESFLAGS:depflags} %{ENHANCESVERSION}\n}|]" \
+ --POPTdesc=$"list capabilities this package supplements"
+
- rpm alias --info --qf '\
- Name : %{NAME}\n\
- %|EPOCH?{Epoch : %{EPOCH}\n}|\
+ rpm alias --info --qf 'Name : %-27{NAME} Relocations: %|PREFIXES?{[%{PREFIXES} ]}:{(not relocatable)}|\n\
+ Version : %-27{VERSION} Vendor: %{VENDOR}\n\
+ Release : %-27{RELEASE} Build Date: %{BUILDTIME:date}\n\
+@@ -340,6 +356,22 @@ rpmq alias --requires --qf \
+ --POPTdesc=$"list capabilities required by package(s)"
+ rpmq alias -R --requires
+
++rpmq alias --suggests --qf \
++ "[%|SUGGESTSFLAGS:depflag_strong?{}:{%{SUGGESTSNAME} %{SUGGESTSFLAGS:depflags} %{SUGGESTSVERSION}\n}|]" \
++ --POPTdesc=$"list capabilities this package suggests"
++
++rpmq alias --recommends --qf \
++ "[%|SUGGESTSFLAGS:depflag_strong?{%{SUGGESTSNAME} %{SUGGESTSFLAGS:depflags} %{SUGGESTSVERSION}\n}|]" \
++ --POPTdesc=$"list capabilities this package recommends"
++
++rpmq alias --enhances --qf \
++ "[%|ENHANCESFLAGS:depflag_strong?{}:{%{ENHANCESNAME} %{ENHANCESFLAGS:depflags} %{ENHANCESVERSION}\n}|]" \
++ --POPTdesc=$"list capabilities this package enhances"
++
++rpmq alias --supplements --qf \
++ "[%|ENHANCESFLAGS:depflag_strong?{%{ENHANCESNAME} %{ENHANCESFLAGS:depflags} %{ENHANCESVERSION}\n}|]" \
++ --POPTdesc=$"list capabilities this package supplements"
++
+ rpmq alias --info --qf 'Name : %-27{NAME} Relocations: %|PREFIXES?{[%{PREFIXES} ]}:{(not relocatable)}|\n\
+ Version : %-27{VERSION} Vendor: %{VENDOR}\n\
+ Release : %-27{RELEASE} Build Date: %{BUILDTIME:date}\n\
+@@ -438,6 +470,22 @@ rpmquery alias --requires --qf \
+ --POPTdesc=$"list capabilities required by package(s)"
+ rpmquery alias -R --requires
+
++rpmquery alias --suggests --qf \
++ "[%|SUGGESTSFLAGS:depflag_strong?{}:{%{SUGGESTSNAME} %{SUGGESTSFLAGS:depflags} %{SUGGESTSVERSION}\n}|]" \
++ --POPTdesc=$"list capabilities this package suggests"
++
++rpmquery alias --recommends --qf \
++ "[%|SUGGESTSFLAGS:depflag_strong?{%{SUGGESTSNAME} %{SUGGESTSFLAGS:depflags} %{SUGGESTSVERSION}\n}|]" \
++ --POPTdesc=$"list capabilities this package recommends"
++
++rpmquery alias --enhances --qf \
++ "[%|ENHANCESFLAGS:depflag_strong?{}:{%{ENHANCESNAME} %{ENHANCESFLAGS:depflags} %{ENHANCESVERSION}\n}|]" \
++ --POPTdesc=$"list capabilities this package enhances"
++
++rpmquery alias --supplements --qf \
++ "[%|ENHANCESFLAGS:depflag_strong?{%{ENHANCESNAME} %{ENHANCESFLAGS:depflags} %{ENHANCESVERSION}\n}|]" \
++ --POPTdesc=$"list capabilities this package supplements"
++
+ rpmquery alias --info --qf 'Name : %-27{NAME} Relocations: %|PREFIXES?{[%{PREFIXES} ]}:{(not relocatable)}|\n\
+ Version : %-27{VERSION} Vendor: %{VENDOR}\n\
+ Release : %-27{RELEASE} Build Date: %{BUILDTIME:date}\n\
+Index: lib/formats.c
+===================================================================
+--- lib/formats.c.orig
++++ lib/formats.c
+@@ -652,6 +652,38 @@ static /*@only@*/ char * depflagsFormat(
+ return val;
+ }
+
++static /*@only@*/ char * depflag_strongFormat(int_32 type, const void * data,
++ char * formatPrefix, int padding, /*@unused@*/ int element)
++ /*@modifies formatPrefix @*/
++ /*@requires maxRead(data) >= 0 @*/
++{
++ char * val;
++ char buf[10];
++ int anint;
++
++ if (type != RPM_INT32_TYPE) {
++ val = xstrdup(_("(not a number)"));
++ } else {
++ anint = *((int_32 *) data);
++ buf[0] = '\0';
++
++/*@-boundswrite@*/
++ if (anint & RPMSENSE_STRONG)
++ strcat(buf, "strong");
++/*@=boundswrite@*/
++
++ val = xmalloc(7 + padding);
++/*@-boundswrite@*/
++ strcat(formatPrefix, "s");
++/*@=boundswrite@*/
++ /*@-formatconst@*/
++ sprintf(val, formatPrefix, buf);
++ /*@=formatconst@*/
++ }
++
++ return val;
++}
++
+ /**
+ * Retrieve mounted file system paths.
+ * @param h header
+@@ -1344,6 +1376,7 @@ const struct headerSprintfExtension_s rp
+ { HEADER_EXT_FORMAT, "base64", { base64Format } },
+ { HEADER_EXT_FORMAT, "pgpsig", { pgpsigFormat } },
+ { HEADER_EXT_FORMAT, "depflags", { depflagsFormat } },
++ { HEADER_EXT_FORMAT, "depflag_strong", { depflag_strongFormat } },
+ { HEADER_EXT_FORMAT, "fflags", { fflagsFormat } },
+ { HEADER_EXT_FORMAT, "perms", { permsFormat } },
+ { HEADER_EXT_FORMAT, "permissions", { permsFormat } },
diff --git a/whatrequires-doc.diff b/whatrequires-doc.diff
deleted file mode 100644
index 96cf15f..0000000
--- a/whatrequires-doc.diff
+++ /dev/null
@@ -1,14 +0,0 @@
---- ./doc/rpm.8.orig 2011-01-05 08:11:09.000000000 +0000
-+++ ./doc/rpm.8 2011-05-11 15:36:18.000000000 +0000
-@@ -564,6 +564,11 @@ Query all packages that provide the \fIC
- .TP
- \fB--whatrequires \fICAPABILITY\fB\fR
- Query all packages that require \fICAPABILITY\fR for proper functioning.
-+.br
-+Note that this does not return what requires a given package.
-+A package usually provides multiple capabilities and file-names on which
-+other packages may depend. To see the complete dependencies
-+for a package, use \fB-e --test \fIPACKAGE_NAME\fB\fR
- .SS "PACKAGE QUERY OPTIONS:"
- .PP
- .TP