cosmetics: vertical alignment
[FFMpeg-mirror/lagarith.git] / configure
blob0c0a72435e88e0e21ce0e5aaa340095696cfca8c
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 " --disable-swscale-alpha disable alpha channel support in swscale"
96 echo " --disable-fastdiv disable 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 " --as=AS use assembler AS [$as_default]"
182 echo " --cc=CC use C compiler CC [$cc_default]"
183 echo " --host-cc=HOSTCC use host C compiler HOSTCC"
184 echo " --host-cflags=HCFLAGS use HCFLAGS when compiling for host"
185 echo " --host-ldflags=HLDFLAGS use HLDFLAGS when linking for host"
186 echo " --host-libs=HLIBS use libs HLIBS when linking for host"
187 echo " --extra-cflags=ECFLAGS add ECFLAGS to CFLAGS [$CFLAGS]"
188 echo " --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]"
189 echo " --extra-libs=ELIBS add ELIBS [$ELIBS]"
190 echo " --extra-version=STRING version string suffix []"
191 echo " --build-suffix=SUFFIX library name suffix []"
192 echo " --arch=ARCH select architecture [$arch]"
193 echo " --cpu=CPU select the minimum required CPU (affects"
194 echo " instruction selection, may crash on older CPUs)"
195 echo " --enable-powerpc-perf enable performance report on PPC"
196 echo " (requires enabling PMC)"
197 echo " --disable-altivec disable AltiVec optimizations"
198 echo " --disable-amd3dnow disable 3DNow! optimizations"
199 echo " --disable-amd3dnowext disable 3DNow! extended optimizations"
200 echo " --disable-mmx disable MMX optimizations"
201 echo " --disable-mmx2 disable MMX2 optimizations"
202 echo " --disable-sse disable SSE optimizations"
203 echo " --disable-ssse3 disable SSSE3 optimizations"
204 echo " --disable-armv5te disable armv5te optimizations"
205 echo " --disable-armv6 disable armv6 optimizations"
206 echo " --disable-armv6t2 disable armv6t2 optimizations"
207 echo " --disable-armvfp disable ARM VFP optimizations"
208 echo " --disable-iwmmxt disable iwmmxt optimizations"
209 echo " --disable-mmi disable MMI optimizations"
210 echo " --disable-neon disable neon optimizations"
211 echo " --disable-vis disable VIS optimizations"
212 echo " --disable-yasm disable use of yasm assembler"
213 echo
214 echo "Developer options (useful when working on FFmpeg itself):"
215 echo " --disable-debug disable debugging symbols"
216 echo " --enable-debug=LEVEL set the debug level [$debuglevel]"
217 echo " --enable-gprof enable profiling with gprof [$gprof]"
218 echo " --disable-optimizations disable compiler optimizations"
219 echo " --enable-extra-warnings enable more compiler warnings"
220 echo " --disable-stripping disable stripping of executables and shared libraries"
221 echo ""
222 echo "NOTE: Object files are built at the place where configure is launched."
223 exit 0
226 log(){
227 echo "$@" >> $logfile
230 log_file(){
231 log BEGIN $1
232 pr -n -t $1 >> $logfile
233 log END $1
236 echolog(){
237 log "$@"
238 echo "$@"
241 die(){
242 echolog "$@"
243 cat <<EOF
244 If you think configure made a mistake, make sure you are using the latest
245 version from SVN. If the latest version fails, report the problem to the
246 ffmpeg-user@mplayerhq.hu mailing list or IRC #ffmpeg on irc.freenode.net.
248 if disabled logging; then
249 cat <<EOF
250 Rerun configure with logging enabled (do not use --disable-logging), and
251 include the log this produces with your report.
253 else
254 cat <<EOF
255 Include the log file "$logfile" produced by configure as this will help
256 solving the problem.
259 exit 1
262 # Avoid locale weirdness, besides we really just want to translate ASCII.
263 toupper(){
264 echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
267 tolower(){
268 echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
271 c_escape(){
272 echo "$*" | sed 's/["\\]/\\\0/g'
275 set_all(){
276 value=$1
277 shift
278 for var in $*; do
279 eval $var=$value
280 done
283 set_weak(){
284 value=$1
285 shift
286 for var; do
287 eval : \${$var:=$value}
288 done
291 pushvar(){
292 for var in $*; do
293 eval level=\${${var}_level:=0}
294 eval ${var}_${level}="\$$var"
295 eval ${var}_level=$(($level+1))
296 done
299 popvar(){
300 for var in $*; do
301 eval level=\${${var}_level:-0}
302 test $level = 0 && continue
303 eval level=$(($level-1))
304 eval $var="\${${var}_${level}}"
305 eval ${var}_level=$level
306 eval unset ${var}_${level}
307 done
310 enable(){
311 set_all yes $*
314 disable(){
315 set_all no $*
318 enable_weak(){
319 set_weak yes $*
322 disable_weak(){
323 set_weak no $*
326 enable_safe(){
327 enable $(echo "$*" | sed 's/[^A-Za-z0-9_ ]/_/g')
330 disable_safe(){
331 disable $(echo "$*" | sed 's/[^A-Za-z0-9_ ]/_/g')
334 do_enable_deep(){
335 for var; do
336 enabled $var && continue
337 eval sel="\$${var}_select"
338 eval sgs="\$${var}_suggest"
339 pushvar var sgs
340 enable_deep $sel
341 popvar sgs
342 enable_deep_weak $sgs
343 popvar var
344 done
347 enable_deep(){
348 do_enable_deep $*
349 enable $*
352 enable_deep_weak(){
353 do_enable_deep $*
354 enable_weak $*
357 enabled(){
358 test "${1#!}" = "$1" && op== || op=!=
359 eval test "x\$${1#!}" $op "xyes"
362 disabled(){
363 test "${1#!}" = "$1" && op== || op=!=
364 eval test "x\$${1#!}" $op "xno"
367 enabled_all(){
368 for opt; do
369 enabled $opt || return 1
370 done
373 disabled_all(){
374 for opt; do
375 disabled $opt || return 1
376 done
379 enabled_any(){
380 for opt; do
381 enabled $opt && return 0
382 done
385 disabled_any(){
386 for opt; do
387 disabled $opt && return 0
388 done
389 return 1
392 set_default(){
393 for opt; do
394 eval : \${$opt:=\$${opt}_default}
395 done
398 is_in(){
399 value=$1
400 shift
401 for var in $*; do
402 [ $var = $value ] && return 0
403 done
404 return 1
407 check_deps(){
408 for cfg; do
409 cfg="${cfg#!}"
410 enabled ${cfg}_checking && die "Circular dependency for $cfg."
411 disabled ${cfg}_checking && continue
412 enable ${cfg}_checking
414 eval dep_all="\$${cfg}_deps"
415 eval dep_any="\$${cfg}_deps_any"
416 eval dep_sel="\$${cfg}_select"
417 eval dep_sgs="\$${cfg}_suggest"
419 pushvar cfg dep_all dep_any dep_sel dep_sgs
420 check_deps $dep_all $dep_any $dep_sel $dep_sgs
421 popvar cfg dep_all dep_any dep_sel dep_sgs
423 enabled_all $dep_all || disable $cfg
424 enabled_any $dep_any || disable $cfg
425 disabled_any $dep_sel && disable $cfg
427 if enabled $cfg; then
428 eval dep_extralibs="\$${cfg}_extralibs"
429 test -n "$dep_extralibs" && add_extralibs $dep_extralibs
430 enable_deep $dep_sel
431 enable_deep_weak $dep_sgs
434 disable ${cfg}_checking
435 done
438 print_config(){
439 pfx=$1
440 header=$2
441 makefile=$3
442 shift 3
443 for cfg; do
444 ucname="$(toupper $cfg)"
445 if enabled $cfg; then
446 echo "#define ${pfx}${ucname} 1" >> $header
447 echo "${pfx}${ucname}=yes" >> $makefile
448 else
449 echo "#define ${pfx}${ucname} 0" >> $header
451 done
454 flags_saved(){
455 (: ${SAVE_CFLAGS?}) 2> /dev/null
458 save_flags(){
459 flags_saved && return
460 SAVE_CFLAGS="$CFLAGS"
461 SAVE_LDFLAGS="$LDFLAGS"
462 SAVE_extralibs="$extralibs"
465 restore_flags(){
466 flags_saved || return
467 CFLAGS="$SAVE_CFLAGS"
468 LDFLAGS="$SAVE_LDFLAGS"
469 extralibs="$SAVE_extralibs"
470 unset SAVE_CFLAGS
471 unset SAVE_LDFLAGS
472 unset SAVE_extralibs
475 temp_cflags(){
476 save_flags
477 CFLAGS="$CFLAGS $*"
480 temp_ldflags(){
481 save_flags
482 LDFLAGS="$LDFLAGS $*"
485 temp_extralibs(){
486 save_flags
487 extralibs="$extralibs $*"
490 append(){
491 var=$1
492 shift
493 flags_saved && eval "SAVE_$var=\"\$SAVE_$var $*\""
494 eval "$var=\"\$$var $*\""
497 add_cflags(){
498 append CFLAGS "$@"
501 add_ldflags(){
502 append LDFLAGS "$@"
505 add_extralibs(){
506 append extralibs "$@"
509 check_cmd(){
510 log "$@"
511 "$@" >> $logfile 2>&1
514 check_cc(){
515 log check_cc "$@"
516 cat > $TMPC
517 log_file $TMPC
518 check_cmd $cc $CFLAGS "$@" -c -o $TMPO $TMPC
521 check_cpp(){
522 log check_cpp "$@"
523 cat > $TMPC
524 log_file $TMPC
525 check_cmd $cc $CFLAGS "$@" -E -o $TMPO $TMPC
528 check_as(){
529 log check_as "$@"
530 cat > $TMPC
531 log_file $TMPC
532 check_cmd $as $CFLAGS "$@" -c -o $TMPO $TMPC
535 check_asm(){
536 log check_asm "$@"
537 name="$1"
538 asm="$2"
539 shift 2
540 check_as "$@" <<EOF && enable $name || disable $name
541 void foo(void){ __asm__ volatile($asm); }
545 check_yasm(){
546 log check_yasm "$@"
547 echo "$1" > $TMPS
548 log_file $TMPS
549 shift 1
550 check_cmd $yasmexe $YASMFLAGS "$@" -o $TMPO $TMPS
553 check_ld(){
554 log check_ld "$@"
555 check_cc || return
556 flags=''
557 libs=''
558 for f; do
559 test "${f}" = "${f#-l}" && flags="$flags $f" || libs="$libs $f"
560 done
561 check_cmd $cc $LDFLAGS $flags -o $TMPE $TMPO $extralibs $libs
564 check_cflags(){
565 log check_cflags "$@"
566 check_cc "$@" <<EOF && add_cflags "$@"
567 int x;
571 check_ldflags(){
572 log check_ldflags "$@"
573 check_ld "$@" <<EOF && add_ldflags "$@"
574 int main(void){ return 0; }
578 check_header(){
579 log check_header "$@"
580 header=$1
581 shift
582 disable_safe $header
583 check_cpp "$@" <<EOF && enable_safe $header
584 #include <$header>
585 int x;
589 check_func(){
590 log check_func "$@"
591 func=$1
592 shift
593 disable $func
594 check_ld "$@" <<EOF && enable $func
595 extern int $func();
596 int main(void){ $func(); }
600 check_func_headers(){
601 log check_func_headers "$@"
602 headers=$1
603 func=$2
604 shift 2
605 disable $func
606 incs=""
607 for hdr in $headers; do
608 incs="$incs
609 #include <$hdr>"
610 done
611 check_ld "$@" <<EOF && enable $func && enable_safe $headers
612 $incs
613 int main(int argc, char **argv){
614 (void) $func;
615 return 0;
620 check_cpp_condition(){
621 log check_cpp_condition "$@"
622 header=$1
623 condition=$2
624 check_cpp <<EOF
625 #include <$header>
626 #if !($condition)
627 #error "unsatisfied condition: $condition"
628 #endif
632 check_lib(){
633 log check_lib "$@"
634 header="$1"
635 func="$2"
636 shift 2
637 temp_extralibs "$@"
638 check_header $header && check_func $func && add_extralibs "$@"
639 err=$?
640 restore_flags
641 return $err
644 check_lib2(){
645 log check_lib2 "$@"
646 headers="$1"
647 func="$2"
648 shift 2
649 temp_extralibs "$@"
650 check_func_headers "$headers" $func && add_extralibs "$@"
651 err=$?
652 restore_flags
653 return $err
656 check_exec(){
657 check_ld "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
660 check_exec_crash(){
661 code=$(cat)
663 # exit() is not async signal safe. _Exit (C99) and _exit (POSIX)
664 # are safe but may not be available everywhere. Thus we use
665 # raise(SIGTERM) instead. The check is run in a subshell so we
666 # can redirect the "Terminated" message from the shell. SIGBUS
667 # is not defined by standard C so it is used conditionally.
669 (check_exec "$@") >> $logfile 2>&1 <<EOF
670 #include <signal.h>
671 static void sighandler(int sig){
672 raise(SIGTERM);
674 int main(void){
675 signal(SIGILL, sighandler);
676 signal(SIGFPE, sighandler);
677 signal(SIGSEGV, sighandler);
678 #ifdef SIGBUS
679 signal(SIGBUS, sighandler);
680 #endif
681 { $code }
686 check_type(){
687 log check_type "$@"
688 headers=$1
689 type=$2
690 shift 2
691 disable $type
692 incs=""
693 for hdr in $headers; do
694 incs="$incs
695 #include <$hdr>"
696 done
697 check_cc "$@" <<EOF && enable $type
698 $incs
699 $type v;
703 require(){
704 name="$1"
705 header="$2"
706 func="$3"
707 shift 3
708 check_lib $header $func "$@" || die "ERROR: $name not found"
711 require2(){
712 name="$1"
713 headers="$2"
714 func="$3"
715 shift 3
716 check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
719 check_foo_config(){
720 cfg=$1
721 pkg=$2
722 header=$3
723 func=$4
724 shift 4
725 disable $cfg
726 check_cmd ${pkg}-config --version
727 err=$?
728 if test "$err" = 0; then
729 temp_cflags $(${pkg}-config --cflags)
730 temp_extralibs $(${pkg}-config --libs)
731 check_lib "$@" $header $func && enable $cfg
733 return $err
736 apply(){
737 file=$1
738 shift
739 "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
742 # CONFIG_LIST contains configurable options, while HAVE_LIST is for
743 # system-dependent things.
745 COMPONENT_LIST="
746 bsfs
747 decoders
748 demuxers
749 encoders
750 filters
751 indevs
752 muxers
753 outdevs
754 parsers
755 protocols
758 CONFIG_LIST="
759 $COMPONENT_LIST
760 aandct
761 avfilter
762 avfilter_lavf
763 avisynth
764 beos_netserver
765 bzlib
766 fastdiv
767 ffmpeg
768 ffplay
769 ffserver
771 golomb
773 gprof
774 gray
775 hardcoded_tables
776 ipv6
777 libamr_nb
778 libamr_wb
779 libdc1394
780 libdirac
781 libfaac
782 libfaad
783 libfaadbin
784 libgsm
785 libmp3lame
786 libnut
787 libopenjpeg
788 libschroedinger
789 libspeex
790 libtheora
791 libvorbis
792 libx264
793 libxvid
794 mdct
795 memalign_hack
796 mlib
797 mpegaudio_hp
798 network
799 nonfree
800 postproc
801 powerpc_perf
802 rdft
803 shared
804 small
805 static
806 swscale_alpha
807 x11grab
808 zlib
811 THREADS_LIST='
812 beosthreads
813 os2threads
814 pthreads
815 w32threads
818 ARCH_LIST='
819 alpha
821 bfin
822 ia64
823 m68k
824 mips
825 parisc
827 s390
829 sparc
830 sparc64
832 x86_32
833 x86_64
836 ARCH_EXT_LIST='
837 altivec
838 amd3dnow
839 amd3dnowext
840 armv5te
841 armv6
842 armv6t2
843 armvfp
844 iwmmxt
847 mmx2
848 neon
849 ppc4xx
851 ssse3
855 HAVE_LIST="
856 $ARCH_EXT_LIST
857 $THREADS_LIST
858 alsa_asoundlib_h
859 altivec_h
860 arpa_inet_h
861 bswap
862 closesocket
863 cmov
864 conio_h
865 dcbzl
866 dev_bktr_ioctl_bt848_h
867 dev_bktr_ioctl_meteor_h
868 dev_ic_bt8xx_h
869 dev_video_meteor_ioctl_meteor_h
870 dev_video_bktr_ioctl_bt848_h
871 dlfcn_h
872 dlopen
873 dos_paths
874 ebp_available
875 ebx_available
876 fast_64bit
877 fast_cmov
878 fast_unaligned
879 fork
880 gethrtime
881 GetProcessTimes
882 getrusage
883 inet_aton
884 inline_asm
885 libdc1394_1
886 libdc1394_2
887 llrint
888 lrint
889 lrintf
890 machine_ioctl_bt848_h
891 machine_ioctl_meteor_h
892 malloc_h
893 memalign
894 mkstemp
896 posix_memalign
897 ppc64
898 round
899 roundf
901 sdl_video_size
902 setmode
903 socklen_t
904 soundcard_h
905 poll_h
906 sys_mman_h
907 sys_resource_h
908 sys_select_h
909 sys_soundcard_h
910 sys_videoio_h
911 ten_operands
912 termios_h
913 threads
914 truncf
915 VirtualAlloc
916 winsock2_h
917 yasm
920 # options emitted with CONFIG_ prefix but not available on command line
921 CONFIG_EXTRA="
924 CMDLINE_SELECT="
925 $ARCH_EXT_LIST
926 $CONFIG_LIST
927 $THREADS_LIST
928 cross_compile
929 debug
930 extra_warnings
931 logging
932 optimizations
933 stripping
934 yasm
937 PATHS_LIST='
938 bindir
939 datadir
940 incdir
941 libdir
942 mandir
943 prefix
944 shlibdir
947 CMDLINE_SET="
948 $PATHS_LIST
949 arch
951 build_suffix
954 cross_prefix
955 extra_version
956 host_cc
957 host_cflags
958 host_ldflags
959 host_libs
960 host_os
961 logfile
963 source_path
964 sysinclude
965 sysroot
966 target_exec
967 target_os
968 target_path
971 # code dependency declarations
973 # architecture extensions
974 altivec_deps="ppc"
975 amd3dnow_deps="mmx"
976 amd3dnowext_deps="amd3dnow"
977 armv5te_deps="arm"
978 armv6_deps="arm"
979 armv6t2_deps="arm"
980 armvfp_deps="arm"
981 iwmmxt_deps="arm"
982 mmi_deps="mips"
983 mmx_deps="x86"
984 mmx2_deps="mmx"
985 neon_deps="arm"
986 ppc4xx_deps="ppc"
987 sse_deps="mmx"
988 ssse3_deps="sse"
989 vis_deps="sparc"
991 # decoders / encoders
992 aac_decoder_select="fft mdct"
993 ac3_decoder_deps="gpl"
994 ac3_decoder_select="fft mdct"
995 atrac3_decoder_select="fft mdct"
996 cavs_decoder_select="golomb"
997 cook_decoder_select="fft mdct"
998 cscd_decoder_suggest="zlib"
999 dca_decoder_select="fft mdct"
1000 dnxhd_encoder_select="aandct"
1001 dxa_decoder_select="zlib"
1002 eac3_decoder_deps="gpl"
1003 eac3_decoder_select="fft mdct"
1004 eatgq_decoder_select="aandct"
1005 eatqi_decoder_select="aandct"
1006 ffv1_decoder_select="golomb"
1007 flac_decoder_select="golomb"
1008 flac_encoder_select="golomb"
1009 flashsv_decoder_select="zlib"
1010 flashsv_encoder_select="zlib"
1011 flv_encoder_select="aandct"
1012 h261_encoder_select="aandct"
1013 h263_encoder_select="aandct"
1014 h263p_encoder_select="aandct"
1015 h264_decoder_select="golomb"
1016 h264_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1017 imc_decoder_select="fft mdct"
1018 jpegls_decoder_select="golomb"
1019 jpegls_encoder_select="golomb"
1020 ljpeg_encoder_select="aandct"
1021 loco_decoder_select="golomb"
1022 mjpeg_encoder_select="aandct"
1023 mpeg1video_encoder_select="aandct"
1024 mpeg2video_encoder_select="aandct"
1025 mpeg4_encoder_select="aandct"
1026 mpeg_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1027 mpeg1_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1028 mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h"
1029 msmpeg4v1_encoder_select="aandct"
1030 msmpeg4v2_encoder_select="aandct"
1031 msmpeg4v3_encoder_select="aandct"
1032 nellymoser_decoder_select="fft mdct"
1033 nellymoser_encoder_select="fft mdct"
1034 png_decoder_select="zlib"
1035 png_encoder_select="zlib"
1036 qdm2_decoder_select="fft mdct rdft"
1037 rv10_encoder_select="aandct"
1038 rv20_encoder_select="aandct"
1039 rv30_decoder_select="golomb"
1040 rv40_decoder_select="golomb"
1041 shorten_decoder_select="golomb"
1042 sonic_decoder_select="golomb"
1043 sonic_encoder_select="golomb"
1044 sonic_ls_encoder_select="golomb"
1045 svq3_decoder_select="golomb"
1046 svq3_decoder_suggest="zlib"
1047 tiff_decoder_suggest="zlib"
1048 tiff_encoder_suggest="zlib"
1049 tscc_decoder_select="zlib"
1050 vc1_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1051 vorbis_decoder_select="fft mdct"
1052 vorbis_encoder_select="fft mdct"
1053 wmav1_decoder_select="fft mdct"
1054 wmav1_encoder_select="fft mdct"
1055 wmav2_decoder_select="fft mdct"
1056 wmav2_encoder_select="fft mdct"
1057 wmv1_encoder_select="aandct"
1058 wmv2_encoder_select="aandct"
1059 wmv3_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1060 zlib_decoder_select="zlib"
1061 zlib_encoder_select="zlib"
1062 zmbv_decoder_select="zlib"
1063 zmbv_encoder_select="zlib"
1065 # external libraries
1066 libamr_nb_decoder_deps="libamr_nb"
1067 libamr_nb_encoder_deps="libamr_nb"
1068 libamr_wb_decoder_deps="libamr_wb"
1069 libamr_wb_encoder_deps="libamr_wb"
1070 libdirac_decoder_deps="libdirac !libschroedinger"
1071 libdirac_encoder_deps="libdirac"
1072 libfaac_encoder_deps="libfaac"
1073 libfaad_decoder_deps="libfaad"
1074 libfaadbin_decoder_extralibs='$ldl'
1075 libgsm_decoder_deps="libgsm"
1076 libgsm_encoder_deps="libgsm"
1077 libgsm_ms_decoder_deps="libgsm"
1078 libgsm_ms_encoder_deps="libgsm"
1079 libmp3lame_encoder_deps="libmp3lame"
1080 libopenjpeg_decoder_deps="libopenjpeg"
1081 libschroedinger_decoder_deps="libschroedinger"
1082 libschroedinger_encoder_deps="libschroedinger"
1083 libspeex_decoder_deps="libspeex"
1084 libtheora_encoder_deps="libtheora"
1085 libvorbis_encoder_deps="libvorbis"
1086 libx264_encoder_deps="libx264"
1087 libxvid_encoder_deps="libxvid"
1089 # demuxers / muxers
1090 ac3_demuxer_deps="ac3_parser"
1091 alsa_demuxer_deps="alsa_asoundlib_h snd_pcm_htimestamp"
1092 alsa_demuxer_extralibs="-lasound"
1093 alsa_muxer_deps="alsa_asoundlib_h"
1094 alsa_muxer_extralibs="-lasound"
1095 audio_beos_demuxer_deps="audio_beos"
1096 audio_beos_demuxer_extralibs="-lmedia -lbe"
1097 audio_beos_muxer_deps="audio_beos"
1098 audio_beos_muxer_extralibs="-lmedia -lbe"
1099 avisynth_demuxer_deps="avisynth"
1100 bktr_demuxer_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
1101 dirac_demuxer_deps="dirac_parser"
1102 dv1394_demuxer_deps="dv1394 dv_demuxer"
1103 libdc1394_demuxer_deps="libdc1394"
1104 libnut_demuxer_deps="libnut"
1105 libnut_muxer_deps="libnut"
1106 matroska_demuxer_suggest="zlib bzlib"
1107 mov_demuxer_suggest="zlib"
1108 mp3_demuxer_deps="mpegaudio_parser"
1109 oss_demuxer_deps_any="soundcard_h sys_soundcard_h"
1110 oss_muxer_deps_any="soundcard_h sys_soundcard_h"
1111 redir_demuxer_deps="network"
1112 rtp_muxer_deps="network rtp_protocol"
1113 rtsp_demuxer_deps="sdp_demuxer"
1114 sdp_demuxer_deps="rtp_protocol mpegts_demuxer"
1115 v4l_demuxer_deps="linux_videodev_h"
1116 v4l2_demuxer_deps_any="linux_videodev2_h sys_videoio_h"
1117 vfwcap_demuxer_deps="capCreateCaptureWindow"
1118 vfwcap_demuxer_extralibs="-lvfw32"
1119 x11_grab_device_demuxer_deps="x11grab XShmCreateImage"
1120 x11_grab_device_demuxer_extralibs="-lX11 -lXext"
1122 # protocols
1123 gopher_protocol_deps="network"
1124 http_protocol_deps="network"
1125 rtp_protocol_deps="udp_protocol"
1126 tcp_protocol_deps="network"
1127 udp_protocol_deps="network"
1129 # filters
1130 movie_filter_deps="avfilter_lavf"
1132 # programs
1133 ffplay_deps="sdl"
1134 ffserver_deps="ffm_muxer rtp_protocol rtsp_demuxer"
1135 ffserver_extralibs='$ldl'
1138 # default parameters
1140 logfile="config.err"
1142 # installation paths
1143 prefix_default="/usr/local"
1144 bindir_default='${prefix}/bin'
1145 datadir_default='${prefix}/share/ffmpeg'
1146 incdir_default='${prefix}/include'
1147 libdir_default='${prefix}/lib'
1148 mandir_default='${prefix}/share/man'
1149 shlibdir_default="$libdir_default"
1151 # toolchain
1152 ar="ar"
1153 cc_default="gcc"
1154 host_cc_default="gcc"
1155 ln_s="ln -sf"
1156 nm_default="nm"
1157 objformat="elf"
1158 ranlib="ranlib"
1159 strip="strip"
1160 yasmexe="yasm"
1162 # machine
1163 arch=$(uname -m)
1164 cpu="generic"
1166 # OS
1167 target_os=$(tolower $(uname -s))
1168 host_os=$target_os
1170 # configurable options
1171 enable debug
1172 enable fastdiv
1173 enable ffmpeg
1174 enable ffplay
1175 enable ffserver
1176 enable ipv6
1177 enable mpegaudio_hp
1178 enable network
1179 enable optimizations
1180 enable protocols
1181 enable static
1182 enable stripping
1183 enable swscale_alpha
1185 # build settings
1186 add_cflags -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112
1187 SHFLAGS='-shared -Wl,-soname,$$(@F)'
1188 FFSERVERLDFLAGS=-Wl,-E
1189 LIBPREF="lib"
1190 LIBSUF=".a"
1191 FULLNAME='$(NAME)$(BUILDSUF)'
1192 LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
1193 SLIBPREF="lib"
1194 SLIBSUF=".so"
1195 SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
1196 SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
1197 SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
1198 LIB_INSTALL_EXTRA_CMD='$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
1200 host_cflags='-O3 -g -Wall'
1201 host_libs='-lm'
1203 target_path='.'
1205 # gcc stupidly only outputs the basename of targets with -MM, but we need the
1206 # full relative path for objects in subdirectories for non-recursive Make.
1207 DEPEND_CMD='$(CC) $(CFLAGS) -MM $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o,"'
1209 # find source path
1210 source_path="$(dirname "$0")"
1211 enable source_path_used
1212 if test -z "$source_path" -o "$source_path" = "." ; then
1213 source_path="$(pwd)"
1214 disable source_path_used
1215 else
1216 source_path="$(cd "$source_path"; pwd)"
1217 echo "$source_path" | grep -q '[[:blank:]]' &&
1218 die "Out of tree builds are impossible with whitespace in source path."
1219 test -e "$source_path/config.h" &&
1220 die "Out of tree builds are impossible with config.h in source dir."
1223 FFMPEG_CONFIGURATION="$@"
1225 find_things(){
1226 thing=$1
1227 pattern=$2
1228 file=$source_path/$3
1229 sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
1232 ENCODER_LIST=$(find_things encoder ENC libavcodec/allcodecs.c)
1233 DECODER_LIST=$(find_things decoder DEC libavcodec/allcodecs.c)
1234 PARSER_LIST=$(find_things parser PARSER libavcodec/allcodecs.c)
1235 BSF_LIST=$(find_things bsf BSF libavcodec/allcodecs.c)
1236 MUXER_LIST=$(find_things muxer _MUX libavformat/allformats.c)
1237 DEMUXER_LIST=$(find_things demuxer DEMUX libavformat/allformats.c)
1238 OUTDEV_LIST=$(find_things muxer _MUX libavdevice/alldevices.c)
1239 INDEV_LIST=$(find_things demuxer DEMUX libavdevice/alldevices.c)
1240 PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
1241 FILTER_LIST=$(find_things filter FILTER libavfilter/allfilters.c)
1243 enable $ARCH_EXT_LIST \
1244 $DECODER_LIST \
1245 $ENCODER_LIST \
1246 $PARSER_LIST \
1247 $BSF_LIST \
1248 $DEMUXER_LIST \
1249 $MUXER_LIST \
1250 $FILTER_LIST \
1251 $PROTOCOL_LIST \
1252 $INDEV_LIST \
1253 $OUTDEV_LIST \
1255 die_unknown(){
1256 echo "Unknown option \"$1\"."
1257 echo "See $0 --help for available options."
1258 exit 1
1261 show_list() {
1262 suffix=_$1
1263 shift
1264 echo $* | sed s/$suffix//g | tr ' ' '\n' | sort
1265 exit 0
1268 for opt do
1269 optval="${opt#*=}"
1270 case "$opt" in
1271 --extra-cflags=*) add_cflags $optval
1273 --extra-ldflags=*) add_ldflags $optval
1275 --extra-libs=*) add_extralibs $optval
1277 --disable-devices) disable $INDEV_LIST $OUTDEV_LIST
1279 --enable-debug=*) debuglevel="$optval"
1281 --enable-*=*|--disable-*=*)
1282 eval $(echo "$opt" | sed 's/=/-/;s/--/action=/;s/-/ thing=/;s/-/ name=/')
1283 case "$thing" in
1284 encoder|decoder|muxer|demuxer|parser|bsf|protocol|filter) $action ${optval}_${thing} ;;
1285 *) die_unknown "$opt" ;;
1286 esac
1288 --enable-?*|--disable-?*)
1289 eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
1290 if is_in $option $COMPONENT_LIST; then
1291 eval $action \$$(toupper ${option%s})_LIST
1292 elif is_in $option $CMDLINE_SELECT; then
1293 $action $option
1294 else
1295 die_unknown $opt
1298 --list-*)
1299 NAME="${opt#--list-}"
1300 is_in $NAME $COMPONENT_LIST || die_unknown $opt
1301 NAME=${NAME%s}
1302 eval show_list $NAME \$$(toupper $NAME)_LIST
1304 --help|-h) show_help
1307 optname="${opt%%=*}"
1308 optname="${optname#--}"
1309 optname=$(echo "$optname" | sed 's/-/_/g')
1310 is_in $optname $CMDLINE_SET || die_unknown $opt
1311 eval $optname='$optval'
1313 esac
1314 done
1316 disabled logging && logfile=/dev/null
1318 echo "# $0 $@" > $logfile
1319 set >> $logfile
1321 test -n "$cross_prefix" && enable cross_compile
1323 ar="${cross_prefix}${ar}"
1324 cc_default="${cross_prefix}${cc_default}"
1325 nm_default="${cross_prefix}${nm_default}"
1326 ranlib="${cross_prefix}${ranlib}"
1327 strip="${cross_prefix}${strip}"
1329 sysinclude_default="${sysroot}/usr/include"
1331 set_default cc nm sysinclude
1332 as_default=$cc
1333 enabled cross_compile || host_cc_default=$cc
1334 set_default host_cc
1336 exesuf() {
1337 case $1 in
1338 mingw32*|cygwin*|*-dos|freedos|opendos|os/2*) echo .exe ;;
1339 esac
1342 EXESUF=$(exesuf $target_os)
1343 HOSTEXESUF=$(exesuf $host_os)
1345 # set temporary file name
1346 : ${TMPDIR:=$TEMPDIR}
1347 : ${TMPDIR:=$TMP}
1348 : ${TMPDIR:=/tmp}
1350 if ! check_cmd type mktemp; then
1351 # simple replacement for missing mktemp
1352 # NOT SAFE FOR GENERAL USE
1353 mktemp(){
1354 echo "${2%XXX*}.${HOSTNAME}.${UID}.$$"
1358 tmpfile(){
1359 tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
1360 (set -C; exec > $tmp) 2>/dev/null ||
1361 die "Unable to create temoporary file in $TMPDIR."
1362 append TMPFILES $tmp
1363 eval $1=$tmp
1366 trap 'rm -f -- $TMPFILES' EXIT
1367 trap exit HUP INT TERM
1369 tmpfile TMPC .c
1370 tmpfile TMPE $EXESUF
1371 tmpfile TMPH .h
1372 tmpfile TMPO .o
1373 tmpfile TMPS .S
1374 tmpfile TMPSH .sh
1376 unset -f mktemp
1378 # make sure we can execute files in $TMPDIR
1379 cat > $TMPSH 2>> $logfile <<EOF
1380 #! /bin/sh
1382 chmod +x $TMPSH >> $logfile 2>&1
1383 if ! $TMPSH >> $logfile 2>&1; then
1384 cat <<EOF
1385 Unable to create and execute files in $TMPDIR. Set the TMPDIR environment
1386 variable to another directory and make sure that it is not mounted noexec.
1388 die "Sanity test failed."
1391 if $cc --version 2>/dev/null | grep -qi gcc; then
1392 cc_type=gcc
1393 elif $cc --version 2>/dev/null | grep -q Intel; then
1394 cc_type=icc
1395 elif $cc -v 2>&1 | grep -q xlc; then
1396 cc_type=xlc
1397 elif $cc -V 2>/dev/null | grep -q Compaq; then
1398 cc_type=ccc
1399 DEPEND_CMD='$(CC) $(CFLAGS) -M $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o,"'
1400 debuglevel=3
1401 add_ldflags -Wl,-z,now # calls to libots crash without this
1402 elif $cc --vsn 2>/dev/null | grep -q RVCT; then
1403 test -d "$sysroot" || die "No valid sysroot specified."
1404 cc_type=armcc
1405 armcc_conf="$PWD/armcc.conf"
1406 $cc --arm_linux_configure \
1407 --arm_linux_config_file="$armcc_conf" \
1408 --configure_sysroot="$sysroot" \
1409 --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
1410 die "Error creating armcc configuration file."
1411 cc="$cc --arm_linux_config_file=$armcc_conf --translate_gcc"
1412 as_default="${cross_prefix}gcc"
1415 test -n "$cc_type" && enable $cc_type || echolog "Unknown C compiler $cc"
1417 set_default as
1419 if test -n "$sysroot"; then
1420 case "$cc_type" in
1421 gcc)
1422 add_cflags --sysroot="$sysroot"
1423 add_ldflags --sysroot="$sysroot"
1425 esac
1428 # compiler sanity check
1429 check_exec <<EOF
1430 int main(void){ return 0; }
1432 if test "$?" != 0; then
1433 echo "$cc is unable to create an executable file."
1434 if test -z "$cross_prefix" && ! enabled cross_compile ; then
1435 echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
1436 echo "Only do this if you know what cross compiling means."
1438 die "C compiler test failed."
1441 check_cflags -std=c99
1442 check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cflags -D_FILE_OFFSET_BITS=64
1443 #include <stdlib.h>
1445 check_cc -D_LARGEFILE_SOURCE <<EOF && add_cflags -D_LARGEFILE_SOURCE
1446 #include <stdlib.h>
1449 case "$arch" in
1450 alpha)
1451 arch="alpha"
1452 enable fast_64bit
1453 check_cflags -mieee
1455 arm|armv[4567]*l)
1456 arch="arm"
1458 avr32)
1460 bfin)
1461 arch="bfin"
1463 ia64)
1464 arch="ia64"
1465 enable fast_64bit
1467 m68k)
1468 arch="m68k"
1470 mips|mipsel|IP*)
1471 arch="mips"
1473 mips64)
1474 arch="mips"
1475 enable fast_64bit
1477 parisc|hppa)
1478 arch="parisc"
1480 parisc64|hppa64)
1481 arch="parisc"
1482 enable fast_64bit
1484 "Power Macintosh"|ppc|powerpc)
1485 arch="ppc"
1486 enable fast_unaligned
1488 ppc64)
1489 arch="ppc"
1490 enable fast_64bit
1491 enable fast_unaligned
1493 s390|s390x)
1494 arch="s390"
1496 sh4|sh)
1497 arch="sh4"
1499 sparc)
1500 arch="sparc"
1502 sun4u|sparc64)
1503 arch="sparc"
1504 subarch="sparc64"
1505 enable fast_64bit
1507 i386|i486|i586|i686|i86pc|BePC)
1508 arch="x86"
1509 subarch="x86_32"
1510 enable fast_unaligned
1512 x86_64|amd64)
1513 arch="x86"
1514 subarch="x86_32"
1515 enable cmov
1516 enable fast_cmov
1517 enable fast_unaligned
1518 check_cc <<EOF && enable fast_64bit && subarch="x86_64"
1519 int test[sizeof(char*) - 7];
1523 arch="unknown"
1525 esac
1527 enable $arch $subarch
1529 # OS specific
1530 case $target_os in
1531 beos|haiku|zeta)
1532 prefix_default="$HOME/config"
1533 # helps building libavcodec
1534 add_cflags -DPIC -fomit-frame-pointer
1535 # 3 gcc releases known for BeOS, each with ugly bugs
1536 gcc_version="$($cc -v 2>&1 | grep version | cut -d ' ' -f3-)"
1537 case "$gcc_version" in
1538 2.9-beos-991026*|2.9-beos-000224*) echo "R5/GG gcc"
1539 disable mmx
1541 *20010315*) echo "BeBits gcc"
1542 add_cflags -fno-expensive-optimizations
1544 esac
1545 SHFLAGS=-nostart
1546 # enable BeOS things
1547 enable audio_beos
1548 # no need for libm, but the inet stuff
1549 # Check for BONE
1550 # XXX: actually should check for NOT net_server
1551 if echo $BEINCLUDES | grep -q 'headers/be/bone'; then
1552 network_extralibs="-lbind -lsocket"
1553 else
1554 enable beos_netserver
1555 network_extralibs="-lnet"
1556 fi ;;
1557 sunos)
1558 FFSERVERLDFLAGS=""
1559 SHFLAGS='-shared -Wl,-h,$$(@F)'
1560 network_extralibs="-lsocket -lnsl"
1561 add_cflags -D__EXTENSIONS__
1563 netbsd)
1564 oss_demuxer_extralibs="-lossaudio"
1565 oss_muxer_extralibs="-lossaudio"
1567 openbsd)
1568 disable need_memalign
1569 LIBOBJFLAGS='$(PIC)'
1570 SHFLAGS='-shared'
1571 oss_demuxer_extralibs="-lossaudio"
1572 oss_muxer_extralibs="-lossaudio"
1574 freebsd)
1575 disable need_memalign
1577 bsd/os)
1578 osextralibs="-lpoll -lgnugetopt"
1579 strip="strip -d"
1581 darwin)
1582 disable need_memalign
1583 SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR) -Wl,-read_only_relocs,suppress'
1584 strip="strip -x"
1585 FFLDFLAGS="-Wl,-dynamic,-search_paths_first"
1586 SLIBSUF=".dylib"
1587 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
1588 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
1589 FFSERVERLDFLAGS=-Wl,-bind_at_load
1590 objformat="macho"
1591 enabled x86_64 && objformat="macho64"
1593 mingw32*)
1594 target_os=mingw32
1595 LIBTARGET=i386
1596 if enabled x86_64; then
1597 disable need_memalign
1598 LIBTARGET=x64
1600 shlibdir_default="$bindir_default"
1601 disable ffserver
1602 SLIBPREF=""
1603 SLIBSUF=".dll"
1604 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1605 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1606 SLIB_EXTRA_CMD='-lib.exe /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)'
1607 SLIB_INSTALL_EXTRA_CMD='-install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"; \
1608 install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)"'
1609 SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"'
1610 SHFLAGS='-shared -Wl,--output-def,$$(@:$(SLIBSUF)=.def) -Wl,--enable-runtime-pseudo-reloc -Wl,--enable-auto-image-base'
1611 objformat="win32"
1612 enable dos_paths
1613 if ! enabled x86_64; then
1614 check_cpp_condition _mingw.h "(__MINGW32_MAJOR_VERSION > 3) || (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
1615 die "ERROR: MinGW runtime version must be >= 3.15."
1616 enabled_any avisynth vfwcap_demuxer &&
1617 { check_cpp_condition w32api.h "(__W32API_MAJOR_VERSION > 3) || (__W32API_MAJOR_VERSION == 3 && __W32API_MINOR_VERSION >= 13)" ||
1618 die "ERROR: avisynth and vfwcap_demuxer require w32api version 3.13 or later."; }
1621 cygwin*)
1622 target_os=cygwin
1623 shlibdir_default="$bindir_default"
1624 SLIBPREF="cyg"
1625 SLIBSUF=".dll"
1626 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1627 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1628 SHFLAGS='-shared -Wl,--enable-auto-image-base'
1629 objformat="win32"
1630 enable dos_paths
1632 *-dos|freedos|opendos)
1633 disable ffplay ffserver
1634 disable $INDEV_LIST $OUTDEV_LIST
1635 network_extralibs="-lsocket"
1636 objformat="coff"
1637 enable dos_paths
1639 linux)
1640 enable dv1394
1642 irix*)
1643 target_os=irix
1644 ranlib="echo ignoring ranlib"
1646 os/2*)
1647 strip="lxlite"
1648 ln_s="cp -f"
1649 FFLDFLAGS="-Zomf -Zbin-files -Zargs-wild -Zmap"
1650 SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
1651 FFSERVERLDFLAGS=""
1652 LIBSUF="_s.a"
1653 SLIBPREF=""
1654 SLIBSUF=".dll"
1655 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
1656 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
1657 SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
1658 echo PROTMODE >> $(SUBDIR)$(NAME).def; \
1659 echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
1660 echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
1661 echo EXPORTS >> $(SUBDIR)$(NAME).def; \
1662 emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
1663 SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
1664 emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
1665 SLIB_INSTALL_EXTRA_CMD='install -m 644 $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib "$(LIBDIR)"'
1666 SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.a "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.lib'
1667 enable dos_paths
1671 die "Unknown OS '$target_os'."
1673 esac
1675 set_default $PATHS_LIST
1677 add_extralibs $osextralibs
1679 # Combine FFLDFLAGS and the LDFLAGS environment variable.
1680 LDFLAGS="$FFLDFLAGS $LDFLAGS"
1682 # we need to build at least one lib type
1683 if ! enabled_any static shared; then
1684 cat <<EOF
1685 At least one library type must be built.
1686 Specify --enable-static to build the static libraries or --enable-shared to
1687 build the shared libraries as well. To only build the shared libraries specify
1688 --disable-static in addition to --enable-shared.
1690 exit 1;
1693 disabled static && LIBNAME=""
1695 if enabled_any libfaad libfaadbin ; then
1696 if check_header faad.h; then
1697 check_cc <<EOF
1698 #include <faad.h>
1699 #ifndef FAAD2_VERSION
1700 ok faad1
1701 #endif
1702 int main(void) { return 0; }
1704 test $? = 0 && enable libfaad2
1705 else
1706 die "FAAD test failed."
1711 if ! enabled gpl; then
1712 die_gpl_disabled(){
1713 name=$1
1714 shift
1715 enabled_any $@ && die "$name is under GPL and --enable-gpl is not specified."
1717 die_gpl_disabled "The Postprocessing code" postproc
1718 die_gpl_disabled "libx264" libx264
1719 die_gpl_disabled "libxvidcore" libxvid
1720 die_gpl_disabled "FAAD2" libfaad2
1721 die_gpl_disabled "The X11 grabber" x11grab
1724 if ! enabled nonfree && enabled_any libamr_nb libamr_wb; then
1725 die "libamr is nonfree and --enable-nonfree is not specified."
1728 check_deps $ARCH_EXT_LIST
1730 test -z "$need_memalign" && need_memalign="$mmx"
1732 #Darwin CC versions
1733 if test $target_os = darwin; then
1734 if enabled xlc; then
1735 add_cflags -qpdf2 -qlanglvl=extc99 -qmaxmem=-1 -qarch=auto -qtune=auto
1736 else
1737 add_cflags -pipe
1738 check_cflags -force_cpusubtype_ALL
1739 check_cflags -Wno-sign-compare
1740 enabled shared || check_cflags -mdynamic-no-pic
1744 disabled optimizations || check_cflags -fomit-frame-pointer
1746 # Add processor-specific flags
1747 if test $cpu != "generic"; then
1748 warn_altivec(){
1749 $1 altivec && echo "WARNING: Tuning for $2 but AltiVec $1.";
1751 case $cpu in
1752 601|ppc601|PowerPC601)
1753 add_cflags -mcpu=601
1754 warn_altivec enabled PPC601
1756 603*|ppc603*|PowerPC603*)
1757 add_cflags -mcpu=603
1758 warn_altivec enabled PPC603
1760 604*|ppc604*|PowerPC604*)
1761 add_cflags -mcpu=604
1762 warn_altivec enabled PPC604
1764 G3|g3|75*|ppc75*|PowerPC75*)
1765 add_cflags -mcpu=750 -mpowerpc-gfxopt
1766 warn_altivec enabled PPC75x
1768 G4|g4|745*|ppc745*|PowerPC745*)
1769 add_cflags -mcpu=7450 -mpowerpc-gfxopt
1770 warn_altivec disabled PPC745x
1772 74*|ppc74*|PowerPC74*)
1773 add_cflags -mcpu=7400 -mpowerpc-gfxopt
1774 warn_altivec disabled PPC74xx
1776 G5|g5|970|ppc970|PowerPC970|power4*|Power4*)
1777 add_cflags -mcpu=970 -mpowerpc-gfxopt -mpowerpc64
1778 warn_altivec disabled PPC970
1779 enable ppc64
1781 Cell|CELL|cell)
1782 add_cflags -mcpu=cell
1783 warn_altivec disabled Cell
1784 enable ppc64
1786 # targets that do NOT support conditional mov (cmov)
1787 i[345]86|pentium|pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
1788 add_cflags -march=$cpu
1789 disable cmov
1791 # targets that do support conditional mov (cmov)
1792 i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2)
1793 add_cflags -march=$cpu
1794 enable cmov
1795 enable fast_cmov
1797 # targets that do support conditional mov but on which it's slow
1798 pentium4|pentium4m|prescott|nocona)
1799 add_cflags -march=$cpu
1800 enable cmov
1801 disable fast_cmov
1803 sparc64)
1804 add_cflags -mcpu=v9
1806 arm11*|cortex*)
1807 add_cflags -mcpu=$cpu
1808 enable fast_unaligned
1810 armv*)
1811 add_cflags -march=$cpu
1813 arm*)
1814 add_cflags -mcpu=$cpu
1816 ev4|ev45|ev5|ev56|pca56|ev6|ev67)
1817 enabled ccc && add_cflags -arch $cpu || add_cflags -mcpu=$cpu
1820 echo "WARNING: Unknown CPU \"$cpu\", ignored."
1822 esac
1825 check_cc <<EOF || die "Symbol mangling check failed."
1826 int ff_extern;
1828 sym=$($nm -P -g $TMPO | grep ff_extern)
1829 extern_prefix=${sym%%ff_extern*}
1831 check_cc <<EOF && enable inline_asm
1832 void foo(void) { __asm__ volatile ("" ::); }
1835 if enabled x86; then
1836 # check whether EBP is available on x86
1837 # As 'i' is stored on the stack, this program will crash
1838 # if the base pointer is used to access it because the
1839 # base pointer is cleared in the inline assembly code.
1840 check_exec_crash <<EOF && enable ebp_available
1841 volatile int i=0;
1842 __asm__ volatile (
1843 "xorl %%ebp, %%ebp"
1844 ::: "%ebp");
1845 return i;
1848 # check wether EBX is available on x86
1849 check_asm ebx_available '"":::"%ebx"'
1851 # check whether more than 10 operands are supported
1852 check_cc <<EOF && enable ten_operands
1853 int main(void) {
1854 int x=0;
1855 __asm__ volatile(
1857 :"+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x)
1859 return 0;
1863 # check whether binutils is new enough to compile SSSE3/MMX2
1864 enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
1865 enabled mmx2 && check_asm mmx2 '"pmaxub %mm0, %mm1"'
1867 check_asm bswap '"bswap %%eax" ::: "%eax"'
1869 YASMFLAGS="-f $objformat -DARCH_$(toupper $subarch)"
1870 enabled x86_64 && append YASMFLAGS "-m amd64"
1871 enabled_all x86_64 shared && append YASMFLAGS "-DPIC"
1872 case "$objformat" in
1873 elf) enabled debug && append YASMFLAGS "-g dwarf2" ;;
1874 macho64) append YASMFLAGS "-DPIC -DPREFIX" ;;
1875 *) append YASMFLAGS "-DPREFIX" ;;
1876 esac
1877 disabled yasm || { check_yasm "pabsw xmm0, xmm0" && enable yasm; }
1880 # check for assembler specific support
1882 enabled ppc && check_asm dcbzl '"dcbzl 0, 1"'
1883 enabled ppc && check_asm ppc4xx '"maclhw r10, r11, r12"'
1885 # check for SIMD availability
1887 # AltiVec flags: The FSF version of GCC differs from the Apple version
1888 if enabled altivec; then
1889 check_cflags -maltivec -mabi=altivec &&
1890 { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
1891 check_cflags -faltivec
1893 # check if our compiler supports Motorola AltiVec C API
1894 check_cc <<EOF || disable altivec
1895 $inc_altivec_h
1896 int main(void) {
1897 vector signed int v1, v2, v3;
1898 v1 = vec_add(v2,v3);
1899 return 0;
1903 # check if our compiler supports braces for vector declarations
1904 check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
1905 $inc_altivec_h
1906 int main (void) { (vector int) {1}; return 0; }
1910 # We have to check if pld is a nop and disable it.
1911 enabled arm && check_asm pld '"pld [r0]"'
1912 enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
1913 enabled armv6 && check_asm armv6 '"sadd16 r0, r0, r0"'
1914 enabled armv6t2 && check_asm armv6t2 '"movt r0, #0"'
1915 enabled armvfp && check_asm armvfp '"fadds s0, s0, s0"'
1916 enabled iwmmxt && check_asm iwmmxt '"wunpckelub wr6, wr4"'
1917 enabled mmi && check_asm mmi '"lq $2, 0($2)"'
1918 enabled neon && check_asm neon '"vadd.i16 q0, q0, q0"'
1919 enabled vis && check_asm vis '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc
1921 enabled vis && add_cflags -mcpu=ultrasparc -mtune=ultrasparc
1923 # ---
1924 # big/little-endian test
1925 check_cc <<EOF || die "endian test failed"
1926 unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
1928 od -A n -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
1930 # ---
1931 # check availability of some header files
1933 if check_func dlopen; then
1934 ldl=
1935 elif check_func dlopen -ldl; then
1936 ldl=-ldl
1939 # Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
1940 check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
1942 check_func fork
1943 check_func gethrtime
1944 check_func getrusage
1945 check_func inet_aton $network_extralibs
1946 check_func memalign
1947 check_func mkstemp
1948 check_func posix_memalign
1949 check_func_headers io.h setmode
1950 check_func_headers windows.h GetProcessTimes
1951 check_func_headers windows.h VirtualAlloc
1953 check_header conio.h
1954 check_header dlfcn.h
1955 check_header malloc.h
1956 check_header poll.h
1957 check_header sys/mman.h
1958 check_header sys/resource.h
1959 check_header sys/select.h
1960 check_header termios.h
1961 check_header vdpau/vdpau.h
1962 check_header vdpau/vdpau_x11.h
1963 check_header X11/extensions/XvMClib.h
1965 if ! enabled_any memalign memalign_hack posix_memalign && enabled need_memalign ; then
1966 die "Error, no aligned memory allocator but SSE enabled, disable it or use --enable-memalign-hack."
1969 disabled zlib || check_lib zlib.h zlibVersion -lz || disable zlib
1970 disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
1972 # check for some common methods of building with pthread support
1973 # do this before the optional library checks as some of them require pthreads
1974 if enabled pthreads; then
1975 if check_func pthread_create; then
1977 elif check_func pthread_create -pthread; then
1978 add_cflags -pthread
1979 add_extralibs -pthread
1980 elif check_func pthread_create -pthreads; then
1981 add_cflags -pthreads
1982 add_extralibs -pthreads
1983 elif check_func pthread_create -lpthreadGC2; then
1984 add_extralibs -lpthreadGC2
1985 elif ! check_lib pthread.h pthread_create -lpthread; then
1986 die "ERROR: can't find pthreads library"
1990 for thread in $THREADS_LIST; do
1991 if enabled $thread; then
1992 test -n "$thread_type" &&
1993 die "ERROR: Only one thread type must be selected." ||
1994 thread_type="$thread"
1996 done
1998 check_lib math.h sin -lm
2000 # test for C99 functions in math.h
2001 for func in llrint lrint lrintf round roundf truncf; do
2002 check_exec <<EOF && enable $func || disable $func
2003 #include <math.h>
2004 int main(void) { return ($func(3.999f) > 0)?0:1; }
2006 done
2008 # these are off by default, so fail if requested and not available
2009 enabled avisynth && require2 vfw32 "windows.h vfw.h" AVIFileInit -lvfw32
2010 enabled libamr_nb && require libamrnb amrnb/interf_dec.h Speech_Decode_Frame_init -lamrnb -lm
2011 enabled libamr_wb && require libamrwb amrwb/dec_if.h D_IF_init -lamrwb -lm
2012 enabled libdirac && add_cflags $(pkg-config --cflags dirac) &&
2013 require libdirac libdirac_decoder/dirac_parser.h dirac_decoder_init -ldirac_decoder &&
2014 require libdirac libdirac_encoder/dirac_encoder.h dirac_encoder_init -ldirac_encoder
2015 enabled libfaac && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
2016 enabled libfaad && require2 libfaad faad.h faacDecOpen -lfaad
2017 enabled libgsm && require libgsm gsm.h gsm_create -lgsm
2018 enabled libmp3lame && require libmp3lame lame/lame.h lame_init -lmp3lame -lm
2019 enabled libnut && require libnut libnut.h nut_demuxer_init -lnut
2020 enabled libopenjpeg && require libopenjpeg openjpeg.h opj_version -lopenjpeg
2021 enabled libschroedinger && add_cflags $(pkg-config --cflags schroedinger-1.0) &&
2022 require libschroedinger schroedinger/schro.h schro_init $(pkg-config --libs schroedinger-1.0)
2023 enabled libspeex && require libspeex speex/speex.h speex_decoder_init -lspeex
2024 enabled libtheora && require libtheora theora/theora.h theora_info_init -ltheora -logg
2025 enabled libvorbis && require libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
2026 enabled libx264 && require libx264 x264.h x264_encoder_open -lx264 -lm &&
2027 { check_cpp_condition x264.h "X264_BUILD >= 65" ||
2028 die "ERROR: libx264 version must be >= 0.65."; }
2029 enabled libxvid && require libxvid xvid.h xvid_global -lxvidcore
2030 enabled mlib && require mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
2032 # libdc1394 check
2033 if enabled libdc1394; then
2034 { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
2035 enable libdc1394_2; } ||
2036 { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
2037 enable libdc1394_1; } ||
2038 die "ERROR: No version of libdc1394 found "
2042 _restrict=
2043 for restrict_keyword in restrict __restrict__ __restrict; do
2044 check_cc <<EOF && _restrict=$restrict_keyword && break
2045 void foo(char * $restrict_keyword p);
2047 done
2049 ##########################################
2050 # SDL check
2052 disable sdl_too_old
2053 disable sdl
2054 SDL_CONFIG="${cross_prefix}sdl-config"
2055 if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
2056 sdl_cflags=$("${SDL_CONFIG}" --cflags)
2057 temp_cflags $sdl_cflags
2058 temp_extralibs $("${SDL_CONFIG}" --libs)
2059 if check_lib2 SDL.h SDL_Init; then
2060 _sdlversion=$("${SDL_CONFIG}" --version | sed 's/[^0-9]//g')
2061 if test "$_sdlversion" -lt 121 ; then
2062 enable sdl_too_old
2063 else
2064 enable sdl
2065 check_cc $sdl_cflags <<EOF && enable sdl_video_size
2066 #include <SDL.h>
2067 int main(int argc, char **argv){
2068 const SDL_VideoInfo *vi = SDL_GetVideoInfo();
2069 int w = vi->current_w;
2070 return 0;
2075 restore_flags
2078 texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
2080 ##########################################
2081 # Network check
2083 if enabled network; then
2084 check_type "sys/types.h sys/socket.h" socklen_t
2085 # Prefer arpa/inet.h over winsock2
2086 if check_header arpa/inet.h ; then
2087 check_func closesocket
2088 elif check_header winsock2.h ; then
2089 network_extralibs="-lws2_32"
2090 check_type ws2tcpip.h socklen_t
2091 check_func_headers winsock2.h closesocket
2095 ##########################################
2096 # IPv6 check
2098 enabled network && enabled ipv6 && check_ld <<EOF && enable ipv6 || disable ipv6
2099 #include <sys/types.h>
2100 #include <sys/socket.h>
2101 #include <netinet/in.h>
2102 #include <netdb.h>
2103 int main(void) {
2104 struct sockaddr_storage saddr;
2105 struct ipv6_mreq mreq6;
2106 getaddrinfo(0,0,0,0);
2107 getnameinfo(0,0,0,0,0,0,0);
2108 IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
2112 check_header linux/videodev.h
2113 check_header linux/videodev2.h
2114 check_header sys/videoio.h
2116 check_func_headers "windows.h vfw.h" capCreateCaptureWindow -lvfw32
2118 # check for ioctl_meteor.h, ioctl_bt848.h and alternatives
2119 { check_header dev/bktr/ioctl_meteor.h &&
2120 check_header dev/bktr/ioctl_bt848.h; } ||
2121 { check_header machine/ioctl_meteor.h &&
2122 check_header machine/ioctl_bt848.h; } ||
2123 { check_header dev/video/meteor/ioctl_meteor.h &&
2124 check_header dev/video/bktr/ioctl_bt848.h; } ||
2125 check_header dev/ic/bt8xx.h
2127 check_header sys/soundcard.h
2128 check_header soundcard.h
2130 check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
2132 # deal with the X11 frame grabber
2133 enabled x11grab &&
2134 check_header X11/Xlib.h &&
2135 check_header X11/extensions/XShm.h &&
2136 check_func XOpenDisplay -lX11 &&
2137 check_func XShmCreateImage -lX11 -lXext
2139 enabled debug && add_cflags -g"$debuglevel"
2141 # add some useful compiler flags if supported
2142 check_cflags -Wdeclaration-after-statement
2143 check_cflags -Wall
2144 check_cflags -Wno-switch
2145 check_cflags -Wdisabled-optimization
2146 check_cflags -Wpointer-arith
2147 check_cflags -Wredundant-decls
2148 check_cflags -Wno-pointer-sign
2149 check_cflags -Wcast-qual
2150 check_cflags -Wwrite-strings
2151 check_cflags -Wtype-limits
2152 check_cflags -Wundef
2153 enabled extra_warnings && check_cflags -Winline
2155 # add some linker flags
2156 check_ldflags -Wl,--warn-common
2157 check_ldflags -Wl,--as-needed
2158 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'
2159 check_ldflags -Wl,-Bsymbolic
2161 if enabled small; then
2162 check_cflags -Os # not all compilers support -Os
2163 optimizations="small"
2164 elif enabled optimizations; then
2165 if enabled xlc; then
2166 add_cflags -O5
2167 add_ldflags -O5
2168 elif enabled ccc; then
2169 add_cflags -fast
2170 else
2171 add_cflags -O3
2174 check_cflags -fno-math-errno
2175 check_cflags -fno-signed-zeros
2177 # add some flags for Intel C Compiler
2178 if enabled icc; then
2179 # Just warnings, no remarks
2180 check_cflags -w1
2181 # -wd: Disable following warnings
2182 # 144, 167, 556: -Wno-pointer-sign
2183 # 10006: ignoring unknown option -fno-signed-zeros
2184 # 10156: ignoring option '-W'; no argument required
2185 check_cflags -wd144,167,556,10006,10156
2186 # 11030: Warning unknown option --as-needed
2187 # 10156: ignoring option '-export'; no argument required
2188 check_ldflags -wd10156,11030
2189 # Allow to compile with optimizations
2190 check_ldflags -march=$cpu
2191 # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
2192 enable ebp_available
2193 elif enabled ccc; then
2194 # disable some annoying warnings
2195 add_cflags -msg_disable cvtu32to64
2196 add_cflags -msg_disable embedcomment
2197 add_cflags -msg_disable needconstext
2198 add_cflags -msg_disable nomainieee
2199 add_cflags -msg_disable ptrmismatch1
2200 add_cflags -msg_disable unreachcode
2203 # PIC flags for shared library objects where they are needed
2204 if enabled shared; then
2205 # LIBOBJFLAGS may have already been set in the OS configuration
2206 if test -z "$LIBOBJFLAGS" ; then
2207 case "${subarch-$arch}" in
2208 x86_64|ia64|alpha|sparc*|power*|parisc*|mips*) LIBOBJFLAGS='$(PIC)' ;;
2209 esac
2213 if enabled gprof; then
2214 add_cflags -p
2215 add_ldflags -p
2218 # Find out if the .align argument is a power of two or not.
2219 check_asm asmalign_pot '".align 3"'
2221 enabled_any $DECODER_LIST && enable decoders
2222 enabled_any $ENCODER_LIST && enable encoders
2223 enabled_any $BSF_LIST && enable bsfs
2224 enabled_any $DEMUXER_LIST && enable demuxers
2225 enabled_any $MUXER_LIST && enable muxers
2226 enabled_any $FILTER_LIST && enable filters
2227 enabled_any $INDEV_LIST && enable demuxers
2228 enabled_any $OUTDEV_LIST && enable muxers
2229 enabled_any $PROTOCOL_LIST && enable protocols
2231 enabled_any $THREADS_LIST && enable threads
2233 check_deps $CONFIG_LIST \
2234 $CONFIG_EXTRA \
2235 $HAVE_LIST \
2236 $DECODER_LIST \
2237 $ENCODER_LIST \
2238 $PARSER_LIST \
2239 $BSF_LIST \
2240 $DEMUXER_LIST \
2241 $MUXER_LIST \
2242 $FILTER_LIST \
2243 $INDEV_LIST \
2244 $OUTDEV_LIST \
2245 $PROTOCOL_LIST \
2247 echo "install prefix $prefix"
2248 echo "source path $source_path"
2249 echo "C compiler $cc"
2250 echo ".align is power-of-two $asmalign_pot"
2251 echo "ARCH $arch ($cpu)"
2252 if test "$build_suffix" != ""; then
2253 echo "build suffix $build_suffix"
2255 if test "$extra_version" != ""; then
2256 echo "version string suffix $extra_version"
2258 echo "big-endian ${bigendian-no}"
2259 if enabled x86; then
2260 echo "yasm ${yasm-no}"
2261 echo "MMX enabled ${mmx-no}"
2262 echo "MMX2 enabled ${mmx2-no}"
2263 echo "3DNow! enabled ${amd3dnow-no}"
2264 echo "3DNow! extended enabled ${amd3dnowext-no}"
2265 echo "SSE enabled ${sse-no}"
2266 echo "SSSE3 enabled ${ssse3-no}"
2267 echo "CMOV enabled ${cmov-no}"
2268 echo "CMOV is fast ${fast_cmov-no}"
2269 echo "EBX available ${ebx_available-no}"
2270 echo "EBP available ${ebp_available-no}"
2271 echo "10 operands supported ${ten_operands-no}"
2273 if enabled arm; then
2274 echo "ARMv5TE enabled ${armv5te-no}"
2275 echo "ARMv6 enabled ${armv6-no}"
2276 echo "ARMv6T2 enabled ${armv6t2-no}"
2277 echo "ARM VFP enabled ${armvfp-no}"
2278 echo "IWMMXT enabled ${iwmmxt-no}"
2279 echo "NEON enabled ${neon-no}"
2281 if enabled mips; then
2282 echo "MMI enabled ${mmi-no}"
2284 if enabled ppc; then
2285 echo "AltiVec enabled ${altivec-no}"
2286 echo "PPC 4xx optimizations ${ppc4xx-no}"
2287 echo "dcbzl available ${dcbzl-no}"
2288 echo "performance report ${powerpc_perf-no}"
2290 if enabled sparc; then
2291 echo "VIS enabled ${vis-no}"
2293 echo "gprof enabled ${gprof-no}"
2294 echo "debug symbols ${debug-no}"
2295 echo "strip symbols ${stripping-no}"
2296 echo "optimizations ${optimizations-no}"
2297 echo "static ${static-no}"
2298 echo "shared ${shared-no}"
2299 echo "postprocessing support ${postproc-no}"
2300 echo "new filter support ${avfilter-no}"
2301 echo "filters using lavformat ${avfilter_lavf-no}"
2302 echo "network support ${network-no}"
2303 if enabled network; then
2304 echo "IPv6 support ${ipv6-no}"
2306 echo "threading support ${thread_type-no}"
2307 echo "SDL support ${sdl-no}"
2308 if enabled sdl_too_old; then
2309 echo "-> Your SDL version is too old - please upgrade to have FFplay/SDL support."
2311 echo "Sun medialib support ${mlib-no}"
2312 echo "AVISynth enabled ${avisynth-no}"
2313 echo "libamr-nb support ${libamr_nb-no}"
2314 echo "libamr-wb support ${libamr_wb-no}"
2315 echo "libdc1394 support ${libdc1394-no}"
2316 echo "libdirac enabled ${libdirac-no}"
2317 echo "libfaac enabled ${libfaac-no}"
2318 echo "libfaad enabled ${libfaad-no}"
2319 echo "libfaad dlopened ${libfaadbin-no}"
2320 echo "libgsm enabled ${libgsm-no}"
2321 echo "libmp3lame enabled ${libmp3lame-no}"
2322 echo "libnut enabled ${libnut-no}"
2323 echo "libopenjpeg enabled ${libopenjpeg-no}"
2324 echo "libschroedinger enabled ${libschroedinger-no}"
2325 echo "libspeex enabled ${libspeex-no}"
2326 echo "libtheora enabled ${libtheora-no}"
2327 echo "libvorbis enabled ${libvorbis-no}"
2328 echo "libx264 enabled ${libx264-no}"
2329 echo "libxvid enabled ${libxvid-no}"
2330 echo "zlib enabled ${zlib-no}"
2331 echo "bzlib enabled ${bzlib-no}"
2332 echo
2334 for type in decoder encoder parser demuxer muxer protocol filter bsf indev outdev; do
2335 echo "Enabled ${type}s:"
2336 eval list=\$$(toupper $type)_LIST
2337 for part in $list; do
2338 enabled $part && echo ${part%_*}
2339 done | sort | pr -3 -t
2340 echo
2341 done
2343 license="LGPL"
2344 if enabled nonfree; then
2345 license="unredistributable"
2346 elif enabled gpl; then
2347 license="GPL"
2350 echo "License: $license"
2352 echo "Creating config.mak and config.h..."
2354 echo "# Automatically generated by configure - do not modify!" > config.mak
2355 echo "/* Automatically generated by configure - do not modify! */" > $TMPH
2356 echo "#ifndef FFMPEG_CONFIG_H" >> $TMPH
2357 echo "#define FFMPEG_CONFIG_H" >> $TMPH
2358 echo "#define FFMPEG_CONFIGURATION \"$FFMPEG_CONFIGURATION\"" >> $TMPH
2359 echo "#define FFMPEG_DATADIR \"$(eval c_escape $datadir)\"" >> $TMPH
2361 echo "FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION" >> config.mak
2362 echo "prefix=$prefix" >> config.mak
2363 echo "LIBDIR=\$(DESTDIR)$libdir" >> config.mak
2364 echo "SHLIBDIR=\$(DESTDIR)$shlibdir" >> config.mak
2365 echo "INCDIR=\$(DESTDIR)$incdir" >> config.mak
2366 echo "BINDIR=\$(DESTDIR)$bindir" >> config.mak
2367 echo "DATADIR=\$(DESTDIR)$datadir" >> config.mak
2368 echo "MANDIR=\$(DESTDIR)$mandir" >> config.mak
2369 echo "CC=$cc" >> config.mak
2370 echo "AS=$as" >> config.mak
2371 echo "YASM=$yasmexe" >> config.mak
2372 echo "AR=$ar" >> config.mak
2373 echo "RANLIB=$ranlib" >> config.mak
2374 echo "LN_S=$ln_s" >> config.mak
2375 enabled stripping &&
2376 echo "STRIP=$strip" >> config.mak ||
2377 echo "STRIP=echo ignoring strip" >> config.mak
2379 echo "OPTFLAGS=$CFLAGS" >> config.mak
2380 echo "LDFLAGS=$LDFLAGS" >> config.mak
2381 echo "FFSERVERLDFLAGS=$FFSERVERLDFLAGS" >> config.mak
2382 echo "SHFLAGS=$SHFLAGS" >> config.mak
2383 echo "YASMFLAGS=$YASMFLAGS" >> config.mak
2384 echo "LIBOBJFLAGS=$LIBOBJFLAGS" >> config.mak
2385 echo "BUILD_STATIC=$static" >> config.mak
2386 echo "BUILDSUF=$build_suffix" >> config.mak
2387 echo "FULLNAME=$FULLNAME" >> config.mak
2388 echo "LIBPREF=$LIBPREF" >> config.mak
2389 echo "LIBSUF=$LIBSUF" >> config.mak
2390 echo "LIBNAME=$LIBNAME" >> config.mak
2391 echo "SLIBPREF=$SLIBPREF" >> config.mak
2392 echo "SLIBSUF=$SLIBSUF" >> config.mak
2393 echo "EXESUF=$EXESUF" >> config.mak
2394 echo "EXTRA_VERSION=$extra_version" >> config.mak
2395 echo "DEPEND_CMD=$DEPEND_CMD" >> config.mak
2396 echo "HOSTCC=$host_cc" >> config.mak
2397 echo "HOSTCFLAGS=$host_cflags" >> config.mak
2398 echo "HOSTEXESUF=$HOSTEXESUF" >> config.mak
2399 echo "HOSTLDFLAGS=$host_ldflags" >> config.mak
2400 echo "HOSTLIBS=$host_libs" >> config.mak
2401 echo "TARGET_EXEC=$target_exec" >> config.mak
2402 echo "TARGET_PATH=$target_path" >> config.mak
2404 if enabled bigendian; then
2405 echo "WORDS_BIGENDIAN=yes" >> config.mak
2406 echo "#define WORDS_BIGENDIAN 1" >> $TMPH
2409 if enabled sdl; then
2410 echo "SDL_LIBS=$("${SDL_CONFIG}" --libs)" >> config.mak
2411 echo "SDL_CFLAGS=$("${SDL_CONFIG}" --cflags)" >> config.mak
2413 if enabled texi2html; then
2414 echo "BUILD_DOC=yes" >> config.mak
2417 get_version(){
2418 name=$1
2419 file=$source_path/$2
2420 eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
2421 eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
2422 lcname=$(tolower $name)
2423 eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
2424 eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
2427 get_version LIBSWSCALE libswscale/swscale.h
2428 get_version LIBPOSTPROC libpostproc/postprocess.h
2429 get_version LIBAVCODEC libavcodec/avcodec.h
2430 get_version LIBAVDEVICE libavdevice/avdevice.h
2431 get_version LIBAVFORMAT libavformat/avformat.h
2432 get_version LIBAVUTIL libavutil/avutil.h
2433 get_version LIBAVFILTER libavfilter/avfilter.h
2435 if enabled shared; then
2436 echo "BUILD_SHARED=yes" >> config.mak
2437 echo "PIC=-fPIC -DPIC" >> config.mak
2438 echo "LIBTARGET=${LIBTARGET}" >> config.mak
2439 echo "SLIBNAME=${SLIBNAME}" >> config.mak
2440 echo "SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}" >> config.mak
2441 echo "SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}" >> config.mak
2442 echo "SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}" >> config.mak
2443 echo "SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}" >> config.mak
2444 echo "SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}" >> config.mak
2445 echo "SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}" >> config.mak
2447 echo "LIB_INSTALL_EXTRA_CMD=${LIB_INSTALL_EXTRA_CMD}" >> config.mak
2448 echo "EXTRALIBS=$extralibs" >> config.mak
2450 echo "ARCH=$arch" >> config.mak
2452 print_config ARCH_ $TMPH config.mak $ARCH_LIST
2453 print_config HAVE_ $TMPH config.mak $HAVE_LIST
2454 print_config CONFIG_ $TMPH config.mak $CONFIG_LIST \
2455 $CONFIG_EXTRA \
2456 $DECODER_LIST \
2457 $ENCODER_LIST \
2458 $PARSER_LIST \
2459 $BSF_LIST \
2460 $DEMUXER_LIST \
2461 $MUXER_LIST \
2462 $FILTER_LIST \
2463 $PROTOCOL_LIST \
2464 $INDEV_LIST \
2465 $OUTDEV_LIST \
2467 echo "#define restrict $_restrict" >> $TMPH
2469 if enabled small; then
2470 echo "#define av_always_inline" >> $TMPH
2473 echo "SRC_PATH=\"$source_path\"" >> config.mak
2474 echo "SRC_PATH_BARE=$source_path" >> config.mak
2475 echo "BUILD_ROOT=\"$PWD\"" >> config.mak
2477 # Apparently it's not possible to portably echo a backslash.
2478 enabled asmalign_pot &&
2479 printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH ||
2480 printf '#define ASMALIGN(ZEROBITS) ".align 1 << " #ZEROBITS "\\n\\t"\n' >> $TMPH
2482 echo "#define EXTERN_PREFIX \"${extern_prefix}\"" >> $TMPH
2484 echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
2486 # Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
2487 cmp -s $TMPH config.h &&
2488 echo "config.h is unchanged" ||
2489 mv -f $TMPH config.h
2491 # build tree in object directory if source path is different from current one
2492 if enabled source_path_used; then
2493 DIRS="\
2494 doc \
2495 libavcodec \
2496 libavcodec/alpha \
2497 libavcodec/arm \
2498 libavcodec/bfin \
2499 libavcodec/mlib \
2500 libavcodec/ppc \
2501 libavcodec/sh4 \
2502 libavcodec/sparc \
2503 libavcodec/x86 \
2504 libavdevice \
2505 libavfilter \
2506 libavformat \
2507 libavutil \
2508 libpostproc \
2509 libswscale \
2510 tests \
2511 tools \
2513 FILES="\
2514 Makefile \
2515 common.mak \
2516 subdir.mak \
2517 doc/texi2pod.pl \
2518 libavcodec/Makefile \
2519 libavdevice/Makefile \
2520 libavfilter/Makefile \
2521 libavformat/Makefile \
2522 libavutil/Makefile \
2523 libpostproc/Makefile \
2524 libswscale/Makefile \
2526 for dir in $DIRS ; do
2527 mkdir -p $dir
2528 done
2529 for f in $FILES ; do
2530 $ln_s "$source_path/$f" $f
2531 done
2535 # build pkg-config files
2537 pkgconfig_generate(){
2538 name=$1
2539 shortname=${name#lib}${build_suffix}
2540 comment=$2
2541 version=$3
2542 libs=$4
2543 requires=$5
2544 cat <<EOF > $name/$name.pc
2545 prefix=$prefix
2546 exec_prefix=\${prefix}
2547 libdir=$libdir
2548 includedir=$incdir
2550 Name: $name
2551 Description: $comment
2552 Version: $version
2553 Requires: $(disabled shared && echo $requires)
2554 Requires.private: $(enabled shared && echo $requires)
2555 Conflicts:
2556 Libs: -L\${libdir} -l${shortname} $(disabled shared && echo $libs)
2557 Libs.private: $(enabled shared && echo $libs)
2558 Cflags: -I\${includedir}
2560 cat <<EOF > $name/$name-uninstalled.pc
2561 prefix=
2562 exec_prefix=
2563 libdir=\${pcfiledir}
2564 includedir=${source_path}
2566 Name: $name
2567 Description: $comment
2568 Version: $version
2569 Requires: $requires
2570 Conflicts:
2571 Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
2572 Cflags: -I\${includedir}
2576 pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
2577 pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
2578 pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
2579 pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "libavformat = $LIBAVFORMAT_VERSION"
2580 enabled avfilter &&
2581 pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
2582 enabled postproc &&
2583 pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
2584 pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"