diff -up rpm-4.9.1.3/lib/rpmrc.c.niagara rpm-4.9.1.3/lib/rpmrc.c --- rpm-4.9.1.3/lib/rpmrc.c.niagara 2012-04-19 17:06:23.130595223 +0200 +++ rpm-4.9.1.3/lib/rpmrc.c 2012-04-19 17:06:23.134739249 +0200 @@ -718,6 +718,31 @@ exit: return rc; } +#if defined(__linux__) && defined(__sparc__) +static int is_sun4v() +{ + char buffer[4096], *p; + int fd = open("/proc/cpuinfo", O_RDONLY); + if (read(fd, &buffer, sizeof(buffer) - 1) == -1) { + rpmlog(RPMLOG_WARNING, _("read(/proc/cpuinfo) failed\n")); + close(fd); + return 0; + } + close(fd); + + p = strstr(buffer, "type"); + p = strtok(p, "\n"); + p = strstr(p, "sun"); + if (p == NULL) { + rpmlog(RPMLOG_WARNING, _("/proc/cpuinfo has no 'type' line\n")); + return 0; + } else if (strcmp(p, "sun4v") == 0) { + return 1; + } + return 0; +} +#endif + # if defined(__linux__) && defined(__i386__) #include @@ -1178,6 +1203,13 @@ static void defaultMachine(const char ** personality(oldpers); } } + if (is_sun4v()){ + if (strcmp(un.machine, "sparcv9") == 0 || strcmp(un.machine, "sparc") == 0 ) { + strcpy(un.machine, "sparcv9v"); + } else if (strcmp(un.machine, "sparc64") == 0 ) { + strcpy(un.machine, "sparc64v"); + } + } # endif /* sparc*-linux */ # if defined(__linux__) && defined(__powerpc__) diff -up rpm-4.9.1.3/rpmrc.in.niagara rpm-4.9.1.3/rpmrc.in --- rpm-4.9.1.3/rpmrc.in.niagara 2012-04-19 17:06:23.131476769 +0200 +++ rpm-4.9.1.3/rpmrc.in 2012-04-19 17:06:23.135738996 +0200 @@ -316,7 +316,7 @@ arch_compat: sun4c: sparc arch_compat: sun4d: sparc arch_compat: sun4m: sparc arch_compat: sun4u: sparc64 -arch_compat: sparc64v: sparc64 +arch_compat: sparc64v: sparc64 sparcv9v arch_compat: sparc64: sparcv9 arch_compat: sparcv9v: sparcv9 arch_compat: sparcv9: sparcv8