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