app-id: com.orcaslicer.OrcaSlicer
runtime: org.gnome.Platform
runtime-version: "49"
sdk: org.gnome.Sdk
sdk-extensions:
  - org.freedesktop.Sdk.Extension.llvm21
command: entrypoint
separate-locales: true
rename-icon: OrcaSlicer
build-options:
  append-path: /usr/lib/sdk/llvm21/bin
  prepend-ld-library-path: /usr/lib/sdk/llvm21/lib
  env:
    CC: clang
    CXX: clang++
    LDFLAGS: "-fuse-ld=lld"
finish-args:
  - --share=ipc
  - --socket=x11
  - --socket=wayland
  - --share=network
  - --device=all
  - --filesystem=home
  - --filesystem=xdg-run/gvfs
  - --filesystem=/run/media
  - --filesystem=/media
  - --filesystem=/run/spnav.sock:ro
  # Allow read-only access to OrcaSlicer's legacy config and cache directories (if they exist) for migration purposes.
  - --filesystem=~/.var/app/io.github.orcaslicer.OrcaSlicer:ro
  # Allow OrcaSlicer to own and talk to instance-check D-Bus names (InstanceCheck.cpp)
  - --talk-name=com.orcaslicer.OrcaSlicer.InstanceCheck.*
  - --own-name=com.orcaslicer.OrcaSlicer.InstanceCheck.*
  - --system-talk-name=org.freedesktop.UDisks2
  - --env=SPNAV_SOCKET=/run/spnav.sock

