Index: configure.ac ================================================================== --- configure.ac +++ configure.ac @@ -378,10 +378,13 @@ esac AC_C_BIGENDIAN([ AC_DEFINE(OF_BIG_ENDIAN, 1, [Whether we are big endian]) ]) +AS_IF([test x"$ac_cv_c_bigendian" = x"universal"], [ + AC_DEFINE(OF_UNIVERSAL, 1, [Whether we are building a universal binary]) +]) AC_MSG_CHECKING(for SIZE_MAX) AC_EGREP_CPP(yes, [ #include #include @@ -417,23 +420,27 @@ [AC_MSG_ERROR( [Floating point implementation does not conform to IEEE 754!])]) AC_MSG_CHECKING(for floating point endianess) fp_endianess="unknown" -AC_TRY_COMPILE([ - double endianess = 2.993700760838795055656993580068609688772747263874402942272934826871811872228512759832626847251963763755836687759498519784550143745834860002945223766052808125982053455555265216112722718870586961456110693379343178124592311441022662940307099598578775368547768968914916965731708568179631324904813506101190853720749196062963892799499230635163056742330563321122389331703618066046034494287335316842529021563862331183541255013987734473643350285400060357711238514186776429325214739886098119655678483017894951556639821088508565036657794343031121375178126860889964700274558728491825977274341798997758923017217660272136611938897932105874133412726223468780517578125e-259; -], [ -], [ - AS_IF([$EGREP BigEnd conftest.$ac_objext >/dev/null], [ - AC_DEFINE(OF_FLOAT_BIG_ENDIAN, 1, - [Whether floats are big endian]) - fp_endianess="big endian" - ], [ - AS_IF([$EGREP dnEgiB conftest.$ac_objext >/dev/null], [ - fp_endianess="little endian" - ]) - ]) +AS_IF([test x"$ac_cv_c_bigendian" != x"universal"], [ + AC_TRY_COMPILE([ + double endianess = 2.993700760838795055656993580068609688772747263874402942272934826871811872228512759832626847251963763755836687759498519784550143745834860002945223766052808125982053455555265216112722718870586961456110693379343178124592311441022662940307099598578775368547768968914916965731708568179631324904813506101190853720749196062963892799499230635163056742330563321122389331703618066046034494287335316842529021563862331183541255013987734473643350285400060357711238514186776429325214739886098119655678483017894951556639821088508565036657794343031121375178126860889964700274558728491825977274341798997758923017217660272136611938897932105874133412726223468780517578125e-259; + ], [ + ], [ + AS_IF([$EGREP BigEnd conftest.$ac_objext >/dev/null], [ + AC_DEFINE(OF_FLOAT_BIG_ENDIAN, 1, + [Whether floats are big endian]) + fp_endianess="big endian" + ], [ + AS_IF([$EGREP dnEgiB conftest.$ac_objext >/dev/null], [ + fp_endianess="little endian" + ]) + ]) + ]) +], [ + fp_endianess="universal" ]) AC_MSG_RESULT($fp_endianess) AS_IF([test x"$fp_endianess" = x"unknown"], [ AC_MSG_ERROR( [Floating point implementation does not conform to IEEE 754!])]) Index: src/macros.h ================================================================== --- src/macros.h +++ src/macros.h @@ -36,17 +36,16 @@ # define OF_UNLIKELY(cond) cond # define OF_CONST_FUNC #endif /* Required to build universal binaries on OS X */ -#if __BIG_ENDIAN__ || __LITTLE_ENDIAN__ -# if __BIG_ENDIAN__ && __LITTLE_ENDIAN__ -# error __BIG_ENDIAN__ and __LITTLE_ENDIAN__ defined! -# endif -# undef OF_BIG_ENDIAN +#ifdef OF_UNIVERSAL # if __BIG_ENDIAN__ # define OF_BIG_ENDIAN +# define OF_FLOAT_BIG_ENDIAN +# elif !__LITTLE_ENDIAN__ +# error OF_UNIVERSAL defined, but neither __BIG_ENDIAN__ nor __LITTLE_ENDIAN__! # endif #endif #ifdef OF_BIG_ENDIAN # define OF_BYTE_ORDER_NATIVE OF_BYTE_ORDER_BIG_ENDIAN Index: src/objfw-defs.h.in ================================================================== --- src/objfw-defs.h.in +++ src/objfw-defs.h.in @@ -21,6 +21,7 @@ #undef OF_HAVE_SOCKETS #undef OF_HAVE_SYMLINK #undef OF_HAVE_SYS_SOCKET_H #undef OF_HAVE_THREADS #undef OF_OBJFW_RUNTIME +#undef OF_UNIVERSAL #undef SIZE_MAX