repo/proj/guru:dev commit in: games-util/bottles/files/, games-util/bottles/

"Pavel Sobolev" <contact-2GWvd5oGOoG/[email protected]>
Newsgroups gmane.linux.gentoo.cvs
Message-ID <1786282736.a2d6cc04deee225f05ac8f3224118cf0f1dfc9e4.contact@gentoo>
commit:     a2d6cc04deee225f05ac8f3224118cf0f1dfc9e4
Author:     Pavel Sobolev <contact <AT> paveloom <DOT> dev>
AuthorDate: Sun Aug  9 13:02:47 2026 +0000
Commit:     Pavel Sobolev <contact <AT> paveloom <DOT> dev>
CommitDate: Sun Aug  9 13:38:56 2026 +0000
URL:        https://gitweb.gentoo.org/repo/proj/guru.git/commit/?id=a2d6cc04

games-util/bottles: add 65.4

Signed-off-by: Pavel Sobolev <contact <AT> paveloom.dev>

 games-util/bottles/Manifest                        |   1 +
 games-util/bottles/bottles-65.4.ebuild             | 148 +++++++++++++++++++++
 ...ottles-65.4-remove-Flatpak-related-checks.patch | 118 ++++++++++++++++
 3 files changed, 267 insertions(+)

diff --git a/games-util/bottles/Manifest b/games-util/bottles/Manifest
index 87ef865163..9cc6ab9acc 100644
--- a/games-util/bottles/Manifest
+++ b/games-util/bottles/Manifest
@@ -1 +1,2 @@
 DIST bottles-64.1.tar.gz 2758708 BLAKE2B 77b8dd6c4164b832bf1a5c073f2262c96c1877b01b9e6e69212201fac58a0c427559c3b3929ae6b6c1e3bb2952245cd11f9ca89c75d80d85371b248b33dc4652 SHA512 a5a4e5d0f06eadd9461901b29a168be91627fae014dc8f6f99210d0882301e9e34cbeaf5193107e77f4b01cdf8f5d50afa692e5916889e829f080b37c9d7a2c1
+DIST bottles-65.4.tar.gz 5463050 BLAKE2B dea90e876c9ed49ac47a56787b519d367124d4ea511915f59cff60764d6dbf097cb68ae98d21b2fcfd863c9c0d868762591f6c602943ca0ec355f78052efa00c SHA512 2929beca726021eaf3ad85213629bfd75cd627c00f3cc6b4eb248586e912df18de1068ee2e9fde990460c65885c82a4cec284e9ab35c504d1c5e39ab3d3d90c1

diff --git a/games-util/bottles/bottles-65.4.ebuild b/games-util/bottles/bottles-65.4.ebuild
new file mode 100644
index 0000000000..5b8443aef1
--- /dev/null
+++ b/games-util/bottles/bottles-65.4.ebuild
@@ -0,0 +1,148 @@
+# 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
+}

diff --git a/games-util/bottles/files/bottles-65.4-remove-Flatpak-related-checks.patch b/games-util/bottles/files/bottles-65.4-remove-Flatpak-related-checks.patch
new file mode 100644
index 0000000000..c67da68d70
--- /dev/null
+++ b/games-util/bottles/files/bottles-65.4-remove-Flatpak-related-checks.patch
@@ -0,0 +1,118 @@
+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
+@@ -713,22 +713,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
+@@ -173,9 +173,6 @@ class PreferencesView(Adw.PreferencesPage):
+                 )
+             )
+ 
+-        if 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
+@@ -126,9 +126,6 @@ class BottlesBottleRow(Adw.ActionRow):
+ 
+     def run_executable(self, *_args):
+         """Display file dialog for executable"""
+-        if 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
+@@ -92,7 +92,7 @@ class BottlesNewBottleDialog(Adw.Dialog):
+         )
+         # common variables and references
+         self.window = GtkUtils.get_parent_window()
+-        if not self.window or 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
+@@ -131,35 +131,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 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()
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.