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