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