From ea9c73826b09a0b9682f0752d15bf8cb3033243e Mon Sep 17 00:00:00 2001 From: jwinterm Date: Sun, 13 Sep 2026 10:49:00 -0400 Subject: [PATCH] fix(build): ship the binary as wowlet, not feather The CMake target keeps its upstream name so the twenty-odd target_* calls stay put, but OUTPUT_NAME now produces build/bin/wowlet, and on macOS a wowlet.app whose CFBundleExecutable matches it. Linux and Windows already renamed the artifact as they copied it, so their cp lines just move to the new path. macOS copied the whole bundle instead, so it shipped Contents/MacOS/feather with a Feather name in the Info.plist, which is what anyone installing it actually saw. The Linux install rules had the same problem one level down: they installed feather.desktop, which sets Exec=feather and Name=Feather Wallet, while the correct wowlet.desktop sat unused beside it. CFBundleIdentifier moves to org.wownero.wowlet. Nothing in signing or notarization reads it, but macOS keys per-app state by bundle id, so an existing install starts with fresh window state. --- .gitea/workflows/build-linux.yml | 2 +- .gitea/workflows/build-windows.yml | 2 +- contrib/AppImage/AppRun | 2 +- contrib/AppImage/build-appimage.sh | 26 +++++++++++++------------- contrib/macdeploy/Info.plist.in | 6 +++--- src/CMakeLists.txt | 22 +++++++++++++--------- 6 files changed, 32 insertions(+), 28 deletions(-) diff --git a/.gitea/workflows/build-linux.yml b/.gitea/workflows/build-linux.yml index 4aeb5766..5a64e43f 100644 --- a/.gitea/workflows/build-linux.yml +++ b/.gitea/workflows/build-linux.yml @@ -91,7 +91,7 @@ jobs: rm -rf AppDir mkdir -p AppDir/usr/bin AppDir/usr/share/applications \ AppDir/usr/share/icons/hicolor/256x256/apps - cp build/bin/feather AppDir/usr/bin/wowlet + cp build/bin/wowlet AppDir/usr/bin/wowlet chmod +x AppDir/usr/bin/wowlet cp src/assets/wowlet.desktop AppDir/usr/share/applications/wowlet.desktop cp src/assets/images/appicons/256x256.png \ diff --git a/.gitea/workflows/build-windows.yml b/.gitea/workflows/build-windows.yml index 61cca3b9..c2ecca88 100644 --- a/.gitea/workflows/build-windows.yml +++ b/.gitea/workflows/build-windows.yml @@ -129,7 +129,7 @@ jobs: # archive contains the signed binary. run: | mkdir -p stage/tor - cp build/bin/feather.exe stage/wowlet.exe + cp build/bin/wowlet.exe stage/wowlet.exe cp "contrib/depends/$HOST/Tor/tor.exe" stage/tor/tor.exe (cp LICENSE stage/LICENSE.txt 2>/dev/null || cp COPYING stage/LICENSE.txt 2>/dev/null) || true ls -la stage stage/tor diff --git a/contrib/AppImage/AppRun b/contrib/AppImage/AppRun index dc508557..32633eee 100644 --- a/contrib/AppImage/AppRun +++ b/contrib/AppImage/AppRun @@ -5,4 +5,4 @@ echo $HERE # Tails 5.8 sets QT_QPA_PLATFORM to wayland which breaks our app export QT_QPA_PLATFORM=xcb -${APPDIR}/usr/bin/feather $* +${APPDIR}/usr/bin/wowlet $* diff --git a/contrib/AppImage/build-appimage.sh b/contrib/AppImage/build-appimage.sh index 43b2b01d..badc3d51 100755 --- a/contrib/AppImage/build-appimage.sh +++ b/contrib/AppImage/build-appimage.sh @@ -5,29 +5,29 @@ unset SOURCE_DATE_EPOCH # Manually create the AppImage (reproducibly) since linuxdeployqt is not able to create cross-compiled AppImages -APPDIR="$PWD/feather.AppDir" +APPDIR="$PWD/wowlet.AppDir" mkdir -p "$APPDIR" mkdir -p "$APPDIR/usr/share/applications/" mkdir -p "$APPDIR/usr/bin" -cp "src/assets/feather.desktop" "$APPDIR/usr/share/applications/feather.desktop" -cp "src/assets/feather.desktop" "$APPDIR/feather.desktop" -cp "src/assets/images/appicons/64x64.png" "$APPDIR/feather.png" -cp "build/bin/feather" "$APPDIR/usr/bin/feather" -chmod +x "$APPDIR/usr/bin/feather" +cp "src/assets/wowlet.desktop" "$APPDIR/usr/share/applications/wowlet.desktop" +cp "src/assets/wowlet.desktop" "$APPDIR/wowlet.desktop" +cp "src/assets/images/appicons/64x64.png" "$APPDIR/wowlet.png" +cp "build/bin/wowlet" "$APPDIR/usr/bin/wowlet" +chmod +x "$APPDIR/usr/bin/wowlet" cp "contrib/AppImage/AppRun" "$APPDIR/" chmod +x "$APPDIR/AppRun" -find feather.AppDir/ -exec touch -h -a -m -t 202101010100.00 {} \; +find wowlet.AppDir/ -exec touch -h -a -m -t 202101010100.00 {} \; -mksquashfs feather.AppDir feather.squashfs -comp zstd -info -root-owned -no-xattrs -noappend -fstime 0 +mksquashfs wowlet.AppDir wowlet.squashfs -comp zstd -info -root-owned -no-xattrs -noappend -fstime 0 # mksquashfs writes a timestamp to the header -printf '\x00\x00\x00\x00' | dd conv=notrunc of=feather.squashfs bs=1 seek=$((0x8)) +printf '\x00\x00\x00\x00' | dd conv=notrunc of=wowlet.squashfs bs=1 seek=$((0x8)) -rm -f feather.AppImage +rm -f wowlet.AppImage -cat "${GITHUB_WORKSPACE:-/feather}/contrib/depends/${HOST}/runtime" >> feather.AppImage -cat feather.squashfs >> feather.AppImage -chmod a+x feather.AppImage +cat "${GITHUB_WORKSPACE:-/feather}/contrib/depends/${HOST}/runtime" >> wowlet.AppImage +cat wowlet.squashfs >> wowlet.AppImage +chmod a+x wowlet.AppImage diff --git a/contrib/macdeploy/Info.plist.in b/contrib/macdeploy/Info.plist.in index 6a381b9f..33be9090 100644 --- a/contrib/macdeploy/Info.plist.in +++ b/contrib/macdeploy/Info.plist.in @@ -34,13 +34,13 @@ ???? CFBundleExecutable - feather + wowlet CFBundleName - Feather + Wowlet CFBundleIdentifier - org.monero-project.feather + org.wownero.wowlet NSCameraUsageDescription Camera is used to scan QR codes on demand. diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 0db6c33b..3f24d311 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -148,7 +148,10 @@ add_executable(feather ${EXECUTABLE_FLAG} main.cpp ${ASSETS_TOR} ) +# The CMake target keeps its upstream name so the target_* calls below stay put; +# only what we ship is renamed. set_target_properties(feather PROPERTIES + OUTPUT_NAME wowlet RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin" LINK_FLAGS_RELEASE -s ) @@ -370,14 +373,14 @@ else() ) if (UNIX AND NOT APPLE) - install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/assets/feather.desktop DESTINATION ${CMAKE_INSTALL_PREFIX}/share/applications) - install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/assets/images/appicons/32x32.png DESTINATION ${CMAKE_INSTALL_PREFIX}/share/icons/hicolor/32x32/apps RENAME "feather.png") - install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/assets/images/appicons/48x48.png DESTINATION ${CMAKE_INSTALL_PREFIX}/share/icons/hicolor/48x48/apps RENAME "feather.png") - install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/assets/images/appicons/64x64.png DESTINATION ${CMAKE_INSTALL_PREFIX}/share/icons/hicolor/64x64/apps RENAME "feather.png") - install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/assets/images/appicons/96x96.png DESTINATION ${CMAKE_INSTALL_PREFIX}/share/icons/hicolor/96x96/apps RENAME "feather.png") - install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/assets/images/appicons/128x128.png DESTINATION ${CMAKE_INSTALL_PREFIX}/share/icons/hicolor/128x128/apps RENAME "feather.png") - install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/assets/images/appicons/256x256.png DESTINATION ${CMAKE_INSTALL_PREFIX}/share/icons/hicolor/256x256/apps RENAME "feather.png") - install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/assets/images/appicons/512x512.png DESTINATION ${CMAKE_INSTALL_PREFIX}/share/icons/hicolor/512x512/apps RENAME "feather.png") + install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/assets/wowlet.desktop DESTINATION ${CMAKE_INSTALL_PREFIX}/share/applications) + install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/assets/images/appicons/32x32.png DESTINATION ${CMAKE_INSTALL_PREFIX}/share/icons/hicolor/32x32/apps RENAME "wowlet.png") + install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/assets/images/appicons/48x48.png DESTINATION ${CMAKE_INSTALL_PREFIX}/share/icons/hicolor/48x48/apps RENAME "wowlet.png") + install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/assets/images/appicons/64x64.png DESTINATION ${CMAKE_INSTALL_PREFIX}/share/icons/hicolor/64x64/apps RENAME "wowlet.png") + install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/assets/images/appicons/96x96.png DESTINATION ${CMAKE_INSTALL_PREFIX}/share/icons/hicolor/96x96/apps RENAME "wowlet.png") + install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/assets/images/appicons/128x128.png DESTINATION ${CMAKE_INSTALL_PREFIX}/share/icons/hicolor/128x128/apps RENAME "wowlet.png") + install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/assets/images/appicons/256x256.png DESTINATION ${CMAKE_INSTALL_PREFIX}/share/icons/hicolor/256x256/apps RENAME "wowlet.png") + install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/assets/images/appicons/512x512.png DESTINATION ${CMAKE_INSTALL_PREFIX}/share/icons/hicolor/512x512/apps RENAME "wowlet.png") endif() endif() @@ -385,13 +388,14 @@ if(APPLE) configure_file(${CMAKE_SOURCE_DIR}/contrib/macdeploy/Info.plist.in ${CMAKE_SOURCE_DIR}/contrib/macdeploy/Info.plist @ONLY) set_target_properties(feather PROPERTIES + OUTPUT_NAME wowlet RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin" MACOSX_BUNDLE TRUE MACOSX_BUNDLE_INFO_PLIST "${CMAKE_SOURCE_DIR}/contrib/macdeploy/Info.plist" LINK_FLAGS_RELEASE -s ) - file(COPY "${CMAKE_SOURCE_DIR}/src/assets/images/appicons/appicon.icns" DESTINATION "${CMAKE_SOURCE_DIR}/installed/feather.app/Contents/Resources/" ) + file(COPY "${CMAKE_SOURCE_DIR}/src/assets/images/appicons/appicon.icns" DESTINATION "${CMAKE_SOURCE_DIR}/installed/wowlet.app/Contents/Resources/" ) endif() qt_finalize_executable(feather)