Browse Source

build-aux,CI: Split Flatpak manifest in multiple files

Also moves Flatpak manifest to build-aux folder
tytan652 2 years ago
parent
commit
904fe87f83

+ 2 - 2
.github/workflows/flatpak.yml

@@ -65,7 +65,7 @@ jobs:
         id: setup
         env:
           GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
-          CACHE_KEY: flatpak-builder-${{ hashFiles('CI/flatpak/com.obsproject.Studio.json') }}
+          CACHE_KEY: flatpak-builder-${{ hashFiles('build-aux/**/*.json') }}
         run: |
           dnf install -y -q gh
           gh extension install actions/gh-actions-cache
@@ -83,7 +83,7 @@ jobs:
         uses: flatpak/flatpak-github-actions/[email protected]
         with:
           bundle: obs-studio-${{ steps.setup.outputs.git_hash }}.flatpak
-          manifest-path: CI/flatpak/com.obsproject.Studio.json
+          manifest-path: build-aux/com.obsproject.Studio.json
           cache: ${{ fromJSON(steps.setup.outputs.cache_hit) }}
           cache-key: ${{ steps.setup.outputs.cache_key }}
           mirror-screenshots-url: https://dl.flathub.org/repo/screenshots

+ 2 - 2
.github/workflows/main.yml

@@ -374,7 +374,7 @@ jobs:
         id: setup
         env:
           GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
-          CACHE_KEY: flatpak-builder-${{ hashFiles('CI/flatpak/com.obsproject.Studio.json') }}
+          CACHE_KEY: flatpak-builder-${{ hashFiles('build-aux/**/*.json') }}
         run: |
           dnf install -y -q gh
           gh extension install actions/gh-actions-cache
@@ -393,7 +393,7 @@ jobs:
         with:
           build-bundle: ${{ fromJSON(needs.config.outputs.create_artifacts) }}
           bundle: obs-studio-flatpak-${{ steps.setup.outputs.git_hash }}.flatpak
-          manifest-path: CI/flatpak/com.obsproject.Studio.json
+          manifest-path: build-aux/com.obsproject.Studio.json
           cache: ${{ fromJSON(steps.setup.outputs.cache_hit) || (github.event_name == 'push' && github.ref == 'refs/heads/master') }}
           restore-cache: ${{ fromJSON(steps.setup.outputs.cache_hit) }}
           cache-key: ${{ steps.setup.outputs.cache_key }}

+ 1 - 0
.gitignore

@@ -9,6 +9,7 @@
 
 #cmake
 /build*/
+!/build-aux/
 /release*/
 /debug*/
 .vs/

+ 0 - 515
CI/flatpak/com.obsproject.Studio.json

