/*
- * Copyright (c) 2000-2007 Apple Inc. All rights reserved.
+ * Copyright (c) 2000-2008 Apple Inc. All rights reserved.
*
* @APPLE_OSREFERENCE_LICENSE_HEADER_START@
*
* used without a prototype in scope.
*/
+/* These settings are particular to each product. */
+#ifdef KERNEL
+#define __DARWIN_ONLY_64_BIT_INO_T 0
+#define __DARWIN_ONLY_UNIX_CONFORMANCE 0
+#define __DARWIN_ONLY_VERS_1050 0
+#else /* !KERNEL */
+#ifdef PRODUCT_AppleTV
+/* Product: AppleTV */
+#define __DARWIN_ONLY_64_BIT_INO_T 1
+#define __DARWIN_ONLY_UNIX_CONFORMANCE 1
+#define __DARWIN_ONLY_VERS_1050 1
+#endif /* PRODUCT_AppleTV */
+#ifdef PRODUCT_iPhone
+/* Product: iPhone */
+#define __DARWIN_ONLY_64_BIT_INO_T 1
+#define __DARWIN_ONLY_UNIX_CONFORMANCE 1
+#define __DARWIN_ONLY_VERS_1050 1
+#endif /* PRODUCT_iPhone */
+#ifdef PRODUCT_MacOSX
+/* Product: MacOSX */
+#define __DARWIN_ONLY_64_BIT_INO_T 0
+/* #undef __DARWIN_ONLY_UNIX_CONFORMANCE (automatically set for 64-bit) */
+#define __DARWIN_ONLY_VERS_1050 0
+#endif /* PRODUCT_MacOSX */
+#endif /* KERNEL */
+
/*
* The __DARWIN_ALIAS macros are used to do symbol renaming; they allow
* legacy code to use the old symbol, thus maintiang binary compatability
* pre-10.5, and it is the default compilation environment, revert the
* compilation environment to pre-__DARWIN_UNIX03.
*/
+#if !defined(__DARWIN_ONLY_UNIX_CONFORMANCE)
+# if defined(__LP64__)
+# define __DARWIN_ONLY_UNIX_CONFORMANCE 1
+# else /* !__LP64__ */
+# define __DARWIN_ONLY_UNIX_CONFORMANCE 0
+# endif /* __LP64__ */
+#endif /* !__DARWIN_ONLY_UNIX_CONFORMANCE */
+
#if !defined(__DARWIN_UNIX03)
-# if defined(_DARWIN_C_SOURCE) || defined(_XOPEN_SOURCE) || defined(_POSIX_C_SOURCE) || defined(__LP64__) || (defined(__arm__) && !defined(KERNEL))
+# if defined(KERNEL)
+# define __DARWIN_UNIX03 0
+# elif __DARWIN_ONLY_UNIX_CONFORMANCE
# if defined(_NONSTD_SOURCE)
-# error "Can't define both _NONSTD_SOURCE and any of _DARWIN_C_SOURCE, _XOPEN_SOURCE, _POSIX_C_SOURCE, or __LP64__"
+# error "Can't define _NONSTD_SOURCE when only UNIX conformance is available."
# endif /* _NONSTD_SOURCE */
# define __DARWIN_UNIX03 1
-# elif defined(_NONSTD_SOURCE) || defined(KERNEL)
+# elif defined(_DARWIN_C_SOURCE) || defined(_XOPEN_SOURCE) || defined(_POSIX_C_SOURCE)
+# if defined(_NONSTD_SOURCE)
+# error "Can't define both _NONSTD_SOURCE and any of _DARWIN_C_SOURCE, _XOPEN_SOURCE or _POSIX_C_SOURCE."
+# endif /* _NONSTD_SOURCE */
+# define __DARWIN_UNIX03 1
+# elif defined(_NONSTD_SOURCE)
# define __DARWIN_UNIX03 0
# else /* default */
# if defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) && ((__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__-0) < 1050)
#endif /* !__DARWIN_UNIX03 */
#if !defined(__DARWIN_64_BIT_INO_T)
-# if defined(_DARWIN_USE_64_BIT_INODE)
+# if defined(KERNEL)
+# define __DARWIN_64_BIT_INO_T 0
+# elif defined(_DARWIN_USE_64_BIT_INODE)
+# if defined(_DARWIN_NO_64_BIT_INODE)
+# error "Can't define both _DARWIN_USE_64_BIT_INODE and _DARWIN_NO_64_BIT_INODE."
+# endif /* _DARWIN_NO_64_BIT_INODE */
# define __DARWIN_64_BIT_INO_T 1
-# elif defined(_DARWIN_NO_64_BIT_INODE) || defined(KERNEL)
+# elif defined(_DARWIN_NO_64_BIT_INODE)
+# if __DARWIN_ONLY_64_BIT_INO_T
+# error "Can't define _DARWIN_NO_64_BIT_INODE when only 64-bit inodes are available."
+# endif /* __DARWIN_ONLY_64_BIT_INO_T */
# define __DARWIN_64_BIT_INO_T 0
# else /* default */
-# define __DARWIN_64_BIT_INO_T 0
+# if __DARWIN_ONLY_64_BIT_INO_T
+# define __DARWIN_64_BIT_INO_T 1
+# else /* !__DARWIN_ONLY_64_BIT_INO_T */
+# define __DARWIN_64_BIT_INO_T 0
+# endif /* __DARWIN_ONLY_64_BIT_INO_T */
# endif
#endif /* !__DARWIN_64_BIT_INO_T */
-#if !defined(__DARWIN_NON_CANCELABLE)
+#if !defined(__DARWIN_VERS_1050)
# if defined(KERNEL)
-# define __DARWIN_NON_CANCELABLE 0
+# define __DARWIN_VERS_1050 0
+# elif __DARWIN_ONLY_VERS_1050
+# define __DARWIN_VERS_1050 1
+# elif defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) && ((__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__-0) >= 1050)
+# define __DARWIN_VERS_1050 1
# else /* default */
-# define __DARWIN_NON_CANCELABLE 0
+# define __DARWIN_VERS_1050 0
# endif
-#endif /* !__DARWIN_NON_CANCELABLE */
+#endif /* !__DARWIN_VERS_1050 */
-#if !defined(__DARWIN_VERS_1050)
-# if !defined(KERNEL) && defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) && ((__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__-0) >= 1050)
-# define __DARWIN_VERS_1050 1
+#if !defined(__DARWIN_NON_CANCELABLE)
+# if defined(KERNEL)
+# define __DARWIN_NON_CANCELABLE 0
# else /* default */
-# define __DARWIN_VERS_1050 0
+# define __DARWIN_NON_CANCELABLE 0
# endif
#endif /* !__DARWIN_NON_CANCELABLE */
* symbol suffixes used for symbol versioning
*/
#if __DARWIN_UNIX03
-# if !defined(__LP64__) && !defined(__arm__)
-# define __DARWIN_SUF_UNIX03 "$UNIX2003"
-# define __DARWIN_SUF_UNIX03_SET 1
-# else /* __LP64__ || __arm__ */
+# if __DARWIN_ONLY_UNIX_CONFORMANCE
# define __DARWIN_SUF_UNIX03 /* nothing */
-# define __DARWIN_SUF_UNIX03_SET 0
-# endif /* !__LP64__ && !__arm__ */
+# else /* !__DARWIN_ONLY_UNIX_CONFORMANCE */
+# define __DARWIN_SUF_UNIX03 "$UNIX2003"
+# endif /* __DARWIN_ONLY_UNIX_CONFORMANCE */
# if __DARWIN_64_BIT_INO_T
-# define __DARWIN_SUF_64_BIT_INO_T "$INODE64"
+# if __DARWIN_ONLY_64_BIT_INO_T
+# define __DARWIN_SUF_64_BIT_INO_T /* nothing */
+# else /* !__DARWIN_ONLY_64_BIT_INO_T */
+# define __DARWIN_SUF_64_BIT_INO_T "$INODE64"
+# endif /* __DARWIN_ONLY_64_BIT_INO_T */
# else /* !__DARWIN_64_BIT_INO_T */
# define __DARWIN_SUF_64_BIT_INO_T /* nothing */
-# endif /* __DARWIN_UNIX03 */
+# endif /* __DARWIN_64_BIT_INO_T */
+
+# if __DARWIN_VERS_1050
+# if __DARWIN_ONLY_VERS_1050
+# define __DARWIN_SUF_1050 /* nothing */
+# else /* !__DARWIN_ONLY_VERS_1050 */
+# define __DARWIN_SUF_1050 "$1050"
+# endif /* __DARWIN_ONLY_VERS_1050 */
+# else /* !__DARWIN_VERS_1050 */
+# define __DARWIN_SUF_1050 /* nothing */
+# endif /* __DARWIN_VERS_1050 */
# if __DARWIN_NON_CANCELABLE
# define __DARWIN_SUF_NON_CANCELABLE "$NOCANCEL"
# define __DARWIN_SUF_NON_CANCELABLE /* nothing */
# endif /* __DARWIN_NON_CANCELABLE */
-# if __DARWIN_VERS_1050
-# define __DARWIN_SUF_1050 "$1050"
-# else /* !__DARWIN_VERS_1050 */
-# define __DARWIN_SUF_1050 /* nothing */
-# endif /* __DARWIN_VERS_1050 */
-
#else /* !__DARWIN_UNIX03 */
# define __DARWIN_SUF_UNIX03 /* nothing */
-# define __DARWIN_SUF_UNIX03_SET 0
# define __DARWIN_SUF_64_BIT_INO_T /* nothing */
# define __DARWIN_SUF_NON_CANCELABLE /* nothing */
# define __DARWIN_SUF_1050 /* nothing */
* long doubles. This applies only to ppc; i386 already has long double
* support, while ppc64 doesn't have any backwards history.
*/
-#if defined(__ppc__)
+#if defined(__ppc__)
# if defined(__LDBL_MANT_DIG__) && defined(__DBL_MANT_DIG__) && \
__LDBL_MANT_DIG__ > __DBL_MANT_DIG__
# if __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__-0 < 1040
# define __DARWIN_LDBL_COMPAT2(x) /* nothing */
# define __DARWIN_LONG_DOUBLE_IS_DOUBLE 1
# endif
-#elif defined(__i386__) || defined(__ppc64__) || defined(__x86_64__) || defined (__arm__)
+#elif defined(__i386__) || defined(__ppc64__) || defined(__x86_64__)
# define __DARWIN_LDBL_COMPAT(x) /* nothing */
# define __DARWIN_LDBL_COMPAT2(x) /* nothing */
# define __DARWIN_LONG_DOUBLE_IS_DOUBLE 0
* Public darwin-specific feature macros
*****************************************/
+/*
+ * _DARWIN_FEATURE_64_BIT_INODE indicates that the ino_t type is 64-bit, and
+ * structures modified for 64-bit inodes (like struct stat) will be used.
+ */
+#if __DARWIN_64_BIT_INO_T
+#define _DARWIN_FEATURE_64_BIT_INODE 1
+#endif
+
/*
* _DARWIN_FEATURE_LONG_DOUBLE_IS_DOUBLE indicates when the long double type
- * is the same as the double type (ppc only)
+ * is the same as the double type (ppc and arm only)
*/
#if __DARWIN_LONG_DOUBLE_IS_DOUBLE
#define _DARWIN_FEATURE_LONG_DOUBLE_IS_DOUBLE 1
#endif
/*
- * _DARWIN_FEATURE_UNIX_CONFORMANCE indicates whether UNIX conformance is on,
- * and specifies the conformance level (3 is SUSv3)
+ * _DARWIN_FEATURE_64_ONLY_BIT_INODE indicates that the ino_t type may only
+ * be 64-bit; there is no support for 32-bit ino_t when this macro is defined
+ * (and non-zero). There is no struct stat64 either, as the regular
+ * struct stat will already be the 64-bit version.
*/
-#if __DARWIN_UNIX03
-#define _DARWIN_FEATURE_UNIX_CONFORMANCE 3
+#if __DARWIN_ONLY_64_BIT_INO_T
+#define _DARWIN_FEATURE_ONLY_64_BIT_INODE 1
#endif
/*
- * _DARWIN_FEATURE_64_BIT_INODE indicates that the ino_t type is 64-bit, and
- * structures modified for 64-bit inodes (like struct stat) will be used.
+ * _DARWIN_FEATURE_ONLY_VERS_1050 indicates that only those APIs updated
+ * in 10.5 exists; no pre-10.5 variants are available.
*/
-#if __DARWIN_64_BIT_INO_T
-#define _DARWIN_FEATURE_64_BIT_INODE 1
+#if __DARWIN_ONLY_VERS_1050
+#define _DARWIN_FEATURE_ONLY_VERS_1050 1
+#endif
+
+/*
+ * _DARWIN_FEATURE_ONLY_UNIX_CONFORMANCE indicates only UNIX conforming API
+ * are available (the legacy BSD APIs are not available)
+ */
+#if __DARWIN_ONLY_UNIX_CONFORMANCE
+#define _DARWIN_FEATURE_ONLY_UNIX_CONFORMANCE 1
+#endif
+
+/*
+ * _DARWIN_FEATURE_UNIX_CONFORMANCE indicates whether UNIX conformance is on,
+ * and specifies the conformance level (3 is SUSv3)
+ */
+#if __DARWIN_UNIX03
+#define _DARWIN_FEATURE_UNIX_CONFORMANCE 3
#endif
#endif /* !_CDEFS_H_ */