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