]> rtime.felk.cvut.cz Git - frescor/ffmpeg.git/blob - configure
Add channel layouts for dca.
[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         ;;
1409     cygwin*)
1410         target_os=cygwin
1411         shlibdir_default="$bindir_default"
1412         VHOOKSHFLAGS='-shared -L$(BUILD_ROOT)/libavformat -L$(BUILD_ROOT)/libavcodec -L$(BUILD_ROOT)/libavutil'
1413         VHOOKLIBS='-lavformat$(BUILDSUF) -lavcodec$(BUILDSUF) -lavutil$(BUILDSUF) $(EXTRALIBS)'
1414         if enabled swscale; then
1415             VHOOKSHFLAGS="$VHOOKSHFLAGS -L\$(BUILD_ROOT)/libswscale"
1416             VHOOKLIBS="$VHOOKLIBS -lswscale\$(BUILDSUF)"
1417         fi
1418         EXESUF=".exe"
1419         SLIBPREF="cyg"
1420         SLIBSUF=".dll"
1421         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1422         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1423         SHFLAGS='-shared -Wl,--enable-auto-image-base'
1424         objformat="win32"
1425         enable dos_paths
1426         ;;
1427     *-dos|freedos|opendos)
1428         disable ffplay ffserver vhook
1429         disable $INDEV_LIST $OUTDEV_LIST
1430         network_extralibs="-lsocket"
1431         EXESUF=".exe"
1432         objformat="win32"
1433         enable dos_paths
1434         ;;
1435     linux)
1436         enable dv1394
1437         ;;
1438     irix*)
1439         target_os=irix
1440         ranlib="echo ignoring ranlib"
1441         ;;
1442     os/2*)
1443         strip="lxlite"
1444         ln_s="cp -f"
1445         EXESUF=".exe"
1446         FFLDFLAGS="-Zomf -Zbin-files -Zargs-wild -Zmap"
1447         SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
1448         FFSERVERLDFLAGS=""
1449         LIBSUF="_s.a"
1450         SLIBPREF=""
1451         SLIBSUF=".dll"
1452         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
1453         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
1454         SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
1455           echo PROTMODE >> $(SUBDIR)$(NAME).def; \
1456           echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
1457           echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
1458           echo EXPORTS >> $(SUBDIR)$(NAME).def; \
1459           emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
1460         SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
1461           emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
1462         SLIB_INSTALL_EXTRA_CMD='install -m 644 $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib "$(LIBDIR)"'
1463         SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.a "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.lib'
1464         disable vhook
1465         enable dos_paths
1466         ;;
1467     interix)
1468         disable vhook
1469         ;;
1470
1471     *)
1472         target_os="${target_os}-UNKNOWN"
1473         ;;
1474 esac
1475
1476 set_default $PATHS_LIST
1477
1478 add_extralibs $osextralibs
1479
1480 # Combine FFLDFLAGS and the LDFLAGS environment variable.
1481 LDFLAGS="$FFLDFLAGS $LDFLAGS"
1482
1483 test -n "$cross_prefix" && enable cross_compile
1484
1485 # we need to build at least one lib type
1486 if ! enabled_any static shared; then
1487     cat <<EOF
1488 At least one library type must be built.
1489 Specify --enable-static to build the static libraries or --enable-shared to
1490 build the shared libraries as well. To only build the shared libraries specify
1491 --disable-static in addition to --enable-shared.
1492 EOF
1493     exit 1;
1494 fi
1495
1496 disabled static && LIBNAME=""
1497
1498 if enabled_any libfaad libfaadbin ; then
1499     if check_header faad.h; then
1500         check_cc <<EOF
1501 #include <faad.h>
1502 #ifndef FAAD2_VERSION
1503 ok faad1
1504 #endif
1505 int main(void) { return 0; }
1506 EOF
1507         test $? = 0 && enable libfaad2
1508     else
1509         die "FAAD test failed."
1510     fi
1511 fi
1512
1513
1514 if ! enabled gpl; then
1515     die_gpl_disabled(){
1516         name=$1
1517         shift
1518         enabled_any $@ && die "$name is under GPL and --enable-gpl is not specified."
1519     }
1520     die_gpl_disabled "The Postprocessing code" postproc
1521     die_gpl_disabled "libx264"                 libx264
1522     die_gpl_disabled "libxvidcore"             libxvid
1523     die_gpl_disabled "FAAD2"                   libfaad2
1524     die_gpl_disabled "The X11 grabber"         x11grab
1525     die_gpl_disabled "The software scaler"     swscale
1526 fi
1527
1528 if ! enabled nonfree && enabled_any libamr_nb libamr_wb; then
1529     die "libamr is nonfree and --enable-nonfree is not specified."
1530 fi
1531
1532 check_deps $ARCH_EXT_LIST
1533
1534 test -z "$need_memalign" && need_memalign="$mmx"
1535
1536 #Darwin CC versions
1537 if test $target_os = darwin; then
1538     if $cc -v 2>&1 | grep -q xlc; then
1539         add_cflags "-qpdf2 -qlanglvl=extc99 -qmaxmem=-1 -qarch=auto -qtune=auto"
1540     else
1541         add_cflags "-pipe"
1542         check_cflags "-force_cpusubtype_ALL"
1543         check_cflags "-Wno-sign-compare"
1544         enabled shared || check_cflags -mdynamic-no-pic
1545     fi
1546 fi
1547
1548 disabled optimizations || check_cflags -fomit-frame-pointer
1549
1550 # Add processor-specific flags
1551 if test $cpu != "generic"; then
1552     warn_altivec(){
1553         $1 altivec && echo "WARNING: Tuning for $2 but AltiVec $1.";
1554     }
1555     case $cpu in
1556         601|ppc601|PowerPC601)
1557             add_cflags "-mcpu=601"
1558             warn_altivec enabled PPC601
1559         ;;
1560         603*|ppc603*|PowerPC603*)
1561             add_cflags "-mcpu=603"
1562             warn_altivec enabled PPC603
1563         ;;
1564         604*|ppc604*|PowerPC604*)
1565             add_cflags "-mcpu=604"
1566             warn_altivec enabled PPC604
1567         ;;
1568         G3|g3|75*|ppc75*|PowerPC75*)
1569             add_cflags "-mcpu=750 -mpowerpc-gfxopt"
1570             warn_altivec enabled PPC75x
1571         ;;
1572         G4|g4|745*|ppc745*|PowerPC745*)
1573             add_cflags "-mcpu=7450 -mpowerpc-gfxopt"
1574             warn_altivec disabled PPC745x
1575         ;;
1576         74*|ppc74*|PowerPC74*)
1577             add_cflags "-mcpu=7400 -mpowerpc-gfxopt"
1578             warn_altivec disabled PPC74xx
1579         ;;
1580         G5|g5|970|ppc970|PowerPC970|power4*|Power4*)
1581             add_cflags "-mcpu=970 -mpowerpc-gfxopt -mpowerpc64"
1582             warn_altivec disabled PPC970
1583             enable ppc64
1584         ;;
1585         Cell|CELL|cell)
1586             add_cflags "-mcpu=cell"
1587             warn_altivec disabled Cell
1588             enable ppc64
1589         ;;
1590         # targets that do NOT support conditional mov (cmov)
1591         i[345]86|pentium|pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
1592             add_cflags "-march=$cpu"
1593             disable cmov
1594         ;;
1595         # targets that do support conditional mov (cmov)
1596         i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2)
1597             add_cflags "-march=$cpu"
1598             enable cmov
1599             enable fast_cmov
1600         ;;
1601         # targets that do support conditional mov but on which it's slow
1602         pentium4|pentium4m|prescott|nocona)
1603             add_cflags "-march=$cpu"
1604             enable cmov
1605             disable fast_cmov
1606         ;;
1607         sparc64)
1608             add_cflags "-mcpu=v9"
1609         ;;
1610         arm11*|cortex*)
1611             add_cflags "-mcpu=$cpu"
1612             enable fast_unaligned
1613         ;;
1614         armv*)
1615             add_cflags "-march=$cpu"
1616         ;;
1617         arm*)
1618             add_cflags "-mcpu=$cpu"
1619         ;;
1620         *)
1621             echo "WARNING: Unknown CPU \"$cpu\", ignored."
1622         ;;
1623     esac
1624 fi
1625
1626 # make sure we can execute files in $TMPDIR
1627 cat > $TMPSH 2>> $logfile <<EOF
1628 #! /bin/sh
1629 EOF
1630 chmod +x $TMPSH >> $logfile 2>&1
1631 if ! $TMPSH >> $logfile 2>&1; then
1632     cat <<EOF
1633 Unable to create and execute files in $TMPDIR1.  Set the TMPDIR environment
1634 variable to another directory and make sure that $TMPDIR1 is not mounted
1635 noexec.
1636 EOF
1637     die "Sanity test failed."
1638 fi
1639 rm $TMPSH
1640
1641 # compiler sanity check
1642 check_exec <<EOF
1643 int main(void){ return 0; }
1644 EOF
1645 if test "$?" != 0; then
1646     echo "$cc is unable to create an executable file."
1647     if test -z "$cross_prefix" && ! enabled cross_compile ; then
1648         echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
1649         echo "Only do this if you know what cross compiling means."
1650     fi
1651     die "C compiler test failed."
1652 fi
1653
1654 check_cc <<EOF || die "Symbol mangling check failed."
1655 int ff_extern;
1656 EOF
1657 sym=$($nm -P -g $TMPO | grep ff_extern)
1658 extern_prefix=${sym%%ff_extern*}
1659
1660 check_asm inline_asm '""'
1661
1662 if enabled x86; then
1663     # check whether EBP is available on x86
1664     # As 'i' is stored on the stack, this program will crash
1665     # if the base pointer is used to access it because the
1666     # base pointer is cleared in the inline assembly code.
1667     check_exec_crash <<EOF && enable ebp_available
1668     volatile int i=0;
1669     __asm__ volatile (
1670         "xorl %%ebp, %%ebp"
1671     ::: "%ebp");
1672     return i;
1673 EOF
1674
1675     # check wether EBX is available on x86
1676     check_asm ebx_available '"":::"%ebx"'
1677
1678     # check whether binutils is new enough to compile SSSE3/MMX2
1679     enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
1680     enabled mmx2  && check_asm mmx2  '"movss %xmm0, %xmm0"'
1681
1682     check_asm bswap '"bswap %%eax" ::: "%eax"'
1683
1684     YASMFLAGS="-f $objformat -DARCH_$(toupper $arch)"
1685     enabled     x86_64        && append YASMFLAGS "-m amd64"
1686     enabled_all x86_64 shared && append YASMFLAGS "-DPIC"
1687     case "$objformat" in
1688         elf) enabled debug && append YASMFLAGS "-g dwarf2" ;;
1689         macho64)              append YASMFLAGS "-DPIC -DPREFIX" ;;
1690         *)                    append YASMFLAGS "-DPREFIX"  ;;
1691     esac
1692     check_yasm "pabsw xmm0, xmm0" && enable yasm
1693 fi
1694
1695 # check for assembler specific support
1696
1697 if test $arch = "powerpc"; then
1698     check_asm dcbzl '"dcbzl 0, 1"'
1699 fi
1700
1701 # check for SIMD availability
1702
1703 # AltiVec flags: The FSF version of GCC differs from the Apple version
1704 if enabled altivec; then
1705     check_cflags -maltivec -mabi=altivec &&
1706         { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
1707         check_cflags -faltivec
1708
1709     # check if our compiler supports Motorola AltiVec C API
1710     check_cc <<EOF || disable altivec
1711 $inc_altivec_h
1712 int main(void) {
1713     vector signed int v1, v2, v3;
1714     v1 = vec_add(v2,v3);
1715     return 0;
1716 }
1717 EOF
1718
1719     # check if our compiler supports braces for vector declarations
1720     check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
1721 $inc_altivec_h
1722 int main (void) { (vector int) {1}; return 0; }
1723 EOF
1724 fi
1725
1726 # We have to check if pld is a nop and disable it.
1727 enabled armv4l  && check_asm pld     '"pld [r0]"'
1728 enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
1729 enabled armv6   && check_asm armv6   '"sadd16 r0, r0, r0"'
1730 enabled armvfp  && check_asm armvfp  '"fadds s0, s0, s0"'
1731 enabled iwmmxt  && check_asm iwmmxt  '"wunpckelub wr6, wr4"'
1732 enabled mmi     && check_asm mmi     '"lq $2, 0($2)"'
1733 enabled neon    && check_asm neon    '"vadd.i16 q0, q0, q0"'
1734 enabled vis     && check_asm vis     '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc
1735
1736 enabled vis && add_cflags "-mcpu=ultrasparc -mtune=ultrasparc"
1737
1738 # ---
1739 # big/little-endian test
1740 check_cc <<EOF || die "endian test failed"
1741 unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
1742 EOF
1743 od -A n -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
1744
1745 # ---
1746 # check availability of some header files
1747
1748 if check_func dlopen; then
1749     ldl=
1750 elif check_func dlopen -ldl; then
1751     ldl=-ldl
1752 fi
1753
1754 check_func  fork
1755 check_func  gethrtime
1756 check_func  getrusage
1757 check_func  inet_aton $network_extralibs
1758 check_func  memalign
1759 check_func  mkstemp
1760 check_func_headers windows.h GetProcessTimes
1761
1762 check_header conio.h
1763 check_header dlfcn.h
1764 check_header malloc.h
1765 check_header poll.h
1766 check_header sys/mman.h
1767 check_header sys/resource.h
1768 check_header sys/select.h
1769 check_header termios.h
1770
1771 if ! enabled_any memalign memalign_hack && enabled need_memalign ; then
1772     die "Error, no memalign() but SSE enabled, disable it or use --enable-memalign-hack."
1773 fi
1774
1775 disabled  zlib || check_lib  zlib.h      zlibVersion -lz   || disable  zlib
1776 disabled bzlib || check_lib bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
1777
1778 # check for some common methods of building with pthread support
1779 # do this before the optional library checks as some of them require pthreads
1780 if enabled pthreads; then
1781     if check_func pthread_create; then
1782         :
1783     elif check_func pthread_create -pthread; then
1784         add_cflags -pthread
1785         add_extralibs -pthread
1786     elif check_func pthread_create -pthreads; then
1787         add_cflags -pthreads
1788         add_extralibs -pthreads
1789     elif check_func pthread_create -lpthreadGC2; then
1790         add_extralibs -lpthreadGC2
1791     elif ! check_lib pthread.h pthread_create -lpthread; then
1792         die "ERROR: can't find pthreads library"
1793     fi
1794 fi
1795
1796 for thread in $THREADS_LIST; do
1797     if enabled $thread; then
1798         test -n "$thread_type" &&
1799             die "ERROR: Only one thread type must be selected." ||
1800             thread_type="$thread"
1801     fi
1802 done
1803
1804 check_lib math.h sin -lm
1805
1806 # test for C99 functions in math.h
1807 for func in llrint lrint lrintf round roundf; do
1808     check_exec <<EOF && enable $func || disable $func
1809 #include <math.h>
1810 int main(void) { return ($func(3.999f) > 0)?0:1; }
1811 EOF
1812 done
1813
1814 # these are off by default, so fail if requested and not available
1815 enabled avisynth   && require2 vfw32 "windows.h vfw.h" AVIFileInit -lvfw32
1816 enabled libamr_nb  && require  libamrnb amrnb/interf_dec.h Speech_Decode_Frame_init -lamrnb -lm
1817 enabled libamr_wb  && require  libamrwb amrwb/dec_if.h D_IF_init -lamrwb -lm
1818 enabled libdirac   && add_cflags $(pkg-config --cflags dirac) &&
1819                       require  libdirac libdirac_decoder/dirac_parser.h dirac_decoder_init -ldirac_decoder &&
1820                       require  libdirac libdirac_encoder/dirac_encoder.h dirac_encoder_init -ldirac_encoder
1821 enabled libfaac    && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
1822 enabled libfaad    && require2 libfaad faad.h faacDecOpen -lfaad
1823 enabled libgsm     && require  libgsm gsm.h gsm_create -lgsm
1824 enabled libmp3lame && require  LAME lame/lame.h lame_init -lmp3lame -lm
1825 enabled libnut     && require  libnut libnut.h nut_demuxer_init -lnut
1826 enabled libschroedinger && add_cflags $(pkg-config --cflags schroedinger-1.0) &&
1827                            require libschroedinger schroedinger/schro.h schro_init $(pkg-config --libs schroedinger-1.0)
1828 enabled libspeex   && require  libspeex speex/speex.h speex_decoder_init -lspeex
1829 enabled libtheora  && require  libtheora theora/theora.h theora_info_init -ltheora -logg
1830 enabled libvorbis  && require  libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
1831 enabled libx264    && require  x264 x264.h x264_encoder_open -lx264 -lm &&
1832                       { check_cpp_condition x264.h "X264_BUILD >= 65" ||
1833                         die "ERROR: libx264 version must be >= 0.65."; }
1834 enabled libxvid    && require  Xvid xvid.h xvid_global -lxvidcore
1835 enabled mlib       && require  mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
1836
1837 # libdc1394 check
1838 if enabled libdc1394; then
1839     { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
1840         enable libdc1394_2; } ||
1841     { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
1842         enable libdc1394_1; } ||
1843     die "ERROR: No version of libdc1394 found "
1844 fi
1845
1846
1847 _restrict=
1848 for restrict_keyword in restrict __restrict__ __restrict; do
1849     check_cc <<EOF && _restrict=$restrict_keyword && break
1850 void foo(char * $restrict_keyword p);
1851 EOF
1852 done
1853
1854 test "$vhook" = "default" && vhook="$dlopen"
1855
1856 if test "$target_os" = cygwin -o "$target_os" = mingw32 && enabled_all static vhook ; then
1857     disable vhook
1858     echo
1859     echo "At the moment vhooks don't work on Cygwin or MinGW static builds."
1860     echo "Patches welcome."
1861     echo
1862 fi
1863
1864 if enabled vhook; then
1865     check_ldflags -rdynamic
1866     check_ldflags -export-dynamic
1867 fi
1868
1869 check_foo_config imlib2 imlib2 Imlib2.h imlib_load_font
1870 check_foo_config freetype2 freetype ft2build.h FT_Init_FreeType
1871
1872 ##########################################
1873 # SDL check
1874
1875 disable sdl_too_old
1876 disable sdl
1877 SDL_CONFIG="${cross_prefix}sdl-config"
1878 if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
1879     sdl_cflags=`"${SDL_CONFIG}" --cflags`
1880     temp_cflags $sdl_cflags
1881     temp_extralibs `"${SDL_CONFIG}" --libs`
1882     if check_lib2 SDL.h SDL_Init; then
1883         _sdlversion=`"${SDL_CONFIG}" --version | sed 's/[^0-9]//g'`
1884         if test "$_sdlversion" -lt 121 ; then
1885             enable sdl_too_old
1886         else
1887             enable sdl
1888             check_cc $sdl_cflags <<EOF && enable sdl_video_size
1889 #include <SDL.h>
1890 int main(int argc, char **argv){
1891     const SDL_VideoInfo *vi = SDL_GetVideoInfo();
1892     int w = vi->current_w;
1893     return 0;
1894 }
1895 EOF
1896         fi
1897     fi
1898     restore_flags
1899 fi
1900
1901 texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
1902
1903 ##########################################
1904 # Network check
1905
1906 if enabled network; then
1907     check_type sys/socket.h socklen_t
1908     # Prefer arpa/inet.h over winsock2
1909     if check_header arpa/inet.h ; then
1910         check_func closesocket
1911     elif check_header winsock2.h ; then
1912         network_extralibs="-lws2_32"
1913         check_type ws2tcpip.h socklen_t
1914         check_func_headers winsock2.h closesocket
1915     fi
1916 fi
1917
1918 ##########################################
1919 # IPv6 check
1920
1921 enabled network && enabled ipv6 && check_ld <<EOF && enable ipv6 || disable ipv6
1922 #include <sys/types.h>
1923 #include <sys/socket.h>
1924 #include <netinet/in.h>
1925 #include <netdb.h>
1926 int main(void) {
1927     struct sockaddr_storage saddr;
1928     struct ipv6_mreq mreq6;
1929     getaddrinfo(0,0,0,0);
1930     getnameinfo(0,0,0,0,0,0,0);
1931     IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
1932 }
1933 EOF
1934
1935 check_header linux/videodev.h
1936 check_header linux/videodev2.h
1937 check_header sys/videoio.h
1938
1939 check_func_headers "windows.h vfw.h" capCreateCaptureWindow -lvfw32
1940
1941 # check for ioctl_meteor.h, ioctl_bt848.h and alternatives
1942 { check_header dev/bktr/ioctl_meteor.h &&
1943   check_header dev/bktr/ioctl_bt848.h; } ||
1944 { check_header machine/ioctl_meteor.h &&
1945   check_header machine/ioctl_bt848.h; } ||
1946 { check_header dev/video/meteor/ioctl_meteor.h &&
1947   check_header dev/video/bktr/ioctl_bt848.h; } ||
1948 check_header dev/ic/bt8xx.h
1949
1950 check_header sys/soundcard.h
1951 check_header soundcard.h
1952
1953 # deal with the X11 frame grabber
1954 enabled x11grab                         &&
1955 check_header X11/Xlib.h                 &&
1956 check_header X11/extensions/XShm.h      &&
1957 check_func XOpenDisplay -lX11           &&
1958 check_func XShmCreateImage -lX11 -lXext
1959
1960 enabled debug && add_cflags -g"$debuglevel"
1961
1962 # add some useful compiler flags if supported
1963 check_cflags -Wdeclaration-after-statement
1964 check_cflags -Wall
1965 check_cflags -Wno-switch
1966 check_cflags -Wdisabled-optimization
1967 check_cflags -Wpointer-arith
1968 check_cflags -Wredundant-decls
1969 check_cflags -Wno-pointer-sign
1970 check_cflags -Wcast-qual
1971 check_cflags -Wwrite-strings
1972 check_cflags -Wtype-limits
1973 enabled extra_warnings && check_cflags -Winline
1974
1975 # add some linker flags
1976 check_ldflags -Wl,--warn-common
1977 check_ldflags -Wl,--as-needed
1978 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'
1979 check_ldflags -Wl,-Bsymbolic
1980
1981 if enabled small; then
1982     check_cflags -Os            # not all compilers support -Os
1983     optimizations="small"
1984 elif enabled optimizations; then
1985     if $cc -v 2>&1 | grep -q xlc; then
1986         add_cflags  "-O5"
1987         add_ldflags "-O5"
1988     else
1989         add_cflags "-O3"
1990     fi
1991 fi
1992 check_cflags -fno-math-errno
1993 check_cflags -fno-signed-zeros
1994
1995 # add some flags for Intel C Compiler
1996 if $cc --version 2> /dev/null | grep -q Intel; then
1997   # Just warnings, no remarks
1998   check_cflags -w1
1999   # -wd: Disable following warnings
2000   # 144, 167, 556: -Wno-pointer-sign
2001   # 10006: ignoring unknown option -fno-signed-zeros
2002   # 10156: ignoring option '-W'; no argument required
2003   check_cflags -wd144,167,556,10006,10156
2004   # 11030: Warning unknown option --as-needed
2005   # 10156: ignoring option '-export'; no argument required
2006   check_ldflags -wd10156,11030
2007   # Allow to compile with optimizations
2008   check_ldflags -march=$cpu
2009 fi
2010
2011 # PIC flags for shared library objects where they are needed
2012 if enabled shared; then
2013     # LIBOBJFLAGS may have already been set in the OS configuration
2014     if test -z "$LIBOBJFLAGS" ; then
2015         case "$arch" in
2016             x86_64|ia64|alpha|sparc*|power*|parisc*|mips*) LIBOBJFLAGS='$(PIC)' ;;
2017         esac
2018     fi
2019 fi
2020
2021 if enabled gprof; then
2022     add_cflags  "-p"
2023     add_ldflags "-p"
2024 fi
2025
2026 VHOOKCFLAGS="-fPIC"
2027
2028 # Find out if the .align argument is a power of two or not.
2029 if test $asmalign_pot = "unknown"; then
2030     disable asmalign_pot
2031     echo '__asm__ (".align 3");' | check_cc && enable asmalign_pot
2032 fi
2033
2034 enabled_any $DECODER_LIST      && enable decoders
2035 enabled_any $ENCODER_LIST      && enable encoders
2036 enabled_any $BSF_LIST          && enable bsfs
2037 enabled_any $DEMUXER_LIST      && enable demuxers
2038 enabled_any $MUXER_LIST        && enable muxers
2039 enabled_any $FILTER_LIST       && enable filters
2040 enabled_any $INDEV_LIST        && enable demuxers
2041 enabled_any $OUTDEV_LIST       && enable muxers
2042 enabled_any $PROTOCOL_LIST     && enable protocols
2043
2044 enabled_any $THREADS_LIST      && enable threads
2045
2046 check_deps $CONFIG_LIST       \
2047            $CONFIG_EXTRA      \
2048            $HAVE_LIST         \
2049            $DECODER_LIST      \
2050            $ENCODER_LIST      \
2051            $PARSER_LIST       \
2052            $BSF_LIST          \
2053            $DEMUXER_LIST      \
2054            $MUXER_LIST        \
2055            $FILTER_LIST       \
2056            $INDEV_LIST        \
2057            $OUTDEV_LIST       \
2058            $PROTOCOL_LIST     \
2059
2060 enabled libdc1394 && append pkg_requires "libraw1394"
2061 enabled libdirac  && append pkg_requires "dirac"
2062 enabled libtheora && append pkg_requires "theora"
2063 enabled libvorbis && append pkg_requires "vorbisenc"
2064
2065 echo "install prefix            $prefix"
2066 echo "source path               $source_path"
2067 echo "C compiler                $cc"
2068 echo ".align is power-of-two    $asmalign_pot"
2069 echo "ARCH                      $arch ($cpu)"
2070 if test "$build_suffix" != ""; then
2071     echo "build suffix              $build_suffix"
2072 fi
2073 if test "$extra_version" != ""; then
2074     echo "version string suffix     $extra_version"
2075 fi
2076 echo "big-endian                ${bigendian-no}"
2077 if test $arch = "x86_32" -o $arch = "x86_64"; then
2078     echo "yasm                      ${yasm-no}"
2079     echo "MMX enabled               ${mmx-no}"
2080     echo "CMOV enabled              ${cmov-no}"
2081     echo "CMOV is fast              ${fast_cmov-no}"
2082     echo "EBX available             ${ebx_available-no}"
2083     echo "EBP available             ${ebp_available-no}"
2084 fi
2085 if test $arch = "armv4l"; then
2086     echo "ARMv5TE enabled           ${armv5te-no}"
2087     echo "ARMv6 enabled             ${armv6-no}"
2088     echo "ARM VFP enabled           ${armvfp-no}"
2089     echo "IWMMXT enabled            ${iwmmxt-no}"
2090     echo "NEON enabled              ${neon-no}"
2091 fi
2092 if test $arch = "mips"; then
2093     echo "MMI enabled               ${mmi-no}"
2094 fi
2095 if test $arch = "powerpc"; then
2096     echo "AltiVec enabled           ${altivec-no}"
2097     echo "dcbzl available           ${dcbzl-no}"
2098 fi
2099 echo "gprof enabled             ${gprof-no}"
2100 echo "debug symbols             ${debug-no}"
2101 echo "strip symbols             ${stripping-no}"
2102 echo "optimizations             ${optimizations-no}"
2103 echo "static                    ${static-no}"
2104 echo "shared                    ${shared-no}"
2105 echo "postprocessing support    ${postproc-no}"
2106 echo "software scaler enabled   ${swscale-no}"
2107 echo "new filter support        ${avfilter-no}"
2108 echo "filters using lavformat   ${avfilter_lavf-no}"
2109 echo "video hooking             ${vhook-no}"
2110 if enabled vhook; then
2111     echo "Imlib2 support            ${imlib2-no}"
2112     echo "FreeType support          ${freetype2-no}"
2113 fi
2114 echo "network support           ${network-no}"
2115 if enabled network; then
2116     echo "IPv6 support              ${ipv6-no}"
2117 fi
2118 echo "threading support         ${thread_type-no}"
2119 echo "SDL support               ${sdl-no}"
2120 if enabled sdl_too_old; then
2121     echo "-> Your SDL version is too old - please upgrade to have FFplay/SDL support."
2122 fi
2123 echo "Sun medialib support      ${mlib-no}"
2124 echo "AVISynth enabled          ${avisynth-no}"
2125 echo "libamr-nb support         ${libamr_nb-no}"
2126 echo "libamr-wb support         ${libamr_wb-no}"
2127 echo "libdc1394 support         ${libdc1394-no}"
2128 echo "libdirac enabled          ${libdirac-no}"
2129 echo "libfaac enabled           ${libfaac-no}"
2130 echo "libfaad enabled           ${libfaad-no}"
2131 echo "libfaad dlopened          ${libfaadbin-no}"
2132 echo "libgsm enabled            ${libgsm-no}"
2133 echo "libmp3lame enabled        ${libmp3lame-no}"
2134 echo "libnut enabled            ${libnut-no}"
2135 echo "libschroedinger enabled   ${libschroedinger-no}"
2136 echo "libspeex enabled          ${libspeex-no}"
2137 echo "libtheora enabled         ${libtheora-no}"
2138 echo "libvorbis enabled         ${libvorbis-no}"
2139 echo "libx264 enabled           ${libx264-no}"
2140 echo "libxvid enabled           ${libxvid-no}"
2141 echo "zlib enabled              ${zlib-no}"
2142 echo "bzlib enabled             ${bzlib-no}"
2143 echo
2144
2145 for type in decoder encoder parser demuxer muxer protocol filter bsf indev outdev; do
2146     echo "Enabled ${type}s:"
2147     eval list=\$$(toupper $type)_LIST
2148     for part in $list; do
2149         enabled $part && echo ${part%_*}
2150     done | sort | pr -3 -t
2151     echo
2152 done
2153
2154 license="LGPL"
2155 if enabled nonfree; then
2156     license="unredistributable"
2157 elif enabled gpl; then
2158     license="GPL"
2159 fi
2160
2161 echo "License: $license"
2162
2163 echo "Creating config.mak and config.h..."
2164
2165 echo "# Automatically generated by configure - do not modify!" > config.mak
2166 echo "/* Automatically generated by configure - do not modify! */" > $TMPH
2167 echo "#ifndef FFMPEG_CONFIG_H" >> $TMPH
2168 echo "#define FFMPEG_CONFIG_H" >> $TMPH
2169 echo "#define FFMPEG_CONFIGURATION \"$FFMPEG_CONFIGURATION\"" >> $TMPH
2170
2171 echo "FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION" >> config.mak
2172 echo "prefix=$prefix" >> config.mak
2173 echo "LIBDIR=\$(DESTDIR)$libdir" >> config.mak
2174 echo "SHLIBDIR=\$(DESTDIR)$shlibdir" >> config.mak
2175 echo "INCDIR=\$(DESTDIR)$incdir" >> config.mak
2176 echo "BINDIR=\$(DESTDIR)$bindir" >> config.mak
2177 echo "MANDIR=\$(DESTDIR)$mandir" >> config.mak
2178 echo "CC=$cc" >> config.mak
2179 echo "YASM=$yasmexe" >> config.mak
2180 echo "AR=$ar" >> config.mak
2181 echo "RANLIB=$ranlib" >> config.mak
2182 echo "LN_S=$ln_s" >> config.mak
2183 enabled stripping &&
2184     echo "STRIP=$strip" >> config.mak ||
2185     echo "STRIP=echo ignoring strip" >> config.mak
2186
2187 echo "OPTFLAGS=$CFLAGS" >> config.mak
2188 echo "VHOOKCFLAGS=$VHOOKCFLAGS" >> config.mak
2189 echo "LDFLAGS=$LDFLAGS" >> config.mak
2190 echo "FFSERVERLDFLAGS=$FFSERVERLDFLAGS" >> config.mak
2191 echo "SHFLAGS=$SHFLAGS" >> config.mak
2192 echo "YASMFLAGS=$YASMFLAGS" >> config.mak
2193 echo "VHOOKSHFLAGS=$VHOOKSHFLAGS" >> config.mak
2194 echo "VHOOKLIBS=$VHOOKLIBS" >> config.mak
2195 echo "LIBOBJFLAGS=$LIBOBJFLAGS" >> config.mak
2196 echo "BUILD_STATIC=$static" >> config.mak
2197 echo "BUILDSUF=$build_suffix" >> config.mak
2198 echo "FULLNAME=$FULLNAME" >> config.mak
2199 echo "LIBPREF=$LIBPREF" >> config.mak
2200 echo "LIBSUF=$LIBSUF" >> config.mak
2201 echo "LIBNAME=$LIBNAME" >> config.mak
2202 echo "SLIBPREF=$SLIBPREF" >> config.mak
2203 echo "SLIBSUF=$SLIBSUF" >> config.mak
2204 echo "EXESUF=$EXESUF" >> config.mak
2205 echo "EXTRA_VERSION=$extra_version" >> config.mak
2206 echo "DEPEND_CMD=$DEPEND_CMD" >> config.mak
2207
2208 if enabled bigendian; then
2209     echo "WORDS_BIGENDIAN=yes" >> config.mak
2210     echo "#define WORDS_BIGENDIAN 1" >> $TMPH
2211 fi
2212
2213 if enabled sdl; then
2214     echo "SDL_LIBS=`"${SDL_CONFIG}" --libs`" >> config.mak
2215     echo "SDL_CFLAGS=`"${SDL_CONFIG}" --cflags`" >> config.mak
2216 fi
2217 if enabled texi2html; then
2218     echo "BUILD_DOC=yes" >> config.mak
2219 fi
2220
2221 get_version(){
2222     name=$1
2223     file=$source_path/$2
2224     eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
2225     eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
2226     lcname=$(tolower $name)
2227     eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
2228     eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
2229 }
2230
2231 get_version LIBSWSCALE  libswscale/swscale.h
2232 get_version LIBPOSTPROC libpostproc/postprocess.h
2233 get_version LIBAVCODEC  libavcodec/avcodec.h
2234 get_version LIBAVDEVICE libavdevice/avdevice.h
2235 get_version LIBAVFORMAT libavformat/avformat.h
2236 get_version LIBAVUTIL   libavutil/avutil.h
2237 get_version LIBAVFILTER libavfilter/avfilter.h
2238
2239 if enabled shared; then
2240     echo "BUILD_SHARED=yes" >> config.mak
2241     echo "PIC=-fPIC -DPIC" >> config.mak
2242     echo "LIBTARGET=${LIBTARGET}" >> config.mak
2243     echo "SLIBNAME=${SLIBNAME}" >> config.mak
2244     echo "SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}" >> config.mak
2245     echo "SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}" >> config.mak
2246     echo "SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}" >> config.mak
2247     echo "SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}" >> config.mak
2248     echo "SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}" >> config.mak
2249     echo "SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}" >> config.mak
2250 fi
2251 echo "LIB_INSTALL_EXTRA_CMD=${LIB_INSTALL_EXTRA_CMD}" >> config.mak
2252 echo "EXTRALIBS=$extralibs" >> config.mak
2253
2254 print_config ARCH_   $TMPH config.mak $ARCH_LIST
2255 print_config HAVE_   $TMPH config.mak $HAVE_LIST
2256 print_config CONFIG_ $TMPH config.mak $CONFIG_LIST       \
2257                                       $CONFIG_EXTRA      \
2258                                       $DECODER_LIST      \
2259                                       $ENCODER_LIST      \
2260                                       $PARSER_LIST       \
2261                                       $BSF_LIST          \
2262                                       $DEMUXER_LIST      \
2263                                       $MUXER_LIST        \
2264                                       $FILTER_LIST       \
2265                                       $PROTOCOL_LIST     \
2266                                       $INDEV_LIST        \
2267                                       $OUTDEV_LIST       \
2268
2269 echo "#define restrict $_restrict" >> $TMPH
2270
2271 if enabled small; then
2272     echo "#define av_always_inline"  >> $TMPH
2273 fi
2274
2275 echo "SRC_PATH=\"$source_path\"" >> config.mak
2276 echo "SRC_PATH_BARE=$source_path" >> config.mak
2277 echo "BUILD_ROOT=\"$PWD\"" >> config.mak
2278
2279 # Apparently it's not possible to portably echo a backslash.
2280 enabled asmalign_pot &&
2281     printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH ||
2282     printf '#define ASMALIGN(ZEROBITS) ".align 1 << " #ZEROBITS "\\n\\t"\n' >> $TMPH
2283
2284 echo "#define EXTERN_PREFIX \"${extern_prefix}\"" >> $TMPH
2285
2286 echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
2287
2288 # Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
2289 cmp -s $TMPH config.h &&
2290     echo "config.h is unchanged" ||
2291     mv -f $TMPH config.h
2292
2293 rm -f $TMPC $TMPE $TMPH $TMPO $TMPS $TMPSH
2294
2295 # build tree in object directory if source path is different from current one
2296 if enabled source_path_used; then
2297     DIRS="\
2298         doc               \
2299         libavcodec        \
2300         libavcodec/alpha  \
2301         libavcodec/armv4l \
2302         libavcodec/bfin   \
2303         libavcodec/i386   \
2304         libavcodec/mlib   \
2305         libavcodec/ppc    \
2306         libavcodec/sh4    \
2307         libavcodec/sparc  \
2308         libavdevice       \
2309         libavfilter       \
2310         libavformat       \
2311         libavutil         \
2312         libpostproc       \
2313         libswscale        \
2314         tests             \
2315         tools             \
2316         vhook             \
2317         "
2318     FILES="\
2319         Makefile             \
2320         common.mak           \
2321         subdir.mak           \
2322         doc/texi2pod.pl      \
2323         libavcodec/Makefile  \
2324         libavdevice/Makefile \
2325         libavfilter/Makefile \
2326         libavformat/Makefile \
2327         libavutil/Makefile   \
2328         libpostproc/Makefile \
2329         libswscale/Makefile  \
2330         "
2331     for dir in $DIRS ; do
2332         mkdir -p $dir
2333     done
2334     for f in $FILES ; do
2335         $ln_s "$source_path/$f" $f
2336     done
2337 fi
2338
2339
2340 # build pkg-config files
2341
2342 pkgconfig_generate(){
2343 name=$1
2344 shortname=${name#lib}
2345 comment=$2
2346 version=$3
2347 libs=$4
2348 requires=$5
2349 cat <<EOF > $name/$name.pc
2350 prefix=$prefix
2351 exec_prefix=\${prefix}
2352 libdir=$libdir
2353 includedir=$incdir
2354
2355 Name: $name
2356 Description: $comment
2357 Version: $version
2358 Requires: $(disabled shared && echo $requires)
2359 Requires.private: $(enabled shared && echo $requires)
2360 Conflicts:
2361 Libs: -L\${libdir} -l${shortname} $(disabled shared && echo $libs)
2362 Libs.private: $(enabled shared && echo $libs)
2363 Cflags: -I\${includedir}
2364 EOF
2365 cat <<EOF > $name/$name-uninstalled.pc
2366 prefix=
2367 exec_prefix=
2368 libdir=\${pcfiledir}
2369 includedir=${source_path}
2370
2371 Name: $name
2372 Description: $comment
2373 Version: $version
2374 Requires: $requires
2375 Conflicts:
2376 Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
2377 Cflags: -I\${includedir}
2378 EOF
2379 }
2380
2381 pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
2382 pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "$pkg_requires libavutil = $LIBAVUTIL_VERSION"
2383 pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "$pkg_requires libavcodec = $LIBAVCODEC_VERSION"
2384 pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "$pkg_requires libavformat = $LIBAVFORMAT_VERSION"
2385 enabled avfilter &&
2386     pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "$pkg_requires libavutil = $LIBAVUTIL_VERSION"
2387 enabled postproc &&
2388     pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
2389 if enabled swscale; then
2390     pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"
2391 else
2392     pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "$pkg_requires libavcodec = $LIBAVCODEC_VERSION"
2393     apply libswscale/libswscale.pc sed s/^Libs:.*$/Libs:/
2394 fi