<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>