# Copyright 2024 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2

EAPI=8

CRATES="
	ab_glyph@0.2.28
	ab_glyph_rasterizer@0.1.8
	addr2line@0.22.0
	adler2@2.0.0
	adler32@1.2.0
	adler@1.0.2
	aho-corasick@1.1.3
	aligned-vec@0.5.0
	alloc-no-stdlib@2.0.4
	alloc-stdlib@0.2.2
	android-tzdata@0.1.1
	android_system_properties@0.1.5
	anstream@0.6.15
	anstyle-parse@0.2.5
	anstyle-query@1.1.1
	anstyle-wincon@3.0.4
	anstyle@1.0.8
	anyhow@1.0.87
	arbitrary@1.3.2
	arg_enum_proc_macro@0.3.4
	arrayref@0.3.8
	arrayvec@0.7.6
	async-compression@0.4.12
	atomic-waker@1.1.2
	autocfg@1.3.0
	av1-grain@0.2.3
	avif-serialize@0.8.1
	backtrace@0.3.73
	base64@0.22.1
	bit_field@0.10.2
	bitflags@1.3.2
	bitflags@2.6.0
	bitstream-io@2.5.3
	blake3@1.5.4
	brotli-decompressor@4.0.1
	brotli@6.0.0
	built@0.7.4
	bumpalo@3.16.0
	bytemuck@1.18.0
	byteorder-lite@0.1.0
	byteorder@1.5.0
	bytes@1.7.1
	bzip2-sys@0.1.11+1.0.8
	bzip2@0.4.4
	cc@1.1.18
	cfg-expr@0.15.8
	cfg-if@1.0.0
	cfg_aliases@0.2.1
	chrono@0.4.38
	clap@4.5.17
	clap_builder@4.5.17
	clap_complete@4.5.26
	clap_derive@4.5.13
	clap_lex@0.7.2
	color_quant@1.1.0
	colorchoice@1.0.2
	configparser@3.1.0
	const_format@0.2.33
	const_format_proc_macros@0.2.33
	constant_time_eq@0.3.1
	core-foundation-sys@0.8.7
	core-foundation@0.9.4
	core_maths@0.1.0
	crc32fast@1.4.2
	crossbeam-deque@0.8.5
	crossbeam-epoch@0.9.18
	crossbeam-utils@0.8.20
	crunchy@0.2.2
	csscolorparser@0.6.2
	darling@0.20.10
	darling_core@0.20.10
	darling_macro@0.20.10
	data-url@0.3.1
	deflate@0.8.6
	deranged@0.3.11
	directories@5.0.1
	dirs-sys@0.4.1
	dmg@0.1.2
	either@1.13.0
	encoding_rs@0.8.34
	equivalent@1.0.1
	errno@0.3.9
	exr@1.72.0
	fastrand@2.1.1
	fdeflate@0.3.4
	filedescriptor@0.8.2
	filetime@0.2.25
	flate2@1.0.33
	float-cmp@0.9.0
	flume@0.11.0
	fnv@1.0.7
	fontconfig-parser@0.5.7
	fontdb@0.21.0
	foreign-types-shared@0.1.1
	foreign-types@0.3.2
	form_urlencoded@1.2.1
	fs_extra@1.3.0
	futures-channel@0.3.30
	futures-core@0.3.30
	futures-io@0.3.30
	futures-sink@0.3.30
	futures-task@0.3.30
	futures-util@0.3.30
	gag@1.0.0
	getrandom@0.2.15
	gif@0.13.1
	gimli@0.29.0
	glob@0.3.1
	h2@0.4.6
	half@2.4.1
	hashbrown@0.12.3
	hashbrown@0.14.5
	heck@0.5.0
	hermit-abi@0.3.9
	hex@0.4.3
	http-body-util@0.1.2
	http-body@1.0.1
	http@1.1.0
	httparse@1.9.4
	hyper-rustls@0.27.3
	hyper-tls@0.6.0
	hyper-util@0.1.7
	hyper@1.4.1
	iana-time-zone-haiku@0.1.2
	iana-time-zone@0.1.60
	icns@0.3.1
	ident_case@1.0.1
	idna@0.5.0
	image-webp@0.1.3
	image@0.25.2
	imagesize@0.13.0
	imgref@1.10.1
	indexmap@1.9.3
	indexmap@2.5.0
	interpolate_name@0.2.4
	ipnet@2.9.0
	is_terminal_polyfill@1.70.1
	itertools@0.12.1
	itoa@1.0.11
	jobserver@0.1.32
	jpeg-decoder@0.3.1
	js-sys@0.3.70
	kurbo@0.11.0
	language-tags@0.3.2
	lazy_static@1.5.0
	lebe@0.5.2
	libc@0.2.158
	libfuzzer-sys@0.4.7
	libm@0.2.8
	libredox@0.1.3
	linux-raw-sys@0.4.14
	lock_api@0.4.12
	log@0.4.22
	loop9@0.1.5
	maybe-rayon@0.1.1
	memchr@2.7.4
	memmap2@0.9.4
	mime@0.3.17
	minimal-lexical@0.2.1
	miniz_oxide@0.3.7
	miniz_oxide@0.7.4
	miniz_oxide@0.8.0
	mio@1.0.2
	native-tls@0.2.12
	new_debug_unreachable@1.0.6
	nom@7.1.3
	noop_proc_macro@0.3.0
	num-bigint@0.4.6
	num-conv@0.1.0
	num-derive@0.4.2
	num-integer@0.1.46
	num-rational@0.4.2
	num-traits@0.2.19
	num_threads@0.1.7
	object@0.36.4
	once_cell@1.19.0
	openssl-macros@0.1.1
	openssl-probe@0.1.5
	openssl-src@300.3.2+3.3.2
	openssl-sys@0.9.103
	openssl@0.10.66
	option-ext@0.2.0
	owned_ttf_parser@0.24.0
	parse-display-derive@0.8.2
	parse-display@0.8.2
	paste@1.0.15
	percent-encoding@2.3.1
	phf@0.11.2
	phf_generator@0.11.2
	phf_macros@0.11.2
	phf_shared@0.11.2
	pico-args@0.5.0
	pin-project-internal@1.1.5
	pin-project-lite@0.2.14
	pin-project@1.1.5
	pin-utils@0.1.0
	pix@0.13.3
	pkg-config@0.3.30
	plist@1.7.0
	png@0.16.8
	png@0.17.13
	powerfmt@0.2.0
	ppv-lite86@0.2.20
	proc-macro2@1.0.86
	profiling-procmacros@1.0.15
	profiling@1.0.15
	qoi@0.4.1
	quick-error@1.2.3
	quick-error@2.0.1
	quick-xml@0.32.0
	quote@1.0.37
	quoted-string@0.2.2
	rand@0.8.5
	rand_chacha@0.3.1
	rand_core@0.6.4
	rav1e@0.7.1
	ravif@0.11.10
	rayon-core@1.12.1
	rayon@1.10.0
	redox_syscall@0.5.3
	redox_users@0.4.6
	regex-automata@0.4.7
	regex-syntax@0.7.5
	regex-syntax@0.8.4
	regex@1.10.6
	reqwest@0.12.7
	resvg@0.43.0
	rgb@0.8.50
	ring@0.17.8
	roxmltree@0.20.0
	rustc-demangle@0.1.24
	rustix@0.38.36
	rustls-pemfile@2.1.3
	rustls-pki-types@1.8.0
	rustls-webpki@0.102.7
	rustls@0.23.12
	rustybuzz@0.18.0
	ryu@1.0.18
	sanitize-filename@0.5.0
	schannel@0.1.24
	scopeguard@1.2.0
	security-framework-sys@2.11.1
	security-framework@2.11.1
	serde@1.0.210
	serde_derive@1.0.210
	serde_json@1.0.128
	serde_spanned@0.6.7
	serde_urlencoded@0.7.1
	serde_with@3.9.0
	serde_with_macros@3.9.0
	shlex@1.3.0
	simd-adler32@0.3.7
	simd_helpers@0.1.0
	simplecss@0.2.1
	simplelog@0.12.2
	siphasher@0.3.11
	siphasher@1.0.1
	slab@0.4.9
	slotmap@1.0.7
	smallvec@1.13.2
	smart-default@0.7.1
	socket2@0.5.7
	spin@0.9.8
	strict-num@0.1.1
	strsim@0.11.1
	structmeta-derive@0.2.0
	structmeta@0.2.0
	subtle@2.6.1
	svgtypes@0.15.2
	syn@2.0.77
	sync_wrapper@1.0.1
	system-configuration-sys@0.6.0
	system-configuration@0.6.1
	system-deps@6.2.2
	tar@0.4.41
	target-lexicon@0.12.16
	tempfile@3.12.0
	termcolor@1.4.1
	thiserror-impl@1.0.63
	thiserror@1.0.63
	tiff@0.9.1
	time-core@0.1.2
	time-macros@0.2.18
	time@0.3.36
	tiny-skia-path@0.11.4
	tiny-skia@0.11.4
	tinyvec@1.8.0
	tinyvec_macros@0.1.1
	tokio-native-tls@0.3.1
	tokio-rustls@0.26.0
	tokio-socks@0.5.2
	tokio-util@0.7.12
	tokio@1.40.0
	toml@0.8.19
	toml_datetime@0.6.8
	toml_edit@0.22.20
	tower-layer@0.3.3
	tower-service@0.3.3
	tower@0.4.13
	tracing-core@0.1.32
	tracing@0.1.40
	try-lock@0.2.5
	ttf-parser@0.24.1
	ulid@1.1.3
	unicode-bidi-mirroring@0.3.0
	unicode-bidi@0.3.15
	unicode-ccc@0.3.0
	unicode-ident@1.0.12
	unicode-normalization@0.1.23
	unicode-properties@0.1.2
	unicode-script@0.5.6
	unicode-vo@0.1.0
	unicode-xid@0.2.5
	untrusted@0.9.0
	url@2.5.2
	urlencoding@2.1.3
	usvg@0.43.0
	utf8parse@0.2.2
	v_frame@0.3.8
	vcpkg@0.2.15
	version-compare@0.2.0
	version_check@0.9.5
	want@0.3.1
	wasi@0.11.0+wasi-snapshot-preview1
	wasm-bindgen-backend@0.2.93
	wasm-bindgen-futures@0.4.43
	wasm-bindgen-macro-support@0.2.93
	wasm-bindgen-macro@0.2.93
	wasm-bindgen-shared@0.2.93
	wasm-bindgen@0.2.93
	web-sys@0.3.70
	web-time@1.1.0
	weezl@0.1.8
	winapi-i686-pc-windows-gnu@0.4.0
	winapi-util@0.1.9
	winapi-x86_64-pc-windows-gnu@0.4.0
	winapi@0.3.9
	windows-core@0.52.0
	windows-core@0.58.0
	windows-implement@0.58.0
	windows-interface@0.58.0
	windows-registry@0.2.0
	windows-result@0.2.0
	windows-strings@0.1.0
	windows-sys@0.48.0
	windows-sys@0.52.0
	windows-sys@0.59.0
	windows-targets@0.48.5
	windows-targets@0.52.6
	windows@0.58.0
	windows_aarch64_gnullvm@0.48.5
	windows_aarch64_gnullvm@0.52.6
	windows_aarch64_msvc@0.48.5
	windows_aarch64_msvc@0.52.6
	windows_i686_gnu@0.48.5
	windows_i686_gnu@0.52.6
	windows_i686_gnullvm@0.52.6
	windows_i686_msvc@0.48.5
	windows_i686_msvc@0.52.6
	windows_x86_64_gnu@0.48.5
	windows_x86_64_gnu@0.52.6
	windows_x86_64_gnullvm@0.48.5
	windows_x86_64_gnullvm@0.52.6
	windows_x86_64_msvc@0.48.5
	windows_x86_64_msvc@0.52.6
	winnow@0.6.18
	winreg@0.52.0
	xattr@1.3.1
	xmlwriter@0.1.0
	zerocopy-derive@0.7.35
	zerocopy@0.7.35
	zeroize@1.8.1
	zstd-safe@7.2.1
	zstd-sys@2.0.13+zstd.1.5.6
	zstd@0.13.2
	zune-core@0.4.12
	zune-inflate@0.2.54
	zune-jpeg@0.4.13
