├── .gitignore ├── addins └── debug.sh ├── variants ├── win32-gpl.sh ├── win32-lgpl.sh ├── win64-gpl.sh ├── win64-lgpl.sh ├── defaults-gpl-shared.sh ├── defaults-lgpl-shared.sh ├── defaults-lgpl.sh ├── defaults-gpl.sh ├── win32-nonfree.sh ├── win64-nonfree.sh ├── win32-gpl-shared.sh ├── win32-lgpl-shared.sh ├── win64-gpl-shared.sh ├── win64-lgpl-shared.sh ├── win32-nonfree-shared.sh ├── win64-nonfree-shared.sh ├── defaults-nonfree.sh ├── defaults-nonfree-shared.sh ├── default-install-nonfree.sh ├── default-install.sh ├── default-install-nonfree-shared.sh └── default-install-shared.sh ├── .github ├── dependabot.yml └── workflows │ ├── kaseifu-no-mita.yml │ ├── base.yml │ ├── nightly.yml │ └── CI.yml ├── images ├── base-win32 │ ├── run_stage.sh │ ├── check-wget.sh │ ├── git-mini-clone.sh │ ├── cross.meson │ ├── toolchain.cmake │ └── Dockerfile └── base-win64 │ ├── run_stage.sh │ ├── check-wget.sh │ ├── git-mini-clone.sh │ ├── cross.meson │ ├── toolchain.cmake │ └── Dockerfile ├── makeimage.sh ├── scripts.d ├── 50-schannel.sh ├── 10-mingw-std-threads.sh ├── 50-amf.sh ├── 50-decklink.sh ├── 25-libogg.sh ├── 50-ffnvcodec.sh ├── 25-fftw3.sh ├── 45-libsamplerate.sh ├── 50-rav1e.sh ├── 50-libjxl │ ├── 45-brotli.sh │ ├── 45-lcms2.sh │ └── 50-libjxl.sh ├── 45-libvorbis.sh ├── 50-libass │ ├── 45-libunibreak.sh │ └── 50-libass.sh ├── 20-zlib-ng.sh ├── 50-dvd │ ├── 30-libdvdcss.sh │ ├── 50-libdvdnav.sh │ └── 40-libdvdread.sh ├── 30-fonts │ ├── 25-freetype.sh │ ├── 35-fontconfig.sh │ └── 30-harfbuzz.sh ├── 50-openjpeg.sh ├── 25-xz.sh ├── 50-libwebp.sh ├── 50-libsvtjpegxs.sh ├── 50-libaribcaption.sh ├── 50-snappy.sh ├── 50-gme.sh ├── 50-h266 │ └── 50-vvenc.sh ├── 50-libopus.sh ├── 25-gmp.sh ├── 50-vidstab.sh ├── 50-libfdk-aac.sh ├── 50-liblc3.sh ├── 50-protocol │ ├── 50-srt.sh │ ├── 50-libssh.sh │ └── 25-openssl.sh ├── 50-svtav1.sh ├── 50-kvazaar.sh ├── 50-avisynth.sh ├── 50-uavs3d.sh ├── 50-mpeg-5 │ ├── 50-xevd.sh │ ├── 50-xeve.sh │ └── 50-lcevc-dec.sh ├── 25-fribidi.sh ├── 20-libxml2.sh ├── 50-dav1d.sh ├── 50-soxr.sh ├── 50-librist.sh ├── 50-libvpl.sh ├── 50-libva.sh ├── 50-rubberband.sh ├── 50-openh264.sh ├── 50-zvbi.sh ├── 50-zimg.sh ├── 50-chromaprint.sh ├── 50-libmp3lame.sh ├── 50-opencore-amr.sh ├── 50-libzmq.sh ├── 50-twolame.sh ├── 50-openal.sh ├── 50-davs2.sh ├── 50-x264.sh ├── 50-sdl.sh ├── 45-vmaf.sh ├── 50-libvpx.sh ├── 50-xavs2.sh ├── 50-openapv.sh ├── 50-libtheora.sh ├── 50-libbluray.sh ├── 15-libiconv.sh ├── 50-vulkan │ ├── 45-vulkan.sh │ ├── 50-shaderc.sh │ ├── 60-libplacebo.sh │ ├── 55-spirv-cross.sh │ └── 60-whisper.sh ├── 45-opencl.sh ├── 50-openmpt.sh ├── 10-mingw.sh └── 50-x265.sh ├── util ├── prunetags.sh ├── vars.sh └── update_scripts.sh ├── LICENSE ├── generate.sh └── README.md /.gitignore: -------------------------------------------------------------------------------- 1 | /Dockerfile 2 | /ffbuild/ 3 | /artifacts/ 4 | -------------------------------------------------------------------------------- /addins/debug.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | FF_CONFIGURE="${FF_CONFIGURE/--disable-debug/} --optflags='-Og' --disable-stripping" 3 | -------------------------------------------------------------------------------- /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.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | source "$(dirname "$BASH_SOURCE")"/default-install.sh 3 | source "$(dirname "$BASH_SOURCE")"/defaults-lgpl.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.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | source "$(dirname "$BASH_SOURCE")"/default-install.sh 3 | source "$(dirname "$BASH_SOURCE")"/defaults-lgpl.sh 4 | -------------------------------------------------------------------------------- /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-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 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | updates: 3 | 4 | - package-ecosystem: "github-actions" 5 | directory: "/" 6 | schedule: 7 | interval: "daily" 8 | -------------------------------------------------------------------------------- /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/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-nonfree.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | source "$(dirname "$BASH_SOURCE")"/default-install-nonfree.sh 3 | source "$(dirname "$BASH_SOURCE")"/defaults-nonfree.sh 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-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-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-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 | -------------------------------------------------------------------------------- /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-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 | -------------------------------------------------------------------------------- /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/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/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/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 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /images/base-win32/check-wget.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -xe 3 | FNAME="$1" 4 | URL="$2" 5 | SHA512="$3" 6 | SHAFILE="${FNAME}.sha512" 7 | wget -O "${FNAME}" "${URL}" 8 | trap "rm -f ${SHAFILE}" EXIT 9 | echo "${SHA512} ${FNAME}" > "${SHAFILE}" 10 | sha512sum -c "${SHAFILE}" 11 | -------------------------------------------------------------------------------- /images/base-win64/check-wget.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -xe 3 | FNAME="$1" 4 | URL="$2" 5 | SHA512="$3" 6 | SHAFILE="${FNAME}.sha512" 7 | wget -O "${FNAME}" "${URL}" 8 | trap "rm -f ${SHAFILE}" EXIT 9 | echo "${SHA512} ${FNAME}" > "${SHAFILE}" 10 | sha512sum -c "${SHAFILE}" 11 | -------------------------------------------------------------------------------- /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 | mkdir -p "$OUT/presets" 11 | cp "$IN"/share/ffmpeg/*.ffpreset "$OUT"/presets 12 | } 13 | -------------------------------------------------------------------------------- /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-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 | -------------------------------------------------------------------------------- /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 | mkdir -p "$OUT/presets" 14 | cp "$IN"/share/ffmpeg/*.ffpreset "$OUT"/presets 15 | } 16 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /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-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 | -------------------------------------------------------------------------------- /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/50-amf.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | AMF_REPO="https://github.com/GPUOpen-LibrariesAndSDKs/AMF.git" 4 | AMF_COMMIT="afed28d37aca1938da2eedc50599bb3535a987ec" 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 | -------------------------------------------------------------------------------- /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/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 | -------------------------------------------------------------------------------- /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/25-libogg.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | OGG_REPO="https://github.com/xiph/ogg.git" 4 | OGG_COMMIT="0288fadac3ac62d453409dfc83e9c4ab617d2472" 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/50-ffnvcodec.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | FFNVCODEC_REPO="https://github.com/FFmpeg/nv-codec-headers.git" 4 | FFNVCODEC_COMMIT="876af32a202d0de83bd1d36fe74ee0f7fcf86b0d" 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/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 | mkdir build && cd build 14 | 15 | cmake \ 16 | -DCMAKE_TOOLCHAIN_FILE="$FFBUILD_CMAKE_TOOLCHAIN" \ 17 | -DCMAKE_BUILD_TYPE=Release \ 18 | -DCMAKE_INSTALL_PREFIX="$FFBUILD_PREFIX" \ 19 | -DCMAKE_POLICY_VERSION_MINIMUM=3.5 \ 20 | -DBUILD_SHARED_LIBS=OFF \ 21 | -DBUILD_TESTS=OFF \ 22 | -DDISABLE_FORTRAN=ON \ 23 | -GNinja \ 24 | .. 25 | ninja -j"$(nproc)" 26 | ninja install 27 | } 28 | -------------------------------------------------------------------------------- /scripts.d/45-libsamplerate.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | LIBSR_REPO="https://github.com/libsndfile/libsamplerate.git" 4 | LIBSR_COMMIT="2ccde9568cca73c7b32c97fefca2e418c16ae5e3" 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/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 | -------------------------------------------------------------------------------- /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 | mkdir -p "$OUT/presets" 26 | cp "$IN"/share/ffmpeg/*.ffpreset "$OUT"/presets 27 | } 28 | -------------------------------------------------------------------------------- /scripts.d/50-libjxl/45-brotli.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | BROTLI_REPO="https://github.com/google/brotli.git" 4 | BROTLI_COMMIT="5fa73e23bee34f84148719576a7a434f0fc43dc8" 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/45-libvorbis.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | VORBIS_REPO="https://github.com/xiph/vorbis.git" 4 | VORBIS_COMMIT="2d79800b6751dddd4b8b4ad50832faa5ae2a00d9" 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 | -DBUILD_{SHARED_LIBS,TESTING}=OFF \ 21 | -GNinja \ 22 | .. 23 | ninja -j"$(nproc)" 24 | ninja install 25 | } 26 | 27 | ffbuild_configure() { 28 | echo --enable-libvorbis 29 | } 30 | 31 | ffbuild_unconfigure() { 32 | echo --disable-libvorbis 33 | } 34 | -------------------------------------------------------------------------------- /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/20-zlib-ng.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | ZLIB_REPO="https://github.com/zlib-ng/zlib-ng.git" 4 | ZLIB_COMMIT="47a17e9362699d21f989c056f0ee26c23e28bf9a" 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,TESTING}=OFF \ 21 | -DZLIB_COMPAT=ON \ 22 | -DWITH_GTEST=OFF \ 23 | -GNinja \ 24 | .. 25 | ninja -j"$(nproc)" 26 | ninja install 27 | } 28 | 29 | ffbuild_configure() { 30 | echo --enable-zlib 31 | } 32 | 33 | ffbuild_unconfigure() { 34 | echo --disable-zlib 35 | } 36 | -------------------------------------------------------------------------------- /scripts.d/50-dvd/30-libdvdcss.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | DVDCSS_REPO="https://github.com/nanake/libdvdcss.git" 4 | DVDCSS_COMMIT="7558acb06d8ba6346a3bb6fd668929ff04573946" 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 | mkdir build && cd build 15 | 16 | local myconf=( 17 | --prefix="$FFBUILD_PREFIX" 18 | --buildtype=release 19 | -Ddefault_library=static 20 | -Denable_{docs,examples}"=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 | -------------------------------------------------------------------------------- /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 | mkdir -p "$OUT/presets" 29 | cp "$IN"/share/ffmpeg/*.ffpreset "$OUT"/presets 30 | } 31 | -------------------------------------------------------------------------------- /scripts.d/50-libjxl/45-lcms2.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | LCMS_REPO="https://github.com/mm2/Little-CMS.git" 4 | LCMS_COMMIT="23994d72c6323ca466cff85765b08011a2ec0bac" 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/30-fonts/25-freetype.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | FREETYPE_REPO="https://github.com/freetype/freetype.git" 4 | FREETYPE_COMMIT="30e45abe939d7c2cbdf268f277c293400096868c" 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/50-openjpeg.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | OPENJPEG_REPO="https://github.com/uclouvain/openjpeg.git" 4 | OPENJPEG_COMMIT="8ac526236416b9c28f73d4684cf9e8a66f1d134e" 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/25-xz.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | XZ_REPO="https://github.com/tukaani-project/xz.git" 4 | XZ_COMMIT="d9b318f5b8a3524e90ac17471e79db7de012caf5" 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/50-libwebp.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | WEBP_REPO="https://github.com/webmproject/libwebp.git" 4 | WEBP_COMMIT="d67d73bf5a6421734cc08da0f568d37a1fe0d103" 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-libsvtjpegxs.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | SVT_JPEG_XS_REPO="https://github.com/OpenVisualCloud/SVT-JPEG-XS.git" 4 | SVT_JPEG_XS_COMMIT="ebd0865d77d72276b97ff7e369e3903decfcc7c4" 5 | 6 | ffbuild_enabled() { 7 | return 0 8 | } 9 | 10 | ffbuild_dockerbuild() { 11 | git-mini-clone "$SVT_JPEG_XS_REPO" "$SVT_JPEG_XS_COMMIT" svtjpegxs 12 | cd svtjpegxs 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_{APPS,SHARED_LIBS}=OFF \ 21 | -DCOVERAGE=OFF \ 22 | -GNinja \ 23 | .. 24 | ninja -j"$(nproc)" 25 | ninja install 26 | } 27 | 28 | ffbuild_configure() { 29 | echo --enable-libsvtjpegxs 30 | } 31 | 32 | ffbuild_unconfigure() { 33 | echo --disable-libsvtjpegxs 34 | } 35 | -------------------------------------------------------------------------------- /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-snappy.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | SNAPPY_REPO="https://github.com/google/snappy.git" 4 | SNAPPY_COMMIT="25e52c58fbf83ee40f4c9284f757f777f691f76f" 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-gme.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | GME_REPO="https://github.com/libgme/game-music-emu.git" 4 | GME_COMMIT="184dac64cd556f435c309bb83ed4a31fe14e1cc5" 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="6627583b7d2b607a7fb04b97ab29d66bdcb113cf" 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-libopus.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | OPUS_REPO="https://github.com/xiph/opus.git" 4 | OPUS_COMMIT="36f1d8c7f2a023248d9526d4b3aabcc78d0aca78" 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/25-gmp.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | GMP_REPO="https://github.com/BtbN/gmplib.git" 4 | GMP_COMMIT="9994908f090c694f8a152d660dc6852e0c48557a" 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/50-vidstab.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | VIDSTAB_REPO="https://github.com/georgmartius/vid.stab.git" 4 | VIDSTAB_COMMIT="4bd81e3cdd778e2e0edc591f14bba158ec40cfa1" 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-libfdk-aac.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | LIBFDK_AAC_REPO="https://github.com/mstorsjo/fdk-aac.git" 4 | LIBFDK_AAC_COMMIT="d8e6b1a3aa606c450241632b64b703f21ea31ce3" 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-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-protocol/50-srt.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | SRT_REPO="https://github.com/Haivision/srt.git" 4 | SRT_COMMIT="f0368c6998fbf6f789f8e484bdc6ea6f4a48a750" 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-svtav1.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | SVTAV1_REPO="https://gitlab.com/AOMediaCodec/SVT-AV1.git" 4 | SVTAV1_COMMIT="0d628d3ca4561f0fc607dd5e839cd8eed7ab53bb" 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 | -------------------------------------------------------------------------------- /util/prunetags.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -e 3 | git fetch --tags 4 | TAGS=( $(git tag -l "build-*" | sort -r) ) 5 | 6 | KEEP_LATEST=20 7 | KEEP_MONTHLY=12 8 | 9 | LATEST_TAGS=() 10 | MONTHLY_TAGS=() 11 | 12 | CUR_MONTH="-1" 13 | 14 | for TAG in ${TAGS[@]}; do 15 | if [[ ${#LATEST_TAGS[@]} -lt ${KEEP_LATEST} ]]; then 16 | LATEST_TAGS+=( "$TAG" ) 17 | fi 18 | 19 | if [[ ${#MONTHLY_TAGS[@]} -lt ${KEEP_MONTHLY} ]]; then 20 | TAG_MONTH="$(echo $TAG | cut -d- -f3)" 21 | 22 | if [[ ${TAG_MONTH} != ${CUR_MONTH} ]]; then 23 | CUR_MONTH="${TAG_MONTH}" 24 | MONTHLY_TAGS+=( "$TAG" ) 25 | fi 26 | fi 27 | done 28 | 29 | for TAG in ${LATEST_TAGS[@]} ${MONTHLY_TAGS[@]}; do 30 | TAGS=( "${TAGS[@]/$TAG}" ) 31 | done 32 | 33 | for TAG in ${TAGS[@]}; do 34 | echo "Deleting ${TAG}" 35 | gh release delete "${TAG}" 36 | git tag -d "${TAG}" 37 | done 38 | 39 | git push --tags --prune 40 | -------------------------------------------------------------------------------- /scripts.d/50-kvazaar.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | KVAZAAR_REPO="https://github.com/ultravideo/kvazaar.git" 4 | KVAZAAR_COMMIT="6040962bed5cc68c5ad01234c38c08b8b2822068" 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-avisynth.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | AVISYNTH_REPO="https://github.com/AviSynth/AviSynthPlus.git" 4 | AVISYNTH_COMMIT="16f9f746f2577d35b6393716a4604b257ee8e39e" 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-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-mpeg-5/50-xevd.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | XEVD_REPO="https://github.com/mpeg5/xevd.git" 4 | XEVD_COMMIT="4087f635624cf4ee6ebe3f9ea165ff939b32117f" 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="bc45faa2e8d22bf33b0d15c025662f2a8de61fbc" 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/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/50-libass/50-libass.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | ASS_REPO="https://github.com/libass/libass.git" 4 | ASS_COMMIT="cae9780616c5a029825e225992e4773cb12bbd51" 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/20-libxml2.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | LIBXML2_REPO="https://github.com/GNOME/libxml2.git" 4 | LIBXML2_COMMIT="a30a4e6efc924da0a990d07c8601b64c54c7aefe" 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,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/50-dvd/50-libdvdnav.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | DVDNAV_REPO="https://github.com/nanake/libdvdnav.git" 4 | DVDNAV_COMMIT="38238caf599dc9405eddf1531c858c725015f776" 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 | mkdir build && cd build 15 | 16 | local myconf=( 17 | --prefix="$FFBUILD_PREFIX" 18 | --buildtype=release 19 | -Ddefault_library=static 20 | -Denable_{docs,examples}"=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-libdvdnav 39 | } 40 | 41 | ffbuild_unconfigure() { 42 | echo --disable-libdvdnav 43 | } 44 | -------------------------------------------------------------------------------- /scripts.d/50-dav1d.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | DAV1D_REPO="https://github.com/videolan/dav1d.git" 4 | DAV1D_COMMIT="43f3b8d33bae5179a134d1cd7c394063b1cebfcb" 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-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-dvd/40-libdvdread.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | DVDREAD_REPO="https://github.com/nanake/libdvdread.git" 4 | DVDREAD_COMMIT="482f0ab6de0e3771ed3f573e7107585ba105a6ae" 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 | -Denable_docs=false 21 | -Dlibdvdcss=enabled 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-libdvdread 40 | } 41 | 42 | ffbuild_unconfigure() { 43 | echo --disable-libdvdread 44 | } 45 | -------------------------------------------------------------------------------- /scripts.d/50-librist.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | LIBRIST_REPO="https://code.videolan.org/rist/librist.git" 4 | LIBRIST_COMMIT="1a5013b59ce098465e835a0510cd395872bb1c24" 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-mpeg-5/50-lcevc-dec.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | LCEVCDEC_REPO="https://github.com/v-novaltd/LCEVCdec.git" 4 | LCEVCDEC_COMMIT="4.0.4" 5 | LCEVCDEC_TAGFILTER="4.0.*" 6 | 7 | ffbuild_enabled() { 8 | [[ $VARIANT == *nonfree* ]] || return -1 9 | return 0 10 | } 11 | 12 | ffbuild_dockerbuild() { 13 | git clone --filter=tree:0 $LCEVCDEC_REPO lcevc && cd lcevc 14 | git checkout $LCEVCDEC_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 | -DVN_SDK_{METRICS,PIPELINE_LEGACY,SAMPLE_SOURCE,TRACING}=OFF \ 24 | -DPC_LIBS_PRIVATE="Libs.private: -lstdc++" \ 25 | -GNinja \ 26 | .. 27 | 28 | ninja -j"$(nproc)" 29 | ninja install 30 | } 31 | 32 | ffbuild_configure() { 33 | echo --enable-liblcevc-dec 34 | } 35 | 36 | ffbuild_unconfigure() { 37 | echo --disable-liblcevc-dec 38 | } 39 | -------------------------------------------------------------------------------- /scripts.d/50-libvpl.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | LIBVPL_REPO="https://github.com/intel/libvpl.git" 4 | LIBVPL_COMMIT="3591aa94dfbdf4566cd19f3e976ae5b769ab4fa2" 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 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /scripts.d/50-libva.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | LIBVA_REPO="https://github.com/intel/libva.git" 4 | LIBVA_COMMIT="271bd76ee6ada51e49236622049254e4a0550ab3" 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-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-openh264.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | OPENH264_REPO="https://github.com/cisco/openh264.git" 4 | OPENH264_COMMIT="cf568c83f71a18778f9a16e344effaf40c11b752" 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-zvbi.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | ZVBI_REPO="https://github.com/zapping-vbi/zvbi.git" 4 | ZVBI_COMMIT="41477c97c8edf7a01f1594b2a95b94f0117eed21" 5 | 6 | ffbuild_enabled() { 7 | return 0 8 | } 9 | 10 | ffbuild_dockerbuild() { 11 | git-mini-clone "$ZVBI_REPO" "$ZVBI_COMMIT" zvbi 12 | cd zvbi 13 | 14 | autoreconf -i 15 | 16 | local myconf=( 17 | --prefix="$FFBUILD_PREFIX" 18 | --disable-{shared,bktr,dependency-tracking,dvb,examples,nls,proxy,tests} 19 | --enable-static 20 | --with-pic 21 | --without-{doxygen,x} 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 -C src -j"$(nproc)" 35 | make -C src install 36 | make SUBDIRS=. install 37 | } 38 | 39 | ffbuild_configure() { 40 | echo --enable-libzvbi 41 | } 42 | 43 | ffbuild_unconfigure() { 44 | echo --disable-libzvbi 45 | } 46 | -------------------------------------------------------------------------------- /scripts.d/50-zimg.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | ZIMG_REPO="https://github.com/sekrit-twc/zimg.git" 4 | ZIMG_COMMIT="df9c1472b9541d0e79c8d02dae37fdf12f189ec2" 5 | 6 | ffbuild_enabled() { 7 | return 0 8 | } 9 | 10 | ffbuild_dockerbuild() { 11 | git-mini-clone "$ZIMG_REPO" "$ZIMG_COMMIT" zimg 12 | cd zimg 13 | 14 | git submodule update --init --recursive --depth 1 15 | 16 | ./autogen.sh 17 | 18 | local myconf=( 19 | --prefix="$FFBUILD_PREFIX" 20 | --disable-{shared,dependency-tracking} 21 | --enable-static 22 | ) 23 | 24 | if [[ $TARGET == win* ]]; then 25 | myconf+=( 26 | --host="$FFBUILD_TOOLCHAIN" 27 | PTHREAD_CFLAGS="-pthread" 28 | PTHREAD_LIBS="-lpthread" 29 | ) 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-libzimg 42 | } 43 | 44 | ffbuild_unconfigure() { 45 | echo --disable-libzimg 46 | } 47 | -------------------------------------------------------------------------------- /scripts.d/30-fonts/35-fontconfig.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | FC_REPO="https://gitlab.freedesktop.org/fontconfig/fontconfig.git" 4 | FC_COMMIT="d62c2ab268d1679335daa8fb0ea6970f35224a76" 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 | mkdir build && cd build 15 | 16 | local myconf=( 17 | --prefix="$FFBUILD_PREFIX" 18 | --buildtype=release 19 | -Ddefault_library=static 20 | -D{cache-build,doc,tests,tools}"=disabled" 21 | -Diconv=enabled 22 | -Dxml-backend=libxml2 23 | ) 24 | 25 | if [[ $TARGET == win* ]]; then 26 | myconf+=( 27 | --cross-file=/cross.meson 28 | ) 29 | else 30 | echo "Unknown target" 31 | return -1 32 | fi 33 | 34 | meson setup "${myconf[@]}" .. 35 | ninja -j"$(nproc)" 36 | ninja install 37 | } 38 | 39 | ffbuild_configure() { 40 | echo --enable-libfontconfig 41 | } 42 | 43 | ffbuild_unconfigure() { 44 | echo --disable-libfontconfig 45 | } 46 | -------------------------------------------------------------------------------- /scripts.d/50-chromaprint.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | CHROMAPRINT_REPO="https://github.com/acoustid/chromaprint.git" 4 | CHROMAPRINT_COMMIT="9b6a0c61ecbeab75271bab4aca651d8dff41c5d6" 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 | -DBUILD_{SHARED_LIBS,TESTS,TOOLS}=OFF \ 21 | -DFFT_LIB=fftw3 \ 22 | -GNinja \ 23 | .. 24 | ninja -j"$(nproc)" 25 | ninja install 26 | 27 | { 28 | echo "Libs.private: -lfftw3 -lstdc++" 29 | echo "Cflags.private: -DCHROMAPRINT_NODLL" 30 | } >> "$FFBUILD_PREFIX"/lib/pkgconfig/libchromaprint.pc 31 | } 32 | 33 | ffbuild_configure() { 34 | echo --enable-chromaprint 35 | } 36 | 37 | ffbuild_unconfigure() { 38 | echo --disable-chromaprint 39 | } 40 | -------------------------------------------------------------------------------- /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-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-libzmq.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | ZMQ_REPO="https://github.com/zeromq/libzmq.git" 4 | ZMQ_COMMIT="7a7bfa10e6b0e99210ed9397369b59f9e69cef8e" 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 | -DBUILD_{SHARED_LIBS,SHARED,TESTS}=OFF \ 21 | -DENABLE_DRAFTS=OFF \ 22 | -DENABLE_INTRINSICS=ON \ 23 | -DPOLLER=epoll \ 24 | -DZMQ_BUILD_TESTS=OFF \ 25 | -DZMQ_HAVE_IPC=OFF \ 26 | -DZMQ_WIN32_WINNT=0x0A00 \ 27 | -GNinja \ 28 | .. 29 | ninja -j"$(nproc)" 30 | ninja install 31 | 32 | echo "Cflags.private: -DZMQ_STATIC" >> "$FFBUILD_PREFIX"/lib/pkgconfig/libzmq.pc 33 | } 34 | 35 | ffbuild_configure() { 36 | echo --enable-libzmq 37 | } 38 | 39 | ffbuild_unconfigure() { 40 | echo --disable-libzmq 41 | } 42 | -------------------------------------------------------------------------------- /scripts.d/30-fonts/30-harfbuzz.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | HARFBUZZ_REPO="https://github.com/harfbuzz/harfbuzz.git" 4 | HARFBUZZ_COMMIT="cf31e7ac4e58738f8ddaae716b50535bca0174ec" 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/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-openal.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | OPENAL_REPO="https://github.com/kcat/openal-soft.git" 4 | OPENAL_COMMIT="be7b4e57aeb2628798107833c734986e48f85be1" 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}=OFF \ 22 | -DALSOFT_INSTALL_{AMBDEC_PRESETS,CONFIG,EXAMPLES,HRTF_DATA,UTILS}=OFF \ 23 | -DALSOFT_BACKEND_{JACK,OPENSL,PIPEWIRE,PORTAUDIO,PULSEAUDIO}=OFF \ 24 | -GNinja \ 25 | .. 26 | ninja -j"$(nproc)" 27 | ninja install 28 | 29 | sed -i 's/Libs.private.*/& -lstdc++ -lole32 -luuid/' "$FFBUILD_PREFIX"/lib/pkgconfig/openal.pc 30 | } 31 | 32 | ffbuild_configure() { 33 | echo --enable-openal 34 | } 35 | 36 | ffbuild_unconfigure() { 37 | echo --disable-openal 38 | } 39 | -------------------------------------------------------------------------------- /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-protocol/50-libssh.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | LIBSSH_REPO="https://gitlab.com/libssh/libssh-mirror.git" 4 | LIBSSH_COMMIT="0ef79018b3050937ba20dfc39934181e9e40014f" 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-x264.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | X264_REPO="https://code.videolan.org/videolan/x264.git" 4 | X264_COMMIT="0480cb05fa188d37ae87e8f4fd8f1aea3711f7ee" 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-sdl.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | SDL_SRC="https://github.com/libsdl-org/SDL/releases/download/release-2.32.10/SDL2-devel-2.32.10-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/45-vmaf.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | VMAF_REPO="https://github.com/Netflix/vmaf.git" 4 | VMAF_COMMIT="6b75f37728b2eb70c11508ece93afaacc6572b45" 5 | 6 | ffbuild_enabled() { 7 | return 0 8 | } 9 | 10 | ffbuild_dockerbuild() { 11 | git-mini-clone "$VMAF_REPO" "$VMAF_COMMIT" vmaf 12 | cd vmaf 13 | 14 | sed -i "/subdir('tools')/d" libvmaf/meson.build 15 | 16 | mkdir build && cd build 17 | 18 | local myconf=( 19 | --prefix="$FFBUILD_PREFIX" 20 | --buildtype=release 21 | -Ddefault_library=static 22 | -D{built_in_models,enable_avx512}"=true" 23 | -Denable_{docs,tests}"=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 | meson setup "${myconf[@]}" ../libvmaf 36 | ninja -j"$(nproc)" 37 | ninja install 38 | 39 | echo "Libs.private: -lstdc++" >> "$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-libvpx.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | LIBVPX_REPO="https://github.com/webmproject/libvpx.git" 4 | LIBVPX_COMMIT="d98e70839f01aeeee875d343475574386869d47a" 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-xavs2.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | XAVS2_REPO="https://github.com/nanake/xavs2.git" 4 | XAVS2_COMMIT="0e5b4da6750b236ea2df60d72ee21d0e7fa85e32" 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 "$XAVS2_REPO" xavs2 14 | cd xavs2 15 | git checkout "$XAVS2_COMMIT" 16 | cd build/linux 17 | 18 | local myconf=( 19 | --prefix="$FFBUILD_PREFIX" 20 | --disable-{avs,cli,ffms,gpac,lavf,lsmash,swscale} 21 | --enable-{static,pic} 22 | --extra-asflags="-w-macro-params-legacy" 23 | ) 24 | 25 | if [[ $TARGET == win64 ]]; then 26 | myconf+=( 27 | --host="$FFBUILD_TOOLCHAIN" 28 | --cross-prefix="$FFBUILD_CROSS_PREFIX" 29 | ) 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-libxavs2 42 | } 43 | 44 | ffbuild_unconfigure() { 45 | echo --disable-libxavs2 46 | } 47 | -------------------------------------------------------------------------------- /scripts.d/50-openapv.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | OPENAPV_REPO="https://github.com/AcademySoftwareFoundation/openapv.git" 4 | OPENAPV_COMMIT="3451c5a78759ea5bb6593da08f2dfd075348b83e" 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 | ffbuild_configure() { 39 | echo --enable-liboapv 40 | } 41 | 42 | ffbuild_unconfigure() { 43 | echo --disable-liboapv 44 | } 45 | -------------------------------------------------------------------------------- /scripts.d/50-libtheora.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | THEORA_REPO="https://github.com/xiph/theora.git" 4 | THEORA_COMMIT="23161c4a63fd9f9d09b9e972f95def2d56c777af" 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 | # https://gitlab.xiph.org/xiph/theora/-/issues/2343 33 | # https://code.ffmpeg.org/FFmpeg/FFmpeg/issues/20185 34 | if [[ $TARGET == win64 ]]; then 35 | myconf+=( 36 | --disable-asm 37 | ) 38 | fi 39 | 40 | ./configure "${myconf[@]}" 41 | make -j"$(nproc)" 42 | make install 43 | } 44 | 45 | ffbuild_configure() { 46 | echo --enable-libtheora 47 | } 48 | 49 | ffbuild_unconfigure() { 50 | echo --disable-libtheora 51 | } 52 | -------------------------------------------------------------------------------- /scripts.d/50-libbluray.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | LIBBLURAY_REPO="https://code.videolan.org/videolan/libbluray.git" 4 | LIBBLURAY_COMMIT="6155d6512d21ff9b19ee8ad9cb6a53bfccdd85a5" 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/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="b66b2f548166b667a7c48777ded7506a43971b21" 6 | 7 | GNULIB_REPO="https://github.com/coreutils/gnulib.git" 8 | GNULIB_COMMIT="e208a7a0c4df9c62e9f843812f182ae516918771" 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/50-vulkan/45-vulkan.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | VULKAN_REPO="https://github.com/BtbN/Vulkan-Shim-Loader.git" 4 | VULKAN_COMMIT="9657ca8e395ef16c79b57c8bd3f4c1aebb319137" 5 | 6 | ffbuild_enabled() { 7 | return 0 8 | } 9 | 10 | ffbuild_dockerbuild() { 11 | git-mini-clone "$VULKAN_REPO" "$VULKAN_COMMIT" vulkan 12 | cd vulkan 13 | 14 | # Update Vulkan-Headers to the latest commit 15 | git submodule update --init --remote 16 | 17 | cd Vulkan-Headers 18 | mkdir build && cd build 19 | 20 | cmake \ 21 | -DCMAKE_TOOLCHAIN_FILE="$FFBUILD_CMAKE_TOOLCHAIN" \ 22 | -DCMAKE_BUILD_TYPE=Release \ 23 | -DCMAKE_INSTALL_PREFIX="$FFBUILD_PREFIX" \ 24 | -DVULKAN_HEADERS_ENABLE_INSTALL=YES \ 25 | -DVULKAN_HEADERS_ENABLE_{MODULE,TESTS}=NO \ 26 | -GNinja \ 27 | .. 28 | ninja install 29 | 30 | cd ../.. 31 | mkdir build && cd build 32 | 33 | cmake \ 34 | -DCMAKE_TOOLCHAIN_FILE="$FFBUILD_CMAKE_TOOLCHAIN" \ 35 | -DCMAKE_BUILD_TYPE=Release \ 36 | -DCMAKE_INSTALL_PREFIX="$FFBUILD_PREFIX" \ 37 | -DVULKAN_SHIM_IMPERSONATE=ON \ 38 | -GNinja \ 39 | .. 40 | ninja "-j$(nproc)" 41 | ninja install 42 | } 43 | 44 | ffbuild_configure() { 45 | echo --enable-vulkan 46 | } 47 | 48 | ffbuild_unconfigure() { 49 | echo --disable-vulkan 50 | } 51 | -------------------------------------------------------------------------------- /.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@v6 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: dataaxiom/ghcr-cleanup-action@v1 42 | with: 43 | delete-untagged: true 44 | packages: ${{ matrix.image_name }} 45 | token: ${{ secrets.dodosolsollalasol }} 46 | -------------------------------------------------------------------------------- /scripts.d/50-vulkan/50-shaderc.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | SHADERC_REPO="https://github.com/google/shaderc.git" 4 | SHADERC_COMMIT="e0a5092b4b05dbcc448b0883f3575163634f8e86" 5 | 6 | ffbuild_enabled() { 7 | return 0 8 | } 9 | 10 | ffbuild_dockerbuild() { 11 | git-mini-clone "$SHADERC_REPO" "$SHADERC_COMMIT" shaderc 12 | cd shaderc 13 | 14 | ./utils/git-sync-deps 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 | -DENABLE_GLSLANG_BINARIES=OFF \ 24 | -DSHADERC_ENABLE_WERROR_COMPILE=OFF \ 25 | -DSHADERC_SKIP_{COPYRIGHT_CHECK,EXAMPLES,TESTS}=ON \ 26 | -DSPIRV_{TOOLS_BUILD_STATIC,SKIP_EXECUTABLES}=ON \ 27 | -DSPIRV_WERROR=OFF \ 28 | -GNinja \ 29 | .. 30 | ninja -j"$(nproc)" 31 | ninja install 32 | 33 | # for some reason, this does not get installed... 34 | # https://github.com/google/shaderc/issues/1228 35 | cp libshaderc_util/libshaderc_util.a "$FFBUILD_PREFIX"/lib 36 | 37 | echo "Libs: -lstdc++" | tee -a "$FFBUILD_PREFIX"/lib/pkgconfig/shaderc_{combined,static}.pc 38 | 39 | cp "$FFBUILD_PREFIX"/lib/pkgconfig/{shaderc_combined,shaderc}.pc 40 | 41 | rm "$FFBUILD_PREFIX"/lib/*.dll.a 42 | } 43 | 44 | ffbuild_configure() { 45 | echo --enable-libshaderc 46 | } 47 | 48 | ffbuild_unconfigure() { 49 | echo --disable-libshaderc 50 | } 51 | -------------------------------------------------------------------------------- /scripts.d/50-vulkan/60-libplacebo.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | PLACEBO_REPO="https://github.com/haasn/libplacebo.git" 4 | PLACEBO_COMMIT="45f76a46aaf2958febff2a482a059151b480bf99" 5 | 6 | ffbuild_enabled() { 7 | return 0 8 | } 9 | 10 | ffbuild_dockerbuild() { 11 | git-mini-clone "$PLACEBO_REPO" "$PLACEBO_COMMIT" placebo 12 | cd placebo 13 | git submodule update --init --recursive --depth 1 14 | 15 | # Don't define PL_EXPORT for static build 16 | # https://code.videolan.org/videolan/libplacebo/-/merge_requests/682 17 | sed -i "/c_args:/s/'-DPL_EXPORT'/'-DPL_STATIC'/" src/meson.build 18 | 19 | mkdir build && cd build 20 | 21 | local myconf=( 22 | --prefix="$FFBUILD_PREFIX" 23 | --buildtype=release 24 | -Ddefault_library=static 25 | -D{d3d11,vulkan,shaderc}"=enabled" 26 | -D{bench,demos,fuzz,tests}"=false" 27 | -D{glslang,vk-proc-addr}"=disabled" 28 | -Dvulkan-registry="$FFBUILD_PREFIX"/share/vulkan/registry/vk.xml 29 | ) 30 | 31 | if [[ $TARGET == win* ]]; then 32 | myconf+=( 33 | --cross-file=/cross.meson 34 | ) 35 | else 36 | echo "Unknown target" 37 | return -1 38 | fi 39 | 40 | meson setup "${myconf[@]}" .. 41 | ninja -j"$(nproc)" 42 | ninja install 43 | 44 | echo "Libs.private: -lstdc++" >> "$FFBUILD_PREFIX"/lib/pkgconfig/libplacebo.pc 45 | } 46 | 47 | ffbuild_configure() { 48 | echo --enable-libplacebo 49 | } 50 | 51 | ffbuild_unconfigure() { 52 | echo --disable-libplacebo 53 | } 54 | -------------------------------------------------------------------------------- /.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@v6 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 | -------------------------------------------------------------------------------- /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.6.0" 5 | OPENSSL_TAGFILTER="openssl-3.6.*" 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-libjxl/50-libjxl.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | JXL_REPO="https://github.com/libjxl/libjxl.git" 4 | JXL_COMMIT="53042ec537712e0df08709524f4df097d42174bc" 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_HWY_AVX3{,_SPR,_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/45-opencl.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | HEADERS_REPO="https://github.com/KhronosGroup/OpenCL-Headers.git" 4 | HEADERS_COMMIT="6137cfbbc7938cd43069d45c622022572fb87113" 5 | 6 | LOADER_REPO="https://github.com/KhronosGroup/OpenCL-ICD-Loader.git" 7 | LOADER_COMMIT="634ef470035f3fadf46ee48fa91886f155f788f5" 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/spirv-cross-c-shared.pc <> "$_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 | -------------------------------------------------------------------------------- /scripts.d/50-vulkan/60-whisper.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | WHISPER_REPO="https://github.com/ggml-org/whisper.cpp.git" 4 | WHISPER_COMMIT="9f5ed26e43c680bece09df7bdc8c1b7835f0e537" 5 | 6 | ffbuild_enabled() { 7 | [[ $TARGET == win32 ]] && return -1 8 | return 0 9 | } 10 | 11 | ffbuild_dockerbuild() { 12 | git clone --filter=tree:0 --branch=master --single-branch "$WHISPER_REPO" whisper 13 | cd whisper 14 | 15 | git checkout "$WHISPER_COMMIT" 16 | 17 | dnf5 in glslc 18 | 19 | mkdir build && cd build 20 | 21 | # vulkan-shaders-gen requires the host compiler g++ and its libstdc++.a 22 | # which is not available yet. In fact, vulkan-shaders-gen is a host tool, 23 | # hence, no need for static linking. 24 | unset CXXFLAGS LDFLAGS 25 | 26 | cmake \ 27 | -DCMAKE_TOOLCHAIN_FILE="$FFBUILD_CMAKE_TOOLCHAIN" \ 28 | -DCMAKE_BUILD_TYPE=Release \ 29 | -DCMAKE_INSTALL_PREFIX="$FFBUILD_PREFIX" \ 30 | -DBUILD_SHARED_LIBS=OFF \ 31 | -DGGML_{CCACHE,NATIVE}=OFF \ 32 | -DGGML_{AVX,AVX2,BMI2,F16C,FMA,SSE42,VULKAN}=ON \ 33 | -DWHISPER_BUILD_{EXAMPLES,SERVER,TESTS}=OFF \ 34 | -DWHISPER_USE_SYSTEM_GGML=OFF \ 35 | -GNinja \ 36 | .. 37 | 38 | ninja -j"$(nproc)" 39 | ninja install 40 | 41 | # For some reason, these lack the lib prefix on Windows 42 | shopt -s nullglob 43 | for libfile in "$FFBUILD_PREFIX"/lib/ggml*.a; do 44 | mv "${libfile}" "$(dirname "${libfile}")/lib$(basename "${libfile}")" 45 | done 46 | 47 | # Fix linking order and add required flags 48 | sed -i "s/^\(Libs:\).*$/\1 -L\${libdir} -lwhisper/" "$FFBUILD_PREFIX"/lib/pkgconfig/whisper.pc 49 | { 50 | echo "Cflags.private: -fopenmp" 51 | echo "Libs.private: -lggml -lggml-base -lggml-cpu -lggml-vulkan -lstdc++" 52 | echo "Requires: vulkan" 53 | } >> "$FFBUILD_PREFIX"/lib/pkgconfig/whisper.pc 54 | } 55 | 56 | ffbuild_configure() { 57 | echo --enable-whisper 58 | } 59 | 60 | ffbuild_unconfigure() { 61 | echo --disable-whisper 62 | } 63 | -------------------------------------------------------------------------------- /scripts.d/10-mingw.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | MINGW_REPO="https://github.com/mingw-w64/mingw-w64.git" 4 | MINGW_COMMIT="3a37f9963900120f7b87b9038c6588ee3fdb3ada" 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/50-x265.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | X265_REPO="https://bitbucket.org/multicoreware/x265_git.git" 4 | X265_COMMIT="9e551a994f970a24f0e49bcebe3d43ef08448b01" 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 | -------------------------------------------------------------------------------- /images/base-win32/Dockerfile: -------------------------------------------------------------------------------- 1 | # syntax=docker/dockerfile:latest 2 | FROM ghcr.io/nanake/fedora:rawhide AS base 3 | 4 | RUN <> "$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@v6 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@v6 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@v6 77 | 78 | - name: Download artifacts 79 | uses: actions/download-artifact@v7 80 | with: 81 | path: artifacts 82 | merge-multiple: true 83 | 84 | - name: Create release 85 | id: create_release 86 | env: 87 | GH_TOKEN: ${{ github.token }} 88 | run: | 89 | set -xe 90 | 91 | BUILDID=$(date +'%Y-%m-%d-%H-%M') 92 | STUB=$(find artifacts -iname '*.zst' | head -1 | xargs -I{} basename {}) 93 | REV=$(echo "$STUB" | cut -d'-' -f5) 94 | NTAG=$(echo "$STUB" | cut -d'-' -f3) 95 | 96 | TITLE="Build $BUILDID" 97 | RELNOTE="Built from FFmpeg/FFmpeg@$REV" 98 | TAGNAME="build-$BUILDID-n$NTAG" 99 | 100 | gh release create "$TAGNAME" \ 101 | --title "$TITLE" \ 102 | --notes "$RELNOTE" \ 103 | artifacts/*.zst 104 | -------------------------------------------------------------------------------- /.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@v6 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@v6 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@v6 105 | with: 106 | name: ffmpeg-${{ steps.artifact.outputs.name }} 107 | path: artifacts/ 108 | retention-days: 1 109 | --------------------------------------------------------------------------------