<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/02bbb99f4ab27264457a6573f930a8c61ce9c514">https://github.com/macports/macports-legacy-support/commit/02bbb99f4ab27264457a6573f930a8c61ce9c514</a></p>
<pre style="white-space: pre; background: #F8F8F8"><span style='display:block; white-space:pre;color:#808000;'>commit 02bbb99f4ab27264457a6573f930a8c61ce9c514
</span>Author: Fred Wright <fw@fwright.net>
AuthorDate: Sun Oct 6 15:55:01 2024 -0700
<span style='display:block; white-space:pre;color:#404040;'> Fix SDK 15 MacTypes.h for compilers without __has_include()
</span><span style='display:block; white-space:pre;color:#404040;'>
</span><span style='display:block; white-space:pre;color:#404040;'> As of SDK 15, MacTypes.h is relying on __has_include(), but the dummy
</span><span style='display:block; white-space:pre;color:#404040;'> false definition provided by sys/cdefs.h then causes it to fail to
</span><span style='display:block; white-space:pre;color:#404040;'> include ConditionalMacros.h, resulting in a build failure. This
</span><span style='display:block; white-space:pre;color:#404040;'> change provides proper tracking of the __has_include() status, both
</span><span style='display:block; white-space:pre;color:#404040;'> originally and as potentially modified by sys/cdefs.h. This is then
</span><span style='display:block; white-space:pre;color:#404040;'> used to temporarily force it true to get the necessary include.
</span><span style='display:block; white-space:pre;color:#404040;'>
</span><span style='display:block; white-space:pre;color:#404040;'> This was first observed in an indirect include from IOKit/usb/USB.h.
</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;'> All OS Xcode compilers, as well as all others tested, now successfully
</span><span style='display:block; white-space:pre;color:#404040;'> build IOKit/usb/USB.h from all SDKs.
</span>---
include/MacTypes.h | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++++
include/sys/cdefs.h | 27 ++++++++++++++++++++++++
2 files changed, 86 insertions(+)
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/include/MacTypes.h b/include/MacTypes.h
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 0000000..56219ae
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/include/MacTypes.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;'>+/*
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * Beginning with the macOS 15 SDK, this header expects the __has_include()
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * operator to be available. If it isn't, then this file fails to include
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * ConditionalMacros.h, causing errors. Since that's the only use of this
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * operator in this file, we just temporarily define it as an always-true
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * dummy, and then undo that after the include_next.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * Since sys/cdefs.h may supply an inappropriate fallback for __has_include(),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * we need to use the flag set up by our version to determine the proper
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * behavior.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * To avoid accidentally and possibly inappropriately applying this workaround
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * to a future SDK, we limit it with a both-ways SDK version check. This
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * should be updated as needed when new SDKs are added.
</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;'>+/* Determine the true __has_include() status (if not already done) */
</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;'>+/* See if __has_include() is missing or lying */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#if __MPLS_HAS_INCLUDE_STATUS <= 0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* Determine the SDK version */
</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;'>+#if __MPLS_SDK_MAJOR >= 150000 && __MPLS_SDK_MAJOR < 160000
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #undef __has_include
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #define __has_include(x) 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #define __MPLS_HAS_INCLUDE_CHANGED
</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 /* __has_include undef */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/* Include the primary system MacTypes.h */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#include_next <MacTypes.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#ifdef __MPLS_HAS_INCLUDE_CHANGED
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #undef __has_include
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #if __MPLS_HAS_INCLUDE_STATUS == 0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #define __has_include(x) 0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #undef __MPLS_HAS_INCLUDE_CHANGED
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#endif
</span><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 562f8f7..73bcb73 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;'>@@ -55,6 +55,27 @@
</span> #endif
#endif
<span style='display:block; white-space:pre;background:#e0ffe0;'>+/*
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * Work around issues with depending on __has_include().
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * The system sys/cdefs.h may provide an always-false fallback for the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * __has_include() operator. But this may cause some files to be
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * inappropriately not included. Here we set up a flag for this case,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * which can be used by other headers as needed to fix the fallback.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * The state is represented by the __MPLS_HAS_INCLUDE_STATUS macro:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * -1 undef->undef Remained undef
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * 0 undef->def Defined false by sys/cdefs.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * 1 def->def Provided by compiler
</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 capture the initial defined state. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#ifndef __has_include
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __MPLS_HAS_INCLUDE_STATUS -1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __MPLS_HAS_INCLUDE_STATUS 1
</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,
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -66,6 +87,12 @@
</span> /* Include the primary system sys/cdefs.h */
#include_next <sys/cdefs.h>
<span style='display:block; white-space:pre;background:#e0ffe0;'>+/* Now update the __has_include() status if needed. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#if __MPLS_HAS_INCLUDE_STATUS < 0 && defined(__has_include)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#undef __MPLS_HAS_INCLUDE_STATUS
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#define __MPLS_HAS_INCLUDE_STATUS 0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> /* The following is copied from the 10.7 SDK, but with additional #ifndefs */
/*
</pre><pre style='margin:0'>
</pre>