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