app-id: net.retrodeck.retrodeck
runtime: org.kde.Platform
runtime-version: '5.15-21.08'
sdk: org.kde.Sdk
# Needed for rpcs3
sdk-extensions:
  - org.freedesktop.Sdk.Extension.llvm13
# /Needed for rpcs3
# Needed for Yuzu
base: io.qt.qtwebengine.BaseApp
base-version: 5.15-21.08
# /Needed for Yuzu
command: retrodeck.sh

finish-args:
   - --socket=x11
   - --socket=wayland
   - --socket=pulseaudio
   - --share=ipc
   - --share=network
   - --device=all
   - --filesystem=~/retrodeck:create
   - --filesystem=/run/media
   - --filesystem=/media
   - --allow=multiarch
   - --talk-name=org.freedesktop.ScreenSaver
   - --talk-name=org.freedesktop.PowerManagement.Inhibit
   - --talk-name=org.freedesktop.login1
   - --filesystem=xdg-run/app/com.discordapp.Discord:create
  # Yuzu
   - --filesystem=home:ro
  # - --filesystem=/run/media:ro
  # Dolphin
   - --allow=bluetooth
  #- --env=QT_QPA_PLATFORM=xcb not sure if this will break something
  # rpcs3
   - --socket=fallback-x11

cleanup:
  # ES-DE
  - /include
  - /share/ffmpeg
  - /lib/cmake
  #- /lib/debug
  - /lib/pkgconfig
  # Yuzu
  - /include
  - /bin/glslangValidator
  - /bin/zip*
  - /bin/zstd*
  - /lib/pkg-config
  - /share/doc
  - /share/man
  - /src
  - '*.a'
  - '*.la'
cleanup-commands:
  # Yuzu
  - /app/cleanup-BaseApp.sh

