<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/75bcfc809607bdb12e0817460b25fdec8d3085ed">https://github.com/macports/macports-base/commit/75bcfc809607bdb12e0817460b25fdec8d3085ed</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 75bcfc809 Allow accessing options using qualified names
</span>75bcfc809 is described below

<span style='display:block; white-space:pre;color:#808000;'>commit 75bcfc809607bdb12e0817460b25fdec8d3085ed
</span>Author: Joshua Root <jmr@macports.org>
AuthorDate: Sun Feb 18 03:11:15 2024 +1100

<span style='display:block; white-space:pre;color:#404040;'>    Allow accessing options using qualified names
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    Trace procs are only told the name that a variable was accessed as, not
</span><span style='display:block; white-space:pre;color:#404040;'>    the name used when adding the trace. So use 'namespace tail' to remove
</span><span style='display:block; white-space:pre;color:#404040;'>    any qualifiers before looking up the option name in option_procs or
</span><span style='display:block; white-space:pre;color:#404040;'>    option_defaults.
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    It will still cause an error to access a traced option via a different
</span><span style='display:block; white-space:pre;color:#404040;'>    name entirely (e.g. with upvar).
</span>---
 src/port1.0/portutil.tcl | 124 +++++++++++++++++++----------------------------
 1 file changed, 51 insertions(+), 73 deletions(-)

