<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/1302f4d4672fc794a9c0e3c3391b44592a7f06b7">https://github.com/macports/macports-base/commit/1302f4d4672fc794a9c0e3c3391b44592a7f06b7</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 1302f4d46 port1.0: global cleanup
</span>1302f4d46 is described below

<span style='display:block; white-space:pre;color:#808000;'>commit 1302f4d4672fc794a9c0e3c3391b44592a7f06b7
</span>Author: Joshua Root <jmr@macports.org>
AuthorDate: Mon Mar 4 03:44:12 2024 +1100

<span style='display:block; white-space:pre;color:#404040;'>    port1.0: global cleanup
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    * Remove unused global declarations
</span><span style='display:block; white-space:pre;color:#404040;'>    * Move some others that are only used conditionally into the branches
</span><span style='display:block; white-space:pre;color:#404040;'>      they are used in
</span><span style='display:block; white-space:pre;color:#404040;'>    * Use 'variable' for vars that should not be visible outside of the
</span><span style='display:block; white-space:pre;color:#404040;'>      current namespace
</span><span style='display:block; white-space:pre;color:#404040;'>    * Prefer 'global' to use of fully-qualified names, as testing indicates
</span><span style='display:block; white-space:pre;color:#404040;'>      it now performs better in the current Tcl version.
</span>---
 src/port1.0/fetch_common.tcl    |   1 -
 src/port1.0/portactivate.tcl    |   7 +-
 src/port1.0/portbuild.tcl       |  48 ++++-----
 src/port1.0/portbump.tcl        |  10 +-
 src/port1.0/portchecksum.tcl    |  13 +--
 src/port1.0/portclean.tcl       |   2 +-
 src/port1.0/portconfigure.tcl   | 168 ++++++++++++++++---------------
 src/port1.0/portdestroot.tcl    |  11 +-
 src/port1.0/portdistcheck.tcl   |   6 +-
 src/port1.0/portdistfiles.tcl   |   8 +-
 src/port1.0/portfetch.tcl       |   8 +-
 src/port1.0/portinstall.tcl     |  57 ++++++-----
 src/port1.0/portlint.tcl        |  15 ++-
 src/port1.0/portlivecheck.tcl   |   4 +-
 src/port1.0/portload.tcl        |  11 +-
 src/port1.0/portmain.tcl        |  32 +++---
 src/port1.0/portreload.tcl      |   4 +-
 src/port1.0/porttest.tcl        |   6 +-
 src/port1.0/porttrace.tcl       |   3 +-
 src/port1.0/portunload.tcl      |   4 +-
 src/port1.0/portutil.tcl        | 215 +++++++++++++++++++++++-----------------
 src/port1.0/tests/portutil.test |   5 +-
 22 files changed, 338 insertions(+), 300 deletions(-)

