<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/5deaa7c26dc95e6b5bee8911d52a8842e9a53d24">https://github.com/macports/macports-base/commit/5deaa7c26dc95e6b5bee8911d52a8842e9a53d24</a></p>
<pre style="white-space: pre; background: #F8F8F8"><span style='display:block; white-space:pre;color:#808000;'>commit 5deaa7c26dc95e6b5bee8911d52a8842e9a53d24
</span>Author: Joshua Root <jmr@macports.org>
AuthorDate: Mon Jul 15 16:22:39 2024 +1000
<span style='display:block; white-space:pre;color:#404040;'> migrate: check Xcode/CLT version
</span><span style='display:block; white-space:pre;color:#404040;'>
</span><span style='display:block; white-space:pre;color:#404040;'> Move list of compatible Xcode versions to macports1.0 so it can be
</span><span style='display:block; white-space:pre;color:#404040;'> reused here.
</span>---
src/macports1.0/macports.tcl | 104 +++++++++++++++++++++++++++++++++++++++++++
src/macports1.0/migrate.tcl | 44 ++++++++++++++++++
src/port1.0/portutil.tcl | 88 +-----------------------------------
3 files changed, 149 insertions(+), 87 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 4ee35b880..073b420c7 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;'>@@ -2017,6 +2017,8 @@ proc macports::worker_init {workername portpath porturl portbuildpath options va
</span> # tool path cache
$workername alias get_tool_path macports::get_tool_path
<span style='display:block; white-space:pre;background:#e0ffe0;'>+ $workername alias get_compatible_xcode_versions macports::get_compatible_xcode_versions
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> foreach opt $portinterp_options {
if {![info exists $opt]} {
variable $opt
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -6550,3 +6552,105 @@ proc macports::get_parallel_jobs {{mem_restrict yes}} {
</span> }
return $jobs
}
<span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Returns list of Xcode versions for the current macOS version:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# [min, ok, rec]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# min = lowest version that will work at all
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# ok = lowest version without any serious known issues
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# rec = recommended version, usually the latest known
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc macports::get_compatible_xcode_versions {} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ variable macos_version_major
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ switch $macos_version_major {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 10.4 {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set min 2.0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set ok 2.4.1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set rec 2.5
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 10.5 {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set min 3.0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set ok 3.1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set rec 3.1.4
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 10.6 {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set min 3.2
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set ok 3.2
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set rec 3.2.6
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 10.7 {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set min 4.1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set ok 4.1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set rec 4.6.3
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 10.8 {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set min 4.4
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set ok 4.4
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set rec 5.1.1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 10.9 {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set min 5.0.1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set ok 5.0.1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set rec 6.2
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 10.10 {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set min 6.1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set ok 6.1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set rec 7.2.1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 10.11 {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set min 7.0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set ok 7.0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set rec 8.2.1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 10.12 {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set min 8.0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set ok 8.0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set rec 9.2
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 10.13 {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set min 9.0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set ok 9.0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set rec 9.4.1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 10.14 {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set min 10.0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set ok 10.0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set rec 10.3
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 10.15 {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set min 11.0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set ok 11.3
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set rec 11.7
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 11 {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set min 12.2
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set ok 12.2
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set rec 12.5
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 12 {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set min 13.1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set ok 13.1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set rec 13.4.1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 13 {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set min 14.1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set ok 14.1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set rec 14.3.1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 14 {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set min 15.0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set ok 15.1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set rec 15.4
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 15 {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set min 16
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set ok 16
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set rec 16
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ default {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set min 16
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set ok 16
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set rec 16
</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 [list $min $ok $rec]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/macports1.0/migrate.tcl b/src/macports1.0/migrate.tcl
</span><span style='display:block; white-space:pre;color:#808080;'>index 219a238f2..7976b436b 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/macports1.0/migrate.tcl
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/macports1.0/migrate.tcl
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -45,6 +45,10 @@ namespace eval migrate {
</span> # flag set.
proc main {opts} {
<span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[check_toolchain]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> if {[needs_migration]} {
if {[info exists macports::ui_options(questions_yesno)]} {
set msg "Migration will first upgrade MacPorts and then reinstall all installed ports."
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -118,6 +122,46 @@ namespace eval migrate {
</span> return $ret
}
<span style='display:block; white-space:pre;background:#e0ffe0;'>+ # Check that Xcode and/or CLTs are usable
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ proc check_toolchain {} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ global macports::macos_version_major macports::xcodeversion \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ macports::xcodecltversion macports::os_platform
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {$os_platform ne "darwin"} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return 0
</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;'>+ lassign [macports::get_compatible_xcode_versions] min ok rec
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[vercmp $macos_version_major >= "10.9"]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {$xcodecltversion ne "none"} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[vercmp $xcodecltversion < $min]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ui_error "The installed Xcode Command Line Tools are too old."
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ui_error "Version $xcodecltversion installed; at least $min required."
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ui_error "Run Software Update or follow <https://trac.macports.org/wiki/ProblemHotlist#reinstall-clt>"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return 0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } elseif {[file exists "/Library/Developer/CommandLineTools/"]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ui_error "The Xcode Command Line Tools package appears to be installed, but its receipt appears to be missing."
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ui_error "The Command Line Tools may be outdated, which can cause problems."
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ui_error "Please see: <https://trac.macports.org/wiki/ProblemHotlist#reinstall-clt>"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return 1
</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 {$xcodeversion ne "none"} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[vercmp $xcodeversion < $min]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ui_error "The installed version of Xcode is too old."
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ui_error "Version $xcodeversion installed; at least $min required."
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ui_error "(If you have multiple versions installed, you may need to select a newer one using xcode-select.)"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return 0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ui_error "Neither Xcode nor the Command Line Tools appear to be installed."
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ui_error "See <https://guide.macports.org/#installing.xcode>"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> ##
# Open the current in-tree Portfile for each installed port,
# using the recorded requested variants, and figure out its archs.
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/port1.0/portutil.tcl b/src/port1.0/portutil.tcl
</span><span style='display:block; white-space:pre;color:#808080;'>index 32792f48d..84334afab 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/port1.0/portutil.tcl
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/port1.0/portutil.tcl
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -3316,93 +3316,7 @@ proc _check_xcode_version {} {
</span> xcodecltversion use_xcode xcode_license_unaccepted subport
if {${os.subplatform} eq "macosx"} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- switch $macos_version_major {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 10.4 {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set min 2.0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set ok 2.4.1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set rec 2.5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 10.5 {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set min 3.0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set ok 3.1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set rec 3.1.4
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 10.6 {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set min 3.2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set ok 3.2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set rec 3.2.6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 10.7 {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set min 4.1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set ok 4.1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set rec 4.6.3
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 10.8 {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set min 4.4
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set ok 4.4
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set rec 5.1.1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 10.9 {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set min 5.0.1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set ok 5.0.1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set rec 6.2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 10.10 {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set min 6.1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set ok 6.1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set rec 7.2.1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 10.11 {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set min 7.0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set ok 7.0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set rec 8.2.1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 10.12 {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set min 8.0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set ok 8.0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set rec 9.2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 10.13 {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set min 9.0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set ok 9.0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set rec 9.4.1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 10.14 {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set min 10.0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set ok 10.0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set rec 10.3
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 10.15 {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set min 11.0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set ok 11.3
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set rec 11.7
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 11 {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set min 12.2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set ok 12.2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set rec 12.5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 12 {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set min 13.1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set ok 13.1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set rec 13.4.1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 13 {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set min 14.1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set ok 14.1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set rec 14.3.1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 14 {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set min 15.0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set ok 15.1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set rec 15.1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- default {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set min 15.0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set ok 15.1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set rec 15.1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ lassign [get_compatible_xcode_versions] min ok rec
</span> if {$xcodeversion eq "none"} {
if {[file exists "/Applications/Install Xcode.app"]} {
ui_warn "You downloaded Xcode from the Mac App Store but didn't install it. Run \"Install Xcode\" in the /Applications folder."
</pre><pre style='margin:0'>
</pre>