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