Fix typo in table value.
[ffmpeg-lucabe.git] / configure
blob5cf1ef6515fb46a661f5e738f1e3930de496d10f
1 #!/bin/sh
3 # FFmpeg configure script
5 # Copyright (c) 2000-2002 Fabrice Bellard
6 # Copyright (c) 2005-2008 Diego Biurrun
7 # Copyright (c) 2005-2008 Mans Rullgard
10 # Prevent locale nonsense from breaking basic text processing.
11 LC_ALL=C
12 export LC_ALL
14 # make sure we are running under a compatible shell
15 # try to make this part work with most shells
17 try_exec(){
18 echo "Trying shell $1"
19 type "$1" > /dev/null 2>&1 && exec "$@"
22 unset foo
23 (: ${foo%%bar}) 2> /dev/null
24 E1="$?"
26 (: ${foo?}) 2> /dev/null
27 E2="$?"
29 if test "$E1" != 0 || test "$E2" = 0; then
30 echo "Broken shell detected. Trying alternatives."
31 export FF_CONF_EXEC
32 if test "0$FF_CONF_EXEC" -lt 1; then
33 FF_CONF_EXEC=1
34 try_exec bash "$0" "$@"
36 if test "0$FF_CONF_EXEC" -lt 2; then
37 FF_CONF_EXEC=2
38 try_exec ksh "$0" "$@"
40 if test "0$FF_CONF_EXEC" -lt 3; then
41 FF_CONF_EXEC=3
42 try_exec /usr/xpg4/bin/sh "$0" "$@"
44 echo "No compatible shell script interpreter found."
45 echo "This configure script requires a POSIX-compatible shell"
46 echo "such as bash or ksh."
47 echo "THIS IS NOT A BUG IN FFMPEG, DO NOT REPORT IT AS SUCH."
48 echo "Instead, install a working POSIX-compatible shell."
49 echo "Disabling this configure test will create a broken FFmpeg."
50 if test "$BASH_VERSION" = '2.04.0(1)-release'; then
51 echo "This bash version ($BASH_VERSION) is broken on your platform."
52 echo "Upgrade to a later version if available."
54 exit 1
57 show_help(){
58 echo "Usage: configure [options]"
59 echo "Options: [defaults in brackets after descriptions]"
60 echo
61 echo "Standard options:"
62 echo " --help print this message"
63 echo " --logfile=FILE log tests and output to FILE [config.err]"
64 echo " --disable-logging do not log configure debug information"
65 echo " --prefix=PREFIX install in PREFIX [$prefix]"
66 echo " --bindir=DIR install binaries in DIR [PREFIX/bin]"
67 echo " --libdir=DIR install libs in DIR [PREFIX/lib]"
68 echo " --shlibdir=DIR install shared libs in DIR [PREFIX/lib]"
69 echo " --incdir=DIR install includes in DIR [PREFIX/include]"
70 echo " --mandir=DIR install man page in DIR [PREFIX/share/man]"
71 echo " --enable-static build static libraries [yes]"
72 echo " --disable-static do not build static libraries [no]"
73 echo " --enable-shared build shared libraries [no]"
74 echo " --disable-shared do not build shared libraries [yes]"
75 echo " --enable-gpl allow use of GPL code, the resulting libs"
76 echo " and binaries will be under GPL [no]"
77 echo " --enable-nonfree allow use of nonfree code, the resulting libs"
78 echo " and binaries will be unredistributable [no]"
79 echo " --enable-postproc enable GPLed postprocessing support [no]"
80 echo " --enable-swscale enable GPLed software scaler support [no]"
81 echo " --enable-avfilter video filter support (replaces vhook) [no]"
82 echo " --enable-avfilter-lavf video filters dependent on avformat [no]"
83 echo " --disable-vhook disable video hooking support"
84 echo " --enable-beosthreads use BeOS threads [no]"
85 echo " --enable-os2threads use OS/2 threads [no]"
86 echo " --enable-pthreads use pthreads [no]"
87 echo " --enable-w32threads use Win32 threads [no]"
88 echo " --enable-x11grab enable X11 grabbing [no]"
89 echo
90 echo "External library support:"
91 echo " --enable-mlib enable Sun medialib [no]"
92 echo " --enable-avisynth enable reading of AVISynth script files [no]"
93 echo " --enable-bzlib enable bzlib [no]"
94 echo " --enable-libamr-nb enable libamr-nb floating point audio codec"
95 echo " --enable-libamr-wb enable libamr-wb floating point audio codec"
96 echo " --enable-libdc1394 enable IIDC-1394 grabbing using libdc1394"
97 echo " and libraw1394 [no]"
98 echo " --enable-libdirac enable Dirac support via libdirac [no]"
99 echo " --enable-libfaac enable FAAC support via libfaac [no]"
100 echo " --enable-libfaad enable FAAD support via libfaad [no]"
101 echo " --enable-libfaadbin open libfaad.so.0 at runtime [no]"
102 echo " --enable-libgsm enable GSM support via libgsm [no]"
103 echo " --enable-libmp3lame enable MP3 encoding via libmp3lame [no]"
104 echo " --enable-libnut enable NUT (de)muxing via libnut,"
105 echo " native (de)muxer exists [no]"
106 echo " --enable-libschroedinger enable Dirac support via libschroedinger [no]"
107 echo " --enable-libspeex enable Speex decoding via libspeex [no]"
108 echo " --enable-libtheora enable Theora encoding via libtheora [no]"
109 echo " --enable-libvorbis enable Vorbis encoding via libvorbis,"
110 echo " native implementation exists [no]"
111 echo " --enable-libx264 enable H.264 encoding via x264 [no]"
112 echo " --enable-libxvid enable Xvid encoding via xvidcore,"
113 echo " native MPEG-4/Xvid encoder exists [no]"
114 echo " --enable-zlib enable zlib [no]"
115 echo ""
116 echo "Advanced options (experts only):"
117 echo " --source-path=PATH path to source code [$source_path]"
118 echo " --cross-prefix=PREFIX use PREFIX for compilation tools [$cross_prefix]"
119 echo " --enable-cross-compile assume a cross-compiler is used"
120 echo " --target-os=OS compiler targets OS [$target_os]"
121 echo " --cc=CC use C compiler CC [$cc]"
122 echo " --extra-cflags=ECFLAGS add ECFLAGS to CFLAGS [$CFLAGS]"
123 echo " --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]"
124 echo " --extra-libs=ELIBS add ELIBS [$ELIBS]"
125 echo " --extra-version=STRING version string suffix []"
126 echo " --build-suffix=SUFFIX library name suffix []"
127 echo " --arch=ARCH select architecture [$arch]"
128 echo " --cpu=CPU select the minimum required CPU (affects"
129 echo " instruction selection, may crash on older CPUs)"
130 echo " --enable-powerpc-perf enable performance report on PPC"
131 echo " (requires enabling PMC)"
132 echo " --disable-altivec disable AltiVec optimizations"
133 echo " --disable-mmx disable MMX optimizations"
134 echo " --disable-mmx2 disable MMX2 optimizations"
135 echo " --disable-ssse3 disable SSSE3 optimizations"
136 echo " --disable-armv5te disable armv5te optimizations"
137 echo " --disable-armv6 disable armv6 optimizations"
138 echo " --disable-armvfp disable ARM VFP optimizations"
139 echo " --disable-iwmmxt disable iwmmxt optimizations"
140 echo " --disable-mmi disable MMI optimizations"
141 echo " --disable-neon disable neon optimizations"
142 echo " --disable-vis disable VIS optimizations"
143 echo " --disable-network disable network support [no]"
144 echo " --disable-ipv6 disable IPv6 support [no]"
145 echo " --disable-mpegaudio-hp faster (but less accurate)"
146 echo " MPEG audio decoding [no]"
147 echo " --disable-fft disable FFT code"
148 echo " --disable-golomb disable Golomb code"
149 echo " --disable-mdct disable MDCT code"
150 echo " --enable-gray enable full grayscale support (slower color)"
151 echo " --disable-ffmpeg disable ffmpeg build"
152 echo " --disable-ffplay disable ffplay build"
153 echo " --disable-ffserver disable ffserver build"
154 echo " --enable-small optimize for size instead of speed"
155 echo " --enable-hardcoded-tables use hardcoded tables instead of runtime generation"
156 echo " --enable-memalign-hack emulate memalign, interferes with memory debuggers"
157 echo " --enable-beos-netserver enable BeOS netserver"
158 echo " --disable-encoder=NAME disable encoder NAME"
159 echo " --enable-encoder=NAME enable encoder NAME"
160 echo " --disable-encoders disable all encoders"
161 echo " --disable-decoder=NAME disable decoder NAME"
162 echo " --enable-decoder=NAME enable decoder NAME"
163 echo " --disable-decoders disable all decoders"
164 echo " --disable-muxer=NAME disable muxer NAME"
165 echo " --enable-muxer=NAME enable muxer NAME"
166 echo " --disable-muxers disable all muxers"
167 echo " --disable-demuxer=NAME disable demuxer NAME"
168 echo " --enable-demuxer=NAME enable demuxer NAME"
169 echo " --disable-demuxers disable all demuxers"
170 echo " --enable-parser=NAME enable parser NAME"
171 echo " --disable-parser=NAME disable parser NAME"
172 echo " --disable-parsers disable all parsers"
173 echo " --enable-bsf=NAME enable bitstream filter NAME"
174 echo " --disable-bsf=NAME disable bitstream filter NAME"
175 echo " --disable-bsfs disable all bitstream filters"
176 echo " --enable-protocol=NAME enable protocol NAME"
177 echo " --disable-protocol=NAME disable protocol NAME"
178 echo " --disable-protocols disable all protocols"
179 echo " --disable-indevs disable input devices"
180 echo " --disable-outdevs disable output devices"
181 echo " --disable-devices disable all devices"
182 echo " --enable-filter=NAME enable filter NAME"
183 echo " --disable-filter=NAME disable filter NAME"
184 echo " --disable-filters disable all filters"
185 echo " --list-decoders show all available decoders"
186 echo " --list-encoders show all available encoders"
187 echo " --list-muxers show all available muxers"
188 echo " --list-demuxers show all available demuxers"
189 echo " --list-parsers show all available parsers"
190 echo " --list-protocols show all available protocols"
191 echo " --list-bsfs show all available bitstream filters"
192 echo " --list-indevs show all available input devices"
193 echo " --list-outdevs show all available output devices"
194 echo " --list-filters show all available filters"
195 echo
196 echo "Developer options (useful when working on FFmpeg itself):"
197 echo " --disable-debug disable debugging symbols"
198 echo " --enable-debug=LEVEL set the debug level [$debuglevel]"
199 echo " --enable-gprof enable profiling with gprof [$gprof]"
200 echo " --disable-optimizations disable compiler optimizations"
201 echo " --enable-extra-warnings enable more compiler warnings"
202 echo " --disable-stripping disable stripping of executables and shared libraries"
203 echo ""
204 echo "NOTE: Object files are built at the place where configure is launched."
205 exit 0
208 log(){
209 echo "$@" >> $logfile
212 log_file(){
213 log BEGIN $1
214 pr -n -t $1 >> $logfile
215 log END $1
218 echolog(){
219 log "$@"
220 echo "$@"
223 die(){
224 echolog "$@"
225 cat <<EOF
226 If you think configure made a mistake, make sure you are using the latest
227 version from SVN. If the latest version fails, report the problem to the
228 ffmpeg-user@mplayerhq.hu mailing list or IRC #ffmpeg on irc.freenode.net.
230 if disabled logging; then
231 cat <<EOF
232 Rerun configure with logging enabled (do not use --disable-logging), and
233 include the log this produces with your report.
235 else
236 cat <<EOF
237 Include the log file "$logfile" produced by configure as this will help
238 solving the problem.
241 rm -f $TMPC $TMPE $TMPH $TMPO $TMPS $TMPSH
242 exit 1
245 # Avoid locale weirdness, besides we really just want to translate ASCII.
246 toupper(){
247 echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
250 tolower(){
251 echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
254 set_all(){
255 value=$1
256 shift
257 for var in $*; do
258 eval $var=$value
259 done
262 set_weak(){
263 value=$1
264 shift
265 for var; do
266 eval : \${$var:=$value}
267 done
270 pushvar(){
271 for var in $*; do
272 eval level=\${${var}_level:=0}
273 eval ${var}_${level}="\$$var"
274 eval ${var}_level=$(($level+1))
275 done
278 popvar(){
279 for var in $*; do
280 eval level=\${${var}_level:-0}
281 test $level = 0 && continue
282 eval level=$(($level-1))
283 eval $var="\${${var}_${level}}"
284 eval ${var}_level=$level
285 eval unset ${var}_${level}
286 done
289 enable(){
290 set_all yes $*
293 disable(){
294 set_all no $*
297 enable_weak(){
298 set_weak yes $*
301 disable_weak(){
302 set_weak no $*
305 do_enable_deep(){
306 for var; do
307 enabled $var && continue
308 eval sel="\$${var}_select"
309 eval sgs="\$${var}_suggest"
310 pushvar var sgs
311 enable_deep $sel
312 popvar sgs
313 enable_deep_weak $sgs
314 popvar var
315 done
318 enable_deep(){
319 do_enable_deep $*
320 enable $*
323 enable_deep_weak(){
324 do_enable_deep $*
325 enable_weak $*
328 enabled(){
329 test "${1#!}" = "$1" && op== || op=!=
330 eval test "x\$${1#!}" $op "xyes"
333 disabled(){
334 test "${1#!}" = "$1" && op== || op=!=
335 eval test "x\$${1#!}" $op "xno"
338 enabled_all(){
339 for opt; do
340 enabled $opt || return 1
341 done
344 disabled_all(){
345 for opt; do
346 disabled $opt || return 1
347 done
350 enabled_any(){
351 for opt; do
352 enabled $opt && return 0
353 done
356 disabled_any(){
357 for opt; do
358 disabled $opt && return 0
359 done
360 return 1
363 set_default(){
364 for opt; do
365 eval test -z "\$$opt" && eval $opt=\$${opt}_default
366 done
369 is_in(){
370 value=$1
371 shift
372 for var in $*; do
373 [ $var = $value ] && return 0
374 done
375 return 1
378 check_deps(){
379 for cfg; do
380 cfg="${cfg#!}"
381 enabled ${cfg}_checking && die "Circular dependency for $cfg."
382 disabled ${cfg}_checking && continue
383 enable ${cfg}_checking
385 eval dep_all="\$${cfg}_deps"
386 eval dep_any="\$${cfg}_deps_any"
387 eval dep_sel="\$${cfg}_select"
388 eval dep_sgs="\$${cfg}_suggest"
390 pushvar cfg dep_all dep_any dep_sel dep_sgs
391 check_deps $dep_all $dep_any $dep_sel $dep_sgs
392 popvar cfg dep_all dep_any dep_sel dep_sgs
394 enabled_all $dep_all || disable $cfg
395 enabled_any $dep_any || disable $cfg
396 disabled_any $dep_sel && disable $cfg
398 if enabled $cfg; then
399 eval dep_extralibs="\$${cfg}_extralibs"
400 test -n "$dep_extralibs" && add_extralibs $dep_extralibs
401 enable_deep $dep_sel
402 enable_deep_weak $dep_sgs
405 disable ${cfg}_checking
406 done
409 print_config(){
410 pfx=$1
411 header=$2
412 makefile=$3
413 shift 3
414 for cfg; do
415 ucname="`toupper $cfg`"
416 if enabled $cfg; then
417 echo "#define ${pfx}${ucname} 1" >> $header
418 echo "#define ENABLE_${ucname} 1" >> $header
419 echo "${pfx}${ucname}=yes" >> $makefile
420 else
421 echo "#define ENABLE_${ucname} 0" >> $header
423 done
426 flags_saved(){
427 (: ${SAVE_CFLAGS?}) 2> /dev/null
430 save_flags(){
431 flags_saved && return
432 SAVE_CFLAGS="$CFLAGS"
433 SAVE_LDFLAGS="$LDFLAGS"
434 SAVE_extralibs="$extralibs"
437 restore_flags(){
438 flags_saved || return
439 CFLAGS="$SAVE_CFLAGS"
440 LDFLAGS="$SAVE_LDFLAGS"
441 extralibs="$SAVE_extralibs"
442 unset SAVE_CFLAGS
443 unset SAVE_LDFLAGS
444 unset SAVE_extralibs
447 temp_cflags(){
448 save_flags
449 CFLAGS="$CFLAGS $*"
452 temp_ldflags(){
453 save_flags
454 LDFLAGS="$LDFLAGS $*"
457 temp_extralibs(){
458 save_flags
459 extralibs="$extralibs $*"
462 append(){
463 var=$1
464 shift
465 flags_saved && eval "SAVE_$var=\"\$SAVE_$var $*\""
466 eval "$var=\"\$$var $*\""
469 add_cflags(){
470 append CFLAGS "$@"
473 add_ldflags(){
474 append LDFLAGS "$@"
477 add_extralibs(){
478 append extralibs "$@"
481 check_cmd(){
482 log "$@"
483 "$@" >> $logfile 2>&1
486 check_cc(){
487 log check_cc "$@"
488 cat > $TMPC
489 log_file $TMPC
490 check_cmd $cc $CFLAGS "$@" -c -o $TMPO $TMPC
493 check_cpp(){
494 log check_cpp "$@"
495 cat > $TMPC
496 log_file $TMPC
497 check_cmd $cc $CFLAGS "$@" -E -o $TMPO $TMPC
500 check_asm(){
501 log check_asm "$@"
502 name="$1"
503 asm="$2"
504 shift 2
505 check_cc "$@" <<EOF && enable $name || disable $name
506 int foo(void){ __asm__ volatile($asm); }
510 check_yasm(){
511 log check_yasm "$@"
512 echo "$1" > $TMPS
513 log_file $TMPS
514 shift 1
515 check_cmd $yasmexe $YASMFLAGS "$@" -o $TMPO $TMPS
518 check_ld(){
519 log check_ld "$@"
520 check_cc || return
521 flags=''
522 libs=''
523 for f; do
524 test "${f}" = "${f#-l}" && flags="$flags $f" || libs="$libs $f"
525 done
526 check_cmd $cc $LDFLAGS $flags -o $TMPE $TMPO $extralibs $libs
529 check_cflags(){
530 log check_cflags "$@"
531 check_cc "$@" <<EOF && add_cflags "$@"
532 int x;
536 check_ldflags(){
537 log check_ldflags "$@"
538 check_ld "$@" <<EOF && add_ldflags "$@"
539 int main(void){ return 0; }
543 check_header(){
544 log check_header "$@"
545 header=$1
546 shift
547 var=`echo $header | sed 's/[^A-Za-z0-9_]/_/g'`
548 disable $var
549 check_cpp "$@" <<EOF && enable $var
550 #include <$header>
551 int x;
555 check_func(){
556 log check_func "$@"
557 func=$1
558 shift
559 disable $func
560 check_ld "$@" <<EOF && enable $func
561 extern int $func();
562 int main(void){ $func(); }
566 check_func_headers(){
567 log check_func_headers "$@"
568 headers=$1
569 func=$2
570 shift 2
571 disable $func
572 incs=""
573 for hdr in $headers; do
574 incs="$incs
575 #include <$hdr>"
576 done
577 check_ld "$@" <<EOF && enable $func
578 $incs
579 int main(int argc, char **argv){
580 (void) $func;
581 return 0;
586 check_cpp_condition(){
587 log check_cpp_condition "$@"
588 header=$1
589 condition=$2
590 check_cpp <<EOF
591 #include <$header>
592 #if !($condition)
593 #error "unsatisfied condition: $condition"
594 #endif
598 check_lib(){
599 log check_lib "$@"
600 header="$1"
601 func="$2"
602 shift 2
603 temp_extralibs "$@"
604 check_header $header && check_func $func && add_extralibs "$@"
605 err=$?
606 restore_flags
607 return $err
610 check_lib2(){
611 log check_lib2 "$@"
612 headers="$1"
613 func="$2"
614 shift 2
615 temp_extralibs "$@"
616 check_func_headers "$headers" $func && add_extralibs "$@"
617 err=$?
618 restore_flags
619 return $err
622 check_exec(){
623 check_ld "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
626 check_exec_crash(){
627 code=`cat`
629 # exit() is not async signal safe. _Exit (C99) and _exit (POSIX)
630 # are safe but may not be available everywhere. Thus we use
631 # raise(SIGTERM) instead. The check is run in a subshell so we
632 # can redirect the "Terminated" message from the shell. SIGBUS
633 # is not defined by standard C so it is used conditionally.
635 (check_exec "$@") >> $logfile 2>&1 <<EOF
636 #include <signal.h>
637 static void sighandler(int sig){
638 raise(SIGTERM);
640 int main(void){
641 signal(SIGILL, sighandler);
642 signal(SIGFPE, sighandler);
643 signal(SIGSEGV, sighandler);
644 #ifdef SIGBUS
645 signal(SIGBUS, sighandler);
646 #endif
647 { $code }
652 check_type(){
653 log check_type "$@"
654 headers=$1
655 type=$2
656 shift 2
657 disable $type
658 incs=""
659 for hdr in $headers; do
660 incs="$incs
661 #include <$hdr>"
662 done
663 check_cc "$@" <<EOF && enable $type
664 $incs
665 $type v;
669 require(){
670 name="$1"
671 header="$2"
672 func="$3"
673 shift 3
674 check_lib $header $func "$@" || die "ERROR: $name not found"
677 require2(){
678 name="$1"
679 headers="$2"
680 func="$3"
681 shift 3
682 check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
685 check_foo_config(){
686 cfg=$1
687 pkg=$2
688 header=$3
689 func=$4
690 shift 4
691 disable $cfg
692 check_cmd ${pkg}-config --version
693 err=$?
694 if test "$err" = 0; then
695 temp_cflags `${pkg}-config --cflags`
696 temp_extralibs `${pkg}-config --libs`
697 check_lib "$@" $header $func && enable $cfg
699 return $err
702 apply(){
703 file=$1
704 shift
705 "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
708 # CONFIG_LIST contains configurable options, while HAVE_LIST is for
709 # system-dependent things.
711 COMPONENT_LIST="
712 bsfs
713 decoders
714 demuxers
715 encoders
716 filters
717 indevs
718 muxers
719 outdevs
720 parsers
721 protocols
724 CONFIG_LIST="
725 $COMPONENT_LIST
726 avfilter
727 avfilter_lavf
728 avisynth
729 beos_netserver
730 bzlib
731 ffmpeg
732 ffplay
733 ffserver
735 golomb
737 gprof
738 gray
739 hardcoded_tables
740 ipv6
741 libamr_nb
742 libamr_wb
743 libdc1394
744 libdirac
745 libfaac
746 libfaad
747 libfaadbin
748 libgsm
749 libmp3lame
750 libnut
751 libschroedinger
752 libspeex
753 libtheora
754 libvorbis
755 libx264
756 libxvid
757 mdct
758 memalign_hack
759 mlib
760 mpegaudio_hp
761 network
762 nonfree
763 postproc
764 powerpc_perf
765 small
766 swscale
767 vhook
768 x11grab
769 zlib
772 THREADS_LIST='
773 beosthreads
774 os2threads
775 pthreads
776 w32threads
779 ARCH_LIST='
780 alpha
781 armv4l
782 bfin
783 ia64
784 m68k
785 mips
786 parisc
787 powerpc
788 s390
790 sparc
791 sparc64
793 x86_32
794 x86_64
797 ARCH_EXT_LIST='
798 altivec
799 armv5te
800 armv6
801 armvfp
802 iwmmxt
805 mmx2
806 neon
807 ssse3
811 HAVE_LIST="
812 $ARCH_EXT_LIST
813 $THREADS_LIST
814 altivec_h
815 arpa_inet_h
816 bswap
817 closesocket
818 cmov
819 conio_h
820 dcbzl
821 dev_bktr_ioctl_bt848_h
822 dev_bktr_ioctl_meteor_h
823 dev_ic_bt8xx_h
824 dev_video_meteor_ioctl_meteor_h
825 dev_video_bktr_ioctl_bt848_h
826 dlfcn_h
827 dlopen
828 dos_paths
829 ebp_available
830 ebx_available
831 fast_64bit
832 fast_cmov
833 fast_unaligned
834 fork
835 freetype2
836 gethrtime
837 GetProcessTimes
838 getrusage
839 imlib2
840 inet_aton
841 inline_asm
842 libdc1394_1
843 libdc1394_2
844 llrint
845 lrint
846 lrintf
847 machine_ioctl_bt848_h
848 machine_ioctl_meteor_h
849 malloc_h
850 memalign
851 mkstemp
853 ppc64
854 round
855 roundf
857 sdl_video_size
858 socklen_t
859 soundcard_h
860 poll_h
861 sys_mman_h
862 sys_resource_h
863 sys_select_h
864 sys_soundcard_h
865 sys_videoio_h
866 termios_h
867 threads
868 winsock2_h
869 yasm
872 # options emitted with CONFIG_ prefix but not available on command line
873 CONFIG_EXTRA="
874 fft_mmx
875 oldscaler
878 CMDLINE_SELECT="
879 $ARCH_EXT_LIST
880 $CONFIG_LIST
881 $THREADS_LIST
882 cross_compile
883 debug
884 extra_warnings
885 logging
886 optimizations
887 shared
888 static
889 stripping
892 PATHS_LIST='
893 bindir
894 incdir
895 libdir
896 mandir
897 prefix
898 shlibdir
901 CMDLINE_SET="
902 $PATHS_LIST
903 arch
904 build_suffix
907 cross_prefix
908 extra_version
909 logfile
910 source_path
911 target_os
914 # code dependency declarations
916 # architecture extensions
917 altivec_deps="powerpc"
918 armv5te_deps="armv4l"
919 armv6_deps="armv4l"
920 armvfp_deps="armv4l"
921 iwmmxt_deps="armv4l"
922 mmi_deps="mips"
923 mmx_deps="x86"
924 mmx2_deps="x86 mmx"
925 neon_deps="armv4l"
926 ssse3_deps="x86"
927 vis_deps="sparc"
929 # common features
930 fft_suggest="fft_mmx"
931 fft_mmx_deps="mmx yasm"
932 oldscaler_deps="!swscale"
934 # decoders / encoders
935 aac_decoder_select="fft mdct"
936 ac3_decoder_deps="gpl"
937 ac3_decoder_select="fft mdct"
938 atrac3_decoder_select="fft mdct"
939 cavs_decoder_select="golomb"
940 cook_decoder_select="fft mdct"
941 cscd_decoder_suggest="zlib"
942 dca_decoder_select="fft mdct"
943 dxa_decoder_select="zlib"
944 eac3_decoder_deps="gpl"
945 eac3_decoder_select="fft mdct"
946 ffv1_decoder_select="golomb"
947 flac_decoder_select="golomb"
948 flac_encoder_select="golomb"
949 flashsv_decoder_select="zlib"
950 flashsv_encoder_select="zlib"
951 h264_decoder_select="golomb"
952 imc_decoder_select="fft mdct"
953 jpegls_decoder_select="golomb"
954 jpegls_encoder_select="golomb"
955 loco_decoder_select="golomb"
956 mpeg_xvmc_decoder_deps="xvmc"
957 nellymoser_decoder_select="fft mdct"
958 nellymoser_encoder_select="fft mdct"
959 png_decoder_select="zlib"
960 png_encoder_select="zlib"
961 qdm2_decoder_select="fft mdct"
962 shorten_decoder_select="golomb"
963 sonic_decoder_select="golomb"
964 sonic_encoder_select="golomb"
965 sonic_ls_encoder_select="golomb"
966 svq3_decoder_select="golomb"
967 svq3_decoder_suggest="zlib"
968 tiff_decoder_suggest="zlib"
969 tiff_encoder_suggest="zlib"
970 tscc_decoder_select="zlib"
971 vorbis_decoder_select="fft mdct"
972 vorbis_encoder_select="fft mdct"
973 wmav1_decoder_select="fft mdct"
974 wmav1_encoder_select="fft mdct"
975 wmav2_decoder_select="fft mdct"
976 wmav2_encoder_select="fft mdct"
977 zlib_decoder_select="zlib"
978 zlib_encoder_select="zlib"
979 zmbv_decoder_select="zlib"
980 zmbv_encoder_select="zlib"
982 # external libraries
983 libamr_nb_decoder_deps="libamr_nb"
984 libamr_nb_encoder_deps="libamr_nb"
985 libamr_wb_decoder_deps="libamr_wb"
986 libamr_wb_encoder_deps="libamr_wb"
987 libdirac_decoder_deps="libdirac !libschroedinger"
988 libdirac_encoder_deps="libdirac"
989 libfaac_encoder_deps="libfaac"
990 libfaad_decoder_deps="libfaad"
991 libfaadbin_decoder_extralibs='$ldl'
992 libgsm_decoder_deps="libgsm"
993 libgsm_encoder_deps="libgsm"
994 libgsm_ms_decoder_deps="libgsm"
995 libgsm_ms_encoder_deps="libgsm"
996 libmp3lame_encoder_deps="libmp3lame"
997 libschroedinger_decoder_deps="libschroedinger"
998 libschroedinger_encoder_deps="libschroedinger"
999 libspeex_decoder_deps="libspeex"
1000 libtheora_encoder_deps="libtheora"
1001 libvorbis_encoder_deps="libvorbis"
1002 libx264_encoder_deps="libx264"
1003 libxvid_encoder_deps="libxvid"
1004 mpeg4aac_decoder_deps="libfaad"
1006 # demuxers / muxers
1007 ac3_demuxer_deps="ac3_parser"
1008 audio_beos_demuxer_deps="audio_beos"
1009 audio_beos_demuxer_extralibs="-lmedia -lbe"
1010 audio_beos_muxer_deps="audio_beos"
1011 audio_beos_muxer_extralibs="-lmedia -lbe"
1012 avisynth_demuxer_deps="avisynth"
1013 bktr_demuxer_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
1014 dirac_demuxer_deps="dirac_parser"
1015 dv1394_demuxer_deps="dv1394 dv_demuxer"
1016 libdc1394_demuxer_deps="libdc1394"
1017 libnut_demuxer_deps="libnut"
1018 libnut_muxer_deps="libnut"
1019 matroska_demuxer_suggest="zlib bzlib"
1020 mov_demuxer_suggest="zlib"
1021 mp3_demuxer_deps="mpegaudio_parser"
1022 oss_demuxer_deps_any="soundcard_h sys_soundcard_h"
1023 oss_muxer_deps_any="soundcard_h sys_soundcard_h"
1024 redir_demuxer_deps="network"
1025 rtp_muxer_deps="network rtp_protocol"
1026 rtsp_demuxer_deps="sdp_demuxer"
1027 sdp_demuxer_deps="rtp_protocol mpegts_demuxer"
1028 v4l_demuxer_deps="linux_videodev_h"
1029 v4l2_demuxer_deps_any="linux_videodev2_h sys_videoio_h"
1030 vfwcap_demuxer_deps="capCreateCaptureWindow"
1031 vfwcap_demuxer_extralibs="-lvfw32"
1032 x11_grab_device_demuxer_deps="x11grab XShmCreateImage"
1033 x11_grab_device_demuxer_extralibs="-lX11 -lXext"
1035 # protocols
1036 http_protocol_deps="network"
1037 rtp_protocol_deps="udp_protocol"
1038 tcp_protocol_deps="network"
1039 udp_protocol_deps="network"
1041 # filters
1042 movie_filter_deps="avfilter_lavf"
1044 # programs
1045 ffplay_deps="sdl"
1046 ffserver_deps="ffm_muxer rtp_protocol rtsp_demuxer"
1047 ffserver_extralibs='$ldl'
1048 vhook_extralibs='$ldl'
1051 # default parameters
1053 logfile="config.err"
1055 # installation paths
1056 prefix_default="/usr/local"
1057 bindir_default='${prefix}/bin'
1058 incdir_default='${prefix}/include'
1059 libdir_default='${prefix}/lib'
1060 mandir_default='${prefix}/share/man'
1061 shlibdir_default="$libdir_default"
1063 # toolchain
1064 cc_default="gcc"
1065 yasmexe="yasm"
1066 ar="ar"
1067 nm="nm"
1068 ranlib="ranlib"
1069 strip="strip"
1070 asmalign_pot="unknown"
1071 ln_s="ln -sf"
1072 objformat="elf"
1074 # machine
1075 arch=`uname -m`
1076 cpu="generic"
1078 # OS
1079 target_os=$(tolower $(uname -s))
1081 # configurable options
1082 enable debug
1083 enable ffmpeg
1084 enable ffplay
1085 enable ffserver
1086 enable ipv6
1087 enable mpegaudio_hp
1088 enable network
1089 enable oldscaler
1090 enable optimizations
1091 enable protocols
1092 enable static
1093 enable stripping
1094 vhook="default"
1096 # build settings
1097 add_cflags -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112
1098 SHFLAGS='-shared -Wl,-soname,$$(@F)'
1099 VHOOKSHFLAGS='$(SHFLAGS)'
1100 FFSERVERLDFLAGS=-Wl,-E
1101 LIBPREF="lib"
1102 LIBSUF=".a"
1103 FULLNAME='$(NAME)$(BUILDSUF)'
1104 LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
1105 SLIBPREF="lib"
1106 SLIBSUF=".so"
1107 SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
1108 SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
1109 SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
1110 LIB_INSTALL_EXTRA_CMD='$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
1112 # gcc stupidly only outputs the basename of targets with -MM, but we need the
1113 # full relative path for objects in subdirectories for non-recursive Make.
1114 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,"'
1116 # find source path
1117 source_path="`dirname \"$0\"`"
1118 enable source_path_used
1119 if test -z "$source_path" -o "$source_path" = "." ; then
1120 source_path="`pwd`"
1121 disable source_path_used
1122 else
1123 source_path="`cd \"$source_path\"; pwd`"
1124 echo "$source_path" | grep -q '[[:blank:]]' &&
1125 die "Out of tree builds are impossible with whitespace in source path."
1128 FFMPEG_CONFIGURATION="$@"
1130 find_things(){
1131 thing=$1
1132 pattern=$2
1133 file=$source_path/$3
1134 sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
1137 ENCODER_LIST=$(find_things encoder ENC libavcodec/allcodecs.c)
1138 DECODER_LIST=$(find_things decoder DEC libavcodec/allcodecs.c)
1139 PARSER_LIST=$(find_things parser PARSER libavcodec/allcodecs.c)
1140 BSF_LIST=$(find_things bsf BSF libavcodec/allcodecs.c)
1141 MUXER_LIST=$(find_things muxer _MUX libavformat/allformats.c)
1142 DEMUXER_LIST=$(find_things demuxer DEMUX libavformat/allformats.c)
1143 OUTDEV_LIST=$(find_things muxer _MUX libavdevice/alldevices.c)
1144 INDEV_LIST=$(find_things demuxer DEMUX libavdevice/alldevices.c)
1145 PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
1146 FILTER_LIST=$(find_things filter FILTER libavfilter/allfilters.c)
1148 enable $ARCH_EXT_LIST \
1149 $DECODER_LIST \
1150 $ENCODER_LIST \
1151 $PARSER_LIST \
1152 $BSF_LIST \
1153 $DEMUXER_LIST \
1154 $MUXER_LIST \
1155 $FILTER_LIST \
1156 $PROTOCOL_LIST \
1157 $INDEV_LIST \
1158 $OUTDEV_LIST \
1160 die_unknown(){
1161 echo "Unknown option \"$1\"."
1162 echo "See $0 --help for available options."
1163 exit 1
1166 show_list() {
1167 suffix=_$1
1168 shift
1169 echo $* | sed s/$suffix//g | tr ' ' '\n' | sort
1170 exit 0
1173 for opt do
1174 optval="${opt#*=}"
1175 case "$opt" in
1176 --extra-cflags=*) add_cflags "$optval"
1178 --extra-ldflags=*) add_ldflags "$optval"
1180 --extra-libs=*) add_extralibs "$optval"
1182 --disable-devices) disable $INDEV_LIST $OUTDEV_LIST
1184 --enable-debug=*) debuglevel="$optval"
1186 --enable-*=*|--disable-*=*)
1187 eval `echo "$opt" | sed 's/=/-/;s/--/action=/;s/-/ thing=/;s/-/ name=/'`
1188 case "$thing" in
1189 encoder|decoder|muxer|demuxer|parser|bsf|protocol|filter) $action ${optval}_${thing} ;;
1190 *) die_unknown "$opt" ;;
1191 esac
1193 --enable-?*|--disable-?*)
1194 eval `echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g'`
1195 if is_in $option $COMPONENT_LIST; then
1196 eval $action \$$(toupper ${option%s})_LIST
1197 elif is_in $option $CMDLINE_SELECT; then
1198 $action $option
1199 else
1200 die_unknown $opt
1203 --list-*)
1204 NAME="${opt#--list-}"
1205 is_in $NAME $COMPONENT_LIST || die_unknown $opt
1206 NAME=${NAME%s}
1207 eval show_list $NAME \$$(toupper $NAME)_LIST
1209 --help|-h) show_help
1212 optname="${opt%%=*}"
1213 optname="${optname#--}"
1214 optname=$(echo "$optname" | sed 's/-/_/g')
1215 is_in $optname $CMDLINE_SET || die_unknown $opt
1216 eval $optname='$optval'
1218 esac
1219 done
1221 disabled logging && logfile=/dev/null
1223 echo "# $0 $@" > $logfile
1224 set >> $logfile
1226 cc_default="${cross_prefix}${cc_default}"
1227 yasmexe="${cross_prefix}${yasmexe}"
1228 ar="${cross_prefix}${ar}"
1229 nm="${cross_prefix}${nm}"
1230 ranlib="${cross_prefix}${ranlib}"
1231 strip="${cross_prefix}${strip}"
1233 set_default cc
1235 # set temporary file name
1236 if test ! -z "$TMPDIR" ; then
1237 TMPDIR1="${TMPDIR}"
1238 elif test ! -z "$TEMPDIR" ; then
1239 TMPDIR1="${TEMPDIR}"
1240 else
1241 TMPDIR1="/tmp"
1244 TMPC="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.c"
1245 TMPE="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}${EXESUF}"
1246 TMPH="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.h"
1247 TMPO="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.o"
1248 TMPS="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.S"
1249 TMPSH="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.sh"
1251 check_cflags -std=c99
1253 case "$arch" in
1254 i386|i486|i586|i686|i86pc|BePC)
1255 arch="x86_32"
1256 enable fast_unaligned
1258 x86_64|amd64)
1259 arch="x86_32"
1260 enable cmov
1261 enable fast_cmov
1262 enable fast_unaligned
1263 check_cc <<EOF && enable fast_64bit && arch="x86_64"
1264 int test[sizeof(char*) - 7];
1267 # armv4l is a subset of armv[567]*l
1268 arm|armv[4567]*l)
1269 arch="armv4l"
1271 alpha)
1272 arch="alpha"
1273 enable fast_64bit
1275 "Power Macintosh"|ppc|powerpc)
1276 arch="powerpc"
1277 enable fast_unaligned
1279 ppc64)
1280 arch="powerpc"
1281 enable fast_64bit
1282 enable fast_unaligned
1284 mips|mipsel|IP*)
1285 arch="mips"
1287 sun4u|sparc64)
1288 arch="sparc64"
1289 enable fast_64bit
1291 sparc)
1292 arch="sparc"
1294 sh4)
1295 arch="sh4"
1297 parisc)
1298 arch="parisc"
1300 parisc64)
1301 arch="parisc"
1302 enable fast_64bit
1304 s390|s390x)
1305 arch="s390"
1307 m68k)
1308 arch="m68k"
1310 ia64)
1311 arch="ia64"
1312 enable fast_64bit
1314 bfin)
1315 arch="bfin"
1318 arch="unknown"
1320 esac
1322 enable $arch
1323 enabled_any x86_32 x86_64 && enable x86
1324 enabled sparc64 && enable sparc
1326 # OS specific
1327 case $target_os in
1328 beos|haiku|zeta)
1329 prefix_default="$HOME/config"
1330 # helps building libavcodec
1331 add_cflags "-DPIC -fomit-frame-pointer"
1332 # 3 gcc releases known for BeOS, each with ugly bugs
1333 gcc_version="`$cc -v 2>&1 | grep version | cut -d ' ' -f3-`"
1334 case "$gcc_version" in
1335 2.9-beos-991026*|2.9-beos-000224*) echo "R5/GG gcc"
1336 disable mmx
1338 *20010315*) echo "BeBits gcc"
1339 add_cflags "-fno-expensive-optimizations"
1341 esac
1342 SHFLAGS=-nostart
1343 # enable BeOS things
1344 enable audio_beos
1345 # no need for libm, but the inet stuff
1346 # Check for BONE
1347 # XXX: actually should check for NOT net_server
1348 if echo $BEINCLUDES | grep -q 'headers/be/bone'; then
1349 network_extralibs="-lbind -lsocket"
1350 else
1351 enable beos_netserver
1352 network_extralibs="-lnet"
1353 fi ;;
1354 sunos)
1355 FFSERVERLDFLAGS=""
1356 SHFLAGS='-shared -Wl,-h,$$(@F)'
1357 network_extralibs="-lsocket -lnsl"
1359 netbsd)
1360 oss_demuxer_extralibs="-lossaudio"
1361 oss_muxer_extralibs="-lossaudio"
1363 openbsd)
1364 disable need_memalign
1365 LIBOBJFLAGS='$(PIC)'
1366 SHFLAGS='-shared'
1367 SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF).$(LIBVERSION)'
1368 SLIBNAME_WITH_VERSION='$(SLIBNAME)'
1369 SLIBNAME_WITH_MAJOR='$(SLIBNAME)'
1370 oss_demuxer_extralibs="-lossaudio"
1371 oss_muxer_extralibs="-lossaudio"
1373 freebsd)
1374 disable need_memalign
1376 bsd/os)
1377 osextralibs="-lpoll -lgnugetopt"
1378 strip="strip -d"
1380 darwin)
1381 disable need_memalign
1382 SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR) -Wl,-read_only_relocs,suppress'
1383 VHOOKSHFLAGS='-dynamiclib -Wl,-single_module -flat_namespace -undefined suppress -Wl,-install_name,$(SHLIBDIR)/vhook/$$(@F)'
1384 strip="strip -x"
1385 FFLDFLAGS="-Wl,-dynamic,-search_paths_first"
1386 SLIBSUF=".dylib"
1387 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
1388 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
1389 FFSERVERLDFLAGS=-Wl,-bind_at_load
1390 objformat="macho"
1391 enabled x86_64 && objformat="macho64"
1393 mingw32*)
1394 target_os=mingw32
1395 LIBTARGET=i386
1396 if test $arch = x86_64; then
1397 disable need_memalign
1398 LIBTARGET=x64
1400 shlibdir_default="$bindir_default"
1401 VHOOKSHFLAGS='-shared -L$(BUILD_ROOT)/libavformat -L$(BUILD_ROOT)/libavcodec -L$(BUILD_ROOT)/libavutil'
1402 VHOOKLIBS='-lavformat$(BUILDSUF) -lavcodec$(BUILDSUF) -lavutil$(BUILDSUF) $(EXTRALIBS)'
1403 if enabled swscale; then
1404 VHOOKSHFLAGS="$VHOOKSHFLAGS -L\$(BUILD_ROOT)/libswscale"
1405 VHOOKLIBS="$VHOOKLIBS -lswscale\$(BUILDSUF)"
1407 disable ffserver
1408 SLIBPREF=""
1409 SLIBSUF=".dll"
1410 EXESUF=".exe"
1411 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1412 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1413 SLIB_EXTRA_CMD='-lib /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)'
1414 SLIB_INSTALL_EXTRA_CMD='-install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"; \
1415 install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)"'
1416 SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"'
1417 SHFLAGS='-shared -Wl,--output-def,$$(@:$(SLIBSUF)=.def) -Wl,--enable-runtime-pseudo-reloc -Wl,--enable-auto-image-base'
1418 objformat="win32"
1419 enable dos_paths
1420 check_cpp_condition _mingw.h "(__MINGW32_MAJOR_VERSION > 3) || (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
1421 die "ERROR: MinGW runtime version must be >= 3.15."
1422 enabled_any avisynth vfwcap_demuxer &&
1423 { check_cpp_condition w32api.h "(__W32API_MAJOR_VERSION > 3) || (__W32API_MAJOR_VERSION == 3 && __W32API_MINOR_VERSION >= 12)" ||
1424 die "ERROR: avisynth and vfwcap_demuxer require w32api version 3.12 or later."; }
1426 cygwin*)
1427 target_os=cygwin
1428 shlibdir_default="$bindir_default"
1429 VHOOKSHFLAGS='-shared -L$(BUILD_ROOT)/libavformat -L$(BUILD_ROOT)/libavcodec -L$(BUILD_ROOT)/libavutil'
1430 VHOOKLIBS='-lavformat$(BUILDSUF) -lavcodec$(BUILDSUF) -lavutil$(BUILDSUF) $(EXTRALIBS)'
1431 if enabled swscale; then
1432 VHOOKSHFLAGS="$VHOOKSHFLAGS -L\$(BUILD_ROOT)/libswscale"
1433 VHOOKLIBS="$VHOOKLIBS -lswscale\$(BUILDSUF)"
1435 EXESUF=".exe"
1436 SLIBPREF="cyg"
1437 SLIBSUF=".dll"
1438 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1439 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1440 SHFLAGS='-shared -Wl,--enable-auto-image-base'
1441 objformat="win32"
1442 enable dos_paths
1444 *-dos|freedos|opendos)
1445 disable ffplay ffserver vhook
1446 disable $INDEV_LIST $OUTDEV_LIST
1447 network_extralibs="-lsocket"
1448 EXESUF=".exe"
1449 objformat="win32"
1450 enable dos_paths
1452 linux)
1453 enable dv1394
1455 irix*)
1456 target_os=irix
1457 ranlib="echo ignoring ranlib"
1459 os/2*)
1460 strip="lxlite"
1461 ln_s="cp -f"
1462 EXESUF=".exe"
1463 FFLDFLAGS="-Zomf -Zbin-files -Zargs-wild -Zmap"
1464 SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
1465 FFSERVERLDFLAGS=""
1466 LIBSUF="_s.a"
1467 SLIBPREF=""
1468 SLIBSUF=".dll"
1469 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
1470 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
1471 SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
1472 echo PROTMODE >> $(SUBDIR)$(NAME).def; \
1473 echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
1474 echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
1475 echo EXPORTS >> $(SUBDIR)$(NAME).def; \
1476 emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
1477 SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
1478 emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
1479 SLIB_INSTALL_EXTRA_CMD='install -m 644 $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib "$(LIBDIR)"'
1480 SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.a "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.lib'
1481 disable vhook
1482 enable dos_paths
1484 interix)
1485 disable vhook
1489 target_os="${target_os}-UNKNOWN"
1491 esac
1493 set_default $PATHS_LIST
1495 add_extralibs $osextralibs
1497 # Combine FFLDFLAGS and the LDFLAGS environment variable.
1498 LDFLAGS="$FFLDFLAGS $LDFLAGS"
1500 test -n "$cross_prefix" && enable cross_compile
1502 # we need to build at least one lib type
1503 if ! enabled_any static shared; then
1504 cat <<EOF
1505 At least one library type must be built.
1506 Specify --enable-static to build the static libraries or --enable-shared to
1507 build the shared libraries as well. To only build the shared libraries specify
1508 --disable-static in addition to --enable-shared.
1510 exit 1;
1513 disabled static && LIBNAME=""
1515 if enabled_any libfaad libfaadbin ; then
1516 if check_header faad.h; then
1517 check_cc <<EOF
1518 #include <faad.h>
1519 #ifndef FAAD2_VERSION
1520 ok faad1
1521 #endif
1522 int main(void) { return 0; }
1524 test $? = 0 && enable libfaad2
1525 else
1526 die "FAAD test failed."
1531 if ! enabled gpl; then
1532 die_gpl_disabled(){
1533 name=$1
1534 shift
1535 enabled_any $@ && die "$name is under GPL and --enable-gpl is not specified."
1537 die_gpl_disabled "The Postprocessing code" postproc
1538 die_gpl_disabled "libx264" libx264
1539 die_gpl_disabled "libxvidcore" libxvid
1540 die_gpl_disabled "FAAD2" libfaad2
1541 die_gpl_disabled "The X11 grabber" x11grab
1542 die_gpl_disabled "The software scaler" swscale
1545 if ! enabled nonfree && enabled_any libamr_nb libamr_wb; then
1546 die "libamr is nonfree and --enable-nonfree is not specified."
1549 check_deps $ARCH_EXT_LIST
1551 test -z "$need_memalign" && need_memalign="$mmx"
1553 #Darwin CC versions
1554 if test $target_os = darwin; then
1555 if $cc -v 2>&1 | grep -q xlc; then
1556 add_cflags "-qpdf2 -qlanglvl=extc99 -qmaxmem=-1 -qarch=auto -qtune=auto"
1557 else
1558 add_cflags "-pipe"
1559 check_cflags "-force_cpusubtype_ALL"
1560 check_cflags "-Wno-sign-compare"
1561 enabled shared || check_cflags -mdynamic-no-pic
1565 disabled optimizations || check_cflags -fomit-frame-pointer
1567 # Add processor-specific flags
1568 if test $cpu != "generic"; then
1569 warn_altivec(){
1570 $1 altivec && echo "WARNING: Tuning for $2 but AltiVec $1.";
1572 case $cpu in
1573 601|ppc601|PowerPC601)
1574 add_cflags "-mcpu=601"
1575 warn_altivec enabled PPC601
1577 603*|ppc603*|PowerPC603*)
1578 add_cflags "-mcpu=603"
1579 warn_altivec enabled PPC603
1581 604*|ppc604*|PowerPC604*)
1582 add_cflags "-mcpu=604"
1583 warn_altivec enabled PPC604
1585 G3|g3|75*|ppc75*|PowerPC75*)
1586 add_cflags "-mcpu=750 -mpowerpc-gfxopt"
1587 warn_altivec enabled PPC75x
1589 G4|g4|745*|ppc745*|PowerPC745*)
1590 add_cflags "-mcpu=7450 -mpowerpc-gfxopt"
1591 warn_altivec disabled PPC745x
1593 74*|ppc74*|PowerPC74*)
1594 add_cflags "-mcpu=7400 -mpowerpc-gfxopt"
1595 warn_altivec disabled PPC74xx
1597 G5|g5|970|ppc970|PowerPC970|power4*|Power4*)
1598 add_cflags "-mcpu=970 -mpowerpc-gfxopt -mpowerpc64"
1599 warn_altivec disabled PPC970
1600 enable ppc64
1602 Cell|CELL|cell)
1603 add_cflags "-mcpu=cell"
1604 warn_altivec disabled Cell
1605 enable ppc64
1607 # targets that do NOT support conditional mov (cmov)
1608 i[345]86|pentium|pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
1609 add_cflags "-march=$cpu"
1610 disable cmov
1612 # targets that do support conditional mov (cmov)
1613 i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2)
1614 add_cflags "-march=$cpu"
1615 enable cmov
1616 enable fast_cmov
1618 # targets that do support conditional mov but on which it's slow
1619 pentium4|pentium4m|prescott|nocona)
1620 add_cflags "-march=$cpu"
1621 enable cmov
1622 disable fast_cmov
1624 sparc64)
1625 add_cflags "-mcpu=v9"
1627 arm11*|cortex*)
1628 add_cflags "-mcpu=$cpu"
1629 enable fast_unaligned
1631 armv*)
1632 add_cflags "-march=$cpu"
1634 arm*)
1635 add_cflags "-mcpu=$cpu"
1638 echo "WARNING: Unknown CPU \"$cpu\", ignored."
1640 esac
1643 # make sure we can execute files in $TMPDIR
1644 cat > $TMPSH 2>> $logfile <<EOF
1645 #! /bin/sh
1647 chmod +x $TMPSH >> $logfile 2>&1
1648 if ! $TMPSH >> $logfile 2>&1; then
1649 cat <<EOF
1650 Unable to create and execute files in $TMPDIR1. Set the TMPDIR environment
1651 variable to another directory and make sure that $TMPDIR1 is not mounted
1652 noexec.
1654 die "Sanity test failed."
1656 rm $TMPSH
1658 # compiler sanity check
1659 check_exec <<EOF
1660 int main(void){ return 0; }
1662 if test "$?" != 0; then
1663 echo "$cc is unable to create an executable file."
1664 if test -z "$cross_prefix" && ! enabled cross_compile ; then
1665 echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
1666 echo "Only do this if you know what cross compiling means."
1668 die "C compiler test failed."
1671 check_cc <<EOF || die "Symbol mangling check failed."
1672 int ff_extern;
1674 sym=$($nm -P -g $TMPO | grep ff_extern)
1675 extern_prefix=${sym%%ff_extern*}
1677 check_asm inline_asm '""'
1679 if enabled x86; then
1680 # check whether EBP is available on x86
1681 # As 'i' is stored on the stack, this program will crash
1682 # if the base pointer is used to access it because the
1683 # base pointer is cleared in the inline assembly code.
1684 check_exec_crash <<EOF && enable ebp_available
1685 volatile int i=0;
1686 __asm__ volatile (
1687 "xorl %%ebp, %%ebp"
1688 ::: "%ebp");
1689 return i;
1692 # check wether EBX is available on x86
1693 check_asm ebx_available '"":::"%ebx"'
1695 # check whether binutils is new enough to compile SSSE3/MMX2
1696 enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
1697 enabled mmx2 && check_asm mmx2 '"movss %xmm0, %xmm0"'
1699 check_asm bswap '"bswap %%eax" ::: "%eax"'
1701 YASMFLAGS="-f $objformat -DARCH_$(toupper $arch)"
1702 enabled x86_64 && append YASMFLAGS "-m amd64"
1703 enabled_all x86_64 shared && append YASMFLAGS "-DPIC"
1704 case "$objformat" in
1705 elf) enabled debug && append YASMFLAGS "-g dwarf2" ;;
1706 macho64) append YASMFLAGS "-DPIC -DPREFIX" ;;
1707 *) append YASMFLAGS "-DPREFIX" ;;
1708 esac
1709 check_yasm "pabsw xmm0, xmm0" && enable yasm
1712 # check for assembler specific support
1714 if test $arch = "powerpc"; then
1715 check_asm dcbzl '"dcbzl 0, 1"'
1718 # check for SIMD availability
1720 # AltiVec flags: The FSF version of GCC differs from the Apple version
1721 if enabled altivec; then
1722 check_cflags -maltivec -mabi=altivec &&
1723 { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
1724 check_cflags -faltivec
1726 # check if our compiler supports Motorola AltiVec C API
1727 check_cc <<EOF || disable altivec
1728 $inc_altivec_h
1729 int main(void) {
1730 vector signed int v1, v2, v3;
1731 v1 = vec_add(v2,v3);
1732 return 0;
1736 # check if our compiler supports braces for vector declarations
1737 check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
1738 $inc_altivec_h
1739 int main (void) { (vector int) {1}; return 0; }
1743 # We have to check if pld is a nop and disable it.
1744 enabled armv4l && check_asm pld '"pld [r0]"'
1745 enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
1746 enabled armv6 && check_asm armv6 '"sadd16 r0, r0, r0"'
1747 enabled armvfp && check_asm armvfp '"fadds s0, s0, s0"'
1748 enabled iwmmxt && check_asm iwmmxt '"wunpckelub wr6, wr4"'
1749 enabled mmi && check_asm mmi '"lq $2, 0($2)"'
1750 enabled neon && check_asm neon '"vadd.i16 q0, q0, q0"'
1751 enabled vis && check_asm vis '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc
1753 enabled vis && add_cflags "-mcpu=ultrasparc -mtune=ultrasparc"
1755 # ---
1756 # big/little-endian test
1757 check_cc <<EOF || die "endian test failed"
1758 unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
1760 od -A n -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
1762 # ---
1763 # check availability of some header files
1765 if check_func dlopen; then
1766 ldl=
1767 elif check_func dlopen -ldl; then
1768 ldl=-ldl
1771 check_func fork
1772 check_func gethrtime
1773 check_func getrusage
1774 check_func inet_aton $network_extralibs
1775 check_func memalign
1776 check_func mkstemp
1777 check_func_headers windows.h GetProcessTimes
1779 check_header conio.h
1780 check_header dlfcn.h
1781 check_header malloc.h
1782 check_header poll.h
1783 check_header sys/mman.h
1784 check_header sys/resource.h
1785 check_header sys/select.h
1786 check_header termios.h
1788 if ! enabled_any memalign memalign_hack && enabled need_memalign ; then
1789 die "Error, no memalign() but SSE enabled, disable it or use --enable-memalign-hack."
1792 disabled zlib || check_lib zlib.h zlibVersion -lz || disable zlib
1793 disabled bzlib || check_lib bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
1795 # check for some common methods of building with pthread support
1796 # do this before the optional library checks as some of them require pthreads
1797 if enabled pthreads; then
1798 if check_func pthread_create; then
1800 elif check_func pthread_create -pthread; then
1801 add_cflags -pthread
1802 add_extralibs -pthread
1803 elif check_func pthread_create -pthreads; then
1804 add_cflags -pthreads
1805 add_extralibs -pthreads
1806 elif check_func pthread_create -lpthreadGC2; then
1807 add_extralibs -lpthreadGC2
1808 elif ! check_lib pthread.h pthread_create -lpthread; then
1809 die "ERROR: can't find pthreads library"
1813 for thread in $THREADS_LIST; do
1814 if enabled $thread; then
1815 test -n "$thread_type" &&
1816 die "ERROR: Only one thread type must be selected." ||
1817 thread_type="$thread"
1819 done
1821 check_lib math.h sin -lm
1823 # test for C99 functions in math.h
1824 for func in llrint lrint lrintf round roundf; do
1825 check_exec <<EOF && enable $func || disable $func
1826 #include <math.h>
1827 int main(void) { return ($func(3.999f) > 0)?0:1; }
1829 done
1831 # these are off by default, so fail if requested and not available
1832 enabled avisynth && require2 vfw32 "windows.h vfw.h" AVIFileInit -lvfw32
1833 enabled libamr_nb && require libamrnb amrnb/interf_dec.h Speech_Decode_Frame_init -lamrnb -lm
1834 enabled libamr_wb && require libamrwb amrwb/dec_if.h D_IF_init -lamrwb -lm
1835 enabled libdirac && add_cflags $(pkg-config --cflags dirac) &&
1836 require libdirac libdirac_decoder/dirac_parser.h dirac_decoder_init -ldirac_decoder &&
1837 require libdirac libdirac_encoder/dirac_encoder.h dirac_encoder_init -ldirac_encoder
1838 enabled libfaac && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
1839 enabled libfaad && require2 libfaad faad.h faacDecOpen -lfaad
1840 enabled libgsm && require libgsm gsm.h gsm_create -lgsm
1841 enabled libmp3lame && require libmp3lame lame/lame.h lame_init -lmp3lame -lm
1842 enabled libnut && require libnut libnut.h nut_demuxer_init -lnut
1843 enabled libschroedinger && add_cflags $(pkg-config --cflags schroedinger-1.0) &&
1844 require libschroedinger schroedinger/schro.h schro_init $(pkg-config --libs schroedinger-1.0)
1845 enabled libspeex && require libspeex speex/speex.h speex_decoder_init -lspeex
1846 enabled libtheora && require libtheora theora/theora.h theora_info_init -ltheora -logg
1847 enabled libvorbis && require libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
1848 enabled libx264 && require libx264 x264.h x264_encoder_open -lx264 -lm &&
1849 { check_cpp_condition x264.h "X264_BUILD >= 65" ||
1850 die "ERROR: libx264 version must be >= 0.65."; }
1851 enabled libxvid && require libxvid xvid.h xvid_global -lxvidcore
1852 enabled mlib && require mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
1854 # libdc1394 check
1855 if enabled libdc1394; then
1856 { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
1857 enable libdc1394_2; } ||
1858 { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
1859 enable libdc1394_1; } ||
1860 die "ERROR: No version of libdc1394 found "
1864 _restrict=
1865 for restrict_keyword in restrict __restrict__ __restrict; do
1866 check_cc <<EOF && _restrict=$restrict_keyword && break
1867 void foo(char * $restrict_keyword p);
1869 done
1871 test "$vhook" = "default" && vhook="$dlopen"
1873 if test "$target_os" = cygwin -o "$target_os" = mingw32 && enabled_all static vhook ; then
1874 disable vhook
1875 echo
1876 echo "At the moment vhooks don't work on Cygwin or MinGW static builds."
1877 echo "Patches welcome."
1878 echo
1881 if enabled vhook; then
1882 check_ldflags -rdynamic
1883 check_ldflags -export-dynamic
1886 check_foo_config imlib2 imlib2 Imlib2.h imlib_load_font
1887 check_foo_config freetype2 freetype ft2build.h FT_Init_FreeType
1889 ##########################################
1890 # SDL check
1892 disable sdl_too_old
1893 disable sdl
1894 SDL_CONFIG="${cross_prefix}sdl-config"
1895 if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
1896 sdl_cflags=`"${SDL_CONFIG}" --cflags`
1897 temp_cflags $sdl_cflags
1898 temp_extralibs `"${SDL_CONFIG}" --libs`
1899 if check_lib2 SDL.h SDL_Init; then
1900 _sdlversion=`"${SDL_CONFIG}" --version | sed 's/[^0-9]//g'`
1901 if test "$_sdlversion" -lt 121 ; then
1902 enable sdl_too_old
1903 else
1904 enable sdl
1905 check_cc $sdl_cflags <<EOF && enable sdl_video_size
1906 #include <SDL.h>
1907 int main(int argc, char **argv){
1908 const SDL_VideoInfo *vi = SDL_GetVideoInfo();
1909 int w = vi->current_w;
1910 return 0;
1915 restore_flags
1918 texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
1920 ##########################################
1921 # Network check
1923 if enabled network; then
1924 check_type sys/socket.h socklen_t
1925 # Prefer arpa/inet.h over winsock2
1926 if check_header arpa/inet.h ; then
1927 check_func closesocket
1928 elif check_header winsock2.h ; then
1929 network_extralibs="-lws2_32"
1930 check_type ws2tcpip.h socklen_t
1931 check_func_headers winsock2.h closesocket
1935 ##########################################
1936 # IPv6 check
1938 enabled network && enabled ipv6 && check_ld <<EOF && enable ipv6 || disable ipv6
1939 #include <sys/types.h>
1940 #include <sys/socket.h>
1941 #include <netinet/in.h>
1942 #include <netdb.h>
1943 int main(void) {
1944 struct sockaddr_storage saddr;
1945 struct ipv6_mreq mreq6;
1946 getaddrinfo(0,0,0,0);
1947 getnameinfo(0,0,0,0,0,0,0);
1948 IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
1952 check_header linux/videodev.h
1953 check_header linux/videodev2.h
1954 check_header sys/videoio.h
1956 check_func_headers "windows.h vfw.h" capCreateCaptureWindow -lvfw32
1958 # check for ioctl_meteor.h, ioctl_bt848.h and alternatives
1959 { check_header dev/bktr/ioctl_meteor.h &&
1960 check_header dev/bktr/ioctl_bt848.h; } ||
1961 { check_header machine/ioctl_meteor.h &&
1962 check_header machine/ioctl_bt848.h; } ||
1963 { check_header dev/video/meteor/ioctl_meteor.h &&
1964 check_header dev/video/bktr/ioctl_bt848.h; } ||
1965 check_header dev/ic/bt8xx.h
1967 check_header sys/soundcard.h
1968 check_header soundcard.h
1970 # deal with the X11 frame grabber
1971 enabled x11grab &&
1972 check_header X11/Xlib.h &&
1973 check_header X11/extensions/XShm.h &&
1974 check_func XOpenDisplay -lX11 &&
1975 check_func XShmCreateImage -lX11 -lXext
1977 enabled debug && add_cflags -g"$debuglevel"
1979 # add some useful compiler flags if supported
1980 check_cflags -Wdeclaration-after-statement
1981 check_cflags -Wall
1982 check_cflags -Wno-switch
1983 check_cflags -Wdisabled-optimization
1984 check_cflags -Wpointer-arith
1985 check_cflags -Wredundant-decls
1986 check_cflags -Wno-pointer-sign
1987 check_cflags -Wcast-qual
1988 check_cflags -Wwrite-strings
1989 check_cflags -Wtype-limits
1990 enabled extra_warnings && check_cflags -Winline
1992 # add some linker flags
1993 check_ldflags -Wl,--warn-common
1994 check_ldflags -Wl,--as-needed
1995 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'
1996 check_ldflags -Wl,-Bsymbolic
1998 if enabled small; then
1999 check_cflags -Os # not all compilers support -Os
2000 optimizations="small"
2001 elif enabled optimizations; then
2002 if $cc -v 2>&1 | grep -q xlc; then
2003 add_cflags "-O5"
2004 add_ldflags "-O5"
2005 else
2006 add_cflags "-O3"
2009 check_cflags -fno-math-errno
2010 check_cflags -fno-signed-zeros
2012 # add some flags for Intel C Compiler
2013 if $cc --version 2> /dev/null | grep -q Intel; then
2014 # Just warnings, no remarks
2015 check_cflags -w1
2016 # -wd: Disable following warnings
2017 # 144, 167, 556: -Wno-pointer-sign
2018 # 10006: ignoring unknown option -fno-signed-zeros
2019 # 10156: ignoring option '-W'; no argument required
2020 check_cflags -wd144,167,556,10006,10156
2021 # 11030: Warning unknown option --as-needed
2022 # 10156: ignoring option '-export'; no argument required
2023 check_ldflags -wd10156,11030
2024 # Allow to compile with optimizations
2025 check_ldflags -march=$cpu
2028 # PIC flags for shared library objects where they are needed
2029 if enabled shared; then
2030 # LIBOBJFLAGS may have already been set in the OS configuration
2031 if test -z "$LIBOBJFLAGS" ; then
2032 case "$arch" in
2033 x86_64|ia64|alpha|sparc*|power*|parisc*|mips*) LIBOBJFLAGS='$(PIC)' ;;
2034 esac
2038 if enabled gprof; then
2039 add_cflags "-p"
2040 add_ldflags "-p"
2043 VHOOKCFLAGS="-fPIC"
2045 # Find out if the .align argument is a power of two or not.
2046 if test $asmalign_pot = "unknown"; then
2047 disable asmalign_pot
2048 echo '__asm__ (".align 3");' | check_cc && enable asmalign_pot
2051 enabled_any $DECODER_LIST && enable decoders
2052 enabled_any $ENCODER_LIST && enable encoders
2053 enabled_any $BSF_LIST && enable bsfs
2054 enabled_any $DEMUXER_LIST && enable demuxers
2055 enabled_any $MUXER_LIST && enable muxers
2056 enabled_any $FILTER_LIST && enable filters
2057 enabled_any $INDEV_LIST && enable demuxers
2058 enabled_any $OUTDEV_LIST && enable muxers
2059 enabled_any $PROTOCOL_LIST && enable protocols
2061 enabled_any $THREADS_LIST && enable threads
2063 check_deps $CONFIG_LIST \
2064 $CONFIG_EXTRA \
2065 $HAVE_LIST \
2066 $DECODER_LIST \
2067 $ENCODER_LIST \
2068 $PARSER_LIST \
2069 $BSF_LIST \
2070 $DEMUXER_LIST \
2071 $MUXER_LIST \
2072 $FILTER_LIST \
2073 $INDEV_LIST \
2074 $OUTDEV_LIST \
2075 $PROTOCOL_LIST \
2077 enabled libdc1394 && append pkg_requires "libraw1394"
2078 enabled libdirac && append pkg_requires "dirac"
2079 enabled libtheora && append pkg_requires "theora"
2080 enabled libvorbis && append pkg_requires "vorbisenc"
2082 echo "install prefix $prefix"
2083 echo "source path $source_path"
2084 echo "C compiler $cc"
2085 echo ".align is power-of-two $asmalign_pot"
2086 echo "ARCH $arch ($cpu)"
2087 if test "$build_suffix" != ""; then
2088 echo "build suffix $build_suffix"
2090 if test "$extra_version" != ""; then
2091 echo "version string suffix $extra_version"
2093 echo "big-endian ${bigendian-no}"
2094 if test $arch = "x86_32" -o $arch = "x86_64"; then
2095 echo "yasm ${yasm-no}"
2096 echo "MMX enabled ${mmx-no}"
2097 echo "CMOV enabled ${cmov-no}"
2098 echo "CMOV is fast ${fast_cmov-no}"
2099 echo "EBX available ${ebx_available-no}"
2100 echo "EBP available ${ebp_available-no}"
2102 if test $arch = "armv4l"; then
2103 echo "ARMv5TE enabled ${armv5te-no}"
2104 echo "ARMv6 enabled ${armv6-no}"
2105 echo "ARM VFP enabled ${armvfp-no}"
2106 echo "IWMMXT enabled ${iwmmxt-no}"
2107 echo "NEON enabled ${neon-no}"
2109 if test $arch = "mips"; then
2110 echo "MMI enabled ${mmi-no}"
2112 if test $arch = "powerpc"; then
2113 echo "AltiVec enabled ${altivec-no}"
2114 echo "dcbzl available ${dcbzl-no}"
2116 echo "gprof enabled ${gprof-no}"
2117 echo "debug symbols ${debug-no}"
2118 echo "strip symbols ${stripping-no}"
2119 echo "optimizations ${optimizations-no}"
2120 echo "static ${static-no}"
2121 echo "shared ${shared-no}"
2122 echo "postprocessing support ${postproc-no}"
2123 echo "software scaler enabled ${swscale-no}"
2124 echo "new filter support ${avfilter-no}"
2125 echo "filters using lavformat ${avfilter_lavf-no}"
2126 echo "video hooking ${vhook-no}"
2127 if enabled vhook; then
2128 echo "Imlib2 support ${imlib2-no}"
2129 echo "FreeType support ${freetype2-no}"
2131 echo "network support ${network-no}"
2132 if enabled network; then
2133 echo "IPv6 support ${ipv6-no}"
2135 echo "threading support ${thread_type-no}"
2136 echo "SDL support ${sdl-no}"
2137 if enabled sdl_too_old; then
2138 echo "-> Your SDL version is too old - please upgrade to have FFplay/SDL support."
2140 echo "Sun medialib support ${mlib-no}"
2141 echo "AVISynth enabled ${avisynth-no}"
2142 echo "libamr-nb support ${libamr_nb-no}"
2143 echo "libamr-wb support ${libamr_wb-no}"
2144 echo "libdc1394 support ${libdc1394-no}"
2145 echo "libdirac enabled ${libdirac-no}"
2146 echo "libfaac enabled ${libfaac-no}"
2147 echo "libfaad enabled ${libfaad-no}"
2148 echo "libfaad dlopened ${libfaadbin-no}"
2149 echo "libgsm enabled ${libgsm-no}"
2150 echo "libmp3lame enabled ${libmp3lame-no}"
2151 echo "libnut enabled ${libnut-no}"
2152 echo "libschroedinger enabled ${libschroedinger-no}"
2153 echo "libspeex enabled ${libspeex-no}"
2154 echo "libtheora enabled ${libtheora-no}"
2155 echo "libvorbis enabled ${libvorbis-no}"
2156 echo "libx264 enabled ${libx264-no}"
2157 echo "libxvid enabled ${libxvid-no}"
2158 echo "zlib enabled ${zlib-no}"
2159 echo "bzlib enabled ${bzlib-no}"
2160 echo
2162 for type in decoder encoder parser demuxer muxer protocol filter bsf indev outdev; do
2163 echo "Enabled ${type}s:"
2164 eval list=\$$(toupper $type)_LIST
2165 for part in $list; do
2166 enabled $part && echo ${part%_*}
2167 done | sort | pr -3 -t
2168 echo
2169 done
2171 license="LGPL"
2172 if enabled nonfree; then
2173 license="unredistributable"
2174 elif enabled gpl; then
2175 license="GPL"
2178 echo "License: $license"
2180 echo "Creating config.mak and config.h..."
2182 echo "# Automatically generated by configure - do not modify!" > config.mak
2183 echo "/* Automatically generated by configure - do not modify! */" > $TMPH
2184 echo "#ifndef FFMPEG_CONFIG_H" >> $TMPH
2185 echo "#define FFMPEG_CONFIG_H" >> $TMPH
2186 echo "#define FFMPEG_CONFIGURATION \"$FFMPEG_CONFIGURATION\"" >> $TMPH
2188 echo "FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION" >> config.mak
2189 echo "prefix=$prefix" >> config.mak
2190 echo "LIBDIR=\$(DESTDIR)$libdir" >> config.mak
2191 echo "SHLIBDIR=\$(DESTDIR)$shlibdir" >> config.mak
2192 echo "INCDIR=\$(DESTDIR)$incdir" >> config.mak
2193 echo "BINDIR=\$(DESTDIR)$bindir" >> config.mak
2194 echo "MANDIR=\$(DESTDIR)$mandir" >> config.mak
2195 echo "CC=$cc" >> config.mak
2196 echo "YASM=$yasmexe" >> config.mak
2197 echo "AR=$ar" >> config.mak
2198 echo "RANLIB=$ranlib" >> config.mak
2199 echo "LN_S=$ln_s" >> config.mak
2200 enabled stripping &&
2201 echo "STRIP=$strip" >> config.mak ||
2202 echo "STRIP=echo ignoring strip" >> config.mak
2204 echo "OPTFLAGS=$CFLAGS" >> config.mak
2205 echo "VHOOKCFLAGS=$VHOOKCFLAGS" >> config.mak
2206 echo "LDFLAGS=$LDFLAGS" >> config.mak
2207 echo "FFSERVERLDFLAGS=$FFSERVERLDFLAGS" >> config.mak
2208 echo "SHFLAGS=$SHFLAGS" >> config.mak
2209 echo "YASMFLAGS=$YASMFLAGS" >> config.mak
2210 echo "VHOOKSHFLAGS=$VHOOKSHFLAGS" >> config.mak
2211 echo "VHOOKLIBS=$VHOOKLIBS" >> config.mak
2212 echo "LIBOBJFLAGS=$LIBOBJFLAGS" >> config.mak
2213 echo "BUILD_STATIC=$static" >> config.mak
2214 echo "BUILDSUF=$build_suffix" >> config.mak
2215 echo "FULLNAME=$FULLNAME" >> config.mak
2216 echo "LIBPREF=$LIBPREF" >> config.mak
2217 echo "LIBSUF=$LIBSUF" >> config.mak
2218 echo "LIBNAME=$LIBNAME" >> config.mak
2219 echo "SLIBPREF=$SLIBPREF" >> config.mak
2220 echo "SLIBSUF=$SLIBSUF" >> config.mak
2221 echo "EXESUF=$EXESUF" >> config.mak
2222 echo "EXTRA_VERSION=$extra_version" >> config.mak
2223 echo "DEPEND_CMD=$DEPEND_CMD" >> config.mak
2225 if enabled bigendian; then
2226 echo "WORDS_BIGENDIAN=yes" >> config.mak
2227 echo "#define WORDS_BIGENDIAN 1" >> $TMPH
2230 if enabled sdl; then
2231 echo "SDL_LIBS=`"${SDL_CONFIG}" --libs`" >> config.mak
2232 echo "SDL_CFLAGS=`"${SDL_CONFIG}" --cflags`" >> config.mak
2234 if enabled texi2html; then
2235 echo "BUILD_DOC=yes" >> config.mak
2238 get_version(){
2239 name=$1
2240 file=$source_path/$2
2241 eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
2242 eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
2243 lcname=$(tolower $name)
2244 eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
2245 eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
2248 get_version LIBSWSCALE libswscale/swscale.h
2249 get_version LIBPOSTPROC libpostproc/postprocess.h
2250 get_version LIBAVCODEC libavcodec/avcodec.h
2251 get_version LIBAVDEVICE libavdevice/avdevice.h
2252 get_version LIBAVFORMAT libavformat/avformat.h
2253 get_version LIBAVUTIL libavutil/avutil.h
2254 get_version LIBAVFILTER libavfilter/avfilter.h
2256 if enabled shared; then
2257 echo "BUILD_SHARED=yes" >> config.mak
2258 echo "PIC=-fPIC -DPIC" >> config.mak
2259 echo "LIBTARGET=${LIBTARGET}" >> config.mak
2260 echo "SLIBNAME=${SLIBNAME}" >> config.mak
2261 echo "SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}" >> config.mak
2262 echo "SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}" >> config.mak
2263 echo "SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}" >> config.mak
2264 echo "SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}" >> config.mak
2265 echo "SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}" >> config.mak
2266 echo "SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}" >> config.mak
2268 echo "LIB_INSTALL_EXTRA_CMD=${LIB_INSTALL_EXTRA_CMD}" >> config.mak
2269 echo "EXTRALIBS=$extralibs" >> config.mak
2271 print_config ARCH_ $TMPH config.mak $ARCH_LIST
2272 print_config HAVE_ $TMPH config.mak $HAVE_LIST
2273 print_config CONFIG_ $TMPH config.mak $CONFIG_LIST \
2274 $CONFIG_EXTRA \
2275 $DECODER_LIST \
2276 $ENCODER_LIST \
2277 $PARSER_LIST \
2278 $BSF_LIST \
2279 $DEMUXER_LIST \
2280 $MUXER_LIST \
2281 $FILTER_LIST \
2282 $PROTOCOL_LIST \
2283 $INDEV_LIST \
2284 $OUTDEV_LIST \
2286 echo "#define restrict $_restrict" >> $TMPH
2288 if enabled small; then
2289 echo "#define av_always_inline" >> $TMPH
2292 echo "SRC_PATH=\"$source_path\"" >> config.mak
2293 echo "SRC_PATH_BARE=$source_path" >> config.mak
2294 echo "BUILD_ROOT=\"$PWD\"" >> config.mak
2296 # Apparently it's not possible to portably echo a backslash.
2297 enabled asmalign_pot &&
2298 printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH ||
2299 printf '#define ASMALIGN(ZEROBITS) ".align 1 << " #ZEROBITS "\\n\\t"\n' >> $TMPH
2301 echo "#define EXTERN_PREFIX \"${extern_prefix}\"" >> $TMPH
2303 echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
2305 # Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
2306 cmp -s $TMPH config.h &&
2307 echo "config.h is unchanged" ||
2308 mv -f $TMPH config.h
2310 rm -f $TMPC $TMPE $TMPH $TMPO $TMPS $TMPSH
2312 # build tree in object directory if source path is different from current one
2313 if enabled source_path_used; then
2314 DIRS="\
2315 doc \
2316 libavcodec \
2317 libavcodec/alpha \
2318 libavcodec/armv4l \
2319 libavcodec/bfin \
2320 libavcodec/i386 \
2321 libavcodec/mlib \
2322 libavcodec/ppc \
2323 libavcodec/sh4 \
2324 libavcodec/sparc \
2325 libavdevice \
2326 libavfilter \
2327 libavformat \
2328 libavutil \
2329 libpostproc \
2330 libswscale \
2331 tests \
2332 tools \
2333 vhook \
2335 FILES="\
2336 Makefile \
2337 common.mak \
2338 subdir.mak \
2339 doc/texi2pod.pl \
2340 libavcodec/Makefile \
2341 libavdevice/Makefile \
2342 libavfilter/Makefile \
2343 libavformat/Makefile \
2344 libavutil/Makefile \
2345 libpostproc/Makefile \
2346 libswscale/Makefile \
2348 for dir in $DIRS ; do
2349 mkdir -p $dir
2350 done
2351 for f in $FILES ; do
2352 $ln_s "$source_path/$f" $f
2353 done
2357 # build pkg-config files
2359 pkgconfig_generate(){
2360 name=$1
2361 shortname=${name#lib}${build_suffix}
2362 comment=$2
2363 version=$3
2364 libs=$4
2365 requires=$5
2366 cat <<EOF > $name/$name.pc
2367 prefix=$prefix
2368 exec_prefix=\${prefix}
2369 libdir=$libdir
2370 includedir=$incdir
2372 Name: $name
2373 Description: $comment
2374 Version: $version
2375 Requires: $(disabled shared && echo $requires)
2376 Requires.private: $(enabled shared && echo $requires)
2377 Conflicts:
2378 Libs: -L\${libdir} -l${shortname} $(disabled shared && echo $libs)
2379 Libs.private: $(enabled shared && echo $libs)
2380 Cflags: -I\${includedir}
2382 cat <<EOF > $name/$name-uninstalled.pc
2383 prefix=
2384 exec_prefix=
2385 libdir=\${pcfiledir}
2386 includedir=${source_path}
2388 Name: $name
2389 Description: $comment
2390 Version: $version
2391 Requires: $requires
2392 Conflicts:
2393 Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
2394 Cflags: -I\${includedir}
2398 pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
2399 pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "$pkg_requires libavutil = $LIBAVUTIL_VERSION"
2400 pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "$pkg_requires libavcodec = $LIBAVCODEC_VERSION"
2401 pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "$pkg_requires libavformat = $LIBAVFORMAT_VERSION"
2402 enabled avfilter &&
2403 pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "$pkg_requires libavutil = $LIBAVUTIL_VERSION"
2404 enabled postproc &&
2405 pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
2406 if enabled swscale; then
2407 pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"
2408 else
2409 pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "$pkg_requires libavcodec = $LIBAVCODEC_VERSION"
2410 apply libswscale/libswscale.pc sed s/^Libs:.*$/Libs:/