├── .github ├── dependabot.yml └── workflows │ ├── CI.yml │ ├── base.yml │ ├── kaseifu-no-mita.yml │ └── nightly.yml ├── .gitignore ├── LICENSE ├── README.md ├── addins └── debug.sh ├── build.sh ├── generate.sh ├── images ├── base-win32 │ ├── Dockerfile │ ├── check-wget.sh │ ├── cross.meson │ ├── git-mini-clone.sh │ ├── run_stage.sh │ └── toolchain.cmake └── base-win64 │ ├── Dockerfile │ ├── check-wget.sh │ ├── cross.meson │ ├── git-mini-clone.sh │ ├── run_stage.sh │ └── toolchain.cmake ├── makeimage.sh ├── scripts.d ├── 10-mingw-std-threads.sh ├── 10-mingw.sh ├── 15-libiconv.sh ├── 20-libxml2.sh ├── 20-zlib-ng.sh ├── 25-fftw3.sh ├── 25-freetype.sh ├── 25-fribidi.sh ├── 25-gmp.sh ├── 25-libogg.sh ├── 25-xz.sh ├── 30-harfbuzz.sh ├── 35-fontconfig.sh ├── 45-libsamplerate.sh ├── 45-libvorbis.sh ├── 45-opencl.sh ├── 45-vmaf.sh ├── 50-amf.sh ├── 50-avisynth.sh ├── 50-chromaprint.sh ├── 50-dav1d.sh ├── 50-davs2.sh ├── 50-decklink.sh ├── 50-dvd │ ├── 30-libdvdcss.sh │ ├── 40-libdvdread.sh │ └── 50-libdvdnav.sh ├── 50-ffnvcodec.sh ├── 50-gme.sh ├── 50-h266 │ └── 50-vvenc.sh ├── 50-kvazaar.sh ├── 50-libaribcaption.sh ├── 50-libass │ ├── 45-libunibreak.sh │ └── 50-libass.sh ├── 50-libbluray.sh ├── 50-libfdk-aac.sh ├── 50-libjxl │ ├── 45-brotli.sh │ ├── 45-lcms2.sh │ └── 50-libjxl.sh ├── 50-liblc3.sh ├── 50-libmp3lame.sh ├── 50-libopus.sh ├── 50-librist.sh ├── 50-libtheora.sh ├── 50-libva.sh ├── 50-libvpl.sh ├── 50-libvpx.sh ├── 50-libwebp.sh ├── 50-libzmq.sh ├── 50-mpeg-5 │ ├── 50-lcevc-dec.sh │ ├── 50-xevd.sh │ └── 50-xeve.sh ├── 50-openal.sh ├── 50-openapv.sh ├── 50-opencore-amr.sh ├── 50-openh264.sh ├── 50-openjpeg.sh ├── 50-openmpt.sh ├── 50-protocol │ ├── 25-openssl.sh │ ├── 50-libssh.sh │ └── 50-srt.sh ├── 50-rav1e.sh ├── 50-rubberband.sh ├── 50-schannel.sh ├── 50-sdl.sh ├── 50-snappy.sh ├── 50-soxr.sh ├── 50-svtav1.sh ├── 50-twolame.sh ├── 50-uavs3d.sh ├── 50-vidstab.sh ├── 50-vulkan │ ├── 45-vulkan.sh │ ├── 50-shaderc.sh │ ├── 55-spirv-cross.sh │ └── 60-libplacebo.sh ├── 50-x264.sh ├── 50-x265.sh ├── 50-xavs2.sh ├── 50-zimg.sh └── 50-zvbi.sh ├── util ├── prunetags.sh ├── update_scripts.sh └── vars.sh └── variants ├── default-install-nonfree-shared.sh ├── default-install-nonfree.sh ├── default-install-shared.sh ├── default-install.sh ├── defaults-gpl-shared.sh ├── defaults-gpl.sh ├── defaults-lgpl-shared.sh ├── defaults-lgpl.sh ├── defaults-nonfree-shared.sh ├── defaults-nonfree.sh ├── win32-gpl-shared.sh ├── win32-gpl.sh ├── win32-lgpl-shared.sh ├── win32-lgpl.sh ├── win32-nonfree-shared.sh ├── win32-nonfree.sh ├── win64-gpl-shared.sh ├── win64-gpl.sh ├── win64-lgpl-shared.sh ├── win64-lgpl.sh ├── win64-nonfree-shared.sh └── win64-nonfree.sh /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | updates: 3 | 4 | - package-ecosystem: "github-actions" 5 | directory: "/" 6 | schedule: 7 | interval: "daily" 8 | -------------------------------------------------------------------------------- /.github/workflows/CI.yml: -------------------------------------------------------------------------------- 1 | name: Windows Cross Compiled 2 | 3 | on: 4 | push: 5 | branches-ignore: 6 | - 'dependabot/**' 7 | 8 | workflow_dispatch: 9 | 10 | jobs: 11 | build_targets: 12 | name: Build target-variant image 13 | runs-on: ubuntu-24.04 14 | strategy: 15 | fail-fast: false 16 | matrix: 17 | target: [win64] 18 | variant: [nonfree] 19 | steps: 20 | - name: Checkout 21 | uses: actions/checkout@v4 22 | 23 | - name: Create and Boot docker-container Driver 24 | uses: docker/setup-buildx-action@v3 25 | with: 26 | buildkitd-config-inline: | 27 | [worker.oci] 28 | max-parallelism = 2 29 | 30 | - name: Login to GitHub Container Registry 31 | uses: docker/login-action@v3 32 | with: 33 | registry: ghcr.io 34 | username: ${{ github.actor }} 35 | password: ${{ secrets.dodosolsollalasol }} 36 | 37 | - name: Generate Dockerfile 38 | run: ./generate.sh ${{ matrix.target }} ${{ matrix.variant }} 39 | 40 | - name: Image Name 41 | id: imagename 42 | run: | 43 | IMG="ghcr.io/${GITHUB_ACTOR,,}/${{ matrix.target }}-${{ matrix.variant }}" 44 | echo "image=${IMG/ /-}:latest" >> "$GITHUB_OUTPUT" 45 | echo "cache=${IMG/ /-}:cache" >> "$GITHUB_OUTPUT" 46 | 47 | - name: Build variant image 48 | uses: docker/build-push-action@v6 49 | with: 50 | context: . 51 | outputs: type=registry,oci-mediatypes=true,compression=zstd,compression-level=7 52 | cache-from: type=registry,ref=${{ steps.imagename.outputs.cache }} 53 | cache-to: type=registry,ref=${{ steps.imagename.outputs.cache }},mode=max,oci-mediatypes=true,compression=zstd,compression-level=7 54 | tags: ${{ steps.imagename.outputs.image }} 55 | provenance: false 56 | 57 | ffmpeg_latest: 58 | name: Get FFmpeg latest commit 59 | needs: build_targets 60 | runs-on: ubuntu-24.04 61 | outputs: 62 | commit: ${{ steps.sha.outputs.ffmpeg_commit }} 63 | steps: 64 | - name: Get FFmpeg latest commit 65 | id: sha 66 | env: 67 | GITHUB_TOKEN: ${{ github.token }} 68 | run: | 69 | sha=$(gh api repos/FFmpeg/FFmpeg/commits/master --jq '.sha') 70 | echo "ffmpeg_commit=${sha}" >> "$GITHUB_OUTPUT" 71 | 72 | build_ffmpeg: 73 | name: Build ffmpeg 74 | needs: ffmpeg_latest 75 | runs-on: ubuntu-24.04 76 | strategy: 77 | fail-fast: false 78 | matrix: 79 | target: [win64] 80 | variant: [nonfree, nonfree-shared] 81 | steps: 82 | - name: Checkout 83 | uses: actions/checkout@v4 84 | 85 | - name: Login to GitHub Container Registry 86 | uses: docker/login-action@v3 87 | with: 88 | registry: ghcr.io 89 | username: ${{ github.actor }} 90 | password: ${{ secrets.dodosolsollalasol }} 91 | 92 | - name: Build ffmpeg 93 | run: ./build.sh ${{ matrix.target }} ${{ matrix.variant }} 94 | env: 95 | FFMPEG_COMMIT: ${{ needs.ffmpeg_latest.outputs.commit }} 96 | 97 | - name: Replace spaces in artifact name 98 | id: artifact 99 | run: | 100 | REF="${{ matrix.target }}-${{ matrix.variant }}" 101 | echo "name=${REF// /-}" >> "$GITHUB_OUTPUT" 102 | 103 | - name: Upload artifact 104 | uses: actions/upload-artifact@v4 105 | with: 106 | name: ffmpeg-${{ steps.artifact.outputs.name }} 107 | path: artifacts/ 108 | retention-days: 1 109 | -------------------------------------------------------------------------------- /.github/workflows/base.yml: -------------------------------------------------------------------------------- 1 | name: Base image 2 | 3 | on: 4 | workflow_dispatch: 5 | 6 | jobs: 7 | build_bases: 8 | name: Build base image 9 | runs-on: ubuntu-24.04 10 | strategy: 11 | fail-fast: false 12 | matrix: 13 | target: [win64] 14 | steps: 15 | - name: Checkout 16 | uses: actions/checkout@v4 17 | 18 | - name: Create and Boot docker-container Driver 19 | uses: docker/setup-buildx-action@master 20 | 21 | - name: Login to GitHub Container Registry 22 | uses: docker/login-action@v3 23 | with: 24 | registry: ghcr.io 25 | username: ${{ github.actor }} 26 | password: ${{ secrets.dodosolsollalasol }} 27 | 28 | - name: Image Name 29 | id: imagename 30 | run: | 31 | IMG="ghcr.io/${GITHUB_ACTOR,,}/base-${{ matrix.target }}" 32 | echo "image=${IMG/ /-}:latest" >> "$GITHUB_OUTPUT" 33 | echo "cache=${IMG/ /-}:cache" >> "$GITHUB_OUTPUT" 34 | 35 | - name: Build base image 36 | uses: docker/build-push-action@v6 37 | with: 38 | context: images/base-${{ matrix.target }} 39 | outputs: type=registry,oci-mediatypes=true,compression=zstd,compression-level=7 40 | cache-from: type=registry,ref=${{ steps.imagename.outputs.cache }} 41 | cache-to: type=registry,ref=${{ steps.imagename.outputs.cache }},mode=max,oci-mediatypes=true,compression=zstd,compression-level=7 42 | tags: ${{ steps.imagename.outputs.image }} 43 | provenance: false 44 | 45 | -------------------------------------------------------------------------------- /.github/workflows/kaseifu-no-mita.yml: -------------------------------------------------------------------------------- 1 | name: I am Mita, Your Housekeeper # 家政婦のミタ 2 | 3 | on: 4 | schedule: 5 | - cron: '0 23 * * TUE' # Runs at 08:00 Tokyo time every Wednesday ⌚ 6 | - cron: '0 23 27 * *' # Runs at 08:00 Tokyo time on day-of-month 28 🗓️ 7 | 8 | workflow_dispatch: 9 | inputs: 10 | prune_tags: 11 | description: 'Prune old releases' 12 | type: boolean 13 | default: false 14 | prune_pkgs: 15 | description: 'Prune untagged packages' 16 | type: boolean 17 | default: false 18 | 19 | jobs: 20 | prune_old_releases: 21 | if: github.event.schedule == '0 23 * * TUE' || github.event.inputs.prune_tags == 'true' 22 | runs-on: ubuntu-24.04 23 | steps: 24 | - name: Checkout 25 | uses: actions/checkout@v4 26 | 27 | - name: Prune old releases 28 | run: ./util/prunetags.sh 29 | env: 30 | GH_TOKEN: ${{ github.token }} 31 | 32 | prune_untagged_pkgs: 33 | if: github.event.schedule == '0 23 27 * *' || github.event.inputs.prune_pkgs == 'true' 34 | runs-on: ubuntu-24.04 35 | strategy: 36 | fail-fast: false 37 | matrix: 38 | image_name: [fedora,base-win64,win64-nonfree] 39 | steps: 40 | - name: Prune untagged pkgs 41 | uses: actions/github-script@v7 42 | with: 43 | github-token: ${{ secrets.dodosolsollalasol }} 44 | script: | 45 | // list package versions 46 | const list_package_versions = await github.request(`GET /user/packages/container/${{ matrix.image_name }}/versions`, { 47 | per_page: 100 48 | }); 49 | 50 | // get only the versions with no tags 51 | const versions_to_prune = list_package_versions.data.filter(version => version.metadata.container.tags.length === 0); 52 | 53 | // get the ids of the versions to prune 54 | const ids_to_prune = versions_to_prune.map(version => version.id); 55 | 56 | // delete all the versions in parallel 57 | const prune_results = await Promise.all(ids_to_prune.map(id => { 58 | return github.request(`DELETE /user/packages/container/${{ matrix.image_name }}/versions/${id}`) 59 | .then(result => { 60 | return `✂️ prune ${id} ${result.status === 204 ? "🎉 success" : "❌ failure"}`; 61 | }); 62 | })); 63 | 64 | prune_results.forEach(message => console.log(message)); 65 | -------------------------------------------------------------------------------- /.github/workflows/nightly.yml: -------------------------------------------------------------------------------- 1 | name: Nightly Build 2 | 3 | on: 4 | workflow_dispatch: 5 | schedule: 6 | - cron: '0 21 * * *' # Runs at 06:00 Tokyo time every day 🕕 7 | 8 | jobs: 9 | decision_task: 10 | name: Determine whether to perform Nightly build 11 | runs-on: ubuntu-24.04 12 | outputs: 13 | status: ${{ steps.decision.outputs.status }} 14 | commit: ${{ steps.decision.outputs.ffmpeg_commit }} 15 | steps: 16 | - name: Take a decision 17 | id: decision 18 | env: 19 | GH_TOKEN: ${{ github.token }} 20 | run: | 21 | set -xe 22 | LATEST_RELEASE=$(gh api repos/${{ github.repository }}/releases/latest --jq '.body' | cut -d@ -f2) 23 | FFMPEG_LATEST=$(gh api repos/FFmpeg/FFmpeg/commits/master --jq '.sha' | cut -c1-9) 24 | echo "ffmpeg_commit=${FFMPEG_LATEST}" >> "$GITHUB_OUTPUT" 25 | if [[ "$LATEST_RELEASE" == "$FFMPEG_LATEST" ]]; then 26 | echo "status=skip" >> "$GITHUB_OUTPUT" 27 | else 28 | echo "status=proceed" >> "$GITHUB_OUTPUT" 29 | fi 30 | 31 | build_ffmpeg: 32 | needs: decision_task 33 | if: needs.decision_task.outputs.status == 'proceed' 34 | name: Build ffmpeg 35 | runs-on: ubuntu-24.04 36 | strategy: 37 | fail-fast: false 38 | matrix: 39 | target: [win64] 40 | variant: [nonfree, nonfree-shared] 41 | steps: 42 | - name: Checkout 43 | uses: actions/checkout@v4 44 | 45 | - name: Login to GitHub Container Registry 46 | uses: docker/login-action@v3 47 | with: 48 | registry: ghcr.io 49 | username: ${{ github.actor }} 50 | password: ${{ secrets.dodosolsollalasol }} 51 | 52 | - name: Build ffmpeg 53 | run: ./build.sh ${{ matrix.target }} ${{ matrix.variant }} 54 | env: 55 | FFMPEG_COMMIT: ${{ needs.decision_task.outputs.commit }} 56 | 57 | - name: Replace spaces in artifact name 58 | id: artifact 59 | run: | 60 | REF="${{ matrix.target }}-${{ matrix.variant }}" 61 | echo "name=${REF// /-}" >> "$GITHUB_OUTPUT" 62 | 63 | - name: Upload artifact 64 | uses: actions/upload-artifact@v4 65 | with: 66 | name: ffmpeg-${{ steps.artifact.outputs.name }} 67 | path: artifacts/ 68 | retention-days: 1 69 | 70 | publish_release: 71 | name: Publish release 72 | needs: build_ffmpeg 73 | runs-on: ubuntu-24.04 74 | steps: 75 | - name: Checkout 76 | uses: actions/checkout@v4 77 | 78 | - name: Download artifacts 79 | uses: actions/download-artifact@v4 80 | with: 81 | path: artifacts 82 | 83 | - name: Create release 84 | id: create_release 85 | env: 86 | GH_TOKEN: ${{ github.token }} 87 | run: | 88 | set -xe 89 | 90 | BUILDID=$(date +'%Y-%m-%d-%H-%M') 91 | STUB=$(find artifacts -iname '*.zst' | head -1 | xargs -I{} basename {}) 92 | REV=$(echo "$STUB" | cut -d'-' -f5) 93 | NTAG=$(echo "$STUB" | cut -d'-' -f3) 94 | 95 | TITLE="Build $BUILDID" 96 | RELNOTE="Built from FFmpeg/FFmpeg@$REV" 97 | TAGNAME="build-$BUILDID-n$NTAG" 98 | 99 | gh release create "$TAGNAME" \ 100 | --title "$TITLE" \ 101 | --notes "$RELNOTE" \ 102 | artifacts/*/*.zst 103 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /Dockerfile 2 | /ffbuild/ 3 | /artifacts/ 4 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright 2020-2021 BtbN 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 4 | 5 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 6 | 7 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 8 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | Essentially it's a tool, tinderbox, that automates the process of checking out and building a recent FFmpeg source code, including nonfree libraries such as libfdk-aac and decklink. 2 | 3 | For a manual build, follow detailed instructions below: 4 | 5 | --- 6 | 7 | ## Prelude 8 | 9 | ***Requirements*** 10 | 11 | Ensure you have the following tools installed on your system: 12 | 13 | - **Bash** 14 | - **Docker** 15 | 16 | ***Targets, Variants and Addins*** 17 | 18 | #### Targets: 19 | 20 | - `win64`: Build for 64-bit Windows 21 | - `win32`: Build for 32-bit Windows 22 | 23 | #### Variants: 24 | 25 | - `gpl`: Builds all libraries from `scripts.d` folder *except* `libfdk-aac` and `decklink` 26 | - `lgpl`: Excludes additional libraries (`avisynth`, `davs2`, `vidstab`, `x264`, `x265` and `xavs2`) 27 | - `nonfree`: Includes both non-free libraries (`libfdk-aac` and `decklink`) and all libraries of the gpl variant 28 | 29 | #### Addins: 30 | 31 | - `debug`: Adds debug symbols to the build. It's `gdb` compatible embedded debug info 32 | 33 | ## Building 34 | 35 | 1. Build base-image: 36 | 37 | ```console 38 | docker build -t ghcr.io/nanake/base-${TARGET}:latest images/base-${TARGET} 39 | ``` 40 | 41 | *Note:* You might need to modify the *rootfs* image by specifying a public image base, such as `fedora:rawhide`. 42 | 43 | 2. Build target-variant image: 44 | 45 | ```console 46 | ./generate.sh ${TARGET} ${VARIANT} 47 | docker build -t ghcr.io/nanake/${TARGET}-${VARIANT}:latest . 48 | ``` 49 | *Alternatively*, You can build both *base-image* and *target-variant* image by simply invoke `makeimage.sh`. For example: 50 | 51 | ```console 52 | ./makeimage.sh win64 nonfree 53 | ``` 54 | 55 | 3. Build FFmpeg 56 | 57 | ```console 58 | ./build.sh ${TARGET} ${VARIANT} ${ADDINS} 59 | ``` 60 | To create a `shared` build of FFmpeg, append `-shared` to the `VARIANT` name. For example: 61 | 62 | ```console 63 | ./build.sh win64 gpl-shared 64 | ``` 65 | Upon successful build completion, the build artifacts will be available in the `artifacts` folder. 66 | 67 | --- 68 | 69 | ## Enabled libraries 70 | 71 | - iconv 72 | - libxml2 73 | - zlib 74 | - libfreetype 75 | - libfribidi 76 | - gmp 77 | - lzma 78 | - libharfbuzz 79 | - libfontconfig 80 | - libvorbis 81 | - opencl 82 | - libvmaf 83 | - amf 84 | - avisynth 85 | - chromaprint 86 | - cuda-llvm 87 | - decklink 88 | - ffnvcodec 89 | - libaribcaption 90 | - libass 91 | - libbluray 92 | - libdav1d 93 | - libdavs2 94 | - libdvdnav 95 | - libdvdread 96 | - libfdk-aac 97 | - libgme 98 | - libjxl 99 | - libkvazaar 100 | - liblc3 101 | - liblcevc-dec 102 | - libmp3lame 103 | - liboapv 104 | - libopencore-amrnb 105 | - libopencore-amrwb 106 | - libopenh264 107 | - libopenjpeg 108 | - libopenmpt 109 | - libopus 110 | - libplacebo 111 | - librav1e 112 | - librist 113 | - librubberband 114 | - libshaderc 115 | - libsnappy 116 | - libsoxr 117 | - libsrt 118 | - libssh 119 | - libsvtav1 120 | - libtheora 121 | - libtwolame 122 | - libuavs3d 123 | - libvidstab 124 | - libvpl 125 | - libvpx 126 | - libvvenc 127 | - libwebp 128 | - libx264 129 | - libx265 130 | - libxavs2 131 | - libxevd 132 | - libxeve 133 | - libzimg 134 | - libzmq 135 | - libzvbi 136 | - openal 137 | - schannel 138 | - sdl2 139 | - vaapi 140 | - vulkan 141 | 142 | --- 143 | 144 | ### Acknowledgments 145 | 146 | The foundation for this build script comes from the work of [BtbN](https://github.com/BtbN/FFmpeg-Builds). 147 | 148 | -------------------------------------------------------------------------------- /addins/debug.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | FF_CONFIGURE="${FF_CONFIGURE/--disable-debug/} --optflags='-Og' --disable-stripping" 3 | -------------------------------------------------------------------------------- /build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -e 3 | shopt -s globstar 4 | cd "$(dirname "$0")" 5 | source util/vars.sh 6 | 7 | get_output() { 8 | ( 9 | SELF="$1" 10 | source $1 11 | if ffbuild_enabled; then 12 | ffbuild_$2 || exit 0 13 | else 14 | ffbuild_un$2 || exit 0 15 | fi 16 | ) 17 | } 18 | 19 | source "variants/${TARGET}-${VARIANT}.sh" 20 | 21 | for addin in ${ADDINS[*]}; do 22 | source "addins/${addin}.sh" 23 | done 24 | 25 | for script in scripts.d/**/*.sh; do 26 | FF_CONFIGURE+=" $(get_output $script configure)" 27 | FF_CFLAGS+=" $(get_output $script cflags)" 28 | FF_CXXFLAGS+=" $(get_output $script cxxflags)" 29 | FF_LDFLAGS+=" $(get_output $script ldflags)" 30 | FF_LIBS+=" $(get_output $script libs)" 31 | done 32 | 33 | FF_CONFIGURE="$(xargs <<< "$FF_CONFIGURE")" 34 | FF_CFLAGS="$(xargs <<< "$FF_CFLAGS")" 35 | FF_CXXFLAGS="$(xargs <<< "$FF_CXXFLAGS")" 36 | FF_LDFLAGS="$(xargs <<< "$FF_LDFLAGS")" 37 | FF_LIBS="$(xargs <<< "$FF_LIBS")" 38 | 39 | if ! docker info --format '{{.SecurityOptions}}' | grep -qE '(^|\s)name=rootless($|\s)'; then 40 | UIDARGS=(-u "$(id -u):$(id -g)") 41 | fi 42 | 43 | rm -rf ffbuild 44 | mkdir ffbuild 45 | 46 | FFMPEG_REPO="${FFMPEG_REPO:-https://github.com/FFmpeg/FFmpeg.git}" 47 | FFMPEG_REPO="${FFMPEG_REPO_OVERRIDE:-$FFMPEG_REPO}" 48 | GIT_BRANCH="${GIT_BRANCH:-master}" 49 | GIT_BRANCH="${GIT_BRANCH_OVERRIDE:-$GIT_BRANCH}" 50 | 51 | BUILD_SCRIPT="$(mktemp)" 52 | trap "rm -f -- '$BUILD_SCRIPT'" EXIT 53 | 54 | cat <"$BUILD_SCRIPT" 55 | set -xe 56 | cd /ffbuild 57 | rm -rf ffmpeg prefix 58 | 59 | git clone --filter=tree:0 --branch='$GIT_BRANCH' --single-branch '$FFMPEG_REPO' ffmpeg 60 | cd ffmpeg 61 | 62 | if [[ -n "$GITHUB_ACTIONS" ]]; then 63 | git checkout "$FFMPEG_COMMIT" 64 | fi 65 | 66 | ./configure --prefix=/ffbuild/prefix --pkg-config-flags="--static" \$FFBUILD_TARGET_FLAGS $FF_CONFIGURE \ 67 | --extra-cflags="$FF_CFLAGS" --extra-cxxflags="$FF_CXXFLAGS" \ 68 | --extra-ldflags="$FF_LDFLAGS" --extra-libs="$FF_LIBS" 69 | make -j\$(nproc) 70 | make install 71 | EOF 72 | 73 | [[ -t 1 ]] && TTY_ARG="-t" || TTY_ARG="" 74 | 75 | docker run --rm -i $TTY_ARG "${UIDARGS[@]}" -v "$PWD/ffbuild":/ffbuild -v "$BUILD_SCRIPT":/build.sh "$IMAGE" bash /build.sh 76 | 77 | mkdir -p artifacts 78 | ARTIFACTS_PATH="$PWD/artifacts" 79 | FFMPEG_VERSION="$(./ffbuild/ffmpeg/ffbuild/version.sh ffbuild/ffmpeg)" 80 | BUILD_NAME="ffmpeg-${FFMPEG_VERSION//-g/-git-}-${TARGET}-${VARIANT}${ADDINS_STR:+-}${ADDINS_STR}" 81 | 82 | mkdir -p "ffbuild/pkgroot/$BUILD_NAME" 83 | package_variant ffbuild/prefix "ffbuild/pkgroot/$BUILD_NAME" 84 | 85 | if [[ -n "$GITHUB_ACTIONS" ]]; then 86 | cd ffbuild/pkgroot 87 | tar -I 'zstdmt -9 --long=31 --zstd=windowLog=31' -cf "${ARTIFACTS_PATH}/${BUILD_NAME}.tar.zst" "$BUILD_NAME" 88 | cd - 89 | else 90 | mv "ffbuild/pkgroot/$BUILD_NAME" "${ARTIFACTS_PATH}" 91 | fi 92 | 93 | rm -rf ffbuild 94 | -------------------------------------------------------------------------------- /generate.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -e 3 | cd "$(dirname "$0")" 4 | source util/vars.sh 5 | 6 | rm -f Dockerfile 7 | 8 | layername() { 9 | printf "layer-" 10 | basename "$1" | sed 's/.sh$//' 11 | } 12 | 13 | exec_dockerstage() { 14 | SCRIPT="$1" 15 | ( 16 | SELF="$SCRIPT" 17 | source "$SCRIPT" 18 | ffbuild_enabled || exit 0 19 | ffbuild_dockerstage || exit $? 20 | ) 21 | } 22 | 23 | to_df() { 24 | _of="${TODF:-Dockerfile}" 25 | printf "$@" >> "$_of" 26 | echo >> "$_of" 27 | } 28 | 29 | to_df "# syntax=docker/dockerfile:latest" 30 | to_df "FROM ${REGISTRY}/${OWNER}/base-${TARGET}:latest AS base" 31 | to_df "ENV TARGET=$TARGET VARIANT=${VARIANT%-shared} OWNER=$OWNER REPO=$REPO" 32 | 33 | PREVLAYER="base" 34 | for ID in $(ls -1d scripts.d/??-* | sed -s 's|^.*/\(..\).*|\1|' | sort -u); do 35 | LAYER="layer-$ID" 36 | 37 | for STAGE in scripts.d/$ID-*; do 38 | to_df "FROM $PREVLAYER AS $(layername "$STAGE")" 39 | 40 | if [[ -f "$STAGE" ]]; then 41 | exec_dockerstage "$STAGE" 42 | else 43 | for STAGE in "${STAGE}"/??-*; do 44 | exec_dockerstage "$STAGE" 45 | done 46 | fi 47 | done 48 | 49 | to_df "FROM $PREVLAYER AS $LAYER" 50 | for STAGE in scripts.d/$ID-*; do 51 | if [[ -f "$STAGE" ]]; then 52 | SCRIPT="$STAGE" 53 | else 54 | SCRIPTS=( "$STAGE"/??-* ) 55 | SCRIPT="${SCRIPTS[-1]}" 56 | fi 57 | 58 | ( 59 | SELF="$SCRIPT" 60 | SELFLAYER="$(layername "$STAGE")" 61 | source "$SCRIPT" 62 | ffbuild_enabled || exit 0 63 | ffbuild_dockerlayer || exit $? 64 | TODF="Dockerfile.final" PREVLAYER="__PREVLAYER__" \ 65 | ffbuild_dockerfinal || exit $? 66 | ) 67 | done 68 | 69 | PREVLAYER="$LAYER" 70 | done 71 | 72 | to_df "FROM base" 73 | sed "s/__PREVLAYER__/$PREVLAYER/g" Dockerfile.final | sort -u >> Dockerfile 74 | rm Dockerfile.final 75 | -------------------------------------------------------------------------------- /images/base-win32/Dockerfile: -------------------------------------------------------------------------------- 1 | # syntax=docker/dockerfile:latest 2 | FROM ghcr.io/nanake/fedora:rawhide AS base 3 | 4 | RUN < "${SHAFILE}" 10 | sha512sum -c "${SHAFILE}" 11 | -------------------------------------------------------------------------------- /images/base-win32/cross.meson: -------------------------------------------------------------------------------- 1 | [constants] 2 | arch = 'i686-w64-mingw32' 3 | 4 | [binaries] 5 | c = arch + '-gcc' 6 | cpp = arch + '-g++' 7 | ar = arch + '-gcc-ar' 8 | ranlib = arch + '-gcc-ranlib' 9 | strip = arch + '-strip' 10 | windres = arch + '-windres' 11 | dlltool = arch + '-dlltool' 12 | exe_wrapper = ['wine'] 13 | 14 | [properties] 15 | needs_exe_wrapper = true 16 | 17 | [host_machine] 18 | system = 'windows' 19 | cpu_family = 'x86' 20 | cpu = 'i686' 21 | endian = 'little' 22 | -------------------------------------------------------------------------------- /images/base-win32/git-mini-clone.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -xe 3 | REPO="$1" 4 | REF="$2" 5 | DEST="$3" 6 | git init "$DEST" 7 | git -C "$DEST" remote add origin "$REPO" 8 | git -C "$DEST" fetch --depth=1 origin "$REF" 9 | git -C "$DEST" config advice.detachedHead false 10 | git -C "$DEST" checkout FETCH_HEAD 11 | -------------------------------------------------------------------------------- /images/base-win32/run_stage.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -xe 3 | mkdir -p /stage 4 | source "$1" 5 | cd /stage 6 | ffbuild_dockerbuild 7 | rm -rf /stage "$FFBUILD_PREFIX"/{bin,share/doc} 8 | -------------------------------------------------------------------------------- /images/base-win32/toolchain.cmake: -------------------------------------------------------------------------------- 1 | set(CMAKE_SYSTEM_NAME Windows) 2 | set(CMAKE_SYSTEM_PROCESSOR i686) 3 | 4 | set(triple i686-w64-mingw32) 5 | 6 | set(CMAKE_C_COMPILER ${triple}-gcc) 7 | set(CMAKE_CXX_COMPILER ${triple}-g++) 8 | set(CMAKE_RC_COMPILER ${triple}-windres) 9 | set(CMAKE_RANLIB ${triple}-gcc-ranlib) 10 | set(CMAKE_AR ${triple}-gcc-ar) 11 | 12 | set(CMAKE_FIND_ROOT_PATH /usr/${triple}/sysroot/mingw /opt/ffbuild) 13 | 14 | set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) 15 | set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) 16 | set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) 17 | -------------------------------------------------------------------------------- /images/base-win64/Dockerfile: -------------------------------------------------------------------------------- 1 | # syntax=docker/dockerfile:latest 2 | FROM ghcr.io/nanake/fedora:rawhide AS base 3 | 4 | RUN < "${SHAFILE}" 10 | sha512sum -c "${SHAFILE}" 11 | -------------------------------------------------------------------------------- /images/base-win64/cross.meson: -------------------------------------------------------------------------------- 1 | [constants] 2 | arch = 'x86_64-w64-mingw32ucrt' 3 | 4 | [binaries] 5 | c = arch + '-gcc' 6 | cpp = arch + '-g++' 7 | ar = arch + '-gcc-ar' 8 | ranlib = arch + '-gcc-ranlib' 9 | strip = arch + '-strip' 10 | windres = arch + '-windres' 11 | dlltool = arch + '-dlltool' 12 | exe_wrapper = ['wine'] 13 | 14 | [properties] 15 | needs_exe_wrapper = true 16 | 17 | [host_machine] 18 | system = 'windows' 19 | cpu_family = 'x86_64' 20 | cpu = 'x86_64' 21 | endian = 'little' 22 | -------------------------------------------------------------------------------- /images/base-win64/git-mini-clone.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -xe 3 | REPO="$1" 4 | REF="$2" 5 | DEST="$3" 6 | git init "$DEST" 7 | git -C "$DEST" remote add origin "$REPO" 8 | git -C "$DEST" fetch --depth=1 origin "$REF" 9 | git -C "$DEST" config advice.detachedHead false 10 | git -C "$DEST" checkout FETCH_HEAD 11 | -------------------------------------------------------------------------------- /images/base-win64/run_stage.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -xe 3 | mkdir -p /stage 4 | source "$1" 5 | cd /stage 6 | ffbuild_dockerbuild 7 | rm -rf /stage "$FFBUILD_PREFIX"/{bin,share/doc} 8 | -------------------------------------------------------------------------------- /images/base-win64/toolchain.cmake: -------------------------------------------------------------------------------- 1 | set(CMAKE_SYSTEM_NAME Windows) 2 | set(CMAKE_SYSTEM_PROCESSOR x86_64) 3 | 4 | set(triple x86_64-w64-mingw32ucrt) 5 | 6 | set(CMAKE_C_COMPILER ${triple}-gcc) 7 | set(CMAKE_CXX_COMPILER ${triple}-g++) 8 | set(CMAKE_RC_COMPILER ${triple}-windres) 9 | set(CMAKE_RANLIB ${triple}-gcc-ranlib) 10 | set(CMAKE_AR ${triple}-gcc-ar) 11 | 12 | set(CMAKE_FIND_ROOT_PATH /usr/${triple}/sysroot/mingw /opt/ffbuild) 13 | 14 | set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) 15 | set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) 16 | set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) 17 | -------------------------------------------------------------------------------- /makeimage.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -xe 3 | cd "$(dirname "$0")" 4 | source util/vars.sh 5 | 6 | docker build --tag "$TARGET_IMAGE" "images/base-${TARGET}" 7 | 8 | ./generate.sh "$TARGET" "$VARIANT" "${ADDINS[@]}" 9 | 10 | exec docker build --tag "$IMAGE" . 11 | -------------------------------------------------------------------------------- /scripts.d/10-mingw-std-threads.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | MINGW_STD_THREADS_REPO="https://github.com/meganz/mingw-std-threads.git" 4 | MINGW_STD_THREADS_COMMIT="c931bac289dd431f1dd30fc4a5d1a7be36668073" 5 | 6 | ffbuild_enabled() { 7 | [[ $TARGET == win* ]] || return -1 8 | return 0 9 | } 10 | 11 | ffbuild_dockerbuild() { 12 | git-mini-clone "$MINGW_STD_THREADS_REPO" "$MINGW_STD_THREADS_COMMIT" mingw-std-threads 13 | cd mingw-std-threads 14 | 15 | mkdir -p "$FFBUILD_PREFIX"/include 16 | cp *.h "$FFBUILD_PREFIX"/include 17 | } 18 | -------------------------------------------------------------------------------- /scripts.d/10-mingw.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | MINGW_REPO="https://github.com/mingw-w64/mingw-w64.git" 4 | MINGW_COMMIT="de62c283f3383bd825c98518cb0a42ba071d4ac2" 5 | 6 | ffbuild_enabled() { 7 | [[ $TARGET == win* ]] || return -1 8 | return 0 9 | } 10 | 11 | ffbuild_dockerlayer() { 12 | to_df "COPY --from=${SELFLAYER} /opt/mingw/. /" 13 | to_df "COPY --from=${SELFLAYER} /opt/mingw/. /opt/mingw" 14 | } 15 | 16 | ffbuild_dockerfinal() { 17 | to_df "COPY --from=${PREVLAYER} /opt/mingw/. /" 18 | } 19 | 20 | ffbuild_dockerbuild() { 21 | git-mini-clone "$MINGW_REPO" "$MINGW_COMMIT" mingw 22 | cd mingw/mingw-w64-headers 23 | 24 | unset CFLAGS CXXFLAGS LDFLAGS PKG_CONFIG_LIBDIR 25 | 26 | SYSROOT="$($CC -print-sysroot)" 27 | MINGW_PREFIX="/opt/mingw/${SYSROOT#/}/mingw" 28 | 29 | local myconf=( 30 | --prefix="$MINGW_PREFIX" 31 | --host="$FFBUILD_TOOLCHAIN" 32 | --enable-idl 33 | ) 34 | 35 | if [[ $TARGET == win32 ]]; then 36 | myconf+=( 37 | --with-default-msvcrt=msvcrt 38 | ) 39 | fi 40 | 41 | ./configure "${myconf[@]}" 42 | make -j"$(nproc)" 43 | make install 44 | 45 | cd ../mingw-w64-crt 46 | 47 | local myconf=( 48 | --prefix="$MINGW_PREFIX" 49 | --host="$FFBUILD_TOOLCHAIN" 50 | ) 51 | 52 | if [[ $TARGET == win32 ]]; then 53 | myconf+=( 54 | --disable-lib64 55 | --enable-lib32 56 | --with-default-msvcrt=msvcrt 57 | ) 58 | elif [[ $TARGET == win64 ]]; then 59 | myconf+=( 60 | --disable-lib32 61 | --enable-lib64 62 | ) 63 | else 64 | echo "Unknown target" 65 | return -1 66 | fi 67 | 68 | ./configure "${myconf[@]}" 69 | make -j"$(nproc)" 70 | make install 71 | 72 | cd ../mingw-w64-libraries/winpthreads 73 | 74 | local myconf=( 75 | --prefix="$MINGW_PREFIX" 76 | --host="$FFBUILD_TOOLCHAIN" 77 | --with-pic 78 | --disable-shared 79 | --enable-static 80 | ) 81 | 82 | ./configure "${myconf[@]}" 83 | make -j"$(nproc)" 84 | make install 85 | } 86 | 87 | ffbuild_configure() { 88 | echo --disable-w32threads --enable-pthreads 89 | } 90 | -------------------------------------------------------------------------------- /scripts.d/15-libiconv.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # https://git.savannah.gnu.org/gitweb/?p=libiconv.git 4 | LIBICONV_REPO="https://github.com/nanake/libiconv.git" 5 | LIBICONV_COMMIT="cf10b545b7e3cc88dc4bbb7eba989e55941b12b5" 6 | 7 | GNULIB_REPO="https://github.com/coreutils/gnulib.git" 8 | GNULIB_COMMIT="48b315f19586218ea34a5161d71593bcb486efcf" 9 | 10 | ffbuild_enabled() { 11 | return 0 12 | } 13 | 14 | ffbuild_dockerbuild() { 15 | git clone --filter=tree:0 --branch=master --single-branch "$LIBICONV_REPO" libiconv 16 | cd libiconv 17 | git checkout "$LIBICONV_COMMIT" 18 | 19 | git-mini-clone "$GNULIB_REPO" "$GNULIB_COMMIT" gnulib 20 | 21 | unset CC CFLAGS 22 | 23 | local myconf=( 24 | --prefix="$FFBUILD_PREFIX" 25 | --disable-{shared,dependency-tracking} 26 | --enable-{static,extra-encodings} 27 | --with-pic 28 | ) 29 | 30 | if [[ $TARGET == win* ]]; then 31 | myconf+=( 32 | --host="$FFBUILD_TOOLCHAIN" 33 | ) 34 | else 35 | echo "Unknown target" 36 | return -1 37 | fi 38 | 39 | ./autogen.sh 40 | ./configure "${myconf[@]}" 41 | make -j"$(nproc)" 42 | make install 43 | } 44 | 45 | ffbuild_configure() { 46 | echo --enable-iconv 47 | } 48 | 49 | ffbuild_unconfigure() { 50 | echo --disable-iconv 51 | } 52 | -------------------------------------------------------------------------------- /scripts.d/20-libxml2.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | LIBXML2_REPO="https://github.com/GNOME/libxml2.git" 4 | LIBXML2_COMMIT="2b6b3945f2df548b56f2c73c490dda9781f92eb2" 5 | 6 | ffbuild_enabled() { 7 | return 0 8 | } 9 | 10 | ffbuild_dockerbuild() { 11 | git-mini-clone "$LIBXML2_REPO" "$LIBXML2_COMMIT" libxml2 12 | cd libxml2 13 | 14 | mkdir build && cd build 15 | 16 | cmake \ 17 | -DCMAKE_TOOLCHAIN_FILE="$FFBUILD_CMAKE_TOOLCHAIN" \ 18 | -DCMAKE_BUILD_TYPE=Release \ 19 | -DCMAKE_INSTALL_PREFIX="$FFBUILD_PREFIX" \ 20 | -DBUILD_SHARED_LIBS=OFF \ 21 | -DLIBXML2_WITH_{CATALOG,DEBUG,HTML,HTTP,LZMA,PROGRAMS,PYTHON,TESTS,ZLIB}=OFF \ 22 | -GNinja \ 23 | .. 24 | ninja -j"$(nproc)" 25 | ninja install 26 | 27 | sed -i "s|^prefix=.*|prefix=${FFBUILD_PREFIX}|" "$FFBUILD_PREFIX"/lib/pkgconfig/libxml-2.0.pc 28 | } 29 | 30 | ffbuild_configure() { 31 | echo --enable-libxml2 32 | } 33 | 34 | ffbuild_unconfigure() { 35 | echo --disable-libxml2 36 | } 37 | -------------------------------------------------------------------------------- /scripts.d/20-zlib-ng.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | ZLIB_REPO="https://github.com/zlib-ng/zlib-ng.git" 4 | ZLIB_COMMIT="2c98ece180e1b541f0311220e38937dd0a94d08e" 5 | 6 | ffbuild_enabled() { 7 | return 0 8 | } 9 | 10 | ffbuild_dockerbuild() { 11 | git-mini-clone "$ZLIB_REPO" "$ZLIB_COMMIT" zlib 12 | cd zlib 13 | 14 | mkdir build && cd build 15 | 16 | cmake \ 17 | -DCMAKE_TOOLCHAIN_FILE="$FFBUILD_CMAKE_TOOLCHAIN" \ 18 | -DCMAKE_BUILD_TYPE=Release \ 19 | -DCMAKE_INSTALL_PREFIX="$FFBUILD_PREFIX" \ 20 | -DBUILD_SHARED_LIBS=OFF \ 21 | -DZLIB_COMPAT=ON \ 22 | -DZLIB{,NG}_ENABLE_TESTS=OFF \ 23 | -DWITH_GTEST=OFF \ 24 | -GNinja \ 25 | .. 26 | ninja -j"$(nproc)" 27 | ninja install 28 | } 29 | 30 | ffbuild_configure() { 31 | echo --enable-zlib 32 | } 33 | 34 | ffbuild_unconfigure() { 35 | echo --disable-zlib 36 | } 37 | -------------------------------------------------------------------------------- /scripts.d/25-fftw3.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | FFTW_SRC="https://github.com/nanake/fftw3/releases/download/fftw-3.3.10/fftw-3.3.10.tar.gz" 4 | 5 | ffbuild_enabled() { 6 | return 0 7 | } 8 | 9 | ffbuild_dockerbuild() { 10 | curl -L "$FFTW_SRC" | tar xz 11 | cd fftw* 12 | 13 | local myconf=( 14 | --prefix="$FFBUILD_PREFIX" 15 | --disable-{shared,dependency-tracking,doc,fortran} 16 | --enable-{static,avx,avx2,sse2,threads} 17 | --with-{combined-threads,incoming-stack-boundary=2,our-malloc} 18 | ) 19 | 20 | if [[ $TARGET == win* ]]; then 21 | myconf+=( 22 | --host="$FFBUILD_TOOLCHAIN" 23 | PTHREAD_CFLAGS="-pthread" 24 | PTHREAD_LIBS="-lpthread" 25 | ) 26 | else 27 | echo "Unknown target" 28 | return -1 29 | fi 30 | 31 | ./configure "${myconf[@]}" 32 | make -j"$(nproc)" 33 | make install 34 | } 35 | -------------------------------------------------------------------------------- /scripts.d/25-freetype.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | FREETYPE_REPO="https://github.com/freetype/freetype.git" 4 | FREETYPE_COMMIT="320b72a2955a312f2a392bede8d6af900aec924d" 5 | 6 | ffbuild_enabled() { 7 | return 0 8 | } 9 | 10 | ffbuild_dockerbuild() { 11 | git-mini-clone "$FREETYPE_REPO" "$FREETYPE_COMMIT" freetype 12 | cd freetype 13 | 14 | mkdir build && cd build 15 | 16 | cmake \ 17 | -DCMAKE_TOOLCHAIN_FILE="$FFBUILD_CMAKE_TOOLCHAIN" \ 18 | -DCMAKE_BUILD_TYPE=Release \ 19 | -DCMAKE_INSTALL_PREFIX="$FFBUILD_PREFIX" \ 20 | -DBUILD_SHARED_LIBS=OFF \ 21 | -DFT_REQUIRE_ZLIB=ON \ 22 | -GNinja \ 23 | .. 24 | ninja -j"$(nproc)" 25 | ninja install 26 | } 27 | 28 | ffbuild_configure() { 29 | echo --enable-libfreetype 30 | } 31 | 32 | ffbuild_unconfigure() { 33 | echo --disable-libfreetype 34 | } 35 | -------------------------------------------------------------------------------- /scripts.d/25-fribidi.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | FRIBIDI_REPO="https://github.com/fribidi/fribidi.git" 4 | FRIBIDI_COMMIT="b28f43bd3e8e31a5967830f721bab218c1aa114c" 5 | 6 | ffbuild_enabled() { 7 | return 0 8 | } 9 | 10 | ffbuild_dockerbuild() { 11 | git-mini-clone "$FRIBIDI_REPO" "$FRIBIDI_COMMIT" fribidi 12 | cd fribidi 13 | 14 | mkdir build && cd build 15 | 16 | local myconf=( 17 | --prefix="$FFBUILD_PREFIX" 18 | --buildtype=release 19 | -Ddefault_library=static 20 | -D{bin,docs,tests}"=false" 21 | ) 22 | 23 | if [[ $TARGET == win* ]]; then 24 | myconf+=( 25 | --cross-file=/cross.meson 26 | ) 27 | else 28 | echo "Unknown target" 29 | return -1 30 | fi 31 | 32 | meson setup "${myconf[@]}" .. 33 | ninja -j"$(nproc)" 34 | ninja install 35 | } 36 | 37 | ffbuild_configure() { 38 | echo --enable-libfribidi 39 | } 40 | 41 | ffbuild_unconfigure() { 42 | echo --disable-libfribidi 43 | } 44 | -------------------------------------------------------------------------------- /scripts.d/25-gmp.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | GMP_REPO="https://github.com/BtbN/gmplib.git" 4 | GMP_COMMIT="655b673c0c825a772b2596d9761ffc3dd953074e" 5 | 6 | ffbuild_enabled() { 7 | return 0 8 | } 9 | 10 | ffbuild_dockerbuild() { 11 | git-mini-clone "$GMP_REPO" "$GMP_COMMIT" gmp 12 | cd gmp 13 | 14 | ./.bootstrap 15 | 16 | local myconf=( 17 | --prefix="$FFBUILD_PREFIX" 18 | --disable-shared 19 | --enable-static 20 | --with-pic 21 | ) 22 | 23 | if [[ $TARGET == win* ]]; then 24 | myconf+=( 25 | --host="$FFBUILD_TOOLCHAIN" 26 | ) 27 | else 28 | echo "Unknown target" 29 | return -1 30 | fi 31 | 32 | ./configure "${myconf[@]}" 33 | make -j"$(nproc)" 34 | make install 35 | } 36 | 37 | ffbuild_configure() { 38 | echo --enable-gmp 39 | } 40 | 41 | ffbuild_unconfigure() { 42 | echo --disable-gmp 43 | } 44 | -------------------------------------------------------------------------------- /scripts.d/25-libogg.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | OGG_REPO="https://github.com/xiph/ogg.git" 4 | OGG_COMMIT="fa80aae9d50096160f2b56ada35527d7aee3f746" 5 | 6 | ffbuild_enabled() { 7 | return 0 8 | } 9 | 10 | ffbuild_dockerbuild() { 11 | git-mini-clone "$OGG_REPO" "$OGG_COMMIT" ogg 12 | cd ogg 13 | 14 | mkdir build && cd build 15 | 16 | cmake \ 17 | -DCMAKE_TOOLCHAIN_FILE="$FFBUILD_CMAKE_TOOLCHAIN" \ 18 | -DCMAKE_BUILD_TYPE=Release \ 19 | -DCMAKE_INSTALL_PREFIX="$FFBUILD_PREFIX" \ 20 | -DBUILD_{SHARED_LIBS,TESTING}=OFF \ 21 | -DINSTALL_DOCS=OFF \ 22 | -GNinja \ 23 | .. 24 | ninja -j"$(nproc)" 25 | ninja install 26 | } 27 | -------------------------------------------------------------------------------- /scripts.d/25-xz.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | XZ_REPO="https://github.com/tukaani-project/xz.git" 4 | XZ_COMMIT="dd4a1b259936880e04669b43e778828b60619860" 5 | 6 | ffbuild_enabled() { 7 | return 0 8 | } 9 | 10 | ffbuild_dockerbuild() { 11 | git-mini-clone "$XZ_REPO" "$XZ_COMMIT" xz 12 | cd xz 13 | 14 | mkdir build && cd build 15 | 16 | cmake \ 17 | -DCMAKE_TOOLCHAIN_FILE="$FFBUILD_CMAKE_TOOLCHAIN" \ 18 | -DCMAKE_BUILD_TYPE=Release \ 19 | -DCMAKE_INSTALL_PREFIX="$FFBUILD_PREFIX" \ 20 | -DCMAKE_USE_PTHREADS_INIT=ON \ 21 | -DBUILD_{SHARED_LIBS,TESTING}=OFF \ 22 | -DXZ_{DOC,TOOL_{LZMAINFO,XZ,XZDEC}}=OFF \ 23 | -GNinja \ 24 | .. 25 | 26 | ninja -j"$(nproc)" 27 | ninja install 28 | } 29 | 30 | ffbuild_configure() { 31 | echo --enable-lzma 32 | } 33 | 34 | ffbuild_unconfigure() { 35 | echo --disable-lzma 36 | } 37 | -------------------------------------------------------------------------------- /scripts.d/30-harfbuzz.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | HARFBUZZ_REPO="https://github.com/harfbuzz/harfbuzz.git" 4 | HARFBUZZ_COMMIT="fbf5b2aa035d6cd9b796d74252045e2b7156ad02" 5 | 6 | ffbuild_enabled() { 7 | return 0 8 | } 9 | 10 | ffbuild_dockerbuild() { 11 | git-mini-clone "$HARFBUZZ_REPO" "$HARFBUZZ_COMMIT" harfbuzz 12 | cd harfbuzz 13 | 14 | mkdir build && cd build 15 | 16 | local myconf=( 17 | --prefix="$FFBUILD_PREFIX" 18 | --buildtype=release 19 | -Ddefault_library=static 20 | -Dgdi=enabled 21 | -D{benchmark,cairo,chafa,docs,glib,gobject,icu,introspection,tests,utilities}"=disabled" 22 | ) 23 | 24 | if [[ $TARGET == win* ]]; then 25 | myconf+=( 26 | --cross-file=/cross.meson 27 | ) 28 | else 29 | echo "Unknown target" 30 | return -1 31 | fi 32 | 33 | meson setup "${myconf[@]}" .. 34 | ninja -j"$(nproc)" 35 | ninja install 36 | } 37 | 38 | ffbuild_configure() { 39 | echo --enable-libharfbuzz 40 | } 41 | 42 | ffbuild_unconfigure() { 43 | echo --disable-libharfbuzz 44 | } 45 | -------------------------------------------------------------------------------- /scripts.d/35-fontconfig.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | FC_REPO="https://gitlab.freedesktop.org/fontconfig/fontconfig.git" 4 | FC_COMMIT="685f2ec4a7e3204c1afd0a76e4cfe76b67c31fd9" 5 | 6 | ffbuild_enabled() { 7 | return 0 8 | } 9 | 10 | ffbuild_dockerbuild() { 11 | git-mini-clone "$FC_REPO" "$FC_COMMIT" fc 12 | cd fc 13 | 14 | ./autogen.sh --noconf 15 | 16 | local myconf=( 17 | --prefix="$FFBUILD_PREFIX" 18 | --disable-{shared,docs} 19 | --enable-{static,iconv,libxml2} 20 | ) 21 | 22 | if [[ $TARGET == win* ]]; then 23 | myconf+=( 24 | --host="$FFBUILD_TOOLCHAIN" 25 | ) 26 | else 27 | echo "Unknown target" 28 | return -1 29 | fi 30 | 31 | ./configure "${myconf[@]}" 32 | make -j"$(nproc)" 33 | make install 34 | } 35 | 36 | ffbuild_configure() { 37 | echo --enable-libfontconfig 38 | } 39 | 40 | ffbuild_unconfigure() { 41 | echo --disable-libfontconfig 42 | } 43 | -------------------------------------------------------------------------------- /scripts.d/45-libsamplerate.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | LIBSR_REPO="https://github.com/libsndfile/libsamplerate.git" 4 | LIBSR_COMMIT="15c392d47e71b9395a759544b3818a1235fe1a1d" 5 | 6 | ffbuild_enabled() { 7 | return 0 8 | } 9 | 10 | ffbuild_dockerbuild() { 11 | git-mini-clone "$LIBSR_REPO" "$LIBSR_COMMIT" libsr 12 | cd libsr 13 | 14 | mkdir build && cd build 15 | 16 | cmake \ 17 | -DCMAKE_TOOLCHAIN_FILE="$FFBUILD_CMAKE_TOOLCHAIN" \ 18 | -DCMAKE_BUILD_TYPE=Release \ 19 | -DCMAKE_INSTALL_PREFIX="$FFBUILD_PREFIX" \ 20 | -DBUILD_{SHARED_LIBS,TESTING}=OFF \ 21 | -DLIBSAMPLERATE_EXAMPLES=OFF \ 22 | -DLIBSAMPLERATE_INSTALL=ON \ 23 | -GNinja \ 24 | .. 25 | ninja -j"$(nproc)" 26 | ninja install 27 | } 28 | -------------------------------------------------------------------------------- /scripts.d/45-libvorbis.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | VORBIS_REPO="https://github.com/xiph/vorbis.git" 4 | VORBIS_COMMIT="84c023699cdf023a32fa4ded32019f194afcdad0" 5 | 6 | ffbuild_enabled() { 7 | return 0 8 | } 9 | 10 | ffbuild_dockerbuild() { 11 | git-mini-clone "$VORBIS_REPO" "$VORBIS_COMMIT" vorbis 12 | cd vorbis 13 | 14 | mkdir build && cd build 15 | 16 | cmake \ 17 | -DCMAKE_TOOLCHAIN_FILE="$FFBUILD_CMAKE_TOOLCHAIN" \ 18 | -DCMAKE_BUILD_TYPE=Release \ 19 | -DCMAKE_INSTALL_PREFIX="$FFBUILD_PREFIX" \ 20 | -DCMAKE_POLICY_VERSION_MINIMUM=3.5 \ 21 | -DBUILD_{SHARED_LIBS,TESTING}=OFF \ 22 | -GNinja \ 23 | .. 24 | ninja -j"$(nproc)" 25 | ninja install 26 | } 27 | 28 | ffbuild_configure() { 29 | echo --enable-libvorbis 30 | } 31 | 32 | ffbuild_unconfigure() { 33 | echo --disable-libvorbis 34 | } 35 | -------------------------------------------------------------------------------- /scripts.d/45-opencl.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | HEADERS_REPO="https://github.com/KhronosGroup/OpenCL-Headers.git" 4 | HEADERS_COMMIT="1ce4f1ce1070fe47d08666001ce2755af92f0c5c" 5 | 6 | LOADER_REPO="https://github.com/KhronosGroup/OpenCL-ICD-Loader.git" 7 | LOADER_COMMIT="ddf6c70230a79cdb8fcccfd3c775b09e6820f42e" 8 | 9 | ffbuild_enabled() { 10 | return 0 11 | } 12 | 13 | ffbuild_dockerbuild() { 14 | mkdir opencl && cd opencl 15 | 16 | git-mini-clone "$HEADERS_REPO" "$HEADERS_COMMIT" headers 17 | mkdir -p "$FFBUILD_PREFIX"/include/CL 18 | cp -r headers/CL/* "$FFBUILD_PREFIX"/include/CL/. 19 | 20 | git-mini-clone "$LOADER_REPO" "$LOADER_COMMIT" loader 21 | cd loader 22 | 23 | mkdir build && cd build 24 | 25 | cmake \ 26 | -DCMAKE_TOOLCHAIN_FILE="$FFBUILD_CMAKE_TOOLCHAIN" \ 27 | -DCMAKE_BUILD_TYPE=Release \ 28 | -DCMAKE_INSTALL_PREFIX="$FFBUILD_PREFIX" \ 29 | -DOPENCL_ICD_LOADER_HEADERS_DIR="$FFBUILD_PREFIX"/include \ 30 | -DBUILD_{SHARED_LIBS,TESTING}=OFF \ 31 | -GNinja \ 32 | .. 33 | ninja -j"$(nproc)" 34 | ninja install 35 | 36 | cat >"$FFBUILD_PREFIX"/lib/pkgconfig/OpenCL.pc <> "$FFBUILD_PREFIX"/lib/pkgconfig/libvmaf.pc 40 | } 41 | 42 | ffbuild_configure() { 43 | echo --enable-libvmaf 44 | } 45 | 46 | ffbuild_unconfigure() { 47 | echo --disable-libvmaf 48 | } 49 | -------------------------------------------------------------------------------- /scripts.d/50-amf.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | AMF_REPO="https://github.com/GPUOpen-LibrariesAndSDKs/AMF.git" 4 | AMF_COMMIT="d7311e30a53b7d36fb401d2efa3b04fe5d942e28" 5 | 6 | ffbuild_enabled() { 7 | return 0 8 | } 9 | 10 | ffbuild_dockerbuild() { 11 | git-mini-clone "$AMF_REPO" "$AMF_COMMIT" amf 12 | cd amf 13 | 14 | mkdir -p "$FFBUILD_PREFIX"/include 15 | mv amf/public/include "$FFBUILD_PREFIX"/include/AMF 16 | } 17 | 18 | ffbuild_configure() { 19 | echo --enable-amf 20 | } 21 | 22 | ffbuild_unconfigure() { 23 | echo --disable-amf 24 | } 25 | -------------------------------------------------------------------------------- /scripts.d/50-avisynth.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | AVISYNTH_REPO="https://github.com/AviSynth/AviSynthPlus.git" 4 | AVISYNTH_COMMIT="66f0d678d95789d8fae552f0aa6ba2c58bc91342" 5 | 6 | ffbuild_enabled() { 7 | [[ $VARIANT == lgpl* ]] && return -1 8 | return 0 9 | } 10 | 11 | ffbuild_dockerbuild() { 12 | git clone --filter=tree:0 --branch=master --single-branch "$AVISYNTH_REPO" avisynth 13 | cd avisynth 14 | git checkout "$AVISYNTH_COMMIT" 15 | 16 | mkdir build && cd build 17 | 18 | cmake \ 19 | -DCMAKE_TOOLCHAIN_FILE="$FFBUILD_CMAKE_TOOLCHAIN" \ 20 | -DCMAKE_BUILD_TYPE=Release \ 21 | -DCMAKE_INSTALL_PREFIX="$FFBUILD_PREFIX" \ 22 | -DBUILD_SHARED_LIBS=OFF \ 23 | -DHEADERS_ONLY=ON \ 24 | -GNinja \ 25 | .. 26 | ninja -j"$(nproc)" VersionGen 27 | ninja install 28 | } 29 | 30 | ffbuild_configure() { 31 | echo --enable-avisynth 32 | } 33 | 34 | ffbuild_unconfigure() { 35 | echo --disable-avisynth 36 | } 37 | -------------------------------------------------------------------------------- /scripts.d/50-chromaprint.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | CHROMAPRINT_REPO="https://github.com/acoustid/chromaprint.git" 4 | CHROMAPRINT_COMMIT="41a3e8fb3eb907d7a0338ada291982672a2226df" 5 | 6 | ffbuild_enabled() { 7 | return 0 8 | } 9 | 10 | ffbuild_dockerbuild() { 11 | git-mini-clone "$CHROMAPRINT_REPO" "$CHROMAPRINT_COMMIT" chromaprint 12 | cd chromaprint 13 | 14 | mkdir build && cd build 15 | 16 | cmake \ 17 | -DCMAKE_TOOLCHAIN_FILE="$FFBUILD_CMAKE_TOOLCHAIN" \ 18 | -DCMAKE_BUILD_TYPE=Release \ 19 | -DCMAKE_INSTALL_PREFIX="$FFBUILD_PREFIX" \ 20 | -DCMAKE_POLICY_VERSION_MINIMUM=3.5 \ 21 | -DBUILD_{SHARED_LIBS,TESTS,TOOLS}=OFF \ 22 | -DFFT_LIB=fftw3 \ 23 | -GNinja \ 24 | .. 25 | ninja -j"$(nproc)" 26 | ninja install 27 | 28 | { 29 | echo "Libs.private: -lfftw3 -lstdc++" 30 | echo "Cflags.private: -DCHROMAPRINT_NODLL" 31 | } >> "$FFBUILD_PREFIX"/lib/pkgconfig/libchromaprint.pc 32 | } 33 | 34 | ffbuild_configure() { 35 | echo --enable-chromaprint 36 | } 37 | 38 | ffbuild_unconfigure() { 39 | echo --disable-chromaprint 40 | } 41 | -------------------------------------------------------------------------------- /scripts.d/50-dav1d.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | DAV1D_REPO="https://github.com/videolan/dav1d.git" 4 | DAV1D_COMMIT="63bf075aada99afa112f84c61ddc9cead8ce04d3" 5 | 6 | ffbuild_enabled() { 7 | return 0 8 | } 9 | 10 | ffbuild_dockerbuild() { 11 | git-mini-clone "$DAV1D_REPO" "$DAV1D_COMMIT" dav1d 12 | cd dav1d 13 | 14 | mkdir build && cd build 15 | 16 | local myconf=( 17 | --prefix="$FFBUILD_PREFIX" 18 | --buildtype=release 19 | -Ddefault_library=static 20 | -Denable_{tests,tools}"=false" 21 | -Dlogging=false 22 | ) 23 | 24 | if [[ $TARGET == win* ]]; then 25 | myconf+=( 26 | --cross-file=/cross.meson 27 | ) 28 | else 29 | echo "Unknown target" 30 | return -1 31 | fi 32 | 33 | meson setup "${myconf[@]}" .. 34 | ninja -j"$(nproc)" 35 | ninja install 36 | } 37 | 38 | ffbuild_configure() { 39 | echo --enable-libdav1d 40 | } 41 | 42 | ffbuild_unconfigure() { 43 | echo --disable-libdav1d 44 | } 45 | -------------------------------------------------------------------------------- /scripts.d/50-davs2.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | DAVS2_REPO="https://github.com/pkuvcl/davs2.git" 4 | DAVS2_COMMIT="b41cf117452e2d73d827f02d3e30aa20f1c721ac" 5 | 6 | ffbuild_enabled() { 7 | [[ $VARIANT == lgpl* ]] && return -1 8 | [[ $TARGET == win32 ]] && return -1 9 | return 0 10 | } 11 | 12 | ffbuild_dockerbuild() { 13 | git clone --filter=tree:0 --branch=master --single-branch "$DAVS2_REPO" davs2 14 | cd davs2 15 | git checkout "$DAVS2_COMMIT" 16 | cd build/linux 17 | 18 | local myconf=( 19 | --prefix="$FFBUILD_PREFIX" 20 | --disable-{cli,win32thread} 21 | --enable-pic 22 | ) 23 | 24 | if [[ $TARGET == win64 ]]; then 25 | myconf+=( 26 | --host="$FFBUILD_TOOLCHAIN" 27 | --cross-prefix="$FFBUILD_CROSS_PREFIX" 28 | ) 29 | else 30 | echo "Unknown target" 31 | return -1 32 | fi 33 | 34 | ./configure "${myconf[@]}" 35 | make -j"$(nproc)" 36 | make install 37 | } 38 | 39 | ffbuild_configure() { 40 | echo --enable-libdavs2 41 | } 42 | 43 | ffbuild_unconfigure() { 44 | echo --disable-libdavs2 45 | } 46 | -------------------------------------------------------------------------------- /scripts.d/50-decklink.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | SCRIPT_SKIP="1" 4 | 5 | DECKLINK_REPO="https://github.com/nanake/decklink-headers.git" 6 | DECKLINK_COMMIT="SDK/14.2" 7 | 8 | ffbuild_enabled() { 9 | [[ $VARIANT == *nonfree* ]] || return -1 10 | return 0 11 | } 12 | 13 | ffbuild_dockerbuild() { 14 | git-mini-clone "$DECKLINK_REPO" "$DECKLINK_COMMIT" decklink 15 | cd decklink 16 | 17 | make PREFIX="$FFBUILD_PREFIX" install 18 | } 19 | 20 | ffbuild_configure() { 21 | echo --enable-decklink 22 | } 23 | 24 | ffbuild_unconfigure() { 25 | echo --disable-decklink 26 | } 27 | -------------------------------------------------------------------------------- /scripts.d/50-dvd/30-libdvdcss.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | DVDCSS_REPO="https://github.com/nanake/libdvdcss.git" 4 | DVDCSS_COMMIT="d0b6a291c24eda3727ad5c7a14956fc1fc82446d" 5 | 6 | ffbuild_enabled() { 7 | return 0 8 | } 9 | 10 | ffbuild_dockerbuild() { 11 | git-mini-clone "$DVDCSS_REPO" "$DVDCSS_COMMIT" dvdcss 12 | cd dvdcss 13 | 14 | autoreconf -i 15 | 16 | local myconf=( 17 | --prefix="$FFBUILD_PREFIX" 18 | --disable-{shared,dependency-tracking,doc,maintainer-mode} 19 | --enable-static 20 | --with-pic 21 | ) 22 | 23 | if [[ $TARGET == win* ]]; then 24 | myconf+=( 25 | --host="$FFBUILD_TOOLCHAIN" 26 | ) 27 | else 28 | echo "Unknown target" 29 | return -1 30 | fi 31 | 32 | ./configure "${myconf[@]}" 33 | make -j"$(nproc)" 34 | make install 35 | } 36 | -------------------------------------------------------------------------------- /scripts.d/50-dvd/40-libdvdread.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | DVDREAD_REPO="https://github.com/nanake/libdvdread.git" 4 | DVDREAD_COMMIT="786e73584b46393fbea4abdb4a25920cde82b9ec" 5 | 6 | ffbuild_enabled() { 7 | return 0 8 | } 9 | 10 | ffbuild_dockerbuild() { 11 | git-mini-clone "$DVDREAD_REPO" "$DVDREAD_COMMIT" dvdread 12 | cd dvdread 13 | 14 | mkdir build && cd build 15 | 16 | local myconf=( 17 | --prefix="$FFBUILD_PREFIX" 18 | --buildtype=release 19 | -Ddefault_library=static 20 | -Dlibdvdcss=enabled 21 | ) 22 | 23 | if [[ $TARGET == win* ]]; then 24 | myconf+=( 25 | --cross-file=/cross.meson 26 | ) 27 | else 28 | echo "Unknown target" 29 | return -1 30 | fi 31 | 32 | meson setup "${myconf[@]}" .. 33 | ninja -j"$(nproc)" 34 | ninja install 35 | } 36 | 37 | ffbuild_configure() { 38 | echo --enable-libdvdread 39 | } 40 | 41 | ffbuild_unconfigure() { 42 | echo --disable-libdvdread 43 | } 44 | -------------------------------------------------------------------------------- /scripts.d/50-dvd/50-libdvdnav.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | DVDNAV_REPO="https://github.com/nanake/libdvdnav.git" 4 | DVDNAV_COMMIT="9831fe01488bd0e9d1e3521195da6940cd8415eb" 5 | 6 | ffbuild_enabled() { 7 | return 0 8 | } 9 | 10 | ffbuild_dockerbuild() { 11 | git-mini-clone "$DVDNAV_REPO" "$DVDNAV_COMMIT" dvdnav 12 | cd dvdnav 13 | 14 | autoreconf -i 15 | 16 | local myconf=( 17 | --prefix="$FFBUILD_PREFIX" 18 | --disable-{shared,dependency-tracking} 19 | --enable-static 20 | --with-pic 21 | ) 22 | 23 | if [[ $TARGET == win* ]]; then 24 | myconf+=( 25 | --host="$FFBUILD_TOOLCHAIN" 26 | ) 27 | else 28 | echo "Unknown target" 29 | return -1 30 | fi 31 | 32 | ./configure "${myconf[@]}" 33 | make -j"$(nproc)" 34 | make install 35 | } 36 | 37 | ffbuild_configure() { 38 | echo --enable-libdvdnav 39 | } 40 | 41 | ffbuild_unconfigure() { 42 | echo --disable-libdvdnav 43 | } 44 | -------------------------------------------------------------------------------- /scripts.d/50-ffnvcodec.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | FFNVCODEC_REPO="https://github.com/FFmpeg/nv-codec-headers.git" 4 | FFNVCODEC_COMMIT="f2fb9b36d5e08d6211f7cf6377971c0570939e65" 5 | 6 | ffbuild_enabled() { 7 | return 0 8 | } 9 | 10 | ffbuild_dockerbuild() { 11 | git-mini-clone "$FFNVCODEC_REPO" "$FFNVCODEC_COMMIT" ffnvcodec 12 | cd ffnvcodec 13 | 14 | make PREFIX="$FFBUILD_PREFIX" install 15 | } 16 | 17 | ffbuild_configure() { 18 | echo --enable-ffnvcodec --enable-cuda-llvm 19 | } 20 | 21 | ffbuild_unconfigure() { 22 | echo --disable-ffnvcodec --disable-cuda-llvm 23 | } 24 | 25 | ffbuild_cflags() { 26 | return 0 27 | } 28 | 29 | ffbuild_ldflags() { 30 | return 0 31 | } 32 | -------------------------------------------------------------------------------- /scripts.d/50-gme.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | GME_REPO="https://github.com/libgme/game-music-emu.git" 4 | GME_COMMIT="9762cbcff3d2224ee0f8b8c41ec143e956ebad56" 5 | 6 | ffbuild_enabled() { 7 | return 0 8 | } 9 | 10 | ffbuild_dockerbuild() { 11 | git-mini-clone "$GME_REPO" "$GME_COMMIT" gme 12 | cd gme 13 | 14 | mkdir build && cd build 15 | 16 | cmake \ 17 | -DCMAKE_TOOLCHAIN_FILE="$FFBUILD_CMAKE_TOOLCHAIN" \ 18 | -DCMAKE_BUILD_TYPE=Release \ 19 | -DCMAKE_INSTALL_PREFIX="$FFBUILD_PREFIX" \ 20 | -DCMAKE_DISABLE_FIND_PACKAGE_SDL2=TRUE \ 21 | -DBUILD_SHARED_LIBS=OFF \ 22 | -DENABLE_UBSAN=OFF \ 23 | -DGME_UNRAR=OFF \ 24 | -GNinja \ 25 | .. 26 | ninja -j"$(nproc)" 27 | ninja install 28 | } 29 | 30 | ffbuild_configure() { 31 | echo --enable-libgme 32 | } 33 | 34 | ffbuild_unconfigure() { 35 | echo --disable-libgme 36 | } 37 | -------------------------------------------------------------------------------- /scripts.d/50-h266/50-vvenc.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | VVENC_REPO="https://github.com/fraunhoferhhi/vvenc.git" 4 | VVENC_COMMIT="a8322ded4669333eb19c1b75df9c37cc722ee8b7" 5 | 6 | ffbuild_enabled() { 7 | return 0 8 | } 9 | 10 | ffbuild_dockerbuild() { 11 | git-mini-clone "$VVENC_REPO" "$VVENC_COMMIT" vvenc 12 | cd vvenc 13 | 14 | mkdir build && cd build 15 | 16 | cmake \ 17 | -DCMAKE_TOOLCHAIN_FILE="$FFBUILD_CMAKE_TOOLCHAIN" \ 18 | -DCMAKE_BUILD_TYPE=Release \ 19 | -DCMAKE_INSTALL_PREFIX="$FFBUILD_PREFIX" \ 20 | -DBUILD_SHARED_LIBS=OFF \ 21 | -DVVENC_ENABLE_{LINK_TIME_OPT,WERROR}=OFF \ 22 | -DVVENC_LIBRARY_ONLY=ON \ 23 | -GNinja \ 24 | .. 25 | ninja -j"$(nproc)" 26 | ninja install 27 | } 28 | 29 | ffbuild_configure() { 30 | echo --enable-libvvenc 31 | } 32 | 33 | ffbuild_unconfigure() { 34 | echo --disable-libvvenc 35 | } 36 | -------------------------------------------------------------------------------- /scripts.d/50-kvazaar.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | KVAZAAR_REPO="https://github.com/ultravideo/kvazaar.git" 4 | KVAZAAR_COMMIT="77a6f6b0f823b44d29531f30aaed5bafc70088fd" 5 | 6 | ffbuild_enabled() { 7 | return 0 8 | } 9 | 10 | ffbuild_dockerbuild() { 11 | git-mini-clone "$KVAZAAR_REPO" "$KVAZAAR_COMMIT" kvazaar 12 | cd kvazaar 13 | 14 | mkdir kvzbuild && cd kvzbuild 15 | 16 | cmake \ 17 | -DCMAKE_TOOLCHAIN_FILE="$FFBUILD_CMAKE_TOOLCHAIN" \ 18 | -DCMAKE_BUILD_TYPE=Release \ 19 | -DCMAKE_INSTALL_PREFIX="$FFBUILD_PREFIX" \ 20 | -DBUILD_{KVAZAAR_BINARY,SHARED_LIBS,TESTS}=OFF \ 21 | -GNinja \ 22 | .. 23 | ninja -j"$(nproc)" 24 | ninja install 25 | 26 | echo "Cflags.private: -DKVZ_STATIC_LIB" >> "$FFBUILD_PREFIX"/lib/pkgconfig/kvazaar.pc 27 | } 28 | 29 | ffbuild_configure() { 30 | echo --enable-libkvazaar 31 | } 32 | 33 | ffbuild_unconfigure() { 34 | echo --disable-libkvazaar 35 | } 36 | -------------------------------------------------------------------------------- /scripts.d/50-libaribcaption.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | ARIBCAPTION_REPO="https://github.com/xqq/libaribcaption.git" 4 | ARIBCAPTION_COMMIT="27cf3cab26084d636905335d92c375ecbc3633ea" 5 | 6 | ffbuild_enabled() { 7 | return 0 8 | } 9 | 10 | ffbuild_dockerbuild() { 11 | git-mini-clone "$ARIBCAPTION_REPO" "$ARIBCAPTION_COMMIT" aribcaption 12 | cd aribcaption 13 | 14 | mkdir build && cd build 15 | 16 | cmake \ 17 | -DCMAKE_TOOLCHAIN_FILE="$FFBUILD_CMAKE_TOOLCHAIN" \ 18 | -DCMAKE_BUILD_TYPE=Release \ 19 | -DCMAKE_INSTALL_PREFIX="$FFBUILD_PREFIX" \ 20 | -DBUILD_SHARED_LIBS=OFF \ 21 | -DARIBCC_USE_FREETYPE=ON \ 22 | -GNinja \ 23 | .. 24 | ninja -j"$(nproc)" 25 | ninja install 26 | } 27 | 28 | ffbuild_configure() { 29 | echo --enable-libaribcaption 30 | } 31 | 32 | ffbuild_unconfigure() { 33 | echo --disable-libaribcaption 34 | } 35 | -------------------------------------------------------------------------------- /scripts.d/50-libass/45-libunibreak.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | LIBUNIBREAK_REPO="https://github.com/adah1972/libunibreak.git" 4 | LIBUNIBREAK_COMMIT="32dc4fabf20176aeaa63c4880cc53cc123e53261" 5 | 6 | ffbuild_enabled() { 7 | return 0 8 | } 9 | 10 | ffbuild_dockerbuild() { 11 | git-mini-clone "$LIBUNIBREAK_REPO" "$LIBUNIBREAK_COMMIT" libunibreak 12 | cd libunibreak 13 | 14 | ./bootstrap 15 | 16 | local myconf=( 17 | --prefix="$FFBUILD_PREFIX" 18 | --disable-{shared,dependency-tracking} 19 | --enable-static 20 | ) 21 | 22 | if [[ $TARGET == win* ]]; then 23 | myconf+=( 24 | --host="$FFBUILD_TOOLCHAIN" 25 | ) 26 | else 27 | echo "Unknown target" 28 | return -1 29 | fi 30 | 31 | ./configure "${myconf[@]}" 32 | make -j"$(nproc)" 33 | make install 34 | } 35 | -------------------------------------------------------------------------------- /scripts.d/50-libass/50-libass.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | ASS_REPO="https://github.com/libass/libass.git" 4 | ASS_COMMIT="4679413b3636220d940465f0aaedc994ff9bad17" 5 | 6 | ffbuild_enabled() { 7 | return 0 8 | } 9 | 10 | ffbuild_dockerbuild() { 11 | git-mini-clone "$ASS_REPO" "$ASS_COMMIT" ass 12 | cd ass 13 | 14 | mkdir build && cd build 15 | 16 | local myconf=( 17 | --prefix="$FFBUILD_PREFIX" 18 | --buildtype=release 19 | -Ddefault_library=static 20 | -D{checkasm,compare,fuzz,profile,test}"=disabled" 21 | ) 22 | 23 | if [[ $TARGET == win* ]]; then 24 | myconf+=( 25 | --cross-file=/cross.meson 26 | ) 27 | else 28 | echo "Unknown target" 29 | return -1 30 | fi 31 | 32 | meson setup "${myconf[@]}" .. 33 | ninja -j"$(nproc)" 34 | ninja install 35 | } 36 | 37 | ffbuild_configure() { 38 | echo --enable-libass 39 | } 40 | 41 | ffbuild_unconfigure() { 42 | echo --disable-libass 43 | } 44 | -------------------------------------------------------------------------------- /scripts.d/50-libbluray.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | LIBBLURAY_REPO="https://code.videolan.org/videolan/libbluray.git" 4 | LIBBLURAY_COMMIT="4066744f4f4cf66d58fcb3e320813d788e9017ba" 5 | 6 | ffbuild_enabled() { 7 | return 0 8 | } 9 | 10 | ffbuild_dockerbuild() { 11 | git-mini-clone "$LIBBLURAY_REPO" "$LIBBLURAY_COMMIT" libbluray 12 | cd libbluray 13 | 14 | git submodule update --init --recursive --depth 1 15 | 16 | mkdir build && cd build 17 | 18 | local myconf=( 19 | --prefix="$FFBUILD_PREFIX" 20 | --buildtype=release 21 | -Ddefault_library=static 22 | -D{bdj_jar,fontconfig,freetype,libxml2}"=disabled" 23 | -D{enable_tools,java9}"=false" 24 | ) 25 | 26 | if [[ $TARGET == win* ]]; then 27 | myconf+=( 28 | --cross-file=/cross.meson 29 | ) 30 | else 31 | echo "Unknown target" 32 | return -1 33 | fi 34 | 35 | # 💥 symbol collision with FFmpeg 36 | # since https://github.com/FFmpeg/FFmpeg/commit/c4de577 37 | export CFLAGS="$CFLAGS -Ddec_init=libbluray_dec_init" 38 | 39 | meson setup "${myconf[@]}" .. 40 | ninja -j"$(nproc)" 41 | ninja install 42 | } 43 | 44 | ffbuild_configure() { 45 | echo --enable-libbluray 46 | } 47 | 48 | ffbuild_unconfigure() { 49 | echo --disable-libbluray 50 | } 51 | -------------------------------------------------------------------------------- /scripts.d/50-libfdk-aac.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | LIBFDK_AAC_REPO="https://github.com/mstorsjo/fdk-aac.git" 4 | LIBFDK_AAC_COMMIT="2ef9a141c40bf254bde7d22c197c615db5b265ed" 5 | 6 | ffbuild_enabled() { 7 | [[ $VARIANT == *nonfree* ]] || return -1 8 | return 0 9 | } 10 | 11 | ffbuild_dockerbuild() { 12 | git-mini-clone "$LIBFDK_AAC_REPO" "$LIBFDK_AAC_COMMIT" libfdk-aac 13 | cd libfdk-aac 14 | 15 | mkdir build && cd build 16 | 17 | cmake \ 18 | -DCMAKE_TOOLCHAIN_FILE="$FFBUILD_CMAKE_TOOLCHAIN" \ 19 | -DCMAKE_BUILD_TYPE=Release \ 20 | -DCMAKE_INSTALL_PREFIX="$FFBUILD_PREFIX" \ 21 | -DBUILD_SHARED_LIBS=OFF \ 22 | -DBUILD_PROGRAMS=OFF \ 23 | -GNinja \ 24 | .. 25 | ninja -j"$(nproc)" 26 | ninja install 27 | } 28 | 29 | ffbuild_configure() { 30 | echo --enable-libfdk-aac 31 | } 32 | 33 | ffbuild_unconfigure() { 34 | echo --disable-libfdk-aac 35 | } 36 | -------------------------------------------------------------------------------- /scripts.d/50-libjxl/45-brotli.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | BROTLI_REPO="https://github.com/google/brotli.git" 4 | BROTLI_COMMIT="271be114299d844f3834325422402449afb0a2c7" 5 | 6 | ffbuild_enabled() { 7 | return 0 8 | } 9 | 10 | ffbuild_dockerbuild() { 11 | git-mini-clone "$BROTLI_REPO" "$BROTLI_COMMIT" brotli 12 | cd brotli 13 | 14 | mkdir build && cd build 15 | 16 | cmake \ 17 | -DCMAKE_TOOLCHAIN_FILE="$FFBUILD_CMAKE_TOOLCHAIN" \ 18 | -DCMAKE_BUILD_TYPE=Release \ 19 | -DCMAKE_INSTALL_PREFIX="$FFBUILD_PREFIX" \ 20 | -DBUILD_SHARED_LIBS=OFF \ 21 | -DCMAKE_POSITION_INDEPENDENT_CODE=ON \ 22 | -DBROTLI_BUILD_TOOLS=OFF \ 23 | -DBROTLI_DISABLE_TESTS=ON \ 24 | -GNinja \ 25 | .. 26 | ninja -j"$(nproc)" 27 | ninja install 28 | } 29 | -------------------------------------------------------------------------------- /scripts.d/50-libjxl/45-lcms2.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | LCMS_REPO="https://github.com/mm2/Little-CMS.git" 4 | LCMS_COMMIT="7d0d7ac2b16b6ceddb10abfda4bbb1194ebd8a41" 5 | 6 | ffbuild_enabled() { 7 | return 0 8 | } 9 | 10 | ffbuild_dockerbuild() { 11 | git-mini-clone "$LCMS_REPO" "$LCMS_COMMIT" lcms 12 | cd lcms 13 | 14 | mkdir build && cd build 15 | 16 | local myconf=( 17 | --prefix="$FFBUILD_PREFIX" 18 | --buildtype=release 19 | -Ddefault_library=static 20 | -D{fastfloat,threaded}"=true" 21 | -Dtests=disabled 22 | ) 23 | 24 | if [[ $TARGET == win* ]]; then 25 | myconf+=( 26 | --cross-file=/cross.meson 27 | ) 28 | else 29 | echo "Unknown target" 30 | return -1 31 | fi 32 | 33 | meson setup "${myconf[@]}" .. 34 | ninja -j"$(nproc)" 35 | ninja install 36 | } 37 | -------------------------------------------------------------------------------- /scripts.d/50-libjxl/50-libjxl.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | JXL_REPO="https://github.com/libjxl/libjxl.git" 4 | JXL_COMMIT="dc8438add651ef5b2ef4cf9b44a495f7a6d6727d" 5 | 6 | ffbuild_enabled() { 7 | return 0 8 | } 9 | 10 | ffbuild_dockerbuild() { 11 | git-mini-clone "$JXL_REPO" "$JXL_COMMIT" jxl 12 | cd jxl 13 | 14 | git submodule update --init --recursive --depth 1 --recommend-shallow third_party/highway 15 | 16 | mkdir build && cd build 17 | 18 | # Fix AVX2 proc (64bit) crash by highway due to unaligned stack memory 19 | if [[ $TARGET == win64 ]]; then 20 | export CXXFLAGS="$CXXFLAGS -Wa,-muse-unaligned-vector-move" 21 | export CFLAGS="$CFLAGS -Wa,-muse-unaligned-vector-move" 22 | fi 23 | 24 | cmake \ 25 | -DCMAKE_TOOLCHAIN_FILE="$FFBUILD_CMAKE_TOOLCHAIN" \ 26 | -DCMAKE_BUILD_TYPE=Release \ 27 | -DCMAKE_INSTALL_PREFIX="$FFBUILD_PREFIX" \ 28 | -DCMAKE_POSITION_INDEPENDENT_CODE=ON \ 29 | -DBUILD_{SHARED_LIBS,TESTING}=OFF \ 30 | -DJPEGXL_BUNDLE_LIBPNG=OFF \ 31 | -DJPEGXL_ENABLE_{BENCHMARK,DEVTOOLS,DOXYGEN,EXAMPLES,JNI,JPEGLI,MANPAGES,PLUGINS,SJPEG,SKCMS,TOOLS,VIEWERS}=OFF \ 32 | -DJPEGXL_ENABLE_AVX512{,_ZEN4}=ON \ 33 | -DJPEGXL_FORCE_SYSTEM_{BROTLI,LCMS2}=ON \ 34 | -GNinja \ 35 | .. 36 | ninja -j"$(nproc)" 37 | ninja install 38 | 39 | echo "Libs.private: -lstdc++ -ladvapi32" | tee -a "${FFBUILD_PREFIX}"/lib/pkgconfig/libjxl{,_threads}.pc 40 | } 41 | 42 | ffbuild_configure() { 43 | echo --enable-libjxl 44 | } 45 | 46 | ffbuild_unconfigure() { 47 | echo --disable-libjxl 48 | } 49 | -------------------------------------------------------------------------------- /scripts.d/50-liblc3.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | LC3_REPO="https://github.com/google/liblc3.git" 4 | LC3_COMMIT="ce2e41faf8c06d038df9f32504c61109a14130be" 5 | 6 | ffbuild_enabled() { 7 | return 0 8 | } 9 | 10 | ffbuild_dockerbuild() { 11 | git-mini-clone "$LC3_REPO" "$LC3_COMMIT" lc3 12 | cd lc3 13 | 14 | mkdir build && cd build 15 | 16 | local myconf=( 17 | --prefix="$FFBUILD_PREFIX" 18 | --buildtype=release 19 | -Ddefault_library=static 20 | ) 21 | 22 | if [[ $TARGET == win* ]]; then 23 | myconf+=( 24 | --cross-file=/cross.meson 25 | ) 26 | else 27 | echo "Unknown target" 28 | return -1 29 | fi 30 | 31 | meson setup "${myconf[@]}" .. 32 | ninja -j"$(nproc)" 33 | ninja install 34 | } 35 | 36 | ffbuild_configure() { 37 | echo --enable-liblc3 38 | } 39 | 40 | ffbuild_unconfigure() { 41 | echo --disable-liblc3 42 | } 43 | -------------------------------------------------------------------------------- /scripts.d/50-libmp3lame.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | LAME_REPO="https://github.com/nanake/lame.git" 4 | LAME_COMMIT="6e03e89e51b307567bcb07d6c17a13aa3bc85144" 5 | 6 | 7 | ffbuild_enabled() { 8 | return 0 9 | } 10 | 11 | ffbuild_dockerbuild() { 12 | git-mini-clone "$LAME_REPO" "$LAME_COMMIT" lame 13 | cd lame 14 | 15 | autoreconf -fvi -I /usr/share/gettext/m4 16 | 17 | local myconf=( 18 | --prefix="$FFBUILD_PREFIX" 19 | --disable-{shared,cpml,decoder,dependency-tracking,frontend,gtktest} 20 | --enable-{static,nasm} 21 | ) 22 | 23 | if [[ $TARGET == win* ]]; then 24 | myconf+=( 25 | --host="$FFBUILD_TOOLCHAIN" 26 | ) 27 | else 28 | echo "Unknown target" 29 | return -1 30 | fi 31 | 32 | export CFLAGS="$CFLAGS -DNDEBUG -Wno-error=incompatible-pointer-types" 33 | 34 | ./configure "${myconf[@]}" 35 | make -j"$(nproc)" 36 | make install 37 | } 38 | 39 | ffbuild_configure() { 40 | echo --enable-libmp3lame 41 | } 42 | 43 | ffbuild_unconfigure() { 44 | echo --disable-libmp3lame 45 | } 46 | -------------------------------------------------------------------------------- /scripts.d/50-libopus.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | OPUS_REPO="https://github.com/xiph/opus.git" 4 | OPUS_COMMIT="2941f08a616290f291579df9c8dbc0801d8d3f18" 5 | 6 | ffbuild_enabled() { 7 | return 0 8 | } 9 | 10 | ffbuild_dockerbuild() { 11 | git-mini-clone "$OPUS_REPO" "$OPUS_COMMIT" opus 12 | cd opus 13 | 14 | mkdir build && cd build 15 | 16 | cmake \ 17 | -DCMAKE_TOOLCHAIN_FILE="$FFBUILD_CMAKE_TOOLCHAIN" \ 18 | -DCMAKE_BUILD_TYPE=Release \ 19 | -DCMAKE_INSTALL_PREFIX="$FFBUILD_PREFIX" \ 20 | -DBUILD_{SHARED_LIBS,TESTING}=OFF \ 21 | -DOPUS_BUILD_{PROGRAMS,SHARED_LIBRARY,TESTING}=OFF \ 22 | -DOPUS_FORTIFY_SOURCE=OFF \ 23 | -GNinja \ 24 | .. 25 | ninja -j"$(nproc)" 26 | ninja install 27 | } 28 | 29 | ffbuild_configure() { 30 | echo --enable-libopus 31 | } 32 | 33 | ffbuild_unconfigure() { 34 | echo --disable-libopus 35 | } 36 | -------------------------------------------------------------------------------- /scripts.d/50-librist.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | LIBRIST_REPO="https://code.videolan.org/rist/librist.git" 4 | LIBRIST_COMMIT="0645f7697dcf55970093f53507143e234ee995e4" 5 | 6 | ffbuild_enabled() { 7 | return 0 8 | } 9 | 10 | ffbuild_dockerbuild() { 11 | git-mini-clone "$LIBRIST_REPO" "$LIBRIST_COMMIT" librist 12 | cd librist 13 | 14 | mkdir build && cd build 15 | 16 | local myconf=( 17 | --prefix="$FFBUILD_PREFIX" 18 | --buildtype=release 19 | -Ddefault_library=static 20 | -Dhave_mingw_pthreads=true 21 | -D{built_tools,test}"=false" 22 | ) 23 | 24 | if [[ $TARGET == win* ]]; then 25 | myconf+=( 26 | --cross-file=/cross.meson 27 | ) 28 | else 29 | echo "Unknown target" 30 | return -1 31 | fi 32 | 33 | meson setup "${myconf[@]}" .. 34 | ninja -j"$(nproc)" 35 | ninja install 36 | } 37 | 38 | ffbuild_configure() { 39 | echo --enable-librist 40 | } 41 | 42 | ffbuild_unconfigure() { 43 | echo --disable-librist 44 | } 45 | -------------------------------------------------------------------------------- /scripts.d/50-libtheora.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | THEORA_REPO="https://github.com/xiph/theora.git" 4 | THEORA_COMMIT="b167cb4a3e3e2d3239d71f0ca2cbc25af4f2183c" 5 | 6 | ffbuild_enabled() { 7 | return 0 8 | } 9 | 10 | ffbuild_dockerbuild() { 11 | git-mini-clone "$THEORA_REPO" "$THEORA_COMMIT" theora 12 | cd theora 13 | 14 | ./autogen.sh 15 | 16 | local myconf=( 17 | --prefix="$FFBUILD_PREFIX" 18 | --disable-{shared,doc,dependency-tracking,examples,maintainer-mode,oggtest,spec,vorbistest} 19 | --enable-static 20 | --with-pic 21 | ) 22 | 23 | if [[ $TARGET == win* ]]; then 24 | myconf+=( 25 | --host="$FFBUILD_TOOLCHAIN" 26 | ) 27 | else 28 | echo "Unknown target" 29 | return -1 30 | fi 31 | 32 | ./configure "${myconf[@]}" 33 | make -j"$(nproc)" 34 | make install 35 | } 36 | 37 | ffbuild_configure() { 38 | echo --enable-libtheora 39 | } 40 | 41 | ffbuild_unconfigure() { 42 | echo --disable-libtheora 43 | } 44 | -------------------------------------------------------------------------------- /scripts.d/50-libva.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | LIBVA_REPO="https://github.com/intel/libva.git" 4 | LIBVA_COMMIT="0d1d3510c0a88dcc78f88981d60b525ed4dbb6ba" 5 | 6 | ffbuild_enabled() { 7 | return 0 8 | } 9 | 10 | ffbuild_dockerbuild() { 11 | git-mini-clone "$LIBVA_REPO" "$LIBVA_COMMIT" libva 12 | cd libva 13 | 14 | sed -i "s/shared_library/library/g" va/meson.build 15 | 16 | mkdir mybuild && cd mybuild 17 | 18 | local myconf=( 19 | --prefix="$FFBUILD_PREFIX" 20 | --buildtype=release 21 | -Ddefault_library=static 22 | -Denable_docs=false 23 | -Dwith_win32=yes 24 | ) 25 | 26 | if [[ $TARGET == win* ]]; then 27 | myconf+=( 28 | --cross-file=/cross.meson 29 | ) 30 | else 31 | echo "Unknown target" 32 | return -1 33 | fi 34 | 35 | meson setup "${myconf[@]}" .. 36 | ninja -j"$(nproc)" 37 | ninja install 38 | } 39 | 40 | ffbuild_configure() { 41 | echo --enable-vaapi 42 | } 43 | 44 | ffbuild_unconfigure() { 45 | echo --disable-vaapi 46 | } 47 | -------------------------------------------------------------------------------- /scripts.d/50-libvpl.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | LIBVPL_REPO="https://github.com/intel/libvpl.git" 4 | LIBVPL_COMMIT="c45b5d786bf7cdabbe49ff1bab78693ad78feb78" 5 | 6 | ffbuild_enabled() { 7 | return 0 8 | } 9 | 10 | ffbuild_dockerbuild() { 11 | git-mini-clone "$LIBVPL_REPO" "$LIBVPL_COMMIT" libvpl 12 | cd libvpl 13 | 14 | mkdir build && cd build 15 | 16 | cmake \ 17 | -DCMAKE_TOOLCHAIN_FILE="$FFBUILD_CMAKE_TOOLCHAIN" \ 18 | -DCMAKE_BUILD_TYPE=Release \ 19 | -DCMAKE_INSTALL_PREFIX="$FFBUILD_PREFIX" \ 20 | -DCMAKE_INSTALL_LIBDIR=lib \ 21 | -DBUILD_{EXAMPLES,EXPERIMENTAL,SHARED_LIBS,TESTS}=OFF \ 22 | -DINSTALL_EXAMPLES=OFF \ 23 | -GNinja \ 24 | .. 25 | ninja -j"$(nproc)" 26 | ninja install 27 | 28 | rm -rf "$FFBUILD_PREFIX"/{etc/vpl,share/vpl} 29 | 30 | echo "Libs.private: -lstdc++" >> "$FFBUILD_PREFIX"/lib/pkgconfig/vpl.pc 31 | } 32 | 33 | ffbuild_configure() { 34 | echo --enable-libvpl 35 | } 36 | 37 | ffbuild_unconfigure() { 38 | echo --disable-libvpl 39 | } 40 | -------------------------------------------------------------------------------- /scripts.d/50-libvpx.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | LIBVPX_REPO="https://github.com/webmproject/libvpx.git" 4 | LIBVPX_COMMIT="69396c5e7307e4eb8d0d9b7c31481d1658928f5c" 5 | 6 | ffbuild_enabled() { 7 | return 0 8 | } 9 | 10 | ffbuild_dockerbuild() { 11 | git-mini-clone "$LIBVPX_REPO" "$LIBVPX_COMMIT" libvpx 12 | cd libvpx 13 | 14 | local myconf=( 15 | --prefix="$FFBUILD_PREFIX" 16 | --disable-{shared,dependency-tracking,docs,examples,tools,unit-tests} 17 | --enable-{static,pic,vp9-highbitdepth} 18 | ) 19 | 20 | if [[ $TARGET == win64 ]]; then 21 | myconf+=( 22 | --target=x86_64-win64-gcc 23 | ) 24 | export CROSS="$FFBUILD_CROSS_PREFIX" 25 | elif [[ $TARGET == win32 ]]; then 26 | myconf+=( 27 | --target=x86-win32-gcc 28 | ) 29 | export CROSS="$FFBUILD_CROSS_PREFIX" 30 | else 31 | echo "Unknown target" 32 | return -1 33 | fi 34 | 35 | ./configure "${myconf[@]}" 36 | make -j"$(nproc)" 37 | make install 38 | } 39 | 40 | ffbuild_configure() { 41 | echo --enable-libvpx 42 | } 43 | 44 | ffbuild_unconfigure() { 45 | echo --disable-libvpx 46 | } 47 | -------------------------------------------------------------------------------- /scripts.d/50-libwebp.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | WEBP_REPO="https://github.com/webmproject/libwebp.git" 4 | WEBP_COMMIT="753ed11ef8c8bdc7ce46677a5f915f9917802199" 5 | 6 | ffbuild_enabled() { 7 | return 0 8 | } 9 | 10 | ffbuild_dockerbuild() { 11 | git-mini-clone "$WEBP_REPO" "$WEBP_COMMIT" webp 12 | cd webp 13 | 14 | mkdir build && cd build 15 | 16 | cmake \ 17 | -DCMAKE_TOOLCHAIN_FILE="$FFBUILD_CMAKE_TOOLCHAIN" \ 18 | -DCMAKE_BUILD_TYPE=Release \ 19 | -DCMAKE_INSTALL_PREFIX="$FFBUILD_PREFIX" \ 20 | -DBUILD_SHARED_LIBS=OFF \ 21 | -DWEBP_BUILD_{{C,D,GIF2,IMG2,V}WEBP,ANIM_UTILS,EXTRAS,WEBPINFO,WEBPMUX}=OFF \ 22 | -GNinja \ 23 | .. 24 | ninja -j"$(nproc)" 25 | ninja install 26 | } 27 | 28 | ffbuild_configure() { 29 | echo --enable-libwebp 30 | } 31 | 32 | ffbuild_unconfigure() { 33 | echo --disable-libwebp 34 | } 35 | -------------------------------------------------------------------------------- /scripts.d/50-libzmq.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | ZMQ_REPO="https://github.com/zeromq/libzmq.git" 4 | ZMQ_COMMIT="34f7fa22022bed9e0e390ed3580a1c83ac4a2834" 5 | 6 | ffbuild_enabled() { 7 | return 0 8 | } 9 | 10 | ffbuild_dockerbuild() { 11 | git-mini-clone "$ZMQ_REPO" "$ZMQ_COMMIT" zmq 12 | cd zmq 13 | 14 | mkdir build && cd build 15 | 16 | cmake \ 17 | -DCMAKE_TOOLCHAIN_FILE="$FFBUILD_CMAKE_TOOLCHAIN" \ 18 | -DCMAKE_BUILD_TYPE=Release \ 19 | -DCMAKE_INSTALL_PREFIX="$FFBUILD_PREFIX" \ 20 | -DCMAKE_POLICY_VERSION_MINIMUM=3.5 \ 21 | -DBUILD_{SHARED_LIBS,SHARED,TESTS}=OFF \ 22 | -DENABLE_DRAFTS=OFF \ 23 | -DENABLE_INTRINSICS=ON \ 24 | -DPOLLER=epoll \ 25 | -DZMQ_BUILD_TESTS=OFF \ 26 | -DZMQ_HAVE_IPC=OFF \ 27 | -DZMQ_WIN32_WINNT=0x0A00 \ 28 | -GNinja \ 29 | .. 30 | ninja -j"$(nproc)" 31 | ninja install 32 | 33 | echo "Cflags.private: -DZMQ_STATIC" >> "$FFBUILD_PREFIX"/lib/pkgconfig/libzmq.pc 34 | } 35 | 36 | ffbuild_configure() { 37 | echo --enable-libzmq 38 | } 39 | 40 | ffbuild_unconfigure() { 41 | echo --disable-libzmq 42 | } 43 | -------------------------------------------------------------------------------- /scripts.d/50-mpeg-5/50-lcevc-dec.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | LCEVCDEC_REPO="https://github.com/v-novaltd/LCEVCdec.git" 4 | LCEVCDEC_COMMIT="aae588337b9de3a181f363101f319682b8852bd8" 5 | 6 | ffbuild_enabled() { 7 | [[ $VARIANT == *nonfree* ]] || return -1 8 | return 0 9 | } 10 | 11 | ffbuild_dockerbuild() { 12 | git clone --filter=tree:0 $LCEVCDEC_REPO lcevc && cd lcevc 13 | git checkout $LCEVCDEC_COMMIT 14 | 15 | curl -L https://github.com/v-novaltd/LCEVCdec/pull/23.patch | git apply 16 | 17 | sed -i '/#include /a #include ' src/api/src/log.h 18 | sed -i '127s/WIN32/MSVC/' cmake/modules/VNovaSetup.cmake 19 | sed -i 's/__declspec(dllexport)//; s/__declspec(dllimport)//' include/LCEVC/lcevc.h 20 | 21 | mkdir build && cd build 22 | 23 | cmake \ 24 | -DCMAKE_TOOLCHAIN_FILE="$FFBUILD_CMAKE_TOOLCHAIN" \ 25 | -DCMAKE_BUILD_TYPE=Release \ 26 | -DCMAKE_INSTALL_PREFIX="$FFBUILD_PREFIX" \ 27 | -DBUILD_SHARED_LIBS=OFF \ 28 | -DVN_SDK_FFMPEG_LIBS_PACKAGE="" \ 29 | -DVN_SDK_SAMPLE_SOURCE=OFF \ 30 | -GNinja \ 31 | .. 32 | 33 | ninja -j"$(nproc)" 34 | ninja install 35 | 36 | rm -rf "$FFBUILD_PREFIX"/lib/objects-Release 37 | sed -i 's|-lstdc++ -lm -llcevc_dec_api|-llcevc_dec_api -lstdc++ -lm|' "$FFBUILD_PREFIX"/lib/pkgconfig/lcevc_dec.pc 38 | echo "Cflags.private: -DVNEnablePublicAPIExport" >> "$FFBUILD_PREFIX"/lib/pkgconfig/lcevc_dec.pc 39 | } 40 | 41 | ffbuild_configure() { 42 | echo --enable-liblcevc-dec 43 | } 44 | 45 | ffbuild_unconfigure() { 46 | echo --disable-liblcevc-dec 47 | } 48 | -------------------------------------------------------------------------------- /scripts.d/50-mpeg-5/50-xevd.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | XEVD_REPO="https://github.com/mpeg5/xevd.git" 4 | XEVD_COMMIT="d4331b73dbc4f474bc523bb099d69cae7370677a" 5 | 6 | ffbuild_enabled() { 7 | return 0 8 | } 9 | 10 | ffbuild_dockerbuild() { 11 | git clone --filter=tree:0 --branch=master --single-branch "$XEVD_REPO" xevd 12 | cd xevd 13 | git checkout "$XEVD_COMMIT" 14 | 15 | mkdir build && cd build 16 | 17 | cmake \ 18 | -DCMAKE_TOOLCHAIN_FILE="$FFBUILD_CMAKE_TOOLCHAIN" \ 19 | -DCMAKE_BUILD_TYPE=Release \ 20 | -DCMAKE_INSTALL_PREFIX="$FFBUILD_PREFIX" \ 21 | -DBUILD_SHARED_LIBS=OFF \ 22 | -GNinja \ 23 | .. 24 | ninja -j"$(nproc)" 25 | ninja install 26 | 27 | rm -f "$FFBUILD_PREFIX"/lib/libxevd.dll.a 28 | sed -i 's/libdir=.*/&\/xevd/' "$FFBUILD_PREFIX"/lib/pkgconfig/xevd.pc 29 | } 30 | 31 | ffbuild_configure() { 32 | echo --enable-libxevd 33 | } 34 | 35 | ffbuild_unconfigure() { 36 | echo --disable-libxevd 37 | } 38 | -------------------------------------------------------------------------------- /scripts.d/50-mpeg-5/50-xeve.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | XEVE_REPO="https://github.com/mpeg5/xeve.git" 4 | XEVE_COMMIT="7b214663da0140f7ee66adefa6357c45070c818c" 5 | 6 | ffbuild_enabled() { 7 | return 0 8 | } 9 | 10 | ffbuild_dockerbuild() { 11 | git clone --filter=tree:0 --branch=master --single-branch "$XEVE_REPO" xeve 12 | cd xeve 13 | git checkout "$XEVE_COMMIT" 14 | 15 | mkdir build && cd build 16 | 17 | cmake \ 18 | -DCMAKE_TOOLCHAIN_FILE="$FFBUILD_CMAKE_TOOLCHAIN" \ 19 | -DCMAKE_BUILD_TYPE=Release \ 20 | -DCMAKE_INSTALL_PREFIX="$FFBUILD_PREFIX" \ 21 | -DBUILD_SHARED_LIBS=OFF \ 22 | -GNinja \ 23 | .. 24 | ninja -j"$(nproc)" 25 | ninja install 26 | 27 | rm -f "$FFBUILD_PREFIX"/lib/libxeve.dll.a 28 | sed -i 's/libdir=.*/&\/xeve/' "$FFBUILD_PREFIX"/lib/pkgconfig/xeve.pc 29 | } 30 | 31 | ffbuild_configure() { 32 | echo --enable-libxeve 33 | } 34 | 35 | ffbuild_unconfigure() { 36 | echo --disable-libxeve 37 | } 38 | -------------------------------------------------------------------------------- /scripts.d/50-openal.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | OPENAL_REPO="https://github.com/kcat/openal-soft.git" 4 | OPENAL_COMMIT="0034751099b647695f398a7208cc8ab03c8c37d0" 5 | 6 | ffbuild_enabled() { 7 | return 0 8 | } 9 | 10 | ffbuild_dockerbuild() { 11 | git-mini-clone "$OPENAL_REPO" "$OPENAL_COMMIT" openal 12 | cd openal 13 | 14 | mkdir cmbuild && cd cmbuild 15 | 16 | cmake \ 17 | -DCMAKE_TOOLCHAIN_FILE="$FFBUILD_CMAKE_TOOLCHAIN" \ 18 | -DCMAKE_BUILD_TYPE=Release \ 19 | -DCMAKE_INSTALL_PREFIX="$FFBUILD_PREFIX" \ 20 | -DLIBTYPE=STATIC \ 21 | -DALSOFT_{EXAMPLES,UTILS,INSTALL_{AMBDEC_PRESETS,CONFIG,EXAMPLES,HRTF_DATA,UTILS}}=OFF \ 22 | -GNinja \ 23 | .. 24 | ninja -j"$(nproc)" 25 | ninja install 26 | 27 | sed -i 's/Libs.private.*/& -lstdc++ -lole32 -luuid/' "$FFBUILD_PREFIX"/lib/pkgconfig/openal.pc 28 | } 29 | 30 | ffbuild_configure() { 31 | echo --enable-openal 32 | } 33 | 34 | ffbuild_unconfigure() { 35 | echo --disable-openal 36 | } 37 | -------------------------------------------------------------------------------- /scripts.d/50-openapv.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | OPENAPV_REPO="https://github.com/AcademySoftwareFoundation/openapv.git" 4 | OPENAPV_COMMIT="f1f43a6ff5905e8b2a36ac956022ecd801597466" 5 | 6 | ffbuild_enabled() { 7 | return 0 8 | } 9 | 10 | ffbuild_dockerbuild() { 11 | git clone --filter=tree:0 --branch=main --single-branch "$OPENAPV_REPO" openapv 12 | cd openapv 13 | git checkout "$OPENAPV_COMMIT" 14 | 15 | echo > app/CMakeLists.txt 16 | 17 | mkdir build && cd build 18 | 19 | # 💥 symbol collision with libxeve 20 | export CFLAGS="$CFLAGS -Dthreadsafe_assign=oapv_threadsafe_assign" 21 | 22 | cmake \ 23 | -DCMAKE_TOOLCHAIN_FILE="$FFBUILD_CMAKE_TOOLCHAIN" \ 24 | -DCMAKE_BUILD_TYPE=Release \ 25 | -DCMAKE_INSTALL_PREFIX="$FFBUILD_PREFIX" \ 26 | -DBUILD_SHARED_LIBS=OFF \ 27 | -DENABLE_TESTS=OFF \ 28 | -DOAPV_APP_STATIC_BUILD=ON \ 29 | -GNinja \ 30 | .. 31 | ninja -j"$(nproc)" 32 | ninja install 33 | 34 | mv "$FFBUILD_PREFIX"/lib{/oapv/liboapv.a,} 35 | rm -rf "$FFBUILD_PREFIX"/{lib/oapv,include/oapv/oapv_exports.h} 36 | 37 | { 38 | echo "Libs.private: -lm" 39 | echo "Cflags.private: -DOAPV_STATIC_DEFINE" 40 | } >> "$FFBUILD_PREFIX"/lib/pkgconfig/oapv.pc 41 | } 42 | 43 | ffbuild_configure() { 44 | echo --enable-liboapv 45 | } 46 | 47 | ffbuild_unconfigure() { 48 | echo --disable-liboapv 49 | } 50 | -------------------------------------------------------------------------------- /scripts.d/50-opencore-amr.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # https://sourceforge.net/projects/opencore-amr/files/opencore-amr/ 4 | OAMR_SRC="https://github.com/nanake/opencore-amr/releases/download/v0.1.6/opencore-amr-0.1.6.tar.gz" 5 | 6 | ffbuild_enabled() { 7 | return 0 8 | } 9 | 10 | ffbuild_dockerbuild() { 11 | curl -L "$OAMR_SRC" | tar xz 12 | cd opencore* 13 | 14 | local myconf=( 15 | --prefix="$FFBUILD_PREFIX" 16 | --disable-{shared,dependency-tracking,examples} 17 | --enable-{static,amrnb-encoder,amrnb-decoder} 18 | --with-pic 19 | ) 20 | 21 | if [[ $TARGET == win* ]]; then 22 | myconf+=( 23 | --host="$FFBUILD_TOOLCHAIN" 24 | ) 25 | else 26 | echo "Unknown target" 27 | return -1 28 | fi 29 | 30 | ./configure "${myconf[@]}" 31 | make -j"$(nproc)" 32 | make install 33 | } 34 | 35 | ffbuild_configure() { 36 | echo --enable-libopencore-amrnb --enable-libopencore-amrwb 37 | } 38 | 39 | ffbuild_unconfigure() { 40 | echo --disable-libopencore-amrnb --disable-libopencore-amrwb 41 | } 42 | -------------------------------------------------------------------------------- /scripts.d/50-openh264.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | OPENH264_REPO="https://github.com/cisco/openh264.git" 4 | OPENH264_COMMIT="0c9a557a9a6f1d267c4d372221669a8ae69ccda0" 5 | 6 | ffbuild_enabled() { 7 | return 0 8 | } 9 | 10 | ffbuild_dockerbuild() { 11 | git-mini-clone "$OPENH264_REPO" "$OPENH264_COMMIT" openh264 12 | cd openh264 13 | 14 | local myconf=( 15 | PREFIX="$FFBUILD_PREFIX" 16 | BUILDTYPE=Release 17 | DEBUGSYMBOLS=False 18 | LIBDIR_NAME=lib 19 | ) 20 | 21 | if [[ $TARGET == win32 ]]; then 22 | myconf+=( 23 | OS=mingw_nt 24 | ARCH=i686 25 | ) 26 | elif [[ $TARGET == win64 ]]; then 27 | myconf+=( 28 | OS=mingw_nt 29 | ARCH=x86_64 30 | ) 31 | else 32 | echo "Unknown target" 33 | return -1 34 | fi 35 | 36 | make -j"$(nproc)" "${myconf[@]}" install-static 37 | } 38 | 39 | ffbuild_configure() { 40 | echo --enable-libopenh264 41 | } 42 | 43 | ffbuild_unconfigure() { 44 | echo --disable-libopenh264 45 | } 46 | -------------------------------------------------------------------------------- /scripts.d/50-openjpeg.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | OPENJPEG_REPO="https://github.com/uclouvain/openjpeg.git" 4 | OPENJPEG_COMMIT="e7453e398b110891778d8da19209792c69ca7169" 5 | 6 | ffbuild_enabled() { 7 | return 0 8 | } 9 | 10 | ffbuild_dockerbuild() { 11 | git-mini-clone "$OPENJPEG_REPO" "$OPENJPEG_COMMIT" openjpeg 12 | cd openjpeg 13 | 14 | mkdir build && cd build 15 | 16 | cmake \ 17 | -DCMAKE_TOOLCHAIN_FILE="$FFBUILD_CMAKE_TOOLCHAIN" \ 18 | -DCMAKE_BUILD_TYPE=Release \ 19 | -DCMAKE_INSTALL_PREFIX="$FFBUILD_PREFIX" \ 20 | -DBUILD_{SHARED_LIBS,CODEC,TESTING}=OFF \ 21 | -DWITH_ASTYLE=OFF \ 22 | -GNinja \ 23 | .. 24 | ninja -j"$(nproc)" 25 | ninja install 26 | } 27 | 28 | ffbuild_configure() { 29 | echo --enable-libopenjpeg 30 | } 31 | 32 | ffbuild_unconfigure() { 33 | echo --disable-libopenjpeg 34 | } 35 | -------------------------------------------------------------------------------- /scripts.d/50-openmpt.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | OPENMPT_REPO="https://github.com/OpenMPT/openmpt.git" 4 | OPENMPT_COMMIT="5c6703d5a44251147c6bc686a70f02135f6947a5" 5 | 6 | ffbuild_enabled() { 7 | return 0 8 | } 9 | 10 | ffbuild_dockerbuild() { 11 | git-mini-clone "$OPENMPT_REPO" "$OPENMPT_COMMIT" openmpt 12 | cd openmpt 13 | 14 | local myconf=( 15 | PREFIX="$FFBUILD_PREFIX" 16 | CONFIG=mingw-w64 17 | CXXSTDLIB_PCLIBSPRIVATE="-lstdc++" 18 | STATIC_LIB=1 19 | SHARED_LIB=0 20 | DYNLINK=0 21 | EXAMPLES=0 22 | OPENMPT123=0 23 | IN_OPENMPT=0 24 | XMP_OPENMPT=0 25 | DEBUG=0 26 | OPTIMIZE=1 27 | TEST=0 28 | MODERN=1 29 | FORCE_DEPS=1 30 | NO_MINIMP3=0 31 | NO_ZLIB=0 32 | NO_OGG=0 33 | NO_VORBIS=0 34 | NO_VORBISFILE=0 35 | NO_MPG123=1 36 | NO_SDL2=1 37 | NO_PULSEAUDIO=1 38 | NO_SNDFILE=1 39 | NO_PORTAUDIO=1 40 | NO_PORTAUDIOCPP=1 41 | NO_FLAC=1 42 | ) 43 | 44 | if [[ $TARGET == win64 ]]; then 45 | myconf+=( 46 | WINDOWS_ARCH=amd64 47 | ) 48 | elif [[ $TARGET == win32 ]]; then 49 | myconf+=( 50 | WINDOWS_ARCH=x86 51 | ) 52 | else 53 | echo "Unknown target" 54 | return -1 55 | fi 56 | 57 | export CPPFLAGS="$CPPFLAGS -DMPT_WITH_MINGWSTDTHREADS" 58 | 59 | make -j"$(nproc)" "${myconf[@]}" all install 60 | } 61 | 62 | ffbuild_configure() { 63 | echo --enable-libopenmpt 64 | } 65 | 66 | ffbuild_unconfigure() { 67 | echo --disable-libopenmpt 68 | } 69 | -------------------------------------------------------------------------------- /scripts.d/50-protocol/25-openssl.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | OPENSSL_REPO="https://github.com/openssl/openssl.git" 4 | OPENSSL_COMMIT="openssl-3.5.0" 5 | OPENSSL_TAGFILTER="openssl-3.5.*" 6 | 7 | ffbuild_enabled() { 8 | return 0 9 | } 10 | 11 | ffbuild_dockerbuild() { 12 | git-mini-clone "$OPENSSL_REPO" "$OPENSSL_COMMIT" openssl 13 | cd openssl 14 | 15 | local myconf=( 16 | no-{apps,docs,ec2m,engine,legacy,module,shared,tests} 17 | no-{ssl,ssl3-method} 18 | no-{dh,dsa,md4,mdc2,rc2,rc4,sm2,sm3,sm4} 19 | threads 20 | zlib 21 | --prefix="$FFBUILD_PREFIX" 22 | ) 23 | 24 | if [[ $TARGET == win64 ]]; then 25 | myconf+=( 26 | # (win64) install libraries onto lib not lib64 27 | # otherwise srt fails to find libcrypto 28 | # see https://github.com/openssl/openssl/issues/16244 29 | --libdir=lib 30 | --cross-compile-prefix="$FFBUILD_CROSS_PREFIX" 31 | mingw64 32 | ) 33 | elif [[ $TARGET == win32 ]]; then 34 | myconf+=( 35 | --cross-compile-prefix="$FFBUILD_CROSS_PREFIX" 36 | mingw 37 | ) 38 | else 39 | echo "Unknown target" 40 | return -1 41 | fi 42 | 43 | export CC="${CC/${FFBUILD_CROSS_PREFIX}/}" 44 | export CXX="${CXX/${FFBUILD_CROSS_PREFIX}/}" 45 | export AR="${AR/${FFBUILD_CROSS_PREFIX}/}" 46 | export RANLIB="${RANLIB/${FFBUILD_CROSS_PREFIX}/}" 47 | 48 | ./Configure "${myconf[@]}" 49 | 50 | make -j"$(nproc)" 51 | make install_sw 52 | } 53 | -------------------------------------------------------------------------------- /scripts.d/50-protocol/50-libssh.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | LIBSSH_REPO="https://gitlab.com/libssh/libssh-mirror.git" 4 | LIBSSH_COMMIT="2a2c714dfa9f5b978578ef76c6071455b2765dbd" 5 | 6 | ffbuild_enabled() { 7 | return 0 8 | } 9 | 10 | ffbuild_dockerbuild() { 11 | git-mini-clone "$LIBSSH_REPO" "$LIBSSH_COMMIT" libssh 12 | cd libssh 13 | 14 | mkdir build && cd build 15 | 16 | cmake \ 17 | -DCMAKE_TOOLCHAIN_FILE="$FFBUILD_CMAKE_TOOLCHAIN" \ 18 | -DCMAKE_BUILD_TYPE=Release \ 19 | -DCMAKE_INSTALL_PREFIX="$FFBUILD_PREFIX" \ 20 | -DBUILD_SHARED_LIBS=OFF \ 21 | -DWITH_{SFTP,ZLIB}=ON \ 22 | -DWITH_{EXAMPLES,SERVER}=OFF \ 23 | -GNinja \ 24 | .. 25 | ninja -j"$(nproc)" 26 | ninja install 27 | 28 | { 29 | echo "Libs.private: -liphlpapi" 30 | echo "Requires.private: libssl libcrypto zlib" 31 | echo "Cflags.private: -DLIBSSH_STATIC" 32 | } >> "$FFBUILD_PREFIX"/lib/pkgconfig/libssh.pc 33 | } 34 | 35 | ffbuild_configure() { 36 | echo --enable-libssh 37 | } 38 | 39 | ffbuild_unconfigure() { 40 | echo --disable-libssh 41 | } 42 | -------------------------------------------------------------------------------- /scripts.d/50-protocol/50-srt.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | SRT_REPO="https://github.com/Haivision/srt.git" 4 | SRT_COMMIT="21370a7e8f63a4816ffabe768726b68662c27731" 5 | 6 | ffbuild_enabled() { 7 | return 0 8 | } 9 | 10 | ffbuild_dockerbuild() { 11 | git-mini-clone "$SRT_REPO" "$SRT_COMMIT" srt 12 | cd srt 13 | 14 | mkdir build && cd build 15 | 16 | cmake \ 17 | -DCMAKE_TOOLCHAIN_FILE="$FFBUILD_CMAKE_TOOLCHAIN" \ 18 | -DCMAKE_BUILD_TYPE=Release \ 19 | -DCMAKE_INSTALL_PREFIX="$FFBUILD_PREFIX" \ 20 | -DENABLE_{SHARED,APPS}=OFF \ 21 | -DENABLE_{STATIC,CXX_DEPS,ENCRYPTION}=ON \ 22 | -DUSE_ENCLIB=openssl-evp \ 23 | -DUSE_STATIC_LIBSTDCXX=ON \ 24 | -GNinja \ 25 | .. 26 | ninja -j"$(nproc)" 27 | ninja install 28 | } 29 | 30 | ffbuild_configure() { 31 | echo --enable-libsrt 32 | } 33 | 34 | ffbuild_unconfigure() { 35 | echo --disable-libsrt 36 | } 37 | -------------------------------------------------------------------------------- /scripts.d/50-rav1e.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | RAV1E_SRC_PREFIX="https://github.com/xiph/rav1e/releases/download/p20240409" 4 | 5 | ffbuild_enabled() { 6 | [[ $TARGET == win32 ]] && return -1 7 | return 0 8 | } 9 | 10 | ffbuild_dockerbuild() { 11 | wget -O rav1e.zip "${RAV1E_SRC_PREFIX}/rav1e-windows-gnu-avx2.zip" 12 | unzip rav1e.zip 13 | cd rav1e-* 14 | 15 | rm -rf bin lib/*.dll.a 16 | sed -i "s|^prefix=.*|prefix=${FFBUILD_PREFIX}|" lib/pkgconfig/rav1e.pc 17 | 18 | mkdir -p "$FFBUILD_PREFIX"/{include,lib/pkgconfig} 19 | cp -r include/. "$FFBUILD_PREFIX"/include/. 20 | cp -r lib/. "$FFBUILD_PREFIX"/lib/. 21 | } 22 | 23 | ffbuild_configure() { 24 | echo --enable-librav1e 25 | } 26 | 27 | ffbuild_unconfigure() { 28 | echo --disable-librav1e 29 | } 30 | -------------------------------------------------------------------------------- /scripts.d/50-rubberband.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | RUBBERBAND_REPO="https://github.com/breakfastquay/rubberband.git" 4 | RUBBERBAND_COMMIT="e4296ac80b1170018a110bc326fd0d45a0eb27d6" 5 | 6 | ffbuild_enabled() { 7 | return 0 8 | } 9 | 10 | ffbuild_dockerbuild() { 11 | git-mini-clone "$RUBBERBAND_REPO" "$RUBBERBAND_COMMIT" rubberband 12 | cd rubberband 13 | 14 | mkdir build && cd build 15 | 16 | local myconf=( 17 | --prefix="$FFBUILD_PREFIX" 18 | -Dauto_features=disabled 19 | -Ddefault_library=static 20 | -Dfft=fftw 21 | -Dresampler=libsamplerate 22 | ) 23 | 24 | if [[ $TARGET == win* ]]; then 25 | myconf+=( 26 | --cross-file=/cross.meson 27 | ) 28 | else 29 | echo "Unknown target" 30 | return -1 31 | fi 32 | 33 | meson setup "${myconf[@]}" .. 34 | ninja -j"$(nproc)" 35 | ninja install 36 | } 37 | 38 | ffbuild_configure() { 39 | echo --enable-librubberband 40 | } 41 | 42 | ffbuild_unconfigure() { 43 | echo --disable-librubberband 44 | } 45 | -------------------------------------------------------------------------------- /scripts.d/50-schannel.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | ffbuild_enabled() { 4 | [[ $TARGET == win* ]] 5 | } 6 | 7 | ffbuild_dockerstage() { 8 | return 0 9 | } 10 | 11 | ffbuild_dockerlayer() { 12 | return 0 13 | } 14 | 15 | ffbuild_dockerbuild() { 16 | return 0 17 | } 18 | 19 | ffbuild_configure() { 20 | echo --enable-schannel 21 | } 22 | 23 | ffbuild_unconfigure() { 24 | echo --disable-schannel 25 | } 26 | -------------------------------------------------------------------------------- /scripts.d/50-sdl.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | SDL_SRC="https://github.com/libsdl-org/SDL/releases/download/release-2.32.8/SDL2-devel-2.32.8-mingw.tar.gz" 4 | 5 | ffbuild_enabled() { 6 | return 0 7 | } 8 | 9 | ffbuild_dockerbuild() { 10 | curl -L "$SDL_SRC" | tar xz 11 | cd SDL* 12 | 13 | if [[ $TARGET == win64 ]]; then 14 | cd x86_64-w64-mingw32 15 | elif [[ $TARGET == win32 ]]; then 16 | cd i686-w64-mingw32 17 | else 18 | echo "Unknown target" 19 | return -1 20 | fi 21 | 22 | cp -r include/. "$FFBUILD_PREFIX"/include/. 23 | cp lib/libSDL2.a "$FFBUILD_PREFIX"/lib 24 | cp lib/pkgconfig/sdl2.pc "$FFBUILD_PREFIX"/lib/pkgconfig 25 | 26 | sed -ri \ 27 | -e "s|^prefix=.*|prefix=${FFBUILD_PREFIX}|" \ 28 | -e 's/ -mwindows//g' \ 29 | -e 's/ -lSDL2main//g' \ 30 | -e 's/ -Dmain=SDL_main//g' \ 31 | -e 's/ -lSDL2//g' \ 32 | -e 's/Libs: /Libs: -lSDL2 /' \ 33 | "$FFBUILD_PREFIX"/lib/pkgconfig/sdl2.pc 34 | } 35 | 36 | ffbuild_configure() { 37 | echo --enable-sdl2 38 | } 39 | 40 | ffbuild_unconfigure() { 41 | echo --disable-sdl2 42 | } 43 | -------------------------------------------------------------------------------- /scripts.d/50-snappy.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | SNAPPY_REPO="https://github.com/google/snappy.git" 4 | SNAPPY_COMMIT="6af9287fbdb913f0794d0148c6aa43b58e63c8e3" 5 | 6 | ffbuild_enabled() { 7 | return 0 8 | } 9 | 10 | ffbuild_dockerbuild() { 11 | git-mini-clone "$SNAPPY_REPO" "$SNAPPY_COMMIT" snappy 12 | cd snappy 13 | 14 | mkdir build && cd build 15 | 16 | cmake \ 17 | -DCMAKE_TOOLCHAIN_FILE="$FFBUILD_CMAKE_TOOLCHAIN" \ 18 | -DCMAKE_BUILD_TYPE=Release \ 19 | -DCMAKE_INSTALL_PREFIX="$FFBUILD_PREFIX" \ 20 | -DBUILD_SHARED_LIBS=OFF \ 21 | -DSNAPPY_BUILD_{BENCHMARKS,TESTS}=OFF \ 22 | -DSNAPPY_REQUIRE_AVX{,2}=ON \ 23 | -GNinja \ 24 | .. 25 | ninja -j"$(nproc)" 26 | ninja install 27 | } 28 | 29 | ffbuild_configure() { 30 | echo --enable-libsnappy 31 | } 32 | 33 | ffbuild_unconfigure() { 34 | echo --disable-libsnappy 35 | } 36 | -------------------------------------------------------------------------------- /scripts.d/50-soxr.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # https://sourceforge.net/p/soxr/code/ci/master/tree/ 4 | SOXR_REPO="https://github.com/nanake/libsoxr.git" 5 | SOXR_COMMIT="945b592b70470e29f917f4de89b4281fbbd540c0" 6 | 7 | ffbuild_enabled() { 8 | return 0 9 | } 10 | 11 | ffbuild_dockerbuild() { 12 | git-mini-clone "$SOXR_REPO" "$SOXR_COMMIT" soxr 13 | cd soxr 14 | 15 | mkdir build && cd build 16 | 17 | cmake \ 18 | -DCMAKE_TOOLCHAIN_FILE="$FFBUILD_CMAKE_TOOLCHAIN" \ 19 | -DCMAKE_BUILD_TYPE=Release \ 20 | -DCMAKE_INSTALL_PREFIX="$FFBUILD_PREFIX" \ 21 | -DCMAKE_POLICY_VERSION_MINIMUM=3.5 \ 22 | -DBUILD_{EXAMPLES,SHARED_LIBS,TESTS}=OFF \ 23 | -DWITH_OPENMP=OFF \ 24 | -DDOC_INSTALL_DIR="$FFBUILD_PREFIX"/share/doc \ 25 | -Wno-dev \ 26 | -GNinja \ 27 | .. 28 | ninja -j"$(nproc)" 29 | ninja install 30 | } 31 | 32 | ffbuild_configure() { 33 | echo --enable-libsoxr 34 | } 35 | 36 | ffbuild_unconfigure() { 37 | echo --disable-libsoxr 38 | } 39 | -------------------------------------------------------------------------------- /scripts.d/50-svtav1.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | SVTAV1_REPO="https://gitlab.com/AOMediaCodec/SVT-AV1.git" 4 | SVTAV1_COMMIT="0cfe990ba261ebd84508eaa65184b8c33a9bd811" 5 | 6 | ffbuild_enabled() { 7 | [[ $TARGET == win32 ]] && return -1 8 | return 0 9 | } 10 | 11 | ffbuild_dockerbuild() { 12 | git-mini-clone "$SVTAV1_REPO" "$SVTAV1_COMMIT" svtav1 13 | cd svtav1 14 | 15 | mkdir build && cd build 16 | 17 | cmake \ 18 | -DCMAKE_TOOLCHAIN_FILE="$FFBUILD_CMAKE_TOOLCHAIN" \ 19 | -DCMAKE_BUILD_TYPE=Release \ 20 | -DCMAKE_INSTALL_PREFIX="$FFBUILD_PREFIX" \ 21 | -DBUILD_{APPS,SHARED_LIBS,TESTING}=OFF \ 22 | -DENABLE_AVX512=ON \ 23 | -DSVT_AV1_LTO=OFF \ 24 | -GNinja \ 25 | .. 26 | ninja -j"$(nproc)" 27 | ninja install 28 | } 29 | 30 | ffbuild_configure() { 31 | echo --enable-libsvtav1 32 | } 33 | 34 | ffbuild_unconfigure() { 35 | echo --disable-libsvtav1 36 | } 37 | -------------------------------------------------------------------------------- /scripts.d/50-twolame.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | TWOLAME_REPO="https://github.com/njh/twolame.git" 4 | TWOLAME_COMMIT="90b694b6125dbe23a346bd5607a7fb63ad2785dc" 5 | 6 | ffbuild_enabled() { 7 | return 0 8 | } 9 | 10 | ffbuild_dockerbuild() { 11 | git-mini-clone "$TWOLAME_REPO" "$TWOLAME_COMMIT" twolame 12 | cd twolame 13 | 14 | NOCONFIGURE=1 ./autogen.sh 15 | touch doc/twolame.1 16 | 17 | local myconf=( 18 | --prefix="$FFBUILD_PREFIX" 19 | --disable-{shared,dependency-tracking,maintainer-mode,sndfile} 20 | --enable-static 21 | --with-pic 22 | ) 23 | 24 | if [[ $TARGET == win* ]]; then 25 | myconf+=( 26 | --host="$FFBUILD_TOOLCHAIN" 27 | ) 28 | else 29 | echo "Unknown target" 30 | return -1 31 | fi 32 | 33 | ./configure "${myconf[@]}" 34 | make -j"$(nproc)" 35 | make install 36 | } 37 | 38 | ffbuild_configure() { 39 | echo --enable-libtwolame 40 | } 41 | 42 | ffbuild_unconfigure() { 43 | echo --disable-libtwolame 44 | } 45 | 46 | ffbuild_cflags() { 47 | echo -DLIBTWOLAME_STATIC 48 | } 49 | -------------------------------------------------------------------------------- /scripts.d/50-uavs3d.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | UAVS3D_REPO="https://github.com/uavs3/uavs3d.git" 4 | UAVS3D_COMMIT="1fd04917cff50fac72ae23e45f82ca6fd9130bd8" 5 | 6 | ffbuild_enabled() { 7 | [[ $TARGET == win32 ]] && return -1 8 | return 0 9 | } 10 | 11 | ffbuild_dockerbuild() { 12 | git clone --filter=tree:0 "$UAVS3D_REPO" uavs3d 13 | cd uavs3d 14 | git checkout "$UAVS3D_COMMIT" 15 | 16 | mkdir build/linux && cd build/linux 17 | 18 | cmake \ 19 | -DCMAKE_TOOLCHAIN_FILE="$FFBUILD_CMAKE_TOOLCHAIN" \ 20 | -DCMAKE_BUILD_TYPE=Release \ 21 | -DCMAKE_INSTALL_PREFIX="$FFBUILD_PREFIX" \ 22 | -DCMAKE_POLICY_VERSION_MINIMUM=3.5 \ 23 | -DBUILD_SHARED_LIBS=OFF \ 24 | -DCOMPILE_10BIT=ON \ 25 | -GNinja \ 26 | ../.. 27 | ninja -j"$(nproc)" 28 | ninja install 29 | } 30 | 31 | ffbuild_configure() { 32 | echo --enable-libuavs3d 33 | } 34 | 35 | ffbuild_unconfigure() { 36 | echo --disable-libuavs3d 37 | } 38 | -------------------------------------------------------------------------------- /scripts.d/50-vidstab.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | VIDSTAB_REPO="https://github.com/georgmartius/vid.stab.git" 4 | VIDSTAB_COMMIT="d5a313ade2d7dccb5b1d06ed9779fbafeb65f2be" 5 | 6 | ffbuild_enabled() { 7 | [[ $VARIANT == lgpl* ]] && return -1 8 | return 0 9 | } 10 | 11 | ffbuild_dockerbuild() { 12 | git-mini-clone "$VIDSTAB_REPO" "$VIDSTAB_COMMIT" vidstab 13 | cd vidstab 14 | 15 | mkdir build && cd build 16 | 17 | cmake \ 18 | -DCMAKE_TOOLCHAIN_FILE="$FFBUILD_CMAKE_TOOLCHAIN" \ 19 | -DCMAKE_BUILD_TYPE=Release \ 20 | -DCMAKE_INSTALL_PREFIX="$FFBUILD_PREFIX" \ 21 | -DCMAKE_POLICY_VERSION_MINIMUM=3.5 \ 22 | -DBUILD_SHARED_LIBS=OFF \ 23 | -GNinja \ 24 | .. 25 | ninja -j"$(nproc)" 26 | ninja install 27 | } 28 | 29 | ffbuild_configure() { 30 | echo --enable-libvidstab 31 | } 32 | 33 | ffbuild_unconfigure() { 34 | echo --disable-libvidstab 35 | } 36 | -------------------------------------------------------------------------------- /scripts.d/50-vulkan/45-vulkan.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | HEADERS_REPO="https://github.com/KhronosGroup/Vulkan-Headers.git" 4 | HEADERS_COMMIT="v1.4.316" 5 | HEADERS_TAGFILTER="v?.*.*" 6 | 7 | ffbuild_enabled() { 8 | return 0 9 | } 10 | 11 | ffbuild_dockerbuild() { 12 | git-mini-clone "$HEADERS_REPO" "$HEADERS_COMMIT" vkheaders 13 | cd vkheaders 14 | 15 | mkdir build && cd build 16 | 17 | cmake \ 18 | -DCMAKE_TOOLCHAIN_FILE="$FFBUILD_CMAKE_TOOLCHAIN" \ 19 | -DCMAKE_BUILD_TYPE=Release \ 20 | -DCMAKE_INSTALL_PREFIX="$FFBUILD_PREFIX" \ 21 | -DVULKAN_HEADERS_ENABLE_INSTALL=YES \ 22 | -DVULKAN_HEADERS_ENABLE_{MODULE,TESTS}=NO \ 23 | -GNinja \ 24 | .. 25 | ninja install 26 | 27 | cat >"$FFBUILD_PREFIX"/lib/pkgconfig/vulkan.pc <"$FFBUILD_PREFIX"/lib/pkgconfig/spirv-cross-c-shared.pc <> "$FFBUILD_PREFIX"/lib/pkgconfig/libplacebo.pc 44 | } 45 | 46 | ffbuild_configure() { 47 | echo --enable-libplacebo 48 | } 49 | 50 | ffbuild_unconfigure() { 51 | echo --disable-libplacebo 52 | } 53 | -------------------------------------------------------------------------------- /scripts.d/50-x264.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | X264_REPO="https://code.videolan.org/videolan/x264.git" 4 | X264_COMMIT="ff620d0c3c4f717ab393892983d43458d27e4bed" 5 | 6 | ffbuild_enabled() { 7 | [[ $VARIANT == lgpl* ]] && return -1 8 | return 0 9 | } 10 | 11 | ffbuild_dockerbuild() { 12 | git-mini-clone "$X264_REPO" "$X264_COMMIT" x264 13 | cd x264 14 | 15 | local myconf=( 16 | --prefix="$FFBUILD_PREFIX" 17 | --disable-{cli,lavf,swscale,win32thread} 18 | --enable-{static,pic} 19 | ) 20 | 21 | if [[ $TARGET == win* ]]; then 22 | myconf+=( 23 | --host="$FFBUILD_TOOLCHAIN" 24 | --cross-prefix="$FFBUILD_CROSS_PREFIX" 25 | ) 26 | else 27 | echo "Unknown target" 28 | return -1 29 | fi 30 | 31 | ./configure "${myconf[@]}" 32 | make -j"$(nproc)" 33 | make install 34 | } 35 | 36 | ffbuild_configure() { 37 | echo --enable-libx264 38 | } 39 | 40 | ffbuild_unconfigure() { 41 | echo --disable-libx264 42 | } 43 | 44 | ffbuild_cflags() { 45 | return 0 46 | } 47 | 48 | ffbuild_ldflags() { 49 | return 0 50 | } 51 | -------------------------------------------------------------------------------- /scripts.d/50-x265.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | X265_REPO="https://bitbucket.org/multicoreware/x265_git.git" 4 | X265_COMMIT="1e993ee88063103904867ced35f7fcfc8e0748cf" 5 | 6 | ffbuild_enabled() { 7 | [[ $VARIANT == lgpl* ]] && return -1 8 | return 0 9 | } 10 | 11 | ffbuild_dockerbuild() { 12 | git clone --filter=tree:0 --branch=master --single-branch "$X265_REPO" x265 13 | cd x265 14 | git checkout "$X265_COMMIT" 15 | 16 | # workaround for gcc-15 17 | sed -i '/#include /a #include ' source/dynamicHDR10/json11/json11.cpp 18 | 19 | local common_config=( 20 | -DCMAKE_INSTALL_PREFIX="$FFBUILD_PREFIX" 21 | -DCMAKE_TOOLCHAIN_FILE="$FFBUILD_CMAKE_TOOLCHAIN" 22 | -DCMAKE_BUILD_TYPE=Release 23 | -DENABLE_ALPHA=ON 24 | -DENABLE_{SHARED,CLI}"=OFF" 25 | -Wno-dev 26 | -GNinja 27 | ) 28 | 29 | if [[ $TARGET != *32 ]]; then 30 | mkdir 8bit 10bit 12bit 31 | cmake "${common_config[@]}" -DHIGH_BIT_DEPTH=ON -DEXPORT_C_API=OFF -DENABLE_HDR10_PLUS=ON -DMAIN12=ON -S source -B 12bit & 32 | cmake "${common_config[@]}" -DHIGH_BIT_DEPTH=ON -DEXPORT_C_API=OFF -DENABLE_HDR10_PLUS=ON -S source -B 10bit & 33 | cmake "${common_config[@]}" -DEXTRA_LIB="x265_main10.a;x265_main12.a" -DEXTRA_LINK_FLAGS=-L. -DLINKED_{10,12}BIT=ON -S source -B 8bit & 34 | wait 35 | 36 | cat >build.ninja <<"EOF" 37 | rule build_lib 38 | command = ninja -C $in 39 | 40 | build 12bit/libx265.a: build_lib 12bit 41 | build 10bit/libx265.a: build_lib 10bit 42 | build 8bit/libx265.a: build_lib 8bit 43 | 44 | build all: phony 12bit/libx265.a 10bit/libx265.a 8bit/libx265.a 45 | default all 46 | EOF 47 | 48 | ninja -j"$(nproc)" 49 | 50 | cd 8bit 51 | mv ../12bit/libx265.a ../8bit/libx265_main12.a 52 | mv ../10bit/libx265.a ../8bit/libx265_main10.a 53 | mv libx265.a libx265_main.a 54 | 55 | ${AR} -M <> "$scr" 30 | echo "Needs manual check." 31 | break 32 | fi 33 | 34 | if [[ -n "${CUR_COMMIT}" ]]; then # GIT 35 | if [[ -n "${CUR_TAGFILTER}" ]]; then 36 | NEW_COMMIT="$(git -c 'versionsort.suffix=-' ls-remote --exit-code --tags --refs --sort "v:refname" "${CUR_REPO}" "refs/tags/${CUR_TAGFILTER}" | tail -n1 | cut -d/ -f3- | xargs)" 37 | else 38 | if [[ -z "${CUR_BRANCH}" ]]; then 39 | # Fetch default branch name 40 | CUR_BRANCH="$(git remote show "${CUR_REPO}" | grep "HEAD branch:" | cut -d":" -f2 | xargs)" 41 | echo "Found default branch ${CUR_BRANCH}" 42 | fi 43 | NEW_COMMIT="$(git ls-remote --exit-code --heads --refs "${CUR_REPO}" refs/heads/"${CUR_BRANCH}" | cut -f1)" 44 | fi 45 | 46 | echo "Got ${NEW_COMMIT} (current: ${CUR_COMMIT})" 47 | 48 | if [[ "${NEW_COMMIT}" != "${CUR_COMMIT}" ]]; then 49 | echo "Updating ${scr}" 50 | sed -i "s/^${COMMIT_VAR}=.*/${COMMIT_VAR}=\"${NEW_COMMIT}\"/" "${scr}" 51 | fi 52 | else 53 | # Mark scripts with unknown layout for manual check 54 | echo "xxx_CHECKME_UNKNOWN_xxx" >> "$scr" 55 | echo "Unknown layout. Needs manual check." 56 | break 57 | fi 58 | done 59 | ) 60 | echo 61 | done 62 | -------------------------------------------------------------------------------- /util/vars.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | if [[ $# -lt 2 ]]; then 4 | echo "Invalid Arguments" 5 | exit -1 6 | fi 7 | 8 | TARGET="$1" 9 | VARIANT="$2" 10 | shift 2 11 | 12 | if ! [[ -f "variants/${TARGET}-${VARIANT}.sh" ]]; then 13 | echo "Invalid target/variant" 14 | exit -1 15 | fi 16 | 17 | ADDINS=() 18 | ADDINS_STR="" 19 | while [[ "$#" -gt 0 ]]; do 20 | if ! [[ -f "addins/${1}.sh" ]]; then 21 | echo "Invalid addin: $1" 22 | exit -1 23 | fi 24 | 25 | ADDINS+=( "$1" ) 26 | ADDINS_STR="${ADDINS_STR}${ADDINS_STR:+-}$1" 27 | 28 | shift 29 | done 30 | 31 | REGISTRY="ghcr.io" 32 | OWNER="${GITHUB_ACTOR:-nanake}" 33 | OWNER="${OWNER,,}" 34 | REPO="${GITHUB_REPOSITORY:-nanake/ffmpeg-tinderbox}" 35 | REPO="${REPO,,}" 36 | TARGET_IMAGE="${REGISTRY}/${OWNER}/base-${TARGET}:latest" 37 | IMAGE="${REGISTRY}/${OWNER}/${TARGET}-${VARIANT%-shared}:latest" 38 | 39 | ffbuild_dockerstage() { 40 | to_df "RUN --mount=src=${SELF},dst=/stage.sh run_stage /stage.sh" 41 | } 42 | 43 | ffbuild_dockerlayer() { 44 | to_df "COPY --from=${SELFLAYER} \$FFBUILD_PREFIX/. \$FFBUILD_PREFIX" 45 | } 46 | 47 | ffbuild_dockerfinal() { 48 | to_df "COPY --from=${PREVLAYER} \$FFBUILD_PREFIX/. \$FFBUILD_PREFIX" 49 | } 50 | 51 | ffbuild_configure() { 52 | return 0 53 | } 54 | 55 | ffbuild_unconfigure() { 56 | return 0 57 | } 58 | 59 | ffbuild_cflags() { 60 | return 0 61 | } 62 | 63 | ffbuild_uncflags() { 64 | return 0 65 | } 66 | 67 | ffbuild_cxxflags() { 68 | return 0 69 | } 70 | 71 | ffbuild_uncxxflags() { 72 | return 0 73 | } 74 | 75 | ffbuild_ldflags() { 76 | return 0 77 | } 78 | 79 | ffbuild_unldflags() { 80 | return 0 81 | } 82 | 83 | ffbuild_libs() { 84 | return 0 85 | } 86 | 87 | ffbuild_unlibs() { 88 | return 0 89 | } 90 | -------------------------------------------------------------------------------- /variants/default-install-nonfree-shared.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | package_variant() { 4 | IN="$1" 5 | OUT="$2" 6 | 7 | mkdir -p "$OUT"/bin 8 | cp "$IN"/bin/*.{exe,dll} "$OUT"/bin 9 | 10 | mkdir -p "$OUT"/lib 11 | cp "$IN"/bin/*.lib "$OUT"/lib 12 | cp "$IN"/lib/*.{def,dll.a} "$OUT"/lib 13 | 14 | mkdir -p "$OUT"/lib/pkgconfig 15 | cp -a "$IN"/lib/pkgconfig/*.pc "$OUT"/lib/pkgconfig 16 | sed -i \ 17 | -e 's|^prefix=.*|prefix=${pcfiledir}/../..|' \ 18 | -e 's|/ffbuild/prefix|${prefix}|' \ 19 | -e '/Libs.private:/d' \ 20 | "$OUT"/lib/pkgconfig/*.pc 21 | 22 | mkdir -p "$OUT"/include 23 | cp -r "$IN"/include/* "$OUT"/include 24 | } 25 | -------------------------------------------------------------------------------- /variants/default-install-nonfree.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | package_variant() { 4 | IN="$1" 5 | OUT="$2" 6 | 7 | mkdir -p "$OUT"/bin 8 | cp "$IN"/bin/* "$OUT"/bin 9 | } 10 | -------------------------------------------------------------------------------- /variants/default-install-shared.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | package_variant() { 4 | IN="$1" 5 | OUT="$2" 6 | 7 | mkdir -p "$OUT"/bin 8 | cp "$IN"/bin/*.{exe,dll} "$OUT"/bin 9 | 10 | mkdir -p "$OUT"/lib 11 | cp "$IN"/bin/*.lib "$OUT"/lib 12 | cp "$IN"/lib/*.{def,dll.a} "$OUT"/lib 13 | 14 | mkdir -p "$OUT"/lib/pkgconfig 15 | cp -a "$IN"/lib/pkgconfig/*.pc "$OUT"/lib/pkgconfig 16 | sed -i \ 17 | -e 's|^prefix=.*|prefix=${pcfiledir}/../..|' \ 18 | -e 's|/ffbuild/prefix|${prefix}|' \ 19 | -e '/Libs.private:/d' \ 20 | "$OUT"/lib/pkgconfig/*.pc 21 | 22 | mkdir -p "$OUT"/include 23 | cp -r "$IN"/include/* "$OUT"/include 24 | 25 | mkdir -p "$OUT"/doc 26 | cp -r "$IN"/share/doc/ffmpeg/* "$OUT"/doc 27 | } 28 | -------------------------------------------------------------------------------- /variants/default-install.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | package_variant() { 4 | IN="$1" 5 | OUT="$2" 6 | 7 | mkdir -p "$OUT"/bin 8 | cp "$IN"/bin/* "$OUT"/bin 9 | 10 | mkdir -p "$OUT"/doc 11 | cp -r "$IN"/share/doc/ffmpeg/* "$OUT"/doc 12 | } 13 | -------------------------------------------------------------------------------- /variants/defaults-gpl-shared.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | source "$(dirname "$BASH_SOURCE")"/defaults-gpl.sh 3 | FF_CONFIGURE+=" --enable-shared --disable-static" 4 | -------------------------------------------------------------------------------- /variants/defaults-gpl.sh: -------------------------------------------------------------------------------- 1 | FF_CONFIGURE="--enable-gpl --enable-version3 --disable-debug" 2 | FF_CFLAGS="" 3 | FF_CXXFLAGS="" 4 | FF_LDFLAGS="" 5 | GIT_BRANCH="master" 6 | -------------------------------------------------------------------------------- /variants/defaults-lgpl-shared.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | source "$(dirname "$BASH_SOURCE")"/defaults-lgpl.sh 3 | FF_CONFIGURE+=" --enable-shared --disable-static" 4 | -------------------------------------------------------------------------------- /variants/defaults-lgpl.sh: -------------------------------------------------------------------------------- 1 | FF_CONFIGURE="--enable-version3 --disable-debug" 2 | FF_CFLAGS="" 3 | FF_CXXFLAGS="" 4 | FF_LDFLAGS="" 5 | GIT_BRANCH="master" 6 | -------------------------------------------------------------------------------- /variants/defaults-nonfree-shared.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | source "$(dirname "$BASH_SOURCE")"/defaults-gpl-shared.sh 3 | FF_CONFIGURE+=" --disable-doc --enable-nonfree --extra-version=\$(date +%Y-%m-%d)-nonfree-shared" 4 | -------------------------------------------------------------------------------- /variants/defaults-nonfree.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | source "$(dirname "$BASH_SOURCE")"/defaults-gpl.sh 3 | FF_CONFIGURE+=" --disable-doc --enable-nonfree --extra-version=\$(date +%Y-%m-%d)-nonfree" 4 | -------------------------------------------------------------------------------- /variants/win32-gpl-shared.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | source "$(dirname "$BASH_SOURCE")"/default-install-shared.sh 3 | source "$(dirname "$BASH_SOURCE")"/defaults-gpl-shared.sh 4 | -------------------------------------------------------------------------------- /variants/win32-gpl.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | source "$(dirname "$BASH_SOURCE")"/default-install.sh 3 | source "$(dirname "$BASH_SOURCE")"/defaults-gpl.sh 4 | -------------------------------------------------------------------------------- /variants/win32-lgpl-shared.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | source "$(dirname "$BASH_SOURCE")"/default-install-shared.sh 3 | source "$(dirname "$BASH_SOURCE")"/defaults-lgpl-shared.sh 4 | -------------------------------------------------------------------------------- /variants/win32-lgpl.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | source "$(dirname "$BASH_SOURCE")"/default-install.sh 3 | source "$(dirname "$BASH_SOURCE")"/defaults-lgpl.sh 4 | -------------------------------------------------------------------------------- /variants/win32-nonfree-shared.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | source "$(dirname "$BASH_SOURCE")"/default-install-nonfree-shared.sh 3 | source "$(dirname "$BASH_SOURCE")"/defaults-nonfree-shared.sh 4 | -------------------------------------------------------------------------------- /variants/win32-nonfree.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | source "$(dirname "$BASH_SOURCE")"/default-install-nonfree.sh 3 | source "$(dirname "$BASH_SOURCE")"/defaults-nonfree.sh 4 | -------------------------------------------------------------------------------- /variants/win64-gpl-shared.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | source "$(dirname "$BASH_SOURCE")"/default-install-shared.sh 3 | source "$(dirname "$BASH_SOURCE")"/defaults-gpl-shared.sh 4 | -------------------------------------------------------------------------------- /variants/win64-gpl.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | source "$(dirname "$BASH_SOURCE")"/default-install.sh 3 | source "$(dirname "$BASH_SOURCE")"/defaults-gpl.sh 4 | -------------------------------------------------------------------------------- /variants/win64-lgpl-shared.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | source "$(dirname "$BASH_SOURCE")"/default-install-shared.sh 3 | source "$(dirname "$BASH_SOURCE")"/defaults-lgpl-shared.sh 4 | -------------------------------------------------------------------------------- /variants/win64-lgpl.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | source "$(dirname "$BASH_SOURCE")"/default-install.sh 3 | source "$(dirname "$BASH_SOURCE")"/defaults-lgpl.sh 4 | -------------------------------------------------------------------------------- /variants/win64-nonfree-shared.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | source "$(dirname "$BASH_SOURCE")"/default-install-nonfree-shared.sh 3 | source "$(dirname "$BASH_SOURCE")"/defaults-nonfree-shared.sh 4 | -------------------------------------------------------------------------------- /variants/win64-nonfree.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | source "$(dirname "$BASH_SOURCE")"/default-install-nonfree.sh 3 | source "$(dirname "$BASH_SOURCE")"/defaults-nonfree.sh 4 | --------------------------------------------------------------------------------