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