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