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