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