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

EAPI=8

DESCRIPTION="Fast, feature-rich, and cross-platform terminal emulator"
HOMEPAGE="https://ghostty.org/"

declare -g -r -A ZBS_DEPENDENCIES=(
	[breakpad-12207fd37bb8251919c112dcdd8f616a491857b34a451f7e4486490077206dc2a1ea.tar.gz]='https://github.com/getsentry/breakpad/archive/b99f444ba5f6b98cac261cbb391d8766b34a5918.tar.gz'
	[fontconfig-12201149afb3326c56c05bb0a577f54f76ac20deece63aa2f5cd6ff31a4fa4fcb3b7.tar.gz]='https://deps.files.ghostty.org/fontconfig-2.14.2.tar.gz'
	[freetype-1220b81f6ecfb3fd222f76cf9106fecfa6554ab07ec7fdc4124b9bb063ae2adf969d.tar.gz]='https://github.com/freetype/freetype/archive/refs/tags/VER-2-13-2.tar.gz'
	[glfw-1220736fa4ba211162c7a0e46cc8fe04d95921927688bff64ab5da7420d098a7272d.tar.gz]='https://github.com/mitchellh/glfw/archive/b552c6ec47326b94015feddb36058ea567b87159.tar.gz'
	[glslang-12201278a1a05c0ce0b6eb6026c65cd3e9247aa041b1c260324bf29cee559dd23ba1.tar.gz]='https://github.com/KhronosGroup/glslang/archive/refs/tags/14.2.0.tar.gz'
	[harfbuzz-1220b8588f106c996af10249bfa092c6fb2f35fbacb1505ef477a0b04a7dd1063122.tar.gz]='https://github.com/harfbuzz/harfbuzz/archive/refs/tags/8.4.0.tar.gz'
	[highway-12205c83b8311a24b1d5ae6d21640df04f4b0726e314337c043cde1432758cbe165b.tar.gz]='https://github.com/google/highway/archive/refs/tags/1.1.0.tar.gz'
	[imgui-1220bc6b9daceaf7c8c60f3c3998058045ba0c5c5f48ae255ff97776d9cd8bfc6402.tar.gz]='https://github.com/ocornut/imgui/archive/e391fe2e66eb1c96b1624ae8444dc64c23146ef4.tar.gz'
	[iterm2_themes-1220cc25b537556a42b0948437c791214c229efb78b551c80b1e9b18d70bf0498620.tar.gz]='https://github.com/mbadolato/iTerm2-Color-Schemes/archive/e030599a6a6e19fcd1ea047c7714021170129d56.tar.gz'
	[libpng-1220aa013f0c83da3fb64ea6d327f9173fa008d10e28bc9349eac3463457723b1c66.tar.gz]='https://github.com/pnggroup/libpng/archive/refs/tags/v1.6.43.tar.gz'
	[libxev-12206029de146b685739f69b10a6f08baee86b3d0a5f9a659fa2b2b66c9602078bbf.tar.gz]='https://github.com/mitchellh/libxev/archive/db6a52bafadf00360e675fefa7926e8e6c0e9931.tar.gz'
	[libxml2-122032442d95c3b428ae8e526017fad881e7dc78eab4d558e9a58a80bfbd65a64f7d.tar.gz]='https://github.com/GNOME/libxml2/archive/refs/tags/v2.11.5.tar.gz'
	[mach-glfw-12206ed982e709e565d536ce930701a8c07edfd2cfdce428683f3f2a601d37696a62.tar.gz]='https://github.com/mitchellh/mach-glfw/archive/37c2995f31abcf7e8378fba68ddcf4a3faa02de0.tar.gz'
	[oniguruma-1220c15e72eadd0d9085a8af134904d9a0f5dfcbed5f606ad60edc60ebeccd9706bb.tar.gz]='https://github.com/kkos/oniguruma/archive/refs/tags/v6.9.9.tar.gz'
	[sentry-1220446be831adcca918167647c06c7b825849fa3fba5f22da394667974537a9c77e.tar.gz]='https://github.com/getsentry/sentry-native/archive/refs/tags/0.7.8.tar.gz'
	[spirv_cross-1220fb3b5586e8be67bc3feb34cbe749cf42a60d628d2953632c2f8141302748c8da.tar.gz]='https://github.com/KhronosGroup/SPIRV-Cross/archive/476f384eb7d9e48613c45179e502a15ab95b6b49.tar.gz'
	[utfcpp-1220d4d18426ca72fc2b7e56ce47273149815501d0d2395c2a98c726b31ba931e641.tar.gz]='https://github.com/nemtrif/utfcpp/archive/refs/tags/v4.0.5.tar.gz'
	[vaxis-12200df4ebeaed45de26cb2c9f3b6f3746d8013b604e035dae658f86f586c8c91d2f.tar.gz]='https://github.com/rockorager/libvaxis/archive/6d729a2dc3b934818dffe06d2ba3ce02841ed74b.tar.gz'
	[vaxis-1220c72c1697dd9008461ead702997a15d8a1c5810247f02e7983b9f74c6c6e4c087.tar.gz]='https://github.com/rockorager/libvaxis/archive/dc0a228a5544988d4a920cfb40be9cd28db41423.tar.gz'
	[vulkan_headers-122004bfd4c519dadfb8e6281a42fc34fd1aa15aea654ea8a492839046f9894fa2cf.tar.gz]='https://github.com/mitchellh/vulkan-headers/archive/04c8a0389d5a0236a96312988017cd4ce27d8041.tar.gz'
	[wayland_headers-1220b3164434d2ec9db146a40bf3a30f490590d68fa8529776a3138074f0da2c11ca.tar.gz]='https://github.com/mitchellh/wayland-headers/archive/5f991515a29f994d87b908115a2ab0b899474bd1.tar.gz'
	[wuffs-12200984439edc817fbcbbaff564020e5104a0d04a2d0f53080700827052de700462.tar.gz]='https://github.com/google/wuffs/archive/refs/tags/v0.4.0-alpha.8.tar.gz'
	[x11_headers-122089c326186c84aa2fd034b16abc38f3ebf4862d9ae106dc1847ac44f557b36465.tar.gz]='https://github.com/mitchellh/x11-headers/archive/2ffbd62d82ff73ec929dd8de802bc95effa0ef88.tar.gz'
	[xcode_frameworks-12202adbfecdad671d585c9a5bfcbd5cdf821726779430047742ce1bf94ad67d19cb.tar.gz]='https://github.com/mitchellh/xcode-frameworks/archive/69801c154c39d7ae6129ea1ba8fe1afe00585fc8.tar.gz'
	[z2d-12201f0d542e7541cf492a001d4d0d0155c92f58212fbcb0d224e95edeba06b5416a.tar.gz]='https://github.com/vancluever/z2d/archive/4638bb02a9dc41cc2fb811f092811f6a951c752a.tar.gz'
	[zf-1220edc3b8d8bedbb50555947987e5e8e2f93871ca3c8e8d4cc8f1377c15b5dd35e8.tar.gz]='https://github.com/natecraddock/zf/archive/ed99ca18b02dda052e20ba467e90b623c04690dd.tar.gz'
	[zg-122055beff332830a391e9895c044d33b15ea21063779557024b46169fb1984c6e40.tar.gz]='https://codeberg.org/atman/zg/archive/v0.13.2.tar.gz'
	[zig-objc-1220e17e64ef0ef561b3e4b9f3a96a2494285f2ec31c097721bf8c8677ec4415c634.tar.gz]='https://github.com/mitchellh/zig-objc/archive/9b8ba849b0f58fe207ecd6ab7c147af55b17556e.tar.gz'
	[zig_js-12205a66d423259567764fa0fc60c82be35365c21aeb76c5a7dc99698401f4f6fefc.tar.gz]='https://github.com/mitchellh/zig-js/archive/d0b8b0a57c52fbc89f9d9fecba75ca29da7dd7d1.tar.gz'
	[zigimg-1220dd654ef941fc76fd96f9ec6adadf83f69b9887a0d3f4ee5ac0a1a3e11be35cf5.tar.gz]='https://github.com/zigimg/zigimg/archive/3a667bdb3d7f0955a5a51c8468eac83210c1439e.tar.gz'
	[ziglyph-12207831bce7d4abce57b5a98e8f3635811cfefd160bca022eb91fe905d36a02cf25.tar.gz]='https://deps.files.ghostty.org/ziglyph-b89d43d1e3fb01b6074bc1f7fc980324b04d26a5.tar.gz'
	[zlib-1220fed0c74e1019b3ee29edae2051788b080cd96e90d56836eea857b0b966742efb.tar.gz]='https://github.com/madler/zlib/archive/refs/tags/v1.3.1.tar.gz'
)

