# Copyright 2021-2022 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2

# You will need games-util/steam-client-meta from the steam-overlay for this to work

# List generated by 'cargo ebuild --manifest-path [absolute path]/alvr/*/Cargo.toml' and sorted by sort -u *.ebuild

EAPI=8

CRATES="
	ab_glyph-0.2.11
	ab_glyph_rasterizer-0.1.4
	addr2line-0.15.1
	adler-1.0.2
	ahash-0.3.8
	ahash-0.4.7
	ahash-0.7.4
	aho-corasick-0.7.18
	alcro-0.5.3
	alsa-0.5.0
	alsa-sys-0.3.1
	andrew-0.3.1
	android_glue-0.2.3
	android_logger-0.10.1
	android_log-sys-0.2.0
	ansi_term-0.11.0
	anyhow-1.0.40
	approx-0.5.0
	arrayvec-0.5.2
	ash-0.32.1
	associative-cache-1.0.1
	atk-0.9.0
	atk-sys-0.10.0
	atomic_refcell-0.1.7
	atty-0.2.14
	autocfg-1.0.1
	backtrace-0.3.59
	base64-0.13.0
	base-x-0.2.8
	bincode-1.3.3
	bindgen-0.56.0
	bindgen-0.58.1
	bindgen-0.59.0
	bitflags-1.2.1
	bit-set-0.5.2
	bitvec-0.19.5
	bit-vec-0.6.3
	block-0.1.6
	block-buffer-0.9.0
	bumpalo-3.6.1
	byteorder-1.4.3
	bytes-1.0.1
	cairo-rs-0.9.1
	cairo-sys-rs-0.10.0
	calloop-0.6.5
	cc-1.0.67
	cesu8-1.1.0
	cexpr-0.4.0
	cexpr-0.5.0
	cfg_aliases-0.1.1
	cfg-if-0.1.10
	cfg-if-1.0.0
	cgl-0.3.2
	chrono-0.4.19
	chunked_transfer-1.4.0
	clang-sys-1.2.0
	clap-2.33.3
	claxon-0.4.3
	clipboard-win-3.1.1
	cocoa-0.24.0
	cocoa-foundation-0.1.0
	codespan-reporting-0.11.1
	combine-4.5.2
	console_log-0.2.0
	const_fn-0.4.7
	copyless-0.1.5
	copypasta-0.7.1
	coreaudio-rs-0.10.0
	coreaudio-sys-0.2.8
	core-foundation-0.7.0
	core-foundation-0.9.1
	core-foundation-sys-0.6.2
	core-foundation-sys-0.7.0
	core-foundation-sys-0.8.2
	core-graphics-0.19.2
	core-graphics-0.22.2
	core-graphics-types-0.1.1
	core-text-19.2.0
	core-video-sys-0.1.4
	cpal-0.13.3
	cpufeatures-0.1.4
	crossbeam-0.8.0
	crossbeam-channel-0.5.1
	crossbeam-deque-0.8.0
	crossbeam-epoch-0.9.4
	crossbeam-queue-0.3.1
	crossbeam-utils-0.8.4
	d3d12-0.4.0
	dark-light-0.1.1
	darling-0.10.2
	darling_core-0.10.2
	darling_macro-0.10.2
	dashmap-4.0.2
	derivative-2.2.0
	digest-0.9.0
	dirs-3.0.2
	dirs-sys-0.3.6
	discard-1.0.4
	dispatch-0.2.0
	dlib-0.4.2
	dlib-0.5.0
	doc-comment-0.3.3
	downcast-rs-1.2.0
	drm-fourcc-2.1.1
	druid-0.7.0
	druid-derive-0.4.0
	druid-shell-0.7.0
	dwrote-0.11.0
	eframe-0.13.1
	egui-0.13.1
	egui_glium-0.13.1
	egui_web-0.13.0
	either-1.6.1
	emath-0.13.0
	encoding_rs-0.8.28
	encoding_rs_io-0.1.7
	env_logger-0.8.3
	epaint-0.13.0
	epi-0.13.0
	errno-0.2.7
	errno-dragonfly-0.1.1
	exec-0.3.1
	external-memory-0.0.1
	failure-0.1.8
	fern-0.6.0
	fixedbitset-0.2.0
	fluent-0.16.0
	fluent-bundle-0.12.0
	fluent-bundle-0.15.1
	fluent-langneg-0.13.0
	fluent-syntax-0.11.0
	fluent-syntax-0.9.3
	fnv-1.0.7
	foreign-types-0.3.2
	foreign-types-shared-0.1.1
	form_urlencoded-1.0.1
	fs_extra-1.2.0
	funty-1.1.0
	futures-0.3.15
	futures-channel-0.3.15
	futures-core-0.3.15
	futures-executor-0.3.15
	futures-io-0.3.15
	futures-macro-0.3.15
	futures-sink-0.3.15
	futures-task-0.3.15
	futures-timer-3.0.2
	futures-util-0.3.15
	fxhash-0.2.1
	gcc-0.3.55
	gdk-0.13.2
	gdk-pixbuf-0.9.0
	gdk-pixbuf-sys-0.10.0
	gdk-sys-0.10.0
	generic-array-0.14.4
	getrandom-0.2.2
	gfx-auxil-0.10.0
	gfx-backend-dx11-0.9.0
	gfx-backend-dx12-0.9.1
	gfx-backend-empty-0.9.0
	gfx-backend-gl-0.9.0
	gfx-backend-metal-0.9.1
	gfx-backend-vulkan-0.9.0
	gfx-hal-0.9.0
	gfx-renderdoc-0.1.0
	gimli-0.24.0
	gio-0.9.1
	gio-sys-0.10.1
	gl_generator-0.14.0
	glib-0.10.3
	glib-macros-0.10.1
	glib-sys-0.10.1
	glium-0.30.1
	glob-0.3.0
	glow-0.9.0
	glutin-0.27.0
	glutin_egl_sys-0.1.5
	glutin_emscripten_sys-0.1.1
	glutin_gles2_sys-0.1.5
	glutin_glx_sys-0.1.7
	glutin_wgl_sys-0.1.5
	gobject-sys-0.10.0
	governor-0.3.2
	gpu-alloc-0.4.7
	gpu-alloc-types-0.2.0
	gpu-descriptor-0.1.1
	gpu-descriptor-types-0.1.1
	gtk-0.9.2
	gtk-sys-0.10.0
	h2-0.3.3
	hashbrown-0.8.2
	hashbrown-0.9.1
	headers-0.3.4
	headers-core-0.2.0
	heck-0.3.2
	hermit-abi-0.1.18
	hound-3.4.0
	http-0.2.4
	httparse-1.4.1
	http-body-0.4.2
	httpdate-1.0.0
	humantime-2.1.0
	hyper-0.14.7
	hyper-tls-0.5.0
	ident_case-1.0.1
	idna-0.2.3
	indexmap-1.6.2
	Inflector-0.11.4
	inplace_it-0.3.3
	instant-0.1.9
	intl-memoizer-0.5.1
	intl_pluralrules-7.0.1
	ipnet-2.3.0
	itertools-0.9.0
	itoa-0.4.7
	jni-0.18.0
	jni-0.19.0
	jni-sys-0.3.0
	jobserver-0.1.22
	js-sys-0.3.51
	keyboard-types-0.5.0
	khronos_api-3.1.0
	khronos-egl-4.1.0
	kurbo-0.7.1
	lazy-bytes-cast-5.0.1
	lazycell-1.3.0
	lazy_static-1.4.0
	lewton-0.10.2
	libc-0.2.94
	libloading-0.6.7
	libloading-0.7.0
	locale_config-0.3.0
	lock_api-0.4.4
	log-0.4.14
	mach-0.3.2
	malloc_buf-0.0.6
	matches-0.1.8
	matrixmultiply-0.3.1
	maybe-uninit-2.0.0
	memchr-2.4.0
	memmap2-0.1.0
	memmap2-0.2.3
	memoffset-0.6.3
	metal-0.23.0
	mime-0.3.16
	minimp3-0.5.1
	minimp3-sys-0.3.2
	miniz_oxide-0.4.4
	mio-0.7.11
	mio-misc-1.2.1
	miow-0.3.7
	msgbox-0.6.0
	naga-0.5.0
	nalgebra-0.28.0
	nalgebra-macros-0.1.0
	native-tls-0.2.7
	ndk-0.3.0
	ndk-glue-0.3.0
	ndk-macro-0.2.0
	ndk-sys-0.2.1
	nix-0.18.0
	nix-0.19.1
	nix-0.20.0
	nom-5.1.2
	nom-6.1.2
	nonzero_ext-0.2.0
	no-std-compat-0.4.1
	ntapi-0.3.6
	num-complex-0.4.0
	num_cpus-1.13.0
	num-derive-0.3.3
	num_enum-0.5.1
	num_enum_derive-0.5.1
	num-integer-0.1.44
	num-rational-0.4.0
	num-traits-0.2.14
	objc-0.2.7
	objc_exception-0.1.2
	objc-foundation-0.1.1
	objc_id-0.1.1
	object-0.24.0
	oboe-0.4.1
	oboe-sys-0.4.0
	ogg-0.8.0
	once_cell-1.7.2
	opaque-debug-0.3.0
	openssl-0.10.34
	openssl-probe-0.1.4
	openssl-sys-0.9.63
	ordered-float-2.7.0
	osmesa-sys-0.1.2
	os_str_bytes-3.1.0
	ouroboros-0.9.5
	ouroboros_macro-0.9.5
	owned_ttf_parser-0.12.1
	owned_ttf_parser-0.6.0
	pango-0.9.1
	pango-sys-0.10.0
	parking_lot-0.11.1
	parking_lot_core-0.8.3
	paste-1.0.5
	peeking_take_while-0.1.2
	pem-0.8.3
	percent-encoding-2.1.0
	petgraph-0.5.1
	pico-args-0.4.1
	piet-0.3.1
	piet-cairo-0.3.0
	piet-common-0.3.2
	piet-coregraphics-0.3.0
	piet-direct2d-0.3.0
	piet-web-0.3.1
	pin-project-1.0.7
	pin-project-internal-1.0.7
	pin-project-lite-0.2.6
	pin-utils-0.1.0
	pkg-config-0.3.19
	ppv-lite86-0.2.10
	proc-macro2-1.0.26
	proc-macro-crate-0.1.5
	proc-macro-error-1.0.4
	proc-macro-error-attr-1.0.4
	proc-macro-hack-0.5.19
	proc-macro-nested-0.1.7
	profiling-1.0.3
	quanta-0.4.1
	quote-1.0.9
	radium-0.5.3
	rand-0.8.3
	rand_chacha-0.3.0
	rand_core-0.6.2
	rand_hc-0.3.0
	range-alloc-0.1.2
	rawpointer-0.2.1
	raw-window-handle-0.3.3
	rayon-1.5.0
	rayon-core-1.9.0
	rcgen-0.8.11
	redox_syscall-0.2.8
	redox_users-0.4.0
	regex-1.5.4
	regex-syntax-0.6.25
	remove_dir_all-0.5.3
	renderdoc-sys-0.7.1
	rental-0.5.6
	rental-impl-0.5.5
	reqwest-0.11.3
	ring-0.16.20
	rodio-0.14.0
	rose_tree-0.2.0
	runas-0.2.1
	rustc-demangle-0.1.19
	rustc-hash-1.1.0
	rustc_version-0.2.3
	rustls-0.19.1
	rusttype-0.9.2
	ryu-1.0.5
	same-file-1.0.6
	schannel-0.1.19
	scoped-tls-1.0.0
	scopeguard-1.1.0
	sct-0.6.1
	security-framework-2.2.0
	security-framework-sys-2.2.0
	semver-0.9.0
	semver-1.0.3
	semver-parser-0.7.0
	serde-1.0.127
	serde_derive-1.0.127
	serde_json-1.0.66
	serde_urlencoded-0.7.0
	sha1-0.6.0
	sha-1-0.9.6
	shared_library-0.1.9
	shlex-0.1.1
	shlex-1.0.0
	signal-hook-registry-1.3.0
	simba-0.5.1
	simple_logger-1.11.0
	single-instance-0.3.1
	slab-0.4.3
	slice-deque-0.3.0
	slotmap-0.4.2
	smallvec-1.6.1
	smithay-client-toolkit-0.12.3
	smithay-client-toolkit-0.14.0
	smithay-clipboard-0.6.4
	socket2-0.4.0
	spin-0.5.2
	spirv_cross-0.23.1
	stable_deref_trait-1.2.0
	standback-0.2.17
	stdweb-0.1.3
	stdweb-0.4.20
	stdweb-derive-0.5.3
	stdweb-internal-macros-0.2.9
	stdweb-internal-runtime-0.1.5
	storage-map-0.3.0
	strsim-0.8.0
	strsim-0.9.3
	strum-0.18.0
	strum_macros-0.18.0
	syn-1.0.72
	sysinfo-0.19.2
	system-deps-1.3.2
	takeable-option-0.5.0
	tap-1.0.1
	tempfile-3.2.0
	termcolor-1.1.2
	textwrap-0.11.0
	thiserror-1.0.24
	thiserror-impl-1.0.24
	thunderdome-0.4.1
	time-0.1.43
	time-0.2.26
	time-macros-0.1.1
	time-macros-impl-0.1.1
	tinyfiledialogs-3.3.10
	tinystr-0.3.4
	tinyvec-1.2.0
	tinyvec_macros-0.1.0
	tokio-1.6.0
	tokio-macros-1.2.0
	tokio-native-tls-0.3.0
	tokio-tungstenite-0.15.0
	tokio-util-0.6.7
	toml-0.5.8
	tower-service-0.3.1
	tracing-0.1.26
	tracing-core-0.1.18
	try-lock-0.2.3
	ttf-parser-0.12.3
	ttf-parser-0.6.2
	tungstenite-0.14.0
	type-map-0.4.0
	typenum-1.13.0
	unic-bidi-0.9.0
	unic-char-property-0.9.0
	unic-char-range-0.9.0
	unic-common-0.9.0
	unic-langid-0.9.0
	unic-langid-impl-0.9.0
	unicode-bidi-0.3.5
	unicode-normalization-0.1.17
	unicode-segmentation-1.7.1
	unicode-width-0.1.8
	unicode-xid-0.2.2
	unic-ucd-bidi-0.9.0
	unic-ucd-version-0.9.0
	untrusted-0.7.1
	ureq-2.1.1
	url-2.2.2
	spirv_headers-1.5.0
	utf16_lit-1.0.1
	utf-8-0.7.6
	vcpkg-0.2.12
	vec_map-0.8.2
	version_check-0.9.3
	version-compare-0.0.10
	walkdir-2.3.2
	want-0.3.0
	wasi-0.10.2+wasi-snapshot-preview1
	wasm-bindgen-0.2.74
	wasm-bindgen-backend-0.2.74
	wasm-bindgen-futures-0.4.24
	wasm-bindgen-macro-0.2.74
	wasm-bindgen-macro-support-0.2.74
	wasm-bindgen-shared-0.2.74
	wayland-client-0.28.5
	wayland-commons-0.28.5
	wayland-cursor-0.28.5
	wayland-egl-0.28.5
	wayland-protocols-0.28.5
	wayland-scanner-0.28.5
	wayland-sys-0.28.5
	webbrowser-0.5.5
	webpki-0.21.4
	webpki-roots-0.21.1
	web-sys-0.3.50
	wgpu-0.9.0
	wgpu-core-0.9.2
	wgpu-types-0.9.0
	which-3.1.1
	widestring-0.4.3
	winapi-0.3.9
	winapi-i686-pc-windows-gnu-0.4.0
	winapi-util-0.1.5
	winapi-x86_64-pc-windows-gnu-0.4.0
	winit-0.25.0
	winreg-0.7.0
	winreg-0.8.0
	winreg-0.9.0
	winres-0.1.11
	wio-0.2.2
	wyz-0.2.0
	x11-clipboard-0.5.2
	x11-dl-2.18.5
	xcb-0.9.0
	xcursor-0.3.3
	xdg-2.2.0
	xi-unicode-0.2.1
	xi-unicode-0.3.0
	xml-rs-0.8.3
	yasna-0.4.0
