<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/d5ecda98d56985aa9c257a902ad13ffc5c592da8">https://github.com/macports/macports-base/commit/d5ecda98d56985aa9c257a902ad13ffc5c592da8</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 d5ecda98d Allow portindex -p to override arbitrary variables
</span>d5ecda98d is described below
<span style='display:block; white-space:pre;color:#808000;'>commit d5ecda98d56985aa9c257a902ad13ffc5c592da8
</span>Author: Joshua Root <jmr@macports.org>
AuthorDate: Tue Apr 15 13:48:16 2025 +1000
<span style='display:block; white-space:pre;color:#404040;'> Allow portindex -p to override arbitrary variables
</span><span style='display:block; white-space:pre;color:#404040;'>
</span><span style='display:block; white-space:pre;color:#404040;'> Files containing overrides for each supported platform will be added to
</span><span style='display:block; white-space:pre;color:#404040;'> an appropriate repo for the use of the portindex job.
</span><span style='display:block; white-space:pre;color:#404040;'>
</span><span style='display:block; white-space:pre;color:#404040;'> Closes: https://trac.macports.org/ticket/71755
</span><span style='display:block; white-space:pre;color:#404040;'> Closes: https://github.com/macports/macports-base/pull/361
</span>---
src/macports1.0/macports.tcl | 18 ++++++
src/port/portindex.tcl | 131 ++++++++++++++++++++++++-------------------
2 files changed, 91 insertions(+), 58 deletions(-)
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/macports1.0/macports.tcl b/src/macports1.0/macports.tcl
</span><span style='display:block; white-space:pre;color:#808080;'>index 4139f2bff..3ed5ee0c4 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/macports1.0/macports.tcl
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/macports1.0/macports.tcl
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1898,6 +1898,24 @@ proc mportshutdown {} {
</span> registry::close
}
<span style='display:block; white-space:pre;background:#e0ffe0;'>+# Override variables. Used by portindex to evaluate Portfiles as though
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# on a different platform.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# vars: a list of pairs of variable names and their desired values.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc macports::override_vars {vars} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ foreach {varname value} $vars {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # only allow overrides of existing variables in the macports namespace
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[namespace which -variable ::macports::${varname}] eq ""} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ui_warn "Not overriding $varname because it does not exist in the macports namespace"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ continue
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # Remove any traces that might overwrite the var
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ foreach t [trace info variable ::macports::${varname}] {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ trace remove variable ::macports::${varname} {*}$t
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ variable $varname $value
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> # link plist for xcode 4.3's benefit
proc macports::copy_xcode_plist {target_homedir} {
variable user_home; variable macportsuser
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/port/portindex.tcl b/src/port/portindex.tcl
</span><span style='display:block; white-space:pre;color:#808080;'>index 1ef950267..0d6349e6b 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/port/portindex.tcl
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/port/portindex.tcl
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,5 +1,5 @@
</span> #!@TCLSH@
<span style='display:block; white-space:pre;background:#ffe0e0;'>-# -*- coding: utf-8; mode: tcl; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- vim:fenc=utf-8:filetype=tcl:et:sw=4:ts=4:sts=4
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# -*- coding: utf-8; mode: tcl; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- vim:fenc=utf-8:ft=tcl:et:sw=4:ts=4:sts=4
</span> # Traverse through all ports, creating an index and archiving port directories
# if requested
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -16,17 +16,17 @@ set stats [dict create \
</span> set extended_mode 0
array set ui_options [list ports_no_old_index_warning 1]
array set global_options [list ports_no_load_quick_index 1]
<span style='display:block; white-space:pre;background:#ffe0e0;'>-set port_options [list]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+set var_overrides [list]
</span>
# Pass global options into mportinit
mportinit ui_options global_options
# Standard procedures
<span style='display:block; white-space:pre;background:#ffe0e0;'>-proc print_usage args {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- puts "Usage: $::argv0 \[-dfe\] \[-o output directory\] \[-p plat_ver_\[cxxlib_\]arch\] \[directory\]"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc print_usage {} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ puts "Usage: $::argv0 \[-defx\] \[-o output directory\] \[-p plat_ver_arch\] \[directory\]"
</span> puts "-d:\tOutput debugging information"
<span style='display:block; white-space:pre;background:#ffe0e0;'>- puts "-f:\tDo a full re-index instead of updating"
</span> puts "-e:\tExit code indicates if ports failed to parse"
<span style='display:block; white-space:pre;background:#e0ffe0;'>+ puts "-f:\tDo a full re-index instead of updating"
</span> puts "-o:\tOutput all files to specified directory"
puts "-p:\tPretend to be on another platform"
puts "-x:\tInclude extra (optional) information in the PortIndex, like variant description and port notes."
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -77,7 +77,7 @@ proc _index_from_portinfo {portinfo {is_subport no}} {
</span> return [list [dict get $portinfo name] $len $keep_portinfo]
}
<span style='display:block; white-space:pre;background:#ffe0e0;'>-proc _open_port {portdir absportdir port_options {subport {}}} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc _open_port {portdir absportdir {subport {}}} {
</span> global macports::prefix
# Make sure $prefix expands to '${prefix}' so that the PortIndex is
# portable across prefixes, see https://trac.macports.org/ticket/53169 and
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -86,7 +86,9 @@ proc _open_port {portdir absportdir port_options {subport {}}} {
</span> macports_try -pass_signal {
set prefix {${prefix}}
if {$subport ne {}} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- dict set port_options subport $subport
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set port_options [dict create subport $subport]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set port_options {}
</span> }
set mport [mportopen file://$absportdir $port_options]
} finally {
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -102,7 +104,7 @@ proc _open_port {portdir absportdir port_options {subport {}}} {
</span> }
proc pindex {portdir jobnum {subport {}}} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- global directory full_reindex qindex oldmtime ui_options port_options
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ global directory full_reindex qindex oldmtime ui_options
</span> try {
tsv::set status $jobnum 1
set absportdir [file join $directory $portdir]
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -149,7 +151,7 @@ proc pindex {portdir jobnum {subport {}}} {
</span> }
macports_try -pass_signal {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- set portinfo [_open_port $portdir $absportdir $port_options $subport]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set portinfo [_open_port $portdir $absportdir $subport]
</span> if {$is_subport} {
puts "Adding subport $subport"
} else {
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -188,7 +190,7 @@ proc pindex {portdir jobnum {subport {}}} {
</span>
proc init_threads {} {
global worker_init_script qindex keepkeys ui_options \
<span style='display:block; white-space:pre;background:#ffe0e0;'>- global_options port_options directory \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ global_options var_overrides directory \
</span> full_reindex oldfd oldmtime maxjobs poolid pending_jobs \
nextjobnum
append worker_init_script \
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -196,7 +198,6 @@ proc init_threads {} {
</span> [list set keepkeys $keepkeys] \n \
[list array set ui_options [array get ui_options]] \n \
[list array set global_options [array get global_options]] \n \
<span style='display:block; white-space:pre;background:#ffe0e0;'>- [list set port_options $port_options] \n \
</span> [list set directory $directory] \n \
[list set full_reindex $full_reindex] \n \
[list mportinit ui_options global_options] \n \
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -205,11 +206,15 @@ proc init_threads {} {
</span> global outpath
append worker_init_script \n \
[list set outpath $outpath] \n \
<span style='display:block; white-space:pre;background:#ffe0e0;'>- {set oldfd [open $outpath r]} \n
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {set oldfd [open $outpath r]}
</span> }
if {[info exists oldmtime]} {
append worker_init_script \
<span style='display:block; white-space:pre;background:#ffe0e0;'>- [list set oldmtime $oldmtime] \n
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ \n [list set oldmtime $oldmtime]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {$var_overrides ne {}} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ append worker_init_script \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ \n [list macports::override_vars $var_overrides]
</span> }
set maxjobs [macports::get_parallel_jobs no]
set poolid [tpool::create -minworkers 1 -maxworkers $maxjobs -initcmd $worker_init_script]
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -304,68 +309,78 @@ if {$argc > 8} {
</span> exit 1
}
<span style='display:block; white-space:pre;background:#ffe0e0;'>-for {set i 0} {$i < $argc} {incr i} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set arg [lindex $argv $i]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- switch -regex -- $arg {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- {^-.+} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if {$arg eq "-d"} { # Turn on debug output
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc parse_args {} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ global argc argv
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ for {set i 0} {$i < $argc} {incr i} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set arg [lindex $argv $i]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ switch -glob -- $arg {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ -d { # Turn on debug output
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ global ui_options
</span> set ui_options(ports_debug) yes
<span style='display:block; white-space:pre;background:#ffe0e0;'>- } elseif {$arg eq "-o"} { # Set output directory
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ -e { # Non-zero exit code on errors
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ global permit_error
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set permit_error 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ -f { # Completely rebuild index
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ global full_reindex
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set full_reindex 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ -o { # Set output directory
</span> incr i
<span style='display:block; white-space:pre;background:#e0ffe0;'>+ global outdir
</span> set outdir [file join [pwd] [lindex $argv $i]]
<span style='display:block; white-space:pre;background:#ffe0e0;'>- } elseif {$arg eq "-p"} { # Set platform
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ -p { # Simulate platform
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ global var_overrides
</span> incr i
<span style='display:block; white-space:pre;background:#ffe0e0;'>- set platlist [split [lindex $argv $i] _]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set os_platform [lindex $platlist 0]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set os_major [lindex $platlist 1]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if {[llength $platlist] > 3} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set cxx_stdlib [lindex $platlist 2]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- switch -- $cxx_stdlib {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- libcxx {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set cxx_stdlib libc++
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- libstdcxx {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set cxx_stdlib libstdc++
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- default {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- puts stderr "Unknown C++ standard library: $cxx_stdlib (use libcxx or libstdcxx)"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- print_usage
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- exit 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set os_arch [lindex $platlist 3]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set plat_arg [lindex $argv $i]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[string match file:* $plat_arg]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # Read variables to override from a file
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set filename [string range $plat_arg [string first : $plat_arg]+1 end]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set fd [open $filename r]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ gets $fd var_overrides
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ close $fd
</span> } else {
<span style='display:block; white-space:pre;background:#e0ffe0;'>+ # Use basic variable overrides based on platform name
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set platlist [split $plat_arg _]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[llength $platlist] != 3} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ puts stderr "Platform specifier should be of the form plat_ver_arch"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ print_usage
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ exit 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set os_platform [lindex $platlist 0]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set os_major [lindex $platlist 1]
</span> if {$os_platform eq "macosx"} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- if {$os_major < 10} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set cxx_stdlib libstdc++
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set cxx_stdlib libc++
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set cxx_stdlib [expr {$os_major < 10 ? "libstdc++" : "libc++"}]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ lappend var_overrides macports::os_subplatform $os_platform \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ macports::cxx_stdlib $cxx_stdlib
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set os_platform darwin
</span> }
set os_arch [lindex $platlist 2]
<span style='display:block; white-space:pre;background:#e0ffe0;'>+ lappend var_overrides macports::os_platform $os_platform \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ macports::os_major $os_major \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ macports::os_version ${os_major}.0.0 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ macports::os_arch $os_arch
</span> }
<span style='display:block; white-space:pre;background:#ffe0e0;'>- if {$os_platform eq "macosx"} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- lappend port_options os.subplatform $os_platform os.universal_supported yes cxx_stdlib $cxx_stdlib
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set os_platform darwin
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- lappend port_options os.platform $os_platform os.major $os_major os.version ${os_major}.0.0 os.arch $os_arch
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- } elseif {$arg eq "-f"} { # Completely rebuild index
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set full_reindex 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- } elseif {$arg eq "-x"} { # Build extended portindex (include extra information , eg.: notes, variant description, conflicts etc.)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ -x { # Build extended portindex (include extra information , eg.: notes, variant description, conflicts etc.)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ global extended_mode
</span> set extended_mode 1
<span style='display:block; white-space:pre;background:#ffe0e0;'>- } elseif {$arg eq "-e"} { # Non-zero exit code on errors
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set permit_error 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ -* {
</span> puts stderr "Unknown option: $arg"
print_usage
exit 1
}
<span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- default {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set directory [file join [pwd] $arg]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ default {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ global directory
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set directory [file join [pwd] $arg]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span> }
}
}
<span style='display:block; white-space:pre;background:#e0ffe0;'>+parse_args
</span>
if {![info exists directory]} {
set directory .
</pre><pre style='margin:0'>
</pre>