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