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