flacdec: When there is not enough data to read the next header block,
[FFMpeg-mirror/lagarith.git] / configure
blob2e43aa01ae8e9a6b788a92ba5144369b7c648b78
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 " --enable-vdpau enable VDPAU support [no]"
92 echo " --disable-network disable network support [no]"
93 echo " --disable-ipv6 disable IPv6 support [no]"
94 echo " --disable-mpegaudio-hp faster (but less accurate) MPEG audio decoding [no]"
95 echo " --enable-gray enable full grayscale support (slower color)"
96 echo " --enable-fastdiv enable table-based division"
97 echo " --enable-small optimize for size instead of speed"
98 echo " --disable-aandct disable AAN DCT code"
99 echo " --disable-fft disable FFT code"
100 echo " --disable-golomb disable Golomb code"
101 echo " --disable-mdct disable MDCT code"
102 echo " --disable-rdft disable RDFT code"
103 echo " --enable-hardcoded-tables use hardcoded tables instead of runtime generation"
104 echo " --enable-memalign-hack emulate memalign, interferes with memory debuggers"
105 echo " --enable-beos-netserver enable BeOS netserver"
106 echo " --disable-encoder=NAME disable encoder NAME"
107 echo " --enable-encoder=NAME enable encoder NAME"
108 echo " --disable-encoders disable all encoders"
109 echo " --disable-decoder=NAME disable decoder NAME"
110 echo " --enable-decoder=NAME enable decoder NAME"
111 echo " --disable-decoders disable all decoders"
112 echo " --disable-muxer=NAME disable muxer NAME"
113 echo " --enable-muxer=NAME enable muxer NAME"
114 echo " --disable-muxers disable all muxers"
115 echo " --disable-demuxer=NAME disable demuxer NAME"
116 echo " --enable-demuxer=NAME enable demuxer NAME"
117 echo " --disable-demuxers disable all demuxers"
118 echo " --enable-parser=NAME enable parser NAME"
119 echo " --disable-parser=NAME disable parser NAME"
120 echo " --disable-parsers disable all parsers"
121 echo " --enable-bsf=NAME enable bitstream filter NAME"
122 echo " --disable-bsf=NAME disable bitstream filter NAME"
123 echo " --disable-bsfs disable all bitstream filters"
124 echo " --enable-protocol=NAME enable protocol NAME"
125 echo " --disable-protocol=NAME disable protocol NAME"
126 echo " --disable-protocols disable all protocols"
127 echo " --disable-indevs disable input devices"
128 echo " --disable-outdevs disable output devices"
129 echo " --disable-devices disable all devices"
130 echo " --enable-filter=NAME enable filter NAME"
131 echo " --disable-filter=NAME disable filter NAME"
132 echo " --disable-filters disable all filters"
133 echo " --list-decoders show all available decoders"
134 echo " --list-encoders show all available encoders"
135 echo " --list-muxers show all available muxers"
136 echo " --list-demuxers show all available demuxers"
137 echo " --list-parsers show all available parsers"
138 echo " --list-protocols show all available protocols"
139 echo " --list-bsfs show all available bitstream filters"
140 echo " --list-indevs show all available input devices"
141 echo " --list-outdevs show all available output devices"
142 echo " --list-filters show all available filters"
143 echo
144 echo "External library support:"
145 echo " --enable-avisynth enable reading of AVISynth script files [no]"
146 echo " --enable-bzlib enable bzlib [autodetect]"
147 echo " --enable-libamr-nb enable libamr-nb floating point audio codec [no]"
148 echo " --enable-libamr-wb enable libamr-wb floating point audio codec [no]"
149 echo " --enable-libdc1394 enable IIDC-1394 grabbing using libdc1394"
150 echo " and libraw1394 [no]"
151 echo " --enable-libdirac enable Dirac support via libdirac [no]"
152 echo " --enable-libfaac enable FAAC support via libfaac [no]"
153 echo " --enable-libfaad enable FAAD support via libfaad [no]"
154 echo " --enable-libfaadbin open libfaad.so.0 at runtime [no]"
155 echo " --enable-libgsm enable GSM support via libgsm [no]"
156 echo " --enable-libmp3lame enable MP3 encoding via libmp3lame [no]"
157 echo " --enable-libnut enable NUT (de)muxing via libnut,"
158 echo " native (de)muxer exists [no]"
159 echo " --enable-libopenjpeg enable JPEG 2000 decoding via OpenJPEG [no]"
160 echo " --enable-libschroedinger enable Dirac support via libschroedinger [no]"
161 echo " --enable-libspeex enable Speex decoding via libspeex [no]"
162 echo " --enable-libtheora enable Theora encoding via libtheora [no]"
163 echo " --enable-libvorbis enable Vorbis encoding via libvorbis,"
164 echo " native implementation exists [no]"
165 echo " --enable-libx264 enable H.264 encoding via x264 [no]"
166 echo " --enable-libxvid enable Xvid encoding via xvidcore,"
167 echo " native MPEG-4/Xvid encoder exists [no]"
168 echo " --enable-mlib enable Sun medialib [no]"
169 echo " --enable-zlib enable zlib [autodetect]"
170 echo ""
171 echo "Advanced options (experts only):"
172 echo " --source-path=PATH path to source code [$source_path]"
173 echo " --cross-prefix=PREFIX use PREFIX for compilation tools [$cross_prefix]"
174 echo " --enable-cross-compile assume a cross-compiler is used"
175 echo " --sysroot=PATH root of cross-build tree"
176 echo " --sysinclude=PATH location of cross-build system headers"
177 echo " --target-os=OS compiler targets OS [$target_os]"
178 echo " --target-exec=CMD command to run executables on target"
179 echo " --target-path=DIR path to view of build directory on target"
180 echo " --nm=NM use nm tool"
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_asm(){
528 log check_asm "$@"
529 name="$1"
530 asm="$2"
531 shift 2
532 check_cc "$@" <<EOF && enable $name || disable $name
533 void foo(void){ __asm__ volatile($asm); }
537 check_yasm(){
538 log check_yasm "$@"
539 echo "$1" > $TMPS
540 log_file $TMPS
541 shift 1
542 check_cmd $yasmexe $YASMFLAGS "$@" -o $TMPO $TMPS
545 check_ld(){
546 log check_ld "$@"
547 check_cc || return
548 flags=''
549 libs=''
550 for f; do
551 test "${f}" = "${f#-l}" && flags="$flags $f" || libs="$libs $f"
552 done
553 check_cmd $cc $LDFLAGS $flags -o $TMPE $TMPO $extralibs $libs
556 check_cflags(){
557 log check_cflags "$@"
558 check_cc "$@" <<EOF && add_cflags "$@"
559 int x;
563 check_ldflags(){
564 log check_ldflags "$@"
565 check_ld "$@" <<EOF && add_ldflags "$@"
566 int main(void){ return 0; }
570 check_header(){
571 log check_header "$@"
572 header=$1
573 shift
574 disable_safe $header
575 check_cpp "$@" <<EOF && enable_safe $header
576 #include <$header>
577 int x;
581 check_func(){
582 log check_func "$@"
583 func=$1
584 shift
585 disable $func
586 check_ld "$@" <<EOF && enable $func
587 extern int $func();
588 int main(void){ $func(); }
592 check_func_headers(){
593 log check_func_headers "$@"
594 headers=$1
595 func=$2
596 shift 2
597 disable $func
598 incs=""
599 for hdr in $headers; do
600 incs="$incs
601 #include <$hdr>"
602 done
603 check_ld "$@" <<EOF && enable $func && enable_safe $headers
604 $incs
605 int main(int argc, char **argv){
606 (void) $func;
607 return 0;
612 check_cpp_condition(){
613 log check_cpp_condition "$@"
614 header=$1
615 condition=$2
616 check_cpp <<EOF
617 #include <$header>
618 #if !($condition)
619 #error "unsatisfied condition: $condition"
620 #endif
624 check_lib(){
625 log check_lib "$@"
626 header="$1"
627 func="$2"
628 shift 2
629 temp_extralibs "$@"
630 check_header $header && check_func $func && add_extralibs "$@"
631 err=$?
632 restore_flags
633 return $err
636 check_lib2(){
637 log check_lib2 "$@"
638 headers="$1"
639 func="$2"
640 shift 2
641 temp_extralibs "$@"
642 check_func_headers "$headers" $func && add_extralibs "$@"
643 err=$?
644 restore_flags
645 return $err
648 check_exec(){
649 check_ld "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
652 check_exec_crash(){
653 code=`cat`
655 # exit() is not async signal safe. _Exit (C99) and _exit (POSIX)
656 # are safe but may not be available everywhere. Thus we use
657 # raise(SIGTERM) instead. The check is run in a subshell so we
658 # can redirect the "Terminated" message from the shell. SIGBUS
659 # is not defined by standard C so it is used conditionally.
661 (check_exec "$@") >> $logfile 2>&1 <<EOF
662 #include <signal.h>
663 static void sighandler(int sig){
664 raise(SIGTERM);
666 int main(void){
667 signal(SIGILL, sighandler);
668 signal(SIGFPE, sighandler);
669 signal(SIGSEGV, sighandler);
670 #ifdef SIGBUS
671 signal(SIGBUS, sighandler);
672 #endif
673 { $code }
678 check_type(){
679 log check_type "$@"
680 headers=$1
681 type=$2
682 shift 2
683 disable $type
684 incs=""
685 for hdr in $headers; do
686 incs="$incs
687 #include <$hdr>"
688 done
689 check_cc "$@" <<EOF && enable $type
690 $incs
691 $type v;
695 require(){
696 name="$1"
697 header="$2"
698 func="$3"
699 shift 3
700 check_lib $header $func "$@" || die "ERROR: $name not found"
703 require2(){
704 name="$1"
705 headers="$2"
706 func="$3"
707 shift 3
708 check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
711 check_foo_config(){
712 cfg=$1
713 pkg=$2
714 header=$3
715 func=$4
716 shift 4
717 disable $cfg
718 check_cmd ${pkg}-config --version
719 err=$?
720 if test "$err" = 0; then
721 temp_cflags `${pkg}-config --cflags`
722 temp_extralibs `${pkg}-config --libs`
723 check_lib "$@" $header $func && enable $cfg
725 return $err
728 apply(){
729 file=$1
730 shift
731 "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
734 # CONFIG_LIST contains configurable options, while HAVE_LIST is for
735 # system-dependent things.
737 COMPONENT_LIST="
738 bsfs
739 decoders
740 demuxers
741 encoders
742 filters
743 indevs
744 muxers
745 outdevs
746 parsers
747 protocols
750 CONFIG_LIST="
751 $COMPONENT_LIST
752 aandct
753 avfilter
754 avfilter_lavf
755 avisynth
756 beos_netserver
757 bzlib
758 fastdiv
759 ffmpeg
760 ffplay
761 ffserver
763 golomb
765 gprof
766 gray
767 hardcoded_tables
768 ipv6
769 libamr_nb
770 libamr_wb
771 libdc1394
772 libdirac
773 libfaac
774 libfaad
775 libfaadbin
776 libgsm
777 libmp3lame
778 libnut
779 libopenjpeg
780 libschroedinger
781 libspeex
782 libtheora
783 libvorbis
784 libx264
785 libxvid
786 mdct
787 memalign_hack
788 mlib
789 mpegaudio_hp
790 network
791 nonfree
792 postproc
793 powerpc_perf
794 rdft
795 shared
796 small
797 static
798 vdpau
799 x11grab
800 zlib
803 THREADS_LIST='
804 beosthreads
805 os2threads
806 pthreads
807 w32threads
810 ARCH_LIST='
811 alpha
813 bfin
814 ia64
815 m68k
816 mips
817 parisc
819 s390
821 sparc
822 sparc64
824 x86_32
825 x86_64
828 ARCH_EXT_LIST='
829 altivec
830 amd3dnow
831 amd3dnowext
832 armv5te
833 armv6
834 armv6t2
835 armvfp
836 iwmmxt
839 mmx2
840 neon
841 ppc4xx
843 ssse3
847 HAVE_LIST="
848 $ARCH_EXT_LIST
849 $THREADS_LIST
850 alsa_asoundlib_h
851 altivec_h
852 arpa_inet_h
853 bswap
854 closesocket
855 cmov
856 conio_h
857 dcbzl
858 dev_bktr_ioctl_bt848_h
859 dev_bktr_ioctl_meteor_h
860 dev_ic_bt8xx_h
861 dev_video_meteor_ioctl_meteor_h
862 dev_video_bktr_ioctl_bt848_h
863 dlfcn_h
864 dlopen
865 dos_paths
866 ebp_available
867 ebx_available
868 fast_64bit
869 fast_cmov
870 fast_unaligned
871 fork
872 gethrtime
873 GetProcessTimes
874 getrusage
875 inet_aton
876 inline_asm
877 libdc1394_1
878 libdc1394_2
879 llrint
880 lrint
881 lrintf
882 machine_ioctl_bt848_h
883 machine_ioctl_meteor_h
884 malloc_h
885 memalign
886 mkstemp
888 posix_memalign
889 ppc64
890 round
891 roundf
893 sdl_video_size
894 setmode
895 socklen_t
896 soundcard_h
897 poll_h
898 sys_mman_h
899 sys_resource_h
900 sys_select_h
901 sys_soundcard_h
902 sys_videoio_h
903 ten_operands
904 termios_h
905 threads
906 truncf
907 winsock2_h
908 yasm
911 # options emitted with CONFIG_ prefix but not available on command line
912 CONFIG_EXTRA="
915 CMDLINE_SELECT="
916 $ARCH_EXT_LIST
917 $CONFIG_LIST
918 $THREADS_LIST
919 cross_compile
920 debug
921 extra_warnings
922 logging
923 optimizations
924 stripping
925 swscale
926 yasm
929 PATHS_LIST='
930 bindir
931 datadir
932 incdir
933 libdir
934 mandir
935 prefix
936 shlibdir
939 CMDLINE_SET="
940 $PATHS_LIST
941 arch
942 build_suffix
945 cross_prefix
946 extra_version
947 host_cc
948 host_cflags
949 host_ldflags
950 host_libs
951 logfile
953 source_path
954 sysinclude
955 sysroot
956 target_exec
957 target_os
958 target_path
961 # code dependency declarations
963 # architecture extensions
964 altivec_deps="ppc"
965 amd3dnow_deps="mmx"
966 amd3dnowext_deps="amd3dnow"
967 armv5te_deps="arm"
968 armv6_deps="arm"
969 armv6t2_deps="arm"
970 armvfp_deps="arm"
971 iwmmxt_deps="arm"
972 mmi_deps="mips"
973 mmx_deps="x86"
974 mmx2_deps="mmx"
975 neon_deps="arm"
976 ppc4xx_deps="ppc"
977 sse_deps="mmx"
978 ssse3_deps="sse"
979 vis_deps="sparc"
981 # decoders / encoders
982 aac_decoder_select="fft mdct"
983 ac3_decoder_deps="gpl"
984 ac3_decoder_select="fft mdct"
985 atrac3_decoder_select="fft mdct"
986 cavs_decoder_select="golomb"
987 cook_decoder_select="fft mdct"
988 cscd_decoder_suggest="zlib"
989 dca_decoder_select="fft mdct"
990 dnxhd_encoder_select="aandct"
991 dxa_decoder_select="zlib"
992 eac3_decoder_deps="gpl"
993 eac3_decoder_select="fft mdct"
994 eatgq_decoder_select="aandct"
995 eatqi_decoder_select="aandct"
996 ffv1_decoder_select="golomb"
997 flac_decoder_select="golomb"
998 flac_encoder_select="golomb"
999 flashsv_decoder_select="zlib"
1000 flashsv_encoder_select="zlib"
1001 flv_encoder_select="aandct"
1002 h261_encoder_select="aandct"
1003 h263_encoder_select="aandct"
1004 h263p_encoder_select="aandct"
1005 h264_decoder_select="golomb"
1006 h264_vdpau_decoder_deps="vdpau"
1007 imc_decoder_select="fft mdct"
1008 jpegls_decoder_select="golomb"
1009 jpegls_encoder_select="golomb"
1010 ljpeg_encoder_select="aandct"
1011 loco_decoder_select="golomb"
1012 mjpeg_encoder_select="aandct"
1013 mpeg1video_encoder_select="aandct"
1014 mpeg2video_encoder_select="aandct"
1015 mpeg4_encoder_select="aandct"
1016 mpeg_vdpau_decoder_deps="vdpau"
1017 mpeg1_vdpau_decoder_deps="vdpau"
1018 mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h"
1019 msmpeg4v1_encoder_select="aandct"
1020 msmpeg4v2_encoder_select="aandct"
1021 msmpeg4v3_encoder_select="aandct"
1022 nellymoser_decoder_select="fft mdct"
1023 nellymoser_encoder_select="fft mdct"
1024 png_decoder_select="zlib"
1025 png_encoder_select="zlib"
1026 qdm2_decoder_select="fft mdct rdft"
1027 rv10_encoder_select="aandct"
1028 rv20_encoder_select="aandct"
1029 rv30_decoder_select="golomb"
1030 rv40_decoder_select="golomb"
1031 shorten_decoder_select="golomb"
1032 sonic_decoder_select="golomb"
1033 sonic_encoder_select="golomb"
1034 sonic_ls_encoder_select="golomb"
1035 svq3_decoder_select="golomb"
1036 svq3_decoder_suggest="zlib"
1037 tiff_decoder_suggest="zlib"
1038 tiff_encoder_suggest="zlib"
1039 tscc_decoder_select="zlib"
1040 vc1_vdpau_decoder_deps="vdpau"
1041 vorbis_decoder_select="fft mdct"
1042 vorbis_encoder_select="fft mdct"
1043 wmav1_decoder_select="fft mdct"
1044 wmav1_encoder_select="fft mdct"
1045 wmav2_decoder_select="fft mdct"
1046 wmav2_encoder_select="fft mdct"
1047 wmv1_encoder_select="aandct"
1048 wmv2_encoder_select="aandct"
1049 wmv3_vdpau_decoder_deps="vdpau"
1050 zlib_decoder_select="zlib"
1051 zlib_encoder_select="zlib"
1052 zmbv_decoder_select="zlib"
1053 zmbv_encoder_select="zlib"
1055 # external libraries
1056 libamr_nb_decoder_deps="libamr_nb"
1057 libamr_nb_encoder_deps="libamr_nb"
1058 libamr_wb_decoder_deps="libamr_wb"
1059 libamr_wb_encoder_deps="libamr_wb"
1060 libdirac_decoder_deps="libdirac !libschroedinger"
1061 libdirac_encoder_deps="libdirac"
1062 libfaac_encoder_deps="libfaac"
1063 libfaad_decoder_deps="libfaad"
1064 libfaadbin_decoder_extralibs='$ldl'
1065 libgsm_decoder_deps="libgsm"
1066 libgsm_encoder_deps="libgsm"
1067 libgsm_ms_decoder_deps="libgsm"
1068 libgsm_ms_encoder_deps="libgsm"
1069 libmp3lame_encoder_deps="libmp3lame"
1070 libopenjpeg_decoder_deps="libopenjpeg"
1071 libschroedinger_decoder_deps="libschroedinger"
1072 libschroedinger_encoder_deps="libschroedinger"
1073 libspeex_decoder_deps="libspeex"
1074 libtheora_encoder_deps="libtheora"
1075 libvorbis_encoder_deps="libvorbis"
1076 libx264_encoder_deps="libx264"
1077 libxvid_encoder_deps="libxvid"
1078 vdpau_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1080 # demuxers / muxers
1081 ac3_demuxer_deps="ac3_parser"
1082 alsa_demuxer_deps="alsa_asoundlib_h snd_pcm_htimestamp"
1083 alsa_demuxer_extralibs="-lasound"
1084 alsa_muxer_deps="alsa_asoundlib_h"
1085 alsa_muxer_extralibs="-lasound"
1086 audio_beos_demuxer_deps="audio_beos"
1087 audio_beos_demuxer_extralibs="-lmedia -lbe"
1088 audio_beos_muxer_deps="audio_beos"
1089 audio_beos_muxer_extralibs="-lmedia -lbe"
1090 avisynth_demuxer_deps="avisynth"
1091 bktr_demuxer_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
1092 dirac_demuxer_deps="dirac_parser"
1093 dv1394_demuxer_deps="dv1394 dv_demuxer"
1094 libdc1394_demuxer_deps="libdc1394"
1095 libnut_demuxer_deps="libnut"
1096 libnut_muxer_deps="libnut"
1097 matroska_demuxer_suggest="zlib bzlib"
1098 mov_demuxer_suggest="zlib"
1099 mp3_demuxer_deps="mpegaudio_parser"
1100 oss_demuxer_deps_any="soundcard_h sys_soundcard_h"
1101 oss_muxer_deps_any="soundcard_h sys_soundcard_h"
1102 redir_demuxer_deps="network"
1103 rtp_muxer_deps="network rtp_protocol"
1104 rtsp_demuxer_deps="sdp_demuxer"
1105 sdp_demuxer_deps="rtp_protocol mpegts_demuxer"
1106 v4l_demuxer_deps="linux_videodev_h"
1107 v4l2_demuxer_deps_any="linux_videodev2_h sys_videoio_h"
1108 vfwcap_demuxer_deps="capCreateCaptureWindow"
1109 vfwcap_demuxer_extralibs="-lvfw32"
1110 x11_grab_device_demuxer_deps="x11grab XShmCreateImage"
1111 x11_grab_device_demuxer_extralibs="-lX11 -lXext"
1113 # protocols
1114 gopher_protocol_deps="network"
1115 http_protocol_deps="network"
1116 rtp_protocol_deps="udp_protocol"
1117 tcp_protocol_deps="network"
1118 udp_protocol_deps="network"
1120 # filters
1121 movie_filter_deps="avfilter_lavf"
1123 # programs
1124 ffplay_deps="sdl"
1125 ffserver_deps="ffm_muxer rtp_protocol rtsp_demuxer"
1126 ffserver_extralibs='$ldl'
1129 # default parameters
1131 logfile="config.err"
1133 # installation paths
1134 prefix_default="/usr/local"
1135 bindir_default='${prefix}/bin'
1136 datadir_default='${prefix}/share/ffmpeg'
1137 incdir_default='${prefix}/include'
1138 libdir_default='${prefix}/lib'
1139 mandir_default='${prefix}/share/man'
1140 shlibdir_default="$libdir_default"
1142 # toolchain
1143 ar="ar"
1144 cc_default="gcc"
1145 host_cc_default="gcc"
1146 ln_s="ln -sf"
1147 nm_default="nm"
1148 objformat="elf"
1149 ranlib="ranlib"
1150 strip="strip"
1151 yasmexe="yasm"
1153 # machine
1154 arch=`uname -m`
1155 cpu="generic"
1157 # OS
1158 target_os=$(tolower $(uname -s))
1160 # configurable options
1161 enable debug
1162 enable ffmpeg
1163 enable ffplay
1164 enable ffserver
1165 enable ipv6
1166 enable mpegaudio_hp
1167 enable network
1168 enable optimizations
1169 enable protocols
1170 enable static
1171 enable stripping
1173 # build settings
1174 add_cflags -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112
1175 SHFLAGS='-shared -Wl,-soname,$$(@F)'
1176 FFSERVERLDFLAGS=-Wl,-E
1177 LIBPREF="lib"
1178 LIBSUF=".a"
1179 FULLNAME='$(NAME)$(BUILDSUF)'
1180 LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
1181 SLIBPREF="lib"
1182 SLIBSUF=".so"
1183 SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
1184 SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
1185 SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
1186 LIB_INSTALL_EXTRA_CMD='$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
1188 host_cflags='-O3 -g -Wall'
1189 host_libs='-lm'
1191 target_path='.'
1193 # gcc stupidly only outputs the basename of targets with -MM, but we need the
1194 # full relative path for objects in subdirectories for non-recursive Make.
1195 DEPEND_CMD='$(CC) $(CFLAGS) -MM $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o,"'
1197 # find source path
1198 source_path="`dirname \"$0\"`"
1199 enable source_path_used
1200 if test -z "$source_path" -o "$source_path" = "." ; then
1201 source_path="`pwd`"
1202 disable source_path_used
1203 else
1204 source_path="`cd \"$source_path\"; pwd`"
1205 echo "$source_path" | grep -q '[[:blank:]]' &&
1206 die "Out of tree builds are impossible with whitespace in source path."
1209 FFMPEG_CONFIGURATION="$@"
1211 find_things(){
1212 thing=$1
1213 pattern=$2
1214 file=$source_path/$3
1215 sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
1218 ENCODER_LIST=$(find_things encoder ENC libavcodec/allcodecs.c)
1219 DECODER_LIST=$(find_things decoder DEC libavcodec/allcodecs.c)
1220 PARSER_LIST=$(find_things parser PARSER libavcodec/allcodecs.c)
1221 BSF_LIST=$(find_things bsf BSF libavcodec/allcodecs.c)
1222 MUXER_LIST=$(find_things muxer _MUX libavformat/allformats.c)
1223 DEMUXER_LIST=$(find_things demuxer DEMUX libavformat/allformats.c)
1224 OUTDEV_LIST=$(find_things muxer _MUX libavdevice/alldevices.c)
1225 INDEV_LIST=$(find_things demuxer DEMUX libavdevice/alldevices.c)
1226 PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
1227 FILTER_LIST=$(find_things filter FILTER libavfilter/allfilters.c)
1229 enable $ARCH_EXT_LIST \
1230 $DECODER_LIST \
1231 $ENCODER_LIST \
1232 $PARSER_LIST \
1233 $BSF_LIST \
1234 $DEMUXER_LIST \
1235 $MUXER_LIST \
1236 $FILTER_LIST \
1237 $PROTOCOL_LIST \
1238 $INDEV_LIST \
1239 $OUTDEV_LIST \
1241 die_unknown(){
1242 echo "Unknown option \"$1\"."
1243 echo "See $0 --help for available options."
1244 exit 1
1247 show_list() {
1248 suffix=_$1
1249 shift
1250 echo $* | sed s/$suffix//g | tr ' ' '\n' | sort
1251 exit 0
1254 for opt do
1255 optval="${opt#*=}"
1256 case "$opt" in
1257 --extra-cflags=*) add_cflags $optval
1259 --extra-ldflags=*) add_ldflags $optval
1261 --extra-libs=*) add_extralibs $optval
1263 --disable-devices) disable $INDEV_LIST $OUTDEV_LIST
1265 --enable-debug=*) debuglevel="$optval"
1267 --enable-*=*|--disable-*=*)
1268 eval `echo "$opt" | sed 's/=/-/;s/--/action=/;s/-/ thing=/;s/-/ name=/'`
1269 case "$thing" in
1270 encoder|decoder|muxer|demuxer|parser|bsf|protocol|filter) $action ${optval}_${thing} ;;
1271 *) die_unknown "$opt" ;;
1272 esac
1274 --enable-?*|--disable-?*)
1275 eval `echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g'`
1276 if is_in $option $COMPONENT_LIST; then
1277 eval $action \$$(toupper ${option%s})_LIST
1278 elif is_in $option $CMDLINE_SELECT; then
1279 $action $option
1280 else
1281 die_unknown $opt
1284 --list-*)
1285 NAME="${opt#--list-}"
1286 is_in $NAME $COMPONENT_LIST || die_unknown $opt
1287 NAME=${NAME%s}
1288 eval show_list $NAME \$$(toupper $NAME)_LIST
1290 --help|-h) show_help
1293 optname="${opt%%=*}"
1294 optname="${optname#--}"
1295 optname=$(echo "$optname" | sed 's/-/_/g')
1296 is_in $optname $CMDLINE_SET || die_unknown $opt
1297 eval $optname='$optval'
1299 esac
1300 done
1302 disabled logging && logfile=/dev/null
1304 echo "# $0 $@" > $logfile
1305 set >> $logfile
1307 test -n "$cross_prefix" && enable cross_compile
1309 ar="${cross_prefix}${ar}"
1310 cc_default="${cross_prefix}${cc_default}"
1311 nm_default="${cross_prefix}${nm_default}"
1312 ranlib="${cross_prefix}${ranlib}"
1313 strip="${cross_prefix}${strip}"
1315 sysinclude_default="${sysroot}/usr/include"
1317 set_default cc nm sysinclude
1318 enabled cross_compile || host_cc_default=$cc
1319 set_default host_cc
1321 case $target_os in
1322 mingw32*|cygwin*|*-dos|freedos|opendos|os/2*) EXESUF=.exe ;;
1323 esac
1325 # set temporary file name
1326 : ${TMPDIR:=$TEMPDIR}
1327 : ${TMPDIR:=$TMP}
1328 : ${TMPDIR:=/tmp}
1330 if ! check_cmd type mktemp; then
1331 # simple replacement for missing mktemp
1332 # NOT SAFE FOR GENERAL USE
1333 mktemp(){
1334 echo "${2%XXX*}.${HOSTNAME}.${UID}.$$"
1338 tmpfile(){
1339 tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
1340 (set -C; exec > $tmp) 2>/dev/null ||
1341 die "Unable to create temoporary file in $TMPDIR."
1342 append TMPFILES $tmp
1343 eval $1=$tmp
1346 trap 'rm -f -- $TMPFILES' EXIT
1347 trap exit HUP INT TERM
1349 tmpfile TMPC .c
1350 tmpfile TMPE $EXESUF
1351 tmpfile TMPH .h
1352 tmpfile TMPO .o
1353 tmpfile TMPS .S
1354 tmpfile TMPSH .sh
1356 unset -f mktemp
1358 # make sure we can execute files in $TMPDIR
1359 cat > $TMPSH 2>> $logfile <<EOF
1360 #! /bin/sh
1362 chmod +x $TMPSH >> $logfile 2>&1
1363 if ! $TMPSH >> $logfile 2>&1; then
1364 cat <<EOF
1365 Unable to create and execute files in $TMPDIR. Set the TMPDIR environment
1366 variable to another directory and make sure that it is not mounted noexec.
1368 die "Sanity test failed."
1371 if $cc --version 2>/dev/null | grep -qi gcc; then
1372 cc_type=gcc
1373 elif $cc --version 2>/dev/null | grep -q Intel; then
1374 cc_type=icc
1375 elif $cc -v 2>&1 | grep -q xlc; then
1376 cc_type=xlc
1377 elif $cc -V 2>/dev/null | grep -q Compaq; then
1378 cc_type=ccc
1379 DEPEND_CMD='$(CC) $(CFLAGS) -M $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o,"'
1380 debuglevel=3
1381 add_ldflags -Wl,-z,now # calls to libots crash without this
1384 test -n "$cc_type" && enable $cc_type || echolog "Unknown C compiler $cc"
1386 if test -n "$sysroot"; then
1387 case "$cc_type" in
1388 gcc)
1389 add_cflags --sysroot="$sysroot"
1390 add_ldflags --sysroot="$sysroot"
1392 esac
1395 # compiler sanity check
1396 check_exec <<EOF
1397 int main(void){ return 0; }
1399 if test "$?" != 0; then
1400 echo "$cc is unable to create an executable file."
1401 if test -z "$cross_prefix" && ! enabled cross_compile ; then
1402 echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
1403 echo "Only do this if you know what cross compiling means."
1405 die "C compiler test failed."
1408 check_cflags -std=c99
1409 check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cflags -D_FILE_OFFSET_BITS=64
1410 #include <stdlib.h>
1412 check_cc -D_LARGEFILE_SOURCE <<EOF && add_cflags -D_LARGEFILE_SOURCE
1413 #include <stdlib.h>
1416 case "$arch" in
1417 alpha)
1418 arch="alpha"
1419 enable fast_64bit
1420 check_cflags -mieee
1422 arm|armv[4567]*l)
1423 arch="arm"
1425 avr32)
1427 bfin)
1428 arch="bfin"
1430 ia64)
1431 arch="ia64"
1432 enable fast_64bit
1434 m68k)
1435 arch="m68k"
1437 mips|mipsel|IP*)
1438 arch="mips"
1440 mips64)
1441 arch="mips"
1442 enable fast_64bit
1444 parisc|hppa)
1445 arch="parisc"
1447 parisc64|hppa64)
1448 arch="parisc"
1449 enable fast_64bit
1451 "Power Macintosh"|ppc|powerpc)
1452 arch="ppc"
1453 enable fast_unaligned
1455 ppc64)
1456 arch="ppc"
1457 enable fast_64bit
1458 enable fast_unaligned
1460 s390|s390x)
1461 arch="s390"
1463 sh4|sh)
1464 arch="sh4"
1466 sparc)
1467 arch="sparc"
1469 sun4u|sparc64)
1470 arch="sparc"
1471 subarch="sparc64"
1472 enable fast_64bit
1474 i386|i486|i586|i686|i86pc|BePC)
1475 arch="x86"
1476 subarch="x86_32"
1477 enable fast_unaligned
1479 x86_64|amd64)
1480 arch="x86"
1481 subarch="x86_32"
1482 enable cmov
1483 enable fast_cmov
1484 enable fast_unaligned
1485 check_cc <<EOF && enable fast_64bit && subarch="x86_64"
1486 int test[sizeof(char*) - 7];
1490 arch="unknown"
1492 esac
1494 enable $arch $subarch
1496 # OS specific
1497 case $target_os in
1498 beos|haiku|zeta)
1499 prefix_default="$HOME/config"
1500 # helps building libavcodec
1501 add_cflags -DPIC -fomit-frame-pointer
1502 # 3 gcc releases known for BeOS, each with ugly bugs
1503 gcc_version="`$cc -v 2>&1 | grep version | cut -d ' ' -f3-`"
1504 case "$gcc_version" in
1505 2.9-beos-991026*|2.9-beos-000224*) echo "R5/GG gcc"
1506 disable mmx
1508 *20010315*) echo "BeBits gcc"
1509 add_cflags -fno-expensive-optimizations
1511 esac
1512 SHFLAGS=-nostart
1513 # enable BeOS things
1514 enable audio_beos
1515 # no need for libm, but the inet stuff
1516 # Check for BONE
1517 # XXX: actually should check for NOT net_server
1518 if echo $BEINCLUDES | grep -q 'headers/be/bone'; then
1519 network_extralibs="-lbind -lsocket"
1520 else
1521 enable beos_netserver
1522 network_extralibs="-lnet"
1523 fi ;;
1524 sunos)
1525 FFSERVERLDFLAGS=""
1526 SHFLAGS='-shared -Wl,-h,$$(@F)'
1527 network_extralibs="-lsocket -lnsl"
1528 add_cflags -D__EXTENSIONS__
1530 netbsd)
1531 oss_demuxer_extralibs="-lossaudio"
1532 oss_muxer_extralibs="-lossaudio"
1534 openbsd)
1535 disable need_memalign
1536 LIBOBJFLAGS='$(PIC)'
1537 SHFLAGS='-shared'
1538 oss_demuxer_extralibs="-lossaudio"
1539 oss_muxer_extralibs="-lossaudio"
1541 freebsd)
1542 disable need_memalign
1544 bsd/os)
1545 osextralibs="-lpoll -lgnugetopt"
1546 strip="strip -d"
1548 darwin)
1549 disable need_memalign
1550 SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR) -Wl,-read_only_relocs,suppress'
1551 strip="strip -x"
1552 FFLDFLAGS="-Wl,-dynamic,-search_paths_first"
1553 SLIBSUF=".dylib"
1554 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
1555 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
1556 FFSERVERLDFLAGS=-Wl,-bind_at_load
1557 objformat="macho"
1558 enabled x86_64 && objformat="macho64"
1560 mingw32*)
1561 target_os=mingw32
1562 LIBTARGET=i386
1563 if enabled x86_64; then
1564 disable need_memalign
1565 LIBTARGET=x64
1567 shlibdir_default="$bindir_default"
1568 disable ffserver
1569 SLIBPREF=""
1570 SLIBSUF=".dll"
1571 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1572 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1573 SLIB_EXTRA_CMD='-lib /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)'
1574 SLIB_INSTALL_EXTRA_CMD='-install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"; \
1575 install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)"'
1576 SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"'
1577 SHFLAGS='-shared -Wl,--output-def,$$(@:$(SLIBSUF)=.def) -Wl,--enable-runtime-pseudo-reloc -Wl,--enable-auto-image-base'
1578 objformat="win32"
1579 enable dos_paths
1580 if ! enabled x86_64; then
1581 check_cpp_condition _mingw.h "(__MINGW32_MAJOR_VERSION > 3) || (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
1582 die "ERROR: MinGW runtime version must be >= 3.15."
1583 enabled_any avisynth vfwcap_demuxer &&
1584 { check_cpp_condition w32api.h "(__W32API_MAJOR_VERSION > 3) || (__W32API_MAJOR_VERSION == 3 && __W32API_MINOR_VERSION >= 13)" ||
1585 die "ERROR: avisynth and vfwcap_demuxer require w32api version 3.13 or later."; }
1588 cygwin*)
1589 target_os=cygwin
1590 shlibdir_default="$bindir_default"
1591 SLIBPREF="cyg"
1592 SLIBSUF=".dll"
1593 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1594 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1595 SHFLAGS='-shared -Wl,--enable-auto-image-base'
1596 objformat="win32"
1597 enable dos_paths
1599 *-dos|freedos|opendos)
1600 disable ffplay ffserver
1601 disable $INDEV_LIST $OUTDEV_LIST
1602 network_extralibs="-lsocket"
1603 objformat="coff"
1604 enable dos_paths
1606 linux)
1607 enable dv1394
1609 irix*)
1610 target_os=irix
1611 ranlib="echo ignoring ranlib"
1613 os/2*)
1614 strip="lxlite"
1615 ln_s="cp -f"
1616 FFLDFLAGS="-Zomf -Zbin-files -Zargs-wild -Zmap"
1617 SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
1618 FFSERVERLDFLAGS=""
1619 LIBSUF="_s.a"
1620 SLIBPREF=""
1621 SLIBSUF=".dll"
1622 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
1623 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
1624 SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
1625 echo PROTMODE >> $(SUBDIR)$(NAME).def; \
1626 echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
1627 echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
1628 echo EXPORTS >> $(SUBDIR)$(NAME).def; \
1629 emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
1630 SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
1631 emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
1632 SLIB_INSTALL_EXTRA_CMD='install -m 644 $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib "$(LIBDIR)"'
1633 SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.a "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.lib'
1634 enable dos_paths
1638 die "Unknown OS '$target_os'."
1640 esac
1642 set_default $PATHS_LIST
1644 add_extralibs $osextralibs
1646 # Combine FFLDFLAGS and the LDFLAGS environment variable.
1647 LDFLAGS="$FFLDFLAGS $LDFLAGS"
1649 # we need to build at least one lib type
1650 if ! enabled_any static shared; then
1651 cat <<EOF
1652 At least one library type must be built.
1653 Specify --enable-static to build the static libraries or --enable-shared to
1654 build the shared libraries as well. To only build the shared libraries specify
1655 --disable-static in addition to --enable-shared.
1657 exit 1;
1660 disabled static && LIBNAME=""
1662 if enabled_any libfaad libfaadbin ; then
1663 if check_header faad.h; then
1664 check_cc <<EOF
1665 #include <faad.h>
1666 #ifndef FAAD2_VERSION
1667 ok faad1
1668 #endif
1669 int main(void) { return 0; }
1671 test $? = 0 && enable libfaad2
1672 else
1673 die "FAAD test failed."
1678 if ! enabled gpl; then
1679 die_gpl_disabled(){
1680 name=$1
1681 shift
1682 enabled_any $@ && die "$name is under GPL and --enable-gpl is not specified."
1684 die_gpl_disabled "The Postprocessing code" postproc
1685 die_gpl_disabled "libx264" libx264
1686 die_gpl_disabled "libxvidcore" libxvid
1687 die_gpl_disabled "FAAD2" libfaad2
1688 die_gpl_disabled "The X11 grabber" x11grab
1691 if ! enabled nonfree && enabled_any libamr_nb libamr_wb; then
1692 die "libamr is nonfree and --enable-nonfree is not specified."
1695 check_deps $ARCH_EXT_LIST
1697 test -z "$need_memalign" && need_memalign="$mmx"
1699 #Darwin CC versions
1700 if test $target_os = darwin; then
1701 if enabled xlc; then
1702 add_cflags -qpdf2 -qlanglvl=extc99 -qmaxmem=-1 -qarch=auto -qtune=auto
1703 else
1704 add_cflags -pipe
1705 check_cflags -force_cpusubtype_ALL
1706 check_cflags -Wno-sign-compare
1707 enabled shared || check_cflags -mdynamic-no-pic
1711 disabled optimizations || check_cflags -fomit-frame-pointer
1713 # Add processor-specific flags
1714 if test $cpu != "generic"; then
1715 warn_altivec(){
1716 $1 altivec && echo "WARNING: Tuning for $2 but AltiVec $1.";
1718 case $cpu in
1719 601|ppc601|PowerPC601)
1720 add_cflags -mcpu=601
1721 warn_altivec enabled PPC601
1723 603*|ppc603*|PowerPC603*)
1724 add_cflags -mcpu=603
1725 warn_altivec enabled PPC603
1727 604*|ppc604*|PowerPC604*)
1728 add_cflags -mcpu=604
1729 warn_altivec enabled PPC604
1731 G3|g3|75*|ppc75*|PowerPC75*)
1732 add_cflags -mcpu=750 -mpowerpc-gfxopt
1733 warn_altivec enabled PPC75x
1735 G4|g4|745*|ppc745*|PowerPC745*)
1736 add_cflags -mcpu=7450 -mpowerpc-gfxopt
1737 warn_altivec disabled PPC745x
1739 74*|ppc74*|PowerPC74*)
1740 add_cflags -mcpu=7400 -mpowerpc-gfxopt
1741 warn_altivec disabled PPC74xx
1743 G5|g5|970|ppc970|PowerPC970|power4*|Power4*)
1744 add_cflags -mcpu=970 -mpowerpc-gfxopt -mpowerpc64
1745 warn_altivec disabled PPC970
1746 enable ppc64
1748 Cell|CELL|cell)
1749 add_cflags -mcpu=cell
1750 warn_altivec disabled Cell
1751 enable ppc64
1753 # targets that do NOT support conditional mov (cmov)
1754 i[345]86|pentium|pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
1755 add_cflags -march=$cpu
1756 disable cmov
1758 # targets that do support conditional mov (cmov)
1759 i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2)
1760 add_cflags -march=$cpu
1761 enable cmov
1762 enable fast_cmov
1764 # targets that do support conditional mov but on which it's slow
1765 pentium4|pentium4m|prescott|nocona)
1766 add_cflags -march=$cpu
1767 enable cmov
1768 disable fast_cmov
1770 sparc64)
1771 add_cflags -mcpu=v9
1773 arm11*|cortex*)
1774 add_cflags -mcpu=$cpu
1775 enable fast_unaligned
1777 armv*)
1778 add_cflags -march=$cpu
1780 arm*)
1781 add_cflags -mcpu=$cpu
1783 ev4|ev45|ev5|ev56|pca56|ev6|ev67)
1784 enabled ccc && add_cflags -arch $cpu || add_cflags -mcpu=$cpu
1787 echo "WARNING: Unknown CPU \"$cpu\", ignored."
1789 esac
1792 check_cc <<EOF || die "Symbol mangling check failed."
1793 int ff_extern;
1795 sym=$($nm -P -g $TMPO | grep ff_extern)
1796 extern_prefix=${sym%%ff_extern*}
1798 check_asm inline_asm '""'
1800 if enabled x86; then
1801 # check whether EBP is available on x86
1802 # As 'i' is stored on the stack, this program will crash
1803 # if the base pointer is used to access it because the
1804 # base pointer is cleared in the inline assembly code.
1805 check_exec_crash <<EOF && enable ebp_available
1806 volatile int i=0;
1807 __asm__ volatile (
1808 "xorl %%ebp, %%ebp"
1809 ::: "%ebp");
1810 return i;
1813 # check wether EBX is available on x86
1814 check_asm ebx_available '"":::"%ebx"'
1816 # check whether more than 10 operands are supported
1817 check_cc <<EOF && enable ten_operands
1818 int main(void) {
1819 int x=0;
1820 __asm__ volatile(
1822 :"+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x)
1824 return 0;
1828 # check whether binutils is new enough to compile SSSE3/MMX2
1829 enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
1830 enabled mmx2 && check_asm mmx2 '"movss %xmm0, %xmm0"'
1832 check_asm bswap '"bswap %%eax" ::: "%eax"'
1834 YASMFLAGS="-f $objformat -DARCH_$(toupper $subarch)"
1835 enabled x86_64 && append YASMFLAGS "-m amd64"
1836 enabled_all x86_64 shared && append YASMFLAGS "-DPIC"
1837 case "$objformat" in
1838 elf) enabled debug && append YASMFLAGS "-g dwarf2" ;;
1839 macho64) append YASMFLAGS "-DPIC -DPREFIX" ;;
1840 *) append YASMFLAGS "-DPREFIX" ;;
1841 esac
1842 disabled yasm || { check_yasm "pabsw xmm0, xmm0" && enable yasm; }
1845 # check for assembler specific support
1847 enabled ppc && check_asm dcbzl '"dcbzl 0, 1"'
1848 enabled ppc && check_asm ppc4xx '"maclhw r10, r11, r12"'
1850 # check for SIMD availability
1852 # AltiVec flags: The FSF version of GCC differs from the Apple version
1853 if enabled altivec; then
1854 check_cflags -maltivec -mabi=altivec &&
1855 { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
1856 check_cflags -faltivec
1858 # check if our compiler supports Motorola AltiVec C API
1859 check_cc <<EOF || disable altivec
1860 $inc_altivec_h
1861 int main(void) {
1862 vector signed int v1, v2, v3;
1863 v1 = vec_add(v2,v3);
1864 return 0;
1868 # check if our compiler supports braces for vector declarations
1869 check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
1870 $inc_altivec_h
1871 int main (void) { (vector int) {1}; return 0; }
1875 # We have to check if pld is a nop and disable it.
1876 enabled arm && check_asm pld '"pld [r0]"'
1877 enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
1878 enabled armv6 && check_asm armv6 '"sadd16 r0, r0, r0"'
1879 enabled armv6t2 && check_asm armv6t2 '"movt r0, #0"'
1880 enabled armvfp && check_asm armvfp '"fadds s0, s0, s0"'
1881 enabled iwmmxt && check_asm iwmmxt '"wunpckelub wr6, wr4"'
1882 enabled mmi && check_asm mmi '"lq $2, 0($2)"'
1883 enabled neon && check_asm neon '"vadd.i16 q0, q0, q0"'
1884 enabled vis && check_asm vis '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc
1886 enabled vis && add_cflags -mcpu=ultrasparc -mtune=ultrasparc
1888 # ---
1889 # big/little-endian test
1890 check_cc <<EOF || die "endian test failed"
1891 unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
1893 od -A n -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
1895 # ---
1896 # check availability of some header files
1898 if check_func dlopen; then
1899 ldl=
1900 elif check_func dlopen -ldl; then
1901 ldl=-ldl
1904 # Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
1905 check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
1907 check_func fork
1908 check_func gethrtime
1909 check_func getrusage
1910 check_func inet_aton $network_extralibs
1911 check_func memalign
1912 check_func mkstemp
1913 check_func posix_memalign
1914 check_func_headers io.h setmode
1915 check_func_headers windows.h GetProcessTimes
1917 check_header conio.h
1918 check_header dlfcn.h
1919 check_header malloc.h
1920 check_header poll.h
1921 check_header sys/mman.h
1922 check_header sys/resource.h
1923 check_header sys/select.h
1924 check_header termios.h
1925 check_header vdpau/vdpau.h
1926 check_header vdpau/vdpau_x11.h
1927 check_header X11/extensions/XvMClib.h
1929 if ! enabled_any memalign memalign_hack posix_memalign && enabled need_memalign ; then
1930 die "Error, no aligned memory allocator but SSE enabled, disable it or use --enable-memalign-hack."
1933 disabled zlib || check_lib zlib.h zlibVersion -lz || disable zlib
1934 disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
1936 # check for some common methods of building with pthread support
1937 # do this before the optional library checks as some of them require pthreads
1938 if enabled pthreads; then
1939 if check_func pthread_create; then
1941 elif check_func pthread_create -pthread; then
1942 add_cflags -pthread
1943 add_extralibs -pthread
1944 elif check_func pthread_create -pthreads; then
1945 add_cflags -pthreads
1946 add_extralibs -pthreads
1947 elif check_func pthread_create -lpthreadGC2; then
1948 add_extralibs -lpthreadGC2
1949 elif ! check_lib pthread.h pthread_create -lpthread; then
1950 die "ERROR: can't find pthreads library"
1954 for thread in $THREADS_LIST; do
1955 if enabled $thread; then
1956 test -n "$thread_type" &&
1957 die "ERROR: Only one thread type must be selected." ||
1958 thread_type="$thread"
1960 done
1962 check_lib math.h sin -lm
1964 # test for C99 functions in math.h
1965 for func in llrint lrint lrintf round roundf truncf; do
1966 check_exec <<EOF && enable $func || disable $func
1967 #include <math.h>
1968 int main(void) { return ($func(3.999f) > 0)?0:1; }
1970 done
1972 # these are off by default, so fail if requested and not available
1973 enabled avisynth && require2 vfw32 "windows.h vfw.h" AVIFileInit -lvfw32
1974 enabled libamr_nb && require libamrnb amrnb/interf_dec.h Speech_Decode_Frame_init -lamrnb -lm
1975 enabled libamr_wb && require libamrwb amrwb/dec_if.h D_IF_init -lamrwb -lm
1976 enabled libdirac && add_cflags $(pkg-config --cflags dirac) &&
1977 require libdirac libdirac_decoder/dirac_parser.h dirac_decoder_init -ldirac_decoder &&
1978 require libdirac libdirac_encoder/dirac_encoder.h dirac_encoder_init -ldirac_encoder
1979 enabled libfaac && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
1980 enabled libfaad && require2 libfaad faad.h faacDecOpen -lfaad
1981 enabled libgsm && require libgsm gsm.h gsm_create -lgsm
1982 enabled libmp3lame && require libmp3lame lame/lame.h lame_init -lmp3lame -lm
1983 enabled libnut && require libnut libnut.h nut_demuxer_init -lnut
1984 enabled libopenjpeg && require libopenjpeg openjpeg.h opj_version -lopenjpeg
1985 enabled libschroedinger && add_cflags $(pkg-config --cflags schroedinger-1.0) &&
1986 require libschroedinger schroedinger/schro.h schro_init $(pkg-config --libs schroedinger-1.0)
1987 enabled libspeex && require libspeex speex/speex.h speex_decoder_init -lspeex
1988 enabled libtheora && require libtheora theora/theora.h theora_info_init -ltheora -logg
1989 enabled libvorbis && require libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
1990 enabled libx264 && require libx264 x264.h x264_encoder_open -lx264 -lm &&
1991 { check_cpp_condition x264.h "X264_BUILD >= 65" ||
1992 die "ERROR: libx264 version must be >= 0.65."; }
1993 enabled libxvid && require libxvid xvid.h xvid_global -lxvidcore
1994 enabled mlib && require mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
1996 # libdc1394 check
1997 if enabled libdc1394; then
1998 { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
1999 enable libdc1394_2; } ||
2000 { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
2001 enable libdc1394_1; } ||
2002 die "ERROR: No version of libdc1394 found "
2006 _restrict=
2007 for restrict_keyword in restrict __restrict__ __restrict; do
2008 check_cc <<EOF && _restrict=$restrict_keyword && break
2009 void foo(char * $restrict_keyword p);
2011 done
2013 ##########################################
2014 # SDL check
2016 disable sdl_too_old
2017 disable sdl
2018 SDL_CONFIG="${cross_prefix}sdl-config"
2019 if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
2020 sdl_cflags=`"${SDL_CONFIG}" --cflags`
2021 temp_cflags $sdl_cflags
2022 temp_extralibs `"${SDL_CONFIG}" --libs`
2023 if check_lib2 SDL.h SDL_Init; then
2024 _sdlversion=`"${SDL_CONFIG}" --version | sed 's/[^0-9]//g'`
2025 if test "$_sdlversion" -lt 121 ; then
2026 enable sdl_too_old
2027 else
2028 enable sdl
2029 check_cc $sdl_cflags <<EOF && enable sdl_video_size
2030 #include <SDL.h>
2031 int main(int argc, char **argv){
2032 const SDL_VideoInfo *vi = SDL_GetVideoInfo();
2033 int w = vi->current_w;
2034 return 0;
2039 restore_flags
2042 texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
2044 ##########################################
2045 # Network check
2047 if enabled network; then
2048 check_type "sys/types.h sys/socket.h" socklen_t
2049 # Prefer arpa/inet.h over winsock2
2050 if check_header arpa/inet.h ; then
2051 check_func closesocket
2052 elif check_header winsock2.h ; then
2053 network_extralibs="-lws2_32"
2054 check_type ws2tcpip.h socklen_t
2055 check_func_headers winsock2.h closesocket
2059 ##########################################
2060 # IPv6 check
2062 enabled network && enabled ipv6 && check_ld <<EOF && enable ipv6 || disable ipv6
2063 #include <sys/types.h>
2064 #include <sys/socket.h>
2065 #include <netinet/in.h>
2066 #include <netdb.h>
2067 int main(void) {
2068 struct sockaddr_storage saddr;
2069 struct ipv6_mreq mreq6;
2070 getaddrinfo(0,0,0,0);
2071 getnameinfo(0,0,0,0,0,0,0);
2072 IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
2076 check_header linux/videodev.h
2077 check_header linux/videodev2.h
2078 check_header sys/videoio.h
2080 check_func_headers "windows.h vfw.h" capCreateCaptureWindow -lvfw32
2082 # check for ioctl_meteor.h, ioctl_bt848.h and alternatives
2083 { check_header dev/bktr/ioctl_meteor.h &&
2084 check_header dev/bktr/ioctl_bt848.h; } ||
2085 { check_header machine/ioctl_meteor.h &&
2086 check_header machine/ioctl_bt848.h; } ||
2087 { check_header dev/video/meteor/ioctl_meteor.h &&
2088 check_header dev/video/bktr/ioctl_bt848.h; } ||
2089 check_header dev/ic/bt8xx.h
2091 check_header sys/soundcard.h
2092 check_header soundcard.h
2094 check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
2096 # deal with the X11 frame grabber
2097 enabled x11grab &&
2098 check_header X11/Xlib.h &&
2099 check_header X11/extensions/XShm.h &&
2100 check_func XOpenDisplay -lX11 &&
2101 check_func XShmCreateImage -lX11 -lXext
2103 enabled debug && add_cflags -g"$debuglevel"
2105 # add some useful compiler flags if supported
2106 check_cflags -Wdeclaration-after-statement
2107 check_cflags -Wall
2108 check_cflags -Wno-switch
2109 check_cflags -Wdisabled-optimization
2110 check_cflags -Wpointer-arith
2111 check_cflags -Wredundant-decls
2112 check_cflags -Wno-pointer-sign
2113 check_cflags -Wcast-qual
2114 check_cflags -Wwrite-strings
2115 check_cflags -Wtype-limits
2116 check_cflags -Wundef
2117 enabled extra_warnings && check_cflags -Winline
2119 # add some linker flags
2120 check_ldflags -Wl,--warn-common
2121 check_ldflags -Wl,--as-needed
2122 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'
2123 check_ldflags -Wl,-Bsymbolic
2125 if enabled small; then
2126 check_cflags -Os # not all compilers support -Os
2127 optimizations="small"
2128 elif enabled optimizations; then
2129 if enabled xlc; then
2130 add_cflags -O5
2131 add_ldflags -O5
2132 elif enabled ccc; then
2133 add_cflags -fast
2134 else
2135 add_cflags -O3
2138 check_cflags -fno-math-errno
2139 check_cflags -fno-signed-zeros
2141 # add some flags for Intel C Compiler
2142 if enabled icc; then
2143 # Just warnings, no remarks
2144 check_cflags -w1
2145 # -wd: Disable following warnings
2146 # 144, 167, 556: -Wno-pointer-sign
2147 # 10006: ignoring unknown option -fno-signed-zeros
2148 # 10156: ignoring option '-W'; no argument required
2149 check_cflags -wd144,167,556,10006,10156
2150 # 11030: Warning unknown option --as-needed
2151 # 10156: ignoring option '-export'; no argument required
2152 check_ldflags -wd10156,11030
2153 # Allow to compile with optimizations
2154 check_ldflags -march=$cpu
2155 elif enabled ccc; then
2156 # disable some annoying warnings
2157 add_cflags -msg_disable cvtu32to64
2158 add_cflags -msg_disable embedcomment
2159 add_cflags -msg_disable needconstext
2160 add_cflags -msg_disable nomainieee
2161 add_cflags -msg_disable ptrmismatch1
2162 add_cflags -msg_disable unreachcode
2165 # PIC flags for shared library objects where they are needed
2166 if enabled shared; then
2167 # LIBOBJFLAGS may have already been set in the OS configuration
2168 if test -z "$LIBOBJFLAGS" ; then
2169 case "${subarch-$arch}" in
2170 x86_64|ia64|alpha|sparc*|power*|parisc*|mips*) LIBOBJFLAGS='$(PIC)' ;;
2171 esac
2175 if enabled gprof; then
2176 add_cflags -p
2177 add_ldflags -p
2180 # Find out if the .align argument is a power of two or not.
2181 check_asm asmalign_pot '".align 3"'
2183 enabled_any $DECODER_LIST && enable decoders
2184 enabled_any $ENCODER_LIST && enable encoders
2185 enabled_any $BSF_LIST && enable bsfs
2186 enabled_any $DEMUXER_LIST && enable demuxers
2187 enabled_any $MUXER_LIST && enable muxers
2188 enabled_any $FILTER_LIST && enable filters
2189 enabled_any $INDEV_LIST && enable demuxers
2190 enabled_any $OUTDEV_LIST && enable muxers
2191 enabled_any $PROTOCOL_LIST && enable protocols
2193 enabled_any $THREADS_LIST && enable threads
2195 check_deps $CONFIG_LIST \
2196 $CONFIG_EXTRA \
2197 $HAVE_LIST \
2198 $DECODER_LIST \
2199 $ENCODER_LIST \
2200 $PARSER_LIST \
2201 $BSF_LIST \
2202 $DEMUXER_LIST \
2203 $MUXER_LIST \
2204 $FILTER_LIST \
2205 $INDEV_LIST \
2206 $OUTDEV_LIST \
2207 $PROTOCOL_LIST \
2209 echo "install prefix $prefix"
2210 echo "source path $source_path"
2211 echo "C compiler $cc"
2212 echo ".align is power-of-two $asmalign_pot"
2213 echo "ARCH $arch ($cpu)"
2214 if test "$build_suffix" != ""; then
2215 echo "build suffix $build_suffix"
2217 if test "$extra_version" != ""; then
2218 echo "version string suffix $extra_version"
2220 echo "big-endian ${bigendian-no}"
2221 if enabled x86; then
2222 echo "yasm ${yasm-no}"
2223 echo "MMX enabled ${mmx-no}"
2224 echo "MMX2 enabled ${mmx2-no}"
2225 echo "3DNow! enabled ${amd3dnow-no}"
2226 echo "3DNow! extended enabled ${amd3dnowext-no}"
2227 echo "SSE enabled ${sse-no}"
2228 echo "SSSE3 enabled ${ssse3-no}"
2229 echo "CMOV enabled ${cmov-no}"
2230 echo "CMOV is fast ${fast_cmov-no}"
2231 echo "EBX available ${ebx_available-no}"
2232 echo "EBP available ${ebp_available-no}"
2233 echo "10 operands supported ${ten_operands-no}"
2235 if enabled arm; then
2236 echo "ARMv5TE enabled ${armv5te-no}"
2237 echo "ARMv6 enabled ${armv6-no}"
2238 echo "ARMv6T2 enabled ${armv6t2-no}"
2239 echo "ARM VFP enabled ${armvfp-no}"
2240 echo "IWMMXT enabled ${iwmmxt-no}"
2241 echo "NEON enabled ${neon-no}"
2243 if enabled mips; then
2244 echo "MMI enabled ${mmi-no}"
2246 if enabled ppc; then
2247 echo "AltiVec enabled ${altivec-no}"
2248 echo "PPC 4xx optimizations ${ppc4xx-no}"
2249 echo "dcbzl available ${dcbzl-no}"
2250 echo "performance report ${powerpc_perf-no}"
2252 if enabled sparc; then
2253 echo "VIS enabled ${vis-no}"
2255 echo "gprof enabled ${gprof-no}"
2256 echo "debug symbols ${debug-no}"
2257 echo "strip symbols ${stripping-no}"
2258 echo "optimizations ${optimizations-no}"
2259 echo "static ${static-no}"
2260 echo "shared ${shared-no}"
2261 echo "postprocessing support ${postproc-no}"
2262 echo "new filter support ${avfilter-no}"
2263 echo "filters using lavformat ${avfilter_lavf-no}"
2264 echo "network support ${network-no}"
2265 if enabled network; then
2266 echo "IPv6 support ${ipv6-no}"
2268 echo "threading support ${thread_type-no}"
2269 echo "SDL support ${sdl-no}"
2270 if enabled sdl_too_old; then
2271 echo "-> Your SDL version is too old - please upgrade to have FFplay/SDL support."
2273 echo "Sun medialib support ${mlib-no}"
2274 echo "AVISynth enabled ${avisynth-no}"
2275 echo "libamr-nb support ${libamr_nb-no}"
2276 echo "libamr-wb support ${libamr_wb-no}"
2277 echo "libdc1394 support ${libdc1394-no}"
2278 echo "libdirac enabled ${libdirac-no}"
2279 echo "libfaac enabled ${libfaac-no}"
2280 echo "libfaad enabled ${libfaad-no}"
2281 echo "libfaad dlopened ${libfaadbin-no}"
2282 echo "libgsm enabled ${libgsm-no}"
2283 echo "libmp3lame enabled ${libmp3lame-no}"
2284 echo "libnut enabled ${libnut-no}"
2285 echo "libopenjpeg enabled ${libopenjpeg-no}"
2286 echo "libschroedinger enabled ${libschroedinger-no}"
2287 echo "libspeex enabled ${libspeex-no}"
2288 echo "libtheora enabled ${libtheora-no}"
2289 echo "libvorbis enabled ${libvorbis-no}"
2290 echo "libx264 enabled ${libx264-no}"
2291 echo "libxvid enabled ${libxvid-no}"
2292 echo "vdpau enabled ${vdpau-no}"
2293 echo "zlib enabled ${zlib-no}"
2294 echo "bzlib enabled ${bzlib-no}"
2295 echo
2297 for type in decoder encoder parser demuxer muxer protocol filter bsf indev outdev; do
2298 echo "Enabled ${type}s:"
2299 eval list=\$$(toupper $type)_LIST
2300 for part in $list; do
2301 enabled $part && echo ${part%_*}
2302 done | sort | pr -3 -t
2303 echo
2304 done
2306 license="LGPL"
2307 if enabled nonfree; then
2308 license="unredistributable"
2309 elif enabled gpl; then
2310 license="GPL"
2313 echo "License: $license"
2315 echo "Creating config.mak and config.h..."
2317 echo "# Automatically generated by configure - do not modify!" > config.mak
2318 echo "/* Automatically generated by configure - do not modify! */" > $TMPH
2319 echo "#ifndef FFMPEG_CONFIG_H" >> $TMPH
2320 echo "#define FFMPEG_CONFIG_H" >> $TMPH
2321 echo "#define FFMPEG_CONFIGURATION \"$FFMPEG_CONFIGURATION\"" >> $TMPH
2322 echo "#define FFMPEG_DATADIR \"$(eval c_escape $datadir)\"" >> $TMPH
2324 echo "FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION" >> config.mak
2325 echo "prefix=$prefix" >> config.mak
2326 echo "LIBDIR=\$(DESTDIR)$libdir" >> config.mak
2327 echo "SHLIBDIR=\$(DESTDIR)$shlibdir" >> config.mak
2328 echo "INCDIR=\$(DESTDIR)$incdir" >> config.mak
2329 echo "BINDIR=\$(DESTDIR)$bindir" >> config.mak
2330 echo "DATADIR=\$(DESTDIR)$datadir" >> config.mak
2331 echo "MANDIR=\$(DESTDIR)$mandir" >> config.mak
2332 echo "CC=$cc" >> config.mak
2333 echo "YASM=$yasmexe" >> config.mak
2334 echo "AR=$ar" >> config.mak
2335 echo "RANLIB=$ranlib" >> config.mak
2336 echo "LN_S=$ln_s" >> config.mak
2337 enabled stripping &&
2338 echo "STRIP=$strip" >> config.mak ||
2339 echo "STRIP=echo ignoring strip" >> config.mak
2341 echo "OPTFLAGS=$CFLAGS" >> config.mak
2342 echo "LDFLAGS=$LDFLAGS" >> config.mak
2343 echo "FFSERVERLDFLAGS=$FFSERVERLDFLAGS" >> config.mak
2344 echo "SHFLAGS=$SHFLAGS" >> config.mak
2345 echo "YASMFLAGS=$YASMFLAGS" >> config.mak
2346 echo "LIBOBJFLAGS=$LIBOBJFLAGS" >> config.mak
2347 echo "BUILD_STATIC=$static" >> config.mak
2348 echo "BUILDSUF=$build_suffix" >> config.mak
2349 echo "FULLNAME=$FULLNAME" >> config.mak
2350 echo "LIBPREF=$LIBPREF" >> config.mak
2351 echo "LIBSUF=$LIBSUF" >> config.mak
2352 echo "LIBNAME=$LIBNAME" >> config.mak
2353 echo "SLIBPREF=$SLIBPREF" >> config.mak
2354 echo "SLIBSUF=$SLIBSUF" >> config.mak
2355 echo "EXESUF=$EXESUF" >> config.mak
2356 echo "EXTRA_VERSION=$extra_version" >> config.mak
2357 echo "DEPEND_CMD=$DEPEND_CMD" >> config.mak
2358 echo "HOSTCC=$host_cc" >> config.mak
2359 echo "HOSTCFLAGS=$host_cflags" >> config.mak
2360 echo "HOSTLDFLAGS=$host_ldflags" >> config.mak
2361 echo "HOSTLIBS=$host_libs" >> config.mak
2362 echo "TARGET_EXEC=$target_exec" >> config.mak
2363 echo "TARGET_PATH=$target_path" >> config.mak
2365 if enabled bigendian; then
2366 echo "WORDS_BIGENDIAN=yes" >> config.mak
2367 echo "#define WORDS_BIGENDIAN 1" >> $TMPH
2370 if enabled sdl; then
2371 echo "SDL_LIBS=`"${SDL_CONFIG}" --libs`" >> config.mak
2372 echo "SDL_CFLAGS=`"${SDL_CONFIG}" --cflags`" >> config.mak
2374 if enabled texi2html; then
2375 echo "BUILD_DOC=yes" >> config.mak
2378 get_version(){
2379 name=$1
2380 file=$source_path/$2
2381 eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
2382 eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
2383 lcname=$(tolower $name)
2384 eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
2385 eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
2388 get_version LIBSWSCALE libswscale/swscale.h
2389 get_version LIBPOSTPROC libpostproc/postprocess.h
2390 get_version LIBAVCODEC libavcodec/avcodec.h
2391 get_version LIBAVDEVICE libavdevice/avdevice.h
2392 get_version LIBAVFORMAT libavformat/avformat.h
2393 get_version LIBAVUTIL libavutil/avutil.h
2394 get_version LIBAVFILTER libavfilter/avfilter.h
2396 if enabled shared; then
2397 echo "BUILD_SHARED=yes" >> config.mak
2398 echo "PIC=-fPIC -DPIC" >> config.mak
2399 echo "LIBTARGET=${LIBTARGET}" >> config.mak
2400 echo "SLIBNAME=${SLIBNAME}" >> config.mak
2401 echo "SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}" >> config.mak
2402 echo "SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}" >> config.mak
2403 echo "SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}" >> config.mak
2404 echo "SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}" >> config.mak
2405 echo "SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}" >> config.mak
2406 echo "SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}" >> config.mak
2408 echo "LIB_INSTALL_EXTRA_CMD=${LIB_INSTALL_EXTRA_CMD}" >> config.mak
2409 echo "EXTRALIBS=$extralibs" >> config.mak
2411 echo "ARCH=$arch" >> config.mak
2413 print_config ARCH_ $TMPH config.mak $ARCH_LIST
2414 print_config HAVE_ $TMPH config.mak $HAVE_LIST
2415 print_config CONFIG_ $TMPH config.mak $CONFIG_LIST \
2416 $CONFIG_EXTRA \
2417 $DECODER_LIST \
2418 $ENCODER_LIST \
2419 $PARSER_LIST \
2420 $BSF_LIST \
2421 $DEMUXER_LIST \
2422 $MUXER_LIST \
2423 $FILTER_LIST \
2424 $PROTOCOL_LIST \
2425 $INDEV_LIST \
2426 $OUTDEV_LIST \
2428 echo "#define restrict $_restrict" >> $TMPH
2430 if enabled small; then
2431 echo "#define av_always_inline" >> $TMPH
2434 echo "SRC_PATH=\"$source_path\"" >> config.mak
2435 echo "SRC_PATH_BARE=$source_path" >> config.mak
2436 echo "BUILD_ROOT=\"$PWD\"" >> config.mak
2438 # Apparently it's not possible to portably echo a backslash.
2439 enabled asmalign_pot &&
2440 printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH ||
2441 printf '#define ASMALIGN(ZEROBITS) ".align 1 << " #ZEROBITS "\\n\\t"\n' >> $TMPH
2443 echo "#define EXTERN_PREFIX \"${extern_prefix}\"" >> $TMPH
2445 echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
2447 # Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
2448 cmp -s $TMPH config.h &&
2449 echo "config.h is unchanged" ||
2450 mv -f $TMPH config.h
2452 # build tree in object directory if source path is different from current one
2453 if enabled source_path_used; then
2454 DIRS="\
2455 doc \
2456 libavcodec \
2457 libavcodec/alpha \
2458 libavcodec/arm \
2459 libavcodec/bfin \
2460 libavcodec/mlib \
2461 libavcodec/ppc \
2462 libavcodec/sh4 \
2463 libavcodec/sparc \
2464 libavcodec/x86 \
2465 libavdevice \
2466 libavfilter \
2467 libavformat \
2468 libavutil \
2469 libpostproc \
2470 libswscale \
2471 tests \
2472 tools \
2474 FILES="\
2475 Makefile \
2476 common.mak \
2477 subdir.mak \
2478 doc/texi2pod.pl \
2479 libavcodec/Makefile \
2480 libavdevice/Makefile \
2481 libavfilter/Makefile \
2482 libavformat/Makefile \
2483 libavutil/Makefile \
2484 libpostproc/Makefile \
2485 libswscale/Makefile \
2487 for dir in $DIRS ; do
2488 mkdir -p $dir
2489 done
2490 for f in $FILES ; do
2491 $ln_s "$source_path/$f" $f
2492 done
2496 # build pkg-config files
2498 pkgconfig_generate(){
2499 name=$1
2500 shortname=${name#lib}${build_suffix}
2501 comment=$2
2502 version=$3
2503 libs=$4
2504 requires=$5
2505 cat <<EOF > $name/$name.pc
2506 prefix=$prefix
2507 exec_prefix=\${prefix}
2508 libdir=$libdir
2509 includedir=$incdir
2511 Name: $name
2512 Description: $comment
2513 Version: $version
2514 Requires: $(disabled shared && echo $requires)
2515 Requires.private: $(enabled shared && echo $requires)
2516 Conflicts:
2517 Libs: -L\${libdir} -l${shortname} $(disabled shared && echo $libs)
2518 Libs.private: $(enabled shared && echo $libs)
2519 Cflags: -I\${includedir}
2521 cat <<EOF > $name/$name-uninstalled.pc
2522 prefix=
2523 exec_prefix=
2524 libdir=\${pcfiledir}
2525 includedir=${source_path}
2527 Name: $name
2528 Description: $comment
2529 Version: $version
2530 Requires: $requires
2531 Conflicts:
2532 Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
2533 Cflags: -I\${includedir}
2537 pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
2538 pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
2539 pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
2540 pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "libavformat = $LIBAVFORMAT_VERSION"
2541 enabled avfilter &&
2542 pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
2543 enabled postproc &&
2544 pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
2545 pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"