Don't install rtsp.h. It is intended to be private, it depends on rtp code
[ffmpeg-lucabe.git] / configure
blob383814592a1346c35f73b60538a06b7131c223ba
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 " --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 " --disable-yasm disable use of yasm assembler"
211 echo
212 echo "Developer options (useful when working on FFmpeg itself):"
213 echo " --disable-debug disable debugging symbols"
214 echo " --enable-debug=LEVEL set the debug level [$debuglevel]"
215 echo " --enable-gprof enable profiling with gprof [$gprof]"
216 echo " --disable-optimizations disable compiler optimizations"
217 echo " --enable-extra-warnings enable more compiler warnings"
218 echo " --disable-stripping disable stripping of executables and shared libraries"
219 echo ""
220 echo "NOTE: Object files are built at the place where configure is launched."
221 exit 0
224 log(){
225 echo "$@" >> $logfile
228 log_file(){
229 log BEGIN $1
230 pr -n -t $1 >> $logfile
231 log END $1
234 echolog(){
235 log "$@"
236 echo "$@"
239 die(){
240 echolog "$@"
241 cat <<EOF
242 If you think configure made a mistake, make sure you are using the latest
243 version from SVN. If the latest version fails, report the problem to the
244 ffmpeg-user@mplayerhq.hu mailing list or IRC #ffmpeg on irc.freenode.net.
246 if disabled logging; then
247 cat <<EOF
248 Rerun configure with logging enabled (do not use --disable-logging), and
249 include the log this produces with your report.
251 else
252 cat <<EOF
253 Include the log file "$logfile" produced by configure as this will help
254 solving the problem.
257 rm -f $TMPC $TMPE $TMPH $TMPO $TMPS $TMPSH
258 exit 1
261 # Avoid locale weirdness, besides we really just want to translate ASCII.
262 toupper(){
263 echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
266 tolower(){
267 echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
270 c_escape(){
271 echo "$*" | sed 's/["\\]/\\\0/g'
274 set_all(){
275 value=$1
276 shift
277 for var in $*; do
278 eval $var=$value
279 done
282 set_weak(){
283 value=$1
284 shift
285 for var; do
286 eval : \${$var:=$value}
287 done
290 pushvar(){
291 for var in $*; do
292 eval level=\${${var}_level:=0}
293 eval ${var}_${level}="\$$var"
294 eval ${var}_level=$(($level+1))
295 done
298 popvar(){
299 for var in $*; do
300 eval level=\${${var}_level:-0}
301 test $level = 0 && continue
302 eval level=$(($level-1))
303 eval $var="\${${var}_${level}}"
304 eval ${var}_level=$level
305 eval unset ${var}_${level}
306 done
309 enable(){
310 set_all yes $*
313 disable(){
314 set_all no $*
317 enable_weak(){
318 set_weak yes $*
321 disable_weak(){
322 set_weak no $*
325 do_enable_deep(){
326 for var; do
327 enabled $var && continue
328 eval sel="\$${var}_select"
329 eval sgs="\$${var}_suggest"
330 pushvar var sgs
331 enable_deep $sel
332 popvar sgs
333 enable_deep_weak $sgs
334 popvar var
335 done
338 enable_deep(){
339 do_enable_deep $*
340 enable $*
343 enable_deep_weak(){
344 do_enable_deep $*
345 enable_weak $*
348 enabled(){
349 test "${1#!}" = "$1" && op== || op=!=
350 eval test "x\$${1#!}" $op "xyes"
353 disabled(){
354 test "${1#!}" = "$1" && op== || op=!=
355 eval test "x\$${1#!}" $op "xno"
358 enabled_all(){
359 for opt; do
360 enabled $opt || return 1
361 done
364 disabled_all(){
365 for opt; do
366 disabled $opt || return 1
367 done
370 enabled_any(){
371 for opt; do
372 enabled $opt && return 0
373 done
376 disabled_any(){
377 for opt; do
378 disabled $opt && return 0
379 done
380 return 1
383 set_default(){
384 for opt; do
385 eval : \${$opt:=\$${opt}_default}
386 done
389 is_in(){
390 value=$1
391 shift
392 for var in $*; do
393 [ $var = $value ] && return 0
394 done
395 return 1
398 check_deps(){
399 for cfg; do
400 cfg="${cfg#!}"
401 enabled ${cfg}_checking && die "Circular dependency for $cfg."
402 disabled ${cfg}_checking && continue
403 enable ${cfg}_checking
405 eval dep_all="\$${cfg}_deps"
406 eval dep_any="\$${cfg}_deps_any"
407 eval dep_sel="\$${cfg}_select"
408 eval dep_sgs="\$${cfg}_suggest"
410 pushvar cfg dep_all dep_any dep_sel dep_sgs
411 check_deps $dep_all $dep_any $dep_sel $dep_sgs
412 popvar cfg dep_all dep_any dep_sel dep_sgs
414 enabled_all $dep_all || disable $cfg
415 enabled_any $dep_any || disable $cfg
416 disabled_any $dep_sel && disable $cfg
418 if enabled $cfg; then
419 eval dep_extralibs="\$${cfg}_extralibs"
420 test -n "$dep_extralibs" && add_extralibs $dep_extralibs
421 enable_deep $dep_sel
422 enable_deep_weak $dep_sgs
425 disable ${cfg}_checking
426 done
429 print_config(){
430 pfx=$1
431 header=$2
432 makefile=$3
433 shift 3
434 for cfg; do
435 ucname="`toupper $cfg`"
436 if enabled $cfg; then
437 echo "#define ${pfx}${ucname} 1" >> $header
438 echo "${pfx}${ucname}=yes" >> $makefile
439 else
440 echo "#define ${pfx}${ucname} 0" >> $header
442 done
445 flags_saved(){
446 (: ${SAVE_CFLAGS?}) 2> /dev/null
449 save_flags(){
450 flags_saved && return
451 SAVE_CFLAGS="$CFLAGS"
452 SAVE_LDFLAGS="$LDFLAGS"
453 SAVE_extralibs="$extralibs"
456 restore_flags(){
457 flags_saved || return
458 CFLAGS="$SAVE_CFLAGS"
459 LDFLAGS="$SAVE_LDFLAGS"
460 extralibs="$SAVE_extralibs"
461 unset SAVE_CFLAGS
462 unset SAVE_LDFLAGS
463 unset SAVE_extralibs
466 temp_cflags(){
467 save_flags
468 CFLAGS="$CFLAGS $*"
471 temp_ldflags(){
472 save_flags
473 LDFLAGS="$LDFLAGS $*"
476 temp_extralibs(){
477 save_flags
478 extralibs="$extralibs $*"
481 append(){
482 var=$1
483 shift
484 flags_saved && eval "SAVE_$var=\"\$SAVE_$var $*\""
485 eval "$var=\"\$$var $*\""
488 add_cflags(){
489 append CFLAGS "$@"
492 add_ldflags(){
493 append LDFLAGS "$@"
496 add_extralibs(){
497 append extralibs "$@"
500 check_cmd(){
501 log "$@"
502 "$@" >> $logfile 2>&1
505 check_cc(){
506 log check_cc "$@"
507 cat > $TMPC
508 log_file $TMPC
509 check_cmd $cc $CFLAGS "$@" -c -o $TMPO $TMPC
512 check_cpp(){
513 log check_cpp "$@"
514 cat > $TMPC
515 log_file $TMPC
516 check_cmd $cc $CFLAGS "$@" -E -o $TMPO $TMPC
519 check_asm(){
520 log check_asm "$@"
521 name="$1"
522 asm="$2"
523 shift 2
524 check_cc "$@" <<EOF && enable $name || disable $name
525 void foo(void){ __asm__ volatile($asm); }
529 check_yasm(){
530 log check_yasm "$@"
531 echo "$1" > $TMPS
532 log_file $TMPS
533 shift 1
534 check_cmd $yasmexe $YASMFLAGS "$@" -o $TMPO $TMPS
537 check_ld(){
538 log check_ld "$@"
539 check_cc || return
540 flags=''
541 libs=''
542 for f; do
543 test "${f}" = "${f#-l}" && flags="$flags $f" || libs="$libs $f"
544 done
545 check_cmd $cc $LDFLAGS $flags -o $TMPE $TMPO $extralibs $libs
548 check_cflags(){
549 log check_cflags "$@"
550 check_cc "$@" <<EOF && add_cflags "$@"
551 int x;
555 check_ldflags(){
556 log check_ldflags "$@"
557 check_ld "$@" <<EOF && add_ldflags "$@"
558 int main(void){ return 0; }
562 check_header(){
563 log check_header "$@"
564 header=$1
565 shift
566 var=`echo $header | sed 's/[^A-Za-z0-9_]/_/g'`
567 disable $var
568 check_cpp "$@" <<EOF && enable $var
569 #include <$header>
570 int x;
574 check_func(){
575 log check_func "$@"
576 func=$1
577 shift
578 disable $func
579 check_ld "$@" <<EOF && enable $func
580 extern int $func();
581 int main(void){ $func(); }
585 check_func_headers(){
586 log check_func_headers "$@"
587 headers=$1
588 func=$2
589 shift 2
590 disable $func
591 incs=""
592 for hdr in $headers; do
593 incs="$incs
594 #include <$hdr>"
595 done
596 check_ld "$@" <<EOF && enable $func
597 $incs
598 int main(int argc, char **argv){
599 (void) $func;
600 return 0;
605 check_cpp_condition(){
606 log check_cpp_condition "$@"
607 header=$1
608 condition=$2
609 check_cpp <<EOF
610 #include <$header>
611 #if !($condition)
612 #error "unsatisfied condition: $condition"
613 #endif
617 check_lib(){
618 log check_lib "$@"
619 header="$1"
620 func="$2"
621 shift 2
622 temp_extralibs "$@"
623 check_header $header && check_func $func && add_extralibs "$@"
624 err=$?
625 restore_flags
626 return $err
629 check_lib2(){
630 log check_lib2 "$@"
631 headers="$1"
632 func="$2"
633 shift 2
634 temp_extralibs "$@"
635 check_func_headers "$headers" $func && add_extralibs "$@"
636 err=$?
637 restore_flags
638 return $err
641 check_exec(){
642 check_ld "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
645 check_exec_crash(){
646 code=`cat`
648 # exit() is not async signal safe. _Exit (C99) and _exit (POSIX)
649 # are safe but may not be available everywhere. Thus we use
650 # raise(SIGTERM) instead. The check is run in a subshell so we
651 # can redirect the "Terminated" message from the shell. SIGBUS
652 # is not defined by standard C so it is used conditionally.
654 (check_exec "$@") >> $logfile 2>&1 <<EOF
655 #include <signal.h>
656 static void sighandler(int sig){
657 raise(SIGTERM);
659 int main(void){
660 signal(SIGILL, sighandler);
661 signal(SIGFPE, sighandler);
662 signal(SIGSEGV, sighandler);
663 #ifdef SIGBUS
664 signal(SIGBUS, sighandler);
665 #endif
666 { $code }
671 check_type(){
672 log check_type "$@"
673 headers=$1
674 type=$2
675 shift 2
676 disable $type
677 incs=""
678 for hdr in $headers; do
679 incs="$incs
680 #include <$hdr>"
681 done
682 check_cc "$@" <<EOF && enable $type
683 $incs
684 $type v;
688 require(){
689 name="$1"
690 header="$2"
691 func="$3"
692 shift 3
693 check_lib $header $func "$@" || die "ERROR: $name not found"
696 require2(){
697 name="$1"
698 headers="$2"
699 func="$3"
700 shift 3
701 check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
704 check_foo_config(){
705 cfg=$1
706 pkg=$2
707 header=$3
708 func=$4
709 shift 4
710 disable $cfg
711 check_cmd ${pkg}-config --version
712 err=$?
713 if test "$err" = 0; then
714 temp_cflags `${pkg}-config --cflags`
715 temp_extralibs `${pkg}-config --libs`
716 check_lib "$@" $header $func && enable $cfg
718 return $err
721 apply(){
722 file=$1
723 shift
724 "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
727 # CONFIG_LIST contains configurable options, while HAVE_LIST is for
728 # system-dependent things.
730 COMPONENT_LIST="
731 bsfs
732 decoders
733 demuxers
734 encoders
735 filters
736 indevs
737 muxers
738 outdevs
739 parsers
740 protocols
743 CONFIG_LIST="
744 $COMPONENT_LIST
745 aandct
746 avfilter
747 avfilter_lavf
748 avisynth
749 beos_netserver
750 bzlib
751 fastdiv
752 ffmpeg
753 ffplay
754 ffserver
756 golomb
758 gprof
759 gray
760 hardcoded_tables
761 ipv6
762 libamr_nb
763 libamr_wb
764 libdc1394
765 libdirac
766 libfaac
767 libfaad
768 libfaadbin
769 libgsm
770 libmp3lame
771 libnut
772 libopenjpeg
773 libschroedinger
774 libspeex
775 libtheora
776 libvorbis
777 libx264
778 libxvid
779 mdct
780 memalign_hack
781 mlib
782 mpegaudio_hp
783 network
784 nonfree
785 postproc
786 powerpc_perf
787 rdft
788 shared
789 small
790 static
791 swscale
792 vdpau
793 vhook
794 x11grab
795 zlib
798 THREADS_LIST='
799 beosthreads
800 os2threads
801 pthreads
802 w32threads
805 ARCH_LIST='
806 alpha
808 bfin
809 ia64
810 m68k
811 mips
812 parisc
814 s390
816 sparc
817 sparc64
819 x86_32
820 x86_64
823 ARCH_EXT_LIST='
824 altivec
825 amd3dnow
826 armv5te
827 armv6
828 armv6t2
829 armvfp
830 iwmmxt
833 mmx2
834 neon
835 ppc4xx
837 ssse3
841 HAVE_LIST="
842 $ARCH_EXT_LIST
843 $THREADS_LIST
844 alsa_asoundlib_h
845 altivec_h
846 arpa_inet_h
847 bswap
848 closesocket
849 cmov
850 conio_h
851 dcbzl
852 dev_bktr_ioctl_bt848_h
853 dev_bktr_ioctl_meteor_h
854 dev_ic_bt8xx_h
855 dev_video_meteor_ioctl_meteor_h
856 dev_video_bktr_ioctl_bt848_h
857 dlfcn_h
858 dlopen
859 dos_paths
860 ebp_available
861 ebx_available
862 fast_64bit
863 fast_cmov
864 fast_unaligned
865 fork
866 freetype2
867 gethrtime
868 GetProcessTimes
869 getrusage
870 imlib2
871 inet_aton
872 inline_asm
873 libdc1394_1
874 libdc1394_2
875 llrint
876 lrint
877 lrintf
878 machine_ioctl_bt848_h
879 machine_ioctl_meteor_h
880 malloc_h
881 memalign
882 mkstemp
884 posix_memalign
885 ppc64
886 round
887 roundf
889 sdl_video_size
890 setmode
891 socklen_t
892 soundcard_h
893 poll_h
894 sys_mman_h
895 sys_resource_h
896 sys_select_h
897 sys_soundcard_h
898 sys_videoio_h
899 ten_operands
900 termios_h
901 threads
902 truncf
903 winsock2_h
904 yasm
907 # options emitted with CONFIG_ prefix but not available on command line
908 CONFIG_EXTRA="
909 fft_mmx
910 oldscaler
913 CMDLINE_SELECT="
914 $ARCH_EXT_LIST
915 $CONFIG_LIST
916 $THREADS_LIST
917 cross_compile
918 debug
919 extra_warnings
920 logging
921 optimizations
922 stripping
923 yasm
926 PATHS_LIST='
927 bindir
928 datadir
929 incdir
930 libdir
931 mandir
932 prefix
933 shlibdir
936 CMDLINE_SET="
937 $PATHS_LIST
938 arch
939 build_suffix
942 cross_prefix
943 extra_version
944 host_cc
945 host_cflags
946 host_ldflags
947 host_libs
948 logfile
950 source_path
951 target_exec
952 target_os
953 target_path
956 # code dependency declarations
958 # architecture extensions
959 altivec_deps="ppc"
960 amd3dnow_deps="mmx"
961 armv5te_deps="arm"
962 armv6_deps="arm"
963 armv6t2_deps="arm"
964 armvfp_deps="arm"
965 iwmmxt_deps="arm"
966 mmi_deps="mips"
967 mmx_deps="x86"
968 mmx2_deps="mmx"
969 neon_deps="arm"
970 ppc4xx_deps="ppc"
971 sse_deps="mmx"
972 ssse3_deps="sse"
973 vis_deps="sparc"
975 # common features
976 fft_suggest="fft_mmx"
977 fft_mmx_deps="mmx yasm"
978 oldscaler_deps="!swscale"
980 # decoders / encoders
981 aac_decoder_select="fft mdct"
982 ac3_decoder_deps="gpl"
983 ac3_decoder_select="fft mdct"
984 atrac3_decoder_select="fft mdct"
985 cavs_decoder_select="golomb"
986 cook_decoder_select="fft mdct"
987 cscd_decoder_suggest="zlib"
988 dca_decoder_select="fft mdct"
989 dnxhd_encoder_select="aandct"
990 dxa_decoder_select="zlib"
991 eac3_decoder_deps="gpl"
992 eac3_decoder_select="fft mdct"
993 eatgq_decoder_select="aandct"
994 ffv1_decoder_select="golomb"
995 flac_decoder_select="golomb"
996 flac_encoder_select="golomb"
997 flashsv_decoder_select="zlib"
998 flashsv_encoder_select="zlib"
999 flv_encoder_select="aandct"
1000 h261_encoder_select="aandct"
1001 h263_encoder_select="aandct"
1002 h263p_encoder_select="aandct"
1003 h264_decoder_select="golomb"
1004 h264_vdpau_decoder_deps="vdpau"
1005 imc_decoder_select="fft mdct"
1006 jpegls_decoder_select="golomb"
1007 jpegls_encoder_select="golomb"
1008 ljpeg_encoder_select="aandct"
1009 loco_decoder_select="golomb"
1010 mjpeg_encoder_select="aandct"
1011 mpeg1video_encoder_select="aandct"
1012 mpeg2video_encoder_select="aandct"
1013 mpeg4_encoder_select="aandct"
1014 mpeg_vdpau_decoder_deps="vdpau"
1015 mpeg1_vdpau_decoder_deps="vdpau"
1016 mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h"
1017 msmpeg4v1_encoder_select="aandct"
1018 msmpeg4v2_encoder_select="aandct"
1019 msmpeg4v3_encoder_select="aandct"
1020 nellymoser_decoder_select="fft mdct"
1021 nellymoser_encoder_select="fft mdct"
1022 png_decoder_select="zlib"
1023 png_encoder_select="zlib"
1024 qdm2_decoder_select="fft mdct rdft"
1025 rv10_encoder_select="aandct"
1026 rv20_encoder_select="aandct"
1027 shorten_decoder_select="golomb"
1028 sonic_decoder_select="golomb"
1029 sonic_encoder_select="golomb"
1030 sonic_ls_encoder_select="golomb"
1031 svq3_decoder_select="golomb"
1032 svq3_decoder_suggest="zlib"
1033 tiff_decoder_suggest="zlib"
1034 tiff_encoder_suggest="zlib"
1035 tscc_decoder_select="zlib"
1036 vc1_vdpau_decoder_deps="vdpau"
1037 vorbis_decoder_select="fft mdct"
1038 vorbis_encoder_select="fft mdct"
1039 wmav1_decoder_select="fft mdct"
1040 wmav1_encoder_select="fft mdct"
1041 wmav2_decoder_select="fft mdct"
1042 wmav2_encoder_select="fft mdct"
1043 wmv1_encoder_select="aandct"
1044 wmv2_encoder_select="aandct"
1045 wmv3_vdpau_decoder_deps="vdpau"
1046 zlib_decoder_select="zlib"
1047 zlib_encoder_select="zlib"
1048 zmbv_decoder_select="zlib"
1049 zmbv_encoder_select="zlib"
1051 # external libraries
1052 libamr_nb_decoder_deps="libamr_nb"
1053 libamr_nb_encoder_deps="libamr_nb"
1054 libamr_wb_decoder_deps="libamr_wb"
1055 libamr_wb_encoder_deps="libamr_wb"
1056 libdirac_decoder_deps="libdirac !libschroedinger"
1057 libdirac_encoder_deps="libdirac"
1058 libfaac_encoder_deps="libfaac"
1059 libfaad_decoder_deps="libfaad"
1060 libfaadbin_decoder_extralibs='$ldl'
1061 libgsm_decoder_deps="libgsm"
1062 libgsm_encoder_deps="libgsm"
1063 libgsm_ms_decoder_deps="libgsm"
1064 libgsm_ms_encoder_deps="libgsm"
1065 libmp3lame_encoder_deps="libmp3lame"
1066 libopenjpeg_decoder_deps="libopenjpeg"
1067 libschroedinger_decoder_deps="libschroedinger"
1068 libschroedinger_encoder_deps="libschroedinger"
1069 libspeex_decoder_deps="libspeex"
1070 libtheora_encoder_deps="libtheora"
1071 libvorbis_encoder_deps="libvorbis"
1072 libx264_encoder_deps="libx264"
1073 libxvid_encoder_deps="libxvid"
1074 mpeg4aac_decoder_deps="libfaad"
1075 vdpau_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1077 # demuxers / muxers
1078 ac3_demuxer_deps="ac3_parser"
1079 alsa_demuxer_deps="alsa_asoundlib_h snd_pcm_htimestamp"
1080 alsa_demuxer_extralibs="-lasound"
1081 alsa_muxer_deps="alsa_asoundlib_h"
1082 alsa_muxer_extralibs="-lasound"
1083 audio_beos_demuxer_deps="audio_beos"
1084 audio_beos_demuxer_extralibs="-lmedia -lbe"
1085 audio_beos_muxer_deps="audio_beos"
1086 audio_beos_muxer_extralibs="-lmedia -lbe"
1087 avisynth_demuxer_deps="avisynth"
1088 bktr_demuxer_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
1089 dirac_demuxer_deps="dirac_parser"
1090 dv1394_demuxer_deps="dv1394 dv_demuxer"
1091 libdc1394_demuxer_deps="libdc1394"
1092 libnut_demuxer_deps="libnut"
1093 libnut_muxer_deps="libnut"
1094 matroska_demuxer_suggest="zlib bzlib"
1095 mov_demuxer_suggest="zlib"
1096 mp3_demuxer_deps="mpegaudio_parser"
1097 oss_demuxer_deps_any="soundcard_h sys_soundcard_h"
1098 oss_muxer_deps_any="soundcard_h sys_soundcard_h"
1099 redir_demuxer_deps="network"
1100 rtp_muxer_deps="network rtp_protocol"
1101 rtsp_demuxer_deps="sdp_demuxer"
1102 sdp_demuxer_deps="rtp_protocol mpegts_demuxer"
1103 v4l_demuxer_deps="linux_videodev_h"
1104 v4l2_demuxer_deps_any="linux_videodev2_h sys_videoio_h"
1105 vfwcap_demuxer_deps="capCreateCaptureWindow"
1106 vfwcap_demuxer_extralibs="-lvfw32"
1107 x11_grab_device_demuxer_deps="x11grab XShmCreateImage"
1108 x11_grab_device_demuxer_extralibs="-lX11 -lXext"
1110 # protocols
1111 http_protocol_deps="network"
1112 rtp_protocol_deps="udp_protocol"
1113 tcp_protocol_deps="network"
1114 udp_protocol_deps="network"
1116 # filters
1117 movie_filter_deps="avfilter_lavf"
1119 # programs
1120 ffplay_deps="sdl"
1121 ffserver_deps="ffm_muxer rtp_protocol rtsp_demuxer"
1122 ffserver_extralibs='$ldl'
1123 vhook_extralibs='$ldl'
1126 # default parameters
1128 logfile="config.err"
1130 # installation paths
1131 prefix_default="/usr/local"
1132 bindir_default='${prefix}/bin'
1133 datadir_default='${prefix}/share/ffmpeg'
1134 incdir_default='${prefix}/include'
1135 libdir_default='${prefix}/lib'
1136 mandir_default='${prefix}/share/man'
1137 shlibdir_default="$libdir_default"
1139 # toolchain
1140 ar="ar"
1141 cc_default="gcc"
1142 host_cc_default="gcc"
1143 ln_s="ln -sf"
1144 nm_default="nm"
1145 objformat="elf"
1146 ranlib="ranlib"
1147 strip="strip"
1148 yasmexe="yasm"
1150 # machine
1151 arch=`uname -m`
1152 cpu="generic"
1154 # OS
1155 target_os=$(tolower $(uname -s))
1157 # configurable options
1158 enable debug
1159 enable ffmpeg
1160 enable ffplay
1161 enable ffserver
1162 enable ipv6
1163 enable mpegaudio_hp
1164 enable network
1165 enable oldscaler
1166 enable optimizations
1167 enable protocols
1168 enable static
1169 enable stripping
1170 vhook="default"
1172 # build settings
1173 add_cflags -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112
1174 SHFLAGS='-shared -Wl,-soname,$$(@F)'
1175 VHOOKSHFLAGS='$(SHFLAGS)'
1176 FFSERVERLDFLAGS=-Wl,-E
1177 LIBPREF="lib"
1178 LIBSUF=".a"
1179 FULLNAME='$(NAME)$(BUILDSUF)'
1180 LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
1181 SLIBPREF="lib"
1182 SLIBSUF=".so"
1183 SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
1184 SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
1185 SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
1186 LIB_INSTALL_EXTRA_CMD='$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
1188 host_cflags='-O3 -g -Wall'
1189 host_libs='-lm'
1191 target_path='.'
1193 # gcc stupidly only outputs the basename of targets with -MM, but we need the
1194 # full relative path for objects in subdirectories for non-recursive Make.
1195 DEPEND_CMD='$(CC) $(CFLAGS) -MM -MG $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o," -e "s,\\([[:space:]]\\)\\(version\\.h\\),\\1\$$(BUILD_ROOT_REL)/\\2,"'
1197 # find source path
1198 source_path="`dirname \"$0\"`"
1199 enable source_path_used
1200 if test -z "$source_path" -o "$source_path" = "." ; then
1201 source_path="`pwd`"
1202 disable source_path_used
1203 else
1204 source_path="`cd \"$source_path\"; pwd`"
1205 echo "$source_path" | grep -q '[[:blank:]]' &&
1206 die "Out of tree builds are impossible with whitespace in source path."
1209 FFMPEG_CONFIGURATION="$@"
1211 find_things(){
1212 thing=$1
1213 pattern=$2
1214 file=$source_path/$3
1215 sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
1218 ENCODER_LIST=$(find_things encoder ENC libavcodec/allcodecs.c)
1219 DECODER_LIST=$(find_things decoder DEC libavcodec/allcodecs.c)
1220 PARSER_LIST=$(find_things parser PARSER libavcodec/allcodecs.c)
1221 BSF_LIST=$(find_things bsf BSF libavcodec/allcodecs.c)
1222 MUXER_LIST=$(find_things muxer _MUX libavformat/allformats.c)
1223 DEMUXER_LIST=$(find_things demuxer DEMUX libavformat/allformats.c)
1224 OUTDEV_LIST=$(find_things muxer _MUX libavdevice/alldevices.c)
1225 INDEV_LIST=$(find_things demuxer DEMUX libavdevice/alldevices.c)
1226 PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
1227 FILTER_LIST=$(find_things filter FILTER libavfilter/allfilters.c)
1229 enable $ARCH_EXT_LIST \
1230 $DECODER_LIST \
1231 $ENCODER_LIST \
1232 $PARSER_LIST \
1233 $BSF_LIST \
1234 $DEMUXER_LIST \
1235 $MUXER_LIST \
1236 $FILTER_LIST \
1237 $PROTOCOL_LIST \
1238 $INDEV_LIST \
1239 $OUTDEV_LIST \
1241 die_unknown(){
1242 echo "Unknown option \"$1\"."
1243 echo "See $0 --help for available options."
1244 exit 1
1247 show_list() {
1248 suffix=_$1
1249 shift
1250 echo $* | sed s/$suffix//g | tr ' ' '\n' | sort
1251 exit 0
1254 for opt do
1255 optval="${opt#*=}"
1256 case "$opt" in
1257 --extra-cflags=*) add_cflags $optval
1259 --extra-ldflags=*) add_ldflags $optval
1261 --extra-libs=*) add_extralibs $optval
1263 --disable-devices) disable $INDEV_LIST $OUTDEV_LIST
1265 --enable-debug=*) debuglevel="$optval"
1267 --enable-*=*|--disable-*=*)
1268 eval `echo "$opt" | sed 's/=/-/;s/--/action=/;s/-/ thing=/;s/-/ name=/'`
1269 case "$thing" in
1270 encoder|decoder|muxer|demuxer|parser|bsf|protocol|filter) $action ${optval}_${thing} ;;
1271 *) die_unknown "$opt" ;;
1272 esac
1274 --enable-?*|--disable-?*)
1275 eval `echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g'`
1276 if is_in $option $COMPONENT_LIST; then
1277 eval $action \$$(toupper ${option%s})_LIST
1278 elif is_in $option $CMDLINE_SELECT; then
1279 $action $option
1280 else
1281 die_unknown $opt
1284 --list-*)
1285 NAME="${opt#--list-}"
1286 is_in $NAME $COMPONENT_LIST || die_unknown $opt
1287 NAME=${NAME%s}
1288 eval show_list $NAME \$$(toupper $NAME)_LIST
1290 --help|-h) show_help
1293 optname="${opt%%=*}"
1294 optname="${optname#--}"
1295 optname=$(echo "$optname" | sed 's/-/_/g')
1296 is_in $optname $CMDLINE_SET || die_unknown $opt
1297 eval $optname='$optval'
1299 esac
1300 done
1302 disabled logging && logfile=/dev/null
1304 echo "# $0 $@" > $logfile
1305 set >> $logfile
1307 test -n "$cross_prefix" && enable cross_compile
1309 ar="${cross_prefix}${ar}"
1310 cc_default="${cross_prefix}${cc_default}"
1311 nm_default="${cross_prefix}${nm_default}"
1312 ranlib="${cross_prefix}${ranlib}"
1313 strip="${cross_prefix}${strip}"
1315 set_default cc nm
1316 enabled cross_compile || host_cc_default=$cc
1317 set_default host_cc
1319 case $target_os in
1320 mingw32*|cygwin*|*-dos|freedos|opendos|os/2*) EXESUF=.exe ;;
1321 esac
1323 # set temporary file name
1324 : ${TMPDIR:=$TEMPDIR}
1325 : ${TMPDIR:=$TMP}
1326 : ${TMPDIR:=/tmp}
1328 TMPC="${TMPDIR}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.c"
1329 TMPE="${TMPDIR}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}${EXESUF}"
1330 TMPH="${TMPDIR}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.h"
1331 TMPO="${TMPDIR}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.o"
1332 TMPS="${TMPDIR}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.S"
1333 TMPSH="${TMPDIR}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.sh"
1335 # make sure we can execute files in $TMPDIR
1336 cat > $TMPSH 2>> $logfile <<EOF
1337 #! /bin/sh
1339 chmod +x $TMPSH >> $logfile 2>&1
1340 if ! $TMPSH >> $logfile 2>&1; then
1341 cat <<EOF
1342 Unable to create and execute files in $TMPDIR. Set the TMPDIR environment
1343 variable to another directory and make sure that it is not mounted noexec.
1345 die "Sanity test failed."
1347 rm $TMPSH
1349 # compiler sanity check
1350 check_exec <<EOF
1351 int main(void){ return 0; }
1353 if test "$?" != 0; then
1354 echo "$cc is unable to create an executable file."
1355 if test -z "$cross_prefix" && ! enabled cross_compile ; then
1356 echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
1357 echo "Only do this if you know what cross compiling means."
1359 die "C compiler test failed."
1362 check_cflags -std=c99
1364 case "$arch" in
1365 i386|i486|i586|i686|i86pc|BePC)
1366 arch="x86"
1367 subarch="x86_32"
1368 enable fast_unaligned
1370 x86_64|amd64)
1371 arch="x86"
1372 subarch="x86_32"
1373 enable cmov
1374 enable fast_cmov
1375 enable fast_unaligned
1376 check_cc <<EOF && enable fast_64bit && subarch="x86_64"
1377 int test[sizeof(char*) - 7];
1380 arm|armv[4567]*l)
1381 arch="arm"
1383 alpha)
1384 arch="alpha"
1385 enable fast_64bit
1386 check_cflags -mieee
1388 "Power Macintosh"|ppc|powerpc)
1389 arch="ppc"
1390 enable fast_unaligned
1392 ppc64)
1393 arch="ppc"
1394 enable fast_64bit
1395 enable fast_unaligned
1397 mips|mipsel|IP*)
1398 arch="mips"
1400 mips64)
1401 arch="mips"
1402 enable fast_64bit
1404 sun4u|sparc64)
1405 arch="sparc"
1406 subarch="sparc64"
1407 enable fast_64bit
1409 sparc)
1410 arch="sparc"
1412 sh4|sh)
1413 arch="sh4"
1415 parisc|hppa)
1416 arch="parisc"
1418 parisc64|hppa64)
1419 arch="parisc"
1420 enable fast_64bit
1422 s390|s390x)
1423 arch="s390"
1425 m68k)
1426 arch="m68k"
1428 ia64)
1429 arch="ia64"
1430 enable fast_64bit
1432 bfin)
1433 arch="bfin"
1436 arch="unknown"
1438 esac
1440 enable $arch $subarch
1442 # OS specific
1443 case $target_os in
1444 beos|haiku|zeta)
1445 prefix_default="$HOME/config"
1446 # helps building libavcodec
1447 add_cflags -DPIC -fomit-frame-pointer
1448 # 3 gcc releases known for BeOS, each with ugly bugs
1449 gcc_version="`$cc -v 2>&1 | grep version | cut -d ' ' -f3-`"
1450 case "$gcc_version" in
1451 2.9-beos-991026*|2.9-beos-000224*) echo "R5/GG gcc"
1452 disable mmx
1454 *20010315*) echo "BeBits gcc"
1455 add_cflags -fno-expensive-optimizations
1457 esac
1458 SHFLAGS=-nostart
1459 # enable BeOS things
1460 enable audio_beos
1461 # no need for libm, but the inet stuff
1462 # Check for BONE
1463 # XXX: actually should check for NOT net_server
1464 if echo $BEINCLUDES | grep -q 'headers/be/bone'; then
1465 network_extralibs="-lbind -lsocket"
1466 else
1467 enable beos_netserver
1468 network_extralibs="-lnet"
1469 fi ;;
1470 sunos)
1471 FFSERVERLDFLAGS=""
1472 SHFLAGS='-shared -Wl,-h,$$(@F)'
1473 network_extralibs="-lsocket -lnsl"
1474 add_cflags -D__EXTENSIONS__
1476 netbsd)
1477 oss_demuxer_extralibs="-lossaudio"
1478 oss_muxer_extralibs="-lossaudio"
1480 openbsd)
1481 disable need_memalign
1482 LIBOBJFLAGS='$(PIC)'
1483 SHFLAGS='-shared'
1484 oss_demuxer_extralibs="-lossaudio"
1485 oss_muxer_extralibs="-lossaudio"
1487 freebsd)
1488 disable need_memalign
1490 bsd/os)
1491 osextralibs="-lpoll -lgnugetopt"
1492 strip="strip -d"
1494 darwin)
1495 disable need_memalign
1496 SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR) -Wl,-read_only_relocs,suppress'
1497 VHOOKSHFLAGS='-dynamiclib -Wl,-single_module -flat_namespace -undefined suppress -Wl,-install_name,$(SHLIBDIR)/vhook/$$(@F)'
1498 strip="strip -x"
1499 FFLDFLAGS="-Wl,-dynamic,-search_paths_first"
1500 SLIBSUF=".dylib"
1501 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
1502 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
1503 FFSERVERLDFLAGS=-Wl,-bind_at_load
1504 objformat="macho"
1505 enabled x86_64 && objformat="macho64"
1507 mingw32*)
1508 target_os=mingw32
1509 LIBTARGET=i386
1510 if enabled x86_64; then
1511 disable need_memalign
1512 LIBTARGET=x64
1514 shlibdir_default="$bindir_default"
1515 VHOOKSHFLAGS='-shared -L$(BUILD_ROOT)/libavformat -L$(BUILD_ROOT)/libavcodec -L$(BUILD_ROOT)/libavutil'
1516 VHOOKLIBS='-lavformat$(BUILDSUF) -lavcodec$(BUILDSUF) -lavutil$(BUILDSUF) $(EXTRALIBS)'
1517 if enabled swscale; then
1518 VHOOKSHFLAGS="$VHOOKSHFLAGS -L\$(BUILD_ROOT)/libswscale"
1519 VHOOKLIBS="$VHOOKLIBS -lswscale\$(BUILDSUF)"
1521 disable ffserver
1522 SLIBPREF=""
1523 SLIBSUF=".dll"
1524 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1525 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1526 SLIB_EXTRA_CMD='-lib /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)'
1527 SLIB_INSTALL_EXTRA_CMD='-install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"; \
1528 install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)"'
1529 SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"'
1530 SHFLAGS='-shared -Wl,--output-def,$$(@:$(SLIBSUF)=.def) -Wl,--enable-runtime-pseudo-reloc -Wl,--enable-auto-image-base'
1531 objformat="win32"
1532 enable dos_paths
1533 if ! enabled x86_64; then
1534 check_cpp_condition _mingw.h "(__MINGW32_MAJOR_VERSION > 3) || (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
1535 die "ERROR: MinGW runtime version must be >= 3.15."
1536 enabled_any avisynth vfwcap_demuxer &&
1537 { check_cpp_condition w32api.h "(__W32API_MAJOR_VERSION > 3) || (__W32API_MAJOR_VERSION == 3 && __W32API_MINOR_VERSION >= 13)" ||
1538 die "ERROR: avisynth and vfwcap_demuxer require w32api version 3.13 or later."; }
1541 cygwin*)
1542 target_os=cygwin
1543 shlibdir_default="$bindir_default"
1544 VHOOKSHFLAGS='-shared -L$(BUILD_ROOT)/libavformat -L$(BUILD_ROOT)/libavcodec -L$(BUILD_ROOT)/libavutil'
1545 VHOOKLIBS='-lavformat$(BUILDSUF) -lavcodec$(BUILDSUF) -lavutil$(BUILDSUF) $(EXTRALIBS)'
1546 if enabled swscale; then
1547 VHOOKSHFLAGS="$VHOOKSHFLAGS -L\$(BUILD_ROOT)/libswscale"
1548 VHOOKLIBS="$VHOOKLIBS -lswscale\$(BUILDSUF)"
1550 SLIBPREF="cyg"
1551 SLIBSUF=".dll"
1552 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1553 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1554 SHFLAGS='-shared -Wl,--enable-auto-image-base'
1555 objformat="win32"
1556 enable dos_paths
1558 *-dos|freedos|opendos)
1559 disable ffplay ffserver vhook
1560 disable $INDEV_LIST $OUTDEV_LIST
1561 network_extralibs="-lsocket"
1562 objformat="coff"
1563 enable dos_paths
1565 linux)
1566 enable dv1394
1568 irix*)
1569 target_os=irix
1570 ranlib="echo ignoring ranlib"
1572 os/2*)
1573 strip="lxlite"
1574 ln_s="cp -f"
1575 FFLDFLAGS="-Zomf -Zbin-files -Zargs-wild -Zmap"
1576 SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
1577 FFSERVERLDFLAGS=""
1578 LIBSUF="_s.a"
1579 SLIBPREF=""
1580 SLIBSUF=".dll"
1581 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
1582 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
1583 SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
1584 echo PROTMODE >> $(SUBDIR)$(NAME).def; \
1585 echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
1586 echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
1587 echo EXPORTS >> $(SUBDIR)$(NAME).def; \
1588 emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
1589 SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
1590 emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
1591 SLIB_INSTALL_EXTRA_CMD='install -m 644 $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib "$(LIBDIR)"'
1592 SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.a "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.lib'
1593 disable vhook
1594 enable dos_paths
1596 interix)
1597 disable vhook
1601 die "Unknown OS '$target_os'."
1603 esac
1605 set_default $PATHS_LIST
1607 add_extralibs $osextralibs
1609 # Combine FFLDFLAGS and the LDFLAGS environment variable.
1610 LDFLAGS="$FFLDFLAGS $LDFLAGS"
1612 # we need to build at least one lib type
1613 if ! enabled_any static shared; then
1614 cat <<EOF
1615 At least one library type must be built.
1616 Specify --enable-static to build the static libraries or --enable-shared to
1617 build the shared libraries as well. To only build the shared libraries specify
1618 --disable-static in addition to --enable-shared.
1620 exit 1;
1623 disabled static && LIBNAME=""
1625 if enabled_any libfaad libfaadbin ; then
1626 if check_header faad.h; then
1627 check_cc <<EOF
1628 #include <faad.h>
1629 #ifndef FAAD2_VERSION
1630 ok faad1
1631 #endif
1632 int main(void) { return 0; }
1634 test $? = 0 && enable libfaad2
1635 else
1636 die "FAAD test failed."
1641 if ! enabled gpl; then
1642 die_gpl_disabled(){
1643 name=$1
1644 shift
1645 enabled_any $@ && die "$name is under GPL and --enable-gpl is not specified."
1647 die_gpl_disabled "The Postprocessing code" postproc
1648 die_gpl_disabled "libx264" libx264
1649 die_gpl_disabled "libxvidcore" libxvid
1650 die_gpl_disabled "FAAD2" libfaad2
1651 die_gpl_disabled "The X11 grabber" x11grab
1652 die_gpl_disabled "The software scaler" swscale
1655 if ! enabled nonfree && enabled_any libamr_nb libamr_wb; then
1656 die "libamr is nonfree and --enable-nonfree is not specified."
1659 check_deps $ARCH_EXT_LIST
1661 test -z "$need_memalign" && need_memalign="$mmx"
1663 #Darwin CC versions
1664 if test $target_os = darwin; then
1665 if $cc -v 2>&1 | grep -q xlc; then
1666 add_cflags -qpdf2 -qlanglvl=extc99 -qmaxmem=-1 -qarch=auto -qtune=auto
1667 else
1668 add_cflags -pipe
1669 check_cflags -force_cpusubtype_ALL
1670 check_cflags -Wno-sign-compare
1671 enabled shared || check_cflags -mdynamic-no-pic
1675 disabled optimizations || check_cflags -fomit-frame-pointer
1677 # Add processor-specific flags
1678 if test $cpu != "generic"; then
1679 warn_altivec(){
1680 $1 altivec && echo "WARNING: Tuning for $2 but AltiVec $1.";
1682 case $cpu in
1683 601|ppc601|PowerPC601)
1684 add_cflags -mcpu=601
1685 warn_altivec enabled PPC601
1687 603*|ppc603*|PowerPC603*)
1688 add_cflags -mcpu=603
1689 warn_altivec enabled PPC603
1691 604*|ppc604*|PowerPC604*)
1692 add_cflags -mcpu=604
1693 warn_altivec enabled PPC604
1695 G3|g3|75*|ppc75*|PowerPC75*)
1696 add_cflags -mcpu=750 -mpowerpc-gfxopt
1697 warn_altivec enabled PPC75x
1699 G4|g4|745*|ppc745*|PowerPC745*)
1700 add_cflags -mcpu=7450 -mpowerpc-gfxopt
1701 warn_altivec disabled PPC745x
1703 74*|ppc74*|PowerPC74*)
1704 add_cflags -mcpu=7400 -mpowerpc-gfxopt
1705 warn_altivec disabled PPC74xx
1707 G5|g5|970|ppc970|PowerPC970|power4*|Power4*)
1708 add_cflags -mcpu=970 -mpowerpc-gfxopt -mpowerpc64
1709 warn_altivec disabled PPC970
1710 enable ppc64
1712 Cell|CELL|cell)
1713 add_cflags -mcpu=cell
1714 warn_altivec disabled Cell
1715 enable ppc64
1717 # targets that do NOT support conditional mov (cmov)
1718 i[345]86|pentium|pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
1719 add_cflags -march=$cpu
1720 disable cmov
1722 # targets that do support conditional mov (cmov)
1723 i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2)
1724 add_cflags -march=$cpu
1725 enable cmov
1726 enable fast_cmov
1728 # targets that do support conditional mov but on which it's slow
1729 pentium4|pentium4m|prescott|nocona)
1730 add_cflags -march=$cpu
1731 enable cmov
1732 disable fast_cmov
1734 sparc64)
1735 add_cflags -mcpu=v9
1737 arm11*|cortex*)
1738 add_cflags -mcpu=$cpu
1739 enable fast_unaligned
1741 armv*)
1742 add_cflags -march=$cpu
1744 arm*)
1745 add_cflags -mcpu=$cpu
1747 ev4|ev45|ev5|ev56|pca56|ev6|ev67)
1748 add_cflags -mcpu=$cpu
1751 echo "WARNING: Unknown CPU \"$cpu\", ignored."
1753 esac
1756 check_cc <<EOF || die "Symbol mangling check failed."
1757 int ff_extern;
1759 sym=$($nm -P -g $TMPO | grep ff_extern)
1760 extern_prefix=${sym%%ff_extern*}
1762 check_asm inline_asm '""'
1764 if enabled x86; then
1765 # check whether EBP is available on x86
1766 # As 'i' is stored on the stack, this program will crash
1767 # if the base pointer is used to access it because the
1768 # base pointer is cleared in the inline assembly code.
1769 check_exec_crash <<EOF && enable ebp_available
1770 volatile int i=0;
1771 __asm__ volatile (
1772 "xorl %%ebp, %%ebp"
1773 ::: "%ebp");
1774 return i;
1777 # check wether EBX is available on x86
1778 check_asm ebx_available '"":::"%ebx"'
1780 # check whether more than 10 operands are supported
1781 check_cc <<EOF && enable ten_operands
1782 int main(void) {
1783 int x=0;
1784 __asm__ volatile(
1786 :"+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x)
1788 return 0;
1792 # check whether binutils is new enough to compile SSSE3/MMX2
1793 enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
1794 enabled mmx2 && check_asm mmx2 '"movss %xmm0, %xmm0"'
1796 check_asm bswap '"bswap %%eax" ::: "%eax"'
1798 YASMFLAGS="-f $objformat -DARCH_$(toupper $subarch)"
1799 enabled x86_64 && append YASMFLAGS "-m amd64"
1800 enabled_all x86_64 shared && append YASMFLAGS "-DPIC"
1801 case "$objformat" in
1802 elf) enabled debug && append YASMFLAGS "-g dwarf2" ;;
1803 macho64) append YASMFLAGS "-DPIC -DPREFIX" ;;
1804 *) append YASMFLAGS "-DPREFIX" ;;
1805 esac
1806 disabled yasm || { check_yasm "pabsw xmm0, xmm0" && enable yasm; }
1809 # check for assembler specific support
1811 enabled ppc && check_asm dcbzl '"dcbzl 0, 1"'
1812 enabled ppc && check_asm ppc4xx '"maclhw r10, r11, r12"'
1814 # check for SIMD availability
1816 # AltiVec flags: The FSF version of GCC differs from the Apple version
1817 if enabled altivec; then
1818 check_cflags -maltivec -mabi=altivec &&
1819 { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
1820 check_cflags -faltivec
1822 # check if our compiler supports Motorola AltiVec C API
1823 check_cc <<EOF || disable altivec
1824 $inc_altivec_h
1825 int main(void) {
1826 vector signed int v1, v2, v3;
1827 v1 = vec_add(v2,v3);
1828 return 0;
1832 # check if our compiler supports braces for vector declarations
1833 check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
1834 $inc_altivec_h
1835 int main (void) { (vector int) {1}; return 0; }
1839 # We have to check if pld is a nop and disable it.
1840 enabled arm && check_asm pld '"pld [r0]"'
1841 enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
1842 enabled armv6 && check_asm armv6 '"sadd16 r0, r0, r0"'
1843 enabled armv6t2 && check_asm armv6t2 '"movt r0, #0"'
1844 enabled armvfp && check_asm armvfp '"fadds s0, s0, s0"'
1845 enabled iwmmxt && check_asm iwmmxt '"wunpckelub wr6, wr4"'
1846 enabled mmi && check_asm mmi '"lq $2, 0($2)"'
1847 enabled neon && check_asm neon '"vadd.i16 q0, q0, q0"'
1848 enabled vis && check_asm vis '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc
1850 enabled vis && add_cflags -mcpu=ultrasparc -mtune=ultrasparc
1852 # ---
1853 # big/little-endian test
1854 check_cc <<EOF || die "endian test failed"
1855 unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
1857 od -A n -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
1859 # ---
1860 # check availability of some header files
1862 if check_func dlopen; then
1863 ldl=
1864 elif check_func dlopen -ldl; then
1865 ldl=-ldl
1868 check_func fork
1869 check_func gethrtime
1870 check_func getrusage
1871 check_func inet_aton $network_extralibs
1872 check_func memalign
1873 check_func mkstemp
1874 check_func posix_memalign
1875 check_func_headers io.h setmode
1876 check_func_headers windows.h GetProcessTimes
1878 check_header conio.h
1879 check_header dlfcn.h
1880 check_header malloc.h
1881 check_header poll.h
1882 check_header sys/mman.h
1883 check_header sys/resource.h
1884 check_header sys/select.h
1885 check_header termios.h
1886 check_header vdpau/vdpau.h
1887 check_header vdpau/vdpau_x11.h
1888 check_header X11/extensions/XvMClib.h
1890 if ! enabled_any memalign memalign_hack posix_memalign && enabled need_memalign ; then
1891 die "Error, no aligned memory allocator but SSE enabled, disable it or use --enable-memalign-hack."
1894 disabled zlib || check_lib zlib.h zlibVersion -lz || disable zlib
1895 disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
1897 # check for some common methods of building with pthread support
1898 # do this before the optional library checks as some of them require pthreads
1899 if enabled pthreads; then
1900 if check_func pthread_create; then
1902 elif check_func pthread_create -pthread; then
1903 add_cflags -pthread
1904 add_extralibs -pthread
1905 elif check_func pthread_create -pthreads; then
1906 add_cflags -pthreads
1907 add_extralibs -pthreads
1908 elif check_func pthread_create -lpthreadGC2; then
1909 add_extralibs -lpthreadGC2
1910 elif ! check_lib pthread.h pthread_create -lpthread; then
1911 die "ERROR: can't find pthreads library"
1915 for thread in $THREADS_LIST; do
1916 if enabled $thread; then
1917 test -n "$thread_type" &&
1918 die "ERROR: Only one thread type must be selected." ||
1919 thread_type="$thread"
1921 done
1923 check_lib math.h sin -lm
1925 # test for C99 functions in math.h
1926 for func in llrint lrint lrintf round roundf truncf; do
1927 check_exec <<EOF && enable $func || disable $func
1928 #include <math.h>
1929 int main(void) { return ($func(3.999f) > 0)?0:1; }
1931 done
1933 # these are off by default, so fail if requested and not available
1934 enabled avisynth && require2 vfw32 "windows.h vfw.h" AVIFileInit -lvfw32
1935 enabled libamr_nb && require libamrnb amrnb/interf_dec.h Speech_Decode_Frame_init -lamrnb -lm
1936 enabled libamr_wb && require libamrwb amrwb/dec_if.h D_IF_init -lamrwb -lm
1937 enabled libdirac && add_cflags $(pkg-config --cflags dirac) &&
1938 require libdirac libdirac_decoder/dirac_parser.h dirac_decoder_init -ldirac_decoder &&
1939 require libdirac libdirac_encoder/dirac_encoder.h dirac_encoder_init -ldirac_encoder
1940 enabled libfaac && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
1941 enabled libfaad && require2 libfaad faad.h faacDecOpen -lfaad
1942 enabled libgsm && require libgsm gsm.h gsm_create -lgsm
1943 enabled libmp3lame && require libmp3lame lame/lame.h lame_init -lmp3lame -lm
1944 enabled libnut && require libnut libnut.h nut_demuxer_init -lnut
1945 enabled libopenjpeg && require libopenjpeg openjpeg.h opj_version -lopenjpeg
1946 enabled libschroedinger && add_cflags $(pkg-config --cflags schroedinger-1.0) &&
1947 require libschroedinger schroedinger/schro.h schro_init $(pkg-config --libs schroedinger-1.0)
1948 enabled libspeex && require libspeex speex/speex.h speex_decoder_init -lspeex
1949 enabled libtheora && require libtheora theora/theora.h theora_info_init -ltheora -logg
1950 enabled libvorbis && require libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
1951 enabled libx264 && require libx264 x264.h x264_encoder_open -lx264 -lm &&
1952 { check_cpp_condition x264.h "X264_BUILD >= 65" ||
1953 die "ERROR: libx264 version must be >= 0.65."; }
1954 enabled libxvid && require libxvid xvid.h xvid_global -lxvidcore
1955 enabled mlib && require mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
1957 # libdc1394 check
1958 if enabled libdc1394; then
1959 { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
1960 enable libdc1394_2; } ||
1961 { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
1962 enable libdc1394_1; } ||
1963 die "ERROR: No version of libdc1394 found "
1967 _restrict=
1968 for restrict_keyword in restrict __restrict__ __restrict; do
1969 check_cc <<EOF && _restrict=$restrict_keyword && break
1970 void foo(char * $restrict_keyword p);
1972 done
1974 test "$vhook" = "default" && vhook="$dlopen"
1976 if test "$target_os" = cygwin -o "$target_os" = mingw32 && enabled_all static vhook ; then
1977 disable vhook
1978 echo
1979 echo "At the moment vhooks don't work on Cygwin or MinGW static builds."
1980 echo "Patches welcome."
1981 echo
1984 if enabled vhook; then
1985 check_ldflags -rdynamic
1986 check_ldflags -export-dynamic
1989 check_foo_config imlib2 imlib2 Imlib2.h imlib_load_font
1990 check_foo_config freetype2 freetype ft2build.h FT_Init_FreeType
1992 ##########################################
1993 # SDL check
1995 disable sdl_too_old
1996 disable sdl
1997 SDL_CONFIG="${cross_prefix}sdl-config"
1998 if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
1999 sdl_cflags=`"${SDL_CONFIG}" --cflags`
2000 temp_cflags $sdl_cflags
2001 temp_extralibs `"${SDL_CONFIG}" --libs`
2002 if check_lib2 SDL.h SDL_Init; then
2003 _sdlversion=`"${SDL_CONFIG}" --version | sed 's/[^0-9]//g'`
2004 if test "$_sdlversion" -lt 121 ; then
2005 enable sdl_too_old
2006 else
2007 enable sdl
2008 check_cc $sdl_cflags <<EOF && enable sdl_video_size
2009 #include <SDL.h>
2010 int main(int argc, char **argv){
2011 const SDL_VideoInfo *vi = SDL_GetVideoInfo();
2012 int w = vi->current_w;
2013 return 0;
2018 restore_flags
2021 texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
2023 ##########################################
2024 # Network check
2026 if enabled network; then
2027 check_type "sys/types.h sys/socket.h" socklen_t
2028 # Prefer arpa/inet.h over winsock2
2029 if check_header arpa/inet.h ; then
2030 check_func closesocket
2031 elif check_header winsock2.h ; then
2032 network_extralibs="-lws2_32"
2033 check_type ws2tcpip.h socklen_t
2034 check_func_headers winsock2.h closesocket
2038 ##########################################
2039 # IPv6 check
2041 enabled network && enabled ipv6 && check_ld <<EOF && enable ipv6 || disable ipv6
2042 #include <sys/types.h>
2043 #include <sys/socket.h>
2044 #include <netinet/in.h>
2045 #include <netdb.h>
2046 int main(void) {
2047 struct sockaddr_storage saddr;
2048 struct ipv6_mreq mreq6;
2049 getaddrinfo(0,0,0,0);
2050 getnameinfo(0,0,0,0,0,0,0);
2051 IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
2055 check_header linux/videodev.h
2056 check_header linux/videodev2.h
2057 check_header sys/videoio.h
2059 check_func_headers "windows.h vfw.h" capCreateCaptureWindow -lvfw32
2061 # check for ioctl_meteor.h, ioctl_bt848.h and alternatives
2062 { check_header dev/bktr/ioctl_meteor.h &&
2063 check_header dev/bktr/ioctl_bt848.h; } ||
2064 { check_header machine/ioctl_meteor.h &&
2065 check_header machine/ioctl_bt848.h; } ||
2066 { check_header dev/video/meteor/ioctl_meteor.h &&
2067 check_header dev/video/bktr/ioctl_bt848.h; } ||
2068 check_header dev/ic/bt8xx.h
2070 check_header sys/soundcard.h
2071 check_header soundcard.h
2073 check_header alsa/asoundlib.h &&
2074 check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
2076 # deal with the X11 frame grabber
2077 enabled x11grab &&
2078 check_header X11/Xlib.h &&
2079 check_header X11/extensions/XShm.h &&
2080 check_func XOpenDisplay -lX11 &&
2081 check_func XShmCreateImage -lX11 -lXext
2083 enabled debug && add_cflags -g"$debuglevel"
2085 # add some useful compiler flags if supported
2086 check_cflags -Wdeclaration-after-statement
2087 check_cflags -Wall
2088 check_cflags -Wno-switch
2089 check_cflags -Wdisabled-optimization
2090 check_cflags -Wpointer-arith
2091 check_cflags -Wredundant-decls
2092 check_cflags -Wno-pointer-sign
2093 check_cflags -Wcast-qual
2094 check_cflags -Wwrite-strings
2095 check_cflags -Wtype-limits
2096 check_cflags -Wundef
2097 enabled extra_warnings && check_cflags -Winline
2099 # add some linker flags
2100 check_ldflags -Wl,--warn-common
2101 check_ldflags -Wl,--as-needed
2102 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'
2103 check_ldflags -Wl,-Bsymbolic
2105 if enabled small; then
2106 check_cflags -Os # not all compilers support -Os
2107 optimizations="small"
2108 elif enabled optimizations; then
2109 if $cc -v 2>&1 | grep -q xlc; then
2110 add_cflags -O5
2111 add_ldflags -O5
2112 else
2113 add_cflags -O3
2116 check_cflags -fno-math-errno
2117 check_cflags -fno-signed-zeros
2119 # add some flags for Intel C Compiler
2120 if $cc --version 2> /dev/null | grep -q Intel; then
2121 # Just warnings, no remarks
2122 check_cflags -w1
2123 # -wd: Disable following warnings
2124 # 144, 167, 556: -Wno-pointer-sign
2125 # 10006: ignoring unknown option -fno-signed-zeros
2126 # 10156: ignoring option '-W'; no argument required
2127 check_cflags -wd144,167,556,10006,10156
2128 # 11030: Warning unknown option --as-needed
2129 # 10156: ignoring option '-export'; no argument required
2130 check_ldflags -wd10156,11030
2131 # Allow to compile with optimizations
2132 check_ldflags -march=$cpu
2135 # PIC flags for shared library objects where they are needed
2136 if enabled shared; then
2137 # LIBOBJFLAGS may have already been set in the OS configuration
2138 if test -z "$LIBOBJFLAGS" ; then
2139 case "${subarch-$arch}" in
2140 x86_64|ia64|alpha|sparc*|power*|parisc*|mips*) LIBOBJFLAGS='$(PIC)' ;;
2141 esac
2145 if enabled gprof; then
2146 add_cflags -p
2147 add_ldflags -p
2150 VHOOKCFLAGS="-fPIC"
2152 # Find out if the .align argument is a power of two or not.
2153 check_asm asmalign_pot '".align 3"'
2155 enabled_any $DECODER_LIST && enable decoders
2156 enabled_any $ENCODER_LIST && enable encoders
2157 enabled_any $BSF_LIST && enable bsfs
2158 enabled_any $DEMUXER_LIST && enable demuxers
2159 enabled_any $MUXER_LIST && enable muxers
2160 enabled_any $FILTER_LIST && enable filters
2161 enabled_any $INDEV_LIST && enable demuxers
2162 enabled_any $OUTDEV_LIST && enable muxers
2163 enabled_any $PROTOCOL_LIST && enable protocols
2165 enabled_any $THREADS_LIST && enable threads
2167 check_deps $CONFIG_LIST \
2168 $CONFIG_EXTRA \
2169 $HAVE_LIST \
2170 $DECODER_LIST \
2171 $ENCODER_LIST \
2172 $PARSER_LIST \
2173 $BSF_LIST \
2174 $DEMUXER_LIST \
2175 $MUXER_LIST \
2176 $FILTER_LIST \
2177 $INDEV_LIST \
2178 $OUTDEV_LIST \
2179 $PROTOCOL_LIST \
2181 echo "install prefix $prefix"
2182 echo "source path $source_path"
2183 echo "C compiler $cc"
2184 echo ".align is power-of-two $asmalign_pot"
2185 echo "ARCH $arch ($cpu)"
2186 if test "$build_suffix" != ""; then
2187 echo "build suffix $build_suffix"
2189 if test "$extra_version" != ""; then
2190 echo "version string suffix $extra_version"
2192 echo "big-endian ${bigendian-no}"
2193 if enabled x86; then
2194 echo "yasm ${yasm-no}"
2195 echo "MMX enabled ${mmx-no}"
2196 echo "MMX2 enabled ${mmx2-no}"
2197 echo "3DNow! enabled ${amd3dnow-no}"
2198 echo "SSE enabled ${sse-no}"
2199 echo "SSSE3 enabled ${ssse3-no}"
2200 echo "CMOV enabled ${cmov-no}"
2201 echo "CMOV is fast ${fast_cmov-no}"
2202 echo "EBX available ${ebx_available-no}"
2203 echo "EBP available ${ebp_available-no}"
2204 echo "10 operands supported ${ten_operands-no}"
2206 if enabled arm; then
2207 echo "ARMv5TE enabled ${armv5te-no}"
2208 echo "ARMv6 enabled ${armv6-no}"
2209 echo "ARMv6T2 enabled ${armv6t2-no}"
2210 echo "ARM VFP enabled ${armvfp-no}"
2211 echo "IWMMXT enabled ${iwmmxt-no}"
2212 echo "NEON enabled ${neon-no}"
2214 if enabled mips; then
2215 echo "MMI enabled ${mmi-no}"
2217 if enabled ppc; then
2218 echo "AltiVec enabled ${altivec-no}"
2219 echo "PPC 4xx optimizations ${ppc4xx-no}"
2220 echo "dcbzl available ${dcbzl-no}"
2221 echo "performance report ${powerpc_perf-no}"
2223 if enabled sparc; then
2224 echo "VIS enabled ${vis-no}"
2226 echo "gprof enabled ${gprof-no}"
2227 echo "debug symbols ${debug-no}"
2228 echo "strip symbols ${stripping-no}"
2229 echo "optimizations ${optimizations-no}"
2230 echo "static ${static-no}"
2231 echo "shared ${shared-no}"
2232 echo "postprocessing support ${postproc-no}"
2233 echo "software scaler enabled ${swscale-no}"
2234 echo "new filter support ${avfilter-no}"
2235 echo "filters using lavformat ${avfilter_lavf-no}"
2236 echo "video hooking ${vhook-no}"
2237 if enabled vhook; then
2238 echo "Imlib2 support ${imlib2-no}"
2239 echo "FreeType support ${freetype2-no}"
2241 echo "network support ${network-no}"
2242 if enabled network; then
2243 echo "IPv6 support ${ipv6-no}"
2245 echo "threading support ${thread_type-no}"
2246 echo "SDL support ${sdl-no}"
2247 if enabled sdl_too_old; then
2248 echo "-> Your SDL version is too old - please upgrade to have FFplay/SDL support."
2250 echo "Sun medialib support ${mlib-no}"
2251 echo "AVISynth enabled ${avisynth-no}"
2252 echo "libamr-nb support ${libamr_nb-no}"
2253 echo "libamr-wb support ${libamr_wb-no}"
2254 echo "libdc1394 support ${libdc1394-no}"
2255 echo "libdirac enabled ${libdirac-no}"
2256 echo "libfaac enabled ${libfaac-no}"
2257 echo "libfaad enabled ${libfaad-no}"
2258 echo "libfaad dlopened ${libfaadbin-no}"
2259 echo "libgsm enabled ${libgsm-no}"
2260 echo "libmp3lame enabled ${libmp3lame-no}"
2261 echo "libnut enabled ${libnut-no}"
2262 echo "libopenjpeg enabled ${libopenjpeg-no}"
2263 echo "libschroedinger enabled ${libschroedinger-no}"
2264 echo "libspeex enabled ${libspeex-no}"
2265 echo "libtheora enabled ${libtheora-no}"
2266 echo "libvorbis enabled ${libvorbis-no}"
2267 echo "libx264 enabled ${libx264-no}"
2268 echo "libxvid enabled ${libxvid-no}"
2269 echo "vdpau enabled ${vdpau-no}"
2270 echo "zlib enabled ${zlib-no}"
2271 echo "bzlib enabled ${bzlib-no}"
2272 echo
2274 for type in decoder encoder parser demuxer muxer protocol filter bsf indev outdev; do
2275 echo "Enabled ${type}s:"
2276 eval list=\$$(toupper $type)_LIST
2277 for part in $list; do
2278 enabled $part && echo ${part%_*}
2279 done | sort | pr -3 -t
2280 echo
2281 done
2283 license="LGPL"
2284 if enabled nonfree; then
2285 license="unredistributable"
2286 elif enabled gpl; then
2287 license="GPL"
2290 echo "License: $license"
2292 echo "Creating config.mak and config.h..."
2294 echo "# Automatically generated by configure - do not modify!" > config.mak
2295 echo "/* Automatically generated by configure - do not modify! */" > $TMPH
2296 echo "#ifndef FFMPEG_CONFIG_H" >> $TMPH
2297 echo "#define FFMPEG_CONFIG_H" >> $TMPH
2298 echo "#define FFMPEG_CONFIGURATION \"$FFMPEG_CONFIGURATION\"" >> $TMPH
2299 echo "#define FFMPEG_DATADIR \"$(eval c_escape $datadir)\"" >> $TMPH
2301 echo "FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION" >> config.mak
2302 echo "prefix=$prefix" >> config.mak
2303 echo "LIBDIR=\$(DESTDIR)$libdir" >> config.mak
2304 echo "SHLIBDIR=\$(DESTDIR)$shlibdir" >> config.mak
2305 echo "INCDIR=\$(DESTDIR)$incdir" >> config.mak
2306 echo "BINDIR=\$(DESTDIR)$bindir" >> config.mak
2307 echo "DATADIR=\$(DESTDIR)$datadir" >> config.mak
2308 echo "MANDIR=\$(DESTDIR)$mandir" >> config.mak
2309 echo "CC=$cc" >> config.mak
2310 echo "YASM=$yasmexe" >> config.mak
2311 echo "AR=$ar" >> config.mak
2312 echo "RANLIB=$ranlib" >> config.mak
2313 echo "LN_S=$ln_s" >> config.mak
2314 enabled stripping &&
2315 echo "STRIP=$strip" >> config.mak ||
2316 echo "STRIP=echo ignoring strip" >> config.mak
2318 echo "OPTFLAGS=$CFLAGS" >> config.mak
2319 echo "VHOOKCFLAGS=$VHOOKCFLAGS" >> config.mak
2320 echo "LDFLAGS=$LDFLAGS" >> config.mak
2321 echo "FFSERVERLDFLAGS=$FFSERVERLDFLAGS" >> config.mak
2322 echo "SHFLAGS=$SHFLAGS" >> config.mak
2323 echo "YASMFLAGS=$YASMFLAGS" >> config.mak
2324 echo "VHOOKSHFLAGS=$VHOOKSHFLAGS" >> config.mak
2325 echo "VHOOKLIBS=$VHOOKLIBS" >> config.mak
2326 echo "LIBOBJFLAGS=$LIBOBJFLAGS" >> config.mak
2327 echo "BUILD_STATIC=$static" >> config.mak
2328 echo "BUILDSUF=$build_suffix" >> config.mak
2329 echo "FULLNAME=$FULLNAME" >> config.mak
2330 echo "LIBPREF=$LIBPREF" >> config.mak
2331 echo "LIBSUF=$LIBSUF" >> config.mak
2332 echo "LIBNAME=$LIBNAME" >> config.mak
2333 echo "SLIBPREF=$SLIBPREF" >> config.mak
2334 echo "SLIBSUF=$SLIBSUF" >> config.mak
2335 echo "EXESUF=$EXESUF" >> config.mak
2336 echo "EXTRA_VERSION=$extra_version" >> config.mak
2337 echo "DEPEND_CMD=$DEPEND_CMD" >> config.mak
2338 echo "HOSTCC=$host_cc" >> config.mak
2339 echo "HOSTCFLAGS=$host_cflags" >> config.mak
2340 echo "HOSTLDFLAGS=$host_ldflags" >> config.mak
2341 echo "HOSTLIBS=$host_libs" >> config.mak
2342 echo "TARGET_EXEC=$target_exec" >> config.mak
2343 echo "TARGET_PATH=$target_path" >> config.mak
2345 if enabled bigendian; then
2346 echo "WORDS_BIGENDIAN=yes" >> config.mak
2347 echo "#define WORDS_BIGENDIAN 1" >> $TMPH
2350 if enabled sdl; then
2351 echo "SDL_LIBS=`"${SDL_CONFIG}" --libs`" >> config.mak
2352 echo "SDL_CFLAGS=`"${SDL_CONFIG}" --cflags`" >> config.mak
2354 if enabled texi2html; then
2355 echo "BUILD_DOC=yes" >> config.mak
2358 get_version(){
2359 name=$1
2360 file=$source_path/$2
2361 eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
2362 eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
2363 lcname=$(tolower $name)
2364 eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
2365 eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
2368 get_version LIBSWSCALE libswscale/swscale.h
2369 get_version LIBPOSTPROC libpostproc/postprocess.h
2370 get_version LIBAVCODEC libavcodec/avcodec.h
2371 get_version LIBAVDEVICE libavdevice/avdevice.h
2372 get_version LIBAVFORMAT libavformat/avformat.h
2373 get_version LIBAVUTIL libavutil/avutil.h
2374 get_version LIBAVFILTER libavfilter/avfilter.h
2376 if enabled shared; then
2377 echo "BUILD_SHARED=yes" >> config.mak
2378 echo "PIC=-fPIC -DPIC" >> config.mak
2379 echo "LIBTARGET=${LIBTARGET}" >> config.mak
2380 echo "SLIBNAME=${SLIBNAME}" >> config.mak
2381 echo "SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}" >> config.mak
2382 echo "SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}" >> config.mak
2383 echo "SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}" >> config.mak
2384 echo "SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}" >> config.mak
2385 echo "SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}" >> config.mak
2386 echo "SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}" >> config.mak
2388 echo "LIB_INSTALL_EXTRA_CMD=${LIB_INSTALL_EXTRA_CMD}" >> config.mak
2389 echo "EXTRALIBS=$extralibs" >> config.mak
2391 echo "ARCH=$arch" >> config.mak
2393 print_config ARCH_ $TMPH config.mak $ARCH_LIST
2394 print_config HAVE_ $TMPH config.mak $HAVE_LIST
2395 print_config CONFIG_ $TMPH config.mak $CONFIG_LIST \
2396 $CONFIG_EXTRA \
2397 $DECODER_LIST \
2398 $ENCODER_LIST \
2399 $PARSER_LIST \
2400 $BSF_LIST \
2401 $DEMUXER_LIST \
2402 $MUXER_LIST \
2403 $FILTER_LIST \
2404 $PROTOCOL_LIST \
2405 $INDEV_LIST \
2406 $OUTDEV_LIST \
2408 echo "#define restrict $_restrict" >> $TMPH
2410 if enabled small; then
2411 echo "#define av_always_inline" >> $TMPH
2414 echo "SRC_PATH=\"$source_path\"" >> config.mak
2415 echo "SRC_PATH_BARE=$source_path" >> config.mak
2416 echo "BUILD_ROOT=\"$PWD\"" >> config.mak
2418 # Apparently it's not possible to portably echo a backslash.
2419 enabled asmalign_pot &&
2420 printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH ||
2421 printf '#define ASMALIGN(ZEROBITS) ".align 1 << " #ZEROBITS "\\n\\t"\n' >> $TMPH
2423 echo "#define EXTERN_PREFIX \"${extern_prefix}\"" >> $TMPH
2425 echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
2427 # Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
2428 cmp -s $TMPH config.h &&
2429 echo "config.h is unchanged" ||
2430 mv -f $TMPH config.h
2432 rm -f $TMPC $TMPE $TMPH $TMPO $TMPS $TMPSH
2434 # build tree in object directory if source path is different from current one
2435 if enabled source_path_used; then
2436 DIRS="\
2437 doc \
2438 libavcodec \
2439 libavcodec/alpha \
2440 libavcodec/arm \
2441 libavcodec/bfin \
2442 libavcodec/mlib \
2443 libavcodec/ppc \
2444 libavcodec/sh4 \
2445 libavcodec/sparc \
2446 libavcodec/x86 \
2447 libavdevice \
2448 libavfilter \
2449 libavformat \
2450 libavutil \
2451 libpostproc \
2452 libswscale \
2453 tests \
2454 tools \
2455 vhook \
2457 FILES="\
2458 Makefile \
2459 common.mak \
2460 subdir.mak \
2461 doc/texi2pod.pl \
2462 libavcodec/Makefile \
2463 libavdevice/Makefile \
2464 libavfilter/Makefile \
2465 libavformat/Makefile \
2466 libavutil/Makefile \
2467 libpostproc/Makefile \
2468 libswscale/Makefile \
2470 for dir in $DIRS ; do
2471 mkdir -p $dir
2472 done
2473 for f in $FILES ; do
2474 $ln_s "$source_path/$f" $f
2475 done
2479 # build pkg-config files
2481 pkgconfig_generate(){
2482 name=$1
2483 shortname=${name#lib}${build_suffix}
2484 comment=$2
2485 version=$3
2486 libs=$4
2487 requires=$5
2488 cat <<EOF > $name/$name.pc
2489 prefix=$prefix
2490 exec_prefix=\${prefix}
2491 libdir=$libdir
2492 includedir=$incdir
2494 Name: $name
2495 Description: $comment
2496 Version: $version
2497 Requires: $(disabled shared && echo $requires)
2498 Requires.private: $(enabled shared && echo $requires)
2499 Conflicts:
2500 Libs: -L\${libdir} -l${shortname} $(disabled shared && echo $libs)
2501 Libs.private: $(enabled shared && echo $libs)
2502 Cflags: -I\${includedir}
2504 cat <<EOF > $name/$name-uninstalled.pc
2505 prefix=
2506 exec_prefix=
2507 libdir=\${pcfiledir}
2508 includedir=${source_path}
2510 Name: $name
2511 Description: $comment
2512 Version: $version
2513 Requires: $requires
2514 Conflicts:
2515 Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
2516 Cflags: -I\${includedir}
2520 pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
2521 pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
2522 pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
2523 pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "libavformat = $LIBAVFORMAT_VERSION"
2524 enabled avfilter &&
2525 pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
2526 enabled postproc &&
2527 pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
2528 if enabled swscale; then
2529 pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"
2530 else
2531 pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavcodec = $LIBAVCODEC_VERSION"
2532 apply libswscale/libswscale.pc sed s/^Libs:.*$/Libs:/