| # Copyright 1999-2024 Gentoo Authors |
| # Distributed under the terms of the GNU General Public License v2 |
| |
| EAPI=8 |
| |
| PYTHON_COMPAT=( python3_{10..12} ) |
| inherit edo flag-o-matic go-env optfeature multiprocessing |
| inherit python-single-r1 toolchain-funcs xdg |
| |
| if [[ ${PV} == 9999 ]]; then |
| inherit git-r3 |
| EGIT_REPO_URI="https://github.com/kovidgoyal/kitty.git" |
| else |
| inherit verify-sig |
| SRC_URI=" |
| https://github.com/kovidgoyal/kitty/releases/download/v${PV}/${P}.tar.xz |
| https://dev.gentoo.org/~ionen/distfiles/${P}-vendor.tar.xz |
| verify-sig? ( https://github.com/kovidgoyal/kitty/releases/download/v${PV}/${P}.tar.xz.sig ) |
| " |
| VERIFY_SIG_OPENPGP_KEY_PATH=/usr/share/openpgp-keys/kovidgoyal.gpg |
| KEYWORDS="amd64 arm64 ~ppc64 ~riscv x86" |
| fi |
| |
| DESCRIPTION="Fast, feature-rich, GPU-based terminal" |
| HOMEPAGE="https://sw.kovidgoyal.net/kitty/" |
| |
| LICENSE="GPL-3 ZLIB" |
| LICENSE+=" Apache-2.0 BSD BSD-2 MIT MPL-2.0" # go |
| SLOT="0" |
| IUSE="+X test wayland" |
| REQUIRED_USE=" |
| ${PYTHON_REQUIRED_USE} |
| || ( X wayland ) |
| test? ( X wayland ) |
| " |
| RESTRICT="!test? ( test )" |
| |
| # dlopen: fontconfig,libglvnd |
| RDEPEND=" |
| ${PYTHON_DEPS} |
| dev-libs/openssl:= |
| dev-libs/xxhash |
| media-libs/fontconfig |
| media-libs/harfbuzz:=[truetype] |
| media-libs/lcms:2 |
| media-libs/libglvnd[X?] |
| media-libs/libpng:= |
| sys-apps/dbus |
| sys-libs/zlib:= |
| x11-libs/libxkbcommon[X?] |
| x11-misc/xkeyboard-config |
| ~x11-terms/kitty-shell-integration-${PV} |
| ~x11-terms/kitty-terminfo-${PV} |
| X? ( |
| x11-libs/libX11 |
| x11-libs/libXcursor |
| ) |
| wayland? ( dev-libs/wayland ) |
| !sci-mathematics/kissat |
| " |
| DEPEND=" |
| ${RDEPEND} |
| amd64? ( >=dev-libs/simde-0.8.0-r1 ) |
| arm64? ( dev-libs/simde ) |
| x86? ( dev-libs/simde ) |
| X? ( |
| x11-base/xorg-proto |
| x11-libs/libXi |
| x11-libs/libXinerama |
| x11-libs/libXrandr |
| ) |
| wayland? ( dev-libs/wayland-protocols ) |
| " |
| # bug #919751 wrt go subslot |
| BDEPEND=" |
| ${PYTHON_DEPS} |
| >=dev-lang/go-1.22:= |
| sys-libs/ncurses |
| virtual/pkgconfig |
| test? ( $(python_gen_cond_dep 'dev-python/pillow[${PYTHON_USEDEP}]') ) |
| wayland? ( dev-util/wayland-scanner ) |
| " |
| [[ ${PV} == 9999 ]] || BDEPEND+=" verify-sig? ( sec-keys/openpgp-keys-kovidgoyal )" |
| |
| QA_FLAGS_IGNORED="usr/bin/kitten" # written in Go |
| |
| src_unpack() { |
| if [[ ${PV} == 9999 ]]; then |
| git-r3_src_unpack |
| cd "${S}" || die |
| edo go mod vendor |
| else |
| use verify-sig && |
| verify-sig_verify_detached "${DISTDIR}"/${P}.tar.xz{,.sig} |
| default |
| fi |
| } |
| |
| src_prepare() { |
| default |
| |
| # sed unfortunately feels easier on maintenance than patches here |
| local sedargs=( |
| -e "/num_workers =/s/=.*/= $(makeopts_jobs)/" |
| -e "s/cflags.append.*-O3.*/pass/" -e 's/-O3//' |
| -e "s/cflags.append(fortify_source)/pass/" # use toolchain's _f_s |
| -e "s/ld_flags.append('-[sw]')/pass/" |
| ) |
| |
| # kitty is often popular on wayland-only setups, try to allow this |
| use !X && sedargs+=( -e '/gl_libs =/s/=.*/= []/' ) #857918 |
| use !X || use !wayland && |
| sedargs+=( -e "s/'x11 wayland'/'$(usex X x11 wayland)'/" ) |
| |
| # skip docs for live version, missing dependencies |
| [[ ${PV} == 9999 ]] && sedargs+=( -e '/exists.*_build/,/docs(ddir)/d' ) |
| |
| sed -i setup.py "${sedargs[@]}" || die |
| |
| local skiptests=( |
| # relies on 'who' command which doesn't detect users with pid-sandbox |
| kitty_tests/utmp.py |
| # may fail/hang depending on environment and shell initialization |
| kitty_tests/{shell_integration,ssh}.py |
| # relies on /proc/self/fd and gets confused when ran from here |
| tools/utils/tpmfile_test.go |
| ) |
| use !test || rm "${skiptests[@]}" || die |
| } |
| |
| src_compile() { |
| tc-export CC |
| local -x PKGCONFIG_EXE=$(tc-getPKG_CONFIG) |
| |
| go-env_set_compile_environment |
| local -x GOFLAGS="-p=$(makeopts_jobs) -v -x -buildvcs=false" |
| use ppc64 && [[ $(tc-endian) == big ]] || GOFLAGS+=" -buildmode=pie" |
| |
| # workaround link errors with Go + gcc + -g3 (bug #924436), |
| # retry now and then to see if can be dropped |
| tc-is-gcc && |
| CGO_CFLAGS=$( |
| CFLAGS=${CGO_CFLAGS} |
| replace-flags -g3 -g |
| replace-flags -ggdb3 -ggdb |
| printf %s "${CFLAGS}" |
| ) |
| |
| local conf=( |
| --disable-link-time-optimization |
| --ignore-compiler-warnings |
| --libdir-name=$(get_libdir) |
| --shell-integration="enabled no-rc no-sudo" |
| --update-check-interval=0 |
| --verbose |
| ) |
| |
| edo "${EPYTHON}" setup.py linux-package "${conf[@]}" |
| use test && edo "${EPYTHON}" setup.py build-launcher "${conf[@]}" |
| |
| rm -r linux-package/share/terminfo || die # provided by kitty-terminfo |
| |
| if [[ ${PV} == 9999 ]]; then |
| mkdir -p linux-package/share/doc/${PF} || die |
| else |
| mv linux-package/share/doc/{${PN},${PF}} || die |
| fi |
| |
| # generate default config as reference, command taken from docs/conf.rst |
| if ! tc-is-cross-compiler; then |
| linux-package/bin/kitty +runpy \ |
| 'from kitty.config import *; print(commented_out_default_config())' \ |
| > linux-package/share/doc/${PF}/kitty.conf || die |
| fi |
| } |
| |
| src_test() { |
| KITTY_CONFIG_DIRECTORY=${T} ./test.py || die # shebang is kitty |
| } |
| |
| src_install() { |
| edo mv linux-package "${ED}"/usr |
| } |
| |
| pkg_postinst() { |
| xdg_pkg_postinst |
| |
| optfeature "audio-based terminal bell support" media-libs/libcanberra |
| optfeature "opening links from the terminal" x11-misc/xdg-utils |
| } |