<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/port1.0/fetch_common.tcl b/src/port1.0/fetch_common.tcl
</span><span style='display:block; white-space:pre;color:#808080;'>index b3fc443d7..bf5d977d2 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/port1.0/fetch_common.tcl
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/port1.0/fetch_common.tcl
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -219,7 +219,6 @@ proc portfetch::checksites {sitelists mirrorfile} {
</span> 
 # sorts fetch_urls in order of ping time
 proc portfetch::sortsites {urls default_listvar} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    global $default_listvar
</span>     upvar $urls fetch_urls
     variable urlmap
     set hostregex {[a-zA-Z]+://([a-zA-Z0-9\.\-_]+)}
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/port1.0/portactivate.tcl b/src/port1.0/portactivate.tcl
</span><span style='display:block; white-space:pre;color:#808080;'>index d125d36f7..7d3e2a7b9 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/port1.0/portactivate.tcl
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/port1.0/portactivate.tcl
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -89,13 +89,14 @@ proc portactivate::activate_finish {args} {
</span>     # the files needed for this
     # The option from macports.conf can override the portfile here.
     if {[tbool startupitem_autostart]} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        set ::portstartupitem::autostart_only yes
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        global portstartupitem::autostart_only
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set autostart_only yes
</span>         if {[eval_targets "load"]} {
             ui_error [format [msgcat::mc "Failed to load %s"] $subport]
<span style='display:block; white-space:pre;background:#ffe0e0;'>-            unset ::portstartupitem::autostart_only
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            unset autostart_only
</span>             return 1
         }
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        unset ::portstartupitem::autostart_only
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        unset autostart_only
</span>     }
 
     # Save notes for display by the port client
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/port1.0/portbuild.tcl b/src/port1.0/portbuild.tcl
</span><span style='display:block; white-space:pre;color:#808080;'>index 90886dc7f..5ffe733c3 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/port1.0/portbuild.tcl
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/port1.0/portbuild.tcl
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -67,16 +67,15 @@ set_ui_prefix
</span> # ${build.type} == bsd, ensures bsdmake is present by adding a bin:-style
 # dependency.
 proc portbuild::add_automatic_buildsystem_dependencies {} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    global build.type.add_deps
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    global build.type.add_deps build.type os.platform
</span>     if {!${build.type.add_deps}} {
         return
     }
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    if {[option build.type] eq "bsd" && [option os.platform] eq "darwin"} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {${build.type} eq "bsd" && ${os.platform} eq "darwin"} {
</span>         ui_debug "build.type is BSD, adding bin:bsdmake:bsdmake build dependency"
         depends_build-delete bin:bsdmake:bsdmake
         depends_build-append bin:bsdmake:bsdmake
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if {[option build.type] eq "gnu" && [option os.platform] eq "freebsd"} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    } elseif {${build.type} eq "gnu" && ${os.platform} eq "freebsd"} {
</span>         ui_debug "build.type is GNU, adding bin:gmake:gmake build dependency"
         depends_build-delete bin:gmake:gmake
         depends_build-append bin:gmake:gmake
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -89,24 +88,25 @@ options build.type.add_deps
</span> default build.type.add_deps yes
 
 proc portbuild::build_getmaketype {args} {
<span style='display:block; white-space:pre;background:#e0ffe0;'>+    global build.type os.platform
</span>     macports_try -pass_signal {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        if {[option build.type] eq "default"} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if {${build.type} eq "default"} {
</span>             return [findBinary make $portutil::autoconf::make_path]
         }
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        switch -exact -- [option build.type] {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        switch -exact -- ${build.type} {
</span>             bsd {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-                if {[option os.platform] eq "darwin"} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                if {${os.platform} eq "darwin"} {
</span>                     return [findBinary bsdmake $portutil::autoconf::bsdmake_path]
<span style='display:block; white-space:pre;background:#ffe0e0;'>-                } elseif {[option os.platform] eq "freebsd"} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                } elseif {${os.platform} eq "freebsd"} {
</span>                     return [findBinary make $portutil::autoconf::make_path]
                 } else {
                     return [findBinary pmake $portutil::autoconf::bsdmake_path]
                 }
             }
             gnu {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-                if {[option os.platform] eq "darwin"} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                if {${os.platform} eq "darwin"} {
</span>                     return [findBinary gnumake $portutil::autoconf::gnumake_path]
<span style='display:block; white-space:pre;background:#ffe0e0;'>-                } elseif {[option os.platform] eq "linux"} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                } elseif {${os.platform} eq "linux"} {
</span>                     return [findBinary make $portutil::autoconf::make_path]
                 } else {
                     return [findBinary gmake $portutil::autoconf::gnumake_path]
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -114,8 +114,8 @@ proc portbuild::build_getmaketype {args} {
</span>             }
             pbx -
             xcode {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-                if {[option os.platform] ne "darwin"} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    error "[format [msgcat::mc "This port requires 'xcodebuild', which is not available on %s."] [option os.platform]]"
</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;'>+                    error "[format [msgcat::mc "This port requires 'xcodebuild', which is not available on %s."] ${os.platform}]"
</span>                 }
 
                 global xcodebuildcmd
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -126,13 +126,13 @@ proc portbuild::build_getmaketype {args} {
</span>                 }
             }
             default {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-                ui_warn "[format [msgcat::mc "Unknown build.type %s, using 'gnumake'"] [option build.type]]"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                ui_warn "[format [msgcat::mc "Unknown build.type %s, using 'gnumake'"] ${build.type}]"
</span>                 return [findBinary gnumake $portutil::autoconf::gnumake_path]
             }
         }
     } on error {eMessage} {
         ui_warn $eMessage
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        ui_warn "Unable to find build command for build.type '[option build.type]'"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ui_warn "Unable to find build command for build.type '${build.type}'"
</span>     }
     return ""
 }
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -169,18 +169,20 @@ proc portbuild::build_getjobs {args} {
</span> }
 
 proc portbuild::build_getargs {args} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    if {(([option build.type] eq "default" && [option os.platform] ne "freebsd") || \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         ([option build.type] eq "gnu")) \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        && [regexp "^(/\\S+/|)(g|gnu|)make(\\s+.*|)$" [option build.cmd]]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    global build.type os.platform build.cmd build.target
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {((${build.type} eq "default" && ${os.platform} ne "freebsd") || \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         (${build.type} eq "gnu")) \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        && [regexp "^(/\\S+/|)(g|gnu|)make(\\s+.*|)$" ${build.cmd}]} {
</span>         # Print "Entering directory" lines for better log debugging
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        return "-w [option build.target]"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        return "-w ${build.target}"
</span>     }
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    return "[option build.target]"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    return ${build.target}
</span> }
 
 proc portbuild::build_getjobsarg {args} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    set cmdname [file tail [lindex [option build.cmd] 0]]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    global build.cmd build.jobs
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set cmdname [file tail [lindex ${build.cmd} 0]]
</span>     if {![exists build.jobs] || \
             !([string match "*make" $cmdname] || \
               "ninja" eq $cmdname || \
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -188,7 +190,7 @@ proc portbuild::build_getjobsarg {args} {
</span>         return ""
     }
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    set jobs [option build.jobs]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set jobs ${build.jobs}
</span>     if {![string is integer -strict $jobs] || $jobs < 1 || ($cmdname ne "ninja" && $jobs < 2)} {
         return ""
     }
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -196,9 +198,9 @@ proc portbuild::build_getjobsarg {args} {
</span> }
 
 proc portbuild::build_start {args} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    global UI_PREFIX
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    global UI_PREFIX subport
</span> 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    ui_notice "$UI_PREFIX [format [msgcat::mc "Building %s"] [option subport]]"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    ui_notice "$UI_PREFIX [format [msgcat::mc "Building %s"] ${subport}]"
</span> }
 
 proc portbuild::build_main {args} {
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/port1.0/portbump.tcl b/src/port1.0/portbump.tcl
</span><span style='display:block; white-space:pre;color:#808080;'>index 5486a1b69..3dd0ada42 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/port1.0/portbump.tcl
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/port1.0/portbump.tcl
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -46,9 +46,9 @@ namespace eval portbump {
</span> # Target prerun procedure; simply prints a message about what we're doing.
 #
 proc portbump::bump_start {args} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    global UI_PREFIX
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    global UI_PREFIX subport
</span> 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    ui_notice "$UI_PREFIX [format [msgcat::mc "Bumping checksums for %s"] [option subport]]"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    ui_notice "$UI_PREFIX [format [msgcat::mc "Bumping checksums for %s"] ${subport}]"
</span> }
 
 # bump_main
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -77,7 +77,7 @@ proc portbump::bump_main {args} {
</span>     # If everything is fine with the syntax, keep on and check the checksum of
     # the distfiles.
     if {[portchecksum::parse_checksums $checksums_str] eq "yes"} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        set distpath [option distpath]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        global distpath
</span> 
         foreach distfile $all_dist_files {
             ui_info "$UI_PREFIX [format [msgcat::mc "Checksumming %s"] $distfile]"
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -158,7 +158,7 @@ proc portbump::bump_main {args} {
</span>         # Show the desired checksum line for easy cut-paste
         # based on the previously calculated values, plus our default types
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        global version revision
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        global version revision subport
</span> 
         ui_msg "We will bump these:"
         foreach {type sum calculated_sum} $both_checksums {
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -246,7 +246,7 @@ proc portbump::bump_main {args} {
</span>                 file attributes $portfile {*}$attributes
 
                 ui_msg "Checksums successfully bumped. Suggested commit message:"
<span style='display:block; white-space:pre;background:#ffe0e0;'>-                ui_msg [format "%-8s%s: update to %s" "" [option subport] $version]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                ui_msg [format "%-8s%s: update to %s" "" ${subport} $version]
</span>             }
 
             # Delete Portfile.bump
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/port1.0/portchecksum.tcl b/src/port1.0/portchecksum.tcl
</span><span style='display:block; white-space:pre;color:#808080;'>index dfaa73f17..d8f78d646 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/port1.0/portchecksum.tcl
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/port1.0/portchecksum.tcl
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -111,14 +111,15 @@ proc portchecksum::verify_checksum_format {type value} {
</span> # return yes if the syntax was correct, no if there was a problem.
 proc portchecksum::parse_checksums {checksums_str} {
     global checksums_array all_dist_files
<span style='display:block; white-space:pre;background:#e0ffe0;'>+    variable checksum_types
</span> 
     # Parse the string of checksums.
     set nb_checksum [llength $checksums_str]
 
     if {[llength $all_dist_files] == 1
         && [expr {$nb_checksum % 2}] == 0
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        && [expr {$nb_checksum / 2}] <= [llength $portchecksum::checksum_types]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        && [lindex $checksums_str 0] in $portchecksum::checksum_types} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        && [expr {$nb_checksum / 2}] <= [llength $checksum_types]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        && [lindex $checksums_str 0] in $checksum_types} {
</span>         # Convert to format #2
         set checksums_str [linsert $checksums_str 0 [lindex $all_dist_files 0]]
         # We increased the size.
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -147,7 +148,7 @@ proc portchecksum::parse_checksums {checksums_str} {
</span>             incr ix_checksum
             while {1} {
                 set checksum_type [lindex $checksums_str $ix_checksum]
<span style='display:block; white-space:pre;background:#ffe0e0;'>-                if {$checksum_type in $portchecksum::checksum_types} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                if {$checksum_type in $checksum_types} {
</span>                     # append the type and the value.
                     incr ix_checksum
                     set checksum_value [lindex $checksums_str $ix_checksum]
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -242,7 +243,7 @@ proc portchecksum::checksum_start {args} {
</span> # Target main procedure. Verifies the checksums of all distfiles.
 #
 proc portchecksum::checksum_main {args} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    global UI_PREFIX all_dist_files checksums_array checksum.skip
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    global UI_PREFIX all_dist_files checksums_array checksum.skip distpath
</span> 
     # If no files have been downloaded, there is nothing to checksum.
     if {![info exists all_dist_files]} {
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -268,7 +269,6 @@ proc portchecksum::checksum_main {args} {
</span>     # if everything is fine with the syntax, keep on and check the checksum of
     # the distfiles.
     if {[parse_checksums $checksums_str] eq "yes"} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        set distpath [option distpath]
</span> 
         foreach distfile $all_dist_files {
             ui_info "$UI_PREFIX [format [msgcat::mc "Checksumming %s"] $distfile]"
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -345,13 +345,14 @@ proc portchecksum::checksum_main {args} {
</span>             # Show the desired checksum line for easy cut-paste
             # based on the previously calculated values, plus our default types
             set sums [list]
<span style='display:block; white-space:pre;background:#e0ffe0;'>+            variable default_checksum_types
</span> 
             foreach distfile $all_dist_files {
                 if {[llength $all_dist_files] > 1} {
                     lappend sums $distfile
                 }
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-                set missing_types $portchecksum::default_checksum_types
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                set missing_types $default_checksum_types
</span> 
                 # Append the string for the calculated types and note any of
                 # our default types that were already calculated
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/port1.0/portclean.tcl b/src/port1.0/portclean.tcl
</span><span style='display:block; white-space:pre;color:#808080;'>index e7fa394c8..a38b8922f 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/port1.0/portclean.tcl
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/port1.0/portclean.tcl
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -225,7 +225,7 @@ proc portclean::clean_archive {args} {
</span>     if {[info exists ports_version_glob]} {
         # Match all possible archive variants that match the version
         # glob specified by the user.
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        set fileglob "$subport-[option ports_version_glob]*.*.*.*"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set fileglob "$subport-${ports_version_glob}*.*.*.*"
</span>     } else {
         # Match all possible archives for this port.
         set fileglob "$subport-*_*.*.*.*"
<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 5fc086258..58aa2347a 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;'>@@ -42,6 +42,9 @@ target_prerun ${org.macports.configure} portconfigure::configure_start
</span> target_postrun ${org.macports.configure} portconfigure::configure_finish
 
 namespace eval portconfigure {
<span style='display:block; white-space:pre;background:#e0ffe0;'>+    # configure_get_default_compiler is fairly expensive, so cache the result
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    variable recompute_default_compiler 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    variable cached_default_compiler {}
</span> }
 
 
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -75,27 +78,30 @@ option_proc configure.cxxflags portconfigure::stdlib_trace
</span> option_proc configure.objcxxflags portconfigure::stdlib_trace
 
 proc portconfigure::should_add_stdlib {} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    set has_stdlib [expr {[option configure.cxx_stdlib] ne ""}]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set is_clang [string match *clang* [option configure.cxx]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # GCC also supports -stdlib starting with GCC 10 (and devel)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set is_gcc_with_stdlib no
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if { [string match *g*-mp-* [option configure.cxx]] } {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        # -stdlib is not available with PPC builds
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if { [option configure.build_arch] ni [list ppc ppc64] } {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            # Do not pass stdlib to gcc if it is MacPorts custom macports-libstdc++ setting
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            # as gcc does not uderstand this. Instead do nothing, which means gcc will
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            # default to using its own libstdc++, which is in fact what we mean by
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            # configure.cxx_stdlib=macports-libstdc++
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            if { [option configure.cxx_stdlib] ne "macports-libstdc++" } {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                # Extract gcc version from value after last -
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                set gcc_ver [lindex [split [option configure.cxx] "-"] end]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                if { ${gcc_ver} eq "devel" || ${gcc_ver} >= 10 } {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    set is_gcc_with_stdlib yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    global configure.cxx configure.cxx_stdlib
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {${configure.cxx_stdlib} eq ""} {
</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;'>+    if {[string match *clang* ${configure.cxx}]} {
</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;'>+    # GCC also supports -stdlib starting with GCC 10 (and devel), but
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # not with PPC builds
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[string match *g*-mp-* ${configure.cxx}]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            && [option configure.build_arch] ni [list ppc ppc64]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        # Do not pass stdlib to gcc if it is MacPorts custom macports-libstdc++ setting
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        # as gcc does not uderstand this. Instead do nothing, which means gcc will
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        # default to using its own libstdc++, which is in fact what we mean by
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        # configure.cxx_stdlib=macports-libstdc++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if {${configure.cxx_stdlib} ne "macports-libstdc++"} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            # Extract gcc version from value after last -
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            set gcc_ver [lindex [split ${configure.cxx} "-"] end]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            if { ${gcc_ver} eq "devel" || ${gcc_ver} >= 10 } {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                return 1
</span>             }
         }
     }
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    return [expr {$has_stdlib && ($is_clang || $is_gcc_with_stdlib)}]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    return 0
</span> }
 proc portconfigure::should_add_cxx_abi {} {
     # prior to OS X Mavericks, libstdc++ was the default C++ runtime, so
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -119,10 +125,11 @@ proc portconfigure::construct_cxxflags {flags} {
</span>     return $flags
 }
 proc portconfigure::stdlib_trace {opt action args} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    foreach flag [lsearch -all -inline [option $opt] -stdlib=*] {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    global $opt
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    foreach flag [lsearch -all -inline [set $opt] -stdlib=*] {
</span>         $opt-delete $flag
     }
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    foreach flag [lsearch -all -inline [option $opt] -D_GLIBCXX_USE_CXX11_ABI=0] {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    foreach flag [lsearch -all -exact -inline [set $opt] -D_GLIBCXX_USE_CXX11_ABI=0] {
</span>         $opt-delete $flag
     }
     if {$action eq "read"} {
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -203,14 +210,11 @@ proc portconfigure::add_build_dep { type dep } {
</span> # Adds dependencies for the binaries which will be called, but only if it is
 # the default. If .cmd was overwritten the port has to care for deps itself.
 proc portconfigure::set_configure_type {option action args} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    global autoreconf.cmd automake.cmd autoconf.cmd xmkmf.cmd
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set configure_map [dict create \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        autoconf    [list port:autoconf port:automake port:libtool] \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        xmkmf       port:imake \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    ]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span>     if {$action eq "set"} {
<span style='display:block; white-space:pre;background:#e0ffe0;'>+        set configure_map [dict create \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            autoconf    [list port:autoconf port:automake port:libtool] \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            xmkmf       port:imake \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ]
</span>         switch $option {
             autoreconf.cmd  -
             automake.cmd    -
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -396,8 +400,9 @@ proc portconfigure::configure_start {args} {
</span>     ui_debug "Using compiler '$compiler_name'"
 
     # Additional ccache directory setup
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    global configure.ccache ccache_dir ccache_size macportsuser
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    global configure.ccache
</span>     if {${configure.ccache}} {
<span style='display:block; white-space:pre;background:#e0ffe0;'>+        global ccache_dir ccache_size macportsuser
</span>         # Create ccache directory with correct permissions with root privileges
         elevateToRoot "configure ccache"
         if {[catch {
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -560,6 +565,7 @@ proc portconfigure::configure_get_sdkroot {sdk_version} {
</span>         return {}
     }
 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+    variable sdkroot_cache
</span>     set sdk_major [lindex [split $sdk_version .] 0]
     set cltpath /Library/Developer/CommandLineTools
     # Check CLT first if Xcode shouldn't be used
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -581,16 +587,16 @@ proc portconfigure::configure_get_sdkroot {sdk_version} {
</span>             set try_versions [list $sdk_version]
         }
         foreach try_version $try_versions {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-            if {[info exists ::portconfigure::sdkroot_cache(macosx${try_version})]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                if {$::portconfigure::sdkroot_cache(macosx${try_version}) ne ""} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    return $::portconfigure::sdkroot_cache(macosx${try_version})
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            if {[info exists sdkroot_cache(macosx${try_version})]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                if {$sdkroot_cache(macosx${try_version}) ne ""} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    return $sdkroot_cache(macosx${try_version})
</span>                 }
                 # negative result cached, do nothing here
             } elseif {![catch {exec env DEVELOPER_DIR=${cltpath} xcrun --sdk macosx${try_version} --show-sdk-path 2> /dev/null} sdk]} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-                set ::portconfigure::sdkroot_cache(macosx${try_version}) $sdk
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                set sdkroot_cache(macosx${try_version}) $sdk
</span>                 return $sdk
             } else {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-                set ::portconfigure::sdkroot_cache(macosx${try_version}) ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                set sdkroot_cache(macosx${try_version}) ""
</span>             }
         }
 
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -600,16 +606,16 @@ proc portconfigure::configure_get_sdkroot {sdk_version} {
</span>             return $sdk
         }
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        if {[info exists ::portconfigure::sdkroot_cache(macosx)]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            if {$::portconfigure::sdkroot_cache(macosx) ne ""} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                return $::portconfigure::sdkroot_cache(macosx)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if {[info exists sdkroot_cache(macosx)]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            if {$sdkroot_cache(macosx) ne ""} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                return $sdkroot_cache(macosx)
</span>             }
             # negative result cached, do nothing here
         } elseif {![catch {exec env DEVELOPER_DIR=${cltpath} xcrun --sdk macosx --show-sdk-path 2> /dev/null} sdk]} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-            set ::portconfigure::sdkroot_cache(macosx) $sdk
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            set sdkroot_cache(macosx) $sdk
</span>             return $sdk
         } else {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-            set ::portconfigure::sdkroot_cache(macosx) ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            set sdkroot_cache(macosx) ""
</span>         }
     }
 
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -641,16 +647,16 @@ proc portconfigure::configure_get_sdkroot {sdk_version} {
</span>         set try_versions [list $sdk_version]
     }
     foreach try_version $try_versions {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        if {[info exists ::portconfigure::sdkroot_cache(macosx${try_version},noclt)]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            if {$::portconfigure::sdkroot_cache(macosx${try_version},noclt) ne ""} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                return $::portconfigure::sdkroot_cache(macosx${try_version},noclt)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if {[info exists sdkroot_cache(macosx${try_version},noclt)]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            if {$sdkroot_cache(macosx${try_version},noclt) ne ""} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                return $sdkroot_cache(macosx${try_version},noclt)
</span>             }
             # negative result cached, do nothing here
         } elseif {![catch {exec xcrun --sdk macosx${try_version} --show-sdk-path 2> /dev/null} sdk]} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-            set ::portconfigure::sdkroot_cache(macosx${try_version},noclt) $sdk
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            set sdkroot_cache(macosx${try_version},noclt) $sdk
</span>             return $sdk
         } else {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-            set ::portconfigure::sdkroot_cache(macosx${try_version},noclt) ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            set sdkroot_cache(macosx${try_version},noclt) ""
</span>         }
     }
 
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -678,11 +684,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 {[info exists ::portconfigure::sdkroot_cache(macosx,noclt)]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[info exists sdkroot_cache(macosx,noclt)]} {
</span>         # no negative-cached case here because that would mean overall failure
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        return $::portconfigure::sdkroot_cache(macosx,noclt)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        return $sdkroot_cache(macosx,noclt)
</span>     } elseif {![catch {exec xcrun --sdk macosx --show-sdk-path 2> /dev/null} sdk]} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        set ::portconfigure::sdkroot_cache(macosx,noclt) $sdk
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set sdkroot_cache(macosx,noclt) $sdk
</span>         return $sdk
     }
 
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -758,10 +764,6 @@ proc portconfigure::compiler_is_port {compiler} {
</span>     return [expr {[portconfigure::compiler_port_name ${compiler}] ne ""}]
 }
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-# configure_get_default_compiler is fairly expensive, so cache the result
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-set ::portconfigure::recompute_default_compiler 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-set ::portconfigure::cached_default_compiler {}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span> # changing these options will invalidate the cache
 foreach varname {compiler.whitelist compiler.fallback compiler.blacklist
     compiler.c_standard compiler.cxx_standard compiler.openmp_version
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -770,24 +772,27 @@ foreach varname {compiler.whitelist compiler.fallback compiler.blacklist
</span> }
 
 proc portconfigure::recompute_default_compiler_proc {varname unused op} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    set ::portconfigure::recompute_default_compiler 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    variable recompute_default_compiler 1
</span> }
 
 # internal function to determine the default compiler
 proc portconfigure::configure_get_default_compiler {} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    if {!$::portconfigure::recompute_default_compiler} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return $::portconfigure::cached_default_compiler
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    variable recompute_default_compiler
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    variable cached_default_compiler
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {!$recompute_default_compiler} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        return $cached_default_compiler
</span>     }
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    set ::portconfigure::recompute_default_compiler 0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set recompute_default_compiler 0
</span> 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    if {[option compiler.whitelist] ne ""} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set search_list [option compiler.whitelist]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    global compiler.blacklist compiler.fallback compiler.whitelist
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {${compiler.whitelist} ne ""} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set search_list ${compiler.whitelist}
</span>     } else {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        set search_list [option compiler.fallback]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set search_list ${compiler.fallback}
</span>     }
     foreach compiler $search_list {
         set allowed yes
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        foreach pattern [option compiler.blacklist] {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        foreach pattern ${compiler.blacklist} {
</span>             if {[string match $pattern $compiler]} {
                 set allowed no
                 break
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -797,13 +802,13 @@ proc portconfigure::configure_get_default_compiler {} {
</span>             ([file executable [configure_get_compiler cc $compiler]] ||
              [compiler_is_port $compiler])
         } then {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-            set ::portconfigure::cached_default_compiler $compiler
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            set cached_default_compiler $compiler
</span>             return $compiler
         }
     }
     ui_warn "All compilers are either blacklisted or unavailable; defaulting to first fallback option"
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    set ::portconfigure::cached_default_compiler [lindex [option compiler.fallback] 0]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return $::portconfigure::cached_default_compiler
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set cached_default_compiler [lindex ${compiler.fallback} 0]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    return $cached_default_compiler
</span> }
 
 # internal function to determine the Fortran compiler
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -902,7 +907,10 @@ proc portconfigure::max_version {verA verB} {
</span> #
 # utility procedure: get minimum command line compilers version based on restrictions
 proc portconfigure::get_min_command_line {compiler} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    global compiler.c_standard compiler.cxx_standard compiler.openmp_version compiler.thread_local_storage os.major
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    global compiler.c_standard compiler.cxx_standard compiler.openmp_version \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+           compiler.thread_local_storage os.major configure.cxx_stdlib \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+           compiler.limit_flags compiler.support_environment_paths \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+           compiler.support_environment_sdkroot configure.sdkroot
</span>     set min_value 1.0
 
     if {${compiler.openmp_version} ne ""} {
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -913,16 +921,22 @@ proc portconfigure::get_min_command_line {compiler} {
</span>         # GCC & MacPorts Clang emulate thread-local storage
         return none
     }
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    if {[option configure.cxx_stdlib] eq "macports-libstdc++"} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {${configure.cxx_stdlib} eq "macports-libstdc++"} {
</span>         return none
     }
 
     switch ${compiler} {
         clang {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-            if {[option configure.cxx_stdlib] eq "libc++" && ${os.major} < 11} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            if {${configure.cxx_stdlib} eq "libc++" && ${os.major} < 11} {
</span>                 # no Xcode clang can build against libc++ on < 10.7
                 return none
             }
<span style='display:block; white-space:pre;background:#e0ffe0;'>+            if {(${compiler.limit_flags} || ${compiler.support_environment_sdkroot}) &&
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                ${configure.sdkroot} ne "" &&
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                !([file exists /usr/lib/libxcselect.dylib] || ${os.major} >= 20)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            } {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                return none
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            }
</span>             if {${compiler.c_standard} >= 2017} {
                 set min_value [max_version $min_value 1000.11.45.2]
             } elseif {${compiler.c_standard} >= 2011} {
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -945,25 +959,18 @@ proc portconfigure::get_min_command_line {compiler} {
</span>                 #    (https://developer.apple.com/videos/play/wwdc2016-405/?time=354).
                 set min_value [max_version $min_value 800.0.38]
             }
<span style='display:block; white-space:pre;background:#ffe0e0;'>-            if {[option compiler.limit_flags] || [option compiler.support_environment_paths]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            if {${compiler.limit_flags} || ${compiler.support_environment_paths}} {
</span>                 set min_value [max_version $min_value 421.0.57]
             }
<span style='display:block; white-space:pre;background:#ffe0e0;'>-            if {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                ([option compiler.limit_flags] || [option compiler.support_environment_sdkroot]) &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                [option configure.sdkroot] ne "" &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                !([file exists /usr/lib/libxcselect.dylib] || ${os.major} >= 20)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            } {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                return none
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span>         }
         llvm-gcc-4.2 -
         gcc-4.2 -
         gcc-4.0 -
         apple-gcc-4.2 {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-            if {${compiler.c_standard} > 1999 || ${compiler.cxx_standard} >= 2011 || [option configure.cxx_stdlib] eq "libc++" || ${compiler.thread_local_storage}} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            if {${compiler.c_standard} > 1999 || ${compiler.cxx_standard} >= 2011 || ${configure.cxx_stdlib} eq "libc++" || ${compiler.thread_local_storage}} {
</span>                 return none
             }
<span style='display:block; white-space:pre;background:#ffe0e0;'>-            if {([option compiler.limit_flags] || [option compiler.support_environment_sdkroot]) && [option configure.sdkroot] ne ""} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            if {(${compiler.limit_flags} || ${compiler.support_environment_sdkroot}) && ${configure.sdkroot} ne ""} {
</span>                 return none
             }
         }
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1624,7 +1631,7 @@ proc portconfigure::configure_get_compiler {type {compiler {}}} {
</span> # Some of the compilers we use are provided by MacPorts itself; ensure we
 # automatically add a dependency when needed
 proc portconfigure::add_automatic_compiler_dependencies {} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    global configure.compiler configure.compiler.add_deps
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    global configure.compiler configure.compiler.add_deps compiler.require_fortran
</span> 
     if {!${configure.compiler.add_deps}} {
         return
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1635,7 +1642,7 @@ proc portconfigure::add_automatic_compiler_dependencies {} {
</span>         portconfigure::add_compiler_port_dependencies ${configure.compiler}
     }
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    if {[option compiler.require_fortran] && [portconfigure::configure_get_compiler fc ${configure.compiler}] eq ""} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {${compiler.require_fortran} && [portconfigure::configure_get_compiler fc ${configure.compiler}] eq ""} {
</span>         # Fortran is required, but compiler does not provide it
         ui_debug "Adding Fortran compiler dependency"
         portconfigure::add_compiler_port_dependencies [portconfigure::configure_get_fortran_compiler]
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1709,12 +1716,13 @@ proc portconfigure::add_compiler_port_dependencies {compiler} {
</span>                 depends_lib-append $libgcc_dep
             }
         } elseif {[regexp {^macports-clang(?:-(\d+(?:\.\d+)?))$} $compiler -> clang_version]} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-            if {[option configure.cxx_stdlib] eq "macports-libstdc++"} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            global configure.cxx_stdlib
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            if {${configure.cxx_stdlib} eq "macports-libstdc++"} {
</span>                 # see https://trac.macports.org/ticket/54766
                 ui_debug "Adding depends_lib path:lib/libgcc/libgcc_s.1.dylib:libgcc"
                 depends_lib-delete "path:lib/libgcc/libgcc_s.1.dylib:libgcc"
                 depends_lib-append "path:lib/libgcc/libgcc_s.1.dylib:libgcc"
<span style='display:block; white-space:pre;background:#ffe0e0;'>-            } elseif {[option configure.cxx_stdlib] eq "libc++" && ${os.major} < 11} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            } elseif {${configure.cxx_stdlib} eq "libc++" && ${os.major} < 11} {
</span>                 # libc++ does not exist on these systems
                 ui_debug "Adding depends_lib libcxx"
                 depends_lib-delete "port:libcxx"
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1737,10 +1745,10 @@ proc portconfigure::add_compiler_port_dependencies {compiler} {
</span> 
 proc portconfigure::configure_main {args} {
     global worksrcpath use_configure use_autoreconf use_autoconf use_automake use_xmkmf \
<span style='display:block; white-space:pre;background:#ffe0e0;'>-           configure.env configure.pipe configure.libs configure.classpath configure.universal_args \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+           configure.pipe configure.libs configure.classpath configure.universal_args \
</span>            configure.perl configure.python configure.ruby configure.install configure.awk configure.bison \
            configure.pkg_config configure.pkg_config_path \
<span style='display:block; white-space:pre;background:#ffe0e0;'>-           configure.ccache configure.distcc configure.cpp configure.javac configure.sdkroot \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+           configure.ccache configure.distcc configure.javac configure.sdkroot \
</span>            configure.march configure.mtune os.platform os.major
     foreach tool {cc cxx objc objcxx f77 f90 fc ld} {
         global configure.${tool} configure.${tool}_archflags
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/port1.0/portdestroot.tcl b/src/port1.0/portdestroot.tcl
</span><span style='display:block; white-space:pre;color:#808080;'>index ec10139f9..3114b22f4 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/port1.0/portdestroot.tcl
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/port1.0/portdestroot.tcl
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -80,7 +80,7 @@ proc portdestroot::destroot_getargs {args} {
</span> }
 
 proc portdestroot::destroot_start {args} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    global UI_PREFIX prefix subport porturl destroot os.platform destroot.clean portsharepath \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    global UI_PREFIX prefix subport destroot os.platform destroot.clean portsharepath \
</span>            destroot.umask destroot.asroot euid egid \
            applications_dir frameworks_dir
     variable oldmask
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -131,8 +131,7 @@ proc portdestroot::destroot_main {args} {
</span> 
 proc portdestroot::destroot_finish {args} {
     global UI_PREFIX destroot prefix subport destroot.violate_mtree \
<span style='display:block; white-space:pre;background:#ffe0e0;'>-           applications_dir frameworks_dir destroot.keepdirs destroot.delete_la_files \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           os.platform os.version
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+           applications_dir frameworks_dir destroot.keepdirs destroot.delete_la_files
</span>     variable oldmask
 
     foreach fileToDelete {share/info/dir lib/charset.alias} {
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -333,7 +332,7 @@ proc portdestroot::destroot_finish {args} {
</span>                 } else {
                     set dir_allowed no
                     # these files are (at least potentially) outside of the prefix
<span style='display:block; white-space:pre;background:#ffe0e0;'>-                    foreach dir "$applications_dir $frameworks_dir /Library/LaunchAgents /Library/LaunchDaemons /Library/StartupItems" {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    foreach dir [list $applications_dir $frameworks_dir /Library/LaunchAgents /Library/LaunchDaemons /Library/StartupItems] {
</span>                         if {[string equal -length [expr {[string length $dfile] + 1}] $dfile/ $dir]} {
                             # it's a prefix of one of the allowed paths
                             set dir_allowed yes
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -361,12 +360,12 @@ proc portdestroot::destroot_finish {args} {
</span> 
         # abort here only so all violations can be observed
         if { ${mtree_violation} ne "no" } {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-            ui_warn "[format [msgcat::mc "%s violates the layout of the ports-filesystems!"] [option subport]]"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            ui_warn "[format [msgcat::mc "%s violates the layout of the ports-filesystems!"] $subport]"
</span>             ui_warn "Please fix or indicate this misbehavior (if it is intended), it will be an error in future releases!"
             # error "mtree violation!"
         }
     } else {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        ui_warn "[format [msgcat::mc "%s installs files outside the common directory structure."] [option subport]]"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ui_warn "[format [msgcat::mc "%s installs files outside the common directory structure."] $subport]"
</span>     }
 
     # Restore umask
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/port1.0/portdistcheck.tcl b/src/port1.0/portdistcheck.tcl
</span><span style='display:block; white-space:pre;color:#808080;'>index dc2f2082f..0321bc068 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/port1.0/portdistcheck.tcl
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/port1.0/portdistcheck.tcl
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -64,16 +64,16 @@ proc portdistcheck::distcheck_main {args} {
</span>     }
 
     # Check the distfiles if it's a regular fetch phase.
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    if {"${distcheck.type}" ne "none"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        && "${fetch.type}" eq "standard"} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {${distcheck.type} ne "none"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        && ${fetch.type} eq "standard"} {
</span>         # portfetch 1.0::checkfiles sets fetch_urls list.
         set fetch_urls [list]
         portfetch::checkfiles fetch_urls
         set totalsize 0
 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+        global portfetch::urlmap
</span>         # Check all the files.
         foreach {url_var distfile} $fetch_urls {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-            global portfetch::urlmap
</span>             if {![info exists urlmap($url_var)]} {
                 ui_error [format [msgcat::mc "No defined site for tag: %s, using master_sites"] $url_var]
                 set urlmap($url_var) $master_sites
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/port1.0/portdistfiles.tcl b/src/port1.0/portdistfiles.tcl
</span><span style='display:block; white-space:pre;color:#808080;'>index 06b30fae1..025e5fc9f 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/port1.0/portdistfiles.tcl
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/port1.0/portdistfiles.tcl
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -71,16 +71,14 @@ proc portdistfiles::distfiles_main {args} {
</span>     }
 
     # get checksum data from the portfile and parse it
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    set checksums_str [option checksums]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set result [portchecksum::parse_checksums $checksums_str]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set result [portchecksum::parse_checksums [option checksums]]
</span> 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+    global portfetch::urlmap
</span>     foreach {url_var distfile} $fetch_urls {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        global portfetch::urlmap
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span>         ui_msg "\[$distfile\] [file join $portdbpath distfiles $dist_subdir $distfile]"
 
         # print checksums if available
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        if {$result eq "yes" && [array get checksums_array $distfile] ne ""} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if {$result eq "yes" && [info exists checksums_array($distfile)]} {
</span>             foreach {type sum} $checksums_array($distfile) {
                 ui_msg " $type: $sum"
             }
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/port1.0/portfetch.tcl b/src/port1.0/portfetch.tcl
</span><span style='display:block; white-space:pre;color:#808080;'>index 38866e5fc..49ae4503d 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/port1.0/portfetch.tcl
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/port1.0/portfetch.tcl
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -68,7 +68,7 @@ default fetch.type standard
</span> default bzr.cmd {[findBinary bzr $portutil::autoconf::bzr_path]}
 default bzr.dir {${workpath}}
 default bzr.revision -1
<span style='display:block; white-space:pre;background:#ffe0e0;'>-default bzr.pre_args "--builtin --no-aliases checkout --lightweight --verbose"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default bzr.pre_args {--builtin --no-aliases checkout --lightweight --verbose}
</span> default bzr.args ""
 default bzr.post_args {-r ${bzr.revision} ${bzr.url} ${worksrcdir}}
 
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -337,7 +337,7 @@ proc portfetch::bzrfetch {args} {
</span> # Perform a CVS login and fetch, storing the CVS login
 # information in a custom .cvspass file
 proc portfetch::cvsfetch {args} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    global workpath cvs.env cvs.cmd cvs.args cvs.post_args \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    global cvs.cmd cvs.args cvs.post_args \
</span>            cvs.root cvs.date cvs.tag cvs.method cvs.password
            patch_sites patchfiles filespath
 
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -439,7 +439,7 @@ proc portfetch::svnfetch {args} {
</span> # Perform a git fetch
 proc portfetch::gitfetch {args} {
     global worksrcpath patchfiles \
<span style='display:block; white-space:pre;background:#ffe0e0;'>-           git.url git.branch git.sha1 git.cmd
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+           git.url git.branch git.cmd
</span> 
     set options "--progress"
     if {${git.branch} eq ""} {
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -494,7 +494,7 @@ proc portfetch::hgfetch {args} {
</span> # Perform a standard fetch, assembling fetch urls from
 # the listed url variable and associated distfile
 proc portfetch::fetchfiles {args} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    global distpath all_dist_files UI_PREFIX \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    global distpath UI_PREFIX \
</span>            fetch.user fetch.password fetch.use_epsv fetch.ignore_sslcert fetch.remote_time \
            fetch.user_agent portverbose
     variable fetch_urls
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/port1.0/portinstall.tcl b/src/port1.0/portinstall.tcl
</span><span style='display:block; white-space:pre;color:#808080;'>index 62d083d24..33ee3509e 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/port1.0/portinstall.tcl
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/port1.0/portinstall.tcl
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -72,9 +72,7 @@ proc portinstall::install_start {args} {
</span> 
 proc portinstall::create_archive {location archive.type} {
     global workpath destpath portpath subport version revision portvariants \
<span style='display:block; white-space:pre;background:#ffe0e0;'>-           epoch configure.cxx_stdlib portinstall::actual_cxx_stdlib \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           portinstall::file_is_binary portinstall::cxx_stdlib_overridden \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           cxx_stdlib PortInfo installPlist \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+           epoch configure.cxx_stdlib cxx_stdlib PortInfo \
</span>            archive.env archive.cmd archive.pre_args archive.args \
            archive.post_args archive.dir depends_lib depends_run
     set archive.env {}
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -248,10 +246,10 @@ proc portinstall::create_archive {location archive.type} {
</span>     puts $fd "@portversion ${version}"
     puts $fd "@portrevision ${revision}"
     puts $fd "@archs [get_canonical_archs]"
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    array set ourvariations $PortInfo(active_variants)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set vlist [lsort -ascii [array names ourvariations]]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set ourvariations $PortInfo(active_variants)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set vlist [lsort -ascii [dict keys $ourvariations]]
</span>     foreach v $vlist {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        if {$ourvariations($v) eq "+"} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if {[dict get $ourvariations $v] eq "+"} {
</span>             puts $fd "@portvariant +${v}"
         }
     }
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -264,10 +262,10 @@ proc portinstall::create_archive {location archive.type} {
</span>                  if {[llength $dep] < 2} {
                      ui_debug "Dependency $depname not found"
                  } else {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-                     array set portinfo [lindex $dep 1]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                     set depver $portinfo(version)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                     set deprev $portinfo(revision)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                     puts $fd "@pkgdep $portinfo(name)-${depver}_${deprev}"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                     lassign $dep depname dep_portinfo
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                     set depver [dict get $dep_portinfo version]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                     set deprev [dict get $dep_portinfo revision]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                     puts $fd "@pkgdep ${depname}-${depver}_${deprev}"
</span>                  }
              }
          }
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -275,9 +273,9 @@ proc portinstall::create_archive {location archive.type} {
</span> 
     set have_fileIsBinary [expr {[option os.platform] eq "darwin"}]
     set binary_files [list]
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    set portinstall::file_is_binary [dict create]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    variable file_is_binary [dict create]
</span>     # also save the contents for our own use later
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    set installPlist [list]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    variable installPlist [list]
</span>     set destpathLen [string length $destpath]
     fs-traverse -depth fullpath [list $destpath] {
         if {[file type $fullpath] eq "directory"} {
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -300,7 +298,7 @@ proc portinstall::create_archive {location archive.type} {
</span>                         lappend binary_files $fullpath
                     }
                     puts $fd "@comment binary:$is_binary"
<span style='display:block; white-space:pre;background:#ffe0e0;'>-                    dict set portinstall::file_is_binary $abspath $is_binary
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    dict set file_is_binary $abspath $is_binary
</span>                 }
             }
         } else {
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -311,14 +309,14 @@ proc portinstall::create_archive {location archive.type} {
</span>         puts $fd "@ignore"
         puts $fd "$relpath"
     }
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    set portinstall::actual_cxx_stdlib [get_actual_cxx_stdlib $binary_files]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    puts $fd "@cxx_stdlib ${portinstall::actual_cxx_stdlib}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if {${portinstall::actual_cxx_stdlib} ne "none"} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set portinstall::cxx_stdlib_overridden [expr {${configure.cxx_stdlib} ne $cxx_stdlib}]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    variable actual_cxx_stdlib [get_actual_cxx_stdlib $binary_files]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    puts $fd "@cxx_stdlib ${actual_cxx_stdlib}"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {${actual_cxx_stdlib} ne "none"} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        variable cxx_stdlib_overridden [expr {${configure.cxx_stdlib} ne $cxx_stdlib}]
</span>     } else {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        set portinstall::cxx_stdlib_overridden 0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        variable cxx_stdlib_overridden 0
</span>     }
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    puts $fd "@cxx_stdlib_overridden ${portinstall::cxx_stdlib_overridden}"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    puts $fd "@cxx_stdlib_overridden ${cxx_stdlib_overridden}"
</span>     close $fd
 
     # Now create the archive
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -341,8 +339,11 @@ proc portinstall::extract_contents {location type} {
</span> proc portinstall::install_main {args} {
     global subport version portpath depends_run revision user_options \
     portvariants requested_variants depends_lib PortInfo epoch \
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    os.platform os.major portarchivetype installPlist porturl \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    portinstall::file_is_binary portinstall::actual_cxx_stdlib portinstall::cxx_stdlib_overridden
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    portarchivetype
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    variable file_is_binary
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    variable actual_cxx_stdlib
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    variable cxx_stdlib_overridden
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    variable installPlist
</span> 
     set oldpwd [pwd]
     if {$oldpwd eq ""} {
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -361,11 +362,9 @@ proc portinstall::install_main {args} {
</span>         set location [file join $install_dir [file tail $archive_path]]
         set current_archive_type [string range [file extension $location] 1 end]
         set contents [extract_contents $location $current_archive_type]
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        set installPlist [lindex $contents 0]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set portinstall::file_is_binary [lindex $contents 1]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        lassign $contents installPlist file_is_binary
</span>         set cxxinfo [extract_archive_metadata $location $current_archive_type cxx_info]
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        set portinstall::actual_cxx_stdlib [lindex $cxxinfo 0]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set portinstall::cxx_stdlib_overridden [lindex $cxxinfo 1]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        lassign $cxxinfo actual_cxx_stdlib cxx_stdlib_overridden
</span>     } else {
         # throws an error if an unsupported value has been configured
         archiveTypeIsSupported $portarchivetype
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -401,9 +400,9 @@ proc portinstall::install_main {args} {
</span>     dict set regref os_platform $os_platform
     dict set regref os_major $os_major
     dict set regref archs [get_canonical_archs]
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    if {${portinstall::actual_cxx_stdlib} ne ""} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        dict set regref cxx_stdlib ${portinstall::actual_cxx_stdlib}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        dict set regref cxx_stdlib_overridden ${portinstall::cxx_stdlib_overridden}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {${actual_cxx_stdlib} ne ""} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        dict set regref cxx_stdlib ${actual_cxx_stdlib}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        dict set regref cxx_stdlib_overridden ${cxx_stdlib_overridden}
</span>     } else {
         # no info in the archive
         global configure.cxx_stdlib cxx_stdlib
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -421,7 +420,7 @@ proc portinstall::install_main {args} {
</span> 
     if {[info exists installPlist]} {
         dict set regref files $installPlist
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        dict set regref binary $portinstall::file_is_binary
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        dict set regref binary $file_is_binary
</span>     }
 
     # portfile info
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/port1.0/portlint.tcl b/src/port1.0/portlint.tcl
</span><span style='display:block; white-space:pre;color:#808080;'>index f09e11b66..c9accb3ae 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/port1.0/portlint.tcl
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/port1.0/portlint.tcl
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -255,7 +255,8 @@ proc portlint::lint_start {args} {
</span> }
 
 proc portlint::lint_main {args} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    global UI_PREFIX name portpath porturl ports_lint_nitpick
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    global UI_PREFIX portpath ports_lint_nitpick lint_required lint_optional
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    global {*}$lint_required {*}$lint_optional
</span>     set portfile ${portpath}/Portfile
     set portdirs [split ${portpath} /]
     set last [llength $portdirs]
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -458,7 +459,7 @@ proc portlint::lint_main {args} {
</span>     
             if {!$hashline
                     && ![regexp {^\s*(?:PortSystem|PortGroup|version|python\.versions|(?:perl5|php|ruby)\.branch(?:es)?|license|[A-Za-z0-9_]+\.setup)\s} $line]
<span style='display:block; white-space:pre;background:#ffe0e0;'>-                    && [string first [option version] $line] != -1} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    && [string first $version $line] != -1} {
</span>                 ui_warn "Line $lineno seems to hardcode the version number, consider using \${version} instead"
                 incr warnings
             }
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -492,13 +493,11 @@ proc portlint::lint_main {args} {
</span> 
     ###################################################################
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    global os.platform os.arch os.version version revision epoch \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           description long_description platforms categories all_variants \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           maintainers license homepage master_sites checksums patchfiles \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    global porturl all_variants patchfiles \
</span>            depends_fetch depends_extract depends_patch \
            depends_lib depends_build depends_run \
            depends_test distfiles fetch.type lint_portsystem lint_platforms \
<span style='display:block; white-space:pre;background:#ffe0e0;'>-           lint_required lint_optional replaced_by conflicts
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+           replaced_by conflicts
</span>     set portarch [get_canonical_archs]
 
     if {!$seen_portsystem} {
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -605,7 +604,7 @@ proc portlint::lint_main {args} {
</span>             if {![info exists variantdesc] || $variantdesc eq ""} {
                 # don't warn about missing descriptions for global variants
                 if {$variantname in $local_variants &&
<span style='display:block; white-space:pre;background:#ffe0e0;'>-                    [variant_desc $porturl $variantname] eq ""} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    [variant_desc $variantname] eq ""} {
</span>                     ui_warn "Variant $variantname does not have a description"
                     incr warnings
                     set desc_ok false
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -613,7 +612,7 @@ proc portlint::lint_main {args} {
</span>                     set variantdesc "(pre-defined variant)"
                 }
             } else {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-                if {[variant_desc $porturl $variantname] ne ""} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                if {[variant_desc $variantname] ne ""} {
</span>                     ui_warn "Variant $variantname overrides global description"
                     incr warnings
                 }
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/port1.0/portlivecheck.tcl b/src/port1.0/portlivecheck.tcl
</span><span style='display:block; white-space:pre;color:#808080;'>index 7c37bd6d9..97d83c9c6 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/port1.0/portlivecheck.tcl
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/port1.0/portlivecheck.tcl
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -64,8 +64,8 @@ proc portlivecheck::livecheck_main {args} {
</span>            livecheck.ignore_sslcert \
            livecheck.compression \
            livecheck.curloptions \
<span style='display:block; white-space:pre;background:#ffe0e0;'>-           homepage portpath workpath \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           master_sites name subport distfiles
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+           homepage portpath \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+           master_sites name subport
</span> 
     set updated 0
     set updated_version "unknown"
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/port1.0/portload.tcl b/src/port1.0/portload.tcl
</span><span style='display:block; white-space:pre;color:#808080;'>index f3d97033d..c3bb348b2 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/port1.0/portload.tcl
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/port1.0/portload.tcl
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -47,12 +47,13 @@ options load.asroot
</span> set_ui_prefix
 
 proc portload::load_main {args} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    global UI_PREFIX prefix subport sudo_user
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set launchctl_path ${portutil::autoconf::launchctl_path}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    global UI_PREFIX prefix subport sudo_user \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+           portstartupitem::load_only portstartupitem::autostart_only \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+           portutil::autoconf::launchctl_path
</span> 
     portstartupitem::foreach_startupitem {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        if {(![info exists ::portstartupitem::load_only] || $si_name in ${::portstartupitem::load_only})
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            && (![info exists ::portstartupitem::autostart_only] || !$::portstartupitem::autostart_only || $si_autostart)} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if {(![info exists load_only] || $si_name in ${load_only})
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            && (![info exists autostart_only] || !$autostart_only || $si_autostart)} {
</span>             if {$si_install} {
                 set path /Library/${si_location}/${si_plist}
             } else {
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -88,6 +89,4 @@ proc portload::load_main {args} {
</span>             }
         }
     }
<span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return
</span> }
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/port1.0/portmain.tcl b/src/port1.0/portmain.tcl
</span><span style='display:block; white-space:pre;color:#808080;'>index 154f38094..c12ece2e7 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/port1.0/portmain.tcl
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/port1.0/portmain.tcl
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -86,18 +86,20 @@ options_export name version revision epoch categories maintainers \
</span> 
 default subport {[portmain::get_default_subport]}
 proc portmain::get_default_subport {} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    global name portpath
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    global name
</span>     if {[info exists name]} {
         return $name
     }
<span style='display:block; white-space:pre;background:#e0ffe0;'>+    global portpath
</span>     return [file tail $portpath]
 }
 default subbuildpath {[portmain::get_subbuildpath]}
 proc portmain::get_subbuildpath {} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    global portpath portbuildpath subport
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    global portbuildpath subport
</span>     if {$subport ne ""} {
         set subdir $subport
     } else {
<span style='display:block; white-space:pre;background:#e0ffe0;'>+        global portpath
</span>         set subdir [file tail $portpath]
     }
     return [file normalize [file join $portbuildpath $subdir]]
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -138,21 +140,23 @@ default os.minor {$os_minor}
</span> default os.arch {$os_arch}
 default os.endian {$os_endian}
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-set macos_version_text {}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if {[option os.platform] eq "darwin"} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set macos_version_text "(macOS ${macos_version}) "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc portmain::report_platform_info {} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    global os.platform os.version os.arch macos_version
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {![info exists os.platform]} {
</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;'>+    set macos_version_text {}
</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;'>+        set macos_version_text "(macOS ${macos_version}) "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    ui_debug "OS ${os.platform}/${os.version} ${macos_version_text}arch ${os.arch}"
</span> }
<span style='display:block; white-space:pre;background:#ffe0e0;'>-ui_debug "OS [option os.platform]/[option os.version] ${macos_version_text}arch [option os.arch]"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+portmain::report_platform_info
</span> 
 default universal_variant {${use_configure}}
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-if {[option os.platform] eq "darwin" && [option os.subplatform] eq "macosx"} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # we're on macOS and can therefore build universal
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    default os.universal_supported yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    default os.universal_supported no
</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;'>+# if we're on macOS and can therefore build universal
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default os.universal_supported {[expr {${os.subplatform} eq "macosx"}]}
</span> default universal_possible {[expr {${os.universal_supported} && [llength ${configure.universal_archs}] >= 2}]}
 
 default compiler.cpath {${prefix}/include}
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -169,7 +173,7 @@ set egid [getegid]
</span> default worksymlink {[file normalize [file join $portpath work]]}
 default distpath {[file normalize [file join $portdbpath distfiles ${dist_subdir}]]}
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-default use_xcode {[expr {[option build.type] eq "xcode" || !([file exists /usr/lib/libxcselect.dylib] || [option os.major] >= 20) || ![file executable /Library/Developer/CommandLineTools/usr/bin/make]}]}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default use_xcode {[expr {${build.type} eq "xcode" || !([file exists /usr/lib/libxcselect.dylib] || ${os.major} >= 20) || ![file executable /Library/Developer/CommandLineTools/usr/bin/make]}]}
</span> 
 proc portmain::main {args} {
     return 0
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/port1.0/portreload.tcl b/src/port1.0/portreload.tcl
</span><span style='display:block; white-space:pre;color:#808080;'>index 195c4f7fc..f4fe47614 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/port1.0/portreload.tcl
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/port1.0/portreload.tcl
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -46,8 +46,8 @@ options reload.asroot
</span> set_ui_prefix
 
 proc portreload::reload_main {args} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    global UI_PREFIX prefix subport sudo_user
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set launchctl_path ${portutil::autoconf::launchctl_path}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    global UI_PREFIX prefix subport sudo_user \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+           portutil::autoconf::launchctl_path
</span> 
     portstartupitem::foreach_startupitem {
         if {$si_install} {
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/port1.0/porttest.tcl b/src/port1.0/porttest.tcl
</span><span style='display:block; white-space:pre;color:#808080;'>index 335d29a93..864eba3bb 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/port1.0/porttest.tcl
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/port1.0/porttest.tcl
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -74,7 +74,7 @@ proc porttest::test_archs {} {
</span>     set has_wanted_archs [dict exists $file_archs $wanted_archs]
     dict unset file_archs $wanted_archs
     if {[dict size $file_archs] > 0} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        set msg "[option name] is configured to build "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set msg "[option subport] is configured to build "
</span>         if {$wanted_archs eq "noarch"} {
             append msg "no architecture-specific files,"
         } else {
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -89,7 +89,7 @@ proc porttest::test_archs {} {
</span>         }
         ui_warn $msg
     } elseif {$wanted_archs ne "noarch" && !${has_wanted_archs}} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        ui_warn "[option name] is configured to build for the architecture(s) '$wanted_archs',\
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ui_warn "[option subport] is configured to build for the architecture(s) '$wanted_archs',\
</span>                     but did not install any Mach-O files."
     }
     machista::destroy_handle $handle
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -101,7 +101,7 @@ proc porttest::test_start {args} {
</span> }
 
 proc porttest::test_main {args} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    global subport test.run
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    global test.run
</span> 
     # built-in tests
     porttest::test_archs
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/port1.0/porttrace.tcl b/src/port1.0/porttrace.tcl
</span><span style='display:block; white-space:pre;color:#808080;'>index f830e7512..1bd0fc767 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/port1.0/porttrace.tcl
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/port1.0/porttrace.tcl
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -129,7 +129,7 @@ namespace eval porttrace {
</span>     # @param workpath The $workpath of the current installation
     proc trace_start {workpath} {
         global \
<span style='display:block; white-space:pre;background:#ffe0e0;'>-            developer_dir distpath env macportsuser os.platform configure.sdkroot \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            developer_dir distpath env macportsuser configure.sdkroot \
</span>             portpath prefix use_xcode
 
         variable fifo
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -229,6 +229,7 @@ namespace eval porttrace {
</span>         set xcode_paths [list]
         lappend xcode_paths "/var/db/xcode_select_link"
         lappend xcode_paths "/var/db/mds"
<span style='display:block; white-space:pre;background:#e0ffe0;'>+        # XXX Tcl9 unsafe
</span>         lappend xcode_paths [file normalize ~${macportsuser}/Library/Preferences/com.apple.dt.Xcode.plist]
         lappend xcode_paths "$env(HOME)/Library/Preferences/com.apple.dt.Xcode.plist"
 
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/port1.0/portunload.tcl b/src/port1.0/portunload.tcl
</span><span style='display:block; white-space:pre;color:#808080;'>index a0ea0aede..205f97e99 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/port1.0/portunload.tcl
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/port1.0/portunload.tcl
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -47,8 +47,8 @@ options unload.asroot
</span> set_ui_prefix
 
 proc portunload::unload_main {args} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    global UI_PREFIX prefix subport sudo_user
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set launchctl_path ${portutil::autoconf::launchctl_path}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    global UI_PREFIX prefix subport sudo_user \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+           portutil::autoconf::launchctl_path
</span> 
     portstartupitem::foreach_startupitem {
         if {$si_install} {
<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 d280737ee..eceb167eb 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,11 +59,12 @@ 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:#e0ffe0;'>+    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;'>@@ -75,7 +76,8 @@ 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;'>-    return [info exists ::$option]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    global $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;'>@@ -84,8 +86,10 @@ 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;'>-    if {![info exists ::user_options($option)]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set ::$option $args
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    global user_options
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {![info exists user_options($option)]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        global $option
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set $option $args
</span>     }
 }
 
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -95,8 +99,10 @@ 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;'>-    if {![info exists ::user_options($option)]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        lappend ::$option {*}$args
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    global user_options
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {![info exists user_options($option)]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        global $option
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        lappend $option {*}$args
</span>     }
 }
 
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -106,11 +112,13 @@ 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;'>-    if {![info exists ::user_options($option)]} {
</span><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;'>+    global user_options
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {![info exists user_options($option)]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        global $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;'>@@ -121,9 +129,10 @@ 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;'>-    if {![info exists ::user_options($option)] && [info exists ::$option]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    global user_options $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;'>@@ -134,9 +143,10 @@ 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;'>-    if {![info exists ::user_options($option)] && [info exists ::$option]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    global user_options $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;'>@@ -147,11 +157,12 @@ 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;'>-    if {![info exists ::user_options($option)] && [info exists ::$option]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    global user_options $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;'>@@ -182,12 +193,13 @@ 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:#e0ffe0;'>+    global 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;'>@@ -209,21 +221,25 @@ 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;'>-    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:#e0ffe0;'>+    global deprecated_options
</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;'>+        global subport
</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;'>+        global $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;'>+        global $newoption
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        $option [set $newoption]
</span>     }
 }
 
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -241,8 +257,9 @@ proc get_deprecated_options {} {
</span> # @param option name of the option
 # @param newoption name of a superseding option
 proc option_deprecate {option {newoption ""} } {
<span style='display:block; white-space:pre;background:#e0ffe0;'>+    global deprecated_options
</span>     # If a new option is specified, default the option to $newoption
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    set ::deprecated_options($option) [list $newoption 0]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set deprecated_options($option) [list $newoption 0]
</span>     # Create a normal option for compatibility
     options $option
     # Register a proc for handling the deprecation
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -255,12 +272,14 @@ 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;'>-    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;'>+    global option_procs
</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;'>+        lappend 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 [list read write unset] option_proc_trace
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        global $option
</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>     }
 }
 
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -268,24 +287,27 @@ proc option_proc {option args} {
</span> # trace handler for option reads. Calls option procedures with correct arguments.
 proc option_proc_trace {optionName index op} {
     set optionName [namespace tail $optionName]
<span style='display:block; white-space:pre;background:#e0ffe0;'>+    global option_procs
</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;'>+            global $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;'>+            global $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 [list 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;'>@@ -459,20 +481,19 @@ 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;'>-    if {[info exists ::option_defaults($option)]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    global 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 [list read write unset] default_check
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        trace remove variable $option [list read write unset] default_check
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    } elseif {[info exists $option]} {
</span>         # 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:#ffe0e0;'>-            return
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        return
</span>     }
<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 [list 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
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -480,19 +501,20 @@ proc default {option val} {
</span> # for default variable values
 proc default_check {varName index op} {
     set optionName [namespace tail $varName]
<span style='display:block; white-space:pre;background:#e0ffe0;'>+    global option_defaults $optionName
</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 [list 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 [list 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;'>@@ -503,6 +525,7 @@ proc default_check {varName index op} {
</span> proc handle_option_string {option action args} {
     switch $action {
         set {
<span style='display:block; white-space:pre;background:#e0ffe0;'>+            global $option
</span>             set args [join $args]
 
             set fulllist [list]
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -531,7 +554,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;'>@@ -539,18 +562,12 @@ proc handle_option_string {option action args} {
</span> # variant <provides> [<provides> ...] [requires <requires> [<requires>]]
 # Portfile level procedure to provide support for declaring variants
 proc variant {args} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    global PortInfo
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span>     # Each key in PortInfo(vinfo) maps to an array which contains the
     # following keys:
     #   * conflicts
     #   * description
     #   * is_default: This key exists iff the variant is a default variant.
     #   * requires
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    if {![info exists PortInfo(vinfo)]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set PortInfo(vinfo) [dict create]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span>     set len [llength $args]
     if {$len < 2} {
         return -code error "Malformed variant specification"
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -594,6 +611,10 @@ proc variant {args} {
</span>         # This variant was already defined. Remove it from the dlist.
         variant_remove_ditem $variant_provides
     } else {
<span style='display:block; white-space:pre;background:#e0ffe0;'>+        global PortInfo
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if {![info exists PortInfo(vinfo)]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            set PortInfo(vinfo) [dict create]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span> 
         # Set conflicts.
         set vconflicts [join [lsort [ditem_key $ditem conflicts]]]
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -606,7 +627,7 @@ proc variant {args} {
</span> 
         # read global variant description, if none given
         if {$vdesc eq ""} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-            set vdesc [variant_desc $::porturl $variant_provides]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            set vdesc [variant_desc $variant_provides]
</span>         }
 
         # Set description.
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -629,13 +650,15 @@ proc variant {args} {
</span>     }
 
     # Finally append the ditem to the dlist.
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    lappend ::all_variants $ditem
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    global all_variants
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    lappend all_variants $ditem
</span> }
 
 # variant_isset name
 # Returns 1 if variant name selected, otherwise 0
 proc variant_isset {name} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    if {[info exists ::variations($name)] && $::variations($name) eq "+"} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    global variations
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[info exists variations($name)] && $variations($name) eq "+"} {
</span>         return 1
     }
     return 0
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -644,7 +667,8 @@ proc variant_isset {name} {
</span> # variant_set name
 # Sets variant to run for current portfile
 proc variant_set {name} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    set ::variations($name) +
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    global variations
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set variations($name) +
</span> }
 
 # variant_remove_ditem name
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -666,19 +690,21 @@ proc variant_remove_ditem {name} {
</span> # variant_delete name
 # completely delete the named variant from the port
 proc variant_delete {name} {
<span style='display:block; white-space:pre;background:#e0ffe0;'>+    global PortInfo
</span>     variant_remove_ditem $name
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    if {[info exists ::PortInfo(variants)]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set ::PortInfo(variants) [ldelete $::PortInfo(variants) $name]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[info exists PortInfo(variants)]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set PortInfo(variants) [ldelete $PortInfo(variants) $name]
</span>     }
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    if {[info exists ::PortInfo(vinfo)]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        dict unset ::PortInfo(vinfo) $name
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[info exists PortInfo(vinfo)]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        dict unset PortInfo(vinfo) $name
</span>     }
 }
 
 # variant_exists name
 # determine if a variant exists.
 proc variant_exists {name} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    if {[info exists ::PortInfo(variants)] && $name in $::PortInfo(variants)} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    global PortInfo
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[info exists PortInfo(variants)] && $name in $PortInfo(variants)} {
</span>         return 1
     }
 
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -721,11 +747,10 @@ proc load_variant_desc_file {descfile} {
</span> ##
 # Get description for a variant from global descriptions file
 #
<span style='display:block; white-space:pre;background:#ffe0e0;'>-# @param porturl url to a port
</span> # @param variant name
 # @return description from descriptions file or an empty string
<span style='display:block; white-space:pre;background:#ffe0e0;'>-proc variant_desc {porturl variant} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    global variant_descs_global
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc variant_desc {variant} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    global variant_descs_global porturl
</span> 
     set descfile [getportresourcepath $porturl "port1.0/variant_descriptions.conf" no]
     load_variant_desc_file $descfile
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1533,7 +1558,7 @@ proc target_run {ditem} {
</span>                 }
 
                 # For {} blocks in the Portfile, export DEVELOPER_DIR to prevent Xcode binaries if shouldn't be used
<span style='display:block; white-space:pre;background:#ffe0e0;'>-                set ::env(DEVELOPER_DIR) [option configure.developer_dir]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                set env(DEVELOPER_DIR) [option configure.developer_dir]
</span>                 if {$result == 0} {
                     foreach pre [ditem_key $ditem pre] {
                         ui_debug "Executing $pre"
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1564,7 +1589,7 @@ proc target_run {ditem} {
</span>                     }
                 }
                 # Keep the environment clean by unsetting DEVELOPER_DIR
<span style='display:block; white-space:pre;background:#ffe0e0;'>-                unset -nocomplain ::env(DEVELOPER_DIR)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                unset -nocomplain env(DEVELOPER_DIR)
</span> 
                 # Check dependencies & file creations outside workpath.
                 if {[tbool ports_trace]
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1689,8 +1714,9 @@ proc eval_targets {target} {
</span>         } elseif {$target eq "activate"} {
             set regref [registry_open $subport $version $revision $portvariants ""]
             # Set requested flag in the registry if in options
<span style='display:block; white-space:pre;background:#ffe0e0;'>-            if {[info exists ::user_options(ports_requested)]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                registry_prop_store $regref requested $::user_options(ports_requested)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            global user_options
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            if {[info exists user_options(ports_requested)]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                registry_prop_store $regref requested $user_options(ports_requested)
</span>             }
             if {[registry_prop_retr $regref active] != 0} {
                 # Something to close the registry entry may be called here, if it existed.
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -2018,7 +2044,7 @@ proc variant_run {ditem} {
</span>     # test for conflicting variants
     foreach v [ditem_key $ditem conflicts] {
         if {[variant_isset $v]} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-            ui_error "[option name]: Variant $name conflicts with $v"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            ui_error "[option subport]: Variant $name conflicts with $v"
</span>             return 1
         }
     }
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -2026,7 +2052,7 @@ proc variant_run {ditem} {
</span>     # execute proc with same name as variant.
     if {[catch "variant-${name}" result]} {
         ui_debug $::errorInfo
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        ui_error "[option name]: Error executing $name: $result"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ui_error "[option subport]: Error executing $name: $result"
</span>         return 1
     }
     return 0
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -2051,11 +2077,10 @@ proc canonicalize_variants {variants {sign "+"}} {
</span> }
 
 proc eval_variants {variations} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    global PortInfo requested_variations portvariants
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set dlist $::all_variants
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    global PortInfo all_variants subport
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set dlist $all_variants
</span>     upvar $variations upvariations
     lassign [choose_variants $dlist upvariations] chosen negated
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    set portname [option subport]
</span> 
     # Check to make sure the requested variations are available with this
     # port, if one is not, warn the user and remove the variant from the
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -2063,7 +2088,7 @@ proc eval_variants {variations} {
</span>     foreach key [array names upvariations *] {
         if {![info exists PortInfo(variants)] ||
             $key ni $PortInfo(variants)} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-            ui_debug "Requested variant $upvariations($key)$key is not provided by port $portname."
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            ui_debug "Requested variant $upvariations($key)$key is not provided by port $subport."
</span>             array unset upvariations $key
         }
     }
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -2100,12 +2125,14 @@ proc eval_variants {variations} {
</span>             foreach choice $chosen {
                 lappend chosenlist +[ditem_key $choice provides]
             }
<span style='display:block; white-space:pre;background:#ffe0e0;'>-            ui_error "Inconsistent variant specification: $portname variant +$thevar is required by at least one of $chosenlist, but specified -$thevar"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            ui_error "Inconsistent variant specification: $subport variant +$thevar is required by at least one of $chosenlist, but specified -$thevar"
</span>             return 1
         }
         lappend activevariants $thevar "+"
     }
 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+    global requested_variations portvariants
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span>     # Record a canonical variant string, used e.g. in accessing the registry
     set portvariants [canonicalize_variants $activevariants]
 
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -2130,7 +2157,8 @@ proc eval_variants {variations} {
</span>             lappend negated_list $thevar "-"
         }
     }
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    set ::requested_variants [canonicalize_variants $requested_list "+"][canonicalize_variants $negated_list "-"]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    global requested_variants
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set requested_variants [canonicalize_variants $requested_list "+"][canonicalize_variants $negated_list "-"]
</span> 
     return 0
 }
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -2183,22 +2211,24 @@ proc check_variants {target} {
</span> 
 # add the default universal variant if appropriate
 proc universal_setup {args} {
<span style='display:block; white-space:pre;background:#e0ffe0;'>+    global configure.universal_archs universal_variant os.universal_supported \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+           use_xmkmf configure.compiler
</span>     if {[variant_exists universal]} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        if {[llength [option configure.universal_archs]] >= 2} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if {[llength ${configure.universal_archs}] >= 2} {
</span>             ui_debug "universal variant already exists, so not adding the default one"
         } else {
             ui_debug "removing universal variant due to < 2 supported universal_archs"
             variant_delete universal
         }
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    } elseif {[exists universal_variant] && ![option universal_variant]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    } elseif {[info exists universal_variant] && !$universal_variant} {
</span>         ui_debug "universal_variant is false, so not adding the default universal variant"
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    } elseif {[exists use_xmkmf] && [option use_xmkmf]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    } elseif {[tbool use_xmkmf]} {
</span>         ui_debug "using xmkmf, so not adding the default universal variant"
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    } elseif {![exists os.universal_supported] || ![option os.universal_supported]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    } elseif {![tbool os.universal_supported]} {
</span>         ui_debug "OS doesn't support universal builds, so not adding the default universal variant"
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    } elseif {[llength [option configure.universal_archs]] <= 1} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    } elseif {[llength ${configure.universal_archs}] <= 1} {
</span>         ui_debug "only one arch supported, so not adding the default universal variant"
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    } elseif {![portconfigure::arch_flag_supported [option configure.compiler] yes]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    } elseif {![portconfigure::arch_flag_supported ${configure.compiler} yes]} {
</span>         ui_debug "Compiler doesn't support universal builds, so not adding the default universal variant"
     } else {
         ui_debug "adding the default universal variant"
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -2210,12 +2240,13 @@ proc universal_setup {args} {
</span> 
 # constructor for target object
 proc target_new {name procedure} {
<span style='display:block; white-space:pre;background:#e0ffe0;'>+    global targets
</span>     set ditem [ditem_create]
 
     ditem_key $ditem name $name
     ditem_key $ditem procedure $procedure
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    lappend ::targets $ditem
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    lappend targets $ditem
</span> 
     return $ditem
 }
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -3130,7 +3161,6 @@ proc validate_macportsuser {} {
</span> 
 # run code as a specified user
 proc exec_as_uid {uid code} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    global macportsuser
</span>     set oldeuid [geteuid]
     if {$oldeuid != $uid} {
         if {$oldeuid != 0} {
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -3306,7 +3336,7 @@ proc get_canonical_archflags {{tool cc}} {
</span> 
 # check that the selected archs are supported
 proc check_supported_archs {} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    global supported_archs build_arch universal_archs configure.build_arch configure.universal_archs subport
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    global supported_archs build_arch universal_archs configure.build_arch subport
</span>     if {$supported_archs eq "noarch"} {
         return 0
     } elseif {[variant_exists universal] && [variant_isset universal]} {
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -3549,10 +3579,9 @@ proc _archive_available {} {
</span>         set site $sites_entry
     }
     if {[string index $site end] ne "/"} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        append site "/[option archive.subdir]"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        append site [option archive.subdir]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        append site /
</span>     }
<span style='display:block; white-space:pre;background:#e0ffe0;'>+    append site [option archive.subdir]
</span>     set url [portfetch::assemble_url $site $archivename]
     ui_debug "Fetching $archivename archive size"
     # curl getsize can return -1 instead of throwing an error for
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/port1.0/tests/portutil.test b/src/port1.0/tests/portutil.test
</span><span style='display:block; white-space:pre;color:#808080;'>index 8af7883a9..fd062c5b9 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/port1.0/tests/portutil.test
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/port1.0/tests/portutil.test
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -538,7 +538,7 @@ test eval_targets {
</span> 
 } -cleanup {
     mportclose $mport
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    file delete -force $filespath ${pwd}/build ${pwd}/distfiles
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    file delete -force $filespath ${pwd}/build ${pwd}/distfiles ${pwd}/cache
</span> 
 } -result "Eval_targets successful."
 
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -713,8 +713,7 @@ test variant_new {
</span> test handle_default_variants {
     Handle default variants unit test.
 } -body {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    global PortInfo
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    global variations
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    global PortInfo variations
</span> 
     array set variations {}
 
</pre><pre style='margin:0'>

</pre>