@@ -1,515 +0,0 @@
-{
-  "app-id": "com.obsproject.Studio",
-  "runtime": "org.kde.Platform",
-  "runtime-version": "6.4",
-  "sdk": "org.kde.Sdk",
-  "command": "obs",
-  "finish-args": [
-    "--socket=wayland",
-    "--socket=x11",
-    "--socket=pulseaudio",
-    "--device=all",
-    "--share=network",
-    "--share=ipc",
-    "--filesystem=xdg-run/pipewire-0",
-    "--filesystem=host",
-    "--talk-name=org.kde.StatusNotifierWatcher",
-    "--talk-name=org.freedesktop.Flatpak",
-    "--talk-name=org.freedesktop.Notifications",
-    "--talk-name=org.a11y.Bus",
-    "--own-name=org.kde.StatusNotifierItem-2-2",
-    "--system-talk-name=org.freedesktop.Avahi",
-    "--env=VST_PATH=/app/extensions/Plugins/vst"
-  ],
-  "add-extensions": {
-    "com.obsproject.Studio.Plugin": {
-      "directory": "plugins",
-      "subdirectories": true,
-      "add-ld-path": "lib",
-      "merge-dirs": "lib/obs-plugins;share/obs/obs-plugins",
-      "no-autodownload": true,
-      "autodelete": true
-    },
-    "org.freedesktop.LinuxAudio.Plugins": {
-      "directory": "extensions/Plugins",
-      "version": "22.08",
-      "add-ld-path": "lib",
-      "merge-dirs": "vst",
-      "subdirectories": true,
-      "no-autodownload": true
-    }
-  },
-  "cleanup": [
-    "/share/man",
-    "*.la"
-  ],
-  "modules": [
-    {
-      "name": "x264",
-      "config-opts": [
-        "--disable-cli",
-        "--enable-shared"
-      ],
-      "cleanup": [
-        "/include",
-        "/lib/pkgconfig"
-      ],
-      "sources": [
-        {
-          "type": "git",
-          "url": "https://code.videolan.org/videolan/x264.git",
-          "commit": "eaa68fad9e5d201d42fde51665f2d137ae96baf0"
-        }
-      ]
-    },
-    {
-      "name": "v4l-utils",
-      "config-opts": [
-        "--disable-static",
-        "--disable-doxygen-doc",
-        "--disable-libdvbv5",
-        "--disable-v4l-utils",
-        "--disable-qv4l2",
-        "--with-udevdir=/app/lib/udev/"
-      ],
-      "cleanup": [
-        "/include",
-        "/lib/pkgconfig"
-      ],
-      "sources": [
-        {
-          "type": "archive",
-          "url": "https://linuxtv.org/downloads/v4l-utils/v4l-utils-1.22.0.tar.bz2",
-          "sha256": "1069e5d7909bcc563baeaadc3a5c496f0e658524c413cf7818816e37bfcea344"
-        }
-      ]
-    },
-    {
-      "name": "nv-codec-headers",
-      "no-autogen": true,
-      "make-install-args": [
-        "PREFIX=/app"
-      ],
-      "cleanup": [
-        "*"
-      ],
-      "sources": [
-        {
-          "type": "git",
-          "url": "https://github.com/FFmpeg/nv-codec-headers.git",
-          "tag": "n12.0.16.0",
-          "commit": "c5e4af74850a616c42d39ed45b9b8568b71bf8bf"
-        }
-      ]
-    },
-    {
-      "name": "srt",
-      "buildsystem": "cmake-ninja",
-      "config-opts": [
-        "-DCMAKE_BUILD_TYPE=Release",
-        "-DENABLE_STATIC=OFF",
-        "-DENABLE_APPS=OFF",
-        "-DENABLE_LOGGING=OFF"
-      ],
-      "cleanup": [
-        "/include",
-        "/lib/pkgconfig",
-        "/bin"
-      ],
-      "sources": [
-        {
-          "type": "git",
-          "url": "https://github.com/Haivision/srt.git",
-          "tag": "v1.5.1",
-          "commit": "0bc3b03202b3159fc9b085b3ae6d66ec071c25d6"
-        }
-      ]
-    },
-    {
-      "name": "mbedtls",
-      "buildsystem": "cmake-ninja",
-      "builddir": true,
-      "config-opts": [
-        "-DCMAKE_BUILD_TYPE=Release",
-        "-DCMAKE_POSITION_INDEPENDENT_CODE=ON",
-        "-DUSE_SHARED_MBEDTLS_LIBRARY=ON",
-        "-DUSE_STATIC_MBEDTLS_LIBRARY=OFF",
-        "-DENABLE_TESTING=OFF",
-        "-DENABLE_PROGRAMS=OFF"
-      ],
-      "cleanup": [
-        "/include"
-      ],
-      "sources": [
-        {
-          "type": "git",
-          "url": "https://github.com/ARMmbed/mbedtls.git",
-          "commit": "869298bffeea13b205343361b7a7daf2b210e33d",
-          "tag": "v3.2.1"
-        }
-      ]
-    },
-    {
-      "name": "librist",
-      "buildsystem":"meson",
-      "builddir": true,
-      "config-opts": [
-        "-Duse_mbedtls=true",
-        "-Dtest=false",
-        "-Dbuilt_tools=false",
-        "-Dbuiltin_cjson=true"
-      ],
-      "cleanup": [
-        "/include",
-        "/lib/pkgconfig"
-      ],
-      "sources": [
-        {
-          "type": "git",
-          "url": "https://code.videolan.org/rist/librist.git",
-          "commit": "809390b3b75a259a704079d0fb4d8f1b5f7fa956"
-        }
-      ]
-    },
-    {
-      "name": "aom",
-      "buildsystem": "cmake-ninja",
-      "builddir": true,
-      "config-opts": [
-        "-DCMAKE_BUILD_TYPE=Release",
-        "-DBUILD_SHARED_LIBS=ON",
-        "-DENABLE_DOCS=OFF",
-        "-DENABLE_EXAMPLES=OFF",
-        "-DENABLE_TESTDATA=OFF",
-        "-DENABLE_TESTS=OFF",
-        "-DENABLE_TOOLS=OFF "
-      ],
-      "cleanup": [
-        "/include",
-        "/lib/pkgconfig"
-      ],
-      "sources": [
-        {
-          "type": "git",
-          "url": "https://aomedia.googlesource.com/aom.git",
-          "tag": "v3.6.0",
-          "commit": "3c65175b1972da4a1992c1dae2365b48d13f9a8d"
-        }
-      ]
-    },
-    {
-      "name": "svt-av1",
-      "buildsystem": "cmake-ninja",
-      "builddir": true,
-      "config-opts": [
-        "-DCMAKE_BUILD_TYPE=Release",
-        "-DBUILD_SHARED_LIBS=ON",
-        "-DBUILD_APPS=OFF",
-        "-DBUILD_DEC=ON",
-        "-DBUILD_ENC=ON",
-        "-DBUILD_TESTING=OFF"
-      ],
-      "cleanup": [
-        "/include",
-        "/lib/pkgconfig"
-      ],
-      "sources": [
-        {
-          "type": "git",
-          "url": "https://gitlab.com/AOMediaCodec/SVT-AV1.git",
-          "tag": "v1.4.1",
-          "commit": "018276d714ce65d9b586f6205ee016cbd8d5425d"
-        }
-      ]
-    },
-    {
-      "name": "ffmpeg",
-      "config-opts": [
-        "--enable-gpl",
-        "--enable-shared",
-        "--disable-static",
-        "--enable-gnutls",
-        "--disable-doc",
-        "--disable-programs",
-        "--disable-devices",
-        "--enable-libopus",
-        "--enable-libvpx",
-        "--enable-libvorbis",
-        "--enable-libx264",
-        "--enable-nvenc",
-        "--enable-libsrt",
-        "--enable-librist",
-        "--enable-libaom",
-        "--enable-libsvtav1"
-      ],
-      "cleanup": [
-        "/share/ffmpeg"
-      ],
-      "sources": [
-        {
-          "type": "git",
-          "url": "https://github.com/FFmpeg/FFmpeg.git",
-          "commit": "a6dc92968a325d331bb6dcf9b3b2248026cd1d6c",
-          "disable-shallow-clone": true
-        },
-        {
-          "type": "git",
-          "dest": "obs-deps",
-          "url": "https://github.com/obsproject/obs-deps.git",
-          "tag": "2023-04-12",
-          "commit": "24e25fd83e6938cfe3cc5020230430b31ba5df59"
-        },
-        {
-          "type": "shell",
-          "commands": [
-            "patch -Np1 -i obs-deps/deps.ffmpeg/patches/FFmpeg/0001-flvdec-handle-unknown.patch",
-            "patch -Np1 -i obs-deps/deps.ffmpeg/patches/FFmpeg/0002-libaomenc-presets.patch"
-          ]
-        }
-      ]
-    },
-    {
-      "name": "luajit",
-      "no-autogen": true,
-      "cleanup": [
-        "/bin",
-        "/include",
-        "/lib/pkgconfig",
-        "*.a"
-      ],
-      "sources": [
-        {
-          "type": "git",
-          "url": "https://luajit.org/git/luajit-2.0.git",
-          "commit": "505e2c03de35e2718eef0d2d3660712e06dadf1f",
-          "disable-shallow-clone": true
-        },
-        {
-          "type": "shell",
-          "commands": [
-            "sed -i 's|/usr/local|/app|' ./Makefile"
-          ]
-        }
-      ]
-    },
-    {
-      "name": "swig",
-      "config-opts": [
-        "--without-boost",
-        "--without-pcre",
-        "--without-alllang",
-        "--with-lua=/app/bin/luajit-2.1.0-beta3",
-        "--with-luaincl=/app/include/luajit-2.1",
-        "--with-python3"
-      ],
-      "cleanup": [
-        "*"
-      ],
-      "sources": [
-        {
-          "type": "archive",
-          "url": "https://prdownloads.sourceforge.net/swig/swig-4.0.2.tar.gz",
-          "sha256": "d53be9730d8d58a16bf0cbd1f8ac0c0c3e1090573168bfa151b01eb47fa906fc"
-        }
-      ]
-    },
-    {
-      "name": "pipewire",
-      "buildsystem": "meson",
-      "config-opts": [
-        "-Daudiotestsrc=disabled",
-        "-Droc=disabled",
-        "-Dvideotestsrc=disabled",
-        "-Dvolume=disabled",
-        "-Dvulkan=disabled",
-        "-Ddocs=disabled",
-        "-Dman=disabled",
-        "-Dbluez5-codec-ldac=disabled",
-        "-Dbluez5-codec-aptx=disabled",
-        "-Dlibcamera=disabled",
-        "-Dudevrulesdir=/app/lib/udev/rules.d/",
-        "-Dsession-managers=[]",
-        "-Dtests=disabled",
-        "-Dexamples=disabled",
-        "-Dpw-cat=disabled"
-      ],
-      "cleanup": [
-        "/bin"
-      ],
-      "sources": [
-        {
-          "type": "git",
-          "url": "https://github.com/pipewire/pipewire.git",
-          "tag": "0.3.65",
-          "commit": "9558a5d5e0360d8af822431c76ee858a8c7495ac"
-        }
-      ]
-    },
-    {
-      "name": "ntv2",
-      "buildsystem": "cmake-ninja",
-      "builddir": true,
-      "config-opts": [
-        "-DCMAKE_BUILD_TYPE=Release",
-        "-DAJA_BUILD_OPENSOURCE=ON",
-        "-DAJA_BUILD_APPS=OFF",
-        "-DAJA_INSTALL_HEADERS=ON"
-      ],
-      "cleanup": [
-        "/include"
-      ],
-      "sources": [
-        {
-          "type": "git",
-          "url": "https://github.com/aja-video/ntv2.git",
-          "tag": "v16.2-bugfix5",
-          "commit": "0acbac70a0b5e6509cca78cfbf69974c73c10db9"
-        }
-      ]
-    },
-    {
-      "name": "jansson",
-      "buildsystem": "cmake-ninja",
-      "builddir": true,
-      "config-opts": [
-        "-DCMAKE_BUILD_TYPE=Release",
-        "-DJANSSON_EXAMPLES=OFF",
-        "-DJANSSON_BUILD_DOCS=OFF",
-        "-DJANSSON_BUILD_SHARED_LIBS=ON",
-        "-DJANSSON_WITHOUT_TESTS=ON"
-      ],
-      "cleanup": [
-        "/include",
-        "/lib/pkgconfig"
-      ],
-      "sources": [
-        {
-          "type": "git",
-          "url": "https://github.com/akheron/jansson.git",
-          "tag": "v2.14",
-          "commit": "684e18c927e89615c2d501737e90018f4930d6c5"
-        }
-      ]
-    },
-    {
-      "name": "nlohmann-json",
-      "buildsystem": "cmake-ninja",
-      "builddir": true,
-      "config-opts": [
-        "-DCMAKE_BUILD_TYPE=Release",
-        "-DJSON_BuildTests=OFF"
-      ],
-      "sources": [
-        {
-          "type": "git",
-          "url": "https://github.com/nlohmann/json.git",
-          "tag": "v3.11.2",
-          "commit": "bc889afb4c5bf1c0d8ee29ef35eaaf4c8bef8a5d"
-        }
-      ]
-    },
-    {
-      "name": "websocketpp",
-      "buildsystem": "cmake-ninja",
-      "builddir": true,
-      "config-opts": [
-        "-DCMAKE_BUILD_TYPE=Release",
-        "-DENABLE_CPP11=ON",
-        "-DBUILD_EXAMPLES=OFF",
-        "-DBUILD_TESTS=OFF"
-      ],
-      "sources": [
-        {
-          "type": "git",
-          "url": "https://github.com/zaphoyd/websocketpp.git",
-          "tag": "0.8.2",
-          "commit": "56123c87598f8b1dd471be83ca841ceae07f95ba"
-        }
-      ]
-    },
-    {
-      "name": "asio",
-      "buildsystem": "simple",
-      "build-commands": [
-        "mkdir -p /app/include",
-        "cp asio/include/asio.hpp /app/include/",
-        "cp -R asio/include/asio /app/include/"
-      ],
-      "sources": [
-        {
-          "type": "git",
-          "url": "https://github.com/chriskohlhoff/asio.git",
-          "tag": "asio-1-12-1",
-          "commit": "b73dc1d2c0ecb9452a87c26544d7f71e24342df6"
-        }
-      ]
-    },
-    {
-      "name": "cef",
-      "buildsystem": "cmake-ninja",
-      "config-opts": [
-        "-DCMAKE_BUILD_TYPE=Release"
-      ],
-      "no-make-install": true,
-      "make-args": [
-        "libcef_dll_wrapper"
-      ],
-      "build-commands": [
-        "mkdir -p /app/cef/libcef_dll_wrapper",
-        "cp -R ./include /app/cef",
-        "cp -R ./Release /app/cef",
-        "cp -R ./Resources /app/cef",
-        "cp -R ./libcef_dll_wrapper/libcef_dll_wrapper.a /app/cef/libcef_dll_wrapper"
-      ],
-      "cleanup": [
-        "*"
-      ],
-      "sources": [
-        {
-          "type": "archive",
-          "url": "https://cdn-fastly.obsproject.com/downloads/cef_binary_5060_linux64.tar.bz2",
-          "sha256": "ac4e2a8ebf20700e4e36353e314f876623633dd5b474778a2548bb66bdbea11d"
-        }
-      ]
-    },
-    {
-      "name": "obs",
-      "buildsystem": "cmake-ninja",
-      "builddir": true,
-      "config-opts": [
-        "-DCMAKE_BUILD_TYPE=Release",
-        "-DENABLE_WAYLAND=ON",
-        "-DENABLE_BROWSER=ON",
-        "-DCEF_ROOT_DIR=/app/cef",
-        "-DUSE_XDG=ON",
-        "-DENABLE_ALSA=OFF",
-        "-DENABLE_PULSEAUDIO=ON",
-        "-DENABLE_JACK=ON",
-        "-DENABLE_RTMPS=ON",
-        "-DENABLE_VLC=OFF",
-        "-DENABLE_AJA=ON",
-        "-DENABLE_LIBFDK=ON"
-      ],
-      "secret-opts": [
-        "-DRESTREAM_CLIENTID=$RESTREAM_CLIENTID",
-        "-DRESTREAM_HASH=$RESTREAM_HASH",
-        "-DTWITCH_CLIENTID=$TWITCH_CLIENTID",
-        "-DTWITCH_HASH=$TWITCH_HASH",
-        "-DYOUTUBE_CLIENTID=$YOUTUBE_CLIENTID",
-        "-DYOUTUBE_CLIENTID_HASH=$YOUTUBE_CLIENTID_HASH",
-        "-DYOUTUBE_SECRET=$YOUTUBE_SECRET",
-        "-DYOUTUBE_SECRET_HASH=$YOUTUBE_SECRET_HASH"
-      ],
-      "post-install": [
-        "install -d /app/plugins",
-        "install -d /app/extensions/Plugins"
-      ],
-      "sources": [
-        {
-          "type": "dir",
-          "path": "../../"
-        }
-      ]
-    }
-  ]
-}

