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