Support amdfam10 for --cpu, also avoids a warning about unknown cpu if
[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 apply(){
782     file=$1
783     shift
784     "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
785 }
786
787 # CONFIG_LIST contains configurable options, while HAVE_LIST is for
788 # system-dependent things.
789
790 COMPONENT_LIST="
791     bsfs
792     decoders
793     demuxers
794     encoders
795     filters
796     hwaccels
797     indevs
798     muxers
799     outdevs
800     parsers
801     protocols
802 "
803
804 CONFIG_LIST="
805     $COMPONENT_LIST
806     aandct
807     avfilter
808     avfilter_lavf
809     avisynth
810     beos_netserver
811     bzlib
812     fastdiv
813     ffmpeg
814     ffplay
815     ffserver
816     fft
817     golomb
818     gpl
819     gprof
820     gray
821     hardcoded_tables
822     ipv6
823     libdc1394
824     libdirac
825     libfaac
826     libfaad
827     libfaadbin
828     libgsm
829     libmp3lame
830     libnut
831     libopencore_amrnb
832     libopencore_amrwb
833     libopenjpeg
834     libschroedinger
835     libspeex
836     libtheora
837     libvorbis
838     libx264
839     libxvid
840     lpc
841     mdct
842     memalign_hack
843     mlib
844     mpegaudio_hp
845     network
846     nonfree
847     pic
848     postproc
849     powerpc_perf
850     rdft
851     runtime_cpudetect
852     shared
853     small
854     static
855     swscale_alpha
856     vaapi
857     vdpau
858     version3
859     x11grab
860     zlib
861 "
862
863 THREADS_LIST='
864     beosthreads
865     os2threads
866     pthreads
867     w32threads
868 '
869
870 ARCH_LIST='
871     alpha
872     arm
873     avr32
874     avr32_ap
875     avr32_uc
876     bfin
877     ia64
878     m68k
879     mips
880     mips64
881     parisc
882     ppc
883     ppc64
884     s390
885     sh4
886     sparc
887     sparc64
888     x86
889     x86_32
890     x86_64
891 '
892
893 ARCH_EXT_LIST='
894     altivec
895     amd3dnow
896     amd3dnowext
897     armv5te
898     armv6
899     armv6t2
900     armvfp
901     iwmmxt
902     mmi
903     mmx
904     mmx2
905     neon
906     ppc4xx
907     sse
908     ssse3
909     vis
910 '
911
912 HAVE_LIST="
913     $ARCH_EXT_LIST
914     $THREADS_LIST
915     alsa_asoundlib_h
916     altivec_h
917     arpa_inet_h
918     attribute_packed
919     bigendian
920     bswap
921     closesocket
922     cmov
923     conio_h
924     dcbzl
925     dev_bktr_ioctl_bt848_h
926     dev_bktr_ioctl_meteor_h
927     dev_ic_bt8xx_h
928     dev_video_meteor_ioctl_meteor_h
929     dev_video_bktr_ioctl_bt848_h
930     dlfcn_h
931     dlopen
932     dos_paths
933     ebp_available
934     ebx_available
935     fast_64bit
936     fast_cmov
937     fast_unaligned
938     fork
939     gethrtime
940     GetProcessTimes
941     getrusage
942     inet_aton
943     inline_asm
944     isatty
945     ldbrx
946     libdc1394_1
947     libdc1394_2
948     llrint
949     log2
950     loongson
951     lrint
952     lrintf
953     lzo1x_999_compress
954     machine_ioctl_bt848_h
955     machine_ioctl_meteor_h
956     malloc_h
957     memalign
958     mkstemp
959     pld
960     posix_memalign
961     round
962     roundf
963     sdl
964     sdl_video_size
965     setmode
966     socklen_t
967     soundcard_h
968     poll_h
969     sys_mman_h
970     sys_resource_h
971     sys_select_h
972     sys_soundcard_h
973     sys_videoio_h
974     ten_operands
975     termios_h
976     threads
977     truncf
978     vfp_args
979     VirtualAlloc
980     winsock2_h
981     xform_asm
982     yasm
983 "
984
985 # options emitted with CONFIG_ prefix but not available on command line
986 CONFIG_EXTRA="
987     gplv3
988     lgplv3
989 "
990
991 CMDLINE_SELECT="
992     $ARCH_EXT_LIST
993     $CONFIG_LIST
994     $THREADS_LIST
995     cross_compile
996     debug
997     extra_warnings
998     logging
999     optimizations
1000     stripping
1001     yasm
1002 "
1003
1004 PATHS_LIST='
1005     bindir
1006     datadir
1007     incdir
1008     libdir
1009     mandir
1010     prefix
1011     shlibdir
1012 '
1013
1014 CMDLINE_SET="
1015     $PATHS_LIST
1016     arch
1017     as
1018     build_suffix
1019     cc
1020     cpu
1021     cross_prefix
1022     dep_cc
1023     extra_version
1024     host_cc
1025     host_cflags
1026     host_ldflags
1027     host_libs
1028     host_os
1029     ld
1030     logfile
1031     nm
1032     source_path
1033     sysinclude
1034     sysroot
1035     target_exec
1036     target_os
1037     target_path
1038 "
1039
1040 CMDLINE_APPEND="
1041     extra_cflags
1042 "
1043
1044 # code dependency declarations
1045
1046 # architecture extensions
1047 altivec_deps="ppc"
1048 amd3dnow_deps="mmx"
1049 amd3dnowext_deps="amd3dnow"
1050 armv5te_deps="arm"
1051 armv6_deps="arm"
1052 armv6t2_deps="arm"
1053 armvfp_deps="arm"
1054 iwmmxt_deps="arm"
1055 mmi_deps="mips"
1056 mmx_deps="x86"
1057 mmx2_deps="mmx"
1058 neon_deps="arm"
1059 ppc4xx_deps="ppc"
1060 sse_deps="mmx"
1061 ssse3_deps="sse"
1062 vis_deps="sparc"
1063
1064 need_memalign="altivec neon sse"
1065 inline_asm_deps="!tms470"
1066
1067 # decoders / encoders / hardware accelerators
1068 aac_decoder_select="fft mdct"
1069 aac_encoder_select="fft mdct"
1070 ac3_decoder_select="fft mdct"
1071 alac_encoder_select="lpc"
1072 atrac3_decoder_select="fft mdct"
1073 cavs_decoder_select="golomb"
1074 cook_decoder_select="fft mdct"
1075 cscd_decoder_suggest="zlib"
1076 dca_decoder_select="fft mdct"
1077 dnxhd_encoder_select="aandct"
1078 dxa_decoder_select="zlib"
1079 eac3_decoder_select="ac3_decoder"
1080 eamad_decoder_select="aandct"
1081 eatgq_decoder_select="aandct"
1082 eatqi_decoder_select="aandct"
1083 ffv1_decoder_select="golomb"
1084 flac_decoder_select="golomb"
1085 flac_encoder_select="golomb lpc"
1086 flashsv_decoder_select="zlib"
1087 flashsv_encoder_select="zlib"
1088 flv_encoder_select="h263_encoder"
1089 h261_encoder_select="aandct"
1090 h263_encoder_select="aandct"
1091 h263_vaapi_hwaccel_deps="va_va_h"
1092 h263_vaapi_hwaccel_select="vaapi h263_decoder"
1093 h263p_encoder_select="h263_encoder"
1094 h264_decoder_select="golomb"
1095 h264_vaapi_hwaccel_deps="va_va_h"
1096 h264_vaapi_hwaccel_select="vaapi"
1097 h264_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1098 h264_vdpau_decoder_select="vdpau h264_decoder"
1099 imc_decoder_select="fft mdct"
1100 jpegls_decoder_select="golomb"
1101 jpegls_encoder_select="golomb"
1102 ljpeg_encoder_select="aandct"
1103 loco_decoder_select="golomb"
1104 mjpeg_encoder_select="aandct"
1105 mpeg1video_encoder_select="aandct"
1106 mpeg2video_encoder_select="aandct"
1107 mpeg4_encoder_select="h263_encoder"
1108 mpeg_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1109 mpeg_vdpau_decoder_select="vdpau mpegvideo_decoder"
1110 mpeg1_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1111 mpeg1_vdpau_decoder_select="vdpau mpeg1video_decoder"
1112 mpeg2_vaapi_hwaccel_deps="va_va_h"
1113 mpeg2_vaapi_hwaccel_select="vaapi mpeg2video_decoder"
1114 mpeg4_vaapi_hwaccel_deps="va_va_h"
1115 mpeg4_vaapi_hwaccel_select="vaapi mpeg4_decoder"
1116 mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h"
1117 mpeg_xvmc_decoder_select="mpegvideo_decoder"
1118 msmpeg4v1_encoder_select="h263_encoder"
1119 msmpeg4v2_encoder_select="h263_encoder"
1120 msmpeg4v3_encoder_select="h263_encoder"
1121 nellymoser_decoder_select="fft mdct"
1122 nellymoser_encoder_select="fft mdct"
1123 png_decoder_select="zlib"
1124 png_encoder_select="zlib"
1125 qdm2_decoder_select="fft mdct rdft"
1126 rv10_encoder_select="h263_encoder"
1127 rv20_encoder_select="h263_encoder"
1128 rv30_decoder_select="golomb"
1129 rv40_decoder_select="golomb"
1130 shorten_decoder_select="golomb"
1131 sonic_decoder_select="golomb"
1132 sonic_encoder_select="golomb"
1133 sonic_ls_encoder_select="golomb"
1134 svq3_decoder_select="golomb"
1135 svq3_decoder_suggest="zlib"
1136 theora_decoder_select="vp3_decoder"
1137 tiff_decoder_suggest="zlib"
1138 tiff_encoder_suggest="zlib"
1139 tscc_decoder_select="zlib"
1140 vc1_vaapi_hwaccel_deps="va_va_h"
1141 vc1_vaapi_hwaccel_select="vaapi vc1_decoder"
1142 vc1_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1143 vc1_vdpau_decoder_select="vdpau vc1_decoder"
1144 vorbis_decoder_select="fft mdct"
1145 vorbis_encoder_select="fft mdct"
1146 vp6a_decoder_select="vp6_decoder"
1147 vp6f_decoder_select="vp6_decoder"
1148 wmav1_decoder_select="fft mdct"
1149 wmav1_encoder_select="fft mdct"
1150 wmav2_decoder_select="fft mdct"
1151 wmav2_encoder_select="fft mdct"
1152 wmv1_encoder_select="h263_encoder"
1153 wmv2_encoder_select="h263_encoder"
1154 wmv3_decoder_select="vc1_decoder"
1155 wmv3_vaapi_hwaccel_select="vc1_vaapi_hwaccel"
1156 wmv3_vdpau_decoder_select="vc1_vdpau_decoder"
1157 zlib_decoder_select="zlib"
1158 zlib_encoder_select="zlib"
1159 zmbv_decoder_select="zlib"
1160 zmbv_encoder_select="zlib"
1161
1162 # parsers
1163 h264_parser_select="golomb"
1164
1165 # external libraries
1166 libdirac_decoder_deps="libdirac !libschroedinger"
1167 libdirac_encoder_deps="libdirac"
1168 libfaac_encoder_deps="libfaac"
1169 libfaad_decoder_deps="libfaad"
1170 libfaadbin_decoder_extralibs='$ldl'
1171 libgsm_decoder_deps="libgsm"
1172 libgsm_encoder_deps="libgsm"
1173 libgsm_ms_decoder_deps="libgsm"
1174 libgsm_ms_encoder_deps="libgsm"
1175 libmp3lame_encoder_deps="libmp3lame"
1176 libopencore_amrnb_decoder_deps="libopencore_amrnb"
1177 libopencore_amrnb_encoder_deps="libopencore_amrnb"
1178 libopencore_amrwb_decoder_deps="libopencore_amrwb"
1179 libopenjpeg_decoder_deps="libopenjpeg"
1180 libschroedinger_decoder_deps="libschroedinger"
1181 libschroedinger_encoder_deps="libschroedinger"
1182 libspeex_decoder_deps="libspeex"
1183 libtheora_encoder_deps="libtheora"
1184 libvorbis_encoder_deps="libvorbis"
1185 libx264_encoder_deps="libx264"
1186 libxvid_encoder_deps="libxvid"
1187
1188 # demuxers / muxers
1189 ac3_demuxer_deps="ac3_parser"
1190 asf_stream_muxer_select="asf_muxer"
1191 avisynth_demuxer_deps="avisynth"
1192 dirac_demuxer_deps="dirac_parser"
1193 ipod_muxer_select="mov_muxer"
1194 libnut_demuxer_deps="libnut"
1195 libnut_muxer_deps="libnut"
1196 matroska_audio_muxer_select="matroska_muxer"
1197 matroska_demuxer_suggest="zlib bzlib"
1198 mov_demuxer_suggest="zlib"
1199 mp3_demuxer_deps="mpegaudio_parser"
1200 mp4_muxer_select="mov_muxer"
1201 mpegtsraw_demuxer_select="mpegts_demuxer"
1202 mxf_d10_muxer_select="mxf_muxer"
1203 psp_muxer_select="mov_muxer"
1204 rtp_muxer_deps="network rtp_protocol"
1205 rtsp_demuxer_deps="sdp_demuxer"
1206 sdp_demuxer_deps="rtp_protocol mpegts_demuxer"
1207 tg2_muxer_select="mov_muxer"
1208 tgp_muxer_select="mov_muxer"
1209 w64_demuxer_deps="wav_demuxer"
1210
1211 # indevs / outdevs
1212 alsa_indev_deps="alsa_asoundlib_h snd_pcm_htimestamp"
1213 alsa_indev_extralibs="-lasound"
1214 alsa_outdev_deps="alsa_asoundlib_h"
1215 alsa_outdev_extralibs="-lasound"
1216 audio_beos_indev_deps="audio_beos"
1217 audio_beos_indev_extralibs="-lmedia -lbe"
1218 audio_beos_outdev_deps="audio_beos"
1219 audio_beos_outdev_extralibs="-lmedia -lbe"
1220 bktr_indev_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
1221 dv1394_indev_deps="dv1394 dv_demuxer"
1222 jack_indev_deps="jack_jack_h"
1223 jack_indev_extralibs="-ljack"
1224 libdc1394_indev_deps="libdc1394"
1225 oss_indev_deps_any="soundcard_h sys_soundcard_h"
1226 oss_outdev_deps_any="soundcard_h sys_soundcard_h"
1227 v4l_indev_deps="linux_videodev_h"
1228 v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h"
1229 vfwcap_indev_deps="capCreateCaptureWindow"
1230 vfwcap_indev_extralibs="-lvfw32"
1231 x11_grab_device_indev_deps="x11grab XShmCreateImage"
1232 x11_grab_device_indev_extralibs="-lX11 -lXext"
1233
1234 # protocols
1235 gopher_protocol_deps="network"
1236 http_protocol_deps="network"
1237 rtmp_protocol_deps="tcp_protocol"
1238 rtp_protocol_deps="udp_protocol"
1239 tcp_protocol_deps="network"
1240 udp_protocol_deps="network"
1241
1242 # filters
1243 movie_filter_deps="avfilter_lavf"
1244
1245 # programs
1246 ffplay_deps="sdl"
1247 ffserver_deps="ffm_muxer rtp_protocol rtsp_demuxer"
1248 ffserver_extralibs='$ldl'
1249
1250
1251 # default parameters
1252
1253 logfile="config.err"
1254
1255 # installation paths
1256 prefix_default="/usr/local"
1257 bindir_default='${prefix}/bin'
1258 datadir_default='${prefix}/share/ffmpeg'
1259 incdir_default='${prefix}/include'
1260 libdir_default='${prefix}/lib'
1261 mandir_default='${prefix}/share/man'
1262 shlibdir_default="$libdir_default"
1263
1264 # toolchain
1265 ar="ar"
1266 cc_default="gcc"
1267 cc_version=\"unknown\"
1268 host_cc_default="gcc"
1269 ln_s="ln -sf"
1270 nm_default="nm"
1271 objformat="elf"
1272 ranlib="ranlib"
1273 strip="strip"
1274 yasmexe="yasm"
1275
1276 # machine
1277 arch=$(uname -m)
1278 cpu="generic"
1279
1280 # OS
1281 target_os=$(tolower $(uname -s))
1282 host_os=$target_os
1283
1284 # configurable options
1285 enable debug
1286 enable fastdiv
1287 enable ffmpeg
1288 enable ffplay
1289 enable ffserver
1290 enable ipv6
1291 enable mpegaudio_hp
1292 enable network
1293 enable optimizations
1294 enable protocols
1295 enable static
1296 enable stripping
1297 enable swscale_alpha
1298
1299 # build settings
1300 SHFLAGS='-shared -Wl,-soname,$$(@F)'
1301 FFSERVERLDFLAGS=-Wl,-E
1302 LIBPREF="lib"
1303 LIBSUF=".a"
1304 FULLNAME='$(NAME)$(BUILDSUF)'
1305 LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
1306 SLIBPREF="lib"
1307 SLIBSUF=".so"
1308 SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
1309 SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
1310 SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
1311 LIB_INSTALL_EXTRA_CMD='$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
1312
1313 CC_O='-o $@'
1314
1315 host_cflags='-O3 -g -Wall'
1316 host_libs='-lm'
1317
1318 target_path='.'
1319
1320 # gcc stupidly only outputs the basename of targets with -MM, but we need the
1321 # full relative path for objects in subdirectories for non-recursive Make.
1322 DEPEND_CMD='$(DEPCC) $(DEPFLAGS) $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o," > $(@:.o=.d)'
1323 DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -MM'
1324
1325 # find source path
1326 source_path="$(dirname "$0")"
1327 enable source_path_used
1328 if test -f configure; then
1329     source_path="$(pwd)"
1330     disable source_path_used
1331 else
1332     source_path="$(cd "$source_path"; pwd)"
1333     echo "$source_path" | grep -q '[[:blank:]]' &&
1334         die "Out of tree builds are impossible with whitespace in source path."
1335     test -e "$source_path/config.h" &&
1336         die "Out of tree builds are impossible with config.h in source dir."
1337 fi
1338
1339 for v in "$@"; do
1340     r=${v#*=}
1341     l=${v%"$r"}
1342     r=$(sh_quote "$r")
1343     FFMPEG_CONFIGURATION="${FFMPEG_CONFIGURATION# } ${l}${r}"
1344 done
1345
1346 find_things(){
1347     thing=$1
1348     pattern=$2
1349     file=$source_path/$3
1350     sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
1351 }
1352
1353 ENCODER_LIST=$(find_things  encoder  ENC      libavcodec/allcodecs.c)
1354 DECODER_LIST=$(find_things  decoder  DEC      libavcodec/allcodecs.c)
1355 HWACCEL_LIST=$(find_things  hwaccel  HWACCEL  libavcodec/allcodecs.c)
1356 PARSER_LIST=$(find_things   parser   PARSER   libavcodec/allcodecs.c)
1357 BSF_LIST=$(find_things      bsf      BSF      libavcodec/allcodecs.c)
1358 MUXER_LIST=$(find_things    muxer    _MUX     libavformat/allformats.c)
1359 DEMUXER_LIST=$(find_things  demuxer  DEMUX    libavformat/allformats.c)
1360 OUTDEV_LIST=$(find_things   outdev   OUTDEV   libavdevice/alldevices.c)
1361 INDEV_LIST=$(find_things    indev    _IN      libavdevice/alldevices.c)
1362 PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
1363 FILTER_LIST=$(find_things   filter   FILTER   libavfilter/allfilters.c)
1364
1365 enable $ARCH_EXT_LIST \
1366        $DECODER_LIST \
1367        $ENCODER_LIST \
1368        $HWACCEL_LIST \
1369        $PARSER_LIST \
1370        $BSF_LIST \
1371        $DEMUXER_LIST \
1372        $MUXER_LIST \
1373        $FILTER_LIST \
1374        $PROTOCOL_LIST \
1375        $INDEV_LIST \
1376        $OUTDEV_LIST \
1377
1378 die_unknown(){
1379     echo "Unknown option \"$1\"."
1380     echo "See $0 --help for available options."
1381     exit 1
1382 }
1383
1384 show_list() {
1385     suffix=_$1
1386     shift
1387     echo $* | sed s/$suffix//g | tr ' ' '\n' | sort
1388     exit 0
1389 }
1390
1391 for opt do
1392     optval="${opt#*=}"
1393     case "$opt" in
1394     --extra-ldflags=*) add_ldflags $optval
1395     ;;
1396     --extra-libs=*) add_extralibs $optval
1397     ;;
1398     --disable-devices) disable $INDEV_LIST $OUTDEV_LIST
1399     ;;
1400     --enable-debug=*) debuglevel="$optval"
1401     ;;
1402     --enable-*=*|--disable-*=*)
1403     eval $(echo "${opt%%=*}" | sed 's/--/action=/;s/-/ thing=/')
1404     is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt"
1405     eval list=\$$(toupper $thing)_LIST
1406     name=$(echo "${optval}" | sed "s/,/_${thing}|/g")_${thing}
1407     $action $(filter "$name" $list)
1408     ;;
1409     --enable-?*|--disable-?*)
1410     eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
1411     if is_in $option $COMPONENT_LIST; then
1412         test $action = disable && action=unset
1413         eval $action \$$(toupper ${option%s})_LIST
1414     elif is_in $option $CMDLINE_SELECT; then
1415         $action $option
1416     else
1417         die_unknown $opt
1418     fi
1419     ;;
1420     --list-*)
1421         NAME="${opt#--list-}"
1422         is_in $NAME $COMPONENT_LIST || die_unknown $opt
1423         NAME=${NAME%s}
1424         eval show_list $NAME \$$(toupper $NAME)_LIST
1425     ;;
1426     --help|-h) show_help
1427     ;;
1428     *)
1429     optname="${opt%%=*}"
1430     optname="${optname#--}"
1431     optname=$(echo "$optname" | sed 's/-/_/g')
1432     if is_in $optname $CMDLINE_SET; then
1433         eval $optname='$optval'
1434     elif is_in $optname $CMDLINE_APPEND; then
1435         append $optname "$optval"
1436     else
1437          die_unknown $opt
1438     fi
1439     ;;
1440     esac
1441 done
1442
1443 disabled logging && logfile=/dev/null
1444
1445 echo "# $0 $FFMPEG_CONFIGURATION" > $logfile
1446 set >> $logfile
1447
1448 test -n "$cross_prefix" && enable cross_compile
1449
1450 ar="${cross_prefix}${ar}"
1451 cc_default="${cross_prefix}${cc_default}"
1452 nm_default="${cross_prefix}${nm_default}"
1453 ranlib="${cross_prefix}${ranlib}"
1454 strip="${cross_prefix}${strip}"
1455
1456 sysinclude_default="${sysroot}/usr/include"
1457
1458 set_default cc nm sysinclude
1459 enabled cross_compile || host_cc_default=$cc
1460 set_default host_cc
1461
1462 exesuf() {
1463     case $1 in
1464         mingw32*|cygwin*|*-dos|freedos|opendos|os/2*) echo .exe ;;
1465     esac
1466 }
1467
1468 EXESUF=$(exesuf $target_os)
1469 HOSTEXESUF=$(exesuf $host_os)
1470
1471 # set temporary file name
1472 : ${TMPDIR:=$TEMPDIR}
1473 : ${TMPDIR:=$TMP}
1474 : ${TMPDIR:=/tmp}
1475
1476 if ! check_cmd type mktemp; then
1477     # simple replacement for missing mktemp
1478     # NOT SAFE FOR GENERAL USE
1479     mktemp(){
1480         echo "${2%XXX*}.${HOSTNAME}.${UID}.$$"
1481     }
1482 fi
1483
1484 tmpfile(){
1485     tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
1486         (set -C; exec > $tmp) 2>/dev/null ||
1487         die "Unable to create temporary file in $TMPDIR."
1488     append TMPFILES $tmp
1489     eval $1=$tmp
1490 }
1491
1492 trap 'rm -f -- $TMPFILES' EXIT
1493 trap exit HUP INT TERM
1494
1495 tmpfile TMPC  .c
1496 tmpfile TMPE  $EXESUF
1497 tmpfile TMPH  .h
1498 tmpfile TMPO  .o
1499 tmpfile TMPS  .S
1500 tmpfile TMPSH .sh
1501
1502 unset -f mktemp
1503
1504 # make sure we can execute files in $TMPDIR
1505 cat > $TMPSH 2>> $logfile <<EOF
1506 #! /bin/sh
1507 EOF
1508 chmod +x $TMPSH >> $logfile 2>&1
1509 if ! $TMPSH >> $logfile 2>&1; then
1510     cat <<EOF
1511 Unable to create and execute files in $TMPDIR.  Set the TMPDIR environment
1512 variable to another directory and make sure that it is not mounted noexec.
1513 EOF
1514     die "Sanity test failed."
1515 fi
1516
1517 filter_cflags=echo
1518 filter_cppflags=echo
1519 filter_asflags=echo
1520
1521 if   $cc -v 2>&1 | grep -qi ^gcc; then
1522     cc_type=gcc
1523     cc_version=__VERSION__
1524     if ! $cc -dumpversion | grep -q '^2\.'; then
1525         CC_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
1526         AS_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
1527     fi
1528 elif $cc --version 2>/dev/null | grep -q Intel; then
1529     cc_type=icc
1530     cc_version="AV_STRINGIFY(__INTEL_COMPILER)"
1531     CC_DEPFLAGS='-MMD'
1532     AS_DEPFLAGS='-MMD'
1533 elif $cc -v 2>&1 | grep -q xlc; then
1534     cc_type=xlc
1535     cc_version="AV_STRINGIFY(__IBMC__)"
1536 elif $cc -V 2>/dev/null | grep -q Compaq; then
1537     cc_type=ccc
1538     cc_version="AV_STRINGIFY(__DECC_VER)"
1539     DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -M'
1540     debuglevel=3
1541     add_ldflags -Wl,-z,now # calls to libots crash without this
1542 elif $cc --vsn 2>/dev/null | grep -q "ARM C/C++ Compiler"; then
1543     test -d "$sysroot" || die "No valid sysroot specified."
1544     cc_type=armcc
1545     cc_version="AV_STRINGIFY(__ARMCC_VERSION)"
1546     armcc_conf="$PWD/armcc.conf"
1547     $cc --arm_linux_configure                 \
1548         --arm_linux_config_file="$armcc_conf" \
1549         --configure_sysroot="$sysroot"        \
1550         --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
1551         die "Error creating armcc configuration file."
1552     cc="$cc --arm_linux_config_file=$armcc_conf --translate_gcc"
1553     as_default="${cross_prefix}gcc"
1554     CC_DEPFLAGS='-MMD'
1555     AS_DEPFLAGS='-MMD'
1556 elif $cc -version 2>/dev/null | grep -q TMS470; then
1557     cc_type=tms470
1558     cc_version="AV_STRINGIFY(__TI_COMPILER_VERSION__)"
1559     cc="$cc --gcc --abi=eabi -eo=.o -mc -me"
1560     CC_O='-fr=$(@D)'
1561     as_default="${cross_prefix}gcc"
1562     ld_default="${cross_prefix}gcc"
1563     TMPO=$(basename $TMPC .c).o
1564     append TMPFILES $TMPO
1565     add_cflags -D__gnuc_va_list=va_list -D__USER_LABEL_PREFIX__=
1566     CC_DEPFLAGS='-ppa -ppd=$(@:.o=.d)'
1567     AS_DEPFLAGS='-MMD'
1568     filter_cflags=tms470_flags
1569     tms470_flags(){
1570         for flag; do
1571             case $flag in
1572                 -march=*|-mcpu=*)
1573                     case "${flag#*=}" in
1574                         armv7-a|cortex-a*)      echo -mv=7a8 ;;
1575                         armv7-r|cortex-r*)      echo -mv=7r4 ;;
1576                         armv7-m|cortex-m*)      echo -mv=7m3 ;;
1577                         armv6*|arm11*)          echo -mv=6   ;;
1578                         armv5*e|arm[79]*e*|arm9[24]6*|arm96*|arm102[26])
1579                                                 echo -mv=5e  ;;
1580                         armv4*|arm7*|arm9[24]*) echo -mv=4   ;;
1581                     esac
1582                     ;;
1583                 -mfpu=neon)     echo --float_support=vfpv3 --neon ;;
1584                 -mfpu=vfp)      echo --float_support=vfpv2        ;;
1585                 -msoft-float)   echo --float_support=vfplib       ;;
1586                 -Os)            echo -O3 -mf=2                    ;;
1587                 -O[0-3])        echo $flag -mf=5                  ;;
1588                 -g)             echo -g -mn                       ;;
1589             esac
1590         done
1591     }
1592 elif $cc -v 2>&1 | grep -q clang; then
1593     cc_type=clang
1594     cc_version=__VERSION__
1595     CC_DEPFLAGS='-MMD'
1596     AS_DEPFLAGS='-MMD'
1597 fi
1598
1599 test -n "$cc_type" && enable $cc_type || echolog "Unknown C compiler $cc"
1600
1601 : ${as_default:=$cc}
1602 : ${dep_cc_default:=$cc}
1603 : ${ld_default:=$cc}
1604 set_default as dep_cc ld
1605
1606 test -n "$CC_DEPFLAGS" || CCDEP=$DEPEND_CMD
1607 test -n "$AS_DEPFLAGS" || ASDEP=$DEPEND_CMD
1608
1609 add_cflags $extra_cflags
1610 add_asflags $extra_cflags
1611
1612 if test -n "$sysroot"; then
1613     case "$cc_type" in
1614         gcc)
1615             add_cppflags --sysroot="$sysroot"
1616             add_ldflags --sysroot="$sysroot"
1617         ;;
1618         tms470)
1619             add_cppflags -I"$sysinclude"
1620             add_ldflags  --sysroot="$sysroot"
1621         ;;
1622         clang)
1623             add_cppflags -isysroot="$sysroot"
1624             add_ldflags -isysroot="$sysroot"
1625         ;;
1626     esac
1627 fi
1628
1629 if test "$cpu" = host; then
1630     enabled cross_compile && die "--cpu=host makes no sense when cross-compiling."
1631
1632     case "$cc_type" in
1633         gcc)
1634             check_native(){
1635                 $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
1636                 awk "/$1=/{ match(\$0, /$1=(\\w+)/, a);print a[1];exit }" $TMPE
1637             }
1638             cpu=$(check_native -march || check_native -mcpu)
1639         ;;
1640     esac
1641
1642     test "${cpu:-host}" = host && die "--cpu=host not supported with compiler $cc"
1643 fi
1644
1645 # Add processor-specific flags
1646 case $cpu in
1647     601|ppc601|PowerPC601)
1648         cpuflags="-mcpu=601"
1649     ;;
1650     603*|ppc603*|PowerPC603*)
1651         cpuflags="-mcpu=603"
1652     ;;
1653     604*|ppc604*|PowerPC604*)
1654         cpuflags="-mcpu=604"
1655     ;;
1656     G3|g3|75*|ppc75*|PowerPC75*)
1657         cpuflags="-mcpu=750 -mpowerpc-gfxopt"
1658     ;;
1659     G4|g4|745*|ppc745*|PowerPC745*)
1660         cpuflags="-mcpu=7450 -mpowerpc-gfxopt"
1661     ;;
1662     74*|ppc74*|PowerPC74*)
1663         cpuflags="-mcpu=7400 -mpowerpc-gfxopt"
1664     ;;
1665     G5|g5|970|ppc970|PowerPC970|power4*|Power4*)
1666         cpuflags="-mcpu=970 -mpowerpc-gfxopt -mpowerpc64"
1667     ;;
1668     Cell|CELL|cell)
1669         cpuflags="-mcpu=cell"
1670         enable ldbrx
1671     ;;
1672     # targets that do NOT support conditional mov (cmov)
1673     i[345]86|pentium|pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
1674         cpuflags="-march=$cpu"
1675         disable cmov
1676     ;;
1677     # targets that do support conditional mov (cmov)
1678     i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2|amdfam10)
1679         cpuflags="-march=$cpu"
1680         enable cmov
1681         enable fast_cmov
1682     ;;
1683     # targets that do support conditional mov but on which it's slow
1684     pentium4|pentium4m|prescott|nocona)
1685         cpuflags="-march=$cpu"
1686         enable cmov
1687         disable fast_cmov
1688     ;;
1689     sparc64)
1690         cpuflags="-mcpu=v9"
1691     ;;
1692     arm11*|cortex*)
1693         cpuflags="-mcpu=$cpu"
1694         enable fast_unaligned
1695     ;;
1696     armv[67]*)
1697         cpuflags="-march=$cpu"
1698         enable fast_unaligned
1699     ;;
1700     armv*)
1701         cpuflags="-march=$cpu"
1702     ;;
1703     arm*)
1704         cpuflags="-mcpu=$cpu"
1705     ;;
1706     ev4|ev45|ev5|ev56|pca56|ev6|ev67)
1707         enabled ccc && cpuflags="-arch $cpu" || cpuflags="-mcpu=$cpu"
1708     ;;
1709     bf*)
1710         cpuflags="-mcpu=$cpu"
1711     ;;
1712     mips*|[45]k*|[237]4k*|m4k|r*000|loongson2[ef])
1713         cpuflags="-march=$cpu"
1714     ;;
1715     ap7[02]0[0-2])
1716         subarch="avr32_ap"
1717         cpuflags="-mpart=$cpu"
1718     ;;
1719     ap)
1720         subarch="avr32_ap"
1721         cpuflags="-march=$cpu"
1722     ;;
1723     uc3[ab]*)
1724         subarch="avr32_uc"
1725         cpuflags="-mcpu=$cpu"
1726     ;;
1727     uc)
1728         subarch="avr32_uc"
1729         cpuflags="-march=$cpu"
1730     ;;
1731     generic)
1732     ;;
1733     *)
1734         echo "WARNING: Unknown CPU \"$cpu\", ignored."
1735     ;;
1736 esac
1737
1738 add_cflags $cpuflags
1739 add_asflags $cpuflags
1740
1741 # compiler sanity check
1742 check_exec <<EOF
1743 int main(void){ return 0; }
1744 EOF
1745 if test "$?" != 0; then
1746     echo "$cc is unable to create an executable file."
1747     if test -z "$cross_prefix" && ! enabled cross_compile ; then
1748         echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
1749         echo "Only do this if you know what cross compiling means."
1750     fi
1751     die "C compiler test failed."
1752 fi
1753
1754 add_cppflags -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112
1755 check_cflags -std=c99
1756 check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
1757 #include <stdlib.h>
1758 EOF
1759 check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
1760 #include <stdlib.h>
1761 EOF
1762
1763 case "$arch" in
1764     alpha)
1765         arch="alpha"
1766         enable fast_64bit
1767         check_cflags -mieee
1768         spic=$shared
1769     ;;
1770     arm|armv[4567]*l)
1771         arch="arm"
1772     ;;
1773     avr32)
1774     ;;
1775     bfin)
1776         arch="bfin"
1777     ;;
1778     ia64)
1779         arch="ia64"
1780         enable fast_64bit
1781         spic=$shared
1782     ;;
1783     m68k)
1784         arch="m68k"
1785     ;;
1786     mips|mipsel|IP*)
1787         arch="mips"
1788         spic=$shared
1789     ;;
1790     mips64)
1791         arch="mips"
1792         subarch="mips64"
1793         enable fast_64bit
1794         spic=$shared
1795     ;;
1796     parisc|hppa)
1797         arch="parisc"
1798         spic=$shared
1799     ;;
1800     parisc64|hppa64)
1801         arch="parisc"
1802         enable fast_64bit
1803         spic=$shared
1804     ;;
1805     "Power Macintosh"|ppc|powerpc)
1806         arch="ppc"
1807         enable fast_unaligned
1808     ;;
1809     ppc64)
1810         arch="ppc"
1811         subarch="ppc64"
1812         enable fast_64bit
1813         enable fast_unaligned
1814     ;;
1815     s390|s390x)
1816         arch="s390"
1817     ;;
1818     sh4|sh)
1819         arch="sh4"
1820     ;;
1821     sparc)
1822         arch="sparc"
1823         spic=$shared
1824     ;;
1825     sun4u|sparc64)
1826         arch="sparc"
1827         subarch="sparc64"
1828         enable fast_64bit
1829         spic=$shared
1830     ;;
1831     i386|i486|i586|i686|i86pc|BePC|x86_64|amd64)
1832         arch="x86"
1833         subarch="x86_32"
1834         enable fast_unaligned
1835         check_cc <<EOF && enable fast_64bit && subarch="x86_64" && spic=$shared
1836         int test[sizeof(char*) - 7];
1837 EOF
1838         if test "$subarch" = "x86_64"; then
1839             enable cmov
1840             enable fast_cmov
1841         fi
1842     ;;
1843     *)
1844         arch="unknown"
1845     ;;
1846 esac
1847
1848 enable $arch $subarch
1849 enabled spic && enable pic
1850
1851 # OS specific
1852 case $target_os in
1853     beos|haiku|zeta)
1854         prefix_default="$HOME/config"
1855         # helps building libavcodec
1856         add_cppflags -DPIC
1857         add_cflags -fomit-frame-pointer
1858         # 3 gcc releases known for BeOS, each with ugly bugs
1859         gcc_version="$($cc -v 2>&1 | grep version | cut -d ' ' -f3-)"
1860         case "$gcc_version" in
1861           2.9-beos-991026*|2.9-beos-000224*) echo "R5/GG gcc"
1862             disable mmx
1863             ;;
1864           *20010315*) echo "BeBits gcc"
1865             add_cflags -fno-expensive-optimizations
1866             ;;
1867         esac
1868         SHFLAGS=-nostart
1869         # enable BeOS things
1870         enable audio_beos
1871         # no need for libm, but the inet stuff
1872         # Check for BONE
1873         # XXX: actually should check for NOT net_server
1874         if echo $BEINCLUDES | grep -q 'headers/be/bone'; then
1875             network_extralibs="-lbind -lsocket"
1876         else
1877             enable beos_netserver
1878             network_extralibs="-lnet"
1879         fi ;;
1880     sunos)
1881         FFSERVERLDFLAGS=""
1882         SHFLAGS='-shared -Wl,-h,$$(@F)'
1883         network_extralibs="-lsocket -lnsl"
1884         add_cppflags -D__EXTENSIONS__
1885         ;;
1886     netbsd)
1887         oss_indev_extralibs="-lossaudio"
1888         oss_outdev_extralibs="-lossaudio"
1889         ;;
1890     openbsd)
1891         enable malloc_aligned
1892         enable pic
1893         SHFLAGS='-shared'
1894         oss_indev_extralibs="-lossaudio"
1895         oss_outdev_extralibs="-lossaudio"
1896         ;;
1897     freebsd|dragonfly)
1898         enable malloc_aligned
1899         ;;
1900     bsd/os)
1901         osextralibs="-lpoll -lgnugetopt"
1902         strip="strip -d"
1903         ;;
1904     darwin)
1905         enable malloc_aligned
1906         SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR) -Wl,-read_only_relocs,suppress'
1907         strip="strip -x"
1908         FFLDFLAGS="-Wl,-dynamic,-search_paths_first"
1909         SLIBSUF=".dylib"
1910         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
1911         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
1912         FFSERVERLDFLAGS=-Wl,-bind_at_load
1913         objformat="macho"
1914         enabled x86_64 && objformat="macho64"
1915         enabled_any pic shared ||
1916             { check_cflags -mdynamic-no-pic && add_asflags -mdynamic-no-pic; }
1917         ;;
1918     mingw32*)
1919         if test $target_os = "mingw32ce"; then
1920             disable network
1921         else
1922             target_os=mingw32
1923         fi
1924         LIBTARGET=i386
1925         if enabled x86_64; then
1926             enable malloc_aligned
1927             LIBTARGET=x64
1928         elif enabled arm; then
1929             LIBTARGET=arm
1930         fi
1931         shlibdir_default="$bindir_default"
1932         disable ffserver
1933         SLIBPREF=""
1934         SLIBSUF=".dll"
1935         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1936         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1937         SLIB_EXTRA_CMD='-lib.exe /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)'
1938         SLIB_INSTALL_EXTRA_CMD='-install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"; \
1939             install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)"; \
1940             install -d "$(LIBDIR)"; \
1941             install -m 644 $(SUBDIR)lib$(SLIBNAME:$(SLIBSUF)=.dll.a) "$(LIBDIR)/lib$(SLIBNAME:$(SLIBSUF)=.dll.a)"'
1942         SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"'
1943         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'
1944         objformat="win32"
1945         enable dos_paths
1946         check_cflags -fno-common
1947         if ! enabled x86_64; then
1948             check_cpp_condition _mingw.h "(__MINGW32_MAJOR_VERSION > 3) || (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
1949                 die "ERROR: MinGW runtime version must be >= 3.15."
1950             enabled_any avisynth vfwcap_indev &&
1951                 { check_cpp_condition w32api.h "(__W32API_MAJOR_VERSION > 3) || (__W32API_MAJOR_VERSION == 3 && __W32API_MINOR_VERSION >= 13)" ||
1952                   die "ERROR: avisynth and vfwcap_indev require w32api version 3.13 or later."; }
1953             fi
1954         ;;
1955     cygwin*)
1956         target_os=cygwin
1957         shlibdir_default="$bindir_default"
1958         SLIBPREF="cyg"
1959         SLIBSUF=".dll"
1960         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1961         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1962         SHFLAGS='-shared -Wl,--enable-auto-image-base'
1963         objformat="win32"
1964         enable dos_paths
1965         check_cflags -fno-common
1966         ;;
1967     *-dos|freedos|opendos)
1968         disable ffplay ffserver
1969         disable $INDEV_LIST $OUTDEV_LIST
1970         network_extralibs="-lsocket"
1971         objformat="coff"
1972         enable dos_paths
1973         ;;
1974     linux)
1975         enable dv1394
1976         ;;
1977     irix*)
1978         target_os=irix
1979         ranlib="echo ignoring ranlib"
1980         ;;
1981     os/2*)
1982         strip="lxlite"
1983         ln_s="cp -f"
1984         FFLDFLAGS="-Zomf -Zbin-files -Zargs-wild -Zmap"
1985         SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
1986         FFSERVERLDFLAGS=""
1987         LIBSUF="_s.a"
1988         SLIBPREF=""
1989         SLIBSUF=".dll"
1990         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
1991         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
1992         SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
1993           echo PROTMODE >> $(SUBDIR)$(NAME).def; \
1994           echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
1995           echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
1996           echo EXPORTS >> $(SUBDIR)$(NAME).def; \
1997           emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
1998         SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
1999           emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
2000         SLIB_INSTALL_EXTRA_CMD='install -m 644 $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib "$(LIBDIR)"'
2001         SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.a "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.lib'
2002         enable dos_paths
2003         ;;
2004     gnu/kfreebsd)
2005         ;;
2006     gnu)
2007         ;;
2008
2009     *)
2010         die "Unknown OS '$target_os'."
2011         ;;
2012 esac
2013
2014 set_default $PATHS_LIST
2015
2016 add_extralibs $osextralibs
2017
2018 # Combine FFLDFLAGS and the LDFLAGS environment variable.
2019 LDFLAGS="$FFLDFLAGS $LDFLAGS"
2020
2021 # we need to build at least one lib type
2022 if ! enabled_any static shared; then
2023     cat <<EOF
2024 At least one library type must be built.
2025 Specify --enable-static to build the static libraries or --enable-shared to
2026 build the shared libraries as well. To only build the shared libraries specify
2027 --disable-static in addition to --enable-shared.
2028 EOF
2029     exit 1;
2030 fi
2031
2032 disabled static && LIBNAME=""
2033
2034 if enabled_any libfaad libfaadbin ; then
2035     if check_header faad.h; then
2036         check_cc <<EOF
2037 #include <faad.h>
2038 #ifndef FAAD2_VERSION
2039 ok faad1
2040 #endif
2041 int main(void) { return 0; }
2042 EOF
2043         test $? = 0 && enable libfaad2
2044     else
2045         die "FAAD test failed."
2046     fi
2047 fi
2048
2049
2050 die_license_disabled() {
2051     enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
2052 }
2053
2054 die_license_disabled gpl libfaad2
2055 die_license_disabled gpl libx264
2056 die_license_disabled gpl libxvid
2057 die_license_disabled gpl postproc
2058 die_license_disabled gpl x11grab
2059
2060 die_license_disabled nonfree libfaac
2061
2062 die_license_disabled version3 libopencore_amrnb
2063 die_license_disabled version3 libopencore_amrwb
2064
2065 enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
2066
2067 check_deps $ARCH_EXT_LIST
2068
2069 disabled optimizations || check_cflags -fomit-frame-pointer
2070
2071 enable_pic() {
2072     enable pic
2073     add_cppflags -DPIC
2074     add_cflags   -fPIC
2075     add_asflags  -fPIC
2076 }
2077
2078 enabled pic && enable_pic
2079
2080 check_cc <<EOF || die "Symbol mangling check failed."
2081 int ff_extern;
2082 EOF
2083 sym=$($nm -P -g $TMPO | grep ff_extern)
2084 extern_prefix=${sym%%ff_extern*}
2085
2086 check_cc <<EOF && enable inline_asm
2087 void foo(void) { __asm__ volatile ("" ::); }
2088 EOF
2089
2090 _restrict=
2091 for restrict_keyword in restrict __restrict__ __restrict; do
2092     check_cc <<EOF && _restrict=$restrict_keyword && break
2093 void foo(char * $restrict_keyword p);
2094 EOF
2095 done
2096
2097 check_cc <<EOF && enable attribute_packed
2098 struct { int x; } __attribute__((packed)) x;
2099 EOF
2100
2101 check_cc <<EOF || die "endian test failed"
2102 unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
2103 EOF
2104 od -A n -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
2105
2106 if enabled arm; then
2107
2108     check_cflags -marm
2109
2110     check_ld <<EOF && enable vfp_args
2111 __asm__ (".eabi_attribute 28, 1");
2112 int main(void) { return 0; }
2113 EOF
2114
2115     # We have to check if pld is a nop and disable it.
2116     check_asm pld '"pld [r0]"'
2117
2118     enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
2119     enabled armv6   && check_asm armv6   '"sadd16 r0, r0, r0"'
2120     enabled armv6t2 && check_asm armv6t2 '"movt r0, #0"'
2121     enabled armvfp  && check_asm armvfp  '"fadds s0, s0, s0"'
2122     enabled iwmmxt  && check_asm iwmmxt  '"wunpckelub wr6, wr4"'
2123     enabled neon    && check_asm neon    '"vadd.i16 q0, q0, q0"'
2124
2125     enabled_all armv6t2 shared !pic && enable_pic
2126
2127 elif enabled mips; then
2128
2129     check_asm loongson '"dmult.g $1, $2, $3"'
2130     enabled mmi     && check_asm mmi     '"lq $2, 0($2)"'
2131
2132 elif enabled ppc; then
2133
2134     check_asm dcbzl     '"dcbzl 0, 1"'
2135     check_asm ppc4xx    '"maclhw r10, r11, r12"'
2136     check_asm xform_asm '"lwzx 0, %y0" :: "Z"(*(int*)0)'
2137
2138     # AltiVec flags: The FSF version of GCC differs from the Apple version
2139     if enabled altivec; then
2140         check_cflags -maltivec -mabi=altivec &&
2141         { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
2142         check_cflags -faltivec
2143
2144         # check if our compiler supports Motorola AltiVec C API
2145         check_cc <<EOF || disable altivec
2146 $inc_altivec_h
2147 int main(void) {
2148     vector signed int v1, v2, v3;
2149     v1 = vec_add(v2,v3);
2150     return 0;
2151 }
2152 EOF
2153
2154         # check if our compiler supports braces for vector declarations
2155         check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
2156 $inc_altivec_h
2157 int main (void) { (vector int) {1}; return 0; }
2158 EOF
2159     fi
2160
2161 elif enabled sparc; then
2162
2163     enabled vis && check_asm vis '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc &&
2164         add_cflags -mcpu=ultrasparc -mtune=ultrasparc
2165
2166 elif enabled x86; then
2167
2168     # check whether EBP is available on x86
2169     # As 'i' is stored on the stack, this program will crash
2170     # if the base pointer is used to access it because the
2171     # base pointer is cleared in the inline assembly code.
2172     check_exec_crash <<EOF && enable ebp_available
2173     volatile int i=0;
2174     __asm__ volatile (
2175         "xorl %%ebp, %%ebp"
2176     ::: "%ebp");
2177     return i;
2178 EOF
2179
2180     # check whether EBX is available on x86
2181     check_asm ebx_available '""::"b"(0)' &&
2182         check_asm ebx_available '"":::"%ebx"'
2183
2184     # check whether more than 10 operands are supported
2185     check_cc <<EOF && enable ten_operands
2186 int main(void) {
2187     int x=0;
2188     __asm__ volatile(
2189         ""
2190         :"+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x)
2191     );
2192     return 0;
2193 }
2194 EOF
2195
2196     # check whether binutils is new enough to compile SSSE3/MMX2
2197     enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
2198     enabled mmx2  && check_asm mmx2  '"pmaxub %mm0, %mm1"'
2199
2200     check_asm bswap '"bswap %%eax" ::: "%eax"'
2201
2202     YASMFLAGS="-f $objformat -DARCH_$(toupper $subarch)"
2203     enabled     x86_64        && append YASMFLAGS "-m amd64"
2204     enabled_all x86_64 shared && append YASMFLAGS "-DPIC"
2205     case "$objformat" in
2206         elf) enabled debug && append YASMFLAGS "-g dwarf2" ;;
2207         macho64)              append YASMFLAGS "-DPIC -DPREFIX" ;;
2208         *)                    append YASMFLAGS "-DPREFIX"  ;;
2209     esac
2210     disabled yasm || { check_yasm "pabsw xmm0, xmm0" && enable yasm; }
2211
2212 fi
2213
2214 if check_func dlopen; then
2215     ldl=
2216 elif check_func dlopen -ldl; then
2217     ldl=-ldl
2218 fi
2219
2220 # Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
2221 check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
2222
2223 check_func  fork
2224 check_func  gethrtime
2225 check_func  getrusage
2226 check_func  inet_aton $network_extralibs
2227 check_func  isatty
2228 check_func  memalign
2229 check_func  mkstemp
2230 check_func  posix_memalign
2231 check_func_headers io.h setmode
2232 check_func_headers lzo/lzo1x.h lzo1x_999_compress
2233 check_func_headers windows.h GetProcessTimes
2234 check_func_headers windows.h VirtualAlloc
2235
2236 check_header conio.h
2237 check_header dlfcn.h
2238 check_header malloc.h
2239 check_header poll.h
2240 check_header sys/mman.h
2241 check_header sys/resource.h
2242 check_header sys/select.h
2243 check_header termios.h
2244 check_header vdpau/vdpau.h
2245 check_header vdpau/vdpau_x11.h
2246 check_header X11/extensions/XvMClib.h
2247
2248 if ! enabled_any memalign memalign_hack posix_memalign malloc_aligned &&
2249      enabled_any $need_memalign ; then
2250     die "Error, no aligned memory allocator but SSE enabled, disable it or use --enable-memalign-hack."
2251 fi
2252
2253 disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
2254 disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
2255
2256 # check for some common methods of building with pthread support
2257 # do this before the optional library checks as some of them require pthreads
2258 if enabled pthreads; then
2259     if check_func pthread_create; then
2260         :
2261     elif check_func pthread_create -pthread; then
2262         add_cflags -pthread
2263         add_extralibs -pthread
2264     elif check_func pthread_create -pthreads; then
2265         add_cflags -pthreads
2266         add_extralibs -pthreads
2267     elif check_func pthread_create -lpthreadGC2; then
2268         add_extralibs -lpthreadGC2
2269     elif ! check_lib pthread.h pthread_create -lpthread; then
2270         die "ERROR: can't find pthreads library"
2271     fi
2272 fi
2273
2274 for thread in $THREADS_LIST; do
2275     if enabled $thread; then
2276         test -n "$thread_type" &&
2277             die "ERROR: Only one thread type must be selected." ||
2278             thread_type="$thread"
2279     fi
2280 done
2281
2282 check_lib math.h sin -lm
2283 check_lib va/va.h vaInitialize -lva
2284
2285 check_func llrint
2286 check_func log2
2287 check_func lrint
2288 check_func lrintf
2289 check_func round
2290 check_func roundf
2291 check_func truncf
2292
2293 # these are off by default, so fail if requested and not available
2294 enabled avisynth   && require2 vfw32 "windows.h vfw.h" AVIFileInit -lvfw32
2295 enabled libdirac   && add_cflags $(pkg-config --cflags dirac) &&
2296                       require  libdirac libdirac_decoder/dirac_parser.h dirac_decoder_init $(pkg-config --libs dirac) &&
2297                       require  libdirac libdirac_encoder/dirac_encoder.h dirac_encoder_init $(pkg-config --libs dirac)
2298 enabled libfaac    && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
2299 enabled libfaad    && require2 libfaad faad.h faacDecOpen -lfaad
2300 enabled libgsm     && require  libgsm gsm.h gsm_create -lgsm
2301 enabled libmp3lame && require  libmp3lame lame/lame.h lame_init -lmp3lame -lm
2302 enabled libnut     && require  libnut libnut.h nut_demuxer_init -lnut
2303 enabled libopencore_amrnb  && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb -lm
2304 enabled libopencore_amrwb  && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb -lm
2305 enabled libopenjpeg && require libopenjpeg openjpeg.h opj_version -lopenjpeg
2306 enabled libschroedinger && add_cflags $(pkg-config --cflags schroedinger-1.0) &&
2307                            require libschroedinger schroedinger/schro.h schro_init $(pkg-config --libs schroedinger-1.0)
2308 enabled libspeex   && require  libspeex speex/speex.h speex_decoder_init -lspeex
2309 enabled libtheora  && require  libtheora theora/theora.h theora_info_init -ltheora -logg
2310 enabled libvorbis  && require  libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
2311 enabled libx264    && require  libx264 x264.h x264_encoder_encode -lx264 -lm &&
2312                       { check_cpp_condition x264.h "X264_BUILD >= 78" ||
2313                         die "ERROR: libx264 version must be >= 0.78."; }
2314 enabled libxvid    && require  libxvid xvid.h xvid_global -lxvidcore
2315 enabled mlib       && require  mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
2316
2317 # libdc1394 check
2318 if enabled libdc1394; then
2319     { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
2320         enable libdc1394_2; } ||
2321     { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
2322         enable libdc1394_1; } ||
2323     die "ERROR: No version of libdc1394 found "
2324 fi
2325
2326 disable sdl_too_old
2327 disable sdl
2328 SDL_CONFIG="${cross_prefix}sdl-config"
2329 if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
2330     sdl_cflags=$("${SDL_CONFIG}" --cflags)
2331     temp_cflags $sdl_cflags
2332     temp_extralibs $("${SDL_CONFIG}" --libs)
2333     if check_lib2 SDL.h SDL_Init; then
2334         _sdlversion=$("${SDL_CONFIG}" --version | sed 's/[^0-9]//g')
2335         if test "$_sdlversion" -lt 121 ; then
2336             enable sdl_too_old
2337         else
2338             enable sdl
2339             check_cc $sdl_cflags <<EOF && enable sdl_video_size
2340 #include <SDL.h>
2341 int main(int argc, char **argv){
2342     const SDL_VideoInfo *vi = SDL_GetVideoInfo();
2343     int w = vi->current_w;
2344     return 0;
2345 }
2346 EOF
2347         fi
2348     fi
2349     restore_flags
2350 fi
2351
2352 texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
2353
2354 if enabled network; then
2355     check_type "sys/types.h sys/socket.h" socklen_t
2356     # Prefer arpa/inet.h over winsock2
2357     if check_header arpa/inet.h ; then
2358         check_func closesocket
2359     elif check_header winsock2.h ; then
2360         check_func_headers winsock2.h closesocket -lws2 && \
2361             network_extralibs="-lws2" || \
2362         { check_func_headers winsock2.h closesocket -lws2_32 && \
2363             network_extralibs="-lws2_32"; }
2364         check_type ws2tcpip.h socklen_t
2365     else
2366         disable network
2367     fi
2368 fi
2369
2370 enabled_all network ipv6 && check_ld <<EOF || disable ipv6
2371 #include <sys/types.h>
2372 #include <sys/socket.h>
2373 #include <netinet/in.h>
2374 #include <netdb.h>
2375 int main(void) {
2376     struct sockaddr_storage saddr;
2377     struct ipv6_mreq mreq6;
2378     getaddrinfo(0,0,0,0);
2379     getnameinfo(0,0,0,0,0,0,0);
2380     IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
2381 }
2382 EOF
2383
2384 check_header linux/videodev.h
2385 check_header linux/videodev2.h
2386 check_header sys/videoio.h
2387
2388 check_func_headers "windows.h vfw.h" capCreateCaptureWindow -lvfw32
2389
2390 # check for ioctl_meteor.h, ioctl_bt848.h and alternatives
2391 { check_header dev/bktr/ioctl_meteor.h &&
2392   check_header dev/bktr/ioctl_bt848.h; } ||
2393 { check_header machine/ioctl_meteor.h &&
2394   check_header machine/ioctl_bt848.h; } ||
2395 { check_header dev/video/meteor/ioctl_meteor.h &&
2396   check_header dev/video/bktr/ioctl_bt848.h; } ||
2397 check_header dev/ic/bt8xx.h
2398
2399 check_header sys/soundcard.h
2400 check_header soundcard.h
2401
2402 enabled_any alsa_indev alsa_outdev && check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
2403
2404 enabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack
2405
2406 enabled x11grab                         &&
2407 check_header X11/Xlib.h                 &&
2408 check_header X11/extensions/XShm.h      &&
2409 check_func XOpenDisplay -lX11           &&
2410 check_func XShmCreateImage -lX11 -lXext
2411
2412 enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel"
2413
2414 # add some useful compiler flags if supported
2415 check_cflags -Wdeclaration-after-statement
2416 check_cflags -Wall
2417 check_cflags -Wno-switch
2418 check_cflags -Wdisabled-optimization
2419 check_cflags -Wpointer-arith
2420 check_cflags -Wredundant-decls
2421 check_cflags -Wno-pointer-sign
2422 check_cflags -Wcast-qual
2423 check_cflags -Wwrite-strings
2424 check_cflags -Wtype-limits
2425 check_cflags -Wundef
2426 enabled extra_warnings && check_cflags -Winline
2427
2428 # add some linker flags
2429 check_ldflags -Wl,--warn-common
2430 check_ldflags -Wl,--as-needed
2431 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'
2432 check_ldflags -Wl,-Bsymbolic
2433
2434 if enabled small; then
2435     check_cflags -Os            # not all compilers support -Os
2436     optimizations="small"
2437 elif enabled optimizations; then
2438     if enabled xlc; then
2439         add_cflags  -O5
2440         add_ldflags -O5
2441     elif enabled ccc; then
2442         add_cflags -fast
2443     else
2444         add_cflags -O3
2445     fi
2446 fi
2447 check_cflags -fno-math-errno
2448 check_cflags -fno-signed-zeros
2449
2450 if enabled icc; then
2451     # Just warnings, no remarks
2452     check_cflags -w1
2453     # -wd: Disable following warnings
2454     # 144, 167, 556: -Wno-pointer-sign
2455     # 10006: ignoring unknown option -fno-signed-zeros
2456     # 10156: ignoring option '-W'; no argument required
2457     check_cflags -wd144,167,556,10006,10156
2458     # 11030: Warning unknown option --as-needed
2459     # 10156: ignoring option '-export'; no argument required
2460     check_ldflags -wd10156,11030
2461     # Allow to compile with optimizations
2462     check_ldflags -march=$cpu
2463     # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
2464     enable ebp_available
2465 elif enabled ccc; then
2466     # disable some annoying warnings
2467     add_cflags -msg_disable cvtu32to64
2468     add_cflags -msg_disable embedcomment
2469     add_cflags -msg_disable needconstext
2470     add_cflags -msg_disable nomainieee
2471     add_cflags -msg_disable ptrmismatch1
2472     add_cflags -msg_disable unreachcode
2473 elif enabled gcc; then
2474     check_cflags -fno-tree-vectorize
2475 elif enabled clang; then
2476     check_cflags -Qunused-arguments
2477 fi
2478
2479 if enabled gprof; then
2480     add_cflags  -p
2481     add_ldflags -p
2482 fi
2483
2484 # Find out if the .align argument is a power of two or not.
2485 check_asm asmalign_pot '".align 3"'
2486
2487 enabled_any $DECODER_LIST      && enable decoders
2488 enabled_any $ENCODER_LIST      && enable encoders
2489 enabled_any $HWACCEL_LIST      && enable hwaccels
2490 enabled_any $BSF_LIST          && enable bsfs
2491 enabled_any $DEMUXER_LIST      && enable demuxers
2492 enabled_any $MUXER_LIST        && enable muxers
2493 enabled_any $FILTER_LIST       && enable filters
2494 enabled_any $INDEV_LIST        && enable indevs
2495 enabled_any $OUTDEV_LIST       && enable outdevs
2496 enabled_any $PROTOCOL_LIST     && enable protocols
2497
2498 enabled_any $THREADS_LIST      && enable threads
2499
2500 check_deps $CONFIG_LIST       \
2501            $CONFIG_EXTRA      \
2502            $HAVE_LIST         \
2503            $DECODER_LIST      \
2504            $ENCODER_LIST      \
2505            $HWACCEL_LIST      \
2506            $PARSER_LIST       \
2507            $BSF_LIST          \
2508            $DEMUXER_LIST      \
2509            $MUXER_LIST        \
2510            $FILTER_LIST       \
2511            $INDEV_LIST        \
2512            $OUTDEV_LIST       \
2513            $PROTOCOL_LIST     \
2514
2515 echo "install prefix            $prefix"
2516 echo "source path               $source_path"
2517 echo "C compiler                $cc"
2518 echo ".align is power-of-two    $asmalign_pot"
2519 echo "ARCH                      $arch ($cpu)"
2520 if test "$build_suffix" != ""; then
2521     echo "build suffix              $build_suffix"
2522 fi
2523 if test "$extra_version" != ""; then
2524     echo "version string suffix     $extra_version"
2525 fi
2526 echo "big-endian                ${bigendian-no}"
2527 echo "runtime cpu detection     ${runtime_cpudetect-no}"
2528 if enabled x86; then
2529     echo "yasm                      ${yasm-no}"
2530     echo "MMX enabled               ${mmx-no}"
2531     echo "MMX2 enabled              ${mmx2-no}"
2532     echo "3DNow! enabled            ${amd3dnow-no}"
2533     echo "3DNow! extended enabled   ${amd3dnowext-no}"
2534     echo "SSE enabled               ${sse-no}"
2535     echo "SSSE3 enabled             ${ssse3-no}"
2536     echo "CMOV enabled              ${cmov-no}"
2537     echo "CMOV is fast              ${fast_cmov-no}"
2538     echo "EBX available             ${ebx_available-no}"
2539     echo "EBP available             ${ebp_available-no}"
2540     echo "10 operands supported     ${ten_operands-no}"
2541 fi
2542 if enabled arm; then
2543     echo "ARMv5TE enabled           ${armv5te-no}"
2544     echo "ARMv6 enabled             ${armv6-no}"
2545     echo "ARMv6T2 enabled           ${armv6t2-no}"
2546     echo "ARM VFP enabled           ${armvfp-no}"
2547     echo "IWMMXT enabled            ${iwmmxt-no}"
2548     echo "NEON enabled              ${neon-no}"
2549 fi
2550 if enabled mips; then
2551     echo "MMI enabled               ${mmi-no}"
2552 fi
2553 if enabled ppc; then
2554     echo "AltiVec enabled           ${altivec-no}"
2555     echo "PPC 4xx optimizations     ${ppc4xx-no}"
2556     echo "dcbzl available           ${dcbzl-no}"
2557     echo "performance report        ${powerpc_perf-no}"
2558 fi
2559 if enabled sparc; then
2560     echo "VIS enabled               ${vis-no}"
2561 fi
2562 echo "gprof enabled             ${gprof-no}"
2563 echo "debug symbols             ${debug-no}"
2564 echo "strip symbols             ${stripping-no}"
2565 echo "optimizations             ${optimizations-no}"
2566 echo "static                    ${static-no}"
2567 echo "shared                    ${shared-no}"
2568 echo "postprocessing support    ${postproc-no}"
2569 echo "new filter support        ${avfilter-no}"
2570 echo "filters using lavformat   ${avfilter_lavf-no}"
2571 echo "network support           ${network-no}"
2572 if enabled network; then
2573     echo "IPv6 support              ${ipv6-no}"
2574 fi
2575 echo "threading support         ${thread_type-no}"
2576 echo "SDL support               ${sdl-no}"
2577 if enabled sdl_too_old; then
2578     echo "-> Your SDL version is too old - please upgrade to have FFplay/SDL support."
2579 fi
2580 echo "Sun medialib support      ${mlib-no}"
2581 echo "AVISynth enabled          ${avisynth-no}"
2582 echo "libdc1394 support         ${libdc1394-no}"
2583 echo "libdirac enabled          ${libdirac-no}"
2584 echo "libfaac enabled           ${libfaac-no}"
2585 echo "libfaad enabled           ${libfaad-no}"
2586 echo "libfaad dlopened          ${libfaadbin-no}"
2587 echo "libgsm enabled            ${libgsm-no}"
2588 echo "libmp3lame enabled        ${libmp3lame-no}"
2589 echo "libnut enabled            ${libnut-no}"
2590 echo "libopencore-amrnb support ${libopencore_amrnb-no}"
2591 echo "libopencore-amrwb support ${libopencore_amrwb-no}"
2592 echo "libopenjpeg enabled       ${libopenjpeg-no}"
2593 echo "libschroedinger enabled   ${libschroedinger-no}"
2594 echo "libspeex enabled          ${libspeex-no}"
2595 echo "libtheora enabled         ${libtheora-no}"
2596 echo "libvorbis enabled         ${libvorbis-no}"
2597 echo "libx264 enabled           ${libx264-no}"
2598 echo "libxvid enabled           ${libxvid-no}"
2599 echo "zlib enabled              ${zlib-no}"
2600 echo "bzlib enabled             ${bzlib-no}"
2601 echo
2602
2603 for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
2604     echo "Enabled ${type}s:"
2605     eval list=\$$(toupper $type)_LIST
2606     for part in $list; do
2607         enabled $part && echo ${part%_*}
2608     done | sort | pr -3 -t
2609     echo
2610 done
2611
2612 license="LGPL version 2.1 or later"
2613 if enabled nonfree; then
2614     license="nonfree and unredistributable"
2615 elif enabled gplv3; then
2616     license="GPL version 3 or later"
2617 elif enabled lgplv3; then
2618     license="LGPL version 3 or later"
2619 elif enabled gpl; then
2620     license="GPL version 2 or later"
2621 fi
2622
2623 echo "License: $license"
2624
2625 echo "Creating config.mak and config.h..."
2626
2627 echo "# Automatically generated by configure - do not modify!" > config.mak
2628 echo "ifndef FFMPEG_CONFIG_MAK" >> config.mak
2629 echo "FFMPEG_CONFIG_MAK=1" >> config.mak
2630
2631 echo "FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION" >> config.mak
2632 echo "prefix=$prefix" >> config.mak
2633 echo "LIBDIR=\$(DESTDIR)$libdir" >> config.mak
2634 echo "SHLIBDIR=\$(DESTDIR)$shlibdir" >> config.mak
2635 echo "INCDIR=\$(DESTDIR)$incdir" >> config.mak
2636 echo "BINDIR=\$(DESTDIR)$bindir" >> config.mak
2637 echo "DATADIR=\$(DESTDIR)$datadir" >> config.mak
2638 echo "MANDIR=\$(DESTDIR)$mandir" >> config.mak
2639 echo "SRC_PATH=\"$source_path\"" >> config.mak
2640 echo "SRC_PATH_BARE=$source_path" >> config.mak
2641 echo "BUILD_ROOT=\"$PWD\"" >> config.mak
2642 echo "CC=$cc" >> config.mak
2643 echo "AS=$as" >> config.mak
2644 echo "LD=$ld" >> config.mak
2645 echo "DEPCC=$dep_cc" >> config.mak
2646 echo "YASM=$yasmexe" >> config.mak
2647 echo "AR=$ar" >> config.mak
2648 echo "RANLIB=$ranlib" >> config.mak
2649 echo "LN_S=$ln_s" >> config.mak
2650 enabled stripping &&
2651     echo "STRIP=$strip" >> config.mak ||
2652     echo "STRIP=echo ignoring strip" >> config.mak
2653
2654 echo "CPPFLAGS=$CPPFLAGS" >> config.mak
2655 echo "CFLAGS=$CFLAGS" >> config.mak
2656 echo "ASFLAGS=$ASFLAGS" >> config.mak
2657 echo "CC_O=$CC_O" >> config.mak
2658 echo "LDFLAGS=$LDFLAGS" >> config.mak
2659 echo "FFSERVERLDFLAGS=$FFSERVERLDFLAGS" >> config.mak
2660 echo "SHFLAGS=$SHFLAGS" >> config.mak
2661 echo "YASMFLAGS=$YASMFLAGS" >> config.mak
2662 echo "BUILDSUF=$build_suffix" >> config.mak
2663 echo "FULLNAME=$FULLNAME" >> config.mak
2664 echo "LIBPREF=$LIBPREF" >> config.mak
2665 echo "LIBSUF=$LIBSUF" >> config.mak
2666 echo "LIBNAME=$LIBNAME" >> config.mak
2667 echo "SLIBPREF=$SLIBPREF" >> config.mak
2668 echo "SLIBSUF=$SLIBSUF" >> config.mak
2669 echo "EXESUF=$EXESUF" >> config.mak
2670 echo "EXTRA_VERSION=$extra_version" >> config.mak
2671 echo "DEPFLAGS=$DEPFLAGS" >> config.mak
2672 echo "CCDEP=$CCDEP" >> config.mak
2673 echo "ASDEP=$ASDEP" >> config.mak
2674 echo "CC_DEPFLAGS=$CC_DEPFLAGS" >> config.mak
2675 echo "AS_DEPFLAGS=$AS_DEPFLAGS" >> config.mak
2676 echo "HOSTCC=$host_cc" >> config.mak
2677 echo "HOSTCFLAGS=$host_cflags" >> config.mak
2678 echo "HOSTEXESUF=$HOSTEXESUF" >> config.mak
2679 echo "HOSTLDFLAGS=$host_ldflags" >> config.mak
2680 echo "HOSTLIBS=$host_libs" >> config.mak
2681 echo "TARGET_EXEC=$target_exec" >> config.mak
2682 echo "TARGET_PATH=$target_path" >> config.mak
2683
2684 if enabled sdl; then
2685     echo "SDL_LIBS=$("${SDL_CONFIG}" --libs)" >> config.mak
2686     echo "SDL_CFLAGS=$("${SDL_CONFIG}" --cflags)" >> config.mak
2687 fi
2688 if enabled texi2html; then
2689     echo "BUILD_DOC=yes" >> config.mak
2690 fi
2691
2692 get_version(){
2693     name=$1
2694     file=$source_path/$2
2695     eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
2696     eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
2697     lcname=$(tolower $name)
2698     eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
2699     eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
2700 }
2701
2702 get_version LIBSWSCALE  libswscale/swscale.h
2703 get_version LIBPOSTPROC libpostproc/postprocess.h
2704 get_version LIBAVCODEC  libavcodec/avcodec.h
2705 get_version LIBAVDEVICE libavdevice/avdevice.h
2706 get_version LIBAVFORMAT libavformat/avformat.h
2707 get_version LIBAVUTIL   libavutil/avutil.h
2708 get_version LIBAVFILTER libavfilter/avfilter.h
2709
2710 if enabled shared; then
2711     echo "LIBTARGET=${LIBTARGET}" >> config.mak
2712     echo "SLIBNAME=${SLIBNAME}" >> config.mak
2713     echo "SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}" >> config.mak
2714     echo "SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}" >> config.mak
2715     echo "SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}" >> config.mak
2716     echo "SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}" >> config.mak
2717     echo "SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}" >> config.mak
2718     echo "SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}" >> config.mak
2719 fi
2720 echo "LIB_INSTALL_EXTRA_CMD=${LIB_INSTALL_EXTRA_CMD}" >> config.mak
2721 echo "EXTRALIBS=$extralibs" >> config.mak
2722
2723 echo "ARCH=$arch" >> config.mak
2724
2725
2726 echo "/* Automatically generated by configure - do not modify! */" > $TMPH
2727 echo "#ifndef FFMPEG_CONFIG_H" >> $TMPH
2728 echo "#define FFMPEG_CONFIG_H" >> $TMPH
2729 echo "#define FFMPEG_CONFIGURATION \"$(c_escape $FFMPEG_CONFIGURATION)\"" >> $TMPH
2730 echo "#define FFMPEG_DATADIR \"$(eval c_escape $datadir)\"" >> $TMPH
2731
2732 echo "#define CC_TYPE \"$cc_type\"" >> $TMPH
2733 echo "#define CC_VERSION $cc_version" >> $TMPH
2734 echo "#define restrict $_restrict" >> $TMPH
2735
2736 if enabled small || disabled optimizations; then
2737     echo "#define av_always_inline"  >> $TMPH
2738 fi
2739
2740
2741 # Apparently it's not possible to portably echo a backslash.
2742 enabled asmalign_pot &&
2743     printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH ||
2744     printf '#define ASMALIGN(ZEROBITS) ".align 1 << " #ZEROBITS "\\n\\t"\n' >> $TMPH
2745
2746 echo "#define EXTERN_PREFIX \"${extern_prefix}\"" >> $TMPH
2747 echo "#define EXTERN_ASM ${extern_prefix}" >> $TMPH
2748
2749 print_config ARCH_   $TMPH config.mak $ARCH_LIST
2750 print_config HAVE_   $TMPH config.mak $HAVE_LIST
2751 print_config CONFIG_ $TMPH config.mak $CONFIG_LIST       \
2752                                       $CONFIG_EXTRA      \
2753                                       $DECODER_LIST      \
2754                                       $ENCODER_LIST      \
2755                                       $HWACCEL_LIST      \
2756                                       $PARSER_LIST       \
2757                                       $BSF_LIST          \
2758                                       $DEMUXER_LIST      \
2759                                       $MUXER_LIST        \
2760                                       $FILTER_LIST       \
2761                                       $PROTOCOL_LIST     \
2762                                       $INDEV_LIST        \
2763                                       $OUTDEV_LIST       \
2764
2765 echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
2766 echo "endif # FFMPEG_CONFIG_MAK" >> config.mak
2767
2768 # Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
2769 cmp -s $TMPH config.h &&
2770     echo "config.h is unchanged" ||
2771     mv -f $TMPH config.h
2772
2773 # build tree in object directory if source path is different from current one
2774 if enabled source_path_used; then
2775     DIRS="
2776         doc
2777         libavcodec
2778         libavcodec/$arch
2779         libavdevice
2780         libavfilter
2781         libavformat
2782         libavutil
2783         libavutil/$arch
2784         libpostproc
2785         libswscale
2786         libswscale/$arch
2787         tests
2788         tools
2789     "
2790     FILES="
2791         Makefile
2792         common.mak
2793         subdir.mak
2794         doc/texi2pod.pl
2795         libavcodec/Makefile
2796         libavdevice/Makefile
2797         libavfilter/Makefile
2798         libavformat/Makefile
2799         libavutil/Makefile
2800         libpostproc/Makefile
2801         libswscale/Makefile
2802     "
2803     for dir in $DIRS ; do
2804         mkdir -p $dir
2805     done
2806     for f in $FILES ; do
2807         $ln_s "$source_path/$f" $f
2808     done
2809 fi
2810
2811
2812 # build pkg-config files
2813
2814 pkgconfig_generate(){
2815 name=$1
2816 shortname=${name#lib}${build_suffix}
2817 comment=$2
2818 version=$3
2819 libs=$4
2820 requires=$5
2821 cat <<EOF > $name/$name.pc
2822 prefix=$prefix
2823 exec_prefix=\${prefix}
2824 libdir=$libdir
2825 includedir=$incdir
2826
2827 Name: $name
2828 Description: $comment
2829 Version: $version
2830 Requires: $(enabled shared || echo $requires)
2831 Requires.private: $(enabled shared && echo $requires)
2832 Conflicts:
2833 Libs: -L\${libdir} -l${shortname} $(enabled shared || echo $libs)
2834 Libs.private: $(enabled shared && echo $libs)
2835 Cflags: -I\${includedir}
2836 EOF
2837 cat <<EOF > $name/$name-uninstalled.pc
2838 prefix=
2839 exec_prefix=
2840 libdir=\${pcfiledir}
2841 includedir=${source_path}
2842
2843 Name: $name
2844 Description: $comment
2845 Version: $version
2846 Requires: $requires
2847 Conflicts:
2848 Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
2849 Cflags: -I\${includedir}
2850 EOF
2851 }
2852
2853 pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
2854 pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
2855 pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
2856 pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "libavformat = $LIBAVFORMAT_VERSION"
2857 enabled avfilter &&
2858     pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
2859 enabled postproc &&
2860     pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
2861 pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"