G'day Larry I am just passing this on from a freebsd ports bug report. https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=242134
In src/libutil/ustring.cpp oiio uses _LIBCPP_BIG_ENDIAN which looks to be an llvm libc++ only definition. Should this be wrapped in a LIBCPP only testing? So it seems we want a reliable endian test - while clang defines __BIG_ENDIAN__ or __LITTLE_ENDIAN__ I don't see that in gcc. One solution could be to use a custom definition with cmakes TEST_BIG_ENDIAN() As we already use boost there is boost/detail/endian.hpp There is the system header sys/endian.h which has #define _LITTLE_ENDIAN 1234 /* LSB first: i386, vax */ #define _BIG_ENDIAN 4321 /* MSB first: 68000, ibm, net */ #define _BYTE_ORDER _LITTLE_ENDIAN So you could use #if _BYTE_ORDER == _BIG_ENDIAN ... When using clang/gcc the compiler defines provide a similar choice. Would this also work with MS/Intel compilers? # if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ As a test -- % g++ -dM -E -x c++ /dev/null | grep ENDIAN #define __ORDER_LITTLE_ENDIAN__ 1234 #define __FLOAT_WORD_ORDER__ __ORDER_LITTLE_ENDIAN__ #define __ORDER_PDP_ENDIAN__ 3412 #define __ORDER_BIG_ENDIAN__ 4321 #define __BYTE_ORDER__ __ORDER_LITTLE_ENDIAN__ % clang++ -dM -E -x c++ /dev/null | grep ENDIAN #define __BYTE_ORDER__ __ORDER_LITTLE_ENDIAN__ #define __LITTLE_ENDIAN__ 1 #define __ORDER_BIG_ENDIAN__ 4321 #define __ORDER_LITTLE_ENDIAN__ 1234 #define __ORDER_PDP_ENDIAN__ 3412 % clang++ -target powerpc64-pc-bsd-elf -mcpu=ppc64 -dM -E -x c++ /dev/null | grep ENDIAN #define _BIG_ENDIAN 1 #define __BIG_ENDIAN__ 1 #define __BYTE_ORDER__ __ORDER_BIG_ENDIAN__ #define __ORDER_BIG_ENDIAN__ 4321 #define __ORDER_LITTLE_ENDIAN__ 1234 #define __ORDER_PDP_ENDIAN__ 3412 -- FreeBSD - the place to B...Software Developing Shane Ambler _______________________________________________ Oiio-dev mailing list Oiio-dev@lists.openimageio.org http://lists.openimageio.org/listinfo.cgi/oiio-dev-openimageio.org