From 8deb30e0efb2275d57412c0832d17e73d288da61 Mon Sep 17 00:00:00 2001 From: tobtoht Date: Sat, 6 May 2023 13:48:11 +0200 Subject: [PATCH] Bootstrappable Flatpak --- .github/workflows/guix.yml | 2 + contrib/depends/packages/qt.mk | 2 +- ...fix-static-fontconfig-static-linking.patch | 72 +++++++++++ contrib/flatpak/.flatpakref | 8 ++ contrib/flatpak/.flatpakrepo | 8 ++ contrib/flatpak/flatpak.scm | 118 ++++++++++++++++++ contrib/flatpak/make_flatpak.sh | 75 +++++++++++ contrib/flatpak/make_runtime.sh | 14 +++ contrib/flatpak/metadata | 11 ++ .../128x128/org.featherwallet.Feather.png | Bin 0 -> 9650 bytes .../256x256/org.featherwallet.Feather.png | Bin 0 -> 27299 bytes contrib/flatpak/share/app-info/xmls/.gitkeep | 0 .../org.featherwallet.Feather.desktop | 11 ++ .../apps/org.featherwallet.Feather.png | Bin 0 -> 9650 bytes .../apps/org.featherwallet.Feather.png | Bin 0 -> 27299 bytes .../org.featherwallet.Feather.metainfo.xml | 48 +++++++ contrib/guix/guix-build | 27 ++++ contrib/guix/libexec/build.sh | 60 +++++---- monero | 2 +- 19 files changed, 432 insertions(+), 26 deletions(-) create mode 100644 contrib/depends/patches/qt/fix-static-fontconfig-static-linking.patch create mode 100644 contrib/flatpak/.flatpakref create mode 100644 contrib/flatpak/.flatpakrepo create mode 100644 contrib/flatpak/flatpak.scm create mode 100644 contrib/flatpak/make_flatpak.sh create mode 100644 contrib/flatpak/make_runtime.sh create mode 100644 contrib/flatpak/metadata create mode 100644 contrib/flatpak/share/app-info/icons/flatpak/128x128/org.featherwallet.Feather.png create mode 100644 contrib/flatpak/share/app-info/icons/flatpak/256x256/org.featherwallet.Feather.png create mode 100644 contrib/flatpak/share/app-info/xmls/.gitkeep create mode 100644 contrib/flatpak/share/applications/org.featherwallet.Feather.desktop create mode 100644 contrib/flatpak/share/icons/hicolor/128x128/apps/org.featherwallet.Feather.png create mode 100644 contrib/flatpak/share/icons/hicolor/256x256/apps/org.featherwallet.Feather.png create mode 100644 contrib/flatpak/share/metainfo/org.featherwallet.Feather.metainfo.xml diff --git a/.github/workflows/guix.yml b/.github/workflows/guix.yml index 4d6962ab..1e2e2024 100644 --- a/.github/workflows/guix.yml +++ b/.github/workflows/guix.yml @@ -86,6 +86,8 @@ jobs: host: "x86_64-linux-gnu" - name: "x86_64-linux-gnu.no-tor-bundle" host: "x86_64-linux-gnu.no-tor-bundle" + - name: "x86_64-linux-gnu.flatpak" + host: "x86_64-linux-gnu.flatpak" - name: "aarch64-linux-gnu" host: "aarch64-linux-gnu" - name: "arm-linux-gnueabihf" diff --git a/contrib/depends/packages/qt.mk b/contrib/depends/packages/qt.mk index 42255551..b2d55041 100644 --- a/contrib/depends/packages/qt.mk +++ b/contrib/depends/packages/qt.mk @@ -30,6 +30,7 @@ $(package)_patches += windows_func_fix.patch $(package)_patches += WindowsToolchain.cmake $(package)_patches += revert_f99ee441.patch $(package)_patches += CVE-2023-34410-qtbase-6.5.diff +#$(package)_patches += fix-static-fontconfig-static-linking.patch $(package)_qttools_file_name=qttools-$($(package)_suffix) $(package)_qttools_sha256_hash=5744df9e84b2a86f7f932ffc00341c7d7209e741fd1c0679a32b855fcceb2329 @@ -72,7 +73,6 @@ $(package)_config_opts += -no-linuxfb #$(package)_config_opts += -no-libproxy # Needed $(package)_config_opts += -no-libudev $(package)_config_opts += -no-mtdev -$(package)_config_opts += -no-openssl # Needed $(package)_config_opts += -openssl-linked $(package)_config_opts += -no-openvg $(package)_config_opts += -no-reduce-relocations diff --git a/contrib/depends/patches/qt/fix-static-fontconfig-static-linking.patch b/contrib/depends/patches/qt/fix-static-fontconfig-static-linking.patch new file mode 100644 index 00000000..f84b1fd6 --- /dev/null +++ b/contrib/depends/patches/qt/fix-static-fontconfig-static-linking.patch @@ -0,0 +1,72 @@ +diff --git a/cmake/FindExpat.cmake b/cmake/FindExpat.cmake +new file mode 100644 +index 0000000000..cdba26e72e +--- /dev/null ++++ b/cmake/FindExpat.cmake +@@ -0,0 +1,9 @@ ++set(Expat_FOUND 0) ++ ++find_package(PkgConfig QUIET) ++ ++pkg_check_modules(EXPAT expat IMPORTED_TARGET) ++ ++if(TARGET PkgConfig::EXPAT) ++ set(Expat_FOUND 1) ++endif() +diff --git a/src/gui/CMakeLists.txt b/src/gui/CMakeLists.txt +index b29be1a768..7446d7b1ae 100644 +--- a/src/gui/CMakeLists.txt ++++ b/src/gui/CMakeLists.txt +@@ -673,6 +673,14 @@ qt_internal_extend_target(Gui CONDITION QT_FEATURE_cssparser + text/qcssparser.cpp text/qcssparser_p.h + ) + ++qt_internal_extend_target(Gui CONDITION QT_FEATURE_fontconfig AND QT_FEATURE_freetype AND UNIX AND NOT APPLE ++ SOURCES ++ text/unix/qfontconfigdatabase.cpp text/unix/qfontconfigdatabase_p.h ++ text/unix/qfontenginemultifontconfig.cpp text/unix/qfontenginemultifontconfig_p.h ++ LIBRARIES ++ Fontconfig::Fontconfig ++) ++ + qt_internal_extend_target(Gui CONDITION QT_FEATURE_freetype + SOURCES + text/freetype/qfontengine_ft.cpp text/freetype/qfontengine_ft_p.h +@@ -681,17 +689,14 @@ qt_internal_extend_target(Gui CONDITION QT_FEATURE_freetype + WrapFreetype::WrapFreetype + ) + +-qt_internal_extend_target(Gui CONDITION UNIX AND NOT APPLE +- SOURCES +- text/unix/qgenericunixfontdatabase_p.h ++qt_internal_extend_target(Gui CONDITION QT_FEATURE_fontconfig AND UNIX AND NOT APPLE ++ LIBRARIES ++ PkgConfig::EXPAT + ) + +-qt_internal_extend_target(Gui CONDITION QT_FEATURE_fontconfig AND QT_FEATURE_freetype AND UNIX AND NOT APPLE ++qt_internal_extend_target(Gui CONDITION UNIX AND NOT APPLE + SOURCES +- text/unix/qfontconfigdatabase.cpp text/unix/qfontconfigdatabase_p.h +- text/unix/qfontenginemultifontconfig.cpp text/unix/qfontenginemultifontconfig_p.h +- LIBRARIES +- Fontconfig::Fontconfig ++ text/unix/qgenericunixfontdatabase_p.h + ) + + qt_internal_extend_target(Gui CONDITION APPLE AND NOT MACOS +diff --git a/src/gui/configure.cmake b/src/gui/configure.cmake +index d8319c120b..1ff24eebaf 100644 +--- a/src/gui/configure.cmake ++++ b/src/gui/configure.cmake +@@ -43,6 +43,7 @@ if(QT_FEATURE_system_zlib) + qt_add_qmake_lib_dependency(freetype zlib) + endif() + qt_find_package(Fontconfig PROVIDED_TARGETS Fontconfig::Fontconfig MODULE_NAME gui QMAKE_LIB fontconfig) ++qt_find_package(Expat PROVIDED_TARGETS PkgConfig::EXPAT MODULE_NAME gui QMAKE_LIB expat) + qt_add_qmake_lib_dependency(fontconfig freetype) + qt_find_package(gbm PROVIDED_TARGETS gbm::gbm MODULE_NAME gui QMAKE_LIB gbm) + qt_find_package(WrapSystemHarfbuzz 2.6.0 PROVIDED_TARGETS WrapSystemHarfbuzz::WrapSystemHarfbuzz MODULE_NAME gui QMAKE_LIB harfbuzz) +-- +2.41.0 + diff --git a/contrib/flatpak/.flatpakref b/contrib/flatpak/.flatpakref new file mode 100644 index 00000000..3085b3d6 --- /dev/null +++ b/contrib/flatpak/.flatpakref @@ -0,0 +1,8 @@ +[Flatpak Ref] +Name=org.featherwallet.Feather +Branch=stable +Title=Feather Wallet +Url=https://featherwalet.org/flatpak/ +RuntimeRepo=https://featherwalet.org/flatpak/org.featherwallet.Empty +IsRuntime=false +GPGKey=mQINBF/HogkBEAChsjCJUsZhDxOx5FrnRA3X5/mJd2xdKskLSPFtnYiQUtKvpRW6i/RVNMkTwFovzbXB6ucKJtY+OoEMu7xDhIkDWp//UlfHuP9AWAvqbhq6V5xVrZ419oQ7JNN4gwAI8+ZjcNq3IVFQQ9mZ3py9t1IUdgWtWM3P/SD7vWiPIjG0D3Bt3Ptl/mZjIFZZWUtFBItJLkiTpW0Ue4t98XMP6mvQiQ/LhP82OtSyCZ6agj4Wa3ve5KjApdEqamBGytx2kmN+AQFgMt66yOvr+97zzuEzI6mlWYORzOc1CFMsmPd6bu/dtQ4Z96T8PNI6i1Lv5VqvqC7RBErvD7hO36JZb8j+PnbE1YADTKrw0HmgpI6d3RLyVop3n6ZQri0+nZ+TH0JG74MiihyZIz826zJO5OIwltexRcW0ZiRSpRCxZekU894lEs5QSxacRLeqM8ZVawB+9brqbeU3IJxmOCZgXLkkns0dBiSWGxtt+Tji+KXjogNfghmAdVw9NQoBS+W5+pBtKEORD0YIGiUou9a7ukyMe2uvsl7rT+7BCOdvYtMBRbsfV5NPs644wfJNIGa7OOjkWhuGwy6BVKTohDhJdKeZUpiTPKLV7ZLHjT4pkjuJgGQB7c+wv7QYeUpwARwQNi8ZHuij2loG3Fb4l+3ejkcvivw0DLnDDhvUY57ezq53JwARAQABtCVGZWF0aGVyV2FsbGV0IDxkZXZAZmVhdGhlcndhbGxldC5vcmc+iQJOBBMBCgA4FiEEgYXhWKMzMMf9YbwNH3bhVc77pxwFAl/HogkCGwMFCwkIBwMFFQoJCAsFFgIDAQACHgECF4AACgkQH3bhVc77pxzAxw/9GYXGm71lUlZl2yfBPmo91euSc3w/irEC88X1kFBsdKwL19B8HUaksCOQJRG8fJQmKvJmFnRZg3NK/GLIHam+1WVObFZc1MTvy2ERzX5ILr9sb7FptB0Wr9gk0y0Nv032ZKci3wn1j2nA87o40uopDoQTaadDTKXas3M2+y6zM4dCmCaV6ylJromTzIaL2Q+tWSHDD8EDF2GbnfSeeEV6TV4xj3vqfT5P34rK4vuVNxEy/YvRQJVRYntveNMJu9C4KJvIpo8onauUHEgBu4m+qfFpixDLwQzqbJiJQaCUrwJ3liKMolBKiPqjGNl5JRRDy+YR1Dgsj6CRobWg1fDNnrGXUwDLaBwxzVdCB0VSmcjXpt+FKTxw1mbY+6i6trUfJSjaaawXJbktOkO6sl0bVX83oQxEgod1aHwuo+eFCAW5zF0r+8R9Lk97Y5jkLWRKjXMFnMIyHaRhPdc24fOfojIQrXzQBMEOlDhbWVd5vdOALhqvSOGYvjGjxBd9TE0pGzayNfPaee6kFEbxO3wZgF/QLPABl8i9b6hHJewpY5W9mM9/yP4lHL2TRcEMzk6I7XxPQUGEb3fzTAEHRM+My4SLwaUBIFvML8+hRhbfNnLZPd0xDAmvH6wToL3qgK/xSl9SYwuZkzaynblmyXE4+dCFp+T2XTamFIbphOl8Yt+5Ag0EX8eiCQEQAKv0XnHtGhWTaq/sQ4lulYWNRjBsFQRMqwSFIosOPfzWwATQeHxxIgRlWkc25w8W0O//t8x0UcNA5rU4R+C7kVrchVSYYYl9PY0vBhKP3efVtPgntl/VgGH8LAdShHEt3H8ZDMFjqT6gx4xnpgt3C5OdGOA3bIWuvSZ1P7qpSYiFZakrDfPeCdI/ifucipd+EnZhFv7ivnaoIGs+jgaImQH/5uEEVxpA89BpxojugXlEKSVkVAanZsUwQkc/xzhsh8dzuEF5yKomVbwTYmXDTYmpff02ycdUP7gHw0QgWrWaQ2M0Xq1qcZL3ZpoaWUa/A92OfuncCSDNq1pRLqwJrExqQUP9cHGwGbqeGl8Kn2tFds8Pnnv+57ZKiO8E1VTDyBey1J3/Y1hOzctfEz6BzrL52Vj4vPWh2WNNh5fLu1ZEIdykflH/Kho0zQkRfBfD93FbN/nH1xL3V7pO/wXVGqHSD3HbFLIcJ9Ax+JgcZ9fm9Bvc2RkXC8lJU5+htQ+YwHPLDExvUKrBL8b8xksODCvJSWLKcTPooFQyKgbKEnPW5kmn3eT0SHHHOArn6EHoQttkR0pV2Lrgpfg+uhy3LSTmKbtRWo7VgDY0kfVLhsatIUqYAVdDTBzsuMhehaoWwtLAsJ01OqxAoc6+0velLddLBuLxtzGtsF0u2mEFQJmBABEBAAGJAjYEGAEKACAWIQSBheFYozMwx/1hvA0fduFVzvunHAUCX8eiCQIbDAAKCRAfduFVzvunHDx1D/45GVAtIP1X640PR6N8qa4Iysc/crKepgDqm8zzvpQ858MdeJZ9oPFEHDMkIMM8FGK9GbK4UE5mJzWJ2y5acMDOwvX4C9M206YaWQW9jPZtfTfElP1KdAfTWz2/1UeOZKtOUuq9Wq+QlZGYg532JlX09TMyvINRM/w0+f4IBDlEXIeRzRI6UQfz3BxpFpfWtMq/ayJnmJPrDsKQBPalai01OsbC+h4BUysZf1n7eTRFDVaAKkSeOu+4gOVguE9PgKr11lDlKOI38tR6xBXzidBe3cPdun6vQbd1Bdfdmx3JyFtlQo16kwwG2ZiVicXXugASBsrOFJa2/0lrtAPOnUWJsp2+1Ea6IzpRN8d1mNqr6ND+CLxBsWj16UXq34GW6vt/QM7N1Br4/6SuPtv8OmDGRkRH7h2pz5yMf5GOwQFqkgvOHt/x/sFPwk0GMgGn8aFr3vPH2YDg90mPn306Kv12e0JGkYVl4KqdL7u51gxT3z5C/4+hhPVGHSPkf+g0VY/eY136kuuAZjV3P36M6UaBeCyqeD7b3fJ5IJcLwD9NR0ustnn8IJ9zEwn+LY8kjRG8J3V57t2qAVGkMCiXnwFu3Vb+AYozOYi2ibu/N9QXV4dTHarw64HUtLu/HEtcYuzuM5nGOXYvWPz3pQBtlqsyrhIfeaywQ+O55h5/KBo8Ig== \ No newline at end of file diff --git a/contrib/flatpak/.flatpakrepo b/contrib/flatpak/.flatpakrepo new file mode 100644 index 00000000..d4b00b1c --- /dev/null +++ b/contrib/flatpak/.flatpakrepo @@ -0,0 +1,8 @@ +[Flatpak Repo] +Title=Feather Wallet +Url=https://featherwallet.org/flatpak +Homepage=https://featherwallet.org/ +Comment=Official Flatpak repository for Feather Wallet +Description=Official Flatpak repository for Feather Wallet +Icon=https://featherwallet.org/flatpak/icon.png +GPGKey=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 \ No newline at end of file diff --git a/contrib/flatpak/flatpak.scm b/contrib/flatpak/flatpak.scm new file mode 100644 index 00000000..ce34e077 --- /dev/null +++ b/contrib/flatpak/flatpak.scm @@ -0,0 +1,118 @@ +(use-modules (gnu) + (gnu packages) + (gnu packages base) + (gnu packages bash) + (gnu packages certs) + (gnu packages check) + (gnu packages compression) + (gnu packages elf) + (gnu packages fonts) + (gnu packages fontutils) + (gnu packages gcc) + (gnu packages gettext) + (gnu packages glib) + (gnu packages libusb) + (gnu packages linux) + (gnu packages moreutils) + (gnu packages shells) + (gnu packages tls) + (gnu packages xorg) + (gnu packages xdisorg) + (guix build-system gnu) + (guix download) + ((guix licenses) #:prefix license:) + (guix packages) + (guix profiles) + (guix utils)) + +(define-public feather-binary + (package + (name "feather-binary") + (version (getenv "VERSION")) + (source (origin + (method url-fetch) + (uri (getenv "FILE")) + (sha256 (base32 (getenv "HASH"))))) + (build-system gnu-build-system) + (propagated-inputs + (list nss-certs + dbus + coreutils-minimal)) + (inputs (list fontconfig + (list gcc "lib") + libxkbcommon + libxcb + xcb-util-cursor + xcb-util-wm + xcb-util-image + xcb-util-keysyms + xcb-util-renderutil)) + (arguments + (list + #:strip-binaries? #f + #:phases + #~(modify-phases %standard-phases + (delete 'bootstrap) + (delete 'configure) + (delete 'build) + (delete 'check) + (delete 'validate-runpath) + (add-before 'install 'patchelff + (lambda* (#:key inputs outputs propagated-inputs #:allow-other-keys) + (let ((binary "feather") + (runpath '("gcc" + "dbus" + "fontconfig-minimal" + "libxkbcommon" + "libxcb" + "xcb-util-cursor" + "xcb-util-wm" + "xcb-util-image" + "xcb-util-keysyms" + "xcb-util-renderutil"))) + + (define* (maybe-make-rpath entries name) + (let ((entry (assoc-ref entries name))) + (if entry + (string-append entry "/lib") + #f))) + + (define* (make-rpath name) + (or + (maybe-make-rpath inputs name) + (maybe-make-rpath propagated-inputs name) + (error (format #f "`~a' not found among the inputs nor the outputs." name)))) + + (let ((rpath (string-join + (map make-rpath runpath) + ":"))) + (invoke "patchelf" "--set-rpath" rpath binary)) + + #t))) + (replace 'install + (lambda* (#:key outputs #:allow-other-keys) + (let ((target (string-append (assoc-ref outputs "out") "/bin/feather"))) + (mkdir-p (string-append (assoc-ref outputs "out") "/bin/")) + (copy-file "./feather" target))))))) + (native-inputs (list + patchelf + unzip)) + (home-page "https://featherwallet.org/") + (synopsis "A free, open-source Monero wallet") + (description + "Feather is a free, open-source Monero wallet for Linux, Tails, Windows and macOS.") + (license license:bsd-3))) + +(define utf8-locales + (make-glibc-utf8-locales + glibc + #:locales (list "en_US") + #:name "utf8-locales")) + +(packages->manifest + (append + (list feather-binary + strace + utf8-locales + font-wqy-zenhei + font-gnu-unifont))) \ No newline at end of file diff --git a/contrib/flatpak/make_flatpak.sh b/contrib/flatpak/make_flatpak.sh new file mode 100644 index 00000000..0fb4c0a4 --- /dev/null +++ b/contrib/flatpak/make_flatpak.sh @@ -0,0 +1,75 @@ +#!/usr/bin/env bash +set -ex + +APP_ID="org.featherwallet.Feather" + +get_store_path() { + find gnu/store -maxdepth 1 -type d -name "*$1*" | sort | head -n 1 +} + +cd /flatpak + +# Create build dir +mkdir build +cd build + +mkdir export +cp -a /feather/contrib/flatpak/share export +rm -rf export/share/app-info + +# Copy the metadata file +cp /feather/contrib/flatpak/metadata . + +mkdir files +cd files + +# Copy metadata +cp -a /feather/contrib/flatpak/share . +touch --no-dereference --date="@${SOURCE_DATE_EPOCH}" share/metainfo/${APP_ID}.metainfo.xml +gzip -c share/metainfo/${APP_ID}.metainfo.xml > share/app-info/xmls/${APP_ID}.xml.gz + +# Extract guix pack +tar xf /pack . + +# Get store paths +GUIX_BASH_STATIC=$(get_store_path "bash-static") +GUIX_COREUTILS=$(get_store_path "coreutils-minimal") +GUIX_GLIBC=$(get_store_path "glibc") +GUIX_PROFILE=$(get_store_path "profile") + +GLIBC_VERSION="${GUIX_GLIBC##*-}" + +# Patch ln +LN_PATH="${GUIX_COREUTILS}/bin/ln" + +chmod 655 "${LN_PATH}" + +patchelf --set-rpath "/app/${GUIX_GLIBC}/lib" "${LN_PATH}" +patchelf --set-interpreter "/app/${GUIX_GLIBC}/lib/ld-linux-x86-64.so.2" "${LN_PATH}" + +# Fonts +# fontconfig looks in /app/share/fonts +ln -s "/${GUIX_PROFILE}/share/fonts" share/fonts +ln -s "/${GUIX_PROFILE}/share/locale" share/locale +ln -s "/${GUIX_PROFILE}/share/dbus-1" share/dbus-1 +ln -s "/${GUIX_PROFILE}/share/xml" share/xml + +chmod 555 "${LN_PATH}" + +# create startup.sh +cat << EOF > startup.sh +#!/app/${GUIX_BASH_STATIC}/bin/bash +/app/${LN_PATH} -s /app/gnu /gnu +export PATH="/${GUIX_PROFILE}/bin" +mkdir -p /etc/ssl +# Qt expects certs to be here, see: qtbase/src/network/ssl/qsslsocket.cpp +ln -s /${GUIX_PROFILE}/etc/ssl/certs /etc/ssl/certs +mkdir -p /run/current-system/locale/${GLIBC_VERSION} +ln -s /${GUIX_PROFILE}/lib/locale/${GLIBC_VERSION}/en_US.UTF-8 /run/current-system/locale/${GLIBC_VERSION} +# Feather interpreter is set to /lib64/ld-linux-x86-64.so.2 +# Guix pack includes glibc twice if we add glibc to the inputs in flatpak.scm, so this is an alternative to patching +ln -s /${GUIX_GLIBC}/lib /lib64 +feather +EOF + +chmod 555 startup.sh \ No newline at end of file diff --git a/contrib/flatpak/make_runtime.sh b/contrib/flatpak/make_runtime.sh new file mode 100644 index 00000000..accf37e4 --- /dev/null +++ b/contrib/flatpak/make_runtime.sh @@ -0,0 +1,14 @@ +#!/usr/bin/env bash +set -ex + +mkdir empty +cd empty + +mkdir export files usr + +cat << EOF > metadata +[Runtime] +name=org.featherwallet.Empty +runtime=org.featherwallet.Empty/x86_64/empty +sdk=org.featherwallet.Empty/x86_64/empty +EOF \ No newline at end of file diff --git a/contrib/flatpak/metadata b/contrib/flatpak/metadata new file mode 100644 index 00000000..297a327d --- /dev/null +++ b/contrib/flatpak/metadata @@ -0,0 +1,11 @@ +[Application] +name=org.featherwallet.Feather +runtime=org.featherwallet.Empty/x86_64/stable +sdk=org.featherwallet.Empty/x86_64/stable +command=/app/startup.sh + +[Context] +shared=network;ipc; +sockets=x11;wayland; +devices=all; +filesystems=~/Monero:create; \ No newline at end of file diff --git a/contrib/flatpak/share/app-info/icons/flatpak/128x128/org.featherwallet.Feather.png b/contrib/flatpak/share/app-info/icons/flatpak/128x128/org.featherwallet.Feather.png new file mode 100644 index 0000000000000000000000000000000000000000..3d9355abb3a381807a16afc241ad80c5e8923489 GIT binary patch literal 9650 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 literal 0 HcmV?d00001 diff --git a/contrib/flatpak/share/app-info/icons/flatpak/256x256/org.featherwallet.Feather.png b/contrib/flatpak/share/app-info/icons/flatpak/256x256/org.featherwallet.Feather.png new file mode 100644 index 0000000000000000000000000000000000000000..4c84674b4601c2372c72d0d73aa1fac268b54b0a GIT binary patch literal 27299 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 V^yN?yecKcOpr)j$SSN28@jv!joHGCb literal 0 HcmV?d00001 diff --git a/contrib/flatpak/share/app-info/xmls/.gitkeep b/contrib/flatpak/share/app-info/xmls/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/contrib/flatpak/share/applications/org.featherwallet.Feather.desktop b/contrib/flatpak/share/applications/org.featherwallet.Feather.desktop new file mode 100644 index 00000000..f0af2863 --- /dev/null +++ b/contrib/flatpak/share/applications/org.featherwallet.Feather.desktop @@ -0,0 +1,11 @@ +[Desktop Entry] +Type=Application +Name=Feather Wallet +GenericName=Monero Wallet +Comment=A free Monero desktop wallet +Icon=org.featherwallet.Feather +Exec=/app/startup.sh +Terminal=false +Categories=Network;Qt;Finance +StartupNotify=false +StartupWMClass=feather \ No newline at end of file diff --git a/contrib/flatpak/share/icons/hicolor/128x128/apps/org.featherwallet.Feather.png b/contrib/flatpak/share/icons/hicolor/128x128/apps/org.featherwallet.Feather.png new file mode 100644 index 0000000000000000000000000000000000000000..3d9355abb3a381807a16afc241ad80c5e8923489 GIT binary patch literal 9650 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 literal 0 HcmV?d00001 diff --git a/contrib/flatpak/share/icons/hicolor/256x256/apps/org.featherwallet.Feather.png b/contrib/flatpak/share/icons/hicolor/256x256/apps/org.featherwallet.Feather.png new file mode 100644 index 0000000000000000000000000000000000000000..4c84674b4601c2372c72d0d73aa1fac268b54b0a GIT binary patch literal 27299 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 V^yN?yecKcOpr)j$SSN28@jv!joHGCb literal 0 HcmV?d00001 diff --git a/contrib/flatpak/share/metainfo/org.featherwallet.Feather.metainfo.xml b/contrib/flatpak/share/metainfo/org.featherwallet.Feather.metainfo.xml new file mode 100644 index 00000000..90b72ea1 --- /dev/null +++ b/contrib/flatpak/share/metainfo/org.featherwallet.Feather.metainfo.xml @@ -0,0 +1,48 @@ + + + org.featherwallet.Feather + Feather + Monero desktop wallet + CC0-1.0 + BSD-3-Clause + + Network + Qt + Finance + Office + + +

