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