# Copyright 2017-2020 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2

EAPI=7

# generated with cargo-ebuild 0.2.0
# needs itoa-0.3.4 for tests
# added bincode-1.2.0 manually
CRATES="
adler32-1.0.4
aho-corasick-0.7.6
ansi_term-0.11.0
ar-0.6.2
arc-swap-0.4.4
arrayref-0.3.5
arrayvec-0.5.1
ascii-0.8.7
ascii-0.9.3
assert_cmd-0.9.1
atty-0.2.13
autocfg-0.1.7
backtrace-0.3.40
backtrace-sys-0.1.32
base64-0.10.1
base64-0.11.0
base64-0.9.3
bincode-0.8.0
bincode-1.2.0
bincode-1.2.1
bitflags-1.2.1
blake2b_simd-0.5.9
block-buffer-0.7.3
block-padding-0.1.5
buf_redux-0.6.3
bufstream-0.1.4
byte-tools-0.3.1
byteorder-1.3.2
bytes-0.4.12
c2-chacha-0.2.3
case-0.1.0
cc-1.0.48
cfg-if-0.1.10
chrono-0.4.10
chunked_transfer-0.3.1
clap-2.33.0
cloudabi-0.0.3
combine-3.8.1
conhash-0.4.0
constant_time_eq-0.1.4
cookie-0.12.0
cookie_store-0.7.0
core-foundation-0.6.4
core-foundation-sys-0.6.2
counted-array-0.1.2
crc32fast-1.2.0
crossbeam-deque-0.7.2
crossbeam-epoch-0.8.0
crossbeam-queue-0.1.2
crossbeam-utils-0.5.0
crossbeam-utils-0.6.6
crossbeam-utils-0.7.0
crypto-mac-0.7.0
daemonize-0.3.0
derive-error-0.0.3
difference-2.0.0
digest-0.8.1
directories-1.0.2
dirs-1.0.5
dtoa-0.4.4
either-1.5.3
encoding_rs-0.8.20
env_logger-0.5.13
error-chain-0.11.0
error-chain-0.12.1
escargot-0.3.1
failure-0.1.6
failure_derive-0.1.6
fake-simd-0.1.2
filetime-0.1.15
filetime-0.2.8
flate2-1.0.13
float-cmp-0.4.0
fnv-1.0.6
foreign-types-0.3.2
foreign-types-shared-0.1.1
fuchsia-cprng-0.1.1
fuchsia-zircon-0.3.3
fuchsia-zircon-sys-0.3.3
futures-0.1.29
futures-cpupool-0.1.8
generic-array-0.12.3
getopts-0.2.21
getrandom-0.1.13
h2-0.1.26
hermit-abi-0.1.3
hmac-0.7.1
http-0.1.21
http-body-0.1.0
httparse-1.3.4
humantime-1.3.0
hyper-0.12.35
hyper-tls-0.3.2
hyperx-0.12.0
idna-0.1.5
idna-0.2.0
indexmap-1.3.0
iovec-0.1.4
itertools-0.7.11
itoa-0.3.4
itoa-0.4.4
jobserver-0.1.19
jsonwebtoken-6.0.1
kernel32-sys-0.2.2
language-tags-0.2.2
lazy_static-1.4.0
libc-0.2.66
libmount-0.1.15
libz-sys-1.0.25
linked-hash-map-0.2.1
local-encoding-0.2.0
lock_api-0.3.2
log-0.3.9
log-0.4.8
lru-disk-cache-0.4.0
matches-0.1.8
maybe-uninit-2.0.0
md-5-0.8.0
md5-0.3.8
memcached-rs-0.3.0
memchr-1.0.2
memchr-2.2.1
memoffset-0.5.3
mime-0.2.6
mime-0.3.14
mime_guess-1.8.7
mime_guess-2.0.1
miniz_oxide-0.3.5
mio-0.6.21
mio-named-pipes-0.1.6
mio-uds-0.6.7
miow-0.2.1
miow-0.3.3
msdos_time-0.1.6
multipart-0.13.6
native-tls-0.2.3
net2-0.2.33
nix-0.11.1
nix-0.14.1
normalize-line-endings-0.2.2
num-integer-0.1.41
num-traits-0.1.43
num-traits-0.2.10
num_cpus-1.11.1
number_prefix-0.2.8
opaque-debug-0.2.3
openssl-0.10.26
openssl-probe-0.1.2
openssl-sys-0.9.53
parking_lot-0.9.0
parking_lot_core-0.6.2
percent-encoding-1.0.1
percent-encoding-2.1.0
phf-0.7.24
phf_codegen-0.7.24
phf_generator-0.7.24
phf_shared-0.7.24
pkg-config-0.3.17
podio-0.1.6
ppv-lite86-0.2.6
predicates-0.9.1
predicates-core-0.9.0
predicates-tree-0.9.0
proc-macro2-1.0.6
publicsuffix-1.5.4
pulldown-cmark-0.0.3
quick-error-1.2.2
quote-0.3.15
quote-1.0.2
rand-0.3.23
rand-0.4.6
rand-0.5.6
rand-0.6.5
rand-0.7.2
rand_chacha-0.1.1
rand_chacha-0.2.1
rand_core-0.3.1
rand_core-0.4.2
rand_core-0.5.1
rand_hc-0.1.0
rand_hc-0.2.0
rand_isaac-0.1.1
rand_jitter-0.1.4
rand_os-0.1.3
rand_pcg-0.1.2
rand_xorshift-0.1.1
rdrand-0.4.0
redis-0.9.1
redox_syscall-0.1.56
redox_users-0.3.1
regex-1.3.1
regex-syntax-0.6.12
remove_dir_all-0.5.2
reqwest-0.9.22
retry-0.4.0
ring-0.14.6
rouille-2.2.0
rust-argon2-0.5.1
rustc-demangle-0.1.16
rustc_version-0.2.3
ryu-1.0.2
safemem-0.2.0
safemem-0.3.3
same-file-0.1.3
sccache-0.2.13
schannel-0.1.16
scopeguard-1.0.0
security-framework-0.3.4
security-framework-sys-0.3.3
selenium-rs-0.1.1
semver-0.9.0
semver-parser-0.7.0
serde-1.0.103
serde_derive-1.0.103
serde_json-1.0.44
serde_urlencoded-0.5.5
sha-1-0.8.1
sha1-0.6.0
sha2-0.8.0
signal-hook-0.1.12
signal-hook-registry-1.2.0
siphasher-0.2.3
skeptic-0.4.0
slab-0.4.2
smallvec-0.6.13
smallvec-1.0.0
socket2-0.3.11
spin-0.5.2
string-0.2.1
strip-ansi-escapes-0.1.0
strsim-0.8.0
subtle-1.0.0
syn-0.11.11
syn-1.0.11
synom-0.11.3
synstructure-0.12.3
syslog-4.0.1
tar-0.4.26
tempdir-0.3.7
tempfile-3.1.0
term-0.5.2
termcolor-1.0.5
textwrap-0.11.0
thread_local-0.3.6
threadpool-1.7.1
time-0.1.42
tiny_http-0.6.2
tokio-0.1.22
tokio-buf-0.1.1
tokio-codec-0.1.1
tokio-current-thread-0.1.6
tokio-executor-0.1.9
tokio-fs-0.1.6
tokio-io-0.1.12
tokio-named-pipes-0.1.0
tokio-process-0.2.4
tokio-reactor-0.1.11
tokio-serde-0.1.0
tokio-serde-bincode-0.1.1
tokio-signal-0.2.7
tokio-sync-0.1.7
tokio-tcp-0.1.3
tokio-threadpool-0.1.17
tokio-timer-0.2.12
tokio-udp-0.1.5
tokio-uds-0.2.5
toml-0.4.10
tower-0.1.1
tower-buffer-0.1.2
tower-discover-0.1.0
tower-layer-0.1.0
tower-limit-0.1.1
tower-load-shed-0.1.0
tower-retry-0.1.0
tower-service-0.2.0
tower-timeout-0.1.1
tower-util-0.1.0
tracing-0.1.10
tracing-attributes-0.1.5
tracing-core-0.1.7
treeline-0.1.0
try-lock-0.2.2
try_from-0.3.2
twoway-0.1.8
typenum-1.11.2
unicase-1.4.2
unicase-2.6.0
unicode-bidi-0.3.4
unicode-normalization-0.1.11
unicode-width-0.1.7
unicode-xid-0.0.4
unicode-xid-0.2.0
unix_socket-0.5.0
unreachable-1.0.0
untrusted-0.6.2
url-1.7.2
url-2.1.0
utf8parse-0.1.1
uuid-0.7.4
vcpkg-0.2.8
vec_map-0.8.1
version-compare-0.0.10
version_check-0.1.5
version_check-0.9.1
void-1.0.2
vte-0.3.3
walkdir-1.0.7
want-0.2.0
wasi-0.7.0
which-2.0.1
winapi-0.2.8
winapi-0.3.8
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.2
winreg-0.6.2
ws2_32-sys-0.2.1
xattr-0.2.2
zip-0.4.2
"

