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