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