development/cargo: Optionally support vendored crate dependencies.

Signed-off-by: Willy Sudiarto Raharjo <willysr@slackbuilds.org>
This commit is contained in:
Andrew Clemons 2017-04-06 19:59:15 +07:00 committed by Willy Sudiarto Raharjo
parent 921c445b01
commit 69d62faa22
3 changed files with 131 additions and 85 deletions

View file

@ -4,10 +4,18 @@ This will build cargo from source, which like rust, requires itself to
bootstrap. This will build cargo using the installed rust and previously stable
version of cargo.
If you already have rust and cargo installed, this slackbuild will use these to
If you already have cargo installed, this slackbuild will use it to
bootstrap this version of cargo instead of a downloaded one.
You can also force either behaviour through the LOCAL_BOOTSTRAP=yes|no
parameter.
LOCAL_BOOTSTRAP=no ./cargo.SlackBuild
LOCAL_BOOTSTRAP=no ./cargo.SlackBuild
By default, the slackbuild requires all crate dependencies to be downloaded
individually. Optionally, if you have cargo-vendor installed, you can create
a "vendored" tarball which contains all the crate dependencies exploded into a
single directory and then compressed together as a tarball.
The script cargo-mkvendortarball.sh will generate this for you. The slackbuild
will automatically use this tarball if found in the current directory.

View file

@ -0,0 +1,34 @@
#!/bin/sh
# Script to build a vendored tarball for cargo
# Copyright 2017 Andrew Clemons, Wellington New Zealand
# All rights reserved.
#
# Redistribution and use of this script, with or without modification, is
# permitted provided that the following conditions are met:
#
# 1. Redistributions of this script must retain the above copyright
# notice, this list of conditions and the following disclaimer.
#
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
set -e
PRGNAM=cargo
VERSION=${VERSION:-0.17.0}
rm -rf "$PRGNAM-$VERSION" "$PRGNAM-$VERSION-vendor.tar.gz"
tar xvf "$PRGNAM-$VERSION.tar.gz"
cd "$PRGNAM-$VERSION"
cargo vendor
tar cvfz ../"$PRGNAM-$VERSION-vendor.tar.gz" vendor

View file

