SHA256
3
0
forked from pool/rpm
OBS User unknown 2006-12-18 23:17:44 +00:00 committed by Git OBS Bridge
commit 3c349e9165
100 changed files with 10986 additions and 0 deletions

23
.gitattributes vendored Normal file
View File

@ -0,0 +1,23 @@
## Default LFS
*.7z filter=lfs diff=lfs merge=lfs -text
*.bsp filter=lfs diff=lfs merge=lfs -text
*.bz2 filter=lfs diff=lfs merge=lfs -text
*.gem filter=lfs diff=lfs merge=lfs -text
*.gz filter=lfs diff=lfs merge=lfs -text
*.jar filter=lfs diff=lfs merge=lfs -text
*.lz filter=lfs diff=lfs merge=lfs -text
*.lzma filter=lfs diff=lfs merge=lfs -text
*.obscpio filter=lfs diff=lfs merge=lfs -text
*.oxt filter=lfs diff=lfs merge=lfs -text
*.pdf filter=lfs diff=lfs merge=lfs -text
*.png filter=lfs diff=lfs merge=lfs -text
*.rpm filter=lfs diff=lfs merge=lfs -text
*.tbz filter=lfs diff=lfs merge=lfs -text
*.tbz2 filter=lfs diff=lfs merge=lfs -text
*.tgz filter=lfs diff=lfs merge=lfs -text
*.ttf filter=lfs diff=lfs merge=lfs -text
*.txz filter=lfs diff=lfs merge=lfs -text
*.whl filter=lfs diff=lfs merge=lfs -text
*.xz filter=lfs diff=lfs merge=lfs -text
*.zip filter=lfs diff=lfs merge=lfs -text
*.zst filter=lfs diff=lfs merge=lfs -text

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
.osc

3
RPM-Changes.html.tar.bz2 Normal file
View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:1b1d6954ea1c3fd4681d1419dbbae6907fac09ac9e8ea8cd33b08e930873e4c2
size 9527

3
RPM-HOWTO.tar.bz2 Normal file
View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:3a1341b0686afa37681ccf2ebacc25bfec0ae96c5f05b4bcf5840d14fd9a29f0
size 18681

3
RPM-Tips.html.tar.bz2 Normal file
View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:20f81d1ea9e4c64dddba197d8717f9e2d082814c806f722280d3ea34854c728a
size 3206

16
aloffbyone.diff Normal file
View File

