{
 "app_id": "com.fbraz3.GeneralsX",
 "source_url": "https://raw.githubusercontent.com/ammaarreshi/Generals-Mac-iOS-iPad/main/flatpak/com.fbraz3.GeneralsX.yml",
 "runtime": "org.freedesktop.Platform",
 "runtime_version": "25.08",
 "sdk": "org.freedesktop.Sdk",
 "finish_args": [
  "--share=ipc",
  "--share=network",
  "--socket=wayland",
  "--socket=fallback-x11",
  "--socket=pulseaudio",
  "--device=dri",
  "--filesystem=~/GeneralsX:create",
  "--filesystem=xdg-data/GeneralsX:create"
 ],
 "module_count": 3,
 "fetched_at": "2026-10-05T15:55:54.173021+00:00",
 "manifest": {
  "app-id": "com.fbraz3.GeneralsX",
  "runtime": "org.freedesktop.Platform",
  "runtime-version": "25.08",
  "sdk": "org.freedesktop.Sdk",
  "command": "generalsx-wrapper.sh",
  "finish-args": [
   "--share=ipc",
   "--share=network",
   "--socket=wayland",
   "--socket=fallback-x11",
   "--socket=pulseaudio",
   "--device=dri",
   "--filesystem=~/GeneralsX:create",
   "--filesystem=xdg-data/GeneralsX:create"
  ],
  "modules": [
   {
    "name": "glm",
    "buildsystem": "cmake-ninja",
    "config-opts": [
     "-DGLM_BUILD_TESTS=OFF",
     "-DCMAKE_BUILD_TYPE=Release"
    ],
    "sources": [
     {
      "type": "git",
      "url": "https://github.com/g-truc/glm.git",
      "tag": "1.0.1"
     }
    ]
   },
   {
    "name": "gli",
    "buildsystem": "cmake-ninja",
    "config-opts": [
     "-DGLI_TEST_ENABLE=OFF",
     "-DCMAKE_BUILD_TYPE=Release"
    ],
    "sources": [
     {
      "type": "git",
      "url": "https://github.com/g-truc/gli.git",
      "branch": "master"
     }
    ]
   },
   {
    "name": "generalsx",
    "buildsystem": "simple",
    "build-commands": [
     "cmake -S . -B build-flatpak -G Ninja \\\n  -DCMAKE_BUILD_TYPE=RelWithDebInfo \\\n  -DCMAKE_INSTALL_PREFIX=/app \\\n  -DRTS_BUILD_ZEROHOUR=OFF \\\n  -DRTS_BUILD_GENERALS=ON \\\n  -DRTS_BUILD_CORE_TOOLS=OFF \\\n  -DRTS_BUILD_CORE_EXTRAS=OFF \\\n  -DRTS_BUILD_GENERALS_TOOLS=OFF \\\n  -DRTS_BUILD_GENERALS_EXTRAS=OFF \\\n  -DRTS_BUILD_OPTION_DEBUG=OFF \\\n  -DRTS_BUILD_OPTION_PROFILE=OFF \\\n  -DRTS_BUILD_OPTION_FFMPEG=ON \\\n  -DRTS_CRASHDUMP_ENABLE=OFF \\\n  -DSAGE_USE_DX8=OFF \\\n  -DSAGE_USE_SDL3=ON \\\n  -DSAGE_USE_OPENAL=ON \\\n  -DSAGE_USE_GLM=ON \\\n  -DSAGE_UPDATE_CHECK=ON \\\n  -DRTS_BUILD_OPTION_SAGE_PATCH=ON \\\n  -DFETCHCONTENT_FULLY_DISCONNECTED=ON \\\n  -DFETCHCONTENT_UPDATES_DISCONNECTED=ON \\\n  -DFETCHCONTENT_SOURCE_DIR_DXVK=/run/build/generalsx/dxvk-src \\\n  -DFETCHCONTENT_SOURCE_DIR_SDL3=/run/build/generalsx/sdl3-src \\\n  -DFETCHCONTENT_SOURCE_DIR_SDL3_IMAGE=/run/build/generalsx/sdl3-image-src \\\n  -DFETCHCONTENT_SOURCE_DIR_OPENAL_SOFT=/run/build/generalsx/openal-soft-src \\\n  -DFETCHCONTENT_SOURCE_DIR_GAMESPY=/run/build/generalsx/gamespy-src \\\n  -DFETCHCONTENT_SOURCE_DIR_LZHL=/run/build/generalsx/lzhl-src/CompLibHeader\n",
     "cmake --build build-flatpak --target g_generals -j \"${FLATPAK_BUILDER_N_JOBS:-4}\"",
     "cmake --build build-flatpak --target sage_patch -j \"${FLATPAK_BUILDER_N_JOBS:-4}\" || true",
     "install -Dm755 build-flatpak/Generals/GeneralsX /app/bin/GeneralsX",
     "install -Dm755 flatpak/run-flatpak-generals.sh /app/bin/generalsx-wrapper.sh",
     "install -Dm644 flatpak/com.fbraz3.GeneralsX.desktop /app/share/applications/com.fbraz3.GeneralsX.desktop",
     "install -Dm644 flatpak/com.fbraz3.GeneralsX.metainfo.xml /app/share/metainfo/com.fbraz3.GeneralsX.metainfo.xml",
     "install -Dm644 flatpak/generalsx_icon_512.png /app/share/icons/hicolor/512x512/apps/com.fbraz3.GeneralsX.png",
     "install -Dm644 resources/dxvk/dxvk.conf /app/share/generalsx/dxvk.conf",
     "install -d /app/lib",
     "cp -a /run/build/generalsx/dxvk-src/lib/libdxvk_d3d8.so* /app/lib/",
     "cp -a /run/build/generalsx/dxvk-src/lib/libdxvk_d3d9.so* /app/lib/",
     "cp -a build-flatpak/_deps/sdl3-build/libSDL3.so* /app/lib/",
     "cp -a build-flatpak/_deps/sdl3_image-build/libSDL3_image.so* /app/lib/",
     "cp -a build-flatpak/_deps/openal_soft-build/libopenal.so* /app/lib/",
     "find build-flatpak -name \"libgamespy.so*\" -type f -exec cp -a {} /app/lib/ \\;",
     "if [ -f build-flatpak/Patches/SagePatch/libsage_patch.so ]; then cp -a build-flatpak/Patches/SagePatch/libsage_patch.so /app/lib/; fi",
     "for f in /app/lib/lib*.so.*; do\n  b=\"$(basename \"$f\")\"\n  if [[ \"$b\" =~ ^(lib[^.]+\\.so)\\.([0-9]+)(\\..*)?$ ]]; then\n    if [[ -n \"${BASH_REMATCH[3]}\" ]]; then\n      ln -sf \"$b\" \"/app/lib/${BASH_REMATCH[1]}.${BASH_REMATCH[2]}\"\n    fi\n  fi\ndone\n",
     "cat > /app/bin/run.sh <<'EOF'\n#!/usr/bin/env bash\nset -euo pipefail\n\nif [[ -n \"${LD_LIBRARY_PATH:-}\" ]]; then\n  export LD_LIBRARY_PATH=\"${LD_LIBRARY_PATH}:/app/lib\"\nelse\n  export LD_LIBRARY_PATH=\"/app/lib\"\nfi\n\nexport DXVK_WSI_DRIVER=\"SDL3\"\nexport DXVK_LOG_LEVEL=\"${DXVK_LOG_LEVEL:-info}\"\n\n# SagePatch (optional QoL: F11 screenshot, Scroll Lock cursor lock,\n# Ctrl+PgUp/Dn brightness, Ctrl+1..5 window snap). Loaded via LD_PRELOAD\n# only if the .so is present in /app/lib. Default DXVK_HUD to \"fps\" when\n# SagePatch is active so casual users see a frame counter.\nif [[ -f /app/lib/libsage_patch.so && \"${SAGE_PATCH_DISABLED:-0}\" != \"1\" ]]; then\n  if [[ -n \"${LD_PRELOAD:-}\" ]]; then\n    export LD_PRELOAD=\"/app/lib/libsage_patch.so:${LD_PRELOAD}\"\n  else\n    export LD_PRELOAD=\"/app/lib/libsage_patch.so\"\n  fi\n  export DXVK_HUD=\"${DXVK_HUD:-fps}\"\nelse\n  export DXVK_HUD=\"${DXVK_HUD:-0}\"\nfi\n\n# Keep Vulkan ICD selection to the runtime/driver defaults unless user explicitly overrides.\n\nif [[ -z \"${ALSOFT_DISABLE_CPU_EXTS:-}\" ]]; then\n  export ALSOFT_DISABLE_CPU_EXTS=\"all\"\nfi\nif [[ -z \"${ALSOFT_DRIVERS:-}\" ]]; then\n  export ALSOFT_DRIVERS=\"pulse,alsa,oss,jack,null,wave\"\nfi\n\nif [[ -z \"${CNC_GENERALS_INSTALLPATH:-}\" ]]; then\n  for candidate in \\\n    \"${HOME}/GeneralsX/Generals\" \\\n    \"${HOME}/.local/share/GeneralsX/Generals\"; do\n    if [[ -d \"${candidate}\" ]]; then\n      export CNC_GENERALS_INSTALLPATH=\"${candidate}/\"\n      break\n    fi\n  done\nfi\n\nif [[ -z \"${CNC_GENERALS_INSTALLPATH:-}\" ]]; then\n  echo \"ERROR: Could not find game data directory inside Flatpak sandbox.\" >&2\n  exit 1\nfi\n\ncd \"${CNC_GENERALS_INSTALLPATH}\"\n\n# SagePatch INI override: the engine now auto-creates SagePatch.ini with\n# defaults in the user data directory on first run.\n\nexec /app/bin/GeneralsX \"$@\"\nEOF\n",
     "chmod +x /app/bin/run.sh"
    ],
    "sources": [
     {
      "type": "dir",
      "path": ".."
     },
     {
      "type": "archive",
      "url": "https://github.com/libsdl-org/SDL/releases/download/release-3.4.2/SDL3-3.4.2.tar.gz",
      "sha256": "ef39a2e3f9a8a78296c40da701967dd1b0d0d6e267e483863ce70f8a03b4050c",
      "dest": "sdl3-src",
      "strip-components": 1
     },
     {
      "type": "archive",
      "url": "https://github.com/libsdl-org/SDL_image/releases/download/release-3.4.0/SDL3_image-3.4.0.tar.gz",
      "sha256": "2ceb75eab4235c2c7e93dafc3ef3268ad368ca5de40892bf8cffdd510f29d9d8",
      "dest": "sdl3-image-src",
      "strip-components": 1
     },
     {
      "type": "archive",
      "url": "https://github.com/kcat/openal-soft/archive/refs/tags/1.24.2.tar.gz",
      "sha256": "7efd383d70508587fbc146e4c508771a2235a5fc8ae05bf6fe721c20a348bd7c",
      "dest": "openal-soft-src",
      "strip-components": 1
     },
     {
      "type": "archive",
      "url": "https://github.com/doitsujin/dxvk/releases/download/v2.6/dxvk-native-2.6-steamrt-sniper.tar.gz",
      "sha256": "9c1a2b2c8a6565e71bde5f18b6c1a7e0ac4d621023bd38004a421a5fef4212ac",
      "dest": "dxvk-src",
      "strip-components": 1
     },
     {
      "type": "git",
      "url": "https://github.com/TheAssemblyArmada/GamespySDK.git",
      "commit": "07e3d15c500415abc281efb74322ab6d9c857eb8",
      "dest": "gamespy-src"
     },
     {
      "type": "git",
      "url": "https://github.com/TheSuperHackers/lzhl-1.0",
      "commit": "dfd96e2ca64adaddb35dd4ebadd6add7d5586783",
      "dest": "lzhl-src/CompLibHeader"
     }
    ]
   }
  ]
 }
}