Merge remote-tracking branch 'qatar/master'
[ffmpeg.git] / configure
1 #!/bin/sh
2 #
3 # FFmpeg configure script
4 #
5 # Copyright (c) 2000-2002 Fabrice Bellard
6 # Copyright (c) 2005-2008 Diego Biurrun
7 # Copyright (c) 2005-2008 Mans Rullgard
8 #
9
10 # Prevent locale nonsense from breaking basic text processing.
11 LC_ALL=C
12 export LC_ALL
13
14 # make sure we are running under a compatible shell
15 # try to make this part work with most shells
16
17 try_exec(){
18     echo "Trying shell $1"
19     type "$1" > /dev/null 2>&1 && exec "$@"
20 }
21
22 unset foo
23 (: ${foo%%bar}) 2> /dev/null
24 E1="$?"
25
26 (: ${foo?}) 2> /dev/null
27 E2="$?"
28
29 if test "$E1" != 0 || test "$E2" = 0; then
30     echo "Broken shell detected.  Trying alternatives."
31     export FF_CONF_EXEC
32     if test "0$FF_CONF_EXEC" -lt 1; then
33         FF_CONF_EXEC=1
34         try_exec bash "$0" "$@"
35     fi
36     if test "0$FF_CONF_EXEC" -lt 2; then
37         FF_CONF_EXEC=2
38         try_exec ksh "$0" "$@"
39     fi
40     if test "0$FF_CONF_EXEC" -lt 3; then
41         FF_CONF_EXEC=3
42         try_exec /usr/xpg4/bin/sh "$0" "$@"
43     fi
44     echo "No compatible shell script interpreter found."
45     echo "This configure script requires a POSIX-compatible shell"
46     echo "such as bash or ksh."
47     echo "THIS IS NOT A BUG IN FFMPEG, DO NOT REPORT IT AS SUCH."
48     echo "Instead, install a working POSIX-compatible shell."
49     echo "Disabling this configure test will create a broken FFmpeg."
50     if test "$BASH_VERSION" = '2.04.0(1)-release'; then
51         echo "This bash version ($BASH_VERSION) is broken on your platform."
52         echo "Upgrade to a later version if available."
53     fi
54     exit 1
55 fi
56
57 test -d /usr/xpg4/bin && PATH=/usr/xpg4/bin:$PATH
58
59 show_help(){
60     cat <<EOF
61 Usage: configure [options]
62 Options: [defaults in brackets after descriptions]
63
64 Help options:
65   --help                   print this message
66   --list-decoders          show all available decoders
67   --list-encoders          show all available encoders
68   --list-hwaccels          show all available hardware accelerators
69   --list-demuxers          show all available demuxers
70   --list-muxers            show all available muxers
71   --list-parsers           show all available parsers
72   --list-protocols         show all available protocols
73   --list-bsfs              show all available bitstream filters
74   --list-indevs            show all available input devices
75   --list-outdevs           show all available output devices
76   --list-filters           show all available filters
77
78 Standard options:
79   --logfile=FILE           log tests and output to FILE [config.log]
80   --disable-logging        do not log configure debug information
81   --fatal-warnings         fail if any configure warning is generated
82   --prefix=PREFIX          install in PREFIX [$prefix]
83   --bindir=DIR             install binaries in DIR [PREFIX/bin]
84   --datadir=DIR            install data files in DIR [PREFIX/share/ffmpeg]
85   --libdir=DIR             install libs in DIR [PREFIX/lib]
86   --shlibdir=DIR           install shared libs in DIR [PREFIX/lib]
87   --incdir=DIR             install includes in DIR [PREFIX/include]
88   --mandir=DIR             install man page in DIR [PREFIX/share/man]
89
90 Licensing options:
91   --enable-gpl             allow use of GPL code, the resulting libs
92                            and binaries will be under GPL [no]
93   --enable-version3        upgrade (L)GPL to version 3 [no]
94   --enable-nonfree         allow use of nonfree code, the resulting libs
95                            and binaries will be unredistributable [no]
96
97 Configuration options:
98   --disable-static         do not build static libraries [no]
99   --enable-shared          build shared libraries [no]
100   --enable-small           optimize for size instead of speed
101   --disable-runtime-cpudetect disable detecting cpu capabilities at runtime (smaller binary)
102   --enable-gray            enable full grayscale support (slower color)
103   --disable-swscale-alpha  disable alpha channel support in swscale
104
105 Program options:
106   --disable-programs       do not build command line programs
107   --disable-ffmpeg         disable ffmpeg build
108   --disable-ffplay         disable ffplay build
109   --disable-ffprobe        disable ffprobe build
110   --disable-ffserver       disable ffserver build
111
112 Documentation options:
113   --disable-doc            do not build documentation
114   --disable-htmlpages      do not build HTML documentation pages
115   --disable-manpages       do not build man documentation pages
116   --disable-podpages       do not build POD documentation pages
117   --disable-txtpages       do not build text documentation pages
118
119 Component options:
120   --disable-avdevice       disable libavdevice build
121   --disable-avcodec        disable libavcodec build
122   --disable-avformat       disable libavformat build
123   --disable-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                     amdfam10|barcelona|bdver*) echo -xarch=sse4_1        ;;
2462                     athlon-4|athlon-[mx]p)    echo -xarch=ssea           ;;
2463                     k8|opteron|athlon64|athlon-fx)
2464                                               echo -xarch=sse2a          ;;
2465                     athlon*)                  echo -xarch=pentium_proa   ;;
2466                 esac
2467                 ;;
2468             -std=c99)             echo -xc99              ;;
2469             -fomit-frame-pointer) echo -xregs=frameptr    ;;
2470             -fPIC)                echo -KPIC -xcode=pic32 ;;
2471             -W*,*)                echo $flag              ;;
2472             -f*-*|-W*)                                    ;;
2473             *)                    echo $flag              ;;
2474         esac
2475     done
2476 }
2477
2478 tms470_flags(){
2479     for flag; do
2480         case $flag in
2481             -march=*|-mcpu=*)
2482                 case "${flag#*=}" in
2483                     armv7-a|cortex-a*)      echo -mv=7a8 ;;
2484                     armv7-r|cortex-r*)      echo -mv=7r4 ;;
2485                     armv7-m|cortex-m*)      echo -mv=7m3 ;;
2486                     armv6*|arm11*)          echo -mv=6   ;;
2487                     armv5*e|arm[79]*e*|arm9[24]6*|arm96*|arm102[26])
2488                                             echo -mv=5e  ;;
2489                     armv4*|arm7*|arm9[24]*) echo -mv=4   ;;
2490                 esac
2491                 ;;
2492             -mfpu=neon)     echo --float_support=vfpv3 --neon ;;
2493             -mfpu=vfp)      echo --float_support=vfpv2        ;;
2494             -mfpu=vfpv3)    echo --float_support=vfpv3        ;;
2495             -mfpu=vfpv3-d16) echo --float_support=vfpv3d16    ;;
2496             -msoft-float)   echo --float_support=vfplib       ;;
2497             -O[0-3]|-mf=*)  echo $flag                        ;;
2498             -g)             echo -g -mn                       ;;
2499             -pds=*)         echo $flag                        ;;
2500             -D*|-I*)        echo $flag                        ;;
2501             --gcc|--abi=*)  echo $flag                        ;;
2502             -me)            echo $flag                        ;;
2503         esac
2504     done
2505 }
2506
2507 probe_cc(){
2508     pfx=$1
2509     _cc=$2
2510
2511     unset _type _ident _cc_c _cc_e _cc_o _flags _cflags
2512     unset _ld_o _ldflags _ld_lib _ld_path
2513     unset _depflags _DEPCMD _DEPFLAGS
2514     _flags_filter=echo
2515
2516     if $_cc -v 2>&1 | grep -q '^gcc.*LLVM'; then
2517         _type=llvm_gcc
2518         gcc_extra_ver=$(expr "$($_cc --version | head -n1)" : '.*\((.*)\)')
2519         _ident="llvm-gcc $($_cc -dumpversion) $gcc_extra_ver"
2520         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2521         _cflags_speed='-O3'
2522         _cflags_size='-Os'
2523     elif $_cc -v 2>&1 | grep -qi ^gcc; then
2524         _type=gcc
2525         gcc_version=$($_cc --version | head -n1)
2526         gcc_basever=$($_cc -dumpversion)
2527         gcc_pkg_ver=$(expr "$gcc_version" : '[^ ]* \(([^)]*)\)')
2528         gcc_ext_ver=$(expr "$gcc_version" : ".*$gcc_pkg_ver $gcc_basever \\(.*\\)")
2529         _ident=$(cleanws "gcc $gcc_basever $gcc_pkg_ver $gcc_ext_ver")
2530         if ! $_cc -dumpversion | grep -q '^2\.'; then
2531             _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2532         fi
2533         _cflags_speed='-O3'
2534         _cflags_size='-Os'
2535     elif $_cc --version 2>/dev/null | grep -q Intel; then
2536         _type=icc
2537         _ident=$($_cc --version | head -n1)
2538         _depflags='-MMD'
2539         _cflags_speed='-O3'
2540         _cflags_size='-Os'
2541         _cflags_noopt='-O1'
2542     elif $_cc -v 2>&1 | grep -q xlc; then
2543         _type=xlc
2544         _ident=$($_cc -qversion 2>/dev/null | head -n1)
2545         _cflags_speed='-O5'
2546         _cflags_size='-O5 -qcompact'
2547     elif $_cc -V 2>/dev/null | grep -q Compaq; then
2548         _type=ccc
2549         _ident=$($_cc -V | head -n1 | cut -d' ' -f1-3)
2550         _DEPFLAGS='-M'
2551         _cflags_speed='-fast'
2552         _cflags_size='-O1'
2553         _flags_filter=ccc_flags
2554     elif $_cc --vsn 2>/dev/null | grep -q "ARM C/C++ Compiler"; then
2555         test -d "$sysroot" || die "No valid sysroot specified."
2556         _type=armcc
2557         _ident=$($_cc --vsn | head -n1)
2558         armcc_conf="$PWD/armcc.conf"
2559         $_cc --arm_linux_configure                 \
2560              --arm_linux_config_file="$armcc_conf" \
2561              --configure_sysroot="$sysroot"        \
2562              --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
2563              die "Error creating armcc configuration file."
2564         $_cc --vsn | grep -q RVCT && armcc_opt=rvct || armcc_opt=armcc
2565         _flags="--arm_linux_config_file=$armcc_conf --translate_gcc"
2566         as_default="${cross_prefix}gcc"
2567         _depflags='-MMD'
2568         _cflags_speed='-O3'
2569         _cflags_size='-Os'
2570     elif $_cc -version 2>/dev/null | grep -Eq 'TMS470|TI ARM'; then
2571         _type=tms470
2572         _ident=$($_cc -version | head -n1 | tr -s ' ')
2573         _flags='--gcc --abi=eabi -me'
2574         _cc_e='-ppl -fe=$@'
2575         _cc_o='-fe=$@'
2576         _depflags='-ppa -ppd=$(@:.o=.d)'
2577         _cflags_speed='-O3 -mf=5'
2578         _cflags_size='-O3 -mf=2'
2579         _flags_filter=tms470_flags
2580     elif $_cc -v 2>&1 | grep -q clang; then
2581         _type=clang
2582         _ident=$($_cc --version | head -n1)
2583         _depflags='-MMD'
2584         _cflags_speed='-O3'
2585         _cflags_size='-Os'
2586     elif $_cc -V 2>&1 | grep -q Sun; then
2587         _type=suncc
2588         _ident=$($_cc -V 2>&1 | head -n1 | cut -d' ' -f 2-)
2589         _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "1s,^.*: ,$@: ," -e "\$$!s,\$$, \\\," -e "1!s,^.*: , ," > $(@:.o=.d)'
2590         _DEPFLAGS='-xM1 -xc99'
2591         _ldflags='-std=c99'
2592         _cflags_speed='-O5'
2593         _cflags_size='-O5 -xspace'
2594         _flags_filter=suncc_flags
2595     elif $_cc -v 2>&1 | grep -q 'PathScale\|Path64'; then
2596         _type=pathscale
2597         _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
2598         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2599         _cflags_speed='-O2'
2600         _cflags_size='-Os'
2601         _flags_filter='filter_out -Wdisabled-optimization'
2602     elif $_cc -v 2>&1 | grep -q Open64; then
2603         _type=open64
2604         _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
2605         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2606         _cflags_speed='-O2'
2607         _cflags_size='-Os'
2608         _flags_filter='filter_out -Wdisabled-optimization|-Wtype-limits|-fno-signed-zeros'
2609     elif $_cc -V 2>&1 | grep -q Portland; then
2610         _type=pgi
2611         _ident="PGI $($_cc -V 2>&1 | awk '/^pgcc/ { print $2; exit }')"
2612         opt_common='-alias=ansi -Mdse -Mlre -Mpre'
2613         _cflags_speed="-O3 -Mautoinline -Munroll=c:4 $opt_common"
2614         _cflags_size="-O2 -Munroll=c:1 $opt_common"
2615         _cflags_noopt="-O1"
2616         _flags_filter=pgi_flags
2617     elif $_cc 2>&1 | grep -q Microsoft; then
2618         _type=msvc
2619         _ident=$($cc 2>&1 | head -n1)
2620         _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< 2>&1 | awk '\''/including/ { sub(/^.*file: */, ""); gsub(/\\/, "/"); if (!match($$0, / /)) print "$@:", $$0 }'\'' > $(@:.o=.d)'
2621         _DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -showIncludes -Zs'
2622         _cflags_speed="-O2"
2623         _cflags_size="-O1"
2624         # Nonstandard output options, to avoid msys path conversion issues, relies on wrapper to remap it
2625         if $_cc 2>&1 | grep -q Linker; then
2626             _ld_o='-out $@'
2627         else
2628             _ld_o='-Fe$@'
2629         fi
2630         _cc_o='-Fo $@'
2631         _cc_e='-P -Fi $@'
2632         _flags_filter=msvc_flags
2633         _ld_lib='lib%.a'
2634         _ld_path='-libpath:'
2635         _flags='-nologo'
2636         _cflags='-D_USE_MATH_DEFINES -Dinline=__inline -FIstdlib.h -Dstrtoll=_strtoi64'
2637         if [ $pfx = hostcc ]; then
2638             append _cflags -Dsnprintf=_snprintf
2639         fi
2640         disable stripping
2641     fi
2642
2643     eval ${pfx}_type=\$_type
2644     eval ${pfx}_ident=\$_ident
2645 }
2646
2647 set_ccvars(){
2648     eval ${1}_C=\${_cc_c-\${${1}_C}}
2649     eval ${1}_E=\${_cc_e-\${${1}_E}}
2650     eval ${1}_O=\${_cc_o-\${${1}_O}}
2651
2652     if [ -n "$_depflags" ]; then
2653         eval ${1}_DEPFLAGS=\$_depflags
2654     else
2655         eval ${1}DEP=\${_DEPCMD:-\$DEPCMD}
2656         eval ${1}DEP_FLAGS=\${_DEPFLAGS:-\$DEPFLAGS}
2657         eval DEP${1}FLAGS=\$_flags
2658     fi
2659 }
2660
2661 probe_cc cc "$cc"
2662 cflags_filter=$_flags_filter
2663 cflags_speed=$_cflags_speed
2664 cflags_size=$_cflags_size
2665 cflags_noopt=$_cflags_noopt
2666 add_cflags $_flags $_cflags
2667 cc_ldflags=$_ldflags
2668 set_ccvars CC
2669
2670 probe_cc hostcc "$host_cc"
2671 host_cflags_filter=$_flags_filter
2672 add_host_cflags  $_flags $_cflags
2673 set_ccvars HOSTCC
2674
2675 test -n "$cc_type" && enable $cc_type ||
2676     warn "Unknown C compiler $cc, unable to select optimal CFLAGS"
2677
2678 : ${as_default:=$cc}
2679 : ${dep_cc_default:=$cc}
2680 : ${ld_default:=$cc}
2681 : ${host_ld_default:=$host_cc}
2682 set_default ar as dep_cc ld host_ld
2683
2684 probe_cc as "$as"
2685 asflags_filter=$_flags_filter
2686 add_asflags $_flags $_cflags
2687 set_ccvars AS
2688
2689 probe_cc ld "$ld"
2690 ldflags_filter=$_flags_filter
2691 add_ldflags $_flags $_ldflags
2692 test "$cc_type" != "$ld_type" && add_ldflags $cc_ldflags
2693 LD_O=${_ld_o-$LD_O}
2694 LD_LIB=${_ld_lib-$LD_LIB}
2695 LD_PATH=${_ld_path-$LD_PATH}
2696
2697 probe_cc hostld "$host_ld"
2698 host_ldflags_filter=$_flags_filter
2699 add_host_ldflags $_flags $_ldflags
2700 HOSTLD_O=${_ld_o-$HOSTLD_O}
2701
2702 if [ -z "$CC_DEPFLAGS" ] && [ "$dep_cc" != "$cc" ]; then
2703     probe_cc depcc "$dep_cc"
2704     CCDEP=${_DEPCMD:-$DEPCMD}
2705     CCDEP_FLAGS=${_DEPFLAGS:=$DEPFLAGS}
2706     DEPCCFLAGS=$_flags
2707 fi
2708
2709 if $ar 2>&1 | grep -q Microsoft; then
2710     arflags="-nologo"
2711     ar_o='-out:$@'
2712 elif $ar 2>&1 | grep -q 'Texas Instruments'; then
2713     arflags="rq"
2714     ar_o='$@'
2715 else
2716     arflags="rc"
2717     ar_o='$@'
2718 fi
2719
2720 add_cflags $extra_cflags
2721 add_cxxflags $extra_cxxflags
2722 add_asflags $extra_cflags
2723
2724 if test -n "$sysroot"; then
2725     case "$cc_type" in
2726         gcc|llvm_gcc|clang)
2727             add_cppflags --sysroot="$sysroot"
2728             add_ldflags --sysroot="$sysroot"
2729         ;;
2730         tms470)
2731             add_cppflags -I"$sysinclude"
2732             add_ldflags  --sysroot="$sysroot"
2733         ;;
2734     esac
2735 fi
2736
2737 if test "$cpu" = host; then
2738     enabled cross_compile && die "--cpu=host makes no sense when cross-compiling."
2739
2740     case "$cc_type" in
2741         gcc|llvm_gcc)
2742             check_native(){
2743                 $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
2744                 sed -n "/cc1.*$1=/{
2745                             s/.*$1=\\([^ ]*\\).*/\\1/
2746                             p
2747                             q
2748                         }" $TMPE
2749             }
2750             cpu=$(check_native -march || check_native -mcpu)
2751         ;;
2752     esac
2753
2754     test "${cpu:-host}" = host && die "--cpu=host not supported with compiler $cc"
2755 fi
2756
2757 # Deal with common $arch aliases
2758 case "$arch" in
2759     aarch64|arm64)
2760         arch="aarch64"
2761     ;;
2762     arm*|iPad*)
2763         arch="arm"
2764     ;;
2765     mips*|IP*)
2766         arch="mips"
2767     ;;
2768     parisc*|hppa*)
2769         arch="parisc"
2770     ;;
2771     "Power Macintosh"|ppc*|powerpc*)
2772         arch="ppc"
2773     ;;
2774     s390|s390x)
2775         arch="s390"
2776     ;;
2777     sh4|sh)
2778         arch="sh4"
2779     ;;
2780     sun4u|sparc*)
2781         arch="sparc"
2782     ;;
2783     tilegx|tile-gx)
2784         arch="tilegx"
2785     ;;
2786     i[3-6]86|i86pc|BePC|x86pc|x86_64|x86_32|amd64)
2787         arch="x86"
2788     ;;
2789 esac
2790
2791 is_in $arch $ARCH_LIST || warn "unknown architecture $arch"
2792 enable $arch
2793
2794 # Add processor-specific flags
2795 if test "$cpu" = generic; then
2796     : do nothing
2797
2798 elif enabled aarch64; then
2799
2800     case $cpu in
2801         armv*)
2802             cpuflags="-march=$cpu"
2803         ;;
2804         *)
2805             cpuflags="-mcpu=$cpu"
2806         ;;
2807     esac
2808
2809 elif enabled alpha; then
2810
2811     cpuflags="-mcpu=$cpu"
2812
2813 elif enabled arm; then
2814
2815     case $cpu in
2816         armv*)
2817             cpuflags="-march=$cpu"
2818             subarch=$(echo $cpu | sed 's/[^a-z0-9]//g')
2819         ;;
2820         *)
2821             cpuflags="-mcpu=$cpu"
2822             case $cpu in
2823                 cortex-a*)                               subarch=armv7a  ;;
2824                 cortex-r*)                               subarch=armv7r  ;;
2825                 cortex-m*)                 enable thumb; subarch=armv7m  ;;
2826                 arm11*)                                  subarch=armv6   ;;
2827                 arm[79]*e*|arm9[24]6*|arm96*|arm102[26]) subarch=armv5te ;;
2828                 armv4*|arm7*|arm9[24]*)                  subarch=armv4   ;;
2829             esac
2830         ;;
2831     esac
2832
2833 elif enabled avr32; then
2834
2835     case $cpu in
2836         ap7[02]0[0-2])
2837             subarch="avr32_ap"
2838             cpuflags="-mpart=$cpu"
2839         ;;
2840         ap)
2841             subarch="avr32_ap"
2842             cpuflags="-march=$cpu"
2843         ;;
2844         uc3[ab]*)
2845             subarch="avr32_uc"
2846             cpuflags="-mcpu=$cpu"
2847         ;;
2848         uc)
2849             subarch="avr32_uc"
2850             cpuflags="-march=$cpu"
2851         ;;
2852     esac
2853
2854 elif enabled bfin; then
2855
2856     cpuflags="-mcpu=$cpu"
2857
2858 elif enabled mips; then
2859
2860     cpuflags="-march=$cpu"
2861
2862     case $cpu in
2863         24kc)
2864             disable mipsfpu
2865             disable mipsdspr1
2866             disable mipsdspr2
2867         ;;
2868         24kf*)
2869             disable mipsdspr1
2870             disable mipsdspr2
2871         ;;
2872         24kec|34kc|1004kc)
2873             disable mipsfpu
2874             disable mipsdspr2
2875         ;;
2876         24kef*|34kf*|1004kf*)
2877             disable mipsdspr2
2878         ;;
2879         74kc)
2880             disable mipsfpu
2881         ;;
2882     esac
2883
2884 elif enabled ppc; then
2885
2886     case $(tolower $cpu) in
2887         601|ppc601|powerpc601)
2888             cpuflags="-mcpu=601"
2889             disable altivec
2890         ;;
2891         603*|ppc603*|powerpc603*)
2892             cpuflags="-mcpu=603"
2893             disable altivec
2894         ;;
2895         604*|ppc604*|powerpc604*)
2896             cpuflags="-mcpu=604"
2897             disable altivec
2898         ;;
2899         g3|75*|ppc75*|powerpc75*)
2900             cpuflags="-mcpu=750"
2901             disable altivec
2902         ;;
2903         g4|745*|ppc745*|powerpc745*)
2904             cpuflags="-mcpu=7450"
2905         ;;
2906         74*|ppc74*|powerpc74*)
2907             cpuflags="-mcpu=7400"
2908         ;;
2909         g5|970|ppc970|powerpc970)
2910             cpuflags="-mcpu=970"
2911         ;;
2912         power[3-7]*)
2913             cpuflags="-mcpu=$cpu"
2914         ;;
2915         cell)
2916             cpuflags="-mcpu=cell"
2917             enable ldbrx
2918         ;;
2919         e500mc)
2920             cpuflags="-mcpu=e500mc"
2921             disable altivec
2922         ;;
2923         e500v2)
2924             cpuflags="-mcpu=8548 -mhard-float -mfloat-gprs=double"
2925             disable altivec
2926         ;;
2927         e500)
2928             cpuflags="-mcpu=8540 -mhard-float"
2929             disable altivec
2930         ;;
2931     esac
2932
2933 elif enabled sparc; then
2934
2935     case $cpu in
2936         cypress|f93[04]|tsc701|sparcl*|supersparc|hypersparc|niagara|v[789])
2937             cpuflags="-mcpu=$cpu"
2938             disable vis
2939         ;;
2940         ultrasparc*|niagara[234])
2941             cpuflags="-mcpu=$cpu"
2942         ;;
2943     esac
2944
2945 elif enabled x86; then
2946
2947     case $cpu in
2948         i[345]86|pentium)
2949             cpuflags="-march=$cpu"
2950             disable mmx
2951         ;;
2952         # targets that do NOT support conditional mov (cmov)
2953         pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
2954             cpuflags="-march=$cpu"
2955             disable cmov
2956         ;;
2957         # targets that do support conditional mov (cmov)
2958         i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64*|k8*|opteron*|athlon-fx|core2|amdfam10|barcelona|atom|bdver*)
2959             cpuflags="-march=$cpu"
2960             enable cmov
2961             enable fast_cmov
2962         ;;
2963         # targets that do support conditional mov but on which it's slow
2964         pentium4|pentium4m|prescott|nocona)
2965             cpuflags="-march=$cpu"
2966             enable cmov
2967             disable fast_cmov
2968         ;;
2969     esac
2970
2971 fi
2972
2973 add_cflags $cpuflags
2974 add_asflags $cpuflags
2975
2976 # compiler sanity check
2977 check_exec <<EOF
2978 int main(void){ return 0; }
2979 EOF
2980 if test "$?" != 0; then
2981     echo "$cc is unable to create an executable file."
2982     if test -z "$cross_prefix" && ! enabled cross_compile ; then
2983         echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
2984         echo "Only do this if you know what cross compiling means."
2985     fi
2986     die "C compiler test failed."
2987 fi
2988
2989 add_cppflags -D_ISOC99_SOURCE
2990 add_cxxflags -D__STDC_CONSTANT_MACROS
2991 check_cflags -std=c99
2992 check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
2993 #include <stdlib.h>
2994 EOF
2995 check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
2996 #include <stdlib.h>
2997 EOF
2998
2999 check_host_cflags -std=c99
3000 check_host_cflags -Wall
3001
3002 check_64bit(){
3003     arch32=$1
3004     arch64=$2
3005     expr=$3
3006     check_code cc "" "int test[2*($expr) - 1]" &&
3007         subarch=$arch64 || subarch=$arch32
3008 }
3009
3010 case "$arch" in
3011     alpha|ia64)
3012         spic=$shared
3013     ;;
3014     mips)
3015         check_64bit mips mips64 '_MIPS_SIM > 1'
3016         spic=$shared
3017     ;;
3018     parisc)
3019         check_64bit parisc parisc64 'sizeof(void *) > 4'
3020         spic=$shared
3021     ;;
3022     ppc)
3023         check_64bit ppc ppc64 'sizeof(void *) > 4'
3024     ;;
3025     sparc)
3026         check_64bit sparc sparc64 'sizeof(void *) > 4'
3027         spic=$shared
3028     ;;
3029     x86)
3030         check_64bit x86_32 x86_64 'sizeof(void *) > 4'
3031         if test "$subarch" = "x86_64"; then
3032             spic=$shared
3033         fi
3034     ;;
3035     ppc)
3036         check_cc <<EOF && subarch="ppc64"
3037         int test[(int)sizeof(char*) - 7];
3038 EOF
3039     ;;
3040 esac
3041
3042 enable $subarch
3043 enabled spic && enable pic
3044
3045 # OS specific
3046 case $target_os in
3047     haiku)
3048         prefix_default="/boot/common"
3049         network_extralibs="-lnetwork"
3050         host_libs=
3051         ;;
3052     sunos)
3053         FFSERVERLDFLAGS=""
3054         SHFLAGS='-shared -Wl,-h,$$(@F)'
3055         enabled x86 && SHFLAGS="-mimpure-text $SHFLAGS"
3056         network_extralibs="-lsocket -lnsl"
3057         add_cppflags -D__EXTENSIONS__ -D_XOPEN_SOURCE=600
3058         # When using suncc to build, the Solaris linker will mark
3059         # an executable with each instruction set encountered by
3060         # the Solaris assembler.  As our libraries contain their own
3061         # guards for processor-specific code, instead suppress
3062         # generation of the HWCAPS ELF section on Solaris x86 only.
3063         enabled_all suncc x86 && echo "hwcap_1 = OVERRIDE;" > mapfile && add_ldflags -Wl,-M,mapfile
3064         nm_default='nm -P -g'
3065         ;;
3066     netbsd)
3067         disable symver
3068         oss_indev_extralibs="-lossaudio"
3069         oss_outdev_extralibs="-lossaudio"
3070         enabled gcc || check_ldflags -Wl,-zmuldefs
3071         ;;
3072     openbsd|bitrig)
3073         # On OpenBSD 4.5. the compiler does not use PIC unless
3074         # explicitly using -fPIC. FFmpeg builds fine without PIC,
3075         # however the generated executable will not do anything
3076         # (simply quits with exit-code 1, no crash, no output).
3077         # Thus explicitly enable PIC here.
3078         enable pic
3079         disable symver
3080         SHFLAGS='-shared'
3081         SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBVERSION)'
3082         SLIB_INSTALL_LINKS=
3083         oss_indev_extralibs="-lossaudio"
3084         oss_outdev_extralibs="-lossaudio"
3085         ;;
3086     dragonfly)
3087         disable symver
3088         ;;
3089     freebsd)
3090         ;;
3091     bsd/os)
3092         add_extralibs -lpoll -lgnugetopt
3093         strip="strip -d"
3094         ;;
3095     darwin)
3096         gas="gas-preprocessor.pl $cc"
3097         enabled ppc && add_asflags -force_cpusubtype_ALL
3098         SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR)'
3099         enabled x86_32 && append SHFLAGS -Wl,-read_only_relocs,suppress
3100         strip="${strip} -x"
3101         add_ldflags -Wl,-dynamic,-search_paths_first
3102         SLIBSUF=".dylib"
3103         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
3104         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
3105         FFSERVERLDFLAGS=-Wl,-bind_at_load
3106         objformat="macho"
3107         enabled x86_64 && objformat="macho64"
3108         enabled_any pic shared ||
3109             { check_cflags -mdynamic-no-pic && add_asflags -mdynamic-no-pic; }
3110         ;;
3111     mingw32*)
3112         if test $target_os = "mingw32ce"; then
3113             disable network
3114         else
3115             target_os=mingw32
3116         fi
3117         LIBTARGET=i386
3118         if enabled x86_64; then
3119             LIBTARGET="i386:x86-64"
3120         elif enabled arm; then
3121             LIBTARGET=arm-wince
3122         fi
3123         shlibdir_default="$bindir_default"
3124         SLIBPREF=""
3125         SLIBSUF=".dll"
3126         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
3127         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
3128         dlltool="${cross_prefix}dlltool"
3129         if check_cmd lib.exe -list; then
3130             SLIB_EXTRA_CMD='-lib.exe /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib)'
3131             if enabled x86_64; then
3132                 LIBTARGET=x64
3133             fi
3134         elif check_cmd $dlltool --version; then
3135             SLIB_EXTRA_CMD=-'$(DLLTOOL) -m $(LIBTARGET) -d $$(@:$(SLIBSUF)=.def) -l $(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib) -D $(SLIBNAME_WITH_MAJOR)'
3136         fi
3137         SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
3138         SLIB_INSTALL_LINKS=
3139         SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
3140         SLIB_INSTALL_EXTRA_LIB='lib$(SLIBNAME:$(SLIBSUF)=.dll.a) $(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
3141         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'
3142         objformat="win32"
3143         ranlib=:
3144         enable dos_paths
3145         add_cppflags -U__STRICT_ANSI__
3146         ;;
3147     win32|win64)
3148         if enabled shared; then
3149             # Link to the import library instead of the normal static library
3150             # for shared libs.
3151             LD_LIB='%.lib'
3152             # Cannot build shared and static libraries at the same time with
3153             # MSVC.
3154             disable static
3155         fi
3156         shlibdir_default="$bindir_default"
3157         SLIBPREF=""
3158         SLIBSUF=".dll"
3159         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
3160         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
3161         SLIB_CREATE_DEF_CMD='makedef $(SUBDIR)lib$(NAME).ver $(OBJS) > $$(@:$(SLIBSUF)=.def)'
3162         SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
3163         SLIB_INSTALL_LINKS=
3164         SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
3165         SLIB_INSTALL_EXTRA_LIB='$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
3166         SHFLAGS='-dll -def:$$(@:$(SLIBSUF)=.def) -implib:$(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib)'
3167         objformat="win32"
3168         ranlib=:
3169         enable dos_paths
3170         ;;
3171     cygwin*)
3172         target_os=cygwin
3173         shlibdir_default="$bindir_default"
3174         SLIBPREF="cyg"
3175         SLIBSUF=".dll"
3176         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
3177         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
3178         SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
3179         SLIB_INSTALL_LINKS=
3180         SLIB_INSTALL_EXTRA_LIB='lib$(FULLNAME).dll.a'
3181         SHFLAGS='-shared -Wl,--out-implib,$(SUBDIR)lib$(FULLNAME).dll.a'
3182         objformat="win32"
3183         enable dos_paths
3184         ;;
3185     *-dos|freedos|opendos)
3186         network_extralibs="-lsocket"
3187         objformat="coff"
3188         enable dos_paths
3189         add_cppflags -U__STRICT_ANSI__
3190         ;;
3191     linux)
3192         enable dv1394
3193         ;;
3194     irix*)
3195         target_os=irix
3196         ranlib="echo ignoring ranlib"
3197         ;;
3198     os/2*)
3199         strip="lxlite -CS"
3200         ln_s="cp -f"
3201         objformat="aout"
3202         add_cppflags -D_GNU_SOURCE
3203         add_ldflags -Zomf -Zbin-files -Zargs-wild -Zmap
3204         SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
3205         FFSERVERLDFLAGS=""
3206         LIBSUF="_s.a"
3207         SLIBPREF=""
3208         SLIBSUF=".dll"
3209         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
3210         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
3211         SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
3212             echo PROTMODE >> $(SUBDIR)$(NAME).def; \
3213             echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
3214             echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
3215             echo EXPORTS >> $(SUBDIR)$(NAME).def; \
3216             emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
3217         SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
3218             emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
3219         SLIB_INSTALL_EXTRA_LIB='$(LIBPREF)$(NAME)_dll.a $(LIBPREF)$(NAME)_dll.lib'
3220         enable dos_paths
3221         enable_weak os2threads
3222         ;;
3223     gnu/kfreebsd)
3224         add_cppflags -D_BSD_SOURCE
3225         ;;
3226     gnu)
3227         ;;
3228     qnx)
3229         add_cppflags -D_QNX_SOURCE
3230         network_extralibs="-lsocket"
3231         ;;
3232     symbian)
3233         SLIBSUF=".dll"
3234         enable dos_paths
3235         add_cflags --include=$sysinclude/gcce/gcce.h -fvisibility=default
3236         add_cppflags -D__GCCE__ -D__SYMBIAN32__ -DSYMBIAN_OE_POSIX_SIGNALS
3237         add_ldflags -Wl,--target1-abs,--no-undefined \
3238                     -Wl,-Ttext,0x80000,-Tdata,0x1000000 -shared \
3239                     -Wl,--entry=_E32Startup -Wl,-u,_E32Startup
3240         add_extralibs -l:eexe.lib -l:usrt2_2.lib -l:dfpaeabi.dso \
3241                       -l:drtaeabi.dso -l:scppnwdl.dso -lsupc++ -lgcc \
3242                       -l:libc.dso -l:libm.dso -l:euser.dso -l:libcrt0.lib
3243         ;;
3244     osf1)
3245         add_cppflags -D_OSF_SOURCE -D_POSIX_PII -D_REENTRANT
3246         FFSERVERLDFLAGS=
3247         ;;
3248     minix)
3249         ;;
3250     plan9)
3251         add_cppflags -D_C99_SNPRINTF_EXTENSION  \
3252                      -D_REENTRANT_SOURCE        \
3253                      -D_RESEARCH_SOURCE         \
3254                      -DFD_SETSIZE=96            \
3255                      -DHAVE_SOCK_OPTS
3256         add_compat strtod.o strtod=avpriv_strtod
3257         network_extralibs='-lbsd'
3258         exeobjs=compat/plan9/main.o
3259         disable ffserver
3260         ln_s='ln -s -f'
3261         cp_f='cp'
3262         ;;
3263     none)
3264         ;;
3265     *)
3266         die "Unknown OS '$target_os'."
3267         ;;
3268 esac
3269
3270 # determine libc flavour
3271
3272 if check_cpp_condition features.h "defined __UCLIBC__"; then
3273     libc_type=uclibc
3274     add_cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
3275 elif check_cpp_condition features.h "defined __GLIBC__"; then
3276     libc_type=glibc
3277     add_cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
3278 elif check_header _mingw.h; then
3279     libc_type=mingw
3280     check_cpp_condition _mingw.h \
3281         "defined (__MINGW64_VERSION_MAJOR) || (__MINGW32_MAJOR_VERSION > 3) || \
3282             (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
3283         die "ERROR: MinGW runtime version must be >= 3.15."
3284     if check_cpp_condition _mingw.h "defined(__MINGW64_VERSION_MAJOR) && \
3285             __MINGW64_VERSION_MAJOR < 3"; then
3286         add_compat msvcrt/snprintf.o
3287         add_cflags "-include $source_path/compat/msvcrt/snprintf.h"
3288     fi
3289 elif check_cpp_condition newlib.h "defined _NEWLIB_VERSION"; then
3290     libc_type=newlib
3291     add_cppflags -U__STRICT_ANSI__
3292 elif check_func_headers stdlib.h _get_doserrno; then
3293     libc_type=msvcrt
3294     add_compat strtod.o strtod=avpriv_strtod
3295     add_compat msvcrt/snprintf.o snprintf=avpriv_snprintf   \
3296                                  _snprintf=avpriv_snprintf  \
3297                                  vsnprintf=avpriv_vsnprintf
3298 elif check_cpp_condition stddef.h "defined __KLIBC__"; then
3299     libc_type=klibc
3300 fi
3301
3302 test -n "$libc_type" && enable $libc_type
3303
3304 # hacks for compiler/libc/os combinations
3305
3306 if enabled_all tms470 glibc; then
3307     CPPFLAGS="-I${source_path}/compat/tms470 ${CPPFLAGS}"
3308     add_cppflags -D__USER_LABEL_PREFIX__=
3309     add_cppflags -D__builtin_memset=memset
3310     add_cppflags -D__gnuc_va_list=va_list -D_VA_LIST_DEFINED
3311     add_cflags   -pds=48    # incompatible redefinition of macro
3312 fi
3313
3314 if enabled_all ccc glibc; then
3315     add_ldflags -Wl,-z,now  # calls to libots crash without this
3316 fi
3317
3318 esc(){
3319     echo "$*" | sed 's/%/%25/g;s/:/%3a/g'
3320 }
3321
3322 echo "config:$arch:$subarch:$cpu:$target_os:$(esc $cc_ident):$(esc $FFMPEG_CONFIGURATION)" >config.fate
3323
3324 check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable pic
3325
3326 set_default $PATHS_LIST
3327 set_default nm
3328
3329 # we need to build at least one lib type
3330 if ! enabled_any static shared; then
3331     cat <<EOF
3332 At least one library type must be built.
3333 Specify --enable-static to build the static libraries or --enable-shared to
3334 build the shared libraries as well. To only build the shared libraries specify
3335 --disable-static in addition to --enable-shared.
3336 EOF
3337     exit 1;
3338 fi
3339
3340 die_license_disabled() {
3341     enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
3342 }
3343
3344 die_license_disabled_gpl() {
3345     enabled $1 || { enabled $2 && die "$2 is incompatible with the gpl and --enable-$1 is not specified."; }
3346 }
3347
3348 die_license_disabled gpl libcdio
3349 die_license_disabled gpl libutvideo
3350 die_license_disabled gpl libx264
3351 die_license_disabled gpl libxavs
3352 die_license_disabled gpl libxvid
3353 die_license_disabled gpl x11grab
3354
3355 die_license_disabled nonfree libaacplus
3356 die_license_disabled nonfree libfaac
3357 enabled gpl && die_license_disabled_gpl nonfree libfdk_aac
3358 enabled gpl && die_license_disabled_gpl nonfree openssl
3359
3360 die_license_disabled version3 libopencore_amrnb
3361 die_license_disabled version3 libopencore_amrwb
3362 die_license_disabled version3 libvo_aacenc
3363 die_license_disabled version3 libvo_amrwbenc
3364
3365 enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
3366
3367 disabled optimizations || check_cflags -fomit-frame-pointer
3368
3369 enable_pic() {
3370     enable pic
3371     add_cppflags -DPIC
3372     add_cflags   -fPIC
3373     add_asflags  -fPIC
3374 }
3375
3376 enabled pic && enable_pic
3377
3378 check_cc <<EOF || die "Symbol mangling check failed."
3379 int ff_extern;
3380 EOF
3381 sym=$($nm $TMPO | awk '/ff_extern/{ print substr($0, match($0, /[^ \t]*ff_extern/)) }')
3382 extern_prefix=${sym%%ff_extern*}
3383
3384 check_cc <<EOF && enable_weak inline_asm
3385 void foo(void) { __asm__ volatile ("" ::); }
3386 EOF
3387
3388 _restrict=
3389 for restrict_keyword in restrict __restrict__ __restrict; do
3390     check_cc <<EOF && _restrict=$restrict_keyword && break
3391 void foo(char * $restrict_keyword p);
3392 EOF
3393 done
3394
3395 check_cc <<EOF && enable attribute_packed
3396 struct { int x; } __attribute__((packed)) x;
3397 EOF
3398
3399 check_cc <<EOF && enable attribute_may_alias
3400 union { int x; } __attribute__((may_alias)) x;
3401 EOF
3402
3403 check_cc <<EOF || die "endian test failed"
3404 unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
3405 EOF
3406 od -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
3407
3408 if enabled alpha; then
3409
3410     check_cflags -mieee
3411
3412 elif enabled arm; then
3413
3414     enabled thumb && check_cflags -mthumb || check_cflags -marm
3415     nogas=die
3416
3417     if     check_cpp_condition stddef.h "defined __ARM_PCS_VFP"; then
3418         enable vfp_args
3419     elif ! check_cpp_condition stddef.h "defined __ARM_PCS || defined __SOFTFP__"; then
3420         case "${cross_prefix:-$cc}" in
3421             *hardfloat*)         enable vfp_args;   fpabi=vfp ;;
3422             *) check_ld "cc" <<EOF && enable vfp_args && fpabi=vfp || fpabi=soft ;;
3423 __asm__ (".eabi_attribute 28, 1");
3424 int main(void) { return 0; }
3425 EOF
3426         esac
3427         warn "Compiler does not indicate floating-point ABI, guessing $fpabi."
3428     fi
3429
3430     enabled armv5te && check_inline_asm armv5te '"qadd r0, r0, r0"'
3431     enabled armv6   && check_inline_asm armv6   '"sadd16 r0, r0, r0"'
3432     enabled armv6t2 && check_inline_asm armv6t2 '"movt r0, #0"'
3433     enabled armvfp  && check_inline_asm armvfp  '"fadds s0, s0, s0"'
3434     enabled neon    && check_inline_asm neon    '"vadd.i16 q0, q0, q0"'
3435     enabled vfpv3   && check_inline_asm vfpv3   '"vmov.f32 s0, #1.0"'
3436
3437     check_inline_asm asm_mod_q '"add r0, %Q0, %R0" :: "r"((long long)0)'
3438     check_inline_asm asm_mod_y '"vmul.i32 d0, d0, %y0" :: "x"(0)'
3439
3440     enabled_all armv6t2 shared !pic && enable_pic
3441
3442 elif enabled mips; then
3443
3444     check_inline_asm loongson '"dmult.g $1, $2, $3"'
3445     enabled mips32r2  && add_cflags "-mips32r2" && add_asflags "-mips32r2" &&
3446      check_inline_asm mips32r2  '"rotr $t0, $t1, 1"'
3447     enabled mipsdspr1 && add_cflags "-mdsp" && add_asflags "-mdsp" &&
3448      check_inline_asm mipsdspr1 '"addu.qb $t0, $t1, $t2"'
3449     enabled mipsdspr2 && add_cflags "-mdspr2" && add_asflags "-mdspr2" &&
3450      check_inline_asm mipsdspr2 '"absq_s.qb $t0, $t1"'
3451     enabled mipsfpu   && add_cflags "-mhard-float" && add_asflags "-mhard-float" &&
3452      check_inline_asm mipsfpu   '"madd.d $f0, $f2, $f4, $f6"'
3453
3454 elif enabled parisc; then
3455
3456     if enabled gcc; then
3457         case $($cc -dumpversion) in
3458             4.[3-8].*) check_cflags -fno-optimize-sibling-calls ;;
3459         esac
3460     fi
3461
3462 elif enabled ppc; then
3463
3464     enable local_aligned_8 local_aligned_16
3465
3466     check_inline_asm dcbzl     '"dcbzl 0, %0" :: "r"(0)'
3467     check_inline_asm ibm_asm   '"add 0, 0, 0"'
3468     check_inline_asm ppc4xx    '"maclhw r10, r11, r12"'
3469     check_inline_asm xform_asm '"lwzx %1, %y0" :: "Z"(*(int*)0), "r"(0)'
3470
3471     # AltiVec flags: The FSF version of GCC differs from the Apple version
3472     if enabled altivec; then
3473         nogas=warn
3474         check_cflags -maltivec -mabi=altivec &&
3475         { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
3476         check_cflags -faltivec
3477
3478         # check if our compiler supports Motorola AltiVec C API
3479         check_cc <<EOF || disable altivec
3480 $inc_altivec_h
3481 int main(void) {
3482     vector signed int v1 = (vector signed int) { 0 };
3483     vector signed int v2 = (vector signed int) { 1 };
3484     v1 = vec_add(v1, v2);
3485     return 0;
3486 }
3487 EOF
3488
3489         enabled altivec || warn "Altivec disabled, possibly missing --cpu flag"
3490     fi
3491
3492 elif enabled sparc; then
3493
3494     enabled vis && check_inline_asm vis '"pdist %f0, %f0, %f0"'
3495
3496 elif enabled x86; then
3497
3498     check_code ld intrin.h "__rdtsc()" "cc" && enable rdtsc
3499
3500     check_code ld mmintrin.h "_mm_empty()" "cc" && enable mm_empty
3501
3502     enable local_aligned_8 local_aligned_16
3503
3504     # check whether EBP is available on x86
3505     # As 'i' is stored on the stack, this program will crash
3506     # if the base pointer is used to access it because the
3507     # base pointer is cleared in the inline assembly code.
3508     check_exec_crash <<EOF && enable ebp_available
3509 volatile int i=0;
3510 __asm__ volatile ("xorl %%ebp, %%ebp" ::: "%ebp");
3511 return i;
3512 EOF
3513
3514     # check whether EBX is available on x86
3515     check_inline_asm ebx_available '""::"b"(0)' &&
3516         check_inline_asm ebx_available '"":::"%ebx"'
3517
3518     # check whether xmm clobbers are supported
3519     check_inline_asm xmm_clobbers '"":::"%xmm0"'
3520
3521     # check whether binutils is new enough to compile SSSE3/MMXEXT
3522     enabled ssse3  && check_inline_asm ssse3_inline  '"pabsw %xmm0, %xmm0"'
3523     enabled mmxext && check_inline_asm mmxext_inline '"pmaxub %mm0, %mm1"'
3524
3525     if ! disabled_any asm mmx yasm; then
3526         if check_cmd $yasmexe --version; then
3527             enabled x86_64 && yasm_extra="-m amd64"
3528             yasm_debug="-g dwarf2"
3529         elif check_cmd nasm -v; then
3530             yasmexe=nasm
3531             yasm_debug="-g -F dwarf"
3532             enabled x86_64 && test "$objformat" = elf && objformat=elf64
3533         fi
3534
3535         YASMFLAGS="-f $objformat $yasm_extra"
3536         enabled pic               && append YASMFLAGS "-DPIC"
3537         test -n "$extern_prefix"  && append YASMFLAGS "-DPREFIX"
3538         case "$objformat" in
3539             elf*) enabled debug && append YASMFLAGS $yasm_debug ;;
3540         esac
3541
3542         check_yasm "pextrd [eax], xmm0, 1" && enable yasm ||
3543             die "yasm not found, use --disable-yasm for a crippled build"
3544         check_yasm "vextractf128 xmm0, ymm0, 0"      || disable avx_external
3545         check_yasm "vfmaddps ymm0, ymm1, ymm2, ymm3" || disable fma4_external
3546         check_yasm "CPU amdnop" && enable cpunop
3547     fi
3548
3549     case "$cpu" in
3550         athlon*|opteron*|k8*|pentium|pentium-mmx|prescott|nocona|atom|geode)
3551             disable fast_clz
3552         ;;
3553     esac
3554
3555 fi
3556
3557 if enabled asm; then
3558     as=${gas:=$as}
3559     check_inline_asm gnu_as '".macro m n\n\\n:.int 0\n.endm\nm x"' ||
3560         $nogas "GNU assembler not found, install gas-preprocessor"
3561 fi
3562
3563 check_ldflags -Wl,--as-needed
3564
3565 if check_func dlopen; then
3566     ldl=
3567 elif check_func dlopen -ldl; then
3568     ldl=-ldl
3569 fi
3570
3571 if enabled network; then
3572     check_type "sys/types.h sys/socket.h" socklen_t
3573     check_type netdb.h "struct addrinfo"
3574     check_type netinet/in.h "struct group_source_req" -D_BSD_SOURCE
3575     check_type netinet/in.h "struct ip_mreq_source" -D_BSD_SOURCE
3576     check_type netinet/in.h "struct ipv6_mreq" -D_DARWIN_C_SOURCE
3577     check_type netinet/in.h "struct sockaddr_in6"
3578     check_type poll.h "struct pollfd"
3579     check_type "sys/types.h sys/socket.h" "struct sockaddr_storage"
3580     check_struct "sys/types.h sys/socket.h" "struct sockaddr" sa_len
3581     check_type netinet/sctp.h "struct sctp_event_subscribe"
3582     check_func getaddrinfo $network_extralibs
3583     check_func getservbyport $network_extralibs
3584     # Prefer arpa/inet.h over winsock2
3585     if check_header arpa/inet.h ; then
3586         check_func closesocket
3587     elif check_header winsock2.h ; then
3588         check_func_headers winsock2.h closesocket -lws2 &&
3589             network_extralibs="-lws2" ||
3590         { check_func_headers winsock2.h closesocket -lws2_32 &&
3591             network_extralibs="-lws2_32"; }
3592         check_func_headers ws2tcpip.h getaddrinfo $network_extralibs
3593         check_type ws2tcpip.h socklen_t
3594         check_type ws2tcpip.h "struct addrinfo"
3595         check_type ws2tcpip.h "struct group_source_req"
3596         check_type ws2tcpip.h "struct ip_mreq_source"
3597         check_type ws2tcpip.h "struct ipv6_mreq"
3598         check_type winsock2.h "struct pollfd"
3599         check_type ws2tcpip.h "struct sockaddr_in6"
3600         check_type ws2tcpip.h "struct sockaddr_storage"
3601         check_struct winsock2.h "struct sockaddr" sa_len
3602     else
3603         disable network
3604     fi
3605 fi
3606
3607 # Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
3608 check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
3609
3610 check_func  clock_gettime || { check_func clock_gettime -lrt && add_extralibs -lrt; }
3611 check_func  fcntl
3612 check_func  fork
3613 check_func  gethrtime
3614 check_func  getopt
3615 check_func  getrusage
3616 check_struct "sys/time.h sys/resource.h" "struct rusage" ru_maxrss
3617 check_func  gettimeofday
3618 check_func  inet_aton $network_extralibs
3619 check_func  isatty
3620 check_func  localtime_r
3621 check_func  ${malloc_prefix}memalign            && enable memalign
3622 check_func  mkstemp
3623 check_func  mmap
3624 check_func  mprotect
3625 check_func  ${malloc_prefix}posix_memalign      && enable posix_memalign
3626 check_func_headers malloc.h _aligned_malloc     && enable aligned_malloc
3627 check_func  setrlimit
3628 check_func  strerror_r
3629 check_func  sched_getaffinity
3630 check_func  sysconf
3631 check_func  sysctl
3632 check_func  usleep
3633 check_func_headers conio.h kbhit
3634 check_func_headers windows.h PeekNamedPipe
3635 check_func_headers io.h setmode
3636 check_func_headers lzo/lzo1x.h lzo1x_999_compress
3637 check_lib2 "windows.h shellapi.h" CommandLineToArgvW -lshell32
3638 check_lib2 "windows.h wincrypt.h" CryptGenRandom -ladvapi32
3639 check_lib2 "windows.h psapi.h" GetProcessMemoryInfo -lpsapi
3640 check_func_headers windows.h GetProcessAffinityMask
3641 check_func_headers windows.h GetProcessTimes
3642 check_func_headers windows.h GetSystemTimeAsFileTime
3643 check_func_headers windows.h MapViewOfFile
3644 check_func_headers windows.h Sleep
3645 check_func_headers windows.h VirtualAlloc
3646 check_func_headers glob.h glob
3647
3648 check_header direct.h
3649 check_header dlfcn.h
3650 check_header dxva.h
3651 check_header dxva2api.h -D_WIN32_WINNT=0x0600
3652 check_header io.h
3653 check_header libcrystalhd/libcrystalhd_if.h
3654 check_header malloc.h
3655 check_header poll.h
3656 check_header sys/mman.h
3657 check_header sys/param.h
3658 check_header sys/resource.h
3659 check_header sys/select.h
3660 check_header sys/time.h
3661 check_header termios.h
3662 check_header unistd.h
3663 check_header vdpau/vdpau.h
3664 check_header vdpau/vdpau_x11.h
3665 check_header windows.h
3666 check_header X11/extensions/XvMClib.h
3667 check_header asm/types.h
3668
3669 disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
3670 disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
3671
3672 # check for VDA header
3673 if ! disabled vda && ! enabled ppc; then
3674     if check_header VideoDecodeAcceleration/VDADecoder.h; then
3675         enable vda
3676         add_extralibs -framework CoreFoundation -framework VideoDecodeAcceleration -framework QuartzCore
3677     fi
3678 fi
3679
3680 if ! disabled w32threads && ! enabled pthreads; then
3681     check_func _beginthreadex && enable w32threads
3682 fi
3683
3684 # check for some common methods of building with pthread support
3685 # do this before the optional library checks as some of them require pthreads
3686 if ! disabled pthreads && ! enabled w32threads && ! enabled os2threads; then
3687     enable pthreads
3688     if check_func pthread_create; then
3689         :
3690     elif check_func pthread_create -pthread; then
3691         add_cflags -pthread
3692         add_extralibs -pthread
3693     elif check_func pthread_create -pthreads; then
3694         add_cflags -pthreads
3695         add_extralibs -pthreads
3696     elif check_func pthread_create -lpthreadGC2; then
3697         add_extralibs -lpthreadGC2
3698     elif ! check_lib pthread.h pthread_create -lpthread; then
3699         disable pthreads
3700     fi
3701 fi
3702
3703 for thread in $THREADS_LIST; do
3704     if enabled $thread; then
3705         test -n "$thread_type" &&
3706             die "ERROR: Only one thread type must be selected." ||
3707             thread_type="$thread"
3708     fi
3709 done
3710
3711 if enabled pthreads; then
3712   check_func pthread_cancel
3713 fi
3714
3715 check_lib math.h sin -lm && LIBM="-lm"
3716 disabled crystalhd || check_lib libcrystalhd/libcrystalhd_if.h DtsCrystalHDVersion -lcrystalhd || disable crystalhd
3717 enabled vaapi && require vaapi va/va.h vaInitialize -lva
3718
3719 atan2f_args=2
3720 ldexpf_args=2
3721 powf_args=2
3722
3723 for func in $MATH_FUNCS; do
3724     eval check_mathfunc $func \${${func}_args:-1}
3725 done
3726
3727 # these are off by default, so fail if requested and not available
3728 enabled avisynth   && require2 vfw32 "windows.h vfw.h" AVIFileInit -lavifil32
3729 enabled fontconfig && require_pkg_config fontconfig "fontconfig/fontconfig.h" FcInit
3730 enabled frei0r     && { check_header frei0r.h || die "ERROR: frei0r.h header not found"; }
3731 enabled gnutls     && require_pkg_config gnutls gnutls/gnutls.h gnutls_global_init
3732 enabled libiec61883 && require libiec61883 libiec61883/iec61883.h iec61883_cmp_connect -lraw1394 -lavc1394 -lrom1394 -liec61883
3733 enabled libaacplus && require  "libaacplus >= 2.0.0" aacplus.h aacplusEncOpen -laacplus
3734 enabled libass     && require_pkg_config libass ass/ass.h ass_library_init
3735 enabled libbluray  && require libbluray libbluray/bluray.h bd_open -lbluray
3736 enabled libcdio    && require2 libcdio "cdio/cdda.h cdio/paranoia.h" cdio_cddap_open -lcdio_paranoia -lcdio_cdda -lcdio
3737 enabled libcelt    && require libcelt celt/celt.h celt_decode -lcelt0 &&
3738                       { check_lib celt/celt.h celt_decoder_create_custom -lcelt0 ||
3739                         die "ERROR: libcelt must be installed and version must be >= 0.11.0."; }
3740 enabled libcaca    && require_pkg_config caca caca.h caca_create_canvas
3741 enabled libfaac    && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
3742 enabled libfdk_aac && require  libfdk_aac fdk-aac/aacenc_lib.h aacEncOpen -lfdk-aac
3743 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"
3744 enabled libflite   && require2 libflite "flite/flite.h" flite_init $flite_libs
3745 enabled libfreetype && require_pkg_config freetype2 "ft2build.h freetype/freetype.h" FT_Init_FreeType
3746 enabled libgsm     && require  libgsm gsm/gsm.h gsm_create -lgsm
3747 enabled libilbc    && require  libilbc ilbc.h WebRtcIlbcfix_InitDecode -lilbc
3748 enabled libmodplug && require  libmodplug libmodplug/modplug.h ModPlug_Load -lmodplug
3749 enabled libmp3lame && require  "libmp3lame >= 3.98.3" lame/lame.h lame_set_VBR_quality -lmp3lame
3750 enabled libnut     && require  libnut libnut.h nut_demuxer_init -lnut
3751 enabled libopencore_amrnb  && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb
3752 enabled libopencore_amrwb  && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb
3753 enabled libopencv  && require_pkg_config opencv opencv/cxcore.h cvCreateImageHeader
3754 enabled libopenjpeg && require libopenjpeg openjpeg.h opj_version -lopenjpeg
3755 enabled libopus    && require_pkg_config opus opus_multistream.h opus_multistream_decoder_create
3756 enabled libpulse && require_pkg_config libpulse-simple pulse/simple.h pa_simple_new
3757 enabled librtmp    && require_pkg_config librtmp librtmp/rtmp.h RTMP_Socket
3758 enabled libschroedinger && require_pkg_config schroedinger-1.0 schroedinger/schro.h schro_init
3759 enabled libspeex   && require  libspeex speex/speex.h speex_decoder_init -lspeex
3760 enabled libstagefright_h264  && require_cpp libstagefright_h264 "binder/ProcessState.h media/stagefright/MetaData.h
3761     media/stagefright/MediaBufferGroup.h media/stagefright/MediaDebug.h media/stagefright/MediaDefs.h
3762     media/stagefright/OMXClient.h media/stagefright/OMXCodec.h" android::OMXClient -lstagefright -lmedia -lutils -lbinder -lgnustl_static
3763 enabled libtheora  && require  libtheora theora/theoraenc.h th_info_init -ltheoraenc -ltheoradec -logg
3764 enabled libtwolame && require  libtwolame twolame.h twolame_init -ltwolame &&
3765                       { check_lib twolame.h twolame_encode_buffer_float32_interleaved -ltwolame ||
3766                         die "ERROR: libtwolame must be installed and version must be >= 0.3.10"; }
3767 enabled libutvideo    && require_cpp utvideo "stdint.h stdlib.h utvideo/utvideo.h utvideo/Codec.h" 'CCodec*' -lutvideo -lstdc++
3768 enabled libv4l2    && require_pkg_config libv4l2 libv4l2.h v4l2_ioctl
3769 enabled libvo_aacenc && require libvo_aacenc vo-aacenc/voAAC.h voGetAACEncAPI -lvo-aacenc
3770 enabled libvo_amrwbenc && require libvo_amrwbenc vo-amrwbenc/enc_if.h E_IF_init -lvo-amrwbenc
3771 enabled libvorbis  && require  libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
3772 enabled libvpx     && {
3773     enabled libvpx_decoder && { check_lib2 "vpx/vpx_decoder.h vpx/vp8dx.h" vpx_codec_dec_init_ver -lvpx ||
3774                                 die "ERROR: libvpx decoder must be installed and version must be >=0.9.1"; }
3775     enabled libvpx_encoder && { check_lib2 "vpx/vpx_encoder.h vpx/vp8cx.h" "vpx_codec_enc_init_ver VP8E_SET_MAX_INTRA_BITRATE_PCT" -lvpx ||
3776                                 die "ERROR: libvpx encoder version must be >=0.9.7"; } }
3777 enabled libx264    && require  libx264 x264.h x264_encoder_encode -lx264 &&
3778                       { check_cpp_condition x264.h "X264_BUILD >= 118" ||
3779                         die "ERROR: libx264 must be installed and version must be >= 0.118."; }
3780 enabled libxavs    && require  libxavs xavs.h xavs_encoder_encode -lxavs
3781 enabled libxvid    && require  libxvid xvid.h xvid_global -lxvidcore
3782 enabled openal     && { { for al_libs in "${OPENAL_LIBS}" "-lopenal" "-lOpenAL32"; do
3783                         check_lib 'AL/al.h' alGetError "${al_libs}" && break; done } ||
3784                         die "ERROR: openal not found"; } &&
3785                       { check_cpp_condition "AL/al.h" "defined(AL_VERSION_1_1)" ||
3786                         die "ERROR: openal must be installed and version must be 1.1 or compatible"; }
3787 enabled openssl    && { check_lib openssl/ssl.h SSL_library_init -lssl -lcrypto ||
3788                         check_lib openssl/ssl.h SSL_library_init -lssl32 -leay32 ||
3789                         check_lib openssl/ssl.h SSL_library_init -lssl -lcrypto -lws2_32 -lgdi32 ||
3790                         die "ERROR: openssl not found"; }
3791
3792 if enabled gnutls; then
3793     { check_lib nettle/bignum.h nettle_mpz_get_str_256 -lnettle -lhogweed -lgmp && enable nettle; } ||
3794     { check_lib gcrypt.h gcry_mpi_new -lgcrypt && enable gcrypt; }
3795 fi
3796
3797 # libdc1394 check
3798 if enabled libdc1394; then
3799     { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
3800         enable libdc1394_2; } ||
3801     { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
3802         enable libdc1394_1; } ||
3803     die "ERROR: No version of libdc1394 found "
3804 fi
3805
3806 SDL_CONFIG="${cross_prefix}sdl-config"
3807 if check_pkg_config sdl SDL_events.h SDL_PollEvent; then
3808     check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
3809     enable sdl &&
3810     check_struct SDL.h SDL_VideoInfo current_w $sdl_cflags && enable sdl_video_size
3811 else
3812   if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
3813     sdl_cflags=$("${SDL_CONFIG}" --cflags)
3814     sdl_libs=$("${SDL_CONFIG}" --libs)
3815     check_func_headers SDL_version.h SDL_Linked_Version $sdl_cflags $sdl_libs &&
3816     check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
3817     enable sdl &&
3818     check_struct SDL.h SDL_VideoInfo current_w $sdl_cflags && enable sdl_video_size
3819   fi
3820 fi
3821 enabled sdl && add_cflags $sdl_cflags && add_extralibs $sdl_libs
3822
3823 texi2html --help 2> /dev/null | grep -q 'init-file' && enable texi2html || disable texi2html
3824 makeinfo --version > /dev/null 2>&1 && enable makeinfo  || disable makeinfo
3825 perl --version > /dev/null 2>&1 && enable perl || disable perl
3826 pod2man --help > /dev/null 2>&1 && enable pod2man || disable pod2man
3827
3828 check_header linux/fb.h
3829 check_header linux/videodev.h
3830 check_header linux/videodev2.h
3831 check_struct linux/videodev2.h "struct v4l2_frmivalenum" discrete
3832
3833 check_header sys/videoio.h
3834
3835 check_func_headers "windows.h vfw.h" capCreateCaptureWindow "$vfwcap_indev_extralibs"
3836 # check that WM_CAP_DRIVER_CONNECT is defined to the proper value
3837 # w32api 3.12 had it defined wrong
3838 check_cpp_condition vfw.h "WM_CAP_DRIVER_CONNECT > WM_USER" && enable vfwcap_defines
3839
3840 check_type "dshow.h" IBaseFilter
3841
3842 # check for ioctl_meteor.h, ioctl_bt848.h and alternatives
3843 { check_header dev/bktr/ioctl_meteor.h &&
3844   check_header dev/bktr/ioctl_bt848.h; } ||
3845 { check_header machine/ioctl_meteor.h &&
3846   check_header machine/ioctl_bt848.h; } ||
3847 { check_header dev/video/meteor/ioctl_meteor.h &&
3848   check_header dev/video/bktr/ioctl_bt848.h; } ||
3849 check_header dev/ic/bt8xx.h
3850
3851 check_header sndio.h
3852 if check_struct sys/soundcard.h audio_buf_info bytes; then
3853     enable_safe sys/soundcard.h
3854 else
3855     check_cc -D__BSD_VISIBLE -D__XSI_VISIBLE <<EOF && add_cppflags -D__BSD_VISIBLE -D__XSI_VISIBLE && enable_safe sys/soundcard.h
3856     #include <sys/soundcard.h>
3857     audio_buf_info abc;
3858 EOF
3859 fi
3860 check_header soundcard.h
3861
3862 enabled_any alsa_indev alsa_outdev && check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
3863
3864 enabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack && check_func sem_timedwait &&
3865     check_func jack_port_get_latency_range -ljack
3866
3867 enabled_any sndio_indev sndio_outdev && check_lib2 sndio.h sio_open -lsndio
3868
3869
3870 enabled x11grab                                           &&
3871 require X11 X11/Xlib.h XOpenDisplay -lX11                 &&
3872 require Xext X11/extensions/XShm.h XShmCreateImage -lXext &&
3873 require Xfixes X11/extensions/Xfixes.h XFixesGetCursorImage -lXfixes
3874
3875 if ! disabled vaapi; then
3876     check_lib va/va.h vaInitialize -lva && {
3877         check_cpp_condition va/va_version.h "VA_CHECK_VERSION(0,32,0)" ||
3878         warn "Please upgrade to VA-API >= 0.32 if you would like full VA-API support.";
3879     } || disable vaapi
3880 fi
3881
3882 if ! disabled vdpau && enabled vdpau_vdpau_h; then
3883     check_cpp_condition vdpau/vdpau.h "defined VDP_DECODER_PROFILE_MPEG4_PART2_ASP" ||
3884         { echolog "Please upgrade to libvdpau >= 0.2 if you would like vdpau support." && disable vdpau; }
3885 fi
3886
3887 enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel"
3888 enabled coverage && add_cflags "-fprofile-arcs -ftest-coverage" && add_ldflags "-fprofile-arcs -ftest-coverage"
3889 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"
3890
3891 # add some useful compiler flags if supported
3892 check_cflags -Wdeclaration-after-statement
3893 check_cflags -Wall
3894 check_cflags -Wno-parentheses
3895 check_cflags -Wno-switch
3896 check_cflags -Wno-format-zero-length
3897 check_cflags -Wdisabled-optimization
3898 check_cflags -Wpointer-arith
3899 check_cflags -Wredundant-decls
3900 check_cflags -Wno-pointer-sign
3901 check_cflags -Wwrite-strings
3902 check_cflags -Wtype-limits
3903 check_cflags -Wundef
3904 check_cflags -Wmissing-prototypes
3905 check_cflags -Wno-pointer-to-int-cast
3906 check_cflags -Wstrict-prototypes
3907 enabled extra_warnings && check_cflags -Winline
3908
3909 # add some linker flags
3910 check_ldflags -Wl,--warn-common
3911 check_ldflags -Wl,-rpath-link=libpostproc:libswresample:libswscale:libavfilter:libavdevice:libavformat:libavcodec:libavutil:libavresample
3912 test_ldflags -Wl,-Bsymbolic && append SHFLAGS -Wl,-Bsymbolic
3913
3914 enabled xmm_clobber_test &&
3915     check_ldflags -Wl,--wrap,avcodec_open2              \
3916                   -Wl,--wrap,avcodec_decode_audio4      \
3917                   -Wl,--wrap,avcodec_decode_video2      \
3918                   -Wl,--wrap,avcodec_decode_subtitle2   \
3919                   -Wl,--wrap,avcodec_encode_audio2      \
3920                   -Wl,--wrap,avcodec_encode_video       \
3921                   -Wl,--wrap,avcodec_encode_subtitle    \
3922                   -Wl,--wrap,sws_scale ||
3923     disable xmm_clobber_test
3924
3925 echo "X{};" > $TMPV
3926 if test_ldflags -Wl,--version-script,$TMPV; then
3927     append SHFLAGS '-Wl,--version-script,\$(SUBDIR)lib\$(NAME).ver'
3928     check_cc <<EOF && enable symver_asm_label
3929 void ff_foo(void) __asm__ ("av_foo@VERSION");
3930 void ff_foo(void) { ${inline_asm+__asm__($quotes);} }
3931 EOF
3932     check_cc <<EOF && enable symver_gnu_asm
3933 __asm__(".symver ff_foo,av_foo@VERSION");
3934 void ff_foo(void) {}
3935 EOF
3936 fi
3937
3938 if [ -z "$optflags" ]; then
3939     if enabled small; then
3940         optflags=$cflags_size
3941     elif enabled optimizations; then
3942         optflags=$cflags_speed
3943     else
3944         optflags=$cflags_noopt
3945     fi
3946 fi
3947
3948 check_optflags(){
3949     check_cflags "$@"
3950     enabled lto && check_ldflags "$@"
3951 }
3952
3953
3954 if enabled lto; then
3955     test "$cc_type" != "$ld_type" && die "LTO requires same compiler and linker"
3956     check_cflags  -flto
3957     check_ldflags -flto $cpuflags
3958 fi
3959
3960 check_optflags $optflags
3961 check_optflags -fno-math-errno
3962 check_optflags -fno-signed-zeros
3963
3964 enabled ftrapv && check_cflags -ftrapv
3965
3966 check_cc -mno-red-zone <<EOF && noredzone_flags="-mno-red-zone"
3967 int x;
3968 EOF
3969
3970
3971 if enabled icc; then
3972     # Just warnings, no remarks
3973     check_cflags -w1
3974     # -wd: Disable following warnings
3975     # 144, 167, 556: -Wno-pointer-sign
3976     # 1292: attribute "foo" ignored
3977     # 1419: external declaration in primary source file
3978     # 10006: ignoring unknown option -fno-signed-zeros
3979     # 10148: ignoring unknown option -Wno-parentheses
3980     # 10156: ignoring option '-W'; no argument required
3981     check_cflags -wd144,167,556,1292,1419,10006,10148,10156
3982     # 11030: Warning unknown option --as-needed
3983     # 10156: ignoring option '-export'; no argument required
3984     check_ldflags -wd10156,11030
3985     # Allow to compile with optimizations
3986     check_ldflags -march=$cpu
3987     # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
3988     enable ebp_available
3989     if enabled x86_32; then
3990         icc_version=$($cc -dumpversion)
3991         test ${icc_version%%.*} -ge 11 &&
3992             check_cflags -falign-stack=maintain-16-byte ||
3993             disable aligned_stack
3994     fi
3995 elif enabled ccc; then
3996     # disable some annoying warnings
3997     add_cflags -msg_disable bitnotint
3998     add_cflags -msg_disable mixfuncvoid
3999     add_cflags -msg_disable nonstandcast
4000     add_cflags -msg_disable unsupieee
4001 elif enabled gcc; then
4002     check_optflags -fno-tree-vectorize
4003     check_cflags -Werror=implicit-function-declaration
4004     check_cflags -Werror=missing-prototypes
4005     check_cflags -Werror=vla
4006 elif enabled llvm_gcc; then
4007     check_cflags -mllvm -stack-alignment=16
4008 elif enabled clang; then
4009     check_cflags -mllvm -stack-alignment=16
4010     check_cflags -Qunused-arguments
4011     check_cflags -Werror=implicit-function-declaration
4012     check_cflags -Werror=missing-prototypes
4013 elif enabled armcc; then
4014     # 2523: use of inline assembler is deprecated
4015     add_cflags -W${armcc_opt},--diag_suppress=2523
4016     add_cflags -W${armcc_opt},--diag_suppress=1207
4017     add_cflags -W${armcc_opt},--diag_suppress=1293 # assignment in condition
4018     add_cflags -W${armcc_opt},--diag_suppress=3343 # hardfp compat
4019     add_cflags -W${armcc_opt},--diag_suppress=167  # pointer sign
4020     add_cflags -W${armcc_opt},--diag_suppress=513  # pointer sign
4021 elif enabled tms470; then
4022     add_cflags -pds=824 -pds=837
4023 elif enabled pathscale; then
4024     add_cflags -fstrict-overflow -OPT:wrap_around_unsafe_opt=OFF
4025 elif enabled msvc; then
4026     enabled x86_32 && disable aligned_stack
4027 fi
4028
4029 case $target_os in
4030     osf1)
4031         enabled ccc && add_ldflags '-Wl,-expect_unresolved,*'
4032     ;;
4033     plan9)
4034         add_cppflags -Dmain=plan9_main
4035     ;;
4036 esac
4037
4038 enabled_any $THREADS_LIST      && enable threads
4039
4040 enabled asm || { arch=c; disable $ARCH_LIST $ARCH_EXT_LIST; }
4041
4042 check_deps $CONFIG_LIST       \
4043            $CONFIG_EXTRA      \
4044            $HAVE_LIST         \
4045            $ALL_COMPONENTS    \
4046
4047
4048 if test $target_os = "haiku"; then
4049     disable memalign
4050     disable posix_memalign
4051 fi
4052
4053 ! enabled_any memalign posix_memalign aligned_malloc &&
4054     enabled_any $need_memalign && enable memalign_hack
4055
4056 # add_dep lib dep
4057 # -> enable ${lib}_deps_${dep}
4058 # -> add $dep to ${lib}_deps only once
4059 add_dep() {
4060     lib=$1
4061     dep=$2
4062     enabled "${lib}_deps_${dep}" && return 0
4063     enable  "${lib}_deps_${dep}"
4064     prepend "${lib}_deps" $dep
4065 }
4066
4067 # merge deps lib components
4068 # merge all ${component}_deps into ${lib}_deps and ${lib}_deps_*
4069 merge_deps() {
4070     lib=$1
4071     shift
4072     for comp in $*; do
4073         enabled $comp || continue
4074         eval "dep=\"\$${comp}_deps\""
4075         for d in $dep; do
4076             add_dep $lib $d
4077         done
4078     done
4079 }
4080
4081 merge_deps libavfilter $FILTER_LIST
4082
4083 echo "install prefix            $prefix"
4084 echo "source path               $source_path"
4085 echo "C compiler                $cc"
4086 echo "ARCH                      $arch ($cpu)"
4087 if test "$build_suffix" != ""; then
4088     echo "build suffix              $build_suffix"
4089 fi
4090 if test "$progs_suffix" != ""; then
4091     echo "progs suffix              $progs_suffix"
4092 fi
4093 if test "$extra_version" != ""; then
4094     echo "version string suffix     $extra_version"
4095 fi
4096 echo "big-endian                ${bigendian-no}"
4097 echo "runtime cpu detection     ${runtime_cpudetect-no}"
4098 if enabled x86; then
4099     echo "${yasmexe}                      ${yasm-no}"
4100     echo "MMX enabled               ${mmx-no}"
4101     echo "MMXEXT enabled            ${mmxext-no}"
4102     echo "3DNow! enabled            ${amd3dnow-no}"
4103     echo "3DNow! extended enabled   ${amd3dnowext-no}"
4104     echo "SSE enabled               ${sse-no}"
4105     echo "SSSE3 enabled             ${ssse3-no}"
4106     echo "AVX enabled               ${avx-no}"
4107     echo "FMA4 enabled              ${fma4-no}"
4108     echo "CMOV enabled              ${cmov-no}"
4109     echo "CMOV is fast              ${fast_cmov-no}"
4110     echo "EBX available             ${ebx_available-no}"
4111     echo "EBP available             ${ebp_available-no}"
4112 fi
4113 if enabled arm; then
4114     echo "ARMv5TE enabled           ${armv5te-no}"
4115     echo "ARMv6 enabled             ${armv6-no}"
4116     echo "ARMv6T2 enabled           ${armv6t2-no}"
4117     echo "ARM VFP enabled           ${armvfp-no}"
4118     echo "NEON enabled              ${neon-no}"
4119 fi
4120 if enabled mips; then
4121     echo "MIPS FPU enabled          ${mipsfpu-no}"
4122     echo "MIPS32R2 enabled          ${mips32r2-no}"
4123     echo "MIPS DSP R1 enabled       ${mipsdspr1-no}"
4124     echo "MIPS DSP R2 enabled       ${mipsdspr2-no}"
4125 fi
4126 if enabled ppc; then
4127     echo "AltiVec enabled           ${altivec-no}"
4128     echo "PPC 4xx optimizations     ${ppc4xx-no}"
4129     echo "dcbzl available           ${dcbzl-no}"
4130 fi
4131 if enabled sparc; then
4132     echo "VIS enabled               ${vis-no}"
4133 fi
4134 echo "debug symbols             ${debug-no}"
4135 echo "strip symbols             ${stripping-no}"
4136 echo "optimize for size         ${small-no}"
4137 echo "optimizations             ${optimizations-no}"
4138 echo "static                    ${static-no}"
4139 echo "shared                    ${shared-no}"
4140 echo "postprocessing support    ${postproc-no}"
4141 echo "new filter support        ${avfilter-no}"
4142 echo "network support           ${network-no}"
4143 echo "threading support         ${thread_type-no}"
4144 echo "safe bitstream reader     ${safe_bitstream_reader-no}"
4145 echo "SDL support               ${sdl-no}"
4146 echo "libdxva2 enabled          ${dxva2-no}"
4147 echo "libva enabled             ${vaapi-no}"
4148 echo "libvdpau enabled          ${vdpau-no}"
4149 echo "AVISynth enabled          ${avisynth-no}"
4150 echo "frei0r enabled            ${frei0r-no}"
4151 echo "gnutls enabled            ${gnutls-no}"
4152 echo "libaacplus enabled        ${libaacplus-no}"
4153 echo "libass enabled            ${libass-no}"
4154 echo "libcaca enabled           ${libcaca-no}"
4155 echo "libcdio support           ${libcdio-no}"
4156 echo "libcelt enabled           ${libcelt-no}"
4157 echo "libdc1394 support         ${libdc1394-no}"
4158 echo "libfaac enabled           ${libfaac-no}"
4159 echo "libfdk-aac enabled        ${libfdk_aac-no}"
4160 echo "libgsm enabled            ${libgsm-no}"
4161 echo "libiec61883 support       ${libiec61883-no}"
4162 echo "libilbc enabled           ${libilbc-no}"
4163 echo "libmodplug enabled        ${libmodplug-no}"
4164 echo "libmp3lame enabled        ${libmp3lame-no}"
4165 echo "libnut enabled            ${libnut-no}"
4166 echo "libopencore-amrnb support ${libopencore_amrnb-no}"
4167 echo "libopencore-amrwb support ${libopencore_amrwb-no}"
4168 echo "libopencv support         ${libopencv-no}"
4169 echo "libopenjpeg enabled       ${libopenjpeg-no}"
4170 echo "libopus enabled           ${libopus-no}"
4171 echo "libpulse enabled          ${libpulse-no}"
4172 echo "librtmp enabled           ${librtmp-no}"
4173 echo "libschroedinger enabled   ${libschroedinger-no}"
4174 echo "libspeex enabled          ${libspeex-no}"
4175 echo "libstagefright-h264 enabled    ${libstagefright_h264-no}"
4176 echo "libtheora enabled         ${libtheora-no}"
4177 echo "libtwolame enabled        ${libtwolame-no}"
4178 echo "libutvideo enabled        ${libutvideo-no}"
4179 echo "libv4l2 enabled           ${libv4l2-no}"
4180 echo "libvo-aacenc support      ${libvo_aacenc-no}"
4181 echo "libvo-amrwbenc support    ${libvo_amrwbenc-no}"
4182 echo "libvorbis enabled         ${libvorbis-no}"
4183 echo "libvpx enabled            ${libvpx-no}"
4184 echo "libx264 enabled           ${libx264-no}"
4185 echo "libxavs enabled           ${libxavs-no}"
4186 echo "libxvid enabled           ${libxvid-no}"
4187 echo "openal enabled            ${openal-no}"
4188 echo "openssl enabled           ${openssl-no}"
4189 echo "zlib enabled              ${zlib-no}"
4190 echo "bzlib enabled             ${bzlib-no}"
4191 echo "texi2html enabled         ${texi2html-no}"
4192 echo "perl enabled              ${perl-no}"
4193 echo "pod2man enabled           ${pod2man-no}"
4194 echo "makeinfo enabled          ${makeinfo-no}"
4195 test -n "$random_seed" &&
4196     echo "random seed               ${random_seed}"
4197 echo
4198
4199 for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
4200     echo "Enabled ${type}s:"
4201     eval list=\$$(toupper $type)_LIST
4202     print_enabled '_*' $list | sort | pr -r -3 -t
4203     echo
4204 done
4205
4206 license="LGPL version 2.1 or later"
4207 if enabled nonfree; then
4208     license="nonfree and unredistributable"
4209 elif enabled gplv3; then
4210     license="GPL version 3 or later"
4211 elif enabled lgplv3; then
4212     license="LGPL version 3 or later"
4213 elif enabled gpl; then
4214     license="GPL version 2 or later"
4215 fi
4216
4217 echo "License: $license"
4218
4219 echo "Creating config.mak and config.h..."
4220
4221 test -e Makefile || $ln_s "$source_path/Makefile" .
4222
4223 enabled stripping || strip="echo skipping strip"
4224
4225 config_files="$TMPH config.mak"
4226
4227 cat > config.mak <<EOF
4228 # Automatically generated by configure - do not modify!
4229 ifndef FFMPEG_CONFIG_MAK
4230 FFMPEG_CONFIG_MAK=1
4231 FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION
4232 prefix=$prefix
4233 LIBDIR=\$(DESTDIR)$libdir
4234 SHLIBDIR=\$(DESTDIR)$shlibdir
4235 INCDIR=\$(DESTDIR)$incdir
4236 BINDIR=\$(DESTDIR)$bindir
4237 DATADIR=\$(DESTDIR)$datadir
4238 MANDIR=\$(DESTDIR)$mandir
4239 SRC_PATH=$source_path
4240 ifndef MAIN_MAKEFILE
4241 SRC_PATH:=\$(SRC_PATH:.%=..%)
4242 endif
4243 CC_IDENT=$cc_ident
4244 ARCH=$arch
4245 CC=$cc
4246 CXX=$cxx
4247 AS=$as
4248 LD=$ld
4249 DEPCC=$dep_cc
4250 DEPCCFLAGS=$DEPCCFLAGS \$(CPPFLAGS)
4251 DEPAS=$as
4252 DEPASFLAGS=$DEPASFLAGS \$(CPPFLAGS)
4253 YASM=$yasmexe
4254 DEPYASM=$yasmexe
4255 AR=$ar
4256 ARFLAGS=$arflags
4257 AR_O=$ar_o
4258 RANLIB=$ranlib
4259 CP=cp -p
4260 LN_S=$ln_s
4261 STRIP=$strip
4262 CPPFLAGS=$CPPFLAGS
4263 CFLAGS=$CFLAGS
4264 CXXFLAGS=$CXXFLAGS
4265 ASFLAGS=$ASFLAGS
4266 AS_C=$AS_C
4267 AS_O=$AS_O
4268 CC_C=$CC_C
4269 CC_E=$CC_E
4270 CC_O=$CC_O
4271 CXX_C=$CXX_C
4272 CXX_O=$CXX_O
4273 LD_O=$LD_O
4274 LD_LIB=$LD_LIB
4275 LD_PATH=$LD_PATH
4276 DLLTOOL=$dlltool
4277 LDFLAGS=$LDFLAGS
4278 LDFLAGS-ffserver=$FFSERVERLDFLAGS
4279 SHFLAGS=$SHFLAGS
4280 YASMFLAGS=$YASMFLAGS
4281 BUILDSUF=$build_suffix
4282 PROGSSUF=$progs_suffix
4283 FULLNAME=$FULLNAME
4284 LIBPREF=$LIBPREF
4285 LIBSUF=$LIBSUF
4286 LIBNAME=$LIBNAME
4287 SLIBPREF=$SLIBPREF
4288 SLIBSUF=$SLIBSUF
4289 EXESUF=$EXESUF
4290 EXTRA_VERSION=$extra_version
4291 CCDEP=$CCDEP
4292 CXXDEP=$CXXDEP
4293 CCDEP_FLAGS=$CCDEP_FLAGS
4294 ASDEP=$ASDEP
4295 ASDEP_FLAGS=$ASDEP_FLAGS
4296 CC_DEPFLAGS=$CC_DEPFLAGS
4297 AS_DEPFLAGS=$AS_DEPFLAGS
4298 HOSTCC=$host_cc
4299 HOSTLD=$host_ld
4300 HOSTCFLAGS=$host_cflags
4301 HOSTEXESUF=$HOSTEXESUF
4302 HOSTLDFLAGS=$host_ldflags
4303 HOSTLIBS=$host_libs
4304 DEPHOSTCC=$host_cc
4305 DEPHOSTCCFLAGS=$DEPHOSTCCFLAGS \$(HOSTCCFLAGS)
4306 HOSTCCDEP=$HOSTCCDEP
4307 HOSTCCDEP_FLAGS=$HOSTCCDEP_FLAGS
4308 HOSTCC_DEPFLAGS=$HOSTCC_DEPFLAGS
4309 HOSTCC_C=$HOSTCC_C
4310 HOSTCC_O=$HOSTCC_O
4311 HOSTLD_O=$HOSTLD_O
4312 TARGET_EXEC=$target_exec
4313 TARGET_PATH=$target_path
4314 LIBS-ffplay=$sdl_libs
4315 CFLAGS-ffplay=$sdl_cflags
4316 ZLIB=$($ldflags_filter -lz)
4317 LIB_INSTALL_EXTRA_CMD=$LIB_INSTALL_EXTRA_CMD
4318 EXTRALIBS=$extralibs
4319 COMPAT_OBJS=$compat_objs
4320 EXEOBJS=$exeobjs
4321 INSTALL=$install
4322 LIBTARGET=${LIBTARGET}
4323 SLIBNAME=${SLIBNAME}
4324 SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}
4325 SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}
4326 SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}
4327 SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}
4328 SLIB_INSTALL_NAME=${SLIB_INSTALL_NAME}
4329 SLIB_INSTALL_LINKS=${SLIB_INSTALL_LINKS}
4330 SLIB_INSTALL_EXTRA_LIB=${SLIB_INSTALL_EXTRA_LIB}
4331 SLIB_INSTALL_EXTRA_SHLIB=${SLIB_INSTALL_EXTRA_SHLIB}
4332 SAMPLES:=${samples:-\$(FATE_SAMPLES)}
4333 NOREDZONE_FLAGS=$noredzone_flags
4334 EOF
4335
4336 get_version(){
4337     lcname=$1
4338     name=$(toupper $lcname)
4339     file=$source_path/$lcname/version.h
4340     eval $(awk "/#define ${name}_VERSION_M/ { print \$2 \"=\" \$3 }" "$file")
4341     eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
4342     eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
4343     eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
4344 }
4345
4346 get_version_old(){
4347     name=$1
4348     file=$source_path/$2
4349 # This condition will be removed when we stop supporting old libpostproc versions
4350 if ! test "$name" = LIBPOSTPROC || test "$postproc_version" = current; then
4351     eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
4352     eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
4353 fi
4354     lcname=$(tolower $name)
4355     eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
4356     eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
4357 }
4358
4359 get_version_old LIBPOSTPROC libpostproc/version.h
4360
4361 get_version libavcodec
4362 get_version libavdevice
4363 get_version libavfilter
4364 get_version libavformat
4365 get_version libavresample
4366 get_version libavutil
4367 get_version libswresample
4368 get_version libswscale
4369
4370 cat > $TMPH <<EOF
4371 /* Automatically generated by configure - do not modify! */
4372 #ifndef FFMPEG_CONFIG_H
4373 #define FFMPEG_CONFIG_H
4374 #define FFMPEG_CONFIGURATION "$(c_escape $FFMPEG_CONFIGURATION)"
4375 #define FFMPEG_LICENSE "$(c_escape $license)"
4376 #define FFMPEG_DATADIR "$(eval c_escape $datadir)"
4377 #define AVCONV_DATADIR "$(eval c_escape $datadir)"
4378 #define CC_IDENT "$(c_escape ${cc_ident:-Unknown compiler})"
4379 #define av_restrict $_restrict
4380 #define EXTERN_PREFIX "${extern_prefix}"
4381 #define EXTERN_ASM ${extern_prefix}
4382 #define SLIBSUF "$SLIBSUF"
4383 #define HAVE_MMX2 HAVE_MMXEXT
4384 EOF
4385
4386 test -n "$assert_level" &&
4387     echo "#define ASSERT_LEVEL $assert_level" >>$TMPH
4388
4389 test -n "$malloc_prefix" &&
4390     echo "#define MALLOC_PREFIX $malloc_prefix" >>$TMPH
4391
4392 if enabled yasm; then
4393     append config_files $TMPASM
4394     printf '' >$TMPASM
4395 fi
4396
4397 print_config ARCH_   "$config_files" $ARCH_LIST
4398 print_config HAVE_   "$config_files" $HAVE_LIST
4399 print_config CONFIG_ "$config_files" $CONFIG_LIST       \
4400                                      $CONFIG_EXTRA      \
4401                                      $ALL_COMPONENTS    \
4402
4403 echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
4404 echo "endif # FFMPEG_CONFIG_MAK" >> config.mak
4405
4406 # Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
4407 cp_if_changed $TMPH config.h
4408 touch .config
4409
4410 enabled yasm && cp_if_changed $TMPASM config.asm
4411
4412 cat > $TMPH <<EOF
4413 /* Generated by ffconf */
4414 #ifndef AVUTIL_AVCONFIG_H
4415 #define AVUTIL_AVCONFIG_H
4416 EOF
4417
4418 test "$postproc_version" != current && cat >> $TMPH <<EOF
4419 #define LIBPOSTPROC_VERSION_MAJOR $LIBPOSTPROC_VERSION_MAJOR
4420 #define LIBPOSTPROC_VERSION_MINOR $LIBPOSTPROC_VERSION_MINOR
4421 #define LIBPOSTPROC_VERSION_MICRO $LIBPOSTPROC_VERSION_MICRO
4422 EOF
4423
4424 print_config AV_HAVE_ $TMPH $HAVE_LIST_PUB
4425
4426 echo "#endif /* AVUTIL_AVCONFIG_H */" >> $TMPH
4427
4428 cp_if_changed $TMPH libavutil/avconfig.h
4429
4430 if test -n "$WARNINGS"; then
4431     printf "\n$WARNINGS"
4432     enabled fatal_warnings && exit 1
4433 fi
4434
4435 # build pkg-config files
4436
4437 pkgconfig_generate(){
4438     name=$1
4439     shortname=${name#lib}${build_suffix}
4440     comment=$2
4441     version=$3
4442     libs=$4
4443     requires=$5
4444     enabled ${name#lib} || return 0
4445     mkdir -p $name
4446     cat <<EOF > $name/$name.pc
4447 prefix=$prefix
4448 exec_prefix=\${prefix}
4449 libdir=$libdir
4450 includedir=$incdir
4451
4452 Name: $name
4453 Description: $comment
4454 Version: $version
4455 Requires: $(enabled shared || echo $requires)
4456 Requires.private: $(enabled shared && echo $requires)
4457 Conflicts:
4458 Libs: -L\${libdir} -l${shortname} $(enabled shared || echo $libs)
4459 Libs.private: $(enabled shared && echo $libs)
4460 Cflags: -I\${includedir}
4461 EOF
4462
4463 mkdir -p doc/examples/pc-uninstalled
4464 includedir=${source_path}
4465 [ "$includedir" = . ] && includedir="\${pcfiledir}/../../.."
4466     cat <<EOF > doc/examples/pc-uninstalled/$name.pc
4467 prefix=
4468 exec_prefix=
4469 libdir=\${pcfiledir}/../../../$name
4470 includedir=${includedir}
4471
4472 Name: $name
4473 Description: $comment
4474 Version: $version
4475 Requires: $requires
4476 Conflicts:
4477 Libs: -L\${libdir} -l${shortname} $(enabled shared || echo $libs)
4478 Cflags: -I\${includedir}
4479 EOF
4480 }
4481
4482 libavfilter_pc_deps="libavutil = $LIBAVUTIL_VERSION"
4483 enabled libavfilter_deps_avcodec    && prepend libavfilter_pc_deps "libavcodec = $LIBAVCODEC_VERSION,"
4484 enabled libavfilter_deps_avformat   && prepend libavfilter_pc_deps "libavformat = $LIBAVFORMAT_VERSION,"
4485 enabled libavfilter_deps_swscale    && prepend libavfilter_pc_deps "libswscale = $LIBSWSCALE_VERSION,"
4486 enabled libavfilter_deps_swresample && prepend libavfilter_pc_deps "libswresample = $LIBSWRESAMPLE_VERSION,"
4487 enabled libavfilter_deps_postproc   && prepend libavfilter_pc_deps "libpostproc = $LIBPOSTPROC_VERSION,"
4488 libavfilter_pc_deps=${libavfilter_pc_deps%, }
4489
4490 libavdevice_pc_deps="libavformat = $LIBAVFORMAT_VERSION"
4491 enabled lavfi_indev && prepend libavdevice_pc_deps "libavfilter = $LIBAVFILTER_VERSION,"
4492
4493 pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION" "$LIBM"
4494 pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
4495 pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
4496 pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "$libavdevice_pc_deps"
4497 pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "$libavfilter_pc_deps"
4498 pkgconfig_generate libpostproc "FFmpeg postprocessing library" "$LIBPOSTPROC_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"
4499 pkgconfig_generate libavresample "Libav audio resampling library" "$LIBAVRESAMPLE_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
4500 pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "$LIBM" "libavutil = $LIBAVUTIL_VERSION"
4501 pkgconfig_generate libswresample "FFmpeg audio rescaling library" "$LIBSWRESAMPLE_VERSION" "$LIBM" "libavutil = $LIBAVUTIL_VERSION"
4502
4503 fix_ffmpeg_remote(){
4504     git_remote_from=$1
4505     git_remote_to=$2
4506     fixme_remote=$(git --git-dir=$source_path/.git --work-tree=$source_path remote -v | grep $git_remote_from | cut -f 1 | sort | uniq)
4507     if [ "$fixme_remote" != "" ]; then
4508         echolog "
4509 Outdated domain in git config, the official domain for ffmpeg git is since
4510 November 2011, source.ffmpeg.org, both the old and the new point to the same
4511 repository and server. To update it enter the following commands:
4512 "
4513         for remote in $fixme_remote; do
4514             echolog "git remote set-url $remote $git_remote_to"
4515         done
4516     fi
4517 }
4518
4519 if test -f "$source_path/.git/config"; then
4520     remote_from=git.videolan.org
4521     remote_to=source.ffmpeg.org
4522     fix_ffmpeg_remote git@$remote_from:ffmpeg   git@$remote_to:ffmpeg
4523     fix_ffmpeg_remote git://$remote_from/ffmpeg git://$remote_to/ffmpeg
4524 fi