@ -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++)
{

262
autodeps.diff Normal file
View File

@ -0,0 +1,262 @@
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.
+IFS=$'\n'
+filelist=($(cat))
-filelist=`sed "s/['\"]/\\\&/g"`
-
-solist=$(echo $filelist | grep "\\.so" | grep -v "^/lib/ld.so" | \
- xargs file -L 2>/dev/null | grep "ELF.*shared object" | cut -d: -f1)
+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=
tcllist=
+monolist=($(printf "%s\n" "${filelist[@]}" | egrep "\\.(exe|dll)\$"))
#
# --- Alpha does not mark 64bit dependencies
case `uname -m` in
- alpha*) mark64="" ;;
- *) mark64="()(64bit)" ;;
+ alpha*) mark64=false ;;
+ *) mark64=true ;;
esac
#
# --- Library sonames and weak symbol versions (from glibc).
-for f in $solist; do
- soname=$(objdump -p $f | awk '/SONAME/ {print $2}')
+for f in "${solist[@]}"; do
+ soname=$(objdump -p "$f" | awk '/SONAME/ {print $2}')
+ [ -n "$soname" -a -L "$f" ] && continue
+ [ -z "$soname" ] && soname="${f##*/}"
- lib64=`if file -L $f 2>/dev/null | \
- grep "ELF 64-bit" >/dev/null; then echo "$mark64"; fi`
- if [ "$soname" != "" ]; then
- if [ ! -L $f ]; then
- echo $soname$lib64
- objdump -p $f | awk '
- BEGIN { START=0 ; }
- /Version definitions:/ { START=1; }
- /^[0-9]/ && (START==1) { print $4; }
- /^$/ { START=0; }
- ' | \
- grep -v $soname | \
- while read symbol ; do
- echo "$soname($symbol)`echo $lib64 | sed 's/()//'`"
- done
- fi
+ if $mark64 && file -L "$f" 2>/dev/null | grep "ELF 64-bit" >/dev/null; then
+ lib64="()(64bit)" slib64="(64bit)"
else
- echo ${f##*/}$lib64
+ lib64= slib64=
fi
+ echo "$soname$lib64"
+ objdump -p "$f" | awk '
+ BEGIN { START=0 ; }
+ /Version definitions:/ { START=1; }
+ /^[0-9]/ && (START==1) { print $4; }
+ /^$/ { START=0; }
+ ' | \
+ while read symbol ; do
+ echo "$soname($symbol)$slib64"
+ done
done | sort -u
#
# --- Perl modules.
[ -x /usr/lib/rpm/perl.prov ] &&
- echo $filelist | tr '[:blank:]' \\n | grep '\.pm$' | /usr/lib/rpm/perl.prov | sort -u
+ printf "%s\n" "${filelist[@]}" | grep '\.pm$' | /usr/lib/rpm/perl.prov | sort -u
#
# --- Python modules.
[ -x /usr/lib/rpm/python.prov -a -n "$pythonlist" ] &&
- echo $pythonlist | tr '[:blank:]' \\n | /usr/lib/rpm/python.prov | sort -u
+ printf "%s\n" "${pythonlist[@]}" | /usr/lib/rpm/python.prov | sort -u
#
# --- Tcl modules.
[ -x /usr/lib/rpm/tcl.prov -a -n "$tcllist" ] &&
- echo $tcllist | tr '[:blank:]' \\n | /usr/lib/rpm/tcl.prov | sort -u
+ printf "%s\n" "${tcllist[@]}" | /usr/lib/rpm/tcl.prov | sort -u
+
+#
+# --- Mono exes/dlls
+: ${MONO_PREFIX=/usr}
+[ -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
+[ -x /usr/lib/rpm/find-provides.ksyms ] &&
+ printf "%s\n" "${filelist[@]}" | /usr/lib/rpm/find-provides.ksyms "$@"
exit 0
--- ./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 | egrep -v ":.* (commands|script) " | \
- grep ":.*executable" | cut -d: -f1`
-scriptlist=`echo $filelist | xargs -r file | \
- 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) " | \
+ grep ":.*executable" | cut -d: -f1))
+scriptlist=($(printf "%s\0" "${filelist[@]}" | xargs -0 -r file | \
+ 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=()
+monolist=($(printf "%s\n" "${filelist[@]}" | egrep "\\.(exe|dll)\$"))
#
# --- Alpha does not mark 64bit dependencies
@@ -42,12 +46,12 @@ esac
if [ "$needed" -eq 0 ]; then
#
# --- Executable dependency sonames.
- for f in $exelist; do
- [ -r $f -a -x $f ] || continue
- lib64=`if file -L $f 2>/dev/null | \
+ for f in "${exelist[@]}"; do
+ [ -r "$f" -a -x "$f" ] || continue
+ lib64=`if file -L "$f" 2>/dev/null | \
grep "ELF 64-bit" >/dev/null; then echo "$mark64"; fi`
- ldd $f | awk '/=>/ {
- if ($1 !~ /libNoVersion.so/ && $1 !~ /4[um]lib.so/ && $1 !~ /libredhat-kernel.so/) {
+ ldd "$f" | awk '/=>/ {
+ if ($1 !~ /libNoVersion.so/ && $1 !~ /4[um]lib.so/ && $1 !~ /linux-gate.so/) {
gsub(/'\''"/,"\\&",$1);
printf "%s'$lib64'\n", $1
}
@@ -56,12 +60,12 @@ if [ "$needed" -eq 0 ]; then
#
# --- Library dependency sonames.
- for f in $liblist; do
- [ -r $f ] || continue
- lib64=`if file -L $f 2>/dev/null | \
+ for f in "${liblist[@]}"; do
+ [ -r "$f" ] || continue
+ lib64=`if file -L "$f" 2>/dev/null | \
grep "ELF 64-bit" >/dev/null; then echo "$mark64"; fi`
- ldd $f | awk '/=>/ {
- if ($1 !~ /libNoVersion.so/ && $1 !~ /4[um]lib.so/ && $1 !~ /libredhat-kernel.so/) {
+ ldd "$f" | awk '/=>/ {
+ if ($1 !~ /libNoVersion.so/ && $1 !~ /4[um]lib.so/ && $1 !~ /linux-gate.so/) {
gsub(/'\''"/,"\\&",$1);
printf "%s'$lib64'\n", $1
}
@@ -71,30 +75,30 @@ fi
#
# --- Script interpreters.
-for f in $scriptlist; do
- [ -r $f -a -x $f ] || continue
- interp=`head -n 1 $f | sed -e 's/^\#\![ ]*//' | cut -d" " -f1`
- interplist="$interplist $interp"
+for f in "${scriptlist[@]}"; do
+ [ -r "$f" -a -x "$f" ] || continue
+ interp=`head -n 1 "$f" | sed -ne 's/^\#\![ ]*//p' | cut -d" " -f1`
+ interplist=("${interplist[@]}" "$interp")
case $interp in
- */perl) perllist="$perllist $f" ;;
+ */perl) perllist=("${perllist[@]}" "$f") ;;
esac
done
-[ -n "$interplist" ] && { echo "$interplist" | tr '[:blank:]' \\n | sort -u ; }
+[ -n "$interplist" ] && { printf "%s\n" "${interplist[@]}" | sort -u ; }
#
# --- Add perl module files to perllist.
-for f in $filelist; do
- [ -r $f -a "${f%.pm}" != "${f}" ] && perllist="$perllist $f"
+for f in "${filelist[@]}"; do
+ [ -r "$f" -a "${f%.pm}" != "${f}" ] && perllist=("${perllist[@]}" "$f")
done
#
# --- Weak symbol versions (from glibc).
[ -n "$mark64" ] && mark64="(64bit)"
-for f in $liblist $exelist ; do
- [ -r $f ] || continue
- lib64=`if file -L $f 2>/dev/null | \
+for f in "${liblist[@]}" "${exelist[@]}" ; do
+ [ -r "$f" ] || continue
+ lib64=`if file -L "$f" 2>/dev/null | \
grep "ELF 64-bit" >/dev/null; then echo "$mark64"; fi`
- objdump -p $f | awk 'BEGIN { START=0; LIBNAME=""; needed='$needed'; }
+ objdump -p "$f" | awk 'BEGIN { START=0; LIBNAME=""; needed='$needed'; }
/^$/ { START=0; }
/^Dynamic Section:$/ { START=1; }
(START==1) && /NEEDED/ {
@@ -110,7 +114,7 @@ for f in $liblist $exelist ; do
sub(/:/, "", $3);
LIBNAME=$3;
}
- (START==2) && (LIBNAME!="") && ($4!="") && (($4~/^GLIBC_*/) || ($4~/^GCC_*/)) {
+ (START==2) && (LIBNAME!="") && ($4!="") {
print LIBNAME "(" $4 ")'$lib64'";
}
'
@@ -118,17 +122,28 @@ done | sort -u
#
# --- Perl modules.
-[ -x /usr/lib/rpm/perl.req -a -n "$perllist" ] && \
- echo $perllist | tr '[:blank:]' \\n | /usr/lib/rpm/perl.req | sort -u
+#[ -x /usr/lib/rpm/perl.req -a -n "$perllist" ] && \
+# printf "%s\n" "${perllist[@]}" | /usr/lib/rpm/perl.req | sort -u
#
# --- Python modules.
[ -x /usr/lib/rpm/python.req -a -n "$pythonlist" ] && \
- echo $pythonlist | tr '[:blank:]' \\n | /usr/lib/rpm/python.req | sort -u
+ printf "%s\n" "${pythonlist[@]}" | /usr/lib/rpm/python.req | sort -u
#
# --- Tcl modules.
[ -x /usr/lib/rpm/tcl.req -a -n "$tcllist" ] && \
- echo $tcllist | tr '[:blank:]' \\n | /usr/lib/rpm/tcl.req | sort -u
+ printf "%s\n" "${tcllist[@]}" | /usr/lib/rpm/tcl.req | sort -u
+
+#
+# --- Mono exes/dlls
+: ${MONO_PREFIX=/usr}
+[ -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
+[ -x ${0%/*}/find-requires.ksyms ] &&
+ printf "%s\n" "${filelist[@]}" | ${0%/*}/find-requires.ksyms "$@"
exit 0

17
badforsyntax.diff Normal file
View File

@ -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;

46
beecrypt-4.1.2.diff Normal file
View File

@ -0,0 +1,46 @@
--- beecrypt-4.1.2/Makefile.am.orig 2004-12-22 07:06:31.000000000 +0000
+++ beecrypt-4.1.2/Makefile.am 2006-11-24 14:08:27.000000000 +0000
@@ -49,7 +49,7 @@ libaltdir=$(prefix)/lib@LIBALT@
libalt_LTLIBRARIES = libbeecrypt.la
-libbeecrypt_la_SOURCES = aes.c base64.c beecrypt.c blockmode.c blockpad.c blowfish.c dhaes.c dldp.c dlkp.c dlpk.c dlsvdp-dh.c dsa.c elgamal.c endianness.c entropy.c fips186.c hmac.c hmacmd5.c hmacsha1.c hmacsha256.c md5.c hmacsha384.c hmacsha512.c memchunk.c mp.c mpbarrett.c mpnumber.c mpprime.c mtprng.c pkcs1.c pkcs12.c rsa.c rsakp.c rsapk.c sha1.c sha256.c sha384.c sha512.c sha_k.c timestamp.c cppglue.cxx
+libbeecrypt_la_SOURCES = aes.c base64.c beecrypt.c blockmode.c blockpad.c blowfish.c dhaes.c dldp.c dlkp.c dlpk.c dlsvdp-dh.c dsa.c elgamal.c endianness.c entropy.c fips186.c hmac.c hmacmd5.c hmacsha1.c hmacsha256.c md5.c hmacsha384.c hmacsha512.c memchunk.c mp.c mpbarrett.c mpnumber.c mpprime.c mtprng.c pkcs1.c pkcs12.c rsa.c rsakp.c rsapk.c sha1.c sha256.c sha384.c sha512.c sha_k.c timestamp.c
libbeecrypt_la_DEPENDENCIES = $(BEECRYPT_OBJECTS)
libbeecrypt_la_LIBADD = aesopt.lo blowfishopt.lo mpopt.lo sha1opt.lo
libbeecrypt_la_LDFLAGS = -no-undefined -version-info $(LIBBEECRYPT_LT_CURRENT):$(LIBBEECRYPT_LT_REVISION):$(LIBBEECRYPT_LT_AGE)
@@ -62,5 +62,11 @@ EXTRA_DIST = BENCHMARKS BUGS CONTRIBUTOR
DISTCLEANFILES = mpopt.s aesopt.s blowfishopt.s sha1opt.s
+BUILT_SOURCES = listobjs
+
+.PHONY: listobjs
+listobjs:
+ @echo $(libbeecrypt_la_OBJECTS) $(libbeecrypt_la_LIBADD) > $@
+
bench:
(cd tests && $(MAKE) $(AM_MAKEFLAGS) bench)
--- beecrypt-4.1.2/base64.c.orig 2004-12-19 20:21:04.000000000 +0000
+++ beecrypt-4.1.2/base64.c 2006-11-24 14:08:27.000000000 +0000
@@ -253,7 +253,6 @@ char* b64encode(const void* data, size_t
unsigned c;
if (s == NULL) return NULL;
- if (*s == '\0') return calloc(1, sizeof(*t));
if (ns == 0) ns = strlen((const char*) s);
nt = ((ns + 2) / 3) * 4;
--- beecrypt-4.1.2/c++/io/DataOutputStream.cxx.orig 2004-11-04 12:38:15.000000000 +0000
+++ beecrypt-4.1.2/c++/io/DataOutputStream.cxx 2006-11-24 14:09:35.000000000 +0000
@@ -126,8 +126,8 @@ void DataOutputStream::writeLong(javalon
void DataOutputStream::writeChar(javaint v) throw (IOException)
{
_lock.lock();
- out.write((v >> 8) && 0xff);
- out.write((v ) && 0xff);
+ out.write((v >> 8) & 0xff);
+ out.write((v ) & 0xff);
written += 2;
_lock.unlock();
}

3
beecrypt-4.1.2.tar.bz2 Normal file
View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:67ef64715912e978b426ad514567e189039016b9f04d52783865a2dafb27b578
size 563414

263
brp.diff Normal file
View File

@ -0,0 +1,263 @@
SUSE specific brp script patches
--- ./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
+# 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"
+# If using normal root, avoid changing anything:
+if [ -z "$RPM_BUILD_ROOT" -o "$RPM_BUILD_ROOT" = "/" ]; then
+ exit 0
+fi
+files=
+tfiles=
+LC_ALL=
+LANG=
+# check for 64-bit libs in */lib
+for p in `grep -v 'lib64' /etc/ld.so.conf`
+do
+ if test -d $RPM_BUILD_ROOT$p ; then
+ for f in `find $RPM_BUILD_ROOT$p \
+ -maxdepth 1 -type f -name \*.so\* -o -name \*.a -follow 2>/dev/null`
+ do
+ [ $HOSTTYPE = s390x ] && case $f in */lib/ld64.so.1) continue; esac
+ objdump -f $f 2>/dev/null | grep 'format elf64' \
+ && { echo "$f: should be in */lib64"; exit 1; }
+
+ done
+ fi
+done
+
+# check for 64 bit libs that have an rpath to a 32 bit Library
+
+for p in `grep 'lib64' /etc/ld.so.conf`
+do
+ if test -d $RPM_BUILD_ROOT$p ; then
+ for f in `find $RPM_BUILD_ROOT$p \
+ -maxdepth 1 -type f -name \*.so\* -o -name \*.a -follow 2>/dev/null`
+ do
+ # check for rpath to 32bit libs
+ objdump -x $f 2>/dev/null | grep -v "lib64" | grep -i 'rpath.*lib$' \
+ && { echo "$f: rpath to 32bit lib"; exit 1; }
+ done
+ fi
+done
+exit 0
--- ./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" | \
+ grep -v ' shared object,' | \
+ 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 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" || :
done
--- ./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
+# relink symbolic links so that:
+# links crossing top level directory boundaries (/usr/* -> /etc/*)
+# are absolute links
+# links below one top level directory (/usr/bin/* -> /usr/lib/*)
+# are relative links
+# NOTE: we're not doing this to fix a problem (as no matter how you
+# do it you fix one problem by creating another). We're doing it
+# so we can document this as policy - so you can rely on it
+
+# Additional Task: check some usual errors arround symlinks e.g.
+# dangling symlinks or symlinks to init scripts in wrong location
+
+# Author: Stephan Kulow <coolo@suse.de>
+
+# If using normal root, avoid changing anything.
+if [ -z "$RPM_BUILD_ROOT" ]; then
+ exit 0
+fi
+
+LC_ALL=
+LANG=
+LC_TIME=POSIX
+
+BASENAME=/usr/bin/basename
+DIRNAME=/usr/bin/dirname
+READLINK=/usr/bin/readlink
+
+cd $RPM_BUILD_ROOT
+
+had_errors=0
+
+links=`find . -type l | sed -e "s,^./,/,"`
+for link in $links
+do
+ link_dest=`$READLINK ./$link`
+ orig_link_dest=$link_dest
+
+ new_link_dest=NONE
+ link_dir=`$DIRNAME $link`
+
+ case $link_dest in
+ .|..|../..) # link to current dir
+ continue ;;
+ .*) # relative links up
+ link_dest="$link_dir/$link_dest"
+ ;;
+ /*) # absolute links
+ ;;
+ */*) # relative links down
+ link_dest="$link_dir/$link_dest"
+ ;;
+ *) # the rest
+ continue
+ esac
+
+ # cleaning out double slash
+ link_dest=`echo $link_dest | sed -e 's,//*,/,g; s,/\.$,/,; s,/$,,'`
+
+ # eliminating /./ components
+ link_dest=`echo $link_dest | sed -e "s,/\./,/,g"`;
+
+ counter=0
+ # eliminating back references
+ while echo $link_dest | egrep -q '/\.\.'; do
+ link_dest=`echo $link_dest | sed -e "s,/[^/]*/\.\.,,"`;
+ case $link_dest in
+ /..*) # this is very mean
+ echo "ERROR: $link points to illegal $link_dest"
+ exit 1
+ ;;
+ esac
+ counter=$((counter + 1))
+ if test $counter -gt 10; then
+ echo "ERROR: more than 10 back references in $link?"
+ exit 1
+ fi
+ done
+
+ # black list
+ case "$link,$link_dest" in
+ *,/var/lib/named*)
+ continue;;
+ /usr/etc,*|/usr/tmp,*)
+ continue;;
+ */share/texmf/*|/usr/share/terminfo/*)
+ continue;;
+ *share/automake-*)
+ echo "ERROR: link target $link points into automake directory"
+ echo " You might want to add a -c to the automake call (or just"
+ echo " skip the files from packaging)"
+ exit 1
+ ;;
+ *,/opt/kde3/share/doc/HTML/*/common) # white listed for not existant
+ ;;
+ *,/proc/*) # links pointing into /proc file system
+ ;;
+ *)
+ if test ! -L ./$link_dest && test ! -e $link_dest && test ! -e ./$link_dest; then
+ echo "ERROR: link target doesn't exist (neither in build root nor in installed system):"
+ echo " $link -> $link_dest"
+ echo "Add the package providing the target to neededforbuild and Requires"
+ test "$NO_BRP_STALE_LINK_ERROR" != "yes" && had_errors=1
+ fi
+ ;;
+ esac
+
+ forced_absolute=0
+ for prefix in /usr/X11R6/lib/X11 /usr/X11R6/include/X11 /usr/X11R6/lib/X11/app-defaults ; do
+ if echo $link | grep -q "^$prefix/"; then
+ if echo $link_dest | grep -q "^$prefix/"; then
+ # if it's below it, it's fine
+ :
+ else
+ forced_absolute=1
+ fi
+ fi
+ done
+
+ dest_dir=`$DIRNAME $link_dest`
+
+ # figuring out (currently) correct destination
+ if test "$link_dir" = "$dest_dir" || test "$dest_dir" = "."; then
+ new_link_dest=`$BASENAME $link_dest`
+ else
+ # figuring out top level directory
+ top_link=`echo $link | sed -e 's,^\(/[^/]*\)/.*,\1,'`
+ top_dest=`echo $link_dest | sed -e 's,^\(/[^/]*\)/.*,\1,'`
+ if test "$forced_absolute" = 0 && test "$top_link" = "$top_dest"; then # supposed to be relative
+
+ # first we need to cut out the common prefix
+ link_tmp=$link
+ while test "$top_link" = "$top_dest"; do
+ link_orig=$link_tmp
+ dest_orig=$link_dest
+ link_tmp=`echo $link_tmp | sed -e 's,^\(/[^/]*\)/,/,'`
+ link_dest=`echo $link_dest | sed -e 's,^\(/[^/]*\)/,/,'`
+ top_link=`echo $link_tmp | sed -e 's,^\(/[^/]*\)/.*,\1,'`
+ top_dest=`echo $link_dest | sed -e 's,^\(/[^/]*\)/.*,\1,'`
+
+ if test "$top_dest" = "$dest_orig" || test "$top_link" = "$link_orig"; then
+ link_tmp=$link_orig
+ link_dest=$dest_orig
+ break
+ fi
+ done
+
+ # now we add a .. for every directory component
+ link_tmp=`$DIRNAME $link_tmp`
+
+ if test "$link_tmp" = "$link_dest"; then
+ new_link_dest=.
+ elif test "$link_tmp" != "/"; then # we have a directory component
+ link_rel=
+
+ while test -n "$link_tmp"; do
+ link_tmp=`echo $link_tmp | sed -e 's,^\(/[^/]*\),,'`
+ link_rel="../$link_rel"
+ done
+
+ new_link_dest=`echo $link_rel/$link_dest | sed -e "s,//*,/,g"`
+ else
+ # get rid of the slash
+ link_dest=`echo $link_dest | sed -e 's,^/,,'`
+ new_link_dest=$link_dest
+ fi
+ else
+ new_link_dest=$link_dest
+ fi
+ fi
+
+ if test "$new_link_dest" != NONE && test "$new_link_dest" != "$orig_link_dest"; then
+ echo "INFO: relinking $link -> $new_link_dest (was $orig_link_dest)"
+ rm ./$link && ln -s $new_link_dest ./$link
+ fi
+done
+
+if test "$had_errors" = 1; then
+ exit 1
+fi

56
brpcombress.diff Normal file
View File

@ -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

574
build.diff Normal file
View File

@ -0,0 +1,574 @@
Many changes to Makefiles/autogen and the like to make it build
on SUSE systems.
Index: Makefile.am
===================================================================
--- Makefile.am.orig
+++ Makefile.am
@@ -15,7 +15,7 @@ EXTRA_DIST = CHANGES CREDITS Doxyheader
po/*.in po/*.po po/rpm.pot \
rpm.magic rpmpopt-$(VERSION) rpmqv.c rpm.c
-SUBDIRS = intl po misc @WITH_ZLIB_SUBDIR@ @WITH_ELFUTILS_SUBDIR@ @WITH_MAGIC_SUBDIR@ @WITH_DB_SUBDIR@ @WITH_SQLITE3_SUBDIR@ @WITH_POPT_SUBDIR@ @WITH_BEECRYPT_SUBDIR@ @WITH_NEON_SUBDIR@ lua rpmio rpmdb lib build @WITH_PYTHON_SUBDIR@ tools scripts tests doc .
+SUBDIRS = intl po misc @WITH_ZLIB_SUBDIR@ @WITH_ELFUTILS_SUBDIR@ @WITH_MAGIC_SUBDIR@ @WITH_DB_SUBDIR@ @WITH_SQLITE3_SUBDIR@ @WITH_POPT_SUBDIR@ beecrypt @WITH_NEON_SUBDIR@ @WITH_LUA_SUBDIR@ rpmio rpmdb lib build @WITH_PYTHON_SUBDIR@ tools scripts tests doc .
INCLUDES = \
-I$(top_srcdir)/build \
Index: autogen.sh
===================================================================
--- autogen.sh.orig
+++ autogen.sh
@@ -26,12 +26,12 @@ case $libtoolize in
esac
esac
-[ "`$libtoolize --version | head -1`" != "$LTV" ] && echo "$USAGE" && exit 1
-[ "`autoconf --version | head -1`" != "$ACV" ] && echo "$USAGE" && exit 1
-[ "`automake --version | head -1 | sed -e 's/1\.4[a-z]/1.4/'`" != "$AMV" ] && echo "$USAGE" # && exit 1
+#[ "`$libtoolize --version | head -1`" != "$LTV" ] && echo "$USAGE" && exit 1
+#[ "`autoconf --version | head -1`" != "$ACV" ] && echo "$USAGE" && exit 1
+#[ "`automake --version | head -1 | sed -e 's/1\.4[a-z]/1.4/'`" != "$AMV" ] && echo "$USAGE" # && exit 1
myopts=
-if [ X"$@" = X -a "X`uname -s`" = "XDarwin" -a -d /opt/local ]; then
+if [ X"$*" = X -a "X`uname -s`" = "XDarwin" -a -d /opt/local ]; then
export myopts="--prefix=/usr --disable-nls"
export CPPFLAGS="-I${myprefix}/include"
fi
@@ -43,7 +43,8 @@ if [ -d zlib ]; then
(echo "--- zlib"; cd zlib; ./autogen.sh --noconfigure "$@")
fi
if [ -d beecrypt ]; then
- (echo "--- beecrypt"; cd beecrypt; ./autogen.sh --noconfigure "$@")
+ #(echo "--- beecrypt"; cd beecrypt; ./autogen.sh --noconfigure "$@")
+ (echo "--- beecrypt"; cd beecrypt; ./autogen.sh --without-cplusplus --without-java --without-python "$@")
fi
if [ -d elfutils ]; then
(echo "--- elfutils"; cd elfutils; ./autogen.sh --noconfigure "$@")
@@ -54,6 +55,7 @@ fi
if [ -d neon ]; then
(echo "--- neon"; cd neon; ./autogen.sh "$@")
fi
+(echo "--- db"; cd db/dist; libtoolize --copy --force ; cp /usr/share/aclocal/libtool.m4 aclocal/libtool.ac ; ./s_config )
echo "--- rpm"
$libtoolize --copy --force
@@ -66,7 +68,7 @@ if [ "$1" = "--noconfigure" ]; then
exit 0;
fi
-if [ X"$@" = X -a "X`uname -s`" = "XLinux" ]; then
+if [ X"$*" = X -a "X`uname -s`" = "XLinux" ]; then
if [ -d /usr/share/man ]; then
mandir=/usr/share/man
infodir=/usr/share/info
Index: build/Makefile.am
===================================================================
--- build/Makefile.am.orig
+++ build/Makefile.am
@@ -22,7 +22,7 @@ pkgincdir = $(pkgincludedir)
pkginc_HEADERS = rpmbuild.h rpmfc.h rpmfile.h rpmspec.h
noinst_HEADERS = buildio.h
-LDFLAGS = -L$(RPM_BUILD_ROOT)$(usrlibdir) -L$(DESTDIR)$(usrlibdir)
+LDFLAGS =
usrlibdir = $(libdir)@MARK64@
usrlib_LTLIBRARIES = librpmbuild.la
Index: configure.ac
===================================================================
--- configure.ac.orig
+++ configure.ac
@@ -1,30 +1,3 @@
-
-echo "
-****************************************************************************
-* *
-* *** WARNING WARNING WARNING *** *
-* *
-* This is source code from the development branch of rpm-4.4.2. *
-* *
-* If you want the "production" rpm-4.3.3 code, then you should use a *
-* rpm-4.3.3 src.rpm. Alternatively, if using a CVS checkout, do *
-* the following: *
-* *
-* cvs -d :pserver:anonymous@cvs.rpm.org:/cvs/devel login *
-* (no password, just carriage return) *
-* cvs -d :pserver:anonymous@cvs.rpm.org:/cvs/devel get rpm *
-* cd rpm *
-* *
-* Here's the rpm-4_3 branch, latest is rpm-4.3.3: *
-* cvs up -r rpm-4_3 *
-* *
-* Here's the rpm-4_2 branch, latest is rpm-4.2.3: *
-* cvs up -r rpm-4_2 *
-* *
-****************************************************************************
-"
-sleep 10
-
AC_PREREQ(2.59)
AC_INIT(rpm, 4.4.2, rpm-devel@lists.dulug.duke.edu)
AC_CANONICAL_TARGET
@@ -34,10 +7,9 @@ AM_CONFIG_HEADER([config.h])
AM_INIT_AUTOMAKE([foreign])
dnl Set of available languages.
-ALL_LINGUAS="cs da de fi fr gl is ja ko no pl pt pt_BR ro ru sk sl sr sv tr"
+ALL_LINGUAS="cs da de fi fr gl is ja ko nb pl pt pt_BR ro ru sk sl sr sv tr"
dnl Checks for programs.
-AC_PROG_CXX
AC_PROG_AWK
AC_PROG_CC
AC_PROG_CPP
@@ -310,7 +282,7 @@ WITH_ZLIB_INCLUDE=
WITH_ZLIB_LIB=
if test -d zlib ; then
WITH_ZLIB_SUBDIR=zlib
- addlib \${top_builddir}/zlib
+ # addlib \${top_builddir}/zlib
WITH_ZLIB_INCLUDE="-I\${top_srcdir}/${WITH_ZLIB_SUBDIR}"
INCPATH="$INCPATH -I\${top_srcdir}/${WITH_ZLIB_SUBDIR}"
WITH_ZLIB_LIB="\${top_builddir}/${WITH_ZLIB_SUBDIR}/libz.la"
@@ -350,9 +322,9 @@ AC_SUBST(WITH_BZIP2)
localdone=
dirs=$prefix
-if test "$cross_compiling" != "yes"; then
- dirs="$dirs /usr/local"
-fi
+#if test "$cross_compiling" != "yes"; then
+# dirs="$dirs /usr/local"
+#fi
for dir in $dirs
do
case $dir in
@@ -463,7 +435,7 @@ AC_CHECK_HEADER([gelf.h], [
AC_DEFINE(HAVE_LIBELF, 1, [Define to 1 if you have the 'elf' library (-lelf).])
WITH_ELFUTILS_SUBDIR=elfutils
WITH_LIBELF_INCLUDE="-I\${top_srcdir}/${WITH_ELFUTILS_SUBDIR}/libelf"
- WITH_LIBELF_LIB="\${top_builddir}/${WITH_ELFUTILS_SUBDIR}/libelf/libelf.a"
+ WITH_LIBELF_LIB="\${top_builddir}/${WITH_ELFUTILS_SUBDIR}/libelf/libelf_pic.a"
fi
])
AC_SUBST(WITH_ELFUTILS_SUBDIR)
@@ -504,7 +476,8 @@ AC_CHECK_HEADER([beecrypt/beecrypt.h], [
AC_DEFINE(HAVE_LIBBEECRYPT, 1, [Define to 1 if you have the 'beecrypt' library (-lbeecrypt).])
WITH_BEECRYPT_SUBDIR=beecrypt
WITH_BEECRYPT_INCLUDE="-I\${top_srcdir}/${WITH_BEECRYPT_SUBDIR}"
- WITH_BEECRYPT_LIB="\${top_builddir}/${WITH_BEECRYPT_SUBDIR}/libbeecrypt.la"
+ dnl WITH_BEECRYPT_LIB="\${top_builddir}/${WITH_BEECRYPT_SUBDIR}/libbeecrypt.la"
+ AC_DEFINE(HAVE_BEECRYPT_API_H, 1, [Define to 1 if you have the <beecrypt/api.h> header file.])
fi
])
AC_SUBST(WITH_BEECRYPT_SUBDIR)
@@ -648,6 +621,9 @@ dnl AmigaOS and IXEmul have a fork() dum
esac
AM_GNU_GETTEXT
+AM_GNU_GETTEXT_VERSION(0.11.2)
+MKINSTALLDIRS="\$(top_builddir)/./mkinstalldirs"
+AC_SUBST(MKINSTALLDIRS)
dnl TVM:
dnl horrible *temporary* hack to make sure that if we found gettext() in
dnl -lintl that we add -lintl *back* to $LIBS.
@@ -943,54 +919,74 @@ withval=auto
AC_ARG_WITH(python, [ --with-python build rpm python bindings ])
WITH_PYTHON_VERSION=$withval
-if test $withval = auto ; then
+if test "$WITH_PYTHON_VERSION" = auto ; then
+AC_MSG_CHECKING(for python 2.5)
+AC_RUN_IFELSE([AC_LANG_SOURCE([[
+#include <python2.5/Python.h>
+main() {
+ exit(strncmp("2.5", PY_VERSION, 3));
+} ]])],[withval=yes],[withval=no],[withval=yes])
+AC_MSG_RESULT($withval)
+if test $withval = yes ; then
+ WITH_PYTHON_VERSION="2.5"
+fi
+fi
+
+if test "$WITH_PYTHON_VERSION" = auto ; then
AC_MSG_CHECKING(for python 2.4)
AC_RUN_IFELSE([AC_LANG_SOURCE([[
#include <python2.4/Python.h>
main() {
exit(strncmp("2.4", PY_VERSION, 3));
} ]])],[withval=yes],[withval=no],[withval=yes])
- AC_MSG_RESULT($withval)
- if test $withval = yes ; then
- WITH_PYTHON_VERSION="2.4"
- else
-
- AC_MSG_CHECKING(for python 2.3)
- AC_RUN_IFELSE([AC_LANG_SOURCE([[
- #include <python2.3/Python.h>
- main() {
- exit(strncmp("2.3", PY_VERSION, 3));
- } ]])],[withval=yes],[withval=no],[withval=yes])
- AC_MSG_RESULT($withval)
- if test $withval = yes ; then
- WITH_PYTHON_VERSION="2.3"
- else
-
- AC_MSG_CHECKING(for python 2.2)
- AC_RUN_IFELSE([AC_LANG_SOURCE([[
- #include <python2.2/Python.h>
- main() {
- exit(strncmp("2.2", PY_VERSION, 3));
- } ]])],[withval=yes],[withval=no],[withval=yes])
- AC_MSG_RESULT($withval)
- if test $withval = yes ; then
- WITH_PYTHON_VERSION="2.2"
- else
-
- AC_MSG_CHECKING(for python 1.5.2)
- AC_RUN_IFELSE([AC_LANG_SOURCE([[
- #include <python1.5/Python.h>
- main() {
- exit(strcmp("1.5.2", PY_VERSION));
- } ]])],[withval=yes],[withval=no],[withval=yes])
- AC_MSG_RESULT($withval)
- if test $withval = yes ; then
- WITH_PYTHON_VERSION="1.5"
- fi
- fi
- fi
- fi
+AC_MSG_RESULT($withval)
+if test $withval = yes ; then
+ WITH_PYTHON_VERSION="2.4"
+fi
+fi
+
+if test "$WITH_PYTHON_VERSION" = auto ; then
+AC_MSG_CHECKING(for python 2.3)
+AC_RUN_IFELSE([AC_LANG_SOURCE([[
+#include <python2.3/Python.h>
+main() {
+ exit(strncmp("2.3", PY_VERSION, 3));
+} ]])],[withval=yes],[withval=no],[withval=yes])
+AC_MSG_RESULT($withval)
+if test $withval = yes ; then
+ WITH_PYTHON_VERSION="2.3"
+fi
+fi
+
+if test "$WITH_PYTHON_VERSION" = auto ; then
+AC_MSG_CHECKING(for python 2.2)
+AC_RUN_IFELSE([AC_LANG_SOURCE([[
+#include <python2.2/Python.h>
+main() {
+ exit(strncmp("2.2", PY_VERSION, 3));
+} ]])],[withval=yes],[withval=no],[withval=yes])
+AC_MSG_RESULT($withval)
+if test $withval = yes ; then
+ WITH_PYTHON_VERSION="2.2"
+fi
+fi
+
+if test "$WITH_PYTHON_VERSION" = auto ; then
+AC_MSG_CHECKING(for python 1.5.2)
+AC_RUN_IFELSE([AC_LANG_SOURCE([[
+#include <python1.5/Python.h>
+main() {
+ exit(strcmp("1.5.2", PY_VERSION));
+} ]])],[withval=yes],[withval=no],[withval=yes])
+AC_MSG_RESULT($withval)
+if test $withval = yes ; then
+ WITH_PYTHON_VERSION="1.5"
+fi
+fi
+
+if test "$WITH_PYTHON_VERSION" = auto ; then
+ WITH_PYTHON_VERSION=no
fi
if test "$WITH_PYTHON_VERSION" != no ; then
@@ -1283,6 +1279,7 @@ arm*) RPMCANONCOLOR=0; RPMCANONARCH="${
mipsel*) RPMCANONCOLOR=0; RPMCANONARCH=mipsel ;;
mips*) RPMCANONCOLOR=0; RPMCANONARCH=mips ;;
m68k*) RPMCANONCOLOR=0; RPMCANONARCH=m68k ;;
+parisc*|hppa*) RPMCANONCOLOR=0; RPMCANONARCH=hppa ;;
*) RPMCANONCOLOR=0; RPMCANONARCH=unknown ;;
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)
+unknown|pc|ibm|redhat|pld|mandrake|conectiva|lvr|yellowdog|caos|suse)
test -f /etc/redhat-release && RPMCANONVENDOR=redhat
test -f /etc/pld-release && RPMCANONVENDOR=pld
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="$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%--cache-file=.*$%%'`"
-CC="$CC" CFLAGS="$CFLAGS" $db_dist/configure $ARGS \
- --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\
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
if [ -n "$MULTILIBNO" ]; then
@@ -96,6 +96,9 @@ for SUBST in $SUBSTS ; do
apple)
VENDORSED='-e s,^@apple@,,'
;;
+ suse)
+ VENDORSED='-e s,^@SuSE@,,'
+ ;;
esac
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

24
buildsubdir.diff Normal file
View File

@ -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);

