Files
Dave Allured bfd5d25937 libtheora: update to 1.2.0
- revbump dependents
2026-06-15 08:39:25 -04:00

542 lines
19 KiB
Tcl

# -*- coding: utf-8; mode: tcl; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- vim:fenc=utf-8:ft=tcl:et:sw=4:ts=4:sts=4
PortSystem 1.0
PortGroup xcodeversion 1.0
PortGroup muniversal 1.0
PortGroup active_variants 1.1
# For 'TARGET_OS_OSX', 'TARGET_CPU_ARM64' macros
PortGroup legacysupport 1.1
# https://trac.macports.org/ticket/59246
# https://trac.macports.org/ticket/59308
PortGroup xcode_workaround 1.0
name ffmpeg-devel
set my_name ffmpeg
conflicts ffmpeg
version 8.1.1
revision 1
epoch 2
license LGPL-2.1+
categories multimedia
maintainers {mascguy @mascguy} openmaintainer
description FFmpeg is a complete solution to play, record, convert and \
stream audio and video.
long_description FFmpeg is a complete solution to record, convert and \
stream audio and video. It includes libavcodec, the \
leading audio/video codec library. \
\
The project is made of several components: \
\
ffmpeg is a command line tool to convert one video \
file format to another. It also supports grabbing and \
encoding in real time from a TV card. \
\
ffserver is an HTTP (RTSP is being developed) \
multimedia streaming server for live broadcasts. Time \
shifting of live broadcast is also supported. \
\
ffplay is a simple media player based on SDL and on \
the ffmpeg libraries. \
\
ffprobe gathers information from multimedia streams and \
prints it in human- and machine-readable fashion. \
\
libavcodec is a library containing all the ffmpeg \
audio/video encoders and decoders. Most codecs were \
developed from scratch to ensure best performance \
and high code reusability. \
\
libavformat is a library containing parsers and \
generators for all common audio/video formats.
homepage https://ffmpeg.org/
master_sites ${homepage}releases/
distname ${my_name}-${version}
dist_subdir ${my_name}
use_xz yes
checksums rmd160 35674c08071dd040d8a223e91b9ce3a3ea3d6e8a \
sha256 b6863adde98898f42602017462871b5f6333e65aec803fdd7a6308639c52edf3 \
size 11709440
depends_build-append \
port:cctools \
port:gmake \
path:bin/pkg-config:pkgconfig \
port:texinfo
depends_lib-append \
port:bzip2 \
path:lib/pkgconfig/cairo.pc:cairo \
port:dav1d \
port:fontconfig \
port:freetype \
port:fribidi \
path:lib/pkgconfig/gdk-pixbuf-2.0.pc:gdk-pixbuf2 \
port:gettext-runtime \
path:lib/pkgconfig/glib-2.0.pc:glib2 \
path:lib/pkgconfig/gnutls.pc:gnutls \
path:lib/pkgconfig/harfbuzz.pc:harfbuzz \
port:lame \
port:lcms2 \
path:lib/pkgconfig/libass.pc:libass \
port:libbluray \
port:libiconv \
port:libmodplug \
port:libogg \
port:libopus \
port:libpng \
path:lib/pkgconfig/librsvg-2.0.pc:librsvg \
port:libtheora \
port:libvorbis \
path:lib/pkgconfig/vpx.pc:libvpx \
port:openjpeg \
port:soxr \
path:lib/libspeex.dylib:speex \
port:webp \
port:xz \
port:zimg \
port:zlib \
port:zvbi
patchfiles-append patch-libavcodec-audiotoolboxenc.c.diff
patchfiles-append patch-avutil-builtin-available.diff
# Additional fixes related to use of '__builtin_available'
# TODO: Submit patches to upstream
patchfiles-append patch-libavcodec-profvidworkflow.diff
# add retina resolution capabilities via -movflags write_pixeldensity flag
# this patch is by daniel kaiser who posted on the ffmpeg bugtracker:
# https://fftrac-bg.ffmpeg.org/ticket/7045
# but he never formally submitted it to the FFMpeg mailing list, which i did
# https://ffmpeg.org/pipermail/ffmpeg-devel/2024-July/331470.html
# so the FFMpeg team does not seem to care to include this functionality
patchfiles-append patch-add-pixeldensity.diff
# Typedef AVMediaType to NSString* on older systems
# Patch submitted to upstream, remove once upstream has included it
if {${os.platform} eq "darwin" && ${os.major} < 17} {
patchfiles-append patch-libavdevice-avfoundation.diff
}
# error: call to undeclared function 'VTRegisterProfessionalVideoWorkflowVideoEncoders' on 10.9
patchfiles-append patch-ibavcodec-videotoolboxenc.c.diff
# enable auto configure of asm optimizations
# requires Xcode 3.1 or better on Leopard
minimum_xcodeversions {9 3.1}
# requires a C11 compiler
compiler.c_standard 2011
# clang-3.1 hits https://trac.macports.org/ticket/30137 (<rdar://problem/11542429>)
# clang-139 hits https://trac.macports.org/ticket/38141
# warning: unknown warning option '-Werror=partial-availability'; did you mean '-Werror=availability'? [-Wunknown-warning-option]
# warning: unknown warning option '-Wno-bool-operation'; did you mean '-Wno-bool-conversion'? [-Wunknown-warning-option]
compiler.blacklist-append {clang < 900}
# The old ffmpeg port was GPL-2+ as base and had a no_gpl variant, so this keeps us consistent
# Also, -gpl2 causes other ports to fail to build due to the missing libpostproc (#35473)
default_variants-append +gpl2
if {[tbool configure.ccache]} {
set ccache_path ${prefix}/bin/ccache
configure.cc-prepend \
${ccache_path}
configure.cxx-prepend \
${ccache_path}
}
configure.cflags-append \
-DHAVE_LRINTF \
-Wno-deprecated-declarations \
${configure.cppflags}
set port_sharedir ${prefix}/share
set port_docdir ${port_sharedir}/doc
configure.pre_args-append \
--cc="${configure.cc}"
configure.args-append \
--disable-audiotoolbox \
--disable-indev=jack \
--disable-libjack \
--disable-libopencore-amrnb \
--disable-libopencore-amrwb \
--disable-libplacebo \
--disable-libvmaf \
--disable-libxcb \
--disable-metal \
--disable-opencl \
--disable-sdl2 \
--disable-securetransport \
--disable-videotoolbox \
--disable-xlib \
--enable-avfilter \
--enable-fontconfig \
--enable-gnutls \
--enable-lcms2 \
--enable-libass \
--enable-libbluray \
--enable-libdav1d \
--enable-libfreetype \
--enable-libfribidi \
--enable-libharfbuzz \
--enable-libmodplug \
--enable-libmp3lame \
--enable-libopenjpeg \
--enable-libopus \
--enable-librsvg \
--enable-libsoxr \
--enable-libspeex \
--enable-libtheora \
--enable-libvorbis \
--enable-libvpx \
--enable-libwebp \
--enable-libzimg \
--enable-libzvbi \
--enable-lzma \
--enable-pthreads \
--enable-shared \
--enable-swscale \
--enable-zlib
post-extract {
# fix file perms; tarball contents deny group and world read
system "find ${worksrcpath} -type d -print0 | xargs -0 chmod a+rx"
system "find ${worksrcpath} -type f -print0 | xargs -0 chmod a+r"
}
platform darwin 8 {
post-patch {
reinplace "s:,-compatibility_version,$\(LIBMAJOR\)::" ${worksrcpath}/configure
}
}
platform darwin {
# disable asm on Tiger
# libblueray doesn't build on Tiger so disable for now (#39442)
if {${os.major} < 9} {
depends_lib-delete \
port:libbluray
configure.args-replace \
--enable-libbluray \
--disable-libbluray
configure.args-append \
--disable-asm
}
# as of 1.6.0 libvpx only supports darwin 10 or later
if {${os.major} < 10} {
depends_lib-delete \
path:lib/pkgconfig/vpx.pc:libvpx
configure.args-replace \
--enable-libvpx \
--disable-libvpx
}
# filters coreimage and coreimagesrc don't build on 10.6
# and earlier due to use of bridged casts in Objective C (#51823)
if {${os.major} < 11} {
configure.args-append \
--disable-filter=coreimage \
--disable-filter=coreimagesrc
}
# AudioToolbox support requires CoreMedia Framework available on 10.7+
if {${os.major} > 10} {
configure.args-replace \
--disable-audiotoolbox \
--enable-audiotoolbox
}
if {${os.major} > 9 || ${configure.build_arch} in [list ppc ppc64]} {
# libsdl2 uses X11 backend on PowerPC and builds on 10.4+.
configure.args-replace \
--disable-sdl2 \
--enable-sdl2
depends_lib-append \
port:libsdl2
}
# VideoToolbox, a new hardware acceleration framework, is supported on 10.8+ and "here to stay".
# It provides support for H265, H264, H263, MPEG1, MPEG2 and MPEG4.
if {${os.major} > 11} {
configure.args-replace \
--disable-videotoolbox \
--enable-videotoolbox
}
# OpenCL support requires version 1.2 available 10.8+
if {${os.major} > 11} {
configure.args-replace \
--disable-opencl \
--enable-opencl
}
# Apple GCC has problems with SIMD intrinsics and -Werror=no-missing-prototypes.
if {${os.major} < 11} {
patchfiles-append \
patch-configure-no-error-on-missing-prototypes.diff
}
# avfoundation is only available on 10.7+
# as of ffmpeg 3.4.1 build fails on 10.7 as well
# libavdevice/avfoundation.m:207:14: error: expected method to read dictionary element not found on object of type 'NSDictionary *'
if {${os.major} < 12} {
configure.args-append \
--disable-indev=avfoundation
}
# av1 codecs, available on 10.5+
if {${os.major} >= 9} {
configure.args-append \
--enable-libaom \
--enable-libsvtav1
depends_lib-append \
port:aom \
port:svt-av1
}
# rav1e available on 10.6+
if {(${os.major} < 10) || (${configure.build_arch} eq "ppc")} {
if {[variant_isset rav1e]} {
error "Variant rav1e not supported for macOS 10.5 and earlier, or PPC"
}
}
}
platform powerpc {
# absence of altivec is not automatically detected
if {[catch {sysctl hw.vectorunit} result] || $result == 0} {
configure.args-append \
--disable-altivec
# as this machine is a G3, force a local build so we don't download a buildbot-built
# version possibly built on a G4+ or cross-compiled from an Intel system
archive_sites
}
# might be needed for any gcc build...
#Undefined symbols:
# "___atomic_fetch_sub_8", referenced from:
# _fifo_thread_dispatch_message.part.4 in fifo.o
configure.ldflags-append \
-latomic
}
# libavcodec/pcm-bluray.c: error: passing argument 2 of 'bytestream2_get_buffer' from incompatible pointer type [-Wincompatible-pointer-types]
configure.cflags-append \
-Wno-error=incompatible-pointer-types
# configure isn't autoconf and they do use a dep cache
configure.universal_args-delete \
--disable-dependency-tracking
if {${universal_possible} && [variant_isset universal]} {
foreach arch ${configure.universal_archs} {
set merger_host($arch) ""
lappend merger_configure_args($arch) \
--arch=${arch}
lappend merger_configure_env($arch) \
"ASFLAGS=-arch ${arch}"
}
if {[string match "*86*" ${configure.universal_archs}]} {
depends_build-append \
port:nasm
}
lappend merger_configure_args(i386) \
--enable-x86asm
lappend merger_configure_args(x86_64) \
--enable-x86asm
} else {
configure.args-append \
--arch=${configure.build_arch}
configure.env-append \
ASFLAGS=[get_canonical_archflags]
if {${build_arch} eq "i386" || ${build_arch} eq "x86_64"} {
depends_build-append \
port:nasm
configure.args-append \
--enable-x86asm
}
}
build.cmd ${prefix}/bin/gmake
build.env-append V=1
test.run yes
destroot.env-append V=1
post-destroot {
# Copy docs
file mkdir ${destroot}${port_docdir}
file copy ${worksrcpath}/doc/APIchanges ${destroot}${port_docdir}
foreach f [glob ${worksrcpath}/doc/*.txt] {
file copy $f ${destroot}${port_docdir}
}
}
variant x11 {
# enable x11grab_xcb input device
depends_lib-append \
port:xorg-libxcb \
port:xorg-libX11 \
port:xorg-libXext \
port:xorg-libXv
configure.args-delete \
--disable-xlib \
--disable-libxcb
}
# On PowerPC libsdl2 is a stub for libsdl2-powerpc, which is always built
# with X11 backend. It is meaningless to require it as a variant there.
if {${configure.build_arch} ni [list ppc ppc64]} {
if {[variant_isset x11]} {
require_active_variants libsdl2 x11
} else {
require_active_variants libsdl2 "" x11
}
}
variant libdc1394 description {Enable IIDC-1394 frame grabbing using libdc1394 (experimental)} {
depends_lib-append \
port:libdc1394
configure.args-append \
--enable-libdc1394
}
# Allow use of librtmp instead of ffmpeg's internal rtmp implementation
# May address interoperability issues with CRtmpServer and others
# https://trac.macports.org/ticket/32219
# https://groups.google.com/forum/#!topic/c-rtmp-server/ywQPjvciPgc
# https://trac.ffmpeg.org/ticket/1700
variant librtmp description {Use librtmp (from rtmpdump) as rtmp[t][es]:// protocol handler} {
configure.args-append \
--enable-librtmp
depends_lib-append \
port:rtmpdump
}
variant jack description {Enable jack library and indev support} {
# jack will autoconfigure if not disabled
depends_lib-append \
port:jack
configure.args-replace \
--disable-libjack \
--enable-libjack
configure.args-replace \
--disable-indev=jack \
--enable-indev=jack
}
variant darwinssl description {Enable https support using Apple built-in TLS library instead of GNU TLS} {
configure.args-delete \
--disable-securetransport
configure.args-delete \
--enable-gnutls
depends_lib-delete \
path:lib/pkgconfig/gnutls.pc:gnutls
}
variant gpl2 description {Enable GPL code, license will be GPL-2+} {
license GPL-2+
configure.args-append \
--enable-gpl \
--enable-libvidstab \
--enable-libx264 \
--enable-libx265 \
--enable-libxvid
depends_lib-append \
port:libvidstab \
port:x264 \
port:x265 \
port:XviD
}
variant gpl3 requires gpl2 description {Enable GPL code, license will be GPL-3+} {
license GPL-3+
configure.args-append \
--enable-libaribb24 \
--enable-libsmbclient \
--enable-version3
depends_lib-append \
port:libaribb24 \
path:lib/pkgconfig/smbclient.pc:samba4
}
# the build server uses the default variants, and we want distributable binaries
# nonfree code is disabled by default but can be enabled using the +nonfree variant
variant nonfree description {enable nonfree code, libraries and binaries will not be redistributable} {
license Restrictive
configure.args-append \
--enable-libfdk-aac \
--enable-nonfree
depends_lib-append \
port:libfdk-aac
}
variant rav1e description {Enable codec rav1e} {
configure.args-append \
--enable-librav1e
depends_lib-append \
port:rav1e
}
variant flite description {Enable flite audio source} {
configure.args-append \
--enable-libflite
depends_lib-append \
port:flite
}
if {![variant_isset rav1e]} {
notes-append "Support for rav1e now disabled by default; enable via +rav1e"
}
if {[variant_isset nonfree]} {
notes-append "
This build of ${name} includes nonfree code as follows:
libfdk-aac
The following libraries and binaries may not be redistributed:
ffmpeg libavcodec libavdevice libavfilter libavformat libavutil
To remove this restriction remove the variant +nonfree
"
} elseif {[variant_isset gpl3]} {
notes-append "
This build of ${name} includes GPLed code and is therefore licensed under GPL v3 or later.\
The following modules are GPLed:
libsambaclient libvidstab libx264 libx265 libxvid postproc
To include all nonfree, GPLed and LGPL code use variant +nonfree.\
To remove nonfree and GPLed code leaving only LGPL code remove the +gpl2 and +gpl3 variants.
"
} elseif {[variant_isset gpl2]} {
notes-append "
This build of ${name} includes GPLed code and is therefore licensed under GPL v2 or later.\
The following modules are GPLed:
libvidstab libx264 libx265 libxvid postproc
To include all nonfree, GPLed and LGPL code use variant +nonfree.\
To remove nonfree and GPLed code leaving only LGPL code remove the +gpl2 variant.
"
} else {
notes-append "
This build of ${name} includes no GPLed or nonfree code and is therefore licensed under LGPL v2.1 or later.
"
}
livecheck.type regex
livecheck.url ${master_sites}
livecheck.regex "${my_name}-(\\d+(?:\\.\\d+)*)${extract.suffix}"