repo/proj/guru:dev commit in: games-util/bottles/, games-util/bottles/files/
"Pavel Sobolev" <contact-2GWvd5oGOoG/[email protected]>
| Newsgroups | gmane.linux.gentoo.cvs |
|---|---|
| Message-ID | <1786801842.70a5efc3102cf60094a962704b44f142deb23283.contact@gentoo> |
commit: 70a5efc3102cf60094a962704b44f142deb23283
Author: Pavel Sobolev <contact <AT> paveloom <DOT> dev>
AuthorDate: Sat Aug 15 09:18:23 2026 +0000
Commit: Pavel Sobolev <contact <AT> paveloom <DOT> dev>
CommitDate: Sat Aug 15 13:50:42 2026 +0000
URL: https://gitweb.gentoo.org/repo/proj/guru.git/commit/?id=70a5efc3
games-util/bottles: add 66.6
Signed-off-by: Pavel Sobolev <contact <AT> paveloom.dev>
games-util/bottles/Manifest | 1 +
games-util/bottles/bottles-66.6.ebuild | 172 +++++++++++++++++++++
...ottles-66.6-remove-Flatpak-related-checks.patch | 120 ++++++++++++++
3 files changed, 293 insertions(+)
diff --git a/games-util/bottles/Manifest b/games-util/bottles/Manifest
index 9cc6ab9acc..e8eaad1a2f 100644
--- a/games-util/bottles/Manifest
+++ b/games-util/bottles/Manifest
@@ -1,2 +1,3 @@
DIST bottles-64.1.tar.gz 2758708 BLAKE2B 77b8dd6c4164b832bf1a5c073f2262c96c1877b01b9e6e69212201fac58a0c427559c3b3929ae6b6c1e3bb2952245cd11f9ca89c75d80d85371b248b33dc4652 SHA512 a5a4e5d0f06eadd9461901b29a168be91627fae014dc8f6f99210d0882301e9e34cbeaf5193107e77f4b01cdf8f5d50afa692e5916889e829f080b37c9d7a2c1
DIST bottles-65.4.tar.gz 5463050 BLAKE2B dea90e876c9ed49ac47a56787b519d367124d4ea511915f59cff60764d6dbf097cb68ae98d21b2fcfd863c9c0d868762591f6c602943ca0ec355f78052efa00c SHA512 2929beca726021eaf3ad85213629bfd75cd627c00f3cc6b4eb248586e912df18de1068ee2e9fde990460c65885c82a4cec284e9ab35c504d1c5e39ab3d3d90c1
+DIST bottles-66.6.tar.gz 5563577 BLAKE2B 9925976c9bb4d9a06656443e37117aabd4e82c08cf8c13f8b4e7232e4de20ade19dba6068fe7e312a89dc7a13802b919ed092cdc504db58cc4018fad99b92200 SHA512 a56e21f31ff6af1216b80e2b28fcc3f85e2398b47ce57f0bc793e93aff5259331f05bbaf577fd8ba1cc229670cfeb037381a60cd85815b3497f6146ab29e15eb
diff --git a/games-util/bottles/bottles-66.6.ebuild b/games-util/bottles/bottles-66.6.ebuild
new file mode 100644
index 0000000000..aaf7e8da68
--- /dev/null
+++ b/games-util/bottles/bottles-66.6.ebuild
@@ -0,0 +1,172 @@
+# 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[gtk]
+ 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}-66.6-remove-Flatpak-related-checks.patch"
+)
+
+EPYTEST_DESELECT=(
+ bottles/tests/backend/integration/playtime/test_aggregation.py::test_different_programs_separate_rows
+ bottles/tests/backend/integration/playtime/test_aggregation.py::test_same_program_aggregates_into_one_row
+ bottles/tests/backend/integration/playtime/test_disabled_tracking.py::test_disabled_tracking_smoke
+ bottles/tests/backend/integration/playtime/test_failure_run.py::test_failure_run_marks_unknown_and_updates_totals
+ bottles/tests/backend/integration/playtime/test_failure_run.py::test_multiple_failures_different_bottles
+ bottles/tests/backend/integration/playtime/test_failure_run.py::test_multiple_failures_same_bottle_different_programs
+ bottles/tests/backend/integration/playtime/test_playtime_signals.py::test_signals_flow_success
+ bottles/tests/backend/integration/playtime/test_playtime_signals.py::test_signals_flow_unknown_failure
+ bottles/tests/backend/integration/playtime/test_recovery.py::test_cli_manager_init_does_not_recover_live_sessions
+ bottles/tests/backend/integration/playtime/test_recovery.py::test_recovery_different_bottles
+ bottles/tests/backend/integration/playtime/test_recovery.py::test_recovery_same_bottle_different_programs
+ bottles/tests/backend/integration/playtime/test_recovery.py::test_recovery_smoke
+ bottles/tests/backend/integration/playtime/test_schema_meta.py::test_schema_meta_smoke
+ bottles/tests/backend/integration/playtime/test_successful_run.py::test_success_multiple_apps_two_same_bottle_one_other
+ bottles/tests/backend/integration/playtime/test_successful_run.py::test_successful_run_finalizes_and_updates_totals
+ bottles/tests/backend/integration/playtime/test_uniqueness_retry.py::test_uniqueness_retry_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_bottle_details.py::test_flatpak_system_runner_uses_builtin_label
+ bottles/tests/frontend/test_bottle_details.py::test_missing_runner_dialog_waits_for_versioning_upgrade
+ 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_dependency_row_activates_batch_selection
+ bottles/tests/frontend/test_dependency_entry.py::test_installed_dependency_actions_use_recorded_uninstaller
+ bottles/tests/frontend/test_dependency_entry.py::test_installed_dependency_row_shows_its_name
+ bottles/tests/frontend/test_dependency_entry.py::test_installed_dependency_without_uninstaller_cannot_be_removed
+ 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_library_entry_resolves_steam_game_without_wine_program
+ bottles/tests/frontend/test_steam_library.py::test_program_widget_extracts_its_own_icon
+ 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/frontend/test_umu_ui.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
+ optfeature "UMU game prefixes" games-util/umu-launcher
+}
+
+pkg_postrm() {
+ xdg_pkg_postrm
+ gnome2_schemas_update
+}
diff --git a/games-util/bottles/files/bottles-66.6-remove-Flatpak-related-checks.patch b/games-util/bottles/files/bottles-66.6-remove-Flatpak-related-checks.patch
new file mode 100644
index 0000000000..577efb6280
--- /dev/null
+++ b/games-util/bottles/files/bottles-66.6-remove-Flatpak-related-checks.patch
@@ -0,0 +1,120 @@
+From: Pavel Sobolev <contact-2GWvd5oGOoG/[email protected]>
+Subject: [PATCH] Remove Flatpak-related checks
+
+Signed-off-by: Pavel Sobolev <contact-2GWvd5oGOoG/[email protected]>
+
+--- a/bottles/frontend/meson.build
++++ b/bottles/frontend/meson.build
+@@ -23,12 +23,6 @@ params_file = configure_file(
+ configuration: conf
+ )
+
+-fs = import('fs')
+-
+-if not fs.is_file('/' + '.flatpak-info')
+- error('file does not exist')
+-endif
+-
+ bottles_sources = [
+ '__init__.py',
+ 'main.py',
+--- a/bottles/frontend/views/bottle_details.py
++++ b/bottles/frontend/views/bottle_details.py
+@@ -727,22 +727,7 @@ class BottleView(Adw.PreferencesPage):
+ dialog.connect("response", execute)
+ dialog.show()
+
+- if Xdp.Portal.running_under_sandbox():
+- if self.window.settings.get_boolean("show-sandbox-warning"):
+- dialog = Adw.MessageDialog.new(
+- self.window,
+- _("Be Aware of Sandbox"),
+- _(
+- "Bottles is running in a sandbox, a restricted permission environment needed to keep you safe. If the program won't run, consider moving inside the bottle (3 dots icon on the top), then launch from there."
+- ),
+- )
+- dialog.add_response("dismiss", _("_Dismiss"))
+- dialog.connect("response", lambda *args: show_chooser())
+- dialog.present()
+- else:
+- show_chooser()
+- else:
+- show_chooser()
++ show_chooser()
+
+ def analyze_with_eagle(self, path):
+ """Open the Eagle analysis view and scan the given executable."""
+--- a/bottles/frontend/views/bottle_preferences.py
++++ b/bottles/frontend/views/bottle_preferences.py
+@@ -185,9 +185,6 @@ class PreferencesView(Adw.PreferencesPage):
+ )
+ )
+
+- if not is_cpak() and not Xdp.Portal.running_under_sandbox():
+- return
+-
+ _not_available = _("This feature is unavailable on your system.")
+ _flatpak_not_available = _("{} To add this feature, please run").format(
+ _not_available
+--- a/bottles/frontend/views/list.py
++++ b/bottles/frontend/views/list.py
+@@ -130,9 +130,6 @@ class BottlesBottleRow(Adw.ActionRow):
+
+ def run_executable(self, *_args):
+ """Display file dialog for executable"""
+- if not is_cpak() and not Xdp.Portal.running_under_sandbox():
+- return
+-
+ def set_path(_dialog, response):
+ if response != Gtk.ResponseType.ACCEPT:
+ return
+--- a/bottles/frontend/views/new_bottle_dialog.py
++++ b/bottles/frontend/views/new_bottle_dialog.py
+@@ -93,9 +93,7 @@ class BottlesNewBottleDialog(Adw.Dialog):
+ )
+ # common variables and references
+ self.window = GtkUtils.get_parent_window()
+- if not self.window or (
+- not is_cpak() and not Xdp.Portal.running_under_sandbox()
+- ):
++ if not self.window:
+ return
+
+ self.app = self.window.get_application()
+--- a/bottles/frontend/windows/window.py
++++ b/bottles/frontend/windows/window.py
+@@ -143,35 +143,6 @@ class BottlesWindow(Adw.ApplicationWindow):
+ manager = Adw.StyleManager.get_default()
+ manager.set_color_scheme(Adw.ColorScheme.FORCE_DARK)
+
+- # Be VERY explicit that non-sandboxed environments are unsupported
+- if not os.environ.get("CPAK_CONTAINER_ID") and not Xdp.Portal.running_under_sandbox():
+-
+- def response(dialog, response, *args):
+- if response == "close":
+- quit(1)
+-
+- body = _(
+- "Bottles is only supported within a sandboxed environment. Official sources of Bottles are available at"
+- )
+- download_url = "usebottles.com/download"
+-
+- error_dialog = Adw.AlertDialog.new(
+- _("Unsupported Environment"),
+- f"{body} <a href='https://{download_url}' title='https://{download_url}'>{download_url}.</a>",
+- )
+-
+- error_dialog.add_response("close", _("Close"))
+- error_dialog.set_body_use_markup(True)
+- error_dialog.connect("response", response)
+- error_dialog.present(self)
+- logging.error(
+- _(
+- "Bottles is only supported within a sandboxed format. Official sources of Bottles are available at:"
+- )
+- )
+- logging.error("https://usebottles.com/download/")
+- return
+-
+ # Loading view
+ self.page_loading = LoadingView()