# Copyright 1999-2018 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2

EAPI=6

CRATES="
adler32-1.0.3
aho-corasick-0.6.10
ansi_term-0.11.0
atty-0.2.11
autocfg-0.1.2
backtrace-0.3.14
backtrace-sys-0.1.28
bit-set-0.5.1
bit-vec-0.5.1
bitflags-1.0.4
bufstream-0.1.4
build_const-0.2.1
byteorder-1.3.1
bytes-0.4.12
bytesize-1.0.0
cc-1.0.31
cfg-if-0.1.7
chrono-0.4.6
clap-2.32.0
cloudabi-0.0.3
commoncrypto-0.2.0
commoncrypto-sys-0.2.0
core-foundation-0.6.3
core-foundation-sys-0.6.2
crc-1.8.1
crc32fast-1.2.0
crossbeam-channel-0.3.8
crossbeam-utils-0.6.5
crypto-hash-0.3.3
curl-0.4.20
curl-sys-0.4.17
env_logger-0.6.1
failure-0.1.5
failure_derive-0.1.5
filetime-0.2.4
flate2-1.0.7
fnv-1.0.6
foreign-types-0.3.2
foreign-types-shared-0.1.1
fs2-0.4.3
fuchsia-cprng-0.1.1
fwdansi-1.0.1
git2-0.8.0
git2-curl-0.9.0
glob-0.2.11
globset-0.4.2
hex-0.3.2
home-0.3.4
http-0.1.17
humantime-1.2.0
idna-0.1.5
ignore-0.4.6
im-rc-12.3.3
iovec-0.1.2
itoa-0.4.3
jobserver-0.1.13
kernel32-sys-0.2.2
lazy_static-1.3.0
lazycell-1.2.1
libc-0.2.50
libgit2-sys-0.7.11
libnghttp2-sys-0.1.1
libssh2-sys-0.2.11
libz-sys-1.0.25
log-0.4.6
matches-0.1.8
memchr-2.2.0
miniz-sys-0.1.11
miniz_oxide-0.2.1
miniz_oxide_c_api-0.2.1
miow-0.3.3
num-integer-0.1.39
num-traits-0.2.6
num_cpus-1.10.0
opener-0.3.2
openssl-0.10.20
openssl-probe-0.1.2
openssl-src-111.2.1+1.1.1b
openssl-sys-0.9.43
percent-encoding-1.0.1
pkg-config-0.3.14
pretty_env_logger-0.3.0
proc-macro2-0.4.27
proptest-0.8.7
quick-error-1.2.2
quote-0.6.11
rand-0.5.6
rand-0.6.5
rand_chacha-0.1.1
rand_core-0.3.1
rand_core-0.4.0
rand_hc-0.1.0
rand_isaac-0.1.1
rand_jitter-0.1.3
rand_os-0.1.3
rand_pcg-0.1.2
rand_xorshift-0.1.1
rdrand-0.4.0
redox_syscall-0.1.51
redox_termios-0.1.1
regex-1.1.2
regex-syntax-0.6.5
remove_dir_all-0.5.1
rustc-demangle-0.1.13
rustc-workspace-hack-1.0.0
rustc_version-0.2.3
rustfix-0.4.4
rusty-fork-0.2.1
ryu-0.2.7
same-file-1.0.4
schannel-0.1.15
scopeguard-0.3.3
semver-0.9.0
semver-parser-0.7.0
serde-1.0.89
serde_derive-1.0.89
serde_ignored-0.0.4
serde_json-1.0.39
shell-escape-0.1.4
sized-chunks-0.1.2
smallvec-0.6.9
socket2-0.3.8
strsim-0.7.0
syn-0.15.29
synstructure-0.10.1
tar-0.4.22
tempfile-3.0.7
termcolor-1.0.4
termion-1.5.1
textwrap-0.10.0
thread_local-0.3.6
time-0.1.42
toml-0.4.10
typenum-1.10.0
ucd-util-0.1.3
unicode-bidi-0.3.4
unicode-normalization-0.1.8
unicode-width-0.1.5
unicode-xid-0.1.0
url-1.7.2
url_serde-0.2.0
utf8-ranges-1.0.2
vcpkg-0.2.6
vec_map-0.8.1
wait-timeout-0.1.5
walkdir-2.2.7
winapi-0.2.8
winapi-0.3.6
winapi-build-0.1.1
winapi-i686-pc-windows-gnu-0.4.0
winapi-util-0.1.2
winapi-x86_64-pc-windows-gnu-0.4.0
wincolor-1.0.1
"

