3 # FFmpeg configure script
5 # Copyright (c) 2000-2002 Fabrice Bellard
6 # Copyright (c) 2005-2008 Diego Biurrun
7 # Copyright (c) 2005-2008 Mans Rullgard
10 # Prevent locale nonsense from breaking basic text processing.
14 # make sure we are running under a compatible shell
15 # try to make this part work with most shells
18 echo "Trying shell $1"
19 type "$1" > /dev/null 2>&1 && exec "$@"
23 (: ${foo%%bar}) 2> /dev/null
26 (: ${foo?}) 2> /dev/null
29 if test "$E1" != 0 || test "$E2" = 0; then
30 echo "Broken shell detected. Trying alternatives."
32 if test "0$FF_CONF_EXEC" -lt 1; then
34 try_exec bash "$0" "$@"
36 if test "0$FF_CONF_EXEC" -lt 2; then
38 try_exec ksh "$0" "$@"
40 if test "0$FF_CONF_EXEC" -lt 3; then
42 try_exec /usr/xpg4/bin/sh "$0" "$@"
44 echo "No compatible shell script interpreter found."
45 echo "This configure script requires a POSIX-compatible shell"
46 echo "such as bash or ksh."
47 echo "THIS IS NOT A BUG IN FFMPEG, DO NOT REPORT IT AS SUCH."
48 echo "Instead, install a working POSIX-compatible shell."
49 echo "Disabling this configure test will create a broken FFmpeg."
50 if test "$BASH_VERSION" = '2.04.0(1)-release'; then
51 echo "This bash version ($BASH_VERSION) is broken on your platform."
52 echo "Upgrade to a later version if available."
57 test -d /usr/xpg4/bin && PATH=/usr/xpg4/bin:$PATH
61 Usage: configure [options]
62 Options: [defaults in brackets after descriptions]
65 --help print this message
66 --list-decoders show all available decoders
67 --list-encoders show all available encoders
68 --list-hwaccels show all available hardware accelerators
69 --list-demuxers show all available demuxers
70 --list-muxers show all available muxers
71 --list-parsers show all available parsers
72 --list-protocols show all available protocols
73 --list-bsfs show all available bitstream filters
74 --list-indevs show all available input devices
75 --list-outdevs show all available output devices
76 --list-filters show all available filters
79 --logfile=FILE log tests and output to FILE [config.log]
80 --disable-logging do not log configure debug information
81 --fatal-warnings fail if any configure warning is generated
82 --prefix=PREFIX install in PREFIX [$prefix]
83 --bindir=DIR install binaries in DIR [PREFIX/bin]
84 --datadir=DIR install data files in DIR [PREFIX/share/ffmpeg]
85 --libdir=DIR install libs in DIR [PREFIX/lib]
86 --shlibdir=DIR install shared libs in DIR [PREFIX/lib]
87 --incdir=DIR install includes in DIR [PREFIX/include]
88 --mandir=DIR install man page in DIR [PREFIX/share/man]
91 --enable-gpl allow use of GPL code, the resulting libs
92 and binaries will be under GPL [no]
93 --enable-version3 upgrade (L)GPL to version 3 [no]
94 --enable-nonfree allow use of nonfree code, the resulting libs
95 and binaries will be unredistributable [no]
97 Configuration options:
98 --disable-static do not build static libraries [no]
99 --enable-shared build shared libraries [no]
100 --enable-small optimize for size instead of speed
101 --disable-runtime-cpudetect disable detecting cpu capabilities at runtime (smaller binary)
102 --enable-gray enable full grayscale support (slower color)
103 --disable-swscale-alpha disable alpha channel support in swscale
106 --disable-programs do not build command line programs
107 --disable-ffmpeg disable ffmpeg build
108 --disable-ffplay disable ffplay build
109 --disable-ffprobe disable ffprobe build
110 --disable-ffserver disable ffserver build
112 Documentation options:
113 --disable-doc do not build documentation
114 --disable-htmlpages do not build HTML documentation pages
115 --disable-manpages do not build man documentation pages
116 --disable-podpages do not build POD documentation pages
117 --disable-txtpages do not build text documentation pages
120 --disable-avdevice disable libavdevice build
121 --disable-avcodec disable libavcodec build
122 --disable-avformat disable libavformat build
123 --disable-avutil disable libavutil build
124 --disable-swresample disable libswresample build
125 --disable-swscale disable libswscale build
126 --disable-postproc disable libpostproc build
127 --disable-avfilter disable libavfilter build
128 --enable-avresample enable libavresample build [no]
129 --disable-pthreads disable pthreads [auto]
130 --disable-w32threads disable Win32 threads [auto]
131 --disable-os2threads disable OS/2 threads [auto]
132 --enable-x11grab enable X11 grabbing [no]
133 --disable-network disable network support [no]
134 --disable-dct disable DCT code
135 --disable-dwt disable DWT code
136 --disable-lsp disable LSP code
137 --disable-lzo disable LZO decoder code
138 --disable-mdct disable MDCT code
139 --disable-rdft disable RDFT code
140 --disable-fft disable FFT code
141 --enable-dxva2 enable DXVA2 code
142 --enable-vaapi enable VAAPI code [autodetect]
143 --enable-vda enable VDA code [autodetect]
144 --enable-vdpau enable VDPAU code [autodetect]
146 Individual component options:
147 --disable-everything disable all components listed below
148 --disable-encoder=NAME disable encoder NAME
149 --enable-encoder=NAME enable encoder NAME
150 --disable-encoders disable all encoders
151 --disable-decoder=NAME disable decoder NAME
152 --enable-decoder=NAME enable decoder NAME
153 --disable-decoders disable all decoders
154 --disable-hwaccel=NAME disable hwaccel NAME
155 --enable-hwaccel=NAME enable hwaccel NAME
156 --disable-hwaccels disable all hwaccels
157 --disable-muxer=NAME disable muxer NAME
158 --enable-muxer=NAME enable muxer NAME
159 --disable-muxers disable all muxers
160 --disable-demuxer=NAME disable demuxer NAME
161 --enable-demuxer=NAME enable demuxer NAME
162 --disable-demuxers disable all demuxers
163 --enable-parser=NAME enable parser NAME
164 --disable-parser=NAME disable parser NAME
165 --disable-parsers disable all parsers
166 --enable-bsf=NAME enable bitstream filter NAME
167 --disable-bsf=NAME disable bitstream filter NAME
168 --disable-bsfs disable all bitstream filters
169 --enable-protocol=NAME enable protocol NAME
170 --disable-protocol=NAME disable protocol NAME
171 --disable-protocols disable all protocols
172 --enable-indev=NAME enable input device NAME
173 --disable-indev=NAME disable input device NAME
174 --disable-indevs disable input devices
175 --enable-outdev=NAME enable output device NAME
176 --disable-outdev=NAME disable output device NAME
177 --disable-outdevs disable output devices
178 --disable-devices disable all devices
179 --enable-filter=NAME enable filter NAME
180 --disable-filter=NAME disable filter NAME
181 --disable-filters disable all filters
183 External library support:
184 --enable-avisynth enable reading of AVISynth script files [no]
185 --enable-bzlib enable bzlib [autodetect]
186 --enable-fontconfig enable fontconfig
187 --enable-frei0r enable frei0r video filtering
188 --enable-gnutls enable gnutls [no]
189 --enable-libaacplus enable AAC+ encoding via libaacplus [no]
190 --enable-libass enable libass subtitles rendering [no]
191 --enable-libbluray enable BluRay reading using libbluray [no]
192 --enable-libcaca enable textual display using libcaca
193 --enable-libcelt enable CELT decoding via libcelt [no]
194 --enable-libcdio enable audio CD grabbing with libcdio
195 --enable-libdc1394 enable IIDC-1394 grabbing using libdc1394
197 --enable-libfaac enable AAC encoding via libfaac [no]
198 --enable-libfdk-aac enable AAC encoding via libfdk-aac [no]
199 --enable-libflite enable flite (voice synthesis) support via libflite [no]
200 --enable-libfreetype enable libfreetype [no]
201 --enable-libgsm enable GSM de/encoding via libgsm [no]
202 --enable-libiec61883 enable iec61883 via libiec61883 [no]
203 --enable-libilbc enable iLBC de/encoding via libilbc [no]
204 --enable-libmodplug enable ModPlug via libmodplug [no]
205 --enable-libmp3lame enable MP3 encoding via libmp3lame [no]
206 --enable-libnut enable NUT (de)muxing via libnut,
207 native (de)muxer exists [no]
208 --enable-libopencore-amrnb enable AMR-NB de/encoding via libopencore-amrnb [no]
209 --enable-libopencore-amrwb enable AMR-WB decoding via libopencore-amrwb [no]
210 --enable-libopencv enable video filtering via libopencv [no]
211 --enable-libopenjpeg enable JPEG 2000 de/encoding via OpenJPEG [no]
212 --enable-libopus enable Opus decoding via libopus [no]
213 --enable-libpulse enable Pulseaudio input via libpulse [no]
214 --enable-librtmp enable RTMP[E] support via librtmp [no]
215 --enable-libschroedinger enable Dirac de/encoding via libschroedinger [no]
216 --enable-libspeex enable Speex de/encoding via libspeex [no]
217 --enable-libstagefright-h264 enable H.264 decoding via libstagefright [no]
218 --enable-libtheora enable Theora encoding via libtheora [no]
219 --enable-libtwolame enable MP2 encoding via libtwolame [no]
220 --enable-libutvideo enable Ut Video encoding and decoding via libutvideo [no]
221 --enable-libv4l2 enable libv4l2/v4l-utils [no]
222 --enable-libvo-aacenc enable AAC encoding via libvo-aacenc [no]
223 --enable-libvo-amrwbenc enable AMR-WB encoding via libvo-amrwbenc [no]
224 --enable-libvorbis enable Vorbis en/decoding via libvorbis,
225 native implementation exists [no]
226 --enable-libvpx enable VP8 de/encoding via libvpx [no]
227 --enable-libx264 enable H.264 encoding via x264 [no]
228 --enable-libxavs enable AVS encoding via xavs [no]
229 --enable-libxvid enable Xvid encoding via xvidcore,
230 native MPEG-4/Xvid encoder exists [no]
231 --enable-openal enable OpenAL 1.1 capture support [no]
232 --enable-openssl enable openssl [no]
233 --enable-zlib enable zlib [autodetect]
235 Advanced options (experts only):
236 --cross-prefix=PREFIX use PREFIX for compilation tools [$cross_prefix]
237 --enable-cross-compile assume a cross-compiler is used
238 --sysroot=PATH root of cross-build tree
239 --sysinclude=PATH location of cross-build system headers
240 --target-os=OS compiler targets OS [$target_os]
241 --target-exec=CMD command to run executables on target
242 --target-path=DIR path to view of build directory on target
243 --toolchain=NAME set tool defaults according to NAME
244 --nm=NM use nm tool NM [$nm_default]
245 --ar=AR use archive tool AR [$ar_default]
246 --as=AS use assembler AS [$as_default]
247 --yasmexe=EXE use yasm-compatible assembler EXE [$yasmexe_default]
248 --cc=CC use C compiler CC [$cc_default]
249 --cxx=CXX use C compiler CXX [$cxx_default]
250 --dep-cc=DEPCC use dependency generator DEPCC [$cc_default]
251 --ld=LD use linker LD [$ld_default]
252 --host-cc=HOSTCC use host C compiler HOSTCC
253 --host-cflags=HCFLAGS use HCFLAGS when compiling for host
254 --host-ld=HOSTLD use host linker HOSTLD
255 --host-ldflags=HLDFLAGS use HLDFLAGS when linking for host
256 --host-libs=HLIBS use libs HLIBS when linking for host
257 --host-os=OS compiler host OS [$target_os]
258 --extra-cflags=ECFLAGS add ECFLAGS to CFLAGS [$CFLAGS]
259 --extra-cxxflags=ECFLAGS add ECFLAGS to CXXFLAGS [$CXXFLAGS]
260 --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]
261 --extra-libs=ELIBS add ELIBS [$ELIBS]
262 --extra-version=STRING version string suffix []
263 --optflags=OPTFLAGS override optimization-related compiler flags
264 --build-suffix=SUFFIX library name suffix []
265 --malloc-prefix=PREFIX prefix malloc and related names with PREFIX
266 --progs-suffix=SUFFIX program name suffix []
267 --arch=ARCH select architecture [$arch]
268 --cpu=CPU select the minimum required CPU (affects
269 instruction selection, may crash on older CPUs)
270 --enable-pic build position-independent code
271 --enable-sram allow use of on-chip SRAM
272 --enable-thumb compile for Thumb instruction set
273 --disable-symver disable symbol versioning
274 --enable-hardcoded-tables use hardcoded tables instead of runtime generation
275 --disable-safe-bitstream-reader
276 disable buffer boundary checking in bitreaders
277 (faster, but may crash)
278 --enable-memalign-hack emulate memalign, interferes with memory debuggers
279 --enable-lto use link-time optimization
281 Optimization options (experts only):
282 --disable-asm disable all assembler optimizations
283 --disable-altivec disable AltiVec optimizations
284 --disable-amd3dnow disable 3DNow! optimizations
285 --disable-amd3dnowext disable 3DNow! extended optimizations
286 --disable-mmx disable MMX optimizations
287 --disable-mmxext disable MMXEXT optimizations
288 --disable-sse disable SSE optimizations
289 --disable-sse2 disable SSE2 optimizations
290 --disable-sse3 disable SSE3 optimizations
291 --disable-ssse3 disable SSSE3 optimizations
292 --disable-sse4 disable SSE4 optimizations
293 --disable-sse42 disable SSE4.2 optimizations
294 --disable-avx disable AVX optimizations
295 --disable-fma4 disable FMA4 optimizations
296 --disable-armv5te disable armv5te optimizations
297 --disable-armv6 disable armv6 optimizations
298 --disable-armv6t2 disable armv6t2 optimizations
299 --disable-armvfp disable ARM VFP optimizations
300 --disable-neon disable NEON optimizations
301 --disable-vis disable VIS optimizations
302 --disable-inline-asm disable use of inline assembler
303 --disable-yasm disable use of yasm assembler
304 --disable-mips32r2 disable MIPS32R2 optimizations
305 --disable-mipsdspr1 disable MIPS DSP ASE R1 optimizations
306 --disable-mipsdspr2 disable MIPS DSP ASE R2 optimizations
307 --disable-mipsfpu disable floating point MIPS optimizations
308 --disable-fast-unaligned consider unaligned accesses slow
309 --postproc-version=V build libpostproc version V.
310 Where V can be '$ALT_PP_VER_MAJOR.$ALT_PP_VER_MINOR.$ALT_PP_VER_MICRO' or 'current'. [$postproc_version_default]
312 Developer options (useful when working on FFmpeg itself):
313 --enable-coverage build with test coverage instrumentation
314 --disable-debug disable debugging symbols
315 --enable-debug=LEVEL set the debug level [$debuglevel]
316 --disable-optimizations disable compiler optimizations
317 --enable-extra-warnings enable more compiler warnings
318 --disable-stripping disable stripping of executables and shared libraries
319 --assert-level=level 0(default), 1 or 2, amount of assertion testing,
320 2 causes a slowdown at runtime.
321 --enable-memory-poisoning fill heap uninitialized allocated space with arbitrary data
322 --valgrind=VALGRIND run "make fate" tests through valgrind to detect memory
323 leaks and errors, using the specified valgrind binary.
324 Cannot be combined with --target-exec
325 --enable-ftrapv Trap arithmetic overflows
326 --samples=PATH location of test samples for FATE, if not set use
327 \$FATE_SAMPLES at make invocation time.
328 --enable-xmm-clobber-test check XMM registers for clobbering (Win64-only;
329 should be used only for debugging purposes)
330 --enable-random randomly enable/disable components
332 --enable-random=LIST randomly enable/disable specific components or
333 --disable-random=LIST component groups. LIST is a comma-separated list
334 of NAME[:PROB] entries where NAME is a component
335 (group) and PROB the probability associated with
337 --random-seed=VALUE seed value for --enable/disable-random
339 NOTE: Object files are built at the place where configure is launched.
347 echo "$@" >> $logfile
352 pr -n -t $1 >> $logfile
363 WARNINGS="${WARNINGS}WARNING: $*\n"
370 If you think configure made a mistake, make sure you are using the latest
371 version from Git. If the latest version fails, report the problem to the
372 ffmpeg-user@ffmpeg.org mailing list or IRC #ffmpeg on irc.freenode.net.
374 if disabled logging; then
376 Rerun configure with logging enabled (do not use --disable-logging), and
377 include the log this produces with your report.
381 Include the log file "$logfile" produced by configure as this will help
388 # Avoid locale weirdness, besides we really just want to translate ASCII.
390 echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
394 echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
398 echo "$*" | sed 's/["\\]/\\\0/g'
402 v=$(echo "$1" | sed "s/'/'\\\\''/g")
403 test "x$v" = "x${v#*[!A-Za-z0-9_/.+-]}" || v="'$v'"
408 echo "$@" | sed 's/^ *//;s/ */ /g;s/ *$//'
415 eval "case $v in $pat) echo $v ;; esac"
423 eval "case $v in $pat) ;; *) echo $v ;; esac"
430 for v; do eval $m; done
436 for v; do echo ${v}${suffix}; done
451 eval : \${$var:=$value}
458 eval $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')='$*'
462 eval echo \$$(echo "$1" | sed 's/[^A-Za-z0-9_]/_/g')
467 eval level=\${${var}_level:=0}
468 eval ${var}_${level}="\$$var"
469 eval ${var}_level=$(($level+1))
475 eval level=\${${var}_level:-0}
476 test $level = 0 && continue
477 eval level=$(($level-1))
478 eval $var="\${${var}_${level}}"
479 eval ${var}_level=$level
480 eval unset ${var}_${level}
502 enable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
508 disable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
514 enabled $var && continue
515 eval sel="\$${var}_select"
516 eval sgs="\$${var}_suggest"
520 enable_deep_weak $sgs
536 test "${1#!}" = "$1" && op== || op=!=
537 eval test "x\$${1#!}" $op "xyes"
541 test "${1#!}" = "$1" && op== || op=!=
542 eval test "x\$${1#!}" $op "xno"
547 enabled $opt || return 1
553 disabled $opt || return 1
559 enabled $opt && return 0
565 disabled $opt && return 0
572 eval : \${$opt:=\$${opt}_default}
580 [ $var = $value ] && return 0
588 enabled ${cfg}_checking && die "Circular dependency for $cfg."
589 disabled ${cfg}_checking && continue
590 enable ${cfg}_checking
592 eval dep_all="\$${cfg}_deps"
593 eval dep_any="\$${cfg}_deps_any"
594 eval dep_sel="\$${cfg}_select"
595 eval dep_sgs="\$${cfg}_suggest"
596 eval dep_ifa="\$${cfg}_if"
597 eval dep_ifn="\$${cfg}_if_any"
599 pushvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
600 check_deps $dep_all $dep_any $dep_sel $dep_sgs $dep_ifa $dep_ifn
601 popvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
603 [ -n "$dep_ifa" ] && { enabled_all $dep_ifa && enable_weak $cfg; }
604 [ -n "$dep_ifn" ] && { enabled_any $dep_ifn && enable_weak $cfg; }
605 enabled_all $dep_all || disable $cfg
606 enabled_any $dep_any || disable $cfg
607 disabled_any $dep_sel && disable $cfg
609 if enabled $cfg; then
610 eval dep_extralibs="\$${cfg}_extralibs"
611 test -n "$dep_extralibs" && add_extralibs $dep_extralibs
613 enable_deep_weak $dep_sgs
616 disable ${cfg}_checking
624 map 'eval echo "$v \${$v:-no}"' "$@" |
625 awk "BEGIN { split(\"$files\", files) }
627 c = \"$pfx\" toupper(\$1);
633 if (file ~ /\\.h\$/) {
634 printf(\"#define %s %d\\n\", c, v) >>file;
635 } else if (file ~ /\\.asm\$/) {
636 printf(\"%%define %s %d\\n\", c, v) >>file;
637 } else if (file ~ /\\.mak\$/) {
638 n = -v ? \"\" : \"!\";
639 printf(\"%s%s=yes\\n\", n, c) >>file;
649 enabled $v && printf "%s\n" ${v%$suf};
656 eval "$var=\"\$$var $*\""
662 eval "$var=\"$* \$$var\""
670 append CFLAGS $($cflags_filter "$@")
674 append CXXFLAGS $($cflags_filter "$@")
678 append ASFLAGS $($asflags_filter "$@")
682 append LDFLAGS $($ldflags_filter "$@")
686 prepend extralibs $($ldflags_filter "$@")
690 append host_cflags $($host_cflags_filter "$@")
694 append host_ldflags $($host_ldflags_filter "$@")
698 append compat_objs $1
700 map 'add_cppflags -D$v' "$@"
705 "$@" >> $logfile 2>&1
709 eval printf '%s\\n' $CC_O
713 eval printf '%s\\n' $CC_E
720 check_cmd $cc $CPPFLAGS $CFLAGS "$@" $CC_C $(cc_o $TMPO) $TMPC
727 check_cmd $cxx $CPPFLAGS $CFLAGS $CXXFLAGS "$@" $CXX_C -o $TMPO $TMPCPP
734 check_cmd $cc $CPPFLAGS $CFLAGS "$@" $(cc_e $TMPO) $TMPC
738 eval printf '%s\\n' $AS_O
745 check_cmd $as $CPPFLAGS $ASFLAGS "$@" $AS_C $(as_o $TMPO) $TMPC
749 log check_inline_asm "$@"
754 check_as "$@" <<EOF && enable $name
755 void foo(void){ __asm__ volatile($code); }
764 check_cmd $yasmexe $YASMFLAGS -Werror "$@" -o $TMPO $TMPS
768 eval printf '%s\\n' $LD_O
775 flags=$(filter_out '-l*' $@)
776 libs=$(filter '-l*' $@)
777 check_$type $($cflags_filter $flags) || return
778 flags=$($ldflags_filter $flags)
779 libs=$($ldflags_filter $libs)
780 check_cmd $ld $LDFLAGS $flags $(ld_o $TMPE) $TMPO $libs $extralibs
790 for hdr in $headers; do
791 echo "#include <$hdr>"
793 echo "int main(void) { $code; return 0; }"
794 } | check_$check "$@"
798 log check_cppflags "$@"
799 check_cc "$@" <<EOF && append CPPFLAGS "$@"
805 log check_cflags "$@"
806 set -- $($cflags_filter "$@")
807 check_cc "$@" <<EOF && append CFLAGS "$@"
813 log check_cxxflags "$@"
814 set -- $($cflags_filter "$@")
815 check_cxx "$@" <<EOF && append CXXFLAGS "$@"
821 log test_ldflags "$@"
822 check_ld "cc" "$@" <<EOF
823 int main(void){ return 0; }
828 log check_ldflags "$@"
829 test_ldflags "$@" && add_ldflags "$@"
833 log check_header "$@"
837 check_cpp "$@" <<EOF && enable_safe $header
848 check_ld "cc" "$@" <<EOF && enable $func
850 int main(void){ $func(); }
855 log check_mathfunc "$@"
859 test $narg = 2 && args="f, g" || args="f"
861 check_ld "cc" "$@" <<EOF && enable $func
863 float foo(float f, float g) { return $func($args); }
864 int main(void){ return (int) foo; }
868 check_func_headers(){
869 log check_func_headers "$@"
874 for hdr in $headers; do
875 echo "#include <$hdr>"
877 for func in $funcs; do
878 echo "long check_$func(void) { return (long) $func; }"
880 echo "int main(void) { return 0; }"
881 } | check_ld "cc" "$@" && enable $funcs && enable_safe $headers
884 check_class_headers_cpp(){
885 log check_class_headers_cpp "$@"
890 for hdr in $headers; do
891 echo "#include <$hdr>"
893 echo "int main(void) { "
895 for class in $classes; do
900 } | check_ld "cxx" "$@" && enable $funcs && enable_safe $headers
903 check_cpp_condition(){
904 log check_cpp_condition "$@"
911 #error "unsatisfied condition: $condition"
921 check_header $header && check_func $func "$@" && add_extralibs "$@"
929 check_func_headers "$headers" "$funcs" "$@" && add_extralibs "$@"
933 log check_lib_cpp "$@"
937 check_class_headers_cpp "$headers" "$classes" "$@" && add_extralibs "$@"
941 log check_pkg_config "$@"
946 $pkg_config --exists $pkg 2>/dev/null || return
947 pkg_cflags=$($pkg_config --cflags $pkg)
948 pkg_libs=$($pkg_config --libs $pkg)
949 check_func_headers "$headers" "$funcs" $pkg_cflags $pkg_libs "$@" &&
950 set_safe ${pkg}_cflags $pkg_cflags &&
951 set_safe ${pkg}_libs $pkg_libs
955 check_ld "cc" "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
961 # exit() is not async signal safe. _Exit (C99) and _exit (POSIX)
962 # are safe but may not be available everywhere. Thus we use
963 # raise(SIGTERM) instead. The check is run in a subshell so we
964 # can redirect the "Terminated" message from the shell. SIGBUS
965 # is not defined by standard C so it is used conditionally.
967 (check_exec "$@") >> $logfile 2>&1 <<EOF
969 static void sighandler(int sig){
975 int (*func_ptr)(void) = func;
977 signal(SIGILL, sighandler);
978 signal(SIGFPE, sighandler);
979 signal(SIGSEGV, sighandler);
981 signal(SIGBUS, sighandler);
994 check_code cc "$headers" "$type v" "$@" && enable_safe "$type"
1003 disable_safe "${struct}_${member}"
1004 check_code cc "$headers" "const void *p = &(($struct *)0)->$member" "$@" &&
1005 enable_safe "${struct}_${member}"
1013 check_lib $header $func "$@" || die "ERROR: $name not found"
1021 check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
1029 check_lib_cpp "$headers" "$classes" "$@" || die "ERROR: $name not found"
1032 require_pkg_config(){
1034 check_pkg_config "$@" || die "ERROR: $pkg not found"
1035 add_cflags $(get_safe ${pkg}_cflags)
1036 add_extralibs $(get_safe ${pkg}_libs)
1040 eval printf '%s\\n' $HOSTCC_O
1044 log check_host_cc "$@"
1047 check_cmd $host_cc $host_cflags "$@" $HOSTCC_C $(hostcc_o $TMPO) $TMPC
1050 check_host_cflags(){
1051 log check_host_cflags "$@"
1052 set -- $($host_cflags_filter "$@")
1053 check_host_cc "$@" <<EOF && append host_cflags "$@"
1061 "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
1065 cmp -s "$1" "$2" && echo "$2 is unchanged" && return
1066 mkdir -p "$(dirname $2)"
1070 # CONFIG_LIST contains configurable options, while HAVE_LIST is for
1071 # system-dependent things.
1133 incompatible_fork_abi
1185 safe_bitstream_reader
1275 incompatible_fork_abi
1307 $(add_suffix _external $ARCH_EXT_LIST)
1308 $(add_suffix _inline $ARCH_EXT_LIST)
1331 dev_bktr_ioctl_bt848_h
1332 dev_bktr_ioctl_meteor_h
1334 dev_video_bktr_ioctl_bt848_h
1335 dev_video_meteor_ioctl_meteor_h
1351 GetProcessAffinityMask
1352 GetProcessMemoryInfo
1354 GetSystemTimeAsFileTime
1364 jack_port_get_latency_range
1374 machine_ioctl_bt848_h
1375 machine_ioctl_meteor_h
1396 SetConsoleTextAttribute
1405 struct_group_source_req
1406 struct_ip_mreq_source
1409 struct_rusage_ru_maxrss
1410 struct_sctp_event_subscribe
1412 struct_sockaddr_sa_len
1413 struct_sockaddr_storage
1414 struct_v4l2_frmivalenum_discrete
1439 # options emitted with CONFIG_ prefix but not available on command line
1537 # code dependency declarations
1539 # architecture extensions
1549 mips32r2_deps="mips"
1550 mipsdspr1_deps="mips"
1551 mipsdspr2_deps="mips"
1558 x86_64_suggest="cmov fast_cmov"
1561 amd3dnowext_deps="amd3dnow"
1573 mmx_external_deps="yasm"
1574 mmx_inline_deps="inline_asm"
1575 mmx_suggest="mmx_external mmx_inline"
1577 for ext in $(filter_out mmx $ARCH_EXT_LIST_X86); do
1578 eval dep=\$${ext}_deps
1579 eval ${ext}_external_deps='"${dep}_external"'
1580 eval ${ext}_inline_deps='"${dep}_inline"'
1581 eval ${ext}_suggest='"${ext}_external ${ext}_inline"'
1584 aligned_stack_if_any="ppc x86"
1585 fast_64bit_if_any="alpha ia64 mips64 parisc64 ppc64 sparc64 x86_64"
1586 fast_clz_if_any="alpha armv5te avr32 mips ppc x86"
1587 fast_unaligned_if_any="armv6 ppc x86"
1589 inline_asm_deps="!tms470"
1590 need_memalign="altivec neon sse"
1592 symver_if_any="symver_asm_label symver_gnu_asm"
1600 mpegaudio_select="mpegaudiodsp"
1601 mpegaudiodsp_select="dct"
1602 mpegvideoenc_select="mpegvideo"
1604 # decoders / encoders / hardware accelerators
1605 aac_decoder_select="mdct sinewin"
1606 aac_encoder_select="mdct sinewin"
1607 aac_latm_decoder_select="aac_decoder aac_latm_parser"
1608 ac3_decoder_select="mdct ac3dsp ac3_parser"
1609 ac3_encoder_select="mdct ac3dsp"
1610 ac3_fixed_encoder_select="mdct ac3dsp"
1611 alac_encoder_select="lpc"
1612 amrnb_decoder_select="lsp"
1613 amrwb_decoder_select="lsp"
1614 amv_encoder_select="aandcttables"
1615 atrac1_decoder_select="mdct sinewin"
1616 atrac3_decoder_select="mdct"
1617 binkaudio_dct_decoder_select="mdct rdft dct sinewin"
1618 binkaudio_rdft_decoder_select="mdct rdft sinewin"
1619 cavs_decoder_select="golomb mpegvideo"
1620 comfortnoise_encoder_select="lpc"
1621 cook_decoder_select="mdct sinewin"
1622 cscd_decoder_select="lzo"
1623 cscd_decoder_suggest="zlib"
1624 dca_decoder_select="mdct"
1625 dirac_decoder_select="dwt golomb"
1626 dnxhd_encoder_select="aandcttables mpegvideoenc"
1627 dxa_decoder_select="zlib"
1628 eac3_decoder_select="ac3_decoder"
1629 eac3_encoder_select="ac3_encoder"
1630 eamad_decoder_select="aandcttables error_resilience mpegvideo"
1631 eatgq_decoder_select="aandcttables"
1632 eatqi_decoder_select="aandcttables error_resilience mpegvideo"
1633 exr_decoder_select="zlib"
1634 ffv1_decoder_select="golomb rangecoder"
1635 ffv1_encoder_select="rangecoder"
1636 ffvhuff_encoder_select="huffman"
1637 flac_decoder_select="golomb"
1638 flac_encoder_select="golomb lpc"
1639 flashsv_decoder_select="zlib"
1640 flashsv_encoder_select="zlib"
1641 flashsv2_encoder_select="zlib"
1642 flashsv2_decoder_select="zlib"
1643 flv_decoder_select="h263_decoder"
1644 flv_encoder_select="h263_encoder"
1645 fraps_decoder_select="huffman"
1646 h261_decoder_select="error_resilience mpegvideo"
1647 h261_encoder_select="aandcttables mpegvideoenc"
1648 h263_decoder_select="error_resilience h263_parser mpegvideo"
1649 h263_encoder_select="aandcttables error_resilience mpegvideoenc"
1650 h263_vaapi_hwaccel_select="vaapi h263_decoder"
1651 h263i_decoder_select="h263_decoder"
1652 h263p_encoder_select="h263_encoder"
1653 h264_crystalhd_decoder_select="crystalhd h264_mp4toannexb_bsf h264_parser"
1654 h264_decoder_select="error_resilience golomb h264chroma h264dsp h264pred h264qpel mpegvideo"
1655 h264_dxva2_hwaccel_deps="dxva2api_h"
1656 h264_dxva2_hwaccel_select="dxva2 h264_decoder"
1657 h264_vaapi_hwaccel_select="vaapi h264_decoder"
1658 h264_vda_decoder_select="vda h264_parser h264_decoder"
1659 h264_vda_hwaccel_deps="VideoDecodeAcceleration_VDADecoder_h pthreads"
1660 h264_vda_hwaccel_select="vda h264_decoder"
1661 h264_vdpau_decoder_select="vdpau h264_decoder"
1662 huffyuv_encoder_select="huffman"
1663 iac_decoder_select="fft mdct sinewin"
1664 imc_decoder_select="fft mdct sinewin"
1665 jpegls_decoder_select="golomb"
1666 jpegls_encoder_select="golomb"
1667 ljpeg_encoder_select="aandcttables mpegvideoenc"
1668 loco_decoder_select="golomb"
1669 mdec_decoder_select="error_resilience mpegvideo"
1670 mjpeg_encoder_select="aandcttables mpegvideoenc"
1671 mlp_decoder_select="mlp_parser"
1672 mp1_decoder_select="mpegaudio"
1673 mp1float_decoder_select="mpegaudio"
1674 mp2_decoder_select="mpegaudio"
1675 mp2float_decoder_select="mpegaudio"
1676 mp3_decoder_select="mpegaudio"
1677 mp3adu_decoder_select="mpegaudio"
1678 mp3adufloat_decoder_select="mpegaudio"
1679 mp3float_decoder_select="mpegaudio"
1680 mp3on4_decoder_select="mpegaudio"
1681 mp3on4float_decoder_select="mpegaudio"
1682 mpc7_decoder_select="mpegaudiodsp"
1683 mpc8_decoder_select="mpegaudiodsp"
1684 mpeg_vdpau_decoder_select="vdpau mpegvideo_decoder"
1685 mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h"
1686 mpeg_xvmc_decoder_select="mpegvideo_decoder"
1687 mpeg1_vdpau_decoder_select="vdpau mpeg1video_decoder"
1688 mpeg1_vdpau_hwaccel_select="vdpau mpeg1video_decoder"
1689 mpeg1video_decoder_select="error_resilience mpegvideo"
1690 mpeg1video_encoder_select="aandcttables error_resilience mpegvideoenc"
1691 mpeg2_crystalhd_decoder_select="crystalhd"
1692 mpeg2_dxva2_hwaccel_deps="dxva2api_h"
1693 mpeg2_dxva2_hwaccel_select="dxva2 mpeg2video_decoder"
1694 mpeg2_vdpau_hwaccel_select="vdpau mpeg2video_decoder"
1695 mpeg2_vaapi_hwaccel_select="vaapi mpeg2video_decoder"
1696 mpeg2video_decoder_select="error_resilience mpegvideo"
1697 mpeg2video_encoder_select="aandcttables error_resilience mpegvideoenc"
1698 mpeg4_crystalhd_decoder_select="crystalhd"
1699 mpeg4_decoder_select="h263_decoder mpeg4video_parser"
1700 mpeg4_encoder_select="h263_encoder"
1701 mpeg4_vaapi_hwaccel_select="vaapi mpeg4_decoder"
1702 mpeg4_vdpau_decoder_select="vdpau mpeg4_decoder"
1703 msmpeg4_crystalhd_decoder_select="crystalhd"
1704 msmpeg4v1_decoder_select="h263_decoder"
1705 msmpeg4v1_encoder_select="h263_encoder"
1706 msmpeg4v2_decoder_select="h263_decoder"
1707 msmpeg4v2_encoder_select="h263_encoder"
1708 msmpeg4v3_decoder_select="h263_decoder"
1709 msmpeg4v3_encoder_select="h263_encoder"
1710 mss2_decoder_select="vc1_decoder"
1711 nellymoser_decoder_select="mdct sinewin"
1712 nellymoser_encoder_select="mdct sinewin"
1713 nuv_decoder_select="lzo"
1714 png_decoder_select="zlib"
1715 png_encoder_select="zlib"
1716 qcelp_decoder_select="lsp"
1717 qdm2_decoder_select="mdct rdft mpegaudiodsp"
1718 ra_144_encoder_select="lpc"
1719 ralf_decoder_select="golomb"
1720 rv10_decoder_select="h263_decoder"
1721 rv10_encoder_select="h263_encoder"
1722 rv20_decoder_select="h263_decoder"
1723 rv20_encoder_select="h263_encoder"
1724 rv30_decoder_select="error_resilience golomb h264chroma h264pred h264qpel mpegvideo"
1725 rv40_decoder_select="error_resilience golomb h264chroma h264pred h264qpel mpegvideo"
1726 shorten_decoder_select="golomb"
1727 sipr_decoder_select="lsp"
1728 snow_decoder_select="dwt rangecoder"
1729 snow_encoder_select="aandcttables dwt error_resilience mpegvideoenc rangecoder"
1730 sonic_decoder_select="golomb"
1731 sonic_encoder_select="golomb"
1732 sonic_ls_encoder_select="golomb"
1733 svq1_decoder_select="error_resilience mpegvideo"
1734 svq1_encoder_select="aandcttables error_resilience mpegvideoenc"
1735 svq3_decoder_select="error_resilience golomb h264chroma h264dsp h264pred h264qpel mpegvideo"
1736 svq3_decoder_suggest="zlib"
1737 theora_decoder_select="vp3_decoder"
1738 tiff_decoder_suggest="zlib"
1739 tiff_encoder_suggest="zlib"
1740 truehd_decoder_select="mlp_parser"
1741 tscc_decoder_select="zlib"
1742 twinvq_decoder_select="mdct lsp sinewin"
1743 utvideo_encoder_select="huffman"
1744 vc1_crystalhd_decoder_select="crystalhd"
1745 vc1_decoder_select="h263_decoder h264chroma h264qpel"
1746 vc1_dxva2_hwaccel_deps="dxva2api_h"
1747 vc1_dxva2_hwaccel_select="dxva2 vc1_decoder"
1748 vc1_vaapi_hwaccel_select="vaapi vc1_decoder"
1749 vc1_vdpau_decoder_select="vdpau vc1_decoder"
1750 vc1image_decoder_select="vc1_decoder"
1751 vorbis_decoder_select="mdct"
1752 vorbis_encoder_select="mdct"
1753 vp3_decoder_select="vp3dsp"
1754 vp5_decoder_select="vp3dsp"
1755 vp6_decoder_select="huffman vp3dsp"
1756 vp6a_decoder_select="vp6_decoder"
1757 vp6f_decoder_select="vp6_decoder"
1758 vp8_decoder_select="h264pred h264qpel"
1759 wmapro_decoder_select="mdct sinewin"
1760 wmav1_decoder_select="mdct sinewin"
1761 wmav1_encoder_select="mdct sinewin"
1762 wmav2_decoder_select="mdct sinewin"
1763 wmav2_encoder_select="mdct sinewin"
1764 wmavoice_decoder_select="lsp rdft dct mdct sinewin"
1765 wmv1_decoder_select="h263_decoder"
1766 wmv1_encoder_select="h263_encoder"
1767 wmv2_decoder_select="h263_decoder"
1768 wmv2_encoder_select="h263_encoder"
1769 wmv3_decoder_select="vc1_decoder"
1770 wmv3_crystalhd_decoder_select="crystalhd"
1771 wmv3_dxva2_hwaccel_select="vc1_dxva2_hwaccel"
1772 wmv3_vaapi_hwaccel_select="vc1_vaapi_hwaccel"
1773 wmv3_vdpau_decoder_select="vc1_vdpau_decoder"
1774 wmv3image_decoder_select="wmv3_decoder"
1775 zerocodec_decoder_select="zlib"
1776 zlib_decoder_select="zlib"
1777 zlib_encoder_select="zlib"
1778 zmbv_decoder_select="zlib"
1779 zmbv_encoder_select="zlib"
1781 crystalhd_deps="libcrystalhd_libcrystalhd_if_h"
1782 vaapi_deps="va_va_h"
1783 vda_deps="VideoDecodeAcceleration_VDADecoder_h pthreads"
1784 vdpau_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1787 h264_parser_select="error_resilience golomb h264dsp h264pred mpegvideo"
1788 mpeg4video_parser_select="error_resilience mpegvideo"
1789 mpegvideo_parser_select="error_resilience mpegvideo"
1790 vc1_parser_select="error_resilience mpegvideo"
1792 # external libraries
1793 libaacplus_encoder_deps="libaacplus"
1794 libcelt_decoder_deps="libcelt"
1795 libfaac_encoder_deps="libfaac"
1796 libfdk_aac_encoder_deps="libfdk_aac"
1797 libgsm_decoder_deps="libgsm"
1798 libgsm_encoder_deps="libgsm"
1799 libgsm_ms_decoder_deps="libgsm"
1800 libgsm_ms_encoder_deps="libgsm"
1801 libilbc_decoder_deps="libilbc"
1802 libilbc_encoder_deps="libilbc"
1803 libmodplug_demuxer_deps="libmodplug"
1804 libmp3lame_encoder_deps="libmp3lame"
1805 libopencore_amrnb_decoder_deps="libopencore_amrnb"
1806 libopencore_amrnb_encoder_deps="libopencore_amrnb"
1807 libopencore_amrwb_decoder_deps="libopencore_amrwb"
1808 libopenjpeg_decoder_deps="libopenjpeg"
1809 libopenjpeg_encoder_deps="libopenjpeg"
1810 libopus_decoder_deps="libopus"
1811 libopus_encoder_deps="libopus"
1812 libschroedinger_decoder_deps="libschroedinger"
1813 libschroedinger_encoder_deps="libschroedinger"
1814 libspeex_decoder_deps="libspeex"
1815 libspeex_encoder_deps="libspeex"
1816 libstagefright_h264_decoder_deps="libstagefright_h264"
1817 libtheora_encoder_deps="libtheora"
1818 libtwolame_encoder_deps="libtwolame"
1819 libvo_aacenc_encoder_deps="libvo_aacenc"
1820 libvo_amrwbenc_encoder_deps="libvo_amrwbenc"
1821 libvorbis_decoder_deps="libvorbis"
1822 libvorbis_encoder_deps="libvorbis"
1823 libvpx_decoder_deps="libvpx"
1824 libvpx_encoder_deps="libvpx"
1825 libx264_encoder_deps="libx264"
1826 libx264rgb_encoder_deps="libx264"
1827 libxavs_encoder_deps="libxavs"
1828 libxvid_encoder_deps="libxvid"
1829 libutvideo_decoder_deps="libutvideo"
1830 libutvideo_encoder_deps="libutvideo"
1833 ac3_demuxer_select="ac3_parser"
1834 asf_stream_muxer_select="asf_muxer"
1835 avisynth_demuxer_deps="avisynth"
1836 dirac_demuxer_select="dirac_parser"
1837 dts_demuxer_select="dca_parser"
1838 dtshd_demuxer_select="dca_parser"
1839 eac3_demuxer_select="ac3_parser"
1840 f4v_muxer_select="mov_muxer"
1841 flac_demuxer_select="flac_parser"
1842 ipod_muxer_select="mov_muxer"
1843 libnut_demuxer_deps="libnut"
1844 libnut_muxer_deps="libnut"
1845 matroska_audio_muxer_select="matroska_muxer"
1846 matroska_demuxer_suggest="bzlib lzo zlib"
1847 mov_demuxer_suggest="zlib"
1848 mp3_demuxer_select="mpegaudio_parser"
1849 mp4_muxer_select="mov_muxer"
1850 mpegts_muxer_select="adts_muxer latm_muxer mpegvideo"
1851 mpegtsraw_demuxer_select="mpegts_demuxer"
1852 mxf_d10_muxer_select="mxf_muxer"
1853 ogg_demuxer_select="golomb"
1854 psp_muxer_select="mov_muxer"
1855 rtp_demuxer_select="sdp_demuxer"
1856 rtp_muxer_select="mpegvideo"
1857 rtpdec_select="asf_demuxer rm_demuxer rtp_protocol mpegts_demuxer mov_demuxer"
1858 rtsp_demuxer_select="http_protocol rtpdec"
1859 rtsp_muxer_select="rtp_muxer http_protocol rtp_protocol"
1860 sap_demuxer_select="sdp_demuxer"
1861 sap_muxer_select="rtp_muxer rtp_protocol"
1862 sdp_demuxer_select="rtpdec"
1863 smoothstreaming_muxer_select="ismv_muxer"
1864 spdif_muxer_select="aac_parser"
1865 tak_demuxer_select="tak_parser"
1866 tg2_muxer_select="mov_muxer"
1867 tgp_muxer_select="mov_muxer"
1868 w64_demuxer_deps="wav_demuxer"
1871 alsa_indev_deps="alsa_asoundlib_h snd_pcm_htimestamp"
1872 alsa_outdev_deps="alsa_asoundlib_h"
1873 bktr_indev_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
1874 caca_outdev_deps="libcaca"
1875 dshow_indev_deps="IBaseFilter"
1876 dshow_indev_extralibs="-lpsapi -lole32 -lstrmiids -luuid"
1877 dv1394_indev_deps="dv1394 dv_demuxer"
1878 fbdev_indev_deps="linux_fb_h"
1879 iec61883_indev_deps="libiec61883"
1880 jack_indev_deps="jack_jack_h sem_timedwait"
1881 lavfi_indev_deps="avfilter"
1882 libcdio_indev_deps="libcdio"
1883 libdc1394_indev_deps="libdc1394"
1884 libv4l2_indev_deps="libv4l2"
1885 openal_indev_deps="openal"
1886 oss_indev_deps_any="soundcard_h sys_soundcard_h"
1887 oss_outdev_deps_any="soundcard_h sys_soundcard_h"
1888 pulse_indev_deps="libpulse"
1889 sdl_outdev_deps="sdl"
1890 sndio_indev_deps="sndio_h"
1891 sndio_outdev_deps="sndio_h"
1892 v4l_indev_deps="linux_videodev_h"
1893 v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h"
1894 vfwcap_indev_deps="capCreateCaptureWindow vfwcap_defines"
1895 vfwcap_indev_extralibs="-lavicap32"
1896 x11grab_indev_deps="x11grab"
1899 bluray_protocol_deps="libbluray"
1900 ffrtmpcrypt_protocol_deps="!librtmp_protocol"
1901 ffrtmpcrypt_protocol_deps_any="gcrypt nettle openssl"
1902 ffrtmpcrypt_protocol_select="tcp_protocol"
1903 ffrtmphttp_protocol_deps="!librtmp_protocol"
1904 ffrtmphttp_protocol_select="http_protocol"
1905 gopher_protocol_deps="network"
1906 httpproxy_protocol_deps="network"
1907 httpproxy_protocol_select="tcp_protocol"
1908 http_protocol_deps="network"
1909 http_protocol_select="tcp_protocol"
1910 https_protocol_select="tls_protocol"
1911 librtmp_protocol_deps="librtmp"
1912 librtmpe_protocol_deps="librtmp"
1913 librtmps_protocol_deps="librtmp"
1914 librtmpt_protocol_deps="librtmp"
1915 librtmpte_protocol_deps="librtmp"
1916 mmsh_protocol_select="http_protocol"
1917 mmst_protocol_deps="network"
1918 rtmp_protocol_deps="!librtmp_protocol"
1919 rtmp_protocol_select="tcp_protocol"
1920 rtmpe_protocol_select="ffrtmpcrypt_protocol"
1921 rtmps_protocol_deps="!librtmp_protocol"
1922 rtmps_protocol_select="tls_protocol"
1923 rtmpt_protocol_select="ffrtmphttp_protocol"
1924 rtmpte_protocol_select="ffrtmpcrypt_protocol ffrtmphttp_protocol"
1925 rtmpts_protocol_select="ffrtmphttp_protocol https_protocol"
1926 rtp_protocol_select="udp_protocol"
1927 sctp_protocol_deps="network struct_sctp_event_subscribe"
1928 tcp_protocol_deps="network"
1929 tls_protocol_deps_any="openssl gnutls"
1930 tls_protocol_select="tcp_protocol"
1931 udp_protocol_deps="network"
1934 aconvert_filter_deps="swresample"
1935 amovie_filter_deps="avcodec avformat"
1936 aresample_filter_deps="swresample"
1937 ass_filter_deps="libass"
1938 asyncts_filter_deps="avresample"
1939 atempo_filter_deps="avcodec rdft"
1940 blackframe_filter_deps="gpl"
1941 boxblur_filter_deps="gpl"
1942 colormatrix_filter_deps="gpl"
1943 cropdetect_filter_deps="gpl"
1944 decimate_filter_deps="gpl avcodec"
1945 delogo_filter_deps="gpl"
1946 deshake_filter_deps="avcodec"
1947 drawtext_filter_deps="libfreetype"
1948 ebur128_filter_deps="gpl"
1949 flite_filter_deps="libflite"
1950 frei0r_filter_deps="frei0r dlopen"
1951 frei0r_filter_extralibs='$ldl'
1952 frei0r_src_filter_deps="frei0r dlopen"
1953 frei0r_src_filter_extralibs='$ldl'
1954 geq_filter_deps="gpl"
1955 hqdn3d_filter_deps="gpl"
1956 hue_filter_deps="gpl"
1957 movie_filter_deps="avcodec avformat"
1958 mp_filter_deps="gpl avcodec swscale postproc inline_asm"
1959 mptestsrc_filter_deps="gpl"
1960 negate_filter_deps="lut_filter"
1961 resample_filter_deps="avresample"
1962 ocv_filter_deps="libopencv"
1963 pan_filter_deps="swresample"
1964 removelogo_filter_deps="avcodec avformat swscale"
1965 scale_filter_deps="swscale"
1966 smartblur_filter_deps="gpl swscale"
1967 showspectrum_filter_deps="avcodec rdft"
1968 super2xsai_filter_deps="gpl"
1969 tinterlace_filter_deps="gpl"
1970 yadif_filter_deps="gpl"
1971 pixfmts_super2xsai_test_deps="super2xsai_filter"
1972 tinterlace_merge_test_deps="tinterlace_filter"
1973 tinterlace_pad_test_deps="tinterlace_filter"
1976 avcodec_deps="avutil"
1977 avdevice_deps="avutil avcodec avformat"
1978 avfilter_deps="avutil"
1979 avformat_deps="avutil avcodec"
1980 avresample_deps="avutil"
1982 swscale_deps="avutil"
1985 ffmpeg_deps="avcodec avfilter avformat swscale swresample"
1986 ffmpeg_select="ffbuffersink_filter format_filter aformat_filter
1987 setpts_filter null_filter anull_filter ffabuffersink_filter"
1988 ffplay_deps="avcodec avformat swscale swresample sdl"
1989 ffplay_select="ffbuffersink_filter rdft crop_filter"
1990 ffprobe_deps="avcodec avformat"
1991 ffserver_deps="avformat ffm_muxer fork rtp_protocol rtsp_demuxer"
1992 ffserver_extralibs='$ldl'
1995 podpages_deps="perl"
1996 manpages_deps="perl pod2man"
1997 htmlpages_deps="texi2html"
1998 txtpages_deps="makeinfo"
1999 doc_deps_any="manpages htmlpages podpages txtpages"
2001 # default parameters
2003 logfile="config.log"
2005 # installation paths
2006 prefix_default="/usr/local"
2007 bindir_default='${prefix}/bin'
2008 datadir_default='${prefix}/share/ffmpeg'
2009 incdir_default='${prefix}/include'
2010 libdir_default='${prefix}/lib'
2011 mandir_default='${prefix}/share/man'
2012 shlibdir_default="$libdir_default"
2013 postproc_version_default="current"
2019 host_cc_default="gcc"
2025 pkg_config_default=pkg-config
2027 strip_default="strip"
2028 yasmexe_default="yasm"
2033 arch_default=$(uname -m)
2037 target_os_default=$(tolower $(uname -s))
2038 host_os=$target_os_default
2040 # alternative libpostproc version
2043 ALT_PP_VER_MICRO=101
2044 ALT_PP_VER=$ALT_PP_VER_MAJOR.$ALT_PP_VER_MINOR.$ALT_PP_VER_MICRO
2046 # configurable options
2047 enable $PROGRAM_LIST
2048 enable $DOCUMENT_LIST
2049 enable $(filter_out avresample $LIBRARY_LIST)
2057 enable optimizations
2058 enable runtime_cpudetect
2059 enable safe_bitstream_reader
2061 enable swscale_alpha
2064 SHFLAGS='-shared -Wl,-soname,$$(@F)'
2065 FFSERVERLDFLAGS=-Wl,-E
2068 FULLNAME='$(NAME)$(BUILDSUF)'
2069 LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
2072 SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
2073 SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
2074 SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
2075 LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
2076 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'
2077 SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR) $(SLIBNAME)'
2097 host_cflags='-D_ISOC99_SOURCE -D_XOPEN_SOURCE=600 -O3 -g'
2099 host_cflags_filter=echo
2100 host_ldflags_filter=echo
2102 target_path='$(CURDIR)'
2104 # since the object filename is not given with the -MM flag, the compiler
2105 # is only able to print the basename, and we must add the path ourselves
2106 DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o," > $(@:.o=.d)'
2110 if test -f configure; then
2113 source_path=$(cd $(dirname "$0"); pwd)
2114 echo "$source_path" | grep -q '[[:blank:]]' &&
2115 die "Out of tree builds are impossible with whitespace in source path."
2116 test -e "$source_path/config.h" &&
2117 die "Out of tree builds are impossible with config.h in source dir."
2124 FFMPEG_CONFIGURATION="${FFMPEG_CONFIGURATION# } ${l}${r}"
2130 file=$source_path/$3
2131 sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
2134 ENCODER_LIST=$(find_things encoder ENC libavcodec/allcodecs.c)
2135 DECODER_LIST=$(find_things decoder DEC libavcodec/allcodecs.c)
2136 HWACCEL_LIST=$(find_things hwaccel HWACCEL libavcodec/allcodecs.c)
2137 PARSER_LIST=$(find_things parser PARSER libavcodec/allcodecs.c)
2138 BSF_LIST=$(find_things bsf BSF libavcodec/allcodecs.c)
2139 MUXER_LIST=$(find_things muxer _MUX libavformat/allformats.c)
2140 DEMUXER_LIST=$(find_things demuxer DEMUX libavformat/allformats.c)
2141 OUTDEV_LIST=$(find_things outdev OUTDEV libavdevice/alldevices.c)
2142 INDEV_LIST=$(find_things indev _IN libavdevice/alldevices.c)
2143 PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
2144 FILTER_LIST=$(find_things filter FILTER libavfilter/allfilters.c)
2160 for n in $COMPONENT_LIST; do
2161 v=$(toupper ${n%s})_LIST
2163 eval ${n}_if_any="\$$v"
2166 enable $ARCH_EXT_LIST
2169 echo "Unknown option \"$1\"."
2170 echo "See $0 --help for available options."
2177 echo $* | sed s/$suffix//g | tr ' ' '\n' | sort | pr -3 -t
2189 is_in ${comp} $COMPONENT_LIST && eval comp=\$$(toupper ${comp%s})_LIST
2190 echo "prob ${prob:-0.5}"
2198 random_seed=$(awk "BEGIN { srand($random_seed); print srand() }")
2199 $action $(rand_list "$@" | awk "BEGIN { srand($random_seed) } \$1 == \"prob\" { prob = \$2; next } rand() < prob { print }")
2205 --extra-ldflags=*) add_ldflags $optval
2207 --extra-libs=*) add_extralibs $optval
2209 --disable-devices) disable $INDEV_LIST $OUTDEV_LIST
2211 --enable-debug=*) debuglevel="$optval"
2214 disable $PROGRAM_LIST
2216 --disable-everything)
2217 map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
2219 --enable-random|--disable-random)
2220 action=${opt%%-random}
2221 do_random ${action#--} $COMPONENT_LIST
2223 --enable-random=*|--disable-random=*)
2224 action=${opt%%-random=*}
2225 do_random ${action#--} $optval
2227 --enable-*=*|--disable-*=*)
2228 eval $(echo "${opt%%=*}" | sed 's/--/action=/;s/-/ thing=/')
2229 is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt"
2230 eval list=\$$(toupper $thing)_LIST
2231 name=$(echo "${optval}" | sed "s/,/_${thing}|/g")_${thing}
2232 list=$(filter "$name" $list)
2233 [ "$list" = "" ] && warn "Option $opt did not match anything"
2236 --enable-?*|--disable-?*)
2237 eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
2238 if is_in $option $COMPONENT_LIST; then
2239 test $action = disable && action=unset
2240 eval $action \$$(toupper ${option%s})_LIST
2241 elif is_in $option $CMDLINE_SELECT; then
2248 NAME="${opt#--list-}"
2249 is_in $NAME $COMPONENT_LIST || die_unknown $opt
2251 eval show_list $NAME \$$(toupper $NAME)_LIST
2253 --help|-h) show_help
2255 --fatal-warnings) enable fatal_warnings
2258 optname="${opt%%=*}"
2259 optname="${optname#--}"
2260 optname=$(echo "$optname" | sed 's/-/_/g')
2261 if is_in $optname $CMDLINE_SET; then
2262 eval $optname='$optval'
2263 elif is_in $optname $CMDLINE_APPEND; then
2264 append $optname "$optval"
2272 disabled logging && logfile=/dev/null
2274 echo "# $0 $FFMPEG_CONFIGURATION" > $logfile
2277 test -n "$cross_prefix" && enable cross_compile
2279 if enabled cross_compile; then
2280 test -n "$arch" && test -n "$target_os" ||
2281 die "Must specify target arch and OS when cross-compiling"
2284 set_default postproc_version
2286 # Check if we should build alternative libpostproc version instead of current
2287 if test "$postproc_version" = $ALT_PP_VER; then
2288 LIBPOSTPROC_VERSION=$ALT_PP_VER
2289 LIBPOSTPROC_VERSION_MAJOR=$ALT_PP_VER_MAJOR
2290 LIBPOSTPROC_VERSION_MINOR=$ALT_PP_VER_MINOR
2291 LIBPOSTPROC_VERSION_MICRO=$ALT_PP_VER_MICRO
2292 elif test "$postproc_version" != current; then
2293 die "Invalid argument to --postproc-version. See --help output."
2296 ar_default="${cross_prefix}${ar_default}"
2297 cc_default="${cross_prefix}${cc_default}"
2298 cxx_default="${cross_prefix}${cxx_default}"
2299 nm_default="${cross_prefix}${nm_default}"
2300 pkg_config_default="${cross_prefix}${pkg_config_default}"
2301 ranlib="${cross_prefix}${ranlib}"
2302 strip_default="${cross_prefix}${strip_default}"
2304 sysinclude_default="${sysroot}/usr/include"
2306 case "$toolchain" in
2309 add_cflags -faddress-sanitizer
2310 add_ldflags -faddress-sanitizer
2314 add_cflags -fthread-sanitizer
2315 add_ldflags -fthread-sanitizer
2318 cc_default="c99wrap cl"
2319 ld_default="c99wrap link"
2320 nm_default="dumpbin -symbols"
2322 target_os_default="win32"
2325 die "Unknown toolchain $toolchain"
2329 set_default arch cc cxx pkg_config strip sysinclude target_os yasmexe
2330 enabled cross_compile || host_cc_default=$cc
2333 if ! $pkg_config --version >/dev/null 2>&1; then
2334 warn "$pkg_config not found, library detection may fail."
2340 mingw32*|win32|win64|cygwin*|*-dos|freedos|opendos|os/2*|symbian) echo .exe ;;
2344 EXESUF=$(exesuf $target_os)
2345 HOSTEXESUF=$(exesuf $host_os)
2347 # set temporary file name
2348 : ${TMPDIR:=$TEMPDIR}
2352 if ! check_cmd mktemp -u XXXXXX; then
2353 # simple replacement for missing mktemp
2354 # NOT SAFE FOR GENERAL USE
2356 echo "${2%%XXX*}.${HOSTNAME}.${UID}.$$"
2361 tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
2362 (set -C; exec > $tmp) 2>/dev/null ||
2363 die "Unable to create temporary file in $TMPDIR."
2364 append TMPFILES $tmp
2368 trap 'rm -f -- $TMPFILES' EXIT
2373 tmpfile TMPE $EXESUF
2384 # make sure we can execute files in $TMPDIR
2385 cat > $TMPSH 2>> $logfile <<EOF
2388 chmod +x $TMPSH >> $logfile 2>&1
2389 if ! $TMPSH >> $logfile 2>&1; then
2391 Unable to create and execute files in $TMPDIR. Set the TMPDIR environment
2392 variable to another directory and make sure that it is not mounted noexec.
2394 die "Sanity test failed."
2400 -std=c99) echo -c99 ;;
2401 -mcpu=*) echo -arch ${flag#*=} ;;
2402 -mieee) echo -ieee ;;
2403 -O*|-fast) echo $flag ;;
2404 -fno-math-errno) echo -assume nomath_errno ;;
2406 -Wall) echo -msg_enable level2 ;;
2407 -Wno-pointer-sign) echo -msg_disable ptrmismatch1 ;;
2408 -Wl,*) echo $flag ;;
2418 -fomit-frame-pointer) echo -Oy ;;
2420 -Wall) echo -W4 -wd4244 -wd4127 -wd4018 -wd4389 \
2421 -wd4146 -wd4057 -wd4204 -wd4706 -wd4305 \
2422 -wd4152 -wd4324 -we4013 -wd4100 -wd4214 \
2428 -fno-signed-zeros) ;;
2429 -lz) echo zlib.lib ;;
2430 -lavifil32) echo vfw32.lib ;;
2431 -lavicap32) echo vfw32.lib user32.lib ;;
2432 -l*) echo ${flag#-l}.lib ;;
2441 -flto) echo -Mipa=fast,libopt,libinline,vestigial ;;
2442 -fomit-frame-pointer) echo -Mnoframe ;;
2453 case "${flag#*=}" in
2454 native) echo -xtarget=native ;;
2455 v9|niagara) echo -xarch=sparc ;;
2456 ultrasparc) echo -xarch=sparcvis ;;
2457 ultrasparc3|niagara2) echo -xarch=sparcvis2 ;;
2458 i586|pentium) echo -xchip=pentium ;;
2459 i686|pentiumpro|pentium2) echo -xtarget=pentium_pro ;;
2460 pentium3*|c3-2) echo -xtarget=pentium3 ;;
2461 pentium-m) echo -xarch=sse2 -xchip=pentium3 ;;
2462 pentium4*) echo -xtarget=pentium4 ;;
2463 prescott|nocona) echo -xarch=sse3 -xchip=pentium4 ;;
2464 *-sse3) echo -xarch=sse3 ;;
2465 core2) echo -xarch=ssse3 -xchip=core2 ;;
2466 corei7) echo -xarch=sse4_2 -xchip=nehalem ;;
2467 corei7-avx) echo -xarch=avx -xchip=sandybridge ;;
2468 amdfam10|barcelona|bdver*) echo -xarch=sse4_1 ;;
2469 athlon-4|athlon-[mx]p) echo -xarch=ssea ;;
2470 k8|opteron|athlon64|athlon-fx)
2471 echo -xarch=sse2a ;;
2472 athlon*) echo -xarch=pentium_proa ;;
2475 -std=c99) echo -xc99 ;;
2476 -fomit-frame-pointer) echo -xregs=frameptr ;;
2477 -fPIC) echo -KPIC -xcode=pic32 ;;
2478 -W*,*) echo $flag ;;
2489 case "${flag#*=}" in
2490 armv7-a|cortex-a*) echo -mv=7a8 ;;
2491 armv7-r|cortex-r*) echo -mv=7r4 ;;
2492 armv7-m|cortex-m*) echo -mv=7m3 ;;
2493 armv6*|arm11*) echo -mv=6 ;;
2494 armv5*e|arm[79]*e*|arm9[24]6*|arm96*|arm102[26])
2496 armv4*|arm7*|arm9[24]*) echo -mv=4 ;;
2499 -mfpu=neon) echo --float_support=vfpv3 --neon ;;
2500 -mfpu=vfp) echo --float_support=vfpv2 ;;
2501 -mfpu=vfpv3) echo --float_support=vfpv3 ;;
2502 -mfpu=vfpv3-d16) echo --float_support=vfpv3d16 ;;
2503 -msoft-float) echo --float_support=vfplib ;;
2504 -O[0-3]|-mf=*) echo $flag ;;
2506 -pds=*) echo $flag ;;
2507 -D*|-I*) echo $flag ;;
2508 --gcc|--abi=*) echo $flag ;;
2518 unset _type _ident _cc_c _cc_e _cc_o _flags _cflags
2519 unset _ld_o _ldflags _ld_lib _ld_path
2520 unset _depflags _DEPCMD _DEPFLAGS
2523 if $_cc -v 2>&1 | grep -q '^gcc.*LLVM'; then
2525 gcc_extra_ver=$(expr "$($_cc --version | head -n1)" : '.*\((.*)\)')
2526 _ident="llvm-gcc $($_cc -dumpversion) $gcc_extra_ver"
2527 _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2530 elif $_cc -v 2>&1 | grep -qi ^gcc; then
2532 gcc_version=$($_cc --version | head -n1)
2533 gcc_basever=$($_cc -dumpversion)
2534 gcc_pkg_ver=$(expr "$gcc_version" : '[^ ]* \(([^)]*)\)')
2535 gcc_ext_ver=$(expr "$gcc_version" : ".*$gcc_pkg_ver $gcc_basever \\(.*\\)")
2536 _ident=$(cleanws "gcc $gcc_basever $gcc_pkg_ver $gcc_ext_ver")
2537 if ! $_cc -dumpversion | grep -q '^2\.'; then
2538 _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2542 elif $_cc --version 2>/dev/null | grep -q Intel; then
2544 _ident=$($_cc --version | head -n1)
2549 elif $_cc -v 2>&1 | grep -q xlc; then
2551 _ident=$($_cc -qversion 2>/dev/null | head -n1)
2553 _cflags_size='-O5 -qcompact'
2554 elif $_cc -V 2>/dev/null | grep -q Compaq; then
2556 _ident=$($_cc -V | head -n1 | cut -d' ' -f1-3)
2558 _cflags_speed='-fast'
2560 _flags_filter=ccc_flags
2561 elif $_cc --vsn 2>/dev/null | grep -q "ARM C/C++ Compiler"; then
2562 test -d "$sysroot" || die "No valid sysroot specified."
2564 _ident=$($_cc --vsn | head -n1)
2565 armcc_conf="$PWD/armcc.conf"
2566 $_cc --arm_linux_configure \
2567 --arm_linux_config_file="$armcc_conf" \
2568 --configure_sysroot="$sysroot" \
2569 --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
2570 die "Error creating armcc configuration file."
2571 $_cc --vsn | grep -q RVCT && armcc_opt=rvct || armcc_opt=armcc
2572 _flags="--arm_linux_config_file=$armcc_conf --translate_gcc"
2573 as_default="${cross_prefix}gcc"
2577 elif $_cc -version 2>/dev/null | grep -Eq 'TMS470|TI ARM'; then
2579 _ident=$($_cc -version | head -n1 | tr -s ' ')
2580 _flags='--gcc --abi=eabi -me'
2583 _depflags='-ppa -ppd=$(@:.o=.d)'
2584 _cflags_speed='-O3 -mf=5'
2585 _cflags_size='-O3 -mf=2'
2586 _flags_filter=tms470_flags
2587 elif $_cc -v 2>&1 | grep -q clang; then
2589 _ident=$($_cc --version | head -n1)
2593 elif $_cc -V 2>&1 | grep -q Sun; then
2595 _ident=$($_cc -V 2>&1 | head -n1 | cut -d' ' -f 2-)
2596 _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "1s,^.*: ,$@: ," -e "\$$!s,\$$, \\\," -e "1!s,^.*: , ," > $(@:.o=.d)'
2597 _DEPFLAGS='-xM1 -xc99'
2600 _cflags_size='-O5 -xspace'
2601 _flags_filter=suncc_flags
2602 elif $_cc -v 2>&1 | grep -q 'PathScale\|Path64'; then
2604 _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
2605 _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2608 _flags_filter='filter_out -Wdisabled-optimization'
2609 elif $_cc -v 2>&1 | grep -q Open64; then
2611 _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
2612 _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2615 _flags_filter='filter_out -Wdisabled-optimization|-Wtype-limits|-fno-signed-zeros'
2616 elif $_cc -V 2>&1 | grep -q Portland; then
2618 _ident="PGI $($_cc -V 2>&1 | awk '/^pgcc/ { print $2; exit }')"
2619 opt_common='-alias=ansi -Mdse -Mlre -Mpre'
2620 _cflags_speed="-O3 -Mautoinline -Munroll=c:4 $opt_common"
2621 _cflags_size="-O2 -Munroll=c:1 $opt_common"
2623 _flags_filter=pgi_flags
2624 elif $_cc 2>&1 | grep -q Microsoft; then
2626 _ident=$($cc 2>&1 | head -n1)
2627 _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< 2>&1 | awk '\''/including/ { sub(/^.*file: */, ""); gsub(/\\/, "/"); if (!match($$0, / /)) print "$@:", $$0 }'\'' > $(@:.o=.d)'
2628 _DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -showIncludes -Zs'
2631 # Nonstandard output options, to avoid msys path conversion issues, relies on wrapper to remap it
2632 if $_cc 2>&1 | grep -q Linker; then
2639 _flags_filter=msvc_flags
2641 _ld_path='-libpath:'
2643 _cflags='-D_USE_MATH_DEFINES -Dinline=__inline -FIstdlib.h -Dstrtoll=_strtoi64'
2644 if [ $pfx = hostcc ]; then
2645 append _cflags -Dsnprintf=_snprintf
2650 eval ${pfx}_type=\$_type
2651 eval ${pfx}_ident=\$_ident
2655 eval ${1}_C=\${_cc_c-\${${1}_C}}
2656 eval ${1}_E=\${_cc_e-\${${1}_E}}
2657 eval ${1}_O=\${_cc_o-\${${1}_O}}
2659 if [ -n "$_depflags" ]; then
2660 eval ${1}_DEPFLAGS=\$_depflags
2662 eval ${1}DEP=\${_DEPCMD:-\$DEPCMD}
2663 eval ${1}DEP_FLAGS=\${_DEPFLAGS:-\$DEPFLAGS}
2664 eval DEP${1}FLAGS=\$_flags
2669 cflags_filter=$_flags_filter
2670 cflags_speed=$_cflags_speed
2671 cflags_size=$_cflags_size
2672 cflags_noopt=$_cflags_noopt
2673 add_cflags $_flags $_cflags
2674 cc_ldflags=$_ldflags
2677 probe_cc hostcc "$host_cc"
2678 host_cflags_filter=$_flags_filter
2679 add_host_cflags $_flags $_cflags
2682 test -n "$cc_type" && enable $cc_type ||
2683 warn "Unknown C compiler $cc, unable to select optimal CFLAGS"
2685 : ${as_default:=$cc}
2686 : ${dep_cc_default:=$cc}
2687 : ${ld_default:=$cc}
2688 : ${host_ld_default:=$host_cc}
2689 set_default ar as dep_cc ld host_ld
2692 asflags_filter=$_flags_filter
2693 add_asflags $_flags $_cflags
2697 ldflags_filter=$_flags_filter
2698 add_ldflags $_flags $_ldflags
2699 test "$cc_type" != "$ld_type" && add_ldflags $cc_ldflags
2701 LD_LIB=${_ld_lib-$LD_LIB}
2702 LD_PATH=${_ld_path-$LD_PATH}
2704 probe_cc hostld "$host_ld"
2705 host_ldflags_filter=$_flags_filter
2706 add_host_ldflags $_flags $_ldflags
2707 HOSTLD_O=${_ld_o-$HOSTLD_O}
2709 if [ -z "$CC_DEPFLAGS" ] && [ "$dep_cc" != "$cc" ]; then
2710 probe_cc depcc "$dep_cc"
2711 CCDEP=${_DEPCMD:-$DEPCMD}
2712 CCDEP_FLAGS=${_DEPFLAGS:=$DEPFLAGS}
2716 if $ar 2>&1 | grep -q Microsoft; then
2719 elif $ar 2>&1 | grep -q 'Texas Instruments'; then
2727 add_cflags $extra_cflags
2728 add_cxxflags $extra_cxxflags
2729 add_asflags $extra_cflags
2731 if test -n "$sysroot"; then
2734 add_cppflags --sysroot="$sysroot"
2735 add_ldflags --sysroot="$sysroot"
2738 add_cppflags -I"$sysinclude"
2739 add_ldflags --sysroot="$sysroot"
2744 if test "$cpu" = host; then
2745 enabled cross_compile && die "--cpu=host makes no sense when cross-compiling."
2750 $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
2752 s/.*$1=\\([^ ]*\\).*/\\1/
2757 cpu=$(check_native -march || check_native -mcpu)
2761 test "${cpu:-host}" = host && die "--cpu=host not supported with compiler $cc"
2764 # Deal with common $arch aliases
2778 "Power Macintosh"|ppc*|powerpc*)
2793 i[3-6]86|i86pc|BePC|x86pc|x86_64|x86_32|amd64)
2798 is_in $arch $ARCH_LIST || warn "unknown architecture $arch"
2801 # Add processor-specific flags
2802 if test "$cpu" = generic; then
2805 elif enabled aarch64; then
2809 cpuflags="-march=$cpu"
2812 cpuflags="-mcpu=$cpu"
2816 elif enabled alpha; then
2818 cpuflags="-mcpu=$cpu"
2820 elif enabled arm; then
2824 cpuflags="-march=$cpu"
2825 subarch=$(echo $cpu | sed 's/[^a-z0-9]//g')
2828 cpuflags="-mcpu=$cpu"
2830 cortex-a*) subarch=armv7a ;;
2831 cortex-r*) subarch=armv7r ;;
2832 cortex-m*) enable thumb; subarch=armv7m ;;
2833 arm11*) subarch=armv6 ;;
2834 arm[79]*e*|arm9[24]6*|arm96*|arm102[26]) subarch=armv5te ;;
2835 armv4*|arm7*|arm9[24]*) subarch=armv4 ;;
2840 elif enabled avr32; then
2845 cpuflags="-mpart=$cpu"
2849 cpuflags="-march=$cpu"
2853 cpuflags="-mcpu=$cpu"
2857 cpuflags="-march=$cpu"
2861 elif enabled bfin; then
2863 cpuflags="-mcpu=$cpu"
2865 elif enabled mips; then
2867 cpuflags="-march=$cpu"
2883 24kef*|34kf*|1004kf*)
2891 elif enabled ppc; then
2893 case $(tolower $cpu) in
2894 601|ppc601|powerpc601)
2895 cpuflags="-mcpu=601"
2898 603*|ppc603*|powerpc603*)
2899 cpuflags="-mcpu=603"
2902 604*|ppc604*|powerpc604*)
2903 cpuflags="-mcpu=604"
2906 g3|75*|ppc75*|powerpc75*)
2907 cpuflags="-mcpu=750"
2910 g4|745*|ppc745*|powerpc745*)
2911 cpuflags="-mcpu=7450"
2913 74*|ppc74*|powerpc74*)
2914 cpuflags="-mcpu=7400"
2916 g5|970|ppc970|powerpc970)
2917 cpuflags="-mcpu=970"
2920 cpuflags="-mcpu=$cpu"
2923 cpuflags="-mcpu=cell"
2927 cpuflags="-mcpu=e500mc"
2931 cpuflags="-mcpu=8548 -mhard-float -mfloat-gprs=double"
2935 cpuflags="-mcpu=8540 -mhard-float"
2940 elif enabled sparc; then
2943 cypress|f93[04]|tsc701|sparcl*|supersparc|hypersparc|niagara|v[789])
2944 cpuflags="-mcpu=$cpu"
2947 ultrasparc*|niagara[234])
2948 cpuflags="-mcpu=$cpu"
2952 elif enabled x86; then
2956 cpuflags="-march=$cpu"
2959 # targets that do NOT support conditional mov (cmov)
2960 pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
2961 cpuflags="-march=$cpu"
2964 # targets that do support conditional mov (cmov)
2965 i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64*|k8*|opteron*|athlon-fx|core2|corei7*|amdfam10|barcelona|atom|bdver*)
2966 cpuflags="-march=$cpu"
2970 # targets that do support conditional mov but on which it's slow
2971 pentium4|pentium4m|prescott|nocona)
2972 cpuflags="-march=$cpu"
2980 add_cflags $cpuflags
2981 add_asflags $cpuflags
2983 # compiler sanity check
2985 int main(void){ return 0; }
2987 if test "$?" != 0; then
2988 echo "$cc is unable to create an executable file."
2989 if test -z "$cross_prefix" && ! enabled cross_compile ; then
2990 echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
2991 echo "Only do this if you know what cross compiling means."
2993 die "C compiler test failed."
2996 add_cppflags -D_ISOC99_SOURCE
2997 add_cxxflags -D__STDC_CONSTANT_MACROS
2998 check_cflags -std=c99
2999 check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
3002 check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
3006 check_host_cflags -std=c99
3007 check_host_cflags -Wall
3013 check_code cc "" "int test[2*($expr) - 1]" &&
3014 subarch=$arch64 || subarch=$arch32
3022 check_64bit mips mips64 '_MIPS_SIM > 1'
3026 check_64bit parisc parisc64 'sizeof(void *) > 4'
3030 check_64bit ppc ppc64 'sizeof(void *) > 4'
3033 check_64bit sparc sparc64 'sizeof(void *) > 4'
3037 check_64bit x86_32 x86_64 'sizeof(void *) > 4'
3038 if test "$subarch" = "x86_64"; then
3043 check_cc <<EOF && subarch="ppc64"
3044 int test[(int)sizeof(char*) - 7];
3050 enabled spic && enable pic
3055 prefix_default="/boot/common"
3056 network_extralibs="-lnetwork"
3061 SHFLAGS='-shared -Wl,-h,$$(@F)'
3062 enabled x86 && SHFLAGS="-mimpure-text $SHFLAGS"
3063 network_extralibs="-lsocket -lnsl"
3064 add_cppflags -D__EXTENSIONS__ -D_XOPEN_SOURCE=600
3065 # When using suncc to build, the Solaris linker will mark
3066 # an executable with each instruction set encountered by
3067 # the Solaris assembler. As our libraries contain their own
3068 # guards for processor-specific code, instead suppress
3069 # generation of the HWCAPS ELF section on Solaris x86 only.
3070 enabled_all suncc x86 && echo "hwcap_1 = OVERRIDE;" > mapfile && add_ldflags -Wl,-M,mapfile
3071 nm_default='nm -P -g'
3075 oss_indev_extralibs="-lossaudio"
3076 oss_outdev_extralibs="-lossaudio"
3077 enabled gcc || check_ldflags -Wl,-zmuldefs
3080 # On OpenBSD 4.5. the compiler does not use PIC unless
3081 # explicitly using -fPIC. FFmpeg builds fine without PIC,
3082 # however the generated executable will not do anything
3083 # (simply quits with exit-code 1, no crash, no output).
3084 # Thus explicitly enable PIC here.
3088 SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBVERSION)'
3090 oss_indev_extralibs="-lossaudio"
3091 oss_outdev_extralibs="-lossaudio"
3099 add_extralibs -lpoll -lgnugetopt
3103 gas="gas-preprocessor.pl $cc"
3104 enabled ppc && add_asflags -force_cpusubtype_ALL
3105 SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR)'
3106 enabled x86_32 && append SHFLAGS -Wl,-read_only_relocs,suppress
3108 add_ldflags -Wl,-dynamic,-search_paths_first
3110 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
3111 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
3112 FFSERVERLDFLAGS=-Wl,-bind_at_load
3114 enabled x86_64 && objformat="macho64"
3115 enabled_any pic shared ||
3116 { check_cflags -mdynamic-no-pic && add_asflags -mdynamic-no-pic; }
3119 if test $target_os = "mingw32ce"; then
3125 if enabled x86_64; then
3126 LIBTARGET="i386:x86-64"
3127 elif enabled arm; then
3130 shlibdir_default="$bindir_default"
3133 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
3134 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
3135 dlltool="${cross_prefix}dlltool"
3136 if check_cmd lib.exe -list; then
3137 SLIB_EXTRA_CMD='-lib.exe /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib)'
3138 if enabled x86_64; then
3141 elif check_cmd $dlltool --version; then
3142 SLIB_EXTRA_CMD=-'$(DLLTOOL) -m $(LIBTARGET) -d $$(@:$(SLIBSUF)=.def) -l $(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib) -D $(SLIBNAME_WITH_MAJOR)'
3144 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
3146 SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
3147 SLIB_INSTALL_EXTRA_LIB='lib$(SLIBNAME:$(SLIBSUF)=.dll.a) $(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
3148 SHFLAGS='-shared -Wl,--output-def,$$(@:$(SLIBSUF)=.def) -Wl,--out-implib,$(SUBDIR)lib$(SLIBNAME:$(SLIBSUF)=.dll.a) -Wl,--enable-runtime-pseudo-reloc -Wl,--enable-auto-image-base'
3152 add_cppflags -U__STRICT_ANSI__
3155 if enabled shared; then
3156 # Link to the import library instead of the normal static library
3159 # Cannot build shared and static libraries at the same time with
3163 shlibdir_default="$bindir_default"
3166 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
3167 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
3168 SLIB_CREATE_DEF_CMD='makedef $(SUBDIR)lib$(NAME).ver $(OBJS) > $$(@:$(SLIBSUF)=.def)'
3169 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
3171 SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
3172 SLIB_INSTALL_EXTRA_LIB='$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
3173 SHFLAGS='-dll -def:$$(@:$(SLIBSUF)=.def) -implib:$(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib)'
3180 shlibdir_default="$bindir_default"
3183 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
3184 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
3185 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
3187 SLIB_INSTALL_EXTRA_LIB='lib$(FULLNAME).dll.a'
3188 SHFLAGS='-shared -Wl,--out-implib,$(SUBDIR)lib$(FULLNAME).dll.a'
3192 *-dos|freedos|opendos)
3193 network_extralibs="-lsocket"
3196 add_cppflags -U__STRICT_ANSI__
3203 ranlib="echo ignoring ranlib"
3209 add_cppflags -D_GNU_SOURCE
3210 add_ldflags -Zomf -Zbin-files -Zargs-wild -Zmap
3211 SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
3216 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
3217 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
3218 SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
3219 echo PROTMODE >> $(SUBDIR)$(NAME).def; \
3220 echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
3221 echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
3222 echo EXPORTS >> $(SUBDIR)$(NAME).def; \
3223 emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
3224 SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
3225 emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
3226 SLIB_INSTALL_EXTRA_LIB='$(LIBPREF)$(NAME)_dll.a $(LIBPREF)$(NAME)_dll.lib'
3228 enable_weak os2threads
3231 add_cppflags -D_BSD_SOURCE
3236 add_cppflags -D_QNX_SOURCE
3237 network_extralibs="-lsocket"
3242 add_cflags --include=$sysinclude/gcce/gcce.h -fvisibility=default
3243 add_cppflags -D__GCCE__ -D__SYMBIAN32__ -DSYMBIAN_OE_POSIX_SIGNALS
3244 add_ldflags -Wl,--target1-abs,--no-undefined \
3245 -Wl,-Ttext,0x80000,-Tdata,0x1000000 -shared \
3246 -Wl,--entry=_E32Startup -Wl,-u,_E32Startup
3247 add_extralibs -l:eexe.lib -l:usrt2_2.lib -l:dfpaeabi.dso \
3248 -l:drtaeabi.dso -l:scppnwdl.dso -lsupc++ -lgcc \
3249 -l:libc.dso -l:libm.dso -l:euser.dso -l:libcrt0.lib
3252 add_cppflags -D_OSF_SOURCE -D_POSIX_PII -D_REENTRANT
3258 add_cppflags -D_C99_SNPRINTF_EXTENSION \
3259 -D_REENTRANT_SOURCE \
3260 -D_RESEARCH_SOURCE \
3263 add_compat strtod.o strtod=avpriv_strtod
3264 network_extralibs='-lbsd'
3265 exeobjs=compat/plan9/main.o
3273 die "Unknown OS '$target_os'."
3277 # determine libc flavour
3279 if check_cpp_condition features.h "defined __UCLIBC__"; then
3281 add_cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
3282 elif check_cpp_condition features.h "defined __GLIBC__"; then
3284 add_cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
3285 elif check_header _mingw.h; then
3287 check_cpp_condition _mingw.h \
3288 "defined (__MINGW64_VERSION_MAJOR) || (__MINGW32_MAJOR_VERSION > 3) || \
3289 (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
3290 die "ERROR: MinGW runtime version must be >= 3.15."
3291 if check_cpp_condition _mingw.h "defined(__MINGW64_VERSION_MAJOR) && \
3292 __MINGW64_VERSION_MAJOR < 3"; then
3293 add_compat msvcrt/snprintf.o
3294 add_cflags "-include $source_path/compat/msvcrt/snprintf.h"
3296 elif check_cpp_condition newlib.h "defined _NEWLIB_VERSION"; then
3298 add_cppflags -U__STRICT_ANSI__
3299 elif check_func_headers stdlib.h _get_doserrno; then
3301 add_compat strtod.o strtod=avpriv_strtod
3302 add_compat msvcrt/snprintf.o snprintf=avpriv_snprintf \
3303 _snprintf=avpriv_snprintf \
3304 vsnprintf=avpriv_vsnprintf
3305 elif check_cpp_condition stddef.h "defined __KLIBC__"; then
3309 test -n "$libc_type" && enable $libc_type
3311 # hacks for compiler/libc/os combinations
3313 if enabled_all tms470 glibc; then
3314 CPPFLAGS="-I${source_path}/compat/tms470 ${CPPFLAGS}"
3315 add_cppflags -D__USER_LABEL_PREFIX__=
3316 add_cppflags -D__builtin_memset=memset
3317 add_cppflags -D__gnuc_va_list=va_list -D_VA_LIST_DEFINED
3318 add_cflags -pds=48 # incompatible redefinition of macro
3321 if enabled_all ccc glibc; then
3322 add_ldflags -Wl,-z,now # calls to libots crash without this
3326 echo "$*" | sed 's/%/%25/g;s/:/%3a/g'
3329 echo "config:$arch:$subarch:$cpu:$target_os:$(esc $cc_ident):$(esc $FFMPEG_CONFIGURATION)" >config.fate
3331 check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable pic
3333 set_default $PATHS_LIST
3336 # we need to build at least one lib type
3337 if ! enabled_any static shared; then
3339 At least one library type must be built.
3340 Specify --enable-static to build the static libraries or --enable-shared to
3341 build the shared libraries as well. To only build the shared libraries specify
3342 --disable-static in addition to --enable-shared.
3347 die_license_disabled() {
3348 enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
3351 die_license_disabled_gpl() {
3352 enabled $1 || { enabled $2 && die "$2 is incompatible with the gpl and --enable-$1 is not specified."; }
3355 die_license_disabled gpl libcdio
3356 die_license_disabled gpl libutvideo
3357 die_license_disabled gpl libx264
3358 die_license_disabled gpl libxavs
3359 die_license_disabled gpl libxvid
3360 die_license_disabled gpl x11grab
3362 die_license_disabled nonfree libaacplus
3363 die_license_disabled nonfree libfaac
3364 enabled gpl && die_license_disabled_gpl nonfree libfdk_aac
3365 enabled gpl && die_license_disabled_gpl nonfree openssl
3367 die_license_disabled version3 libopencore_amrnb
3368 die_license_disabled version3 libopencore_amrwb
3369 die_license_disabled version3 libvo_aacenc
3370 die_license_disabled version3 libvo_amrwbenc
3372 enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
3374 disabled optimizations || check_cflags -fomit-frame-pointer
3383 enabled pic && enable_pic
3385 check_cc <<EOF || die "Symbol mangling check failed."
3388 sym=$($nm $TMPO | awk '/ff_extern/{ print substr($0, match($0, /[^ \t]*ff_extern/)) }')
3389 extern_prefix=${sym%%ff_extern*}
3391 check_cc <<EOF && enable_weak inline_asm
3392 void foo(void) { __asm__ volatile ("" ::); }
3396 for restrict_keyword in restrict __restrict__ __restrict; do
3397 check_cc <<EOF && _restrict=$restrict_keyword && break
3398 void foo(char * $restrict_keyword p);
3402 check_cc <<EOF && enable attribute_packed
3403 struct { int x; } __attribute__((packed)) x;
3406 check_cc <<EOF && enable attribute_may_alias
3407 union { int x; } __attribute__((may_alias)) x;
3410 check_cc <<EOF || die "endian test failed"
3411 unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
3413 od -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
3415 if enabled alpha; then
3419 elif enabled arm; then
3421 enabled thumb && check_cflags -mthumb || check_cflags -marm
3424 if check_cpp_condition stddef.h "defined __ARM_PCS_VFP"; then
3426 elif ! check_cpp_condition stddef.h "defined __ARM_PCS || defined __SOFTFP__"; then
3427 case "${cross_prefix:-$cc}" in
3428 *hardfloat*) enable vfp_args; fpabi=vfp ;;
3429 *) check_ld "cc" <<EOF && enable vfp_args && fpabi=vfp || fpabi=soft ;;
3430 __asm__ (".eabi_attribute 28, 1");
3431 int main(void) { return 0; }
3434 warn "Compiler does not indicate floating-point ABI, guessing $fpabi."
3437 enabled armv5te && check_inline_asm armv5te '"qadd r0, r0, r0"'
3438 enabled armv6 && check_inline_asm armv6 '"sadd16 r0, r0, r0"'
3439 enabled armv6t2 && check_inline_asm armv6t2 '"movt r0, #0"'
3440 enabled armvfp && check_inline_asm armvfp '"fadds s0, s0, s0"'
3441 enabled neon && check_inline_asm neon '"vadd.i16 q0, q0, q0"'
3442 enabled vfpv3 && check_inline_asm vfpv3 '"vmov.f32 s0, #1.0"'
3444 check_inline_asm asm_mod_q '"add r0, %Q0, %R0" :: "r"((long long)0)'
3445 check_inline_asm asm_mod_y '"vmul.i32 d0, d0, %y0" :: "x"(0)'
3447 enabled_all armv6t2 shared !pic && enable_pic
3449 elif enabled mips; then
3451 check_inline_asm loongson '"dmult.g $1, $2, $3"'
3452 enabled mips32r2 && add_cflags "-mips32r2" && add_asflags "-mips32r2" &&
3453 check_inline_asm mips32r2 '"rotr $t0, $t1, 1"'
3454 enabled mipsdspr1 && add_cflags "-mdsp" && add_asflags "-mdsp" &&
3455 check_inline_asm mipsdspr1 '"addu.qb $t0, $t1, $t2"'
3456 enabled mipsdspr2 && add_cflags "-mdspr2" && add_asflags "-mdspr2" &&
3457 check_inline_asm mipsdspr2 '"absq_s.qb $t0, $t1"'
3458 enabled mipsfpu && add_cflags "-mhard-float" && add_asflags "-mhard-float" &&
3459 check_inline_asm mipsfpu '"madd.d $f0, $f2, $f4, $f6"'
3461 elif enabled parisc; then
3463 if enabled gcc; then
3464 case $($cc -dumpversion) in
3465 4.[3-8].*) check_cflags -fno-optimize-sibling-calls ;;
3469 elif enabled ppc; then
3471 enable local_aligned_8 local_aligned_16
3473 check_inline_asm dcbzl '"dcbzl 0, %0" :: "r"(0)'
3474 check_inline_asm ibm_asm '"add 0, 0, 0"'
3475 check_inline_asm ppc4xx '"maclhw r10, r11, r12"'
3476 check_inline_asm xform_asm '"lwzx %1, %y0" :: "Z"(*(int*)0), "r"(0)'
3478 # AltiVec flags: The FSF version of GCC differs from the Apple version
3479 if enabled altivec; then
3481 check_cflags -maltivec -mabi=altivec &&
3482 { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
3483 check_cflags -faltivec
3485 # check if our compiler supports Motorola AltiVec C API
3486 check_cc <<EOF || disable altivec
3489 vector signed int v1 = (vector signed int) { 0 };
3490 vector signed int v2 = (vector signed int) { 1 };
3491 v1 = vec_add(v1, v2);
3496 enabled altivec || warn "Altivec disabled, possibly missing --cpu flag"
3499 elif enabled sparc; then
3501 enabled vis && check_inline_asm vis '"pdist %f0, %f0, %f0"'
3503 elif enabled x86; then
3505 check_code ld intrin.h "__rdtsc()" "cc" && enable rdtsc
3507 check_code ld mmintrin.h "_mm_empty()" "cc" && enable mm_empty
3509 enable local_aligned_8 local_aligned_16
3511 # check whether EBP is available on x86
3512 # As 'i' is stored on the stack, this program will crash
3513 # if the base pointer is used to access it because the
3514 # base pointer is cleared in the inline assembly code.
3515 check_exec_crash <<EOF && enable ebp_available
3517 __asm__ volatile ("xorl %%ebp, %%ebp" ::: "%ebp");
3521 # check whether EBX is available on x86
3522 check_inline_asm ebx_available '""::"b"(0)' &&
3523 check_inline_asm ebx_available '"":::"%ebx"'
3525 # check whether xmm clobbers are supported
3526 check_inline_asm xmm_clobbers '"":::"%xmm0"'
3528 # check whether binutils is new enough to compile SSSE3/MMXEXT
3529 enabled ssse3 && check_inline_asm ssse3_inline '"pabsw %xmm0, %xmm0"'
3530 enabled mmxext && check_inline_asm mmxext_inline '"pmaxub %mm0, %mm1"'
3532 if ! disabled_any asm mmx yasm; then
3533 if check_cmd $yasmexe --version; then
3534 enabled x86_64 && yasm_extra="-m amd64"
3535 yasm_debug="-g dwarf2"
3536 elif check_cmd nasm -v; then
3538 yasm_debug="-g -F dwarf"
3539 enabled x86_64 && test "$objformat" = elf && objformat=elf64
3542 YASMFLAGS="-f $objformat $yasm_extra"
3543 enabled pic && append YASMFLAGS "-DPIC"
3544 test -n "$extern_prefix" && append YASMFLAGS "-DPREFIX"
3545 case "$objformat" in
3546 elf*) enabled debug && append YASMFLAGS $yasm_debug ;;
3549 check_yasm "pextrd [eax], xmm0, 1" && enable yasm ||
3550 die "yasm not found, use --disable-yasm for a crippled build"
3551 check_yasm "vextractf128 xmm0, ymm0, 0" || disable avx_external
3552 check_yasm "vfmaddps ymm0, ymm1, ymm2, ymm3" || disable fma4_external
3553 check_yasm "CPU amdnop" && enable cpunop
3557 athlon*|opteron*|k8*|pentium|pentium-mmx|prescott|nocona|atom|geode)
3564 if enabled asm; then
3566 check_inline_asm gnu_as '".macro m n\n\\n:.int 0\n.endm\nm x"' ||
3567 $nogas "GNU assembler not found, install gas-preprocessor"
3570 check_ldflags -Wl,--as-needed
3572 if check_func dlopen; then
3574 elif check_func dlopen -ldl; then
3578 if enabled network; then
3579 check_type "sys/types.h sys/socket.h" socklen_t
3580 check_type netdb.h "struct addrinfo"
3581 check_type netinet/in.h "struct group_source_req" -D_BSD_SOURCE
3582 check_type netinet/in.h "struct ip_mreq_source" -D_BSD_SOURCE
3583 check_type netinet/in.h "struct ipv6_mreq" -D_DARWIN_C_SOURCE
3584 check_type netinet/in.h "struct sockaddr_in6"
3585 check_type poll.h "struct pollfd"
3586 check_type "sys/types.h sys/socket.h" "struct sockaddr_storage"
3587 check_struct "sys/types.h sys/socket.h" "struct sockaddr" sa_len
3588 check_type netinet/sctp.h "struct sctp_event_subscribe"
3589 check_func getaddrinfo $network_extralibs
3590 check_func getservbyport $network_extralibs
3591 # Prefer arpa/inet.h over winsock2
3592 if check_header arpa/inet.h ; then
3593 check_func closesocket
3594 elif check_header winsock2.h ; then
3595 check_func_headers winsock2.h closesocket -lws2 &&
3596 network_extralibs="-lws2" ||
3597 { check_func_headers winsock2.h closesocket -lws2_32 &&
3598 network_extralibs="-lws2_32"; }
3599 check_func_headers ws2tcpip.h getaddrinfo $network_extralibs
3600 check_type ws2tcpip.h socklen_t
3601 check_type ws2tcpip.h "struct addrinfo"
3602 check_type ws2tcpip.h "struct group_source_req"
3603 check_type ws2tcpip.h "struct ip_mreq_source"
3604 check_type ws2tcpip.h "struct ipv6_mreq"
3605 check_type winsock2.h "struct pollfd"
3606 check_type ws2tcpip.h "struct sockaddr_in6"
3607 check_type ws2tcpip.h "struct sockaddr_storage"
3608 check_struct winsock2.h "struct sockaddr" sa_len
3614 # Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
3615 check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
3618 check_func clock_gettime || { check_func clock_gettime -lrt && add_extralibs -lrt; }
3621 check_func gethrtime
3623 check_func getrusage
3624 check_struct "sys/time.h sys/resource.h" "struct rusage" ru_maxrss
3625 check_func gettimeofday
3626 check_func inet_aton $network_extralibs
3628 check_func localtime_r
3629 check_func ${malloc_prefix}memalign && enable memalign
3633 check_func ${malloc_prefix}posix_memalign && enable posix_memalign
3634 check_func_headers malloc.h _aligned_malloc && enable aligned_malloc
3635 check_func setrlimit
3636 check_func strerror_r
3637 check_func sched_getaffinity
3641 check_func_headers conio.h kbhit
3642 check_func_headers windows.h PeekNamedPipe
3643 check_func_headers io.h setmode
3644 check_func_headers lzo/lzo1x.h lzo1x_999_compress
3645 check_lib2 "windows.h shellapi.h" CommandLineToArgvW -lshell32
3646 check_lib2 "windows.h wincrypt.h" CryptGenRandom -ladvapi32
3647 check_lib2 "windows.h psapi.h" GetProcessMemoryInfo -lpsapi
3648 check_func_headers windows.h GetProcessAffinityMask
3649 check_func_headers windows.h GetProcessTimes
3650 check_func_headers windows.h GetSystemTimeAsFileTime
3651 check_func_headers windows.h MapViewOfFile
3652 check_func_headers windows.h SetConsoleTextAttribute
3653 check_func_headers windows.h Sleep
3654 check_func_headers windows.h VirtualAlloc
3655 check_func_headers glob.h glob
3657 check_header direct.h
3658 check_header dlfcn.h
3660 check_header dxva2api.h -D_WIN32_WINNT=0x0600
3662 check_header libcrystalhd/libcrystalhd_if.h
3663 check_header malloc.h
3665 check_header sys/mman.h
3666 check_header sys/param.h
3667 check_header sys/resource.h
3668 check_header sys/select.h
3669 check_header sys/time.h
3670 check_header termios.h
3671 check_header unistd.h
3672 check_header vdpau/vdpau.h
3673 check_header vdpau/vdpau_x11.h
3674 check_header windows.h
3675 check_header X11/extensions/XvMClib.h
3676 check_header asm/types.h
3678 disabled zlib || check_lib zlib.h zlibVersion -lz || disable zlib
3679 disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
3681 # check for VDA header
3682 if ! disabled vda && ! enabled ppc; then
3683 if check_header VideoDecodeAcceleration/VDADecoder.h; then
3685 add_extralibs -framework CoreFoundation -framework VideoDecodeAcceleration -framework QuartzCore
3689 if ! disabled w32threads && ! enabled pthreads; then
3690 check_func_headers "windows.h process.h" _beginthreadex && enable w32threads
3693 # check for some common methods of building with pthread support
3694 # do this before the optional library checks as some of them require pthreads
3695 if ! disabled pthreads && ! enabled w32threads && ! enabled os2threads; then
3697 if check_func pthread_create; then
3699 elif check_func pthread_create -pthread; then
3701 add_extralibs -pthread
3702 elif check_func pthread_create -pthreads; then
3703 add_cflags -pthreads
3704 add_extralibs -pthreads
3705 elif check_func pthread_create -lpthreadGC2; then
3706 add_extralibs -lpthreadGC2
3707 elif ! check_lib pthread.h pthread_create -lpthread; then
3712 for thread in $THREADS_LIST; do
3713 if enabled $thread; then
3714 test -n "$thread_type" &&
3715 die "ERROR: Only one thread type must be selected." ||
3716 thread_type="$thread"
3720 if enabled pthreads; then
3721 check_func pthread_cancel
3724 check_lib math.h sin -lm && LIBM="-lm"
3725 disabled crystalhd || check_lib libcrystalhd/libcrystalhd_if.h DtsCrystalHDVersion -lcrystalhd || disable crystalhd
3726 enabled vaapi && require vaapi va/va.h vaInitialize -lva
3732 for func in $MATH_FUNCS; do
3733 eval check_mathfunc $func \${${func}_args:-1}
3736 # these are off by default, so fail if requested and not available
3737 enabled avisynth && require2 vfw32 "windows.h vfw.h" AVIFileInit -lavifil32
3738 enabled fontconfig && require_pkg_config fontconfig "fontconfig/fontconfig.h" FcInit
3739 enabled frei0r && { check_header frei0r.h || die "ERROR: frei0r.h header not found"; }
3740 enabled gnutls && require_pkg_config gnutls gnutls/gnutls.h gnutls_global_init
3741 enabled libiec61883 && require libiec61883 libiec61883/iec61883.h iec61883_cmp_connect -lraw1394 -lavc1394 -lrom1394 -liec61883
3742 enabled libaacplus && require "libaacplus >= 2.0.0" aacplus.h aacplusEncOpen -laacplus
3743 enabled libass && require_pkg_config libass ass/ass.h ass_library_init
3744 enabled libbluray && require libbluray libbluray/bluray.h bd_open -lbluray
3745 enabled libcdio && require2 libcdio "cdio/cdda.h cdio/paranoia.h" cdio_cddap_open -lcdio_paranoia -lcdio_cdda -lcdio
3746 enabled libcelt && require libcelt celt/celt.h celt_decode -lcelt0 &&
3747 { check_lib celt/celt.h celt_decoder_create_custom -lcelt0 ||
3748 die "ERROR: libcelt must be installed and version must be >= 0.11.0."; }
3749 enabled libcaca && require_pkg_config caca caca.h caca_create_canvas
3750 enabled libfaac && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
3751 enabled libfdk_aac && require libfdk_aac fdk-aac/aacenc_lib.h aacEncOpen -lfdk-aac
3752 flite_libs="-lflite_cmu_time_awb -lflite_cmu_us_awb -lflite_cmu_us_kal -lflite_cmu_us_kal16 -lflite_cmu_us_rms -lflite_cmu_us_slt -lflite_usenglish -lflite_cmulex -lflite"
3753 enabled libflite && require2 libflite "flite/flite.h" flite_init $flite_libs
3754 enabled libfreetype && require_pkg_config freetype2 "ft2build.h freetype/freetype.h" FT_Init_FreeType
3755 enabled libgsm && require libgsm gsm/gsm.h gsm_create -lgsm
3756 enabled libilbc && require libilbc ilbc.h WebRtcIlbcfix_InitDecode -lilbc
3757 enabled libmodplug && require libmodplug libmodplug/modplug.h ModPlug_Load -lmodplug
3758 enabled libmp3lame && require "libmp3lame >= 3.98.3" lame/lame.h lame_set_VBR_quality -lmp3lame
3759 enabled libnut && require libnut libnut.h nut_demuxer_init -lnut
3760 enabled libopencore_amrnb && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb
3761 enabled libopencore_amrwb && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb
3762 enabled libopencv && require_pkg_config opencv opencv/cxcore.h cvCreateImageHeader
3763 enabled libopenjpeg && require libopenjpeg openjpeg.h opj_version -lopenjpeg
3764 enabled libopus && require_pkg_config opus opus_multistream.h opus_multistream_decoder_create
3765 enabled libpulse && require_pkg_config libpulse-simple pulse/simple.h pa_simple_new
3766 enabled librtmp && require_pkg_config librtmp librtmp/rtmp.h RTMP_Socket
3767 enabled libschroedinger && require_pkg_config schroedinger-1.0 schroedinger/schro.h schro_init
3768 enabled libspeex && require libspeex speex/speex.h speex_decoder_init -lspeex
3769 enabled libstagefright_h264 && require_cpp libstagefright_h264 "binder/ProcessState.h media/stagefright/MetaData.h
3770 media/stagefright/MediaBufferGroup.h media/stagefright/MediaDebug.h media/stagefright/MediaDefs.h
3771 media/stagefright/OMXClient.h media/stagefright/OMXCodec.h" android::OMXClient -lstagefright -lmedia -lutils -lbinder -lgnustl_static
3772 enabled libtheora && require libtheora theora/theoraenc.h th_info_init -ltheoraenc -ltheoradec -logg
3773 enabled libtwolame && require libtwolame twolame.h twolame_init -ltwolame &&
3774 { check_lib twolame.h twolame_encode_buffer_float32_interleaved -ltwolame ||
3775 die "ERROR: libtwolame must be installed and version must be >= 0.3.10"; }
3776 enabled libutvideo && require_cpp utvideo "stdint.h stdlib.h utvideo/utvideo.h utvideo/Codec.h" 'CCodec*' -lutvideo -lstdc++
3777 enabled libv4l2 && require_pkg_config libv4l2 libv4l2.h v4l2_ioctl
3778 enabled libvo_aacenc && require libvo_aacenc vo-aacenc/voAAC.h voGetAACEncAPI -lvo-aacenc
3779 enabled libvo_amrwbenc && require libvo_amrwbenc vo-amrwbenc/enc_if.h E_IF_init -lvo-amrwbenc
3780 enabled libvorbis && require libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
3782 enabled libvpx_decoder && { check_lib2 "vpx/vpx_decoder.h vpx/vp8dx.h" vpx_codec_dec_init_ver -lvpx ||
3783 die "ERROR: libvpx decoder must be installed and version must be >=0.9.1"; }
3784 enabled libvpx_encoder && { check_lib2 "vpx/vpx_encoder.h vpx/vp8cx.h" "vpx_codec_enc_init_ver VP8E_SET_MAX_INTRA_BITRATE_PCT" -lvpx ||
3785 die "ERROR: libvpx encoder version must be >=0.9.7"; } }
3786 enabled libx264 && require libx264 x264.h x264_encoder_encode -lx264 &&
3787 { check_cpp_condition x264.h "X264_BUILD >= 118" ||
3788 die "ERROR: libx264 must be installed and version must be >= 0.118."; }
3789 enabled libxavs && require libxavs xavs.h xavs_encoder_encode -lxavs
3790 enabled libxvid && require libxvid xvid.h xvid_global -lxvidcore
3791 enabled openal && { { for al_libs in "${OPENAL_LIBS}" "-lopenal" "-lOpenAL32"; do
3792 check_lib 'AL/al.h' alGetError "${al_libs}" && break; done } ||
3793 die "ERROR: openal not found"; } &&
3794 { check_cpp_condition "AL/al.h" "defined(AL_VERSION_1_1)" ||
3795 die "ERROR: openal must be installed and version must be 1.1 or compatible"; }
3796 enabled openssl && { check_lib openssl/ssl.h SSL_library_init -lssl -lcrypto ||
3797 check_lib openssl/ssl.h SSL_library_init -lssl32 -leay32 ||
3798 check_lib openssl/ssl.h SSL_library_init -lssl -lcrypto -lws2_32 -lgdi32 ||
3799 die "ERROR: openssl not found"; }
3801 if enabled gnutls; then
3802 { check_lib nettle/bignum.h nettle_mpz_get_str_256 -lnettle -lhogweed -lgmp && enable nettle; } ||
3803 { check_lib gcrypt.h gcry_mpi_new -lgcrypt && enable gcrypt; }
3807 if enabled libdc1394; then
3808 { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
3809 enable libdc1394_2; } ||
3810 { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
3811 enable libdc1394_1; } ||
3812 die "ERROR: No version of libdc1394 found "
3815 SDL_CONFIG="${cross_prefix}sdl-config"
3816 if check_pkg_config sdl SDL_events.h SDL_PollEvent; then
3817 check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
3819 check_struct SDL.h SDL_VideoInfo current_w $sdl_cflags && enable sdl_video_size
3821 if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
3822 sdl_cflags=$("${SDL_CONFIG}" --cflags)
3823 sdl_libs=$("${SDL_CONFIG}" --libs)
3824 check_func_headers SDL_version.h SDL_Linked_Version $sdl_cflags $sdl_libs &&
3825 check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
3827 check_struct SDL.h SDL_VideoInfo current_w $sdl_cflags && enable sdl_video_size
3830 enabled sdl && add_cflags $sdl_cflags && add_extralibs $sdl_libs
3832 texi2html --help 2> /dev/null | grep -q 'init-file' && enable texi2html || disable texi2html
3833 makeinfo --version > /dev/null 2>&1 && enable makeinfo || disable makeinfo
3834 perl --version > /dev/null 2>&1 && enable perl || disable perl
3835 pod2man --help > /dev/null 2>&1 && enable pod2man || disable pod2man
3837 check_header linux/fb.h
3838 check_header linux/videodev.h
3839 check_header linux/videodev2.h
3840 check_struct linux/videodev2.h "struct v4l2_frmivalenum" discrete
3842 check_header sys/videoio.h
3844 check_func_headers "windows.h vfw.h" capCreateCaptureWindow "$vfwcap_indev_extralibs"
3845 # check that WM_CAP_DRIVER_CONNECT is defined to the proper value
3846 # w32api 3.12 had it defined wrong
3847 check_cpp_condition vfw.h "WM_CAP_DRIVER_CONNECT > WM_USER" && enable vfwcap_defines
3849 check_type "dshow.h" IBaseFilter
3851 # check for ioctl_meteor.h, ioctl_bt848.h and alternatives
3852 { check_header dev/bktr/ioctl_meteor.h &&
3853 check_header dev/bktr/ioctl_bt848.h; } ||
3854 { check_header machine/ioctl_meteor.h &&
3855 check_header machine/ioctl_bt848.h; } ||
3856 { check_header dev/video/meteor/ioctl_meteor.h &&
3857 check_header dev/video/bktr/ioctl_bt848.h; } ||
3858 check_header dev/ic/bt8xx.h
3860 check_header sndio.h
3861 if check_struct sys/soundcard.h audio_buf_info bytes; then
3862 enable_safe sys/soundcard.h
3864 check_cc -D__BSD_VISIBLE -D__XSI_VISIBLE <<EOF && add_cppflags -D__BSD_VISIBLE -D__XSI_VISIBLE && enable_safe sys/soundcard.h
3865 #include <sys/soundcard.h>
3869 check_header soundcard.h
3871 enabled_any alsa_indev alsa_outdev && check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
3873 enabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack && check_func sem_timedwait &&
3874 check_func jack_port_get_latency_range -ljack
3876 enabled_any sndio_indev sndio_outdev && check_lib2 sndio.h sio_open -lsndio
3880 require X11 X11/Xlib.h XOpenDisplay -lX11 &&
3881 require Xext X11/extensions/XShm.h XShmCreateImage -lXext &&
3882 require Xfixes X11/extensions/Xfixes.h XFixesGetCursorImage -lXfixes
3884 if ! disabled vaapi; then
3885 check_lib va/va.h vaInitialize -lva && {
3886 check_cpp_condition va/va_version.h "VA_CHECK_VERSION(0,32,0)" ||
3887 warn "Please upgrade to VA-API >= 0.32 if you would like full VA-API support.";
3891 if ! disabled vdpau && enabled vdpau_vdpau_h; then
3892 check_cpp_condition vdpau/vdpau.h "defined VDP_DECODER_PROFILE_MPEG4_PART2_ASP" ||
3893 { echolog "Please upgrade to libvdpau >= 0.2 if you would like vdpau support." && disable vdpau; }
3896 enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel"
3897 enabled coverage && add_cflags "-fprofile-arcs -ftest-coverage" && add_ldflags "-fprofile-arcs -ftest-coverage"
3898 test -n "$valgrind" && target_exec="$valgrind --error-exitcode=1 --malloc-fill=0x2a --track-origins=yes --leak-check=full --gen-suppressions=all --suppressions=$source_path/tests/fate-valgrind.supp"
3900 # add some useful compiler flags if supported
3901 check_cflags -Wdeclaration-after-statement
3903 check_cflags -Wno-parentheses
3904 check_cflags -Wno-switch
3905 check_cflags -Wno-format-zero-length
3906 check_cflags -Wdisabled-optimization
3907 check_cflags -Wpointer-arith
3908 check_cflags -Wredundant-decls
3909 check_cflags -Wno-pointer-sign
3910 check_cflags -Wwrite-strings
3911 check_cflags -Wtype-limits
3912 check_cflags -Wundef
3913 check_cflags -Wmissing-prototypes
3914 check_cflags -Wno-pointer-to-int-cast
3915 check_cflags -Wstrict-prototypes
3916 enabled extra_warnings && check_cflags -Winline
3918 # add some linker flags
3919 check_ldflags -Wl,--warn-common
3920 check_ldflags -Wl,-rpath-link=libpostproc:libswresample:libswscale:libavfilter:libavdevice:libavformat:libavcodec:libavutil:libavresample
3921 test_ldflags -Wl,-Bsymbolic && append SHFLAGS -Wl,-Bsymbolic
3923 enabled xmm_clobber_test &&
3924 check_ldflags -Wl,--wrap,avcodec_open2 \
3925 -Wl,--wrap,avcodec_decode_audio4 \
3926 -Wl,--wrap,avcodec_decode_video2 \
3927 -Wl,--wrap,avcodec_decode_subtitle2 \
3928 -Wl,--wrap,avcodec_encode_audio2 \
3929 -Wl,--wrap,avcodec_encode_video \
3930 -Wl,--wrap,avcodec_encode_subtitle \
3931 -Wl,--wrap,sws_scale ||
3932 disable xmm_clobber_test
3935 if test_ldflags -Wl,--version-script,$TMPV; then
3936 append SHFLAGS '-Wl,--version-script,\$(SUBDIR)lib\$(NAME).ver'
3937 check_cc <<EOF && enable symver_asm_label
3938 void ff_foo(void) __asm__ ("av_foo@VERSION");
3939 void ff_foo(void) { ${inline_asm+__asm__($quotes);} }
3941 check_cc <<EOF && enable symver_gnu_asm
3942 __asm__(".symver ff_foo,av_foo@VERSION");
3943 void ff_foo(void) {}
3947 if [ -z "$optflags" ]; then
3948 if enabled small; then
3949 optflags=$cflags_size
3950 elif enabled optimizations; then
3951 optflags=$cflags_speed
3953 optflags=$cflags_noopt
3959 enabled lto && check_ldflags "$@"
3963 if enabled lto; then
3964 test "$cc_type" != "$ld_type" && die "LTO requires same compiler and linker"
3966 check_ldflags -flto $cpuflags
3969 check_optflags $optflags
3970 check_optflags -fno-math-errno
3971 check_optflags -fno-signed-zeros
3973 enabled ftrapv && check_cflags -ftrapv
3975 check_cc -mno-red-zone <<EOF && noredzone_flags="-mno-red-zone"
3980 if enabled icc; then
3981 # Just warnings, no remarks
3983 # -wd: Disable following warnings
3984 # 144, 167, 556: -Wno-pointer-sign
3985 # 1292: attribute "foo" ignored
3986 # 1419: external declaration in primary source file
3987 # 10006: ignoring unknown option -fno-signed-zeros
3988 # 10148: ignoring unknown option -Wno-parentheses
3989 # 10156: ignoring option '-W'; no argument required
3990 check_cflags -wd144,167,556,1292,1419,10006,10148,10156
3991 # 11030: Warning unknown option --as-needed
3992 # 10156: ignoring option '-export'; no argument required
3993 check_ldflags -wd10156,11030
3994 # Allow to compile with optimizations
3995 check_ldflags -march=$cpu
3996 # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
3997 enable ebp_available
3998 if enabled x86_32; then
3999 icc_version=$($cc -dumpversion)
4000 test ${icc_version%%.*} -ge 11 &&
4001 check_cflags -falign-stack=maintain-16-byte ||
4002 disable aligned_stack
4004 elif enabled ccc; then
4005 # disable some annoying warnings
4006 add_cflags -msg_disable bitnotint
4007 add_cflags -msg_disable mixfuncvoid
4008 add_cflags -msg_disable nonstandcast
4009 add_cflags -msg_disable unsupieee
4010 elif enabled gcc; then
4011 check_optflags -fno-tree-vectorize
4012 check_cflags -Werror=implicit-function-declaration
4013 check_cflags -Werror=missing-prototypes
4014 check_cflags -Werror=vla
4015 elif enabled llvm_gcc; then
4016 check_cflags -mllvm -stack-alignment=16
4017 elif enabled clang; then
4018 check_cflags -mllvm -stack-alignment=16
4019 check_cflags -Qunused-arguments
4020 check_cflags -Werror=implicit-function-declaration
4021 check_cflags -Werror=missing-prototypes
4022 elif enabled armcc; then
4023 # 2523: use of inline assembler is deprecated
4024 add_cflags -W${armcc_opt},--diag_suppress=2523
4025 add_cflags -W${armcc_opt},--diag_suppress=1207
4026 add_cflags -W${armcc_opt},--diag_suppress=1293 # assignment in condition
4027 add_cflags -W${armcc_opt},--diag_suppress=3343 # hardfp compat
4028 add_cflags -W${armcc_opt},--diag_suppress=167 # pointer sign
4029 add_cflags -W${armcc_opt},--diag_suppress=513 # pointer sign
4030 elif enabled tms470; then
4031 add_cflags -pds=824 -pds=837
4032 elif enabled pathscale; then
4033 add_cflags -fstrict-overflow -OPT:wrap_around_unsafe_opt=OFF
4034 elif enabled msvc; then
4035 enabled x86_32 && disable aligned_stack
4040 enabled ccc && add_ldflags '-Wl,-expect_unresolved,*'
4043 add_cppflags -Dmain=plan9_main
4047 enabled_any $THREADS_LIST && enable threads
4049 enabled asm || { arch=c; disable $ARCH_LIST $ARCH_EXT_LIST; }
4051 check_deps $CONFIG_LIST \
4057 if test $target_os = "haiku"; then
4059 disable posix_memalign
4062 ! enabled_any memalign posix_memalign aligned_malloc &&
4063 enabled_any $need_memalign && enable memalign_hack
4066 # -> enable ${lib}_deps_${dep}
4067 # -> add $dep to ${lib}_deps only once
4071 enabled "${lib}_deps_${dep}" && return 0
4072 enable "${lib}_deps_${dep}"
4073 prepend "${lib}_deps" $dep
4076 # merge deps lib components
4077 # merge all ${component}_deps into ${lib}_deps and ${lib}_deps_*
4082 enabled $comp || continue
4083 eval "dep=\"\$${comp}_deps\""
4090 merge_deps libavfilter $FILTER_LIST
4092 echo "install prefix $prefix"
4093 echo "source path $source_path"
4094 echo "C compiler $cc"
4095 echo "ARCH $arch ($cpu)"
4096 if test "$build_suffix" != ""; then
4097 echo "build suffix $build_suffix"
4099 if test "$progs_suffix" != ""; then
4100 echo "progs suffix $progs_suffix"
4102 if test "$extra_version" != ""; then
4103 echo "version string suffix $extra_version"
4105 echo "big-endian ${bigendian-no}"
4106 echo "runtime cpu detection ${runtime_cpudetect-no}"
4107 if enabled x86; then
4108 echo "${yasmexe} ${yasm-no}"
4109 echo "MMX enabled ${mmx-no}"
4110 echo "MMXEXT enabled ${mmxext-no}"
4111 echo "3DNow! enabled ${amd3dnow-no}"
4112 echo "3DNow! extended enabled ${amd3dnowext-no}"
4113 echo "SSE enabled ${sse-no}"
4114 echo "SSSE3 enabled ${ssse3-no}"
4115 echo "AVX enabled ${avx-no}"
4116 echo "FMA4 enabled ${fma4-no}"
4117 echo "CMOV enabled ${cmov-no}"
4118 echo "CMOV is fast ${fast_cmov-no}"
4119 echo "EBX available ${ebx_available-no}"
4120 echo "EBP available ${ebp_available-no}"
4122 if enabled arm; then
4123 echo "ARMv5TE enabled ${armv5te-no}"
4124 echo "ARMv6 enabled ${armv6-no}"
4125 echo "ARMv6T2 enabled ${armv6t2-no}"
4126 echo "ARM VFP enabled ${armvfp-no}"
4127 echo "NEON enabled ${neon-no}"
4129 if enabled mips; then
4130 echo "MIPS FPU enabled ${mipsfpu-no}"
4131 echo "MIPS32R2 enabled ${mips32r2-no}"
4132 echo "MIPS DSP R1 enabled ${mipsdspr1-no}"
4133 echo "MIPS DSP R2 enabled ${mipsdspr2-no}"
4135 if enabled ppc; then
4136 echo "AltiVec enabled ${altivec-no}"
4137 echo "PPC 4xx optimizations ${ppc4xx-no}"
4138 echo "dcbzl available ${dcbzl-no}"
4140 if enabled sparc; then
4141 echo "VIS enabled ${vis-no}"
4143 echo "debug symbols ${debug-no}"
4144 echo "strip symbols ${stripping-no}"
4145 echo "optimize for size ${small-no}"
4146 echo "optimizations ${optimizations-no}"
4147 echo "static ${static-no}"
4148 echo "shared ${shared-no}"
4149 echo "postprocessing support ${postproc-no}"
4150 echo "new filter support ${avfilter-no}"
4151 echo "network support ${network-no}"
4152 echo "threading support ${thread_type-no}"
4153 echo "safe bitstream reader ${safe_bitstream_reader-no}"
4154 echo "SDL support ${sdl-no}"
4155 echo "libdxva2 enabled ${dxva2-no}"
4156 echo "libva enabled ${vaapi-no}"
4157 echo "libvdpau enabled ${vdpau-no}"
4158 echo "AVISynth enabled ${avisynth-no}"
4159 echo "frei0r enabled ${frei0r-no}"
4160 echo "gnutls enabled ${gnutls-no}"
4161 echo "libaacplus enabled ${libaacplus-no}"
4162 echo "libass enabled ${libass-no}"
4163 echo "libcaca enabled ${libcaca-no}"
4164 echo "libcdio support ${libcdio-no}"
4165 echo "libcelt enabled ${libcelt-no}"
4166 echo "libdc1394 support ${libdc1394-no}"
4167 echo "libfaac enabled ${libfaac-no}"
4168 echo "libfdk-aac enabled ${libfdk_aac-no}"
4169 echo "libgsm enabled ${libgsm-no}"
4170 echo "libiec61883 support ${libiec61883-no}"
4171 echo "libilbc enabled ${libilbc-no}"
4172 echo "libmodplug enabled ${libmodplug-no}"
4173 echo "libmp3lame enabled ${libmp3lame-no}"
4174 echo "libnut enabled ${libnut-no}"
4175 echo "libopencore-amrnb support ${libopencore_amrnb-no}"
4176 echo "libopencore-amrwb support ${libopencore_amrwb-no}"
4177 echo "libopencv support ${libopencv-no}"
4178 echo "libopenjpeg enabled ${libopenjpeg-no}"
4179 echo "libopus enabled ${libopus-no}"
4180 echo "libpulse enabled ${libpulse-no}"
4181 echo "librtmp enabled ${librtmp-no}"
4182 echo "libschroedinger enabled ${libschroedinger-no}"
4183 echo "libspeex enabled ${libspeex-no}"
4184 echo "libstagefright-h264 enabled ${libstagefright_h264-no}"
4185 echo "libtheora enabled ${libtheora-no}"
4186 echo "libtwolame enabled ${libtwolame-no}"
4187 echo "libutvideo enabled ${libutvideo-no}"
4188 echo "libv4l2 enabled ${libv4l2-no}"
4189 echo "libvo-aacenc support ${libvo_aacenc-no}"
4190 echo "libvo-amrwbenc support ${libvo_amrwbenc-no}"
4191 echo "libvorbis enabled ${libvorbis-no}"
4192 echo "libvpx enabled ${libvpx-no}"
4193 echo "libx264 enabled ${libx264-no}"
4194 echo "libxavs enabled ${libxavs-no}"
4195 echo "libxvid enabled ${libxvid-no}"
4196 echo "openal enabled ${openal-no}"
4197 echo "openssl enabled ${openssl-no}"
4198 echo "zlib enabled ${zlib-no}"
4199 echo "bzlib enabled ${bzlib-no}"
4200 echo "texi2html enabled ${texi2html-no}"
4201 echo "perl enabled ${perl-no}"
4202 echo "pod2man enabled ${pod2man-no}"
4203 echo "makeinfo enabled ${makeinfo-no}"
4204 test -n "$random_seed" &&
4205 echo "random seed ${random_seed}"
4208 for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
4209 echo "Enabled ${type}s:"
4210 eval list=\$$(toupper $type)_LIST
4211 print_enabled '_*' $list | sort | pr -r -3 -t
4215 license="LGPL version 2.1 or later"
4216 if enabled nonfree; then
4217 license="nonfree and unredistributable"
4218 elif enabled gplv3; then
4219 license="GPL version 3 or later"
4220 elif enabled lgplv3; then
4221 license="LGPL version 3 or later"
4222 elif enabled gpl; then
4223 license="GPL version 2 or later"
4226 echo "License: $license"
4228 echo "Creating config.mak and config.h..."
4230 test -e Makefile || $ln_s "$source_path/Makefile" .
4232 enabled stripping || strip="echo skipping strip"
4234 config_files="$TMPH config.mak"
4236 cat > config.mak <<EOF
4237 # Automatically generated by configure - do not modify!
4238 ifndef FFMPEG_CONFIG_MAK
4240 FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION
4242 LIBDIR=\$(DESTDIR)$libdir
4243 SHLIBDIR=\$(DESTDIR)$shlibdir
4244 INCDIR=\$(DESTDIR)$incdir
4245 BINDIR=\$(DESTDIR)$bindir
4246 DATADIR=\$(DESTDIR)$datadir
4247 MANDIR=\$(DESTDIR)$mandir
4248 SRC_PATH=$source_path
4249 ifndef MAIN_MAKEFILE
4250 SRC_PATH:=\$(SRC_PATH:.%=..%)
4259 DEPCCFLAGS=$DEPCCFLAGS \$(CPPFLAGS)
4261 DEPASFLAGS=$DEPASFLAGS \$(CPPFLAGS)
4287 LDFLAGS-ffserver=$FFSERVERLDFLAGS
4289 YASMFLAGS=$YASMFLAGS
4290 BUILDSUF=$build_suffix
4291 PROGSSUF=$progs_suffix
4299 EXTRA_VERSION=$extra_version
4302 CCDEP_FLAGS=$CCDEP_FLAGS
4304 ASDEP_FLAGS=$ASDEP_FLAGS
4305 CC_DEPFLAGS=$CC_DEPFLAGS
4306 AS_DEPFLAGS=$AS_DEPFLAGS
4309 HOSTCFLAGS=$host_cflags
4310 HOSTEXESUF=$HOSTEXESUF
4311 HOSTLDFLAGS=$host_ldflags
4314 DEPHOSTCCFLAGS=$DEPHOSTCCFLAGS \$(HOSTCCFLAGS)
4315 HOSTCCDEP=$HOSTCCDEP
4316 HOSTCCDEP_FLAGS=$HOSTCCDEP_FLAGS
4317 HOSTCC_DEPFLAGS=$HOSTCC_DEPFLAGS
4321 TARGET_EXEC=$target_exec
4322 TARGET_PATH=$target_path
4323 LIBS-ffplay=$sdl_libs
4324 CFLAGS-ffplay=$sdl_cflags
4325 ZLIB=$($ldflags_filter -lz)
4326 LIB_INSTALL_EXTRA_CMD=$LIB_INSTALL_EXTRA_CMD
4327 EXTRALIBS=$extralibs
4328 COMPAT_OBJS=$compat_objs
4331 LIBTARGET=${LIBTARGET}
4332 SLIBNAME=${SLIBNAME}
4333 SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}
4334 SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}
4335 SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}
4336 SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}
4337 SLIB_INSTALL_NAME=${SLIB_INSTALL_NAME}
4338 SLIB_INSTALL_LINKS=${SLIB_INSTALL_LINKS}
4339 SLIB_INSTALL_EXTRA_LIB=${SLIB_INSTALL_EXTRA_LIB}
4340 SLIB_INSTALL_EXTRA_SHLIB=${SLIB_INSTALL_EXTRA_SHLIB}
4341 SAMPLES:=${samples:-\$(FATE_SAMPLES)}
4342 NOREDZONE_FLAGS=$noredzone_flags
4347 name=$(toupper $lcname)
4348 file=$source_path/$lcname/version.h
4349 eval $(awk "/#define ${name}_VERSION_M/ { print \$2 \"=\" \$3 }" "$file")
4350 eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
4351 eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
4352 eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
4357 file=$source_path/$2
4358 # This condition will be removed when we stop supporting old libpostproc versions
4359 if ! test "$name" = LIBPOSTPROC || test "$postproc_version" = current; then
4360 eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
4361 eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
4363 lcname=$(tolower $name)
4364 eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
4365 eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
4368 get_version_old LIBPOSTPROC libpostproc/version.h
4370 map 'get_version $v' $LIBRARY_LIST
4373 /* Automatically generated by configure - do not modify! */
4374 #ifndef FFMPEG_CONFIG_H
4375 #define FFMPEG_CONFIG_H
4376 #define FFMPEG_CONFIGURATION "$(c_escape $FFMPEG_CONFIGURATION)"
4377 #define FFMPEG_LICENSE "$(c_escape $license)"
4378 #define FFMPEG_DATADIR "$(eval c_escape $datadir)"
4379 #define AVCONV_DATADIR "$(eval c_escape $datadir)"
4380 #define CC_IDENT "$(c_escape ${cc_ident:-Unknown compiler})"
4381 #define av_restrict $_restrict
4382 #define EXTERN_PREFIX "${extern_prefix}"
4383 #define EXTERN_ASM ${extern_prefix}
4384 #define SLIBSUF "$SLIBSUF"
4385 #define HAVE_MMX2 HAVE_MMXEXT
4388 test -n "$assert_level" &&
4389 echo "#define ASSERT_LEVEL $assert_level" >>$TMPH
4391 test -n "$malloc_prefix" &&
4392 echo "#define MALLOC_PREFIX $malloc_prefix" >>$TMPH
4394 if enabled yasm; then
4395 append config_files $TMPASM
4399 print_config ARCH_ "$config_files" $ARCH_LIST
4400 print_config HAVE_ "$config_files" $HAVE_LIST
4401 print_config CONFIG_ "$config_files" $CONFIG_LIST \
4405 echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
4406 echo "endif # FFMPEG_CONFIG_MAK" >> config.mak
4408 # Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
4409 cp_if_changed $TMPH config.h
4412 enabled yasm && cp_if_changed $TMPASM config.asm
4415 /* Generated by ffconf */
4416 #ifndef AVUTIL_AVCONFIG_H
4417 #define AVUTIL_AVCONFIG_H
4420 test "$postproc_version" != current && cat >> $TMPH <<EOF
4421 #define LIBPOSTPROC_VERSION_MAJOR $LIBPOSTPROC_VERSION_MAJOR
4422 #define LIBPOSTPROC_VERSION_MINOR $LIBPOSTPROC_VERSION_MINOR
4423 #define LIBPOSTPROC_VERSION_MICRO $LIBPOSTPROC_VERSION_MICRO
4426 print_config AV_HAVE_ $TMPH $HAVE_LIST_PUB
4428 echo "#endif /* AVUTIL_AVCONFIG_H */" >> $TMPH
4430 cp_if_changed $TMPH libavutil/avconfig.h
4432 if test -n "$WARNINGS"; then
4433 printf "\n$WARNINGS"
4434 enabled fatal_warnings && exit 1
4437 # build pkg-config files
4439 pkgconfig_generate(){
4441 shortname=${name#lib}${build_suffix}
4446 enabled ${name#lib} || return 0
4448 cat <<EOF > $name/$name.pc
4450 exec_prefix=\${prefix}
4455 Description: $comment
4457 Requires: $(enabled shared || echo $requires)
4458 Requires.private: $(enabled shared && echo $requires)
4460 Libs: -L\${libdir} -l${shortname} $(enabled shared || echo $libs)
4461 Libs.private: $(enabled shared && echo $libs)
4462 Cflags: -I\${includedir}
4465 mkdir -p doc/examples/pc-uninstalled
4466 includedir=${source_path}
4467 [ "$includedir" = . ] && includedir="\${pcfiledir}/../../.."
4468 cat <<EOF > doc/examples/pc-uninstalled/$name.pc
4471 libdir=\${pcfiledir}/../../../$name
4472 includedir=${includedir}
4475 Description: $comment
4479 Libs: -L\${libdir} -l${shortname} $(enabled shared || echo $libs)
4480 Cflags: -I\${includedir}
4484 libavfilter_pc_deps="libavutil = $LIBAVUTIL_VERSION"
4485 enabled libavfilter_deps_avcodec && prepend libavfilter_pc_deps "libavcodec = $LIBAVCODEC_VERSION,"
4486 enabled libavfilter_deps_avformat && prepend libavfilter_pc_deps "libavformat = $LIBAVFORMAT_VERSION,"
4487 enabled libavfilter_deps_avresample && prepend libavfilter_pc_deps "libavresample = $LIBAVRESAMPLE_VERSION,"
4488 enabled libavfilter_deps_swscale && prepend libavfilter_pc_deps "libswscale = $LIBSWSCALE_VERSION,"
4489 enabled libavfilter_deps_swresample && prepend libavfilter_pc_deps "libswresample = $LIBSWRESAMPLE_VERSION,"
4490 enabled libavfilter_deps_postproc && prepend libavfilter_pc_deps "libpostproc = $LIBPOSTPROC_VERSION,"
4491 libavfilter_pc_deps=${libavfilter_pc_deps%, }
4493 libavdevice_pc_deps="libavformat = $LIBAVFORMAT_VERSION"
4494 enabled lavfi_indev && prepend libavdevice_pc_deps "libavfilter = $LIBAVFILTER_VERSION,"
4496 pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION" "$LIBM"
4497 pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
4498 pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
4499 pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "$libavdevice_pc_deps"
4500 pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "$libavfilter_pc_deps"
4501 pkgconfig_generate libpostproc "FFmpeg postprocessing library" "$LIBPOSTPROC_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"
4502 pkgconfig_generate libavresample "Libav audio resampling library" "$LIBAVRESAMPLE_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
4503 pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "$LIBM" "libavutil = $LIBAVUTIL_VERSION"
4504 pkgconfig_generate libswresample "FFmpeg audio resampling library" "$LIBSWRESAMPLE_VERSION" "$LIBM" "libavutil = $LIBAVUTIL_VERSION"
4506 fix_ffmpeg_remote(){
4509 fixme_remote=$(git --git-dir=$source_path/.git --work-tree=$source_path remote -v | grep $git_remote_from | cut -f 1 | sort | uniq)
4510 if [ "$fixme_remote" != "" ]; then
4512 Outdated domain in git config, the official domain for ffmpeg git is since
4513 November 2011, source.ffmpeg.org, both the old and the new point to the same
4514 repository and server. To update it enter the following commands:
4516 for remote in $fixme_remote; do
4517 echolog "git remote set-url $remote $git_remote_to"
4522 if test -f "$source_path/.git/config"; then
4523 remote_from=git.videolan.org
4524 remote_to=source.ffmpeg.org
4525 fix_ffmpeg_remote git@$remote_from:ffmpeg git@$remote_to:ffmpeg
4526 fix_ffmpeg_remote git://$remote_from/ffmpeg git://$remote_to/ffmpeg