b221bcc63c14a8f757a6343307e914cdb6d253ae
[ffmpeg.git] / configure
1 #!/bin/sh
2 #
3 # FFmpeg configure script
4 #
5 # Copyright (c) 2000-2002 Fabrice Bellard
6 # Copyright (c) 2005-2008 Diego Biurrun
7 # Copyright (c) 2005-2008 Mans Rullgard
8 #
9
10 # Prevent locale nonsense from breaking basic text processing.
11 LC_ALL=C
12 export LC_ALL
13
14 # make sure we are running under a compatible shell
15 # try to make this part work with most shells
16
17 try_exec(){
18     echo "Trying shell $1"
19     type "$1" > /dev/null 2>&1 && exec "$@"
20 }
21
22 unset foo
23 (: ${foo%%bar}) 2> /dev/null
24 E1="$?"
25
26 (: ${foo?}) 2> /dev/null
27 E2="$?"
28
29 if test "$E1" != 0 || test "$E2" = 0; then
30     echo "Broken shell detected.  Trying alternatives."
31     export FF_CONF_EXEC
32     if test "0$FF_CONF_EXEC" -lt 1; then
33         FF_CONF_EXEC=1
34         try_exec bash "$0" "$@"
35     fi
36     if test "0$FF_CONF_EXEC" -lt 2; then
37         FF_CONF_EXEC=2
38         try_exec ksh "$0" "$@"
39     fi
40     if test "0$FF_CONF_EXEC" -lt 3; then
41         FF_CONF_EXEC=3
42         try_exec /usr/xpg4/bin/sh "$0" "$@"
43     fi
44     echo "No compatible shell script interpreter found."
45     echo "This configure script requires a POSIX-compatible shell"
46     echo "such as bash or ksh."
47     echo "THIS IS NOT A BUG IN FFMPEG, DO NOT REPORT IT AS SUCH."
48     echo "Instead, install a working POSIX-compatible shell."
49     echo "Disabling this configure test will create a broken FFmpeg."
50     if test "$BASH_VERSION" = '2.04.0(1)-release'; then
51         echo "This bash version ($BASH_VERSION) is broken on your platform."
52         echo "Upgrade to a later version if available."
53     fi
54     exit 1
55 fi
56
57 show_help(){
58   echo "Usage: configure [options]"
59   echo "Options: [defaults in brackets after descriptions]"
60   echo
61   echo "Standard options:"
62   echo "  --help                   print this message"
63   echo "  --logfile=FILE           log tests and output to FILE [config.err]"
64   echo "  --disable-logging        do not log configure debug information"
65   echo "  --prefix=PREFIX          install in PREFIX [$prefix]"
66   echo "  --bindir=DIR             install binaries in DIR [PREFIX/bin]"
67   echo "  --datadir=DIR            install data files in DIR [PREFIX/share/ffmpeg]"
68   echo "  --libdir=DIR             install libs in DIR [PREFIX/lib]"
69   echo "  --shlibdir=DIR           install shared libs in DIR [PREFIX/lib]"
70   echo "  --incdir=DIR             install includes in DIR [PREFIX/include]"
71   echo "  --mandir=DIR             install man page in DIR [PREFIX/share/man]"
72   echo
73   echo "Configuration options:"
74   echo "  --disable-static         do not build static libraries [no]"
75   echo "  --enable-shared          build shared libraries [no]"
76   echo "  --enable-gpl             allow use of GPL code, the resulting libs"
77   echo "                           and binaries will be under GPL [no]"
78   echo "  --enable-version3        upgrade (L)GPL to version 3 [no]"
79   echo "  --enable-nonfree         allow use of nonfree code, the resulting libs"
80   echo "                           and binaries will be unredistributable [no]"
81   echo "  --disable-ffmpeg         disable ffmpeg build"
82   echo "  --disable-ffplay         disable ffplay build"
83   echo "  --disable-ffserver       disable ffserver build"
84   echo "  --enable-postproc        enable GPLed postprocessing support [no]"
85   echo "  --enable-avfilter        video filter support [no]"
86   echo "  --enable-avfilter-lavf   video filters dependent on avformat [no]"
87   echo "  --enable-beosthreads     use BeOS threads [no]"
88   echo "  --enable-os2threads      use OS/2 threads [no]"
89   echo "  --enable-pthreads        use pthreads [no]"
90   echo "  --enable-w32threads      use Win32 threads [no]"
91   echo "  --enable-x11grab         enable X11 grabbing [no]"
92   echo "  --disable-network        disable network support [no]"
93   echo "  --disable-ipv6           disable IPv6 support [no]"
94   echo "  --disable-mpegaudio-hp   faster (but less accurate) MPEG audio decoding [no]"
95   echo "  --enable-gray            enable full grayscale support (slower color)"
96   echo "  --disable-swscale-alpha  disable alpha channel support in swscale"
97   echo "  --disable-fastdiv        disable table-based division"
98   echo "  --enable-small           optimize for size instead of speed"
99   echo "  --disable-aandct         disable AAN DCT code"
100   echo "  --disable-fft            disable FFT code"
101   echo "  --disable-golomb         disable Golomb code"
102   echo "  --disable-lpc            disable LPC code"
103   echo "  --disable-mdct           disable MDCT code"
104   echo "  --disable-rdft           disable RDFT code"
105   echo "  --disable-vaapi          disable VAAPI code"
106   echo "  --disable-vdpau          disable VDPAU code"
107   echo "  --enable-runtime-cpudetect detect cpu capabilities at runtime (bigger binary)"
108   echo "  --enable-hardcoded-tables use hardcoded tables instead of runtime generation"
109   echo "  --enable-memalign-hack   emulate memalign, interferes with memory debuggers"
110   echo "  --enable-beos-netserver  enable BeOS netserver"
111   echo "  --disable-encoder=NAME   disable encoder NAME"
112   echo "  --enable-encoder=NAME    enable encoder NAME"
113   echo "  --disable-encoders       disable all encoders"
114   echo "  --disable-decoder=NAME   disable decoder NAME"
115   echo "  --enable-decoder=NAME    enable decoder NAME"
116   echo "  --disable-decoders       disable all decoders"
117   echo "  --disable-hwaccel=NAME   disable hwaccel NAME"
118   echo "  --enable-hwaccel=NAME    enable hwaccel NAME"
119   echo "  --disable-hwaccels       disable all hwaccels"
120   echo "  --disable-muxer=NAME     disable muxer NAME"
121   echo "  --enable-muxer=NAME      enable muxer NAME"
122   echo "  --disable-muxers         disable all muxers"
123   echo "  --disable-demuxer=NAME   disable demuxer NAME"
124   echo "  --enable-demuxer=NAME    enable demuxer NAME"
125   echo "  --disable-demuxers       disable all demuxers"
126   echo "  --enable-parser=NAME     enable parser NAME"
127   echo "  --disable-parser=NAME    disable parser NAME"
128   echo "  --disable-parsers        disable all parsers"
129   echo "  --enable-bsf=NAME        enable bitstream filter NAME"
130   echo "  --disable-bsf=NAME       disable bitstream filter NAME"
131   echo "  --disable-bsfs           disable all bitstream filters"
132   echo "  --enable-protocol=NAME   enable protocol NAME"
133   echo "  --disable-protocol=NAME  disable protocol NAME"
134   echo "  --disable-protocols      disable all protocols"
135   echo "  --disable-indev=NAME     disable input device NAME"
136   echo "  --disable-outdev=NAME    disable output device NAME"
137   echo "  --disable-indevs         disable input devices"
138   echo "  --disable-outdevs        disable output devices"
139   echo "  --disable-devices        disable all devices"
140   echo "  --enable-filter=NAME     enable filter NAME"
141   echo "  --disable-filter=NAME    disable filter NAME"
142   echo "  --disable-filters        disable all filters"
143   echo "  --list-decoders          show all available decoders"
144   echo "  --list-encoders          show all available encoders"
145   echo "  --list-hwaccels          show all available hardware accelerators"
146   echo "  --list-muxers            show all available muxers"
147   echo "  --list-demuxers          show all available demuxers"
148   echo "  --list-parsers           show all available parsers"
149   echo "  --list-protocols         show all available protocols"
150   echo "  --list-bsfs              show all available bitstream filters"
151   echo "  --list-indevs            show all available input devices"
152   echo "  --list-outdevs           show all available output devices"
153   echo "  --list-filters           show all available filters"
154   echo
155   echo "External library support:"
156   echo "  --enable-avisynth        enable reading of AVISynth script files [no]"
157   echo "  --enable-bzlib           enable bzlib [autodetect]"
158   echo "  --enable-libopencore-amrnb enable AMR-NB de/encoding via libopencore-amrnb [no]"
159   echo "  --enable-libopencore-amrwb enable AMR-WB decoding via libopencore-amrwb [no]"
160   echo "  --enable-libdc1394       enable IIDC-1394 grabbing using libdc1394"
161   echo "                           and libraw1394 [no]"
162   echo "  --enable-libdirac        enable Dirac support via libdirac [no]"
163   echo "  --enable-libfaac         enable FAAC support via libfaac [no]"
164   echo "  --enable-libfaad         enable FAAD support via libfaad [no]"
165   echo "  --enable-libfaadbin      open libfaad.so.0 at runtime [no]"
166   echo "  --enable-libgsm          enable GSM support via libgsm [no]"
167   echo "  --enable-libmp3lame      enable MP3 encoding via libmp3lame [no]"
168   echo "  --enable-libnut          enable NUT (de)muxing via libnut,"
169   echo "                           native (de)muxer exists [no]"
170   echo "  --enable-libopenjpeg     enable JPEG 2000 decoding via OpenJPEG [no]"
171   echo "  --enable-libschroedinger enable Dirac support via libschroedinger [no]"
172   echo "  --enable-libspeex        enable Speex decoding via libspeex [no]"
173   echo "  --enable-libtheora       enable Theora encoding via libtheora [no]"
174   echo "  --enable-libvorbis       enable Vorbis encoding via libvorbis,"
175   echo "                           native implementation exists [no]"
176   echo "  --enable-libx264         enable H.264 encoding via x264 [no]"
177   echo "  --enable-libxvid         enable Xvid encoding via xvidcore,"
178   echo "                           native MPEG-4/Xvid encoder exists [no]"
179   echo "  --enable-mlib            enable Sun medialib [no]"
180   echo "  --enable-zlib            enable zlib [autodetect]"
181   echo ""
182   echo "Advanced options (experts only):"
183   echo "  --source-path=PATH       path to source code [$source_path]"
184   echo "  --cross-prefix=PREFIX    use PREFIX for compilation tools [$cross_prefix]"
185   echo "  --enable-cross-compile   assume a cross-compiler is used"
186   echo "  --sysroot=PATH           root of cross-build tree"
187   echo "  --sysinclude=PATH        location of cross-build system headers"
188   echo "  --target-os=OS           compiler targets OS [$target_os]"
189   echo "  --target-exec=CMD        command to run executables on target"
190   echo "  --target-path=DIR        path to view of build directory on target"
191   echo "  --nm=NM                  use nm tool"
192   echo "  --as=AS                  use assembler AS [$as_default]"
193   echo "  --cc=CC                  use C compiler CC [$cc_default]"
194   echo "  --ld=LD                  use linker LD"
195   echo "  --host-cc=HOSTCC         use host C compiler HOSTCC"
196   echo "  --host-cflags=HCFLAGS    use HCFLAGS when compiling for host"
197   echo "  --host-ldflags=HLDFLAGS  use HLDFLAGS when linking for host"
198   echo "  --host-libs=HLIBS        use libs HLIBS when linking for host"
199   echo "  --extra-cflags=ECFLAGS   add ECFLAGS to CFLAGS [$CFLAGS]"
200   echo "  --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]"
201   echo "  --extra-libs=ELIBS       add ELIBS [$ELIBS]"
202   echo "  --extra-version=STRING   version string suffix []"
203   echo "  --build-suffix=SUFFIX    library name suffix []"
204   echo "  --arch=ARCH              select architecture [$arch]"
205   echo "  --cpu=CPU                select the minimum required CPU (affects"
206   echo "                           instruction selection, may crash on older CPUs)"
207   echo "  --enable-powerpc-perf    enable performance report on PPC"
208   echo "                           (requires enabling PMC)"
209   echo "  --disable-altivec        disable AltiVec optimizations"
210   echo "  --disable-amd3dnow       disable 3DNow! optimizations"
211   echo "  --disable-amd3dnowext    disable 3DNow! extended optimizations"
212   echo "  --disable-mmx            disable MMX optimizations"
213   echo "  --disable-mmx2           disable MMX2 optimizations"
214   echo "  --disable-sse            disable SSE optimizations"
215   echo "  --disable-ssse3          disable SSSE3 optimizations"
216   echo "  --disable-armv5te        disable armv5te optimizations"
217   echo "  --disable-armv6          disable armv6 optimizations"
218   echo "  --disable-armv6t2        disable armv6t2 optimizations"
219   echo "  --disable-armvfp         disable ARM VFP optimizations"
220   echo "  --disable-iwmmxt         disable iwmmxt optimizations"
221   echo "  --disable-mmi            disable MMI optimizations"
222   echo "  --disable-neon           disable neon optimizations"
223   echo "  --disable-vis            disable VIS optimizations"
224   echo "  --disable-yasm           disable use of yasm assembler"
225   echo "  --enable-pic             build position-independent code"
226   echo
227   echo "Developer options (useful when working on FFmpeg itself):"
228   echo "  --disable-debug          disable debugging symbols"
229   echo "  --enable-debug=LEVEL     set the debug level [$debuglevel]"
230   echo "  --enable-gprof           enable profiling with gprof [$gprof]"
231   echo "  --disable-optimizations  disable compiler optimizations"
232   echo "  --enable-extra-warnings  enable more compiler warnings"
233   echo "  --disable-stripping      disable stripping of executables and shared libraries"
234   echo ""
235   echo "NOTE: Object files are built at the place where configure is launched."
236   exit 0
237 }
238
239 log(){
240     echo "$@" >> $logfile
241 }
242
243 log_file(){
244     log BEGIN $1
245     pr -n -t $1 >> $logfile
246     log END $1
247 }
248
249 echolog(){
250     log "$@"
251     echo "$@"
252 }
253
254 die(){
255     echolog "$@"
256     cat <<EOF
257
258 If you think configure made a mistake, make sure you are using the latest
259 version from SVN.  If the latest version fails, report the problem to the
260 ffmpeg-user@mplayerhq.hu mailing list or IRC #ffmpeg on irc.freenode.net.
261 EOF
262     if disabled logging; then
263         cat <<EOF
264 Rerun configure with logging enabled (do not use --disable-logging), and
265 include the log this produces with your report.
266 EOF
267     else
268 cat <<EOF
269 Include the log file "$logfile" produced by configure as this will help
270 solving the problem.
271 EOF
272     fi
273     exit 1
274 }
275
276 # Avoid locale weirdness, besides we really just want to translate ASCII.
277 toupper(){
278     echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
279 }
280
281 tolower(){
282     echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
283 }
284
285 c_escape(){
286     echo "$*" | sed 's/["\\]/\\\0/g'
287 }
288
289 sh_quote(){
290     v=$(echo "$1" | sed "s/'/'\\\\''/g")
291     test "$v" = "${v#*[ |&;<>()$\`\\\"\'*?\[\]#~=%]}" || v="'$v'"
292     echo "$v"
293 }
294
295 filter(){
296     pat=$1
297     shift
298     for v; do
299         eval "case $v in $pat) echo $v ;; esac"
300     done
301 }
302
303 set_all(){
304     value=$1
305     shift
306     for var in $*; do
307         eval $var=$value
308     done
309 }
310
311 set_weak(){
312     value=$1
313     shift
314     for var; do
315         eval : \${$var:=$value}
316     done
317 }
318
319 pushvar(){
320     for var in $*; do
321         eval level=\${${var}_level:=0}
322         eval ${var}_${level}="\$$var"
323         eval ${var}_level=$(($level+1))
324     done
325 }
326
327 popvar(){
328     for var in $*; do
329         eval level=\${${var}_level:-0}
330         test $level = 0 && continue
331         eval level=$(($level-1))
332         eval $var="\${${var}_${level}}"
333         eval ${var}_level=$level
334         eval unset ${var}_${level}
335     done
336 }
337
338 enable(){
339     set_all yes $*
340 }
341
342 disable(){
343     set_all no $*
344 }
345
346 enable_weak(){
347     set_weak yes $*
348 }
349
350 disable_weak(){
351     set_weak no $*
352 }
353
354 enable_safe(){
355     enable $(echo "$*" | sed 's/[^A-Za-z0-9_ ]/_/g')
356 }
357
358 disable_safe(){
359     disable $(echo "$*" | sed 's/[^A-Za-z0-9_ ]/_/g')
360 }
361
362 do_enable_deep(){
363     for var; do
364         enabled $var && continue
365         eval sel="\$${var}_select"
366         eval sgs="\$${var}_suggest"
367         pushvar var sgs
368         enable_deep $sel
369         popvar sgs
370         enable_deep_weak $sgs
371         popvar var
372     done
373 }
374
375 enable_deep(){
376     do_enable_deep $*
377     enable $*
378 }
379
380 enable_deep_weak(){
381     do_enable_deep $*
382     enable_weak $*
383 }
384
385 enabled(){
386     test "${1#!}" = "$1" && op== || op=!=
387     eval test "x\$${1#!}" $op "xyes"
388 }
389
390 disabled(){
391     test "${1#!}" = "$1" && op== || op=!=
392     eval test "x\$${1#!}" $op "xno"
393 }
394
395 enabled_all(){
396     for opt; do
397         enabled $opt || return 1
398     done
399 }
400
401 disabled_all(){
402     for opt; do
403         disabled $opt || return 1
404     done
405 }
406
407 enabled_any(){
408     for opt; do
409         enabled $opt && return 0
410     done
411 }
412
413 disabled_any(){
414     for opt; do
415         disabled $opt && return 0
416     done
417     return 1
418 }
419
420 set_default(){
421     for opt; do
422         eval : \${$opt:=\$${opt}_default}
423     done
424 }
425
426 is_in(){
427     value=$1
428     shift
429     for var in $*; do
430         [ $var = $value ] && return 0
431     done
432     return 1
433 }
434
435 check_deps(){
436     for cfg; do
437         cfg="${cfg#!}"
438         enabled ${cfg}_checking && die "Circular dependency for $cfg."
439         disabled ${cfg}_checking && continue
440         enable ${cfg}_checking
441
442         eval dep_all="\$${cfg}_deps"
443         eval dep_any="\$${cfg}_deps_any"
444         eval dep_sel="\$${cfg}_select"
445         eval dep_sgs="\$${cfg}_suggest"
446
447         pushvar cfg dep_all dep_any dep_sel dep_sgs
448         check_deps $dep_all $dep_any $dep_sel $dep_sgs
449         popvar cfg dep_all dep_any dep_sel dep_sgs
450
451         enabled_all  $dep_all || disable $cfg
452         enabled_any  $dep_any || disable $cfg
453         disabled_any $dep_sel && disable $cfg
454
455         if enabled $cfg; then
456             eval dep_extralibs="\$${cfg}_extralibs"
457             test -n "$dep_extralibs" && add_extralibs $dep_extralibs
458             enable_deep $dep_sel
459             enable_deep_weak $dep_sgs
460         fi
461
462         disable ${cfg}_checking
463     done
464 }
465
466 print_config(){
467     pfx=$1
468     header=$2
469     makefile=$3
470     shift 3
471     for cfg; do
472         ucname="$(toupper $cfg)"
473         if enabled $cfg; then
474             echo "#define ${pfx}${ucname} 1" >> $header
475             echo "${pfx}${ucname}=yes" >> $makefile
476         else
477             echo "#define ${pfx}${ucname} 0" >> $header
478         fi
479     done
480 }
481
482 flags_saved(){
483     (: ${SAVE_CFLAGS?}) 2> /dev/null
484 }
485
486 save_flags(){
487     flags_saved && return
488     SAVE_CFLAGS="$CFLAGS"
489     SAVE_LDFLAGS="$LDFLAGS"
490     SAVE_extralibs="$extralibs"
491 }
492
493 restore_flags(){
494     flags_saved || return
495     CFLAGS="$SAVE_CFLAGS"
496     LDFLAGS="$SAVE_LDFLAGS"
497     extralibs="$SAVE_extralibs"
498     unset SAVE_CFLAGS
499     unset SAVE_LDFLAGS
500     unset SAVE_extralibs
501 }
502
503 temp_cflags(){
504     save_flags
505     CFLAGS="$CFLAGS $*"
506 }
507
508 temp_ldflags(){
509     save_flags
510     LDFLAGS="$LDFLAGS $*"
511 }
512
513 temp_extralibs(){
514     save_flags
515     extralibs="$extralibs $*"
516 }
517
518 append(){
519     var=$1
520     shift
521     flags_saved && eval "SAVE_$var=\"\$SAVE_$var $*\""
522     eval "$var=\"\$$var $*\""
523 }
524
525 add_cppflags(){
526     append CPPFLAGS $($filter_cppflags "$@")
527 }
528
529 add_cflags(){
530     append CFLAGS $($filter_cflags "$@")
531 }
532
533 add_asflags(){
534     append ASFLAGS $($filter_asflags "$@")
535 }
536
537 add_ldflags(){
538     append LDFLAGS "$@"
539 }
540
541 add_extralibs(){
542     append extralibs "$@"
543 }
544
545 check_cmd(){
546     log "$@"
547     "$@" >> $logfile 2>&1
548 }
549
550 check_cc(){
551     log check_cc "$@"
552     cat > $TMPC
553     log_file $TMPC
554     check_cmd $cc $CPPFLAGS $CFLAGS "$@" -c -o $TMPO $TMPC
555 }
556
557 check_cpp(){
558     log check_cpp "$@"
559     cat > $TMPC
560     log_file $TMPC
561     check_cmd $cc $CPPFLAGS $CFLAGS "$@" -E -o $TMPO $TMPC
562 }
563
564 check_as(){
565     log check_as "$@"
566     cat > $TMPC
567     log_file $TMPC
568     check_cmd $as $CPPFLAGS $ASFLAGS "$@" -c -o $TMPO $TMPC
569 }
570
571 check_asm(){
572     log check_asm "$@"
573     name="$1"
574     asm="$2"
575     shift 2
576     disable $name
577     check_as "$@" <<EOF && enable $name
578 void foo(void){ __asm__ volatile($asm); }
579 EOF
580 }
581
582 check_yasm(){
583     log check_yasm "$@"
584     echo "$1" > $TMPS
585     log_file $TMPS
586     shift 1
587     check_cmd $yasmexe $YASMFLAGS "$@" -o $TMPO $TMPS
588 }
589
590 check_ld(){
591     log check_ld "$@"
592     check_cc || return
593     flags=''
594     libs=''
595     for f; do
596         test "${f}" = "${f#-l}" && flags="$flags $f" || libs="$libs $f"
597     done
598     check_cmd $ld $LDFLAGS $flags -o $TMPE $TMPO $extralibs $libs
599 }
600
601 check_cppflags(){
602     log check_cppflags "$@"
603     set -- $($filter_cppflags "$@")
604     check_cc "$@" <<EOF && append CPPFLAGS "$@"
605 int x;
606 EOF
607 }
608
609 check_cflags(){
610     log check_cflags "$@"
611     set -- $($filter_cflags "$@")
612     check_cc "$@" <<EOF && append CFLAGS "$@"
613 int x;
614 EOF
615 }
616
617 check_ldflags(){
618     log check_ldflags "$@"
619     check_ld "$@" <<EOF && add_ldflags "$@"
620 int main(void){ return 0; }
621 EOF
622 }
623
624 check_header(){
625     log check_header "$@"
626     header=$1
627     shift
628     disable_safe $header
629     check_cpp "$@" <<EOF && enable_safe $header
630 #include <$header>
631 int x;
632 EOF
633 }
634
635 check_func(){
636     log check_func "$@"
637     func=$1
638     shift
639     disable $func
640     check_ld "$@" <<EOF && enable $func
641 extern int $func();
642 int main(void){ $func(); }
643 EOF
644 }
645
646 check_func_headers(){
647     log check_func_headers "$@"
648     headers=$1
649     func=$2
650     shift 2
651     disable $func
652     incs=""
653     for hdr in $headers; do
654         incs="$incs
655 #include <$hdr>"
656     done
657     check_ld "$@" <<EOF && enable $func && enable_safe $headers
658 $incs
659 int main(int argc, char **argv){
660     return (long) $func;
661 }
662 EOF
663 }
664
665 check_cpp_condition(){
666     log check_cpp_condition "$@"
667     header=$1
668     condition=$2
669     check_cpp <<EOF
670 #include <$header>
671 #if !($condition)
672 #error "unsatisfied condition: $condition"
673 #endif
674 EOF
675 }
676
677 check_lib(){
678     log check_lib "$@"
679     header="$1"
680     func="$2"
681     shift 2
682     temp_extralibs "$@"
683     check_header $header && check_func $func && add_extralibs "$@"
684     err=$?
685     restore_flags
686     return $err
687 }
688
689 check_lib2(){
690     log check_lib2 "$@"
691     headers="$1"
692     func="$2"
693     shift 2
694     temp_extralibs "$@"
695     check_func_headers "$headers" $func && add_extralibs "$@"
696     err=$?
697     restore_flags
698     return $err
699 }
700
701 check_exec(){
702     check_ld "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
703 }
704
705 check_exec_crash(){
706     code=$(cat)
707
708     # exit() is not async signal safe.  _Exit (C99) and _exit (POSIX)
709     # are safe but may not be available everywhere.  Thus we use
710     # raise(SIGTERM) instead.  The check is run in a subshell so we
711     # can redirect the "Terminated" message from the shell.  SIGBUS
712     # is not defined by standard C so it is used conditionally.
713
714     (check_exec "$@") >> $logfile 2>&1 <<EOF
715 #include <signal.h>
716 static void sighandler(int sig){
717     raise(SIGTERM);
718 }
719 int main(void){
720     signal(SIGILL, sighandler);
721     signal(SIGFPE, sighandler);
722     signal(SIGSEGV, sighandler);
723 #ifdef SIGBUS
724     signal(SIGBUS, sighandler);
725 #endif
726     { $code }
727 }
728 EOF
729 }
730
731 check_type(){
732     log check_type "$@"
733     headers=$1
734     type=$2
735     shift 2
736     disable $type
737     incs=""
738     for hdr in $headers; do
739         incs="$incs
740 #include <$hdr>"
741     done
742     check_cc "$@" <<EOF && enable $type
743 $incs
744 $type v;
745 EOF
746 }
747
748 require(){
749     name="$1"
750     header="$2"
751     func="$3"
752     shift 3
753     check_lib $header $func "$@" || die "ERROR: $name not found"
754 }
755
756 require2(){
757     name="$1"
758     headers="$2"
759     func="$3"
760     shift 3
761     check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
762 }
763
764 check_foo_config(){
765     cfg=$1
766     pkg=$2
767     header=$3
768     func=$4
769     shift 4
770     disable $cfg
771     check_cmd ${pkg}-config --version
772     err=$?
773     if test "$err" = 0; then
774         temp_cflags $(${pkg}-config --cflags)
775         temp_extralibs $(${pkg}-config --libs)
776         check_lib "$@" $header $func && enable $cfg
777     fi
778     return $err
779 }
780
781 check_host_cc(){
782     log check_host_cc "$@"
783     cat > $TMPC
784     log_file $TMPC
785     check_cmd $host_cc $host_cflags "$@" -c -o $TMPO $TMPC
786 }
787
788 check_host_cflags(){
789     log check_host_cflags "$@"
790     check_host_cc "$@" <<EOF && append host_cflags "$@"
791 int x;
792 EOF
793 }
794
795 apply(){
796     file=$1
797     shift
798     "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
799 }
800
801 # CONFIG_LIST contains configurable options, while HAVE_LIST is for
802 # system-dependent things.
803
804 COMPONENT_LIST="
805     bsfs
806     decoders
807     demuxers
808     encoders
809     filters
810     hwaccels
811     indevs
812     muxers
813     outdevs
814     parsers
815     protocols
816 "
817
818 CONFIG_LIST="
819     $COMPONENT_LIST
820     aandct
821     avfilter
822     avfilter_lavf
823     avisynth
824     beos_netserver
825     bzlib
826     fastdiv
827     ffmpeg
828     ffplay
829     ffserver
830     fft
831     golomb
832     gpl
833     gprof
834     gray
835     hardcoded_tables
836     ipv6
837     libdc1394
838     libdirac
839     libfaac
840     libfaad
841     libfaadbin
842     libgsm
843     libmp3lame
844     libnut
845     libopencore_amrnb
846     libopencore_amrwb
847     libopenjpeg
848     libschroedinger
849     libspeex
850     libtheora
851     libvorbis
852     libx264
853     libxvid
854     lpc
855     mdct
856     memalign_hack
857     mlib
858     mpegaudio_hp
859     network
860     nonfree
861     pic
862     postproc
863     powerpc_perf
864     rdft
865     runtime_cpudetect
866     shared
867     small
868     static
869     swscale_alpha
870     vaapi
871     vdpau
872     version3
873     x11grab
874     zlib
875 "
876
877 THREADS_LIST='
878     beosthreads
879     os2threads
880     pthreads
881     w32threads
882 '
883
884 ARCH_LIST='
885     alpha
886     arm
887     avr32
888     avr32_ap
889     avr32_uc
890     bfin
891     ia64
892     m68k
893     mips
894     mips64
895     parisc
896     ppc
897     ppc64
898     s390
899     sh4
900     sparc
901     sparc64
902     x86
903     x86_32
904     x86_64
905 '
906
907 ARCH_EXT_LIST='
908     altivec
909     amd3dnow
910     amd3dnowext
911     armv5te
912     armv6
913     armv6t2
914     armvfp
915     iwmmxt
916     mmi
917     mmx
918     mmx2
919     neon
920     ppc4xx
921     sse
922     ssse3
923     vis
924 '
925
926 HAVE_LIST="
927     $ARCH_EXT_LIST
928     $THREADS_LIST
929     alsa_asoundlib_h
930     altivec_h
931     arpa_inet_h
932     attribute_packed
933     bigendian
934     bswap
935     closesocket
936     cmov
937     conio_h
938     dcbzl
939     dev_bktr_ioctl_bt848_h
940     dev_bktr_ioctl_meteor_h
941     dev_ic_bt8xx_h
942     dev_video_meteor_ioctl_meteor_h
943     dev_video_bktr_ioctl_bt848_h
944     dlfcn_h
945     dlopen
946     dos_paths
947     ebp_available
948     ebx_available
949     fast_64bit
950     fast_cmov
951     fast_unaligned
952     fork
953     gethrtime
954     GetProcessTimes
955     getrusage
956     inet_aton
957     inline_asm
958     isatty
959     ldbrx
960     libdc1394_1
961     libdc1394_2
962     llrint
963     log2
964     loongson
965     lrint
966     lrintf
967     lzo1x_999_compress
968     machine_ioctl_bt848_h
969     machine_ioctl_meteor_h
970     malloc_h
971     memalign
972     mkstemp
973     pld
974     posix_memalign
975     round
976     roundf
977     sdl
978     sdl_video_size
979     setmode
980     socklen_t
981     soundcard_h
982     poll_h
983     sys_mman_h
984     sys_resource_h
985     sys_select_h
986     sys_soundcard_h
987     sys_videoio_h
988     ten_operands
989     termios_h
990     threads
991     truncf
992     vfp_args
993     VirtualAlloc
994     winsock2_h
995     xform_asm
996     yasm
997 "
998
999 # options emitted with CONFIG_ prefix but not available on command line
1000 CONFIG_EXTRA="
1001     gplv3
1002     lgplv3
1003 "
1004
1005 CMDLINE_SELECT="
1006     $ARCH_EXT_LIST
1007     $CONFIG_LIST
1008     $THREADS_LIST
1009     cross_compile
1010     debug
1011     extra_warnings
1012     logging
1013     optimizations
1014     stripping
1015     yasm
1016 "
1017
1018 PATHS_LIST='
1019     bindir
1020     datadir
1021     incdir
1022     libdir
1023     mandir
1024     prefix
1025     shlibdir
1026 '
1027
1028 CMDLINE_SET="
1029     $PATHS_LIST
1030     arch
1031     as
1032     build_suffix
1033     cc
1034     cpu
1035     cross_prefix
1036     dep_cc
1037     extra_version
1038     host_cc
1039     host_cflags
1040     host_ldflags
1041     host_libs
1042     host_os
1043     ld
1044     logfile
1045     nm
1046     source_path
1047     sysinclude
1048     sysroot
1049     target_exec
1050     target_os
1051     target_path
1052 "
1053
1054 CMDLINE_APPEND="
1055     extra_cflags
1056 "
1057
1058 # code dependency declarations
1059
1060 # architecture extensions
1061 altivec_deps="ppc"
1062 amd3dnow_deps="mmx"
1063 amd3dnowext_deps="amd3dnow"
1064 armv5te_deps="arm"
1065 armv6_deps="arm"
1066 armv6t2_deps="arm"
1067 armvfp_deps="arm"
1068 iwmmxt_deps="arm"
1069 mmi_deps="mips"
1070 mmx_deps="x86"
1071 mmx2_deps="mmx"
1072 neon_deps="arm"
1073 ppc4xx_deps="ppc"
1074 sse_deps="mmx"
1075 ssse3_deps="sse"
1076 vis_deps="sparc"
1077
1078 need_memalign="altivec neon sse"
1079 inline_asm_deps="!tms470"
1080
1081 # decoders / encoders / hardware accelerators
1082 aac_decoder_select="fft mdct"
1083 aac_encoder_select="fft mdct"
1084 ac3_decoder_select="fft mdct"
1085 alac_encoder_select="lpc"
1086 atrac3_decoder_select="fft mdct"
1087 cavs_decoder_select="golomb"
1088 cook_decoder_select="fft mdct"
1089 cscd_decoder_suggest="zlib"
1090 dca_decoder_select="fft mdct"
1091 dnxhd_encoder_select="aandct"
1092 dxa_decoder_select="zlib"
1093 eac3_decoder_select="ac3_decoder"
1094 eamad_decoder_select="aandct"
1095 eatgq_decoder_select="aandct"
1096 eatqi_decoder_select="aandct"
1097 ffv1_decoder_select="golomb"
1098 flac_decoder_select="golomb"
1099 flac_encoder_select="golomb lpc"
1100 flashsv_decoder_select="zlib"
1101 flashsv_encoder_select="zlib"
1102 flv_encoder_select="h263_encoder"
1103 h261_encoder_select="aandct"
1104 h263_encoder_select="aandct"
1105 h263_vaapi_hwaccel_deps="va_va_h"
1106 h263_vaapi_hwaccel_select="vaapi h263_decoder"
1107 h263p_encoder_select="h263_encoder"
1108 h264_decoder_select="golomb"
1109 h264_vaapi_hwaccel_deps="va_va_h"
1110 h264_vaapi_hwaccel_select="vaapi"
1111 h264_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1112 h264_vdpau_decoder_select="vdpau h264_decoder"
1113 imc_decoder_select="fft mdct"
1114 jpegls_decoder_select="golomb"
1115 jpegls_encoder_select="golomb"
1116 ljpeg_encoder_select="aandct"
1117 loco_decoder_select="golomb"
1118 mjpeg_encoder_select="aandct"
1119 mpeg1video_encoder_select="aandct"
1120 mpeg2video_encoder_select="aandct"
1121 mpeg4_encoder_select="h263_encoder"
1122 mpeg_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1123 mpeg_vdpau_decoder_select="vdpau mpegvideo_decoder"
1124 mpeg1_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1125 mpeg1_vdpau_decoder_select="vdpau mpeg1video_decoder"
1126 mpeg2_vaapi_hwaccel_deps="va_va_h"
1127 mpeg2_vaapi_hwaccel_select="vaapi mpeg2video_decoder"
1128 mpeg4_vaapi_hwaccel_deps="va_va_h"
1129 mpeg4_vaapi_hwaccel_select="vaapi mpeg4_decoder"
1130 mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h"
1131 mpeg_xvmc_decoder_select="mpegvideo_decoder"
1132 msmpeg4v1_encoder_select="h263_encoder"
1133 msmpeg4v2_encoder_select="h263_encoder"
1134 msmpeg4v3_encoder_select="h263_encoder"
1135 nellymoser_decoder_select="fft mdct"
1136 nellymoser_encoder_select="fft mdct"
1137 png_decoder_select="zlib"
1138 png_encoder_select="zlib"
1139 qdm2_decoder_select="fft mdct rdft"
1140 rv10_encoder_select="h263_encoder"
1141 rv20_encoder_select="h263_encoder"
1142 rv30_decoder_select="golomb"
1143 rv40_decoder_select="golomb"
1144 shorten_decoder_select="golomb"
1145 sonic_decoder_select="golomb"
1146 sonic_encoder_select="golomb"
1147 sonic_ls_encoder_select="golomb"
1148 svq3_decoder_select="golomb"
1149 svq3_decoder_suggest="zlib"
1150 theora_decoder_select="vp3_decoder"
1151 tiff_decoder_suggest="zlib"
1152 tiff_encoder_suggest="zlib"
1153 tscc_decoder_select="zlib"
1154 vc1_vaapi_hwaccel_deps="va_va_h"
1155 vc1_vaapi_hwaccel_select="vaapi vc1_decoder"
1156 vc1_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1157 vc1_vdpau_decoder_select="vdpau vc1_decoder"
1158 vorbis_decoder_select="fft mdct"
1159 vorbis_encoder_select="fft mdct"
1160 vp6a_decoder_select="vp6_decoder"
1161 vp6f_decoder_select="vp6_decoder"
1162 wmav1_decoder_select="fft mdct"
1163 wmav1_encoder_select="fft mdct"
1164 wmav2_decoder_select="fft mdct"
1165 wmav2_encoder_select="fft mdct"
1166 wmv1_encoder_select="h263_encoder"
1167 wmv2_encoder_select="h263_encoder"
1168 wmv3_decoder_select="vc1_decoder"
1169 wmv3_vaapi_hwaccel_select="vc1_vaapi_hwaccel"
1170 wmv3_vdpau_decoder_select="vc1_vdpau_decoder"
1171 zlib_decoder_select="zlib"
1172 zlib_encoder_select="zlib"
1173 zmbv_decoder_select="zlib"
1174 zmbv_encoder_select="zlib"
1175
1176 # parsers
1177 h264_parser_select="golomb"
1178
1179 # external libraries
1180 libdirac_decoder_deps="libdirac !libschroedinger"
1181 libdirac_encoder_deps="libdirac"
1182 libfaac_encoder_deps="libfaac"
1183 libfaad_decoder_deps="libfaad"
1184 libfaadbin_decoder_extralibs='$ldl'
1185 libgsm_decoder_deps="libgsm"
1186 libgsm_encoder_deps="libgsm"
1187 libgsm_ms_decoder_deps="libgsm"
1188 libgsm_ms_encoder_deps="libgsm"
1189 libmp3lame_encoder_deps="libmp3lame"
1190 libopencore_amrnb_decoder_deps="libopencore_amrnb"
1191 libopencore_amrnb_encoder_deps="libopencore_amrnb"
1192 libopencore_amrwb_decoder_deps="libopencore_amrwb"
1193 libopenjpeg_decoder_deps="libopenjpeg"
1194 libschroedinger_decoder_deps="libschroedinger"
1195 libschroedinger_encoder_deps="libschroedinger"
1196 libspeex_decoder_deps="libspeex"
1197 libtheora_encoder_deps="libtheora"
1198 libvorbis_encoder_deps="libvorbis"
1199 libx264_encoder_deps="libx264"
1200 libxvid_encoder_deps="libxvid"
1201
1202 # demuxers / muxers
1203 ac3_demuxer_deps="ac3_parser"
1204 asf_stream_muxer_select="asf_muxer"
1205 avisynth_demuxer_deps="avisynth"
1206 dirac_demuxer_deps="dirac_parser"
1207 ipod_muxer_select="mov_muxer"
1208 libnut_demuxer_deps="libnut"
1209 libnut_muxer_deps="libnut"
1210 matroska_audio_muxer_select="matroska_muxer"
1211 matroska_demuxer_suggest="zlib bzlib"
1212 mov_demuxer_suggest="zlib"
1213 mp3_demuxer_deps="mpegaudio_parser"
1214 mp4_muxer_select="mov_muxer"
1215 mpegtsraw_demuxer_select="mpegts_demuxer"
1216 mxf_d10_muxer_select="mxf_muxer"
1217 psp_muxer_select="mov_muxer"
1218 rtp_muxer_deps="network rtp_protocol"
1219 rtsp_demuxer_deps="sdp_demuxer"
1220 sdp_demuxer_deps="rtp_protocol mpegts_demuxer"
1221 tg2_muxer_select="mov_muxer"
1222 tgp_muxer_select="mov_muxer"
1223 w64_demuxer_deps="wav_demuxer"
1224
1225 # indevs / outdevs
1226 alsa_indev_deps="alsa_asoundlib_h snd_pcm_htimestamp"
1227 alsa_indev_extralibs="-lasound"
1228 alsa_outdev_deps="alsa_asoundlib_h"
1229 alsa_outdev_extralibs="-lasound"
1230 audio_beos_indev_deps="audio_beos"
1231 audio_beos_indev_extralibs="-lmedia -lbe"
1232 audio_beos_outdev_deps="audio_beos"
1233 audio_beos_outdev_extralibs="-lmedia -lbe"
1234 bktr_indev_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
1235 dv1394_indev_deps="dv1394 dv_demuxer"
1236 jack_indev_deps="jack_jack_h"
1237 jack_indev_extralibs="-ljack"
1238 libdc1394_indev_deps="libdc1394"
1239 oss_indev_deps_any="soundcard_h sys_soundcard_h"
1240 oss_outdev_deps_any="soundcard_h sys_soundcard_h"
1241 v4l_indev_deps="linux_videodev_h"
1242 v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h"
1243 vfwcap_indev_deps="capCreateCaptureWindow"
1244 vfwcap_indev_extralibs="-lvfw32"
1245 x11_grab_device_indev_deps="x11grab XShmCreateImage"
1246 x11_grab_device_indev_extralibs="-lX11 -lXext"
1247
1248 # protocols
1249 gopher_protocol_deps="network"
1250 http_protocol_deps="network"
1251 rtmp_protocol_deps="tcp_protocol"
1252 rtp_protocol_deps="udp_protocol"
1253 tcp_protocol_deps="network"
1254 udp_protocol_deps="network"
1255
1256 # filters
1257 movie_filter_deps="avfilter_lavf"
1258
1259 # programs
1260 ffplay_deps="sdl"
1261 ffserver_deps="ffm_muxer rtp_protocol rtsp_demuxer"
1262 ffserver_extralibs='$ldl'
1263
1264
1265 # default parameters
1266
1267 logfile="config.err"
1268
1269 # installation paths
1270 prefix_default="/usr/local"
1271 bindir_default='${prefix}/bin'
1272 datadir_default='${prefix}/share/ffmpeg'
1273 incdir_default='${prefix}/include'
1274 libdir_default='${prefix}/lib'
1275 mandir_default='${prefix}/share/man'
1276 shlibdir_default="$libdir_default"
1277
1278 # toolchain
1279 ar="ar"
1280 cc_default="gcc"
1281 cc_version=\"unknown\"
1282 host_cc_default="gcc"
1283 ln_s="ln -sf"
1284 nm_default="nm"
1285 objformat="elf"
1286 ranlib="ranlib"
1287 strip="strip"
1288 yasmexe="yasm"
1289
1290 # machine
1291 arch=$(uname -m)
1292 cpu="generic"
1293
1294 # OS
1295 target_os=$(tolower $(uname -s))
1296 host_os=$target_os
1297
1298 # configurable options
1299 enable debug
1300 enable fastdiv
1301 enable ffmpeg
1302 enable ffplay
1303 enable ffserver
1304 enable ipv6
1305 enable mpegaudio_hp
1306 enable network
1307 enable optimizations
1308 enable protocols
1309 enable static
1310 enable stripping
1311 enable swscale_alpha
1312
1313 # build settings
1314 SHFLAGS='-shared -Wl,-soname,$$(@F)'
1315 FFSERVERLDFLAGS=-Wl,-E
1316 LIBPREF="lib"
1317 LIBSUF=".a"
1318 FULLNAME='$(NAME)$(BUILDSUF)'
1319 LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
1320 SLIBPREF="lib"
1321 SLIBSUF=".so"
1322 SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
1323 SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
1324 SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
1325 LIB_INSTALL_EXTRA_CMD='$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
1326
1327 CC_O='-o $@'
1328
1329 host_cflags='-D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112 -O3 -g -Wall'
1330 host_libs='-lm'
1331
1332 target_path='.'
1333
1334 # gcc stupidly only outputs the basename of targets with -MM, but we need the
1335 # full relative path for objects in subdirectories for non-recursive Make.
1336 DEPEND_CMD='$(DEPCC) $(DEPFLAGS) $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o," > $(@:.o=.d)'
1337 DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -MM'
1338
1339 # find source path
1340 source_path="$(dirname "$0")"
1341 enable source_path_used
1342 if test -f configure; then
1343     source_path="$(pwd)"
1344     disable source_path_used
1345 else
1346     source_path="$(cd "$source_path"; pwd)"
1347     echo "$source_path" | grep -q '[[:blank:]]' &&
1348         die "Out of tree builds are impossible with whitespace in source path."
1349     test -e "$source_path/config.h" &&
1350         die "Out of tree builds are impossible with config.h in source dir."
1351 fi
1352
1353 for v in "$@"; do
1354     r=${v#*=}
1355     l=${v%"$r"}
1356     r=$(sh_quote "$r")
1357     FFMPEG_CONFIGURATION="${FFMPEG_CONFIGURATION# } ${l}${r}"
1358 done
1359
1360 find_things(){
1361     thing=$1
1362     pattern=$2
1363     file=$source_path/$3
1364     sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
1365 }
1366
1367 ENCODER_LIST=$(find_things  encoder  ENC      libavcodec/allcodecs.c)
1368 DECODER_LIST=$(find_things  decoder  DEC      libavcodec/allcodecs.c)
1369 HWACCEL_LIST=$(find_things  hwaccel  HWACCEL  libavcodec/allcodecs.c)
1370 PARSER_LIST=$(find_things   parser   PARSER   libavcodec/allcodecs.c)
1371 BSF_LIST=$(find_things      bsf      BSF      libavcodec/allcodecs.c)
1372 MUXER_LIST=$(find_things    muxer    _MUX     libavformat/allformats.c)
1373 DEMUXER_LIST=$(find_things  demuxer  DEMUX    libavformat/allformats.c)
1374 OUTDEV_LIST=$(find_things   outdev   OUTDEV   libavdevice/alldevices.c)
1375 INDEV_LIST=$(find_things    indev    _IN      libavdevice/alldevices.c)
1376 PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
1377 FILTER_LIST=$(find_things   filter   FILTER   libavfilter/allfilters.c)
1378
1379 enable $ARCH_EXT_LIST \
1380        $DECODER_LIST \
1381        $ENCODER_LIST \
1382        $HWACCEL_LIST \
1383        $PARSER_LIST \
1384        $BSF_LIST \
1385        $DEMUXER_LIST \
1386        $MUXER_LIST \
1387        $FILTER_LIST \
1388        $PROTOCOL_LIST \
1389        $INDEV_LIST \
1390        $OUTDEV_LIST \
1391
1392 die_unknown(){
1393     echo "Unknown option \"$1\"."
1394     echo "See $0 --help for available options."
1395     exit 1
1396 }
1397
1398 show_list() {
1399     suffix=_$1
1400     shift
1401     echo $* | sed s/$suffix//g | tr ' ' '\n' | sort
1402     exit 0
1403 }
1404
1405 for opt do
1406     optval="${opt#*=}"
1407     case "$opt" in
1408     --extra-ldflags=*) add_ldflags $optval
1409     ;;
1410     --extra-libs=*) add_extralibs $optval
1411     ;;
1412     --disable-devices) disable $INDEV_LIST $OUTDEV_LIST
1413     ;;
1414     --enable-debug=*) debuglevel="$optval"
1415     ;;
1416     --enable-*=*|--disable-*=*)
1417     eval $(echo "${opt%%=*}" | sed 's/--/action=/;s/-/ thing=/')
1418     is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt"
1419     eval list=\$$(toupper $thing)_LIST
1420     name=$(echo "${optval}" | sed "s/,/_${thing}|/g")_${thing}
1421     $action $(filter "$name" $list)
1422     ;;
1423     --enable-?*|--disable-?*)
1424     eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
1425     if is_in $option $COMPONENT_LIST; then
1426         test $action = disable && action=unset
1427         eval $action \$$(toupper ${option%s})_LIST
1428     elif is_in $option $CMDLINE_SELECT; then
1429         $action $option
1430     else
1431         die_unknown $opt
1432     fi
1433     ;;
1434     --list-*)
1435         NAME="${opt#--list-}"
1436         is_in $NAME $COMPONENT_LIST || die_unknown $opt
1437         NAME=${NAME%s}
1438         eval show_list $NAME \$$(toupper $NAME)_LIST
1439     ;;
1440     --help|-h) show_help
1441     ;;
1442     *)
1443     optname="${opt%%=*}"
1444     optname="${optname#--}"
1445     optname=$(echo "$optname" | sed 's/-/_/g')
1446     if is_in $optname $CMDLINE_SET; then
1447         eval $optname='$optval'
1448     elif is_in $optname $CMDLINE_APPEND; then
1449         append $optname "$optval"
1450     else
1451          die_unknown $opt
1452     fi
1453     ;;
1454     esac
1455 done
1456
1457 disabled logging && logfile=/dev/null
1458
1459 echo "# $0 $FFMPEG_CONFIGURATION" > $logfile
1460 set >> $logfile
1461
1462 test -n "$cross_prefix" && enable cross_compile
1463
1464 ar="${cross_prefix}${ar}"
1465 cc_default="${cross_prefix}${cc_default}"
1466 nm_default="${cross_prefix}${nm_default}"
1467 ranlib="${cross_prefix}${ranlib}"
1468 strip="${cross_prefix}${strip}"
1469
1470 sysinclude_default="${sysroot}/usr/include"
1471
1472 set_default cc nm sysinclude
1473 enabled cross_compile || host_cc_default=$cc
1474 set_default host_cc
1475
1476 exesuf() {
1477     case $1 in
1478         mingw32*|cygwin*|*-dos|freedos|opendos|os/2*) echo .exe ;;
1479     esac
1480 }
1481
1482 EXESUF=$(exesuf $target_os)
1483 HOSTEXESUF=$(exesuf $host_os)
1484
1485 # set temporary file name
1486 : ${TMPDIR:=$TEMPDIR}
1487 : ${TMPDIR:=$TMP}
1488 : ${TMPDIR:=/tmp}
1489
1490 if ! check_cmd type mktemp; then
1491     # simple replacement for missing mktemp
1492     # NOT SAFE FOR GENERAL USE
1493     mktemp(){
1494         echo "${2%XXX*}.${HOSTNAME}.${UID}.$$"
1495     }
1496 fi
1497
1498 tmpfile(){
1499     tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
1500         (set -C; exec > $tmp) 2>/dev/null ||
1501         die "Unable to create temporary file in $TMPDIR."
1502     append TMPFILES $tmp
1503     eval $1=$tmp
1504 }
1505
1506 trap 'rm -f -- $TMPFILES' EXIT
1507 trap exit HUP INT TERM
1508
1509 tmpfile TMPC  .c
1510 tmpfile TMPE  $EXESUF
1511 tmpfile TMPH  .h
1512 tmpfile TMPO  .o
1513 tmpfile TMPS  .S
1514 tmpfile TMPSH .sh
1515
1516 unset -f mktemp
1517
1518 # make sure we can execute files in $TMPDIR
1519 cat > $TMPSH 2>> $logfile <<EOF
1520 #! /bin/sh
1521 EOF
1522 chmod +x $TMPSH >> $logfile 2>&1
1523 if ! $TMPSH >> $logfile 2>&1; then
1524     cat <<EOF
1525 Unable to create and execute files in $TMPDIR.  Set the TMPDIR environment
1526 variable to another directory and make sure that it is not mounted noexec.
1527 EOF
1528     die "Sanity test failed."
1529 fi
1530
1531 filter_cflags=echo
1532 filter_cppflags=echo
1533 filter_asflags=echo
1534
1535 if   $cc -v 2>&1 | grep -qi ^gcc; then
1536     cc_type=gcc
1537     cc_version=__VERSION__
1538     if ! $cc -dumpversion | grep -q '^2\.'; then
1539         CC_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
1540         AS_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
1541     fi
1542 elif $cc --version 2>/dev/null | grep -q Intel; then
1543     cc_type=icc
1544     cc_version="AV_STRINGIFY(__INTEL_COMPILER)"
1545     CC_DEPFLAGS='-MMD'
1546     AS_DEPFLAGS='-MMD'
1547 elif $cc -v 2>&1 | grep -q xlc; then
1548     cc_type=xlc
1549     cc_version="AV_STRINGIFY(__IBMC__)"
1550 elif $cc -V 2>/dev/null | grep -q Compaq; then
1551     cc_type=ccc
1552     cc_version="AV_STRINGIFY(__DECC_VER)"
1553     DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -M'
1554     debuglevel=3
1555     add_ldflags -Wl,-z,now # calls to libots crash without this
1556 elif $cc --vsn 2>/dev/null | grep -q "ARM C/C++ Compiler"; then
1557     test -d "$sysroot" || die "No valid sysroot specified."
1558     cc_type=armcc
1559     cc_version="AV_STRINGIFY(__ARMCC_VERSION)"
1560     armcc_conf="$PWD/armcc.conf"
1561     $cc --arm_linux_configure                 \
1562         --arm_linux_config_file="$armcc_conf" \
1563         --configure_sysroot="$sysroot"        \
1564         --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
1565         die "Error creating armcc configuration file."
1566     cc="$cc --arm_linux_config_file=$armcc_conf --translate_gcc"
1567     as_default="${cross_prefix}gcc"
1568     CC_DEPFLAGS='-MMD'
1569     AS_DEPFLAGS='-MMD'
1570 elif $cc -version 2>/dev/null | grep -q TMS470; then
1571     cc_type=tms470
1572     cc_version="AV_STRINGIFY(__TI_COMPILER_VERSION__)"
1573     cc="$cc --gcc --abi=eabi -eo=.o -mc -me"
1574     CC_O='-fr=$(@D)'
1575     as_default="${cross_prefix}gcc"
1576     ld_default="${cross_prefix}gcc"
1577     TMPO=$(basename $TMPC .c).o
1578     append TMPFILES $TMPO
1579     add_cflags -D__gnuc_va_list=va_list -D__USER_LABEL_PREFIX__=
1580     CC_DEPFLAGS='-ppa -ppd=$(@:.o=.d)'
1581     AS_DEPFLAGS='-MMD'
1582     filter_cflags=tms470_flags
1583     tms470_flags(){
1584         for flag; do
1585             case $flag in
1586                 -march=*|-mcpu=*)
1587                     case "${flag#*=}" in
1588                         armv7-a|cortex-a*)      echo -mv=7a8 ;;
1589                         armv7-r|cortex-r*)      echo -mv=7r4 ;;
1590                         armv7-m|cortex-m*)      echo -mv=7m3 ;;
1591                         armv6*|arm11*)          echo -mv=6   ;;
1592                         armv5*e|arm[79]*e*|arm9[24]6*|arm96*|arm102[26])
1593                                                 echo -mv=5e  ;;
1594                         armv4*|arm7*|arm9[24]*) echo -mv=4   ;;
1595                     esac
1596                     ;;
1597                 -mfpu=neon)     echo --float_support=vfpv3 --neon ;;
1598                 -mfpu=vfp)      echo --float_support=vfpv2        ;;
1599                 -msoft-float)   echo --float_support=vfplib       ;;
1600                 -Os)            echo -O3 -mf=2                    ;;
1601                 -O[0-3])        echo $flag -mf=5                  ;;
1602                 -g)             echo -g -mn                       ;;
1603             esac
1604         done
1605     }
1606 elif $cc -v 2>&1 | grep -q clang; then
1607     cc_type=clang
1608     cc_version=__VERSION__
1609     CC_DEPFLAGS='-MMD'
1610     AS_DEPFLAGS='-MMD'
1611 elif $cc -V 2>&1 | grep -q Sun; then
1612     cc_type=suncc
1613     cc_version="AV_STRINGIFY(__SUNPRO_C)"
1614     DEPEND_CMD='$(DEPCC) $(DEPFLAGS) $< | sed -e "1s,^.*: ,$@: ," -e "\$$!s,\$$, \\\\\\," -e "1!s,^.*: , ," > $(@:.o=.d)'
1615     DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -xM1'
1616 fi
1617
1618 test -n "$cc_type" && enable $cc_type || echolog "Unknown C compiler $cc"
1619
1620 : ${as_default:=$cc}
1621 : ${dep_cc_default:=$cc}
1622 : ${ld_default:=$cc}
1623 set_default as dep_cc ld
1624
1625 test -n "$CC_DEPFLAGS" || CCDEP=$DEPEND_CMD
1626 test -n "$AS_DEPFLAGS" || ASDEP=$DEPEND_CMD
1627
1628 add_cflags $extra_cflags
1629 add_asflags $extra_cflags
1630
1631 if test -n "$sysroot"; then
1632     case "$cc_type" in
1633         gcc)
1634             add_cppflags --sysroot="$sysroot"
1635             add_ldflags --sysroot="$sysroot"
1636         ;;
1637         tms470)
1638             add_cppflags -I"$sysinclude"
1639             add_ldflags  --sysroot="$sysroot"
1640         ;;
1641         clang)
1642             add_cppflags -isysroot="$sysroot"
1643             add_ldflags -isysroot="$sysroot"
1644         ;;
1645     esac
1646 fi
1647
1648 if test "$cpu" = host; then
1649     enabled cross_compile && die "--cpu=host makes no sense when cross-compiling."
1650
1651     case "$cc_type" in
1652         gcc)
1653             check_native(){
1654                 $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
1655                 awk "/$1=/{ match(\$0, /$1=(\\w+)/, a);print a[1];exit }" $TMPE
1656             }
1657             cpu=$(check_native -march || check_native -mcpu)
1658         ;;
1659     esac
1660
1661     test "${cpu:-host}" = host && die "--cpu=host not supported with compiler $cc"
1662 fi
1663
1664 # Add processor-specific flags
1665 case $cpu in
1666     601|ppc601|PowerPC601)
1667         cpuflags="-mcpu=601"
1668     ;;
1669     603*|ppc603*|PowerPC603*)
1670         cpuflags="-mcpu=603"
1671     ;;
1672     604*|ppc604*|PowerPC604*)
1673         cpuflags="-mcpu=604"
1674     ;;
1675     G3|g3|75*|ppc75*|PowerPC75*)
1676         cpuflags="-mcpu=750 -mpowerpc-gfxopt"
1677     ;;
1678     G4|g4|745*|ppc745*|PowerPC745*)
1679         cpuflags="-mcpu=7450 -mpowerpc-gfxopt"
1680     ;;
1681     74*|ppc74*|PowerPC74*)
1682         cpuflags="-mcpu=7400 -mpowerpc-gfxopt"
1683     ;;
1684     G5|g5|970|ppc970|PowerPC970|power4*|Power4*)
1685         cpuflags="-mcpu=970 -mpowerpc-gfxopt -mpowerpc64"
1686     ;;
1687     Cell|CELL|cell)
1688         cpuflags="-mcpu=cell"
1689         enable ldbrx
1690     ;;
1691     # targets that do NOT support conditional mov (cmov)
1692     i[345]86|pentium|pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
1693         cpuflags="-march=$cpu"
1694         disable cmov
1695     ;;
1696     # targets that do support conditional mov (cmov)
1697     i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2|amdfam10)
1698         cpuflags="-march=$cpu"
1699         enable cmov
1700         enable fast_cmov
1701     ;;
1702     # targets that do support conditional mov but on which it's slow
1703     pentium4|pentium4m|prescott|nocona)
1704         cpuflags="-march=$cpu"
1705         enable cmov
1706         disable fast_cmov
1707     ;;
1708     sparc64)
1709         cpuflags="-mcpu=v9"
1710     ;;
1711     arm11*|cortex*)
1712         cpuflags="-mcpu=$cpu"
1713         enable fast_unaligned
1714     ;;
1715     armv[67]*)
1716         cpuflags="-march=$cpu"
1717         enable fast_unaligned
1718     ;;
1719     armv*)
1720         cpuflags="-march=$cpu"
1721     ;;
1722     arm*)
1723         cpuflags="-mcpu=$cpu"
1724     ;;
1725     ev4|ev45|ev5|ev56|pca56|ev6|ev67)
1726         enabled ccc && cpuflags="-arch $cpu" || cpuflags="-mcpu=$cpu"
1727     ;;
1728     bf*)
1729         cpuflags="-mcpu=$cpu"
1730     ;;
1731     mips*|[45]k*|[237]4k*|m4k|r*000|loongson2[ef])
1732         cpuflags="-march=$cpu"
1733     ;;
1734     ap7[02]0[0-2])
1735         subarch="avr32_ap"
1736         cpuflags="-mpart=$cpu"
1737     ;;
1738     ap)
1739         subarch="avr32_ap"
1740         cpuflags="-march=$cpu"
1741     ;;
1742     uc3[ab]*)
1743         subarch="avr32_uc"
1744         cpuflags="-mcpu=$cpu"
1745     ;;
1746     uc)
1747         subarch="avr32_uc"
1748         cpuflags="-march=$cpu"
1749     ;;
1750     generic)
1751     ;;
1752     *)
1753         echo "WARNING: Unknown CPU \"$cpu\", ignored."
1754     ;;
1755 esac
1756
1757 add_cflags $cpuflags
1758 add_asflags $cpuflags
1759
1760 # compiler sanity check
1761 check_exec <<EOF
1762 int main(void){ return 0; }
1763 EOF
1764 if test "$?" != 0; then
1765     echo "$cc is unable to create an executable file."
1766     if test -z "$cross_prefix" && ! enabled cross_compile ; then
1767         echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
1768         echo "Only do this if you know what cross compiling means."
1769     fi
1770     die "C compiler test failed."
1771 fi
1772
1773 add_cppflags -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112
1774 check_cflags -std=c99
1775 check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
1776 #include <stdlib.h>
1777 EOF
1778 check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
1779 #include <stdlib.h>
1780 EOF
1781
1782 check_host_cflags -std=c99
1783
1784 case "$arch" in
1785     alpha)
1786         arch="alpha"
1787         enable fast_64bit
1788         check_cflags -mieee
1789         spic=$shared
1790     ;;
1791     arm|armv[4567]*l)
1792         arch="arm"
1793     ;;
1794     avr32)
1795     ;;
1796     bfin)
1797         arch="bfin"
1798     ;;
1799     ia64)
1800         arch="ia64"
1801         enable fast_64bit
1802         spic=$shared
1803     ;;
1804     m68k)
1805         arch="m68k"
1806     ;;
1807     mips|mipsel|IP*)
1808         arch="mips"
1809         spic=$shared
1810     ;;
1811     mips64)
1812         arch="mips"
1813         subarch="mips64"
1814         enable fast_64bit
1815         spic=$shared
1816     ;;
1817     parisc|hppa)
1818         arch="parisc"
1819         spic=$shared
1820     ;;
1821     parisc64|hppa64)
1822         arch="parisc"
1823         enable fast_64bit
1824         spic=$shared
1825     ;;
1826     "Power Macintosh"|ppc|powerpc)
1827         arch="ppc"
1828         enable fast_unaligned
1829     ;;
1830     ppc64)
1831         arch="ppc"
1832         subarch="ppc64"
1833         enable fast_64bit
1834         enable fast_unaligned
1835     ;;
1836     s390|s390x)
1837         arch="s390"
1838     ;;
1839     sh4|sh)
1840         arch="sh4"
1841     ;;
1842     sparc)
1843         arch="sparc"
1844         spic=$shared
1845     ;;
1846     sun4u|sparc64)
1847         arch="sparc"
1848         subarch="sparc64"
1849         enable fast_64bit
1850         spic=$shared
1851     ;;
1852     i386|i486|i586|i686|i86pc|BePC|x86_64|amd64)
1853         arch="x86"
1854         subarch="x86_32"
1855         enable fast_unaligned
1856         check_cc <<EOF && enable fast_64bit && subarch="x86_64" && spic=$shared
1857         int test[sizeof(char*) - 7];
1858 EOF
1859         if test "$subarch" = "x86_64"; then
1860             enable cmov
1861             enable fast_cmov
1862         fi
1863     ;;
1864     *)
1865         arch="unknown"
1866     ;;
1867 esac
1868
1869 enable $arch $subarch
1870 enabled spic && enable pic
1871
1872 # OS specific
1873 case $target_os in
1874     beos|haiku|zeta)
1875         prefix_default="$HOME/config"
1876         # helps building libavcodec
1877         add_cppflags -DPIC
1878         add_cflags -fomit-frame-pointer
1879         # 3 gcc releases known for BeOS, each with ugly bugs
1880         gcc_version="$($cc -v 2>&1 | grep version | cut -d ' ' -f3-)"
1881         case "$gcc_version" in
1882           2.9-beos-991026*|2.9-beos-000224*) echo "R5/GG gcc"
1883             disable mmx
1884             ;;
1885           *20010315*) echo "BeBits gcc"
1886             add_cflags -fno-expensive-optimizations
1887             ;;
1888         esac
1889         SHFLAGS=-nostart
1890         # enable BeOS things
1891         enable audio_beos
1892         # no need for libm, but the inet stuff
1893         # Check for BONE
1894         # XXX: actually should check for NOT net_server
1895         if echo $BEINCLUDES | grep -q 'headers/be/bone'; then
1896             network_extralibs="-lbind -lsocket"
1897         else
1898             enable beos_netserver
1899             network_extralibs="-lnet"
1900         fi ;;
1901     sunos)
1902         FFSERVERLDFLAGS=""
1903         SHFLAGS='-shared -Wl,-h,$$(@F)'
1904         enabled x86 && SHFLAGS="-mimpure-text $SHFLAGS"
1905         network_extralibs="-lsocket -lnsl"
1906         add_cppflags -D__EXTENSIONS__
1907         ;;
1908     netbsd)
1909         oss_indev_extralibs="-lossaudio"
1910         oss_outdev_extralibs="-lossaudio"
1911         ;;
1912     openbsd)
1913         enable malloc_aligned
1914         enable pic
1915         SHFLAGS='-shared'
1916         oss_indev_extralibs="-lossaudio"
1917         oss_outdev_extralibs="-lossaudio"
1918         ;;
1919     freebsd|dragonfly)
1920         enable malloc_aligned
1921         ;;
1922     bsd/os)
1923         osextralibs="-lpoll -lgnugetopt"
1924         strip="strip -d"
1925         ;;
1926     darwin)
1927         enable malloc_aligned
1928         SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR) -Wl,-read_only_relocs,suppress'
1929         strip="strip -x"
1930         FFLDFLAGS="-Wl,-dynamic,-search_paths_first"
1931         SLIBSUF=".dylib"
1932         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
1933         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
1934         FFSERVERLDFLAGS=-Wl,-bind_at_load
1935         objformat="macho"
1936         enabled x86_64 && objformat="macho64"
1937         enabled_any pic shared ||
1938             { check_cflags -mdynamic-no-pic && add_asflags -mdynamic-no-pic; }
1939         ;;
1940     mingw32*)
1941         if test $target_os = "mingw32ce"; then
1942             disable network
1943         else
1944             target_os=mingw32
1945         fi
1946         LIBTARGET=i386
1947         if enabled x86_64; then
1948             enable malloc_aligned
1949             LIBTARGET=x64
1950         elif enabled arm; then
1951             LIBTARGET=arm
1952         fi
1953         shlibdir_default="$bindir_default"
1954         disable ffserver
1955         SLIBPREF=""
1956         SLIBSUF=".dll"
1957         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1958         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1959         SLIB_EXTRA_CMD='-lib.exe /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)'
1960         SLIB_INSTALL_EXTRA_CMD='-install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"; \
1961             install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)"; \
1962             install -d "$(LIBDIR)"; \
1963             install -m 644 $(SUBDIR)lib$(SLIBNAME:$(SLIBSUF)=.dll.a) "$(LIBDIR)/lib$(SLIBNAME:$(SLIBSUF)=.dll.a)"'
1964         SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"'
1965         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'
1966         objformat="win32"
1967         enable dos_paths
1968         check_cflags -fno-common
1969         if ! enabled x86_64; then
1970             check_cpp_condition _mingw.h "(__MINGW32_MAJOR_VERSION > 3) || (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
1971                 die "ERROR: MinGW runtime version must be >= 3.15."
1972             enabled_any avisynth vfwcap_indev &&
1973                 { check_cpp_condition w32api.h "(__W32API_MAJOR_VERSION > 3) || (__W32API_MAJOR_VERSION == 3 && __W32API_MINOR_VERSION >= 13)" ||
1974                   die "ERROR: avisynth and vfwcap_indev require w32api version 3.13 or later."; }
1975             fi
1976         ;;
1977     cygwin*)
1978         target_os=cygwin
1979         shlibdir_default="$bindir_default"
1980         SLIBPREF="cyg"
1981         SLIBSUF=".dll"
1982         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1983         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1984         SHFLAGS='-shared -Wl,--enable-auto-image-base'
1985         objformat="win32"
1986         enable dos_paths
1987         check_cflags -fno-common
1988         ;;
1989     *-dos|freedos|opendos)
1990         disable ffplay ffserver
1991         disable $INDEV_LIST $OUTDEV_LIST
1992         network_extralibs="-lsocket"
1993         objformat="coff"
1994         enable dos_paths
1995         ;;
1996     linux)
1997         enable dv1394
1998         ;;
1999     irix*)
2000         target_os=irix
2001         ranlib="echo ignoring ranlib"
2002         ;;
2003     os/2*)
2004         strip="lxlite"
2005         ln_s="cp -f"
2006         FFLDFLAGS="-Zomf -Zbin-files -Zargs-wild -Zmap"
2007         SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
2008         FFSERVERLDFLAGS=""
2009         LIBSUF="_s.a"
2010         SLIBPREF=""
2011         SLIBSUF=".dll"
2012         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
2013         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
2014         SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
2015           echo PROTMODE >> $(SUBDIR)$(NAME).def; \
2016           echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
2017           echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
2018           echo EXPORTS >> $(SUBDIR)$(NAME).def; \
2019           emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
2020         SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
2021           emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
2022         SLIB_INSTALL_EXTRA_CMD='install -m 644 $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib "$(LIBDIR)"'
2023         SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.a "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.lib'
2024         enable dos_paths
2025         ;;
2026     gnu/kfreebsd)
2027         ;;
2028     gnu)
2029         ;;
2030
2031     *)
2032         die "Unknown OS '$target_os'."
2033         ;;
2034 esac
2035
2036 set_default $PATHS_LIST
2037
2038 add_extralibs $osextralibs
2039
2040 # Combine FFLDFLAGS and the LDFLAGS environment variable.
2041 LDFLAGS="$FFLDFLAGS $LDFLAGS"
2042
2043 # we need to build at least one lib type
2044 if ! enabled_any static shared; then
2045     cat <<EOF
2046 At least one library type must be built.
2047 Specify --enable-static to build the static libraries or --enable-shared to
2048 build the shared libraries as well. To only build the shared libraries specify
2049 --disable-static in addition to --enable-shared.
2050 EOF
2051     exit 1;
2052 fi
2053
2054 disabled static && LIBNAME=""
2055
2056 if enabled_any libfaad libfaadbin ; then
2057     if check_header faad.h; then
2058         check_cc <<EOF
2059 #include <faad.h>
2060 #ifndef FAAD2_VERSION
2061 ok faad1
2062 #endif
2063 int main(void) { return 0; }
2064 EOF
2065         test $? = 0 && enable libfaad2
2066     else
2067         die "FAAD test failed."
2068     fi
2069 fi
2070
2071
2072 die_license_disabled() {
2073     enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
2074 }
2075
2076 die_license_disabled gpl libfaad2
2077 die_license_disabled gpl libx264
2078 die_license_disabled gpl libxvid
2079 die_license_disabled gpl postproc
2080 die_license_disabled gpl x11grab
2081
2082 die_license_disabled nonfree libfaac
2083
2084 die_license_disabled version3 libopencore_amrnb
2085 die_license_disabled version3 libopencore_amrwb
2086
2087 enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
2088
2089 check_deps $ARCH_EXT_LIST
2090
2091 disabled optimizations || check_cflags -fomit-frame-pointer
2092
2093 enable_pic() {
2094     enable pic
2095     add_cppflags -DPIC
2096     add_cflags   -fPIC
2097     add_asflags  -fPIC
2098 }
2099
2100 enabled pic && enable_pic
2101
2102 check_cc <<EOF || die "Symbol mangling check failed."
2103 int ff_extern;
2104 EOF
2105 sym=$($nm -P -g $TMPO | grep ff_extern)
2106 extern_prefix=${sym%%ff_extern*}
2107
2108 check_cc <<EOF && enable inline_asm
2109 void foo(void) { __asm__ volatile ("" ::); }
2110 EOF
2111
2112 _restrict=
2113 for restrict_keyword in restrict __restrict__ __restrict; do
2114     check_cc <<EOF && _restrict=$restrict_keyword && break
2115 void foo(char * $restrict_keyword p);
2116 EOF
2117 done
2118
2119 check_cc <<EOF && enable attribute_packed
2120 struct { int x; } __attribute__((packed)) x;
2121 EOF
2122
2123 check_cc <<EOF || die "endian test failed"
2124 unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
2125 EOF
2126 od -A n -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
2127
2128 if enabled arm; then
2129
2130     check_cflags -marm
2131
2132     check_ld <<EOF && enable vfp_args
2133 __asm__ (".eabi_attribute 28, 1");
2134 int main(void) { return 0; }
2135 EOF
2136
2137     # We have to check if pld is a nop and disable it.
2138     check_asm pld '"pld [r0]"'
2139
2140     enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
2141     enabled armv6   && check_asm armv6   '"sadd16 r0, r0, r0"'
2142     enabled armv6t2 && check_asm armv6t2 '"movt r0, #0"'
2143     enabled armvfp  && check_asm armvfp  '"fadds s0, s0, s0"'
2144     enabled iwmmxt  && check_asm iwmmxt  '"wunpckelub wr6, wr4"'
2145     enabled neon    && check_asm neon    '"vadd.i16 q0, q0, q0"'
2146
2147     enabled_all armv6t2 shared !pic && enable_pic
2148
2149 elif enabled mips; then
2150
2151     check_asm loongson '"dmult.g $1, $2, $3"'
2152     enabled mmi     && check_asm mmi     '"lq $2, 0($2)"'
2153
2154 elif enabled ppc; then
2155
2156     check_asm dcbzl     '"dcbzl 0, 1"'
2157     check_asm ppc4xx    '"maclhw r10, r11, r12"'
2158     check_asm xform_asm '"lwzx 0, %y0" :: "Z"(*(int*)0)'
2159
2160     # AltiVec flags: The FSF version of GCC differs from the Apple version
2161     if enabled altivec; then
2162         check_cflags -maltivec -mabi=altivec &&
2163         { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
2164         check_cflags -faltivec
2165
2166         # check if our compiler supports Motorola AltiVec C API
2167         check_cc <<EOF || disable altivec
2168 $inc_altivec_h
2169 int main(void) {
2170     vector signed int v1, v2, v3;
2171     v1 = vec_add(v2,v3);
2172     return 0;
2173 }
2174 EOF
2175
2176         # check if our compiler supports braces for vector declarations
2177         check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
2178 $inc_altivec_h
2179 int main (void) { (vector int) {1}; return 0; }
2180 EOF
2181     fi
2182
2183 elif enabled sparc; then
2184
2185     enabled vis && check_asm vis '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc &&
2186         add_cflags -mcpu=ultrasparc -mtune=ultrasparc
2187
2188 elif enabled x86; then
2189
2190     # check whether EBP is available on x86
2191     # As 'i' is stored on the stack, this program will crash
2192     # if the base pointer is used to access it because the
2193     # base pointer is cleared in the inline assembly code.
2194     check_exec_crash <<EOF && enable ebp_available
2195     volatile int i=0;
2196     __asm__ volatile (
2197         "xorl %%ebp, %%ebp"
2198     ::: "%ebp");
2199     return i;
2200 EOF
2201
2202     # check whether EBX is available on x86
2203     check_asm ebx_available '""::"b"(0)' &&
2204         check_asm ebx_available '"":::"%ebx"'
2205
2206     # check whether more than 10 operands are supported
2207     check_cc <<EOF && enable ten_operands
2208 int main(void) {
2209     int x=0;
2210     __asm__ volatile(
2211         ""
2212         :"+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x)
2213     );
2214     return 0;
2215 }
2216 EOF
2217
2218     # check whether binutils is new enough to compile SSSE3/MMX2
2219     enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
2220     enabled mmx2  && check_asm mmx2  '"pmaxub %mm0, %mm1"'
2221
2222     check_asm bswap '"bswap %%eax" ::: "%eax"'
2223
2224     YASMFLAGS="-f $objformat -DARCH_$(toupper $subarch)"
2225     enabled     x86_64        && append YASMFLAGS "-m amd64"
2226     enabled_all x86_64 shared && append YASMFLAGS "-DPIC"
2227     case "$objformat" in
2228         elf) enabled debug && append YASMFLAGS "-g dwarf2" ;;
2229         macho64)              append YASMFLAGS "-DPIC -DPREFIX" ;;
2230         *)                    append YASMFLAGS "-DPREFIX"  ;;
2231     esac
2232     disabled yasm || { check_yasm "pabsw xmm0, xmm0" && enable yasm; }
2233
2234 fi
2235
2236 if check_func dlopen; then
2237     ldl=
2238 elif check_func dlopen -ldl; then
2239     ldl=-ldl
2240 fi
2241
2242 # Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
2243 check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
2244
2245 check_func  fork
2246 check_func  gethrtime
2247 check_func  getrusage
2248 check_func  inet_aton $network_extralibs
2249 check_func  isatty
2250 check_func  memalign
2251 check_func  mkstemp
2252 check_func  posix_memalign
2253 check_func_headers io.h setmode
2254 check_func_headers lzo/lzo1x.h lzo1x_999_compress
2255 check_func_headers windows.h GetProcessTimes
2256 check_func_headers windows.h VirtualAlloc
2257
2258 check_header conio.h
2259 check_header dlfcn.h
2260 check_header malloc.h
2261 check_header poll.h
2262 check_header sys/mman.h
2263 check_header sys/resource.h
2264 check_header sys/select.h
2265 check_header termios.h
2266 check_header vdpau/vdpau.h
2267 check_header vdpau/vdpau_x11.h
2268 check_header X11/extensions/XvMClib.h
2269
2270 if ! enabled_any memalign memalign_hack posix_memalign malloc_aligned &&
2271      enabled_any $need_memalign ; then
2272     die "Error, no aligned memory allocator but SSE enabled, disable it or use --enable-memalign-hack."
2273 fi
2274
2275 disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
2276 disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
2277
2278 # check for some common methods of building with pthread support
2279 # do this before the optional library checks as some of them require pthreads
2280 if enabled pthreads; then
2281     if check_func pthread_create; then
2282         :
2283     elif check_func pthread_create -pthread; then
2284         add_cflags -pthread
2285         add_extralibs -pthread
2286     elif check_func pthread_create -pthreads; then
2287         add_cflags -pthreads
2288         add_extralibs -pthreads
2289     elif check_func pthread_create -lpthreadGC2; then
2290         add_extralibs -lpthreadGC2
2291     elif ! check_lib pthread.h pthread_create -lpthread; then
2292         die "ERROR: can't find pthreads library"
2293     fi
2294 fi
2295
2296 for thread in $THREADS_LIST; do
2297     if enabled $thread; then
2298         test -n "$thread_type" &&
2299             die "ERROR: Only one thread type must be selected." ||
2300             thread_type="$thread"
2301     fi
2302 done
2303
2304 check_lib math.h sin -lm
2305 check_lib va/va.h vaInitialize -lva
2306
2307 check_func llrint
2308 check_func log2
2309 check_func lrint
2310 check_func lrintf
2311 check_func round
2312 check_func roundf
2313 check_func truncf
2314
2315 # these are off by default, so fail if requested and not available
2316 enabled avisynth   && require2 vfw32 "windows.h vfw.h" AVIFileInit -lvfw32
2317 enabled libdirac   && add_cflags $(pkg-config --cflags dirac) &&
2318                       require  libdirac libdirac_decoder/dirac_parser.h dirac_decoder_init $(pkg-config --libs dirac) &&
2319                       require  libdirac libdirac_encoder/dirac_encoder.h dirac_encoder_init $(pkg-config --libs dirac)
2320 enabled libfaac    && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
2321 enabled libfaad    && require2 libfaad faad.h faacDecOpen -lfaad
2322 enabled libgsm     && require  libgsm gsm.h gsm_create -lgsm
2323 enabled libmp3lame && require  libmp3lame lame/lame.h lame_init -lmp3lame -lm
2324 enabled libnut     && require  libnut libnut.h nut_demuxer_init -lnut
2325 enabled libopencore_amrnb  && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb -lm
2326 enabled libopencore_amrwb  && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb -lm
2327 enabled libopenjpeg && require libopenjpeg openjpeg.h opj_version -lopenjpeg
2328 enabled libschroedinger && add_cflags $(pkg-config --cflags schroedinger-1.0) &&
2329                            require libschroedinger schroedinger/schro.h schro_init $(pkg-config --libs schroedinger-1.0)
2330 enabled libspeex   && require  libspeex speex/speex.h speex_decoder_init -lspeex
2331 enabled libtheora  && require  libtheora theora/theora.h theora_info_init -ltheora -logg
2332 enabled libvorbis  && require  libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
2333 enabled libx264    && require  libx264 x264.h x264_encoder_encode -lx264 -lm &&
2334                       { check_cpp_condition x264.h "X264_BUILD >= 78" ||
2335                         die "ERROR: libx264 version must be >= 0.78."; }
2336 enabled libxvid    && require  libxvid xvid.h xvid_global -lxvidcore
2337 enabled mlib       && require  mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
2338
2339 # libdc1394 check
2340 if enabled libdc1394; then
2341     { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
2342         enable libdc1394_2; } ||
2343     { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
2344         enable libdc1394_1; } ||
2345     die "ERROR: No version of libdc1394 found "
2346 fi
2347
2348 disable sdl_too_old
2349 disable sdl
2350 SDL_CONFIG="${cross_prefix}sdl-config"
2351 if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
2352     sdl_cflags=$("${SDL_CONFIG}" --cflags)
2353     temp_cflags $sdl_cflags
2354     temp_extralibs $("${SDL_CONFIG}" --libs)
2355     if check_lib2 SDL.h SDL_Init; then
2356         _sdlversion=$("${SDL_CONFIG}" --version | sed 's/[^0-9]//g')
2357         if test "$_sdlversion" -lt 121 ; then
2358             enable sdl_too_old
2359         else
2360             enable sdl
2361             check_cc $sdl_cflags <<EOF && enable sdl_video_size
2362 #include <SDL.h>
2363 int main(int argc, char **argv){
2364     const SDL_VideoInfo *vi = SDL_GetVideoInfo();
2365     int w = vi->current_w;
2366     return 0;
2367 }
2368 EOF
2369         fi
2370     fi
2371     restore_flags
2372 fi
2373
2374 texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
2375
2376 if enabled network; then
2377     check_type "sys/types.h sys/socket.h" socklen_t
2378     # Prefer arpa/inet.h over winsock2
2379     if check_header arpa/inet.h ; then
2380         check_func closesocket
2381     elif check_header winsock2.h ; then
2382         check_func_headers winsock2.h closesocket -lws2 && \
2383             network_extralibs="-lws2" || \
2384         { check_func_headers winsock2.h closesocket -lws2_32 && \
2385             network_extralibs="-lws2_32"; }
2386         check_type ws2tcpip.h socklen_t
2387     else
2388         disable network
2389     fi
2390 fi
2391
2392 enabled_all network ipv6 && check_ld <<EOF || disable ipv6
2393 #include <sys/types.h>
2394 #include <sys/socket.h>
2395 #include <netinet/in.h>
2396 #include <netdb.h>
2397 int main(void) {
2398     struct sockaddr_storage saddr;
2399     struct ipv6_mreq mreq6;
2400     getaddrinfo(0,0,0,0);
2401     getnameinfo(0,0,0,0,0,0,0);
2402     IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
2403 }
2404 EOF
2405
2406 check_header linux/videodev.h
2407 check_header linux/videodev2.h
2408 check_header sys/videoio.h
2409
2410 check_func_headers "windows.h vfw.h" capCreateCaptureWindow -lvfw32
2411
2412 # check for ioctl_meteor.h, ioctl_bt848.h and alternatives
2413 { check_header dev/bktr/ioctl_meteor.h &&
2414   check_header dev/bktr/ioctl_bt848.h; } ||
2415 { check_header machine/ioctl_meteor.h &&
2416   check_header machine/ioctl_bt848.h; } ||
2417 { check_header dev/video/meteor/ioctl_meteor.h &&
2418   check_header dev/video/bktr/ioctl_bt848.h; } ||
2419 check_header dev/ic/bt8xx.h
2420
2421 check_header sys/soundcard.h
2422 check_header soundcard.h
2423
2424 enabled_any alsa_indev alsa_outdev && check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
2425
2426 enabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack
2427
2428 enabled x11grab                         &&
2429 check_header X11/Xlib.h                 &&
2430 check_header X11/extensions/XShm.h      &&
2431 check_func XOpenDisplay -lX11           &&
2432 check_func XShmCreateImage -lX11 -lXext
2433
2434 enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel"
2435
2436 # add some useful compiler flags if supported
2437 check_cflags -Wdeclaration-after-statement
2438 check_cflags -Wall
2439 check_cflags -Wno-switch
2440 check_cflags -Wdisabled-optimization
2441 check_cflags -Wpointer-arith
2442 check_cflags -Wredundant-decls
2443 check_cflags -Wno-pointer-sign
2444 check_cflags -Wcast-qual
2445 check_cflags -Wwrite-strings
2446 check_cflags -Wtype-limits
2447 check_cflags -Wundef
2448 enabled extra_warnings && check_cflags -Winline
2449
2450 # add some linker flags
2451 check_ldflags -Wl,--warn-common
2452 check_ldflags -Wl,--as-needed
2453 check_ldflags '-Wl,-rpath-link,\$(BUILD_ROOT)/libpostproc -Wl,-rpath-link,\$(BUILD_ROOT)/libswscale -Wl,-rpath-link,\$(BUILD_ROOT)/libavfilter -Wl,-rpath-link,\$(BUILD_ROOT)/libavdevice -Wl,-rpath-link,\$(BUILD_ROOT)/libavformat -Wl,-rpath-link,\$(BUILD_ROOT)/libavcodec -Wl,-rpath-link,\$(BUILD_ROOT)/libavutil'
2454 check_ldflags -Wl,-Bsymbolic
2455
2456 if enabled small; then
2457     check_cflags -Os            # not all compilers support -Os
2458     optimizations="small"
2459 elif enabled optimizations; then
2460     if enabled xlc; then
2461         add_cflags  -O5
2462         add_ldflags -O5
2463     elif enabled ccc; then
2464         add_cflags -fast
2465     else
2466         add_cflags -O3
2467     fi
2468 fi
2469 check_cflags -fno-math-errno
2470 check_cflags -fno-signed-zeros
2471
2472 if enabled icc; then
2473     # Just warnings, no remarks
2474     check_cflags -w1
2475     # -wd: Disable following warnings
2476     # 144, 167, 556: -Wno-pointer-sign
2477     # 10006: ignoring unknown option -fno-signed-zeros
2478     # 10156: ignoring option '-W'; no argument required
2479     check_cflags -wd144,167,556,10006,10156
2480     # 11030: Warning unknown option --as-needed
2481     # 10156: ignoring option '-export'; no argument required
2482     check_ldflags -wd10156,11030
2483     # Allow to compile with optimizations
2484     check_ldflags -march=$cpu
2485     # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
2486     enable ebp_available
2487 elif enabled ccc; then
2488     # disable some annoying warnings
2489     add_cflags -msg_disable cvtu32to64
2490     add_cflags -msg_disable embedcomment
2491     add_cflags -msg_disable needconstext
2492     add_cflags -msg_disable nomainieee
2493     add_cflags -msg_disable ptrmismatch1
2494     add_cflags -msg_disable unreachcode
2495 elif enabled gcc; then
2496     check_cflags -fno-tree-vectorize
2497 elif enabled clang; then
2498     check_cflags -Qunused-arguments
2499 fi
2500
2501 if enabled gprof; then
2502     add_cflags  -p
2503     add_ldflags -p
2504 fi
2505
2506 # Find out if the .align argument is a power of two or not.
2507 check_asm asmalign_pot '".align 3"'
2508
2509 enabled_any $DECODER_LIST      && enable decoders
2510 enabled_any $ENCODER_LIST      && enable encoders
2511 enabled_any $HWACCEL_LIST      && enable hwaccels
2512 enabled_any $BSF_LIST          && enable bsfs
2513 enabled_any $DEMUXER_LIST      && enable demuxers
2514 enabled_any $MUXER_LIST        && enable muxers
2515 enabled_any $FILTER_LIST       && enable filters
2516 enabled_any $INDEV_LIST        && enable indevs
2517 enabled_any $OUTDEV_LIST       && enable outdevs
2518 enabled_any $PROTOCOL_LIST     && enable protocols
2519
2520 enabled_any $THREADS_LIST      && enable threads
2521
2522 check_deps $CONFIG_LIST       \
2523            $CONFIG_EXTRA      \
2524            $HAVE_LIST         \
2525            $DECODER_LIST      \
2526            $ENCODER_LIST      \
2527            $HWACCEL_LIST      \
2528            $PARSER_LIST       \
2529            $BSF_LIST          \
2530            $DEMUXER_LIST      \
2531            $MUXER_LIST        \
2532            $FILTER_LIST       \
2533            $INDEV_LIST        \
2534            $OUTDEV_LIST       \
2535            $PROTOCOL_LIST     \
2536
2537 echo "install prefix            $prefix"
2538 echo "source path               $source_path"
2539 echo "C compiler                $cc"
2540 echo ".align is power-of-two    $asmalign_pot"
2541 echo "ARCH                      $arch ($cpu)"
2542 if test "$build_suffix" != ""; then
2543     echo "build suffix              $build_suffix"
2544 fi
2545 if test "$extra_version" != ""; then
2546     echo "version string suffix     $extra_version"
2547 fi
2548 echo "big-endian                ${bigendian-no}"
2549 echo "runtime cpu detection     ${runtime_cpudetect-no}"
2550 if enabled x86; then
2551     echo "yasm                      ${yasm-no}"
2552     echo "MMX enabled               ${mmx-no}"
2553     echo "MMX2 enabled              ${mmx2-no}"
2554     echo "3DNow! enabled            ${amd3dnow-no}"
2555     echo "3DNow! extended enabled   ${amd3dnowext-no}"
2556     echo "SSE enabled               ${sse-no}"
2557     echo "SSSE3 enabled             ${ssse3-no}"
2558     echo "CMOV enabled              ${cmov-no}"
2559     echo "CMOV is fast              ${fast_cmov-no}"
2560     echo "EBX available             ${ebx_available-no}"
2561     echo "EBP available             ${ebp_available-no}"
2562     echo "10 operands supported     ${ten_operands-no}"
2563 fi
2564 if enabled arm; then
2565     echo "ARMv5TE enabled           ${armv5te-no}"
2566     echo "ARMv6 enabled             ${armv6-no}"
2567     echo "ARMv6T2 enabled           ${armv6t2-no}"
2568     echo "ARM VFP enabled           ${armvfp-no}"
2569     echo "IWMMXT enabled            ${iwmmxt-no}"
2570     echo "NEON enabled              ${neon-no}"
2571 fi
2572 if enabled mips; then
2573     echo "MMI enabled               ${mmi-no}"
2574 fi
2575 if enabled ppc; then
2576     echo "AltiVec enabled           ${altivec-no}"
2577     echo "PPC 4xx optimizations     ${ppc4xx-no}"
2578     echo "dcbzl available           ${dcbzl-no}"
2579     echo "performance report        ${powerpc_perf-no}"
2580 fi
2581 if enabled sparc; then
2582     echo "VIS enabled               ${vis-no}"
2583 fi
2584 echo "gprof enabled             ${gprof-no}"
2585 echo "debug symbols             ${debug-no}"
2586 echo "strip symbols             ${stripping-no}"
2587 echo "optimizations             ${optimizations-no}"
2588 echo "static                    ${static-no}"
2589 echo "shared                    ${shared-no}"
2590 echo "postprocessing support    ${postproc-no}"
2591 echo "new filter support        ${avfilter-no}"
2592 echo "filters using lavformat   ${avfilter_lavf-no}"
2593 echo "network support           ${network-no}"
2594 if enabled network; then
2595     echo "IPv6 support              ${ipv6-no}"
2596 fi
2597 echo "threading support         ${thread_type-no}"
2598 echo "SDL support               ${sdl-no}"
2599 if enabled sdl_too_old; then
2600     echo "-> Your SDL version is too old - please upgrade to have FFplay/SDL support."
2601 fi
2602 echo "Sun medialib support      ${mlib-no}"
2603 echo "AVISynth enabled          ${avisynth-no}"
2604 echo "libdc1394 support         ${libdc1394-no}"
2605 echo "libdirac enabled          ${libdirac-no}"
2606 echo "libfaac enabled           ${libfaac-no}"
2607 echo "libfaad enabled           ${libfaad-no}"
2608 echo "libfaad dlopened          ${libfaadbin-no}"
2609 echo "libgsm enabled            ${libgsm-no}"
2610 echo "libmp3lame enabled        ${libmp3lame-no}"
2611 echo "libnut enabled            ${libnut-no}"
2612 echo "libopencore-amrnb support ${libopencore_amrnb-no}"
2613 echo "libopencore-amrwb support ${libopencore_amrwb-no}"
2614 echo "libopenjpeg enabled       ${libopenjpeg-no}"
2615 echo "libschroedinger enabled   ${libschroedinger-no}"
2616 echo "libspeex enabled          ${libspeex-no}"
2617 echo "libtheora enabled         ${libtheora-no}"
2618 echo "libvorbis enabled         ${libvorbis-no}"
2619 echo "libx264 enabled           ${libx264-no}"
2620 echo "libxvid enabled           ${libxvid-no}"
2621 echo "zlib enabled              ${zlib-no}"
2622 echo "bzlib enabled             ${bzlib-no}"
2623 echo
2624
2625 for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
2626     echo "Enabled ${type}s:"
2627     eval list=\$$(toupper $type)_LIST
2628     for part in $list; do
2629         enabled $part && echo ${part%_*}
2630     done | sort | pr -3 -t
2631     echo
2632 done
2633
2634 license="LGPL version 2.1 or later"
2635 if enabled nonfree; then
2636     license="nonfree and unredistributable"
2637 elif enabled gplv3; then
2638     license="GPL version 3 or later"
2639 elif enabled lgplv3; then
2640     license="LGPL version 3 or later"
2641 elif enabled gpl; then
2642     license="GPL version 2 or later"
2643 fi
2644
2645 echo "License: $license"
2646
2647 echo "Creating config.mak and config.h..."
2648
2649 echo "# Automatically generated by configure - do not modify!" > config.mak
2650 echo "ifndef FFMPEG_CONFIG_MAK" >> config.mak
2651 echo "FFMPEG_CONFIG_MAK=1" >> config.mak
2652
2653 echo "FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION" >> config.mak
2654 echo "prefix=$prefix" >> config.mak
2655 echo "LIBDIR=\$(DESTDIR)$libdir" >> config.mak
2656 echo "SHLIBDIR=\$(DESTDIR)$shlibdir" >> config.mak
2657 echo "INCDIR=\$(DESTDIR)$incdir" >> config.mak
2658 echo "BINDIR=\$(DESTDIR)$bindir" >> config.mak
2659 echo "DATADIR=\$(DESTDIR)$datadir" >> config.mak
2660 echo "MANDIR=\$(DESTDIR)$mandir" >> config.mak
2661 echo "SRC_PATH=\"$source_path\"" >> config.mak
2662 echo "SRC_PATH_BARE=$source_path" >> config.mak
2663 echo "BUILD_ROOT=\"$PWD\"" >> config.mak
2664 echo "CC=$cc" >> config.mak
2665 echo "AS=$as" >> config.mak
2666 echo "LD=$ld" >> config.mak
2667 echo "DEPCC=$dep_cc" >> config.mak
2668 echo "YASM=$yasmexe" >> config.mak
2669 echo "AR=$ar" >> config.mak
2670 echo "RANLIB=$ranlib" >> config.mak
2671 echo "LN_S=$ln_s" >> config.mak
2672 enabled stripping &&
2673     echo "STRIP=$strip" >> config.mak ||
2674     echo "STRIP=echo ignoring strip" >> config.mak
2675
2676 echo "CPPFLAGS=$CPPFLAGS" >> config.mak
2677 echo "CFLAGS=$CFLAGS" >> config.mak
2678 echo "ASFLAGS=$ASFLAGS" >> config.mak
2679 echo "CC_O=$CC_O" >> config.mak
2680 echo "LDFLAGS=$LDFLAGS" >> config.mak
2681 echo "FFSERVERLDFLAGS=$FFSERVERLDFLAGS" >> config.mak
2682 echo "SHFLAGS=$SHFLAGS" >> config.mak
2683 echo "YASMFLAGS=$YASMFLAGS" >> config.mak
2684 echo "BUILDSUF=$build_suffix" >> config.mak
2685 echo "FULLNAME=$FULLNAME" >> config.mak
2686 echo "LIBPREF=$LIBPREF" >> config.mak
2687 echo "LIBSUF=$LIBSUF" >> config.mak
2688 echo "LIBNAME=$LIBNAME" >> config.mak
2689 echo "SLIBPREF=$SLIBPREF" >> config.mak
2690 echo "SLIBSUF=$SLIBSUF" >> config.mak
2691 echo "EXESUF=$EXESUF" >> config.mak
2692 echo "EXTRA_VERSION=$extra_version" >> config.mak
2693 echo "DEPFLAGS=$DEPFLAGS" >> config.mak
2694 echo "CCDEP=$CCDEP" >> config.mak
2695 echo "ASDEP=$ASDEP" >> config.mak
2696 echo "CC_DEPFLAGS=$CC_DEPFLAGS" >> config.mak
2697 echo "AS_DEPFLAGS=$AS_DEPFLAGS" >> config.mak
2698 echo "HOSTCC=$host_cc" >> config.mak
2699 echo "HOSTCFLAGS=$host_cflags" >> config.mak
2700 echo "HOSTEXESUF=$HOSTEXESUF" >> config.mak
2701 echo "HOSTLDFLAGS=$host_ldflags" >> config.mak
2702 echo "HOSTLIBS=$host_libs" >> config.mak
2703 echo "TARGET_EXEC=$target_exec" >> config.mak
2704 echo "TARGET_PATH=$target_path" >> config.mak
2705
2706 if enabled sdl; then
2707     echo "SDL_LIBS=$("${SDL_CONFIG}" --libs)" >> config.mak
2708     echo "SDL_CFLAGS=$("${SDL_CONFIG}" --cflags)" >> config.mak
2709 fi
2710 if enabled texi2html; then
2711     echo "BUILD_DOC=yes" >> config.mak
2712 fi
2713
2714 get_version(){
2715     name=$1
2716     file=$source_path/$2
2717     eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
2718     eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
2719     lcname=$(tolower $name)
2720     eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
2721     eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
2722 }
2723
2724 get_version LIBSWSCALE  libswscale/swscale.h
2725 get_version LIBPOSTPROC libpostproc/postprocess.h
2726 get_version LIBAVCODEC  libavcodec/avcodec.h
2727 get_version LIBAVDEVICE libavdevice/avdevice.h
2728 get_version LIBAVFORMAT libavformat/avformat.h
2729 get_version LIBAVUTIL   libavutil/avutil.h
2730 get_version LIBAVFILTER libavfilter/avfilter.h
2731
2732 if enabled shared; then
2733     echo "LIBTARGET=${LIBTARGET}" >> config.mak
2734     echo "SLIBNAME=${SLIBNAME}" >> config.mak
2735     echo "SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}" >> config.mak
2736     echo "SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}" >> config.mak
2737     echo "SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}" >> config.mak
2738     echo "SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}" >> config.mak
2739     echo "SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}" >> config.mak
2740     echo "SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}" >> config.mak
2741 fi
2742 echo "LIB_INSTALL_EXTRA_CMD=${LIB_INSTALL_EXTRA_CMD}" >> config.mak
2743 echo "EXTRALIBS=$extralibs" >> config.mak
2744
2745 echo "ARCH=$arch" >> config.mak
2746
2747
2748 echo "/* Automatically generated by configure - do not modify! */" > $TMPH
2749 echo "#ifndef FFMPEG_CONFIG_H" >> $TMPH
2750 echo "#define FFMPEG_CONFIG_H" >> $TMPH
2751 echo "#define FFMPEG_CONFIGURATION \"$(c_escape $FFMPEG_CONFIGURATION)\"" >> $TMPH
2752 echo "#define FFMPEG_DATADIR \"$(eval c_escape $datadir)\"" >> $TMPH
2753
2754 echo "#define CC_TYPE \"$cc_type\"" >> $TMPH
2755 echo "#define CC_VERSION $cc_version" >> $TMPH
2756 echo "#define restrict $_restrict" >> $TMPH
2757
2758 if enabled small || disabled optimizations; then
2759     echo "#define av_always_inline"  >> $TMPH
2760 fi
2761
2762
2763 # Apparently it's not possible to portably echo a backslash.
2764 enabled asmalign_pot &&
2765     printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH ||
2766     printf '#define ASMALIGN(ZEROBITS) ".align 1 << " #ZEROBITS "\\n\\t"\n' >> $TMPH
2767
2768 echo "#define EXTERN_PREFIX \"${extern_prefix}\"" >> $TMPH
2769 echo "#define EXTERN_ASM ${extern_prefix}" >> $TMPH
2770
2771 print_config ARCH_   $TMPH config.mak $ARCH_LIST
2772 print_config HAVE_   $TMPH config.mak $HAVE_LIST
2773 print_config CONFIG_ $TMPH config.mak $CONFIG_LIST       \
2774                                       $CONFIG_EXTRA      \
2775                                       $DECODER_LIST      \
2776                                       $ENCODER_LIST      \
2777                                       $HWACCEL_LIST      \
2778                                       $PARSER_LIST       \
2779                                       $BSF_LIST          \
2780                                       $DEMUXER_LIST      \
2781                                       $MUXER_LIST        \
2782                                       $FILTER_LIST       \
2783                                       $PROTOCOL_LIST     \
2784                                       $INDEV_LIST        \
2785                                       $OUTDEV_LIST       \
2786
2787 echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
2788 echo "endif # FFMPEG_CONFIG_MAK" >> config.mak
2789
2790 # Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
2791 cmp -s $TMPH config.h &&
2792     echo "config.h is unchanged" ||
2793     mv -f $TMPH config.h
2794
2795 # build tree in object directory if source path is different from current one
2796 if enabled source_path_used; then
2797     DIRS="
2798         doc
2799         libavcodec
2800         libavcodec/$arch
2801         libavdevice
2802         libavfilter
2803         libavformat
2804         libavutil
2805         libavutil/$arch
2806         libpostproc
2807         libswscale
2808         libswscale/$arch
2809         tests
2810         tools
2811     "
2812     FILES="
2813         Makefile
2814         common.mak
2815         subdir.mak
2816         doc/texi2pod.pl
2817         libavcodec/Makefile
2818         libavdevice/Makefile
2819         libavfilter/Makefile
2820         libavformat/Makefile
2821         libavutil/Makefile
2822         libpostproc/Makefile
2823         libswscale/Makefile
2824     "
2825     for dir in $DIRS ; do
2826         mkdir -p $dir
2827     done
2828     for f in $FILES ; do
2829         $ln_s "$source_path/$f" $f
2830     done
2831 fi
2832
2833
2834 # build pkg-config files
2835
2836 pkgconfig_generate(){
2837 name=$1
2838 shortname=${name#lib}${build_suffix}
2839 comment=$2
2840 version=$3
2841 libs=$4
2842 requires=$5
2843 cat <<EOF > $name/$name.pc
2844 prefix=$prefix
2845 exec_prefix=\${prefix}
2846 libdir=$libdir
2847 includedir=$incdir
2848
2849 Name: $name
2850 Description: $comment
2851 Version: $version
2852 Requires: $(enabled shared || echo $requires)
2853 Requires.private: $(enabled shared && echo $requires)
2854 Conflicts:
2855 Libs: -L\${libdir} -l${shortname} $(enabled shared || echo $libs)
2856 Libs.private: $(enabled shared && echo $libs)
2857 Cflags: -I\${includedir}
2858 EOF
2859 cat <<EOF > $name/$name-uninstalled.pc
2860 prefix=
2861 exec_prefix=
2862 libdir=\${pcfiledir}
2863 includedir=${source_path}
2864
2865 Name: $name
2866 Description: $comment
2867 Version: $version
2868 Requires: $requires
2869 Conflicts:
2870 Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
2871 Cflags: -I\${includedir}
2872 EOF
2873 }
2874
2875 pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
2876 pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
2877 pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
2878 pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "libavformat = $LIBAVFORMAT_VERSION"
2879 enabled avfilter &&
2880     pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
2881 enabled postproc &&
2882     pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
2883 pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"