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