Add support for full header extradata to raw FLAC muxer.
[FFMpeg-mirror/lagarith.git] / configure
bloba8d094f40de391f6d806dfa73c7358b5d05c2735
1 #!/bin/sh
3 # FFmpeg configure script
5 # Copyright (c) 2000-2002 Fabrice Bellard
6 # Copyright (c) 2005-2008 Diego Biurrun
7 # Copyright (c) 2005-2008 Mans Rullgard
10 # Prevent locale nonsense from breaking basic text processing.
11 LC_ALL=C
12 export LC_ALL
14 # make sure we are running under a compatible shell
15 # try to make this part work with most shells
17 try_exec(){
18 echo "Trying shell $1"
19 type "$1" > /dev/null 2>&1 && exec "$@"
22 unset foo
23 (: ${foo%%bar}) 2> /dev/null
24 E1="$?"
26 (: ${foo?}) 2> /dev/null
27 E2="$?"
29 if test "$E1" != 0 || test "$E2" = 0; then
30 echo "Broken shell detected. Trying alternatives."
31 export FF_CONF_EXEC
32 if test "0$FF_CONF_EXEC" -lt 1; then
33 FF_CONF_EXEC=1
34 try_exec bash "$0" "$@"
36 if test "0$FF_CONF_EXEC" -lt 2; then
37 FF_CONF_EXEC=2
38 try_exec ksh "$0" "$@"
40 if test "0$FF_CONF_EXEC" -lt 3; then
41 FF_CONF_EXEC=3
42 try_exec /usr/xpg4/bin/sh "$0" "$@"
44 echo "No compatible shell script interpreter found."
45 echo "This configure script requires a POSIX-compatible shell"
46 echo "such as bash or ksh."
47 echo "THIS IS NOT A BUG IN FFMPEG, DO NOT REPORT IT AS SUCH."
48 echo "Instead, install a working POSIX-compatible shell."
49 echo "Disabling this configure test will create a broken FFmpeg."
50 if test "$BASH_VERSION" = '2.04.0(1)-release'; then
51 echo "This bash version ($BASH_VERSION) is broken on your platform."
52 echo "Upgrade to a later version if available."
54 exit 1
57 show_help(){
58 echo "Usage: configure [options]"
59 echo "Options: [defaults in brackets after descriptions]"
60 echo
61 echo "Standard options:"
62 echo " --help print this message"
63 echo " --logfile=FILE log tests and output to FILE [config.err]"
64 echo " --disable-logging do not log configure debug information"
65 echo " --prefix=PREFIX install in PREFIX [$prefix]"
66 echo " --bindir=DIR install binaries in DIR [PREFIX/bin]"
67 echo " --datadir=DIR install data files in DIR [PREFIX/share/ffmpeg]"
68 echo " --libdir=DIR install libs in DIR [PREFIX/lib]"
69 echo " --shlibdir=DIR install shared libs in DIR [PREFIX/lib]"
70 echo " --incdir=DIR install includes in DIR [PREFIX/include]"
71 echo " --mandir=DIR install man page in DIR [PREFIX/share/man]"
72 echo
73 echo "Configuration options:"
74 echo " --disable-static do not build static libraries [no]"
75 echo " --enable-shared build shared libraries [no]"
76 echo " --enable-gpl allow use of GPL code, the resulting libs"
77 echo " and binaries will be under GPL [no]"
78 echo " --enable-nonfree allow use of nonfree code, the resulting libs"
79 echo " and binaries will be unredistributable [no]"
80 echo " --disable-ffmpeg disable ffmpeg build"
81 echo " --disable-ffplay disable ffplay build"
82 echo " --disable-ffserver disable ffserver build"
83 echo " --enable-postproc enable GPLed postprocessing support [no]"
84 echo " --enable-swscale enable GPLed software scaler support [no]"
85 echo " --enable-avfilter video filter support (replaces vhook) [no]"
86 echo " --enable-avfilter-lavf video filters dependent on avformat [no]"
87 echo " --disable-vhook disable video hooking support"
88 echo " --enable-beosthreads use BeOS threads [no]"
89 echo " --enable-os2threads use OS/2 threads [no]"
90 echo " --enable-pthreads use pthreads [no]"
91 echo " --enable-w32threads use Win32 threads [no]"
92 echo " --enable-x11grab enable X11 grabbing [no]"
93 echo " --enable-vdpau enable VDPAU support [no]"
94 echo " --disable-network disable network support [no]"
95 echo " --disable-ipv6 disable IPv6 support [no]"
96 echo " --disable-mpegaudio-hp faster (but less accurate) MPEG audio decoding [no]"
97 echo " --enable-gray enable full grayscale support (slower color)"
98 echo " --enable-fastdiv enable table-based division"
99 echo " --enable-small optimize for size instead of speed"
100 echo " --disable-aandct disable AAN DCT code"
101 echo " --disable-fft disable FFT code"
102 echo " --disable-golomb disable Golomb code"
103 echo " --disable-mdct disable MDCT code"
104 echo " --disable-rdft disable RDFT code"
105 echo " --enable-hardcoded-tables use hardcoded tables instead of runtime generation"
106 echo " --enable-memalign-hack emulate memalign, interferes with memory debuggers"
107 echo " --enable-beos-netserver enable BeOS netserver"
108 echo " --disable-encoder=NAME disable encoder NAME"
109 echo " --enable-encoder=NAME enable encoder NAME"
110 echo " --disable-encoders disable all encoders"
111 echo " --disable-decoder=NAME disable decoder NAME"
112 echo " --enable-decoder=NAME enable decoder NAME"
113 echo " --disable-decoders disable all decoders"
114 echo " --disable-muxer=NAME disable muxer NAME"
115 echo " --enable-muxer=NAME enable muxer NAME"
116 echo " --disable-muxers disable all muxers"
117 echo " --disable-demuxer=NAME disable demuxer NAME"
118 echo " --enable-demuxer=NAME enable demuxer NAME"
119 echo " --disable-demuxers disable all demuxers"
120 echo " --enable-parser=NAME enable parser NAME"
121 echo " --disable-parser=NAME disable parser NAME"
122 echo " --disable-parsers disable all parsers"
123 echo " --enable-bsf=NAME enable bitstream filter NAME"
124 echo " --disable-bsf=NAME disable bitstream filter NAME"
125 echo " --disable-bsfs disable all bitstream filters"
126 echo " --enable-protocol=NAME enable protocol NAME"
127 echo " --disable-protocol=NAME disable protocol NAME"
128 echo " --disable-protocols disable all protocols"
129 echo " --disable-indevs disable input devices"
130 echo " --disable-outdevs disable output devices"
131 echo " --disable-devices disable all devices"
132 echo " --enable-filter=NAME enable filter NAME"
133 echo " --disable-filter=NAME disable filter NAME"
134 echo " --disable-filters disable all filters"
135 echo " --list-decoders show all available decoders"
136 echo " --list-encoders show all available encoders"
137 echo " --list-muxers show all available muxers"
138 echo " --list-demuxers show all available demuxers"
139 echo " --list-parsers show all available parsers"
140 echo " --list-protocols show all available protocols"
141 echo " --list-bsfs show all available bitstream filters"
142 echo " --list-indevs show all available input devices"
143 echo " --list-outdevs show all available output devices"
144 echo " --list-filters show all available filters"
145 echo
146 echo "External library support:"
147 echo " --enable-avisynth enable reading of AVISynth script files [no]"
148 echo " --enable-bzlib enable bzlib [autodetect]"
149 echo " --enable-libamr-nb enable libamr-nb floating point audio codec [no]"
150 echo " --enable-libamr-wb enable libamr-wb floating point audio codec [no]"
151 echo " --enable-libdc1394 enable IIDC-1394 grabbing using libdc1394"
152 echo " and libraw1394 [no]"
153 echo " --enable-libdirac enable Dirac support via libdirac [no]"
154 echo " --enable-libfaac enable FAAC support via libfaac [no]"
155 echo " --enable-libfaad enable FAAD support via libfaad [no]"
156 echo " --enable-libfaadbin open libfaad.so.0 at runtime [no]"
157 echo " --enable-libgsm enable GSM support via libgsm [no]"
158 echo " --enable-libmp3lame enable MP3 encoding via libmp3lame [no]"
159 echo " --enable-libnut enable NUT (de)muxing via libnut,"
160 echo " native (de)muxer exists [no]"
161 echo " --enable-libopenjpeg enable JPEG 2000 decoding via OpenJPEG [no]"
162 echo " --enable-libschroedinger enable Dirac support via libschroedinger [no]"
163 echo " --enable-libspeex enable Speex decoding via libspeex [no]"
164 echo " --enable-libtheora enable Theora encoding via libtheora [no]"
165 echo " --enable-libvorbis enable Vorbis encoding via libvorbis,"
166 echo " native implementation exists [no]"
167 echo " --enable-libx264 enable H.264 encoding via x264 [no]"
168 echo " --enable-libxvid enable Xvid encoding via xvidcore,"
169 echo " native MPEG-4/Xvid encoder exists [no]"
170 echo " --enable-mlib enable Sun medialib [no]"
171 echo " --enable-zlib enable zlib [autodetect]"
172 echo ""
173 echo "Advanced options (experts only):"
174 echo " --source-path=PATH path to source code [$source_path]"
175 echo " --cross-prefix=PREFIX use PREFIX for compilation tools [$cross_prefix]"
176 echo " --enable-cross-compile assume a cross-compiler is used"
177 echo " --sysroot=PATH root of cross-build tree"
178 echo " --sysinclude=PATH location of cross-build system headers"
179 echo " --target-os=OS compiler targets OS [$target_os]"
180 echo " --target-exec=CMD command to run executables on target"
181 echo " --target-path=DIR path to view of build directory on target"
182 echo " --nm=NM use nm tool"
183 echo " --cc=CC use C compiler CC [$cc_default]"
184 echo " --host-cc=HOSTCC use host C compiler HOSTCC"
185 echo " --host-cflags=HCFLAGS use HCFLAGS when compiling for host"
186 echo " --host-ldflags=HLDFLAGS use HLDFLAGS when linking for host"
187 echo " --host-libs=HLIBS use libs HLIBS when linking for host"
188 echo " --extra-cflags=ECFLAGS add ECFLAGS to CFLAGS [$CFLAGS]"
189 echo " --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]"
190 echo " --extra-libs=ELIBS add ELIBS [$ELIBS]"
191 echo " --extra-version=STRING version string suffix []"
192 echo " --build-suffix=SUFFIX library name suffix []"
193 echo " --arch=ARCH select architecture [$arch]"
194 echo " --cpu=CPU select the minimum required CPU (affects"
195 echo " instruction selection, may crash on older CPUs)"
196 echo " --enable-powerpc-perf enable performance report on PPC"
197 echo " (requires enabling PMC)"
198 echo " --disable-altivec disable AltiVec optimizations"
199 echo " --disable-amd3dnow disable 3DNow! optimizations"
200 echo " --disable-amd3dnowext disable 3DNow! extended optimizations"
201 echo " --disable-mmx disable MMX optimizations"
202 echo " --disable-mmx2 disable MMX2 optimizations"
203 echo " --disable-sse disable SSE optimizations"
204 echo " --disable-ssse3 disable SSSE3 optimizations"
205 echo " --disable-armv5te disable armv5te optimizations"
206 echo " --disable-armv6 disable armv6 optimizations"
207 echo " --disable-armv6t2 disable armv6t2 optimizations"
208 echo " --disable-armvfp disable ARM VFP optimizations"
209 echo " --disable-iwmmxt disable iwmmxt optimizations"
210 echo " --disable-mmi disable MMI optimizations"
211 echo " --disable-neon disable neon optimizations"
212 echo " --disable-vis disable VIS optimizations"
213 echo " --disable-yasm disable use of yasm assembler"
214 echo
215 echo "Developer options (useful when working on FFmpeg itself):"
216 echo " --disable-debug disable debugging symbols"
217 echo " --enable-debug=LEVEL set the debug level [$debuglevel]"
218 echo " --enable-gprof enable profiling with gprof [$gprof]"
219 echo " --disable-optimizations disable compiler optimizations"
220 echo " --enable-extra-warnings enable more compiler warnings"
221 echo " --disable-stripping disable stripping of executables and shared libraries"
222 echo ""
223 echo "NOTE: Object files are built at the place where configure is launched."
224 exit 0
227 log(){
228 echo "$@" >> $logfile
231 log_file(){
232 log BEGIN $1
233 pr -n -t $1 >> $logfile
234 log END $1
237 echolog(){
238 log "$@"
239 echo "$@"
242 die(){
243 echolog "$@"
244 cat <<EOF
245 If you think configure made a mistake, make sure you are using the latest
246 version from SVN. If the latest version fails, report the problem to the
247 ffmpeg-user@mplayerhq.hu mailing list or IRC #ffmpeg on irc.freenode.net.
249 if disabled logging; then
250 cat <<EOF
251 Rerun configure with logging enabled (do not use --disable-logging), and
252 include the log this produces with your report.
254 else
255 cat <<EOF
256 Include the log file "$logfile" produced by configure as this will help
257 solving the problem.
260 rm -f $TMPC $TMPE $TMPH $TMPO $TMPS $TMPSH
261 exit 1
264 # Avoid locale weirdness, besides we really just want to translate ASCII.
265 toupper(){
266 echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
269 tolower(){
270 echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
273 c_escape(){
274 echo "$*" | sed 's/["\\]/\\\0/g'
277 set_all(){
278 value=$1
279 shift
280 for var in $*; do
281 eval $var=$value
282 done
285 set_weak(){
286 value=$1
287 shift
288 for var; do
289 eval : \${$var:=$value}
290 done
293 pushvar(){
294 for var in $*; do
295 eval level=\${${var}_level:=0}
296 eval ${var}_${level}="\$$var"
297 eval ${var}_level=$(($level+1))
298 done
301 popvar(){
302 for var in $*; do
303 eval level=\${${var}_level:-0}
304 test $level = 0 && continue
305 eval level=$(($level-1))
306 eval $var="\${${var}_${level}}"
307 eval ${var}_level=$level
308 eval unset ${var}_${level}
309 done
312 enable(){
313 set_all yes $*
316 disable(){
317 set_all no $*
320 enable_weak(){
321 set_weak yes $*
324 disable_weak(){
325 set_weak no $*
328 do_enable_deep(){
329 for var; do
330 enabled $var && continue
331 eval sel="\$${var}_select"
332 eval sgs="\$${var}_suggest"
333 pushvar var sgs
334 enable_deep $sel
335 popvar sgs
336 enable_deep_weak $sgs
337 popvar var
338 done
341 enable_deep(){
342 do_enable_deep $*
343 enable $*
346 enable_deep_weak(){
347 do_enable_deep $*
348 enable_weak $*
351 enabled(){
352 test "${1#!}" = "$1" && op== || op=!=
353 eval test "x\$${1#!}" $op "xyes"
356 disabled(){
357 test "${1#!}" = "$1" && op== || op=!=
358 eval test "x\$${1#!}" $op "xno"
361 enabled_all(){
362 for opt; do
363 enabled $opt || return 1
364 done
367 disabled_all(){
368 for opt; do
369 disabled $opt || return 1
370 done
373 enabled_any(){
374 for opt; do
375 enabled $opt && return 0
376 done
379 disabled_any(){
380 for opt; do
381 disabled $opt && return 0
382 done
383 return 1
386 set_default(){
387 for opt; do
388 eval : \${$opt:=\$${opt}_default}
389 done
392 is_in(){
393 value=$1
394 shift
395 for var in $*; do
396 [ $var = $value ] && return 0
397 done
398 return 1
401 check_deps(){
402 for cfg; do
403 cfg="${cfg#!}"
404 enabled ${cfg}_checking && die "Circular dependency for $cfg."
405 disabled ${cfg}_checking && continue
406 enable ${cfg}_checking
408 eval dep_all="\$${cfg}_deps"
409 eval dep_any="\$${cfg}_deps_any"
410 eval dep_sel="\$${cfg}_select"
411 eval dep_sgs="\$${cfg}_suggest"
413 pushvar cfg dep_all dep_any dep_sel dep_sgs
414 check_deps $dep_all $dep_any $dep_sel $dep_sgs
415 popvar cfg dep_all dep_any dep_sel dep_sgs
417 enabled_all $dep_all || disable $cfg
418 enabled_any $dep_any || disable $cfg
419 disabled_any $dep_sel && disable $cfg
421 if enabled $cfg; then
422 eval dep_extralibs="\$${cfg}_extralibs"
423 test -n "$dep_extralibs" && add_extralibs $dep_extralibs
424 enable_deep $dep_sel
425 enable_deep_weak $dep_sgs
428 disable ${cfg}_checking
429 done
432 print_config(){
433 pfx=$1
434 header=$2
435 makefile=$3
436 shift 3
437 for cfg; do
438 ucname="`toupper $cfg`"
439 if enabled $cfg; then
440 echo "#define ${pfx}${ucname} 1" >> $header
441 echo "${pfx}${ucname}=yes" >> $makefile
442 else
443 echo "#define ${pfx}${ucname} 0" >> $header
445 done
448 flags_saved(){
449 (: ${SAVE_CFLAGS?}) 2> /dev/null
452 save_flags(){
453 flags_saved && return
454 SAVE_CFLAGS="$CFLAGS"
455 SAVE_LDFLAGS="$LDFLAGS"
456 SAVE_extralibs="$extralibs"
459 restore_flags(){
460 flags_saved || return
461 CFLAGS="$SAVE_CFLAGS"
462 LDFLAGS="$SAVE_LDFLAGS"
463 extralibs="$SAVE_extralibs"
464 unset SAVE_CFLAGS
465 unset SAVE_LDFLAGS
466 unset SAVE_extralibs
469 temp_cflags(){
470 save_flags
471 CFLAGS="$CFLAGS $*"
474 temp_ldflags(){
475 save_flags
476 LDFLAGS="$LDFLAGS $*"
479 temp_extralibs(){
480 save_flags
481 extralibs="$extralibs $*"
484 append(){
485 var=$1
486 shift
487 flags_saved && eval "SAVE_$var=\"\$SAVE_$var $*\""
488 eval "$var=\"\$$var $*\""
491 add_cflags(){
492 append CFLAGS "$@"
495 add_ldflags(){
496 append LDFLAGS "$@"
499 add_extralibs(){
500 append extralibs "$@"
503 check_cmd(){
504 log "$@"
505 "$@" >> $logfile 2>&1
508 check_cc(){
509 log check_cc "$@"
510 cat > $TMPC
511 log_file $TMPC
512 check_cmd $cc $CFLAGS "$@" -c -o $TMPO $TMPC
515 check_cpp(){
516 log check_cpp "$@"
517 cat > $TMPC
518 log_file $TMPC
519 check_cmd $cc $CFLAGS "$@" -E -o $TMPO $TMPC
522 check_asm(){
523 log check_asm "$@"
524 name="$1"
525 asm="$2"
526 shift 2
527 check_cc "$@" <<EOF && enable $name || disable $name
528 void foo(void){ __asm__ volatile($asm); }
532 check_yasm(){
533 log check_yasm "$@"
534 echo "$1" > $TMPS
535 log_file $TMPS
536 shift 1
537 check_cmd $yasmexe $YASMFLAGS "$@" -o $TMPO $TMPS
540 check_ld(){
541 log check_ld "$@"
542 check_cc || return
543 flags=''
544 libs=''
545 for f; do
546 test "${f}" = "${f#-l}" && flags="$flags $f" || libs="$libs $f"
547 done
548 check_cmd $cc $LDFLAGS $flags -o $TMPE $TMPO $extralibs $libs
551 check_cflags(){
552 log check_cflags "$@"
553 check_cc "$@" <<EOF && add_cflags "$@"
554 int x;
558 check_ldflags(){
559 log check_ldflags "$@"
560 check_ld "$@" <<EOF && add_ldflags "$@"
561 int main(void){ return 0; }
565 check_header(){
566 log check_header "$@"
567 header=$1
568 shift
569 var=`echo $header | sed 's/[^A-Za-z0-9_]/_/g'`
570 disable $var
571 check_cpp "$@" <<EOF && enable $var
572 #include <$header>
573 int x;
577 check_func(){
578 log check_func "$@"
579 func=$1
580 shift
581 disable $func
582 check_ld "$@" <<EOF && enable $func
583 extern int $func();
584 int main(void){ $func(); }
588 check_func_headers(){
589 log check_func_headers "$@"
590 headers=$1
591 func=$2
592 shift 2
593 disable $func
594 incs=""
595 for hdr in $headers; do
596 incs="$incs
597 #include <$hdr>"
598 done
599 check_ld "$@" <<EOF && enable $func
600 $incs
601 int main(int argc, char **argv){
602 (void) $func;
603 return 0;
608 check_cpp_condition(){
609 log check_cpp_condition "$@"
610 header=$1
611 condition=$2
612 check_cpp <<EOF
613 #include <$header>
614 #if !($condition)
615 #error "unsatisfied condition: $condition"
616 #endif
620 check_lib(){
621 log check_lib "$@"
622 header="$1"
623 func="$2"
624 shift 2
625 temp_extralibs "$@"
626 check_header $header && check_func $func && add_extralibs "$@"
627 err=$?
628 restore_flags
629 return $err
632 check_lib2(){
633 log check_lib2 "$@"
634 headers="$1"
635 func="$2"
636 shift 2
637 temp_extralibs "$@"
638 check_func_headers "$headers" $func && add_extralibs "$@"
639 err=$?
640 restore_flags
641 return $err
644 check_exec(){
645 check_ld "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
648 check_exec_crash(){
649 code=`cat`
651 # exit() is not async signal safe. _Exit (C99) and _exit (POSIX)
652 # are safe but may not be available everywhere. Thus we use
653 # raise(SIGTERM) instead. The check is run in a subshell so we
654 # can redirect the "Terminated" message from the shell. SIGBUS
655 # is not defined by standard C so it is used conditionally.
657 (check_exec "$@") >> $logfile 2>&1 <<EOF
658 #include <signal.h>
659 static void sighandler(int sig){
660 raise(SIGTERM);
662 int main(void){
663 signal(SIGILL, sighandler);
664 signal(SIGFPE, sighandler);
665 signal(SIGSEGV, sighandler);
666 #ifdef SIGBUS
667 signal(SIGBUS, sighandler);
668 #endif
669 { $code }
674 check_type(){
675 log check_type "$@"
676 headers=$1
677 type=$2
678 shift 2
679 disable $type
680 incs=""
681 for hdr in $headers; do
682 incs="$incs
683 #include <$hdr>"
684 done
685 check_cc "$@" <<EOF && enable $type
686 $incs
687 $type v;
691 require(){
692 name="$1"
693 header="$2"
694 func="$3"
695 shift 3
696 check_lib $header $func "$@" || die "ERROR: $name not found"
699 require2(){
700 name="$1"
701 headers="$2"
702 func="$3"
703 shift 3
704 check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
707 check_foo_config(){
708 cfg=$1
709 pkg=$2
710 header=$3
711 func=$4
712 shift 4
713 disable $cfg
714 check_cmd ${pkg}-config --version
715 err=$?
716 if test "$err" = 0; then
717 temp_cflags `${pkg}-config --cflags`
718 temp_extralibs `${pkg}-config --libs`
719 check_lib "$@" $header $func && enable $cfg
721 return $err
724 apply(){
725 file=$1
726 shift
727 "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
730 # CONFIG_LIST contains configurable options, while HAVE_LIST is for
731 # system-dependent things.
733 COMPONENT_LIST="
734 bsfs
735 decoders
736 demuxers
737 encoders
738 filters
739 indevs
740 muxers
741 outdevs
742 parsers
743 protocols
746 CONFIG_LIST="
747 $COMPONENT_LIST
748 aandct
749 avfilter
750 avfilter_lavf
751 avisynth
752 beos_netserver
753 bzlib
754 fastdiv
755 ffmpeg
756 ffplay
757 ffserver
759 golomb
761 gprof
762 gray
763 hardcoded_tables
764 ipv6
765 libamr_nb
766 libamr_wb
767 libdc1394
768 libdirac
769 libfaac
770 libfaad
771 libfaadbin
772 libgsm
773 libmp3lame
774 libnut
775 libopenjpeg
776 libschroedinger
777 libspeex
778 libtheora
779 libvorbis
780 libx264
781 libxvid
782 mdct
783 memalign_hack
784 mlib
785 mpegaudio_hp
786 network
787 nonfree
788 postproc
789 powerpc_perf
790 rdft
791 shared
792 small
793 static
794 swscale
795 vdpau
796 vhook
797 x11grab
798 zlib
801 THREADS_LIST='
802 beosthreads
803 os2threads
804 pthreads
805 w32threads
808 ARCH_LIST='
809 alpha
811 bfin
812 ia64
813 m68k
814 mips
815 parisc
817 s390
819 sparc
820 sparc64
822 x86_32
823 x86_64
826 ARCH_EXT_LIST='
827 altivec
828 amd3dnow
829 amd3dnowext
830 armv5te
831 armv6
832 armv6t2
833 armvfp
834 iwmmxt
837 mmx2
838 neon
839 ppc4xx
841 ssse3
845 HAVE_LIST="
846 $ARCH_EXT_LIST
847 $THREADS_LIST
848 alsa_asoundlib_h
849 altivec_h
850 arpa_inet_h
851 bswap
852 closesocket
853 cmov
854 conio_h
855 dcbzl
856 dev_bktr_ioctl_bt848_h
857 dev_bktr_ioctl_meteor_h
858 dev_ic_bt8xx_h
859 dev_video_meteor_ioctl_meteor_h
860 dev_video_bktr_ioctl_bt848_h
861 dlfcn_h
862 dlopen
863 dos_paths
864 ebp_available
865 ebx_available
866 fast_64bit
867 fast_cmov
868 fast_unaligned
869 fork
870 freetype2
871 gethrtime
872 GetProcessTimes
873 getrusage
874 imlib2
875 inet_aton
876 inline_asm
877 libdc1394_1
878 libdc1394_2
879 llrint
880 lrint
881 lrintf
882 machine_ioctl_bt848_h
883 machine_ioctl_meteor_h
884 malloc_h
885 memalign
886 mkstemp
888 posix_memalign
889 ppc64
890 round
891 roundf
893 sdl_video_size
894 setmode
895 socklen_t
896 soundcard_h
897 poll_h
898 sys_mman_h
899 sys_resource_h
900 sys_select_h
901 sys_soundcard_h
902 sys_videoio_h
903 ten_operands
904 termios_h
905 threads
906 truncf
907 winsock2_h
908 yasm
911 # options emitted with CONFIG_ prefix but not available on command line
912 CONFIG_EXTRA="
913 oldscaler
916 CMDLINE_SELECT="
917 $ARCH_EXT_LIST
918 $CONFIG_LIST
919 $THREADS_LIST
920 cross_compile
921 debug
922 extra_warnings
923 logging
924 optimizations
925 stripping
926 yasm
929 PATHS_LIST='
930 bindir
931 datadir
932 incdir
933 libdir
934 mandir
935 prefix
936 shlibdir
939 CMDLINE_SET="
940 $PATHS_LIST
941 arch
942 build_suffix
945 cross_prefix
946 extra_version
947 host_cc
948 host_cflags
949 host_ldflags
950 host_libs
951 logfile
953 source_path
954 sysinclude
955 sysroot
956 target_exec
957 target_os
958 target_path
961 # code dependency declarations
963 # architecture extensions
964 altivec_deps="ppc"
965 amd3dnow_deps="mmx"
966 amd3dnowext_deps="amd3dnow"
967 armv5te_deps="arm"
968 armv6_deps="arm"
969 armv6t2_deps="arm"
970 armvfp_deps="arm"
971 iwmmxt_deps="arm"
972 mmi_deps="mips"
973 mmx_deps="x86"
974 mmx2_deps="mmx"
975 neon_deps="arm"
976 ppc4xx_deps="ppc"
977 sse_deps="mmx"
978 ssse3_deps="sse"
979 vis_deps="sparc"
981 # common features
982 oldscaler_deps="!swscale"
984 # decoders / encoders
985 aac_decoder_select="fft mdct"
986 ac3_decoder_deps="gpl"
987 ac3_decoder_select="fft mdct"
988 atrac3_decoder_select="fft mdct"
989 cavs_decoder_select="golomb"
990 cook_decoder_select="fft mdct"
991 cscd_decoder_suggest="zlib"
992 dca_decoder_select="fft mdct"
993 dnxhd_encoder_select="aandct"
994 dxa_decoder_select="zlib"
995 eac3_decoder_deps="gpl"
996 eac3_decoder_select="fft mdct"
997 eatgq_decoder_select="aandct"
998 eatqi_decoder_select="aandct"
999 ffv1_decoder_select="golomb"
1000 flac_decoder_select="golomb"
1001 flac_encoder_select="golomb"
1002 flashsv_decoder_select="zlib"
1003 flashsv_encoder_select="zlib"
1004 flv_encoder_select="aandct"
1005 h261_encoder_select="aandct"
1006 h263_encoder_select="aandct"
1007 h263p_encoder_select="aandct"
1008 h264_decoder_select="golomb"
1009 h264_vdpau_decoder_deps="vdpau"
1010 imc_decoder_select="fft mdct"
1011 jpegls_decoder_select="golomb"
1012 jpegls_encoder_select="golomb"
1013 ljpeg_encoder_select="aandct"
1014 loco_decoder_select="golomb"
1015 mjpeg_encoder_select="aandct"
1016 mpeg1video_encoder_select="aandct"
1017 mpeg2video_encoder_select="aandct"
1018 mpeg4_encoder_select="aandct"
1019 mpeg_vdpau_decoder_deps="vdpau"
1020 mpeg1_vdpau_decoder_deps="vdpau"
1021 mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h"
1022 msmpeg4v1_encoder_select="aandct"
1023 msmpeg4v2_encoder_select="aandct"
1024 msmpeg4v3_encoder_select="aandct"
1025 nellymoser_decoder_select="fft mdct"
1026 nellymoser_encoder_select="fft mdct"
1027 png_decoder_select="zlib"
1028 png_encoder_select="zlib"
1029 qdm2_decoder_select="fft mdct rdft"
1030 rv10_encoder_select="aandct"
1031 rv20_encoder_select="aandct"
1032 rv30_decoder_select="golomb"
1033 rv40_decoder_select="golomb"
1034 shorten_decoder_select="golomb"
1035 sonic_decoder_select="golomb"
1036 sonic_encoder_select="golomb"
1037 sonic_ls_encoder_select="golomb"
1038 svq3_decoder_select="golomb"
1039 svq3_decoder_suggest="zlib"
1040 tiff_decoder_suggest="zlib"
1041 tiff_encoder_suggest="zlib"
1042 tscc_decoder_select="zlib"
1043 vc1_vdpau_decoder_deps="vdpau"
1044 vorbis_decoder_select="fft mdct"
1045 vorbis_encoder_select="fft mdct"
1046 wmav1_decoder_select="fft mdct"
1047 wmav1_encoder_select="fft mdct"
1048 wmav2_decoder_select="fft mdct"
1049 wmav2_encoder_select="fft mdct"
1050 wmv1_encoder_select="aandct"
1051 wmv2_encoder_select="aandct"
1052 wmv3_vdpau_decoder_deps="vdpau"
1053 zlib_decoder_select="zlib"
1054 zlib_encoder_select="zlib"
1055 zmbv_decoder_select="zlib"
1056 zmbv_encoder_select="zlib"
1058 # external libraries
1059 libamr_nb_decoder_deps="libamr_nb"
1060 libamr_nb_encoder_deps="libamr_nb"
1061 libamr_wb_decoder_deps="libamr_wb"
1062 libamr_wb_encoder_deps="libamr_wb"
1063 libdirac_decoder_deps="libdirac !libschroedinger"
1064 libdirac_encoder_deps="libdirac"
1065 libfaac_encoder_deps="libfaac"
1066 libfaad_decoder_deps="libfaad"
1067 libfaadbin_decoder_extralibs='$ldl'
1068 libgsm_decoder_deps="libgsm"
1069 libgsm_encoder_deps="libgsm"
1070 libgsm_ms_decoder_deps="libgsm"
1071 libgsm_ms_encoder_deps="libgsm"
1072 libmp3lame_encoder_deps="libmp3lame"
1073 libopenjpeg_decoder_deps="libopenjpeg"
1074 libschroedinger_decoder_deps="libschroedinger"
1075 libschroedinger_encoder_deps="libschroedinger"
1076 libspeex_decoder_deps="libspeex"
1077 libtheora_encoder_deps="libtheora"
1078 libvorbis_encoder_deps="libvorbis"
1079 libx264_encoder_deps="libx264"
1080 libxvid_encoder_deps="libxvid"
1081 mpeg4aac_decoder_deps="libfaad"
1082 vdpau_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1084 # demuxers / muxers
1085 ac3_demuxer_deps="ac3_parser"
1086 alsa_demuxer_deps="alsa_asoundlib_h snd_pcm_htimestamp"
1087 alsa_demuxer_extralibs="-lasound"
1088 alsa_muxer_deps="alsa_asoundlib_h"
1089 alsa_muxer_extralibs="-lasound"
1090 audio_beos_demuxer_deps="audio_beos"
1091 audio_beos_demuxer_extralibs="-lmedia -lbe"
1092 audio_beos_muxer_deps="audio_beos"
1093 audio_beos_muxer_extralibs="-lmedia -lbe"
1094 avisynth_demuxer_deps="avisynth"
1095 bktr_demuxer_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
1096 dirac_demuxer_deps="dirac_parser"
1097 dv1394_demuxer_deps="dv1394 dv_demuxer"
1098 libdc1394_demuxer_deps="libdc1394"
1099 libnut_demuxer_deps="libnut"
1100 libnut_muxer_deps="libnut"
1101 matroska_demuxer_suggest="zlib bzlib"
1102 mov_demuxer_suggest="zlib"
1103 mp3_demuxer_deps="mpegaudio_parser"
1104 oss_demuxer_deps_any="soundcard_h sys_soundcard_h"
1105 oss_muxer_deps_any="soundcard_h sys_soundcard_h"
1106 redir_demuxer_deps="network"
1107 rtp_muxer_deps="network rtp_protocol"
1108 rtsp_demuxer_deps="sdp_demuxer"
1109 sdp_demuxer_deps="rtp_protocol mpegts_demuxer"
1110 v4l_demuxer_deps="linux_videodev_h"
1111 v4l2_demuxer_deps_any="linux_videodev2_h sys_videoio_h"
1112 vfwcap_demuxer_deps="capCreateCaptureWindow"
1113 vfwcap_demuxer_extralibs="-lvfw32"
1114 x11_grab_device_demuxer_deps="x11grab XShmCreateImage"
1115 x11_grab_device_demuxer_extralibs="-lX11 -lXext"
1117 # protocols
1118 gopher_protocol_deps="network"
1119 http_protocol_deps="network"
1120 rtp_protocol_deps="udp_protocol"
1121 tcp_protocol_deps="network"
1122 udp_protocol_deps="network"
1124 # filters
1125 movie_filter_deps="avfilter_lavf"
1127 # programs
1128 ffplay_deps="sdl"
1129 ffserver_deps="ffm_muxer rtp_protocol rtsp_demuxer"
1130 ffserver_extralibs='$ldl'
1131 vhook_extralibs='$ldl'
1134 # default parameters
1136 logfile="config.err"
1138 # installation paths
1139 prefix_default="/usr/local"
1140 bindir_default='${prefix}/bin'
1141 datadir_default='${prefix}/share/ffmpeg'
1142 incdir_default='${prefix}/include'
1143 libdir_default='${prefix}/lib'
1144 mandir_default='${prefix}/share/man'
1145 shlibdir_default="$libdir_default"
1147 # toolchain
1148 ar="ar"
1149 cc_default="gcc"
1150 host_cc_default="gcc"
1151 ln_s="ln -sf"
1152 nm_default="nm"
1153 objformat="elf"
1154 ranlib="ranlib"
1155 strip="strip"
1156 yasmexe="yasm"
1158 # machine
1159 arch=`uname -m`
1160 cpu="generic"
1162 # OS
1163 target_os=$(tolower $(uname -s))
1165 # configurable options
1166 enable debug
1167 enable ffmpeg
1168 enable ffplay
1169 enable ffserver
1170 enable ipv6
1171 enable mpegaudio_hp
1172 enable network
1173 enable oldscaler
1174 enable optimizations
1175 enable protocols
1176 enable static
1177 enable stripping
1178 vhook="default"
1180 # build settings
1181 add_cflags -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112
1182 SHFLAGS='-shared -Wl,-soname,$$(@F)'
1183 VHOOKSHFLAGS='$(SHFLAGS)'
1184 FFSERVERLDFLAGS=-Wl,-E
1185 LIBPREF="lib"
1186 LIBSUF=".a"
1187 FULLNAME='$(NAME)$(BUILDSUF)'
1188 LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
1189 SLIBPREF="lib"
1190 SLIBSUF=".so"
1191 SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
1192 SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
1193 SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
1194 LIB_INSTALL_EXTRA_CMD='$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
1196 host_cflags='-O3 -g -Wall'
1197 host_libs='-lm'
1199 target_path='.'
1201 # gcc stupidly only outputs the basename of targets with -MM, but we need the
1202 # full relative path for objects in subdirectories for non-recursive Make.
1203 DEPEND_CMD='$(CC) $(CFLAGS) -MM $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o,"'
1205 # find source path
1206 source_path="`dirname \"$0\"`"
1207 enable source_path_used
1208 if test -z "$source_path" -o "$source_path" = "." ; then
1209 source_path="`pwd`"
1210 disable source_path_used
1211 else
1212 source_path="`cd \"$source_path\"; pwd`"
1213 echo "$source_path" | grep -q '[[:blank:]]' &&
1214 die "Out of tree builds are impossible with whitespace in source path."
1217 FFMPEG_CONFIGURATION="$@"
1219 find_things(){
1220 thing=$1
1221 pattern=$2
1222 file=$source_path/$3
1223 sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
1226 ENCODER_LIST=$(find_things encoder ENC libavcodec/allcodecs.c)
1227 DECODER_LIST=$(find_things decoder DEC libavcodec/allcodecs.c)
1228 PARSER_LIST=$(find_things parser PARSER libavcodec/allcodecs.c)
1229 BSF_LIST=$(find_things bsf BSF libavcodec/allcodecs.c)
1230 MUXER_LIST=$(find_things muxer _MUX libavformat/allformats.c)
1231 DEMUXER_LIST=$(find_things demuxer DEMUX libavformat/allformats.c)
1232 OUTDEV_LIST=$(find_things muxer _MUX libavdevice/alldevices.c)
1233 INDEV_LIST=$(find_things demuxer DEMUX libavdevice/alldevices.c)
1234 PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
1235 FILTER_LIST=$(find_things filter FILTER libavfilter/allfilters.c)
1237 enable $ARCH_EXT_LIST \
1238 $DECODER_LIST \
1239 $ENCODER_LIST \
1240 $PARSER_LIST \
1241 $BSF_LIST \
1242 $DEMUXER_LIST \
1243 $MUXER_LIST \
1244 $FILTER_LIST \
1245 $PROTOCOL_LIST \
1246 $INDEV_LIST \
1247 $OUTDEV_LIST \
1249 die_unknown(){
1250 echo "Unknown option \"$1\"."
1251 echo "See $0 --help for available options."
1252 exit 1
1255 show_list() {
1256 suffix=_$1
1257 shift
1258 echo $* | sed s/$suffix//g | tr ' ' '\n' | sort
1259 exit 0
1262 for opt do
1263 optval="${opt#*=}"
1264 case "$opt" in
1265 --extra-cflags=*) add_cflags $optval
1267 --extra-ldflags=*) add_ldflags $optval
1269 --extra-libs=*) add_extralibs $optval
1271 --disable-devices) disable $INDEV_LIST $OUTDEV_LIST
1273 --enable-debug=*) debuglevel="$optval"
1275 --enable-*=*|--disable-*=*)
1276 eval `echo "$opt" | sed 's/=/-/;s/--/action=/;s/-/ thing=/;s/-/ name=/'`
1277 case "$thing" in
1278 encoder|decoder|muxer|demuxer|parser|bsf|protocol|filter) $action ${optval}_${thing} ;;
1279 *) die_unknown "$opt" ;;
1280 esac
1282 --enable-?*|--disable-?*)
1283 eval `echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g'`
1284 if is_in $option $COMPONENT_LIST; then
1285 eval $action \$$(toupper ${option%s})_LIST
1286 elif is_in $option $CMDLINE_SELECT; then
1287 $action $option
1288 else
1289 die_unknown $opt
1292 --list-*)
1293 NAME="${opt#--list-}"
1294 is_in $NAME $COMPONENT_LIST || die_unknown $opt
1295 NAME=${NAME%s}
1296 eval show_list $NAME \$$(toupper $NAME)_LIST
1298 --help|-h) show_help
1301 optname="${opt%%=*}"
1302 optname="${optname#--}"
1303 optname=$(echo "$optname" | sed 's/-/_/g')
1304 is_in $optname $CMDLINE_SET || die_unknown $opt
1305 eval $optname='$optval'
1307 esac
1308 done
1310 disabled logging && logfile=/dev/null
1312 echo "# $0 $@" > $logfile
1313 set >> $logfile
1315 test -n "$cross_prefix" && enable cross_compile
1317 ar="${cross_prefix}${ar}"
1318 cc_default="${cross_prefix}${cc_default}"
1319 nm_default="${cross_prefix}${nm_default}"
1320 ranlib="${cross_prefix}${ranlib}"
1321 strip="${cross_prefix}${strip}"
1323 sysinclude_default="${sysroot}/usr/include"
1325 set_default cc nm sysinclude
1326 enabled cross_compile || host_cc_default=$cc
1327 set_default host_cc
1329 case $target_os in
1330 mingw32*|cygwin*|*-dos|freedos|opendos|os/2*) EXESUF=.exe ;;
1331 esac
1333 # set temporary file name
1334 : ${TMPDIR:=$TEMPDIR}
1335 : ${TMPDIR:=$TMP}
1336 : ${TMPDIR:=/tmp}
1338 TMPC="${TMPDIR}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.c"
1339 TMPE="${TMPDIR}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}${EXESUF}"
1340 TMPH="${TMPDIR}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.h"
1341 TMPO="${TMPDIR}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.o"
1342 TMPS="${TMPDIR}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.S"
1343 TMPSH="${TMPDIR}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.sh"
1345 # make sure we can execute files in $TMPDIR
1346 cat > $TMPSH 2>> $logfile <<EOF
1347 #! /bin/sh
1349 chmod +x $TMPSH >> $logfile 2>&1
1350 if ! $TMPSH >> $logfile 2>&1; then
1351 cat <<EOF
1352 Unable to create and execute files in $TMPDIR. Set the TMPDIR environment
1353 variable to another directory and make sure that it is not mounted noexec.
1355 die "Sanity test failed."
1357 rm $TMPSH
1359 if $cc --version 2>/dev/null | grep -qi gcc; then
1360 cc_type=gcc
1361 elif $cc --version 2>/dev/null | grep -q Intel; then
1362 cc_type=icc
1363 elif $cc -v 2>&1 | grep -q xlc; then
1364 cc_type=xlc
1365 elif $cc -V 2>/dev/null | grep -q Compaq; then
1366 cc_type=ccc
1367 DEPEND_CMD='$(CC) $(CFLAGS) -M $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o,"'
1368 add_ldflags -Wl,-z,now # calls to libots crash without this
1371 test -n "$cc_type" && enable $cc_type || echolog "Unknown C compiler $cc"
1373 if test -n "$sysroot"; then
1374 case "$cc_type" in
1375 gcc)
1376 add_cflags --sysroot="$sysroot"
1377 add_ldflags --sysroot="$sysroot"
1379 esac
1382 # compiler sanity check
1383 check_exec <<EOF
1384 int main(void){ return 0; }
1386 if test "$?" != 0; then
1387 echo "$cc is unable to create an executable file."
1388 if test -z "$cross_prefix" && ! enabled cross_compile ; then
1389 echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
1390 echo "Only do this if you know what cross compiling means."
1392 die "C compiler test failed."
1395 check_cflags -std=c99
1397 case "$arch" in
1398 alpha)
1399 arch="alpha"
1400 enable fast_64bit
1401 check_cflags -mieee
1403 arm|armv[4567]*l)
1404 arch="arm"
1406 avr32)
1408 bfin)
1409 arch="bfin"
1411 ia64)
1412 arch="ia64"
1413 enable fast_64bit
1415 m68k)
1416 arch="m68k"
1418 mips|mipsel|IP*)
1419 arch="mips"
1421 mips64)
1422 arch="mips"
1423 enable fast_64bit
1425 parisc|hppa)
1426 arch="parisc"
1428 parisc64|hppa64)
1429 arch="parisc"
1430 enable fast_64bit
1432 "Power Macintosh"|ppc|powerpc)
1433 arch="ppc"
1434 enable fast_unaligned
1436 ppc64)
1437 arch="ppc"
1438 enable fast_64bit
1439 enable fast_unaligned
1441 s390|s390x)
1442 arch="s390"
1444 sh4|sh)
1445 arch="sh4"
1447 sparc)
1448 arch="sparc"
1450 sun4u|sparc64)
1451 arch="sparc"
1452 subarch="sparc64"
1453 enable fast_64bit
1455 i386|i486|i586|i686|i86pc|BePC)
1456 arch="x86"
1457 subarch="x86_32"
1458 enable fast_unaligned
1460 x86_64|amd64)
1461 arch="x86"
1462 subarch="x86_32"
1463 enable cmov
1464 enable fast_cmov
1465 enable fast_unaligned
1466 check_cc <<EOF && enable fast_64bit && subarch="x86_64"
1467 int test[sizeof(char*) - 7];
1471 arch="unknown"
1473 esac
1475 enable $arch $subarch
1477 # OS specific
1478 case $target_os in
1479 beos|haiku|zeta)
1480 prefix_default="$HOME/config"
1481 # helps building libavcodec
1482 add_cflags -DPIC -fomit-frame-pointer
1483 # 3 gcc releases known for BeOS, each with ugly bugs
1484 gcc_version="`$cc -v 2>&1 | grep version | cut -d ' ' -f3-`"
1485 case "$gcc_version" in
1486 2.9-beos-991026*|2.9-beos-000224*) echo "R5/GG gcc"
1487 disable mmx
1489 *20010315*) echo "BeBits gcc"
1490 add_cflags -fno-expensive-optimizations
1492 esac
1493 SHFLAGS=-nostart
1494 # enable BeOS things
1495 enable audio_beos
1496 # no need for libm, but the inet stuff
1497 # Check for BONE
1498 # XXX: actually should check for NOT net_server
1499 if echo $BEINCLUDES | grep -q 'headers/be/bone'; then
1500 network_extralibs="-lbind -lsocket"
1501 else
1502 enable beos_netserver
1503 network_extralibs="-lnet"
1504 fi ;;
1505 sunos)
1506 FFSERVERLDFLAGS=""
1507 SHFLAGS='-shared -Wl,-h,$$(@F)'
1508 network_extralibs="-lsocket -lnsl"
1509 add_cflags -D__EXTENSIONS__
1511 netbsd)
1512 oss_demuxer_extralibs="-lossaudio"
1513 oss_muxer_extralibs="-lossaudio"
1515 openbsd)
1516 disable need_memalign
1517 LIBOBJFLAGS='$(PIC)'
1518 SHFLAGS='-shared'
1519 oss_demuxer_extralibs="-lossaudio"
1520 oss_muxer_extralibs="-lossaudio"
1522 freebsd)
1523 disable need_memalign
1525 bsd/os)
1526 osextralibs="-lpoll -lgnugetopt"
1527 strip="strip -d"
1529 darwin)
1530 disable need_memalign
1531 SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR) -Wl,-read_only_relocs,suppress'
1532 VHOOKSHFLAGS='-dynamiclib -Wl,-single_module -flat_namespace -undefined suppress -Wl,-install_name,$(SHLIBDIR)/vhook/$$(@F)'
1533 strip="strip -x"
1534 FFLDFLAGS="-Wl,-dynamic,-search_paths_first"
1535 SLIBSUF=".dylib"
1536 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
1537 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
1538 FFSERVERLDFLAGS=-Wl,-bind_at_load
1539 objformat="macho"
1540 enabled x86_64 && objformat="macho64"
1542 mingw32*)
1543 target_os=mingw32
1544 LIBTARGET=i386
1545 if enabled x86_64; then
1546 disable need_memalign
1547 LIBTARGET=x64
1549 shlibdir_default="$bindir_default"
1550 VHOOKSHFLAGS='-shared -L$(BUILD_ROOT)/libavformat -L$(BUILD_ROOT)/libavcodec -L$(BUILD_ROOT)/libavutil'
1551 VHOOKLIBS='-lavformat$(BUILDSUF) -lavcodec$(BUILDSUF) -lavutil$(BUILDSUF) $(EXTRALIBS)'
1552 if enabled swscale; then
1553 VHOOKSHFLAGS="$VHOOKSHFLAGS -L\$(BUILD_ROOT)/libswscale"
1554 VHOOKLIBS="$VHOOKLIBS -lswscale\$(BUILDSUF)"
1556 disable ffserver
1557 SLIBPREF=""
1558 SLIBSUF=".dll"
1559 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1560 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1561 SLIB_EXTRA_CMD='-lib /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)'
1562 SLIB_INSTALL_EXTRA_CMD='-install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"; \
1563 install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)"'
1564 SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"'
1565 SHFLAGS='-shared -Wl,--output-def,$$(@:$(SLIBSUF)=.def) -Wl,--enable-runtime-pseudo-reloc -Wl,--enable-auto-image-base'
1566 objformat="win32"
1567 enable dos_paths
1568 if ! enabled x86_64; then
1569 check_cpp_condition _mingw.h "(__MINGW32_MAJOR_VERSION > 3) || (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
1570 die "ERROR: MinGW runtime version must be >= 3.15."
1571 enabled_any avisynth vfwcap_demuxer &&
1572 { check_cpp_condition w32api.h "(__W32API_MAJOR_VERSION > 3) || (__W32API_MAJOR_VERSION == 3 && __W32API_MINOR_VERSION >= 13)" ||
1573 die "ERROR: avisynth and vfwcap_demuxer require w32api version 3.13 or later."; }
1576 cygwin*)
1577 target_os=cygwin
1578 shlibdir_default="$bindir_default"
1579 VHOOKSHFLAGS='-shared -L$(BUILD_ROOT)/libavformat -L$(BUILD_ROOT)/libavcodec -L$(BUILD_ROOT)/libavutil'
1580 VHOOKLIBS='-lavformat$(BUILDSUF) -lavcodec$(BUILDSUF) -lavutil$(BUILDSUF) $(EXTRALIBS)'
1581 if enabled swscale; then
1582 VHOOKSHFLAGS="$VHOOKSHFLAGS -L\$(BUILD_ROOT)/libswscale"
1583 VHOOKLIBS="$VHOOKLIBS -lswscale\$(BUILDSUF)"
1585 SLIBPREF="cyg"
1586 SLIBSUF=".dll"
1587 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1588 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1589 SHFLAGS='-shared -Wl,--enable-auto-image-base'
1590 objformat="win32"
1591 enable dos_paths
1593 *-dos|freedos|opendos)
1594 disable ffplay ffserver vhook
1595 disable $INDEV_LIST $OUTDEV_LIST
1596 network_extralibs="-lsocket"
1597 objformat="coff"
1598 enable dos_paths
1600 linux)
1601 enable dv1394
1603 irix*)
1604 target_os=irix
1605 ranlib="echo ignoring ranlib"
1607 os/2*)
1608 strip="lxlite"
1609 ln_s="cp -f"
1610 FFLDFLAGS="-Zomf -Zbin-files -Zargs-wild -Zmap"
1611 SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
1612 FFSERVERLDFLAGS=""
1613 LIBSUF="_s.a"
1614 SLIBPREF=""
1615 SLIBSUF=".dll"
1616 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
1617 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
1618 SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
1619 echo PROTMODE >> $(SUBDIR)$(NAME).def; \
1620 echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
1621 echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
1622 echo EXPORTS >> $(SUBDIR)$(NAME).def; \
1623 emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
1624 SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
1625 emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
1626 SLIB_INSTALL_EXTRA_CMD='install -m 644 $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib "$(LIBDIR)"'
1627 SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.a "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.lib'
1628 disable vhook
1629 enable dos_paths
1631 interix)
1632 disable vhook
1636 die "Unknown OS '$target_os'."
1638 esac
1640 set_default $PATHS_LIST
1642 add_extralibs $osextralibs
1644 # Combine FFLDFLAGS and the LDFLAGS environment variable.
1645 LDFLAGS="$FFLDFLAGS $LDFLAGS"
1647 # we need to build at least one lib type
1648 if ! enabled_any static shared; then
1649 cat <<EOF
1650 At least one library type must be built.
1651 Specify --enable-static to build the static libraries or --enable-shared to
1652 build the shared libraries as well. To only build the shared libraries specify
1653 --disable-static in addition to --enable-shared.
1655 exit 1;
1658 disabled static && LIBNAME=""
1660 if enabled_any libfaad libfaadbin ; then
1661 if check_header faad.h; then
1662 check_cc <<EOF
1663 #include <faad.h>
1664 #ifndef FAAD2_VERSION
1665 ok faad1
1666 #endif
1667 int main(void) { return 0; }
1669 test $? = 0 && enable libfaad2
1670 else
1671 die "FAAD test failed."
1676 if ! enabled gpl; then
1677 die_gpl_disabled(){
1678 name=$1
1679 shift
1680 enabled_any $@ && die "$name is under GPL and --enable-gpl is not specified."
1682 die_gpl_disabled "The Postprocessing code" postproc
1683 die_gpl_disabled "libx264" libx264
1684 die_gpl_disabled "libxvidcore" libxvid
1685 die_gpl_disabled "FAAD2" libfaad2
1686 die_gpl_disabled "The X11 grabber" x11grab
1687 die_gpl_disabled "The software scaler" swscale
1690 if ! enabled nonfree && enabled_any libamr_nb libamr_wb; then
1691 die "libamr is nonfree and --enable-nonfree is not specified."
1694 check_deps $ARCH_EXT_LIST
1696 test -z "$need_memalign" && need_memalign="$mmx"
1698 #Darwin CC versions
1699 if test $target_os = darwin; then
1700 if enabled xlc; then
1701 add_cflags -qpdf2 -qlanglvl=extc99 -qmaxmem=-1 -qarch=auto -qtune=auto
1702 else
1703 add_cflags -pipe
1704 check_cflags -force_cpusubtype_ALL
1705 check_cflags -Wno-sign-compare
1706 enabled shared || check_cflags -mdynamic-no-pic
1710 disabled optimizations || check_cflags -fomit-frame-pointer
1712 # Add processor-specific flags
1713 if test $cpu != "generic"; then
1714 warn_altivec(){
1715 $1 altivec && echo "WARNING: Tuning for $2 but AltiVec $1.";
1717 case $cpu in
1718 601|ppc601|PowerPC601)
1719 add_cflags -mcpu=601
1720 warn_altivec enabled PPC601
1722 603*|ppc603*|PowerPC603*)
1723 add_cflags -mcpu=603
1724 warn_altivec enabled PPC603
1726 604*|ppc604*|PowerPC604*)
1727 add_cflags -mcpu=604
1728 warn_altivec enabled PPC604
1730 G3|g3|75*|ppc75*|PowerPC75*)
1731 add_cflags -mcpu=750 -mpowerpc-gfxopt
1732 warn_altivec enabled PPC75x
1734 G4|g4|745*|ppc745*|PowerPC745*)
1735 add_cflags -mcpu=7450 -mpowerpc-gfxopt
1736 warn_altivec disabled PPC745x
1738 74*|ppc74*|PowerPC74*)
1739 add_cflags -mcpu=7400 -mpowerpc-gfxopt
1740 warn_altivec disabled PPC74xx
1742 G5|g5|970|ppc970|PowerPC970|power4*|Power4*)
1743 add_cflags -mcpu=970 -mpowerpc-gfxopt -mpowerpc64
1744 warn_altivec disabled PPC970
1745 enable ppc64
1747 Cell|CELL|cell)
1748 add_cflags -mcpu=cell
1749 warn_altivec disabled Cell
1750 enable ppc64
1752 # targets that do NOT support conditional mov (cmov)
1753 i[345]86|pentium|pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
1754 add_cflags -march=$cpu
1755 disable cmov
1757 # targets that do support conditional mov (cmov)
1758 i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2)
1759 add_cflags -march=$cpu
1760 enable cmov
1761 enable fast_cmov
1763 # targets that do support conditional mov but on which it's slow
1764 pentium4|pentium4m|prescott|nocona)
1765 add_cflags -march=$cpu
1766 enable cmov
1767 disable fast_cmov
1769 sparc64)
1770 add_cflags -mcpu=v9
1772 arm11*|cortex*)
1773 add_cflags -mcpu=$cpu
1774 enable fast_unaligned
1776 armv*)
1777 add_cflags -march=$cpu
1779 arm*)
1780 add_cflags -mcpu=$cpu
1782 ev4|ev45|ev5|ev56|pca56|ev6|ev67)
1783 enabled ccc && add_cflags -arch $cpu || add_cflags -mcpu=$cpu
1786 echo "WARNING: Unknown CPU \"$cpu\", ignored."
1788 esac
1791 check_cc <<EOF || die "Symbol mangling check failed."
1792 int ff_extern;
1794 sym=$($nm -P -g $TMPO | grep ff_extern)
1795 extern_prefix=${sym%%ff_extern*}
1797 check_asm inline_asm '""'
1799 if enabled x86; then
1800 # check whether EBP is available on x86
1801 # As 'i' is stored on the stack, this program will crash
1802 # if the base pointer is used to access it because the
1803 # base pointer is cleared in the inline assembly code.
1804 check_exec_crash <<EOF && enable ebp_available
1805 volatile int i=0;
1806 __asm__ volatile (
1807 "xorl %%ebp, %%ebp"
1808 ::: "%ebp");
1809 return i;
1812 # check wether EBX is available on x86
1813 check_asm ebx_available '"":::"%ebx"'
1815 # check whether more than 10 operands are supported
1816 check_cc <<EOF && enable ten_operands
1817 int main(void) {
1818 int x=0;
1819 __asm__ volatile(
1821 :"+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x)
1823 return 0;
1827 # check whether binutils is new enough to compile SSSE3/MMX2
1828 enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
1829 enabled mmx2 && check_asm mmx2 '"movss %xmm0, %xmm0"'
1831 check_asm bswap '"bswap %%eax" ::: "%eax"'
1833 YASMFLAGS="-f $objformat -DARCH_$(toupper $subarch)"
1834 enabled x86_64 && append YASMFLAGS "-m amd64"
1835 enabled_all x86_64 shared && append YASMFLAGS "-DPIC"
1836 case "$objformat" in
1837 elf) enabled debug && append YASMFLAGS "-g dwarf2" ;;
1838 macho64) append YASMFLAGS "-DPIC -DPREFIX" ;;
1839 *) append YASMFLAGS "-DPREFIX" ;;
1840 esac
1841 disabled yasm || { check_yasm "pabsw xmm0, xmm0" && enable yasm; }
1844 # check for assembler specific support
1846 enabled ppc && check_asm dcbzl '"dcbzl 0, 1"'
1847 enabled ppc && check_asm ppc4xx '"maclhw r10, r11, r12"'
1849 # check for SIMD availability
1851 # AltiVec flags: The FSF version of GCC differs from the Apple version
1852 if enabled altivec; then
1853 check_cflags -maltivec -mabi=altivec &&
1854 { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
1855 check_cflags -faltivec
1857 # check if our compiler supports Motorola AltiVec C API
1858 check_cc <<EOF || disable altivec
1859 $inc_altivec_h
1860 int main(void) {
1861 vector signed int v1, v2, v3;
1862 v1 = vec_add(v2,v3);
1863 return 0;
1867 # check if our compiler supports braces for vector declarations
1868 check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
1869 $inc_altivec_h
1870 int main (void) { (vector int) {1}; return 0; }
1874 # We have to check if pld is a nop and disable it.
1875 enabled arm && check_asm pld '"pld [r0]"'
1876 enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
1877 enabled armv6 && check_asm armv6 '"sadd16 r0, r0, r0"'
1878 enabled armv6t2 && check_asm armv6t2 '"movt r0, #0"'
1879 enabled armvfp && check_asm armvfp '"fadds s0, s0, s0"'
1880 enabled iwmmxt && check_asm iwmmxt '"wunpckelub wr6, wr4"'
1881 enabled mmi && check_asm mmi '"lq $2, 0($2)"'
1882 enabled neon && check_asm neon '"vadd.i16 q0, q0, q0"'
1883 enabled vis && check_asm vis '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc
1885 enabled vis && add_cflags -mcpu=ultrasparc -mtune=ultrasparc
1887 # ---
1888 # big/little-endian test
1889 check_cc <<EOF || die "endian test failed"
1890 unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
1892 od -A n -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
1894 # ---
1895 # check availability of some header files
1897 if check_func dlopen; then
1898 ldl=
1899 elif check_func dlopen -ldl; then
1900 ldl=-ldl
1903 # Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
1904 check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
1906 check_func fork
1907 check_func gethrtime
1908 check_func getrusage
1909 check_func inet_aton $network_extralibs
1910 check_func memalign
1911 check_func mkstemp
1912 check_func posix_memalign
1913 check_func_headers io.h setmode
1914 check_func_headers windows.h GetProcessTimes
1916 check_header conio.h
1917 check_header dlfcn.h
1918 check_header malloc.h
1919 check_header poll.h
1920 check_header sys/mman.h
1921 check_header sys/resource.h
1922 check_header sys/select.h
1923 check_header termios.h
1924 check_header vdpau/vdpau.h
1925 check_header vdpau/vdpau_x11.h
1926 check_header X11/extensions/XvMClib.h
1928 if ! enabled_any memalign memalign_hack posix_memalign && enabled need_memalign ; then
1929 die "Error, no aligned memory allocator but SSE enabled, disable it or use --enable-memalign-hack."
1932 disabled zlib || check_lib zlib.h zlibVersion -lz || disable zlib
1933 disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
1935 # check for some common methods of building with pthread support
1936 # do this before the optional library checks as some of them require pthreads
1937 if enabled pthreads; then
1938 if check_func pthread_create; then
1940 elif check_func pthread_create -pthread; then
1941 add_cflags -pthread
1942 add_extralibs -pthread
1943 elif check_func pthread_create -pthreads; then
1944 add_cflags -pthreads
1945 add_extralibs -pthreads
1946 elif check_func pthread_create -lpthreadGC2; then
1947 add_extralibs -lpthreadGC2
1948 elif ! check_lib pthread.h pthread_create -lpthread; then
1949 die "ERROR: can't find pthreads library"
1953 for thread in $THREADS_LIST; do
1954 if enabled $thread; then
1955 test -n "$thread_type" &&
1956 die "ERROR: Only one thread type must be selected." ||
1957 thread_type="$thread"
1959 done
1961 check_lib math.h sin -lm
1963 # test for C99 functions in math.h
1964 for func in llrint lrint lrintf round roundf truncf; do
1965 check_exec <<EOF && enable $func || disable $func
1966 #include <math.h>
1967 int main(void) { return ($func(3.999f) > 0)?0:1; }
1969 done
1971 # these are off by default, so fail if requested and not available
1972 enabled avisynth && require2 vfw32 "windows.h vfw.h" AVIFileInit -lvfw32
1973 enabled libamr_nb && require libamrnb amrnb/interf_dec.h Speech_Decode_Frame_init -lamrnb -lm
1974 enabled libamr_wb && require libamrwb amrwb/dec_if.h D_IF_init -lamrwb -lm
1975 enabled libdirac && add_cflags $(pkg-config --cflags dirac) &&
1976 require libdirac libdirac_decoder/dirac_parser.h dirac_decoder_init -ldirac_decoder &&
1977 require libdirac libdirac_encoder/dirac_encoder.h dirac_encoder_init -ldirac_encoder
1978 enabled libfaac && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
1979 enabled libfaad && require2 libfaad faad.h faacDecOpen -lfaad
1980 enabled libgsm && require libgsm gsm.h gsm_create -lgsm
1981 enabled libmp3lame && require libmp3lame lame/lame.h lame_init -lmp3lame -lm
1982 enabled libnut && require libnut libnut.h nut_demuxer_init -lnut
1983 enabled libopenjpeg && require libopenjpeg openjpeg.h opj_version -lopenjpeg
1984 enabled libschroedinger && add_cflags $(pkg-config --cflags schroedinger-1.0) &&
1985 require libschroedinger schroedinger/schro.h schro_init $(pkg-config --libs schroedinger-1.0)
1986 enabled libspeex && require libspeex speex/speex.h speex_decoder_init -lspeex
1987 enabled libtheora && require libtheora theora/theora.h theora_info_init -ltheora -logg
1988 enabled libvorbis && require libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
1989 enabled libx264 && require libx264 x264.h x264_encoder_open -lx264 -lm &&
1990 { check_cpp_condition x264.h "X264_BUILD >= 65" ||
1991 die "ERROR: libx264 version must be >= 0.65."; }
1992 enabled libxvid && require libxvid xvid.h xvid_global -lxvidcore
1993 enabled mlib && require mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
1995 # libdc1394 check
1996 if enabled libdc1394; then
1997 { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
1998 enable libdc1394_2; } ||
1999 { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
2000 enable libdc1394_1; } ||
2001 die "ERROR: No version of libdc1394 found "
2005 _restrict=
2006 for restrict_keyword in restrict __restrict__ __restrict; do
2007 check_cc <<EOF && _restrict=$restrict_keyword && break
2008 void foo(char * $restrict_keyword p);
2010 done
2012 test "$vhook" = "default" && vhook="$dlopen"
2014 if test "$target_os" = cygwin -o "$target_os" = mingw32 && enabled_all static vhook ; then
2015 disable vhook
2016 echo
2017 echo "At the moment vhooks don't work on Cygwin or MinGW static builds."
2018 echo "Patches welcome."
2019 echo
2022 if enabled vhook; then
2023 check_ldflags -rdynamic
2024 check_ldflags -export-dynamic
2027 check_foo_config imlib2 imlib2 Imlib2.h imlib_load_font
2028 check_foo_config freetype2 freetype ft2build.h FT_Init_FreeType
2030 ##########################################
2031 # SDL check
2033 disable sdl_too_old
2034 disable sdl
2035 SDL_CONFIG="${cross_prefix}sdl-config"
2036 if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
2037 sdl_cflags=`"${SDL_CONFIG}" --cflags`
2038 temp_cflags $sdl_cflags
2039 temp_extralibs `"${SDL_CONFIG}" --libs`
2040 if check_lib2 SDL.h SDL_Init; then
2041 _sdlversion=`"${SDL_CONFIG}" --version | sed 's/[^0-9]//g'`
2042 if test "$_sdlversion" -lt 121 ; then
2043 enable sdl_too_old
2044 else
2045 enable sdl
2046 check_cc $sdl_cflags <<EOF && enable sdl_video_size
2047 #include <SDL.h>
2048 int main(int argc, char **argv){
2049 const SDL_VideoInfo *vi = SDL_GetVideoInfo();
2050 int w = vi->current_w;
2051 return 0;
2056 restore_flags
2059 texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
2061 ##########################################
2062 # Network check
2064 if enabled network; then
2065 check_type "sys/types.h sys/socket.h" socklen_t
2066 # Prefer arpa/inet.h over winsock2
2067 if check_header arpa/inet.h ; then
2068 check_func closesocket
2069 elif check_header winsock2.h ; then
2070 network_extralibs="-lws2_32"
2071 check_type ws2tcpip.h socklen_t
2072 check_func_headers winsock2.h closesocket
2076 ##########################################
2077 # IPv6 check
2079 enabled network && enabled ipv6 && check_ld <<EOF && enable ipv6 || disable ipv6
2080 #include <sys/types.h>
2081 #include <sys/socket.h>
2082 #include <netinet/in.h>
2083 #include <netdb.h>
2084 int main(void) {
2085 struct sockaddr_storage saddr;
2086 struct ipv6_mreq mreq6;
2087 getaddrinfo(0,0,0,0);
2088 getnameinfo(0,0,0,0,0,0,0);
2089 IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
2093 check_header linux/videodev.h
2094 check_header linux/videodev2.h
2095 check_header sys/videoio.h
2097 check_func_headers "windows.h vfw.h" capCreateCaptureWindow -lvfw32
2099 # check for ioctl_meteor.h, ioctl_bt848.h and alternatives
2100 { check_header dev/bktr/ioctl_meteor.h &&
2101 check_header dev/bktr/ioctl_bt848.h; } ||
2102 { check_header machine/ioctl_meteor.h &&
2103 check_header machine/ioctl_bt848.h; } ||
2104 { check_header dev/video/meteor/ioctl_meteor.h &&
2105 check_header dev/video/bktr/ioctl_bt848.h; } ||
2106 check_header dev/ic/bt8xx.h
2108 check_header sys/soundcard.h
2109 check_header soundcard.h
2111 check_header alsa/asoundlib.h &&
2112 check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
2114 # deal with the X11 frame grabber
2115 enabled x11grab &&
2116 check_header X11/Xlib.h &&
2117 check_header X11/extensions/XShm.h &&
2118 check_func XOpenDisplay -lX11 &&
2119 check_func XShmCreateImage -lX11 -lXext
2121 enabled debug && add_cflags -g"$debuglevel"
2123 # add some useful compiler flags if supported
2124 check_cflags -Wdeclaration-after-statement
2125 check_cflags -Wall
2126 check_cflags -Wno-switch
2127 check_cflags -Wdisabled-optimization
2128 check_cflags -Wpointer-arith
2129 check_cflags -Wredundant-decls
2130 check_cflags -Wno-pointer-sign
2131 check_cflags -Wcast-qual
2132 check_cflags -Wwrite-strings
2133 check_cflags -Wtype-limits
2134 check_cflags -Wundef
2135 enabled extra_warnings && check_cflags -Winline
2137 # add some linker flags
2138 check_ldflags -Wl,--warn-common
2139 check_ldflags -Wl,--as-needed
2140 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'
2141 check_ldflags -Wl,-Bsymbolic
2143 if enabled small; then
2144 check_cflags -Os # not all compilers support -Os
2145 optimizations="small"
2146 elif enabled optimizations; then
2147 if enabled xlc; then
2148 add_cflags -O5
2149 add_ldflags -O5
2150 elif enabled ccc; then
2151 add_cflags -fast
2152 else
2153 add_cflags -O3
2156 check_cflags -fno-math-errno
2157 check_cflags -fno-signed-zeros
2159 # add some flags for Intel C Compiler
2160 if enabled icc; then
2161 # Just warnings, no remarks
2162 check_cflags -w1
2163 # -wd: Disable following warnings
2164 # 144, 167, 556: -Wno-pointer-sign
2165 # 10006: ignoring unknown option -fno-signed-zeros
2166 # 10156: ignoring option '-W'; no argument required
2167 check_cflags -wd144,167,556,10006,10156
2168 # 11030: Warning unknown option --as-needed
2169 # 10156: ignoring option '-export'; no argument required
2170 check_ldflags -wd10156,11030
2171 # Allow to compile with optimizations
2172 check_ldflags -march=$cpu
2173 elif enabled ccc; then
2174 # disable some annoying warnings
2175 add_cflags -msg_disable cvtu32to64
2176 add_cflags -msg_disable embedcomment
2177 add_cflags -msg_disable needconstext
2178 add_cflags -msg_disable nomainieee
2179 add_cflags -msg_disable ptrmismatch1
2180 add_cflags -msg_disable unreachcode
2183 # PIC flags for shared library objects where they are needed
2184 if enabled shared; then
2185 # LIBOBJFLAGS may have already been set in the OS configuration
2186 if test -z "$LIBOBJFLAGS" ; then
2187 case "${subarch-$arch}" in
2188 x86_64|ia64|alpha|sparc*|power*|parisc*|mips*) LIBOBJFLAGS='$(PIC)' ;;
2189 esac
2193 if enabled gprof; then
2194 add_cflags -p
2195 add_ldflags -p
2198 VHOOKCFLAGS="-fPIC"
2200 # Find out if the .align argument is a power of two or not.
2201 check_asm asmalign_pot '".align 3"'
2203 enabled_any $DECODER_LIST && enable decoders
2204 enabled_any $ENCODER_LIST && enable encoders
2205 enabled_any $BSF_LIST && enable bsfs
2206 enabled_any $DEMUXER_LIST && enable demuxers
2207 enabled_any $MUXER_LIST && enable muxers
2208 enabled_any $FILTER_LIST && enable filters
2209 enabled_any $INDEV_LIST && enable demuxers
2210 enabled_any $OUTDEV_LIST && enable muxers
2211 enabled_any $PROTOCOL_LIST && enable protocols
2213 enabled_any $THREADS_LIST && enable threads
2215 check_deps $CONFIG_LIST \
2216 $CONFIG_EXTRA \
2217 $HAVE_LIST \
2218 $DECODER_LIST \
2219 $ENCODER_LIST \
2220 $PARSER_LIST \
2221 $BSF_LIST \
2222 $DEMUXER_LIST \
2223 $MUXER_LIST \
2224 $FILTER_LIST \
2225 $INDEV_LIST \
2226 $OUTDEV_LIST \
2227 $PROTOCOL_LIST \
2229 echo "install prefix $prefix"
2230 echo "source path $source_path"
2231 echo "C compiler $cc"
2232 echo ".align is power-of-two $asmalign_pot"
2233 echo "ARCH $arch ($cpu)"
2234 if test "$build_suffix" != ""; then
2235 echo "build suffix $build_suffix"
2237 if test "$extra_version" != ""; then
2238 echo "version string suffix $extra_version"
2240 echo "big-endian ${bigendian-no}"
2241 if enabled x86; then
2242 echo "yasm ${yasm-no}"
2243 echo "MMX enabled ${mmx-no}"
2244 echo "MMX2 enabled ${mmx2-no}"
2245 echo "3DNow! enabled ${amd3dnow-no}"
2246 echo "3DNow! extended enabled ${amd3dnowext-no}"
2247 echo "SSE enabled ${sse-no}"
2248 echo "SSSE3 enabled ${ssse3-no}"
2249 echo "CMOV enabled ${cmov-no}"
2250 echo "CMOV is fast ${fast_cmov-no}"
2251 echo "EBX available ${ebx_available-no}"
2252 echo "EBP available ${ebp_available-no}"
2253 echo "10 operands supported ${ten_operands-no}"
2255 if enabled arm; then
2256 echo "ARMv5TE enabled ${armv5te-no}"
2257 echo "ARMv6 enabled ${armv6-no}"
2258 echo "ARMv6T2 enabled ${armv6t2-no}"
2259 echo "ARM VFP enabled ${armvfp-no}"
2260 echo "IWMMXT enabled ${iwmmxt-no}"
2261 echo "NEON enabled ${neon-no}"
2263 if enabled mips; then
2264 echo "MMI enabled ${mmi-no}"
2266 if enabled ppc; then
2267 echo "AltiVec enabled ${altivec-no}"
2268 echo "PPC 4xx optimizations ${ppc4xx-no}"
2269 echo "dcbzl available ${dcbzl-no}"
2270 echo "performance report ${powerpc_perf-no}"
2272 if enabled sparc; then
2273 echo "VIS enabled ${vis-no}"
2275 echo "gprof enabled ${gprof-no}"
2276 echo "debug symbols ${debug-no}"
2277 echo "strip symbols ${stripping-no}"
2278 echo "optimizations ${optimizations-no}"
2279 echo "static ${static-no}"
2280 echo "shared ${shared-no}"
2281 echo "postprocessing support ${postproc-no}"
2282 echo "software scaler enabled ${swscale-no}"
2283 echo "new filter support ${avfilter-no}"
2284 echo "filters using lavformat ${avfilter_lavf-no}"
2285 echo "video hooking ${vhook-no}"
2286 if enabled vhook; then
2287 echo "Imlib2 support ${imlib2-no}"
2288 echo "FreeType support ${freetype2-no}"
2290 echo "network support ${network-no}"
2291 if enabled network; then
2292 echo "IPv6 support ${ipv6-no}"
2294 echo "threading support ${thread_type-no}"
2295 echo "SDL support ${sdl-no}"
2296 if enabled sdl_too_old; then
2297 echo "-> Your SDL version is too old - please upgrade to have FFplay/SDL support."
2299 echo "Sun medialib support ${mlib-no}"
2300 echo "AVISynth enabled ${avisynth-no}"
2301 echo "libamr-nb support ${libamr_nb-no}"
2302 echo "libamr-wb support ${libamr_wb-no}"
2303 echo "libdc1394 support ${libdc1394-no}"
2304 echo "libdirac enabled ${libdirac-no}"
2305 echo "libfaac enabled ${libfaac-no}"
2306 echo "libfaad enabled ${libfaad-no}"
2307 echo "libfaad dlopened ${libfaadbin-no}"
2308 echo "libgsm enabled ${libgsm-no}"
2309 echo "libmp3lame enabled ${libmp3lame-no}"
2310 echo "libnut enabled ${libnut-no}"
2311 echo "libopenjpeg enabled ${libopenjpeg-no}"
2312 echo "libschroedinger enabled ${libschroedinger-no}"
2313 echo "libspeex enabled ${libspeex-no}"
2314 echo "libtheora enabled ${libtheora-no}"
2315 echo "libvorbis enabled ${libvorbis-no}"
2316 echo "libx264 enabled ${libx264-no}"
2317 echo "libxvid enabled ${libxvid-no}"
2318 echo "vdpau enabled ${vdpau-no}"
2319 echo "zlib enabled ${zlib-no}"
2320 echo "bzlib enabled ${bzlib-no}"
2321 echo
2323 for type in decoder encoder parser demuxer muxer protocol filter bsf indev outdev; do
2324 echo "Enabled ${type}s:"
2325 eval list=\$$(toupper $type)_LIST
2326 for part in $list; do
2327 enabled $part && echo ${part%_*}
2328 done | sort | pr -3 -t
2329 echo
2330 done
2332 license="LGPL"
2333 if enabled nonfree; then
2334 license="unredistributable"
2335 elif enabled gpl; then
2336 license="GPL"
2339 echo "License: $license"
2341 echo "Creating config.mak and config.h..."
2343 echo "# Automatically generated by configure - do not modify!" > config.mak
2344 echo "/* Automatically generated by configure - do not modify! */" > $TMPH
2345 echo "#ifndef FFMPEG_CONFIG_H" >> $TMPH
2346 echo "#define FFMPEG_CONFIG_H" >> $TMPH
2347 echo "#define FFMPEG_CONFIGURATION \"$FFMPEG_CONFIGURATION\"" >> $TMPH
2348 echo "#define FFMPEG_DATADIR \"$(eval c_escape $datadir)\"" >> $TMPH
2350 echo "FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION" >> config.mak
2351 echo "prefix=$prefix" >> config.mak
2352 echo "LIBDIR=\$(DESTDIR)$libdir" >> config.mak
2353 echo "SHLIBDIR=\$(DESTDIR)$shlibdir" >> config.mak
2354 echo "INCDIR=\$(DESTDIR)$incdir" >> config.mak
2355 echo "BINDIR=\$(DESTDIR)$bindir" >> config.mak
2356 echo "DATADIR=\$(DESTDIR)$datadir" >> config.mak
2357 echo "MANDIR=\$(DESTDIR)$mandir" >> config.mak
2358 echo "CC=$cc" >> config.mak
2359 echo "YASM=$yasmexe" >> config.mak
2360 echo "AR=$ar" >> config.mak
2361 echo "RANLIB=$ranlib" >> config.mak
2362 echo "LN_S=$ln_s" >> config.mak
2363 enabled stripping &&
2364 echo "STRIP=$strip" >> config.mak ||
2365 echo "STRIP=echo ignoring strip" >> config.mak
2367 echo "OPTFLAGS=$CFLAGS" >> config.mak
2368 echo "VHOOKCFLAGS=$VHOOKCFLAGS" >> config.mak
2369 echo "LDFLAGS=$LDFLAGS" >> config.mak
2370 echo "FFSERVERLDFLAGS=$FFSERVERLDFLAGS" >> config.mak
2371 echo "SHFLAGS=$SHFLAGS" >> config.mak
2372 echo "YASMFLAGS=$YASMFLAGS" >> config.mak
2373 echo "VHOOKSHFLAGS=$VHOOKSHFLAGS" >> config.mak
2374 echo "VHOOKLIBS=$VHOOKLIBS" >> config.mak
2375 echo "LIBOBJFLAGS=$LIBOBJFLAGS" >> config.mak
2376 echo "BUILD_STATIC=$static" >> config.mak
2377 echo "BUILDSUF=$build_suffix" >> config.mak
2378 echo "FULLNAME=$FULLNAME" >> config.mak
2379 echo "LIBPREF=$LIBPREF" >> config.mak
2380 echo "LIBSUF=$LIBSUF" >> config.mak
2381 echo "LIBNAME=$LIBNAME" >> config.mak
2382 echo "SLIBPREF=$SLIBPREF" >> config.mak
2383 echo "SLIBSUF=$SLIBSUF" >> config.mak
2384 echo "EXESUF=$EXESUF" >> config.mak
2385 echo "EXTRA_VERSION=$extra_version" >> config.mak
2386 echo "DEPEND_CMD=$DEPEND_CMD" >> config.mak
2387 echo "HOSTCC=$host_cc" >> config.mak
2388 echo "HOSTCFLAGS=$host_cflags" >> config.mak
2389 echo "HOSTLDFLAGS=$host_ldflags" >> config.mak
2390 echo "HOSTLIBS=$host_libs" >> config.mak
2391 echo "TARGET_EXEC=$target_exec" >> config.mak
2392 echo "TARGET_PATH=$target_path" >> config.mak
2394 if enabled bigendian; then
2395 echo "WORDS_BIGENDIAN=yes" >> config.mak
2396 echo "#define WORDS_BIGENDIAN 1" >> $TMPH
2399 if enabled sdl; then
2400 echo "SDL_LIBS=`"${SDL_CONFIG}" --libs`" >> config.mak
2401 echo "SDL_CFLAGS=`"${SDL_CONFIG}" --cflags`" >> config.mak
2403 if enabled texi2html; then
2404 echo "BUILD_DOC=yes" >> config.mak
2407 get_version(){
2408 name=$1
2409 file=$source_path/$2
2410 eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
2411 eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
2412 lcname=$(tolower $name)
2413 eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
2414 eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
2417 get_version LIBSWSCALE libswscale/swscale.h
2418 get_version LIBPOSTPROC libpostproc/postprocess.h
2419 get_version LIBAVCODEC libavcodec/avcodec.h
2420 get_version LIBAVDEVICE libavdevice/avdevice.h
2421 get_version LIBAVFORMAT libavformat/avformat.h
2422 get_version LIBAVUTIL libavutil/avutil.h
2423 get_version LIBAVFILTER libavfilter/avfilter.h
2425 if enabled shared; then
2426 echo "BUILD_SHARED=yes" >> config.mak
2427 echo "PIC=-fPIC -DPIC" >> config.mak
2428 echo "LIBTARGET=${LIBTARGET}" >> config.mak
2429 echo "SLIBNAME=${SLIBNAME}" >> config.mak
2430 echo "SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}" >> config.mak
2431 echo "SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}" >> config.mak
2432 echo "SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}" >> config.mak
2433 echo "SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}" >> config.mak
2434 echo "SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}" >> config.mak
2435 echo "SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}" >> config.mak
2437 echo "LIB_INSTALL_EXTRA_CMD=${LIB_INSTALL_EXTRA_CMD}" >> config.mak
2438 echo "EXTRALIBS=$extralibs" >> config.mak
2440 echo "ARCH=$arch" >> config.mak
2442 print_config ARCH_ $TMPH config.mak $ARCH_LIST
2443 print_config HAVE_ $TMPH config.mak $HAVE_LIST
2444 print_config CONFIG_ $TMPH config.mak $CONFIG_LIST \
2445 $CONFIG_EXTRA \
2446 $DECODER_LIST \
2447 $ENCODER_LIST \
2448 $PARSER_LIST \
2449 $BSF_LIST \
2450 $DEMUXER_LIST \
2451 $MUXER_LIST \
2452 $FILTER_LIST \
2453 $PROTOCOL_LIST \
2454 $INDEV_LIST \
2455 $OUTDEV_LIST \
2457 echo "#define restrict $_restrict" >> $TMPH
2459 if enabled small; then
2460 echo "#define av_always_inline" >> $TMPH
2463 echo "SRC_PATH=\"$source_path\"" >> config.mak
2464 echo "SRC_PATH_BARE=$source_path" >> config.mak
2465 echo "BUILD_ROOT=\"$PWD\"" >> config.mak
2467 # Apparently it's not possible to portably echo a backslash.
2468 enabled asmalign_pot &&
2469 printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH ||
2470 printf '#define ASMALIGN(ZEROBITS) ".align 1 << " #ZEROBITS "\\n\\t"\n' >> $TMPH
2472 echo "#define EXTERN_PREFIX \"${extern_prefix}\"" >> $TMPH
2474 echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
2476 # Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
2477 cmp -s $TMPH config.h &&
2478 echo "config.h is unchanged" ||
2479 mv -f $TMPH config.h
2481 rm -f $TMPC $TMPE $TMPH $TMPO $TMPS $TMPSH
2483 # build tree in object directory if source path is different from current one
2484 if enabled source_path_used; then
2485 DIRS="\
2486 doc \
2487 libavcodec \
2488 libavcodec/alpha \
2489 libavcodec/arm \
2490 libavcodec/bfin \
2491 libavcodec/mlib \
2492 libavcodec/ppc \
2493 libavcodec/sh4 \
2494 libavcodec/sparc \
2495 libavcodec/x86 \
2496 libavdevice \
2497 libavfilter \
2498 libavformat \
2499 libavutil \
2500 libpostproc \
2501 libswscale \
2502 tests \
2503 tools \
2504 vhook \
2506 FILES="\
2507 Makefile \
2508 common.mak \
2509 subdir.mak \
2510 doc/texi2pod.pl \
2511 libavcodec/Makefile \
2512 libavdevice/Makefile \
2513 libavfilter/Makefile \
2514 libavformat/Makefile \
2515 libavutil/Makefile \
2516 libpostproc/Makefile \
2517 libswscale/Makefile \
2519 for dir in $DIRS ; do
2520 mkdir -p $dir
2521 done
2522 for f in $FILES ; do
2523 $ln_s "$source_path/$f" $f
2524 done
2528 # build pkg-config files
2530 pkgconfig_generate(){
2531 name=$1
2532 shortname=${name#lib}${build_suffix}
2533 comment=$2
2534 version=$3
2535 libs=$4
2536 requires=$5
2537 cat <<EOF > $name/$name.pc
2538 prefix=$prefix
2539 exec_prefix=\${prefix}
2540 libdir=$libdir
2541 includedir=$incdir
2543 Name: $name
2544 Description: $comment
2545 Version: $version
2546 Requires: $(disabled shared && echo $requires)
2547 Requires.private: $(enabled shared && echo $requires)
2548 Conflicts:
2549 Libs: -L\${libdir} -l${shortname} $(disabled shared && echo $libs)
2550 Libs.private: $(enabled shared && echo $libs)
2551 Cflags: -I\${includedir}
2553 cat <<EOF > $name/$name-uninstalled.pc
2554 prefix=
2555 exec_prefix=
2556 libdir=\${pcfiledir}
2557 includedir=${source_path}
2559 Name: $name
2560 Description: $comment
2561 Version: $version
2562 Requires: $requires
2563 Conflicts:
2564 Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
2565 Cflags: -I\${includedir}
2569 pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
2570 pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
2571 pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
2572 pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "libavformat = $LIBAVFORMAT_VERSION"
2573 enabled avfilter &&
2574 pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
2575 enabled postproc &&
2576 pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
2577 if enabled swscale; then
2578 pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"
2579 else
2580 pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavcodec = $LIBAVCODEC_VERSION"
2581 apply libswscale/libswscale.pc sed s/^Libs:.*$/Libs:/