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