<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/1c8f1539e792b9680446a2062a82153dcc1a95f2">https://github.com/macports/macports-base/commit/1c8f1539e792b9680446a2062a82153dcc1a95f2</a></p>
<pre style="white-space: pre; background: #F8F8F8"><span style='display:block; white-space:pre;color:#808000;'>commit 1c8f1539e792b9680446a2062a82153dcc1a95f2
</span>Author: Joshua Root <jmr@macports.org>
AuthorDate: Fri Feb 23 16:13:44 2024 +1100
<span style='display:block; white-space:pre;color:#404040;'> Cache compiler versions persistently
</span><span style='display:block; white-space:pre;color:#404040;'>
</span><span style='display:block; white-space:pre;color:#404040;'> Also cache per developer_dir, since Xcode and CLTs may be different
</span><span style='display:block; white-space:pre;color:#404040;'> versions.
</span>---
src/macports1.0/macports.tcl | 71 ++++++++++++++++++++++++++++++++++---------
src/port1.0/portconfigure.tcl | 3 +-
2 files changed, 58 insertions(+), 16 deletions(-)
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/macports1.0/macports.tcl b/src/macports1.0/macports.tcl
</span><span style='display:block; white-space:pre;color:#808080;'>index 998a1dc09..8978ef6cc 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/macports1.0/macports.tcl
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/macports1.0/macports.tcl
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1622,17 +1622,31 @@ match macports.conf.default."
</span>
# call this just before you exit
proc mportshutdown {} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- # save ping times
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if {[file writable $::macports::portdbpath]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- catch {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ global macports::portdbpath
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # save cached values
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[file writable $portdbpath]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ global macports::ping_cache macports::compiler_version_cache
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[catch {
</span> # don't save expired entries
set now [clock seconds]
<span style='display:block; white-space:pre;background:#ffe0e0;'>- set pinglist_fresh [dict filter $::macports::ping_cache script {host entry} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set pinglist_fresh [dict filter $ping_cache script {host entry} {
</span> expr {$now - [lindex $entry 1] < 86400}
}]
<span style='display:block; white-space:pre;background:#ffe0e0;'>- set pingfile [open ${::macports::portdbpath}/pingtimes w]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set pingfile [open ${portdbpath}/pingtimes w]
</span> puts $pingfile $pinglist_fresh
close $pingfile
<span style='display:block; white-space:pre;background:#e0ffe0;'>+ } result]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ui_debug "Error writing ${portdbpath}/pingtimes: $result"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[info exists compiler_version_cache]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[catch {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ file mkdir ${portdbpath}/cache
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set versfile [open ${portdbpath}/cache/compiler_versions w]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ puts $versfile $compiler_version_cache
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ close $versfile
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } result]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ui_debug "Error writing ${portdbpath}/cache/compiler_versions: $result"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span> }
}
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -5966,20 +5980,47 @@ proc macports::set_pingtime {host ms} {
</span> dict set ::macports::ping_cache $host [list $ms [clock seconds]]
}
<span style='display:block; white-space:pre;background:#ffe0e0;'>-# get the version of a compiler (memoized)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-proc macports::get_compiler_version {compiler} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- global macports::compiler_version_cache
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# get the version of a compiler (cached)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc macports::get_compiler_version {compiler developer_dir} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ variable compiler_version_cache
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {![info exists compiler_version_cache]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ variable xcodeversion; variable xcodecltversion; variable portdbpath
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ macports_try -pass_signal {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set versfile -1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set versfile [open ${portdbpath}/cache/compiler_versions r]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set compiler_version_cache [dict create {*}[gets $versfile]]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } on error {errorInfo} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set compiler_version_cache [dict create]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ui_debug "Error loading ${portdbpath}/cache/compiler_versions: $errorInfo"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } finally {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {$versfile != -1} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ close $versfile
</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;'>+ # Invalidate if Xcode or CLT version changed
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {([dict exists $compiler_version_cache xcodeversion]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ && $xcodeversion ne [dict get $compiler_version_cache xcodeversion])
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ || ([dict exists $compiler_version_cache xcodecltversion]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ && $xcodecltversion ne [dict get $compiler_version_cache xcodecltversion])} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set compiler_version_cache [dict create]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[dict size $compiler_version_cache] == 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ dict set compiler_version_cache xcodeversion $xcodeversion
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ dict set compiler_version_cache xcodecltversion $xcodecltversion
</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:#ffe0e0;'>- if {[info exists compiler_version_cache($compiler)]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- return $compiler_version_cache($compiler)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[dict exists $compiler_version_cache versions $developer_dir $compiler]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return [dict get $compiler_version_cache versions $developer_dir $compiler]
</span> }
if {![file executable ${compiler}]} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- set compiler_version_cache($compiler) ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ dict set compiler_version_cache versions $developer_dir $compiler ""
</span> return ""
}
<span style='display:block; white-space:pre;background:#ffe0e0;'>- switch [file tail ${compiler}] {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ switch -- [file tail ${compiler}] {
</span> clang {
set re {clang(?:_.*)?-([0-9.]+)}
}
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -5995,14 +6036,14 @@ proc macports::get_compiler_version {compiler} {
</span> }
}
<span style='display:block; white-space:pre;background:#ffe0e0;'>- if {[catch {regexp ${re} [exec ${compiler} -v 2>@1] -> compiler_version}]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set compiler_version_cache($compiler) ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[catch {regexp ${re} [exec /usr/bin/env DEVELOPER_DIR=${developer_dir} ${compiler} -v 2>@1] -> compiler_version}]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ dict set compiler_version_cache versions $developer_dir $compiler ""
</span> return ""
}
if {![info exists compiler_version]} {
return -code error "couldn't determine build number of compiler \"${compiler}\""
}
<span style='display:block; white-space:pre;background:#ffe0e0;'>- set compiler_version_cache($compiler) $compiler_version
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ dict set compiler_version_cache versions $developer_dir $compiler $compiler_version
</span> return $compiler_version
}
<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 3f1e4d011..a1d27c5a0 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;'>@@ -1301,8 +1301,9 @@ proc portconfigure::get_mpi_wrapper {mpi compiler} {
</span> }
# utility procedure: get system compiler version by running it
proc compiler.command_line_tools_version {compiler} {
<span style='display:block; white-space:pre;background:#e0ffe0;'>+ global configure.developer_dir
</span> set cc [portconfigure::configure_get_compiler cc ${compiler}]
<span style='display:block; white-space:pre;background:#ffe0e0;'>- return [get_compiler_version ${cc}]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return [get_compiler_version ${cc} ${configure.developer_dir}]
</span> }
# internal function to choose compiler fallback list based on platform
proc portconfigure::get_compiler_fallback {} {
</pre><pre style='margin:0'>
</pre>