ZIG_SLOT="0.13"
inherit zig xdg

SRC_URI="
	https://release.files.ghostty.org/${PV}/ghostty-${PV}.tar.gz
	${ZBS_DEPENDENCIES_SRC_URI}
"

LICENSE="
	Apache-2.0 BSD BSD-2 BSD-4 Boost-1.0 MIT MPL-2.0
	!system-freetype? ( || ( FTL GPL-2+ ) )
	!system-harfbuzz? ( Old-MIT ISC icu )
	!system-libpng? ( libpng2 )
	!system-zlib? ( ZLIB )
"
SLOT="0"
KEYWORDS="~amd64"

# TODO: simdutf integration (missing Gentoo version)
# TODO: spirv-cross integration (missing Gentoo package)
# TODO: glfw integration (no option from upstream)
# NOTE: gtk backend requires X right now since ghostty unconditionally
#       includes gdk/x11/gdkx.h.
#       https://github.com/ghostty-org/ghostty/issues/3477
RDEPEND="
	adwaita? ( gui-libs/libadwaita:1= )
	gtk? ( gui-libs/gtk:4=[X] )

	system-fontconfig? ( >=media-libs/fontconfig-2.14.2:= )
	system-freetype? ( >=media-libs/freetype-2.13.2:=[bzip2] )
	system-glslang? ( >=dev-util/glslang-1.3.296.0:= )
	system-harfbuzz? ( >=media-libs/harfbuzz-8.4.0:= )
	system-libpng? ( >=media-libs/libpng-1.6.43:= )
	system-libxml2? ( >=dev-libs/libxml2-2.11.5:= )
	system-oniguruma? ( >=dev-libs/oniguruma-6.9.9:= )
	system-zlib? ( >=sys-libs/zlib-1.3.1:= )
