// 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 ALIGNOF_MAX_ALIGN_T
#undef SIZEOF_LONG
#undef SIZEOF_LONG_DOUBLE
#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_BIG_ENDIAN_IEEE754
#undef DOUBLE_IS_LITTLE_ENDIAN_IEEE754
#undef HAVE_GCC_ASM_FOR_X87
#undef HAVE_GCC_ASM_FOR_X64

#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

#if defined(__i386__) || defined(__x86_64__)
#  define HAVE_GCC_ASM_FOR_X87
#  define ALIGNOF_MAX_ALIGN_T 16
#  define HAVE_GCC_ASM_FOR_X64 1
#  define SIZEOF_LONG_DOUBLE 16
#else
#  define ALIGNOF_MAX_ALIGN_T 8
#  define SIZEOF_LONG_DOUBLE 8
#endif

#endif   // __APPLE__
#endif   // !PY_MACCONFIG_H
