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