Be more verbose in describing VQF demuxer
[ffmpeg-lucabe.git] / configure
blob107ed069f3bf825cc95a89240763c2867fc1cb98
1 #!/bin/sh
3 # FFmpeg configure script
5 # Copyright (c) 2000-2002 Fabrice Bellard
6 # Copyright (c) 2005-2008 Diego Biurrun
7 # Copyright (c) 2005-2008 Mans Rullgard
10 # Prevent locale nonsense from breaking basic text processing.
11 LC_ALL=C
12 export LC_ALL
14 # make sure we are running under a compatible shell
15 # try to make this part work with most shells
17 try_exec(){
18 echo "Trying shell $1"
19 type "$1" > /dev/null 2>&1 && exec "$@"
22 unset foo
23 (: ${foo%%bar}) 2> /dev/null
24 E1="$?"
26 (: ${foo?}) 2> /dev/null
27 E2="$?"
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" "$@"
36 if test "0$FF_CONF_EXEC" -lt 2; then
37 FF_CONF_EXEC=2
38 try_exec ksh "$0" "$@"
40 if test "0$FF_CONF_EXEC" -lt 3; then
41 FF_CONF_EXEC=3
42 try_exec /usr/xpg4/bin/sh "$0" "$@"
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."
54 exit 1
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 " --datadir=DIR install data files in DIR [PREFIX/share/ffmpeg]"
68 echo " --libdir=DIR install libs in DIR [PREFIX/lib]"
69 echo " --shlibdir=DIR install shared libs in DIR [PREFIX/lib]"
70 echo " --incdir=DIR install includes in DIR [PREFIX/include]"
71 echo " --mandir=DIR install man page in DIR [PREFIX/share/man]"
72 echo
73 echo "Configuration options:"
74 echo " --disable-static do not build static libraries [no]"
75 echo " --enable-shared build shared libraries [no]"
76 echo " --enable-gpl allow use of GPL code, the resulting libs"
77 echo " and binaries will be under GPL [no]"
78 echo " --enable-nonfree allow use of nonfree code, the resulting libs"
79 echo " and binaries will be unredistributable [no]"
80 echo " --disable-ffmpeg disable ffmpeg build"
81 echo " --disable-ffplay disable ffplay build"
82 echo " --disable-ffserver disable ffserver build"
83 echo " --enable-postproc enable GPLed postprocessing support [no]"
84 echo " --enable-avfilter video filter support [no]"
85 echo " --enable-avfilter-lavf video filters dependent on avformat [no]"
86 echo " --enable-beosthreads use BeOS threads [no]"
87 echo " --enable-os2threads use OS/2 threads [no]"
88 echo " --enable-pthreads use pthreads [no]"
89 echo " --enable-w32threads use Win32 threads [no]"
90 echo " --enable-x11grab enable X11 grabbing [no]"
91 echo " --disable-network disable network support [no]"
92 echo " --disable-ipv6 disable IPv6 support [no]"
93 echo " --disable-mpegaudio-hp faster (but less accurate) MPEG audio decoding [no]"
94 echo " --enable-gray enable full grayscale support (slower color)"
95 echo " --enable-fastdiv enable table-based division"
96 echo " --enable-small optimize for size instead of speed"
97 echo " --disable-aandct disable AAN DCT code"
98 echo " --disable-fft disable FFT code"
99 echo " --disable-golomb disable Golomb code"
100 echo " --disable-mdct disable MDCT code"
101 echo " --disable-rdft disable RDFT code"
102 echo " --enable-hardcoded-tables use hardcoded tables instead of runtime generation"
103 echo " --enable-memalign-hack emulate memalign, interferes with memory debuggers"
104 echo " --enable-beos-netserver enable BeOS netserver"
105 echo " --disable-encoder=NAME disable encoder NAME"
106 echo " --enable-encoder=NAME enable encoder NAME"
107 echo " --disable-encoders disable all encoders"
108 echo " --disable-decoder=NAME disable decoder NAME"
109 echo " --enable-decoder=NAME enable decoder NAME"
110 echo " --disable-decoders disable all decoders"
111 echo " --disable-muxer=NAME disable muxer NAME"
112 echo " --enable-muxer=NAME enable muxer NAME"
113 echo " --disable-muxers disable all muxers"
114 echo " --disable-demuxer=NAME disable demuxer NAME"
115 echo " --enable-demuxer=NAME enable demuxer NAME"
116 echo " --disable-demuxers disable all demuxers"
117 echo " --enable-parser=NAME enable parser NAME"
118 echo " --disable-parser=NAME disable parser NAME"
119 echo " --disable-parsers disable all parsers"
120 echo " --enable-bsf=NAME enable bitstream filter NAME"
121 echo " --disable-bsf=NAME disable bitstream filter NAME"
122 echo " --disable-bsfs disable all bitstream filters"
123 echo " --enable-protocol=NAME enable protocol NAME"
124 echo " --disable-protocol=NAME disable protocol NAME"
125 echo " --disable-protocols disable all protocols"
126 echo " --disable-indevs disable input devices"
127 echo " --disable-outdevs disable output devices"
128 echo " --disable-devices disable all devices"
129 echo " --enable-filter=NAME enable filter NAME"
130 echo " --disable-filter=NAME disable filter NAME"
131 echo " --disable-filters disable all filters"
132 echo " --list-decoders show all available decoders"
133 echo " --list-encoders show all available encoders"
134 echo " --list-muxers show all available muxers"
135 echo " --list-demuxers show all available demuxers"
136 echo " --list-parsers show all available parsers"
137 echo " --list-protocols show all available protocols"
138 echo " --list-bsfs show all available bitstream filters"
139 echo " --list-indevs show all available input devices"
140 echo " --list-outdevs show all available output devices"
141 echo " --list-filters show all available filters"
142 echo
143 echo "External library support:"
144 echo " --enable-avisynth enable reading of AVISynth script files [no]"
145 echo " --enable-bzlib enable bzlib [autodetect]"
146 echo " --enable-libamr-nb enable libamr-nb floating point audio codec [no]"
147 echo " --enable-libamr-wb enable libamr-wb floating point audio codec [no]"
148 echo " --enable-libdc1394 enable IIDC-1394 grabbing using libdc1394"
149 echo " and libraw1394 [no]"
150 echo " --enable-libdirac enable Dirac support via libdirac [no]"
151 echo " --enable-libfaac enable FAAC support via libfaac [no]"
152 echo " --enable-libfaad enable FAAD support via libfaad [no]"
153 echo " --enable-libfaadbin open libfaad.so.0 at runtime [no]"
154 echo " --enable-libgsm enable GSM support via libgsm [no]"
155 echo " --enable-libmp3lame enable MP3 encoding via libmp3lame [no]"
156 echo " --enable-libnut enable NUT (de)muxing via libnut,"
157 echo " native (de)muxer exists [no]"
158 echo " --enable-libopenjpeg enable JPEG 2000 decoding via OpenJPEG [no]"
159 echo " --enable-libschroedinger enable Dirac support via libschroedinger [no]"
160 echo " --enable-libspeex enable Speex decoding via libspeex [no]"
161 echo " --enable-libtheora enable Theora encoding via libtheora [no]"
162 echo " --enable-libvorbis enable Vorbis encoding via libvorbis,"
163 echo " native implementation exists [no]"
164 echo " --enable-libx264 enable H.264 encoding via x264 [no]"
165 echo " --enable-libxvid enable Xvid encoding via xvidcore,"
166 echo " native MPEG-4/Xvid encoder exists [no]"
167 echo " --enable-mlib enable Sun medialib [no]"
168 echo " --enable-zlib enable zlib [autodetect]"
169 echo ""
170 echo "Advanced options (experts only):"
171 echo " --source-path=PATH path to source code [$source_path]"
172 echo " --cross-prefix=PREFIX use PREFIX for compilation tools [$cross_prefix]"
173 echo " --enable-cross-compile assume a cross-compiler is used"
174 echo " --sysroot=PATH root of cross-build tree"
175 echo " --sysinclude=PATH location of cross-build system headers"
176 echo " --target-os=OS compiler targets OS [$target_os]"
177 echo " --target-exec=CMD command to run executables on target"
178 echo " --target-path=DIR path to view of build directory on target"
179 echo " --nm=NM use nm tool"
180 echo " --as=AS use assembler AS [$as_default]"
181 echo " --cc=CC use C compiler CC [$cc_default]"
182 echo " --host-cc=HOSTCC use host C compiler HOSTCC"
183 echo " --host-cflags=HCFLAGS use HCFLAGS when compiling for host"
184 echo " --host-ldflags=HLDFLAGS use HLDFLAGS when linking for host"
185 echo " --host-libs=HLIBS use libs HLIBS when linking for host"
186 echo " --extra-cflags=ECFLAGS add ECFLAGS to CFLAGS [$CFLAGS]"
187 echo " --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]"
188 echo " --extra-libs=ELIBS add ELIBS [$ELIBS]"
189 echo " --extra-version=STRING version string suffix []"
190 echo " --build-suffix=SUFFIX library name suffix []"
191 echo " --arch=ARCH select architecture [$arch]"
192 echo " --cpu=CPU select the minimum required CPU (affects"
193 echo " instruction selection, may crash on older CPUs)"
194 echo " --enable-powerpc-perf enable performance report on PPC"
195 echo " (requires enabling PMC)"
196 echo " --disable-altivec disable AltiVec optimizations"
197 echo " --disable-amd3dnow disable 3DNow! optimizations"
198 echo " --disable-amd3dnowext disable 3DNow! extended optimizations"
199 echo " --disable-mmx disable MMX optimizations"
200 echo " --disable-mmx2 disable MMX2 optimizations"
201 echo " --disable-sse disable SSE optimizations"
202 echo " --disable-ssse3 disable SSSE3 optimizations"
203 echo " --disable-armv5te disable armv5te optimizations"
204 echo " --disable-armv6 disable armv6 optimizations"
205 echo " --disable-armv6t2 disable armv6t2 optimizations"
206 echo " --disable-armvfp disable ARM VFP optimizations"
207 echo " --disable-iwmmxt disable iwmmxt optimizations"
208 echo " --disable-mmi disable MMI optimizations"
209 echo " --disable-neon disable neon optimizations"
210 echo " --disable-vis disable VIS optimizations"
211 echo " --disable-yasm disable use of yasm assembler"
212 echo
213 echo "Developer options (useful when working on FFmpeg itself):"
214 echo " --disable-debug disable debugging symbols"
215 echo " --enable-debug=LEVEL set the debug level [$debuglevel]"
216 echo " --enable-gprof enable profiling with gprof [$gprof]"
217 echo " --disable-optimizations disable compiler optimizations"
218 echo " --enable-extra-warnings enable more compiler warnings"
219 echo " --disable-stripping disable stripping of executables and shared libraries"
220 echo ""
221 echo "NOTE: Object files are built at the place where configure is launched."
222 exit 0
225 log(){
226 echo "$@" >> $logfile
229 log_file(){
230 log BEGIN $1
231 pr -n -t $1 >> $logfile
232 log END $1
235 echolog(){
236 log "$@"
237 echo "$@"
240 die(){
241 echolog "$@"
242 cat <<EOF
243 If you think configure made a mistake, make sure you are using the latest
244 version from SVN. If the latest version fails, report the problem to the
245 ffmpeg-user@mplayerhq.hu mailing list or IRC #ffmpeg on irc.freenode.net.
247 if disabled logging; then
248 cat <<EOF
249 Rerun configure with logging enabled (do not use --disable-logging), and
250 include the log this produces with your report.
252 else
253 cat <<EOF
254 Include the log file "$logfile" produced by configure as this will help
255 solving the problem.
258 exit 1
261 # Avoid locale weirdness, besides we really just want to translate ASCII.
262 toupper(){
263 echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
266 tolower(){
267 echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
270 c_escape(){
271 echo "$*" | sed 's/["\\]/\\\0/g'
274 set_all(){
275 value=$1
276 shift
277 for var in $*; do
278 eval $var=$value
279 done
282 set_weak(){
283 value=$1
284 shift
285 for var; do
286 eval : \${$var:=$value}
287 done
290 pushvar(){
291 for var in $*; do
292 eval level=\${${var}_level:=0}
293 eval ${var}_${level}="\$$var"
294 eval ${var}_level=$(($level+1))
295 done
298 popvar(){
299 for var in $*; do
300 eval level=\${${var}_level:-0}
301 test $level = 0 && continue
302 eval level=$(($level-1))
303 eval $var="\${${var}_${level}}"
304 eval ${var}_level=$level
305 eval unset ${var}_${level}
306 done
309 enable(){
310 set_all yes $*
313 disable(){
314 set_all no $*
317 enable_weak(){
318 set_weak yes $*
321 disable_weak(){
322 set_weak no $*
325 enable_safe(){
326 enable $(echo "$*" | sed 's/[^A-Za-z0-9_ ]/_/g')
329 disable_safe(){
330 disable $(echo "$*" | sed 's/[^A-Za-z0-9_ ]/_/g')
333 do_enable_deep(){
334 for var; do
335 enabled $var && continue
336 eval sel="\$${var}_select"
337 eval sgs="\$${var}_suggest"
338 pushvar var sgs
339 enable_deep $sel
340 popvar sgs
341 enable_deep_weak $sgs
342 popvar var
343 done
346 enable_deep(){
347 do_enable_deep $*
348 enable $*
351 enable_deep_weak(){
352 do_enable_deep $*
353 enable_weak $*
356 enabled(){
357 test "${1#!}" = "$1" && op== || op=!=
358 eval test "x\$${1#!}" $op "xyes"
361 disabled(){
362 test "${1#!}" = "$1" && op== || op=!=
363 eval test "x\$${1#!}" $op "xno"
366 enabled_all(){
367 for opt; do
368 enabled $opt || return 1
369 done
372 disabled_all(){
373 for opt; do
374 disabled $opt || return 1
375 done
378 enabled_any(){
379 for opt; do
380 enabled $opt && return 0
381 done
384 disabled_any(){
385 for opt; do
386 disabled $opt && return 0
387 done
388 return 1
391 set_default(){
392 for opt; do
393 eval : \${$opt:=\$${opt}_default}
394 done
397 is_in(){
398 value=$1
399 shift
400 for var in $*; do
401 [ $var = $value ] && return 0
402 done
403 return 1
406 check_deps(){
407 for cfg; do
408 cfg="${cfg#!}"
409 enabled ${cfg}_checking && die "Circular dependency for $cfg."
410 disabled ${cfg}_checking && continue
411 enable ${cfg}_checking
413 eval dep_all="\$${cfg}_deps"
414 eval dep_any="\$${cfg}_deps_any"
415 eval dep_sel="\$${cfg}_select"
416 eval dep_sgs="\$${cfg}_suggest"
418 pushvar cfg dep_all dep_any dep_sel dep_sgs
419 check_deps $dep_all $dep_any $dep_sel $dep_sgs
420 popvar cfg dep_all dep_any dep_sel dep_sgs
422 enabled_all $dep_all || disable $cfg
423 enabled_any $dep_any || disable $cfg
424 disabled_any $dep_sel && disable $cfg
426 if enabled $cfg; then
427 eval dep_extralibs="\$${cfg}_extralibs"
428 test -n "$dep_extralibs" && add_extralibs $dep_extralibs
429 enable_deep $dep_sel
430 enable_deep_weak $dep_sgs
433 disable ${cfg}_checking
434 done
437 print_config(){
438 pfx=$1
439 header=$2
440 makefile=$3
441 shift 3
442 for cfg; do
443 ucname="`toupper $cfg`"
444 if enabled $cfg; then
445 echo "#define ${pfx}${ucname} 1" >> $header
446 echo "${pfx}${ucname}=yes" >> $makefile
447 else
448 echo "#define ${pfx}${ucname} 0" >> $header
450 done
453 flags_saved(){
454 (: ${SAVE_CFLAGS?}) 2> /dev/null
457 save_flags(){
458 flags_saved && return
459 SAVE_CFLAGS="$CFLAGS"
460 SAVE_LDFLAGS="$LDFLAGS"
461 SAVE_extralibs="$extralibs"
464 restore_flags(){
465 flags_saved || return
466 CFLAGS="$SAVE_CFLAGS"
467 LDFLAGS="$SAVE_LDFLAGS"
468 extralibs="$SAVE_extralibs"
469 unset SAVE_CFLAGS
470 unset SAVE_LDFLAGS
471 unset SAVE_extralibs
474 temp_cflags(){
475 save_flags
476 CFLAGS="$CFLAGS $*"
479 temp_ldflags(){
480 save_flags
481 LDFLAGS="$LDFLAGS $*"
484 temp_extralibs(){
485 save_flags
486 extralibs="$extralibs $*"
489 append(){
490 var=$1
491 shift
492 flags_saved && eval "SAVE_$var=\"\$SAVE_$var $*\""
493 eval "$var=\"\$$var $*\""
496 add_cflags(){
497 append CFLAGS "$@"
500 add_ldflags(){
501 append LDFLAGS "$@"
504 add_extralibs(){
505 append extralibs "$@"
508 check_cmd(){
509 log "$@"
510 "$@" >> $logfile 2>&1
513 check_cc(){
514 log check_cc "$@"
515 cat > $TMPC
516 log_file $TMPC
517 check_cmd $cc $CFLAGS "$@" -c -o $TMPO $TMPC
520 check_cpp(){
521 log check_cpp "$@"
522 cat > $TMPC
523 log_file $TMPC
524 check_cmd $cc $CFLAGS "$@" -E -o $TMPO $TMPC
527 check_as(){
528 log check_as "$@"
529 cat > $TMPC
530 log_file $TMPC
531 check_cmd $as $CFLAGS "$@" -c -o $TMPO $TMPC
534 check_asm(){
535 log check_asm "$@"
536 name="$1"
537 asm="$2"
538 shift 2
539 check_as "$@" <<EOF && enable $name || disable $name
540 void foo(void){ __asm__ volatile($asm); }
544 check_yasm(){
545 log check_yasm "$@"
546 echo "$1" > $TMPS
547 log_file $TMPS
548 shift 1
549 check_cmd $yasmexe $YASMFLAGS "$@" -o $TMPO $TMPS
552 check_ld(){
553 log check_ld "$@"
554 check_cc || return
555 flags=''
556 libs=''
557 for f; do
558 test "${f}" = "${f#-l}" && flags="$flags $f" || libs="$libs $f"
559 done
560 check_cmd $cc $LDFLAGS $flags -o $TMPE $TMPO $extralibs $libs
563 check_cflags(){
564 log check_cflags "$@"
565 check_cc "$@" <<EOF && add_cflags "$@"
566 int x;
570 check_ldflags(){
571 log check_ldflags "$@"
572 check_ld "$@" <<EOF && add_ldflags "$@"
573 int main(void){ return 0; }
577 check_header(){
578 log check_header "$@"
579 header=$1
580 shift
581 disable_safe $header
582 check_cpp "$@" <<EOF && enable_safe $header
583 #include <$header>
584 int x;
588 check_func(){
589 log check_func "$@"
590 func=$1
591 shift
592 disable $func
593 check_ld "$@" <<EOF && enable $func
594 extern int $func();
595 int main(void){ $func(); }
599 check_func_headers(){
600 log check_func_headers "$@"
601 headers=$1
602 func=$2
603 shift 2
604 disable $func
605 incs=""
606 for hdr in $headers; do
607 incs="$incs
608 #include <$hdr>"
609 done
610 check_ld "$@" <<EOF && enable $func && enable_safe $headers
611 $incs
612 int main(int argc, char **argv){
613 (void) $func;
614 return 0;
619 check_cpp_condition(){
620 log check_cpp_condition "$@"
621 header=$1
622 condition=$2
623 check_cpp <<EOF
624 #include <$header>
625 #if !($condition)
626 #error "unsatisfied condition: $condition"
627 #endif
631 check_lib(){
632 log check_lib "$@"
633 header="$1"
634 func="$2"
635 shift 2
636 temp_extralibs "$@"
637 check_header $header && check_func $func && add_extralibs "$@"
638 err=$?
639 restore_flags
640 return $err
643 check_lib2(){
644 log check_lib2 "$@"
645 headers="$1"
646 func="$2"
647 shift 2
648 temp_extralibs "$@"
649 check_func_headers "$headers" $func && add_extralibs "$@"
650 err=$?
651 restore_flags
652 return $err
655 check_exec(){
656 check_ld "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
659 check_exec_crash(){
660 code=`cat`
662 # exit() is not async signal safe. _Exit (C99) and _exit (POSIX)
663 # are safe but may not be available everywhere. Thus we use
664 # raise(SIGTERM) instead. The check is run in a subshell so we
665 # can redirect the "Terminated" message from the shell. SIGBUS
666 # is not defined by standard C so it is used conditionally.
668 (check_exec "$@") >> $logfile 2>&1 <<EOF
669 #include <signal.h>
670 static void sighandler(int sig){
671 raise(SIGTERM);
673 int main(void){
674 signal(SIGILL, sighandler);
675 signal(SIGFPE, sighandler);
676 signal(SIGSEGV, sighandler);
677 #ifdef SIGBUS
678 signal(SIGBUS, sighandler);
679 #endif
680 { $code }
685 check_type(){
686 log check_type "$@"
687 headers=$1
688 type=$2
689 shift 2
690 disable $type
691 incs=""
692 for hdr in $headers; do
693 incs="$incs
694 #include <$hdr>"
695 done
696 check_cc "$@" <<EOF && enable $type
697 $incs
698 $type v;
702 require(){
703 name="$1"
704 header="$2"
705 func="$3"
706 shift 3
707 check_lib $header $func "$@" || die "ERROR: $name not found"
710 require2(){
711 name="$1"
712 headers="$2"
713 func="$3"
714 shift 3
715 check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
718 check_foo_config(){
719 cfg=$1
720 pkg=$2
721 header=$3
722 func=$4
723 shift 4
724 disable $cfg
725 check_cmd ${pkg}-config --version
726 err=$?
727 if test "$err" = 0; then
728 temp_cflags `${pkg}-config --cflags`
729 temp_extralibs `${pkg}-config --libs`
730 check_lib "$@" $header $func && enable $cfg
732 return $err
735 apply(){
736 file=$1
737 shift
738 "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
741 # CONFIG_LIST contains configurable options, while HAVE_LIST is for
742 # system-dependent things.
744 COMPONENT_LIST="
745 bsfs
746 decoders
747 demuxers
748 encoders
749 filters
750 indevs
751 muxers
752 outdevs
753 parsers
754 protocols
757 CONFIG_LIST="
758 $COMPONENT_LIST
759 aandct
760 avfilter
761 avfilter_lavf
762 avisynth
763 beos_netserver
764 bzlib
765 fastdiv
766 ffmpeg
767 ffplay
768 ffserver
770 golomb
772 gprof
773 gray
774 hardcoded_tables
775 ipv6
776 libamr_nb
777 libamr_wb
778 libdc1394
779 libdirac
780 libfaac
781 libfaad
782 libfaadbin
783 libgsm
784 libmp3lame
785 libnut
786 libopenjpeg
787 libschroedinger
788 libspeex
789 libtheora
790 libvorbis
791 libx264
792 libxvid
793 mdct
794 memalign_hack
795 mlib
796 mpegaudio_hp
797 network
798 nonfree
799 postproc
800 powerpc_perf
801 rdft
802 shared
803 small
804 static
805 x11grab
806 zlib
809 THREADS_LIST='
810 beosthreads
811 os2threads
812 pthreads
813 w32threads
816 ARCH_LIST='
817 alpha
819 bfin
820 ia64
821 m68k
822 mips
823 parisc
825 s390
827 sparc
828 sparc64
830 x86_32
831 x86_64
834 ARCH_EXT_LIST='
835 altivec
836 amd3dnow
837 amd3dnowext
838 armv5te
839 armv6
840 armv6t2
841 armvfp
842 iwmmxt
845 mmx2
846 neon
847 ppc4xx
849 ssse3
853 HAVE_LIST="
854 $ARCH_EXT_LIST
855 $THREADS_LIST
856 alsa_asoundlib_h
857 altivec_h
858 arpa_inet_h
859 bswap
860 closesocket
861 cmov
862 conio_h
863 dcbzl
864 dev_bktr_ioctl_bt848_h
865 dev_bktr_ioctl_meteor_h
866 dev_ic_bt8xx_h
867 dev_video_meteor_ioctl_meteor_h
868 dev_video_bktr_ioctl_bt848_h
869 dlfcn_h
870 dlopen
871 dos_paths
872 ebp_available
873 ebx_available
874 fast_64bit
875 fast_cmov
876 fast_unaligned
877 fork
878 gethrtime
879 GetProcessTimes
880 getrusage
881 inet_aton
882 inline_asm
883 libdc1394_1
884 libdc1394_2
885 llrint
886 lrint
887 lrintf
888 machine_ioctl_bt848_h
889 machine_ioctl_meteor_h
890 malloc_h
891 memalign
892 mkstemp
894 posix_memalign
895 ppc64
896 round
897 roundf
899 sdl_video_size
900 setmode
901 socklen_t
902 soundcard_h
903 poll_h
904 sys_mman_h
905 sys_resource_h
906 sys_select_h
907 sys_soundcard_h
908 sys_videoio_h
909 ten_operands
910 termios_h
911 threads
912 truncf
913 winsock2_h
914 yasm
917 # options emitted with CONFIG_ prefix but not available on command line
918 CONFIG_EXTRA="
921 CMDLINE_SELECT="
922 $ARCH_EXT_LIST
923 $CONFIG_LIST
924 $THREADS_LIST
925 cross_compile
926 debug
927 extra_warnings
928 logging
929 optimizations
930 stripping
931 yasm
934 PATHS_LIST='
935 bindir
936 datadir
937 incdir
938 libdir
939 mandir
940 prefix
941 shlibdir
944 CMDLINE_SET="
945 $PATHS_LIST
946 arch
948 build_suffix
951 cross_prefix
952 extra_version
953 host_cc
954 host_cflags
955 host_ldflags
956 host_libs
957 logfile
959 source_path
960 sysinclude
961 sysroot
962 target_exec
963 target_os
964 target_path
967 # code dependency declarations
969 # architecture extensions
970 altivec_deps="ppc"
971 amd3dnow_deps="mmx"
972 amd3dnowext_deps="amd3dnow"
973 armv5te_deps="arm"
974 armv6_deps="arm"
975 armv6t2_deps="arm"
976 armvfp_deps="arm"
977 iwmmxt_deps="arm"
978 mmi_deps="mips"
979 mmx_deps="x86"
980 mmx2_deps="mmx"
981 neon_deps="arm"
982 ppc4xx_deps="ppc"
983 sse_deps="mmx"
984 ssse3_deps="sse"
985 vis_deps="sparc"
987 # decoders / encoders
988 aac_decoder_select="fft mdct"
989 ac3_decoder_deps="gpl"
990 ac3_decoder_select="fft mdct"
991 atrac3_decoder_select="fft mdct"
992 cavs_decoder_select="golomb"
993 cook_decoder_select="fft mdct"
994 cscd_decoder_suggest="zlib"
995 dca_decoder_select="fft mdct"
996 dnxhd_encoder_select="aandct"
997 dxa_decoder_select="zlib"
998 eac3_decoder_deps="gpl"
999 eac3_decoder_select="fft mdct"
1000 eatgq_decoder_select="aandct"
1001 eatqi_decoder_select="aandct"
1002 ffv1_decoder_select="golomb"
1003 flac_decoder_select="golomb"
1004 flac_encoder_select="golomb"
1005 flashsv_decoder_select="zlib"
1006 flashsv_encoder_select="zlib"
1007 flv_encoder_select="aandct"
1008 h261_encoder_select="aandct"
1009 h263_encoder_select="aandct"
1010 h263p_encoder_select="aandct"
1011 h264_decoder_select="golomb"
1012 h264_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1013 imc_decoder_select="fft mdct"
1014 jpegls_decoder_select="golomb"
1015 jpegls_encoder_select="golomb"
1016 ljpeg_encoder_select="aandct"
1017 loco_decoder_select="golomb"
1018 mjpeg_encoder_select="aandct"
1019 mpeg1video_encoder_select="aandct"
1020 mpeg2video_encoder_select="aandct"
1021 mpeg4_encoder_select="aandct"
1022 mpeg_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1023 mpeg1_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1024 mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h"
1025 msmpeg4v1_encoder_select="aandct"
1026 msmpeg4v2_encoder_select="aandct"
1027 msmpeg4v3_encoder_select="aandct"
1028 nellymoser_decoder_select="fft mdct"
1029 nellymoser_encoder_select="fft mdct"
1030 png_decoder_select="zlib"
1031 png_encoder_select="zlib"
1032 qdm2_decoder_select="fft mdct rdft"
1033 rv10_encoder_select="aandct"
1034 rv20_encoder_select="aandct"
1035 rv30_decoder_select="golomb"
1036 rv40_decoder_select="golomb"
1037 shorten_decoder_select="golomb"
1038 sonic_decoder_select="golomb"
1039 sonic_encoder_select="golomb"
1040 sonic_ls_encoder_select="golomb"
1041 svq3_decoder_select="golomb"
1042 svq3_decoder_suggest="zlib"
1043 tiff_decoder_suggest="zlib"
1044 tiff_encoder_suggest="zlib"
1045 tscc_decoder_select="zlib"
1046 vc1_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1047 vorbis_decoder_select="fft mdct"
1048 vorbis_encoder_select="fft mdct"
1049 wmav1_decoder_select="fft mdct"
1050 wmav1_encoder_select="fft mdct"
1051 wmav2_decoder_select="fft mdct"
1052 wmav2_encoder_select="fft mdct"
1053 wmv1_encoder_select="aandct"
1054 wmv2_encoder_select="aandct"
1055 wmv3_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1056 zlib_decoder_select="zlib"
1057 zlib_encoder_select="zlib"
1058 zmbv_decoder_select="zlib"
1059 zmbv_encoder_select="zlib"
1061 # external libraries
1062 libamr_nb_decoder_deps="libamr_nb"
1063 libamr_nb_encoder_deps="libamr_nb"
1064 libamr_wb_decoder_deps="libamr_wb"
1065 libamr_wb_encoder_deps="libamr_wb"
1066 libdirac_decoder_deps="libdirac !libschroedinger"
1067 libdirac_encoder_deps="libdirac"
1068 libfaac_encoder_deps="libfaac"
1069 libfaad_decoder_deps="libfaad"
1070 libfaadbin_decoder_extralibs='$ldl'
1071 libgsm_decoder_deps="libgsm"
1072 libgsm_encoder_deps="libgsm"
1073 libgsm_ms_decoder_deps="libgsm"
1074 libgsm_ms_encoder_deps="libgsm"
1075 libmp3lame_encoder_deps="libmp3lame"
1076 libopenjpeg_decoder_deps="libopenjpeg"
1077 libschroedinger_decoder_deps="libschroedinger"
1078 libschroedinger_encoder_deps="libschroedinger"
1079 libspeex_decoder_deps="libspeex"
1080 libtheora_encoder_deps="libtheora"
1081 libvorbis_encoder_deps="libvorbis"
1082 libx264_encoder_deps="libx264"
1083 libxvid_encoder_deps="libxvid"
1085 # demuxers / muxers
1086 ac3_demuxer_deps="ac3_parser"
1087 alsa_demuxer_deps="alsa_asoundlib_h snd_pcm_htimestamp"
1088 alsa_demuxer_extralibs="-lasound"
1089 alsa_muxer_deps="alsa_asoundlib_h"
1090 alsa_muxer_extralibs="-lasound"
1091 audio_beos_demuxer_deps="audio_beos"
1092 audio_beos_demuxer_extralibs="-lmedia -lbe"
1093 audio_beos_muxer_deps="audio_beos"
1094 audio_beos_muxer_extralibs="-lmedia -lbe"
1095 avisynth_demuxer_deps="avisynth"
1096 bktr_demuxer_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
1097 dirac_demuxer_deps="dirac_parser"
1098 dv1394_demuxer_deps="dv1394 dv_demuxer"
1099 libdc1394_demuxer_deps="libdc1394"
1100 libnut_demuxer_deps="libnut"
1101 libnut_muxer_deps="libnut"
1102 matroska_demuxer_suggest="zlib bzlib"
1103 mov_demuxer_suggest="zlib"
1104 mp3_demuxer_deps="mpegaudio_parser"
1105 oss_demuxer_deps_any="soundcard_h sys_soundcard_h"
1106 oss_muxer_deps_any="soundcard_h sys_soundcard_h"
1107 redir_demuxer_deps="network"
1108 rtp_muxer_deps="network rtp_protocol"
1109 rtsp_demuxer_deps="sdp_demuxer"
1110 sdp_demuxer_deps="rtp_protocol mpegts_demuxer"
1111 v4l_demuxer_deps="linux_videodev_h"
1112 v4l2_demuxer_deps_any="linux_videodev2_h sys_videoio_h"
1113 vfwcap_demuxer_deps="capCreateCaptureWindow"
1114 vfwcap_demuxer_extralibs="-lvfw32"
1115 x11_grab_device_demuxer_deps="x11grab XShmCreateImage"
1116 x11_grab_device_demuxer_extralibs="-lX11 -lXext"
1118 # protocols
1119 gopher_protocol_deps="network"
1120 http_protocol_deps="network"
1121 rtp_protocol_deps="udp_protocol"
1122 tcp_protocol_deps="network"
1123 udp_protocol_deps="network"
1125 # filters
1126 movie_filter_deps="avfilter_lavf"
1128 # programs
1129 ffplay_deps="sdl"
1130 ffserver_deps="ffm_muxer rtp_protocol rtsp_demuxer"
1131 ffserver_extralibs='$ldl'
1134 # default parameters
1136 logfile="config.err"
1138 # installation paths
1139 prefix_default="/usr/local"
1140 bindir_default='${prefix}/bin'
1141 datadir_default='${prefix}/share/ffmpeg'
1142 incdir_default='${prefix}/include'
1143 libdir_default='${prefix}/lib'
1144 mandir_default='${prefix}/share/man'
1145 shlibdir_default="$libdir_default"
1147 # toolchain
1148 ar="ar"
1149 as_default="gcc"
1150 cc_default="gcc"
1151 host_cc_default="gcc"
1152 ln_s="ln -sf"
1153 nm_default="nm"
1154 objformat="elf"
1155 ranlib="ranlib"
1156 strip="strip"
1157 yasmexe="yasm"
1159 # machine
1160 arch=`uname -m`
1161 cpu="generic"
1163 # OS
1164 target_os=$(tolower $(uname -s))
1166 # configurable options
1167 enable debug
1168 enable ffmpeg
1169 enable ffplay
1170 enable ffserver
1171 enable ipv6
1172 enable mpegaudio_hp
1173 enable network
1174 enable optimizations
1175 enable protocols
1176 enable static
1177 enable stripping
1179 # build settings
1180 add_cflags -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112
1181 SHFLAGS='-shared -Wl,-soname,$$(@F)'
1182 FFSERVERLDFLAGS=-Wl,-E
1183 LIBPREF="lib"
1184 LIBSUF=".a"
1185 FULLNAME='$(NAME)$(BUILDSUF)'
1186 LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
1187 SLIBPREF="lib"
1188 SLIBSUF=".so"
1189 SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
1190 SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
1191 SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
1192 LIB_INSTALL_EXTRA_CMD='$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
1194 host_cflags='-O3 -g -Wall'
1195 host_libs='-lm'
1197 target_path='.'
1199 # gcc stupidly only outputs the basename of targets with -MM, but we need the
1200 # full relative path for objects in subdirectories for non-recursive Make.
1201 DEPEND_CMD='$(CC) $(CFLAGS) -MM $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o,"'
1203 # find source path
1204 source_path="`dirname \"$0\"`"
1205 enable source_path_used
1206 if test -z "$source_path" -o "$source_path" = "." ; then
1207 source_path="`pwd`"
1208 disable source_path_used
1209 else
1210 source_path="`cd \"$source_path\"; pwd`"
1211 echo "$source_path" | grep -q '[[:blank:]]' &&
1212 die "Out of tree builds are impossible with whitespace in source path."
1215 FFMPEG_CONFIGURATION="$@"
1217 find_things(){
1218 thing=$1
1219 pattern=$2
1220 file=$source_path/$3
1221 sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
1224 ENCODER_LIST=$(find_things encoder ENC libavcodec/allcodecs.c)
1225 DECODER_LIST=$(find_things decoder DEC libavcodec/allcodecs.c)
1226 PARSER_LIST=$(find_things parser PARSER libavcodec/allcodecs.c)
1227 BSF_LIST=$(find_things bsf BSF libavcodec/allcodecs.c)
1228 MUXER_LIST=$(find_things muxer _MUX libavformat/allformats.c)
1229 DEMUXER_LIST=$(find_things demuxer DEMUX libavformat/allformats.c)
1230 OUTDEV_LIST=$(find_things muxer _MUX libavdevice/alldevices.c)
1231 INDEV_LIST=$(find_things demuxer DEMUX libavdevice/alldevices.c)
1232 PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
1233 FILTER_LIST=$(find_things filter FILTER libavfilter/allfilters.c)
1235 enable $ARCH_EXT_LIST \
1236 $DECODER_LIST \
1237 $ENCODER_LIST \
1238 $PARSER_LIST \
1239 $BSF_LIST \
1240 $DEMUXER_LIST \
1241 $MUXER_LIST \
1242 $FILTER_LIST \
1243 $PROTOCOL_LIST \
1244 $INDEV_LIST \
1245 $OUTDEV_LIST \
1247 die_unknown(){
1248 echo "Unknown option \"$1\"."
1249 echo "See $0 --help for available options."
1250 exit 1
1253 show_list() {
1254 suffix=_$1
1255 shift
1256 echo $* | sed s/$suffix//g | tr ' ' '\n' | sort
1257 exit 0
1260 for opt do
1261 optval="${opt#*=}"
1262 case "$opt" in
1263 --extra-cflags=*) add_cflags $optval
1265 --extra-ldflags=*) add_ldflags $optval
1267 --extra-libs=*) add_extralibs $optval
1269 --disable-devices) disable $INDEV_LIST $OUTDEV_LIST
1271 --enable-debug=*) debuglevel="$optval"
1273 --enable-*=*|--disable-*=*)
1274 eval `echo "$opt" | sed 's/=/-/;s/--/action=/;s/-/ thing=/;s/-/ name=/'`
1275 case "$thing" in
1276 encoder|decoder|muxer|demuxer|parser|bsf|protocol|filter) $action ${optval}_${thing} ;;
1277 *) die_unknown "$opt" ;;
1278 esac
1280 --enable-?*|--disable-?*)
1281 eval `echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g'`
1282 if is_in $option $COMPONENT_LIST; then
1283 eval $action \$$(toupper ${option%s})_LIST
1284 elif is_in $option $CMDLINE_SELECT; then
1285 $action $option
1286 else
1287 die_unknown $opt
1290 --list-*)
1291 NAME="${opt#--list-}"
1292 is_in $NAME $COMPONENT_LIST || die_unknown $opt
1293 NAME=${NAME%s}
1294 eval show_list $NAME \$$(toupper $NAME)_LIST
1296 --help|-h) show_help
1299 optname="${opt%%=*}"
1300 optname="${optname#--}"
1301 optname=$(echo "$optname" | sed 's/-/_/g')
1302 is_in $optname $CMDLINE_SET || die_unknown $opt
1303 eval $optname='$optval'
1305 esac
1306 done
1308 disabled logging && logfile=/dev/null
1310 echo "# $0 $@" > $logfile
1311 set >> $logfile
1313 test -n "$cross_prefix" && enable cross_compile
1315 ar="${cross_prefix}${ar}"
1316 as_default="${cross_prefix}${as_default}"
1317 cc_default="${cross_prefix}${cc_default}"
1318 nm_default="${cross_prefix}${nm_default}"
1319 ranlib="${cross_prefix}${ranlib}"
1320 strip="${cross_prefix}${strip}"
1322 sysinclude_default="${sysroot}/usr/include"
1324 set_default as cc nm sysinclude
1325 enabled cross_compile || host_cc_default=$cc
1326 set_default host_cc
1328 case $target_os in
1329 mingw32*|cygwin*|*-dos|freedos|opendos|os/2*) EXESUF=.exe ;;
1330 esac
1332 # set temporary file name
1333 : ${TMPDIR:=$TEMPDIR}
1334 : ${TMPDIR:=$TMP}
1335 : ${TMPDIR:=/tmp}
1337 if ! check_cmd type mktemp; then
1338 # simple replacement for missing mktemp
1339 # NOT SAFE FOR GENERAL USE
1340 mktemp(){
1341 echo "${2%XXX*}.${HOSTNAME}.${UID}.$$"
1345 tmpfile(){
1346 tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
1347 (set -C; exec > $tmp) 2>/dev/null ||
1348 die "Unable to create temoporary file in $TMPDIR."
1349 append TMPFILES $tmp
1350 eval $1=$tmp
1353 trap 'rm -f -- $TMPFILES' EXIT
1354 trap exit HUP INT TERM
1356 tmpfile TMPC .c
1357 tmpfile TMPE $EXESUF
1358 tmpfile TMPH .h
1359 tmpfile TMPO .o
1360 tmpfile TMPS .S
1361 tmpfile TMPSH .sh
1363 unset -f mktemp
1365 # make sure we can execute files in $TMPDIR
1366 cat > $TMPSH 2>> $logfile <<EOF
1367 #! /bin/sh
1369 chmod +x $TMPSH >> $logfile 2>&1
1370 if ! $TMPSH >> $logfile 2>&1; then
1371 cat <<EOF
1372 Unable to create and execute files in $TMPDIR. Set the TMPDIR environment
1373 variable to another directory and make sure that it is not mounted noexec.
1375 die "Sanity test failed."
1378 if $cc --version 2>/dev/null | grep -qi gcc; then
1379 cc_type=gcc
1380 elif $cc --version 2>/dev/null | grep -q Intel; then
1381 cc_type=icc
1382 elif $cc -v 2>&1 | grep -q xlc; then
1383 cc_type=xlc
1384 elif $cc -V 2>/dev/null | grep -q Compaq; then
1385 cc_type=ccc
1386 DEPEND_CMD='$(CC) $(CFLAGS) -M $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o,"'
1387 debuglevel=3
1388 add_ldflags -Wl,-z,now # calls to libots crash without this
1389 elif $cc --vsn 2>/dev/null | grep -q RVCT; then
1390 test -d "$sysroot" || die "No valid sysroot specified."
1391 cc_type=armcc
1392 armcc_conf="$PWD/armcc.conf"
1393 $cc --arm_linux_configure \
1394 --arm_linux_config_file="$armcc_conf" \
1395 --configure_sysroot="$sysroot" \
1396 --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
1397 die "Error creating armcc configuration file."
1398 cc="$cc --arm_linux_config_file=$armcc_conf --translate_gcc"
1401 test -n "$cc_type" && enable $cc_type || echolog "Unknown C compiler $cc"
1403 if test -n "$sysroot"; then
1404 case "$cc_type" in
1405 gcc)
1406 add_cflags --sysroot="$sysroot"
1407 add_ldflags --sysroot="$sysroot"
1409 esac
1412 # compiler sanity check
1413 check_exec <<EOF
1414 int main(void){ return 0; }
1416 if test "$?" != 0; then
1417 echo "$cc is unable to create an executable file."
1418 if test -z "$cross_prefix" && ! enabled cross_compile ; then
1419 echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
1420 echo "Only do this if you know what cross compiling means."
1422 die "C compiler test failed."
1425 check_cflags -std=c99
1426 check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cflags -D_FILE_OFFSET_BITS=64
1427 #include <stdlib.h>
1429 check_cc -D_LARGEFILE_SOURCE <<EOF && add_cflags -D_LARGEFILE_SOURCE
1430 #include <stdlib.h>
1433 case "$arch" in
1434 alpha)
1435 arch="alpha"
1436 enable fast_64bit
1437 check_cflags -mieee
1439 arm|armv[4567]*l)
1440 arch="arm"
1442 avr32)
1444 bfin)
1445 arch="bfin"
1447 ia64)
1448 arch="ia64"
1449 enable fast_64bit
1451 m68k)
1452 arch="m68k"
1454 mips|mipsel|IP*)
1455 arch="mips"
1457 mips64)
1458 arch="mips"
1459 enable fast_64bit
1461 parisc|hppa)
1462 arch="parisc"
1464 parisc64|hppa64)
1465 arch="parisc"
1466 enable fast_64bit
1468 "Power Macintosh"|ppc|powerpc)
1469 arch="ppc"
1470 enable fast_unaligned
1472 ppc64)
1473 arch="ppc"
1474 enable fast_64bit
1475 enable fast_unaligned
1477 s390|s390x)
1478 arch="s390"
1480 sh4|sh)
1481 arch="sh4"
1483 sparc)
1484 arch="sparc"
1486 sun4u|sparc64)
1487 arch="sparc"
1488 subarch="sparc64"
1489 enable fast_64bit
1491 i386|i486|i586|i686|i86pc|BePC)
1492 arch="x86"
1493 subarch="x86_32"
1494 enable fast_unaligned
1496 x86_64|amd64)
1497 arch="x86"
1498 subarch="x86_32"
1499 enable cmov
1500 enable fast_cmov
1501 enable fast_unaligned
1502 check_cc <<EOF && enable fast_64bit && subarch="x86_64"
1503 int test[sizeof(char*) - 7];
1507 arch="unknown"
1509 esac
1511 enable $arch $subarch
1513 # OS specific
1514 case $target_os in
1515 beos|haiku|zeta)
1516 prefix_default="$HOME/config"
1517 # helps building libavcodec
1518 add_cflags -DPIC -fomit-frame-pointer
1519 # 3 gcc releases known for BeOS, each with ugly bugs
1520 gcc_version="`$cc -v 2>&1 | grep version | cut -d ' ' -f3-`"
1521 case "$gcc_version" in
1522 2.9-beos-991026*|2.9-beos-000224*) echo "R5/GG gcc"
1523 disable mmx
1525 *20010315*) echo "BeBits gcc"
1526 add_cflags -fno-expensive-optimizations
1528 esac
1529 SHFLAGS=-nostart
1530 # enable BeOS things
1531 enable audio_beos
1532 # no need for libm, but the inet stuff
1533 # Check for BONE
1534 # XXX: actually should check for NOT net_server
1535 if echo $BEINCLUDES | grep -q 'headers/be/bone'; then
1536 network_extralibs="-lbind -lsocket"
1537 else
1538 enable beos_netserver
1539 network_extralibs="-lnet"
1540 fi ;;
1541 sunos)
1542 FFSERVERLDFLAGS=""
1543 SHFLAGS='-shared -Wl,-h,$$(@F)'
1544 network_extralibs="-lsocket -lnsl"
1545 add_cflags -D__EXTENSIONS__
1547 netbsd)
1548 oss_demuxer_extralibs="-lossaudio"
1549 oss_muxer_extralibs="-lossaudio"
1551 openbsd)
1552 disable need_memalign
1553 LIBOBJFLAGS='$(PIC)'
1554 SHFLAGS='-shared'
1555 oss_demuxer_extralibs="-lossaudio"
1556 oss_muxer_extralibs="-lossaudio"
1558 freebsd)
1559 disable need_memalign
1561 bsd/os)
1562 osextralibs="-lpoll -lgnugetopt"
1563 strip="strip -d"
1565 darwin)
1566 disable need_memalign
1567 SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR) -Wl,-read_only_relocs,suppress'
1568 strip="strip -x"
1569 FFLDFLAGS="-Wl,-dynamic,-search_paths_first"
1570 SLIBSUF=".dylib"
1571 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
1572 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
1573 FFSERVERLDFLAGS=-Wl,-bind_at_load
1574 objformat="macho"
1575 enabled x86_64 && objformat="macho64"
1577 mingw32*)
1578 target_os=mingw32
1579 LIBTARGET=i386
1580 if enabled x86_64; then
1581 disable need_memalign
1582 LIBTARGET=x64
1584 shlibdir_default="$bindir_default"
1585 disable ffserver
1586 SLIBPREF=""
1587 SLIBSUF=".dll"
1588 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1589 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1590 SLIB_EXTRA_CMD='-lib /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)'
1591 SLIB_INSTALL_EXTRA_CMD='-install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"; \
1592 install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)"'
1593 SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"'
1594 SHFLAGS='-shared -Wl,--output-def,$$(@:$(SLIBSUF)=.def) -Wl,--enable-runtime-pseudo-reloc -Wl,--enable-auto-image-base'
1595 objformat="win32"
1596 enable dos_paths
1597 if ! enabled x86_64; then
1598 check_cpp_condition _mingw.h "(__MINGW32_MAJOR_VERSION > 3) || (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
1599 die "ERROR: MinGW runtime version must be >= 3.15."
1600 enabled_any avisynth vfwcap_demuxer &&
1601 { check_cpp_condition w32api.h "(__W32API_MAJOR_VERSION > 3) || (__W32API_MAJOR_VERSION == 3 && __W32API_MINOR_VERSION >= 13)" ||
1602 die "ERROR: avisynth and vfwcap_demuxer require w32api version 3.13 or later."; }
1605 cygwin*)
1606 target_os=cygwin
1607 shlibdir_default="$bindir_default"
1608 SLIBPREF="cyg"
1609 SLIBSUF=".dll"
1610 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1611 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1612 SHFLAGS='-shared -Wl,--enable-auto-image-base'
1613 objformat="win32"
1614 enable dos_paths
1616 *-dos|freedos|opendos)
1617 disable ffplay ffserver
1618 disable $INDEV_LIST $OUTDEV_LIST
1619 network_extralibs="-lsocket"
1620 objformat="coff"
1621 enable dos_paths
1623 linux)
1624 enable dv1394
1626 irix*)
1627 target_os=irix
1628 ranlib="echo ignoring ranlib"
1630 os/2*)
1631 strip="lxlite"
1632 ln_s="cp -f"
1633 FFLDFLAGS="-Zomf -Zbin-files -Zargs-wild -Zmap"
1634 SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
1635 FFSERVERLDFLAGS=""
1636 LIBSUF="_s.a"
1637 SLIBPREF=""
1638 SLIBSUF=".dll"
1639 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
1640 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
1641 SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
1642 echo PROTMODE >> $(SUBDIR)$(NAME).def; \
1643 echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
1644 echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
1645 echo EXPORTS >> $(SUBDIR)$(NAME).def; \
1646 emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
1647 SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
1648 emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
1649 SLIB_INSTALL_EXTRA_CMD='install -m 644 $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib "$(LIBDIR)"'
1650 SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.a "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.lib'
1651 enable dos_paths
1655 die "Unknown OS '$target_os'."
1657 esac
1659 set_default $PATHS_LIST
1661 add_extralibs $osextralibs
1663 # Combine FFLDFLAGS and the LDFLAGS environment variable.
1664 LDFLAGS="$FFLDFLAGS $LDFLAGS"
1666 # we need to build at least one lib type
1667 if ! enabled_any static shared; then
1668 cat <<EOF
1669 At least one library type must be built.
1670 Specify --enable-static to build the static libraries or --enable-shared to
1671 build the shared libraries as well. To only build the shared libraries specify
1672 --disable-static in addition to --enable-shared.
1674 exit 1;
1677 disabled static && LIBNAME=""
1679 if enabled_any libfaad libfaadbin ; then
1680 if check_header faad.h; then
1681 check_cc <<EOF
1682 #include <faad.h>
1683 #ifndef FAAD2_VERSION
1684 ok faad1
1685 #endif
1686 int main(void) { return 0; }
1688 test $? = 0 && enable libfaad2
1689 else
1690 die "FAAD test failed."
1695 if ! enabled gpl; then
1696 die_gpl_disabled(){
1697 name=$1
1698 shift
1699 enabled_any $@ && die "$name is under GPL and --enable-gpl is not specified."
1701 die_gpl_disabled "The Postprocessing code" postproc
1702 die_gpl_disabled "libx264" libx264
1703 die_gpl_disabled "libxvidcore" libxvid
1704 die_gpl_disabled "FAAD2" libfaad2
1705 die_gpl_disabled "The X11 grabber" x11grab
1708 if ! enabled nonfree && enabled_any libamr_nb libamr_wb; then
1709 die "libamr is nonfree and --enable-nonfree is not specified."
1712 check_deps $ARCH_EXT_LIST
1714 test -z "$need_memalign" && need_memalign="$mmx"
1716 #Darwin CC versions
1717 if test $target_os = darwin; then
1718 if enabled xlc; then
1719 add_cflags -qpdf2 -qlanglvl=extc99 -qmaxmem=-1 -qarch=auto -qtune=auto
1720 else
1721 add_cflags -pipe
1722 check_cflags -force_cpusubtype_ALL
1723 check_cflags -Wno-sign-compare
1724 enabled shared || check_cflags -mdynamic-no-pic
1728 disabled optimizations || check_cflags -fomit-frame-pointer
1730 # Add processor-specific flags
1731 if test $cpu != "generic"; then
1732 warn_altivec(){
1733 $1 altivec && echo "WARNING: Tuning for $2 but AltiVec $1.";
1735 case $cpu in
1736 601|ppc601|PowerPC601)
1737 add_cflags -mcpu=601
1738 warn_altivec enabled PPC601
1740 603*|ppc603*|PowerPC603*)
1741 add_cflags -mcpu=603
1742 warn_altivec enabled PPC603
1744 604*|ppc604*|PowerPC604*)
1745 add_cflags -mcpu=604
1746 warn_altivec enabled PPC604
1748 G3|g3|75*|ppc75*|PowerPC75*)
1749 add_cflags -mcpu=750 -mpowerpc-gfxopt
1750 warn_altivec enabled PPC75x
1752 G4|g4|745*|ppc745*|PowerPC745*)
1753 add_cflags -mcpu=7450 -mpowerpc-gfxopt
1754 warn_altivec disabled PPC745x
1756 74*|ppc74*|PowerPC74*)
1757 add_cflags -mcpu=7400 -mpowerpc-gfxopt
1758 warn_altivec disabled PPC74xx
1760 G5|g5|970|ppc970|PowerPC970|power4*|Power4*)
1761 add_cflags -mcpu=970 -mpowerpc-gfxopt -mpowerpc64
1762 warn_altivec disabled PPC970
1763 enable ppc64
1765 Cell|CELL|cell)
1766 add_cflags -mcpu=cell
1767 warn_altivec disabled Cell
1768 enable ppc64
1770 # targets that do NOT support conditional mov (cmov)
1771 i[345]86|pentium|pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
1772 add_cflags -march=$cpu
1773 disable cmov
1775 # targets that do support conditional mov (cmov)
1776 i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2)
1777 add_cflags -march=$cpu
1778 enable cmov
1779 enable fast_cmov
1781 # targets that do support conditional mov but on which it's slow
1782 pentium4|pentium4m|prescott|nocona)
1783 add_cflags -march=$cpu
1784 enable cmov
1785 disable fast_cmov
1787 sparc64)
1788 add_cflags -mcpu=v9
1790 arm11*|cortex*)
1791 add_cflags -mcpu=$cpu
1792 enable fast_unaligned
1794 armv*)
1795 add_cflags -march=$cpu
1797 arm*)
1798 add_cflags -mcpu=$cpu
1800 ev4|ev45|ev5|ev56|pca56|ev6|ev67)
1801 enabled ccc && add_cflags -arch $cpu || add_cflags -mcpu=$cpu
1804 echo "WARNING: Unknown CPU \"$cpu\", ignored."
1806 esac
1809 check_cc <<EOF || die "Symbol mangling check failed."
1810 int ff_extern;
1812 sym=$($nm -P -g $TMPO | grep ff_extern)
1813 extern_prefix=${sym%%ff_extern*}
1815 check_cc <<EOF && enable inline_asm
1816 void foo(void) { __asm__ volatile ("" ::); }
1819 if enabled x86; then
1820 # check whether EBP is available on x86
1821 # As 'i' is stored on the stack, this program will crash
1822 # if the base pointer is used to access it because the
1823 # base pointer is cleared in the inline assembly code.
1824 check_exec_crash <<EOF && enable ebp_available
1825 volatile int i=0;
1826 __asm__ volatile (
1827 "xorl %%ebp, %%ebp"
1828 ::: "%ebp");
1829 return i;
1832 # check wether EBX is available on x86
1833 check_asm ebx_available '"":::"%ebx"'
1835 # check whether more than 10 operands are supported
1836 check_cc <<EOF && enable ten_operands
1837 int main(void) {
1838 int x=0;
1839 __asm__ volatile(
1841 :"+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x)
1843 return 0;
1847 # check whether binutils is new enough to compile SSSE3/MMX2
1848 enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
1849 enabled mmx2 && check_asm mmx2 '"movss %xmm0, %xmm0"'
1851 check_asm bswap '"bswap %%eax" ::: "%eax"'
1853 YASMFLAGS="-f $objformat -DARCH_$(toupper $subarch)"
1854 enabled x86_64 && append YASMFLAGS "-m amd64"
1855 enabled_all x86_64 shared && append YASMFLAGS "-DPIC"
1856 case "$objformat" in
1857 elf) enabled debug && append YASMFLAGS "-g dwarf2" ;;
1858 macho64) append YASMFLAGS "-DPIC -DPREFIX" ;;
1859 *) append YASMFLAGS "-DPREFIX" ;;
1860 esac
1861 disabled yasm || { check_yasm "pabsw xmm0, xmm0" && enable yasm; }
1864 # check for assembler specific support
1866 enabled ppc && check_asm dcbzl '"dcbzl 0, 1"'
1867 enabled ppc && check_asm ppc4xx '"maclhw r10, r11, r12"'
1869 # check for SIMD availability
1871 # AltiVec flags: The FSF version of GCC differs from the Apple version
1872 if enabled altivec; then
1873 check_cflags -maltivec -mabi=altivec &&
1874 { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
1875 check_cflags -faltivec
1877 # check if our compiler supports Motorola AltiVec C API
1878 check_cc <<EOF || disable altivec
1879 $inc_altivec_h
1880 int main(void) {
1881 vector signed int v1, v2, v3;
1882 v1 = vec_add(v2,v3);
1883 return 0;
1887 # check if our compiler supports braces for vector declarations
1888 check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
1889 $inc_altivec_h
1890 int main (void) { (vector int) {1}; return 0; }
1894 # We have to check if pld is a nop and disable it.
1895 enabled arm && check_asm pld '"pld [r0]"'
1896 enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
1897 enabled armv6 && check_asm armv6 '"sadd16 r0, r0, r0"'
1898 enabled armv6t2 && check_asm armv6t2 '"movt r0, #0"'
1899 enabled armvfp && check_asm armvfp '"fadds s0, s0, s0"'
1900 enabled iwmmxt && check_asm iwmmxt '"wunpckelub wr6, wr4"'
1901 enabled mmi && check_asm mmi '"lq $2, 0($2)"'
1902 enabled neon && check_asm neon '"vadd.i16 q0, q0, q0"'
1903 enabled vis && check_asm vis '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc
1905 enabled vis && add_cflags -mcpu=ultrasparc -mtune=ultrasparc
1907 # ---
1908 # big/little-endian test
1909 check_cc <<EOF || die "endian test failed"
1910 unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
1912 od -A n -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
1914 # ---
1915 # check availability of some header files
1917 if check_func dlopen; then
1918 ldl=
1919 elif check_func dlopen -ldl; then
1920 ldl=-ldl
1923 # Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
1924 check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
1926 check_func fork
1927 check_func gethrtime
1928 check_func getrusage
1929 check_func inet_aton $network_extralibs
1930 check_func memalign
1931 check_func mkstemp
1932 check_func posix_memalign
1933 check_func_headers io.h setmode
1934 check_func_headers windows.h GetProcessTimes
1936 check_header conio.h
1937 check_header dlfcn.h
1938 check_header malloc.h
1939 check_header poll.h
1940 check_header sys/mman.h
1941 check_header sys/resource.h
1942 check_header sys/select.h
1943 check_header termios.h
1944 check_header vdpau/vdpau.h
1945 check_header vdpau/vdpau_x11.h
1946 check_header X11/extensions/XvMClib.h
1948 if ! enabled_any memalign memalign_hack posix_memalign && enabled need_memalign ; then
1949 die "Error, no aligned memory allocator but SSE enabled, disable it or use --enable-memalign-hack."
1952 disabled zlib || check_lib zlib.h zlibVersion -lz || disable zlib
1953 disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
1955 # check for some common methods of building with pthread support
1956 # do this before the optional library checks as some of them require pthreads
1957 if enabled pthreads; then
1958 if check_func pthread_create; then
1960 elif check_func pthread_create -pthread; then
1961 add_cflags -pthread
1962 add_extralibs -pthread
1963 elif check_func pthread_create -pthreads; then
1964 add_cflags -pthreads
1965 add_extralibs -pthreads
1966 elif check_func pthread_create -lpthreadGC2; then
1967 add_extralibs -lpthreadGC2
1968 elif ! check_lib pthread.h pthread_create -lpthread; then
1969 die "ERROR: can't find pthreads library"
1973 for thread in $THREADS_LIST; do
1974 if enabled $thread; then
1975 test -n "$thread_type" &&
1976 die "ERROR: Only one thread type must be selected." ||
1977 thread_type="$thread"
1979 done
1981 check_lib math.h sin -lm
1983 # test for C99 functions in math.h
1984 for func in llrint lrint lrintf round roundf truncf; do
1985 check_exec <<EOF && enable $func || disable $func
1986 #include <math.h>
1987 int main(void) { return ($func(3.999f) > 0)?0:1; }
1989 done
1991 # these are off by default, so fail if requested and not available
1992 enabled avisynth && require2 vfw32 "windows.h vfw.h" AVIFileInit -lvfw32
1993 enabled libamr_nb && require libamrnb amrnb/interf_dec.h Speech_Decode_Frame_init -lamrnb -lm
1994 enabled libamr_wb && require libamrwb amrwb/dec_if.h D_IF_init -lamrwb -lm
1995 enabled libdirac && add_cflags $(pkg-config --cflags dirac) &&
1996 require libdirac libdirac_decoder/dirac_parser.h dirac_decoder_init -ldirac_decoder &&
1997 require libdirac libdirac_encoder/dirac_encoder.h dirac_encoder_init -ldirac_encoder
1998 enabled libfaac && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
1999 enabled libfaad && require2 libfaad faad.h faacDecOpen -lfaad
2000 enabled libgsm && require libgsm gsm.h gsm_create -lgsm
2001 enabled libmp3lame && require libmp3lame lame/lame.h lame_init -lmp3lame -lm
2002 enabled libnut && require libnut libnut.h nut_demuxer_init -lnut
2003 enabled libopenjpeg && require libopenjpeg openjpeg.h opj_version -lopenjpeg
2004 enabled libschroedinger && add_cflags $(pkg-config --cflags schroedinger-1.0) &&
2005 require libschroedinger schroedinger/schro.h schro_init $(pkg-config --libs schroedinger-1.0)
2006 enabled libspeex && require libspeex speex/speex.h speex_decoder_init -lspeex
2007 enabled libtheora && require libtheora theora/theora.h theora_info_init -ltheora -logg
2008 enabled libvorbis && require libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
2009 enabled libx264 && require libx264 x264.h x264_encoder_open -lx264 -lm &&
2010 { check_cpp_condition x264.h "X264_BUILD >= 65" ||
2011 die "ERROR: libx264 version must be >= 0.65."; }
2012 enabled libxvid && require libxvid xvid.h xvid_global -lxvidcore
2013 enabled mlib && require mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
2015 # libdc1394 check
2016 if enabled libdc1394; then
2017 { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
2018 enable libdc1394_2; } ||
2019 { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
2020 enable libdc1394_1; } ||
2021 die "ERROR: No version of libdc1394 found "
2025 _restrict=
2026 for restrict_keyword in restrict __restrict__ __restrict; do
2027 check_cc <<EOF && _restrict=$restrict_keyword && break
2028 void foo(char * $restrict_keyword p);
2030 done
2032 ##########################################
2033 # SDL check
2035 disable sdl_too_old
2036 disable sdl
2037 SDL_CONFIG="${cross_prefix}sdl-config"
2038 if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
2039 sdl_cflags=`"${SDL_CONFIG}" --cflags`
2040 temp_cflags $sdl_cflags
2041 temp_extralibs `"${SDL_CONFIG}" --libs`
2042 if check_lib2 SDL.h SDL_Init; then
2043 _sdlversion=`"${SDL_CONFIG}" --version | sed 's/[^0-9]//g'`
2044 if test "$_sdlversion" -lt 121 ; then
2045 enable sdl_too_old
2046 else
2047 enable sdl
2048 check_cc $sdl_cflags <<EOF && enable sdl_video_size
2049 #include <SDL.h>
2050 int main(int argc, char **argv){
2051 const SDL_VideoInfo *vi = SDL_GetVideoInfo();
2052 int w = vi->current_w;
2053 return 0;
2058 restore_flags
2061 texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
2063 ##########################################
2064 # Network check
2066 if enabled network; then
2067 check_type "sys/types.h sys/socket.h" socklen_t
2068 # Prefer arpa/inet.h over winsock2
2069 if check_header arpa/inet.h ; then
2070 check_func closesocket
2071 elif check_header winsock2.h ; then
2072 network_extralibs="-lws2_32"
2073 check_type ws2tcpip.h socklen_t
2074 check_func_headers winsock2.h closesocket
2078 ##########################################
2079 # IPv6 check
2081 enabled network && enabled ipv6 && check_ld <<EOF && enable ipv6 || disable ipv6
2082 #include <sys/types.h>
2083 #include <sys/socket.h>
2084 #include <netinet/in.h>
2085 #include <netdb.h>
2086 int main(void) {
2087 struct sockaddr_storage saddr;
2088 struct ipv6_mreq mreq6;
2089 getaddrinfo(0,0,0,0);
2090 getnameinfo(0,0,0,0,0,0,0);
2091 IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
2095 check_header linux/videodev.h
2096 check_header linux/videodev2.h
2097 check_header sys/videoio.h
2099 check_func_headers "windows.h vfw.h" capCreateCaptureWindow -lvfw32
2101 # check for ioctl_meteor.h, ioctl_bt848.h and alternatives
2102 { check_header dev/bktr/ioctl_meteor.h &&
2103 check_header dev/bktr/ioctl_bt848.h; } ||
2104 { check_header machine/ioctl_meteor.h &&
2105 check_header machine/ioctl_bt848.h; } ||
2106 { check_header dev/video/meteor/ioctl_meteor.h &&
2107 check_header dev/video/bktr/ioctl_bt848.h; } ||
2108 check_header dev/ic/bt8xx.h
2110 check_header sys/soundcard.h
2111 check_header soundcard.h
2113 check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
2115 # deal with the X11 frame grabber
2116 enabled x11grab &&
2117 check_header X11/Xlib.h &&
2118 check_header X11/extensions/XShm.h &&
2119 check_func XOpenDisplay -lX11 &&
2120 check_func XShmCreateImage -lX11 -lXext
2122 enabled debug && add_cflags -g"$debuglevel"
2124 # add some useful compiler flags if supported
2125 check_cflags -Wdeclaration-after-statement
2126 check_cflags -Wall
2127 check_cflags -Wno-switch
2128 check_cflags -Wdisabled-optimization
2129 check_cflags -Wpointer-arith
2130 check_cflags -Wredundant-decls
2131 check_cflags -Wno-pointer-sign
2132 check_cflags -Wcast-qual
2133 check_cflags -Wwrite-strings
2134 check_cflags -Wtype-limits
2135 check_cflags -Wundef
2136 enabled extra_warnings && check_cflags -Winline
2138 # add some linker flags
2139 check_ldflags -Wl,--warn-common
2140 check_ldflags -Wl,--as-needed
2141 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'
2142 check_ldflags -Wl,-Bsymbolic
2144 if enabled small; then
2145 check_cflags -Os # not all compilers support -Os
2146 optimizations="small"
2147 elif enabled optimizations; then
2148 if enabled xlc; then
2149 add_cflags -O5
2150 add_ldflags -O5
2151 elif enabled ccc; then
2152 add_cflags -fast
2153 else
2154 add_cflags -O3
2157 check_cflags -fno-math-errno
2158 check_cflags -fno-signed-zeros
2160 # add some flags for Intel C Compiler
2161 if enabled icc; then
2162 # Just warnings, no remarks
2163 check_cflags -w1
2164 # -wd: Disable following warnings
2165 # 144, 167, 556: -Wno-pointer-sign
2166 # 10006: ignoring unknown option -fno-signed-zeros
2167 # 10156: ignoring option '-W'; no argument required
2168 check_cflags -wd144,167,556,10006,10156
2169 # 11030: Warning unknown option --as-needed
2170 # 10156: ignoring option '-export'; no argument required
2171 check_ldflags -wd10156,11030
2172 # Allow to compile with optimizations
2173 check_ldflags -march=$cpu
2174 elif enabled ccc; then
2175 # disable some annoying warnings
2176 add_cflags -msg_disable cvtu32to64
2177 add_cflags -msg_disable embedcomment
2178 add_cflags -msg_disable needconstext
2179 add_cflags -msg_disable nomainieee
2180 add_cflags -msg_disable ptrmismatch1
2181 add_cflags -msg_disable unreachcode
2184 # PIC flags for shared library objects where they are needed
2185 if enabled shared; then
2186 # LIBOBJFLAGS may have already been set in the OS configuration
2187 if test -z "$LIBOBJFLAGS" ; then
2188 case "${subarch-$arch}" in
2189 x86_64|ia64|alpha|sparc*|power*|parisc*|mips*) LIBOBJFLAGS='$(PIC)' ;;
2190 esac
2194 if enabled gprof; then
2195 add_cflags -p
2196 add_ldflags -p
2199 # Find out if the .align argument is a power of two or not.
2200 check_asm asmalign_pot '".align 3"'
2202 enabled_any $DECODER_LIST && enable decoders
2203 enabled_any $ENCODER_LIST && enable encoders
2204 enabled_any $BSF_LIST && enable bsfs
2205 enabled_any $DEMUXER_LIST && enable demuxers
2206 enabled_any $MUXER_LIST && enable muxers
2207 enabled_any $FILTER_LIST && enable filters
2208 enabled_any $INDEV_LIST && enable demuxers
2209 enabled_any $OUTDEV_LIST && enable muxers
2210 enabled_any $PROTOCOL_LIST && enable protocols
2212 enabled_any $THREADS_LIST && enable threads
2214 check_deps $CONFIG_LIST \
2215 $CONFIG_EXTRA \
2216 $HAVE_LIST \
2217 $DECODER_LIST \
2218 $ENCODER_LIST \
2219 $PARSER_LIST \
2220 $BSF_LIST \
2221 $DEMUXER_LIST \
2222 $MUXER_LIST \
2223 $FILTER_LIST \
2224 $INDEV_LIST \
2225 $OUTDEV_LIST \
2226 $PROTOCOL_LIST \
2228 echo "install prefix $prefix"
2229 echo "source path $source_path"
2230 echo "C compiler $cc"
2231 echo ".align is power-of-two $asmalign_pot"
2232 echo "ARCH $arch ($cpu)"
2233 if test "$build_suffix" != ""; then
2234 echo "build suffix $build_suffix"
2236 if test "$extra_version" != ""; then
2237 echo "version string suffix $extra_version"
2239 echo "big-endian ${bigendian-no}"
2240 if enabled x86; then
2241 echo "yasm ${yasm-no}"
2242 echo "MMX enabled ${mmx-no}"
2243 echo "MMX2 enabled ${mmx2-no}"
2244 echo "3DNow! enabled ${amd3dnow-no}"
2245 echo "3DNow! extended enabled ${amd3dnowext-no}"
2246 echo "SSE enabled ${sse-no}"
2247 echo "SSSE3 enabled ${ssse3-no}"
2248 echo "CMOV enabled ${cmov-no}"
2249 echo "CMOV is fast ${fast_cmov-no}"
2250 echo "EBX available ${ebx_available-no}"
2251 echo "EBP available ${ebp_available-no}"
2252 echo "10 operands supported ${ten_operands-no}"
2254 if enabled arm; then
2255 echo "ARMv5TE enabled ${armv5te-no}"
2256 echo "ARMv6 enabled ${armv6-no}"
2257 echo "ARMv6T2 enabled ${armv6t2-no}"
2258 echo "ARM VFP enabled ${armvfp-no}"
2259 echo "IWMMXT enabled ${iwmmxt-no}"
2260 echo "NEON enabled ${neon-no}"
2262 if enabled mips; then
2263 echo "MMI enabled ${mmi-no}"
2265 if enabled ppc; then
2266 echo "AltiVec enabled ${altivec-no}"
2267 echo "PPC 4xx optimizations ${ppc4xx-no}"
2268 echo "dcbzl available ${dcbzl-no}"
2269 echo "performance report ${powerpc_perf-no}"
2271 if enabled sparc; then
2272 echo "VIS enabled ${vis-no}"
2274 echo "gprof enabled ${gprof-no}"
2275 echo "debug symbols ${debug-no}"
2276 echo "strip symbols ${stripping-no}"
2277 echo "optimizations ${optimizations-no}"
2278 echo "static ${static-no}"
2279 echo "shared ${shared-no}"
2280 echo "postprocessing support ${postproc-no}"
2281 echo "new filter support ${avfilter-no}"
2282 echo "filters using lavformat ${avfilter_lavf-no}"
2283 echo "network support ${network-no}"
2284 if enabled network; then
2285 echo "IPv6 support ${ipv6-no}"
2287 echo "threading support ${thread_type-no}"
2288 echo "SDL support ${sdl-no}"
2289 if enabled sdl_too_old; then
2290 echo "-> Your SDL version is too old - please upgrade to have FFplay/SDL support."
2292 echo "Sun medialib support ${mlib-no}"
2293 echo "AVISynth enabled ${avisynth-no}"
2294 echo "libamr-nb support ${libamr_nb-no}"
2295 echo "libamr-wb support ${libamr_wb-no}"
2296 echo "libdc1394 support ${libdc1394-no}"
2297 echo "libdirac enabled ${libdirac-no}"
2298 echo "libfaac enabled ${libfaac-no}"
2299 echo "libfaad enabled ${libfaad-no}"
2300 echo "libfaad dlopened ${libfaadbin-no}"
2301 echo "libgsm enabled ${libgsm-no}"
2302 echo "libmp3lame enabled ${libmp3lame-no}"
2303 echo "libnut enabled ${libnut-no}"
2304 echo "libopenjpeg enabled ${libopenjpeg-no}"
2305 echo "libschroedinger enabled ${libschroedinger-no}"
2306 echo "libspeex enabled ${libspeex-no}"
2307 echo "libtheora enabled ${libtheora-no}"
2308 echo "libvorbis enabled ${libvorbis-no}"
2309 echo "libx264 enabled ${libx264-no}"
2310 echo "libxvid enabled ${libxvid-no}"
2311 echo "zlib enabled ${zlib-no}"
2312 echo "bzlib enabled ${bzlib-no}"
2313 echo
2315 for type in decoder encoder parser demuxer muxer protocol filter bsf indev outdev; do
2316 echo "Enabled ${type}s:"
2317 eval list=\$$(toupper $type)_LIST
2318 for part in $list; do
2319 enabled $part && echo ${part%_*}
2320 done | sort | pr -3 -t
2321 echo
2322 done
2324 license="LGPL"
2325 if enabled nonfree; then
2326 license="unredistributable"
2327 elif enabled gpl; then
2328 license="GPL"
2331 echo "License: $license"
2333 echo "Creating config.mak and config.h..."
2335 echo "# Automatically generated by configure - do not modify!" > config.mak
2336 echo "/* Automatically generated by configure - do not modify! */" > $TMPH
2337 echo "#ifndef FFMPEG_CONFIG_H" >> $TMPH
2338 echo "#define FFMPEG_CONFIG_H" >> $TMPH
2339 echo "#define FFMPEG_CONFIGURATION \"$FFMPEG_CONFIGURATION\"" >> $TMPH
2340 echo "#define FFMPEG_DATADIR \"$(eval c_escape $datadir)\"" >> $TMPH
2342 echo "FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION" >> config.mak
2343 echo "prefix=$prefix" >> config.mak
2344 echo "LIBDIR=\$(DESTDIR)$libdir" >> config.mak
2345 echo "SHLIBDIR=\$(DESTDIR)$shlibdir" >> config.mak
2346 echo "INCDIR=\$(DESTDIR)$incdir" >> config.mak
2347 echo "BINDIR=\$(DESTDIR)$bindir" >> config.mak
2348 echo "DATADIR=\$(DESTDIR)$datadir" >> config.mak
2349 echo "MANDIR=\$(DESTDIR)$mandir" >> config.mak
2350 echo "CC=$cc" >> config.mak
2351 echo "AS=$as" >> config.mak
2352 echo "YASM=$yasmexe" >> config.mak
2353 echo "AR=$ar" >> config.mak
2354 echo "RANLIB=$ranlib" >> config.mak
2355 echo "LN_S=$ln_s" >> config.mak
2356 enabled stripping &&
2357 echo "STRIP=$strip" >> config.mak ||
2358 echo "STRIP=echo ignoring strip" >> config.mak
2360 echo "OPTFLAGS=$CFLAGS" >> config.mak
2361 echo "LDFLAGS=$LDFLAGS" >> config.mak
2362 echo "FFSERVERLDFLAGS=$FFSERVERLDFLAGS" >> config.mak
2363 echo "SHFLAGS=$SHFLAGS" >> config.mak
2364 echo "YASMFLAGS=$YASMFLAGS" >> config.mak
2365 echo "LIBOBJFLAGS=$LIBOBJFLAGS" >> config.mak
2366 echo "BUILD_STATIC=$static" >> config.mak
2367 echo "BUILDSUF=$build_suffix" >> config.mak
2368 echo "FULLNAME=$FULLNAME" >> config.mak
2369 echo "LIBPREF=$LIBPREF" >> config.mak
2370 echo "LIBSUF=$LIBSUF" >> config.mak
2371 echo "LIBNAME=$LIBNAME" >> config.mak
2372 echo "SLIBPREF=$SLIBPREF" >> config.mak
2373 echo "SLIBSUF=$SLIBSUF" >> config.mak
2374 echo "EXESUF=$EXESUF" >> config.mak
2375 echo "EXTRA_VERSION=$extra_version" >> config.mak
2376 echo "DEPEND_CMD=$DEPEND_CMD" >> config.mak
2377 echo "HOSTCC=$host_cc" >> config.mak
2378 echo "HOSTCFLAGS=$host_cflags" >> config.mak
2379 echo "HOSTLDFLAGS=$host_ldflags" >> config.mak
2380 echo "HOSTLIBS=$host_libs" >> config.mak
2381 echo "TARGET_EXEC=$target_exec" >> config.mak
2382 echo "TARGET_PATH=$target_path" >> config.mak
2384 if enabled bigendian; then
2385 echo "WORDS_BIGENDIAN=yes" >> config.mak
2386 echo "#define WORDS_BIGENDIAN 1" >> $TMPH
2389 if enabled sdl; then
2390 echo "SDL_LIBS=`"${SDL_CONFIG}" --libs`" >> config.mak
2391 echo "SDL_CFLAGS=`"${SDL_CONFIG}" --cflags`" >> config.mak
2393 if enabled texi2html; then
2394 echo "BUILD_DOC=yes" >> config.mak
2397 get_version(){
2398 name=$1
2399 file=$source_path/$2
2400 eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
2401 eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
2402 lcname=$(tolower $name)
2403 eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
2404 eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
2407 get_version LIBSWSCALE libswscale/swscale.h
2408 get_version LIBPOSTPROC libpostproc/postprocess.h
2409 get_version LIBAVCODEC libavcodec/avcodec.h
2410 get_version LIBAVDEVICE libavdevice/avdevice.h
2411 get_version LIBAVFORMAT libavformat/avformat.h
2412 get_version LIBAVUTIL libavutil/avutil.h
2413 get_version LIBAVFILTER libavfilter/avfilter.h
2415 if enabled shared; then
2416 echo "BUILD_SHARED=yes" >> config.mak
2417 echo "PIC=-fPIC -DPIC" >> config.mak
2418 echo "LIBTARGET=${LIBTARGET}" >> config.mak
2419 echo "SLIBNAME=${SLIBNAME}" >> config.mak
2420 echo "SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}" >> config.mak
2421 echo "SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}" >> config.mak
2422 echo "SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}" >> config.mak
2423 echo "SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}" >> config.mak
2424 echo "SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}" >> config.mak
2425 echo "SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}" >> config.mak
2427 echo "LIB_INSTALL_EXTRA_CMD=${LIB_INSTALL_EXTRA_CMD}" >> config.mak
2428 echo "EXTRALIBS=$extralibs" >> config.mak
2430 echo "ARCH=$arch" >> config.mak
2432 print_config ARCH_ $TMPH config.mak $ARCH_LIST
2433 print_config HAVE_ $TMPH config.mak $HAVE_LIST
2434 print_config CONFIG_ $TMPH config.mak $CONFIG_LIST \
2435 $CONFIG_EXTRA \
2436 $DECODER_LIST \
2437 $ENCODER_LIST \
2438 $PARSER_LIST \
2439 $BSF_LIST \
2440 $DEMUXER_LIST \
2441 $MUXER_LIST \
2442 $FILTER_LIST \
2443 $PROTOCOL_LIST \
2444 $INDEV_LIST \
2445 $OUTDEV_LIST \
2447 echo "#define restrict $_restrict" >> $TMPH
2449 if enabled small; then
2450 echo "#define av_always_inline" >> $TMPH
2453 echo "SRC_PATH=\"$source_path\"" >> config.mak
2454 echo "SRC_PATH_BARE=$source_path" >> config.mak
2455 echo "BUILD_ROOT=\"$PWD\"" >> config.mak
2457 # Apparently it's not possible to portably echo a backslash.
2458 enabled asmalign_pot &&
2459 printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH ||
2460 printf '#define ASMALIGN(ZEROBITS) ".align 1 << " #ZEROBITS "\\n\\t"\n' >> $TMPH
2462 echo "#define EXTERN_PREFIX \"${extern_prefix}\"" >> $TMPH
2464 echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
2466 # Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
2467 cmp -s $TMPH config.h &&
2468 echo "config.h is unchanged" ||
2469 mv -f $TMPH config.h
2471 # build tree in object directory if source path is different from current one
2472 if enabled source_path_used; then
2473 DIRS="\
2474 doc \
2475 libavcodec \
2476 libavcodec/alpha \
2477 libavcodec/arm \
2478 libavcodec/bfin \
2479 libavcodec/mlib \
2480 libavcodec/ppc \
2481 libavcodec/sh4 \
2482 libavcodec/sparc \
2483 libavcodec/x86 \
2484 libavdevice \
2485 libavfilter \
2486 libavformat \
2487 libavutil \
2488 libpostproc \
2489 libswscale \
2490 tests \
2491 tools \
2493 FILES="\
2494 Makefile \
2495 common.mak \
2496 subdir.mak \
2497 doc/texi2pod.pl \
2498 libavcodec/Makefile \
2499 libavdevice/Makefile \
2500 libavfilter/Makefile \
2501 libavformat/Makefile \
2502 libavutil/Makefile \
2503 libpostproc/Makefile \
2504 libswscale/Makefile \
2506 for dir in $DIRS ; do
2507 mkdir -p $dir
2508 done
2509 for f in $FILES ; do
2510 $ln_s "$source_path/$f" $f
2511 done
2515 # build pkg-config files
2517 pkgconfig_generate(){
2518 name=$1
2519 shortname=${name#lib}${build_suffix}
2520 comment=$2
2521 version=$3
2522 libs=$4
2523 requires=$5
2524 cat <<EOF > $name/$name.pc
2525 prefix=$prefix
2526 exec_prefix=\${prefix}
2527 libdir=$libdir
2528 includedir=$incdir
2530 Name: $name
2531 Description: $comment
2532 Version: $version
2533 Requires: $(disabled shared && echo $requires)
2534 Requires.private: $(enabled shared && echo $requires)
2535 Conflicts:
2536 Libs: -L\${libdir} -l${shortname} $(disabled shared && echo $libs)
2537 Libs.private: $(enabled shared && echo $libs)
2538 Cflags: -I\${includedir}
2540 cat <<EOF > $name/$name-uninstalled.pc
2541 prefix=
2542 exec_prefix=
2543 libdir=\${pcfiledir}
2544 includedir=${source_path}
2546 Name: $name
2547 Description: $comment
2548 Version: $version
2549 Requires: $requires
2550 Conflicts:
2551 Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
2552 Cflags: -I\${includedir}
2556 pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
2557 pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
2558 pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
2559 pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "libavformat = $LIBAVFORMAT_VERSION"
2560 enabled avfilter &&
2561 pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
2562 enabled postproc &&
2563 pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
2564 pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"