+ 1 - 1
UI/xdg-data/com.obsproject.Studio.appdata.xml.in

@@ -44,6 +44,6 @@
     <release version="@OBS_VERSION@" date="@APPDATA_RELEASE_DATE@"/>
   </releases>
   <custom>
-    <value key="flathub::manifest">https://github.com/obsproject/obs-studio/blob/@GIT_HASH@/CI/flatpak/com.obsproject.Studio.json</value>
+    <value key="flathub::manifest">https://github.com/obsproject/obs-studio/blob/@GIT_HASH@/build-aux/</value>
   </custom>
 </component>

+ 24 - 0
build-aux/README.md

@@ -0,0 +1,24 @@
+# `build-aux` folder
+
+This folder contains only the Flatpak manifest used to build OBS Studio.
+
+## OBS Studio Flatpak Manifest
+
+The manifest is composed of multiple files:
+ - The main manifest `com.obsproject.Studio.json`
+ - The `modules` folder which contains OBS Studio dependencies modules
+
+### Manifest modules
+
+Modules are ordered/dispatched in numbered categories following a short list of rules:
+- A module must not depend on another module from the same category, so a module can only depend on modules from lower numbered categories.
+- A module without dependencies must be placed in the highest numbered category in use, excluding categories meant for specific types of dependency.
+
+Actual categories:
+ - `99-`: CEF
+ - `90-`: Headers-only libraries that are dependencies of only OBS Studio
+ - `50-`: Modules that are dependencies of only OBS Studio
+ - `40-`: Modules that are dependencies of the `50-` category
+ - `30-`: FFmpeg
+ - `20-`: Modules that are dependencies of FFmpeg
+ - `10-`: Modules that are dependencies of the `20-` category

