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