"

inherit desktop cargo xdg

DESCRIPTION="ALVR is an open source remote VR display for the Oculus Go/Quest"
HOMEPAGE="https://github.com/alvr-org/ALVR"
SRC_URI="https://github.com/alvr-org/ALVR/archive/refs/tags/v${PV}.tar.gz -> ${P}.tar.gz"
SRC_URI+=" $(cargo_crate_uris) "

LICENSE="MIT"
SLOT="0"
KEYWORDS="~amd64"

S="${WORKDIR}/${P^^}"

IUSE="+client +server vaapi vulkan x264 x265"

RDEPEND="
	>=media-video/ffmpeg-4.3[encode,vulkan?,x264?,x265?]
	vaapi? ( media-video/ffmpeg[libdrm,vaapi] )
	sys-libs/libunwind
	www-client/chromium
"

DEPEND="${RDEPEND}
	vulkan? ( dev-util/vulkan-headers )
"

BDEPEND="${RDEPEND}
	virtual/pkgconfig
	client? ( media-gfx/imagemagick )
"

PATCHES=( "${FILESDIR}/${P}-build.patch" )

src_configure() {
	local ECARGO_EXTRA_ARGS="
		-p vrcompositor-wrapper
		$(usex server "-p alvr_server" "" )
		$(usex client "-p alvr_client -p alvr_launcher" "" )
		$(usex vulkan "-p alvr_vulkan-layer" "" )
		"
	cargo_src_configure
}