+ 105 - 0
build-aux/com.obsproject.Studio.json

@@ -0,0 +1,105 @@
+{
+  "app-id": "com.obsproject.Studio",
+  "runtime": "org.kde.Platform",
+  "runtime-version": "6.4",
+  "sdk": "org.kde.Sdk",
+  "command": "obs",
+  "finish-args": [
+    "--socket=wayland",
+    "--socket=x11",
+    "--socket=pulseaudio",
+    "--device=all",
+    "--share=network",
+    "--share=ipc",
+    "--filesystem=xdg-run/pipewire-0",
+    "--filesystem=host",
+    "--talk-name=org.kde.StatusNotifierWatcher",
+    "--talk-name=org.freedesktop.Flatpak",
+    "--talk-name=org.freedesktop.Notifications",
+    "--talk-name=org.a11y.Bus",
+    "--own-name=org.kde.StatusNotifierItem-2-2",
+    "--system-talk-name=org.freedesktop.Avahi",
+    "--env=VST_PATH=/app/extensions/Plugins/vst"
+  ],
+  "add-extensions": {
+    "com.obsproject.Studio.Plugin": {
+      "directory": "plugins",
+      "subdirectories": true,
+      "add-ld-path": "lib",
+      "merge-dirs": "lib/obs-plugins;share/obs/obs-plugins",
+      "no-autodownload": true,
+      "autodelete": true
+    },
+    "org.freedesktop.LinuxAudio.Plugins": {
+      "directory": "extensions/Plugins",
+      "version": "22.08",
+      "add-ld-path": "lib",
+      "merge-dirs": "vst",
+      "subdirectories": true,
+      "no-autodownload": true
+    }
+  },
+  "cleanup": [
+    "/share/man",
+    "*.la"
+  ],
+  "modules": [
+    "modules/10-mbedtls.json",
+    "modules/20-aom.json",
+    "modules/20-librist.json",
+    "modules/20-nv-codec.json",
+    "modules/20-srt.json",
+    "modules/20-svt-av1.json",
+    "modules/20-x264.json",
+    "modules/30-ffmpeg.json",
+    "modules/40-luajit.json",
+    "modules/50-jansson.json",
+    "modules/50-ntv2.json",
+    "modules/50-pipewire.json",
+    "modules/50-swig.json",
+    "modules/50-v4l-utils.json",
+    "modules/90-asio.json",
+    "modules/90-nlohmann-json.json",
+    "modules/90-websocketpp.json",
+    "modules/99-cef.json",
+    {
+      "name": "obs",
+      "buildsystem": "cmake-ninja",
+      "builddir": true,
+      "config-opts": [
+        "-DCMAKE_BUILD_TYPE=Release",
+        "-DENABLE_WAYLAND=ON",
+        "-DENABLE_BROWSER=ON",
+        "-DCEF_ROOT_DIR=/app/cef",
+        "-DUSE_XDG=ON",
+        "-DENABLE_ALSA=OFF",
+        "-DENABLE_PULSEAUDIO=ON",
+        "-DENABLE_JACK=ON",
+        "-DENABLE_RTMPS=ON",
+        "-DENABLE_VLC=OFF",
+        "-DENABLE_AJA=ON",
+        "-DENABLE_LIBFDK=ON"
+      ],
+      "secret-opts": [
+        "-DRESTREAM_CLIENTID=$RESTREAM_CLIENTID",
+        "-DRESTREAM_HASH=$RESTREAM_HASH",
+        "-DTWITCH_CLIENTID=$TWITCH_CLIENTID",
+        "-DTWITCH_HASH=$TWITCH_HASH",
+        "-DYOUTUBE_CLIENTID=$YOUTUBE_CLIENTID",
+        "-DYOUTUBE_CLIENTID_HASH=$YOUTUBE_CLIENTID_HASH",
+        "-DYOUTUBE_SECRET=$YOUTUBE_SECRET",
+        "-DYOUTUBE_SECRET_HASH=$YOUTUBE_SECRET_HASH"
+      ],
+      "post-install": [
+        "install -d /app/plugins",
+        "install -d /app/extensions/Plugins"
+      ],
+      "sources": [
+        {
+          "type": "dir",
+          "path": "../"
+        }
+      ]
+    }
+  ]
+}

