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