"
DEPEND="${RDEPEND}"
BDEPEND="
	man? ( virtual/pandoc )
"

IUSE="+adwaita man +gtk glfw"
# System integrations
IUSE+="
	+system-fontconfig +system-freetype +system-glslang +system-harfbuzz +system-libpng +system-libxml2
	+system-oniguruma +system-zlib
"

REQUIRED_USE="
	adwaita? ( gtk )
	^^ ( gtk glfw )
"

# XXX: Because we set --release=fast below, Zig will automatically strip
#      the binary. Until Ghostty provides a way to disable the banner while
#      having debug symbols we have ignore pre-stripped file warnings.
QA_PRESTRIPPED="usr/bin/ghostty"

PATCHES=(
	"${FILESDIR}"/${PN}-1.0.0-bzip2-dependency.patch
	"${FILESDIR}"/${PN}-1.0.1-copy-terminfo-using-installdir.patch
)

src_configure() {
	local my_zbs_args=(
		# XXX: Ghostty displays a banner saying it is a debug build unless ReleaseFast is used.
		--release=fast

		-Dfont-backend=fontconfig_freetype
		-Drenderer=opengl
		-Dgtk-adwaita=$(usex adwaita true false)
		-Demit-docs=$(usex man true false)
		-Dversion-string="${PV}"

		-f$(usex system-fontconfig sys no-sys)=fontconfig
		-f$(usex system-freetype sys no-sys)=freetype
		-f$(usex system-glslang sys no-sys)=glslang
		-f$(usex system-harfbuzz sys no-sys)=harfbuzz
		-f$(usex system-libpng sys no-sys)=libpng
		-f$(usex system-libxml2 sys no-sys)=libxml2
		-f$(usex system-oniguruma sys no-sys)=oniguruma
		-f$(usex system-zlib sys no-sys)=zlib
	)

	if use gtk; then
		my_zbs_args+=(
			-Dapp-runtime=gtk
		)
	elif use glfw; then
		my_zbs_args+=(
			-Dapp-runtime=glfw
		)
	fi

	zig_src_configure
}

src_install() {
	zig_src_install

	# HACK: Zig 0.13.0 build system's InstallDir step has a bug where it
	#       fails to install symbolic links, so we manually create it
	#       here.
	dosym -r /usr/share/terminfo/x/xterm-ghostty /usr/share/terminfo/g/ghostty
}