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