[packages/rpm] - add support for x32 arch; new color for multiarch and (x32bit) deps
baggins
baggins at pld-linux.org
Sun Jan 25 11:19:08 CET 2015
commit 321b78b0cc66c33e93cebe6b2689d98febe1404f
Author: Jan Rękorajski <baggins at pld-linux.org>
Date: Sun Jan 25 09:36:57 2015 +0000
- add support for x32 arch; new color for multiarch and (x32bit) deps
rpm.spec | 2 +
x32.patch | 216 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 218 insertions(+)
---
diff --git a/rpm.spec b/rpm.spec
index 6277e5a..0f292e1 100644
--- a/rpm.spec
+++ b/rpm.spec
@@ -170,6 +170,7 @@ Patch80: %{name}-revert-gpg-argv-parsing.patch
Patch81: %{name}-perl-magic.patch
Patch82: %{name}-5.4.15-use-DSA-sig.patch
Patch83: %{name}-ignore-missing-macro-files.patch
+Patch84: x32.patch
# Patches imported from Mandriva
@@ -946,6 +947,7 @@ cd -
%patch80 -p1
%patch81 -p0
%patch82 -p1
+%patch84 -p1
%patch1000 -p1
%patch1001 -p1
diff --git a/x32.patch b/x32.patch
new file mode 100644
index 0000000..773e383
--- /dev/null
+++ b/x32.patch
@@ -0,0 +1,216 @@
+--- rpm-5.4.15/configure.ac~ 2014-12-20 16:50:32.000000000 +0100
++++ rpm-5.4.15/configure.ac 2014-12-20 16:54:38.036853187 +0100
+@@ -2200,8 +2200,9 @@
+ case "${target_cpu}" in
+ *86) RPMCANONARCH=i386 ;;
+ ia32e*) RPMCANONARCH=ia32e ;;
+-amd64*) RPMCANONARCH=amd64 ;;
+-x86_64*) RPMCANONARCH=x86_64 ;;
++amd64*) RPMCANONCOLOR=7; RPMCANONARCH=amd64 ;;
++x86_64*) RPMCANONCOLOR=7; RPMCANONARCH=x86_64 ;;
++x32) RPMCANONARCH=x32 ;;
+ alpha*) RPMCANONARCH=alpha ;;
+ sparc64*) RPMCANONARCH=sparc64 ;;
+ sparc*) RPMCANONARCH=sparc ;;
+--- rpm-5.4.15/lib/rpmfc.c.orig 2014-12-20 16:50:32.000000000 +0100
++++ rpm-5.4.15/lib/rpmfc.c 2014-12-20 18:32:11.641808153 +0100
+@@ -581,6 +581,7 @@
+ { "MIPS, N32 MIPS32", RPMFC_ELFMIPSN32|RPMFC_INCLUDE },
+ { "ELF 32-bit", RPMFC_ELF32|RPMFC_INCLUDE },
+ { "ELF 64-bit", RPMFC_ELF64|RPMFC_INCLUDE },
++// { "ELF 32-bit", RPMFC_ELFX32|RPMFC_INCLUDE },
+
+ { " script", RPMFC_SCRIPT },
+ { " text", RPMFC_TEXT },
+@@ -685,7 +686,11 @@
+ for (fct = rpmfcTokens; fct->token != NULL; fct++) {
+ if (strstr(fmstr, fct->token) == NULL)
+ continue;
+- fcolor |= fct->colors;
++ // This is a nasty hack, but will have to do for now
++ if ((fct->colors & RPMFC_ELF32) && (strstr(fmstr, "x86-64") != NULL))
++ fcolor |= RPMFC_ELFX32|RPMFC_INCLUDE;
++ else
++ fcolor |= fct->colors;
+ if (fcolor & RPMFC_INCLUDE)
+ return fcolor;
+ }
+--- rpm-5.4.15/lib/rpmfc.h.orig 2014-12-20 17:51:48.584934979 +0100
++++ rpm-5.4.15/lib/rpmfc.h 2014-12-20 17:56:14.690160030 +0100
+@@ -20,8 +20,9 @@
+ RPMFC_BLACK = 0,
+ RPMFC_ELF32 = (1 << 0),
+ RPMFC_ELF64 = (1 << 1),
++ RPMFC_ELFX32 = (1 << 2),
+ RPMFC_ELFMIPSN32 = (1 << 2),
+-#define RPMFC_ELF (RPMFC_ELF32|RPMFC_ELF64|RPMFC_ELFMIPSN32)
++#define RPMFC_ELF (RPMFC_ELF32|RPMFC_ELF64|RPMFC_ELFX32|RPMFC_ELFMIPSN32)
+ /* (1 << 3) leaks into package headers, reserved */
+
+ RPMFC_DESKTOP_FILE = (1 << 4),
+diff -ur rpm-5.4.15/autodeps/linux.prov rpm-5.4.15.x32/autodeps/linux.prov
+--- rpm-5.4.15/autodeps/linux.prov 2010-03-18 10:54:56.000000000 +0100
++++ rpm-5.4.15.x32/autodeps/linux.prov 2014-12-20 19:18:57.339941715 +0100
+@@ -16,8 +16,12 @@
+
+ #
+ # --- Alpha does not mark 64bit dependencies
++# --- Only x86_64 has x32bit dependencies
++markx32=""
+ case `uname -m` in
+ alpha*) mark64="" ;;
++ x86_64) markx32="()(x32bit)"
++ mark64="()(64bit)" ;;
+ *) mark64="()(64bit)" ;;
+ esac
+
+@@ -28,6 +32,10 @@
+
+ lib64=`if file -L $f 2>/dev/null | \
+ grep "ELF 64-bit" >/dev/null; then echo "$mark64"; fi`
++ libx32=`if file -L $f 2>/dev/null | \
++ grep "ELF 32-bit.*x86-64" > /dev/null; \
++ then echo "$markx32"; fi`
++ lib64="$lib64$libx32"
+ if [ "$soname" != "" ]; then
+ if [ ! -L $f ]; then
+ echo $soname$lib64
+Only in rpm-5.4.15.x32/autodeps: linux.prov.orig
+diff -ur rpm-5.4.15/autodeps/linux.req rpm-5.4.15.x32/autodeps/linux.req
+--- rpm-5.4.15/autodeps/linux.req 2010-03-18 10:54:56.000000000 +0100
++++ rpm-5.4.15.x32/autodeps/linux.req 2014-12-20 19:20:04.622910545 +0100
+@@ -38,8 +38,12 @@
+
+ #
+ # --- Alpha does not mark 64bit dependencies
++# --- Only x86_64 has x32bit dependencies
++markx32=""
+ case `uname -m` in
+ alpha*) mark64="" ;;
++ x86_64) markx32="()(x32bit)"
++ mark64="()(64bit)" ;;
+ *) mark64="()(64bit)" ;;
+ esac
+
+@@ -50,6 +54,9 @@
+ [ -r $f -a -x $f ] || continue
+ lib64=`if file -L $f 2>/dev/null | \
+ grep "ELF 64-bit" >/dev/null; then echo "$mark64"; fi`
++ libx32=`if file -L $f 2>/dev/null | \
++ grep "ELF 32-bit.*x86-64" >/dev/null; then echo "$markx32"; fi`
++ lib64="$lib64$libx32"
+ ldd $f | awk '/=>/ {
+ if ($1 !~ /libNoVersion.so/ && $1 !~ /4[um]lib.so/ && $1 !~ /libredhat-kernel.so/) {
+ gsub(/'\''"/,"\\&",$1);
+@@ -64,6 +71,9 @@
+ [ -r $f ] || continue
+ lib64=`if file -L $f 2>/dev/null | \
+ grep "ELF 64-bit" >/dev/null; then echo "$mark64"; fi`
++ libx32=`if file -L $f 2>/dev/null | \
++ grep "ELF 32-bit.*x86-64" >/dev/null; then echo "$markx32"; fi`
++ lib64="$lib64$libx32"
+ ldd $f | awk '/=>/ {
+ if ($1 !~ /libNoVersion.so/ && $1 !~ /4[um]lib.so/ && $1 !~ /libredhat-kernel.so/) {
+ gsub(/'\''"/,"\\&",$1);
+@@ -98,6 +108,9 @@
+ [ -r $f ] || continue
+ lib64=`if file -L $f 2>/dev/null | \
+ grep "ELF 64-bit" >/dev/null; then echo "$mark64"; fi`
++ libx32=`if file -L $f 2>/dev/null | \
++ grep "ELF 32-bit.*x86-64" >/dev/null; then echo "$markx32"; fi`
++ lib64="$lib64$libx32"
+ $OBJDUMP -p $f | awk 'BEGIN { START=0; LIBNAME=""; needed='$needed'; }
+ /^$/ { START=0; }
+ /^Dynamic Section:$/ { START=1; }
+diff -ur rpm-5.4.15/lib/rpmds.c rpm-5.4.15.x32/lib/rpmds.c
+--- rpm-5.4.15/lib/rpmds.c 2014-12-20 19:35:31.114557975 +0100
++++ rpm-5.4.15.x32/lib/rpmds.c 2014-12-20 19:34:54.958087185 +0100
+@@ -2922,19 +2922,26 @@
+ * @retval t soname dependency
+ * @param s elf string (NULL uses "")
+ * @param isElf64 is this an ELF64 symbol?
++ * @param isX32 is this an X32 symbol?
+ */
+ #if defined(HAVE_GELF_H) && defined(HAVE_LIBELF) && !defined(__FreeBSD__)
+-static char * sonameDep(/*@returned@*/ char * t, const char * s, int isElf64)
++static char * sonameDep(/*@returned@*/ char * t, const char * s, int isElf64, int isX32)
+ /*@modifies t @*/
+ {
+ *t = '\0';
+ #if !defined(__alpha__) && !defined(__sun)
+ if (isElf64) {
+ if (s[strlen(s)-1] != ')')
+ (void) stpcpy( stpcpy(t, s), "()(64bit)");
+ else
+ (void) stpcpy( stpcpy(t, s), "(64bit)");
+ }else
++ if (isX32) {
++ if (s[strlen(s)-1] != ')')
++ (void) stpcpy( stpcpy(t, s), "()(x32bit)");
++ else
++ (void) stpcpy( stpcpy(t, s), "(x32bit)");
++ } else
+ #endif
+ (void) stpcpy(t, s);
+ return t;
+@@ -2967,6 +2975,7 @@
+ char * t;
+ int xx;
+ int isElf64;
++ int isX32;
+ int isDSO;
+ int gotSONAME = 0;
+ int gotDEBUG = 0;
+@@ -3009,6 +3018,7 @@
+ /*@=evalorder@*/
+
+ isElf64 = ehdr->e_ident[EI_CLASS] == ELFCLASS64;
++ isX32 = (ehdr->e_ident[EI_CLASS] == ELFCLASS32) && (ehdr->e_machine == EM_X86_64);
+ isDSO = ehdr->e_type == ET_DYN;
+
+ /*@-uniondef @*/
+@@ -3110,7 +3120,7 @@
+
+ /* Add next provide dependency. */
+ ds = rpmdsSingle(RPMTAG_PROVIDES,
+- sonameDep(t, buf, isElf64),
++ sonameDep(t, buf, isElf64, isX32),
+ "", RPMSENSE_FIND_PROVIDES);
+ xx = add(context, ds);
+ (void)rpmdsFree(ds);
+@@ -3163,7 +3173,7 @@
+
+ /* Add next require dependency. */
+ ds = rpmdsSingle(RPMTAG_REQUIRENAME,
+- sonameDep(t, buf, isElf64),
++ sonameDep(t, buf, isElf64, isX32),
+ "", RPMSENSE_FIND_REQUIRES);
+ xx = add(context, ds);
+ (void)rpmdsFree(ds);
+@@ -3205,7 +3215,7 @@
+ assert(s != NULL);
+ buf[0] = '\0';
+ ds = rpmdsSingle(RPMTAG_REQUIRENAME,
+- sonameDep(buf, s, isElf64),
++ sonameDep(buf, s, isElf64, isX32),
+ "", RPMSENSE_FIND_REQUIRES);
+ xx = add(context, ds);
+ (void)rpmdsFree(ds);
+@@ -3220,7 +3230,7 @@
+ /* Add next provide dependency. */
+ buf[0] = '\0';
+ ds = rpmdsSingle(RPMTAG_PROVIDENAME,
+- sonameDep(buf, s, isElf64),
++ sonameDep(buf, s, isElf64, isX32),
+ "", RPMSENSE_FIND_PROVIDES);
+ xx = add(context, ds);
+ (void)rpmdsFree(ds);
+@@ -3256,7 +3266,7 @@
+ /* Add next provide dependency. */
+ buf[0] = '\0';
+ ds = rpmdsSingle(RPMTAG_PROVIDENAME,
+- sonameDep(buf, s, isElf64), "", RPMSENSE_FIND_PROVIDES);
++ sonameDep(buf, s, isElf64, isX32), "", RPMSENSE_FIND_PROVIDES);
+ xx = add(context, ds);
+ (void)rpmdsFree(ds);
+ ds = NULL;
================================================================
---- gitweb:
http://git.pld-linux.org/gitweb.cgi/packages/rpm.git/commitdiff/eb5300f2d1c5002e57b51de5924b9a21e615b8b3
More information about the pld-cvs-commit
mailing list