diff -urN rpm.org/build/parseSpec.c rpm/build/parseSpec.c --- rpm.org/build/parseSpec.c 2004-06-14 14:52:54.433793272 +0200 +++ rpm/build/parseSpec.c 2004-06-14 14:55:21.399451096 +0200 @@ -227,6 +227,15 @@ return 0; } /*@=boundswrite@*/ +static const char *getAlternateArch(const char *arch) +{ + const char *alternate_arch = NULL; + if (! strncmp("x86_64", arch, sizeof("x86_64")-1)) + alternate_arch = "amd64"; + else if (! strncmp("amd64", arch, sizeof("amd64")-1)) + alternate_arch = "x86_64"; + return alternate_arch; +} /*@-boundswrite@*/ int readLine(Spec spec, int strip) @@ -319,13 +328,15 @@ match = 0; } else if (! strncmp("%ifarch", s, sizeof("%ifarch")-1)) { const char *arch = rpmExpand("%{_target_cpu}", NULL); + const char *alternate_arch = getAlternateArch(arch); s += 7; - match = matchTok(arch, s); + match = matchTok(arch, s) || (alternate_arch && matchTok(alternate_arch, s)); arch = _free(arch); } else if (! strncmp("%ifnarch", s, sizeof("%ifnarch")-1)) { const char *arch = rpmExpand("%{_target_cpu}", NULL); + const char *alternate_arch = getAlternateArch(arch); s += 8; - match = !matchTok(arch, s); + match = !matchTok(arch, s) && (!alternate_arch || !matchTok(alternate_arch, s)); arch = _free(arch); } else if (! strncmp("%ifos", s, sizeof("%ifos")-1)) { const char *os = rpmExpand("%{_target_os}", NULL); diff -urN rpm.org/lib/rpmrc.c rpm/lib/rpmrc.c --- rpm.org/lib/rpmrc.c 2004-06-14 14:53:19.117040848 +0200 +++ rpm/lib/rpmrc.c 2004-06-14 14:55:21.421447752 +0200 @@ -1319,6 +1319,13 @@ } # endif +# if defined(__linux__) && defined(__amd64__) + { + /* Defaults to amd64 if compiler supports __amd64__ */ + strcpy(un.machine, "amd64"); + } +# endif + # if defined(__linux__) && defined(__powerpc__) { unsigned pvr = 0; diff -urN rpm.org/rpmrc.in rpm/rpmrc.in --- rpm.org/rpmrc.in 2004-06-14 14:53:29.723428432 +0200 +++ rpm/rpmrc.in 2004-06-14 14:58:38.156539472 +0200 @@ -272,9 +272,9 @@ buildarchtranslate: ia64: ia64 -buildarchtranslate: x86_64: x86_64 -buildarchtranslate: amd64: x86_64 -buildarchtranslate: ia32e: x86_64 +buildarchtranslate: x86_64: amd64 +buildarchtranslate: amd64: amd64 +buildarchtranslate: ia32e: amd64 ############################################################# # Architecture compatibility diff -urN rpm.org/configure.ac rpm/configure.ac --- rpm.org/configure.ac 2004-07-02 23:11:17.214544320 +0200 +++ rpm/configure.ac 2004-07-02 23:11:43.369568152 +0200 @@ -1110,7 +1110,7 @@ *86) RPMCANONCOLOR=0; RPMCANONARCH=i386 ;; ia32e*) RPMCANONCOLOR=3; RPMCANONARCH=ia32e ;; amd64*) RPMCANONCOLOR=3; RPMCANONARCH=amd64 ;; -x86_64*) RPMCANONCOLOR=3; RPMCANONARCH=x86_64 ;; +x86_64*) RPMCANONCOLOR=3; RPMCANONARCH=amd64 ;; alpha*) RPMCANONCOLOR=0; RPMCANONARCH=alpha ;; sparc64*) RPMCANONCOLOR=3; RPMCANONARCH=sparc64 ;; sparc*) RPMCANONCOLOR=3; RPMCANONARCH=sparc ;;