Feather is a Monero wallet for desktop with the following features:

+
    +
  • + Easy-to-use, small and fast - Feather + runs well on any modern hardware, including virtual machines + and live operating systems. +
  • +
  • + Beginner friendly, but also caters to advanced Monero + users by providing a feature set that is on par with the official CLI. +
  • +
  • + Ships with sane defaults that suit most users, but + can also be configured for high or uncommon threat models. +
  • +
  • + Serves as a testing grounds for experimental features + that may later be adopted in the reference wallets. +
  • +
+
+ org.featherwallet.Feather.desktop + + + https://featherwallet.org/img/receive_light.png + + + https://featherwallet.org/ + https://github.com/feather-wallet/feather + https://docs.featherwallet.org/guides/donate + https://docs.featherwallet.org/guides/report-an-issue + https://docs.featherwallet.org + https://github.com/feather-wallet/feather +
\ No newline at end of file diff --git a/contrib/guix/guix-build b/contrib/guix/guix-build index c96cf22e..f353b518 100755 --- a/contrib/guix/guix-build +++ b/contrib/guix/guix-build @@ -81,6 +81,7 @@ mkdir -p "$VERSION_BASE" # Default to building for all supported HOSTs (overridable by environment) export HOSTS="${HOSTS:-x86_64-linux-gnu aarch64-linux-gnu arm-linux-gnueabihf x86_64-linux-gnu.no-tor-bundle + x86_64-linux-gnu.flatpak riscv64-linux-gnu x86_64-w64-mingw32 x86_64-w64-mingw32.installer x86_64-apple-darwin arm64-apple-darwin}" @@ -316,6 +317,7 @@ for host in $HOSTS; do # Required for 'contrib/guix/manifest.scm' to output the right manifest # for the particular $HOST we're building for export HOST="${host_split[0]}" + export OPTIONS="${host_split[1]}" # shellcheck disable=SC2030 cat << EOF @@ -441,6 +443,31 @@ EOF DIST_ARCHIVE_BASE=/outdir-base/dist-archive \ OPTIONS="${host_split[1]}" \ bash -c "cd /feather && bash contrib/guix/libexec/build.sh" + + + case "$OPTIONS" in + flatpak) + export FILE="$(outdir_for_host "$host")/${DISTNAME}-flatpak.zip" + export HASH=$(guix hash "${FILE}") + export VERSION=${VERSION} + time-machine pack -S /opt/gnu/bin=bin --manifest="${PWD}/contrib/flatpak/flatpak.scm" + PACK=$(time-machine pack --manifest="${PWD}/contrib/flatpak/flatpak.scm") + time-machine environment --ad-hoc tar gzip findutils grep patchelf coreutils-minimal bash \ + --container \ + --pure \ + --no-cwd \ + --share="$PWD"=/feather \ + --share="$PACK"=/pack \ + --share="$(outdir_for_host "$host")"=/flatpak \ + --keep-failed \ + --fallback \ + --user="user" \ + ${SUBSTITUTE_URLS:+--substitute-urls="$SUBSTITUTE_URLS"} \ + ${ADDITIONAL_GUIX_COMMON_FLAGS} ${ADDITIONAL_GUIX_ENVIRONMENT_FLAGS} \ + -- env SOURCE_DATE_EPOCH="${SOURCE_DATE_EPOCH:?unable to determine value}" \ + bash -c "cd /feather && bash contrib/flatpak/make_flatpak.sh" + ;; + esac ) done diff --git a/contrib/guix/libexec/build.sh b/contrib/guix/libexec/build.sh index 8294f8b3..fb3562d8 100755 --- a/contrib/guix/libexec/build.sh +++ b/contrib/guix/libexec/build.sh @@ -293,6 +293,9 @@ mkdir -p "$DISTSRC" CMAKEVARS+=" -DTOR_DIR=Off -DTOR_VERSION=Off" ANONDIST+="-a" ;; + flatpak) + CMAKEVARS+=" -DCHECK_UPDATES=Off -DSELF_CONTAINED=Off" + ;; esac ;; *gnueabihf) @@ -335,11 +338,13 @@ mkdir -p "$DISTSRC" case "$HOST" in *linux*) - bash contrib/AppImage/build-appimage.sh - APPIMAGENAME=${DISTNAME}${ANONDIST}${LINUX_ARCH}.AppImage - mv feather.AppImage "${APPIMAGENAME}" - cp "${APPIMAGENAME}" "${INSTALLPATH}/" - cp "${APPIMAGENAME}" "${OUTDIR}/" + if [ "$OPTIONS" != "flatpak" ]; then + bash contrib/AppImage/build-appimage.sh + APPIMAGENAME=${DISTNAME}${ANONDIST}${LINUX_ARCH}.AppImage + mv feather.AppImage "${APPIMAGENAME}" + cp "${APPIMAGENAME}" "${INSTALLPATH}/" + cp "${APPIMAGENAME}" "${OUTDIR}/" + fi ;; esac @@ -372,9 +377,6 @@ mkdir -p "$DISTSRC" cd installed case "$HOST" in - *linux*) - mv feather "${DISTNAME}" - ;; *darwin*) mv "feather.app" "Feather.app" ;; @@ -412,22 +414,32 @@ mkdir -p "$DISTSRC" esac ;; *linux*) - case "$OPTIONS" in - "") - find . -not -name "*.AppImage" -print0 \ - | xargs -0r touch --no-dereference --date="@${SOURCE_DATE_EPOCH}" - find . -not -name "*.AppImage" \ - | sort \ - | zip -X@ "${OUTDIR}/${DISTNAME}-linux${LINUX_ARCH}${ANONDIST}.zip" \ - || ( rm -f "${OUTDIR}/${DISTNAME}-linux${LINUX_ARCH}${ANONDIST}.zip" && exit 1 ) - ;; - esac - find . -name "*.AppImage" -print0 \ - | xargs -0r touch --no-dereference --date="@${SOURCE_DATE_EPOCH}" - find . -name "*.AppImage" \ - | sort \ - | zip -X@ "${OUTDIR}/${DISTNAME}-linux${LINUX_ARCH}-appimage${ANONDIST}.zip" \ - || ( rm -f "${OUTDIR}/${DISTNAME}-linux${LINUX_ARCH}-appimage${ANONDIST}.zip" && exit 1 ) + if [ "$OPTIONS" != "flatpak" ]; then + mv feather "${DISTNAME}" + case "$OPTIONS" in + "") + find . -not -name "*.AppImage" -print0 \ + | xargs -0r touch --no-dereference --date="@${SOURCE_DATE_EPOCH}" + find . -not -name "*.AppImage" \ + | sort \ + | zip -X@ "${OUTDIR}/${DISTNAME}-linux${LINUX_ARCH}${ANONDIST}.zip" \ + || ( rm -f "${OUTDIR}/${DISTNAME}-linux${LINUX_ARCH}${ANONDIST}.zip" && exit 1 ) + ;; + esac + find . -name "*.AppImage" -print0 \ + | xargs -0r touch --no-dereference --date="@${SOURCE_DATE_EPOCH}" + find . -name "*.AppImage" \ + | sort \ + | zip -X@ "${OUTDIR}/${DISTNAME}-linux${LINUX_ARCH}-appimage${ANONDIST}.zip" \ + || ( rm -f "${OUTDIR}/${DISTNAME}-linux${LINUX_ARCH}-appimage${ANONDIST}.zip" && exit 1 ) + else + find . -print0 \ + | xargs -0r touch --no-dereference --date="@${SOURCE_DATE_EPOCH}" + find . \ + | sort \ + | zip -X@ "${OUTDIR}/${DISTNAME}-flatpak.zip" \ + || ( rm -f "${OUTDIR}/${DISTNAME}-flatpak.zip" && exit 1 ) + fi ;; *darwin*) find . -print0 \ diff --git a/monero b/monero index bbebb167..3938ed05 160000 --- a/monero +++ b/monero @@ -1 +1 @@ -Subproject commit bbebb167879679703fd8f92970b336c25f4ee28c +Subproject commit 3938ed0534781105bd7c797f32c0c865df136fe6 -- 2.52.0