<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>