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