<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/7ae4142ad07c771fb6036cd1bf5b0a94444736f2">https://github.com/macports/macports-ports/commit/7ae4142ad07c771fb6036cd1bf5b0a94444736f2</a></p>
<pre style="white-space: pre; background: #F8F8F8">The following commit(s) were added to refs/heads/master by this push:
<span style='display:block; white-space:pre;color:#404040;'> new 7ae4142ad07 cargo_fetch PG: add functionality from caro PG
</span>7ae4142ad07 is described below
<span style='display:block; white-space:pre;color:#808000;'>commit 7ae4142ad07c771fb6036cd1bf5b0a94444736f2
</span>Author: Marcus Calhoun-Lopez <mcalhoun@macports.org>
AuthorDate: Thu Apr 6 05:05:31 2023 -0700
<span style='display:block; white-space:pre;color:#404040;'> cargo_fetch PG: add functionality from caro PG
</span>---
_resources/port1.0/group/cargo_fetch-1.0.tcl | 539 +++++++++++++++++----------
1 file changed, 345 insertions(+), 194 deletions(-)
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/_resources/port1.0/group/cargo_fetch-1.0.tcl b/_resources/port1.0/group/cargo_fetch-1.0.tcl
</span><span style='display:block; white-space:pre;color:#808080;'>index 7bc1d7dbf85..94427fb2b30 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/_resources/port1.0/group/cargo_fetch-1.0.tcl
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/_resources/port1.0/group/cargo_fetch-1.0.tcl
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -37,82 +37,179 @@
</span> # baz author/baz branch abcdef12345678...commit...abcdef12345678 fedcba654321...
#
<span style='display:block; white-space:pre;background:#ffe0e0;'>-PortGroup compiler_blacklist_versions 1.0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-PortGroup legacysupport 1.1
</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:#ffe0e0;'>-options cargo.bin cargo.home cargo.crates cargo.crates_github
</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.dir \
</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 cargo.update
</span>
default cargo.bin {${prefix}/bin/cargo}
default cargo.home {${workpath}/.home/.cargo}
<span style='display:block; white-space:pre;background:#e0ffe0;'>+default cargo.dir {${worksrcpath}}
</span> default cargo.crates {}
default cargo.crates_github {}
<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;'>+# use `--remap-path-prefix` to prevent build information from bing included installed binaries
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+options rust.remap
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default rust.remap {${cargo.home} "" ${worksrcpath} ""}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# flags to be passed to the rust compiler
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# --remap-path-prefix=... is eventually added unless rust.remap is empty
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+options rust.flags
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default rust.flags {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> # As building with rust uses the same underlying compiler as used to build it
# replicate the same compiler selection options here
<span style='display:block; white-space:pre;background:#ffe0e0;'>-compiler.cxx_standard 2017
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-compiler.blacklist-append {macports-clang-[4-9].0}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-option_proc cargo.crates handle_cargo_crates
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-proc handle_cargo_crates {option action {value ""}} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if {${action} eq "set"} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- foreach {cname cversion chksum} ${value} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set cratefile ${cname}-${cversion}.crate
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- # The same crate name can appear with multiple versions. Use
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- # a combination of crate name and checksum as unique identifier.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- # As the :disttag cannot contain dots, the version number cannot be
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- # used.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- # To download the crate file curl-0.4.11.crate, the URL is
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- # https://crates.io/api/v1/crates/curl/0.4.11/download.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- # Use ?dummy= to ignore ${distfile}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- # see https://trac.macports.org/wiki/PortfileRecipes#fetchwithgetparams
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set cratetag crate-${cname}-${chksum}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- distfiles-append ${cratefile}:${cratetag}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- master_sites-append https://crates.io/api/v1/crates/${cname}/${cversion}/download?dummy=:${cratetag}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- checksums-append ${cratefile} sha256 ${chksum}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</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;'>+# 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;'>+####################################################################################################################################
</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;'>+# 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:#ffe0e0;'>-}
</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:#ffe0e0;'>-option_proc cargo.crates_github handle_cargo_crates_github
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-proc handle_cargo_crates_github {option action {value ""}} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if {${action} eq "set"} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- foreach {cname cgithub cbranch crevision chksum} ${value} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set cratefile ${cname}-${crevision}.tar.gz
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- # The same crate name can appear with multiple versions. Use
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- # a combination of crate name and checksum as unique identifier.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- # As the :disttag cannot contain dots, the version number cannot be
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- # used.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set cratetag crate-${cname}-${chksum}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- distfiles-append ${cratefile}:${cratetag}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- master_sites-append https://github.com/${cgithub}/archive/${crevision}.tar.gz?dummy=:${cratetag}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- checksums-append ${cratefile} sha256 ${chksum}
</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;'>+ return $val
</span> }
<span style='display:block; white-space:pre;background:#ffe0e0;'>-proc cargo._extract_crate {cratefile} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- global cargo.home distpath
</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;'>+proc rust::extract_crate {cratefile} {
</span> set tar [findBinary tar ${portutil::autoconf::tar_path}]
<span style='display:block; white-space:pre;background:#ffe0e0;'>- system -W "${cargo.home}/macports" "$tar -xf [shellescape ${distpath}/${cratefile}]"
</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:#ffe0e0;'>-proc cargo._write_cargo_checksum {cdirname chksum} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- global cargo.home
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc rust::write_cargo_checksum {cdirname chksum} {
</span> # although cargo will never see the .crate, it expects to find the sha256 checksum here
<span style='display:block; white-space:pre;background:#ffe0e0;'>- set chkfile [open "${cargo.home}/macports/${cdirname}/.cargo-checksum.json" "w"]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set chkfile [open "[option cargo.home]/macports/${cdirname}/.cargo-checksum.json" "w"]
</span> puts $chkfile "{"
puts $chkfile " \"package\": ${chksum},"
puts $chkfile " \"files\": {}"
puts $chkfile "}"
close $chkfile
}
<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 { [vercmp ${cversion} < 1.0.5] && "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;'>+ "curl-sys" {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if { [vercmp ${cversion} < 0.4.56] } {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # on Mac OS X 10.6, clang exists, but `clang --print-search-dirs` returns an empty library directory
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # see https://github.com/alexcrichton/curl-rust/commit/b3a3ce876921f2e82a145d9abd539cd8f9b7ab7b
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # see https://trac.macports.org/ticket/64146#comment:16
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # on other systems, we want the static library of the compiler we are using and not necessarily the system compiler
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # see https://github.com/alexcrichton/curl-rust/commit/a6969c03b1e8f66bc4c801914327176ed38f44c5
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # see https://github.com/alexcrichton/curl-rust/issues/279
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # for upstream pull request, see https://github.com/alexcrichton/curl-rust/pull/451
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ reinplace "s|Command::new(\"clang\")|cc::Build::new().get_compiler().to_command()|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:#ffe0e0;'>-proc cargo._old_macos_compatibility {cname cversion} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- global os.platform os.major cargo.home
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if {${os.platform} ne "darwin" || ${os.major} >= 12} {
</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]} {
</span> return
}
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -121,94 +218,66 @@ proc cargo._old_macos_compatibility {cname cversion} {
</span> # switch crypto-hash to use openssl instead of commoncrypto
# See: https://github.com/malept/crypto-hash/issues/23
reinplace "s|target_os = \"macos\"|target_os = \"macos_disabled\"|g" \
<span style='display:block; white-space:pre;background:#ffe0e0;'>- ${cargo.home}/macports/crypto-hash-${cversion}/src/lib.rs
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ${cargo.home}/macports/${cname}-${cversion}/src/lib.rs
</span> reinplace "s|macos|macos_disabled|g" \
<span style='display:block; white-space:pre;background:#ffe0e0;'>- ${cargo.home}/macports/crypto-hash-${cversion}/Cargo.toml
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ${cargo.home}/macports/${cname}-${cversion}/Cargo.toml
</span> }
"curl-sys" {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- # curl-sys requires CCDigestGetOutputSizeFromRef which is available since macOS 10.8
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- # disable USE_SECTRANSP to avoid calling of CCDigestGetOutputSizeFromRef
</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> # See: https://github.com/alexcrichton/curl-rust/issues/429
<span style='display:block; white-space:pre;background:#ffe0e0;'>- reinplace "s|USE_SECTRANSP|USE_SECTRANSP_DISABLED|g" \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ${cargo.home}/macports/curl-sys-${cversion}/build.rs
</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;'>+ "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]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return
</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:#ffe0e0;'>-proc cargo._import_crate {cname cversion chksum cratefile} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc rust::import_crate {cname cversion chksum cratefile} {
</span> global cargo.home
ui_info "Adding ${cratefile} to cargo home"
<span style='display:block; white-space:pre;background:#ffe0e0;'>- cargo._extract_crate ${cratefile}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- cargo._write_cargo_checksum "${cname}-${cversion}" "\"${chksum}\""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- cargo._old_macos_compatibility ${cname} ${cversion}
</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:#ffe0e0;'>-proc cargo._import_crate_github {cname cgithub crevision chksum cratefile} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc rust::import_crate_github {cname cgithub crevision chksum cratefile} {
</span> global cargo.home
set crepo [lindex [split ${cgithub} "/"] 1]
set cdirname "${crepo}-${crevision}"
ui_info "Adding ${cratefile} from github to cargo home"
<span style='display:block; white-space:pre;background:#ffe0e0;'>- cargo._extract_crate ${cratefile}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- cargo._write_cargo_checksum ${cdirname} "null"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- cargo._old_macos_compatibility ${cname} ${cversion}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# The distfiles of the main port will also be stored in this directory,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# but this is the only way to allow reusing the same crates across multiple ports.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-default dist_subdir {[cargo._dist_subdir]}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-proc cargo._dist_subdir {} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- global name cargo.crates cargo.crates_github
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if {[llength ${cargo.crates}] > 0 || [llength ${cargo.crates_github}]>0} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- return cargo-crates
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- return ${name}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-default extract.only {[cargo._disttagclean $distfiles]}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# based on portextract::disttagclean from portextract.tcl
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-proc cargo._disttagclean {list} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- global cargo.crates cargo.crates_github
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if {$list eq ""} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- return $list
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- foreach fname $list {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set name [getdistname ${fname}]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set is_crate no
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- foreach {cname cversion chksum} ${cargo.crates} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set cratefile ${cname}-${cversion}.crate
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if {${name} eq ${cratefile}} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set is_crate yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- foreach {cname cgithub cbranch crevision chksum} ${cargo.crates_github} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set cratefile ${cname}-${crevision}.tar.gz
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if {${name} eq ${cratefile}} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set is_crate yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if {!${is_crate}} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- lappend val ${name}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- return $val
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if {${subport} ne "cargo-bootstrap" && ${subport} ne "cargo-stage1" && ${subport} ne "cargo"} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- depends_build-append port:cargo
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- # do not force all Portfiles to switch from depends_build to depends_build-append
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- proc cargo.add_dependencies {} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- depends_build-delete port:cargo
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- depends_build-append port:cargo
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- port::register_callback cargo.add_dependencies
</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} ${crevision}
</span> }
post-extract {
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -218,7 +287,7 @@ post-extract {
</span> # avoid downloading files from online repository during build phase
# use a replacement for crates.io
# https://doc.rust-lang.org/cargo/reference/source-replacement.html
<span style='display:block; white-space:pre;background:#ffe0e0;'>- set conf [open "${cargo.home}/config" "w"]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set conf [open "${cargo.home}/config.toml" "w"]
</span> puts $conf "\[source\]"
puts $conf "\[source.macports\]"
puts $conf "directory = \"${cargo.home}/macports\""
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -236,111 +305,193 @@ post-extract {
</span> # import all crates
foreach {cname cversion chksum} ${cargo.crates} {
set cratefile ${cname}-${cversion}.crate
<span style='display:block; white-space:pre;background:#ffe0e0;'>- cargo._import_crate ${cname} ${cversion} ${chksum} ${cratefile}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ rust::import_crate ${cname} ${cversion} ${chksum} ${cratefile}
</span> }
foreach {cname cgithub cbranch crevision chksum} ${cargo.crates_github} {
set cratefile ${cname}-${crevision}.tar.gz
<span style='display:block; white-space:pre;background:#ffe0e0;'>- cargo._import_crate_github ${cname} ${cgithub} ${crevision} ${chksum} ${cratefile}
</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:#ffe0e0;'>-}
</span>
<span style='display:block; white-space:pre;background:#ffe0e0;'>-# MacPorts use the name i386 for 32-bit Intel architecture
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Cargo and Rust use the name i686
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-proc cargo.translate_arch_name {arch} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if {${arch} eq "i386"} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- return "i686"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- } elseif {${arch} eq "arm64"} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- return "aarch64"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- return ${arch}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {${subport} ne "rust" && [join [lrange [split ${subport} -] 0 1] -] ne "rust-bootstrap"} {
</span>
<span style='display:block; white-space:pre;background:#ffe0e0;'>-proc cargo.rust_platform {{arch ""}} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- global os.platform configure.build_arch muniversal.current_arch
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if {${arch} eq ""} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if {[info exists muniversal.current_arch]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set arch ${muniversal.current_arch}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set arch ${configure.build_arch}
</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;'>+ if {[option rust.flags] ne ""} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ puts $conf "rustflags = \[\"[join [option rust.flags] {", "}]\"\]"
</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:#ffe0e0;'>- return [cargo.translate_arch_name ${arch}]-apple-${os.platform}
</span> }
<span style='display:block; white-space:pre;background:#ffe0e0;'>-proc cargo.append_envs { var {phases {configure build destroot}} } {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc rust::append_envs { var {phases {configure build destroot}} } {
</span> foreach phase ${phases} {
${phase}.env-delete ${var}
${phase}.env-append ${var}
}
}
<span style='display:block; white-space:pre;background:#ffe0e0;'>-# see https://trac.macports.org/wiki/UsingTheRightCompiler
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-proc cargo.set_compiler_envs {} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- global configure.cc configure.cxx
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- cargo.append_envs CC=${configure.cc} {build destroot}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- cargo.append_envs CXX=${configure.cxx} {build destroot}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- cargo.append_envs "RUSTFLAGS=-C linker=${configure.cc}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-port::register_callback cargo.set_compiler_envs
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span> # Is build caching enabled ?
# WIP for now ...
#if {[tbool configure.ccache]} {
# # Enable sccache for rust caching
# depends_build-append port:sccache
<span style='display:block; white-space:pre;background:#ffe0e0;'>-# cargo.append_envs RUSTC_WRAPPER=${prefix}/bin/sccache
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# cargo.append_envs SCCACHE_CACHE_SIZE=2G
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# cargo.append_envs SCCACHE_DIR=${workpath}/.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:#ffe0e0;'>-# do not force all Portfiles to switch from ${stage}.env to ${stage}.env-append
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-proc cargo.environments {} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- global os.major prefix configure.pkg_config_path
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- global configure.cc configure.cxx subport configure.build_arch configure.universal_archs
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- global merger_configure_env merger_build_env merger_destroot_env worksrcpath
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set cargo_ld ${configure.cc}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# if { ${os.major} <= [option legacysupport.newest_darwin_requires_legacy] } {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# # Use wrapped rust compilers
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# depends_build-append port:rust-compiler-wrap
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# configure.cc ${prefix}/libexec/rust-compiler-wrap/bin/clang
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# configure.cxx ${prefix}/libexec/rust-compiler-wrap/bin/clang++
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# configure.objc ${prefix}/libexec/rust-compiler-wrap/bin/clang
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# configure.objcxx ${prefix}/libexec/rust-compiler-wrap/bin/clang++
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# set cargo_ld ${prefix}/libexec/rust-compiler-wrap/bin/ld-rust
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- cargo.append_envs CC=${configure.cc} {build destroot}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- cargo.append_envs CXX=${configure.cxx} {build destroot}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- cargo.append_envs "RUSTFLAGS=-C linker=${cargo_ld}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- cargo.append_envs "RUST_BACKTRACE=1"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- cargo.append_envs "CARGO_BUILD_RUSTC=${prefix}/bin/rustc"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- # Propagate pkgconfig path to build and destroot phases as well
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- # Needed to work with openssl PG
</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;'>+ 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;'>+ configure.pkg_config_path-prepend ${prefix}/libexec/openssl${openssl_ver}/lib/pkgconfig
</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;'>+ # 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> if { ${configure.pkg_config_path} ne "" } {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- cargo.append_envs "PKG_CONFIG_PATH=${configure.pkg_config_path}" {build destroot}
</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:#ffe0e0;'>- # CARGO_BUILD_TARGET does not work correctly
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- # see the patchfile path-dyld.diff in cargo Portfile
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if {${subport} ne "cargo-stage1"} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if {![variant_exists universal] || ![variant_isset universal]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- cargo.append_envs CARGO_BUILD_TARGET=[cargo.rust_platform ${configure.build_arch}] {configure build destroot}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- foreach stage {configure build destroot} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- foreach arch ${configure.universal_archs} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- lappend merger_${stage}_env(${arch}) \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- CARGO_BUILD_TARGET=[cargo.rust_platform ${arch}]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</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:#ffe0e0;'>-port::register_callback cargo.environments
</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;'>+ foreach {f s} [option rust.remap] {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ rust.flags-prepend --remap-path-prefix=${f}=${s}
</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;'>+ 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] < 11 } {
</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 architecture is x86_64 and ld64 uses ld64-127
</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]} {
</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;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # code should mimic legacy-support
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # see https://github.com/macports/macports-ports/blob/master/devel/legacy-support/Portfile
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set max_darwin_reexport 19
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if { [option configure.build_arch] eq "arm64" || [option os.major] > ${max_darwin_reexport} } {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # ${prefix}/lib/libMacportsLegacySystem.B.dylib does not exist
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # see https://trac.macports.org/ticket/65255
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ known_fail yes
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ pre-fetch {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ui_error "${subport} requires libMacportsLegacySystem.B.dylib, which is provided by legacy-support"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return -code error "incompatible system configuration"
</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;'>+ } 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:#ffe0e0;'>-# see https://trac.macports.org/ticket/51643 for a similar case
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-PortGroup muniversal 1.0
</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 -Wl,${prefix}/lib/${legacyLib}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ configure.ldflags-append -Wl,${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 ${cargo.dir} "${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>