#!/usr/bin/env bash
# Builds the LGPL ffmpeg.exe + ffprobe.exe the Windows app ships (x64), in Docker.
#
#   scripts/lib/ffmpeg/build-windows.sh [out-dir]    (default build/ffmpeg/windows)
set -euo pipefail
HERE="$(cd "$(dirname "$0")" && pwd)"
ROOT="$(cd "$HERE/../../.." && pwd)"
source "$HERE/config.sh"
source "$HERE/fetch.sh"
OUT="${1:-$ROOT/build/ffmpeg/windows}"
command -v docker >/dev/null || { echo "docker not found" >&2; exit 1; }
docker build -q -t rp-ffmpeg-mingw -f "$HERE/Dockerfile.windows" "$HERE" >/dev/null
WORK="$(mktemp -d "${TMPDIR:-/tmp}/rp-ffmpeg-win-XXXXXX")"
trap 'rm -rf "$WORK"' EXIT
fetch_ffmpeg "$WORK"
# The configure flags travel as a file: one per line, no shell quoting games.
printf '%s\n' "${FFMPEG_COMMON[@]}" \
  --enable-mediafoundation --enable-d3d11va --enable-dxva2 --enable-ffnvcodec --enable-nvenc --enable-amf \
  --enable-encoder=h264_mf,hevc_mf,h264_nvenc,hevc_nvenc,h264_amf,hevc_amf \
  > "$WORK/flags"
docker run --rm -v "$WORK:/build" -e PKG_CONFIG_LIBDIR=/usr/x86_64-w64-mingw32/lib/pkgconfig rp-ffmpeg-mingw bash -euc "
  mapfile -t flags < /build/flags
  mkdir -p /build/b && cd /build/b
  /build/ffmpeg-$FFMPEG_VERSION/configure --arch=x86_64 --target-os=mingw32 --cross-prefix=x86_64-w64-mingw32- \
    --pkg-config=pkg-config --extra-ldflags='-static -static-libgcc' \"\${flags[@]}\" > configure.log 2>&1 || { tail -30 configure.log; exit 1; }
  grep -q 'CONFIG_GPL 0' config.h || { echo 'not an LGPL configuration'; exit 1; }
  make -j\$(nproc) ffmpeg.exe ffprobe.exe > make.log 2>&1 || { tail -30 make.log; exit 1; }
  x86_64-w64-mingw32-strip ffmpeg.exe ffprobe.exe
  mkdir -p /build/out && cp ffmpeg.exe ffprobe.exe /build/out/
"
mkdir -p "$OUT"
cp "$WORK/out/ffmpeg.exe" "$WORK/out/ffprobe.exe" "$OUT/"
echo "$FFMPEG_VERSION" > "$OUT/VERSION"
ls -la "$OUT"
