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