@ -121,94 +121,98 @@ replace-with = 'vendored-sources'
directory = '$(pwd)/vendor'
EOF
# deps and versions come from Cargo.lock
# cargo vender can be used to generate the checksums
mkdir vendor
(
cd vendor
if [ -e $CWD/$PRGNAM-$VERSION-vendor.tar.gz ] ; then
tar xvf $CWD/$PRGNAM-$VERSION-vendor.tar.gz
else
# deps and versions come from Cargo.lock
# cargo vender can be used to generate the checksums
mkdir vendor
(
cd vendor
for dependency in advapi32-sys=0.2.0 \
aho-corasick=0.5.3 \
bitflags=0.7.0 \
bufstream=0.1.2 \
cfg-if=0.1.0 \
cmake=0.1.19 \
crossbeam=0.2.10 \
curl=0.4.1 \
curl-sys=0.3.6 \
docopt=0.6.86 \
env_logger=0.3.5 \
error-chain=0.7.2 \
filetime=0.1.10 \
flate2=0.2.14 \
fs2=0.3.0 \
gcc=0.3.39 \
gdi32-sys=0.2.0 \
git2=0.6.3 \
git2-curl=0.7.0 \
glob=0.2.11 \
hamcrest=0.1.1 \
idna=0.1.0 \
kernel32-sys=0.2.2 \
lazy_static=0.2.2 \
libc=0.2.18 \
libgit2-sys=0.6.6 \
libssh2-sys=0.2.5 \
libz-sys=1.0.13 \
log=0.3.6 \
matches=0.1.4 \
memchr=0.1.11 \
metadeps=1.1.1 \
miniz-sys=0.1.7 \
miow=0.1.3 \
net2=0.2.26 \
num=0.1.36 \
num-bigint=0.1.35 \
num-complex=0.1.35 \
num-integer=0.1.32 \
num-iter=0.1.32 \
num-rational=0.1.35 \
num-traits=0.1.36 \
num_cpus=1.1.0 \
openssl=0.9.6 \
openssl-probe=0.1.0 \
openssl-sys=0.9.6 \
pkg-config=0.3.8 \
psapi-sys=0.1.0 \
rand=0.3.14 \
regex=0.1.80 \
regex-syntax=0.3.9 \
rustc-serialize=0.3.21 \
semver=0.5.1 \
semver-parser=0.6.1 \
shell-escape=0.1.3 \
strsim=0.5.1 \
tar=0.4.9 \
tempdir=0.3.5 \
term=0.4.4 \
thread-id=2.0.0 \
thread_local=0.2.7 \
toml=0.2.1 \
unicode-bidi=0.2.3 \
unicode-normalization=0.1.2 \
url=1.2.3 \
user32-sys=0.2.0 \
utf8-ranges=0.1.3 \
winapi=0.2.8 \
winapi-build=0.1.1 \
ws2_32-sys=0.2.1 ; do
for dependency in advapi32-sys=0.2.0 \
aho-corasick=0.5.3 \
bitflags=0.7.0 \
bufstream=0.1.2 \
cfg-if=0.1.0 \
cmake=0.1.19 \
crossbeam=0.2.10 \
curl=0.4.1 \
curl-sys=0.3.6 \
docopt=0.6.86 \
env_logger=0.3.5 \
error-chain=0.7.2 \
filetime=0.1.10 \
flate2=0.2.14 \
fs2=0.3.0 \
gcc=0.3.39 \
gdi32-sys=0.2.0 \
git2=0.6.3 \
git2-curl=0.7.0 \
glob=0.2.11 \
hamcrest=0.1.1 \
idna=0.1.0 \
kernel32-sys=0.2.2 \
lazy_static=0.2.2 \
libc=0.2.18 \
libgit2-sys=0.6.6 \
libssh2-sys=0.2.5 \
libz-sys=1.0.13 \
log=0.3.6 \
matches=0.1.4 \
memchr=0.1.11 \
metadeps=1.1.1 \
miniz-sys=0.1.7 \
miow=0.1.3 \
net2=0.2.26 \
num=0.1.36 \
num-bigint=0.1.35 \
num-complex=0.1.35 \
num-integer=0.1.32 \
num-iter=0.1.32 \
num-rational=0.1.35 \
num-traits=0.1.36 \
num_cpus=1.1.0 \
openssl=0.9.6 \
openssl-probe=0.1.0 \
openssl-sys=0.9.6 \
pkg-config=0.3.8 \
psapi-sys=0.1.0 \
rand=0.3.14 \
regex=0.1.80 \
regex-syntax=0.3.9 \
rustc-serialize=0.3.21 \
semver=0.5.1 \
semver-parser=0.6.1 \
shell-escape=0.1.3 \
strsim=0.5.1 \
tar=0.4.9 \
tempdir=0.3.5 \
term=0.4.4 \
thread-id=2.0.0 \
thread_local=0.2.7 \
toml=0.2.1 \
unicode-bidi=0.2.3 \
unicode-normalization=0.1.2 \
url=1.2.3 \
user32-sys=0.2.0 \
utf8-ranges=0.1.3 \
winapi=0.2.8 \
winapi-build=0.1.1 \
ws2_32-sys=0.2.1 ; do
dep="$(echo "$dependency" | cut -d= -f1)"
ver="$(echo "$dependency" | cut -d= -f2)"
dep="$(echo "$dependency" | cut -d= -f1)"
ver="$(echo "$dependency" | cut -d= -f2)"
tar xvf $CWD/$dep-$ver.crate
tar xvf $CWD/$dep-$ver.crate
mv $dep-$ver $dep
mv $dep-$ver $dep
touch $dep/.cargo-ok
zcat $CWD/checksums/$dep-cargo-checksum.json.gz > $dep/.cargo-checksum.json
done
)
touch $dep/.cargo-ok
zcat $CWD/checksums/$dep-cargo-checksum.json.gz > $dep/.cargo-checksum.json
done
)
fi
make
make install DESTDIR=$PKG