Fix subtitle selection logic, make ffplay select the subtitle stream N
[ffmpeg-lucabe.git] / configure
blob813a333fa32480463205471570ebda1b7ccad5d9
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-swscale enable GPLed software scaler support [no]"
85 echo " --enable-avfilter video filter support (replaces vhook) [no]"
86 echo " --enable-avfilter-lavf video filters dependent on avformat [no]"
87 echo " --disable-vhook disable video hooking support"
88 echo " --enable-beosthreads use BeOS threads [no]"
89 echo " --enable-os2threads use OS/2 threads [no]"
90 echo " --enable-pthreads use pthreads [no]"
91 echo " --enable-w32threads use Win32 threads [no]"
92 echo " --enable-x11grab enable X11 grabbing [no]"
93 echo " --enable-vdpau enable VDPAU support [no]"
94 echo " --disable-network disable network support [no]"
95 echo " --disable-ipv6 disable IPv6 support [no]"
96 echo " --disable-mpegaudio-hp faster (but less accurate) MPEG audio decoding [no]"
97 echo " --enable-gray enable full grayscale support (slower color)"
98 echo " --enable-fastdiv enable table-based division"
99 echo " --enable-small optimize for size instead of speed"
100 echo " --disable-aandct disable AAN DCT code"
101 echo " --disable-fft disable FFT code"
102 echo " --disable-golomb disable Golomb code"
103 echo " --disable-mdct disable MDCT code"
104 echo " --disable-rdft disable RDFT code"
105 echo " --enable-hardcoded-tables use hardcoded tables instead of runtime generation"
106 echo " --enable-memalign-hack emulate memalign, interferes with memory debuggers"
107 echo " --enable-beos-netserver enable BeOS netserver"
108 echo " --disable-encoder=NAME disable encoder NAME"
109 echo " --enable-encoder=NAME enable encoder NAME"
110 echo " --disable-encoders disable all encoders"
111 echo " --disable-decoder=NAME disable decoder NAME"
112 echo " --enable-decoder=NAME enable decoder NAME"
113 echo " --disable-decoders disable all decoders"
114 echo " --disable-muxer=NAME disable muxer NAME"
115 echo " --enable-muxer=NAME enable muxer NAME"
116 echo " --disable-muxers disable all muxers"
117 echo " --disable-demuxer=NAME disable demuxer NAME"
118 echo " --enable-demuxer=NAME enable demuxer NAME"
119 echo " --disable-demuxers disable all demuxers"
120 echo " --enable-parser=NAME enable parser NAME"
121 echo " --disable-parser=NAME disable parser NAME"
122 echo " --disable-parsers disable all parsers"
123 echo " --enable-bsf=NAME enable bitstream filter NAME"
124 echo " --disable-bsf=NAME disable bitstream filter NAME"
125 echo " --disable-bsfs disable all bitstream filters"
126 echo " --enable-protocol=NAME enable protocol NAME"
127 echo " --disable-protocol=NAME disable protocol NAME"
128 echo " --disable-protocols disable all protocols"
129 echo " --disable-indevs disable input devices"
130 echo " --disable-outdevs disable output devices"
131 echo " --disable-devices disable all devices"
132 echo " --enable-filter=NAME enable filter NAME"
133 echo " --disable-filter=NAME disable filter NAME"
134 echo " --disable-filters disable all filters"
135 echo " --list-decoders show all available decoders"
136 echo " --list-encoders show all available encoders"
137 echo " --list-muxers show all available muxers"
138 echo " --list-demuxers show all available demuxers"
139 echo " --list-parsers show all available parsers"
140 echo " --list-protocols show all available protocols"
141 echo " --list-bsfs show all available bitstream filters"
142 echo " --list-indevs show all available input devices"
143 echo " --list-outdevs show all available output devices"
144 echo " --list-filters show all available filters"
145 echo
146 echo "External library support:"
147 echo " --enable-avisynth enable reading of AVISynth script files [no]"
148 echo " --enable-bzlib enable bzlib [autodetect]"
149 echo " --enable-libamr-nb enable libamr-nb floating point audio codec [no]"
150 echo " --enable-libamr-wb enable libamr-wb floating point audio codec [no]"
151 echo " --enable-libdc1394 enable IIDC-1394 grabbing using libdc1394"
152 echo " and libraw1394 [no]"
153 echo " --enable-libdirac enable Dirac support via libdirac [no]"
154 echo " --enable-libfaac enable FAAC support via libfaac [no]"
155 echo " --enable-libfaad enable FAAD support via libfaad [no]"
156 echo " --enable-libfaadbin open libfaad.so.0 at runtime [no]"
157 echo " --enable-libgsm enable GSM support via libgsm [no]"
158 echo " --enable-libmp3lame enable MP3 encoding via libmp3lame [no]"
159 echo " --enable-libnut enable NUT (de)muxing via libnut,"
160 echo " native (de)muxer exists [no]"
161 echo " --enable-libopenjpeg enable JPEG 2000 decoding via OpenJPEG [no]"
162 echo " --enable-libschroedinger enable Dirac support via libschroedinger [no]"
163 echo " --enable-libspeex enable Speex decoding via libspeex [no]"
164 echo " --enable-libtheora enable Theora encoding via libtheora [no]"
165 echo " --enable-libvorbis enable Vorbis encoding via libvorbis,"
166 echo " native implementation exists [no]"
167 echo " --enable-libx264 enable H.264 encoding via x264 [no]"
168 echo " --enable-libxvid enable Xvid encoding via xvidcore,"
169 echo " native MPEG-4/Xvid encoder exists [no]"
170 echo " --enable-mlib enable Sun medialib [no]"
171 echo " --enable-zlib enable zlib [autodetect]"
172 echo ""
173 echo "Advanced options (experts only):"
174 echo " --source-path=PATH path to source code [$source_path]"
175 echo " --cross-prefix=PREFIX use PREFIX for compilation tools [$cross_prefix]"
176 echo " --enable-cross-compile assume a cross-compiler is used"
177 echo " --sysroot=PATH root of cross-build tree"
178 echo " --sysinclude=PATH location of cross-build system headers"
179 echo " --target-os=OS compiler targets OS [$target_os]"
180 echo " --target-exec=CMD command to run executables on target"
181 echo " --target-path=DIR path to view of build directory on target"
182 echo " --nm=NM use nm tool"
183 echo " --cc=CC use C compiler CC [$cc_default]"
184 echo " --host-cc=HOSTCC use host C compiler HOSTCC"
185 echo " --host-cflags=HCFLAGS use HCFLAGS when compiling for host"
186 echo " --host-ldflags=HLDFLAGS use HLDFLAGS when linking for host"
187 echo " --host-libs=HLIBS use libs HLIBS when linking for host"
188 echo " --extra-cflags=ECFLAGS add ECFLAGS to CFLAGS [$CFLAGS]"
189 echo " --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]"
190 echo " --extra-libs=ELIBS add ELIBS [$ELIBS]"
191 echo " --extra-version=STRING version string suffix []"
192 echo " --build-suffix=SUFFIX library name suffix []"
193 echo " --arch=ARCH select architecture [$arch]"
194 echo " --cpu=CPU select the minimum required CPU (affects"
195 echo " instruction selection, may crash on older CPUs)"
196 echo " --enable-powerpc-perf enable performance report on PPC"
197 echo " (requires enabling PMC)"
198 echo " --disable-altivec disable AltiVec optimizations"
199 echo " --disable-amd3dnow disable 3DNow! optimizations"
200 echo " --disable-amd3dnowext disable 3DNow! extended optimizations"
201 echo " --disable-mmx disable MMX optimizations"
202 echo " --disable-mmx2 disable MMX2 optimizations"
203 echo " --disable-sse disable SSE optimizations"
204 echo " --disable-ssse3 disable SSSE3 optimizations"
205 echo " --disable-armv5te disable armv5te optimizations"
206 echo " --disable-armv6 disable armv6 optimizations"
207 echo " --disable-armv6t2 disable armv6t2 optimizations"
208 echo " --disable-armvfp disable ARM VFP optimizations"
209 echo " --disable-iwmmxt disable iwmmxt optimizations"
210 echo " --disable-mmi disable MMI optimizations"
211 echo " --disable-neon disable neon optimizations"
212 echo " --disable-vis disable VIS optimizations"
213 echo " --disable-yasm disable use of yasm assembler"
214 echo
215 echo "Developer options (useful when working on FFmpeg itself):"
216 echo " --disable-debug disable debugging symbols"
217 echo " --enable-debug=LEVEL set the debug level [$debuglevel]"
218 echo " --enable-gprof enable profiling with gprof [$gprof]"
219 echo " --disable-optimizations disable compiler optimizations"
220 echo " --enable-extra-warnings enable more compiler warnings"
221 echo " --disable-stripping disable stripping of executables and shared libraries"
222 echo ""
223 echo "NOTE: Object files are built at the place where configure is launched."
224 exit 0
227 log(){
228 echo "$@" >> $logfile
231 log_file(){
232 log BEGIN $1
233 pr -n -t $1 >> $logfile
234 log END $1
237 echolog(){
238 log "$@"
239 echo "$@"
242 die(){
243 echolog "$@"
244 cat <<EOF
245 If you think configure made a mistake, make sure you are using the latest
246 version from SVN. If the latest version fails, report the problem to the
247 ffmpeg-user@mplayerhq.hu mailing list or IRC #ffmpeg on irc.freenode.net.
249 if disabled logging; then
250 cat <<EOF
251 Rerun configure with logging enabled (do not use --disable-logging), and
252 include the log this produces with your report.
254 else
255 cat <<EOF
256 Include the log file "$logfile" produced by configure as this will help
257 solving the problem.
260 rm -f $TMPC $TMPE $TMPH $TMPO $TMPS $TMPSH
261 exit 1
264 # Avoid locale weirdness, besides we really just want to translate ASCII.
265 toupper(){
266 echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
269 tolower(){
270 echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
273 c_escape(){
274 echo "$*" | sed 's/["\\]/\\\0/g'
277 set_all(){
278 value=$1
279 shift
280 for var in $*; do
281 eval $var=$value
282 done
285 set_weak(){
286 value=$1
287 shift
288 for var; do
289 eval : \${$var:=$value}
290 done
293 pushvar(){
294 for var in $*; do
295 eval level=\${${var}_level:=0}
296 eval ${var}_${level}="\$$var"
297 eval ${var}_level=$(($level+1))
298 done
301 popvar(){
302 for var in $*; do
303 eval level=\${${var}_level:-0}
304 test $level = 0 && continue
305 eval level=$(($level-1))
306 eval $var="\${${var}_${level}}"
307 eval ${var}_level=$level
308 eval unset ${var}_${level}
309 done
312 enable(){
313 set_all yes $*
316 disable(){
317 set_all no $*
320 enable_weak(){
321 set_weak yes $*
324 disable_weak(){
325 set_weak no $*
328 enable_safe(){
329 enable $(echo "$*" | sed 's/[^A-Za-z0-9_ ]/_/g')
332 disable_safe(){
333 disable $(echo "$*" | sed 's/[^A-Za-z0-9_ ]/_/g')
336 do_enable_deep(){
337 for var; do
338 enabled $var && continue
339 eval sel="\$${var}_select"
340 eval sgs="\$${var}_suggest"
341 pushvar var sgs
342 enable_deep $sel
343 popvar sgs
344 enable_deep_weak $sgs
345 popvar var
346 done
349 enable_deep(){
350 do_enable_deep $*
351 enable $*
354 enable_deep_weak(){
355 do_enable_deep $*
356 enable_weak $*
359 enabled(){
360 test "${1#!}" = "$1" && op== || op=!=
361 eval test "x\$${1#!}" $op "xyes"
364 disabled(){
365 test "${1#!}" = "$1" && op== || op=!=
366 eval test "x\$${1#!}" $op "xno"
369 enabled_all(){
370 for opt; do
371 enabled $opt || return 1
372 done
375 disabled_all(){
376 for opt; do
377 disabled $opt || return 1
378 done
381 enabled_any(){
382 for opt; do
383 enabled $opt && return 0
384 done
387 disabled_any(){
388 for opt; do
389 disabled $opt && return 0
390 done
391 return 1
394 set_default(){
395 for opt; do
396 eval : \${$opt:=\$${opt}_default}
397 done
400 is_in(){
401 value=$1
402 shift
403 for var in $*; do
404 [ $var = $value ] && return 0
405 done
406 return 1
409 check_deps(){
410 for cfg; do
411 cfg="${cfg#!}"
412 enabled ${cfg}_checking && die "Circular dependency for $cfg."
413 disabled ${cfg}_checking && continue
414 enable ${cfg}_checking
416 eval dep_all="\$${cfg}_deps"
417 eval dep_any="\$${cfg}_deps_any"
418 eval dep_sel="\$${cfg}_select"
419 eval dep_sgs="\$${cfg}_suggest"
421 pushvar cfg dep_all dep_any dep_sel dep_sgs
422 check_deps $dep_all $dep_any $dep_sel $dep_sgs
423 popvar cfg dep_all dep_any dep_sel dep_sgs
425 enabled_all $dep_all || disable $cfg
426 enabled_any $dep_any || disable $cfg
427 disabled_any $dep_sel && disable $cfg
429 if enabled $cfg; then
430 eval dep_extralibs="\$${cfg}_extralibs"
431 test -n "$dep_extralibs" && add_extralibs $dep_extralibs
432 enable_deep $dep_sel
433 enable_deep_weak $dep_sgs
436 disable ${cfg}_checking
437 done
440 print_config(){
441 pfx=$1
442 header=$2
443 makefile=$3
444 shift 3
445 for cfg; do
446 ucname="`toupper $cfg`"
447 if enabled $cfg; then
448 echo "#define ${pfx}${ucname} 1" >> $header
449 echo "${pfx}${ucname}=yes" >> $makefile
450 else
451 echo "#define ${pfx}${ucname} 0" >> $header
453 done
456 flags_saved(){
457 (: ${SAVE_CFLAGS?}) 2> /dev/null
460 save_flags(){
461 flags_saved && return
462 SAVE_CFLAGS="$CFLAGS"
463 SAVE_LDFLAGS="$LDFLAGS"
464 SAVE_extralibs="$extralibs"
467 restore_flags(){
468 flags_saved || return
469 CFLAGS="$SAVE_CFLAGS"
470 LDFLAGS="$SAVE_LDFLAGS"
471 extralibs="$SAVE_extralibs"
472 unset SAVE_CFLAGS
473 unset SAVE_LDFLAGS
474 unset SAVE_extralibs
477 temp_cflags(){
478 save_flags
479 CFLAGS="$CFLAGS $*"
482 temp_ldflags(){
483 save_flags
484 LDFLAGS="$LDFLAGS $*"
487 temp_extralibs(){
488 save_flags
489 extralibs="$extralibs $*"
492 append(){
493 var=$1
494 shift
495 flags_saved && eval "SAVE_$var=\"\$SAVE_$var $*\""
496 eval "$var=\"\$$var $*\""
499 add_cflags(){
500 append CFLAGS "$@"
503 add_ldflags(){
504 append LDFLAGS "$@"
507 add_extralibs(){
508 append extralibs "$@"
511 check_cmd(){
512 log "$@"
513 "$@" >> $logfile 2>&1
516 check_cc(){
517 log check_cc "$@"
518 cat > $TMPC
519 log_file $TMPC
520 check_cmd $cc $CFLAGS "$@" -c -o $TMPO $TMPC
523 check_cpp(){
524 log check_cpp "$@"
525 cat > $TMPC
526 log_file $TMPC
527 check_cmd $cc $CFLAGS "$@" -E -o $TMPO $TMPC
530 check_asm(){
531 log check_asm "$@"
532 name="$1"
533 asm="$2"
534 shift 2
535 check_cc "$@" <<EOF && enable $name || disable $name
536 void foo(void){ __asm__ volatile($asm); }
540 check_yasm(){
541 log check_yasm "$@"
542 echo "$1" > $TMPS
543 log_file $TMPS
544 shift 1
545 check_cmd $yasmexe $YASMFLAGS "$@" -o $TMPO $TMPS
548 check_ld(){
549 log check_ld "$@"
550 check_cc || return
551 flags=''
552 libs=''
553 for f; do
554 test "${f}" = "${f#-l}" && flags="$flags $f" || libs="$libs $f"
555 done
556 check_cmd $cc $LDFLAGS $flags -o $TMPE $TMPO $extralibs $libs
559 check_cflags(){
560 log check_cflags "$@"
561 check_cc "$@" <<EOF && add_cflags "$@"
562 int x;
566 check_ldflags(){
567 log check_ldflags "$@"
568 check_ld "$@" <<EOF && add_ldflags "$@"
569 int main(void){ return 0; }
573 check_header(){
574 log check_header "$@"
575 header=$1
576 shift
577 check_cpp "$@" <<EOF && enable_safe $header || disable_safe $header
578 #include <$header>
579 int x;
583 check_func(){
584 log check_func "$@"
585 func=$1
586 shift
587 disable $func
588 check_ld "$@" <<EOF && enable $func
589 extern int $func();
590 int main(void){ $func(); }
594 check_func_headers(){
595 log check_func_headers "$@"
596 headers=$1
597 func=$2
598 shift 2
599 disable $func
600 incs=""
601 for hdr in $headers; do
602 incs="$incs
603 #include <$hdr>"
604 done
605 check_ld "$@" <<EOF && enable $func && enable_safe $headers
606 $incs
607 int main(int argc, char **argv){
608 (void) $func;
609 return 0;
614 check_cpp_condition(){
615 log check_cpp_condition "$@"
616 header=$1
617 condition=$2
618 check_cpp <<EOF
619 #include <$header>
620 #if !($condition)
621 #error "unsatisfied condition: $condition"
622 #endif
626 check_lib(){
627 log check_lib "$@"
628 header="$1"
629 func="$2"
630 shift 2
631 temp_extralibs "$@"
632 check_header $header && check_func $func && add_extralibs "$@"
633 err=$?
634 restore_flags
635 return $err
638 check_lib2(){
639 log check_lib2 "$@"
640 headers="$1"
641 func="$2"
642 shift 2
643 temp_extralibs "$@"
644 check_func_headers "$headers" $func && add_extralibs "$@"
645 err=$?
646 restore_flags
647 return $err
650 check_exec(){
651 check_ld "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
654 check_exec_crash(){
655 code=`cat`
657 # exit() is not async signal safe. _Exit (C99) and _exit (POSIX)
658 # are safe but may not be available everywhere. Thus we use
659 # raise(SIGTERM) instead. The check is run in a subshell so we
660 # can redirect the "Terminated" message from the shell. SIGBUS
661 # is not defined by standard C so it is used conditionally.
663 (check_exec "$@") >> $logfile 2>&1 <<EOF
664 #include <signal.h>
665 static void sighandler(int sig){
666 raise(SIGTERM);
668 int main(void){
669 signal(SIGILL, sighandler);
670 signal(SIGFPE, sighandler);
671 signal(SIGSEGV, sighandler);
672 #ifdef SIGBUS
673 signal(SIGBUS, sighandler);
674 #endif
675 { $code }
680 check_type(){
681 log check_type "$@"
682 headers=$1
683 type=$2
684 shift 2
685 disable $type
686 incs=""
687 for hdr in $headers; do
688 incs="$incs
689 #include <$hdr>"
690 done
691 check_cc "$@" <<EOF && enable $type
692 $incs
693 $type v;
697 require(){
698 name="$1"
699 header="$2"
700 func="$3"
701 shift 3
702 check_lib $header $func "$@" || die "ERROR: $name not found"
705 require2(){
706 name="$1"
707 headers="$2"
708 func="$3"
709 shift 3
710 check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
713 check_foo_config(){
714 cfg=$1
715 pkg=$2
716 header=$3
717 func=$4
718 shift 4
719 disable $cfg
720 check_cmd ${pkg}-config --version
721 err=$?
722 if test "$err" = 0; then
723 temp_cflags `${pkg}-config --cflags`
724 temp_extralibs `${pkg}-config --libs`
725 check_lib "$@" $header $func && enable $cfg
727 return $err
730 apply(){
731 file=$1
732 shift
733 "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
736 # CONFIG_LIST contains configurable options, while HAVE_LIST is for
737 # system-dependent things.
739 COMPONENT_LIST="
740 bsfs
741 decoders
742 demuxers
743 encoders
744 filters
745 indevs
746 muxers
747 outdevs
748 parsers
749 protocols
752 CONFIG_LIST="
753 $COMPONENT_LIST
754 aandct
755 avfilter
756 avfilter_lavf
757 avisynth
758 beos_netserver
759 bzlib
760 fastdiv
761 ffmpeg
762 ffplay
763 ffserver
765 golomb
767 gprof
768 gray
769 hardcoded_tables
770 ipv6
771 libamr_nb
772 libamr_wb
773 libdc1394
774 libdirac
775 libfaac
776 libfaad
777 libfaadbin
778 libgsm
779 libmp3lame
780 libnut
781 libopenjpeg
782 libschroedinger
783 libspeex
784 libtheora
785 libvorbis
786 libx264
787 libxvid
788 mdct
789 memalign_hack
790 mlib
791 mpegaudio_hp
792 network
793 nonfree
794 postproc
795 powerpc_perf
796 rdft
797 shared
798 small
799 static
800 swscale
801 vdpau
802 vhook
803 x11grab
804 zlib
807 THREADS_LIST='
808 beosthreads
809 os2threads
810 pthreads
811 w32threads
814 ARCH_LIST='
815 alpha
817 bfin
818 ia64
819 m68k
820 mips
821 parisc
823 s390
825 sparc
826 sparc64
828 x86_32
829 x86_64
832 ARCH_EXT_LIST='
833 altivec
834 amd3dnow
835 amd3dnowext
836 armv5te
837 armv6
838 armv6t2
839 armvfp
840 iwmmxt
843 mmx2
844 neon
845 ppc4xx
847 ssse3
851 HAVE_LIST="
852 $ARCH_EXT_LIST
853 $THREADS_LIST
854 alsa_asoundlib_h
855 altivec_h
856 arpa_inet_h
857 bswap
858 closesocket
859 cmov
860 conio_h
861 dcbzl
862 dev_bktr_ioctl_bt848_h
863 dev_bktr_ioctl_meteor_h
864 dev_ic_bt8xx_h
865 dev_video_meteor_ioctl_meteor_h
866 dev_video_bktr_ioctl_bt848_h
867 dlfcn_h
868 dlopen
869 dos_paths
870 ebp_available
871 ebx_available
872 fast_64bit
873 fast_cmov
874 fast_unaligned
875 fork
876 freetype2
877 gethrtime
878 GetProcessTimes
879 getrusage
880 imlib2
881 inet_aton
882 inline_asm
883 libdc1394_1
884 libdc1394_2
885 llrint
886 lrint
887 lrintf
888 machine_ioctl_bt848_h
889 machine_ioctl_meteor_h
890 malloc_h
891 memalign
892 mkstemp
894 posix_memalign
895 ppc64
896 round
897 roundf
899 sdl_video_size
900 setmode
901 socklen_t
902 soundcard_h
903 poll_h
904 sys_mman_h
905 sys_resource_h
906 sys_select_h
907 sys_soundcard_h
908 sys_videoio_h
909 ten_operands
910 termios_h
911 threads
912 truncf
913 winsock2_h
914 yasm
917 # options emitted with CONFIG_ prefix but not available on command line
918 CONFIG_EXTRA="
919 oldscaler
922 CMDLINE_SELECT="
923 $ARCH_EXT_LIST
924 $CONFIG_LIST
925 $THREADS_LIST
926 cross_compile
927 debug
928 extra_warnings
929 logging
930 optimizations
931 stripping
932 yasm
935 PATHS_LIST='
936 bindir
937 datadir
938 incdir
939 libdir
940 mandir
941 prefix
942 shlibdir
945 CMDLINE_SET="
946 $PATHS_LIST
947 arch
948 build_suffix
951 cross_prefix
952 extra_version
953 host_cc
954 host_cflags
955 host_ldflags
956 host_libs
957 logfile
959 source_path
960 sysinclude
961 sysroot
962 target_exec
963 target_os
964 target_path
967 # code dependency declarations
969 # architecture extensions
970 altivec_deps="ppc"
971 amd3dnow_deps="mmx"
972 amd3dnowext_deps="amd3dnow"
973 armv5te_deps="arm"
974 armv6_deps="arm"
975 armv6t2_deps="arm"
976 armvfp_deps="arm"
977 iwmmxt_deps="arm"
978 mmi_deps="mips"
979 mmx_deps="x86"
980 mmx2_deps="mmx"
981 neon_deps="arm"
982 ppc4xx_deps="ppc"
983 sse_deps="mmx"
984 ssse3_deps="sse"
985 vis_deps="sparc"
987 # common features
988 oldscaler_deps="!swscale"
990 # decoders / encoders
991 aac_decoder_select="fft mdct"
992 ac3_decoder_deps="gpl"
993 ac3_decoder_select="fft mdct"
994 atrac3_decoder_select="fft mdct"
995 cavs_decoder_select="golomb"
996 cook_decoder_select="fft mdct"
997 cscd_decoder_suggest="zlib"
998 dca_decoder_select="fft mdct"
999 dnxhd_encoder_select="aandct"
1000 dxa_decoder_select="zlib"
1001 eac3_decoder_deps="gpl"
1002 eac3_decoder_select="fft mdct"
1003 eatgq_decoder_select="aandct"
1004 eatqi_decoder_select="aandct"
1005 ffv1_decoder_select="golomb"
1006 flac_decoder_select="golomb"
1007 flac_encoder_select="golomb"
1008 flashsv_decoder_select="zlib"
1009 flashsv_encoder_select="zlib"
1010 flv_encoder_select="aandct"
1011 h261_encoder_select="aandct"
1012 h263_encoder_select="aandct"
1013 h263p_encoder_select="aandct"
1014 h264_decoder_select="golomb"
1015 h264_vdpau_decoder_deps="vdpau"
1016 imc_decoder_select="fft mdct"
1017 jpegls_decoder_select="golomb"
1018 jpegls_encoder_select="golomb"
1019 ljpeg_encoder_select="aandct"
1020 loco_decoder_select="golomb"
1021 mjpeg_encoder_select="aandct"
1022 mpeg1video_encoder_select="aandct"
1023 mpeg2video_encoder_select="aandct"
1024 mpeg4_encoder_select="aandct"
1025 mpeg_vdpau_decoder_deps="vdpau"
1026 mpeg1_vdpau_decoder_deps="vdpau"
1027 mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h"
1028 msmpeg4v1_encoder_select="aandct"
1029 msmpeg4v2_encoder_select="aandct"
1030 msmpeg4v3_encoder_select="aandct"
1031 nellymoser_decoder_select="fft mdct"
1032 nellymoser_encoder_select="fft mdct"
1033 png_decoder_select="zlib"
1034 png_encoder_select="zlib"
1035 qdm2_decoder_select="fft mdct rdft"
1036 rv10_encoder_select="aandct"
1037 rv20_encoder_select="aandct"
1038 rv30_decoder_select="golomb"
1039 rv40_decoder_select="golomb"
1040 shorten_decoder_select="golomb"
1041 sonic_decoder_select="golomb"
1042 sonic_encoder_select="golomb"
1043 sonic_ls_encoder_select="golomb"
1044 svq3_decoder_select="golomb"
1045 svq3_decoder_suggest="zlib"
1046 tiff_decoder_suggest="zlib"
1047 tiff_encoder_suggest="zlib"
1048 tscc_decoder_select="zlib"
1049 vc1_vdpau_decoder_deps="vdpau"
1050 vorbis_decoder_select="fft mdct"
1051 vorbis_encoder_select="fft mdct"
1052 wmav1_decoder_select="fft mdct"
1053 wmav1_encoder_select="fft mdct"
1054 wmav2_decoder_select="fft mdct"
1055 wmav2_encoder_select="fft mdct"
1056 wmv1_encoder_select="aandct"
1057 wmv2_encoder_select="aandct"
1058 wmv3_vdpau_decoder_deps="vdpau"
1059 zlib_decoder_select="zlib"
1060 zlib_encoder_select="zlib"
1061 zmbv_decoder_select="zlib"
1062 zmbv_encoder_select="zlib"
1064 # external libraries
1065 libamr_nb_decoder_deps="libamr_nb"
1066 libamr_nb_encoder_deps="libamr_nb"
1067 libamr_wb_decoder_deps="libamr_wb"
1068 libamr_wb_encoder_deps="libamr_wb"
1069 libdirac_decoder_deps="libdirac !libschroedinger"
1070 libdirac_encoder_deps="libdirac"
1071 libfaac_encoder_deps="libfaac"
1072 libfaad_decoder_deps="libfaad"
1073 libfaadbin_decoder_extralibs='$ldl'
1074 libgsm_decoder_deps="libgsm"
1075 libgsm_encoder_deps="libgsm"
1076 libgsm_ms_decoder_deps="libgsm"
1077 libgsm_ms_encoder_deps="libgsm"
1078 libmp3lame_encoder_deps="libmp3lame"
1079 libopenjpeg_decoder_deps="libopenjpeg"
1080 libschroedinger_decoder_deps="libschroedinger"
1081 libschroedinger_encoder_deps="libschroedinger"
1082 libspeex_decoder_deps="libspeex"
1083 libtheora_encoder_deps="libtheora"
1084 libvorbis_encoder_deps="libvorbis"
1085 libx264_encoder_deps="libx264"
1086 libxvid_encoder_deps="libxvid"
1087 mpeg4aac_decoder_deps="libfaad"
1088 vdpau_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1090 # demuxers / muxers
1091 ac3_demuxer_deps="ac3_parser"
1092 alsa_demuxer_deps="alsa_asoundlib_h snd_pcm_htimestamp"
1093 alsa_demuxer_extralibs="-lasound"
1094 alsa_muxer_deps="alsa_asoundlib_h"
1095 alsa_muxer_extralibs="-lasound"
1096 audio_beos_demuxer_deps="audio_beos"
1097 audio_beos_demuxer_extralibs="-lmedia -lbe"
1098 audio_beos_muxer_deps="audio_beos"
1099 audio_beos_muxer_extralibs="-lmedia -lbe"
1100 avisynth_demuxer_deps="avisynth"
1101 bktr_demuxer_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
1102 dirac_demuxer_deps="dirac_parser"
1103 dv1394_demuxer_deps="dv1394 dv_demuxer"
1104 libdc1394_demuxer_deps="libdc1394"
1105 libnut_demuxer_deps="libnut"
1106 libnut_muxer_deps="libnut"
1107 matroska_demuxer_suggest="zlib bzlib"
1108 mov_demuxer_suggest="zlib"
1109 mp3_demuxer_deps="mpegaudio_parser"
1110 oss_demuxer_deps_any="soundcard_h sys_soundcard_h"
1111 oss_muxer_deps_any="soundcard_h sys_soundcard_h"
1112 redir_demuxer_deps="network"
1113 rtp_muxer_deps="network rtp_protocol"
1114 rtsp_demuxer_deps="sdp_demuxer"
1115 sdp_demuxer_deps="rtp_protocol mpegts_demuxer"
1116 v4l_demuxer_deps="linux_videodev_h"
1117 v4l2_demuxer_deps_any="linux_videodev2_h sys_videoio_h"
1118 vfwcap_demuxer_deps="capCreateCaptureWindow"
1119 vfwcap_demuxer_extralibs="-lvfw32"
1120 x11_grab_device_demuxer_deps="x11grab XShmCreateImage"
1121 x11_grab_device_demuxer_extralibs="-lX11 -lXext"
1123 # protocols
1124 gopher_protocol_deps="network"
1125 http_protocol_deps="network"
1126 rtp_protocol_deps="udp_protocol"
1127 tcp_protocol_deps="network"
1128 udp_protocol_deps="network"
1130 # filters
1131 movie_filter_deps="avfilter_lavf"
1133 # programs
1134 ffplay_deps="sdl"
1135 ffserver_deps="ffm_muxer rtp_protocol rtsp_demuxer"
1136 ffserver_extralibs='$ldl'
1137 vhook_extralibs='$ldl'
1140 # default parameters
1142 logfile="config.err"
1144 # installation paths
1145 prefix_default="/usr/local"
1146 bindir_default='${prefix}/bin'
1147 datadir_default='${prefix}/share/ffmpeg'
1148 incdir_default='${prefix}/include'
1149 libdir_default='${prefix}/lib'
1150 mandir_default='${prefix}/share/man'
1151 shlibdir_default="$libdir_default"
1153 # toolchain
1154 ar="ar"
1155 cc_default="gcc"
1156 host_cc_default="gcc"
1157 ln_s="ln -sf"
1158 nm_default="nm"
1159 objformat="elf"
1160 ranlib="ranlib"
1161 strip="strip"
1162 yasmexe="yasm"
1164 # machine
1165 arch=`uname -m`
1166 cpu="generic"
1168 # OS
1169 target_os=$(tolower $(uname -s))
1171 # configurable options
1172 enable debug
1173 enable ffmpeg
1174 enable ffplay
1175 enable ffserver
1176 enable ipv6
1177 enable mpegaudio_hp
1178 enable network
1179 enable oldscaler
1180 enable optimizations
1181 enable protocols
1182 enable static
1183 enable stripping
1184 vhook="default"
1186 # build settings
1187 add_cflags -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112
1188 SHFLAGS='-shared -Wl,-soname,$$(@F)'
1189 VHOOKSHFLAGS='$(SHFLAGS)'
1190 FFSERVERLDFLAGS=-Wl,-E
1191 LIBPREF="lib"
1192 LIBSUF=".a"
1193 FULLNAME='$(NAME)$(BUILDSUF)'
1194 LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
1195 SLIBPREF="lib"
1196 SLIBSUF=".so"
1197 SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
1198 SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
1199 SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
1200 LIB_INSTALL_EXTRA_CMD='$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
1202 host_cflags='-O3 -g -Wall'
1203 host_libs='-lm'
1205 target_path='.'
1207 # gcc stupidly only outputs the basename of targets with -MM, but we need the
1208 # full relative path for objects in subdirectories for non-recursive Make.
1209 DEPEND_CMD='$(CC) $(CFLAGS) -MM $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o,"'
1211 # find source path
1212 source_path="`dirname \"$0\"`"
1213 enable source_path_used
1214 if test -z "$source_path" -o "$source_path" = "." ; then
1215 source_path="`pwd`"
1216 disable source_path_used
1217 else
1218 source_path="`cd \"$source_path\"; pwd`"
1219 echo "$source_path" | grep -q '[[:blank:]]' &&
1220 die "Out of tree builds are impossible with whitespace in source path."
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 enabled cross_compile || host_cc_default=$cc
1333 set_default host_cc
1335 case $target_os in
1336 mingw32*|cygwin*|*-dos|freedos|opendos|os/2*) EXESUF=.exe ;;
1337 esac
1339 # set temporary file name
1340 : ${TMPDIR:=$TEMPDIR}
1341 : ${TMPDIR:=$TMP}
1342 : ${TMPDIR:=/tmp}
1344 TMPC="${TMPDIR}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.c"
1345 TMPE="${TMPDIR}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}${EXESUF}"
1346 TMPH="${TMPDIR}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.h"
1347 TMPO="${TMPDIR}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.o"
1348 TMPS="${TMPDIR}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.S"
1349 TMPSH="${TMPDIR}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.sh"
1351 # make sure we can execute files in $TMPDIR
1352 cat > $TMPSH 2>> $logfile <<EOF
1353 #! /bin/sh
1355 chmod +x $TMPSH >> $logfile 2>&1
1356 if ! $TMPSH >> $logfile 2>&1; then
1357 cat <<EOF
1358 Unable to create and execute files in $TMPDIR. Set the TMPDIR environment
1359 variable to another directory and make sure that it is not mounted noexec.
1361 die "Sanity test failed."
1363 rm $TMPSH
1365 if $cc --version 2>/dev/null | grep -qi gcc; then
1366 cc_type=gcc
1367 elif $cc --version 2>/dev/null | grep -q Intel; then
1368 cc_type=icc
1369 elif $cc -v 2>&1 | grep -q xlc; then
1370 cc_type=xlc
1371 elif $cc -V 2>/dev/null | grep -q Compaq; then
1372 cc_type=ccc
1373 DEPEND_CMD='$(CC) $(CFLAGS) -M $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o,"'
1374 add_ldflags -Wl,-z,now # calls to libots crash without this
1377 test -n "$cc_type" && enable $cc_type || echolog "Unknown C compiler $cc"
1379 if test -n "$sysroot"; then
1380 case "$cc_type" in
1381 gcc)
1382 add_cflags --sysroot="$sysroot"
1383 add_ldflags --sysroot="$sysroot"
1385 esac
1388 # compiler sanity check
1389 check_exec <<EOF
1390 int main(void){ return 0; }
1392 if test "$?" != 0; then
1393 echo "$cc is unable to create an executable file."
1394 if test -z "$cross_prefix" && ! enabled cross_compile ; then
1395 echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
1396 echo "Only do this if you know what cross compiling means."
1398 die "C compiler test failed."
1401 check_cflags -std=c99
1403 case "$arch" in
1404 alpha)
1405 arch="alpha"
1406 enable fast_64bit
1407 check_cflags -mieee
1409 arm|armv[4567]*l)
1410 arch="arm"
1412 avr32)
1414 bfin)
1415 arch="bfin"
1417 ia64)
1418 arch="ia64"
1419 enable fast_64bit
1421 m68k)
1422 arch="m68k"
1424 mips|mipsel|IP*)
1425 arch="mips"
1427 mips64)
1428 arch="mips"
1429 enable fast_64bit
1431 parisc|hppa)
1432 arch="parisc"
1434 parisc64|hppa64)
1435 arch="parisc"
1436 enable fast_64bit
1438 "Power Macintosh"|ppc|powerpc)
1439 arch="ppc"
1440 enable fast_unaligned
1442 ppc64)
1443 arch="ppc"
1444 enable fast_64bit
1445 enable fast_unaligned
1447 s390|s390x)
1448 arch="s390"
1450 sh4|sh)
1451 arch="sh4"
1453 sparc)
1454 arch="sparc"
1456 sun4u|sparc64)
1457 arch="sparc"
1458 subarch="sparc64"
1459 enable fast_64bit
1461 i386|i486|i586|i686|i86pc|BePC)
1462 arch="x86"
1463 subarch="x86_32"
1464 enable fast_unaligned
1466 x86_64|amd64)
1467 arch="x86"
1468 subarch="x86_32"
1469 enable cmov
1470 enable fast_cmov
1471 enable fast_unaligned
1472 check_cc <<EOF && enable fast_64bit && subarch="x86_64"
1473 int test[sizeof(char*) - 7];
1477 arch="unknown"
1479 esac
1481 enable $arch $subarch
1483 # OS specific
1484 case $target_os in
1485 beos|haiku|zeta)
1486 prefix_default="$HOME/config"
1487 # helps building libavcodec
1488 add_cflags -DPIC -fomit-frame-pointer
1489 # 3 gcc releases known for BeOS, each with ugly bugs
1490 gcc_version="`$cc -v 2>&1 | grep version | cut -d ' ' -f3-`"
1491 case "$gcc_version" in
1492 2.9-beos-991026*|2.9-beos-000224*) echo "R5/GG gcc"
1493 disable mmx
1495 *20010315*) echo "BeBits gcc"
1496 add_cflags -fno-expensive-optimizations
1498 esac
1499 SHFLAGS=-nostart
1500 # enable BeOS things
1501 enable audio_beos
1502 # no need for libm, but the inet stuff
1503 # Check for BONE
1504 # XXX: actually should check for NOT net_server
1505 if echo $BEINCLUDES | grep -q 'headers/be/bone'; then
1506 network_extralibs="-lbind -lsocket"
1507 else
1508 enable beos_netserver
1509 network_extralibs="-lnet"
1510 fi ;;
1511 sunos)
1512 FFSERVERLDFLAGS=""
1513 SHFLAGS='-shared -Wl,-h,$$(@F)'
1514 network_extralibs="-lsocket -lnsl"
1515 add_cflags -D__EXTENSIONS__
1517 netbsd)
1518 oss_demuxer_extralibs="-lossaudio"
1519 oss_muxer_extralibs="-lossaudio"
1521 openbsd)
1522 disable need_memalign
1523 LIBOBJFLAGS='$(PIC)'
1524 SHFLAGS='-shared'
1525 oss_demuxer_extralibs="-lossaudio"
1526 oss_muxer_extralibs="-lossaudio"
1528 freebsd)
1529 disable need_memalign
1531 bsd/os)
1532 osextralibs="-lpoll -lgnugetopt"
1533 strip="strip -d"
1535 darwin)
1536 disable need_memalign
1537 SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR) -Wl,-read_only_relocs,suppress'
1538 VHOOKSHFLAGS='-dynamiclib -Wl,-single_module -flat_namespace -undefined suppress -Wl,-install_name,$(SHLIBDIR)/vhook/$$(@F)'
1539 strip="strip -x"
1540 FFLDFLAGS="-Wl,-dynamic,-search_paths_first"
1541 SLIBSUF=".dylib"
1542 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
1543 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
1544 FFSERVERLDFLAGS=-Wl,-bind_at_load
1545 objformat="macho"
1546 enabled x86_64 && objformat="macho64"
1548 mingw32*)
1549 target_os=mingw32
1550 LIBTARGET=i386
1551 if enabled x86_64; then
1552 disable need_memalign
1553 LIBTARGET=x64
1555 shlibdir_default="$bindir_default"
1556 VHOOKSHFLAGS='-shared -L$(BUILD_ROOT)/libavformat -L$(BUILD_ROOT)/libavcodec -L$(BUILD_ROOT)/libavutil'
1557 VHOOKLIBS='-lavformat$(BUILDSUF) -lavcodec$(BUILDSUF) -lavutil$(BUILDSUF) $(EXTRALIBS)'
1558 if enabled swscale; then
1559 VHOOKSHFLAGS="$VHOOKSHFLAGS -L\$(BUILD_ROOT)/libswscale"
1560 VHOOKLIBS="$VHOOKLIBS -lswscale\$(BUILDSUF)"
1562 disable ffserver
1563 SLIBPREF=""
1564 SLIBSUF=".dll"
1565 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1566 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1567 SLIB_EXTRA_CMD='-lib /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)'
1568 SLIB_INSTALL_EXTRA_CMD='-install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"; \
1569 install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)"'
1570 SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"'
1571 SHFLAGS='-shared -Wl,--output-def,$$(@:$(SLIBSUF)=.def) -Wl,--enable-runtime-pseudo-reloc -Wl,--enable-auto-image-base'
1572 objformat="win32"
1573 enable dos_paths
1574 if ! enabled x86_64; then
1575 check_cpp_condition _mingw.h "(__MINGW32_MAJOR_VERSION > 3) || (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
1576 die "ERROR: MinGW runtime version must be >= 3.15."
1577 enabled_any avisynth vfwcap_demuxer &&
1578 { check_cpp_condition w32api.h "(__W32API_MAJOR_VERSION > 3) || (__W32API_MAJOR_VERSION == 3 && __W32API_MINOR_VERSION >= 13)" ||
1579 die "ERROR: avisynth and vfwcap_demuxer require w32api version 3.13 or later."; }
1582 cygwin*)
1583 target_os=cygwin
1584 shlibdir_default="$bindir_default"
1585 VHOOKSHFLAGS='-shared -L$(BUILD_ROOT)/libavformat -L$(BUILD_ROOT)/libavcodec -L$(BUILD_ROOT)/libavutil'
1586 VHOOKLIBS='-lavformat$(BUILDSUF) -lavcodec$(BUILDSUF) -lavutil$(BUILDSUF) $(EXTRALIBS)'
1587 if enabled swscale; then
1588 VHOOKSHFLAGS="$VHOOKSHFLAGS -L\$(BUILD_ROOT)/libswscale"
1589 VHOOKLIBS="$VHOOKLIBS -lswscale\$(BUILDSUF)"
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 vhook
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 disable vhook
1635 enable dos_paths
1637 interix)
1638 disable vhook
1642 die "Unknown OS '$target_os'."
1644 esac
1646 set_default $PATHS_LIST
1648 add_extralibs $osextralibs
1650 # Combine FFLDFLAGS and the LDFLAGS environment variable.
1651 LDFLAGS="$FFLDFLAGS $LDFLAGS"
1653 # we need to build at least one lib type
1654 if ! enabled_any static shared; then
1655 cat <<EOF
1656 At least one library type must be built.
1657 Specify --enable-static to build the static libraries or --enable-shared to
1658 build the shared libraries as well. To only build the shared libraries specify
1659 --disable-static in addition to --enable-shared.
1661 exit 1;
1664 disabled static && LIBNAME=""
1666 if enabled_any libfaad libfaadbin ; then
1667 if check_header faad.h; then
1668 check_cc <<EOF
1669 #include <faad.h>
1670 #ifndef FAAD2_VERSION
1671 ok faad1
1672 #endif
1673 int main(void) { return 0; }
1675 test $? = 0 && enable libfaad2
1676 else
1677 die "FAAD test failed."
1682 if ! enabled gpl; then
1683 die_gpl_disabled(){
1684 name=$1
1685 shift
1686 enabled_any $@ && die "$name is under GPL and --enable-gpl is not specified."
1688 die_gpl_disabled "The Postprocessing code" postproc
1689 die_gpl_disabled "libx264" libx264
1690 die_gpl_disabled "libxvidcore" libxvid
1691 die_gpl_disabled "FAAD2" libfaad2
1692 die_gpl_disabled "The X11 grabber" x11grab
1693 die_gpl_disabled "The software scaler" swscale
1696 if ! enabled nonfree && enabled_any libamr_nb libamr_wb; then
1697 die "libamr is nonfree and --enable-nonfree is not specified."
1700 check_deps $ARCH_EXT_LIST
1702 test -z "$need_memalign" && need_memalign="$mmx"
1704 #Darwin CC versions
1705 if test $target_os = darwin; then
1706 if enabled xlc; then
1707 add_cflags -qpdf2 -qlanglvl=extc99 -qmaxmem=-1 -qarch=auto -qtune=auto
1708 else
1709 add_cflags -pipe
1710 check_cflags -force_cpusubtype_ALL
1711 check_cflags -Wno-sign-compare
1712 enabled shared || check_cflags -mdynamic-no-pic
1716 disabled optimizations || check_cflags -fomit-frame-pointer
1718 # Add processor-specific flags
1719 if test $cpu != "generic"; then
1720 warn_altivec(){
1721 $1 altivec && echo "WARNING: Tuning for $2 but AltiVec $1.";
1723 case $cpu in
1724 601|ppc601|PowerPC601)
1725 add_cflags -mcpu=601
1726 warn_altivec enabled PPC601
1728 603*|ppc603*|PowerPC603*)
1729 add_cflags -mcpu=603
1730 warn_altivec enabled PPC603
1732 604*|ppc604*|PowerPC604*)
1733 add_cflags -mcpu=604
1734 warn_altivec enabled PPC604
1736 G3|g3|75*|ppc75*|PowerPC75*)
1737 add_cflags -mcpu=750 -mpowerpc-gfxopt
1738 warn_altivec enabled PPC75x
1740 G4|g4|745*|ppc745*|PowerPC745*)
1741 add_cflags -mcpu=7450 -mpowerpc-gfxopt
1742 warn_altivec disabled PPC745x
1744 74*|ppc74*|PowerPC74*)
1745 add_cflags -mcpu=7400 -mpowerpc-gfxopt
1746 warn_altivec disabled PPC74xx
1748 G5|g5|970|ppc970|PowerPC970|power4*|Power4*)
1749 add_cflags -mcpu=970 -mpowerpc-gfxopt -mpowerpc64
1750 warn_altivec disabled PPC970
1751 enable ppc64
1753 Cell|CELL|cell)
1754 add_cflags -mcpu=cell
1755 warn_altivec disabled Cell
1756 enable ppc64
1758 # targets that do NOT support conditional mov (cmov)
1759 i[345]86|pentium|pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
1760 add_cflags -march=$cpu
1761 disable cmov
1763 # targets that do support conditional mov (cmov)
1764 i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2)
1765 add_cflags -march=$cpu
1766 enable cmov
1767 enable fast_cmov
1769 # targets that do support conditional mov but on which it's slow
1770 pentium4|pentium4m|prescott|nocona)
1771 add_cflags -march=$cpu
1772 enable cmov
1773 disable fast_cmov
1775 sparc64)
1776 add_cflags -mcpu=v9
1778 arm11*|cortex*)
1779 add_cflags -mcpu=$cpu
1780 enable fast_unaligned
1782 armv*)
1783 add_cflags -march=$cpu
1785 arm*)
1786 add_cflags -mcpu=$cpu
1788 ev4|ev45|ev5|ev56|pca56|ev6|ev67)
1789 enabled ccc && add_cflags -arch $cpu || add_cflags -mcpu=$cpu
1792 echo "WARNING: Unknown CPU \"$cpu\", ignored."
1794 esac
1797 check_cc <<EOF || die "Symbol mangling check failed."
1798 int ff_extern;
1800 sym=$($nm -P -g $TMPO | grep ff_extern)
1801 extern_prefix=${sym%%ff_extern*}
1803 check_asm inline_asm '""'
1805 if enabled x86; then
1806 # check whether EBP is available on x86
1807 # As 'i' is stored on the stack, this program will crash
1808 # if the base pointer is used to access it because the
1809 # base pointer is cleared in the inline assembly code.
1810 check_exec_crash <<EOF && enable ebp_available
1811 volatile int i=0;
1812 __asm__ volatile (
1813 "xorl %%ebp, %%ebp"
1814 ::: "%ebp");
1815 return i;
1818 # check wether EBX is available on x86
1819 check_asm ebx_available '"":::"%ebx"'
1821 # check whether more than 10 operands are supported
1822 check_cc <<EOF && enable ten_operands
1823 int main(void) {
1824 int x=0;
1825 __asm__ volatile(
1827 :"+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x)
1829 return 0;
1833 # check whether binutils is new enough to compile SSSE3/MMX2
1834 enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
1835 enabled mmx2 && check_asm mmx2 '"movss %xmm0, %xmm0"'
1837 check_asm bswap '"bswap %%eax" ::: "%eax"'
1839 YASMFLAGS="-f $objformat -DARCH_$(toupper $subarch)"
1840 enabled x86_64 && append YASMFLAGS "-m amd64"
1841 enabled_all x86_64 shared && append YASMFLAGS "-DPIC"
1842 case "$objformat" in
1843 elf) enabled debug && append YASMFLAGS "-g dwarf2" ;;
1844 macho64) append YASMFLAGS "-DPIC -DPREFIX" ;;
1845 *) append YASMFLAGS "-DPREFIX" ;;
1846 esac
1847 disabled yasm || { check_yasm "pabsw xmm0, xmm0" && enable yasm; }
1850 # check for assembler specific support
1852 enabled ppc && check_asm dcbzl '"dcbzl 0, 1"'
1853 enabled ppc && check_asm ppc4xx '"maclhw r10, r11, r12"'
1855 # check for SIMD availability
1857 # AltiVec flags: The FSF version of GCC differs from the Apple version
1858 if enabled altivec; then
1859 check_cflags -maltivec -mabi=altivec &&
1860 { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
1861 check_cflags -faltivec
1863 # check if our compiler supports Motorola AltiVec C API
1864 check_cc <<EOF || disable altivec
1865 $inc_altivec_h
1866 int main(void) {
1867 vector signed int v1, v2, v3;
1868 v1 = vec_add(v2,v3);
1869 return 0;
1873 # check if our compiler supports braces for vector declarations
1874 check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
1875 $inc_altivec_h
1876 int main (void) { (vector int) {1}; return 0; }
1880 # We have to check if pld is a nop and disable it.
1881 enabled arm && check_asm pld '"pld [r0]"'
1882 enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
1883 enabled armv6 && check_asm armv6 '"sadd16 r0, r0, r0"'
1884 enabled armv6t2 && check_asm armv6t2 '"movt r0, #0"'
1885 enabled armvfp && check_asm armvfp '"fadds s0, s0, s0"'
1886 enabled iwmmxt && check_asm iwmmxt '"wunpckelub wr6, wr4"'
1887 enabled mmi && check_asm mmi '"lq $2, 0($2)"'
1888 enabled neon && check_asm neon '"vadd.i16 q0, q0, q0"'
1889 enabled vis && check_asm vis '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc
1891 enabled vis && add_cflags -mcpu=ultrasparc -mtune=ultrasparc
1893 # ---
1894 # big/little-endian test
1895 check_cc <<EOF || die "endian test failed"
1896 unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
1898 od -A n -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
1900 # ---
1901 # check availability of some header files
1903 if check_func dlopen; then
1904 ldl=
1905 elif check_func dlopen -ldl; then
1906 ldl=-ldl
1909 # Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
1910 check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
1912 check_func fork
1913 check_func gethrtime
1914 check_func getrusage
1915 check_func inet_aton $network_extralibs
1916 check_func memalign
1917 check_func mkstemp
1918 check_func posix_memalign
1919 check_func_headers io.h setmode
1920 check_func_headers windows.h GetProcessTimes
1922 check_header conio.h
1923 check_header dlfcn.h
1924 check_header malloc.h
1925 check_header poll.h
1926 check_header sys/mman.h
1927 check_header sys/resource.h
1928 check_header sys/select.h
1929 check_header termios.h
1930 check_header vdpau/vdpau.h
1931 check_header vdpau/vdpau_x11.h
1932 check_header X11/extensions/XvMClib.h
1934 if ! enabled_any memalign memalign_hack posix_memalign && enabled need_memalign ; then
1935 die "Error, no aligned memory allocator but SSE enabled, disable it or use --enable-memalign-hack."
1938 disabled zlib || check_lib zlib.h zlibVersion -lz || disable zlib
1939 disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
1941 # check for some common methods of building with pthread support
1942 # do this before the optional library checks as some of them require pthreads
1943 if enabled pthreads; then
1944 if check_func pthread_create; then
1946 elif check_func pthread_create -pthread; then
1947 add_cflags -pthread
1948 add_extralibs -pthread
1949 elif check_func pthread_create -pthreads; then
1950 add_cflags -pthreads
1951 add_extralibs -pthreads
1952 elif check_func pthread_create -lpthreadGC2; then
1953 add_extralibs -lpthreadGC2
1954 elif ! check_lib pthread.h pthread_create -lpthread; then
1955 die "ERROR: can't find pthreads library"
1959 for thread in $THREADS_LIST; do
1960 if enabled $thread; then
1961 test -n "$thread_type" &&
1962 die "ERROR: Only one thread type must be selected." ||
1963 thread_type="$thread"
1965 done
1967 check_lib math.h sin -lm
1969 # test for C99 functions in math.h
1970 for func in llrint lrint lrintf round roundf truncf; do
1971 check_exec <<EOF && enable $func || disable $func
1972 #include <math.h>
1973 int main(void) { return ($func(3.999f) > 0)?0:1; }
1975 done
1977 # these are off by default, so fail if requested and not available
1978 enabled avisynth && require2 vfw32 "windows.h vfw.h" AVIFileInit -lvfw32
1979 enabled libamr_nb && require libamrnb amrnb/interf_dec.h Speech_Decode_Frame_init -lamrnb -lm
1980 enabled libamr_wb && require libamrwb amrwb/dec_if.h D_IF_init -lamrwb -lm
1981 enabled libdirac && add_cflags $(pkg-config --cflags dirac) &&
1982 require libdirac libdirac_decoder/dirac_parser.h dirac_decoder_init -ldirac_decoder &&
1983 require libdirac libdirac_encoder/dirac_encoder.h dirac_encoder_init -ldirac_encoder
1984 enabled libfaac && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
1985 enabled libfaad && require2 libfaad faad.h faacDecOpen -lfaad
1986 enabled libgsm && require libgsm gsm.h gsm_create -lgsm
1987 enabled libmp3lame && require libmp3lame lame/lame.h lame_init -lmp3lame -lm
1988 enabled libnut && require libnut libnut.h nut_demuxer_init -lnut
1989 enabled libopenjpeg && require libopenjpeg openjpeg.h opj_version -lopenjpeg
1990 enabled libschroedinger && add_cflags $(pkg-config --cflags schroedinger-1.0) &&
1991 require libschroedinger schroedinger/schro.h schro_init $(pkg-config --libs schroedinger-1.0)
1992 enabled libspeex && require libspeex speex/speex.h speex_decoder_init -lspeex
1993 enabled libtheora && require libtheora theora/theora.h theora_info_init -ltheora -logg
1994 enabled libvorbis && require libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
1995 enabled libx264 && require libx264 x264.h x264_encoder_open -lx264 -lm &&
1996 { check_cpp_condition x264.h "X264_BUILD >= 65" ||
1997 die "ERROR: libx264 version must be >= 0.65."; }
1998 enabled libxvid && require libxvid xvid.h xvid_global -lxvidcore
1999 enabled mlib && require mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
2001 # libdc1394 check
2002 if enabled libdc1394; then
2003 { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
2004 enable libdc1394_2; } ||
2005 { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
2006 enable libdc1394_1; } ||
2007 die "ERROR: No version of libdc1394 found "
2011 _restrict=
2012 for restrict_keyword in restrict __restrict__ __restrict; do
2013 check_cc <<EOF && _restrict=$restrict_keyword && break
2014 void foo(char * $restrict_keyword p);
2016 done
2018 test "$vhook" = "default" && vhook="$dlopen"
2020 if test "$target_os" = cygwin -o "$target_os" = mingw32 && enabled_all static vhook ; then
2021 disable vhook
2022 echo
2023 echo "At the moment vhooks don't work on Cygwin or MinGW static builds."
2024 echo "Patches welcome."
2025 echo
2028 if enabled vhook; then
2029 check_ldflags -rdynamic
2030 check_ldflags -export-dynamic
2033 check_foo_config imlib2 imlib2 Imlib2.h imlib_load_font
2034 check_foo_config freetype2 freetype ft2build.h FT_Init_FreeType
2036 ##########################################
2037 # SDL check
2039 disable sdl_too_old
2040 disable sdl
2041 SDL_CONFIG="${cross_prefix}sdl-config"
2042 if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
2043 sdl_cflags=`"${SDL_CONFIG}" --cflags`
2044 temp_cflags $sdl_cflags
2045 temp_extralibs `"${SDL_CONFIG}" --libs`
2046 if check_lib2 SDL.h SDL_Init; then
2047 _sdlversion=`"${SDL_CONFIG}" --version | sed 's/[^0-9]//g'`
2048 if test "$_sdlversion" -lt 121 ; then
2049 enable sdl_too_old
2050 else
2051 enable sdl
2052 check_cc $sdl_cflags <<EOF && enable sdl_video_size
2053 #include <SDL.h>
2054 int main(int argc, char **argv){
2055 const SDL_VideoInfo *vi = SDL_GetVideoInfo();
2056 int w = vi->current_w;
2057 return 0;
2062 restore_flags
2065 texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
2067 ##########################################
2068 # Network check
2070 if enabled network; then
2071 check_type "sys/types.h sys/socket.h" socklen_t
2072 # Prefer arpa/inet.h over winsock2
2073 if check_header arpa/inet.h ; then
2074 check_func closesocket
2075 elif check_header winsock2.h ; then
2076 network_extralibs="-lws2_32"
2077 check_type ws2tcpip.h socklen_t
2078 check_func_headers winsock2.h closesocket
2082 ##########################################
2083 # IPv6 check
2085 enabled network && enabled ipv6 && check_ld <<EOF && enable ipv6 || disable ipv6
2086 #include <sys/types.h>
2087 #include <sys/socket.h>
2088 #include <netinet/in.h>
2089 #include <netdb.h>
2090 int main(void) {
2091 struct sockaddr_storage saddr;
2092 struct ipv6_mreq mreq6;
2093 getaddrinfo(0,0,0,0);
2094 getnameinfo(0,0,0,0,0,0,0);
2095 IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
2099 check_header linux/videodev.h
2100 check_header linux/videodev2.h
2101 check_header sys/videoio.h
2103 check_func_headers "windows.h vfw.h" capCreateCaptureWindow -lvfw32
2105 # check for ioctl_meteor.h, ioctl_bt848.h and alternatives
2106 { check_header dev/bktr/ioctl_meteor.h &&
2107 check_header dev/bktr/ioctl_bt848.h; } ||
2108 { check_header machine/ioctl_meteor.h &&
2109 check_header machine/ioctl_bt848.h; } ||
2110 { check_header dev/video/meteor/ioctl_meteor.h &&
2111 check_header dev/video/bktr/ioctl_bt848.h; } ||
2112 check_header dev/ic/bt8xx.h
2114 check_header sys/soundcard.h
2115 check_header soundcard.h
2117 check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
2119 # deal with the X11 frame grabber
2120 enabled x11grab &&
2121 check_header X11/Xlib.h &&
2122 check_header X11/extensions/XShm.h &&
2123 check_func XOpenDisplay -lX11 &&
2124 check_func XShmCreateImage -lX11 -lXext
2126 enabled debug && add_cflags -g"$debuglevel"
2128 # add some useful compiler flags if supported
2129 check_cflags -Wdeclaration-after-statement
2130 check_cflags -Wall
2131 check_cflags -Wno-switch
2132 check_cflags -Wdisabled-optimization
2133 check_cflags -Wpointer-arith
2134 check_cflags -Wredundant-decls
2135 check_cflags -Wno-pointer-sign
2136 check_cflags -Wcast-qual
2137 check_cflags -Wwrite-strings
2138 check_cflags -Wtype-limits
2139 check_cflags -Wundef
2140 enabled extra_warnings && check_cflags -Winline
2142 # add some linker flags
2143 check_ldflags -Wl,--warn-common
2144 check_ldflags -Wl,--as-needed
2145 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'
2146 check_ldflags -Wl,-Bsymbolic
2148 if enabled small; then
2149 check_cflags -Os # not all compilers support -Os
2150 optimizations="small"
2151 elif enabled optimizations; then
2152 if enabled xlc; then
2153 add_cflags -O5
2154 add_ldflags -O5
2155 elif enabled ccc; then
2156 add_cflags -fast
2157 else
2158 add_cflags -O3
2161 check_cflags -fno-math-errno
2162 check_cflags -fno-signed-zeros
2164 # add some flags for Intel C Compiler
2165 if enabled icc; then
2166 # Just warnings, no remarks
2167 check_cflags -w1
2168 # -wd: Disable following warnings
2169 # 144, 167, 556: -Wno-pointer-sign
2170 # 10006: ignoring unknown option -fno-signed-zeros
2171 # 10156: ignoring option '-W'; no argument required
2172 check_cflags -wd144,167,556,10006,10156
2173 # 11030: Warning unknown option --as-needed
2174 # 10156: ignoring option '-export'; no argument required
2175 check_ldflags -wd10156,11030
2176 # Allow to compile with optimizations
2177 check_ldflags -march=$cpu
2178 elif enabled ccc; then
2179 # disable some annoying warnings
2180 add_cflags -msg_disable cvtu32to64
2181 add_cflags -msg_disable embedcomment
2182 add_cflags -msg_disable needconstext
2183 add_cflags -msg_disable nomainieee
2184 add_cflags -msg_disable ptrmismatch1
2185 add_cflags -msg_disable unreachcode
2188 # PIC flags for shared library objects where they are needed
2189 if enabled shared; then
2190 # LIBOBJFLAGS may have already been set in the OS configuration
2191 if test -z "$LIBOBJFLAGS" ; then
2192 case "${subarch-$arch}" in
2193 x86_64|ia64|alpha|sparc*|power*|parisc*|mips*) LIBOBJFLAGS='$(PIC)' ;;
2194 esac
2198 if enabled gprof; then
2199 add_cflags -p
2200 add_ldflags -p
2203 VHOOKCFLAGS="-fPIC"
2205 # Find out if the .align argument is a power of two or not.
2206 check_asm asmalign_pot '".align 3"'
2208 enabled_any $DECODER_LIST && enable decoders
2209 enabled_any $ENCODER_LIST && enable encoders
2210 enabled_any $BSF_LIST && enable bsfs
2211 enabled_any $DEMUXER_LIST && enable demuxers
2212 enabled_any $MUXER_LIST && enable muxers
2213 enabled_any $FILTER_LIST && enable filters
2214 enabled_any $INDEV_LIST && enable demuxers
2215 enabled_any $OUTDEV_LIST && enable muxers
2216 enabled_any $PROTOCOL_LIST && enable protocols
2218 enabled_any $THREADS_LIST && enable threads
2220 check_deps $CONFIG_LIST \
2221 $CONFIG_EXTRA \
2222 $HAVE_LIST \
2223 $DECODER_LIST \
2224 $ENCODER_LIST \
2225 $PARSER_LIST \
2226 $BSF_LIST \
2227 $DEMUXER_LIST \
2228 $MUXER_LIST \
2229 $FILTER_LIST \
2230 $INDEV_LIST \
2231 $OUTDEV_LIST \
2232 $PROTOCOL_LIST \
2234 echo "install prefix $prefix"
2235 echo "source path $source_path"
2236 echo "C compiler $cc"
2237 echo ".align is power-of-two $asmalign_pot"
2238 echo "ARCH $arch ($cpu)"
2239 if test "$build_suffix" != ""; then
2240 echo "build suffix $build_suffix"
2242 if test "$extra_version" != ""; then
2243 echo "version string suffix $extra_version"
2245 echo "big-endian ${bigendian-no}"
2246 if enabled x86; then
2247 echo "yasm ${yasm-no}"
2248 echo "MMX enabled ${mmx-no}"
2249 echo "MMX2 enabled ${mmx2-no}"
2250 echo "3DNow! enabled ${amd3dnow-no}"
2251 echo "3DNow! extended enabled ${amd3dnowext-no}"
2252 echo "SSE enabled ${sse-no}"
2253 echo "SSSE3 enabled ${ssse3-no}"
2254 echo "CMOV enabled ${cmov-no}"
2255 echo "CMOV is fast ${fast_cmov-no}"
2256 echo "EBX available ${ebx_available-no}"
2257 echo "EBP available ${ebp_available-no}"
2258 echo "10 operands supported ${ten_operands-no}"
2260 if enabled arm; then
2261 echo "ARMv5TE enabled ${armv5te-no}"
2262 echo "ARMv6 enabled ${armv6-no}"
2263 echo "ARMv6T2 enabled ${armv6t2-no}"
2264 echo "ARM VFP enabled ${armvfp-no}"
2265 echo "IWMMXT enabled ${iwmmxt-no}"
2266 echo "NEON enabled ${neon-no}"
2268 if enabled mips; then
2269 echo "MMI enabled ${mmi-no}"
2271 if enabled ppc; then
2272 echo "AltiVec enabled ${altivec-no}"
2273 echo "PPC 4xx optimizations ${ppc4xx-no}"
2274 echo "dcbzl available ${dcbzl-no}"
2275 echo "performance report ${powerpc_perf-no}"
2277 if enabled sparc; then
2278 echo "VIS enabled ${vis-no}"
2280 echo "gprof enabled ${gprof-no}"
2281 echo "debug symbols ${debug-no}"
2282 echo "strip symbols ${stripping-no}"
2283 echo "optimizations ${optimizations-no}"
2284 echo "static ${static-no}"
2285 echo "shared ${shared-no}"
2286 echo "postprocessing support ${postproc-no}"
2287 echo "software scaler enabled ${swscale-no}"
2288 echo "new filter support ${avfilter-no}"
2289 echo "filters using lavformat ${avfilter_lavf-no}"
2290 echo "video hooking ${vhook-no}"
2291 if enabled vhook; then
2292 echo "Imlib2 support ${imlib2-no}"
2293 echo "FreeType support ${freetype2-no}"
2295 echo "network support ${network-no}"
2296 if enabled network; then
2297 echo "IPv6 support ${ipv6-no}"
2299 echo "threading support ${thread_type-no}"
2300 echo "SDL support ${sdl-no}"
2301 if enabled sdl_too_old; then
2302 echo "-> Your SDL version is too old - please upgrade to have FFplay/SDL support."
2304 echo "Sun medialib support ${mlib-no}"
2305 echo "AVISynth enabled ${avisynth-no}"
2306 echo "libamr-nb support ${libamr_nb-no}"
2307 echo "libamr-wb support ${libamr_wb-no}"
2308 echo "libdc1394 support ${libdc1394-no}"
2309 echo "libdirac enabled ${libdirac-no}"
2310 echo "libfaac enabled ${libfaac-no}"
2311 echo "libfaad enabled ${libfaad-no}"
2312 echo "libfaad dlopened ${libfaadbin-no}"
2313 echo "libgsm enabled ${libgsm-no}"
2314 echo "libmp3lame enabled ${libmp3lame-no}"
2315 echo "libnut enabled ${libnut-no}"
2316 echo "libopenjpeg enabled ${libopenjpeg-no}"
2317 echo "libschroedinger enabled ${libschroedinger-no}"
2318 echo "libspeex enabled ${libspeex-no}"
2319 echo "libtheora enabled ${libtheora-no}"
2320 echo "libvorbis enabled ${libvorbis-no}"
2321 echo "libx264 enabled ${libx264-no}"
2322 echo "libxvid enabled ${libxvid-no}"
2323 echo "vdpau enabled ${vdpau-no}"
2324 echo "zlib enabled ${zlib-no}"
2325 echo "bzlib enabled ${bzlib-no}"
2326 echo
2328 for type in decoder encoder parser demuxer muxer protocol filter bsf indev outdev; do
2329 echo "Enabled ${type}s:"
2330 eval list=\$$(toupper $type)_LIST
2331 for part in $list; do
2332 enabled $part && echo ${part%_*}
2333 done | sort | pr -3 -t
2334 echo
2335 done
2337 license="LGPL"
2338 if enabled nonfree; then
2339 license="unredistributable"
2340 elif enabled gpl; then
2341 license="GPL"
2344 echo "License: $license"
2346 echo "Creating config.mak and config.h..."
2348 echo "# Automatically generated by configure - do not modify!" > config.mak
2349 echo "/* Automatically generated by configure - do not modify! */" > $TMPH
2350 echo "#ifndef FFMPEG_CONFIG_H" >> $TMPH
2351 echo "#define FFMPEG_CONFIG_H" >> $TMPH
2352 echo "#define FFMPEG_CONFIGURATION \"$FFMPEG_CONFIGURATION\"" >> $TMPH
2353 echo "#define FFMPEG_DATADIR \"$(eval c_escape $datadir)\"" >> $TMPH
2355 echo "FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION" >> config.mak
2356 echo "prefix=$prefix" >> config.mak
2357 echo "LIBDIR=\$(DESTDIR)$libdir" >> config.mak
2358 echo "SHLIBDIR=\$(DESTDIR)$shlibdir" >> config.mak
2359 echo "INCDIR=\$(DESTDIR)$incdir" >> config.mak
2360 echo "BINDIR=\$(DESTDIR)$bindir" >> config.mak
2361 echo "DATADIR=\$(DESTDIR)$datadir" >> config.mak
2362 echo "MANDIR=\$(DESTDIR)$mandir" >> config.mak
2363 echo "CC=$cc" >> config.mak
2364 echo "YASM=$yasmexe" >> config.mak
2365 echo "AR=$ar" >> config.mak
2366 echo "RANLIB=$ranlib" >> config.mak
2367 echo "LN_S=$ln_s" >> config.mak
2368 enabled stripping &&
2369 echo "STRIP=$strip" >> config.mak ||
2370 echo "STRIP=echo ignoring strip" >> config.mak
2372 echo "OPTFLAGS=$CFLAGS" >> config.mak
2373 echo "VHOOKCFLAGS=$VHOOKCFLAGS" >> config.mak
2374 echo "LDFLAGS=$LDFLAGS" >> config.mak
2375 echo "FFSERVERLDFLAGS=$FFSERVERLDFLAGS" >> config.mak
2376 echo "SHFLAGS=$SHFLAGS" >> config.mak
2377 echo "YASMFLAGS=$YASMFLAGS" >> config.mak
2378 echo "VHOOKSHFLAGS=$VHOOKSHFLAGS" >> config.mak
2379 echo "VHOOKLIBS=$VHOOKLIBS" >> config.mak
2380 echo "LIBOBJFLAGS=$LIBOBJFLAGS" >> config.mak
2381 echo "BUILD_STATIC=$static" >> config.mak
2382 echo "BUILDSUF=$build_suffix" >> config.mak
2383 echo "FULLNAME=$FULLNAME" >> config.mak
2384 echo "LIBPREF=$LIBPREF" >> config.mak
2385 echo "LIBSUF=$LIBSUF" >> config.mak
2386 echo "LIBNAME=$LIBNAME" >> config.mak
2387 echo "SLIBPREF=$SLIBPREF" >> config.mak
2388 echo "SLIBSUF=$SLIBSUF" >> config.mak
2389 echo "EXESUF=$EXESUF" >> config.mak
2390 echo "EXTRA_VERSION=$extra_version" >> config.mak
2391 echo "DEPEND_CMD=$DEPEND_CMD" >> config.mak
2392 echo "HOSTCC=$host_cc" >> config.mak
2393 echo "HOSTCFLAGS=$host_cflags" >> config.mak
2394 echo "HOSTLDFLAGS=$host_ldflags" >> config.mak
2395 echo "HOSTLIBS=$host_libs" >> config.mak
2396 echo "TARGET_EXEC=$target_exec" >> config.mak
2397 echo "TARGET_PATH=$target_path" >> config.mak
2399 if enabled bigendian; then
2400 echo "WORDS_BIGENDIAN=yes" >> config.mak
2401 echo "#define WORDS_BIGENDIAN 1" >> $TMPH
2404 if enabled sdl; then
2405 echo "SDL_LIBS=`"${SDL_CONFIG}" --libs`" >> config.mak
2406 echo "SDL_CFLAGS=`"${SDL_CONFIG}" --cflags`" >> config.mak
2408 if enabled texi2html; then
2409 echo "BUILD_DOC=yes" >> config.mak
2412 get_version(){
2413 name=$1
2414 file=$source_path/$2
2415 eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
2416 eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
2417 lcname=$(tolower $name)
2418 eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
2419 eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
2422 get_version LIBSWSCALE libswscale/swscale.h
2423 get_version LIBPOSTPROC libpostproc/postprocess.h
2424 get_version LIBAVCODEC libavcodec/avcodec.h
2425 get_version LIBAVDEVICE libavdevice/avdevice.h
2426 get_version LIBAVFORMAT libavformat/avformat.h
2427 get_version LIBAVUTIL libavutil/avutil.h
2428 get_version LIBAVFILTER libavfilter/avfilter.h
2430 if enabled shared; then
2431 echo "BUILD_SHARED=yes" >> config.mak
2432 echo "PIC=-fPIC -DPIC" >> config.mak
2433 echo "LIBTARGET=${LIBTARGET}" >> config.mak
2434 echo "SLIBNAME=${SLIBNAME}" >> config.mak
2435 echo "SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}" >> config.mak
2436 echo "SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}" >> config.mak
2437 echo "SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}" >> config.mak
2438 echo "SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}" >> config.mak
2439 echo "SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}" >> config.mak
2440 echo "SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}" >> config.mak
2442 echo "LIB_INSTALL_EXTRA_CMD=${LIB_INSTALL_EXTRA_CMD}" >> config.mak
2443 echo "EXTRALIBS=$extralibs" >> config.mak
2445 echo "ARCH=$arch" >> config.mak
2447 print_config ARCH_ $TMPH config.mak $ARCH_LIST
2448 print_config HAVE_ $TMPH config.mak $HAVE_LIST
2449 print_config CONFIG_ $TMPH config.mak $CONFIG_LIST \
2450 $CONFIG_EXTRA \
2451 $DECODER_LIST \
2452 $ENCODER_LIST \
2453 $PARSER_LIST \
2454 $BSF_LIST \
2455 $DEMUXER_LIST \
2456 $MUXER_LIST \
2457 $FILTER_LIST \
2458 $PROTOCOL_LIST \
2459 $INDEV_LIST \
2460 $OUTDEV_LIST \
2462 echo "#define restrict $_restrict" >> $TMPH
2464 if enabled small; then
2465 echo "#define av_always_inline" >> $TMPH
2468 echo "SRC_PATH=\"$source_path\"" >> config.mak
2469 echo "SRC_PATH_BARE=$source_path" >> config.mak
2470 echo "BUILD_ROOT=\"$PWD\"" >> config.mak
2472 # Apparently it's not possible to portably echo a backslash.
2473 enabled asmalign_pot &&
2474 printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH ||
2475 printf '#define ASMALIGN(ZEROBITS) ".align 1 << " #ZEROBITS "\\n\\t"\n' >> $TMPH
2477 echo "#define EXTERN_PREFIX \"${extern_prefix}\"" >> $TMPH
2479 echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
2481 # Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
2482 cmp -s $TMPH config.h &&
2483 echo "config.h is unchanged" ||
2484 mv -f $TMPH config.h
2486 rm -f $TMPC $TMPE $TMPH $TMPO $TMPS $TMPSH
2488 # build tree in object directory if source path is different from current one
2489 if enabled source_path_used; then
2490 DIRS="\
2491 doc \
2492 libavcodec \
2493 libavcodec/alpha \
2494 libavcodec/arm \
2495 libavcodec/bfin \
2496 libavcodec/mlib \
2497 libavcodec/ppc \
2498 libavcodec/sh4 \
2499 libavcodec/sparc \
2500 libavcodec/x86 \
2501 libavdevice \
2502 libavfilter \
2503 libavformat \
2504 libavutil \
2505 libpostproc \
2506 libswscale \
2507 tests \
2508 tools \
2509 vhook \
2511 FILES="\
2512 Makefile \
2513 common.mak \
2514 subdir.mak \
2515 doc/texi2pod.pl \
2516 libavcodec/Makefile \
2517 libavdevice/Makefile \
2518 libavfilter/Makefile \
2519 libavformat/Makefile \
2520 libavutil/Makefile \
2521 libpostproc/Makefile \
2522 libswscale/Makefile \
2524 for dir in $DIRS ; do
2525 mkdir -p $dir
2526 done
2527 for f in $FILES ; do
2528 $ln_s "$source_path/$f" $f
2529 done
2533 # build pkg-config files
2535 pkgconfig_generate(){
2536 name=$1
2537 shortname=${name#lib}${build_suffix}
2538 comment=$2
2539 version=$3
2540 libs=$4
2541 requires=$5
2542 cat <<EOF > $name/$name.pc
2543 prefix=$prefix
2544 exec_prefix=\${prefix}
2545 libdir=$libdir
2546 includedir=$incdir
2548 Name: $name
2549 Description: $comment
2550 Version: $version
2551 Requires: $(disabled shared && echo $requires)
2552 Requires.private: $(enabled shared && echo $requires)
2553 Conflicts:
2554 Libs: -L\${libdir} -l${shortname} $(disabled shared && echo $libs)
2555 Libs.private: $(enabled shared && echo $libs)
2556 Cflags: -I\${includedir}
2558 cat <<EOF > $name/$name-uninstalled.pc
2559 prefix=
2560 exec_prefix=
2561 libdir=\${pcfiledir}
2562 includedir=${source_path}
2564 Name: $name
2565 Description: $comment
2566 Version: $version
2567 Requires: $requires
2568 Conflicts:
2569 Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
2570 Cflags: -I\${includedir}
2574 pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
2575 pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
2576 pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
2577 pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "libavformat = $LIBAVFORMAT_VERSION"
2578 enabled avfilter &&
2579 pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
2580 enabled postproc &&
2581 pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
2582 if enabled swscale; then
2583 pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"
2584 else
2585 pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavcodec = $LIBAVCODEC_VERSION"
2586 apply libswscale/libswscale.pc sed s/^Libs:.*$/Libs:/