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

EAPI=8

CRATES="
	ab_glyph@0.2.29
	ab_glyph_rasterizer@0.1.8
	addr2line@0.24.2
	adler2@2.0.0
	adler32@1.2.0
	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.18
	anstyle-parse@0.2.6
	anstyle-query@1.1.2
	anstyle-wincon@3.0.6
	anstyle@1.0.10
	anyhow@1.0.95
	arbitrary@1.4.1
	arg_enum_proc_macro@0.3.4
	arrayref@0.3.9
	arrayvec@0.7.6
	async-compression@0.4.18
	atomic-waker@1.1.2
	autocfg@1.4.0
	av1-grain@0.2.3
	avif-serialize@0.8.2
	backtrace@0.3.74
	base64@0.22.1
	bit_field@0.10.2
	bitflags@1.3.2
	bitflags@2.6.0
	bitstream-io@2.6.0
	blake3@1.5.5
	brotli-decompressor@4.0.1
	brotli@7.0.0
	built@0.7.5
	bumpalo@3.16.0
	bytemuck@1.21.0
	byteorder-lite@0.1.0
	byteorder@1.5.0
	bytes@1.9.0
	bzip2-sys@0.1.11+1.0.8
	bzip2@0.5.0
	cc@1.2.6
	cfg-expr@0.15.8
	cfg-if@1.0.0
	cfg_aliases@0.2.1
	chrono@0.4.39
	clap@4.5.23
	clap_builder@4.5.23
	clap_complete@4.5.40
	clap_derive@4.5.18
	clap_lex@0.7.4
	color_quant@1.1.0
	colorchoice@1.0.3
	configparser@3.1.0
	const_format@0.2.34
	const_format_proc_macros@0.2.34
	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.6
	crossbeam-epoch@0.9.18
	crossbeam-utils@0.8.21
	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
	displaydoc@0.2.5
	dmg@0.1.2
	either@1.13.0
	encoding_rs@0.8.35
	equivalent@1.0.1
	errno@0.3.10
	exr@1.73.0
	fastrand@2.3.0
	fdeflate@0.3.7
	filedescriptor@0.8.2
	filetime@0.2.25
	flate2@1.0.35
	float-cmp@0.9.0
	fnv@1.0.7
	fontconfig-parser@0.5.7
	fontdb@0.22.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.31
	futures-core@0.3.31
	futures-io@0.3.31
	futures-sink@0.3.31
	futures-task@0.3.31
	futures-util@0.3.31
	gag@1.0.0
	getrandom@0.2.15
	gif@0.13.1
	gimli@0.31.1
	glob@0.3.2
	h2@0.4.7
	half@2.4.1
	hashbrown@0.12.3
	hashbrown@0.15.2
	heck@0.5.0
	hex@0.4.3
	http-body-util@0.1.2
	http-body@1.0.1
	http@1.2.0
	httparse@1.9.5
	hyper-rustls@0.27.5
	hyper-tls@0.6.0
	hyper-util@0.1.10
	hyper@1.5.2
	iana-time-zone-haiku@0.1.2
	iana-time-zone@0.1.61
	icns@0.3.1
	icu_collections@1.5.0
	icu_locid@1.5.0
	icu_locid_transform@1.5.0
	icu_locid_transform_data@1.5.0
	icu_normalizer@1.5.0
	icu_normalizer_data@1.5.0
	icu_properties@1.5.1
	icu_properties_data@1.5.0
	icu_provider@1.5.0
	icu_provider_macros@1.5.0
	ident_case@1.0.1
	idna@1.0.3
	idna_adapter@1.2.0
	image-webp@0.1.3
	image-webp@0.2.0
	image@0.25.5
	imagesize@0.13.0
	imgref@1.11.0
	indexmap@1.9.3
	indexmap@2.7.0
	interpolate_name@0.2.4
	ipnet@2.10.1
	is_terminal_polyfill@1.70.1
	itertools@0.12.1
	itoa@1.0.14
	jobserver@0.1.32
	jpeg-decoder@0.3.1
	js-sys@0.3.76
	kurbo@0.11.1
	language-tags@0.3.2
	lebe@0.5.2
	libc@0.2.169
	libfuzzer-sys@0.4.8
	libm@0.2.11
	libredox@0.1.3
	linux-raw-sys@0.4.14
	litemap@0.7.4
	log@0.4.22
	loop9@0.1.5
	lzma-sys@0.1.20
	maybe-rayon@0.1.1
	memchr@2.7.4
	memmap2@0.9.5
	mime@0.3.17
	minimal-lexical@0.2.1
	miniz_oxide@0.3.7
	miniz_oxide@0.8.2
	mio@1.0.3
	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.7
	once_cell@1.20.2
	openssl-macros@0.1.1
	openssl-probe@0.1.5
	openssl-src@300.4.1+3.4.0
	openssl-sys@0.9.104
	openssl@0.10.68
	option-ext@0.2.0
	owned_ttf_parser@0.25.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-lite@0.2.15
	pin-utils@0.1.0
	pix@0.13.4
	pkg-config@0.3.31
	plist@1.7.0
	png@0.16.8
	png@0.17.16
	powerfmt@0.2.0
	ppv-lite86@0.2.20
	proc-macro2@1.0.92
	profiling-procmacros@1.0.16
	profiling@1.0.16
	qoi@0.4.1
	quick-error@1.2.3
	quick-error@2.0.1
	quick-xml@0.32.0
	quote@1.0.38
	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.11
	rayon-core@1.12.1
	rayon@1.10.0
	redox_syscall@0.5.8
	redox_users@0.4.6
	regex-automata@0.4.9
	regex-syntax@0.7.5
	regex-syntax@0.8.5
	regex@1.11.1
	reqwest@0.12.11
	resvg@0.44.0
	rgb@0.8.50
	ring@0.17.8
	roxmltree@0.20.0
	rustc-demangle@0.1.24
	rustix@0.38.42
	rustls-pemfile@2.2.0
	rustls-pki-types@1.10.1
	rustls-webpki@0.102.8
	rustls@0.23.20
	rustybuzz@0.18.0
	ryu@1.0.18
	sanitize-filename@0.6.0
	schannel@0.1.27
	security-framework-sys@2.13.0
	security-framework@2.11.1
	serde@1.0.217
	serde_derive@1.0.217
	serde_json@1.0.134
	serde_spanned@0.6.8
	serde_urlencoded@0.7.1
	serde_with@3.12.0
	serde_with_macros@3.12.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.8
	spin@0.9.8
	stable_deref_trait@1.2.0
	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.93
	sync_wrapper@1.0.2
	synstructure@0.13.1
	system-configuration-sys@0.6.0
	system-configuration@0.6.1
	system-deps@6.2.2
	tar@0.4.43
	target-lexicon@0.12.16
	tempfile@3.14.0
	termcolor@1.4.1
	thiserror-impl@1.0.69
	thiserror@1.0.69
	tiff@0.9.1
	time-core@0.1.2
	time-macros@0.2.19
	time@0.3.37
	tiny-skia-path@0.11.4
	tiny-skia@0.11.4
	tinystr@0.7.6
	tinyvec@1.8.1
	tinyvec_macros@0.1.1
	tokio-native-tls@0.3.1
	tokio-rustls@0.26.1
	tokio-socks@0.5.2
	tokio-util@0.7.13
	tokio@1.42.0
	toml@0.8.19
	toml_datetime@0.6.8
	toml_edit@0.22.22
	tower-layer@0.3.3
	tower-service@0.3.3
	tower@0.5.2
	tracing-core@0.1.33
	tracing@0.1.41
	try-lock@0.2.5
	ttf-parser@0.24.1
	ttf-parser@0.25.1
	ulid@1.1.3
	unicode-bidi-mirroring@0.3.0
	unicode-bidi@0.3.18
	unicode-ccc@0.3.0
	unicode-ident@1.0.14
	unicode-properties@0.1.3
	unicode-script@0.5.7
	unicode-vo@0.1.0
	unicode-xid@0.2.6
	untrusted@0.9.0
	url@2.5.4
	urlencoding@2.1.3
	usvg@0.44.0
	utf16_iter@1.0.5
	utf8_iter@1.0.4
	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.99
	wasm-bindgen-futures@0.4.49
	wasm-bindgen-macro-support@0.2.99
	wasm-bindgen-macro@0.2.99
	wasm-bindgen-shared@0.2.99
	wasm-bindgen@0.2.99
	web-sys@0.3.76
	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-registry@0.3.0
	windows-result@0.2.0
	windows-strings@0.1.0
	windows-strings@0.2.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.20
	write16@1.0.0
	writeable@0.5.5
	xattr@1.3.1
	xmlwriter@0.1.0
	xz2@0.1.7
	yoke-derive@0.7.5
	yoke@0.7.5
	zerocopy-derive@0.7.35
	zerocopy@0.7.35
	zerofrom-derive@0.1.5
	zerofrom@0.1.5
	zeroize@1.8.1
	zerovec-derive@0.10.3
	zerovec@0.10.4
	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.14
"

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-3.0 ZLIB
"
SLOT="0"
KEYWORDS="~amd64"

RDEPEND="
	app-arch/bzip2
	app-arch/xz-utils
	app-arch/zstd:=
	dev-libs/openssl:=
"
DEPEND="
	${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

	# https://wiki.gentoo.org/wiki/Project:Rust/sys_crates
	mkdir "${T}/pkg-config" || die
	export PKG_CONFIG_PATH=${T}/pkg-config${PKG_CONFIG_PATH+:${PKG_CONFIG_PATH}}
	cat >> "${T}/pkg-config/bzip2.pc" <<-EOF || die
		Name: bzip2
		Version: 9999
		Description:
		Libs: -lbz2
	EOF

}

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

	# no easy way to unvendor blake3

	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
}