16
checkfilesnoinfodir.diff Normal file
View File

@ -0,0 +1,16 @@
Exclude /usr/share/info/dir from check-files. Probably only
interesting for SUSE.
--- ./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
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"
+ fi
done
rm -f $FILES_DISK

26
chownwarn.diff Normal file
View File

@ -0,0 +1,26 @@
Warn the user if chown/fchown fails.
--- ./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 && (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 && (stage & FSM_SYSCALL))
rpmMessage(RPMMESS_DEBUG, " %8s (%s, %d, %d) %s\n", cur,
fsm->path, (int)st->st_uid, (int)st->st_gid,

31
compress.diff Normal file
View File

@ -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@*/

35
convertdb1static.diff Normal file
View File

@ -0,0 +1,35 @@
Build convertdb1 as static binary so that it always works.
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 @@
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@ \

111
db.diff Normal file
View File

@ -0,0 +1,111 @@
--- 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);
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_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);
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 */
u_int32_t flags;
};
--- 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(dbenv, dbmp);
- else
+ else if (!dbmfp->mfp || !F_ISSET(dbmfp->mfp, MP_NOFSYNC))
ret = __os_fsync(dbenv, 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)
dbenv = dbmp->dbenv;
+ if (F_ISSET(mfp, MP_NOFSYNC))
+ return 0;
+
/*
* Expects caller to be holding the region lock: we're using the path
* name and __memp_nameop might try and rename the file.
--- 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])

54
dbfsync.diff Normal file
View File

@ -0,0 +1,54 @@
Support a database-local fsync setting. Needs berkeley db patch.
--- ./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
static int db3_fsync_disable(/*@unused@*/ int fd)
/*@*/
{
return 0;
}
+#endif
#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 },
{ "fcntl_locking",0,POPT_BIT_SET, &db3dbi.dbi_oflags, DB_FCNTL_LOCKING,
NULL, NULL },
+ { "nofsync", 0,POPT_BIT_SET, &db3dbi.dbi_oflags, DB_NOFSYNC,
+ NULL, NULL },
{ "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,

14
dbprivate.diff Normal file
View File

@ -0,0 +1,14 @@
Always use DB_PRIVATE. Should probably be configured instead.
--- ./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
+ /* 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 ... */

57
dbrointerruptable.diff Normal file
View File

@ -0,0 +1,57 @@
Do not block signals if the database is opened read-only, it jst
annoys the users. [#48026]
--- ./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;
if (db == NULL)
goto exit;
+ dbmode = db->db_mode;
(void) rpmdbUnlink(db, "rpmdbClose");
/*@-usereleased@*/
@@ -886,12 +915,14 @@ int rpmdbClose(rpmdb db)
/*@-refcounttrans@*/ db = _free(db); /*@=refcounttrans@*/
/*@=usereleased@*/
+ if ((dbmode & (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);
+ }
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;
- (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;

52
debugedit.diff Normal file
View File

@ -0,0 +1,52 @@
Make debugedit build without dwarf.h. Also fixes a logic bug for ppc.
--- ./tools/debugedit.c.orig 2005-12-15 14:28:49.000000000 +0000
+++ ./tools/debugedit.c 2006-03-17 13:01:53.000000000 +0000
@@ -34,7 +34,37 @@
#include <popt.h>
#include <gelf.h>
-#include <dwarf.h>
+
+
+/* some defines taken from the dwarf standard */
+
+#define DW_TAG_compile_unit 0x11
+
+#define DW_AT_name 0x03
+#define DW_AT_stmt_list 0x10
+#define DW_AT_comp_dir 0x1b
+
+#define DW_FORM_addr 0x01
+#define DW_FORM_block2 0x03
+#define DW_FORM_block4 0x04
+#define DW_FORM_data2 0x05
+#define DW_FORM_data4 0x06
+#define DW_FORM_data8 0x07
+#define DW_FORM_string 0x08
+#define DW_FORM_block 0x09
+#define DW_FORM_block1 0x0a
+#define DW_FORM_data1 0x0b
+#define DW_FORM_flag 0x0c
+#define DW_FORM_sdata 0x0d
+#define DW_FORM_strp 0x0e
+#define DW_FORM_udata 0x0f
+#define DW_FORM_ref_addr 0x10
+#define DW_FORM_ref1 0x11
+#define DW_FORM_ref2 0x12
+#define DW_FORM_ref4 0x13
+#define DW_FORM_ref8 0x14
+#define DW_FORM_ref_udata 0x15
+#define DW_FORM_indirect 0x16
#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:

23
diskspace.diff Normal file
View File

@ -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);

36
docdir_fmt.diff Normal file
View File

@ -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);
}

151
elfutils-0.97.diff Normal file
View File

@ -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

3
elfutils-0.97.tar.bz2 Normal file
View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:105115416927f1498abecd7741af0d178a31a2bc780b3ab935b78bac48bac342
size 216798

16
emptyfilelist.diff Normal file
View File

@ -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';

16
erasebadreturn.diff Normal file
View File

@ -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. */

28
eraseignoresize.diff Normal file
View File

@ -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"));

21
eraseordered.diff Normal file
View File

@ -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));

15
exitstatus.diff Normal file
View File

@ -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++;

78
extcond.diff Normal file
View File

@ -0,0 +1,78 @@
This patch supports an extension in the condition evaluation.
If the condition is a format and returns an nonempty string, it is
assumed to be true.
This mechanism is used by the weakdeps patch to filter the
"RPMSENSE_STRONG" flag.
--- ./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;
+ token->u.cond.tag.type = NULL;
+ token->u.cond.tag.format = "";
token->type = PTOK_COND;
+ if ((token->u.cond.tag.type = strchr(str, ':')) != 0)
+ *token->u.cond.tag.type++ = 0;
(void) findTag(hsa, token, str);
return 0;
@@ -3239,6 +3243,7 @@ static char * singleSprintf(headerSprint
int_32 type;
int_32 count;
sprintfToken spft;
+ sprintfTag stag;
int condNumFormats;
size_t need;
@@ -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) {
+ /* check if format creates output */
+ size_t vallen = hsa->vallen;
+ formatValue(hsa, &token->u.cond.tag, element);
+ if (hsa->vallen == vallen) {
+ spft = token->u.cond.elseFormat;
+ condNumFormats = token->u.cond.numElseTokens;
+ } else {
+ hsa->vallen = vallen;
+ hsa->val[hsa->vallen] = 0;
+ }
+ }
} else {
spft = token->u.cond.elseFormat;
condNumFormats = token->u.cond.numElseTokens;
@@ -3291,19 +3308,22 @@ static char * singleSprintf(headerSprint
spft = token->u.array.format;
for (i = 0; i < token->u.array.numTokens; i++, spft++)
{
- 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->arrayCount || stag->justOne)
+ 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@*/
}

12
filenonull.diff Normal file
View File

@ -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

14
filequery.diff Normal file
View File

@ -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);
}