+ 24 - 0
build-aux/modules/10-mbedtls.json

@@ -0,0 +1,24 @@
+{
+  "name": "mbedtls",
+  "buildsystem": "cmake-ninja",
+  "builddir": true,
+  "config-opts": [
+    "-DCMAKE_BUILD_TYPE=Release",
+    "-DCMAKE_POSITION_INDEPENDENT_CODE=ON",
+    "-DUSE_SHARED_MBEDTLS_LIBRARY=ON",
+    "-DUSE_STATIC_MBEDTLS_LIBRARY=OFF",
+    "-DENABLE_TESTING=OFF",
+    "-DENABLE_PROGRAMS=OFF"
+  ],
+  "cleanup": [
+    "/include"
+  ],
+  "sources": [
+    {
+      "type": "git",
+      "url": "https://github.com/ARMmbed/mbedtls.git",
+      "commit": "869298bffeea13b205343361b7a7daf2b210e33d",
+      "tag": "v3.2.1"
+    }
+  ]
+}

+ 26 - 0
build-aux/modules/20-aom.json

@@ -0,0 +1,26 @@
+{
+  "name": "aom",
+  "buildsystem": "cmake-ninja",
+  "builddir": true,
+  "config-opts": [
+    "-DCMAKE_BUILD_TYPE=Release",
+    "-DBUILD_SHARED_LIBS=ON",
+    "-DENABLE_DOCS=OFF",
+    "-DENABLE_EXAMPLES=OFF",
+    "-DENABLE_TESTDATA=OFF",
+    "-DENABLE_TESTS=OFF",
+    "-DENABLE_TOOLS=OFF "
+  ],
+  "cleanup": [
+    "/include",
+    "/lib/pkgconfig"
+  ],
+  "sources": [
+    {
+      "type": "git",
+      "url": "https://aomedia.googlesource.com/aom.git",
+      "tag": "v3.6.0",
+      "commit": "3c65175b1972da4a1992c1dae2365b48d13f9a8d"
+    }
+  ]
+}

