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