src_install() {
	if use client; then
		dobin target/release/alvr_launcher
		dolib.so target/release/libalvr_client.so
		domenu packaging/freedesktop/alvr.desktop
		for size in {16,32,48,64,128,256}; do
			convert alvr/launcher/res/launcher.ico \
				-thumbnail ${size} -alpha on -background none -flatten \
				${PN}-${size}.png || die
			newicon -s ${size} ${PN}-${size}.png ${PN}.png
		done
	fi

	if use server; then
		#dolib.so target/release/libalvr_server.so

		insinto /usr/lib/steamvr/alvr/bin/linux64/
		newins target/release/libalvr_server.so driver_alvr_server.so

		insinto /usr/lib/steamvr/alvr/
		doins alvr/xtask/resources/driver.vrdrivermanifest

	fi

	if use vulkan; then
		dolib.so target/release/libalvr_vulkan_layer.so
		insinto /usr/share/vulkan/explicit_layer.d/
		doins alvr/vulkan-layer/layer/alvr_x86_64.json
	fi

	insinto /usr/lib/alvr
	doins target/release/vrcompositor-wrapper
	doins packaging/firewall/alvr_fw_config.sh

	insinto /usr/share/${PN}/selinux/
	doins packaging/selinux/*

	insinto /usr/share/${PN}/presets/
	doins alvr/xtask/resources/presets/*

	insinto /usr/share/${PN}/
	doins -r alvr/dashboard

	insinto /usr/lib/firewalld/services/
	doins packaging/firewall/alvr-firewalld.xml

	insinto /etc/ufw/applications.d/
	doins packaging/firewall/ufw-alvr
}
