<pre style='margin:0'>
Chris Jones (cjones051073) pushed a commit to branch master
in repository macports-ports.

</pre>
<p><a href="https://github.com/macports/macports-ports/commit/bbf85dd3eaea3dd7927c8314247a1b353ed0345e">https://github.com/macports/macports-ports/commit/bbf85dd3eaea3dd7927c8314247a1b353ed0345e</a></p>
<pre style="white-space: pre; background: #F8F8F8">The following commit(s) were added to refs/heads/master by this push:
<span style='display:block; white-space:pre;color:#404040;'>     new bbf85dd3eae LLVM 15: Revert use of pthread/qos.h on macOS10.9 and older
</span>bbf85dd3eae is described below

<span style='display:block; white-space:pre;color:#808000;'>commit bbf85dd3eaea3dd7927c8314247a1b353ed0345e
</span>Author: Chris Jones <jonesc@macports.org>
AuthorDate: Sat Sep 24 16:51:57 2022 +0100

<span style='display:block; white-space:pre;color:#404040;'>    LLVM 15: Revert use of pthread/qos.h on macOS10.9 and older
</span>---
 lang/llvm-15/Portfile                           |  16 ++-
 lang/llvm-15/files/0110-Avoid-Pthread-QOS.patch | 136 ++++++++++++++++++++++++
 2 files changed, 147 insertions(+), 5 deletions(-)

