From b7fdb718d3ef41065d3319de2056c9c0cece968b Mon Sep 17 00:00:00 2001 From: akdengi Date: Wed, 1 Aug 2012 14:59:23 +0400 Subject: [PATCH] - new version 5.4.9 --- .abf.yml | 4 +- legacy_compat.macros | 1 - rpm-5.3.10-doxygen-1.7.4-bug.patch | 12 - rpm-5.3.11-fix-syslog-b0rkage.patch | 38 - rpm-5.3.12-55810-rpmevrcmp-again-grf.patch | 30 +- rpm-5.3.8-fix-russian-typo.patch | 11 - rpm-5.4.4-add-_specfile-macro.patch | 10 + ...llow-installation-of-repackaged-rpms.patch | 11 + rpm-5.4.4-debugedit-add-dwarf4-support.patch | 114 + ...ebuginfo-if-stabs-format-encountered.patch | 17 + ...t-error-messages-regarding_-b-and_-d.patch | 20 + ...ugedit-recognize-debug_macro-section.patch | 18 + ...ompute-build-id-only-on-dwarf-change.patch | 99 + ...4.4-debugedit-remove-unused-variable.patch | 18 + ...endencies-as-overlapping-for-removal.patch | 16 + rpm-5.4.4-drop-base-dependencies.patch | 15 + ...-auto-generated-pkgconfig-dependency.patch | 23 + rpm-5.4.4-enable-rpmgio-net-transport.patch | 12 + ...-files-listed-twice-terminates-build.patch | 74 + ...avoid-excessive-output-from-eu-strip.patch | 11 + ...-removal-of-overlapping-dependencies.patch | 95 + ...s-use-LC_CTYPE-C-for-case-conversion.patch | 20 + ...ckage-with-epoch-possible-to-upgrade.patch | 22 + ...ob-wildcards-for-loading-macro-files.patch | 24 + ..._builddir-properly-to-find-debuginfo.patch | 23 + rpm-5.4.4-pkgconfigdeps-check-path.patch | 76 + ....4-really-always-invoke-clean-at-end.patch | 41 + rpm-5.4.4-rpmbuild-withoutclean.patch | 10 + rpm-5.4.4-ruby1.9-fixes.patch | 107 + rpm-5.4.4-srcdefattr.patch | 21 + ...4.4-use-dependency-type-for-ordering.patch | 84 + rpm-5.4.5-break-out-of-elf-link-loop.patch | 45 + rpm-5.4.5-desktop-provides.patch | 70 + ...dencies-with-non-script-dependencies.patch | 36 + ...hp-dependencies-only-when-executable.patch | 12 + rpm-5.4.5-drop-some-interpreter-deps.patch | 32 + ...reter-resolving-breaking-uclibc-deps.patch | 58 + ...neration-of-uclibc-deps-on-non-lib64.patch | 11 + ...es-for-internal-dependency-generator.patch | 84 + rpm-5.4.5-kmod-deps-xz-support.patch | 11 + rpm-5.4.5-libsql-conditional.patch | 12 + rpm-5.4.5-patchset_16004.patch | 405 ++++ rpm-5.4.5-patchset_16005.patch | 11 + rpm-5.4.5-patchset_16022.patch | 222 ++ 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 + ...r-for-scripts-using-env-in-shellbang.patch | 22 + ...p-dependencies-for-character-devices.patch | 13 + ...4.5-update-mono-dependency-generator.patch | 268 +++ ...en-removing-overlapping-dependencies.patch | 81 + ...perform-linking-against-internal-lua.patch | 36 + ...ose-equal-only-deps-when-overlapping.patch | 70 + rpm-5.4.7-change-to-debuginfo-suffix.patch | 21 + ...-trigger-dependencies-as-overlapping.patch | 12 + ...ame-provides-for-dsos-with-no-soname.patch | 18 + ...te-rpmfc-dependencies-from-doc-files.patch | 49 + ...-fix-generation-of-ruby-abi-provides.patch | 48 + rpm-5.4.7-fix-minor-memleaks.patch | 25 + ...te-devel-provides-outside-of-libdirs.patch | 36 + ...-hdrfmt-fix-unitialized-argv-element.patch | 14 + rpm-5.4.7-kmod-dependencies.patch | 66 + ....7-mono-find-requires-strip-newlines.patch | 11 + ...4.7-no-seqid_init-on-rdonly-database.patch | 11 + ...vel-deps-for-symlinks-start-with-lib.patch | 44 + ...hon-deps-for-executables-and-modules.patch | 50 + ...oved-dependencies-are-generated-from.patch | 17 + ...rpmds-dont-try-fopen-empty-filenames.patch | 11 + ...valid-free-if-not-_defaultdocdir-set.patch | 11 + ...-rpmfc-strdup-EVR-in-overlap-removal.patch | 11 + rpm-5.4.7-rpmv3-support.patch | 370 +++ rpm-5.4.7-trigtrans.patch | 839 +++++++ rpm-5.4.7-use-bdb-5.2.patch | 29 + ...h-style-by-default-and-drop-rtld-dep.patch | 29 + rpm-5.4.8-URPM-build-fix.patch | 13 + rpm-5.4.8-add-armv7l-specific-macros.patch | 36 + ...4.8-dont-show-suggests-with-requires.patch | 62 + rpm-5.4.9-add-_build_pkgcheck.patch | 159 ++ rpm-5.4.9-add-distepoch-rpmlib-feature.patch | 14 + ...-filetriggers-regex-matching-support.patch | 111 + ...add-matches-as-arguments-to-triggers.patch | 135 ++ ...-using-rpmdsMerge-with-filepath-tags.patch | 84 + rpm-5.4.9-avoid-dependencies-on-self.patch | 85 + ...ath-for-dirname-filetrigger-matching.patch | 23 + ...isable_internal_dependency_generator.patch | 11 + rpm-5.4.9-dlopen-embedded-interpreters.patch | 924 ++++++++ ...dependency-rpmlib-feature-dependency.patch | 40 + ....4.9-duplicate_files_terminate_build.patch | 66 + ...debuginfo-strip-reloc-debug-sections.patch | 112 + rpm-5.4.9-fix-mdvbz62979.patch | 18 + rpm-5.4.9-fix-rpm_qa-pattern.patch | 11 + rpm-5.4.9-fix-russian-typo.patch | 11 + rpm-5.4.9-fix-verify-segfault.patch | 26 + rpm-5.4.9-font-provides.patch | 60 + rpm-5.4.9-generate-haskell-dependencies.patch | 161 ++ rpm-5.4.9-keep-loading-script-macros.patch | 81 + ...-fix-strings-lacking-null-terminator.patch | 32 + ....patch => rpm-5.4.9-no-doc-conflicts.patch | 16 +- ... rpm-5.4.9-non-pre-scripts-dont-fail.patch | 28 +- ...c-extract-dependencies-for-all-files.patch | 11 + rpm-5.4.9-rpmpython-fix-input.patch | 11 + ...droot-away-from-duplicate-files-list.patch | 97 + ...port-signatures-and-digest-disablers.patch | 11 + ...9-unpackaged_subdirs_terminate_build.patch | 66 + ...c-when-removing-dependencies-on-self.patch | 140 ++ rpm-GROUPS | 29 - rpm.rpmlintrc | 4 + rpm.spec | 2004 +++++------------ 109 files changed, 7549 insertions(+), 1548 deletions(-) delete mode 100644 rpm-5.3.10-doxygen-1.7.4-bug.patch delete mode 100644 rpm-5.3.11-fix-syslog-b0rkage.patch delete mode 100644 rpm-5.3.8-fix-russian-typo.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-debugedit-add-dwarf4-support.patch create mode 100644 rpm-5.4.4-debugedit-bail-out-of-debuginfo-if-stabs-format-encountered.patch create mode 100644 rpm-5.4.4-debugedit-fix-incorrect-error-messages-regarding_-b-and_-d.patch create mode 100644 rpm-5.4.4-debugedit-recognize-debug_macro-section.patch create mode 100644 rpm-5.4.4-debugedit-recompute-build-id-only-on-dwarf-change.patch create mode 100644 rpm-5.4.4-debugedit-remove-unused-variable.patch create mode 100644 rpm-5.4.4-dont-consider-ranged-dependencies-as-overlapping-for-removal.patch create mode 100644 rpm-5.4.4-drop-base-dependencies.patch create mode 100644 rpm-5.4.4-drop-useless-auto-generated-pkgconfig-dependency.patch create mode 100644 rpm-5.4.4-enable-rpmgio-net-transport.patch create mode 100644 rpm-5.4.4-files-listed-twice-terminates-build.patch create mode 100644 rpm-5.4.4-find-debuginfo-avoid-excessive-output-from-eu-strip.patch create mode 100644 rpm-5.4.4-fix-removal-of-overlapping-dependencies.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-fix-same-package-with-epoch-possible-to-upgrade.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-really-always-invoke-clean-at-end.patch create mode 100644 rpm-5.4.4-rpmbuild-withoutclean.patch create mode 100644 rpm-5.4.4-ruby1.9-fixes.patch create mode 100644 rpm-5.4.4-srcdefattr.patch create mode 100644 rpm-5.4.4-use-dependency-type-for-ordering.patch create mode 100644 rpm-5.4.5-break-out-of-elf-link-loop.patch create mode 100644 rpm-5.4.5-desktop-provides.patch create mode 100644 rpm-5.4.5-do-not-merge-script-dependencies-with-non-script-dependencies.patch create mode 100644 rpm-5.4.5-dont-generate-php-dependencies-only-when-executable.patch create mode 100644 rpm-5.4.5-drop-some-interpreter-deps.patch create mode 100644 rpm-5.4.5-fix-elf-interpreter-resolving-breaking-uclibc-deps.patch create mode 100644 rpm-5.4.5-fix-generation-of-uclibc-deps-on-non-lib64.patch create mode 100644 rpm-5.4.5-fix-removal-of-overlapping-dependencies-for-internal-dependency-generator.patch create mode 100644 rpm-5.4.5-kmod-deps-xz-support.patch create mode 100644 rpm-5.4.5-libsql-conditional.patch create mode 100644 rpm-5.4.5-patchset_16004.patch create mode 100644 rpm-5.4.5-patchset_16005.patch create mode 100644 rpm-5.4.5-patchset_16022.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-set-proper-file-color-for-scripts-using-env-in-shellbang.patch create mode 100644 rpm-5.4.5-skip-dependencies-for-character-devices.patch create mode 100644 rpm-5.4.5-update-mono-dependency-generator.patch create mode 100644 rpm-5.4.5-update-rpmfc-when-removing-overlapping-dependencies.patch create mode 100644 rpm-5.4.7-actually-perform-linking-against-internal-lua.patch create mode 100644 rpm-5.4.7-always-choose-equal-only-deps-when-overlapping.patch create mode 100644 rpm-5.4.7-change-to-debuginfo-suffix.patch create mode 100644 rpm-5.4.7-dont-consider-trigger-dependencies-as-overlapping.patch create mode 100644 rpm-5.4.7-dont-generate-soname-provides-for-dsos-with-no-soname.patch create mode 100644 rpm-5.4.7-dont-try-generate-rpmfc-dependencies-from-doc-files.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-generate-devel-provides-outside-of-libdirs.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-mono-find-requires-strip-newlines.patch create mode 100644 rpm-5.4.7-no-seqid_init-on-rdonly-database.patch create mode 100644 rpm-5.4.7-only-generate-devel-deps-for-symlinks-start-with-lib.patch create mode 100644 rpm-5.4.7-only-generate-ruby-and-python-deps-for-executables-and-modules.patch create mode 100644 rpm-5.4.7-print-name-of-files-removed-dependencies-are-generated-from.patch create mode 100644 rpm-5.4.7-rpmds-dont-try-fopen-empty-filenames.patch create mode 100644 rpm-5.4.7-rpmfc-fix-invalid-free-if-not-_defaultdocdir-set.patch create mode 100644 rpm-5.4.7-rpmfc-strdup-EVR-in-overlap-removal.patch create mode 100644 rpm-5.4.7-rpmv3-support.patch create mode 100644 rpm-5.4.7-trigtrans.patch create mode 100644 rpm-5.4.7-use-bdb-5.2.patch create mode 100644 rpm-5.4.7-use-gnu-hash-style-by-default-and-drop-rtld-dep.patch create mode 100644 rpm-5.4.8-URPM-build-fix.patch create mode 100644 rpm-5.4.8-add-armv7l-specific-macros.patch create mode 100644 rpm-5.4.8-dont-show-suggests-with-requires.patch create mode 100644 rpm-5.4.9-add-_build_pkgcheck.patch create mode 100644 rpm-5.4.9-add-distepoch-rpmlib-feature.patch create mode 100644 rpm-5.4.9-add-filetriggers-regex-matching-support.patch create mode 100644 rpm-5.4.9-add-matches-as-arguments-to-triggers.patch create mode 100644 rpm-5.4.9-add-support-for-using-rpmdsMerge-with-filepath-tags.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-disable_internal_dependency_generator.patch create mode 100644 rpm-5.4.9-dlopen-embedded-interpreters.patch create mode 100644 rpm-5.4.9-dont-add-versioneddependency-rpmlib-feature-dependency.patch create mode 100644 rpm-5.4.9-duplicate_files_terminate_build.patch create mode 100644 rpm-5.4.9-find-debuginfo-strip-reloc-debug-sections.patch create mode 100644 rpm-5.4.9-fix-mdvbz62979.patch create mode 100644 rpm-5.4.9-fix-rpm_qa-pattern.patch create mode 100644 rpm-5.4.9-fix-russian-typo.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-generate-haskell-dependencies.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 rename rpm-5.3.8-no-doc-conflicts.patch => rpm-5.4.9-no-doc-conflicts.patch (74%) rename rpm-5.3.8-non-pre-scripts-dont-fail.patch => rpm-5.4.9-non-pre-scripts-dont-fail.patch (69%) 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-strip-buildroot-away-from-duplicate-files-list.patch create mode 100644 rpm-5.4.9-support-signatures-and-digest-disablers.patch create mode 100644 rpm-5.4.9-unpackaged_subdirs_terminate_build.patch create mode 100644 rpm-5.4.9-update-rpmfc-when-removing-dependencies-on-self.patch delete mode 100644 rpm-GROUPS create mode 100644 rpm.rpmlintrc diff --git a/.abf.yml b/.abf.yml index 81d802e..38950d5 100644 --- a/.abf.yml +++ b/.abf.yml @@ -1,3 +1,3 @@ sources: - "cpu-os-macros.tar.gz": 68dbf0b8b9c625c59ad607cf0eda665087cead58 - "rpm-5.3.12.tar.xz": 81cdbf2d0f432abef56444eeabf9c2eab1d25f8a + "cpu-os-macros.tar.gz": 99c5fa561dd0d897bfa8cd97f2aa60781bc578d4 + "rpm-5.4.9.tar.gz": 5bd26bb6aece4051b94ce86b81cdfd6c4c8498ee diff --git a/legacy_compat.macros b/legacy_compat.macros index c29b0c8..073f24e 100644 --- a/legacy_compat.macros +++ b/legacy_compat.macros @@ -57,7 +57,6 @@ rpm-helper>rpm # enabling this by default is to be dropped ASAP -%_dependency_whiteout %_dependency_whiteout_mandriva %_legacy_compat_non_pre_scripts_dont_fail 1 %_legacy_compat_all \ diff --git a/rpm-5.3.10-doxygen-1.7.4-bug.patch b/rpm-5.3.10-doxygen-1.7.4-bug.patch deleted file mode 100644 index c44d5f9..0000000 --- a/rpm-5.3.10-doxygen-1.7.4-bug.patch +++ /dev/null @@ -1,12 +0,0 @@ ---- rpm-5.3.10/tools/rpmdigest.c.doxygen~ 2009-10-10 15:57:00.000000000 +0200 -+++ rpm-5.3.10/tools/rpmdigest.c 2011-05-16 09:28:13.242200969 +0200 -@@ -898,8 +898,7 @@ The following two options are useful onl - N_("\ - When checking, the input should be a former output of this program. The\n\ - default mode is to print a line with digest, a character indicating type\n\ --(`*' for binary, ` ' for text), and name for each FILE.\n\ --"), NULL }, -+(`*' for binary, ` ' for text), and name for each FILE.\n"), NULL }, - - POPT_TABLEEND - }; diff --git a/rpm-5.3.11-fix-syslog-b0rkage.patch b/rpm-5.3.11-fix-syslog-b0rkage.patch deleted file mode 100644 index 8c177a0..0000000 --- a/rpm-5.3.11-fix-syslog-b0rkage.patch +++ /dev/null @@ -1,38 +0,0 @@ ---- rpm-5.3.11/lib/psm.c.syslog~ 2011-05-25 16:21:51.465345513 +0200 -+++ rpm-5.3.11/lib/psm.c 2011-05-25 16:21:54.565306757 +0200 -@@ -65,6 +65,11 @@ - - #include "debug.h" - -+#if HAVE_SYSLOG -+#include -+#include -+#endif -+ - #define _PSM_DEBUG 0 - /*@unchecked@*/ - int _psm_debug = _PSM_DEBUG; -@@ -3070,9 +3075,9 @@ assert(psm->mi == NULL); - else - rc = rpmdbAdd(rpmtsGetRdb(ts), tid, fi->h, NULL); - (void) rpmswExit(rpmtsOp(ts, RPMTS_OP_DBADD), 0); --#if defined(HAVE_SYSLOG_H) && defined(RPM_VENDOR_MANDRIVA) /* log-install-remove-to-syslog */ -+#if defined(HAVE_SYSLOG) && defined(RPM_VENDOR_MANDRIVA) /* log-install-remove-to-syslog */ - { -- char *s, fmt; -+ char *s, *fmt; - fmt = rpmExpand("%{___NVRA}", NULL); - s = headerSprintf(fi->h, fmt, - rpmTagTable, rpmHeaderFormats, NULL); -@@ -3110,9 +3115,9 @@ assert(psm->te != NULL); - (void) rpmswEnter(rpmtsOp(ts, RPMTS_OP_DBREMOVE), 0); - rc = rpmdbRemove(rpmtsGetRdb(ts), rpmtsGetTid(ts), fi->record, NULL); - (void) rpmswExit(rpmtsOp(ts, RPMTS_OP_DBREMOVE), 0); --#if defined(HAVE_SYSLOG_H) && defined(RPM_VENDOR_MANDRIVA) /* log-install-remove-to-syslog */ -+#if defined(HAVE_SYSLOG) && defined(RPM_VENDOR_MANDRIVA) /* log-install-remove-to-syslog */ - { -- char *s, fmt; -+ char *s, *fmt; - fmt = rpmExpand("%{___NVRA}", NULL); - s = headerSprintf(fi->h, fmt, - rpmTagTable, rpmHeaderFormats, NULL); diff --git a/rpm-5.3.12-55810-rpmevrcmp-again-grf.patch b/rpm-5.3.12-55810-rpmevrcmp-again-grf.patch index dddc1f4..a97f9dd 100644 --- a/rpm-5.3.12-55810-rpmevrcmp-again-grf.patch +++ b/rpm-5.3.12-55810-rpmevrcmp-again-grf.patch @@ -1,22 +1,32 @@ ---- rpm-5.3.12/lib/rpmds.c.55810~ 2011-07-12 18:15:29.016085065 +0200 -+++ rpm-5.3.12/lib/rpmds.c 2011-07-12 18:15:56.300506314 +0200 -@@ -4333,7 +4333,7 @@ assert((rpmdsFlags(B) & RPMSENSE_SENSEMA +--- rpm-5.3.12/lib/rpmds.c.55810~ 2011-07-12 11:54:08.000000000 +0200 ++++ rpm-5.3.12/lib/rpmds.c 2011-07-13 16:51:59.699924504 +0200 +@@ -4333,9 +4333,10 @@ assert((rpmdsFlags(B) & RPMSENSE_SENSEMA case 'D': ix = RPMEVR_D; /*@switchbreak@*/break; } #if defined(RPM_VENDOR_MANDRIVA) /* mdvbz#55810 */ - if(ix == RPMEVR_R && (bFlags & (~RPMSENSE_GREATER & RPMSENSE_EQUAL)) +- && *(b->F[ix]) == '\0') +- break; + if(ix >= RPMEVR_R && (bFlags & (~RPMSENSE_GREATER & RPMSENSE_EQUAL)) - && *(b->F[ix]) == '\0') - break; ++ && !(ix == RPMEVR_D && (bFlags & RPMSENSE_LESS)) ++ && *(b->F[ix]) == '\0') ++ break; if (a->F[ix] && b->F[ix]) ---- rpm-5.3.12/rpmdb/rpmevr.c.55810~ 2011-07-12 18:15:40.964269535 +0200 -+++ rpm-5.3.12/rpmdb/rpmevr.c 2011-07-12 18:15:42.897299380 +0200 -@@ -286,7 +286,7 @@ assert(b->F[RPMEVR_D] != NULL); + #else + if (a->F[ix] && *a->F[ix] && b->F[ix] && *b->F[ix]) +--- rpm-5.3.12/rpmdb/rpmevr.c.55810~ 2011-07-12 11:54:27.000000000 +0200 ++++ rpm-5.3.12/rpmdb/rpmevr.c 2011-07-13 16:51:59.700924519 +0200 +@@ -286,9 +286,10 @@ assert(b->F[RPMEVR_D] != NULL); case 'D': ix = RPMEVR_D; /*@switchbreak@*/break; } #if defined(RPM_VENDOR_MANDRIVA) /* mdvbz#55810 */ - if(ix == RPMEVR_R && (b->Flags & (~RPMSENSE_GREATER & RPMSENSE_EQUAL)) +- && *(b->F[ix]) == '\0') +- break; + if(ix >= RPMEVR_R && (b->Flags & (~RPMSENSE_GREATER & RPMSENSE_EQUAL)) - && *(b->F[ix]) == '\0') - break; ++ && !(ix == RPMEVR_D && (b->Flags & RPMSENSE_LESS)) ++ && *(b->F[ix]) == '\0') ++ break; #endif + + rc = compare_values(a->F[ix], b->F[ix]); diff --git a/rpm-5.3.8-fix-russian-typo.patch b/rpm-5.3.8-fix-russian-typo.patch deleted file mode 100644 index fa06e67..0000000 --- a/rpm-5.3.8-fix-russian-typo.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- rpm-5.3.8/po/ru.po.ru_typo~ 2011-02-10 22:25:44.205491002 +0100 -+++ rpm-5.3.8/po/ru.po 2011-02-10 22:25:49.050491001 +0100 -@@ -3015,7 +3015,7 @@ msgstr "(ÕÓÔÁÎÏ×ÌÅÎ)" - #: lib/rpmps.c:299 - #, c-format - msgid "%s conflicts with %s%s" --msgstr "%s ËÏÎÆÌÉËÔÕÅÔ Ó%s%s" -+msgstr "%s ËÏÎÆÌÉËÔÕÅÔ Ó %s%s" - - #: lib/rpmps.c:305 - #, fuzzy, c-format 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-debugedit-add-dwarf4-support.patch b/rpm-5.4.4-debugedit-add-dwarf4-support.patch new file mode 100644 index 0000000..0b87c0e --- /dev/null +++ b/rpm-5.4.4-debugedit-add-dwarf4-support.patch @@ -0,0 +1,114 @@ +--- rpm-5.4.4/tools/debugedit.c.debugedit_dwarf4~ 2011-11-28 16:29:10.859401835 +0100 ++++ rpm-5.4.4/tools/debugedit.c 2011-11-28 16:36:32.391927409 +0100 +@@ -1,4 +1,4 @@ +-/* Copyright (C) 2001, 2002, 2003, 2005, 2007, 2009, 2010 Red Hat, Inc. ++/* Copyright (C) 2001, 2002, 2003, 2005, 2007, 2009, 2010, 2011 Red Hat, Inc. + Written by Alexander Larsson , 2002 + Based on code by Jakub Jelinek , 2001. + +@@ -70,6 +70,10 @@ + #include + + #define DW_TAG_partial_unit 0x3c ++#define DW_FORM_sec_offset 0x17 ++#define DW_FORM_exprloc 0x18 ++#define DW_FORM_flag_present 0x19 ++#define DW_FORM_ref_sig8 0x20 + + char *base_dir = NULL; + char *dest_dir = NULL; +@@ -246,6 +250,7 @@ static struct + #define DEBUG_STR 8 + #define DEBUG_FRAME 9 + #define DEBUG_RANGES 10 ++#define DEBUG_TYPES 11 + { ".debug_info", NULL, NULL, 0, 0, 0 }, + { ".debug_abbrev", NULL, NULL, 0, 0, 0 }, + { ".debug_line", NULL, NULL, 0, 0, 0 }, +@@ -257,6 +262,7 @@ static struct + { ".debug_str", NULL, NULL, 0, 0, 0 }, + { ".debug_frame", NULL, NULL, 0, 0, 0 }, + { ".debug_ranges", NULL, NULL, 0, 0, 0 }, ++ { ".debug_types", NULL, NULL, 0, 0, 0 }, + { NULL, NULL, NULL, 0, 0, 0 } + }; + +@@ -349,7 +355,8 @@ no_memory: + goto no_memory; + } + form = read_uleb128 (ptr); +- if (form == 2 || form > DW_FORM_indirect) ++ if (form == 2 ++ || (form > DW_FORM_flag_present && form != DW_FORM_ref_sig8)) + { + error (0, 0, "%s: Unknown DWARF DW_FORM_%d", dso->filename, form); + htab_delete (h); +@@ -519,7 +526,7 @@ edit_dwarf2_line (DSO *dso, rpmuint32_t + } + + value = read_16 (ptr); +- if (value != 2 && value != 3) ++ if (value != 2 && value != 3 && value != 4) + { + error (0, 0, "%s: DWARF version %d unhandled", dso->filename, + value); +@@ -535,8 +542,8 @@ edit_dwarf2_line (DSO *dso, rpmuint32_t + return 1; + } + +- opcode_base = ptr[4]; +- ptr = dir = ptr + 4 + opcode_base; ++ opcode_base = ptr[4 + (value >= 4)]; ++ ptr = dir = ptr + 4 + (value >= 4) + opcode_base; + + /* dir table: */ + value = 1; +@@ -763,7 +770,8 @@ edit_attributes (DSO *dso, unsigned char + { + if (t->attr[i].attr == DW_AT_stmt_list) + { +- if (form == DW_FORM_data4) ++ if (form == DW_FORM_data4 ++ || form == DW_FORM_sec_offset) + { + list_offs = do_read_32_relocated (ptr); + found_list_offs = 1; +@@ -866,6 +874,8 @@ edit_attributes (DSO *dso, unsigned char + else + ptr += 4; + break; ++ case DW_FORM_flag_present: ++ break; + case DW_FORM_addr: + ptr += ptr_size; + break; +@@ -880,10 +890,12 @@ edit_attributes (DSO *dso, unsigned char + break; + case DW_FORM_ref4: + case DW_FORM_data4: ++ case DW_FORM_sec_offset: + ptr += 4; + break; + case DW_FORM_ref8: + case DW_FORM_data8: ++ case DW_FORM_ref_sig8: + ptr += 8; + break; + case DW_FORM_sdata: +@@ -912,6 +924,7 @@ edit_attributes (DSO *dso, unsigned char + form = DW_FORM_block1; + break; + case DW_FORM_block: ++ case DW_FORM_exprloc: + len = read_uleb128 (ptr); + form = DW_FORM_block1; + assert (len < UINT_MAX); +@@ -1215,7 +1228,7 @@ edit_dwarf2 (DSO *dso) + } + + cu_version = read_16 (ptr); +- if (cu_version != 2 && cu_version != 3) ++ if (cu_version != 2 && cu_version != 3 && cu_version != 4) + { + error (0, 0, "%s: DWARF version %d unhandled", dso->filename, + cu_version); diff --git a/rpm-5.4.4-debugedit-bail-out-of-debuginfo-if-stabs-format-encountered.patch b/rpm-5.4.4-debugedit-bail-out-of-debuginfo-if-stabs-format-encountered.patch new file mode 100644 index 0000000..28f3c94 --- /dev/null +++ b/rpm-5.4.4-debugedit-bail-out-of-debuginfo-if-stabs-format-encountered.patch @@ -0,0 +1,17 @@ +--- rpm-5.4.4/tools/debugedit.c.stabs_fail~ 2011-11-28 16:26:30.102211728 +0100 ++++ rpm-5.4.4/tools/debugedit.c 2011-11-28 16:29:10.859401835 +0100 +@@ -1604,10 +1604,11 @@ main (int argc, char *argv[]) + case SHT_MIPS_DWARF: + name = strptr (dso, dso->ehdr.e_shstrndx, dso->shdr[i].sh_name); + /* TODO: Handle stabs */ +-#if 0 + if (strcmp (name, ".stab") == 0) +- edit_stabs (dso, i); +-#endif ++ { ++ fprintf (stderr, "Stabs debuginfo not supported: %s\n", file); ++ exit (1); ++ } + if (strcmp (name, ".debug_info") == 0) + edit_dwarf2 (dso); + diff --git a/rpm-5.4.4-debugedit-fix-incorrect-error-messages-regarding_-b-and_-d.patch b/rpm-5.4.4-debugedit-fix-incorrect-error-messages-regarding_-b-and_-d.patch new file mode 100644 index 0000000..39de126 --- /dev/null +++ b/rpm-5.4.4-debugedit-fix-incorrect-error-messages-regarding_-b-and_-d.patch @@ -0,0 +1,20 @@ +--- rpm-5.4.4/tools/debugedit.c.error_messages 2011-11-28 16:22:43.045944430 +0100 ++++ rpm-5.4.4/tools/debugedit.c 2011-11-28 16:22:58.231962263 +0100 +@@ -703,7 +703,7 @@ edit_dwarf2_line (DSO *dso, rpmuint32_t + size_t len = (abs_dir_cnt + abs_file_cnt) * (base_len - dest_len); + + if (len == 1) +- error (EXIT_FAILURE, 0, "-b arg has to be either the same length as -d arg, or more than 1 char shorter"); ++ error (EXIT_FAILURE, 0, "-b arg has to be either the same length as -d arg, or more than 1 char longer"); + memset (ptr, 'X', len - 1); + ptr += len - 1; + *ptr++ = '\0'; +@@ -1540,7 +1540,7 @@ main (int argc, char *argv[]) + } + if (strlen (dest_dir) > strlen (base_dir)) + { +- fprintf (stderr, "Only dest dir longer than base dir not supported\n"); ++ fprintf (stderr, "Dest dir longer than base dir is not supported\n"); + exit (1); + } + } diff --git a/rpm-5.4.4-debugedit-recognize-debug_macro-section.patch b/rpm-5.4.4-debugedit-recognize-debug_macro-section.patch new file mode 100644 index 0000000..fcab50a --- /dev/null +++ b/rpm-5.4.4-debugedit-recognize-debug_macro-section.patch @@ -0,0 +1,18 @@ +--- rpm-5.4.4/tools/debugedit.c.debug_macro~ 2011-12-16 16:14:38.049872549 +0100 ++++ rpm-5.4.4/tools/debugedit.c 2011-12-20 11:51:58.427115549 +0100 +@@ -251,6 +251,7 @@ static struct + #define DEBUG_FRAME 9 + #define DEBUG_RANGES 10 + #define DEBUG_TYPES 11 ++#define DEBUG_MACRO 12 + { ".debug_info", NULL, NULL, 0, 0, 0 }, + { ".debug_abbrev", NULL, NULL, 0, 0, 0 }, + { ".debug_line", NULL, NULL, 0, 0, 0 }, +@@ -263,6 +264,7 @@ static struct + { ".debug_frame", NULL, NULL, 0, 0, 0 }, + { ".debug_ranges", NULL, NULL, 0, 0, 0 }, + { ".debug_types", NULL, NULL, 0, 0, 0 }, ++ { ".debug_macro", NULL, NULL, 0, 0, 0 }, + { NULL, NULL, NULL, 0, 0, 0 } + }; + diff --git a/rpm-5.4.4-debugedit-recompute-build-id-only-on-dwarf-change.patch b/rpm-5.4.4-debugedit-recompute-build-id-only-on-dwarf-change.patch new file mode 100644 index 0000000..8926c1f --- /dev/null +++ b/rpm-5.4.4-debugedit-recompute-build-id-only-on-dwarf-change.patch @@ -0,0 +1,99 @@ +--- rpm-5.4.4/tools/debugedit.c.recompute~ 2011-11-28 16:17:11.223517307 +0100 ++++ rpm-5.4.4/tools/debugedit.c 2011-11-28 16:17:32.113546358 +0100 +@@ -464,6 +464,14 @@ canonicalize_path (const char *s, char * + return rv; + } + ++static int dirty_elf; ++static void ++dirty_section (unsigned int sec) ++{ ++ elf_flagdata (debug_sections[sec].elf_data, ELF_C_SET, ELF_F_DIRTY); ++ dirty_elf = 1; ++} ++ + static int + has_prefix (const char *str, + const char *prefix) +@@ -654,6 +662,8 @@ edit_dwarf2_line (DSO *dso, rpmuint32_t + size_t len = strlen ((char *)srcptr) + 1; + const unsigned char *readptr = srcptr; + ++ char *orig = strdup ((const char *) srcptr); ++ + if (*srcptr == '/' && has_prefix ((char *)srcptr, base_dir)) + { + if (dest_len < base_len) +@@ -670,8 +680,9 @@ edit_dwarf2_line (DSO *dso, rpmuint32_t + shrank -= len; + ptr += len; + +- elf_flagdata (debug_sections[DEBUG_STR].elf_data, +- ELF_C_SET, ELF_F_DIRTY); ++ if (memcmp (orig, ptr - len, len)) ++ dirty_section (DEBUG_STR); ++ free (orig); + } + + if (shrank > 0) +@@ -713,8 +724,7 @@ edit_dwarf2_line (DSO *dso, rpmuint32_t + len - base_len); + ptr += dest_len - base_len; + } +- elf_flagdata (debug_sections[DEBUG_STR].elf_data, +- ELF_C_SET, ELF_F_DIRTY); ++ dirty_section (DEBUG_STR); + } + else if (ptr != srcptr) + memmove (ptr, srcptr, len); +@@ -782,11 +792,9 @@ edit_attributes (DSO *dso, unsigned char + + + } +- elf_flagdata (debug_sections[DEBUG_INFO].elf_data, +- ELF_C_SET, ELF_F_DIRTY); ++ dirty_section (DEBUG_INFO); + } + } +- + else if (form == DW_FORM_strp && + debug_sections[DEBUG_STR].data) + { +@@ -809,8 +817,7 @@ edit_attributes (DSO *dso, unsigned char + memmove (dir + dest_len, dir + base_len, + strlen (dir + base_len) + 1); + } +- elf_flagdata (debug_sections[DEBUG_STR].elf_data, +- ELF_C_SET, ELF_F_DIRTY); ++ dirty_section (DEBUG_STR); + } + } + } +@@ -849,8 +856,7 @@ edit_attributes (DSO *dso, unsigned char + memmove (name + dest_len, name + base_len, + strlen (name + base_len) + 1); + } +- elf_flagdata (debug_sections[DEBUG_STR].elf_data, +- ELF_C_SET, ELF_F_DIRTY); ++ dirty_section (DEBUG_STR); + } + } + +@@ -1387,6 +1393,9 @@ handle_build_id (DSO *dso, Elf_Data *bui + exit (1); + } + ++ if (!dirty_elf) ++ goto print; ++ + if (elf_update (dso->elf, ELF_C_NULL) < 0) + { + fprintf (stderr, "Failed to update file: %s\n", +@@ -1471,6 +1480,7 @@ handle_build_id (DSO *dso, Elf_Data *bui + + elf_flagdata (build_id, ELF_C_SET, ELF_F_DIRTY); + ++ print: + /* Now format the build ID bits in hex to print out. */ + { + const rpmuint8_t * id = (rpmuint8_t *)build_id->d_buf + build_id_offset; diff --git a/rpm-5.4.4-debugedit-remove-unused-variable.patch b/rpm-5.4.4-debugedit-remove-unused-variable.patch new file mode 100644 index 0000000..71dc3f7 --- /dev/null +++ b/rpm-5.4.4-debugedit-remove-unused-variable.patch @@ -0,0 +1,18 @@ +--- rpm-5.4.4/tools/debugedit.c.unused_variable~ 2011-11-28 16:22:58.231962263 +0100 ++++ rpm-5.4.4/tools/debugedit.c 2011-11-28 16:26:30.102211728 +0100 +@@ -378,7 +378,6 @@ static char * + canonicalize_path (const char *s, char *d) + { + char *rv = d; +- const char *sroot; + char *droot; + + if (IS_DIR_SEPARATOR (*s)) +@@ -394,7 +393,6 @@ canonicalize_path (const char *s, char * + s++; + } + droot = d; +- sroot = s; + + while (*s) + { diff --git a/rpm-5.4.4-dont-consider-ranged-dependencies-as-overlapping-for-removal.patch b/rpm-5.4.4-dont-consider-ranged-dependencies-as-overlapping-for-removal.patch new file mode 100644 index 0000000..ba65788 --- /dev/null +++ b/rpm-5.4.4-dont-consider-ranged-dependencies-as-overlapping-for-removal.patch @@ -0,0 +1,16 @@ +--- rpm-5.4.4/build/reqprov.c.range_nooverlap~ 2012-02-15 18:58:39.075973279 +0100 ++++ rpm-5.4.4/build/reqprov.c 2012-02-15 19:02:01.120218409 +0100 +@@ -122,7 +122,12 @@ int addReqProv(/*@unused@*/ Spec spec, H + rpmds old = rpmdsSingle(flagtag, names[len], versions[len] ? versions[len] : "", flags[len]); + rpmds new = rpmdsSingle(flagtag, N, EVR, Flags); + +- overlap = rpmdsCompare(new, old); ++ /* do not consider dependency ranges like R: foo > 1, R: foo < 3 ++ * as overlapping (mdvbz#65269) ++ */ ++ if (!((Flags & RPMSENSE_GREATER && flags[len] & RPMSENSE_LESS) || ++ (Flags & RPMSENSE_LESS && flags[len] & RPMSENSE_GREATER))) ++ overlap = rpmdsCompare(new, old); + + if (overlap) { + EVR_t lEVR = rpmEVRnew(RPMSENSE_ANY, 0), diff --git a/rpm-5.4.4-drop-base-dependencies.patch b/rpm-5.4.4-drop-base-dependencies.patch new file mode 100644 index 0000000..c4d1e81 --- /dev/null +++ b/rpm-5.4.4-drop-base-dependencies.patch @@ -0,0 +1,15 @@ +--- rpm-5.4.4/build/reqprov.c.drop_basedeps~ 2011-12-11 03:55:58.958164657 +0100 ++++ rpm-5.4.4/build/reqprov.c 2011-12-11 03:56:04.794169328 +0100 +@@ -48,6 +48,12 @@ int addReqProv(/*@unused@*/ Spec spec, H + indextag = RPMTAG_TRIGGERINDEX; + extra = Flags & RPMSENSE_TRIGGER; + } else { ++#if defined(RPM_VENDOR_MANDRIVA) ++ if (!strcmp(N, "/bin/sh") || !strcmp(N, "/sbin/ldconfig")) { ++ rpmlog(RPMLOG_DEBUG, "%s will be satisfied by glibc or it's dependencies, won't add dependency to package\n"); ++ return 0; ++ } ++#endif + nametag = RPMTAG_REQUIRENAME; + versiontag = RPMTAG_REQUIREVERSION; + flagtag = RPMTAG_REQUIREFLAGS; 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-enable-rpmgio-net-transport.patch b/rpm-5.4.4-enable-rpmgio-net-transport.patch new file mode 100644 index 0000000..8f0675e --- /dev/null +++ b/rpm-5.4.4-enable-rpmgio-net-transport.patch @@ -0,0 +1,12 @@ +--- rpm-5.4.4/macros/mandriva.in.net_transport~ 2011-12-11 00:11:49.185221624 +0100 ++++ rpm-5.4.4/macros/mandriva.in 2011-12-11 00:13:30.790281912 +0100 +@@ -28,6 +28,9 @@ + + %_changelog_truncate 3 years ago + ++# mdvbz#64914 ++%_rpmgio .ufdio ++ + # This will die as soon as remaining usage has been phased out... + %mkrel(c:) %{-c: 0.%{-c*}.}%{1}%{?subrel:.%subrel} + %manbo_mkrel() %mkrel diff --git a/rpm-5.4.4-files-listed-twice-terminates-build.patch b/rpm-5.4.4-files-listed-twice-terminates-build.patch new file mode 100644 index 0000000..05452b4 --- /dev/null +++ b/rpm-5.4.4-files-listed-twice-terminates-build.patch @@ -0,0 +1,74 @@ +--- rpm-5.4.4/build/files.c.twice_terminate~ 2012-01-23 10:20:48.711612232 +0100 ++++ rpm-5.4.4/build/files.c 2012-01-23 10:20:48.716612237 +0100 +@@ -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)) { +@@ -1784,6 +1790,8 @@ if (_rpmbuildFlags & 4) { + fi = rpmfiFree(fi); + /*@=compdef@*/ + } ++ ++ return rc; + } + + /** +@@ -2506,7 +2514,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); +@@ -2820,7 +2829,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.4/macros/mandriva.in.twice_terminate~ 2012-01-23 10:20:48.000000000 +0100 ++++ rpm-5.4.4/macros/mandriva.in 2012-01-23 10:21:35.342670233 +0100 +@@ -125,6 +125,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 + %_nonzero_exit_pkgcheck_terminate_build 1 diff --git a/rpm-5.4.4-find-debuginfo-avoid-excessive-output-from-eu-strip.patch b/rpm-5.4.4-find-debuginfo-avoid-excessive-output-from-eu-strip.patch new file mode 100644 index 0000000..5f1c221 --- /dev/null +++ b/rpm-5.4.4-find-debuginfo-avoid-excessive-output-from-eu-strip.patch @@ -0,0 +1,11 @@ +--- rpm-5.4.4/scripts/find-debuginfo.sh.strip_silent~ 2011-12-06 08:32:19.205381136 +0100 ++++ rpm-5.4.4/scripts/find-debuginfo.sh 2011-12-06 08:33:02.954406789 +0100 +@@ -103,7 +103,7 @@ strip_to_debug() + esac + [ -n "$EXCLUDE_FULL_REGEXP" ] && grep -E -q "$EXCLUDE_FULL_REGEXP" <<< "$2" && g=-g + +- eu-strip --remove-comment $g $([ -n "$DISABLE_DEBUG" ] || echo $r -f "$1") "$2" || exit ++ eu-strip --remove-comment $g $([ -n "$DISABLE_DEBUG" ] || echo $r -f "$1") "$2" 1> /dev/null || exit + [ -n "$DISABLE_DEBUG" ] || chmod 444 "$1" || exit + } + diff --git a/rpm-5.4.4-fix-removal-of-overlapping-dependencies.patch b/rpm-5.4.4-fix-removal-of-overlapping-dependencies.patch new file mode 100644 index 0000000..8b9633c --- /dev/null +++ b/rpm-5.4.4-fix-removal-of-overlapping-dependencies.patch @@ -0,0 +1,95 @@ +--- rpm-5.4.4/build/reqprov.c.overlap~ 2011-04-01 12:39:50.000000000 +0200 ++++ rpm-5.4.4/build/reqprov.c 2011-11-26 02:21:00.125251492 +0100 +@@ -9,6 +9,8 @@ + #include + #define _RPMEVR_INTERNAL + #include "rpmbuild.h" ++#include ++#include + #include "debug.h" + + int addReqProv(/*@unused@*/ Spec spec, Header h, +@@ -110,37 +112,61 @@ int addReqProv(/*@unused@*/ Spec spec, H + * TODO: auto-generated deps too + */ + if (flagtag && versions != NULL) { +- int overlap; ++ int overlap = 0, res = 0; ++ rpmds old = rpmdsSingle(flagtag, names[len], versions[len] ? versions[len] : "", flags[len]); ++ rpmds new = rpmdsSingle(flagtag, N, EVR, Flags); + +- if(*EVR && !*versions[len]) { +- overlap = 1; +- flags[len] = Flags; +- he->tag = flagtag; +- he->t = RPM_UINT32_TYPE; +- he->p.argv = (void *) &Flags; +- xx = headerMod(h, he, 0); +- } else { ++ overlap = rpmdsCompare(new, old); ++ ++ if (overlap) { + EVR_t lEVR = rpmEVRnew(RPMSENSE_ANY, 0), + rEVR = rpmEVRnew(RPMSENSE_ANY, 0); ++ rpmuint32_t newflags; ++ /* if we have both a requires and suggests, we turn it into a requires */ ++ if (!(Flags & RPMSENSE_MISSINGOK) || !(flags[len] & RPMSENSE_MISSINGOK)) { ++ flags[len] &= ~RPMSENSE_MISSINGOK; ++ Flags &= ~RPMSENSE_MISSINGOK; ++ } ++ ++ /* merge all flags about dependency type */ ++ newflags = ((flags[len]| Flags) & _ALL_REQUIRES_MASK); + + rpmEVRparse(EVR, lEVR); + rpmEVRparse(versions[len], rEVR); +- lEVR->Flags = Flags | RPMSENSE_EQUAL; +- rEVR->Flags = flags[len] | RPMSENSE_EQUAL; +- overlap = rpmEVRoverlap(lEVR, rEVR); +- if (!overlap) +- if (rpmEVRoverlap(rEVR, lEVR)) +- duplicate = 1; ++ lEVR->Flags = Flags; ++ rEVR->Flags = flags[len]; ++ ++ res = rpmEVRcompare(lEVR, rEVR); ++ /* we only update version if greater */ ++ if (res > 0) { ++ flags[len] = Flags; ++ ++ versions[len] = EVR; ++ he->tag = versiontag; ++ he->t = RPM_STRING_ARRAY_TYPE; ++ he->p.argv = versions; ++ xx = headerMod(h, he, 0); ++ rpmlog(RPMLOG_WARNING, "%s overlaps %s, removing %s\n", rpmdsDNEVR(old), rpmdsDNEVR(new), rpmdsDNEVR(old)); ++ } else if (res < 0) { ++ rpmlog(RPMLOG_WARNING, "%s overlaps %s, removing %s\n", rpmdsDNEVR(new), rpmdsDNEVR(old), rpmdsDNEVR(new)); ++ } else { ++ rpmlog(RPMLOG_DEBUG, "%s overlaps %s, removing %s and merging flags\n", rpmdsDNEVR(new), rpmdsDNEVR(old), rpmdsDNEVR(new)); ++ } ++ ++ flags[len] |= newflags; ++ he->tag = flagtag; ++ he->t = RPM_UINT32_TYPE; ++ he->p.ui32p = flags; ++ xx = headerMod(h, he, 0); ++ + lEVR = rpmEVRfree(lEVR); + rEVR = rpmEVRfree(rEVR); ++ duplicate = 1; + } +- if (overlap) { +- versions[len] = EVR; +- he->tag = versiontag; +- he->t = RPM_STRING_ARRAY_TYPE; +- he->p.argv = versions; +- xx = headerMod(h, he, 0); +- } else ++ old = rpmdsFree(old); ++ new = rpmdsFree(new); ++ ++ if (!overlap) + continue; + } + #else 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-fix-same-package-with-epoch-possible-to-upgrade.patch b/rpm-5.4.4-fix-same-package-with-epoch-possible-to-upgrade.patch new file mode 100644 index 0000000..6d81cf4 --- /dev/null +++ b/rpm-5.4.4-fix-same-package-with-epoch-possible-to-upgrade.patch @@ -0,0 +1,22 @@ +--- rpm-5.4.4/lib/transaction.c.epoch_cmp~ 2011-11-30 22:25:26.646155379 +0100 ++++ rpm-5.4.4/lib/transaction.c 2011-11-30 23:15:28.252768345 +0100 +@@ -1187,12 +1187,15 @@ rpmlog(RPMLOG_DEBUG, D_("sanity checking + const char *val = NULL; + he->tag = tags[t]; + xx = headerGet(h, he, 0); +- if (he->tag == RPMTAG_EPOCH) ++ if (he->tag == RPMTAG_EPOCH) { + val = rpmteE(p); +- else if (he->tag == RPMTAG_DISTEPOCH) ++ if (val ? atoi(val) : 0 != he->p.ui32p ? *(he->p.ui32p) : 0) ++ nkeys--; ++ } else if (he->tag == RPMTAG_DISTEPOCH) { + val = rpmteD(p); +- if (strcmp(he->p.str ? he->p.str : "", val ? val : "")) +- nkeys--; ++ if (strcmp(he->p.str ? he->p.str : "", val ? val : "")) ++ nkeys--; ++ } + he->p.ptr = _free(he->p.ptr); + } + mi = rpmmiFree(mi); 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..1848a96 --- /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`" + BUILDDIR=. + out=debugfiles.list + nout=0 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-really-always-invoke-clean-at-end.patch b/rpm-5.4.4-really-always-invoke-clean-at-end.patch new file mode 100644 index 0000000..ac81f10 --- /dev/null +++ b/rpm-5.4.4-really-always-invoke-clean-at-end.patch @@ -0,0 +1,41 @@ +--- rpm-5.4.4/build/parseChangelog.c.clean~ 2011-08-15 00:43:47.000000000 +0200 ++++ rpm-5.4.4/build/parseChangelog.c 2011-11-12 17:52:00.756971839 +0100 +@@ -269,11 +269,7 @@ int parseChangelog(Spec spec) + /* There are no options to %changelog */ + if ((rc = readLine(spec, STRIP_COMMENTS)) > 0) { + iob = rpmiobFree(iob); +-#if defined(RPM_VENDOR_MANDRIVA) +- return (spec->clean == NULL) ? PART_CLEAN : PART_NONE; +-#else + return PART_NONE; +-#endif + } + if (rc != RPMRC_OK) + return rc; +@@ -285,11 +281,7 @@ int parseChangelog(Spec spec) + iob = rpmiobAppend(iob, spec->line, 0); + line = _free(line); + if ((rc = readLine(spec, STRIP_COMMENTS | STRIP_NOEXPAND)) > 0) { +-#if defined(RPM_VENDOR_MANDRIVA) +- nextPart = (spec->clean == NULL) ? PART_CLEAN : PART_NONE; +-#else + nextPart = PART_NONE; +-#endif + break; + } + if (rc != RPMRC_OK) +--- rpm-5.4.4/build/parseFiles.c.clean~ 2011-03-25 18:45:46.000000000 +0100 ++++ rpm-5.4.4/build/parseFiles.c 2011-11-12 17:52:00.758971903 +0100 +@@ -114,12 +114,7 @@ int parseFiles(Spec spec) + } + } + +-#if defined(RPM_VENDOR_MANDRIVA) +- /* if no %clean section, add implicit */ +- rc = (nextPart == PART_NONE && spec->clean == NULL) ? PART_CLEAN : nextPart; +-#else + rc = nextPart; +-#endif + + exit: + argv = _free(argv); 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.4-ruby1.9-fixes.patch b/rpm-5.4.4-ruby1.9-fixes.patch new file mode 100644 index 0000000..bfd5780 --- /dev/null +++ b/rpm-5.4.4-ruby1.9-fixes.patch @@ -0,0 +1,107 @@ +--- rpm-5.4.4/macros/ruby.in.ruby19~ 2012-02-12 02:12:46.836859413 +0100 ++++ rpm-5.4.4/macros/ruby.in 2012-02-12 02:15:46.629035339 +0100 +@@ -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 + +--- rpm-5.4.4/scripts/gem_helper.rb.ruby19~ 2012-02-10 18:11:51.651949530 +0100 ++++ rpm-5.4.4/scripts/gem_helper.rb 2012-02-12 02:09:01.918636768 +0100 +@@ -60,7 +60,11 @@ if ARGV[0] == "build" or ARGV[0] == "ins + file_data = Zlib::GzipReader.open("metadata.gz") + 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)) +--- rpm-5.4.4/scripts/rubygems.rb.ruby19~ 2012-02-10 18:13:31.677929922 +0100 ++++ rpm-5.4.4/scripts/rubygems.rb 2012-02-10 18:29:59.496622154 +0100 +@@ -30,7 +30,7 @@ if rest.size != 0 or (!provides and !req + 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 @@ for path in $stdin.readlines + # 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 @@ end + 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 @@ if gems.length > 0 + 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.4-srcdefattr.patch b/rpm-5.4.4-srcdefattr.patch new file mode 100644 index 0000000..926882c --- /dev/null +++ b/rpm-5.4.4-srcdefattr.patch @@ -0,0 +1,21 @@ +--- rpm-5.4.4/build/files.c.srcdefattr~ 2011-12-23 00:01:26.894705831 +0100 ++++ rpm-5.4.4/build/files.c 2011-12-23 00:03:26.074836579 +0100 +@@ -2790,7 +2790,7 @@ int processSourceFiles(Spec spec) + rc = fl.processingFailed = 1; + } + +-#if defined(RPM_VENDOR_OPENPKG) /* support-srcdefattr */ ++#if defined(RPM_VENDOR_OPENPKG) || defined(RPM_VENDOR_MANDRIVA) /* support-srcdefattr */ + /* srcdefattr: allow to set SRPM file attributes via %{_srcdefattr} macro */ + if (fl.def_ar.ar_fmodestr) { + flp->fl_mode &= S_IFMT; +--- rpm-5.4.4/macros/mandriva.in.srcdefattr~ 2011-12-23 00:02:58.200806169 +0100 ++++ rpm-5.4.4/macros/mandriva.in 2011-12-23 00:03:14.094823523 +0100 +@@ -21,6 +21,7 @@ + # Build root path, where %install installs the package during build. + %buildroot %{_buildrootdir}/%{name}-%{version}-%{release}%{?disttag:-%{disttag}%{?distepoch:%{distepoch}}}.%{_target_cpu}-buildroot + ++%_srcdefattr (644,root,root) + # Path to top of build area. + %_topdir %(echo $HOME)/rpmbuild + diff --git a/rpm-5.4.4-use-dependency-type-for-ordering.patch b/rpm-5.4.4-use-dependency-type-for-ordering.patch new file mode 100644 index 0000000..f128d24 --- /dev/null +++ b/rpm-5.4.4-use-dependency-type-for-ordering.patch @@ -0,0 +1,84 @@ +--- rpm-5.4.4/lib/order.c.ordering~ 2011-01-14 15:06:08.000000000 +0100 ++++ rpm-5.4.4/lib/order.c 2011-11-16 11:31:23.529577558 +0100 +@@ -332,7 +332,7 @@ static inline /*@observer@*/ const char + /*@-mustmod@*/ /* FIX: hack modifies, but -type disables */ + static /*@owned@*/ /*@null@*/ const char * + zapRelation(rpmte q, rpmte p, +- int zap, /*@in@*/ /*@out@*/ int * nzaps, int msglvl) ++ int zap, /*@in@*/ /*@out@*/ int * nzaps, int msglvl, rpmuint32_t skipFlags) + /*@globals rpmGlobalMacroContext, h_errno, internalState @*/ + /*@modifies q, p, *nzaps, rpmGlobalMacroContext, internalState @*/ + { +@@ -364,6 +364,18 @@ zapRelation(rpmte q, rpmte p, + + dp = rpmdsNewDNEVR( identifyDepend(Flags), requires); + ++ if(Flags & skipFlags) { ++ if(zap) { ++ rpmlog(msglvl, ++ _("not removing %s \"%s\" from tsort relations.\n"), ++ (rpmteNEVRA(p) ? rpmteNEVRA(p) : "???"), dp); ++ if (nzaps) ++ (*nzaps)++; ++ } ++ dp = _free(dp); ++ continue; ++ } ++ + /* + * Attempt to unravel a dependency loop by eliminating Requires's. + */ +@@ -1812,6 +1824,18 @@ int _rpmtsOrder(rpmts ts) + int depth; + int breadth; + int qlen; ++ static const evrFlags orderPriority[] = { ++ RPMSENSE_MISSINGOK, ++ RPMSENSE_SCRIPT_VERIFY, ++ RPMSENSE_PACKAGE, ++ RPMSENSE_FIND_REQUIRES, ++ _ERASE_ONLY_MASK, ++ _INSTALL_ONLY_MASK, ++ _ALL_REQUIRES_MASK ++ }; /* dependency to zap in order to try resolve dependency loops */ ++ rpmuint32_t skipFlags = _ALL_REQUIRES_MASK; ++ unsigned sfi = 0; ++ + #endif /* REFERENCE */ + + if (_rpmts_debug) +@@ -2007,6 +2031,9 @@ fprintf(stderr, "--> %s(%p) tsFlags 0x%x + rescan: + if (pi != NULL) pi = rpmtsiFree(pi); + #endif ++ if (sfi < sizeof(orderPriority)) ++ skipFlags &= ~orderPriority[sfi++]; ++ + q = r = NULL; + qlen = 0; + pi = rpmtsiInit(ts); +@@ -2168,10 +2195,14 @@ rescan: + const char * nevra; + #endif + const char * dp; ++ /* ++ * TODO: use RPMLOG_DEBUG for when loops can be resolved ++ * without zapping all dependencies in it ++ */ + rpmlogLvl msglvl = (anaconda || (rpmtsDFlags(ts) & RPMDEPS_FLAG_DEPLOOPS)) + ? RPMLOG_WARNING : RPMLOG_ERR; + #if defined(RPM_VENDOR_MANDRIVA) /* loop-detection-optional-loglevel */ +- // Report loops as debug-level message by default (7 = RPMLOG_DEBUG), overridable ++ /* Report loops as debug-level message by default (7 = RPMLOG_DEBUG), overridable */ + msglvl = rpmExpandNumeric("%{?_loop_detection_loglevel}%{?!_loop_detection_loglevel:7}"); + #endif + +@@ -2184,7 +2215,7 @@ rescan: + } + + /* Find (and destroy if co-requisite) "q <- p" relation. */ +- dp = zapRelation(q, p, 1, &nzaps, msglvl); ++ dp = zapRelation(q, p, 1, &nzaps, msglvl, skipFlags); + + #if 0 + /* Print next member of loop. */ diff --git a/rpm-5.4.5-break-out-of-elf-link-loop.patch b/rpm-5.4.5-break-out-of-elf-link-loop.patch new file mode 100644 index 0000000..caa8070 --- /dev/null +++ b/rpm-5.4.5-break-out-of-elf-link-loop.patch @@ -0,0 +1,45 @@ +--- rpm-5.4.5/lib/rpmds.c.link_loop~ 2012-03-05 22:32:46.858675088 +0100 ++++ rpm-5.4.5/lib/rpmds.c 2012-03-06 18:52:18.775950015 +0100 +@@ -2938,7 +2938,7 @@ static char * sonameDep(/*@returned@*/ c + return t; + } + +-static char *find_elf_interpreter(GElf_Ehdr *ehdr, Elf *elf, char *filename) ++static char *find_elf_interpreter(GElf_Ehdr *ehdr, Elf *elf, char *filename, char *prev) + { + FILE *fp = NULL; + struct stat statbuf; +@@ -3040,6 +3040,8 @@ foo: + char path[MAXPATHLEN] = ""; + + libpath = elf_strptr (elf, shdr->sh_link, dyn->d_un.d_val); ++ if (prev && *prev && libpath && !strcmp(basename(prev), libpath)) ++ libpath = NULL; + + if (!libpath || !strlen(libpath)) + continue; +@@ -3066,7 +3068,7 @@ foo: + if ((rpath && *rpath) || tmp) + tmp2 = stpcpy(tmp2, ":"); + /* XXX: do better check to ensure libraries are all of the same class */ +- tmp2 = stpcpy(tmp2, (class == ELFCLASS64) ? "/lib64" : "/lib"); ++ tmp2 = stpcpy(tmp2, (class == ELFCLASS64) ? "/lib64:/usr/lib64" : "/lib:/usr/lib"); + tmp = buf; + { + int i, count = 1; +@@ -3116,13 +3118,13 @@ end: + fclose(fp); + } + if (!interp_name && libpath) +- return find_elf_interpreter(NULL, NULL, libpath); ++ return find_elf_interpreter(NULL, NULL, libpath, filename); + return interp_name; + } + + static int checkuClibc(GElf_Ehdr *ehdr, Elf *elf) { + int ret = 0; +- char *interp = find_elf_interpreter(ehdr, elf, NULL); ++ char *interp = find_elf_interpreter(ehdr, elf, NULL, NULL); + + if (interp) { + char *tmp = basename(interp); diff --git a/rpm-5.4.5-desktop-provides.patch b/rpm-5.4.5-desktop-provides.patch new file mode 100644 index 0000000..8489f51 --- /dev/null +++ b/rpm-5.4.5-desktop-provides.patch @@ -0,0 +1,70 @@ +--- rpm-5.4.5/lib/rpmfc.c.desktop~ 2012-03-03 04:52:25.531739631 +0100 ++++ rpm-5.4.5/lib/rpmfc.c 2012-03-03 04:52:28.659741193 +0100 +@@ -993,6 +993,17 @@ static int rpmfcSCRIPT(rpmfc fc) + xx = rpmfcHelper(fc, 'R', "kernel"); + } + mire = mireFree(mire); ++ } ++ if ((fc->fcolor->vals[fc->ix] & RPMFC_SCRIPT)) { ++ miRE mire = mireNew(RPMMIRE_REGEX, RPMTAG_FILEPATHS); ++ if (!mireRegcomp(mire, "^.*/usr/share/applications/.*\\.desktop$")) ++ if (mireRegexec(mire, fc->fn[fc->ix], (size_t) 0) >= 0) { ++ fc->fcolor->vals[fc->ix] |= (RPMFC_MODULE|RPMFC_SCRIPT); ++ xx = rpmfcHelper(fc, 'P', "desktop"); ++ /* XXX: currently of no use, but for the sake of consistency... */ ++ xx = rpmfcHelper(fc, 'R', "desktop"); ++ } ++ mire = mireFree(mire); + #endif + } + +@@ -1208,6 +1219,12 @@ assert(fc->fn != NULL); + if (mireRegexec(mire, fc->fn[fc->ix], (size_t) 0) >= 0) + fc->fcolor->vals[fc->ix] |= (RPMFC_MODULE|RPMFC_SCRIPT); + mire = mireFree(mire); ++ mire = mireNew(RPMMIRE_REGEX, RPMTAG_FILEPATHS); ++ /* buttfuckin' retarded, but whatever.. it'll work at least! ;) */ ++ if (!mireRegcomp(mire, "^.*/usr/share/applications/.*\\.desktop$")) ++ if (mireRegexec(mire, fc->fn[fc->ix], (size_t) 0) >= 0) ++ fc->fcolor->vals[fc->ix] |= RPMFC_SCRIPT; ++ mire = mireFree(mire); + #endif + } + } +--- rpm-5.4.5/macros/macros.rpmbuild.in.desktop~ 2012-03-03 04:51:07.041700511 +0100 ++++ rpm-5.4.5/macros/macros.rpmbuild.in 2012-03-03 04:51:50.048721947 +0100 +@@ -685,5 +685,8 @@ done \ + %__font_provides %{_rpmhome}/fontconfig.prov + #%__font_requires %{_rpmhome}/fontconfig.req + ++%__desktop_provides %{_rpmhome}/mandriva/desktop-file.prov ++#%__desktop_requires %{_rpmhome}/mandriva/desktop-file.prov ++ + # \endverbatim + #*/ +--- rpm-5.4.5/scripts/desktop-file.prov.desktop~ 2012-03-03 04:54:39.103806210 +0100 ++++ rpm-5.4.5/scripts/desktop-file.prov 2012-03-03 04:54:27.703800528 +0100 +@@ -0,0 +1,23 @@ ++#!/bin/sh ++# ++# Transform desktop mimetype info into RPM mimehandler(type) provides ++# ++# Author: Richard Hughes ++# Based on other provides scripts from RPM ++ ++OLD_IFS="$IFS" ++while read instfile ; do ++ case "$instfile" in ++ *.desktop) ++ if ! grep -q '^Type=Application$' "$instfile"; then continue; fi ++ if ! grep -q '^Exec=' "$instfile"; then continue; fi ++ mime=`grep '^MimeType=' "$instfile" | cut -d'=' -f2` ++ IFS=';' ++ for type in $mime ; do ++ echo 'mimehandler('$type')' ++ done ++ ;; ++ esac ++done ++IFS=$OLD_IFS ++ diff --git a/rpm-5.4.5-do-not-merge-script-dependencies-with-non-script-dependencies.patch b/rpm-5.4.5-do-not-merge-script-dependencies-with-non-script-dependencies.patch new file mode 100644 index 0000000..a0287c9 --- /dev/null +++ b/rpm-5.4.5-do-not-merge-script-dependencies-with-non-script-dependencies.patch @@ -0,0 +1,36 @@ +--- rpm-5.4.5/build/reqprov.c.script_overlap~ 2012-03-06 21:09:05.867560098 +0100 ++++ rpm-5.4.5/build/reqprov.c 2012-03-06 21:10:49.962670768 +0100 +@@ -125,9 +125,14 @@ int addReqProv(/*@unused@*/ Spec spec, H + /* do not consider dependency ranges like R: foo > 1, R: foo < 3 + * as overlapping (mdvbz#65269) + */ ++#define RPMSENSE_SCRIPTS (RPMSENSE_SCRIPT_PRE|RPMSENSE_SCRIPT_POST|RPMSENSE_SCRIPT_PREUN|RPMSENSE_SCRIPT_POSTUN|RPMSENSE_SCRIPT_VERIFY) + if (!((Flags & RPMSENSE_GREATER && flags[len] & RPMSENSE_LESS) || +- (Flags & RPMSENSE_LESS && flags[len] & RPMSENSE_GREATER))) ++ (Flags & RPMSENSE_LESS && flags[len] & RPMSENSE_GREATER)) && ++ /* do not merge script dependencies with non-script dependencies */ ++ !(((Flags & RPMSENSE_SCRIPTS) && !(flags[len] & RPMSENSE_SCRIPTS)) || ++ ((flags[len] & RPMSENSE_SCRIPTS) && !(Flags & RPMSENSE_SCRIPTS)))) + overlap = rpmdsCompare(new, old); ++#undef RPMSENSE_SCRIPTS + + if (overlap) { + EVR_t lEVR = rpmEVRnew(RPMSENSE_ANY, 0), +--- rpm-5.4.5/lib/rpmfc.c.script_overlap~ 2012-03-06 21:09:05.870560101 +0100 ++++ rpm-5.4.5/lib/rpmfc.c 2012-03-06 21:09:29.342585059 +0100 +@@ -524,9 +524,14 @@ assert(EVR != NULL); + /* do not consider dependency ranges like R: foo > 1, R: foo < 3 + * as overlapping (mdvbz#65269) + */ ++#define RPMSENSE_SCRIPTS (RPMSENSE_SCRIPT_PRE|RPMSENSE_SCRIPT_POST|RPMSENSE_SCRIPT_PREUN|RPMSENSE_SCRIPT_POSTUN|RPMSENSE_SCRIPT_VERIFY) + if (!((Flags & RPMSENSE_GREATER && (*depsp)->Flags[(*depsp)->i] & RPMSENSE_LESS) || +- (Flags & RPMSENSE_LESS &&(*depsp)->Flags[(*depsp)->i] & RPMSENSE_GREATER))) ++ (Flags & RPMSENSE_LESS && (*depsp)->Flags[(*depsp)->i] & RPMSENSE_GREATER)) && ++ /* do not merge script dependencies with non-script dependencies */ ++ !(((Flags & RPMSENSE_SCRIPTS) && !((*depsp)->Flags[(*depsp)->i] & RPMSENSE_SCRIPTS)) || ++ (((*depsp)->Flags[(*depsp)->i] & RPMSENSE_SCRIPTS) && !(Flags & RPMSENSE_SCRIPTS)))) + overlap = rpmdsCompare(*depsp, ds); ++#undef RPMSENSE_SCRIPTS + + if (overlap) { + EVR_t lEVR = rpmEVRnew(RPMSENSE_ANY, 0), diff --git a/rpm-5.4.5-dont-generate-php-dependencies-only-when-executable.patch b/rpm-5.4.5-dont-generate-php-dependencies-only-when-executable.patch new file mode 100644 index 0000000..15dcd3f --- /dev/null +++ b/rpm-5.4.5-dont-generate-php-dependencies-only-when-executable.patch @@ -0,0 +1,12 @@ +--- rpm-5.4.5/lib/rpmfc.c.php_dep_gen~ 2012-02-24 13:41:47.442140908 +0100 ++++ rpm-5.4.5/lib/rpmfc.c 2012-02-24 13:41:49.933142149 +0100 +@@ -919,7 +919,9 @@ static int rpmfcSCRIPT(rpmfc fc) + } else + if (fc->fcolor->vals[fc->ix] & RPMFC_PHP) { + xx = rpmfcHelper(fc, 'P', "php"); ++#ifdef NOTYET + if (is_executable) ++#endif + xx = rpmfcHelper(fc, 'R', "php"); + } else + if (fc->fcolor->vals[fc->ix] & RPMFC_MONO) { diff --git a/rpm-5.4.5-drop-some-interpreter-deps.patch b/rpm-5.4.5-drop-some-interpreter-deps.patch new file mode 100644 index 0000000..c0ed916 --- /dev/null +++ b/rpm-5.4.5-drop-some-interpreter-deps.patch @@ -0,0 +1,32 @@ +--- rpm-5.4.5/lib/rpmfc.c.interpret_deps~ 2012-02-29 21:36:46.309581229 +0100 ++++ rpm-5.4.5/lib/rpmfc.c 2012-02-29 21:52:44.099058625 +0100 +@@ -843,10 +843,19 @@ static int rpmfcSCRIPT(rpmfc fc) + *se = '\0'; + se++; + ++/*@-moduncon@*/ ++ bn = basename(s); ++ + if (!_filter_values + || (!fc->skipReq + && !rpmfcMatchRegexps(fc->Rmires, fc->Rnmire, s, 'R'))) +- if (is_executable) { ++ if (is_executable && ++ strncmp(bn, "bash", sizeof("bash")-1) && ++ strcmp(bn, "env") && ++ strncmp(bn, "perl", sizeof("perl")-1) && ++ strncmp(bn, "python", sizeof("python")-1) && ++ strncmp(bn, "ruby", sizeof("ruby")-1) && ++ strcmp(bn, "sh")) { + /* Add to package requires. */ + ds = rpmdsSingle(RPMTAG_REQUIRENAME, s, "", RPMSENSE_FIND_REQUIRES); + xx = rpmdsMerge(&fc->requires, ds); +@@ -860,8 +869,6 @@ static int rpmfcSCRIPT(rpmfc fc) + + /* Set color based on interpreter name. */ + /* XXX magic token should have already done this?!? */ +-/*@-moduncon@*/ +- bn = basename(s); + /*@=moduncon@*/ + if (!strcmp(bn, "perl")) + fc->fcolor->vals[fc->ix] |= RPMFC_PERL; diff --git a/rpm-5.4.5-fix-elf-interpreter-resolving-breaking-uclibc-deps.patch b/rpm-5.4.5-fix-elf-interpreter-resolving-breaking-uclibc-deps.patch new file mode 100644 index 0000000..0d58ae3 --- /dev/null +++ b/rpm-5.4.5-fix-elf-interpreter-resolving-breaking-uclibc-deps.patch @@ -0,0 +1,58 @@ +--- rpm-5.4.5/lib/rpmds.c.uclibc~ 2012-03-01 15:13:53.758195733 +0100 ++++ rpm-5.4.5/lib/rpmds.c 2012-03-01 15:15:13.648235553 +0100 +@@ -3016,31 +3016,28 @@ foo: + data = NULL; + while ((data = elf_getdata (scn, data)) != NULL) { + int dynsize = (int)(shdr->sh_size / shdr->sh_entsize)-1; ++ for (cnt = dynsize; cnt >= 0; --cnt) { ++ dyn = gelf_getdyn (data, cnt, &dyn_mem); ++ ++ if (dyn->d_tag == DT_RPATH || dyn->d_tag == DT_RUNPATH) { ++ rpath = elf_strptr (elf, shdr->sh_link, dyn->d_un.d_val); ++ break; ++ } ++ } + for (cnt = 0; cnt <= dynsize; ++cnt) { + dyn = gelf_getdyn (data, cnt, &dyn_mem); + + /* if this an elf interpeter, the only thing we want is to find SONAME + * and return it + */ +- if (phdr) { +- if (dyn->d_tag != DT_SONAME) +- continue; ++ if (phdr && dyn->d_tag == DT_SONAME) { + interp_name = strdup(elf_strptr(elf, shdr->sh_link, dyn->d_un.d_val)); + goto end; + } +- if (rpath == NULL) { +- if (dyn->d_tag == DT_RPATH) +- rpath = elf_strptr (elf, shdr->sh_link, dyn->d_un.d_val); +- else if (cnt == dynsize) +- rpath = ""; +- if (rpath != NULL) +- cnt = -1; +- continue; +- } +- else if (rpath && dyn->d_tag == DT_NEEDED) { ++ if (dyn->d_tag == DT_NEEDED) { + char *tmp, *tmp2; +- char buf[1024]; +- char path[1024] = ""; ++ char buf[MAXPATHLEN]; ++ char path[MAXPATHLEN] = ""; + + libpath = elf_strptr (elf, shdr->sh_link, dyn->d_un.d_val); + +@@ -3106,10 +3103,10 @@ foo: + *tmp = '\0'; + } + libpath = buf; ++ break; + } + } + } +- break; + } + } + diff --git a/rpm-5.4.5-fix-generation-of-uclibc-deps-on-non-lib64.patch b/rpm-5.4.5-fix-generation-of-uclibc-deps-on-non-lib64.patch new file mode 100644 index 0000000..68e3945 --- /dev/null +++ b/rpm-5.4.5-fix-generation-of-uclibc-deps-on-non-lib64.patch @@ -0,0 +1,11 @@ +--- rpm-5.4.5/lib/rpmds.c.uclibc_nolib64~ 2012-03-07 16:45:18.844313010 +0100 ++++ rpm-5.4.5/lib/rpmds.c 2012-03-07 16:45:26.711321576 +0100 +@@ -3131,7 +3131,7 @@ static int checkuClibc(GElf_Ehdr *ehdr, + if (tmp[0] == 'l' && tmp[1] == 'd') { + tmp += ((tmp[2] == '3' && tmp[3] == '2') || + (tmp[2] == '6' && tmp[3] == '4')) ? +- 5 : 7; ++ 5 : 3; + if (!strncasecmp(tmp, "uClibc.so", sizeof("uClibc.so")-1)) + ret = 1; + } diff --git a/rpm-5.4.5-fix-removal-of-overlapping-dependencies-for-internal-dependency-generator.patch b/rpm-5.4.5-fix-removal-of-overlapping-dependencies-for-internal-dependency-generator.patch new file mode 100644 index 0000000..302fb33 --- /dev/null +++ b/rpm-5.4.5-fix-removal-of-overlapping-dependencies-for-internal-dependency-generator.patch @@ -0,0 +1,84 @@ +--- rpm-5.4.5/lib/rpmfc.c.int_gen_overlap~ 2012-02-23 22:12:39.924314353 +0100 ++++ rpm-5.4.5/lib/rpmfc.c 2012-02-23 22:12:49.006318880 +0100 +@@ -514,27 +514,57 @@ assert(EVR != NULL); + ds = rpmdsSingle(tagN, N, EVR, Flags); + + #if defined(RPM_VENDOR_MANDRIVA) /* filter-overlapping-dependencies */ +- int overlap = 0; ++ /* XXX: should really share same code path as with what's in ++ * build/reqprov.c:addReqProv() ++ */ ++ int overlap = 0, res = 0; + if (*depsp) { + int ix = rpmdsSearch(*depsp, ds); + if (ix >= 0) { +- EVR_t lEVR = rpmEVRnew(RPMSENSE_ANY, 0), +- rEVR = rpmEVRnew(RPMSENSE_ANY, 0); ++ /* do not consider dependency ranges like R: foo > 1, R: foo < 3 ++ * as overlapping (mdvbz#65269) ++ */ ++ if (!((Flags & RPMSENSE_GREATER && (*depsp)->Flags[(*depsp)->i] & RPMSENSE_LESS) || ++ (Flags & RPMSENSE_LESS &&(*depsp)->Flags[(*depsp)->i] & RPMSENSE_GREATER))) ++ overlap = rpmdsCompare(*depsp, ds); ++ ++ if (overlap) { ++ EVR_t lEVR = rpmEVRnew(RPMSENSE_ANY, 0), ++ rEVR = rpmEVRnew(RPMSENSE_ANY, 0); ++ rpmuint32_t newflags; ++ ++ /* if we have both a requires and suggests, we turn it into a requires */ ++ if (!(Flags & RPMSENSE_MISSINGOK) || !((*depsp)->Flags[(*depsp)->i] & RPMSENSE_MISSINGOK)) { ++ (*depsp)->Flags[(*depsp)->i] &= ~RPMSENSE_MISSINGOK; ++ Flags &= ~RPMSENSE_MISSINGOK; ++ } ++ ++ /* merge all flags about dependency type */ ++ newflags = (((*depsp)->Flags[(*depsp)->i]| Flags) & _ALL_REQUIRES_MASK); ++ ++ rpmdsSetIx(*depsp, ix); ++ ++ rpmEVRparse(EVR, lEVR); ++ rpmEVRparse(rpmdsEVR(*depsp), rEVR); ++ lEVR->Flags = Flags; ++ rEVR->Flags = (*depsp)->Flags[(*depsp)->i]; ++ ++ res = rpmEVRcompare(lEVR, rEVR); ++ if (res > 0) { ++ (*depsp)->Flags[(*depsp)->i] = Flags; ++ (*depsp)->EVR[(*depsp)->i] = EVR; ++ rpmlog(RPMLOG_WARNING, "%s overlaps %s, removing %s\n", rpmdsDNEVR(*depsp), rpmdsDNEVR(ds), rpmdsDNEVR(*depsp)); ++ } else if (res < 0) { ++ rpmlog(RPMLOG_WARNING, "%s overlaps %s, removing %s\n", rpmdsDNEVR(ds), rpmdsDNEVR(*depsp), rpmdsDNEVR(ds)); ++ } else { ++ rpmlog(RPMLOG_DEBUG, "%s overlaps %s, removing %s and merging flags\n", rpmdsDNEVR(ds), rpmdsDNEVR(*depsp), rpmdsDNEVR(ds)); ++ } + +- rpmdsSetIx(*depsp, ix); ++ (*depsp)->Flags[(*depsp)->i] |= newflags; + +- rpmEVRparse(rpmdsEVR(*depsp), lEVR); +- rpmEVRparse(EVR, rEVR); +- lEVR->Flags = rpmdsFlags(*depsp) | RPMSENSE_EQUAL; +- rEVR->Flags = Flags | RPMSENSE_EQUAL; +- +- if (rpmEVRcompare(lEVR, rEVR) < 0) { +- (*depsp)->EVR[(*depsp)->i] = EVR; +- (*depsp)->Flags[(*depsp)->i] = Flags; +- overlap = 1; ++ lEVR = rpmEVRfree(lEVR); ++ rEVR = rpmEVRfree(rEVR); + } +- lEVR = rpmEVRfree(lEVR); +- rEVR = rpmEVRfree(rEVR); + } + } + if (!overlap) +@@ -1183,7 +1213,7 @@ assert(se != NULL); + switch (deptype) { + default: + /*@switchbreak@*/ break; +- case 'P': ++ case 'P': + skipping = fc->skipProv; + ds = rpmdsSingle(RPMTAG_PROVIDENAME, N, EVR, Flags); + dix = rpmdsFind(fc->provides, ds); diff --git a/rpm-5.4.5-kmod-deps-xz-support.patch b/rpm-5.4.5-kmod-deps-xz-support.patch new file mode 100644 index 0000000..1579c3c --- /dev/null +++ b/rpm-5.4.5-kmod-deps-xz-support.patch @@ -0,0 +1,11 @@ +--- rpm-5.4.5/scripts/kmod-deps.sh.xz~ 2012-02-23 14:31:29.602522477 +0100 ++++ rpm-5.4.5/scripts/kmod-deps.sh 2012-02-23 14:31:44.667529986 +0100 +@@ -34,7 +34,7 @@ fi + + if [ $provides -eq 1 ]; then + provideslist=`sed "s/['\"]/\\\&/g"` +- modulelist=$(echo "$provideslist" | egrep '^.*(/lib/modules/|/var/lib/dkms/).*\.ko(\.gz)?$') ++ modulelist=$(echo "$provideslist" | egrep '^.*(/lib/modules/|/var/lib/dkms/).*\.ko(\.gz|\.xz)?$') + echo $modulelist | xargs -r $modinfo | \ + perl -lne ' + $name = $1 if m!^filename:\s*(?:.*/)?([^/]+)\.k?o!; diff --git a/rpm-5.4.5-libsql-conditional.patch b/rpm-5.4.5-libsql-conditional.patch new file mode 100644 index 0000000..62ac52d --- /dev/null +++ b/rpm-5.4.5-libsql-conditional.patch @@ -0,0 +1,12 @@ +--- rpm-5.4.5/lib/Makefile.am.libsql~ 2011-08-15 22:33:15.000000000 +0200 ++++ rpm-5.4.5/lib/Makefile.am 2012-02-20 13:33:03.143259035 +0100 +@@ -88,7 +88,9 @@ librpm.la: $(librpm_la_OBJECTS) $(librpm + $(librpm_la_LINK) -rpath $(usrlibdir) $(librpm_la_OBJECTS) $(librpm_la_LIBADD) + + libsql_la_SOURCES = libsql.c ++if WITH_DBSQL + libsql_la_LIBADD = librpm.la $(RPMDB_LDADD_COMMON) ++endif + + install-data-hook: + if !ENABLE_BUILD_LAFILES diff --git a/rpm-5.4.5-patchset_16004.patch b/rpm-5.4.5-patchset_16004.patch new file mode 100644 index 0000000..87711af --- /dev/null +++ b/rpm-5.4.5-patchset_16004.patch @@ -0,0 +1,405 @@ +--- rpm-5.4.5/lib/rpmds.c.16004~ 2012-02-24 14:13:37.649093023 +0100 ++++ rpm-5.4.5/lib/rpmds.c 2012-02-24 14:13:40.677094532 +0100 +@@ -2901,7 +2901,234 @@ rpmds rpmdsFromPRCO(rpmPRCO PRCO, rpmTag + * @param isElf64 is this an ELF64 symbol? + */ + #if defined(HAVE_GELF_H) && defined(HAVE_LIBELF) && !defined(__FreeBSD__) +-static char * sonameDep(/*@returned@*/ char * t, const char * s, int isElf64) ++#if defined(RPM_VENDOR_MANDRIVA) ++static char * sonameDep(/*@returned@*/ char * t, const char * s, int isElf64, int devel, int uClibc) ++ /*@modifies t @*/ ++{ ++ char *tmp = t; ++ *t = '\0'; ++ if (uClibc) ++ tmp = stpcpy(tmp, "uClibc("); ++ if (devel) { ++ tmp = stpcpy(tmp, "devel("); ++ } ++#if !defined(__alpha__) && !defined(__sun) ++ if (!isElf64) { ++ /* XXX: eehhk, would've been nice with consistency, mandriva legacy... :| */ ++ if (!devel && s[strlen(s)-1] != ')') ++ (void) stpcpy( stpcpy(tmp, s), "()(64bit)"); ++ else { ++ tmp = stpcpy(tmp, s); ++ if (devel) ++ tmp = strstr(t, ".so"); ++ tmp = stpcpy(tmp, "(64bit)"); ++ } ++ }else ++#endif ++ tmp = stpcpy(tmp, s); ++ if (devel) { ++ char *suffix = strstr(t, ".so"); ++ if (suffix) ++ tmp = suffix; ++ tmp = stpcpy(tmp, ")"); ++ } ++ if (uClibc) ++ tmp = stpcpy(tmp, ")"); ++ ++ return t; ++} ++ ++static char *find_elf_interpreter(GElf_Ehdr *ehdr, Elf *elf, char *filename) ++{ ++ FILE *fp = NULL; ++ struct stat statbuf; ++ GElf_Ehdr ehdr_mem; ++ GElf_Shdr shdr_mem, *shdr; ++ GElf_Phdr phdr_mem, *phdr; ++ GElf_Dyn dyn_mem, *dyn; ++ Elf_Data * data; ++ Elf_Scn *scn = NULL; ++ int fdno; ++ char *interp_name = NULL; ++ char *libpath = NULL; ++ int cnt; ++ int class; ++ size_t shstrndx; ++ ++ if (filename) { ++ if (!(fp = fopen(filename, "r"))) { ++ perror(filename); ++ return NULL; ++ } ++ if (fstat((fdno = fileno(fp)), &statbuf) < 0) { ++ perror(filename); ++ goto end; ++ } ++ if ((size_t) statbuf.st_size < sizeof(Elf64_Ehdr) || !S_ISREG(statbuf.st_mode)) ++ goto foo; ++ ++ (void) elf_version(EV_CURRENT); ++ elf = NULL; ++ if ((elf = elf_begin (fdno, ELF_C_READ, NULL)) == NULL ++ || elf_kind(elf) != ELF_K_ELF ++ || (ehdr = gelf_getehdr(elf, &ehdr_mem)) == NULL ++ || !(ehdr->e_type == ET_DYN || ehdr->e_type == ET_EXEC)) ++ goto end; ++ } ++foo: ++ ++ if (ehdr->e_type != ET_EXEC && ehdr->e_type != ET_DYN) { ++ fprintf(stderr, "%s: not a dynamic executable\n", filename); ++ goto end; ++ } ++ class = gelf_getclass(elf); ++ ++ for (cnt = 0; cnt < ehdr->e_phnum; cnt++) { ++ phdr = gelf_getphdr (elf, cnt, &phdr_mem); ++ if (phdr->p_type == PT_INTERP) ++ break; ++ phdr = NULL; ++ } ++ if (phdr) { ++ Elf_Data *data = NULL; ++ ++ scn = gelf_offscn (elf, phdr->p_offset); ++ shdr = gelf_getshdr(scn, &shdr_mem); ++ data = elf_getdata (scn, data); ++ interp_name = strdup(data->d_buf); ++ goto end; ++ } ++ ++ if (elf_getshdrstrndx (elf, &shstrndx) >= 0) ++ while ((scn = elf_nextscn(elf, scn)) != NULL) { ++ shdr = gelf_getshdr(scn, &shdr_mem); ++ if (shdr->sh_type == SHT_DYNAMIC) { ++ char *rpath = NULL; ++ for (cnt = 0; cnt < ehdr->e_phnum; cnt++) { ++ phdr = gelf_getphdr (elf, cnt, &phdr_mem); ++ if (phdr->p_type == PT_LOAD) ++ break; ++ } ++ ++ data = NULL; ++ while ((data = elf_getdata (scn, data)) != NULL) { ++ int dynsize = (int)(shdr->sh_size / shdr->sh_entsize)-1; ++ for (cnt = 0; cnt <= dynsize; ++cnt) { ++ dyn = gelf_getdyn (data, cnt, &dyn_mem); ++ ++ if (rpath == NULL) { ++ if (dyn->d_tag == DT_RPATH) ++ rpath = elf_strptr (elf, shdr->sh_link, dyn->d_un.d_val); ++ else if (cnt == dynsize) ++ rpath = ""; ++ if (rpath != NULL) ++ cnt = -1; ++ continue; ++ } ++ else if (rpath && DT_NEEDED == dyn->d_tag) { ++ char *tmp, *tmp2; ++ char buf[1024]; ++ char path[1024] = ""; ++ ++ libpath = elf_strptr (elf, shdr->sh_link, dyn->d_un.d_val); ++ ++ if (!libpath || !strlen(libpath)) ++ continue; ++ ++ tmp = libpath; ++ while (*tmp) { ++ if (*tmp == '/') ++ libpath = tmp + 1; ++ tmp++; ++ } ++ ++ /* If this is a fully resolved name, we don't need to modify the path */ ++ if (stat(libpath, &statbuf) == 0) ++ continue; ++ ++ tmp2 = path; ++ if (rpath && *rpath) { ++ tmp2 = stpcpy(tmp2, rpath); ++ tmp2 = stpcpy(tmp2, ":"); ++ } ++ tmp = getenv("LD_LIBRARY_PATH"); ++ if (tmp) ++ tmp2 = stpcpy(tmp2, tmp); ++ if ((rpath && *rpath) || tmp) ++ tmp2 = stpcpy(tmp2, ":"); ++ /* XXX: do better check to ensure libraries are all of the same class */ ++ tmp2 = stpcpy(tmp2, (class == ELFCLASS64) ? "/lib64" : "/lib"); ++ tmp = buf; ++ { ++ int i, count = 1; ++ char *path_n; ++ ++ /* Eliminate all double //s */ ++ path_n = path; ++ while ((path_n = strstr(path_n, "//"))) { ++ i = strlen(path_n); ++ memmove(path_n, path_n + 1, i - 1); ++ *(path_n + i - 1) = '\0'; ++ } ++ ++ /* Replace colons with zeros in path_list and count them */ ++ for (i = strlen(path); i > 0; i--) { ++ if (path[i] == ':') { ++ path[i] = 0; ++ count++; ++ } ++ } ++ path_n = path; ++ for (i = 0; i < count; i++) { ++ strcpy(tmp, path_n); ++ strcat(tmp, "/"); ++ strcat(tmp, libpath); ++ if (stat(tmp, &statbuf) == 0 && statbuf.st_mode & S_IRUSR) { ++ path[0] = '\0'; ++ break; ++ } ++ path_n += (strlen(path_n) + 1); ++ } ++ if(path[0]) ++ *tmp = '\0'; ++ } ++ libpath = buf; ++ } ++ } ++ } ++ break; ++ } ++ } ++ ++end: ++ if (fp) { ++ if (elf) (void) elf_end(elf); ++ fclose(fp); ++ } ++ if (!interp_name && libpath) ++ return find_elf_interpreter(NULL, NULL, libpath); ++ return interp_name; ++} ++ ++static int checkuClibc(GElf_Ehdr *ehdr, Elf *elf) { ++ int ret = 0; ++ char *interp = find_elf_interpreter(ehdr, elf, NULL); ++ ++ if (interp) { ++ char *tmp = basename(interp); ++ if (tmp[0] == 'l' && tmp[1] == 'd') { ++ tmp += ((tmp[2] == '3' && tmp[3] == '2') || ++ (tmp[2] == '6' && tmp[3] == '4')) ? ++ 5 : 7; ++ if (!strncasecmp(tmp, "uClibc.so", sizeof("uClibc.so")-1)) ++ ret = 1; ++ } ++ free(interp); ++ } ++ return ret; ++} ++#else ++static char * sonameDep(/*@returned@*/ char * t, const char * s, int isElf64, int devel, int uClibc) + /*@modifies t @*/ + { + *t = '\0'; +@@ -2917,6 +3144,7 @@ static char * sonameDep(/*@returned@*/ c + return t; + } + #endif ++#endif + + /*@-moduncon -noeffectuncon @*/ + int rpmdsELF(const char * fn, int flags, +@@ -2945,6 +3173,7 @@ int rpmdsELF(const char * fn, int flags, + int xx; + int isElf64; + int isDSO; ++ int isuClibc; + int gotSONAME = 0; + int gotDEBUG = 0; + int gotHASH = 0; +@@ -2987,6 +3216,11 @@ fprintf(stderr, "*** rpmdsELF(%s, %d, %p + + isElf64 = ehdr->e_ident[EI_CLASS] == ELFCLASS64; + isDSO = ehdr->e_type == ET_DYN; ++#if defined(RPM_VENDOR_MANDRIVA) ++ isuClibc = checkuClibc(ehdr, elf); ++#else ++ isuClibc = 0; ++#endif + + /*@-uniondef @*/ + scn = NULL; +@@ -3085,7 +3319,7 @@ fprintf(stderr, "*** rpmdsELF(%s, %d, %p + + /* Add next provide dependency. */ + ds = rpmdsSingle(RPMTAG_PROVIDES, +- sonameDep(t, buf, isElf64), ++ sonameDep(t, buf, isElf64, 0, isuClibc), + "", RPMSENSE_FIND_PROVIDES); + xx = add(context, ds); + (void)rpmdsFree(ds); +@@ -3138,7 +3372,7 @@ fprintf(stderr, "*** rpmdsELF(%s, %d, %p + + /* Add next require dependency. */ + ds = rpmdsSingle(RPMTAG_REQUIRENAME, +- sonameDep(t, buf, isElf64), ++ sonameDep(t, buf, isElf64, 0, isuClibc), + "", RPMSENSE_FIND_REQUIRES); + xx = add(context, ds); + (void)rpmdsFree(ds); +@@ -3180,7 +3414,7 @@ fprintf(stderr, "*** rpmdsELF(%s, %d, %p + assert(s != NULL); + buf[0] = '\0'; + ds = rpmdsSingle(RPMTAG_REQUIRENAME, +- sonameDep(buf, s, isElf64), ++ sonameDep(buf, s, isElf64, 0, isuClibc), + "", RPMSENSE_FIND_REQUIRES); + xx = add(context, ds); + (void)rpmdsFree(ds); +@@ -3195,7 +3429,7 @@ assert(s != NULL); + /* Add next provide dependency. */ + buf[0] = '\0'; + ds = rpmdsSingle(RPMTAG_PROVIDENAME, +- sonameDep(buf, s, isElf64), ++ sonameDep(buf, s, isElf64, 0, isuClibc), + "", RPMSENSE_FIND_PROVIDES); + xx = add(context, ds); + (void)rpmdsFree(ds); +@@ -3231,7 +3465,7 @@ assert(s != NULL); + /* Add next provide dependency. */ + buf[0] = '\0'; + ds = rpmdsSingle(RPMTAG_PROVIDENAME, +- sonameDep(buf, s, isElf64), "", RPMSENSE_FIND_PROVIDES); ++ sonameDep(buf, s, isElf64, 0, isuClibc), "", RPMSENSE_FIND_PROVIDES); + xx = add(context, ds); + (void)rpmdsFree(ds); + ds = NULL; +@@ -3251,46 +3485,6 @@ exit: + + + #if defined(RPM_VENDOR_MANDRIVA) +-/** +- * Return a soname dependency constructed from an elf string, Mandriva-style. +- * @retval t soname dependency +- * @param s elf string (NULL uses "") +- * @param isElf64 is this an ELF64 symbol? +- */ +-#if defined(HAVE_GELF_H) && defined(HAVE_LIBELF) && !defined(__FreeBSD__) +-static char * mdvSonameDep(/*@returned@*/ char * t, const char * s, int isElf64, int devel) +- /*@modifies t @*/ +-{ +- char *tmp = t; +- *t = '\0'; +- if (devel) { +- tmp = stpcpy(t, "devel("); +- } +-#if !defined(__alpha__) && !defined(__sun) +- if (!isElf64) { +- /* XXX: eehhk, would've been nice with consistency, mandriva legacy... :| */ +- if (!devel && s[strlen(s)-1] != ')') +- (void) stpcpy( stpcpy(tmp, s), "()(64bit)"); +- else { +- tmp = stpcpy(tmp, s); +- if (devel) +- tmp = strstr(t, ".so"); +- tmp = stpcpy(tmp, "(64bit)"); +- } +- }else +-#endif +- tmp = stpcpy(tmp, s); +- if (devel) { +- char *suffix = strstr(t, ".so"); +- if (suffix) +- tmp = suffix; +- tmp = stpcpy(tmp, ")"); +- } +- +- return t; +-} +-#endif +- + /** \ingroup rpmds + * Extract dependencies from a symlink. + * XXX Prototype added to keep GCC quiet and avoid adding a symbol. +@@ -3324,6 +3518,7 @@ int rpmdsSymlink(const char * fn, int fl + rpmds ds; + int xx; + int isElf64; ++ int isuClibc; + int gotSONAME = 0; + int skipP = (flags & RPMELF_FLAG_SKIPPROVIDES); + int skipR = (flags & RPMELF_FLAG_SKIPREQUIRES); +@@ -3378,6 +3573,11 @@ fprintf(stderr, "*** rpmdsELF(%s, %d, %p + /*@=evalorder@*/ + + isElf64 = ehdr->e_ident[EI_CLASS] == ELFCLASS64; ++#if defined(RPM_VENDOR_MANDRIVA) ++ isuClibc = checkuClibc(ehdr, elf); ++#else ++ isuClibc = 0; ++#endif + + /*@-uniondef @*/ + scn = NULL; +@@ -3413,7 +3613,7 @@ assert(s != NULL); + buf[0] = '\0'; + + for (i = 0; i < (int)(sizeof(filterRequires)/sizeof(filterRequires[0])); i++) +- if (!strncmp(s, filterRequires[i], strlen(filterRequires[i]))) ++ if (!strncmp(s, filterRequires[i], strlen(filterRequires[i])) && !isuClibc) + break; + + if (sizeof(filterRequires)/sizeof(filterRequires[0]) == i) +@@ -3428,7 +3628,7 @@ assert(s != NULL); + + if (!skipP) { + ds = rpmdsSingle(RPMTAG_PROVIDENAME, +- mdvSonameDep(buf, s, isElf64, 1), ++ sonameDep(buf, s, isElf64, 1, isuClibc), + "", RPMSENSE_FIND_PROVIDES); + xx = add(context, ds); + (void)rpmdsFree(ds); +@@ -3447,7 +3647,7 @@ exit: + if (gotSONAME && !skipR) + for (i = 0, cnt = argvCount(deps); i < cnt; i++) { + ds = rpmdsSingle(RPMTAG_REQUIRENAME, +- mdvSonameDep(buf, deps[i], isElf64, 1), ++ sonameDep(buf, deps[i], isElf64, 1, isuClibc), + "", RPMSENSE_FIND_REQUIRES); + xx = add(context, ds); + (void)rpmdsFree(ds); diff --git a/rpm-5.4.5-patchset_16005.patch b/rpm-5.4.5-patchset_16005.patch new file mode 100644 index 0000000..0c8f370 --- /dev/null +++ b/rpm-5.4.5-patchset_16005.patch @@ -0,0 +1,11 @@ +--- rpm-5.4.5/lib/rpmds.c.16005~ 2012-02-24 14:13:40.677094532 +0100 ++++ rpm-5.4.5/lib/rpmds.c 2012-02-24 14:17:17.278202493 +0100 +@@ -2913,7 +2913,7 @@ static char * sonameDep(/*@returned@*/ c + tmp = stpcpy(tmp, "devel("); + } + #if !defined(__alpha__) && !defined(__sun) +- if (!isElf64) { ++ if (isElf64) { + /* XXX: eehhk, would've been nice with consistency, mandriva legacy... :| */ + if (!devel && s[strlen(s)-1] != ')') + (void) stpcpy( stpcpy(tmp, s), "()(64bit)"); diff --git a/rpm-5.4.5-patchset_16022.patch b/rpm-5.4.5-patchset_16022.patch new file mode 100644 index 0000000..46e1559 --- /dev/null +++ b/rpm-5.4.5-patchset_16022.patch @@ -0,0 +1,222 @@ +--- rpm-5.4.5/lib/rpmds.c.16022~ 2012-02-24 14:17:17.278202493 +0100 ++++ rpm-5.4.5/lib/rpmds.c 2012-02-24 14:19:52.416279821 +0100 +@@ -2916,7 +2916,7 @@ static char * sonameDep(/*@returned@*/ c + if (isElf64) { + /* XXX: eehhk, would've been nice with consistency, mandriva legacy... :| */ + if (!devel && s[strlen(s)-1] != ')') +- (void) stpcpy( stpcpy(tmp, s), "()(64bit)"); ++ tmp = stpcpy( stpcpy(tmp, s), "()(64bit)"); + else { + tmp = stpcpy(tmp, s); + if (devel) +@@ -2995,8 +2995,11 @@ foo: + scn = gelf_offscn (elf, phdr->p_offset); + shdr = gelf_getshdr(scn, &shdr_mem); + data = elf_getdata (scn, data); +- interp_name = strdup(data->d_buf); +- goto end; ++ if (data && data->d_buf) { ++ interp_name = strdup(data->d_buf); ++ goto end; ++ } ++ /* no 'data' most likely implies that this is an elf interpreter itself */ + } + + if (elf_getshdrstrndx (elf, &shstrndx) >= 0) +@@ -3016,6 +3019,15 @@ foo: + for (cnt = 0; cnt <= dynsize; ++cnt) { + dyn = gelf_getdyn (data, cnt, &dyn_mem); + ++ /* if this an elf interpeter, the only thing we want is to find SONAME ++ * and return it ++ */ ++ if (phdr) { ++ if (dyn->d_tag != DT_SONAME) ++ continue; ++ interp_name = strdup(elf_strptr(elf, shdr->sh_link, dyn->d_un.d_val)); ++ goto end; ++ } + if (rpath == NULL) { + if (dyn->d_tag == DT_RPATH) + rpath = elf_strptr (elf, shdr->sh_link, dyn->d_un.d_val); +@@ -3025,7 +3037,7 @@ foo: + cnt = -1; + continue; + } +- else if (rpath && DT_NEEDED == dyn->d_tag) { ++ else if (rpath && dyn->d_tag == DT_NEEDED) { + char *tmp, *tmp2; + char buf[1024]; + char path[1024] = ""; +@@ -3083,6 +3095,7 @@ foo: + strcpy(tmp, path_n); + strcat(tmp, "/"); + strcat(tmp, libpath); ++ + if (stat(tmp, &statbuf) == 0 && statbuf.st_mode & S_IRUSR) { + path[0] = '\0'; + break; +@@ -3514,6 +3527,7 @@ int rpmdsSymlink(const char * fn, int fl + char buf[BUFSIZ]; + const char * s; + int is_executable; ++ int is_symlink; + const char * soname = NULL; + rpmds ds; + int xx; +@@ -3539,12 +3553,6 @@ int rpmdsSymlink(const char * fn, int fl + if ((s = strrchr(fn, '.')) && strcmp(s, ".so")) + return 0; + +- if ((lnklen = readlink(fn, path, MAXPATHLEN - 1)) == -1) { +- warn("%s", fn); +- return -1; +- } +- path[lnklen] = '\0'; +- + /*@-castfcnptr@*/ + if (_rpmds_debug < 0) + fprintf(stderr, "*** rpmdsELF(%s, %d, %p, %p)\n", fn, flags, (void *)add, context); +@@ -3555,6 +3563,62 @@ fprintf(stderr, "*** rpmdsELF(%s, %d, %p + if (lstat(fn, st) != 0) + return -1; + is_executable = (int)(st->st_mode & (S_IXUSR|S_IXGRP|S_IXOTH)); ++ is_symlink = S_ISLNK(st->st_mode); ++ } ++ ++ if (is_symlink) { ++#ifdef NOT_YET ++ if ((lnklen = readlink(fn, path, MAXPATHLEN - 1)) == -1) { ++ warn("%s", fn); ++ return -1; ++ } ++ /* XXX: unused, path should expand to absolute path... */ ++ path[lnklen] = '\0'; ++#endif ++ } else { ++ FILE *fp = fopen(fn, "r"); ++ char buf[BUFSIZ]; ++ char *in; ++ stpcpy(path, fn); ++ fn = NULL; ++ if (fp == NULL || ferror(fp)) { ++ if (fp) (void) fclose(fp); ++ return -1; ++ } ++ /* try resolve ld scripts ++ * certainly *not* state of the art, but should in practice work ++ * everywhere where relevant... ++ */ ++ while ((in = fgets(buf, sizeof(buf) - 1, fp))) { ++ in[sizeof(buf)-1] = '\0'; ++ if ((in = strstr(in, "GROUP")) && ++ (in = strchr(in, '(')) && ++ (fn = strchr(in, '/')) && ++ (in = strchr(fn, ' '))) { ++ *in = '\0'; ++ break; ++ } ++ if (ferror(fp) || feof(fp)) ++ break; ++ } ++ fclose(fp); ++ if (!fn) ++ return -1; ++ else { ++ /* XXX: try determine relative root */ ++ struct stat sb, * st = &sb; ++ ++ while((in = strrchr(path, '/'))) { ++ stpcpy(in, fn); ++ if (stat(path, st) == 0) { ++ fn = path; ++ break; ++ } ++ *in = 0; ++ } ++ if (!fn) ++ return -1; ++ } + } + + fdno = open(fn, O_RDONLY); +@@ -3644,8 +3708,10 @@ assert(s != NULL); + /*@=uniondef @*/ + + exit: +- if (gotSONAME && !skipR) ++ if (gotSONAME && !skipR) { + for (i = 0, cnt = argvCount(deps); i < cnt; i++) { ++ if (deps[i][0] == 'l' && deps[i][1] == 'd') ++ continue; + ds = rpmdsSingle(RPMTAG_REQUIRENAME, + sonameDep(buf, deps[i], isElf64, 1, isuClibc), + "", RPMSENSE_FIND_REQUIRES); +@@ -3653,6 +3719,7 @@ exit: + (void)rpmdsFree(ds); + ds = NULL; + } ++ } + + deps = argvFree(deps); + if (elf) (void) elf_end(elf); +--- rpm-5.4.5/lib/rpmfc.c.16022~ 2012-02-24 13:46:30.693282090 +0100 ++++ rpm-5.4.5/lib/rpmfc.c 2012-02-24 14:20:56.062311544 +0100 +@@ -518,7 +518,7 @@ assert(EVR != NULL); + * build/reqprov.c:addReqProv() + */ + int overlap = 0, res = 0; +- if (*depsp) { ++ if (*depsp && rpmExpandNumeric("%{?_use_internal_dependency_generator}")) { + int ix = rpmdsSearch(*depsp, ds); + if (ix >= 0) { + /* do not consider dependency ranges like R: foo > 1, R: foo < 3 +@@ -1045,6 +1045,11 @@ static int rpmfcSYMLINK(rpmfc fc) + flags |= RPMELF_FLAG_SKIPPROVIDES; + if (fc->skipReq) + flags |= RPMELF_FLAG_SKIPREQUIRES; ++ /* XXX: Remove symlink classifier from linker scripts now that we've been ++ * able to feed it to the generator. ++ */ ++ if (fc->fcolor->vals[fc->ix] == (RPMFC_WHITE|RPMFC_INCLUDE|RPMFC_TEXT|RPMFC_SYMLINK)) ++ fc->fcolor->vals[fc->ix] &= ~RPMFC_SYMLINK; + + return rpmdsSymlink(fn, flags, rpmfcMergePR, fc); + } +@@ -1362,6 +1367,36 @@ if (_rpmfc_debug) /* XXX noisy */ + + /* Add (filtered) entry to sorted class dictionary. */ + fcolor = rpmfcColoring(se); ++ ++ /* Quick&dirty hack for linker scripts replacing regular ++ * symlinks. Better *really* needs to be done ASAP. ++ */ ++#if defined(RPM_VENDOR_MANDRIVA) ++ if (fcolor == (RPMFC_WHITE|RPMFC_INCLUDE|RPMFC_TEXT)) { ++ char * fn; ++ ++ if ((fn = strrchr(s, '.')) && !strcmp(fn, ".so")) { ++ FILE * fp = fopen(s, "r"); ++ char buf[BUFSIZ]; ++ char * in; ++ if (fp == NULL || ferror(fp)) { ++ if (fp) (void) fclose(fp); ++ } ++ while ((in = fgets(buf, sizeof(buf) - 1, fp))) { ++ in[sizeof(buf)-1] = '\0'; ++ if (ferror(fp) || feof(fp)) ++ break; ++ if ((fn = strstr(in, "GROUP")) && ++ (fn = strchr(fn, '(')) && (fn = strchr(in, '/'))) { ++ fcolor |= RPMFC_SYMLINK; ++ break; ++ } ++ } ++ if (fp) ++ fclose(fp); ++ } ++ } ++#endif + xx = argiAdd(&fc->fcolor, (int)fc->ix, fcolor); + + if (fcolor != RPMFC_WHITE && (fcolor & RPMFC_INCLUDE)) 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-set-proper-file-color-for-scripts-using-env-in-shellbang.patch b/rpm-5.4.5-set-proper-file-color-for-scripts-using-env-in-shellbang.patch new file mode 100644 index 0000000..9c905ee --- /dev/null +++ b/rpm-5.4.5-set-proper-file-color-for-scripts-using-env-in-shellbang.patch @@ -0,0 +1,22 @@ +--- rpm-5.4.5/lib/rpmfc.c.env_color~ 2012-03-05 21:27:16.396663509 +0100 ++++ rpm-5.4.5/lib/rpmfc.c 2012-03-05 21:28:12.112703555 +0100 +@@ -868,7 +868,7 @@ static int rpmfcSCRIPT(rpmfc fc) + + if (!_filter_values + || (!fc->skipReq +- && !rpmfcMatchRegexps(fc->Rmires, fc->Rnmire, s, 'R'))) ++ && !rpmfcMatchRegexps(fc->Rmires, fc->Rnmire, s, 'R'))) { + if (is_executable && + strncmp(bn, "bash", sizeof("bash")-1) && + strcmp(bn, "env") && +@@ -885,6 +885,10 @@ static int rpmfcSCRIPT(rpmfc fc) + + (void)rpmdsFree(ds); + ds = NULL; ++ } else if (!strcmp(bn, "env") && strlen(se)) { ++ bn = se; ++ strsep(&se, " \t\n\r"); ++ } + } + + /* Set color based on interpreter name. */ 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.5-update-mono-dependency-generator.patch b/rpm-5.4.5-update-mono-dependency-generator.patch new file mode 100644 index 0000000..992184a --- /dev/null +++ b/rpm-5.4.5-update-mono-dependency-generator.patch @@ -0,0 +1,268 @@ +--- rpm-5.4.5/scripts/mono-find-provides.mono_deps_new~ 2007-07-13 04:57:02.000000000 +0200 ++++ rpm-5.4.5/scripts/mono-find-provides 2012-02-24 08:12:34.312909123 +0100 +@@ -7,34 +7,48 @@ + # + # (C) 2005 Novell (http://www.novell.com) + # +-# Args: builddir buildroot libdir + + IFS=$'\n' + filelist=($(grep -Ev '/usr/doc/|/usr/share/doc/')) + monolist=($(printf "%s\n" "${filelist[@]}" | egrep "\\.(exe|dll)\$")) + +-# If monodis is in the package being installed, use that one +-# This is to support building mono +-build_bindir="$2/usr/bin" +-build_libdir="$2$3" +- +-if [ -x $build_bindir/monodis ]; then +- monodis="$build_bindir/monodis" +- export LD_LIBRARY_PATH=$build_libdir${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH} +-elif [ -x /usr/bin/monodis ]; then +- monodis="/usr/bin/monodis" +-else +- exit 0; ++# Only include files with /gac/ in path ++# (Allows packages to contain private assemblies that don't conflict with other packages) ++#monolist=($(printf "%s\n" "${monolist[@]}" | egrep "/gac/")) ++# Disabled... see ChangeLog ++ ++# Set the prefix, unless it is overriden (used when building mono rpms) ++: ${prefix=/usr} ++ ++libdir=$prefix/lib64 ++bindir=$prefix/bin ++ ++# Bail out if monodis or libmono is missing ++if [ ! -x $bindir/monodis ] || [ ! -f $libdir/libmono-2.0.so.1 ] ; then ++ echo "monodis missing or unusable, exiting..." 1>&2 ++ exit 1 + fi + +-export MONO_SHARED_DIR=$1 ++ ++# set LD_LIBRARY_PATH to ensure that libmono is found ++export LD_LIBRARY_PATH=$libdir${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH} ++# and set MONO_PATH to ensure that mscorlib.dll can be found ++export MONO_PATH=$prefix/lib/mono/2.0 + + for i in "${monolist[@]}"; do +- ($monodis --assembly $i | awk ' ++ ($bindir/monodis --assembly $i | awk ' + BEGIN { LIBNAME=""; VERSION=""; } + /^Version:/ { VERSION=$2 } + /^Name:/ { LIBNAME=$2 } + END { ++ if (LIBNAME ~ /^policy/) { ++ cnt = split(LIBNAME, toks, ".") ++ VERSION=toks[2] "." toks[3] ".0.0" ++ LIBNAME="" ++ for (i=4; i<= cnt; i++) ++ LIBNAME = (LIBNAME toks[i] ".") ++ LIBNAME=substr(LIBNAME, 1, length(LIBNAME)-1) ++ } + if (VERSION && LIBNAME) + print "mono(" LIBNAME ") = " VERSION + } +--- rpm-5.4.5/scripts/mono-find-requires.mono_deps_new~ 2011-01-11 18:34:25.000000000 +0100 ++++ rpm-5.4.5/scripts/mono-find-requires 2012-02-24 08:12:34.312909123 +0100 +@@ -4,55 +4,158 @@ + # + # Authors: + # Ben Maurer (bmaurer@ximian.com) ++# Wade Berrier (wberrier@novell.com) + # +-# (C) 2005 Novell (http://www.novell.com) ++# (C) 2008 Novell (http://www.novell.com) + # +-# Args: builddir buildroot libdir + + IFS=$'\n' + filelist=($(grep -Ev '/usr/doc/|/usr/share/doc/')) + monolist=($(printf "%s\n" "${filelist[@]}" | egrep "\\.(exe|dll)\$")) + +-# If monodis is in the package being installed, use that one +-# This is to support building mono +-build_bindir="$2/usr/bin" +-build_libdir="$2$3" +- +-if [ -x $build_bindir/monodis ]; then +- monodis="$build_bindir/monodis" +- export LD_LIBRARY_PATH=$build_libdir${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH} +-elif [ -x /usr/bin/monodis ]; then +- monodis="/usr/bin/monodis" ++# parse .config files to find which native libraries to depend on ++# (target attribute must have double quotes for this to work, ie: target="file" ) ++# Add /etc/mono/config ? ++configlist=($(printf "%s\n" "${filelist[@]}" | egrep "\\.config\$")) ++ ++# Set the prefix, unless it is overriden (used when building mono rpms) ++: ${prefix=/usr} ++ ++# Can override .config scanning if specified ++: ${IGNORE_CONFIG_SCAN=0} ++ ++libdir=$prefix/lib64 ++bindir=$prefix/bin ++ ++# Bail out if monodis or libmono is missing ++if [ ! -x $bindir/monodis ] || [ ! -f $libdir/libmono-2.0.so.1 ] ; then ++ echo "monodis missing or unusable, exiting..." 1>&2 ++ exit 1 ++fi ++ ++# special case for 64bit archs ++if test "xlib64" = "xlib64" ; then ++ libext="()(64bit)" + else +- exit 0; ++ # (note, this works on ppc64 since we only have 32bit mono) ++ libext="" + fi + +-export MONO_SHARED_DIR=$1 ++# Exceptions: ++case `uname -m` in ++ # ia64 doesn't use lib64 for 'libdir' (sles 9 rpm used to provide both... no longer) ++ ia64) libext="()(64bit)" ;; ++esac ++ ++# set LD_LIBRARY_PATH to ensure that libmono is found ++export LD_LIBRARY_PATH=$libdir${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH} ++# and set MONO_PATH to ensure that mscorlib.dll can be found ++export MONO_PATH=$prefix/lib/mono/2.0 + + REQUIRES=$( + for i in "${monolist[@]}"; do +- ($monodis --assemblyref $i | awk ' ++ ($bindir/monodis --assemblyref $i | awk ' + BEGIN { START=0; LIBNAME=""; VERSION=""; } + (START==0) && /^[0-9]+: Version=/ { + START=1; + sub(/Version=/, "", $2); + VERSION=$2 + } +- ++ + (START==1) && /^\tName=/ { + sub(/Name=/, "", $1); + LIBNAME=$1 +- +- print "mono(" LIBNAME ") = " VERSION ++ # Allow rpm deps to be resolved for 1.0 profile version ++ if (VERSION=="1.0.3300.0") ++ OP=">=" ++ else ++ OP="=" ++ print "mono(" LIBNAME ") " OP " " VERSION + START=0 + } + ') 2> /dev/null + done + ) + ++if [ $IGNORE_CONFIG_SCAN -eq 0 ] ; then ++ ++rpm_config_REQUIRES=$( ++ # Parse the xml .config files to see what native binaries we call into ++ # TODO: also check monodis --moduleref ++ for i in "${configlist[@]}"; do ++ awk 'match($_, //dev/null ++ done ++) ++ ++# Resolve provides to packages, warning on missing to stderr ++config_REQUIRES=$( ++ first=1 # avoid an empty line if no .config reqs are found ++ for i in ${rpm_config_REQUIRES[@]} ; do ++ out=$(rpm -q --whatprovides --queryformat "%{NAME}\n" $i) ++ if [ $? -eq 0 ] ; then ++ if [ $first -eq 1 ] ; then ++ echo "" ++ first=0 ++ fi ++ echo $out ++ else ++ # echo to stderr ++ echo "mono-find-requires: Warning, could not find package that provides: $i" >&2 ++ fi ++ done ++) ++ ++fi ++ ++# Note about above: ++# Use to do: system("rpm -q --whatprovides --queryformat \"%{NAME}\n\" ""\""req"'$libext'""\"") ++# rpmlint prefers to have lib names instead of package names. There was a reason I was using package names but it slips me now... ++# Ah... now I remember... it's for noarch packs. The noarch packages can be built on either 32 or 64 bit... so we have to depend ++# on the package name instead. ++ + PROVIDES=$( + for i in "${monolist[@]}"; do +- ($monodis --assembly $i | awk ' ++ ($bindir/monodis --assembly $i | awk ' + BEGIN { LIBNAME=""; VERSION=""; } + /^Version:/ { VERSION=$2 } + /^Name:/ { LIBNAME=$2 } +@@ -68,9 +171,10 @@ PROVIDES=$( + # in PROVIDES. While RPM functions correctly when such deps exist, + # they make the metadata a bit bloated. + # ++# TODO: make this use the mono-find-provides script, to share code + + # Filter out dups from both lists +-REQUIRES=$(echo "$REQUIRES" | sort | uniq) ++REQUIRES=$(echo "$REQUIRES $config_REQUIRES" | sort | uniq) + PROVIDES=$(echo "$PROVIDES" | sort | uniq) + + # +@@ -80,7 +184,7 @@ UNIQ=$(echo "$PROVIDES + $REQUIRES" | sort | uniq -u) + + # +-# Of those, only chose the ones that are in REQUIRES ++# Of those, only choose the ones that are in REQUIRES + # + echo "$UNIQ +-$REQUIRES" | sort | uniq -d | grep -v "^$" ++$REQUIRES" | sort | uniq -d | grep -v '^\s*$' diff --git a/rpm-5.4.5-update-rpmfc-when-removing-overlapping-dependencies.patch b/rpm-5.4.5-update-rpmfc-when-removing-overlapping-dependencies.patch new file mode 100644 index 0000000..7e3f7f8 --- /dev/null +++ b/rpm-5.4.5-update-rpmfc-when-removing-overlapping-dependencies.patch @@ -0,0 +1,81 @@ +--- rpm-5.4.5/build/reqprov.c.fc_overlap~ 2012-03-02 13:44:16.088580152 +0100 ++++ rpm-5.4.5/build/reqprov.c 2012-03-02 13:59:18.740030066 +0100 +@@ -158,11 +158,10 @@ int addReqProv(/*@unused@*/ Spec spec, H + he->p.argv = versions; + xx = headerMod(h, he, 0); + rpmlog(RPMLOG_WARNING, "%s overlaps %s, removing %s\n", rpmdsDNEVR(old), rpmdsDNEVR(new), rpmdsDNEVR(old)); +- } else if (res < 0) { ++ } else if (res < 0) + rpmlog(RPMLOG_WARNING, "%s overlaps %s, removing %s\n", rpmdsDNEVR(new), rpmdsDNEVR(old), rpmdsDNEVR(new)); +- } else { +- rpmlog(RPMLOG_DEBUG, "%s overlaps %s, removing %s and merging flags\n", rpmdsDNEVR(new), rpmdsDNEVR(old), rpmdsDNEVR(new)); +- } ++ else if (flags[len] != Flags) ++ rpmlog(RPMLOG_WARNING, "%s overlaps %s, removing %s and merging flags\n", rpmdsDNEVR(new), rpmdsDNEVR(old), rpmdsDNEVR(new)); + + flags[len] |= newflags; + he->tag = flagtag; +--- rpm-5.4.5/lib/rpmfc.c.fc_overlap~ 2012-03-01 18:00:49.989188179 +0100 ++++ rpm-5.4.5/lib/rpmfc.c 2012-03-01 19:53:37.145561224 +0100 +@@ -518,7 +518,7 @@ assert(EVR != NULL); + * build/reqprov.c:addReqProv() + */ + int overlap = 0, res = 0; +- if (*depsp && rpmExpandNumeric("%{?_use_internal_dependency_generator}")) { ++ if (*depsp) { + int ix = rpmdsSearch(*depsp, ds); + if (ix >= 0) { + /* do not consider dependency ranges like R: foo > 1, R: foo < 3 +@@ -550,18 +550,33 @@ assert(EVR != NULL); + rEVR->Flags = (*depsp)->Flags[(*depsp)->i]; + + res = rpmEVRcompare(lEVR, rEVR); +- if (res > 0) { +- (*depsp)->Flags[(*depsp)->i] = Flags; +- (*depsp)->EVR[(*depsp)->i] = EVR; +- rpmlog(RPMLOG_WARNING, "%s overlaps %s, removing %s\n", rpmdsDNEVR(*depsp), rpmdsDNEVR(ds), rpmdsDNEVR(*depsp)); +- } else if (res < 0) { +- rpmlog(RPMLOG_WARNING, "%s overlaps %s, removing %s\n", rpmdsDNEVR(ds), rpmdsDNEVR(*depsp), rpmdsDNEVR(ds)); +- } else { +- rpmlog(RPMLOG_DEBUG, "%s overlaps %s, removing %s and merging flags\n", rpmdsDNEVR(ds), rpmdsDNEVR(*depsp), rpmdsDNEVR(ds)); ++ if (res == 0 && rpmdsFlags(*depsp) == rpmdsFlags(ds)) ++ overlap = 0; ++ else { ++ char *oldVal = xstrdup(strchr(rpmfcFileDep(buf, fc->ix, *depsp), ' ')); ++ if (res > 0) { ++ (*depsp)->Flags[(*depsp)->i] = Flags; ++ (*depsp)->EVR[(*depsp)->i] = EVR; ++ rpmlog(RPMLOG_WARNING, "%s overlaps %s, removing %s\n", rpmdsDNEVR(*depsp), rpmdsDNEVR(ds), rpmdsDNEVR(*depsp)); ++ } else if (res < 0) ++ rpmlog(RPMLOG_WARNING, "%s overlaps %s, removing %s\n", rpmdsDNEVR(ds), rpmdsDNEVR(*depsp), rpmdsDNEVR(ds)); ++ else ++ rpmlog(RPMLOG_WARNING, "%s overlaps %s, removing %s and merging flags\n", rpmdsDNEVR(ds), rpmdsDNEVR(*depsp), rpmdsDNEVR(ds)); ++ ++ (*depsp)->Flags[(*depsp)->i] |= newflags; ++ ++ /* update references in dictionary */ ++ for (ix = 0; ix < argvCount(fc->ddict); ix++) { ++ if (!strcmp(strchr(fc->ddict[ix], ' '), oldVal)) { ++ size_t fcix = atol(fc->ddict[ix]); ++ _free(fc->ddict[ix]); ++ fc->ddict[ix] = xstrdup(rpmfcFileDep(buf, fcix, *depsp)); ++ } ++ } ++ argvSort(fc->ddict, NULL); ++ free(oldVal); + } + +- (*depsp)->Flags[(*depsp)->i] |= newflags; +- + lEVR = rpmEVRfree(lEVR); + rEVR = rpmEVRfree(rEVR); + } +@@ -573,7 +588,7 @@ assert(EVR != NULL); + xx = rpmdsMerge(depsp, ds); + + /* Add to file dependencies. */ +- xx = rpmfcSaveArg(&fc->ddict, rpmfcFileDep(buf, fc->ix, ds)); ++ xx = rpmfcSaveArg(&fc->ddict, rpmfcFileDep(buf, fc->ix, overlap ? *depsp : ds)); + + (void)rpmdsFree(ds); + ds = NULL; diff --git a/rpm-5.4.7-actually-perform-linking-against-internal-lua.patch b/rpm-5.4.7-actually-perform-linking-against-internal-lua.patch new file mode 100644 index 0000000..ab88e65 --- /dev/null +++ b/rpm-5.4.7-actually-perform-linking-against-internal-lua.patch @@ -0,0 +1,36 @@ +--- rpm-5.4.7/configure.ac.lua~ 2012-03-23 20:27:46.088488158 +0100 ++++ rpm-5.4.7/configure.ac 2012-03-23 20:27:46.102488172 +0100 +@@ -1886,10 +1886,12 @@ RPM_CHECK_LIB( + esac + AC_DEFINE(WITH_LUA_INTERNAL, 1, [Define if building with internal Lua]) + AC_CONFIG_FILES([lua/Makefile]) ++ AM_CONDITIONAL(WITH_LUA_INTERNAL, [true]) + else + AC_CHECK_LIB(m, fabs) + AC_CHECK_LIB(dl, dlopen) + AC_CHECK_FUNC(dlopen) ++ AM_CONDITIONAL(WITH_LUA_INTERNAL, [false]) + fi + ], []) + AC_SUBST(WITH_LUA_SUBDIR_DEF) +--- rpm-5.4.7/rpmio/Makefile.am.lua~ 2012-03-23 20:27:46.088488158 +0100 ++++ rpm-5.4.7/rpmio/Makefile.am 2012-03-23 20:34:09.546888175 +0100 +@@ -114,13 +114,17 @@ librpmio_la_LDFLAGS += -Wl,@LD_VERSION_S + endif + librpmio_la_LIBADD = -lm + if ENABLE_BUILD_INTLIBDEP +-librpmio_la_LIBADD += ++librpmio_la_LIBADD += \ + $(top_builddir)/misc/librpmmisc.la + endif + if ENABLE_BUILD_MAXEXTLIBDEP + librpmio_la_LDFLAGS += $(LDFLAGS) + #librpmio_la_LIBADD += $(LIBS) + endif ++if WITH_LUA_INTERNAL ++librpmio_la_LIBADD += \ ++ $(top_builddir)/lua/liblua.la ++endif + #librpmio.la: $(librpmio_la_OBJECTS) $(librpmio_la_DEPENDENCIES) + # $(librpmio_la_LINK) -rpath $(usrlibdir) $(librpmio_la_OBJECTS) $(librpmio_la_LIBADD) + diff --git a/rpm-5.4.7-always-choose-equal-only-deps-when-overlapping.patch b/rpm-5.4.7-always-choose-equal-only-deps-when-overlapping.patch new file mode 100644 index 0000000..d4d7099 --- /dev/null +++ b/rpm-5.4.7-always-choose-equal-only-deps-when-overlapping.patch @@ -0,0 +1,70 @@ +--- rpm-5.4.7/build/reqprov.c.equal_overlap~ 2012-03-13 15:06:59.272736274 +0100 ++++ rpm-5.4.7/build/reqprov.c 2012-03-13 16:37:17.389488443 +0100 +@@ -128,12 +128,14 @@ int addReqProv(/*@unused@*/ Spec spec, H + #define RPMSENSE_SCRIPTS (RPMSENSE_SCRIPT_PRE|RPMSENSE_SCRIPT_POST|RPMSENSE_SCRIPT_PREUN|RPMSENSE_SCRIPT_POSTUN|RPMSENSE_SCRIPT_VERIFY) + if (!((Flags & RPMSENSE_GREATER && flags[len] & RPMSENSE_LESS) || + (Flags & RPMSENSE_LESS && flags[len] & RPMSENSE_GREATER)) && ++ /* R: foo >= 1 cannot overlap R: foo <= 1*/ ++ !(((Flags & RPMSENSE_GREATER) && (flags[len] & RPMSENSE_LESS)) || ++ ((flags[len] & RPMSENSE_GREATER) && (Flags & RPMSENSE_LESS))) && + /* do not merge script dependencies with non-script dependencies */ + !(((Flags & RPMSENSE_SCRIPTS) && !(flags[len] & RPMSENSE_SCRIPTS)) || + ((flags[len] & RPMSENSE_SCRIPTS) && !(Flags & RPMSENSE_SCRIPTS)))) + overlap = rpmdsCompare(new, old); + #undef RPMSENSE_SCRIPTS +- + if (overlap) { + EVR_t lEVR = rpmEVRnew(RPMSENSE_ANY, 0), + rEVR = rpmEVRnew(RPMSENSE_ANY, 0); +@@ -165,8 +167,11 @@ int addReqProv(/*@unused@*/ Spec spec, H + rpmlog(RPMLOG_WARNING, "%s overlaps %s, removing %s\n", rpmdsDNEVR(old), rpmdsDNEVR(new), rpmdsDNEVR(old)); + } else if (res < 0) + rpmlog(RPMLOG_WARNING, "%s overlaps %s, removing %s\n", rpmdsDNEVR(new), rpmdsDNEVR(old), rpmdsDNEVR(new)); +- else if (flags[len] != Flags) ++ else if (flags[len] != Flags) { ++ if (((Flags & RPMSENSE_SENSEMASK) == RPMSENSE_EQUAL && (flags[len] & (RPMSENSE_GREATER|RPMSENSE_LESS)))) ++ flags[len] &= ~(RPMSENSE_GREATER|RPMSENSE_LESS); + rpmlog(RPMLOG_WARNING, "%s overlaps %s, removing %s and merging flags\n", rpmdsDNEVR(new), rpmdsDNEVR(old), rpmdsDNEVR(new)); ++ } + + flags[len] |= newflags; + he->tag = flagtag; +--- rpm-5.4.7/lib/rpmfc.c.equal_overlap~ 2012-03-13 15:07:42.416787385 +0100 ++++ rpm-5.4.7/lib/rpmfc.c 2012-03-13 16:37:24.110497118 +0100 +@@ -502,11 +502,12 @@ assert(EVR != NULL); + + ds = rpmdsSingle(tagN, N, EVR, Flags); + ++ int overlap = 0; + #if defined(RPM_VENDOR_MANDRIVA) /* filter-overlapping-dependencies */ + /* XXX: should really share same code path as with what's in + * build/reqprov.c:addReqProv() + */ +- int overlap = 0, res = 0; ++ int res = 0; + if (*depsp) { + int ix = rpmdsSearch(*depsp, ds); + if (ix >= 0) { +@@ -516,6 +517,9 @@ assert(EVR != NULL); + #define RPMSENSE_SCRIPTS (RPMSENSE_SCRIPT_PRE|RPMSENSE_SCRIPT_POST|RPMSENSE_SCRIPT_PREUN|RPMSENSE_SCRIPT_POSTUN|RPMSENSE_SCRIPT_VERIFY) + if (!((Flags & RPMSENSE_GREATER && (*depsp)->Flags[(*depsp)->i] & RPMSENSE_LESS) || + (Flags & RPMSENSE_LESS && (*depsp)->Flags[(*depsp)->i] & RPMSENSE_GREATER)) && ++ /* R: foo >= 1 cannot overlap R: foo <= 1*/ ++ !(((Flags & RPMSENSE_GREATER) && ((*depsp)->Flags[(*depsp)->i] & RPMSENSE_LESS)) || ++ (((*depsp)->Flags[(*depsp)->i] & RPMSENSE_GREATER) && (Flags & RPMSENSE_LESS))) && + /* do not merge script dependencies with non-script dependencies */ + !(((Flags & RPMSENSE_SCRIPTS) && !((*depsp)->Flags[(*depsp)->i] & RPMSENSE_SCRIPTS)) || + (((*depsp)->Flags[(*depsp)->i] & RPMSENSE_SCRIPTS) && !(Flags & RPMSENSE_SCRIPTS)))) +@@ -554,8 +558,11 @@ assert(EVR != NULL); + rpmlog(RPMLOG_WARNING, "%s (%s) overlaps %s (%s), removing %s\n", rpmdsDNEVR(*depsp), ix < (int)fc->nfiles ? fc->fn[ix] + fc->brlen : "explicit", rpmdsDNEVR(ds), fc->fn[fc->ix] + fc->brlen, rpmdsDNEVR(*depsp)); + } else if (res < 0) + rpmlog(RPMLOG_WARNING, "%s (%s) overlaps %s (%s), removing %s\n", rpmdsDNEVR(ds), fc->fn[fc->ix] + fc->brlen, rpmdsDNEVR(*depsp), ix < (int)fc->nfiles ? fc->fn[ix] + fc->brlen : "explicit", rpmdsDNEVR(ds)); +- else ++ else if ((*depsp)->Flags[(*depsp)->i] != Flags) { ++ if (((Flags & RPMSENSE_SENSEMASK) == RPMSENSE_EQUAL) && ((*depsp)->Flags[(*depsp)->i] & (RPMSENSE_GREATER|RPMSENSE_LESS))) ++ (*depsp)->Flags[(*depsp)->i] &= ~(RPMSENSE_GREATER|RPMSENSE_LESS); + rpmlog(RPMLOG_WARNING, "%s (%s) overlaps %s (%s), removing %s and merging flags\n", rpmdsDNEVR(ds), fc->fn[fc->ix] + fc->brlen, rpmdsDNEVR(*depsp), ix < (int)fc->nfiles ? fc->fn[ix] + fc->brlen : "explicit", rpmdsDNEVR(ds)); ++ } + + (*depsp)->Flags[(*depsp)->i] |= newflags; + diff --git a/rpm-5.4.7-change-to-debuginfo-suffix.patch b/rpm-5.4.7-change-to-debuginfo-suffix.patch new file mode 100644 index 0000000..1bfd400 --- /dev/null +++ b/rpm-5.4.7-change-to-debuginfo-suffix.patch @@ -0,0 +1,21 @@ +--- rpm-5.4.7/macros/macros.in.debuginfo~ 2012-03-16 18:15:56.639500578 +0100 ++++ rpm-5.4.7/macros/macros.in 2012-03-16 18:15:58.278502754 +0100 +@@ -154,15 +154,15 @@ + %debug_package \ + %ifnarch noarch\ + %global __debug_package 1\ +-%package debug\ ++%package debuginfo\ + Summary: Debug information for package %{name}\ + Group: Development/Debug\ + AutoReqProv: 0\ +-%description debug\ ++%description debuginfo\ + This package provides debug information for package %{name}.\ + Debug information is useful when developing applications that use this\ + package or when debugging this package.\ +-%files debug -f debugfiles.list\ ++%files debuginfo -f debugfiles.list\ + %defattr(-,root,root)\ + %endif\ + %{nil} 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-dont-generate-soname-provides-for-dsos-with-no-soname.patch b/rpm-5.4.7-dont-generate-soname-provides-for-dsos-with-no-soname.patch new file mode 100644 index 0000000..700606a --- /dev/null +++ b/rpm-5.4.7-dont-generate-soname-provides-for-dsos-with-no-soname.patch @@ -0,0 +1,18 @@ +--- rpm-5.4.7/lib/rpmds.c.soname_only~ 2012-03-10 21:25:25.174794826 +0100 ++++ rpm-5.4.7/lib/rpmds.c 2012-03-10 21:25:42.414809878 +0100 +@@ -3472,6 +3472,7 @@ assert(s != NULL); + } + #endif + ++#if !defined(RPM_VENDOR_MANDRIVA) + /* For DSO's, provide the basename of the file if DT_SONAME not found. */ + if (!skipP && isDSO && !gotDEBUG && !gotSONAME) { + s = strrchr(fn, '/'); +@@ -3489,6 +3490,7 @@ assert(s != NULL); + (void)rpmdsFree(ds); + ds = NULL; + } ++#endif + + exit: + soname = _free(soname); diff --git a/rpm-5.4.7-dont-try-generate-rpmfc-dependencies-from-doc-files.patch b/rpm-5.4.7-dont-try-generate-rpmfc-dependencies-from-doc-files.patch new file mode 100644 index 0000000..f8aa902 --- /dev/null +++ b/rpm-5.4.7-dont-try-generate-rpmfc-dependencies-from-doc-files.patch @@ -0,0 +1,49 @@ +--- rpm-5.4.7/lib/rpmfc.c.skip_doc~ 2012-03-10 22:02:07.587592446 +0100 ++++ rpm-5.4.7/lib/rpmfc.c 2012-03-10 22:08:33.799856086 +0100 +@@ -813,7 +813,15 @@ static int rpmfcSCRIPT(rpmfc fc) + int i; + int is_executable; + int xx; +- const char * defaultdocdir = NULL; ++ ++ { const char * defaultdocdir = rpmExpand("%{?_defaultdocdir}", NULL); ++ xx = (defaultdocdir == NULL || *defaultdocdir == '\0'); ++ defaultdocdir = strdup("/usr/share/doc"); ++ xx = !strncmp(fn, xx ? "/usr/share/doc" : defaultdocdir, xx ? sizeof("/usr/share/doc")-1 : strlen(defaultdocdir)); ++ defaultdocdir = _free(defaultdocdir) ; ++ if (xx) ++ return 0; ++ } + + /* Extract dependencies only from files with executable bit set. */ + { struct stat sb, * st = &sb; +@@ -899,16 +907,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"); +@@ -997,8 +999,6 @@ static int rpmfcSCRIPT(rpmfc fc) + #endif + } + +-/*@-observertrans@*/ +- defaultdocdir = _free(defaultdocdir) ; + /*@=observertrans@*/ + return 0; + } 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-generate-devel-provides-outside-of-libdirs.patch b/rpm-5.4.7-generate-devel-provides-outside-of-libdirs.patch new file mode 100644 index 0000000..5f188d6 --- /dev/null +++ b/rpm-5.4.7-generate-devel-provides-outside-of-libdirs.patch @@ -0,0 +1,36 @@ +--- rpm-5.4.7/lib/rpmds.c.devel_prov~ 2012-03-23 04:36:02.441671158 +0100 ++++ rpm-5.4.7/lib/rpmds.c 2012-03-23 04:36:06.210678312 +0100 +@@ -3533,7 +3533,7 @@ int rpmdsSymlink(const char * fn, int fl + int cnt; + int i; + char buf[BUFSIZ]; +- const char * s; ++ const char * s, * bn; + int is_executable; + int is_symlink; + const char * soname = NULL; +@@ -3558,13 +3558,22 @@ int rpmdsSymlink(const char * fn, int fl + ARGV_t deps = NULL; + miRE mire; + ++ bn = basename((char*)fn); ++ mire = mireNew(RPMMIRE_REGEX, RPMTAG_FILEPATHS); ++ if (!mireRegcomp(mire, "^lib.*\\.so$")) ++ xx = mireRegexec(mire, bn, (size_t) 0); ++ mire = mireFree(mire); ++ if (xx < 0) ++ return 0; ++ + mire = mireNew(RPMMIRE_REGEX, RPMTAG_FILEPATHS); + /* Filename must end with ".so" to be devel(...) dependency. */ +- if (!mireRegcomp(mire, "^.*/(|usr/)lib(|64)/lib.*\\.so$")) ++ if (!mireRegcomp(mire, "^.*/(usr/)?lib(64)?/lib.*\\.so$")) + xx = mireRegexec(mire, fn, (size_t) 0); + mire = mireFree(mire); ++ /* if outside of standard library dirs, we refuse to generate requires */ + if (xx < 0) +- return 0; ++ skipR = 1; + + /*@-castfcnptr@*/ + if (_rpmds_debug < 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..b6c383f --- /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) ++ } 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 + } + + /*@-observertrans@*/ +@@ -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) ++ } 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-mono-find-requires-strip-newlines.patch b/rpm-5.4.7-mono-find-requires-strip-newlines.patch new file mode 100644 index 0000000..a42e959 --- /dev/null +++ b/rpm-5.4.7-mono-find-requires-strip-newlines.patch @@ -0,0 +1,11 @@ +--- rpm-5.4.7/scripts/mono-find-requires.newline~ 2012-04-25 11:18:24.291758077 +0200 ++++ rpm-5.4.7/scripts/mono-find-requires 2012-04-25 11:19:20.977097581 +0200 +@@ -174,7 +174,7 @@ PROVIDES=$( + # TODO: make this use the mono-find-provides script, to share code + + # Filter out dups from both lists +-REQUIRES=$(echo "$REQUIRES $config_REQUIRES" | sort | uniq) ++REQUIRES=$(echo "$REQUIRES${config_REQUIRES: $config_REQUIRES}" | sort | uniq) + PROVIDES=$(echo "$PROVIDES" | sort | uniq) + + # 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-only-generate-devel-deps-for-symlinks-start-with-lib.patch b/rpm-5.4.7-only-generate-devel-deps-for-symlinks-start-with-lib.patch new file mode 100644 index 0000000..850bdba --- /dev/null +++ b/rpm-5.4.7-only-generate-devel-deps-for-symlinks-start-with-lib.patch @@ -0,0 +1,44 @@ +--- rpm-5.4.7/lib/rpmds.c.req_devel~ 2012-03-16 19:48:32.709515656 +0100 ++++ rpm-5.4.7/lib/rpmds.c 2012-03-16 19:53:14.181863892 +0100 +@@ -3547,10 +3547,15 @@ int rpmdsSymlink(const char * fn, int fl + "libnss_hesiod.so", "libnss_nis.so", "libnss_nisplus.so", "libpthread.so", + "libresolv.so", "librt.so", "libutil.so", "libthread_db.so"}; + ARGV_t deps = NULL; +- ++ miRE mire; ++ ++ mire = mireNew(RPMMIRE_REGEX, RPMTAG_FILEPATHS); + /* Filename must end with ".so" to be devel(...) dependency. */ +- if ((s = strrchr(fn, '.')) && strcmp(s, ".so")) +- return 0; ++ if (!mireRegcomp(mire, "^.*/(|usr/)lib(|64)/lib.*\\.so$")) ++ xx = mireRegexec(mire, fn, (size_t) 0); ++ mire = mireFree(mire); ++ if (xx < 0) ++ return 0; + + /*@-castfcnptr@*/ + if (_rpmds_debug < 0) +@@ -3566,14 +3571,20 @@ fprintf(stderr, "*** rpmdsELF(%s, %d, %p + } + + if (is_symlink) { +-#ifdef NOT_YET ++ const char *bn; + if ((lnklen = readlink(fn, path, MAXPATHLEN - 1)) == -1) { + warn("%s", fn); + return -1; + } + /* XXX: unused, path should expand to absolute path... */ + path[lnklen] = '\0'; +-#endif ++ ++ /* if filename of library linked to isn't consistent with symlink ++ * filename, then we skip it ++ */ ++ bn = basename((char*)fn); ++ if (strncmp(bn, basename(path), (size_t)(strstr(bn, ".so") - bn))) ++ return 0; + } else { + FILE *fp = fopen(fn, "r"); + char buf[BUFSIZ]; diff --git a/rpm-5.4.7-only-generate-ruby-and-python-deps-for-executables-and-modules.patch b/rpm-5.4.7-only-generate-ruby-and-python-deps-for-executables-and-modules.patch new file mode 100644 index 0000000..5f0de46 --- /dev/null +++ b/rpm-5.4.7-only-generate-ruby-and-python-deps-for-executables-and-modules.patch @@ -0,0 +1,50 @@ +--- rpm-5.4.7/lib/rpmfc.c.exec_modules~ 2012-03-10 20:05:50.749063779 +0100 ++++ rpm-5.4.7/lib/rpmfc.c 2012-03-10 21:05:28.877795213 +0100 +@@ -912,10 +912,9 @@ static int rpmfcSCRIPT(rpmfc fc) + xx = rpmfcHelper(fc, 'R', "perl"); + } else + if (fc->fcolor->vals[fc->ix] & RPMFC_PYTHON) { +- xx = rpmfcHelper(fc, 'P', "python"); +-#ifdef NOTYET +- if (is_executable) +-#endif ++ if (fc->fcolor->vals[fc->ix] & RPMFC_MODULE && !(fc->fcolor->vals[fc->ix] & RPMFC_SCRIPT)) ++ xx = rpmfcHelper(fc, 'P', "python"); ++ if (is_executable || (fc->fcolor->vals[fc->ix] & RPMFC_MODULE)) + xx = rpmfcHelper(fc, 'R', "python"); + } else + if (fc->fcolor->vals[fc->ix] & RPMFC_LIBTOOL) { +@@ -952,10 +951,9 @@ static int rpmfcSCRIPT(rpmfc fc) + xx = rpmfcHelper(fc, 'R', "mono"); + } else + if (fc->fcolor->vals[fc->ix] & RPMFC_RUBY) { +- xx = rpmfcHelper(fc, 'P', "ruby"); +-#ifdef NOTYET +- if (is_executable) +-#endif ++ if (fc->fcolor->vals[fc->ix] & RPMFC_MODULE) ++ xx = rpmfcHelper(fc, 'P', "ruby"); ++ if (is_executable || (fc->fcolor->vals[fc->ix] & RPMFC_MODULE)) + xx = rpmfcHelper(fc, 'R', "ruby"); + } else + if (fc->fcolor->vals[fc->ix] & RPMFC_FONT) { +@@ -1192,8 +1190,18 @@ assert(fc->fn != NULL); + if ((fn[0] == '3' && fn[1] == '2') || + (fn[0] == '6' && fn[1] == '4')) + fn += 2; +- if (!strncmp(fn, "/python", sizeof("/python")-1)) ++ if (!strncmp(fn, "/python", sizeof("/python")-1)) { + fc->fcolor->vals[fc->ix] |= RPMFC_PYTHON; ++ if (strstr(fn, "site-packages")) ++ fc->fcolor->vals[fc->ix] |= RPMFC_MODULE; ++ else if (strstr(fn, ".egg")) { ++ miRE mire = mireNew(RPMMIRE_REGEX, RPMTAG_FILEPATHS); ++ if (!mireRegcomp(mire, ".*/.*\\.egg(|-info|-link)(|/.*)$")) ++ if (mireRegexec(mire, fc->fn[fc->ix], (size_t) 0) >= 0) ++ fc->fcolor->vals[fc->ix] |= RPMFC_MODULE; ++ mire = mireFree(mire); ++ } ++ } + else if (!strncmp(fn, "/ruby", sizeof("/ruby")-1)) { + fc->fcolor->vals[fc->ix] |= RPMFC_RUBY; + if ((fn = strstr(fn, "/specifications/")) && diff --git a/rpm-5.4.7-print-name-of-files-removed-dependencies-are-generated-from.patch b/rpm-5.4.7-print-name-of-files-removed-dependencies-are-generated-from.patch new file mode 100644 index 0000000..ce67e39 --- /dev/null +++ b/rpm-5.4.7-print-name-of-files-removed-dependencies-are-generated-from.patch @@ -0,0 +1,17 @@ +--- rpm-5.4.7/lib/rpmfc.c.filedep_origins~ 2012-03-13 08:43:44.548981329 +0100 ++++ rpm-5.4.7/lib/rpmfc.c 2012-03-13 08:43:48.658984801 +0100 +@@ -551,11 +551,11 @@ assert(EVR != NULL); + if (res > 0) { + (*depsp)->Flags[(*depsp)->i] = Flags; + (*depsp)->EVR[(*depsp)->i] = EVR; +- rpmlog(RPMLOG_WARNING, "%s overlaps %s, removing %s\n", rpmdsDNEVR(*depsp), rpmdsDNEVR(ds), rpmdsDNEVR(*depsp)); ++ rpmlog(RPMLOG_WARNING, "%s (%s) overlaps %s (%s), removing %s\n", rpmdsDNEVR(*depsp), ix < (int)fc->nfiles ? fc->fn[ix] + fc->brlen : "explicit", rpmdsDNEVR(ds), fc->fn[fc->ix] + fc->brlen, rpmdsDNEVR(*depsp)); + } else if (res < 0) +- rpmlog(RPMLOG_WARNING, "%s overlaps %s, removing %s\n", rpmdsDNEVR(ds), rpmdsDNEVR(*depsp), rpmdsDNEVR(ds)); ++ rpmlog(RPMLOG_WARNING, "%s (%s) overlaps %s (%s), removing %s\n", rpmdsDNEVR(ds), fc->fn[fc->ix] + fc->brlen, rpmdsDNEVR(*depsp), ix < (int)fc->nfiles ? fc->fn[ix] + fc->brlen : "explicit", rpmdsDNEVR(ds)); + else +- rpmlog(RPMLOG_WARNING, "%s overlaps %s, removing %s and merging flags\n", rpmdsDNEVR(ds), rpmdsDNEVR(*depsp), rpmdsDNEVR(ds)); ++ rpmlog(RPMLOG_WARNING, "%s (%s) overlaps %s (%s), removing %s and merging flags\n", rpmdsDNEVR(ds), fc->fn[fc->ix] + fc->brlen, rpmdsDNEVR(*depsp), ix < (int)fc->nfiles ? fc->fn[ix] + fc->brlen : "explicit", rpmdsDNEVR(ds)); + + (*depsp)->Flags[(*depsp)->i] |= newflags; + diff --git a/rpm-5.4.7-rpmds-dont-try-fopen-empty-filenames.patch b/rpm-5.4.7-rpmds-dont-try-fopen-empty-filenames.patch new file mode 100644 index 0000000..3ce9f0b --- /dev/null +++ b/rpm-5.4.7-rpmds-dont-try-fopen-empty-filenames.patch @@ -0,0 +1,11 @@ +--- rpm-5.4.7/lib/rpmds.c.ds_stat~ 2012-03-13 19:42:38.344711524 +0100 ++++ rpm-5.4.7/lib/rpmds.c 2012-03-13 19:42:47.633723723 +0100 +@@ -2961,6 +2961,8 @@ static char *find_elf_interpreter(GElf_E + size_t shstrndx; + + if (filename) { ++ if (!*filename) ++ return NULL; + if (!(fp = fopen(filename, "r"))) { + perror(filename); + return NULL; 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.7-rpmfc-strdup-EVR-in-overlap-removal.patch b/rpm-5.4.7-rpmfc-strdup-EVR-in-overlap-removal.patch new file mode 100644 index 0000000..5c26d39 --- /dev/null +++ b/rpm-5.4.7-rpmfc-strdup-EVR-in-overlap-removal.patch @@ -0,0 +1,11 @@ +--- rpm-5.4.7/lib/rpmfc.c.strdup~ 2012-03-13 18:49:34.187095285 +0100 ++++ rpm-5.4.7/lib/rpmfc.c 2012-03-13 18:49:49.438118160 +0100 +@@ -554,7 +554,7 @@ assert(EVR != NULL); + char *oldVal = xstrdup(strchr(rpmfcFileDep(buf, fc->ix, *depsp), ' ')); + if (res > 0) { + (*depsp)->Flags[(*depsp)->i] = Flags; +- (*depsp)->EVR[(*depsp)->i] = EVR; ++ (*depsp)->EVR[(*depsp)->i] = strdup(EVR); + rpmlog(RPMLOG_WARNING, "%s (%s) overlaps %s (%s), removing %s\n", rpmdsDNEVR(*depsp), ix < (int)fc->nfiles ? fc->fn[ix] + fc->brlen : "explicit", rpmdsDNEVR(ds), fc->fn[fc->ix] + fc->brlen, rpmdsDNEVR(*depsp)); + } else if (res < 0) + rpmlog(RPMLOG_WARNING, "%s (%s) overlaps %s (%s), removing %s\n", rpmdsDNEVR(ds), fc->fn[fc->ix] + fc->brlen, rpmdsDNEVR(*depsp), ix < (int)fc->nfiles ? fc->fn[ix] + fc->brlen : "explicit", rpmdsDNEVR(ds)); diff --git a/rpm-5.4.7-rpmv3-support.patch b/rpm-5.4.7-rpmv3-support.patch new file mode 100644 index 0000000..b24a601 --- /dev/null +++ b/rpm-5.4.7-rpmv3-support.patch @@ -0,0 +1,370 @@ +--- rpm-5.4.7/rpmdb/package.c.rpmv3~ 2012-04-12 13:08:29.214493302 +0200 ++++ rpm-5.4.7/rpmdb/package.c 2012-04-12 16:33:05.021039135 +0200 +@@ -19,6 +19,8 @@ + + #include "rpmts.h" + ++#define _RPMEVR_INTERNAL ++#include + #include "debug.h" + + #define alloca_strdup(_s) strcpy(alloca(strlen(_s)+1), (_s)) +@@ -79,6 +81,349 @@ static int pgpStashKeyid(pgpDig dig) + } + #endif + ++/*@-boundsread@*/ ++static int dncmp(const void * a, const void * b) ++ /*@*/ ++{ ++ const char *const * first = a; ++ const char *const * second = b; ++ return strcmp(*first, *second); ++} ++/*@=boundsread@*/ ++ ++/*@-bounds@*/ ++/** ++ * Convert absolute path tag to (dirname,basename,dirindex) tags. ++ * @param h header ++ */ ++static void compressFilelist(Header h) ++ /*@modifies h @*/ ++{ ++ HE_t he = memset(alloca(sizeof(*he)), 0, sizeof(*he)); ++ ++ char ** fileNames; ++ const char ** dirNames; ++ const char ** baseNames; ++ int32_t * dirIndexes; ++ rpmTagType fnt; ++ int count; ++ int i, xx; ++ int dirIndex = -1; ++ ++ /* ++ * This assumes the file list is already sorted, and begins with a ++ * single '/'. That assumption isn't critical, but it makes things go ++ * a bit faster. ++ */ ++ ++ if (headerIsEntry(h, RPMTAG_DIRNAMES)) { ++ he->tag = RPMTAG_OLDFILENAMES; ++ headerDel(h, he, 0); ++ return; /* Already converted. */ ++ } ++ ++ he->tag = RPMTAG_OLDFILENAMES; ++ if (!headerGet(h, he, 0)) ++ return; ++ ++ fileNames = he->p.ptr; ++ if (he->c <= 0) ++ return; ++ count = he->c; ++ ++ dirNames = alloca(sizeof(*dirNames) * count); /* worst case */ ++ baseNames = alloca(sizeof(*dirNames) * count); ++ dirIndexes = alloca(sizeof(*dirIndexes) * count); ++ ++ if (fileNames[0][0] != '/') { ++ /* HACK. Source RPM, so just do things differently */ ++ dirIndex = 0; ++ dirNames[dirIndex] = ""; ++ for (i = 0; i < count; i++) { ++ dirIndexes[i] = dirIndex; ++ baseNames[i] = fileNames[i]; ++ } ++ goto exit; ++ } ++ ++ /*@-branchstate@*/ ++ for (i = 0; i < count; i++) { ++ const char ** needle; ++ char savechar; ++ char * baseName; ++ int len; ++ ++ if (fileNames[i] == NULL) /* XXX can't happen */ ++ continue; ++ baseName = strrchr(fileNames[i], '/') + 1; ++ len = baseName - fileNames[i]; ++ needle = dirNames; ++ savechar = *baseName; ++ *baseName = '\0'; ++/*@-compdef@*/ ++ if (dirIndex < 0 || ++ (needle = bsearch(&fileNames[i], dirNames, dirIndex + 1, sizeof(dirNames[0]), dncmp)) == NULL) { ++ char *s = alloca(len + 1); ++ memcpy(s, fileNames[i], len + 1); ++ s[len] = '\0'; ++ dirIndexes[i] = ++dirIndex; ++ dirNames[dirIndex] = s; ++ } else ++ dirIndexes[i] = needle - dirNames; ++/*@=compdef@*/ ++ ++ *baseName = savechar; ++ baseNames[i] = baseName; ++ } ++ /*@=branchstate@*/ ++ ++exit: ++ if (count > 0) { ++ ++ he->tag = RPMTAG_DIRINDEXES; ++ if (headerGet(h, he, 0)) ++ dirIndexes = he->p.ptr; ++ he->tag = RPMTAG_BASENAMES; ++ if (headerGet(h, he, 0)) ++ baseNames = he->p.ptr; ++ he->tag = RPMTAG_DIRNAMES; ++ if (headerGet(h, he, 0)) ++ dirNames = he->p.ptr; ++ ++ he->tag = RPMTAG_DIRINDEXES; ++ he->t = RPM_UINT32_TYPE; ++ he->p.ptr = dirIndexes; ++ he->c = count; ++ headerPut(h, he, 0); ++ ++ he->tag = RPMTAG_BASENAMES; ++ he->t = RPM_STRING_ARRAY_TYPE; ++ he->p.ptr = baseNames; ++ he->c = count; ++ headerPut(h, he, 0); ++ ++ he->tag = RPMTAG_DIRNAMES; ++ he->t = RPM_STRING_ARRAY_TYPE; ++ he->p.ptr = dirNames; ++ he->c = dirIndex +1; ++ headerPut(h,he,0); ++ } ++ ++ fileNames = _free(fileNames); ++ ++ he->tag = RPMTAG_OLDFILENAMES; ++ headerDel(h, he, 0); ++ ++} ++/*@=bounds@*/ ++ ++/* copied verbatim from build/pack.c */ ++static void providePackageNVR(Header h) ++{ ++ HE_t he = memset(alloca(sizeof(*he)), 0, sizeof(*he)); ++ const char *N, *V, *R; ++#ifdef RPM_VENDOR_MANDRIVA ++ const char *D; ++ int gotD; ++#endif ++ rpmuint32_t E; ++ int gotE; ++ const char *pEVR; ++ char *p; ++ rpmuint32_t pFlags = RPMSENSE_EQUAL; ++ const char ** provides = NULL; ++ const char ** providesEVR = NULL; ++ rpmuint32_t * provideFlags = NULL; ++ int providesCount; ++ int bingo = 1; ++ size_t nb; ++ int xx; ++ int i; ++ ++ /* Generate provides for this package N-V-R. */ ++ xx = headerNEVRA(h, &N, NULL, &V, &R, NULL); ++ if (!(N && V && R)) ++ return; ++ ++ nb = 21 + strlen(V) + 1 + strlen(R) + 1; ++#ifdef RPM_VENDOR_MANDRIVA ++ he->tag = RPMTAG_DISTEPOCH; ++ gotD = headerGet(h, he, 0); ++ D = (he->p.str ? he->p.str : NULL); ++ nb += (gotD ? strlen(D) + 1 : 0); ++#endif ++ pEVR = p = alloca(nb); ++ *p = '\0'; ++ he->tag = RPMTAG_EPOCH; ++ gotE = headerGet(h, he, 0); ++ E = (he->p.ui32p ? he->p.ui32p[0] : 0); ++ he->p.ptr = _free(he->p.ptr); ++ if (gotE) { ++ sprintf(p, "%d:", E); ++ p += strlen(p); ++ } ++ p = stpcpy( stpcpy( stpcpy(p, V) , "-") , R); ++#ifdef RPM_VENDOR_MANDRIVA ++ if (gotD) { ++ p = stpcpy( stpcpy( p, ":"), D); ++ D = _free(D); ++ //(void) rpmlibNeedsFeature(h, "DistEpoch", "5.4.7-1"); ++ } ++#endif ++ V = _free(V); ++ R = _free(R); ++ ++ /* ++ * Rpm prior to 3.0.3 does not have versioned provides. ++ * If no provides at all are available, we can just add. ++ */ ++ he->tag = RPMTAG_PROVIDENAME; ++/*@-nullstate@*/ ++ xx = headerGet(h, he, 0); ++/*@=nullstate@*/ ++ provides = he->p.argv; ++ providesCount = he->c; ++ if (!xx) ++ goto exit; ++ ++ /* ++ * Otherwise, fill in entries on legacy packages. ++ */ ++ he->tag = RPMTAG_PROVIDEVERSION; ++/*@-nullstate@*/ ++ xx = headerGet(h, he, 0); ++/*@=nullstate@*/ ++ providesEVR = he->p.argv; ++ if (!xx) { ++ for (i = 0; i < providesCount; i++) { ++ /*@observer@*/ ++ static const char * vdummy = ""; ++ static rpmsenseFlags fdummy = RPMSENSE_ANY; ++ ++ he->tag = RPMTAG_PROVIDEVERSION; ++ he->t = RPM_STRING_ARRAY_TYPE; ++ he->p.argv = &vdummy; ++ he->c = 1; ++ he->append = 1; ++/*@-nullstate@*/ ++ xx = headerPut(h, he, 0); ++/*@=nullstate@*/ ++ he->append = 0; ++ ++ he->tag = RPMTAG_PROVIDEFLAGS; ++ he->t = RPM_UINT32_TYPE; ++ he->p.ui32p = (void *) &fdummy; ++ he->c = 1; ++ he->append = 1; ++/*@-nullstate@*/ ++ xx = headerPut(h, he, 0); ++/*@=nullstate@*/ ++ he->append = 0; ++ } ++ goto exit; ++ } ++ ++ he->tag = RPMTAG_PROVIDEFLAGS; ++/*@-nullstate@*/ ++ xx = headerGet(h, he, 0); ++/*@=nullstate@*/ ++ provideFlags = he->p.ui32p; ++ ++ /*@-nullderef@*/ /* LCL: providesEVR is not NULL */ ++ if (provides && providesEVR && provideFlags) ++ for (i = 0; i < providesCount; i++) { ++ if (!(provides[i] && providesEVR[i])) ++ continue; ++ if (!(provideFlags[i] == RPMSENSE_EQUAL && ++ !strcmp(N, provides[i]) && !strcmp(pEVR, providesEVR[i]))) ++ continue; ++ bingo = 0; ++ break; ++ } ++ /*@=nullderef@*/ ++ ++exit: ++/*@-usereleased@*/ ++ provides = _free(provides); ++ providesEVR = _free(providesEVR); ++ provideFlags = _free(provideFlags); ++/*@=usereleased@*/ ++ ++ if (bingo) { ++ he->tag = RPMTAG_PROVIDENAME; ++ he->t = RPM_STRING_ARRAY_TYPE; ++ he->p.argv = &N; ++ he->c = 1; ++ he->append = 1; ++/*@-nullstate@*/ ++ xx = headerPut(h, he, 0); ++/*@=nullstate@*/ ++ he->append = 0; ++ ++ /* XXX succeeds only at allocating the necessary appended space, ++ * not copying to it..? */ ++ xx = headerGet(h, he, 0); ++ he->p.argv[providesCount] = N; ++ xx = headerPut(h, he, 0); ++ _free(he->p.ptr); ++ ++ he->tag = RPMTAG_PROVIDEVERSION; ++ he->t = RPM_STRING_ARRAY_TYPE; ++ he->p.argv = &pEVR; ++ he->c = 1; ++ he->append = 1; ++/*@-nullstate@*/ ++ xx = headerPut(h, he, 0); ++/*@=nullstate@*/ ++ he->append = 0; ++ ++ he->tag = RPMTAG_PROVIDEFLAGS; ++ he->t = RPM_UINT32_TYPE; ++ he->p.ui32p = &pFlags; ++ he->c = 1; ++ he->append = 1; ++/*@-nullstate@*/ ++ xx = headerPut(h, he, 0); ++/*@=nullstate@*/ ++ he->append = 0; ++ } ++ N = _free(N); ++} ++ ++static void add_RPMTAG_SOURCERPM(Header h) ++{ ++ if (!headerIsEntry(h, RPMTAG_SOURCERPM) && !headerIsEntry(h, RPMTAG_SOURCEPACKAGE)) { ++ /* we have no way to know if this is a srpm or an rpm with no SOURCERPM */ ++ /* but since this is an old v3 rpm, we suppose it's not a srpm */ ++ HE_t he = (HE_t)memset(alloca(sizeof(*he)), 0, sizeof(*he)); ++ ++ he->tag = RPMTAG_SOURCERPM; ++ he->t = RPM_STRING_TYPE; ++ he->p.str = "\0"; ++ he->c = 1; ++ headerPut(h, he, 0); ++ } ++} ++ ++/* rpm v3 compatibility */ ++static void rpm3to4(Header h) { ++ const char * rpmversion = NULL; ++ HE_t he = memset(alloca(sizeof(*he)), 0, sizeof(*he)); ++ ++ he->tag = RPMTAG_RPMVERSION; ++ if (headerGet(h, he, 0)) { ++ rpmversion = he->p.str; ++ } ++ ++ if ((!rpmversion) || rpmversion[0] < '4') { ++ add_RPMTAG_SOURCERPM(h); ++ providePackageNVR(h); ++ compressFilelist(h); ++ } ++ rpmversion = _free(rpmversion); ++ return; ++} ++ + /*@-mods@*/ + rpmRC rpmReadPackageFile(rpmts ts, FD_t fd, const char * fn, Header * hdrp) + { +@@ -383,6 +728,8 @@ exit: + /* Append (and remap) signature tags to the metadata. */ + headerMergeLegacySigs(h, sigh); + ++ rpm3to4(h); ++ + /* Bump reference count for return. */ + *hdrp = headerLink(h); + } diff --git a/rpm-5.4.7-trigtrans.patch b/rpm-5.4.7-trigtrans.patch new file mode 100644 index 0000000..05f1226 --- /dev/null +++ b/rpm-5.4.7-trigtrans.patch @@ -0,0 +1,839 @@ +--- rpm-5.4.7/build/parseReqs.c.trigtrag~ 2012-04-12 16:47:14.333285374 +0200 ++++ rpm-5.4.7/build/parseReqs.c 2012-04-12 16:47:14.371285424 +0200 +@@ -66,6 +66,24 @@ rpmRC parseRCPOT(Spec spec, Package pkg, + tagflags |= RPMSENSE_TRIGGERUN; + h = pkg->header; + break; ++#ifdef NOT_YET ++ case RPMTAG_TRIGGERPRETRANSIN: ++ tagflags |= RPMSENSE_TRIGGERPRETRANSIN; ++ h = pkg->header; ++ break; ++ case RPMTAG_TRIGGERPRETRANSUN: ++ tagflags |= RPMSENSE_TRIGGERPRETRANSUN; ++ h = pkg->header; ++ break; ++#endif ++ case RPMTAG_TRIGGERPOSTTRANSIN: ++ tagflags |= RPMSENSE_TRIGGERPOSTTRANSIN; ++ h = pkg->header; ++ break; ++ case RPMTAG_TRIGGERPOSTTRANSUN: ++ tagflags |= RPMSENSE_TRIGGERPOSTTRANSUN; ++ h = pkg->header; ++ break; + case RPMTAG_BUILDSUGGESTS: + case RPMTAG_BUILDENHANCES: + tagflags |= RPMSENSE_MISSINGOK; +--- rpm-5.4.7/build/parseScript.c.trigtrag~ 2012-04-12 16:47:14.342285386 +0200 ++++ rpm-5.4.7/build/parseScript.c 2012-04-12 16:47:14.371285424 +0200 +@@ -181,6 +181,36 @@ int parseScript(Spec spec, int parsePart + progtag = RPMTAG_TRIGGERSCRIPTPROG; + partname = "%triggerpostun"; + break; ++#ifdef NOT_YET ++ case PART_TRIGGERPRETRANSIN: ++ tag = RPMTAG_TRIGGERSCRIPTS; ++ tagflags = 0; ++ reqtag = RPMTAG_TRIGGERPRETRANSIN; ++ progtag = RPMTAG_TRIGGERSCRIPTPROG; ++ partname = "%triggerpretransin"; ++ break; ++ case PART_TRIGGERPRETRANSUN: ++ tag = RPMTAG_TRIGGERSCRIPTS; ++ tagflags = 0; ++ reqtag = RPMTAG_TRIGGERPRETRANSUN; ++ progtag = RPMTAG_TRIGGERSCRIPTPROG; ++ partname = "%triggerpretransun"; ++ break; ++#endif ++ case PART_TRIGGERPOSTTRANSIN: ++ tag = RPMTAG_TRIGGERSCRIPTS; ++ tagflags = 0; ++ reqtag = RPMTAG_TRIGGERPOSTTRANSIN; ++ progtag = RPMTAG_TRIGGERSCRIPTPROG; ++ partname = "%triggerposttransin"; ++ break; ++ case PART_TRIGGERPOSTTRANSUN: ++ tag = RPMTAG_TRIGGERSCRIPTS; ++ tagflags = 0; ++ reqtag = RPMTAG_TRIGGERPOSTTRANSUN; ++ progtag = RPMTAG_TRIGGERSCRIPTPROG; ++ partname = "%triggerposttransun"; ++ break; + /* support "%sanitycheck" script/section */ + case PART_SANITYCHECK: + tag = RPMTAG_SANITYCHECK; +--- rpm-5.4.7/build/parseSpec.c.trigtrag~ 2012-04-12 16:47:14.013284938 +0200 ++++ rpm-5.4.7/build/parseSpec.c 2012-04-12 16:47:14.372285425 +0200 +@@ -47,6 +47,12 @@ static struct PartRec { + { PART_TRIGGERUN, 0, "%triggerun"}, + { PART_TRIGGERIN, 0, "%triggerin"}, + { PART_TRIGGERIN, 0, "%trigger"}, ++#ifdef NOT_YET ++ { PART_TRIGGERPRETRANSIN,0, "%triggerpretransin"}, ++ { PART_TRIGGERPRETRANSUN,0, "%triggerpretransun"}, ++#endif ++ { PART_TRIGGERPOSTTRANSIN,0, "%triggerposttransin"}, ++ { PART_TRIGGERPOSTTRANSUN,0, "%triggerposttransun"}, + { PART_VERIFYSCRIPT, 0, "%verifyscript"}, + { PART_SANITYCHECK, 0, "%sanitycheck"}, /* support "%sanitycheck" scriptlet */ + {0, 0, NULL} +@@ -608,6 +614,12 @@ int parseSpec(rpmts ts, const char *spec + case PART_TRIGGERIN: + case PART_TRIGGERUN: + case PART_TRIGGERPOSTUN: ++#ifdef NOT_YET ++ case PART_TRIGGERPRETRANSIN: ++ case PART_TRIGGERPRETRANSUN: ++#endif ++ case PART_TRIGGERPOSTTRANSIN: ++ case PART_TRIGGERPOSTTRANSUN: + parsePart = parseScript(spec, parsePart); + /*@switchbreak@*/ break; + +--- rpm-5.4.7/build/rpmbuild.h.trigtrag~ 2010-02-10 19:36:17.000000000 +0100 ++++ rpm-5.4.7/build/rpmbuild.h 2012-04-12 16:47:14.372285425 +0200 +@@ -76,10 +76,12 @@ typedef enum rpmParseState_e { + PART_BUILDARCHITECTURES= 29+PART_BASE,/*!< */ + PART_TRIGGERPOSTUN = 30+PART_BASE, /*!< */ + PART_TRIGGERPREIN = 31+PART_BASE, /*!< */ ++ PART_TRIGGERPOSTTRANSIN= 32+PART_BASE, /*!< */ ++ PART_TRIGGERPOSTTRANSUN= 33+PART_BASE, /*!< */ + /* support "%sanitycheck" script */ +- PART_SANITYCHECK = 32+PART_BASE, /*!< */ +- PART_ARBITRARY = 33+PART_BASE, /*!< */ +- PART_LAST = 34+PART_BASE /*!< */ ++ PART_SANITYCHECK = 34+PART_BASE, /*!< */ ++ PART_ARBITRARY = 35+PART_BASE, /*!< */ ++ PART_LAST = 36+PART_BASE /*!< */ + } rpmParseState; + + /** \ingroup rpmbuild +--- rpm-5.4.7/lib/psm.c.trigtrag~ 2012-04-12 16:47:14.365285417 +0200 ++++ rpm-5.4.7/lib/psm.c 2012-04-12 16:47:14.373285427 +0200 +@@ -51,6 +51,7 @@ + #define F_CLR(_psm, _FLAG) ((_psm)->flags &= ~(RPMPSM_FLAGS_##_FLAG)) + + #define _RPMEVR_INTERNAL ++#define _RPMDS_INTERNAL + #include "rpmds.h" + + #define _RPMTE_INTERNAL +@@ -394,6 +395,10 @@ static /*@observer@*/ const char * tag2s + case RPMTAG_POSTUN: return "%postun"; + case RPMTAG_POSTTRANS: return "%posttrans"; + case RPMTAG_TRIGGERPOSTUN: return "%triggerpostun"; ++ case RPMTAG_TRIGGERPRETRANSIN: return "%triggerpretransin"; ++ case RPMTAG_TRIGGERPRETRANSUN: return "%triggerpretransun"; ++ case RPMTAG_TRIGGERPOSTTRANSIN: return "%triggerposttransin"; ++ case RPMTAG_TRIGGERPOSTTRANSUN: return "%triggerposttransun"; + case RPMTAG_VERIFYSCRIPT: return "%verify"; + case RPMTAG_SANITYCHECK: return "%sanitycheck"; + case RPMTAG_BUILDPREP: return "%prep"; +@@ -424,6 +429,10 @@ static rpmScriptID tag2slx(rpmTag tag) + case RPMTAG_POSTUN: return RPMSCRIPT_POSTUN; + case RPMTAG_POSTTRANS: return RPMSCRIPT_POSTTRANS; + case RPMTAG_TRIGGERPOSTUN: return RPMSCRIPT_TRIGGERPOSTUN; ++ case RPMTAG_TRIGGERPRETRANSIN: return RPMSCRIPT_TRIGGERPRETRANSIN; ++ case RPMTAG_TRIGGERPRETRANSUN: return RPMSCRIPT_TRIGGERPRETRANSUN; ++ case RPMTAG_TRIGGERPOSTTRANSIN: return RPMSCRIPT_TRIGGERPOSTTRANSIN; ++ case RPMTAG_TRIGGERPOSTTRANSUN: return RPMSCRIPT_TRIGGERPOSTTRANSUN; + case RPMTAG_VERIFYSCRIPT: return RPMSCRIPT_VERIFY; + case RPMTAG_SANITYCHECK: return RPMSCRIPT_SANITYCHECK; + case RPMTAG_BUILDPREP: return RPMSCRIPT_PREP; +@@ -1244,7 +1253,6 @@ static rpmRC handleOneTrigger(const rpmp + rpmds Fds = NULL; + rpmds Dds = NULL; + rpmds Pds = NULL; +- const char * sourceName; + const char * triggerName; + rpmRC rc = RPMRC_OK; + int arg1; +@@ -1252,10 +1260,6 @@ static rpmRC handleOneTrigger(const rpmp + int i; + + he->tag = RPMTAG_NAME; +- xx = headerGet(sourceH, he, 0); +- sourceName = he->p.str; +- +- he->tag = RPMTAG_NAME; + xx = headerGet(triggeredH, he, 0); + triggerName = he->p.str; + +@@ -1391,7 +1395,6 @@ exit: + She->p.ptr = _free(She->p.ptr); + Phe->p.ptr = _free(Phe->p.ptr); + triggerName = _free(triggerName); +- sourceName = _free(sourceName); + + return rc; + } +@@ -1707,6 +1710,351 @@ exit: + return rc; + } + ++/** ++ * Return transaction element's file info.22 ++ * @todo Take a rpmfi refcount here. ++ * @param tsi transaction element iterator ++ * @return transaction element file info ++ */ ++static /*@null@*/ ++rpmfi rpmtsiFi(const rpmtsi tsi) ++ /*@*/ ++{ ++ rpmfi fi = NULL; ++ ++ if (tsi != NULL && tsi->ocsave != -1) { ++ /*@-type -abstract@*/ /* FIX: rpmte not opaque */ ++ rpmte te = rpmtsElement(tsi->ts, tsi->ocsave); ++ /*@-assignexpose@*/ ++ if (te != NULL && (fi = te->fi) != NULL) ++ fi->te = te; ++ /*@=assignexpose@*/ ++ /*@=type =abstract@*/ ++ } ++ /*@-compdef -refcounttrans -usereleased @*/ ++ return fi; ++ /*@=compdef =refcounttrans =usereleased @*/ ++} ++/** ++ * Execute triggers. ++ * @param psm package state machine data ++ * @param sourceH ++ * @param triggeredH ++ * @param arg2 ++ * @return RPMRC_OK on success ++ */ ++static rpmRC handleOneScriptTrigger(const rpmpsm psm, ++ rpmds sourceDs, Header triggeredH, int arg2) ++ /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState@*/ ++ /*@modifies psm, sourceH, triggeredH, ++ rpmGlobalMacroContext, fileSystem, internalState @*/ ++{ ++ static int scareMem = 0; ++ HE_t he = memset(alloca(sizeof(*he)), 0, sizeof(*he)); ++ HE_t Ihe = memset(alloca(sizeof(*Ihe)), 0, sizeof(*Ihe)); ++ HE_t She = memset(alloca(sizeof(*She)), 0, sizeof(*She)); ++ HE_t Phe = memset(alloca(sizeof(*Phe)), 0, sizeof(*Phe)); ++ miRE mire = NULL; ++ const rpmts ts = psm->ts; ++ rpmds Tds = NULL; ++ const char * triggerName; ++ rpmRC rc = RPMRC_OK; ++ int arg1; ++ int xx; ++ int i; ++ ++ he->tag = RPMTAG_NAME; ++ xx = headerGet(triggeredH, he, 0); ++ triggerName = he->p.str; ++ ++ arg1 = rpmdbCountPackages(rpmtsGetRdb(ts), triggerName); ++ if (arg1 < 0) { ++ /* XXX W2DO? fails as "execution of script failed" */ ++ rc = RPMRC_FAIL; ++ goto exit; ++ } ++ arg1 += psm->countCorrection; ++ ++ Tds = rpmdsNew(triggeredH, RPMTAG_TRIGGERNAME, scareMem); ++ if (Tds == NULL) ++ goto exit; ++ xx = rpmdsSetNoPromote(Tds, 1); ++ ++ Ihe->tag = RPMTAG_TRIGGERINDEX; ++ if (!headerGet(triggeredH, Ihe, 0)) ++ goto exit; ++ ++ She->tag = RPMTAG_TRIGGERSCRIPTS; ++ if (!headerGet(triggeredH, She, 0)) ++ goto exit; ++ ++ Phe->tag = RPMTAG_TRIGGERSCRIPTPROG; ++ if (!headerGet(triggeredH, Phe, 0)) ++ goto exit; ++ ++ if ((Tds = rpmdsInit(Tds)) != NULL) ++ while ((i = rpmdsNext(Tds)) >= 0) { ++ rpmuint32_t Flags = rpmdsFlags(Tds); ++ char * depName; ++ ARGV_t matches = NULL; ++ int bingo; ++ ++ /* Skip triggers that are not in this context. */ ++ if (!(Flags & psm->sense)) ++ continue; ++ ++ bingo = 0; /* no trigger to fire. */ ++ depName = (char *) rpmdsN(Tds); ++ if (rpmdsTagN(sourceDs) == RPMTAG_BASENAMES || rpmdsTagN(sourceDs) == RPMTAG_DIRNAMES) { ++ if (mire == NULL) ++ mire = mireNew(depName[0] == '^' ? RPMMIRE_PCRE : RPMMIRE_GLOB, 0); ++ ++ xx = mireRegcomp(mire, depName); ++ for(rpmdsSetIx(sourceDs, 0); ++ rpmdsIx(sourceDs) < rpmdsCount(sourceDs); ++ rpmdsSetIx(sourceDs, rpmdsIx(sourceDs)+1)) { ++ char * N = (char *) sourceDs->N[sourceDs->i]; ++ if (rpmdsTagN(sourceDs) == RPMTAG_DIRNAMES) { ++ size_t nName = strlen(N); ++ N = xmalloc(nName + 1 + 1); ++ stpcpy(N, sourceDs->N[sourceDs->i]); ++ N[nName] = '/'; ++ N[nName+1] = '\0'; ++ } ++ xx = mireRegexec(mire, N, 0); ++ if (xx < 0) ++ /*@innercontinue@*/ continue; ++ bingo = 1; ++ argvAdd(&matches, N); ++ } ++ xx = mireClean(mire); ++ /* If trigger not fired yet, try provided dependency match. */ ++ } else { ++ bingo = rpmdsMatch(Tds, sourceDs); ++ bingo = rpmdsNegateRC(Tds, bingo); ++ } ++ ++ if (!bingo) ++ continue; ++ ++ /* Coerce strings into header argv return. */ ++ { int index = Ihe->p.ui32p[i]; ++ const char * s = Phe->p.argv[index]; ++ char * t; ++ ++ he->tag = Phe->tag; ++ he->t = RPM_STRING_ARRAY_TYPE; ++ he->c = 1; ++ he->p.argv = xmalloc(sizeof(Phe->p.argv[0]) + strlen(s) + 1); ++ he->p.argv[0] = t = (char *) &he->p.argv[1]; ++ t = stpcpy(t, s); ++ *t = '\0'; ++ ++ rc |= runScript(psm, triggeredH, "%trigger", he, ++ She->p.argv[index], arg1, arg2, matches); ++ ++ he->p.ptr = _free(he->p.ptr); ++ } ++ argvFree(matches); ++ } ++ ++ mire = mireFree(mire); ++ (void)rpmdsFree(Tds); ++ Tds = NULL; ++ ++exit: ++ Ihe->p.ptr = _free(Ihe->p.ptr); ++ She->p.ptr = _free(She->p.ptr); ++ Phe->p.ptr = _free(Phe->p.ptr); ++ triggerName = _free(triggerName); ++ ++ return rc; ++} ++ ++/** ++ * Run a dependency set loop against rpmdb triggers. ++ * @param psm package state machine data ++ * @param tagno dependency set to run against rpmdb ++ * @param arg2 scriptlet arg2 ++ * @return RPMRC_OK on success ++ */ ++static rpmRC runScriptTriggersLoop(rpmpsm psm, rpmTag tagno, int arg2) ++ /*@globals rpmGlobalMacroContext, h_errno, ++ fileSystem, internalState @*/ ++ /*@modifies psm, rpmGlobalMacroContext, ++ fileSystem, internalState @*/ ++{ ++ static int scareMem = 0; ++ const rpmts ts = psm->ts; ++ rpmfi fi = NULL; ++ rpmds sourceDs = NULL; ++ char * depName = NULL; ++ ARGI_t instances = NULL; ++ rpmmi mi; ++ Header triggeredH; ++ rpmRC rc = RPMRC_OK; ++ int xx; ++ rpmtsi pi; ++ rpmte p = NULL; ++ ++ ++ pi = rpmtsiInit(ts); ++ while ((p = rpmtsiNext(pi, psm->goal == PSM_PKGINSTALL ? TR_ADDED : TR_REMOVED)) != NULL) { ++ rpmds ds; ++ if (p->isSource) continue; ++ if ((fi = rpmtsiFi(pi)) == NULL) ++ continue; ++ if (psm->goal == PSM_PKGERASE) { ++ if (tagno == RPMTAG_BASENAMES || tagno == RPMTAG_DIRNAMES) { ++ fi = rpmfiInit(fi, 0); ++ if (fi != NULL) { ++ while (rpmfiNext(fi) >= 0) { ++ ds = rpmdsSingle(tagno, (tagno == RPMTAG_DIRNAMES ? rpmfiDN(fi) : rpmfiFN(fi)), NULL, RPMSENSE_ANY); ++ rpmdsMerge(&sourceDs, ds); ++ (void) rpmdsFree(ds); ++ } ++ } ++ } else { ++ char evr[BUFSIZ]; ++ char *ptr = evr; ++ if (rpmteE(p)) ptr = stpcpy(stpcpy(ptr, rpmteE(p)), ":"); ++ ptr = stpcpy(stpcpy(stpcpy(ptr, rpmteV(p)), "-"), rpmteR(p)); ++ if (rpmteD(p)) ptr = stpcpy(stpcpy(ptr, ":"), rpmteD(p)); ++ ds = rpmdsSingle(tagno, rpmteN(p), evr, RPMSENSE_EQUAL); ++ rpmdsMerge(&sourceDs, ds); ++ (void) rpmdsFree(ds); ++ } ++ } else { ++ ds = rpmdsNew(fi->h, tagno, scareMem); ++ if (ds == NULL) continue; ++ rpmdsMerge(&sourceDs, ds); ++ (void) rpmdsFree(ds); ++ } ++ } ++ xx = rpmteClose(p, ts, 0); ++ pi = rpmtsiFree(pi); ++ ++ /* Fire elements against rpmdb trigger strings. */ ++ if (sourceDs != NULL) ++ for(rpmdsSetIx(sourceDs, 0); ++ rpmdsIx(sourceDs) < rpmdsCount(sourceDs); ++ rpmdsSetIx(sourceDs, rpmdsIx(sourceDs)+1)) { ++ const char * Name = sourceDs->N[sourceDs->i]; ++ size_t nName = strlen(Name); ++ unsigned prev, instance; ++ unsigned nvals; ++ ARGint_t vals; ++ ++ if (!nName) continue; ++ ++ depName = _free(depName); ++ if (strcmp(Name, "/") && tagno == RPMTAG_DIRNAMES) { ++ depName = xmalloc(nName + 1 + 1); ++ (void) stpcpy(depName, Name); ++ /* XXX re-add the pesky trailing '/' to dirnames. */ ++ depName[nName] = '/'; ++ depName[nName+1] = '\0'; ++ } else ++ depName = xstrdup(Name); ++ ++ if (depName[0] == '/' && psm->Tmires != NULL) { ++ miRE mire; ++ int j; ++ ++ /* XXX mireApply doesn't tell which pattern matched. */ ++ for (j = 0, mire = psm->Tmires; j < psm->nTmires; j++, mire++) { ++ const char * pattern = psm->Tpats[j]; ++ size_t npattern = strlen(pattern); ++ if (tagno == RPMTAG_DIRNAMES && !PATT_ISDIR(pattern, npattern)) ++ continue; ++ if (mireRegexec(mire, depName, 0) < 0) ++ /*@innercontinue@*/ continue; ++ ++ /* Reset the primary retrieval key to the pattern. */ ++ depName = _free(depName); ++ depName = xstrdup(pattern); ++ /*@innerbreak@*/ break; ++ } ++ } ++ ++ /* Retrieve triggered header(s) by key. */ ++ mi = rpmtsInitIterator(ts, RPMTAG_TRIGGERNAME, depName, 0); ++ nvals = argiCount(instances); ++ vals = argiData(instances); ++ if (nvals > 0) ++ xx = rpmmiPrune(mi, (uint32_t *)vals, nvals, 1); ++ ++ prev = 0; ++ while((triggeredH = rpmmiNext(mi)) != NULL) { ++ instance = rpmmiInstance(mi); ++ if (prev == instance) ++ /*@innercontinue@*/ continue; ++ rc |= handleOneScriptTrigger(psm, sourceDs, triggeredH, arg2); ++ prev = instance; ++ xx = argiAdd(&instances, -1, instance); ++ xx = argiSort(instances, NULL); ++ } ++ mi = rpmmiFree(mi); ++ } ++ ++ instances = argiFree(instances); ++ depName = _free(depName); ++ (void)rpmdsFree(sourceDs); ++ sourceDs = NULL; ++ return rc; ++} ++/** ++ * Run trigger scripts in the database that are fired by this header. ++ * @param psm package state machine data ++ * @return 0 on success ++ */ ++static rpmRC runScriptTriggers(rpmpsm psm) ++ /*@globals rpmGlobalMacroContext, h_errno, ++ fileSystem, internalState @*/ ++ /*@modifies psm, rpmGlobalMacroContext, ++ fileSystem, internalState @*/ ++{ ++ int numPackage = 0; ++ int xx; ++ rpmTag tagno; ++ rpmRC rc = RPMRC_OK; ++ ++ /* Select RPMTAG_NAME or RPMTAG_PROVIDENAME index for triggering. */ ++ if (_trigger_tag == 0) { ++ const char * t = rpmExpand("%{?_trigger_tag}", NULL); ++/*@-mods@*/ ++ _trigger_tag = (!strcmp(t, "name") ? RPMTAG_NAME : RPMTAG_PROVIDENAME); ++/*@=mods@*/ ++ t = _free(t); ++ } ++ tagno = _trigger_tag; ++ ++ /* XXX Save/restore count correction. */ ++ { int countCorrection = psm->countCorrection; ++ ++ psm->countCorrection = 0; ++ ++ /* Try name/providename triggers first. */ ++ rc |= runScriptTriggersLoop(psm, tagno, numPackage); ++ /* If not limited to NEVRA triggers, also try file/dir path triggers. */ ++ if (tagno != RPMTAG_NAME) { ++ /* Retrieve trigger patterns from rpmdb. */ ++ xx = rpmdbTriggerGlobs(psm); ++ ++ rc |= runScriptTriggersLoop(psm, RPMTAG_BASENAMES, numPackage); ++ rc |= runScriptTriggersLoop(psm, RPMTAG_DIRNAMES, numPackage); ++ ++ psm->Tpats = argvFree(psm->Tpats); ++ psm->Tmires = mireFreeAll(psm->Tmires, psm->nTmires); ++ psm->nTmires = 0; ++ } ++ ++ psm->countCorrection = countCorrection; ++ } ++ ++ return rc; ++} ++ + /*@observer@*/ + static const char * pkgStageString(pkgStage a) + /*@*/ +@@ -1734,6 +2082,8 @@ static const char * pkgStageString(pkgSt + case PSM_CHROOT_IN: return "chrootin"; + case PSM_CHROOT_OUT: return "chrootout"; + case PSM_SCRIPT: return "script"; ++ case PSM_PRETRANS: return "pretrans"; ++ case PSM_POSTTRANS: return "posttrans"; + case PSM_TRIGGERS: return "triggers"; + case PSM_IMMED_TRIGGERS: return "immedtriggers"; + +@@ -1773,8 +2123,24 @@ assert(psm != NULL); + case RPMTAG_VERIFYSCRIPT: psm->stepName = "verify"; break; + case RPMTAG_PRETRANS: psm->stepName = "pretrans"; break; + case RPMTAG_POSTTRANS: psm->stepName = "posttrans"; break; ++#ifdef NOT_YET ++ case RPMTAG_TRIGGERPRETRANSIN: psm->stepName = "triggerpretransin"; break; ++ case RPMTAG_TRIGGERPRETRANSUN: psm->stepName = "triggerpretransun"; break; ++#endif ++ case RPMTAG_TRIGGERPOSTTRANSIN: psm->stepName = "triggerposttransin"; break; ++ case RPMTAG_TRIGGERPOSTTRANSUN: psm->stepName = "triggerposttransun"; break; ++ } ++ switch (scriptTag) { ++ default: psm->stage = PSM_SCRIPT; break; ++#ifdef NOT_YET ++ case RPMTAG_TRIGGERPRETRANSIN: ++ case RPMTAG_TRIGGERPRETRANSUN: psm->stage = PSM_PRETRANS; break; ++#endif ++ case RPMTAG_TRIGGERPOSTTRANSIN: ++ case RPMTAG_TRIGGERPOSTTRANSUN: psm->stage = PSM_POSTTRANS; break; + } +- return rpmpsmStage(psm, PSM_SCRIPT); ++ ++ return rpmpsmStage(psm, psm->stage); + } + + /*@-mustmod@*/ +@@ -2211,7 +2577,7 @@ rpmRC rpmpsmStage(rpmpsm psm, pkgStage s + + /* XXX hackery to assert(!scareMem) in rpmfiNew. */ + /*@-castexpose@*/ +-if (fi->h == NULL && fi->te && ((rpmte)fi->te)->h != NULL) fi->h = headerLink(((rpmte)fi->te)->h); ++if (fi != NULL && fi->h == NULL && fi->te && ((rpmte)fi->te)->h != NULL) fi->h = headerLink(((rpmte)fi->te)->h); + /*@=castexpose@*/ + + switch (stage) { +@@ -2996,6 +3362,36 @@ assert(psm->te != NULL); + if (rc) + xx = rpmtxnAbort(rpmtsGetRdb(ts)->db_txn); + else ++ xx = rpmtxnCommit(rpmtsGetRdb(ts)->db_txn); ++ rpmtsGetRdb(ts)->db_txn = NULL; ++ } break; ++#ifdef NOT_YET ++ case PSM_PRETRANS: ++ { rpmtxn _parent = (psm && psm->te ? psm->te->txn : NULL); ++ xx = rpmtxnBegin(rpmtsGetRdb(ts), _parent, NULL); ++ psm->scriptTag = RPMTAG_PRETRANS; ++ psm->progTag = RPMTAG_PRETRANSPROG; ++ psm->sense = psm->goal == PSM_PKGINSTALL ? RPMSENSE_TRIGGERPRETRANSIN : RPMSENSE_TRIGGERPRETRANSUN; ++ psm->countCorrection = 0; ++ rc = runScriptTriggers(psm); ++ if (rc) ++ xx = rpmtxnAbort(rpmtsGetRdb(ts)->db_txn); ++ else ++ xx = rpmtxnCommit(rpmtsGetRdb(ts)->db_txn); ++ rpmtsGetRdb(ts)->db_txn = NULL; ++ } break; ++#endif ++ case PSM_POSTTRANS: ++ { rpmtxn _parent = (psm && psm->te ? psm->te->txn : NULL); ++ xx = rpmtxnBegin(rpmtsGetRdb(ts), _parent, NULL); ++ psm->scriptTag = RPMTAG_POSTTRANS; ++ psm->progTag = RPMTAG_POSTTRANSPROG; ++ psm->sense = psm->goal == PSM_PKGINSTALL ? RPMSENSE_TRIGGERPOSTTRANSIN : RPMSENSE_TRIGGERPOSTTRANSUN; ++ psm->countCorrection = 0; ++ rc = runScriptTriggers(psm); ++ if (rc) ++ xx = rpmtxnAbort(rpmtsGetRdb(ts)->db_txn); ++ else + xx = rpmtxnCommit(rpmtsGetRdb(ts)->db_txn); + rpmtsGetRdb(ts)->db_txn = NULL; + } break; +--- rpm-5.4.7/lib/psm.h.trigtrag~ 2010-03-06 16:31:29.000000000 +0100 ++++ rpm-5.4.7/lib/psm.h 2012-04-12 16:47:14.373285427 +0200 +@@ -52,9 +52,11 @@ typedef enum pkgStage_e { + PSM_CHROOT_IN = 51, + PSM_CHROOT_OUT = 52, + PSM_SCRIPT = 53, +- PSM_TRIGGERS = 54, +- PSM_IMMED_TRIGGERS = 55, +- PSM_RPMIO_FLAGS = 56, ++ PSM_PRETRANS = 54, ++ PSM_POSTTRANS = 55, ++ PSM_TRIGGERS = 56, ++ PSM_IMMED_TRIGGERS = 57, ++ PSM_RPMIO_FLAGS = 58, + + PSM_RPMDB_LOAD = 97, + PSM_RPMDB_ADD = 98, +--- rpm-5.4.7/lib/transaction.c.trigtrag~ 2012-04-12 16:47:14.116285079 +0200 ++++ rpm-5.4.7/lib/transaction.c 2012-04-12 17:14:57.678583003 +0200 +@@ -1279,8 +1279,9 @@ assert(0); + continue; /* XXX can't happen */ + + /* If no prre/post transaction script, then don't bother. */ +- if (!rpmteHaveTransScript(p, stag)) ++ if (!rpmteHaveTransScript(p, stag)) { + continue; ++ } + + if (rpmteOpen(p, ts, 0)) { + if (p->fi != NULL) /* XXX can't happen */ +@@ -1300,6 +1301,43 @@ assert(0); + return 0; + } + ++/* ++ * Run pre/post transaction script. ++ * param ts transaction set ++ * param stag RPMTAG_TRIGGERPRETRANS or RPMTAG_TRIGGERPOSTTRANS ++ * return 0 on success ++ */ ++static int rpmtsRunScriptTriggers(rpmts ts, rpmTag stag) ++ /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/ ++ /*@modifies ts, rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/ ++{ ++ rpmtsi pi; ++ rpmte p; ++ rpmfi fi; ++ rpmpsm psm; ++ int xx; ++ rpmTag ptag; ++ ++FPSDEBUG(0, (stderr, "--> %s(%p,%s(%u))\n", __FUNCTION__, ts, tagName(stag), (unsigned)stag)); ++ switch (stag) { ++ default: ++assert(0); ++ /*@notreached@*/ break; ++#ifdef NOT_YET ++ case RPMTAG_TRIGGERPRETRANSIN: ++ case RPMTAG_TRIGGERPRETRANSUN: ptag = RPMTAG_PRETRANSPROG; break; ++#endif ++ case RPMTAG_TRIGGERPOSTTRANSIN: ++ case RPMTAG_TRIGGERPOSTTRANSUN: ptag = RPMTAG_POSTTRANSPROG; break; ++ } ++ ++ psm = rpmpsmNew(ts, NULL, NULL); ++ psm->goal = (stag == RPMTAG_TRIGGERPOSTTRANSIN) ? PSM_PKGINSTALL : PSM_PKGERASE; ++ xx = rpmpsmScriptStage(psm, stag, ptag); ++ psm = rpmpsmFree(psm, __FUNCTION__); ++ ++ return 0; ++} + /* Add fingerprint for each file not skipped. */ + static void rpmtsAddFingerprints(rpmts ts, uint32_t fileCount, hashTable ht, + fingerPrintCache fpc) +@@ -2212,6 +2250,10 @@ fprintf(stderr, "--> %s(%p,%p,0x%x) tsFl + + rpmlog(RPMLOG_DEBUG, D_("running post-transaction scripts\n")); + xx = rpmtsRunScript(ts, RPMTAG_POSTTRANS); ++ ++ rpmlog(RPMLOG_DEBUG, D_("running post-transaction triggers\n")); ++ xx = rpmtsRunScriptTriggers(ts, RPMTAG_TRIGGERPOSTTRANSIN); ++ xx = rpmtsRunScriptTriggers(ts, RPMTAG_TRIGGERPOSTTRANSUN); + } + + exit: +--- rpm-5.4.7/rpmconstant/rpmconstanttbl.c.trigtrag~ 2012-03-02 10:14:19.000000000 +0100 ++++ rpm-5.4.7/rpmconstant/rpmconstanttbl.c 2012-04-12 16:47:14.376285432 +0200 +@@ -67,7 +67,6 @@ + * ../rpmio/glob.h + * ../rpmio/groestl.h + * ../rpmio/hamsi.h +- * ../rpmio/html-parse.h + * ../rpmio/iosm.h + * ../rpmio/jh.h + * ../rpmio/keccak.h +@@ -98,7 +97,6 @@ + * ../rpmio/rpmhash.h + * ../rpmio/rpmhkp.h + * ../rpmio/rpmhook.h +- * ../rpmio/rpmiob.h + * ../rpmio/rpmio.h + * ../rpmio/rpmio_internal.h + * ../rpmio/rpmio-stub.h +@@ -662,6 +660,8 @@ static const struct rpmconstant_s rpmPar + { "PART_BUILDARCHITECTURES", PART_BUILDARCHITECTURES }, /*!< */ + { "PART_TRIGGERPOSTUN", PART_TRIGGERPOSTUN }, /*!< */ + { "PART_TRIGGERPREIN", PART_TRIGGERPREIN }, /*!< */ ++ { "PART_TRIGGERPOSTTRANSIN", PART_TRIGGERPOSTTRANSIN }, /*!< */ ++ { "PART_TRIGGERPOSTTRANSUN", PART_TRIGGERPOSTTRANSUN }, /*!< */ + { "PART_SANITYCHECK", PART_SANITYCHECK }, /*!< */ + { "PART_ARBITRARY", PART_ARBITRARY }, /*!< */ + { "PART_LAST", PART_LAST }, /*!< */ +@@ -678,7 +678,7 @@ const struct rpmconstant_s * rpmParseSta + static const struct rpmconstant_s rpmsenseflagsctbl[] = { + #ifdef H_RPMEVR + { "RPMSENSE_ANY", RPMSENSE_ANY }, +- { "RPMSENSE_SERIAL", RPMSENSE_SERIAL }, ++ { "RPMSENSE_TRIGGERPOSTTRANSIN", RPMSENSE_TRIGGERPOSTTRANSIN }, + { "RPMSENSE_LESS", RPMSENSE_LESS }, + { "RPMSENSE_GREATER", RPMSENSE_GREATER }, + { "RPMSENSE_EQUAL", RPMSENSE_EQUAL }, +@@ -705,7 +705,7 @@ static const struct rpmconstant_s rpmsen + { "RPMSENSE_RPMLIB", RPMSENSE_RPMLIB }, + { "RPMSENSE_TRIGGERPREIN", RPMSENSE_TRIGGERPREIN }, + { "RPMSENSE_KEYRING", RPMSENSE_KEYRING }, +- { "RPMSENSE_STRONG", RPMSENSE_STRONG }, ++ { "RPMSENSE_TRIGGERPOSTTRANSUN", RPMSENSE_TRIGGERPOSTTRANSUN }, + { "RPMSENSE_CONFIG", RPMSENSE_CONFIG }, + { "RPMSENSE_PROBE", RPMSENSE_PROBE }, + { "RPMSENSE_PACKAGE", RPMSENSE_PACKAGE }, +@@ -1081,6 +1081,10 @@ static const struct rpmconstant_s rpmTag + { "RPMTAG_OBSOLETEYAMLENTRY", RPMTAG_OBSOLETEYAMLENTRY }, /* s[] */ + { "RPMTAG_PROVIDEYAMLENTRY", RPMTAG_PROVIDEYAMLENTRY }, /* s[] */ + { "RPMTAG_REQUIREYAMLENTRY", RPMTAG_REQUIREYAMLENTRY }, /* s[] */ ++ { "RPMTAG_TRIGGERPRETRANSIN", RPMTAG_TRIGGERPRETRANSIN }, /* internal */ ++ { "RPMTAG_TRIGGERPRETRANSUN", RPMTAG_TRIGGERPRETRANSUN }, /* internal */ ++ { "RPMTAG_TRIGGERPOSTTRANSIN", RPMTAG_TRIGGERPOSTTRANSIN }, /* internal */ ++ { "RPMTAG_TRIGGERPOSTTRANSUN", RPMTAG_TRIGGERPOSTTRANSUN }, /* internal */ + { "RPMTAG_FILEDIGESTALGO", RPMTAG_FILEDIGESTALGO }, /* i file checksum algorithm */ + { "RPMTAG_BUGURL", RPMTAG_BUGURL }, /* s */ + { "RPMTAG_FIRSTFREE_TAG", RPMTAG_FIRSTFREE_TAG }, /*!< internal */ +--- rpm-5.4.7/rpmdb/hdrfmt.c.trigtrag~ 2012-04-12 16:47:14.320285355 +0200 ++++ rpm-5.4.7/rpmdb/hdrfmt.c 2012-04-12 16:47:14.377285433 +0200 +@@ -666,6 +666,16 @@ assert(ix == 0); + val = xstrdup("un"); + else if (anint & RPMSENSE_TRIGGERPOSTUN) + val = xstrdup("postun"); ++#ifdef NOT_YET ++ else if (anint & RPMSENSE_TRIGGERPRETRANSIN) ++ val = xstrdup("pretransin"); ++ else if (anint & RPMSENSE_TRIGGERPRETRANSUN) ++ val = xstrdup("pretransun"); ++#endif ++ else if (anint & RPMSENSE_TRIGGERPOSTTRANSIN) ++ val = xstrdup("posttransin"); ++ else if (anint & RPMSENSE_TRIGGERPOSTTRANSUN) ++ val = xstrdup("posttransun"); + else + val = xstrdup(""); + } +@@ -2062,6 +2072,16 @@ static int triggertypeTag(Header h, HE_t + he->p.argv[i] = xstrdup("un"); + else if (flags.ui32p[j] & RPMSENSE_TRIGGERPOSTUN) + he->p.argv[i] = xstrdup("postun"); ++#ifdef NOT_YET ++ else if (flags.ui32p[j] & RPMSENSE_TRIGGERPRETRANSIN) ++ he->p.argv[i] = xstrdup("pretransin"); ++ else if (flags.ui32p[j] & RPMSENSE_TRIGGERPRETRANSUN) ++ he->p.argv[i] = xstrdup("pretransun"); ++#endif ++ else if (flags.ui32p[j] & RPMSENSE_TRIGGERPOSTTRANSIN) ++ he->p.argv[i] = xstrdup("posttransin"); ++ else if (flags.ui32p[j] & RPMSENSE_TRIGGERPOSTTRANSUN) ++ he->p.argv[i] = xstrdup("posttransun"); + else + he->p.argv[i] = xstrdup(""); + /*@innerbreak@*/ break; +--- rpm-5.4.7/rpmdb/rpmevr.h.trigtrag~ 2010-03-06 17:20:46.000000000 +0100 ++++ rpm-5.4.7/rpmdb/rpmevr.h 2012-04-12 17:31:06.279956197 +0200 +@@ -27,7 +27,7 @@ typedef enum evrFlags_e { + #if defined(_RPMEVR_INTERNAL) + RPMSENSE_ANY = 0, + /*@-enummemuse@*/ +- RPMSENSE_SERIAL = (1 << 0), /*!< (obsolete). */ ++ RPMSENSE_TRIGGERPOSTTRANSIN = (1 << 0), /*!< (obsolete). */ + /*@=enummemuse@*/ + #endif + RPMSENSE_LESS = (1 << 1), +@@ -60,7 +60,7 @@ typedef enum evrFlags_e { + RPMSENSE_RPMLIB = (1 << 24), /*!< rpmlib(feature) dependency. */ + RPMSENSE_TRIGGERPREIN = (1 << 25), /*!< %triggerprein dependency. */ + RPMSENSE_KEYRING = (1 << 26), +- RPMSENSE_STRONG = (1 << 27), /*!< placeholder SuSE */ ++ RPMSENSE_TRIGGERPOSTTRANSUN = (1 << 27), /*!< placeholder SuSE */ + RPMSENSE_CONFIG = (1 << 28), + RPMSENSE_PROBE = (1 << 29), + RPMSENSE_PACKAGE = (1 << 30), +@@ -94,7 +94,8 @@ struct EVR_s { + }; + + #define RPMSENSE_TRIGGER \ +- (RPMSENSE_TRIGGERPREIN | RPMSENSE_TRIGGERIN | RPMSENSE_TRIGGERUN | RPMSENSE_TRIGGERPOSTUN) ++ (RPMSENSE_TRIGGERPREIN | RPMSENSE_TRIGGERIN | RPMSENSE_TRIGGERUN | RPMSENSE_TRIGGERPOSTUN | \ ++ RPMSENSE_TRIGGERPOSTTRANSIN | RPMSENSE_TRIGGERPOSTTRANSUN) + + #define _ALL_REQUIRES_MASK (\ + RPMSENSE_INTERP | \ +--- rpm-5.4.7/rpmdb/rpmtag.h.trigtrag~ 2011-09-06 01:49:41.000000000 +0200 ++++ rpm-5.4.7/rpmdb/rpmtag.h 2012-04-12 16:47:14.378285434 +0200 +@@ -437,6 +437,10 @@ enum rpmTag_e { + RPMTAG_OBSOLETEYAMLENTRY = 1220, /* s[] */ + RPMTAG_PROVIDEYAMLENTRY = 1221, /* s[] */ + RPMTAG_REQUIREYAMLENTRY = 1222, /* s[] */ ++ RPMTAG_TRIGGERPRETRANSIN = 1223, /* internal */ ++ RPMTAG_TRIGGERPRETRANSUN = 1224, /* internal */ ++ RPMTAG_TRIGGERPOSTTRANSIN = 1225, /* internal */ ++ RPMTAG_TRIGGERPOSTTRANSUN = 1226, /* internal */ + + RPMTAG_FILEDIGESTALGO = 5011, /* i file checksum algorithm */ + RPMTAG_BUGURL = 5012, /* s */ +--- rpm-5.4.7/rpmdb/rpmtypes.h.trigtrag~ 2011-05-03 17:58:19.000000000 +0200 ++++ rpm-5.4.7/rpmdb/rpmtypes.h 2012-04-12 16:47:14.378285434 +0200 +@@ -70,7 +70,11 @@ typedef enum rpmScriptID_e { + RPMSCRIPT_POSTUN = 7, /*!< %postun scriptlet */ + RPMSCRIPT_TRIGGERPOSTUN = 8, /*!< %triggerpostun scriptlet */ + RPMSCRIPT_POSTTRANS = 9, /*!< %posttrans scriptlet */ +- /* 10-15 unused */ ++ RPMSCRIPT_TRIGGERPRETRANSIN = 10, /*!< %triggerpretrans scriptlet */ ++ RPMSCRIPT_TRIGGERPRETRANSUN = 11, /*!< %triggerpretrans scriptlet */ ++ RPMSCRIPT_TRIGGERPOSTTRANSIN= 12, /*!< %triggerposttrans scriptlet */ ++ RPMSCRIPT_TRIGGERPOSTTRANSUN= 13, /*!< %triggerposttrans scriptlet */ ++ /* 14-15 unused */ + RPMSCRIPT_VERIFY = 16, /*!< %verify scriptlet */ + RPMSCRIPT_SANITYCHECK = 17, /*!< %sanitycheck scriptlet */ + /* 18-23 unused */ diff --git a/rpm-5.4.7-use-bdb-5.2.patch b/rpm-5.4.7-use-bdb-5.2.patch new file mode 100644 index 0000000..371a996 --- /dev/null +++ b/rpm-5.4.7-use-bdb-5.2.patch @@ -0,0 +1,29 @@ +--- rpm-5.4.7/configure.ac.db52~ 2012-03-09 06:13:04.186897418 +0100 ++++ rpm-5.4.7/configure.ac 2012-03-09 06:13:12.825902025 +0100 +@@ -541,7 +541,7 @@ else + MYPATH=$PATH + fi + +-DBXY=db53 ++DBXY=db52 + + AC_PATH_PROG(__BASH, bash, %{_bindir}/bash, $MYPATH) + AC_PATH_PROG(__BZIP2, bzip2, %{_bindir}/bzip2, $MYPATH) +@@ -1560,7 +1560,7 @@ DBLIBSRCS="" + CPPFLAGS="${CPPFLAGS} -I${prefix}/include/${DBXY}" + RPM_CHECK_LIB( + [Berkeley-DB], [db], +- [db-5.3], [db_create], [db.h], ++ [db-5.2], [db_create], [db.h], + [yes,external], [db3], + [ DBLIBSRCS="$DBLIBSRCS db3.c" + AM_CONDITIONAL(WITH_DB, [ true ]) +@@ -1587,7 +1587,7 @@ dnl # Sqlite 3.7.0.1 from db-5.1.19 + dnl XXX error: `db3' is already registered with AC_CONFIG_SUBDIRS. + RPM_CHECK_LIB( + [Berkeley-DB (+SQLite3)], [dbsql], +- [db_sql-5.3], [sqlite3_open], [dbsql.h], ++ [db_sql-5.2], [sqlite3_open], [dbsql.h], + [yes,external], [db3/sql], + [ + AM_CONDITIONAL(WITH_DBSQL, [ true ]) diff --git a/rpm-5.4.7-use-gnu-hash-style-by-default-and-drop-rtld-dep.patch b/rpm-5.4.7-use-gnu-hash-style-by-default-and-drop-rtld-dep.patch new file mode 100644 index 0000000..a167009 --- /dev/null +++ b/rpm-5.4.7-use-gnu-hash-style-by-default-and-drop-rtld-dep.patch @@ -0,0 +1,29 @@ +--- rpm-5.4.7/lib/rpmds.c.gnu_hash~ 2012-03-10 17:35:53.830770413 +0100 ++++ rpm-5.4.7/lib/rpmds.c 2012-03-10 17:35:53.837770420 +0100 +@@ -3455,6 +3455,7 @@ assert(s != NULL); + } + /*@=uniondef @*/ + ++#if !defined(RPM_VENDOR_MANDRIVA) + /* For DSOs which use the .gnu_hash section and don't have a .hash + * section, we need to ensure that we have a new enough glibc. */ + if (gotGNUHASH && !gotHASH) { +@@ -3464,6 +3465,7 @@ assert(s != NULL); + (void)rpmdsFree(ds); + ds = NULL; + } ++#endif + + /* For DSO's, provide the basename of the file if DT_SONAME not found. */ + if (!skipP && isDSO && !gotDEBUG && !gotSONAME) { +--- rpm-5.4.7/macros/mandriva.in.gnu_hash~ 2012-03-10 17:35:53.000000000 +0100 ++++ rpm-5.4.7/macros/mandriva.in 2012-03-10 17:39:05.871934996 +0100 +@@ -358,7 +358,7 @@ GCONF_CONFIG_SOURCE=`%{_gconftool_bin} - + + %__libtoolize_configure %{?__libtoolize:(cd $CONFIGURE_TOP; [ ! -f configure.in -a ! -f configure.ac ] || %{__libtoolize} --copy --force)} + +-%ldflags %{?!_disable_ld_as_needed: -Wl,--as-needed}%{?!_disable_ld_no_undefined: -Wl,--no-undefined}%{?!_disable_ld_relro: -Wl,-z,relro}%{?!_disable_ld_O1: -Wl,-O1}%{?!_disable_ld_build_id: -Wl,--build-id}%{?!_disable_ld_enable_new_dtags: -Wl,--enable-new-dtags}%{?_hardened_flags: %_hardened_flags} ++%ldflags %{?!_disable_ld_as_needed: -Wl,--as-needed}%{?!_disable_ld_no_undefined: -Wl,--no-undefined}%{?!_disable_ld_relro: -Wl,-z,relro}%{?!_disable_ld_O1: -Wl,-O1}%{?!_disable_ld_build_id: -Wl,--build-id}%{?!_disable_ld_enable_new_dtags: -Wl,--enable-new-dtags}%{?!_disable_hash_style_gnu: -Wl,--hash-style=gnu}%{?_hardened_flags: %_hardened_flags} + + %setup_compile_flags \ + CFLAGS="${CFLAGS:-%optflags}" ; export CFLAGS ; \ diff --git a/rpm-5.4.8-URPM-build-fix.patch b/rpm-5.4.8-URPM-build-fix.patch new file mode 100644 index 0000000..b0e029d --- /dev/null +++ b/rpm-5.4.8-URPM-build-fix.patch @@ -0,0 +1,13 @@ +--- rpm-5.4.8/configure.ac.urpm~ 2012-04-25 19:27:07.929167065 +0200 ++++ rpm-5.4.8/configure.ac 2012-04-25 19:29:04.996867674 +0200 +@@ -1198,8 +1198,8 @@ AC_ARG_WITH(perl-urpm, AS_HELP_STRING([- + AC_SUBST(PERL_URPM_INSTALLDIRS) + WITH_PERL_URPM_SUBDIR=perl-URPM + WITH_PERL_URPM_SUBPACKAGE=1 +- AC_CONFIG_FILES([perl-URPM/Makefile.PL]) +- AC_CONFIG_FILES([perl-URPM/Makefile]) ++ AC_CONFIG_FILES([scripts/URPM-Makefile.PL]) ++ AC_CONFIG_FILES([scripts/URPM-Makefile]) + fi + ]) + AC_SUBST(WITH_PERL_URPM_SUBDIR) diff --git a/rpm-5.4.8-add-armv7l-specific-macros.patch b/rpm-5.4.8-add-armv7l-specific-macros.patch new file mode 100644 index 0000000..4bc053c --- /dev/null +++ b/rpm-5.4.8-add-armv7l-specific-macros.patch @@ -0,0 +1,36 @@ +From 727484174300654bc4b3881f3db2889a05f3895c Mon Sep 17 00:00:00 2001 +From: Franck Bui +Date: Thu, 26 Apr 2012 13:21:45 +0000 +Subject: [PATCH 1/1] Add armv7l target + +Signed-off-by: Franck Bui +--- + cpu-os-macros/armv7l-linux/macros | 82 +++++++++++++++++++++++++++++++++++++ + 2 files changed, 83 insertions(+), 1 deletions(-) + create mode 100644 cpu-os-macros/armv7l-linux/macros + +diff --git a/cpu-os-macros/armv7l-linux/macros b/cpu-os-macros/armv7l-linux/macros +new file mode 100644 +index 0000000..f12a8a2 +--- /dev/null ++++ b/cpu-os-macros/armv7l-linux/macros +@@ -0,0 +1,19 @@ ++# Per-platform rpm configuration file. ++ ++#============================================================================== ++# ---- per-platform macros. ++# ++%_arch arm ++%_os linux ++%_gnu -gnueabi ++%optflags -O2 -g -fpic -fPIC -fno-strict-volatile-bitfields ++ ++#============================================================================== ++# ---- configure macros. ++# ++%_lib lib ++ ++#--------------------------------------------------------------------- ++# Multilibs ++%_multilibno 1 ++%_multilibpatt (/%{_lib}|/usr/%{_lib}(|/gconv)|/usr/local/%{_lib}|/usr/X11R6/%{_lib}|/opt/%{_lib})/[^/]*\\.([oa]|la|so[0-9.]*)$ 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-add-_build_pkgcheck.patch b/rpm-5.4.9-add-_build_pkgcheck.patch new file mode 100644 index 0000000..43ac842 --- /dev/null +++ b/rpm-5.4.9-add-_build_pkgcheck.patch @@ -0,0 +1,159 @@ +--- rpm-5.4.9/build/pack.c.pkgcheck~ 2012-04-15 17:04:14.000000000 +0200 ++++ rpm-5.4.9/build/pack.c 2012-05-15 02:21:17.851100279 +0200 +@@ -1127,6 +1127,25 @@ static rpmTag copyTags[] = { + 0 + }; + ++static rpmRC checkPackages(const char *pkgcheck) ++{ ++ int fail = rpmExpandNumeric("%{?_nonzero_exit_pkgcheck_terminate_build}"); ++ int xx; ++ ++ rpmlog(RPMLOG_NOTICE, _("Executing \"%s\":\n"), pkgcheck); ++ xx = system(pkgcheck); ++ if (WEXITSTATUS(xx) == -1 || WEXITSTATUS(xx) == 127) { ++ rpmlog(RPMLOG_ERR, _("Execution of \"%s\" failed.\n"), pkgcheck); ++ if (fail) return 127; ++ } ++ if (WEXITSTATUS(xx) != 0) { ++ rpmlog(RPMLOG_ERR, _("Package check \"%s\" failed.\n"), pkgcheck); ++ if (fail) return RPMRC_FAIL; ++ } ++ ++ return RPMRC_OK; ++} ++ + rpmRC packageBinaries(Spec spec) + { + HE_t he = (HE_t) memset(alloca(sizeof(*he)), 0, sizeof(*he)); +@@ -1136,6 +1155,7 @@ rpmRC packageBinaries(Spec spec) + Package pkg; + rpmRC rc = RPMRC_OK; /* assume success */ + int xx; ++ ARGV_t pkglist = NULL; + + for (pkg = spec->packages; pkg != NULL; pkg = pkg->next) { + const char *fn; +@@ -1233,11 +1253,46 @@ assert(csa->fi != NULL); + csa->cpioFdIn = fdFree(csa->cpioFdIn, "init (packageBinaries)"); + /*@=nullpass =onlytrans =refcounttrans @*/ + /*@=type@*/ ++ if (rc == RPMRC_OK) { ++ /* Do check each written package if enabled */ ++ char *pkgcheck = rpmExpand("%{?_build_pkgcheck} ", fn, NULL); ++ if (pkgcheck[0] != ' ') { ++ rc = checkPackages(pkgcheck); ++ } ++ pkgcheck = _free(pkgcheck); ++ xx = argvAdd(&pkglist, fn); ++ } + fn = _free(fn); +- if (rc) ++ if (rc) { ++ pkglist = argvFree(pkglist); + goto exit; ++ } + } +- ++ ++ /* Now check the package set if enabled */ ++ if (pkglist != NULL) { ++ char *pkgcheck_set = NULL; ++ char *pkgs = NULL; ++ size_t pkglen = 0; ++ int i; ++ for (i = 0; i < argvCount(pkglist); i++) ++ pkglen += strlen(pkglist[i]) + 1; ++ pkgs = xcalloc(1, pkglen); ++ for (i = 0; i < argvCount(pkglist); i++) { ++ if (i) ++ strcat(pkgs, " "); ++ strcat(pkgs, pkglist[i]); ++ } ++ ++ pkgcheck_set = rpmExpand("%{?_build_pkgcheck_set} ", pkgs, NULL); ++ if (pkgcheck_set[0] != ' ') { /* run only if _build_pkgcheck_set is defined */ ++ rc = checkPackages(pkgcheck_set); ++ } ++ pkgcheck_set = _free(pkgcheck_set); ++ pkglist = argvFree(pkglist); ++ pkgs = _free(pkgs); ++ } ++ + exit: + + return rc; +@@ -1310,6 +1365,7 @@ rpmRC packageSources(Spec spec) + /* XXX this should be %_srpmdir */ + { const char *srcrpmdir = rpmGetPath("%{_srcrpmdir}/", NULL); + const char *fn = rpmGetPath("%{_srcrpmdir}/", spec->sourceRpmName,NULL); ++ const char *pkgcheck = rpmExpand("%{?_build_pkgcheck_srpm} ", fn, NULL); + + rc = rpmioMkpath(srcrpmdir, 0755, -1, -1); + +@@ -1333,6 +1389,11 @@ assert(csa->fi != NULL); + rc = writeRPM(&spec->sourceHeader, &spec->sourcePkgId, fn, + csa, spec->passPhrase, &spec->cookie, spec->dig); + ++ /* Do check SRPM package if enabled */ ++ if (rc == RPMRC_OK && pkgcheck[0] != ' ') { ++ rc = checkPackages(pkgcheck); ++ } ++ + /*@-onlytrans@*/ + csa->fi->te = _free(csa->fi->te); /* XXX memory leak */ + /*@=onlytrans@*/ +@@ -1343,6 +1404,7 @@ assert(csa->fi != NULL); + /*@=type@*/ + srcrpmdir = _free(srcrpmdir); + fn = _free(fn); ++ pkgcheck = _free(pkgcheck); + } + + rc = (rc ? RPMRC_FAIL : RPMRC_OK); +--- rpm-5.4.9/macros/macros.rpmbuild.in.pkgcheck~ 2012-05-15 02:19:32.732564561 +0200 ++++ rpm-5.4.9/macros/macros.rpmbuild.in 2012-05-15 02:19:32.795564880 +0200 +@@ -193,6 +193,30 @@ echo "Patch #%{__patch_number} (%{basena + %_missing_doc_files_terminate_build 1 + + # ++# Program to call for each successfully built and written binary package. ++# The package name is passed to the program as a command-line argument. ++# ++#%_build_pkgcheck %{_bindir}/rpmlint ++ ++# ++# Program to call for the whole binary package set after build. ++# The package set is passed to the program via command-line arguments. ++# ++#%_build_pkgcheck_set %{_bindir}/rpmlint ++ ++# ++# Program to call for successfully built and written SRPM. ++# The package name is passed to the program as a command-line argument. ++# ++#%_build_pkgcheck_srpm %{_bindir}/rpmlint ++ ++# ++# Should the build of packages fail if package checker (if defined) returns ++# non-zero exit status? ++# ++#%_nonzero_exit_pkgcheck_terminate_build 1 ++ ++# + # Should an ELF file processed by find-debuginfo.sh having no build ID + # terminate a build? This is left undefined to disable it and defined to + # enable. +--- rpm-5.4.9/macros/mandriva.in.pkgcheck~ 2012-05-15 02:19:32.771564758 +0200 ++++ rpm-5.4.9/macros/mandriva.in 2012-05-15 02:19:32.795564880 +0200 +@@ -127,6 +127,10 @@ end\ + + %_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 ++%_nonzero_exit_pkgcheck_terminate_build 1 ++ + + %_enable_debug_packages 1 + diff --git a/rpm-5.4.9-add-distepoch-rpmlib-feature.patch b/rpm-5.4.9-add-distepoch-rpmlib-feature.patch new file mode 100644 index 0000000..193e450 --- /dev/null +++ b/rpm-5.4.9-add-distepoch-rpmlib-feature.patch @@ -0,0 +1,14 @@ +--- rpm-5.4.9/lib/rpmds.c.depoch_rpmlib~ 2012-05-15 02:59:01.000000000 +0200 ++++ rpm-5.4.9/lib/rpmds.c 2012-05-15 03:00:11.147448068 +0200 +@@ -1565,6 +1565,11 @@ static struct rpmlibProvides_s rpmlibPro + { "rpmlib(SetVersions)", "4.0.4-alt98", + (evrFlags)(RPMSENSE_RPMLIB|RPMSENSE_EQUAL), + N_("dependencies support set/subset versions.") }, ++#if defined(RPM_VENDOR_MANDRIVA) ++ { "rpmlib(DistEpoch)", "5.4.7-1", ++ (RPMSENSE_RPMLIB|RPMSENSE_EQUAL), ++ N_("package has distepoch.") }, ++#endif + { NULL, NULL, (evrFlags)0, NULL } + }; + diff --git a/rpm-5.4.9-add-filetriggers-regex-matching-support.patch b/rpm-5.4.9-add-filetriggers-regex-matching-support.patch new file mode 100644 index 0000000..b940477 --- /dev/null +++ b/rpm-5.4.9-add-filetriggers-regex-matching-support.patch @@ -0,0 +1,111 @@ +--- rpm-5.4.9/build/parseReqs.c.trig_pcre~ 2009-06-13 11:07:44.000000000 +0200 ++++ rpm-5.4.9/build/parseReqs.c 2012-05-15 03:05:07.438054281 +0200 +@@ -110,7 +110,7 @@ rpmRC parseRCPOT(Spec spec, Package pkg, + ix = 0; + if (N[ix] == '!') + ix++; +- if (!(xisalnum(N[ix]) || N[ix] == '_' || N[ix] == '/' ++ if (!(xisalnum(N[ix]) || N[ix] == '_' || N[ix] == '/' || N[ix] == '^' + || (nr > 5 && N[ix] == '%' && N[ix+1] == '{' && N[nr-1] == '}'))) + { + rpmlog(RPMLOG_ERR, +--- rpm-5.4.9/lib/psm.c.trig_pcre~ 2012-05-15 03:05:07.085052367 +0200 ++++ rpm-5.4.9/lib/psm.c 2012-05-15 03:07:11.367726113 +0200 +@@ -67,6 +67,9 @@ + + #include "debug.h" + ++#define PATT_ISDIR(patt, len) ((patt[0] == '/' && patt[len-1] == '/') || \ ++ (patt[0] == '^' && patt[len-1] == '$' && patt[len-2] == '/')) ++ + #define _PSM_DEBUG 0 + /*@unchecked@*/ + int _psm_debug = _PSM_DEBUG; +@@ -1285,11 +1288,11 @@ static rpmRC handleOneTrigger(const rpmp + + bingo = 0; /* no trigger to fire. */ + depName = (char *) rpmdsN(Tds); +- if (depName[0] == '/') { ++ if (depName[0] == '^' || depName[0] == '/') { + size_t nb = strlen(depName); +- if (Glob_pattern_p(depName, 0)) { ++ if (depName[0] == '^' || Glob_pattern_p(depName, 0)) { + rpmds ds = NULL; +- if (depName[nb-1] == '/') { ++ if (PATT_ISDIR(depName, nb)) { + /* XXX Dirnames w trailing "/" needed. */ + if (Dds == NULL) + Dds = rpmdsNew(sourceH, RPMTAG_DIRNAMES, 0x2); +@@ -1300,7 +1303,7 @@ static rpmRC handleOneTrigger(const rpmp + ds = rpmdsLink(Fds, "Triggers"); + } + if (mire == NULL) +- mire = mireNew(RPMMIRE_GLOB, 0); ++ mire = mireNew(depName[0] == '^' ? RPMMIRE_PCRE : RPMMIRE_GLOB, 0); + + xx = mireRegcomp(mire, depName); + if ((ds = rpmdsInit(ds)) != NULL) +@@ -1318,7 +1321,7 @@ static rpmRC handleOneTrigger(const rpmp + } + + /* If not matched, and directory trigger, try dir names. */ +- if (!bingo && depName[nb-1] == '/') { ++ if (!bingo && PATT_ISDIR(depName, nb)) { + /* XXX Dirnames w trailing "/" needed. */ + if (Dds == NULL) + Dds = rpmdsNew(sourceH, RPMTAG_DIRNAMES, 0x2); +@@ -1401,9 +1404,9 @@ static int rpmdbTriggerGlobs(rpmpsm psm) + if (keys) + for (i = 0; i < nkeys; i++) { + char * t = (char *) keys[i]; +- if (!Glob_pattern_p(t, 0)) ++ if (!(t[0] == '^' || Glob_pattern_p(t, 0))) + continue; +- xx = mireAppend(RPMMIRE_GLOB, 0, t, NULL, ++ xx = mireAppend(t[0] == '^' ? RPMMIRE_PCRE : RPMMIRE_GLOB, 0, t, NULL, + (miRE *)&psm->Tmires, &psm->nTmires); + xx = argvAdd(&psm->Tpats, t); + } +@@ -1461,7 +1464,7 @@ static rpmRC runTriggersLoop(rpmpsm psm, + const char * pattern = psm->Tpats[j]; + if (depName[nName-1] != '/') { + size_t npattern = strlen(pattern); +- depName[nName] = (pattern[npattern-1] == '/') ? '/' : '\0'; ++ depName[nName] = PATT_ISDIR(pattern, npattern) ? '/' : '\0'; + } + if (mireRegexec(mire, depName, 0) < 0) + /*@innercontinue@*/ continue; +@@ -1634,14 +1637,14 @@ assert(fi->h != NULL); + + /* If not limited to NEVRA triggers, use file/dir index. */ + if (tagno != RPMTAG_NAME) { ++ size_t nb = strlen(N); + /* XXX if trigger name ends with '/', use dirnames instead. */ +- if (N[0] == '/') +- tagno = (N[strlen(N)-1] == '/') +- ? RPMTAG_DIRNAMES : RPMTAG_FILEPATHS; ++ if (N[0] == '^' || N[0] == '/') ++ tagno = (PATT_ISDIR(N, nb)) ? RPMTAG_DIRNAMES : RPMTAG_FILEPATHS; + } + /* XXX For now, permit globs only in unversioned triggers. */ +- if ((EVR == NULL || *EVR == '\0') && Glob_pattern_p(N, 0)) +- xx = rpmdbMireApply(rpmtsGetRdb(ts), tagno, RPMMIRE_GLOB, N, &keys); ++ if ((EVR == NULL || *EVR == '\0') && (N[0] == '^' || Glob_pattern_p(N, 0))) ++ xx = rpmdbMireApply(rpmtsGetRdb(ts), tagno, N[0] == '^' ? RPMMIRE_PCRE : RPMMIRE_GLOB, N, &keys); + else + xx = argvAdd(&keys, N); + } +@@ -1657,10 +1660,10 @@ assert(fi->h != NULL); + + /* If not limited to NEVRA triggers, use file/dir index. */ + if (tagno != RPMTAG_NAME) { ++ size_t nb = strlen(Name); + /* XXX if trigger name ends with '/', use dirnames instead. */ +- if (Name[0] == '/') +- tagno = (Name[strlen(Name)-1] == '/') +- ? RPMTAG_DIRNAMES : RPMTAG_FILEPATHS; ++ if (Name[0] == '^' || Name[0] == '/') ++ tagno = PATT_ISDIR(Name, nb) ? RPMTAG_DIRNAMES : RPMTAG_FILEPATHS; + } + + mi = rpmtsInitIterator(ts, tagno, Name, 0); diff --git a/rpm-5.4.9-add-matches-as-arguments-to-triggers.patch b/rpm-5.4.9-add-matches-as-arguments-to-triggers.patch new file mode 100644 index 0000000..67322d4 --- /dev/null +++ b/rpm-5.4.9-add-matches-as-arguments-to-triggers.patch @@ -0,0 +1,135 @@ +--- rpm-5.4.9/lib/psm.c.trigger_args~ 2012-05-15 03:08:19.198093824 +0200 ++++ rpm-5.4.9/lib/psm.c 2012-05-15 03:14:25.545079818 +0200 +@@ -610,28 +610,37 @@ static int exitChroot(rpmpsm psm, int in + * @return RPMRC_OK on success + */ + static rpmRC runEmbeddedScript(rpmpsm psm, const char * sln, HE_t Phe, +- const char *script, int arg1, int arg2) ++ const char *script, int arg1, int arg2, ARGV_t matches) + /*@globals fileSystem, internalState @*/ + /*@modifies psm, fileSystem, internalState @*/ + { +- char * av[] = { NULL, NULL, NULL, NULL }; ++ char ** av = NULL; + int pwdFdno = -1; + int rootFdno = -1; + rpmRC rc = RPMRC_OK; + int xx = 0; + rpmuint32_t * ssp = NULL; + int inChroot = enterChroot(psm, &pwdFdno, &rootFdno); ++ size_t len = 4 + (matches ? argvCount(matches) : 0); + + if (psm->sstates != NULL) + ssp = psm->sstates + tag2slx(psm->scriptTag); + if (ssp != NULL) + *ssp |= (RPMSCRIPT_STATE_EMBEDDED|RPMSCRIPT_STATE_EXEC); + +- av[0] = (char *) Phe->p.argv[0]; ++ av = alloca(len * sizeof(*av)); + if (arg1 >= 0) + (void) sprintf((av[1] = (char *) alloca(32)), "%d", arg1); ++ else ++ av[1] = NULL; + if (arg2 >= 0) + (void) sprintf((av[2] = (char *) alloca(32)), "%d", arg2); ++ else ++ av[2] = NULL; ++ if (matches) ++ memcpy(&av[3], argvData(matches), argvCount(matches) * sizeof(*argvData(matches))); ++ av[len-1] = NULL; ++ + + #if defined(WITH_LUA) + if (!strcmp(Phe->p.argv[0], "")) { +@@ -776,7 +785,7 @@ static const char * ldconfig_path = "/sb + * @return RPMRC_OK on success + */ + static rpmRC runScript(rpmpsm psm, Header h, const char * sln, HE_t Phe, +- const char * script, int arg1, int arg2) ++ const char * script, int arg1, int arg2, ARGV_t matches) + /*@globals ldconfig_done, rpmGlobalMacroContext, h_errno, + fileSystem, internalState@*/ + /*@modifies psm, ldconfig_done, rpmGlobalMacroContext, +@@ -843,7 +852,7 @@ assert(he->p.str != NULL); + rpmlog(RPMLOG_DEBUG, + D_("%s: %s(%s) running %s scriptlet.\n"), + psm->stepName, tag2sln(psm->scriptTag), NVRA, Phe->p.argv[0]); +- rc = runEmbeddedScript(psm, sln, Phe, body, arg1, arg2); ++ rc = runEmbeddedScript(psm, sln, Phe, body, arg1, arg2, matches); + #endif + goto exit; + } +@@ -870,12 +879,12 @@ assert(he->p.str != NULL); + (F_ISSET(psm, UNORDERED) ? "a" : "")); + + if (Phe->p.argv == NULL) { +- argv = (const char **) alloca(5 * sizeof(*argv)); ++ argv = alloca(5 + (matches ? argvCount(matches) : 0 ) * sizeof(*argv)); + argv[0] = "/bin/sh"; + argc = 1; + ldconfig_done = 0; + } else { +- argv = (const char **) alloca((Phe->c + 4) * sizeof(*argv)); ++ argv = alloca((Phe->c + 4) + (matches ? argvCount(matches) : 0 ) * sizeof(*argv)); + memcpy(argv, Phe->p.argv, Phe->c * sizeof(*argv)); + argc = Phe->c; + ldconfig_done = (ldconfig_path && !strcmp(argv[0], ldconfig_path) +@@ -959,6 +968,10 @@ assert(he->p.str != NULL); + sprintf(av, "%d", arg2); + argv[argc++] = av; + } ++ if (matches) { ++ memcpy(&argv[argc], argvData(matches), argvCount(matches) * sizeof(*argvData(matches))); ++ argc += argvCount(matches); ++ } + } + + argv[argc] = NULL; +@@ -1199,7 +1212,7 @@ assert(fi->h != NULL); + Phe->p.argv[0] = argv0 = rpmExpand(Phe->p.argv[0], NULL); + + rc = runScript(psm, fi->h, tag2sln(psm->scriptTag), Phe, +- She->p.str, psm->scriptArg, -1); ++ She->p.str, psm->scriptArg, -1, NULL); + + exit: + argv0 = _free(argv0); +@@ -1280,6 +1293,7 @@ static rpmRC handleOneTrigger(const rpmp + while ((i = rpmdsNext(Tds)) >= 0) { + rpmuint32_t Flags = rpmdsFlags(Tds); + char * depName; ++ ARGV_t matches = NULL; + int bingo; + + /* Skip triggers that are not in this context. */ +@@ -1313,7 +1327,7 @@ static rpmRC handleOneTrigger(const rpmp + if (xx < 0) + /*@innercontinue@*/ continue; + bingo = 1; +- /*@innerbreak@*/ break; ++ argvAdd(&matches, N); + } + (void)rpmdsFree(ds); + ds = NULL; +@@ -1347,7 +1361,6 @@ static rpmRC handleOneTrigger(const rpmp + continue; + + /* Coerce strings into header argv return. */ +- /* XXX FIXME: permit trigger scripts with arguments. */ + { int index = Ihe->p.ui32p[i]; + const char * s = Phe->p.argv[index]; + char * t; +@@ -1362,11 +1375,12 @@ static rpmRC handleOneTrigger(const rpmp + *t = '\0'; + + if (runScript(psm, triggeredH, "%trigger", he, +- She->p.argv[index], arg1, arg2)) ++ She->p.argv[index], arg1, arg2, matches)) + rc = RPMRC_FAIL; + + he->p.ptr = _free(he->p.ptr); + } ++ argvFree(matches); + } + + mire = mireFree(mire); diff --git a/rpm-5.4.9-add-support-for-using-rpmdsMerge-with-filepath-tags.patch b/rpm-5.4.9-add-support-for-using-rpmdsMerge-with-filepath-tags.patch new file mode 100644 index 0000000..bfcc7c5 --- /dev/null +++ b/rpm-5.4.9-add-support-for-using-rpmdsMerge-with-filepath-tags.patch @@ -0,0 +1,84 @@ +--- rpm-5.4.9/lib/rpmds.c.ds_merge~ 2012-05-15 03:43:11.000000000 +0200 ++++ rpm-5.4.9/lib/rpmds.c 2012-05-15 03:46:37.823554837 +0200 +@@ -973,21 +973,24 @@ static rpmds rpmdsDup(const rpmds ods) + : rpmdsDupArgv(ods->N, ods->Count) ); + + /* XXX rpm prior to 3.0.2 did not always supply EVR and Flags. */ ++ if (ods->tagN != RPMTAG_BASENAMES && ++ ods->tagN != RPMTAG_DIRNAMES && ++ ods->tagN != RPMTAG_FILEPATHS) { + assert(ods->EVR != NULL); + assert(ods->Flags != NULL); +- +- nb = (ds->Count+1) * sizeof(*ds->EVR); +- ds->EVR = (const char **) (ds->h != NULL +- ? memcpy(xmalloc(nb), ods->EVR, nb) +- : rpmdsDupArgv(ods->EVR, ods->Count) ); +- +- nb = (ds->Count * sizeof(*ds->Flags)); +- ds->Flags = (evrFlags *) (ds->h != NULL +- ? ods->Flags +- : memcpy(xmalloc(nb), ods->Flags, nb) ); +- ds->nopromote = ods->nopromote; +-/*@-assignexpose@*/ +- ds->EVRcmp = ods->EVRcmp;; ++ nb = (ds->Count+1) * sizeof(*ds->EVR); ++ ds->EVR = (ds->h != NULL ++ ? memcpy(xmalloc(nb), ods->EVR, nb) ++ : rpmdsDupArgv(ods->EVR, ods->Count) ); ++ ++ nb = (ds->Count * sizeof(*ds->Flags)); ++ ds->Flags = (ds->h != NULL ++ ? ods->Flags ++ : memcpy(xmalloc(nb), ods->Flags, nb) ); ++ ds->nopromote = ods->nopromote; ++ /*@-assignexpose@*/ ++ ds->EVRcmp = ods->EVRcmp; ++ } + /*@=assignexpose@*/ + + /*@-compmempass@*/ /* FIX: ds->Flags is kept, not only */ +@@ -1075,24 +1078,28 @@ save = ods->i; + + /* XXX rpm prior to 3.0.2 did not always supply EVR and Flags. */ + /*@-nullderef -nullpass -nullptrarith @*/ ++ if (ds->tagN != RPMTAG_BASENAMES && ++ ds->tagN != RPMTAG_DIRNAMES && ++ ds->tagN != RPMTAG_FILEPATHS) { + assert(ods->EVR != NULL); + assert(ods->Flags != NULL); + +- for (j = ds->Count; j > (int)ds->u; j--) +- ds->EVR[j] = ds->EVR[j-1]; +- ds->EVR[ds->u] = ods->EVR[ods->i]; +- EVR = rpmdsDupArgv(ds->EVR, ds->Count+1); +- ds->EVR = _free(ds->EVR); +- ds->EVR = EVR; +- +- Flags = (evrFlags *) xmalloc((ds->Count+1) * sizeof(*Flags)); +- if (ds->u > 0) +- memcpy(Flags, ds->Flags, ds->u * sizeof(*Flags)); +- if (ds->u < ds->Count) +- memcpy(Flags + ds->u + 1, ds->Flags + ds->u, (ds->Count - ds->u) * sizeof(*Flags)); +- Flags[ds->u] = ods->Flags[ods->i]; +- ds->Flags = _free(ds->Flags); +- ds->Flags = Flags; ++ for (j = ds->Count; j > (int)ds->u; j--) ++ ds->EVR[j] = ds->EVR[j-1]; ++ ds->EVR[ds->u] = ods->EVR[ods->i]; ++ EVR = rpmdsDupArgv(ds->EVR, ds->Count+1); ++ ds->EVR = _free(ds->EVR); ++ ds->EVR = EVR; ++ ++ Flags = xmalloc((ds->Count+1) * sizeof(*Flags)); ++ if (ds->u > 0) ++ memcpy(Flags, ds->Flags, ds->u * sizeof(*Flags)); ++ if (ds->u < ds->Count) ++ memcpy(Flags + ds->u + 1, ds->Flags + ds->u, (ds->Count - ds->u) * sizeof(*Flags)); ++ Flags[ds->u] = ods->Flags[ods->i]; ++ ds->Flags = _free(ds->Flags); ++ ds->Flags = Flags; ++ } + /*@=nullderef =nullpass =nullptrarith @*/ + + ds->i = -1; 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-disable_internal_dependency_generator.patch b/rpm-5.4.9-disable_internal_dependency_generator.patch new file mode 100644 index 0000000..e5a1005 --- /dev/null +++ b/rpm-5.4.9-disable_internal_dependency_generator.patch @@ -0,0 +1,11 @@ +--- rpm-5.4.9.orig/macros/mandriva.in 2012-05-08 07:06:12.000000000 +0400 ++++ rpm-5.4.9/macros/mandriva.in 2012-06-15 21:08:21.855422073 +0400 +@@ -268,7 +268,7 @@ + #%__check_multiarch_files @USRLIBRPM@/check-multiarch-files %{buildroot} + + # Use internal dependency generator rather than external helpers? +-%_use_internal_dependency_generator 1 ++%_use_internal_dependency_generator 0 + # TODO: merge relevant changes into rpm version rather than using our own + %__perl_provides @USRLIBRPM@/@RPMCANONVENDOR@/perl.prov + %__perl_requires @USRLIBRPM@/@RPMCANONVENDOR@/perl.req diff --git a/rpm-5.4.9-dlopen-embedded-interpreters.patch b/rpm-5.4.9-dlopen-embedded-interpreters.patch new file mode 100644 index 0000000..eb576d8 --- /dev/null +++ b/rpm-5.4.9-dlopen-embedded-interpreters.patch @@ -0,0 +1,924 @@ +--- rpm-5.4.9/build/parseScript.c.dlopen~ 2012-04-15 17:04:14.000000000 +0200 ++++ rpm-5.4.9/build/parseScript.c 2012-05-15 04:55:00.670796662 +0200 +@@ -305,6 +305,12 @@ int parseScript(Spec spec, int parsePart + iob = rpmiobRTrim(iob); + p = rpmiobStr(iob); + ++#if __WORDSIZE == 64 /* XXX lame, whatever.. :p */ ++#define SO_EXT "()(64bit)" ++#else ++#define SO_EXT "" ++#endif ++ + #ifdef WITH_LUA + if (!strcmp(progArgv[0], "")) { + rpmlua lua = NULL; /* Global state. */ +@@ -338,18 +344,21 @@ int parseScript(Spec spec, int parsePart + if (!strcmp(progArgv[0], "")) { + (void) rpmlibNeedsFeature(pkg->header, + "BuiltinPerlScripts", "5.2-1"); ++ addReqProv(NULL, pkg->header, RPMTAG_REQUIRENAME, "rpmperl.so" SO_EXT, NULL, RPMSENSE_INTERP, 0); + } else + #endif + #ifdef WITH_PYTHONEMBED + if (!strcmp(progArgv[0], "")) { + (void) rpmlibNeedsFeature(pkg->header, + "BuiltinPythonScripts", "5.2-1"); ++ addReqProv(NULL, pkg->header, RPMTAG_REQUIRENAME, "rpmpython.so" SO_EXT, NULL, RPMSENSE_INTERP, 0); + } else + #endif + #ifdef WITH_RUBYEMBED + if (!strcmp(progArgv[0], "")) { + (void) rpmlibNeedsFeature(pkg->header, + "BuiltinRubyScripts", "5.2-1"); ++ addReqProv(NULL, pkg->header, RPMTAG_REQUIRENAME, "rpmruby.so" SO_EXT, NULL, RPMSENSE_INTERP, 0); + } else + #endif + #ifdef WITH_SEMANAGE +@@ -368,12 +377,14 @@ int parseScript(Spec spec, int parsePart + if (!strcmp(progArgv[0], "")) { + (void) rpmlibNeedsFeature(pkg->header, + "BuiltinSquirrelScripts", "5.2-1"); ++ addReqProv(NULL, pkg->header, RPMTAG_REQUIRENAME, "rpmsquirrel.so" SO_EXT, NULL, RPMSENSE_INTERP, 0); + } else + #endif + #ifdef WITH_TCL + if (!strcmp(progArgv[0], "")) { + (void) rpmlibNeedsFeature(pkg->header, + "BuiltinTclScripts", "5.2-1"); ++ addReqProv(NULL, pkg->header, RPMTAG_REQUIRENAME, "rpmtcl.so" SO_EXT, NULL, RPMSENSE_INTERP, 0); + } else + #endif + if (progArgv[0][0] == '<') { +--- rpm-5.4.9/configure.ac.dlopen~ 2012-05-15 04:55:00.493795702 +0200 ++++ rpm-5.4.9/configure.ac 2012-05-15 04:55:00.671796667 +0200 +@@ -1719,44 +1719,95 @@ RPM_CHECK_LIB( + AC_SUBST(WITH_CUDF_CUDFTOOL) + + dnl # Perl ExtUtils::Embed ++WITH_PERL_INCDIR="`perl -MExtUtils::Embed -e perl_inc| sed -e 's#^ -I##' -e 's# ##g'`" ++WITH_PERL_LIB="`perl -MConfig -e 'print \"$Config{archlibexp}/CORE/\"'`" ++WITH_PERL_CFLAGS="`perl -MExtUtils::Embed -e ccopts`" ++WITH_PERL_LDFLAGS="`perl -MExtUtils::Embed -e ldopts`" ++export LD_RUN_PATH=$WITH_PERL_LIB ++export LIBRARY_PATH=$LD_RUN_PATH ++export C_INCLUDE_PATH=$WITH_PERL_INCDIR + RPM_CHECK_LIB( + [Perl ExtUtils::Embed], [perlembed], + [perl], [perl_alloc], [EXTERN.h], + [no,external:none], [], +- [ +- ], []) ++ [ AM_CONDITIONAL( ++ [WITH_PERLEMBED], ++ [true]) ++ ], ++ [ AM_CONDITIONAL( ++ [WITH_PERLEMBED], ++ [false]) ++ ]) ++LIBS="`echo $LIBS|sed -e s/-lperl//g`" ++AC_SUBST(WITH_PERL_CFLAGS) ++AC_SUBST(WITH_PERL_LDFLAGS) ++unset LD_RUN_PATH ++unset LIBRARY_PATH ++unset C_INCLUDE_PATH + ++export C_INCLUDE_PATH=$WITH_PYTHON_INCDIR + dnl # Python embedding + RPM_CHECK_LIB( + [Python embedding], [pythonembed], +- [python2.7 python2.6 python2.5 python2.4], [Py_Initialize], [Python.h], ++ [python2.7], [Py_Initialize], [Python.h], + [no,external:none], [], +- [ +- ], []) ++ [ AM_CONDITIONAL( ++ [WITH_PYTHONEMBED], ++ [true]) ++ ], ++ [ AM_CONDITIONAL( ++ [WITH_PYTHONEMBED], ++ [false]) ++ ]) ++unset C_INCLUDE_PATH + + dnl # Ruby + WITH_RUBY_SUBDIR="" +-WITH_RUBY_CPPFLAGS="" ++WITH_RUBY_CPPFLAGS="`pkg-config --cflags ruby-1.9`" ++WITH_RUBY_LDFLAGS="`pkg-config --libs ruby-1.9`" + WITH_RUBY_VENDORARCHDIR="" ++export C_INCLUDE_PATH="`pkg-config --cflags-only-I ruby-1.9|sed -e 's#-I##g' -e 's# /#:/#g' -e 's# ##g'`" + RPM_CHECK_LIB( + [Ruby], [ruby], + [ruby], [ruby_init], [ruby.h], + [no,external:none], [], + [ AC_DEFINE(WITH_RUBYEMBED, 1, [Define to 1 if you want embedded Ruby]) + WITH_RUBY_SUBDIR=ruby +- ], []) ++ AM_CONDITIONAL( ++ [WITH_RUBYEMBED], ++ [true]) ++ ], ++ [ AM_CONDITIONAL( ++ [WITH_RUBYEMBED], ++ [false]) ++ ]) ++LIBS="`echo $LIBS|sed -e s/-lruby//g`" + AC_SUBST(WITH_RUBY_CPPFLAGS) ++AC_SUBST(WITH_RUBY_LDFLAGS) + AC_SUBST(WITH_RUBY_SUBDIR) + AC_SUBST(WITH_RUBY_VENDORARCHDIR) ++unset C_INCLUDE_PATH + + + dnl # Squirrel ++export C_INCLUDE_PATH="/usr/include/squirrel" ++SQUIRREL_CPPFLAGS="-I$C_INCLUDE_PATH" ++SQUIRREL_LIBS="-lsquirrel" + RPM_CHECK_LIB( + [Squirrel], [squirrel], + [squirrel], [sq_open], [squirrel.h], + [no,external:none], [], +- [ +- ], []) ++ [ AM_CONDITIONAL( ++ [WITH_SQUIRREL], ++ [true]) ++ ], ++ [ AM_CONDITIONAL( ++ [WITH_SQUIRREL], ++ [false]) ++ ]) ++AC_SUBST(SQUIRREL_CPPFLAGS) ++AC_SUBST(SQUIRREL_LIBS) ++unset C_INCLUDE_PATH + + dnl # Tcl (should tcl8.4 be supported too?) + WITH_TCL_SUBDIR="" +@@ -1764,8 +1815,14 @@ RPM_CHECK_LIB( + [Tcl], [tcl], + [tcl8.6 tcl8.5 tcl], [Tcl_CreateInterp], [tcl.h], + [no,external:none], [], +- [ +- ], []) ++ [ AM_CONDITIONAL( ++ [WITH_TCL], ++ [true]) ++ ], ++ [ AM_CONDITIONAL( ++ [WITH_TCL], ++ [false]) ++ ]) + AC_SUBST(WITH_TCL_SUBDIR) + + dnl # FICL +--- rpm-5.4.9/rpmio/Makefile.am.dlopen~ 2012-04-16 22:53:32.000000000 +0200 ++++ rpm-5.4.9/rpmio/Makefile.am 2012-05-15 04:55:00.671796667 +0200 +@@ -92,8 +92,8 @@ RPM_LDADD_COMMON = \ + $(top_builddir)/rpmdb/librpmdb.la \ + $(RPMIO_LDADD_COMMON) + +-#pkglibdir = @USRLIBRPM@ +-#pkglib_LTLIBRARIES = libsqlio.la ++zpkglibdir = @USRLIBRPM@/lib ++zpkglib_LTLIBRARIES = #libsqlio.la + + pkgincdir = $(pkgincludedir)$(WITH_PATH_VERSIONED_SUFFIX) + pkginc_HEADERS = argv.h mire.h rpmzlog.h yarn.h \ +@@ -210,6 +210,52 @@ endif + #librpmio.la: $(librpmio_la_OBJECTS) $(librpmio_la_DEPENDENCIES) + # $(librpmio_la_LINK) -rpath $(usrlibdir) $(librpmio_la_OBJECTS) $(librpmio_la_LIBADD) + ++if WITH_PERLEMBED ++librpmio_la_LDFLAGS += -Wl,-rpath=$(zpkglibdir) ++zpkglib_LTLIBRARIES += rpmperl.la ++rpmperl_la_SOURCES = rpmperl.c ++rpmperl_la_CPPFLAGS = -DMODULE_EMBED ++rpmperl_la_CFLAGS = $(WITH_PERL_CFLAGS) ++rpmperl_la_LDFLAGS = -module -avoid-version $(WITH_PERL_LDFLAGS) ++rpmperl_la_LIBADD = $(RPMIO_LDADD_COMMON) ++endif ++ ++if WITH_PYTHONEMBED ++librpmio_la_LDFLAGS += -Wl,-rpath=$(zpkglibdir) ++zpkglib_LTLIBRARIES += rpmpython.la ++rpmpython_la_SOURCES = rpmpython.c ++rpmpython_la_CPPFLAGS = -I@WITH_PYTHON_INCDIR@ -DMODULE_EMBED ++rpmpython_la_LDFLAGS = -module -avoid-version ++rpmpython_la_LIBADD = $(RPMIO_LDADD_COMMON) ++endif ++ ++if WITH_RUBYEMBED ++librpmio_la_LDFLAGS += -Wl,-rpath=$(zpkglibdir) ++zpkglib_LTLIBRARIES += rpmruby.la ++rpmruby_la_SOURCES = rpmruby.c ++rpmruby_la_CPPFLAGS = $(WITH_RUBY_CPPFLAGS) -DMODULE_EMBED ++rpmruby_la_LDFLAGS = -module -avoid-version $(WITH_RUBY_LDFLAGS) ++rpmruby_la_LIBADD = $(RPMIO_LDADD_COMMON) ++endif ++ ++if WITH_SQUIRREL ++librpmio_la_LDFLAGS += -Wl,-rpath=$(zpkglibdir) ++zpkglib_LTLIBRARIES += rpmsquirrel.la ++rpmsquirrel_la_SOURCES = rpmsquirrel.c ++rpmsquirrel_la_CPPFLAGS = $(SQUIRREL_CPPFLAGS) -DMODULE_EMBED ++rpmsquirrel_la_LDFLAGS = -module -avoid-version ++rpmsquirrel_la_LIBADD = $(RPMIO_LDADD_COMMON) $(SQUIRREL_LIBS) ++endif ++ ++if WITH_TCL ++librpmio_la_LDFLAGS += -Wl,-rpath=$(zpkglibdir) ++zpkglib_LTLIBRARIES += rpmtcl.la ++rpmtcl_la_SOURCES = rpmtcl.c ++rpmtcl_la_CPPFLAGS = -DMODULE_EMBED ++rpmtcl_la_LDFLAGS = -module -avoid-version ++rpmtcl_la_LIBADD = $(RPMIO_LDADD_COMMON) -ltcl ++endif ++ + #libsqlio_la_SOURCES = libsqlio.c + #libsqlio_la_LIBADD = $(RPMIO_LDADD_COMMON) + +--- rpm-5.4.9/rpmio/rpmperl.c.dlopen~ 2012-04-15 23:20:53.000000000 +0200 ++++ rpm-5.4.9/rpmio/rpmperl.c 2012-05-15 04:55:00.672796672 +0200 +@@ -7,9 +7,15 @@ + #include "rpmperl.h" + #include + +-#if defined(WITH_PERLEMBED) ++#if defined(MODULE_EMBED) + #include + #include ++#undef WITH_PERLEMBED ++#endif ++ ++#if defined(WITH_PERLEMBED) ++#include ++#include + #endif + + #undef UNLIKELY /* XXX everyone gotta be different */ +@@ -21,6 +27,12 @@ int _rpmperl_debug = 0; + /*@unchecked@*/ /*@relnull@*/ + rpmperl _rpmperlI = NULL; + ++#if defined(WITH_PERLEMBED) ++static int dlopened = 0; ++static rpmperl (*rpmperlNew_p) (char ** av, uint32_t flags); ++static rpmRC (*rpmperlRun_p) (rpmperl perl, const char * str, const char ** resultp); ++#endif ++ + #define my_perl ((PerlInterpreter *)perl->I) + + static void rpmperlFini(void * _perl) +@@ -29,7 +41,7 @@ static void rpmperlFini(void * _perl) + { + rpmperl perl = (rpmperl) _perl; + +-#if defined(WITH_PERLEMBED) ++#if defined(MODULE_EMBED) + PERL_SET_CONTEXT(my_perl); + PL_perl_destruct_level = 1; + perl_destruct(my_perl); +@@ -57,7 +69,7 @@ static rpmperl rpmperlGetPool(/*@null@*/ + return (rpmperl) rpmioGetPool(pool, sizeof(*perl)); + } + +-#if defined(WITH_PERLEMBED) ++#if defined(MODULE_EMBED) + EXTERN_C void xs_init (PerlInterpreter * _my_perl PERL_UNUSED_DECL); + + EXTERN_C void boot_DynaLoader (PerlInterpreter* _my_perl, CV* cv); +@@ -90,14 +102,40 @@ static rpmperl rpmperlI(void) + return _rpmperlI; + } + ++#if defined(WITH_PERLEMBED) ++static void loadModule(void) { ++ const char librpmperl[] = "rpmperl.so"; ++ void *h; ++ ++ h = dlopen (librpmperl, RTLD_NOW|RTLD_GLOBAL); ++ if (!h) ++ { ++ rpmlog(RPMLOG_WARNING, D_("Unable to open \"%s\" (%s), " ++ "embedded perl will not be available\n"), ++ librpmperl, dlerror()); ++ } ++ else if(!((rpmperlNew_p = dlsym(h, "rpmperlNew")) ++ && (rpmperlRun_p = dlsym(h, "rpmperlRun")))) { ++ rpmlog(RPMLOG_WARNING, D_("Opened library \"%s\" is incompatible (%s), " ++ "embedded perl will not be available\n"), ++ librpmperl, dlerror()); ++ if (dlclose (h)) ++ rpmlog(RPMLOG_WARNING, "Error closing library \"%s\": %s", librpmperl, ++ dlerror()); ++ } else ++ dlopened = 1; ++} ++#endif ++ + rpmperl rpmperlNew(char ** av, uint32_t flags) + { +- rpmperl perl = +-#ifdef NOTYET +- (flags & 0x80000000) ? rpmperlI() : +-#endif +- rpmperlGetPool(_rpmperlPool); + #if defined(WITH_PERLEMBED) ++ if (!dlopened) loadModule(); ++ if (dlopened) return rpmperlNew_p(av, flags); ++#endif ++ rpmperl perl = (flags & 0x80000000) ++ ? rpmperlI() : rpmperlGetPool(_rpmperlPool); ++#if defined(MODULE_EMBED) + static const char * _av[] = { "rpmperl", NULL }; + static int initialized = 0; + ARGV_t argv = NULL; +@@ -143,6 +181,9 @@ rpmperl rpmperlNew(char ** av, uint32_t + + rpmRC rpmperlRun(rpmperl perl, const char * str, const char ** resultp) + { ++#if defined(WITH_PERLEMBED) ++ if (dlopened) return rpmperlRun_p(perl, str, resultp); ++#endif + rpmRC rc = RPMRC_FAIL; + + if (_rpmperl_debug) +@@ -151,7 +192,7 @@ fprintf(stderr, "==> %s(%p,%s)\n", __FUN + if (perl == NULL) perl = rpmperlI(); + + if (str != NULL) { +-#if defined(WITH_PERLEMBED) ++#if defined(MODULE_EMBED) + STRLEN n_a; + SV * retSV; + +--- rpm-5.4.9/rpmio/rpmpython.c.dlopen~ 2012-04-16 22:53:33.000000000 +0200 ++++ rpm-5.4.9/rpmio/rpmpython.c 2012-05-15 04:55:45.393039102 +0200 +@@ -8,9 +8,15 @@ + #define _RPMPYTHON_INTERNAL + #include "rpmpython.h" + +-#if defined(WITH_PYTHONEMBED) ++#if defined(MODULE_EMBED) + #include + #include ++#undef WITH_PYTHONEMBED ++#endif ++ ++#if defined(WITH_PYTHONEMBED) ++#include ++#include + #endif + + #include "debug.h" +@@ -21,13 +27,20 @@ int _rpmpython_debug = 0; + /*@unchecked@*/ /*@relnull@*/ + rpmpython _rpmpythonI = NULL; + ++#if defined(WITH_PYTHONEMBED) ++static int dlopened = 0; ++static rpmpython (*rpmpythonNew_p) (char ** av, uint32_t flags); ++static rpmRC (*rpmpythonRunFile_p) (rpmpython python, const char * fn, const char ** resultp); ++static rpmRC (*rpmpythonRun_p) (rpmpython python, const char * str, const char ** resultp); ++#endif ++ + static void rpmpythonFini(void * _python) + /*@globals fileSystem @*/ + /*@modifies *_python, fileSystem @*/ + { + rpmpython python = (rpmpython) _python; + +-#if defined(WITH_PYTHONEMBED) ++#if defined(MODULE_EMBED) + Py_Finalize(); + #endif + python->I = NULL; +@@ -51,7 +64,7 @@ static rpmpython rpmpythonGetPool(/*@nul + } + + /*@unchecked@*/ +-#if defined(WITH_PYTHONEMBED) ++#if defined(MODULE_EMBED) + static const char * _rpmpythonI_init = "\ + import sys\n\ + from cStringIO import StringIO\n\ +@@ -68,10 +81,40 @@ static rpmpython rpmpythonI(void) + return _rpmpythonI; + } + ++#if defined(WITH_PYTHONEMBED) ++static void loadModule(void) { ++ const char librpmpython[] = "rpmpython.so"; ++ void *h; ++ ++ h = dlopen (librpmpython, RTLD_NOW|RTLD_GLOBAL); ++ if (!h) ++ { ++ rpmlog(RPMLOG_WARNING, D_("Unable to open \"%s\" (%s), " ++ "embedded python will not be available\n"), ++ librpmpython, dlerror()); ++ } ++ else if(!((rpmpythonNew_p = dlsym(h, "rpmpythonNew")) ++ && (rpmpythonRunFile_p = dlsym(h, "rpmpythonRunFile")) ++ && (rpmpythonRun_p = dlsym(h, "rpmpythonRun")))) { ++ rpmlog(RPMLOG_WARNING, D_("Opened library \"%s\" is incompatible (%s), " ++ "embedded python will not be available\n"), ++ librpmpython, dlerror()); ++ if (dlclose (h)) ++ rpmlog(RPMLOG_WARNING, "Error closing library \"%s\": %s", librpmpython, ++ dlerror()); ++ } else ++ dlopened = 1; ++} ++#endif ++ + rpmpython rpmpythonNew(char ** av, uint32_t flags) + { +- static char * _av[] = { (char *) "rpmpython", NULL }; + #if defined(WITH_PYTHONEMBED) ++ if (!dlopened) loadModule(); ++ if (dlopened) return rpmpythonNew_p(av, flags); ++#endif ++ static char * _av[] = { "rpmpython", NULL }; ++#if defined(MODULE_EMBED) + int initialize = (!(flags & 0x80000000) || _rpmpythonI == NULL); + #endif + rpmpython python = (flags & 0x80000000) +@@ -82,7 +125,7 @@ fprintf(stderr, "==> %s(%p, %d) python % + + if (av == NULL) av = _av; + +-#if defined(WITH_PYTHONEMBED) ++#if defined(MODULE_EMBED) + if (!Py_IsInitialized()) { + Py_SetProgramName((char *)_av[0]); + Py_Initialize(); +@@ -107,6 +150,9 @@ fprintf(stderr, "==========\n%s\n======= + + rpmRC rpmpythonRunFile(rpmpython python, const char * fn, const char ** resultp) + { ++#if defined(WITH_PYTHONEMBED) ++ if (dlopened) return rpmpythonRunFile_p(python, fn, resultp); ++#endif + rpmRC rc = RPMRC_FAIL; + + +@@ -116,7 +162,7 @@ fprintf(stderr, "==> %s(%p,%s)\n", __FUN + if (python == NULL) python = rpmpythonI(); + + if (fn != NULL) { +-#if defined(WITH_PYTHONEMBED) ++#if defined(MODULE_EMBED) + const char * pyfn = ((fn == NULL || !strcmp(fn, "-")) ? "" : fn); + FILE * pyfp = (!strcmp(pyfn, "") ? stdin : fopen(fn, "rb")); + int closeit = (pyfp != stdin); +@@ -157,6 +203,9 @@ static const char * rpmpythonSlurp(const + + rpmRC rpmpythonRun(rpmpython python, const char * str, const char ** resultp) + { ++#if defined(WITH_PYTHONEMBED) ++ if (dlopened) return rpmpythonRun_p(python, str, resultp); ++#endif + rpmRC rc = RPMRC_FAIL; + + if (_rpmpython_debug) +@@ -166,7 +215,7 @@ fprintf(stderr, "==> %s(%p,%s,%p)\n", __ + + if (str != NULL) { + const char * val = rpmpythonSlurp(str); +-#if defined(WITH_PYTHONEMBED) ++#if defined(MODULE_EMBED) + PyCompilerFlags cf = { 0 }; + PyObject * m = PyImport_AddModule("__main__"); + PyObject * d = (m ? PyModule_GetDict(m) : NULL); +--- rpm-5.4.9/rpmio/rpmruby.c.dlopen~ 2012-04-15 23:20:53.000000000 +0200 ++++ rpm-5.4.9/rpmio/rpmruby.c 2012-05-15 04:55:00.673796677 +0200 +@@ -1,17 +1,26 @@ + #include "system.h" + #include + +-#if defined(WITH_RUBYEMBED) ++#if defined(MODULE_EMBED) + + /* Make sure Ruby's fun stuff has its own xmalloc & Co functions available */ + #undef xmalloc + #undef xcalloc + #undef xrealloc + ++/* XXX avoid conflicting definitions in ruby.h */ ++#define HAVE_SETPROCTITLE 1 ++ + #include ++#undef WITH_RUBYEMBED + + #endif + ++#if defined(WITH_RUBYEMBED) ++#include ++#include ++#endif ++ + #define _RPMRUBY_INTERNAL 1 + #include "rpmruby.h" + +@@ -32,7 +41,7 @@ static void rpmrubyFini(void *_ruby) + { + rpmruby ruby = (rpmruby) _ruby; + +-#if defined(WITH_RUBYEMBED) ++# if defined(MODULE_EMBED) + ruby_cleanup(0); + #endif + ruby->I = NULL; +@@ -88,20 +97,51 @@ static rpmruby rpmrubyI() + return _rpmrubyI; + } + ++#if defined(WITH_RUBYEMBED) ++static void loadModule(void) { ++ const char librpmruby[] = "rpmruby.so"; ++ void *h; ++ ++ h = dlopen (librpmruby, RTLD_NOW|RTLD_GLOBAL); ++ if (!h) ++ { ++ rpmlog(RPMLOG_WARNING, D_("Unable to open \"%s\" (%s), " ++ "embedded ruby will not be available\n"), ++ librpmruby, dlerror()); ++ } ++ else if(!((rpmrubyNew_p = dlsym(h, "rpmrubyNew")) ++ && (rpmrubyRun_p = dlsym(h, "rpmrubyRun")))) { ++ rpmlog(RPMLOG_WARNING, D_("Opened library \"%s\" is incompatible (%s), " ++ "embedded ruby will not be available\n"), ++ librpmruby, dlerror()); ++ if (dlclose (h)) ++ rpmlog(RPMLOG_WARNING, "Error closing library \"%s\": %s", librpmruby, ++ dlerror()); ++ } else ++ dlopened = 1; ++} ++#endif ++ + rpmruby rpmrubyNew(char **av, uint32_t flags) + { ++#if defined(WITH_RUBYEMBED) ++ if (!dlopened) loadModule(); ++ if (dlopened) return rpmrubyNew_p(av, flags); ++#endif ++ + static const char *_av[] = { "rpmruby", NULL }; + + /* XXX FIXME: recurse like every other embedded interpreter. */ + if (_rpmrubyI) + return _rpmrubyI; + +- rpmruby ruby = rpmrubyGetPool(_rpmrubyPool); ++ rpmruby ruby = (flags & 0x80000000) ++ ? rpmrubyI() : rpmrubyGetPool(_rpmrubyPool); + + if (av == NULL) + av = (char **) _av; + +-#if defined(WITH_RUBYEMBED) ++# if defined(MODULE_EMBED) + RUBY_INIT_STACK; + ruby_init(); + ruby_init_loadpath(); +@@ -114,9 +154,18 @@ rpmruby rpmrubyNew(char **av, uint32_t f + return rpmrubyLink(ruby); + } + ++#if defined(WITH_RUBYEMBED) ++static int dlopened = 0; ++static rpmruby (*rpmrubyNew_p) (char ** av, uint32_t flags); ++static rpmRC (*rpmrubyRun_p) (rpmruby ruby, const char * str, const char ** resultp); ++#endif + + rpmRC rpmrubyRun(rpmruby ruby, const char *str, const char **resultp) + { ++#if defined(WITH_RUBYEMBED) ++ if (dlopened) return rpmrubyRun_p(ruby, str, resultp); ++#endif ++ + rpmRC rc = RPMRC_FAIL; + + if (_rpmruby_debug) +@@ -125,7 +174,7 @@ fprintf(stderr, "==> %s(%p,%s,%p)\n", __ + if (ruby == NULL) + ruby = rpmrubyI(); + +-#if defined(WITH_RUBYEMBED) ++#if defined(MODULE_EMBED) + if (str) { + int state = -1; + ruby->state = rb_eval_string_protect(str, &state); +--- rpm-5.4.9/rpmio/rpmsquirrel.c.dlopen~ 2012-04-15 23:20:53.000000000 +0200 ++++ rpm-5.4.9/rpmio/rpmsquirrel.c 2012-05-15 04:55:00.673796677 +0200 +@@ -3,9 +3,16 @@ + + #include + +-#ifdef WITH_SQUIRREL ++#if defined(MODULE_EMBED) + #include ++#undef WITH_SQUIRREL + #endif ++ ++#if defined(WITH_SQUIRREL) ++#include ++#include ++#endif ++ + #define _RPMSQUIRREL_INTERNAL + #include "rpmsquirrel.h" + +@@ -17,13 +24,20 @@ int _rpmsquirrel_debug = 0; + /*@unchecked@*/ /*@relnull@*/ + rpmsquirrel _rpmsquirrelI = NULL; + ++#if defined(WITH_SQUIRREL) ++static int dlopened = 0; ++static rpmsquirrel (*rpmsquirrelNew_p) (char ** av, uint32_t flags); ++static rpmRC (*rpmsquirrelRunFile_p) (rpmsquirrel squirrel, const char * fn, const char ** resultp); ++static rpmRC (*rpmsquirrelRun_p) (rpmsquirrel squirrel, const char * str, const char ** resultp); ++#endif ++ + static void rpmsquirrelFini(void * _squirrel) + /*@globals fileSystem @*/ + /*@modifies *_squirrel, fileSystem @*/ + { + rpmsquirrel squirrel = (rpmsquirrel) _squirrel; + +-#if defined(WITH_SQUIRREL) ++#if defined(MODULE_EMBED) + sq_close((HSQUIRRELVM)squirrel->I); + #endif + squirrel->I = NULL; +@@ -48,7 +62,7 @@ static rpmsquirrel rpmsquirrelGetPool(/* + return (rpmsquirrel) rpmioGetPool(pool, sizeof(*squirrel)); + } + +-#if defined(WITH_SQUIRREL) ++#if defined(MODULE_EMBED) + static void rpmsquirrelPrint(HSQUIRRELVM v, const SQChar *s, ...) + { + rpmsquirrel squirrel = sq_getforeignptr(v); +@@ -84,15 +98,42 @@ static rpmsquirrel rpmsquirrelI(void) + return _rpmsquirrelI; + } + ++#if defined(WITH_SQUIRREL) ++static void loadModule(void) { ++ const char librpmsquirrel[] = "rpmsquirrel.so"; ++ void *h; ++ ++ h = dlopen (librpmsquirrel, RTLD_NOW|RTLD_GLOBAL); ++ if (!h) ++ { ++ rpmlog(RPMLOG_WARNING, D_("Unable to open \"%s\" (%s), " ++ "embedded squirrel will not be available\n"), ++ librpmsquirrel, dlerror()); ++ } ++ else if(!((rpmsquirrelNew_p = dlsym(h, "rpmsquirrelNew")) ++ && (rpmsquirrelRunFile_p = dlsym(h, "rpmsquirrelRunFile")) ++ && (rpmsquirrelRun_p = dlsym(h, "rpmsquirrelRun")))) { ++ rpmlog(RPMLOG_WARNING, D_("Opened library \"%s\" is incompatible (%s), " ++ "embedded squirrel will not be available\n"), ++ librpmsquirrel, dlerror()); ++ if (dlclose (h)) ++ rpmlog(RPMLOG_WARNING, "Error closing library \"%s\": %s", librpmsquirrel, ++ dlerror()); ++ } else ++ dlopened = 1; ++} ++#endif ++ + rpmsquirrel rpmsquirrelNew(char ** av, uint32_t flags) + { +- rpmsquirrel squirrel = +-#ifdef NOTYET +- (flags & 0x80000000) ? rpmsquirrelI() : ++#if defined(WITH_SQUIRREL) ++ if (!dlopened) loadModule(); ++ if (dlopened) return rpmsquirrelNew_p(av, flags); + #endif +- rpmsquirrelGetPool(_rpmsquirrelPool); ++ rpmsquirrel squirrel = (flags & 0x80000000) ++ ? rpmsquirrelI() : rpmsquirrelGetPool(_rpmsquirrelPool); + +-#if defined(WITH_SQUIRREL) ++#if defined(MODULE_EMBED) + static const char * _av[] = { "rpmsquirrel", NULL }; + SQInteger stacksize = 1024; + HSQUIRRELVM v = sq_open(stacksize); +@@ -119,13 +160,18 @@ rpmsquirrel rpmsquirrelNew(char ** av, u + } + #endif + #endif ++#if !defined(WITH_SQUIRREL) + squirrel->iob = rpmiobNew(0); ++#endif + + return rpmsquirrelLink(squirrel); + } + + rpmRC rpmsquirrelRunFile(rpmsquirrel squirrel, const char * fn, const char ** resultp) + { ++#if defined(WITH_SQUIRREL) ++ if (dlopened) return rpmsquirrelRunFile_p(squirrel, fn, resultp); ++#endif + rpmRC rc = RPMRC_FAIL; + + if (_rpmsquirrel_debug) +@@ -145,6 +191,10 @@ fprintf(stderr, "==> %s(%p,%s)\n", __FUN + + rpmRC rpmsquirrelRun(rpmsquirrel squirrel, const char * str, const char ** resultp) + { ++#if defined(WITH_SQUIRREL) ++ if (dlopened) return rpmsquirrelRun_p(squirrel, str, resultp); ++#endif ++ + rpmRC rc = RPMRC_FAIL; + + if (_rpmsquirrel_debug) +@@ -152,7 +202,7 @@ fprintf(stderr, "==> %s(%p,%s)\n", __FUN + + if (squirrel == NULL) squirrel = rpmsquirrelI(); + +-#if defined(WITH_SQUIRREL) ++#if defined(MODULE_EMBED) + if (str != NULL) { + size_t ns = strlen(str); + if (ns > 0) { +--- rpm-5.4.9/rpmio/rpmtcl.c.dlopen~ 2012-04-15 23:20:53.000000000 +0200 ++++ rpm-5.4.9/rpmio/rpmtcl.c 2012-05-15 04:55:00.673796677 +0200 +@@ -2,9 +2,16 @@ + + #include + +-#ifdef WITH_TCL ++#if defined(MODULE_EMBED) + #include ++#undef WITH_TCL + #endif ++ ++#if defined(WITH_TCL) ++#include ++#include ++#endif ++ + #define _RPMTCL_INTERNAL + #include "rpmtcl.h" + +@@ -16,13 +23,20 @@ int _rpmtcl_debug = 0; + /*@unchecked@*/ /*@relnull@*/ + rpmtcl _rpmtclI = NULL; + ++#if defined(WITH_TCL) ++static int dlopened = 0; ++static rpmtcl (*rpmtclNew_p) (char ** av, uint32_t flags); ++static rpmRC (*rpmtclRunFile_p) (rpmtcl tcl, const char * fn, const char ** resultp); ++static rpmRC (*rpmtclRun_p) (rpmtcl tcl, const char * str, const char ** resultp); ++#endif ++ + static void rpmtclFini(void * _tcl) + /*@globals fileSystem @*/ + /*@modifies *_tcl, fileSystem @*/ + { + rpmtcl tcl = (rpmtcl) _tcl; + +-#if defined(WITH_TCL) ++#if defined(MODULE_EMBED) + Tcl_DeleteInterp((Tcl_Interp *)tcl->I); + #endif + tcl->I = NULL; +@@ -47,7 +61,7 @@ static rpmtcl rpmtclGetPool(/*@null@*/ r + return (rpmtcl) rpmioGetPool(pool, sizeof(*tcl)); + } + +-#if defined(WITH_TCL) ++#if defined(MODULE_EMBED) + static int rpmtclIOclose(ClientData CD, Tcl_Interp *I) + /*@*/ + { +@@ -122,15 +136,42 @@ static rpmtcl rpmtclI(void) + return _rpmtclI; + } + ++#if defined(WITH_TCL) ++static void loadModule(void) { ++ const char librpmtcl[] = "rpmtcl.so"; ++ void *h; ++ ++ h = dlopen (librpmtcl, RTLD_NOW|RTLD_GLOBAL); ++ if (!h) ++ { ++ rpmlog(RPMLOG_WARNING, D_("Unable to open \"%s\" (%s), " ++ "embedded tcl will not be available\n"), ++ librpmtcl, dlerror()); ++ } ++ else if(!((rpmtclNew_p = dlsym(h, "rpmtclNew")) ++ && (rpmtclRunFile_p = dlsym(h, "rpmtclRunFile")) ++ && (rpmtclRun_p = dlsym(h, "rpmtclRun")))) { ++ rpmlog(RPMLOG_WARNING, D_("Opened library \"%s\" is incompatible (%s), " ++ "embedded tcl will not be available\n"), ++ librpmtcl, dlerror()); ++ if (dlclose (h)) ++ rpmlog(RPMLOG_WARNING, "Error closing library \"%s\": %s", librpmtcl, ++ dlerror()); ++ } else ++ dlopened = 1; ++} ++#endif ++ + rpmtcl rpmtclNew(char ** av, uint32_t flags) + { +- rpmtcl tcl = +-#ifdef NOTYET +- (flags & 0x80000000) ? rpmtclI() : ++#if defined(WITH_TCL) ++ if (!dlopened) loadModule(); ++ if (dlopened) return rpmtclNew_p(av, flags); + #endif +- rpmtclGetPool(_rpmtclPool); ++ rpmtcl tcl = (flags & 0x80000000) ++ ? rpmtclI() : rpmtclGetPool(_rpmtclPool); + +-#if defined(WITH_TCL) ++#if defined(MODULE_EMBED) + static char * _av[] = { "rpmtcl", NULL }; + Tcl_Interp * tclI = Tcl_CreateInterp(); + char b[32]; +@@ -152,13 +193,18 @@ rpmtcl rpmtclNew(char ** av, uint32_t fl + tcl->tclout = (void *) tclout; + } + #endif ++#if !defined(WITH_TCL) + tcl->iob = rpmiobNew(0); ++#endif + + return rpmtclLink(tcl); + } + + rpmRC rpmtclRunFile(rpmtcl tcl, const char * fn, const char ** resultp) + { ++#if defined(WITH_TCL) ++ if (dlopened) return rpmtclRunFile_p(tcl, fn, resultp); ++#endif + rpmRC rc = RPMRC_FAIL; + + if (_rpmtcl_debug) +@@ -166,7 +212,7 @@ fprintf(stderr, "==> %s(%p,%s)\n", __FUN + + if (tcl == NULL) tcl = rpmtclI(); + +-#if defined(WITH_TCL) ++#if defined(MODULE_EMBED) + if (fn != NULL && Tcl_EvalFile((Tcl_Interp *)tcl->I, fn) == TCL_OK) { + rc = RPMRC_OK; + if (resultp) +@@ -178,6 +224,9 @@ fprintf(stderr, "==> %s(%p,%s)\n", __FUN + + rpmRC rpmtclRun(rpmtcl tcl, const char * str, const char ** resultp) + { ++#if defined(WITH_TCL) ++ if (dlopened) return rpmtclRun_p(tcl, str, resultp); ++#endif + rpmRC rc = RPMRC_FAIL; + + if (_rpmtcl_debug) +@@ -185,7 +234,7 @@ fprintf(stderr, "==> %s(%p,%s)\n", __FUN + + if (tcl == NULL) tcl = rpmtclI(); + +-#if defined(WITH_TCL) ++#if defined(MODULE_EMBED) + if (str != NULL && Tcl_Eval((Tcl_Interp *)tcl->I, str) == TCL_OK) { + rc = RPMRC_OK; + if (resultp) +--- rpm-5.4.9/ruby/Makefile.am.dlopen~ 2011-09-13 03:12:53.000000000 +0200 ++++ rpm-5.4.9/ruby/Makefile.am 2012-05-15 04:55:00.674796682 +0200 +@@ -50,8 +50,8 @@ pkgbindir = @USRLIBRPM@/bin + pkgbin_PROGRAMS = trb + pkglib_LTLIBRARIES = rpm.la + +-rpm_la_CFLAGS = -fno-strict-aliasing +-rpm_la_LDFLAGS = -module -avoid-version ++rpm_la_CFLAGS = -fno-strict-aliasing $(WITH_RUBY_CFLAGS) ++rpm_la_LDFLAGS = -module -avoid-version $(WITH_RUBY_LDFLAGS) + rpm_la_LIBADD = \ + $(top_builddir)/build/librpmbuild.la \ + $(top_builddir)/lib/librpm.la \ +--- rpm-5.4.9/ruby/system.h.dlopen~ 2010-12-01 17:09:50.000000000 +0100 ++++ rpm-5.4.9/ruby/system.h 2012-05-15 04:55:00.674796682 +0200 +@@ -2,6 +2,7 @@ + #define H_SYSTEM_RUBY + + #include "../system.h" ++#define HAVE_SETPROCTITLE 1 + + /* XXX ruby-1.8.6 grrr, ruby.h includes its own config.h too. */ + #undef PACKAGE_NAME diff --git a/rpm-5.4.9-dont-add-versioneddependency-rpmlib-feature-dependency.patch b/rpm-5.4.9-dont-add-versioneddependency-rpmlib-feature-dependency.patch new file mode 100644 index 0000000..9b62123 --- /dev/null +++ b/rpm-5.4.9-dont-add-versioneddependency-rpmlib-feature-dependency.patch @@ -0,0 +1,40 @@ +--- rpm-5.4.9/lib/rpmfc.c.no_verdepfeat~ 2012-05-15 03:02:42.578268986 +0200 ++++ rpm-5.4.9/lib/rpmfc.c 2012-05-15 03:03:46.035612993 +0200 +@@ -504,19 +504,6 @@ assert(EVR != NULL); + if (_filter_values && rpmfcMatchRegexps(mire, nmire, N, deptype)) + continue; + +- /* Add tracking dependency for versioned Provides: */ +- if (!fc->tracked && deptype == 'P' && *EVR != '\0') { +- static evrFlags _Flags = (evrFlags) +- (RPMSENSE_RPMLIB|(RPMSENSE_LESS|RPMSENSE_EQUAL)); +- ds = rpmdsSingle(RPMTAG_REQUIRENAME, +- "rpmlib(VersionedDependencies)", "3.0.3-1", +- _Flags); +- xx = rpmdsMerge(&fc->requires, ds); +- (void)rpmdsFree(ds); +- ds = NULL; +- fc->tracked = 1; +- } +- + ds = rpmdsSingle(tagN, N, EVR, Flags); + + #if defined(RPM_VENDOR_MANDRIVA) /* filter-overlapping-dependencies */ +@@ -2022,7 +2009,6 @@ rpmRC rpmfcGenerateDepends(void * _spec, + fc = rpmfcNew(); + fc->skipProv = !pkg->autoProv; + fc->skipReq = !pkg->autoReq; +- fc->tracked = 0; + + { const char * buildRootURL; + const char * buildRoot; +--- rpm-5.4.9/lib/rpmfc.h.no_verdepfeat~ 2012-04-22 19:07:07.000000000 +0200 ++++ rpm-5.4.9/lib/rpmfc.h 2012-05-15 03:02:42.609269153 +0200 +@@ -76,7 +76,6 @@ struct rpmfc_s { + size_t ix; /*!< current file index */ + int skipProv; /*!< Don't auto-generate Provides:? */ + int skipReq; /*!< Don't auto-generate Requires:? */ +- int tracked; /*!< Versioned Provides: tracking dependency added? */ + size_t brlen; /*!< strlen(spec->buildRoot) */ + + ARGV_t fn; /*!< (no. files) file names */ diff --git a/rpm-5.4.9-duplicate_files_terminate_build.patch b/rpm-5.4.9-duplicate_files_terminate_build.patch new file mode 100644 index 0000000..b29c1a7 --- /dev/null +++ b/rpm-5.4.9-duplicate_files_terminate_build.patch @@ -0,0 +1,66 @@ +--- rpm-5.4.9/build/files.c.dups_terminate~ 2012-05-15 02:15:44.772405881 +0200 ++++ rpm-5.4.9/build/files.c 2012-05-15 02:15:44.779405916 +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.9/macros/mandriva.in.dups_terminate~ 2012-05-08 05:06:12.000000000 +0200 ++++ rpm-5.4.9/macros/mandriva.in 2012-05-15 02:16:18.723578174 +0200 +@@ -122,6 +122,8 @@ end\ + # use XZ to compress binary packages: + %_binary_payload w5.xzdio + ++%_duplicate_files_terminate_build 1 ++ + %_enable_debug_packages 1 + + diff --git a/rpm-5.4.9-find-debuginfo-strip-reloc-debug-sections.patch b/rpm-5.4.9-find-debuginfo-strip-reloc-debug-sections.patch new file mode 100644 index 0000000..3178f59 --- /dev/null +++ b/rpm-5.4.9-find-debuginfo-strip-reloc-debug-sections.patch @@ -0,0 +1,112 @@ +--- rpm-5.4.9/configure.ac.strip_reloc_debug~ 2012-05-04 10:41:08.000000000 +0200 ++++ rpm-5.4.9/configure.ac 2012-05-15 02:03:16.448634686 +0200 +@@ -625,6 +625,35 @@ AC_PATH_PROG(__STRIP, strip, %{_bindir}/ + AC_CHECK_PROGS(LIBTOOLIZE, libtoolize glibtoolize, libtoolize) + AC_SUBST(LIBTOOLIZE) + ++# check for elfutils eu-strip --reloc-debug_sections ++# elfutils-0.153 introduce the --reloc-debug-sections ++# This is a new option to eu-strip that strips ++# out/resolves relocations between .debug_* elf sections in ET_REL files. ++# This can save a lot of space for kernel module. ++# Use this option in find-debuginfo if supported ++# Check also for the eu_strip path and AC_SUBST it if found ++# not used really today ++old_PATH=$PATH ++PATH=$MYPATH ++AC_CACHE_CHECK([whether eu-strip supports --reloc-debug-sections], [ac_cv_path_EU_STRIP], ++ [AC_PATH_PROGS_FEATURE_CHECK([EU_STRIP], [eu-strip strip], ++ [[eu_stripout=`$ac_path_EU_STRIP --help | grep "\--reloc-debug-sections"` ++ test "x$eu_stripout" != x \ ++ && ac_cv_path_EU_STRIP=$ac_path_EU_STRIP debuginfo_eu_strip_reloc_debug_sections="-r"]], ++ [[ debuginfo_eu_strip_reloc_debug_sections="" ]] ++)]) ++PATH=$old_PATH ++AC_SUBST([debuginfo_eu_strip_reloc_debug_sections]) ++AS_IF([test "x$ac_cv_path_EU_STRIP" != x], [ ++ AC_SUBST([EU_STRIP], [$ac_cv_path_EU_STRIP]) ++], [ ++ AC_SUBST([EU_STRIP], [:]) ++ AC_MSG_RESULT([no]) ++]) ++ ++ ++ ++ + dnl # check for id -u + AC_MSG_CHECKING(whether id supports -u) + if ${__ID} -u 2>&1 > /dev/null; then +--- rpm-5.4.9/macros/macros.in.strip_reloc_debug~ 2012-05-15 02:03:16.377634331 +0200 ++++ rpm-5.4.9/macros/macros.in 2012-05-15 02:03:16.449634691 +0200 +@@ -148,7 +148,7 @@ + # the script. See the script for details. + # + %__debug_install_post \ +- %{_rpmhome}/find-debuginfo.sh %{?_missing_build_ids_terminate_build:--strict-build-id} %{?_find_debuginfo_opts} "%{_builddir}/%{?buildsubdir}"\ ++ %{_rpmhome}/find-debuginfo.sh %{?_missing_build_ids_terminate_build:--strict-build-id} %{?_find_debuginfo_opts} @debuginfo_eu_strip_reloc_debug_sections@ "%{_builddir}/%{?buildsubdir}"\ + %{nil} + + # Template for debug information sub-package. +--- rpm-5.4.9/macros/macros.rpmbuild.in.strip_reloc_debug~ 2011-10-21 17:39:02.000000000 +0200 ++++ rpm-5.4.9/macros/macros.rpmbuild.in 2012-05-15 02:03:16.450634696 +0200 +@@ -21,6 +21,7 @@ + %__ranlib @RANLIB@ + %__remsh %{__rsh} + %__strip @__STRIP@ ++%__eu_strip @__EU_STRIP@ + + # XXX avoid failures if tools are not installed when rpm is built. + %__libtoolize @LIBTOOLIZE@ +--- rpm-5.4.9/scripts/find-debuginfo.sh.strip_reloc_debug~ 2012-05-08 05:10:17.000000000 +0200 ++++ rpm-5.4.9/scripts/find-debuginfo.sh 2012-05-15 02:04:42.628066270 +0200 +@@ -2,7 +2,7 @@ + #find-debuginfo.sh - automagically generate debug info and file list + #for inclusion in an rpm spec file. + # +-# Usage: find-debuginfo.sh [--strict-build-id] [-g] ++# Usage: find-debuginfo.sh [--strict-build-id] [-g] [-r] + # [-o debugfiles.list] + # [[-l filelist]... [-p 'pattern'] -o debuginfo.list] + # [builddir] +@@ -18,12 +18,16 @@ + # the -l filelist file, or whose names match the -p pattern. + # The -p argument is an egrep-style regexp matching the a file name, + # and must not use anchors (^ or $). ++# The -r flag says to use eu-strip --reloc-debug-sections. + # + # All file names in switches are relative to builddir (. if not given). + # + + # With -g arg, pass it to strip on libraries. + strip_g=false ++# with -r arg, pass --reloc-debug-sections to eu-strip. ++strip_r=false ++ + + # Barf on missing build IDs. + strict=false +@@ -40,6 +44,9 @@ while [ $# -gt 0 ]; do + -g) + strip_g=true + ;; ++ -r) ++ strip_r=true ++ ;; + -o) + if [ -z "${lists[$nout]}" -a -z "${ptns[$nout]}" ]; then + out=$2 +@@ -90,12 +97,13 @@ debugdir="${RPM_BUILD_ROOT}/usr/lib/debu + strip_to_debug() + { + local g= ++ $strip_r && r=--reloc-debug-sections + $strip_g && case "$(file -bi "$2")" in + application/x-sharedlib*) g=-g ;; + esac + [ -n "$EXCLUDE_FULL_REGEXP" ] && grep -E -q "$EXCLUDE_FULL_REGEXP" <<< "$2" && g=-g + +- eu-strip --remove-comment $g $([ -n "$DISABLE_DEBUG" ] || echo -f "$1") "$2" || exit ++ eu-strip --remove-comment $g $([ -n "$DISABLE_DEBUG" ] || echo $r -f "$1") "$2" || exit + [ -n "$DISABLE_DEBUG" ] || chmod 444 "$1" || exit + } + diff --git a/rpm-5.4.9-fix-mdvbz62979.patch b/rpm-5.4.9-fix-mdvbz62979.patch new file mode 100644 index 0000000..eeb2797 --- /dev/null +++ b/rpm-5.4.9-fix-mdvbz62979.patch @@ -0,0 +1,18 @@ +--- rpm-5.4.9/build/parseDescription.c.mdvbz62979~ 2012-05-03 20:39:51.000000000 +0200 ++++ rpm-5.4.9/build/parseDescription.c 2012-05-15 01:55:31.332318888 +0200 +@@ -92,6 +92,7 @@ int parseDescription(Spec spec) + } + + /* Lose the inheirited %description (if present). */ ++#if !defined(RPM_VENDOR_MANDRIVA) /* mdvbz#62979 */ + if (spec->packages->header != pkg->header) { + he->tag = RPMTAG_DESCRIPTION; + xx = headerGet(pkg->header, he, 0); +@@ -99,6 +100,7 @@ int parseDescription(Spec spec) + if (xx && he->t == RPM_STRING_TYPE) + xx = headerDel(pkg->header, he, 0); + } ++#endif + + t = stashSt(spec, pkg->header, RPMTAG_DESCRIPTION, lang); + diff --git a/rpm-5.4.9-fix-rpm_qa-pattern.patch b/rpm-5.4.9-fix-rpm_qa-pattern.patch new file mode 100644 index 0000000..76ce249 --- /dev/null +++ b/rpm-5.4.9-fix-rpm_qa-pattern.patch @@ -0,0 +1,11 @@ +--- rpm-5.4.9/lib/rpmgi.c.pattern~ 2012-04-15 23:20:58.000000000 +0200 ++++ rpm-5.4.9/lib/rpmgi.c 2012-05-17 01:56:21.018481577 +0200 +@@ -473,7 +473,7 @@ fprintf(stderr, "*** gi %p key %p[%d]\tm + pat = ae; + got++; + } +- if (got) { ++ if (got >= 0) { + if (_rpmgi_debug < 0) + fprintf(stderr, "\tav %p[%d]: \"%s\" -> %s ~= \"%s\"\n", gi->argv, (int)(av - gi->argv), *av, tagName((rpmTag)tag), pat); + got = rpmmiAddPattern(gi->mi, (rpmTag)tag, RPMMIRE_DEFAULT, pat); diff --git a/rpm-5.4.9-fix-russian-typo.patch b/rpm-5.4.9-fix-russian-typo.patch new file mode 100644 index 0000000..b5bf51a --- /dev/null +++ b/rpm-5.4.9-fix-russian-typo.patch @@ -0,0 +1,11 @@ +--- rpm-5.4.9/po/ru.po.ru~ 2012-05-08 05:34:29.000000000 +0200 ++++ rpm-5.4.9/po/ru.po 2012-05-15 01:48:04.461117188 +0200 +@@ -3029,7 +3029,7 @@ msgstr "(ÕÓÔÁÎÏ×ÌÅÎ)" + #: lib/rpmps.c:305 + #, c-format + msgid "%s conflicts with %s%s" +-msgstr "%s ËÏÎÆÌÉËÔÕÅÔ Ó%s%s" ++msgstr "%s ËÏÎÆÌÉËÔÕÅÔ Ó %s%s" + + #: lib/rpmps.c:311 + #, fuzzy, c-format 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..e09f3c9 --- /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 haskelldeps.sh http.req \ ++ freshen.sh fontconfig.prov gendiff getpo.sh haskelldeps.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 haskelldeps.sh http.req \ ++ find-provides.perl find-requires.perl \ ++ fontconfig.prov gem_helper.rb getpo.sh haskelldeps.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-generate-haskell-dependencies.patch b/rpm-5.4.9-generate-haskell-dependencies.patch new file mode 100644 index 0000000..30266b9 --- /dev/null +++ b/rpm-5.4.9-generate-haskell-dependencies.patch @@ -0,0 +1,161 @@ +--- rpm-5.4.9/configure.ac.haskell~ 2012-05-15 02:51:07.328499989 +0200 ++++ rpm-5.4.9/configure.ac 2012-05-15 02:51:07.393500340 +0200 +@@ -2513,7 +2513,7 @@ AC_CONFIG_FILES([ po/Makefile.in + scripts/Makefile + rpmdb/DB_CONFIG + macros/macros macros/macros.rpmbuild +- macros/cmake macros/gstreamer macros/java macros/kernel macros/libtool ++ macros/cmake macros/gstreamer macros/haskell macros/java macros/kernel macros/libtool + macros/mandriva macros/suse macros/fedora macros/mono macros/perl macros/pkgconfig macros/php + macros/python macros/ruby macros/selinux macros/tcl + doc/Makefile +--- rpm-5.4.9/macros/haskell.in.haskell~ 2012-05-15 02:51:07.395500350 +0200 ++++ rpm-5.4.9/macros/haskell.in 2012-05-15 02:51:07.395500350 +0200 +@@ -0,0 +1,69 @@ ++# Ruby specific macro definitions. ++# To make use of these macros insert the following line into your spec file: ++# %{load:%{_usrlibrpm}/macros.d/haskell} ++ ++# Path to scripts to autogenerate haskell package dependencies, ++# ++# Note: Used iff _use_internal_dependency_generator is non-zero. The ++# helpers are also used by %{_rpmhome}/rpmdeps {--provides|--requires}. ++%__haskell_provides %{_rpmhome}/haskelldeps.sh --provides ++%__haskell_requires %{_rpmhome}/haskelldeps.sh --requires ++ ++# How is named the Setup.?hs ++%_cabal_setup %{?cabal_setup}%{?!cabal_setup:Setup.hs} ++ ++# which compiler (default ghc) ++%_haskell_compiler %{?haskell_compiler}%{?!haskell_compiler:runhaskell} ++ ++# The compilation step ++%_cabal_compil \ ++ %{_haskell_compiler} %{_cabal_setup} configure --prefix=%{_prefix} \ ++ %{_haskell_compiler} %{_cabal_setup} build \ ++ %{?!_no_haddock:%{_haskell_compiler} %{_cabal_setup} haddock} ++ ++# Script need to register module on the system ++%_cabal_genscripts \ ++ %{_haskell_compiler} %{_cabal_setup} register --gen-script || : \ ++ sed -i 's:/usr/bin/ghc-pkg:ghc-pkg --force:' register.sh \ ++ %{_haskell_compiler} %{_cabal_setup} unregister --gen-script || : \ ++ sed -i 's:/usr/bin/ghc-pkg:ghc-pkg --force:' unregister.sh ++ ++# post/pre scriptlet ++%_cabal_in %posttrans -f register.sh ++ ++%_cabal_un %preun -f unregister.sh ++ ++# Using script to register module during install ++%_cabal_scriptlets \ ++%_cabal_in \ ++\ ++%_cabal_un \ ++ ++# The "full" %build step ++%_cabal_build \ ++ %_cabal_compil \ ++ %_cabal_genscripts ++ ++# The "full" %install step ++%_cabal_install \ ++ %{_haskell_compiler} %{_cabal_setup} copy --destdir=%{buildroot} \ ++ ++# The "full" %check step ++%_cabal_check \ ++ %{_haskell_compiler} %{_cabal_setup} test ++ ++%_cabal_rpm_deps_dir %_datadir/haskell-deps ++ ++%_cabal_pkg_deps_dir %_cabal_rpm_deps_dir/%name-%version-%release ++ ++%_cabal_rpm_gen_deps \ ++mkdir -p %{buildroot}%{_cabal_pkg_deps_dir} \ ++touch %{buildroot}%{_cabal_pkg_deps_dir}/{provides,requires} \ ++find . -name "*.cabal" | xargs cabalrpmprov > %{buildroot}%{_cabal_pkg_deps_dir}/provides \ ++cabalrpmreq > %{buildroot}%{_cabal_pkg_deps_dir}/requires \ ++ ++%_cabal_rpm_files \ ++%_cabal_pkg_deps_dir ++ ++%_cabal_haddoc_files \ ++%{?!_no_haddock:%doc dist/doc/html} +--- rpm-5.4.9/Makefile.am.haskell~ 2012-03-17 01:24:19.000000000 +0100 ++++ rpm-5.4.9/Makefile.am 2012-05-15 02:51:09.049509318 +0200 +@@ -116,9 +116,9 @@ pkgbin_SCRIPTS = install-sh mkinstalldir + + pkgcfgdir = $(pkgdatadir)/macros.d + pkgcfg_DATA = \ +- macros/cmake macros/gstreamer macros/java macros/kernel macros/libtool \ +- macros/mandriva macros/mono macros/perl macros/pkgconfig macros/php \ +- macros/python macros/ruby macros/selinux macros/tcl ++ macros/cmake macros/haskell macros/gstreamer macros/java macros/kernel \ ++ macros/libtool macros/mandriva macros/mono macros/perl macros/pkgconfig \ ++ macros/php macros/python macros/ruby macros/selinux macros/tcl + + noinst_HEADERS = build.h debug.h system.h + +--- rpm-5.4.9/scripts/haskelldeps.sh.haskell~ 2012-05-15 02:51:09.050509324 +0200 ++++ rpm-5.4.9/scripts/haskelldeps.sh 2012-05-15 02:51:09.050509324 +0200 +@@ -0,0 +1,40 @@ ++#!/bin/sh ++ ++# Haskell dependency extractor. ++# ++# Author(s): Olivier Thauvin ++# Per Øyvind Karlsen ++# ++ ++provides=0 ++requires=0 ++ ++while [ "$#" -ne 0 ]; do ++ case $1 in ++ -P|--provides) ++ provides=1 ++ ;; ++ -R|--requires) ++ requires=1 ++ ;; ++ esac ++ shift ++done ++ ++finddeps () { ++ while read file; do ++ case "$file" in ++ */usr/share/haskell-deps/*/$1) ++ cat "$file" | grep -v '^\s*$' ++ ;; ++ esac ++ done ++} ++ ++if [ $provides -eq 1 ]; then ++ finddeps provides ++fi ++ ++if [ $requires -eq 1 ]; then ++ finddeps requires ++fi +--- rpm-5.4.9/scripts/Makefile.am.haskell~ 2012-05-04 10:38:44.000000000 +0200 ++++ rpm-5.4.9/scripts/Makefile.am 2012-05-15 02:51:09.050509324 +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 gendiff getpo.sh haskelldeps.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 \ +@@ -56,7 +56,7 @@ pkgdata_SCRIPTS = \ + 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-requires.perl gem_helper.rb getpo.sh haskelldeps.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..6e1d61d --- /dev/null +++ b/rpm-5.4.9-keep-loading-script-macros.patch @@ -0,0 +1,81 @@ +--- 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} ++%{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.3.8-no-doc-conflicts.patch b/rpm-5.4.9-no-doc-conflicts.patch similarity index 74% rename from rpm-5.3.8-no-doc-conflicts.patch rename to rpm-5.4.9-no-doc-conflicts.patch index 638e04d..a6c185f 100644 --- a/rpm-5.3.8-no-doc-conflicts.patch +++ b/rpm-5.4.9-no-doc-conflicts.patch @@ -1,5 +1,5 @@ ---- rpm-5.3.8/lib/transaction.c.doc_conflicts~ 2011-01-18 23:27:15.243131004 +0100 -+++ rpm-5.3.8/lib/transaction.c 2011-01-18 23:34:38.430131002 +0100 +--- rpm-5.4.9/lib/transaction.c.doc_conflicts~ 2012-04-26 20:36:19.000000000 +0200 ++++ rpm-5.4.9/lib/transaction.c 2012-05-15 01:46:37.964693880 +0200 @@ -68,6 +68,24 @@ /*@access IDTX @*/ /*@access FD_t @*/ @@ -22,10 +22,10 @@ +} +#endif + - static int handleInstInstalledFile(const rpmts ts, rpmte p, rpmfi fi, - Header otherHeader, rpmfi otherFi, - int beingRemoved) -@@ -117,6 +135,17 @@ static int handleInstInstalledFile(const + #ifdef __cplusplus + + #define FF_ISSET(_fflags, _FLAG) ((_fflags) & (RPMFILE_##_FLAG)) +@@ -164,6 +182,17 @@ static int handleInstInstalledFile(const } } @@ -41,9 +41,9 @@ +#endif + if (rConflicts) { - HE_t he = memset(alloca(sizeof(*he)), 0, sizeof(*he)); + HE_t he = (HE_t) memset(alloca(sizeof(*he)), 0, sizeof(*he)); rpmps ps = rpmtsProblems(ts); -@@ -381,6 +410,17 @@ assert(otherFi != NULL); +@@ -429,6 +458,17 @@ assert(otherFi != NULL); done = 1; } diff --git a/rpm-5.3.8-non-pre-scripts-dont-fail.patch b/rpm-5.4.9-non-pre-scripts-dont-fail.patch similarity index 69% rename from rpm-5.3.8-non-pre-scripts-dont-fail.patch rename to rpm-5.4.9-non-pre-scripts-dont-fail.patch index 871b3f8..5200a98 100644 --- a/rpm-5.3.8-non-pre-scripts-dont-fail.patch +++ b/rpm-5.4.9-non-pre-scripts-dont-fail.patch @@ -1,6 +1,6 @@ ---- rpm-5.3.8/lib/psm.c.scriptlet~ 2011-01-09 07:18:14.000000000 +0100 -+++ rpm-5.3.8/lib/psm.c 2011-01-19 01:04:33.070131004 +0100 -@@ -2178,6 +2178,10 @@ rpmRC rpmpsmStage(rpmpsm psm, pkgStage s +--- rpm-5.4.9/lib/psm.c.scriptlet~ 2012-04-19 19:26:06.000000000 +0200 ++++ rpm-5.4.9/lib/psm.c 2012-05-15 01:43:59.841922573 +0200 +@@ -2195,6 +2195,10 @@ rpmRC rpmpsmStage(rpmpsm psm, pkgStage s rpmRC rc = psm->rc; int saveerrno; int xx; @@ -11,56 +11,56 @@ /* XXX hackery to assert(!scareMem) in rpmfiNew. */ /*@-castexpose@*/ -@@ -2399,11 +2403,11 @@ assert(he->p.argv != NULL); +@@ -2416,11 +2420,11 @@ assert(he->p.argv != NULL); if (!(rpmtsFlags(ts) & RPMTRANS_FLAG_NOTRIGGERUN)) { /* Run triggers in this package other package(s) set off. */ - rc = rpmpsmNext(psm, PSM_IMMED_TRIGGERS); + rc = (rpmRC) rpmpsmNext(psm, PSM_IMMED_TRIGGERS); - if (rc) break; + if(rc && !non_pre_scripts_dont_fail) break; /* Run triggers in other package(s) this package sets off. */ - rc = rpmpsmNext(psm, PSM_TRIGGERS); + rc = (rpmRC) rpmpsmNext(psm, PSM_TRIGGERS); - if (rc) break; + if(rc && !non_pre_scripts_dont_fail) break; } if (!(rpmtsFlags(ts) & RPMTRANS_FLAG_NOPREUN)) -@@ -2743,16 +2747,16 @@ assert(psm->te != NULL); +@@ -2759,16 +2763,16 @@ assert(psm->te != NULL); if (!(rpmtsFlags(ts) & RPMTRANS_FLAG_NOPOST)) { - rc = rpmpsmNext(psm, PSM_SCRIPT); + rc = (rpmRC) rpmpsmNext(psm, PSM_SCRIPT); - if (rc) break; + if(rc && !non_pre_scripts_dont_fail) break; } if (!(rpmtsFlags(ts) & RPMTRANS_FLAG_NOTRIGGERIN)) { /* Run triggers in other package(s) this package sets off. */ - rc = rpmpsmNext(psm, PSM_TRIGGERS); + rc = (rpmRC) rpmpsmNext(psm, PSM_TRIGGERS); - if (rc) break; + if(rc && !non_pre_scripts_dont_fail) break; /* Run triggers in this package other package(s) set off. */ - rc = rpmpsmNext(psm, PSM_IMMED_TRIGGERS); + rc = (rpmRC) rpmpsmNext(psm, PSM_IMMED_TRIGGERS); - if (rc) break; + if(rc && !non_pre_scripts_dont_fail) break; } /* -@@ -2785,17 +2789,17 @@ assert(psm->te != NULL); +@@ -2801,17 +2805,17 @@ assert(psm->te != NULL); if (!(rpmtsFlags(ts) & RPMTRANS_FLAG_NOPOSTUN)) { - rc = rpmpsmNext(psm, PSM_SCRIPT); + rc = (rpmRC) rpmpsmNext(psm, PSM_SCRIPT); - if (rc) break; + if(rc && !non_pre_scripts_dont_fail) break; } if (!(rpmtsFlags(ts) & RPMTRANS_FLAG_NOTRIGGERPOSTUN)) { /* Run triggers in other package(s) this package sets off. */ - rc = rpmpsmNext(psm, PSM_TRIGGERS); + rc = (rpmRC) rpmpsmNext(psm, PSM_TRIGGERS); - if (rc) break; + if(rc && !non_pre_scripts_dont_fail) break; /* Run triggers in this package other package(s) set off. */ - rc = rpmpsmNext(psm, PSM_IMMED_TRIGGERS); + rc = (rpmRC) rpmpsmNext(psm, PSM_IMMED_TRIGGERS); - if (rc) break; + if(rc && !non_pre_scripts_dont_fail) 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..f1742d7 --- /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) }, ++ { 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) }, + #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-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-support-signatures-and-digest-disablers.patch b/rpm-5.4.9-support-signatures-and-digest-disablers.patch new file mode 100644 index 0000000..af9e1a7 --- /dev/null +++ b/rpm-5.4.9-support-signatures-and-digest-disablers.patch @@ -0,0 +1,11 @@ +--- rpm-5.4.9/system.h.nosig~ 2012-05-16 20:52:58.216415034 +0200 ++++ rpm-5.4.9/system.h 2012-05-16 20:53:29.053598105 +0200 +@@ -746,7 +746,7 @@ static inline const char *rcsid(const ch + /** + * Eliminate signature/digest disablers. + */ +-#undef SUPPORT_NOSIGNATURES ++#define SUPPORT_NOSIGNATURES 1 + + /** + * Permit ar(1) payloads. Disabled while rpmio/iosm.c is under development. diff --git a/rpm-5.4.9-unpackaged_subdirs_terminate_build.patch b/rpm-5.4.9-unpackaged_subdirs_terminate_build.patch new file mode 100644 index 0000000..88987ef --- /dev/null +++ b/rpm-5.4.9-unpackaged_subdirs_terminate_build.patch @@ -0,0 +1,66 @@ +--- rpm-5.4.9/build/files.c.subdir_terminate~ 2012-05-15 02:17:39.183986877 +0200 ++++ rpm-5.4.9/build/files.c 2012-05-15 02:17:39.188986902 +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.9/macros/mandriva.in.subdir_terminate~ 2012-05-15 02:17:39.000000000 +0200 ++++ rpm-5.4.9/macros/mandriva.in 2012-05-15 02:18:18.522186893 +0200 +@@ -123,6 +123,7 @@ end\ + %_binary_payload w5.xzdio + + %_duplicate_files_terminate_build 1 ++%_unpackaged_subdirs_terminate_build 0 + + %_enable_debug_packages 1 + 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-GROUPS b/rpm-GROUPS deleted file mode 100644 index b0612a7..0000000 --- a/rpm-GROUPS +++ /dev/null @@ -1,29 +0,0 @@ -Amusements/Games -Amusements/Graphics -Applications/Archiving -Applications/Communications -Applications/Databases -Applications/Editors -Applications/Emulators -Applications/Engineering -Applications/File -Applications/Internet -Applications/Multimedia -Applications/Productivity -Applications/Publishing -Applications/System -Applications/Text -Development/Debuggers -Development/Languages -Development/Libraries -Development/System -Development/Tools -Documentation -System Environment/Base -System Environment/Daemons -System Environment/Kernel -System Environment/Libraries -System Environment/Shells -User Interface/Desktops -User Interface/X -User Interface/X Hardware Support diff --git a/rpm.rpmlintrc b/rpm.rpmlintrc new file mode 100644 index 0000000..cd0ff54 --- /dev/null +++ b/rpm.rpmlintrc @@ -0,0 +1,4 @@ +from Config import * +from os import environ + +addFilter('rpm\..*: standard-dir-owned-by-package (\(.*\) |)/var/lib/rpm') diff --git a/rpm.spec b/rpm.spec index 7920a3d..c34b9b7 100644 --- a/rpm.spec +++ b/rpm.spec @@ -1,20 +1,27 @@ %bcond_with bootstrap %bcond_with debug -%bcond_without ossp-uuid +%bcond_without ossp_uuid %bcond_without augeas #XXX: this macro is a bit awkward, better can be done! %if %{with bootstrap} %bcond_with perl %bcond_with python +%bcond_with tcl +%bcond_with squirrel +%bcond_with embed %bcond_with docs %bcond_with sqlite %else %bcond_without perl %bcond_without python +%bcond_without tcl +%bcond_without squirrel +%bcond_without embed %bcond_without docs -%bcond_without sqlite +# use what's in berkeley db +%bcond_with sqlite %endif %bcond_with notyet @@ -22,76 +29,328 @@ %bcond_without xar %bcond_without ruby %bcond_without js -%bcond_without tcl -%bcond_without embed %else %bcond_with xar %bcond_with ruby %bcond_with js -%bcond_with tcl -%bcond_with embed %endif %if %{with debug} -%define debugcflags -g -O0 +%global debugcflags %{debugcflags} -g3 -O0 %endif -#include %{_sourcedir}/bootstrap.spec +# can probably be restored now.. +%if %{with bootstrap} +#include %%{_sourcedir}/bootstrap.spec +%endif -%define bdb db51 +%define bdb db52 -%define libver 5.3 -%define minorver 12 +%define libver 5.4 +%define minorver 9 %define srcver %{libver}.%{minorver} -%define prereldate 20110712 -%define librpmname %mklibname rpm %{libver} +%define librpmname %mklibname rpm %{libver} + %define librpmnamedevel %mklibname -d rpm + %define librpmstatic %mklibname -d -s rpm Summary: The RPM package management system Name: rpm -Version: %{libver}.%{minorver} -Release: %{?prereldate:0.%{prereldate}.}7 Epoch: 1 +Version: %{libver}.%{minorver} +License: LGPLv2.1+ +Release: 8 Group: System/Configuration/Packaging URL: http://rpm5.org/ - -# snapshot from rpm-5_3 branch: 'cvs -d :pserver:anonymous@rpm5.org:/cvs co -r rpm-5_3 rpm' +# snapshot from rpm-5_4 branch: 'cvs -d :pserver:anonymous@rpm5.org:/cvs co -r rpm-5_4 rpm' # tarball generated with './devtool tarball.xz' -Source0: ftp://ftp.jbj.org/pub/rpm-%{libver}.x/%{name}-%{srcver}.tar.xz +Source0: ftp://ftp.jbj.org/pub/rpm-%{libver}.x/%{name}-%{srcver}.tar.gz #Source1: bootstrap.spec -# Needed by rpmlint. Still required? If so, this file should rather be carried -# with rpmlint itself rather than requiring for rpm to carry... -Source2: rpm-GROUPS # These are a bit dated with a lot of redundant macros and many of them no # of use at all anymore! Should ideally just contain the macros different # from the default; _arch, optflags, _lib & _multilib*. # stripping away the rest (along with os specificity) and create a resulting # cpu-macros.tar.gz to push upstream would seem like a sane improvement. +Source2: rpm.rpmlintrc Source3: cpu-os-macros.tar.gz Source4: legacy_compat.macros # already merged upstream Patch0: rpm-5.3.8-set-default-bdb-log-dir.patch # TODO: should be disable for cooker, packaging needs to be fixed (enable for legacy compatibility) +# status: to be removed later.. Patch1: rpm-5.3.8-dependency-whiteout.patch # TODO: make conditional & disabled through macro by default (enable for legacy compatibility) -Patch2: rpm-5.3.8-non-pre-scripts-dont-fail.patch -Patch3: rpm-5.3.8-no-doc-conflicts.patch +# status: to be removed later +Patch2: rpm-5.4.9-non-pre-scripts-dont-fail.patch +# status: to be removed later +Patch3: rpm-5.4.9-no-doc-conflicts.patch # if distsuffix is defined, use it for disttag (from Anssi) +# status: merged upstream IIRC, could probably be dropped Patch4: rpm-5.3.8-disttag-distsuffix-fallback.patch # ugly hack to workaround disttag/distepoch pattern matching issue to buy some # time to come up with better pattern fix.. +# status: needs to be fixed properly, but can be merged upstream Patch5: rpm-5.3.8-distepoch-pattern-hack.patch # fixes a typo in russian translation (#62333) -Patch11: rpm-5.3.8-fix-russian-typo.patch +# status: needs to be pushed back to the Russian i18n project +Patch11: rpm-5.4.9-fix-russian-typo.patch # temporary workaround for issues with file triggers firing multiple times and # a huge memleak... +# DIE Patch15: rpm-5.3.8-fire-file-triggers-only-once.patch -Patch19: rpm-5.3.10-doxygen-1.7.4-bug.patch -Patch20: rpm-5.3.11-fix-syslog-b0rkage.patch +# status: keep as mandriva specific for now Patch21: rpm-5.3.12-change-dep-loop-errors-to-warnings.patch +# status: need to be revisited and made sure that we get the correct behaviour, +# regression tests certainly required Patch22: rpm-5.3.12-55810-rpmevrcmp-again-grf.patch +# status: ready to merge, it's already been merged on HEAD, so commiting it to rpm-5_4 +# would basically just mean backporting it.. +Patch29: rpm-5.4.4-add-_specfile-macro.patch +# status: ready for merge +Patch31: rpm-5.4.9-fix-rpm_qa-pattern.patch +# uhm.. broken? +# status: this one was fixed for real in 5.3.12, but I forgot commiting it +# on rpm-5_4 branch back then, and I've been unable to remember and not +# bothered figuring out what was wrong.. +Patch32: rpm-5.4.4-really-always-invoke-clean-at-end.patch +# status: i18n strings is getting dropped, so this one might be of less relevance, +# but feel free to discuss it on rpm-devel +Patch33: rpm-5.4.9-fix-mdvbz62979.patch +# This patch adds support for untangling dependency loops with prioritized removal +# of dependencies from loops. It's very crude for now and certainly needs some obvious +# improvement, but it'll fix the most common scenario giving issues where ie. +# Requires(post) has been used and shouldn't introduce any regressions.. +# REF: http://rpm5.org/community/rpm-devel/4633.html +# status: needs to be finished and probably rewrite the implementation, +# so keep locally for now, but feel free to discuss it on rpm-devel if you run out +# of things to do.. :p +Patch34: rpm-5.4.4-use-dependency-type-for-ordering.patch +# status: needs to be cleaned up and properly reviewed together with rest +# of the patches related to dependency generation +Patch37: rpm-5.4.9-avoid-dependencies-on-self.patch +# status: probably ready to merge +Patch40: rpm-5.4.4-pkgconfigdeps-check-path.patch +# status: probably okay to merge, but discuss on rpm-devel first +Patch42: rpm-5.4.4-glob-wildcards-for-loading-macro-files.patch +# status: needs to be discussed +Patch46: rpm-5.4.4-allow-installation-of-repackaged-rpms.patch +# status: same as for other dependency generation related patches +Patch47: rpm-5.4.4-fix-removal-of-overlapping-dependencies.patch +# status: ready to merge +Patch48: rpm-5.4.8-dont-show-suggests-with-requires.patch +Patch50: rpm-5.4.4-debugedit-recompute-build-id-only-on-dwarf-change.patch +Patch51: rpm-5.4.4-debugedit-fix-incorrect-error-messages-regarding_-b-and_-d.patch +Patch52: rpm-5.4.4-debugedit-remove-unused-variable.patch +Patch53: rpm-5.4.4-debugedit-bail-out-of-debuginfo-if-stabs-format-encountered.patch +Patch54: rpm-5.4.4-debugedit-add-dwarf4-support.patch +# backport from HEAD +# status: almost ready for merge, the strip reloc flag to debugedit needs to be made +# conditional first in order to not break backwards compatibility with older elfutils versions +Patch55: rpm-5.4.9-find-debuginfo-strip-reloc-debug-sections.patch +# status: ready for merge +Patch61: rpm-5.4.4-fix-same-package-with-epoch-possible-to-upgrade.patch +# status: ready for merge +Patch63: rpm-5.4.9-strip-buildroot-away-from-duplicate-files-list.patch +# status: probably okay to merge, but discuss on rpm-devel first +Patch64: rpm-5.4.9-duplicate_files_terminate_build.patch +# status: same as above +Patch65: rpm-5.4.9-unpackaged_subdirs_terminate_build.patch +# mdvbz#64898 +# status: uncertain, might be okay to merge, discuss on rpm-devel first +Patch66: rpm-5.4.4-rpmbuild-withoutclean.patch +# status: ready for merge +Patch67: rpm-5.4.4-find-debuginfo-avoid-excessive-output-from-eu-strip.patch +# mdvbz#64914 +# status: ready for merging +Patch68: rpm-5.4.4-enable-rpmgio-net-transport.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 +Patch69: rpm-5.4.4-drop-useless-auto-generated-pkgconfig-dependency.patch +# drop dependencies such as /bin/sh which will always be satisfied by glibc's dependency on +# bash, and also on /sbin/ldconfig which always will be satisfied by glibc +# status: should *NOT* be merged +Patch70: rpm-5.4.4-drop-base-dependencies.patch +# status: ready for merge +Patch71: rpm-5.4.4-fix-rpmconstant-to-always-use-LC_CTYPE-C-for-case-conversion.patch +# from rpm.org +# status: ready for merge +Patch72: rpm-5.4.4-debugedit-recognize-debug_macro-section.patch +# from rpm.org +# status: ready for merge +Patch73: rpm-5.4.9-add-_build_pkgcheck.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.. +Patch74: rpm-5.4.4-pass-_builddir-properly-to-find-debuginfo.patch +# status: ready for merge +Patch75: rpm-5.4.4-srcdefattr.patch +# status: probably okay to merge, but discuss on rpm-devel first +Patch76: rpm-5.4.4-files-listed-twice-terminates-build.patch +# status: don't merge +Patch77: rpm-5.4.7-use-bdb-5.2.patch +# status: probably okay to merge +Patch78: rpm-5.4.4-ruby1.9-fixes.patch +# mdvbz#65269 +# status: same as for other dependency generation patches +Patch79: rpm-5.4.4-dont-consider-ranged-dependencies-as-overlapping-for-removal.patch +# status: ignoree for now +Patch81: rpm-5.4.5-libsql-conditional.patch +# status: ready for merge +Patch83: rpm-5.4.5-kmod-deps-xz-support.patch +# status: same as for other dependency generation patches +Patch85: rpm-5.4.5-fix-removal-of-overlapping-dependencies-for-internal-dependency-generator.patch +# this updates to using the dependency generator shipped with mono, it has some +# issues which makes me cautious about actually merging it with rpm5 upstream, +# but we'll anyways use it as is for now to prevent any potential regressions +# by switching to the internal dependency generator +# status: shouldn't be merged as is +Patch86: rpm-5.4.5-update-mono-dependency-generator.patch +# status: probably okay to merge +Patch87: rpm-5.4.5-dont-generate-php-dependencies-only-when-executable.patch +# status: these three were lost on rpm-5_3 branch, so should be okay to merge +Patch88: rpm-5.4.5-patchset_16004.patch +Patch89: rpm-5.4.5-patchset_16005.patch +Patch90: rpm-5.4.5-patchset_16022.patch +# status: same as for other dep gen patches +Patch91: rpm-5.4.9-update-rpmfc-when-removing-dependencies-on-self.patch +# status: idem +Patch92: rpm-5.4.9-rpmfc-extract-dependencies-for-all-files.patch +# status: ready for merge +Patch93: rpm-5.4.5-rubygems-add-missing-newline.patch +# status: ugly, keep locally for now +Patch94: rpm-5.4.9-generate-haskell-dependencies.patch +# status: same as for other dep gen patches +Patch95: rpm-5.4.5-drop-some-interpreter-deps.patch +# status: probably okay to merge.. +Patch96: rpm-5.4.5-fix-elf-interpreter-resolving-breaking-uclibc-deps.patch +# status: probably okay to merge +Patch97: rpm-5.4.5-set-proper-file-color-for-scripts-using-env-in-shellbang.patch +Patch98: rpm-5.4.5-update-rpmfc-when-removing-overlapping-dependencies.patch +# status: probably okay to merge +Patch99: rpm-5.4.5-python-export-spec-macros.patch +# status: same as for other dep gen patches +Patch100: rpm-5.4.5-do-not-merge-script-dependencies-with-non-script-dependencies.patch +# status: idem +Patch101: rpm-5.4.9-font-provides.patch +# status: idem +Patch102: rpm-5.4.7-kmod-dependencies.patch +# status: idem +Patch103: rpm-5.4.5-desktop-provides.patch +# status: probably okay to merge, discuss on rpm-devel first +Patch104: rpm-5.4.5-skip-dependencies-for-character-devices.patch +# status: ready to merge +Patch105: rpm-5.4.5-rpmfc-use-strlen-not-sizeof.patch +# status: same as for other dep gen patches +Patch106: rpm-5.4.5-break-out-of-elf-link-loop.patch +# status: probably okay to merge +Patch107: rpm-5.4.5-rpmfc-apply-python-coloring-from-magic.patch +# status: same as for other dep gen patches +Patch109: rpm-5.4.5-fix-generation-of-uclibc-deps-on-non-lib64.patch +# status: idem +Patch110: rpm-5.4.7-only-generate-devel-deps-for-symlinks-start-with-lib.patch +# status: keep locally +Patch111: rpm-5.4.9-keep-loading-script-macros.patch +# status: ready for merge +Patch112: rpm-5.4.7-use-gnu-hash-style-by-default-and-drop-rtld-dep.patch +# status: keep locally only +Patch113: rpm-5.4.9-add-distepoch-rpmlib-feature.patch +# status: probably okay to merge, but discuss on rpm-devel first +Patch114: rpm-5.4.9-dont-add-versioneddependency-rpmlib-feature-dependency.patch +# status: ready to merge +Patch115: rpm-5.4.7-rpmfc-fix-invalid-free-if-not-_defaultdocdir-set.patch +# status: probably okay to merge +Patch116: rpm-5.4.7-dont-try-generate-rpmfc-dependencies-from-doc-files.patch +# status: ready to merge +Patch117: rpm-5.4.7-only-generate-ruby-and-python-deps-for-executables-and-modules.patch +# status: same as for other dep gen patches +Patch118: rpm-5.4.7-dont-generate-soname-provides-for-dsos-with-no-soname.patch +# status: ready +Patch119: rpm-5.4.7-fix-generation-of-ruby-abi-provides.patch +# status: same as for other dep gen patches +Patch120: rpm-5.4.7-print-name-of-files-removed-dependencies-are-generated-from.patch +# status: idem +Patch121: rpm-5.4.7-always-choose-equal-only-deps-when-overlapping.patch +# status: idem +Patch122: rpm-5.4.7-rpmfc-strdup-EVR-in-overlap-removal.patch +# status: idem +Patch123: rpm-5.4.7-rpmds-dont-try-fopen-empty-filenames.patch +# status: ready +Patch124: rpm-5.4.7-change-to-debuginfo-suffix.patch +# crash reproducable with 'rpm -qa --triggers' +# status: ready +Patch125: rpm-5.4.7-hdrfmt-fix-unitialized-argv-element.patch +# status: probably okay to merge, discuss on rpm-devel first +Patch126: rpm-5.4.9-add-filetriggers-regex-matching-support.patch +# status: idem +Patch127: rpm-5.4.9-add-matches-as-arguments-to-triggers.patch +# status: same as for other dep gen patches +Patch128: rpm-5.4.7-dont-consider-trigger-dependencies-as-overlapping.patch +# status: ready +Patch129: rpm-5.4.7-fix-minor-memleaks.patch +# status: ready +Patch130: rpm-5.4.9-mire-fix-strings-lacking-null-terminator.patch +# status: keep locally for now +Patch131: rpm-5.4.9-dlopen-embedded-interpreters.patch +# status: ready +Patch132: rpm-5.4.9-rpmpython-fix-input.patch +# status: same as for other dep gen patches +Patch133: rpm-5.4.7-generate-devel-provides-outside-of-libdirs.patch +# status: ready +Patch134: rpm-5.4.7-actually-perform-linking-against-internal-lua.patch +# status: ready +Patch135: rpm-5.4.7-no-seqid_init-on-rdonly-database.patch +# status: same as for other dep gen patches +Patch136: rpm-5.4.9-add-support-for-using-rpmdsMerge-with-filepath-tags.patch +# status: probably ready for merging +Patch137: rpm-5.4.9-avoid-double-slash-in-path-for-dirname-filetrigger-matching.patch +# status: unfinished +Patch138: rpm-5.4.7-trigtrans.patch +# status: probably ready to merge, discuss on rpm-devel first +Patch139: rpm-5.4.9-fix-verify-segfault.patch +# status: keep locally +Patch140: rpm-5.4.7-rpmv3-support.patch +# status: ready +Patch143: rpm-5.4.7-mono-find-requires-strip-newlines.patch +# status: ready +Patch144: rpm-5.4.8-URPM-build-fix.patch +# status: undefined +Patch145: rpm-5.4.8-add-armv7l-specific-macros.patch +# status: keep locally, might drop this one later.. +Patch146: rpm-5.4.9-support-signatures-and-digest-disablers.patch + +#ROSA stuff. Disable internal dependences generator +Patch147: rpm-5.4.9-disable_internal_dependency_generator.patch + +BuildRequires: autoconf >= 2.57 +BuildRequires: bzip2-devel +BuildRequires: automake >= 1.8 +BuildRequires: elfutils-devel +BuildRequires: sed >= 4.0.3 +BuildRequires: beecrypt-devel >= 4.2.1-8 +BuildRequires: ed +BuildRequires: gettext-devel +BuildRequires: byacc +BuildRequires: pkgconfig(neon) +BuildRequires: rpm-mandriva-setup-build +BuildRequires: readline-devel +BuildRequires: ncurses-devel +BuildRequires: pkgconfig(libssl) +BuildRequires: pkgconfig(libcrypto) +BuildRequires: pkgconfig(liblzma) +BuildRequires: pkgconfig(libpcre) +BuildRequires: pkgconfig(libpcreposix) +BuildRequires: acl-devel +BuildRequires: magic-devel +BuildRequires: pkgconfig(popt) >= 1.15 +BuildRequires: libxml2-devel >= 2.7.8 +# we're now building with internal.. +#BuildRequires: pkgconfig(lua) +# needed by internal lua +BuildRequires: expat-devel Patch23: rpm-5.3.12-fix-verify-segfault.patch Patch24: rpm-5.3.12-cve-2012-0815,0060,0061.patch Patch25: rpm-5.3.12.vendor.ROSA.patch @@ -99,18 +358,35 @@ Patch25: rpm-5.3.12.vendor.ROSA.patch #Fix error in rpmbuild in GTK2-based terminals Patch26: rpm-5.3.8-rpmsq-ignored-signal-return-value.patch -License: LGPLv2.1+ -BuildRequires: autoconf >= 2.57 bzip2-devel automake >= 1.8 elfutils-devel -BuildRequires: sed >= 4.0.3 beecrypt-devel ed gettext-devel byacc -BuildRequires: neon0.27-devel rpm-%{_target_vendor}-setup-build %{?rpmsetup_version:>= %{rpmsetup_version}} -BuildRequires: readline-devel ncurses-devel openssl-devel -BuildRequires: liblzma-devel lua-devel pcre-devel acl-devel -BuildRequires: magic-devel popt-devel >= 1.15 +BuildRequires: autoconf >= 2.57 +BuildRequires: bzip2-devel +BuildRequires: automake >= 1.8 +BuildRequires: elfutils-devel +BuildRequires: sed >= 4.0.3 +BuildRequires: beecrypt-devel +BuildRequires: ed +BuildRequires: gettext-devel +BuildRequires: byacc +BuildRequires: pkgconfig(neon) +BuildRequires: rpm-mandriva-setup-build +BuildRequires: readline-devel +BuildRequires: ncurses-devel +BuildRequires: openssl-devel +BuildRequires: liblzma-devel +BuildRequires: lua-devel +BuildRequires: pcre-devel +BuildRequires: acl-devel +BuildRequires: magic-devel +BuildRequires: popt-devel >= 1.15 %ifarch %{ix86} x86_64 ppc ppc64 ia64 -BuildRequires: cpuinfo-devel +BuildRequires: pkgconfig(libcpuinfo) %endif -BuildRequires: syck-devel keyutils-devel -BuildRequires: libgomp-devel gnutls-devel gnupg2 +BuildRequires: syck-devel +BuildRequires: keyutils-devel +BuildRequires: gomp-static-devel +BuildRequires: gomp-devel +BuildRequires: pkgconfig(gnutls) +BuildRequires: gnupg2 # required by parts of test suite... BuildRequires: wget # Should we prefer internal xar in stead? internal xar contains at least @@ -119,46 +395,61 @@ BuildRequires: wget %if %{with xar} BuildRequires: xar-devel %endif -BuildRequires: %{bdb}-devel >= 5.1.25 +BuildRequires: db-devel # required by test suite BuildRequires: %{bdb}-utils %if %{with perl} BuildRequires: perl-devel %endif %if %{with python} -BuildRequires: python-devel +BuildRequires: pkgconfig(python) %endif %if %{with js} -BuildRequires: mozjs-devel +BuildRequires: pkgconfig(mozjs185) %endif %if %{with ruby} BuildRequires: ruby-devel %endif %if %{with tcl} -BuildRequires: tcl +BuildRequires: tcl-devel +%endif +%if %{with squirrel} +BuildRequires: squirrel-devel %endif %if %{with docs} -BuildRequires: doxygen graphviz texlive +BuildRequires: doxygen +BuildRequires: graphviz +BuildRequires: texlive %endif %if %{with sqlite} -BuildRequires: sqlite3-devel +BuildRequires: pkgconfig(sqlite3) %endif -%if %{with ossp-uuid} -BuildRequires: ossp-uuid-devel +%if %{with ossp_uuid} +BuildRequires: pkgconfig(ossp-uuid) %endif %if %{with augeas} -BuildRequires: augeas-devel +BuildRequires: pkgconfig(augeas) %endif -Requires: cpio gawk mktemp rpm-%{_target_vendor}-setup >= 1.42 update-alternatives +BuildRequires: spec-helper >= 0.31.12 +BuildRequires: stdc++-static-devel >= 4.7.0 +BuildRequires: elfutils >= 0.153 +BuildRequires: libtool >= 2.4.2 +Requires: cpio +Requires: gawk +Requires: mktemp +Requires: update-alternatives Requires: %{bdb}_recover Suggests: %{bdb}-utils -Requires: %{librpmname} = %{EVRD} + +Requires: %{librpmname} = %{EVRD} + Conflicts: rpm-build < 1:5.3.10-0.20110422.3 -Requires(pre): rpm-helper >= 0.8 Requires(pre): coreutils -Requires(postun):rpm-helper >= 0.8 %rename rpmconstant %rename multiarch-utils +%rename rpm-manbo-setup +%rename rpm-mandriva-setup +Obsoletes: haskell-macros < 6.4-5 %description RPM is a powerful command line driven package management system capable of @@ -185,7 +476,6 @@ This package contains common files to all applications based on rpm. Summary: Development files for applications which will manipulate RPM packages Group: Development/C Requires: %{librpmname} = %{EVRD} -Provides: librpm-devel = %{EVRD} Provides: rpm-devel = %{EVRD} %rename %{_lib}rpmconstant-devel Obsoletes: %{_lib}rpm4.4-devel @@ -215,14 +505,22 @@ Requires: autoconf Requires: automake Requires: file Requires: gcc-c++ -Requires: libtool-base +Requires: libtool-base >= 2.4.2-3 Requires: patch >= 2.5.9-7 Requires: make Requires: unzip -Requires: elfutils +Requires: elfutils >= 0.152-4 Requires: rpm = %{EVRD} -Requires: rpm-%{_target_vendor}-setup-build +Requires: rpm-mandriva-setup-build +Requires: spec-helper >= 0.31.12 +Requires: rpmlint-mandriva-policy >= 0.3.2 +Requires: python-rpm = %{EVRD} +Requires: perl-RPM = %{EVRD} +Conflicts: rpmlint < 1.4-4 Conflicts: multiarch-utils < 1:5.3.10 +Conflicts: rpm < 1:5.4.4-32 +Obsoletes: rpm5-manbo-setup +%rename rpm-manbo-setup-build %description build This package contains scripts and executable programs that are used to @@ -255,6 +553,36 @@ The RPM Perl module provides an object-oriented interface to querying both the installed RPM database as well as files on the filesystem. %endif +%if %{with ruby} +%package -n rpm-rubyembed +Summary: Ruby embedding module for rpm +Group: Development/Ruby +Requires: ruby(abi) + +%description -n rpm-rubyembed +This package provides embedded ruby interpreter support for RPM. +%endif + +%if %{with tcl} +%package -n rpm-tclembed +Summary: Tcl embedding module for rpm +Group: Development/Other +Requires: tcl + +%description -n rpm-tclembed +This package provides embedded Tcl interpreter support for RPM. +%endif + +%if %{with squirrel} +%package -n rpm-squirrelembed +Summary: Squirrel embedding module for rpm +Group: Development/Other +Requires: squirrel + +%description -n rpm-squirrelembed +This package provides embedded Squirrel interpreter support for RPM. +%endif + %if %{with docs} %package apidocs Summary: API documentation for RPM @@ -267,19 +595,117 @@ This package contains the RPM API documentation generated in HTML format. %prep %setup -q +%patch111 -p1 -b .script_macros~ # These patches has been commited hastily upstream for review, # keeping them around here for now untill finished... %if 0 %patch0 -p1 -b .set_lg_dir~ %patch1 -p1 -b .dep_whiteout~ +%endif %patch2 -p1 -b .scriptlet~ %patch3 -p1 -b .doc_conflicts~ +%patch11 -p1 -b .ru~ +%if 0 %patch4 -p1 -b .distsuffix~ %patch5 -p1 -b .distpatt~ %patch15 -p1 -b .trigger_once~ %endif -%patch19 -p1 -b .doxygen~ -%patch20 -p1 -b .syslog~ + +%patch29 -p1 -b .specfile~ +%patch31 -p1 -b .rpm_qa~ + +%patch34 -p1 -b .ordering~ +%patch37 -p1 -b .drop_deps~ +%patch40 -p1 -b .pc_paths~ +%patch42 -p1 -b .glob~ +%patch46 -p1 -b .repackage~ +%patch47 -p1 -b .overlap~ +%patch48 -p1 -b .suggests~ +%patch55 -p1 -b .strip_reloc_debug~ +%patch61 -p1 -b .epoch_cmp~ +%patch63 -p1 -b .buildroot_dups~ +%patch64 -p1 -b .dups_terminate~ +%patch65 -p1 -b .subdir_terminate~ +%patch66 -p1 -b .withoutclean~ +%patch67 -p1 -b .strip_silent~ +%patch68 -p1 -b .rpmgio_ufdio~ +%patch69 -p1 -b .oneshot~ +%patch70 -p1 -b .drop_basedeps~ +%patch71 -p1 -b .locale~ +%patch72 -p1 -b .debug_macro~ +%patch73 -p1 -b .pkgcheck~ +%patch74 -p1 -b .builddir~ +%patch75 -p1 -b .srcdefattr~ +%patch76 -p1 -b .twice_terminate~ +%patch77 -p1 -b .db52~ +%patch78 -p1 -b .ruby19~ +%patch79 -p1 -b .range_nooverlap~ +#patch81 -p1 -b .libsql~ +%patch83 -p1 -b .kmod_xz~ +%patch85 -p1 -b .int_gen_overlap~ +%patch86 -p1 -b .mono_deps_new~ +%patch87 -p1 -b .php_dep_gen~ +%patch88 -p1 -b .16004~ +%patch89 -p1 -b .16005~ +%patch90 -p1 -b .16022~ +%patch91 -p1 -b .fc_deps~ +%patch92 -p1 -b .rpmfc_ruby~ +%patch93 -p1 -b .rb_newline~ +%patch94 -p1 -b .haskell~ +%patch95 -p1 -b .interpret_deps~ +%patch96 -p1 -b .uclibc~ +%patch97 -p1 -b .env_color~ +%patch98 -p1 -b .fc_overlap~ +%patch99 -p1 -b .py_macros~ +%patch100 -p1 -b .script_overlap~ +%patch101 -p1 -b .font~ +%patch102 -p1 -b .kmod~ +%patch103 -p1 -b .desktop~ +%patch104 -p1 -b .skip_chrdev~ +%patch105 -p1 -b .sizeof~ +%patch106 -p1 -b .link_loop~ +%patch107 -p1 -b .python_color~ +%patch109 -p1 -b .uclibc_nolib64~ +%patch110 -p1 -b .req_devel~ +%patch112 -p1 -b .gnu_hash~ +%patch113 -p1 -b .depoch_rpmlib~ +%patch114 -p1 -b .no_verdepfeat~ +%patch115 -p1 -b .free~ +%patch116 -p1 -b .skip_doc~ +%patch117 -p1 -b .exec_modules~ +#patch118 -p1 -b .soname_only~ +%patch119 -p1 -b .rubyabi_prov~ +%patch120 -p1 -b .filedep_origins~ +%patch121 -p1 -b .equal_overlaps~ +%patch122 -p1 -b .strdup~ +%patch123 -p1 -b .ds_fopen~ +%patch124 -p1 -b .debuginfo~ +%patch125 -p1 -b .unitialized~ +%patch126 -p1 -b .trig_pcre~ +%patch127 -p1 -b .trigger_args~ +%patch128 -p1 -b .triggers_nooverlap~ +%patch129 -p1 -b .memleak~ +%patch130 -p1 -b .str_nul~ +%patch131 -p1 -b .dlopen~ +%patch132 -p1 -b .py_input~ +%patch133 -p1 -b .devel_prov~ +#patch134 -p1 -b .lua~ +%patch135 -p1 -b .db_rdonly~ +%patch136 -p1 -b .ds_merge~ +%patch137 -p1 -b .slash~ +#patch138 -p1 -b .trigtrans~ +%patch139 -p1 -b .fix_verify~ +%patch140 -p1 -b .rpmv3~ +%patch143 -p1 -b .mono_newline~ +%patch144 -p1 -b .urpm~ +%patch146 -p1 -b .nosig~ +%patch147 -p1 -b .disable_int_gen_dep + +#required by P55, P80, P81, P94.. +./autogen.sh + +#patch19 -p1 -b .doxygen~ +#patch20 -p1 -b .syslog~ %patch21 -p1 -b .loop_warnings~ %patch22 -p1 -b .55810~ %patch23 -p1 -b .verify-segfault~ @@ -288,9 +714,7 @@ This package contains the RPM API documentation generated in HTML format. mkdir -p cpu-os-macros tar -zxf %{SOURCE3} -C cpu-os-macros - -# Needed by rpmlint. -cp %{SOURCE2} GROUPS +%patch145 -p1 %build %configure2_5x --enable-nls \ @@ -329,6 +753,9 @@ cp %{SOURCE2} GROUPS %endif %if %{with tcl} --with-tcl=external \ +%endif +%if %{with squirrel} + --with-squirrel=external \ %endif --with-glob \ --without-selinux \ @@ -339,7 +766,8 @@ cp %{SOURCE2} GROUPS --with-popt=external \ --with-xz=external \ --with-bzip2=external \ - --with-lua=external \ + --with-lua=internal \ + --with-expat=external \ --with-pcre=external \ %ifarch %{ix86} x86_64 ppc ppc64 ia64 --with-cpuinfo=external \ @@ -359,15 +787,18 @@ cp %{SOURCE2} GROUPS --with-xar=%{_includedir}/xar \ %endif --with-db \ - --with-db-sql \ + --with-dbsql=external \ --without-db-tools-integrated \ %if %{with sqlite} --with-sqlite=external \ %else --without-sqlite \ %endif -%if %{with ossp-uuid} - --with-uuid=external \ +%if %{with ossp_uuid} +%if 0 +# TODO: needs to be fixed properly for automatic detection in internal lua build +%endif + --with-uuid=%{_libdir}:%{_includedir}/ossp-uuid \ %else --without-uuid \ %endif @@ -424,16 +855,17 @@ cat > %{buildroot}%{_sysconfdir}/%{name}/macros < %{buildroot}%{_sysconfdir}/%{name}/premacros.d/cpuinfo_target.macros <> %{name}.lang -done -for i in {0..9}; do - touch %{buildroot}/var/lib/rpm/__db.00$i - echo "%rpmdbattr /var/lib/rpm/__db.00$i" >> %{name}.lang + echo "%attr(0644, root, root) %verify(not md5 size mtime) %ghost %config(missingok,noreplace) %{_localstatedir}/lib/rpm/$dbi" >> %{name}.lang done install -d %{buildroot}/bin @@ -466,39 +893,44 @@ mv %{buildroot}%{_bindir}/rpm %{buildroot}/bin/rpm cp -r cpu-os-macros %{buildroot}%{_usrlibrpm}/platform install -m644 %{SOURCE4} -D %{buildroot}%{_sysconfdir}/%{name}/macros.d/legacy_compat.macros -#ln -sf ppc-linux %{buildroot}%{_usrlibrpm}/platform/powerpc-%{_target_vendor}-linux %if %{with docs} install -d %{buildroot}%{_docdir}/rpm cp -r apidocs/html %{buildroot}%{_docdir}/rpm %endif -%pre -# XXX: really sceptical about rpm actually requiring or even using it's own -# dedicated user for any purpose (and there's no suid/guid no binaries either), really -# smells like an old suid/guid relic of the past... -/usr/share/rpm-helper/add-user rpm $1 rpm /var/lib/rpm /bin/false - -%postun -/usr/share/rpm-helper/del-user rpm $1 rpm +install -d %{buildroot}%{multiarch_bindir} +install -d %{buildroot}%{multiarch_includedir} +%if "%{_lib}" == "lib64" +install -d %{buildroot}%(linux32 rpm -E %%{multiarch_bindir}) +install -d %{buildroot}%(linux32 rpm -E %%{multiarch_includedir}) +%endif # TODO: review which files goes into what packages...? %files -f %{name}.lang -%doc GROUPS CHANGES doc/manual/[a-z]* +%doc CHANGES doc/manual/[a-z]* %if %{with docs} %exclude %{_docdir}/rpm/html %endif -# Are these attributes actually still sane? Smells deprecated/legacy... -%defattr(755, rpm, rpm, 755) /bin/rpm %{_bindir}/multiarch-dispatch %{_bindir}/rpmconstant* %{_bindir}/rpm2cpio* %{_rpmhome}/bin/augtool +%{_rpmhome}/bin/chroot +%{_rpmhome}/bin/cp %{_rpmhome}/bin/dbconvert -#%{_rpmhome}/bin/grep +%{_rpmhome}/bin/find +#%%{_rpmhome}/bin/grep +#%%{_rpmhome}/bin/lua %{_rpmhome}/bin/mtree +%{_rpmhome}/bin/mgo +#%%{_rpmhome}/bin/rc %{_rpmhome}/bin/rpmspecdump +%{_rpmhome}/bin/wget +%if %{with xar} +%{_rpmhome}/bin/txar +%endif %{_rpmhome}/dbconvert.sh %{_rpmhome}/rpm.* %{_rpmhome}/rpm2cpio @@ -510,7 +942,6 @@ cp -r apidocs/html %{buildroot}%{_docdir}/rpm %dir %{_localstatedir}/lib/rpm/tmp -%defattr(0644, rpm, rpm, 755) %{_rpmhome}/macros.d/* %{_rpmhome}/cpuinfo.yaml %{_rpmhome}/macros @@ -518,7 +949,6 @@ cp -r apidocs/html %{buildroot}%{_docdir}/rpm %{_rpmhome}/platform/*/macros %config(noreplace) %{_localstatedir}/lib/rpm/DB_CONFIG -%defattr(-,root,root) %dir %{_localstatedir}/spool/repackage %dir %{_rpmhome} %dir %{_rpmhome}/bin @@ -543,36 +973,41 @@ cp -r apidocs/html %{buildroot}%{_docdir}/rpm %exclude %{_mandir}/man8/rpmbuild.8* %exclude %{_mandir}/man8/rpmdeps.8* -%config(noreplace,missingok) /etc/cron.daily/rpm -%config(noreplace,missingok) /etc/logrotate.d/rpm +%{_sysconfdir}/cron.daily/rpm +%config(noreplace,missingok) %{_sysconfdir}/logrotate.d/rpm + +%dir %{multiarch_bindir} +%dir %{multiarch_includedir} +%if "%{_lib}" == "lib64" +%dir %(linux32 rpm -E %%{multiarch_bindir}) +%dir %(linux32 rpm -E %%{multiarch_includedir}) +%endif %{_includedir}/multiarch-dispatch.h %files build -%defattr(755, rpm, rpm) %{_bindir}/gendiff %{_bindir}/rpmbuild %{_bindir}/multiarch-platform -%{_rpmhome}/bin/abi-compliance-checker.pl +#%%{_rpmhome}/bin/abi-compliance-checker.pl %{_rpmhome}/bin/api-sanity-autotest.pl -%{_rpmhome}/bin/chroot -%{_rpmhome}/bin/cp +%{_rpmhome}/bin/api-sanity-checker.pl %{_rpmhome}/bin/dbsql %{_rpmhome}/bin/debugedit -%{_rpmhome}/bin/find %{_rpmhome}/bin/install-sh +%{_rpmhome}/bin/lua +%{_rpmhome}/bin/luac %{_rpmhome}/bin/mkinstalldirs +%{_rpmhome}/bin/pom2spec %{_rpmhome}/bin/rpmcache %{_rpmhome}/bin/rpmcmp %{_rpmhome}/bin/rpmdeps %{_rpmhome}/bin/rpmdigest %{_rpmhome}/bin/rpmkey +%{_rpmhome}/bin/rpmlua +%{_rpmhome}/bin/rpmluac %{_rpmhome}/bin/rpmrepo %{_rpmhome}/bin/sqlite3 -%if %{with xar} -%{_rpmhome}/bin/txar -%endif -%{_rpmhome}/bin/wget %dir %{_rpmhome}/helpers %{_rpmhome}/helpers/* %dir %{_rpmhome}/qf @@ -588,9 +1023,11 @@ cp -r apidocs/html %{buildroot}%{_docdir}/rpm %{_rpmhome}/find-provides.perl %{_rpmhome}/find-req.pl %{_rpmhome}/find-requires.perl +%{_rpmhome}/fontconfig.prov %{_rpmhome}/gem_helper.rb %{_rpmhome}/getpo.sh %{_rpmhome}/gstreamer.sh +%{_rpmhome}/haskelldeps.sh %{_rpmhome}/http.req %{_rpmhome}/javadeps.sh %{_rpmhome}/kmod-deps.sh @@ -617,8 +1054,7 @@ cp -r apidocs/html %{buildroot}%{_docdir}/rpm %if %{with js} %{_rpmhome}/bin/tjs %endif -%attr(0644, rpm, rpm) %{_rpmhome}/macros.rpmbuild -%defattr(-, root, root) +%{_rpmhome}/macros.rpmbuild %{_mandir}/man8/rpmbuild.8* %{_mandir}/man8/rpmdeps.8* @@ -630,44 +1066,38 @@ cp -r apidocs/html %{buildroot}%{_docdir}/rpm %{_libdir}/librpmmisc-%{libver}.so %{_libdir}/librpmbuild-%{libver}.so %if %{with js} -#FIXME: lib64! why not just place in _libdir? -# at least this one is(/seems to be(?)) a "regular" & "unique" (without risk of -# any conflicts) shared library with "normal" soname, libtool versioning and all... %{_rpmhome}/lib/librpmjsm.so.* %{_rpmhome}/lib/rpmjsm.so %endif -#%if %{with sqlite} -#%{_rpmhome}/libsql*.so.* -#%endif +#%%if %%{with sqlite} +#%%{_rpmhome}/libsql*.so.* +#%%endif +%{_rpmhome}/lib/liblua.la %files -n %{librpmnamedevel} -#%doc apidocs/html +#%%doc apidocs/html %{_includedir}/rpm -%{_libdir}/librpm.la %{_libdir}/librpm.so +%{_libdir}/librpm.la %{_libdir}/librpmconstant.la %{_libdir}/librpmconstant.so -%{_libdir}/librpmdb.la %{_libdir}/librpmdb.so -%{_libdir}/librpmio.la +%{_libdir}/librpmdb.la %{_libdir}/librpmio.so -%{_libdir}/librpmmisc.la +%{_libdir}/librpmio.la %{_libdir}/librpmmisc.so -%{_libdir}/librpmbuild.la +%{_libdir}/librpmmisc.la %{_libdir}/librpmbuild.so +%{_libdir}/librpmbuild.la %{_libdir}/pkgconfig/rpm.pc %if %{with js} -#FIXME: lib64! -%{_rpmhome}/lib/librpmjsm.la %{_rpmhome}/lib/librpmjsm.so -%{_rpmhome}/lib/rpmjsm.la +%{_rpmhome}/lib/librpmjsm.la %endif -#%if %{with sqlite} -#%{_rpmhome}/libsql*.la -#%{_rpmhome}/libsql*.so -#%endif - +#%%if %%{with sqlite} +#%%{_rpmhome}/libsql*.so +#%%endif %files -n %{librpmstatic} %{_libdir}/librpm.a @@ -677,18 +1107,13 @@ cp -r apidocs/html %{buildroot}%{_docdir}/rpm %{_libdir}/librpmmisc.a %{_libdir}/librpmbuild.a -%if %{with js} -#FIXME: lib64! -%{_rpmhome}/lib/librpmjsm.a -%{_rpmhome}/lib/rpmjsm.a -%endif -#%if %{with sqlite} -#%{_rpmhome}/libsql*.a -#%endif - %if %{with perl} %files -n perl-%{perlmod} -#%doc perl/Changes +#%%doc perl/Changes +%if %{with embed} +%{_rpmhome}/lib/rpmperl.so +%{_rpmhome}/lib/rpmperl.la +%endif %{_mandir}/man3/RPM* %{perl_vendorarch}/%{perlmod}.pm %dir %{perl_vendorarch}/%{perlmod} @@ -698,9 +1123,33 @@ cp -r apidocs/html %{buildroot}%{_docdir}/rpm %if %{with python} %files -n python-rpm +%if %{with embed} +%{_rpmhome}/lib/rpmpython.so +%{_rpmhome}/lib/rpmpython.la +%endif %dir %{py_platsitedir}/rpm %{py_platsitedir}/rpm/*.py %{py_platsitedir}/rpm/*.so +%{py_platsitedir}/rpm/_rpmmodule.la +%endif + +%if %{with ruby} +%files -n rpm-rubyembed +%{_rpmhome}/bin/trb +%{_rpmhome}/lib/rpm.so +%{_rpmhome}/lib/rpmruby.so +%endif + +%if %{with tcl} +%files -n rpm-tclembed +%{_rpmhome}/lib/rpmtcl.so +%{_rpmhome}/lib/rpmtcl.la +%endif + +%if %{with squirrel} +%files -n rpm-squirrelembed +%{_rpmhome}/lib/rpmsquirrel.so +%{_rpmhome}/lib/rpmsquirrel.la %endif %if %{with docs} @@ -711,1296 +1160,5 @@ cp -r apidocs/html %{buildroot}%{_docdir}/rpm %changelog -* Tue Jul 12 2011 Per Øyvind Karlsen 1:5.3.12-0.20110712.2 -+ Revision: 689772 -- revert a previous commit of mine which broke deps without distepoch (rushed) - -* Tue Jul 12 2011 Per Øyvind Karlsen 1:5.3.12-0.20110712.1 -+ Revision: 689687 -- change errors on dependency loops to warnings -- update to new cvs snapshot: - o fixes issues with upgrading packages of same EVR, but different - distepoch - o fix /usr/lib/rpm/bin/dbconvert segfaulting when no root is provided - o automatically install gstreamer.sh dep genereator - -* Wed Jul 06 2011 Per Øyvind Karlsen 1:5.3.12-0.20110625.3 -+ Revision: 689009 -- install gstreamer.sh dependency generator - -* Mon Jul 04 2011 Per Øyvind Karlsen 1:5.3.12-0.20110625.2 -+ Revision: 688659 -- add a conflicts on older beecrypt version to fix upgrade from 2009.0 -- add a conflicts on older elfutils to handle upgrade from 2009.0 - -* Sat Jun 25 2011 Per Øyvind Karlsen 1:5.3.12-0.20110625.1 -+ Revision: 687193 -- new cvs snapshot -- add a suggests on db51-utils -- fix broken %%optflags for i686-linux macros (#63517) - - + Matthew Dawkins - - added arm support for rpm5, cpuinfo doesn't support arm - -* Wed Jun 01 2011 Per Øyvind Karlsen 1:5.3.11-0.20110525.3 -+ Revision: 682280 -- add a null pointer check for nvra disttag hack, otherwise we'll easily segfault -- update javascript enabler to pass the right arguments -- come up with a better hack for querying rpmdb for nvra with disttag (ie. urpme - on plf packages with disttag should now *finally* be working properly..;) -- add buildrequires on db51-utils (required by testsuite) - -* Wed May 25 2011 Per Øyvind Karlsen 1:5.3.11-0.20110525.1 -+ Revision: 679105 -- reenable regression checks -- fix too hasty merged syslog patch (P20) -- don't package *.{a,la} files for python module -- drop '-DXP_UNIX=1' from CPPFLAGS, leftover from internal js build... -- follow s/ossp_uuid/ossp-uuid/ package name change -- update to latest cvs snapshot (for cleaning and also fixes #63318) - -* Mon May 16 2011 Per Øyvind Karlsen 1:5.3.10-0.20110422.4 -+ Revision: 675030 -- fix c++ compatibility in rpmdb.h api (P22) -- fix build of dbconvert & install it by default (P21) -- update doxygen input file paths for api docs (P20) -- workaround doxygen 1.7.4 issue blocking build (P19 from pcpa) -- fix assertion error when trying to extract archives without required perms - -* Mon May 02 2011 Per Øyvind Karlsen 1:5.3.10-0.20110422.3 -+ Revision: 662260 -- move multiarch-dispatch to main package (#63160) - - + Funda Wang - - move multiarch-dispath into main rpm package (bug#63160) - -* Mon Apr 25 2011 Funda Wang 1:5.3.10-0.20110422.2 -+ Revision: 658722 -- fix wrong path of mkmultiarch script - -* Sun Apr 24 2011 Per Øyvind Karlsen 1:5.3.10-0.20110422.1 -+ Revision: 658161 -- drop redundant %%defattr usage & buildroot cleaning at beginning of %%install -- don't load arch specific macros from rpm-mandriva-setup anymore, they've been - merged into the standard arch specific macros for rpm -- obsolete multiarch-utils -- new cvs snapshot - -* Sun Apr 10 2011 Per Øyvind Karlsen 1:5.3.9-0.20110330.7 -+ Revision: 652164 -- fix filetriggers firing multiple times hack (P19) - -* Thu Apr 07 2011 Per Øyvind Karlsen 1:5.3.9-0.20110330.6 -+ Revision: 651738 -- add proper fix for i18n descriptions from Jeff -- fix %%_arch to be canonical - -* Tue Apr 05 2011 Per Øyvind Karlsen 1:5.3.9-0.20110330.5 -+ Revision: 650797 -- fix translated descriptions not being added to packages (P18, #62979) -- add /etc/rpm/sysinfo dir - -* Fri Apr 01 2011 Per Øyvind Karlsen 1:5.3.9-0.20110330.4 -+ Revision: 649644 -- fix stupid typo that managed to sneak itself back in again to mess up db log dir -- don't ship find-provides & find-requires, we're using our own version anyways.. -- enable acl support -- drop unused expat-devel buildrequires -- s/tetex/texlive/ (pcpa) -- fix --without docs -- disable sqlite & docs build for bootstrap builds - -* Wed Mar 30 2011 Per Øyvind Karlsen 1:5.3.9-0.20110330.3 -+ Revision: 649239 -- bah, fix incorrect package name in conflicts on db5.1 - -* Wed Mar 30 2011 Per Øyvind Karlsen 1:5.3.9-0.20110330.2 -+ Revision: 649233 -- add versioned buildrequires & conflicts to ensure >= db 5.1.25 - -* Wed Mar 30 2011 Per Øyvind Karlsen 1:5.3.9-0.20110330.1 -+ Revision: 649206 -- new cvs snapshot -- add rpm-helper>rpm to _dependency_whiteout_mandriva -- fix typo messing up bdb log dir used.. -- update cvs snapshot (pulls in fix for ie. #62822 among other things) -- drop redundant --with-sqlite -- fix duplicate %%clean section (thx andrey for noticing!) -- fix mess happening while merging file trigger workaround upstream (#62865) - -* Fri Mar 25 2011 Per Øyvind Karlsen 1:5.3.9-0.20110324.1 -+ Revision: 648434 -- drop %%clean now that it's enabled by default -- enable build of augeas support -- build with uuid support -- new cvs snapshot - -* Sun Mar 06 2011 Per Øyvind Karlsen 1:5.3.9-0.20110303.2 -+ Revision: 642259 -- drop duplicates of of package first independent of distepoch (P16) - -* Thu Mar 03 2011 Per Øyvind Karlsen 1:5.3.9-0.20110303.1 -+ Revision: 641499 -- new cvs snapshot -- get rid of some compile warnings for ugly distepoch pattern hack.. - - + Funda Wang - - rebuild to obsolete old packages - -* Mon Feb 21 2011 Per Øyvind Karlsen 1:5.3.8-0.20110125.5 -+ Revision: 639230 -- work around file triggers firing multiple times and a related critical memleak -- set count in rpmmiCount() rather than rpmmiNext() for iterators with db cursor - set to reduce unnecessary overhead - -* Tue Feb 15 2011 Per Øyvind Karlsen 1:5.3.8-0.20110125.4 -+ Revision: 637879 -- accept NULL as argument for rootDir with mandriva filetriggers (#62395) -- fix issue with uninstall triggers always being run during upgrade (#62267) -- reset db cursor to NULL at end of rpmmiCount() so iterator won't break (#62279) -- drop feeble attempt to hack around disttag/distepoch issues by undefining it... - -* Thu Feb 10 2011 Per Øyvind Karlsen 1:5.3.8-0.20110125.3 -+ Revision: 637195 -- fix typo in russian translation (#62333) -- fix %%__dbi_sqlconfig typo (#62386) - -* Sat Feb 05 2011 Per Øyvind Karlsen 1:5.3.8-0.20110125.2 -+ Revision: 636294 -- revert st00pid conflicts->obsoletes change which broke upgrades... -- replace conflict on perl-RPM4 with an obsolete -- don't try adding files awaiting file triggers when --test is used (P9) - - + Funda Wang - - add python link patch - - link python module with python lib - -* Mon Jan 31 2011 Per Øyvind Karlsen 1:5.3.8-0.20110125.1 -+ Revision: 634521 -- fix problem with ignored signals causing rpmbuild to break with gnome-terminal - (fixes #62262, P7 from Theerud Lawtrakul/Jeff Johnson) ---Denne lnjoen og de som er under vil bli ignorert-- - A SOURCES/rpm-5.3.8-rpmsq-ignored-signal-return-value.patch - M SPECS/rpm.spec -- remove no longer need Requires(post) on db51-utils which sed -- replace conflicts on librpm < 5.3 with obsoletes -- fix wrong tool path macros (#62322) -- fix regression tests and enable all of them in %%check from now on -- new cvs snapshot, drop patches merged upstream -- fix regression in rpmdsCompare() patch -- ignore -mdv2011.0 (disttag/distepoch) when querying package names for now - - + Funda Wang - - really fix tool path - -* Sun Jan 23 2011 Per Øyvind Karlsen 1:5.3.8-0.20110109.11 -+ Revision: 632404 -- d'oh, missed a line in previous patch.. - -* Sun Jan 23 2011 Per Øyvind Karlsen 1:5.3.8-0.20110109.10 -+ Revision: 632396 -- replace rpmdsCompare() patch with a simpler and less intrusive for now -- if distsuffix is defined, use it for disttag (from Anssi) -- fix handling of missing values when using 'rpm' directly as well (#55810 again) -- drop bootstrap.spec to workaround bs issue.. -- fix inverted logic of %%_legacy_compat_non_pre_scripts_dont_fail -- don't do conversion in %%posttrans anymore, it will be handled by urpmi now -- change non-pre-scripts-dont-fail patch to be macro enabled -- gather all legacy compatibility hacks into legacy_compat.macros -- add back macro-enabled no-doc-conflicts patch -- always set log dir as a transaction log will always be created independent of whether setting DB_INIT_LOG or not -- add a dependency on perl-IO-String for perl-RPM (#61709) -- disable fsync call per file causing heavy performane penalties (P8, from eugeni) -- handle missing distepoch in version comparision (P7) -- increase max number of bdb locks -- don't fail package install on scriptlet failure, except for %%pre -- remove ppc macro symlink for now.. -- fix install of dependency_whiteout.macros -- fix typo -- add more dependency loops to %%depency_whiteout and move out to separate file -- use %%_dependency_whiteout to fix some dependency loops for now.. -- be sure that /var/lib/rpm/log exists before using it.. -- don't make path to rpm absolute... -- be sure to set a default logdir for bdb, otherwise it won't be set for empty - chroots -- fix use of no longer existing binaries such as 'rpmquery' (thx Dick Gevers) -- add provide/obsolete on %%{_lib}rpmconstant-devel -- fix typo in perl bindings giving issues with 'mdvsys' on missing buildrequires -- rpmconstant is part of rpm5, so obsolete/provide this.. - -* Sun Jan 09 2011 Per Øyvind Karlsen 1:5.3.8-0.20110109.3mdv2011.0 -+ Revision: 630755 -- use default directory for %%setup -- add missing errno.h header to rpm4compat.h (P0) - -* Sun Jan 09 2011 Per Øyvind Karlsen 1:5.3.8-0.20110109.2mdv2011.0 -+ Revision: 630735 -- add back conflicts: librpm < 5.3 now that 'abrt' is linked against this version - -* Sun Jan 09 2011 Per Øyvind Karlsen 1:5.3.8-0.20110109.1mdv2011.0 -+ Revision: 630713 -- new cvs snapshot -- get rid of doc-copy workarond and duplication of docs in 'rpm-build' -- disable conflicts on older librpm again awaiting 'abrt' in main/release rebuild -- fix path ppc-* -> powerpc-* symlink path, and always create it... -- fix 'rpm -qf' to work on owned files (#62148) -- reenable conflict on older librpm versions -- merge 5.3 branch - -* Sat Nov 27 2010 Funda Wang 1:4.6.1-5mnb2 -+ Revision: 601652 -- rebuild for liblzma 5 - -* Fri Oct 29 2010 Michael Scherer 1:4.6.1-4mnb2 -+ Revision: 589999 -- rebuild for python 2.7 - -* Mon Oct 18 2010 Per Øyvind Karlsen 1:4.6.1-3mnb2 -+ Revision: 586616 -- automatically handle ruby gem extraction in %%setup - -* Thu Oct 07 2010 Per Øyvind Karlsen 1:4.6.1-2mnb2 -+ Revision: 583901 -- fix regression introduced with %%exclude change in previous release (fixes #61207) - -* Wed Sep 29 2010 Per Øyvind Karlsen 1:4.6.1-1mnb2 -+ Revision: 582007 -- add '~' suffix to backup files created when using %%apply_patches -- finally put copyright & serial tags to death for real -- reapply fix for rmpvercmp with missing values & conflicts behaviour fix(#55810) -- update to to more recent debugedit that handles '.debug_pubtypes' section -- "New" release: 4.6.1 (while awaiting decission on where to go next...) -- fix %%exclude's behaviour to *only* mean exclude from %%files, not from check - of unpackaged files. This brings back the behaviour we had in the past with - rpm 4.4.8, and will require files not to be packaged to be deleted in %%install, - and breaks building of any packages which incorrectly uses %%exclude for this - purpose. Please fix any packages doing so! (P1016) - -* Fri Aug 20 2010 Christophe Fergeau 1:4.6.0-15mnb2 -+ Revision: 571456 -- drop Pascal's patch for now -- fix "canonicalization unexpectedly shrank by one character" errors, patch by Anssi -- drop patch 135 which looks dubious -- revert previous commit, we don't want to diverge too much from rpm 4.x, we can - readd it *after* this patch is upstreamed in rpm 4.x - - + Pascal Terjan - - Refuse to build a rpm with 2 identical triggers (#60699) - - + Per Øyvind Karlsen - - reapply fix for #55i810 (if not fully comprehended, those of us who wrote it - does, ao removing out of ignorance and lack of insight will not e tolerated. - -* Mon May 17 2010 Christophe Fergeau 1:4.6.0-14mnb2 -+ Revision: 544968 -- use db 4.8 -- fix default perms in debug packages, #59083 - - + Pascal Terjan - - Check chroot return code before running external script - - Check chroot return code before running lua script - -* Fri Apr 16 2010 Christophe Fergeau 1:4.6.0-12mnb2 -+ Revision: 535522 -- fix file trigger hang when several filetrigger scripts are run in parallel (#57878) - - + Oden Eriksson - - rebuilt against nss-3.12.6 - -* Wed Feb 17 2010 Christophe Fergeau 1:4.6.0-10mnb2 -+ Revision: 507168 -- don't diverge from upstream wrt EVR comparisons - -* Tue Feb 16 2010 Funda Wang 1:4.6.0-9mnb2 -+ Revision: 506733 -- rebuild for libpopt file path change - - + Per Øyvind Karlsen - - fix broken bitwise operator usage (thx to anssi for noticing) - - do a new fix for #55810 that doesn't cause same regressions as the previously - revert fix and hopefully no other regressions either.. ;) - (P1010, http://rpm5.org/community/rpm-devel/4011.html) - -* Fri Nov 20 2009 Per Øyvind Karlsen 1:4.6.0-8mnb2 -+ Revision: 467682 -- revert previous change as it'll break == dependencies on version only - (which even requires-on-release policy requires) :/ - -* Fri Nov 20 2009 Per Øyvind Karlsen 1:4.6.0-7mnb2 -+ Revision: 467652 -- don't skip release comparision when checking conflicts if release value is - missing (P1011 from Jeff Johnson, fixes #55810) - - + Michael Scherer - - fix unowned directory, reported by bitshuffler on irc, causing problem - when installing rpm and using the wrong umask - -* Fri Sep 25 2009 Olivier Blin 1:4.6.0-6mnb2 -+ Revision: 448653 -- remove n32 support for now (not actually used) -- handle n32 ABI in find-requires and find-provides (from Arnaud Patard) -- switch to armv5tl (from Arnaud Patard) - There are little chances that we'll have armv4tl. Doesn't use - armv5tel as some SoC have broken instructions in the "e" extension -- fix %%_isa rpm macros for ARM (from Arnaud Patard) -- mips build fixes: define __isa* macros otherwise rpm doesn't work - (from Arnaud Patard) -- fix stack-protector check: -fstack-protector doesn't error if it's - not supported but issues a warning, building test case with -Werror - the test case fixes the issue (from Arnaud Patard) -- add %%mips macro define all mips abi (from Arnaud Patard) - -* Sun Aug 23 2009 Anssi Hannula 1:4.6.0-5mnb2 -+ Revision: 419760 -- fix ignored Requires(pre) and (post) when they have a plain Requires - counterpart (rpm-fix-corequisites.patch backported from upstream 4.7.1) -- fix legacy prereq detection (rpm-fix-islegacyprereq.patch backported - from upstream 4.7.1) -- map prereq to Requires(pre,preun) instead of nothingness when building - (rpm-map-prereq.patch backported from upstream 4.7.1) - - + Per Øyvind Karlsen - - Avoid adding Lua sources/patches twice when recursing (P1010, git backport) - -* Fri Jul 24 2009 Anssi Hannula 1:4.6.0-4mnb2 -+ Revision: 399298 -- fix filetriggers to be called on package removal as well (regression - introduced in 4.6.0 package because of an error in rediffing of - filetriggers.patch; fixes bug #52333) - -* Tue Jun 30 2009 Thierry Vignaud 1:4.6.0-3mnb2 -+ Revision: 391017 -- bump release so that cooker's rpm is newer than 2009.1's one - -* Thu Jun 11 2009 Christophe Fergeau 1:4.6.0-2mnb2 -+ Revision: 385093 -- add missing calls to rpmluaPop to patch 159, might fix #50579 -- Revert switch to db4.7 - - + Per Øyvind Karlsen - - Expose packagecolor tag and add new tags from rpm5 as rpm otherwise will break - when these unknown tags might be found in the rpmdb. Notice that this will only - make rpm recognize these, not implement actual support for them.. (P1008) - - build against bdb 4.7 - - build against db4.7 rather than db4.6 from now on - - + Arnaud Patard - - define apply_patches if not already done. This fix bootstrapping issues - (eg building current rpm on older rpm or building rpm on a system without - rpm) - - fix dependency on patch as rpm-build is now using "patch -U" which has - been introduced in version 2.5.9-7mdv2009.1. - -* Fri Feb 13 2009 Christophe Fergeau 1:4.6.0-1mnb2 -+ Revision: 340115 -- Update to rpm 4.6.0 - -* Thu Jan 29 2009 Pixel 1:4.6.0-0.rc3.7mnb2 -+ Revision: 335221 -- add %%apply_patches: it can be used to replace all "%%patchN" lines, - but it forces all patches to be "-p1". -- call %%_patch and %%_after_setup for use in rpm-mandriva-setup-build - (useful for "--with git_repository") - - + Per Øyvind Karlsen - - don't wipe out $DOCDIR when using %%doc as it will wipe out any files that would - happen to be installed during %%install. (P1008) - -* Tue Jan 20 2009 Pixel 1:4.6.0-0.rc3.6mnb2 -+ Revision: 331759 -- replace nss-inithack patch with upstream patch - (which is more complete, esp fixes rpmresign in perl-RPM4) -- add patch fixing rpmdsMerge on rpmdsSingle (fixes 07dep.t in perl-RPM4) -- fix segfault triggered by perl-RPM4 tests - - + Per Øyvind Karlsen - - fix internal enum value for xz (noticed by jnovy, thx!) - - oops, fix a minor glitch with a final api change - - add versioned requires on liblzma-devel since we *really* need latest api - changes :) - - update lzma payload support to add support for new xz format in parallel(P1007) - -* Wed Dec 24 2008 Funda Wang 1:4.6.0-0.rc3.5mnb2 -+ Revision: 318370 -- temporarily disable graphviz BR - - + Michael Scherer - - rebuild for new python - - + Pixel - - add conflict on urpmi-recover since rpm 4.6.0 dropped support for --repackage - -* Thu Dec 18 2008 Pixel 1:4.6.0-0.rc3.3mnb2 -+ Revision: 315608 -- add patch153: "fix" segfault in mdkapplet (#46323) -- add patch154: fix compilation with Werror=format-security -- merge patch91 (check-dupl-files) into patch111 (check-files fix for "//" in buildroot) - -* Mon Dec 15 2008 Pixel 1:4.6.0-0.rc3.2mnb2 -+ Revision: 314562 -- enable sqlite (was disabled after rpm-4.6.0 switch) - -* Fri Dec 12 2008 Pixel 1:4.6.0-0.rc3.1mnb2 -+ Revision: 313584 -- 4.6.0-rc3 -- drop patch153 (buildroot-subpackage), fixed upstream - -* Thu Dec 11 2008 Pixel 1:4.6.0-0.rc2.2mnb2 -+ Revision: 312890 -- rediff patch71, patch83, patch91, patch140, patch145, patch147, patch1005 -- fix patch2002 (python-writeHdlist), was broken with rpm 4.6 API - -* Tue Dec 09 2008 Pixel 1:4.6.0-0.rc2.1mnb2 -+ Revision: 312303 -- use %%configure (so that libdir is correctly on x86_64) -- 4.6.0-rc2 -- add patch152: fix build -- add patch153: buildroot with subpackages issue -- drop already unused %%buildnptl (obsolete since rpm uses system libdb) -- drop patch134 (defaultbuildroot), so %%defaultbuildroot is no more used, - global %%buildroot is used, and BuildRoot is no more handled -- drop patch56 (ppc32). hopefully now unneeded -- drop patch44 (amd64-x86_64 compat). hopefully now unneeded -- drop patch112 (dont-use-rpmio-to-read-file-for-script), only needed on rpm 4.4.8? -- drop patch1002 (default-topdir--usr-src-rpm). it is now /root/rpmbuild -- drop patch1003: drop support for "suggests" the way rpm >= 4.4.7 do it - (all Mandriva packages uses the new "suggests" nowadays) -- drop patch139 (do-not-allow-fileconflict-between-non-colored-file), - since partially applied upstream (47c85270631de173d873b98bc79727e2db203007) -- drop popt (it is no more internal), drop patch1004, patch2004 -- drop patch3 ("file" is no more internal) -- drop patch149 (upstream has already got rid of internal db) -- drop patch1450 (problem fixed upstream, though differently) -- drop patch132 (extcond), patch133 has been simplified (butchered) to work without it -- drop patch1133 (integrated in patch133 (weakdeps)) -- drop patch100 (rpmbuild-missing), no more needed since we have rpmb_deprecated -- drop patch142, patch143, patch144, patch150 applied upstream -- simplify patch1001 since most is upstream, create patch1006 containing the - PayloadIsLzma compat issue -- adapt patch137 (headerIconv) -- adapt patch31 (syslog) -- adapt/simplify patch114: only specifically read macros.d/*.macros -- adapt patch2000, patch2001 (serial/copyright tag) -- adapt patch133 (weakdeps), drop --suggests/--recommends difference -- rediff patch49, patch64, patch70, patch141, patch146, patch147, patch148, - patch151, patch2002, patch2005 - -* Sun Oct 19 2008 Per Øyvind Karlsen 1:4.4.2.3-22mnb2 -+ Revision: 295367 -- rebuild against liblzma which I had to bump the major of yet again -- actually remember to bump popt release as well this time (popt should REALLY - be split out!!!) - -* Sat Oct 18 2008 Per Øyvind Karlsen 1:4.4.2.3-21mnb2 -+ Revision: 294824 -- fix build with new liblzma (updates P1001) - - + Pixel - - failing triggers must not block an update (otherwise both packages are kept) - -* Wed Oct 01 2008 Pixel 1:4.4.2.3-20mnb2 -+ Revision: 290443 -- protect-against-non-robust-futex patch: remove the ugly error messages - when non-root - -* Wed Oct 01 2008 Pixel 1:4.4.2.3-19mnb2 -+ Revision: 290325 -- ensure stale futex locks do not block (#41868) - -* Thu Sep 11 2008 Pixel 1:4.4.2.3-18mnb2 -+ Revision: 283690 -- fix broken cpio for hardlink on softlink (#43737) -- remove /usr/lib/libpopt.so.0 symlink (unneeded) - -* Sat Sep 06 2008 Pixel 1:4.4.2.3-17mnb2 -+ Revision: 281842 -- use external libdb-4.6.so instead of internal one (was DB 4.3.27: December 22, 2004). - (hopefully fixing #41868) - -* Tue Aug 26 2008 Pixel 1:4.4.2.3-16mnb2 -+ Revision: 276212 -- add patch148 which ensures chroot errors are not ignored - (the bug occured on mandriva build system, the files - were installed on the non rooted system) - -* Tue Aug 05 2008 Frederic Crozat 1:4.4.2.3-15mnb2 -+ Revision: 263799 -- bump popt release too -- Bump minimal version of rpm-mandriva-setup, to ensure filetriggers - are enabled during upgrade from older distributions - -* Thu Jul 17 2008 Oden Eriksson 1:4.4.2.3-14mnb2 -+ Revision: 237798 -- bump release for popt as well -- fix deps and rebuild against latest neon-devel - -* Fri Jul 04 2008 Pixel 1:4.4.2.3-13mnb2 -+ Revision: 231680 -- fix memory leak in patch124 (regression introduced on 2008-06-23) -- fix detecting wether filetriggers are activated (through %%_filetriggers_dir) - -* Thu Jun 26 2008 Pixel 1:4.4.2.3-12mnb2 -+ Revision: 229317 -- fix --testing errors introduced by filetriggers - -* Tue Jun 24 2008 Pixel 1:4.4.2.3-11mnb2 -+ Revision: 228550 -- nicely handle /etc/rpm/macros.cdb disappearance (esp. for people having %%_dbapi set there) - -* Mon Jun 23 2008 Pixel 1:4.4.2.3-10mnb2 -+ Revision: 228082 -- enhance patch124 to use "Dirnames" db before using "Packages" db - (hence much less db accesses in the pathological "COPYING" case) -- rpm must feature PayloadIsLzma = 4.4.2-1 to be the most compatible (?!) - (with SuSE, and with temporary cooker packages with PayloadIsLzma <= 4.4.2.2-1) - -* Sun Jun 22 2008 Pixel 1:4.4.2.3-8mnb2 -+ Revision: 227894 -- PayloadIsLzma version must be at least 4.4.6-1 to be compatible with mdv2008.0 -- fix segfault when transaction fails - -* Fri Jun 20 2008 Pixel 1:4.4.2.3-7mnb2 -+ Revision: 227396 -- drop our old macros.cdb, which was forcing old values, - esp "verify" which forcing rpm to verify db after each changes - (which was making rpm quite slow when rpmdb was not in cache) -- cleanup: drop not applied global-RPMLOCK patch - -* Thu Jun 19 2008 Pixel 1:4.4.2.3-6mnb2 -+ Revision: 226213 -- fix filetriggers (librpm was exiting in case of sigpipe in filetrigger script) -- checks on "non packaged binary packages" now depend on %%_missing_subpackage_terminate_build (patch147) -- checks on "non packaged binary packages" only done on "mdv" packages (patch147) - - + Per Øyvind Karlsen - - fix version typo - - switch to use liblzma for lzma payload (P1000, partly derived from rpm5.org & OpenSuSE) - -* Wed Jun 11 2008 Pixel 1:4.4.2.3-4mnb2 -+ Revision: 218093 -- rpmbuild: add patch to ensure some parse errors are really fatal as they should - -* Mon Jun 09 2008 Pixel 1:4.4.2.3-3mnb2 -+ Revision: 217217 -- add new fatal errors (during package build): - o disallow scriptlets for non packaged binary packages - o "%%files foo" for subpackages is now mandatory -- do not call ldconfig in %%post/%%postun, it is now handled by filetriggers -- replace "%%post -p ldconfig" hack with a full featured generic solution: - filetriggers (cf http://wiki.mandriva.com/en/Rpm_filetriggers) -- "#%%define foo bar" is now a fatal error -- handle "%%posttrans -p ..." with no script body (eg: %%posttrans -p /sbin/ldconfig) -- add "requires tar" in rpm-build -- fix build of debugedit (patch143) - -* Tue May 13 2008 Thierry Vignaud 1:4.4.2.3-1mnb2 -+ Revision: 206778 -- fix build on x86_64 - - + Pixel - - 4.4.2.3 - - add patch142 which ensures chroot errors are not ignored - (the bug occured on mandriva build system, the files from package binutils - were installed on the non rooted system) - - drop patches applied upstream: 136, 138 - - rediff patch17 - -* Tue Apr 01 2008 Pixel 1:4.4.2.3-0.rc1.7mnb1 -+ Revision: 191469 -- postpone and group ldconfig %%post in %%posttrans instead of wrongly skipping ldconfig - -* Fri Mar 28 2008 Pixel 1:4.4.2.3-0.rc1.6mnb1 -+ Revision: 190842 -- rebuild with fixed libneon0.26-devel - -* Mon Mar 17 2008 Pixel 1:4.4.2.3-0.rc1.5mnb1 -+ Revision: 188330 -- add support for "suggests" and "enhances" in rpmds (needed for "sophie") (nanardon) -- use %%_vendor instead of %%vendor (thanks-to/required-by nanardon) -- fix typo in recent commit -- fix broken symlink (due to %%rpmversion != %%srcver for rc1) -- trivial fix for Russian translation (#38713) - - + Toshihiro Yamagishi - - get rid of _host_vendor definition. It should be defined by rpm-xxx-macros. - - use original find-requires,find-provides,find-lang when build with turbolinux. - -* Sat Mar 01 2008 Pixel 1:4.4.2.3-0.rc1.3mnb1 -+ Revision: 177474 -- fix file conflicts wrongly allowed on x86_64 -- when dropping requires during tsort, do not display "PreReq" when it really is "Requires" -- rpm-mandriva-setup and rpm-mandriva-setup-build requires are only on Mandriva -- add buildlang patch which unsets locales when building packages (for Turbolinux) - - + Thierry Vignaud - - replace %%mkrel with %%manbo_mkrel for Manbo Core 1 - -* Thu Feb 14 2008 Pixel 1:4.4.2.3-0.rc1.2mdv2008.1 -+ Revision: 167788 -- use rpmrc and rpmpopt from rpm-manbo-setup -- get best lang from rpm HEADERI18NTABLE, instead of getting first fuzzy match - (eg: zh_TW matches zh_CN whereas zh_TW entry is available) -- debugedit: remove a wrong check in case %%_topdir is /RPM (from Turbolinux) -- add japanese popt translations -- add Turbolinux specific patches: - o re-allow "Serial" and "Copyright" (aliases of "Epoch" and "License") - (to ease Turbolinux migration) - o add writeHeaderListTofile function into python binding - (needed by Turbolinux buildman build system) - - + Toshihiro Yamagishi - - headerIconv.patch: check realloc() value - - convert the data to a specific encoding which used in the selected locale. - -* Mon Jan 28 2008 Pixel 1:4.4.2.3-0.rc1.1mdv2008.1 -+ Revision: 159090 -- 4.4.2.3 adds ix86 macros files to x86_64 -- new release 4.4.2.3-rc1 -- libpopt needs a release number different from rpm so that we can reset rpm's - release and increase libpopt's -- drop applied patches: patch82 (ordering), patch98 (bad pointer), - patch108 (dgettext), patch116 (qv), patch119 (without-O2), - patch121 (timeout 60secs), patch127 (rpmbuild --quiet), - patch128 (rpm -K segfault), patch136 (macro on last line), - patch1006 (triggerprein), patch1007 (russian), - patch1008 (display Requires found), -- drop patch135 (truncated rpmProblemString): no more needed, workarounded - upstream - -* Wed Jan 23 2008 Pixel 1:4.4.2.2-7mdv2008.1 -+ Revision: 157054 -- fix rpmbuild not printing Requires after build (fix backported from 4.4.8) (#36672) -- allow doc conflict in same transaction (#37040) - (it was already allowed in different transactions) -- fix russian translation (#36974) - -* Sat Jan 12 2008 Anssi Hannula 1:4.4.2.2-6mdv2008.1 -+ Revision: 149522 -- allow conflicting ghost file types as sometimes the same ghost file - is a file in one package and a symlink in another package (modifies - rpm-4.4.2.2-allow-conflicting-ghost-files.patch) - -* Tue Jan 08 2008 Pixel 1:4.4.2.2-5mdv2008.1 -+ Revision: 146377 -- %triggerprein were missing in 4.4.2.2, adding them - -* Thu Dec 20 2007 Pixel 1:4.4.2.2-4mdv2008.1 -+ Revision: 135996 -- fix multiline macro handling on last line of spec file (#27417) -- fix truncated "file conflict" error message in russian (#31680) - -* Tue Dec 18 2007 Pixel 1:4.4.2.2-3mdv2008.1 -+ Revision: 132430 -- re-introduce temporarily BuildRoot so that rpm builds -- drop patch for SOURCEPACKAGE (unneeded in rpm 4.4.2.2 which keeps compatibility) -- fix defaultbuildroot patch (fix building with %%defaultbuildroot and subpackages) -- allow conflicting %%ghost files (as used to be in rpm >= 4.4.6) -- modify patch no-doc-conflicts instead of patching it -- for compatibility with rpm 4.4.8, allow conflicting doc files in - /usr/share/man, /usr/share/gtk-doc/html /usr/share/gnome/html - -* Mon Dec 17 2007 Pixel 1:4.4.2.2-2mdv2008.1 -+ Revision: 125038 -- patch134 introduces %%defaultbuildroot to use instead of %%buildroot in our global macros -- keep libpopt.so versioning from 4.4.8 (to avoid warnings) -- fix URL -- switch to 4.4.2.2 (using epoch: 1) -- add patch132 and patch133 to handle "Suggests" via RPMTAG_SUGGESTSNAME -- add patches to be compatible with >= 4.4.8 : - o patch1000: handle %%buildroot macro - o patch1001: handle suggests via RPMTAG_REQUIRENAME + RPMSENSE_MISSINGOK - o patch1001: lzma-support (integrates patch130 (lzma-fixes), patch131 (lzma_alone)) - o patch1002: default %%_topdir is /usr/src/rpm - o patch1003: handle RPMSENSE_MISSINGOK (integrates patch129 (do-not-cache-unsatisfied-suggest)) -- drop unneeded patches: - o applied: patch63 (applied in lib/package.c), patch68, patch72, - patch77 (%%_srcdefattr), patch92 (newtar), patch94 (rpmv3-support), - patch113 (%%_docdir_fmt), patch123 (find-lang omf) - o patch1 (no builtin zlib) - o patch2 (rpm is dynamically linked by default) - o patch85 (no more perl module) - o patch87 (was disabling dirname require introduced in 4.4.6) - o patch89 (>= 4.4.6 specific compilation issue) - o patch107 (fixed differently in changeset 6799:446988cfb9c1) - o 4.4.8 specific: patch109, patch117 (dont-replace-config-not-in-db), - patch118 (lowercase platform), patch120 (segfault fix), patch122 (fix - crash with buggy rpm and FILELINKTOS), patch125 (popt.h fix), patch126 - (platform32 support) - o 4.4.8 specific?: patch115 (dont-clean-buildroot-in-install) -- adapt patches: - o rediff: patch31 (syslog), patch64 (vendor popt), patch84 (rpmqv-ghost), - patch116 (qv-use-same-indentation), patch49, patch56, patch82, patch86, - patch112, patch119 - o patch3 (prefer-pic in "file" lib .la) - o patch17 (keep enhancements from upstream version) - o patch114 (read our macros files) - o patch124 (speedup-by-not-checking-same-files-with-different-paths-through-symlink) - and add patch1124 (revert-unused-skipDir-functionality) needed by patch124 -- use autoreconf and don't do it in db/dist (it fails) -- drop perl-RPM (unused and no more in rpm 4.4.2.2) -- drop now unneeded perldirs patch85 -- don't build apidocs since we don't bundle them -- drop patch78 (Do not use futex, but fcntl) which is not doing anything anymore - - + Per Øyvind Karlsen - - use LZMA_Alone file format, even with newer versions (P131, from cvs) - - be more consistent and use unlzma in stead of lzma -d -c in rpm2cpio.sh (lzma patch) - - drop unused leftover macros for lzma patch.. - - final fix of lzma payload patch, it can now be used properly same way as gzip and bzip2 - - correctify lzma fix patch - - switch to patch from cvs for lzma fixes - - update arguments for lzma utils as current old arguments breaks it - - I suck, don't move man pages around at all and stop messing:p - - move man page for perl module to perl-RPM package - - + Olivier Blin - - do not expand _install_langs macro in default /etc/rpm/macros - - fix typo in default /etc/rpm/macros - - explicitely require neon-devel 0.26 (does not build with neon 0.27) - -* Tue Oct 02 2007 Pixel 4.4.8-22mdv2008.0 -+ Revision: 94448 -- fix rpm allowing to remove a package which is both suggested and required (#34342) - -* Fri Sep 28 2007 Pixel 4.4.8-21mdv2008.0 -+ Revision: 93603 -- remove global RPMLOCK, it doesn't seem to fix rpmdb issues, and may cause - installer to crash - -* Thu Sep 27 2007 Pixel 4.4.8-20mdv2008.0 -+ Revision: 93272 -- patch global-RPMLOCK: - o fix rebuilddb (#34181) - o don't lock when querying the db as non-superuser - o fix locking in shared mode (ie fix typo) - o remove message "RPMLOCK_NOWAIT should have been set!" - which can't be done reliably - o more debug messages about RPMLOCK - -* Wed Sep 26 2007 Pixel 4.4.8-19mdv2008.0 -+ Revision: 93120 -- patch global-RPMLOCK: - o allow rpm to not wait on lock when RPMLOCK_NOWAIT is set - o ensure we don't have a dead-lock in package scriptlets which call "rpm -q" - (eg: dkms). but it will die with an error - o do create /var/lib/rpm directory when needed (as done in rpmdb/db3.c) - o use flock instead of fcntl+F_SETLK - (so that we really ensure the same process doesn't open twice the db) - (still need not to lock when accessing in shared mode with not enough rights - to write RPMLOCK) -- fix creating /RPMLOCK instead of /var/lib/rpm/RPMLOCK - -* Mon Sep 24 2007 Pixel 4.4.8-18mdv2008.0 -+ Revision: 92580 -- do not use __db* files anymore, make them private -- (re-)add a global lock to ensure everything is correct - (to ensure doing "rpm -qa" is always correct even if an upgrade is in - progress) -- fix rpm -K segfaulting on corrupted header (#33735) - -* Mon Sep 10 2007 Pixel 4.4.8-17mdv2008.0 -+ Revision: 84150 -- make "rpm -bb --quiet" quiet as should be - -* Thu Sep 06 2007 Pixel 4.4.8-16mdv2008.0 -+ Revision: 81086 -- bug fix release, fix stupid typo in /etc/platform32 reading patch - -* Thu Sep 06 2007 Pixel 4.4.8-15mdv2008.0 -+ Revision: 80965 -- really allow to use "linux32 rpm -bb" instead of "linux32 rpm -bb --target x86_64" - (it uses /etc/rpm/platform32) - -* Wed Sep 05 2007 Pixel 4.4.8-13mdv2008.0 -+ Revision: 79852 -- allow to use "linux32 rpm -bb" instead of "linux32 rpm -bb --target x86_64" - (for this to work, %%{_host_cpu32} must be set in rpm-mandriva-setup) - -* Thu Aug 30 2007 Pixel 4.4.8-12mdv2008.0 -+ Revision: 75298 -- fix popt.h (remove N_) (#31397) - -* Wed Aug 29 2007 Pixel 4.4.8-11mdv2008.0 -+ Revision: 74355 -- add patch to speedup simple "rpm -e" or "rpm -U" -- make find-lang --with-gnome picks up omf files (rhbz#251400) (rpm.org patch) -- add the bug number fixed - -* Tue Aug 21 2007 Pixel 4.4.8-10mdv2008.0 -+ Revision: 68566 -- patch fixing parse_hdlist (and so genhdlist2) on heavy loaded boxes -- fix segfault on weird rpm that used to work (#32102) -- remove recursive %%_mandir (and don't keep it, it's not needed anymore) - - + Thierry Vignaud - - replace %%{_datadir}/man by %%{_mandir}! - - replace %%_datadir/man by %%_mandir! - -* Sat Aug 18 2007 Oden Eriksson 4.4.8-9mdv2008.0 -+ Revision: 65549 -- don't provide these files twice: - /usr/lib/rpm/rpmdb_deadlock - /usr/lib/rpm/rpmdb_dump - /usr/lib/rpm/rpmdb_load - /usr/lib/rpm/rpmdb_loadcvt - /usr/lib/rpm/rpmdb_stat - /usr/lib/rpm/rpmdb_svc - /usr/lib/rpm/rpmdb_verify - they are now only provided in the main rpm package, and not - also in the devel package. that is the way to go according to - jbj. - - + Thierry Vignaud - - fix URL - -* Mon Aug 06 2007 Pixel 4.4.8-8mdv2008.0 -+ Revision: 59505 -- do not use nptl on any arch (since x86_64 specific issues seem to disappear - when using same locking mechanism as x86) (may fix #32102) -- fix segfault occuring with some old rpm v3 from urpmi test cases -- allow building --with debug -- restore do-check-free-size-when-bavail-is-0 patch (after rediff) - -* Wed Jul 25 2007 Olivier Thauvin 4.4.8-7mdv2008.0 -+ Revision: 55450 -- fix #31535: lowercase OS tag to compare against platform -- use upstream patch - - + Per Øyvind Karlsen - - add requires on lzma - -* Fri Jul 06 2007 Olivier Thauvin 4.4.8-6mdv2008.0 -+ Revision: 48984 -- fix config file replace when not yet in db -- kill not bad macros definition -- find-lang is now a perl script - -* Fri Jun 22 2007 Anssi Hannula 4.4.8-5mdv2008.0 -+ Revision: 42672 -- require arch-specific libpopt and libpopt-devel -- add back dropped librpm-devel and libpopt-devel provides - -* Wed Jun 20 2007 Olivier Thauvin 4.4.8-4mdv2008.0 -+ Revision: 41943 -- fix buildreq for autoconf/automake -- apply new devel policy - -* Tue Jun 19 2007 Olivier Thauvin 4.4.8-3mdv2008.0 -+ Revision: 41414 -- kill coloring patch, buggy, and not so usefull -- patch116: fix rpm -V output (#31287) - -* Sun Jun 10 2007 Olivier Thauvin 4.4.8-2mdv2008.0 -+ Revision: 37847 -- patch115: avoid breakage of conectiva --without bm feature -- remove patch 110, add patch114: do no longer use rpmrc, using only macros instead, so requiring latest rpm-mandriva-setup to have /etc/rpm/platform -- fix perl module release -- patch to backport _docdir_fmt macro -- 4.4.8 - o rediff patch 72, 87, 49, 62, 17, 56, 64 - o kill patch (merge or fix upstream, woot): - 57, 80, 90, 93, 193, 95, 96, 97, 99, 103, 104, 105, 109, 110, 111, - 112, 114, 115, 101, 102, 107 - o kill patch 69, hard to maintain, will be merge upstream - o Patch109: workaround specfile parsing check, - http://rpm5.org/cvs/tktview?tn=6 - o Patch110: still read rpmrc (this should die one day) - o Patch111: trim twice / in buildroot, making unpackaged files check failing - o Patch112: avoid a very issue regarding Fopen() - - + Per Øyvind Karlsen - - use %%{ix86} & %%{sunsparc} macros for x86 & sparc - - use %%{sunsparc} macro to ensure sparcv9 gets included too - - + Pixel - - make it explicit that older perl-URPM are not compatible with 4.4.8 - - add patches 112 113 114 115 from both rpm 4.4.9 and hg.rpm.org - - cleanup provides-obsoleted.patch, moving other fixes into rebuilddb-with-root.patch - - more complete fix-segfault-on-header-without-RPMTAG_NAME patch (from upstream) - - don't segfault on header without RPMTAG_NAME - - add requires pkgconfig in rpm-build (#30632) - (it is needed for performing automatic computation of pkgconfig files - dependencies, see /usr/lib/rpm/mandriva/pkgconfigdeps.sh) - - add patch (ensure-uninst-callback-is-called-for-empty-packages) - to allow urpmi to display "remove package foo" when removing an empty package - -* Wed Apr 25 2007 Adam Williamson 4.4.6-22mdv2008.0 -+ Revision: 18290 -- rebuild against new beecrypt - - -* Wed Feb 14 2007 Pixel 4.4.6-21mdv2007.1 -+ Revision: 120751 -- fix parsing ")" (for if statements in spec files for example) -- rpm handles nicely failing %%pre, but it doesn't handle the rest -- patch to use dgettext instead of gettext to allow progs like urpmi to use - their own textdomain and still have rpm translations -- fix checking available free space when "non-superuser free space" is 0 - - + Gwenole Beauchesne - - requires newer rpm-mandriva-setup for rtld(GNU_HASH) notes - -* Fri Jan 12 2007 Pixel 4.4.6-19mdv2007.1 -+ Revision: 108072 -- P98: security fix for CVE-2006-5466 --mv8 which is deprecated and no longer valid (Per Oyvind, #26501) - - + Thierry Vignaud - - provides with unexpanded macros aren't that nice - -* Mon Jan 08 2007 Pixel 4.4.6-18mdv2007.1 -+ Revision: 105990 -- fix bug 27987 where sslexplorer rpm has "Source RPM: (none)" and so rpm - thought it is a src.rpm. the fix is only done for old v3 rpms -- "rpm -i --root" as user can't work, don't silently ignore the failing chroot() -- fix --root rpm option failing for non-root users (Christiaan Welvaart) -- really commit the patch -- fix segfault on weird buggy rpm header -- fix query format xml on rpm header with tag 265 which has no name (#27108) - -* Fri Dec 08 2006 Gwenole Beauchesne 4.4.6-12mdv2007.1 -+ Revision: 93842 -- generate PIC code for static objects that can be built into a DSO -- remove (obsolete) arch-dependent flags -- don't build statically linked executables -- Fix zlib tree to parallel build, propagate optflags to there too. -- Introduce new ppc32 arch, fix ppc64 bi-arch builds, fix ppc builds on newer CPUs. -- fix build on ppc64 - - + Pixel - - fix segfault on some old format rpms (#27263) - -* Thu Nov 30 2006 Pixel 4.4.6-11mdv2007.1 -+ Revision: 88894 -- rebuild for python 2.5 -- add patches fixing #26545: - o don't leave behind /usr/X11R6/lib/X11/app-defaults;456ac510 on error - o fix segfault -- ignore getcwd failing (db_abshome will not be set, - it may affect db/log/log_archive.c, but that should be ok) (#20897) -- fix "rpm -bs t.spec" returning buggy error message - "t.spec: No such file or directory" when rpm-build is not installed -- fix free on invalid pointer after displaying "Unable to open temp file" (#27260) -- have a nice error message when chroot fails - (instead of the dreaded: "enterChroot: Assertion `xx == 0' failed.") - - + Gwenole Beauchesne - - Extend #27260 fix to its root cause as there are other instances of a - similar bug in other sources (yet, unexposed/reported). - -* Fri Sep 15 2006 Rafael Garcia-Suarez 4.4.6-10mdv2007.0 -+ Revision: 61429 -- Bump release number -- Improve previous patch: make it conditional on the environment variable RPM_IGNORE_SCRIPTLETS_FAILURE -- Allow preinstall scriptlets to fail and not interrupting the installation. - This is a workaround for bug 25598. - -* Sat Aug 19 2006 Olivier Thauvin 4.4.6-9mdv2007.0 -+ Revision: 56766 -- bump release -- revert to my own chroot patch, thee second one is broken - -* Sun Aug 13 2006 Olivier Thauvin 4.4.6-8mdv2007.0 -+ Revision: 55706 -- bump release -- buildrequires lua-devel -- import mailscanner -- update patch with C. Welvaart fixes - - + Rafael Garcia-Suarez - - Fix typos - -* Sat Jul 29 2006 Olivier Thauvin 4.4.6-7mdv2007.0 -+ Revision: 42481 -- bump release -- add upstream patch97: fix dbenv -- patch96: fix #23774 - -* Thu Jul 27 2006 Olivier Thauvin 4.4.6-6mdv2007.0 -+ Revision: 42186 -- fix rpmv3 patch: rpm version in the lead in 3 for both rpm 3 and 4 -- fix #23075: patch 95, use tee -a - -* Wed Jul 26 2006 Olivier Thauvin 4.4.6-5mdv2007.0 -+ Revision: 42052 -- patch93: support rpm v3 -- bump release -- ensure leaveChroot can't be run by another function which is not the the caller of enterChroot -- remove changelog from spec -- add patch 93 (disable by default, need tests) to fix issue in rpmdb when mixing 'rpm --root' and 'chroot rpm' -- update macros in the spec -- provide some /etc/rpm files -- -3mdv release -- fix patch in patch -- better rpmdb.h c++ fix -- Patch90: fix unchecked end of line in macro expand -- patch 89: make rpmdb.h compliant -- file in /etc are %%config -- patch 88: readd SOURCEPACKAGE tag to source rpm -- make no_dirname_dep patch configurable with a macro -- bunzip patch, merge rpm 4.4.6 -- initial import of rpm -- initial import of rpm - - + Rafael Garcia-Suarez - - 4.4.6-4mdk - - Patch by Pixel to use --wildcards when using tar to list all specfiles in a tar - ball (this fixes rpm -t). - - Add patch 91: avoids taking into account duplicates in file list - when checking for unpackaged files - -* Wed Jul 12 2006 Rafael Garcia-Suarez 4.4.6-4mdv2007.0 -- Fix rpm -ta (Pixel) - -* Thu Jun 22 2006 Olivier Thauvin 4.4.6-3mdv2007.0 -- patchs: - - fix rpmdb.h c++ compilation (C. Welvaart) - - fix unchecked end of string in macro expand (O. Thauvin) - - fix check unpackaged files script (R. Garcia-Suarez) -- update macros provide by the spec used for bootstraping -- set some /etc/rpm/macros.* as config(noreplace) - -* Mon Jun 12 2006 Olivier Thauvin 4.4.6-2mdv2007.0 -- Patch88: readd SOURCEPACKAGE tag into src.rpm - -* Fri May 26 2006 Olivier Thauvin 4.4.6-1mdv2007.0 -- 4.4.6 -- rediff patches -- add patch to disable dirnames dependencies for now - -* Tue Mar 21 2006 Rafael Garcia-Suarez 4.4.5-2mdk -- Require latest rpm-mandriva-setup - -* Tue Mar 14 2006 Rafael Garcia-Suarez 4.4.5-1mdk -- 4.4.5 -- Remove patches 41 and 87, merged upstream -- Rediff patches 69 and 78 -- Make rpm-build require libtool-base instead of libtool (bug #21162) -- Turn the triggerun in post scriptlet - -* Tue Mar 07 2006 Rafael Garcia-Suarez 4.4.4-4mdk -- Patch 87 - -* Tue Feb 07 2006 Rafael Garcia-Suarez 4.4.4-3mdk -- Move popt(3) man page into libpopt-devel (bug 18161) -- Add coreutils in prerequisites (bug 19144) -- Fix dangling symlink (bug 6788) - -* Tue Jan 17 2006 Rafael Garcia-Suarez 4.4.4-2mdk -- Patch 86: don't cache Depends DB (Olivier Thauvin) -- Bump requires on rpm-mandriva-setup - -* Thu Jan 05 2006 Rafael Garcia-Suarez 4.4.4-1mdk -- New version 4.4.4 -- Rediff patches 31, 49, 62, 69, 71, 78, 82, 84 -- Remove patch 66 (fixed upstream) -- Remove patch 74 (no longer necessary, no legacy prereqs anymore) -- Remove patch 76 (should be unnecessary now that RH bug 151255 is fixed) -- Remove patch 79 (applied upstream) -- Remove patch 81 (does nothing) -- New subpackage perl-RPM, and patch 85 to install it in vendor dir -- Use static libneon, libsqlite3 and libopenssl -- Update condition for triggerun -- Add conditional BuildRequires on nptl-devel -- Disable popt tests -- Remove selinux -- Requires recent rpm-mandriva-setup for _rpmlock_path macro - -* Sun Nov 13 2005 Olivier Thauvin 4.4.2-6mdk -- rebuild for openssl (ask by Oden) - -* Sun Oct 23 2005 Olivier Thauvin 4.4.2-5mdk -- Fix #19392 - -* Fri Sep 16 2005 Gwenole Beauchesne 4.4.2-4mdk -- buildrequires: rpm-mandriva-setup-build -- fix simple coloring patch, aka merge it correctly -- re-add the no-doc-conflicts patch for colored packages - -* Tue Aug 30 2005 Olivier Thauvin 4.4.2-3mdk -- patch 80: fix #17774 -- patch 81, 82: should fix ordering issue -- BuildRequires: bzip2-devel (thanks Christian) - -* Sat Aug 20 2005 Frederic Lepied 4.4.2-2mdk -- 79: fix deadlock from RedHat bug #146549. - -* Fri Jul 22 2005 Olivier Thauvin 4.4.2-1mdk -- 4.4.2 -- remove patch: - 52: merged upstream - 67: fixed upstream - 73: merged upstream - 78: merged upstream - 79: merged upstream - 32, 33, 36: no more need hack -- rename rpm-python to python-rpm -- use fnctl when not using futex -- use nptl only on few arches (ppc* x86_64 pentium3,4/Athlon) - -* Thu Jun 23 2005 Olivier Thauvin 4.4.1-10mdk -- add requires to rpm-build after the rpm-mandriva-setup split - -* Tue Jun 21 2005 Olivier Thauvin 4.4.1-9mdk -- Enable NPTL and co -- rework patch77: allow %%_srcdefattr as macro for src.rpm -- Patch78: reread few macro between build -- Patch79: fix rpm --eval '%%' overflow - -* Fri Jun 17 2005 Rafael Garcia-Suarez 4.4.1-8mdk -- Move dependencies on unzip, make and elfutils from rpm to rpm-build - -* Sun Jun 05 2005 Olivier Thauvin 4.4.1-7mdk -- patch77: allow to set root/root as owner of files in src.rpm -- rebuild with neon 0.24 as it moved in main instead 0.25 - -* Thu Jun 02 2005 Rafael Garcia-Suarez 4.4.1-6mdk -- Patch 76 : allow to rebuild db with --root option - -* Wed May 18 2005 Olivier Thauvin 4.4.1-5mdk -- update french translation -- disable NPTL system + --with to enable it -- --w/o pyhton switch -- remove db_private patch as it breaks concurrent access - -* Mon May 16 2005 Olivier Thauvin 4.4.1-4mdk -- really apply patch (I sucks) -- some cleaning - -* Mon May 16 2005 Olivier Thauvin 4.4.1-3mdk -- Patch71: Ordering transaction on erasure -- Patch72: rpm -[Ui] check files conflicts -- Patch73,74: Fedora patch, fixing bug - -* Fri May 13 2005 Olivier Thauvin 4.4.1-2mdk -- patch70: allow rpm -bb --short-circuit -- conflicts man-pages-pl < 0.4-9mdk -- move spec mode for emacs into rpm-mandriva-setup -- buildrequires -- remove locales files from libpopt - -* Wed May 11 2005 Rafael Garcia-Suarez 4.4.1-1mdk -- Adapt part of the coloring patch (patch 62) -- Fix a few French translations (patch 69) -- Require libneon 0.25 - -* Mon May 09 2005 Olivier Thauvin 4.4.1-0.7mdk -- BuildRequires readline-devel (P.O. Karlsen) -- --disable-{posixmutexes,pthreadsmutexes} on sparc (P.O. Karlsen) -- patch68: being able to read old rpms -- update source url -- fix file list for ppc (C. Welvaart) - -* Fri May 06 2005 Olivier Thauvin 4.4.1-0.6mdk -- use system sqlite -- force -fPIC on amd64 (for popt) -- perform test for popt -- patch67 fix build with gcc4 - -* Wed May 04 2005 Olivier Thauvin 4.4.1-0.5mdk -- workaround make -j - -* Wed May 04 2005 Olivier Thauvin 4.4.1-0.4mdk -- 4.4.1 -- remove biarch, use mklibname (see 4.2.3-10mdk) -- do no longer patch the config, use /usr/lib/rpm/VENDOR/rpmrc instead -- require rpm-mandriva-setup -- remove many obsoletes patch -- do not longer provide update-alternative -- more defined macros in the spec, less hardcode patch - -* Tue May 03 2005 Pixel 4.2.3-11mdk -- emacs spec mode: - - use rpm-find-spec-version-with-shell by default, and enhance it - - handle release built using mkrel macro (in rpm-increase-release-tag) - -* Thu Apr 28 2005 Olivier Thauvin 4.2.3-10mdk -- split libs into separated package to make rpm update easier for URPM - -* Thu Mar 10 2005 Gwenole Beauchesne 4.2.3-9mdk -- bump multiarch-utils requires -- ignore conflicts in gnome-doc html files, install the latest files - -* Wed Mar 09 2005 Frederic Lepied 4.2.3-8mdk -- fix tr call in mono patch (bug #14449) -- fix bzip2 call (bug #7663) -- encode ru man pages in KOI8-R (bug #10219 and #12613) - -* Fri Feb 25 2005 Gwenole Beauchesne 4.2.3-8mdk -- hack to always install the latest arch-independent gtk-doc html - files and man pages, aka. don't conflict on biarch platforms - -* Fri Feb 25 2005 Gwenole Beauchesne 4.2.3-7mdk -- popt is now a biarch package - -* Thu Feb 24 2005 Gwenole Beauchesne 4.2.3-6mdk -- requires multiarch-utils >= 1.0.7-1mdk -- RPM_INSTALL_LANG support is obsolete for MDK >= 10.2 (rafael) - -* Tue Feb 08 2005 Frederic Lepied 4.2.3-5mdk -- added mkrel macro (Buchan) -- changed group System/X11 from System/XFree86 - -* Thu Jan 27 2005 Gwenole Beauchesne 4.2.3-4mdk -- newer multiarch-utils requires -- generate package script autoreqs only if requested (#13268) -- don't install .delta.rpm directly, use applydeltarpm first (SuSE) - -* Mon Jan 24 2005 Gwenole Beauchesne 4.2.3-3mdk -- minor cleanups -- check for files that ought to be marked as %%multiarch - -* Thu Jan 20 2005 Gwenole Beauchesne 4.2.3-2mdk -- newer multiarch-utils requires -- enable and improve file coloring - * use file colors even if still using the external dependencies generator - * assign a color to *.so symlinks to mix -devel packages - * assign a color to *.a archives to mix -{static,}-devel packages - -* Fri Jan 14 2005 Gwenole Beauchesne 4.2.3-1mdk -- multiarch-utils autoreq -- allow build of 32-bit RPMs on x86-64 -- ppc64 fixes -- update from 4.2-branch - * auto-relocation fixes on ia64 - * change default behavior to resolve file conflicts as LIFO - * generate debuginfo for setuid binaries - -* Fri Jan 07 2005 Frederic Lepied 4.2.2-19mdk -- compile --with-glob to avoid a problem with the internal glob code. - -* Thu Jan 06 2005 Rafael Garcia-Suarez 4.2.2-18mdk -- Add patch 60 (Guillaume Rousse): make find-requires ignore dependencies on - linux-incompatible perl modules. (bug #12695) - -* Mon Dec 06 2004 Rafael Garcia-Suarez 4.2.2-17mdk -- Add patch 59, necessary for the smart package manager (new function - rpmSingleHeaderFromFD() in the python bindings) - -* Sat Dec 04 2004 Frederic Lepied 4.2.2-16mdk -- rebuild for python 2.4 - -* Fri Aug 06 2004 Frederic Lepied 4.2.2-15mdk -- use system zlib - -* Thu Jul 29 2004 Frederic Lepied 4.2.2-14mdk -- fix mono patch (bug #7201) - -* Wed Jul 28 2004 Frederic Lepied 4.2.2-13mdk -- use mono-find-requires and mono-find-provides if present (Götz Waschk) (bug #7201) - -* Wed Jul 28 2004 Frederic Lepied 4.2.2-12mdk -- use a correct implementation of cpuid (Gwenole) -- return None instead of [] in rpm-python (Paul Nasrat) -- add /var/spool/repackage (bug #9874) -- handle /usr/lib/gcc/ directories for devel() deps too (Gwenole) - -* Thu May 20 2004 Gwenole Beauchesne 4.2.2-10mdk -- switch back to x86_64 packages on 64-bit extended platforms - -* Fri May 14 2004 Gwenole Beauchesne 4.2.2-9mdk -- fix /usr/lib/rpmpopt symlink -- use -mtune=pentiumpro on any MDK >= 10.0 - -* Fri Apr 16 2004 Rafael Garcia-Suarez 4.2.2-8mdk -- When unlocking the RPMLOCK file, don't forget to close(2) it too. +* Wed Jun 13 2012 Alexader Kazancev 1:5.4.9-2 +- initial import for ROSA 2012.1