#!/bin/bash # DragonX ImGui Wallet - AppImage Creation Script # Copyright 2024-2026 The Hush Developers # Released under the GPLv3 set -e SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" BUILD_DIR="${SCRIPT_DIR}/build/linux" APPDIR="${BUILD_DIR}/AppDir" VERSION="1.0.0" # Colors GREEN='\033[0;32m' RED='\033[0;31m' NC='\033[0m' print_status() { echo -e "${GREEN}[*]${NC} $1"; } print_error() { echo -e "${RED}[ERROR]${NC} $1"; } # Check prerequisites if [ ! -f "${BUILD_DIR}/bin/ObsidianDragon" ]; then print_error "Binary not found. Run build.sh --linux-release first." exit 1 fi # Check for appimagetool APPIMAGETOOL="" if command -v appimagetool &> /dev/null; then APPIMAGETOOL="appimagetool" elif [ -f "${BUILD_DIR}/appimagetool-x86_64.AppImage" ]; then APPIMAGETOOL="${BUILD_DIR}/appimagetool-x86_64.AppImage" else print_status "Downloading appimagetool..." wget -q -O "${BUILD_DIR}/appimagetool-x86_64.AppImage" \ "https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-x86_64.AppImage" chmod +x "${BUILD_DIR}/appimagetool-x86_64.AppImage" APPIMAGETOOL="${BUILD_DIR}/appimagetool-x86_64.AppImage" fi print_status "Creating AppDir structure..." rm -rf "${APPDIR}" mkdir -p "${APPDIR}/usr/bin" mkdir -p "${APPDIR}/usr/lib" mkdir -p "${APPDIR}/usr/share/applications" mkdir -p "${APPDIR}/usr/share/icons/hicolor/256x256/apps" mkdir -p "${APPDIR}/usr/share/ObsidianDragon/res" # Copy binary print_status "Copying binary..." cp "${BUILD_DIR}/bin/ObsidianDragon" "${APPDIR}/usr/bin/" # Copy resources print_status "Copying resources..." cp -r "${BUILD_DIR}/bin/res/"* "${APPDIR}/usr/share/ObsidianDragon/res/" 2>/dev/null || true # Create desktop file print_status "Creating desktop file..." cat > "${APPDIR}/usr/share/applications/ObsidianDragon.desktop" << EOF [Desktop Entry] Type=Application Name=DragonX Wallet Comment=DragonX Cryptocurrency Wallet Exec=ObsidianDragon Icon=ObsidianDragon Categories=Finance;Network; Terminal=false StartupNotify=true EOF # Copy desktop file to root cp "${APPDIR}/usr/share/applications/ObsidianDragon.desktop" "${APPDIR}/" # Create icon (simple SVG placeholder if no icon exists) print_status "Creating icon..." if [ -f "${SCRIPT_DIR}/res/icons/dragonx-256.png" ]; then cp "${SCRIPT_DIR}/res/icons/dragonx-256.png" "${APPDIR}/usr/share/icons/hicolor/256x256/apps/ObsidianDragon.png" else # Create a simple SVG icon as placeholder cat > "${APPDIR}/ObsidianDragon.svg" << 'EOF' DX EOF # Convert SVG to PNG if rsvg-convert is available if command -v rsvg-convert &> /dev/null; then rsvg-convert -w 256 -h 256 "${APPDIR}/ObsidianDragon.svg" > \ "${APPDIR}/usr/share/icons/hicolor/256x256/apps/ObsidianDragon.png" fi fi # Copy icon to root cp "${APPDIR}/usr/share/icons/hicolor/256x256/apps/ObsidianDragon.png" "${APPDIR}/" 2>/dev/null || \ cp "${APPDIR}/ObsidianDragon.svg" "${APPDIR}/ObsidianDragon.png" 2>/dev/null || true # Create AppRun script print_status "Creating AppRun..." cat > "${APPDIR}/AppRun" << 'EOF' #!/bin/bash SELF=$(readlink -f "$0") HERE=${SELF%/*} # Set up resource paths export DRAGONX_RES_PATH="${HERE}/usr/share/ObsidianDragon/res" # Find libraries export LD_LIBRARY_PATH="${HERE}/usr/lib:${LD_LIBRARY_PATH}" # Change to resource directory for relative paths cd "${HERE}/usr/share/ObsidianDragon" exec "${HERE}/usr/bin/ObsidianDragon" "$@" EOF chmod +x "${APPDIR}/AppRun" # Bundle required libraries (basic set) print_status "Bundling libraries..." LIBS_TO_BUNDLE=( "libSDL3.so" ) for lib in "${LIBS_TO_BUNDLE[@]}"; do LIB_PATH=$(ldconfig -p | grep "$lib" | head -1 | awk '{print $NF}') if [ -n "$LIB_PATH" ] && [ -f "$LIB_PATH" ]; then cp "$LIB_PATH" "${APPDIR}/usr/lib/" 2>/dev/null || true fi done # Also copy SDL3 from build if exists if [ -f "${BUILD_DIR}/_deps/sdl3-build/libSDL3.so" ]; then cp "${BUILD_DIR}/_deps/sdl3-build/libSDL3.so"* "${APPDIR}/usr/lib/" 2>/dev/null || true fi # Create AppImage print_status "Creating AppImage..." cd "${BUILD_DIR}" ARCH=$(uname -m) APPIMAGE_NAME="DragonX_Wallet-${VERSION}-${ARCH}.AppImage" # Run appimagetool ARCH="${ARCH}" "${APPIMAGETOOL}" "${APPDIR}" "${APPIMAGE_NAME}" if [ -f "${APPIMAGE_NAME}" ]; then # Copy to release/linux/ for clean output OUT_DIR="${SCRIPT_DIR}/release/linux" mkdir -p "${OUT_DIR}" cp "${APPIMAGE_NAME}" "${OUT_DIR}/" print_status "AppImage created successfully!" print_status "Output: ${OUT_DIR}/${APPIMAGE_NAME}" ls -lh "${OUT_DIR}/${APPIMAGE_NAME}" else print_error "AppImage creation failed" exit 1 fi