"

declare -A GIT_CRATES=(
	[mime-parse]='https://github.com/filips123/mime;57416f447a10c3343df7fe80deb0ae8a7c77cf0a;mime-%commit%/mime-parse'
	[mime]='https://github.com/filips123/mime;57416f447a10c3343df7fe80deb0ae8a7c77cf0a;mime-%commit%'
	[web_app_manifest]='https://github.com/filips123/WebAppManifestRS;477c5bbc7406eec01aea40e18338dafcec78c917;WebAppManifestRS-%commit%'
)

inherit cargo shell-completion xdg

DESCRIPTION="A tool to install, manage and use Progressive Web Apps (PWAs) in Mozilla Firefox"
HOMEPAGE="https://pwasforfirefox.filips.si/"
SRC_URI="
	https://github.com/filips123/PWAsForFirefox/archive/refs/tags/v${PV}.tar.gz
		-> ${P}.tar.gz
	${CARGO_CRATE_URIS}
"
S="${WORKDIR}/PWAsForFirefox-${PV}/native"

LICENSE="MPL-2.0"
# Dependent crate licenses
LICENSE+="
	Apache-2.0 Apache-2.0-with-LLVM-exceptions BSD-2 BSD ISC MIT MPL-2.0
	Unicode-DFS-2016 ZLIB
