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