Allow universal builds. This is only part of the solution; the config.h.ed script is the other part. If new variables appear in the configure script that are affected by endianness or bitness, remember to handle them both here and in config.h.ed. --- configure.ac.orig 2018-05-22 16:21:16.000000000 -0500 +++ configure.ac 2018-05-25 22:13:02.000000000 -0500 @@ -677,9 +677,6 @@ # check for bytesex stuff AC_C_BIGENDIAN -if test x$ac_cv_c_bigendian = xuniversal ; then - AC_MSG_ERROR([Universal builds not supported: see https://bugzilla.gnome.org/show_bug.cgi?id=742548]) -fi # check for header files @@ -2861,18 +2858,34 @@ cat >>$outfile <<_______EOF #define G_HAVE_GINT64 1 /* deprecated, always true */ -${glib_extension}typedef signed $gint64 gint64; -${glib_extension}typedef unsigned $gint64 guint64; +#ifdef __LP64__ +typedef signed long gint64; +typedef unsigned long guint64; +#else +G_GNUC_EXTENSION typedef signed long long gint64; +G_GNUC_EXTENSION typedef unsigned long long guint64; +#endif -#define G_GINT64_CONSTANT(val) $gint64_constant -#define G_GUINT64_CONSTANT(val) $guint64_constant +#ifdef __LP64__ +#define G_GINT64_CONSTANT(val) (val##L) +#define G_GUINT64_CONSTANT(val) (val##UL) +#else +#define G_GINT64_CONSTANT(val) (G_GNUC_EXTENSION (val##LL)) +#define G_GUINT64_CONSTANT(val) (G_GNUC_EXTENSION (val##ULL)) +#endif _______EOF if test x$gint64_format != x ; then cat >>$outfile <<_______EOF -#define G_GINT64_MODIFIER $gint64_modifier -#define G_GINT64_FORMAT $gint64_format -#define G_GUINT64_FORMAT $guint64_format +#ifdef __LP64__ +#define G_GINT64_MODIFIER "l" +#define G_GINT64_FORMAT "li" +#define G_GUINT64_FORMAT "lu" +#else +#define G_GINT64_MODIFIER "ll" +#define G_GINT64_FORMAT "lli" +#define G_GUINT64_FORMAT "llu" +#endif _______EOF else cat >>$outfile <<_______EOF @@ -2884,10 +2897,17 @@ cat >>$outfile <<_______EOF -#define GLIB_SIZEOF_VOID_P $glib_void_p -#define GLIB_SIZEOF_LONG $glib_long -#define GLIB_SIZEOF_SIZE_T $glib_size_t -#define GLIB_SIZEOF_SSIZE_T $glib_ssize_t +#ifdef __LP64__ +#define GLIB_SIZEOF_VOID_P 8 +#define GLIB_SIZEOF_LONG 8 +#define GLIB_SIZEOF_SIZE_T 8 +#define GLIB_SIZEOF_SSIZE_T 8 +#else +#define GLIB_SIZEOF_VOID_P 4 +#define GLIB_SIZEOF_LONG 4 +#define GLIB_SIZEOF_SIZE_T 4 +#define GLIB_SIZEOF_SSIZE_T 4 +#endif _______EOF @@ -2918,18 +2938,39 @@ if test -z "$glib_unknown_void_p"; then cat >>$outfile <<_______EOF -#define GPOINTER_TO_INT(p) ((gint) ${glib_gpi_cast} (p)) -#define GPOINTER_TO_UINT(p) ((guint) ${glib_gpui_cast} (p)) +#ifdef __LP64__ +#define GPOINTER_TO_INT(p) ((gint) (glong) (p)) +#define GPOINTER_TO_UINT(p) ((guint) (gulong) (p)) +#else +#define GPOINTER_TO_INT(p) ((gint) (gint) (p)) +#define GPOINTER_TO_UINT(p) ((guint) (guint) (p)) +#endif -#define GINT_TO_POINTER(i) ((gpointer) ${glib_gpi_cast} (i)) -#define GUINT_TO_POINTER(u) ((gpointer) ${glib_gpui_cast} (u)) +#ifdef __LP64__ +#define GINT_TO_POINTER(i) ((gpointer) (glong) (i)) +#define GUINT_TO_POINTER(u) ((gpointer) (gulong) (u)) +#else +#define GINT_TO_POINTER(i) ((gpointer) (gint) (i)) +#define GUINT_TO_POINTER(u) ((gpointer) (guint) (u)) +#endif -typedef signed $glib_intptr_type_define gintptr; -typedef unsigned $glib_intptr_type_define guintptr; +#ifdef __LP64__ +typedef signed long gintptr; +typedef unsigned long guintptr; +#else +typedef signed int gintptr; +typedef unsigned int guintptr; +#endif -#define G_GINTPTR_MODIFIER $gintptr_modifier -#define G_GINTPTR_FORMAT $gintptr_format -#define G_GUINTPTR_FORMAT $guintptr_format +#ifdef __LP64__ +#define G_GINTPTR_MODIFIER "l" +#define G_GINTPTR_FORMAT "li" +#define G_GUINTPTR_FORMAT "lu" +#else +#define G_GINTPTR_MODIFIER "" +#define G_GINTPTR_FORMAT "i" +#define G_GUINTPTR_FORMAT "u" +#endif _______EOF else echo '#error SIZEOF_VOID_P unknown - This should never happen' >>$outfile @@ -3024,7 +3065,9 @@ if test x"$g_memory_barrier_needed" != xno; then echo >>$outfile + echo "#ifdef __BIG_ENDIAN__" >>$outfile echo "#define G_ATOMIC_OP_MEMORY_BARRIER_NEEDED 1" >>$outfile + echo "#endif" >>$outfile fi if test x"$g_atomic_lock_free" = xyes; then echo >>$outfile @@ -3034,27 +3077,52 @@ g_bit_sizes="16 32 64" for bits in $g_bit_sizes; do cat >>$outfile <<_______EOF -#define GINT${bits}_TO_${g_bs_native}(val) ((gint${bits}) (val)) -#define GUINT${bits}_TO_${g_bs_native}(val) ((guint${bits}) (val)) -#define GINT${bits}_TO_${g_bs_alien}(val) ((gint${bits}) GUINT${bits}_SWAP_LE_BE (val)) -#define GUINT${bits}_TO_${g_bs_alien}(val) (GUINT${bits}_SWAP_LE_BE (val)) +#ifdef __BIG_ENDIAN__ +#define GINT${bits}_TO_BE(val) ((gint${bits}) (val)) +#define GUINT${bits}_TO_BE(val) ((guint${bits}) (val)) +#define GINT${bits}_TO_LE(val) ((gint${bits}) GUINT${bits}_SWAP_LE_BE (val)) +#define GUINT${bits}_TO_LE(val) (GUINT${bits}_SWAP_LE_BE (val)) +#else +#define GINT${bits}_TO_LE(val) ((gint${bits}) (val)) +#define GUINT${bits}_TO_LE(val) ((guint${bits}) (val)) +#define GINT${bits}_TO_BE(val) ((gint${bits}) GUINT${bits}_SWAP_LE_BE (val)) +#define GUINT${bits}_TO_BE(val) (GUINT${bits}_SWAP_LE_BE (val)) +#endif _______EOF done cat >>$outfile <<_______EOF -#define GLONG_TO_LE(val) ((glong) GINT${glongbits}_TO_LE (val)) -#define GULONG_TO_LE(val) ((gulong) GUINT${glongbits}_TO_LE (val)) -#define GLONG_TO_BE(val) ((glong) GINT${glongbits}_TO_BE (val)) -#define GULONG_TO_BE(val) ((gulong) GUINT${glongbits}_TO_BE (val)) +#ifdef __LP64__ +#define GLONG_TO_LE(val) ((glong) GINT64_TO_LE (val)) +#define GULONG_TO_LE(val) ((gulong) GUINT64_TO_LE (val)) +#define GLONG_TO_BE(val) ((glong) GINT64_TO_BE (val)) +#define GULONG_TO_BE(val) ((gulong) GUINT64_TO_BE (val)) +#else +#define GLONG_TO_LE(val) ((glong) GINT32_TO_LE (val)) +#define GULONG_TO_LE(val) ((gulong) GUINT32_TO_LE (val)) +#define GLONG_TO_BE(val) ((glong) GINT32_TO_BE (val)) +#define GULONG_TO_BE(val) ((gulong) GUINT32_TO_BE (val)) +#endif #define GINT_TO_LE(val) ((gint) GINT${gintbits}_TO_LE (val)) #define GUINT_TO_LE(val) ((guint) GUINT${gintbits}_TO_LE (val)) #define GINT_TO_BE(val) ((gint) GINT${gintbits}_TO_BE (val)) #define GUINT_TO_BE(val) ((guint) GUINT${gintbits}_TO_BE (val)) -#define GSIZE_TO_LE(val) ((gsize) GUINT${gsizebits}_TO_LE (val)) -#define GSSIZE_TO_LE(val) ((gssize) GINT${gssizebits}_TO_LE (val)) -#define GSIZE_TO_BE(val) ((gsize) GUINT${gsizebits}_TO_BE (val)) -#define GSSIZE_TO_BE(val) ((gssize) GINT${gssizebits}_TO_BE (val)) -#define G_BYTE_ORDER $g_byte_order +#ifdef __LP64__ +#define GSIZE_TO_LE(val) ((gsize) GUINT64_TO_LE (val)) +#define GSSIZE_TO_LE(val) ((gssize) GINT64_TO_LE (val)) +#define GSIZE_TO_BE(val) ((gsize) GUINT64_TO_BE (val)) +#define GSSIZE_TO_BE(val) ((gssize) GINT64_TO_BE (val)) +#else +#define GSIZE_TO_LE(val) ((gsize) GUINT32_TO_LE (val)) +#define GSSIZE_TO_LE(val) ((gssize) GINT32_TO_LE (val)) +#define GSIZE_TO_BE(val) ((gsize) GUINT32_TO_BE (val)) +#define GSSIZE_TO_BE(val) ((gssize) GINT32_TO_BE (val)) +#endif +#ifdef __BIG_ENDIAN__ +#define G_BYTE_ORDER G_BIG_ENDIAN +#else +#define G_BYTE_ORDER G_LITTLE_ENDIAN +#endif #define GLIB_SYSDEF_POLLIN =$g_pollin #define GLIB_SYSDEF_POLLOUT =$g_pollout @@ -3295,10 +3363,10 @@ *) glib_vacopy='' esac -if test x$glib_cv_va_val_copy = xno; then glib_vacopy="\$glib_vacopy -#define G_VA_COPY_AS_ARRAY 1" -fi +#ifdef __LP64__ +#define G_VA_COPY_AS_ARRAY 1 +#endif" g_have_gnuc_varargs=$g_have_gnuc_varargs g_have_iso_c_varargs=$g_have_iso_c_varargs