inherit cargo optfeature

DESCRIPTION="ccache/distcc like tool with support for rust and cloud storage"
HOMEPAGE="https://github.com/mozilla/sccache/"
SRC_URI="https://github.com/mozilla/${PN}/archive/${PV}.tar.gz -> ${P}.tar.gz
	$(cargo_crate_uris ${CRATES})"

LICENSE="Apache-2.0 Apache-2.0-with-LLVM-exceptions BSD BSD-2 Boost-1.0 ISC MIT Unlicense ZLIB"
SLOT="0"
KEYWORDS="*"
IUSE="azure dist-client dist-server gcs memcached redis s3"

DEPEND="
	dist-server? ( dev-libs/openssl:0= )
	gcs? ( dev-libs/openssl:0= )
"

RDEPEND="${DEPEND}
	dist-server? ( sys-apps/bubblewrap )
"

QA_FLAGS_IGNORED="usr/bin/sccache*"

src_configure() {
	myfeatures=(
		$(usev azure)
		$(usev dist-client)
		$(usev dist-server)
		$(usev gcs)
		$(usev memcached)
		$(usev redis)
		$(usev s3)
	)
	cargo_src_configure --no-default-features
}

src_install() {
	cargo_src_install

	keepdir /etc/sccache

	einstalldocs
	dodoc -r docs/.

	if use dist-server; then
		newinitd "${FILESDIR}"/server.initd sccache-server
		newconfd "${FILESDIR}"/server.confd sccache-server

		newinitd "${FILESDIR}"/scheduler.initd sccache-scheduler
		newconfd "${FILESDIR}"/scheduler.confd sccache-scheduler
	fi
}

pkg_postinst() {
	ewarn "${PN} is experimental, please use with care"
	use memcached && optfeature "memcached backend support" net-misc/memcached
	use redis && optfeature "redis backend support" dev-db/redis
}
