# -*- 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 # 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 set my_name ffmpeg # Please increase the revision of mpv whenever ffmpeg's version is updated. version 4.4.5 revision 0 epoch 1 license LGPL-2.1+ categories multimedia maintainers {mascguy @mascguy} {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. homepage https://ffmpeg.org/ master_sites ${homepage}releases/ distname ${my_name}-${version} dist_subdir ${my_name} use_xz yes checksums rmd160 51d7e4cd1beec0c44c93f466732d11c2573fd77a \ sha256 f9514e0d3515aee5a271283df71636e1d1ff7274b15853bcd84e144be416ab07 \ size 9575596 depends_build-append \ port:cctools \ port:gmake \ path:bin/pkg-config:pkgconfig \ port:texinfo depends_lib-append \ port:bzip2 \ port:dav1d \ port:fontconfig \ port:freetype \ port:fribidi \ path:lib/pkgconfig/gnutls.pc:gnutls \ path:lib/pkgconfig/harfbuzz.pc:harfbuzz \ port:lame \ path:lib/pkgconfig/libass.pc:libass \ port:libbluray \ port:libiconv \ port:libmodplug \ port:libogg \ port:libopus \ path:lib/pkgconfig/librsvg-2.0.pc:librsvg \ port:libtheora \ port:libvorbis \ path:lib/pkgconfig/vpx.pc:libvpx \ port:lzo2 \ 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 # Fix an upstream bug that overrides the max_b_frames setting # https://trac.ffmpeg.org/ticket/9231 # Fixed via upstream commit: 55d9d6767967794edcdd6e1bbd8840fc6f4e9315 patchfiles-append patch-libavcodec-videotoolboxenc.c.diff # Patch for upstream bug related to non-B-frame encoding # https://trac.ffmpeg.org/ticket/9439 # Fixed via upstream commit: b786bc7433dfe082441a57c1ba9ae9ea47904b78 patchfiles-append patch-issue-9439-non-b-frame-encoding.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 () # 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 < 800} # 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}" \ --mandir=${prefix}/share/man configure.args-append \ --disable-audiotoolbox \ --disable-indev=jack \ --disable-libjack \ --disable-libopencore-amrnb \ --disable-libopencore-amrwb \ --disable-libxcb \ --disable-libxcb-shm \ --disable-libxcb-xfixes \ --disable-opencl \ --disable-outdev=xv \ --disable-sdl2 \ --disable-securetransport \ --disable-videotoolbox \ --enable-avfilter \ --enable-avresample \ --enable-fontconfig \ --enable-gnutls \ --enable-libass \ --enable-libbluray \ --enable-libdav1d \ --enable-libfreetype \ --enable-libfribidi \ --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 && ${build_arch} ni [list ppc ppc64]} { # libsdl2 requires minimum Xcode 10.7 SDK to build successfully # but builds on Snow Leopard x86. Exclude ppc until fixed. 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" } } # due to the new linker (which was introduced in Xcode 15: https://developer.apple.com/documentation/xcode-release-notes/xcode-15-release-notes), # this port requires '-ld_classic' to build successfully with the toolchains from Xcode 15 or Command Line Tools 15. # # TODO: This is a temporary solution, the classic linker will be removed in a future release by Apple. if { ( [vercmp ${xcodeversion} 15 ] >= 0 ) || ( [vercmp ${xcodecltversion} 15 ] >= 0 ) } { configure.ldflags-append \ -Wl,-ld_classic } } # libavcodec/pcm-bluray.c:172:45: error: passing argument 2 of 'bytestream2_get_buffer' from incompatible pointer type [-Wincompatible-pointer-types] # libavcodec/pcm-dvd.c:155:37: error: passing argument 2 of 'bytestream2_get_buffer' from incompatible pointer type [-Wincompatible-pointer-types] if {[string match *gcc* ${configure.compiler}]} { configure.cflags-append \ -Wno-error=incompatible-pointer-types } 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 } # 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 # Re libXv see: https://trac.macports.org/ticket/58617 depends_lib-append \ port:xorg-libxcb \ port:xorg-libXext \ port:xorg-libXfixes \ port:xorg-libXv configure.args-delete \ --disable-xlib \ --disable-libxcb \ --disable-libxcb-shm \ --disable-libxcb-xfixes } # 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 \ --enable-postproc 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:samba3 } # 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}-(4(?:\\.\\d+)*)${extract.suffix}"