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