This commit is contained in:
commit
3c349e9165
23
.gitattributes
vendored
Normal file
23
.gitattributes
vendored
Normal 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
1
.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
||||
.osc
|
3
RPM-Changes.html.tar.bz2
Normal file
3
RPM-Changes.html.tar.bz2
Normal 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
3
RPM-HOWTO.tar.bz2
Normal 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
3
RPM-Tips.html.tar.bz2
Normal file
@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:20f81d1ea9e4c64dddba197d8717f9e2d082814c806f722280d3ea34854c728a
|
||||
size 3206
|
16
aloffbyone.diff
Normal file
16
aloffbyone.diff
Normal 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
262
autodeps.diff
Normal 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
17
badforsyntax.diff
Normal 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
46
beecrypt-4.1.2.diff
Normal 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
3
beecrypt-4.1.2.tar.bz2
Normal file
@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:67ef64715912e978b426ad514567e189039016b9f04d52783865a2dafb27b578
|
||||
size 563414
|
263
brp.diff
Normal file
263
brp.diff
Normal 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
56
brpcombress.diff
Normal 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
574
build.diff
Normal 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
24
buildsubdir.diff
Normal 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
16
checkfilesnoinfodir.diff
Normal 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
26
chownwarn.diff
Normal 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
31
compress.diff
Normal 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
35
convertdb1static.diff
Normal 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
111
db.diff
Normal 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
54
dbfsync.diff
Normal 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
14
dbprivate.diff
Normal 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
57
dbrointerruptable.diff
Normal 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
52
debugedit.diff
Normal 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
23
diskspace.diff
Normal 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
36
docdir_fmt.diff
Normal 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
151
elfutils-0.97.diff
Normal 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
3
elfutils-0.97.tar.bz2
Normal file
@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:105115416927f1498abecd7741af0d178a31a2bc780b3ab935b78bac48bac342
|
||||
size 216798
|
16
emptyfilelist.diff
Normal file
16
emptyfilelist.diff
Normal 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
16
erasebadreturn.diff
Normal 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
28
eraseignoresize.diff
Normal 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
21
eraseordered.diff
Normal 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
15
exitstatus.diff
Normal 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
78
extcond.diff
Normal 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
12
filenonull.diff
Normal 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
14
filequery.diff
Normal 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
102
finddebuginfo.diff
Normal 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
114
findfplistexclude.diff
Normal 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
90
findksyms.diff
Normal 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
119
findlang.diff
Normal 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
40
forkfailed.diff
Normal 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
30
getcwdresult.diff
Normal 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
17
ghost.diff
Normal 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
18
globlstat.diff
Normal 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
13
globoffbyone.diff
Normal 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
25
initdbret.diff
Normal 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
16
legacyprereq.diff
Normal 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
225
localetag.diff
Normal 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
32
luanoreadline.diff
Normal 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
75
luaroot.diff
Normal 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
425
macrosin.diff
Normal 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
39
missingok.diff
Normal 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 | \
|
61
modalias-kernel_module.diff
Normal file
61
modalias-kernel_module.diff
Normal 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
95
modalias.diff
Normal 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
53
nameversioncompare.diff
Normal 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
15
nodefattr.diff
Normal 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
83
nolua.diff
Normal 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
292
noneon.diff
Normal 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
13
nostdoutclose.diff
Normal 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
14
obeynodbsync.diff
Normal 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
55
openallbuttemp.diff
Normal 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
743
patchrpms.diff
Normal 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
40
payloadformat.diff
Normal 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
18
pgpdecodeearly.diff
Normal 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
49
platformin.diff
Normal 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
21
prereqorder.diff
Normal 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
14
probfilter.diff
Normal 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
43
querybuffer.diff
Normal 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);
|
22
rebuilddbroot.diff
Normal file
22
rebuilddbroot.diff
Normal 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
24
refreshtestarch.diff
Normal 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
3
rpm-4.4.2.tar.bz2
Normal file
@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:abc1b6a909e904ee220e32cd0c534fe19b8ea7cb2d3e8cfe395e221773e62c8c
|
||||
size 8955447
|
34
rpm-python.changes
Normal file
34
rpm-python.changes
Normal 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
80
rpm-python.spec
Normal 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
459
rpm-suse_macros
Normal 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
2004
rpm.changes
Normal file
File diff suppressed because it is too large
Load Diff
76
rpmconfigcheck
Normal file
76
rpmconfigcheck
Normal 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
89
rpmpopt.diff
Normal 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
136
rpmqpack.diff
Normal 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
195
rpmrc.diff
Normal 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
112
rpmrctests.diff
Normal 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
76
rpmsort
Normal 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
105
sbitcheck.diff
Normal 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
20
setpermsugids.diff
Normal 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
21
signature.diff
Normal 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
16
signwriteerror.diff
Normal 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
19
spectest.diff
Normal 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
119
sqcondmutex.diff
Normal 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
68
srcdefattr.diff
Normal 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
161
suspendlock.diff
Normal 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
35
symset-table
Normal 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
17
sysconfig.services-rpm
Normal 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
119
taggedfileindex.diff
Normal 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
37
tagsbackport.diff
Normal 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
13
totalsizenoexclude.diff
Normal 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
37
translockroot.diff
Normal 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
31
vercmp.diff
Normal 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
15
verifylstatfail.diff
Normal 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
98
waitlock.diff
Normal 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
318
weakdeps.diff
Normal 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 } },
|
Loading…
Reference in New Issue
Block a user