<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/338f08b69498d01ffd55731c230d374efff1393e">https://github.com/macports/macports-base/commit/338f08b69498d01ffd55731c230d374efff1393e</a></p>
<pre style="white-space: pre; background: #F8F8F8"><span style='display:block; white-space:pre;color:#808000;'>commit 338f08b69498d01ffd55731c230d374efff1393e
</span>Author: Joshua Root <jmr@macports.org>
AuthorDate: Tue Dec 12 22:55:21 2023 +1100

<span style='display:block; white-space:pre;color:#404040;'>    Cache result of Xcode license acceptance check
</span>---
 src/macports1.0/macports.tcl             | 41 +++++++++++++++++++++++++++++---
 src/macports1.0/macports_autoconf.tcl.in |  1 +
 src/port1.0/portutil.tcl                 |  7 ++----
 3 files changed, 41 insertions(+), 8 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 2b6e25b3a..bd8f38a73 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;'>@@ -50,7 +50,7 @@ namespace eval macports {
</span>         portarchivetype hfscompression portautoclean \
         porttrace portverbose keeplogs destroot_umask variants_conf rsync_server rsync_options \
         rsync_dir startupitem_autostart startupitem_type startupitem_install \
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        place_worksymlink xcodeversion xcodebuildcmd xcodecltversion \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        place_worksymlink xcodeversion xcodebuildcmd xcodecltversion xcode_license_unaccepted \
</span>         configureccache ccache_dir ccache_size configuredistcc configurepipe buildnicevalue buildmakejobs \
         applications_dir frameworks_dir developer_dir universal_archs build_arch macosx_sdk_version macosx_deployment_target \
         macportsuser proxy_override_env proxy_http proxy_https proxy_ftp proxy_rsync proxy_skip \
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -75,7 +75,7 @@ namespace eval macports {
</span>     # deferred options are only computed when needed.
     # they are not exported to the trace thread.
     # they are not exported to the interpreter in system_options array.
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    variable portinterp_deferred_options "developer_dir xcodeversion xcodebuildcmd xcodecltversion"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    variable portinterp_deferred_options "developer_dir xcodeversion xcodebuildcmd xcodecltversion xcode_license_unaccepted"
</span> 
     variable open_mports {}
 
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -548,6 +548,10 @@ proc macports::set_developer_dir {name1 name2 op} {
</span> 
     trace remove variable macports::developer_dir read macports::set_developer_dir
 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[info exists developer_dir]} {
</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;'>+
</span>     # Look for xcodeselect, and make sure it has a valid value
     macports_try -pass_signal {
         set xcodeselect [findBinary xcode-select $macports::autoconf::xcode_select_path]
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -655,6 +659,10 @@ proc macports::set_xcodecltversion {name1 name2 op} {
</span> 
     trace remove variable macports::xcodecltversion read macports::set_xcodecltversion
 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[info exists xcodecltversion]} {
</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;'>+
</span>     # Potential names for the CLTs pkg on different OS versions.
     set pkgnames [list CLTools_Executables CLTools_Base DeveloperToolsCLI DeveloperToolsCLILeo]
 
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -685,6 +693,25 @@ proc macports::set_xcodecltversion {name1 name2 op} {
</span>     set macports::xcodecltversion none
 }
 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+proc macports::set_xcode_license_unaccepted {name1 name2 op} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    global macports::xcode_license_unaccepted
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    trace remove variable macports::xcode_license_unaccepted read macports::set_xcode_license_unaccepted
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[info exists xcode_license_unaccepted]} {
</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;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    catch {exec [findBinary xcrun $macports::autoconf::xcrun_path] clang 2>@1} output
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set output [join [lrange [split $output "\n"] 0 end-1] "\n"]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[string match -nocase "*license*" $output]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set macports::xcode_license_unaccepted yes
</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;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set macports::xcode_license_unaccepted no
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> 
 proc mportinit {{up_ui_options {}} {up_options {}} {up_variations {}}} {
     # Disable unknown(n)'s behavior of running unknown commands in the system
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -737,6 +764,7 @@ proc mportinit {{up_ui_options {}} {up_options {}} {up_variations {}}} {
</span>         macports::xcodebuildcmd \
         macports::xcodeversion \
         macports::xcodecltversion \
<span style='display:block; white-space:pre;background:#e0ffe0;'>+        macports::xcode_license_unaccepted \
</span>         macports::configureccache \
         macports::ccache_dir \
         macports::ccache_size \
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1370,6 +1398,13 @@ match macports.conf.default."
</span>             set macports::xcodecltversion {}
         }
     }
<span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {![info exists xcode_license_unaccepted]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if {$os_platform eq "darwin"} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            trace add variable macports::xcode_license_unaccepted read macports::set_xcode_license_unaccepted
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            set macports::xcode_license_unaccepted no
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span> 
     if {![info exists developer_dir]} {
         if {$os_platform eq "darwin"} {
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -5996,7 +6031,7 @@ proc macports::get_tool_path {tool} {
</span>     set toolpath "/usr/bin/${tool}"
     if {![file executable $toolpath]} {
         # Use xcode's xcrun to find the named tool.
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        if {[catch {exec -ignorestderr [findBinary xcrun $portutil::autoconf::xcrun_path] -find ${tool} 2> /dev/null} toolpath]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if {[catch {exec -ignorestderr [findBinary xcrun $macports::autoconf::xcrun_path] -find ${tool} 2> /dev/null} toolpath]} {
</span>             set toolpath ""
         }
     }
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/macports1.0/macports_autoconf.tcl.in b/src/macports1.0/macports_autoconf.tcl.in
</span><span style='display:block; white-space:pre;color:#808080;'>index 0b7167381..f3c349d49 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/macports1.0/macports_autoconf.tcl.in
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/macports1.0/macports_autoconf.tcl.in
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -54,6 +54,7 @@ namespace eval macports::autoconf {
</span>     variable xar_path "@XAR@"
     variable xcode_select_path "@XCODE_SELECT@"
     variable xcodebuild_path "@XCODEBUILD@"
<span style='display:block; white-space:pre;background:#e0ffe0;'>+    variable xcrun_path "@XCRUN@"
</span>     variable os_platform "@OS_PLATFORM@"
     variable os_major "@OS_MAJOR@"
 }
<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 577b21971..bb1dc93a7 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;'>@@ -3397,7 +3397,7 @@ proc check_supported_archs {} {
</span> # check if the installed xcode version is new enough
 proc _check_xcode_version {} {
     global os.subplatform os.major macos_version_major xcodeversion \
<span style='display:block; white-space:pre;background:#ffe0e0;'>-           xcodecltversion use_xcode subport
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+           xcodecltversion use_xcode xcode_license_unaccepted subport
</span> 
     if {${os.subplatform} eq "macosx"} {
         switch $macos_version_major {
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -3561,10 +3561,7 @@ proc _check_xcode_version {} {
</span>                 return 1
             }
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-            # Check whether users have agreed to the Xcode license agreement
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            catch {exec [findBinary xcrun $portutil::autoconf::xcrun_path] clang 2>@1} output
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            set output [join [lrange [split $output "\n"] 0 end-1] "\n"]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            if {[string match -nocase "*license*" $output]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            if {$xcode_license_unaccepted} {
</span>                 ui_error "It seems you have not accepted the Xcode license; most ports will fail to build."
                 ui_error "Agree to the license by opening Xcode or running `sudo xcodebuild -license'."
                 return 1
</pre><pre style='margin:0'>

</pre>