Permalink
Fetching contributors…
Cannot retrieve contributors at this time
421 lines (364 sloc) 14 KB
# -*- 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 compiler_blacklist_versions 1.0
PortGroup active_variants 1.1
name ffmpeg
conflicts ffmpeg-devel
epoch 1
version 4.0.2
license LGPL-2.1+
categories multimedia
maintainers {devans @dbevans} {jeremyhu @jeremyhu} 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.
platforms darwin
homepage https://ffmpeg.org/
master_sites ${homepage}releases/
use_xz yes
checksums rmd160 61a3049dee1e5ea958a21d4cc743fee200813d83 \
sha256 a95c0cc9eb990e94031d2183f2e6e444cc61c99f6f182d1575c433d62afb2f97 \
size 8662984
depends_build port:pkgconfig \
port:gmake \
port:texinfo
# libvpx 1.7.0 now provides a shared library
# move dependency from depends_build to depends_lib
depends_lib port:lame \
port:libiconv \
port:libvorbis \
port:libopus \
port:libogg \
port:librsvg \
port:libtheora \
port:libmodplug \
port:libass \
port:libbluray \
port:libvpx \
port:gnutls \
port:openjpeg \
port:fontconfig \
port:freetype \
port:fribidi \
path:lib/libspeex.dylib:speex \
port:soxr \
port:bzip2 \
port:xz \
port:zlib
patchfiles patch-libavcodec-audiotoolboxenc.c.diff
#
# enable auto configure of asm optimizations
# requires Xcode 3.1 or better on Leopard
#
minimum_xcodeversions {9 3.1}
if {[lsearch [get_canonical_archs] i386] != -1} {
# clang-3.1 hits https://trac.macports.org/ticket/30137 (<rdar://problem/11542429>)
# clang-139 hits https://trac.macports.org/ticket/38141
compiler.blacklist-append {clang < 422.1.7}
}
platform darwin powerpc {
# https://trac.macports.org/ticket/55124
# requires newer compiler than gcc4.2 to build
compiler.blacklist
compiler.whitelist macports-gcc-6
universal_variant no
}
# _Nullable not available with clang < 700.
if {[vercmp ${xcodeversion} 7.0] < 0} {
patchfiles-append patch-libavcodec-videotoolboxenc.c-drop-Nullable.diff
}
# 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
configure.cflags-append -DHAVE_LRINTF ${configure.cppflags}
configure.args --enable-swscale \
--enable-avfilter \
--enable-avresample \
--enable-libmp3lame \
--enable-libvorbis \
--enable-libopus \
--enable-librsvg \
--enable-libtheora \
--enable-libopenjpeg \
--enable-libmodplug \
--enable-libvpx \
--enable-libsoxr \
--enable-libspeex \
--enable-libass \
--enable-libbluray \
--enable-lzma \
--enable-gnutls \
--enable-fontconfig \
--enable-libfreetype \
--enable-libfribidi \
--disable-libjack \
--disable-libopencore-amrnb \
--disable-libopencore-amrwb \
--disable-libxcb \
--disable-libxcb-shm \
--disable-libxcb-xfixes \
--disable-indev=jack \
--disable-opencl \
--disable-outdev=xv \
--disable-audiotoolbox \
--disable-videotoolbox \
--disable-sdl2 \
--mandir=${prefix}/share/man \
--enable-shared --enable-pthreads \
--cc=${configure.cc}
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 port: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+
# libsdl2 requires minimum Xcode 10.7 SDK to build successfully
if {${os.major} > 10} {
configure.args-replace --disable-audiotoolbox --enable-audiotoolbox
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 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
}
# kCVPixelFormatType_OneComponent8 used in avfoundation indev is only available on 10.8+
if {${os.major} < 12} {
configure.args-append --disable-indev=avfoundation
}
}
build.cmd ${prefix}/bin/gmake
build.env-append V=1
test.run yes
destroot.env-append V=1
#
# configure isn't autoconf and they do use a dep cache
#
post-destroot {
file mkdir ${destroot}${prefix}/share/doc/ffmpeg
file copy ${worksrcpath}/doc/APIchanges ${destroot}${prefix}/share/doc/ffmpeg
foreach f [glob ${worksrcpath}/doc/*.txt] {
file copy $f ${destroot}${prefix}/share/doc/ffmpeg
}
}
platform powerpc {
# absence of altivec is not automatically detected
if {[catch {sysctl hw.vectorunit} result] || $result == 0} {
configure.args-append --disable-altivec
}
}
platform darwin 8 {
post-patch {
reinplace "s:,-compatibility_version,$\(LIBMAJOR\)::" ${worksrcpath}/configure
}
}
configure.universal_args-delete --disable-dependency-tracking
if {[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
}
}
variant x11 {
#
# enable x11grab_xcb input device
#
depends_lib-append port:xorg-libxcb \
port:xorg-libXext \
port:xorg-libXfixes
configure.args-delete --disable-libxcb \
--disable-libxcb-shm \
--disable-libxcb-xfixes \
}
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
}
# x265 currently does not support OS X < 10.6 (#48336, #48338)
# only enable libx265 support on 10.6 or greater
platform darwin {
if {${os.major} > 9 && [variant_isset gpl2]} {
configure.args-append --enable-libx265
depends_lib-append port:x265
}
}
variant high10 requires gpl2 description {Build using libx264 with 10-bit output} {}
if {[variant_isset high10]} {
require_active_variants x264 high10
} else {
require_active_variants x264 "" high10
}
variant jack description {Enable jack library and indev support} {
# jack will autoconfigure if not disabled
depends_lib-append port:jack
configure.args-delete --disable-libjack \
--disable-indev=jack
}
variant gpl2 description {Enable GPL code, license will be GPL-2+} {
configure.args-append --enable-gpl \
--enable-postproc \
--enable-libx264 \
--enable-libxvid
depends_lib-append port:XviD \
port:x264
license GPL-2+
}
variant gpl3 requires gpl2 description {Enable GPL code, license will be GPL-3+} {
configure.args-append --enable-version3 \
--enable-libsmbclient
depends_lib-append port:samba3
license GPL-3+
}
# 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} {
configure.args-append --enable-nonfree \
--enable-libfdk-aac
depends_lib-append port:libfdk-aac
license Restrictive
}
if {[variant_isset nonfree]} {
notes "
*******
******* 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 "
*******
******* This build of ${name} includes GPLed code and
******* is therefore licensed under GPL v3 or later.
*******
******* The following modules are GPLed:
*******
******* postproc
******* libsambaclient
******* libx264
******* libx265
******* libxvid
*******
******* 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 "
*******
******* This build of ${name} includes GPLed code and
******* is therefore licensed under GPL v2 or later.
*******
******* The following modules are GPLed:
*******
******* postproc
******* libx264
******* libx265
******* libxvid
*******
******* 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 "
*******
******* 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 "${name}-(\\d+(?:\\.\\d+)*)${extract.suffix}"