#!/bin/bash
# Build do FFmpeg embutido no Oasys Video Converter — LGPL 2.1+ puro (sprint 42).
#
# Por que compilar o nosso: os builds prontos "LGPL" do BtbN linkam a FFTW
# (GPL) por dentro do chromaprint; o do gyan.dev é GPL (x264). Este build tem
# SÓ o que o app usa e nenhuma peça GPL/nonfree:
#   - H.264: encoder do Windows (Media Foundation, `h264_mf`) e NVENC (cabeçalhos
#     MIT da NVIDIA); sem libx264.
#   - MP3: libmp3lame (LGPL). AAC: encoder nativo. AV1 (entrada): libdav1d (BSD).
#   - zlib (PNG da forma de onda). Captura: gdigrab + ddagrab (D3D11).
#
# Ambiente: MSYS2 (MINGW64) com
#   pacman -S make nasm diffutils mingw-w64-x86_64-gcc mingw-w64-x86_64-pkgconf \
#     mingw-w64-x86_64-zlib mingw-w64-x86_64-lame mingw-w64-x86_64-dav1d \
#     mingw-w64-x86_64-ffnvcodec-headers
# Fonte: https://ffmpeg.org/releases/ffmpeg-8.1.3.tar.xz
#
# Uso (no shell MINGW64): scripts/build-ffmpeg-lgpl.sh <pasta-do-fonte> <saida>
# Depois: xz -9e -k <saida>/ffmpeg.exe e atualize src-tauri/binaries/
# (ffmpeg.exe.xz + ffmpeg.exe.sha256). Registre no AI_CHANGELOG.md.
set -euo pipefail
SRC="${1:?pasta do fonte do FFmpeg}"
OUT="${2:?pasta de saída}"
mkdir -p "$OUT"
cd "$SRC"

./configure \
  --prefix="$OUT/prefix" \
  --pkg-config-flags=--static \
  --extra-ldflags="-static -static-libgcc" \
  --extra-version=oasys \
  --disable-autodetect \
  --disable-debug \
  --disable-doc \
  --disable-ffplay \
  --disable-ffprobe \
  --disable-network \
  --enable-w32threads \
  --enable-zlib \
  --enable-libmp3lame \
  --enable-libdav1d \
  --enable-mediafoundation \
  --enable-d3d11va \
  --enable-dxva2 \
  --enable-ffnvcodec \
  --enable-nvenc \
  | tee "$OUT/configure.log"

# Trava: nada de GPL/nonfree no binário.
grep -q "License: LGPL version 2.1 or later" "$OUT/configure.log" || {
  echo "ERRO: a licença do build não é LGPL 2.1+" >&2
  exit 1
}

make -j"$(nproc)"
cp ffmpeg.exe "$OUT/ffmpeg.exe"
strip "$OUT/ffmpeg.exe"
"$OUT/ffmpeg.exe" -hide_banner -version | head -3