+ 22 - 0
build-aux/modules/20-librist.json

@@ -0,0 +1,22 @@
+{
+  "name": "librist",
+  "buildsystem": "meson",
+  "builddir": true,
+  "config-opts": [
+    "-Duse_mbedtls=true",
+    "-Dtest=false",
+    "-Dbuilt_tools=false",
+    "-Dbuiltin_cjson=true"
+  ],
+  "cleanup": [
+    "/include",
+    "/lib/pkgconfig"
+  ],
+  "sources": [
+    {
+      "type": "git",
+      "url": "https://code.videolan.org/rist/librist.git",
+      "commit": "809390b3b75a259a704079d0fb4d8f1b5f7fa956"
+    }
+  ]
+}

+ 18 - 0
build-aux/modules/20-nv-codec.json

@@ -0,0 +1,18 @@
+{
+  "name": "nv-codec",
+  "no-autogen": true,
+  "make-install-args": [
+    "PREFIX=/app"
+  ],
+  "cleanup": [
+    "*"
+  ],
+  "sources": [
+    {
+      "type": "git",
+      "url": "https://github.com/FFmpeg/nv-codec-headers.git",
+      "tag": "n12.0.16.0",
+      "commit": "c5e4af74850a616c42d39ed45b9b8568b71bf8bf"
+    }
+  ]
+}

+ 23 - 0
build-aux/modules/20-srt.json

@@ -0,0 +1,23 @@
+{
+  "name": "srt",
+  "buildsystem": "cmake-ninja",
+  "config-opts": [
+    "-DCMAKE_BUILD_TYPE=Release",
+    "-DENABLE_STATIC=OFF",
+    "-DENABLE_APPS=OFF",
+    "-DENABLE_LOGGING=OFF"
+  ],
+  "cleanup": [
+    "/include",
+    "/lib/pkgconfig",
+    "/bin"
+  ],
+  "sources": [
+    {
+      "type": "git",
+      "url": "https://github.com/Haivision/srt.git",
+      "tag": "v1.5.1",
+      "commit": "0bc3b03202b3159fc9b085b3ae6d66ec071c25d6"
+    }
+  ]
+}

+ 25 - 0
build-aux/modules/20-svt-av1.json

@@ -0,0 +1,25 @@
+{
+  "name": "svt-av1",
+  "buildsystem": "cmake-ninja",
+  "builddir": true,
+  "config-opts": [
+    "-DCMAKE_BUILD_TYPE=Release",
+    "-DBUILD_SHARED_LIBS=ON",
+    "-DBUILD_APPS=OFF",
+    "-DBUILD_DEC=ON",
+    "-DBUILD_ENC=ON",
+    "-DBUILD_TESTING=OFF"
+  ],
+  "cleanup": [
+    "/include",
+    "/lib/pkgconfig"
+  ],
+  "sources": [
+    {
+      "type": "git",
+      "url": "https://gitlab.com/AOMediaCodec/SVT-AV1.git",
+      "tag": "v1.4.1",
+      "commit": "018276d714ce65d9b586f6205ee016cbd8d5425d"
+    }
+  ]
+}

+ 18 - 0
build-aux/modules/20-x264.json