inherit cargo bash-completion-r1 multiprocessing versionator

BOOTSTRAP_VERSION="0.$(($(get_version_component_range 2) - 1)).0"

DESCRIPTION="The Rust's package manager"
HOMEPAGE="http://crates.io"
SRC_URI="https://github.com/rust-lang/cargo/archive/${PV}.tar.gz -> ${P}.tar.gz
	$(cargo_crate_uris ${CRATES})
	x86?   (
		https://static.rust-lang.org/dist/cargo-${BOOTSTRAP_VERSION}-i686-unknown-linux-gnu.tar.xz
	)
	amd64? (
		https://static.rust-lang.org/dist/cargo-${BOOTSTRAP_VERSION}-x86_64-unknown-linux-gnu.tar.xz
	)
	arm? (
		https://static.rust-lang.org/dist/cargo-${BOOTSTRAP_VERSION}-arm-unknown-linux-gnueabi.tar.xz
		https://static.rust-lang.org/dist/cargo-${BOOTSTRAP_VERSION}-arm-unknown-linux-gnueabihf.tar.xz
		https://static.rust-lang.org/dist/cargo-${BOOTSTRAP_VERSION}-armv7-unknown-linux-gnueabihf.tar.xz
	)
	arm64? (
		https://static.rust-lang.org/dist/cargo-${BOOTSTRAP_VERSION}-aarch64-unknown-linux-gnu.tar.xz
	)"

RESTRICT="mirror"
LICENSE="|| ( MIT Apache-2.0 )"
SLOT="0"
KEYWORDS="-* amd64"

IUSE="doc libressl"

if [[ ${ARCH} = "amd64" ]]; then
	TRIPLE="x86_64-unknown-linux-gnu"
elif [[ ${ARCH} = "x86" ]]; then
	TRIPLE="i686-unknown-linux-gnu"
elif [[ ${ARCH} = "arm64" ]]; then
	TRIPLE="aarch64-unknown-linux-gnu"
elif [[ "$(tc-is-softfloat)" != "no" ]] && [[ ${CHOST} == armv6* ]]; then
	TRIPLE="arm-unknown-linux-gnueabi"
elif [[ ${CHOST} == armv6*h* ]]; then
	TRIPLE="arm-unknown-linux-gnueabihf"
elif [[ ${CHOST} == armv7*h* ]]; then
	TRIPLE="armv7-unknown-linux-gnueabihf"
fi

# Hack: Unslotted OpenSSL dependency to allow cargo to continue using OpenSSL
# 1.0.2 across the OpenSSL 1.1 uprev. To be switched back to slotted dependency
# after the OpenSSL uprev is done.
COMMON_DEPEND="sys-libs/zlib
	dev-libs/openssl
	net-libs/libssh2"
RDEPEND="${COMMON_DEPEND}
	!dev-util/cargo-bin
	net-misc/curl[ssl]"
DEPEND="${COMMON_DEPEND}
	>=dev-lang/rust-1.27.0
	dev-util/cmake
	sys-apps/coreutils
	sys-apps/diffutils
	sys-apps/findutils
	sys-apps/sed"

src_configure() {
	# Do nothing
	echo "Configuring cargo..."
}

src_compile() {
	export CARGO_HOME="${ECARGO_HOME}"
	local cargo="${WORKDIR}/cargo-${BOOTSTRAP_VERSION}-${TRIPLE}/cargo/bin/cargo"
	${cargo} build -j$(makeopts_jobs) --release || die

	# Building HTML documentation
	use doc && ${cargo} doc
}

src_install() {
	dobin target/release/cargo

	# Install HTML documentation
	use doc && HTML_DOCS=("target/doc")
	einstalldocs

	newbashcomp src/etc/cargo.bashcomp.sh cargo
	insinto /usr/share/zsh/site-functions
	doins src/etc/_cargo
	doman src/etc/man/*
}