<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 75c79004b..1ce3ae070 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;'>@@ -59,12 +59,11 @@ proc option {option args} {
</span>     # XXX: right now we just transparently use globals
     # eventually this will need to bridge the options between
     # the Portfile's interpreter and the target's interpreters.
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    global $option
</span>     if {[llength $args] > 0} {
         ui_debug "setting option $option to $args"
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        set $option [lindex $args 0]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set ::$option [lindex $args 0]
</span>     }
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    return [set $option]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    return [set ::$option]
</span> }
 
 # exists
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -76,8 +75,7 @@ proc exists {option} {
</span>     # XXX: right now we just transparently use globals
     # eventually this will need to bridge the options between
     # the Portfile's interpreter and the target's interpreters.
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    global $option
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return [info exists $option]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    return [info exists ::$option]
</span> }
 
 ##
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -86,10 +84,8 @@ proc exists {option} {
</span> # @param option name of the option
 # @param args arguments
 proc handle_option {option args} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    global $option
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span>     if {![info exists ::user_options($option)]} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        set $option $args
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set ::$option $args
</span>     }
 }
 
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -99,10 +95,8 @@ proc handle_option {option args} {
</span> # @param option name of the option
 # @param args arguments
 proc handle_option-append {option args} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    global $option
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span>     if {![info exists ::user_options($option)]} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        lappend $option {*}$args
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        lappend ::$option {*}$args
</span>     }
 }
 
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -112,13 +106,11 @@ proc handle_option-append {option args} {
</span> # @param option name of the option
 # @param args arguments
 proc handle_option-prepend {option args} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    global $option
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span>     if {![info exists ::user_options($option)]} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        if {[info exists $option]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            set $option [concat $args [set $option]]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if {[info exists ::$option]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            set ::$option [concat $args [set ::$option]]
</span>         } else {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-            set $option $args
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            set ::$option $args
</span>         }
     }
 }
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -129,11 +121,9 @@ proc handle_option-prepend {option args} {
</span> # @param option name of the option
 # @param args arguments
 proc handle_option-delete {option args} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    global $option
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if {![info exists ::user_options($option)] && [info exists $option]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {![info exists ::user_options($option)] && [info exists ::$option]} {
</span>         foreach val $args {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-            set $option [ldelete [set $option][set $option {}] $val]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            set ::$option [ldelete [set ::$option][set ::$option {}] $val]
</span>         }
     }
 }
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -144,11 +134,9 @@ proc handle_option-delete {option args} {
</span> # @param option name of the option
 # @param args arguments
 proc handle_option-strsed {option args} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    global $option
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if {![info exists ::user_options($option)] && [info exists $option]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {![info exists ::user_options($option)] && [info exists ::$option]} {
</span>         foreach val $args {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-            set $option [strsed [set $option][set $option {}] $val]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            set ::$option [strsed [set ::$option][set ::$option {}] $val]
</span>         }
     }
 }
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -159,13 +147,11 @@ proc handle_option-strsed {option args} {
</span> # @param option name of the option
 # @param args arguments
 proc handle_option-replace {option args} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    global $option
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if {![info exists ::user_options($option)] && [info exists $option]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {![info exists ::user_options($option)] && [info exists ::$option]} {
</span>         foreach {old new} $args {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-            set index [lsearch -exact [set $option] $old]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            set index [lsearch -exact [set ::$option] $old]
</span>             if {$index != -1} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-                lset $option $index $new
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                lset ::$option $index $new
</span>             }
         }
     }
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -196,13 +182,12 @@ proc options {args} {
</span> # @param action set or delete
 # @param value the value to be set, defaults to an empty string
 proc options::export {option action {value ""}} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    global $option PortInfo
</span>     switch $action {
         set {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-            set PortInfo($option) $value
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            set ::PortInfo($option) $value
</span>         }
         delete {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-            unset -nocomplain PortInfo($option)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            unset -nocomplain ::PortInfo($option)
</span>         }
     }
 }
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -224,23 +209,21 @@ proc options_export {args} {
</span> # @param action read/set
 # @param value ignored
 proc handle_deprecated_option {option action {value ""}} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    global subport $option deprecated_options
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set newoption [lindex $deprecated_options($option) 0]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set refcount  [lindex $deprecated_options($option) 1]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    global $newoption
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set newoption [lindex $::deprecated_options($option) 0]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set refcount  [lindex $::deprecated_options($option) 1]
</span> 
     if {$newoption eq ""} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        ui_warn "Port $subport using deprecated option \"$option\"."
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ui_warn "Port $::subport using deprecated option \"$option\"."
</span>         return
     }
 
     # Increment reference counter
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    lset deprecated_options($option) 1 [expr {$refcount + 1}]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    lset ::deprecated_options($option) 1 [expr {$refcount + 1}]
</span> 
     if {$action ne "read"} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        $newoption [set $option]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        $newoption [set ::$option]
</span>     } else {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        $option [set $newoption]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        $option [set ::$newoption]
</span>     }
 }
 
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -272,39 +255,37 @@ proc option_deprecate {option {newoption ""} } {
</span> # @param option the name of the option
 # @param args name of procs
 proc option_proc {option args} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    global option_procs $option
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if {[info exists option_procs($option)]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set option_procs($option) [concat $option_procs($option) $args]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[info exists ::option_procs($option)]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set ::option_procs($option) [concat $::option_procs($option) $args]
</span>         # we're already tracing
     } else {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        set option_procs($option) $args
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        trace add variable $option {read write unset} option_proc_trace
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set ::option_procs($option) $args
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        trace add variable ::$option [list read write unset] option_proc_trace
</span>     }
 }
 
 # option_proc_trace
 # trace handler for option reads. Calls option procedures with correct arguments.
 proc option_proc_trace {optionName index op} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    global option_procs
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    upvar $optionName $optionName
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set optionName [namespace tail $optionName]
</span>     switch $op {
         write {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-            foreach p $option_procs($optionName) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                $p $optionName set [set $optionName]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            foreach p $::option_procs($optionName) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                $p $optionName set [set ::$optionName]
</span>             }
         }
         read {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-            foreach p $option_procs($optionName) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            foreach p $::option_procs($optionName) {
</span>                 $p $optionName read
             }
         }
         unset {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-            foreach p $option_procs($optionName) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            foreach p $::option_procs($optionName) {
</span>                 if {[catch {$p $optionName delete} result]} {
                     ui_debug "error during unset trace ($p): $result\n$::errorInfo"
                 }
             }
<span style='display:block; white-space:pre;background:#ffe0e0;'>-            trace add variable $optionName {read write unset} option_proc_trace
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            trace add variable ::$optionName [list read write unset] option_proc_trace
</span>         }
     }
 }
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -478,41 +459,40 @@ proc command_exec {args} {
</span> # and adds a variable trace. The variable traces allows for delayed
 # variable and command expansion in the variable's default value.
 proc default {option val} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    global $option option_defaults
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if {[info exists option_defaults($option)]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[info exists ::option_defaults($option)]} {
</span>         ui_debug "Re-registering default for $option"
         # remove the old trace
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        trace remove variable $option {read write unset} default_check
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        trace remove variable ::$option [list read write unset] default_check
</span>     } else {
         # If option is already set and we did not set it
         # do not reset the value
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        if {[info exists $option]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if {[info exists ::$option]} {
</span>             return
         }
     }
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    set option_defaults($option) $val
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set $option $val
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    trace add variable $option {read write unset} default_check
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set ::option_defaults($option) $val
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set ::$option $val
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    trace add variable ::$option [list read write unset] default_check
</span> }
 
 # default_check
 # trace handler to provide delayed variable & command expansion
 # for default variable values
<span style='display:block; white-space:pre;background:#ffe0e0;'>-proc default_check {optionName index op} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    global option_defaults $optionName
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc default_check {varName index op} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set optionName [namespace tail $varName]
</span>     switch $op {
         write {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-            unset option_defaults($optionName)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            trace remove variable $optionName {read write unset} default_check
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            unset ::option_defaults($optionName)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            trace remove variable ::$optionName [list read write unset] default_check
</span>             return
         }
         read {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-            uplevel #0 [list set $optionName] [subst -nocommands {[subst {$option_defaults($optionName)}]}]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            uplevel #0 [list set $optionName] [subst -nocommands {[subst {$::option_defaults($optionName)}]}]
</span>             return
         }
         unset {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-            unset option_defaults($optionName)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            trace remove variable $optionName {read write unset} default_check
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            unset ::option_defaults($optionName)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            trace remove variable ::$optionName [list read write unset] default_check
</span>             return
         }
     }
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -521,8 +501,6 @@ proc default_check {optionName index op} {
</span> ##
 # Filter options which take strings removing indent to ease Portfile writing
 proc handle_option_string {option action args} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    global $option
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span>     switch $action {
         set {
             set args [join $args]
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -553,7 +531,7 @@ proc handle_option_string {option action args} {
</span>                 lappend fulllist $arg
             }
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-            set $option $fulllist
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            set ::$option $fulllist
</span>         }
     }
 }
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -965,10 +943,10 @@ proc getdistname {name} {
</span> # tbool (testbool)
 # If the variable exists in the calling procedure's namespace
 # and is set to a boolean true value, return 1. Otherwise, return 0
<span style='display:block; white-space:pre;background:#ffe0e0;'>-proc tbool {key} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    upvar $key $key
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if {[info exists $key]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return [string is true -strict [set $key]]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc tbool {_tbool_varname} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    upvar $_tbool_varname $_tbool_varname
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[info exists $_tbool_varname]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        return [string is true -strict [set $_tbool_varname]]
</span>     }
     return 0
 }
</pre><pre style='margin:0'>

</pre>