<pre style='margin:0'>
Joshua Root (jmroot) pushed a commit to branch master
in repository macports-base.

</pre>
<p><a href="https://github.com/macports/macports-base/commit/3768efd19e65d98d1df70fb5af6416b97bb4d4ee">https://github.com/macports/macports-base/commit/3768efd19e65d98d1df70fb5af6416b97bb4d4ee</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 3768efd  improve configure_get_sdkroot performance
</span>3768efd is described below

<span style='display:block; white-space:pre;color:#808000;'>commit 3768efd19e65d98d1df70fb5af6416b97bb4d4ee
</span>Author: Joshua Root <jmr@macports.org>
AuthorDate: Mon Sep 30 03:38:08 2019 +1000

<span style='display:block; white-space:pre;color:#404040;'>    improve configure_get_sdkroot performance
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    When xcrun fails to find an SDK, it takes over a second to do so. That
</span><span style='display:block; white-space:pre;color:#404040;'>    really adds up when configure.sdkroot is evaluated so many times. So
</span><span style='display:block; white-space:pre;color:#404040;'>    cache the xcrun results, both positive and negative.
</span>---
 src/port1.0/portconfigure.tcl | 39 +++++++++++++++++++++++++++++++++++----
 1 file changed, 35 insertions(+), 4 deletions(-)

<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/port1.0/portconfigure.tcl b/src/port1.0/portconfigure.tcl
</span><span style='display:block; white-space:pre;color:#808080;'>index 908b2da..748d040 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/port1.0/portconfigure.tcl
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/port1.0/portconfigure.tcl
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -479,16 +479,35 @@ proc portconfigure::configure_get_sdkroot {sdk_version} {
</span>         if {[file exists $sdk]} {
             return $sdk
         }
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        if {![catch {exec env DEVELOPER_DIR=${cltpath} xcrun --sdk macosx${sdk_version} --show-sdk-path 2> /dev/null} sdk]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if {[info exists ::portconfigure::sdkroot_cache(macosx${sdk_version})]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            if {$::portconfigure::sdkroot_cache(macosx${sdk_version}) ne ""} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                return $::portconfigure::sdkroot_cache(macosx${sdk_version})
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            # negative result cached, do nothing here
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        } elseif {![catch {exec env DEVELOPER_DIR=${cltpath} xcrun --sdk macosx${sdk_version} --show-sdk-path 2> /dev/null} sdk]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            set ::portconfigure::sdkroot_cache(macosx${sdk_version}) $sdk
</span>             return $sdk
<span style='display:block; white-space:pre;background:#e0ffe0;'>+        } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            set ::portconfigure::sdkroot_cache(macosx${sdk_version}) ""
</span>         }
<span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span>         # Fallback on "macosx"
         set sdk ${cltpath}/SDKs/MacOSX.sdk
         if {[file exists $sdk]} {
             return $sdk
         }
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        if {![catch {exec env DEVELOPER_DIR=${cltpath} xcrun --sdk macosx --show-sdk-path 2> /dev/null} sdk]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if {[info exists ::portconfigure::sdkroot_cache(macosx)]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            if {$::portconfigure::sdkroot_cache(macosx) ne ""} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                return $::portconfigure::sdkroot_cache(macosx)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            # negative result cached, do nothing here
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        } elseif {![catch {exec env DEVELOPER_DIR=${cltpath} xcrun --sdk macosx --show-sdk-path 2> /dev/null} sdk]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            set ::portconfigure::sdkroot_cache(macosx) $sdk
</span>             return $sdk
<span style='display:block; white-space:pre;background:#e0ffe0;'>+        } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            set ::portconfigure::sdkroot_cache(macosx) ""
</span>         }
     }
 
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -508,8 +527,16 @@ proc portconfigure::configure_get_sdkroot {sdk_version} {
</span>         return $sdk
     }
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    if {![catch {exec xcrun --sdk macosx${sdk_version} --show-sdk-path 2> /dev/null} sdk]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[info exists ::portconfigure::sdkroot_cache(macosx${sdk_version},noclt)]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if {$::portconfigure::sdkroot_cache(macosx${sdk_version},noclt) ne ""} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            return $::portconfigure::sdkroot_cache(macosx${sdk_version},noclt)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        # negative result cached, do nothing here
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    } elseif {![catch {exec xcrun --sdk macosx${sdk_version} --show-sdk-path 2> /dev/null} sdk]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set ::portconfigure::sdkroot_cache(macosx${sdk_version},noclt) $sdk
</span>         return $sdk
<span style='display:block; white-space:pre;background:#e0ffe0;'>+    } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set ::portconfigure::sdkroot_cache(macosx${sdk_version},noclt) ""
</span>     }
 
     set sdk ${cltpath}/SDKs/MacOSX${sdk_version}.sdk
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -530,7 +557,11 @@ proc portconfigure::configure_get_sdkroot {sdk_version} {
</span>     # to run on 10.x but only include an SDK for 10.x+1. Combined with the disappearance of
     # /usr/include, that means not having this fallback would cause great breakage.
     # See <https://trac.macports.org/ticket/57143>
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    if {![catch {exec xcrun --sdk macosx --show-sdk-path 2> /dev/null} sdk]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[info exists ::portconfigure::sdkroot_cache(macosx,noclt)]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        # no negative-cached case here because that would mean overall failure
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        return $::portconfigure::sdkroot_cache(macosx,noclt)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    } elseif {![catch {exec xcrun --sdk macosx --show-sdk-path 2> /dev/null} sdk]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set ::portconfigure::sdkroot_cache(macosx,noclt) $sdk
</span>         return $sdk
     }
 
</pre><pre style='margin:0'>

</pre>