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