<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/7be167c23956c184920354a66f57469bad70b659">https://github.com/macports/macports-base/commit/7be167c23956c184920354a66f57469bad70b659</a></p>
<pre style="white-space: pre; background: #F8F8F8"><span style='display:block; white-space:pre;color:#808000;'>commit 7be167c23956c184920354a66f57469bad70b659
</span>Author: Joshua Root <jmr@macports.org>
AuthorDate: Wed Nov 1 02:39:08 2023 +1100
<span style='display:block; white-space:pre;color:#404040;'> _upgrade: set newly installed ports' variants better
</span><span style='display:block; white-space:pre;color:#404040;'>
</span><span style='display:block; white-space:pre;color:#404040;'> Rather than inheriting all the variants of the depending port in this
</span><span style='display:block; white-space:pre;color:#404040;'> case, apply those requested on the command line and in variants.conf,
</span><span style='display:block; white-space:pre;color:#404040;'> adding +universal if required to get archs compatible with those of the
</span><span style='display:block; white-space:pre;color:#404040;'> depending port. This also adds error reporting in this case if the
</span><span style='display:block; white-space:pre;color:#404040;'> archs cannot be made compatible.
</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/67637
</span>---
src/macports1.0/macports.tcl | 74 +++++++++++++++++++++++++++++++++++++++-----
1 file changed, 66 insertions(+), 8 deletions(-)
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/macports1.0/macports.tcl b/src/macports1.0/macports.tcl
</span><span style='display:block; white-space:pre;color:#808080;'>index 6b8b62333..6facb63ac 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;'>@@ -2521,7 +2521,7 @@ proc macports::_upgrade_mport_deps {mport target} {
</span> # check that the dep has the required archs
set active_archs [_active_archs $dep_portname]
if {[_deptype_needs_archcheck $deptype] && $active_archs ni {{} noarch}
<span style='display:block; white-space:pre;background:#ffe0e0;'>- && $required_archs ne "noarch" && $dep_portname ni $depends_skip_archcheck} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ && $required_archs ne "noarch" && [lsearch -exact -nocase $depends_skip_archcheck $dep_portname] == -1} {
</span> set missing [list]
foreach arch $required_archs {
if {$arch ni $active_archs} {
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -3636,8 +3636,8 @@ proc mportdepends {mport {target {}} {recurseDeps 1} {skipSatisfied 1} {accDeps
</span> }
set check_archs 0
<span style='display:block; white-space:pre;background:#ffe0e0;'>- if {$dep_portname ne "" && [_deptype_needs_archcheck $deptype]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- && $dep_portname ni $depends_skip_archcheck} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {$dep_portname ne "" && [macports::_deptype_needs_archcheck $deptype]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ && [lsearch -exact -nocase $depends_skip_archcheck $dep_portname] == -1} {
</span> set check_archs 1
}
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -4069,14 +4069,18 @@ proc macports::_upgrade {portname dspec variationslist optionslist {depscachenam
</span> if {![info exists porturl]} {
set porturl file://./
}
<span style='display:block; white-space:pre;background:#ffe0e0;'>- # Grab the variations from the parent
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- upvar 2 variations variations
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # Merge in global variants
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ array set variations $variationslist
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ foreach {variation value} [array get macports::global_variations] {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {![info exists variations($variation)]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set variations($variation) $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;'>+ ui_debug "fully merged portvariants: [array get variations]"
</span> # Don't inherit requested status from the depending port
unset -nocomplain options(ports_requested)
<span style='display:block; white-space:pre;background:#ffe0e0;'>- if {[catch {set mport [mportopen $porturl [array get options] [array get variations]]} result]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ui_debug $::errorInfo
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ui_error "Unable to open port: $result"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[catch {_mport_open_with_archcheck $porturl $dspec $parentmport [array get options] [array get variations]} mport]} {
</span> return 1
}
# While we're at it, update the portinfo
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -4601,6 +4605,60 @@ proc macports::_upgrade {portname dspec variationslist optionslist {depscachenam
</span> return 0
}
<span style='display:block; white-space:pre;background:#e0ffe0;'>+# Open the given port, adding +universal if needed to satisfy the arch
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# requirements of the dependent mport.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc macports::_mport_open_with_archcheck {porturl depspec dependent_mport options variations} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[catch {set mport [mportopen $porturl $options $variations]} result]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ui_debug $::errorInfo
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ui_error "Unable to open port ($depspec): $result"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ error "mportopen failed"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ array set portinfo [mportinfo $mport]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[info exists portinfo(installs_libs)] && !$portinfo(installs_libs)} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return $mport
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set skip_archcheck [_mportkey $dependent_mport depends_skip_archcheck]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set required_archs [_mport_archs $dependent_mport]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[lsearch -exact -nocase $skip_archcheck $portinfo(name)] >= 0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ || [_mport_supports_archs $mport $required_archs]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return $mport
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # Check if the dependent used a dep type that needs matching archs
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set dependent_workername [ditem_key $dependent_mport workername]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set dtypes [_deptypes_for_target install $dependent_workername]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ array set dependent_portinfo [mportinfo $dependent_mport]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set archcheck_needed 0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ foreach dtype $dtypes {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[_deptype_needs_archcheck $dtype] && [info exists dependent_portinfo($dtype)]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ && [lsearch -exact -nocase $dependent_portinfo($dtype) $depspec] >= 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set archcheck_needed 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ break
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {!$archcheck_needed} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return $mport
</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;'>+ # Reopen with +universal if possible
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set has_universal [expr {[info exists portinfo(variants)] && "universal" in $portinfo(variants)}]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {"universal" ni $variations && $has_universal
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ && [llength [_mport_archs $mport]] < 2} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ mportclose $mport
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ lappend variations universal +
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[catch {set mport [mportopen $porturl $options $variations]} result]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ui_debug $::errorInfo
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ui_error "Unable to open port $portinfo(name): $result"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ error "mportopen failed"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[_mport_supports_archs $mport $required_archs]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return $mport
</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;'>+ _explain_arch_mismatch $dependent_portinfo(name) $portinfo(name) $required_archs [_mportkey $mport supported_archs] $has_universal
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ error "architecture mismatch"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> # _upgrade calls this to clean up before returning
proc macports::_upgrade_cleanup {} {
#upvar ilist ilist regref regref newregref newregref \
</pre><pre style='margin:0'>
</pre>