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