mirror of
https://abf.rosa.ru/djam/rpm.git
synced 2025-02-23 10:23:04 +00:00
- new version 5.4.9
This commit is contained in:
parent
7f02ef849c
commit
b7fdb718d3
109 changed files with 7549 additions and 1548 deletions
4
.abf.yml
4
.abf.yml
|
@ -1,3 +1,3 @@
|
||||||
sources:
|
sources:
|
||||||
"cpu-os-macros.tar.gz": 68dbf0b8b9c625c59ad607cf0eda665087cead58
|
"cpu-os-macros.tar.gz": 99c5fa561dd0d897bfa8cd97f2aa60781bc578d4
|
||||||
"rpm-5.3.12.tar.xz": 81cdbf2d0f432abef56444eeabf9c2eab1d25f8a
|
"rpm-5.4.9.tar.gz": 5bd26bb6aece4051b94ce86b81cdfd6c4c8498ee
|
||||||
|
|
|
@ -57,7 +57,6 @@
|
||||||
rpm-helper>rpm
|
rpm-helper>rpm
|
||||||
|
|
||||||
# enabling this by default is to be dropped ASAP
|
# enabling this by default is to be dropped ASAP
|
||||||
%_dependency_whiteout %_dependency_whiteout_mandriva
|
|
||||||
%_legacy_compat_non_pre_scripts_dont_fail 1
|
%_legacy_compat_non_pre_scripts_dont_fail 1
|
||||||
|
|
||||||
%_legacy_compat_all \
|
%_legacy_compat_all \
|
||||||
|
|
|
@ -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
|
|
||||||
};
|
|
|
@ -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 <syslog.h>
|
|
||||||
+#include <rpmlog.h>
|
|
||||||
+#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);
|
|
|
@ -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.55810~ 2011-07-12 11:54:08.000000000 +0200
|
||||||
+++ rpm-5.3.12/lib/rpmds.c 2011-07-12 18:15:56.300506314 +0200
|
+++ rpm-5.3.12/lib/rpmds.c 2011-07-13 16:51:59.699924504 +0200
|
||||||
@@ -4333,7 +4333,7 @@ assert((rpmdsFlags(B) & RPMSENSE_SENSEMA
|
@@ -4333,9 +4333,10 @@ assert((rpmdsFlags(B) & RPMSENSE_SENSEMA
|
||||||
case 'D': ix = RPMEVR_D; /*@switchbreak@*/break;
|
case 'D': ix = RPMEVR_D; /*@switchbreak@*/break;
|
||||||
}
|
}
|
||||||
#if defined(RPM_VENDOR_MANDRIVA) /* mdvbz#55810 */
|
#if defined(RPM_VENDOR_MANDRIVA) /* mdvbz#55810 */
|
||||||
- if(ix == RPMEVR_R && (bFlags & (~RPMSENSE_GREATER & RPMSENSE_EQUAL))
|
- if(ix == RPMEVR_R && (bFlags & (~RPMSENSE_GREATER & RPMSENSE_EQUAL))
|
||||||
|
- && *(b->F[ix]) == '\0')
|
||||||
|
- break;
|
||||||
+ if(ix >= RPMEVR_R && (bFlags & (~RPMSENSE_GREATER & RPMSENSE_EQUAL))
|
+ if(ix >= RPMEVR_R && (bFlags & (~RPMSENSE_GREATER & RPMSENSE_EQUAL))
|
||||||
&& *(b->F[ix]) == '\0')
|
+ && !(ix == RPMEVR_D && (bFlags & RPMSENSE_LESS))
|
||||||
break;
|
+ && *(b->F[ix]) == '\0')
|
||||||
|
+ break;
|
||||||
if (a->F[ix] && b->F[ix])
|
if (a->F[ix] && b->F[ix])
|
||||||
--- rpm-5.3.12/rpmdb/rpmevr.c.55810~ 2011-07-12 18:15:40.964269535 +0200
|
#else
|
||||||
+++ rpm-5.3.12/rpmdb/rpmevr.c 2011-07-12 18:15:42.897299380 +0200
|
if (a->F[ix] && *a->F[ix] && b->F[ix] && *b->F[ix])
|
||||||
@@ -286,7 +286,7 @@ assert(b->F[RPMEVR_D] != NULL);
|
--- 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;
|
case 'D': ix = RPMEVR_D; /*@switchbreak@*/break;
|
||||||
}
|
}
|
||||||
#if defined(RPM_VENDOR_MANDRIVA) /* mdvbz#55810 */
|
#if defined(RPM_VENDOR_MANDRIVA) /* mdvbz#55810 */
|
||||||
- if(ix == RPMEVR_R && (b->Flags & (~RPMSENSE_GREATER & RPMSENSE_EQUAL))
|
- 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))
|
+ if(ix >= RPMEVR_R && (b->Flags & (~RPMSENSE_GREATER & RPMSENSE_EQUAL))
|
||||||
&& *(b->F[ix]) == '\0')
|
+ && !(ix == RPMEVR_D && (b->Flags & RPMSENSE_LESS))
|
||||||
break;
|
+ && *(b->F[ix]) == '\0')
|
||||||
|
+ break;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
rc = compare_values(a->F[ix], b->F[ix]);
|
||||||
|
|
|
@ -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
|
|
10
rpm-5.4.4-add-_specfile-macro.patch
Normal file
10
rpm-5.4.4-add-_specfile-macro.patch
Normal file
|
@ -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);
|
||||||
|
|
11
rpm-5.4.4-allow-installation-of-repackaged-rpms.patch
Normal file
11
rpm-5.4.4-allow-installation-of-repackaged-rpms.patch
Normal file
|
@ -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) {
|
114
rpm-5.4.4-debugedit-add-dwarf4-support.patch
Normal file
114
rpm-5.4.4-debugedit-add-dwarf4-support.patch
Normal file
|
@ -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 <alexl@redhat.com>, 2002
|
||||||
|
Based on code by Jakub Jelinek <jakub@redhat.com>, 2001.
|
||||||
|
|
||||||
|
@@ -70,6 +70,10 @@
|
||||||
|
#include <rpmtag.h>
|
||||||
|
|
||||||
|
#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);
|
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
18
rpm-5.4.4-debugedit-recognize-debug_macro-section.patch
Normal file
18
rpm-5.4.4-debugedit-recognize-debug_macro-section.patch
Normal file
|
@ -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 }
|
||||||
|
};
|
||||||
|
|
|
@ -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;
|
18
rpm-5.4.4-debugedit-remove-unused-variable.patch
Normal file
18
rpm-5.4.4-debugedit-remove-unused-variable.patch
Normal file
|
@ -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)
|
||||||
|
{
|
|
@ -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),
|
15
rpm-5.4.4-drop-base-dependencies.patch
Normal file
15
rpm-5.4.4-drop-base-dependencies.patch
Normal file
|
@ -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;
|
|
@ -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
|
||||||
|
;;
|
12
rpm-5.4.4-enable-rpmgio-net-transport.patch
Normal file
12
rpm-5.4.4-enable-rpmgio-net-transport.patch
Normal file
|
@ -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
|
74
rpm-5.4.4-files-listed-twice-terminates-build.patch
Normal file
74
rpm-5.4.4-files-listed-twice-terminates-build.patch
Normal file
|
@ -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
|
|
@ -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
|
||||||
|
}
|
||||||
|
|
95
rpm-5.4.4-fix-removal-of-overlapping-dependencies.patch
Normal file
95
rpm-5.4.4-fix-removal-of-overlapping-dependencies.patch
Normal file
|
@ -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 <rpmiotypes.h>
|
||||||
|
#define _RPMEVR_INTERNAL
|
||||||
|
#include "rpmbuild.h"
|
||||||
|
+#include <rpmds.h>
|
||||||
|
+#include <rpmlog.h>
|
||||||
|
#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
|
|
@ -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)
|
|
@ -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);
|
24
rpm-5.4.4-glob-wildcards-for-loading-macro-files.patch
Normal file
24
rpm-5.4.4-glob-wildcards-for-loading-macro-files.patch
Normal file
|
@ -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;
|
23
rpm-5.4.4-pass-_builddir-properly-to-find-debuginfo.patch
Normal file
23
rpm-5.4.4-pass-_builddir-properly-to-find-debuginfo.patch
Normal file
|
@ -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
|
76
rpm-5.4.4-pkgconfigdeps-check-path.patch
Normal file
76
rpm-5.4.4-pkgconfigdeps-check-path.patch
Normal file
|
@ -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
|
41
rpm-5.4.4-really-always-invoke-clean-at-end.patch
Normal file
41
rpm-5.4.4-really-always-invoke-clean-at-end.patch
Normal file
|
@ -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);
|
10
rpm-5.4.4-rpmbuild-withoutclean.patch
Normal file
10
rpm-5.4.4-rpmbuild-withoutclean.patch
Normal file
|
@ -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
|
||||||
|
#*/
|
107
rpm-5.4.4-ruby1.9-fixes.patch
Normal file
107
rpm-5.4.4-ruby1.9-fixes.patch
Normal file
|
@ -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\()|(\))/, "")
|
21
rpm-5.4.4-srcdefattr.patch
Normal file
21
rpm-5.4.4-srcdefattr.patch
Normal file
|
@ -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
|
||||||
|
|
84
rpm-5.4.4-use-dependency-type-for-ordering.patch
Normal file
84
rpm-5.4.4-use-dependency-type-for-ordering.patch
Normal file
|
@ -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. */
|
45
rpm-5.4.5-break-out-of-elf-link-loop.patch
Normal file
45
rpm-5.4.5-break-out-of-elf-link-loop.patch
Normal file
|
@ -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);
|
70
rpm-5.4.5-desktop-provides.patch
Normal file
70
rpm-5.4.5-desktop-provides.patch
Normal file
|
@ -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 <richard@hughsie.com>
|
||||||
|
+# 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
|
||||||
|
+
|
|
@ -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),
|
|
@ -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) {
|
32
rpm-5.4.5-drop-some-interpreter-deps.patch
Normal file
32
rpm-5.4.5-drop-some-interpreter-deps.patch
Normal file
|
@ -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;
|
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
11
rpm-5.4.5-fix-generation-of-uclibc-deps-on-non-lib64.patch
Normal file
11
rpm-5.4.5-fix-generation-of-uclibc-deps-on-non-lib64.patch
Normal file
|
@ -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;
|
||||||
|
}
|
|
@ -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);
|
11
rpm-5.4.5-kmod-deps-xz-support.patch
Normal file
11
rpm-5.4.5-kmod-deps-xz-support.patch
Normal file
|
@ -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!;
|
12
rpm-5.4.5-libsql-conditional.patch
Normal file
12
rpm-5.4.5-libsql-conditional.patch
Normal file
|
@ -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
|
405
rpm-5.4.5-patchset_16004.patch
Normal file
405
rpm-5.4.5-patchset_16004.patch
Normal file
|
@ -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);
|
11
rpm-5.4.5-patchset_16005.patch
Normal file
11
rpm-5.4.5-patchset_16005.patch
Normal file
|
@ -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)");
|
222
rpm-5.4.5-patchset_16022.patch
Normal file
222
rpm-5.4.5-patchset_16022.patch
Normal file
|
@ -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))
|
70
rpm-5.4.5-python-export-spec-macros.patch
Normal file
70
rpm-5.4.5-python-export-spec-macros.patch
Normal file
|
@ -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 <rpmiotypes.h>
|
||||||
|
#include <rpmio.h>
|
||||||
|
+#define _MACRO_INTERNAL
|
||||||
|
+#include <rpmmacro.h>
|
||||||
|
#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@*/
|
10
rpm-5.4.5-rpmfc-apply-python-coloring-from-magic.patch
Normal file
10
rpm-5.4.5-rpmfc-apply-python-coloring-from-magic.patch
Normal file
|
@ -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 },
|
11
rpm-5.4.5-rpmfc-use-strlen-not-sizeof.patch
Normal file
11
rpm-5.4.5-rpmfc-use-strlen-not-sizeof.patch
Normal file
|
@ -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))
|
16
rpm-5.4.5-rubygems-add-missing-newline.patch
Normal file
16
rpm-5.4.5-rubygems-add-missing-newline.patch
Normal file
|
@ -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
|
|
@ -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. */
|
13
rpm-5.4.5-skip-dependencies-for-character-devices.patch
Normal file
13
rpm-5.4.5-skip-dependencies-for-character-devices.patch
Normal file
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
268
rpm-5.4.5-update-mono-dependency-generator.patch
Normal file
268
rpm-5.4.5-update-mono-dependency-generator.patch
Normal file
|
@ -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($_, /<dllmap .*target=.*/) {
|
||||||
|
+ ignore=0
|
||||||
|
+ req=""
|
||||||
|
+ split($_, toks, "\"")
|
||||||
|
+ toks_size=0
|
||||||
|
+ for(tok in toks) { toks_size++ }
|
||||||
|
+ for(i=1; i <= toks_size; i++) {
|
||||||
|
+ if(toks[i] ~ /target=/) {
|
||||||
|
+ req=toks[i+1]
|
||||||
|
+ }
|
||||||
|
+ if(toks[i] ~ /os=/) {
|
||||||
|
+ negate=0
|
||||||
|
+ found=0
|
||||||
|
+
|
||||||
|
+ attr=toks[i+1]
|
||||||
|
+ if(attr ~ /^!/) {
|
||||||
|
+ attr=substr(attr, 2, length(attr)-1)
|
||||||
|
+ negate=1
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ split(attr, os_targets, ",")
|
||||||
|
+ os_targets_size=0
|
||||||
|
+ for(os_target in os_targets) { os_targets_size++ }
|
||||||
|
+ for(j=1; j <= os_targets_size; j++) {
|
||||||
|
+ if(os_targets[j] == "linux") {
|
||||||
|
+ found=1
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ if(negate) {
|
||||||
|
+ found=!found
|
||||||
|
+ }
|
||||||
|
+ if (!found) {
|
||||||
|
+ ignore=1
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ if(!ignore) {
|
||||||
|
+ print req"'$libext'"
|
||||||
|
+ }
|
||||||
|
+ } ' $i 2>/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*$'
|
|
@ -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;
|
|
@ -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)
|
||||||
|
|
|
@ -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;
|
||||||
|
|
21
rpm-5.4.7-change-to-debuginfo-suffix.patch
Normal file
21
rpm-5.4.7-change-to-debuginfo-suffix.patch
Normal file
|
@ -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}
|
|
@ -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]);
|
|
@ -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);
|
|
@ -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;
|
||||||
|
}
|
48
rpm-5.4.7-fix-generation-of-ruby-abi-provides.patch
Normal file
48
rpm-5.4.7-fix-generation-of-ruby-abi-provides.patch
Normal file
|
@ -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"])
|
25
rpm-5.4.7-fix-minor-memleaks.patch
Normal file
25
rpm-5.4.7-fix-minor-memleaks.patch
Normal file
|
@ -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)
|
36
rpm-5.4.7-generate-devel-provides-outside-of-libdirs.patch
Normal file
36
rpm-5.4.7-generate-devel-provides-outside-of-libdirs.patch
Normal file
|
@ -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)
|
14
rpm-5.4.7-hdrfmt-fix-unitialized-argv-element.patch
Normal file
14
rpm-5.4.7-hdrfmt-fix-unitialized-argv-element.patch
Normal file
|
@ -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)
|
66
rpm-5.4.7-kmod-dependencies.patch
Normal file
66
rpm-5.4.7-kmod-dependencies.patch
Normal file
|
@ -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}
|
||||||
|
|
11
rpm-5.4.7-mono-find-requires-strip-newlines.patch
Normal file
11
rpm-5.4.7-mono-find-requires-strip-newlines.patch
Normal file
|
@ -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)
|
||||||
|
|
||||||
|
#
|
11
rpm-5.4.7-no-seqid_init-on-rdonly-database.patch
Normal file
11
rpm-5.4.7-no-seqid_init-on-rdonly-database.patch
Normal file
|
@ -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);
|
||||||
|
|
|
@ -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];
|
|
@ -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/")) &&
|
|
@ -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;
|
||||||
|
|
11
rpm-5.4.7-rpmds-dont-try-fopen-empty-filenames.patch
Normal file
11
rpm-5.4.7-rpmds-dont-try-fopen-empty-filenames.patch
Normal file
|
@ -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;
|
|
@ -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)
|
11
rpm-5.4.7-rpmfc-strdup-EVR-in-overlap-removal.patch
Normal file
11
rpm-5.4.7-rpmfc-strdup-EVR-in-overlap-removal.patch
Normal file
|
@ -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));
|
370
rpm-5.4.7-rpmv3-support.patch
Normal file
370
rpm-5.4.7-rpmv3-support.patch
Normal file
|
@ -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 <rpmevr.h>
|
||||||
|
#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);
|
||||||
|
}
|
839
rpm-5.4.7-trigtrans.patch
Normal file
839
rpm-5.4.7-trigtrans.patch
Normal file
|
@ -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 */
|
29
rpm-5.4.7-use-bdb-5.2.patch
Normal file
29
rpm-5.4.7-use-bdb-5.2.patch
Normal file
|
@ -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 ])
|
|
@ -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 ; \
|
13
rpm-5.4.8-URPM-build-fix.patch
Normal file
13
rpm-5.4.8-URPM-build-fix.patch
Normal file
|
@ -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)
|
36
rpm-5.4.8-add-armv7l-specific-macros.patch
Normal file
36
rpm-5.4.8-add-armv7l-specific-macros.patch
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
From 727484174300654bc4b3881f3db2889a05f3895c Mon Sep 17 00:00:00 2001
|
||||||
|
From: Franck Bui <franck.bui@mandriva.com>
|
||||||
|
Date: Thu, 26 Apr 2012 13:21:45 +0000
|
||||||
|
Subject: [PATCH 1/1] Add armv7l target
|
||||||
|
|
||||||
|
Signed-off-by: Franck Bui <franck.bui@mandriva.com>
|
||||||
|
---
|
||||||
|
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.]*)$
|
62
rpm-5.4.8-dont-show-suggests-with-requires.patch
Normal file
62
rpm-5.4.8-dont-show-suggests-with-requires.patch
Normal file
|
@ -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
|
||||||
|
|
159
rpm-5.4.9-add-_build_pkgcheck.patch
Normal file
159
rpm-5.4.9-add-_build_pkgcheck.patch
Normal file
|
@ -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
|
||||||
|
|
14
rpm-5.4.9-add-distepoch-rpmlib-feature.patch
Normal file
14
rpm-5.4.9-add-distepoch-rpmlib-feature.patch
Normal file
|
@ -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 }
|
||||||
|
};
|
||||||
|
|
111
rpm-5.4.9-add-filetriggers-regex-matching-support.patch
Normal file
111
rpm-5.4.9-add-filetriggers-regex-matching-support.patch
Normal file
|
@ -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);
|
135
rpm-5.4.9-add-matches-as-arguments-to-triggers.patch
Normal file
135
rpm-5.4.9-add-matches-as-arguments-to-triggers.patch
Normal file
|
@ -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], "<lua>")) {
|
||||||
|
@@ -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);
|
|
@ -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;
|
85
rpm-5.4.9-avoid-dependencies-on-self.patch
Normal file
85
rpm-5.4.9-avoid-dependencies-on-self.patch
Normal file
|
@ -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) {
|
|
@ -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;
|
11
rpm-5.4.9-disable_internal_dependency_generator.patch
Normal file
11
rpm-5.4.9-disable_internal_dependency_generator.patch
Normal file
|
@ -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
|
924
rpm-5.4.9-dlopen-embedded-interpreters.patch
Normal file
924
rpm-5.4.9-dlopen-embedded-interpreters.patch
Normal file
|
@ -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], "<lua>")) {
|
||||||
|
rpmlua lua = NULL; /* Global state. */
|
||||||
|
@@ -338,18 +344,21 @@ int parseScript(Spec spec, int parsePart
|
||||||
|
if (!strcmp(progArgv[0], "<perl>")) {
|
||||||
|
(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], "<python>")) {
|
||||||
|
(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], "<ruby>")) {
|
||||||
|
(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], "<squirrel>")) {
|
||||||
|
(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], "<tcl>")) {
|
||||||
|
(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 <rpmmacro.h>
|
||||||
|
|
||||||
|
-#if defined(WITH_PERLEMBED)
|
||||||
|
+#if defined(MODULE_EMBED)
|
||||||
|
#include <EXTERN.h>
|
||||||
|
#include <perl.h>
|
||||||
|
+#undef WITH_PERLEMBED
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
+#if defined(WITH_PERLEMBED)
|
||||||
|
+#include <dlfcn.h>
|
||||||
|
+#include <rpmlog.h>
|
||||||
|
#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 <Python.h>
|
||||||
|
#include <cStringIO.h>
|
||||||
|
+#undef WITH_PYTHONEMBED
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
+#if defined(WITH_PYTHONEMBED)
|
||||||
|
+#include <dlfcn.h>
|
||||||
|
+#include <rpmlog.h>
|
||||||
|
#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, "-")) ? "<stdin>" : fn);
|
||||||
|
FILE * pyfp = (!strcmp(pyfn, "<stdin>") ? 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 <argv.h>
|
||||||
|
|
||||||
|
-#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 <ruby.h>
|
||||||
|
+#undef WITH_RUBYEMBED
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
+#if defined(WITH_RUBYEMBED)
|
||||||
|
+#include <dlfcn.h>
|
||||||
|
+#include <rpmlog.h>
|
||||||
|
+#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 <argv.h>
|
||||||
|
|
||||||
|
-#ifdef WITH_SQUIRREL
|
||||||
|
+#if defined(MODULE_EMBED)
|
||||||
|
#include <squirrel.h>
|
||||||
|
+#undef WITH_SQUIRREL
|
||||||
|
#endif
|
||||||
|
+
|
||||||
|
+#if defined(WITH_SQUIRREL)
|
||||||
|
+#include <dlfcn.h>
|
||||||
|
+#include <rpmlog.h>
|
||||||
|
+#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 <argv.h>
|
||||||
|
|
||||||
|
-#ifdef WITH_TCL
|
||||||
|
+#if defined(MODULE_EMBED)
|
||||||
|
#include <tcl.h>
|
||||||
|
+#undef WITH_TCL
|
||||||
|
#endif
|
||||||
|
+
|
||||||
|
+#if defined(WITH_TCL)
|
||||||
|
+#include <dlfcn.h>
|
||||||
|
+#include <rpmlog.h>
|
||||||
|
+#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
|
|
@ -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 */
|
66
rpm-5.4.9-duplicate_files_terminate_build.patch
Normal file
66
rpm-5.4.9-duplicate_files_terminate_build.patch
Normal file
|
@ -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
|
||||||
|
|
||||||
|
|
112
rpm-5.4.9-find-debuginfo-strip-reloc-debug-sections.patch
Normal file
112
rpm-5.4.9-find-debuginfo-strip-reloc-debug-sections.patch
Normal file
|
@ -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
|
||||||
|
}
|
||||||
|
|
18
rpm-5.4.9-fix-mdvbz62979.patch
Normal file
18
rpm-5.4.9-fix-mdvbz62979.patch
Normal file
|
@ -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);
|
||||||
|
|
11
rpm-5.4.9-fix-rpm_qa-pattern.patch
Normal file
11
rpm-5.4.9-fix-rpm_qa-pattern.patch
Normal file
|
@ -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);
|
11
rpm-5.4.9-fix-russian-typo.patch
Normal file
11
rpm-5.4.9-fix-russian-typo.patch
Normal file
|
@ -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
|
26
rpm-5.4.9-fix-verify-segfault.patch
Normal file
26
rpm-5.4.9-fix-verify-segfault.patch
Normal file
|
@ -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;
|
60
rpm-5.4.9-font-provides.patch
Normal file
60
rpm-5.4.9-font-provides.patch
Normal file
|
@ -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 <behdad@redhat.com>
|
||||||
|
+# 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 \
|
161
rpm-5.4.9-generate-haskell-dependencies.patch
Normal file
161
rpm-5.4.9-generate-haskell-dependencies.patch
Normal file
|
@ -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 <nanardon@mandriva.org>
|
||||||
|
+# Per Øyvind Karlsen <peroyvind@mandriva.org>
|
||||||
|
+#
|
||||||
|
+
|
||||||
|
+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 \
|
81
rpm-5.4.9-keep-loading-script-macros.patch
Normal file
81
rpm-5.4.9-keep-loading-script-macros.patch
Normal file
|
@ -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
|
||||||
|
#*/
|
32
rpm-5.4.9-mire-fix-strings-lacking-null-terminator.patch
Normal file
32
rpm-5.4.9-mire-fix-strings-lacking-null-terminator.patch
Normal file
|
@ -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;
|
|
@ -1,5 +1,5 @@
|
||||||
--- rpm-5.3.8/lib/transaction.c.doc_conflicts~ 2011-01-18 23:27:15.243131004 +0100
|
--- rpm-5.4.9/lib/transaction.c.doc_conflicts~ 2012-04-26 20:36:19.000000000 +0200
|
||||||
+++ rpm-5.3.8/lib/transaction.c 2011-01-18 23:34:38.430131002 +0100
|
+++ rpm-5.4.9/lib/transaction.c 2012-05-15 01:46:37.964693880 +0200
|
||||||
@@ -68,6 +68,24 @@
|
@@ -68,6 +68,24 @@
|
||||||
/*@access IDTX @*/
|
/*@access IDTX @*/
|
||||||
/*@access FD_t @*/
|
/*@access FD_t @*/
|
||||||
|
@ -22,10 +22,10 @@
|
||||||
+}
|
+}
|
||||||
+#endif
|
+#endif
|
||||||
+
|
+
|
||||||
static int handleInstInstalledFile(const rpmts ts, rpmte p, rpmfi fi,
|
#ifdef __cplusplus
|
||||||
Header otherHeader, rpmfi otherFi,
|
|
||||||
int beingRemoved)
|
#define FF_ISSET(_fflags, _FLAG) ((_fflags) & (RPMFILE_##_FLAG))
|
||||||
@@ -117,6 +135,17 @@ static int handleInstInstalledFile(const
|
@@ -164,6 +182,17 @@ static int handleInstInstalledFile(const
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -41,9 +41,9 @@
|
||||||
+#endif
|
+#endif
|
||||||
+
|
+
|
||||||
if (rConflicts) {
|
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);
|
rpmps ps = rpmtsProblems(ts);
|
||||||
@@ -381,6 +410,17 @@ assert(otherFi != NULL);
|
@@ -429,6 +458,17 @@ assert(otherFi != NULL);
|
||||||
done = 1;
|
done = 1;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
--- rpm-5.3.8/lib/psm.c.scriptlet~ 2011-01-09 07:18:14.000000000 +0100
|
--- rpm-5.4.9/lib/psm.c.scriptlet~ 2012-04-19 19:26:06.000000000 +0200
|
||||||
+++ rpm-5.3.8/lib/psm.c 2011-01-19 01:04:33.070131004 +0100
|
+++ rpm-5.4.9/lib/psm.c 2012-05-15 01:43:59.841922573 +0200
|
||||||
@@ -2178,6 +2178,10 @@ rpmRC rpmpsmStage(rpmpsm psm, pkgStage s
|
@@ -2195,6 +2195,10 @@ rpmRC rpmpsmStage(rpmpsm psm, pkgStage s
|
||||||
rpmRC rc = psm->rc;
|
rpmRC rc = psm->rc;
|
||||||
int saveerrno;
|
int saveerrno;
|
||||||
int xx;
|
int xx;
|
||||||
|
@ -11,56 +11,56 @@
|
||||||
|
|
||||||
/* XXX hackery to assert(!scareMem) in rpmfiNew. */
|
/* XXX hackery to assert(!scareMem) in rpmfiNew. */
|
||||||
/*@-castexpose@*/
|
/*@-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)) {
|
if (!(rpmtsFlags(ts) & RPMTRANS_FLAG_NOTRIGGERUN)) {
|
||||||
/* Run triggers in this package other package(s) set off. */
|
/* 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) break;
|
||||||
+ if(rc && !non_pre_scripts_dont_fail) break;
|
+ if(rc && !non_pre_scripts_dont_fail) break;
|
||||||
|
|
||||||
/* Run triggers in other package(s) this package sets off. */
|
/* 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) break;
|
||||||
+ if(rc && !non_pre_scripts_dont_fail) break;
|
+ if(rc && !non_pre_scripts_dont_fail) break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!(rpmtsFlags(ts) & RPMTRANS_FLAG_NOPREUN))
|
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)) {
|
if (!(rpmtsFlags(ts) & RPMTRANS_FLAG_NOPOST)) {
|
||||||
rc = rpmpsmNext(psm, PSM_SCRIPT);
|
rc = (rpmRC) rpmpsmNext(psm, PSM_SCRIPT);
|
||||||
- if (rc) break;
|
- if (rc) break;
|
||||||
+ if(rc && !non_pre_scripts_dont_fail) break;
|
+ if(rc && !non_pre_scripts_dont_fail) break;
|
||||||
}
|
}
|
||||||
if (!(rpmtsFlags(ts) & RPMTRANS_FLAG_NOTRIGGERIN)) {
|
if (!(rpmtsFlags(ts) & RPMTRANS_FLAG_NOTRIGGERIN)) {
|
||||||
/* Run triggers in other package(s) this package sets off. */
|
/* 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) break;
|
||||||
+ if(rc && !non_pre_scripts_dont_fail) break;
|
+ if(rc && !non_pre_scripts_dont_fail) break;
|
||||||
|
|
||||||
/* Run triggers in this package other package(s) set off. */
|
/* 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) break;
|
||||||
+ if(rc && !non_pre_scripts_dont_fail) 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)) {
|
if (!(rpmtsFlags(ts) & RPMTRANS_FLAG_NOPOSTUN)) {
|
||||||
rc = rpmpsmNext(psm, PSM_SCRIPT);
|
rc = (rpmRC) rpmpsmNext(psm, PSM_SCRIPT);
|
||||||
- if (rc) break;
|
- if (rc) break;
|
||||||
+ if(rc && !non_pre_scripts_dont_fail) break;
|
+ if(rc && !non_pre_scripts_dont_fail) break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!(rpmtsFlags(ts) & RPMTRANS_FLAG_NOTRIGGERPOSTUN)) {
|
if (!(rpmtsFlags(ts) & RPMTRANS_FLAG_NOTRIGGERPOSTUN)) {
|
||||||
/* Run triggers in other package(s) this package sets off. */
|
/* 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) break;
|
||||||
+ if(rc && !non_pre_scripts_dont_fail) break;
|
+ if(rc && !non_pre_scripts_dont_fail) break;
|
||||||
|
|
||||||
/* Run triggers in this package other package(s) set off. */
|
/* 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) break;
|
||||||
+ if(rc && !non_pre_scripts_dont_fail) break;
|
+ if(rc && !non_pre_scripts_dont_fail) break;
|
||||||
}
|
}
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Reference in a new issue