modules:

  # JPEG codec for the liveview
  - name: gst-plugins-good
    buildsystem: meson
    config-opts:
      - -Dauto_features=disabled
      - -Djpeg=enabled
      - -Ddoc=disabled
      - -Dexamples=disabled
      - -Dtests=disabled
    sources:
      - type: archive
        url: https://gstreamer.freedesktop.org/src/gst-plugins-good/gst-plugins-good-1.22.8.tar.xz
        sha256: e305b9f07f52743ca481da0a4e0c76c35efd60adaf1b0694eb3bb021e2137e39

  - name: glu
    build-options:
      cxxflags: -Wno-register
    config-opts:
      - --disable-static
    sources:
      - type: archive
        url: https://ftp.osuosl.org/pub/blfs/conglomeration/glu/glu-9.0.2.tar.xz
        sha256: 6e7280ff585c6a1d9dfcdf2fca489251634b3377bfc33c29e4002466a38d02d4
    cleanup:
      - /include
      - /lib/*.a
      - /lib/*.la
      - /lib/pkgconfig

  - name: kde-extra-cmake-modules
    buildsystem: cmake-ninja
    sources:
      - type: git
        url: https://github.com/KDE/extra-cmake-modules
        tag: v5.249.0
        commit: 008ae77d0cd2a97c346228ab30b99279643e5022
    cleanup:
      - /

  - name: libspnav
    sources:
      - type: archive
        url: https://github.com/FreeSpacenav/libspnav/releases/download/v1.2/libspnav-1.2.tar.gz
        sha256: 093747e7e03b232e08ff77f1ad7f48552c06ac5236316a5012db4269951c39db

  # wxWidgets built as a separate module for Flathub (no network at build time)
  # Config-opts mirror deps/wxWidgets/wxWidgets.cmake with FLATPAK=ON, DEP_WX_GTK3=ON
  - name: wxWidgets
    buildsystem: cmake-ninja
    build-options:
      env:
        CMAKE_POLICY_VERSION_MINIMUM: "3.5"
    config-opts:
      - -DCMAKE_BUILD_TYPE=Release
      - -DwxBUILD_PRECOMP=ON
      - -DwxBUILD_TOOLKIT=gtk3
      - -DCMAKE_DEBUG_POSTFIX:STRING=d
      - -DwxBUILD_DEBUG_LEVEL=0
      - -DwxBUILD_SAMPLES=OFF
      - -DwxBUILD_SHARED=ON
      - -DBUILD_SHARED_LIBS=ON
      - -DwxUSE_MEDIACTRL=ON
      - -DwxUSE_DETECT_SM=OFF
      - -DwxUSE_PRIVATE_FONTS=ON
      - -DwxUSE_OPENGL=ON
      - -DwxUSE_GLCANVAS_EGL=ON
      - -DwxUSE_WEBREQUEST=ON
      - -DwxUSE_WEBVIEW=ON
      - -DwxUSE_WEBVIEW_EDGE=OFF
      - -DwxUSE_WEBVIEW_IE=OFF
      - -DwxUSE_REGEX=builtin
      - -DwxUSE_LIBSDL=OFF
      - -DwxUSE_XTEST=OFF
      - -DwxUSE_STC=OFF
      - -DwxUSE_AUI=ON
      - -DwxUSE_LIBPNG=sys
      - -DwxUSE_ZLIB=sys
      - -DwxUSE_LIBJPEG=sys
      - -DwxUSE_LIBTIFF=OFF
      - -DwxUSE_EXPAT=sys
      - -DCMAKE_EXE_LINKER_FLAGS=-fuse-ld=lld
      - -DCMAKE_SHARED_LINKER_FLAGS=-fuse-ld=lld
      - -DCMAKE_MODULE_LINKER_FLAGS=-fuse-ld=lld
    sources:
      # Use git instead of archive: wxWidgets 3.3 relies on multiple git
      # submodules (PCRE2, etc.) that are not included in GitHub tarballs.
      - type: git
        url: https://github.com/SoftFever/Orca-deps-wxWidgets.git
        tag: orca-3.3.2
        commit: db1005db3dea2c37a46fb455a9a02e37aa360751

  # OrcaSlicer C++ dependencies (built offline with pre-downloaded archives)
  - name: orca_deps
    buildsystem: simple
    build-options:
      env:
        BUILD_DIR: deps/build_flatpak
    build-commands:
      - |
        cmake -S deps -B $BUILD_DIR \
          -DFLATPAK=ON \
          -DDEP_DOWNLOAD_DIR=/run/build/orca_deps/external-packages \
          -DCMAKE_PREFIX_PATH=/app \
          -DDESTDIR=/app \
          -DCMAKE_INSTALL_PREFIX=/app \
          -DCMAKE_EXE_LINKER_FLAGS="-fuse-ld=lld" \
          -DCMAKE_SHARED_LINKER_FLAGS="-fuse-ld=lld" \
          -DCMAKE_MODULE_LINKER_FLAGS="-fuse-ld=lld"
      - cmake --build $BUILD_DIR --parallel
      - rm -rf /run/build/orca_deps/external-packages

    cleanup:
      - /include
      - "*.a"
      - "*.la"

    sources:
      # OrcaSlicer deps/ directory (avoids copying .git from worktree)
      - type: dir
        path: ../../deps
        dest: deps

      # ---------------------------------------------------------------
      # Pre-downloaded dependency archives
      # These are placed in external-packages/<Name>/ so CMake's
      # ExternalProject_Add finds them and skips network downloads.
      # ---------------------------------------------------------------

      # Boost 1.84.0
      - type: file
        url: https://github.com/boostorg/boost/releases/download/boost-1.84.0/boost-1.84.0.tar.gz
        sha256: 4d27e9efed0f6f152dc28db6430b9d3dfb40c0345da7342eaa5a987dde57bd95
        dest: external-packages/Boost

      # TBB v2021.5.0
      - type: file
        url: https://github.com/oneapi-src/oneTBB/archive/refs/tags/v2021.5.0.zip
        sha256: 83ea786c964a384dd72534f9854b419716f412f9d43c0be88d41874763e7bb47
        dest: external-packages/TBB

      # Cereal v1.3.0
      - type: file
        url: https://github.com/USCiLab/cereal/archive/refs/tags/v1.3.0.zip
        sha256: 71642cb54658e98c8f07a0f0d08bf9766f1c3771496936f6014169d3726d9657
        dest: external-packages/Cereal

      # Qhull v8.0.2
      - type: file
        url: https://github.com/qhull/qhull/archive/v8.0.2.zip
        sha256: a378e9a39e718e289102c20d45632f873bfdc58a7a5f924246ea4b176e185f1e
        dest: external-packages/Qhull

      # GLFW 3.4
      - type: file
        url: https://github.com/glfw/glfw/archive/refs/tags/3.4.zip
        sha256: a133ddc3d3c66143eba9035621db8e0bcf34dba1ee9514a9e23e96afd39fd57a
        dest: external-packages/GLFW

      # OpenCSG 1.4.2
      - type: file
        url: https://github.com/floriankirsch/OpenCSG/archive/refs/tags/opencsg-1-4-2-release.zip
        sha256: 51afe0db79af8386e2027d56d685177135581e0ee82ade9d7f2caff8deab5ec5
        dest: external-packages/OpenCSG

      # Blosc 1.17.0 (tamasmeszaros fork)
      - type: file
        url: https://github.com/tamasmeszaros/c-blosc/archive/refs/heads/v1.17.0_tm.zip
        sha256: dcb48bf43a672fa3de6a4b1de2c4c238709dad5893d1e097b8374ad84b1fc3b3
        dest: external-packages/Blosc

      # OpenEXR v2.5.5
      - type: file
        url: https://github.com/AcademySoftwareFoundation/openexr/archive/refs/tags/v2.5.5.zip
        sha256: 0307a3d7e1fa1e77e9d84d7e9a8694583fbbbfd50bdc6884e2c96b8ef6b902de
        dest: external-packages/OpenEXR

      # OpenVDB (custom fork)
      - type: file
        url: https://github.com/tamasmeszaros/openvdb/archive/a68fd58d0e2b85f01adeb8b13d7555183ab10aa5.zip
        sha256: f353e7b99bd0cbfc27ac9082de51acf32a8bc0b3e21ff9661ecca6f205ec1d81
        dest: external-packages/OpenVDB

      # GMP 6.2.1
      - type: file
        url: https://github.com/SoftFever/OrcaSlicer_deps/releases/download/gmp-6.2.1/gmp-6.2.1.tar.bz2
        sha256: eae9326beb4158c386e39a356818031bd28f3124cf915f8c5b1dc4c7a36b4d7c
        dest: external-packages/GMP

      # MPFR 4.2.2
      - type: file
        url: https://ftp.gnu.org/gnu/mpfr/mpfr-4.2.2.tar.bz2
        sha256: 9ad62c7dc910303cd384ff8f1f4767a655124980bb6d8650fe62c815a231bb7b
        dest: external-packages/MPFR

      # CGAL 5.6.3
      - type: file
        url: https://github.com/CGAL/cgal/releases/download/v5.6.3/CGAL-5.6.3.zip
        sha256: 5d577acb4a9918ccb960491482da7a3838f8d363aff47e14d703f19fd84733d4
        dest: external-packages/CGAL

      # NLopt v2.5.0
      - type: file
        url: https://github.com/stevengj/nlopt/archive/v2.5.0.tar.gz
        sha256: c6dd7a5701fff8ad5ebb45a3dc8e757e61d52658de3918e38bab233e7fd3b4ae
        dest: external-packages/NLopt

      # libnoise 1.0
      - type: file
        url: https://github.com/SoftFever/Orca-deps-libnoise/archive/refs/tags/1.0.zip
        sha256: 96ffd6cc47898dd8147aab53d7d1b1911b507d9dbaecd5613ca2649468afd8b6
        dest: external-packages/libnoise

      # Draco 1.5.7
      - type: file
        url: https://github.com/google/draco/archive/refs/tags/1.5.7.zip
        sha256: 27b72ba2d5ff3d0a9814ad40d4cb88f8dc89a35491c0866d952473f8f9416b77
        dest: external-packages/Draco

      # OpenSSL 1.1.1w (GNOME SDK has 3.x; OrcaSlicer requires 1.1.x)
      - type: file
        url: https://github.com/openssl/openssl/archive/OpenSSL_1_1_1w.tar.gz
        sha256: 2130e8c2fb3b79d1086186f78e59e8bc8d1a6aedf17ab3907f4cb9ae20918c41
        dest: external-packages/OpenSSL

      # CURL 7.75.0 (built from source to link against OpenSSL 1.1.x)
      - type: file
        url: https://github.com/curl/curl/archive/refs/tags/curl-7_75_0.zip
        sha256: a63ae025bb0a14f119e73250f2c923f4bf89aa93b8d4fafa4a9f5353a96a765a
        dest: external-packages/CURL

      # OCCT (OpenCASCADE) V7_6_0
      - type: file
        url: https://github.com/Open-Cascade-SAS/OCCT/archive/refs/tags/V7_6_0.zip
        sha256: 28334f0e98f1b1629799783e9b4d21e05349d89e695809d7e6dfa45ea43e1dbc
        dest: external-packages/OCCT

      # OpenCV 4.6.0
      - type: file
        url: https://github.com/opencv/opencv/archive/refs/tags/4.6.0.tar.gz
        sha256: 1ec1cba65f9f20fe5a41fda1586e01c70ea0c9a6d7b67c9e13edf0cfe2239277
        dest: external-packages/OpenCV

      # ---------------------------------------------------------------
      # Fallback archives for deps normally provided by the GNOME SDK.
      # These are only used if find_package() fails to locate them.
      # ---------------------------------------------------------------

      # ZLIB 1.2.13
      - type: file
        url: https://github.com/madler/zlib/archive/refs/tags/v1.2.13.zip
        sha256: c2856951bbf30e30861ace3765595d86ba13f2cf01279d901f6c62258c57f4ff
        dest: external-packages/ZLIB

      # libpng 1.6.35
      - type: file
        url: https://github.com/glennrp/libpng/archive/refs/tags/v1.6.35.zip
        sha256: 3d22d46c566b1761a0e15ea397589b3a5f36ac09b7c785382e6470156c04247f
        dest: external-packages/PNG

      # libjpeg-turbo 3.0.1
      - type: file
        url: https://github.com/libjpeg-turbo/libjpeg-turbo/archive/refs/tags/3.0.1.zip
        sha256: d6d99e693366bc03897677650e8b2dfa76b5d6c54e2c9e70c03f0af821b0a52f
        dest: external-packages/JPEG

      # Freetype 2.12.1
      - type: file
        url: https://github.com/SoftFever/orca_deps/releases/download/freetype-2.12.1.tar.gz/freetype-2.12.1.tar.gz
        sha256: efe71fd4b8246f1b0b1b9bfca13cfff1c9ad85930340c27df469733bbb620938
        dest: external-packages/FREETYPE

  - name: OrcaSlicer
    buildsystem: simple
    build-commands:
      - |
        cmake . -B build_flatpak \
          -DFLATPAK=ON \
          -DCMAKE_BUILD_TYPE=Release \
          -DCMAKE_PREFIX_PATH=/app \
          -DCMAKE_INSTALL_PREFIX=/app \
          -DCMAKE_EXE_LINKER_FLAGS="-fuse-ld=lld" \
          -DCMAKE_SHARED_LINKER_FLAGS="-fuse-ld=lld" \
          -DCMAKE_MODULE_LINKER_FLAGS="-fuse-ld=lld"
      - cmake --build build_flatpak --target OrcaSlicer -j$FLATPAK_BUILDER_N_JOBS
      - ./scripts/run_gettext.sh
      - cmake --build build_flatpak --target install -j$FLATPAK_BUILDER_N_JOBS

    cleanup:
      - /include

    post-install:

      - | # Desktop integration files
        install -Dm644 -t /app/share/icons/hicolor/scalable/apps/ resources/images/OrcaSlicer.svg
        install -Dm644 ${FLATPAK_ID}.metainfo.xml /app/share/metainfo/${FLATPAK_ID}.metainfo.xml
        desktop-file-edit --set-key=Exec --set-value="entrypoint %U" /app/share/applications/${FLATPAK_ID}.desktop
        install -Dm755 entrypoint /app/bin
        install -Dm755 umount /app/bin

      - install -Dm644 LICENSE.txt /app/share/licenses/${FLATPAK_ID}/LICENSE.txt

      - | # Install fonts into fontconfig-scanned directory so Pango finds them
        # before initialization (avoids ensure_faces crash from AddPrivateFont)
        install -Dm644 -t /app/share/fonts/OrcaSlicer/ resources/fonts/*.ttf
        fc-cache -f /app/share/fonts/OrcaSlicer/

    sources:
      # OrcaSlicer source tree (specific dirs to avoid copying .git from worktree)
      - type: dir
        path: ../../cmake
        dest: cmake
      - type: dir
        path: ../../deps_src
        dest: deps_src
      - type: dir
        path: ../../resources
        dest: resources
      - type: dir
        path: ../../src
        dest: src
      - type: dir
        path: ../../localization
        dest: localization

      - type: file
        path: ../../CMakeLists.txt
      - type: file
        path: ../../LICENSE.txt
      - type: file
        path: ../../version.inc
      - type: file
        path: ../run_gettext.sh
        dest: scripts

      # AppData metainfo for GNOME Software & Co.
      - type: file
        path: com.orcaslicer.OrcaSlicer.metainfo.xml

      # Startup script
      - type: file
        path: entrypoint

      # umount wrapper used to redirect umount calls to UDisks2
      - type: file
        path: umount