@@ -0,0 +1,18 @@
+{
+  "name": "x264",
+  "config-opts": [
+    "--disable-cli",
+    "--enable-shared"
+  ],
+  "cleanup": [
+    "/include",
+    "/lib/pkgconfig"
+  ],
+  "sources": [
+    {
+      "type": "git",
+      "url": "https://code.videolan.org/videolan/x264.git",
+      "commit": "eaa68fad9e5d201d42fde51665f2d137ae96baf0"
+    }
+  ]
+}

+ 46 - 0
build-aux/modules/30-ffmpeg.json

@@ -0,0 +1,46 @@
+{
+  "name": "ffmpeg",
+  "config-opts": [
+    "--enable-gpl",
+    "--enable-shared",
+    "--disable-static",
+    "--enable-gnutls",
+    "--disable-doc",
+    "--disable-programs",
+    "--disable-devices",
+    "--enable-libopus",
+    "--enable-libvpx",
+    "--enable-libvorbis",
+    "--enable-libx264",
+    "--enable-nvenc",
+    "--enable-libsrt",
+    "--enable-librist",
+    "--enable-libaom",
+    "--enable-libsvtav1"
+  ],
+  "cleanup": [
+    "/share/ffmpeg"
+  ],
+  "sources": [
+    {
+      "type": "git",
+      "url": "https://github.com/FFmpeg/FFmpeg.git",
+      "commit": "a6dc92968a325d331bb6dcf9b3b2248026cd1d6c",
+      "disable-shallow-clone": true
+    },
+    {
+      "type": "git",
+      "dest": "obs-deps",
+      "url": "https://github.com/obsproject/obs-deps.git",
+      "tag": "2023-04-12",
+      "commit": "24e25fd83e6938cfe3cc5020230430b31ba5df59"
+    },
+    {
+      "type": "shell",
+      "commands": [
+        "patch -Np1 -i obs-deps/deps.ffmpeg/patches/FFmpeg/0001-flvdec-handle-unknown.patch",
+        "patch -Np1 -i obs-deps/deps.ffmpeg/patches/FFmpeg/0002-libaomenc-presets.patch"
+      ]
+    }
+  ]
+}

+ 24 - 0
build-aux/modules/40-luajit.json

@@ -0,0 +1,24 @@
+{
+  "name": "luajit",
+  "no-autogen": true,
+  "cleanup": [
+    "/bin",
+    "/include",
+    "/lib/pkgconfig",
+    "*.a"
+  ],
+  "sources": [
+    {
+      "type": "git",
+      "url": "https://luajit.org/git/luajit-2.0.git",
+      "commit": "505e2c03de35e2718eef0d2d3660712e06dadf1f",
+      "disable-shallow-clone": true
+    },
+    {
+      "type": "shell",
+      "commands": [
+        "sed -i 's|/usr/local|/app|' ./Makefile"
+      ]
+    }
+  ]
+}

+ 24 - 0
build-aux/modules/50-jansson.json

@@ -0,0 +1,24 @@
+{
+  "name": "jansson",
+  "buildsystem": "cmake-ninja",
+  "builddir": true,
+  "config-opts": [
+    "-DCMAKE_BUILD_TYPE=Release",
+    "-DJANSSON_EXAMPLES=OFF",
+    "-DJANSSON_BUILD_DOCS=OFF",
+    "-DJANSSON_BUILD_SHARED_LIBS=ON",
+    "-DJANSSON_WITHOUT_TESTS=ON"
+  ],
+  "cleanup": [
+    "/include",
+    "/lib/pkgconfig"
+  ],
+  "sources": [
+    {
+      "type": "git",
+      "url": "https://github.com/akheron/jansson.git",
+      "tag": "v2.14",
+      "commit": "684e18c927e89615c2d501737e90018f4930d6c5"
+    }
+  ]
+}

+ 22 - 0
build-aux/modules/50-ntv2.json

@@ -0,0 +1,22 @@
+{
+  "name": "ntv2",
+  "buildsystem": "cmake-ninja",
+  "builddir": true,
+  "config-opts": [
+    "-DCMAKE_BUILD_TYPE=Release",
+    "-DAJA_BUILD_OPENSOURCE=ON",
+    "-DAJA_BUILD_APPS=OFF",
+    "-DAJA_INSTALL_HEADERS=ON"
+  ],
+  "cleanup": [
+    "/include"
+  ],
+  "sources": [
+    {
+      "type": "git",
+      "url": "https://github.com/aja-video/ntv2.git",
+      "tag": "v16.2-bugfix5",
+      "commit": "0acbac70a0b5e6509cca78cfbf69974c73c10db9"
+    }
+  ]
+}

+ 32 - 0
build-aux/modules/50-pipewire.json

@@ -0,0 +1,32 @@
+{
+  "name": "pipewire",
+  "buildsystem": "meson",
+  "config-opts": [
+    "-Daudiotestsrc=disabled",
+    "-Droc=disabled",
+    "-Dvideotestsrc=disabled",
+    "-Dvolume=disabled",
+    "-Dvulkan=disabled",
+    "-Ddocs=disabled",
+    "-Dman=disabled",
+    "-Dbluez5-codec-ldac=disabled",
+    "-Dbluez5-codec-aptx=disabled",
+    "-Dlibcamera=disabled",
+    "-Dudevrulesdir=/app/lib/udev/rules.d/",
+    "-Dsession-managers=[]",
+    "-Dtests=disabled",
+    "-Dexamples=disabled",
+    "-Dpw-cat=disabled"
+  ],
+  "cleanup": [
+    "/bin"
+  ],
+  "sources": [
+    {
+      "type": "git",
+      "url": "https://github.com/pipewire/pipewire.git",
+      "tag": "0.3.65",
+      "commit": "9558a5d5e0360d8af822431c76ee858a8c7495ac"
+    }
+  ]
+}

