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