<span style='display:block; white-space:pre;color:#808080;'>diff --git a/lang/llvm-15/Portfile b/lang/llvm-15/Portfile
</span><span style='display:block; white-space:pre;color:#808080;'>index bca3e0ab9cb..e95917b4e36 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/lang/llvm-15/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/lang/llvm-15/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -165,6 +165,15 @@ if {${os.platform} eq "darwin" && ${os.major} < 16} {
</span>     patchfiles-append  0031-Avoid-Use-Of-Clonefile.patch
 }
 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+if {${os.platform} eq "darwin" && ${os.major} < 14} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # Revert use of pthread/qos.h that is only available on macOS10.10 and newer
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # https://trac.macports.org/ticket/65626#comment:5
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # Created by reverting the commit
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # https://github.com/llvm/llvm-project/commit/9902a0945d22cd5757b16ebe85fe07059723aa09
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # > git revert 9902a0945d22cd5757b16ebe85fe07059723aa09
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    patchfiles-append  0110-Avoid-Pthread-QOS.patch
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> post-patch {
     reinplace "s|@@PREFIX@@|${prefix}|" \
         ${patch.dir}/clang/lib/Driver/ToolChains/Clang.cpp \
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -284,11 +293,8 @@ if { ${subport} eq "flang-${llvm_version}" } {
</span>     }
 }
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-# Currently does not build on mac OS10.9 (Darwin 13) and older, due to issues
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# relating to lack of <pthread/qos.h>. For more details, and a possible future fix see
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# https://trac.macports.org/ticket/65626
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Until then, restrict to 10.10 and newer.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if {${os.platform} eq "darwin" && ${os.major} < 14} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Restrict to 10.6 and newer
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+if {${os.platform} eq "darwin" && ${os.major} < 10} {
</span>     depends_build
     depends_lib
     depends_run
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/lang/llvm-15/files/0110-Avoid-Pthread-QOS.patch b/lang/llvm-15/files/0110-Avoid-Pthread-QOS.patch
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..bc7613e4fc0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/lang/llvm-15/files/0110-Avoid-Pthread-QOS.patch
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,136 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/clang-tools-extra/clangd/index/Background.h b/clang-tools-extra/clangd/index/Background.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 688c09814cd2..29869f38a43e 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/clang-tools-extra/clangd/index/Background.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/clang-tools-extra/clangd/index/Background.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -72,7 +72,7 @@ public:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     explicit Task(std::function<void()> Run) : Run(std::move(Run)) {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     std::function<void()> Run;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    llvm::ThreadPriority ThreadPri = llvm::ThreadPriority::Low;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    llvm::ThreadPriority ThreadPri = llvm::ThreadPriority::Background;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     unsigned QueuePri = 0; // Higher-priority tasks will run first.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     std::string Tag;       // Allows priority to be boosted later.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     uint64_t Key = 0;      // If the key matches a previous task, drop this one.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/clang/tools/libclang/CIndex.cpp b/clang/tools/libclang/CIndex.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 9356dd4a2377..19d0d950fa9e 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/clang/tools/libclang/CIndex.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/clang/tools/libclang/CIndex.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -9229,9 +9229,7 @@ void clang::setThreadBackgroundPriority() {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     return;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #if LLVM_ENABLE_THREADS
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  // The function name setThreadBackgroundPriority is for historical reasons;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  // Low is more appropriate.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  llvm::set_thread_priority(llvm::ThreadPriority::Low);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  llvm::set_thread_priority(llvm::ThreadPriority::Background);
</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;'>+diff --git a/llvm/include/llvm/Support/Threading.h b/llvm/include/llvm/Support/Threading.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 1e7e5f7b8f50..b158a57a1a21 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/llvm/include/llvm/Support/Threading.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/llvm/include/llvm/Support/Threading.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -233,20 +233,16 @@ bool llvm_is_multithreaded();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   unsigned get_cpus();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   enum class ThreadPriority {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    /// Lower the current thread's priority as much as possible. Can be used
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    /// for long-running tasks that are not time critical; more energy-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    /// efficient than Low.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     Background = 0,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    Low        = 0,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    /// Lower the current thread's priority such that it does not affect
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    /// foreground tasks significantly. This is a good default for long-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    /// running, latency-insensitive tasks to make sure cpu is not hogged
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    /// by this task.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    Low = 1,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    /// Restore the current thread's priority to default scheduling priority.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    Default = 2,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    Default = 1,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   };
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  /// If priority is Background tries to lower current threads priority such
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  /// that it does not affect foreground tasks significantly. Can be used for
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  /// long-running, latency-insensitive tasks to make sure cpu is not hogged by
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  /// this task.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  /// If the priority is default tries to restore current threads priority to
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  /// default scheduling priority.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   enum class SetThreadPriorityResult { FAILURE, SUCCESS };
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   SetThreadPriorityResult set_thread_priority(ThreadPriority Priority);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/llvm/lib/Support/Unix/Threading.inc b/llvm/lib/Support/Unix/Threading.inc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 99f64b4f553d..5de1cf071ba9 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/llvm/lib/Support/Unix/Threading.inc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/llvm/lib/Support/Unix/Threading.inc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -18,7 +18,6 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #if defined(__APPLE__)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include <mach/mach_init.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include <mach/mach_port.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#include <pthread/qos.h>
</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;'>+ #include <pthread.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -261,29 +260,27 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   // SCHED_OTHER   the standard round-robin time-sharing policy;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   return !pthread_setschedparam(
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+              pthread_self(),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-             // FIXME: consider SCHED_BATCH for Low
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-             Priority == ThreadPriority::Default ? SCHED_OTHER : SCHED_IDLE,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++             Priority == ThreadPriority::Background ? SCHED_IDLE : SCHED_OTHER,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+              &priority)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+              ? SetThreadPriorityResult::SUCCESS
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+              : SetThreadPriorityResult::FAILURE;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #elif defined(__APPLE__) && defined(PRIO_DARWIN_THREAD) && defined(PRIO_DARWIN_BG)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  // https://developer.apple.com/documentation/apple-silicon/tuning-your-code-s-performance-for-apple-silicon
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  //
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  // Background - Applies to work that isn’t visible to the user and may take significant
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  // time to complete. Examples include indexing, backing up, or synchronizing data. This
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  // class emphasizes energy efficiency.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  //
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  // Utility - Applies to work that takes anywhere from a few seconds to a few minutes to
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  // complete. Examples include downloading a document or importing data. This class
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  // offers a balance between responsiveness, performance, and energy efficiency.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  const auto qosClass = [&](){
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    switch (Priority) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-      case ThreadPriority::Background: return QOS_CLASS_BACKGROUND;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-      case ThreadPriority::Low: return QOS_CLASS_UTILITY;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-      case ThreadPriority::Default: return QOS_CLASS_DEFAULT;
</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;'>+-  return !pthread_set_qos_class_self_np(qosClass, 0)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  // https://developer.apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man2/getpriority.2.html
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  // When setting a thread into background state the scheduling priority is set
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  // to lowest value, disk and network IO are throttled. Network IO will be
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  // throttled for any sockets the thread opens after going into background
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  // state. Any previously opened sockets are not affected.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  // https://developer.apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man3/getiopolicy_np.3.html
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  // I/Os with THROTTLE policy are called THROTTLE I/Os. If a THROTTLE I/O
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  // request occurs within a small time window (usually a fraction of a second)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  // of another NORMAL I/O request, the thread that issues the THROTTLE I/O is
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  // forced to sleep for a certain interval. This slows down the thread that
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  // issues the THROTTLE I/O so that NORMAL I/Os can utilize most of the disk
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  // I/O bandwidth.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  return !setpriority(PRIO_DARWIN_THREAD, 0,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                      Priority == ThreadPriority::Background ? PRIO_DARWIN_BG
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                                                             : 0)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+              ? SetThreadPriorityResult::SUCCESS
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+              : SetThreadPriorityResult::FAILURE;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/llvm/lib/Support/Windows/Threading.inc b/llvm/lib/Support/Windows/Threading.inc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 11f34817dbbf..78047ab8bbbd 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/llvm/lib/Support/Windows/Threading.inc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/llvm/lib/Support/Windows/Threading.inc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -120,10 +120,8 @@ SetThreadPriorityResult llvm::set_thread_priority(ThreadPriority Priority) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   // End background processing mode. The system restores the resource scheduling
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   // priorities of the thread as they were before the thread entered background
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   // processing mode.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  //
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  // FIXME: consider THREAD_PRIORITY_BELOW_NORMAL for Low
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   return SetThreadPriority(GetCurrentThread(),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                           Priority != ThreadPriority::Default
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                           Priority == ThreadPriority::Background
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                ? THREAD_MODE_BACKGROUND_BEGIN
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                : THREAD_MODE_BACKGROUND_END)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+              ? SetThreadPriorityResult::SUCCESS
</span></pre><pre style='margin:0'>

</pre>