Add missing options to the help output.
[FFMpeg-mirror/ffmpeg-vdpau.git] / configure
blobb6ca3796037c4c8fbf85f179c3fa00aeaff2a3b7
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
877 CMDLINE_SELECT="
878 $ARCH_EXT_LIST
879 $CONFIG_LIST
880 $THREADS_LIST
881 cross_compile
882 debug
883 extra_warnings
884 logging
885 optimizations
886 shared
887 static
888 stripping
891 PATHS_LIST='
892 bindir
893 incdir
894 libdir
895 mandir
896 prefix
897 shlibdir
900 CMDLINE_SET="
901 $PATHS_LIST
902 arch
903 build_suffix
906 cross_prefix
907 extra_version
908 logfile
909 source_path
910 target_os
913 # code dependency declarations
915 # architecture extensions
916 altivec_deps="powerpc"
917 armv5te_deps="armv4l"
918 armv6_deps="armv4l"
919 armvfp_deps="armv4l"
920 iwmmxt_deps="armv4l"
921 mmi_deps="mips"
922 mmx_deps="x86"
923 mmx2_deps="x86 mmx"
924 neon_deps="armv4l"
925 ssse3_deps="x86"
926 vis_deps="sparc"
928 # common features
929 fft_suggest="fft_mmx"
930 fft_mmx_deps="mmx yasm"
932 # decoders / encoders
933 aac_decoder_select="fft mdct"
934 ac3_decoder_deps="gpl"
935 ac3_decoder_select="fft mdct"
936 atrac3_decoder_select="fft mdct"
937 cavs_decoder_select="golomb"
938 cook_decoder_select="fft mdct"
939 cscd_decoder_suggest="zlib"
940 dca_decoder_select="fft mdct"
941 dxa_decoder_select="zlib"
942 eac3_decoder_deps="gpl"
943 eac3_decoder_select="fft mdct"
944 ffv1_decoder_select="golomb"
945 flac_decoder_select="golomb"
946 flac_encoder_select="golomb"
947 flashsv_decoder_select="zlib"
948 flashsv_encoder_select="zlib"
949 h264_decoder_select="golomb"
950 imc_decoder_select="fft mdct"
951 jpegls_decoder_select="golomb"
952 jpegls_encoder_select="golomb"
953 loco_decoder_select="golomb"
954 mpeg_xvmc_decoder_deps="xvmc"
955 nellymoser_decoder_select="fft mdct"
956 nellymoser_encoder_select="fft mdct"
957 png_decoder_select="zlib"
958 png_encoder_select="zlib"
959 qdm2_decoder_select="fft mdct"
960 shorten_decoder_select="golomb"
961 sonic_decoder_select="golomb"
962 sonic_encoder_select="golomb"
963 sonic_ls_encoder_select="golomb"
964 svq3_decoder_select="golomb"
965 svq3_decoder_suggest="zlib"
966 tiff_decoder_suggest="zlib"
967 tiff_encoder_suggest="zlib"
968 tscc_decoder_select="zlib"
969 vorbis_decoder_select="fft mdct"
970 vorbis_encoder_select="fft mdct"
971 wmav1_decoder_select="fft mdct"
972 wmav1_encoder_select="fft mdct"
973 wmav2_decoder_select="fft mdct"
974 wmav2_encoder_select="fft mdct"
975 zlib_decoder_select="zlib"
976 zlib_encoder_select="zlib"
977 zmbv_decoder_select="zlib"
978 zmbv_encoder_select="zlib"
980 # external libraries
981 libamr_nb_decoder_deps="libamr_nb"
982 libamr_nb_encoder_deps="libamr_nb"
983 libamr_wb_decoder_deps="libamr_wb"
984 libamr_wb_encoder_deps="libamr_wb"
985 libdirac_decoder_deps="libdirac !libschroedinger"
986 libdirac_encoder_deps="libdirac"
987 libfaac_encoder_deps="libfaac"
988 libfaad_decoder_deps="libfaad"
989 libfaadbin_decoder_extralibs='$ldl'
990 libgsm_decoder_deps="libgsm"
991 libgsm_encoder_deps="libgsm"
992 libgsm_ms_decoder_deps="libgsm"
993 libgsm_ms_encoder_deps="libgsm"
994 libmp3lame_encoder_deps="libmp3lame"
995 libschroedinger_decoder_deps="libschroedinger"
996 libschroedinger_encoder_deps="libschroedinger"
997 libspeex_decoder_deps="libspeex"
998 libtheora_encoder_deps="libtheora"
999 libvorbis_encoder_deps="libvorbis"
1000 libx264_encoder_deps="libx264"
1001 libxvid_encoder_deps="libxvid"
1002 mpeg4aac_decoder_deps="libfaad"
1004 # demuxers / muxers
1005 ac3_demuxer_deps="ac3_parser"
1006 audio_beos_demuxer_deps="audio_beos"
1007 audio_beos_demuxer_extralibs="-lmedia -lbe"
1008 audio_beos_muxer_deps="audio_beos"
1009 audio_beos_muxer_extralibs="-lmedia -lbe"
1010 avisynth_demuxer_deps="avisynth"
1011 bktr_demuxer_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
1012 dirac_demuxer_deps="dirac_parser"
1013 dv1394_demuxer_deps="dv1394 dv_demuxer"
1014 libdc1394_demuxer_deps="libdc1394"
1015 libnut_demuxer_deps="libnut"
1016 libnut_muxer_deps="libnut"
1017 matroska_demuxer_suggest="zlib bzlib"
1018 mov_demuxer_suggest="zlib"
1019 mp3_demuxer_deps="mpegaudio_parser"
1020 oss_demuxer_deps_any="soundcard_h sys_soundcard_h"
1021 oss_muxer_deps_any="soundcard_h sys_soundcard_h"
1022 redir_demuxer_deps="network"
1023 rtp_muxer_deps="network rtp_protocol"
1024 rtsp_demuxer_deps="sdp_demuxer"
1025 sdp_demuxer_deps="rtp_protocol mpegts_demuxer"
1026 v4l_demuxer_deps="linux_videodev_h"
1027 v4l2_demuxer_deps_any="linux_videodev2_h sys_videoio_h"
1028 vfwcap_demuxer_deps="capCreateCaptureWindow"
1029 vfwcap_demuxer_extralibs="-lvfw32"
1030 x11_grab_device_demuxer_deps="x11grab XShmCreateImage"
1031 x11_grab_device_demuxer_extralibs="-lX11 -lXext"
1033 # protocols
1034 http_protocol_deps="network"
1035 rtp_protocol_deps="udp_protocol"
1036 tcp_protocol_deps="network"
1037 udp_protocol_deps="network"
1039 # filters
1040 movie_filter_deps="avfilter_lavf"
1042 # programs
1043 ffplay_deps="sdl"
1044 ffserver_deps="ffm_muxer rtp_protocol rtsp_demuxer"
1045 ffserver_extralibs='$ldl'
1046 vhook_extralibs='$ldl'
1049 # default parameters
1051 logfile="config.err"
1053 # installation paths
1054 prefix_default="/usr/local"
1055 bindir_default='${prefix}/bin'
1056 incdir_default='${prefix}/include'
1057 libdir_default='${prefix}/lib'
1058 mandir_default='${prefix}/share/man'
1059 shlibdir_default="$libdir_default"
1061 # toolchain
1062 cc_default="gcc"
1063 yasmexe="yasm"
1064 ar="ar"
1065 nm="nm"
1066 ranlib="ranlib"
1067 strip="strip"
1068 asmalign_pot="unknown"
1069 ln_s="ln -sf"
1070 objformat="elf"
1072 # machine
1073 arch=`uname -m`
1074 cpu="generic"
1076 # OS
1077 target_os=$(tolower $(uname -s))
1079 # configurable options
1080 enable debug
1081 enable ffmpeg
1082 enable ffplay
1083 enable ffserver
1084 enable ipv6
1085 enable mpegaudio_hp
1086 enable network
1087 enable optimizations
1088 enable protocols
1089 enable static
1090 enable stripping
1091 vhook="default"
1093 # build settings
1094 add_cflags -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112
1095 SHFLAGS='-shared -Wl,-soname,$$(@F)'
1096 VHOOKSHFLAGS='$(SHFLAGS)'
1097 FFSERVERLDFLAGS=-Wl,-E
1098 LIBPREF="lib"
1099 LIBSUF=".a"
1100 FULLNAME='$(NAME)$(BUILDSUF)'
1101 LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
1102 SLIBPREF="lib"
1103 SLIBSUF=".so"
1104 SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
1105 SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
1106 SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
1107 LIB_INSTALL_EXTRA_CMD='$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
1109 # gcc stupidly only outputs the basename of targets with -MM, but we need the
1110 # full relative path for objects in subdirectories for non-recursive Make.
1111 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,"'
1113 # find source path
1114 source_path="`dirname \"$0\"`"
1115 enable source_path_used
1116 if test -z "$source_path" -o "$source_path" = "." ; then
1117 source_path="`pwd`"
1118 disable source_path_used
1119 else
1120 source_path="`cd \"$source_path\"; pwd`"
1121 echo "$source_path" | grep -q '[[:blank:]]' &&
1122 die "Out of tree builds are impossible with whitespace in source path."
1125 FFMPEG_CONFIGURATION="$@"
1127 find_things(){
1128 thing=$1
1129 pattern=$2
1130 file=$source_path/$3
1131 sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
1134 ENCODER_LIST=$(find_things encoder ENC libavcodec/allcodecs.c)
1135 DECODER_LIST=$(find_things decoder DEC libavcodec/allcodecs.c)
1136 PARSER_LIST=$(find_things parser PARSER libavcodec/allcodecs.c)
1137 BSF_LIST=$(find_things bsf BSF libavcodec/allcodecs.c)
1138 MUXER_LIST=$(find_things muxer _MUX libavformat/allformats.c)
1139 DEMUXER_LIST=$(find_things demuxer DEMUX libavformat/allformats.c)
1140 OUTDEV_LIST=$(find_things muxer _MUX libavdevice/alldevices.c)
1141 INDEV_LIST=$(find_things demuxer DEMUX libavdevice/alldevices.c)
1142 PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
1143 FILTER_LIST=$(find_things filter FILTER libavfilter/allfilters.c)
1145 enable $ARCH_EXT_LIST \
1146 $DECODER_LIST \
1147 $ENCODER_LIST \
1148 $PARSER_LIST \
1149 $BSF_LIST \
1150 $DEMUXER_LIST \
1151 $MUXER_LIST \
1152 $FILTER_LIST \
1153 $PROTOCOL_LIST \
1154 $INDEV_LIST \
1155 $OUTDEV_LIST \
1157 die_unknown(){
1158 echo "Unknown option \"$1\"."
1159 echo "See $0 --help for available options."
1160 exit 1
1163 show_list() {
1164 suffix=_$1
1165 shift
1166 echo $* | sed s/$suffix//g | tr ' ' '\n' | sort
1167 exit 0
1170 for opt do
1171 optval="${opt#*=}"
1172 case "$opt" in
1173 --extra-cflags=*) add_cflags "$optval"
1175 --extra-ldflags=*) add_ldflags "$optval"
1177 --extra-libs=*) add_extralibs "$optval"
1179 --disable-devices) disable $INDEV_LIST $OUTDEV_LIST
1181 --enable-debug=*) debuglevel="$optval"
1183 --enable-*=*|--disable-*=*)
1184 eval `echo "$opt" | sed 's/=/-/;s/--/action=/;s/-/ thing=/;s/-/ name=/'`
1185 case "$thing" in
1186 encoder|decoder|muxer|demuxer|parser|bsf|protocol|filter) $action ${optval}_${thing} ;;
1187 *) die_unknown "$opt" ;;
1188 esac
1190 --enable-?*|--disable-?*)
1191 eval `echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g'`
1192 if is_in $option $COMPONENT_LIST; then
1193 eval $action \$$(toupper ${option%s})_LIST
1194 elif is_in $option $CMDLINE_SELECT; then
1195 $action $option
1196 else
1197 die_unknown $opt
1200 --list-*)
1201 NAME="${opt#--list-}"
1202 is_in $NAME $COMPONENT_LIST || die_unknown $opt
1203 NAME=${NAME%s}
1204 eval show_list $NAME \$$(toupper $NAME)_LIST
1206 --help|-h) show_help
1209 optname="${opt%%=*}"
1210 optname="${optname#--}"
1211 optname=$(echo "$optname" | sed 's/-/_/g')
1212 is_in $optname $CMDLINE_SET || die_unknown $opt
1213 eval $optname='$optval'
1215 esac
1216 done
1218 disabled logging && logfile=/dev/null
1220 echo "# $0 $@" > $logfile
1221 set >> $logfile
1223 cc_default="${cross_prefix}${cc_default}"
1224 yasmexe="${cross_prefix}${yasmexe}"
1225 ar="${cross_prefix}${ar}"
1226 nm="${cross_prefix}${nm}"
1227 ranlib="${cross_prefix}${ranlib}"
1228 strip="${cross_prefix}${strip}"
1230 set_default cc
1232 # set temporary file name
1233 if test ! -z "$TMPDIR" ; then
1234 TMPDIR1="${TMPDIR}"
1235 elif test ! -z "$TEMPDIR" ; then
1236 TMPDIR1="${TEMPDIR}"
1237 else
1238 TMPDIR1="/tmp"
1241 TMPC="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.c"
1242 TMPE="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}${EXESUF}"
1243 TMPH="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.h"
1244 TMPO="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.o"
1245 TMPS="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.S"
1246 TMPSH="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.sh"
1248 check_cflags -std=c99
1250 case "$arch" in
1251 i386|i486|i586|i686|i86pc|BePC)
1252 arch="x86_32"
1253 enable fast_unaligned
1255 x86_64|amd64)
1256 arch="x86_32"
1257 enable cmov
1258 enable fast_cmov
1259 enable fast_unaligned
1260 check_cc <<EOF && enable fast_64bit && arch="x86_64"
1261 int test[sizeof(char*) - 7];
1264 # armv4l is a subset of armv[567]*l
1265 arm|armv[4567]*l)
1266 arch="armv4l"
1268 alpha)
1269 arch="alpha"
1270 enable fast_64bit
1272 "Power Macintosh"|ppc|powerpc)
1273 arch="powerpc"
1274 enable fast_unaligned
1276 ppc64)
1277 arch="powerpc"
1278 enable fast_64bit
1279 enable fast_unaligned
1281 mips|mipsel|IP*)
1282 arch="mips"
1284 sun4u|sparc64)
1285 arch="sparc64"
1286 enable fast_64bit
1288 sparc)
1289 arch="sparc"
1291 sh4)
1292 arch="sh4"
1294 parisc)
1295 arch="parisc"
1297 parisc64)
1298 arch="parisc"
1299 enable fast_64bit
1301 s390|s390x)
1302 arch="s390"
1304 m68k)
1305 arch="m68k"
1307 ia64)
1308 arch="ia64"
1309 enable fast_64bit
1311 bfin)
1312 arch="bfin"
1315 arch="unknown"
1317 esac
1319 enable $arch
1320 enabled_any x86_32 x86_64 && enable x86
1321 enabled sparc64 && enable sparc
1323 # OS specific
1324 case $target_os in
1325 beos|haiku|zeta)
1326 prefix_default="$HOME/config"
1327 # helps building libavcodec
1328 add_cflags "-DPIC -fomit-frame-pointer"
1329 # 3 gcc releases known for BeOS, each with ugly bugs
1330 gcc_version="`$cc -v 2>&1 | grep version | cut -d ' ' -f3-`"
1331 case "$gcc_version" in
1332 2.9-beos-991026*|2.9-beos-000224*) echo "R5/GG gcc"
1333 disable mmx
1335 *20010315*) echo "BeBits gcc"
1336 add_cflags "-fno-expensive-optimizations"
1338 esac
1339 SHFLAGS=-nostart
1340 # enable BeOS things
1341 enable audio_beos
1342 # no need for libm, but the inet stuff
1343 # Check for BONE
1344 # XXX: actually should check for NOT net_server
1345 if echo $BEINCLUDES | grep -q 'headers/be/bone'; then
1346 network_extralibs="-lbind -lsocket"
1347 else
1348 enable beos_netserver
1349 network_extralibs="-lnet"
1350 fi ;;
1351 sunos)
1352 FFSERVERLDFLAGS=""
1353 SHFLAGS='-shared -Wl,-h,$$(@F)'
1354 network_extralibs="-lsocket -lnsl"
1356 netbsd)
1357 oss_demuxer_extralibs="-lossaudio"
1358 oss_muxer_extralibs="-lossaudio"
1360 openbsd)
1361 disable need_memalign
1362 LIBOBJFLAGS='$(PIC)'
1363 SHFLAGS='-shared'
1364 SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF).$(LIBVERSION)'
1365 SLIBNAME_WITH_VERSION='$(SLIBNAME)'
1366 SLIBNAME_WITH_MAJOR='$(SLIBNAME)'
1367 oss_demuxer_extralibs="-lossaudio"
1368 oss_muxer_extralibs="-lossaudio"
1370 freebsd)
1371 disable need_memalign
1373 bsd/os)
1374 osextralibs="-lpoll -lgnugetopt"
1375 strip="strip -d"
1377 darwin)
1378 disable need_memalign
1379 SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR) -Wl,-read_only_relocs,suppress'
1380 VHOOKSHFLAGS='-dynamiclib -Wl,-single_module -flat_namespace -undefined suppress -Wl,-install_name,$(SHLIBDIR)/vhook/$$(@F)'
1381 strip="strip -x"
1382 FFLDFLAGS="-Wl,-dynamic,-search_paths_first"
1383 SLIBSUF=".dylib"
1384 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
1385 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
1386 FFSERVERLDFLAGS=-Wl,-bind_at_load
1387 objformat="macho"
1388 enabled x86_64 && objformat="macho64"
1390 mingw32*)
1391 target_os=mingw32
1392 LIBTARGET=i386
1393 if test $arch = x86_64; then
1394 disable need_memalign
1395 LIBTARGET=x64
1397 shlibdir_default="$bindir_default"
1398 VHOOKSHFLAGS='-shared -L$(BUILD_ROOT)/libavformat -L$(BUILD_ROOT)/libavcodec -L$(BUILD_ROOT)/libavutil'
1399 VHOOKLIBS='-lavformat$(BUILDSUF) -lavcodec$(BUILDSUF) -lavutil$(BUILDSUF) $(EXTRALIBS)'
1400 if enabled swscale; then
1401 VHOOKSHFLAGS="$VHOOKSHFLAGS -L\$(BUILD_ROOT)/libswscale"
1402 VHOOKLIBS="$VHOOKLIBS -lswscale\$(BUILDSUF)"
1404 disable ffserver
1405 SLIBPREF=""
1406 SLIBSUF=".dll"
1407 EXESUF=".exe"
1408 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1409 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1410 SLIB_EXTRA_CMD='-lib /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)'
1411 SLIB_INSTALL_EXTRA_CMD='-install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"; \
1412 install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)"'
1413 SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"'
1414 SHFLAGS='-shared -Wl,--output-def,$$(@:$(SLIBSUF)=.def) -Wl,--enable-runtime-pseudo-reloc -Wl,--enable-auto-image-base'
1415 objformat="win32"
1416 enable dos_paths
1417 check_cpp_condition _mingw.h "(__MINGW32_MAJOR_VERSION > 3) || (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
1418 die "ERROR: MinGW runtime version must be >= 3.15."
1419 enabled_any avisynth vfwcap_demuxer &&
1420 { check_cpp_condition w32api.h "(__W32API_MAJOR_VERSION > 3) || (__W32API_MAJOR_VERSION == 3 && __W32API_MINOR_VERSION >= 12)" ||
1421 die "ERROR: avisynth and vfwcap_demuxer require w32api version 3.12 or later."; }
1423 cygwin*)
1424 target_os=cygwin
1425 shlibdir_default="$bindir_default"
1426 VHOOKSHFLAGS='-shared -L$(BUILD_ROOT)/libavformat -L$(BUILD_ROOT)/libavcodec -L$(BUILD_ROOT)/libavutil'
1427 VHOOKLIBS='-lavformat$(BUILDSUF) -lavcodec$(BUILDSUF) -lavutil$(BUILDSUF) $(EXTRALIBS)'
1428 if enabled swscale; then
1429 VHOOKSHFLAGS="$VHOOKSHFLAGS -L\$(BUILD_ROOT)/libswscale"
1430 VHOOKLIBS="$VHOOKLIBS -lswscale\$(BUILDSUF)"
1432 EXESUF=".exe"
1433 SLIBPREF="cyg"
1434 SLIBSUF=".dll"
1435 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1436 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1437 SHFLAGS='-shared -Wl,--enable-auto-image-base'
1438 objformat="win32"
1439 enable dos_paths
1441 *-dos|freedos|opendos)
1442 disable ffplay ffserver vhook
1443 disable $INDEV_LIST $OUTDEV_LIST
1444 network_extralibs="-lsocket"
1445 EXESUF=".exe"
1446 objformat="win32"
1447 enable dos_paths
1449 linux)
1450 enable dv1394
1452 irix*)
1453 target_os=irix
1454 ranlib="echo ignoring ranlib"
1456 os/2*)
1457 strip="lxlite"
1458 ln_s="cp -f"
1459 EXESUF=".exe"
1460 FFLDFLAGS="-Zomf -Zbin-files -Zargs-wild -Zmap"
1461 SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
1462 FFSERVERLDFLAGS=""
1463 LIBSUF="_s.a"
1464 SLIBPREF=""
1465 SLIBSUF=".dll"
1466 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
1467 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
1468 SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
1469 echo PROTMODE >> $(SUBDIR)$(NAME).def; \
1470 echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
1471 echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
1472 echo EXPORTS >> $(SUBDIR)$(NAME).def; \
1473 emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
1474 SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
1475 emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
1476 SLIB_INSTALL_EXTRA_CMD='install -m 644 $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib "$(LIBDIR)"'
1477 SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.a "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.lib'
1478 disable vhook
1479 enable dos_paths
1481 interix)
1482 disable vhook
1486 target_os="${target_os}-UNKNOWN"
1488 esac
1490 set_default $PATHS_LIST
1492 add_extralibs $osextralibs
1494 # Combine FFLDFLAGS and the LDFLAGS environment variable.
1495 LDFLAGS="$FFLDFLAGS $LDFLAGS"
1497 test -n "$cross_prefix" && enable cross_compile
1499 # we need to build at least one lib type
1500 if ! enabled_any static shared; then
1501 cat <<EOF
1502 At least one library type must be built.
1503 Specify --enable-static to build the static libraries or --enable-shared to
1504 build the shared libraries as well. To only build the shared libraries specify
1505 --disable-static in addition to --enable-shared.
1507 exit 1;
1510 disabled static && LIBNAME=""
1512 if enabled_any libfaad libfaadbin ; then
1513 if check_header faad.h; then
1514 check_cc <<EOF
1515 #include <faad.h>
1516 #ifndef FAAD2_VERSION
1517 ok faad1
1518 #endif
1519 int main(void) { return 0; }
1521 test $? = 0 && enable libfaad2
1522 else
1523 die "FAAD test failed."
1528 if ! enabled gpl; then
1529 die_gpl_disabled(){
1530 name=$1
1531 shift
1532 enabled_any $@ && die "$name is under GPL and --enable-gpl is not specified."
1534 die_gpl_disabled "The Postprocessing code" postproc
1535 die_gpl_disabled "libx264" libx264
1536 die_gpl_disabled "libxvidcore" libxvid
1537 die_gpl_disabled "FAAD2" libfaad2
1538 die_gpl_disabled "The X11 grabber" x11grab
1539 die_gpl_disabled "The software scaler" swscale
1542 if ! enabled nonfree && enabled_any libamr_nb libamr_wb; then
1543 die "libamr is nonfree and --enable-nonfree is not specified."
1546 check_deps $ARCH_EXT_LIST
1548 test -z "$need_memalign" && need_memalign="$mmx"
1550 #Darwin CC versions
1551 if test $target_os = darwin; then
1552 if $cc -v 2>&1 | grep -q xlc; then
1553 add_cflags "-qpdf2 -qlanglvl=extc99 -qmaxmem=-1 -qarch=auto -qtune=auto"
1554 else
1555 add_cflags "-pipe"
1556 check_cflags "-force_cpusubtype_ALL"
1557 check_cflags "-Wno-sign-compare"
1558 enabled shared || check_cflags -mdynamic-no-pic
1562 disabled optimizations || check_cflags -fomit-frame-pointer
1564 # Add processor-specific flags
1565 if test $cpu != "generic"; then
1566 warn_altivec(){
1567 $1 altivec && echo "WARNING: Tuning for $2 but AltiVec $1.";
1569 case $cpu in
1570 601|ppc601|PowerPC601)
1571 add_cflags "-mcpu=601"
1572 warn_altivec enabled PPC601
1574 603*|ppc603*|PowerPC603*)
1575 add_cflags "-mcpu=603"
1576 warn_altivec enabled PPC603
1578 604*|ppc604*|PowerPC604*)
1579 add_cflags "-mcpu=604"
1580 warn_altivec enabled PPC604
1582 G3|g3|75*|ppc75*|PowerPC75*)
1583 add_cflags "-mcpu=750 -mpowerpc-gfxopt"
1584 warn_altivec enabled PPC75x
1586 G4|g4|745*|ppc745*|PowerPC745*)
1587 add_cflags "-mcpu=7450 -mpowerpc-gfxopt"
1588 warn_altivec disabled PPC745x
1590 74*|ppc74*|PowerPC74*)
1591 add_cflags "-mcpu=7400 -mpowerpc-gfxopt"
1592 warn_altivec disabled PPC74xx
1594 G5|g5|970|ppc970|PowerPC970|power4*|Power4*)
1595 add_cflags "-mcpu=970 -mpowerpc-gfxopt -mpowerpc64"
1596 warn_altivec disabled PPC970
1597 enable ppc64
1599 Cell|CELL|cell)
1600 add_cflags "-mcpu=cell"
1601 warn_altivec disabled Cell
1602 enable ppc64
1604 # targets that do NOT support conditional mov (cmov)
1605 i[345]86|pentium|pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
1606 add_cflags "-march=$cpu"
1607 disable cmov
1609 # targets that do support conditional mov (cmov)
1610 i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2)
1611 add_cflags "-march=$cpu"
1612 enable cmov
1613 enable fast_cmov
1615 # targets that do support conditional mov but on which it's slow
1616 pentium4|pentium4m|prescott|nocona)
1617 add_cflags "-march=$cpu"
1618 enable cmov
1619 disable fast_cmov
1621 sparc64)
1622 add_cflags "-mcpu=v9"
1624 arm11*|cortex*)
1625 add_cflags "-mcpu=$cpu"
1626 enable fast_unaligned
1628 armv*)
1629 add_cflags "-march=$cpu"
1631 arm*)
1632 add_cflags "-mcpu=$cpu"
1635 echo "WARNING: Unknown CPU \"$cpu\", ignored."
1637 esac
1640 # make sure we can execute files in $TMPDIR
1641 cat > $TMPSH 2>> $logfile <<EOF
1642 #! /bin/sh
1644 chmod +x $TMPSH >> $logfile 2>&1
1645 if ! $TMPSH >> $logfile 2>&1; then
1646 cat <<EOF
1647 Unable to create and execute files in $TMPDIR1. Set the TMPDIR environment
1648 variable to another directory and make sure that $TMPDIR1 is not mounted
1649 noexec.
1651 die "Sanity test failed."
1653 rm $TMPSH
1655 # compiler sanity check
1656 check_exec <<EOF
1657 int main(void){ return 0; }
1659 if test "$?" != 0; then
1660 echo "$cc is unable to create an executable file."
1661 if test -z "$cross_prefix" && ! enabled cross_compile ; then
1662 echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
1663 echo "Only do this if you know what cross compiling means."
1665 die "C compiler test failed."
1668 check_cc <<EOF || die "Symbol mangling check failed."
1669 int ff_extern;
1671 sym=$($nm -P -g $TMPO | grep ff_extern)
1672 extern_prefix=${sym%%ff_extern*}
1674 check_asm inline_asm '""'
1676 if enabled x86; then
1677 # check whether EBP is available on x86
1678 # As 'i' is stored on the stack, this program will crash
1679 # if the base pointer is used to access it because the
1680 # base pointer is cleared in the inline assembly code.
1681 check_exec_crash <<EOF && enable ebp_available
1682 volatile int i=0;
1683 __asm__ volatile (
1684 "xorl %%ebp, %%ebp"
1685 ::: "%ebp");
1686 return i;
1689 # check wether EBX is available on x86
1690 check_asm ebx_available '"":::"%ebx"'
1692 # check whether binutils is new enough to compile SSSE3/MMX2
1693 enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
1694 enabled mmx2 && check_asm mmx2 '"movss %xmm0, %xmm0"'
1696 check_asm bswap '"bswap %%eax" ::: "%eax"'
1698 YASMFLAGS="-f $objformat -DARCH_$(toupper $arch)"
1699 enabled x86_64 && append YASMFLAGS "-m amd64"
1700 enabled_all x86_64 shared && append YASMFLAGS "-DPIC"
1701 case "$objformat" in
1702 elf) enabled debug && append YASMFLAGS "-g dwarf2" ;;
1703 macho64) append YASMFLAGS "-DPIC -DPREFIX" ;;
1704 *) append YASMFLAGS "-DPREFIX" ;;
1705 esac
1706 check_yasm "pabsw xmm0, xmm0" && enable yasm
1709 # check for assembler specific support
1711 if test $arch = "powerpc"; then
1712 check_asm dcbzl '"dcbzl 0, 1"'
1715 # check for SIMD availability
1717 # AltiVec flags: The FSF version of GCC differs from the Apple version
1718 if enabled altivec; then
1719 check_cflags -maltivec -mabi=altivec &&
1720 { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
1721 check_cflags -faltivec
1723 # check if our compiler supports Motorola AltiVec C API
1724 check_cc <<EOF || disable altivec
1725 $inc_altivec_h
1726 int main(void) {
1727 vector signed int v1, v2, v3;
1728 v1 = vec_add(v2,v3);
1729 return 0;
1733 # check if our compiler supports braces for vector declarations
1734 check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
1735 $inc_altivec_h
1736 int main (void) { (vector int) {1}; return 0; }
1740 # We have to check if pld is a nop and disable it.
1741 enabled armv4l && check_asm pld '"pld [r0]"'
1742 enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
1743 enabled armv6 && check_asm armv6 '"sadd16 r0, r0, r0"'
1744 enabled armvfp && check_asm armvfp '"fadds s0, s0, s0"'
1745 enabled iwmmxt && check_asm iwmmxt '"wunpckelub wr6, wr4"'
1746 enabled mmi && check_asm mmi '"lq $2, 0($2)"'
1747 enabled neon && check_asm neon '"vadd.i16 q0, q0, q0"'
1748 enabled vis && check_asm vis '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc
1750 enabled vis && add_cflags "-mcpu=ultrasparc -mtune=ultrasparc"
1752 # ---
1753 # big/little-endian test
1754 check_cc <<EOF || die "endian test failed"
1755 unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
1757 od -A n -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
1759 # ---
1760 # check availability of some header files
1762 if check_func dlopen; then
1763 ldl=
1764 elif check_func dlopen -ldl; then
1765 ldl=-ldl
1768 check_func fork
1769 check_func gethrtime
1770 check_func getrusage
1771 check_func inet_aton $network_extralibs
1772 check_func memalign
1773 check_func mkstemp
1774 check_func_headers windows.h GetProcessTimes
1776 check_header conio.h
1777 check_header dlfcn.h
1778 check_header malloc.h
1779 check_header poll.h
1780 check_header sys/mman.h
1781 check_header sys/resource.h
1782 check_header sys/select.h
1783 check_header termios.h
1785 if ! enabled_any memalign memalign_hack && enabled need_memalign ; then
1786 die "Error, no memalign() but SSE enabled, disable it or use --enable-memalign-hack."
1789 disabled zlib || check_lib zlib.h zlibVersion -lz || disable zlib
1790 disabled bzlib || check_lib bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
1792 # check for some common methods of building with pthread support
1793 # do this before the optional library checks as some of them require pthreads
1794 if enabled pthreads; then
1795 if check_func pthread_create; then
1797 elif check_func pthread_create -pthread; then
1798 add_cflags -pthread
1799 add_extralibs -pthread
1800 elif check_func pthread_create -pthreads; then
1801 add_cflags -pthreads
1802 add_extralibs -pthreads
1803 elif check_func pthread_create -lpthreadGC2; then
1804 add_extralibs -lpthreadGC2
1805 elif ! check_lib pthread.h pthread_create -lpthread; then
1806 die "ERROR: can't find pthreads library"
1810 for thread in $THREADS_LIST; do
1811 if enabled $thread; then
1812 test -n "$thread_type" &&
1813 die "ERROR: Only one thread type must be selected." ||
1814 thread_type="$thread"
1816 done
1818 check_lib math.h sin -lm
1820 # test for C99 functions in math.h
1821 for func in llrint lrint lrintf round roundf; do
1822 check_exec <<EOF && enable $func || disable $func
1823 #include <math.h>
1824 int main(void) { return ($func(3.999f) > 0)?0:1; }
1826 done
1828 # these are off by default, so fail if requested and not available
1829 enabled avisynth && require2 vfw32 "windows.h vfw.h" AVIFileInit -lvfw32
1830 enabled libamr_nb && require libamrnb amrnb/interf_dec.h Speech_Decode_Frame_init -lamrnb -lm
1831 enabled libamr_wb && require libamrwb amrwb/dec_if.h D_IF_init -lamrwb -lm
1832 enabled libdirac && add_cflags $(pkg-config --cflags dirac) &&
1833 require libdirac libdirac_decoder/dirac_parser.h dirac_decoder_init -ldirac_decoder &&
1834 require libdirac libdirac_encoder/dirac_encoder.h dirac_encoder_init -ldirac_encoder
1835 enabled libfaac && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
1836 enabled libfaad && require2 libfaad faad.h faacDecOpen -lfaad
1837 enabled libgsm && require libgsm gsm.h gsm_create -lgsm
1838 enabled libmp3lame && require libmp3lame lame/lame.h lame_init -lmp3lame -lm
1839 enabled libnut && require libnut libnut.h nut_demuxer_init -lnut
1840 enabled libschroedinger && add_cflags $(pkg-config --cflags schroedinger-1.0) &&
1841 require libschroedinger schroedinger/schro.h schro_init $(pkg-config --libs schroedinger-1.0)
1842 enabled libspeex && require libspeex speex/speex.h speex_decoder_init -lspeex
1843 enabled libtheora && require libtheora theora/theora.h theora_info_init -ltheora -logg
1844 enabled libvorbis && require libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
1845 enabled libx264 && require libx264 x264.h x264_encoder_open -lx264 -lm &&
1846 { check_cpp_condition x264.h "X264_BUILD >= 65" ||
1847 die "ERROR: libx264 version must be >= 0.65."; }
1848 enabled libxvid && require libxvid xvid.h xvid_global -lxvidcore
1849 enabled mlib && require mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
1851 # libdc1394 check
1852 if enabled libdc1394; then
1853 { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
1854 enable libdc1394_2; } ||
1855 { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
1856 enable libdc1394_1; } ||
1857 die "ERROR: No version of libdc1394 found "
1861 _restrict=
1862 for restrict_keyword in restrict __restrict__ __restrict; do
1863 check_cc <<EOF && _restrict=$restrict_keyword && break
1864 void foo(char * $restrict_keyword p);
1866 done
1868 test "$vhook" = "default" && vhook="$dlopen"
1870 if test "$target_os" = cygwin -o "$target_os" = mingw32 && enabled_all static vhook ; then
1871 disable vhook
1872 echo
1873 echo "At the moment vhooks don't work on Cygwin or MinGW static builds."
1874 echo "Patches welcome."
1875 echo
1878 if enabled vhook; then
1879 check_ldflags -rdynamic
1880 check_ldflags -export-dynamic
1883 check_foo_config imlib2 imlib2 Imlib2.h imlib_load_font
1884 check_foo_config freetype2 freetype ft2build.h FT_Init_FreeType
1886 ##########################################
1887 # SDL check
1889 disable sdl_too_old
1890 disable sdl
1891 SDL_CONFIG="${cross_prefix}sdl-config"
1892 if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
1893 sdl_cflags=`"${SDL_CONFIG}" --cflags`
1894 temp_cflags $sdl_cflags
1895 temp_extralibs `"${SDL_CONFIG}" --libs`
1896 if check_lib2 SDL.h SDL_Init; then
1897 _sdlversion=`"${SDL_CONFIG}" --version | sed 's/[^0-9]//g'`
1898 if test "$_sdlversion" -lt 121 ; then
1899 enable sdl_too_old
1900 else
1901 enable sdl
1902 check_cc $sdl_cflags <<EOF && enable sdl_video_size
1903 #include <SDL.h>
1904 int main(int argc, char **argv){
1905 const SDL_VideoInfo *vi = SDL_GetVideoInfo();
1906 int w = vi->current_w;
1907 return 0;
1912 restore_flags
1915 texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
1917 ##########################################
1918 # Network check
1920 if enabled network; then
1921 check_type sys/socket.h socklen_t
1922 # Prefer arpa/inet.h over winsock2
1923 if check_header arpa/inet.h ; then
1924 check_func closesocket
1925 elif check_header winsock2.h ; then
1926 network_extralibs="-lws2_32"
1927 check_type ws2tcpip.h socklen_t
1928 check_func_headers winsock2.h closesocket
1932 ##########################################
1933 # IPv6 check
1935 enabled network && enabled ipv6 && check_ld <<EOF && enable ipv6 || disable ipv6
1936 #include <sys/types.h>
1937 #include <sys/socket.h>
1938 #include <netinet/in.h>
1939 #include <netdb.h>
1940 int main(void) {
1941 struct sockaddr_storage saddr;
1942 struct ipv6_mreq mreq6;
1943 getaddrinfo(0,0,0,0);
1944 getnameinfo(0,0,0,0,0,0,0);
1945 IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
1949 check_header linux/videodev.h
1950 check_header linux/videodev2.h
1951 check_header sys/videoio.h
1953 check_func_headers "windows.h vfw.h" capCreateCaptureWindow -lvfw32
1955 # check for ioctl_meteor.h, ioctl_bt848.h and alternatives
1956 { check_header dev/bktr/ioctl_meteor.h &&
1957 check_header dev/bktr/ioctl_bt848.h; } ||
1958 { check_header machine/ioctl_meteor.h &&
1959 check_header machine/ioctl_bt848.h; } ||
1960 { check_header dev/video/meteor/ioctl_meteor.h &&
1961 check_header dev/video/bktr/ioctl_bt848.h; } ||
1962 check_header dev/ic/bt8xx.h
1964 check_header sys/soundcard.h
1965 check_header soundcard.h
1967 # deal with the X11 frame grabber
1968 enabled x11grab &&
1969 check_header X11/Xlib.h &&
1970 check_header X11/extensions/XShm.h &&
1971 check_func XOpenDisplay -lX11 &&
1972 check_func XShmCreateImage -lX11 -lXext
1974 enabled debug && add_cflags -g"$debuglevel"
1976 # add some useful compiler flags if supported
1977 check_cflags -Wdeclaration-after-statement
1978 check_cflags -Wall
1979 check_cflags -Wno-switch
1980 check_cflags -Wdisabled-optimization
1981 check_cflags -Wpointer-arith
1982 check_cflags -Wredundant-decls
1983 check_cflags -Wno-pointer-sign
1984 check_cflags -Wcast-qual
1985 check_cflags -Wwrite-strings
1986 check_cflags -Wtype-limits
1987 enabled extra_warnings && check_cflags -Winline
1989 # add some linker flags
1990 check_ldflags -Wl,--warn-common
1991 check_ldflags -Wl,--as-needed
1992 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'
1993 check_ldflags -Wl,-Bsymbolic
1995 if enabled small; then
1996 check_cflags -Os # not all compilers support -Os
1997 optimizations="small"
1998 elif enabled optimizations; then
1999 if $cc -v 2>&1 | grep -q xlc; then
2000 add_cflags "-O5"
2001 add_ldflags "-O5"
2002 else
2003 add_cflags "-O3"
2006 check_cflags -fno-math-errno
2007 check_cflags -fno-signed-zeros
2009 # add some flags for Intel C Compiler
2010 if $cc --version 2> /dev/null | grep -q Intel; then
2011 # Just warnings, no remarks
2012 check_cflags -w1
2013 # -wd: Disable following warnings
2014 # 144, 167, 556: -Wno-pointer-sign
2015 # 10006: ignoring unknown option -fno-signed-zeros
2016 # 10156: ignoring option '-W'; no argument required
2017 check_cflags -wd144,167,556,10006,10156
2018 # 11030: Warning unknown option --as-needed
2019 # 10156: ignoring option '-export'; no argument required
2020 check_ldflags -wd10156,11030
2021 # Allow to compile with optimizations
2022 check_ldflags -march=$cpu
2025 # PIC flags for shared library objects where they are needed
2026 if enabled shared; then
2027 # LIBOBJFLAGS may have already been set in the OS configuration
2028 if test -z "$LIBOBJFLAGS" ; then
2029 case "$arch" in
2030 x86_64|ia64|alpha|sparc*|power*|parisc*|mips*) LIBOBJFLAGS='$(PIC)' ;;
2031 esac
2035 if enabled gprof; then
2036 add_cflags "-p"
2037 add_ldflags "-p"
2040 VHOOKCFLAGS="-fPIC"
2042 # Find out if the .align argument is a power of two or not.
2043 if test $asmalign_pot = "unknown"; then
2044 disable asmalign_pot
2045 echo '__asm__ (".align 3");' | check_cc && enable asmalign_pot
2048 enabled_any $DECODER_LIST && enable decoders
2049 enabled_any $ENCODER_LIST && enable encoders
2050 enabled_any $BSF_LIST && enable bsfs
2051 enabled_any $DEMUXER_LIST && enable demuxers
2052 enabled_any $MUXER_LIST && enable muxers
2053 enabled_any $FILTER_LIST && enable filters
2054 enabled_any $INDEV_LIST && enable demuxers
2055 enabled_any $OUTDEV_LIST && enable muxers
2056 enabled_any $PROTOCOL_LIST && enable protocols
2058 enabled_any $THREADS_LIST && enable threads
2060 check_deps $CONFIG_LIST \
2061 $CONFIG_EXTRA \
2062 $HAVE_LIST \
2063 $DECODER_LIST \
2064 $ENCODER_LIST \
2065 $PARSER_LIST \
2066 $BSF_LIST \
2067 $DEMUXER_LIST \
2068 $MUXER_LIST \
2069 $FILTER_LIST \
2070 $INDEV_LIST \
2071 $OUTDEV_LIST \
2072 $PROTOCOL_LIST \
2074 enabled libdc1394 && append pkg_requires "libraw1394"
2075 enabled libdirac && append pkg_requires "dirac"
2076 enabled libtheora && append pkg_requires "theora"
2077 enabled libvorbis && append pkg_requires "vorbisenc"
2079 echo "install prefix $prefix"
2080 echo "source path $source_path"
2081 echo "C compiler $cc"
2082 echo ".align is power-of-two $asmalign_pot"
2083 echo "ARCH $arch ($cpu)"
2084 if test "$build_suffix" != ""; then
2085 echo "build suffix $build_suffix"
2087 if test "$extra_version" != ""; then
2088 echo "version string suffix $extra_version"
2090 echo "big-endian ${bigendian-no}"
2091 if test $arch = "x86_32" -o $arch = "x86_64"; then
2092 echo "yasm ${yasm-no}"
2093 echo "MMX enabled ${mmx-no}"
2094 echo "CMOV enabled ${cmov-no}"
2095 echo "CMOV is fast ${fast_cmov-no}"
2096 echo "EBX available ${ebx_available-no}"
2097 echo "EBP available ${ebp_available-no}"
2099 if test $arch = "armv4l"; then
2100 echo "ARMv5TE enabled ${armv5te-no}"
2101 echo "ARMv6 enabled ${armv6-no}"
2102 echo "ARM VFP enabled ${armvfp-no}"
2103 echo "IWMMXT enabled ${iwmmxt-no}"
2104 echo "NEON enabled ${neon-no}"
2106 if test $arch = "mips"; then
2107 echo "MMI enabled ${mmi-no}"
2109 if test $arch = "powerpc"; then
2110 echo "AltiVec enabled ${altivec-no}"
2111 echo "dcbzl available ${dcbzl-no}"
2113 echo "gprof enabled ${gprof-no}"
2114 echo "debug symbols ${debug-no}"
2115 echo "strip symbols ${stripping-no}"
2116 echo "optimizations ${optimizations-no}"
2117 echo "static ${static-no}"
2118 echo "shared ${shared-no}"
2119 echo "postprocessing support ${postproc-no}"
2120 echo "software scaler enabled ${swscale-no}"
2121 echo "new filter support ${avfilter-no}"
2122 echo "filters using lavformat ${avfilter_lavf-no}"
2123 echo "video hooking ${vhook-no}"
2124 if enabled vhook; then
2125 echo "Imlib2 support ${imlib2-no}"
2126 echo "FreeType support ${freetype2-no}"
2128 echo "network support ${network-no}"
2129 if enabled network; then
2130 echo "IPv6 support ${ipv6-no}"
2132 echo "threading support ${thread_type-no}"
2133 echo "SDL support ${sdl-no}"
2134 if enabled sdl_too_old; then
2135 echo "-> Your SDL version is too old - please upgrade to have FFplay/SDL support."
2137 echo "Sun medialib support ${mlib-no}"
2138 echo "AVISynth enabled ${avisynth-no}"
2139 echo "libamr-nb support ${libamr_nb-no}"
2140 echo "libamr-wb support ${libamr_wb-no}"
2141 echo "libdc1394 support ${libdc1394-no}"
2142 echo "libdirac enabled ${libdirac-no}"
2143 echo "libfaac enabled ${libfaac-no}"
2144 echo "libfaad enabled ${libfaad-no}"
2145 echo "libfaad dlopened ${libfaadbin-no}"
2146 echo "libgsm enabled ${libgsm-no}"
2147 echo "libmp3lame enabled ${libmp3lame-no}"
2148 echo "libnut enabled ${libnut-no}"
2149 echo "libschroedinger enabled ${libschroedinger-no}"
2150 echo "libspeex enabled ${libspeex-no}"
2151 echo "libtheora enabled ${libtheora-no}"
2152 echo "libvorbis enabled ${libvorbis-no}"
2153 echo "libx264 enabled ${libx264-no}"
2154 echo "libxvid enabled ${libxvid-no}"
2155 echo "zlib enabled ${zlib-no}"
2156 echo "bzlib enabled ${bzlib-no}"
2157 echo
2159 for type in decoder encoder parser demuxer muxer protocol filter bsf indev outdev; do
2160 echo "Enabled ${type}s:"
2161 eval list=\$$(toupper $type)_LIST
2162 for part in $list; do
2163 enabled $part && echo ${part%_*}
2164 done | sort | pr -3 -t
2165 echo
2166 done
2168 license="LGPL"
2169 if enabled nonfree; then
2170 license="unredistributable"
2171 elif enabled gpl; then
2172 license="GPL"
2175 echo "License: $license"
2177 echo "Creating config.mak and config.h..."
2179 echo "# Automatically generated by configure - do not modify!" > config.mak
2180 echo "/* Automatically generated by configure - do not modify! */" > $TMPH
2181 echo "#ifndef FFMPEG_CONFIG_H" >> $TMPH
2182 echo "#define FFMPEG_CONFIG_H" >> $TMPH
2183 echo "#define FFMPEG_CONFIGURATION \"$FFMPEG_CONFIGURATION\"" >> $TMPH
2185 echo "FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION" >> config.mak
2186 echo "prefix=$prefix" >> config.mak
2187 echo "LIBDIR=\$(DESTDIR)$libdir" >> config.mak
2188 echo "SHLIBDIR=\$(DESTDIR)$shlibdir" >> config.mak
2189 echo "INCDIR=\$(DESTDIR)$incdir" >> config.mak
2190 echo "BINDIR=\$(DESTDIR)$bindir" >> config.mak
2191 echo "MANDIR=\$(DESTDIR)$mandir" >> config.mak
2192 echo "CC=$cc" >> config.mak
2193 echo "YASM=$yasmexe" >> config.mak
2194 echo "AR=$ar" >> config.mak
2195 echo "RANLIB=$ranlib" >> config.mak
2196 echo "LN_S=$ln_s" >> config.mak
2197 enabled stripping &&
2198 echo "STRIP=$strip" >> config.mak ||
2199 echo "STRIP=echo ignoring strip" >> config.mak
2201 echo "OPTFLAGS=$CFLAGS" >> config.mak
2202 echo "VHOOKCFLAGS=$VHOOKCFLAGS" >> config.mak
2203 echo "LDFLAGS=$LDFLAGS" >> config.mak
2204 echo "FFSERVERLDFLAGS=$FFSERVERLDFLAGS" >> config.mak
2205 echo "SHFLAGS=$SHFLAGS" >> config.mak
2206 echo "YASMFLAGS=$YASMFLAGS" >> config.mak
2207 echo "VHOOKSHFLAGS=$VHOOKSHFLAGS" >> config.mak
2208 echo "VHOOKLIBS=$VHOOKLIBS" >> config.mak
2209 echo "LIBOBJFLAGS=$LIBOBJFLAGS" >> config.mak
2210 echo "BUILD_STATIC=$static" >> config.mak
2211 echo "BUILDSUF=$build_suffix" >> config.mak
2212 echo "FULLNAME=$FULLNAME" >> config.mak
2213 echo "LIBPREF=$LIBPREF" >> config.mak
2214 echo "LIBSUF=$LIBSUF" >> config.mak
2215 echo "LIBNAME=$LIBNAME" >> config.mak
2216 echo "SLIBPREF=$SLIBPREF" >> config.mak
2217 echo "SLIBSUF=$SLIBSUF" >> config.mak
2218 echo "EXESUF=$EXESUF" >> config.mak
2219 echo "EXTRA_VERSION=$extra_version" >> config.mak
2220 echo "DEPEND_CMD=$DEPEND_CMD" >> config.mak
2222 if enabled bigendian; then
2223 echo "WORDS_BIGENDIAN=yes" >> config.mak
2224 echo "#define WORDS_BIGENDIAN 1" >> $TMPH
2227 if enabled sdl; then
2228 echo "SDL_LIBS=`"${SDL_CONFIG}" --libs`" >> config.mak
2229 echo "SDL_CFLAGS=`"${SDL_CONFIG}" --cflags`" >> config.mak
2231 if enabled texi2html; then
2232 echo "BUILD_DOC=yes" >> config.mak
2235 get_version(){
2236 name=$1
2237 file=$source_path/$2
2238 eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
2239 eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
2240 lcname=$(tolower $name)
2241 eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
2242 eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
2245 get_version LIBSWSCALE libswscale/swscale.h
2246 get_version LIBPOSTPROC libpostproc/postprocess.h
2247 get_version LIBAVCODEC libavcodec/avcodec.h
2248 get_version LIBAVDEVICE libavdevice/avdevice.h
2249 get_version LIBAVFORMAT libavformat/avformat.h
2250 get_version LIBAVUTIL libavutil/avutil.h
2251 get_version LIBAVFILTER libavfilter/avfilter.h
2253 if enabled shared; then
2254 echo "BUILD_SHARED=yes" >> config.mak
2255 echo "PIC=-fPIC -DPIC" >> config.mak
2256 echo "LIBTARGET=${LIBTARGET}" >> config.mak
2257 echo "SLIBNAME=${SLIBNAME}" >> config.mak
2258 echo "SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}" >> config.mak
2259 echo "SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}" >> config.mak
2260 echo "SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}" >> config.mak
2261 echo "SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}" >> config.mak
2262 echo "SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}" >> config.mak
2263 echo "SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}" >> config.mak
2265 echo "LIB_INSTALL_EXTRA_CMD=${LIB_INSTALL_EXTRA_CMD}" >> config.mak
2266 echo "EXTRALIBS=$extralibs" >> config.mak
2268 print_config ARCH_ $TMPH config.mak $ARCH_LIST
2269 print_config HAVE_ $TMPH config.mak $HAVE_LIST
2270 print_config CONFIG_ $TMPH config.mak $CONFIG_LIST \
2271 $CONFIG_EXTRA \
2272 $DECODER_LIST \
2273 $ENCODER_LIST \
2274 $PARSER_LIST \
2275 $BSF_LIST \
2276 $DEMUXER_LIST \
2277 $MUXER_LIST \
2278 $FILTER_LIST \
2279 $PROTOCOL_LIST \
2280 $INDEV_LIST \
2281 $OUTDEV_LIST \
2283 echo "#define restrict $_restrict" >> $TMPH
2285 if enabled small; then
2286 echo "#define av_always_inline" >> $TMPH
2289 echo "SRC_PATH=\"$source_path\"" >> config.mak
2290 echo "SRC_PATH_BARE=$source_path" >> config.mak
2291 echo "BUILD_ROOT=\"$PWD\"" >> config.mak
2293 # Apparently it's not possible to portably echo a backslash.
2294 enabled asmalign_pot &&
2295 printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH ||
2296 printf '#define ASMALIGN(ZEROBITS) ".align 1 << " #ZEROBITS "\\n\\t"\n' >> $TMPH
2298 echo "#define EXTERN_PREFIX \"${extern_prefix}\"" >> $TMPH
2300 echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
2302 # Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
2303 cmp -s $TMPH config.h &&
2304 echo "config.h is unchanged" ||
2305 mv -f $TMPH config.h
2307 rm -f $TMPC $TMPE $TMPH $TMPO $TMPS $TMPSH
2309 # build tree in object directory if source path is different from current one
2310 if enabled source_path_used; then
2311 DIRS="\
2312 doc \
2313 libavcodec \
2314 libavcodec/alpha \
2315 libavcodec/armv4l \
2316 libavcodec/bfin \
2317 libavcodec/i386 \
2318 libavcodec/mlib \
2319 libavcodec/ppc \
2320 libavcodec/sh4 \
2321 libavcodec/sparc \
2322 libavdevice \
2323 libavfilter \
2324 libavformat \
2325 libavutil \
2326 libpostproc \
2327 libswscale \
2328 tests \
2329 tools \
2330 vhook \
2332 FILES="\
2333 Makefile \
2334 common.mak \
2335 subdir.mak \
2336 doc/texi2pod.pl \
2337 libavcodec/Makefile \
2338 libavdevice/Makefile \
2339 libavfilter/Makefile \
2340 libavformat/Makefile \
2341 libavutil/Makefile \
2342 libpostproc/Makefile \
2343 libswscale/Makefile \
2345 for dir in $DIRS ; do
2346 mkdir -p $dir
2347 done
2348 for f in $FILES ; do
2349 $ln_s "$source_path/$f" $f
2350 done
2354 # build pkg-config files
2356 pkgconfig_generate(){
2357 name=$1
2358 shortname=${name#lib}${build_suffix}
2359 comment=$2
2360 version=$3
2361 libs=$4
2362 requires=$5
2363 cat <<EOF > $name/$name.pc
2364 prefix=$prefix
2365 exec_prefix=\${prefix}
2366 libdir=$libdir
2367 includedir=$incdir
2369 Name: $name
2370 Description: $comment
2371 Version: $version
2372 Requires: $(disabled shared && echo $requires)
2373 Requires.private: $(enabled shared && echo $requires)
2374 Conflicts:
2375 Libs: -L\${libdir} -l${shortname} $(disabled shared && echo $libs)
2376 Libs.private: $(enabled shared && echo $libs)
2377 Cflags: -I\${includedir}
2379 cat <<EOF > $name/$name-uninstalled.pc
2380 prefix=
2381 exec_prefix=
2382 libdir=\${pcfiledir}
2383 includedir=${source_path}
2385 Name: $name
2386 Description: $comment
2387 Version: $version
2388 Requires: $requires
2389 Conflicts:
2390 Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
2391 Cflags: -I\${includedir}
2395 pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
2396 pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "$pkg_requires libavutil = $LIBAVUTIL_VERSION"
2397 pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "$pkg_requires libavcodec = $LIBAVCODEC_VERSION"
2398 pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "$pkg_requires libavformat = $LIBAVFORMAT_VERSION"
2399 enabled avfilter &&
2400 pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "$pkg_requires libavutil = $LIBAVUTIL_VERSION"
2401 enabled postproc &&
2402 pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
2403 if enabled swscale; then
2404 pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"
2405 else
2406 pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "$pkg_requires libavcodec = $LIBAVCODEC_VERSION"
2407 apply libswscale/libswscale.pc sed s/^Libs:.*$/Libs:/