diff --git a/backport.diff b/backport.diff new file mode 100644 index 0000000..734f84f --- /dev/null +++ b/backport.diff @@ -0,0 +1,55 @@ +A couple of fixes picked from upstream. + +--- ./lib/rpminstall.c.orig 2010-04-08 12:35:48.000000000 +0000 ++++ ./lib/rpminstall.c 2010-04-08 12:36:00.000000000 +0000 +@@ -458,7 +458,7 @@ restart: + case URL_IS_HTTPS: + case URL_IS_HTTP: + case URL_IS_FTP: +- { char *tfn; ++ { char *tfn = NULL; + FD_t tfd; + + if (rpmIsVerbose()) +--- ./lib/transaction.c.orig 2010-04-08 12:33:22.000000000 +0000 ++++ ./lib/transaction.c 2010-04-08 12:35:00.000000000 +0000 +@@ -183,6 +183,10 @@ static void rpmtsUpdateDSI(const rpmts t + + if (fixupSize) + dsi->bneeded -= BLOCK_ROUND(fixupSize, dsi->bsize); ++ ++ /* adjust bookkeeping when requirements shrink */ ++ if (dsi->bneeded < dsi->obneeded) dsi->obneeded = dsi->bneeded; ++ if (dsi->ineeded < dsi->oineeded) dsi->oineeded = dsi->ineeded; + } + + static void rpmtsFindDSIMount(const rpmts ts, rpmDiskSpaceInfo dsi) +@@ -231,7 +235,7 @@ static void rpmtsCheckDSIProblems(const + for (; dsi->bsize; dsi++) { + + if (dsi->bavail >= 0 && adj_fs_blocks(dsi->bneeded) > dsi->bavail) { +- if (dsi->bneeded != dsi->obneeded) { ++ if (dsi->bneeded > dsi->obneeded) { + if (!dsi->mntPoint) + rpmtsFindDSIMount(ts, dsi); + rpmpsAppend(ps, RPMPROB_DISKSPACE, +@@ -243,7 +247,7 @@ static void rpmtsCheckDSIProblems(const + } + + if (dsi->iavail >= 0 && adj_fs_blocks(dsi->ineeded) > dsi->iavail) { +- if (dsi->ineeded != dsi->oineeded) { ++ if (dsi->ineeded > dsi->oineeded) { + if (!dsi->mntPoint) + rpmtsFindDSIMount(ts, dsi); + rpmpsAppend(ps, RPMPROB_DISKNODES, +--- ./lib/verify.c.orig 2010-04-08 12:36:09.000000000 +0000 ++++ ./lib/verify.c 2010-04-08 12:37:37.000000000 +0000 +@@ -348,7 +348,7 @@ static int verifyHeader(QVA_t qva, const + static const char *const aok = "."; + static const char *const unknown = "?"; + +- ec = (verifyResult != 0); ++ if (verifyResult) ec = 1; + + #define _verify(_RPMVERIFY_F, _C) \ + ((verifyResult & _RPMVERIFY_F) ? _C : aok) diff --git a/fontprovides.diff b/fontprovides.diff new file mode 100644 index 0000000..70d7537 --- /dev/null +++ b/fontprovides.diff @@ -0,0 +1,64 @@ +--- ./autodeps/linux.prov.orig 2010-04-08 14:52:42.000000000 +0000 ++++ ./autodeps/linux.prov 2010-04-08 15:04:37.000000000 +0000 +@@ -16,6 +16,8 @@ tcllist= + monolist=($(printf "%s\n" "${filelist[@]}" | egrep "\\.(exe|dll)\$")) + mimetypelist=($(printf "%s\n" "${filelist[@]}" | egrep "\\.(desktop)\$")) + firmwarelist=($(printf "%s\n" "${filelist[@]}" | grep "/lib/firmware/")) ++pkgconfiglist=($(printf "%s\n" "${filelist[@]}" | egrep '\.pc$')) ++fontlist=($(printf "%s\n" "${filelist[@]}" | egrep -i "/usr/share/fonts/.*\.(ttf|otf|pfa)$")) + + # + # --- Alpha does not mark 64bit dependencies +@@ -86,6 +88,16 @@ if [ -x $MONO_PREFIX/bin/mono -a -n "$mo + fi + + # ++# --- pkgconfig provides ++[ -x /usr/lib/rpm/pkgconfigdeps.sh -a -n "$pkgconfiglist" ] && ++ printf "%s\n" "${pkgconfiglist[@]}" | /usr/lib/rpm/pkgconfigdeps.sh -P | sort -u ++ ++# ++# --- font provides ++[ -x /usr/lib/rpm/fontconfig.prov -a -n "$fontlist" ] && ++ printf "%s\n" "${fontlist[@]}" | /usr/lib/rpm/fontconfig.prov | sort -u ++ ++# + # --- Kernel module exported symbols + [ -x /usr/lib/rpm/find-provides.ksyms ] && + printf "%s\n" "${filelist[@]}" | /usr/lib/rpm/find-provides.ksyms "$@" +--- ./autodeps/linux.req.orig 2010-04-08 15:01:18.000000000 +0000 ++++ ./autodeps/linux.req 2010-04-08 15:04:20.000000000 +0000 +@@ -35,6 +35,7 @@ perllist=() + pythonlist=($(printf "%s\n" "${filelist[@]}" | egrep '/usr/lib[^/]*/python.\..')) + tcllist=() + monolist=($(printf "%s\n" "${filelist[@]}" | egrep "\\.(exe|dll)(\\.config)?\$")) ++pkgconfiglist=($(printf "%s\n" "${filelist[@]}" | egrep '\.pc$')) + + # + # --- Alpha does not mark 64bit dependencies +@@ -144,6 +145,11 @@ if [ -x $MONO_PREFIX/bin/mono -a -n "$mo + fi + + # ++# --- pkgconfig requires ++[ -x /usr/lib/rpm/pkgconfigdeps.sh -a -n "$pkgconfiglist" ] && ++ printf "%s\n" "${pkgconfiglist[@]}" | /usr/lib/rpm/pkgconfigdeps.sh -R | sort -u ++ ++# + # --- Kernel module imported symbols + [ -x ${0%/*}/find-requires.ksyms ] && + printf "%s\n" "${filelist[@]}" | ${0%/*}/find-requires.ksyms "$@" +--- ./scripts/fontconfig.prov.orig 2010-04-08 14:57:21.000000000 +0000 ++++ ./scripts/fontconfig.prov 2010-04-08 14:57:42.000000000 +0000 +@@ -12,7 +12,10 @@ + + fcquery=/usr/bin/fc-query + +-[ -x $fcquery ] || exit 0 ++[ -x $fcquery ] || { ++ cat > /dev/null ++ exit 0 ++} + + # filter out anything outside main fontconfig path + grep /usr/share/fonts/ | diff --git a/noprereqdeprec.diff b/noprereqdeprec.diff new file mode 100644 index 0000000..7ac25c2 --- /dev/null +++ b/noprereqdeprec.diff @@ -0,0 +1,20 @@ +--- ./build/parsePreamble.c.orig 2010-04-07 14:52:57.000000000 +0000 ++++ ./build/parsePreamble.c 2010-04-07 14:53:51.000000000 +0000 +@@ -748,7 +748,7 @@ static struct PreambleRec_s const preamb + {RPMTAG_ICON, 0, 0, LEN_AND_STR("icon")}, + {RPMTAG_PROVIDEFLAGS, 0, 0, LEN_AND_STR("provides")}, + {RPMTAG_REQUIREFLAGS, 1, 0, LEN_AND_STR("requires")}, +- {RPMTAG_PREREQ, 1, 1, LEN_AND_STR("prereq")}, ++ {RPMTAG_PREREQ, 1, 0, LEN_AND_STR("prereq")}, + {RPMTAG_CONFLICTFLAGS, 0, 0, LEN_AND_STR("conflicts")}, + {RPMTAG_OBSOLETEFLAGS, 0, 0, LEN_AND_STR("obsoletes")}, + {RPMTAG_PREFIXES, 0, 0, LEN_AND_STR("prefixes")}, +@@ -757,7 +757,7 @@ static struct PreambleRec_s const preamb + {RPMTAG_BUILDARCHS, 0, 0, LEN_AND_STR("buildarchitectures")}, + {RPMTAG_BUILDARCHS, 0, 0, LEN_AND_STR("buildarch")}, + {RPMTAG_BUILDCONFLICTS, 0, 0, LEN_AND_STR("buildconflicts")}, +- {RPMTAG_BUILDPREREQ, 1, 1, LEN_AND_STR("buildprereq")}, ++ {RPMTAG_BUILDPREREQ, 1, 0, LEN_AND_STR("buildprereq")}, + {RPMTAG_BUILDREQUIRES, 1, 0, LEN_AND_STR("buildrequires")}, + {RPMTAG_AUTOREQPROV, 0, 0, LEN_AND_STR("autoreqprov")}, + {RPMTAG_AUTOREQ, 0, 0, LEN_AND_STR("autoreq")}, diff --git a/nosignature.diff b/nosignature.diff new file mode 100644 index 0000000..0802056 --- /dev/null +++ b/nosignature.diff @@ -0,0 +1,23 @@ +Do not load keyring if signature checking is disabled. + +--- ./lib/package.c.orig 2010-04-09 09:56:42.000000000 +0000 ++++ ./lib/package.c 2010-04-09 09:57:50.000000000 +0000 +@@ -760,12 +760,16 @@ exit: + rpmRC rpmReadPackageFile(rpmts ts, FD_t fd, const char * fn, Header * hdrp) + { + rpmRC rc; +- rpmKeyring keyring = rpmtsGetKeyring(ts, 1); + rpmVSFlags vsflags = rpmtsVSFlags(ts); ++ rpmKeyring keyring = 0; ++ ++ if ((vsflags & _RPMVSF_NOSIGNATURES) != _RPMVSF_NOSIGNATURES) ++ keyring = rpmtsGetKeyring(ts, 1); + + rc = rpmpkgRead(keyring, vsflags, fd, fn, hdrp); + +- rpmKeyringFree(keyring); ++ if (keyring) ++ rpmKeyringFree(keyring); + return rc; + } + diff --git a/nosource.diff b/nosource.diff new file mode 100644 index 0000000..e824db0 --- /dev/null +++ b/nosource.diff @@ -0,0 +1,36 @@ +rpm does not allow headerPutUint32 on internal tags, so use +headerPut instead. (Maybe NOSOURCE/NOPATCH should not be internal +at all, though.) + +--- ./build/files.c.orig 2010-04-08 16:23:42.000000000 +0000 ++++ ./build/files.c 2010-04-08 16:23:44.000000000 +0000 +@@ -2088,15 +2088,25 @@ int processSourceFiles(rpmSpec spec) + if (srcPtr->flags & RPMBUILD_ISSOURCE) { + headerPutString(spec->sourceHeader, RPMTAG_SOURCE, srcPtr->source); + if (srcPtr->flags & RPMBUILD_ISNO) { +- headerPutUint32(spec->sourceHeader, RPMTAG_NOSOURCE, +- &srcPtr->num, 1); ++ struct rpmtd_s td; ++ rpmtdReset(&td); ++ td.tag = RPMTAG_NOSOURCE; ++ td.type = RPM_INT32_TYPE; ++ td.data = &srcPtr->num; ++ td.count = 1; ++ headerPut(spec->sourceHeader, &td, HEADERPUT_APPEND); + } + } + if (srcPtr->flags & RPMBUILD_ISPATCH) { + headerPutString(spec->sourceHeader, RPMTAG_PATCH, srcPtr->source); + if (srcPtr->flags & RPMBUILD_ISNO) { +- headerPutUint32(spec->sourceHeader, RPMTAG_NOSOURCE, +- &srcPtr->num, 1); ++ struct rpmtd_s td; ++ rpmtdReset(&td); ++ td.tag = RPMTAG_NOPATCH; ++ td.type = RPM_INT32_TYPE; ++ td.data = &srcPtr->num; ++ td.count = 1; ++ headerPut(spec->sourceHeader, &td, HEADERPUT_APPEND); + } + } + diff --git a/pythondeps.diff b/pythondeps.diff new file mode 100644 index 0000000..6f07ea7 --- /dev/null +++ b/pythondeps.diff @@ -0,0 +1,69 @@ +--- ./autodeps/linux.prov.orig 2010-04-08 13:32:56.000000000 +0000 ++++ ./autodeps/linux.prov 2010-04-08 13:38:44.000000000 +0000 +@@ -11,7 +11,7 @@ filelist=($(printf "%s\n" "${filelist[@] + solist=($(printf "%s\n" "${filelist[@]}" | grep "\\.so" | grep -v "^/lib/ld.so" | \ + tr '\n' '\0' | xargs -0 -r file -L | grep "ELF.*shared object" | \ + cut -d: -f1)) +-pythonlist= ++pythonlist=($(printf "%s\n" "${filelist[@]}" | egrep '/usr/bin/python.\..$')) + tcllist= + monolist=($(printf "%s\n" "${filelist[@]}" | egrep "\\.(exe|dll)\$")) + mimetypelist=($(printf "%s\n" "${filelist[@]}" | egrep "\\.(desktop)\$")) +@@ -55,8 +55,8 @@ done | sort -u + + # + # --- Python modules. +-[ -x /usr/lib/rpm/python.prov -a -n "$pythonlist" ] && +- printf "%s\n" "${pythonlist[@]}" | /usr/lib/rpm/python.prov | sort -u ++[ -x /usr/lib/rpm/pythondeps.sh -a -n "$pythonlist" ] && ++ printf "%s\n" "${pythonlist[@]}" | /usr/lib/rpm/pythondeps.sh -P | sort -u + + # + # --- Tcl modules. +--- ./autodeps/linux.req.orig 2010-04-08 13:36:47.000000000 +0000 ++++ ./autodeps/linux.req 2010-04-08 13:40:25.000000000 +0000 +@@ -32,7 +32,7 @@ liblist=($(printf "%s\0" "${filelist[@]} + + interplist=() + perllist=() +-pythonlist=() ++pythonlist=($(printf "%s\n" "${filelist[@]}" | egrep '/usr/lib[^/]*/python.\..')) + tcllist=() + monolist=($(printf "%s\n" "${filelist[@]}" | egrep "\\.(exe|dll)(\\.config)?\$")) + +@@ -128,8 +128,8 @@ done | sort -u + + # + # --- Python modules. +-[ -x /usr/lib/rpm/python.req -a -n "$pythonlist" ] && \ +- printf "%s\n" "${pythonlist[@]}" | /usr/lib/rpm/python.req | sort -u ++[ -x /usr/lib/rpm/pythondeps.sh -a -n "$pythonlist" ] && \ ++ printf "%s\n" "${pythonlist[@]}" | /usr/lib/rpm/pythondeps.sh -R | sort -u + + # + # --- Tcl modules. +--- ./scripts/pythondeps.sh.orig 2010-04-08 13:40:34.000000000 +0000 ++++ ./scripts/pythondeps.sh 2010-04-08 13:42:19.000000000 +0000 +@@ -5,17 +5,17 @@ + exit 0 + } + +-PYVER=`python -c "import sys; v=sys.version_info[:2]; print '%d.%d'%v"` + case $1 in + -P|--provides) + shift +- grep "/usr/bin/python\*\$" >& /dev/null && echo "python(abi) = ${PYVER}" +- exit 0 ++ grep "/usr/bin/python.\..$" \ ++ | sed -e "s|.*/usr/bin/python\(.\..\)|python(abi) = \1|" + ;; + -R|--requires) + shift +- grep "/usr/lib[^/]*/python${PYVER}/" >& /dev/null && echo "python(abi) = ${PYVER}" +- exit 0 ++ grep "/usr/lib[^/]*/python.\../.*" \ ++ | sed -e "s|.*/usr/lib[^/]*/python\(.\..\)/.*|python(abi) = \1|g" \ ++ | sort | uniq + ;; + esac + diff --git a/resetdefattr.diff b/resetdefattr.diff new file mode 100644 index 0000000..0e2a892 --- /dev/null +++ b/resetdefattr.diff @@ -0,0 +1,55 @@ +--- ./build/files.c.orig 2010-04-07 14:27:54.000000000 +0000 ++++ ./build/files.c 2010-04-07 14:51:11.000000000 +0000 +@@ -561,8 +561,13 @@ static rpmRC parseForAttr(const char * b + } + ar->ar_fmode = ui; + } else { +- ar->ar_fmodestr = fl->def_ar.ar_fmodestr; +- ar->ar_fmode = fl->def_ar.ar_fmode; ++ if (ret_ar == &(fl->def_ar)) { ++ ar->ar_fmodestr = NULL; ++ ar->ar_fmode = 0; ++ } else { ++ ar->ar_fmodestr = fl->def_ar.ar_fmodestr; ++ ar->ar_fmode = fl->def_ar.ar_fmode; ++ } + } + + if (ar->ar_dmodestr && !isAttrDefault(ar->ar_dmodestr)) { +@@ -574,15 +579,30 @@ static rpmRC parseForAttr(const char * b + } + ar->ar_dmode = ui; + } else { +- ar->ar_dmodestr = fl->def_ar.ar_dmodestr; +- ar->ar_dmode = fl->def_ar.ar_dmode; ++ if (ret_ar == &(fl->def_ar)) { ++ ar->ar_dmodestr = NULL; ++ ar->ar_dmode = 0; ++ } else { ++ ar->ar_dmodestr = fl->def_ar.ar_dmodestr; ++ ar->ar_dmode = fl->def_ar.ar_dmode; ++ } + } + +- if (!(ar->ar_user && !isAttrDefault(ar->ar_user))) +- ar->ar_user = fl->def_ar.ar_user; ++ if (!(ar->ar_user && !isAttrDefault(ar->ar_user))) { ++ if (ret_ar == &(fl->def_ar)) { ++ ar->ar_user = NULL; ++ } else { ++ ar->ar_user = fl->def_ar.ar_user; ++ } ++ } + +- if (!(ar->ar_group && !isAttrDefault(ar->ar_group))) +- ar->ar_group = fl->def_ar.ar_group; ++ if (!(ar->ar_group && !isAttrDefault(ar->ar_group))) { ++ if (ret_ar == &(fl->def_ar)) { ++ ar->ar_group = 0; ++ } else { ++ ar->ar_group = fl->def_ar.ar_group; ++ } ++ } + + dupAttrRec(ar, ret_ar); + diff --git a/rpm-python.spec b/rpm-python.spec index 99636b0..b4b29ad 100644 --- a/rpm-python.spec +++ b/rpm-python.spec @@ -25,7 +25,7 @@ License: GPLv2+ Group: System/Packages Summary: Python Bindings for Manipulating RPM Packages Version: 4.8.0 -Release: 1 +Release: 2 Requires: rpm = %{version} %py_requires Source99: rpm.spec diff --git a/rpm.changes b/rpm.changes index 364a858..91e629b 100644 --- a/rpm.changes +++ b/rpm.changes @@ -1,3 +1,23 @@ +------------------------------------------------------------------- +Fri Apr 9 12:00:29 CEST 2010 - mls@suse.de + +- do not load keyring if signature checking is disabled [bnc#554552] +- fix nosource/nopatch srpm tag generation + +------------------------------------------------------------------- +Thu Apr 8 17:11:08 CEST 2010 - mls@suse.de + +- backport some fixes from upstream +- add generation of python/font/pkgconfig dependencies + +------------------------------------------------------------------- +Wed Apr 7 16:59:58 CEST 2010 - mls@suse.de + +- work around spurious tar message [bnc#558475] +- fix defattr reset bug [bnc#594310] +- make 'rpmconfigcheck status' exit with 4 [bnc#592269] +- don't consider prereq deprecated for now + ------------------------------------------------------------------- Fri Mar 26 16:29:36 CET 2010 - mls@suse.de diff --git a/rpm.spec b/rpm.spec index fbfaa90..50db57e 100644 --- a/rpm.spec +++ b/rpm.spec @@ -28,7 +28,7 @@ PreReq: %insserv_prereq %fillup_prereq permissions AutoReqProv: on Summary: The RPM Package Manager Version: 4.8.0 -Release: 1 +Release: 2 Source: rpm-%{version}.tar.bz2 Source1: RPM-HOWTO.tar.bz2 Source2: RPM-Tips.html.tar.bz2 @@ -105,6 +105,14 @@ Patch68: rpmdb-no-svc.diff Patch69: modemuncher.diff Patch70: repackage-nomd5.diff Patch71: safeugid.diff +Patch72: resetdefattr.diff +Patch73: noprereqdeprec.diff +Patch74: tarrecordsize.diff +Patch75: backport.diff +Patch76: pythondeps.diff +Patch77: fontprovides.diff +Patch78: nosource.diff +Patch79: nosignature.diff BuildRoot: %{_tmppath}/%{name}-%{version}-build # # avoid bootstrapping problem @@ -165,7 +173,7 @@ rm -f rpmdb/db.h %patch -P 40 -P 41 -P 42 -P 43 -P 44 -P 45 -P 46 -P 47 -P 48 -P 49 %patch -P 50 -P 51 -P 52 -P 53 -P 54 -P 55 -P 56 -P 57 -P 58 -P 59 %patch -P 60 -P 61 -P 62 -P 63 -P 64 -P 65 -P 66 -P 67 -P 68 -P 69 -%patch -P 70 -P 71 +%patch -P 70 -P 71 -P 72 -P 73 -P 74 -P 75 -P 76 -P 77 -P 78 -P 79 #chmod 755 scripts/find-supplements{,.ksyms} #chmod 755 scripts/find-provides.ksyms scripts/find-requires.ksyms #chmod 755 scripts/firmware.prov diff --git a/rpmconfigcheck b/rpmconfigcheck index a4eeb48..7699148 100644 --- a/rpmconfigcheck +++ b/rpmconfigcheck @@ -66,7 +66,11 @@ case "$1" in rm -f $configcheckfile.old $configcheckfile.dup $configcheckfile.new fi ;; - stop|status) + stop) + ;; + status) + rc_failed 4 + rc_status -v ;; *) echo "Usage: $0 {start}" diff --git a/tarrecordsize.diff b/tarrecordsize.diff new file mode 100644 index 0000000..7b79d61 --- /dev/null +++ b/tarrecordsize.diff @@ -0,0 +1,17 @@ +--- ./build.c.orig 2010-04-07 14:56:36.000000000 +0000 ++++ ./build.c 2010-04-07 14:58:52.000000000 +0000 +@@ -126,7 +126,13 @@ static char * getTarSpec(const char *arg + if (!(fp = popen(cmd, "r"))) { + rpmlog(RPMLOG_ERR, _("Failed to open tar pipe: %m\n")); + } else { +- char *fok = fgets(tarbuf, sizeof(tarbuf) - 1, fp); ++ char *fok; ++ for (;;) { ++ fok = fgets(tarbuf, sizeof(tarbuf) - 1, fp); ++ /* tar sometimes prints "tar: Record size = 16" messages */ ++ if (!fok || strncmp(fok, "tar: ", 5) != 0) ++ break; ++ } + pclose(fp); + gotspec = (fok != NULL) && isSpecFile(tmpSpecFile); + }