configure: set HOSTCC to native compiler
[ffmpeg.git] / configure
1 #!/bin/sh
2 #
3 # FFmpeg configure script
4 #
5 # Copyright (c) 2000-2002 Fabrice Bellard
6 # Copyright (c) 2005-2008 Diego Biurrun
7 # Copyright (c) 2005-2008 Mans Rullgard
8 #
9
10 # Prevent locale nonsense from breaking basic text processing.
11 LC_ALL=C
12 export LC_ALL
13
14 # make sure we are running under a compatible shell
15 # try to make this part work with most shells
16
17 try_exec(){
18     echo "Trying shell $1"
19     type "$1" > /dev/null 2>&1 && exec "$@"
20 }
21
22 unset foo
23 (: ${foo%%bar}) 2> /dev/null
24 E1="$?"
25
26 (: ${foo?}) 2> /dev/null
27 E2="$?"
28
29 if test "$E1" != 0 || test "$E2" = 0; then
30     echo "Broken shell detected.  Trying alternatives."
31     export FF_CONF_EXEC
32     if test "0$FF_CONF_EXEC" -lt 1; then
33         FF_CONF_EXEC=1
34         try_exec bash "$0" "$@"
35     fi
36     if test "0$FF_CONF_EXEC" -lt 2; then
37         FF_CONF_EXEC=2
38         try_exec ksh "$0" "$@"
39     fi
40     if test "0$FF_CONF_EXEC" -lt 3; then
41         FF_CONF_EXEC=3
42         try_exec /usr/xpg4/bin/sh "$0" "$@"
43     fi
44     echo "No compatible shell script interpreter found."
45     echo "This configure script requires a POSIX-compatible shell"
46     echo "such as bash or ksh."
47     echo "THIS IS NOT A BUG IN FFMPEG, DO NOT REPORT IT AS SUCH."
48     echo "Instead, install a working POSIX-compatible shell."
49     echo "Disabling this configure test will create a broken FFmpeg."
50     if test "$BASH_VERSION" = '2.04.0(1)-release'; then
51         echo "This bash version ($BASH_VERSION) is broken on your platform."
52         echo "Upgrade to a later version if available."
53     fi
54     exit 1
55 fi
56
57 show_help(){
58   echo "Usage: configure [options]"
59   echo "Options: [defaults in brackets after descriptions]"
60   echo
61   echo "Standard options:"
62   echo "  --help                   print this message"
63   echo "  --logfile=FILE           log tests and output to FILE [config.err]"
64   echo "  --disable-logging        do not log configure debug information"
65   echo "  --prefix=PREFIX          install in PREFIX [$prefix]"
66   echo "  --bindir=DIR             install binaries in DIR [PREFIX/bin]"
67   echo "  --libdir=DIR             install libs in DIR [PREFIX/lib]"
68   echo "  --shlibdir=DIR           install shared libs in DIR [PREFIX/lib]"
69   echo "  --incdir=DIR             install includes in DIR [PREFIX/include]"
70   echo "  --mandir=DIR             install man page in DIR [PREFIX/share/man]"
71   echo "  --enable-static          build static libraries [yes]"
72   echo "  --disable-static         do not build static libraries [no]"
73   echo "  --enable-shared          build shared libraries [no]"
74   echo "  --disable-shared         do not build shared libraries [yes]"
75   echo "  --enable-gpl             allow use of GPL code, the resulting libs"
76   echo "                           and binaries will be under GPL [no]"
77   echo "  --enable-nonfree         allow use of nonfree code, the resulting libs"
78   echo "                           and binaries will be unredistributable [no]"
79   echo "  --enable-postproc        enable GPLed postprocessing support [no]"
80   echo "  --enable-swscale         enable GPLed software scaler support [no]"
81   echo "  --enable-avfilter        video filter support (replaces vhook) [no]"
82   echo "  --enable-avfilter-lavf   video filters dependent on avformat [no]"
83   echo "  --disable-vhook          disable video hooking support"
84   echo "  --enable-beosthreads     use BeOS threads [no]"
85   echo "  --enable-os2threads      use OS/2 threads [no]"
86   echo "  --enable-pthreads        use pthreads [no]"
87   echo "  --enable-w32threads      use Win32 threads [no]"
88   echo "  --enable-x11grab         enable X11 grabbing [no]"
89   echo
90   echo "External library support:"
91   echo "  --enable-mlib            enable Sun medialib [no]"
92   echo "  --enable-avisynth        enable reading of AVISynth script files [no]"
93   echo "  --enable-bzlib           enable bzlib [no]"
94   echo "  --enable-libamr-nb       enable libamr-nb floating point audio codec"
95   echo "  --enable-libamr-wb       enable libamr-wb floating point audio codec"
96   echo "  --enable-libdc1394       enable IIDC-1394 grabbing using libdc1394"
97   echo "                           and libraw1394 [no]"
98   echo "  --enable-libdirac        enable Dirac support via libdirac [no]"
99   echo "  --enable-libfaac         enable FAAC support via libfaac [no]"
100   echo "  --enable-libfaad         enable FAAD support via libfaad [no]"
101   echo "  --enable-libfaadbin      open libfaad.so.0 at runtime [no]"
102   echo "  --enable-libgsm          enable GSM support via libgsm [no]"
103   echo "  --enable-libmp3lame      enable MP3 encoding via libmp3lame [no]"
104   echo "  --enable-libnut          enable NUT (de)muxing via libnut,"
105   echo "                           native (de)muxer exists [no]"
106   echo "  --enable-libschroedinger enable Dirac support via libschroedinger [no]"
107   echo "  --enable-libspeex        enable Speex decoding via libspeex [no]"
108   echo "  --enable-libtheora       enable Theora encoding via libtheora [no]"
109   echo "  --enable-libvorbis       enable Vorbis encoding via libvorbis,"
110   echo "                           native implementation exists [no]"
111   echo "  --enable-libx264         enable H.264 encoding via x264 [no]"
112   echo "  --enable-libxvid         enable Xvid encoding via xvidcore,"
113   echo "                           native MPEG-4/Xvid encoder exists [no]"
114   echo "  --enable-zlib            enable zlib [no]"
115   echo ""
116   echo "Advanced options (experts only):"
117   echo "  --source-path=PATH       path to source code [$source_path]"
118   echo "  --cross-prefix=PREFIX    use PREFIX for compilation tools [$cross_prefix]"
119   echo "  --enable-cross-compile   assume a cross-compiler is used"
120   echo "  --target-os=OS           compiler targets OS [$target_os]"
121   echo "  --cc=CC                  use C compiler CC [$cc]"
122   echo "  --host-cc=HOSTCC         use host C compiler HOSTCC"
123   echo "  --host-cflags=HCFLAGS    use HCFLAGS when compiling for host"
124   echo "  --host-ldflags=HLDFLAGS  use HLDFLAGS when linking for host"
125   echo "  --host-libs=HLIBS        use libs HLIBS when linking for host"
126   echo "  --extra-cflags=ECFLAGS   add ECFLAGS to CFLAGS [$CFLAGS]"
127   echo "  --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]"
128   echo "  --extra-libs=ELIBS       add ELIBS [$ELIBS]"
129   echo "  --extra-version=STRING   version string suffix []"
130   echo "  --build-suffix=SUFFIX    library name suffix []"
131   echo "  --arch=ARCH              select architecture [$arch]"
132   echo "  --cpu=CPU                select the minimum required CPU (affects"
133   echo "                           instruction selection, may crash on older CPUs)"
134   echo "  --enable-powerpc-perf    enable performance report on PPC"
135   echo "                           (requires enabling PMC)"
136   echo "  --disable-altivec        disable AltiVec optimizations"
137   echo "  --disable-mmx            disable MMX optimizations"
138   echo "  --disable-mmx2           disable MMX2 optimizations"
139   echo "  --disable-ssse3          disable SSSE3 optimizations"
140   echo "  --disable-armv5te        disable armv5te optimizations"
141   echo "  --disable-armv6          disable armv6 optimizations"
142   echo "  --disable-armvfp         disable ARM VFP optimizations"
143   echo "  --disable-iwmmxt         disable iwmmxt optimizations"
144   echo "  --disable-mmi            disable MMI optimizations"
145   echo "  --disable-neon           disable neon optimizations"
146   echo "  --disable-vis            disable VIS optimizations"
147   echo "  --disable-network        disable network support [no]"
148   echo "  --disable-ipv6           disable IPv6 support [no]"
149   echo "  --disable-mpegaudio-hp   faster (but less accurate)"
150   echo "                           MPEG audio decoding [no]"
151   echo "  --disable-fft            disable FFT code"
152   echo "  --disable-golomb         disable Golomb code"
153   echo "  --disable-mdct           disable MDCT code"
154   echo "  --enable-gray            enable full grayscale support (slower color)"
155   echo "  --disable-ffmpeg         disable ffmpeg build"
156   echo "  --disable-ffplay         disable ffplay build"
157   echo "  --disable-ffserver       disable ffserver build"
158   echo "  --enable-small           optimize for size instead of speed"
159   echo "  --enable-hardcoded-tables use hardcoded tables instead of runtime generation"
160   echo "  --enable-memalign-hack   emulate memalign, interferes with memory debuggers"
161   echo "  --enable-beos-netserver  enable BeOS netserver"
162   echo "  --disable-encoder=NAME   disable encoder NAME"
163   echo "  --enable-encoder=NAME    enable encoder NAME"
164   echo "  --disable-encoders       disable all encoders"
165   echo "  --disable-decoder=NAME   disable decoder NAME"
166   echo "  --enable-decoder=NAME    enable decoder NAME"
167   echo "  --disable-decoders       disable all decoders"
168   echo "  --disable-muxer=NAME     disable muxer NAME"
169   echo "  --enable-muxer=NAME      enable muxer NAME"
170   echo "  --disable-muxers         disable all muxers"
171   echo "  --disable-demuxer=NAME   disable demuxer NAME"
172   echo "  --enable-demuxer=NAME    enable demuxer NAME"
173   echo "  --disable-demuxers       disable all demuxers"
174   echo "  --enable-parser=NAME     enable parser NAME"
175   echo "  --disable-parser=NAME    disable parser NAME"
176   echo "  --disable-parsers        disable all parsers"
177   echo "  --enable-bsf=NAME        enable bitstream filter NAME"
178   echo "  --disable-bsf=NAME       disable bitstream filter NAME"
179   echo "  --disable-bsfs           disable all bitstream filters"
180   echo "  --enable-protocol=NAME   enable protocol NAME"
181   echo "  --disable-protocol=NAME  disable protocol NAME"
182   echo "  --disable-protocols      disable all protocols"
183   echo "  --disable-indevs         disable input devices"
184   echo "  --disable-outdevs        disable output devices"
185   echo "  --disable-devices        disable all devices"
186   echo "  --enable-filter=NAME     enable filter NAME"
187   echo "  --disable-filter=NAME    disable filter NAME"
188   echo "  --disable-filters        disable all filters"
189   echo "  --list-decoders          show all available decoders"
190   echo "  --list-encoders          show all available encoders"
191   echo "  --list-muxers            show all available muxers"
192   echo "  --list-demuxers          show all available demuxers"
193   echo "  --list-parsers           show all available parsers"
194   echo "  --list-protocols         show all available protocols"
195   echo "  --list-bsfs              show all available bitstream filters"
196   echo "  --list-indevs            show all available input devices"
197   echo "  --list-outdevs           show all available output devices"
198   echo "  --list-filters           show all available filters"
199   echo
200   echo "Developer options (useful when working on FFmpeg itself):"
201   echo "  --disable-debug          disable debugging symbols"
202   echo "  --enable-debug=LEVEL     set the debug level [$debuglevel]"
203   echo "  --enable-gprof           enable profiling with gprof [$gprof]"
204   echo "  --disable-optimizations  disable compiler optimizations"
205   echo "  --enable-extra-warnings  enable more compiler warnings"
206   echo "  --disable-stripping      disable stripping of executables and shared libraries"
207   echo ""
208   echo "NOTE: Object files are built at the place where configure is launched."
209   exit 0
210 }
211
212 log(){
213     echo "$@" >> $logfile
214 }
215
216 log_file(){
217     log BEGIN $1
218     pr -n -t $1 >> $logfile
219     log END $1
220 }
221
222 echolog(){
223     log "$@"
224     echo "$@"
225 }
226
227 die(){
228     echolog "$@"
229     cat <<EOF
230 If you think configure made a mistake, make sure you are using the latest
231 version from SVN.  If the latest version fails, report the problem to the
232 ffmpeg-user@mplayerhq.hu mailing list or IRC #ffmpeg on irc.freenode.net.
233 EOF
234     if disabled logging; then
235         cat <<EOF
236 Rerun configure with logging enabled (do not use --disable-logging), and
237 include the log this produces with your report.
238 EOF
239     else
240 cat <<EOF
241 Include the log file "$logfile" produced by configure as this will help
242 solving the problem.
243 EOF
244     fi
245     rm -f $TMPC $TMPE $TMPH $TMPO $TMPS $TMPSH
246     exit 1
247 }
248
249 # Avoid locale weirdness, besides we really just want to translate ASCII.
250 toupper(){
251     echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
252 }
253
254 tolower(){
255     echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
256 }
257
258 set_all(){
259     value=$1
260     shift
261     for var in $*; do
262         eval $var=$value
263     done
264 }
265
266 set_weak(){
267     value=$1
268     shift
269     for var; do
270         eval : \${$var:=$value}
271     done
272 }
273
274 pushvar(){
275     for var in $*; do
276         eval level=\${${var}_level:=0}
277         eval ${var}_${level}="\$$var"
278         eval ${var}_level=$(($level+1))
279     done
280 }
281
282 popvar(){
283     for var in $*; do
284         eval level=\${${var}_level:-0}
285         test $level = 0 && continue
286         eval level=$(($level-1))
287         eval $var="\${${var}_${level}}"
288         eval ${var}_level=$level
289         eval unset ${var}_${level}
290     done
291 }
292
293 enable(){
294     set_all yes $*
295 }
296
297 disable(){
298     set_all no $*
299 }
300
301 enable_weak(){
302     set_weak yes $*
303 }
304
305 disable_weak(){
306     set_weak no $*
307 }
308
309 do_enable_deep(){
310     for var; do
311         enabled $var && continue
312         eval sel="\$${var}_select"
313         eval sgs="\$${var}_suggest"
314         pushvar var sgs
315         enable_deep $sel
316         popvar sgs
317         enable_deep_weak $sgs
318         popvar var
319     done
320 }
321
322 enable_deep(){
323     do_enable_deep $*
324     enable $*
325 }
326
327 enable_deep_weak(){
328     do_enable_deep $*
329     enable_weak $*
330 }
331
332 enabled(){
333     test "${1#!}" = "$1" && op== || op=!=
334     eval test "x\$${1#!}" $op "xyes"
335 }
336
337 disabled(){
338     test "${1#!}" = "$1" && op== || op=!=
339     eval test "x\$${1#!}" $op "xno"
340 }
341
342 enabled_all(){
343     for opt; do
344         enabled $opt || return 1
345     done
346 }
347
348 disabled_all(){
349     for opt; do
350         disabled $opt || return 1
351     done
352 }
353
354 enabled_any(){
355     for opt; do
356         enabled $opt && return 0
357     done
358 }
359
360 disabled_any(){
361     for opt; do
362         disabled $opt && return 0
363     done
364     return 1
365 }
366
367 set_default(){
368     for opt; do
369         eval : \${$opt:=\$${opt}_default}
370     done
371 }
372
373 is_in(){
374     value=$1
375     shift
376     for var in $*; do
377         [ $var = $value ] && return 0
378     done
379     return 1
380 }
381
382 check_deps(){
383     for cfg; do
384         cfg="${cfg#!}"
385         enabled ${cfg}_checking && die "Circular dependency for $cfg."
386         disabled ${cfg}_checking && continue
387         enable ${cfg}_checking
388
389         eval dep_all="\$${cfg}_deps"
390         eval dep_any="\$${cfg}_deps_any"
391         eval dep_sel="\$${cfg}_select"
392         eval dep_sgs="\$${cfg}_suggest"
393
394         pushvar cfg dep_all dep_any dep_sel dep_sgs
395         check_deps $dep_all $dep_any $dep_sel $dep_sgs
396         popvar cfg dep_all dep_any dep_sel dep_sgs
397
398         enabled_all  $dep_all || disable $cfg
399         enabled_any  $dep_any || disable $cfg
400         disabled_any $dep_sel && disable $cfg
401
402         if enabled $cfg; then
403             eval dep_extralibs="\$${cfg}_extralibs"
404             test -n "$dep_extralibs" && add_extralibs $dep_extralibs
405             enable_deep $dep_sel
406             enable_deep_weak $dep_sgs
407         fi
408
409         disable ${cfg}_checking
410     done
411 }
412
413 print_config(){
414     pfx=$1
415     header=$2
416     makefile=$3
417     shift 3
418     for cfg; do
419         ucname="`toupper $cfg`"
420         if enabled $cfg; then
421             echo "#define ${pfx}${ucname} 1" >> $header
422             echo "#define ENABLE_${ucname} 1" >> $header
423             echo "${pfx}${ucname}=yes" >> $makefile
424         else
425             echo "#define ENABLE_${ucname} 0" >> $header
426         fi
427     done
428 }
429
430 flags_saved(){
431     (: ${SAVE_CFLAGS?}) 2> /dev/null
432 }
433
434 save_flags(){
435     flags_saved && return
436     SAVE_CFLAGS="$CFLAGS"
437     SAVE_LDFLAGS="$LDFLAGS"
438     SAVE_extralibs="$extralibs"
439 }
440
441 restore_flags(){
442     flags_saved || return
443     CFLAGS="$SAVE_CFLAGS"
444     LDFLAGS="$SAVE_LDFLAGS"
445     extralibs="$SAVE_extralibs"
446     unset SAVE_CFLAGS
447     unset SAVE_LDFLAGS
448     unset SAVE_extralibs
449 }
450
451 temp_cflags(){
452     save_flags
453     CFLAGS="$CFLAGS $*"
454 }
455
456 temp_ldflags(){
457     save_flags
458     LDFLAGS="$LDFLAGS $*"
459 }
460
461 temp_extralibs(){
462     save_flags
463     extralibs="$extralibs $*"
464 }
465
466 append(){
467     var=$1
468     shift
469     flags_saved && eval "SAVE_$var=\"\$SAVE_$var $*\""
470     eval "$var=\"\$$var $*\""
471 }
472
473 add_cflags(){
474     append CFLAGS "$@"
475 }
476
477 add_ldflags(){
478     append LDFLAGS "$@"
479 }
480
481 add_extralibs(){
482     append extralibs "$@"
483 }
484
485 check_cmd(){
486     log "$@"
487     "$@" >> $logfile 2>&1
488 }
489
490 check_cc(){
491     log check_cc "$@"
492     cat > $TMPC
493     log_file $TMPC
494     check_cmd $cc $CFLAGS "$@" -c -o $TMPO $TMPC
495 }
496
497 check_cpp(){
498     log check_cpp "$@"
499     cat > $TMPC
500     log_file $TMPC
501     check_cmd $cc $CFLAGS "$@" -E -o $TMPO $TMPC
502 }
503
504 check_asm(){
505     log check_asm "$@"
506     name="$1"
507     asm="$2"
508     shift 2
509     check_cc "$@" <<EOF && enable $name || disable $name
510 int foo(void){ __asm__ volatile($asm); }
511 EOF
512 }
513
514 check_yasm(){
515     log check_yasm "$@"
516     echo "$1" > $TMPS
517     log_file $TMPS
518     shift 1
519     check_cmd $yasmexe $YASMFLAGS "$@" -o $TMPO $TMPS
520 }
521
522 check_ld(){
523     log check_ld "$@"
524     check_cc || return
525     flags=''
526     libs=''
527     for f; do
528         test "${f}" = "${f#-l}" && flags="$flags $f" || libs="$libs $f"
529     done
530     check_cmd $cc $LDFLAGS $flags -o $TMPE $TMPO $extralibs $libs
531 }
532
533 check_cflags(){
534     log check_cflags "$@"
535     check_cc "$@" <<EOF && add_cflags "$@"
536 int x;
537 EOF
538 }
539
540 check_ldflags(){
541     log check_ldflags "$@"
542     check_ld "$@" <<EOF && add_ldflags "$@"
543 int main(void){ return 0; }
544 EOF
545 }
546
547 check_header(){
548     log check_header "$@"
549     header=$1
550     shift
551     var=`echo $header | sed 's/[^A-Za-z0-9_]/_/g'`
552     disable $var
553     check_cpp "$@" <<EOF && enable $var
554 #include <$header>
555 int x;
556 EOF
557 }
558
559 check_func(){
560     log check_func "$@"
561     func=$1
562     shift
563     disable $func
564     check_ld "$@" <<EOF && enable $func
565 extern int $func();
566 int main(void){ $func(); }
567 EOF
568 }
569
570 check_func_headers(){
571     log check_func_headers "$@"
572     headers=$1
573     func=$2
574     shift 2
575     disable $func
576     incs=""
577     for hdr in $headers; do
578         incs="$incs
579 #include <$hdr>"
580     done
581     check_ld "$@" <<EOF && enable $func
582 $incs
583 int main(int argc, char **argv){
584     (void) $func;
585     return 0;
586 }
587 EOF
588 }
589
590 check_cpp_condition(){
591     log check_cpp_condition "$@"
592     header=$1
593     condition=$2
594     check_cpp <<EOF
595 #include <$header>
596 #if !($condition)
597 #error "unsatisfied condition: $condition"
598 #endif
599 EOF
600 }
601
602 check_lib(){
603     log check_lib "$@"
604     header="$1"
605     func="$2"
606     shift 2
607     temp_extralibs "$@"
608     check_header $header && check_func $func && add_extralibs "$@"
609     err=$?
610     restore_flags
611     return $err
612 }
613
614 check_lib2(){
615     log check_lib2 "$@"
616     headers="$1"
617     func="$2"
618     shift 2
619     temp_extralibs "$@"
620     check_func_headers "$headers" $func && add_extralibs "$@"
621     err=$?
622     restore_flags
623     return $err
624 }
625
626 check_exec(){
627     check_ld "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
628 }
629
630 check_exec_crash(){
631     code=`cat`
632
633     # exit() is not async signal safe.  _Exit (C99) and _exit (POSIX)
634     # are safe but may not be available everywhere.  Thus we use
635     # raise(SIGTERM) instead.  The check is run in a subshell so we
636     # can redirect the "Terminated" message from the shell.  SIGBUS
637     # is not defined by standard C so it is used conditionally.
638
639     (check_exec "$@") >> $logfile 2>&1 <<EOF
640 #include <signal.h>
641 static void sighandler(int sig){
642     raise(SIGTERM);
643 }
644 int main(void){
645     signal(SIGILL, sighandler);
646     signal(SIGFPE, sighandler);
647     signal(SIGSEGV, sighandler);
648 #ifdef SIGBUS
649     signal(SIGBUS, sighandler);
650 #endif
651     { $code }
652 }
653 EOF
654 }
655
656 check_type(){
657     log check_type "$@"
658     headers=$1
659     type=$2
660     shift 2
661     disable $type
662     incs=""
663     for hdr in $headers; do
664         incs="$incs
665 #include <$hdr>"
666     done
667     check_cc "$@" <<EOF && enable $type
668 $incs
669 $type v;
670 EOF
671 }
672
673 require(){
674     name="$1"
675     header="$2"
676     func="$3"
677     shift 3
678     check_lib $header $func "$@" || die "ERROR: $name not found"
679 }
680
681 require2(){
682     name="$1"
683     headers="$2"
684     func="$3"
685     shift 3
686     check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
687 }
688
689 check_foo_config(){
690     cfg=$1
691     pkg=$2
692     header=$3
693     func=$4
694     shift 4
695     disable $cfg
696     check_cmd ${pkg}-config --version
697     err=$?
698     if test "$err" = 0; then
699         temp_cflags `${pkg}-config --cflags`
700         temp_extralibs `${pkg}-config --libs`
701         check_lib "$@" $header $func && enable $cfg
702     fi
703     return $err
704 }
705
706 apply(){
707     file=$1
708     shift
709     "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
710 }
711
712 # CONFIG_LIST contains configurable options, while HAVE_LIST is for
713 # system-dependent things.
714
715 COMPONENT_LIST="
716     bsfs
717     decoders
718     demuxers
719     encoders
720     filters
721     indevs
722     muxers
723     outdevs
724     parsers
725     protocols
726 "
727
728 CONFIG_LIST="
729     $COMPONENT_LIST
730     avfilter
731     avfilter_lavf
732     avisynth
733     beos_netserver
734     bzlib
735     ffmpeg
736     ffplay
737     ffserver
738     fft
739     golomb
740     gpl
741     gprof
742     gray
743     hardcoded_tables
744     ipv6
745     libamr_nb
746     libamr_wb
747     libdc1394
748     libdirac
749     libfaac
750     libfaad
751     libfaadbin
752     libgsm
753     libmp3lame
754     libnut
755     libschroedinger
756     libspeex
757     libtheora
758     libvorbis
759     libx264
760     libxvid
761     mdct
762     memalign_hack
763     mlib
764     mpegaudio_hp
765     network
766     nonfree
767     postproc
768     powerpc_perf
769     small
770     swscale
771     vhook
772     x11grab
773     zlib
774 "
775
776 THREADS_LIST='
777     beosthreads
778     os2threads
779     pthreads
780     w32threads
781 '
782
783 ARCH_LIST='
784     alpha
785     armv4l
786     bfin
787     ia64
788     m68k
789     mips
790     parisc
791     powerpc
792     s390
793     sh4
794     sparc
795     sparc64
796     x86
797     x86_32
798     x86_64
799 '
800
801 ARCH_EXT_LIST='
802     altivec
803     armv5te
804     armv6
805     armvfp
806     iwmmxt
807     mmi
808     mmx
809     mmx2
810     neon
811     ssse3
812     vis
813 '
814
815 HAVE_LIST="
816     $ARCH_EXT_LIST
817     $THREADS_LIST
818     altivec_h
819     arpa_inet_h
820     bswap
821     closesocket
822     cmov
823     conio_h
824     dcbzl
825     dev_bktr_ioctl_bt848_h
826     dev_bktr_ioctl_meteor_h
827     dev_ic_bt8xx_h
828     dev_video_meteor_ioctl_meteor_h
829     dev_video_bktr_ioctl_bt848_h
830     dlfcn_h
831     dlopen
832     dos_paths
833     ebp_available
834     ebx_available
835     fast_64bit
836     fast_cmov
837     fast_unaligned
838     fork
839     freetype2
840     gethrtime
841     GetProcessTimes
842     getrusage
843     imlib2
844     inet_aton
845     inline_asm
846     libdc1394_1
847     libdc1394_2
848     llrint
849     lrint
850     lrintf
851     machine_ioctl_bt848_h
852     machine_ioctl_meteor_h
853     malloc_h
854     memalign
855     mkstemp
856     pld
857     ppc64
858     round
859     roundf
860     sdl
861     sdl_video_size
862     socklen_t
863     soundcard_h
864     poll_h
865     sys_mman_h
866     sys_resource_h
867     sys_select_h
868     sys_soundcard_h
869     sys_videoio_h
870     termios_h
871     threads
872     winsock2_h
873     yasm
874 "
875
876 # options emitted with CONFIG_ prefix but not available on command line
877 CONFIG_EXTRA="
878     fft_mmx
879     oldscaler
880 "
881
882 CMDLINE_SELECT="
883     $ARCH_EXT_LIST
884     $CONFIG_LIST
885     $THREADS_LIST
886     cross_compile
887     debug
888     extra_warnings
889     logging
890     optimizations
891     shared
892     static
893     stripping
894 "
895
896 PATHS_LIST='
897     bindir
898     incdir
899     libdir
900     mandir
901     prefix
902     shlibdir
903 '
904
905 CMDLINE_SET="
906     $PATHS_LIST
907     arch
908     build_suffix
909     cc
910     cpu
911     cross_prefix
912     extra_version
913     host_cc
914     host_cflags
915     host_ldflags
916     host_libs
917     logfile
918     source_path
919     target_os
920 "
921
922 # code dependency declarations
923
924 # architecture extensions
925 altivec_deps="powerpc"
926 armv5te_deps="armv4l"
927 armv6_deps="armv4l"
928 armvfp_deps="armv4l"
929 iwmmxt_deps="armv4l"
930 mmi_deps="mips"
931 mmx_deps="x86"
932 mmx2_deps="x86 mmx"
933 neon_deps="armv4l"
934 ssse3_deps="x86"
935 vis_deps="sparc"
936
937 # common features
938 fft_suggest="fft_mmx"
939 fft_mmx_deps="mmx yasm"
940 oldscaler_deps="!swscale"
941
942 # decoders / encoders
943 aac_decoder_select="fft mdct"
944 ac3_decoder_deps="gpl"
945 ac3_decoder_select="fft mdct"
946 atrac3_decoder_select="fft mdct"
947 cavs_decoder_select="golomb"
948 cook_decoder_select="fft mdct"
949 cscd_decoder_suggest="zlib"
950 dca_decoder_select="fft mdct"
951 dxa_decoder_select="zlib"
952 eac3_decoder_deps="gpl"
953 eac3_decoder_select="fft mdct"
954 ffv1_decoder_select="golomb"
955 flac_decoder_select="golomb"
956 flac_encoder_select="golomb"
957 flashsv_decoder_select="zlib"
958 flashsv_encoder_select="zlib"
959 h264_decoder_select="golomb"
960 imc_decoder_select="fft mdct"
961 jpegls_decoder_select="golomb"
962 jpegls_encoder_select="golomb"
963 loco_decoder_select="golomb"
964 mpeg_xvmc_decoder_deps="xvmc"
965 nellymoser_decoder_select="fft mdct"
966 nellymoser_encoder_select="fft mdct"
967 png_decoder_select="zlib"
968 png_encoder_select="zlib"
969 qdm2_decoder_select="fft mdct"
970 shorten_decoder_select="golomb"
971 sonic_decoder_select="golomb"
972 sonic_encoder_select="golomb"
973 sonic_ls_encoder_select="golomb"
974 svq3_decoder_select="golomb"
975 svq3_decoder_suggest="zlib"
976 tiff_decoder_suggest="zlib"
977 tiff_encoder_suggest="zlib"
978 tscc_decoder_select="zlib"
979 vorbis_decoder_select="fft mdct"
980 vorbis_encoder_select="fft mdct"
981 wmav1_decoder_select="fft mdct"
982 wmav1_encoder_select="fft mdct"
983 wmav2_decoder_select="fft mdct"
984 wmav2_encoder_select="fft mdct"
985 zlib_decoder_select="zlib"
986 zlib_encoder_select="zlib"
987 zmbv_decoder_select="zlib"
988 zmbv_encoder_select="zlib"
989
990 # external libraries
991 libamr_nb_decoder_deps="libamr_nb"
992 libamr_nb_encoder_deps="libamr_nb"
993 libamr_wb_decoder_deps="libamr_wb"
994 libamr_wb_encoder_deps="libamr_wb"
995 libdirac_decoder_deps="libdirac !libschroedinger"
996 libdirac_encoder_deps="libdirac"
997 libfaac_encoder_deps="libfaac"
998 libfaad_decoder_deps="libfaad"
999 libfaadbin_decoder_extralibs='$ldl'
1000 libgsm_decoder_deps="libgsm"
1001 libgsm_encoder_deps="libgsm"
1002 libgsm_ms_decoder_deps="libgsm"
1003 libgsm_ms_encoder_deps="libgsm"
1004 libmp3lame_encoder_deps="libmp3lame"
1005 libschroedinger_decoder_deps="libschroedinger"
1006 libschroedinger_encoder_deps="libschroedinger"
1007 libspeex_decoder_deps="libspeex"
1008 libtheora_encoder_deps="libtheora"
1009 libvorbis_encoder_deps="libvorbis"
1010 libx264_encoder_deps="libx264"
1011 libxvid_encoder_deps="libxvid"
1012 mpeg4aac_decoder_deps="libfaad"
1013
1014 # demuxers / muxers
1015 ac3_demuxer_deps="ac3_parser"
1016 audio_beos_demuxer_deps="audio_beos"
1017 audio_beos_demuxer_extralibs="-lmedia -lbe"
1018 audio_beos_muxer_deps="audio_beos"
1019 audio_beos_muxer_extralibs="-lmedia -lbe"
1020 avisynth_demuxer_deps="avisynth"
1021 bktr_demuxer_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
1022 dirac_demuxer_deps="dirac_parser"
1023 dv1394_demuxer_deps="dv1394 dv_demuxer"
1024 libdc1394_demuxer_deps="libdc1394"
1025 libnut_demuxer_deps="libnut"
1026 libnut_muxer_deps="libnut"
1027 matroska_demuxer_suggest="zlib bzlib"
1028 mov_demuxer_suggest="zlib"
1029 mp3_demuxer_deps="mpegaudio_parser"
1030 oss_demuxer_deps_any="soundcard_h sys_soundcard_h"
1031 oss_muxer_deps_any="soundcard_h sys_soundcard_h"
1032 redir_demuxer_deps="network"
1033 rtp_muxer_deps="network rtp_protocol"
1034 rtsp_demuxer_deps="sdp_demuxer"
1035 sdp_demuxer_deps="rtp_protocol mpegts_demuxer"
1036 v4l_demuxer_deps="linux_videodev_h"
1037 v4l2_demuxer_deps_any="linux_videodev2_h sys_videoio_h"
1038 vfwcap_demuxer_deps="capCreateCaptureWindow"
1039 vfwcap_demuxer_extralibs="-lvfw32"
1040 x11_grab_device_demuxer_deps="x11grab XShmCreateImage"
1041 x11_grab_device_demuxer_extralibs="-lX11 -lXext"
1042
1043 # protocols
1044 http_protocol_deps="network"
1045 rtp_protocol_deps="udp_protocol"
1046 tcp_protocol_deps="network"
1047 udp_protocol_deps="network"
1048
1049 # filters
1050 movie_filter_deps="avfilter_lavf"
1051
1052 # programs
1053 ffplay_deps="sdl"
1054 ffserver_deps="ffm_muxer rtp_protocol rtsp_demuxer"
1055 ffserver_extralibs='$ldl'
1056 vhook_extralibs='$ldl'
1057
1058
1059 # default parameters
1060
1061 logfile="config.err"
1062
1063 # installation paths
1064 prefix_default="/usr/local"
1065 bindir_default='${prefix}/bin'
1066 incdir_default='${prefix}/include'
1067 libdir_default='${prefix}/lib'
1068 mandir_default='${prefix}/share/man'
1069 shlibdir_default="$libdir_default"
1070
1071 # toolchain
1072 cc_default="gcc"
1073 host_cc_default="gcc"
1074 yasmexe="yasm"
1075 ar="ar"
1076 nm="nm"
1077 ranlib="ranlib"
1078 strip="strip"
1079 asmalign_pot="unknown"
1080 ln_s="ln -sf"
1081 objformat="elf"
1082
1083 # machine
1084 arch=`uname -m`
1085 cpu="generic"
1086
1087 # OS
1088 target_os=$(tolower $(uname -s))
1089
1090 # configurable options
1091 enable debug
1092 enable ffmpeg
1093 enable ffplay
1094 enable ffserver
1095 enable ipv6
1096 enable mpegaudio_hp
1097 enable network
1098 enable oldscaler
1099 enable optimizations
1100 enable protocols
1101 enable static
1102 enable stripping
1103 vhook="default"
1104
1105 # build settings
1106 add_cflags -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112
1107 SHFLAGS='-shared -Wl,-soname,$$(@F)'
1108 VHOOKSHFLAGS='$(SHFLAGS)'
1109 FFSERVERLDFLAGS=-Wl,-E
1110 LIBPREF="lib"
1111 LIBSUF=".a"
1112 FULLNAME='$(NAME)$(BUILDSUF)'
1113 LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
1114 SLIBPREF="lib"
1115 SLIBSUF=".so"
1116 SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
1117 SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
1118 SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
1119 LIB_INSTALL_EXTRA_CMD='$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
1120
1121 host_cflags='-O3 -g -Wall'
1122 host_libs='-lm'
1123
1124 # gcc stupidly only outputs the basename of targets with -MM, but we need the
1125 # full relative path for objects in subdirectories for non-recursive Make.
1126 DEPEND_CMD='$(CC) $(CFLAGS) -MM -MG $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o," -e "s,\\([[:space:]]\\)\\(version\\.h\\),\\1\$$(BUILD_ROOT_REL)/\\2,"'
1127
1128 # find source path
1129 source_path="`dirname \"$0\"`"
1130 enable source_path_used
1131 if test -z "$source_path" -o "$source_path" = "." ; then
1132     source_path="`pwd`"
1133     disable source_path_used
1134 else
1135     source_path="`cd \"$source_path\"; pwd`"
1136     echo "$source_path" | grep -q '[[:blank:]]' &&
1137         die "Out of tree builds are impossible with whitespace in source path."
1138 fi
1139
1140 FFMPEG_CONFIGURATION="$@"
1141
1142 find_things(){
1143     thing=$1
1144     pattern=$2
1145     file=$source_path/$3
1146     sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
1147 }
1148
1149 ENCODER_LIST=$(find_things  encoder  ENC      libavcodec/allcodecs.c)
1150 DECODER_LIST=$(find_things  decoder  DEC      libavcodec/allcodecs.c)
1151 PARSER_LIST=$(find_things   parser   PARSER   libavcodec/allcodecs.c)
1152 BSF_LIST=$(find_things      bsf      BSF      libavcodec/allcodecs.c)
1153 MUXER_LIST=$(find_things    muxer    _MUX     libavformat/allformats.c)
1154 DEMUXER_LIST=$(find_things  demuxer  DEMUX    libavformat/allformats.c)
1155 OUTDEV_LIST=$(find_things   muxer    _MUX     libavdevice/alldevices.c)
1156 INDEV_LIST=$(find_things    demuxer  DEMUX    libavdevice/alldevices.c)
1157 PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
1158 FILTER_LIST=$(find_things   filter   FILTER   libavfilter/allfilters.c)
1159
1160 enable $ARCH_EXT_LIST \
1161        $DECODER_LIST \
1162        $ENCODER_LIST \
1163        $PARSER_LIST \
1164        $BSF_LIST \
1165        $DEMUXER_LIST \
1166        $MUXER_LIST \
1167        $FILTER_LIST \
1168        $PROTOCOL_LIST \
1169        $INDEV_LIST \
1170        $OUTDEV_LIST \
1171
1172 die_unknown(){
1173     echo "Unknown option \"$1\"."
1174     echo "See $0 --help for available options."
1175     exit 1
1176 }
1177
1178 show_list() {
1179     suffix=_$1
1180     shift
1181     echo $* | sed s/$suffix//g | tr ' ' '\n' | sort
1182     exit 0
1183 }
1184
1185 for opt do
1186     optval="${opt#*=}"
1187     case "$opt" in
1188     --extra-cflags=*) add_cflags "$optval"
1189     ;;
1190     --extra-ldflags=*) add_ldflags "$optval"
1191     ;;
1192     --extra-libs=*) add_extralibs "$optval"
1193     ;;
1194     --disable-devices) disable $INDEV_LIST $OUTDEV_LIST
1195     ;;
1196     --enable-debug=*) debuglevel="$optval"
1197     ;;
1198     --enable-*=*|--disable-*=*)
1199     eval `echo "$opt" | sed 's/=/-/;s/--/action=/;s/-/ thing=/;s/-/ name=/'`
1200     case "$thing" in
1201         encoder|decoder|muxer|demuxer|parser|bsf|protocol|filter) $action ${optval}_${thing} ;;
1202         *) die_unknown "$opt" ;;
1203     esac
1204     ;;
1205     --enable-?*|--disable-?*)
1206     eval `echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g'`
1207     if is_in $option $COMPONENT_LIST; then
1208         eval $action \$$(toupper ${option%s})_LIST
1209     elif is_in $option $CMDLINE_SELECT; then
1210         $action $option
1211     else
1212         die_unknown $opt
1213     fi
1214     ;;
1215     --list-*)
1216         NAME="${opt#--list-}"
1217         is_in $NAME $COMPONENT_LIST || die_unknown $opt
1218         NAME=${NAME%s}
1219         eval show_list $NAME \$$(toupper $NAME)_LIST
1220     ;;
1221     --help|-h) show_help
1222     ;;
1223     *)
1224     optname="${opt%%=*}"
1225     optname="${optname#--}"
1226     optname=$(echo "$optname" | sed 's/-/_/g')
1227     is_in $optname $CMDLINE_SET || die_unknown $opt
1228     eval $optname='$optval'
1229     ;;
1230     esac
1231 done
1232
1233 disabled logging && logfile=/dev/null
1234
1235 echo "# $0 $@" > $logfile
1236 set >> $logfile
1237
1238 test -n "$cross_prefix" && enable cross_compile
1239
1240 cc_default="${cross_prefix}${cc_default}"
1241 yasmexe="${cross_prefix}${yasmexe}"
1242 ar="${cross_prefix}${ar}"
1243 nm="${cross_prefix}${nm}"
1244 ranlib="${cross_prefix}${ranlib}"
1245 strip="${cross_prefix}${strip}"
1246
1247 set_default cc
1248 enabled cross_compile || host_cc_default=$cc
1249 set_default host_cc
1250
1251 # set temporary file name
1252 if test ! -z "$TMPDIR" ; then
1253     TMPDIR1="${TMPDIR}"
1254 elif test ! -z "$TEMPDIR" ; then
1255     TMPDIR1="${TEMPDIR}"
1256 else
1257     TMPDIR1="/tmp"
1258 fi
1259
1260 TMPC="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.c"
1261 TMPE="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}${EXESUF}"
1262 TMPH="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.h"
1263 TMPO="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.o"
1264 TMPS="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.S"
1265 TMPSH="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.sh"
1266
1267 check_cflags -std=c99
1268
1269 case "$arch" in
1270     i386|i486|i586|i686|i86pc|BePC)
1271         arch="x86_32"
1272         enable fast_unaligned
1273     ;;
1274     x86_64|amd64)
1275         arch="x86_32"
1276         enable cmov
1277         enable fast_cmov
1278         enable fast_unaligned
1279         check_cc <<EOF && enable fast_64bit && arch="x86_64"
1280         int test[sizeof(char*) - 7];
1281 EOF
1282     ;;
1283     # armv4l is a subset of armv[567]*l
1284     arm|armv[4567]*l)
1285         arch="armv4l"
1286     ;;
1287     alpha)
1288         arch="alpha"
1289         enable fast_64bit
1290     ;;
1291     "Power Macintosh"|ppc|powerpc)
1292         arch="powerpc"
1293         enable fast_unaligned
1294     ;;
1295     ppc64)
1296         arch="powerpc"
1297         enable fast_64bit
1298         enable fast_unaligned
1299     ;;
1300     mips|mipsel|IP*)
1301         arch="mips"
1302     ;;
1303     sun4u|sparc64)
1304         arch="sparc64"
1305         enable fast_64bit
1306     ;;
1307     sparc)
1308         arch="sparc"
1309     ;;
1310     sh4)
1311         arch="sh4"
1312     ;;
1313     parisc)
1314         arch="parisc"
1315     ;;
1316     parisc64)
1317         arch="parisc"
1318         enable fast_64bit
1319     ;;
1320     s390|s390x)
1321         arch="s390"
1322     ;;
1323     m68k)
1324         arch="m68k"
1325     ;;
1326     ia64)
1327         arch="ia64"
1328         enable fast_64bit
1329     ;;
1330     bfin)
1331         arch="bfin"
1332     ;;
1333     *)
1334         arch="unknown"
1335     ;;
1336 esac
1337
1338 enable $arch
1339 enabled_any x86_32 x86_64 && enable x86
1340 enabled     sparc64       && enable sparc
1341
1342 # OS specific
1343 case $target_os in
1344     beos|haiku|zeta)
1345         prefix_default="$HOME/config"
1346         # helps building libavcodec
1347         add_cflags "-DPIC -fomit-frame-pointer"
1348         # 3 gcc releases known for BeOS, each with ugly bugs
1349         gcc_version="`$cc -v 2>&1 | grep version | cut -d ' ' -f3-`"
1350         case "$gcc_version" in
1351           2.9-beos-991026*|2.9-beos-000224*) echo "R5/GG gcc"
1352             disable mmx
1353             ;;
1354           *20010315*) echo "BeBits gcc"
1355             add_cflags "-fno-expensive-optimizations"
1356             ;;
1357         esac
1358         SHFLAGS=-nostart
1359         # enable BeOS things
1360         enable audio_beos
1361         # no need for libm, but the inet stuff
1362         # Check for BONE
1363         # XXX: actually should check for NOT net_server
1364         if echo $BEINCLUDES | grep -q 'headers/be/bone'; then
1365             network_extralibs="-lbind -lsocket"
1366         else
1367             enable beos_netserver
1368             network_extralibs="-lnet"
1369         fi ;;
1370     sunos)
1371         FFSERVERLDFLAGS=""
1372         SHFLAGS='-shared -Wl,-h,$$(@F)'
1373         network_extralibs="-lsocket -lnsl"
1374         ;;
1375     netbsd)
1376         oss_demuxer_extralibs="-lossaudio"
1377         oss_muxer_extralibs="-lossaudio"
1378         ;;
1379     openbsd)
1380         disable need_memalign
1381         LIBOBJFLAGS='$(PIC)'
1382         SHFLAGS='-shared'
1383         SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF).$(LIBVERSION)'
1384         SLIBNAME_WITH_VERSION='$(SLIBNAME)'
1385         SLIBNAME_WITH_MAJOR='$(SLIBNAME)'
1386         oss_demuxer_extralibs="-lossaudio"
1387         oss_muxer_extralibs="-lossaudio"
1388         ;;
1389     freebsd)
1390         disable need_memalign
1391         ;;
1392     bsd/os)
1393         osextralibs="-lpoll -lgnugetopt"
1394         strip="strip -d"
1395         ;;
1396     darwin)
1397         disable need_memalign
1398         SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR) -Wl,-read_only_relocs,suppress'
1399         VHOOKSHFLAGS='-dynamiclib -Wl,-single_module -flat_namespace -undefined suppress -Wl,-install_name,$(SHLIBDIR)/vhook/$$(@F)'
1400         strip="strip -x"
1401         FFLDFLAGS="-Wl,-dynamic,-search_paths_first"
1402         SLIBSUF=".dylib"
1403         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
1404         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
1405         FFSERVERLDFLAGS=-Wl,-bind_at_load
1406         objformat="macho"
1407         enabled x86_64 && objformat="macho64"
1408         ;;
1409     mingw32*)
1410         target_os=mingw32
1411         LIBTARGET=i386
1412         if test $arch = x86_64; then
1413             disable need_memalign
1414             LIBTARGET=x64
1415         fi
1416         shlibdir_default="$bindir_default"
1417         VHOOKSHFLAGS='-shared -L$(BUILD_ROOT)/libavformat -L$(BUILD_ROOT)/libavcodec -L$(BUILD_ROOT)/libavutil'
1418         VHOOKLIBS='-lavformat$(BUILDSUF) -lavcodec$(BUILDSUF) -lavutil$(BUILDSUF) $(EXTRALIBS)'
1419         if enabled swscale; then
1420             VHOOKSHFLAGS="$VHOOKSHFLAGS -L\$(BUILD_ROOT)/libswscale"
1421             VHOOKLIBS="$VHOOKLIBS -lswscale\$(BUILDSUF)"
1422         fi
1423         disable ffserver
1424         SLIBPREF=""
1425         SLIBSUF=".dll"
1426         EXESUF=".exe"
1427         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1428         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1429         SLIB_EXTRA_CMD='-lib /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)'
1430         SLIB_INSTALL_EXTRA_CMD='-install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"; \
1431             install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)"'
1432         SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"'
1433         SHFLAGS='-shared -Wl,--output-def,$$(@:$(SLIBSUF)=.def) -Wl,--enable-runtime-pseudo-reloc -Wl,--enable-auto-image-base'
1434         objformat="win32"
1435         enable dos_paths
1436         check_cpp_condition _mingw.h "(__MINGW32_MAJOR_VERSION > 3) || (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
1437             die "ERROR: MinGW runtime version must be >= 3.15."
1438         enabled_any avisynth vfwcap_demuxer &&
1439             { check_cpp_condition w32api.h "(__W32API_MAJOR_VERSION > 3) || (__W32API_MAJOR_VERSION == 3 && __W32API_MINOR_VERSION >= 12)" ||
1440               die "ERROR: avisynth and vfwcap_demuxer require w32api version 3.12 or later."; }
1441         ;;
1442     cygwin*)
1443         target_os=cygwin
1444         shlibdir_default="$bindir_default"
1445         VHOOKSHFLAGS='-shared -L$(BUILD_ROOT)/libavformat -L$(BUILD_ROOT)/libavcodec -L$(BUILD_ROOT)/libavutil'
1446         VHOOKLIBS='-lavformat$(BUILDSUF) -lavcodec$(BUILDSUF) -lavutil$(BUILDSUF) $(EXTRALIBS)'
1447         if enabled swscale; then
1448             VHOOKSHFLAGS="$VHOOKSHFLAGS -L\$(BUILD_ROOT)/libswscale"
1449             VHOOKLIBS="$VHOOKLIBS -lswscale\$(BUILDSUF)"
1450         fi
1451         EXESUF=".exe"
1452         SLIBPREF="cyg"
1453         SLIBSUF=".dll"
1454         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1455         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1456         SHFLAGS='-shared -Wl,--enable-auto-image-base'
1457         objformat="win32"
1458         enable dos_paths
1459         ;;
1460     *-dos|freedos|opendos)
1461         disable ffplay ffserver vhook
1462         disable $INDEV_LIST $OUTDEV_LIST
1463         network_extralibs="-lsocket"
1464         EXESUF=".exe"
1465         objformat="win32"
1466         enable dos_paths
1467         ;;
1468     linux)
1469         enable dv1394
1470         ;;
1471     irix*)
1472         target_os=irix
1473         ranlib="echo ignoring ranlib"
1474         ;;
1475     os/2*)
1476         strip="lxlite"
1477         ln_s="cp -f"
1478         EXESUF=".exe"
1479         FFLDFLAGS="-Zomf -Zbin-files -Zargs-wild -Zmap"
1480         SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
1481         FFSERVERLDFLAGS=""
1482         LIBSUF="_s.a"
1483         SLIBPREF=""
1484         SLIBSUF=".dll"
1485         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
1486         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
1487         SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
1488           echo PROTMODE >> $(SUBDIR)$(NAME).def; \
1489           echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
1490           echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
1491           echo EXPORTS >> $(SUBDIR)$(NAME).def; \
1492           emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
1493         SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
1494           emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
1495         SLIB_INSTALL_EXTRA_CMD='install -m 644 $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib "$(LIBDIR)"'
1496         SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.a "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.lib'
1497         disable vhook
1498         enable dos_paths
1499         ;;
1500     interix)
1501         disable vhook
1502         ;;
1503
1504     *)
1505         target_os="${target_os}-UNKNOWN"
1506         ;;
1507 esac
1508
1509 set_default $PATHS_LIST
1510
1511 add_extralibs $osextralibs
1512
1513 # Combine FFLDFLAGS and the LDFLAGS environment variable.
1514 LDFLAGS="$FFLDFLAGS $LDFLAGS"
1515
1516 # we need to build at least one lib type
1517 if ! enabled_any static shared; then
1518     cat <<EOF
1519 At least one library type must be built.
1520 Specify --enable-static to build the static libraries or --enable-shared to
1521 build the shared libraries as well. To only build the shared libraries specify
1522 --disable-static in addition to --enable-shared.
1523 EOF
1524     exit 1;
1525 fi
1526
1527 disabled static && LIBNAME=""
1528
1529 if enabled_any libfaad libfaadbin ; then
1530     if check_header faad.h; then
1531         check_cc <<EOF
1532 #include <faad.h>
1533 #ifndef FAAD2_VERSION
1534 ok faad1
1535 #endif
1536 int main(void) { return 0; }
1537 EOF
1538         test $? = 0 && enable libfaad2
1539     else
1540         die "FAAD test failed."
1541     fi
1542 fi
1543
1544
1545 if ! enabled gpl; then
1546     die_gpl_disabled(){
1547         name=$1
1548         shift
1549         enabled_any $@ && die "$name is under GPL and --enable-gpl is not specified."
1550     }
1551     die_gpl_disabled "The Postprocessing code" postproc
1552     die_gpl_disabled "libx264"                 libx264
1553     die_gpl_disabled "libxvidcore"             libxvid
1554     die_gpl_disabled "FAAD2"                   libfaad2
1555     die_gpl_disabled "The X11 grabber"         x11grab
1556     die_gpl_disabled "The software scaler"     swscale
1557 fi
1558
1559 if ! enabled nonfree && enabled_any libamr_nb libamr_wb; then
1560     die "libamr is nonfree and --enable-nonfree is not specified."
1561 fi
1562
1563 check_deps $ARCH_EXT_LIST
1564
1565 test -z "$need_memalign" && need_memalign="$mmx"
1566
1567 #Darwin CC versions
1568 if test $target_os = darwin; then
1569     if $cc -v 2>&1 | grep -q xlc; then
1570         add_cflags "-qpdf2 -qlanglvl=extc99 -qmaxmem=-1 -qarch=auto -qtune=auto"
1571     else
1572         add_cflags "-pipe"
1573         check_cflags "-force_cpusubtype_ALL"
1574         check_cflags "-Wno-sign-compare"
1575         enabled shared || check_cflags -mdynamic-no-pic
1576     fi
1577 fi
1578
1579 disabled optimizations || check_cflags -fomit-frame-pointer
1580
1581 # Add processor-specific flags
1582 if test $cpu != "generic"; then
1583     warn_altivec(){
1584         $1 altivec && echo "WARNING: Tuning for $2 but AltiVec $1.";
1585     }
1586     case $cpu in
1587         601|ppc601|PowerPC601)
1588             add_cflags "-mcpu=601"
1589             warn_altivec enabled PPC601
1590         ;;
1591         603*|ppc603*|PowerPC603*)
1592             add_cflags "-mcpu=603"
1593             warn_altivec enabled PPC603
1594         ;;
1595         604*|ppc604*|PowerPC604*)
1596             add_cflags "-mcpu=604"
1597             warn_altivec enabled PPC604
1598         ;;
1599         G3|g3|75*|ppc75*|PowerPC75*)
1600             add_cflags "-mcpu=750 -mpowerpc-gfxopt"
1601             warn_altivec enabled PPC75x
1602         ;;
1603         G4|g4|745*|ppc745*|PowerPC745*)
1604             add_cflags "-mcpu=7450 -mpowerpc-gfxopt"
1605             warn_altivec disabled PPC745x
1606         ;;
1607         74*|ppc74*|PowerPC74*)
1608             add_cflags "-mcpu=7400 -mpowerpc-gfxopt"
1609             warn_altivec disabled PPC74xx
1610         ;;
1611         G5|g5|970|ppc970|PowerPC970|power4*|Power4*)
1612             add_cflags "-mcpu=970 -mpowerpc-gfxopt -mpowerpc64"
1613             warn_altivec disabled PPC970
1614             enable ppc64
1615         ;;
1616         Cell|CELL|cell)
1617             add_cflags "-mcpu=cell"
1618             warn_altivec disabled Cell
1619             enable ppc64
1620         ;;
1621         # targets that do NOT support conditional mov (cmov)
1622         i[345]86|pentium|pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
1623             add_cflags "-march=$cpu"
1624             disable cmov
1625         ;;
1626         # targets that do support conditional mov (cmov)
1627         i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2)
1628             add_cflags "-march=$cpu"
1629             enable cmov
1630             enable fast_cmov
1631         ;;
1632         # targets that do support conditional mov but on which it's slow
1633         pentium4|pentium4m|prescott|nocona)
1634             add_cflags "-march=$cpu"
1635             enable cmov
1636             disable fast_cmov
1637         ;;
1638         sparc64)
1639             add_cflags "-mcpu=v9"
1640         ;;
1641         arm11*|cortex*)
1642             add_cflags "-mcpu=$cpu"
1643             enable fast_unaligned
1644         ;;
1645         armv*)
1646             add_cflags "-march=$cpu"
1647         ;;
1648         arm*)
1649             add_cflags "-mcpu=$cpu"
1650         ;;
1651         *)
1652             echo "WARNING: Unknown CPU \"$cpu\", ignored."
1653         ;;
1654     esac
1655 fi
1656
1657 # make sure we can execute files in $TMPDIR
1658 cat > $TMPSH 2>> $logfile <<EOF
1659 #! /bin/sh
1660 EOF
1661 chmod +x $TMPSH >> $logfile 2>&1
1662 if ! $TMPSH >> $logfile 2>&1; then
1663     cat <<EOF
1664 Unable to create and execute files in $TMPDIR1.  Set the TMPDIR environment
1665 variable to another directory and make sure that $TMPDIR1 is not mounted
1666 noexec.
1667 EOF
1668     die "Sanity test failed."
1669 fi
1670 rm $TMPSH
1671
1672 # compiler sanity check
1673 check_exec <<EOF
1674 int main(void){ return 0; }
1675 EOF
1676 if test "$?" != 0; then
1677     echo "$cc is unable to create an executable file."
1678     if test -z "$cross_prefix" && ! enabled cross_compile ; then
1679         echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
1680         echo "Only do this if you know what cross compiling means."
1681     fi
1682     die "C compiler test failed."
1683 fi
1684
1685 check_cc <<EOF || die "Symbol mangling check failed."
1686 int ff_extern;
1687 EOF
1688 sym=$($nm -P -g $TMPO | grep ff_extern)
1689 extern_prefix=${sym%%ff_extern*}
1690
1691 check_asm inline_asm '""'
1692
1693 if enabled x86; then
1694     # check whether EBP is available on x86
1695     # As 'i' is stored on the stack, this program will crash
1696     # if the base pointer is used to access it because the
1697     # base pointer is cleared in the inline assembly code.
1698     check_exec_crash <<EOF && enable ebp_available
1699     volatile int i=0;
1700     __asm__ volatile (
1701         "xorl %%ebp, %%ebp"
1702     ::: "%ebp");
1703     return i;
1704 EOF
1705
1706     # check wether EBX is available on x86
1707     check_asm ebx_available '"":::"%ebx"'
1708
1709     # check whether binutils is new enough to compile SSSE3/MMX2
1710     enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
1711     enabled mmx2  && check_asm mmx2  '"movss %xmm0, %xmm0"'
1712
1713     check_asm bswap '"bswap %%eax" ::: "%eax"'
1714
1715     YASMFLAGS="-f $objformat -DARCH_$(toupper $arch)"
1716     enabled     x86_64        && append YASMFLAGS "-m amd64"
1717     enabled_all x86_64 shared && append YASMFLAGS "-DPIC"
1718     case "$objformat" in
1719         elf) enabled debug && append YASMFLAGS "-g dwarf2" ;;
1720         macho64)              append YASMFLAGS "-DPIC -DPREFIX" ;;
1721         *)                    append YASMFLAGS "-DPREFIX"  ;;
1722     esac
1723     check_yasm "pabsw xmm0, xmm0" && enable yasm
1724 fi
1725
1726 # check for assembler specific support
1727
1728 if test $arch = "powerpc"; then
1729     check_asm dcbzl '"dcbzl 0, 1"'
1730 fi
1731
1732 # check for SIMD availability
1733
1734 # AltiVec flags: The FSF version of GCC differs from the Apple version
1735 if enabled altivec; then
1736     check_cflags -maltivec -mabi=altivec &&
1737         { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
1738         check_cflags -faltivec
1739
1740     # check if our compiler supports Motorola AltiVec C API
1741     check_cc <<EOF || disable altivec
1742 $inc_altivec_h
1743 int main(void) {
1744     vector signed int v1, v2, v3;
1745     v1 = vec_add(v2,v3);
1746     return 0;
1747 }
1748 EOF
1749
1750     # check if our compiler supports braces for vector declarations
1751     check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
1752 $inc_altivec_h
1753 int main (void) { (vector int) {1}; return 0; }
1754 EOF
1755 fi
1756
1757 # We have to check if pld is a nop and disable it.
1758 enabled armv4l  && check_asm pld     '"pld [r0]"'
1759 enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
1760 enabled armv6   && check_asm armv6   '"sadd16 r0, r0, r0"'
1761 enabled armvfp  && check_asm armvfp  '"fadds s0, s0, s0"'
1762 enabled iwmmxt  && check_asm iwmmxt  '"wunpckelub wr6, wr4"'
1763 enabled mmi     && check_asm mmi     '"lq $2, 0($2)"'
1764 enabled neon    && check_asm neon    '"vadd.i16 q0, q0, q0"'
1765 enabled vis     && check_asm vis     '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc
1766
1767 enabled vis && add_cflags "-mcpu=ultrasparc -mtune=ultrasparc"
1768
1769 # ---
1770 # big/little-endian test
1771 check_cc <<EOF || die "endian test failed"
1772 unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
1773 EOF
1774 od -A n -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
1775
1776 # ---
1777 # check availability of some header files
1778
1779 if check_func dlopen; then
1780     ldl=
1781 elif check_func dlopen -ldl; then
1782     ldl=-ldl
1783 fi
1784
1785 check_func  fork
1786 check_func  gethrtime
1787 check_func  getrusage
1788 check_func  inet_aton $network_extralibs
1789 check_func  memalign
1790 check_func  mkstemp
1791 check_func_headers windows.h GetProcessTimes
1792
1793 check_header conio.h
1794 check_header dlfcn.h
1795 check_header malloc.h
1796 check_header poll.h
1797 check_header sys/mman.h
1798 check_header sys/resource.h
1799 check_header sys/select.h
1800 check_header termios.h
1801
1802 if ! enabled_any memalign memalign_hack && enabled need_memalign ; then
1803     die "Error, no memalign() but SSE enabled, disable it or use --enable-memalign-hack."
1804 fi
1805
1806 disabled  zlib || check_lib  zlib.h      zlibVersion -lz   || disable  zlib
1807 disabled bzlib || check_lib bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
1808
1809 # check for some common methods of building with pthread support
1810 # do this before the optional library checks as some of them require pthreads
1811 if enabled pthreads; then
1812     if check_func pthread_create; then
1813         :
1814     elif check_func pthread_create -pthread; then
1815         add_cflags -pthread
1816         add_extralibs -pthread
1817     elif check_func pthread_create -pthreads; then
1818         add_cflags -pthreads
1819         add_extralibs -pthreads
1820     elif check_func pthread_create -lpthreadGC2; then
1821         add_extralibs -lpthreadGC2
1822     elif ! check_lib pthread.h pthread_create -lpthread; then
1823         die "ERROR: can't find pthreads library"
1824     fi
1825 fi
1826
1827 for thread in $THREADS_LIST; do
1828     if enabled $thread; then
1829         test -n "$thread_type" &&
1830             die "ERROR: Only one thread type must be selected." ||
1831             thread_type="$thread"
1832     fi
1833 done
1834
1835 check_lib math.h sin -lm
1836
1837 # test for C99 functions in math.h
1838 for func in llrint lrint lrintf round roundf; do
1839     check_exec <<EOF && enable $func || disable $func
1840 #include <math.h>
1841 int main(void) { return ($func(3.999f) > 0)?0:1; }
1842 EOF
1843 done
1844
1845 # these are off by default, so fail if requested and not available
1846 enabled avisynth   && require2 vfw32 "windows.h vfw.h" AVIFileInit -lvfw32
1847 enabled libamr_nb  && require  libamrnb amrnb/interf_dec.h Speech_Decode_Frame_init -lamrnb -lm
1848 enabled libamr_wb  && require  libamrwb amrwb/dec_if.h D_IF_init -lamrwb -lm
1849 enabled libdirac   && add_cflags $(pkg-config --cflags dirac) &&
1850                       require  libdirac libdirac_decoder/dirac_parser.h dirac_decoder_init -ldirac_decoder &&
1851                       require  libdirac libdirac_encoder/dirac_encoder.h dirac_encoder_init -ldirac_encoder
1852 enabled libfaac    && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
1853 enabled libfaad    && require2 libfaad faad.h faacDecOpen -lfaad
1854 enabled libgsm     && require  libgsm gsm.h gsm_create -lgsm
1855 enabled libmp3lame && require  libmp3lame lame/lame.h lame_init -lmp3lame -lm
1856 enabled libnut     && require  libnut libnut.h nut_demuxer_init -lnut
1857 enabled libschroedinger && add_cflags $(pkg-config --cflags schroedinger-1.0) &&
1858                            require libschroedinger schroedinger/schro.h schro_init $(pkg-config --libs schroedinger-1.0)
1859 enabled libspeex   && require  libspeex speex/speex.h speex_decoder_init -lspeex
1860 enabled libtheora  && require  libtheora theora/theora.h theora_info_init -ltheora -logg
1861 enabled libvorbis  && require  libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
1862 enabled libx264    && require  libx264 x264.h x264_encoder_open -lx264 -lm &&
1863                       { check_cpp_condition x264.h "X264_BUILD >= 65" ||
1864                         die "ERROR: libx264 version must be >= 0.65."; }
1865 enabled libxvid    && require  libxvid xvid.h xvid_global -lxvidcore
1866 enabled mlib       && require  mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
1867
1868 # libdc1394 check
1869 if enabled libdc1394; then
1870     { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
1871         enable libdc1394_2; } ||
1872     { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
1873         enable libdc1394_1; } ||
1874     die "ERROR: No version of libdc1394 found "
1875 fi
1876
1877
1878 _restrict=
1879 for restrict_keyword in restrict __restrict__ __restrict; do
1880     check_cc <<EOF && _restrict=$restrict_keyword && break
1881 void foo(char * $restrict_keyword p);
1882 EOF
1883 done
1884
1885 test "$vhook" = "default" && vhook="$dlopen"
1886
1887 if test "$target_os" = cygwin -o "$target_os" = mingw32 && enabled_all static vhook ; then
1888     disable vhook
1889     echo
1890     echo "At the moment vhooks don't work on Cygwin or MinGW static builds."
1891     echo "Patches welcome."
1892     echo
1893 fi
1894
1895 if enabled vhook; then
1896     check_ldflags -rdynamic
1897     check_ldflags -export-dynamic
1898 fi
1899
1900 check_foo_config imlib2 imlib2 Imlib2.h imlib_load_font
1901 check_foo_config freetype2 freetype ft2build.h FT_Init_FreeType
1902
1903 ##########################################
1904 # SDL check
1905
1906 disable sdl_too_old
1907 disable sdl
1908 SDL_CONFIG="${cross_prefix}sdl-config"
1909 if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
1910     sdl_cflags=`"${SDL_CONFIG}" --cflags`
1911     temp_cflags $sdl_cflags
1912     temp_extralibs `"${SDL_CONFIG}" --libs`
1913     if check_lib2 SDL.h SDL_Init; then
1914         _sdlversion=`"${SDL_CONFIG}" --version | sed 's/[^0-9]//g'`
1915         if test "$_sdlversion" -lt 121 ; then
1916             enable sdl_too_old
1917         else
1918             enable sdl
1919             check_cc $sdl_cflags <<EOF && enable sdl_video_size
1920 #include <SDL.h>
1921 int main(int argc, char **argv){
1922     const SDL_VideoInfo *vi = SDL_GetVideoInfo();
1923     int w = vi->current_w;
1924     return 0;
1925 }
1926 EOF
1927         fi
1928     fi
1929     restore_flags
1930 fi
1931
1932 texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
1933
1934 ##########################################
1935 # Network check
1936
1937 if enabled network; then
1938     check_type sys/socket.h socklen_t
1939     # Prefer arpa/inet.h over winsock2
1940     if check_header arpa/inet.h ; then
1941         check_func closesocket
1942     elif check_header winsock2.h ; then
1943         network_extralibs="-lws2_32"
1944         check_type ws2tcpip.h socklen_t
1945         check_func_headers winsock2.h closesocket
1946     fi
1947 fi
1948
1949 ##########################################
1950 # IPv6 check
1951
1952 enabled network && enabled ipv6 && check_ld <<EOF && enable ipv6 || disable ipv6
1953 #include <sys/types.h>
1954 #include <sys/socket.h>
1955 #include <netinet/in.h>
1956 #include <netdb.h>
1957 int main(void) {
1958     struct sockaddr_storage saddr;
1959     struct ipv6_mreq mreq6;
1960     getaddrinfo(0,0,0,0);
1961     getnameinfo(0,0,0,0,0,0,0);
1962     IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
1963 }
1964 EOF
1965
1966 check_header linux/videodev.h
1967 check_header linux/videodev2.h
1968 check_header sys/videoio.h
1969
1970 check_func_headers "windows.h vfw.h" capCreateCaptureWindow -lvfw32
1971
1972 # check for ioctl_meteor.h, ioctl_bt848.h and alternatives
1973 { check_header dev/bktr/ioctl_meteor.h &&
1974   check_header dev/bktr/ioctl_bt848.h; } ||
1975 { check_header machine/ioctl_meteor.h &&
1976   check_header machine/ioctl_bt848.h; } ||
1977 { check_header dev/video/meteor/ioctl_meteor.h &&
1978   check_header dev/video/bktr/ioctl_bt848.h; } ||
1979 check_header dev/ic/bt8xx.h
1980
1981 check_header sys/soundcard.h
1982 check_header soundcard.h
1983
1984 # deal with the X11 frame grabber
1985 enabled x11grab                         &&
1986 check_header X11/Xlib.h                 &&
1987 check_header X11/extensions/XShm.h      &&
1988 check_func XOpenDisplay -lX11           &&
1989 check_func XShmCreateImage -lX11 -lXext
1990
1991 enabled debug && add_cflags -g"$debuglevel"
1992
1993 # add some useful compiler flags if supported
1994 check_cflags -Wdeclaration-after-statement
1995 check_cflags -Wall
1996 check_cflags -Wno-switch
1997 check_cflags -Wdisabled-optimization
1998 check_cflags -Wpointer-arith
1999 check_cflags -Wredundant-decls
2000 check_cflags -Wno-pointer-sign
2001 check_cflags -Wcast-qual
2002 check_cflags -Wwrite-strings
2003 check_cflags -Wtype-limits
2004 enabled extra_warnings && check_cflags -Winline
2005
2006 # add some linker flags
2007 check_ldflags -Wl,--warn-common
2008 check_ldflags -Wl,--as-needed
2009 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'
2010 check_ldflags -Wl,-Bsymbolic
2011
2012 if enabled small; then
2013     check_cflags -Os            # not all compilers support -Os
2014     optimizations="small"
2015 elif enabled optimizations; then
2016     if $cc -v 2>&1 | grep -q xlc; then
2017         add_cflags  "-O5"
2018         add_ldflags "-O5"
2019     else
2020         add_cflags "-O3"
2021     fi
2022 fi
2023 check_cflags -fno-math-errno
2024 check_cflags -fno-signed-zeros
2025
2026 # add some flags for Intel C Compiler
2027 if $cc --version 2> /dev/null | grep -q Intel; then
2028   # Just warnings, no remarks
2029   check_cflags -w1
2030   # -wd: Disable following warnings
2031   # 144, 167, 556: -Wno-pointer-sign
2032   # 10006: ignoring unknown option -fno-signed-zeros
2033   # 10156: ignoring option '-W'; no argument required
2034   check_cflags -wd144,167,556,10006,10156
2035   # 11030: Warning unknown option --as-needed
2036   # 10156: ignoring option '-export'; no argument required
2037   check_ldflags -wd10156,11030
2038   # Allow to compile with optimizations
2039   check_ldflags -march=$cpu
2040 fi
2041
2042 # PIC flags for shared library objects where they are needed
2043 if enabled shared; then
2044     # LIBOBJFLAGS may have already been set in the OS configuration
2045     if test -z "$LIBOBJFLAGS" ; then
2046         case "$arch" in
2047             x86_64|ia64|alpha|sparc*|power*|parisc*|mips*) LIBOBJFLAGS='$(PIC)' ;;
2048         esac
2049     fi
2050 fi
2051
2052 if enabled gprof; then
2053     add_cflags  "-p"
2054     add_ldflags "-p"
2055 fi
2056
2057 VHOOKCFLAGS="-fPIC"
2058
2059 # Find out if the .align argument is a power of two or not.
2060 if test $asmalign_pot = "unknown"; then
2061     disable asmalign_pot
2062     echo '__asm__ (".align 3");' | check_cc && enable asmalign_pot
2063 fi
2064
2065 enabled_any $DECODER_LIST      && enable decoders
2066 enabled_any $ENCODER_LIST      && enable encoders
2067 enabled_any $BSF_LIST          && enable bsfs
2068 enabled_any $DEMUXER_LIST      && enable demuxers
2069 enabled_any $MUXER_LIST        && enable muxers
2070 enabled_any $FILTER_LIST       && enable filters
2071 enabled_any $INDEV_LIST        && enable demuxers
2072 enabled_any $OUTDEV_LIST       && enable muxers
2073 enabled_any $PROTOCOL_LIST     && enable protocols
2074
2075 enabled_any $THREADS_LIST      && enable threads
2076
2077 check_deps $CONFIG_LIST       \
2078            $CONFIG_EXTRA      \
2079            $HAVE_LIST         \
2080            $DECODER_LIST      \
2081            $ENCODER_LIST      \
2082            $PARSER_LIST       \
2083            $BSF_LIST          \
2084            $DEMUXER_LIST      \
2085            $MUXER_LIST        \
2086            $FILTER_LIST       \
2087            $INDEV_LIST        \
2088            $OUTDEV_LIST       \
2089            $PROTOCOL_LIST     \
2090
2091 enabled libdc1394 && append pkg_requires "libraw1394"
2092 enabled libdirac  && append pkg_requires "dirac"
2093 enabled libtheora && append pkg_requires "theora"
2094 enabled libvorbis && append pkg_requires "vorbisenc"
2095
2096 echo "install prefix            $prefix"
2097 echo "source path               $source_path"
2098 echo "C compiler                $cc"
2099 echo ".align is power-of-two    $asmalign_pot"
2100 echo "ARCH                      $arch ($cpu)"
2101 if test "$build_suffix" != ""; then
2102     echo "build suffix              $build_suffix"
2103 fi
2104 if test "$extra_version" != ""; then
2105     echo "version string suffix     $extra_version"
2106 fi
2107 echo "big-endian                ${bigendian-no}"
2108 if test $arch = "x86_32" -o $arch = "x86_64"; then
2109     echo "yasm                      ${yasm-no}"
2110     echo "MMX enabled               ${mmx-no}"
2111     echo "CMOV enabled              ${cmov-no}"
2112     echo "CMOV is fast              ${fast_cmov-no}"
2113     echo "EBX available             ${ebx_available-no}"
2114     echo "EBP available             ${ebp_available-no}"
2115 fi
2116 if test $arch = "armv4l"; then
2117     echo "ARMv5TE enabled           ${armv5te-no}"
2118     echo "ARMv6 enabled             ${armv6-no}"
2119     echo "ARM VFP enabled           ${armvfp-no}"
2120     echo "IWMMXT enabled            ${iwmmxt-no}"
2121     echo "NEON enabled              ${neon-no}"
2122 fi
2123 if test $arch = "mips"; then
2124     echo "MMI enabled               ${mmi-no}"
2125 fi
2126 if test $arch = "powerpc"; then
2127     echo "AltiVec enabled           ${altivec-no}"
2128     echo "dcbzl available           ${dcbzl-no}"
2129 fi
2130 echo "gprof enabled             ${gprof-no}"
2131 echo "debug symbols             ${debug-no}"
2132 echo "strip symbols             ${stripping-no}"
2133 echo "optimizations             ${optimizations-no}"
2134 echo "static                    ${static-no}"
2135 echo "shared                    ${shared-no}"
2136 echo "postprocessing support    ${postproc-no}"
2137 echo "software scaler enabled   ${swscale-no}"
2138 echo "new filter support        ${avfilter-no}"
2139 echo "filters using lavformat   ${avfilter_lavf-no}"
2140 echo "video hooking             ${vhook-no}"
2141 if enabled vhook; then
2142     echo "Imlib2 support            ${imlib2-no}"
2143     echo "FreeType support          ${freetype2-no}"
2144 fi
2145 echo "network support           ${network-no}"
2146 if enabled network; then
2147     echo "IPv6 support              ${ipv6-no}"
2148 fi
2149 echo "threading support         ${thread_type-no}"
2150 echo "SDL support               ${sdl-no}"
2151 if enabled sdl_too_old; then
2152     echo "-> Your SDL version is too old - please upgrade to have FFplay/SDL support."
2153 fi
2154 echo "Sun medialib support      ${mlib-no}"
2155 echo "AVISynth enabled          ${avisynth-no}"
2156 echo "libamr-nb support         ${libamr_nb-no}"
2157 echo "libamr-wb support         ${libamr_wb-no}"
2158 echo "libdc1394 support         ${libdc1394-no}"
2159 echo "libdirac enabled          ${libdirac-no}"
2160 echo "libfaac enabled           ${libfaac-no}"
2161 echo "libfaad enabled           ${libfaad-no}"
2162 echo "libfaad dlopened          ${libfaadbin-no}"
2163 echo "libgsm enabled            ${libgsm-no}"
2164 echo "libmp3lame enabled        ${libmp3lame-no}"
2165 echo "libnut enabled            ${libnut-no}"
2166 echo "libschroedinger enabled   ${libschroedinger-no}"
2167 echo "libspeex enabled          ${libspeex-no}"
2168 echo "libtheora enabled         ${libtheora-no}"
2169 echo "libvorbis enabled         ${libvorbis-no}"
2170 echo "libx264 enabled           ${libx264-no}"
2171 echo "libxvid enabled           ${libxvid-no}"
2172 echo "zlib enabled              ${zlib-no}"
2173 echo "bzlib enabled             ${bzlib-no}"
2174 echo
2175
2176 for type in decoder encoder parser demuxer muxer protocol filter bsf indev outdev; do
2177     echo "Enabled ${type}s:"
2178     eval list=\$$(toupper $type)_LIST
2179     for part in $list; do
2180         enabled $part && echo ${part%_*}
2181     done | sort | pr -3 -t
2182     echo
2183 done
2184
2185 license="LGPL"
2186 if enabled nonfree; then
2187     license="unredistributable"
2188 elif enabled gpl; then
2189     license="GPL"
2190 fi
2191
2192 echo "License: $license"
2193
2194 echo "Creating config.mak and config.h..."
2195
2196 echo "# Automatically generated by configure - do not modify!" > config.mak
2197 echo "/* Automatically generated by configure - do not modify! */" > $TMPH
2198 echo "#ifndef FFMPEG_CONFIG_H" >> $TMPH
2199 echo "#define FFMPEG_CONFIG_H" >> $TMPH
2200 echo "#define FFMPEG_CONFIGURATION \"$FFMPEG_CONFIGURATION\"" >> $TMPH
2201
2202 echo "FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION" >> config.mak
2203 echo "prefix=$prefix" >> config.mak
2204 echo "LIBDIR=\$(DESTDIR)$libdir" >> config.mak
2205 echo "SHLIBDIR=\$(DESTDIR)$shlibdir" >> config.mak
2206 echo "INCDIR=\$(DESTDIR)$incdir" >> config.mak
2207 echo "BINDIR=\$(DESTDIR)$bindir" >> config.mak
2208 echo "MANDIR=\$(DESTDIR)$mandir" >> config.mak
2209 echo "CC=$cc" >> config.mak
2210 echo "YASM=$yasmexe" >> config.mak
2211 echo "AR=$ar" >> config.mak
2212 echo "RANLIB=$ranlib" >> config.mak
2213 echo "LN_S=$ln_s" >> config.mak
2214 enabled stripping &&
2215     echo "STRIP=$strip" >> config.mak ||
2216     echo "STRIP=echo ignoring strip" >> config.mak
2217
2218 echo "OPTFLAGS=$CFLAGS" >> config.mak
2219 echo "VHOOKCFLAGS=$VHOOKCFLAGS" >> config.mak
2220 echo "LDFLAGS=$LDFLAGS" >> config.mak
2221 echo "FFSERVERLDFLAGS=$FFSERVERLDFLAGS" >> config.mak
2222 echo "SHFLAGS=$SHFLAGS" >> config.mak
2223 echo "YASMFLAGS=$YASMFLAGS" >> config.mak
2224 echo "VHOOKSHFLAGS=$VHOOKSHFLAGS" >> config.mak
2225 echo "VHOOKLIBS=$VHOOKLIBS" >> config.mak
2226 echo "LIBOBJFLAGS=$LIBOBJFLAGS" >> config.mak
2227 echo "BUILD_STATIC=$static" >> config.mak
2228 echo "BUILDSUF=$build_suffix" >> config.mak
2229 echo "FULLNAME=$FULLNAME" >> config.mak
2230 echo "LIBPREF=$LIBPREF" >> config.mak
2231 echo "LIBSUF=$LIBSUF" >> config.mak
2232 echo "LIBNAME=$LIBNAME" >> config.mak
2233 echo "SLIBPREF=$SLIBPREF" >> config.mak
2234 echo "SLIBSUF=$SLIBSUF" >> config.mak
2235 echo "EXESUF=$EXESUF" >> config.mak
2236 echo "EXTRA_VERSION=$extra_version" >> config.mak
2237 echo "DEPEND_CMD=$DEPEND_CMD" >> config.mak
2238 echo "HOSTCC=$host_cc" >> config.mak
2239 echo "HOSTCFLAGS=$host_cflags" >> config.mak
2240 echo "HOSTLDFLAGS=$host_ldflags" >> config.mak
2241 echo "HOSTLIBS=$host_libs" >> config.mak
2242
2243 if enabled bigendian; then
2244     echo "WORDS_BIGENDIAN=yes" >> config.mak
2245     echo "#define WORDS_BIGENDIAN 1" >> $TMPH
2246 fi
2247
2248 if enabled sdl; then
2249     echo "SDL_LIBS=`"${SDL_CONFIG}" --libs`" >> config.mak
2250     echo "SDL_CFLAGS=`"${SDL_CONFIG}" --cflags`" >> config.mak
2251 fi
2252 if enabled texi2html; then
2253     echo "BUILD_DOC=yes" >> config.mak
2254 fi
2255
2256 get_version(){
2257     name=$1
2258     file=$source_path/$2
2259     eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
2260     eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
2261     lcname=$(tolower $name)
2262     eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
2263     eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
2264 }
2265
2266 get_version LIBSWSCALE  libswscale/swscale.h
2267 get_version LIBPOSTPROC libpostproc/postprocess.h
2268 get_version LIBAVCODEC  libavcodec/avcodec.h
2269 get_version LIBAVDEVICE libavdevice/avdevice.h
2270 get_version LIBAVFORMAT libavformat/avformat.h
2271 get_version LIBAVUTIL   libavutil/avutil.h
2272 get_version LIBAVFILTER libavfilter/avfilter.h
2273
2274 if enabled shared; then
2275     echo "BUILD_SHARED=yes" >> config.mak
2276     echo "PIC=-fPIC -DPIC" >> config.mak
2277     echo "LIBTARGET=${LIBTARGET}" >> config.mak
2278     echo "SLIBNAME=${SLIBNAME}" >> config.mak
2279     echo "SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}" >> config.mak
2280     echo "SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}" >> config.mak
2281     echo "SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}" >> config.mak
2282     echo "SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}" >> config.mak
2283     echo "SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}" >> config.mak
2284     echo "SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}" >> config.mak
2285 fi
2286 echo "LIB_INSTALL_EXTRA_CMD=${LIB_INSTALL_EXTRA_CMD}" >> config.mak
2287 echo "EXTRALIBS=$extralibs" >> config.mak
2288
2289 print_config ARCH_   $TMPH config.mak $ARCH_LIST
2290 print_config HAVE_   $TMPH config.mak $HAVE_LIST
2291 print_config CONFIG_ $TMPH config.mak $CONFIG_LIST       \
2292                                       $CONFIG_EXTRA      \
2293                                       $DECODER_LIST      \
2294                                       $ENCODER_LIST      \
2295                                       $PARSER_LIST       \
2296                                       $BSF_LIST          \
2297                                       $DEMUXER_LIST      \
2298                                       $MUXER_LIST        \
2299                                       $FILTER_LIST       \
2300                                       $PROTOCOL_LIST     \
2301                                       $INDEV_LIST        \
2302                                       $OUTDEV_LIST       \
2303
2304 echo "#define restrict $_restrict" >> $TMPH
2305
2306 if enabled small; then
2307     echo "#define av_always_inline"  >> $TMPH
2308 fi
2309
2310 echo "SRC_PATH=\"$source_path\"" >> config.mak
2311 echo "SRC_PATH_BARE=$source_path" >> config.mak
2312 echo "BUILD_ROOT=\"$PWD\"" >> config.mak
2313
2314 # Apparently it's not possible to portably echo a backslash.
2315 enabled asmalign_pot &&
2316     printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH ||
2317     printf '#define ASMALIGN(ZEROBITS) ".align 1 << " #ZEROBITS "\\n\\t"\n' >> $TMPH
2318
2319 echo "#define EXTERN_PREFIX \"${extern_prefix}\"" >> $TMPH
2320
2321 echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
2322
2323 # Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
2324 cmp -s $TMPH config.h &&
2325     echo "config.h is unchanged" ||
2326     mv -f $TMPH config.h
2327
2328 rm -f $TMPC $TMPE $TMPH $TMPO $TMPS $TMPSH
2329
2330 # build tree in object directory if source path is different from current one
2331 if enabled source_path_used; then
2332     DIRS="\
2333         doc               \
2334         libavcodec        \
2335         libavcodec/alpha  \
2336         libavcodec/armv4l \
2337         libavcodec/bfin   \
2338         libavcodec/i386   \
2339         libavcodec/mlib   \
2340         libavcodec/ppc    \
2341         libavcodec/sh4    \
2342         libavcodec/sparc  \
2343         libavdevice       \
2344         libavfilter       \
2345         libavformat       \
2346         libavutil         \
2347         libpostproc       \
2348         libswscale        \
2349         tests             \
2350         tools             \
2351         vhook             \
2352         "
2353     FILES="\
2354         Makefile             \
2355         common.mak           \
2356         subdir.mak           \
2357         doc/texi2pod.pl      \
2358         libavcodec/Makefile  \
2359         libavdevice/Makefile \
2360         libavfilter/Makefile \
2361         libavformat/Makefile \
2362         libavutil/Makefile   \
2363         libpostproc/Makefile \
2364         libswscale/Makefile  \
2365         "
2366     for dir in $DIRS ; do
2367         mkdir -p $dir
2368     done
2369     for f in $FILES ; do
2370         $ln_s "$source_path/$f" $f
2371     done
2372 fi
2373
2374
2375 # build pkg-config files
2376
2377 pkgconfig_generate(){
2378 name=$1
2379 shortname=${name#lib}${build_suffix}
2380 comment=$2
2381 version=$3
2382 libs=$4
2383 requires=$5
2384 cat <<EOF > $name/$name.pc
2385 prefix=$prefix
2386 exec_prefix=\${prefix}
2387 libdir=$libdir
2388 includedir=$incdir
2389
2390 Name: $name
2391 Description: $comment
2392 Version: $version
2393 Requires: $(disabled shared && echo $requires)
2394 Requires.private: $(enabled shared && echo $requires)
2395 Conflicts:
2396 Libs: -L\${libdir} -l${shortname} $(disabled shared && echo $libs)
2397 Libs.private: $(enabled shared && echo $libs)
2398 Cflags: -I\${includedir}
2399 EOF
2400 cat <<EOF > $name/$name-uninstalled.pc
2401 prefix=
2402 exec_prefix=
2403 libdir=\${pcfiledir}
2404 includedir=${source_path}
2405
2406 Name: $name
2407 Description: $comment
2408 Version: $version
2409 Requires: $requires
2410 Conflicts:
2411 Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
2412 Cflags: -I\${includedir}
2413 EOF
2414 }
2415
2416 pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
2417 pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "$pkg_requires libavutil = $LIBAVUTIL_VERSION"
2418 pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "$pkg_requires libavcodec = $LIBAVCODEC_VERSION"
2419 pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "$pkg_requires libavformat = $LIBAVFORMAT_VERSION"
2420 enabled avfilter &&
2421     pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "$pkg_requires libavutil = $LIBAVUTIL_VERSION"
2422 enabled postproc &&
2423     pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
2424 if enabled swscale; then
2425     pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"
2426 else
2427     pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "$pkg_requires libavcodec = $LIBAVCODEC_VERSION"
2428     apply libswscale/libswscale.pc sed s/^Libs:.*$/Libs:/
2429 fi