---
app-id: dev.lizardbyte.sunshine
runtime: org.freedesktop.Platform
runtime-version: "22.08"
sdk: org.freedesktop.Sdk
sdk-extensions:
  - org.freedesktop.Sdk.Extension.node18
  - org.freedesktop.Sdk.Extension.vala
command: sunshine
separate-locales: false
finish-args:
  - --device=all  # access all devices
  - --env=PULSE_PROP_media.category=Manager  # allow sunshine to manage audio sinks
  - --env=SUNSHINE_MIGRATE_CONFIG=1  # migrate config files to the new location
  - --filesystem=home  # need to save files in user's home directory
  - --share=ipc  # required for X11 shared memory extension
  - --share=network  # access network
  - --socket=pulseaudio  # play sounds using pulseaudio
  - --socket=wayland  # show windows using Wayland
  - --socket=x11  # show windows using X11
  - --system-talk-name=org.freedesktop.Avahi  # talk to avahi on the system bus
  - --talk-name=org.freedesktop.Flatpak  # talk to flatpak on the session bus

cleanup:
  - /include
  - /lib/cmake
  - /lib/pkgconfig
  - /lib/*.la
  - /lib/*.a
  - /share/man

build-options:
  append-path: /usr/lib/sdk/vala/bin
  prepend-ld-library-path: /usr/lib/sdk/vala/lib

modules:
  - "org.flatpak.Builder.BaseApp/xvfb.json"

  - name: boost
    disabled: false
    buildsystem: simple
    build-commands:
      - cd tools/build && bison -y -d -o src/engine/jamgram.cpp src/engine/jamgram.y
      - ./bootstrap.sh --prefix=$FLATPAK_DEST --with-libraries=locale,log,program_options,system,thread
      - ./b2 install variant=release link=shared runtime-link=shared cxxflags="$CXXFLAGS" linkflags="$LDFLAGS"
        -j $FLATPAK_BUILDER_N_JOBS
    sources:
      - type: archive
        url: http://archive.ubuntu.com/ubuntu/pool/main/b/boost1.74/boost1.74_1.74.0.orig.tar.xz
        sha256: 2467be4af625b5ae4b3c93fc7af196a09eba39c11a7338cd9e8b356fa44d2f45
      - type: archive
        url: http://archive.ubuntu.com/ubuntu/pool/main/b/boost1.74/boost1.74_1.74.0-18.1ubuntu3.debian.tar.xz
        sha256: d5660bdce3ea4ac66194b0c4bc6dc3b9d43d41cc16af8bc6024980d965e40ae2
      - type: shell
        commands:
          - for n in $(cat patches/series); do if [[ $n != "#"* ]]; then patch -Np1 -i "patches/$n" -d .; fi; done

  - name: avahi
    disabled: false
    cleanup:
      - /bin
      - /lib/avahi
      - /share
    config-opts:
      - --with-distro=none
      - --disable-gobject
      - --disable-introspection
      - --disable-qt3
      - --disable-qt4
      - --disable-qt5
      - --disable-gtk
      - --disable-core-docs
      - --disable-manpages
      - --disable-libdaemon
      - --disable-python
      - --disable-pygobject
      - --disable-mono
      - --disable-monodoc
      - --disable-autoipd
      - --disable-doxygen-doc
      - --disable-doxygen-dot
      - --disable-doxygen-xml
      - --disable-doxygen-html
      - --disable-manpages
      - --disable-xmltoman
      - --disable-libevent
    sources:
      - type: archive
        url: http://archive.ubuntu.com/ubuntu/pool/main/a/avahi/avahi_0.8.orig.tar.gz
        sha256: 060309d7a333d38d951bc27598c677af1796934dbd98e1024e7ad8de798fedda
      - type: archive
        url: http://archive.ubuntu.com/ubuntu/pool/main/a/avahi/avahi_0.8-6ubuntu1.debian.tar.xz
        sha256: ebf1dfe5e853b6bc6843e3bd784cb6af632041f305abd0e5415114f80c1dcea4
      - type: shell
        commands:
          - for n in $(cat patches/series); do if [[ $n != "#"* ]]; then patch -Np1 -i "patches/$n" -d .; fi; done
          - autoreconf -ivf

  # yamllint disable-line rule:line-length
  # https://github.com/flathub/org.localsend.localsend_app/blob/7465669c22a2a4fc35e707e1e4e7e882772adc0e/org.localsend.localsend_app.yml#L27-L106
  # https://github.com/flathub/app.vup.Vup/blob/8c5073c7c5b8f24805013abc85a0860ca2439396/app.vup.Vup.yaml#L30-L78
  - name: libayatana-appindicator
    buildsystem: cmake-ninja
    config-opts:
      - -DENABLE_BINDINGS_MONO=NO
      - -DENABLE_BINDINGS_VALA=NO
    modules:
      - shared-modules/intltool/intltool-0.51.json
      - name: libdbusmenu-gtk3  # Dependency of libayatana-appindicator
        buildsystem: autotools
        build-options:
          cflags: -Wno-error
          env:
            HAVE_VALGRIND_FALSE: '#'
            HAVE_VALGRIND_TRUE: ''
        config-opts:
          - --with-gtk=3
          - --disable-dumper
          - --disable-static
          - --disable-tests
          - --disable-gtk-doc
          - --enable-introspection=no
          - --disable-vala
        sources:
          - type: archive
            url: https://launchpad.net/libdbusmenu/16.04/16.04.0/+download/libdbusmenu-16.04.0.tar.gz
            sha256: b9cc4a2acd74509435892823607d966d424bd9ad5d0b00938f27240a1bfa878a
        cleanup:
          - /include
          - /libexec
          - /lib/pkgconfig
          - /lib/*.la
          - /share/doc
          - /share/libdbusmenu
          - /share/gtk-doc
          - /share/gir-1.0
      - name: ayatana-ido
        buildsystem: cmake-ninja
        sources:
          - type: git
            url: https://github.com/AyatanaIndicators/ayatana-ido.git
            tag: 0.10.1
            commit: 13402a2cc4616b4b5f4244413599e635fcfc1401
            x-checker-data:
              type: anitya
              project-id: 18445
              tag-template: $version
              stable-only: true
      - name: libayatana-indicator
        buildsystem: cmake-ninja
        sources:
          - type: git
            url: https://github.com/AyatanaIndicators/libayatana-indicator.git
            tag: 0.9.3
            commit: a62e8ca13040554a8fc2536ce7e6aa888c5729d9
            x-checker-data:
              type: anitya
              project-id: 18447
              tag-template: $version
              stable-only: true
    sources:
      - type: git
        url: https://github.com/AyatanaIndicators/libayatana-appindicator.git
        tag: 0.5.92
        commit: d214fe3e7a6b1ba8faea68d70586310b34dc643c
        x-checker-data:
          type: anitya
          project-id: 18446
          tag-template: $version
          stable-only: true

  - name: libevdev
    disabled: false
    buildsystem: meson
    config-opts:
      - -Ddocumentation=disabled
      - -Dtests=disabled
    cleanup:
      - /bin
    sources:
      - type: archive
        url: http://archive.ubuntu.com/ubuntu/pool/main/libe/libevdev/libevdev_1.13.0+dfsg.orig.tar.xz
        sha256: a882e13ef1dd6bd227318080cabf60fe5af3c06471259d3acfc9dbfb202351a7
      - type: archive
        url: http://archive.ubuntu.com/ubuntu/pool/main/libe/libevdev/libevdev_1.13.0+dfsg-1.debian.tar.xz
        sha256: d33c56acbbfff2dc540e45c57a38d92210b5e7fd0947ac47fbe48183468aad74
      - type: shell
        commands:
          - for n in $(cat patches/series); do if [[ $n != "#"* ]]; then patch -Np1 -i "patches/$n" -d .; fi; done

  - name: libnotify
    buildsystem: meson
    config-opts:
      - -Dtests=false
      - -Dintrospection=disabled
      - -Dman=false
      - -Dgtk_doc=false
      - -Ddocbook_docs=disabled
    sources:
      - type: archive
        url: https://download.gnome.org/sources/libnotify/0.8/libnotify-0.8.2.tar.xz
        sha256: c5f4ed3d1f86e5b118c76415aacb861873ed3e6f0c6b3181b828cf584fc5c616
        x-checker-data:
          type: gnome
          name: libnotify
          stable-only: true
      - type: archive
        url: https://download.gnome.org/sources/gnome-common/3.18/gnome-common-3.18.0.tar.xz
        sha256: 22569e370ae755e04527b76328befc4c73b62bfd4a572499fde116b8318af8cf
        x-checker-data:
          type: gnome
          name: gnome-common
          stable-only: true

  - name: intel-mediasdk
    disabled: false
    buildsystem: cmake
    config-opts:
      - -DENABLE_OPENCL=ON
      - -DENABLE_X11_DRI3=ON
      - -DENABLE_WAYLAND=ON
      - -DENABLE_ITT=OFF
      - -DENABLE_TEXTLOG=OFF
      - -DENABLE_STAT=OFF
      - -DBUILD_ALL=OFF
      - -DBUILD_RUNTIME=ON
      - -DBUILD_SAMPLES=OFF
      - -DBUILD_TESTS=OFF
      - -DBUILD_TOOLS=OFF
      - -DUSE_SYSTEM_GTEST=OFF
      - -DMFX_ENABLE_KERNELS=ON
    only-arches:
      - x86_64
    sources:
      - type: archive
        url: http://archive.ubuntu.com/ubuntu/pool/universe/i/intel-mediasdk/intel-mediasdk_22.3.0.orig.tar.gz
        sha256: e1e74229f409e969b70c2b35b1955068de3d40db85ecc42bd6ff501468bc76d7
      - type: archive
        url: http://archive.ubuntu.com/ubuntu/pool/universe/i/intel-mediasdk/intel-mediasdk_22.3.0-1.debian.tar.xz
        sha256: 024d98d2f63443d2765a90cfe997d104e7b897694889f199ca8fb4d9ffdcf1dc
      - type: shell
        commands:
          - for n in $(cat patches/series); do if [[ $n != "#"* ]]; then patch -Np1 -i "patches/$n" -d .; fi; done
    modules:
      - name: libdrm
        disabled: false
        buildsystem: meson
        sources:
          - type: archive
            url: http://archive.ubuntu.com/ubuntu/pool/main/libd/libdrm/libdrm_2.4.110.orig.tar.xz
            sha256: eecee4c4b47ed6d6ce1a9be3d6d92102548ea35e442282216d47d05293cf9737
          - type: archive
            url: http://archive.ubuntu.com/ubuntu/pool/main/libd/libdrm/libdrm_2.4.110-1ubuntu1.debian.tar.xz
            sha256: 464b9553861f39beddfaee6b8924734b02a0febfae3968e4ca1360f2972bba8b
          - type: shell
            commands:
              - for n in $(cat patches/series); do if [[ $n != "#"* ]]; then patch -Np1 -i "patches/$n" -d .; fi; done

  - name: miniupnpc
    buildsystem: cmake
    config-opts:
      - -DUPNPC_BUILD_SAMPLE=OFF
      - -DUPNPC_BUILD_SHARED=ON
      - -DUPNPC_BUILD_TESTS=OFF
    sources:
      - type: archive
        url: http://archive.ubuntu.com/ubuntu/pool/main/m/miniupnpc/miniupnpc_2.2.5.orig.tar.gz
        sha256: 38acd5f4602f7cf8bcdc1ec30b2d58db2e9912e5d9f5350dd99b06bfdffb517c
      - type: archive
        url: http://archive.ubuntu.com/ubuntu/pool/main/m/miniupnpc/miniupnpc_2.2.5-1.debian.tar.xz
        sha256: f6ab181f3c999ae0630508ea1e6c76ae302262414061acaab12bf8763431ffd1
      - type: shell
        commands:
          - for n in $(cat patches/series); do if [[ $n != "#"* ]]; then patch -Np1 -i "patches/$n" -d .; fi; done

  - name: numactl
    buildsystem: autotools
    make-args:
      - install
    sources:
      - type: archive
        url: http://archive.ubuntu.com/ubuntu/pool/main/n/numactl/numactl_2.0.14.orig.tar.gz
        sha256: 1ee27abd07ff6ba140aaf9bc6379b37825e54496e01d6f7343330cf1a4487035
      - type: archive
        url: http://archive.ubuntu.com/ubuntu/pool/main/n/numactl/numactl_2.0.14-3ubuntu2.debian.tar.xz
        sha256: 49089e5be5367f6367f8b0389d1d523944432607783b53f0605705792e1015ee
      - type: shell
        commands:
          - for n in $(cat patches/series); do if [[ $n != "#"* ]]; then patch -Np1 -i "patches/$n" -d .; fi; done
    cleanup:
      - "/bin"

  # Caching is configured until here, not including CUDA
  - name: cuda
    disabled: false
    buildsystem: simple
    only-arches:
      - x86_64
      - aarch64
    cleanup:
      - "*"
    build-commands:
      - chmod u+x ./cuda.run
      - ./cuda.run --silent --toolkit --toolkitpath=$FLATPAK_DEST/cuda --no-opengl-libs --no-man-page --no-drm
        --tmpdir=$FLATPAK_BUILDER_BUILDDIR
      - rm -r $FLATPAK_DEST/cuda/nsight-systems-*
      - rm ./cuda.run
    sources:
      - type: file
        only-arches:
          - x86_64
        url: https://developer.download.nvidia.com/compute/cuda/12.0.0/local_installers/cuda_12.0.0_525.60.13_linux.run
        sha256: 905e9b9516900839fb76064719db752439f38b8cb730b49335d8bd53ddfad392
        dest-filename: cuda.run
      - type: file
        only-arches:
          - aarch64
        url: https://developer.download.nvidia.com/compute/cuda/12.0.0/local_installers/cuda_12.0.0_525.60.13_linux_sbsa.run  # yamllint disable-line rule:line-length
        sha256: cd13e9c65d4c8f895a968706f46064d536be09f9706bce081cc864b7e4fa4544
        dest-filename: cuda.run

  - name: sunshine
    disabled: false
    buildsystem: cmake
    no-make-install: false
    builddir: true
    build-options:
      append-path: /usr/lib/sdk/node18/bin
      build-args:
        - --share=network
      env:
        BUILD_VERSION: "@BUILD_VERSION@"
        BRANCH: "@GITHUB_BRANCH@"
        COMMIT: "@GITHUB_COMMIT@"
        npm_config_nodedir: /usr/lib/sdk/node18
        NPM_CONFIG_LOGLEVEL: info
    config-opts:
      - -DBUILD_WERROR=ON
      - -DCMAKE_BUILD_TYPE=Release
      - -DCMAKE_INSTALL_PREFIX=/app
      - -DCMAKE_CUDA_COMPILER=/app/cuda/bin/nvcc
      - -DSUNSHINE_ASSETS_DIR=share/sunshine
      - -DSUNSHINE_EXECUTABLE_PATH=/app/bin/sunshine
      - -DSUNSHINE_ENABLE_WAYLAND=ON
      - -DSUNSHINE_ENABLE_X11=ON
      - -DSUNSHINE_ENABLE_DRM=ON
      - -DSUNSHINE_ENABLE_CUDA=ON
      - -DSUNSHINE_BUILD_FLATPAK=ON
      - -DTESTS_ENABLE_PYTHON_TESTS=OFF
    sources:
      - type: git
        url: "@GITHUB_CLONE_URL@"
        branch: "@GITHUB_BRANCH@"
        commit: "@GITHUB_COMMIT@"
    post-install:
      # use `sed` to update apps.json with prefixes required for flatpak
      # -r (regex)
      # -z (handle new lines) https://linuxhint.com/sed-replace-newline-with-space
      # `/gm` global and multiline
      - sed -r -z -i -e
        's/("((do)|(undo)|(cmd)|(detached))"\s*:\s*\[?\n*\s*")(.*")/\1flatpak-spawn --host \7/gm'
        /app/share/sunshine/apps.json
      - sed -i
        's%/app/bin/sunshine%flatpak run dev.lizardbyte.sunshine\nExecStop=flatpak kill dev.lizardbyte.sunshine%g'
        /app/share/sunshine/systemd/user/sunshine.service
      - install -D $FLATPAK_BUILDER_BUILDDIR/packaging/linux/flatpak/scripts/* /app/bin
    run-tests: true
    test-rule: ""  # empty to disable
    test-commands:
      - xvfb-run tests/test_sunshine --gtest_color=yes
