<pre style='margin:0'>
Joshua Root (jmroot) pushed a commit to branch master
in repository mpbb.

</pre>
<p><a href="https://github.com/macports/mpbb/commit/39749a78929111448ed2c9b37c07c2853ff9cd11">https://github.com/macports/mpbb/commit/39749a78929111448ed2c9b37c07c2853ff9cd11</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 39749a7  dependencies.tcl: reset state if deps need to be built
</span>39749a7 is described below

<span style='display:block; white-space:pre;color:#808000;'>commit 39749a78929111448ed2c9b37c07c2853ff9cd11
</span>Author: Joshua Root <jmr@macports.org>
AuthorDate: Wed Oct 11 10:46:12 2023 +1100

<span style='display:block; white-space:pre;color:#404040;'>    dependencies.tcl: reset state if deps need to be built
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    The use of a global variable by mportexec means multiple invocations
</span><span style='display:block; white-space:pre;color:#404040;'>    can interfere if this is not done. Having to build deps at this stage
</span><span style='display:block; white-space:pre;color:#404040;'>    should be rare, so performance should not be impacted too much.
</span>---
 tools/dependencies.tcl | 251 ++++++++++++++++++++++++++++++++-----------------
 1 file changed, 163 insertions(+), 88 deletions(-)

<span style='display:block; white-space:pre;color:#808080;'>diff --git a/tools/dependencies.tcl b/tools/dependencies.tcl
</span><span style='display:block; white-space:pre;color:#808080;'>index 9aa67fa..d72ae21 100755
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/tools/dependencies.tcl
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/tools/dependencies.tcl
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -416,7 +416,8 @@ if {$failcache_dir ne ""} {
</span>     set start_time [clock seconds]
 }
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-proc install_dep {ditem} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Returns 0 if dep is installed, 1 if not
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc install_dep_archive {ditem} {
</span>     array set depinfo $::mportinfo_array($ditem)
     incr ::dependencies_counter
     set msg "Installing dependency ($::dependencies_counter of $::dependencies_count) '$depinfo(name)' with variants '$depinfo(canonical_active_variants)'"
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -425,7 +426,7 @@ proc install_dep {ditem} {
</span>     if {[registry::entry imaged $depinfo(name) $depinfo(version) $depinfo(revision) $depinfo(canonical_active_variants)] ne ""} {
         puts "Already installed, nothing to do"
         puts $::log_status_dependencies {[OK]}
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        return
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        return 0
</span>     }
     # clean up any work directories left over from earlier
     # (avoids possible errors with different variants in the statefile)
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -435,34 +436,14 @@ proc install_dep {ditem} {
</span>     }
     set fail 0
     set workername [ditem_key $ditem workername]
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    if {[$workername eval [list _archive_available]]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        # First fetch the archive
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if {[catch {mportexec $ditem archivefetch} result]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            puts stderr $::errorInfo
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            ui_error "Archivefetch failed: $result"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            set fail 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if {$fail || $result > 0 || [$workername eval [list find_portarchive_path]] eq ""} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            puts stderr "Fetching archive for dependency '$depinfo(name)' with variants '$depinfo(canonical_active_variants)' failed, aborting."
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            puts $::log_status_dependencies {[FAIL] (archivefetch)}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            puts $::log_subports_progress "Building '$::portname' ... \[ERROR\] (failed to archivefetch dependency '$depinfo(name)')."
</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;'>-        # Now install it
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if {[catch {$workername eval [list eval_targets install]} result]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            puts stderr $::errorInfo
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            ui_error "Install failed: $result"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            set fail 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if {$fail || $result > 0} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            puts stderr "Installing from archive for dependency '$depinfo(name)' with variants '$depinfo(canonical_active_variants)' failed, aborting."
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            puts $::log_status_dependencies {[FAIL]}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            puts $::log_subports_progress "Building '$::portname' ... \[ERROR\] (failed to install dependency '$depinfo(name)')."
</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;'>-    } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        # No archive on the public server. May build from source.
</span> 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+    # First fetch the archive
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[catch {mportexec $ditem archivefetch} result]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        puts stderr $::errorInfo
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ui_error "Archivefetch failed: $result"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set fail 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {$fail || $result > 0 || [$workername eval [list find_portarchive_path]] eq ""} {
</span>         # The known_fail case should normally be caught before now, but
         # it's quick and easy to check and may save a build.
         if {[info exists depinfo(known_fail)] && [string is true -strict $depinfo(known_fail)]} {
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -471,59 +452,97 @@ proc install_dep {ditem} {
</span>             puts $::log_subports_progress "Building '$::portname' ... \[ERROR\] (dependency '$depinfo(name)' known to fail) maintainers: [get_maintainers $::portname $depinfo(name)]."
             exit 1
         }
<span style='display:block; white-space:pre;background:#e0ffe0;'>+        # This dep will have to be built, not just installed
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        puts stderr "Fetching archive for dependency '$depinfo(name)' with variants '$depinfo(canonical_active_variants)' failed."
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        puts $::log_status_dependencies {[MISSING]}
</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;'>+    # Now install it
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[catch {$workername eval [list eval_targets install]} result]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        puts stderr $::errorInfo
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ui_error "Install failed: $result"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set fail 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {$fail || $result > 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        puts stderr "Installing from archive for dependency '$depinfo(name)' with variants '$depinfo(canonical_active_variants)' failed, aborting."
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        puts $::log_status_dependencies {[FAIL]}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        puts $::log_subports_progress "Building '$::portname' ... \[ERROR\] (failed to install dependency '$depinfo(name)')."
</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:#ffe0e0;'>-        # Try archivefetch in case there's one available from e.g. ARCHIVE_SITE_LOCAL.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if {[catch {mportexec $ditem archivefetch} result]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            puts stderr $::errorInfo
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            ui_error "Archivefetch failed: $result"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    puts $::log_status_dependencies {[OK]}
</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:#ffe0e0;'>-        # Fetch and checksum the distfiles
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if {[catch {mportexec $ditem fetch} result]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            puts stderr $::errorInfo
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            ui_error "Fetch failed: $result"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            set fail 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if {$fail || $result > 0} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            puts stderr "Fetch of dependency '$depinfo(name)' with variants '$depinfo(canonical_active_variants)' failed, aborting."
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            puts $::log_status_dependencies {[FAIL] (fetch)}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            puts $::log_subports_progress "Building '$::portname' ... \[ERROR\] (failed to fetch dependency '$depinfo(name)') maintainers: [get_maintainers $::portname $depinfo(name)]."
</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;'>-        if {[catch {mportexec $ditem checksum} result]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            puts stderr $::errorInfo
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            ui_error "Checksum failed: $result"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            set fail 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if {$fail || $result > 0} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            puts stderr "Checksum of dependency '$depinfo(name)' with variants '$depinfo(canonical_active_variants)' failed, aborting."
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            puts $::log_status_dependencies {[FAIL] (checksum)}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            puts $::log_subports_progress "Building '$::portname' ... \[ERROR\] (failed to checksum dependency '$depinfo(name)') maintainers: [get_maintainers $::portname $depinfo(name)]."
</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;'>-        # Deactivate ports not needed for this build so they don't interfere
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        deactivate_unneeded depinfo
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        # Now install
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if {[catch {mportexec $ditem install} result]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            puts stderr $::errorInfo
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            ui_error "Install failed: $result"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            set fail 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if {$fail || $result > 0} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            puts stderr "Build of dependency '$depinfo(name)' with variants '$depinfo(canonical_active_variants)' failed, aborting."
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            puts $::log_status_dependencies {[FAIL]}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            puts $::log_subports_progress "Building '$::portname' ... \[ERROR\] (failed to install dependency '$depinfo(name)') maintainers: [get_maintainers $::portname $depinfo(name)]."
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# mportexec uses this global variable, so we have to clean up between
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# doing operations (that require deps) on different ports.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc close_open_mports {} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    foreach mport $macports::open_mports {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        catch {mportclose $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;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc install_dep_source {portinfo_list} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    array set depinfo $portinfo_list
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    incr ::build_counter
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set msg "Building dependency ($::build_counter of $::build_count) '$depinfo(name)' with variants '$depinfo(canonical_active_variants)'"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    puts -nonewline $::log_status_dependencies "$msg ... "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    puts "----> ${msg}"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    close_open_mports
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    array unset ::mportinfo_array
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set ditem [lindex [open_port $depinfo(name)] 0]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # deactivate ports not needed for this dep
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[catch {deactivate_unneeded depinfo} result]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ui_error $::errorInfo
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ui_error "deactivate_unneeded failed: $result"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        exit 2
</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;'>+    # Fetch and checksum the distfiles
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[catch {mportexec $ditem fetch} result]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        puts stderr $::errorInfo
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ui_error "Fetch failed: $result"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set fail 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {$fail || $result > 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        puts stderr "Fetch of dependency '$depinfo(name)' with variants '$depinfo(canonical_active_variants)' failed, aborting."
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        puts $::log_status_dependencies {[FAIL] (fetch)}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        puts $::log_subports_progress "Building '$::portname' ... \[ERROR\] (failed to fetch dependency '$depinfo(name)') maintainers: [get_maintainers $::portname $depinfo(name)]."
</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;'>+    if {[catch {mportexec $ditem checksum} result]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        puts stderr $::errorInfo
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ui_error "Checksum failed: $result"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set fail 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {$fail || $result > 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        puts stderr "Checksum of dependency '$depinfo(name)' with variants '$depinfo(canonical_active_variants)' failed, aborting."
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        puts $::log_status_dependencies {[FAIL] (checksum)}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        puts $::log_subports_progress "Building '$::portname' ... \[ERROR\] (failed to checksum dependency '$depinfo(name)') maintainers: [get_maintainers $::portname $depinfo(name)]."
</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;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # Now install
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[catch {mportexec $ditem install} result]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        puts stderr $::errorInfo
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ui_error "Install failed: $result"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set fail 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {$fail || $result > 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        puts stderr "Build of dependency '$depinfo(name)' with variants '$depinfo(canonical_active_variants)' failed, aborting."
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        puts $::log_status_dependencies {[FAIL]}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        puts $::log_subports_progress "Building '$::portname' ... \[ERROR\] (failed to install dependency '$depinfo(name)') maintainers: [get_maintainers $::portname $depinfo(name)]."
</span> 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-            if {$::failcache_dir ne ""} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                failcache_update $depinfo(name) [ditem_key $ditem porturl] $depinfo(canonical_active_variants) 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</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;'>-        set ::any_built 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        # Success. Clear any failcache entry.
</span>         if {$::failcache_dir ne ""} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-            failcache_update $depinfo(name) [ditem_key $ditem porturl] $depinfo(canonical_active_variants) 0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            failcache_update $depinfo(name) [ditem_key $ditem porturl] $depinfo(canonical_active_variants) 1
</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;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # Success. Clear any failcache entry.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {$::failcache_dir ne ""} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        failcache_update $depinfo(name) [ditem_key $ditem porturl] $depinfo(canonical_active_variants) 0
</span>     }
     puts $::log_status_dependencies {[OK]}
 }
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -532,35 +551,92 @@ proc install_dep {ditem} {
</span> set macports::channels(debug) stderr
 set macports::channels(info) stdout
 set dependencies_counter 0
<span style='display:block; white-space:pre;background:#ffe0e0;'>-set any_built 0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+set missing_deps [list]
</span> try {
     foreach ditem $dlist_sorted {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        install_dep $ditem
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if {[install_dep $ditem]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            lappend missing_deps $::mportinfo_array($ditem)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span>     }
 } on error {eMessage} {
     ui_error "install_dep failed: $eMessage"
     exit 2
 }
<span style='display:block; white-space:pre;background:#ffe0e0;'>-# Go back to being quiet
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-set macports::channels(debug) {}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-set macports::channels(info) {}
</span> 
 puts stderr "installing deps took [expr {[clock seconds] - $start_time}] seconds"
 set start_time [clock seconds]
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-if {$any_built} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # active ports likely changed, so do this again
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+set build_count [llength $missing_deps]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+if {$build_count > 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # Some deps are neither installed nor able to be fetched as an archive.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # This should ideally never happen since each dep should have had
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # its own build previously, but failures and out-of-order builds
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # do happen sometimes for various reasons.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    tee "Building $build_count dependencies of $portname:" $log_status_dependencies stdout
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set build_counter 0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    foreach missing_dep $missing_deps {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        install_dep_source $missing_dep
</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;'>+    puts stderr "building missing deps took [expr {[clock seconds] - $start_time}] seconds"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set start_time [clock seconds]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # Now effectively start again for the main port.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    close_open_mports
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    array unset ::mportinfo_array
</span>     try {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        deactivate_unneeded portinfo
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set mport [mportopen $portinfo(porturl) [list subport $portinfo(name)] [array get variants]]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    } on error {eMessage} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ui_error "mportopen $portinfo(porturl) failed: $eMessage"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        exit 2
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    [ditem_key $mport workername] eval [list set portutil::archive_available_result 0]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[catch {deactivate_unneeded portinfo} result]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ui_error $::errorInfo
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ui_error "deactivate_unneeded failed: $result"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        exit 2
</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;'>+    puts stderr "deactivating unneeded ports (again) took [expr {[clock seconds] - $start_time}] seconds"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set start_time [clock seconds]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # gather a list of dependencies with the correct variants (+universal is dealt
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # with in specific ways)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[catch {mportdepends $mport "activate"} result]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ui_error $::errorInfo
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ui_error "mportdepends $portname activate failed: $result"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        exit 2
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    } elseif {$result != 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ui_error "mportdepends $portname activate failed: $result"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        exit 2
</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;'>+   try {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        # sort these dependencies topologically; exclude the given port itself
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set dlist [dlist_append_dependents $macports::open_mports $mport {}]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        dlist_delete dlist $mport
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        # produce a list of deps in sorted order
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set dlist_sorted [list]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        dlist_eval $dlist {} [list append_it]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        unset dlist
</span>     } on error {eMessage} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        ui_error "deactivate_unneeded failed: $eMessage"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ui_error "sorting dlist failed: $eMessage"
</span>         exit 2
     }
<span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    puts stderr "calculating deps (again) took [expr {[clock seconds] - $start_time}] seconds"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set start_time [clock seconds]
</span> }
 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+# Go back to being quiet
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+set macports::channels(debug) {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+set macports::channels(info) {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> proc activate_dep {ditem} {
<span style='display:block; white-space:pre;background:#e0ffe0;'>+    set workername [ditem_key $ditem workername]
</span>     set fail 0
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    if {[catch {mportexec $ditem activate} result]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[catch {$workername eval [list eval_targets activate]} result]} {
</span>         puts stderr $::errorInfo
         ui_error "Activate failed: $result"
         set fail 1
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -571,7 +647,6 @@ proc activate_dep {ditem} {
</span>         puts $::log_subports_progress "Building '$::portname' ... \[ERROR\] (failed to activate dependency '$depinfo(name)') maintainers: [get_maintainers $::portname $depinfo(name)]."
         exit 1
     }
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    catch {mportclose $ditem}
</span> }
 
 puts "Activating all dependencies..."
</pre><pre style='margin:0'>

</pre>