- new version 5.4.9

This commit is contained in:
akdengi 2012-08-01 14:59:23 +04:00
parent 7f02ef849c
commit b7fdb718d3
109 changed files with 7549 additions and 1548 deletions

View file

@ -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

View file

@ -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 \

View file

@ -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
};

View file

@ -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);

View file

@ -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]);

View file

@ -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

View 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);

View 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) {

View 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);

View file

@ -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);

View file

@ -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);
}
}

View 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 }
};

View file

@ -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;

View 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)
{

View file

@ -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),

View 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;

View file

@ -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
;;

View 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

View 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

View file

@ -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
}

View 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

View file

@ -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)

View file

@ -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);

View 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;

View 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

View 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

View 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);

View 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
#*/

View 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\()|(\))/, "")

View 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

View 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. */

View 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);

View 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
+

View file

@ -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),

View file

@ -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) {

View 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;

View file

@ -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;
}
}

View 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;
}

View file

@ -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);

View 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!;

View 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

View 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);

View 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)");

View 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))

View 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@*/

View 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 },

View 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))

View 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

View file

@ -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. */

View 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);
}
}

View 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*$'

View file

@ -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;

View file

@ -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)

View file

@ -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;

View 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}

View file

@ -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]);

View file

@ -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);

View file

@ -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;
}

View 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"])

View 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)

View 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)

View 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)

View 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}

View 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)
#

View 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);

View file

@ -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];

View file

@ -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/")) &&

View file

@ -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;

View 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;

View file

@ -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)

View 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));

View 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
View 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 */

View 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 ])

View file

@ -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 ; \

View 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)

View 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.]*)$

View 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

View 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

View 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 }
};

View 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);

View 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);

View file

@ -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;

View 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) {

View file

@ -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;

View 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

View 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

View file

@ -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 */

View 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

View 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
}

View 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);

View 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);

View 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

View 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;

View 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 \

View 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 \

View 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
#*/

View 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;

View file

@ -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;
} }

View file

@ -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