<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/c15d313c51f7743b632a98a516940dee8cc6d91d">https://github.com/macports/macports-legacy-support/commit/c15d313c51f7743b632a98a516940dee8cc6d91d</a></p>
<pre style="white-space: pre; background: #F8F8F8"><span style='display:block; white-space:pre;color:#808000;'>commit c15d313c51f7743b632a98a516940dee8cc6d91d
</span>Author: Fred Wright <fw@fwright.net>
AuthorDate: Tue Oct 1 14:54:13 2024 -0700

<span style='display:block; white-space:pre;color:#404040;'>    Fix some builds (e.g. Xcode 7.2 clang 7) with 15.x SDK.
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    Due to a clang bug, the 15.x SDK sys/cdefs.h failed to compile with
</span><span style='display:block; white-space:pre;color:#404040;'>    the XCode 7.2 clang 7 on OS 10.10.  This adds a workaround for that.
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    This bug is also present in some gcc versions, so the workaround is
</span><span style='display:block; white-space:pre;color:#404040;'>    applied there as well, albeit with an apparently unavoidable warning.
</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;'>    The checksdkversion and darwin_c_all tests now build and pass with the
</span><span style='display:block; white-space:pre;color:#404040;'>    15.x SDK and the usual Xcode compiler on all OS versions, as well as
</span><span style='display:block; white-space:pre;color:#404040;'>    all non-problematic MacPorts compilers tested.
</span>---
 include/sys/cdefs.h | 38 ++++++++++++++++++++++++++++++++++++++
 1 file changed, 38 insertions(+)

<span style='display:block; white-space:pre;color:#808080;'>diff --git a/include/sys/cdefs.h b/include/sys/cdefs.h
</span><span style='display:block; white-space:pre;color:#808080;'>index b784d56..562f8f7 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/include/sys/cdefs.h
</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;'>@@ -17,6 +17,44 @@
</span> #ifndef _MACPORTS_SYS_CDEFS_H_
 #define _MACPORTS_SYS_CDEFS_H_
 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+/*
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * Work around bug in some versions of clang (e.g. Xcode 7.2 clang 7).
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * See: https://bugs.llvm.org/show_bug.cgi?id=23435
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * Some versions of clang implement __has_cpp_attribute, but are unable to
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * parse a namespaced argument in C mode.  The official fix is to make
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * __has_cpp_attribute undefined when compiling C.  We can't do that here,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * but we can override it with a dummy, disabling the resulting warning
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * as we do so.  Since the condition is based on the actual clang bug, no
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * SDK version condition is needed.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * The first case where this arose was in using the 15.x SDK with the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * Xcode 7.2 clang 7 compiler on OS 10.10.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * A similar bug exists in some versions of gcc, and a similar workaround
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * is applicable, except that suppressing the resulting warning doesn't
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * seem to work, for an unknown reason.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * Note that the case where __has_cpp_attribute is undefined is already
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * handled by the Apple include, so only the inappropriately defined case
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * needs to be handled here.
</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;'>+#if defined(__has_cpp_attribute) && !defined(__cplusplus)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  #if defined (__clang__)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    #pragma clang diagnostic push
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    #pragma clang diagnostic ignored "-Wbuiltin-macro-redefined"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    #define __has_cpp_attribute(x) 0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    #pragma clang diagnostic pop
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  #elif defined(__GNUC__)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    #pragma GCC diagnostic push
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    /* The following doesn't seem to work */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    #pragma GCC diagnostic ignored "-Wbuiltin-macro-redefined"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    #define __has_cpp_attribute(x) 0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    #pragma GCC diagnostic pop
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  #endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> /*
  * This provides definitions for the __DARWIN_C_* macros for earlier SDKs
  * that don't provide them.  Since the definitions are based on #ifndef,
</pre><pre style='margin:0'>

</pre>