# Contributor: Jakub Jirutka <jakub@jirutka.cz>
# Maintainer: Jakub Jirutka <jakub@jirutka.cz>
setvar pkgname = 'cargo'
setvar pkgver = '0.18.0'
# Git revision of prebuilt Cargo to use for bootstrapping.
setvar _bootstrap_gitrev = '6e0c18cccc8b0c06fba8a8d76486f81a792fb420'  # 0.16.0
# Git revision of rust-installer (submodule in cargo repo).
setvar _installer_gitrev = '4f994850808a572e2cc8d43f968893c8e942e9bf'
setvar pkgrel = '0'
setvar pkgdesc = ""The Rust package manager""
setvar url = ""https://crates.io""
setvar arch = ""x86_64""  # limited by rust pkg
setvar license = ""MIT ASL-2.0""
setvar depends = ""rust""
setvar makedepends = ""cmake curl-dev libgit2-dev libssh2-dev libressl-dev python2 zlib-dev""
setvar 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!
setvar _cbuild = ""$CARCH-unknown-linux-musl""
setvar source = ""$pkgname-$pkgver.tar.gz::https://github.com/rust-lang/$pkgname/archive/$pkgver.tar.gz
	https://github.com/rust-lang/rust-installer/archive/$_installer_gitrev/rust-installer-$_installer_gitrev.tar.gz
	cargo-$_bootstrap_gitrev-$_cbuild.tar.gz::https://s3.amazonaws.com/rust-lang-ci/cargo-builds/$_bootstrap_gitrev/cargo-nightly-$_cbuild.tar.gz
	fix-test-build-auth.patch""
setvar builddir = ""$srcdir/$pkgname-$pkgver""

setvar _bootstrap_cargo = ""$srcdir/cargo-nightly-$_cbuild/cargo/bin/cargo""

export CARGOFLAGS="--locked"
export CARGO_HOME="$srcdir/.cargo"

proc prepare {
	default_prepare
	cd $builddir

	rmdir src/rust-installer
	ln -s "$srcdir"/rust-installer-$_installer_gitrev src/rust-installer
}

proc build {
	cd $builddir

	./configure \
		--prefix=/usr \
		--release-channel=stable \
		--cargo="$_bootstrap_cargo"

	# LIBGIT2... Convince libgit2-sys to use the distro libgit2.
	make LIBGIT2_SYS_USE_PKG_CONFIG=1 \
		VERBOSE=1
}

proc check {
	cd $builddir

	./target/$CTARGET/release/cargo --version'

	# XXX: ignore test failures for now
	CFG_DISABLE_CROSS_TESTS=1' \
		$_bootstrap_cargo test \
			--release \
			--target $CTARGET \
			--no-fail-fast \
			--verbose || true
}

proc package {
	cd $builddir

	make install DESTDIR="$pkgdir"

	# Remove installer artifacts (manifests, uninstall scripts, etc.)
	rm -rv "$pkgdir"/usr/lib
}

proc bashcomp {
	setvar pkgdesc = ""Bash completions for $pkgname""
	setvar depends = """"
	setvar install_if = ""$pkgname=$pkgver-r$pkgrel bash""

	_mv "$pkgdir"/usr/etc/bash_completion.d/* \
		"$subpkgdir"/usr/share/bash-completion/completions/

	# Clean directories which are supposed to be empty.
	rmdir -p "$pkgdir"/usr/etc/bash_completion.d 2>/dev/null || true
}

proc zshcomp {
	setvar pkgdesc = ""ZSH completions for $pkgname""
	setvar depends = """"
	setvar install_if = ""$pkgname=$pkgver-r$pkgrel zsh""

	_mv "$pkgdir"/usr/share/zsh "$subpkgdir"/usr/share/
	rmdir "$pkgdir"/usr/share
}

proc _mv {
	local destfor dest in @ARGV { true; }  # get last argument
	mkdir -p $dest
	mv $[join(ARGV)]
}

setvar sha512sums = ""561d6817555da802e99964daa74550cc47a285903301da12a245bb62e5857c18069d87a520c5cefb62aecfe5561666352d57dca8f75758f81ea82709565577d2  cargo-0.18.0.tar.gz
9ceb4755890ad3ae68ce141231c5114077261e0279d3a9a6208053f8d3386c9198e6b94d6321b456648dd5baa86dfc3ae81df44b67d41b428d11afd6763f0cff  rust-installer-4f994850808a572e2cc8d43f968893c8e942e9bf.tar.gz
4df33353b6be1af822220ca03f9ec5a3b6421c9b10ec17b864be586ba495c6210bac70d904b0e0b35eff62ef2c9a681ded526e5cbd37e326dc3146742aa659de  cargo-6e0c18cccc8b0c06fba8a8d76486f81a792fb420-x86_64-unknown-linux-musl.tar.gz
6a789fc1bf0eb19dde9267a10f7506787d6a4bb8316b09f4dee5da083c0fb0bad87630b238d92ef3aaf114d9a337a87797c8ac427f71c53ac06106925d459ee0  fix-test-build-auth.patch""