102
finddebuginfo.diff Normal file
View File

@ -0,0 +1,102 @@
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
-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
@@ -25,6 +34,8 @@ do
[ -f "${debugfn}" ] && continue
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"
# A binary already copied into /usr/lib/debug doesn't get stripped,
@@ -34,19 +45,56 @@ do
esac
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
+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
-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

114
findfplistexclude.diff Normal file
View File

@ -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);
}

90
findksyms.diff Normal file
View File

@ -0,0 +1,90 @@
SUSE specific kernel provides/requires scripts
Index: scripts/find-provides.ksyms
===================================================================
--- /dev/null
+++ scripts/find-provides.ksyms
@@ -0,0 +1,20 @@
+#! /bin/sh
+
+IFS=$'\n'
+
+case "$1" in
+kernel-module-*) ;; # Fedora kernel module package names start with
+ # kernel-module.
+kernel*) is_kernel_package=1 ;;
+esac
+
+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
Index: scripts/find-requires.ksyms
===================================================================
--- /dev/null
+++ scripts/find-requires.ksyms
@@ -0,0 +1,58 @@
+#! /bin/bash
+
+IFS=$'\n'
+
+case "$1" in
+kernel-module-*) ;; # Fedora kernel module package names start with
+ # kernel-module.
+kernel*) is_kernel_package=1 ;;
+esac
+
+all_provides() {
+ for module in "$@"; do
+ nm "$module"
+ done \
+ | sed -r -ne 's:^0*([0-9a-f]+) A __crc_(.+):\1\t\2:p' \
+ | sort -k2 -u
+}
+
+all_requires() {
+ for module in "$@"; do
+ set -- $(/sbin/modinfo -F vermagic "$module" | sed -e 's: .*::' -e q)
+ 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 -k2 -u
+}
+
+if ! [ -z "$is_kernel_package" -a -e /sbin/modinfo -a -e /sbin/modprobe ]; then
+ cat > /dev/null
+ exit 0
+fi
+
+modules=($(grep -E '/lib/modules/.+\.ko$'))
+if [ ${#modules[@]} -gt 0 ]; then
+ symset_table=$(mktemp -t ${0##*/}.XXXXX)
+ /usr/lib/rpm/symset-table | sort > $symset_table
+
+ join -t $'\t' -j 1 -a 2 $symset_table <(
+ # Filter out requirements that we fulfill ourself.
+ join -t $'\t' -j 2 -v 1 \
+ <(all_requires "${modules[@]}") \
+ <(all_provides "${modules[@]}") \
+ | awk '
+ BEGIN { FS = "\t" ; OFS = "\t" }
+ { print $3 "/" $2 "/" $1 }
+ ' \
+ | sort -u) \
+ | sort -u \
+ | awk '
+ { FS = "\t" ; OFS = "\t" }
+ NF == 3 { print "kernel(" $2 ") = " $3
+ next }
+ { split($1, arr, "/")
+ print "ksym(" arr[3] ") = " arr[2] }
+ '
+fi

119
findlang.diff Normal file
View File

@ -0,0 +1,119 @@
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).
Additional options:
- --with-gnome find GNOME help files
- --with-kde find KDE help files
+ --without-gnome find GNOME help files
+ --without-kde find KDE help files
--all-name match all package/domain names
--without-mo not find locales files
EOF
@@ -52,8 +52,8 @@ else NAME=$1
fi
shift
-GNOME=#
-KDE=#
+GNOME=
+KDE=
MO=
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
;;
- --with-kde )
- KDE=
+ --without-kde )
+ KDE=#
shift
;;
--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
+fi
+
+MO_NAME_NEW=$MO_NAME.tmp.$$
+rm -f $MO_NAME_NEW
+
+find $TOP_DIR -type f -o -type l|sed '
s:'"$TOP_DIR"'::
'"$ALL_NAME$MO"'s:\(.*/share/locale/\)\([^/_]\+\)\(.*\.mo$\):%lang(\2) \1\2\3:
'"$NO_ALL_NAME$MO"'s:\(.*/share/locale/\)\([^/_]\+\)\(.*/'"$NAME"'\.mo$\):%lang(\2) \1\2\3:
s:^\([^%].*\)::
s:%lang(C) ::
-/^$/d' > $MO_NAME
+/^ *$/d' >> $MO_NAME_NEW
+
+find $TOP_DIR -type f -o -type l|sed '
+s:'"$TOP_DIR"'::
+/\/share\/locale\//d
+'"$ALL_NAME$MO"'s:\(.*/locale/\)\([^/_]\+\)\([^/]*\)\(.*\)/LC_MESSAGES/.*\.mo$:%lang(\2) %doc \1\2\3\4:
+'"$NO_ALL_NAME$MO"'s:\(.*/locale/\)\([^/_]\+\)\([^/]*\)\(.*\)/LC_MESSAGES/'"$NAME"'\.mo$:%lang(\2) %doc \1\2\3\4:
+s:^\([^%].*\)::
+s:%lang(C) ::
+/^ *$/d' >> $MO_NAME_NEW
find $TOP_DIR -type d|sed '
s:'"$TOP_DIR"'::
-'"$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:
-'"$ALL_NAME$GNOME"'s:\(.*/gnome/help/[a-zA-Z0-9.\_\-]\+$\):%dir \1:
+'"$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:
+'"$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:^\([^%].*\)::
s:%lang(C) ::
-/^$/d' >> $MO_NAME
+/^ *$/d' >> $MO_NAME_NEW
find $TOP_DIR -type d|sed '
s:'"$TOP_DIR"'::
@@ -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
-if ! grep -q / $MO_NAME; 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
exit 0

40
forkfailed.diff Normal file
View File

@ -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]);

30
getcwdresult.diff Normal file
View File

@ -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;

17
ghost.diff Normal file
View File

@ -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@*/

18
globlstat.diff Normal file
View File

@ -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;

13
globoffbyone.diff Normal file
View File

@ -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;

25
initdbret.diff Normal file
View File

@ -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:

16
legacyprereq.diff Normal file
View File

@ -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. */

225
localetag.diff Normal file
View File

@ -0,0 +1,225 @@
Convert changelog and i18n header elements to current locale.
[#43347], rh#140050
Already in rpm-4.4.7
--- ./lib/formats.c.orig 2005-01-26 04:46:54.000000000 +0000
+++ ./lib/formats.c 2006-03-17 15:27:06.000000000 +0000
@@ -2,6 +2,7 @@
* \file lib/formats.c
*/
+#include <wchar.h>
#include "system.h"
#include "rpmio_internal.h"
#include <rpmlib.h>
@@ -18,6 +19,114 @@
/*@access pgpDig @*/
/*@access pgpDigParams @*/
+static const char * strtolocale(const char *str)
+{
+ wchar_t *wstr, *wp;
+ const unsigned char *cp;
+ char *cc;
+ int state = 0;
+ int c;
+ int ccl, cca, mb_cur_max;
+ size_t l;
+ mbstate_t ps;
+ int strisutf8 = 1;
+ int locisutf8 = 1;
+
+ if (!str)
+ return 0;
+ if (!*str)
+ return str;
+ wstr = (wchar_t *)xmalloc((strlen(str) + 1) * sizeof(*wstr));
+ wp = wstr;
+ cp = (const unsigned char *)str;
+ while ((c = *cp++) != 0) {
+ if (state) {
+ if ((c & 0xc0) != 0x80) {
+ /* encoding error */
+ break;
+ }
+ c = (c & 0x3f) | (state << 6);
+ if (!(state & 0x40000000)) {
+ /* check for overlong sequences */
+ if ((c & 0x820823e0) == 0x80000000)
+ c = 0xfdffffff;
+ else if ((c & 0x020821f0) == 0x02000000)
+ c = 0xfff7ffff;
+ else if ((c & 0x000820f8) == 0x00080000)
+ c = 0xffffd000;
+ else if ((c & 0x0000207c) == 0x00002000)
+ c = 0xffffff70;
+ }
+ } else {
+ /* new sequence */
+ if (c >= 0xfe)
+ c = 0xfffd;
+ else if (c >= 0xfc)
+ c = (c & 0x01) | 0xbffffffc; /* 5 bytes to follow */
+ else if (c >= 0xf8)
+ c = (c & 0x03) | 0xbfffff00; /* 4 */
+ else if (c >= 0xf0)
+ c = (c & 0x07) | 0xbfffc000; /* 3 */
+ else if (c >= 0xe0)
+ c = (c & 0x0f) | 0xbff00000; /* 2 */
+ else if (c >= 0xc2)
+ c = (c & 0x1f) | 0xfc000000; /* 1 */
+ else if (c >= 0xc0)
+ c = 0xfdffffff; /* overlong */
+ else if (c >= 0x80)
+ c = 0xfffd;
+ }
+ state = (c & 0x80000000) ? c : 0;
+ if (state)
+ continue;
+ *wp++ = (wchar_t)c;
+ }
+ if (state) {
+ /* encoding error, assume latin1 */
+ strisutf8 = 0;
+ cp = (const unsigned char *)str;
+ wp = wstr;
+ while ((c = *cp++) != 0) {
+ *wp++ = (wchar_t)c;
+ }
+ }
+ *wp = 0;
+ mb_cur_max = MB_CUR_MAX;
+ memset(&ps, 0, sizeof(ps));
+ cc = xmalloc(mb_cur_max);
+ /* test locale encoding */
+ if (wcrtomb(cc, 0x20ac, &ps) != 3 || memcmp(cc, "\342\202\254", 3))
+ locisutf8 = 0;
+ if (locisutf8 == strisutf8) {
+ wstr = _free(wstr);
+ return str;
+ }
+ str = _free(str);
+ memset(&ps, 0, sizeof(ps));
+ ccl = cca = 0;
+ for (wp = wstr; ; wp++) {
+ l = wcrtomb(cc + ccl, *wp, &ps);
+ if (*wp == 0)
+ break;
+ if (l == (size_t)-1) {
+ if (*wp < (wchar_t)256 && mbsinit(&ps)) {
+ cc[ccl] = *wp;
+ l = 1;
+ } else
+ l = wcrtomb(cc + ccl, (wchar_t)'?', &ps);
+ }
+ if (l == 0 || l == (size_t)-1)
+ continue;
+ ccl += l;
+ if (ccl > cca) {
+ cca = ccl + 16;
+ cc = xrealloc(cc, cca + mb_cur_max);
+ }
+ }
+ wstr = _free(wstr);
+ return (const char *)cc;
+}
+
/**
* Identify type of trigger.
* @param type tag type
@@ -1077,6 +1220,7 @@ static int i18nTag(Header h, int_32 tag,
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, int_32 tag, /*@out@*/ rpmTagType * type,
+ /*@out@*/ const void ** data, /*@out@*/ int_32 * count,
+ /*@out@*/ int * freeData)
+{
+ 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;
+ }
+ 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 *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, /*@out@*/ rpmTagType * type,
+ /*@out@*/ const void ** data, /*@out@*/ int_32 * count,
+ /*@out@*/ int * freeData)
+{
+ return localeTag(h, RPMTAG_CHANGELOGNAME, type, data, count, freeData);
+}
+
+static int changelogtextTag(Header h, /*@out@*/ rpmTagType * type,
+ /*@out@*/ const void ** data, /*@out@*/ int_32 * count,
+ /*@out@*/ int * freeData)
+{
+ return localeTag(h, RPMTAG_CHANGELOGTEXT, type, data, count, freeData);
+}
+
/**
* Retrieve group text.
* @param h header
@@ -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 } },

32
luanoreadline.diff Normal file
View File

@ -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)
{

75
luaroot.diff Normal file
View File

@ -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;

425
macrosin.diff Normal file
View File

@ -0,0 +1,425 @@
SUSE specific macro changes.
Index: macros.in
===================================================================
--- macros.in.orig
+++ macros.in
@@ -166,22 +166,22 @@
# Template for debug information sub-package.
%debug_package \
-%ifnarch noarch\
%global __debug_package 1\
-%package debug\
+%package debuginfo\
Summary: Debug information for package %{name}\
Group: Development/Debug\
AutoReqProv: 0\
-%description debug\
+Requires: %{name} = %{version}-%{release}\
+%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 debug -f debugfiles.list\
+%files debuginfo -f debugfiles.list\
%defattr(-,root,root)\
-%endif\
%{nil}
-%_defaultdocdir %{_usr}/doc
+%_defaultdocdir %{_usr}/doc/packages
+%_docdir_fmt %%{NAME}
# The path to the gzip executable (legacy, use %{__gzip} instead).
%_gzipbin %{__gzip}
@@ -218,7 +218,7 @@ package or when debugging this package.\
%_tmppath %{_var}/tmp
# Path to top of build area.
-%_topdir %{_usrsrc}/redhat
+%_topdir %{_usrsrc}/packages
# The path to the unzip executable (legacy, use %{__unzip} instead).
%_unzipbin %{__unzip}
@@ -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 w9.bzdio
# 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 0
#
# Filter GLIBC_PRIVATE Provides: and Requires:
@@ -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_conflicts ???
#%__find_obsoletes ???
+#%__find_supplements ???
+#%__find_enhances ???
#
# 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
%__python_provides @RPMCONFIGDIR@/pythondeps.sh --provides
%__python_requires @RPMCONFIGDIR@/pythondeps.sh --requires
@@ -591,15 +593,15 @@ print (t)\
%_dbi_config_Packages %{_dbi_htconfig} lockdbfd
# "Depends" is a per-transaction cache of known dependency resolutions.
-%_dbi_config_Depends %{_dbi_htconfig} temporary private
+%_dbi_config_Depends %{_dbi_htconfig} temporary private nofsync
-%_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
#==============================================================================
# ---- 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@
-%_host_alias @host_alias@%{nil}
+%_host_alias @host@%{nil}
%_host_cpu @host_cpu@
%_host_vendor @host_vendor@
%_host_os @host_os@
@@ -1250,12 +1178,191 @@ done \
%perl_privlib %(eval "`%{__perl} -V:installprivlib`"; echo $installprivlib)
#------------------------------------------------------------------------------
+# More useful perl macros (from Raul Dias <rsd@swi.com.br>)
+#
+%perl_version %(perl -V:version | sed "s!.*='!!;s!'.*!!")
+%perl_man1ext %(perl -V:man1ext | sed "s!.*='!!;s!'.*!!")
+%perl_man3ext %(perl -V:man3ext | sed "s!.*='!!;s!'.*!!")
+%perl_man1dir %(perl -V:man1dir | sed "s!.*='!!;s!'.*!!")
+%perl_man3dir %(perl -V:man3dir | sed "s!.*='!!;s!'.*!!")
+%perl_installman1dir %(perl -V:installman1dir | sed "s!.*='!!;s!'.*!!")
+%perl_installman3dir %(perl -V:installman3dir | sed "s!.*='!!;s!'.*!!")
+%perl_installarchlib %(perl -V:installarchlib | sed "s!.*='!!;s!'.*!!")
+%perl_prefix %{buildroot}
+
+#------------------------------------------------------------------------------
+# Python specific macro definitions (originally from PLD).
+#
+%py_ver %(python -c "import sys; v=sys.version_info[:2]; print '%%d.%%d'%%v" 2>/dev/null || echo PYTHON-NOT-FOUND)
+%py_prefix %(python -c "import sys; print sys.prefix" 2>/dev/null || echo PYTHON-NOT-FOUND)
+%py_libdir %{py_prefix}/%{_lib}/python%{py_ver}
+%py_incdir %{py_prefix}/include/python%{py_ver}
+%py_sitedir %{py_libdir}/site-packages
+%py_compile(O) \
+find %1 -name '*.pyc' -exec rm -f {} \\; \
+python -c "import sys, os, compileall; br='%{buildroot}'; compileall.compile_dir(sys.argv[1], ddir=br and (sys.argv[1][len(os.path.abspath(br)):]+'/') or None)" %1 \
+%{-O: \
+find %1 -name '*.pyo' -exec rm -f {} \\; \
+python -O -c "import sys, os, compileall; br='%{buildroot}'; compileall.compile_dir(sys.argv[1], ddir=br and (sys.argv[1][len(os.path.abspath(br)):]+'/') or None)" %1 \
+}
+%py_requires(d) \
+%define minver %py_ver \
+%define maxver %(python -c "import sys; a,b=sys.version_info[:2]; print '%%d.%%d'%%(a,b+1)" 2>/dev/null || echo PYTHON-NOT-FOUND) \
+BuildRequires: python %{-d:python-devel} \
+PreReq: python >= %minver, python < %maxver
+
+#------------------------------------------------------------------------------
+#
+# RPM macros for Java applications.
+#
+# JPackage Project <http://www.jpackage.org/>
+# David Walluck <david@anti-microsoft.org>
+# Ville Skyttä <ville.skytta@iki.fi>
+# Nicolas Mailhot <Nicolas.Mailhot@laPoste.net>
+#
+# $Id: macros.jpackage,v 1.1.2.5 2003/08/30 13:24:58 scop Exp $
+#
+
+# ---- default Java directories
+
+#
+# Root directory where all Java VMs/SDK/JREs are installed.
+#
+%_jvmdir %{_libdir}/jvm
+
+#
+# Root directory where all Java VMs/SDK/JREs expose their jars
+#
+%_jvmjardir %{_libdir}/jvm-exports
+
+#
+# Root directory for all Java VM/SDK/JRE's private things.
+#
+%_jvmprivdir %{_libdir}/jvm-private
+
+#
+# Directory where arch and version independent jars are installed.
+# This has already been integrated in RH macros following our request.
+#
+# By extension:
+# %{_javadir}-ext:
+# - version dependent jars
+# %{_javadir}-x.y.z:
+# - jars for Java standard x.y.z (usually symlinks to %{_javadir}-ext)
+# %{_javadir}-utils:
+# - Java-related scripts
+#
+# To simplify things only %{_javadir} is defined.
+#
+%_javadir %{_datadir}/java
+
+#
+# Directory where arch-specific (JNI) version-independent jars are installed.
+#
+# By extension:
+# %{_jnidir}-ext:
+# - version dependent jars
+# %{_jnidir}-x.y.z:
+# - jars for Java standard x.y.z (usually symlinks to %{_jnidir}-ext)
+# To simplify things only %{_jnidir} is defined.
+#
+%_jnidir %{_libdir}/java
+
+#
+# Root directory where all javadoc is installed. Also already in RH macros.
+#
+%_javadocdir %{_datadir}/javadoc
+
+#
+# Current default JVM home.
+#
+%java_home %(. %{_javadir}-utils/java-functions; set_jvm; echo $JAVA_HOME)
+
+# ---- default Java commands
+
+%ant JAVA_HOME=%{java_home} ant
+%jar %{java_home}/bin/jar
+%java %(. %{_javadir}-utils/java-functions; set_javacmd; echo $JAVACMD)
+%javac %{java_home}/bin/javac
+%javadoc %{java_home}/bin/javadoc
+
+# ---- Java extension handling macros
+
+#
+# add_jvm_extension should be used in %install by extension packages to declare
+# what extension jars they provide.
+#
+# For example a package that provides foo.jar which is the bar extension
+# under java 1.2 and 1.3 should do a:
+#
+# %install
+# ... # create foo.jar in %{javadir}-ext
+# %add_jvm_extension foo bar 1.2 1.3
+#
+# %files
+# %{javadir}-ext/foo.jar
+# %{javadir}-*/bar.jar
+#
+%add_jvm_extension JAVA_LIBDIR=%{buildroot}/%{_javadir} %{_bindir}/jvmjar -l
+
+#
+# Standard JPackage script
+#
+# This is kind of tasteless and should be moved to an external template
+#
+# %1 main class
+# %2 flags
+# %3 options
+# %4 jars (separated by ':')
+# %5 the name of script you wish to create
+#
+%jpackage_script() \
+install -d -m 755 $RPM_BUILD_ROOT%{_bindir}\
+cat > $RPM_BUILD_ROOT%{_bindir}/%5 << EOF \
+#!/bin/sh\
+#\
+# %{name} script\
+# JPackage Project <http://www.jpackage.org/>\
+\
+# Source functions library\
+. %{_javadir}-utils/java-functions\
+\
+# Source system prefs\
+if [ -f %{_sysconfdir}/java/%{name}.conf ] ; then\
+ . %{_sysconfdir}/java/%{name}.conf\
+fi\
+\
+# Source user prefs\
+if [ -f \\$HOME/.%{name}rc ] ; then\
+ . \\$HOME/.%{name}rc\
+fi\
+\
+# Configuration\
+MAIN_CLASS=%1\
+BASE_FLAGS=%2\
+BASE_OPTIONS=%3\
+BASE_JARS="%(echo %4 | sed -e 's,:, ,g')"\
+\
+# Set parameters\
+set_jvm\
+set_classpath \\$BASE_JARS\
+set_flags \\$BASE_FLAGS\
+set_options \\$BASE_OPTIONS\
+\
+# Let's start\
+run "\\$@"\
+EOF
+
+#------------------------------------------------------------------------------
# arch macro for all Intel i?86 compatibile processors
# (Note: This macro (and it's analogues) will probably be obsoleted when
# 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
#------------------------------------------------------------------------
# Use in %install to generate locale specific file lists. For example,
@@ -1270,3 +1377,17 @@ done \
# \endverbatim
#*/
+
+
+#------------------------------------------------------------------------
+# standard build service macros
+#
+%ext_info .gz
+%ext_man .gz
+
+%info_add() test -x /sbin/install-info -a -f %{?2}%{?!2:%{_infodir}}/%{1}%ext_info && /sbin/install-info --info-dir=%{?2}%{?!2:%{_infodir}} %{?2}%{?!2:%{_infodir}}/%{1}%ext_info \
+%{nil}
+
+%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}
+

