<pre style='margin:0'>
Marcus Calhoun-Lopez (MarcusCalhoun-Lopez) pushed a commit to branch master
in repository macports-ports.

</pre>
<p><a href="https://github.com/macports/macports-ports/commit/dea3f84024bf57dfd3047597aa561f9a11ee1c3f">https://github.com/macports/macports-ports/commit/dea3f84024bf57dfd3047597aa561f9a11ee1c3f</a></p>
<pre style="white-space: pre; background: #F8F8F8"><span style='display:block; white-space:pre;color:#808000;'>commit dea3f84024bf57dfd3047597aa561f9a11ee1c3f
</span>Author: Marcus Calhoun-Lopez <mcalhoun@macports.org>
AuthorDate: Tue Apr 12 07:12:22 2022 -0700

<span style='display:block; white-space:pre;color:#404040;'>    rust PG: new PortGroup for the Rust language
</span>---
 _resources/port1.0/group/rust-1.0.tcl | 779 ++++++++++++++++++++++++++++++++++
 1 file changed, 779 insertions(+)

<span style='display:block; white-space:pre;color:#808080;'>diff --git a/_resources/port1.0/group/rust-1.0.tcl b/_resources/port1.0/group/rust-1.0.tcl
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..178d0844ab5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/_resources/port1.0/group/rust-1.0.tcl
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,779 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# -*- coding: utf-8; mode: tcl; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 4; truncate-lines: t -*- vim:fenc=utf-8:et:sw=4:ts=4:sts=4
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# This PortGroup supports the Rust language ecosystem
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Usage:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# PortGroup     rust 1.0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# cargo.crates \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#     foo  1.0.1  abcdef123456... \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#     bar  2.5.0  fedcba654321...
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# The cargo.crates option expects a list with 3-tuples consisting of name,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# version, and sha256 checksum. Only sha256 is supported at this time as
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# the checksum will be reused by cargo internally.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# The list of crates and their checksums can be found in the Cargo.lock file in
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# the upstream source code. The cargo2port generator can be used to automate
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# updates of this list for new releases.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# To get a list of these, run in worksrcdir:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#     cargo update
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#     egrep -e '^(name|version|checksum) = ' Cargo.lock | perl -pe 's/^(?:name|version|checksum) = "(.+)"/$1/'
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# https://github.com/macports/macports-contrib/tree/master/cargo2port/cargo2port.tcl
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# If Cargo.lock references pre-release versions, or in general references
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# crates not published on crates.io, but available from GitHub, also use the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# following:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# # download additional crates from github, not published on crates.io
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# cargo.crates_github \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#    baz    author/baz  branch  abcdef12345678...commit...abcdef12345678  fedcba654321...
</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;'>+PortGroup   muniversal          1.1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+PortGroup   compiler_wrapper    1.0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# ideally, we would like to add the openssl PG, however
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#     its use of `option_proc` makes changing the default value of `openssl.branch` difficult, and
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#     it interferes with our intended use of compiler_wrapper PG
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# for now, create an option `openssl.branch` in this PG
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Cargo's interaction with OpenSSL is a bit delicate
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# see, e.g., https://trac.macports.org/ticket/65011
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# similarly for legacysupport PG
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+options     cargo.bin \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            cargo.home \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            cargo.crates \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            cargo.offline_cmd \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            cargo.crates_github \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            cargo.update
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default     cargo.bin           {${prefix}/bin/cargo}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default     cargo.home          {${workpath}/.home/.cargo}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default     cargo.crates        {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default     cargo.crates_github {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# if a dependency has been patched, `--offline` might be a reasonable choice
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default     cargo.offline_cmd   {--frozen}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# some packags do not provide Cargo.lock,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# so offer the option of running cargo-update
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default     cargo.update        {no}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+options     rust.upstream_deployment_target \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            rust.upstream_archs \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            rust.use_cctools \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            rust.archiver \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            rust.ranlib
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# default macosx_deployment_target value of Rust function macos_default_deployment_target
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# see https://github.com/rust-lang/rust/blob/master/compiler/rustc_target/src/spec/apple_base.rs
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default     rust.upstream_deployment_target {[expr {${os.arch} eq "arm" ? 11.0 : 10.7}]}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# architectures for which an upstream bootstrap compiler is available
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default     rust.upstream_archs     {[expr {${os.platform} eq "darwin" && ${os.major} >= 13 ? {arm64 x86_64} : {}}]}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# some tools provided by system are too old, so use MacPorts version instead
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default     rust.use_cctools        {[expr {${os.platform} eq "darwin" && ${os.major} < 11 ? "yes" : "no"}]}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default     rust.archiver           {[expr {${rust.use_cctools} ? "${prefix}/bin/ar" : "/usr/bin/ar"}]}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default     rust.ranlib             {[expr {${rust.use_cctools} ? "${prefix}/bin/ranlib" : "/usr/bin/ranlib"}]}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# compiler runtime library
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#     N.B.: `configure.ldflags-append {*}${rust.rt_static_libs}` might be insufficient
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#     `rust.rt_static_libs` will not give the correct value until *after* the compiler is active
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#     the compiler might not be active immediately if added as a dependency
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+options     rust.rt_static_libs
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default     rust.rt_static_libs     {[rust::get_static_rutime_libraries]}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# force compiler runtime library to be included in link flags
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+options     rust.add_compiler_runtime
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default     rust.add_compiler_runtime   {no}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# the distfiles of the main port will also be stored in this directory,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# but this is the only way to allow reusing the same crates across multiple ports.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default     dist_subdir             {[expr {[llength ${cargo.crates}] > 0 || [llength ${cargo.crates_github}] > 0 ? "cargo-crates" : ${name}}]}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default     extract.only            {[rust::disttagclean $distfiles]}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# to wrap linker, compiler_wrapper PG required existence of configure.ld
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+options     configure.ld
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default     configure.ld            {${configure.cc}}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Rust set its own compiler flags, so make empty by default
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default     configure.cflags        {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default     configure.cxxflags      {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default     configure.ldflags       {[expr {${rust.add_compiler_runtime} ? ${rust.rt_static_libs} : {}} ]}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default     compiler.limit_flags    {yes}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default     configure.pipe          {no}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+rename      portconfigure::should_add_stdlib  portconfigure::should_add_stdlib_real
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+rename      portconfigure::should_add_cxx_abi portconfigure::should_add_cxx_abi_real
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc        portconfigure::should_add_stdlib  {} {return no}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc        portconfigure::should_add_cxx_abi {} {return no}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# enforce same compiler settings as used by rust
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default compiler.cxx_standard           2017
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default compiler.thread_local_storage   yes
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# do not include os.major in target triplet
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default     triplet.os              {${os.platform}}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Rust does not easily pass external flags to compilers, so add them to compiler wrappers
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default     compwrap.compilers_to_wrap          {cc cxx ld}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default     compwrap.ccache_supported_compilers {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# possible OpenSSL versions: empty, 3, 1.1, and 1.0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+options     openssl.branch
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default     openssl.branch      {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# utility method to get bootstrap compilers
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# should only be needed by Rust/Cargo ports
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc rust.add_bootstrap_components {architectures {components {rust-std rustc cargo}}} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    global extract.suffix os.major subport
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set version_current         1.60.0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set version_m1              1.59.0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set version_m2              1.58.0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    master_sites-append         https://static.rust-lang.org/dist:apple_vendor \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                https://github.com/MarcusCalhoun-Lopez/rust/releases/download/${version_current}:macports_vendor \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                file://[option prefix]/libexec/rust-bootstrap:transition_vendor
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if { [join [lrange [split ${subport} -] 0 1] -] eq "rust-bootstrap" } {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set is_bootstrap        yes
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set is_bootstrap        no
</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;'>+    foreach arch ${architectures} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        # rust-bootstrap requires `macosx_deployment_target` instead of `os.major`
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if { ${arch} in [option rust.upstream_archs] && [vercmp [option macosx_deployment_target] [option rust.upstream_deployment_target]] >= 0 } {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            set build_vendor        apple
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            if { ${is_bootstrap} } {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                set rustc_version   ${version_m2}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                set rustc_version   ${version_m1}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            set build_major         ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        } elseif { ${arch} in [option rust.upstream_archs] && ${is_bootstrap} && ${subport} ne "rust-bootstrap-transition" } {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            set build_vendor        transition
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            set build_major         ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            set rustc_version       ${version_m1}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            set build_vendor        macports
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            if { ${os.major} >= 11 } {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                set rustc_version   ${version_m1}+0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                set build_major     ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            } elseif { ${os.major} >= 10 } {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                set rustc_version   ${version_m1}+0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                set build_major     10
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            } elseif { ${os.major} >= 9 } {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                set rustc_version   ${version_m1}+0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                set build_major     9
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            } elseif { ${os.major} >= 8 } {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                set rustc_version   ${version_m1}+0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                set build_major     8
</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;'>+        if { ${build_vendor} ne "transition" } {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            foreach component ${components} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                set binTag          ${rustc_version}-[option triplet.cpu.${arch}]-${build_vendor}-[option triplet.os]${build_major}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                distfiles-append    ${component}-${binTag}${extract.suffix}:${build_vendor}_vendor
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            depends_extract-delete          port:rust-bootstrap-transition
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            depends_extract-append          port:rust-bootstrap-transition
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            depends_build-delete            port:rust-bootstrap-transition
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            depends_build-append            port:rust-bootstrap-transition
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            depends_skip_archcheck-delete   rust-bootstrap-transition
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            depends_skip_archcheck-append   rust-bootstrap-transition
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            foreach component ${components} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                set binTag          ${rustc_version}+0-[option triplet.cpu.${arch}]-${build_vendor}-[option triplet.os]${build_major}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                set distfile        [option prefix]/libexec/rust-bootstrap/${component}-${binTag}${extract.suffix}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                post-extract        "system -W \${workpath} \"\${extract.cmd} \${extract.pre_args} ${distfile} \${extract.post_args}\""
</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;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # upstream binaries
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    checksums-append        rust-std-${version_m1}-x86_64-apple-darwin${extract.suffix} \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            rmd160  420c6ae0086a68aa018c31f79b96eb2d1c556537 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            sha256  959af8bafbc9f3916a1d1111d7378fdd7aa459410cdd2d3bbfc2d9d9a6db0683 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            size    39328167 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            rustc-${version_m1}-x86_64-apple-darwin${extract.suffix} \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            rmd160  70eb8715fb4219be33d430e708883e5b035ad111 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            sha256  eb5b613800c75882bed9e3bb48c325aac0e5ce418ae2b19f51e4ccf7e4781e0b \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            size    81261773 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            cargo-${version_m1}-x86_64-apple-darwin${extract.suffix} \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            rmd160  5c968f1dd476d0e7a340a23a03fa918aee17d3cb \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            sha256  d0202b50b4f3d0e943a5d7e8d14420afeac8cf36e6136e8d5b7ddefb3538d62a \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            size    6424124 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            rust-std-${version_m1}-aarch64-apple-darwin${extract.suffix} \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            rmd160  79767785ff058ea7173b234232f9f238b1a7c7b6 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            sha256  e70bd0c56f8f716238a1395c54dd9d993a3168e2764e404dc65553babf7aa127 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            size    38541530 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            rustc-${version_m1}-aarch64-apple-darwin${extract.suffix} \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            rmd160  18cb2608f941741b3dabe66a0668b6b3cf366994 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            sha256  caac78491d8f0844bb9a512989a409c35ff681a131495e7ebfacb69ba006bbc1 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            size    82983805 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            cargo-${version_m1}-aarch64-apple-darwin${extract.suffix} \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            rmd160  d2a4638a1509d051f0bce03ae043eccc4c612b0c \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            sha256  4bdcb77ea084364b551a5cf969e263beb09afa39627f6dead262c8e2a7aed9c1 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            size    5750407
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # upstream binaries
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    checksums-append        rust-std-${version_m2}-x86_64-apple-darwin${extract.suffix} \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            rmd160  10ddd3a98036998f0f3904223eadd77a8d61ed2b \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            sha256  fa89e9ab2e3645d6732811dae3828c86fbd65cb7447ec33c84137e61b168396a \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            size    38052490 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            rustc-${version_m2}-x86_64-apple-darwin${extract.suffix} \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            rmd160  37f05c82ab6e9297852eaef21f503c3781b852d3 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            sha256  3d3815385dda1c1d8617ee14b682ec3804307b0f5a0ac5604a7dc5efc783263f \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            size    97525234 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            cargo-${version_m2}-x86_64-apple-darwin${extract.suffix} \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            rmd160  a549b5d7ce05fa2152ef81e8086320da11b7ecd3 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            sha256  60203fc7ec453f2a9eb93734c70a72f8ee88e349905edded04155c1646e283a6 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            size    6644822 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            rust-std-${version_m2}-aarch64-apple-darwin${extract.suffix} \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            rmd160  31a8636f80df5bef24b474814d8e53d8ddc2526a \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            sha256  7c1d58bdc87b79f439b1083348a0e492305f8737ad1931755c26b2834a854f42 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            size    37218461 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            rustc-${version_m2}-aarch64-apple-darwin${extract.suffix} \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            rmd160  c73151a7c0d73b8500bb4cc1e8542fc32699b015 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            sha256  7b3291177d4f8a73c8e20185a04bbc88775fc85eeb271c19bc8f37fb5051ae0c \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            size    98543672 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            cargo-${version_m2}-aarch64-apple-darwin${extract.suffix} \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            rmd160  b810fe314b99b9836fc05f333139d4e3c92012e8 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            sha256  9144ee0f614c8dcb5f34a774e47a24b676860fa442afda2a3c7f45abfe694e6a \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            size    5906007
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # MacPorts bootstrap binaries for older system
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    checksums-append        rust-std-${version_m1}+0-x86_64-macports-darwin${extract.suffix} \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            rmd160  c8e3e8064ecc3d774adb146ac65830012315acdb \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            sha256  f9bd87e6a477f5f567c2f9597325d2fb52a964a9a8179dc1a8198cf13e313ebf \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            size    34738214 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            rustc-${version_m1}+0-x86_64-macports-darwin${extract.suffix} \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            rmd160  203231b59c7cea7a95f10f3319e87da735c2bdeb \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            sha256  18a00c4bc645d0832bd78e9442245215e446a892bd7b369cb999881897c817ae \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            size    45347641 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            cargo-${version_m1}+0-x86_64-macports-darwin${extract.suffix} \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            rmd160  9b9cba21749a7e1515f712f6f67c706a09d1fee4 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            sha256  a485a4b94dd7699b3f74d9709c3450ee6b08281298b2ab184b425be6a4c2f2b8 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            size    5537537 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            rust-std-${version_m1}+0-i686-macports-darwin${extract.suffix} \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            rmd160  22f42744171e07871b46e17a2a6a486729e5eb6f \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            sha256  5d5ef6d5ac1a3c5c728b1d1eba59b0d7ef9718f71be74627b9d3d0cf15a5e374 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            size    34331493 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            rustc-${version_m1}+0-i686-macports-darwin${extract.suffix} \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            rmd160  93753657c916afac1797c3f01c9144472d9003f4 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            sha256  1fcf4ff6d2ed775077b5576ff8c38aa1414d97f1bcdf78b15dcd1b2483dbca2d \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            size    54914579 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            cargo-${version_m1}+0-i686-macports-darwin${extract.suffix} \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            rmd160  d8c2311ecf905aacb67b2a8e7b6f57a73a36cd56 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            sha256  5e93c530e8de37cc2196eac4ed881e0b1ca2d3750dea9a0eae55dd7e822dd3d6 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            size    5549393 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            rust-std-${version_m1}+0-x86_64-macports-darwin10${extract.suffix} \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            rmd160  7dcbeed06544fafe639bcd208a22d704291f81c5 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            sha256  9ed0cd8b5cf1eada0e913ffba2fd57acfdfd0c5c12c0e77e9a8c2d65a4aa93e9 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            size    34709722 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            rustc-${version_m1}+0-x86_64-macports-darwin10${extract.suffix} \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            rmd160  eb2c2081f79be0ae9566fe457daae6adbbd5e0b3 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            sha256  70cce383b8fec14d50395d6a5bc714de813b4b01c2c0aa6ca525f0c1ab790585 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            size    45465969 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            cargo-${version_m1}+0-x86_64-macports-darwin10${extract.suffix} \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            rmd160  193b5ed2f97a478f5d6af2a90ba7f9f13c280a40 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            sha256  7d48f508599f405f925aeeceb54e90d0bb166351351f349e976191e40fff818f \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            size    5549899 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            rust-std-${version_m1}+0-i686-macports-darwin10${extract.suffix} \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            rmd160  742e22502c8c5f5ee480cd9df636586c73d7ac91 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            sha256  2215dcf144dd7fa90e87a5963afc58b48f790c459d1b3aaa906d87692f1c8fb6 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            size    34322500 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            rustc-${version_m1}+0-i686-macports-darwin10${extract.suffix} \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            rmd160  8dc85c259e17222080638b1f0f5ab768fd011015 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            sha256  fc9222ca4bdc082e011b9685e063ab76df5597a48bedad88a1463d4596a09504 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            size    54993727 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            cargo-${version_m1}+0-i686-macports-darwin10${extract.suffix} \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            rmd160  953ddf0e3c79edd88782c423139b0952a4551486 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            sha256  d8f2b0e51a56ceb6d490292cd2951924885e25559799c58bb85afdaa9c3ad4ad \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            size    5558460 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            rust-std-${version_m1}+0-x86_64-macports-darwin9${extract.suffix} \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            rmd160  d70ca575c3033babbf4168d19d17b5411e0b3a72 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            sha256  0b7faccc7562eb4e2ebdaa6dbe1b1f0fa96b281c150369362c0fa476c9f6aadb \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            size    34587374 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            rustc-${version_m1}+0-x86_64-macports-darwin9${extract.suffix} \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            rmd160  5308763cd24a7d49e920a380c283f827e86664c8 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            sha256  cb31791e2f639113446b1f577680fd26e8f73d5b5446d2b5c3734c8e1698710a \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            size    45234053 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            cargo-${version_m1}+0-x86_64-macports-darwin9${extract.suffix} \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            rmd160  bbdece9ce995adffe5615edf1d3dbddec3ef89af \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            sha256  d2bd1ce9e1919ca21545e9f09006bb162123cac5c7071ac7bf0d6084b5f3438a \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            size    5458503 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            rust-std-${version_m1}+0-i686-macports-darwin9${extract.suffix} \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            rmd160  577db5cbef820ff7d7f5ec7dd14164b2642507df \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            sha256  75b2e9c4beeeae1ada349580ebae4adfae3c3fc52cdc0d9685d9f6971a86a7f1 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            size    34173832 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            rustc-${version_m1}+0-i686-macports-darwin9${extract.suffix} \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            rmd160  74889eae609934d298fcd6a6f79f6c2669c549d1 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            sha256  1d44388c9a5c9179b59e3224a8d1c8eda8f260a160cdc854708db23610fa2299 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            size    53624390 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            cargo-${version_m1}+0-i686-macports-darwin9${extract.suffix} \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            rmd160  69c5d85e6477d09cd0127173cac1d7f39a3db4a4 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            sha256  a3734f4a33425a65c4d30f7f0fab1cc7e6d551458d6c7dc79e6e79b6f2a2f505 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            size    5473873
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    return                  [lindex [split ${rustc_version} +] 0]
</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;'>+# for building LLVM as part of building the Rust compiler
</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;'>+options     rust.llvm.legacy
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default     rust.llvm.legacy        {[expr {${os.major} < 11}]}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+options     rust.llvm.cflags
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default     rust.llvm.cflags        {[portconfigure::configure_get_cppflags] ${configure.optflags} [expr {${rust.llvm.legacy} ? "-isystem${prefix}/include/LegacySupport" : ""}]}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+options     rust.llvm.cxxflags
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default     rust.llvm.cxxflags      {[portconfigure::configure_get_cppflags] ${configure.optflags} [expr {${rust.llvm.legacy} ? "-isystem${prefix}/include/LegacySupport" : ""}]}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+options     rust.llvm.ldflags
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default     rust.llvm.ldflags       {[portconfigure::configure_get_ldflags] [expr {${rust.llvm.legacy} ? "${prefix}/lib/libMacportsLegacySupport.a" : ""}]}
</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;'>+# utility procedures
</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;'>+# MacPorts architecture name --> Rust architecture name
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc rust.rust_arch {arch} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    switch ${arch} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        arm64       {return aarch64}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        i386        {return i686}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ppc         {return powerpc}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ppc64       {return powerpc64}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        default     {return ${arch}}
</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;'>+# Rust architecture name --> MacPorts architecture name
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc rust.marcports_arch {rarch} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    switch ${rarch} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        aarch64     {return arm64}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        i686        {return i386}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        powerpc     {return ppc}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        powerpc64   {return ppc64}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        default     {return ${rarch}}
</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;'>+####################################################################################################################################
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# compatibility procedures
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+####################################################################################################################################
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc cargo.rust_platform {{arch ""}} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {${arch} eq ""} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set arch [option muniversal.build_arch]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    return [option triplet.${arch}]
</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;'>+# internal procedures
</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;'>+namespace eval rust {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# for symbol ___emutls_get_address (used when thread-local-storage is emulated)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# for Clang, provides symbol ___muloti4
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# since https://github.com/rust-lang/rust/commit/8a6ff90a3a41e6ace18aeb089ea0a0eb3726dd08
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc rust::get_static_rutime_libraries {} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set libs [list ]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[string match *clang* [option configure.compiler]]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set libName lib/[option os.platform]/libclang_rt.osx.a
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set libName libgcc_eh.a
</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 {![catch [list exec [option configure.cc] --print-search-dirs] results]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        foreach ln [split ${results} \n] {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            set splt [split ${ln} =]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            if {[lindex ${splt} 0] eq "libraries: "} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                foreach dir [split [lindex ${splt} 1] :] {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    set fl [string trimright ${dir} "/"]/${libName}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    if {[file exists ${fl}]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                        lappend libs ${fl}
</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;'>+        }
</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;'>+    return ${libs}
</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 rust::configure_ldflags_proc {option action args} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {$action ne "read"} return
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[option rust.add_compiler_runtime]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        configure.ldflags-delete    {*}[option rust.rt_static_libs]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        configure.ldflags-append    {*}[option rust.rt_static_libs]
</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;'>+option_proc configure.ldflags rust::configure_ldflags_proc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# based on portextract::disttagclean from portextract.tcl
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc rust::disttagclean {list} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {$list eq ""} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        return $list
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    foreach fname $list {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set name [getdistname ${fname}]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set is_crate no
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        foreach {cname cversion chksum} [option cargo.crates] {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            set cratefile ${cname}-${cversion}.crate
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            if {${name} eq ${cratefile}} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                set is_crate yes
</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;'>+        foreach {cname cgithub cbranch crevision chksum} [option cargo.crates_github] {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            set cratefile ${cname}-${crevision}.tar.gz
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            if {${name} eq ${cratefile}} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                set is_crate yes
</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 {!${is_crate}} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            lappend val ${name}
</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;'>+    return $val
</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 rust::handle_crates {} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    foreach {cname cversion chksum} [option cargo.crates] {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        # The same crate name can appear with multiple versions. Use
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        # a combination of crate name and checksum as unique identifier.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        # As the :disttag cannot contain dots, the version number cannot be
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        # used.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        #
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        # To download the crate file curl-0.4.11.crate, the URL is
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        #    https://crates.io/api/v1/crates/curl/0.4.11/download.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        # Use ?dummy= to ignore ${distfile}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        # see https://trac.macports.org/wiki/PortfileRecipes#fetchwithgetparams
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set cratefile       ${cname}-${cversion}.crate
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set cratetag        crate-${cname}-${chksum}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        distfiles-append    ${cratefile}:${cratetag}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        master_sites-append https://crates.io/api/v1/crates/${cname}/${cversion}/download?dummy=:${cratetag}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        checksums-append    ${cratefile} sha256 ${chksum}
</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;'>+    foreach {cname cgithub cbranch crevision chksum} [option cargo.crates_github] {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set cratefile       ${cname}-${crevision}.tar.gz
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set cratetag        crate-${cname}-${chksum}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        distfiles-append    ${cratefile}:${cratetag}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        master_sites-append https://github.com/${cgithub}/archive/${crevision}.tar.gz?dummy=:${cratetag}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        checksums-append    ${cratefile} sha256 ${chksum}
</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;'>+port::register_callback rust::handle_crates
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc rust::extract_crate {cratefile} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set tar [findBinary tar ${portutil::autoconf::tar_path}]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    system -W "[option cargo.home]/macports" "$tar -xf [shellescape [option distpath]/${cratefile}]"
</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 rust::write_cargo_checksum {cdirname chksum} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # although cargo will never see the .crate, it expects to find the sha256 checksum here
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set chkfile [open "[option cargo.home]/macports/${cdirname}/.cargo-checksum.json" "w"]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    puts $chkfile "{"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    puts $chkfile "    \"package\": ${chksum},"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    puts $chkfile "    \"files\": {}"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    puts $chkfile "}"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    close $chkfile
</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 rust::old_macos_compatibility {cname cversion} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    global cargo.home subport
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    switch ${cname} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "kqueue" {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            if { "i386" in [option muniversal.architectures] } {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                # see https://gitlab.com/worr/rust-kqueue/-/merge_requests/10
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                reinplace {s|all(target_os = "freebsd", target_arch = "x86")|all(any(target_os = "freebsd", target_os = "macos"), any(target_arch = "x86", target_arch = "powerpc"))|g} \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    ${cargo.home}/macports/${cname}-${cversion}/src/time.rs
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                cargo.offline_cmd-replace --frozen --offline
</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;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # rust-bootstrap requires `macosx_deployment_target` instead of `os.major`
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[option os.platform] ne "darwin" || [vercmp [option macosx_deployment_target] 10.8] >= 0} {
</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;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    switch ${cname} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "crypto-hash" {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            # switch crypto-hash to use openssl instead of commoncrypto
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            # See: https://github.com/malept/crypto-hash/issues/23
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            reinplace "s|target_os = \"macos\"|target_os = \"macos_disabled\"|g" \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                ${cargo.home}/macports/${cname}-${cversion}/src/lib.rs
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            reinplace "s|macos|macos_disabled|g" \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                ${cargo.home}/macports/${cname}-${cversion}/Cargo.toml
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "curl-sys" {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            # curl-sys requires CCDigestGetOutputSizeFromRef which is only available since macOS 10.8
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            # disable USE_SECTRANSP to avoid calling of CCDigestGetOutputSizeFromRef and use OpenSSL instead
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            # See: https://github.com/alexcrichton/curl-rust/issues/429
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            reinplace "s|else if target.contains(\"-apple-\")|else if target.contains(\"-apple_disabled-\")|g" \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                ${cargo.home}/macports/${cname}-${cversion}/build.rs
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            reinplace "s|macos|macos_disabled|g" \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                ${cargo.home}/macports/${cname}-${cversion}/Cargo.toml
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "libgit2-sys" {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            # libgit2-sys requires SSLCreateContext which is only available since macOS 10.8
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            # disable GIT_SECURE_TRANSPORT to avoid calling of SSLCreateContext and use OpenSSL instead
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            reinplace "s|else if target.contains(\"apple\")|else if target.contains(\"apple_disabled\")|g" \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                ${cargo.home}/macports/${cname}-${cversion}/build.rs
</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;'>+    if {[option os.platform] ne "darwin" || [vercmp [option macosx_deployment_target] 10.6] >= 0} {
</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;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    switch ${cname} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "notify" {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            reinplace {s|default = \["macos_fsevent"\]|default = \["macos_kqueue"\]|g} \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                ${cargo.home}/macports/${cname}-${cversion}/Cargo.toml
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "cargo-util" {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            reinplace {s|#\[cfg(not(target_os = "macos"))\]|#\[cfg(not(target_os = "macos_temp"))\]|g} \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                ${cargo.home}/macports/${cname}-${cversion}/src/paths.rs
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            reinplace {s|#\[cfg(target_os = "macos")\]|#\[cfg(not(target_os = "macos"))\]|g} \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                ${cargo.home}/macports/${cname}-${cversion}/src/paths.rs
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            reinplace {s|#\[cfg(not(target_os = "macos_temp"))\]|#\[cfg(target_os = "macos")\]|g} \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                ${cargo.home}/macports/${cname}-${cversion}/src/paths.rs
</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;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc rust::import_crate {cname cversion chksum cratefile} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    global cargo.home
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    ui_info "Adding ${cratefile} to cargo home"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    rust::extract_crate ${cratefile}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    rust::write_cargo_checksum "${cname}-${cversion}" "\"${chksum}\""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    rust::old_macos_compatibility ${cname} ${cversion}
</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 rust::import_crate_github {cname cgithub crevision chksum cratefile} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    global cargo.home
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set crepo [lindex [split ${cgithub} "/"] 1]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set cdirname "${crepo}-${crevision}"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    ui_info "Adding ${cratefile} from github to cargo home"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    rust::extract_crate ${cratefile}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    rust::write_cargo_checksum ${cdirname} "null"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    rust::old_macos_compatibility ${cname} ${cversion}
</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;'>+post-extract {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[llength ${cargo.crates}] > 0 || [llength ${cargo.crates_github}]>0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        file mkdir "${cargo.home}/macports"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        # avoid downloading files from online repository during build phase
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        # use a replacement for crates.io
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        # https://doc.rust-lang.org/cargo/reference/source-replacement.html
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set conf [open "${cargo.home}/config.toml" "w"]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        puts $conf "\[source\]"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        puts $conf "\[source.macports\]"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        puts $conf "directory = \"${cargo.home}/macports\""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        puts $conf "\[source.crates-io\]"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        puts $conf "replace-with = \"macports\""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        puts $conf "local-registry = \"/var/empty\""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        foreach {cname cgithub cbranch crevision chksum} ${cargo.crates_github} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            puts $conf "\[source.\"https://github.com/${cgithub}\"\]"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            puts $conf "git = \"https://github.com/${cgithub}\""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            puts $conf "branch = \"${cbranch}\""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            puts $conf "replace-with = \"macports\""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        close $conf
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        # import all crates
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        foreach {cname cversion chksum} ${cargo.crates} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            set cratefile ${cname}-${cversion}.crate
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            rust::import_crate ${cname} ${cversion} ${chksum} ${cratefile}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        foreach {cname cgithub cbranch crevision chksum} ${cargo.crates_github} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            set cratefile ${cname}-${crevision}.tar.gz
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            rust::import_crate_github ${cname} ${cgithub} ${crevision} ${chksum} ${cratefile}
</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;'>+    if {${subport} ne "rust" && [join [lrange [split ${subport} -] 0 1] -] ne "rust-bootstrap"} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        # see comment below concerning RUSTC and RUSTFLAGS
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        file mkdir "${cargo.home}"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set conf [open "${cargo.home}/config.toml" "a"]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        puts $conf "\[build\]"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        puts $conf "rustc = \"${prefix}/bin/rustc\""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        # be sure to include all architectures in case, e.g., a 64-bit Cargo compiles a 32-bit port
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        foreach arch {arm64 x86_64 i386 ppc ppc64} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            puts $conf "\[target.[option triplet.${arch}]\]"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            puts $conf "linker = \"[compwrap::wrap_compiler ld]\""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        close $conf
</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 rust::append_envs { var {phases {configure build destroot}} } {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    foreach phase ${phases} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ${phase}.env-delete ${var}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ${phase}.env-append ${var}
</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;'>+# Is build caching enabled ?
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# WIP for now ...
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#if {[tbool configure.ccache]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#    # Enable sccache for rust caching
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#    depends_build-append port:sccache
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#    rust::append_envs    RUSTC_WRAPPER=${prefix}/bin/sccache
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#    rust::append_envs    SCCACHE_CACHE_SIZE=2G
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#    rust::append_envs    SCCACHE_DIR=${workpath}/.sccache
</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 rust::set_environment {} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    global prefix configure.pkg_config_path
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    global subport configure.build_arch configure.universal_archs
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    rust::append_envs     "RUST_BACKTRACE=1"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # Propagate pkgconfig path to build and destroot phases as well.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # Needed to work with openssl PG.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if { ${configure.pkg_config_path} ne "" } {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        rust::append_envs "PKG_CONFIG_PATH=[join ${configure.pkg_config_path} :]" {build destroot}
</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;'>+    rust::append_envs     CC=[compwrap::wrap_compiler cc]   {build destroot}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    rust::append_envs     CXX=[compwrap::wrap_compiler cxx] {build destroot}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if { [option openssl.branch] ne "" } {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set openssl_ver                 [string map {. {}} [option openssl.branch]]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        rust::append_envs               OPENSSL_DIR=${prefix}/libexec/openssl${openssl_ver}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        compiler.cpath-prepend          ${prefix}/libexec/openssl${openssl_ver}/include
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        compiler.library_path-prepend   ${prefix}/libexec/openssl${openssl_ver}/lib
</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 {${subport} ne "rust" && [join [lrange [split ${subport} -] 0 1] -] ne "rust-bootstrap"} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        # when CARGO_BUILD_TARGET is set or `--target` is used, RUSTFLAGS and RUSTC are ignored
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        #     rust::append_envs     "RUSTFLAGS=-C linker=[compwrap::wrap_compiler ld]"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        #     rust::append_envs     "RUSTC=${prefix}/bin/rustc"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        # see https://github.com/rust-lang/cargo/issues/4423
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        foreach stage {configure build destroot} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            foreach arch [option muniversal.architectures] {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                ${stage}.env.${arch}-append "CARGO_BUILD_TARGET=[option triplet.${arch}]"
</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;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+port::register_callback rust::set_environment
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc rust::rust_pg_callback {} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    global  subport \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            prefix
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if { ${subport} ne "rust" && [join [lrange [split ${subport} -] 0 1] -] ne "rust-bootstrap" } {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        # port is *not* building Rust
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        depends_build-delete            port:rust
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        depends_build-append            port:rust
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if { ${subport} ne "cargo" } {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            # port is building neither Rust nor Cargo
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            depends_build-delete        port:cargo
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            depends_build-append        port:cargo
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            depends_skip_archcheck-delete   cargo
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            depends_skip_archcheck-append   cargo
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        # port is building Rust
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if { [option rust.llvm.legacy] } {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            depends_build-delete        path:lib/libMacportsLegacySupport.a:legacy-support
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            depends_build-append        path:lib/libMacportsLegacySupport.a:legacy-support
</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 { [option rust.use_cctools] } {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            depends_build-delete        port:cctools
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            depends_build-append        port:cctools
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            depends_skip_archcheck-delete   cctools
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            depends_skip_archcheck-append   cctools
</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;'>+    if { [option openssl.branch] ne "" } {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set openssl_ver                 [string map {. {}} [option openssl.branch]]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        depends_lib-delete              port:openssl${openssl_ver}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        depends_lib-append              port:openssl${openssl_ver}
</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 { [string match "macports-clang*" [option configure.compiler]] && [option os.major] == 10 } {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        # by default, ld64 uses ld64-127 when 9 <= ${os.major} < 11
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        # Rust fails to build when ${os.major} >= 10 and ld64 uses ld64-127
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        # ld64-274 does not seem to build when ${os.major} < 10
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        depends_build-delete            port:ld64-274
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        depends_build-append            port:ld64-274
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        depends_skip_archcheck-delete   ld64-274
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        depends_skip_archcheck-append   ld64-274
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        configure.ldflags-delete        -fuse-ld=${prefix}/bin/ld-274
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        configure.ldflags-append        -fuse-ld=${prefix}/bin/ld-274
</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;'>+    # rust-bootstrap requires `macosx_deployment_target` instead of `os.major`
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if { [option os.platform] eq "darwin" && [vercmp [option macosx_deployment_target] 10.6] < 0 } {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        # __Unwind_RaiseException
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        depends_lib-delete              port:libunwind
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        depends_lib-append              port:libunwind
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        configure.ldflags-delete        -lunwind
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        configure.ldflags-append        -lunwind
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if { [join [lrange [split ${subport} -] 0 1] -] eq "rust-bootstrap" } {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            # Bootstrap compilers are building on newer machines to be run on older ones.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            # Use libMacportsLegacySystem.B.dylib since it is able to use the `__asm("$ld$add$os10.5$...")` trick for symbols that are part of legacy-support *only* on older systems.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            set legacyLib               libMacportsLegacySystem.B.dylib
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            set dep_type                lib
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            # Use the static library since the Rust compiler looks up certain symbols at *runtime* (e.g. `openat`).
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            # Normally, we would want the additional functionality provided by MacPorts.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            # However, for reasons yet unknown, the Rust file system (sys/unix/fs.rs) functions fail when they try to use MacPorts system calls.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            set legacyLib               libMacportsLegacySupport.a
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            set dep_type                build
</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;'>+        # LLVM: CFPropertyListCreateWithStream, uuid_string_t
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        # Rust: _posix_memalign, extended _realpath, _pthread_setname_np, _copyfile_state_get
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        depends_${dep_type}-delete      path:lib/${legacyLib}:legacy-support
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        depends_${dep_type}-append      path:lib/${legacyLib}:legacy-support
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        configure.ldflags-delete        ${prefix}/lib/${legacyLib}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        configure.ldflags-append        ${prefix}/lib/${legacyLib}
</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;'>+    # sometimes Cargo.lock does not exist
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    post-extract {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if { ${cargo.update} } {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            system -W ${worksrcpath} "${cargo.bin} --offline update"
</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;'>+port::register_callback rust::rust_pg_callback
</span></pre><pre style='margin:0'>

</pre>