# Contributor: Jakub Jirutka # Maintainer: Jakub Jirutka pkgname=cargo pkgver=0.22.0 pkgrel=4 pkgdesc="The Rust package manager" url="https://crates.io" arch="x86_64" # limited by rust pkg license="MIT Apache-2.0" depends="rust" makedepends="cmake curl-dev libgit2-dev libssh2-dev libressl-dev python2 zlib-dev" subpackages="$pkgname-doc $pkgname-bash-completion:bashcomp:noarch $pkgname-zsh-completion:zshcomp:noarch" # Note: Cargo is self-hosted, so you need cargo to build cargo (ugh). # XXX: Cargo depends on many crates (Rust packages) and currently downloads # them itself in the build phase. This quite violates our policy. However, # unlike some other package managers, Cargo does not download arbitrary # packages from the Internet without any verification. The source tarball # includes file Cargo.lock that contains complete dependency tree with exact # version and checksum for each crate . With --locked we force cargo to # adhere to this file and verify checksums. So it provides the same # guarantees as abuild. That said, for now it's exception only for cargo # package and should not be applied to other rust packages! _bootstrap_cargo_ver=0.17.0 # We must use newer version of openssl crate and patch it for compatibility # with LibreSSL 2.6.3. _crate_openssl_ver="0.9.24" source="$pkgname-$pkgver.tar.gz::https://github.com/rust-lang/$pkgname/archive/$pkgver.tar.gz https://dev.alpinelinux.org/archive/$pkgname/$pkgname-$_bootstrap_cargo_ver-x86_64-alpine-linux-musl.tar.gz tests-fix-build-auth-http_auth_offered.patch tests-ignore-ssh_something_happens.patch tests-ignore-rustdoc.patch replace-openssl-crate.patch rust-openssl-$_crate_openssl_ver.tar.gz::https://github.com/sfackler/rust-openssl/archive/openssl-v$_crate_openssl_ver.tar.gz" builddir="$srcdir/$pkgname-$pkgver" export CARGO_HOME="$srcdir/.cargo" _bootstrap_cargo="$srcdir/$pkgname-$_bootstrap_cargo_ver-$CHOST/bin/cargo" _cargo_opts="--release --verbose ${JOBS:+--jobs $JOBS}" # Uploaded cargo binary from the built package to dev.a.o, so it can be used # for building cargo next time (needed for bootstrapping). # TODO: Build statically linked binary for bootstrapping! snapshot() { local apkfile="$REPODEST/$repo/$CARCH/$pkgname-$pkgver-r$pkgrel.apk" local tarname="$pkgname-$pkgver-$CHOST" [ -f "$apkfile" ] || die "$apkfile does not exist, run abuild -r" mkdir -p "$srcdir/$tarname" cd "$srcdir" tar -C "$tarname" -x --strip-components 1 -f "$apkfile" usr/bin/cargo tar -czf "$tarname.tar.gz" "$tarname" msg "Uploading $tarname.tar.gz to dev.alpinelinux.org" scp "$tarname.tar.gz" dev.alpinelinux.org:/archive/$pkgname/ } prepare() { mv "$srcdir"/rust-openssl-openssl-v$_crate_openssl_ver "$builddir"/openssl default_prepare } build() { cd "$builddir" # Convince libgit2-sys to use the distro libgit2. export LIBGIT2_SYS_USE_PKG_CONFIG=1 "$_bootstrap_cargo" build $_cargo_opts "$_bootstrap_cargo" test $_cargo_opts --no-run } check() { cd "$builddir" ./target/release/cargo --version CFG_DISABLE_CROSS_TESTS=1 RUST_BACKTRACE=1 \ "$_bootstrap_cargo" test $_cargo_opts --no-fail-fast } package() { cd "$builddir" install -D -m 755 target/release/cargo "$pkgdir"/usr/bin/cargo mkdir -p "$pkgdir"/usr/share/man/man1 install -m 644 -t "$pkgdir"/usr/share/man/man1/ src/etc/man/*.1 mkdir -p "$pkgdir"/usr/share/licenses/$pkgname install -m 644 -t "$pkgdir"/usr/share/licenses/$pkgname/ LICENSE* } bashcomp() { pkgdesc="Bash completions for $pkgname" depends="" install_if="$pkgname=$pkgver-r$pkgrel bash" cd "$builddir" install -D -m 644 -D src/etc/cargo.bashcomp.sh \ "$subpkgdir"/usr/share/bash-completion/completions/cargo } zshcomp() { pkgdesc="ZSH completions for $pkgname" depends="" install_if="$pkgname=$pkgver-r$pkgrel zsh" cd "$builddir" install -D -m 644 src/etc/_cargo \ "$subpkgdir"/usr/share/zsh/site-functions/_cargo } sha512sums="31764df0462fcd0e7ddd29aee63ed0916b0d05e44d72aa815b3b823256e90f85e582c468a517d048e4451dfc1a3b22434abf25d825d3d926ab7a95f7bb44ad40 cargo-0.22.0.tar.gz b78a03942344852fd1a8c0ac893580c589757d4946150e5959e1df08b163b94ce5319236a48506c18f987cf3500a2c7cfe808eef13092c45d271e169946a18d1 cargo-0.17.0-x86_64-alpine-linux-musl.tar.gz 4e9a0d409951a72b5c1d3578cb310c0efc5d98a5b963432ec4f485f1d58d2354f0050c31574d6bd9090b7247468ef1a13b04b133deabe6daed91032764468f97 tests-fix-build-auth-http_auth_offered.patch 17c669a71443e21cc5e5cc6eb99933c20562b7df9d859c493ff25252167eb1aea6dd7322a06207776eab1c769464f95a432d1520a949512a52592b1eb115a4be tests-ignore-ssh_something_happens.patch cf2c55d71cb376fdaac7efedfd9bb7a1d8b8709c7cd98aa7e74e574885e8dfa17fbb61050335d7fc63932c5b45ac1ca33cf516d4340e1ba9fe5f41fd6983078e tests-ignore-rustdoc.patch 93232da79f95703976568475e02246cf9c8b5df0240a5395c00682324e4ae426313356c8345db8a6a99fad8ec2cf72560dbb498801e6994aa0a43939938dc65c replace-openssl-crate.patch 885add87d74e3a8cbaf7fa66a632d1f58fbe729964fc48eae7abefd0d738d8bfea3a76801cca7f93868fdc52012813bed6de622ec87704b2cfae29826517e76f rust-openssl-0.9.24.tar.gz"