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