diff --git a/.git-blame-ignore-revs b/.git-blame-ignore-revs new file mode 100644 index 0000000..56e3a87 --- /dev/null +++ b/.git-blame-ignore-revs @@ -0,0 +1,2 @@ +# Line out sections +53d45d3de51c20d134e62146a0ff82a3114cdeda diff --git a/.gitignore b/.gitignore index ef48681..c1a85b6 100644 --- a/.gitignore +++ b/.gitignore @@ -1,54 +1,2 @@ -/bottles-2.0.9.7.tar.gz -/bottles-2.0.9.8.tar.gz -/bottles-2.0.9.9.tar.gz -/bottles-2.1.0.tar.gz -/bottles-2.1.0.2.tar.gz -/bottles-2.1.0.4.tar.gz -/bottles-2.1.0.5.tar.gz -/bottles-2.1.0.6.tar.gz -/bottles-2.1.0.7.tar.gz -/bottles-2.1.1.tar.gz -/bottles-2.1.2.tar.gz -/bottles-3.0.1.1.tar.gz -/bottles-3.0.2.tar.gz -/bottles-3.0.5.tar.gz -/bottles-3.0.6.tar.gz -/bottles-3.0.8.tar.gz -/bottles-3.0.9.tar.gz -/bottles-3.1.0.tar.gz -/bottles-3.1.1.tar.gz -/bottles-3.1.2.tar.gz -/bottles-3.1.3.tar.gz -/bottles-3.1.4.tar.gz -/bottles-3.1.5.tar.gz -/bottles-3.1.6.tar.gz -/bottles-3.1.7.tar.gz -/bottles-3.1.8.tar.gz -/bottles-3.1.9.tar.gz -/bottles-3.1.10.tar.gz -/bottles-3.1.11.tar.gz -/bottles-3.1.12.tar.gz -/bottles-3.1.13.tar.gz -/bottles-3.1.14.tar.gz -/bottles-3.1.15.tar.gz -/bottles-2021.7.3.tar.gz -/bottles-2021.7.14.tar.gz -/bottles-2021.7.28.tar.gz -/bottles-2021.8.14.tar.gz -/bottles-2021.8.28.tar.gz -/bottles-2021.9.14.tar.gz -/bottles-2021.9.28.tar.gz -/bottles-2021.10.14.tar.gz -/bottles-2021.10.28.tar.gz -/bottles-2021.11.14.tar.gz -/bottles-2021.11.28.tar.gz -/bottles-2021.12.14.tar.gz -/bottles-2021.12.28.tar.gz -/bottles-2022.1.14.tar.gz -/bottles-2022.1.28.tar.gz -/bottles-2022.2.14.tar.gz -/bottles-2022.2.28.tar.gz -/bottles-2022.3.14.tar.gz -/bottles-2022.3.28.tar.gz -/bottles-2022.4.14.tar.gz -/bottles-2022.4.28.tar.gz +/Bottles*tar.gz +require*.txt diff --git a/.packit.yaml b/.packit.yaml new file mode 100644 index 0000000..7659433 --- /dev/null +++ b/.packit.yaml @@ -0,0 +1,17 @@ +upstream_project_url: https://github.com/bottlesdevs/Bottles +upstream_package_name: Bottles +upstream_tag_template: "{version}" +downstream_package_name: bottles + +copy_upstream_release_description: false + +jobs: + - job: pull_from_upstream + trigger: release + dist_git_branches: + - fedora-rawhide + - job: koji_build + + trigger: commit + dist_git_branches: + - fedora-all diff --git a/0001-Make-sure-Paths.bottles-exists.patch b/0001-Make-sure-Paths.bottles-exists.patch new file mode 100644 index 0000000..2dd5612 --- /dev/null +++ b/0001-Make-sure-Paths.bottles-exists.patch @@ -0,0 +1,34 @@ +From 7e820512cffc4f709a2d00e341306f57d91ddda5 Mon Sep 17 00:00:00 2001 +From: Sandro +Date: Mon, 4 Mar 2024 20:28:49 +0100 +Subject: [PATCH 1/3] Make sure Paths.bottles exists + +When calling `bottles foo.exe` either from the command line or by +opening the executable from the file browser with Bottles, Bottles will +throw a FileNotFoundError if Paths.bottles does not exist. + +It seems check_app_dirs() is never called in that situation. +--- + bottles/backend/managers/manager.py | 6 +++++- + 1 file changed, 5 insertions(+), 1 deletion(-) + +diff --git a/bottles/backend/managers/manager.py b/bottles/backend/managers/manager.py +index 5569b663..799ce8c3 100644 +--- a/bottles/backend/managers/manager.py ++++ b/bottles/backend/managers/manager.py +@@ -888,7 +888,11 @@ class Manager(metaclass=Singleton): + Check for local bottles and update the local_bottles list. + Will also mark the broken ones if the configuration file is missing + """ +- bottles = os.listdir(Paths.bottles) ++ try: ++ bottles = os.listdir(Paths.bottles) ++ except FileNotFoundError: ++ self.check_app_dirs() ++ bottles = [] + + # Empty local bottles + self.local_bottles = {} +-- +2.51.0 + diff --git a/0002-Catch-AttributeError-in-set_manager.patch b/0002-Catch-AttributeError-in-set_manager.patch new file mode 100644 index 0000000..960b3c7 --- /dev/null +++ b/0002-Catch-AttributeError-in-set_manager.patch @@ -0,0 +1,33 @@ +From 602f3b45095fc63728850ba1d636ac52e4a6f156 Mon Sep 17 00:00:00 2001 +From: Sandro +Date: Mon, 4 Mar 2024 21:45:51 +0100 +Subject: [PATCH 2/3] Catch AttributeError in set_manager() + +Return empty list if AttributeError is raised. +--- + bottles/frontend/windows/window.py | 9 ++++++--- + 1 file changed, 6 insertions(+), 3 deletions(-) + +diff --git a/bottles/frontend/windows/window.py b/bottles/frontend/windows/window.py +index 26d90728..ce76ab42 100644 +--- a/bottles/frontend/windows/window.py ++++ b/bottles/frontend/windows/window.py +@@ -262,9 +262,12 @@ class BottlesWindow(Adw.ApplicationWindow): + def set_manager(result: Manager, error=None): + self.manager = result + +- tmp_runners = [ +- x for x in self.manager.runners_available if not x.startswith("sys-") +- ] ++ try: ++ tmp_runners = [ ++ x for x in self.manager.runners_available if not x.startswith("sys-") ++ ] ++ except AttributeError: ++ tmp_runners = [] + if len(tmp_runners) == 0: + self.show_onboard_view() + +-- +2.51.0 + diff --git a/0003-Catch-AttributeError-when-window-is-closed.patch b/0003-Catch-AttributeError-when-window-is-closed.patch new file mode 100644 index 0000000..eaff8a1 --- /dev/null +++ b/0003-Catch-AttributeError-when-window-is-closed.patch @@ -0,0 +1,33 @@ +From 3001aaba2b1ea6488b69f8714171eff635043b53 Mon Sep 17 00:00:00 2001 +From: Sandro +Date: Sat, 9 Nov 2024 13:42:00 +0100 +Subject: [PATCH 3/3] Catch AttributeError when window is closed + +In certain situations Bottles crashes with: + +__quit:AttributeError: 'Bottles' object has no attribute 'win' + +This should allow Bottles to exit without error. +--- + bottles/frontend/main.py | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +diff --git a/bottles/frontend/main.py b/bottles/frontend/main.py +index f6a07b15..ea3d7ad1 100644 +--- a/bottles/frontend/main.py ++++ b/bottles/frontend/main.py +@@ -267,7 +267,10 @@ class Bottles(Adw.Application): + logging.info( + _("[Quit] request received."), + ) +- self.win.on_close_request() ++ try: ++ self.win.on_close_request() ++ except AttributeError: ++ pass + quit() + + @staticmethod +-- +2.51.0 + diff --git a/1001-Revert-meson-Add-check-for-Flatpak.patch b/1001-Revert-meson-Add-check-for-Flatpak.patch new file mode 100644 index 0000000..e871f2d --- /dev/null +++ b/1001-Revert-meson-Add-check-for-Flatpak.patch @@ -0,0 +1,33 @@ +From 43278894bd9f1277da14ac187ba7b42ece5cf483 Mon Sep 17 00:00:00 2001 +From: Sandro +Date: Sun, 8 Dec 2024 11:11:27 +0100 +Subject: [PATCH 1001/1005] Revert "meson: Add check for Flatpak" + +We still want to package Bottle as RPM for our users, despite upstream +having a very strong, almost hostile, preference for Flatpak. + +This reverts commit 6206301992c3218060761e5b574b83da485b759a. +--- + bottles/frontend/meson.build | 6 ------ + 1 file changed, 6 deletions(-) + +diff --git a/bottles/frontend/meson.build b/bottles/frontend/meson.build +index 6ff7c011..c26ea0b9 100644 +--- 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', +-- +2.51.0 + diff --git a/1002-Change-issue-URL-to-Bugzilla.patch b/1002-Change-issue-URL-to-Bugzilla.patch new file mode 100644 index 0000000..1ee76f0 --- /dev/null +++ b/1002-Change-issue-URL-to-Bugzilla.patch @@ -0,0 +1,27 @@ +From 6daaf8a10f2678f1325546992aa27552f0407c1e Mon Sep 17 00:00:00 2001 +From: Sandro +Date: Sun, 8 Dec 2024 11:22:42 +0100 +Subject: [PATCH 1002/1005] Change issue URL to Bugzilla + +Since upstream does not whish to receive bug reports from non-Flatpak +users, direct them to Bugzilla instead. +--- + data/com.usebottles.bottles.metainfo.xml.in.in | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/data/com.usebottles.bottles.metainfo.xml.in.in b/data/com.usebottles.bottles.metainfo.xml.in.in +index c380c823..fd2261d9 100644 +--- a/data/com.usebottles.bottles.metainfo.xml.in.in ++++ b/data/com.usebottles.bottles.metainfo.xml.in.in +@@ -70,7 +70,7 @@ + @APP_ID@ + + https://usebottles.com +- https://github.com/bottlesdevs/Bottles/issues ++ https://bugz.fedoraproject.org/bottles + https://docs.usebottles.com + https://usebottles.com/funding + https://hosted.weblate.org/engage/bottles +-- +2.51.0 + diff --git a/1003-Display-warning-regarding-issue-tracker.patch b/1003-Display-warning-regarding-issue-tracker.patch new file mode 100644 index 0000000..13451be --- /dev/null +++ b/1003-Display-warning-regarding-issue-tracker.patch @@ -0,0 +1,58 @@ +From 96e3ec53fe9819cf23bc8369e397d12ef1f06b51 Mon Sep 17 00:00:00 2001 +From: Sandro +Date: Sun, 8 Dec 2024 12:21:57 +0100 +Subject: [PATCH 1003/1005] Display warning regarding issue tracker + +Make sure users know where to report bugs regarding the RPM package of +Bottles. Revert upstream's outright denial of usage. +--- + bottles/frontend/windows/window.py | 23 ++++++++++------------- + 1 file changed, 10 insertions(+), 13 deletions(-) + +diff --git a/bottles/frontend/windows/window.py b/bottles/frontend/windows/window.py +index ce76ab42..05c20092 100644 +--- a/bottles/frontend/windows/window.py ++++ b/bottles/frontend/windows/window.py +@@ -116,29 +116,26 @@ class BottlesWindow(Adw.ApplicationWindow): + + def response(dialog, response, *args): + if response == "close": +- quit(1) ++ return + + body = _( +- "Bottles is only supported within a sandboxed environment. Official sources of Bottles are available at" ++ "Bottles developers (upstream) only support Flatpak. Please report any issues with the RPM package in" + ) +- download_url = "usebottles.com/download" ++ bug_url = "bugz.fedoraproject.org/bottles" + + error_dialog = Adw.AlertDialog.new( +- _("Unsupported Environment"), +- f"{body} {download_url}.", ++ _("RPM Package Note"), ++ f"{body} Bugzilla." + ) + +- error_dialog.add_response("close", _("Close")) ++ error_dialog.add_response("close", _("Understood")) + 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 ++ logging.warn(_("Bottles is only supported within a sandboxed environment. Official sources of Bottles are available at:")) ++ logging.warn("https://usebottles.com/download/") ++ logging.warn(_("Please report any issues using the RPM package to:")) ++ logging.warn("https://bugz.fedoraproject.org/bottles") + + # Loading view + self.page_loading = LoadingView() +-- +2.51.0 + diff --git a/1004-Do-not-require-Xdp.patch b/1004-Do-not-require-Xdp.patch new file mode 100644 index 0000000..e0edd1f --- /dev/null +++ b/1004-Do-not-require-Xdp.patch @@ -0,0 +1,187 @@ +From fc49b2eecc0526ac58c029a011b3fb90383f98c7 Mon Sep 17 00:00:00 2001 +From: Sandro +Date: Wed, 8 Jan 2025 09:44:32 +0100 +Subject: [PATCH 1004/1005] Do not require Xdp + +This is used for Flatpak introspection. No need to depend on Xdp in the +RPM package. We will never run in a sandboxed environment. + +Upstream uses this for checking that Bottles is running inside a Flatpak +sandbox with `running_under_sandbox`. This patch removes the check, +allowing us to drop the dependency on Xdp. + +Unfortunately, we will have to review this with every release. +--- + bottles/frontend/main.py | 2 -- + bottles/frontend/views/bottle_details.py | 17 ++---------- + bottles/frontend/views/bottle_preferences.py | 5 +--- + bottles/frontend/views/list.py | 5 +--- + bottles/frontend/views/new_bottle_dialog.py | 4 +-- + bottles/frontend/windows/window.py | 28 +------------------- + 6 files changed, 7 insertions(+), 54 deletions(-) + +diff --git a/bottles/frontend/main.py b/bottles/frontend/main.py +index ea3d7ad1..5a8ecd20 100644 +--- a/bottles/frontend/main.py ++++ b/bottles/frontend/main.py +@@ -34,8 +34,6 @@ from bottles.frontend.params import ( + gi.require_version("Gtk", "4.0") + gi.require_version("Adw", "1") + gi.require_version("GtkSource", "5") +-gi.require_version("Xdp", "1.0") +-# gi.require_version("XdpGtk4", "1.0") + + # ruff: noqa: E402 + from gi.repository import Gio, GLib, GObject, Adw # type: ignore +diff --git a/bottles/frontend/views/bottle_details.py b/bottles/frontend/views/bottle_details.py +index 65667ea9..b4f151ea 100644 +--- a/bottles/frontend/views/bottle_details.py ++++ b/bottles/frontend/views/bottle_details.py +@@ -21,7 +21,7 @@ from datetime import datetime + from gettext import gettext as _ + from typing import List, Optional + +-from gi.repository import Gtk, Gio, Adw, Gdk, GLib, Xdp ++from gi.repository import Gtk, Gio, Adw, Gdk, GLib + + from bottles.backend.managers.backup import BackupManager + from bottles.backend.models.config import BottleConfig +@@ -436,20 +436,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", show_chooser) +- dialog.present() +- else: +- show_chooser() ++ show_chooser() + + def __backup(self, widget, backup_type): + """ +diff --git a/bottles/frontend/views/bottle_preferences.py b/bottles/frontend/views/bottle_preferences.py +index 0d450f29..eb67714a 100644 +--- a/bottles/frontend/views/bottle_preferences.py ++++ b/bottles/frontend/views/bottle_preferences.py +@@ -20,7 +20,7 @@ import os + import re + from gettext import gettext as _ + +-from gi.repository import Gtk, Adw, Xdp ++from gi.repository import Gtk, Adw + + from bottles.backend.globals import ( + gamemode_available, +@@ -139,9 +139,6 @@ class PreferencesView(Adw.PreferencesPage): + self.queue = details.queue + self.details = details + +- if not gamemode_available or 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 flatpak install" +diff --git a/bottles/frontend/views/list.py b/bottles/frontend/views/list.py +index 43ab9c22..a8f6c587 100644 +--- a/bottles/frontend/views/list.py ++++ b/bottles/frontend/views/list.py +@@ -18,7 +18,7 @@ + from datetime import datetime + from gettext import gettext as _ + +-from gi.repository import Gtk, GLib, Adw, Xdp ++from gi.repository import Gtk, GLib, Adw + + from bottles.backend.models.config import BottleConfig + from bottles.backend.models.result import Result +@@ -82,9 +82,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 +diff --git a/bottles/frontend/views/new_bottle_dialog.py b/bottles/frontend/views/new_bottle_dialog.py +index 6774b10b..a34957eb 100644 +--- a/bottles/frontend/views/new_bottle_dialog.py ++++ b/bottles/frontend/views/new_bottle_dialog.py +@@ -21,7 +21,7 @@ from threading import Event + from typing import Any, Optional + + from bottles.backend.state import Task, TaskManager +-from gi.repository import Gtk, Adw, Pango, Gio, Xdp, GObject, GLib ++from gi.repository import Gtk, Adw, Pango, Gio, GObject, GLib + + from bottles.backend.models.config import BottleConfig + from bottles.backend.utils.threading import RunAsync +@@ -86,7 +86,7 @@ class BottlesNewBottleDialog(Adw.Dialog): + super().__init__(**kwargs) + # 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() +diff --git a/bottles/frontend/windows/window.py b/bottles/frontend/windows/window.py +index 05c20092..f9625016 100644 +--- a/bottles/frontend/windows/window.py ++++ b/bottles/frontend/windows/window.py +@@ -21,7 +21,7 @@ import webbrowser + from gettext import gettext as _ + from typing import Optional + +-from gi.repository import Gtk, GLib, Gio, Adw, GObject, Gdk, Xdp ++from gi.repository import Gtk, GLib, Gio, Adw, GObject, Gdk + + from bottles.backend.globals import Paths + from bottles.backend.health import HealthChecker +@@ -111,32 +111,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": +- return +- +- body = _( +- "Bottles developers (upstream) only support Flatpak. Please report any issues with the RPM package in" +- ) +- bug_url = "bugz.fedoraproject.org/bottles" +- +- error_dialog = Adw.AlertDialog.new( +- _("RPM Package Note"), +- f"{body} Bugzilla." +- ) +- +- error_dialog.add_response("close", _("Understood")) +- error_dialog.set_body_use_markup(True) +- error_dialog.connect("response", response) +- error_dialog.present(self) +- logging.warn(_("Bottles is only supported within a sandboxed environment. Official sources of Bottles are available at:")) +- logging.warn("https://usebottles.com/download/") +- logging.warn(_("Please report any issues using the RPM package to:")) +- logging.warn("https://bugz.fedoraproject.org/bottles") +- + # Loading view + self.page_loading = LoadingView() + +-- +2.51.0 + diff --git a/1005-Search-for-system-installed-vkBasalt.patch b/1005-Search-for-system-installed-vkBasalt.patch new file mode 100644 index 0000000..2eea87f --- /dev/null +++ b/1005-Search-for-system-installed-vkBasalt.patch @@ -0,0 +1,30 @@ +From 9874f7e6d9289c1dd398c26eb9f8c585412aacff Mon Sep 17 00:00:00 2001 +From: Sandro +Date: Sat, 8 Nov 2025 12:06:54 +0100 +Subject: [PATCH 1005/1005] Search for system installed vkBasalt + +Also look in /usr/local in case a local install is present. +--- + bottles/backend/globals.py | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/bottles/backend/globals.py b/bottles/backend/globals.py +index 488acea3..d6a6a466 100644 +--- a/bottles/backend/globals.py ++++ b/bottles/backend/globals.py +@@ -52,9 +52,9 @@ class Paths: + @staticmethod + def is_vkbasalt_available(): + vkbasalt_paths = [ +- "/usr/lib/extensions/vulkan/vkBasalt/etc/vkBasalt", +- "/usr/local", +- "/usr/share/vkBasalt", ++ "/usr/lib64/vkbasalt/libvkbasalt.so", ++ "/usr/local/lib64/libvkbasalt.so", ++ "/usr/local/lib64/vkbasalt/libvkbasalt.so", + ] + for path in vkbasalt_paths: + if os.path.exists(path): +-- +2.51.0 + diff --git a/README.packit b/README.packit new file mode 100644 index 0000000..2511bf4 --- /dev/null +++ b/README.packit @@ -0,0 +1,3 @@ +This repository is maintained by packit. +https://packit.dev/ +The file was generated using packit 1.12.0. diff --git a/bottles.spec b/bottles.spec index e409970..5973e13 100644 --- a/bottles.spec +++ b/bottles.spec @@ -1,74 +1,130 @@ -%global uuid pm.mirko.%{name} -%global suf trento - Name: bottles -Version: 2022.4.28 -Release: 1%{?dist} -BuildArch: noarch +Epoch: 2 +Version: 52.0 +Release: %autorelease +Summary: Run Windows in a Bottle -License: GPLv3+ -Summary: Easily manage Wine prefix in a new way -URL: https://github.com/bottlesdevs/Bottles -Source0: %{url}/archive/%{version}-%{suf}.tar.gz#/%{name}-%{version}.tar.gz +%global forgeurl https://github.com/bottlesdevs/Bottles +%global tag %{version} +%forgemeta -BuildRequires: desktop-file-utils -BuildRequires: libappstream-glib -BuildRequires: meson -BuildRequires: python3 -BuildRequires: python3-gobject +# The following two files are licensed as MIT: +# bottles/backend/models/vdict.py +# bottles/backend/utils/vdf.py +License: GPL-3.0-or-later AND MIT +URL: %{forgeurl} +Source0: %{forgesource} +# Make sure bottles dir exists when opening executable directly +# https://bugzilla.redhat.com/show_bug.cgi?id=2249922 +# https://bugzilla.redhat.com/show_bug.cgi?id=2257180 +Patch: 0001-Make-sure-Paths.bottles-exists.patch +# Don't fail on AttributeError +# https://bugzilla.redhat.com/show_bug.cgi?id=2260135 +Patch: 0002-Catch-AttributeError-in-set_manager.patch +# Catch AttributeError when closing window +# https://bugzilla.redhat.com/show_bug.cgi?id=2313567 +Patch: 0003-Catch-AttributeError-when-window-is-closed.patch +# Downstream only patches counteracting upstream's enforcement of Flatpak +Patch: 1001-Revert-meson-Add-check-for-Flatpak.patch +Patch: 1002-Change-issue-URL-to-Bugzilla.patch +Patch: 1003-Display-warning-regarding-issue-tracker.patch +Patch: 1004-Do-not-require-Xdp.patch -BuildRequires: pkgconfig(glib-2.0) -BuildRequires: pkgconfig(gtk+-3.0) -BuildRequires: pkgconfig(libhandy-1) >= 1.5 +BuildArch: noarch + +BuildRequires: desktop-file-utils +BuildRequires: libappstream-glib +BuildRequires: meson +BuildRequires: python3-devel +BuildRequires: pkgconfig(glib-2.0) +BuildRequires: pkgconfig(gtk4) +BuildRequires: pkgconfig(libadwaita-1) >= 1.1.99 +BuildRequires: blueprint-compiler + +Requires: cabextract +Requires: glibc(x86-32) %dnl # https://github.com/bottlesdevs/Bottles/issues/601#issuecomment-936772762 +Requires: gtk4 +Requires: gtksourceview5 +Requires: hicolor-icon-theme +Requires: libadwaita >= 1.1.99 +Requires: p7zip p7zip-plugins %dnl # needed by the dependencies manager +Requires: patool +Requires: xdpyinfo %dnl # needed by the display util +Requires: ImageMagick %dnl # https://bugzilla.redhat.com/show_bug.cgi?id=2227538 + +# Use `generate_requires.sh` to generate Python runtime dependencies +# using upstream's `requirements.txt`, which is included in the tarball, +# but not used by Meson. +Requires: python3dist(pyyaml) +Requires: python3dist(pycurl) +Requires: python3dist(chardet) +Requires: python3dist(requests) +Requires: python3dist(markdown) +Requires: python3dist(icoextract) +Requires: python3dist(patool) +Requires: python3dist(pathvalidate) +Requires: python3dist(fvs) +Requires: python3dist(orjson) +Requires: python3dist(pycairo) +Requires: python3dist(pygobject) +Requires: python3dist(charset-normalizer) +Requires: python3dist(idna) +Requires: python3dist(urllib3) +Requires: python3dist(certifi) +Requires: python3dist(pefile) + +# Requirements not listed in upstream's `requirements.txt` +Requires: python3dist(vkbasalt-cli) + +# Optional dependencies which may be required for running 32-bit bottles. +# We recommend those in order to allow users to opt out. +Recommends: freetype.i686 +Recommends: mesa-dri-drivers.i686 +Recommends: mesa-filesystem.i686 +Recommends: mesa-libEGL.i686 +Recommends: mesa-libgbm.i686 +Recommends: mesa-libglapi.i686 +Recommends: mesa-libGL.i686 +Recommends: mesa-libGLU.i686 +Recommends: mesa-va-drivers.i686 +Recommends: mesa-vulkan-drivers.i686 +Recommends: SDL2.i686 +Recommends: vulkan-loader.i686 + +# Optional dependencies that will provide extra features in Bottles +# when installed. +Recommends: gamemode +Recommends: gamescope +Recommends: mangohud +# Since this pulls in OBS Studio and is not generally required for gaming +# setups, we only suggest. +Suggests: obs-studio-plugin-vkcapture +Recommends: vkBasalt +Recommends: vmtouch -Requires: cabextract -Requires: glibc(x86-32) %dnl # https://github.com/bottlesdevs/Bottles/issues/601#issuecomment-936772762 -Requires: gtk3 -Requires: gtksourceview4 -Requires: hicolor-icon-theme -Requires: libhandy1 -Requires: python3-gobject -Requires: python3-markdown -Requires: python3-patool -Requires: python3-pyyaml %description -Easily manage Wine prefix in a new way! (Run Windows software and games on -Linux). +Bottles lets you run Windows software on Linux, such as applications +and games. It introduces a workflow that helps you organize by +categorizing each software to your liking. Bottles provides several +tools and integrations to help you manage and optimize your +applications. Features: - * Create bottles based on environments (a set of rule and dependencies for - better software compatibility) - * Access to a customizable environment for all your experiments - * Run every executable (.exe/.msi) in your bottles, using the context menu - in your file manager - * Integrated management and storage for executable file arguments - * Support for custom environment variables - * Simplified DLL overrides - * On-the-fly runner change for any Bottle - * Various optimizations for better gaming performance (esync, fsync, dxvk, - cache, shader compiler, offload .. and much more.) - * Tweak different wine prefix settings, without leaving Bottles - * Automated dxvk installation - * Automatic installation and management of Wine and Proton runners - * System for checking runner updates for the bottle and automatic repair in - case of breakage - * Integrated Dependencies installer with compatibility check based on a - community-driver repository - * Detection of installed programs - * Integrated Task manager for wine processes - * Easy access to ProtonDB and WineHQ for support - * Configurations update system across Bottles versions - * Backup bottles as configuration file or full archive - * Import backup archive - * Importer from Bottles v1 (and other wineprefix manager) - * Bottles versioning (experimental) - * .. and much more that you can find by installing Bottles! - +- Use pre-configured environments as a base +- Change runners for any bottle +- Various optimizations and options for gaming +- Repair in case software or bottle is broken +- Install various known dependencies +- Integrated task manager to manage and monitor processes +- Backup and restore %prep -%autosetup -n Bottles-%{version}-%{suf} -p1 +%forgeautosetup -p1 + +# F40 only has meson 1.4.1. Lower requirement. +sed -r -i 's/(meson_version.*)1\.[0-9]\.[0-9]/\11.4.1/' meson.build %build @@ -87,7 +143,7 @@ desktop-file-validate %{buildroot}%{_datadir}/applications/*.desktop %files -f %{name}.lang -%license LICENSE +%license COPYING.md %doc README.md %{_bindir}/%{name} %{_bindir}/%{name}-cli @@ -99,192 +155,4 @@ desktop-file-validate %{buildroot}%{_datadir}/applications/*.desktop %changelog -* Wed Apr 27 2022 Artem Polishchuk - 2022.4.28-1 -- chore(update): 2022.4.28 - -* Wed Apr 13 2022 Artem Polishchuk - 2022.4.14-1 -- chore(update): 2022.4.14 - -* Mon Mar 28 2022 Artem Polishchuk - 2022.3.28-1 -- chore(update): 2022.3.28 - -* Mon Mar 14 2022 Artem Polishchuk - 2022.3.14-1 -- chore(update): 2022.3.14 - -* Sat Mar 12 2022 Artem Polishchuk - 2022.2.28-2 -- build: Add gtksourceview4 dep - -* Sun Feb 27 2022 Artem Polishchuk - 2022.2.28-1 -- chore(update): 2022.2.28 - -* Mon Feb 14 2022 Artem Polishchuk - 2022.2.14-1 -- chore(update): 2022.2.14 - -* Fri Jan 28 2022 Artem Polishchuk - 2022.1.28-1 -- chore(update): 2022.1.28 - -* Mon Jan 24 2022 Artem Polishchuk - 2022.1.14-3 -- build(add dep): cabextract - -* Wed Jan 19 2022 Fedora Release Engineering - 2022.1.14-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild - -* Thu Jan 13 2022 Artem Polishchuk - 2022.1.14-1 -- chore(update): 2022.1.14 - -* Tue Dec 28 2021 Artem Polishchuk - 2021.12.28-1 -- chore(update): 2021.12.28 - -* Tue Dec 14 2021 Artem Polishchuk - 2021.12.14-1 -- chore(update): 2021.12.14 - -* Sun Nov 28 2021 Artem Polishchuk - 2021.11.28-1 -- chore(update): 2021.11.28 - -* Sat Nov 13 2021 Artem Polishchuk - 2021.11.14-1 -- chore(update): 2021.11.14 - -* Wed Oct 27 2021 Artem Polishchuk - 2021.10.28-1 -- chore(update): 2021.10.28 - -* Wed Oct 13 2021 Artem Polishchuk - 2021.10.14-1 -- chore(update): 2021.10.14 - -* Thu Oct 07 2021 Artem Polishchuk - 2021.9.28-3 -- fix: Multilib dep - -* Wed Oct 06 2021 Artem Polishchuk - 2021.9.28-2 -- build(add dep): glibc.i686 - See: https://github.com/bottlesdevs/Bottles/issues/601#issuecomment-936772762 - -* Mon Sep 27 2021 Artem Polishchuk - 2021.9.28-1 -- build(update): 2021.9.28 - -* Tue Sep 14 2021 Artem Polishchuk - 2021.9.14-1 -- build(update): 2021.9.14 - -* Sat Aug 28 2021 Artem Polishchuk - 2021.8.28-1 -- build(update): 2021.8.28 - -* Sun Aug 15 2021 Artem Polishchuk - 2021.8.14-2 -- fix: Add new dep python3-patool - -* Sun Aug 15 2021 Artem Polishchuk - 2021.8.14-1 -- build(update): 2021.8.14 - -* Wed Jul 28 2021 Artem Polishchuk - 2021.7.28-1 -- build(update): 2021.7.28 - -* Wed Jul 21 2021 Fedora Release Engineering - 2021.7.14-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild - -* Wed Jul 14 2021 Artem Polishchuk - 2021.7.14-1 -- build(update): 2021.7.14 - -* Wed Jul 14 2021 Artem Polishchuk - 2021.7.3-2 -- build(add dep): python3-pyyaml - -* Sun Jul 04 2021 Artem Polishchuk - 2021.7.3-1 -- build(update): 2021.7.3 - -* Sat Jun 19 2021 Artem Polishchuk - 3.1.15-1 -- build(update): 3.1.15 - -* Fri Jun 11 2021 Artem Polishchuk - 3.1.14-1 -- build(update): 3.1.14 - -* Wed Jun 09 2021 Artem Polishchuk - 3.1.13-1 -- build(update): 3.1.13 - -* Tue May 25 2021 Artem Polishchuk - 3.1.12-1 -- build(update): 3.1.12 - -* Sat May 22 2021 Artem Polishchuk - 3.1.11-1 -- build(update): 3.1.11 - -* Sat May 22 2021 Artem Polishchuk - 3.1.10-1 -- build(update): 3.1.10 - -* Thu May 20 2021 Artem Polishchuk - 3.1.9-1 -- build(update): 3.1.9 - -* Wed May 05 2021 Artem Polishchuk - 3.1.8-1 -- build(update): 3.1.8 - -* Sun May 02 2021 Artem Polishchuk - 3.1.7-1 -- build(update): 3.1.7 - -* Mon Apr 26 2021 Artem Polishchuk - 3.1.6-1 -- build(update): 3.1.6 - -* Tue Apr 20 2021 Artem Polishchuk - 3.1.5-1 -- build(update): 3.1.5 - -* Thu Apr 08 2021 Artem Polishchuk - 3.1.4-1 -- build(update): 3.1.4 - -* Wed Mar 31 2021 Artem Polishchuk - 3.1.3-1 -- build(update): 3.1.3 - -* Fri Mar 26 2021 Artem Polishchuk - 3.1.2-1 -- build(update): 3.1.2 - -* Sun Mar 21 2021 Artem Polishchuk - 3.1.1-1 -- build(update): 3.1.1 - -* Fri Mar 19 2021 Artem Polishchuk - 3.1.0-1 -- build(update): 3.1.0 - -* Sat Mar 13 2021 Artem Polishchuk - 3.0.9-1 -- build(update): 3.0.9 - -* Mon Mar 08 2021 Artem Polishchuk - 3.0.8-1 -- build(update): 3.0.8 - -* Sun Mar 07 2021 Artem Polishchuk - 3.0.6-1 -- build(update): 3.0.6 - -* Wed Mar 03 2021 Artem Polishchuk - 3.0.5-1 -- build(update): 3.0.5 - -* Fri Feb 26 2021 Artem Polishchuk - 3.0.2-1 -- build(update): 3.0.2 - -* Fri Feb 26 2021 Artem Polishchuk - 3.0.1.1-2 -- build: Add libhandy1 dep - -* Fri Feb 26 2021 Artem Polishchuk - 3.0.1.1-1 -- build(update): 3.0.1.1 - -* Mon Feb 22 2021 Artem Polishchuk - 2.1.2-1 -- build(update): 2.1.2 - -* Fri Feb 19 2021 Artem Polishchuk - 2.1.1-1 -- build(update): 2.1.1 - -* Thu Feb 18 2021 Artem Polishchuk - 2.1.0.7-1 -- build(update): 2.1.0.7 - -* Thu Feb 04 2021 Artem Polishchuk - 2.1.0.6-1 -- build(update): 2.1.0.6 - -* Tue Jan 26 2021 Artem Polishchuk - 2.1.0.5-1 -- build(update): 2.1.0.5 - -* Wed Jan 20 2021 Artem Polishchuk - 2.1.0.4-1 -- build(update): 2.1.0.4 - -* Mon Jan 18 2021 Artem Polishchuk - 2.1.0.2-1 -- build(update): 2.1.0.2 - -* Tue Jan 12 2021 Artem Polishchuk - 2.1.0-1 -- build(update): 2.1.0 - -* Sun Jan 10 2021 Artem Polishchuk - 2.0.9.9-1 -- build(update): 2.0.9.9 - -* Sat Jan 9 2021 Artem Polishchuk - 2.0.9.8-1 -- build(update): 2.0.9.8 - -* Thu Jan 7 2021 Artem Polishchuk - 2.0.9.7-1 -- Initial package +%autochangelog diff --git a/changelog b/changelog new file mode 100644 index 0000000..155c514 --- /dev/null +++ b/changelog @@ -0,0 +1,198 @@ +* Sun May 29 2022 Artem Polishchuk - 2022.5.28-1 +- chore(update): 2022.5.28 + +* Sat May 14 2022 Artem Polishchuk - 2022.5.14-1 +- chore(update): 2022.5.14 + +* Mon May 02 2022 Artem Polishchuk - 2022.5.2-1 +- chore(update): 2022.5.2 + +* Wed Apr 27 2022 Artem Polishchuk - 2022.4.28-1 +- chore(update): 2022.4.28 + +* Wed Apr 13 2022 Artem Polishchuk - 2022.4.14-1 +- chore(update): 2022.4.14 + +* Mon Mar 28 2022 Artem Polishchuk - 2022.3.28-1 +- chore(update): 2022.3.28 + +* Mon Mar 14 2022 Artem Polishchuk - 2022.3.14-1 +- chore(update): 2022.3.14 + +* Sat Mar 12 2022 Artem Polishchuk - 2022.2.28-2 +- build: Add gtksourceview4 dep + +* Sun Feb 27 2022 Artem Polishchuk - 2022.2.28-1 +- chore(update): 2022.2.28 + +* Mon Feb 14 2022 Artem Polishchuk - 2022.2.14-1 +- chore(update): 2022.2.14 + +* Fri Jan 28 2022 Artem Polishchuk - 2022.1.28-1 +- chore(update): 2022.1.28 + +* Mon Jan 24 2022 Artem Polishchuk - 2022.1.14-3 +- build(add dep): cabextract + +* Wed Jan 19 2022 Fedora Release Engineering - 2022.1.14-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild + +* Thu Jan 13 2022 Artem Polishchuk - 2022.1.14-1 +- chore(update): 2022.1.14 + +* Tue Dec 28 2021 Artem Polishchuk - 2021.12.28-1 +- chore(update): 2021.12.28 + +* Tue Dec 14 2021 Artem Polishchuk - 2021.12.14-1 +- chore(update): 2021.12.14 + +* Sun Nov 28 2021 Artem Polishchuk - 2021.11.28-1 +- chore(update): 2021.11.28 + +* Sat Nov 13 2021 Artem Polishchuk - 2021.11.14-1 +- chore(update): 2021.11.14 + +* Wed Oct 27 2021 Artem Polishchuk - 2021.10.28-1 +- chore(update): 2021.10.28 + +* Wed Oct 13 2021 Artem Polishchuk - 2021.10.14-1 +- chore(update): 2021.10.14 + +* Thu Oct 07 2021 Artem Polishchuk - 2021.9.28-3 +- fix: Multilib dep + +* Wed Oct 06 2021 Artem Polishchuk - 2021.9.28-2 +- build(add dep): glibc.i686 + See: https://github.com/bottlesdevs/Bottles/issues/601#issuecomment-936772762 + +* Mon Sep 27 2021 Artem Polishchuk - 2021.9.28-1 +- build(update): 2021.9.28 + +* Tue Sep 14 2021 Artem Polishchuk - 2021.9.14-1 +- build(update): 2021.9.14 + +* Sat Aug 28 2021 Artem Polishchuk - 2021.8.28-1 +- build(update): 2021.8.28 + +* Sun Aug 15 2021 Artem Polishchuk - 2021.8.14-2 +- fix: Add new dep python3-patool + +* Sun Aug 15 2021 Artem Polishchuk - 2021.8.14-1 +- build(update): 2021.8.14 + +* Wed Jul 28 2021 Artem Polishchuk - 2021.7.28-1 +- build(update): 2021.7.28 + +* Wed Jul 21 2021 Fedora Release Engineering - 2021.7.14-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild + +* Wed Jul 14 2021 Artem Polishchuk - 2021.7.14-1 +- build(update): 2021.7.14 + +* Wed Jul 14 2021 Artem Polishchuk - 2021.7.3-2 +- build(add dep): python3-pyyaml + +* Sun Jul 04 2021 Artem Polishchuk - 2021.7.3-1 +- build(update): 2021.7.3 + +* Sat Jun 19 2021 Artem Polishchuk - 3.1.15-1 +- build(update): 3.1.15 + +* Fri Jun 11 2021 Artem Polishchuk - 3.1.14-1 +- build(update): 3.1.14 + +* Wed Jun 09 2021 Artem Polishchuk - 3.1.13-1 +- build(update): 3.1.13 + +* Tue May 25 2021 Artem Polishchuk - 3.1.12-1 +- build(update): 3.1.12 + +* Sat May 22 2021 Artem Polishchuk - 3.1.11-1 +- build(update): 3.1.11 + +* Sat May 22 2021 Artem Polishchuk - 3.1.10-1 +- build(update): 3.1.10 + +* Thu May 20 2021 Artem Polishchuk - 3.1.9-1 +- build(update): 3.1.9 + +* Wed May 05 2021 Artem Polishchuk - 3.1.8-1 +- build(update): 3.1.8 + +* Sun May 02 2021 Artem Polishchuk - 3.1.7-1 +- build(update): 3.1.7 + +* Mon Apr 26 2021 Artem Polishchuk - 3.1.6-1 +- build(update): 3.1.6 + +* Tue Apr 20 2021 Artem Polishchuk - 3.1.5-1 +- build(update): 3.1.5 + +* Thu Apr 08 2021 Artem Polishchuk - 3.1.4-1 +- build(update): 3.1.4 + +* Wed Mar 31 2021 Artem Polishchuk - 3.1.3-1 +- build(update): 3.1.3 + +* Fri Mar 26 2021 Artem Polishchuk - 3.1.2-1 +- build(update): 3.1.2 + +* Sun Mar 21 2021 Artem Polishchuk - 3.1.1-1 +- build(update): 3.1.1 + +* Fri Mar 19 2021 Artem Polishchuk - 3.1.0-1 +- build(update): 3.1.0 + +* Sat Mar 13 2021 Artem Polishchuk - 3.0.9-1 +- build(update): 3.0.9 + +* Mon Mar 08 2021 Artem Polishchuk - 3.0.8-1 +- build(update): 3.0.8 + +* Sun Mar 07 2021 Artem Polishchuk - 3.0.6-1 +- build(update): 3.0.6 + +* Wed Mar 03 2021 Artem Polishchuk - 3.0.5-1 +- build(update): 3.0.5 + +* Fri Feb 26 2021 Artem Polishchuk - 3.0.2-1 +- build(update): 3.0.2 + +* Fri Feb 26 2021 Artem Polishchuk - 3.0.1.1-2 +- build: Add libhandy1 dep + +* Fri Feb 26 2021 Artem Polishchuk - 3.0.1.1-1 +- build(update): 3.0.1.1 + +* Mon Feb 22 2021 Artem Polishchuk - 2.1.2-1 +- build(update): 2.1.2 + +* Fri Feb 19 2021 Artem Polishchuk - 2.1.1-1 +- build(update): 2.1.1 + +* Thu Feb 18 2021 Artem Polishchuk - 2.1.0.7-1 +- build(update): 2.1.0.7 + +* Thu Feb 04 2021 Artem Polishchuk - 2.1.0.6-1 +- build(update): 2.1.0.6 + +* Tue Jan 26 2021 Artem Polishchuk - 2.1.0.5-1 +- build(update): 2.1.0.5 + +* Wed Jan 20 2021 Artem Polishchuk - 2.1.0.4-1 +- build(update): 2.1.0.4 + +* Mon Jan 18 2021 Artem Polishchuk - 2.1.0.2-1 +- build(update): 2.1.0.2 + +* Tue Jan 12 2021 Artem Polishchuk - 2.1.0-1 +- build(update): 2.1.0 + +* Sun Jan 10 2021 Artem Polishchuk - 2.0.9.9-1 +- build(update): 2.0.9.9 + +* Sat Jan 9 2021 Artem Polishchuk - 2.0.9.8-1 +- build(update): 2.0.9.8 + +* Thu Jan 7 2021 Artem Polishchuk - 2.0.9.7-1 +- Initial package diff --git a/generate_requires.sh b/generate_requires.sh new file mode 100755 index 0000000..99fe46e --- /dev/null +++ b/generate_requires.sh @@ -0,0 +1,28 @@ +#!/bin/bash + +SPEC_FILE="bottles.spec" +REQUIREMENTS_FILE="requirements.txt" +REQUIREMENTS_SPEC="requires.txt" +# Remove file(s) from previous run +[ -f ${REQUIREMENTS_SPEC} ] && rm -vf ${REQUIREMENTS_SPEC} +[ -f ${REQUIREMENTS_FILE} ] && rm -vf ${REQUIREMENTS_FILE} +# Make sure sources are present +spectool -gSf ${SPEC_FILE} 2>/dev/null +TARBALL="$(rpmspec --parse bottles.spec 2>/dev/null | grep Source0 | sed -r 's/^.*(Bottles.*)/\1/')" +TAR_REQ_FILE="$(tar tzf ${TARBALL} | grep ${REQUIREMENTS_FILE})" +tar -x ${TAR_REQ_FILE} --strip-components=1 -zf ${TARBALL} + +# Remove version pinning from listed dependencies +# Require `requests`. The `use_chardet_on_py3` extra is not packaged in +# Fedora, but we have the required version of `chardet` present. +# Remove `wheel` from list - not a runtime requirement. +sed -r -i \ + -e 's/(^.*)==.*$/\1/g' \ + -e 's/(^requests)\[.*\]/\1/' \ + -e '/wheel/d' \ + requirements.txt + +# Transform requirements for inclusion in spec file +for REQ in $(grep -v '^#' ${REQUIREMENTS_FILE}); do + echo "Requires: python3dist(${REQ@L})" >> ${REQUIREMENTS_SPEC} +done diff --git a/sources b/sources index 025563b..3837af0 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (bottles-2022.4.28.tar.gz) = 739cb1a6909c703293daf0178ac72a49c6e20275408d310715991097b00081c086e0c3f9ec03275da50bd819c9e8adda04b47cec43703e98e1c64c02434c76fa +SHA512 (Bottles-52.0.tar.gz) = d133cf07a224c7f1848786f7b6f90e9e834fec7e855e5c48b4413657a7566f148f8ceece958a2cce575ae5ba66dea0963c19a79a893900b88c0c6af6c8bb1c41