# Copyright 2023-2024 Gentoo Authors # Distributed under the terms of the GNU General Public License v2 EAPI=8 PYTHON_COMPAT=( python3_{10..12} ) inherit gnome2-utils python-single-r1 meson xdg optfeature DESCRIPTION="Run Windows software and games on Linux" HOMEPAGE="https://usebottles.com/" if [[ "${PV}" == "9999" ]]; then inherit git-r3 EGIT_REPO_URI="https://github.com/bottlesdevs/Bottles/" else SRC_URI="https://github.com/bottlesdevs/Bottles/archive/refs/tags/${PV}.tar.gz -> ${P}.tar.gz" S="${WORKDIR}/Bottles-${PV}" KEYWORDS="~amd64" fi LICENSE="GPL-3" SLOT="0" IUSE="test llvm-libunwind" REQUIRED_USE="${PYTHON_REQUIRED_USE}" RESTRICT="!test? ( test )" # Very annoying to figure out the deps # Script for getting python modules: # https://gitlab.com/Parona/my-scripts/-/blob/master/scripts/python_deps.sh # Runtime programs needed can be quickly found with: # grep -r "shutil.which" # But look at context to gauge if they are optional or not # # BDPEPEND dependencies can be thankfully gathered from the meson.build files # DEPEND are instrospection files which can be found as such # find . -name "*.blp" -exec grep -Eh "^using " {} + | sed 's/using \([A-Za-z]*\) \([0-9.]*\);/\1-\2.typelib/' # And in similar vein find runtime required introspection files, similar deal with getting typelib file as above # grep -r "gi.require_version # vkbasalt could be optional but vkbasalt-cli isnt # It could work without wine but(!) it still requires all the runtime dependencies for wine # so easier to depend on wine to get it for free DEPEND=" gui-libs/gtk:4[introspection] gui-libs/libadwaita[introspection] " RDEPEND=" ${PYTHON_DEPS} ${DEPEND} app-arch/cabextract app-arch/p7zip gui-libs/gtksourceview[introspection] media-gfx/imagemagick >=sys-libs/glibc-2.32 x11-apps/xdpyinfo || ( app-emulation/wine-vanilla[X,llvm-libunwind=] app-emulation/wine-staging[X,llvm-libunwind=] app-emulation/wine-proton[X(+),llvm-libunwind=] ) $(python_gen_cond_dep ' app-arch/patool[${PYTHON_USEDEP}] dev-python/certifi[${PYTHON_USEDEP}] dev-python/chardet[${PYTHON_USEDEP}] dev-python/charset-normalizer[${PYTHON_USEDEP}] dev-python/FVS[${PYTHON_USEDEP}] dev-python/idna[${PYTHON_USEDEP}] dev-python/icoextract[${PYTHON_USEDEP}] dev-python/markdown[${PYTHON_USEDEP}] dev-python/orjson[${PYTHON_USEDEP}] dev-python/pathvalidate[${PYTHON_USEDEP}] dev-python/pefile[${PYTHON_USEDEP}] dev-python/pycairo[${PYTHON_USEDEP}] dev-python/pycurl[${PYTHON_USEDEP}] dev-python/pygobject[${PYTHON_USEDEP}] dev-python/pyyaml[${PYTHON_USEDEP}] dev-python/requests[${PYTHON_USEDEP}] dev-python/urllib3[${PYTHON_USEDEP}] dev-python/vkbasalt-cli[${PYTHON_USEDEP}] dev-python/wheel[${PYTHON_USEDEP}] ') " BDEPEND=" ${PYTHON_DEPS} dev-util/blueprint-compiler dev-libs/glib:2 sys-devel/gettext test? ( $(python_gen_cond_dep ' dev-python/pytest[${PYTHON_USEDEP}] ') ) " EPYTEST_DESELECT=( # tests that check execution time are flaky in the right circumstances # (like compiling llvm at the same time type circumstance) "bottles/tests/backend/state/test_events.py::test_set_reset" "bottles/tests/backend/state/test_events.py::test_simple_event" "bottles/tests/backend/state/test_events.py::test_wait_after_done_event" ) pkg_setup() { python-single-r1_pkg_setup } src_configure() { if [[ "${PV}" == "9999" ]]; then local emesonargs=( -Ddevel=true ) fi meson_src_configure } src_install() { meson_src_install python_optimize "${D}/usr/share/bottles/" python_fix_shebang "${D}/usr/" } src_test() { epytest } pkg_preinst() { xdg_pkg_preinst gnome2_schemas_savelist } pkg_postinst() { xdg_pkg_postinst gnome2_schemas_update optfeature "gamemode support" games-util/gamemode optfeature "gamescope support" games-util/gamescope optfeature "vmtouch support" dev-utils/vmtouch #optfeature "MangoHub support" games-util/mangohub #optfeature "obs-vkcapture support" media-video/obs-vkcapture if use llvm-libunwind; then ewarn "When using llvm-libunwind useflag all the runners downloaded from bottles should be broken" ewarn "So when using llvm-libunwind system wide is recommended to stick only to runners compiled by your system" ewarn "Note: Using LLVM Profile Steam Proton works, so you can try bottles runners" fi }