+ 21 - 0
build-aux/modules/50-swig.json

@@ -0,0 +1,21 @@
+{
+  "name": "swig",
+  "config-opts": [
+    "--without-boost",
+    "--without-pcre",
+    "--without-alllang",
+    "--with-lua=/app/bin/luajit-2.1.0-beta3",
+    "--with-luaincl=/app/include/luajit-2.1",
+    "--with-python3"
+  ],
+  "cleanup": [
+    "*"
+  ],
+  "sources": [
+    {
+      "type": "archive",
+      "url": "https://prdownloads.sourceforge.net/swig/swig-4.0.2.tar.gz",
+      "sha256": "d53be9730d8d58a16bf0cbd1f8ac0c0c3e1090573168bfa151b01eb47fa906fc"
+    }
+  ]
+}

+ 22 - 0
build-aux/modules/50-v4l-utils.json

@@ -0,0 +1,22 @@
+{
+  "name": "v4l-utils",
+  "config-opts": [
+    "--disable-static",
+    "--disable-doxygen-doc",
+    "--disable-libdvbv5",
+    "--disable-v4l-utils",
+    "--disable-qv4l2",
+    "--with-udevdir=/app/lib/udev/"
+  ],
+  "cleanup": [
+    "/include",
+    "/lib/pkgconfig"
+  ],
+  "sources": [
+    {
+      "type": "archive",
+      "url": "https://linuxtv.org/downloads/v4l-utils/v4l-utils-1.22.0.tar.bz2",
+      "sha256": "1069e5d7909bcc563baeaadc3a5c496f0e658524c413cf7818816e37bfcea344"
+    }
+  ]
+}

+ 17 - 0
build-aux/modules/90-asio.json

@@ -0,0 +1,17 @@
+{
+  "name": "asio",
+  "buildsystem": "simple",
+  "build-commands": [
+    "mkdir -p /app/include",
+    "cp asio/include/asio.hpp /app/include/",
+    "cp -R asio/include/asio /app/include/"
+  ],
+  "sources": [
+    {
+      "type": "git",
+      "url": "https://github.com/chriskohlhoff/asio.git",
+      "tag": "asio-1-12-1",
+      "commit": "b73dc1d2c0ecb9452a87c26544d7f71e24342df6"
+    }
+  ]
+}

+ 17 - 0
build-aux/modules/90-nlohmann-json.json

@@ -0,0 +1,17 @@
+{
+  "name": "nlohmann-json",
+  "buildsystem": "cmake-ninja",
+  "builddir": true,
+  "config-opts": [
+    "-DCMAKE_BUILD_TYPE=Release",
+    "-DJSON_BuildTests=OFF"
+  ],
+  "sources": [
+    {
+      "type": "git",
+      "url": "https://github.com/nlohmann/json.git",
+      "tag": "v3.11.2",
+      "commit": "bc889afb4c5bf1c0d8ee29ef35eaaf4c8bef8a5d"
+    }
+  ]
+}

+ 19 - 0
build-aux/modules/90-websocketpp.json

@@ -0,0 +1,19 @@
+{
+  "name": "websocketpp",
+  "buildsystem": "cmake-ninja",
+  "builddir": true,
+  "config-opts": [
+    "-DCMAKE_BUILD_TYPE=Release",
+    "-DENABLE_CPP11=ON",
+    "-DBUILD_EXAMPLES=OFF",
+    "-DBUILD_TESTS=OFF"
+  ],
+  "sources": [
+    {
+      "type": "git",
+      "url": "https://github.com/zaphoyd/websocketpp.git",
+      "tag": "0.8.2",
+      "commit": "56123c87598f8b1dd471be83ca841ceae07f95ba"
+    }
+  ]
+}

+ 28 - 0
build-aux/modules/99-cef.json

@@ -0,0 +1,28 @@
+{
+  "name": "cef",
+  "buildsystem": "cmake-ninja",
+  "config-opts": [
+    "-DCMAKE_BUILD_TYPE=Release"
+  ],
+  "no-make-install": true,
+  "make-args": [
+    "libcef_dll_wrapper"
+  ],
+  "build-commands": [
+    "mkdir -p /app/cef/libcef_dll_wrapper",
+    "cp -R ./include /app/cef",
+    "cp -R ./Release /app/cef",
+    "cp -R ./Resources /app/cef",
+    "cp -R ./libcef_dll_wrapper/libcef_dll_wrapper.a /app/cef/libcef_dll_wrapper"
+  ],
+  "cleanup": [
+    "*"
+  ],
+  "sources": [
+    {
+      "type": "archive",
+      "url": "https://cdn-fastly.obsproject.com/downloads/cef_binary_5060_linux64.tar.bz2",
+      "sha256": "ac4e2a8ebf20700e4e36353e314f876623633dd5b474778a2548bb66bdbea11d"
+    }
+  ]
+}