Fix the Transport: line in the SETUP request so that it works with WMS
[ffmpeg-lucabe.git] / configure
blob7879dce13ca2be9afc1a8076e37c86233057ff56
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 " --enable-xvmc enable XvMC support [no]"
95 echo " --disable-network disable network support [no]"
96 echo " --disable-ipv6 disable IPv6 support [no]"
97 echo " --disable-mpegaudio-hp faster (but less accurate) MPEG audio decoding [no]"
98 echo " --enable-gray enable full grayscale support (slower color)"
99 echo " --disable-fastdiv disable table-based division"
100 echo " --enable-small optimize for size instead of speed"
101 echo " --disable-aandct disable AAN DCT code"
102 echo " --disable-fft disable FFT code"
103 echo " --disable-golomb disable Golomb code"
104 echo " --disable-mdct disable MDCT code"
105 echo " --disable-rdft disable RDFT code"
106 echo " --enable-hardcoded-tables use hardcoded tables instead of runtime generation"
107 echo " --enable-memalign-hack emulate memalign, interferes with memory debuggers"
108 echo " --enable-beos-netserver enable BeOS netserver"
109 echo " --disable-encoder=NAME disable encoder NAME"
110 echo " --enable-encoder=NAME enable encoder NAME"
111 echo " --disable-encoders disable all encoders"
112 echo " --disable-decoder=NAME disable decoder NAME"
113 echo " --enable-decoder=NAME enable decoder NAME"
114 echo " --disable-decoders disable all decoders"
115 echo " --disable-muxer=NAME disable muxer NAME"
116 echo " --enable-muxer=NAME enable muxer NAME"
117 echo " --disable-muxers disable all muxers"
118 echo " --disable-demuxer=NAME disable demuxer NAME"
119 echo " --enable-demuxer=NAME enable demuxer NAME"
120 echo " --disable-demuxers disable all demuxers"
121 echo " --enable-parser=NAME enable parser NAME"
122 echo " --disable-parser=NAME disable parser NAME"
123 echo " --disable-parsers disable all parsers"
124 echo " --enable-bsf=NAME enable bitstream filter NAME"
125 echo " --disable-bsf=NAME disable bitstream filter NAME"
126 echo " --disable-bsfs disable all bitstream filters"
127 echo " --enable-protocol=NAME enable protocol NAME"
128 echo " --disable-protocol=NAME disable protocol NAME"
129 echo " --disable-protocols disable all protocols"
130 echo " --disable-indevs disable input devices"
131 echo " --disable-outdevs disable output devices"
132 echo " --disable-devices disable all devices"
133 echo " --enable-filter=NAME enable filter NAME"
134 echo " --disable-filter=NAME disable filter NAME"
135 echo " --disable-filters disable all filters"
136 echo " --list-decoders show all available decoders"
137 echo " --list-encoders show all available encoders"
138 echo " --list-muxers show all available muxers"
139 echo " --list-demuxers show all available demuxers"
140 echo " --list-parsers show all available parsers"
141 echo " --list-protocols show all available protocols"
142 echo " --list-bsfs show all available bitstream filters"
143 echo " --list-indevs show all available input devices"
144 echo " --list-outdevs show all available output devices"
145 echo " --list-filters show all available filters"
146 echo
147 echo "External library support:"
148 echo " --enable-avisynth enable reading of AVISynth script files [no]"
149 echo " --enable-bzlib enable bzlib [autodetect]"
150 echo " --enable-libamr-nb enable libamr-nb floating point audio codec [no]"
151 echo " --enable-libamr-wb enable libamr-wb floating point audio codec [no]"
152 echo " --enable-libdc1394 enable IIDC-1394 grabbing using libdc1394"
153 echo " and libraw1394 [no]"
154 echo " --enable-libdirac enable Dirac support via libdirac [no]"
155 echo " --enable-libfaac enable FAAC support via libfaac [no]"
156 echo " --enable-libfaad enable FAAD support via libfaad [no]"
157 echo " --enable-libfaadbin open libfaad.so.0 at runtime [no]"
158 echo " --enable-libgsm enable GSM support via libgsm [no]"
159 echo " --enable-libmp3lame enable MP3 encoding via libmp3lame [no]"
160 echo " --enable-libnut enable NUT (de)muxing via libnut,"
161 echo " native (de)muxer exists [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 " --target-os=OS compiler targets OS [$target_os]"
178 echo " --target-exec=CMD command to run executables on target"
179 echo " --target-path=DIR path to view of build directory on target"
180 echo " --nm=NM use nm tool"
181 echo " --cc=CC use C compiler CC [$cc_default]"
182 echo " --host-cc=HOSTCC use host C compiler HOSTCC"
183 echo " --host-cflags=HCFLAGS use HCFLAGS when compiling for host"
184 echo " --host-ldflags=HLDFLAGS use HLDFLAGS when linking for host"
185 echo " --host-libs=HLIBS use libs HLIBS when linking for host"
186 echo " --extra-cflags=ECFLAGS add ECFLAGS to CFLAGS [$CFLAGS]"
187 echo " --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]"
188 echo " --extra-libs=ELIBS add ELIBS [$ELIBS]"
189 echo " --extra-version=STRING version string suffix []"
190 echo " --build-suffix=SUFFIX library name suffix []"
191 echo " --arch=ARCH select architecture [$arch]"
192 echo " --cpu=CPU select the minimum required CPU (affects"
193 echo " instruction selection, may crash on older CPUs)"
194 echo " --enable-powerpc-perf enable performance report on PPC"
195 echo " (requires enabling PMC)"
196 echo " --disable-altivec disable AltiVec optimizations"
197 echo " --disable-amd3dnow disable 3DNow! optimizations"
198 echo " --disable-mmx disable MMX optimizations"
199 echo " --disable-mmx2 disable MMX2 optimizations"
200 echo " --disable-sse disable SSE optimizations"
201 echo " --disable-ssse3 disable SSSE3 optimizations"
202 echo " --disable-armv5te disable armv5te optimizations"
203 echo " --disable-armv6 disable armv6 optimizations"
204 echo " --disable-armv6t2 disable armv6t2 optimizations"
205 echo " --disable-armvfp disable ARM VFP optimizations"
206 echo " --disable-iwmmxt disable iwmmxt optimizations"
207 echo " --disable-mmi disable MMI optimizations"
208 echo " --disable-neon disable neon optimizations"
209 echo " --disable-vis disable VIS optimizations"
210 echo
211 echo "Developer options (useful when working on FFmpeg itself):"
212 echo " --disable-debug disable debugging symbols"
213 echo " --enable-debug=LEVEL set the debug level [$debuglevel]"
214 echo " --enable-gprof enable profiling with gprof [$gprof]"
215 echo " --disable-optimizations disable compiler optimizations"
216 echo " --enable-extra-warnings enable more compiler warnings"
217 echo " --disable-stripping disable stripping of executables and shared libraries"
218 echo ""
219 echo "NOTE: Object files are built at the place where configure is launched."
220 exit 0
223 log(){
224 echo "$@" >> $logfile
227 log_file(){
228 log BEGIN $1
229 pr -n -t $1 >> $logfile
230 log END $1
233 echolog(){
234 log "$@"
235 echo "$@"
238 die(){
239 echolog "$@"
240 cat <<EOF
241 If you think configure made a mistake, make sure you are using the latest
242 version from SVN. If the latest version fails, report the problem to the
243 ffmpeg-user@mplayerhq.hu mailing list or IRC #ffmpeg on irc.freenode.net.
245 if disabled logging; then
246 cat <<EOF
247 Rerun configure with logging enabled (do not use --disable-logging), and
248 include the log this produces with your report.
250 else
251 cat <<EOF
252 Include the log file "$logfile" produced by configure as this will help
253 solving the problem.
256 rm -f $TMPC $TMPE $TMPH $TMPO $TMPS $TMPSH
257 exit 1
260 # Avoid locale weirdness, besides we really just want to translate ASCII.
261 toupper(){
262 echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
265 tolower(){
266 echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
269 c_escape(){
270 echo "$*" | sed 's/["\\]/\\\0/g'
273 set_all(){
274 value=$1
275 shift
276 for var in $*; do
277 eval $var=$value
278 done
281 set_weak(){
282 value=$1
283 shift
284 for var; do
285 eval : \${$var:=$value}
286 done
289 pushvar(){
290 for var in $*; do
291 eval level=\${${var}_level:=0}
292 eval ${var}_${level}="\$$var"
293 eval ${var}_level=$(($level+1))
294 done
297 popvar(){
298 for var in $*; do
299 eval level=\${${var}_level:-0}
300 test $level = 0 && continue
301 eval level=$(($level-1))
302 eval $var="\${${var}_${level}}"
303 eval ${var}_level=$level
304 eval unset ${var}_${level}
305 done
308 enable(){
309 set_all yes $*
312 disable(){
313 set_all no $*
316 enable_weak(){
317 set_weak yes $*
320 disable_weak(){
321 set_weak no $*
324 do_enable_deep(){
325 for var; do
326 enabled $var && continue
327 eval sel="\$${var}_select"
328 eval sgs="\$${var}_suggest"
329 pushvar var sgs
330 enable_deep $sel
331 popvar sgs
332 enable_deep_weak $sgs
333 popvar var
334 done
337 enable_deep(){
338 do_enable_deep $*
339 enable $*
342 enable_deep_weak(){
343 do_enable_deep $*
344 enable_weak $*
347 enabled(){
348 test "${1#!}" = "$1" && op== || op=!=
349 eval test "x\$${1#!}" $op "xyes"
352 disabled(){
353 test "${1#!}" = "$1" && op== || op=!=
354 eval test "x\$${1#!}" $op "xno"
357 enabled_all(){
358 for opt; do
359 enabled $opt || return 1
360 done
363 disabled_all(){
364 for opt; do
365 disabled $opt || return 1
366 done
369 enabled_any(){
370 for opt; do
371 enabled $opt && return 0
372 done
375 disabled_any(){
376 for opt; do
377 disabled $opt && return 0
378 done
379 return 1
382 set_default(){
383 for opt; do
384 eval : \${$opt:=\$${opt}_default}
385 done
388 is_in(){
389 value=$1
390 shift
391 for var in $*; do
392 [ $var = $value ] && return 0
393 done
394 return 1
397 check_deps(){
398 for cfg; do
399 cfg="${cfg#!}"
400 enabled ${cfg}_checking && die "Circular dependency for $cfg."
401 disabled ${cfg}_checking && continue
402 enable ${cfg}_checking
404 eval dep_all="\$${cfg}_deps"
405 eval dep_any="\$${cfg}_deps_any"
406 eval dep_sel="\$${cfg}_select"
407 eval dep_sgs="\$${cfg}_suggest"
409 pushvar cfg dep_all dep_any dep_sel dep_sgs
410 check_deps $dep_all $dep_any $dep_sel $dep_sgs
411 popvar cfg dep_all dep_any dep_sel dep_sgs
413 enabled_all $dep_all || disable $cfg
414 enabled_any $dep_any || disable $cfg
415 disabled_any $dep_sel && disable $cfg
417 if enabled $cfg; then
418 eval dep_extralibs="\$${cfg}_extralibs"
419 test -n "$dep_extralibs" && add_extralibs $dep_extralibs
420 enable_deep $dep_sel
421 enable_deep_weak $dep_sgs
424 disable ${cfg}_checking
425 done
428 print_config(){
429 pfx=$1
430 header=$2
431 makefile=$3
432 shift 3
433 for cfg; do
434 ucname="`toupper $cfg`"
435 if enabled $cfg; then
436 echo "#define ${pfx}${ucname} 1" >> $header
437 echo "${pfx}${ucname}=yes" >> $makefile
438 else
439 echo "#define ${pfx}${ucname} 0" >> $header
441 done
444 flags_saved(){
445 (: ${SAVE_CFLAGS?}) 2> /dev/null
448 save_flags(){
449 flags_saved && return
450 SAVE_CFLAGS="$CFLAGS"
451 SAVE_LDFLAGS="$LDFLAGS"
452 SAVE_extralibs="$extralibs"
455 restore_flags(){
456 flags_saved || return
457 CFLAGS="$SAVE_CFLAGS"
458 LDFLAGS="$SAVE_LDFLAGS"
459 extralibs="$SAVE_extralibs"
460 unset SAVE_CFLAGS
461 unset SAVE_LDFLAGS
462 unset SAVE_extralibs
465 temp_cflags(){
466 save_flags
467 CFLAGS="$CFLAGS $*"
470 temp_ldflags(){
471 save_flags
472 LDFLAGS="$LDFLAGS $*"
475 temp_extralibs(){
476 save_flags
477 extralibs="$extralibs $*"
480 append(){
481 var=$1
482 shift
483 flags_saved && eval "SAVE_$var=\"\$SAVE_$var $*\""
484 eval "$var=\"\$$var $*\""
487 add_cflags(){
488 append CFLAGS "$@"
491 add_ldflags(){
492 append LDFLAGS "$@"
495 add_extralibs(){
496 append extralibs "$@"
499 check_cmd(){
500 log "$@"
501 "$@" >> $logfile 2>&1
504 check_cc(){
505 log check_cc "$@"
506 cat > $TMPC
507 log_file $TMPC
508 check_cmd $cc $CFLAGS "$@" -c -o $TMPO $TMPC
511 check_cpp(){
512 log check_cpp "$@"
513 cat > $TMPC
514 log_file $TMPC
515 check_cmd $cc $CFLAGS "$@" -E -o $TMPO $TMPC
518 check_asm(){
519 log check_asm "$@"
520 name="$1"
521 asm="$2"
522 shift 2
523 check_cc "$@" <<EOF && enable $name || disable $name
524 void foo(void){ __asm__ volatile($asm); }
528 check_yasm(){
529 log check_yasm "$@"
530 echo "$1" > $TMPS
531 log_file $TMPS
532 shift 1
533 check_cmd $yasmexe $YASMFLAGS "$@" -o $TMPO $TMPS
536 check_ld(){
537 log check_ld "$@"
538 check_cc || return
539 flags=''
540 libs=''
541 for f; do
542 test "${f}" = "${f#-l}" && flags="$flags $f" || libs="$libs $f"
543 done
544 check_cmd $cc $LDFLAGS $flags -o $TMPE $TMPO $extralibs $libs
547 check_cflags(){
548 log check_cflags "$@"
549 check_cc "$@" <<EOF && add_cflags "$@"
550 int x;
554 check_ldflags(){
555 log check_ldflags "$@"
556 check_ld "$@" <<EOF && add_ldflags "$@"
557 int main(void){ return 0; }
561 check_header(){
562 log check_header "$@"
563 header=$1
564 shift
565 var=`echo $header | sed 's/[^A-Za-z0-9_]/_/g'`
566 disable $var
567 check_cpp "$@" <<EOF && enable $var
568 #include <$header>
569 int x;
573 check_func(){
574 log check_func "$@"
575 func=$1
576 shift
577 disable $func
578 check_ld "$@" <<EOF && enable $func
579 extern int $func();
580 int main(void){ $func(); }
584 check_func_headers(){
585 log check_func_headers "$@"
586 headers=$1
587 func=$2
588 shift 2
589 disable $func
590 incs=""
591 for hdr in $headers; do
592 incs="$incs
593 #include <$hdr>"
594 done
595 check_ld "$@" <<EOF && enable $func
596 $incs
597 int main(int argc, char **argv){
598 (void) $func;
599 return 0;
604 check_cpp_condition(){
605 log check_cpp_condition "$@"
606 header=$1
607 condition=$2
608 check_cpp <<EOF
609 #include <$header>
610 #if !($condition)
611 #error "unsatisfied condition: $condition"
612 #endif
616 check_lib(){
617 log check_lib "$@"
618 header="$1"
619 func="$2"
620 shift 2
621 temp_extralibs "$@"
622 check_header $header && check_func $func && add_extralibs "$@"
623 err=$?
624 restore_flags
625 return $err
628 check_lib2(){
629 log check_lib2 "$@"
630 headers="$1"
631 func="$2"
632 shift 2
633 temp_extralibs "$@"
634 check_func_headers "$headers" $func && add_extralibs "$@"
635 err=$?
636 restore_flags
637 return $err
640 check_exec(){
641 check_ld "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
644 check_exec_crash(){
645 code=`cat`
647 # exit() is not async signal safe. _Exit (C99) and _exit (POSIX)
648 # are safe but may not be available everywhere. Thus we use
649 # raise(SIGTERM) instead. The check is run in a subshell so we
650 # can redirect the "Terminated" message from the shell. SIGBUS
651 # is not defined by standard C so it is used conditionally.
653 (check_exec "$@") >> $logfile 2>&1 <<EOF
654 #include <signal.h>
655 static void sighandler(int sig){
656 raise(SIGTERM);
658 int main(void){
659 signal(SIGILL, sighandler);
660 signal(SIGFPE, sighandler);
661 signal(SIGSEGV, sighandler);
662 #ifdef SIGBUS
663 signal(SIGBUS, sighandler);
664 #endif
665 { $code }
670 check_type(){
671 log check_type "$@"
672 headers=$1
673 type=$2
674 shift 2
675 disable $type
676 incs=""
677 for hdr in $headers; do
678 incs="$incs
679 #include <$hdr>"
680 done
681 check_cc "$@" <<EOF && enable $type
682 $incs
683 $type v;
687 require(){
688 name="$1"
689 header="$2"
690 func="$3"
691 shift 3
692 check_lib $header $func "$@" || die "ERROR: $name not found"
695 require2(){
696 name="$1"
697 headers="$2"
698 func="$3"
699 shift 3
700 check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
703 check_foo_config(){
704 cfg=$1
705 pkg=$2
706 header=$3
707 func=$4
708 shift 4
709 disable $cfg
710 check_cmd ${pkg}-config --version
711 err=$?
712 if test "$err" = 0; then
713 temp_cflags `${pkg}-config --cflags`
714 temp_extralibs `${pkg}-config --libs`
715 check_lib "$@" $header $func && enable $cfg
717 return $err
720 apply(){
721 file=$1
722 shift
723 "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
726 # CONFIG_LIST contains configurable options, while HAVE_LIST is for
727 # system-dependent things.
729 COMPONENT_LIST="
730 bsfs
731 decoders
732 demuxers
733 encoders
734 filters
735 indevs
736 muxers
737 outdevs
738 parsers
739 protocols
742 CONFIG_LIST="
743 $COMPONENT_LIST
744 aandct
745 avfilter
746 avfilter_lavf
747 avisynth
748 beos_netserver
749 bzlib
750 fastdiv
751 ffmpeg
752 ffplay
753 ffserver
755 golomb
757 gprof
758 gray
759 hardcoded_tables
760 ipv6
761 libamr_nb
762 libamr_wb
763 libdc1394
764 libdirac
765 libfaac
766 libfaad
767 libfaadbin
768 libgsm
769 libmp3lame
770 libnut
771 libschroedinger
772 libspeex
773 libtheora
774 libvorbis
775 libx264
776 libxvid
777 mdct
778 memalign_hack
779 mlib
780 mpegaudio_hp
781 network
782 nonfree
783 postproc
784 powerpc_perf
785 rdft
786 shared
787 small
788 static
789 swscale
790 vdpau
791 vhook
792 x11grab
793 xvmc
794 zlib
797 THREADS_LIST='
798 beosthreads
799 os2threads
800 pthreads
801 w32threads
804 ARCH_LIST='
805 alpha
807 bfin
808 ia64
809 m68k
810 mips
811 parisc
813 s390
815 sparc
816 sparc64
818 x86_32
819 x86_64
822 ARCH_EXT_LIST='
823 altivec
824 amd3dnow
825 armv5te
826 armv6
827 armv6t2
828 armvfp
829 iwmmxt
832 mmx2
833 neon
834 ppc4xx
836 ssse3
840 HAVE_LIST="
841 $ARCH_EXT_LIST
842 $THREADS_LIST
843 alsa_asoundlib_h
844 altivec_h
845 arpa_inet_h
846 bswap
847 closesocket
848 cmov
849 conio_h
850 dcbzl
851 dev_bktr_ioctl_bt848_h
852 dev_bktr_ioctl_meteor_h
853 dev_ic_bt8xx_h
854 dev_video_meteor_ioctl_meteor_h
855 dev_video_bktr_ioctl_bt848_h
856 dlfcn_h
857 dlopen
858 dos_paths
859 ebp_available
860 ebx_available
861 fast_64bit
862 fast_cmov
863 fast_unaligned
864 fork
865 freetype2
866 gethrtime
867 GetProcessTimes
868 getrusage
869 imlib2
870 inet_aton
871 inline_asm
872 libdc1394_1
873 libdc1394_2
874 llrint
875 lrint
876 lrintf
877 machine_ioctl_bt848_h
878 machine_ioctl_meteor_h
879 malloc_h
880 memalign
881 mkstemp
883 posix_memalign
884 ppc64
885 round
886 roundf
888 sdl_video_size
889 setmode
890 socklen_t
891 soundcard_h
892 poll_h
893 sys_mman_h
894 sys_resource_h
895 sys_select_h
896 sys_soundcard_h
897 sys_videoio_h
898 termios_h
899 threads
900 truncf
901 winsock2_h
902 yasm
905 # options emitted with CONFIG_ prefix but not available on command line
906 CONFIG_EXTRA="
907 fft_mmx
908 oldscaler
911 CMDLINE_SELECT="
912 $ARCH_EXT_LIST
913 $CONFIG_LIST
914 $THREADS_LIST
915 cross_compile
916 debug
917 extra_warnings
918 logging
919 optimizations
920 stripping
923 PATHS_LIST='
924 bindir
925 datadir
926 incdir
927 libdir
928 mandir
929 prefix
930 shlibdir
933 CMDLINE_SET="
934 $PATHS_LIST
935 arch
936 build_suffix
939 cross_prefix
940 extra_version
941 host_cc
942 host_cflags
943 host_ldflags
944 host_libs
945 logfile
947 source_path
948 target_exec
949 target_os
950 target_path
953 # code dependency declarations
955 # architecture extensions
956 altivec_deps="ppc"
957 amd3dnow_deps="mmx"
958 armv5te_deps="arm"
959 armv6_deps="arm"
960 armv6t2_deps="arm"
961 armvfp_deps="arm"
962 iwmmxt_deps="arm"
963 mmi_deps="mips"
964 mmx_deps="x86"
965 mmx2_deps="mmx"
966 neon_deps="arm"
967 ppc4xx_deps="ppc"
968 sse_deps="mmx"
969 ssse3_deps="sse"
970 vis_deps="sparc"
972 # common features
973 fft_suggest="fft_mmx"
974 fft_mmx_deps="mmx yasm"
975 oldscaler_deps="!swscale"
977 # decoders / encoders
978 aac_decoder_select="fft mdct"
979 ac3_decoder_deps="gpl"
980 ac3_decoder_select="fft mdct"
981 atrac3_decoder_select="fft mdct"
982 cavs_decoder_select="golomb"
983 cook_decoder_select="fft mdct"
984 cscd_decoder_suggest="zlib"
985 dca_decoder_select="fft mdct"
986 dnxhd_encoder_select="aandct"
987 dxa_decoder_select="zlib"
988 eac3_decoder_deps="gpl"
989 eac3_decoder_select="fft mdct"
990 eatgq_decoder_select="aandct"
991 ffv1_decoder_select="golomb"
992 flac_decoder_select="golomb"
993 flac_encoder_select="golomb"
994 flashsv_decoder_select="zlib"
995 flashsv_encoder_select="zlib"
996 flv_encoder_select="aandct"
997 h261_encoder_select="aandct"
998 h263_encoder_select="aandct"
999 h263p_encoder_select="aandct"
1000 h264_decoder_select="golomb"
1001 h264_vdpau_decoder_deps="vdpau"
1002 imc_decoder_select="fft mdct"
1003 jpegls_decoder_select="golomb"
1004 jpegls_encoder_select="golomb"
1005 ljpeg_encoder_select="aandct"
1006 loco_decoder_select="golomb"
1007 mjpeg_encoder_select="aandct"
1008 mpeg1video_encoder_select="aandct"
1009 mpeg2video_encoder_select="aandct"
1010 mpeg4_encoder_select="aandct"
1011 mpeg_vdpau_decoder_deps="vdpau"
1012 mpeg1_vdpau_decoder_deps="vdpau"
1013 mpeg_xvmc_decoder_deps="xvmc X11_extensions_XvMClib_h"
1014 msmpeg4v1_encoder_select="aandct"
1015 msmpeg4v2_encoder_select="aandct"
1016 msmpeg4v3_encoder_select="aandct"
1017 nellymoser_decoder_select="fft mdct"
1018 nellymoser_encoder_select="fft mdct"
1019 png_decoder_select="zlib"
1020 png_encoder_select="zlib"
1021 qdm2_decoder_select="fft mdct rdft"
1022 rv10_encoder_select="aandct"
1023 rv20_encoder_select="aandct"
1024 shorten_decoder_select="golomb"
1025 sonic_decoder_select="golomb"
1026 sonic_encoder_select="golomb"
1027 sonic_ls_encoder_select="golomb"
1028 svq3_decoder_select="golomb"
1029 svq3_decoder_suggest="zlib"
1030 tiff_decoder_suggest="zlib"
1031 tiff_encoder_suggest="zlib"
1032 tscc_decoder_select="zlib"
1033 vc1_vdpau_decoder_deps="vdpau"
1034 vorbis_decoder_select="fft mdct"
1035 vorbis_encoder_select="fft mdct"
1036 wmav1_decoder_select="fft mdct"
1037 wmav1_encoder_select="fft mdct"
1038 wmav2_decoder_select="fft mdct"
1039 wmav2_encoder_select="fft mdct"
1040 wmv1_encoder_select="aandct"
1041 wmv2_encoder_select="aandct"
1042 wmv3_vdpau_decoder_deps="vdpau"
1043 zlib_decoder_select="zlib"
1044 zlib_encoder_select="zlib"
1045 zmbv_decoder_select="zlib"
1046 zmbv_encoder_select="zlib"
1048 # external libraries
1049 libamr_nb_decoder_deps="libamr_nb"
1050 libamr_nb_encoder_deps="libamr_nb"
1051 libamr_wb_decoder_deps="libamr_wb"
1052 libamr_wb_encoder_deps="libamr_wb"
1053 libdirac_decoder_deps="libdirac !libschroedinger"
1054 libdirac_encoder_deps="libdirac"
1055 libfaac_encoder_deps="libfaac"
1056 libfaad_decoder_deps="libfaad"
1057 libfaadbin_decoder_extralibs='$ldl'
1058 libgsm_decoder_deps="libgsm"
1059 libgsm_encoder_deps="libgsm"
1060 libgsm_ms_decoder_deps="libgsm"
1061 libgsm_ms_encoder_deps="libgsm"
1062 libmp3lame_encoder_deps="libmp3lame"
1063 libschroedinger_decoder_deps="libschroedinger"
1064 libschroedinger_encoder_deps="libschroedinger"
1065 libspeex_decoder_deps="libspeex"
1066 libtheora_encoder_deps="libtheora"
1067 libvorbis_encoder_deps="libvorbis"
1068 libx264_encoder_deps="libx264"
1069 libxvid_encoder_deps="libxvid"
1070 mpeg4aac_decoder_deps="libfaad"
1071 vdpau_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1073 # demuxers / muxers
1074 ac3_demuxer_deps="ac3_parser"
1075 alsa_demuxer_deps="alsa_asoundlib_h snd_pcm_htimestamp"
1076 alsa_demuxer_extralibs="-lasound"
1077 alsa_muxer_deps="alsa_asoundlib_h"
1078 alsa_muxer_extralibs="-lasound"
1079 audio_beos_demuxer_deps="audio_beos"
1080 audio_beos_demuxer_extralibs="-lmedia -lbe"
1081 audio_beos_muxer_deps="audio_beos"
1082 audio_beos_muxer_extralibs="-lmedia -lbe"
1083 avisynth_demuxer_deps="avisynth"
1084 bktr_demuxer_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
1085 dirac_demuxer_deps="dirac_parser"
1086 dv1394_demuxer_deps="dv1394 dv_demuxer"
1087 libdc1394_demuxer_deps="libdc1394"
1088 libnut_demuxer_deps="libnut"
1089 libnut_muxer_deps="libnut"
1090 matroska_demuxer_suggest="zlib bzlib"
1091 mov_demuxer_suggest="zlib"
1092 mp3_demuxer_deps="mpegaudio_parser"
1093 oss_demuxer_deps_any="soundcard_h sys_soundcard_h"
1094 oss_muxer_deps_any="soundcard_h sys_soundcard_h"
1095 redir_demuxer_deps="network"
1096 rtp_muxer_deps="network rtp_protocol"
1097 rtsp_demuxer_deps="sdp_demuxer"
1098 sdp_demuxer_deps="rtp_protocol mpegts_demuxer"
1099 v4l_demuxer_deps="linux_videodev_h"
1100 v4l2_demuxer_deps_any="linux_videodev2_h sys_videoio_h"
1101 vfwcap_demuxer_deps="capCreateCaptureWindow"
1102 vfwcap_demuxer_extralibs="-lvfw32"
1103 x11_grab_device_demuxer_deps="x11grab XShmCreateImage"
1104 x11_grab_device_demuxer_extralibs="-lX11 -lXext"
1106 # protocols
1107 http_protocol_deps="network"
1108 rtp_protocol_deps="udp_protocol"
1109 tcp_protocol_deps="network"
1110 udp_protocol_deps="network"
1112 # filters
1113 movie_filter_deps="avfilter_lavf"
1115 # programs
1116 ffplay_deps="sdl"
1117 ffserver_deps="ffm_muxer rtp_protocol rtsp_demuxer"
1118 ffserver_extralibs='$ldl'
1119 vhook_extralibs='$ldl'
1122 # default parameters
1124 logfile="config.err"
1126 # installation paths
1127 prefix_default="/usr/local"
1128 bindir_default='${prefix}/bin'
1129 datadir_default='${prefix}/share/ffmpeg'
1130 incdir_default='${prefix}/include'
1131 libdir_default='${prefix}/lib'
1132 mandir_default='${prefix}/share/man'
1133 shlibdir_default="$libdir_default"
1135 # toolchain
1136 ar="ar"
1137 cc_default="gcc"
1138 host_cc_default="gcc"
1139 ln_s="ln -sf"
1140 nm_default="nm"
1141 objformat="elf"
1142 ranlib="ranlib"
1143 strip="strip"
1144 yasmexe="yasm"
1146 # machine
1147 arch=`uname -m`
1148 cpu="generic"
1150 # OS
1151 target_os=$(tolower $(uname -s))
1153 # configurable options
1154 enable debug
1155 enable ffmpeg
1156 enable ffplay
1157 enable ffserver
1158 enable ipv6
1159 enable mpegaudio_hp
1160 enable network
1161 enable oldscaler
1162 enable optimizations
1163 enable protocols
1164 enable static
1165 enable stripping
1166 vhook="default"
1168 # build settings
1169 add_cflags -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112
1170 SHFLAGS='-shared -Wl,-soname,$$(@F)'
1171 VHOOKSHFLAGS='$(SHFLAGS)'
1172 FFSERVERLDFLAGS=-Wl,-E
1173 LIBPREF="lib"
1174 LIBSUF=".a"
1175 FULLNAME='$(NAME)$(BUILDSUF)'
1176 LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
1177 SLIBPREF="lib"
1178 SLIBSUF=".so"
1179 SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
1180 SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
1181 SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
1182 LIB_INSTALL_EXTRA_CMD='$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
1184 host_cflags='-O3 -g -Wall'
1185 host_libs='-lm'
1187 target_path='.'
1189 # gcc stupidly only outputs the basename of targets with -MM, but we need the
1190 # full relative path for objects in subdirectories for non-recursive Make.
1191 DEPEND_CMD='$(CC) $(CFLAGS) -MM -MG $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o," -e "s,\\([[:space:]]\\)\\(version\\.h\\),\\1\$$(BUILD_ROOT_REL)/\\2,"'
1193 # find source path
1194 source_path="`dirname \"$0\"`"
1195 enable source_path_used
1196 if test -z "$source_path" -o "$source_path" = "." ; then
1197 source_path="`pwd`"
1198 disable source_path_used
1199 else
1200 source_path="`cd \"$source_path\"; pwd`"
1201 echo "$source_path" | grep -q '[[:blank:]]' &&
1202 die "Out of tree builds are impossible with whitespace in source path."
1205 FFMPEG_CONFIGURATION="$@"
1207 find_things(){
1208 thing=$1
1209 pattern=$2
1210 file=$source_path/$3
1211 sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
1214 ENCODER_LIST=$(find_things encoder ENC libavcodec/allcodecs.c)
1215 DECODER_LIST=$(find_things decoder DEC libavcodec/allcodecs.c)
1216 PARSER_LIST=$(find_things parser PARSER libavcodec/allcodecs.c)
1217 BSF_LIST=$(find_things bsf BSF libavcodec/allcodecs.c)
1218 MUXER_LIST=$(find_things muxer _MUX libavformat/allformats.c)
1219 DEMUXER_LIST=$(find_things demuxer DEMUX libavformat/allformats.c)
1220 OUTDEV_LIST=$(find_things muxer _MUX libavdevice/alldevices.c)
1221 INDEV_LIST=$(find_things demuxer DEMUX libavdevice/alldevices.c)
1222 PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
1223 FILTER_LIST=$(find_things filter FILTER libavfilter/allfilters.c)
1225 enable $ARCH_EXT_LIST \
1226 $DECODER_LIST \
1227 $ENCODER_LIST \
1228 $PARSER_LIST \
1229 $BSF_LIST \
1230 $DEMUXER_LIST \
1231 $MUXER_LIST \
1232 $FILTER_LIST \
1233 $PROTOCOL_LIST \
1234 $INDEV_LIST \
1235 $OUTDEV_LIST \
1237 die_unknown(){
1238 echo "Unknown option \"$1\"."
1239 echo "See $0 --help for available options."
1240 exit 1
1243 show_list() {
1244 suffix=_$1
1245 shift
1246 echo $* | sed s/$suffix//g | tr ' ' '\n' | sort
1247 exit 0
1250 for opt do
1251 optval="${opt#*=}"
1252 case "$opt" in
1253 --extra-cflags=*) add_cflags $optval
1255 --extra-ldflags=*) add_ldflags $optval
1257 --extra-libs=*) add_extralibs $optval
1259 --disable-devices) disable $INDEV_LIST $OUTDEV_LIST
1261 --enable-debug=*) debuglevel="$optval"
1263 --enable-*=*|--disable-*=*)
1264 eval `echo "$opt" | sed 's/=/-/;s/--/action=/;s/-/ thing=/;s/-/ name=/'`
1265 case "$thing" in
1266 encoder|decoder|muxer|demuxer|parser|bsf|protocol|filter) $action ${optval}_${thing} ;;
1267 *) die_unknown "$opt" ;;
1268 esac
1270 --enable-?*|--disable-?*)
1271 eval `echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g'`
1272 if is_in $option $COMPONENT_LIST; then
1273 eval $action \$$(toupper ${option%s})_LIST
1274 elif is_in $option $CMDLINE_SELECT; then
1275 $action $option
1276 else
1277 die_unknown $opt
1280 --list-*)
1281 NAME="${opt#--list-}"
1282 is_in $NAME $COMPONENT_LIST || die_unknown $opt
1283 NAME=${NAME%s}
1284 eval show_list $NAME \$$(toupper $NAME)_LIST
1286 --help|-h) show_help
1289 optname="${opt%%=*}"
1290 optname="${optname#--}"
1291 optname=$(echo "$optname" | sed 's/-/_/g')
1292 is_in $optname $CMDLINE_SET || die_unknown $opt
1293 eval $optname='$optval'
1295 esac
1296 done
1298 disabled logging && logfile=/dev/null
1300 echo "# $0 $@" > $logfile
1301 set >> $logfile
1303 test -n "$cross_prefix" && enable cross_compile
1305 ar="${cross_prefix}${ar}"
1306 cc_default="${cross_prefix}${cc_default}"
1307 nm_default="${cross_prefix}${nm_default}"
1308 ranlib="${cross_prefix}${ranlib}"
1309 strip="${cross_prefix}${strip}"
1311 set_default cc nm
1312 enabled cross_compile || host_cc_default=$cc
1313 set_default host_cc
1315 # set temporary file name
1316 : ${TMPDIR:=$TEMPDIR}
1317 : ${TMPDIR:=$TMP}
1318 : ${TMPDIR:=/tmp}
1320 TMPC="${TMPDIR}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.c"
1321 TMPE="${TMPDIR}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}${EXESUF}"
1322 TMPH="${TMPDIR}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.h"
1323 TMPO="${TMPDIR}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.o"
1324 TMPS="${TMPDIR}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.S"
1325 TMPSH="${TMPDIR}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.sh"
1327 check_cflags -std=c99
1329 case "$arch" in
1330 i386|i486|i586|i686|i86pc|BePC)
1331 arch="x86"
1332 subarch="x86_32"
1333 enable fast_unaligned
1335 x86_64|amd64)
1336 arch="x86"
1337 subarch="x86_32"
1338 enable cmov
1339 enable fast_cmov
1340 enable fast_unaligned
1341 check_cc <<EOF && enable fast_64bit && subarch="x86_64"
1342 int test[sizeof(char*) - 7];
1345 arm|armv[4567]*l)
1346 arch="arm"
1348 alpha)
1349 arch="alpha"
1350 enable fast_64bit
1351 check_cflags -mieee
1353 "Power Macintosh"|ppc|powerpc)
1354 arch="ppc"
1355 enable fast_unaligned
1357 ppc64)
1358 arch="ppc"
1359 enable fast_64bit
1360 enable fast_unaligned
1362 mips|mipsel|IP*)
1363 arch="mips"
1365 mips64)
1366 arch="mips"
1367 enable fast_64bit
1369 sun4u|sparc64)
1370 arch="sparc"
1371 subarch="sparc64"
1372 enable fast_64bit
1374 sparc)
1375 arch="sparc"
1377 sh4|sh)
1378 arch="sh4"
1380 parisc|hppa)
1381 arch="parisc"
1383 parisc64|hppa64)
1384 arch="parisc"
1385 enable fast_64bit
1387 s390|s390x)
1388 arch="s390"
1390 m68k)
1391 arch="m68k"
1393 ia64)
1394 arch="ia64"
1395 enable fast_64bit
1397 bfin)
1398 arch="bfin"
1401 arch="unknown"
1403 esac
1405 enable $arch $subarch
1407 # OS specific
1408 case $target_os in
1409 beos|haiku|zeta)
1410 prefix_default="$HOME/config"
1411 # helps building libavcodec
1412 add_cflags -DPIC -fomit-frame-pointer
1413 # 3 gcc releases known for BeOS, each with ugly bugs
1414 gcc_version="`$cc -v 2>&1 | grep version | cut -d ' ' -f3-`"
1415 case "$gcc_version" in
1416 2.9-beos-991026*|2.9-beos-000224*) echo "R5/GG gcc"
1417 disable mmx
1419 *20010315*) echo "BeBits gcc"
1420 add_cflags -fno-expensive-optimizations
1422 esac
1423 SHFLAGS=-nostart
1424 # enable BeOS things
1425 enable audio_beos
1426 # no need for libm, but the inet stuff
1427 # Check for BONE
1428 # XXX: actually should check for NOT net_server
1429 if echo $BEINCLUDES | grep -q 'headers/be/bone'; then
1430 network_extralibs="-lbind -lsocket"
1431 else
1432 enable beos_netserver
1433 network_extralibs="-lnet"
1434 fi ;;
1435 sunos)
1436 FFSERVERLDFLAGS=""
1437 SHFLAGS='-shared -Wl,-h,$$(@F)'
1438 network_extralibs="-lsocket -lnsl"
1439 add_cflags -D__EXTENSIONS__
1441 netbsd)
1442 oss_demuxer_extralibs="-lossaudio"
1443 oss_muxer_extralibs="-lossaudio"
1445 openbsd)
1446 disable need_memalign
1447 LIBOBJFLAGS='$(PIC)'
1448 SHFLAGS='-shared'
1449 oss_demuxer_extralibs="-lossaudio"
1450 oss_muxer_extralibs="-lossaudio"
1452 freebsd)
1453 disable need_memalign
1455 bsd/os)
1456 osextralibs="-lpoll -lgnugetopt"
1457 strip="strip -d"
1459 darwin)
1460 disable need_memalign
1461 SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR) -Wl,-read_only_relocs,suppress'
1462 VHOOKSHFLAGS='-dynamiclib -Wl,-single_module -flat_namespace -undefined suppress -Wl,-install_name,$(SHLIBDIR)/vhook/$$(@F)'
1463 strip="strip -x"
1464 FFLDFLAGS="-Wl,-dynamic,-search_paths_first"
1465 SLIBSUF=".dylib"
1466 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
1467 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
1468 FFSERVERLDFLAGS=-Wl,-bind_at_load
1469 objformat="macho"
1470 enabled x86_64 && objformat="macho64"
1472 mingw32*)
1473 target_os=mingw32
1474 LIBTARGET=i386
1475 if enabled x86_64; then
1476 disable need_memalign
1477 LIBTARGET=x64
1479 shlibdir_default="$bindir_default"
1480 VHOOKSHFLAGS='-shared -L$(BUILD_ROOT)/libavformat -L$(BUILD_ROOT)/libavcodec -L$(BUILD_ROOT)/libavutil'
1481 VHOOKLIBS='-lavformat$(BUILDSUF) -lavcodec$(BUILDSUF) -lavutil$(BUILDSUF) $(EXTRALIBS)'
1482 if enabled swscale; then
1483 VHOOKSHFLAGS="$VHOOKSHFLAGS -L\$(BUILD_ROOT)/libswscale"
1484 VHOOKLIBS="$VHOOKLIBS -lswscale\$(BUILDSUF)"
1486 disable ffserver
1487 SLIBPREF=""
1488 SLIBSUF=".dll"
1489 EXESUF=".exe"
1490 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1491 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1492 SLIB_EXTRA_CMD='-lib /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)'
1493 SLIB_INSTALL_EXTRA_CMD='-install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"; \
1494 install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)"'
1495 SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"'
1496 SHFLAGS='-shared -Wl,--output-def,$$(@:$(SLIBSUF)=.def) -Wl,--enable-runtime-pseudo-reloc -Wl,--enable-auto-image-base'
1497 objformat="win32"
1498 enable dos_paths
1499 if ! enabled x86_64; then
1500 check_cpp_condition _mingw.h "(__MINGW32_MAJOR_VERSION > 3) || (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
1501 die "ERROR: MinGW runtime version must be >= 3.15."
1502 enabled_any avisynth vfwcap_demuxer &&
1503 { check_cpp_condition w32api.h "(__W32API_MAJOR_VERSION > 3) || (__W32API_MAJOR_VERSION == 3 && __W32API_MINOR_VERSION >= 13)" ||
1504 die "ERROR: avisynth and vfwcap_demuxer require w32api version 3.13 or later."; }
1507 cygwin*)
1508 target_os=cygwin
1509 shlibdir_default="$bindir_default"
1510 VHOOKSHFLAGS='-shared -L$(BUILD_ROOT)/libavformat -L$(BUILD_ROOT)/libavcodec -L$(BUILD_ROOT)/libavutil'
1511 VHOOKLIBS='-lavformat$(BUILDSUF) -lavcodec$(BUILDSUF) -lavutil$(BUILDSUF) $(EXTRALIBS)'
1512 if enabled swscale; then
1513 VHOOKSHFLAGS="$VHOOKSHFLAGS -L\$(BUILD_ROOT)/libswscale"
1514 VHOOKLIBS="$VHOOKLIBS -lswscale\$(BUILDSUF)"
1516 EXESUF=".exe"
1517 SLIBPREF="cyg"
1518 SLIBSUF=".dll"
1519 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1520 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1521 SHFLAGS='-shared -Wl,--enable-auto-image-base'
1522 objformat="win32"
1523 enable dos_paths
1525 *-dos|freedos|opendos)
1526 disable ffplay ffserver vhook
1527 disable $INDEV_LIST $OUTDEV_LIST
1528 network_extralibs="-lsocket"
1529 EXESUF=".exe"
1530 objformat="coff"
1531 enable dos_paths
1533 linux)
1534 enable dv1394
1536 irix*)
1537 target_os=irix
1538 ranlib="echo ignoring ranlib"
1540 os/2*)
1541 strip="lxlite"
1542 ln_s="cp -f"
1543 EXESUF=".exe"
1544 FFLDFLAGS="-Zomf -Zbin-files -Zargs-wild -Zmap"
1545 SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
1546 FFSERVERLDFLAGS=""
1547 LIBSUF="_s.a"
1548 SLIBPREF=""
1549 SLIBSUF=".dll"
1550 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
1551 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
1552 SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
1553 echo PROTMODE >> $(SUBDIR)$(NAME).def; \
1554 echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
1555 echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
1556 echo EXPORTS >> $(SUBDIR)$(NAME).def; \
1557 emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
1558 SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
1559 emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
1560 SLIB_INSTALL_EXTRA_CMD='install -m 644 $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib "$(LIBDIR)"'
1561 SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.a "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.lib'
1562 disable vhook
1563 enable dos_paths
1565 interix)
1566 disable vhook
1570 die "Unknown OS '$target_os'."
1572 esac
1574 set_default $PATHS_LIST
1576 add_extralibs $osextralibs
1578 # Combine FFLDFLAGS and the LDFLAGS environment variable.
1579 LDFLAGS="$FFLDFLAGS $LDFLAGS"
1581 # we need to build at least one lib type
1582 if ! enabled_any static shared; then
1583 cat <<EOF
1584 At least one library type must be built.
1585 Specify --enable-static to build the static libraries or --enable-shared to
1586 build the shared libraries as well. To only build the shared libraries specify
1587 --disable-static in addition to --enable-shared.
1589 exit 1;
1592 disabled static && LIBNAME=""
1594 if enabled_any libfaad libfaadbin ; then
1595 if check_header faad.h; then
1596 check_cc <<EOF
1597 #include <faad.h>
1598 #ifndef FAAD2_VERSION
1599 ok faad1
1600 #endif
1601 int main(void) { return 0; }
1603 test $? = 0 && enable libfaad2
1604 else
1605 die "FAAD test failed."
1610 if ! enabled gpl; then
1611 die_gpl_disabled(){
1612 name=$1
1613 shift
1614 enabled_any $@ && die "$name is under GPL and --enable-gpl is not specified."
1616 die_gpl_disabled "The Postprocessing code" postproc
1617 die_gpl_disabled "libx264" libx264
1618 die_gpl_disabled "libxvidcore" libxvid
1619 die_gpl_disabled "FAAD2" libfaad2
1620 die_gpl_disabled "The X11 grabber" x11grab
1621 die_gpl_disabled "The software scaler" swscale
1624 if ! enabled nonfree && enabled_any libamr_nb libamr_wb; then
1625 die "libamr is nonfree and --enable-nonfree is not specified."
1628 check_deps $ARCH_EXT_LIST
1630 test -z "$need_memalign" && need_memalign="$mmx"
1632 #Darwin CC versions
1633 if test $target_os = darwin; then
1634 if $cc -v 2>&1 | grep -q xlc; then
1635 add_cflags -qpdf2 -qlanglvl=extc99 -qmaxmem=-1 -qarch=auto -qtune=auto
1636 else
1637 add_cflags -pipe
1638 check_cflags -force_cpusubtype_ALL
1639 check_cflags -Wno-sign-compare
1640 enabled shared || check_cflags -mdynamic-no-pic
1644 disabled optimizations || check_cflags -fomit-frame-pointer
1646 # Add processor-specific flags
1647 if test $cpu != "generic"; then
1648 warn_altivec(){
1649 $1 altivec && echo "WARNING: Tuning for $2 but AltiVec $1.";
1651 case $cpu in
1652 601|ppc601|PowerPC601)
1653 add_cflags -mcpu=601
1654 warn_altivec enabled PPC601
1656 603*|ppc603*|PowerPC603*)
1657 add_cflags -mcpu=603
1658 warn_altivec enabled PPC603
1660 604*|ppc604*|PowerPC604*)
1661 add_cflags -mcpu=604
1662 warn_altivec enabled PPC604
1664 G3|g3|75*|ppc75*|PowerPC75*)
1665 add_cflags -mcpu=750 -mpowerpc-gfxopt
1666 warn_altivec enabled PPC75x
1668 G4|g4|745*|ppc745*|PowerPC745*)
1669 add_cflags -mcpu=7450 -mpowerpc-gfxopt
1670 warn_altivec disabled PPC745x
1672 74*|ppc74*|PowerPC74*)
1673 add_cflags -mcpu=7400 -mpowerpc-gfxopt
1674 warn_altivec disabled PPC74xx
1676 G5|g5|970|ppc970|PowerPC970|power4*|Power4*)
1677 add_cflags -mcpu=970 -mpowerpc-gfxopt -mpowerpc64
1678 warn_altivec disabled PPC970
1679 enable ppc64
1681 Cell|CELL|cell)
1682 add_cflags -mcpu=cell
1683 warn_altivec disabled Cell
1684 enable ppc64
1686 # targets that do NOT support conditional mov (cmov)
1687 i[345]86|pentium|pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
1688 add_cflags -march=$cpu
1689 disable cmov
1691 # targets that do support conditional mov (cmov)
1692 i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2)
1693 add_cflags -march=$cpu
1694 enable cmov
1695 enable fast_cmov
1697 # targets that do support conditional mov but on which it's slow
1698 pentium4|pentium4m|prescott|nocona)
1699 add_cflags -march=$cpu
1700 enable cmov
1701 disable fast_cmov
1703 sparc64)
1704 add_cflags -mcpu=v9
1706 arm11*|cortex*)
1707 add_cflags -mcpu=$cpu
1708 enable fast_unaligned
1710 armv*)
1711 add_cflags -march=$cpu
1713 arm*)
1714 add_cflags -mcpu=$cpu
1716 ev4|ev45|ev5|ev56|pca56|ev6|ev67)
1717 add_cflags -mcpu=$cpu
1720 echo "WARNING: Unknown CPU \"$cpu\", ignored."
1722 esac
1725 # make sure we can execute files in $TMPDIR
1726 cat > $TMPSH 2>> $logfile <<EOF
1727 #! /bin/sh
1729 chmod +x $TMPSH >> $logfile 2>&1
1730 if ! $TMPSH >> $logfile 2>&1; then
1731 cat <<EOF
1732 Unable to create and execute files in $TMPDIR. Set the TMPDIR environment
1733 variable to another directory and make sure that it is not mounted noexec.
1735 die "Sanity test failed."
1737 rm $TMPSH
1739 # compiler sanity check
1740 check_exec <<EOF
1741 int main(void){ return 0; }
1743 if test "$?" != 0; then
1744 echo "$cc is unable to create an executable file."
1745 if test -z "$cross_prefix" && ! enabled cross_compile ; then
1746 echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
1747 echo "Only do this if you know what cross compiling means."
1749 die "C compiler test failed."
1752 check_cc <<EOF || die "Symbol mangling check failed."
1753 int ff_extern;
1755 sym=$($nm -P -g $TMPO | grep ff_extern)
1756 extern_prefix=${sym%%ff_extern*}
1758 check_asm inline_asm '""'
1760 if enabled x86; then
1761 # check whether EBP is available on x86
1762 # As 'i' is stored on the stack, this program will crash
1763 # if the base pointer is used to access it because the
1764 # base pointer is cleared in the inline assembly code.
1765 check_exec_crash <<EOF && enable ebp_available
1766 volatile int i=0;
1767 __asm__ volatile (
1768 "xorl %%ebp, %%ebp"
1769 ::: "%ebp");
1770 return i;
1773 # check wether EBX is available on x86
1774 check_asm ebx_available '"":::"%ebx"'
1776 # check whether binutils is new enough to compile SSSE3/MMX2
1777 enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
1778 enabled mmx2 && check_asm mmx2 '"movss %xmm0, %xmm0"'
1780 check_asm bswap '"bswap %%eax" ::: "%eax"'
1782 YASMFLAGS="-f $objformat -DARCH_$(toupper $subarch)"
1783 enabled x86_64 && append YASMFLAGS "-m amd64"
1784 enabled_all x86_64 shared && append YASMFLAGS "-DPIC"
1785 case "$objformat" in
1786 elf) enabled debug && append YASMFLAGS "-g dwarf2" ;;
1787 macho64) append YASMFLAGS "-DPIC -DPREFIX" ;;
1788 *) append YASMFLAGS "-DPREFIX" ;;
1789 esac
1790 check_yasm "pabsw xmm0, xmm0" && enable yasm
1793 # check for assembler specific support
1795 enabled ppc && check_asm dcbzl '"dcbzl 0, 1"'
1796 enabled ppc && check_asm ppc4xx '"maclhw r10, r11, r12"'
1798 # check for SIMD availability
1800 # AltiVec flags: The FSF version of GCC differs from the Apple version
1801 if enabled altivec; then
1802 check_cflags -maltivec -mabi=altivec &&
1803 { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
1804 check_cflags -faltivec
1806 # check if our compiler supports Motorola AltiVec C API
1807 check_cc <<EOF || disable altivec
1808 $inc_altivec_h
1809 int main(void) {
1810 vector signed int v1, v2, v3;
1811 v1 = vec_add(v2,v3);
1812 return 0;
1816 # check if our compiler supports braces for vector declarations
1817 check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
1818 $inc_altivec_h
1819 int main (void) { (vector int) {1}; return 0; }
1823 # We have to check if pld is a nop and disable it.
1824 enabled arm && check_asm pld '"pld [r0]"'
1825 enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
1826 enabled armv6 && check_asm armv6 '"sadd16 r0, r0, r0"'
1827 enabled armv6t2 && check_asm armv6t2 '"movt r0, #0"'
1828 enabled armvfp && check_asm armvfp '"fadds s0, s0, s0"'
1829 enabled iwmmxt && check_asm iwmmxt '"wunpckelub wr6, wr4"'
1830 enabled mmi && check_asm mmi '"lq $2, 0($2)"'
1831 enabled neon && check_asm neon '"vadd.i16 q0, q0, q0"'
1832 enabled vis && check_asm vis '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc
1834 enabled vis && add_cflags -mcpu=ultrasparc -mtune=ultrasparc
1836 # ---
1837 # big/little-endian test
1838 check_cc <<EOF || die "endian test failed"
1839 unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
1841 od -A n -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
1843 # ---
1844 # check availability of some header files
1846 if check_func dlopen; then
1847 ldl=
1848 elif check_func dlopen -ldl; then
1849 ldl=-ldl
1852 check_func fork
1853 check_func gethrtime
1854 check_func getrusage
1855 check_func inet_aton $network_extralibs
1856 check_func memalign
1857 check_func mkstemp
1858 check_func posix_memalign
1859 check_func_headers io.h setmode
1860 check_func_headers windows.h GetProcessTimes
1862 check_header conio.h
1863 check_header dlfcn.h
1864 check_header malloc.h
1865 check_header poll.h
1866 check_header sys/mman.h
1867 check_header sys/resource.h
1868 check_header sys/select.h
1869 check_header termios.h
1870 check_header vdpau/vdpau.h
1871 check_header vdpau/vdpau_x11.h
1872 check_header X11/extensions/XvMClib.h
1874 if ! enabled_any memalign memalign_hack posix_memalign && enabled need_memalign ; then
1875 die "Error, no aligned memory allocator but SSE enabled, disable it or use --enable-memalign-hack."
1878 disabled zlib || check_lib zlib.h zlibVersion -lz || disable zlib
1879 disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
1881 # check for some common methods of building with pthread support
1882 # do this before the optional library checks as some of them require pthreads
1883 if enabled pthreads; then
1884 if check_func pthread_create; then
1886 elif check_func pthread_create -pthread; then
1887 add_cflags -pthread
1888 add_extralibs -pthread
1889 elif check_func pthread_create -pthreads; then
1890 add_cflags -pthreads
1891 add_extralibs -pthreads
1892 elif check_func pthread_create -lpthreadGC2; then
1893 add_extralibs -lpthreadGC2
1894 elif ! check_lib pthread.h pthread_create -lpthread; then
1895 die "ERROR: can't find pthreads library"
1899 for thread in $THREADS_LIST; do
1900 if enabled $thread; then
1901 test -n "$thread_type" &&
1902 die "ERROR: Only one thread type must be selected." ||
1903 thread_type="$thread"
1905 done
1907 check_lib math.h sin -lm
1909 # test for C99 functions in math.h
1910 for func in llrint lrint lrintf round roundf truncf; do
1911 check_exec <<EOF && enable $func || disable $func
1912 #include <math.h>
1913 int main(void) { return ($func(3.999f) > 0)?0:1; }
1915 done
1917 # these are off by default, so fail if requested and not available
1918 enabled avisynth && require2 vfw32 "windows.h vfw.h" AVIFileInit -lvfw32
1919 enabled libamr_nb && require libamrnb amrnb/interf_dec.h Speech_Decode_Frame_init -lamrnb -lm
1920 enabled libamr_wb && require libamrwb amrwb/dec_if.h D_IF_init -lamrwb -lm
1921 enabled libdirac && add_cflags $(pkg-config --cflags dirac) &&
1922 require libdirac libdirac_decoder/dirac_parser.h dirac_decoder_init -ldirac_decoder &&
1923 require libdirac libdirac_encoder/dirac_encoder.h dirac_encoder_init -ldirac_encoder
1924 enabled libfaac && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
1925 enabled libfaad && require2 libfaad faad.h faacDecOpen -lfaad
1926 enabled libgsm && require libgsm gsm.h gsm_create -lgsm
1927 enabled libmp3lame && require libmp3lame lame/lame.h lame_init -lmp3lame -lm
1928 enabled libnut && require libnut libnut.h nut_demuxer_init -lnut
1929 enabled libschroedinger && add_cflags $(pkg-config --cflags schroedinger-1.0) &&
1930 require libschroedinger schroedinger/schro.h schro_init $(pkg-config --libs schroedinger-1.0)
1931 enabled libspeex && require libspeex speex/speex.h speex_decoder_init -lspeex
1932 enabled libtheora && require libtheora theora/theora.h theora_info_init -ltheora -logg
1933 enabled libvorbis && require libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
1934 enabled libx264 && require libx264 x264.h x264_encoder_open -lx264 -lm &&
1935 { check_cpp_condition x264.h "X264_BUILD >= 65" ||
1936 die "ERROR: libx264 version must be >= 0.65."; }
1937 enabled libxvid && require libxvid xvid.h xvid_global -lxvidcore
1938 enabled mlib && require mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
1940 # libdc1394 check
1941 if enabled libdc1394; then
1942 { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
1943 enable libdc1394_2; } ||
1944 { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
1945 enable libdc1394_1; } ||
1946 die "ERROR: No version of libdc1394 found "
1950 _restrict=
1951 for restrict_keyword in restrict __restrict__ __restrict; do
1952 check_cc <<EOF && _restrict=$restrict_keyword && break
1953 void foo(char * $restrict_keyword p);
1955 done
1957 test "$vhook" = "default" && vhook="$dlopen"
1959 if test "$target_os" = cygwin -o "$target_os" = mingw32 && enabled_all static vhook ; then
1960 disable vhook
1961 echo
1962 echo "At the moment vhooks don't work on Cygwin or MinGW static builds."
1963 echo "Patches welcome."
1964 echo
1967 if enabled vhook; then
1968 check_ldflags -rdynamic
1969 check_ldflags -export-dynamic
1972 check_foo_config imlib2 imlib2 Imlib2.h imlib_load_font
1973 check_foo_config freetype2 freetype ft2build.h FT_Init_FreeType
1975 ##########################################
1976 # SDL check
1978 disable sdl_too_old
1979 disable sdl
1980 SDL_CONFIG="${cross_prefix}sdl-config"
1981 if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
1982 sdl_cflags=`"${SDL_CONFIG}" --cflags`
1983 temp_cflags $sdl_cflags
1984 temp_extralibs `"${SDL_CONFIG}" --libs`
1985 if check_lib2 SDL.h SDL_Init; then
1986 _sdlversion=`"${SDL_CONFIG}" --version | sed 's/[^0-9]//g'`
1987 if test "$_sdlversion" -lt 121 ; then
1988 enable sdl_too_old
1989 else
1990 enable sdl
1991 check_cc $sdl_cflags <<EOF && enable sdl_video_size
1992 #include <SDL.h>
1993 int main(int argc, char **argv){
1994 const SDL_VideoInfo *vi = SDL_GetVideoInfo();
1995 int w = vi->current_w;
1996 return 0;
2001 restore_flags
2004 texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
2006 ##########################################
2007 # Network check
2009 if enabled network; then
2010 check_type "sys/types.h sys/socket.h" socklen_t
2011 # Prefer arpa/inet.h over winsock2
2012 if check_header arpa/inet.h ; then
2013 check_func closesocket
2014 elif check_header winsock2.h ; then
2015 network_extralibs="-lws2_32"
2016 check_type ws2tcpip.h socklen_t
2017 check_func_headers winsock2.h closesocket
2021 ##########################################
2022 # IPv6 check
2024 enabled network && enabled ipv6 && check_ld <<EOF && enable ipv6 || disable ipv6
2025 #include <sys/types.h>
2026 #include <sys/socket.h>
2027 #include <netinet/in.h>
2028 #include <netdb.h>
2029 int main(void) {
2030 struct sockaddr_storage saddr;
2031 struct ipv6_mreq mreq6;
2032 getaddrinfo(0,0,0,0);
2033 getnameinfo(0,0,0,0,0,0,0);
2034 IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
2038 check_header linux/videodev.h
2039 check_header linux/videodev2.h
2040 check_header sys/videoio.h
2042 check_func_headers "windows.h vfw.h" capCreateCaptureWindow -lvfw32
2044 # check for ioctl_meteor.h, ioctl_bt848.h and alternatives
2045 { check_header dev/bktr/ioctl_meteor.h &&
2046 check_header dev/bktr/ioctl_bt848.h; } ||
2047 { check_header machine/ioctl_meteor.h &&
2048 check_header machine/ioctl_bt848.h; } ||
2049 { check_header dev/video/meteor/ioctl_meteor.h &&
2050 check_header dev/video/bktr/ioctl_bt848.h; } ||
2051 check_header dev/ic/bt8xx.h
2053 check_header sys/soundcard.h
2054 check_header soundcard.h
2056 check_header alsa/asoundlib.h &&
2057 check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
2059 # deal with the X11 frame grabber
2060 enabled x11grab &&
2061 check_header X11/Xlib.h &&
2062 check_header X11/extensions/XShm.h &&
2063 check_func XOpenDisplay -lX11 &&
2064 check_func XShmCreateImage -lX11 -lXext
2066 enabled debug && add_cflags -g"$debuglevel"
2068 # add some useful compiler flags if supported
2069 check_cflags -Wdeclaration-after-statement
2070 check_cflags -Wall
2071 check_cflags -Wno-switch
2072 check_cflags -Wdisabled-optimization
2073 check_cflags -Wpointer-arith
2074 check_cflags -Wredundant-decls
2075 check_cflags -Wno-pointer-sign
2076 check_cflags -Wcast-qual
2077 check_cflags -Wwrite-strings
2078 check_cflags -Wtype-limits
2079 check_cflags -Wundef
2080 enabled extra_warnings && check_cflags -Winline
2082 # add some linker flags
2083 check_ldflags -Wl,--warn-common
2084 check_ldflags -Wl,--as-needed
2085 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'
2086 check_ldflags -Wl,-Bsymbolic
2088 if enabled small; then
2089 check_cflags -Os # not all compilers support -Os
2090 optimizations="small"
2091 elif enabled optimizations; then
2092 if $cc -v 2>&1 | grep -q xlc; then
2093 add_cflags -O5
2094 add_ldflags -O5
2095 else
2096 add_cflags -O3
2099 check_cflags -fno-math-errno
2100 check_cflags -fno-signed-zeros
2102 # add some flags for Intel C Compiler
2103 if $cc --version 2> /dev/null | grep -q Intel; then
2104 # Just warnings, no remarks
2105 check_cflags -w1
2106 # -wd: Disable following warnings
2107 # 144, 167, 556: -Wno-pointer-sign
2108 # 10006: ignoring unknown option -fno-signed-zeros
2109 # 10156: ignoring option '-W'; no argument required
2110 check_cflags -wd144,167,556,10006,10156
2111 # 11030: Warning unknown option --as-needed
2112 # 10156: ignoring option '-export'; no argument required
2113 check_ldflags -wd10156,11030
2114 # Allow to compile with optimizations
2115 check_ldflags -march=$cpu
2118 # PIC flags for shared library objects where they are needed
2119 if enabled shared; then
2120 # LIBOBJFLAGS may have already been set in the OS configuration
2121 if test -z "$LIBOBJFLAGS" ; then
2122 case "${subarch-$arch}" in
2123 x86_64|ia64|alpha|sparc*|power*|parisc*|mips*) LIBOBJFLAGS='$(PIC)' ;;
2124 esac
2128 if enabled gprof; then
2129 add_cflags -p
2130 add_ldflags -p
2133 VHOOKCFLAGS="-fPIC"
2135 # Find out if the .align argument is a power of two or not.
2136 check_asm asmalign_pot '".align 3"'
2138 enabled_any $DECODER_LIST && enable decoders
2139 enabled_any $ENCODER_LIST && enable encoders
2140 enabled_any $BSF_LIST && enable bsfs
2141 enabled_any $DEMUXER_LIST && enable demuxers
2142 enabled_any $MUXER_LIST && enable muxers
2143 enabled_any $FILTER_LIST && enable filters
2144 enabled_any $INDEV_LIST && enable demuxers
2145 enabled_any $OUTDEV_LIST && enable muxers
2146 enabled_any $PROTOCOL_LIST && enable protocols
2148 enabled_any $THREADS_LIST && enable threads
2150 check_deps $CONFIG_LIST \
2151 $CONFIG_EXTRA \
2152 $HAVE_LIST \
2153 $DECODER_LIST \
2154 $ENCODER_LIST \
2155 $PARSER_LIST \
2156 $BSF_LIST \
2157 $DEMUXER_LIST \
2158 $MUXER_LIST \
2159 $FILTER_LIST \
2160 $INDEV_LIST \
2161 $OUTDEV_LIST \
2162 $PROTOCOL_LIST \
2164 echo "install prefix $prefix"
2165 echo "source path $source_path"
2166 echo "C compiler $cc"
2167 echo ".align is power-of-two $asmalign_pot"
2168 echo "ARCH $arch ($cpu)"
2169 if test "$build_suffix" != ""; then
2170 echo "build suffix $build_suffix"
2172 if test "$extra_version" != ""; then
2173 echo "version string suffix $extra_version"
2175 echo "big-endian ${bigendian-no}"
2176 if enabled x86; then
2177 echo "yasm ${yasm-no}"
2178 echo "MMX enabled ${mmx-no}"
2179 echo "MMX2 enabled ${mmx2-no}"
2180 echo "3DNow! enabled ${amd3dnow-no}"
2181 echo "SSE enabled ${sse-no}"
2182 echo "SSSE3 enabled ${ssse3-no}"
2183 echo "CMOV enabled ${cmov-no}"
2184 echo "CMOV is fast ${fast_cmov-no}"
2185 echo "EBX available ${ebx_available-no}"
2186 echo "EBP available ${ebp_available-no}"
2188 if enabled arm; then
2189 echo "ARMv5TE enabled ${armv5te-no}"
2190 echo "ARMv6 enabled ${armv6-no}"
2191 echo "ARMv6T2 enabled ${armv6t2-no}"
2192 echo "ARM VFP enabled ${armvfp-no}"
2193 echo "IWMMXT enabled ${iwmmxt-no}"
2194 echo "NEON enabled ${neon-no}"
2196 if enabled mips; then
2197 echo "MMI enabled ${mmi-no}"
2199 if enabled ppc; then
2200 echo "AltiVec enabled ${altivec-no}"
2201 echo "PPC 4xx optimizations ${ppc4xx-no}"
2202 echo "dcbzl available ${dcbzl-no}"
2203 echo "performance report ${powerpc_perf-no}"
2205 if enabled sparc; then
2206 echo "VIS enabled ${vis-no}"
2208 echo "gprof enabled ${gprof-no}"
2209 echo "debug symbols ${debug-no}"
2210 echo "strip symbols ${stripping-no}"
2211 echo "optimizations ${optimizations-no}"
2212 echo "static ${static-no}"
2213 echo "shared ${shared-no}"
2214 echo "postprocessing support ${postproc-no}"
2215 echo "software scaler enabled ${swscale-no}"
2216 echo "new filter support ${avfilter-no}"
2217 echo "filters using lavformat ${avfilter_lavf-no}"
2218 echo "video hooking ${vhook-no}"
2219 if enabled vhook; then
2220 echo "Imlib2 support ${imlib2-no}"
2221 echo "FreeType support ${freetype2-no}"
2223 echo "network support ${network-no}"
2224 if enabled network; then
2225 echo "IPv6 support ${ipv6-no}"
2227 echo "threading support ${thread_type-no}"
2228 echo "SDL support ${sdl-no}"
2229 if enabled sdl_too_old; then
2230 echo "-> Your SDL version is too old - please upgrade to have FFplay/SDL support."
2232 echo "Sun medialib support ${mlib-no}"
2233 echo "AVISynth enabled ${avisynth-no}"
2234 echo "libamr-nb support ${libamr_nb-no}"
2235 echo "libamr-wb support ${libamr_wb-no}"
2236 echo "libdc1394 support ${libdc1394-no}"
2237 echo "libdirac enabled ${libdirac-no}"
2238 echo "libfaac enabled ${libfaac-no}"
2239 echo "libfaad enabled ${libfaad-no}"
2240 echo "libfaad dlopened ${libfaadbin-no}"
2241 echo "libgsm enabled ${libgsm-no}"
2242 echo "libmp3lame enabled ${libmp3lame-no}"
2243 echo "libnut enabled ${libnut-no}"
2244 echo "libschroedinger enabled ${libschroedinger-no}"
2245 echo "libspeex enabled ${libspeex-no}"
2246 echo "libtheora enabled ${libtheora-no}"
2247 echo "libvorbis enabled ${libvorbis-no}"
2248 echo "libx264 enabled ${libx264-no}"
2249 echo "libxvid enabled ${libxvid-no}"
2250 echo "vdpau enabled ${vdpau-no}"
2251 echo "zlib enabled ${zlib-no}"
2252 echo "bzlib enabled ${bzlib-no}"
2253 echo
2255 for type in decoder encoder parser demuxer muxer protocol filter bsf indev outdev; do
2256 echo "Enabled ${type}s:"
2257 eval list=\$$(toupper $type)_LIST
2258 for part in $list; do
2259 enabled $part && echo ${part%_*}
2260 done | sort | pr -3 -t
2261 echo
2262 done
2264 license="LGPL"
2265 if enabled nonfree; then
2266 license="unredistributable"
2267 elif enabled gpl; then
2268 license="GPL"
2271 echo "License: $license"
2273 echo "Creating config.mak and config.h..."
2275 echo "# Automatically generated by configure - do not modify!" > config.mak
2276 echo "/* Automatically generated by configure - do not modify! */" > $TMPH
2277 echo "#ifndef FFMPEG_CONFIG_H" >> $TMPH
2278 echo "#define FFMPEG_CONFIG_H" >> $TMPH
2279 echo "#define FFMPEG_CONFIGURATION \"$FFMPEG_CONFIGURATION\"" >> $TMPH
2280 echo "#define FFMPEG_DATADIR \"$(eval c_escape $datadir)\"" >> $TMPH
2282 echo "FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION" >> config.mak
2283 echo "prefix=$prefix" >> config.mak
2284 echo "LIBDIR=\$(DESTDIR)$libdir" >> config.mak
2285 echo "SHLIBDIR=\$(DESTDIR)$shlibdir" >> config.mak
2286 echo "INCDIR=\$(DESTDIR)$incdir" >> config.mak
2287 echo "BINDIR=\$(DESTDIR)$bindir" >> config.mak
2288 echo "DATADIR=\$(DESTDIR)$datadir" >> config.mak
2289 echo "MANDIR=\$(DESTDIR)$mandir" >> config.mak
2290 echo "CC=$cc" >> config.mak
2291 echo "YASM=$yasmexe" >> config.mak
2292 echo "AR=$ar" >> config.mak
2293 echo "RANLIB=$ranlib" >> config.mak
2294 echo "LN_S=$ln_s" >> config.mak
2295 enabled stripping &&
2296 echo "STRIP=$strip" >> config.mak ||
2297 echo "STRIP=echo ignoring strip" >> config.mak
2299 echo "OPTFLAGS=$CFLAGS" >> config.mak
2300 echo "VHOOKCFLAGS=$VHOOKCFLAGS" >> config.mak
2301 echo "LDFLAGS=$LDFLAGS" >> config.mak
2302 echo "FFSERVERLDFLAGS=$FFSERVERLDFLAGS" >> config.mak
2303 echo "SHFLAGS=$SHFLAGS" >> config.mak
2304 echo "YASMFLAGS=$YASMFLAGS" >> config.mak
2305 echo "VHOOKSHFLAGS=$VHOOKSHFLAGS" >> config.mak
2306 echo "VHOOKLIBS=$VHOOKLIBS" >> config.mak
2307 echo "LIBOBJFLAGS=$LIBOBJFLAGS" >> config.mak
2308 echo "BUILD_STATIC=$static" >> config.mak
2309 echo "BUILDSUF=$build_suffix" >> config.mak
2310 echo "FULLNAME=$FULLNAME" >> config.mak
2311 echo "LIBPREF=$LIBPREF" >> config.mak
2312 echo "LIBSUF=$LIBSUF" >> config.mak
2313 echo "LIBNAME=$LIBNAME" >> config.mak
2314 echo "SLIBPREF=$SLIBPREF" >> config.mak
2315 echo "SLIBSUF=$SLIBSUF" >> config.mak
2316 echo "EXESUF=$EXESUF" >> config.mak
2317 echo "EXTRA_VERSION=$extra_version" >> config.mak
2318 echo "DEPEND_CMD=$DEPEND_CMD" >> config.mak
2319 echo "HOSTCC=$host_cc" >> config.mak
2320 echo "HOSTCFLAGS=$host_cflags" >> config.mak
2321 echo "HOSTLDFLAGS=$host_ldflags" >> config.mak
2322 echo "HOSTLIBS=$host_libs" >> config.mak
2323 echo "TARGET_EXEC=$target_exec" >> config.mak
2324 echo "TARGET_PATH=$target_path" >> config.mak
2326 if enabled bigendian; then
2327 echo "WORDS_BIGENDIAN=yes" >> config.mak
2328 echo "#define WORDS_BIGENDIAN 1" >> $TMPH
2331 if enabled sdl; then
2332 echo "SDL_LIBS=`"${SDL_CONFIG}" --libs`" >> config.mak
2333 echo "SDL_CFLAGS=`"${SDL_CONFIG}" --cflags`" >> config.mak
2335 if enabled texi2html; then
2336 echo "BUILD_DOC=yes" >> config.mak
2339 get_version(){
2340 name=$1
2341 file=$source_path/$2
2342 eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
2343 eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
2344 lcname=$(tolower $name)
2345 eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
2346 eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
2349 get_version LIBSWSCALE libswscale/swscale.h
2350 get_version LIBPOSTPROC libpostproc/postprocess.h
2351 get_version LIBAVCODEC libavcodec/avcodec.h
2352 get_version LIBAVDEVICE libavdevice/avdevice.h
2353 get_version LIBAVFORMAT libavformat/avformat.h
2354 get_version LIBAVUTIL libavutil/avutil.h
2355 get_version LIBAVFILTER libavfilter/avfilter.h
2357 if enabled shared; then
2358 echo "BUILD_SHARED=yes" >> config.mak
2359 echo "PIC=-fPIC -DPIC" >> config.mak
2360 echo "LIBTARGET=${LIBTARGET}" >> config.mak
2361 echo "SLIBNAME=${SLIBNAME}" >> config.mak
2362 echo "SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}" >> config.mak
2363 echo "SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}" >> config.mak
2364 echo "SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}" >> config.mak
2365 echo "SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}" >> config.mak
2366 echo "SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}" >> config.mak
2367 echo "SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}" >> config.mak
2369 echo "LIB_INSTALL_EXTRA_CMD=${LIB_INSTALL_EXTRA_CMD}" >> config.mak
2370 echo "EXTRALIBS=$extralibs" >> config.mak
2372 echo "ARCH=$arch" >> config.mak
2374 print_config ARCH_ $TMPH config.mak $ARCH_LIST
2375 print_config HAVE_ $TMPH config.mak $HAVE_LIST
2376 print_config CONFIG_ $TMPH config.mak $CONFIG_LIST \
2377 $CONFIG_EXTRA \
2378 $DECODER_LIST \
2379 $ENCODER_LIST \
2380 $PARSER_LIST \
2381 $BSF_LIST \
2382 $DEMUXER_LIST \
2383 $MUXER_LIST \
2384 $FILTER_LIST \
2385 $PROTOCOL_LIST \
2386 $INDEV_LIST \
2387 $OUTDEV_LIST \
2389 echo "#define restrict $_restrict" >> $TMPH
2391 if enabled small; then
2392 echo "#define av_always_inline" >> $TMPH
2395 echo "SRC_PATH=\"$source_path\"" >> config.mak
2396 echo "SRC_PATH_BARE=$source_path" >> config.mak
2397 echo "BUILD_ROOT=\"$PWD\"" >> config.mak
2399 # Apparently it's not possible to portably echo a backslash.
2400 enabled asmalign_pot &&
2401 printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH ||
2402 printf '#define ASMALIGN(ZEROBITS) ".align 1 << " #ZEROBITS "\\n\\t"\n' >> $TMPH
2404 echo "#define EXTERN_PREFIX \"${extern_prefix}\"" >> $TMPH
2406 echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
2408 # Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
2409 cmp -s $TMPH config.h &&
2410 echo "config.h is unchanged" ||
2411 mv -f $TMPH config.h
2413 rm -f $TMPC $TMPE $TMPH $TMPO $TMPS $TMPSH
2415 # build tree in object directory if source path is different from current one
2416 if enabled source_path_used; then
2417 DIRS="\
2418 doc \
2419 libavcodec \
2420 libavcodec/alpha \
2421 libavcodec/arm \
2422 libavcodec/bfin \
2423 libavcodec/mlib \
2424 libavcodec/ppc \
2425 libavcodec/sh4 \
2426 libavcodec/sparc \
2427 libavcodec/x86 \
2428 libavdevice \
2429 libavfilter \
2430 libavformat \
2431 libavutil \
2432 libpostproc \
2433 libswscale \
2434 tests \
2435 tools \
2436 vhook \
2438 FILES="\
2439 Makefile \
2440 common.mak \
2441 subdir.mak \
2442 doc/texi2pod.pl \
2443 libavcodec/Makefile \
2444 libavdevice/Makefile \
2445 libavfilter/Makefile \
2446 libavformat/Makefile \
2447 libavutil/Makefile \
2448 libpostproc/Makefile \
2449 libswscale/Makefile \
2451 for dir in $DIRS ; do
2452 mkdir -p $dir
2453 done
2454 for f in $FILES ; do
2455 $ln_s "$source_path/$f" $f
2456 done
2460 # build pkg-config files
2462 pkgconfig_generate(){
2463 name=$1
2464 shortname=${name#lib}${build_suffix}
2465 comment=$2
2466 version=$3
2467 libs=$4
2468 requires=$5
2469 cat <<EOF > $name/$name.pc
2470 prefix=$prefix
2471 exec_prefix=\${prefix}
2472 libdir=$libdir
2473 includedir=$incdir
2475 Name: $name
2476 Description: $comment
2477 Version: $version
2478 Requires: $(disabled shared && echo $requires)
2479 Requires.private: $(enabled shared && echo $requires)
2480 Conflicts:
2481 Libs: -L\${libdir} -l${shortname} $(disabled shared && echo $libs)
2482 Libs.private: $(enabled shared && echo $libs)
2483 Cflags: -I\${includedir}
2485 cat <<EOF > $name/$name-uninstalled.pc
2486 prefix=
2487 exec_prefix=
2488 libdir=\${pcfiledir}
2489 includedir=${source_path}
2491 Name: $name
2492 Description: $comment
2493 Version: $version
2494 Requires: $requires
2495 Conflicts:
2496 Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
2497 Cflags: -I\${includedir}
2501 pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
2502 pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
2503 pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
2504 pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "libavformat = $LIBAVFORMAT_VERSION"
2505 enabled avfilter &&
2506 pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
2507 enabled postproc &&
2508 pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
2509 if enabled swscale; then
2510 pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"
2511 else
2512 pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavcodec = $LIBAVCODEC_VERSION"
2513 apply libswscale/libswscale.pc sed s/^Libs:.*$/Libs:/