From 70f8787d9a6faa68bee6b810a53198c50a9ad760 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Jan=20R=C4=99korajski?= Date: Wed, 5 Sep 2012 22:22:02 +0200 Subject: [PATCH] - add fixes and useful features from Mandriva --- ...te-rpmfc-dependencies-from-doc-files.patch | 51 ++++++ ...4.10-duplicate_files_terminate_build.patch | 67 +++++++ ...-files-listed-twice-terminates-build.patch | 74 ++++++++ ...on-saving-error-pages-as-target-file.patch | 56 ++++++ ....10-support-ignore-arch-and-os-again.patch | 45 +++++ ...0-unpackaged_subdirs_terminate_build.patch | 67 +++++++ rpm-5.4.4-add-_specfile-macro.patch | 10 ++ ...llow-installation-of-repackaged-rpms.patch | 11 ++ ...-auto-generated-pkgconfig-dependency.patch | 23 +++ ...s-use-LC_CTYPE-C-for-case-conversion.patch | 20 +++ ...ob-wildcards-for-loading-macro-files.patch | 24 +++ ..._builddir-properly-to-find-debuginfo.patch | 23 +++ rpm-5.4.4-pkgconfigdeps-check-path.patch | 76 ++++++++ rpm-5.4.4-rpmbuild-withoutclean.patch | 10 ++ rpm-5.4.5-python-export-spec-macros.patch | 70 ++++++++ ...mfc-apply-python-coloring-from-magic.patch | 10 ++ rpm-5.4.5-rpmfc-use-strlen-not-sizeof.patch | 11 ++ rpm-5.4.5-rubygems-add-missing-newline.patch | 16 ++ ...p-dependencies-for-character-devices.patch | 13 ++ ...-trigger-dependencies-as-overlapping.patch | 12 ++ ...-fix-generation-of-ruby-abi-provides.patch | 48 ++++++ rpm-5.4.7-fix-minor-memleaks.patch | 25 +++ ...-hdrfmt-fix-unitialized-argv-element.patch | 14 ++ rpm-5.4.7-kmod-dependencies.patch | 66 +++++++ ...4.7-no-seqid_init-on-rdonly-database.patch | 11 ++ ...valid-free-if-not-_defaultdocdir-set.patch | 11 ++ ...4.8-dont-show-suggests-with-requires.patch | 62 +++++++ rpm-5.4.9-avoid-dependencies-on-self.patch | 85 +++++++++ ...ath-for-dirname-filetrigger-matching.patch | 23 +++ rpm-5.4.9-fix-typo-in-rpmtag-header.patch | 11 ++ rpm-5.4.9-fix-verify-segfault.patch | 26 +++ rpm-5.4.9-font-provides.patch | 60 +++++++ rpm-5.4.9-keep-loading-script-macros.patch | 80 +++++++++ ...-fix-strings-lacking-null-terminator.patch | 32 ++++ ...c-extract-dependencies-for-all-files.patch | 11 ++ rpm-5.4.9-rpmpython-fix-input.patch | 11 ++ rpm-5.4.9-ruby1.9-fixes.patch | 114 ++++++++++++ ...droot-away-from-duplicate-files-list.patch | 97 +++++++++++ ...c-when-removing-dependencies-on-self.patch | 140 +++++++++++++++ rpm.spec | 163 ++++++++++++++++-- 40 files changed, 1767 insertions(+), 12 deletions(-) create mode 100644 rpm-5.4.10-dont-try-generate-rpmfc-dependencies-from-doc-files.patch create mode 100644 rpm-5.4.10-duplicate_files_terminate_build.patch create mode 100644 rpm-5.4.10-files-listed-twice-terminates-build.patch create mode 100644 rpm-5.4.10-fix-neon-saving-error-pages-as-target-file.patch create mode 100644 rpm-5.4.10-support-ignore-arch-and-os-again.patch create mode 100644 rpm-5.4.10-unpackaged_subdirs_terminate_build.patch create mode 100644 rpm-5.4.4-add-_specfile-macro.patch create mode 100644 rpm-5.4.4-allow-installation-of-repackaged-rpms.patch create mode 100644 rpm-5.4.4-drop-useless-auto-generated-pkgconfig-dependency.patch create mode 100644 rpm-5.4.4-fix-rpmconstant-to-always-use-LC_CTYPE-C-for-case-conversion.patch create mode 100644 rpm-5.4.4-glob-wildcards-for-loading-macro-files.patch create mode 100644 rpm-5.4.4-pass-_builddir-properly-to-find-debuginfo.patch create mode 100644 rpm-5.4.4-pkgconfigdeps-check-path.patch create mode 100644 rpm-5.4.4-rpmbuild-withoutclean.patch create mode 100644 rpm-5.4.5-python-export-spec-macros.patch create mode 100644 rpm-5.4.5-rpmfc-apply-python-coloring-from-magic.patch create mode 100644 rpm-5.4.5-rpmfc-use-strlen-not-sizeof.patch create mode 100644 rpm-5.4.5-rubygems-add-missing-newline.patch create mode 100644 rpm-5.4.5-skip-dependencies-for-character-devices.patch create mode 100644 rpm-5.4.7-dont-consider-trigger-dependencies-as-overlapping.patch create mode 100644 rpm-5.4.7-fix-generation-of-ruby-abi-provides.patch create mode 100644 rpm-5.4.7-fix-minor-memleaks.patch create mode 100644 rpm-5.4.7-hdrfmt-fix-unitialized-argv-element.patch create mode 100644 rpm-5.4.7-kmod-dependencies.patch create mode 100644 rpm-5.4.7-no-seqid_init-on-rdonly-database.patch create mode 100644 rpm-5.4.7-rpmfc-fix-invalid-free-if-not-_defaultdocdir-set.patch create mode 100644 rpm-5.4.8-dont-show-suggests-with-requires.patch create mode 100644 rpm-5.4.9-avoid-dependencies-on-self.patch create mode 100644 rpm-5.4.9-avoid-double-slash-in-path-for-dirname-filetrigger-matching.patch create mode 100644 rpm-5.4.9-fix-typo-in-rpmtag-header.patch create mode 100644 rpm-5.4.9-fix-verify-segfault.patch create mode 100644 rpm-5.4.9-font-provides.patch create mode 100644 rpm-5.4.9-keep-loading-script-macros.patch create mode 100644 rpm-5.4.9-mire-fix-strings-lacking-null-terminator.patch create mode 100644 rpm-5.4.9-rpmfc-extract-dependencies-for-all-files.patch create mode 100644 rpm-5.4.9-rpmpython-fix-input.patch create mode 100644 rpm-5.4.9-ruby1.9-fixes.patch create mode 100644 rpm-5.4.9-strip-buildroot-away-from-duplicate-files-list.patch create mode 100644 rpm-5.4.9-update-rpmfc-when-removing-dependencies-on-self.patch diff --git a/rpm-5.4.10-dont-try-generate-rpmfc-dependencies-from-doc-files.patch b/rpm-5.4.10-dont-try-generate-rpmfc-dependencies-from-doc-files.patch new file mode 100644 index 0000000..72faa1f --- /dev/null +++ b/rpm-5.4.10-dont-try-generate-rpmfc-dependencies-from-doc-files.patch @@ -0,0 +1,51 @@ +--- rpm-5.4.10/lib/rpmfc.c.skip_doc~ 2012-07-28 17:19:43.136069278 +0200 ++++ rpm-5.4.10/lib/rpmfc.c 2012-07-28 17:25:16.778898168 +0200 +@@ -818,7 +818,17 @@ static int rpmfcSCRIPT(rpmfc fc) + int i; + int is_executable; + int xx; +- const char * defaultdocdir = NULL; ++ ++ /* Don't generate dependencies from files shipped as documentation */ ++ if (!rpmExpandNumeric("%{_generate_dependencies_from_docdir}")) { ++ const char * defaultdocdir = rpmExpand("%{?_defaultdocdir}", NULL); ++ if (defaultdocdir == NULL || *defaultdocdir == '\0') ++ defaultdocdir = strdup("/usr/share/doc"); ++ xx = !strncmp(fn+fc->brlen, defaultdocdir, strlen(defaultdocdir)); ++ defaultdocdir = _free(defaultdocdir) ; ++ if (xx) ++ return 0; ++ } + + /* Extract dependencies only from files with executable bit set. */ + { struct stat sb, * st = &sb; +@@ -904,16 +914,10 @@ static int rpmfcSCRIPT(rpmfc fc) + (void) fclose(fp); + + if (fc->fcolor->vals[fc->ix] & RPMFC_PERL) { +- defaultdocdir = rpmExpand("%{?_defaultdocdir}", NULL); +- if (defaultdocdir == NULL || *defaultdocdir == '\0') +- defaultdocdir = strdup("/usr/share/doc"); +- +- if (strncmp(fn, defaultdocdir, strlen(defaultdocdir))) { +- if (fc->fcolor->vals[fc->ix] & RPMFC_MODULE) +- xx = rpmfcHelper(fc, 'P', "perl"); +- if (is_executable || (fc->fcolor->vals[fc->ix] & RPMFC_MODULE)) +- xx = rpmfcHelper(fc, 'R', "perl"); +- } ++ if (fc->fcolor->vals[fc->ix] & RPMFC_MODULE) ++ xx = rpmfcHelper(fc, 'P', "perl"); ++ if (is_executable || (fc->fcolor->vals[fc->ix] & RPMFC_MODULE)) ++ xx = rpmfcHelper(fc, 'R', "perl"); + } else + if (fc->fcolor->vals[fc->ix] & RPMFC_PYTHON) { + xx = rpmfcHelper(fc, 'P', "python"); +@@ -1009,8 +1013,6 @@ static int rpmfcSCRIPT(rpmfc fc) + #endif + } + +-/*@-observertrans@*/ +- defaultdocdir = _free(defaultdocdir) ; + /*@=observertrans@*/ + return 0; + } diff --git a/rpm-5.4.10-duplicate_files_terminate_build.patch b/rpm-5.4.10-duplicate_files_terminate_build.patch new file mode 100644 index 0000000..8f4574b --- /dev/null +++ b/rpm-5.4.10-duplicate_files_terminate_build.patch @@ -0,0 +1,67 @@ +--- rpm-5.4.10/build/files.c.dups_terminate~ 2012-07-10 20:09:01.125249185 +0200 ++++ rpm-5.4.10/build/files.c 2012-07-10 20:09:01.135249061 +0200 +@@ -2917,7 +2917,8 @@ exit: + + /* auxiliary function for checkDuplicateFiles() */ + /* XXX need to pass Header because fi->h is NULL */ +-static int fiIntersect(/*@null@*/ rpmfi fi1, /*@null@*/ rpmfi fi2, size_t buildrootL) ++static int fiIntersect(/*@null@*/ rpmfi fi1, /*@null@*/ rpmfi fi2, ++ size_t buildrootL, int _duplicate_files_terminate_build) + /*@globals internalState @*/ + /*@modifies fi1, fi2, internalState @*/ + { +@@ -2955,7 +2956,7 @@ static int fiIntersect(/*@null@*/ rpmfi + he->tag = RPMTAG_NVRA; + N2 = (headerGet(fi2->h, he, 0) ? he->p.str : NULL); + +- rpmlog(RPMLOG_WARNING, ++ rpmlog(_duplicate_files_terminate_build ? RPMLOG_ERR : RPMLOG_WARNING, + _("File(s) packaged into both %s and %s:\n%s"), + N1, N2, rpmiobStr(dups)); + +@@ -2972,7 +2973,8 @@ static int fiIntersect(/*@null@*/ rpmfi + * @param spec spec file control structure + * @return number of duplicate files + */ +-static int checkDuplicateFiles(Spec spec, size_t buildrootL) ++static int checkDuplicateFiles(Spec spec, size_t buildrootL, ++ int _duplicate_files_terminate_build) + /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/ + /*@modifies *spec->packages, + rpmGlobalMacroContext, fileSystem, internalState @*/ +@@ -2997,7 +2999,7 @@ static int checkDuplicateFiles(Spec spec + #endif + if (fi2 == NULL) continue; + (void) rpmfiSetHeader(fi2, pkg2->header); +- n += fiIntersect(fi1, fi2, buildrootL); ++ n += fiIntersect(fi1, fi2, buildrootL, _duplicate_files_terminate_build); + (void) rpmfiSetHeader(fi2, NULL); + fi2 = rpmfiFree(fi2); + } +@@ -3181,9 +3183,13 @@ rpmRC processBinaryFiles(Spec spec, int + } + + if (res == RPMRC_OK) { ++ int _duplicate_files_terminate_build = ++ rpmExpandNumeric("%{?_duplicate_files_terminate_build}"); + if (checkUnpackagedFiles(spec) > 0) + res = RPMRC_FAIL; +- (void) checkDuplicateFiles(spec, buildrootL); ++ if (checkDuplicateFiles(spec, buildrootL, _duplicate_files_terminate_build) > 0 && ++ _duplicate_files_terminate_build) ++ res = RPMRC_FAIL; + (void) checkUnpackagedSubdirs(spec, buildrootL); + } + +--- rpm-5.4.10/macros/mandriva.in.dups_terminate~ 2012-05-19 22:35:44.000000000 +0200 ++++ rpm-5.4.10/macros/mandriva.in 2012-07-10 20:13:41.582742985 +0200 +@@ -126,6 +126,9 @@ end\ + # use XZ to compress binary packages: + %_binary_payload w5.xzdio + ++%_duplicate_files_terminate_build 1 ++ ++ + %_build_pkgcheck_set /usr/bin/rpmlint -T -f %{_sourcedir}/%{name}.rpmlintrc + %_build_pkgcheck_srpm /usr/bin/rpmlint -T -f %{_sourcedir}/%{name}.rpmlintrc + %_nonzero_exit_pkgcheck_terminate_build 1 diff --git a/rpm-5.4.10-files-listed-twice-terminates-build.patch b/rpm-5.4.10-files-listed-twice-terminates-build.patch new file mode 100644 index 0000000..9fd555c --- /dev/null +++ b/rpm-5.4.10-files-listed-twice-terminates-build.patch @@ -0,0 +1,74 @@ +--- rpm-5.4.10/build/files.c.twice_terminate~ 2012-07-10 20:18:14.613329633 +0200 ++++ rpm-5.4.10/build/files.c 2012-07-10 20:18:14.677328833 +0200 +@@ -1329,7 +1329,7 @@ static rpmuint32_t getDigestAlgo(Header + * @param h + * @param isSrc + */ +-static void genCpioListAndHeader(/*@partial@*/ FileList fl, ++static rpmRC genCpioListAndHeader(/*@partial@*/ FileList fl, + rpmfi * fip, Header h, int isSrc) + /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/ + /*@modifies h, *fip, fl->processingFailed, fl->fileList, +@@ -1349,6 +1349,7 @@ static void genCpioListAndHeader(/*@part + rpmuint32_t dalgo = getDigestAlgo(h, isSrc); + char buf[BUFSIZ]; + int i, xx; ++ rpmRC rc = RPMRC_OK; + + memset(buf, 0, sizeof(buf)); /* XXX valgrind on rhel6 beta pickier */ + +@@ -1377,9 +1378,14 @@ memset(buf, 0, sizeof(buf)); /* XXX valg + /* file flags */ + flp[1].flags |= flp->flags; + +- if (!(flp[1].flags & RPMFILE_EXCLUDE)) +- rpmlog(RPMLOG_WARNING, _("File listed twice: %s\n"), ++ if (!(flp[1].flags & RPMFILE_EXCLUDE)) { ++ int terminate = rpmExpandNumeric("%{?_files_listed_twice_terminate_build}"); ++ ++ rpmlog(terminate ? RPMLOG_ERR : RPMLOG_WARNING, _("File listed twice: %s\n"), + flp->fileURL); ++ if (terminate) ++ rc = RPMRC_FAIL; ++ } + + /* file mode */ + if (S_ISDIR(flp->fl_mode)) { +@@ -1792,6 +1798,8 @@ if (_rpmbuildFlags & 4) { + fi = rpmfiFree(fi); + /*@=compdef@*/ + } ++ ++ return rc; + } + + /** +@@ -2514,7 +2522,8 @@ static rpmRC processPackageFiles(Spec sp + "PartialHardlinkSets", "4.0.4-1"); + + /* XXX should tags be added if filelist is empty? */ +- genCpioListAndHeader(&fl, &pkg->fi, pkg->header, 0); ++ if (genCpioListAndHeader(&fl, &pkg->fi, pkg->header, 0) != RPMRC_OK) ++ fl.processingFailed = 1; + + if (spec->timeCheck) + timeCheck(spec->timeCheck, pkg->header); +@@ -2828,7 +2837,7 @@ int processSourceFiles(Spec spec) + + /* XXX should tags be added if filelist is empty? */ + spec->fi = NULL; +- genCpioListAndHeader(&fl, &spec->fi, spec->sourceHeader, 1); ++ rc = genCpioListAndHeader(&fl, &spec->fi, spec->sourceHeader, 1); + + exit: + *sfp = rpmiobFree(*sfp); +--- rpm-5.4.10/macros/mandriva.in.twice_terminate~ 2012-07-10 20:18:14.000000000 +0200 ++++ rpm-5.4.10/macros/mandriva.in 2012-07-10 20:18:32.060111516 +0200 +@@ -128,6 +128,7 @@ end\ + + %_duplicate_files_terminate_build 1 + %_unpackaged_subdirs_terminate_build 0 ++%_files_listed_twice_terminate_build 1 + + %_build_pkgcheck_set /usr/bin/rpmlint -T -f %{_sourcedir}/%{name}.rpmlintrc + %_build_pkgcheck_srpm /usr/bin/rpmlint -T -f %{_sourcedir}/%{name}.rpmlintrc diff --git a/rpm-5.4.10-fix-neon-saving-error-pages-as-target-file.patch b/rpm-5.4.10-fix-neon-saving-error-pages-as-target-file.patch new file mode 100644 index 0000000..b2adfcd --- /dev/null +++ b/rpm-5.4.10-fix-neon-saving-error-pages-as-target-file.patch @@ -0,0 +1,56 @@ +--- rpm-5.4.10/rpmio/rpmdav.c.dl_error~ 2012-07-06 17:39:19.000000000 +0200 ++++ rpm-5.4.10/rpmio/rpmdav.c 2012-07-11 19:49:00.504968365 +0200 +@@ -1722,6 +1722,7 @@ int davReq(FD_t ctrl, const char * httpC + { + urlinfo u; + int rc = 0; ++ const ne_status *status; + + assert(ctrl != NULL); + u = (urlinfo) ctrl->u; +@@ -1789,10 +1790,24 @@ assert(ctrl->req != NULL); + } + + /* XXX somewhere else instead? */ +-if (_dav_debug) { +- const ne_status *status = ne_get_status((ne_request *)ctrl->req); +-fprintf(stderr, "HTTP request sent, awaiting response... %d %s\n", status->code, status->reason_phrase); +-} ++ status = ne_get_status((ne_request *)ctrl->req); ++ if (_dav_debug) ++ fprintf(stderr, "HTTP request sent, awaiting response... %d %s\n", status->code, status->reason_phrase); ++ ++ switch (status->code) { ++ case 200: ++ case 201: /* 201 Created. */ ++ break; ++ case 204: /* HACK: if overwriting, 204 No Content. */ ++ case 403: /* 403 Forbidden. */ ++ rc = FTPERR_UNKNOWN; ++ break; ++ default: ++ rc = FTPERR_FILE_NOT_FOUND; ++ break; ++ } ++ if (rc || _dav_debug) ++ fprintf(stderr, "HTTP request sent, awaiting response... %d %s\n", status->code, status->reason_phrase); + + if (rc) + goto errxit; +--- rpm-5.4.10/rpmio/rpmio.c.dl_error~ 2012-07-06 17:39:19.000000000 +0200 ++++ rpm-5.4.10/rpmio/rpmio.c 2012-07-11 19:47:59.396732322 +0200 +@@ -2306,9 +2306,12 @@ fprintf(stderr, "*** ufdOpen(%s,0x%x,0%o + u->openError = httpReq(fd, cmd, path); + #endif + if (u->openError < 0) { ++ /* XXX rpmdav doesn't behave consistently with the rest...*/ ++#ifndef WITH_NEON + /* XXX make sure that we can exit through ufdClose */ +- fd = fdLink(fd, "error ctrl (ufdOpen HTTP)"); +- fd = fdLink(fd, "error data (ufdOpen HTTP)"); ++ fd = u->ctrl = fdLink(fd, "error ctrl (ufdOpen HTTP)"); ++ fd = u->data fdLink(fd, "error data (ufdOpen HTTP)"); ++#endif + } else { + fd->bytesRemain = ((!strcmp(cmd, "GET")) + ? fd->contentLength : -1); diff --git a/rpm-5.4.10-support-ignore-arch-and-os-again.patch b/rpm-5.4.10-support-ignore-arch-and-os-again.patch new file mode 100644 index 0000000..0708d04 --- /dev/null +++ b/rpm-5.4.10-support-ignore-arch-and-os-again.patch @@ -0,0 +1,45 @@ +--- rpm-5.4.10/lib/depends.c.ignore_arch~ 2012-07-27 21:11:47.463139875 +0200 ++++ rpm-5.4.10/lib/depends.c 2012-07-27 21:29:21.811958701 +0200 +@@ -587,11 +587,24 @@ int rpmtsAddInstallElement(rpmts ts, Hea + if (nplatpat > 1) { + const char * platform = NULL; + +- he->tag = RPMTAG_PLATFORM; +- xx = headerGet(h, he, 0); +- platform = he->p.str; +- if (!xx || platform == NULL) +- platform = rpmExpand(arch, "-unknown-", os, NULL); ++ /* ++ * If ignore arch, we just set the arch in package platform string to ++ * same as on system so that we're sure that it'll match, same goes for ++ * os as well. ++ */ ++ if (rpmExpandNumeric("%{__ignore_arch}") || rpmExpandNumeric("%{__ignore_os}")) { ++ platform = rpmExpand( ++ rpmExpandNumeric("%{__ignore_arch}") ? "%{_target_cpu}" : arch, ++ "-unknown-", ++ rpmExpandNumeric("%{__ignore_os}") ? "%{_target_os}" : os, ++ NULL); ++ } else { ++ he->tag = RPMTAG_PLATFORM; ++ xx = headerGet(h, he, 0); ++ platform = he->p.str; ++ if (!xx || platform == NULL) ++ platform = rpmExpand(arch, "-unknown-", os, NULL); ++ } + + rc = rpmPlatformScore(platform, platpat, nplatpat); + #if defined(RPM_VENDOR_MANDRIVA) +--- rpm-5.4.10/rpmpopt.in.ignore_arch~ 2012-07-27 21:29:07.687135285 +0200 ++++ rpm-5.4.10/rpmpopt.in 2012-07-27 21:29:35.399788829 +0200 +@@ -431,6 +431,10 @@ rpm alias --without --define "_without_ + + rpm alias --arch --qf '%-34{=NAME}\t%{ARCH}\n' \ + --POPTdesc=$"list package architecture" ++ ++rpm alias --ignorearch --define '__ignore_arch 1' ++rpm alias --ignoreos --define '__ignore_os 1' ++ + #============================================================================== + rpmbuild alias --dbpath --define '_dbpath !#:+' \ + --POPTdesc=$"use database in DIRECTORY" \ diff --git a/rpm-5.4.10-unpackaged_subdirs_terminate_build.patch b/rpm-5.4.10-unpackaged_subdirs_terminate_build.patch new file mode 100644 index 0000000..2e7c5b8 --- /dev/null +++ b/rpm-5.4.10-unpackaged_subdirs_terminate_build.patch @@ -0,0 +1,67 @@ +--- rpm-5.4.10/build/files.c.subdir_terminate~ 2012-07-10 20:14:36.357058212 +0200 ++++ rpm-5.4.10/build/files.c 2012-07-10 20:14:36.367058087 +0200 +@@ -3025,7 +3025,7 @@ static inline int packagedDir(Package pk + * /A/B/C/D + * Now directories "/A/B" and "/A/B/C" should also be packaged. + */ +-static int pkgUnpackagedSubdirs(Package pkg, size_t buildrootL) ++static int pkgUnpackagedSubdirs(Package pkg, size_t buildrootL, int _unpackaged_subdirs_terminate_build) + /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/ + /*@modifies pkg->header, + rpmGlobalMacroContext, fileSystem, internalState @*/ +@@ -3103,7 +3103,7 @@ static int pkgUnpackagedSubdirs(Package + } + unpackaged = _free(unpackaged); + +- rpmlog(RPMLOG_WARNING, ++ rpmlog(_unpackaged_subdirs_terminate_build ? RPMLOG_ERR : RPMLOG_WARNING, + _("Unpackaged subdir(s) in %s:\n%s"), + N, rpmiobStr(list)); + +@@ -3119,7 +3119,7 @@ static int pkgUnpackagedSubdirs(Package + * @param spec spec file control structure + * @return number of unpackaged subdirectories + */ +-static int checkUnpackagedSubdirs(Spec spec, size_t buildrootL) ++static int checkUnpackagedSubdirs(Spec spec, size_t buildrootL, int _unpackaged_subdirs_terminate_build) + /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/ + /*@modifies *spec->packages, + rpmGlobalMacroContext, fileSystem, internalState @*/ +@@ -3128,7 +3128,7 @@ static int checkUnpackagedSubdirs(Spec s + Package pkg; + + for (pkg = spec->packages; pkg; pkg = pkg->next) +- n += pkgUnpackagedSubdirs(pkg, buildrootL); ++ n += pkgUnpackagedSubdirs(pkg, buildrootL, _unpackaged_subdirs_terminate_build); + return n; + } + +@@ -3185,12 +3185,16 @@ rpmRC processBinaryFiles(Spec spec, int + if (res == RPMRC_OK) { + int _duplicate_files_terminate_build = + rpmExpandNumeric("%{?_duplicate_files_terminate_build}"); ++ int _unpackaged_subdirs_terminate_build = ++ rpmExpandNumeric("%{?_unpackaged_subdirs_terminate_build}"); + if (checkUnpackagedFiles(spec) > 0) + res = RPMRC_FAIL; + if (checkDuplicateFiles(spec, buildrootL, _duplicate_files_terminate_build) > 0 && + _duplicate_files_terminate_build) + res = RPMRC_FAIL; +- (void) checkUnpackagedSubdirs(spec, buildrootL); ++ if (checkUnpackagedSubdirs(spec, buildrootL, _unpackaged_subdirs_terminate_build) > 0 && ++ _unpackaged_subdirs_terminate_build) ++ res = RPMRC_FAIL; + } + + return res; +--- rpm-5.4.10/macros/mandriva.in.subdir_terminate~ 2012-07-10 20:14:36.000000000 +0200 ++++ rpm-5.4.10/macros/mandriva.in 2012-07-10 20:14:57.333795967 +0200 +@@ -127,7 +127,7 @@ end\ + %_binary_payload w5.xzdio + + %_duplicate_files_terminate_build 1 +- ++%_unpackaged_subdirs_terminate_build 0 + + %_build_pkgcheck_set /usr/bin/rpmlint -T -f %{_sourcedir}/%{name}.rpmlintrc + %_build_pkgcheck_srpm /usr/bin/rpmlint -T -f %{_sourcedir}/%{name}.rpmlintrc diff --git a/rpm-5.4.4-add-_specfile-macro.patch b/rpm-5.4.4-add-_specfile-macro.patch new file mode 100644 index 0000000..723a17a --- /dev/null +++ b/rpm-5.4.4-add-_specfile-macro.patch @@ -0,0 +1,10 @@ +--- rpm-5.4.4/build/parseSpec.c.specfile~ 2011-11-11 13:41:29.137827186 +0100 ++++ rpm-5.4.4/build/parseSpec.c 2011-11-11 13:42:12.938874762 +0100 +@@ -542,6 +542,7 @@ int parseSpec(rpmts ts, const char *spec + * /.././../usr/../bin//./sh (XXX FIXME: dots not handled yet) + */ + spec->specFile = rpmGetPath(specFile, NULL); ++ addMacro(spec->macros, "_specfile", NULL, spec->specFile, RMIL_SPEC); + spec->fileStack = newOpenFileInfo(); + spec->fileStack->fileName = xstrdup(spec->specFile); + diff --git a/rpm-5.4.4-allow-installation-of-repackaged-rpms.patch b/rpm-5.4.4-allow-installation-of-repackaged-rpms.patch new file mode 100644 index 0000000..545929a --- /dev/null +++ b/rpm-5.4.4-allow-installation-of-repackaged-rpms.patch @@ -0,0 +1,11 @@ +--- rpm-5.4.4/rpmdb/rpmdb.c.repackage~ 2011-11-24 16:28:22.436460713 +0100 ++++ rpm-5.4.4/rpmdb/rpmdb.c 2011-11-24 16:28:30.107464575 +0100 +@@ -2758,7 +2758,7 @@ int rpmdbAdd(rpmdb db, int iid, Header h + if (_rpmdb_debug) + fprintf(stderr, "--> %s(%p, %u, %p, %p) h# %u\n", __FUNCTION__, db, (unsigned)iid, h, ts, (unsigned)hdrNum); + +-assert(headerIsEntry(h, RPMTAG_REMOVETID) == 0); /* XXX sanity */ ++//assert(headerIsEntry(h, RPMTAG_REMOVETID) == 0); /* XXX sanity */ + + /* Add the install transaction id. */ + if (iid != 0 && iid != -1) { diff --git a/rpm-5.4.4-drop-useless-auto-generated-pkgconfig-dependency.patch b/rpm-5.4.4-drop-useless-auto-generated-pkgconfig-dependency.patch new file mode 100644 index 0000000..1da18fe --- /dev/null +++ b/rpm-5.4.4-drop-useless-auto-generated-pkgconfig-dependency.patch @@ -0,0 +1,23 @@ +--- rpm-5.4.4/scripts/pkgconfigdeps.sh.oneshot~ 2011-12-11 01:40:12.599487103 +0100 ++++ rpm-5.4.4/scripts/pkgconfigdeps.sh 2011-12-11 01:40:14.418488230 +0100 +@@ -37,12 +37,10 @@ case $1 in + done + ;; + -R|--requires) +- oneshot="pkgconfig" + while read filename ; do + case "${filename}" in + *.pc) + if [[ "$(dirname ${filename})" =~ pkgconfig ]]; then +- [ -n "$oneshot" ] && echo "$oneshot"; oneshot="" + # Query the dependencies of the package. + DIR=`dirname ${filename}` + PKG_CONFIG_PATH="$DIR:$DIR/../../share/pkgconfig" +@@ -54,7 +52,6 @@ case $1 in + else + echo "pkgconfig($n)" + fi +- oneshot="" + done + fi + ;; diff --git a/rpm-5.4.4-fix-rpmconstant-to-always-use-LC_CTYPE-C-for-case-conversion.patch b/rpm-5.4.4-fix-rpmconstant-to-always-use-LC_CTYPE-C-for-case-conversion.patch new file mode 100644 index 0000000..ce1e804 --- /dev/null +++ b/rpm-5.4.4-fix-rpmconstant-to-always-use-LC_CTYPE-C-for-case-conversion.patch @@ -0,0 +1,20 @@ +--- rpm-5.4.4/rpmconstant/rpmconstant.c.locale~ 2008-08-18 12:57:58.000000000 +0200 ++++ rpm-5.4.4/rpmconstant/rpmconstant.c 2011-12-16 16:41:27.721549143 +0100 +@@ -89,7 +89,7 @@ int rpmconstInitToContext(rpmconst c, co + int rc = 0; + if (!context) return 0; /* programmer error */ + for (ptr = lccontext; *ptr != 0; ptr++) +- *ptr = (char)tolower(*ptr); ++ *ptr = (char)xtolower(*ptr); + rpmconstInitL(c); + while (rpmconstNextL(c)) { + if (!strcmp(lccontext, rpmconstContext(c))) { +@@ -108,7 +108,7 @@ int rpmconstNameMatch(rpmconst c, const + char * ucname = strdup(name); + + for (uc = ucname; *uc != 0; uc++) +- *uc = (char)toupper(*uc); ++ *uc = (char)xtoupper(*uc); + + if (!prefixed) prefixed = ALLCASE_PREFIX; + if (prefixed & WITH_PREFIX) diff --git a/rpm-5.4.4-glob-wildcards-for-loading-macro-files.patch b/rpm-5.4.4-glob-wildcards-for-loading-macro-files.patch new file mode 100644 index 0000000..67a1c2b --- /dev/null +++ b/rpm-5.4.4-glob-wildcards-for-loading-macro-files.patch @@ -0,0 +1,24 @@ +--- rpm-5.4.4/rpmio/macro.c.glob~ 2011-09-30 20:40:18.000000000 +0200 ++++ rpm-5.4.4/rpmio/macro.c 2011-11-17 16:49:16.870465121 +0100 +@@ -2798,6 +2798,9 @@ rpmLoadMacroFile(MacroContext mc, const + /* Parse %{load:...} immediately recursively. */ + if (s[1] == '{' && !strncmp(s+2, "load:", sizeof("load:")-1)) { + char * se = (char *) matchchar(s, '{', '}'); ++ const char ** argv = NULL; ++ int argc = 0; ++ int i; + if (se == NULL) { + rpmlog(RPMLOG_WARNING, + _("%s:%u Missing '}' in \"%s\", skipping.\n"), +@@ -2814,7 +2817,10 @@ rpmLoadMacroFile(MacroContext mc, const + continue; + } + se = rpmMCExpand(mc, s, NULL); +- rc = rpmLoadMacroFile(mc, se, nesting - 1); ++ rc = rpmGlob(se, &argc, &argv); ++ for(i = 0; i < argc; i++) ++ rc |= rpmLoadMacroFile(mc, argv[i], nesting - 1); ++ argv = _free(argv); + se = _free(se); + if (rc != 0) + goto exit; diff --git a/rpm-5.4.4-pass-_builddir-properly-to-find-debuginfo.patch b/rpm-5.4.4-pass-_builddir-properly-to-find-debuginfo.patch new file mode 100644 index 0000000..3bc3643 --- /dev/null +++ b/rpm-5.4.4-pass-_builddir-properly-to-find-debuginfo.patch @@ -0,0 +1,23 @@ +--- rpm-5.4.4/macros/macros.rpmbuild.in.builddir~ 2011-12-20 15:36:20.813852241 +0100 ++++ rpm-5.4.4/macros/macros.rpmbuild.in 2011-12-20 15:37:43.385806877 +0100 +@@ -326,8 +326,9 @@ echo "Patch #%{__patch_number} (%{basena + %___build_args -e + %___build_cmd %{?_sudo:%{_sudo} }%{?_remsh:%{_remsh} %{_remhost} }%{?_remsudo:%{_remsudo} }%{?_remchroot:%{_remchroot} %{_remroot} }%{___build_shell} %{___build_args} + %___build_pre \ ++ RPM_BUILD_DIR=\"%{u2p:%{_builddir}}\"\ + RPM_OPT_FLAGS=\"%{optflags}\"\ +- export RPM_OPT_FLAGS\ ++ export RPM_BUILD_DIR RPM_OPT_FLAGS\ + %{?buildroot:RPM_BUILD_ROOT=\"%{u2p:%{buildroot}}\"\ + export RPM_BUILD_ROOT}\ + %{?_javaclasspath:CLASSPATH=\"%{_javaclasspath}\"\ +--- rpm-5.4.4/scripts/find-debuginfo.sh.builddir~ 2011-12-20 15:36:31.962846125 +0100 ++++ rpm-5.4.4/scripts/find-debuginfo.sh 2011-12-20 15:36:49.492836503 +0100 +@@ -32,7 +32,6 @@ strip_r=false + # Barf on missing build IDs. + strict=false + +-RPM_BUILD_DIR="`pwd`" + # canon RPM_BUILD_DIR, the DW_AT_comp_dir in ELF objects is real a real path + # and debugedit will ignore them as they are out of build dir. + RPM_BUILD_DIR=$(readlink -f "$RPM_BUILD_DIR") diff --git a/rpm-5.4.4-pkgconfigdeps-check-path.patch b/rpm-5.4.4-pkgconfigdeps-check-path.patch new file mode 100644 index 0000000..39858fe --- /dev/null +++ b/rpm-5.4.4-pkgconfigdeps-check-path.patch @@ -0,0 +1,76 @@ +--- rpm-5.4.4/scripts/pkgconfigdeps.sh.pc_path~ 2011-11-17 15:08:42.400054348 +0100 ++++ rpm-5.4.4/scripts/pkgconfigdeps.sh 2011-11-17 15:08:44.380056984 +0100 +@@ -16,20 +16,22 @@ case $1 in + while read filename ; do + case "${filename}" in + *.pc) +- # Query the dependencies of the package. +- DIR=`dirname ${filename}` +- PKG_CONFIG_PATH="$DIR:$DIR/../../share/pkgconfig" +- export PKG_CONFIG_PATH +- $pkgconfig --print-provides "$filename" 2> /dev/null | while read n r v ; do +- [ -n "$n" ] || continue +- # We have a dependency. Make a note that we need the pkgconfig +- # tool for this package. +- if [ -n "$r" ] && [ -n "$v" ]; then +- echo "pkgconfig($n) $r $v" +- else +- echo "pkgconfig($n)" +- fi +- done ++ if [[ "$(dirname ${filename})" =~ pkgconfig ]]; then ++ # Query the dependencies of the package. ++ DIR=`dirname ${filename}` ++ PKG_CONFIG_PATH="$DIR:$DIR/../../share/pkgconfig" ++ export PKG_CONFIG_PATH ++ $pkgconfig --print-provides "$filename" 2> /dev/null | while read n r v ; do ++ [ -n "$n" ] || continue ++ # We have a dependency. Make a note that we need the pkgconfig ++ # tool for this package. ++ if [ -n "$r" ] && [ -n "$v" ]; then ++ echo "pkgconfig($n) $r $v" ++ else ++ echo "pkgconfig($n)" ++ fi ++ done ++ fi + ;; + esac + done +@@ -39,20 +41,22 @@ case $1 in + while read filename ; do + case "${filename}" in + *.pc) +- [ -n "$oneshot" ] && echo "$oneshot"; oneshot="" +- # Query the dependencies of the package. +- DIR=`dirname ${filename}` +- PKG_CONFIG_PATH="$DIR:$DIR/../../share/pkgconfig" +- export PKG_CONFIG_PATH +- $pkgconfig --print-requires "$filename" 2> /dev/null | while read n r v ; do +- [ -n "$n" ] || continue +- if [ -n "$r" ] && [ -n "$v" ]; then +- echo "pkgconfig($n) $r $v" +- else +- echo "pkgconfig($n)" +- fi +- oneshot="" +- done ++ if [[ "$(dirname ${filename})" =~ pkgconfig ]]; then ++ [ -n "$oneshot" ] && echo "$oneshot"; oneshot="" ++ # Query the dependencies of the package. ++ DIR=`dirname ${filename}` ++ PKG_CONFIG_PATH="$DIR:$DIR/../../share/pkgconfig" ++ export PKG_CONFIG_PATH ++ $pkgconfig --print-requires "$filename" 2> /dev/null | while read n r v ; do ++ [ -n "$n" ] || continue ++ if [ -n "$r" ] && [ -n "$v" ]; then ++ echo "pkgconfig($n) $r $v" ++ else ++ echo "pkgconfig($n)" ++ fi ++ oneshot="" ++ done ++ fi + ;; + esac + done diff --git a/rpm-5.4.4-rpmbuild-withoutclean.patch b/rpm-5.4.4-rpmbuild-withoutclean.patch new file mode 100644 index 0000000..7dae678 --- /dev/null +++ b/rpm-5.4.4-rpmbuild-withoutclean.patch @@ -0,0 +1,10 @@ +--- rpm-5.4.4/rpmpopt.in.clean~ 2011-12-05 20:52:18.544053402 +0100 ++++ rpm-5.4.4/rpmpopt.in 2011-12-05 20:53:51.520325674 +0100 +@@ -454,5 +454,7 @@ rpmbuild alias --lsb --noautoreq --noaut + + rpmbuild alias --withoutcheck --define 'check exit 0' \ + --POPTdesc=$"disable %check stanza for build" ++rpmbuild alias --withoutclean --define '__spec_clean_body %{nil}' \ ++ --POPTdesc=$"disable %clean stanza for build" + # \endverbatim + #*/ diff --git a/rpm-5.4.5-python-export-spec-macros.patch b/rpm-5.4.5-python-export-spec-macros.patch new file mode 100644 index 0000000..081deee --- /dev/null +++ b/rpm-5.4.5-python-export-spec-macros.patch @@ -0,0 +1,70 @@ +--- rpm-5.4.5/python/spec-py.c.py_macros~ 2012-03-01 22:55:19.592995392 +0100 ++++ rpm-5.4.5/python/spec-py.c 2012-03-01 22:56:02.081016570 +0100 +@@ -6,6 +6,8 @@ + + #include + #include ++#define _MACRO_INTERNAL ++#include + #include "spec-py.h" + + /** \ingroup python +@@ -146,6 +148,50 @@ spec_get_sources(specObject *s) + + } + ++static PyObject * ++spec_get_macros(specObject *s) ++ /*@*/ ++{ ++ MacroContext mc; ++ PyObject *macroDict; ++ Spec spec; ++ ++ macroDict = PyDict_New(); ++ if (!macroDict) { ++ return NULL; ++ } ++ spec = specFromSpec(s); ++ if ( spec != NULL) { ++ mc = spec->macros; ++ if (mc->macroTable != NULL) { ++ int i; ++ for (i = 0; i < mc->firstFree; i++) { ++ MacroEntry me; ++ PyObject *macro; ++ if ((me = mc->macroTable[i]) == NULL) { ++ /* XXX this should never happen */ ++ continue; ++ } ++ macro = PyDict_New(); ++ ++ PyMapping_SetItemString(macro, "used", PyInt_FromLong(me->used)); ++ PyMapping_SetItemString(macro, "level", PyInt_FromLong(me->level)); ++ if (me->opts && *me->opts) ++ PyMapping_SetItemString(macro, "opts", PyString_FromString(me->opts)); ++ if (me->body && *me->body) ++ PyMapping_SetItemString(macro, "body", PyString_FromString(me->body)); ++ PyMapping_SetItemString(macroDict, strdup(me->name), macro); ++ } ++ } ++ ++ return macroDict; ++ } ++ else { ++ return NULL; ++ } ++ ++} ++ + /** + */ + /*@unchecked@*/ /*@observer@*/ +@@ -161,6 +207,7 @@ static PyMethodDef spec_Spec_methods[] = + {"check", (PyCFunction) spec_get_check, METH_VARARGS, NULL }, + {"clean", (PyCFunction) spec_get_clean, METH_VARARGS, NULL }, + {"buildRoot", (PyCFunction) spec_get_buildroot, METH_VARARGS, NULL }, ++ {"macros", (PyCFunction) spec_get_macros, METH_VARARGS, NULL }, + {NULL} /* Sentinel */ + }; + /*@=fullinitblock@*/ diff --git a/rpm-5.4.5-rpmfc-apply-python-coloring-from-magic.patch b/rpm-5.4.5-rpmfc-apply-python-coloring-from-magic.patch new file mode 100644 index 0000000..06d5470 --- /dev/null +++ b/rpm-5.4.5-rpmfc-apply-python-coloring-from-magic.patch @@ -0,0 +1,10 @@ +--- rpm-5.4.5/lib/rpmfc.c.python_coloring~ 2012-03-05 23:13:57.442354701 +0100 ++++ rpm-5.4.5/lib/rpmfc.c 2012-03-05 23:13:59.610357114 +0100 +@@ -641,6 +641,7 @@ static struct rpmfcTokens_s rpmfcTokens[ + /* XXX "python 2.3 byte-compiled" */ + { " /usr/bin/python", RPMFC_PYTHON|RPMFC_INCLUDE }, + { "python ", RPMFC_PYTHON|RPMFC_INCLUDE }, ++ { "Python script", RPMFC_PYTHON|RPMFC_INCLUDE }, + + { "libtool library ", RPMFC_LIBTOOL|RPMFC_INCLUDE }, + { "pkgconfig ", RPMFC_PKGCONFIG|RPMFC_INCLUDE }, diff --git a/rpm-5.4.5-rpmfc-use-strlen-not-sizeof.patch b/rpm-5.4.5-rpmfc-use-strlen-not-sizeof.patch new file mode 100644 index 0000000..a18a408 --- /dev/null +++ b/rpm-5.4.5-rpmfc-use-strlen-not-sizeof.patch @@ -0,0 +1,11 @@ +--- rpm-5.4.5/lib/rpmfc.c.sizeof~ 2012-03-05 21:01:46.845529682 +0100 ++++ rpm-5.4.5/lib/rpmfc.c 2012-03-05 21:01:51.679533439 +0100 +@@ -909,7 +909,7 @@ static int rpmfcSCRIPT(rpmfc fc) + if (defaultdocdir == NULL || *defaultdocdir == '\0') + defaultdocdir = "/usr/share/doc"; + +- if (strncmp(fn, defaultdocdir, sizeof(defaultdocdir)-1)) { ++ if (strncmp(fn, defaultdocdir, strlen(defaultdocdir))) { + if (fc->fcolor->vals[fc->ix] & RPMFC_MODULE) + xx = rpmfcHelper(fc, 'P', "perl"); + if (is_executable || (fc->fcolor->vals[fc->ix] & RPMFC_MODULE)) diff --git a/rpm-5.4.5-rubygems-add-missing-newline.patch b/rpm-5.4.5-rubygems-add-missing-newline.patch new file mode 100644 index 0000000..706e38a --- /dev/null +++ b/rpm-5.4.5-rubygems-add-missing-newline.patch @@ -0,0 +1,16 @@ +--- rpm-5.4.5/scripts/rubygems.rb.rb_newline~ 2012-02-29 17:25:34.815069060 +0100 ++++ rpm-5.4.5/scripts/rubygems.rb 2012-02-29 18:45:41.587464927 +0100 +@@ -61,10 +61,11 @@ for path in $stdin.readlines + end + + if requires or abi_provide +- print "ruby(abi)" ++ abidep = "ruby(abi)" + if ruby_versioned +- print " = %s\n" % RbConfig::CONFIG["ruby_version"] ++ abidep += " = %s" % RbConfig::CONFIG["ruby_version"] + end ++ print abidep + "\n" + end + + if gems.length > 0 diff --git a/rpm-5.4.5-skip-dependencies-for-character-devices.patch b/rpm-5.4.5-skip-dependencies-for-character-devices.patch new file mode 100644 index 0000000..790ff48 --- /dev/null +++ b/rpm-5.4.5-skip-dependencies-for-character-devices.patch @@ -0,0 +1,13 @@ +--- rpm-5.4.5/lib/rpmfc.c.skip_chrdev~ 2012-03-03 05:22:33.527640802 +0100 ++++ rpm-5.4.5/lib/rpmfc.c 2012-03-03 05:31:05.973896224 +0100 +@@ -1265,7 +1265,9 @@ assert(fc->fn != NULL); + } + } + +- xx = (*fcat->func) (fc); ++ struct stat sb, * st = &sb; ++ if (stat(fc->fn[fc->ix], st) == 0 && !(st->st_mode & (S_IFBLK|S_IFCHR))) ++ xx = (*fcat->func) (fc); + } + } + diff --git a/rpm-5.4.7-dont-consider-trigger-dependencies-as-overlapping.patch b/rpm-5.4.7-dont-consider-trigger-dependencies-as-overlapping.patch new file mode 100644 index 0000000..bfb9159 --- /dev/null +++ b/rpm-5.4.7-dont-consider-trigger-dependencies-as-overlapping.patch @@ -0,0 +1,12 @@ +--- rpm-5.4.7/build/reqprov.c.triggers_nooverlap~ 2012-03-20 16:44:54.803999496 +0100 ++++ rpm-5.4.7/build/reqprov.c 2012-03-20 16:44:57.294002536 +0100 +@@ -117,6 +117,9 @@ int addReqProv(/*@unused@*/ Spec spec, H + * bit further, leaving under #ifdef for now... + * TODO: auto-generated deps too + */ ++ if (Flags & RPMSENSE_TRIGGER) ++ continue; ++ + if (flagtag && versions != NULL) { + int overlap = 0, res = 0; + rpmds old = rpmdsSingle(flagtag, names[len], versions[len] ? versions[len] : "", flags[len]); diff --git a/rpm-5.4.7-fix-generation-of-ruby-abi-provides.patch b/rpm-5.4.7-fix-generation-of-ruby-abi-provides.patch new file mode 100644 index 0000000..b75fd38 --- /dev/null +++ b/rpm-5.4.7-fix-generation-of-ruby-abi-provides.patch @@ -0,0 +1,48 @@ +--- rpm-5.4.7/lib/rpmfc.c.rubyabi_prov~ 2012-03-10 21:50:02.143073469 +0100 ++++ rpm-5.4.7/lib/rpmfc.c 2012-03-10 21:57:13.898394232 +0100 +@@ -1204,9 +1204,13 @@ assert(fc->fn != NULL); + } + else if (!strncmp(fn, "/ruby", sizeof("/ruby")-1)) { + fc->fcolor->vals[fc->ix] |= RPMFC_RUBY; +- if ((fn = strstr(fn, "/specifications/")) && +- (fn = strrchr(fn, '.')) && !strcmp(fn, ".gemspec")) +- fc->fcolor->vals[fc->ix] |= RPMFC_MODULE; ++ if ((strstr(fn, ".gemspec") || strstr(fn, "rbconfig.rb"))) { ++ miRE mire = mireNew(RPMMIRE_REGEX, RPMTAG_FILEPATHS); ++ if (!mireRegcomp(mire, ".*/(specifications/.*\\.gemspec|rbconfig\\.rb)$")) ++ if (mireRegexec(mire, fc->fn[fc->ix], (size_t) 0) >= 0) ++ fc->fcolor->vals[fc->ix] |= RPMFC_MODULE; ++ mire = mireFree(mire); ++ } + } + /* XXX: lacking better, more generic classifier... */ + else if (!strncmp(fn, "/gstreamer", sizeof("/gstreamer")-1) && +--- rpm-5.4.7/scripts/rubygems.rb.rubyabi_prov~ 2012-03-10 21:50:15.637085059 +0100 ++++ rpm-5.4.7/scripts/rubygems.rb 2012-03-10 21:50:23.928092180 +0100 +@@ -36,7 +36,12 @@ ruby_versioned = false + abi_provide = false + + for path in $stdin.readlines +- if path.match(specpatt) ++ # way fugly, but we make the assumption that if the package has ++ # this file, the package is the current ruby version, and should ++ # therefore provide ruby(abi) = version ++ if provides and path.match(RbConfig::CONFIG["archdir"] + "/rbconfig.rb") ++ abi_provide = true ++ elsif path.match(specpatt) + ruby_versioned = true + gems.push(path.chomp) + # this is quite ugly and lame, but the assumption made is that if any files +@@ -46,12 +51,6 @@ for path in $stdin.readlines + elsif not ruby_versioned + if path.match(RbConfig::CONFIG["rubylibdir"]) + ruby_versioned = true +- # even more fugly, but we make the assumption that if the package has +- # this file, the package is the current ruby version, and should +- # therefore provide ruby(abi) = version +- if provides and path.match(RbConfig::CONFIG["rubylibdir"] + "/Env.rb") +- abi_provide = true +- end + elsif path.match(RbConfig::CONFIG["sitelibdir"]) + ruby_versioned = true + elsif path.match(RbConfig::CONFIG["vendorlibdir"]) diff --git a/rpm-5.4.7-fix-minor-memleaks.patch b/rpm-5.4.7-fix-minor-memleaks.patch new file mode 100644 index 0000000..78a1899 --- /dev/null +++ b/rpm-5.4.7-fix-minor-memleaks.patch @@ -0,0 +1,25 @@ +--- rpm-5.4.7/build/parseReqs.c.memleak~ 2012-03-21 19:13:54.725053861 +0100 ++++ rpm-5.4.7/build/parseReqs.c 2012-03-21 19:13:57.755057614 +0100 +@@ -177,7 +177,7 @@ rpmRC parseRCPOT(Spec spec, Package pkg, + if (!(nr > 3 && EVR[0] == '%' && EVR[1] == '{' && EVR[nr-1] == '}')) + { + memset(evr, 0, sizeof(*evr)); +- ix = rpmEVRparse(xstrdup(EVR), evr); ++ ix = rpmEVRparse(EVR, evr); + evr->str = _free(evr->str); + } + if (ix != 0) { +--- rpm-5.4.7/rpmio/macro.c.memleak~ 2012-03-21 19:16:07.453218370 +0100 ++++ rpm-5.4.7/rpmio/macro.c 2012-03-21 19:19:33.758488216 +0100 +@@ -2818,8 +2818,10 @@ rpmLoadMacroFile(MacroContext mc, const + } + se = rpmMCExpand(mc, s, NULL); + rc = rpmGlob(se, &argc, &argv); +- for(i = 0; i < argc; i++) ++ for(i = 0; i < argc; i++) { + rc |= rpmLoadMacroFile(mc, argv[i], nesting - 1); ++ argv[i] = _free(argv[i]); ++ } + argv = _free(argv); + se = _free(se); + if (rc != 0) diff --git a/rpm-5.4.7-hdrfmt-fix-unitialized-argv-element.patch b/rpm-5.4.7-hdrfmt-fix-unitialized-argv-element.patch new file mode 100644 index 0000000..157a6eb --- /dev/null +++ b/rpm-5.4.7-hdrfmt-fix-unitialized-argv-element.patch @@ -0,0 +1,14 @@ +--- rpm-5.4.7/rpmdb/hdrfmt.c.unitialized~ 2012-03-19 14:21:14.907225418 +0100 ++++ rpm-5.4.7/rpmdb/hdrfmt.c 2012-03-19 14:21:17.327228582 +0100 +@@ -2048,8 +2048,10 @@ static int triggertypeTag(Header h, HE_t + he->p.argv = xmalloc(sizeof(*he->p.argv) * he->c); + for (i = 0; i < (unsigned) he->c; i++) { + for (j = 0; j < (unsigned) numNames; j++) { +- if (indices.ui32p[j] != i) ++ if (indices.ui32p[j] != i) { ++ he->p.argv[i] = NULL; + /*@innercontinue@*/ continue; ++ } + + /* XXX FIXME: there's memory leaks here. */ + if (flags.ui32p[j] & RPMSENSE_TRIGGERPREIN) diff --git a/rpm-5.4.7-kmod-dependencies.patch b/rpm-5.4.7-kmod-dependencies.patch new file mode 100644 index 0000000..df3d02c --- /dev/null +++ b/rpm-5.4.7-kmod-dependencies.patch @@ -0,0 +1,66 @@ +--- rpm-5.4.7/lib/rpmfc.c.kmod~ 2012-03-16 16:34:04.640654829 +0100 ++++ rpm-5.4.7/lib/rpmfc.c 2012-03-16 16:34:04.644654834 +0100 +@@ -981,6 +981,19 @@ static int rpmfcSCRIPT(rpmfc fc) + xx = rpmfcHelper(fc, 'P', "gstreamer"); + /* XXX: currently of no use, but for the sake of consistency... */ + xx = rpmfcHelper(fc, 'R', "gstreamer"); ++#if defined(RPM_VENDOR_MANDRIVA) || defined(RPM_VENDOR_PLD) ++ } else ++ if ((fc->fcolor->vals[fc->ix] & RPMFC_MODULE)) { ++ miRE mire = mireNew(RPMMIRE_REGEX, RPMTAG_FILEPATHS); ++ if (!mireRegcomp(mire, "^.*((/lib/modules/|/var/lib/dkms/).*\\.ko(\\.gz|\\.xz)?|(/var/lib/dkms-binary/[^/]+/[^/]+|/usr/src)/[^/]+/dkms.conf)$")) ++ if (mireRegexec(mire, fc->fn[fc->ix], (size_t) 0) >= 0) { ++ fc->fcolor->vals[fc->ix] |= (RPMFC_MODULE|RPMFC_SCRIPT); ++ xx = rpmfcHelper(fc, 'P', "kernel"); ++ /* XXX: currently of no use, but for the sake of consistency... */ ++ xx = rpmfcHelper(fc, 'R', "kernel"); ++ } ++ mire = mireFree(mire); ++#endif + } else + if (fc->fcolor->vals[fc->ix] & RPMFC_JAVA) { + xx = rpmfcHelper(fc, 'P', "java"); +@@ -1188,6 +1201,14 @@ assert(fc->fn != NULL); + else if (!strncmp(fn, "/gstreamer", sizeof("/gstreamer")-1) && + fc->fcolor->vals[fc->ix] & RPMFC_LIBRARY) + fc->fcolor->vals[fc->ix] |= (RPMFC_MODULE|RPMFC_SCRIPT); ++#if defined(RPM_VENDOR_MANDRIVA) || defined(RPM_VENDOR_PLD) ++ } else { ++ miRE mire = mireNew(RPMMIRE_REGEX, RPMTAG_FILEPATHS); ++ if (!mireRegcomp(mire, "^.*((/lib/modules/|/var/lib/dkms/).*\\.ko(\\.gz|\\.xz)?|(/var/lib/dkms-binary/[^/]+/[^/]+|/usr/src)/[^/]+/dkms.conf)$")) ++ if (mireRegexec(mire, fc->fn[fc->ix], (size_t) 0) >= 0) ++ fc->fcolor->vals[fc->ix] |= (RPMFC_MODULE|RPMFC_SCRIPT); ++ mire = mireFree(mire); ++#endif + } + } + +--- rpm-5.4.7/macros/kernel.in.kmod~ 2011-04-10 12:54:18.000000000 +0200 ++++ rpm-5.4.7/macros/kernel.in 2012-03-16 16:37:04.277948160 +0100 +@@ -2,11 +2,11 @@ + # To make use of these macros insert the following line into your spec file: + # %{load:%{_usrlibrpm}/macros.d/kernel} + +-%__modinfo @__MODINFO ++%__modinfo @__MODINFO@ + + # Path to scripts to autogenerate gstreamer package dependencies, + # +-# Note: Used if _use_internal_dependency_generator is non-zero. The ++# Note: Used iff _use_internal_dependency_generator is non-zero. The + # helpers are also used by %{_rpmhome}/rpmdeps {--provides|--requires}. + %__kernel_provides %{_rpmhome}/kmod-deps.sh --provides --modinfo %__modinfo + #%__kernel_requires %{_rpmhome}/kmod-deps.sh --requires --modinfo %__modinfo +--- rpm-5.4.7/macros/macros.in.kmod~ 2012-03-16 16:34:04.614654786 +0100 ++++ rpm-5.4.7/macros/macros.in 2012-03-16 16:34:04.645654836 +0100 +@@ -981,6 +981,10 @@ $_arbitrary_tags_tests Foo:Bar + %{load:%{_usrlibrpm}/macros.d/haskell} + + #------------------------------------------------------------------------ ++# kmod(...) configuration. ++%{load:%{_usrlibrpm}/macros.d/kernel} ++ ++#------------------------------------------------------------------------ + # perl(...) configuration + %{load:%{_usrlibrpm}/macros.d/perl} + diff --git a/rpm-5.4.7-no-seqid_init-on-rdonly-database.patch b/rpm-5.4.7-no-seqid_init-on-rdonly-database.patch new file mode 100644 index 0000000..85d52e0 --- /dev/null +++ b/rpm-5.4.7-no-seqid_init-on-rdonly-database.patch @@ -0,0 +1,11 @@ +--- rpm-5.4.7/rpmdb/db3.c.db_rdonly~ 2012-03-24 04:16:30.305949579 +0100 ++++ rpm-5.4.7/rpmdb/db3.c 2012-03-24 04:16:39.649962411 +0100 +@@ -2700,7 +2700,7 @@ assert(Pdbi != NULL); + if (oflags & (DB_CREATE|DB_TRUNCATE)) _flags |= DB_CREATE; + xx = db3associate(Pdbi, dbi, _callback, _flags); + } +- if (dbi->dbi_seq_id) { ++ if (dbi->dbi_seq_id && !(oflags & DB_RDONLY)) { + char * end = NULL; + uint32_t u = (uint32_t) strtoll(dbi->dbi_seq_id, &end, 0); + diff --git a/rpm-5.4.7-rpmfc-fix-invalid-free-if-not-_defaultdocdir-set.patch b/rpm-5.4.7-rpmfc-fix-invalid-free-if-not-_defaultdocdir-set.patch new file mode 100644 index 0000000..9e77639 --- /dev/null +++ b/rpm-5.4.7-rpmfc-fix-invalid-free-if-not-_defaultdocdir-set.patch @@ -0,0 +1,11 @@ +--- rpm-5.4.7/lib/rpmfc.c.free~ 2012-03-10 19:45:12.592164430 +0100 ++++ rpm-5.4.7/lib/rpmfc.c 2012-03-10 19:45:15.353166385 +0100 +@@ -901,7 +901,7 @@ static int rpmfcSCRIPT(rpmfc fc) + if (fc->fcolor->vals[fc->ix] & RPMFC_PERL) { + defaultdocdir = rpmExpand("%{?_defaultdocdir}", NULL); + if (defaultdocdir == NULL || *defaultdocdir == '\0') +- defaultdocdir = "/usr/share/doc"; ++ defaultdocdir = strdup("/usr/share/doc"); + + if (strncmp(fn, defaultdocdir, strlen(defaultdocdir))) { + if (fc->fcolor->vals[fc->ix] & RPMFC_MODULE) diff --git a/rpm-5.4.8-dont-show-suggests-with-requires.patch b/rpm-5.4.8-dont-show-suggests-with-requires.patch new file mode 100644 index 0000000..19cf1e0 --- /dev/null +++ b/rpm-5.4.8-dont-show-suggests-with-requires.patch @@ -0,0 +1,62 @@ +--- rpm-5.4.8/rpmdb/hdrfmt.c.suggests~ 2012-04-25 17:58:22.721144146 +0200 ++++ rpm-5.4.8/rpmdb/hdrfmt.c 2012-04-25 18:33:32.293704707 +0200 +@@ -1607,6 +1607,38 @@ static const char * bfstring(unsigned in + #endif + + /** ++ * Format dependency flags for display. ++ * @param he tag container ++ * @param av parameter list (or NULL) ++ * @return formatted string ++ */ ++static /*@only@*/ ++char * hintFormat(HE_t he, /*@unused@*/ /*@null@*/ const char ** av) ++ /*@*/ ++{ ++ int ix = (he->ix > 0 ? he->ix : 0); ++ char * val; ++ ++assert(ix == 0); ++ if (he->t != RPM_UINT64_TYPE) { ++ val = xstrdup(_("(invalid type)")); ++ } else { ++ rpmuint64_t anint = he->p.ui64p[ix]; ++ char *t, *buf; ++ ++ t = buf = alloca(32); ++ *t = '\0'; ++ ++ if (anint & RPMSENSE_MISSINGOK) ++ t = stpcpy(t, "(hint)"); ++ *t = '\0'; ++ ++ val = xstrdup(buf); ++ } ++ ++ return val; ++} ++/** + * Retrieve install prefixes. + * @param h header + * @retval *he tag container +@@ -5201,6 +5233,8 @@ static struct headerSprintfExtension_s _ + { .fmtFunction = digestFormat } }, + { HEADER_EXT_FORMAT, "fflags", + { .fmtFunction = fflagsFormat } }, ++ { HEADER_EXT_FORMAT, "hint", ++ { .fmtFunction = hintFormat } }, + { HEADER_EXT_FORMAT, "iconv", + { .fmtFunction = iconvFormat } }, + { HEADER_EXT_FORMAT, "json", +--- rpm-5.4.8/rpmpopt.in.suggests~ 2012-04-25 17:58:22.439141788 +0200 ++++ rpm-5.4.8/rpmpopt.in 2012-04-25 18:33:32.295704719 +0200 +@@ -98,7 +98,8 @@ rpm alias --provides --qf \ + --POPTdesc=$"list capabilities that this package provides" + + rpm alias --requires --qf \ +- "[%{REQUIRENAME}%{REQUIREFLAGS:depflags}%{REQUIREVERSION}\n]" \ ++ "[%{REQUIRENAME}%{REQUIREFLAGS:hint:depflags}%{REQUIREVERSION}\n]" \ ++ --pipe "grep -v \(hint\)" \ + --POPTdesc=$"list capabilities required by package(s)" + rpm alias -R --requires + diff --git a/rpm-5.4.9-avoid-dependencies-on-self.patch b/rpm-5.4.9-avoid-dependencies-on-self.patch new file mode 100644 index 0000000..8a3ea13 --- /dev/null +++ b/rpm-5.4.9-avoid-dependencies-on-self.patch @@ -0,0 +1,85 @@ +--- rpm-5.4.9/lib/rpmfc.c.drop_deps~ 2012-05-07 22:41:45.000000000 +0200 ++++ rpm-5.4.9/lib/rpmfc.c 2012-05-15 01:58:00.071056896 +0200 +@@ -1696,6 +1696,65 @@ static int rpmfcGenerateScriptletDeps(co + return rc; + } + ++static void removeSillyDeps(Header h) { ++ HE_t he = memset(alloca(sizeof(*he)), 0, sizeof(*he)); ++ int xx, i, rnum, removed = 0; ++ const char **deps = NULL; ++ const char **versions = NULL; ++ evrFlags *flags = NULL; ++ ++ he->tag = RPMTAG_REQUIRENAME; ++ xx = headerGet(h, he, 0); ++ deps = he->p.argv; ++ rnum = he->c; ++ ++ he->tag = RPMTAG_REQUIREVERSION; ++ xx = headerGet(h, he, 0); ++ versions = he->p.argv; ++ ++ he->tag = RPMTAG_REQUIREFLAGS; ++ xx = headerGet(h, he, 0); ++ flags = (evrFlags*)he->p.ui32p; ++ ++ for (i = 0; i < rnum-removed; i++) { ++ if (removed) { ++ deps[i] = deps[i+removed]; ++ versions[i] = versions[i+removed]; ++ flags[i] = flags[i+removed]; ++ } ++ rpmds req = rpmdsSingle(RPMTAG_REQUIRENAME, deps[i], versions[i], flags[i]); ++ rpmds prov = rpmdsNew(h, (*deps[i] == '/' && !*versions[i]) ? RPMTAG_BASENAMES : RPMTAG_PROVIDENAME, 0); ++ if (rpmdsMatch(req, prov)) { ++ if (flags[i] & RPMSENSE_SCRIPT_PRE) ++ rpmlog(RPMLOG_ERR, "Requires(pre): on dependency provided by self: %s\n", rpmdsDNEVR(req)); ++ else { ++ rpmlog(RPMLOG_NOTICE, "Removing dependency on self: %s\n", rpmdsDNEVR(req)); ++ removed++; ++ i--; ++ } ++ } ++ req = rpmdsFree(req); ++ prov = rpmdsFree(prov); ++ } ++ if (removed) { ++ he->tag = RPMTAG_REQUIRENAME; ++ he->t = RPM_STRING_ARRAY_TYPE; ++ he->p.argv = deps; ++ he->c -= removed; ++ headerMod(h, he, 0); ++ ++ he->tag = RPMTAG_REQUIREVERSION; ++ he->p.argv = versions; ++ headerMod(h, he, 0); ++ ++ he->tag = RPMTAG_REQUIREFLAGS; ++ he->t = RPM_UINT32_TYPE; ++ he->p.ui32p = (uint32_t*)flags; ++ headerMod(h, he, 0); ++ } ++ ++} ++ + rpmRC rpmfcGenerateDepends(void * _spec, void * _pkg) + { + HE_t he = (HE_t) memset(alloca(sizeof(*he)), 0, sizeof(*he)); +@@ -1729,6 +1788,7 @@ rpmRC rpmfcGenerateDepends(void * _spec, + if (internaldeps == 0) { + /* ... then generate dependencies using %{__find_requires} et al. */ + rc = rpmfcGenerateDependsHelper(spec, pkg, fi); ++ removeSillyDeps(pkg->header); + printDeps(pkg->header); + return rc; + } +@@ -1946,6 +2006,8 @@ assert(ac == (int)he->c); + xx = headerPut(pkg->header, he, 0); + } + ++ removeSillyDeps(pkg->header); ++ + printDeps(pkg->header); + + if (fc != NULL && _rpmfc_debug) { diff --git a/rpm-5.4.9-avoid-double-slash-in-path-for-dirname-filetrigger-matching.patch b/rpm-5.4.9-avoid-double-slash-in-path-for-dirname-filetrigger-matching.patch new file mode 100644 index 0000000..7535c34 --- /dev/null +++ b/rpm-5.4.9-avoid-double-slash-in-path-for-dirname-filetrigger-matching.patch @@ -0,0 +1,23 @@ +--- rpm-5.4.9/lib/psm.c.slash~ 2012-05-15 03:47:32.000000000 +0200 ++++ rpm-5.4.9/lib/psm.c 2012-05-15 03:49:04.075347677 +0200 +@@ -1463,11 +1463,15 @@ static rpmRC runTriggersLoop(rpmpsm psm, + ARGint_t vals; + + depName = _free(depName); +- depName = (char *) xmalloc(nName + 1 + 1); +- (void) stpcpy(depName, Name); +- /* XXX re-add the pesky trailing '/' to dirnames. */ +- depName[nName] = (tagno == RPMTAG_DIRNAMES ? '/' : '\0'); +- depName[nName+1] = '\0'; ++ if (!strcmp(Name, "/")) ++ depName = xstrdup(Name); ++ else { ++ depName = xmalloc(nName + 1 + 1); ++ (void) stpcpy(depName, Name); ++ /* XXX re-add the pesky trailing '/' to dirnames. */ ++ depName[nName] = (tagno == RPMTAG_DIRNAMES ? '/' : '\0'); ++ depName[nName+1] = '\0'; ++ } + + if (depName[0] == '/' && psm->Tmires != NULL) { + miRE mire; diff --git a/rpm-5.4.9-fix-typo-in-rpmtag-header.patch b/rpm-5.4.9-fix-typo-in-rpmtag-header.patch new file mode 100644 index 0000000..ef1685b --- /dev/null +++ b/rpm-5.4.9-fix-typo-in-rpmtag-header.patch @@ -0,0 +1,11 @@ +--- rpm-5.4.9/rpmdb/rpmtag.h.typo~ 2012-05-03 20:39:52.000000000 +0200 ++++ rpm-5.4.9/rpmdb/rpmtag.h 2012-05-18 05:30:09.780867642 +0200 +@@ -948,7 +948,7 @@ Header headerCopyLoad(const void * uh) + int headerIsEntry(/*@null@*/ Header h, rpmTag tag) + /*@*/; + +-#if defined(SUPPORT_I18BSTRING_TYPE) ++#if defined(SUPPORT_I18NSTRING_TYPE) + /** \ingroup header + * Add locale specific tag to header. + * A NULL lang is interpreted as the C locale. Here are the rules: diff --git a/rpm-5.4.9-fix-verify-segfault.patch b/rpm-5.4.9-fix-verify-segfault.patch new file mode 100644 index 0000000..e457b5e --- /dev/null +++ b/rpm-5.4.9-fix-verify-segfault.patch @@ -0,0 +1,26 @@ +--- rpm-5.4.9/rpmio/rpmhkp.c.fix_verify~ 2012-04-16 22:53:33.000000000 +0200 ++++ rpm-5.4.9/rpmio/rpmhkp.c 2012-05-15 03:51:08.805023846 +0200 +@@ -901,6 +901,14 @@ char * t, * te; + te = t = tbuf; + *te = '\0'; + ++ /*Reset all the temporary variables*/ ++ hkp->pubx = -1; ++ hkp->uidx = -1; ++ hkp->subx = -1; ++ hkp->sigx = -1; ++ hkp->tvalid = 0; ++ hkp->uvalidx = -1; ++ + HKPDEBUG((stderr, "--> %s(%p,%s)\n", __FUNCTION__, hkp, keyname)); + + /* Do a lazy lookup before validating. */ +@@ -1065,7 +1073,7 @@ SPEW((stderr, "\t%s\n", pgpHexStr(hkp->p + } + + exit: +- if ((hkp->uidx >= 0 && hkp->uidx < hkp->npkts) && hkp->tvalid > 0) { ++ if ((hkp->uvalidx >= 0 && hkp->uvalidx < hkp->npkts) && hkp->tvalid > 0) { + char user[256+1]; + size_t nuser; + pgpPktUid * u; diff --git a/rpm-5.4.9-font-provides.patch b/rpm-5.4.9-font-provides.patch new file mode 100644 index 0000000..d0b894a --- /dev/null +++ b/rpm-5.4.9-font-provides.patch @@ -0,0 +1,60 @@ +--- rpm-5.4.9/macros/macros.rpmbuild.in.font~ 2012-05-15 02:55:46.222011889 +0200 ++++ rpm-5.4.9/macros/macros.rpmbuild.in 2012-05-15 02:55:46.347012566 +0200 +@@ -682,5 +682,8 @@ done \ + + %requires_eq() %(echo '%*' | LC_ALL="C" xargs -r rpm -q --qf 'Requires: %%{name} = %%{epoch}:%%{version}\\n' | sed -e 's/ (none):/ /' -e 's/ 0:/ /' | grep -v "is not") + ++%__font_provides %{_rpmhome}/fontconfig.prov ++#%__font_requires %{_rpmhome}/fontconfig.req ++ + # \endverbatim + #*/ +--- rpm-5.4.9/scripts/fontconfig.prov.font~ 2012-05-15 02:55:46.347012566 +0200 ++++ rpm-5.4.9/scripts/fontconfig.prov 2012-05-15 02:55:46.347012566 +0200 +@@ -0,0 +1,24 @@ ++#!/bin/bash ++# ++# Script to install in: ++# /usr/lib/rpm/redhat/find-provides.d ++# ++# Transform font files into RPM provides ++# Requires fontconfig >= 2.6.90 ++# ++# Author: Behdad Esfahbod ++# Based on other provides scripts from RPM ++# ++ ++fcquery=/usr/bin/fc-query ++ ++if [ ! -x $fcquery ]; then ++ cat > /dev/null ++ exit 0 ++fi ++ ++# filter out anything outside main fontconfig path ++grep /usr/share/fonts/ | ++while read fn; do ++ $fcquery --format '%{=pkgkit}' "${fn}" 2> /dev/null ++done +--- rpm-5.4.9/scripts/Makefile.am.font~ 2012-05-15 02:55:46.304012334 +0200 ++++ rpm-5.4.9/scripts/Makefile.am 2012-05-15 02:55:46.347012566 +0200 +@@ -19,7 +19,7 @@ EXTRA_DIST = api-sanity-autotest.pl api- + cpanflute cpanflute2 Specfile.pm \ + find-provides.perl find-requires.perl \ + find-provides.php find-requires.php \ +- freshen.sh gendiff getpo.sh http.req \ ++ freshen.sh fontconfig.prov gendiff getpo.sh http.req \ + check-java-closure.sh java.prov.sh java.req.sh \ + gstreamer.sh javadeps.sh libtooldeps.sh mgo \ + mono-find-provides mono-find-requires \ +@@ -55,8 +55,8 @@ pkgdata_SCRIPTS = \ + brp-strip-shared brp-strip-static-archive brp-sparc64-linux \ + check-files cross-build dbconvert.sh executabledeps.sh \ + find-debuginfo.sh find-lang.sh find-prov.pl find-req.pl \ +- find-provides.perl \ +- find-requires.perl gem_helper.rb getpo.sh http.req \ ++ find-provides.perl find-requires.perl \ ++ fontconfig.prov gem_helper.rb getpo.sh http.req \ + kmod-deps.sh gstreamer.sh javadeps.sh libtooldeps.sh \ + mono-find-provides mono-find-requires \ + check-multiarch-files mkmultiarch \ diff --git a/rpm-5.4.9-keep-loading-script-macros.patch b/rpm-5.4.9-keep-loading-script-macros.patch new file mode 100644 index 0000000..8bd04bf --- /dev/null +++ b/rpm-5.4.9-keep-loading-script-macros.patch @@ -0,0 +1,80 @@ +--- rpm-5.4.9/macros/macros.in.script_macros~ 2012-05-07 00:36:51.000000000 +0200 ++++ rpm-5.4.9/macros/macros.in 2012-05-15 01:39:37.382649841 +0200 +@@ -993,63 +993,63 @@ $_arbitrary_tags_tests Foo:Bar + # XXX %{load:...}, then loading will CEASE at that point in the file. + #============================================================================== + # ---- SELinux configuration macros. +-#%%{load:%{_usrlibrpm}/macros.d/selinux} ++%{load:%{_usrlibrpm}/macros.d/selinux} + + #============================================================================== + # ---- rpmbuild macros. +-#%%{load:%{_usrlibrpm}/macros.rpmbuild} ++%{load:%{_usrlibrpm}/macros.rpmbuild} + + #------------------------------------------------------------------------ + # cmake(...) configuration +-#%%{load:%{_usrlibrpm}/macros.d/cmake} ++%{load:%{_usrlibrpm}/macros.d/cmake} + + #------------------------------------------------------------------------ + # gstreamer(...) configuration. +-#%%{load:%{_usrlibrpm}/macros.d/gstreamer} ++%{load:%{_usrlibrpm}/macros.d/gstreamer} + + #------------------------------------------------------------------------ + # haskell(...) configuration. + #%%{load:%{_usrlibrpm}/macros.d/haskell} + + #------------------------------------------------------------------------ + # perl(...) configuration +-#%%{load:%{_usrlibrpm}/macros.d/perl} ++%{load:%{_usrlibrpm}/macros.d/perl} + + #------------------------------------------------------------------------ + # python(...) configuration. +-#%%{load:%{_usrlibrpm}/macros.d/python} ++%{load:%{_usrlibrpm}/macros.d/python} + + #------------------------------------------------------------------------ + # php(...) configuration. +-#%%{load:%{_usrlibrpm}/macros.d/php} ++%{load:%{_usrlibrpm}/macros.d/php} + + #------------------------------------------------------------------------ + # java(...) configuration. +-#%%{load:%{_usrlibrpm}/macros.d/java} ++%{load:%{_usrlibrpm}/macros.d/java} + + #------------------------------------------------------------------------ + # libtool(...) configuration. +-#%%{load:%{_usrlibrpm}/macros.d/libtool} ++%{load:%{_usrlibrpm}/macros.d/libtool} + + #------------------------------------------------------------------------ + # pkgconfig(...) configuration. +-#%%{load:%{_usrlibrpm}/macros.d/pkgconfig} ++%{load:%{_usrlibrpm}/macros.d/pkgconfig} + + #------------------------------------------------------------------------ + # mono(...) configuration. +-#%%{load:%{_usrlibrpm}/macros.d/mono} ++%{load:%{_usrlibrpm}/macros.d/mono} + + #------------------------------------------------------------------------ + # ruby(...) configuration. +-#%%{load:%{_usrlibrpm}/macros.d/ruby} ++%{load:%{_usrlibrpm}/macros.d/ruby} + + #------------------------------------------------------------------------ + # tcl(...) configuration. +-#%%{load:%{_usrlibrpm}/macros.d/tcl} ++%{load:%{_usrlibrpm}/macros.d/tcl} + + #------------------------------------------------------------------------ + # typelib(...) configuration. +-#%%{load:%{_usrlibrpm}/macros.d/typelib} ++%{load:%{_usrlibrpm}/macros.d/typelib} + + # \endverbatim + #*/ diff --git a/rpm-5.4.9-mire-fix-strings-lacking-null-terminator.patch b/rpm-5.4.9-mire-fix-strings-lacking-null-terminator.patch new file mode 100644 index 0000000..b2d3f32 --- /dev/null +++ b/rpm-5.4.9-mire-fix-strings-lacking-null-terminator.patch @@ -0,0 +1,32 @@ +--- rpm-5.4.9/rpmio/mire.c.str_nul~ 2012-04-16 05:21:22.000000000 +0200 ++++ rpm-5.4.9/rpmio/mire.c 2012-05-15 03:20:14.361970779 +0200 +@@ -415,11 +415,10 @@ int mireRegexec(miRE mire, const char * + break; + /* XXX rpmgrep: ensure that the string is NUL terminated. */ + if (vallen > 0) { +- if (val[vallen] != '\0') { +- char * t = strncpy((char *)alloca(vallen+1), val, vallen); +- t[vallen] = '\0'; +- val = t; +- } ++ /* if (val[vallen] != '\0') might go outside of allocated memory */ ++ char * t = strncpy(alloca(vallen+1), val, vallen); ++ t[vallen] = '\0'; ++ val = t; + } else + if (vallen == 0) + vallen = strlen(val); +@@ -466,6 +465,13 @@ int mireRegexec(miRE mire, const char * + case RPMMIRE_GLOB: + if (mire->pattern == NULL) + break; ++ /* XXX rpmgrep: ensure that the string is NUL terminated. */ ++ if (vallen > 0) { ++ /* if (val[vallen] != '\0') might go outside of allocated memory */ ++ char * t = strncpy(alloca(vallen+1), val, vallen); ++ t[vallen] = '\0'; ++ val = t; ++ } + rc = fnmatch(mire->pattern, val, mire->fnflags); + switch (rc) { + case 0: rc = 0; /*@innerbreak@*/ break; diff --git a/rpm-5.4.9-rpmfc-extract-dependencies-for-all-files.patch b/rpm-5.4.9-rpmfc-extract-dependencies-for-all-files.patch new file mode 100644 index 0000000..2a72e5a --- /dev/null +++ b/rpm-5.4.9-rpmfc-extract-dependencies-for-all-files.patch @@ -0,0 +1,11 @@ +--- rpm-5.4.9/lib/rpmfc.c.rpmfc_ruby~ 2012-05-15 02:27:26.000000000 +0200 ++++ rpm-5.4.9/lib/rpmfc.c 2012-05-15 02:27:34.978029207 +0200 +@@ -1090,7 +1090,7 @@ typedef struct rpmfcApplyTbl_s { + /*@unchecked@*/ + static struct rpmfcApplyTbl_s rpmfcApplyTable[] = { + { rpmfcELF, RPMFC_ELF }, +- { rpmfcSCRIPT, (RPMFC_SCRIPT|RPMFC_FONT|RPMFC_HASKELL|RPMFC_PERL|RPMFC_PYTHON|RPMFC_LIBTOOL|RPMFC_PKGCONFIG|RPMFC_BOURNE|RPMFC_JAVA|RPMFC_PHP|RPMFC_MONO|RPMFC_TYPELIB|RPMFC_DESKTOP_FILE) }, ++ { rpmfcSCRIPT, (RPMFC_SCRIPT|RPMFC_FONT|RPMFC_HASKELL|RPMFC_RUBY|RPMFC_PERL|RPMFC_PYTHON|RPMFC_LIBTOOL|RPMFC_PKGCONFIG|RPMFC_BOURNE|RPMFC_JAVA|RPMFC_PHP|RPMFC_MONO|RPMFC_TYPELIB|RPMFC_DESKTOP_FILE) }, + #if defined(RPM_VENDOR_MANDRIVA) + { rpmfcSYMLINK, RPMFC_SYMLINK }, + #endif diff --git a/rpm-5.4.9-rpmpython-fix-input.patch b/rpm-5.4.9-rpmpython-fix-input.patch new file mode 100644 index 0000000..0589a54 --- /dev/null +++ b/rpm-5.4.9-rpmpython-fix-input.patch @@ -0,0 +1,11 @@ +--- rpm-5.4.9/rpmio/rpmpython.c.py_input~ 2012-05-15 03:40:55.316698083 +0200 ++++ rpm-5.4.9/rpmio/rpmpython.c 2012-05-15 03:40:59.799722384 +0200 +@@ -215,7 +215,7 @@ fprintf(stderr, "==> %s(%p,%s,%p)\n", __ + PyCompilerFlags cf = { 0 }; + PyObject * m = PyImport_AddModule("__main__"); + PyObject * d = (m ? PyModule_GetDict(m) : NULL); +- PyObject * v = (m ? PyRun_StringFlags(val, Py_file_input, d, d, &cf) : NULL); ++ PyObject * v = (m ? PyRun_StringFlags(val, Py_single_input, d, d, &cf) : NULL); + + if (v == NULL) { + PyErr_Print(); diff --git a/rpm-5.4.9-ruby1.9-fixes.patch b/rpm-5.4.9-ruby1.9-fixes.patch new file mode 100644 index 0000000..2c0ae90 --- /dev/null +++ b/rpm-5.4.9-ruby1.9-fixes.patch @@ -0,0 +1,114 @@ +diff -urN rpm-5.4.9/macros/ruby.in rpm-5.4.9-patched/macros/ruby.in +--- rpm-5.4.9/macros/ruby.in 2011-10-15 23:56:57.000000000 +1100 ++++ rpm-5.4.9-patched/macros/ruby.in 2012-08-30 18:09:09.732009037 +1100 +@@ -2,7 +2,7 @@ + # To make use of these macros insert the following line into your spec file: + # %{load:%{_usrlibrpm}/macros.d/ruby} + +-%__ruby @__RUBY@ ++%__ruby /usr/bin/ruby + + # Path to scripts to autogenerate php package dependencies, + # +@@ -11,18 +11,18 @@ + %__ruby_provides %{_rpmhome}/rubygems.rb --provides + %__ruby_requires %{_rpmhome}/rubygems.rb --requires + +-%ruby_version %(%{__ruby} -rrbconfig -e 'print Config::CONFIG["ruby_version"]') ++%ruby_version %(%{__ruby} -rrbconfig -e 'print RbConfig::CONFIG["ruby_version"]') + +-%ruby_archdir %(%{__ruby} -rrbconfig -e 'print Config::CONFIG["archdir"]') +-%ruby_libdir %(%{__ruby} -rrbconfig -e 'print Config::CONFIG["rubylibdir"]') +-%ruby_sitedir %(%{__ruby} -rrbconfig -e 'print Config::CONFIG["sitedir"]') +-%ruby_sitearchdir %(%{__ruby} -rrbconfig -e 'print Config::CONFIG["sitearchdir"]') +-%ruby_sitelibdir %(%{__ruby} -rrbconfig -e 'print Config::CONFIG["sitelibdir"]') +-%ruby_vendordir %(%{__ruby} -rrbconfig -e 'print Config::CONFIG["vendordir"]') +-%ruby_vendorarchdir %(%{__ruby} -rrbconfig -e 'print Config::CONFIG["vendorarchdir"]') +-%ruby_vendorlibdir %(%{__ruby} -rrbconfig -e 'print Config::CONFIG["vendorlibdir"]') +-%ruby_gemdir %(%{__ruby} -rrbconfig -e 'include Config; print CONFIG["rubylibdir"].sub(CONFIG["ruby_version"], "gems/#{CONFIG["ruby_version"]}")') +-%ruby_ridir %(%{__ruby} -rrbconfig -e 'include Config; print File.join(CONFIG["datadir"], "ri", CONFIG["ruby_version"])') ++%ruby_archdir %(%{__ruby} -rrbconfig -e 'print RbConfig::CONFIG["archdir"]') ++%ruby_libdir %(%{__ruby} -rrbconfig -e 'print RbConfig::CONFIG["rubylibdir"]') ++%ruby_sitedir %(%{__ruby} -rrbconfig -e 'print RbConfig::CONFIG["sitedir"]') ++%ruby_sitearchdir %(%{__ruby} -rrbconfig -e 'print RbConfig::CONFIG["sitearchdir"]') ++%ruby_sitelibdir %(%{__ruby} -rrbconfig -e 'print RbConfig::CONFIG["sitelibdir"]') ++%ruby_vendordir %(%{__ruby} -rrbconfig -e 'print RbConfig::CONFIG["vendordir"]') ++%ruby_vendorarchdir %(%{__ruby} -rrbconfig -e 'print RbConfig::CONFIG["vendorarchdir"]') ++%ruby_vendorlibdir %(%{__ruby} -rrbconfig -e 'print RbConfig::CONFIG["vendorlibdir"]') ++%ruby_gemdir %(%{__ruby} -rrbconfig -e 'print RbConfig::CONFIG["rubylibdir"].sub(RbConfig::CONFIG["ruby_version"], "gems/#{RbConfig::CONFIG["ruby_version"]}")') ++%ruby_ridir %(%{__ruby} -rrbconfig -e 'print File.join(RbConfig::CONFIG["datadir"], "ri", RbConfig::CONFIG["ruby_version"])') + + %__gem_helper %{_usrlibrpm}/gem_helper.rb + +diff -urN rpm-5.4.9/scripts/gem_helper.rb rpm-5.4.9-patched/scripts/gem_helper.rb +--- rpm-5.4.9/scripts/gem_helper.rb 2010-10-16 20:58:48.000000000 +1100 ++++ rpm-5.4.9-patched/scripts/gem_helper.rb 2012-08-30 18:12:11.233007114 +1100 +@@ -57,10 +57,13 @@ + argv.delete_at(0) + end + +- file_data = Zlib::GzipReader.open("metadata.gz") ++ file_data = Zlib::GzipReader.open("metadata.gz") {|io| io.read} + header = YAML::load(file_data) +- file_data.close() +- body = header.instance_variable_get :@ivars ++ body = {} ++ # I don't know any better.. :/ ++ header.instance_variables.each do |iv| ++ body[iv.to_s.gsub(/^@/,'')] = header.instance_variable_get(iv) ++ end + + require 'rubygems' + spec = Gem::Specification.from_yaml(YAML.dump(header)) +diff -urN rpm-5.4.9/scripts/rubygems.rb rpm-5.4.9-patched/scripts/rubygems.rb +--- rpm-5.4.9/scripts/rubygems.rb 2011-04-01 18:30:28.000000000 +1100 ++++ rpm-5.4.9-patched/scripts/rubygems.rb 2012-08-30 18:09:09.771009037 +1100 +@@ -30,7 +30,7 @@ + exit(1) + end + +-specpatt = Config::CONFIG["rubylibdir"].sub(Config::CONFIG["ruby_version"], ".*/specifications/.*\.gemspec$") ++specpatt = RbConfig::CONFIG["rubylibdir"].sub(RbConfig::CONFIG["ruby_version"], ".*/specifications/.*\.gemspec$") + gems = [] + ruby_versioned = false + abi_provide = false +@@ -44,17 +44,17 @@ + # package is dependent on this specific version. + # FIXME: only supports current ruby version + elsif not ruby_versioned +- if path.match(Config::CONFIG["rubylibdir"]) ++ if path.match(RbConfig::CONFIG["rubylibdir"]) + ruby_versioned = true + # even more fugly, but we make the assumption that if the package has + # this file, the package is the current ruby version, and should + # therefore provide ruby(abi) = version +- if provides and path.match(Config::CONFIG["rubylibdir"] + "/Env.rb") ++ if provides and path.match(RbConfig::CONFIG["rubylibdir"] + "/Env.rb") + abi_provide = true + end +- elsif path.match(Config::CONFIG["sitelibdir"]) ++ elsif path.match(RbConfig::CONFIG["sitelibdir"]) + ruby_versioned = true +- elsif path.match(Config::CONFIG["vendorlibdir"]) ++ elsif path.match(RbConfig::CONFIG["vendorlibdir"]) + ruby_versioned = true + end + end +@@ -63,7 +63,7 @@ + if requires or abi_provide + print "ruby(abi)" + if ruby_versioned +- print " = %s\n" % Config::CONFIG["ruby_version"] ++ print " = %s\n" % RbConfig::CONFIG["ruby_version"] + end + end + +@@ -105,7 +105,7 @@ + end + if requires + for d in spec.dependencies +- print d.requirement.to_rpm(d.name) unless d.type != :runtime ++ print d.requirement.to_rpm(d.name)[0] unless d.type != :runtime + end + for d in spec.required_rubygems_version.to_rpm("rubygems") + print d.gsub(/(rubygem\()|(\))/, "") diff --git a/rpm-5.4.9-strip-buildroot-away-from-duplicate-files-list.patch b/rpm-5.4.9-strip-buildroot-away-from-duplicate-files-list.patch new file mode 100644 index 0000000..8e48830 --- /dev/null +++ b/rpm-5.4.9-strip-buildroot-away-from-duplicate-files-list.patch @@ -0,0 +1,97 @@ +--- rpm-5.4.9/build/files.c.buildroot_dups~ 2012-04-15 17:04:14.000000000 +0200 ++++ rpm-5.4.9/build/files.c 2012-05-15 02:11:03.734983519 +0200 +@@ -2917,7 +2917,7 @@ exit: + + /* auxiliary function for checkDuplicateFiles() */ + /* XXX need to pass Header because fi->h is NULL */ +-static int fiIntersect(/*@null@*/ rpmfi fi1, /*@null@*/ rpmfi fi2) ++static int fiIntersect(/*@null@*/ rpmfi fi1, /*@null@*/ rpmfi fi2, size_t buildrootL) + /*@globals internalState @*/ + /*@modifies fi1, fi2, internalState @*/ + { +@@ -2941,7 +2941,7 @@ static int fiIntersect(/*@null@*/ rpmfi + if (!dups) + dups = rpmiobNew(0); + dups = rpmiobAppend(dups, "\t", 0); +- dups = rpmiobAppend(dups, fn1, 1); ++ dups = rpmiobAppend(dups, fn1+buildrootL, 1); + n++; + } + } +@@ -2972,7 +2972,7 @@ static int fiIntersect(/*@null@*/ rpmfi + * @param spec spec file control structure + * @return number of duplicate files + */ +-static int checkDuplicateFiles(Spec spec) ++static int checkDuplicateFiles(Spec spec, size_t buildrootL) + /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/ + /*@modifies *spec->packages, + rpmGlobalMacroContext, fileSystem, internalState @*/ +@@ -2997,7 +2997,7 @@ static int checkDuplicateFiles(Spec spec + #endif + if (fi2 == NULL) continue; + (void) rpmfiSetHeader(fi2, pkg2->header); +- n += fiIntersect(fi1, fi2); ++ n += fiIntersect(fi1, fi2, buildrootL); + (void) rpmfiSetHeader(fi2, NULL); + fi2 = rpmfiFree(fi2); + } +@@ -3023,7 +3023,7 @@ static inline int packagedDir(Package pk + * /A/B/C/D + * Now directories "/A/B" and "/A/B/C" should also be packaged. + */ +-static int pkgUnpackagedSubdirs(Package pkg) ++static int pkgUnpackagedSubdirs(Package pkg, size_t buildrootL) + /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/ + /*@modifies pkg->header, + rpmGlobalMacroContext, fileSystem, internalState @*/ +@@ -3096,7 +3096,7 @@ static int pkgUnpackagedSubdirs(Package + + for (i = 0; i < n; i++) { + list = rpmiobAppend(list, "\t", 0); +- list = rpmiobAppend(list, unpackaged[i], 1); ++ list = rpmiobAppend(list, unpackaged[i]+buildrootL, 1); + unpackaged[i] = _free(unpackaged[i]); + } + unpackaged = _free(unpackaged); +@@ -3117,7 +3117,7 @@ static int pkgUnpackagedSubdirs(Package + * @param spec spec file control structure + * @return number of unpackaged subdirectories + */ +-static int checkUnpackagedSubdirs(Spec spec) ++static int checkUnpackagedSubdirs(Spec spec, size_t buildrootL) + /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/ + /*@modifies *spec->packages, + rpmGlobalMacroContext, fileSystem, internalState @*/ +@@ -3126,7 +3126,7 @@ static int checkUnpackagedSubdirs(Spec s + Package pkg; + + for (pkg = spec->packages; pkg; pkg = pkg->next) +- n += pkgUnpackagedSubdirs(pkg); ++ n += pkgUnpackagedSubdirs(pkg, buildrootL); + return n; + } + +@@ -3137,6 +3137,11 @@ rpmRC processBinaryFiles(Spec spec, int + Package pkg; + rpmRC res = RPMRC_OK; + ++ char *buildroot = rpmExpand("%{?buildroot}", NULL); ++ size_t buildrootL = strlen(buildroot); ++ ++ buildroot = _free(buildroot); ++ + for (pkg = spec->packages; pkg != NULL; pkg = pkg->next) { + int rc; + +@@ -3178,8 +3183,8 @@ rpmRC processBinaryFiles(Spec spec, int + if (res == RPMRC_OK) { + if (checkUnpackagedFiles(spec) > 0) + res = RPMRC_FAIL; +- (void) checkDuplicateFiles(spec); +- (void) checkUnpackagedSubdirs(spec); ++ (void) checkDuplicateFiles(spec, buildrootL); ++ (void) checkUnpackagedSubdirs(spec, buildrootL); + } + + return res; diff --git a/rpm-5.4.9-update-rpmfc-when-removing-dependencies-on-self.patch b/rpm-5.4.9-update-rpmfc-when-removing-dependencies-on-self.patch new file mode 100644 index 0000000..c3b9e35 --- /dev/null +++ b/rpm-5.4.9-update-rpmfc-when-removing-dependencies-on-self.patch @@ -0,0 +1,140 @@ +--- rpm-5.4.9/lib/rpmfc.c.fc_deps~ 2012-05-15 02:23:23.157740011 +0200 ++++ rpm-5.4.9/lib/rpmfc.c 2012-05-15 02:24:42.863147557 +0200 +@@ -1763,12 +1763,14 @@ static int rpmfcGenerateScriptletDeps(co + return rc; + } + +-static void removeSillyDeps(Header h) { ++static unsigned removeSillyDeps(Header h, rpmfc fc) { + HE_t he = memset(alloca(sizeof(*he)), 0, sizeof(*he)); +- int xx, i, rnum, removed = 0; ++ int xx; ++ unsigned i, rnum, removed = 0; + const char **deps = NULL; + const char **versions = NULL; + evrFlags *flags = NULL; ++ int *newpos = NULL, *ddictxPos = NULL; + + he->tag = RPMTAG_REQUIRENAME; + xx = headerGet(h, he, 0); +@@ -1783,18 +1785,32 @@ static void removeSillyDeps(Header h) { + xx = headerGet(h, he, 0); + flags = (evrFlags*)he->p.ui32p; + ++ if (fc && fc->requires != NULL && fc->ddictx != NULL) { ++ newpos = alloca(he->c*sizeof(newpos[0])); ++ if (fc->ddictx) ++ ddictxPos = alloca(fc->ddictx->nvals*sizeof(ddictxPos[0])); ++ } + for (i = 0; i < rnum-removed; i++) { + if (removed) { + deps[i] = deps[i+removed]; + versions[i] = versions[i+removed]; + flags[i] = flags[i+removed]; ++ if (fc) { ++ fc->requires->N[i] = fc->requires->N[i+removed]; ++ fc->requires->EVR[i] = fc->requires->EVR[i+removed]; ++ fc->requires->Flags[i] = fc->requires->Flags[i+removed]; ++ } + } ++ if (fc && fc->requires != NULL && fc->ddictx != NULL) ++ newpos[i+removed] = i; + rpmds req = rpmdsSingle(RPMTAG_REQUIRENAME, deps[i], versions[i], flags[i]); + rpmds prov = rpmdsNew(h, (*deps[i] == '/' && !*versions[i]) ? RPMTAG_BASENAMES : RPMTAG_PROVIDENAME, 0); + if (rpmdsMatch(req, prov)) { + if (flags[i] & RPMSENSE_SCRIPT_PRE) + rpmlog(RPMLOG_ERR, "Requires(pre): on dependency provided by self: %s\n", rpmdsDNEVR(req)); + else { ++ if (fc && fc->requires != NULL && fc->ddictx != NULL) ++ newpos[i+removed] = -1; + rpmlog(RPMLOG_NOTICE, "Removing dependency on self: %s\n", rpmdsDNEVR(req)); + removed++; + i--; +@@ -1803,6 +1819,52 @@ static void removeSillyDeps(Header h) { + req = rpmdsFree(req); + prov = rpmdsFree(prov); + } ++ if (fc && fc->requires != NULL && fc->ddictx != NULL && removed) { ++ fc->requires->Count -= removed; ++ unsigned rx = 0; ++ for (i = 0; i < fc->ddictx->nvals-rx; i++) { ++ unsigned ix; ++ unsigned char deptype; ++ ++ ix = fc->ddictx->vals[i+rx]; ++ deptype = ((ix >> 24) & 0xff); ++ ix &= 0x00ffffff; ++ ++ if (deptype == 'P') { ++ ddictxPos[i+rx] = i; ++ fc->ddictx->vals[i] = fc->ddictx->vals[i+rx]; ++ continue; ++ } ++ if (newpos[ix] == -1) { ++ ddictxPos[i+rx] = -1; ++ i--, rx++; ++ } ++ else ++ { ++ ddictxPos[i+rx] = i; ++ fc->ddictx->vals[i] = (deptype << 24) | (newpos[ix] & 0x00ffffff); ++ } ++ } ++ fc->ddictx->nvals -= rx; ++ ++ for (i = 0; i < fc->fddictn->nvals; i++) { ++ rx = 0; ++ if (fc->fddictn->vals[i]) { ++ unsigned j, ix = fc->fddictx->vals[i]; ++ for (j = 0, rx = 0; j < fc->fddictn->vals[i]; j++, ix++) { ++ if (ddictxPos[ix] == -1) ++ rx++; ++ if (j == 0 || fc->fddictx->vals[i] == -1) ++ fc->fddictx->vals[i] = ddictxPos[ix]; ++ } ++ } ++ if (rx) ++ fc->fddictn->vals[i] -= rx; ++ if (fc->fddictn->vals[i] == 0) ++ fc->fddictx->vals[i] = 0; ++ } ++ } ++ + if (removed) { + he->tag = RPMTAG_REQUIRENAME; + he->t = RPM_STRING_ARRAY_TYPE; +@@ -1820,6 +1882,7 @@ static void removeSillyDeps(Header h) { + headerMod(h, he, 0); + } + ++ return removed; + } + + rpmRC rpmfcGenerateDepends(void * _spec, void * _pkg) +@@ -1855,7 +1918,7 @@ rpmRC rpmfcGenerateDepends(void * _spec, + if (internaldeps == 0) { + /* ... then generate dependencies using %{__find_requires} et al. */ + rc = rpmfcGenerateDependsHelper(spec, pkg, fi); +- removeSillyDeps(pkg->header); ++ removeSillyDeps(pkg->header, NULL); + printDeps(pkg->header); + return rc; + } +@@ -2045,6 +2108,8 @@ assert(he->p.ptr != NULL); + /*@=nullpass@*/ + } + ++ removeSillyDeps(pkg->header, fc); ++ + /* Add dependency dictionary(#dependencies) */ + he->tag = RPMTAG_DEPENDSDICT; + he->t = RPM_UINT32_TYPE; +@@ -2073,8 +2138,6 @@ assert(ac == (int)he->c); + xx = headerPut(pkg->header, he, 0); + } + +- removeSillyDeps(pkg->header); +- + printDeps(pkg->header); + + if (fc != NULL && _rpmfc_debug) { diff --git a/rpm.spec b/rpm.spec index fda1614..0da76b6 100644 --- a/rpm.spec +++ b/rpm.spec @@ -44,7 +44,7 @@ ERROR %define reqdb_ver 5.3 %define reqpopt_ver 1.15 %define beecrypt_ver 2:4.1.2-4 -%define sover 5.4 +%define sover 5.4 Summary: RPM Package Manager Summary(de.UTF-8): RPM Packet-Manager @@ -141,6 +141,108 @@ Patch82: %{name}-libmagic-locale.patch Patch83: %{name}-namespace-probe.patch Patch84: %{name}-popt-coreutils.patch Patch85: %{name}-postun-nofail.patch + +# Patches imported from Mandriva + +# status: ready to merge, it's already been merged on HEAD, so commiting it to rpm-5_4 +# would basically just mean backporting it.. +Patch1000: rpm-5.4.4-add-_specfile-macro.patch +# status: needs to be cleaned up and properly reviewed together with rest +# of the patches related to dependency generation +Patch1001: rpm-5.4.9-avoid-dependencies-on-self.patch +# status: probably ready to merge +Patch1002: rpm-5.4.4-pkgconfigdeps-check-path.patch +# status: probably okay to merge, but discuss on rpm-devel first +Patch1003: rpm-5.4.4-glob-wildcards-for-loading-macro-files.patch +# status: needs to be discussed +Patch1004: rpm-5.4.4-allow-installation-of-repackaged-rpms.patch +# status: ready to merge +Patch1005: rpm-5.4.8-dont-show-suggests-with-requires.patch +# status: ready for merge +Patch1006: rpm-5.4.9-strip-buildroot-away-from-duplicate-files-list.patch +# status: probably okay to merge, but discuss on rpm-devel first +Patch1007: rpm-5.4.10-duplicate_files_terminate_build.patch +# status: same as above +Patch1008: rpm-5.4.10-unpackaged_subdirs_terminate_build.patch +# mdvbz#64898 +# status: uncertain, might be okay to merge, discuss on rpm-devel first +Patch1009: rpm-5.4.4-rpmbuild-withoutclean.patch +# no sense in having an additional dependency on 'pkgconfig' on all packages that +# have a pkgconfig file, it's not needed for them to be made useful and anything +# actuallly using pkgconfig for this purpose will pull it in as a dependency anyways... +# status: might be okay to merge, but discuss on rpm-devel first +Patch1010: rpm-5.4.4-drop-useless-auto-generated-pkgconfig-dependency.patch +# status: ready for merge +Patch1011: rpm-5.4.4-fix-rpmconstant-to-always-use-LC_CTYPE-C-for-case-conversion.patch +# $RPM_BUILD_DIR isn't necessarily the same as $PWD, it's %%{_builddir}, not +# %%{_builddir}/%%{?buildsubdir}, messing up paths in debug packages created.. +# status: needs to be discussed and investigated a bit better.. +Patch1012: rpm-5.4.4-pass-_builddir-properly-to-find-debuginfo.patch +# status: probably okay to merge, but discuss on rpm-devel first +Patch1013: rpm-5.4.10-files-listed-twice-terminates-build.patch +# status: probably okay to merge +Patch1014: rpm-5.4.9-ruby1.9-fixes.patch +# status: keep locally +Patch1015: rpm-5.4.9-keep-loading-script-macros.patch +# status: same as for other dep gen patches +Patch1016: rpm-5.4.9-update-rpmfc-when-removing-dependencies-on-self.patch +# status: idem +Patch1017: rpm-5.4.9-rpmfc-extract-dependencies-for-all-files.patch +# status: ready for merge +Patch1018: rpm-5.4.5-rubygems-add-missing-newline.patch +# status: probably okay to merge +Patch1019: rpm-5.4.5-python-export-spec-macros.patch +# status: idem +Patch1020: rpm-5.4.9-font-provides.patch +# stauus: idem +Patch1021: rpm-5.4.7-kmod-dependencies.patch +# status: probably okay to merge, discuss on rpm-devel first +Patch1022: rpm-5.4.5-skip-dependencies-for-character-devices.patch +# status: ready to merge +Patch1023: rpm-5.4.5-rpmfc-use-strlen-not-sizeof.patch +# status: probably okay to merge +Patch1024: rpm-5.4.5-rpmfc-apply-python-coloring-from-magic.patch +# status: ready to merge +Patch1025: rpm-5.4.7-rpmfc-fix-invalid-free-if-not-_defaultdocdir-set.patch +# status: probably okay to merge +Patch1026: rpm-5.4.10-dont-try-generate-rpmfc-dependencies-from-doc-files.patch +# status: ready +Patch1027: rpm-5.4.7-fix-generation-of-ruby-abi-provides.patch +# crash reproducable with 'rpm -qa --triggers' +# status: ready +Patch1028: rpm-5.4.7-hdrfmt-fix-unitialized-argv-element.patch +# status: same as for other dep gen patches +Patch1029: rpm-5.4.7-dont-consider-trigger-dependencies-as-overlapping.patch +# status: ready +Patch1030: rpm-5.4.7-fix-minor-memleaks.patch +# status: ready +Patch1031: rpm-5.4.9-mire-fix-strings-lacking-null-terminator.patch +# status: ready +Patch1032: rpm-5.4.9-rpmpython-fix-input.patch +# status: ready +Patch1033: rpm-5.4.7-no-seqid_init-on-rdonly-database.patch +# status: probably ready for merging +Patch1034: rpm-5.4.9-avoid-double-slash-in-path-for-dirname-filetrigger-matching.patch +# status: probably ready to merge, discuss on rpm-devel first +Patch1035: rpm-5.4.9-fix-verify-segfault.patch +# status: ready and should be merged +Patch1036: rpm-5.4.9-fix-typo-in-rpmtag-header.patch +# Due to rpmdav/neon being written in a different fashion than other rpmio clients, +# the inconsistent behaviour affects code elsewhere which expects consistent behaviour, +# with the result being that when unable to download files, neon will save error +# page as the target file. +# status: should go upstream, but uncertain about "correct" fix, ie. this is +# more of a workaround, while rewriting rpmdav code to behave consistently +# would be "the right thing to do". Yet I'm not fully able to grasp all of the +# code and don't want to spend more time just to get the API.. +Patch1037: rpm-5.4.10-fix-neon-saving-error-pages-as-target-file.patch +# As the transaction flags for ignoring arch & os are no longer used, there's +# currently no way to ignore arch & os of packages anymore. This patch adds +# support for doing this again by defining rpm variables and overriding +# --ignorearch & --ignoreos to set these. +# status: needs to be discussed upstream before thinking about merging +Patch1038: rpm-5.4.10-support-ignore-arch-and-os-again.patch + URL: http://rpm5.org/ BuildRequires: autoconf >= 2.60 BuildRequires: automake >= 1.4 @@ -667,10 +769,6 @@ Dokumentacja API RPM-a oraz przewodniki w formacie HTML generowane ze # CHECK ME - macrofiles: ~/etc could be used #%%patch14 -p1 %patch16 -p1 -install %{SOURCE9} scripts/php.prov.in -install %{SOURCE10} scripts/php.req.in -install %{SOURCE12} scripts/perl.prov - %ifarch i386 i486 # disable TSC %patch26 -p1 @@ -679,7 +777,7 @@ install %{SOURCE12} scripts/perl.prov %patch34 -p1 %patch35 -p0 %patch36 -p1 -%patch37 -p1 +####%patch37 -p1 %patch41 -p1 %patch42 -p1 %patch47 -p1 @@ -692,7 +790,7 @@ install %{SOURCE12} scripts/perl.prov %patch61 -p1 %endif %patch62 -p1 -%patch70 -p1 +####%patch70 -p1 %patch72 -p1 -b .wiget %patch73 -p1 %patch74 -p1 @@ -708,12 +806,52 @@ install %{SOURCE12} scripts/perl.prov %patch84 -p1 %patch85 -p1 -cp -p %{SOURCE2} macros/pld.in +%patch1000 -p1 +%patch1001 -p1 +%patch1002 -p1 +%patch1003 -p1 +%patch1004 -p1 +%patch1005 -p1 +%patch1006 -p1 +%patch1007 -p1 +%patch1008 -p1 +%patch1009 -p1 +%patch1010 -p1 +%patch1011 -p1 +%patch1012 -p1 +%patch1013 -p1 +%patch1014 -p1 +%patch1015 -p1 +%patch1016 -p1 +%patch1017 -p1 +%patch1018 -p1 +%patch1019 -p1 +%patch1020 -p1 +%patch1021 -p1 +%patch1022 -p1 +%patch1023 -p1 +%patch1024 -p1 +%patch1025 -p1 +%patch1026 -p1 +%patch1027 -p1 +%patch1028 -p1 +%patch1029 -p1 +%patch1030 -p1 +%patch1031 -p1 +%patch1032 -p1 +%patch1033 -p1 +%patch1034 -p1 +%patch1035 -p1 +%patch1036 -p1 +%patch1037 -p1 +%patch1038 -p1 + +install %{SOURCE2} macros/pld.in +install %{SOURCE9} scripts/php.prov.in +install %{SOURCE10} scripts/php.req.in +install %{SOURCE12} scripts/perl.prov.in -cd scripts -mv -f perl.req perl.req.in -mv -f perl.prov perl.prov.in -cd .. +%{__mv} -f scripts/perl.req{,.in} # generate Group translations to *.po awk -f %{SOURCE6} %{SOURCE1} @@ -1170,6 +1308,7 @@ find %{_rpmlibdir} -name '*-linux' -type l | xargs rm -f %attr(755,root,root) %{_rpmlibdir}/http.req %attr(755,root,root) %{_rpmlibdir}/mono* +%attr(755,root,root) %{_rpmlibdir}/fontconfig.prov # must be here for "Requires: rpm-*prov" to work %{_rpmlibdir}/macros.d/cmake %{_rpmlibdir}/macros.d/gstreamer -- 2.44.0