39
missingok.diff Normal file
View File

@ -0,0 +1,39 @@
Obey MISSINGOK flag for dependencies. Backport from rpm-4.4.7.
--- ./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 */
- rpmdsNotify(dep, NULL, rc);
+ if (rpmdsFlags(dep) & RPMSENSE_MISSINGOK) {
+ rc = 0; /* dependency is unsatisfied, but just a hint. */
+ rpmdsNotify(dep, _("(hint skipped)"), rc);
+ } else {
+ rc = 1; /* dependency is unsatisfied */
+ rpmdsNotify(dep, NULL, rc);
+ }
exit:
/*
@@ -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_SCRIPT_PREP | \
RPMSENSE_SCRIPT_BUILD | \
RPMSENSE_SCRIPT_INSTALL | \

View File

@ -0,0 +1,61 @@
Index: scripts/find-supplements.ksyms
===================================================================
--- scripts/find-supplements.ksyms
+++ scripts/find-supplements.ksyms
@@ -1,5 +1,6 @@
#! /bin/sh
+RPM_SOURCE_DIR=/usr/src/packages/SOURCES
IFS=$'\n'
case "$1" in
@@ -46,11 +47,43 @@ combine_modaliases() {
print_modaliases "$class" "$variants" "$pos"
}
-for module in $(grep -E '/lib/modules/.+\.ko$'); do
- vermagic=$(/sbin/modinfo -F vermagic "$module")
- krel=${vermagic%% *}
- /sbin/modinfo -F alias "$module" \
- | sed -nre "s,(.+:.+),modalias(kernel-${krel##*-}:\\1),p"
-done \
+aliases_of_filelist() {
+ for module in $(grep -E '/lib/modules/.+\.ko$'); do
+ vermagic=$(/sbin/modinfo -F vermagic "$module")
+ krel=${vermagic%% *}
+ /sbin/modinfo -F alias "$module" \
+ | sed -nre "s,(.+:.+),modalias(kernel-${krel##*-}:\\1),p"
+ done
+}
+
+aliases_of_specfile_macro() {
+ declare regex
+
+ regex=$(
+ set -o noglob
+ set -- $(sed -ne 's:^%supplements_kernel_module[ \t]::p' \
+ $RPM_SOURCE_DIR/$1.spec)
+ while [ $# -ge 1 ]; do
+ regex=$(echo "$1" \
+ | sed -e 's:[.]:\\.:g' \
+ -e 's:?:.:g' \
+ -e 's:\*:.*:g' \
+ -e 's:\\:\\\\:g')
+ echo -n "^$regex\$"
+ [ $# -ge 2 ] && echo -n "|"
+ shift
+ done
+ )
+
+ if [ -n "$regex" ]; then
+ awk '
+ $1 == "alias" && $3 ~ regex { print $2 }
+ ' regex="$regex" /lib/modules/*/modules.alias
+ fi
+}
+
+( aliases_of_filelist
+ aliases_of_specfile_macro "$1"
+) \
| sort -u \
| combine_modaliases

95
modalias.diff Normal file
View File

