<pre style='margin:0'>
Christopher Nielsen (mascguy) pushed a commit to branch master
in repository macports-legacy-support.

</pre>
<p><a href="https://github.com/macports/macports-legacy-support/commit/b8e7f9837011e31fc99e666a892aee21468ec5c1">https://github.com/macports/macports-legacy-support/commit/b8e7f9837011e31fc99e666a892aee21468ec5c1</a></p>
<pre style="white-space: pre; background: #F8F8F8"><span style='display:block; white-space:pre;color:#808000;'>commit b8e7f9837011e31fc99e666a892aee21468ec5c1
</span>Author: Fred Wright <fw@fwright.net>
AuthorDate: Sat Jun 1 19:00:09 2024 -0700

<span style='display:block; white-space:pre;color:#404040;'>    Add sys/cdefs.h wrapper, and tests.
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    This is needed to ensure that the __DARWIN_C_* definitions are
</span><span style='display:block; white-space:pre;color:#404040;'>    available with SDKs prior to 10.7.
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    Also adds a test for the effects of __DARWIN_C_LEVEL, initially just
</span><span style='display:block; white-space:pre;color:#404040;'>    as a test that the three macros are defined.
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    Also adds a new manual test, which simply reports the values of the
</span><span style='display:block; white-space:pre;color:#404040;'>    relevant macros.
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    Re: https://trac.macports.org/ticket/69688
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    TESTED:
</span><span style='display:block; white-space:pre;color:#404040;'>    Test fails without the new sys/cdefs.h, and passes with it.
</span><span style='display:block; white-space:pre;color:#404040;'>    Manual test reports as expected.
</span>---
 include/sys/cdefs.h      |  59 +++++++++++++++++++
 manual_tests/cdefsinfo.c | 145 +++++++++++++++++++++++++++++++++++++++++++++++
 test/test_darwin_c.c     |  56 ++++++++++++++++++
 3 files changed, 260 insertions(+)

