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