Don't access RMContext directly in rdt.c. Rather, use the return value of
[ffmpeg-lucabe.git] / configure
blobf0d18d41732b8f8f4f6e5d3010550a504aa4a37b
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 " --libdir=DIR install libs in DIR [PREFIX/lib]"
68 echo " --shlibdir=DIR install shared libs in DIR [PREFIX/lib]"
69 echo " --incdir=DIR install includes in DIR [PREFIX/include]"
70 echo " --mandir=DIR install man page in DIR [PREFIX/share/man]"
71 echo " --enable-static build static libraries [yes]"
72 echo " --disable-static do not build static libraries [no]"
73 echo " --enable-shared build shared libraries [no]"
74 echo " --disable-shared do not build shared libraries [yes]"
75 echo " --enable-gpl allow use of GPL code, the resulting libs"
76 echo " and binaries will be under GPL [no]"
77 echo " --enable-nonfree allow use of nonfree code, the resulting libs"
78 echo " and binaries will be unredistributable [no]"
79 echo " --enable-postproc enable GPLed postprocessing support [no]"
80 echo " --enable-swscale enable GPLed software scaler support [no]"
81 echo " --enable-avfilter video filter support (replaces vhook) [no]"
82 echo " --enable-avfilter-lavf video filters dependent on avformat [no]"
83 echo " --disable-vhook disable video hooking support"
84 echo " --enable-beosthreads use BeOS threads [no]"
85 echo " --enable-os2threads use OS/2 threads [no]"
86 echo " --enable-pthreads use pthreads [no]"
87 echo " --enable-w32threads use Win32 threads [no]"
88 echo " --enable-x11grab enable X11 grabbing [no]"
89 echo
90 echo "External library support:"
91 echo " --enable-mlib enable Sun medialib [no]"
92 echo " --enable-avisynth enable reading of AVISynth script files [no]"
93 echo " --enable-bzlib enable bzlib [no]"
94 echo " --enable-libamr-nb enable libamr-nb floating point audio codec"
95 echo " --enable-libamr-wb enable libamr-wb floating point audio codec"
96 echo " --enable-libdc1394 enable IIDC-1394 grabbing using libdc1394"
97 echo " and libraw1394 [no]"
98 echo " --enable-libdirac enable Dirac support via libdirac [no]"
99 echo " --enable-libfaac enable FAAC support via libfaac [no]"
100 echo " --enable-libfaad enable FAAD support via libfaad [no]"
101 echo " --enable-libfaadbin open libfaad.so.0 at runtime [no]"
102 echo " --enable-libgsm enable GSM support via libgsm [no]"
103 echo " --enable-libmp3lame enable MP3 encoding via libmp3lame [no]"
104 echo " --enable-libnut enable NUT (de)muxing via libnut,"
105 echo " native (de)muxer exists [no]"
106 echo " --enable-libschroedinger enable Dirac support via libschroedinger [no]"
107 echo " --enable-libspeex enable Speex decoding via libspeex [no]"
108 echo " --enable-libtheora enable Theora encoding via libtheora [no]"
109 echo " --enable-libvorbis enable Vorbis encoding via libvorbis,"
110 echo " native implementation exists [no]"
111 echo " --enable-libx264 enable H.264 encoding via x264 [no]"
112 echo " --enable-libxvid enable Xvid encoding via xvidcore,"
113 echo " native MPEG-4/Xvid encoder exists [no]"
114 echo " --enable-zlib enable zlib [no]"
115 echo ""
116 echo "Advanced options (experts only):"
117 echo " --source-path=PATH path to source code [$source_path]"
118 echo " --cross-prefix=PREFIX use PREFIX for compilation tools [$cross_prefix]"
119 echo " --enable-cross-compile assume a cross-compiler is used"
120 echo " --target-os=OS compiler targets OS [$target_os]"
121 echo " --target-exec=CMD command to run executables on target"
122 echo " --target-path=DIR path to view of build directory on target"
123 echo " --nm=NM use nm tool"
124 echo " --cc=CC use C compiler CC [$cc]"
125 echo " --host-cc=HOSTCC use host C compiler HOSTCC"
126 echo " --host-cflags=HCFLAGS use HCFLAGS when compiling for host"
127 echo " --host-ldflags=HLDFLAGS use HLDFLAGS when linking for host"
128 echo " --host-libs=HLIBS use libs HLIBS when linking for host"
129 echo " --extra-cflags=ECFLAGS add ECFLAGS to CFLAGS [$CFLAGS]"
130 echo " --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]"
131 echo " --extra-libs=ELIBS add ELIBS [$ELIBS]"
132 echo " --extra-version=STRING version string suffix []"
133 echo " --build-suffix=SUFFIX library name suffix []"
134 echo " --arch=ARCH select architecture [$arch]"
135 echo " --cpu=CPU select the minimum required CPU (affects"
136 echo " instruction selection, may crash on older CPUs)"
137 echo " --enable-powerpc-perf enable performance report on PPC"
138 echo " (requires enabling PMC)"
139 echo " --disable-altivec disable AltiVec optimizations"
140 echo " --disable-mmx disable MMX optimizations"
141 echo " --disable-mmx2 disable MMX2 optimizations"
142 echo " --disable-ssse3 disable SSSE3 optimizations"
143 echo " --disable-armv5te disable armv5te optimizations"
144 echo " --disable-armv6 disable armv6 optimizations"
145 echo " --disable-armvfp disable ARM VFP optimizations"
146 echo " --disable-iwmmxt disable iwmmxt optimizations"
147 echo " --disable-mmi disable MMI optimizations"
148 echo " --disable-neon disable neon optimizations"
149 echo " --disable-vis disable VIS optimizations"
150 echo " --disable-network disable network support [no]"
151 echo " --disable-ipv6 disable IPv6 support [no]"
152 echo " --disable-mpegaudio-hp faster (but less accurate)"
153 echo " MPEG audio decoding [no]"
154 echo " --disable-aandct disable AAN DCT code"
155 echo " --disable-fft disable FFT code"
156 echo " --disable-golomb disable Golomb code"
157 echo " --disable-mdct disable MDCT code"
158 echo " --enable-gray enable full grayscale support (slower color)"
159 echo " --disable-ffmpeg disable ffmpeg build"
160 echo " --disable-ffplay disable ffplay build"
161 echo " --disable-ffserver disable ffserver build"
162 echo " --enable-small optimize for size instead of speed"
163 echo " --enable-hardcoded-tables use hardcoded tables instead of runtime generation"
164 echo " --enable-memalign-hack emulate memalign, interferes with memory debuggers"
165 echo " --enable-beos-netserver enable BeOS netserver"
166 echo " --disable-encoder=NAME disable encoder NAME"
167 echo " --enable-encoder=NAME enable encoder NAME"
168 echo " --disable-encoders disable all encoders"
169 echo " --disable-decoder=NAME disable decoder NAME"
170 echo " --enable-decoder=NAME enable decoder NAME"
171 echo " --disable-decoders disable all decoders"
172 echo " --disable-muxer=NAME disable muxer NAME"
173 echo " --enable-muxer=NAME enable muxer NAME"
174 echo " --disable-muxers disable all muxers"
175 echo " --disable-demuxer=NAME disable demuxer NAME"
176 echo " --enable-demuxer=NAME enable demuxer NAME"
177 echo " --disable-demuxers disable all demuxers"
178 echo " --enable-parser=NAME enable parser NAME"
179 echo " --disable-parser=NAME disable parser NAME"
180 echo " --disable-parsers disable all parsers"
181 echo " --enable-bsf=NAME enable bitstream filter NAME"
182 echo " --disable-bsf=NAME disable bitstream filter NAME"
183 echo " --disable-bsfs disable all bitstream filters"
184 echo " --enable-protocol=NAME enable protocol NAME"
185 echo " --disable-protocol=NAME disable protocol NAME"
186 echo " --disable-protocols disable all protocols"
187 echo " --disable-indevs disable input devices"
188 echo " --disable-outdevs disable output devices"
189 echo " --disable-devices disable all devices"
190 echo " --enable-filter=NAME enable filter NAME"
191 echo " --disable-filter=NAME disable filter NAME"
192 echo " --disable-filters disable all filters"
193 echo " --list-decoders show all available decoders"
194 echo " --list-encoders show all available encoders"
195 echo " --list-muxers show all available muxers"
196 echo " --list-demuxers show all available demuxers"
197 echo " --list-parsers show all available parsers"
198 echo " --list-protocols show all available protocols"
199 echo " --list-bsfs show all available bitstream filters"
200 echo " --list-indevs show all available input devices"
201 echo " --list-outdevs show all available output devices"
202 echo " --list-filters show all available filters"
203 echo
204 echo "Developer options (useful when working on FFmpeg itself):"
205 echo " --disable-debug disable debugging symbols"
206 echo " --enable-debug=LEVEL set the debug level [$debuglevel]"
207 echo " --enable-gprof enable profiling with gprof [$gprof]"
208 echo " --disable-optimizations disable compiler optimizations"
209 echo " --enable-extra-warnings enable more compiler warnings"
210 echo " --disable-stripping disable stripping of executables and shared libraries"
211 echo ""
212 echo "NOTE: Object files are built at the place where configure is launched."
213 exit 0
216 log(){
217 echo "$@" >> $logfile
220 log_file(){
221 log BEGIN $1
222 pr -n -t $1 >> $logfile
223 log END $1
226 echolog(){
227 log "$@"
228 echo "$@"
231 die(){
232 echolog "$@"
233 cat <<EOF
234 If you think configure made a mistake, make sure you are using the latest
235 version from SVN. If the latest version fails, report the problem to the
236 ffmpeg-user@mplayerhq.hu mailing list or IRC #ffmpeg on irc.freenode.net.
238 if disabled logging; then
239 cat <<EOF
240 Rerun configure with logging enabled (do not use --disable-logging), and
241 include the log this produces with your report.
243 else
244 cat <<EOF
245 Include the log file "$logfile" produced by configure as this will help
246 solving the problem.
249 rm -f $TMPC $TMPE $TMPH $TMPO $TMPS $TMPSH
250 exit 1
253 # Avoid locale weirdness, besides we really just want to translate ASCII.
254 toupper(){
255 echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
258 tolower(){
259 echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
262 set_all(){
263 value=$1
264 shift
265 for var in $*; do
266 eval $var=$value
267 done
270 set_weak(){
271 value=$1
272 shift
273 for var; do
274 eval : \${$var:=$value}
275 done
278 pushvar(){
279 for var in $*; do
280 eval level=\${${var}_level:=0}
281 eval ${var}_${level}="\$$var"
282 eval ${var}_level=$(($level+1))
283 done
286 popvar(){
287 for var in $*; do
288 eval level=\${${var}_level:-0}
289 test $level = 0 && continue
290 eval level=$(($level-1))
291 eval $var="\${${var}_${level}}"
292 eval ${var}_level=$level
293 eval unset ${var}_${level}
294 done
297 enable(){
298 set_all yes $*
301 disable(){
302 set_all no $*
305 enable_weak(){
306 set_weak yes $*
309 disable_weak(){
310 set_weak no $*
313 do_enable_deep(){
314 for var; do
315 enabled $var && continue
316 eval sel="\$${var}_select"
317 eval sgs="\$${var}_suggest"
318 pushvar var sgs
319 enable_deep $sel
320 popvar sgs
321 enable_deep_weak $sgs
322 popvar var
323 done
326 enable_deep(){
327 do_enable_deep $*
328 enable $*
331 enable_deep_weak(){
332 do_enable_deep $*
333 enable_weak $*
336 enabled(){
337 test "${1#!}" = "$1" && op== || op=!=
338 eval test "x\$${1#!}" $op "xyes"
341 disabled(){
342 test "${1#!}" = "$1" && op== || op=!=
343 eval test "x\$${1#!}" $op "xno"
346 enabled_all(){
347 for opt; do
348 enabled $opt || return 1
349 done
352 disabled_all(){
353 for opt; do
354 disabled $opt || return 1
355 done
358 enabled_any(){
359 for opt; do
360 enabled $opt && return 0
361 done
364 disabled_any(){
365 for opt; do
366 disabled $opt && return 0
367 done
368 return 1
371 set_default(){
372 for opt; do
373 eval : \${$opt:=\$${opt}_default}
374 done
377 is_in(){
378 value=$1
379 shift
380 for var in $*; do
381 [ $var = $value ] && return 0
382 done
383 return 1
386 check_deps(){
387 for cfg; do
388 cfg="${cfg#!}"
389 enabled ${cfg}_checking && die "Circular dependency for $cfg."
390 disabled ${cfg}_checking && continue
391 enable ${cfg}_checking
393 eval dep_all="\$${cfg}_deps"
394 eval dep_any="\$${cfg}_deps_any"
395 eval dep_sel="\$${cfg}_select"
396 eval dep_sgs="\$${cfg}_suggest"
398 pushvar cfg dep_all dep_any dep_sel dep_sgs
399 check_deps $dep_all $dep_any $dep_sel $dep_sgs
400 popvar cfg dep_all dep_any dep_sel dep_sgs
402 enabled_all $dep_all || disable $cfg
403 enabled_any $dep_any || disable $cfg
404 disabled_any $dep_sel && disable $cfg
406 if enabled $cfg; then
407 eval dep_extralibs="\$${cfg}_extralibs"
408 test -n "$dep_extralibs" && add_extralibs $dep_extralibs
409 enable_deep $dep_sel
410 enable_deep_weak $dep_sgs
413 disable ${cfg}_checking
414 done
417 print_config(){
418 pfx=$1
419 header=$2
420 makefile=$3
421 shift 3
422 for cfg; do
423 ucname="`toupper $cfg`"
424 if enabled $cfg; then
425 echo "#define ${pfx}${ucname} 1" >> $header
426 echo "#define ENABLE_${ucname} 1" >> $header
427 echo "${pfx}${ucname}=yes" >> $makefile
428 else
429 echo "#define ENABLE_${ucname} 0" >> $header
431 done
434 flags_saved(){
435 (: ${SAVE_CFLAGS?}) 2> /dev/null
438 save_flags(){
439 flags_saved && return
440 SAVE_CFLAGS="$CFLAGS"
441 SAVE_LDFLAGS="$LDFLAGS"
442 SAVE_extralibs="$extralibs"
445 restore_flags(){
446 flags_saved || return
447 CFLAGS="$SAVE_CFLAGS"
448 LDFLAGS="$SAVE_LDFLAGS"
449 extralibs="$SAVE_extralibs"
450 unset SAVE_CFLAGS
451 unset SAVE_LDFLAGS
452 unset SAVE_extralibs
455 temp_cflags(){
456 save_flags
457 CFLAGS="$CFLAGS $*"
460 temp_ldflags(){
461 save_flags
462 LDFLAGS="$LDFLAGS $*"
465 temp_extralibs(){
466 save_flags
467 extralibs="$extralibs $*"
470 append(){
471 var=$1
472 shift
473 flags_saved && eval "SAVE_$var=\"\$SAVE_$var $*\""
474 eval "$var=\"\$$var $*\""
477 add_cflags(){
478 append CFLAGS "$@"
481 add_ldflags(){
482 append LDFLAGS "$@"
485 add_extralibs(){
486 append extralibs "$@"
489 check_cmd(){
490 log "$@"
491 "$@" >> $logfile 2>&1
494 check_cc(){
495 log check_cc "$@"
496 cat > $TMPC
497 log_file $TMPC
498 check_cmd $cc $CFLAGS "$@" -c -o $TMPO $TMPC
501 check_cpp(){
502 log check_cpp "$@"
503 cat > $TMPC
504 log_file $TMPC
505 check_cmd $cc $CFLAGS "$@" -E -o $TMPO $TMPC
508 check_asm(){
509 log check_asm "$@"
510 name="$1"
511 asm="$2"
512 shift 2
513 check_cc "$@" <<EOF && enable $name || disable $name
514 int foo(void){ __asm__ volatile($asm); }
518 check_yasm(){
519 log check_yasm "$@"
520 echo "$1" > $TMPS
521 log_file $TMPS
522 shift 1
523 check_cmd $yasmexe $YASMFLAGS "$@" -o $TMPO $TMPS
526 check_ld(){
527 log check_ld "$@"
528 check_cc || return
529 flags=''
530 libs=''
531 for f; do
532 test "${f}" = "${f#-l}" && flags="$flags $f" || libs="$libs $f"
533 done
534 check_cmd $cc $LDFLAGS $flags -o $TMPE $TMPO $extralibs $libs
537 check_cflags(){
538 log check_cflags "$@"
539 check_cc "$@" <<EOF && add_cflags "$@"
540 int x;
544 check_ldflags(){
545 log check_ldflags "$@"
546 check_ld "$@" <<EOF && add_ldflags "$@"
547 int main(void){ return 0; }
551 check_header(){
552 log check_header "$@"
553 header=$1
554 shift
555 var=`echo $header | sed 's/[^A-Za-z0-9_]/_/g'`
556 disable $var
557 check_cpp "$@" <<EOF && enable $var
558 #include <$header>
559 int x;
563 check_func(){
564 log check_func "$@"
565 func=$1
566 shift
567 disable $func
568 check_ld "$@" <<EOF && enable $func
569 extern int $func();
570 int main(void){ $func(); }
574 check_func_headers(){
575 log check_func_headers "$@"
576 headers=$1
577 func=$2
578 shift 2
579 disable $func
580 incs=""
581 for hdr in $headers; do
582 incs="$incs
583 #include <$hdr>"
584 done
585 check_ld "$@" <<EOF && enable $func
586 $incs
587 int main(int argc, char **argv){
588 (void) $func;
589 return 0;
594 check_cpp_condition(){
595 log check_cpp_condition "$@"
596 header=$1
597 condition=$2
598 check_cpp <<EOF
599 #include <$header>
600 #if !($condition)
601 #error "unsatisfied condition: $condition"
602 #endif
606 check_lib(){
607 log check_lib "$@"
608 header="$1"
609 func="$2"
610 shift 2
611 temp_extralibs "$@"
612 check_header $header && check_func $func && add_extralibs "$@"
613 err=$?
614 restore_flags
615 return $err
618 check_lib2(){
619 log check_lib2 "$@"
620 headers="$1"
621 func="$2"
622 shift 2
623 temp_extralibs "$@"
624 check_func_headers "$headers" $func && add_extralibs "$@"
625 err=$?
626 restore_flags
627 return $err
630 check_exec(){
631 check_ld "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
634 check_exec_crash(){
635 code=`cat`
637 # exit() is not async signal safe. _Exit (C99) and _exit (POSIX)
638 # are safe but may not be available everywhere. Thus we use
639 # raise(SIGTERM) instead. The check is run in a subshell so we
640 # can redirect the "Terminated" message from the shell. SIGBUS
641 # is not defined by standard C so it is used conditionally.
643 (check_exec "$@") >> $logfile 2>&1 <<EOF
644 #include <signal.h>
645 static void sighandler(int sig){
646 raise(SIGTERM);
648 int main(void){
649 signal(SIGILL, sighandler);
650 signal(SIGFPE, sighandler);
651 signal(SIGSEGV, sighandler);
652 #ifdef SIGBUS
653 signal(SIGBUS, sighandler);
654 #endif
655 { $code }
660 check_type(){
661 log check_type "$@"
662 headers=$1
663 type=$2
664 shift 2
665 disable $type
666 incs=""
667 for hdr in $headers; do
668 incs="$incs
669 #include <$hdr>"
670 done
671 check_cc "$@" <<EOF && enable $type
672 $incs
673 $type v;
677 require(){
678 name="$1"
679 header="$2"
680 func="$3"
681 shift 3
682 check_lib $header $func "$@" || die "ERROR: $name not found"
685 require2(){
686 name="$1"
687 headers="$2"
688 func="$3"
689 shift 3
690 check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
693 check_foo_config(){
694 cfg=$1
695 pkg=$2
696 header=$3
697 func=$4
698 shift 4
699 disable $cfg
700 check_cmd ${pkg}-config --version
701 err=$?
702 if test "$err" = 0; then
703 temp_cflags `${pkg}-config --cflags`
704 temp_extralibs `${pkg}-config --libs`
705 check_lib "$@" $header $func && enable $cfg
707 return $err
710 apply(){
711 file=$1
712 shift
713 "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
716 # CONFIG_LIST contains configurable options, while HAVE_LIST is for
717 # system-dependent things.
719 COMPONENT_LIST="
720 bsfs
721 decoders
722 demuxers
723 encoders
724 filters
725 indevs
726 muxers
727 outdevs
728 parsers
729 protocols
732 CONFIG_LIST="
733 $COMPONENT_LIST
734 aandct
735 avfilter
736 avfilter_lavf
737 avisynth
738 beos_netserver
739 bzlib
740 ffmpeg
741 ffplay
742 ffserver
744 golomb
746 gprof
747 gray
748 hardcoded_tables
749 ipv6
750 libamr_nb
751 libamr_wb
752 libdc1394
753 libdirac
754 libfaac
755 libfaad
756 libfaadbin
757 libgsm
758 libmp3lame
759 libnut
760 libschroedinger
761 libspeex
762 libtheora
763 libvorbis
764 libx264
765 libxvid
766 mdct
767 memalign_hack
768 mlib
769 mpegaudio_hp
770 network
771 nonfree
772 postproc
773 powerpc_perf
774 small
775 swscale
776 vhook
777 x11grab
778 zlib
781 THREADS_LIST='
782 beosthreads
783 os2threads
784 pthreads
785 w32threads
788 ARCH_LIST='
789 alpha
790 armv4l
791 bfin
792 ia64
793 m68k
794 mips
795 parisc
796 powerpc
797 s390
799 sparc
800 sparc64
802 x86_32
803 x86_64
806 ARCH_EXT_LIST='
807 altivec
808 armv5te
809 armv6
810 armvfp
811 iwmmxt
814 mmx2
815 neon
816 ssse3
820 HAVE_LIST="
821 $ARCH_EXT_LIST
822 $THREADS_LIST
823 altivec_h
824 arpa_inet_h
825 bswap
826 closesocket
827 cmov
828 conio_h
829 dcbzl
830 dev_bktr_ioctl_bt848_h
831 dev_bktr_ioctl_meteor_h
832 dev_ic_bt8xx_h
833 dev_video_meteor_ioctl_meteor_h
834 dev_video_bktr_ioctl_bt848_h
835 dlfcn_h
836 dlopen
837 dos_paths
838 ebp_available
839 ebx_available
840 fast_64bit
841 fast_cmov
842 fast_unaligned
843 fork
844 freetype2
845 gethrtime
846 GetProcessTimes
847 getrusage
848 imlib2
849 inet_aton
850 inline_asm
851 libdc1394_1
852 libdc1394_2
853 llrint
854 lrint
855 lrintf
856 machine_ioctl_bt848_h
857 machine_ioctl_meteor_h
858 malloc_h
859 memalign
860 mkstemp
862 ppc64
863 round
864 roundf
866 sdl_video_size
867 socklen_t
868 soundcard_h
869 poll_h
870 sys_mman_h
871 sys_resource_h
872 sys_select_h
873 sys_soundcard_h
874 sys_videoio_h
875 termios_h
876 threads
877 winsock2_h
878 yasm
881 # options emitted with CONFIG_ prefix but not available on command line
882 CONFIG_EXTRA="
883 fft_mmx
884 oldscaler
887 CMDLINE_SELECT="
888 $ARCH_EXT_LIST
889 $CONFIG_LIST
890 $THREADS_LIST
891 cross_compile
892 debug
893 extra_warnings
894 logging
895 optimizations
896 shared
897 static
898 stripping
901 PATHS_LIST='
902 bindir
903 incdir
904 libdir
905 mandir
906 prefix
907 shlibdir
910 CMDLINE_SET="
911 $PATHS_LIST
912 arch
913 build_suffix
916 cross_prefix
917 extra_version
918 host_cc
919 host_cflags
920 host_ldflags
921 host_libs
922 logfile
924 source_path
925 target_exec
926 target_os
927 target_path
930 # code dependency declarations
932 # architecture extensions
933 altivec_deps="powerpc"
934 armv5te_deps="armv4l"
935 armv6_deps="armv4l"
936 armvfp_deps="armv4l"
937 iwmmxt_deps="armv4l"
938 mmi_deps="mips"
939 mmx_deps="x86"
940 mmx2_deps="x86 mmx"
941 neon_deps="armv4l"
942 ssse3_deps="x86"
943 vis_deps="sparc"
945 # common features
946 fft_suggest="fft_mmx"
947 fft_mmx_deps="mmx yasm"
948 oldscaler_deps="!swscale"
950 # decoders / encoders
951 aac_decoder_select="fft mdct"
952 ac3_decoder_deps="gpl"
953 ac3_decoder_select="fft mdct"
954 atrac3_decoder_select="fft mdct"
955 cavs_decoder_select="golomb"
956 cook_decoder_select="fft mdct"
957 cscd_decoder_suggest="zlib"
958 dca_decoder_select="fft mdct"
959 dnxhd_encoder_select="aandct"
960 dxa_decoder_select="zlib"
961 eac3_decoder_deps="gpl"
962 eac3_decoder_select="fft mdct"
963 eatgq_decoder_select="aandct"
964 ffv1_decoder_select="golomb"
965 flac_decoder_select="golomb"
966 flac_encoder_select="golomb"
967 flashsv_decoder_select="zlib"
968 flashsv_encoder_select="zlib"
969 flv_encoder_select="aandct"
970 h261_encoder_select="aandct"
971 h263_encoder_select="aandct"
972 h263p_encoder_select="aandct"
973 h264_decoder_select="golomb"
974 imc_decoder_select="fft mdct"
975 jpegls_decoder_select="golomb"
976 jpegls_encoder_select="golomb"
977 ljpeg_encoder_select="aandct"
978 loco_decoder_select="golomb"
979 mjpeg_encoder_select="aandct"
980 mpeg1video_encoder_select="aandct"
981 mpeg2video_encoder_select="aandct"
982 mpeg4_encoder_select="aandct"
983 msmpeg4v1_encoder_select="aandct"
984 msmpeg4v2_encoder_select="aandct"
985 msmpeg4v3_encoder_select="aandct"
986 mpeg_xvmc_decoder_deps="xvmc"
987 nellymoser_decoder_select="fft mdct"
988 nellymoser_encoder_select="fft mdct"
989 png_decoder_select="zlib"
990 png_encoder_select="zlib"
991 qdm2_decoder_select="fft mdct"
992 rv10_encoder_select="aandct"
993 rv20_encoder_select="aandct"
994 shorten_decoder_select="golomb"
995 sonic_decoder_select="golomb"
996 sonic_encoder_select="golomb"
997 sonic_ls_encoder_select="golomb"
998 svq3_decoder_select="golomb"
999 svq3_decoder_suggest="zlib"
1000 tiff_decoder_suggest="zlib"
1001 tiff_encoder_suggest="zlib"
1002 tscc_decoder_select="zlib"
1003 vorbis_decoder_select="fft mdct"
1004 vorbis_encoder_select="fft mdct"
1005 wmav1_decoder_select="fft mdct"
1006 wmav1_encoder_select="fft mdct"
1007 wmav2_decoder_select="fft mdct"
1008 wmav2_encoder_select="fft mdct"
1009 wmv1_encoder_select="aandct"
1010 wmv2_encoder_select="aandct"
1011 zlib_decoder_select="zlib"
1012 zlib_encoder_select="zlib"
1013 zmbv_decoder_select="zlib"
1014 zmbv_encoder_select="zlib"
1016 # external libraries
1017 libamr_nb_decoder_deps="libamr_nb"
1018 libamr_nb_encoder_deps="libamr_nb"
1019 libamr_wb_decoder_deps="libamr_wb"
1020 libamr_wb_encoder_deps="libamr_wb"
1021 libdirac_decoder_deps="libdirac !libschroedinger"
1022 libdirac_encoder_deps="libdirac"
1023 libfaac_encoder_deps="libfaac"
1024 libfaad_decoder_deps="libfaad"
1025 libfaadbin_decoder_extralibs='$ldl'
1026 libgsm_decoder_deps="libgsm"
1027 libgsm_encoder_deps="libgsm"
1028 libgsm_ms_decoder_deps="libgsm"
1029 libgsm_ms_encoder_deps="libgsm"
1030 libmp3lame_encoder_deps="libmp3lame"
1031 libschroedinger_decoder_deps="libschroedinger"
1032 libschroedinger_encoder_deps="libschroedinger"
1033 libspeex_decoder_deps="libspeex"
1034 libtheora_encoder_deps="libtheora"
1035 libvorbis_encoder_deps="libvorbis"
1036 libx264_encoder_deps="libx264"
1037 libxvid_encoder_deps="libxvid"
1038 mpeg4aac_decoder_deps="libfaad"
1040 # demuxers / muxers
1041 ac3_demuxer_deps="ac3_parser"
1042 audio_beos_demuxer_deps="audio_beos"
1043 audio_beos_demuxer_extralibs="-lmedia -lbe"
1044 audio_beos_muxer_deps="audio_beos"
1045 audio_beos_muxer_extralibs="-lmedia -lbe"
1046 avisynth_demuxer_deps="avisynth"
1047 bktr_demuxer_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
1048 dirac_demuxer_deps="dirac_parser"
1049 dv1394_demuxer_deps="dv1394 dv_demuxer"
1050 libdc1394_demuxer_deps="libdc1394"
1051 libnut_demuxer_deps="libnut"
1052 libnut_muxer_deps="libnut"
1053 matroska_demuxer_suggest="zlib bzlib"
1054 mov_demuxer_suggest="zlib"
1055 mp3_demuxer_deps="mpegaudio_parser"
1056 oss_demuxer_deps_any="soundcard_h sys_soundcard_h"
1057 oss_muxer_deps_any="soundcard_h sys_soundcard_h"
1058 redir_demuxer_deps="network"
1059 rtp_muxer_deps="network rtp_protocol"
1060 rtsp_demuxer_deps="sdp_demuxer"
1061 sdp_demuxer_deps="rtp_protocol mpegts_demuxer"
1062 v4l_demuxer_deps="linux_videodev_h"
1063 v4l2_demuxer_deps_any="linux_videodev2_h sys_videoio_h"
1064 vfwcap_demuxer_deps="capCreateCaptureWindow"
1065 vfwcap_demuxer_extralibs="-lvfw32"
1066 x11_grab_device_demuxer_deps="x11grab XShmCreateImage"
1067 x11_grab_device_demuxer_extralibs="-lX11 -lXext"
1069 # protocols
1070 http_protocol_deps="network"
1071 rtp_protocol_deps="udp_protocol"
1072 tcp_protocol_deps="network"
1073 udp_protocol_deps="network"
1075 # filters
1076 movie_filter_deps="avfilter_lavf"
1078 # programs
1079 ffplay_deps="sdl"
1080 ffserver_deps="ffm_muxer rtp_protocol rtsp_demuxer"
1081 ffserver_extralibs='$ldl'
1082 vhook_extralibs='$ldl'
1085 # default parameters
1087 logfile="config.err"
1089 # installation paths
1090 prefix_default="/usr/local"
1091 bindir_default='${prefix}/bin'
1092 incdir_default='${prefix}/include'
1093 libdir_default='${prefix}/lib'
1094 mandir_default='${prefix}/share/man'
1095 shlibdir_default="$libdir_default"
1097 # toolchain
1098 cc_default="gcc"
1099 host_cc_default="gcc"
1100 yasmexe="yasm"
1101 ar="ar"
1102 nm_default="nm"
1103 ranlib="ranlib"
1104 strip="strip"
1105 ln_s="ln -sf"
1106 objformat="elf"
1108 # machine
1109 arch=`uname -m`
1110 cpu="generic"
1112 # OS
1113 target_os=$(tolower $(uname -s))
1115 # configurable options
1116 enable debug
1117 enable ffmpeg
1118 enable ffplay
1119 enable ffserver
1120 enable ipv6
1121 enable mpegaudio_hp
1122 enable network
1123 enable oldscaler
1124 enable optimizations
1125 enable protocols
1126 enable static
1127 enable stripping
1128 vhook="default"
1130 # build settings
1131 add_cflags -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112
1132 SHFLAGS='-shared -Wl,-soname,$$(@F)'
1133 VHOOKSHFLAGS='$(SHFLAGS)'
1134 FFSERVERLDFLAGS=-Wl,-E
1135 LIBPREF="lib"
1136 LIBSUF=".a"
1137 FULLNAME='$(NAME)$(BUILDSUF)'
1138 LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
1139 SLIBPREF="lib"
1140 SLIBSUF=".so"
1141 SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
1142 SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
1143 SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
1144 LIB_INSTALL_EXTRA_CMD='$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
1146 host_cflags='-O3 -g -Wall'
1147 host_libs='-lm'
1149 target_path='.'
1151 # gcc stupidly only outputs the basename of targets with -MM, but we need the
1152 # full relative path for objects in subdirectories for non-recursive Make.
1153 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,"'
1155 # find source path
1156 source_path="`dirname \"$0\"`"
1157 enable source_path_used
1158 if test -z "$source_path" -o "$source_path" = "." ; then
1159 source_path="`pwd`"
1160 disable source_path_used
1161 else
1162 source_path="`cd \"$source_path\"; pwd`"
1163 echo "$source_path" | grep -q '[[:blank:]]' &&
1164 die "Out of tree builds are impossible with whitespace in source path."
1167 FFMPEG_CONFIGURATION="$@"
1169 find_things(){
1170 thing=$1
1171 pattern=$2
1172 file=$source_path/$3
1173 sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
1176 ENCODER_LIST=$(find_things encoder ENC libavcodec/allcodecs.c)
1177 DECODER_LIST=$(find_things decoder DEC libavcodec/allcodecs.c)
1178 PARSER_LIST=$(find_things parser PARSER libavcodec/allcodecs.c)
1179 BSF_LIST=$(find_things bsf BSF libavcodec/allcodecs.c)
1180 MUXER_LIST=$(find_things muxer _MUX libavformat/allformats.c)
1181 DEMUXER_LIST=$(find_things demuxer DEMUX libavformat/allformats.c)
1182 OUTDEV_LIST=$(find_things muxer _MUX libavdevice/alldevices.c)
1183 INDEV_LIST=$(find_things demuxer DEMUX libavdevice/alldevices.c)
1184 PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
1185 FILTER_LIST=$(find_things filter FILTER libavfilter/allfilters.c)
1187 enable $ARCH_EXT_LIST \
1188 $DECODER_LIST \
1189 $ENCODER_LIST \
1190 $PARSER_LIST \
1191 $BSF_LIST \
1192 $DEMUXER_LIST \
1193 $MUXER_LIST \
1194 $FILTER_LIST \
1195 $PROTOCOL_LIST \
1196 $INDEV_LIST \
1197 $OUTDEV_LIST \
1199 die_unknown(){
1200 echo "Unknown option \"$1\"."
1201 echo "See $0 --help for available options."
1202 exit 1
1205 show_list() {
1206 suffix=_$1
1207 shift
1208 echo $* | sed s/$suffix//g | tr ' ' '\n' | sort
1209 exit 0
1212 for opt do
1213 optval="${opt#*=}"
1214 case "$opt" in
1215 --extra-cflags=*) add_cflags "$optval"
1217 --extra-ldflags=*) add_ldflags "$optval"
1219 --extra-libs=*) add_extralibs "$optval"
1221 --disable-devices) disable $INDEV_LIST $OUTDEV_LIST
1223 --enable-debug=*) debuglevel="$optval"
1225 --enable-*=*|--disable-*=*)
1226 eval `echo "$opt" | sed 's/=/-/;s/--/action=/;s/-/ thing=/;s/-/ name=/'`
1227 case "$thing" in
1228 encoder|decoder|muxer|demuxer|parser|bsf|protocol|filter) $action ${optval}_${thing} ;;
1229 *) die_unknown "$opt" ;;
1230 esac
1232 --enable-?*|--disable-?*)
1233 eval `echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g'`
1234 if is_in $option $COMPONENT_LIST; then
1235 eval $action \$$(toupper ${option%s})_LIST
1236 elif is_in $option $CMDLINE_SELECT; then
1237 $action $option
1238 else
1239 die_unknown $opt
1242 --list-*)
1243 NAME="${opt#--list-}"
1244 is_in $NAME $COMPONENT_LIST || die_unknown $opt
1245 NAME=${NAME%s}
1246 eval show_list $NAME \$$(toupper $NAME)_LIST
1248 --help|-h) show_help
1251 optname="${opt%%=*}"
1252 optname="${optname#--}"
1253 optname=$(echo "$optname" | sed 's/-/_/g')
1254 is_in $optname $CMDLINE_SET || die_unknown $opt
1255 eval $optname='$optval'
1257 esac
1258 done
1260 disabled logging && logfile=/dev/null
1262 echo "# $0 $@" > $logfile
1263 set >> $logfile
1265 test -n "$cross_prefix" && enable cross_compile
1267 cc_default="${cross_prefix}${cc_default}"
1268 yasmexe="${cross_prefix}${yasmexe}"
1269 ar="${cross_prefix}${ar}"
1270 nm_default="${cross_prefix}${nm_default}"
1271 ranlib="${cross_prefix}${ranlib}"
1272 strip="${cross_prefix}${strip}"
1274 set_default cc nm
1275 enabled cross_compile || host_cc_default=$cc
1276 set_default host_cc
1278 # set temporary file name
1279 if test ! -z "$TMPDIR" ; then
1280 TMPDIR1="${TMPDIR}"
1281 elif test ! -z "$TEMPDIR" ; then
1282 TMPDIR1="${TEMPDIR}"
1283 else
1284 TMPDIR1="/tmp"
1287 TMPC="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.c"
1288 TMPE="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}${EXESUF}"
1289 TMPH="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.h"
1290 TMPO="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.o"
1291 TMPS="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.S"
1292 TMPSH="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.sh"
1294 check_cflags -std=c99
1296 case "$arch" in
1297 i386|i486|i586|i686|i86pc|BePC)
1298 arch="x86_32"
1299 enable fast_unaligned
1301 x86_64|amd64)
1302 arch="x86_32"
1303 enable cmov
1304 enable fast_cmov
1305 enable fast_unaligned
1306 check_cc <<EOF && enable fast_64bit && arch="x86_64"
1307 int test[sizeof(char*) - 7];
1310 # armv4l is a subset of armv[567]*l
1311 arm|armv[4567]*l)
1312 arch="armv4l"
1314 alpha)
1315 arch="alpha"
1316 enable fast_64bit
1318 "Power Macintosh"|ppc|powerpc)
1319 arch="powerpc"
1320 enable fast_unaligned
1322 ppc64)
1323 arch="powerpc"
1324 enable fast_64bit
1325 enable fast_unaligned
1327 mips|mipsel|IP*)
1328 arch="mips"
1330 mips64)
1331 arch="mips"
1332 enable fast_64bit
1334 sun4u|sparc64)
1335 arch="sparc64"
1336 enable fast_64bit
1338 sparc)
1339 arch="sparc"
1341 sh4|sh)
1342 arch="sh4"
1344 parisc|hppa)
1345 arch="parisc"
1347 parisc64|hppa64)
1348 arch="parisc"
1349 enable fast_64bit
1351 s390|s390x)
1352 arch="s390"
1354 m68k)
1355 arch="m68k"
1357 ia64)
1358 arch="ia64"
1359 enable fast_64bit
1361 bfin)
1362 arch="bfin"
1365 arch="unknown"
1367 esac
1369 enable $arch
1370 enabled_any x86_32 x86_64 && enable x86
1371 enabled sparc64 && enable sparc
1373 # OS specific
1374 case $target_os in
1375 beos|haiku|zeta)
1376 prefix_default="$HOME/config"
1377 # helps building libavcodec
1378 add_cflags "-DPIC -fomit-frame-pointer"
1379 # 3 gcc releases known for BeOS, each with ugly bugs
1380 gcc_version="`$cc -v 2>&1 | grep version | cut -d ' ' -f3-`"
1381 case "$gcc_version" in
1382 2.9-beos-991026*|2.9-beos-000224*) echo "R5/GG gcc"
1383 disable mmx
1385 *20010315*) echo "BeBits gcc"
1386 add_cflags "-fno-expensive-optimizations"
1388 esac
1389 SHFLAGS=-nostart
1390 # enable BeOS things
1391 enable audio_beos
1392 # no need for libm, but the inet stuff
1393 # Check for BONE
1394 # XXX: actually should check for NOT net_server
1395 if echo $BEINCLUDES | grep -q 'headers/be/bone'; then
1396 network_extralibs="-lbind -lsocket"
1397 else
1398 enable beos_netserver
1399 network_extralibs="-lnet"
1400 fi ;;
1401 sunos)
1402 FFSERVERLDFLAGS=""
1403 SHFLAGS='-shared -Wl,-h,$$(@F)'
1404 network_extralibs="-lsocket -lnsl"
1406 netbsd)
1407 oss_demuxer_extralibs="-lossaudio"
1408 oss_muxer_extralibs="-lossaudio"
1410 openbsd)
1411 disable need_memalign
1412 LIBOBJFLAGS='$(PIC)'
1413 SHFLAGS='-shared'
1414 oss_demuxer_extralibs="-lossaudio"
1415 oss_muxer_extralibs="-lossaudio"
1417 freebsd)
1418 disable need_memalign
1420 bsd/os)
1421 osextralibs="-lpoll -lgnugetopt"
1422 strip="strip -d"
1424 darwin)
1425 disable need_memalign
1426 SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR) -Wl,-read_only_relocs,suppress'
1427 VHOOKSHFLAGS='-dynamiclib -Wl,-single_module -flat_namespace -undefined suppress -Wl,-install_name,$(SHLIBDIR)/vhook/$$(@F)'
1428 strip="strip -x"
1429 FFLDFLAGS="-Wl,-dynamic,-search_paths_first"
1430 SLIBSUF=".dylib"
1431 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
1432 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
1433 FFSERVERLDFLAGS=-Wl,-bind_at_load
1434 objformat="macho"
1435 enabled x86_64 && objformat="macho64"
1437 mingw32*)
1438 target_os=mingw32
1439 LIBTARGET=i386
1440 if test $arch = x86_64; then
1441 disable need_memalign
1442 LIBTARGET=x64
1444 shlibdir_default="$bindir_default"
1445 VHOOKSHFLAGS='-shared -L$(BUILD_ROOT)/libavformat -L$(BUILD_ROOT)/libavcodec -L$(BUILD_ROOT)/libavutil'
1446 VHOOKLIBS='-lavformat$(BUILDSUF) -lavcodec$(BUILDSUF) -lavutil$(BUILDSUF) $(EXTRALIBS)'
1447 if enabled swscale; then
1448 VHOOKSHFLAGS="$VHOOKSHFLAGS -L\$(BUILD_ROOT)/libswscale"
1449 VHOOKLIBS="$VHOOKLIBS -lswscale\$(BUILDSUF)"
1451 disable ffserver
1452 SLIBPREF=""
1453 SLIBSUF=".dll"
1454 EXESUF=".exe"
1455 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1456 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1457 SLIB_EXTRA_CMD='-lib /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)'
1458 SLIB_INSTALL_EXTRA_CMD='-install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"; \
1459 install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)"'
1460 SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"'
1461 SHFLAGS='-shared -Wl,--output-def,$$(@:$(SLIBSUF)=.def) -Wl,--enable-runtime-pseudo-reloc -Wl,--enable-auto-image-base'
1462 objformat="win32"
1463 enable dos_paths
1464 check_cpp_condition _mingw.h "(__MINGW32_MAJOR_VERSION > 3) || (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
1465 die "ERROR: MinGW runtime version must be >= 3.15."
1466 enabled_any avisynth vfwcap_demuxer &&
1467 { check_cpp_condition w32api.h "(__W32API_MAJOR_VERSION > 3) || (__W32API_MAJOR_VERSION == 3 && __W32API_MINOR_VERSION >= 13)" ||
1468 die "ERROR: avisynth and vfwcap_demuxer require w32api version 3.13 or later."; }
1470 cygwin*)
1471 target_os=cygwin
1472 shlibdir_default="$bindir_default"
1473 VHOOKSHFLAGS='-shared -L$(BUILD_ROOT)/libavformat -L$(BUILD_ROOT)/libavcodec -L$(BUILD_ROOT)/libavutil'
1474 VHOOKLIBS='-lavformat$(BUILDSUF) -lavcodec$(BUILDSUF) -lavutil$(BUILDSUF) $(EXTRALIBS)'
1475 if enabled swscale; then
1476 VHOOKSHFLAGS="$VHOOKSHFLAGS -L\$(BUILD_ROOT)/libswscale"
1477 VHOOKLIBS="$VHOOKLIBS -lswscale\$(BUILDSUF)"
1479 EXESUF=".exe"
1480 SLIBPREF="cyg"
1481 SLIBSUF=".dll"
1482 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1483 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1484 SHFLAGS='-shared -Wl,--enable-auto-image-base'
1485 objformat="win32"
1486 enable dos_paths
1488 *-dos|freedos|opendos)
1489 disable ffplay ffserver vhook
1490 disable $INDEV_LIST $OUTDEV_LIST
1491 network_extralibs="-lsocket"
1492 EXESUF=".exe"
1493 objformat="win32"
1494 enable dos_paths
1496 linux)
1497 enable dv1394
1499 irix*)
1500 target_os=irix
1501 ranlib="echo ignoring ranlib"
1503 os/2*)
1504 strip="lxlite"
1505 ln_s="cp -f"
1506 EXESUF=".exe"
1507 FFLDFLAGS="-Zomf -Zbin-files -Zargs-wild -Zmap"
1508 SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
1509 FFSERVERLDFLAGS=""
1510 LIBSUF="_s.a"
1511 SLIBPREF=""
1512 SLIBSUF=".dll"
1513 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
1514 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
1515 SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
1516 echo PROTMODE >> $(SUBDIR)$(NAME).def; \
1517 echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
1518 echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
1519 echo EXPORTS >> $(SUBDIR)$(NAME).def; \
1520 emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
1521 SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
1522 emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
1523 SLIB_INSTALL_EXTRA_CMD='install -m 644 $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib "$(LIBDIR)"'
1524 SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.a "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.lib'
1525 disable vhook
1526 enable dos_paths
1528 interix)
1529 disable vhook
1533 target_os="${target_os}-UNKNOWN"
1535 esac
1537 set_default $PATHS_LIST
1539 add_extralibs $osextralibs
1541 # Combine FFLDFLAGS and the LDFLAGS environment variable.
1542 LDFLAGS="$FFLDFLAGS $LDFLAGS"
1544 # we need to build at least one lib type
1545 if ! enabled_any static shared; then
1546 cat <<EOF
1547 At least one library type must be built.
1548 Specify --enable-static to build the static libraries or --enable-shared to
1549 build the shared libraries as well. To only build the shared libraries specify
1550 --disable-static in addition to --enable-shared.
1552 exit 1;
1555 disabled static && LIBNAME=""
1557 if enabled_any libfaad libfaadbin ; then
1558 if check_header faad.h; then
1559 check_cc <<EOF
1560 #include <faad.h>
1561 #ifndef FAAD2_VERSION
1562 ok faad1
1563 #endif
1564 int main(void) { return 0; }
1566 test $? = 0 && enable libfaad2
1567 else
1568 die "FAAD test failed."
1573 if ! enabled gpl; then
1574 die_gpl_disabled(){
1575 name=$1
1576 shift
1577 enabled_any $@ && die "$name is under GPL and --enable-gpl is not specified."
1579 die_gpl_disabled "The Postprocessing code" postproc
1580 die_gpl_disabled "libx264" libx264
1581 die_gpl_disabled "libxvidcore" libxvid
1582 die_gpl_disabled "FAAD2" libfaad2
1583 die_gpl_disabled "The X11 grabber" x11grab
1584 die_gpl_disabled "The software scaler" swscale
1587 if ! enabled nonfree && enabled_any libamr_nb libamr_wb; then
1588 die "libamr is nonfree and --enable-nonfree is not specified."
1591 check_deps $ARCH_EXT_LIST
1593 test -z "$need_memalign" && need_memalign="$mmx"
1595 #Darwin CC versions
1596 if test $target_os = darwin; then
1597 if $cc -v 2>&1 | grep -q xlc; then
1598 add_cflags "-qpdf2 -qlanglvl=extc99 -qmaxmem=-1 -qarch=auto -qtune=auto"
1599 else
1600 add_cflags "-pipe"
1601 check_cflags "-force_cpusubtype_ALL"
1602 check_cflags "-Wno-sign-compare"
1603 enabled shared || check_cflags -mdynamic-no-pic
1607 disabled optimizations || check_cflags -fomit-frame-pointer
1609 # Add processor-specific flags
1610 if test $cpu != "generic"; then
1611 warn_altivec(){
1612 $1 altivec && echo "WARNING: Tuning for $2 but AltiVec $1.";
1614 case $cpu in
1615 601|ppc601|PowerPC601)
1616 add_cflags "-mcpu=601"
1617 warn_altivec enabled PPC601
1619 603*|ppc603*|PowerPC603*)
1620 add_cflags "-mcpu=603"
1621 warn_altivec enabled PPC603
1623 604*|ppc604*|PowerPC604*)
1624 add_cflags "-mcpu=604"
1625 warn_altivec enabled PPC604
1627 G3|g3|75*|ppc75*|PowerPC75*)
1628 add_cflags "-mcpu=750 -mpowerpc-gfxopt"
1629 warn_altivec enabled PPC75x
1631 G4|g4|745*|ppc745*|PowerPC745*)
1632 add_cflags "-mcpu=7450 -mpowerpc-gfxopt"
1633 warn_altivec disabled PPC745x
1635 74*|ppc74*|PowerPC74*)
1636 add_cflags "-mcpu=7400 -mpowerpc-gfxopt"
1637 warn_altivec disabled PPC74xx
1639 G5|g5|970|ppc970|PowerPC970|power4*|Power4*)
1640 add_cflags "-mcpu=970 -mpowerpc-gfxopt -mpowerpc64"
1641 warn_altivec disabled PPC970
1642 enable ppc64
1644 Cell|CELL|cell)
1645 add_cflags "-mcpu=cell"
1646 warn_altivec disabled Cell
1647 enable ppc64
1649 # targets that do NOT support conditional mov (cmov)
1650 i[345]86|pentium|pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
1651 add_cflags "-march=$cpu"
1652 disable cmov
1654 # targets that do support conditional mov (cmov)
1655 i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2)
1656 add_cflags "-march=$cpu"
1657 enable cmov
1658 enable fast_cmov
1660 # targets that do support conditional mov but on which it's slow
1661 pentium4|pentium4m|prescott|nocona)
1662 add_cflags "-march=$cpu"
1663 enable cmov
1664 disable fast_cmov
1666 sparc64)
1667 add_cflags "-mcpu=v9"
1669 arm11*|cortex*)
1670 add_cflags "-mcpu=$cpu"
1671 enable fast_unaligned
1673 armv*)
1674 add_cflags "-march=$cpu"
1676 arm*)
1677 add_cflags "-mcpu=$cpu"
1680 echo "WARNING: Unknown CPU \"$cpu\", ignored."
1682 esac
1685 # make sure we can execute files in $TMPDIR
1686 cat > $TMPSH 2>> $logfile <<EOF
1687 #! /bin/sh
1689 chmod +x $TMPSH >> $logfile 2>&1
1690 if ! $TMPSH >> $logfile 2>&1; then
1691 cat <<EOF
1692 Unable to create and execute files in $TMPDIR1. Set the TMPDIR environment
1693 variable to another directory and make sure that $TMPDIR1 is not mounted
1694 noexec.
1696 die "Sanity test failed."
1698 rm $TMPSH
1700 # compiler sanity check
1701 check_exec <<EOF
1702 int main(void){ return 0; }
1704 if test "$?" != 0; then
1705 echo "$cc is unable to create an executable file."
1706 if test -z "$cross_prefix" && ! enabled cross_compile ; then
1707 echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
1708 echo "Only do this if you know what cross compiling means."
1710 die "C compiler test failed."
1713 check_cc <<EOF || die "Symbol mangling check failed."
1714 int ff_extern;
1716 sym=$($nm -P -g $TMPO | grep ff_extern)
1717 extern_prefix=${sym%%ff_extern*}
1719 check_asm inline_asm '""'
1721 if enabled x86; then
1722 # check whether EBP is available on x86
1723 # As 'i' is stored on the stack, this program will crash
1724 # if the base pointer is used to access it because the
1725 # base pointer is cleared in the inline assembly code.
1726 check_exec_crash <<EOF && enable ebp_available
1727 volatile int i=0;
1728 __asm__ volatile (
1729 "xorl %%ebp, %%ebp"
1730 ::: "%ebp");
1731 return i;
1734 # check wether EBX is available on x86
1735 check_asm ebx_available '"":::"%ebx"'
1737 # check whether binutils is new enough to compile SSSE3/MMX2
1738 enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
1739 enabled mmx2 && check_asm mmx2 '"movss %xmm0, %xmm0"'
1741 check_asm bswap '"bswap %%eax" ::: "%eax"'
1743 YASMFLAGS="-f $objformat -DARCH_$(toupper $arch)"
1744 enabled x86_64 && append YASMFLAGS "-m amd64"
1745 enabled_all x86_64 shared && append YASMFLAGS "-DPIC"
1746 case "$objformat" in
1747 elf) enabled debug && append YASMFLAGS "-g dwarf2" ;;
1748 macho64) append YASMFLAGS "-DPIC -DPREFIX" ;;
1749 *) append YASMFLAGS "-DPREFIX" ;;
1750 esac
1751 check_yasm "pabsw xmm0, xmm0" && enable yasm
1754 # check for assembler specific support
1756 if test $arch = "powerpc"; then
1757 check_asm dcbzl '"dcbzl 0, 1"'
1760 # check for SIMD availability
1762 # AltiVec flags: The FSF version of GCC differs from the Apple version
1763 if enabled altivec; then
1764 check_cflags -maltivec -mabi=altivec &&
1765 { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
1766 check_cflags -faltivec
1768 # check if our compiler supports Motorola AltiVec C API
1769 check_cc <<EOF || disable altivec
1770 $inc_altivec_h
1771 int main(void) {
1772 vector signed int v1, v2, v3;
1773 v1 = vec_add(v2,v3);
1774 return 0;
1778 # check if our compiler supports braces for vector declarations
1779 check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
1780 $inc_altivec_h
1781 int main (void) { (vector int) {1}; return 0; }
1785 # We have to check if pld is a nop and disable it.
1786 enabled armv4l && check_asm pld '"pld [r0]"'
1787 enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
1788 enabled armv6 && check_asm armv6 '"sadd16 r0, r0, r0"'
1789 enabled armvfp && check_asm armvfp '"fadds s0, s0, s0"'
1790 enabled iwmmxt && check_asm iwmmxt '"wunpckelub wr6, wr4"'
1791 enabled mmi && check_asm mmi '"lq $2, 0($2)"'
1792 enabled neon && check_asm neon '"vadd.i16 q0, q0, q0"'
1793 enabled vis && check_asm vis '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc
1795 enabled vis && add_cflags "-mcpu=ultrasparc -mtune=ultrasparc"
1797 # ---
1798 # big/little-endian test
1799 check_cc <<EOF || die "endian test failed"
1800 unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
1802 od -A n -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
1804 # ---
1805 # check availability of some header files
1807 if check_func dlopen; then
1808 ldl=
1809 elif check_func dlopen -ldl; then
1810 ldl=-ldl
1813 check_func fork
1814 check_func gethrtime
1815 check_func getrusage
1816 check_func inet_aton $network_extralibs
1817 check_func memalign
1818 check_func mkstemp
1819 check_func_headers windows.h GetProcessTimes
1821 check_header conio.h
1822 check_header dlfcn.h
1823 check_header malloc.h
1824 check_header poll.h
1825 check_header sys/mman.h
1826 check_header sys/resource.h
1827 check_header sys/select.h
1828 check_header termios.h
1830 if ! enabled_any memalign memalign_hack && enabled need_memalign ; then
1831 die "Error, no memalign() but SSE enabled, disable it or use --enable-memalign-hack."
1834 disabled zlib || check_lib zlib.h zlibVersion -lz || disable zlib
1835 disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
1837 # check for some common methods of building with pthread support
1838 # do this before the optional library checks as some of them require pthreads
1839 if enabled pthreads; then
1840 if check_func pthread_create; then
1842 elif check_func pthread_create -pthread; then
1843 add_cflags -pthread
1844 add_extralibs -pthread
1845 elif check_func pthread_create -pthreads; then
1846 add_cflags -pthreads
1847 add_extralibs -pthreads
1848 elif check_func pthread_create -lpthreadGC2; then
1849 add_extralibs -lpthreadGC2
1850 elif ! check_lib pthread.h pthread_create -lpthread; then
1851 die "ERROR: can't find pthreads library"
1855 for thread in $THREADS_LIST; do
1856 if enabled $thread; then
1857 test -n "$thread_type" &&
1858 die "ERROR: Only one thread type must be selected." ||
1859 thread_type="$thread"
1861 done
1863 check_lib math.h sin -lm
1865 # test for C99 functions in math.h
1866 for func in llrint lrint lrintf round roundf; do
1867 check_exec <<EOF && enable $func || disable $func
1868 #include <math.h>
1869 int main(void) { return ($func(3.999f) > 0)?0:1; }
1871 done
1873 # these are off by default, so fail if requested and not available
1874 enabled avisynth && require2 vfw32 "windows.h vfw.h" AVIFileInit -lvfw32
1875 enabled libamr_nb && require libamrnb amrnb/interf_dec.h Speech_Decode_Frame_init -lamrnb -lm
1876 enabled libamr_wb && require libamrwb amrwb/dec_if.h D_IF_init -lamrwb -lm
1877 enabled libdirac && add_cflags $(pkg-config --cflags dirac) &&
1878 require libdirac libdirac_decoder/dirac_parser.h dirac_decoder_init -ldirac_decoder &&
1879 require libdirac libdirac_encoder/dirac_encoder.h dirac_encoder_init -ldirac_encoder
1880 enabled libfaac && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
1881 enabled libfaad && require2 libfaad faad.h faacDecOpen -lfaad
1882 enabled libgsm && require libgsm gsm.h gsm_create -lgsm
1883 enabled libmp3lame && require libmp3lame lame/lame.h lame_init -lmp3lame -lm
1884 enabled libnut && require libnut libnut.h nut_demuxer_init -lnut
1885 enabled libschroedinger && add_cflags $(pkg-config --cflags schroedinger-1.0) &&
1886 require libschroedinger schroedinger/schro.h schro_init $(pkg-config --libs schroedinger-1.0)
1887 enabled libspeex && require libspeex speex/speex.h speex_decoder_init -lspeex
1888 enabled libtheora && require libtheora theora/theora.h theora_info_init -ltheora -logg
1889 enabled libvorbis && require libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
1890 enabled libx264 && require libx264 x264.h x264_encoder_open -lx264 -lm &&
1891 { check_cpp_condition x264.h "X264_BUILD >= 65" ||
1892 die "ERROR: libx264 version must be >= 0.65."; }
1893 enabled libxvid && require libxvid xvid.h xvid_global -lxvidcore
1894 enabled mlib && require mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
1896 # libdc1394 check
1897 if enabled libdc1394; then
1898 { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
1899 enable libdc1394_2; } ||
1900 { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
1901 enable libdc1394_1; } ||
1902 die "ERROR: No version of libdc1394 found "
1906 _restrict=
1907 for restrict_keyword in restrict __restrict__ __restrict; do
1908 check_cc <<EOF && _restrict=$restrict_keyword && break
1909 void foo(char * $restrict_keyword p);
1911 done
1913 test "$vhook" = "default" && vhook="$dlopen"
1915 if test "$target_os" = cygwin -o "$target_os" = mingw32 && enabled_all static vhook ; then
1916 disable vhook
1917 echo
1918 echo "At the moment vhooks don't work on Cygwin or MinGW static builds."
1919 echo "Patches welcome."
1920 echo
1923 if enabled vhook; then
1924 check_ldflags -rdynamic
1925 check_ldflags -export-dynamic
1928 check_foo_config imlib2 imlib2 Imlib2.h imlib_load_font
1929 check_foo_config freetype2 freetype ft2build.h FT_Init_FreeType
1931 ##########################################
1932 # SDL check
1934 disable sdl_too_old
1935 disable sdl
1936 SDL_CONFIG="${cross_prefix}sdl-config"
1937 if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
1938 sdl_cflags=`"${SDL_CONFIG}" --cflags`
1939 temp_cflags $sdl_cflags
1940 temp_extralibs `"${SDL_CONFIG}" --libs`
1941 if check_lib2 SDL.h SDL_Init; then
1942 _sdlversion=`"${SDL_CONFIG}" --version | sed 's/[^0-9]//g'`
1943 if test "$_sdlversion" -lt 121 ; then
1944 enable sdl_too_old
1945 else
1946 enable sdl
1947 check_cc $sdl_cflags <<EOF && enable sdl_video_size
1948 #include <SDL.h>
1949 int main(int argc, char **argv){
1950 const SDL_VideoInfo *vi = SDL_GetVideoInfo();
1951 int w = vi->current_w;
1952 return 0;
1957 restore_flags
1960 texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
1962 ##########################################
1963 # Network check
1965 if enabled network; then
1966 check_type "sys/types.h sys/socket.h" socklen_t
1967 # Prefer arpa/inet.h over winsock2
1968 if check_header arpa/inet.h ; then
1969 check_func closesocket
1970 elif check_header winsock2.h ; then
1971 network_extralibs="-lws2_32"
1972 check_type ws2tcpip.h socklen_t
1973 check_func_headers winsock2.h closesocket
1977 ##########################################
1978 # IPv6 check
1980 enabled network && enabled ipv6 && check_ld <<EOF && enable ipv6 || disable ipv6
1981 #include <sys/types.h>
1982 #include <sys/socket.h>
1983 #include <netinet/in.h>
1984 #include <netdb.h>
1985 int main(void) {
1986 struct sockaddr_storage saddr;
1987 struct ipv6_mreq mreq6;
1988 getaddrinfo(0,0,0,0);
1989 getnameinfo(0,0,0,0,0,0,0);
1990 IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
1994 check_header linux/videodev.h
1995 check_header linux/videodev2.h
1996 check_header sys/videoio.h
1998 check_func_headers "windows.h vfw.h" capCreateCaptureWindow -lvfw32
2000 # check for ioctl_meteor.h, ioctl_bt848.h and alternatives
2001 { check_header dev/bktr/ioctl_meteor.h &&
2002 check_header dev/bktr/ioctl_bt848.h; } ||
2003 { check_header machine/ioctl_meteor.h &&
2004 check_header machine/ioctl_bt848.h; } ||
2005 { check_header dev/video/meteor/ioctl_meteor.h &&
2006 check_header dev/video/bktr/ioctl_bt848.h; } ||
2007 check_header dev/ic/bt8xx.h
2009 check_header sys/soundcard.h
2010 check_header soundcard.h
2012 # deal with the X11 frame grabber
2013 enabled x11grab &&
2014 check_header X11/Xlib.h &&
2015 check_header X11/extensions/XShm.h &&
2016 check_func XOpenDisplay -lX11 &&
2017 check_func XShmCreateImage -lX11 -lXext
2019 enabled debug && add_cflags -g"$debuglevel"
2021 # add some useful compiler flags if supported
2022 check_cflags -Wdeclaration-after-statement
2023 check_cflags -Wall
2024 check_cflags -Wno-switch
2025 check_cflags -Wdisabled-optimization
2026 check_cflags -Wpointer-arith
2027 check_cflags -Wredundant-decls
2028 check_cflags -Wno-pointer-sign
2029 check_cflags -Wcast-qual
2030 check_cflags -Wwrite-strings
2031 check_cflags -Wtype-limits
2032 enabled extra_warnings && check_cflags -Winline
2034 # add some linker flags
2035 check_ldflags -Wl,--warn-common
2036 check_ldflags -Wl,--as-needed
2037 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'
2038 check_ldflags -Wl,-Bsymbolic
2040 if enabled small; then
2041 check_cflags -Os # not all compilers support -Os
2042 optimizations="small"
2043 elif enabled optimizations; then
2044 if $cc -v 2>&1 | grep -q xlc; then
2045 add_cflags "-O5"
2046 add_ldflags "-O5"
2047 else
2048 add_cflags "-O3"
2051 check_cflags -fno-math-errno
2052 check_cflags -fno-signed-zeros
2054 # add some flags for Intel C Compiler
2055 if $cc --version 2> /dev/null | grep -q Intel; then
2056 # Just warnings, no remarks
2057 check_cflags -w1
2058 # -wd: Disable following warnings
2059 # 144, 167, 556: -Wno-pointer-sign
2060 # 10006: ignoring unknown option -fno-signed-zeros
2061 # 10156: ignoring option '-W'; no argument required
2062 check_cflags -wd144,167,556,10006,10156
2063 # 11030: Warning unknown option --as-needed
2064 # 10156: ignoring option '-export'; no argument required
2065 check_ldflags -wd10156,11030
2066 # Allow to compile with optimizations
2067 check_ldflags -march=$cpu
2070 # PIC flags for shared library objects where they are needed
2071 if enabled shared; then
2072 # LIBOBJFLAGS may have already been set in the OS configuration
2073 if test -z "$LIBOBJFLAGS" ; then
2074 case "$arch" in
2075 x86_64|ia64|alpha|sparc*|power*|parisc*|mips*) LIBOBJFLAGS='$(PIC)' ;;
2076 esac
2080 if enabled gprof; then
2081 add_cflags "-p"
2082 add_ldflags "-p"
2085 VHOOKCFLAGS="-fPIC"
2087 # Find out if the .align argument is a power of two or not.
2088 check_asm asmalign_pot '".align 3"'
2090 enabled_any $DECODER_LIST && enable decoders
2091 enabled_any $ENCODER_LIST && enable encoders
2092 enabled_any $BSF_LIST && enable bsfs
2093 enabled_any $DEMUXER_LIST && enable demuxers
2094 enabled_any $MUXER_LIST && enable muxers
2095 enabled_any $FILTER_LIST && enable filters
2096 enabled_any $INDEV_LIST && enable demuxers
2097 enabled_any $OUTDEV_LIST && enable muxers
2098 enabled_any $PROTOCOL_LIST && enable protocols
2100 enabled_any $THREADS_LIST && enable threads
2102 check_deps $CONFIG_LIST \
2103 $CONFIG_EXTRA \
2104 $HAVE_LIST \
2105 $DECODER_LIST \
2106 $ENCODER_LIST \
2107 $PARSER_LIST \
2108 $BSF_LIST \
2109 $DEMUXER_LIST \
2110 $MUXER_LIST \
2111 $FILTER_LIST \
2112 $INDEV_LIST \
2113 $OUTDEV_LIST \
2114 $PROTOCOL_LIST \
2116 enabled libdc1394 && append pkg_requires "libraw1394"
2117 enabled libdirac && append pkg_requires "dirac"
2118 enabled libtheora && append pkg_requires "theora"
2119 enabled libvorbis && append pkg_requires "vorbisenc"
2121 echo "install prefix $prefix"
2122 echo "source path $source_path"
2123 echo "C compiler $cc"
2124 echo ".align is power-of-two $asmalign_pot"
2125 echo "ARCH $arch ($cpu)"
2126 if test "$build_suffix" != ""; then
2127 echo "build suffix $build_suffix"
2129 if test "$extra_version" != ""; then
2130 echo "version string suffix $extra_version"
2132 echo "big-endian ${bigendian-no}"
2133 if test $arch = "x86_32" -o $arch = "x86_64"; then
2134 echo "yasm ${yasm-no}"
2135 echo "MMX enabled ${mmx-no}"
2136 echo "CMOV enabled ${cmov-no}"
2137 echo "CMOV is fast ${fast_cmov-no}"
2138 echo "EBX available ${ebx_available-no}"
2139 echo "EBP available ${ebp_available-no}"
2141 if test $arch = "armv4l"; then
2142 echo "ARMv5TE enabled ${armv5te-no}"
2143 echo "ARMv6 enabled ${armv6-no}"
2144 echo "ARM VFP enabled ${armvfp-no}"
2145 echo "IWMMXT enabled ${iwmmxt-no}"
2146 echo "NEON enabled ${neon-no}"
2148 if test $arch = "mips"; then
2149 echo "MMI enabled ${mmi-no}"
2151 if test $arch = "powerpc"; then
2152 echo "AltiVec enabled ${altivec-no}"
2153 echo "dcbzl available ${dcbzl-no}"
2155 echo "gprof enabled ${gprof-no}"
2156 echo "debug symbols ${debug-no}"
2157 echo "strip symbols ${stripping-no}"
2158 echo "optimizations ${optimizations-no}"
2159 echo "static ${static-no}"
2160 echo "shared ${shared-no}"
2161 echo "postprocessing support ${postproc-no}"
2162 echo "software scaler enabled ${swscale-no}"
2163 echo "new filter support ${avfilter-no}"
2164 echo "filters using lavformat ${avfilter_lavf-no}"
2165 echo "video hooking ${vhook-no}"
2166 if enabled vhook; then
2167 echo "Imlib2 support ${imlib2-no}"
2168 echo "FreeType support ${freetype2-no}"
2170 echo "network support ${network-no}"
2171 if enabled network; then
2172 echo "IPv6 support ${ipv6-no}"
2174 echo "threading support ${thread_type-no}"
2175 echo "SDL support ${sdl-no}"
2176 if enabled sdl_too_old; then
2177 echo "-> Your SDL version is too old - please upgrade to have FFplay/SDL support."
2179 echo "Sun medialib support ${mlib-no}"
2180 echo "AVISynth enabled ${avisynth-no}"
2181 echo "libamr-nb support ${libamr_nb-no}"
2182 echo "libamr-wb support ${libamr_wb-no}"
2183 echo "libdc1394 support ${libdc1394-no}"
2184 echo "libdirac enabled ${libdirac-no}"
2185 echo "libfaac enabled ${libfaac-no}"
2186 echo "libfaad enabled ${libfaad-no}"
2187 echo "libfaad dlopened ${libfaadbin-no}"
2188 echo "libgsm enabled ${libgsm-no}"
2189 echo "libmp3lame enabled ${libmp3lame-no}"
2190 echo "libnut enabled ${libnut-no}"
2191 echo "libschroedinger enabled ${libschroedinger-no}"
2192 echo "libspeex enabled ${libspeex-no}"
2193 echo "libtheora enabled ${libtheora-no}"
2194 echo "libvorbis enabled ${libvorbis-no}"
2195 echo "libx264 enabled ${libx264-no}"
2196 echo "libxvid enabled ${libxvid-no}"
2197 echo "zlib enabled ${zlib-no}"
2198 echo "bzlib enabled ${bzlib-no}"
2199 echo
2201 for type in decoder encoder parser demuxer muxer protocol filter bsf indev outdev; do
2202 echo "Enabled ${type}s:"
2203 eval list=\$$(toupper $type)_LIST
2204 for part in $list; do
2205 enabled $part && echo ${part%_*}
2206 done | sort | pr -3 -t
2207 echo
2208 done
2210 license="LGPL"
2211 if enabled nonfree; then
2212 license="unredistributable"
2213 elif enabled gpl; then
2214 license="GPL"
2217 echo "License: $license"
2219 echo "Creating config.mak and config.h..."
2221 echo "# Automatically generated by configure - do not modify!" > config.mak
2222 echo "/* Automatically generated by configure - do not modify! */" > $TMPH
2223 echo "#ifndef FFMPEG_CONFIG_H" >> $TMPH
2224 echo "#define FFMPEG_CONFIG_H" >> $TMPH
2225 echo "#define FFMPEG_CONFIGURATION \"$FFMPEG_CONFIGURATION\"" >> $TMPH
2227 echo "FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION" >> config.mak
2228 echo "prefix=$prefix" >> config.mak
2229 echo "LIBDIR=\$(DESTDIR)$libdir" >> config.mak
2230 echo "SHLIBDIR=\$(DESTDIR)$shlibdir" >> config.mak
2231 echo "INCDIR=\$(DESTDIR)$incdir" >> config.mak
2232 echo "BINDIR=\$(DESTDIR)$bindir" >> config.mak
2233 echo "MANDIR=\$(DESTDIR)$mandir" >> config.mak
2234 echo "CC=$cc" >> config.mak
2235 echo "YASM=$yasmexe" >> config.mak
2236 echo "AR=$ar" >> config.mak
2237 echo "RANLIB=$ranlib" >> config.mak
2238 echo "LN_S=$ln_s" >> config.mak
2239 enabled stripping &&
2240 echo "STRIP=$strip" >> config.mak ||
2241 echo "STRIP=echo ignoring strip" >> config.mak
2243 echo "OPTFLAGS=$CFLAGS" >> config.mak
2244 echo "VHOOKCFLAGS=$VHOOKCFLAGS" >> config.mak
2245 echo "LDFLAGS=$LDFLAGS" >> config.mak
2246 echo "FFSERVERLDFLAGS=$FFSERVERLDFLAGS" >> config.mak
2247 echo "SHFLAGS=$SHFLAGS" >> config.mak
2248 echo "YASMFLAGS=$YASMFLAGS" >> config.mak
2249 echo "VHOOKSHFLAGS=$VHOOKSHFLAGS" >> config.mak
2250 echo "VHOOKLIBS=$VHOOKLIBS" >> config.mak
2251 echo "LIBOBJFLAGS=$LIBOBJFLAGS" >> config.mak
2252 echo "BUILD_STATIC=$static" >> config.mak
2253 echo "BUILDSUF=$build_suffix" >> config.mak
2254 echo "FULLNAME=$FULLNAME" >> config.mak
2255 echo "LIBPREF=$LIBPREF" >> config.mak
2256 echo "LIBSUF=$LIBSUF" >> config.mak
2257 echo "LIBNAME=$LIBNAME" >> config.mak
2258 echo "SLIBPREF=$SLIBPREF" >> config.mak
2259 echo "SLIBSUF=$SLIBSUF" >> config.mak
2260 echo "EXESUF=$EXESUF" >> config.mak
2261 echo "EXTRA_VERSION=$extra_version" >> config.mak
2262 echo "DEPEND_CMD=$DEPEND_CMD" >> config.mak
2263 echo "HOSTCC=$host_cc" >> config.mak
2264 echo "HOSTCFLAGS=$host_cflags" >> config.mak
2265 echo "HOSTLDFLAGS=$host_ldflags" >> config.mak
2266 echo "HOSTLIBS=$host_libs" >> config.mak
2267 echo "TARGET_EXEC=$target_exec" >> config.mak
2268 echo "TARGET_PATH=$target_path" >> config.mak
2270 if enabled bigendian; then
2271 echo "WORDS_BIGENDIAN=yes" >> config.mak
2272 echo "#define WORDS_BIGENDIAN 1" >> $TMPH
2275 if enabled sdl; then
2276 echo "SDL_LIBS=`"${SDL_CONFIG}" --libs`" >> config.mak
2277 echo "SDL_CFLAGS=`"${SDL_CONFIG}" --cflags`" >> config.mak
2279 if enabled texi2html; then
2280 echo "BUILD_DOC=yes" >> config.mak
2283 get_version(){
2284 name=$1
2285 file=$source_path/$2
2286 eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
2287 eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
2288 lcname=$(tolower $name)
2289 eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
2290 eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
2293 get_version LIBSWSCALE libswscale/swscale.h
2294 get_version LIBPOSTPROC libpostproc/postprocess.h
2295 get_version LIBAVCODEC libavcodec/avcodec.h
2296 get_version LIBAVDEVICE libavdevice/avdevice.h
2297 get_version LIBAVFORMAT libavformat/avformat.h
2298 get_version LIBAVUTIL libavutil/avutil.h
2299 get_version LIBAVFILTER libavfilter/avfilter.h
2301 if enabled shared; then
2302 echo "BUILD_SHARED=yes" >> config.mak
2303 echo "PIC=-fPIC -DPIC" >> config.mak
2304 echo "LIBTARGET=${LIBTARGET}" >> config.mak
2305 echo "SLIBNAME=${SLIBNAME}" >> config.mak
2306 echo "SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}" >> config.mak
2307 echo "SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}" >> config.mak
2308 echo "SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}" >> config.mak
2309 echo "SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}" >> config.mak
2310 echo "SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}" >> config.mak
2311 echo "SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}" >> config.mak
2313 echo "LIB_INSTALL_EXTRA_CMD=${LIB_INSTALL_EXTRA_CMD}" >> config.mak
2314 echo "EXTRALIBS=$extralibs" >> config.mak
2316 print_config ARCH_ $TMPH config.mak $ARCH_LIST
2317 print_config HAVE_ $TMPH config.mak $HAVE_LIST
2318 print_config CONFIG_ $TMPH config.mak $CONFIG_LIST \
2319 $CONFIG_EXTRA \
2320 $DECODER_LIST \
2321 $ENCODER_LIST \
2322 $PARSER_LIST \
2323 $BSF_LIST \
2324 $DEMUXER_LIST \
2325 $MUXER_LIST \
2326 $FILTER_LIST \
2327 $PROTOCOL_LIST \
2328 $INDEV_LIST \
2329 $OUTDEV_LIST \
2331 echo "#define restrict $_restrict" >> $TMPH
2333 if enabled small; then
2334 echo "#define av_always_inline" >> $TMPH
2337 echo "SRC_PATH=\"$source_path\"" >> config.mak
2338 echo "SRC_PATH_BARE=$source_path" >> config.mak
2339 echo "BUILD_ROOT=\"$PWD\"" >> config.mak
2341 # Apparently it's not possible to portably echo a backslash.
2342 enabled asmalign_pot &&
2343 printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH ||
2344 printf '#define ASMALIGN(ZEROBITS) ".align 1 << " #ZEROBITS "\\n\\t"\n' >> $TMPH
2346 echo "#define EXTERN_PREFIX \"${extern_prefix}\"" >> $TMPH
2348 echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
2350 # Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
2351 cmp -s $TMPH config.h &&
2352 echo "config.h is unchanged" ||
2353 mv -f $TMPH config.h
2355 rm -f $TMPC $TMPE $TMPH $TMPO $TMPS $TMPSH
2357 # build tree in object directory if source path is different from current one
2358 if enabled source_path_used; then
2359 DIRS="\
2360 doc \
2361 libavcodec \
2362 libavcodec/alpha \
2363 libavcodec/armv4l \
2364 libavcodec/bfin \
2365 libavcodec/i386 \
2366 libavcodec/mlib \
2367 libavcodec/ppc \
2368 libavcodec/sh4 \
2369 libavcodec/sparc \
2370 libavdevice \
2371 libavfilter \
2372 libavformat \
2373 libavutil \
2374 libpostproc \
2375 libswscale \
2376 tests \
2377 tools \
2378 vhook \
2380 FILES="\
2381 Makefile \
2382 common.mak \
2383 subdir.mak \
2384 doc/texi2pod.pl \
2385 libavcodec/Makefile \
2386 libavdevice/Makefile \
2387 libavfilter/Makefile \
2388 libavformat/Makefile \
2389 libavutil/Makefile \
2390 libpostproc/Makefile \
2391 libswscale/Makefile \
2393 for dir in $DIRS ; do
2394 mkdir -p $dir
2395 done
2396 for f in $FILES ; do
2397 $ln_s "$source_path/$f" $f
2398 done
2402 # build pkg-config files
2404 pkgconfig_generate(){
2405 name=$1
2406 shortname=${name#lib}${build_suffix}
2407 comment=$2
2408 version=$3
2409 libs=$4
2410 requires=$5
2411 cat <<EOF > $name/$name.pc
2412 prefix=$prefix
2413 exec_prefix=\${prefix}
2414 libdir=$libdir
2415 includedir=$incdir
2417 Name: $name
2418 Description: $comment
2419 Version: $version
2420 Requires: $(disabled shared && echo $requires)
2421 Requires.private: $(enabled shared && echo $requires)
2422 Conflicts:
2423 Libs: -L\${libdir} -l${shortname} $(disabled shared && echo $libs)
2424 Libs.private: $(enabled shared && echo $libs)
2425 Cflags: -I\${includedir}
2427 cat <<EOF > $name/$name-uninstalled.pc
2428 prefix=
2429 exec_prefix=
2430 libdir=\${pcfiledir}
2431 includedir=${source_path}
2433 Name: $name
2434 Description: $comment
2435 Version: $version
2436 Requires: $requires
2437 Conflicts:
2438 Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
2439 Cflags: -I\${includedir}
2443 pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
2444 pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "$pkg_requires libavutil = $LIBAVUTIL_VERSION"
2445 pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "$pkg_requires libavcodec = $LIBAVCODEC_VERSION"
2446 pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "$pkg_requires libavformat = $LIBAVFORMAT_VERSION"
2447 enabled avfilter &&
2448 pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "$pkg_requires libavutil = $LIBAVUTIL_VERSION"
2449 enabled postproc &&
2450 pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
2451 if enabled swscale; then
2452 pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"
2453 else
2454 pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "$pkg_requires libavcodec = $LIBAVCODEC_VERSION"
2455 apply libswscale/libswscale.pc sed s/^Libs:.*$/Libs:/