@ -0,0 +1,95 @@
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
+
+IFS=$'\n'
+
+case "$1" in
+kernel-module-*) ;; # Fedora kernel module package names start with
+ # kernel-module.
+kernel*) is_kernel_package=1 ;;
+esac
+
+if ! [ -z "$is_kernel_package" ]; then
+ cat > /dev/null
+ exit 0
+fi
+
+print_modaliases() {
+ declare class=$1 variants=$2 pos=$3
+ if [ -n "$variants" ]; then
+ echo "${class:0:pos}[$variants]${class:pos+1}"
+ else
+ [ -z "$class" ] || echo "$class"
+ fi
+}
+
+combine_modaliases() {
+ declare tag class variants pos n
+ read class
+ while read tag; do
+ for ((n=0; n<${#class}; n++)); do
+ if [ "*" != "${class:n:1}" -a \
+ "${class:0:n}" = "${tag:0:n}" -a \
+ "${class:n+1}" = "${tag:n+1}" ] &&
+ ( [ -z "$pos" ] || [ $n = $pos ] ); then
+ variants="${variants:-${class:n:1}}${tag:n:1}"
+ pos=$n
+ break
+ fi
+ done
+ if [ $n -eq ${#class} ]; then
+ print_modaliases "$class" "$variants" "$pos"
+ variants=
+ pos=
+ class=$tag
+ fi
+ done
+ print_modaliases "$class" "$variants" "$pos"
+}
+
+for module in $(grep -E '/lib/modules/.+\.ko$'); do
+ vermagic=$(/sbin/modinfo -F vermagic "$module")
+ krel=${vermagic%% *}
+ /sbin/modinfo -F alias "$module" \
+ | sed -nre "s,(.+:.+),modalias(kernel-${krel##*-}:\\1),p"
+done \
+| sort -u \
+| combine_modaliases
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 ???
#

53
nameversioncompare.diff Normal file
View File

@ -0,0 +1,53 @@
Also compare the name and not only the version when checking if
two packages are the same. rh#104066
--- ./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)
+{
+ const char * one, * two;
+ int rc;
+
+ 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;
+ 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);
+}
+
int rpmtsAddInstallElement(rpmts ts, Header h,
fnpyKey key, int upgrade, rpmRelocation * relocs)
{
@@ -303,7 +322,7 @@ addheader:
continue;
/* Skip packages that contain identical NEVR. */
- if (rpmVersionCompare(h, oh) == 0)
+ if (rpmNameVersionCompare(h, oh) == 0)
continue;
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)) {
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"),

15
nodefattr.diff Normal file
View File

@ -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;

83
nolua.diff Normal file
View File

@ -0,0 +1,83 @@
Allow build without lua support.
--- ./build/parseScript.c.orig 2005-12-16 18:34:36.000000000 +0000
+++ ./build/parseScript.c 2005-12-16 18:36:08.000000000 +0000
@@ -283,6 +283,7 @@ int parseScript(Spec spec, int parsePart
stripTrailingBlanksStringBuf(sb);
p = getStringBuf(sb);
+#ifdef WITH_LUA
if (!strcmp(progArgv[0], "<lua>")) {
rpmlua lua = NULL; /* Global state. */
if (rpmluaCheckScript(lua, p, partname) != RPMRC_OK) {
@@ -291,7 +292,9 @@ int parseScript(Spec spec, int parsePart
}
(void) rpmlibNeedsFeature(pkg->header,
"BuiltinLuaScripts", "4.2.2-1");
- } else if (progArgv[0][0] == '<') {
+ } else
+#endif
+ if (progArgv[0][0] == '<') {
rpmError(RPMERR_BADSPEC,
_("line %d: unsupported internal script: %s\n"),
spec->lineNum, progArgv[0]);
--- ./lib/psm.c.orig 2005-12-14 18:59:10.000000000 +0000
+++ ./lib/psm.c 2006-02-24 11:46:54.000000000 +0000
@@ -490,6 +490,7 @@ static pid_t psmWait(rpmpsm psm)
return psm->sq.reaped;
}
+#ifdef WITH_LUA
/**
* Run internal Lua script.
*/
@@ -572,6 +573,7 @@ static rpmRC runLuaScript(rpmpsm psm, He
return rc;
}
+#endif
/**
*/
@@ -637,11 +639,15 @@ static rpmRC runScript(rpmpsm psm, Heade
xx = hge(h, RPMTAG_ARCH, NULL, (void **) &a, NULL);
if (progArgv && strcmp(progArgv[0], "<lua>") == 0) {
+#ifdef WITH_LUA
rpmMessage(RPMMESS_DEBUG,
_("%s: %s(%s-%s-%s.%s) running <lua> scriptlet.\n"),
psm->stepName, tag2sln(psm->scriptTag), n, v, r, a);
return runLuaScript(psm, h, sln, progArgc, progArgv,
script, arg1, arg2);
+#else
+ return RPMRC_FAIL;
+#endif
}
psm->sq.reaper = 1;
--- ./lib/rpmlibprov.c.orig 2004-03-16 21:58:29.000000000 +0000
+++ ./lib/rpmlibprov.c 2006-06-14 13:52:46.000000000 +0000
@@ -51,9 +54,11 @@ static struct rpmlibProvides_s rpmlibPro
{ "rpmlib(ConcurrentAccess)", "4.1-1",
( RPMSENSE_EQUAL),
N_("package scriptlets may access the rpm database while installing.") },
+#ifdef WITH_LUA
{ "rpmlib(BuiltinLuaScripts)", "4.2.2-1",
( RPMSENSE_EQUAL),
N_("internal support for lua scripts.") },
+#endif
{ NULL, NULL, 0, NULL }
};
--- ./lib/rpmrc.c.orig 2005-01-17 18:46:23.000000000 +0000
+++ ./lib/rpmrc.c 2005-12-16 18:30:29.000000000 +0000
@@ -1883,7 +1873,9 @@ int rpmReadConfigFiles(const char * file
}
/* Force Lua state initialization */
+#ifdef WITH_LUA
(void)rpmluaGetPrintBuffer(NULL);
+#endif
return 0;
}

292
noneon.diff Normal file
View File

@ -0,0 +1,292 @@
Allow build without the neon library. Resurrects old httpOpen
code from rpm-4.1.1.
Building without neon means no webdav file uploads, though.
--- ./rpmio/rpmdav.c.orig 2005-12-16 18:04:29.000000000 +0000
+++ ./rpmio/rpmdav.c 2005-12-16 18:17:53.000000000 +0000
@@ -9,6 +9,8 @@
#include <pthread.h>
#endif
+#ifdef WITH_NEON
+
#include "ne_alloc.h"
#include "ne_auth.h"
#include "ne_basic.h"
@@ -27,6 +29,8 @@
#include "ne_string.h"
#include "ne_utils.h"
+#endif /* WITH_NEON */
+
#include <rpmio_internal.h>
#define _RPMDAV_INTERNAL
@@ -61,6 +65,8 @@ _free(/*@only@*/ /*@null@*/ /*@out@*/ co
return NULL;
}
+#ifdef WITH_NEON
+
/* =============================================================== */
static int davFree(urlinfo u)
/*@globals internalState @*/
@@ -1370,6 +1376,8 @@ fprintf(stderr, "*** davReadlink(%s) rc
}
#endif /* NOTYET */
+#endif /* WITH_NEON */
+
/* =============================================================== */
/*@unchecked@*/
int avmagicdir = 0x3607113;
@@ -1494,6 +1502,8 @@ fprintf(stderr, "*** avOpendir(%s)\n", p
}
/*@=boundswrite@*/
+#ifdef WITH_NEON
+
/* =============================================================== */
/*@unchecked@*/
int davmagicdir = 0x8440291;
@@ -1661,4 +1671,6 @@ fprintf(stderr, "*** davOpendir(%s)\n",
return (DIR *) avdir;
/*@=kepttrans@*/
}
+
+#endif /* WITH_NEON */
/*@=modfilesys@*/
--- ./rpmio/rpmio.c.orig 2005-01-26 03:39:58.000000000 +0000
+++ ./rpmio/rpmio.c 2005-12-16 17:51:19.000000000 +0000
@@ -371,7 +371,11 @@ static ssize_t fdRead(void * cookie, /*@
/*@-boundswrite@*/
/* HACK: flimsy wiring for davRead */
if (fd->req != NULL) {
+#ifdef WITH_NEON
rc = davRead(fd, buf, (count > fd->bytesRemain ? fd->bytesRemain : count));
+#else
+ rc = -1;
+#endif
/* XXX Chunked davRead EOF. */
if (rc == 0)
fd->bytesRemain = 0;
@@ -404,9 +408,13 @@ static ssize_t fdWrite(void * cookie, co
fdstat_enter(fd, FDSTAT_WRITE);
/*@-boundsread@*/
/* HACK: flimsy wiring for davWrite */
- if (fd->req != NULL)
+ if (fd->req != NULL) {
+#ifdef WITH_NEON
rc = davWrite(fd, buf, (count > fd->bytesRemain ? fd->bytesRemain : count));
- else
+#else
+ return -1;
+#endif
+ } else
rc = write(fdno, buf, (count > fd->bytesRemain ? fd->bytesRemain : count));
/*@=boundsread@*/
fdstat_exit(fd, FDSTAT_WRITE, rc);
@@ -455,9 +463,13 @@ static int fdClose( /*@only@*/ void * co
fdstat_enter(fd, FDSTAT_CLOSE);
/* HACK: flimsy wiring for davClose */
/*@-branchstate@*/
- if (fd->req != NULL)
+ if (fd->req != NULL) {
+#ifdef WITH_NEON
rc = davClose(fd);
- else
+#else
+ return -1;
+#endif
+ } else
rc = ((fdno >= 0) ? close(fdno) : -2);
/*@=branchstate@*/
fdstat_exit(fd, FDSTAT_CLOSE, rc);
@@ -2029,6 +2041,56 @@ exit:
}
/*@=nullstate@*/
+#ifndef WITH_NEON
+/*@-nullstate@*/ /* FIX: u->{ctrl,data}->url undef after XurlLink. */
+static /*@null@*/ FD_t httpOpen(const char * url, /*@unused@*/ int flags,
+ /*@unused@*/ mode_t mode, /*@out@*/ urlinfo * uret)
+ /*@globals internalState @*/
+ /*@modifies *uret, internalState @*/
+{
+ urlinfo u = NULL;
+ FD_t fd = NULL;
+
+#if 0 /* XXX makeTempFile() heartburn */
+ assert(!(flags & O_RDWR));
+#endif
+ if (urlSplit(url, &u))
+ goto exit;
+
+ if (u->ctrl == NULL)
+ u->ctrl = fdNew("persist ctrl (httpOpen)");
+ if (u->ctrl->nrefs > 2 && u->data == NULL)
+ u->data = fdNew("persist data (httpOpen)");
+
+ if (u->ctrl->url == NULL)
+ fd = fdLink(u->ctrl, "grab ctrl (httpOpen persist ctrl)");
+ else if (u->data->url == NULL)
+ fd = fdLink(u->data, "grab ctrl (httpOpen persist data)");
+ else
+ fd = fdNew("grab ctrl (httpOpen)");
+
+ if (fd) {
+ fdSetIo(fd, ufdio);
+ fd->ftpFileDoneNeeded = 0;
+ fd->rd_timeoutsecs = httpTimeoutSecs;
+ fd->contentLength = fd->bytesRemain = -1;
+ fd->url = urlLink(u, "url (httpOpen)");
+ fd = fdLink(fd, "grab data (httpOpen)");
+ fd->urlType = URL_IS_HTTP;
+ }
+
+exit:
+/*@-boundswrite@*/
+ if (uret)
+ *uret = u;
+/*@=boundswrite@*/
+ /*@-refcounttrans@*/
+ return fd;
+ /*@=refcounttrans@*/
+}
+/*@=nullstate@*/
+#endif
+
static /*@null@*/ FD_t ufdOpen(const char * url, int flags, mode_t mode)
/*@globals h_errno, fileSystem, internalState @*/
/*@modifies fileSystem, internalState @*/
@@ -2067,7 +2129,11 @@ fprintf(stderr, "*** ufdOpen(%s,0x%x,0%o
case URL_IS_HTTPS:
case URL_IS_HTTP:
case URL_IS_HKP:
+#ifdef WITH_NEON
fd = davOpen(url, flags, mode, &u);
+#else
+ fd = httpOpen(url, flags, mode, &u);
+#endif
if (fd == NULL || u == NULL)
break;
@@ -2075,7 +2141,11 @@ fprintf(stderr, "*** ufdOpen(%s,0x%x,0%o
? ((flags & O_APPEND) ? "PUT" :
((flags & O_CREAT) ? "PUT" : "PUT"))
: "GET");
+#ifdef WITH_NEON
u->openError = davReq(fd, cmd, path);
+#else
+ u->openError = httpReq(fd, cmd, path);
+#endif
if (u->openError < 0) {
/* XXX make sure that we can exit through ufdClose */
fd = fdLink(fd, "error ctrl (ufdOpen HTTP)");
--- ./rpmio/rpmrpc.c.orig 2005-12-16 15:01:26.000000000 +0000
+++ ./rpmio/rpmrpc.c 2006-02-13 18:55:39.000000000 +0000
@@ -93,7 +93,9 @@ int Mkdir (const char * path, mode_t mod
/*@notreached@*/ break;
case URL_IS_HTTPS:
case URL_IS_HTTP:
+#ifdef WITH_NEON
return davMkdir(path, mode);
+#endif
/*@notreached@*/ break;
case URL_IS_PATH:
path = lpath;
@@ -151,7 +153,9 @@ int Rmdir (const char * path)
/*@notreached@*/ break;
case URL_IS_HTTPS:
case URL_IS_HTTP:
+#ifdef WITH_NEON
return davRmdir(path);
+#endif
/*@notreached@*/ break;
case URL_IS_PATH:
path = lpath;
@@ -182,7 +186,9 @@ int Rename (const char * oldpath, const
switch (oldut) {
case URL_IS_HTTPS:
case URL_IS_HTTP:
+#ifdef WITH_NEON
return davRename(oldpath, newpath);
+#endif
/*@notreached@*/ break;
case URL_IS_FTP: /* XXX WRONG WRONG WRONG */
case URL_IS_PATH:
@@ -280,7 +286,9 @@ int Unlink(const char * path) {
/*@notreached@*/ break;
case URL_IS_HTTPS:
case URL_IS_HTTP:
+#ifdef WITH_NEON
return davUnlink(path);
+#endif
/*@notreached@*/ break;
case URL_IS_PATH:
path = lpath;
@@ -1282,7 +1290,9 @@ fprintf(stderr, "*** Stat(%s,%p)\n", pat
/*@notreached@*/ break;
case URL_IS_HTTPS:
case URL_IS_HTTP:
+#ifdef WITH_NEON
return davStat(path, st);
+#endif
/*@notreached@*/ break;
case URL_IS_PATH:
path = lpath;
@@ -1311,7 +1321,9 @@ fprintf(stderr, "*** Lstat(%s,%p)\n", pa
/*@notreached@*/ break;
case URL_IS_HTTPS:
case URL_IS_HTTP:
+#ifdef WITH_NEON
return davLstat(path, st);
+#endif
/*@notreached@*/ break;
case URL_IS_PATH:
path = lpath;
@@ -1489,7 +1502,9 @@ fprintf(stderr, "*** Opendir(%s)\n", pat
/*@notreached@*/ break;
case URL_IS_HTTPS:
case URL_IS_HTTP:
+#ifdef WITH_NEON
return davOpendir(path);
+#endif
/*@notreached@*/ break;
case URL_IS_PATH:
path = lpath;
@@ -1515,8 +1530,10 @@ fprintf(stderr, "*** Readdir(%p)\n", (vo
return NULL;
if (ISAVMAGIC(dir))
return avReaddir(dir);
+#ifdef WITH_NEON
if (ISDAVMAGIC(dir))
return davReaddir(dir);
+#endif
return readdir(dir);
}
@@ -1528,8 +1545,10 @@ fprintf(stderr, "*** Closedir(%p)\n", (v
return 0;
if (ISAVMAGIC(dir))
return avClosedir(dir);
+#ifdef WITH_NEON
if (ISDAVMAGIC(dir))
return davClosedir(dir);
+#endif
return closedir(dir);
}
--- ./rpmio/url.c.orig 2005-12-16 15:24:25.000000000 +0000
+++ ./rpmio/url.c 2005-12-16 17:08:21.000000000 +0000
@@ -147,8 +147,10 @@ URLDBGREFS(0, (stderr, "--> url %p -- %d
/*@=usereleased@*/
}
if (u->sess != NULL) {
+#ifdef WITH_NEON
/* HACK: neon include has prototype. */
ne_session_destroy(u->sess);
+#endif
u->sess = NULL;
}
u->buf = _free(u->buf);

13
nostdoutclose.diff Normal file
View File

@ -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@*/

14
obeynodbsync.diff Normal file
View File

@ -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;
}

55
openallbuttemp.diff Normal file
View File

@ -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;

743
patchrpms.diff Normal file
View File

@ -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\

40
payloadformat.diff Normal file
View File

@ -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) {

18
pgpdecodeearly.diff Normal file
View File

@ -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);

49
platformin.diff Normal file
View File

@ -0,0 +1,49 @@
SUSE specific platform changes. The libexecdir definition is probably
wrong, LSB seems to demand "%{_exec_prefix}/lib".
--- ./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 %{_libdir}
%_datadir @datadir@
%_sysconfdir @sysconfdir@
%_sharedstatedir @sharedstatedir@
%_localstatedir @localstatedir@
%_lib @LIB@
-%_libdir @LIBDIR@
+%_libdir %{_exec_prefix}/%{_lib}
%_includedir @includedir@
%_oldincludedir @oldincludedir@
%_infodir @infodir@
%_mandir @mandir@
-%_initrddir %{_sysconfdir}/rc.d/init.d
+%_initrddir %{_sysconfdir}/init.d
%_defaultdocdir @DEFAULTDOCDIR@
@@ -148,3 +148,21 @@
@mandrake@%_gamesdir games
@mandrake@%_gamesbindir %{_prefix}/%{_gamesdir}
@mandrake@%_gamesdatadir %{_datadir}/%{_gamesdir}
+@SuSE@#---------------------------------------------------------------------
+@SuSE@# Expanded at end of %prep
+@SuSE@#
+@SuSE@%__id_u @__ID_U@
+@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_GROUP@
+@SuSE@%_fixperms %{__chmod} -Rf @FIXPERMS@
+@SuSE@
+@SuSE@#---------------------------------------------------------------------
+@SuSE@# Expanded at start of %build
+@SuSE@#
+@SuSE@%__spec_build_pre %{___build_pre}\
+@SuSE@%{?buildroot: %__rm -rf "$RPM_BUILD_ROOT"\
+@SuSE@ %__mkdir_p `dirname "$RPM_BUILD_ROOT"`\
+@SuSE@ %__mkdir "$RPM_BUILD_ROOT"\
+@SuSE@}

21
prereqorder.diff Normal file
View File

@ -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;
}

14
probfilter.diff Normal file
View File

@ -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 */

43
querybuffer.diff Normal file
View File

@ -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);

0
ready Normal file
View File

22
rebuilddbroot.diff Normal file
View File

@ -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"),

24
refreshtestarch.diff Normal file
View File

@ -0,0 +1,24 @@
Also test architecture in "refresh" test when not colored. This allows
updates to different architecture possible again.
--- ./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 */
xx = rpmdbSetIteratorRE(psm->mi, RPMTAG_EPOCH, RPMMIRE_STRCMP,
rpmteE(psm->te));
xx = rpmdbSetIteratorRE(psm->mi, RPMTAG_VERSION, RPMMIRE_STRCMP,
rpmteV(psm->te));
xx = rpmdbSetIteratorRE(psm->mi, RPMTAG_RELEASE, RPMMIRE_STRCMP,
rpmteR(psm->te));
- 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));
}

3
rpm-4.4.2.tar.bz2 Normal file
View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:abc1b6a909e904ee220e32cd0c534fe19b8ea7cb2d3e8cfe395e221773e62c8c
size 8955447

34
rpm-python.changes Normal file
View File

@ -0,0 +1,34 @@
-------------------------------------------------------------------
Wed Oct 18 22:59:02 CEST 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 23:41:37 CEST 2006 - schwab@suse.de
- Make sure config.rpath is present.
-------------------------------------------------------------------
Fri Sep 22 08:58:57 CEST 2006 - aj@suse.de
- Fix for python2.5.
-------------------------------------------------------------------
Thu Sep 21 11:41:04 CEST 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 10:58:42 CEST 2006 - lnussel@suse.de
- fix build with python 2.5 by overriding autodetection
-------------------------------------------------------------------
Tue Sep 19 13:48:27 CEST 2006 - rguenther@suse.de
- split from rpm package

80
rpm-python.spec Normal file
View File

@ -0,0 +1,80 @@
#
# spec file for package rpm-python (Version 4.4.2)
#
# 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.
#
# Please submit bugfixes or comments via http://bugs.opensuse.org/
#
# norootforbuild
Name: rpm-python
BuildRequires: python-devel
License: GNU General Public License (GPL)
Group: System/Packages
Summary: Python Bindings for Manipulating RPM Packages
Version: 4.4.2
Release: 76
Requires: rpm = %{version}
%py_requires
Source99: rpm.spec
%{expand:%(sed -n -e '/^Source:/,/^BuildRoot:/p' <%_sourcedir/rpm.spec)}
%description
The rpm-python package contains a module that permits applications
written in the Python programming language to use the interface
supplied by RPM Package Manager libraries.
This package should be installed if you want to develop Python programs
that will manipulate RPM packages and databases.
Authors:
--------
Erik Troan <ewt@redhat.com>
Marc Ewing <marc@redhat.com>
%prep
%{expand:%(sed -n -e '/^%%prep/,/^%%install/p' <%_sourcedir/rpm.spec | sed -e '1d' -e '$d')}
%install
rm -rf $RPM_BUILD_ROOT
mkdir -p $RPM_BUILD_ROOT/usr/lib
# 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
pushd $RPM_BUILD_ROOT/%py_sitedir/rpm
rm -f _rpmmodule.a _rpmmodule.la
python %py_libdir/py_compile.py *.py
python -O %py_libdir/py_compile.py *.py
popd
%clean
rm -rf $RPM_BUILD_ROOT
%files
%defattr(-,root,root)
%{_libdir}/python*
%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

459
rpm-suse_macros Normal file
View File

@ -0,0 +1,459 @@
%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
%_mandir %{_prefix}/share/man
%_sysconfdir /etc
%_localstatedir /var
%_defaultdocdir %{_usr}/share/doc/packages
# package build macros
%makeinstall make DESTDIR=%{buildroot} install
%tcl_version %(echo 'puts [package require Tcl]' | tclsh)
%insserv_prereq insserv
%fillup_prereq fillup fileutils
%install_info_prereq info
%__os_install_post \
%{suse_check} \
/usr/lib/rpm/brp-compress \
%{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
# not running from YaST2 in instsys on update.
%restart_on_update() \
test -n "$FIRST_ARG" || FIRST_ARG=$1 \
if test "$FIRST_ARG" -ge 1 ; then \
test -f /etc/sysconfig/services && . /etc/sysconfig/services \
if test "$YAST_IS_RUNNING" != "instsys" -a "$DISABLE_RESTART_ON_UPDATE" != yes ; then \
for service in %{?*} ; do \
/etc/init.d/$service try-restart > /dev/null || : \
done \
fi \
fi \
%nil
# macro: %stop_on_removal()
# Used to stop a service in preun section, if we are
# not running from YaST2 in instsys on removal of this package.
%stop_on_removal() \
test -n "$FIRST_ARG" || FIRST_ARG=$1 \
if test "$FIRST_ARG" = "0" ; then \
test -f /etc/sysconfig/services && . /etc/sysconfig/services \
if test "$YAST_IS_RUNNING" != "instsys" -a "$DISABLE_STOP_ON_REMOVAL" != yes ; then \
for service in %{?*} ; do \
/etc/init.d/$service stop > /dev/null \
done \
fi \
fi \
%nil
# macro: %configure_kernel_source
#
#
%configure_kernel_source() \
if test -d /usr/src/linux ; then \
pushd /usr/src/linux \
test -f .config || cp arch/%_arch/defconfig.default .config \
yes "" | make oldconfig \
make dep \
popd \
fi \
%nil
%is_plus %(if test -f /.buildenv ; then source /.buildenv ; if [[ "$BUILD_BASENAME" == *+kde ]] ; then echo 1 ; else echo 0 ; fi ; else echo 0 ; fi)
%run_permissions() \
if test "$YAST_IS_RUNNING" != "instsys" ; then \
if test -x /sbin/SuSEconfig -a -f /sbin/conf.d/SuSEconfig.permissions ; then \
/sbin/SuSEconfig --module permissions \
fi \
fi \
%nil
%run_suseconfig(m:) \
%{!-m:echo -e "\\nERROR: missing parameter for macro run_suseconfig\\n" ; exit 1 ; } \
if test "$YAST_IS_RUNNING" != "instsys" ; then \
if test -x /sbin/SuSEconfig -a -f /sbin/conf.d/SuSEconfig.%{-m*} ; then \
/sbin/SuSEconfig --module %{-m*} \
else \
echo -e "\\nERROR: SuSEconfig or requested SuSEconfig module not present!\\n" ; exit 1 \
fi \
fi \
%nil
%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
# -l: no ltconfig,ltmain.sh
%suse_update_config(fcl) \
AUTOMAKE_DIR=/usr/share/automake \
[ -d $AUTOMAKE_DIR ] || AUTOMAKE_DIR=/usr/share/automake* \
%{!-c:\
[ -d $AUTOMAKE_DIR ] || { \
echo 'Please, install automake.' \
exit 1 \
} \
} \
for d in . %{?*}; do \
%{!-c:\
for f in config.sub config.guess; do \
if test -f $d/$f -a ! $d/$f -ef $AUTOMAKE_DIR/$f ; then \
%{!-f:[ $d/$f -nt $AUTOMAKE_DIR/$f ] ||} cp -f $AUTOMAKE_DIR/$f $d/$f \
fi \
if test -d $d -a ! -f $d/depcomp -a -f $AUTOMAKE_DIR/depcomp ; then \
cp -f $AUTOMAKE_DIR/depcomp $d/depcomp \
echo "please add depcomp to sources for new automake!" \
fi \
if test -f $d/missing -a ! $d/missing -ef $AUTOMAKE_DIR/missing ; then \
cp -f $AUTOMAKE_DIR/missing $d/missing \
fi \
done \
} \
%{!-l:\
for f in ltconfig ltmain.sh; do \
if test -f $d/$f; then \
sed 's/linux-gnu\\([^*][^*]*\\)\\*/linux*\\1*/g; s/linux-gnu/linux/g; s,/lib\\\>,/%_lib,g; s,/%_lib\\([\$-]\\),/lib\\1,g' $d/$f > $d/$f-$$ && \
mv -f $d/$f-$$ $d/$f \
chmod +x $d/$f \
fi \
done \
} \
done \
%suse_update_libdir() \
if [ %_lib != lib ]; then \
for file in %{?*} ; do \
[ ! -e $file ] && echo "Error: $file does not exist!" && exit -1 \
[ -e $file.nolib64 ] && echo "Error: $file.nolib64 already exists!" && exit -1 \
cp $file $file.nolib64 \
echo "patching $file" \
sed -e "s,/lib\\\>,/%_lib,g" $file.nolib64 | sed -e "s,/%_lib/cpp,/lib/cpp,; s,/usr/%_lib/perl,/usr/lib/perl, ; s,/%_lib\\([\$-]\\),/lib\\1,g" > $file \
rm -f $file.nolib64 \
done; \
fi ; \
# macro: fillup_and_insserv
# do the fillup and insserv calls for postinstall
# options:
# -n (use first argument as name for fillup template filenames
# 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]
# Pairs of:
# main script name
# 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/rc.config:
# var/adm/fillup-templates/rc.config.package
%fillup_and_insserv(finpsyY) \
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 \
SYSC_TEMPLATE=$TEMPLATE_DIR/sysconfig.$PNAME \
RC_TEMPLATE=$TEMPLATE_DIR/rc.config.$PNAME \
SD_NAME="" \
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 -- %{?*} \
while [ ${#*} -gt 0 ] ; do \
SCRIPTNAME=$1 \
STARTVAR=$2 \
shift 2 \
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
# macro: fillup_only
# 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
# NAME2: if needed (if more packages fill the
# same sysconfig file) the package name
# options:
# -n set sysconfig name manually
# -a use package name as $NAME2
# -s use second arg as package-name
# -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 \
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}/}} \
if [ -x bin/fillup ] ; then \
%{sysc_fillup} \
%{rc_fillup} \
else \
echo "ERROR: fillup not found. This should not happen. Please compare" \
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 rc.config
# or with -f in the given file
%rename_sysconfig_variable(f:) \
%{!-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 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/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() \
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 ;
%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 ;
%suse_version 901
%sles_version 0
%ul_version 0
%do_profiling 1
%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)}

2004
rpm.changes Normal file

File diff suppressed because it is too large Load Diff

1335
rpm.spec Normal file

File diff suppressed because it is too large Load Diff

76
rpmconfigcheck Normal file
View File

@ -0,0 +1,76 @@
#! /bin/bash
# Copyright (c) 2002 SuSE GmbH Nuernberg, Germany.
#
# Author: Michael Schroeder <feedback@suse.de>
#
# /etc/init.d/rpmconfigcheck
# /usr/sbin/rcrpmconfigcheck
#
# Script to scan for unresolved .rpmnew, .rpmorig, and .rpmsave files
#
### BEGIN INIT INFO
# Provides: rpmconfigcheck
# Required-Start: $remote_fs
# Required-Stop:
# Default-Start: 2 3 5
# Default-Stop:
# Description: rpm config file scan
### END INIT INFO
. /etc/rc.status
# First reset status of this service
rc_reset
configcheckfile=/var/adm/rpmconfigcheck
packages=/var/lib/rpm/Packages
test -z "$1" && set start
case "$1" in
start|restart|try-restart|reload|force-reload)
if test -s $packages -a \( ! -e $configcheckfile -o -s $configcheckfile -o ! $packages -ot $configcheckfile \) ; then
echo -n "Searching for unresolved configuration files"
if test ! -e $configcheckfile -o ! $packages -ot $configcheckfile ; then
test -e $configcheckfile && mv -f $configcheckfile $configcheckfile.old
rpm -qalc | sort | perl -lne '-e "$_.rpmnew" and print "$_.rpmnew"; -e "$_.rpmorig" and print "$_.rpmorig"; -e "$_.rpmsave" and print "$_.rpmsave"' > $configcheckfile
else
mv -f $configcheckfile $configcheckfile.old
while read l; do
test -e $l && echo $l
done < $configcheckfile.old > $configcheckfile
true
fi
rc_status -v
if test -s $configcheckfile; then
echo "Please check the following files (see /var/adm/rpmconfigcheck):"
sed -e 's/^/ /' < $configcheckfile
touch $configcheckfile.old
cat $configcheckfile $configcheckfile.old | sort | uniq -d > $configcheckfile.dup
cat $configcheckfile $configcheckfile.dup | sort | uniq -u > $configcheckfile.new
if test -s $configcheckfile.new ; then
(
echo "----------------------------------------------------------------------"
echo "----------------------------------------------------------------------"
echo "rpmconfigcheck"
date
echo "----------------------------------------"
echo "This is a warning message."
echo "rpmconfigcheck has found the following new unresolved config files"
echo "(all files are listed in /var/adm/rpmconfigcheck):"
cat $configcheckfile.new
echo "----------------------------------------"
) >> /var/log/update-messages
fi
fi
rm -f $configcheckfile.old $configcheckfile.dup $configcheckfile.new
fi
;;
stop|status)
;;
*)
echo "Usage: $0 {start}"
exit 1
;;
esac
rc_exit

89
rpmpopt.diff Normal file
View File

@ -0,0 +1,89 @@
Index: rpmpopt.in
===================================================================
--- rpmpopt.in.orig
+++ rpmpopt.in
@@ -86,7 +86,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)"
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]' \

136
rpmqpack.diff Normal file
View File

@ -0,0 +1,136 @@
Provide rpmqpack, a fast way to list all installed packages are
check if some package is installed. This is a hack.
--- Makefile.am
+++ Makefile.am
@@ -48,7 +48,7 @@
bin_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@
+rpmqpack_SOURCES = rpmqpack.c
+rpmqpack_LDFLAGS = $(myLDFLAGS)
+rpmqpack_LDADD = $(top_builddir)/rpmdb/librpmdb.la \
+ $(top_builddir)/rpmio/librpmio.la \
+ $(top_builddir)/popt/libpopt.la
+
$(PROGRAMS): $(myLDADD) @WITH_APIDOCS_TARGET@
.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 @@
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
+rpmqpack \- check for installed rpm packages
+
+.SH SYNOPSIS
+.B rpmqpack
+.RI [ pack1 "] [" pack2 ]...
+
+.SH DESCRIPTION
+rpmqpack checks if packages given as arguments are installed in
+the system. It prints each installed package to stdout.
+If no arguments are given all installed packages are printed.
+
+.SH EXIT STATUS
+rpmqpack returns 0 if all given packages are installed, otherwise
+1.
+
+.SH SEE ALSO
+.BR rpm (1)
+
+.SH COPYRIGHT
+2002 SuSE Linux AG Nuernberg, Germany.
+
+.SH AUTHOR
+Michael Schroeder <mls@suse.de>
--- rpmqpack.c
+++ rpmqpack.c
@@ -0,0 +1,59 @@
+#include <sys/types.h>
+#include <limits.h>
+#include <fcntl.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <db.h>
+
+DBT key;
+DBT data;
+
+int
+main(int argc, char **argv)
+{
+ DB *db = 0;
+ DBC *dbc = 0;
+ int ret = 0;
+
+ if (db_create(&db, 0, 0))
+ {
+ perror("db_create");
+ exit(1);
+ }
+ if (db->open(db, 0, "/var/lib/rpm/Name", 0, DB_HASH, DB_RDONLY, 0664))
+ {
+ perror("db->open");
+ exit(1);
+ }
+ if (argc == 1)
+ {
+ if (db->cursor(db, NULL, &dbc, 0))
+ {
+ perror("db->cursor");
+ exit(1);
+ }
+ while (dbc->c_get(dbc, &key, &data, DB_NEXT) == 0)
+ printf("%*.*s\n", (int)key.size, (int)key.size, (char *)key.data);
+ dbc->c_close(dbc);
+ }
+ else
+ {
+ argc--;
+ while (argc--)
+ {
+ argv++;
+ key.data = (void *)*argv;
+ key.size = strlen(*argv);
+ data.data = NULL;
+ data.size = 0;
+ if (db->get(db, 0, &key, &data, 0) == 0)
+ printf("%s\n", *argv);
+ else
+ ret = 1;
+ }
+ }
+ db->close(db, 0);
+ return ret;
+}

195
rpmrc.diff Normal file
View File

@ -0,0 +1,195 @@
SUSE specific rpmrc changes.
Index: rpmrc.in
===================================================================
--- rpmrc.in.orig
+++ rpmrc.in
@@ -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 -mcpu=i686
-optflags: i486 -O2 -g -march=i486
-optflags: i586 -O2 -g -march=i586
-optflags: i686 -O2 -g -march=i686
+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
+optflags: x86_64 -O2 -g -fmessage-length=0 -D_FORTIFY_SOURCE=2
optflags: amd64 -O2 -g
optflags: ia32e -O2 -g
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
-optflags: ppc -O2 -g -fsigned-char
-optflags: ppc8260 -O2 -g -fsigned-char
-optflags: ppc8560 -O2 -g -fsigned-char
-optflags: ppc32dy4 -O2 -g -fsigned-char
-optflags: ppciseries -O2 -g -fsigned-char
-optflags: ppcpseries -O2 -g -fsigned-char
-optflags: ppc64 -O2 -g -fsigned-char
+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
@@ -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 -fmessage-length=0
+optflags: s390x -O2 -g -fmessage-length=0
#############################################################
# Canonical arch names and numbers
@@ -181,16 +182,16 @@ os_canon: MacOSX: macosx 21
#############################################################
# For a given uname().machine, the default build arch
-buildarchtranslate: osfmach3_i686: i386
-buildarchtranslate: osfmach3_i586: i386
+buildarchtranslate: osfmach3_i686: i586
+buildarchtranslate: osfmach3_i586: i586
buildarchtranslate: osfmach3_i486: i386
buildarchtranslate: osfmach3_i386: i386
-buildarchtranslate: athlon: i386
-buildarchtranslate: pentium4: i386
-buildarchtranslate: pentium3: i386
-buildarchtranslate: i686: i386
-buildarchtranslate: i586: i386
+buildarchtranslate: athlon: i586
+buildarchtranslate: pentium4: i586
+buildarchtranslate: pentium3: i586
+buildarchtranslate: i686: i586
+buildarchtranslate: i586: i586
buildarchtranslate: i486: i386
buildarchtranslate: i386: i386
@@ -217,6 +218,7 @@ buildarchtranslate: ppciseries: ppc
buildarchtranslate: ppcpseries: ppc
buildarchtranslate: ppc64iseries: ppc64
buildarchtranslate: ppc64pseries: ppc64
+buildarchtranslate: powerpc64: ppc64
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
+buildarchtranslate: hppa64: hppa
+
+buildarchtranslate: armv5l: armv4l
+buildarchtranslate: armv5tel: armv4l
+buildarchtranslate: armv5b: armv4b
+buildarchtranslate: armv5teb: armv4b
+
#############################################################
# Architecture compatibility
@@ -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
-arch_compat: hppa1.0: parisc
+arch_compat: hppa1.0: hppa
+arch_compat: hppa: parisc
arch_compat: parisc: noarch
+arch_compat: armv5teb: armv5b
+arch_compat: armv5b: armv4b
arch_compat: armv4b: noarch
+
+arch_compat: armv5tel: armv5l
+arch_compat: armv5l: armv4l
arch_compat: armv4l: armv3l
arch_compat: armv3l: 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
@@ -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
-buildarch_compat: hppa1.0: parisc
+buildarch_compat: hppa1.0: hppa
+buildarch_compat: hppa: parisc
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
#*/

112
rpmrctests.diff Normal file
View File

@ -0,0 +1,112 @@
Patch machine detection code: always use "ppc", restore SIGILL
handler, detect transmeta. [#52713]
--- ./lib/rpmrc.c.orig 2005-01-17 18:46:23.000000000 +0000
+++ ./lib/rpmrc.c 2005-12-16 18:30:29.000000000 +0000
@@ -2,9 +2,6 @@
#include "system.h"
#include <stdarg.h>
-#if defined(__linux__) && defined(__powerpc__)
-#include <setjmp.h>
-#endif
#include <ctype.h> /* XXX for /etc/rpm/platform contents */
@@ -953,20 +950,38 @@ static inline int RPMClass(void)
{
int cpu;
unsigned int tfms, junk, cap, capamd;
+ struct sigaction oldsa;
+ sigaction(SIGILL, NULL, &oldsa);
signal(SIGILL, model3);
- if (sigsetjmp(jenv, 1))
+ if (sigsetjmp(jenv, 1)) {
+ sigaction(SIGILL, &oldsa, NULL);
return 3;
+ }
- if (cpuid_eax(0x000000000)==0)
+ if (cpuid_eax(0x000000000)==0) {
+ sigaction(SIGILL, &oldsa, NULL);
return 4;
+ }
cpuid(0x00000001, &tfms, &junk, &junk, &cap);
cpuid(0x80000001, &junk, &junk, &junk, &capamd);
cpu = (tfms>>8)&15;
+ /* 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))) {
+ sigaction(SIGILL, &oldsa, NULL);
+ return 6; /* has CX8 and CMOV */
+ }
+
+ sigaction(SIGILL, &oldsa, NULL);
+
if (cpu < 6)
return cpu;
@@ -1076,15 +1091,6 @@ static int is_pentium4()
#endif
-#if defined(__linux__) && defined(__powerpc__)
-static jmp_buf mfspr_jmpbuf;
-
-static void mfspr_ill(int notused)
-{
- longjmp(mfspr_jmpbuf, -1);
-}
-#endif
-
/**
*/
static void defaultMachine(/*@out@*/ const char ** arch,
@@ -1219,6 +1225,11 @@ static void defaultMachine(/*@out@*/ con
/* big endian */
strcpy(un.machine, "mips");
# endif
+ /* in linux, lets rename parisc to hppa */
+#if defined(__linux__)
+ if (!strcmp(un.machine,"parisc"))
+ strcpy(un.machine,"hppa");
+#endif
# 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,

76
rpmsort Normal file
View File

@ -0,0 +1,76 @@
#! /usr/bin/perl -w
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
# USA.
use Getopt::Long qw(:config gnu_getopt);
sub rpm_cmp_versions {
my ($evr1, $evr2) = @_;
sub _rpm_cmp {
my ($s1, $s2) = @_;
return defined $s1 <=> defined $s2
unless defined $s1 && defined $s2;
my ($r, $x1, $x2);
do {
$s1 =~ s/^[^a-zA-Z0-9]+//;
$s2 =~ s/^[^a-zA-Z0-9]+//;
if ($s1 =~ /^\d/ || $s2 =~ /^\d/) {
$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;
$s2 =~ s/^([a-zA-Z]*)//; $x2 = $1;
return 0
if $x1 eq '' && $x2 eq '';
$r = $x1 cmp $x2;
}
} until $r;
return $r;
}
my ($e1, $v1, $r1) = $evr1 =~ /^(?:(\d*):)?(.*?)(?:-([^-]*))?$/;
my ($e2, $v2, $r2) = $evr2 =~ /^(?:(\d*):)?(.*?)(?:-([^-]*))?$/;
my $r = _rpm_cmp($e1 || 0, $e2 || 0);
$r = _rpm_cmp($v1, $v2)
unless $r;
$r = _rpm_cmp($r1, $r2)
unless $r;
return $r;
}
my $reorder = sub { return @_ };
my $key = 0;
GetOptions ("r|reverse" => sub { $reorder = sub { return reverse @_ } },
"k|key=i" => \$key)
or do {
print STDERR "Usage\n";
exit 1;
};
if ($key == 0) {
# Sort by entire lines
map { print } &$reorder(sort { rpm_cmp_versions($a, $b) } <>);
} else {
# Sort by field $key
my @data = map { [(split)[$key-1], $_] } <>;
map { print } &$reorder(map { $_->[1] }
sort { rpm_cmp_versions($a->[0], $b->[0]) } @data);
}

105
sbitcheck.diff Normal file
View File

@ -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;
}
}

20
setpermsugids.diff Normal file
View File

@ -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 \

21
signature.diff Normal file
View File

@ -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);

16
signwriteerror.diff Normal file
View File

@ -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;

19
spectest.diff Normal file
View File

@ -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@*/
}
}

119
sqcondmutex.diff Normal file
View File

@ -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

68
srcdefattr.diff Normal file
View File

@ -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;
}

161
suspendlock.diff Normal file
View File

@ -0,0 +1,161 @@
Suspend exclusive database lock when scriptlets get called, allowing
read access in scriptlets. Only needed for DB_PRIVATE (aka global)
locking.
I hijacked the dbiSync function for this because I did not want
to change the ABI.
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);
+
/*@-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;
}
+int rpmtsSuspendResumeDBLock(rpmts ts, int mode)
+{
+ return rpmdbSuspendResumeDBLock(ts->rdb, mode);
+}
+
int rpmtsInitDB(rpmts ts, int dbmode)
{
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)
+ /*@globals fileSystem @*/
+ /*@modifies fileSystem @*/;
+
/** \ingroup rpmts
* 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,

35
symset-table Normal file
View File

@ -0,0 +1,35 @@
#! /bin/sh
# Create a table of all symbol sets defined in all /boot/symsets*.tar.gz
# files.
#
# Format:
# kernelrelease/modver/symbol <tab> symset <tab> symset_hash
#
# This table is needed for computing the appropriate Requires: tags for
# kernel module packages.
tmpdir=$(mktemp -t -d ${0##*/}.XXXXXX)
trap "cd / ; rm -rf $tmpdir" EXIT
cd $tmpdir
shopt -s nullglob
for symsets in /boot/symsets-*.tar.gz; do
zcat $symsets \
| tar xf -
done
for symsets in *; do
krel=${symsets#symsets-}
for symset in $symsets/*; do
class=${symset##*/} ; class=${class%.*}
hash=${symset##*.}
awk '
BEGIN { FS = "\t" ; OFS = "\t" }
{ sub(/0x0*/, "", $1)
print krel "/" $1 "/" $2, class, hash }
' krel="$krel" class="$class" hash="$hash" $symset
done
done
# vim:shiftwidth=4 softtabstop=4

17
sysconfig.services-rpm Normal file
View File

@ -0,0 +1,17 @@
## Path: System/Services
## Type: yesno
## Default: no
#
# Do you want to disable the automatic restart of services when
# a new version gets installed?
#
DISABLE_RESTART_ON_UPDATE="no"
## Type: yesno
## Default: no
#
# Do you want to disable the automatic shutdown of services when
# the corresponding package gets erased?
#
DISABLE_STOP_ON_REMOVAL="no"

119
taggedfileindex.diff Normal file
View File

@ -0,0 +1,119 @@
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));
}