"
SLOT="0"
KEYWORDS="~amd64"

RDEPEND="
	app-arch/zstd:=
	dev-libs/openssl:=
"
DEPEND="
	app-arch/bzip2
	${RDEPEND}
"
BDEPEND="
	dev-build/cargo-make
	virtual/pkgconfig
"

QA_FLAGS_IGNORED=".*"

src_prepare() {
	default

	sed -i -E \
		-e 's/\$SUDO //' \
		-e 's/((install|mkdir|cp) .*) (\S*)$/\1 ${DESTDIR}\3/' \
		-e '/^\[tasks.install-linux\]/,/^\[/ { /dependencies = \["build"\]/d }' \
		-e "s|target/release|$(cargo_target_dir)|" \
		Makefile.toml || die
}

src_configure() {
	makers set-version ${PV} || die

	# no easy way to unvendor blake3 and bzip2

	export PKG_CONFIG_ALLOW_CROSS=1
	export ZSTD_SYS_USE_PKG_CONFIG=1
	export OPENSSL_NO_VENDOR=1

	local myfeatures=(
		linked-runtime
	)

	cargo_src_configure --no-default-features
}

src_install() {
	local -x DESTDIR="${ED}"

	set -- cargo make install
	einfo "$@"
	"$@" || die -n "${*} failed"

	dodoc ../README.md
	newdoc ../native/README.md README-NATIVE.md
	newdoc ../extension/README.md README-EXTENSION.md

	insinto /usr/share/metainfo
	doins packages/appstream/si.filips.FirefoxPWA.metainfo.xml

	newbashcomp  $(cargo_target_dir)/completions/firefoxpwa.bash firefoxpwa
	dofishcomp $(cargo_target_dir)/completions/firefoxpwa.fish
	dozshcomp $(cargo_target_dir)/completions/_firefoxpwa
}

pkg_postinst() {
	einfo "You have successfully installed the native part of the PWAsForFirefox project"
	einfo "You should also install the Firefox extension if you haven't already"
	einfo "Download: https://addons.mozilla.org/firefox/addon/pwas-for-firefox/"

	xdg_pkg_postinst
}

pkg_postrm() {
	if [[ ! ${REPLACING_VERSIONS} ]]; then
		einfo "Runtime, profiles and web apps are still installed in user directories"
		einfo "You can remove them manually after this package is uninstalled"
		einfo "Doing that will remove all installed web apps and their data"
	fi

	xdg_pkg_postrm
}