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