On Sun, Jul 02, 2017 at 12:41:48PM +0200, Donovan Watteau wrote: > Hi, > > archivers/p7zip currently fails to build on loongson, because of a > mistake in patch-C_CpuArch_h: we were implying that __mips64__ always > means that we're running big-endian, but that's wrong for loongson > (which is mips64el). > > __MIPSEL__ and __mips64__ are both detected by CpuArch.h, so p7zip > tries to build thinking that it's both big- and little-endian, and > the build fails right at the start. > > The following diff just patches CpuArch.h to use <endian.h> instead, > which makes things simpler and correct.
Thank you, Donovan. I've tested on amd64, and the patch seems to be working. The built-in tests all function. I am in the process of testing on i386 and armv7 (the latter under qemu), which I should be able to complete later today. > I don't think REVISION needs to be bumped, because it shouldn't change > anything for the architectures where it didn't build (except if there > was an arch where we were successfully building, but with the wrong > endianness). I think a revision bump is needed and have attached a revise patch which includes one. Josh Grosse, $MAINTAINER
Index: Makefile =================================================================== RCS file: /systems/cvs/ports/archivers/p7zip/Makefile,v retrieving revision 1.39 diff -u -p -r1.39 Makefile --- Makefile 10 Apr 2017 11:45:22 -0000 1.39 +++ Makefile 2 Jul 2017 12:32:47 -0000 @@ -4,7 +4,7 @@ COMMENT-main= file archiver with high co COMMENT-rar= rar modules for p7zip V= 16.02 -REVISION-main= 1 +REVISION-main= 2 REVISION-rar= 0 DISTNAME= p7zip_${V}_src_all PKGNAME= p7zip-${V} Index: patches/patch-C_CpuArch_h =================================================================== RCS file: /systems/cvs/ports/archivers/p7zip/patches/patch-C_CpuArch_h,v retrieving revision 1.2 diff -u -p -r1.2 patch-C_CpuArch_h --- patches/patch-C_CpuArch_h 10 Apr 2016 19:53:09 -0000 1.2 +++ patches/patch-C_CpuArch_h 2 Jul 2017 12:31:10 -0000 @@ -1,25 +1,52 @@ $OpenBSD: patch-C_CpuArch_h,v 1.2 2016/04/10 19:53:09 naddy Exp $ -Add support for more OpenBSD architectures. +Use <endian.h> to determine endianness, instead of a complex and +incorrect list of architectures. ---- C/CpuArch.h.orig Wed Feb 17 01:27:16 2016 -+++ C/CpuArch.h Sun Apr 3 19:05:55 2016 -@@ -66,6 +66,8 @@ MY_CPU_LE_UNALIGN means that CPU is LITTLE ENDIAN and - || defined(__MIPSEL__) \ - || defined(__MIPSEL) \ - || defined(_MIPSEL) \ -+ || defined(__alpha__) \ -+ || defined(__sh__) \ - || (defined(__BYTE_ORDER__) && (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__)) - #define MY_CPU_LE +Index: C/CpuArch.h +--- C/CpuArch.h.orig ++++ C/CpuArch.h +@@ -5,6 +5,7 @@ + #define __CPU_ARCH_H + + #include "7zTypes.h" ++#include <endian.h> + + EXTERN_C_BEGIN + +@@ -56,33 +57,9 @@ MY_CPU_LE_UNALIGN means that CPU is LITTLE ENDIAN and + #define MY_CPU_IA64_LE #endif -@@ -82,6 +84,9 @@ MY_CPU_LE_UNALIGN means that CPU is LITTLE ENDIAN and - || defined(__s390x__) \ - || defined(__zarch__) \ - || defined(__sparc) \ -+ || defined(__sparc__) \ -+ || defined(__hppa__) \ -+ || defined(__mips64__) \ - || (defined(__BYTE_ORDER__) && (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__)) + +-#if defined(MY_CPU_X86_OR_AMD64) \ +- || defined(MY_CPU_ARM_LE) \ +- || defined(MY_CPU_IA64_LE) \ +- || defined(__LITTLE_ENDIAN__) \ +- || defined(__ARMEL__) \ +- || defined(__THUMBEL__) \ +- || defined(__AARCH64EL__) \ +- || defined(__MIPSEL__) \ +- || defined(__MIPSEL) \ +- || defined(_MIPSEL) \ +- || (defined(__BYTE_ORDER__) && (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__)) ++#if BYTE_ORDER == LITTLE_ENDIAN + #define MY_CPU_LE +-#endif +- +-#if defined(__BIG_ENDIAN__) \ +- || defined(__ARMEB__) \ +- || defined(__THUMBEB__) \ +- || defined(__AARCH64EB__) \ +- || defined(__MIPSEB__) \ +- || defined(__MIPSEB) \ +- || defined(_MIPSEB) \ +- || defined(__m68k__) \ +- || defined(__s390__) \ +- || defined(__s390x__) \ +- || defined(__zarch__) \ +- || defined(__sparc) \ +- || (defined(__BYTE_ORDER__) && (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__)) ++#elif BYTE_ORDER == BIG_ENDIAN #define MY_CPU_BE #endif +