<pre style='margin:0'>
Rainer Müller (raimue) pushed a commit to branch master
in repository macports-ports.
</pre>
<p><a href="https://github.com/macports/macports-ports/commit/191337a7fe59d51b5fa03f124278afd0e620f3cb">https://github.com/macports/macports-ports/commit/191337a7fe59d51b5fa03f124278afd0e620f3cb</a></p>
<pre style="white-space: pre; background: #F8F8F8"><span style='display:block; white-space:pre;color:#808000;'>commit 191337a7fe59d51b5fa03f124278afd0e620f3cb
</span>Author: Rainer Müller <raimue@macports.org>
AuthorDate: Tue Mar 27 05:20:11 2018 +0200
<span style='display:block; white-space:pre;color:#404040;'> cargo: New portgroup for cargo build system
</span>---
_resources/port1.0/group/cargo-1.0.tcl | 130 +++++++++++++++++++++++++++++++++
1 file changed, 130 insertions(+)
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/_resources/port1.0/group/cargo-1.0.tcl b/_resources/port1.0/group/cargo-1.0.tcl
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 0000000..703475f
</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/cargo-1.0.tcl
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,130 @@
</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;'>+# Copyright (c) 2018 The MacPorts Project
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Redistribution and use in source and binary forms, with or without
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# modification, are permitted provided that the following conditions are
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# met:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# 1. Redistributions of source code must retain the above copyright
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# notice, this list of conditions and the following disclaimer.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# 2. Redistributions in binary form must reproduce the above copyright
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# notice, this list of conditions and the following disclaimer in the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# documentation and/or other materials provided with the distribution.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# 3. Neither the name of Apple Computer, Inc. nor the names of its
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# contributors may be used to endorse or promote products derived from
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# this software without specific prior written permission.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
</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;'>+# This PortGroup supports the cargo build system
</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 cargo 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 4-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;'>+# 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;'>+options cargo.crates cargo.home
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default cargo.home {${workpath}/cargo_home}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+option_proc cargo.crates handle_cargo_crates
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc handle_cargo_crates {option action {value ""}} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {${action} eq "set"} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ foreach {cname cversion chksum} ${value} {
</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;'>+ # 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;'>+ 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;'>+}
</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;'>+dist_subdir cargo-crates
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default extract.only {${distname}${extract.suffix}}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+depends_build port:cargo
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+pre-build {
</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;'>+ # 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" "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;'>+ 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;'>+ ui_debug "Adding ${cratefile} to cargo home"
</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 "${cargo.home}/macports" "$tar -xf ${distpath}/${cratefile}"
</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 "${cargo.home}/macports/${cname}-${cversion}/.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;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+use_configure no
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+build.cmd cargo build
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+build.target --release
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+build.args --frozen
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+build.post_args -v
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+build.env CARGO_HOME=${cargo.home} \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ RUSTFLAGS="-C linker=${configure.cc}"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+destroot {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ui_error "No destroot phase in the Portfile!"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ui_msg "Here is an example destroot phase:"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ui_msg
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ui_msg "destroot {"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ui_msg { xinstall -m 755 ${worksrcpath}/target/release/${name} ${destroot}${prefix}/bin/}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ui_msg { xinstall -m 444 ${worksrcpath}/doc/${name}.1 ${destroot}${prefix}/share/man/man1/}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ui_msg "}"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ui_msg
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ui_msg "Please check if there are additional files (configuration, documentation, etc.) that need to be installed."
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ error "destroot phase not implemented"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span></pre><pre style='margin:0'>
</pre>