// This file moves some of the autoconf magic to compile-time when building on
// macOS. This is needed for building 4-way universal binaries and for 64-bit
// universal binaries because the values redefined below aren't configure-time
// constant but only compile-time constant in these scenarios.

#ifndef PY_MACCONFIG_H
#define PY_MACCONFIG_H
#ifdef __APPLE__

#undef SIZEOF_LONG
#undef SIZEOF_PTHREAD_T
#undef SIZEOF_SIZE_T
#undef SIZEOF_TIME_T
#undef SIZEOF_VOID_P
#undef SIZEOF__BOOL
#undef SIZEOF_UINTPTR_T
#undef SIZEOF_PTHREAD_T
#undef WORDS_BIGENDIAN
#undef DOUBLE_IS_ARM_MIXED_ENDIAN_IEEE754
#undef DOUBLE_IS_BIG_ENDIAN_IEEE754
#undef DOUBLE_IS_LITTLE_ENDIAN_IEEE754
#undef HAVE_GCC_ASM_FOR_X87

#undef VA_LIST_IS_ARRAY
#if defined(__LP64__) && defined(__x86_64__)
#  define VA_LIST_IS_ARRAY 1
#endif

#undef HAVE_LARGEFILE_SUPPORT
#ifndef __LP64__
#   define HAVE_LARGEFILE_SUPPORT 1
#endif

#undef SIZEOF_LONG
#ifdef __LP64__
#  define SIZEOF__BOOL            1
#  define SIZEOF__BOOL            1
#  define SIZEOF_LONG             8
#  define SIZEOF_PTHREAD_T        8
#  define SIZEOF_SIZE_T           8
#  define SIZEOF_TIME_T           8
#  define SIZEOF_VOID_P           8
#  define SIZEOF_UINTPTR_T        8
#  define SIZEOF_PTHREAD_T        8
#else
#  ifdef __ppc__
#     define SIZEOF__BOOL         4
#  else
#     define SIZEOF__BOOL         1
#  endif
#  define SIZEOF_LONG             4
#  define SIZEOF_PTHREAD_T        4
#  define SIZEOF_SIZE_T           4
#  define SIZEOF_TIME_T           4
#  define SIZEOF_VOID_P           4
#  define SIZEOF_UINTPTR_T        4
#  define SIZEOF_PTHREAD_T        4
#endif

// macOS 10.4 (the first release to support 64-bit code
// at all) only supports 64-bit in the UNIX layer.
// Therefore suppress the toolbox-glue in 64-bit mode.
//
// In 64-bit mode setpgrp always has no arguments, in 32-bit
// mode that depends on the compilation environment
#if defined(__LP64__)
#   undef SETPGRP_HAVE_ARG
#endif

#ifdef __BIG_ENDIAN__
#  define WORDS_BIGENDIAN 1
#  define DOUBLE_IS_BIG_ENDIAN_IEEE754
#else
#  define DOUBLE_IS_LITTLE_ENDIAN_IEEE754
#endif

#ifdef __i386__
#  define HAVE_GCC_ASM_FOR_X87
#endif

#endif   // __APPLE__
#endif   // !PY_MACCONFIG_H
