restructure #3

Merged
wyj merged 82 commits from dev into main 2026-01-18 20:12:27 -05:00
Showing only changes of commit 7e453a7f16 - Show all commits

View File

@@ -0,0 +1,326 @@
pkgname=ffmpeg
pkgver=7.1.3
_ver=${pkgver%.*}
pkgdesc='Complete solution to record, convert and stream audio and video'
arch=(x86_64)
homepage=https://ffmpeg.org
license=(GPL-3.0-only)
depends=(
bzip2
dav1d
fontconfig
freetype
glibc
harfbuzz
libass
libdrm
libgl
libpulse
libraw1394
libva
libwebp
libxml2
opus
x264
x265
xz
zlib
)
makedepends=(
mesa
nasm
vulkan-headers
)
sources=("${pkgname}-${pkgver}.tar.xz"
"${pkgname}-${_ver}-patchset-2.tar.xz" #from gentoo
)
urls=("https://ffmpeg.org/releases/ffmpeg-${pkgver}.tar.xz"
"https://dev.gentoo.org/~ionen/distfiles/${sources[1]}"
)
sha512sums=("1231cb6fe8305e040565d9c2a05228af6e90ded88b8548b24b1e7c46964ea25e43db44eb2b677837c0d68bc4e2a10ea5db101c2d2a24d2e3132cd20d599b0da0"
"bde2e07e2284f9c59bfc3dd448d46f34e14e3983d01baac6b89efac1093dd804318c4770cebe16d84830b34325dcd0aa88cf56136b3529bd36651bb32d73632b"
)
USE="bzip2 dav1d drm fontconfig gpl libass openssl opus postproc pulseaudio truetype vaapi vulkan webp x264 x265 xml zlib"
FFMPEG_IUSE_MAP=(
# [+]flag[:[^][!]opt1,...][@<v3|nonfree>]], ^ = native-only, ! = override
# remember to keep LICENSE, REQUIRED_USE, and RESTRICT in sync
X:libxcb,libxcb-shape,libxcb-shm,libxcb-xfixes,xlib
alsa
amf
amrenc:libvo-amrwbenc@v3
amr:libopencore-amrnb,libopencore-amrwb@v3
appkit
bluray:libbluray
bs2b:libbs2b
bzip2:bzlib
cdio:libcdio
chromaprint
codec2:libcodec2
cuda:cuda-llvm
+dav1d:libdav1d
${FFMPEG_UNSLOTTED:+doc:^htmlpages}
+drm:libdrm
dvd:libdvdnav,libdvdread
fdk:libfdk-aac@nonfree
flite:libflite
+fontconfig:libfontconfig
frei0r
fribidi:libfribidi
gcrypt
gme:libgme
gmp:@v3
+gnutls # unused if USE=openssl, default for bug #905113,#917627
+gpl
gsm:libgsm
iec61883:libiec61883
ieee1394:libdc1394
jack:libjack
jpeg2k:libopenjpeg
jpegxl:libjxl
kvazaar:libkvazaar
ladspa
lame:libmp3lame
lcms:lcms2
libaom
libaribb24:@v3 # reminder: req use on gpl unneeded if >=1.0.4 (not in tree)
+libass
libcaca
libilbc
liblc3
libplacebo
librtmp:librtmp
libsoxr
lv2
lzma
modplug:libmodplug
nvenc:cuvid,ffnvcodec,nvdec,nvenc
ocr:libtesseract
openal
opencl
opengl
openh264:libopenh264
openmpt:libopenmpt
openssl:openssl,!gnutls@v3ifgpl # still LGPL2.1+ if USE=-gpl
opus:libopus
+postproc # exposed as a USE for clarity with the GPL requirement
pulseaudio:libpulse
qrcode:libqrencode
qsv:libvpl
quirc:libquirc
rabbitmq:^librabbitmq # no multilib
rav1e:^librav1e # no multilib
rubberband:librubberband
samba:libsmbclient@v3 # GPL-3+ only
sdl:sdl2
shaderc:libshaderc
snappy:libsnappy
sndio
speex:libspeex
srt:libsrt
ssh:libssh
svg:librsvg
svt-av1:libsvtav1
theora:libtheora
+truetype:libfreetype,libharfbuzz
twolame:libtwolame
v4l:libv4l2
vaapi
vdpau
vidstab:libvidstab
vorbis:libvorbis
vpx:libvpx
vulkan
webp:libwebp
x264:libx264
x265:libx265
+xml:libxml2
xvid:libxvid
zeromq:^libzmq # no multilib
zimg:libzimg
+zlib
zvbi:libzvbi
)
use() {
local f=" $1 "
[[ " ${USE} " == *"${f}"* ]]
}
use_enable() {
local flag="$1" opt="${2:-$1}"
if use "${flag}"; then
printf -- '--enable-%s' "${opt}"
else
printf -- '--disable-%s' "${opt}"
fi
}
multilib_native_use_enable() {
local flag="$1" opt="${2:-$1}"
use_enable "${flag}" "${opt}"
}
src_prepare() {
tar -xf ${distdir}/${sources[0]} --strip-components=1
tar -xf ${distdir}/${sources[1]}
for _patch in patches/*; do
patch -p1 -i ${_patch}
done
}
ffmpeg_build_optmap() {
local -n _map_ref="$1" # nameref: FFMPEG_IUSE_MAP
local -n _out_ref="$2" # nameref: 输出数组 conf_opts
local v flag_raw flag license opt mod
local -A optmap=() licensemap=()
for v in "${_map_ref[@]}"; do
# ebuild: [[ ${v} =~ \+?([^:]+):?([^@]*)@?(.*) ]]
# 例:
# "+drm:libdrm"
# "openssl:openssl,!gnutls@v3ifgpl"
# "fdk:libfdk-aac@nonfree"
if [[ ! "${v}" =~ ^\+?([^:]+):?([^@]*)@?(.*)$ ]]; then
echo "bad map entry: ${v}" >&2
return 1
fi
flag_raw="${BASH_REMATCH[1]}" # 不含前导 +
flag="${flag_raw}"
opt="${BASH_REMATCH[2]}"
license="${BASH_REMATCH[3]}"
# 省略 opt 列表则默认等于 flag
[[ -n "${opt}" ]] || opt="${flag}"
# 逗号分隔的 opt 列表
local optlist="${opt//,/ }"
for opt in ${optlist}; do
mod="${opt:0:1}"
# ebuild: v=${v#[\!\^]}
opt="${opt#!}"
opt="${opt#^}"
if [[ "${mod}" == "!" ]]; then
# override: 若 flag enabled则强制 disable 该 opt
if use "${flag}"; then
optmap["${opt}"]="--disable-${opt}"
unset 'licensemap["'"${opt}"'"]' || true
fi
else
# 若该 opt 尚未被写入,才生成(避免重复/被前面覆盖)
if [[ -z "${optmap["${opt}"]+x}" ]]; then
if [[ "${mod}" == "^" ]]; then
optmap["${opt}"]="$(multilib_native_use_enable "${flag}" "${opt}")"
else
optmap["${opt}"]="$(use_enable "${flag}" "${opt}")"
fi
if use "${flag}"; then
licensemap["${opt}"]="${license}"
fi
fi
fi
done
done
# 处理 license 聚合开关ebuildfor license in "${licensemap[@]}")
local lic
for lic in "${licensemap[@]}"; do
case "${lic}" in
v3ifgpl)
use gpl || continue
;& # fallthroughbash >=4
v3)
optmap["v3"]="--enable-version3"
;;
nonfree)
use gpl && optmap["nonfree"]="--enable-nonfree"
;;
esac
done
# 输出:把 optmap 的值都塞进 _out_ref顺序不保证需要稳定顺序可再排序
local k
for k in "${!optmap[@]}"; do
_out_ref+=( "${optmap[$k]}" )
done
}
src_build() {
sed -i '/cflags -fdiagnostics-color/d' configure
local prefix="/usr"
local conf_args=(
--prefix="${prefix}"
--libdir="${prefix}"/lib
--shlibdir="${prefix}"/lib
--mandir="${prefix}"/share/man
--docdir=/usr/share/doc/${pkgname}-${pkgver}/html
--disable-stripping
--disable-debug
--disable-optimizations
--optflags=' '
# basic defaults that should not really need a USE
--enable-iconv
--enable-pic
--enable-shared
--disable-static
--enable-manpages
--disable-podpages
--disable-txtpages
# disabled primarily due to being unpackaged
--disable-decklink
--disable-libaribcaption
--disable-libdavs2
--disable-libklvanc
--disable-liblcevc-dec
--disable-libmysofa
--disable-libopenvino
--disable-libshine
--disable-libtls
--disable-libuavs3d
--disable-libvvenc
--disable-libxavs
--disable-libxavs2
--disable-libxevd
--disable-libxeve
--disable-pocketsphinx
--disable-rkmpp
--disable-vapoursynth
# disabled for other or additional reasons
--disable-cuda-nvcc # prefer cuda-llvm for less issues
--disable-libcelt # obsolete (bug #664158)
--disable-libglslang # prefer USE=shaderc (bug #918989,#920283,#922333)
--disable-liblensfun # https://trac.ffmpeg.org/ticket/9112 (abandoned?)
--disable-libmfx # prefer libvpl for USE=qsv
--disable-libnpp # deprecated and not supported for cuda 13.0+
--disable-libopencv # leaving for later due to circular opencv[ffmpeg]
--disable-librist # librist itself needs attention first (bug #822012)
--disable-libtensorflow # causes headaches, and is gone
--disable-libtorch # support may need special attention (bug #936127)
--disable-libvmaf # use ffmpeg-8+ instead, needs old vmaf (bug#968554)
--disable-mbedtls # messy with slots, tests underlinking issues
--disable-mmal # prefer USE=soc
--disable-omx # unsupported (bug #653386)
--disable-omx-rpi # ^
)
ffmpeg_build_optmap FFMPEG_IUSE_MAP conf_args
leaf_info "${conf_args[*]}"
./configure "${conf_args[@]}"
make V=1
}
src_check() {
local -x LD_LIBRARY_PATH=$(printf %s: "${srcdir}"/lib*)${LD_LIBRARY_PATH}
make V=1 -k fate
}
src_install() {
make DESTDIR="${pkgdir}" install
}
# vim:ft=sh syn=sh et sw=2: