# Copyright 1999-2026 Gentoo Authors # Distributed under the terms of the GNU General Public License v2 EAPI=8 DISTUTILS_USE_PEP517=no DISTUTILS_SINGLE_IMPL=1 PYTHON_COMPAT=( python3_{12..15} ) inherit distutils-r1 gnome2-utils meson optfeature xdg DESCRIPTION="Run Windows software and games on Linux" HOMEPAGE=" https://usebottles.com https://github.com/bottlesdevs/Bottles " SRC_URI="https://github.com/bottlesdevs/Bottles/archive/refs/tags/${PV}.tar.gz -> ${P}.tar.gz" S="${WORKDIR}/Bottles-${PV}" LICENSE="GPL-3" SLOT="0" KEYWORDS="~amd64" RDEPEND=" dev-libs/glib:2 dev-libs/libportal gui-libs/gtk:4 gui-libs/gtksourceview:5 gui-libs/libadwaita:1 dev-vcs/fvs2 $(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/icoextract[${PYTHON_USEDEP}] dev-python/idna[${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/pyxdg[${PYTHON_USEDEP}] dev-python/pyyaml[${PYTHON_USEDEP}] dev-python/requests[${PYTHON_USEDEP}] dev-python/urllib3[${PYTHON_USEDEP}] dev-python/wheel[${PYTHON_USEDEP}] dev-python/yara-python[${PYTHON_USEDEP}] media-gfx/vkbasalt-cli[${PYTHON_USEDEP}] ') " DEPEND="${RDEPEND}" BDEPEND=" dev-libs/appstream-glib dev-libs/glib:2 dev-util/blueprint-compiler dev-util/desktop-file-utils dev-util/gtk-update-icon-cache sys-devel/gettext test? ( $(python_gen_cond_dep ' dev-python/freezegun[${PYTHON_USEDEP}] ') ) " PATCHES=( "${FILESDIR}/${PN}-64.1-dont-stub-gi.repository.patch" "${FILESDIR}/${PN}-64.1-relax-AppStream-file-validation.patch" "${FILESDIR}/${PN}-65.4-remove-Flatpak-related-checks.patch" ) EPYTEST_DESELECT=( bottles/tests/backend/integration/playtime/test_disabled_tracking.py::test_disabled_tracking_smoke bottles/tests/backend/integration/playtime/test_wine_executor_playtime.py::test_wine_executor_emits_and_updates_totals bottles/tests/backend/manager/test_manager.py::test_manager_cli_skips_connection_check bottles/tests/backend/manager/test_playtime.py::test_disable_tracking_method bottles/tests/backend/manager/test_playtime.py::test_disabled_tracker_is_noop bottles/tests/backend/manager/test_sandbox_creation.py::test_create_bottle_rejects_profile_link_outside_prefix bottles/tests/backend/test_network_timeouts.py::test_default_repository_fallbacks_are_commit_pinned bottles/tests/backend/wine/test_executor.py::test_run_program_substitutes_placeholders bottles/tests/frontend/test_cli_setup.py::test_list_components_prepares_directories bottles/tests/frontend/test_cli_setup.py::test_new_bottle_reports_creation_failure bottles/tests/frontend/test_cli_setup.py::test_new_bottle_waits_for_catalogs_before_installing bottles/tests/frontend/test_common.py::test_runner_dropdown_uses_display_names_without_changing_ids bottles/tests/frontend/test_dependency_entry.py::test_cache_lookup_is_skipped_without_installed_dependencies bottles/tests/frontend/test_dependency_entry.py::test_cache_lookup_only_runs_offline bottles/tests/frontend/test_dependency_entry.py::test_installed_dependency_row_shows_its_name bottles/tests/frontend/test_details_view.py::test_unload_view_empties_the_page_stack bottles/tests/frontend/test_drive_dialog.py::test_device_drive_shows_eject_action bottles/tests/frontend/test_external_runner_component.py::test_external_runner_cannot_be_removed_from_bottles bottles/tests/frontend/test_gtk_utils.py::test_full_width_string_list_factory_uses_unellipsized_labels bottles/tests/frontend/test_steam_library.py::test_program_widget_switches_desktop_entry_action bottles/tests/frontend/test_steam_library.py::test_program_widget_uses_library_icon bottles/tests/frontend/test_steam_library.py::test_steam_library_widget_launches_through_steam bottles/tests/frontend/test_steam_library.py::test_steam_program_widget_exposes_library_action bottles/tests/frontend/test_steam_runtime.py::test_steam_runtime_row_explains_availability bottles/tests/frontend/test_ui_language.py::test_ui_languages_match_shipped_catalogs ) EPYTEST_IGNORE=( bottles/tests/frontend/test_open_uri.py bottles/tests/fvs/test_repo.py ) EPYTEST_PLUGINS=( pytest-mock ) distutils_enable_tests pytest src_test() { find bottles/tests -type f -exec \ sed -i "s|/app/share/bottles/bottles.gresource|${BUILD_DIR}/bottles/frontend/ui/bottles.gresource|" {} \; meson_src_test distutils-r1_src_test } src_install() { meson_src_install python_fix_shebang "${ED}/usr/bin" } pkg_postinst() { xdg_pkg_postinst gnome2_schemas_update optfeature "extracting files from .cab files" app-arch/cabextract optfeature "7-Zip archiver support" app-arch/p7zip optfeature "Vulkan support" dev-util/vulkan-tools optfeature "icon/image convertion" media-gfx/imagemagick optfeature "display information support" x11-apps/xdpyinfo optfeature "preloading game files into memory" dev-util/vmtouch optfeature "optimizing Linux system performance on demand" games-util/gamemode optfeature "an efficient micro-compositor for running games" gui-wm/gamescope optfeature "monitoring FPS, temperatures, CPU/GPU load and more" games-util/mangohud } pkg_postrm() { xdg_pkg_postrm gnome2_schemas_update }