avf_concat: fix min value for v option.
[ffmpeg.git] / configure
1 #!/bin/sh
2 #
3 # FFmpeg configure script
4 #
5 # Copyright (c) 2000-2002 Fabrice Bellard
6 # Copyright (c) 2005-2008 Diego Biurrun
7 # Copyright (c) 2005-2008 Mans Rullgard
8 #
9
10 # Prevent locale nonsense from breaking basic text processing.
11 LC_ALL=C
12 export LC_ALL
13
14 # make sure we are running under a compatible shell
15 # try to make this part work with most shells
16
17 try_exec(){
18     echo "Trying shell $1"
19     type "$1" > /dev/null 2>&1 && exec "$@"
20 }
21
22 unset foo
23 (: ${foo%%bar}) 2> /dev/null
24 E1="$?"
25
26 (: ${foo?}) 2> /dev/null
27 E2="$?"
28
29 if test "$E1" != 0 || test "$E2" = 0; then
30     echo "Broken shell detected.  Trying alternatives."
31     export FF_CONF_EXEC
32     if test "0$FF_CONF_EXEC" -lt 1; then
33         FF_CONF_EXEC=1
34         try_exec bash "$0" "$@"
35     fi
36     if test "0$FF_CONF_EXEC" -lt 2; then
37         FF_CONF_EXEC=2
38         try_exec ksh "$0" "$@"
39     fi
40     if test "0$FF_CONF_EXEC" -lt 3; then
41         FF_CONF_EXEC=3
42         try_exec /usr/xpg4/bin/sh "$0" "$@"
43     fi
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."
53     fi
54     exit 1
55 fi
56
57 show_help(){
58 cat <<EOF
59 Usage: configure [options]
60 Options: [defaults in brackets after descriptions]
61
62 Help options:
63   --help                   print this message
64   --list-decoders          show all available decoders
65   --list-encoders          show all available encoders
66   --list-hwaccels          show all available hardware accelerators
67   --list-demuxers          show all available demuxers
68   --list-muxers            show all available muxers
69   --list-parsers           show all available parsers
70   --list-protocols         show all available protocols
71   --list-bsfs              show all available bitstream filters
72   --list-indevs            show all available input devices
73   --list-outdevs           show all available output devices
74   --list-filters           show all available filters
75
76 Standard options:
77   --logfile=FILE           log tests and output to FILE [config.log]
78   --disable-logging        do not log configure debug information
79   --prefix=PREFIX          install in PREFIX [$prefix]
80   --bindir=DIR             install binaries in DIR [PREFIX/bin]
81   --datadir=DIR            install data files in DIR [PREFIX/share/ffmpeg]
82   --libdir=DIR             install libs in DIR [PREFIX/lib]
83   --shlibdir=DIR           install shared libs in DIR [PREFIX/lib]
84   --incdir=DIR             install includes in DIR [PREFIX/include]
85   --mandir=DIR             install man page in DIR [PREFIX/share/man]
86
87 Licensing options:
88   --enable-gpl             allow use of GPL code, the resulting libs
89                            and binaries will be under GPL [no]
90   --enable-version3        upgrade (L)GPL to version 3 [no]
91   --enable-nonfree         allow use of nonfree code, the resulting libs
92                            and binaries will be unredistributable [no]
93
94 Configuration options:
95   --disable-static         do not build static libraries [no]
96   --enable-shared          build shared libraries [no]
97   --enable-small           optimize for size instead of speed
98   --enable-runtime-cpudetect detect cpu capabilities at runtime (bigger binary)
99   --enable-gray            enable full grayscale support (slower color)
100   --disable-swscale-alpha  disable alpha channel support in swscale
101
102 Component options:
103   --disable-doc            do not build documentation
104   --disable-ffmpeg         disable ffmpeg build
105   --disable-ffplay         disable ffplay build
106   --disable-ffprobe        disable ffprobe build
107   --disable-ffserver       disable ffserver build
108   --disable-avdevice       disable libavdevice build
109   --disable-avcodec        disable libavcodec build
110   --disable-avformat       disable libavformat build
111   --disable-swresample     disable libswresample build
112   --disable-swscale        disable libswscale build
113   --disable-postproc       disable libpostproc build
114   --disable-avfilter       disable libavfilter build
115   --enable-avresample      enable libavresample build [no]
116   --disable-pthreads       disable pthreads [auto]
117   --disable-w32threads     disable Win32 threads [auto]
118   --disable-os2threads     disable OS/2 threads [auto]
119   --enable-x11grab         enable X11 grabbing [no]
120   --disable-network        disable network support [no]
121   --disable-dct            disable DCT code
122   --disable-mdct           disable MDCT code
123   --disable-rdft           disable RDFT code
124   --disable-fft            disable FFT code
125   --enable-dxva2           enable DXVA2 code
126   --enable-vaapi           enable VAAPI code [autodetect]
127   --enable-vda             enable VDA code   [autodetect]
128   --enable-vdpau           enable VDPAU code [autodetect]
129
130 Individual component options:
131   --disable-everything     disable all components listed below
132   --disable-encoder=NAME   disable encoder NAME
133   --enable-encoder=NAME    enable encoder NAME
134   --disable-encoders       disable all encoders
135   --disable-decoder=NAME   disable decoder NAME
136   --enable-decoder=NAME    enable decoder NAME
137   --disable-decoders       disable all decoders
138   --disable-hwaccel=NAME   disable hwaccel NAME
139   --enable-hwaccel=NAME    enable hwaccel NAME
140   --disable-hwaccels       disable all hwaccels
141   --disable-muxer=NAME     disable muxer NAME
142   --enable-muxer=NAME      enable muxer NAME
143   --disable-muxers         disable all muxers
144   --disable-demuxer=NAME   disable demuxer NAME
145   --enable-demuxer=NAME    enable demuxer NAME
146   --disable-demuxers       disable all demuxers
147   --enable-parser=NAME     enable parser NAME
148   --disable-parser=NAME    disable parser NAME
149   --disable-parsers        disable all parsers
150   --enable-bsf=NAME        enable bitstream filter NAME
151   --disable-bsf=NAME       disable bitstream filter NAME
152   --disable-bsfs           disable all bitstream filters
153   --enable-protocol=NAME   enable protocol NAME
154   --disable-protocol=NAME  disable protocol NAME
155   --disable-protocols      disable all protocols
156   --enable-indev=NAME      enable input device NAME
157   --disable-indev=NAME     disable input device NAME
158   --disable-indevs         disable input devices
159   --enable-outdev=NAME     enable output device NAME
160   --disable-outdev=NAME    disable output device NAME
161   --disable-outdevs        disable output devices
162   --disable-devices        disable all devices
163   --enable-filter=NAME     enable filter NAME
164   --disable-filter=NAME    disable filter NAME
165   --disable-filters        disable all filters
166
167 External library support:
168   --enable-avisynth        enable reading of AVISynth script files [no]
169   --enable-bzlib           enable bzlib [autodetect]
170   --enable-fontconfig      enable fontconfig
171   --enable-frei0r          enable frei0r video filtering
172   --enable-gnutls          enable gnutls [no]
173   --enable-libaacplus      enable AAC+ encoding via libaacplus [no]
174   --enable-libass          enable libass subtitles rendering [no]
175   --enable-libbluray       enable BluRay reading using libbluray [no]
176   --enable-libcaca         enable textual display using libcaca
177   --enable-libcelt         enable CELT decoding via libcelt [no]
178   --enable-libcdio         enable audio CD grabbing with libcdio
179   --enable-libdc1394       enable IIDC-1394 grabbing using libdc1394
180                            and libraw1394 [no]
181   --enable-libfaac         enable AAC encoding via libfaac [no]
182   --enable-libfdk-aac      enable AAC encoding via libfdk-aac [no]
183   --enable-libflite        enable flite (voice synthesis) support via libflite [no]
184   --enable-libfreetype     enable libfreetype [no]
185   --enable-libgsm          enable GSM de/encoding via libgsm [no]
186   --enable-libiec61883     enable iec61883 via libiec61883 [no]
187   --enable-libilbc         enable iLBC de/encoding via libilbc [no]
188   --enable-libmodplug      enable ModPlug via libmodplug [no]
189   --enable-libmp3lame      enable MP3 encoding via libmp3lame [no]
190   --enable-libnut          enable NUT (de)muxing via libnut,
191                            native (de)muxer exists [no]
192   --enable-libopencore-amrnb enable AMR-NB de/encoding via libopencore-amrnb [no]
193   --enable-libopencore-amrwb enable AMR-WB decoding via libopencore-amrwb [no]
194   --enable-libopencv       enable video filtering via libopencv [no]
195   --enable-libopenjpeg     enable JPEG 2000 de/encoding via OpenJPEG [no]
196   --enable-libopus         enable Opus decoding via libopus [no]
197   --enable-libpulse        enable Pulseaudio input via libpulse [no]
198   --enable-librtmp         enable RTMP[E] support via librtmp [no]
199   --enable-libschroedinger enable Dirac de/encoding via libschroedinger [no]
200   --enable-libspeex        enable Speex de/encoding via libspeex [no]
201   --enable-libstagefright-h264  enable H.264 decoding via libstagefright [no]
202   --enable-libtheora       enable Theora encoding via libtheora [no]
203   --enable-libutvideo      enable Ut Video encoding and decoding via libutvideo [no]
204   --enable-libv4l2         enable libv4l2/v4l-utils [no]
205   --enable-libvo-aacenc    enable AAC encoding via libvo-aacenc [no]
206   --enable-libvo-amrwbenc  enable AMR-WB encoding via libvo-amrwbenc [no]
207   --enable-libvorbis       enable Vorbis en/decoding via libvorbis,
208                            native implementation exists [no]
209   --enable-libvpx          enable VP8 de/encoding via libvpx [no]
210   --enable-libx264         enable H.264 encoding via x264 [no]
211   --enable-libxavs         enable AVS encoding via xavs [no]
212   --enable-libxvid         enable Xvid encoding via xvidcore,
213                            native MPEG-4/Xvid encoder exists [no]
214   --enable-openal          enable OpenAL 1.1 capture support [no]
215   --enable-openssl         enable openssl [no]
216   --enable-zlib            enable zlib [autodetect]
217
218 Advanced options (experts only):
219   --cross-prefix=PREFIX    use PREFIX for compilation tools [$cross_prefix]
220   --enable-cross-compile   assume a cross-compiler is used
221   --sysroot=PATH           root of cross-build tree
222   --sysinclude=PATH        location of cross-build system headers
223   --target-os=OS           compiler targets OS [$target_os]
224   --target-exec=CMD        command to run executables on target
225   --target-path=DIR        path to view of build directory on target
226   --nm=NM                  use nm tool NM [$nm_default]
227   --ar=AR                  use archive tool AR [$ar_default]
228   --as=AS                  use assembler AS [$as_default]
229   --yasmexe=EXE            use yasm-compatible assembler EXE [$yasmexe_default]
230   --cc=CC                  use C compiler CC [$cc_default]
231   --cxx=CXX                use C compiler CXX [$cxx_default]
232   --ld=LD                  use linker LD [$ld_default]
233   --host-cc=HOSTCC         use host C compiler HOSTCC
234   --host-cflags=HCFLAGS    use HCFLAGS when compiling for host
235   --host-ldflags=HLDFLAGS  use HLDFLAGS when linking for host
236   --host-libs=HLIBS        use libs HLIBS when linking for host
237   --extra-cflags=ECFLAGS   add ECFLAGS to CFLAGS [$CFLAGS]
238   --extra-cxxflags=ECFLAGS add ECFLAGS to CXXFLAGS [$CXXFLAGS]
239   --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]
240   --extra-libs=ELIBS       add ELIBS [$ELIBS]
241   --extra-version=STRING   version string suffix []
242   --optflags               override optimization-related compiler flags
243   --build-suffix=SUFFIX    library name suffix []
244   --malloc-prefix=PREFIX   prefix malloc and related names with PREFIX
245   --progs-suffix=SUFFIX    program name suffix []
246   --arch=ARCH              select architecture [$arch]
247   --cpu=CPU                select the minimum required CPU (affects
248                            instruction selection, may crash on older CPUs)
249   --enable-pic             build position-independent code
250   --enable-sram            allow use of on-chip SRAM
251   --disable-symver         disable symbol versioning
252   --disable-fastdiv        disable table-based division
253   --enable-hardcoded-tables use hardcoded tables instead of runtime generation
254   --disable-safe-bitstream-reader
255                            disable buffer boundary checking in bitreaders
256                            (faster, but may crash)
257   --enable-memalign-hack   emulate memalign, interferes with memory debuggers
258
259 Optimization options (experts only):
260   --disable-asm            disable all assembler optimizations
261   --disable-altivec        disable AltiVec optimizations
262   --disable-amd3dnow       disable 3DNow! optimizations
263   --disable-amd3dnowext    disable 3DNow! extended optimizations
264   --disable-mmx            disable MMX optimizations
265   --disable-mmx2           disable MMX2 optimizations
266   --disable-sse            disable SSE optimizations
267   --disable-ssse3          disable SSSE3 optimizations
268   --disable-avx            disable AVX optimizations
269   --disable-fma4           disable FMA4 optimizations
270   --disable-armv5te        disable armv5te optimizations
271   --disable-armv6          disable armv6 optimizations
272   --disable-armv6t2        disable armv6t2 optimizations
273   --disable-armvfp         disable ARM VFP optimizations
274   --disable-mmi            disable MMI optimizations
275   --disable-neon           disable NEON optimizations
276   --disable-vis            disable VIS optimizations
277   --disable-yasm           disable use of yasm assembler
278   --disable-mips32r2       disable MIPS32R2 optimizations
279   --disable-mipsdspr1      disable MIPS DSP ASE R1 optimizations
280   --disable-mipsdspr2      disable MIPS DSP ASE R2 optimizations
281   --disable-mipsfpu        disable floating point MIPS optimizations
282   --disable-fast-unaligned consider unaligned accesses slow
283   --postproc-version=V     build libpostproc version V.
284                            Where V can be '$ALT_PP_VER_MAJOR.$ALT_PP_VER_MINOR.$ALT_PP_VER_MICRO' or 'current'. [$postproc_version_default]
285
286 Developer options (useful when working on FFmpeg itself):
287   --enable-coverage        build with test coverage instrumentation
288   --disable-debug          disable debugging symbols
289   --enable-debug=LEVEL     set the debug level [$debuglevel]
290   --disable-optimizations  disable compiler optimizations
291   --enable-extra-warnings  enable more compiler warnings
292   --disable-stripping      disable stripping of executables and shared libraries
293   --assert-level=level     0(default), 1 or 2, amount of assertion testing,
294                            2 causes a slowdown at runtime.
295   --enable-memory-poisoning fill heap uninitialized allocated space with arbitrary data
296   --valgrind=VALGRIND      run "make fate" tests through valgrind to detect memory
297                            leaks and errors, using the specified valgrind binary.
298                            Cannot be combined with --target-exec
299   --samples=PATH           location of test samples for FATE, if not set use
300                            \$FATE_SAMPLES at make invocation time.
301   --enable-xmm-clobber-test check XMM registers for clobbering (Win64-only;
302                            should be used only for debugging purposes)
303   --enable-random          randomly enable/disable components
304   --disable-random
305   --enable-random=LIST     randomly enable/disable specific components or
306   --disable-random=LIST    component groups. LIST is a comma-separated list
307                            of NAME[:PROB] entries where NAME is a component
308                            (group) and PROB the probability associated with
309                            NAME (default 0.5).
310   --random-seed=VALUE      seed value for --enable/disable-random
311
312 NOTE: Object files are built at the place where configure is launched.
313 EOF
314   exit 0
315 }
316
317 quotes='""'
318
319 log(){
320     echo "$@" >> $logfile
321 }
322
323 log_file(){
324     log BEGIN $1
325     pr -n -t $1 >> $logfile
326     log END $1
327 }
328
329 echolog(){
330     log "$@"
331     echo "$@"
332 }
333
334 warn(){
335     log "WARNING: $*"
336     WARNINGS="${WARNINGS}WARNING: $*\n"
337 }
338
339 die(){
340     echolog "$@"
341     cat <<EOF
342
343 If you think configure made a mistake, make sure you are using the latest
344 version from Git.  If the latest version fails, report the problem to the
345 ffmpeg-user@ffmpeg.org mailing list or IRC #ffmpeg on irc.freenode.net.
346 EOF
347     if disabled logging; then
348         cat <<EOF
349 Rerun configure with logging enabled (do not use --disable-logging), and
350 include the log this produces with your report.
351 EOF
352     else
353 cat <<EOF
354 Include the log file "$logfile" produced by configure as this will help
355 solving the problem.
356 EOF
357     fi
358     exit 1
359 }
360
361 # Avoid locale weirdness, besides we really just want to translate ASCII.
362 toupper(){
363     echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
364 }
365
366 tolower(){
367     echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
368 }
369
370 c_escape(){
371     echo "$*" | sed 's/["\\]/\\\0/g'
372 }
373
374 sh_quote(){
375     v=$(echo "$1" | sed "s/'/'\\\\''/g")
376     test "x$v" = "x${v#*[!A-Za-z0-9_/.+-]}" || v="'$v'"
377     echo "$v"
378 }
379
380 cleanws(){
381     echo "$@" | sed 's/^ *//;s/  */ /g;s/ *$//'
382 }
383
384 filter(){
385     pat=$1
386     shift
387     for v; do
388         eval "case $v in $pat) echo $v ;; esac"
389     done
390 }
391
392 filter_out(){
393     pat=$1
394     shift
395     for v; do
396         eval "case $v in $pat) ;; *) echo $v ;; esac"
397     done
398 }
399
400 map(){
401     m=$1
402     shift
403     for v; do eval $m; done
404 }
405
406 set_all(){
407     value=$1
408     shift
409     for var in $*; do
410         eval $var=$value
411     done
412 }
413
414 set_weak(){
415     value=$1
416     shift
417     for var; do
418         eval : \${$var:=$value}
419     done
420 }
421
422 set_safe(){
423     var=$1
424     shift
425     eval $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')='$*'
426 }
427
428 get_safe(){
429     eval echo \$$(echo "$1" | sed 's/[^A-Za-z0-9_]/_/g')
430 }
431
432 pushvar(){
433     for var in $*; do
434         eval level=\${${var}_level:=0}
435         eval ${var}_${level}="\$$var"
436         eval ${var}_level=$(($level+1))
437     done
438 }
439
440 popvar(){
441     for var in $*; do
442         eval level=\${${var}_level:-0}
443         test $level = 0 && continue
444         eval level=$(($level-1))
445         eval $var="\${${var}_${level}}"
446         eval ${var}_level=$level
447         eval unset ${var}_${level}
448     done
449 }
450
451 enable(){
452     set_all yes $*
453 }
454
455 disable(){
456     set_all no $*
457 }
458
459 enable_weak(){
460     set_weak yes $*
461 }
462
463 disable_weak(){
464     set_weak no $*
465 }
466
467 enable_safe(){
468     for var; do
469         enable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
470     done
471 }
472
473 disable_safe(){
474     for var; do
475         disable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
476     done
477 }
478
479 do_enable_deep(){
480     for var; do
481         enabled $var && continue
482         eval sel="\$${var}_select"
483         eval sgs="\$${var}_suggest"
484         pushvar var sgs
485         enable_deep $sel
486         popvar sgs
487         enable_deep_weak $sgs
488         popvar var
489     done
490 }
491
492 enable_deep(){
493     do_enable_deep $*
494     enable $*
495 }
496
497 enable_deep_weak(){
498     do_enable_deep $*
499     enable_weak $*
500 }
501
502 enabled(){
503     test "${1#!}" = "$1" && op== || op=!=
504     eval test "x\$${1#!}" $op "xyes"
505 }
506
507 disabled(){
508     test "${1#!}" = "$1" && op== || op=!=
509     eval test "x\$${1#!}" $op "xno"
510 }
511
512 enabled_all(){
513     for opt; do
514         enabled $opt || return 1
515     done
516 }
517
518 disabled_all(){
519     for opt; do
520         disabled $opt || return 1
521     done
522 }
523
524 enabled_any(){
525     for opt; do
526         enabled $opt && return 0
527     done
528 }
529
530 disabled_any(){
531     for opt; do
532         disabled $opt && return 0
533     done
534     return 1
535 }
536
537 set_default(){
538     for opt; do
539         eval : \${$opt:=\$${opt}_default}
540     done
541 }
542
543 is_in(){
544     value=$1
545     shift
546     for var in $*; do
547         [ $var = $value ] && return 0
548     done
549     return 1
550 }
551
552 check_deps(){
553     for cfg; do
554         cfg="${cfg#!}"
555         enabled ${cfg}_checking && die "Circular dependency for $cfg."
556         disabled ${cfg}_checking && continue
557         enable ${cfg}_checking
558
559         eval dep_all="\$${cfg}_deps"
560         eval dep_any="\$${cfg}_deps_any"
561         eval dep_sel="\$${cfg}_select"
562         eval dep_sgs="\$${cfg}_suggest"
563         eval dep_ifa="\$${cfg}_if"
564         eval dep_ifn="\$${cfg}_if_any"
565
566         pushvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
567         check_deps $dep_all $dep_any $dep_sel $dep_sgs $dep_ifa $dep_ifn
568         popvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
569
570         [ -n "$dep_ifa" ] && { enabled_all $dep_ifa && enable_weak $cfg; }
571         [ -n "$dep_ifn" ] && { enabled_any $dep_ifn && enable_weak $cfg; }
572         enabled_all  $dep_all || disable $cfg
573         enabled_any  $dep_any || disable $cfg
574         disabled_any $dep_sel && disable $cfg
575
576         if enabled $cfg; then
577             eval dep_extralibs="\$${cfg}_extralibs"
578             test -n "$dep_extralibs" && add_extralibs $dep_extralibs
579             enable_deep $dep_sel
580             enable_deep_weak $dep_sgs
581         fi
582
583         disable ${cfg}_checking
584     done
585 }
586
587 print_config_h(){
588     enabled $1 && v=1 || v=0
589     echo "#define $2 $v"
590 }
591
592 print_config_mak(){
593     enabled $1 && v= || v=!
594     echo "$v$2=yes"
595 }
596
597 print_config_asm(){
598     enabled $1 && v=1 || v=0
599     echo "%define $2 $v"
600 }
601
602 print_config(){
603     pfx=$1
604     files=$2
605     shift 2
606     for cfg; do
607         ucname="$(toupper $cfg)"
608         for f in $files; do
609             "print_config_${f##*.}" $cfg ${pfx}${ucname} >>$f
610         done
611     done
612 }
613
614 print_enabled(){
615     test "$1" = -n && end=" " && shift || end="\n"
616     suf=$1
617     shift
618     for v; do
619         enabled $v && printf "%s$end" ${v%$suf};
620     done
621 }
622
623 append(){
624     var=$1
625     shift
626     eval "$var=\"\$$var $*\""
627 }
628
629 prepend(){
630     var=$1
631     shift
632     eval "$var=\"$* \$$var\""
633 }
634
635 add_cppflags(){
636     append CPPFLAGS "$@"
637 }
638
639 add_cflags(){
640     append CFLAGS $($cflags_filter "$@")
641 }
642
643 add_cxxflags(){
644     append CXXFLAGS $($cflags_filter "$@")
645 }
646
647 add_asflags(){
648     append ASFLAGS $($asflags_filter "$@")
649 }
650
651 add_ldflags(){
652     append LDFLAGS $($ldflags_filter "$@")
653 }
654
655 add_extralibs(){
656     prepend extralibs $($ldflags_filter "$@")
657 }
658
659 add_host_cflags(){
660     append host_cflags $($host_cflags_filter "$@")
661 }
662
663 add_host_ldflags(){
664     append host_ldflags $($host_ldflags_filter "$@")
665 }
666
667 check_cmd(){
668     log "$@"
669     "$@" >> $logfile 2>&1
670 }
671
672 cc_o(){
673     eval printf '%s\\n' $CC_O
674 }
675
676 check_cc(){
677     log check_cc "$@"
678     cat > $TMPC
679     log_file $TMPC
680     check_cmd $cc $CPPFLAGS $CFLAGS "$@" -c $(cc_o $TMPO) $TMPC
681 }
682
683 check_cxx(){
684     log check_cxx "$@"
685     cat > $TMPCPP
686     log_file $TMPCPP
687     check_cmd $cxx $CPPFLAGS $CFLAGS $CXXFLAGS "$@" -c -o $TMPO $TMPCPP
688 }
689
690 check_cpp(){
691     log check_cpp "$@"
692     cat > $TMPC
693     log_file $TMPC
694     check_cmd $cc $CPPFLAGS $CFLAGS "$@" -E -o $TMPO $TMPC
695 }
696
697 check_as(){
698     log check_as "$@"
699     cat > $TMPC
700     log_file $TMPC
701     check_cmd $as $CPPFLAGS $ASFLAGS "$@" -c -o $TMPO $TMPC
702 }
703
704 check_asm(){
705     log check_asm "$@"
706     name="$1"
707     code="$2"
708     shift 2
709     disable $name
710     check_as "$@" <<EOF && enable $name
711 void foo(void){ __asm__ volatile($code); }
712 EOF
713 }
714
715 check_yasm(){
716     log check_yasm "$@"
717     echo "$1" > $TMPS
718     log_file $TMPS
719     shift 1
720     check_cmd $yasmexe $YASMFLAGS "$@" -o $TMPO $TMPS
721 }
722
723 check_ld(){
724     log check_ld "$@"
725     type=$1
726     shift 1
727     flags=''
728     libs=''
729     for f; do
730         test "${f}" = "${f#-l}" && flags="$flags $f" || libs="$libs $f"
731     done
732     check_$type $($cflags_filter $flags) || return
733     flags=$($ldflags_filter $flags)
734     libs=$($ldflags_filter $libs)
735     check_cmd $ld $LDFLAGS $flags -o $TMPE $TMPO $libs $extralibs
736 }
737
738 check_code(){
739     log check_code "$@"
740     check=$1
741     headers=$2
742     code=$3
743     shift 3
744     {
745         for hdr in $headers; do
746             echo "#include <$hdr>"
747         done
748         echo "int main(void) { $code; return 0; }"
749     } | check_$check "$@"
750 }
751
752 check_cppflags(){
753     log check_cppflags "$@"
754     check_cc "$@" <<EOF && append CPPFLAGS "$@"
755 int x;
756 EOF
757 }
758
759 check_cflags(){
760     log check_cflags "$@"
761     set -- $($cflags_filter "$@")
762     check_cc "$@" <<EOF && append CFLAGS "$@"
763 int x;
764 EOF
765 }
766
767 check_cxxflags(){
768     log check_cxxflags "$@"
769     set -- $($cflags_filter "$@")
770     check_cxx "$@" <<EOF && append CXXFLAGS "$@"
771 int x;
772 EOF
773 }
774
775 test_ldflags(){
776     log test_ldflags "$@"
777     check_ld "cc" "$@" <<EOF
778 int main(void){ return 0; }
779 EOF
780 }
781
782 check_ldflags(){
783     log check_ldflags "$@"
784     test_ldflags "$@" && add_ldflags "$@"
785 }
786
787 check_header(){
788     log check_header "$@"
789     header=$1
790     shift
791     disable_safe $header
792     check_cpp "$@" <<EOF && enable_safe $header
793 #include <$header>
794 int x;
795 EOF
796 }
797
798 check_func(){
799     log check_func "$@"
800     func=$1
801     shift
802     disable $func
803     check_ld "cc" "$@" <<EOF && enable $func
804 extern int $func();
805 int main(void){ $func(); }
806 EOF
807 }
808
809 check_mathfunc(){
810     log check_mathfunc "$@"
811     func=$1
812     shift
813     disable $func
814     check_ld "cc" "$@" <<EOF && enable $func
815 #include <math.h>
816 float foo(float f) { return $func(f); }
817 int main(void){ return (int) foo; }
818 EOF
819 }
820
821 check_func_headers(){
822     log check_func_headers "$@"
823     headers=$1
824     funcs=$2
825     shift 2
826     {
827         for hdr in $headers; do
828             echo "#include <$hdr>"
829         done
830         for func in $funcs; do
831             echo "long check_$func(void) { return (long) $func; }"
832         done
833         echo "int main(void) { return 0; }"
834     } | check_ld "cc" "$@" && enable $funcs && enable_safe $headers
835 }
836
837 check_class_headers_cpp(){
838     log check_class_headers_cpp "$@"
839     headers=$1
840     classes=$2
841     shift 2
842     {
843         for hdr in $headers; do
844             echo "#include <$hdr>"
845         done
846         echo "int main(void) { "
847         i=1
848         for class in $classes; do
849             echo "$class obj$i;"
850             i=$(expr $i + 1)
851         done
852         echo "return 0; }"
853     } | check_ld "cxx" "$@" && enable $funcs && enable_safe $headers
854 }
855
856 check_cpp_condition(){
857     log check_cpp_condition "$@"
858     header=$1
859     condition=$2
860     shift 2
861     check_cpp "$@" <<EOF
862 #include <$header>
863 #if !($condition)
864 #error "unsatisfied condition: $condition"
865 #endif
866 EOF
867 }
868
869 check_lib(){
870     log check_lib "$@"
871     header="$1"
872     func="$2"
873     shift 2
874     check_header $header && check_func $func "$@" && add_extralibs "$@"
875 }
876
877 check_lib2(){
878     log check_lib2 "$@"
879     headers="$1"
880     funcs="$2"
881     shift 2
882     check_func_headers "$headers" "$funcs" "$@" && add_extralibs "$@"
883 }
884
885 check_lib_cpp(){
886     log check_lib_cpp "$@"
887     headers="$1"
888     classes="$2"
889     shift 2
890     check_class_headers_cpp "$headers" "$classes" "$@" && add_extralibs "$@"
891 }
892
893 check_pkg_config(){
894     log check_pkg_config "$@"
895     pkg="$1"
896     headers="$2"
897     funcs="$3"
898     shift 3
899     $pkg_config --exists $pkg 2>/dev/null || return
900     pkg_cflags=$($pkg_config --cflags $pkg)
901     pkg_libs=$($pkg_config --libs $pkg)
902     check_func_headers "$headers" "$funcs" $pkg_cflags $pkg_libs "$@" &&
903         set_safe ${pkg}_cflags $pkg_cflags   &&
904         set_safe ${pkg}_libs   $pkg_libs
905 }
906
907 check_exec(){
908     check_ld "cc" "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
909 }
910
911 check_exec_crash(){
912     code=$(cat)
913
914     # exit() is not async signal safe.  _Exit (C99) and _exit (POSIX)
915     # are safe but may not be available everywhere.  Thus we use
916     # raise(SIGTERM) instead.  The check is run in a subshell so we
917     # can redirect the "Terminated" message from the shell.  SIGBUS
918     # is not defined by standard C so it is used conditionally.
919
920     (check_exec "$@") >> $logfile 2>&1 <<EOF
921 #include <signal.h>
922 static void sighandler(int sig){
923     raise(SIGTERM);
924 }
925 int func(void){
926     $code
927 }
928 int (*func_ptr)(void) = func;
929 int main(void){
930     signal(SIGILL, sighandler);
931     signal(SIGFPE, sighandler);
932     signal(SIGSEGV, sighandler);
933 #ifdef SIGBUS
934     signal(SIGBUS, sighandler);
935 #endif
936     return func_ptr();
937 }
938 EOF
939 }
940
941 check_type(){
942     log check_type "$@"
943     headers=$1
944     type=$2
945     shift 2
946     disable_safe "$type"
947     check_code cc "$headers" "$type v" "$@" && enable_safe "$type"
948 }
949
950 check_struct(){
951     log check_type "$@"
952     headers=$1
953     struct=$2
954     member=$3
955     shift 3
956     disable_safe "${struct}_${member}"
957     check_code cc "$headers" "const void *p = &(($struct *)0)->$member" "$@" &&
958         enable_safe "${struct}_${member}"
959 }
960
961 require(){
962     name="$1"
963     header="$2"
964     func="$3"
965     shift 3
966     check_lib $header $func "$@" || die "ERROR: $name not found"
967 }
968
969 require2(){
970     name="$1"
971     headers="$2"
972     func="$3"
973     shift 3
974     check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
975 }
976
977 require_cpp(){
978     name="$1"
979     headers="$2"
980     classes="$3"
981     shift 3
982     check_lib_cpp "$headers" "$classes" "$@" || die "ERROR: $name not found"
983 }
984
985 require_pkg_config(){
986     pkg="$1"
987     check_pkg_config "$@" || die "ERROR: $pkg not found"
988     add_cflags    $(get_safe ${pkg}_cflags)
989     add_extralibs $(get_safe ${pkg}_libs)
990 }
991
992 check_host_cc(){
993     log check_host_cc "$@"
994     cat > $TMPC
995     log_file $TMPC
996     check_cmd $host_cc $host_cflags "$@" -c -o $TMPO $TMPC
997 }
998
999 check_host_cflags(){
1000     log check_host_cflags "$@"
1001     set -- $($host_cflags_filter "$@")
1002     check_host_cc "$@" <<EOF && append host_cflags "$@"
1003 int x;
1004 EOF
1005 }
1006
1007 apply(){
1008     file=$1
1009     shift
1010     "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
1011 }
1012
1013 cp_if_changed(){
1014     cmp -s "$1" "$2" && echo "$2 is unchanged" && return
1015     mkdir -p "$(dirname $2)"
1016     cp -f "$1" "$2"
1017 }
1018
1019 # CONFIG_LIST contains configurable options, while HAVE_LIST is for
1020 # system-dependent things.
1021
1022 COMPONENT_LIST="
1023     bsfs
1024     decoders
1025     demuxers
1026     encoders
1027     filters
1028     hwaccels
1029     indevs
1030     muxers
1031     outdevs
1032     parsers
1033     protocols
1034 "
1035
1036 PROGRAM_LIST="
1037     ffplay
1038     ffprobe
1039     ffserver
1040     ffmpeg
1041 "
1042
1043 CONFIG_LIST="
1044     $COMPONENT_LIST
1045     $PROGRAM_LIST
1046     ac3dsp
1047     avcodec
1048     avdevice
1049     avfilter
1050     avformat
1051     avresample
1052     avisynth
1053     bzlib
1054     crystalhd
1055     dct
1056     doc
1057     dwt
1058     dxva2
1059     fast_unaligned
1060     fastdiv
1061     fft
1062     fontconfig
1063     frei0r
1064     gcrypt
1065     gnutls
1066     gpl
1067     gray
1068     hardcoded_tables
1069     libaacplus
1070     libass
1071     libbluray
1072     libcaca
1073     libcdio
1074     libcelt
1075     libdc1394
1076     libfaac
1077     libfdk_aac
1078     libflite
1079     libfreetype
1080     libgsm
1081     libiec61883
1082     libilbc
1083     libmodplug
1084     libmp3lame
1085     libnut
1086     libopencore_amrnb
1087     libopencore_amrwb
1088     libopencv
1089     libopenjpeg
1090     libopus
1091     libpulse
1092     librtmp
1093     libschroedinger
1094     libspeex
1095     libstagefright_h264
1096     libtheora
1097     libutvideo
1098     libv4l2
1099     libvo_aacenc
1100     libvo_amrwbenc
1101     libvorbis
1102     libvpx
1103     libx264
1104     libxavs
1105     libxvid
1106     lsp
1107     mdct
1108     memalign_hack
1109     memory_poisoning
1110     mpegaudiodsp
1111     nettle
1112     network
1113     nonfree
1114     openal
1115     openssl
1116     pic
1117     postproc
1118     rdft
1119     rtpdec
1120     runtime_cpudetect
1121     safe_bitstream_reader
1122     shared
1123     sinewin
1124     small
1125     sram
1126     static
1127     swresample
1128     swscale
1129     swscale_alpha
1130     thumb
1131     vaapi
1132     vda
1133     vdpau
1134     version3
1135     xmm_clobber_test
1136     x11grab
1137     zlib
1138 "
1139
1140 THREADS_LIST='
1141     pthreads
1142     w32threads
1143     os2threads
1144 '
1145
1146 ARCH_LIST='
1147     alpha
1148     arm
1149     avr32
1150     avr32_ap
1151     avr32_uc
1152     bfin
1153     ia64
1154     m68k
1155     mips
1156     mips64
1157     parisc
1158     ppc
1159     ppc64
1160     s390
1161     sh4
1162     sparc
1163     sparc64
1164     tomi
1165     x86
1166     x86_32
1167     x86_64
1168 '
1169
1170 ARCH_EXT_LIST='
1171     altivec
1172     amd3dnow
1173     amd3dnowext
1174     armv5te
1175     armv6
1176     armv6t2
1177     armvfp
1178     avx
1179     fma4
1180     mmi
1181     mmx
1182     mmx2
1183     neon
1184     ppc4xx
1185     sse
1186     ssse3
1187     vfpv3
1188     vis
1189     mipsfpu
1190     mips32r2
1191     mipsdspr1
1192     mipsdspr2
1193 '
1194
1195 HAVE_LIST_PUB='
1196     bigendian
1197     fast_unaligned
1198 '
1199
1200 HAVE_LIST="
1201     $ARCH_EXT_LIST
1202     $HAVE_LIST_PUB
1203     $THREADS_LIST
1204     aligned_malloc
1205     aligned_stack
1206     alsa_asoundlib_h
1207     altivec_h
1208     arpa_inet_h
1209     asm_mod_y
1210     asm_types_h
1211     attribute_may_alias
1212     attribute_packed
1213     cbrtf
1214     clock_gettime
1215     closesocket
1216     cmov
1217     cpuid
1218     dcbzl
1219     dev_bktr_ioctl_bt848_h
1220     dev_bktr_ioctl_meteor_h
1221     dev_ic_bt8xx_h
1222     dev_video_bktr_ioctl_bt848_h
1223     dev_video_meteor_ioctl_meteor_h
1224     dlfcn_h
1225     dlopen
1226     dos_paths
1227     dxva_h
1228     ebp_available
1229     ebx_available
1230     exp2
1231     exp2f
1232     fast_64bit
1233     fast_clz
1234     fast_cmov
1235     fcntl
1236     fork
1237     getaddrinfo
1238     gethrtime
1239     getopt
1240     GetProcessAffinityMask
1241     GetProcessMemoryInfo
1242     GetProcessTimes
1243     GetSystemTimeAsFileTime
1244     getrusage
1245     gettimeofday
1246     glob
1247     gnu_as
1248     ibm_asm
1249     inet_aton
1250     inline_asm
1251     isatty
1252     isinf
1253     isnan
1254     jack_port_get_latency_range
1255     kbhit
1256     ldbrx
1257     libdc1394_1
1258     libdc1394_2
1259     llrint
1260     llrintf
1261     local_aligned_16
1262     local_aligned_8
1263     localtime_r
1264     log2
1265     log2f
1266     loongson
1267     lrint
1268     lrintf
1269     lzo1x_999_compress
1270     machine_ioctl_bt848_h
1271     machine_ioctl_meteor_h
1272     makeinfo
1273     malloc_h
1274     MapViewOfFile
1275     memalign
1276     mkstemp
1277     mm_empty
1278     mmap
1279     nanosleep
1280     netinet_sctp_h
1281     PeekNamedPipe
1282     pod2man
1283     poll_h
1284     posix_memalign
1285     pthread_cancel
1286     rdtsc
1287     rint
1288     round
1289     roundf
1290     rweflags
1291     sched_getaffinity
1292     sdl
1293     sdl_video_size
1294     setmode
1295     setrlimit
1296     Sleep
1297     sndio_h
1298     socklen_t
1299     soundcard_h
1300     strerror_r
1301     strptime
1302     struct_addrinfo
1303     struct_group_source_req
1304     struct_ip_mreq_source
1305     struct_ipv6_mreq
1306     struct_pollfd
1307     struct_rusage_ru_maxrss
1308     struct_sockaddr_in6
1309     struct_sockaddr_sa_len
1310     struct_sockaddr_storage
1311     struct_v4l2_frmivalenum_discrete
1312     symver
1313     symver_asm_label
1314     symver_gnu_asm
1315     sysconf
1316     sysctl
1317     sys_mman_h
1318     sys_param_h
1319     sys_resource_h
1320     sys_select_h
1321     sys_soundcard_h
1322     sys_time_h
1323     sys_videoio_h
1324     termios_h
1325     texi2html
1326     threads
1327     trunc
1328     truncf
1329     unistd_h
1330     usleep
1331     vfp_args
1332     VirtualAlloc
1333     windows_h
1334     winsock2_h
1335     xform_asm
1336     xgetbv
1337     xmm_clobbers
1338     yasm
1339 "
1340
1341 # options emitted with CONFIG_ prefix but not available on command line
1342 CONFIG_EXTRA="
1343     aandcttables
1344     avutil
1345     golomb
1346     gplv3
1347     h264chroma
1348     h264dsp
1349     h264pred
1350     h264qpel
1351     huffman
1352     lgplv3
1353     lpc
1354     vp3dsp
1355 "
1356
1357 CMDLINE_SELECT="
1358     $ARCH_EXT_LIST
1359     $CONFIG_LIST
1360     $THREADS_LIST
1361     asm
1362     coverage
1363     cross_compile
1364     debug
1365     extra_warnings
1366     logging
1367     optimizations
1368     stripping
1369     symver
1370     yasm
1371 "
1372
1373 PATHS_LIST='
1374     bindir
1375     datadir
1376     incdir
1377     libdir
1378     mandir
1379     prefix
1380     shlibdir
1381 '
1382
1383 CMDLINE_SET="
1384     $PATHS_LIST
1385     ar
1386     arch
1387     as
1388     assert_level
1389     build_suffix
1390     cc
1391     cpu
1392     cross_prefix
1393     cxx
1394     dep_cc
1395     extra_version
1396     host_cc
1397     host_cflags
1398     host_ldflags
1399     host_libs
1400     host_os
1401     install
1402     ld
1403     logfile
1404     malloc_prefix
1405     nm
1406     optflags
1407     pkg_config
1408     postproc_version
1409     progs_suffix
1410     random_seed
1411     samples
1412     strip
1413     sysinclude
1414     sysroot
1415     target_exec
1416     target_os
1417     target_path
1418     valgrind
1419     yasmexe
1420 "
1421
1422 CMDLINE_APPEND="
1423     extra_cflags
1424     extra_cxxflags
1425 "
1426
1427 # code dependency declarations
1428
1429 # architecture extensions
1430
1431 armv5te_deps="arm"
1432 armv6_deps="arm"
1433 armv6t2_deps="arm"
1434 armvfp_deps="arm"
1435 neon_deps="arm"
1436 vfpv3_deps="armvfp"
1437
1438 mipsfpu_deps="mips"
1439 mips32r2_deps="mips"
1440 mipsdspr1_deps="mips"
1441 mipsdspr2_deps="mips"
1442 mmi_deps="mips"
1443
1444 altivec_deps="ppc"
1445 ppc4xx_deps="ppc"
1446
1447 vis_deps="sparc"
1448
1449 x86_64_suggest="cmov fast_cmov"
1450 amd3dnow_deps="mmx"
1451 amd3dnowext_deps="amd3dnow"
1452 mmx_deps="x86"
1453 mmx2_deps="mmx"
1454 sse_deps="mmx"
1455 ssse3_deps="sse"
1456 avx_deps="ssse3"
1457 fma4_deps="avx"
1458
1459 aligned_stack_if_any="ppc x86"
1460 fast_64bit_if_any="alpha ia64 mips64 parisc64 ppc64 sparc64 x86_64"
1461 fast_clz_if_any="alpha armv5te avr32 mips ppc x86"
1462 fast_unaligned_if_any="armv6 ppc x86"
1463
1464 inline_asm_deps="!tms470"
1465 need_memalign="altivec neon sse"
1466
1467 symver_if_any="symver_asm_label symver_gnu_asm"
1468
1469 # subsystems
1470 dct_select="rdft"
1471 mdct_select="fft"
1472 rdft_select="fft"
1473 mpegaudiodsp_select="dct"
1474
1475 # decoders / encoders / hardware accelerators
1476 aac_decoder_select="mdct sinewin"
1477 aac_encoder_select="mdct sinewin"
1478 aac_latm_decoder_select="aac_decoder aac_latm_parser"
1479 ac3_decoder_select="mdct ac3dsp ac3_parser"
1480 ac3_encoder_select="mdct ac3dsp"
1481 ac3_fixed_encoder_select="mdct ac3dsp"
1482 alac_encoder_select="lpc"
1483 amrnb_decoder_select="lsp"
1484 amrwb_decoder_select="lsp"
1485 amv_encoder_select="aandcttables"
1486 atrac1_decoder_select="mdct sinewin"
1487 atrac3_decoder_select="mdct"
1488 binkaudio_dct_decoder_select="mdct rdft dct sinewin"
1489 binkaudio_rdft_decoder_select="mdct rdft sinewin"
1490 cavs_decoder_select="golomb"
1491 cook_decoder_select="mdct sinewin"
1492 cscd_decoder_suggest="zlib"
1493 dca_decoder_select="mdct"
1494 dirac_decoder_select="dwt golomb"
1495 dnxhd_encoder_select="aandcttables"
1496 dxa_decoder_select="zlib"
1497 eac3_decoder_select="ac3_decoder"
1498 eac3_encoder_select="mdct ac3dsp"
1499 eamad_decoder_select="aandcttables"
1500 eatgq_decoder_select="aandcttables"
1501 eatqi_decoder_select="aandcttables"
1502 exr_decoder_select="zlib"
1503 ffv1_decoder_select="golomb"
1504 flac_decoder_select="golomb"
1505 flac_encoder_select="golomb lpc"
1506 flashsv_decoder_select="zlib"
1507 flashsv_encoder_select="zlib"
1508 flashsv2_encoder_select="zlib"
1509 flashsv2_decoder_select="zlib"
1510 flv_decoder_select="h263_decoder"
1511 flv_encoder_select="h263_encoder"
1512 fraps_decoder_select="huffman"
1513 h261_encoder_select="aandcttables"
1514 h263_decoder_select="h263_parser"
1515 h263_encoder_select="aandcttables"
1516 h263_vaapi_hwaccel_select="vaapi h263_decoder"
1517 h263i_decoder_select="h263_decoder"
1518 h263p_encoder_select="h263_encoder"
1519 h264_crystalhd_decoder_select="crystalhd h264_mp4toannexb_bsf h264_parser"
1520 h264_decoder_select="golomb h264chroma h264dsp h264pred h264qpel"
1521 h264_dxva2_hwaccel_deps="dxva2api_h"
1522 h264_dxva2_hwaccel_select="dxva2 h264_decoder"
1523 h264_vaapi_hwaccel_select="vaapi h264_decoder"
1524 h264_vda_hwaccel_deps="VideoDecodeAcceleration_VDADecoder_h pthreads"
1525 h264_vda_hwaccel_select="vda h264_decoder"
1526 h264_vdpau_decoder_select="vdpau h264_decoder"
1527 iac_decoder_select="fft mdct sinewin"
1528 imc_decoder_select="fft mdct sinewin"
1529 jpegls_decoder_select="golomb"
1530 jpegls_encoder_select="golomb"
1531 ljpeg_encoder_select="aandcttables"
1532 loco_decoder_select="golomb"
1533 mjpeg_encoder_select="aandcttables"
1534 mlp_decoder_select="mlp_parser"
1535 mp1_decoder_select="mpegaudiodsp"
1536 mp1float_decoder_select="mpegaudiodsp"
1537 mp2_decoder_select="mpegaudiodsp"
1538 mp2float_decoder_select="mpegaudiodsp"
1539 mp3_decoder_select="mpegaudiodsp"
1540 mp3adu_decoder_select="mpegaudiodsp"
1541 mp3adufloat_decoder_select="mpegaudiodsp"
1542 mp3float_decoder_select="mpegaudiodsp"
1543 mp3on4_decoder_select="mpegaudiodsp"
1544 mp3on4float_decoder_select="mpegaudiodsp"
1545 mpc7_decoder_select="mpegaudiodsp"
1546 mpc8_decoder_select="mpegaudiodsp"
1547 mpeg_vdpau_decoder_select="vdpau mpegvideo_decoder"
1548 mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h"
1549 mpeg_xvmc_decoder_select="mpegvideo_decoder"
1550 mpeg1_vdpau_decoder_select="vdpau mpeg1video_decoder"
1551 mpeg1_vdpau_hwaccel_select="vdpau mpeg1video_decoder"
1552 mpeg1video_encoder_select="aandcttables"
1553 mpeg2_crystalhd_decoder_select="crystalhd"
1554 mpeg2_dxva2_hwaccel_deps="dxva2api_h"
1555 mpeg2_dxva2_hwaccel_select="dxva2 mpeg2video_decoder"
1556 mpeg2_vdpau_hwaccel_select="vdpau mpeg2video_decoder"
1557 mpeg2_vaapi_hwaccel_select="vaapi mpeg2video_decoder"
1558 mpeg2video_encoder_select="aandcttables"
1559 mpeg4_crystalhd_decoder_select="crystalhd"
1560 mpeg4_decoder_select="h263_decoder mpeg4video_parser"
1561 mpeg4_encoder_select="h263_encoder"
1562 mpeg4_vaapi_hwaccel_select="vaapi mpeg4_decoder"
1563 mpeg4_vdpau_decoder_select="vdpau mpeg4_decoder"
1564 msmpeg4_crystalhd_decoder_select="crystalhd"
1565 msmpeg4v1_decoder_select="h263_decoder"
1566 msmpeg4v1_encoder_select="h263_encoder"
1567 msmpeg4v2_decoder_select="h263_decoder"
1568 msmpeg4v2_encoder_select="h263_encoder"
1569 msmpeg4v3_decoder_select="h263_decoder"
1570 msmpeg4v3_encoder_select="h263_encoder"
1571 nellymoser_decoder_select="mdct sinewin"
1572 nellymoser_encoder_select="mdct sinewin"
1573 png_decoder_select="zlib"
1574 png_encoder_select="zlib"
1575 qcelp_decoder_select="lsp"
1576 qdm2_decoder_select="mdct rdft mpegaudiodsp"
1577 ra_144_encoder_select="lpc"
1578 ralf_decoder_select="golomb"
1579 rv10_decoder_select="h263_decoder"
1580 rv10_encoder_select="h263_encoder"
1581 rv20_decoder_select="h263_decoder"
1582 rv20_encoder_select="h263_encoder"
1583 rv30_decoder_select="golomb h264chroma h264pred h264qpel"
1584 rv40_decoder_select="golomb h264chroma h264pred h264qpel"
1585 shorten_decoder_select="golomb"
1586 sipr_decoder_select="lsp"
1587 snow_decoder_select="dwt"
1588 snow_encoder_select="aandcttables dwt"
1589 sonic_decoder_select="golomb"
1590 sonic_encoder_select="golomb"
1591 sonic_ls_encoder_select="golomb"
1592 svq1_encoder_select="aandcttables"
1593 svq3_decoder_select="golomb h264chroma h264dsp h264pred h264qpel"
1594 svq3_decoder_suggest="zlib"
1595 theora_decoder_select="vp3_decoder"
1596 tiff_decoder_suggest="zlib"
1597 tiff_encoder_suggest="zlib"
1598 tscc_decoder_select="zlib"
1599 twinvq_decoder_select="mdct lsp sinewin"
1600 vc1_crystalhd_decoder_select="crystalhd"
1601 vc1_decoder_select="h263_decoder h264chroma h264qpel"
1602 vc1_dxva2_hwaccel_deps="dxva2api_h"
1603 vc1_dxva2_hwaccel_select="dxva2 vc1_decoder"
1604 vc1_vaapi_hwaccel_select="vaapi vc1_decoder"
1605 vc1_vdpau_decoder_select="vdpau vc1_decoder"
1606 vc1image_decoder_select="vc1_decoder"
1607 vorbis_decoder_select="mdct"
1608 vorbis_encoder_select="mdct"
1609 vp3_decoder_select="vp3dsp"
1610 vp5_decoder_select="vp3dsp"
1611 vp6_decoder_select="huffman vp3dsp"
1612 vp6a_decoder_select="vp6_decoder"
1613 vp6f_decoder_select="vp6_decoder"
1614 vp8_decoder_select="h264pred h264qpel"
1615 wmapro_decoder_select="mdct sinewin"
1616 wmav1_decoder_select="mdct sinewin"
1617 wmav1_encoder_select="mdct sinewin"
1618 wmav2_decoder_select="mdct sinewin"
1619 wmav2_encoder_select="mdct sinewin"
1620 wmavoice_decoder_select="lsp rdft dct mdct sinewin"
1621 wmv1_decoder_select="h263_decoder"
1622 wmv1_encoder_select="h263_encoder"
1623 wmv2_decoder_select="h263_decoder"
1624 wmv2_encoder_select="h263_encoder"
1625 wmv3_decoder_select="vc1_decoder"
1626 wmv3_crystalhd_decoder_select="crystalhd"
1627 wmv3_dxva2_hwaccel_select="vc1_dxva2_hwaccel"
1628 wmv3_vaapi_hwaccel_select="vc1_vaapi_hwaccel"
1629 wmv3_vdpau_decoder_select="vc1_vdpau_decoder"
1630 wmv3image_decoder_select="wmv3_decoder"
1631 zerocodec_decoder_select="zlib"
1632 zlib_decoder_select="zlib"
1633 zlib_encoder_select="zlib"
1634 zmbv_decoder_select="zlib"
1635 zmbv_encoder_select="zlib"
1636
1637 crystalhd_deps="libcrystalhd_libcrystalhd_if_h"
1638 vaapi_deps="va_va_h"
1639 vda_deps="VideoDecodeAcceleration_VDADecoder_h pthreads"
1640 vdpau_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1641
1642 # parsers
1643 h264_parser_select="golomb h264dsp h264pred"
1644
1645 # external libraries
1646 libaacplus_encoder_deps="libaacplus"
1647 libcelt_decoder_deps="libcelt"
1648 libfaac_encoder_deps="libfaac"
1649 libfdk_aac_encoder_deps="libfdk_aac"
1650 libgsm_decoder_deps="libgsm"
1651 libgsm_encoder_deps="libgsm"
1652 libgsm_ms_decoder_deps="libgsm"
1653 libgsm_ms_encoder_deps="libgsm"
1654 libilbc_decoder_deps="libilbc"
1655 libilbc_encoder_deps="libilbc"
1656 libmodplug_demuxer_deps="libmodplug"
1657 libmp3lame_encoder_deps="libmp3lame"
1658 libopencore_amrnb_decoder_deps="libopencore_amrnb"
1659 libopencore_amrnb_encoder_deps="libopencore_amrnb"
1660 libopencore_amrwb_decoder_deps="libopencore_amrwb"
1661 libopenjpeg_decoder_deps="libopenjpeg"
1662 libopenjpeg_encoder_deps="libopenjpeg"
1663 libopus_decoder_deps="libopus"
1664 libschroedinger_decoder_deps="libschroedinger"
1665 libschroedinger_encoder_deps="libschroedinger"
1666 libspeex_decoder_deps="libspeex"
1667 libspeex_encoder_deps="libspeex"
1668 libstagefright_h264_decoder_deps="libstagefright_h264"
1669 libtheora_encoder_deps="libtheora"
1670 libvo_aacenc_encoder_deps="libvo_aacenc"
1671 libvo_amrwbenc_encoder_deps="libvo_amrwbenc"
1672 libvorbis_decoder_deps="libvorbis"
1673 libvorbis_encoder_deps="libvorbis"
1674 libvpx_decoder_deps="libvpx"
1675 libvpx_encoder_deps="libvpx"
1676 libx264_encoder_deps="libx264"
1677 libx264rgb_encoder_deps="libx264"
1678 libxavs_encoder_deps="libxavs"
1679 libxvid_encoder_deps="libxvid"
1680 libutvideo_decoder_deps="libutvideo"
1681 libutvideo_encoder_deps="libutvideo"
1682
1683 # demuxers / muxers
1684 ac3_demuxer_select="ac3_parser"
1685 asf_stream_muxer_select="asf_muxer"
1686 avisynth_demuxer_deps="avisynth"
1687 dirac_demuxer_select="dirac_parser"
1688 eac3_demuxer_select="ac3_parser"
1689 flac_demuxer_select="flac_parser"
1690 ipod_muxer_select="mov_muxer"
1691 libnut_demuxer_deps="libnut"
1692 libnut_muxer_deps="libnut"
1693 matroska_audio_muxer_select="matroska_muxer"
1694 matroska_demuxer_suggest="zlib bzlib"
1695 mov_demuxer_suggest="zlib"
1696 mp3_demuxer_select="mpegaudio_parser"
1697 mp4_muxer_select="mov_muxer"
1698 mpegts_muxer_select="adts_muxer latm_muxer"
1699 mpegtsraw_demuxer_select="mpegts_demuxer"
1700 mxf_d10_muxer_select="mxf_muxer"
1701 ogg_demuxer_select="golomb"
1702 psp_muxer_select="mov_muxer"
1703 rtp_demuxer_select="sdp_demuxer"
1704 rtpdec_select="asf_demuxer rm_demuxer rtp_protocol mpegts_demuxer mov_demuxer"
1705 rtsp_demuxer_select="http_protocol rtpdec"
1706 rtsp_muxer_select="rtp_muxer http_protocol rtp_protocol"
1707 sap_demuxer_select="sdp_demuxer"
1708 sap_muxer_select="rtp_muxer rtp_protocol"
1709 sdp_demuxer_select="rtpdec"
1710 spdif_muxer_select="aac_parser"
1711 tg2_muxer_select="mov_muxer"
1712 tgp_muxer_select="mov_muxer"
1713 w64_demuxer_deps="wav_demuxer"
1714
1715 # indevs / outdevs
1716 alsa_indev_deps="alsa_asoundlib_h snd_pcm_htimestamp"
1717 alsa_outdev_deps="alsa_asoundlib_h"
1718 bktr_indev_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
1719 caca_outdev_deps="libcaca"
1720 dshow_indev_deps="IBaseFilter"
1721 dshow_indev_extralibs="-lpsapi -lole32 -lstrmiids -luuid"
1722 dv1394_indev_deps="dv1394 dv_demuxer"
1723 fbdev_indev_deps="linux_fb_h"
1724 iec61883_indev_deps="libiec61883"
1725 jack_indev_deps="jack_jack_h sem_timedwait"
1726 lavfi_indev_deps="avfilter"
1727 libcdio_indev_deps="libcdio"
1728 libdc1394_indev_deps="libdc1394"
1729 libv4l2_indev_deps="libv4l2"
1730 openal_indev_deps="openal"
1731 oss_indev_deps_any="soundcard_h sys_soundcard_h"
1732 oss_outdev_deps_any="soundcard_h sys_soundcard_h"
1733 pulse_indev_deps="libpulse"
1734 sdl_outdev_deps="sdl"
1735 sndio_indev_deps="sndio_h"
1736 sndio_outdev_deps="sndio_h"
1737 v4l_indev_deps="linux_videodev_h"
1738 v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h"
1739 vfwcap_indev_deps="capCreateCaptureWindow vfwcap_defines"
1740 vfwcap_indev_extralibs="-lavicap32"
1741 x11_grab_device_indev_deps="x11grab"
1742
1743 # protocols
1744 bluray_protocol_deps="libbluray"
1745 ffrtmpcrypt_protocol_deps="!librtmp_protocol"
1746 ffrtmpcrypt_protocol_deps_any="gcrypt nettle openssl"
1747 ffrtmpcrypt_protocol_select="tcp_protocol"
1748 ffrtmphttp_protocol_deps="!librtmp_protocol"
1749 ffrtmphttp_protocol_select="http_protocol"
1750 gopher_protocol_deps="network"
1751 httpproxy_protocol_deps="network"
1752 httpproxy_protocol_select="tcp_protocol"
1753 http_protocol_deps="network"
1754 http_protocol_select="tcp_protocol"
1755 https_protocol_select="tls_protocol"
1756 librtmp_protocol_deps="librtmp"
1757 librtmpe_protocol_deps="librtmp"
1758 librtmps_protocol_deps="librtmp"
1759 librtmpt_protocol_deps="librtmp"
1760 librtmpte_protocol_deps="librtmp"
1761 mmsh_protocol_select="http_protocol"
1762 mmst_protocol_deps="network"
1763 rtmp_protocol_deps="!librtmp_protocol"
1764 rtmp_protocol_select="tcp_protocol"
1765 rtmpe_protocol_select="ffrtmpcrypt_protocol"
1766 rtmps_protocol_deps="!librtmp_protocol"
1767 rtmps_protocol_select="tls_protocol"
1768 rtmpt_protocol_select="ffrtmphttp_protocol"
1769 rtmpte_protocol_select="ffrtmpcrypt_protocol ffrtmphttp_protocol"
1770 rtmpts_protocol_select="ffrtmphttp_protocol https_protocol"
1771 rtp_protocol_select="udp_protocol"
1772 sctp_protocol_deps="network netinet_sctp_h"
1773 tcp_protocol_deps="network"
1774 tls_protocol_deps_any="openssl gnutls"
1775 tls_protocol_select="tcp_protocol"
1776 udp_protocol_deps="network"
1777
1778 # filters
1779 aconvert_filter_deps="swresample"
1780 amovie_filter_deps="avcodec avformat"
1781 aresample_filter_deps="swresample"
1782 ass_filter_deps="libass"
1783 asyncts_filter_deps="avresample"
1784 atempo_filter_deps="avcodec rdft"
1785 blackframe_filter_deps="gpl"
1786 boxblur_filter_deps="gpl"
1787 colormatrix_filter_deps="gpl"
1788 cropdetect_filter_deps="gpl"
1789 delogo_filter_deps="gpl"
1790 deshake_filter_deps="avcodec"
1791 drawtext_filter_deps="libfreetype"
1792 flite_filter_deps="libflite"
1793 frei0r_filter_deps="frei0r dlopen"
1794 frei0r_filter_extralibs='$ldl'
1795 frei0r_src_filter_deps="frei0r dlopen"
1796 frei0r_src_filter_extralibs='$ldl'
1797 hqdn3d_filter_deps="gpl"
1798 movie_filter_deps="avcodec avformat"
1799 mp_filter_deps="gpl avcodec swscale postproc"
1800 mptestsrc_filter_deps="gpl"
1801 negate_filter_deps="lut_filter"
1802 resample_filter_deps="avresample"
1803 ocv_filter_deps="libopencv"
1804 pan_filter_deps="swresample"
1805 removelogo_filter_deps="avcodec avformat swscale"
1806 scale_filter_deps="swscale"
1807 select_filter_deps="avcodec"
1808 super2xsai_filter_deps="gpl"
1809 tinterlace_filter_deps="gpl"
1810 yadif_filter_deps="gpl"
1811
1812 # libraries
1813 avdevice_deps="avcodec avformat"
1814 avformat_deps="avcodec"
1815 postproc_deps="gpl"
1816
1817 # programs
1818 ffmpeg_deps="avcodec avfilter avformat swscale swresample"
1819 ffmpeg_select="buffersink_filter format_filter aformat_filter
1820                setpts_filter null_filter anull_filter abuffersink_filter"
1821 ffplay_deps="avcodec avformat swscale swresample sdl"
1822 ffplay_select="buffersink_filter rdft"
1823 ffprobe_deps="avcodec avformat"
1824 ffserver_deps="avformat ffm_muxer fork rtp_protocol rtsp_demuxer"
1825 ffserver_extralibs='$ldl'
1826
1827 doc_deps_any="texi2html makeinfo pod2man"
1828
1829 # tests
1830 colormatrix1_test_deps="colormatrix_filter"
1831 colormatrix2_test_deps="colormatrix_filter"
1832 flashsv2_test_deps="zlib"
1833 mpg_test_deps="mpeg1system_muxer mpegps_demuxer"
1834 mpng_test_deps="zlib"
1835 pp_test_deps="mp_filter"
1836 pp2_test_deps="mp_filter"
1837 pp3_test_deps="mp_filter"
1838 pp4_test_deps="mp_filter"
1839 pp5_test_deps="mp_filter"
1840 pp6_test_deps="mp_filter"
1841 seek_lavf_mxf_d10_test_deps="mxf_d10_test"
1842 zlib_test_deps="zlib"
1843 zmbv_test_deps="zlib"
1844
1845 test_deps(){
1846     suf1=$1
1847     suf2=$2
1848     shift 2
1849     for v; do
1850         dep=${v%=*}
1851         tests=${v#*=}
1852         for name in ${tests}; do
1853             append ${name}_test_deps ${dep}$suf1 ${dep}$suf2
1854         done
1855     done
1856 }
1857
1858 test_deps _muxer _demuxer                                               \
1859     aiff                                                                \
1860     pcm_alaw=alaw                                                       \
1861     asf                                                                 \
1862     au                                                                  \
1863     avi                                                                 \
1864     dv=dv_fmt                                                           \
1865     ffm                                                                 \
1866     flv=flv_fmt                                                         \
1867     gxf                                                                 \
1868     matroska=mkv                                                        \
1869     mmf                                                                 \
1870     mov="mov ismv"                                                      \
1871     pcm_mulaw=mulaw                                                     \
1872     mxf="mxf mxf_d10"                                                   \
1873     nut                                                                 \
1874     ogg="ogg ogg_vp3"                                                   \
1875     rawvideo=pixfmt                                                     \
1876     rm                                                                  \
1877     swf                                                                 \
1878     mpegts=ts                                                           \
1879     voc                                                                 \
1880     wav                                                                 \
1881     yuv4mpegpipe=yuv4mpeg                                               \
1882
1883 # default parameters
1884
1885 logfile="config.log"
1886
1887 # installation paths
1888 prefix_default="/usr/local"
1889 bindir_default='${prefix}/bin'
1890 datadir_default='${prefix}/share/ffmpeg'
1891 incdir_default='${prefix}/include'
1892 libdir_default='${prefix}/lib'
1893 mandir_default='${prefix}/share/man'
1894 shlibdir_default="$libdir_default"
1895 postproc_version_default="current"
1896
1897 # toolchain
1898 ar_default="ar"
1899 cc_default="gcc"
1900 cxx_default="g++"
1901 host_cc_default="gcc"
1902 install="install"
1903 ln_s="ln -sf"
1904 nm_default="nm"
1905 objformat="elf"
1906 pkg_config_default=pkg-config
1907 ranlib="ranlib"
1908 strip_default="strip"
1909 yasmexe_default="yasm"
1910
1911 nm_opts='-g'
1912 nogas=":"
1913
1914 # machine
1915 arch_default=$(uname -m)
1916 cpu="generic"
1917
1918 # OS
1919 target_os_default=$(tolower $(uname -s))
1920 host_os=$target_os_default
1921
1922 # alternative libpostproc version
1923 ALT_PP_VER_MAJOR=51
1924 ALT_PP_VER_MINOR=2
1925 ALT_PP_VER_MICRO=101
1926 ALT_PP_VER=$ALT_PP_VER_MAJOR.$ALT_PP_VER_MINOR.$ALT_PP_VER_MICRO
1927
1928 # configurable options
1929 enable $PROGRAM_LIST
1930
1931 enable avcodec
1932 enable avdevice
1933 enable avfilter
1934 enable avformat
1935 enable avutil
1936 enable postproc
1937 enable stripping
1938 enable swresample
1939 enable swscale
1940
1941 enable asm
1942 enable debug
1943 enable doc
1944 enable fastdiv
1945 enable network
1946 enable optimizations
1947 enable safe_bitstream_reader
1948 enable static
1949 enable swscale_alpha
1950
1951 # build settings
1952 SHFLAGS='-shared -Wl,-soname,$$(@F)'
1953 FFSERVERLDFLAGS=-Wl,-E
1954 LIBPREF="lib"
1955 LIBSUF=".a"
1956 FULLNAME='$(NAME)$(BUILDSUF)'
1957 LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
1958 SLIBPREF="lib"
1959 SLIBSUF=".so"
1960 SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
1961 SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
1962 SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
1963 LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
1964 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'
1965 SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR) $(SLIBNAME)'
1966
1967 asflags_filter=echo
1968 cflags_filter=echo
1969 ldflags_filter=echo
1970
1971 AS_O='-o $@'
1972 CC_O='-o $@'
1973 CXX_O='-o $@'
1974 LD_O='-o $@'
1975 HOSTCC_O='-o $@'
1976
1977 host_cflags='-D_ISOC99_SOURCE -D_XOPEN_SOURCE=600 -O3 -g'
1978 host_libs='-lm'
1979 host_cflags_filter=echo
1980 host_ldflags_filter=echo
1981
1982 target_path='$(CURDIR)'
1983
1984 # since the object filename is not given with the -MM flag, the compiler
1985 # is only able to print the basename, and we must add the path ourselves
1986 DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o," > $(@:.o=.d)'
1987 DEPFLAGS='-MM'
1988
1989 # find source path
1990 if test -f configure; then
1991     source_path=.
1992 else
1993     source_path=$(cd $(dirname "$0"); pwd)
1994     echo "$source_path" | grep -q '[[:blank:]]' &&
1995         die "Out of tree builds are impossible with whitespace in source path."
1996     test -e "$source_path/config.h" &&
1997         die "Out of tree builds are impossible with config.h in source dir."
1998 fi
1999
2000 for v in "$@"; do
2001     r=${v#*=}
2002     l=${v%"$r"}
2003     r=$(sh_quote "$r")
2004     FFMPEG_CONFIGURATION="${FFMPEG_CONFIGURATION# } ${l}${r}"
2005 done
2006
2007 find_things(){
2008     thing=$1
2009     pattern=$2
2010     file=$source_path/$3
2011     sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
2012 }
2013
2014 ENCODER_LIST=$(find_things  encoder  ENC      libavcodec/allcodecs.c)
2015 DECODER_LIST=$(find_things  decoder  DEC      libavcodec/allcodecs.c)
2016 HWACCEL_LIST=$(find_things  hwaccel  HWACCEL  libavcodec/allcodecs.c)
2017 PARSER_LIST=$(find_things   parser   PARSER   libavcodec/allcodecs.c)
2018 BSF_LIST=$(find_things      bsf      BSF      libavcodec/allcodecs.c)
2019 MUXER_LIST=$(find_things    muxer    _MUX     libavformat/allformats.c)
2020 DEMUXER_LIST=$(find_things  demuxer  DEMUX    libavformat/allformats.c)
2021 OUTDEV_LIST=$(find_things   outdev   OUTDEV   libavdevice/alldevices.c)
2022 INDEV_LIST=$(find_things    indev    _IN      libavdevice/alldevices.c)
2023 PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
2024 FILTER_LIST=$(find_things   filter   FILTER   libavfilter/allfilters.c)
2025
2026 ALL_COMPONENTS="
2027     $BSF_LIST
2028     $DECODER_LIST
2029     $DEMUXER_LIST
2030     $ENCODER_LIST
2031     $FILTER_LIST
2032     $HWACCEL_LIST
2033     $INDEV_LIST
2034     $MUXER_LIST
2035     $OUTDEV_LIST
2036     $PARSER_LIST
2037     $PROTOCOL_LIST
2038 "
2039
2040 find_tests(){
2041     map "echo ${2}\${v}_test" $(ls "$source_path"/tests/ref/$1 | grep -v '[^-a-z0-9_]')
2042 }
2043
2044 LAVF_FATE_TESTS=$(find_tests lavf-fate)
2045 LAVF_TESTS=$(find_tests lavf)
2046 LAVFI_TESTS=$(find_tests lavfi)
2047 SEEK_TESTS=$(find_tests seek seek_)
2048
2049 ALL_TESTS="$LAVF_FATE_TESTS $LAVF_TESTS $LAVFI_TESTS $SEEK_TESTS"
2050
2051 for n in $COMPONENT_LIST; do
2052     v=$(toupper ${n%s})_LIST
2053     eval enable \$$v
2054     eval ${n}_if_any="\$$v"
2055 done
2056
2057 enable $ARCH_EXT_LIST $ALL_TESTS
2058
2059 die_unknown(){
2060     echo "Unknown option \"$1\"."
2061     echo "See $0 --help for available options."
2062     exit 1
2063 }
2064
2065 show_list() {
2066     suffix=_$1
2067     shift
2068     echo $* | sed s/$suffix//g | tr ' ' '\n' | sort | pr -3 -t
2069     exit 0
2070 }
2071
2072 rand_list(){
2073     IFS=', '
2074     set -- $*
2075     unset IFS
2076     for thing; do
2077         comp=${thing%:*}
2078         prob=${thing#$comp}
2079         prob=${prob#:}
2080         is_in ${comp} $COMPONENT_LIST && eval comp=\$$(toupper ${comp%s})_LIST
2081         echo "prob ${prob:-0.5}"
2082         printf '%s\n' $comp
2083     done
2084 }
2085
2086 do_random(){
2087     action=$1
2088     shift
2089     random_seed=$(awk "BEGIN { srand($random_seed); print srand() }")
2090     $action $(rand_list "$@" | awk "BEGIN { srand($random_seed) } \$1 == \"prob\" { prob = \$2; next } rand() < prob { print }")
2091 }
2092
2093 for opt do
2094     optval="${opt#*=}"
2095     case "$opt" in
2096     --extra-ldflags=*) add_ldflags $optval
2097     ;;
2098     --extra-libs=*) add_extralibs $optval
2099     ;;
2100     --disable-devices) disable $INDEV_LIST $OUTDEV_LIST
2101     ;;
2102     --enable-debug=*) debuglevel="$optval"
2103     ;;
2104     --disable-everything)
2105     map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
2106     ;;
2107     --enable-random|--disable-random)
2108     action=${opt%%-random}
2109     do_random ${action#--} $COMPONENT_LIST
2110     ;;
2111     --enable-random=*|--disable-random=*)
2112     action=${opt%%-random=*}
2113     do_random ${action#--} $optval
2114     ;;
2115     --enable-*=*|--disable-*=*)
2116     eval $(echo "${opt%%=*}" | sed 's/--/action=/;s/-/ thing=/')
2117     is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt"
2118     eval list=\$$(toupper $thing)_LIST
2119     name=$(echo "${optval}" | sed "s/,/_${thing}|/g")_${thing}
2120     $action $(filter "$name" $list)
2121     ;;
2122     --enable-?*|--disable-?*)
2123     eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
2124     if is_in $option $COMPONENT_LIST; then
2125         test $action = disable && action=unset
2126         eval $action \$$(toupper ${option%s})_LIST
2127     elif is_in $option $CMDLINE_SELECT; then
2128         $action $option
2129     else
2130         die_unknown $opt
2131     fi
2132     ;;
2133     --list-*)
2134         NAME="${opt#--list-}"
2135         is_in $NAME $COMPONENT_LIST || die_unknown $opt
2136         NAME=${NAME%s}
2137         eval show_list $NAME \$$(toupper $NAME)_LIST
2138     ;;
2139     --help|-h) show_help
2140     ;;
2141     *)
2142     optname="${opt%%=*}"
2143     optname="${optname#--}"
2144     optname=$(echo "$optname" | sed 's/-/_/g')
2145     if is_in $optname $CMDLINE_SET; then
2146         eval $optname='$optval'
2147     elif is_in $optname $CMDLINE_APPEND; then
2148         append $optname "$optval"
2149     else
2150          die_unknown $opt
2151     fi
2152     ;;
2153     esac
2154 done
2155
2156 disabled logging && logfile=/dev/null
2157
2158 echo "# $0 $FFMPEG_CONFIGURATION" > $logfile
2159 set >> $logfile
2160
2161 test -n "$cross_prefix" && enable cross_compile
2162
2163 if enabled cross_compile; then
2164     test -n "$arch" && test -n "$target_os" ||
2165         die "Must specify target arch and OS when cross-compiling"
2166 fi
2167
2168 set_default arch target_os postproc_version
2169
2170 # Check if we should build alternative libpostproc version instead of current
2171 if   test "$postproc_version" = $ALT_PP_VER; then
2172   LIBPOSTPROC_VERSION=$ALT_PP_VER
2173   LIBPOSTPROC_VERSION_MAJOR=$ALT_PP_VER_MAJOR
2174   LIBPOSTPROC_VERSION_MINOR=$ALT_PP_VER_MINOR
2175   LIBPOSTPROC_VERSION_MICRO=$ALT_PP_VER_MICRO
2176 elif test "$postproc_version" != current; then
2177   die "Invalid argument to --postproc-version. See --help output."
2178 fi
2179
2180 ar_default="${cross_prefix}${ar_default}"
2181 cc_default="${cross_prefix}${cc_default}"
2182 cxx_default="${cross_prefix}${cxx_default}"
2183 nm_default="${cross_prefix}${nm_default}"
2184 pkg_config_default="${cross_prefix}${pkg_config_default}"
2185 ranlib="${cross_prefix}${ranlib}"
2186 strip_default="${cross_prefix}${strip_default}"
2187
2188 sysinclude_default="${sysroot}/usr/include"
2189
2190 set_default cc cxx nm pkg_config strip sysinclude yasmexe
2191 enabled cross_compile || host_cc_default=$cc
2192 set_default host_cc
2193
2194 if ! $pkg_config --version >/dev/null 2>&1; then
2195     warn "$pkg_config not found, library detection may fail."
2196     pkg_config=false
2197 fi
2198
2199 exesuf() {
2200     case $1 in
2201         mingw32*|cygwin*|*-dos|freedos|opendos|os/2*|symbian) echo .exe ;;
2202     esac
2203 }
2204
2205 EXESUF=$(exesuf $target_os)
2206 HOSTEXESUF=$(exesuf $host_os)
2207
2208 # set temporary file name
2209 : ${TMPDIR:=$TEMPDIR}
2210 : ${TMPDIR:=$TMP}
2211 : ${TMPDIR:=/tmp}
2212
2213 if ! check_cmd mktemp -u XXXXXX; then
2214     # simple replacement for missing mktemp
2215     # NOT SAFE FOR GENERAL USE
2216     mktemp(){
2217         echo "${2%%XXX*}.${HOSTNAME}.${UID}.$$"
2218     }
2219 fi
2220
2221 tmpfile(){
2222     tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
2223         (set -C; exec > $tmp) 2>/dev/null ||
2224         die "Unable to create temporary file in $TMPDIR."
2225     append TMPFILES $tmp
2226     eval $1=$tmp
2227 }
2228
2229 trap 'rm -f -- $TMPFILES' EXIT
2230
2231 tmpfile TMPASM .asm
2232 tmpfile TMPC   .c
2233 tmpfile TMPCPP .cpp
2234 tmpfile TMPE   $EXESUF
2235 tmpfile TMPH   .h
2236 tmpfile TMPO   .o
2237 tmpfile TMPS   .S
2238 tmpfile TMPSH  .sh
2239 tmpfile TMPV   .ver
2240
2241 unset -f mktemp
2242
2243 chmod +x $TMPE
2244
2245 # make sure we can execute files in $TMPDIR
2246 cat > $TMPSH 2>> $logfile <<EOF
2247 #! /bin/sh
2248 EOF
2249 chmod +x $TMPSH >> $logfile 2>&1
2250 if ! $TMPSH >> $logfile 2>&1; then
2251     cat <<EOF
2252 Unable to create and execute files in $TMPDIR.  Set the TMPDIR environment
2253 variable to another directory and make sure that it is not mounted noexec.
2254 EOF
2255     die "Sanity test failed."
2256 fi
2257
2258 pgi_flags(){
2259     for flag; do
2260         case $flag in
2261             -fomit-frame-pointer) echo -Mnoframe ;;
2262             -g)                   echo -gopt ;;
2263             *)                    echo $flag ;;
2264         esac
2265     done
2266 }
2267
2268 suncc_flags(){
2269     for flag; do
2270         case $flag in
2271             -march=*|-mcpu=*)
2272                 case "${flag#*=}" in
2273                     native)                   echo -xtarget=native       ;;
2274                     v9|niagara)               echo -xarch=sparc          ;;
2275                     ultrasparc)               echo -xarch=sparcvis       ;;
2276                     ultrasparc3|niagara2)     echo -xarch=sparcvis2      ;;
2277                     i586|pentium)             echo -xchip=pentium        ;;
2278                     i686|pentiumpro|pentium2) echo -xtarget=pentium_pro  ;;
2279                     pentium3*|c3-2)           echo -xtarget=pentium3     ;;
2280                     pentium-m)          echo -xarch=sse2 -xchip=pentium3 ;;
2281                     pentium4*)          echo -xtarget=pentium4           ;;
2282                     prescott|nocona)    echo -xarch=sse3 -xchip=pentium4 ;;
2283                     *-sse3)             echo -xarch=sse3                 ;;
2284                     core2)              echo -xarch=ssse3 -xchip=core2   ;;
2285                     amdfam10|barcelona)       echo -xarch=sse4_1         ;;
2286                     athlon-4|athlon-[mx]p)    echo -xarch=ssea           ;;
2287                     k8|opteron|athlon64|athlon-fx)
2288                                               echo -xarch=sse2a          ;;
2289                     athlon*)                  echo -xarch=pentium_proa   ;;
2290                 esac
2291                 ;;
2292             -std=c99)             echo -xc99              ;;
2293             -fomit-frame-pointer) echo -xregs=frameptr    ;;
2294             -fPIC)                echo -KPIC -xcode=pic32 ;;
2295             -W*,*)                echo $flag              ;;
2296             -f*-*|-W*)                                    ;;
2297             *)                    echo $flag              ;;
2298         esac
2299     done
2300 }
2301
2302 tms470_flags(){
2303     for flag; do
2304         case $flag in
2305             -march=*|-mcpu=*)
2306                 case "${flag#*=}" in
2307                     armv7-a|cortex-a*)      echo -mv=7a8 ;;
2308                     armv7-r|cortex-r*)      echo -mv=7r4 ;;
2309                     armv7-m|cortex-m*)      echo -mv=7m3 ;;
2310                     armv6*|arm11*)          echo -mv=6   ;;
2311                     armv5*e|arm[79]*e*|arm9[24]6*|arm96*|arm102[26])
2312                                             echo -mv=5e  ;;
2313                     armv4*|arm7*|arm9[24]*) echo -mv=4   ;;
2314                 esac
2315                 ;;
2316             -mfpu=neon)     echo --float_support=vfpv3 --neon ;;
2317             -mfpu=vfp)      echo --float_support=vfpv2        ;;
2318             -mfpu=vfpv3)    echo --float_support=vfpv3        ;;
2319             -msoft-float)   echo --float_support=vfplib       ;;
2320             -O[0-3]|-mf=*)  echo $flag                        ;;
2321             -g)             echo -g -mn                       ;;
2322             -pds=*)         echo $flag                        ;;
2323             -D*|-I*)        echo $flag                        ;;
2324             --gcc|--abi=*)  echo $flag                        ;;
2325             -me)            echo $flag                        ;;
2326         esac
2327     done
2328 }
2329
2330 probe_cc(){
2331     pfx=$1
2332     _cc=$2
2333
2334     unset _type _ident _cc_o _flags _cflags _ldflags _depflags _DEPCMD _DEPFLAGS
2335     _flags_filter=echo
2336
2337     if $_cc -v 2>&1 | grep -q '^gcc.*LLVM'; then
2338         _type=llvm_gcc
2339         gcc_extra_ver=$(expr "$($_cc --version | head -n1)" : '.*\((.*)\)')
2340         _ident="llvm-gcc $($_cc -dumpversion) $gcc_extra_ver"
2341         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2342         _cflags_speed='-O3'
2343         _cflags_size='-Os'
2344     elif $_cc -v 2>&1 | grep -qi ^gcc; then
2345         _type=gcc
2346         gcc_version=$($_cc --version | head -n1)
2347         gcc_basever=$($_cc -dumpversion)
2348         gcc_pkg_ver=$(expr "$gcc_version" : '[^ ]* \(([^)]*)\)')
2349         gcc_ext_ver=$(expr "$gcc_version" : ".*$gcc_pkg_ver $gcc_basever \\(.*\\)")
2350         _ident=$(cleanws "gcc $gcc_basever $gcc_pkg_ver $gcc_ext_ver")
2351         if ! $_cc -dumpversion | grep -q '^2\.'; then
2352             _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2353         fi
2354         _cflags_speed='-O3'
2355         _cflags_size='-Os'
2356     elif $_cc --version 2>/dev/null | grep -q Intel; then
2357         _type=icc
2358         _ident=$($_cc --version | head -n1)
2359         _depflags='-MMD'
2360         _cflags_speed='-O3'
2361         _cflags_size='-Os'
2362         _cflags_noopt='-O1'
2363     elif $_cc -v 2>&1 | grep -q xlc; then
2364         _type=xlc
2365         _ident=$($_cc -qversion 2>/dev/null | head -n1)
2366         _cflags_speed='-O5'
2367         _cflags_size='-O5 -qcompact'
2368     elif $_cc -V 2>/dev/null | grep -q Compaq; then
2369         _type=ccc
2370         _ident=$($_cc -V | head -n1 | cut -d' ' -f1-3)
2371         _DEPFLAGS='-M'
2372         debuglevel=3
2373         _ldflags='-Wl,-z,now' # calls to libots crash without this
2374         _cflags_speed='-fast'
2375         _cflags_size='-O1'
2376     elif $_cc --vsn 2>/dev/null | grep -q "ARM C/C++ Compiler"; then
2377         test -d "$sysroot" || die "No valid sysroot specified."
2378         _type=armcc
2379         _ident=$($_cc --vsn | head -n1)
2380         armcc_conf="$PWD/armcc.conf"
2381         $_cc --arm_linux_configure                 \
2382              --arm_linux_config_file="$armcc_conf" \
2383              --configure_sysroot="$sysroot"        \
2384              --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
2385              die "Error creating armcc configuration file."
2386         $_cc --vsn | grep -q RVCT && armcc_opt=rvct || armcc_opt=armcc
2387         _flags="--arm_linux_config_file=$armcc_conf --translate_gcc"
2388         as_default="${cross_prefix}gcc"
2389         _depflags='-MMD'
2390         _cflags_speed='-O3'
2391         _cflags_size='-Os'
2392     elif $_cc -version 2>/dev/null | grep -q TMS470; then
2393         _type=tms470
2394         _ident=$($_cc -version | head -n1 | tr -s ' ')
2395         _flags='--gcc --abi=eabi -me'
2396         _cflags='-D__gnuc_va_list=va_list -D__USER_LABEL_PREFIX__='
2397         _cc_o='-fe=$@'
2398         as_default="${cross_prefix}gcc"
2399         ld_default="${cross_prefix}gcc"
2400         _depflags='-ppa -ppd=$(@:.o=.d)'
2401         _cflags_speed='-O3 -mf=5'
2402         _cflags_size='-O3 -mf=2'
2403         _flags_filter=tms470_flags
2404     elif $_cc -v 2>&1 | grep -q clang; then
2405         _type=clang
2406         _ident=$($_cc --version | head -n1)
2407         _depflags='-MMD'
2408         _cflags_speed='-O3'
2409         _cflags_size='-Os'
2410     elif $_cc -V 2>&1 | grep -q Sun; then
2411         _type=suncc
2412         _ident=$($_cc -V 2>&1 | head -n1 | cut -d' ' -f 2-)
2413         _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "1s,^.*: ,$@: ," -e "\$$!s,\$$, \\\," -e "1!s,^.*: , ," > $(@:.o=.d)'
2414         _DEPFLAGS='-xM1'
2415         _ldflags='-std=c99'
2416         _cflags_speed='-O5'
2417         _cflags_size='-O5 -xspace'
2418         _flags_filter=suncc_flags
2419     elif $_cc -v 2>&1 | grep -q 'PathScale\|Path64'; then
2420         _type=pathscale
2421         _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
2422         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2423         _cflags_speed='-O2'
2424         _cflags_size='-Os'
2425         _flags_filter='filter_out -Wdisabled-optimization'
2426     elif $_cc -v 2>&1 | grep -q Open64; then
2427         _type=open64
2428         _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
2429         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2430         _cflags_speed='-O2'
2431         _cflags_size='-Os'
2432         _flags_filter='filter_out -Wdisabled-optimization|-Wtype-limits|-fno-signed-zeros'
2433     elif $_cc -V 2>&1 | grep -q Portland; then
2434         _type=pgi
2435         _ident="PGI $($_cc -V 2>&1 | awk '/^pgcc/ { print $2; exit }')"
2436         opt_common='-alias=ansi -Mlre -Mpre'
2437         _cflags_speed="-O3 -Mautoinline -Munroll=c:4 $opt_common"
2438         _cflags_size="-O2 -Munroll=c:1 $opt_common"
2439         _cflags_noopt="-O1"
2440         _flags_filter=pgi_flags
2441     fi
2442
2443     eval ${pfx}_type=\$_type
2444     eval ${pfx}_ident=\$_ident
2445 }
2446
2447 set_ccvars(){
2448     eval ${1}_O=\${_cc_o-\${${1}_O}}
2449
2450     if [ -n "$_depflags" ]; then
2451         eval ${1}_DEPFLAGS=\$_depflags
2452     else
2453         eval ${1}DEP=\${_DEPCMD:-\$DEPCMD}
2454         eval ${1}DEP_FLAGS=\${_DEPFLAGS:-\$DEPFLAGS}
2455         eval DEP${1}FLAGS=\$_flags
2456     fi
2457 }
2458
2459 probe_cc cc "$cc"
2460 cflags_filter=$_flags_filter
2461 cflags_speed=$_cflags_speed
2462 cflags_size=$_cflags_size
2463 cflags_noopt=$_cflags_noopt
2464 add_cflags $_flags $_cflags
2465 cc_ldflags=$_ldflags
2466 set_ccvars CC
2467
2468 probe_cc hostcc "$host_cc"
2469 host_cflags_filter=$_flags_filter
2470 host_ldflags_filter=$_flags_filter
2471 add_host_cflags  $_flags $_cflags
2472 add_host_ldflags $_flags $_ldflags
2473 set_ccvars HOSTCC
2474
2475 test -n "$cc_type" && enable $cc_type ||
2476     warn "Unknown C compiler $cc, unable to select optimal CFLAGS"
2477
2478 : ${as_default:=$cc}
2479 : ${dep_cc_default:=$cc}
2480 : ${ld_default:=$cc}
2481 set_default ar as dep_cc ld
2482
2483 probe_cc as "$as"
2484 asflags_filter=$_flags_filter
2485 add_asflags $_flags $_cflags
2486 set_ccvars AS
2487
2488 probe_cc ld "$ld"
2489 ldflags_filter=$_flags_filter
2490 add_ldflags $_flags $_ldflags
2491 test "$cc_type" != "$ld_type" && add_ldflags $cc_ldflags
2492 LD_O=${_cc_o-$LD_O}
2493
2494 if [ -z "$CC_DEPFLAGS" ] && [ "$dep_cc" != "$cc" ]; then
2495     probe_cc depcc "$dep_cc"
2496     CCDEP=${_DEPCMD:-$DEPCMD}
2497     CCDEP_FLAGS=${_DEPFLAGS:=$DEPFLAGS}
2498     DEPCCFLAGS=$_flags
2499 fi
2500
2501 add_cflags $extra_cflags
2502 add_cxxflags $extra_cxxflags
2503 add_asflags $extra_cflags
2504
2505 if test -n "$sysroot"; then
2506     case "$cc_type" in
2507         gcc|llvm_gcc|clang)
2508             add_cppflags --sysroot="$sysroot"
2509             add_ldflags --sysroot="$sysroot"
2510         ;;
2511         tms470)
2512             add_cppflags -I"$sysinclude"
2513             add_ldflags  --sysroot="$sysroot"
2514         ;;
2515     esac
2516 fi
2517
2518 if test "$cpu" = host; then
2519     enabled cross_compile && die "--cpu=host makes no sense when cross-compiling."
2520
2521     case "$cc_type" in
2522         gcc|llvm_gcc)
2523             check_native(){
2524                 $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
2525                 sed -n "/cc1.*$1=/{
2526                             s/.*$1=\\([^ ]*\\).*/\\1/
2527                             p
2528                             q
2529                         }" $TMPE
2530             }
2531             cpu=$(check_native -march || check_native -mcpu)
2532         ;;
2533     esac
2534
2535     test "${cpu:-host}" = host && die "--cpu=host not supported with compiler $cc"
2536 fi
2537
2538 # Deal with common $arch aliases
2539 case "$arch" in
2540     arm*|iPad*)
2541         arch="arm"
2542     ;;
2543     mips|mipsel|IP*)
2544         arch="mips"
2545     ;;
2546     mips64*)
2547         arch="mips"
2548         subarch="mips64"
2549     ;;
2550     parisc|hppa)
2551         arch="parisc"
2552     ;;
2553     parisc64|hppa64)
2554         arch="parisc"
2555         subarch="parisc64"
2556     ;;
2557     "Power Macintosh"|ppc|powerpc|ppc64|powerpc64)
2558         arch="ppc"
2559     ;;
2560     s390|s390x)
2561         arch="s390"
2562     ;;
2563     sh4|sh)
2564         arch="sh4"
2565     ;;
2566     sun4u|sparc64)
2567         arch="sparc"
2568         subarch="sparc64"
2569     ;;
2570     i[3-6]86|i86pc|BePC|x86pc|x86_64|x86_32|amd64)
2571         arch="x86"
2572     ;;
2573 esac
2574
2575 is_in $arch $ARCH_LIST || warn "unknown architecture $arch"
2576 enable $arch
2577
2578 # Add processor-specific flags
2579 if test "$cpu" = generic; then
2580     : do nothing
2581 elif enabled ppc; then
2582
2583     case $(tolower $cpu) in
2584         601|ppc601|powerpc601)
2585             cpuflags="-mcpu=601"
2586             disable altivec
2587         ;;
2588         603*|ppc603*|powerpc603*)
2589             cpuflags="-mcpu=603"
2590             disable altivec
2591         ;;
2592         604*|ppc604*|powerpc604*)
2593             cpuflags="-mcpu=604"
2594             disable altivec
2595         ;;
2596         g3|75*|ppc75*|powerpc75*)
2597             cpuflags="-mcpu=750 -mpowerpc-gfxopt"
2598             disable altivec
2599         ;;
2600         g4|745*|ppc745*|powerpc745*)
2601             cpuflags="-mcpu=7450 -mpowerpc-gfxopt"
2602         ;;
2603         74*|ppc74*|powerpc74*)
2604             cpuflags="-mcpu=7400 -mpowerpc-gfxopt"
2605         ;;
2606         g5|970|ppc970|powerpc970)
2607             cpuflags="-mcpu=970 -mpowerpc-gfxopt -mpowerpc64"
2608         ;;
2609         power[3-7]*)
2610             cpuflags="-mcpu=$cpu -mpowerpc-gfxopt -mpowerpc64"
2611         ;;
2612         cell)
2613             cpuflags="-mcpu=cell"
2614             enable ldbrx
2615         ;;
2616         e500v2)
2617             cpuflags="-mcpu=8548 -mhard-float -mfloat-gprs=double"
2618             disable altivec
2619         ;;
2620         e500)
2621             cpuflags="-mcpu=8540 -mhard-float"
2622             disable altivec
2623         ;;
2624     esac
2625
2626 elif enabled x86; then
2627
2628     case $cpu in
2629         i[345]86|pentium)
2630             cpuflags="-march=$cpu"
2631             disable mmx
2632         ;;
2633         # targets that do NOT support conditional mov (cmov)
2634         pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
2635             cpuflags="-march=$cpu"
2636             disable cmov
2637         ;;
2638         # targets that do support conditional mov (cmov)
2639         i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64*|k8*|opteron*|athlon-fx|core2|amdfam10|barcelona|atom)
2640             cpuflags="-march=$cpu"
2641             enable cmov
2642             enable fast_cmov
2643         ;;
2644         # targets that do support conditional mov but on which it's slow
2645         pentium4|pentium4m|prescott|nocona)
2646             cpuflags="-march=$cpu"
2647             enable cmov
2648             disable fast_cmov
2649         ;;
2650     esac
2651
2652 elif enabled sparc; then
2653
2654     case $cpu in
2655         niagara)
2656             cpuflags="-mcpu=$cpu"
2657             disable vis
2658         ;;
2659         sparc64)
2660             cpuflags="-mcpu=v9"
2661         ;;
2662     esac
2663
2664 elif enabled arm; then
2665
2666     case $cpu in
2667         armv*)
2668             cpuflags="-march=$cpu"
2669             subarch=$(echo $cpu | sed 's/[^a-z0-9]//g')
2670         ;;
2671         *)
2672             cpuflags="-mcpu=$cpu"
2673             case $cpu in
2674                 cortex-a*)                               subarch=armv7a  ;;
2675                 cortex-r*)                               subarch=armv7r  ;;
2676                 cortex-m*)                 enable thumb; subarch=armv7m  ;;
2677                 arm11*)                                  subarch=armv6   ;;
2678                 arm[79]*e*|arm9[24]6*|arm96*|arm102[26]) subarch=armv5te ;;
2679                 armv4*|arm7*|arm9[24]*)                  subarch=armv4   ;;
2680             esac
2681         ;;
2682     esac
2683
2684 elif enabled alpha; then
2685
2686     enabled ccc && cpuflags="-arch $cpu" || cpuflags="-mcpu=$cpu"
2687
2688 elif enabled bfin; then
2689
2690     cpuflags="-mcpu=$cpu"
2691
2692 elif enabled mips; then
2693
2694     cpuflags="-march=$cpu"
2695
2696     case $cpu in
2697         24kc)
2698             disable mipsfpu
2699             disable mipsdspr1
2700             disable mipsdspr2
2701         ;;
2702         24kf*)
2703             disable mipsdspr1
2704             disable mipsdspr2
2705         ;;
2706         24kec|34kc|1004kc)
2707             disable mipsfpu
2708             disable mipsdspr2
2709         ;;
2710         24kef*|34kf*|1004kf*)
2711             disable mipsdspr2
2712         ;;
2713         74kc)
2714             disable mipsfpu
2715         ;;
2716     esac
2717
2718 elif enabled avr32; then
2719
2720     case $cpu in
2721         ap7[02]0[0-2])
2722             subarch="avr32_ap"
2723             cpuflags="-mpart=$cpu"
2724         ;;
2725         ap)
2726             subarch="avr32_ap"
2727             cpuflags="-march=$cpu"
2728         ;;
2729         uc3[ab]*)
2730             subarch="avr32_uc"
2731             cpuflags="-mcpu=$cpu"
2732         ;;
2733         uc)
2734             subarch="avr32_uc"
2735             cpuflags="-march=$cpu"
2736         ;;
2737     esac
2738
2739 fi
2740
2741 add_cflags $cpuflags
2742 add_asflags $cpuflags
2743
2744 # compiler sanity check
2745 check_exec <<EOF
2746 int main(void){ return 0; }
2747 EOF
2748 if test "$?" != 0; then
2749     echo "$cc is unable to create an executable file."
2750     if test -z "$cross_prefix" && ! enabled cross_compile ; then
2751         echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
2752         echo "Only do this if you know what cross compiling means."
2753     fi
2754     die "C compiler test failed."
2755 fi
2756
2757 add_cppflags -D_ISOC99_SOURCE
2758 add_cxxflags -D__STDC_CONSTANT_MACROS
2759 check_cflags -std=c99
2760 check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
2761 #include <stdlib.h>
2762 EOF
2763 check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
2764 #include <stdlib.h>
2765 EOF
2766
2767 check_host_cflags -std=c99
2768 check_host_cflags -Wall
2769
2770 case "$arch" in
2771     alpha|ia64|mips|parisc|sparc)
2772         spic=$shared
2773     ;;
2774     x86)
2775         subarch="x86_32"
2776         check_code cc "" "int test[(int)sizeof(char*) - 7]" && subarch="x86_64"
2777         if test "$subarch" = "x86_64"; then
2778             spic=$shared
2779         fi
2780     ;;
2781     ppc)
2782         check_cc <<EOF && subarch="ppc64"
2783         int test[(int)sizeof(char*) - 7];
2784 EOF
2785     ;;
2786 esac
2787
2788 enable $subarch
2789 enabled spic && enable pic
2790
2791 # OS specific
2792 case $target_os in
2793     haiku)
2794         prefix_default="/boot/common"
2795         network_extralibs="-lnetwork"
2796         host_libs=
2797         ;;
2798     sunos)
2799         FFSERVERLDFLAGS=""
2800         SHFLAGS='-shared -Wl,-h,$$(@F)'
2801         enabled x86 && SHFLAGS="-mimpure-text $SHFLAGS"
2802         network_extralibs="-lsocket -lnsl"
2803         add_cppflags -D__EXTENSIONS__ -D_XOPEN_SOURCE=600
2804         # When using suncc to build, the Solaris linker will mark
2805         # an executable with each instruction set encountered by
2806         # the Solaris assembler.  As our libraries contain their own
2807         # guards for processor-specific code, instead suppress
2808         # generation of the HWCAPS ELF section on Solaris x86 only.
2809         enabled_all suncc x86 && echo "hwcap_1 = OVERRIDE;" > mapfile && add_ldflags -Wl,-M,mapfile
2810         nm_opts='-P -g'
2811         ;;
2812     netbsd)
2813         disable symver
2814         oss_indev_extralibs="-lossaudio"
2815         oss_outdev_extralibs="-lossaudio"
2816         ;;
2817     openbsd|bitrig)
2818         # On OpenBSD 4.5. the compiler does not use PIC unless
2819         # explicitly using -fPIC. FFmpeg builds fine without PIC,
2820         # however the generated executable will not do anything
2821         # (simply quits with exit-code 1, no crash, no output).
2822         # Thus explicitly enable PIC here.
2823         enable pic
2824         disable symver
2825         SHFLAGS='-shared'
2826         SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBVERSION)'
2827         oss_indev_extralibs="-lossaudio"
2828         oss_outdev_extralibs="-lossaudio"
2829         ;;
2830     dragonfly)
2831         disable symver
2832         ;;
2833     freebsd)
2834         ;;
2835     bsd/os)
2836         add_extralibs -lpoll -lgnugetopt
2837         strip="strip -d"
2838         ;;
2839     darwin)
2840         gas="gas-preprocessor.pl $cc"
2841         enabled ppc && add_asflags -force_cpusubtype_ALL
2842         SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR)'
2843         enabled x86_32 && append SHFLAGS -Wl,-read_only_relocs,suppress
2844         strip="${strip} -x"
2845         add_ldflags -Wl,-dynamic,-search_paths_first
2846         SLIBSUF=".dylib"
2847         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
2848         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
2849         FFSERVERLDFLAGS=-Wl,-bind_at_load
2850         objformat="macho"
2851         enabled x86_64 && objformat="macho64"
2852         enabled_any pic shared ||
2853             { check_cflags -mdynamic-no-pic && add_asflags -mdynamic-no-pic; }
2854         ;;
2855     mingw32*)
2856         if test $target_os = "mingw32ce"; then
2857             disable network
2858         else
2859             target_os=mingw32
2860         fi
2861         LIBTARGET=i386
2862         if enabled x86_64; then
2863             LIBTARGET=x64
2864         elif enabled arm; then
2865             LIBTARGET=arm-wince
2866         fi
2867         shlibdir_default="$bindir_default"
2868         SLIBPREF=""
2869         SLIBSUF=".dll"
2870         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
2871         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
2872         SLIB_EXTRA_CMD='-lib.exe /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib)'
2873         SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
2874         SLIB_INSTALL_LINKS=
2875         SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
2876         SLIB_INSTALL_EXTRA_LIB='lib$(SLIBNAME:$(SLIBSUF)=.dll.a) $(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
2877         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'
2878         objformat="win32"
2879         enable dos_paths
2880         check_cflags -fno-common
2881         check_cpp_condition _mingw.h "defined (__MINGW64_VERSION_MAJOR) || (__MINGW32_MAJOR_VERSION > 3) \
2882                                       || (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
2883                 die "ERROR: MinGW runtime version must be >= 3.15."
2884         add_cppflags -U__STRICT_ANSI__
2885         ;;
2886     cygwin*)
2887         target_os=cygwin
2888         shlibdir_default="$bindir_default"
2889         SLIBPREF="cyg"
2890         SLIBSUF=".dll"
2891         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
2892         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
2893         SHFLAGS='-shared -Wl,--enable-auto-image-base'
2894         objformat="win32"
2895         enable dos_paths
2896         check_cflags -fno-common
2897         add_cppflags -U__STRICT_ANSI__
2898         ;;
2899     *-dos|freedos|opendos)
2900         network_extralibs="-lsocket"
2901         objformat="coff"
2902         enable dos_paths
2903         add_cppflags -U__STRICT_ANSI__
2904         ;;
2905     linux)
2906         add_cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
2907         enable dv1394
2908         ;;
2909     irix*)
2910         target_os=irix
2911         ranlib="echo ignoring ranlib"
2912         ;;
2913     os/2*)
2914         strip="lxlite -CS"
2915         ln_s="cp -f"
2916         objformat="aout"
2917         add_cppflags -D_GNU_SOURCE
2918         add_ldflags -Zomf -Zbin-files -Zargs-wild -Zmap
2919         SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
2920         FFSERVERLDFLAGS=""
2921         LIBSUF="_s.a"
2922         SLIBPREF=""
2923         SLIBSUF=".dll"
2924         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
2925         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
2926         SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
2927           echo PROTMODE >> $(SUBDIR)$(NAME).def; \
2928           echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
2929           echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
2930           echo EXPORTS >> $(SUBDIR)$(NAME).def; \
2931           emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
2932         SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
2933           emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
2934         SLIB_INSTALL_EXTRA_LIB='$(LIBPREF)$(NAME)_dll.a $(LIBPREF)$(NAME)_dll.lib'
2935         enable dos_paths
2936         enable_weak os2threads
2937         ;;
2938     gnu/kfreebsd)
2939         add_cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -D_BSD_SOURCE
2940         ;;
2941     gnu)
2942         add_cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
2943         ;;
2944     qnx)
2945         add_cppflags -D_QNX_SOURCE
2946         network_extralibs="-lsocket"
2947         ;;
2948     symbian)
2949         SLIBSUF=".dll"
2950         enable dos_paths
2951         add_cflags --include=$sysinclude/gcce/gcce.h -fvisibility=default
2952         add_cppflags -D__GCCE__ -D__SYMBIAN32__ -DSYMBIAN_OE_POSIX_SIGNALS
2953         add_ldflags -Wl,--target1-abs,--no-undefined \
2954                     -Wl,-Ttext,0x80000,-Tdata,0x1000000 -shared \
2955                     -Wl,--entry=_E32Startup -Wl,-u,_E32Startup
2956         add_extralibs -l:eexe.lib -l:usrt2_2.lib -l:dfpaeabi.dso \
2957                       -l:drtaeabi.dso -l:scppnwdl.dso -lsupc++ -lgcc \
2958                       -l:libc.dso -l:libm.dso -l:euser.dso -l:libcrt0.lib
2959         ;;
2960     none)
2961         ;;
2962     *)
2963         die "Unknown OS '$target_os'."
2964         ;;
2965 esac
2966
2967 esc(){
2968     echo "$*" | sed 's/%/%25/g;s/:/%3a/g'
2969 }
2970
2971 echo "config:$arch:$subarch:$cpu:$target_os:$(esc $cc_ident):$(esc $FFMPEG_CONFIGURATION)" >config.fate
2972
2973 check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable pic
2974
2975 set_default $PATHS_LIST
2976
2977 # we need to build at least one lib type
2978 if ! enabled_any static shared; then
2979     cat <<EOF
2980 At least one library type must be built.
2981 Specify --enable-static to build the static libraries or --enable-shared to
2982 build the shared libraries as well. To only build the shared libraries specify
2983 --disable-static in addition to --enable-shared.
2984 EOF
2985     exit 1;
2986 fi
2987
2988 die_license_disabled() {
2989     enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
2990 }
2991
2992 die_license_disabled_gpl() {
2993     enabled $1 || { enabled $2 && die "$2 is incompatible with the gpl and --enable-$1 is not specified."; }
2994 }
2995
2996 die_license_disabled gpl libcdio
2997 die_license_disabled gpl libutvideo
2998 die_license_disabled gpl libx264
2999 die_license_disabled gpl libxavs
3000 die_license_disabled gpl libxvid
3001 die_license_disabled gpl x11grab
3002
3003 die_license_disabled nonfree libaacplus
3004 die_license_disabled nonfree libfaac
3005 enabled gpl && die_license_disabled_gpl nonfree libfdk_aac
3006 enabled gpl && die_license_disabled_gpl nonfree openssl
3007
3008 die_license_disabled version3 libopencore_amrnb
3009 die_license_disabled version3 libopencore_amrwb
3010 die_license_disabled version3 libvo_aacenc
3011 die_license_disabled version3 libvo_amrwbenc
3012
3013 enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
3014
3015 disabled optimizations || check_cflags -fomit-frame-pointer
3016
3017 enable_pic() {
3018     enable pic
3019     add_cppflags -DPIC
3020     add_cflags   -fPIC
3021     add_asflags  -fPIC
3022 }
3023
3024 enabled pic && enable_pic
3025
3026 check_cc <<EOF || die "Symbol mangling check failed."
3027 int ff_extern;
3028 EOF
3029 sym=$($nm $nm_opts $TMPO | awk '/ff_extern/{ print substr($0, match($0, /[^ \t]*ff_extern/)) }')
3030 extern_prefix=${sym%%ff_extern*}
3031
3032 check_cc <<EOF && enable inline_asm
3033 void foo(void) { __asm__ volatile ("" ::); }
3034 EOF
3035
3036 _restrict=
3037 for restrict_keyword in restrict __restrict__ __restrict; do
3038     check_cc <<EOF && _restrict=$restrict_keyword && break
3039 void foo(char * $restrict_keyword p);
3040 EOF
3041 done
3042
3043 check_cc <<EOF && enable attribute_packed
3044 struct { int x; } __attribute__((packed)) x;
3045 EOF
3046
3047 check_cc <<EOF && enable attribute_may_alias
3048 union { int x; } __attribute__((may_alias)) x;
3049 EOF
3050
3051 check_cc <<EOF || die "endian test failed"
3052 unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
3053 EOF
3054 od -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
3055
3056 if enabled alpha; then
3057
3058     check_cflags -mieee
3059
3060 elif enabled arm; then
3061
3062     enabled thumb && check_cflags -mthumb || check_cflags -marm
3063     nogas=die
3064
3065     if     check_cpp_condition stddef.h "defined __ARM_PCS_VFP"; then
3066         enable vfp_args
3067     elif ! check_cpp_condition stddef.h "defined __ARM_PCS || defined __SOFTFP__"; then
3068         case "${cross_prefix:-$cc}" in
3069             *hardfloat*)         enable vfp_args;   fpabi=vfp ;;
3070             *) check_ld "cc" <<EOF && enable vfp_args && fpabi=vfp || fpabi=soft ;;
3071 __asm__ (".eabi_attribute 28, 1");
3072 int main(void) { return 0; }
3073 EOF
3074         esac
3075         warn "Compiler does not indicate floating-point ABI, guessing $fpabi."
3076     fi
3077
3078     enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
3079     enabled armv6   && check_asm armv6   '"sadd16 r0, r0, r0"'
3080     enabled armv6t2 && check_asm armv6t2 '"movt r0, #0"'
3081     enabled armvfp  && check_asm armvfp  '"fadds s0, s0, s0"'
3082     enabled neon    && check_asm neon    '"vadd.i16 q0, q0, q0"'
3083     enabled vfpv3   && check_asm vfpv3   '"vmov.f32 s0, #1.0"'
3084
3085     check_asm asm_mod_y '"vmul.i32 d0, d0, %y0" :: "x"(0)'
3086
3087     enabled_all armv6t2 shared !pic && enable_pic
3088
3089 elif enabled mips; then
3090
3091     check_asm loongson '"dmult.g $1, $2, $3"'
3092     enabled mmi     && check_asm mmi     '"lq $2, 0($2)"'
3093     enabled mips32r2  && add_cflags "-mips32r2" &&
3094      check_asm mips32r2  '"rotr $t0, $t1, 1"'
3095     enabled mipsdspr1 && add_cflags "-mdsp" && add_asflags "-mdsp" &&
3096      check_asm mipsdspr1 '"addu.qb $t0, $t1, $t2"'
3097     enabled mipsdspr2 && add_cflags "-mdspr2" && add_asflags "-mdspr2" &&
3098      check_asm mipsdspr2 '"absq_s.qb $t0, $t1"'
3099     enabled mipsfpu   && add_cflags "-mhard-float" &&
3100      check_asm mipsfpu   '"madd.d $f0, $f2, $f4, $f6"'
3101
3102
3103 elif enabled ppc; then
3104
3105     enable local_aligned_8 local_aligned_16
3106
3107     check_asm dcbzl     '"dcbzl 0, %0" :: "r"(0)'
3108     check_asm ibm_asm   '"add 0, 0, 0"'
3109     check_asm ppc4xx    '"maclhw r10, r11, r12"'
3110     check_asm xform_asm '"lwzx %1, %y0" :: "Z"(*(int*)0), "r"(0)'
3111
3112     # AltiVec flags: The FSF version of GCC differs from the Apple version
3113     if enabled altivec; then
3114         nogas=warn
3115         check_cflags -maltivec -mabi=altivec &&
3116         { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
3117         check_cflags -faltivec
3118
3119         # check if our compiler supports Motorola AltiVec C API
3120         check_cc <<EOF || disable altivec
3121 $inc_altivec_h
3122 int main(void) {
3123     vector signed int v1, v2, v3;
3124     v1 = vec_add(v2,v3);
3125     return 0;
3126 }
3127 EOF
3128
3129         # check if our compiler supports braces for vector declarations
3130         check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
3131 $inc_altivec_h
3132 int main (void) { (vector int) {1}; return 0; }
3133 EOF
3134     fi
3135
3136 elif enabled sparc; then
3137
3138     enabled vis && check_asm vis '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc &&
3139         add_cflags -mcpu=ultrasparc -mtune=ultrasparc
3140
3141 elif enabled x86; then
3142
3143     check_code ld immintrin.h "__xgetbv(0)" "cc" && enable xgetbv
3144     check_code ld intrin.h "int info[4]; __cpuid(info, 0)" "cc" && enable cpuid
3145     check_code ld intrin.h "__rdtsc()" "cc" && enable rdtsc
3146     check_code ld intrin.h "unsigned int x = __readeflags()" "cc" && enable rweflags
3147
3148     check_code ld mmintrin.h "_mm_empty()" "cc" && enable mm_empty
3149
3150     enable local_aligned_8 local_aligned_16
3151
3152     # check whether EBP is available on x86
3153     # As 'i' is stored on the stack, this program will crash
3154     # if the base pointer is used to access it because the
3155     # base pointer is cleared in the inline assembly code.
3156     check_exec_crash <<EOF && enable ebp_available
3157     volatile int i=0;
3158     __asm__ volatile (
3159         "xorl %%ebp, %%ebp"
3160     ::: "%ebp");
3161     return i;
3162 EOF
3163
3164     # check whether EBX is available on x86
3165     check_asm ebx_available '""::"b"(0)' &&
3166         check_asm ebx_available '"":::"%ebx"'
3167
3168     # check whether xmm clobbers are supported
3169     check_asm xmm_clobbers '"":::"%xmm0"'
3170
3171     # check whether binutils is new enough to compile SSSE3/MMX2
3172     enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
3173     enabled mmx2  && check_asm mmx2  '"pmaxub %mm0, %mm1"'
3174
3175     if ! disabled_any asm mmx yasm; then
3176         if check_cmd $yasmexe --version; then
3177             enabled x86_64 && yasm_extra="-m amd64"
3178             yasm_debug="-g dwarf2"
3179         elif check_cmd nasm -v; then
3180             yasmexe=nasm
3181             yasm_debug="-g -F dwarf"
3182             enabled x86_64 && test "$objformat" = elf && objformat=elf64
3183         fi
3184
3185         YASMFLAGS="-f $objformat $yasm_extra"
3186         enabled pic               && append YASMFLAGS "-DPIC"
3187         test -n "$extern_prefix"  && append YASMFLAGS "-DPREFIX"
3188         case "$objformat" in
3189             elf*) enabled debug && append YASMFLAGS $yasm_debug ;;
3190         esac
3191
3192         check_yasm "pextrd [eax], xmm0, 1" && enable yasm ||
3193             die "yasm not found, use --disable-yasm for a crippled build"
3194         check_yasm "vextractf128 xmm0, ymm0, 0" || disable avx
3195         check_yasm "vfmaddps ymm0, ymm1, ymm2, ymm3" || disable fma4
3196     fi
3197
3198     case "$cpu" in
3199         athlon*|opteron*|k8*|pentium|pentium-mmx|prescott|nocona|atom|geode)
3200             disable fast_clz
3201         ;;
3202     esac
3203
3204 fi
3205
3206 if enabled asm; then
3207     as=${gas:=$as}
3208     check_asm gnu_as '".macro m n\n\\n:.int 0\n.endm\nm x"' ||
3209         $nogas "GNU assembler not found, install gas-preprocessor"
3210 fi
3211
3212 check_ldflags -Wl,--as-needed
3213
3214 if check_func dlopen; then
3215     ldl=
3216 elif check_func dlopen -ldl; then
3217     ldl=-ldl
3218 fi
3219
3220 if enabled network; then
3221     check_type "sys/types.h sys/socket.h" socklen_t
3222     check_type netdb.h "struct addrinfo"
3223     check_type netinet/in.h "struct group_source_req" -D_BSD_SOURCE
3224     check_type netinet/in.h "struct ip_mreq_source" -D_BSD_SOURCE
3225     check_type netinet/in.h "struct ipv6_mreq" -D_DARWIN_C_SOURCE
3226     check_type netinet/in.h "struct sockaddr_in6"
3227     check_type poll.h "struct pollfd"
3228     check_type "sys/types.h sys/socket.h" "struct sockaddr_storage"
3229     check_struct "sys/types.h sys/socket.h" "struct sockaddr" sa_len
3230     check_header netinet/sctp.h
3231     check_func getaddrinfo $network_extralibs
3232     # Prefer arpa/inet.h over winsock2
3233     if check_header arpa/inet.h ; then
3234         check_func closesocket
3235     elif check_header winsock2.h ; then
3236         check_func_headers winsock2.h closesocket -lws2 &&
3237             network_extralibs="-lws2" ||
3238         { check_func_headers winsock2.h closesocket -lws2_32 &&
3239             network_extralibs="-lws2_32"; }
3240         check_func_headers ws2tcpip.h getaddrinfo $network_extralibs
3241         check_type ws2tcpip.h socklen_t
3242         check_type ws2tcpip.h "struct addrinfo"
3243         check_type ws2tcpip.h "struct group_source_req"
3244         check_type ws2tcpip.h "struct ip_mreq_source"
3245         check_type ws2tcpip.h "struct ipv6_mreq"
3246         check_type winsock2.h "struct pollfd"
3247         check_type ws2tcpip.h "struct sockaddr_in6"
3248         check_type ws2tcpip.h "struct sockaddr_storage"
3249         check_struct winsock2.h "struct sockaddr" sa_len
3250     else
3251         disable network
3252     fi
3253 fi
3254
3255 # Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
3256 check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
3257
3258 check_func  clock_gettime || { check_func clock_gettime -lrt && add_extralibs -lrt; }
3259 check_func  fcntl
3260 check_func  fork
3261 check_func  gethrtime
3262 check_func  getopt
3263 check_func  getrusage
3264 check_struct "sys/time.h sys/resource.h" "struct rusage" ru_maxrss
3265 check_func  gettimeofday
3266 check_func  inet_aton $network_extralibs
3267 check_func  isatty
3268 check_func  localtime_r
3269 check_func  ${malloc_prefix}memalign            && enable memalign
3270 check_func  mkstemp
3271 check_func  mmap
3272 check_func  ${malloc_prefix}posix_memalign      && enable posix_memalign
3273 check_func_headers malloc.h _aligned_malloc     && enable aligned_malloc
3274 check_func  setrlimit
3275 check_func  strerror_r
3276 check_func  strptime
3277 check_func  sched_getaffinity
3278 check_func  sysconf
3279 check_func  sysctl
3280 check_func  usleep
3281 check_func_headers conio.h kbhit
3282 check_func_headers windows.h PeekNamedPipe
3283 check_func_headers io.h setmode
3284 check_func_headers lzo/lzo1x.h lzo1x_999_compress
3285 check_lib2 "windows.h shellapi.h" CommandLineToArgvW -lshell32
3286 check_lib2 "windows.h psapi.h" GetProcessMemoryInfo -lpsapi
3287 check_func_headers windows.h GetProcessAffinityMask
3288 check_func_headers windows.h GetProcessTimes
3289 check_func_headers windows.h GetSystemTimeAsFileTime
3290 check_func_headers windows.h MapViewOfFile
3291 check_func_headers windows.h Sleep
3292 check_func_headers windows.h VirtualAlloc
3293 check_func_headers glob.h glob
3294
3295 check_header dlfcn.h
3296 check_header dxva.h
3297 check_header dxva2api.h -D_WIN32_WINNT=0x0600
3298 check_header libcrystalhd/libcrystalhd_if.h
3299 check_header malloc.h
3300 check_header poll.h
3301 check_header sys/mman.h
3302 check_header sys/param.h
3303 check_header sys/resource.h
3304 check_header sys/select.h
3305 check_header sys/time.h
3306 check_header termios.h
3307 check_header unistd.h
3308 check_header vdpau/vdpau.h
3309 check_header vdpau/vdpau_x11.h
3310 check_header windows.h
3311 check_header X11/extensions/XvMClib.h
3312 check_header asm/types.h
3313
3314 disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
3315 disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
3316
3317 # check for VDA header
3318 if ! disabled vda; then
3319     if check_header VideoDecodeAcceleration/VDADecoder.h; then
3320         enable vda
3321         add_extralibs -framework CoreFoundation -framework VideoDecodeAcceleration -framework QuartzCore
3322     fi
3323 fi
3324
3325 if ! disabled w32threads && ! enabled pthreads; then
3326     check_func _beginthreadex && enable w32threads
3327 fi
3328
3329 # check for some common methods of building with pthread support
3330 # do this before the optional library checks as some of them require pthreads
3331 if ! disabled pthreads && ! enabled w32threads && ! enabled os2threads; then
3332     enable pthreads
3333     if check_func pthread_create; then
3334         :
3335     elif check_func pthread_create -pthread; then
3336         add_cflags -pthread
3337         add_extralibs -pthread
3338     elif check_func pthread_create -pthreads; then
3339         add_cflags -pthreads
3340         add_extralibs -pthreads
3341     elif check_func pthread_create -lpthreadGC2; then
3342         add_extralibs -lpthreadGC2
3343     elif ! check_lib pthread.h pthread_create -lpthread; then
3344         disable pthreads
3345     fi
3346 fi
3347
3348 for thread in $THREADS_LIST; do
3349     if enabled $thread; then
3350         test -n "$thread_type" &&
3351             die "ERROR: Only one thread type must be selected." ||
3352             thread_type="$thread"
3353     fi
3354 done
3355
3356 if enabled pthreads; then
3357   check_func pthread_cancel
3358 fi
3359
3360 check_lib math.h sin -lm && LIBM="-lm"
3361 disabled crystalhd || check_lib libcrystalhd/libcrystalhd_if.h DtsCrystalHDVersion -lcrystalhd || disable crystalhd
3362 enabled vaapi && require vaapi va/va.h vaInitialize -lva
3363
3364 check_mathfunc cbrtf
3365 check_mathfunc exp2
3366 check_mathfunc exp2f
3367 check_mathfunc isinf
3368 check_mathfunc isnan
3369 check_mathfunc llrint
3370 check_mathfunc llrintf
3371 check_mathfunc log2
3372 check_mathfunc log2f
3373 check_mathfunc lrint
3374 check_mathfunc lrintf
3375 check_mathfunc rint
3376 check_mathfunc round
3377 check_mathfunc roundf
3378 check_mathfunc trunc
3379 check_mathfunc truncf
3380
3381 # these are off by default, so fail if requested and not available
3382 enabled avisynth   && require2 vfw32 "windows.h vfw.h" AVIFileInit -lavifil32
3383 enabled fontconfig && require_pkg_config fontconfig "fontconfig/fontconfig.h" FcInit
3384 enabled frei0r     && { check_header frei0r.h || die "ERROR: frei0r.h header not found"; }
3385 enabled gnutls     && require_pkg_config gnutls gnutls/gnutls.h gnutls_global_init
3386 enabled libiec61883 && require libiec61883 libiec61883/iec61883.h iec61883_cmp_connect -lraw1394 -lavc1394 -lrom1394 -liec61883
3387 enabled libaacplus && require  "libaacplus >= 2.0.0" aacplus.h aacplusEncOpen -laacplus
3388 enabled libass     && require_pkg_config libass ass/ass.h ass_library_init
3389 enabled libbluray  && require libbluray libbluray/bluray.h bd_open -lbluray
3390 enabled libcelt    && require libcelt celt/celt.h celt_decode -lcelt0 &&
3391                       { check_lib celt/celt.h celt_decoder_create_custom -lcelt0 ||
3392                         die "ERROR: libcelt version must be >= 0.11.0."; }
3393 enabled libcaca    && require_pkg_config caca caca.h caca_create_canvas
3394 enabled libfaac    && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
3395 enabled libfdk_aac && require  libfdk_aac fdk-aac/aacenc_lib.h aacEncOpen -lfdk-aac
3396 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"
3397 enabled libflite   && require2 libflite "flite/flite.h" flite_init $flite_libs
3398 enabled libfreetype && require_pkg_config freetype2 "ft2build.h freetype/freetype.h" FT_Init_FreeType
3399 enabled libgsm     && require  libgsm gsm/gsm.h gsm_create -lgsm
3400 enabled libilbc    && require  libilbc ilbc.h WebRtcIlbcfix_InitDecode -lilbc
3401 enabled libmodplug && require  libmodplug libmodplug/modplug.h ModPlug_Load -lmodplug
3402 enabled libmp3lame && require  "libmp3lame >= 3.98.3" lame/lame.h lame_set_VBR_quality -lmp3lame
3403 enabled libnut     && require  libnut libnut.h nut_demuxer_init -lnut
3404 enabled libopencore_amrnb  && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb
3405 enabled libopencore_amrwb  && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb
3406 enabled libopencv  && require_pkg_config opencv opencv/cxcore.h cvCreateImageHeader
3407 enabled libopenjpeg && require libopenjpeg openjpeg.h opj_version -lopenjpeg
3408 enabled libopus    && require_pkg_config opus opus_multistream.h opus_multistream_decoder_create
3409 enabled libpulse && require_pkg_config libpulse-simple pulse/simple.h pa_simple_new
3410 enabled librtmp    && require_pkg_config librtmp librtmp/rtmp.h RTMP_Socket
3411 enabled libschroedinger && require_pkg_config schroedinger-1.0 schroedinger/schro.h schro_init
3412 enabled libspeex   && require  libspeex speex/speex.h speex_decoder_init -lspeex
3413 enabled libstagefright_h264  && require_cpp libstagefright_h264 "binder/ProcessState.h media/stagefright/MetaData.h
3414     media/stagefright/MediaBufferGroup.h media/stagefright/MediaDebug.h media/stagefright/MediaDefs.h
3415     media/stagefright/OMXClient.h media/stagefright/OMXCodec.h" android::OMXClient -lstagefright -lmedia -lutils -lbinder -lgnustl_static
3416 enabled libtheora  && require  libtheora theora/theoraenc.h th_info_init -ltheoraenc -ltheoradec -logg
3417 enabled libutvideo    && require_cpp utvideo "stdint.h stdlib.h utvideo/utvideo.h utvideo/Codec.h" 'CCodec*' -lutvideo -lstdc++
3418 enabled libv4l2    && require_pkg_config libv4l2 libv4l2.h v4l2_ioctl
3419 enabled libvo_aacenc && require libvo_aacenc vo-aacenc/voAAC.h voGetAACEncAPI -lvo-aacenc
3420 enabled libvo_amrwbenc && require libvo_amrwbenc vo-amrwbenc/enc_if.h E_IF_init -lvo-amrwbenc
3421 enabled libvorbis  && require  libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
3422 enabled libvpx     && {
3423     enabled libvpx_decoder && { check_lib2 "vpx/vpx_decoder.h vpx/vp8dx.h" vpx_codec_dec_init_ver -lvpx ||
3424                                 die "ERROR: libvpx decoder version must be >=0.9.1"; }
3425     enabled libvpx_encoder && { check_lib2 "vpx/vpx_encoder.h vpx/vp8cx.h" "vpx_codec_enc_init_ver VP8E_SET_MAX_INTRA_BITRATE_PCT" -lvpx ||
3426                                 die "ERROR: libvpx encoder version must be >=0.9.7"; } }
3427 enabled libx264    && require  libx264 x264.h x264_encoder_encode -lx264 &&
3428                       { check_cpp_condition x264.h "X264_BUILD >= 118" ||
3429                         die "ERROR: libx264 version must be >= 0.118."; }
3430 enabled libxavs    && require  libxavs xavs.h xavs_encoder_encode -lxavs
3431 enabled libxvid    && require  libxvid xvid.h xvid_global -lxvidcore
3432 enabled openal     && { { for al_libs in "${OPENAL_LIBS}" "-lopenal" "-lOpenAL32"; do
3433                         check_lib 'AL/al.h' alGetError "${al_libs}" && break; done } ||
3434                         die "ERROR: openal not found"; } &&
3435                       { check_cpp_condition "AL/al.h" "defined(AL_VERSION_1_1)" ||
3436                         die "ERROR: openal version must be 1.1 or compatible"; }
3437 enabled openssl    && { check_lib openssl/ssl.h SSL_library_init -lssl -lcrypto ||
3438                         check_lib openssl/ssl.h SSL_library_init -lssl32 -leay32 ||
3439                         check_lib openssl/ssl.h SSL_library_init -lssl -lcrypto -lws2_32 -lgdi32 ||
3440                         die "ERROR: openssl not found"; }
3441
3442 if enabled gnutls; then
3443     { check_lib nettle/bignum.h nettle_mpz_get_str_256 -lnettle -lhogweed -lgmp && enable nettle; } ||
3444     { check_lib gcrypt.h gcry_mpi_new -lgcrypt && enable gcrypt; }
3445 fi
3446
3447 # libdc1394 check
3448 if enabled libdc1394; then
3449     { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
3450         enable libdc1394_2; } ||
3451     { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
3452         enable libdc1394_1; } ||
3453     die "ERROR: No version of libdc1394 found "
3454 fi
3455
3456 SDL_CONFIG="${cross_prefix}sdl-config"
3457 if check_pkg_config sdl SDL_events.h SDL_PollEvent; then
3458     check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
3459     enable sdl &&
3460     check_struct SDL.h SDL_VideoInfo current_w $sdl_cflags && enable sdl_video_size
3461 else
3462   if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
3463     sdl_cflags=$("${SDL_CONFIG}" --cflags)
3464     sdl_libs=$("${SDL_CONFIG}" --libs)
3465     check_func_headers SDL_version.h SDL_Linked_Version $sdl_cflags $sdl_libs &&
3466     check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
3467     enable sdl &&
3468     check_struct SDL.h SDL_VideoInfo current_w $sdl_cflags && enable sdl_video_size
3469   fi
3470 fi
3471 enabled sdl && add_cflags $sdl_cflags && add_extralibs $sdl_libs
3472
3473 texi2html --help 2> /dev/null | grep -q 'init-file' && enable texi2html || disable texi2html
3474 makeinfo --version > /dev/null 2>&1 && enable makeinfo  || disable makeinfo
3475 pod2man --help > /dev/null 2>&1 && enable pod2man || disable pod2man
3476
3477 check_header linux/fb.h
3478 check_header linux/videodev.h
3479 check_header linux/videodev2.h
3480 check_struct linux/videodev2.h "struct v4l2_frmivalenum" discrete
3481
3482 check_header sys/videoio.h
3483
3484 check_func_headers "windows.h vfw.h" capCreateCaptureWindow "$vfwcap_indev_extralibs"
3485 # check that WM_CAP_DRIVER_CONNECT is defined to the proper value
3486 # w32api 3.12 had it defined wrong
3487 check_cpp_condition vfw.h "WM_CAP_DRIVER_CONNECT > WM_USER" && enable vfwcap_defines
3488
3489 check_type "dshow.h" IBaseFilter
3490
3491 # check for ioctl_meteor.h, ioctl_bt848.h and alternatives
3492 { check_header dev/bktr/ioctl_meteor.h &&
3493   check_header dev/bktr/ioctl_bt848.h; } ||
3494 { check_header machine/ioctl_meteor.h &&
3495   check_header machine/ioctl_bt848.h; } ||
3496 { check_header dev/video/meteor/ioctl_meteor.h &&
3497   check_header dev/video/bktr/ioctl_bt848.h; } ||
3498 check_header dev/ic/bt8xx.h
3499
3500 check_header sndio.h
3501 if check_struct sys/soundcard.h audio_buf_info bytes; then
3502     enable_safe sys/soundcard.h
3503 else
3504     check_cc -D__BSD_VISIBLE -D__XSI_VISIBLE <<EOF && add_cppflags -D__BSD_VISIBLE -D__XSI_VISIBLE && enable_safe sys/soundcard.h
3505     #include <sys/soundcard.h>
3506     audio_buf_info abc;
3507 EOF
3508 fi
3509 check_header soundcard.h
3510
3511 enabled_any alsa_indev alsa_outdev && check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
3512
3513 enabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack && check_func sem_timedwait &&
3514     check_func jack_port_get_latency_range -ljack
3515
3516 enabled_any sndio_indev sndio_outdev && check_lib2 sndio.h sio_open -lsndio
3517
3518 enabled libcdio &&
3519     check_lib2 "cdio/cdda.h cdio/paranoia.h" cdio_cddap_open "-lcdio_paranoia -lcdio_cdda -lcdio"
3520
3521 enabled x11grab                                           &&
3522 require X11 X11/Xlib.h XOpenDisplay -lX11                 &&
3523 require Xext X11/extensions/XShm.h XShmCreateImage -lXext &&
3524 require Xfixes X11/extensions/Xfixes.h XFixesGetCursorImage -lXfixes
3525
3526 if ! disabled vaapi; then
3527     check_lib va/va.h vaInitialize -lva && {
3528         check_cpp_condition va/va_version.h "VA_CHECK_VERSION(0,32,0)" ||
3529         warn "Please upgrade to VA-API >= 0.32 if you would like full VA-API support.";
3530     } || disable vaapi
3531 fi
3532
3533 if ! disabled vdpau && enabled vdpau_vdpau_h; then
3534 check_cpp_condition \
3535     vdpau/vdpau.h "defined VDP_DECODER_PROFILE_MPEG4_PART2_ASP" ||
3536     { echolog "Please upgrade to libvdpau >= 0.2 if you would like vdpau support." &&
3537       disable vdpau; }
3538 fi
3539
3540 enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel"
3541 enabled coverage && add_cflags "-fprofile-arcs -ftest-coverage" && add_ldflags "-fprofile-arcs -ftest-coverage"
3542 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"
3543
3544 # add some useful compiler flags if supported
3545 check_cflags -Wdeclaration-after-statement
3546 check_cflags -Wall
3547 check_cflags -Wno-parentheses
3548 check_cflags -Wno-switch
3549 check_cflags -Wno-format-zero-length
3550 check_cflags -Wdisabled-optimization
3551 check_cflags -Wpointer-arith
3552 check_cflags -Wredundant-decls
3553 check_cflags -Wno-pointer-sign
3554 check_cflags -Wwrite-strings
3555 check_cflags -Wtype-limits
3556 check_cflags -Wundef
3557 check_cflags -Wmissing-prototypes
3558 check_cflags -Wno-pointer-to-int-cast
3559 check_cflags -Wstrict-prototypes
3560 enabled extra_warnings && check_cflags -Winline
3561
3562 # add some linker flags
3563 check_ldflags -Wl,--warn-common
3564 check_ldflags -Wl,-rpath-link=libpostproc:libswresample:libswscale:libavfilter:libavdevice:libavformat:libavcodec:libavutil:libavresample
3565 test_ldflags -Wl,-Bsymbolic && append SHFLAGS -Wl,-Bsymbolic
3566
3567 enabled xmm_clobber_test &&
3568     check_ldflags -Wl,--wrap,avcodec_open2              \
3569                   -Wl,--wrap,avcodec_decode_audio4      \
3570                   -Wl,--wrap,avcodec_decode_video2      \
3571                   -Wl,--wrap,avcodec_decode_subtitle2   \
3572                   -Wl,--wrap,avcodec_encode_audio2      \
3573                   -Wl,--wrap,avcodec_encode_video       \
3574                   -Wl,--wrap,avcodec_encode_subtitle    \
3575                   -Wl,--wrap,sws_scale ||
3576     disable xmm_clobber_test
3577
3578 echo "X{};" > $TMPV
3579 if test_ldflags -Wl,--version-script,$TMPV; then
3580     append SHFLAGS '-Wl,--version-script,\$(SUBDIR)lib\$(NAME).ver'
3581     check_cc <<EOF && enable symver_asm_label
3582 void ff_foo(void) __asm__ ("av_foo@VERSION");
3583 void ff_foo(void) { ${inline_asm+__asm__($quotes);} }
3584 EOF
3585     check_cc <<EOF && enable symver_gnu_asm
3586 __asm__(".symver ff_foo,av_foo@VERSION");
3587 void ff_foo(void) {}
3588 EOF
3589 fi
3590
3591 if [ -n "$optflags" ]; then
3592     add_cflags $optflags
3593 elif enabled small; then
3594     add_cflags $cflags_size
3595 elif enabled optimizations; then
3596     add_cflags $cflags_speed
3597 else
3598     add_cflags $cflags_noopt
3599 fi
3600 check_cflags -fno-math-errno
3601 check_cflags -fno-signed-zeros
3602 check_cc -mno-red-zone <<EOF && noredzone_flags="-mno-red-zone"
3603 int x;
3604 EOF
3605
3606
3607 if enabled icc; then
3608     # Just warnings, no remarks
3609     check_cflags -w1
3610     # -wd: Disable following warnings
3611     # 144, 167, 556: -Wno-pointer-sign
3612     # 1292: attribute "foo" ignored
3613     # 1419: external declaration in primary source file
3614     # 10006: ignoring unknown option -fno-signed-zeros
3615     # 10148: ignoring unknown option -Wno-parentheses
3616     # 10156: ignoring option '-W'; no argument required
3617     check_cflags -wd144,167,556,1292,1419,10006,10148,10156
3618     # 11030: Warning unknown option --as-needed
3619     # 10156: ignoring option '-export'; no argument required
3620     check_ldflags -wd10156,11030
3621     # Allow to compile with optimizations
3622     check_ldflags -march=$cpu
3623     # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
3624     enable ebp_available
3625     if enabled x86_32; then
3626         icc_version=$($cc -dumpversion)
3627         test ${icc_version%%.*} -ge 11 &&
3628             check_cflags -falign-stack=maintain-16-byte ||
3629             disable aligned_stack
3630     fi
3631 elif enabled ccc; then
3632     # disable some annoying warnings
3633     add_cflags -msg_disable cvtu32to64
3634     add_cflags -msg_disable embedcomment
3635     add_cflags -msg_disable needconstext
3636     add_cflags -msg_disable nomainieee
3637     add_cflags -msg_disable ptrmismatch1
3638     add_cflags -msg_disable unreachcode
3639 elif enabled gcc; then
3640     check_cflags -fno-tree-vectorize
3641     check_cflags -Werror=implicit-function-declaration
3642     check_cflags -Werror=missing-prototypes
3643 elif enabled llvm_gcc; then
3644     check_cflags -mllvm -stack-alignment=16
3645 elif enabled clang; then
3646     check_cflags -mllvm -stack-alignment=16
3647     check_cflags -Qunused-arguments
3648 elif enabled armcc; then
3649     # 2523: use of inline assembler is deprecated
3650     add_cflags -W${armcc_opt},--diag_suppress=2523
3651     add_cflags -W${armcc_opt},--diag_suppress=1207
3652     add_cflags -W${armcc_opt},--diag_suppress=1293 # assignment in condition
3653     add_cflags -W${armcc_opt},--diag_suppress=3343 # hardfp compat
3654     add_cflags -W${armcc_opt},--diag_suppress=167  # pointer sign
3655     add_cflags -W${armcc_opt},--diag_suppress=513  # pointer sign
3656 elif enabled tms470; then
3657     add_cflags -pds=824 -pds=837
3658 elif enabled pathscale; then
3659     add_cflags -fstrict-overflow -OPT:wrap_around_unsafe_opt=OFF
3660 fi
3661
3662 enabled_any $THREADS_LIST      && enable threads
3663
3664 check_deps $CONFIG_LIST       \
3665            $CONFIG_EXTRA      \
3666            $HAVE_LIST         \
3667            $ALL_COMPONENTS    \
3668            $ALL_TESTS         \
3669
3670 enabled asm || { arch=c; disable $ARCH_LIST $ARCH_EXT_LIST; }
3671
3672 if test $target_os = "haiku"; then
3673     disable memalign
3674     disable posix_memalign
3675 fi
3676
3677 ! enabled_any memalign posix_memalign aligned_malloc &&
3678     enabled_any $need_memalign && enable memalign_hack
3679
3680 # add_dep lib dep
3681 # -> enable ${lib}_deps_${dep}
3682 # -> add $dep to ${lib}_deps only once
3683 add_dep() {
3684     lib=$1
3685     dep=$2
3686     enabled "${lib}_deps_${dep}" && return 0
3687     enable  "${lib}_deps_${dep}"
3688     prepend "${lib}_deps" $dep
3689 }
3690
3691 # merge deps lib components
3692 # merge all ${component}_deps into ${lib}_deps and ${lib}_deps_*
3693 merge_deps() {
3694     lib=$1
3695     shift
3696     for comp in $*; do
3697         enabled $comp || continue
3698         eval "dep=\"\$${comp}_deps\""
3699         for d in $dep; do
3700             add_dep $lib $d
3701         done
3702     done
3703 }
3704
3705 merge_deps libavfilter $FILTER_LIST
3706
3707 echo "install prefix            $prefix"
3708 echo "source path               $source_path"
3709 echo "C compiler                $cc"
3710 echo "ARCH                      $arch ($cpu)"
3711 if test "$build_suffix" != ""; then
3712     echo "build suffix              $build_suffix"
3713 fi
3714 if test "$progs_suffix" != ""; then
3715     echo "progs suffix              $progs_suffix"
3716 fi
3717 if test "$extra_version" != ""; then
3718     echo "version string suffix     $extra_version"
3719 fi
3720 echo "big-endian                ${bigendian-no}"
3721 echo "runtime cpu detection     ${runtime_cpudetect-no}"
3722 if enabled x86; then
3723     echo "${yasmexe}                      ${yasm-no}"
3724     echo "MMX enabled               ${mmx-no}"
3725     echo "MMX2 enabled              ${mmx2-no}"
3726     echo "3DNow! enabled            ${amd3dnow-no}"
3727     echo "3DNow! extended enabled   ${amd3dnowext-no}"
3728     echo "SSE enabled               ${sse-no}"
3729     echo "SSSE3 enabled             ${ssse3-no}"
3730     echo "AVX enabled               ${avx-no}"
3731     echo "FMA4 enabled              ${fma4-no}"
3732     echo "CMOV enabled              ${cmov-no}"
3733     echo "CMOV is fast              ${fast_cmov-no}"
3734     echo "EBX available             ${ebx_available-no}"
3735     echo "EBP available             ${ebp_available-no}"
3736 fi
3737 if enabled arm; then
3738     echo "ARMv5TE enabled           ${armv5te-no}"
3739     echo "ARMv6 enabled             ${armv6-no}"
3740     echo "ARMv6T2 enabled           ${armv6t2-no}"
3741     echo "ARM VFP enabled           ${armvfp-no}"
3742     echo "NEON enabled              ${neon-no}"
3743 fi
3744 if enabled mips; then
3745     echo "MMI enabled               ${mmi-no}"
3746     echo "MIPS FPU enabled          ${mipsfpu-no}"
3747     echo "MIPS32R2 enabled          ${mips32r2-no}"
3748     echo "MIPS DSP R1 enabled       ${mipsdspr1-no}"
3749     echo "MIPS DSP R2 enabled       ${mipsdspr2-no}"
3750 fi
3751 if enabled ppc; then
3752     echo "AltiVec enabled           ${altivec-no}"
3753     echo "PPC 4xx optimizations     ${ppc4xx-no}"
3754     echo "dcbzl available           ${dcbzl-no}"
3755 fi
3756 if enabled sparc; then
3757     echo "VIS enabled               ${vis-no}"
3758 fi
3759 echo "debug symbols             ${debug-no}"
3760 echo "strip symbols             ${stripping-no}"
3761 echo "optimize for size         ${small-no}"
3762 echo "optimizations             ${optimizations-no}"
3763 echo "static                    ${static-no}"
3764 echo "shared                    ${shared-no}"
3765 echo "postprocessing support    ${postproc-no}"
3766 echo "new filter support        ${avfilter-no}"
3767 echo "network support           ${network-no}"
3768 echo "threading support         ${thread_type-no}"
3769 echo "safe bitstream reader     ${safe_bitstream_reader-no}"
3770 echo "SDL support               ${sdl-no}"
3771 echo "libdxva2 enabled          ${dxva2-no}"
3772 echo "libva enabled             ${vaapi-no}"
3773 echo "libvdpau enabled          ${vdpau-no}"
3774 echo "AVISynth enabled          ${avisynth-no}"
3775 echo "frei0r enabled            ${frei0r-no}"
3776 echo "gnutls enabled            ${gnutls-no}"
3777 echo "libaacplus enabled        ${libaacplus-no}"
3778 echo "libass enabled            ${libass-no}"
3779 echo "libcaca enabled           ${libcaca-no}"
3780 echo "libcdio support           ${libcdio-no}"
3781 echo "libcelt enabled           ${libcelt-no}"
3782 echo "libdc1394 support         ${libdc1394-no}"
3783 echo "libfaac enabled           ${libfaac-no}"
3784 echo "libfdk-aac enabled        ${libfdk_aac-no}"
3785 echo "libgsm enabled            ${libgsm-no}"
3786 echo "libiec61883 support       ${libiec61883-no}"
3787 echo "libilbc enabled           ${libilbc-no}"
3788 echo "libmodplug enabled        ${libmodplug-no}"
3789 echo "libmp3lame enabled        ${libmp3lame-no}"
3790 echo "libnut enabled            ${libnut-no}"
3791 echo "libopencore-amrnb support ${libopencore_amrnb-no}"
3792 echo "libopencore-amrwb support ${libopencore_amrwb-no}"
3793 echo "libopencv support         ${libopencv-no}"
3794 echo "libopenjpeg enabled       ${libopenjpeg-no}"
3795 echo "libopus enabled           ${libopus-no}"
3796 echo "libpulse enabled          ${libpulse-no}"
3797 echo "librtmp enabled           ${librtmp-no}"
3798 echo "libschroedinger enabled   ${libschroedinger-no}"
3799 echo "libspeex enabled          ${libspeex-no}"
3800 echo "libstagefright-h264 enabled    ${libstagefright_h264-no}"
3801 echo "libtheora enabled         ${libtheora-no}"
3802 echo "libutvideo enabled        ${libutvideo-no}"
3803 echo "libv4l2 enabled           ${libv4l2-no}"
3804 echo "libvo-aacenc support      ${libvo_aacenc-no}"
3805 echo "libvo-amrwbenc support    ${libvo_amrwbenc-no}"
3806 echo "libvorbis enabled         ${libvorbis-no}"
3807 echo "libvpx enabled            ${libvpx-no}"
3808 echo "libx264 enabled           ${libx264-no}"
3809 echo "libxavs enabled           ${libxavs-no}"
3810 echo "libxvid enabled           ${libxvid-no}"
3811 echo "openal enabled            ${openal-no}"
3812 echo "openssl enabled           ${openssl-no}"
3813 echo "zlib enabled              ${zlib-no}"
3814 echo "bzlib enabled             ${bzlib-no}"
3815 echo "texi2html enabled         ${texi2html-no}"
3816 echo "pod2man enabled           ${pod2man-no}"
3817 echo "makeinfo enabled          ${makeinfo-no}"
3818 test -n "$random_seed" &&
3819     echo "random seed               ${random_seed}"
3820 echo
3821
3822 for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
3823     echo "Enabled ${type}s:"
3824     eval list=\$$(toupper $type)_LIST
3825     print_enabled '_*' $list | sort | pr -r -3 -t
3826     echo
3827 done
3828
3829 license="LGPL version 2.1 or later"
3830 if enabled nonfree; then
3831     license="nonfree and unredistributable"
3832 elif enabled gplv3; then
3833     license="GPL version 3 or later"
3834 elif enabled lgplv3; then
3835     license="LGPL version 3 or later"
3836 elif enabled gpl; then
3837     license="GPL version 2 or later"
3838 fi
3839
3840 echo "License: $license"
3841
3842 echo "Creating config.mak and config.h..."
3843
3844 test -e Makefile || $ln_s "$source_path/Makefile" .
3845
3846 enabled stripping || strip="echo skipping strip"
3847
3848 config_files="$TMPH config.mak"
3849
3850 cat > config.mak <<EOF
3851 # Automatically generated by configure - do not modify!
3852 ifndef FFMPEG_CONFIG_MAK
3853 FFMPEG_CONFIG_MAK=1
3854 FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION
3855 prefix=$prefix
3856 LIBDIR=\$(DESTDIR)$libdir
3857 SHLIBDIR=\$(DESTDIR)$shlibdir
3858 INCDIR=\$(DESTDIR)$incdir
3859 BINDIR=\$(DESTDIR)$bindir
3860 DATADIR=\$(DESTDIR)$datadir
3861 MANDIR=\$(DESTDIR)$mandir
3862 SRC_PATH=$source_path
3863 ifndef MAIN_MAKEFILE
3864 SRC_PATH:=\$(SRC_PATH:.%=..%)
3865 endif
3866 CC_IDENT=$cc_ident
3867 ARCH=$arch
3868 CC=$cc
3869 CXX=$cxx
3870 AS=$as
3871 LD=$ld
3872 DEPCC=$dep_cc
3873 DEPCCFLAGS=$DEPCCFLAGS \$(CPPFLAGS)
3874 DEPAS=$as
3875 DEPASFLAGS=$DEPASFLAGS \$(CPPFLAGS)
3876 YASM=$yasmexe
3877 YASMDEP=$yasmexe
3878 AR=$ar
3879 RANLIB=$ranlib
3880 CP=cp -p
3881 LN_S=$ln_s
3882 STRIP=$strip
3883 CPPFLAGS=$CPPFLAGS
3884 CFLAGS=$CFLAGS
3885 CXXFLAGS=$CXXFLAGS
3886 ASFLAGS=$ASFLAGS
3887 AS_O=$AS_O
3888 CC_O=$CC_O
3889 CXX_O=$CXX_O
3890 LD_O=$LD_O
3891 LDFLAGS=$LDFLAGS
3892 FFSERVERLDFLAGS=$FFSERVERLDFLAGS
3893 SHFLAGS=$SHFLAGS
3894 YASMFLAGS=$YASMFLAGS
3895 BUILDSUF=$build_suffix
3896 PROGSSUF=$progs_suffix
3897 FULLNAME=$FULLNAME
3898 LIBPREF=$LIBPREF
3899 LIBSUF=$LIBSUF
3900 LIBNAME=$LIBNAME
3901 SLIBPREF=$SLIBPREF
3902 SLIBSUF=$SLIBSUF
3903 EXESUF=$EXESUF
3904 EXTRA_VERSION=$extra_version
3905 CCDEP=$CCDEP
3906 CXXDEP=$CXXDEP
3907 CCDEP_FLAGS=$CCDEP_FLAGS
3908 ASDEP=$ASDEP
3909 ASDEP_FLAGS=$ASDEP_FLAGS
3910 CC_DEPFLAGS=$CC_DEPFLAGS
3911 AS_DEPFLAGS=$AS_DEPFLAGS
3912 HOSTCC=$host_cc
3913 HOSTCFLAGS=$host_cflags
3914 HOSTEXESUF=$HOSTEXESUF
3915 HOSTLDFLAGS=$host_ldflags
3916 HOSTLIBS=$host_libs
3917 DEPHOSTCC=$host_cc
3918 DEPHOSTCCFLAGS=$DEPHOSTCCFLAGS \$(HOSTCCFLAGS)
3919 HOSTCCDEP=$HOSTCCDEP
3920 HOSTCCDEP_FLAGS=$HOSTCCDEP_FLAGS
3921 HOSTCC_DEPFLAGS=$HOSTCC_DEPFLAGS
3922 HOSTCC_O=$HOSTCC_O
3923 TARGET_EXEC=$target_exec
3924 TARGET_PATH=$target_path
3925 SDL_LIBS=$sdl_libs
3926 SDL_CFLAGS=$sdl_cflags
3927 LIB_INSTALL_EXTRA_CMD=$LIB_INSTALL_EXTRA_CMD
3928 EXTRALIBS=$extralibs
3929 INSTALL=$install
3930 LIBTARGET=${LIBTARGET}
3931 SLIBNAME=${SLIBNAME}
3932 SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}
3933 SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}
3934 SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}
3935 SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}
3936 SLIB_INSTALL_NAME=${SLIB_INSTALL_NAME}
3937 SLIB_INSTALL_LINKS=${SLIB_INSTALL_LINKS}
3938 SLIB_INSTALL_EXTRA_LIB=${SLIB_INSTALL_EXTRA_LIB}
3939 SLIB_INSTALL_EXTRA_SHLIB=${SLIB_INSTALL_EXTRA_SHLIB}
3940 SAMPLES:=${samples:-\$(FATE_SAMPLES)}
3941 NOREDZONE_FLAGS=$noredzone_flags
3942 EOF
3943
3944 get_version(){
3945     lcname=$1
3946     name=$(toupper $lcname)
3947     file=$source_path/$lcname/version.h
3948     eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
3949     eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
3950     eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
3951     eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
3952 }
3953
3954 get_version_old(){
3955     name=$1
3956     file=$source_path/$2
3957 # This condition will be removed when we stop supporting old libpostproc versions
3958 if ! test "$name" = LIBPOSTPROC || test "$postproc_version" = current; then
3959     eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
3960     eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
3961 fi
3962     lcname=$(tolower $name)
3963     eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
3964     eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
3965 }
3966
3967 get_version_old LIBPOSTPROC libpostproc/postprocess.h
3968 get_version_old LIBSWRESAMPLE libswresample/swresample.h
3969
3970 get_version libavcodec
3971 get_version libavdevice
3972 get_version libavfilter
3973 get_version libavformat
3974 get_version libavresample
3975 get_version libavutil
3976 get_version libswscale
3977
3978 cat > $TMPH <<EOF
3979 /* Automatically generated by configure - do not modify! */
3980 #ifndef FFMPEG_CONFIG_H
3981 #define FFMPEG_CONFIG_H
3982 #define FFMPEG_CONFIGURATION "$(c_escape $FFMPEG_CONFIGURATION)"
3983 #define FFMPEG_LICENSE "$(c_escape $license)"
3984 #define FFMPEG_DATADIR "$(eval c_escape $datadir)"
3985 #define AVCONV_DATADIR "$(eval c_escape $datadir)"
3986 #define CC_IDENT "$(c_escape ${cc_ident:-Unknown compiler})"
3987 #define av_restrict $_restrict
3988 #define EXTERN_PREFIX "${extern_prefix}"
3989 #define EXTERN_ASM ${extern_prefix}
3990 #define SLIBSUF "$SLIBSUF"
3991 EOF
3992
3993 test -n "$assert_level" &&
3994     echo "#define ASSERT_LEVEL $assert_level" >>$TMPH
3995
3996 test -n "$malloc_prefix" &&
3997     echo "#define MALLOC_PREFIX $malloc_prefix" >>$TMPH
3998
3999 if enabled yasm; then
4000     append config_files $TMPASM
4001     printf '' >$TMPASM
4002 fi
4003
4004 print_config ARCH_   "$config_files" $ARCH_LIST
4005 print_config HAVE_   "$config_files" $HAVE_LIST
4006 print_config CONFIG_ "$config_files" $CONFIG_LIST       \
4007                                      $CONFIG_EXTRA      \
4008                                      $ALL_COMPONENTS    \
4009
4010 cat >>config.mak <<EOF
4011 LAVF_FATE_TESTS=$(print_enabled -n _test $LAVF_FATE_TESTS)
4012 LAVF_TESTS=$(print_enabled   -n _test $LAVF_TESTS)
4013 LAVFI_TESTS=$(print_enabled  -n _test $LAVFI_TESTS)
4014 SEEK_TESTS=$(print_enabled   -n _test $SEEK_TESTS)
4015 EOF
4016
4017 echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
4018 echo "endif # FFMPEG_CONFIG_MAK" >> config.mak