<span style='display:block; white-space:pre;color:#808080;'>diff --git a/include/sys/cdefs.h b/include/sys/cdefs.h
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 0000000..b784d56
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/include/sys/cdefs.h
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,59 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/*
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * Copyright (c) 2024 Frederick H. G. Wright II <fw@fwright.net>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * Permission to use, copy, modify, and distribute this software for any
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * purpose with or without fee is hereby granted, provided that the above
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * copyright notice and this permission notice appear in all copies.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#ifndef _MACPORTS_SYS_CDEFS_H_
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define _MACPORTS_SYS_CDEFS_H_
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/*
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * This provides definitions for the __DARWIN_C_* macros for earlier SDKs
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * that don't provide them.  Since the definitions are based on #ifndef,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * there's no need for explicit SDK version thresholds.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * Note that all SDKs provide adjustments for _POSIX_C_SOURCE where needed.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* Include the primary system sys/cdefs.h */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#include_next <sys/cdefs.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* The following is copied from the 10.7 SDK, but with additional #ifndefs */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/*
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * Set a single macro which will always be defined and can be used to determine
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * the appropriate namespace.  For POSIX, these values will correspond to
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * _POSIX_C_SOURCE value.  Currently there are two additional levels corresponding
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * to ANSI (_ANSI_SOURCE) and Darwin extensions (_DARWIN_C_SOURCE)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#ifndef __DARWIN_C_ANSI
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DARWIN_C_ANSI         010000L
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#ifndef __DARWIN_C_FULL
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DARWIN_C_FULL         900000L
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#ifndef __DARWIN_C_LEVEL
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#if   defined(_ANSI_SOURCE)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DARWIN_C_LEVEL        __DARWIN_C_ANSI
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#elif defined(_POSIX_C_SOURCE) && !defined(_DARWIN_C_SOURCE) && !defined(_NONSTD_SOURCE)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DARWIN_C_LEVEL        _POSIX_C_SOURCE
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DARWIN_C_LEVEL        __DARWIN_C_FULL
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#endif /* __DARWIN_C_LEVEL undef */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#endif /* _MACPORTS_SYS_CDEFS_H_ */
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/manual_tests/cdefsinfo.c b/manual_tests/cdefsinfo.c
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 0000000..d01114b
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/manual_tests/cdefsinfo.c
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,145 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/*
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * Copyright (c) 2024 Frederick H. G. Wright II <fw@fwright.net>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * Permission to use, copy, modify, and distribute this software for any
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * purpose with or without fee is hereby granted, provided that the above
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * copyright notice and this permission notice appear in all copies.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/*
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * This is a manual "test" to report the values of a few macros related to
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * SDK selection.  It never "fails".
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* Do this before everything else. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#include <_macports_extras/sdkversion.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* So we can delay including stdio.h */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+int printf(const char *format, ...);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define PRINT_VAR(x) printf("%s = %lld\n", #x, (long long) x)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define PRINT_UNDEF(x) printf(#x " is undefined\n")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+static void
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+print_before_cdefs(void)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  printf("  Before <sys/cdefs.h>:\n");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  #ifdef _POSIX_C_SOURCE
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  PRINT_VAR(_POSIX_C_SOURCE);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  #else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  PRINT_UNDEF(_POSIX_C_SOURCE);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  #endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  #ifdef _XOPEN_SOURCE
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  PRINT_VAR(_XOPEN_SOURCE);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  #else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  PRINT_UNDEF(_XOPEN_SOURCE);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  #endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  #ifdef _ANSI_SOURCE
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  PRINT_VAR(_ANSI_SOURCE);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  #else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  PRINT_UNDEF(_ANSI_SOURCE);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  #endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  #ifdef _DARWIN_C_SOURCE
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  PRINT_VAR(_DARWIN_C_SOURCE);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  #else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  PRINT_UNDEF(_DARWIN_C_SOURCE);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  #endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  #ifdef _NONSTD_SOURCE
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  PRINT_VAR(_NONSTD_SOURCE);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  #else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  PRINT_UNDEF(_NONSTD_SOURCE);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  #endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  #ifdef __DARWIN_C_ANSI
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  PRINT_VAR(__DARWIN_C_ANSI);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  #else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  PRINT_UNDEF(__DARWIN_C_ANSI);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  #endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  #ifdef __DARWIN_C_FULL
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  PRINT_VAR(__DARWIN_C_FULL);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  #else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  PRINT_UNDEF(__DARWIN_C_FULL);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  #endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  #ifdef __DARWIN_C_LEVEL
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  PRINT_VAR(__DARWIN_C_LEVEL);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  #else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  PRINT_UNDEF(__DARWIN_C_LEVEL);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  #endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#include <sys/cdefs.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+static void
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+print_after_cdefs(void)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  printf("  After <sys/cdefs.h>:\n");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  #ifdef _POSIX_C_SOURCE
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  PRINT_VAR(_POSIX_C_SOURCE);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  #else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  PRINT_UNDEF(_POSIX_C_SOURCE);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  #endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  #ifdef _XOPEN_SOURCE
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  PRINT_VAR(_XOPEN_SOURCE);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  #else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  PRINT_UNDEF(_XOPEN_SOURCE);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  #endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  #ifdef _ANSI_SOURCE
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  PRINT_VAR(_ANSI_SOURCE);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  #else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  PRINT_UNDEF(_ANSI_SOURCE);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  #endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  #ifdef _DARWIN_C_SOURCE
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  PRINT_VAR(_DARWIN_C_SOURCE);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  #else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  PRINT_UNDEF(_DARWIN_C_SOURCE);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  #endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  #ifdef _NONSTD_SOURCE
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  PRINT_VAR(_NONSTD_SOURCE);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  #else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  PRINT_UNDEF(_NONSTD_SOURCE);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  #endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  #ifdef __DARWIN_C_ANSI
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  PRINT_VAR(__DARWIN_C_ANSI);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  #else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  PRINT_UNDEF(__DARWIN_C_ANSI);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  #endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  #ifdef __DARWIN_C_FULL
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  PRINT_VAR(__DARWIN_C_FULL);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  #else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  PRINT_UNDEF(__DARWIN_C_FULL);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  #endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  #ifdef __DARWIN_C_LEVEL
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  PRINT_VAR(__DARWIN_C_LEVEL);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  #else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  PRINT_UNDEF(__DARWIN_C_LEVEL);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  #endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* Include stdio afterward, since it might influence the definitions. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* Disable the PPC long double hack to avoid a warning. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#undef __DARWIN_LDBL_COMPAT
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __DARWIN_LDBL_COMPAT(x)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#include <stdio.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+int
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+main(int argc, char *argv[])
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  (void) argc; (void) argv;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  printf("\n");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  print_before_cdefs();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  printf("\n");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  print_after_cdefs();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  printf("\n");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/test/test_darwin_c.c b/test/test_darwin_c.c
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 0000000..ac16e90
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/test/test_darwin_c.c
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,56 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/*
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * Copyright (c) 2024 Frederick H. G. Wright II <fw@fwright.net>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * Permission to use, copy, modify, and distribute this software for any
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * purpose with or without fee is hereby granted, provided that the above
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * copyright notice and this permission notice appear in all copies.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/*
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * This provides tests for the proper effects of __DARWIN_C_LEVEL.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * Except for the initial macro definition tests, these involve providing
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * definitions which would conflict with the standard headers if the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * normal declarations/definitions weren't suppressed by __DARWIN_C_LEVEL.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * Since only one value of __DARWIN_C_LEVEL can be effective in a given build,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * this entire test is wrapped multiple times with different values.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * Since there's no easy way to defer such conflicts until runtime, all
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * failures (including the few that could be deferred) manifest themselves
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * as build failures.  The runtime test is just a dummy (almost).
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* First verify that the basic macros are defined. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#include <sys/cdefs.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#ifndef __DARWIN_C_ANSI
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#error __DARWIN_C_ANSI is not defined
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#ifndef __DARWIN_C_FULL
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#error __DARWIN_C_FULL is not defined
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#ifndef __DARWIN_C_LEVEL
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#error __DARWIN_C_LEVEL is not defined
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* Dummy runtime test, just reports value */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#include <stdio.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+int
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+main(int argc, char *argv[])
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  (void) argc; (void) argv;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  printf("__DARWIN_C_LEVEL = %d\n", (int) __DARWIN_C_LEVEL);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span></pre><pre style='margin:0'>

</pre>