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 0ffe0dd..c1a85b6 100644 --- a/.gitignore +++ b/.gitignore @@ -1,60 +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-2022.5.2.tar.gz -/bottles-2022.5.14.tar.gz -/bottles-2022.5.28-trento-3.tar.gz -/bottles-2022.6.14-brescia-1.tar.gz -/bottles-2022.7.14-brescia-3.tar.gz -/Bottles-51.6.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/README.packit b/README.packit new file mode 100644 index 0000000..f592284 --- /dev/null +++ b/README.packit @@ -0,0 +1,3 @@ +This repository is maintained by packit. +https://packit.dev/ +The file was generated using packit 0.91.0.post1.dev4+ge6fd4a25. diff --git a/bottles.spec b/bottles.spec index 6d29669..63c38f3 100644 --- a/bottles.spec +++ b/bottles.spec @@ -1,91 +1,93 @@ -%global uuid pm.mirko.%{name} -%global gh_name Bottles - -%global forgeurl https://github.com/bottlesdevs/%{gh_name} -%global tag 51.6 +%global forgeurl https://github.com/bottlesdevs/Bottles Name: bottles Epoch: 1 -Version: %{tag} +Version: 51.11 Release: %autorelease -BuildArch: noarch +Summary: Run Windows in a Bottle +%global tag %{version} %forgemeta -License: GPL-3.0-or-later -Summary: Easily manage Wine prefix in a new way +# 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 +Patch: ensure_bottles_dir_exists.patch +# Don't fail on AttributeError +Patch: catch_exception_in_set_manager.patch -BuildRequires: desktop-file-utils -BuildRequires: libappstream-glib -BuildRequires: meson -BuildRequires: python3 +# blueprint-compiler does not work on s390x: +# https://gitlab.gnome.org/jwestman/blueprint-compiler/-/issues/96 +ExcludeArch: s390x +BuildArch: noarch -BuildRequires: pkgconfig(glib-2.0) -BuildRequires: pkgconfig(gtk4) -BuildRequires: pkgconfig(libadwaita-1) >= 1.1.99 +BuildRequires: desktop-file-utils +BuildRequires: libappstream-glib +BuildRequires: meson +BuildRequires: python3 +BuildRequires: pkgconfig(glib-2.0) +BuildRequires: pkgconfig(gtk4) +BuildRequires: pkgconfig(libadwaita-1) >= 1.1.99 +BuildRequires: blueprint-compiler -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 -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: python3-gobject -Requires: python3-icoextract %dnl # icons support -Requires: python3-markdown -Requires: python3-patool -Requires: python3-pefile %dnl # icons support -Requires: python3-pyyaml -Requires: python3-requests %dnl # needed by the download manager -Requires: python3-urllib3 %dnl # needed by the download manager -Requires: xdpyinfo %dnl # needed by the display util -Requires: python3-pathvalidate -Requires: python3-fvs -Requires: python3-vkbasalt-cli +# 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) %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 %{gh_name}-%{version} +%forgeautosetup -p1 %build diff --git a/catch_exception_in_set_manager.patch b/catch_exception_in_set_manager.patch new file mode 100644 index 0000000..08c1794 --- /dev/null +++ b/catch_exception_in_set_manager.patch @@ -0,0 +1,28 @@ +commit 3e1db3c75fee5eedb2190e7dba71239e923affb7 +Author: Sandro +Date: Mon Mar 4 21:45:51 2024 +0100 + + Catch AttributeError in set_manager() + + Return empty list if AttributeError is raised. + +diff --git a/bottles/frontend/windows/main_window.py b/bottles/frontend/windows/main_window.py +index 5fb9a15c..cd26408b 100644 +--- a/bottles/frontend/windows/main_window.py ++++ b/bottles/frontend/windows/main_window.py +@@ -178,9 +178,12 @@ class MainWindow(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() + diff --git a/ensure_bottles_dir_exists.patch b/ensure_bottles_dir_exists.patch new file mode 100644 index 0000000..12ac255 --- /dev/null +++ b/ensure_bottles_dir_exists.patch @@ -0,0 +1,29 @@ +commit 7eed7bbfa5d1da924b4c4e0659f0bf86b0fd7d7b +Author: Sandro +Date: Mon Mar 4 20:28:49 2024 +0100 + + 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. + +diff --git a/bottles/backend/managers/manager.py b/bottles/backend/managers/manager.py +index 01b0039e..9d8ef000 100644 +--- a/bottles/backend/managers/manager.py ++++ b/bottles/backend/managers/manager.py +@@ -811,7 +811,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 = {} 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 a7c74ce..8baf231 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (Bottles-51.6.tar.gz) = 0190744b3a99d791ffbd1b7a104565c2fd1f5aa110afe329897d4b29f0f5d669a6ec145468fea85e88b2f20bb2f7f075522760fd7ced94eea1afc0667780b288 +SHA512 (Bottles-51.11.tar.gz) = 42c503a4910a8e6c408caecd723edf1405aa034558d61313937a69c7d5ffb20ba4675fc9022775491cbbe6ba4a35ffac508b4721f9c971c57cbcb888345d546b