modules:

  - name: xmlstarlet
    config-opts:
      - --disable-static-libs
      - --with-libxml-libs-prefix=/usr/lib
      - --with-libxml-include-prefix=/usr/include/libxml2
    sources:
      - type: archive
        url: https://downloads.sourceforge.net/xmlstar/xmlstarlet-1.6.1.tar.gz
        sha256: 15d838c4f3375332fd95554619179b69e4ec91418a3a5296e7c631b7ed19e7ca
      - type: shell
        commands:
          - cp -p /usr/share/automake-*/config.{sub,guess} .
          - autoreconf -vfi
    post-install:
      - ln -s "xml" "${FLATPAK_DEST}/bin/xmlstarlet" ||:
    cleanup: ["*"]

  - name: kdialog
    buildsystem: cmake-ninja
    sources:
    - type: git
      url: https://github.com/KDE/kdialog.git
      tag: v22.03.80

  # ES-DE

  - name: ffmpeg
    config-opts:
    - --disable-static
    - --disable-programs
    - --disable-doc
    - --enable-gpl
    - --enable-shared
    - --enable-libvorbis
    - --enable-libopus
    - --enable-libvpx
    - --enable-postproc
    sources:
    - type: git
      url: https://github.com/FFmpeg/FFmpeg.git
      tag: n5.0

  - name: freeimage
    no-autogen: true
    build-options:
        cxxflags: -std=c++14
    make-args:
    - DESTDIR=/app
    sources:
    - type: archive
      url: http://downloads.sourceforge.net/freeimage/FreeImage3180.zip
      sha256: f41379682f9ada94ea7b34fe86bf9ee00935a3147be41b6569c9605a53e438fd
    - type: shell
      commands:
      - sed -i 's|-o root -g root ||' ./Makefile.gnu
      - sed -i 's|/usr|/app|' ./Makefile.gnu

  - name: pugixml
    buildsystem: cmake-ninja
    config-opts:
    - -DBUILD_SHARED_LIBS=on .
    sources:
    - type: archive
      url: https://github.com/zeux/pugixml/releases/download/v1.11.4/pugixml-1.11.4.tar.gz
      sha256: 8ddf57b65fb860416979a3f0640c2ad45ddddbbafa82508ef0a0af3ce7061716

  - name: emulationstation-de
    buildsystem: cmake-ninja
    cleanup:
      - es-app
      - es-core
    sources:
    - type: git
      url: https://gitlab.com/leonstyhre/emulationstation-de.git
      branch: 3cb464c7adcea8d020cdff92803c64b7f72fb443

  # ES-DE - END

  - name: art-book-next
    buildsystem: simple
    build-commands:
      - mkdir -p ${FLATPAK_DEST}/share/emulationstation/themes/art-book-next-de/
      - mv -f * ${FLATPAK_DEST}/share/emulationstation/themes/art-book-next-de/
    sources:
      - type: git
        url: https://github.com/anthonycaccese/art-book-next-de.git
        commit: 4452f8356819d3cd079549b113fb15edb919a0df


  # External manifests start

  # RetroArch - https://github.com/flathub/org.libretro.RetroArch

  - name: retroarch
    config-opts:
      - '--enable-dbus'
    make-args:
      - GLOBAL_CONFIG_DIR=${FLATPAK_DEST}/etc
    sources:
      - type: git
        url: https://github.com/libretro/RetroArch.git
        branch: de4e56ecf28a09057734f8624af6d62f3088734f
      - type: file
        path: rd-submodules/retroarch/retroarch.cfg
    post-install:
      - mkdir -p ${FLATPAK_DEST}/share/icons/hicolor/scalable/apps/
      - >-
        mv ${FLATPAK_DEST}/share/pixmaps/retroarch.svg
        ${FLATPAK_DEST}/share/icons/hicolor/scalable/apps/
      - rmdir --ignore-fail-on-non-empty ${FLATPAK_DEST}/share/pixmaps/
      - mkdir -p ${FLATPAK_DEST}/etc
      - >-
        sed s:@prefix@:${FLATPAK_DEST}:g retroarch.cfg >
        ${FLATPAK_DEST}/etc/retroarch.cfg
    modules:
      - rd-submodules/retroarch/nvidia-cg-toolkit/nvidia-cg-toolkit-3.1.0013.json
      - shared-modules/SDL/SDL-1.2.15.json
      - shared-modules/SDL/SDL_image-1.2.12.json
      - shared-modules/SDL/SDL_mixer-1.2.12.json
      - shared-modules/SDL/SDL_net-1.2.8.json
      - shared-modules/libusb/libusb.json
      - shared-modules/gudev/gudev.json
      - rd-submodules/retroarch/libbz2/libbz2-1.0.8.json
      - rd-submodules/retroarch/libaio/libaio-0.3.112.json
      - shared-modules/glu/glu-9.json
      - rd-submodules/retroarch/libdecor/libdecor-0.1.0.json
  - name: retroarch-filers-video
    subdir: gfx/video_filters
    make-install-args:
      - PREFIX=${FLATPAK_DEST}
    sources:
      - type: git
        url: https://github.com/libretro/RetroArch.git
        branch: de4e56ecf28a09057734f8624af6d62f3088734f
  - name: retroarch-filers-audio
    subdir: libretro-common/audio/dsp_filters
    make-install-args:
      - PREFIX=${FLATPAK_DEST}
    sources:
      - type: git
        url: https://github.com/libretro/RetroArch.git
        branch: de4e56ecf28a09057734f8624af6d62f3088734f
  - name: retroarch-assets
    make-install-args:
      - PREFIX=${FLATPAK_DEST}
    sources:
      - type: git
        url: https://github.com/libretro/retroarch-assets.git
        commit: f45dd1351e6bfb9f01e12bee8d358ad22a2bb8f9
  - name: libretro-database
    make-install-args:
      - PREFIX=${FLATPAK_DEST}
    sources:
      - type: git
        url: https://github.com/libretro/libretro-database.git
        commit: 1754130f72d8c00a512797bf85442576258279e8
  - name: libretro-core-info
    make-install-args:
      - PREFIX=${FLATPAK_DEST}
    sources:
      - type: git
        url: https://github.com/libretro/libretro-core-info.git
        commit: 1b2472eca14a5a187ff298ace1b614fd3d47bc7c
  - name: retroarch-joypad-autoconfig
    make-install-args:
      - PREFIX=${FLATPAK_DEST}
    sources:
      - type: git
        url: https://github.com/libretro/retroarch-joypad-autoconfig.git
        commit: 0eb3ad2666e6bdc2de2cde4c5d4af29b8c7f2c67
  - name: common-shaders
    make-install-args:
      - PREFIX=${FLATPAK_DEST}
    sources:
      - type: git
        url: https://github.com/libretro/common-shaders.git
        commit: 55e401834b732e62c34411321c4ffd82524345d4
  - name: slang-shaders
    make-install-args:
      - PREFIX=${FLATPAK_DEST}
    sources:
      - type: git
        url: https://github.com/libretro/slang-shaders.git
        commit: 77558d5f2ac807b27201fb888cbf2caee8e289fa
  - name: glsl-shaders
    make-install-args:
      - PREFIX=${FLATPAK_DEST}
    sources:
      - type: git
        url: https://github.com/libretro/glsl-shaders.git
        commit: 20801b38aa2c89a2beb9f57ffbbbcea7256e2523
  - name: common-overlays
    make-install-args:
      - PREFIX=${FLATPAK_DEST}
    sources:
      - type: git
        url: https://github.com/libretro/common-overlays.git
        commit: db9744f4e58a740f0f10b04b62af347cd6f01928

  # RetroArch - END

  # Not part of the offical RetroArch manifest
  - name: retroarch-cores
    buildsystem: simple
    build-commands:
        - mkdir -p /app/share/libretro/cores/
        - mv ./RetroArch-Linux-x86_64.AppImage.home/.config/retroarch/cores/* /app/share/libretro/cores/
    sources:
      - type: archive
        url: https://buildbot.libretro.com/stable/1.10.2/linux/x86_64/RetroArch_cores.7z
        sha256: 0c59f99534a1ae3a2d34b1747c40398325e53db69acfab35b99c8fa8d76430e5

  # Yuzu - https://github.com/flathub/org.yuzu_emu.yuzu

  - name: libzip
    buildsystem: cmake-ninja
    config-opts:
      - '-DCMAKE_BUILD_TYPE=RelWithDebInfo'
    sources:
      - type: archive
        url: https://github.com/nih-at/libzip/archive/v1.8.0.tar.gz
        sha256: 83e5d6d5dbe8f9df80aad388fa523ca3558398ed440a5afda6ef9b36b0ffdc1f
        x-checker-data:
          type: anitya
          project-id: 10649
          url-template: https://github.com/nih-at/libzip/archive/v$version.tar.gz
  - name: zstd
    buildsystem: simple
    build-commands:
      - make -j $FLATPAK_BUILDER_N_JOBS
      - make PREFIX=/ DESTDIR="${FLATPAK_DEST}" install
    sources:
      - type: archive
        url: >-
          https://github.com/facebook/zstd/releases/download/v1.5.2/zstd-1.5.2.tar.gz
        sha256: 7c42d56fac126929a6a85dbc73ff1db2411d04f104fae9bdea51305663a83fd0
        x-checker-data:
          type: anitya
          project-id: 12083
          url-template: >-
            https://github.com/facebook/zstd/releases/download/v$version/zstd-$version.tar.gz
  - name: fmt
    buildsystem: cmake-ninja
    config-opts:
      - '-DFMT_TEST=OFF'
    sources:
      - type: archive
        url: https://github.com/fmtlib/fmt/releases/download/8.1.1/fmt-8.1.1.zip
        sha256: 23778bad8edba12d76e4075da06db591f3b0e3c6c04928ced4a7282ca3400e5d
        x-checker-data:
          type: anitya
          project-id: 11526
          url-template: >-
            https://github.com/fmtlib/fmt/releases/download/$version/fmt-$version.zip
  - name: glslang
    buildsystem: cmake-ninja
    config-opts:
      - '-DCMAKE_BUILD_TYPE=Release'
    sources:
      - type: archive
        url: https://github.com/KhronosGroup/glslang/archive/11.8.0.tar.gz
        sha256: 9e5fbe5b844d203da5e61bcd84eda76326e0ff5dc696cb862147bbe01d2febb0
        x-checker-data:
          type: anitya
          stable-only: true
          project-id: 205796
          url-template: https://github.com/KhronosGroup/glslang/archive/$version.tar.gz
  - name: catch2
    buildsystem: cmake-ninja
    config-opts:
      - '-DCMAKE_BUILD_TYPE=Release'
      - '-DCATCH_BUILD_TESTING=OFF'
    builddir: true
    sources:
      - type: archive
        url: https://github.com/catchorg/Catch2/archive/v2.13.8.tar.gz
        sha256: b9b592bd743c09f13ee4bf35fc30eeee2748963184f6bea836b146e6cc2a585a
        x-checker-data:
          type: anitya
          stable-only: true
          project-id: 7680
          url-template: https://github.com/catchorg/Catch2/archive/v$version.tar.gz
  - name: nlohmann-json
    buildsystem: cmake-ninja
    config-opts:
      - '-DCMAKE_BUILD_TYPE=Release'
      - '-DJSON_BuildTests=OFF'
    sources:
      - type: archive
        url: https://github.com/nlohmann/json/archive/v3.10.5.tar.gz
        sha256: 5daca6ca216495edf89d167f808d1d03c4a4d929cef7da5e10f135ae1540c7e4
        x-checker-data:
          type: anitya
          project-id: 141453
          url-template: https://github.com/nlohmann/json/archive/v$version.tar.gz
  - name: boost
    buildsystem: simple
    build-commands:
      - ./bootstrap.sh --with-libraries=context,container,system,headers
      - ./b2 -j $FLATPAK_BUILDER_N_JOBS install --prefix=/app
    sources:
      - type: archive
        url: >-
          https://boostorg.jfrog.io/artifactory/main/release/1.78.0/source/boost_1_78_0.tar.bz2
        sha256: 8681f175d4bdb26c52222665793eef08490d7758529330f98d3b29dd0735bccc
        x-checker-data:
          type: anitya
          project-id: 6845
          url-template: >-
            https://boostorg.jfrog.io/artifactory/main/release/$version/source/boost_1_78_0.tar.bz2
  - name: nv-codec-headers
    make-install-args:
      - PREFIX=/app
    no-autogen: true
    cleanup:
      - '*'
    sources:
      - type: git
        url: https://git.videolan.org/git/ffmpeg/nv-codec-headers.git
        tag: n11.1.5.1
        commit: 84483da70d903239d4536763fde8c7e6c4e80784
        x-checker-data:
          type: git
          tag-pattern: ^n([\d.]+)$
  - name: yuzu
    buildsystem: cmake-ninja
    builddir: true
    config-opts:
      - '-DCMAKE_BUILD_TYPE=RelWithDebInfo'
      - '-DCMAKE_INTERPROCEDURAL_OPTIMIZATION=ON'
      - '-DENABLE_QT_TRANSLATION=ON'
      - '-DYUZU_ENABLE_COMPATIBILITY_REPORTING=ON'
      - '-DENABLE_COMPATIBILITY_LIST_DOWNLOAD=ON'
      - '-DYUZU_USE_QT_WEB_ENGINE=ON'
      - '-DYUZU_USE_BUNDLED_FFMPEG=ON'
      - '-DDISPLAY_VERSION=969'
      - '-DBUILD_TAG=mainline-969'
      - '-DBUILD_REPOSITORY=yuzu-emu/yuzu-mainline'
    build-options:
      env:
        TITLEBARFORMATIDLE: yuzu {}
        TITLEBARFORMATRUNNING: yuzu {} | {}
        LDFLAGS: '-L/app/lib -Wl,-z,relro,-z,now -Wl,--as-needed'
    cleanup:
      - /share/man
      - /share/pixmaps
    post-install:
      - install -Dm755 ../yuzu-launcher.sh /app/bin/yuzu-launcher
      - desktop-file-install --dir=/app/share/applications ../dist/yuzu.desktop
      - >-
        desktop-file-edit --set-key StartupWMClass --set-value yuzu --set-key
        Exec --set-value yuzu-launcher /app/share/applications/yuzu.desktop
      - >-
        install -Dm644 ../dist/yuzu.svg
        /app/share/icons/hicolor/scalable/apps/yuzu.svg
      - >-
        mv /app/share/mime/packages/yuzu.xml
        /app/share/mime/packages/org.yuzu_emu.yuzu.xml
      - >-
        sed 's/yuzu/org.yuzu_emu.yuzu/g' -i
        /app/share/mime/packages/org.yuzu_emu.yuzu.xml
    sources:
      - type: git
        url: https://github.com/yuzu-emu/yuzu-mainline.git
        tag: mainline-0-969
        commit: d179e12137cd8ff88b0eade7d13de801661f869b
        disable-shallow-clone: true
        x-checker-data:
          type: git
          tag-pattern: ^(mainline-0-\d+)$
      - type: file
        path: rd-submodules/yuzu/yuzu-launcher.sh
      - type: file
        path: rd-submodules/yuzu/compatibility_list.json
        
  # Yuzu - END

  # pcsx2 - https://github.com/flathub/net.pcsx2.PCSX2

  - name: wxWidgets
    buildsystem: cmake-ninja
    config-opts:
      - '-DCMAKE_BUILD_TYPE=Release'
    cleanup:
      - /bin
      - /include
      - /lib/wx/include
    sources:
      - type: git
        url: https://github.com/wxWidgets/wxWidgets.git
        tag: v3.1.5
        commit: 9c0a8be1dc32063d91ed1901fd5fcd54f4f955a1
        x-checker-data:
          type: git
          tag-pattern: ^v([\d.]+)$
    modules:
  - name: libaio
    no-autogen: true
    make-install-args:
      - prefix=${FLATPAK_DEST}
    sources:
      - type: git
        url: https://pagure.io/libaio.git
        tag: libaio-0.3.112
        commit: d025927efa75a0d1b46ca3a5ef331caa2f46ee0e
        x-checker-data:
          type: git
          tag-pattern: ^libaio-([\d.]+)$
    cleanup:
      - /include
      - /lib/*.a
  - name: portaudio
    buildsystem: cmake-ninja
    config-opts:
      - '-DCMAKE_BUILD_TYPE=Release'
    cleanup:
      - /include
      - /share/doc
      - /lib/cmake
      - /lib/pkgconfig
      - /lib/*.a
    sources:
      - type: git
        url: https://github.com/PortAudio/portaudio.git
        tag: v19.7.0
        commit: 147dd722548358763a8b649b3e4b41dfffbcfbb6
        x-checker-data:
          type: git
          tag-pattern: ^v([\d.]+)$
  - name: soundtouch
    buildsystem: cmake-ninja
    sources:
      - type: git
        url: https://codeberg.org/soundtouch/soundtouch.git
        tag: 2.3.1
        commit: e1f315f5358d9db5cee35a7a2886425489fcefe8
        x-checker-data:
          type: git
          tag-pattern: ^([\d.]+)$
    cleanup:
      - /bin
      - /include
      - /lib/cmake
      - /lib/pkgconfig
      - /share/doc
      - /lib/*.a
  - name: png++
    disabled: true
    buildsystem: simple
    build-commands:
      - make
      - make prefix=/app install
    sources:
      - type: archive
        url: >-
          https://download.savannah.nongnu.org/releases/pngpp/png++-0.2.10.tar.gz
        sha256: 998af216ab16ebb88543fbaa2dbb9175855e944775b66f2996fc945c8444eee1
  - name: libpcap
    buildsystem: cmake-ninja
    sources:
      - type: git
        url: https://github.com/the-tcpdump-group/libpcap.git
        tag: libpcap-1.10.1
        commit: c7642e2cc0c5bd65754685b160d25dc23c76c6bd
        x-checker-data:
          type: git
          tag-pattern: ^libpcap-([\d.]+)$
    cleanup:
      - /bin
      - /include
      - /share/man
      - /lib/pkgconfig
      - /lib/*.a
  - name: pcsx2
    buildsystem: cmake-ninja
    builddir: true
    config-opts:
      - '-DCMAKE_BUILD_TYPE=Release'
      - '-DPACKAGE_MODE=TRUE'
      - '-DXDG_STD=TRUE'
      - '-DDISABLE_BUILD_DATE=TRUE'
      - '-DDISABLE_PCSX2_WRAPPER=TRUE'
      - '-DDISABLE_ADVANCE_SIMD=TRUE'
      - '-DSDL2_API=TRUE'
    cleanup:
      - /share/pixmaps
      - /share/man
      - /share/doc
    post-install:
      - >-
        desktop-file-edit --set-key=Exec --set-value=pcsx2
        /app/share/applications/PCSX2.desktop
      - >-
        install -Dm644 ../AppIcon128.png
        /app/share/icons/hicolor/128x128/apps/PCSX2.png
    sources:
      - type: git
        url: https://github.com/PCSX2/pcsx2.git
        tag: v1.7.2554
        commit: 0d1675fbaa0d40874df98eed6270efc55620271b
      - type: file
        path: rd-submodules/pcsx2/AppIcon128.png

  # pcsx2 - END

  # Dolphin - START
  # https://github.com/flathub/org.DolphinEmu.dolphin-emu

  # needed for the emulate bluetooth adapter feature to work
  - name: bluez
    config-opts:
      - --enable-library
      - --disable-manpages
      - --disable-udev
      - --disable-tools
      - --disable-cups
      - --disable-monitor
      - --disable-client
      - --disable-systemd
      - --disable-a2dp
      - --disable-avrcp
      - --disable-network
      - --with-dbusconfdir=/app/etc
      - --with-dbussessionbusdir=/app/usr/lib/system-services
    sources:
      - type: archive
        url: https://www.kernel.org/pub/linux/bluetooth/bluez-5.64.tar.xz
        sha256: ae437e65b6b3070c198bc5b0109fe9cdeb9eaa387380e2072f9de65fe8a1de34
        x-checker-data:
          type: anitya
          project-id: 10029
          stable-only: true
          url-template: https://www.kernel.org/pub/linux/bluetooth/bluez-$version.tar.xz

  # enables motion controls on non-wii controllers (switch, ps4, etc)
  # requires a udev rule enabling Motion Sensors access
  - name: libevdev
    buildsystem: meson
    config-opts:
      - -Dtests=disabled
      - -Ddocumentation=disabled
    sources:
      - type: archive
        url: https://www.freedesktop.org/software/libevdev/libevdev-1.12.1.tar.xz
        sha256: 1dbba41bc516d3ca7abc0da5b862efe3ea8a7018fa6e9b97ce9d39401b22426c
        x-checker-data:
          type: anitya
          project-id: 20540
          stable-only: true
          url-template: https://www.freedesktop.org/software/libevdev/libevdev-$version.tar.xz

  # needed for screensaver inhibition
  - name: xdg-screensaver-shim
    buildsystem: meson
    sources:
      - type: archive
        url: https://github.com/Unrud/xdg-screensaver-shim/archive/0.0.2.tar.gz
        sha256: 0ed2a69fe6ee6cbffd2fe16f85116db737f17fb1e79bfb812d893cf15c728399

  - name: dolphin-emu
    buildsystem: cmake-ninja
    config-opts:
      - -DCMAKE_BUILD_TYPE=Release
      - -DENABLE_ALSA=OFF
      - -DENABLE_SDL=ON
      - -DENABLE_EVDEV=ON
      - -DDISTRIBUTOR=Flathub
    cleanup:
      - /share/man
    post-install:
      - install -D dolphin-emu-wrapper /app/bin/dolphin-emu-wrapper
      - install -Dm644 appdata.xml /app/share/appdata/dolphin-emu.appdata.xml
      - sed -i -e 's/"2048"/"512"/g' /app/share/icons/hicolor/scalable/apps/dolphin-emu.svg
      - desktop-file-edit --set-key=Exec --set-value='/app/bin/dolphin-emu-wrapper'
        /app/share/applications/dolphin-emu.desktop
    sources:
      - type: git
        url: https://github.com/dolphin-emu/dolphin.git
        commit: 8ecfa537a242de74d2e372e30d9d79b14584b2fb
      # detects whether dolphin is running in a flatpak sandbox
      # and makes it use xdg directories if it is.
      # prevents dolphin from attempting to write conf files
      # in non-writable paths, typically happens when a user
      # has leftover files from a previous non-flatpak install
      - type: patch
        path: rd-submodules/dolphin/detectflatpak.patch
      # version strings must match exactly for online multiplayer
      - type: patch
        path: rd-submodules/dolphin/nodirtyversion.patch
      - type: file
        path: rd-submodules/dolphin/appdata.xml
      - type: script
        commands:
          - for i in {0..9}; do
          - test -S $XDG_RUNTIME_DIR/discord-ipc-$i || ln -sf {app/com.discordapp.Discord,$XDG_RUNTIME_DIR}/discord-ipc-$i;
          - done
          - dolphin-emu "$@"
        dest-filename: dolphin-emu-wrapper

  # Dolphin - END

  # XEMU - START

  - name: libglu
    buildsystem: meson
    cleanup:
      - /include
      - /lib/debug
      - /lib/pkgconfig
      - /lib/*.a
    sources:
      - type: archive
        url: https://mesa.freedesktop.org/archive/glu/glu-9.0.2.tar.xz
        sha256: 6e7280ff585c6a1d9dfcdf2fca489251634b3377bfc33c29e4002466a38d02d4
        x-checker-data:
          type: anitya
          project-id: 13518
          stable-only: true
          url-template: https://mesa.freedesktop.org/archive/glu/glu-$version.tar.xz

  - name: xemu
    buildsystem: autotools
    builddir: true
    no-make-install: true
    build-options:
      cflags: -O3 -DXBOX=1 -Wno-error=redundant-decls
    config-opts:
      - --audio-drv-list=sdl
      - --disable-werror
      - --target-list=i386-softmmu
    make-args:
      - qemu-system-i386
    post-install:
      - |-
        for px in 16 32 48 64 128 256 512; do
          install -Dm644 ../ui/icons/xemu_${px}x${px}.png /app/share/icons/hicolor/${px}x${px}/apps/app.xemu.xemu.png
        done
      - install -Dm644 ../ui/icons/xemu.svg /app/share/icons/hicolor/scalable/apps/app.xemu.xemu.svg
      - desktop-file-install ../ui/xemu.desktop --dir /app/share/applications
      - sed -i 's/^Icon=xemu/Icon=app.xemu.xemu/' /app/share/applications/xemu.desktop
      - mv qemu-system-i386 /app/bin/xemu
      - mkdir -p /app/share/licenses/xemu
      - cd .. && python3 scripts/gen-license.py > /app/share/licenses/xemu/LICENSE.txt
    sources:
      - type: git
        url: https://github.com/mborgerson/xemu.git
        tag: gh-release/0.6.2-90-g6f507c80af
        commit: 6f507c80af546e0f5d316622d20f78820423ce6e
        x-checker-data:
          type: json
          url: https://api.github.com/repos/mborgerson/xemu/releases/latest
          tag-query: .tag_name
          version-query: $tag | sub("^gh-release/"; "")
          timestamp-query: .published_at
          is-main-source: true

  # XEMU - END

  # MELONDS - START
  # https://github.com/flathub/net.kuribo64.melonDS
  # ちっちゃい、かわいい!

  - name: libslirp
    buildsystem: meson
    sources:
      - type: git
        url: https://gitlab.freedesktop.org/slirp/libslirp.git
        tag: v4.4.0
  - name: melonds
    buildsystem: cmake-ninja
    builddir: true
    build-options:
      arch:
        aarch64:
          config-opts:
            - -DENABLE_OGLRENDERER=OFF
    sources:
      - type: git
        url: https://github.com/Arisotura/melonDS.git
        commit: cce9de5ee1f51e906a644922b2ada6644d81287a

  # MELONDS - END

  # CITRA - START
  # https://github.com/flathub/org.citra_emu.citra

  - name: citra
    buildsystem: cmake-ninja
    builddir: true
    config-opts:
      - '-DCMAKE_BUILD_TYPE=Release'
      - '-DENABLE_QT_TRANSLATION=ON'
      - '-DCITRA_ENABLE_COMPATIBILITY_REPORTING=ON'
      - '-DENABLE_COMPATIBILITY_LIST_DOWNLOAD=ON'
      #- '-DENABLE_FFMPEG_VIDEO_DUMPER=ON'
      # Disabled because of this: https://github.com/citra-emu/citra/issues/5949
      - '-DENABLE_FDK=ON'
    cleanup:
      - /share/man
      - /share/pixmaps
    post-install:
      - >-
        install -Dm644 ../dist/citra.svg
        /app/share/icons/hicolor/scalable/apps/citra.svg
      - >-
        install -Dm644 ../dist/icon.png
        /app/share/icons/hicolor/512x512/apps/citra.png
    sources:
      - type: git
        url: https://github.com/citra-emu/citra-nightly.git
        tag: nightly-1762
        commit: 1382035d4de5ada310c7f4fd00f1836b16ab74fb
        disable-shallow-clone: true
        x-checker-data:
          type: git
          tag-pattern: ^(nightly-\d+)$
          is-main-source: true

  # CITRA - END
  
  # RPCS3 - START
  # https://github.com/flathub/net.rpcs3.RPCS3

  - shared-modules/glu/glu-9.json
  - shared-modules/glew/glew.json

  - name: rpcs3-llvm
    buildsystem: cmake-ninja
    builddir: true
    build-options:
      cflags: &optflags -O2 -g -pipe -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong
        -grecord-gcc-switches -fasynchronous-unwind-tables -fstack-clash-protection
        -fcf-protection -fno-omit-frame-pointer
      cflags-override: true
      cxxflags: -O2 -g -pipe -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong
        -grecord-gcc-switches -fasynchronous-unwind-tables -fstack-clash-protection
        -fcf-protection -fno-omit-frame-pointer -msse -msse2 -mcx16
      cxxflags-override: true
      env:
        AR: llvm-ar
        CC: clang
        CXX: clang++
        RANLIB: llvm-ranlib
      ldflags: -fuse-ld=lld
      prepend-ld-library-path: /usr/lib/sdk/llvm13/lib
      prepend-path: /usr/lib/sdk/llvm13/bin
    config-opts:
      - -DCMAKE_BUILD_TYPE=Release
      - -DBUILD_SHARED_LIBS=OFF
      - -DLLVM_CCACHE_BUILD=ON
      - -DLLVM_TARGETS_TO_BUILD='X86'
      - -DLLVM_BUILD_RUNTIME=OFF
      - -DLLVM_BUILD_TOOLS=OFF
      - -DLLVM_INCLUDE_DOCS=OFF
      - -DLLVM_INCLUDE_EXAMPLES=OFF
      - -DLLVM_INCLUDE_TESTS=OFF
      - -DLLVM_INCLUDE_TOOLS=OFF
      - -DLLVM_INCLUDE_UTILS=OFF
      - -DLLVM_USE_INTEL_JITEVENTS=ON
      - -DLLVM_USE_PERF=ON
      - -DLLVM_ENABLE_Z3_SOLVER=OFF
      - -DCMAKE_CXX_STANDARD=17
      - -DITTAPI_SOURCE_DIR=/run/build/rpcs3-llvm/ittapi
      - -Wno-dev
    cleanup:
      - '*'
    sources:
      - type: git
        url: https://github.com/RPCS3/llvm-mirror.git
        branch: master
        commit: 509d31ad89676522f7121b3bb8688f7d29b7ee60
      - type: git
        url: https://github.com/intel/ittapi.git
        dest: ittapi/ittapi
        disable-shallow-clone: true

  - name: rpcs3
    buildsystem: cmake-ninja
    builddir: true
    build-options:
      append-ld-library-path: /usr/lib/sdk/llvm13/lib
      append-path: /usr/lib/sdk/llvm13/bin
      cflags: *optflags
      cflags-override: true
      cxxflags: *optflags
      cxxflags-override: true
      env:
        AR: llvm-ar
        CC: clang
        CXX: clang++
        RANLIB: llvm-ranlib
      ldflags: -fuse-ld=lld
    config-opts:
      - -DCMAKE_BUILD_TYPE=RelWithDebInfo
      - -DBUILD_LLVM_SUBMODULE=OFF
      - -DUSE_NATIVE_INSTRUCTIONS=OFF
      - -DUSE_PRECOMPILED_HEADERS=OFF
      - -DUSE_SYSTEM_CURL=ON
      - -DUSE_SYSTEM_FFMPEG=ON
      - -DUSE_SYSTEM_LIBPNG=ON
      - -DUSE_SYSTEM_ZLIB=ON
      - -Wno-dev
    post-install:
      - |
        set -eux;
        sed -i 's|<id>RPCS3</id>|<id>net.rpcs3.RPCS3</id>|' ${FLATPAK_DEST}/share/metainfo/rpcs3.metainfo.xml;
        COMM_TAG="$(awk -F'[\{,]' '/version{.*}/{printf "%d.%d.%d", $2, $3, $4}' ../rpcs3/rpcs3_version.cpp)";
        COMM_COUNT="$(git rev-list --count HEAD)";
        COMM_HASH="$(git rev-parse --short=8 HEAD)";
        sed -i 's|</component>|<content_rating type="oars-1.1"/><releases><release date="'$(git show -s --format=%cs)'" version="'"${COMM_TAG}"'-'"${COMM_COUNT}"'-'"${COMM_HASH}"'"/></releases></component>|' ${FLATPAK_DEST}/share/metainfo/rpcs3.metainfo.xml;
    sources:
      - type: git
        url: https://github.com/RPCS3/rpcs3.git
        commit: e9570d1a0045926f63ec8ea9af68f81743d4f365

  # RPCS3 - END
  
  # PRIMEHACK - START
  # https://github.com/flathub/io.github.shiiion.primehack

  - name: primehack
    buildsystem: cmake-ninja
    config-opts:
      - -DCMAKE_BUILD_TYPE=Release
      - -DENABLE_ALSA=OFF
      - -DENABLE_SDL=ON
      - -DENABLE_EVDEV=ON
      - -DDISTRIBUTOR=Flathub
    cleanup:
      - /share/man
    post-install:
      - install -D dolphin-emu-wrapper /app/bin/dolphin-emu-wrapper
      - sed -i -e 's/"2048"/"512"/g' /app/share/icons/hicolor/scalable/apps/dolphin-emu.svg
    sources:
      - type: git
        url: https://github.com/shiiion/dolphin.git
        commit: 9ca0eb888bd6f8ed13a4efb92d808fbf0705ffa4
      # detects whether dolphin is running in a flatpak sandbox
      # and makes it use xdg directories if it is.
      # prevents dolphin from attempting to write conf files
      # in non-writable paths, typically happens when a user
      # has leftover files from a previous non-flatpak install
      - type: patch
        path: rd-submodules/primehack/detectflatpak.patch
      # version strings must match exactly for online multiplayer
      - type: patch
        path: rd-submodules/primehack/nodirtyversion.patch
      - type: script
        commands:
          - for i in {0..9}; do
          - test -S $XDG_RUNTIME_DIR/discord-ipc-$i || ln -sf {app/com.discordapp.Discord,$XDG_RUNTIME_DIR}/discord-ipc-$i;
          - done
          - dolphin-emu "$@"
        dest-filename: dolphin-emu-wrapper

  # PRIMEHACK - END

  # External manifests end
  

  - name: retrodeck
    buildsystem: simple
    build-commands:

        # Prep the ES-DE and RetroArch config files
        - rm -rf /app/share/emulationstation/resources/systems/unix/es_find_rules.xml
        - cp es_find_rules.xml /app/share/emulationstation/resources/systems/unix/
        - rm -rf /app/share/emulationstation/resources/systems/unix/es_systems.xml
        - cp es_systems.xml /app/share/emulationstation/resources/systems/unix/
        # These must be put in home folder, managed by retrodeck.sh
        - mkdir -p ${FLATPAK_DEST}/retrodeck/
        - cp es_settings.xml ${FLATPAK_DEST}/retrodeck/es_settings.xml

        # Logo, res
        - rm -f /app/share/emulationstation/resources/graphics/splash.svg
        - cp splash.svg /app/share/emulationstation/resources/graphics/splash.svg
        - cp icon.svg /app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg

        # Tools
        - mkdir -p ${FLATPAK_DEST}/retrodeck/tools/
        - cp start-*.sh ${FLATPAK_DEST}/retrodeck/tools/
        - cp move-roms.sh ${FLATPAK_DEST}/retrodeck/tools/
        - cp tools-gamelist.xml ${FLATPAK_DEST}/retrodeck/
        
        - cp retrodeck.sh /app/bin/retrodeck.sh
        - chmod +x /app/bin/retrodeck.sh
        
        # Desktop entry
        - cp net.retrodeck.retrodeck.desktop /app/share/applications/net.retrodeck.retrodeck.desktop

        # Steam Grids
        - mkdir -p ${FLATPAK_DEST}/retrodeck/steam/
        - cp banner_main.png ${FLATPAK_DEST}/retrodeck/steam/
        - cp poster_main.png ${FLATPAK_DEST}/retrodeck/steam/
        - cp poster_main_nodecklogo.png ${FLATPAK_DEST}/retrodeck/steam/

        # Configuring emulators:
        - mkdir -p ${FLATPAK_DEST}/retrodeck/emu-configs/
        # RetroArch
        - cp retroarch.cfg ${FLATPAK_DEST}/retrodeck/emu-configs/
        # Dolphin 
        - cp Dolphin.ini ${FLATPAK_DEST}/retrodeck/emu-configs/
        # Yuzu
        - cp yuzu-qt-config.ini ${FLATPAK_DEST}/retrodeck/emu-configs/
        # Pcsx2
        - cp PCSX2_ui.ini ${FLATPAK_DEST}/retrodeck/emu-configs/
        # MelonDS
        - cp melonDS.ini ${FLATPAK_DEST}/retrodeck/emu-configs/
        # CITRA
        - cp citra-qt-config.ini ${FLATPAK_DEST}/retrodeck/emu-configs/
        # RPCS3
        - cp config.yml ${FLATPAK_DEST}/retrodeck/emu-configs/

    #cleanup: ['*']
    sources:
      - type: file
        path: es_find_rules.xml
      - type: file
        path: es_settings.xml
      - type: file
        path: es_systems.xml
      - type: file
        path: retrodeck.sh
      - type: dir
        path: emu-configs
      - type: file
        path: tools-gamelist.xml
      - type: dir
        path: res
      - type: dir
        path: res/steam
      - type: dir
        path: tools
      - type: file
        path: net.retrodeck.retrodeck.desktop