37
tagsbackport.diff Normal file
View File

@ -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, */

13
totalsizenoexclude.diff Normal file
View File

@ -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;
}

37
translockroot.diff Normal file
View File

@ -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@*/

31
vercmp.diff Normal file
View File

@ -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);

15
verifylstatfail.diff Normal file
View File

@ -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()) {

98
waitlock.diff Normal file
View File

@ -0,0 +1,98 @@
Fix global (DB_PRIVATE) lock code: fix recursion counter, retry
failed lock operations for up to 3 minutes.
--- ./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;
+
/*@-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
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--;
}
@@ -1138,8 +1157,6 @@ static int db3open(rpmdb rpmdb, rpmTag r
prDbiOpenFlags(oflags, 0), dbi->dbi_mode);
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--;
}
}
}

318
weakdeps.diff Normal file
View File

@ -0,0 +1,318 @@
Add support for weak dependencies:
A) use RPMTAG_SUGGESTS and RPMTAG_ENHANCES to store them.
This is different to upstream, which uses RPMSENSE_MISSINGOK
and RPMTAG_REQUIRES/RPMTAG_PROVIDES instead. I chose different
tags because I wanted to be compatible. The point is that
applications that don't know about the new MISSINGOK semantics
will mis-interpret the provides/requires otherwise, which
I deemed to risky.
B) use RPMSENSE_STRONG to support a "strong" version, "Recommends"
instead of "Suggests" and "Supplements" instead of "Enhances".
Needs extcond.diff for query operations.
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 },
+ { "hint", RPMSENSE_MISSINGOK },
+ { "strong", RPMSENSE_STRONG },
{ NULL, 0 }
};
@@ -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;
+ case RPMTAG_SUGGESTSFLAGS:
+ case RPMTAG_ENHANCESFLAGS:
+ case RPMTAG_BUILDSUGGESTS:
+ case RPMTAG_BUILDENHANCES:
+ tagflags = RPMSENSE_MISSINGOK;
+ if (macro && (!strcmp(macro, "recommends") || !strcmp(macro, "buildrecommends")))
+ tagflags |= RPMSENSE_STRONG;
+ if (macro && (!strcmp(macro, "supplements") || !strcmp(macro, "buildsupplements")))
+ tagflags |= RPMSENSE_STRONG;
+ if ((rc = parseRCPOT(spec, pkg, field, tag, 0, tagflags)))
+ return rc;
+ break;
case RPMTAG_EXCLUDEARCH:
case RPMTAG_EXCLUSIVEARCH:
case RPMTAG_EXCLUDEOS:
@@ -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:
+ case RPMTAG_ENHANCESFLAGS:
+ h = pkg->header;
+ break;
+ case RPMTAG_BUILDSUGGESTS:
+ case RPMTAG_BUILDENHANCES:
+ 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;
+ } else if (tagN == RPMTAG_SUGGESTSFLAGS || tagN == RPMTAG_BUILDSUGGESTS) {
+ nametag = RPMTAG_SUGGESTSNAME;
+ versiontag = RPMTAG_SUGGESTSVERSION;
+ flagtag = RPMTAG_SUGGESTSFLAGS;
+ extra = Flags & _ALL_REQUIRES_MASK;
+ } else if (tagN == RPMTAG_ENHANCESFLAGS || tagN == RPMTAG_BUILDENHANCES) {
+ nametag = RPMTAG_ENHANCESNAME;
+ versiontag = RPMTAG_ENHANCESVERSION;
+ flagtag = RPMTAG_ENHANCESFLAGS;
+ extra = Flags & _ALL_REQUIRES_MASK;
} 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 },
+ { "Enhances", { "%{?__find_enhances}", NULL, NULL, NULL },
+ RPMTAG_ENHANCESNAME, RPMTAG_ENHANCESVERSION, RPMTAG_ENHANCESFLAGS,
+ RPMSENSE_STRONG, RPMSENSE_STRONG },
+ { "Supplements", { "%{?__find_supplements}", NULL, NULL, NULL },
+ RPMTAG_ENHANCESNAME, RPMTAG_ENHANCESVERSION, RPMTAG_ENHANCESFLAGS,
+ RPMSENSE_STRONG, 0 },
{ NULL, { NULL, NULL, NULL, NULL }, 0, 0, 0, 0, 0 }
};
@@ -1445,6 +1451,14 @@ static int rpmfcGenerateDependsHelper(co
failnonzero = 0;
tagflags = RPMSENSE_FIND_REQUIRES;
/*@switchbreak@*/ break;
+ case RPMTAG_ENHANCESFLAGS:
+ if (!pkg->autoProv)
+ continue;
+ failnonzero = 0;
+ tagflags = RPMSENSE_FIND_REQUIRES | RPMSENSE_MISSINGOK;
+ if (strcmp(dm->msg, "Supplements") == 0)
+ tagflags |= RPMSENSE_STRONG;
+ /*@switchbreak@*/ break;
default:
continue;
/*@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),
- 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_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);
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 \
+ "[%|SUGGESTSFLAGS:depflag_strong?{}:{%{SUGGESTSNAME} %{SUGGESTSFLAGS:depflags} %{SUGGESTSVERSION}\n}|]" \
+ --POPTdesc=$"list capabilities this package suggests"
+
+rpm alias --recommends --qf \
+ "[%|SUGGESTSFLAGS:depflag_strong?{%{SUGGESTSNAME} %{SUGGESTSFLAGS:depflags} %{SUGGESTSVERSION}\n}|]" \
+ --POPTdesc=$"list capabilities this package recommends"
+
+rpm alias --enhances --qf \
+ "[%|ENHANCESFLAGS:depflag_strong?{}:{%{ENHANCESNAME} %{ENHANCESFLAGS:depflags} %{ENHANCESVERSION}\n}|]" \
+ --POPTdesc=$"list capabilities this package enhances"
+
+rpm alias --supplements --qf \
+ "[%|ENHANCESFLAGS:depflag_strong?{%{ENHANCESNAME} %{ENHANCESFLAGS:depflags} %{ENHANCESVERSION}\n}|]" \
+ --POPTdesc=$"list capabilities this package supplements"
+
rpm alias --info --qf 'Name : %-27{NAME} Relocations: %|PREFIXES?{[%{PREFIXES} ]}:{(not relocatable)}|\n\
Version : %-27{VERSION} Vendor: %{VENDOR}\n\
Release : %-27{RELEASE} Build Date: %{BUILDTIME:date}\n\
@@ -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 } },