]> git.sesse.net Git - ffmpeg/blob - configure
sws_scale: check input against NULL
[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 vobsub_demuxer_select="mpegps_demuxer"
1874 w64_demuxer_deps="wav_demuxer"
1875
1876 # indevs / outdevs
1877 alsa_indev_deps="alsa_asoundlib_h snd_pcm_htimestamp"
1878 alsa_outdev_deps="alsa_asoundlib_h"
1879 bktr_indev_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
1880 caca_outdev_deps="libcaca"
1881 dshow_indev_deps="IBaseFilter"
1882 dshow_indev_extralibs="-lpsapi -lole32 -lstrmiids -luuid"
1883 dv1394_indev_deps="dv1394 dv_demuxer"
1884 fbdev_indev_deps="linux_fb_h"
1885 iec61883_indev_deps="libiec61883"
1886 jack_indev_deps="jack_jack_h sem_timedwait"
1887 lavfi_indev_deps="avfilter"
1888 libcdio_indev_deps="libcdio"
1889 libdc1394_indev_deps="libdc1394"
1890 libv4l2_indev_deps="libv4l2"
1891 openal_indev_deps="openal"
1892 oss_indev_deps_any="soundcard_h sys_soundcard_h"
1893 oss_outdev_deps_any="soundcard_h sys_soundcard_h"
1894 pulse_indev_deps="libpulse"
1895 sdl_outdev_deps="sdl"
1896 sndio_indev_deps="sndio_h"
1897 sndio_outdev_deps="sndio_h"
1898 v4l_indev_deps="linux_videodev_h"
1899 v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h"
1900 vfwcap_indev_deps="capCreateCaptureWindow vfwcap_defines"
1901 vfwcap_indev_extralibs="-lavicap32"
1902 x11grab_indev_deps="x11grab"
1903
1904 # protocols
1905 bluray_protocol_deps="libbluray"
1906 ffrtmpcrypt_protocol_deps="!librtmp_protocol"
1907 ffrtmpcrypt_protocol_deps_any="gcrypt nettle openssl"
1908 ffrtmpcrypt_protocol_select="tcp_protocol"
1909 ffrtmphttp_protocol_deps="!librtmp_protocol"
1910 ffrtmphttp_protocol_select="http_protocol"
1911 gopher_protocol_deps="network"
1912 httpproxy_protocol_deps="network"
1913 httpproxy_protocol_select="tcp_protocol"
1914 http_protocol_deps="network"
1915 http_protocol_select="tcp_protocol"
1916 https_protocol_select="tls_protocol"
1917 librtmp_protocol_deps="librtmp"
1918 librtmpe_protocol_deps="librtmp"
1919 librtmps_protocol_deps="librtmp"
1920 librtmpt_protocol_deps="librtmp"
1921 librtmpte_protocol_deps="librtmp"
1922 mmsh_protocol_select="http_protocol"
1923 mmst_protocol_deps="network"
1924 rtmp_protocol_deps="!librtmp_protocol"
1925 rtmp_protocol_select="tcp_protocol"
1926 rtmpe_protocol_select="ffrtmpcrypt_protocol"
1927 rtmps_protocol_deps="!librtmp_protocol"
1928 rtmps_protocol_select="tls_protocol"
1929 rtmpt_protocol_select="ffrtmphttp_protocol"
1930 rtmpte_protocol_select="ffrtmpcrypt_protocol ffrtmphttp_protocol"
1931 rtmpts_protocol_select="ffrtmphttp_protocol https_protocol"
1932 rtp_protocol_select="udp_protocol"
1933 sctp_protocol_deps="network struct_sctp_event_subscribe"
1934 tcp_protocol_deps="network"
1935 tls_protocol_deps_any="openssl gnutls"
1936 tls_protocol_select="tcp_protocol"
1937 udp_protocol_deps="network"
1938
1939 # filters
1940 aconvert_filter_deps="swresample"
1941 amovie_filter_deps="avcodec avformat"
1942 aresample_filter_deps="swresample"
1943 ass_filter_deps="libass"
1944 asyncts_filter_deps="avresample"
1945 atempo_filter_deps="avcodec rdft"
1946 blackframe_filter_deps="gpl"
1947 boxblur_filter_deps="gpl"
1948 colormatrix_filter_deps="gpl"
1949 cropdetect_filter_deps="gpl"
1950 decimate_filter_deps="gpl avcodec"
1951 delogo_filter_deps="gpl"
1952 deshake_filter_deps="avcodec"
1953 drawtext_filter_deps="libfreetype"
1954 ebur128_filter_deps="gpl"
1955 flite_filter_deps="libflite"
1956 frei0r_filter_deps="frei0r dlopen"
1957 frei0r_filter_extralibs='$ldl'
1958 frei0r_src_filter_deps="frei0r dlopen"
1959 frei0r_src_filter_extralibs='$ldl'
1960 geq_filter_deps="gpl"
1961 hqdn3d_filter_deps="gpl"
1962 hue_filter_deps="gpl"
1963 movie_filter_deps="avcodec avformat"
1964 mp_filter_deps="gpl avcodec swscale postproc inline_asm"
1965 mptestsrc_filter_deps="gpl"
1966 negate_filter_deps="lut_filter"
1967 resample_filter_deps="avresample"
1968 ocv_filter_deps="libopencv"
1969 pan_filter_deps="swresample"
1970 removelogo_filter_deps="avcodec avformat swscale"
1971 scale_filter_deps="swscale"
1972 smartblur_filter_deps="gpl swscale"
1973 showspectrum_filter_deps="avcodec rdft"
1974 subtitles_filter_deps="avformat avcodec libass"
1975 super2xsai_filter_deps="gpl"
1976 tinterlace_filter_deps="gpl"
1977 yadif_filter_deps="gpl"
1978 pixfmts_super2xsai_test_deps="super2xsai_filter"
1979 tinterlace_merge_test_deps="tinterlace_filter"
1980 tinterlace_pad_test_deps="tinterlace_filter"
1981
1982 # libraries
1983 avcodec_deps="avutil"
1984 avdevice_deps="avutil avcodec avformat"
1985 avfilter_deps="avutil"
1986 avformat_deps="avutil avcodec"
1987 avresample_deps="avutil"
1988 postproc_deps="gpl"
1989 swscale_deps="avutil"
1990
1991 # programs
1992 ffmpeg_deps="avcodec avfilter avformat swscale swresample"
1993 ffmpeg_select="ffbuffersink_filter format_filter aformat_filter
1994                setpts_filter null_filter anull_filter ffabuffersink_filter"
1995 ffplay_deps="avcodec avformat swscale swresample sdl"
1996 ffplay_select="ffbuffersink_filter rdft crop_filter"
1997 ffprobe_deps="avcodec avformat"
1998 ffserver_deps="avformat ffm_muxer fork rtp_protocol rtsp_demuxer"
1999 ffserver_extralibs='$ldl'
2000
2001 # documentation
2002 podpages_deps="perl"
2003 manpages_deps="perl pod2man"
2004 htmlpages_deps="texi2html"
2005 txtpages_deps="makeinfo"
2006 doc_deps_any="manpages htmlpages podpages txtpages"
2007
2008 # default parameters
2009
2010 logfile="config.log"
2011
2012 # installation paths
2013 prefix_default="/usr/local"
2014 bindir_default='${prefix}/bin'
2015 datadir_default='${prefix}/share/ffmpeg'
2016 incdir_default='${prefix}/include'
2017 libdir_default='${prefix}/lib'
2018 mandir_default='${prefix}/share/man'
2019 shlibdir_default="$libdir_default"
2020 postproc_version_default="current"
2021
2022 # toolchain
2023 ar_default="ar"
2024 cc_default="gcc"
2025 cxx_default="g++"
2026 host_cc_default="gcc"
2027 cp_f="cp -f"
2028 install="install"
2029 ln_s="ln -sf"
2030 nm_default="nm -g"
2031 objformat="elf"
2032 pkg_config_default=pkg-config
2033 ranlib="ranlib"
2034 strip_default="strip"
2035 yasmexe_default="yasm"
2036
2037 nogas=":"
2038
2039 # machine
2040 arch_default=$(uname -m)
2041 cpu="generic"
2042
2043 # OS
2044 target_os_default=$(tolower $(uname -s))
2045 host_os=$target_os_default
2046
2047 # alternative libpostproc version
2048 ALT_PP_VER_MAJOR=51
2049 ALT_PP_VER_MINOR=2
2050 ALT_PP_VER_MICRO=101
2051 ALT_PP_VER=$ALT_PP_VER_MAJOR.$ALT_PP_VER_MINOR.$ALT_PP_VER_MICRO
2052
2053 # configurable options
2054 enable $PROGRAM_LIST
2055 enable $DOCUMENT_LIST
2056 enable $(filter_out avresample $LIBRARY_LIST)
2057 enable postproc
2058 enable stripping
2059
2060 enable asm
2061 enable debug
2062 enable doc
2063 enable network
2064 enable optimizations
2065 enable runtime_cpudetect
2066 enable safe_bitstream_reader
2067 enable static
2068 enable swscale_alpha
2069
2070 # build settings
2071 SHFLAGS='-shared -Wl,-soname,$$(@F)'
2072 FFSERVERLDFLAGS=-Wl,-E
2073 LIBPREF="lib"
2074 LIBSUF=".a"
2075 FULLNAME='$(NAME)$(BUILDSUF)'
2076 LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
2077 SLIBPREF="lib"
2078 SLIBSUF=".so"
2079 SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
2080 SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
2081 SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
2082 LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
2083 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'
2084 SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR) $(SLIBNAME)'
2085
2086 asflags_filter=echo
2087 cflags_filter=echo
2088 ldflags_filter=echo
2089
2090 AS_C='-c'
2091 AS_O='-o $@'
2092 CC_C='-c'
2093 CC_E='-E -o $@'
2094 CC_O='-o $@'
2095 CXX_C='-c'
2096 CXX_O='-o $@'
2097 LD_O='-o $@'
2098 LD_LIB='-l%'
2099 LD_PATH='-L'
2100 HOSTCC_C='-c'
2101 HOSTCC_O='-o $@'
2102 HOSTLD_O='-o $@'
2103
2104 host_cflags='-D_ISOC99_SOURCE -D_XOPEN_SOURCE=600 -O3 -g'
2105 host_libs='-lm'
2106 host_cflags_filter=echo
2107 host_ldflags_filter=echo
2108
2109 target_path='$(CURDIR)'
2110
2111 # since the object filename is not given with the -MM flag, the compiler
2112 # is only able to print the basename, and we must add the path ourselves
2113 DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o," > $(@:.o=.d)'
2114 DEPFLAGS='-MM'
2115
2116 # find source path
2117 if test -f configure; then
2118     source_path=.
2119 else
2120     source_path=$(cd $(dirname "$0"); pwd)
2121     echo "$source_path" | grep -q '[[:blank:]]' &&
2122         die "Out of tree builds are impossible with whitespace in source path."
2123     test -e "$source_path/config.h" &&
2124         die "Out of tree builds are impossible with config.h in source dir."
2125 fi
2126
2127 for v in "$@"; do
2128     r=${v#*=}
2129     l=${v%"$r"}
2130     r=$(sh_quote "$r")
2131     FFMPEG_CONFIGURATION="${FFMPEG_CONFIGURATION# } ${l}${r}"
2132 done
2133
2134 find_things(){
2135     thing=$1
2136     pattern=$2
2137     file=$source_path/$3
2138     sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
2139 }
2140
2141 ENCODER_LIST=$(find_things  encoder  ENC      libavcodec/allcodecs.c)
2142 DECODER_LIST=$(find_things  decoder  DEC      libavcodec/allcodecs.c)
2143 HWACCEL_LIST=$(find_things  hwaccel  HWACCEL  libavcodec/allcodecs.c)
2144 PARSER_LIST=$(find_things   parser   PARSER   libavcodec/allcodecs.c)
2145 BSF_LIST=$(find_things      bsf      BSF      libavcodec/allcodecs.c)
2146 MUXER_LIST=$(find_things    muxer    _MUX     libavformat/allformats.c)
2147 DEMUXER_LIST=$(find_things  demuxer  DEMUX    libavformat/allformats.c)
2148 OUTDEV_LIST=$(find_things   outdev   OUTDEV   libavdevice/alldevices.c)
2149 INDEV_LIST=$(find_things    indev    _IN      libavdevice/alldevices.c)
2150 PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
2151 FILTER_LIST=$(find_things   filter   FILTER   libavfilter/allfilters.c)
2152
2153 ALL_COMPONENTS="
2154     $BSF_LIST
2155     $DECODER_LIST
2156     $DEMUXER_LIST
2157     $ENCODER_LIST
2158     $FILTER_LIST
2159     $HWACCEL_LIST
2160     $INDEV_LIST
2161     $MUXER_LIST
2162     $OUTDEV_LIST
2163     $PARSER_LIST
2164     $PROTOCOL_LIST
2165 "
2166
2167 for n in $COMPONENT_LIST; do
2168     v=$(toupper ${n%s})_LIST
2169     eval enable \$$v
2170     eval ${n}_if_any="\$$v"
2171 done
2172
2173 enable $ARCH_EXT_LIST
2174
2175 die_unknown(){
2176     echo "Unknown option \"$1\"."
2177     echo "See $0 --help for available options."
2178     exit 1
2179 }
2180
2181 show_list() {
2182     suffix=_$1
2183     shift
2184     echo $* | sed s/$suffix//g | tr ' ' '\n' | sort | pr -3 -t
2185     exit 0
2186 }
2187
2188 rand_list(){
2189     IFS=', '
2190     set -- $*
2191     unset IFS
2192     for thing; do
2193         comp=${thing%:*}
2194         prob=${thing#$comp}
2195         prob=${prob#:}
2196         is_in ${comp} $COMPONENT_LIST && eval comp=\$$(toupper ${comp%s})_LIST
2197         echo "prob ${prob:-0.5}"
2198         printf '%s\n' $comp
2199     done
2200 }
2201
2202 do_random(){
2203     action=$1
2204     shift
2205     random_seed=$(awk "BEGIN { srand($random_seed); print srand() }")
2206     $action $(rand_list "$@" | awk "BEGIN { srand($random_seed) } \$1 == \"prob\" { prob = \$2; next } rand() < prob { print }")
2207 }
2208
2209 for opt do
2210     optval="${opt#*=}"
2211     case "$opt" in
2212         --extra-ldflags=*) add_ldflags $optval
2213         ;;
2214         --extra-libs=*) add_extralibs $optval
2215         ;;
2216         --disable-devices) disable $INDEV_LIST $OUTDEV_LIST
2217         ;;
2218         --enable-debug=*) debuglevel="$optval"
2219         ;;
2220         --disable-programs)
2221             disable $PROGRAM_LIST
2222         ;;
2223         --disable-everything)
2224             map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
2225         ;;
2226         --enable-random|--disable-random)
2227             action=${opt%%-random}
2228             do_random ${action#--} $COMPONENT_LIST
2229         ;;
2230         --enable-random=*|--disable-random=*)
2231             action=${opt%%-random=*}
2232             do_random ${action#--} $optval
2233         ;;
2234         --enable-*=*|--disable-*=*)
2235             eval $(echo "${opt%%=*}" | sed 's/--/action=/;s/-/ thing=/')
2236             is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt"
2237             eval list=\$$(toupper $thing)_LIST
2238             name=$(echo "${optval}" | sed "s/,/_${thing}|/g")_${thing}
2239             list=$(filter "$name" $list)
2240             [ "$list" = "" ] && warn "Option $opt did not match anything"
2241             $action $list
2242         ;;
2243         --enable-?*|--disable-?*)
2244             eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
2245             if is_in $option $COMPONENT_LIST; then
2246                 test $action = disable && action=unset
2247                 eval $action \$$(toupper ${option%s})_LIST
2248             elif is_in $option $CMDLINE_SELECT; then
2249                 $action $option
2250             else
2251                 die_unknown $opt
2252             fi
2253         ;;
2254         --list-*)
2255             NAME="${opt#--list-}"
2256             is_in $NAME $COMPONENT_LIST || die_unknown $opt
2257             NAME=${NAME%s}
2258             eval show_list $NAME \$$(toupper $NAME)_LIST
2259         ;;
2260         --help|-h) show_help
2261         ;;
2262         --fatal-warnings) enable fatal_warnings
2263         ;;
2264         *)
2265             optname="${opt%%=*}"
2266             optname="${optname#--}"
2267             optname=$(echo "$optname" | sed 's/-/_/g')
2268             if is_in $optname $CMDLINE_SET; then
2269                 eval $optname='$optval'
2270             elif is_in $optname $CMDLINE_APPEND; then
2271                 append $optname "$optval"
2272             else
2273                 die_unknown $opt
2274             fi
2275         ;;
2276     esac
2277 done
2278
2279 disabled logging && logfile=/dev/null
2280
2281 echo "# $0 $FFMPEG_CONFIGURATION" > $logfile
2282 set >> $logfile
2283
2284 test -n "$cross_prefix" && enable cross_compile
2285
2286 if enabled cross_compile; then
2287     test -n "$arch" && test -n "$target_os" ||
2288         die "Must specify target arch and OS when cross-compiling"
2289 fi
2290
2291 set_default postproc_version
2292
2293 # Check if we should build alternative libpostproc version instead of current
2294 if   test "$postproc_version" = $ALT_PP_VER; then
2295   LIBPOSTPROC_VERSION=$ALT_PP_VER
2296   LIBPOSTPROC_VERSION_MAJOR=$ALT_PP_VER_MAJOR
2297   LIBPOSTPROC_VERSION_MINOR=$ALT_PP_VER_MINOR
2298   LIBPOSTPROC_VERSION_MICRO=$ALT_PP_VER_MICRO
2299 elif test "$postproc_version" != current; then
2300   die "Invalid argument to --postproc-version. See --help output."
2301 fi
2302
2303 ar_default="${cross_prefix}${ar_default}"
2304 cc_default="${cross_prefix}${cc_default}"
2305 cxx_default="${cross_prefix}${cxx_default}"
2306 nm_default="${cross_prefix}${nm_default}"
2307 pkg_config_default="${cross_prefix}${pkg_config_default}"
2308 ranlib="${cross_prefix}${ranlib}"
2309 strip_default="${cross_prefix}${strip_default}"
2310
2311 sysinclude_default="${sysroot}/usr/include"
2312
2313 case "$toolchain" in
2314     clang-asan)
2315         cc_default="clang"
2316         add_cflags  -faddress-sanitizer
2317         add_ldflags -faddress-sanitizer
2318     ;;
2319     clang-tsan)
2320         cc_default="clang"
2321         add_cflags  -fthread-sanitizer
2322         add_ldflags -fthread-sanitizer
2323     ;;
2324     msvc)
2325         cc_default="c99wrap cl"
2326         ld_default="c99wrap link"
2327         nm_default="dumpbin -symbols"
2328         ar_default="lib"
2329         target_os_default="win32"
2330     ;;
2331     ?*)
2332         die "Unknown toolchain $toolchain"
2333     ;;
2334 esac
2335
2336 set_default arch cc cxx pkg_config strip sysinclude target_os yasmexe
2337 enabled cross_compile || host_cc_default=$cc
2338 set_default host_cc
2339
2340 if ! $pkg_config --version >/dev/null 2>&1; then
2341     warn "$pkg_config not found, library detection may fail."
2342     pkg_config=false
2343 fi
2344
2345 exesuf() {
2346     case $1 in
2347         mingw32*|win32|win64|cygwin*|*-dos|freedos|opendos|os/2*|symbian) echo .exe ;;
2348     esac
2349 }
2350
2351 EXESUF=$(exesuf $target_os)
2352 HOSTEXESUF=$(exesuf $host_os)
2353
2354 # set temporary file name
2355 : ${TMPDIR:=$TEMPDIR}
2356 : ${TMPDIR:=$TMP}
2357 : ${TMPDIR:=/tmp}
2358
2359 if ! check_cmd mktemp -u XXXXXX; then
2360     # simple replacement for missing mktemp
2361     # NOT SAFE FOR GENERAL USE
2362     mktemp(){
2363         echo "${2%%XXX*}.${HOSTNAME}.${UID}.$$"
2364     }
2365 fi
2366
2367 tmpfile(){
2368     tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
2369         (set -C; exec > $tmp) 2>/dev/null ||
2370         die "Unable to create temporary file in $TMPDIR."
2371     append TMPFILES $tmp
2372     eval $1=$tmp
2373 }
2374
2375 trap 'rm -f -- $TMPFILES' EXIT
2376
2377 tmpfile TMPASM .asm
2378 tmpfile TMPC   .c
2379 tmpfile TMPCPP .cpp
2380 tmpfile TMPE   $EXESUF
2381 tmpfile TMPH   .h
2382 tmpfile TMPO   .o
2383 tmpfile TMPS   .S
2384 tmpfile TMPSH  .sh
2385 tmpfile TMPV   .ver
2386
2387 unset -f mktemp
2388
2389 chmod +x $TMPE
2390
2391 # make sure we can execute files in $TMPDIR
2392 cat > $TMPSH 2>> $logfile <<EOF
2393 #! /bin/sh
2394 EOF
2395 chmod +x $TMPSH >> $logfile 2>&1
2396 if ! $TMPSH >> $logfile 2>&1; then
2397     cat <<EOF
2398 Unable to create and execute files in $TMPDIR.  Set the TMPDIR environment
2399 variable to another directory and make sure that it is not mounted noexec.
2400 EOF
2401     die "Sanity test failed."
2402 fi
2403
2404 ccc_flags(){
2405     for flag; do
2406         case $flag in
2407             -std=c99)           echo -c99                       ;;
2408             -mcpu=*)            echo -arch ${flag#*=}           ;;
2409             -mieee)             echo -ieee                      ;;
2410             -O*|-fast)          echo $flag                      ;;
2411             -fno-math-errno)    echo -assume nomath_errno       ;;
2412             -g)                 echo -g3                        ;;
2413             -Wall)              echo -msg_enable level2         ;;
2414             -Wno-pointer-sign)  echo -msg_disable ptrmismatch1  ;;
2415             -Wl,*)              echo $flag                      ;;
2416             -f*|-W*)                                            ;;
2417             *)                  echo $flag                      ;;
2418         esac
2419    done
2420 }
2421
2422 msvc_flags(){
2423     for flag; do
2424         case $flag in
2425             -fomit-frame-pointer) echo -Oy ;;
2426             -g)                   echo -Z7 ;;
2427             -Wall)                echo -W4 -wd4244 -wd4127 -wd4018 -wd4389 \
2428                                        -wd4146 -wd4057 -wd4204 -wd4706 -wd4305 \
2429                                        -wd4152 -wd4324 -we4013 -wd4100 -wd4214 \
2430                                        -wd4554 \
2431                                        -wd4996 -wd4273 ;;
2432             -std=c99)             ;;
2433             -fno-math-errno)      ;;
2434             -fno-common)          ;;
2435             -fno-signed-zeros)    ;;
2436             -lz)                  echo zlib.lib ;;
2437             -lavifil32)           echo vfw32.lib ;;
2438             -lavicap32)           echo vfw32.lib user32.lib ;;
2439             -l*)                  echo ${flag#-l}.lib ;;
2440             *)                    echo $flag ;;
2441         esac
2442     done
2443 }
2444
2445 pgi_flags(){
2446     for flag; do
2447         case $flag in
2448             -flto)                echo -Mipa=fast,libopt,libinline,vestigial ;;
2449             -fomit-frame-pointer) echo -Mnoframe ;;
2450             -g)                   echo -gopt ;;
2451             *)                    echo $flag ;;
2452         esac
2453     done
2454 }
2455
2456 suncc_flags(){
2457     for flag; do
2458         case $flag in
2459             -march=*|-mcpu=*)
2460                 case "${flag#*=}" in
2461                     native)                   echo -xtarget=native       ;;
2462                     v9|niagara)               echo -xarch=sparc          ;;
2463                     ultrasparc)               echo -xarch=sparcvis       ;;
2464                     ultrasparc3|niagara2)     echo -xarch=sparcvis2      ;;
2465                     i586|pentium)             echo -xchip=pentium        ;;
2466                     i686|pentiumpro|pentium2) echo -xtarget=pentium_pro  ;;
2467                     pentium3*|c3-2)           echo -xtarget=pentium3     ;;
2468                     pentium-m)          echo -xarch=sse2 -xchip=pentium3 ;;
2469                     pentium4*)          echo -xtarget=pentium4           ;;
2470                     prescott|nocona)    echo -xarch=sse3 -xchip=pentium4 ;;
2471                     *-sse3)             echo -xarch=sse3                 ;;
2472                     core2)              echo -xarch=ssse3 -xchip=core2   ;;
2473                     corei7)           echo -xarch=sse4_2 -xchip=nehalem  ;;
2474                     corei7-avx)       echo -xarch=avx -xchip=sandybridge ;;
2475                     amdfam10|barcelona|bdver*) echo -xarch=sse4_1        ;;
2476                     athlon-4|athlon-[mx]p)    echo -xarch=ssea           ;;
2477                     k8|opteron|athlon64|athlon-fx)
2478                                               echo -xarch=sse2a          ;;
2479                     athlon*)                  echo -xarch=pentium_proa   ;;
2480                 esac
2481                 ;;
2482             -std=c99)             echo -xc99              ;;
2483             -fomit-frame-pointer) echo -xregs=frameptr    ;;
2484             -fPIC)                echo -KPIC -xcode=pic32 ;;
2485             -W*,*)                echo $flag              ;;
2486             -f*-*|-W*)                                    ;;
2487             *)                    echo $flag              ;;
2488         esac
2489     done
2490 }
2491
2492 tms470_flags(){
2493     for flag; do
2494         case $flag in
2495             -march=*|-mcpu=*)
2496                 case "${flag#*=}" in
2497                     armv7-a|cortex-a*)      echo -mv=7a8 ;;
2498                     armv7-r|cortex-r*)      echo -mv=7r4 ;;
2499                     armv7-m|cortex-m*)      echo -mv=7m3 ;;
2500                     armv6*|arm11*)          echo -mv=6   ;;
2501                     armv5*e|arm[79]*e*|arm9[24]6*|arm96*|arm102[26])
2502                                             echo -mv=5e  ;;
2503                     armv4*|arm7*|arm9[24]*) echo -mv=4   ;;
2504                 esac
2505                 ;;
2506             -mfpu=neon)     echo --float_support=vfpv3 --neon ;;
2507             -mfpu=vfp)      echo --float_support=vfpv2        ;;
2508             -mfpu=vfpv3)    echo --float_support=vfpv3        ;;
2509             -mfpu=vfpv3-d16) echo --float_support=vfpv3d16    ;;
2510             -msoft-float)   echo --float_support=vfplib       ;;
2511             -O[0-3]|-mf=*)  echo $flag                        ;;
2512             -g)             echo -g -mn                       ;;
2513             -pds=*)         echo $flag                        ;;
2514             -D*|-I*)        echo $flag                        ;;
2515             --gcc|--abi=*)  echo $flag                        ;;
2516             -me)            echo $flag                        ;;
2517         esac
2518     done
2519 }
2520
2521 probe_cc(){
2522     pfx=$1
2523     _cc=$2
2524
2525     unset _type _ident _cc_c _cc_e _cc_o _flags _cflags
2526     unset _ld_o _ldflags _ld_lib _ld_path
2527     unset _depflags _DEPCMD _DEPFLAGS
2528     _flags_filter=echo
2529
2530     if $_cc -v 2>&1 | grep -q '^gcc.*LLVM'; then
2531         _type=llvm_gcc
2532         gcc_extra_ver=$(expr "$($_cc --version | head -n1)" : '.*\((.*)\)')
2533         _ident="llvm-gcc $($_cc -dumpversion) $gcc_extra_ver"
2534         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2535         _cflags_speed='-O3'
2536         _cflags_size='-Os'
2537     elif $_cc -v 2>&1 | grep -qi ^gcc; then
2538         _type=gcc
2539         gcc_version=$($_cc --version | head -n1)
2540         gcc_basever=$($_cc -dumpversion)
2541         gcc_pkg_ver=$(expr "$gcc_version" : '[^ ]* \(([^)]*)\)')
2542         gcc_ext_ver=$(expr "$gcc_version" : ".*$gcc_pkg_ver $gcc_basever \\(.*\\)")
2543         _ident=$(cleanws "gcc $gcc_basever $gcc_pkg_ver $gcc_ext_ver")
2544         if ! $_cc -dumpversion | grep -q '^2\.'; then
2545             _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2546         fi
2547         _cflags_speed='-O3'
2548         _cflags_size='-Os'
2549     elif $_cc --version 2>/dev/null | grep -q Intel; then
2550         _type=icc
2551         _ident=$($_cc --version | head -n1)
2552         _depflags='-MMD'
2553         _cflags_speed='-O3'
2554         _cflags_size='-Os'
2555         _cflags_noopt='-O1'
2556     elif $_cc -v 2>&1 | grep -q xlc; then
2557         _type=xlc
2558         _ident=$($_cc -qversion 2>/dev/null | head -n1)
2559         _cflags_speed='-O5'
2560         _cflags_size='-O5 -qcompact'
2561     elif $_cc -V 2>/dev/null | grep -q Compaq; then
2562         _type=ccc
2563         _ident=$($_cc -V | head -n1 | cut -d' ' -f1-3)
2564         _DEPFLAGS='-M'
2565         _cflags_speed='-fast'
2566         _cflags_size='-O1'
2567         _flags_filter=ccc_flags
2568     elif $_cc --vsn 2>/dev/null | grep -q "ARM C/C++ Compiler"; then
2569         test -d "$sysroot" || die "No valid sysroot specified."
2570         _type=armcc
2571         _ident=$($_cc --vsn | head -n1)
2572         armcc_conf="$PWD/armcc.conf"
2573         $_cc --arm_linux_configure                 \
2574              --arm_linux_config_file="$armcc_conf" \
2575              --configure_sysroot="$sysroot"        \
2576              --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
2577              die "Error creating armcc configuration file."
2578         $_cc --vsn | grep -q RVCT && armcc_opt=rvct || armcc_opt=armcc
2579         _flags="--arm_linux_config_file=$armcc_conf --translate_gcc"
2580         as_default="${cross_prefix}gcc"
2581         _depflags='-MMD'
2582         _cflags_speed='-O3'
2583         _cflags_size='-Os'
2584     elif $_cc -version 2>/dev/null | grep -Eq 'TMS470|TI ARM'; then
2585         _type=tms470
2586         _ident=$($_cc -version | head -n1 | tr -s ' ')
2587         _flags='--gcc --abi=eabi -me'
2588         _cc_e='-ppl -fe=$@'
2589         _cc_o='-fe=$@'
2590         _depflags='-ppa -ppd=$(@:.o=.d)'
2591         _cflags_speed='-O3 -mf=5'
2592         _cflags_size='-O3 -mf=2'
2593         _flags_filter=tms470_flags
2594     elif $_cc -v 2>&1 | grep -q clang; then
2595         _type=clang
2596         _ident=$($_cc --version | head -n1)
2597         _depflags='-MMD'
2598         _cflags_speed='-O3'
2599         _cflags_size='-Os'
2600     elif $_cc -V 2>&1 | grep -q Sun; then
2601         _type=suncc
2602         _ident=$($_cc -V 2>&1 | head -n1 | cut -d' ' -f 2-)
2603         _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "1s,^.*: ,$@: ," -e "\$$!s,\$$, \\\," -e "1!s,^.*: , ," > $(@:.o=.d)'
2604         _DEPFLAGS='-xM1 -xc99'
2605         _ldflags='-std=c99'
2606         _cflags_speed='-O5'
2607         _cflags_size='-O5 -xspace'
2608         _flags_filter=suncc_flags
2609     elif $_cc -v 2>&1 | grep -q 'PathScale\|Path64'; then
2610         _type=pathscale
2611         _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
2612         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2613         _cflags_speed='-O2'
2614         _cflags_size='-Os'
2615         _flags_filter='filter_out -Wdisabled-optimization'
2616     elif $_cc -v 2>&1 | grep -q Open64; then
2617         _type=open64
2618         _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
2619         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2620         _cflags_speed='-O2'
2621         _cflags_size='-Os'
2622         _flags_filter='filter_out -Wdisabled-optimization|-Wtype-limits|-fno-signed-zeros'
2623     elif $_cc -V 2>&1 | grep -q Portland; then
2624         _type=pgi
2625         _ident="PGI $($_cc -V 2>&1 | awk '/^pgcc/ { print $2; exit }')"
2626         opt_common='-alias=ansi -Mdse -Mlre -Mpre'
2627         _cflags_speed="-O3 -Mautoinline -Munroll=c:4 $opt_common"
2628         _cflags_size="-O2 -Munroll=c:1 $opt_common"
2629         _cflags_noopt="-O1"
2630         _flags_filter=pgi_flags
2631     elif $_cc 2>&1 | grep -q Microsoft; then
2632         _type=msvc
2633         _ident=$($cc 2>&1 | head -n1)
2634         _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< 2>&1 | awk '\''/including/ { sub(/^.*file: */, ""); gsub(/\\/, "/"); if (!match($$0, / /)) print "$@:", $$0 }'\'' > $(@:.o=.d)'
2635         _DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -showIncludes -Zs'
2636         _cflags_speed="-O2"
2637         _cflags_size="-O1"
2638         # Nonstandard output options, to avoid msys path conversion issues, relies on wrapper to remap it
2639         if $_cc 2>&1 | grep -q Linker; then
2640             _ld_o='-out $@'
2641         else
2642             _ld_o='-Fe$@'
2643         fi
2644         _cc_o='-Fo $@'
2645         _cc_e='-P -Fi $@'
2646         _flags_filter=msvc_flags
2647         _ld_lib='lib%.a'
2648         _ld_path='-libpath:'
2649         _flags='-nologo'
2650         _cflags='-D_USE_MATH_DEFINES -Dinline=__inline -FIstdlib.h -Dstrtoll=_strtoi64'
2651         if [ $pfx = hostcc ]; then
2652             append _cflags -Dsnprintf=_snprintf
2653         fi
2654         disable stripping
2655     fi
2656
2657     eval ${pfx}_type=\$_type
2658     eval ${pfx}_ident=\$_ident
2659 }
2660
2661 set_ccvars(){
2662     eval ${1}_C=\${_cc_c-\${${1}_C}}
2663     eval ${1}_E=\${_cc_e-\${${1}_E}}
2664     eval ${1}_O=\${_cc_o-\${${1}_O}}
2665
2666     if [ -n "$_depflags" ]; then
2667         eval ${1}_DEPFLAGS=\$_depflags
2668     else
2669         eval ${1}DEP=\${_DEPCMD:-\$DEPCMD}
2670         eval ${1}DEP_FLAGS=\${_DEPFLAGS:-\$DEPFLAGS}
2671         eval DEP${1}FLAGS=\$_flags
2672     fi
2673 }
2674
2675 probe_cc cc "$cc"
2676 cflags_filter=$_flags_filter
2677 cflags_speed=$_cflags_speed
2678 cflags_size=$_cflags_size
2679 cflags_noopt=$_cflags_noopt
2680 add_cflags $_flags $_cflags
2681 cc_ldflags=$_ldflags
2682 set_ccvars CC
2683
2684 probe_cc hostcc "$host_cc"
2685 host_cflags_filter=$_flags_filter
2686 add_host_cflags  $_flags $_cflags
2687 set_ccvars HOSTCC
2688
2689 test -n "$cc_type" && enable $cc_type ||
2690     warn "Unknown C compiler $cc, unable to select optimal CFLAGS"
2691
2692 : ${as_default:=$cc}
2693 : ${dep_cc_default:=$cc}
2694 : ${ld_default:=$cc}
2695 : ${host_ld_default:=$host_cc}
2696 set_default ar as dep_cc ld host_ld
2697
2698 probe_cc as "$as"
2699 asflags_filter=$_flags_filter
2700 add_asflags $_flags $_cflags
2701 set_ccvars AS
2702
2703 probe_cc ld "$ld"
2704 ldflags_filter=$_flags_filter
2705 add_ldflags $_flags $_ldflags
2706 test "$cc_type" != "$ld_type" && add_ldflags $cc_ldflags
2707 LD_O=${_ld_o-$LD_O}
2708 LD_LIB=${_ld_lib-$LD_LIB}
2709 LD_PATH=${_ld_path-$LD_PATH}
2710
2711 probe_cc hostld "$host_ld"
2712 host_ldflags_filter=$_flags_filter
2713 add_host_ldflags $_flags $_ldflags
2714 HOSTLD_O=${_ld_o-$HOSTLD_O}
2715
2716 if [ -z "$CC_DEPFLAGS" ] && [ "$dep_cc" != "$cc" ]; then
2717     probe_cc depcc "$dep_cc"
2718     CCDEP=${_DEPCMD:-$DEPCMD}
2719     CCDEP_FLAGS=${_DEPFLAGS:=$DEPFLAGS}
2720     DEPCCFLAGS=$_flags
2721 fi
2722
2723 if $ar 2>&1 | grep -q Microsoft; then
2724     arflags="-nologo"
2725     ar_o='-out:$@'
2726 elif $ar 2>&1 | grep -q 'Texas Instruments'; then
2727     arflags="rq"
2728     ar_o='$@'
2729 else
2730     arflags="rc"
2731     ar_o='$@'
2732 fi
2733
2734 add_cflags $extra_cflags
2735 add_cxxflags $extra_cxxflags
2736 add_asflags $extra_cflags
2737
2738 if test -n "$sysroot"; then
2739     case "$cc_type" in
2740         gcc|llvm_gcc|clang)
2741             add_cppflags --sysroot="$sysroot"
2742             add_ldflags --sysroot="$sysroot"
2743         ;;
2744         tms470)
2745             add_cppflags -I"$sysinclude"
2746             add_ldflags  --sysroot="$sysroot"
2747         ;;
2748     esac
2749 fi
2750
2751 if test "$cpu" = host; then
2752     enabled cross_compile && die "--cpu=host makes no sense when cross-compiling."
2753
2754     case "$cc_type" in
2755         gcc|llvm_gcc)
2756             check_native(){
2757                 $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
2758                 sed -n "/cc1.*$1=/{
2759                             s/.*$1=\\([^ ]*\\).*/\\1/
2760                             p
2761                             q
2762                         }" $TMPE
2763             }
2764             cpu=$(check_native -march || check_native -mcpu)
2765         ;;
2766     esac
2767
2768     test "${cpu:-host}" = host && die "--cpu=host not supported with compiler $cc"
2769 fi
2770
2771 # Deal with common $arch aliases
2772 case "$arch" in
2773     aarch64|arm64)
2774         arch="aarch64"
2775     ;;
2776     arm*|iPad*)
2777         arch="arm"
2778     ;;
2779     mips*|IP*)
2780         arch="mips"
2781     ;;
2782     parisc*|hppa*)
2783         arch="parisc"
2784     ;;
2785     "Power Macintosh"|ppc*|powerpc*)
2786         arch="ppc"
2787     ;;
2788     s390|s390x)
2789         arch="s390"
2790     ;;
2791     sh4|sh)
2792         arch="sh4"
2793     ;;
2794     sun4u|sparc*)
2795         arch="sparc"
2796     ;;
2797     tilegx|tile-gx)
2798         arch="tilegx"
2799     ;;
2800     i[3-6]86|i86pc|BePC|x86pc|x86_64|x86_32|amd64)
2801         arch="x86"
2802     ;;
2803 esac
2804
2805 is_in $arch $ARCH_LIST || warn "unknown architecture $arch"
2806 enable $arch
2807
2808 # Add processor-specific flags
2809 if test "$cpu" = generic; then
2810     : do nothing
2811
2812 elif enabled aarch64; then
2813
2814     case $cpu in
2815         armv*)
2816             cpuflags="-march=$cpu"
2817         ;;
2818         *)
2819             cpuflags="-mcpu=$cpu"
2820         ;;
2821     esac
2822
2823 elif enabled alpha; then
2824
2825     cpuflags="-mcpu=$cpu"
2826
2827 elif enabled arm; then
2828
2829     case $cpu in
2830         armv*)
2831             cpuflags="-march=$cpu"
2832             subarch=$(echo $cpu | sed 's/[^a-z0-9]//g')
2833         ;;
2834         *)
2835             cpuflags="-mcpu=$cpu"
2836             case $cpu in
2837                 cortex-a*)                               subarch=armv7a  ;;
2838                 cortex-r*)                               subarch=armv7r  ;;
2839                 cortex-m*)                 enable thumb; subarch=armv7m  ;;
2840                 arm11*)                                  subarch=armv6   ;;
2841                 arm[79]*e*|arm9[24]6*|arm96*|arm102[26]) subarch=armv5te ;;
2842                 armv4*|arm7*|arm9[24]*)                  subarch=armv4   ;;
2843             esac
2844         ;;
2845     esac
2846
2847 elif enabled avr32; then
2848
2849     case $cpu in
2850         ap7[02]0[0-2])
2851             subarch="avr32_ap"
2852             cpuflags="-mpart=$cpu"
2853         ;;
2854         ap)
2855             subarch="avr32_ap"
2856             cpuflags="-march=$cpu"
2857         ;;
2858         uc3[ab]*)
2859             subarch="avr32_uc"
2860             cpuflags="-mcpu=$cpu"
2861         ;;
2862         uc)
2863             subarch="avr32_uc"
2864             cpuflags="-march=$cpu"
2865         ;;
2866     esac
2867
2868 elif enabled bfin; then
2869
2870     cpuflags="-mcpu=$cpu"
2871
2872 elif enabled mips; then
2873
2874     cpuflags="-march=$cpu"
2875
2876     case $cpu in
2877         24kc)
2878             disable mipsfpu
2879             disable mipsdspr1
2880             disable mipsdspr2
2881         ;;
2882         24kf*)
2883             disable mipsdspr1
2884             disable mipsdspr2
2885         ;;
2886         24kec|34kc|1004kc)
2887             disable mipsfpu
2888             disable mipsdspr2
2889         ;;
2890         24kef*|34kf*|1004kf*)
2891             disable mipsdspr2
2892         ;;
2893         74kc)
2894             disable mipsfpu
2895         ;;
2896     esac
2897
2898 elif enabled ppc; then
2899
2900     case $(tolower $cpu) in
2901         601|ppc601|powerpc601)
2902             cpuflags="-mcpu=601"
2903             disable altivec
2904         ;;
2905         603*|ppc603*|powerpc603*)
2906             cpuflags="-mcpu=603"
2907             disable altivec
2908         ;;
2909         604*|ppc604*|powerpc604*)
2910             cpuflags="-mcpu=604"
2911             disable altivec
2912         ;;
2913         g3|75*|ppc75*|powerpc75*)
2914             cpuflags="-mcpu=750"
2915             disable altivec
2916         ;;
2917         g4|745*|ppc745*|powerpc745*)
2918             cpuflags="-mcpu=7450"
2919         ;;
2920         74*|ppc74*|powerpc74*)
2921             cpuflags="-mcpu=7400"
2922         ;;
2923         g5|970|ppc970|powerpc970)
2924             cpuflags="-mcpu=970"
2925         ;;
2926         power[3-7]*)
2927             cpuflags="-mcpu=$cpu"
2928         ;;
2929         cell)
2930             cpuflags="-mcpu=cell"
2931             enable ldbrx
2932         ;;
2933         e500mc)
2934             cpuflags="-mcpu=e500mc"
2935             disable altivec
2936         ;;
2937         e500v2)
2938             cpuflags="-mcpu=8548 -mhard-float -mfloat-gprs=double"
2939             disable altivec
2940         ;;
2941         e500)
2942             cpuflags="-mcpu=8540 -mhard-float"
2943             disable altivec
2944         ;;
2945     esac
2946
2947 elif enabled sparc; then
2948
2949     case $cpu in
2950         cypress|f93[04]|tsc701|sparcl*|supersparc|hypersparc|niagara|v[789])
2951             cpuflags="-mcpu=$cpu"
2952             disable vis
2953         ;;
2954         ultrasparc*|niagara[234])
2955             cpuflags="-mcpu=$cpu"
2956         ;;
2957     esac
2958
2959 elif enabled x86; then
2960
2961     case $cpu in
2962         i[345]86|pentium)
2963             cpuflags="-march=$cpu"
2964             disable mmx
2965         ;;
2966         # targets that do NOT support conditional mov (cmov)
2967         pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
2968             cpuflags="-march=$cpu"
2969             disable cmov
2970         ;;
2971         # targets that do support conditional mov (cmov)
2972         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*)
2973             cpuflags="-march=$cpu"
2974             enable cmov
2975             enable fast_cmov
2976         ;;
2977         # targets that do support conditional mov but on which it's slow
2978         pentium4|pentium4m|prescott|nocona)
2979             cpuflags="-march=$cpu"
2980             enable cmov
2981             disable fast_cmov
2982         ;;
2983     esac
2984
2985 fi
2986
2987 add_cflags $cpuflags
2988 add_asflags $cpuflags
2989
2990 # compiler sanity check
2991 check_exec <<EOF
2992 int main(void){ return 0; }
2993 EOF
2994 if test "$?" != 0; then
2995     echo "$cc is unable to create an executable file."
2996     if test -z "$cross_prefix" && ! enabled cross_compile ; then
2997         echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
2998         echo "Only do this if you know what cross compiling means."
2999     fi
3000     die "C compiler test failed."
3001 fi
3002
3003 add_cppflags -D_ISOC99_SOURCE
3004 add_cxxflags -D__STDC_CONSTANT_MACROS
3005 check_cflags -std=c99
3006 check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
3007 #include <stdlib.h>
3008 EOF
3009 check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
3010 #include <stdlib.h>
3011 EOF
3012
3013 check_host_cflags -std=c99
3014 check_host_cflags -Wall
3015
3016 check_64bit(){
3017     arch32=$1
3018     arch64=$2
3019     expr=$3
3020     check_code cc "" "int test[2*($expr) - 1]" &&
3021         subarch=$arch64 || subarch=$arch32
3022 }
3023
3024 case "$arch" in
3025     alpha|ia64)
3026         spic=$shared
3027     ;;
3028     mips)
3029         check_64bit mips mips64 '_MIPS_SIM > 1'
3030         spic=$shared
3031     ;;
3032     parisc)
3033         check_64bit parisc parisc64 'sizeof(void *) > 4'
3034         spic=$shared
3035     ;;
3036     ppc)
3037         check_64bit ppc ppc64 'sizeof(void *) > 4'
3038         spic=$shared
3039     ;;
3040     sparc)
3041         check_64bit sparc sparc64 'sizeof(void *) > 4'
3042         spic=$shared
3043     ;;
3044     x86)
3045         check_64bit x86_32 x86_64 'sizeof(void *) > 4'
3046         if test "$subarch" = "x86_64"; then
3047             spic=$shared
3048         fi
3049     ;;
3050     ppc)
3051         check_cc <<EOF && subarch="ppc64"
3052         int test[(int)sizeof(char*) - 7];
3053 EOF
3054     ;;
3055 esac
3056
3057 enable $subarch
3058 enabled spic && enable pic
3059
3060 # OS specific
3061 case $target_os in
3062     haiku)
3063         prefix_default="/boot/common"
3064         network_extralibs="-lnetwork"
3065         host_libs=
3066         ;;
3067     sunos)
3068         FFSERVERLDFLAGS=""
3069         SHFLAGS='-shared -Wl,-h,$$(@F)'
3070         enabled x86 && SHFLAGS="-mimpure-text $SHFLAGS"
3071         network_extralibs="-lsocket -lnsl"
3072         add_cppflags -D__EXTENSIONS__ -D_XOPEN_SOURCE=600
3073         # When using suncc to build, the Solaris linker will mark
3074         # an executable with each instruction set encountered by
3075         # the Solaris assembler.  As our libraries contain their own
3076         # guards for processor-specific code, instead suppress
3077         # generation of the HWCAPS ELF section on Solaris x86 only.
3078         enabled_all suncc x86 && echo "hwcap_1 = OVERRIDE;" > mapfile && add_ldflags -Wl,-M,mapfile
3079         nm_default='nm -P -g'
3080         ;;
3081     netbsd)
3082         disable symver
3083         oss_indev_extralibs="-lossaudio"
3084         oss_outdev_extralibs="-lossaudio"
3085         enabled gcc || check_ldflags -Wl,-zmuldefs
3086         ;;
3087     openbsd|bitrig)
3088         # On OpenBSD 4.5. the compiler does not use PIC unless
3089         # explicitly using -fPIC. FFmpeg builds fine without PIC,
3090         # however the generated executable will not do anything
3091         # (simply quits with exit-code 1, no crash, no output).
3092         # Thus explicitly enable PIC here.
3093         enable pic
3094         disable symver
3095         SHFLAGS='-shared'
3096         SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBVERSION)'
3097         SLIB_INSTALL_LINKS=
3098         oss_indev_extralibs="-lossaudio"
3099         oss_outdev_extralibs="-lossaudio"
3100         ;;
3101     dragonfly)
3102         disable symver
3103         ;;
3104     freebsd)
3105         ;;
3106     bsd/os)
3107         add_extralibs -lpoll -lgnugetopt
3108         strip="strip -d"
3109         ;;
3110     darwin)
3111         gas="gas-preprocessor.pl $cc"
3112         enabled ppc && add_asflags -force_cpusubtype_ALL
3113         SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR)'
3114         enabled x86_32 && append SHFLAGS -Wl,-read_only_relocs,suppress
3115         strip="${strip} -x"
3116         add_ldflags -Wl,-dynamic,-search_paths_first
3117         SLIBSUF=".dylib"
3118         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
3119         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
3120         FFSERVERLDFLAGS=-Wl,-bind_at_load
3121         objformat="macho"
3122         enabled x86_64 && objformat="macho64"
3123         enabled_any pic shared ||
3124             { check_cflags -mdynamic-no-pic && add_asflags -mdynamic-no-pic; }
3125         ;;
3126     mingw32*)
3127         if test $target_os = "mingw32ce"; then
3128             disable network
3129         else
3130             target_os=mingw32
3131         fi
3132         LIBTARGET=i386
3133         if enabled x86_64; then
3134             LIBTARGET="i386:x86-64"
3135         elif enabled arm; then
3136             LIBTARGET=arm-wince
3137         fi
3138         shlibdir_default="$bindir_default"
3139         SLIBPREF=""
3140         SLIBSUF=".dll"
3141         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
3142         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
3143         dlltool="${cross_prefix}dlltool"
3144         if check_cmd lib.exe -list; then
3145             SLIB_EXTRA_CMD=-'sed -e "s/ @[^ ]*//" $$(@:$(SLIBSUF)=.orig.def) > $$(@:$(SLIBSUF)=.def); lib.exe /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib)'
3146             if enabled x86_64; then
3147                 LIBTARGET=x64
3148             fi
3149         elif check_cmd $dlltool --version; then
3150             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)'
3151         fi
3152         SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
3153         SLIB_INSTALL_LINKS=
3154         SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
3155         SLIB_INSTALL_EXTRA_LIB='lib$(SLIBNAME:$(SLIBSUF)=.dll.a) $(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
3156         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'
3157         objformat="win32"
3158         ranlib=:
3159         enable dos_paths
3160         add_cppflags -U__STRICT_ANSI__
3161         ;;
3162     win32|win64)
3163         if enabled shared; then
3164             # Link to the import library instead of the normal static library
3165             # for shared libs.
3166             LD_LIB='%.lib'
3167             # Cannot build shared and static libraries at the same time with
3168             # MSVC.
3169             disable static
3170         fi
3171         shlibdir_default="$bindir_default"
3172         SLIBPREF=""
3173         SLIBSUF=".dll"
3174         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
3175         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
3176         SLIB_CREATE_DEF_CMD='makedef $(SUBDIR)lib$(NAME).ver $(OBJS) > $$(@:$(SLIBSUF)=.def)'
3177         SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
3178         SLIB_INSTALL_LINKS=
3179         SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
3180         SLIB_INSTALL_EXTRA_LIB='$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
3181         SHFLAGS='-dll -def:$$(@:$(SLIBSUF)=.def) -implib:$(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib)'
3182         objformat="win32"
3183         ranlib=:
3184         enable dos_paths
3185         ;;
3186     cygwin*)
3187         target_os=cygwin
3188         shlibdir_default="$bindir_default"
3189         SLIBPREF="cyg"
3190         SLIBSUF=".dll"
3191         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
3192         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
3193         SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
3194         SLIB_INSTALL_LINKS=
3195         SLIB_INSTALL_EXTRA_LIB='lib$(FULLNAME).dll.a'
3196         SHFLAGS='-shared -Wl,--out-implib,$(SUBDIR)lib$(FULLNAME).dll.a'
3197         objformat="win32"
3198         enable dos_paths
3199         ;;
3200     *-dos|freedos|opendos)
3201         network_extralibs="-lsocket"
3202         objformat="coff"
3203         enable dos_paths
3204         add_cppflags -U__STRICT_ANSI__
3205         ;;
3206     linux)
3207         enable dv1394
3208         ;;
3209     irix*)
3210         target_os=irix
3211         ranlib="echo ignoring ranlib"
3212         ;;
3213     os/2*)
3214         strip="lxlite -CS"
3215         ln_s="cp -f"
3216         objformat="aout"
3217         add_cppflags -D_GNU_SOURCE
3218         add_ldflags -Zomf -Zbin-files -Zargs-wild -Zmap
3219         SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
3220         FFSERVERLDFLAGS=""
3221         LIBSUF="_s.a"
3222         SLIBPREF=""
3223         SLIBSUF=".dll"
3224         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
3225         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
3226         SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
3227             echo PROTMODE >> $(SUBDIR)$(NAME).def; \
3228             echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
3229             echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
3230             echo EXPORTS >> $(SUBDIR)$(NAME).def; \
3231             emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
3232         SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
3233             emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
3234         SLIB_INSTALL_EXTRA_LIB='$(LIBPREF)$(NAME)_dll.a $(LIBPREF)$(NAME)_dll.lib'
3235         enable dos_paths
3236         enable_weak os2threads
3237         ;;
3238     gnu/kfreebsd)
3239         add_cppflags -D_BSD_SOURCE
3240         ;;
3241     gnu)
3242         ;;
3243     qnx)
3244         add_cppflags -D_QNX_SOURCE
3245         network_extralibs="-lsocket"
3246         ;;
3247     symbian)
3248         SLIBSUF=".dll"
3249         enable dos_paths
3250         add_cflags --include=$sysinclude/gcce/gcce.h -fvisibility=default
3251         add_cppflags -D__GCCE__ -D__SYMBIAN32__ -DSYMBIAN_OE_POSIX_SIGNALS
3252         add_ldflags -Wl,--target1-abs,--no-undefined \
3253                     -Wl,-Ttext,0x80000,-Tdata,0x1000000 -shared \
3254                     -Wl,--entry=_E32Startup -Wl,-u,_E32Startup
3255         add_extralibs -l:eexe.lib -l:usrt2_2.lib -l:dfpaeabi.dso \
3256                       -l:drtaeabi.dso -l:scppnwdl.dso -lsupc++ -lgcc \
3257                       -l:libc.dso -l:libm.dso -l:euser.dso -l:libcrt0.lib
3258         ;;
3259     osf1)
3260         add_cppflags -D_OSF_SOURCE -D_POSIX_PII -D_REENTRANT
3261         FFSERVERLDFLAGS=
3262         ;;
3263     minix)
3264         ;;
3265     plan9)
3266         add_cppflags -D_C99_SNPRINTF_EXTENSION  \
3267                      -D_REENTRANT_SOURCE        \
3268                      -D_RESEARCH_SOURCE         \
3269                      -DFD_SETSIZE=96            \
3270                      -DHAVE_SOCK_OPTS
3271         add_compat strtod.o strtod=avpriv_strtod
3272         network_extralibs='-lbsd'
3273         exeobjs=compat/plan9/main.o
3274         disable ffserver
3275         ln_s='ln -s -f'
3276         cp_f='cp'
3277         ;;
3278     none)
3279         ;;
3280     *)
3281         die "Unknown OS '$target_os'."
3282         ;;
3283 esac
3284
3285 # determine libc flavour
3286
3287 if check_cpp_condition features.h "defined __UCLIBC__"; then
3288     libc_type=uclibc
3289     add_cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
3290 elif check_cpp_condition features.h "defined __GLIBC__"; then
3291     libc_type=glibc
3292     add_cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
3293 elif check_header _mingw.h; then
3294     libc_type=mingw
3295     check_cpp_condition _mingw.h \
3296         "defined (__MINGW64_VERSION_MAJOR) || (__MINGW32_MAJOR_VERSION > 3) || \
3297             (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
3298         die "ERROR: MinGW runtime version must be >= 3.15."
3299     if check_cpp_condition _mingw.h "defined(__MINGW64_VERSION_MAJOR) && \
3300             __MINGW64_VERSION_MAJOR < 3"; then
3301         add_compat msvcrt/snprintf.o
3302         add_cflags "-include $source_path/compat/msvcrt/snprintf.h"
3303     fi
3304 elif check_cpp_condition newlib.h "defined _NEWLIB_VERSION"; then
3305     libc_type=newlib
3306     add_cppflags -U__STRICT_ANSI__
3307 elif check_func_headers stdlib.h _get_doserrno; then
3308     libc_type=msvcrt
3309     add_compat strtod.o strtod=avpriv_strtod
3310     add_compat msvcrt/snprintf.o snprintf=avpriv_snprintf   \
3311                                  _snprintf=avpriv_snprintf  \
3312                                  vsnprintf=avpriv_vsnprintf
3313 elif check_cpp_condition stddef.h "defined __KLIBC__"; then
3314     libc_type=klibc
3315 fi
3316
3317 test -n "$libc_type" && enable $libc_type
3318
3319 # hacks for compiler/libc/os combinations
3320
3321 if enabled_all tms470 glibc; then
3322     CPPFLAGS="-I${source_path}/compat/tms470 ${CPPFLAGS}"
3323     add_cppflags -D__USER_LABEL_PREFIX__=
3324     add_cppflags -D__builtin_memset=memset
3325     add_cppflags -D__gnuc_va_list=va_list -D_VA_LIST_DEFINED
3326     add_cflags   -pds=48    # incompatible redefinition of macro
3327 fi
3328
3329 if enabled_all ccc glibc; then
3330     add_ldflags -Wl,-z,now  # calls to libots crash without this
3331 fi
3332
3333 esc(){
3334     echo "$*" | sed 's/%/%25/g;s/:/%3a/g'
3335 }
3336
3337 echo "config:$arch:$subarch:$cpu:$target_os:$(esc $cc_ident):$(esc $FFMPEG_CONFIGURATION)" >config.fate
3338
3339 check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable pic
3340
3341 set_default $PATHS_LIST
3342 set_default nm
3343
3344 # we need to build at least one lib type
3345 if ! enabled_any static shared; then
3346     cat <<EOF
3347 At least one library type must be built.
3348 Specify --enable-static to build the static libraries or --enable-shared to
3349 build the shared libraries as well. To only build the shared libraries specify
3350 --disable-static in addition to --enable-shared.
3351 EOF
3352     exit 1;
3353 fi
3354
3355 die_license_disabled() {
3356     enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
3357 }
3358
3359 die_license_disabled_gpl() {
3360     enabled $1 || { enabled $2 && die "$2 is incompatible with the gpl and --enable-$1 is not specified."; }
3361 }
3362
3363 die_license_disabled gpl libcdio
3364 die_license_disabled gpl libutvideo
3365 die_license_disabled gpl libx264
3366 die_license_disabled gpl libxavs
3367 die_license_disabled gpl libxvid
3368 die_license_disabled gpl x11grab
3369
3370 die_license_disabled nonfree libaacplus
3371 die_license_disabled nonfree libfaac
3372 enabled gpl && die_license_disabled_gpl nonfree libfdk_aac
3373 enabled gpl && die_license_disabled_gpl nonfree openssl
3374
3375 die_license_disabled version3 libopencore_amrnb
3376 die_license_disabled version3 libopencore_amrwb
3377 die_license_disabled version3 libvo_aacenc
3378 die_license_disabled version3 libvo_amrwbenc
3379
3380 enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
3381
3382 disabled optimizations || check_cflags -fomit-frame-pointer
3383
3384 enable_pic() {
3385     enable pic
3386     add_cppflags -DPIC
3387     add_cflags   -fPIC
3388     add_asflags  -fPIC
3389 }
3390
3391 enabled pic && enable_pic
3392
3393 check_cc <<EOF || die "Symbol mangling check failed."
3394 int ff_extern;
3395 EOF
3396 sym=$($nm $TMPO | awk '/ff_extern/{ print substr($0, match($0, /[^ \t]*ff_extern/)) }')
3397 extern_prefix=${sym%%ff_extern*}
3398
3399 check_cc <<EOF && enable_weak inline_asm
3400 void foo(void) { __asm__ volatile ("" ::); }
3401 EOF
3402
3403 _restrict=
3404 for restrict_keyword in restrict __restrict__ __restrict; do
3405     check_cc <<EOF && _restrict=$restrict_keyword && break
3406 void foo(char * $restrict_keyword p);
3407 EOF
3408 done
3409
3410 check_cc <<EOF && enable attribute_packed
3411 struct { int x; } __attribute__((packed)) x;
3412 EOF
3413
3414 check_cc <<EOF && enable attribute_may_alias
3415 union { int x; } __attribute__((may_alias)) x;
3416 EOF
3417
3418 check_cc <<EOF || die "endian test failed"
3419 unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
3420 EOF
3421 od -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
3422
3423 if enabled alpha; then
3424
3425     check_cflags -mieee
3426
3427 elif enabled arm; then
3428
3429     check_cpp_condition stddef.h "defined __thumb__" && check_cc <<EOF && enable_weak thumb
3430 float func(float a, float b){ return a+b; }
3431 EOF
3432
3433     enabled thumb && check_cflags -mthumb || check_cflags -marm
3434     nogas=die
3435
3436     if     check_cpp_condition stddef.h "defined __ARM_PCS_VFP"; then
3437         enable vfp_args
3438     elif ! check_cpp_condition stddef.h "defined __ARM_PCS || defined __SOFTFP__"; then
3439         case "${cross_prefix:-$cc}" in
3440             *hardfloat*)         enable vfp_args;   fpabi=vfp ;;
3441             *) check_ld "cc" <<EOF && enable vfp_args && fpabi=vfp || fpabi=soft ;;
3442 __asm__ (".eabi_attribute 28, 1");
3443 int main(void) { return 0; }
3444 EOF
3445         esac
3446         warn "Compiler does not indicate floating-point ABI, guessing $fpabi."
3447     fi
3448
3449     enabled armv5te && check_inline_asm armv5te '"qadd r0, r0, r0"'
3450     enabled armv6   && check_inline_asm armv6   '"sadd16 r0, r0, r0"'
3451     enabled armv6t2 && check_inline_asm armv6t2 '"movt r0, #0"'
3452     enabled armvfp  && check_inline_asm armvfp  '"fadds s0, s0, s0"'
3453     enabled neon    && check_inline_asm neon    '"vadd.i16 q0, q0, q0"'
3454     enabled vfpv3   && check_inline_asm vfpv3   '"vmov.f32 s0, #1.0"'
3455
3456     check_inline_asm asm_mod_q '"add r0, %Q0, %R0" :: "r"((long long)0)'
3457     check_inline_asm asm_mod_y '"vmul.i32 d0, d0, %y0" :: "x"(0)'
3458
3459     enabled_all armv6t2 shared !pic && enable_pic
3460
3461 elif enabled mips; then
3462
3463     check_inline_asm loongson '"dmult.g $1, $2, $3"'
3464     enabled mips32r2  && add_cflags "-mips32r2" && add_asflags "-mips32r2" &&
3465      check_inline_asm mips32r2  '"rotr $t0, $t1, 1"'
3466     enabled mipsdspr1 && add_cflags "-mdsp" && add_asflags "-mdsp" &&
3467      check_inline_asm mipsdspr1 '"addu.qb $t0, $t1, $t2"'
3468     enabled mipsdspr2 && add_cflags "-mdspr2" && add_asflags "-mdspr2" &&
3469      check_inline_asm mipsdspr2 '"absq_s.qb $t0, $t1"'
3470     enabled mipsfpu   && add_cflags "-mhard-float" && add_asflags "-mhard-float" &&
3471      check_inline_asm mipsfpu   '"madd.d $f0, $f2, $f4, $f6"'
3472
3473 elif enabled parisc; then
3474
3475     if enabled gcc; then
3476         case $($cc -dumpversion) in
3477             4.[3-8].*) check_cflags -fno-optimize-sibling-calls ;;
3478         esac
3479     fi
3480
3481 elif enabled ppc; then
3482
3483     enable local_aligned_8 local_aligned_16
3484
3485     check_inline_asm dcbzl     '"dcbzl 0, %0" :: "r"(0)'
3486     check_inline_asm ibm_asm   '"add 0, 0, 0"'
3487     check_inline_asm ppc4xx    '"maclhw r10, r11, r12"'
3488     check_inline_asm xform_asm '"lwzx %1, %y0" :: "Z"(*(int*)0), "r"(0)'
3489
3490     # AltiVec flags: The FSF version of GCC differs from the Apple version
3491     if enabled altivec; then
3492         nogas=warn
3493         check_cflags -maltivec -mabi=altivec &&
3494         { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
3495         check_cflags -faltivec
3496
3497         # check if our compiler supports Motorola AltiVec C API
3498         check_cc <<EOF || disable altivec
3499 $inc_altivec_h
3500 int main(void) {
3501     vector signed int v1 = (vector signed int) { 0 };
3502     vector signed int v2 = (vector signed int) { 1 };
3503     v1 = vec_add(v1, v2);
3504     return 0;
3505 }
3506 EOF
3507
3508         enabled altivec || warn "Altivec disabled, possibly missing --cpu flag"
3509     fi
3510
3511 elif enabled sparc; then
3512
3513     enabled vis && check_inline_asm vis '"pdist %f0, %f0, %f0"'
3514
3515 elif enabled x86; then
3516
3517     check_code ld intrin.h "__rdtsc()" "cc" && enable rdtsc
3518
3519     check_code ld mmintrin.h "_mm_empty()" "cc" && enable mm_empty
3520
3521     enable local_aligned_8 local_aligned_16
3522
3523     # check whether EBP is available on x86
3524     # As 'i' is stored on the stack, this program will crash
3525     # if the base pointer is used to access it because the
3526     # base pointer is cleared in the inline assembly code.
3527     check_exec_crash <<EOF && enable ebp_available
3528 volatile int i=0;
3529 __asm__ volatile ("xorl %%ebp, %%ebp" ::: "%ebp");
3530 return i;
3531 EOF
3532
3533     # check whether EBX is available on x86
3534     check_inline_asm ebx_available '""::"b"(0)' &&
3535         check_inline_asm ebx_available '"":::"%ebx"'
3536
3537     # check whether xmm clobbers are supported
3538     check_inline_asm xmm_clobbers '"":::"%xmm0"'
3539
3540     # check whether binutils is new enough to compile SSSE3/MMXEXT
3541     enabled ssse3  && check_inline_asm ssse3_inline  '"pabsw %xmm0, %xmm0"'
3542     enabled mmxext && check_inline_asm mmxext_inline '"pmaxub %mm0, %mm1"'
3543
3544     if ! disabled_any asm mmx yasm; then
3545         if check_cmd $yasmexe --version; then
3546             enabled x86_64 && yasm_extra="-m amd64"
3547             yasm_debug="-g dwarf2"
3548         elif check_cmd nasm -v; then
3549             yasmexe=nasm
3550             yasm_debug="-g -F dwarf"
3551             enabled x86_64 && test "$objformat" = elf && objformat=elf64
3552         fi
3553
3554         YASMFLAGS="-f $objformat $yasm_extra"
3555         enabled pic               && append YASMFLAGS "-DPIC"
3556         test -n "$extern_prefix"  && append YASMFLAGS "-DPREFIX"
3557         case "$objformat" in
3558             elf*) enabled debug && append YASMFLAGS $yasm_debug ;;
3559         esac
3560
3561         check_yasm "pextrd [eax], xmm0, 1" && enable yasm ||
3562             die "yasm not found, use --disable-yasm for a crippled build"
3563         check_yasm "vextractf128 xmm0, ymm0, 0"      || disable avx_external
3564         check_yasm "vfmaddps ymm0, ymm1, ymm2, ymm3" || disable fma4_external
3565         check_yasm "CPU amdnop" && enable cpunop
3566     fi
3567
3568     case "$cpu" in
3569         athlon*|opteron*|k8*|pentium|pentium-mmx|prescott|nocona|atom|geode)
3570             disable fast_clz
3571         ;;
3572     esac
3573
3574 fi
3575
3576 if enabled asm; then
3577     as=${gas:=$as}
3578     check_inline_asm gnu_as '".macro m n\n\\n:.int 0\n.endm\nm x"' ||
3579         $nogas "GNU assembler not found, install gas-preprocessor"
3580 fi
3581
3582 check_ldflags -Wl,--as-needed
3583
3584 if check_func dlopen; then
3585     ldl=
3586 elif check_func dlopen -ldl; then
3587     ldl=-ldl
3588 fi
3589
3590 if enabled network; then
3591     check_type "sys/types.h sys/socket.h" socklen_t
3592     check_type netdb.h "struct addrinfo"
3593     check_type netinet/in.h "struct group_source_req" -D_BSD_SOURCE
3594     check_type netinet/in.h "struct ip_mreq_source" -D_BSD_SOURCE
3595     check_type netinet/in.h "struct ipv6_mreq" -D_DARWIN_C_SOURCE
3596     check_type netinet/in.h "struct sockaddr_in6"
3597     check_type poll.h "struct pollfd"
3598     check_type "sys/types.h sys/socket.h" "struct sockaddr_storage"
3599     check_struct "sys/types.h sys/socket.h" "struct sockaddr" sa_len
3600     check_type netinet/sctp.h "struct sctp_event_subscribe"
3601     check_func getaddrinfo $network_extralibs
3602     check_func getservbyport $network_extralibs
3603     # Prefer arpa/inet.h over winsock2
3604     if check_header arpa/inet.h ; then
3605         check_func closesocket
3606     elif check_header winsock2.h ; then
3607         check_func_headers winsock2.h closesocket -lws2 &&
3608             network_extralibs="-lws2" ||
3609         { check_func_headers winsock2.h closesocket -lws2_32 &&
3610             network_extralibs="-lws2_32"; }
3611         check_func_headers ws2tcpip.h getaddrinfo $network_extralibs
3612         check_type ws2tcpip.h socklen_t
3613         check_type ws2tcpip.h "struct addrinfo"
3614         check_type ws2tcpip.h "struct group_source_req"
3615         check_type ws2tcpip.h "struct ip_mreq_source"
3616         check_type ws2tcpip.h "struct ipv6_mreq"
3617         check_type winsock2.h "struct pollfd"
3618         check_type ws2tcpip.h "struct sockaddr_in6"
3619         check_type ws2tcpip.h "struct sockaddr_storage"
3620         check_struct winsock2.h "struct sockaddr" sa_len
3621     else
3622         disable network
3623     fi
3624 fi
3625
3626 # Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
3627 check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
3628
3629 check_func  access
3630 check_func  clock_gettime || { check_func clock_gettime -lrt && add_extralibs -lrt; }
3631 check_func  fcntl
3632 check_func  fork
3633 check_func  gethrtime
3634 check_func  getopt
3635 check_func  getrusage
3636 check_struct "sys/time.h sys/resource.h" "struct rusage" ru_maxrss
3637 check_func  gettimeofday
3638 check_func  inet_aton $network_extralibs
3639 check_func  isatty
3640 check_func  localtime_r
3641 check_func  ${malloc_prefix}memalign            && enable memalign
3642 check_func  mkstemp
3643 check_func  mmap
3644 check_func  mprotect
3645 check_func  ${malloc_prefix}posix_memalign      && enable posix_memalign
3646 check_func_headers malloc.h _aligned_malloc     && enable aligned_malloc
3647 check_func  setrlimit
3648 check_func  strerror_r
3649 check_func  sched_getaffinity
3650 check_func  sysconf
3651 check_func  sysctl
3652 check_func  usleep
3653 check_func_headers conio.h kbhit
3654 check_func_headers windows.h PeekNamedPipe
3655 check_func_headers io.h setmode
3656 check_func_headers lzo/lzo1x.h lzo1x_999_compress
3657 check_lib2 "windows.h shellapi.h" CommandLineToArgvW -lshell32
3658 check_lib2 "windows.h wincrypt.h" CryptGenRandom -ladvapi32
3659 check_lib2 "windows.h psapi.h" GetProcessMemoryInfo -lpsapi
3660 check_func_headers windows.h GetProcessAffinityMask
3661 check_func_headers windows.h GetProcessTimes
3662 check_func_headers windows.h GetSystemTimeAsFileTime
3663 check_func_headers windows.h MapViewOfFile
3664 check_func_headers windows.h SetConsoleTextAttribute
3665 check_func_headers windows.h Sleep
3666 check_func_headers windows.h VirtualAlloc
3667 check_func_headers glob.h glob
3668
3669 check_header direct.h
3670 check_header dlfcn.h
3671 check_header dxva.h
3672 check_header dxva2api.h -D_WIN32_WINNT=0x0600
3673 check_header io.h
3674 check_header libcrystalhd/libcrystalhd_if.h
3675 check_header malloc.h
3676 check_header poll.h
3677 check_header sys/mman.h
3678 check_header sys/param.h
3679 check_header sys/resource.h
3680 check_header sys/select.h
3681 check_header sys/time.h
3682 check_header termios.h
3683 check_header unistd.h
3684 check_header vdpau/vdpau.h
3685 check_header vdpau/vdpau_x11.h
3686 check_header windows.h
3687 check_header X11/extensions/XvMClib.h
3688 check_header asm/types.h
3689
3690 disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
3691 disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
3692
3693 # check for VDA header
3694 if ! disabled vda && ! enabled ppc; then
3695     if check_header VideoDecodeAcceleration/VDADecoder.h; then
3696         enable vda
3697         add_extralibs -framework CoreFoundation -framework VideoDecodeAcceleration -framework QuartzCore
3698     fi
3699 fi
3700
3701 if ! disabled w32threads && ! enabled pthreads; then
3702     check_func_headers "windows.h process.h" _beginthreadex && enable w32threads
3703 fi
3704
3705 # check for some common methods of building with pthread support
3706 # do this before the optional library checks as some of them require pthreads
3707 if ! disabled pthreads && ! enabled w32threads && ! enabled os2threads; then
3708     enable pthreads
3709     if check_func pthread_create; then
3710         :
3711     elif check_func pthread_create -pthread; then
3712         add_cflags -pthread
3713         add_extralibs -pthread
3714     elif check_func pthread_create -pthreads; then
3715         add_cflags -pthreads
3716         add_extralibs -pthreads
3717     elif check_func pthread_create -lpthreadGC2; then
3718         add_extralibs -lpthreadGC2
3719     elif ! check_lib pthread.h pthread_create -lpthread; then
3720         disable pthreads
3721     fi
3722 fi
3723
3724 for thread in $THREADS_LIST; do
3725     if enabled $thread; then
3726         test -n "$thread_type" &&
3727             die "ERROR: Only one thread type must be selected." ||
3728             thread_type="$thread"
3729     fi
3730 done
3731
3732 if enabled pthreads; then
3733   check_func pthread_cancel
3734 fi
3735
3736 check_lib math.h sin -lm && LIBM="-lm"
3737 disabled crystalhd || check_lib libcrystalhd/libcrystalhd_if.h DtsCrystalHDVersion -lcrystalhd || disable crystalhd
3738 enabled vaapi && require vaapi va/va.h vaInitialize -lva
3739
3740 atan2f_args=2
3741 ldexpf_args=2
3742 powf_args=2
3743
3744 for func in $MATH_FUNCS; do
3745     eval check_mathfunc $func \${${func}_args:-1}
3746 done
3747
3748 # these are off by default, so fail if requested and not available
3749 enabled avisynth   && require2 vfw32 "windows.h vfw.h" AVIFileInit -lavifil32
3750 enabled fontconfig && require_pkg_config fontconfig "fontconfig/fontconfig.h" FcInit
3751 enabled frei0r     && { check_header frei0r.h || die "ERROR: frei0r.h header not found"; }
3752 enabled gnutls     && require_pkg_config gnutls gnutls/gnutls.h gnutls_global_init
3753 enabled libiec61883 && require libiec61883 libiec61883/iec61883.h iec61883_cmp_connect -lraw1394 -lavc1394 -lrom1394 -liec61883
3754 enabled libaacplus && require  "libaacplus >= 2.0.0" aacplus.h aacplusEncOpen -laacplus
3755 enabled libass     && require_pkg_config libass ass/ass.h ass_library_init
3756 enabled libbluray  && require libbluray libbluray/bluray.h bd_open -lbluray
3757 enabled libcdio    && require2 libcdio "cdio/cdda.h cdio/paranoia.h" cdio_cddap_open -lcdio_paranoia -lcdio_cdda -lcdio
3758 enabled libcelt    && require libcelt celt/celt.h celt_decode -lcelt0 &&
3759                       { check_lib celt/celt.h celt_decoder_create_custom -lcelt0 ||
3760                         die "ERROR: libcelt must be installed and version must be >= 0.11.0."; }
3761 enabled libcaca    && require_pkg_config caca caca.h caca_create_canvas
3762 enabled libfaac    && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
3763 enabled libfdk_aac && require  libfdk_aac fdk-aac/aacenc_lib.h aacEncOpen -lfdk-aac
3764 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"
3765 enabled libflite   && require2 libflite "flite/flite.h" flite_init $flite_libs
3766 enabled libfreetype && require_pkg_config freetype2 "ft2build.h freetype/freetype.h" FT_Init_FreeType
3767 enabled libgsm     && require  libgsm gsm/gsm.h gsm_create -lgsm
3768 enabled libilbc    && require  libilbc ilbc.h WebRtcIlbcfix_InitDecode -lilbc
3769 enabled libmodplug && require  libmodplug libmodplug/modplug.h ModPlug_Load -lmodplug
3770 enabled libmp3lame && require  "libmp3lame >= 3.98.3" lame/lame.h lame_set_VBR_quality -lmp3lame
3771 enabled libnut     && require  libnut libnut.h nut_demuxer_init -lnut
3772 enabled libopencore_amrnb  && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb
3773 enabled libopencore_amrwb  && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb
3774 enabled libopencv  && require_pkg_config opencv opencv/cxcore.h cvCreateImageHeader
3775 enabled libopenjpeg && require libopenjpeg openjpeg.h opj_version -lopenjpeg
3776 enabled libopus    && require_pkg_config opus opus_multistream.h opus_multistream_decoder_create
3777 enabled libpulse && require_pkg_config libpulse-simple pulse/simple.h pa_simple_new
3778 enabled librtmp    && require_pkg_config librtmp librtmp/rtmp.h RTMP_Socket
3779 enabled libschroedinger && require_pkg_config schroedinger-1.0 schroedinger/schro.h schro_init
3780 enabled libspeex   && require  libspeex speex/speex.h speex_decoder_init -lspeex
3781 enabled libstagefright_h264  && require_cpp libstagefright_h264 "binder/ProcessState.h media/stagefright/MetaData.h
3782     media/stagefright/MediaBufferGroup.h media/stagefright/MediaDebug.h media/stagefright/MediaDefs.h
3783     media/stagefright/OMXClient.h media/stagefright/OMXCodec.h" android::OMXClient -lstagefright -lmedia -lutils -lbinder -lgnustl_static
3784 enabled libtheora  && require  libtheora theora/theoraenc.h th_info_init -ltheoraenc -ltheoradec -logg
3785 enabled libtwolame && require  libtwolame twolame.h twolame_init -ltwolame &&
3786                       { check_lib twolame.h twolame_encode_buffer_float32_interleaved -ltwolame ||
3787                         die "ERROR: libtwolame must be installed and version must be >= 0.3.10"; }
3788 enabled libutvideo    && require_cpp utvideo "stdint.h stdlib.h utvideo/utvideo.h utvideo/Codec.h" 'CCodec*' -lutvideo -lstdc++
3789 enabled libv4l2    && require_pkg_config libv4l2 libv4l2.h v4l2_ioctl
3790 enabled libvo_aacenc && require libvo_aacenc vo-aacenc/voAAC.h voGetAACEncAPI -lvo-aacenc
3791 enabled libvo_amrwbenc && require libvo_amrwbenc vo-amrwbenc/enc_if.h E_IF_init -lvo-amrwbenc
3792 enabled libvorbis  && require  libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
3793 enabled libvpx     && {
3794     enabled libvpx_decoder && { check_lib2 "vpx/vpx_decoder.h vpx/vp8dx.h" vpx_codec_dec_init_ver -lvpx ||
3795                                 die "ERROR: libvpx decoder must be installed and version must be >=0.9.1"; }
3796     enabled libvpx_encoder && { check_lib2 "vpx/vpx_encoder.h vpx/vp8cx.h" "vpx_codec_enc_init_ver VP8E_SET_MAX_INTRA_BITRATE_PCT" -lvpx ||
3797                                 die "ERROR: libvpx encoder version must be >=0.9.7"; } }
3798 enabled libx264    && require  libx264 x264.h x264_encoder_encode -lx264 &&
3799                       { check_cpp_condition x264.h "X264_BUILD >= 118" ||
3800                         die "ERROR: libx264 must be installed and version must be >= 0.118."; }
3801 enabled libxavs    && require  libxavs xavs.h xavs_encoder_encode -lxavs
3802 enabled libxvid    && require  libxvid xvid.h xvid_global -lxvidcore
3803 enabled openal     && { { for al_libs in "${OPENAL_LIBS}" "-lopenal" "-lOpenAL32"; do
3804                         check_lib 'AL/al.h' alGetError "${al_libs}" && break; done } ||
3805                         die "ERROR: openal not found"; } &&
3806                       { check_cpp_condition "AL/al.h" "defined(AL_VERSION_1_1)" ||
3807                         die "ERROR: openal must be installed and version must be 1.1 or compatible"; }
3808 enabled openssl    && { check_lib openssl/ssl.h SSL_library_init -lssl -lcrypto ||
3809                         check_lib openssl/ssl.h SSL_library_init -lssl32 -leay32 ||
3810                         check_lib openssl/ssl.h SSL_library_init -lssl -lcrypto -lws2_32 -lgdi32 ||
3811                         die "ERROR: openssl not found"; }
3812
3813 if enabled gnutls; then
3814     { check_lib nettle/bignum.h nettle_mpz_get_str_256 -lnettle -lhogweed -lgmp && enable nettle; } ||
3815     { check_lib gcrypt.h gcry_mpi_new -lgcrypt && enable gcrypt; }
3816 fi
3817
3818 # libdc1394 check
3819 if enabled libdc1394; then
3820     { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
3821         enable libdc1394_2; } ||
3822     { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
3823         enable libdc1394_1; } ||
3824     die "ERROR: No version of libdc1394 found "
3825 fi
3826
3827 SDL_CONFIG="${cross_prefix}sdl-config"
3828 if check_pkg_config sdl SDL_events.h SDL_PollEvent; then
3829     check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
3830     enable sdl &&
3831     check_struct SDL.h SDL_VideoInfo current_w $sdl_cflags && enable sdl_video_size
3832 else
3833   if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
3834     sdl_cflags=$("${SDL_CONFIG}" --cflags)
3835     sdl_libs=$("${SDL_CONFIG}" --libs)
3836     check_func_headers SDL_version.h SDL_Linked_Version $sdl_cflags $sdl_libs &&
3837     check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
3838     enable sdl &&
3839     check_struct SDL.h SDL_VideoInfo current_w $sdl_cflags && enable sdl_video_size
3840   fi
3841 fi
3842 enabled sdl && add_cflags $sdl_cflags && add_extralibs $sdl_libs
3843
3844 texi2html --help 2> /dev/null | grep -q 'init-file' && enable texi2html || disable texi2html
3845 makeinfo --version > /dev/null 2>&1 && enable makeinfo  || disable makeinfo
3846 perl --version > /dev/null 2>&1 && enable perl || disable perl
3847 pod2man --help > /dev/null 2>&1 && enable pod2man || disable pod2man
3848
3849 check_header linux/fb.h
3850 check_header linux/videodev.h
3851 check_header linux/videodev2.h
3852 check_struct linux/videodev2.h "struct v4l2_frmivalenum" discrete
3853
3854 check_header sys/videoio.h
3855
3856 check_func_headers "windows.h vfw.h" capCreateCaptureWindow "$vfwcap_indev_extralibs"
3857 # check that WM_CAP_DRIVER_CONNECT is defined to the proper value
3858 # w32api 3.12 had it defined wrong
3859 check_cpp_condition vfw.h "WM_CAP_DRIVER_CONNECT > WM_USER" && enable vfwcap_defines
3860
3861 check_type "dshow.h" IBaseFilter
3862
3863 # check for ioctl_meteor.h, ioctl_bt848.h and alternatives
3864 { check_header dev/bktr/ioctl_meteor.h &&
3865   check_header dev/bktr/ioctl_bt848.h; } ||
3866 { check_header machine/ioctl_meteor.h &&
3867   check_header machine/ioctl_bt848.h; } ||
3868 { check_header dev/video/meteor/ioctl_meteor.h &&
3869   check_header dev/video/bktr/ioctl_bt848.h; } ||
3870 check_header dev/ic/bt8xx.h
3871
3872 check_header sndio.h
3873 if check_struct sys/soundcard.h audio_buf_info bytes; then
3874     enable_safe sys/soundcard.h
3875 else
3876     check_cc -D__BSD_VISIBLE -D__XSI_VISIBLE <<EOF && add_cppflags -D__BSD_VISIBLE -D__XSI_VISIBLE && enable_safe sys/soundcard.h
3877     #include <sys/soundcard.h>
3878     audio_buf_info abc;
3879 EOF
3880 fi
3881 check_header soundcard.h
3882
3883 enabled_any alsa_indev alsa_outdev && check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
3884
3885 enabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack && check_func sem_timedwait &&
3886     check_func jack_port_get_latency_range -ljack
3887
3888 enabled_any sndio_indev sndio_outdev && check_lib2 sndio.h sio_open -lsndio
3889
3890
3891 enabled x11grab                                           &&
3892 require X11 X11/Xlib.h XOpenDisplay -lX11                 &&
3893 require Xext X11/extensions/XShm.h XShmCreateImage -lXext &&
3894 require Xfixes X11/extensions/Xfixes.h XFixesGetCursorImage -lXfixes
3895
3896 if ! disabled vaapi; then
3897     check_lib va/va.h vaInitialize -lva && {
3898         check_cpp_condition va/va_version.h "VA_CHECK_VERSION(0,32,0)" ||
3899         warn "Please upgrade to VA-API >= 0.32 if you would like full VA-API support.";
3900     } || disable vaapi
3901 fi
3902
3903 if ! disabled vdpau && enabled vdpau_vdpau_h; then
3904     check_cpp_condition vdpau/vdpau.h "defined VDP_DECODER_PROFILE_MPEG4_PART2_ASP" ||
3905         { echolog "Please upgrade to libvdpau >= 0.2 if you would like vdpau support." && disable vdpau; }
3906 fi
3907
3908 enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel"
3909 enabled coverage && add_cflags "-fprofile-arcs -ftest-coverage" && add_ldflags "-fprofile-arcs -ftest-coverage"
3910 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"
3911
3912 # add some useful compiler flags if supported
3913 check_cflags -Wdeclaration-after-statement
3914 check_cflags -Wall
3915 check_cflags -Wno-parentheses
3916 check_cflags -Wno-switch
3917 check_cflags -Wno-format-zero-length
3918 check_cflags -Wdisabled-optimization
3919 check_cflags -Wpointer-arith
3920 check_cflags -Wredundant-decls
3921 check_cflags -Wno-pointer-sign
3922 check_cflags -Wwrite-strings
3923 check_cflags -Wtype-limits
3924 check_cflags -Wundef
3925 check_cflags -Wmissing-prototypes
3926 check_cflags -Wno-pointer-to-int-cast
3927 check_cflags -Wstrict-prototypes
3928 enabled extra_warnings && check_cflags -Winline
3929
3930 # add some linker flags
3931 check_ldflags -Wl,--warn-common
3932 check_ldflags -Wl,-rpath-link=libpostproc:libswresample:libswscale:libavfilter:libavdevice:libavformat:libavcodec:libavutil:libavresample
3933 test_ldflags -Wl,-Bsymbolic && append SHFLAGS -Wl,-Bsymbolic
3934
3935 enabled xmm_clobber_test &&
3936     check_ldflags -Wl,--wrap,avcodec_open2              \
3937                   -Wl,--wrap,avcodec_decode_audio4      \
3938                   -Wl,--wrap,avcodec_decode_video2      \
3939                   -Wl,--wrap,avcodec_decode_subtitle2   \
3940                   -Wl,--wrap,avcodec_encode_audio2      \
3941                   -Wl,--wrap,avcodec_encode_video       \
3942                   -Wl,--wrap,avcodec_encode_subtitle    \
3943                   -Wl,--wrap,sws_scale ||
3944     disable xmm_clobber_test
3945
3946 echo "X{};" > $TMPV
3947 if test_ldflags -Wl,--version-script,$TMPV; then
3948     append SHFLAGS '-Wl,--version-script,\$(SUBDIR)lib\$(NAME).ver'
3949     check_cc <<EOF && enable symver_asm_label
3950 void ff_foo(void) __asm__ ("av_foo@VERSION");
3951 void ff_foo(void) { ${inline_asm+__asm__($quotes);} }
3952 EOF
3953     check_cc <<EOF && enable symver_gnu_asm
3954 __asm__(".symver ff_foo,av_foo@VERSION");
3955 void ff_foo(void) {}
3956 EOF
3957 fi
3958
3959 if [ -z "$optflags" ]; then
3960     if enabled small; then
3961         optflags=$cflags_size
3962     elif enabled optimizations; then
3963         optflags=$cflags_speed
3964     else
3965         optflags=$cflags_noopt
3966     fi
3967 fi
3968
3969 check_optflags(){
3970     check_cflags "$@"
3971     enabled lto && check_ldflags "$@"
3972 }
3973
3974
3975 if enabled lto; then
3976     test "$cc_type" != "$ld_type" && die "LTO requires same compiler and linker"
3977     check_cflags  -flto
3978     check_ldflags -flto $cpuflags
3979 fi
3980
3981 check_optflags $optflags
3982 check_optflags -fno-math-errno
3983 check_optflags -fno-signed-zeros
3984
3985 enabled ftrapv && check_cflags -ftrapv
3986
3987 check_cc -mno-red-zone <<EOF && noredzone_flags="-mno-red-zone"
3988 int x;
3989 EOF
3990
3991
3992 if enabled icc; then
3993     # Just warnings, no remarks
3994     check_cflags -w1
3995     # -wd: Disable following warnings
3996     # 144, 167, 556: -Wno-pointer-sign
3997     # 1292: attribute "foo" ignored
3998     # 1419: external declaration in primary source file
3999     # 10006: ignoring unknown option -fno-signed-zeros
4000     # 10148: ignoring unknown option -Wno-parentheses
4001     # 10156: ignoring option '-W'; no argument required
4002     check_cflags -wd144,167,556,1292,1419,10006,10148,10156
4003     # 11030: Warning unknown option --as-needed
4004     # 10156: ignoring option '-export'; no argument required
4005     check_ldflags -wd10156,11030
4006     # Allow to compile with optimizations
4007     check_ldflags -march=$cpu
4008     # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
4009     enable ebp_available
4010     if enabled x86_32; then
4011         icc_version=$($cc -dumpversion)
4012         test ${icc_version%%.*} -ge 11 &&
4013             check_cflags -falign-stack=maintain-16-byte ||
4014             disable aligned_stack
4015     fi
4016 elif enabled ccc; then
4017     # disable some annoying warnings
4018     add_cflags -msg_disable bitnotint
4019     add_cflags -msg_disable mixfuncvoid
4020     add_cflags -msg_disable nonstandcast
4021     add_cflags -msg_disable unsupieee
4022 elif enabled gcc; then
4023     check_optflags -fno-tree-vectorize
4024     check_cflags -Werror=implicit-function-declaration
4025     check_cflags -Werror=missing-prototypes
4026     check_cflags -Werror=vla
4027 elif enabled llvm_gcc; then
4028     check_cflags -mllvm -stack-alignment=16
4029 elif enabled clang; then
4030     check_cflags -mllvm -stack-alignment=16
4031     check_cflags -Qunused-arguments
4032     check_cflags -Werror=implicit-function-declaration
4033     check_cflags -Werror=missing-prototypes
4034 elif enabled armcc; then
4035     # 2523: use of inline assembler is deprecated
4036     add_cflags -W${armcc_opt},--diag_suppress=2523
4037     add_cflags -W${armcc_opt},--diag_suppress=1207
4038     add_cflags -W${armcc_opt},--diag_suppress=1293 # assignment in condition
4039     add_cflags -W${armcc_opt},--diag_suppress=3343 # hardfp compat
4040     add_cflags -W${armcc_opt},--diag_suppress=167  # pointer sign
4041     add_cflags -W${armcc_opt},--diag_suppress=513  # pointer sign
4042 elif enabled tms470; then
4043     add_cflags -pds=824 -pds=837
4044 elif enabled pathscale; then
4045     add_cflags -fstrict-overflow -OPT:wrap_around_unsafe_opt=OFF
4046 elif enabled msvc; then
4047     enabled x86_32 && disable aligned_stack
4048 fi
4049
4050 case $target_os in
4051     osf1)
4052         enabled ccc && add_ldflags '-Wl,-expect_unresolved,*'
4053     ;;
4054     plan9)
4055         add_cppflags -Dmain=plan9_main
4056     ;;
4057 esac
4058
4059 enabled_any $THREADS_LIST      && enable threads
4060
4061 enabled asm || { arch=c; disable $ARCH_LIST $ARCH_EXT_LIST; }
4062
4063 check_deps $CONFIG_LIST       \
4064            $CONFIG_EXTRA      \
4065            $HAVE_LIST         \
4066            $ALL_COMPONENTS    \
4067
4068
4069 if test $target_os = "haiku"; then
4070     disable memalign
4071     disable posix_memalign
4072 fi
4073
4074 ! enabled_any memalign posix_memalign aligned_malloc &&
4075     enabled_any $need_memalign && enable memalign_hack
4076
4077 # add_dep lib dep
4078 # -> enable ${lib}_deps_${dep}
4079 # -> add $dep to ${lib}_deps only once
4080 add_dep() {
4081     lib=$1
4082     dep=$2
4083     enabled "${lib}_deps_${dep}" && return 0
4084     enable  "${lib}_deps_${dep}"
4085     prepend "${lib}_deps" $dep
4086 }
4087
4088 # merge deps lib components
4089 # merge all ${component}_deps into ${lib}_deps and ${lib}_deps_*
4090 merge_deps() {
4091     lib=$1
4092     shift
4093     for comp in $*; do
4094         enabled $comp || continue
4095         eval "dep=\"\$${comp}_deps\""
4096         for d in $dep; do
4097             add_dep $lib $d
4098         done
4099     done
4100 }
4101
4102 merge_deps libavfilter $FILTER_LIST
4103
4104 echo "install prefix            $prefix"
4105 echo "source path               $source_path"
4106 echo "C compiler                $cc"
4107 echo "ARCH                      $arch ($cpu)"
4108 if test "$build_suffix" != ""; then
4109     echo "build suffix              $build_suffix"
4110 fi
4111 if test "$progs_suffix" != ""; then
4112     echo "progs suffix              $progs_suffix"
4113 fi
4114 if test "$extra_version" != ""; then
4115     echo "version string suffix     $extra_version"
4116 fi
4117 echo "big-endian                ${bigendian-no}"
4118 echo "runtime cpu detection     ${runtime_cpudetect-no}"
4119 if enabled x86; then
4120     echo "${yasmexe}                      ${yasm-no}"
4121     echo "MMX enabled               ${mmx-no}"
4122     echo "MMXEXT enabled            ${mmxext-no}"
4123     echo "3DNow! enabled            ${amd3dnow-no}"
4124     echo "3DNow! extended enabled   ${amd3dnowext-no}"
4125     echo "SSE enabled               ${sse-no}"
4126     echo "SSSE3 enabled             ${ssse3-no}"
4127     echo "AVX enabled               ${avx-no}"
4128     echo "FMA4 enabled              ${fma4-no}"
4129     echo "CMOV enabled              ${cmov-no}"
4130     echo "CMOV is fast              ${fast_cmov-no}"
4131     echo "EBX available             ${ebx_available-no}"
4132     echo "EBP available             ${ebp_available-no}"
4133 fi
4134 if enabled arm; then
4135     echo "ARMv5TE enabled           ${armv5te-no}"
4136     echo "ARMv6 enabled             ${armv6-no}"
4137     echo "ARMv6T2 enabled           ${armv6t2-no}"
4138     echo "ARM VFP enabled           ${armvfp-no}"
4139     echo "NEON enabled              ${neon-no}"
4140 fi
4141 if enabled mips; then
4142     echo "MIPS FPU enabled          ${mipsfpu-no}"
4143     echo "MIPS32R2 enabled          ${mips32r2-no}"
4144     echo "MIPS DSP R1 enabled       ${mipsdspr1-no}"
4145     echo "MIPS DSP R2 enabled       ${mipsdspr2-no}"
4146 fi
4147 if enabled ppc; then
4148     echo "AltiVec enabled           ${altivec-no}"
4149     echo "PPC 4xx optimizations     ${ppc4xx-no}"
4150     echo "dcbzl available           ${dcbzl-no}"
4151 fi
4152 if enabled sparc; then
4153     echo "VIS enabled               ${vis-no}"
4154 fi
4155 echo "debug symbols             ${debug-no}"
4156 echo "strip symbols             ${stripping-no}"
4157 echo "optimize for size         ${small-no}"
4158 echo "optimizations             ${optimizations-no}"
4159 echo "static                    ${static-no}"
4160 echo "shared                    ${shared-no}"
4161 echo "postprocessing support    ${postproc-no}"
4162 echo "new filter support        ${avfilter-no}"
4163 echo "network support           ${network-no}"
4164 echo "threading support         ${thread_type-no}"
4165 echo "safe bitstream reader     ${safe_bitstream_reader-no}"
4166 echo "SDL support               ${sdl-no}"
4167 echo "libdxva2 enabled          ${dxva2-no}"
4168 echo "libva enabled             ${vaapi-no}"
4169 echo "libvdpau enabled          ${vdpau-no}"
4170 echo "AVISynth enabled          ${avisynth-no}"
4171 echo "frei0r enabled            ${frei0r-no}"
4172 echo "gnutls enabled            ${gnutls-no}"
4173 echo "libaacplus enabled        ${libaacplus-no}"
4174 echo "libass enabled            ${libass-no}"
4175 echo "libcaca enabled           ${libcaca-no}"
4176 echo "libcdio support           ${libcdio-no}"
4177 echo "libcelt enabled           ${libcelt-no}"
4178 echo "libdc1394 support         ${libdc1394-no}"
4179 echo "libfaac enabled           ${libfaac-no}"
4180 echo "libfdk-aac enabled        ${libfdk_aac-no}"
4181 echo "libgsm enabled            ${libgsm-no}"
4182 echo "libiec61883 support       ${libiec61883-no}"
4183 echo "libilbc enabled           ${libilbc-no}"
4184 echo "libmodplug enabled        ${libmodplug-no}"
4185 echo "libmp3lame enabled        ${libmp3lame-no}"
4186 echo "libnut enabled            ${libnut-no}"
4187 echo "libopencore-amrnb support ${libopencore_amrnb-no}"
4188 echo "libopencore-amrwb support ${libopencore_amrwb-no}"
4189 echo "libopencv support         ${libopencv-no}"
4190 echo "libopenjpeg enabled       ${libopenjpeg-no}"
4191 echo "libopus enabled           ${libopus-no}"
4192 echo "libpulse enabled          ${libpulse-no}"
4193 echo "librtmp enabled           ${librtmp-no}"
4194 echo "libschroedinger enabled   ${libschroedinger-no}"
4195 echo "libspeex enabled          ${libspeex-no}"
4196 echo "libstagefright-h264 enabled    ${libstagefright_h264-no}"
4197 echo "libtheora enabled         ${libtheora-no}"
4198 echo "libtwolame enabled        ${libtwolame-no}"
4199 echo "libutvideo enabled        ${libutvideo-no}"
4200 echo "libv4l2 enabled           ${libv4l2-no}"
4201 echo "libvo-aacenc support      ${libvo_aacenc-no}"
4202 echo "libvo-amrwbenc support    ${libvo_amrwbenc-no}"
4203 echo "libvorbis enabled         ${libvorbis-no}"
4204 echo "libvpx enabled            ${libvpx-no}"
4205 echo "libx264 enabled           ${libx264-no}"
4206 echo "libxavs enabled           ${libxavs-no}"
4207 echo "libxvid enabled           ${libxvid-no}"
4208 echo "openal enabled            ${openal-no}"
4209 echo "openssl enabled           ${openssl-no}"
4210 echo "zlib enabled              ${zlib-no}"
4211 echo "bzlib enabled             ${bzlib-no}"
4212 echo "texi2html enabled         ${texi2html-no}"
4213 echo "perl enabled              ${perl-no}"
4214 echo "pod2man enabled           ${pod2man-no}"
4215 echo "makeinfo enabled          ${makeinfo-no}"
4216 test -n "$random_seed" &&
4217     echo "random seed               ${random_seed}"
4218 echo
4219
4220 for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
4221     echo "Enabled ${type}s:"
4222     eval list=\$$(toupper $type)_LIST
4223     print_enabled '_*' $list | sort | pr -r -3 -t
4224     echo
4225 done
4226
4227 license="LGPL version 2.1 or later"
4228 if enabled nonfree; then
4229     license="nonfree and unredistributable"
4230 elif enabled gplv3; then
4231     license="GPL version 3 or later"
4232 elif enabled lgplv3; then
4233     license="LGPL version 3 or later"
4234 elif enabled gpl; then
4235     license="GPL version 2 or later"
4236 fi
4237
4238 echo "License: $license"
4239
4240 echo "Creating config.mak and config.h..."
4241
4242 test -e Makefile || $ln_s "$source_path/Makefile" .
4243
4244 enabled stripping || strip="echo skipping strip"
4245
4246 config_files="$TMPH config.mak"
4247
4248 cat > config.mak <<EOF
4249 # Automatically generated by configure - do not modify!
4250 ifndef FFMPEG_CONFIG_MAK
4251 FFMPEG_CONFIG_MAK=1
4252 FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION
4253 prefix=$prefix
4254 LIBDIR=\$(DESTDIR)$libdir
4255 SHLIBDIR=\$(DESTDIR)$shlibdir
4256 INCDIR=\$(DESTDIR)$incdir
4257 BINDIR=\$(DESTDIR)$bindir
4258 DATADIR=\$(DESTDIR)$datadir
4259 MANDIR=\$(DESTDIR)$mandir
4260 SRC_PATH=$source_path
4261 ifndef MAIN_MAKEFILE
4262 SRC_PATH:=\$(SRC_PATH:.%=..%)
4263 endif
4264 CC_IDENT=$cc_ident
4265 ARCH=$arch
4266 CC=$cc
4267 CXX=$cxx
4268 AS=$as
4269 LD=$ld
4270 DEPCC=$dep_cc
4271 DEPCCFLAGS=$DEPCCFLAGS \$(CPPFLAGS)
4272 DEPAS=$as
4273 DEPASFLAGS=$DEPASFLAGS \$(CPPFLAGS)
4274 YASM=$yasmexe
4275 DEPYASM=$yasmexe
4276 AR=$ar
4277 ARFLAGS=$arflags
4278 AR_O=$ar_o
4279 RANLIB=$ranlib
4280 CP=cp -p
4281 LN_S=$ln_s
4282 STRIP=$strip
4283 CPPFLAGS=$CPPFLAGS
4284 CFLAGS=$CFLAGS
4285 CXXFLAGS=$CXXFLAGS
4286 ASFLAGS=$ASFLAGS
4287 AS_C=$AS_C
4288 AS_O=$AS_O
4289 CC_C=$CC_C
4290 CC_E=$CC_E
4291 CC_O=$CC_O
4292 CXX_C=$CXX_C
4293 CXX_O=$CXX_O
4294 LD_O=$LD_O
4295 LD_LIB=$LD_LIB
4296 LD_PATH=$LD_PATH
4297 DLLTOOL=$dlltool
4298 LDFLAGS=$LDFLAGS
4299 LDFLAGS-ffserver=$FFSERVERLDFLAGS
4300 SHFLAGS=$SHFLAGS
4301 YASMFLAGS=$YASMFLAGS
4302 BUILDSUF=$build_suffix
4303 PROGSSUF=$progs_suffix
4304 FULLNAME=$FULLNAME
4305 LIBPREF=$LIBPREF
4306 LIBSUF=$LIBSUF
4307 LIBNAME=$LIBNAME
4308 SLIBPREF=$SLIBPREF
4309 SLIBSUF=$SLIBSUF
4310 EXESUF=$EXESUF
4311 EXTRA_VERSION=$extra_version
4312 CCDEP=$CCDEP
4313 CXXDEP=$CXXDEP
4314 CCDEP_FLAGS=$CCDEP_FLAGS
4315 ASDEP=$ASDEP
4316 ASDEP_FLAGS=$ASDEP_FLAGS
4317 CC_DEPFLAGS=$CC_DEPFLAGS
4318 AS_DEPFLAGS=$AS_DEPFLAGS
4319 HOSTCC=$host_cc
4320 HOSTLD=$host_ld
4321 HOSTCFLAGS=$host_cflags
4322 HOSTEXESUF=$HOSTEXESUF
4323 HOSTLDFLAGS=$host_ldflags
4324 HOSTLIBS=$host_libs
4325 DEPHOSTCC=$host_cc
4326 DEPHOSTCCFLAGS=$DEPHOSTCCFLAGS \$(HOSTCCFLAGS)
4327 HOSTCCDEP=$HOSTCCDEP
4328 HOSTCCDEP_FLAGS=$HOSTCCDEP_FLAGS
4329 HOSTCC_DEPFLAGS=$HOSTCC_DEPFLAGS
4330 HOSTCC_C=$HOSTCC_C
4331 HOSTCC_O=$HOSTCC_O
4332 HOSTLD_O=$HOSTLD_O
4333 TARGET_EXEC=$target_exec
4334 TARGET_PATH=$target_path
4335 LIBS-ffplay=$sdl_libs
4336 CFLAGS-ffplay=$sdl_cflags
4337 ZLIB=$($ldflags_filter -lz)
4338 LIB_INSTALL_EXTRA_CMD=$LIB_INSTALL_EXTRA_CMD
4339 EXTRALIBS=$extralibs
4340 COMPAT_OBJS=$compat_objs
4341 EXEOBJS=$exeobjs
4342 INSTALL=$install
4343 LIBTARGET=${LIBTARGET}
4344 SLIBNAME=${SLIBNAME}
4345 SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}
4346 SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}
4347 SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}
4348 SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}
4349 SLIB_INSTALL_NAME=${SLIB_INSTALL_NAME}
4350 SLIB_INSTALL_LINKS=${SLIB_INSTALL_LINKS}
4351 SLIB_INSTALL_EXTRA_LIB=${SLIB_INSTALL_EXTRA_LIB}
4352 SLIB_INSTALL_EXTRA_SHLIB=${SLIB_INSTALL_EXTRA_SHLIB}
4353 SAMPLES:=${samples:-\$(FATE_SAMPLES)}
4354 NOREDZONE_FLAGS=$noredzone_flags
4355 EOF
4356
4357 get_version(){
4358     lcname=lib${1}
4359     name=$(toupper $lcname)
4360     file=$source_path/$lcname/version.h
4361     eval $(awk "/#define ${name}_VERSION_M/ { print \$2 \"=\" \$3 }" "$file")
4362     eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
4363     eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
4364     eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
4365 }
4366
4367 get_version_old(){
4368     name=$1
4369     file=$source_path/$2
4370 # This condition will be removed when we stop supporting old libpostproc versions
4371 if ! test "$name" = LIBPOSTPROC || test "$postproc_version" = current; then
4372     eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
4373     eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
4374 fi
4375     lcname=$(tolower $name)
4376     eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
4377     eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
4378 }
4379
4380 get_version_old LIBPOSTPROC libpostproc/version.h
4381
4382 map 'get_version $v' $LIBRARY_LIST
4383
4384 cat > $TMPH <<EOF
4385 /* Automatically generated by configure - do not modify! */
4386 #ifndef FFMPEG_CONFIG_H
4387 #define FFMPEG_CONFIG_H
4388 #define FFMPEG_CONFIGURATION "$(c_escape $FFMPEG_CONFIGURATION)"
4389 #define FFMPEG_LICENSE "$(c_escape $license)"
4390 #define FFMPEG_DATADIR "$(eval c_escape $datadir)"
4391 #define AVCONV_DATADIR "$(eval c_escape $datadir)"
4392 #define CC_IDENT "$(c_escape ${cc_ident:-Unknown compiler})"
4393 #define av_restrict $_restrict
4394 #define EXTERN_PREFIX "${extern_prefix}"
4395 #define EXTERN_ASM ${extern_prefix}
4396 #define SLIBSUF "$SLIBSUF"
4397 #define HAVE_MMX2 HAVE_MMXEXT
4398 EOF
4399
4400 test -n "$assert_level" &&
4401     echo "#define ASSERT_LEVEL $assert_level" >>$TMPH
4402
4403 test -n "$malloc_prefix" &&
4404     echo "#define MALLOC_PREFIX $malloc_prefix" >>$TMPH
4405
4406 if enabled yasm; then
4407     append config_files $TMPASM
4408     printf '' >$TMPASM
4409 fi
4410
4411 print_config ARCH_   "$config_files" $ARCH_LIST
4412 print_config HAVE_   "$config_files" $HAVE_LIST
4413 print_config CONFIG_ "$config_files" $CONFIG_LIST       \
4414                                      $CONFIG_EXTRA      \
4415                                      $ALL_COMPONENTS    \
4416
4417 echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
4418 echo "endif # FFMPEG_CONFIG_MAK" >> config.mak
4419
4420 # Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
4421 cp_if_changed $TMPH config.h
4422 touch .config
4423
4424 enabled yasm && cp_if_changed $TMPASM config.asm
4425
4426 cat > $TMPH <<EOF
4427 /* Generated by ffconf */
4428 #ifndef AVUTIL_AVCONFIG_H
4429 #define AVUTIL_AVCONFIG_H
4430 EOF
4431
4432 test "$postproc_version" != current && cat >> $TMPH <<EOF
4433 #define LIBPOSTPROC_VERSION_MAJOR $LIBPOSTPROC_VERSION_MAJOR
4434 #define LIBPOSTPROC_VERSION_MINOR $LIBPOSTPROC_VERSION_MINOR
4435 #define LIBPOSTPROC_VERSION_MICRO $LIBPOSTPROC_VERSION_MICRO
4436 EOF
4437
4438 print_config AV_HAVE_ $TMPH $HAVE_LIST_PUB
4439
4440 echo "#endif /* AVUTIL_AVCONFIG_H */" >> $TMPH
4441
4442 cp_if_changed $TMPH libavutil/avconfig.h
4443
4444 if test -n "$WARNINGS"; then
4445     printf "\n$WARNINGS"
4446     enabled fatal_warnings && exit 1
4447 fi
4448
4449 # build pkg-config files
4450
4451 pkgconfig_generate(){
4452     name=$1
4453     shortname=${name#lib}${build_suffix}
4454     comment=$2
4455     version=$3
4456     libs=$4
4457     requires=$5
4458     enabled ${name#lib} || return 0
4459     mkdir -p $name
4460     cat <<EOF > $name/$name.pc
4461 prefix=$prefix
4462 exec_prefix=\${prefix}
4463 libdir=$libdir
4464 includedir=$incdir
4465
4466 Name: $name
4467 Description: $comment
4468 Version: $version
4469 Requires: $(enabled shared || echo $requires)
4470 Requires.private: $(enabled shared && echo $requires)
4471 Conflicts:
4472 Libs: -L\${libdir} -l${shortname} $(enabled shared || echo $libs)
4473 Libs.private: $(enabled shared && echo $libs)
4474 Cflags: -I\${includedir}
4475 EOF
4476
4477 mkdir -p doc/examples/pc-uninstalled
4478 includedir=${source_path}
4479 [ "$includedir" = . ] && includedir="\${pcfiledir}/../../.."
4480     cat <<EOF > doc/examples/pc-uninstalled/$name.pc
4481 prefix=
4482 exec_prefix=
4483 libdir=\${pcfiledir}/../../../$name
4484 includedir=${includedir}
4485
4486 Name: $name
4487 Description: $comment
4488 Version: $version
4489 Requires: $requires
4490 Conflicts:
4491 Libs: -L\${libdir} -l${shortname} $(enabled shared || echo $libs)
4492 Cflags: -I\${includedir}
4493 EOF
4494 }
4495
4496 libavfilter_pc_deps="libavutil = $LIBAVUTIL_VERSION"
4497 enabled libavfilter_deps_avcodec    && prepend libavfilter_pc_deps "libavcodec = $LIBAVCODEC_VERSION,"
4498 enabled libavfilter_deps_avformat   && prepend libavfilter_pc_deps "libavformat = $LIBAVFORMAT_VERSION,"
4499 enabled libavfilter_deps_avresample && prepend libavfilter_pc_deps "libavresample = $LIBAVRESAMPLE_VERSION,"
4500 enabled libavfilter_deps_swscale    && prepend libavfilter_pc_deps "libswscale = $LIBSWSCALE_VERSION,"
4501 enabled libavfilter_deps_swresample && prepend libavfilter_pc_deps "libswresample = $LIBSWRESAMPLE_VERSION,"
4502 enabled libavfilter_deps_postproc   && prepend libavfilter_pc_deps "libpostproc = $LIBPOSTPROC_VERSION,"
4503 libavfilter_pc_deps=${libavfilter_pc_deps%, }
4504
4505 libavdevice_pc_deps="libavformat = $LIBAVFORMAT_VERSION"
4506 enabled lavfi_indev && prepend libavdevice_pc_deps "libavfilter = $LIBAVFILTER_VERSION,"
4507
4508 pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION" "$LIBM"
4509 pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
4510 pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
4511 pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "$libavdevice_pc_deps"
4512 pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "$libavfilter_pc_deps"
4513 pkgconfig_generate libpostproc "FFmpeg postprocessing library" "$LIBPOSTPROC_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"
4514 pkgconfig_generate libavresample "Libav audio resampling library" "$LIBAVRESAMPLE_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
4515 pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "$LIBM" "libavutil = $LIBAVUTIL_VERSION"
4516 pkgconfig_generate libswresample "FFmpeg audio resampling library" "$LIBSWRESAMPLE_VERSION" "$LIBM" "libavutil = $LIBAVUTIL_VERSION"
4517
4518 fix_ffmpeg_remote(){
4519     git_remote_from=$1
4520     git_remote_to=$2
4521     fixme_remote=$(git --git-dir=$source_path/.git --work-tree=$source_path remote -v | grep $git_remote_from | cut -f 1 | sort | uniq)
4522     if [ "$fixme_remote" != "" ]; then
4523         echolog "
4524 Outdated domain in git config, the official domain for ffmpeg git is since
4525 November 2011, source.ffmpeg.org, both the old and the new point to the same
4526 repository and server. To update it enter the following commands:
4527 "
4528         for remote in $fixme_remote; do
4529             echolog "git remote set-url $remote $git_remote_to"
4530         done
4531     fi
4532 }
4533
4534 if test -f "$source_path/.git/config"; then
4535     remote_from=git.videolan.org
4536     remote_to=source.ffmpeg.org
4537     fix_ffmpeg_remote git@$remote_from:ffmpeg   git@$remote_to:ffmpeg
4538     fix_ffmpeg_remote git://$remote_from/ffmpeg git://$remote_to/ffmpeg
4539 fi