ffmpeg: improve cross platform support & fix licensing issues, resolves #7013

+ Removed asserts for (l)gpl & (l)gpl3 making it easier to enable and disable all
  (l)gpl & (l)gpl3 portions
+ Fix build inputs so that nonfree software isn't pulled in when building ffmpeg
+ Fix compiler on systems with clang
+ Disable libraries that fail on darwin until they can be fixed
+ Fix linux only build inputs so that they aren't pulled in on other platforms
+ Fix optional build inputs
+ Opencv causes circular dependency issues so it is disabled until it can be resolved
This commit is contained in:
codyopel 2015-03-29 16:42:42 -04:00
parent a639c710ae
commit a5f065d708

View File

@ -103,7 +103,7 @@
, openal ? null # OpenAL 1.1 capture support , openal ? null # OpenAL 1.1 capture support
#, opencl ? null # OpenCL code #, opencl ? null # OpenCL code
#, opencore-amr ? null # AMR-NB de/encoder & AMR-WB decoder #, opencore-amr ? null # AMR-NB de/encoder & AMR-WB decoder
, opencv ? null # Video filtering #, opencv ? null # Video filtering
, openglExtlib ? false, mesa ? null # OpenGL rendering , openglExtlib ? false, mesa ? null # OpenGL rendering
#, openh264 ? null # H.264/AVC encoder #, openh264 ? null # H.264/AVC encoder
, openjpeg_1 ? null # JPEG 2000 de/encoder , openjpeg_1 ? null # JPEG 2000 de/encoder
@ -156,14 +156,19 @@
* *
* Packages with errors: * Packages with errors:
* flite ilbc schroedinger * flite ilbc schroedinger
* opencv - circular dependency issue
* *
* Not packaged: * Not packaged:
* aacplus avisynth cdio-paranoia crystalhd libavc1394 libiec61883 * aacplus avisynth cdio-paranoia crystalhd libavc1394 libiec61883
* libmxf libnut libquvi nvenc opencl opencore-amr openh264 oss shine twolame * libmxf libnut libquvi nvenc opencl opencore-amr openh264 oss shine twolame
* utvideo vo-aacenc vo-amrwbenc xvmc zvbi blackmagic-design-desktop-video * utvideo vo-aacenc vo-amrwbenc xvmc zvbi blackmagic-design-desktop-video
* *
* Need fixes to support Darwin:
* frei0r, game-music-emu, gsm, jack2, libssh, libvpx(stable 1.3.0), openal, openjpeg_1,
* pulseaudio, rtmpdump, samba, vit-stab, wavpack, x265. xavs
*
* Not supported: * Not supported:
* stagehright-h264(android only) * stagefright-h264(android only)
* *
* Known issues: * Known issues:
* 0.5 - libgsm: configure fails to find library (fix: disable for 0.5) * 0.5 - libgsm: configure fails to find library (fix: disable for 0.5)
@ -203,7 +208,12 @@ let
# Flag change between versions (e.g. "--enable-armvfp" -> "--enable-vfp" changed in v1.1) # Flag change between versions (e.g. "--enable-armvfp" -> "--enable-vfp" changed in v1.1)
chgFlg = chgVer: oldFlag: newFlag: if reqMin chgVer then newFlag else oldFlag; chgFlg = chgVer: oldFlag: newFlag: if reqMin chgVer then newFlag else oldFlag;
# Disable dependency that needs fixes before it will work on Darwin
disDarwinFix = origArg: if stdenv.isDarwin then false else origArg;
isCygwin = stdenv.isCygwin; isCygwin = stdenv.isCygwin;
isDarwin = stdenv.isDarwin;
isLinux = stdenv.isLinux;
in in
/* /*
@ -239,38 +249,26 @@ assert avdeviceLibrary && reqMin "0.6" -> avformatLibrary
&& avutilLibrary; # configure flag since 0.6 && avutilLibrary; # configure flag since 0.6
assert avformatLibrary && reqMin "0.6" -> avcodecLibrary && avutilLibrary; # configure flag since 0.6 assert avformatLibrary && reqMin "0.6" -> avcodecLibrary && avutilLibrary; # configure flag since 0.6
assert avresampleLibrary && reqMin "0.11" -> avutilLibrary; assert avresampleLibrary && reqMin "0.11" -> avutilLibrary;
assert postprocLibrary && reqMin "0.5" -> gplLicensing && avutilLibrary; assert postprocLibrary && reqMin "0.5" -> avutilLibrary;
assert swresampleLibrary && reqMin "0.9" -> soxr != null; assert swresampleLibrary && reqMin "0.9" -> soxr != null;
assert swscaleLibrary && reqMin "0.5" -> avutilLibrary; assert swscaleLibrary && reqMin "0.5" -> avutilLibrary;
/* /*
* External libraries * External libraries
*/ */
#assert aacplusExtlib && reqMin "0.7" -> nonfreeLicensing; #assert aacplusExtlib && reqMin "0.7" -> nonfreeLicensing;
#assert cdio-paranoia != null && reqMin "0.9" -> gplLicensing;
#assert decklinkExtlib && reqMin "2.2" -> blackmagic-design-desktop-video != null #assert decklinkExtlib && reqMin "2.2" -> blackmagic-design-desktop-video != null
# && !isCygwin && multithreadBuild # POSIX threads required # && !isCygwin && multithreadBuild # POSIX threads required
# && nonfreeLicensing; # && nonfreeLicensing;
assert faacExtlib && reqMin "0.5" -> faac != null && nonfreeLicensing; assert faacExtlib && reqMin "0.5" -> faac != null && nonfreeLicensing;
assert fdk-aacExtlib && reqMin "1.0" -> fdk_aac != null && gplLicensing && nonfreeLicensing; assert fdk-aacExtlib && reqMin "1.0" -> fdk_aac != null && nonfreeLicensing;
assert frei0r != null && reqMin "0.7" -> gplLicensing;
assert gnutls != null && reqMin "0.9" -> !opensslExtlib; assert gnutls != null && reqMin "0.9" -> !opensslExtlib;
assert libxcb-shmExtlib && reqMin "2.5" -> libxcb != null; assert libxcb-shmExtlib && reqMin "2.5" -> libxcb != null;
assert libxcb-xfixesExtlib && reqMin "2.5" -> libxcb != null; assert libxcb-xfixesExtlib && reqMin "2.5" -> libxcb != null;
assert libxcb-shapeExtlib && reqMin "2.5" -> libxcb != null; assert libxcb-shapeExtlib && reqMin "2.5" -> libxcb != null;
#assert opencore-amr != null && reqMin "0.5" -> version3Licensing;
assert openglExtlib && reqMin "2.2" -> mesa != null; assert openglExtlib && reqMin "2.2" -> mesa != null;
assert opensslExtlib && reqMin "0.9" -> gnutls == null && openssl != null && gplLicensing && nonfreeLicensing; assert opensslExtlib && reqMin "0.9" -> gnutls == null && openssl != null && nonfreeLicensing;
assert sambaExtlib && reqMin "2.3" -> samba != null && gplLicensing && version3Licensing; assert sambaExtlib && reqMin "2.3" -> samba != null && !isDarwin;
#assert utvideo != null && reqMin "0.9" -> gplLicensing; assert x11grabExtlib && reqMin "0.5" -> libX11 != null && libXv != null;
assert vid-stab != null && reqMin "2.0" -> gplLicensing;
#assert vo-aacenc != null && reqMin "0.6" -> version3Licensing;
#assert vo-amrwbenc != null && reqMin "0.7" -> version3Licensing;
assert x11grabExtlib && reqMin "0.5" -> libX11 != null && libXv != null && gplLicensing;
assert x264 != null && reqMin "0.5" -> gplLicensing;
assert x265 != null && reqMin "2.2" -> gplLicensing;
assert xavs != null && reqMin "0.7" -> gplLicensing;
assert xvidcore != null && reqMin "0.5" -> gplLicensing;
#assert zvbi != null && reqMin "2.1" -> gplLicensing;
with stdenv.lib; with stdenv.lib;
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
@ -295,9 +293,10 @@ stdenv.mkDerivation rec {
/* /*
* Build flags * Build flags
*/ */
# One some ARM platforms --enable-thumb # On some ARM platforms --enable-thumb
"--enable-shared --disable-static" "--enable-shared --disable-static"
(mkFlag true "0.6" "pic") (mkFlag true "0.6" "pic")
(if (stdenv.cc.cc.isClang or false) then "--cc=clang" else null)
(mkFlag smallBuild "0.5" "small") (mkFlag smallBuild "0.5" "small")
(mkFlag runtime-cpudetectBuild "0.5" "runtime-cpudetect") (mkFlag runtime-cpudetectBuild "0.5" "runtime-cpudetect")
(mkFlag grayBuild "0.5" "gray") (mkFlag grayBuild "0.5" "gray")
@ -334,7 +333,7 @@ stdenv.mkDerivation rec {
(mkFlag avformatLibrary "0.6" "avformat") (mkFlag avformatLibrary "0.6" "avformat")
(mkFlag avresampleLibrary "1.0" "avresample") (mkFlag avresampleLibrary "1.0" "avresample")
(mkFlag avutilLibrary "1.1" "avutil") (mkFlag avutilLibrary "1.1" "avutil")
(mkFlag postprocLibrary "0.5" "postproc") (mkFlag (postprocLibrary && gplLicensing) "0.5" "postproc")
(mkFlag swresampleLibrary "0.9" "swresample") (mkFlag swresampleLibrary "0.9" "swresample")
(mkFlag swscaleLibrary "0.5" "swscale") (mkFlag swscaleLibrary "0.5" "swscale")
/* /*
@ -359,18 +358,18 @@ stdenv.mkDerivation rec {
#(mkFlag decklinkExtlib "2.2" "decklink") #(mkFlag decklinkExtlib "2.2" "decklink")
(mkFlag faacExtlib "0.5" "libfaac") (mkFlag faacExtlib "0.5" "libfaac")
(depFlag faad2Extlib "0.5" "0.6" "libfaad") (depFlag faad2Extlib "0.5" "0.6" "libfaad")
(mkFlag fdk-aacExtlib "1.0" "libfdk-aac") (mkFlag (fdk-aacExtlib && gplLicensing) "1.0" "libfdk-aac")
#(mkFlag (flite != null) "1.0" "libflite") #(mkFlag (flite != null) "1.0" "libflite")
(if reqMin "1.0" then # Force disable until a solution is found (if reqMin "1.0" then # Force disable until a solution is found
"--disable-libflite" "--disable-libflite"
else null) else null)
(mkFlag (fontconfig != null) "1.0" "fontconfig") (mkFlag (fontconfig != null) "1.0" "fontconfig")
(mkFlag (freetype != null) "0.7" "libfreetype") (mkFlag (freetype != null) "0.7" "libfreetype")
(mkFlag (frei0r != null) "0.7" "frei0r") (mkFlag (disDarwinFix (frei0r != null && gplLicensing)) "0.7" "frei0r")
(mkFlag (fribidi != null) "2.3" "libfribidi") (mkFlag (fribidi != null) "2.3" "libfribidi")
(mkFlag (game-music-emu != null) "2.2" "libgme") (mkFlag (disDarwinFix (game-music-emu != null)) "2.2" "libgme")
(mkFlag (gnutls != null) "0.9" "gnutls") (mkFlag (gnutls != null) "0.9" "gnutls")
(verFix (mkFlag (gsm != null) "0.5" "libgsm") "0.5" "--disable-libgsm") (verFix (mkFlag (disDarwinFix (gsm != null)) "0.5" "libgsm") "0.5" "--disable-libgsm")
#(mkFlag (ilbc != null) "1.0" "libilbc") #(mkFlag (ilbc != null) "1.0" "libilbc")
(mkFlag (ladspaH !=null) "2.1" "ladspa") (mkFlag (ladspaH !=null) "2.1" "ladspa")
(mkFlag (lame != null) "0.5" "libmp3lame") (mkFlag (lame != null) "0.5" "libmp3lame")
@ -379,20 +378,20 @@ stdenv.mkDerivation rec {
(mkFlag (libbluray != null) "1.0" "libbluray") (mkFlag (libbluray != null) "1.0" "libbluray")
(mkFlag (libbs2b != null) "2.3" "libbs2b") (mkFlag (libbs2b != null) "2.3" "libbs2b")
(mkFlag (libcaca != null) "1.0" "libcaca") (mkFlag (libcaca != null) "1.0" "libcaca")
#(mkFlag (cdio-paranoia != null) "0.9" "libcdio") #(mkFlag (cdio-paranoia != null && gplLicensing) "0.9" "libcdio")
(mkFlag (libdc1394 != null && libraw1394 != null) "0.5" "libdc1394") (mkFlag (if !isLinux then false else libdc1394 != null && libraw1394 != null && isLinux) "0.5" "libdc1394")
(mkFlag (libiconv != null) "1.2" "iconv") (mkFlag (libiconv != null) "1.2" "iconv")
#(mkFlag (libiec61883 != null && libavc1394 != null && libraw1394 != null) "1.0" "libiec61883") #(mkFlag (if !isLinux then false else libiec61883 != null && libavc1394 != null && libraw1394 != null) "1.0" "libiec61883")
#(mkFlag (libmfx != null) "2.6" "libmfx") #(mkFlag (libmfx != null) "2.6" "libmfx")
(mkFlag (libmodplug != null) "0.9" "libmodplug") (mkFlag (disDarwinFix (libmodplug != null)) "0.9" "libmodplug")
#(mkFlag (libnut != null) "0.5" "libnut") #(mkFlag (libnut != null) "0.5" "libnut")
(mkFlag (libopus != null) "1.0" "libopus") (mkFlag (libopus != null) "1.0" "libopus")
(mkFlag (libssh != null) "2.1" "libssh") (mkFlag (disDarwinFix (libssh != null)) "2.1" "libssh")
(mkFlag (libtheora != null) "0.5" "libtheora") (mkFlag (libtheora != null) "0.5" "libtheora")
(mkFlag (libva != null) "0.6" "vaapi") (mkFlag (if isDarwin then false else libva != null) "0.6" "vaapi")
(mkFlag (libvdpau != null) "0.5" "vdpau") (mkFlag (libvdpau != null) "0.5" "vdpau")
(mkFlag (libvorbis != null) "0.5" "libvorbis") (mkFlag (libvorbis != null) "0.5" "libvorbis")
(mkFlag (libvpx != null) "0.6" "libvpx") (mkFlag (disDarwinFix (libvpx != null)) "0.6" "libvpx")
(mkFlag (libwebp != null) "2.2" "libwebp") (mkFlag (libwebp != null) "2.2" "libwebp")
(mkFlag (libX11 != null && libXv != null) "2.3" "xlib") (mkFlag (libX11 != null && libXv != null) "2.3" "xlib")
(mkFlag (libxcb != null) "2.5" "libxcb") (mkFlag (libxcb != null) "2.5" "libxcb")
@ -401,39 +400,38 @@ stdenv.mkDerivation rec {
(mkFlag libxcb-shapeExtlib "2.5" "libxcb-shape") (mkFlag libxcb-shapeExtlib "2.5" "libxcb-shape")
(mkFlag (lzma != null) "2.4" "lzma") (mkFlag (lzma != null) "2.4" "lzma")
#(mkFlag nvenc "2.6" "nvenc") #(mkFlag nvenc "2.6" "nvenc")
(mkFlag (openal != null) "0.9" "openal") (mkFlag (disDarwinFix (openal != null)) "0.9" "openal")
#(mkFlag opencl "2.2" "opencl") #(mkFlag opencl "2.2" "opencl")
#(mkFlag (opencore-amr != null) "0.5" "libopencore-amrnb") #(mkFlag (opencore-amr != null && version3Licensing) "0.5" "libopencore-amrnb")
#(mkFlag (opencore-amr != null) "0.5" "libopencore-amrwb") #(mkFlag (opencv != null) "1.1" "libopencv") # Actual min. version 0.7
(mkFlag (opencv != null) "1.1" "libopencv") # Actual min. version 0.7
(mkFlag openglExtlib "2.2" "opengl") (mkFlag openglExtlib "2.2" "opengl")
#(mkFlag (openh264 != null) "2.6" "openh264") #(mkFlag (openh264 != null) "2.6" "openh264")
(mkFlag (openjpeg_1 != null) "0.5" "libopenjpeg") (mkFlag (disDarwinFix (openjpeg_1 != null)) "0.5" "libopenjpeg")
(mkFlag opensslExtlib "0.9" "openssl") (mkFlag (opensslExtlib && gplLicensing) "0.9" "openssl")
(mkFlag (pulseaudio != null) "0.9" "libpulse") (mkFlag (disDarwinFix (pulseaudio != null)) "0.9" "libpulse")
#(mkFlag quvi "2.0" "libquvi") #(mkFlag quvi "2.0" "libquvi")
(mkFlag (rtmpdump != null) "0.6" "librtmp") (mkFlag (disDarwinFix (rtmpdump != null)) "0.6" "librtmp")
#(mkFlag (schroedinger != null) "0.5" "libschroedinger") #(mkFlag (schroedinger != null) "0.5" "libschroedinger")
#(mkFlag (shine != null) "2.0" "libshine") #(mkFlag (shine != null) "2.0" "libshine")
(mkFlag sambaExtlib "2.3" "libsmbclient") (mkFlag (disDarwinFix (sambaExtlib && gplLicensing && version3Licensing)) "2.3" "libsmbclient")
(mkFlag (SDL != null) "2.5" "sdl") # Only configurable since 2.5, auto detected before then (mkFlag (SDL != null) "2.5" "sdl") # Only configurable since 2.5, auto detected before then
(mkFlag (soxr != null) "1.2" "libsoxr") (mkFlag (soxr != null) "1.2" "libsoxr")
(mkFlag (speex != null) "0.5" "libspeex") (mkFlag (speex != null) "0.5" "libspeex")
#(mkFlag (twolame != null) "1.0" "libtwolame") #(mkFlag (twolame != null) "1.0" "libtwolame")
#(mkFlag (utvideo != null) "0.9" "libutvideo") #(mkFlag (utvideo != null && gplLicensing) "0.9" "libutvideo")
(mkFlag (v4l_utils != null) "0.9" "libv4l2") (mkFlag (if !isLinux then false else v4l_utils != null && isLinux) "0.9" "libv4l2")
(mkFlag (vid-stab != null) "2.2" "libvidstab") # Actual min. version 2.0 (mkFlag (disDarwinFix (vid-stab != null && gplLicensing)) "2.2" "libvidstab") # Actual min. version 2.0
#(mkFlag (vo-aacenc != null) "0.6" "libvo-aacenc") #(mkFlag (vo-aacenc != null && version3Licensing) "0.6" "libvo-aacenc")
#(mkFlag (vo-amrwbenc) "0.7" "libvo-amrwbenc") #(mkFlag (vo-amrwbenc != null && version3Licensing) "0.7" "libvo-amrwbenc")
(mkFlag (wavpack != null) "2.0" "libwavpack") (mkFlag (disDarwinFix (wavpack != null)) "2.0" "libwavpack")
(mkFlag (x11grabExtlib) "0.5" "x11grab") (mkFlag (x11grabExtlib && gplLicensing) "0.5" "x11grab")
(mkFlag (x264 != null) "0.5" "libx264") (mkFlag (x264 != null && gplLicensing) "0.5" "libx264")
(mkFlag (x265 != null) "2.2" "libx265") (mkFlag (disDarwinFix (x265 != null && gplLicensing)) "2.2" "libx265")
(mkFlag (xavs != null) "0.7" "libxavs") (mkFlag (disDarwinFix (xavs != null && gplLicensing)) "0.7" "libxavs")
(mkFlag (xvidcore != null) "0.5" "libxvid") (mkFlag (xvidcore != null && gplLicensing) "0.5" "libxvid")
(mkFlag (zeromq4 != null) "2.0" "libzmq") (mkFlag (zeromq4 != null) "2.0" "libzmq")
(mkFlag (zlib != null) "0.5" "zlib") (mkFlag (zlib != null) "0.5" "zlib")
#(mkFlag (zvbi != null) "2.1" "libzvbi") #(mkFlag (zvbi != null && gplLicensing) "2.1" "libzvbi")
/* /*
* Developer flags * Developer flags
*/ */
@ -449,14 +447,19 @@ stdenv.mkDerivation rec {
nativeBuildInputs = [ perl pkgconfig texinfo yasm ]; nativeBuildInputs = [ perl pkgconfig texinfo yasm ];
buildInputs = [ buildInputs = [
alsaLib bzip2 celt faad2 fdk_aac fontconfig freetype frei0r fribidi bzip2 celt fontconfig freetype fribidi gnutls ladspaH lame libass libbluray
game-music-emu gnutls gsm jack2 ladspaH lame libass libbluray libbs2b libbs2b libcaca libdc1394 libogg libopus libtheora libvdpau libvorbis
libcaca libdc1394 libmodplug libogg libopus libraw1394 libssh libtheora libwebp libX11 libxcb libXext libXfixes libXv lzma SDL soxr speex x264
libva libvdpau libvpx libvorbis libwebp libX11 libxcb libXext libXfixes xvidcore zeromq4 zlib
libXv lzma mesa openal opencv openjpeg_1 openssl pulseaudio rtmpdump ] ++ optional (disDarwinFix sambaExtlib) samba
samba SDL soxr speex v4l_utils vid-stab wavpack x264 x265 xavs xvidcore ++ optional openglExtlib mesa
zeromq4 zlib ++ optionals x11grabExtlib [ libXext libXfixes ]
] ++ optional faacExtlib faac; ++ optionals nonfreeLicensing [ faac faad2 fdk_aac openssl ]
++ optionals (!isDarwin) [
frei0r game-music-emu gsm jack2 libmodplug libssh libvpx openal
openjpeg_1 pulseaudio rtmpdump vid-stab wavpack x265 xavs
] ++ optional (!isDarwin && !isCygwin) libva
++ optionals isLinux [ alsaLib libraw1394 v4l_utils ];
# Build qt-faststart executable # Build qt-faststart executable
buildPhase = optional (qt-faststartProgram && (reqMin "0.9")) ''make tools/qt-faststart''; buildPhase = optional (qt-faststartProgram && (reqMin "0.9")) ''make tools/qt-faststart'';