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