Move zlib/bzlib options to the external library section of the help output and
[FFMpeg-mirror/ffmpeg-vdpau.git] / configure
blob777b7265908aea41cb8aa5d60ee674bd11a1d2a3
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 " --enable-beosthreads use BeOS threads [no]"
84 echo " --enable-os2threads use OS/2 threads [no]"
85 echo " --enable-pthreads use pthreads [no]"
86 echo " --enable-w32threads use Win32 threads [no]"
87 echo " --enable-x11grab enable X11 grabbing [no]"
88 echo
89 echo "External library support:"
90 echo " --enable-mlib enable Sun medialib [no]"
91 echo " --enable-avisynth enable reading of AVISynth script files [no]"
92 echo " --enable-bzlib enable bzlib [no]"
93 echo " --enable-libamr-nb enable libamr-nb floating point audio codec"
94 echo " --enable-libamr-wb enable libamr-wb floating point audio codec"
95 echo " --enable-libdc1394 enable IIDC-1394 grabbing using libdc1394"
96 echo " and libraw1394 [no]"
97 echo " --enable-libdirac enable Dirac support via libdirac [no]"
98 echo " --enable-libfaac enable FAAC support via libfaac [no]"
99 echo " --enable-libfaad enable FAAD support via libfaad [no]"
100 echo " --enable-libfaadbin open libfaad.so.0 at runtime [no]"
101 echo " --enable-libgsm enable GSM support via libgsm [no]"
102 echo " --enable-libmp3lame enable MP3 encoding via libmp3lame [no]"
103 echo " --enable-libnut enable NUT (de)muxing via libnut,"
104 echo " native (de)muxer exists [no]"
105 echo " --enable-libschroedinger enable Dirac support via libschroedinger [no]"
106 echo " --enable-libspeex enable Speex decoding via libspeex [no]"
107 echo " --enable-libtheora enable Theora encoding via libtheora [no]"
108 echo " --enable-libvorbis enable Vorbis encoding via libvorbis,"
109 echo " native implementation exists [no]"
110 echo " --enable-libx264 enable H.264 encoding via x264 [no]"
111 echo " --enable-libxvid enable Xvid encoding via xvidcore,"
112 echo " native MPEG-4/Xvid encoder exists [no]"
113 echo " --enable-zlib enable zlib [no]"
114 echo ""
115 echo "Advanced options (experts only):"
116 echo " --source-path=PATH path to source code [$source_path]"
117 echo " --cross-prefix=PREFIX use PREFIX for compilation tools [$cross_prefix]"
118 echo " --enable-cross-compile assume a cross-compiler is used"
119 echo " --target-os=OS compiler targets OS [$target_os]"
120 echo " --cc=CC use C compiler CC [$cc]"
121 echo " --extra-cflags=ECFLAGS add ECFLAGS to CFLAGS [$CFLAGS]"
122 echo " --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]"
123 echo " --extra-libs=ELIBS add ELIBS [$ELIBS]"
124 echo " --extra-version=STRING version string suffix []"
125 echo " --build-suffix=SUFFIX library name suffix []"
126 echo " --arch=ARCH select architecture [$arch]"
127 echo " --cpu=CPU select the minimum required CPU (affects"
128 echo " instruction selection, may crash on older CPUs)"
129 echo " --enable-powerpc-perf enable performance report on PPC"
130 echo " (requires enabling PMC)"
131 echo " --disable-mmx disable MMX optimizations"
132 echo " --disable-mmx2 disable MMX2 optimizations"
133 echo " --disable-ssse3 disable SSSE3 optimizations"
134 echo " --disable-armv5te disable armv5te optimizations"
135 echo " --disable-armv6 disable armv6 optimizations"
136 echo " --disable-armvfp disable ARM VFP optimizations"
137 echo " --disable-iwmmxt disable iwmmxt optimizations"
138 echo " --disable-altivec disable AltiVec optimizations"
139 echo " --disable-network disable network support [no]"
140 echo " --disable-ipv6 disable IPv6 support [no]"
141 echo " --disable-vhook disable video hooking support"
142 echo " --disable-mpegaudio-hp faster (but less accurate)"
143 echo " MPEG audio decoding [no]"
144 echo " --enable-gray enable full grayscale support (slower color)"
145 echo " --disable-ffmpeg disable ffmpeg build"
146 echo " --disable-ffserver disable ffserver build"
147 echo " --disable-ffplay disable ffplay build"
148 echo " --enable-small optimize for size instead of speed"
149 echo " --enable-hardcoded-tables use hardcoded tables instead of runtime generation"
150 echo " --enable-memalign-hack emulate memalign, interferes with memory debuggers"
151 echo " --disable-encoder=NAME disable encoder NAME"
152 echo " --enable-encoder=NAME enable encoder NAME"
153 echo " --disable-decoder=NAME disable decoder NAME"
154 echo " --enable-decoder=NAME enable decoder NAME"
155 echo " --disable-encoders disable all encoders"
156 echo " --disable-decoders disable all decoders"
157 echo " --disable-muxer=NAME disable muxer NAME"
158 echo " --enable-muxer=NAME enable muxer NAME"
159 echo " --disable-muxers disable all muxers"
160 echo " --disable-demuxer=NAME disable demuxer NAME"
161 echo " --enable-demuxer=NAME enable demuxer NAME"
162 echo " --disable-demuxers disable all demuxers"
163 echo " --enable-parser=NAME enable parser NAME"
164 echo " --disable-parser=NAME disable parser NAME"
165 echo " --disable-parsers disable all parsers"
166 echo " --enable-bsf=NAME enable bitstream filter NAME"
167 echo " --disable-bsf=NAME disable bitstream filter NAME"
168 echo " --disable-bsfs disable all bitstream filters"
169 echo " --enable-protocol=NAME enable protocol NAME"
170 echo " --disable-protocol=NAME disable protocol NAME"
171 echo " --disable-protocols disable all protocols"
172 echo " --disable-devices disable all devices"
173 echo " --enable-filter=NAME enable filter NAME"
174 echo " --disable-filter=NAME disable filter NAME"
175 echo " --disable-filters disable all filters"
176 echo " --list-decoders show all available decoders"
177 echo " --list-encoders show all available encoders"
178 echo " --list-muxers show all available muxers"
179 echo " --list-demuxers show all available demuxers"
180 echo " --list-parsers show all available parsers"
181 echo " --list-protocols show all available protocols"
182 echo " --list-bsfs show all available bitstream filters"
183 echo " --list-indevs show all available input devices"
184 echo " --list-outdevs show all available output devices"
185 echo " --list-filters show all available filters"
186 echo
187 echo "Developer options (useful when working on FFmpeg itself):"
188 echo " --disable-debug disable debugging symbols"
189 echo " --enable-debug=LEVEL set the debug level [$debuglevel]"
190 echo " --enable-gprof enable profiling with gprof [$gprof]"
191 echo " --disable-optimizations disable compiler optimizations"
192 echo " --enable-extra-warnings enable more compiler warnings"
193 echo " --disable-stripping disable stripping of executables and shared libraries"
194 echo ""
195 echo "NOTE: Object files are built at the place where configure is launched."
196 exit 0
199 log(){
200 echo "$@" >> $logfile
203 log_file(){
204 log BEGIN $1
205 pr -n -t $1 >> $logfile
206 log END $1
209 echolog(){
210 log "$@"
211 echo "$@"
214 die(){
215 echolog "$@"
216 cat <<EOF
217 If you think configure made a mistake, make sure you are using the latest
218 version from SVN. If the latest version fails, report the problem to the
219 ffmpeg-user@mplayerhq.hu mailing list or IRC #ffmpeg on irc.freenode.net.
221 if disabled logging; then
222 cat <<EOF
223 Rerun configure with logging enabled (do not use --disable-logging), and
224 include the log this produces with your report.
226 else
227 cat <<EOF
228 Include the log file "$logfile" produced by configure as this will help
229 solving the problem.
232 rm -f $TMPC $TMPE $TMPH $TMPO $TMPS $TMPSH
233 exit 1
236 # Avoid locale weirdness, besides we really just want to translate ASCII.
237 toupper(){
238 echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
241 tolower(){
242 echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
245 set_all(){
246 value=$1
247 shift
248 for var in $*; do
249 eval $var=$value
250 done
253 set_weak(){
254 value=$1
255 shift
256 for var; do
257 eval : \${$var:=$value}
258 done
261 pushvar(){
262 for var in $*; do
263 eval level=\${${var}_level:=0}
264 eval ${var}_${level}="\$$var"
265 eval ${var}_level=$(($level+1))
266 done
269 popvar(){
270 for var in $*; do
271 eval level=\${${var}_level:-0}
272 test $level = 0 && continue
273 eval level=$(($level-1))
274 eval $var="\${${var}_${level}}"
275 eval ${var}_level=$level
276 eval unset ${var}_${level}
277 done
280 enable(){
281 set_all yes $*
284 disable(){
285 set_all no $*
288 enable_weak(){
289 set_weak yes $*
292 disable_weak(){
293 set_weak no $*
296 do_enable_deep(){
297 for var; do
298 enabled $var && continue
299 eval sel="\$${var}_select"
300 eval sgs="\$${var}_suggest"
301 pushvar var sgs
302 enable_deep $sel
303 popvar sgs
304 enable_deep_weak $sgs
305 popvar var
306 done
309 enable_deep(){
310 do_enable_deep $*
311 enable $*
314 enable_deep_weak(){
315 do_enable_deep $*
316 enable_weak $*
319 enabled(){
320 test "${1#!}" = "$1" && op== || op=!=
321 eval test "x\$${1#!}" $op "xyes"
324 disabled(){
325 test "${1#!}" = "$1" && op== || op=!=
326 eval test "x\$${1#!}" $op "xno"
329 enabled_all(){
330 for opt; do
331 enabled $opt || return 1
332 done
335 disabled_all(){
336 for opt; do
337 disabled $opt || return 1
338 done
341 enabled_any(){
342 for opt; do
343 enabled $opt && return 0
344 done
347 disabled_any(){
348 for opt; do
349 disabled $opt && return 0
350 done
351 return 1
354 set_default(){
355 for opt; do
356 eval test -z "\$$opt" && eval $opt=\$${opt}_default
357 done
360 is_in(){
361 value=$1
362 shift
363 for var in $*; do
364 [ $var = $value ] && return 0
365 done
366 return 1
369 check_deps(){
370 for cfg; do
371 cfg="${cfg#!}"
372 enabled ${cfg}_checking && die "Circular dependency for $cfg."
373 disabled ${cfg}_checking && continue
374 enable ${cfg}_checking
376 eval dep_all="\$${cfg}_deps"
377 eval dep_any="\$${cfg}_deps_any"
378 eval dep_sel="\$${cfg}_select"
379 eval dep_sgs="\$${cfg}_suggest"
381 pushvar cfg dep_all dep_any dep_sel dep_sgs
382 check_deps $dep_all $dep_any $dep_sel $dep_sgs
383 popvar cfg dep_all dep_any dep_sel dep_sgs
385 enabled_all $dep_all || disable $cfg
386 enabled_any $dep_any || disable $cfg
387 disabled_any $dep_sel && disable $cfg
389 if enabled $cfg; then
390 eval dep_extralibs="\$${cfg}_extralibs"
391 test -n "$dep_extralibs" && add_extralibs $dep_extralibs
392 enable_deep $dep_sel
393 enable_deep_weak $dep_sgs
396 disable ${cfg}_checking
397 done
400 print_config(){
401 pfx=$1
402 header=$2
403 makefile=$3
404 shift 3
405 for cfg; do
406 ucname="`toupper $cfg`"
407 if enabled $cfg; then
408 echo "#define ${pfx}${ucname} 1" >> $header
409 echo "#define ENABLE_${ucname} 1" >> $header
410 echo "${pfx}${ucname}=yes" >> $makefile
411 else
412 echo "#define ENABLE_${ucname} 0" >> $header
414 done
417 flags_saved(){
418 (: ${SAVE_CFLAGS?}) 2> /dev/null
421 save_flags(){
422 flags_saved && return
423 SAVE_CFLAGS="$CFLAGS"
424 SAVE_LDFLAGS="$LDFLAGS"
425 SAVE_extralibs="$extralibs"
428 restore_flags(){
429 flags_saved || return
430 CFLAGS="$SAVE_CFLAGS"
431 LDFLAGS="$SAVE_LDFLAGS"
432 extralibs="$SAVE_extralibs"
433 unset SAVE_CFLAGS
434 unset SAVE_LDFLAGS
435 unset SAVE_extralibs
438 temp_cflags(){
439 save_flags
440 CFLAGS="$CFLAGS $*"
443 temp_ldflags(){
444 save_flags
445 LDFLAGS="$LDFLAGS $*"
448 temp_extralibs(){
449 save_flags
450 extralibs="$extralibs $*"
453 append(){
454 var=$1
455 shift
456 flags_saved && eval "SAVE_$var=\"\$SAVE_$var $*\""
457 eval "$var=\"\$$var $*\""
460 add_cflags(){
461 append CFLAGS "$@"
464 add_ldflags(){
465 append LDFLAGS "$@"
468 add_extralibs(){
469 append extralibs "$@"
472 check_cmd(){
473 log "$@"
474 "$@" >> $logfile 2>&1
477 check_cc(){
478 log check_cc "$@"
479 cat > $TMPC
480 log_file $TMPC
481 check_cmd $cc $CFLAGS "$@" -c -o $TMPO $TMPC
484 check_cpp(){
485 log check_cpp "$@"
486 cat > $TMPC
487 log_file $TMPC
488 check_cmd $cc $CFLAGS "$@" -E -o $TMPO $TMPC
491 check_asm(){
492 log check_asm "$@"
493 name="$1"
494 asm="$2"
495 shift 2
496 check_cc "$@" <<EOF && enable $name || disable $name
497 int foo(void){ __asm__ volatile($asm); }
501 check_yasm(){
502 log check_yasm "$@"
503 echo "$1" > $TMPS
504 log_file $TMPS
505 shift 1
506 check_cmd $yasmexe $YASMFLAGS "$@" -o $TMPO $TMPS
509 check_ld(){
510 log check_ld "$@"
511 check_cc || return
512 flags=''
513 libs=''
514 for f; do
515 test "${f}" = "${f#-l}" && flags="$flags $f" || libs="$libs $f"
516 done
517 check_cmd $cc $LDFLAGS $flags -o $TMPE $TMPO $extralibs $libs
520 check_cflags(){
521 log check_cflags "$@"
522 check_cc "$@" <<EOF && add_cflags "$@"
523 int x;
527 check_ldflags(){
528 log check_ldflags "$@"
529 check_ld "$@" <<EOF && add_ldflags "$@"
530 int main(void){ return 0; }
534 check_header(){
535 log check_header "$@"
536 header=$1
537 shift
538 var=`echo $header | sed 's/[^A-Za-z0-9_]/_/g'`
539 disable $var
540 check_cpp "$@" <<EOF && enable $var
541 #include <$header>
542 int x;
546 check_func(){
547 log check_func "$@"
548 func=$1
549 shift
550 disable $func
551 check_ld "$@" <<EOF && enable $func
552 extern int $func();
553 int main(void){ $func(); }
557 check_func_headers(){
558 log check_func_headers "$@"
559 headers=$1
560 func=$2
561 shift 2
562 disable $func
563 incs=""
564 for hdr in $headers; do
565 incs="$incs
566 #include <$hdr>"
567 done
568 check_ld "$@" <<EOF && enable $func
569 $incs
570 int main(int argc, char **argv){
571 (void) $func;
572 return 0;
577 check_cpp_condition(){
578 log check_cpp_condition "$@"
579 header=$1
580 condition=$2
581 check_cpp <<EOF
582 #include <$header>
583 #if !($condition)
584 #error "unsatisfied condition: $condition"
585 #endif
589 check_lib(){
590 log check_lib "$@"
591 header="$1"
592 func="$2"
593 shift 2
594 temp_extralibs "$@"
595 check_header $header && check_func $func && add_extralibs "$@"
596 err=$?
597 restore_flags
598 return $err
601 check_lib2(){
602 log check_lib2 "$@"
603 headers="$1"
604 func="$2"
605 shift 2
606 temp_extralibs "$@"
607 check_func_headers "$headers" $func && add_extralibs "$@"
608 err=$?
609 restore_flags
610 return $err
613 check_exec(){
614 check_ld "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
617 check_exec_crash(){
618 code=`cat`
620 # exit() is not async signal safe. _Exit (C99) and _exit (POSIX)
621 # are safe but may not be available everywhere. Thus we use
622 # raise(SIGTERM) instead. The check is run in a subshell so we
623 # can redirect the "Terminated" message from the shell. SIGBUS
624 # is not defined by standard C so it is used conditionally.
626 (check_exec "$@") >> $logfile 2>&1 <<EOF
627 #include <signal.h>
628 static void sighandler(int sig){
629 raise(SIGTERM);
631 int main(void){
632 signal(SIGILL, sighandler);
633 signal(SIGFPE, sighandler);
634 signal(SIGSEGV, sighandler);
635 #ifdef SIGBUS
636 signal(SIGBUS, sighandler);
637 #endif
638 { $code }
643 check_type(){
644 log check_type "$@"
645 headers=$1
646 type=$2
647 shift 2
648 disable $type
649 incs=""
650 for hdr in $headers; do
651 incs="$incs
652 #include <$hdr>"
653 done
654 check_cc "$@" <<EOF && enable $type
655 $incs
656 $type v;
660 require(){
661 name="$1"
662 header="$2"
663 func="$3"
664 shift 3
665 check_lib $header $func "$@" || die "ERROR: $name not found"
668 require2(){
669 name="$1"
670 headers="$2"
671 func="$3"
672 shift 3
673 check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
676 check_foo_config(){
677 cfg=$1
678 pkg=$2
679 header=$3
680 func=$4
681 shift 4
682 disable $cfg
683 check_cmd ${pkg}-config --version
684 err=$?
685 if test "$err" = 0; then
686 temp_cflags `${pkg}-config --cflags`
687 temp_extralibs `${pkg}-config --libs`
688 check_lib "$@" $header $func && enable $cfg
690 return $err
693 apply(){
694 file=$1
695 shift
696 "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
699 # CONFIG_LIST contains configurable options, while HAVE_LIST is for
700 # system-dependent things.
702 COMPONENT_LIST="
703 bsfs
704 decoders
705 demuxers
706 encoders
707 filters
708 indevs
709 muxers
710 outdevs
711 parsers
712 protocols
715 CONFIG_LIST="
716 $COMPONENT_LIST
717 avfilter
718 avfilter_lavf
719 avisynth
720 beos_netserver
721 bzlib
722 ffmpeg
723 ffplay
724 ffserver
726 golomb
728 gprof
729 gray
730 hardcoded_tables
731 ipv6
732 libamr_nb
733 libamr_wb
734 libdc1394
735 libdirac
736 libfaac
737 libfaad
738 libfaadbin
739 libgsm
740 libmp3lame
741 libnut
742 libschroedinger
743 libspeex
744 libtheora
745 libvorbis
746 libx264
747 libxvid
748 mdct
749 memalign_hack
750 mlib
751 mpegaudio_hp
752 network
753 nonfree
754 postproc
755 powerpc_perf
756 small
757 swscale
758 vhook
759 x11grab
760 zlib
763 THREADS_LIST='
764 beosthreads
765 os2threads
766 pthreads
767 w32threads
770 ARCH_LIST='
771 alpha
772 armv4l
773 bfin
774 ia64
775 m68k
776 mips
777 parisc
778 powerpc
779 s390
781 sparc
782 sparc64
784 x86_32
785 x86_64
788 ARCH_EXT_LIST='
789 altivec
790 armv5te
791 armv6
792 armvfp
793 iwmmxt
796 mmx2
797 neon
798 ssse3
802 HAVE_LIST="
803 $ARCH_EXT_LIST
804 $THREADS_LIST
805 altivec_h
806 arpa_inet_h
807 bswap
808 closesocket
809 cmov
810 conio_h
811 dcbzl
812 dev_bktr_ioctl_bt848_h
813 dev_bktr_ioctl_meteor_h
814 dev_ic_bt8xx_h
815 dev_video_meteor_ioctl_meteor_h
816 dev_video_bktr_ioctl_bt848_h
817 dlfcn_h
818 dlopen
819 dos_paths
820 ebp_available
821 ebx_available
822 fast_64bit
823 fast_cmov
824 fast_unaligned
825 fork
826 freetype2
827 gethrtime
828 GetProcessTimes
829 getrusage
830 imlib2
831 inet_aton
832 inline_asm
833 libdc1394_1
834 libdc1394_2
835 llrint
836 lrint
837 lrintf
838 machine_ioctl_bt848_h
839 machine_ioctl_meteor_h
840 malloc_h
841 memalign
842 mkstemp
844 ppc64
845 round
846 roundf
848 sdl_video_size
849 socklen_t
850 soundcard_h
851 poll_h
852 sys_mman_h
853 sys_resource_h
854 sys_select_h
855 sys_soundcard_h
856 sys_videoio_h
857 termios_h
858 threads
859 winsock2_h
860 yasm
863 # options emitted with CONFIG_ prefix but not available on command line
864 CONFIG_EXTRA="
865 fft_mmx
868 CMDLINE_SELECT="
869 $ARCH_EXT_LIST
870 $CONFIG_LIST
871 $THREADS_LIST
872 cross_compile
873 debug
874 extra_warnings
875 logging
876 optimizations
877 shared
878 static
879 stripping
882 PATHS_LIST='
883 bindir
884 incdir
885 libdir
886 mandir
887 prefix
888 shlibdir
891 CMDLINE_SET="
892 $PATHS_LIST
893 arch
894 build_suffix
897 cross_prefix
898 extra_version
899 logfile
900 source_path
901 target_os
904 # code dependency declarations
906 # architecture extensions
907 altivec_deps="powerpc"
908 armv5te_deps="armv4l"
909 armv6_deps="armv4l"
910 armvfp_deps="armv4l"
911 iwmmxt_deps="armv4l"
912 mmi_deps="mips"
913 mmx_deps="x86"
914 mmx2_deps="x86 mmx"
915 neon_deps="armv4l"
916 ssse3_deps="x86"
917 vis_deps="sparc"
919 # common features
920 fft_suggest="fft_mmx"
921 fft_mmx_deps="mmx yasm"
923 # decoders / encoders
924 aac_decoder_select="fft mdct"
925 ac3_decoder_deps="gpl"
926 ac3_decoder_select="fft mdct"
927 atrac3_decoder_select="fft mdct"
928 cavs_decoder_select="golomb"
929 cook_decoder_select="fft mdct"
930 cscd_decoder_suggest="zlib"
931 dca_decoder_select="fft mdct"
932 dxa_decoder_select="zlib"
933 eac3_decoder_deps="gpl"
934 eac3_decoder_select="fft mdct"
935 ffv1_decoder_select="golomb"
936 flac_decoder_select="golomb"
937 flac_encoder_select="golomb"
938 flashsv_decoder_select="zlib"
939 flashsv_encoder_select="zlib"
940 h264_decoder_select="golomb"
941 imc_decoder_select="fft mdct"
942 jpegls_decoder_select="golomb"
943 jpegls_encoder_select="golomb"
944 loco_decoder_select="golomb"
945 mpeg_xvmc_decoder_deps="xvmc"
946 nellymoser_decoder_select="fft mdct"
947 nellymoser_encoder_select="fft mdct"
948 png_decoder_select="zlib"
949 png_encoder_select="zlib"
950 qdm2_decoder_select="fft mdct"
951 shorten_decoder_select="golomb"
952 sonic_decoder_select="golomb"
953 sonic_encoder_select="golomb"
954 sonic_ls_encoder_select="golomb"
955 svq3_decoder_select="golomb"
956 svq3_decoder_suggest="zlib"
957 tiff_decoder_suggest="zlib"
958 tiff_encoder_suggest="zlib"
959 tscc_decoder_select="zlib"
960 vorbis_decoder_select="fft mdct"
961 vorbis_encoder_select="fft mdct"
962 wmav1_decoder_select="fft mdct"
963 wmav1_encoder_select="fft mdct"
964 wmav2_decoder_select="fft mdct"
965 wmav2_encoder_select="fft mdct"
966 zlib_decoder_select="zlib"
967 zlib_encoder_select="zlib"
968 zmbv_decoder_select="zlib"
969 zmbv_encoder_select="zlib"
971 # external libraries
972 libamr_nb_decoder_deps="libamr_nb"
973 libamr_nb_encoder_deps="libamr_nb"
974 libamr_wb_decoder_deps="libamr_wb"
975 libamr_wb_encoder_deps="libamr_wb"
976 libdirac_decoder_deps="libdirac !libschroedinger"
977 libdirac_encoder_deps="libdirac"
978 libfaac_encoder_deps="libfaac"
979 libfaad_decoder_deps="libfaad"
980 libfaadbin_decoder_extralibs='$ldl'
981 libgsm_decoder_deps="libgsm"
982 libgsm_encoder_deps="libgsm"
983 libgsm_ms_decoder_deps="libgsm"
984 libgsm_ms_encoder_deps="libgsm"
985 libmp3lame_encoder_deps="libmp3lame"
986 libschroedinger_decoder_deps="libschroedinger"
987 libschroedinger_encoder_deps="libschroedinger"
988 libspeex_decoder_deps="libspeex"
989 libtheora_encoder_deps="libtheora"
990 libvorbis_encoder_deps="libvorbis"
991 libx264_encoder_deps="libx264"
992 libxvid_encoder_deps="libxvid"
993 mpeg4aac_decoder_deps="libfaad"
995 # demuxers / muxers
996 ac3_demuxer_deps="ac3_parser"
997 audio_beos_demuxer_deps="audio_beos"
998 audio_beos_demuxer_extralibs="-lmedia -lbe"
999 audio_beos_muxer_deps="audio_beos"
1000 audio_beos_muxer_extralibs="-lmedia -lbe"
1001 avisynth_demuxer_deps="avisynth"
1002 bktr_demuxer_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
1003 dirac_demuxer_deps="dirac_parser"
1004 dv1394_demuxer_deps="dv1394 dv_demuxer"
1005 libdc1394_demuxer_deps="libdc1394"
1006 libnut_demuxer_deps="libnut"
1007 libnut_muxer_deps="libnut"
1008 matroska_demuxer_suggest="zlib bzlib"
1009 mov_demuxer_suggest="zlib"
1010 mp3_demuxer_deps="mpegaudio_parser"
1011 oss_demuxer_deps_any="soundcard_h sys_soundcard_h"
1012 oss_muxer_deps_any="soundcard_h sys_soundcard_h"
1013 redir_demuxer_deps="network"
1014 rtp_muxer_deps="network rtp_protocol"
1015 rtsp_demuxer_deps="sdp_demuxer"
1016 sdp_demuxer_deps="rtp_protocol mpegts_demuxer"
1017 v4l_demuxer_deps="linux_videodev_h"
1018 v4l2_demuxer_deps_any="linux_videodev2_h sys_videoio_h"
1019 vfwcap_demuxer_deps="capCreateCaptureWindow"
1020 vfwcap_demuxer_extralibs="-lvfw32"
1021 x11_grab_device_demuxer_deps="x11grab XShmCreateImage"
1022 x11_grab_device_demuxer_extralibs="-lX11 -lXext"
1024 # protocols
1025 http_protocol_deps="network"
1026 rtp_protocol_deps="udp_protocol"
1027 tcp_protocol_deps="network"
1028 udp_protocol_deps="network"
1030 # filters
1031 movie_filter_deps="avfilter_lavf"
1033 # programs
1034 ffplay_deps="sdl"
1035 ffserver_deps="ffm_muxer rtp_protocol rtsp_demuxer"
1036 ffserver_extralibs='$ldl'
1037 vhook_extralibs='$ldl'
1040 # default parameters
1042 logfile="config.err"
1044 # installation paths
1045 prefix_default="/usr/local"
1046 bindir_default='${prefix}/bin'
1047 incdir_default='${prefix}/include'
1048 libdir_default='${prefix}/lib'
1049 mandir_default='${prefix}/share/man'
1050 shlibdir_default="$libdir_default"
1052 # toolchain
1053 cc_default="gcc"
1054 yasmexe="yasm"
1055 ar="ar"
1056 nm="nm"
1057 ranlib="ranlib"
1058 strip="strip"
1059 asmalign_pot="unknown"
1060 ln_s="ln -sf"
1061 objformat="elf"
1063 # machine
1064 arch=`uname -m`
1065 cpu="generic"
1067 # OS
1068 target_os=$(tolower $(uname -s))
1070 # configurable options
1071 enable debug
1072 enable ffmpeg
1073 enable ffplay
1074 enable ffserver
1075 enable ipv6
1076 enable mpegaudio_hp
1077 enable network
1078 enable optimizations
1079 enable protocols
1080 enable static
1081 enable stripping
1082 vhook="default"
1084 # build settings
1085 add_cflags -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112
1086 SHFLAGS='-shared -Wl,-soname,$$(@F)'
1087 VHOOKSHFLAGS='$(SHFLAGS)'
1088 FFSERVERLDFLAGS=-Wl,-E
1089 LIBPREF="lib"
1090 LIBSUF=".a"
1091 FULLNAME='$(NAME)$(BUILDSUF)'
1092 LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
1093 SLIBPREF="lib"
1094 SLIBSUF=".so"
1095 SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
1096 SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
1097 SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
1098 LIB_INSTALL_EXTRA_CMD='$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
1100 # gcc stupidly only outputs the basename of targets with -MM, but we need the
1101 # full relative path for objects in subdirectories for non-recursive Make.
1102 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,"'
1104 # find source path
1105 source_path="`dirname \"$0\"`"
1106 enable source_path_used
1107 if test -z "$source_path" -o "$source_path" = "." ; then
1108 source_path="`pwd`"
1109 disable source_path_used
1110 else
1111 source_path="`cd \"$source_path\"; pwd`"
1112 echo "$source_path" | grep -q '[[:blank:]]' &&
1113 die "Out of tree builds are impossible with whitespace in source path."
1116 FFMPEG_CONFIGURATION="$@"
1118 find_things(){
1119 thing=$1
1120 pattern=$2
1121 file=$source_path/$3
1122 sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
1125 ENCODER_LIST=$(find_things encoder ENC libavcodec/allcodecs.c)
1126 DECODER_LIST=$(find_things decoder DEC libavcodec/allcodecs.c)
1127 PARSER_LIST=$(find_things parser PARSER libavcodec/allcodecs.c)
1128 BSF_LIST=$(find_things bsf BSF libavcodec/allcodecs.c)
1129 MUXER_LIST=$(find_things muxer _MUX libavformat/allformats.c)
1130 DEMUXER_LIST=$(find_things demuxer DEMUX libavformat/allformats.c)
1131 OUTDEV_LIST=$(find_things muxer _MUX libavdevice/alldevices.c)
1132 INDEV_LIST=$(find_things demuxer DEMUX libavdevice/alldevices.c)
1133 PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
1134 FILTER_LIST=$(find_things filter FILTER libavfilter/allfilters.c)
1136 enable $ARCH_EXT_LIST \
1137 $DECODER_LIST \
1138 $ENCODER_LIST \
1139 $PARSER_LIST \
1140 $BSF_LIST \
1141 $DEMUXER_LIST \
1142 $MUXER_LIST \
1143 $FILTER_LIST \
1144 $PROTOCOL_LIST \
1145 $INDEV_LIST \
1146 $OUTDEV_LIST \
1148 die_unknown(){
1149 echo "Unknown option \"$1\"."
1150 echo "See $0 --help for available options."
1151 exit 1
1154 show_list() {
1155 suffix=_$1
1156 shift
1157 echo $* | sed s/$suffix//g | tr ' ' '\n' | sort
1158 exit 0
1161 for opt do
1162 optval="${opt#*=}"
1163 case "$opt" in
1164 --extra-cflags=*) add_cflags "$optval"
1166 --extra-ldflags=*) add_ldflags "$optval"
1168 --extra-libs=*) add_extralibs "$optval"
1170 --disable-devices) disable $INDEV_LIST $OUTDEV_LIST
1172 --enable-debug=*) debuglevel="$optval"
1174 --enable-*=*|--disable-*=*)
1175 eval `echo "$opt" | sed 's/=/-/;s/--/action=/;s/-/ thing=/;s/-/ name=/'`
1176 case "$thing" in
1177 encoder|decoder|muxer|demuxer|parser|bsf|protocol|filter) $action ${optval}_${thing} ;;
1178 *) die_unknown "$opt" ;;
1179 esac
1181 --enable-?*|--disable-?*)
1182 eval `echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g'`
1183 if is_in $option $COMPONENT_LIST; then
1184 eval $action \$$(toupper ${option%s})_LIST
1185 elif is_in $option $CMDLINE_SELECT; then
1186 $action $option
1187 else
1188 die_unknown $opt
1191 --list-*)
1192 NAME="${opt#--list-}"
1193 is_in $NAME $COMPONENT_LIST || die_unknown $opt
1194 NAME=${NAME%s}
1195 eval show_list $NAME \$$(toupper $NAME)_LIST
1197 --help|-h) show_help
1200 optname="${opt%%=*}"
1201 optname="${optname#--}"
1202 optname=$(echo "$optname" | sed 's/-/_/g')
1203 is_in $optname $CMDLINE_SET || die_unknown $opt
1204 eval $optname='$optval'
1206 esac
1207 done
1209 disabled logging && logfile=/dev/null
1211 echo "# $0 $@" > $logfile
1212 set >> $logfile
1214 cc_default="${cross_prefix}${cc_default}"
1215 yasmexe="${cross_prefix}${yasmexe}"
1216 ar="${cross_prefix}${ar}"
1217 nm="${cross_prefix}${nm}"
1218 ranlib="${cross_prefix}${ranlib}"
1219 strip="${cross_prefix}${strip}"
1221 set_default cc
1223 # set temporary file name
1224 if test ! -z "$TMPDIR" ; then
1225 TMPDIR1="${TMPDIR}"
1226 elif test ! -z "$TEMPDIR" ; then
1227 TMPDIR1="${TEMPDIR}"
1228 else
1229 TMPDIR1="/tmp"
1232 TMPC="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.c"
1233 TMPE="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}${EXESUF}"
1234 TMPH="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.h"
1235 TMPO="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.o"
1236 TMPS="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.S"
1237 TMPSH="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.sh"
1239 check_cflags -std=c99
1241 case "$arch" in
1242 i386|i486|i586|i686|i86pc|BePC)
1243 arch="x86_32"
1244 enable fast_unaligned
1246 x86_64|amd64)
1247 arch="x86_32"
1248 enable cmov
1249 enable fast_cmov
1250 enable fast_unaligned
1251 check_cc <<EOF && enable fast_64bit && arch="x86_64"
1252 int test[sizeof(char*) - 7];
1255 # armv4l is a subset of armv[567]*l
1256 arm|armv[4567]*l)
1257 arch="armv4l"
1259 alpha)
1260 arch="alpha"
1261 enable fast_64bit
1263 "Power Macintosh"|ppc|powerpc)
1264 arch="powerpc"
1265 enable fast_unaligned
1267 ppc64)
1268 arch="powerpc"
1269 enable fast_64bit
1270 enable fast_unaligned
1272 mips|mipsel|IP*)
1273 arch="mips"
1275 sun4u|sparc64)
1276 arch="sparc64"
1277 enable fast_64bit
1279 sparc)
1280 arch="sparc"
1282 sh4)
1283 arch="sh4"
1285 parisc)
1286 arch="parisc"
1288 parisc64)
1289 arch="parisc"
1290 enable fast_64bit
1292 s390|s390x)
1293 arch="s390"
1295 m68k)
1296 arch="m68k"
1298 ia64)
1299 arch="ia64"
1300 enable fast_64bit
1302 bfin)
1303 arch="bfin"
1306 arch="unknown"
1308 esac
1310 enable $arch
1311 enabled_any x86_32 x86_64 && enable x86
1312 enabled sparc64 && enable sparc
1314 # OS specific
1315 case $target_os in
1316 beos|haiku|zeta)
1317 prefix_default="$HOME/config"
1318 # helps building libavcodec
1319 add_cflags "-DPIC -fomit-frame-pointer"
1320 # 3 gcc releases known for BeOS, each with ugly bugs
1321 gcc_version="`$cc -v 2>&1 | grep version | cut -d ' ' -f3-`"
1322 case "$gcc_version" in
1323 2.9-beos-991026*|2.9-beos-000224*) echo "R5/GG gcc"
1324 disable mmx
1326 *20010315*) echo "BeBits gcc"
1327 add_cflags "-fno-expensive-optimizations"
1329 esac
1330 SHFLAGS=-nostart
1331 # enable BeOS things
1332 enable audio_beos
1333 # no need for libm, but the inet stuff
1334 # Check for BONE
1335 # XXX: actually should check for NOT net_server
1336 if echo $BEINCLUDES | grep -q 'headers/be/bone'; then
1337 network_extralibs="-lbind -lsocket"
1338 else
1339 enable beos_netserver
1340 network_extralibs="-lnet"
1341 fi ;;
1342 sunos)
1343 FFSERVERLDFLAGS=""
1344 SHFLAGS='-shared -Wl,-h,$$(@F)'
1345 network_extralibs="-lsocket -lnsl"
1347 netbsd)
1348 oss_demuxer_extralibs="-lossaudio"
1349 oss_muxer_extralibs="-lossaudio"
1351 openbsd)
1352 disable need_memalign
1353 LIBOBJFLAGS='$(PIC)'
1354 SHFLAGS='-shared'
1355 SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF).$(LIBVERSION)'
1356 SLIBNAME_WITH_VERSION='$(SLIBNAME)'
1357 SLIBNAME_WITH_MAJOR='$(SLIBNAME)'
1358 oss_demuxer_extralibs="-lossaudio"
1359 oss_muxer_extralibs="-lossaudio"
1361 freebsd)
1362 disable need_memalign
1364 bsd/os)
1365 osextralibs="-lpoll -lgnugetopt"
1366 strip="strip -d"
1368 darwin)
1369 disable need_memalign
1370 SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR) -Wl,-read_only_relocs,suppress'
1371 VHOOKSHFLAGS='-dynamiclib -Wl,-single_module -flat_namespace -undefined suppress -Wl,-install_name,$(SHLIBDIR)/vhook/$$(@F)'
1372 strip="strip -x"
1373 FFLDFLAGS="-Wl,-dynamic,-search_paths_first"
1374 SLIBSUF=".dylib"
1375 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
1376 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
1377 FFSERVERLDFLAGS=-Wl,-bind_at_load
1378 objformat="macho"
1379 enabled x86_64 && objformat="macho64"
1381 mingw32*)
1382 target_os=mingw32
1383 LIBTARGET=i386
1384 if test $arch = x86_64; then
1385 disable need_memalign
1386 LIBTARGET=x64
1388 shlibdir_default="$bindir_default"
1389 VHOOKSHFLAGS='-shared -L$(BUILD_ROOT)/libavformat -L$(BUILD_ROOT)/libavcodec -L$(BUILD_ROOT)/libavutil'
1390 VHOOKLIBS='-lavformat$(BUILDSUF) -lavcodec$(BUILDSUF) -lavutil$(BUILDSUF) $(EXTRALIBS)'
1391 if enabled swscale; then
1392 VHOOKSHFLAGS="$VHOOKSHFLAGS -L\$(BUILD_ROOT)/libswscale"
1393 VHOOKLIBS="$VHOOKLIBS -lswscale\$(BUILDSUF)"
1395 disable ffserver
1396 SLIBPREF=""
1397 SLIBSUF=".dll"
1398 EXESUF=".exe"
1399 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1400 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1401 SLIB_EXTRA_CMD='-lib /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)'
1402 SLIB_INSTALL_EXTRA_CMD='-install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"; \
1403 install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)"'
1404 SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"'
1405 SHFLAGS='-shared -Wl,--output-def,$$(@:$(SLIBSUF)=.def) -Wl,--enable-runtime-pseudo-reloc -Wl,--enable-auto-image-base'
1406 objformat="win32"
1407 enable dos_paths
1408 check_cpp_condition _mingw.h "(__MINGW32_MAJOR_VERSION > 3) || (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
1409 die "ERROR: MinGW runtime version must be >= 3.15."
1410 enabled_any avisynth vfwcap_demuxer &&
1411 { check_cpp_condition w32api.h "(__W32API_MAJOR_VERSION > 3) || (__W32API_MAJOR_VERSION == 3 && __W32API_MINOR_VERSION >= 12)" ||
1412 die "ERROR: avisynth and vfwcap_demuxer require w32api version 3.12 or later."; }
1414 cygwin*)
1415 target_os=cygwin
1416 shlibdir_default="$bindir_default"
1417 VHOOKSHFLAGS='-shared -L$(BUILD_ROOT)/libavformat -L$(BUILD_ROOT)/libavcodec -L$(BUILD_ROOT)/libavutil'
1418 VHOOKLIBS='-lavformat$(BUILDSUF) -lavcodec$(BUILDSUF) -lavutil$(BUILDSUF) $(EXTRALIBS)'
1419 if enabled swscale; then
1420 VHOOKSHFLAGS="$VHOOKSHFLAGS -L\$(BUILD_ROOT)/libswscale"
1421 VHOOKLIBS="$VHOOKLIBS -lswscale\$(BUILDSUF)"
1423 EXESUF=".exe"
1424 SLIBPREF="cyg"
1425 SLIBSUF=".dll"
1426 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1427 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1428 SHFLAGS='-shared -Wl,--enable-auto-image-base'
1429 objformat="win32"
1430 enable dos_paths
1432 *-dos|freedos|opendos)
1433 disable ffplay ffserver vhook
1434 disable $INDEV_LIST $OUTDEV_LIST
1435 network_extralibs="-lsocket"
1436 EXESUF=".exe"
1437 objformat="win32"
1438 enable dos_paths
1440 linux)
1441 enable dv1394
1443 irix*)
1444 target_os=irix
1445 ranlib="echo ignoring ranlib"
1447 os/2*)
1448 strip="lxlite"
1449 ln_s="cp -f"
1450 EXESUF=".exe"
1451 FFLDFLAGS="-Zomf -Zbin-files -Zargs-wild -Zmap"
1452 SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
1453 FFSERVERLDFLAGS=""
1454 LIBSUF="_s.a"
1455 SLIBPREF=""
1456 SLIBSUF=".dll"
1457 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
1458 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
1459 SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
1460 echo PROTMODE >> $(SUBDIR)$(NAME).def; \
1461 echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
1462 echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
1463 echo EXPORTS >> $(SUBDIR)$(NAME).def; \
1464 emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
1465 SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
1466 emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
1467 SLIB_INSTALL_EXTRA_CMD='install -m 644 $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib "$(LIBDIR)"'
1468 SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.a "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.lib'
1469 disable vhook
1470 enable dos_paths
1472 interix)
1473 disable vhook
1477 target_os="${target_os}-UNKNOWN"
1479 esac
1481 set_default $PATHS_LIST
1483 add_extralibs $osextralibs
1485 # Combine FFLDFLAGS and the LDFLAGS environment variable.
1486 LDFLAGS="$FFLDFLAGS $LDFLAGS"
1488 test -n "$cross_prefix" && enable cross_compile
1490 # we need to build at least one lib type
1491 if ! enabled_any static shared; then
1492 cat <<EOF
1493 At least one library type must be built.
1494 Specify --enable-static to build the static libraries or --enable-shared to
1495 build the shared libraries as well. To only build the shared libraries specify
1496 --disable-static in addition to --enable-shared.
1498 exit 1;
1501 disabled static && LIBNAME=""
1503 if enabled_any libfaad libfaadbin ; then
1504 if check_header faad.h; then
1505 check_cc <<EOF
1506 #include <faad.h>
1507 #ifndef FAAD2_VERSION
1508 ok faad1
1509 #endif
1510 int main(void) { return 0; }
1512 test $? = 0 && enable libfaad2
1513 else
1514 die "FAAD test failed."
1519 if ! enabled gpl; then
1520 die_gpl_disabled(){
1521 name=$1
1522 shift
1523 enabled_any $@ && die "$name is under GPL and --enable-gpl is not specified."
1525 die_gpl_disabled "The Postprocessing code" postproc
1526 die_gpl_disabled "libx264" libx264
1527 die_gpl_disabled "libxvidcore" libxvid
1528 die_gpl_disabled "FAAD2" libfaad2
1529 die_gpl_disabled "The X11 grabber" x11grab
1530 die_gpl_disabled "The software scaler" swscale
1533 if ! enabled nonfree && enabled_any libamr_nb libamr_wb; then
1534 die "libamr is nonfree and --enable-nonfree is not specified."
1537 check_deps $ARCH_EXT_LIST
1539 test -z "$need_memalign" && need_memalign="$mmx"
1541 #Darwin CC versions
1542 if test $target_os = darwin; then
1543 if $cc -v 2>&1 | grep -q xlc; then
1544 add_cflags "-qpdf2 -qlanglvl=extc99 -qmaxmem=-1 -qarch=auto -qtune=auto"
1545 else
1546 add_cflags "-pipe"
1547 check_cflags "-force_cpusubtype_ALL"
1548 check_cflags "-Wno-sign-compare"
1549 enabled shared || check_cflags -mdynamic-no-pic
1553 disabled optimizations || check_cflags -fomit-frame-pointer
1555 # Add processor-specific flags
1556 if test $cpu != "generic"; then
1557 warn_altivec(){
1558 $1 altivec && echo "WARNING: Tuning for $2 but AltiVec $1.";
1560 case $cpu in
1561 601|ppc601|PowerPC601)
1562 add_cflags "-mcpu=601"
1563 warn_altivec enabled PPC601
1565 603*|ppc603*|PowerPC603*)
1566 add_cflags "-mcpu=603"
1567 warn_altivec enabled PPC603
1569 604*|ppc604*|PowerPC604*)
1570 add_cflags "-mcpu=604"
1571 warn_altivec enabled PPC604
1573 G3|g3|75*|ppc75*|PowerPC75*)
1574 add_cflags "-mcpu=750 -mpowerpc-gfxopt"
1575 warn_altivec enabled PPC75x
1577 G4|g4|745*|ppc745*|PowerPC745*)
1578 add_cflags "-mcpu=7450 -mpowerpc-gfxopt"
1579 warn_altivec disabled PPC745x
1581 74*|ppc74*|PowerPC74*)
1582 add_cflags "-mcpu=7400 -mpowerpc-gfxopt"
1583 warn_altivec disabled PPC74xx
1585 G5|g5|970|ppc970|PowerPC970|power4*|Power4*)
1586 add_cflags "-mcpu=970 -mpowerpc-gfxopt -mpowerpc64"
1587 warn_altivec disabled PPC970
1588 enable ppc64
1590 Cell|CELL|cell)
1591 add_cflags "-mcpu=cell"
1592 warn_altivec disabled Cell
1593 enable ppc64
1595 # targets that do NOT support conditional mov (cmov)
1596 i[345]86|pentium|pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
1597 add_cflags "-march=$cpu"
1598 disable cmov
1600 # targets that do support conditional mov (cmov)
1601 i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2)
1602 add_cflags "-march=$cpu"
1603 enable cmov
1604 enable fast_cmov
1606 # targets that do support conditional mov but on which it's slow
1607 pentium4|pentium4m|prescott|nocona)
1608 add_cflags "-march=$cpu"
1609 enable cmov
1610 disable fast_cmov
1612 sparc64)
1613 add_cflags "-mcpu=v9"
1615 arm11*|cortex*)
1616 add_cflags "-mcpu=$cpu"
1617 enable fast_unaligned
1619 armv*)
1620 add_cflags "-march=$cpu"
1622 arm*)
1623 add_cflags "-mcpu=$cpu"
1626 echo "WARNING: Unknown CPU \"$cpu\", ignored."
1628 esac
1631 # make sure we can execute files in $TMPDIR
1632 cat > $TMPSH 2>> $logfile <<EOF
1633 #! /bin/sh
1635 chmod +x $TMPSH >> $logfile 2>&1
1636 if ! $TMPSH >> $logfile 2>&1; then
1637 cat <<EOF
1638 Unable to create and execute files in $TMPDIR1. Set the TMPDIR environment
1639 variable to another directory and make sure that $TMPDIR1 is not mounted
1640 noexec.
1642 die "Sanity test failed."
1644 rm $TMPSH
1646 # compiler sanity check
1647 check_exec <<EOF
1648 int main(void){ return 0; }
1650 if test "$?" != 0; then
1651 echo "$cc is unable to create an executable file."
1652 if test -z "$cross_prefix" && ! enabled cross_compile ; then
1653 echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
1654 echo "Only do this if you know what cross compiling means."
1656 die "C compiler test failed."
1659 check_cc <<EOF || die "Symbol mangling check failed."
1660 int ff_extern;
1662 sym=$($nm -P -g $TMPO | grep ff_extern)
1663 extern_prefix=${sym%%ff_extern*}
1665 check_asm inline_asm '""'
1667 if enabled x86; then
1668 # check whether EBP is available on x86
1669 # As 'i' is stored on the stack, this program will crash
1670 # if the base pointer is used to access it because the
1671 # base pointer is cleared in the inline assembly code.
1672 check_exec_crash <<EOF && enable ebp_available
1673 volatile int i=0;
1674 __asm__ volatile (
1675 "xorl %%ebp, %%ebp"
1676 ::: "%ebp");
1677 return i;
1680 # check wether EBX is available on x86
1681 check_asm ebx_available '"":::"%ebx"'
1683 # check whether binutils is new enough to compile SSSE3/MMX2
1684 enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
1685 enabled mmx2 && check_asm mmx2 '"movss %xmm0, %xmm0"'
1687 check_asm bswap '"bswap %%eax" ::: "%eax"'
1689 YASMFLAGS="-f $objformat -DARCH_$(toupper $arch)"
1690 enabled x86_64 && append YASMFLAGS "-m amd64"
1691 enabled_all x86_64 shared && append YASMFLAGS "-DPIC"
1692 case "$objformat" in
1693 elf) enabled debug && append YASMFLAGS "-g dwarf2" ;;
1694 macho64) append YASMFLAGS "-DPIC -DPREFIX" ;;
1695 *) append YASMFLAGS "-DPREFIX" ;;
1696 esac
1697 check_yasm "pabsw xmm0, xmm0" && enable yasm
1700 # check for assembler specific support
1702 if test $arch = "powerpc"; then
1703 check_asm dcbzl '"dcbzl 0, 1"'
1706 # check for SIMD availability
1708 # AltiVec flags: The FSF version of GCC differs from the Apple version
1709 if enabled altivec; then
1710 check_cflags -maltivec -mabi=altivec &&
1711 { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
1712 check_cflags -faltivec
1714 # check if our compiler supports Motorola AltiVec C API
1715 check_cc <<EOF || disable altivec
1716 $inc_altivec_h
1717 int main(void) {
1718 vector signed int v1, v2, v3;
1719 v1 = vec_add(v2,v3);
1720 return 0;
1724 # check if our compiler supports braces for vector declarations
1725 check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
1726 $inc_altivec_h
1727 int main (void) { (vector int) {1}; return 0; }
1731 # We have to check if pld is a nop and disable it.
1732 enabled armv4l && check_asm pld '"pld [r0]"'
1733 enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
1734 enabled armv6 && check_asm armv6 '"sadd16 r0, r0, r0"'
1735 enabled armvfp && check_asm armvfp '"fadds s0, s0, s0"'
1736 enabled iwmmxt && check_asm iwmmxt '"wunpckelub wr6, wr4"'
1737 enabled mmi && check_asm mmi '"lq $2, 0($2)"'
1738 enabled neon && check_asm neon '"vadd.i16 q0, q0, q0"'
1739 enabled vis && check_asm vis '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc
1741 enabled vis && add_cflags "-mcpu=ultrasparc -mtune=ultrasparc"
1743 # ---
1744 # big/little-endian test
1745 check_cc <<EOF || die "endian test failed"
1746 unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
1748 od -A n -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
1750 # ---
1751 # check availability of some header files
1753 if check_func dlopen; then
1754 ldl=
1755 elif check_func dlopen -ldl; then
1756 ldl=-ldl
1759 check_func fork
1760 check_func gethrtime
1761 check_func getrusage
1762 check_func inet_aton $network_extralibs
1763 check_func memalign
1764 check_func mkstemp
1765 check_func_headers windows.h GetProcessTimes
1767 check_header conio.h
1768 check_header dlfcn.h
1769 check_header malloc.h
1770 check_header poll.h
1771 check_header sys/mman.h
1772 check_header sys/resource.h
1773 check_header sys/select.h
1774 check_header termios.h
1776 if ! enabled_any memalign memalign_hack && enabled need_memalign ; then
1777 die "Error, no memalign() but SSE enabled, disable it or use --enable-memalign-hack."
1780 disabled zlib || check_lib zlib.h zlibVersion -lz || disable zlib
1781 disabled bzlib || check_lib bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
1783 # check for some common methods of building with pthread support
1784 # do this before the optional library checks as some of them require pthreads
1785 if enabled pthreads; then
1786 if check_func pthread_create; then
1788 elif check_func pthread_create -pthread; then
1789 add_cflags -pthread
1790 add_extralibs -pthread
1791 elif check_func pthread_create -pthreads; then
1792 add_cflags -pthreads
1793 add_extralibs -pthreads
1794 elif check_func pthread_create -lpthreadGC2; then
1795 add_extralibs -lpthreadGC2
1796 elif ! check_lib pthread.h pthread_create -lpthread; then
1797 die "ERROR: can't find pthreads library"
1801 for thread in $THREADS_LIST; do
1802 if enabled $thread; then
1803 test -n "$thread_type" &&
1804 die "ERROR: Only one thread type must be selected." ||
1805 thread_type="$thread"
1807 done
1809 check_lib math.h sin -lm
1811 # test for C99 functions in math.h
1812 for func in llrint lrint lrintf round roundf; do
1813 check_exec <<EOF && enable $func || disable $func
1814 #include <math.h>
1815 int main(void) { return ($func(3.999f) > 0)?0:1; }
1817 done
1819 # these are off by default, so fail if requested and not available
1820 enabled avisynth && require2 vfw32 "windows.h vfw.h" AVIFileInit -lvfw32
1821 enabled libamr_nb && require libamrnb amrnb/interf_dec.h Speech_Decode_Frame_init -lamrnb -lm
1822 enabled libamr_wb && require libamrwb amrwb/dec_if.h D_IF_init -lamrwb -lm
1823 enabled libdirac && add_cflags $(pkg-config --cflags dirac) &&
1824 require libdirac libdirac_decoder/dirac_parser.h dirac_decoder_init -ldirac_decoder &&
1825 require libdirac libdirac_encoder/dirac_encoder.h dirac_encoder_init -ldirac_encoder
1826 enabled libfaac && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
1827 enabled libfaad && require2 libfaad faad.h faacDecOpen -lfaad
1828 enabled libgsm && require libgsm gsm.h gsm_create -lgsm
1829 enabled libmp3lame && require libmp3lame lame/lame.h lame_init -lmp3lame -lm
1830 enabled libnut && require libnut libnut.h nut_demuxer_init -lnut
1831 enabled libschroedinger && add_cflags $(pkg-config --cflags schroedinger-1.0) &&
1832 require libschroedinger schroedinger/schro.h schro_init $(pkg-config --libs schroedinger-1.0)
1833 enabled libspeex && require libspeex speex/speex.h speex_decoder_init -lspeex
1834 enabled libtheora && require libtheora theora/theora.h theora_info_init -ltheora -logg
1835 enabled libvorbis && require libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
1836 enabled libx264 && require libx264 x264.h x264_encoder_open -lx264 -lm &&
1837 { check_cpp_condition x264.h "X264_BUILD >= 65" ||
1838 die "ERROR: libx264 version must be >= 0.65."; }
1839 enabled libxvid && require libxvid xvid.h xvid_global -lxvidcore
1840 enabled mlib && require mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
1842 # libdc1394 check
1843 if enabled libdc1394; then
1844 { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
1845 enable libdc1394_2; } ||
1846 { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
1847 enable libdc1394_1; } ||
1848 die "ERROR: No version of libdc1394 found "
1852 _restrict=
1853 for restrict_keyword in restrict __restrict__ __restrict; do
1854 check_cc <<EOF && _restrict=$restrict_keyword && break
1855 void foo(char * $restrict_keyword p);
1857 done
1859 test "$vhook" = "default" && vhook="$dlopen"
1861 if test "$target_os" = cygwin -o "$target_os" = mingw32 && enabled_all static vhook ; then
1862 disable vhook
1863 echo
1864 echo "At the moment vhooks don't work on Cygwin or MinGW static builds."
1865 echo "Patches welcome."
1866 echo
1869 if enabled vhook; then
1870 check_ldflags -rdynamic
1871 check_ldflags -export-dynamic
1874 check_foo_config imlib2 imlib2 Imlib2.h imlib_load_font
1875 check_foo_config freetype2 freetype ft2build.h FT_Init_FreeType
1877 ##########################################
1878 # SDL check
1880 disable sdl_too_old
1881 disable sdl
1882 SDL_CONFIG="${cross_prefix}sdl-config"
1883 if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
1884 sdl_cflags=`"${SDL_CONFIG}" --cflags`
1885 temp_cflags $sdl_cflags
1886 temp_extralibs `"${SDL_CONFIG}" --libs`
1887 if check_lib2 SDL.h SDL_Init; then
1888 _sdlversion=`"${SDL_CONFIG}" --version | sed 's/[^0-9]//g'`
1889 if test "$_sdlversion" -lt 121 ; then
1890 enable sdl_too_old
1891 else
1892 enable sdl
1893 check_cc $sdl_cflags <<EOF && enable sdl_video_size
1894 #include <SDL.h>
1895 int main(int argc, char **argv){
1896 const SDL_VideoInfo *vi = SDL_GetVideoInfo();
1897 int w = vi->current_w;
1898 return 0;
1903 restore_flags
1906 texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
1908 ##########################################
1909 # Network check
1911 if enabled network; then
1912 check_type sys/socket.h socklen_t
1913 # Prefer arpa/inet.h over winsock2
1914 if check_header arpa/inet.h ; then
1915 check_func closesocket
1916 elif check_header winsock2.h ; then
1917 network_extralibs="-lws2_32"
1918 check_type ws2tcpip.h socklen_t
1919 check_func_headers winsock2.h closesocket
1923 ##########################################
1924 # IPv6 check
1926 enabled network && enabled ipv6 && check_ld <<EOF && enable ipv6 || disable ipv6
1927 #include <sys/types.h>
1928 #include <sys/socket.h>
1929 #include <netinet/in.h>
1930 #include <netdb.h>
1931 int main(void) {
1932 struct sockaddr_storage saddr;
1933 struct ipv6_mreq mreq6;
1934 getaddrinfo(0,0,0,0);
1935 getnameinfo(0,0,0,0,0,0,0);
1936 IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
1940 check_header linux/videodev.h
1941 check_header linux/videodev2.h
1942 check_header sys/videoio.h
1944 check_func_headers "windows.h vfw.h" capCreateCaptureWindow -lvfw32
1946 # check for ioctl_meteor.h, ioctl_bt848.h and alternatives
1947 { check_header dev/bktr/ioctl_meteor.h &&
1948 check_header dev/bktr/ioctl_bt848.h; } ||
1949 { check_header machine/ioctl_meteor.h &&
1950 check_header machine/ioctl_bt848.h; } ||
1951 { check_header dev/video/meteor/ioctl_meteor.h &&
1952 check_header dev/video/bktr/ioctl_bt848.h; } ||
1953 check_header dev/ic/bt8xx.h
1955 check_header sys/soundcard.h
1956 check_header soundcard.h
1958 # deal with the X11 frame grabber
1959 enabled x11grab &&
1960 check_header X11/Xlib.h &&
1961 check_header X11/extensions/XShm.h &&
1962 check_func XOpenDisplay -lX11 &&
1963 check_func XShmCreateImage -lX11 -lXext
1965 enabled debug && add_cflags -g"$debuglevel"
1967 # add some useful compiler flags if supported
1968 check_cflags -Wdeclaration-after-statement
1969 check_cflags -Wall
1970 check_cflags -Wno-switch
1971 check_cflags -Wdisabled-optimization
1972 check_cflags -Wpointer-arith
1973 check_cflags -Wredundant-decls
1974 check_cflags -Wno-pointer-sign
1975 check_cflags -Wcast-qual
1976 check_cflags -Wwrite-strings
1977 check_cflags -Wtype-limits
1978 enabled extra_warnings && check_cflags -Winline
1980 # add some linker flags
1981 check_ldflags -Wl,--warn-common
1982 check_ldflags -Wl,--as-needed
1983 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'
1984 check_ldflags -Wl,-Bsymbolic
1986 if enabled small; then
1987 check_cflags -Os # not all compilers support -Os
1988 optimizations="small"
1989 elif enabled optimizations; then
1990 if $cc -v 2>&1 | grep -q xlc; then
1991 add_cflags "-O5"
1992 add_ldflags "-O5"
1993 else
1994 add_cflags "-O3"
1997 check_cflags -fno-math-errno
1998 check_cflags -fno-signed-zeros
2000 # add some flags for Intel C Compiler
2001 if $cc --version 2> /dev/null | grep -q Intel; then
2002 # Just warnings, no remarks
2003 check_cflags -w1
2004 # -wd: Disable following warnings
2005 # 144, 167, 556: -Wno-pointer-sign
2006 # 10006: ignoring unknown option -fno-signed-zeros
2007 # 10156: ignoring option '-W'; no argument required
2008 check_cflags -wd144,167,556,10006,10156
2009 # 11030: Warning unknown option --as-needed
2010 # 10156: ignoring option '-export'; no argument required
2011 check_ldflags -wd10156,11030
2012 # Allow to compile with optimizations
2013 check_ldflags -march=$cpu
2016 # PIC flags for shared library objects where they are needed
2017 if enabled shared; then
2018 # LIBOBJFLAGS may have already been set in the OS configuration
2019 if test -z "$LIBOBJFLAGS" ; then
2020 case "$arch" in
2021 x86_64|ia64|alpha|sparc*|power*|parisc*|mips*) LIBOBJFLAGS='$(PIC)' ;;
2022 esac
2026 if enabled gprof; then
2027 add_cflags "-p"
2028 add_ldflags "-p"
2031 VHOOKCFLAGS="-fPIC"
2033 # Find out if the .align argument is a power of two or not.
2034 if test $asmalign_pot = "unknown"; then
2035 disable asmalign_pot
2036 echo '__asm__ (".align 3");' | check_cc && enable asmalign_pot
2039 enabled_any $DECODER_LIST && enable decoders
2040 enabled_any $ENCODER_LIST && enable encoders
2041 enabled_any $BSF_LIST && enable bsfs
2042 enabled_any $DEMUXER_LIST && enable demuxers
2043 enabled_any $MUXER_LIST && enable muxers
2044 enabled_any $FILTER_LIST && enable filters
2045 enabled_any $INDEV_LIST && enable demuxers
2046 enabled_any $OUTDEV_LIST && enable muxers
2047 enabled_any $PROTOCOL_LIST && enable protocols
2049 enabled_any $THREADS_LIST && enable threads
2051 check_deps $CONFIG_LIST \
2052 $CONFIG_EXTRA \
2053 $HAVE_LIST \
2054 $DECODER_LIST \
2055 $ENCODER_LIST \
2056 $PARSER_LIST \
2057 $BSF_LIST \
2058 $DEMUXER_LIST \
2059 $MUXER_LIST \
2060 $FILTER_LIST \
2061 $INDEV_LIST \
2062 $OUTDEV_LIST \
2063 $PROTOCOL_LIST \
2065 enabled libdc1394 && append pkg_requires "libraw1394"
2066 enabled libdirac && append pkg_requires "dirac"
2067 enabled libtheora && append pkg_requires "theora"
2068 enabled libvorbis && append pkg_requires "vorbisenc"
2070 echo "install prefix $prefix"
2071 echo "source path $source_path"
2072 echo "C compiler $cc"
2073 echo ".align is power-of-two $asmalign_pot"
2074 echo "ARCH $arch ($cpu)"
2075 if test "$build_suffix" != ""; then
2076 echo "build suffix $build_suffix"
2078 if test "$extra_version" != ""; then
2079 echo "version string suffix $extra_version"
2081 echo "big-endian ${bigendian-no}"
2082 if test $arch = "x86_32" -o $arch = "x86_64"; then
2083 echo "yasm ${yasm-no}"
2084 echo "MMX enabled ${mmx-no}"
2085 echo "CMOV enabled ${cmov-no}"
2086 echo "CMOV is fast ${fast_cmov-no}"
2087 echo "EBX available ${ebx_available-no}"
2088 echo "EBP available ${ebp_available-no}"
2090 if test $arch = "armv4l"; then
2091 echo "ARMv5TE enabled ${armv5te-no}"
2092 echo "ARMv6 enabled ${armv6-no}"
2093 echo "ARM VFP enabled ${armvfp-no}"
2094 echo "IWMMXT enabled ${iwmmxt-no}"
2095 echo "NEON enabled ${neon-no}"
2097 if test $arch = "mips"; then
2098 echo "MMI enabled ${mmi-no}"
2100 if test $arch = "powerpc"; then
2101 echo "AltiVec enabled ${altivec-no}"
2102 echo "dcbzl available ${dcbzl-no}"
2104 echo "gprof enabled ${gprof-no}"
2105 echo "debug symbols ${debug-no}"
2106 echo "strip symbols ${stripping-no}"
2107 echo "optimizations ${optimizations-no}"
2108 echo "static ${static-no}"
2109 echo "shared ${shared-no}"
2110 echo "postprocessing support ${postproc-no}"
2111 echo "software scaler enabled ${swscale-no}"
2112 echo "new filter support ${avfilter-no}"
2113 echo "filters using lavformat ${avfilter_lavf-no}"
2114 echo "video hooking ${vhook-no}"
2115 if enabled vhook; then
2116 echo "Imlib2 support ${imlib2-no}"
2117 echo "FreeType support ${freetype2-no}"
2119 echo "network support ${network-no}"
2120 if enabled network; then
2121 echo "IPv6 support ${ipv6-no}"
2123 echo "threading support ${thread_type-no}"
2124 echo "SDL support ${sdl-no}"
2125 if enabled sdl_too_old; then
2126 echo "-> Your SDL version is too old - please upgrade to have FFplay/SDL support."
2128 echo "Sun medialib support ${mlib-no}"
2129 echo "AVISynth enabled ${avisynth-no}"
2130 echo "libamr-nb support ${libamr_nb-no}"
2131 echo "libamr-wb support ${libamr_wb-no}"
2132 echo "libdc1394 support ${libdc1394-no}"
2133 echo "libdirac enabled ${libdirac-no}"
2134 echo "libfaac enabled ${libfaac-no}"
2135 echo "libfaad enabled ${libfaad-no}"
2136 echo "libfaad dlopened ${libfaadbin-no}"
2137 echo "libgsm enabled ${libgsm-no}"
2138 echo "libmp3lame enabled ${libmp3lame-no}"
2139 echo "libnut enabled ${libnut-no}"
2140 echo "libschroedinger enabled ${libschroedinger-no}"
2141 echo "libspeex enabled ${libspeex-no}"
2142 echo "libtheora enabled ${libtheora-no}"
2143 echo "libvorbis enabled ${libvorbis-no}"
2144 echo "libx264 enabled ${libx264-no}"
2145 echo "libxvid enabled ${libxvid-no}"
2146 echo "zlib enabled ${zlib-no}"
2147 echo "bzlib enabled ${bzlib-no}"
2148 echo
2150 for type in decoder encoder parser demuxer muxer protocol filter bsf indev outdev; do
2151 echo "Enabled ${type}s:"
2152 eval list=\$$(toupper $type)_LIST
2153 for part in $list; do
2154 enabled $part && echo ${part%_*}
2155 done | sort | pr -3 -t
2156 echo
2157 done
2159 license="LGPL"
2160 if enabled nonfree; then
2161 license="unredistributable"
2162 elif enabled gpl; then
2163 license="GPL"
2166 echo "License: $license"
2168 echo "Creating config.mak and config.h..."
2170 echo "# Automatically generated by configure - do not modify!" > config.mak
2171 echo "/* Automatically generated by configure - do not modify! */" > $TMPH
2172 echo "#ifndef FFMPEG_CONFIG_H" >> $TMPH
2173 echo "#define FFMPEG_CONFIG_H" >> $TMPH
2174 echo "#define FFMPEG_CONFIGURATION \"$FFMPEG_CONFIGURATION\"" >> $TMPH
2176 echo "FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION" >> config.mak
2177 echo "prefix=$prefix" >> config.mak
2178 echo "LIBDIR=\$(DESTDIR)$libdir" >> config.mak
2179 echo "SHLIBDIR=\$(DESTDIR)$shlibdir" >> config.mak
2180 echo "INCDIR=\$(DESTDIR)$incdir" >> config.mak
2181 echo "BINDIR=\$(DESTDIR)$bindir" >> config.mak
2182 echo "MANDIR=\$(DESTDIR)$mandir" >> config.mak
2183 echo "CC=$cc" >> config.mak
2184 echo "YASM=$yasmexe" >> config.mak
2185 echo "AR=$ar" >> config.mak
2186 echo "RANLIB=$ranlib" >> config.mak
2187 echo "LN_S=$ln_s" >> config.mak
2188 enabled stripping &&
2189 echo "STRIP=$strip" >> config.mak ||
2190 echo "STRIP=echo ignoring strip" >> config.mak
2192 echo "OPTFLAGS=$CFLAGS" >> config.mak
2193 echo "VHOOKCFLAGS=$VHOOKCFLAGS" >> config.mak
2194 echo "LDFLAGS=$LDFLAGS" >> config.mak
2195 echo "FFSERVERLDFLAGS=$FFSERVERLDFLAGS" >> config.mak
2196 echo "SHFLAGS=$SHFLAGS" >> config.mak
2197 echo "YASMFLAGS=$YASMFLAGS" >> config.mak
2198 echo "VHOOKSHFLAGS=$VHOOKSHFLAGS" >> config.mak
2199 echo "VHOOKLIBS=$VHOOKLIBS" >> config.mak
2200 echo "LIBOBJFLAGS=$LIBOBJFLAGS" >> config.mak
2201 echo "BUILD_STATIC=$static" >> config.mak
2202 echo "BUILDSUF=$build_suffix" >> config.mak
2203 echo "FULLNAME=$FULLNAME" >> config.mak
2204 echo "LIBPREF=$LIBPREF" >> config.mak
2205 echo "LIBSUF=$LIBSUF" >> config.mak
2206 echo "LIBNAME=$LIBNAME" >> config.mak
2207 echo "SLIBPREF=$SLIBPREF" >> config.mak
2208 echo "SLIBSUF=$SLIBSUF" >> config.mak
2209 echo "EXESUF=$EXESUF" >> config.mak
2210 echo "EXTRA_VERSION=$extra_version" >> config.mak
2211 echo "DEPEND_CMD=$DEPEND_CMD" >> config.mak
2213 if enabled bigendian; then
2214 echo "WORDS_BIGENDIAN=yes" >> config.mak
2215 echo "#define WORDS_BIGENDIAN 1" >> $TMPH
2218 if enabled sdl; then
2219 echo "SDL_LIBS=`"${SDL_CONFIG}" --libs`" >> config.mak
2220 echo "SDL_CFLAGS=`"${SDL_CONFIG}" --cflags`" >> config.mak
2222 if enabled texi2html; then
2223 echo "BUILD_DOC=yes" >> config.mak
2226 get_version(){
2227 name=$1
2228 file=$source_path/$2
2229 eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
2230 eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
2231 lcname=$(tolower $name)
2232 eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
2233 eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
2236 get_version LIBSWSCALE libswscale/swscale.h
2237 get_version LIBPOSTPROC libpostproc/postprocess.h
2238 get_version LIBAVCODEC libavcodec/avcodec.h
2239 get_version LIBAVDEVICE libavdevice/avdevice.h
2240 get_version LIBAVFORMAT libavformat/avformat.h
2241 get_version LIBAVUTIL libavutil/avutil.h
2242 get_version LIBAVFILTER libavfilter/avfilter.h
2244 if enabled shared; then
2245 echo "BUILD_SHARED=yes" >> config.mak
2246 echo "PIC=-fPIC -DPIC" >> config.mak
2247 echo "LIBTARGET=${LIBTARGET}" >> config.mak
2248 echo "SLIBNAME=${SLIBNAME}" >> config.mak
2249 echo "SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}" >> config.mak
2250 echo "SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}" >> config.mak
2251 echo "SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}" >> config.mak
2252 echo "SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}" >> config.mak
2253 echo "SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}" >> config.mak
2254 echo "SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}" >> config.mak
2256 echo "LIB_INSTALL_EXTRA_CMD=${LIB_INSTALL_EXTRA_CMD}" >> config.mak
2257 echo "EXTRALIBS=$extralibs" >> config.mak
2259 print_config ARCH_ $TMPH config.mak $ARCH_LIST
2260 print_config HAVE_ $TMPH config.mak $HAVE_LIST
2261 print_config CONFIG_ $TMPH config.mak $CONFIG_LIST \
2262 $CONFIG_EXTRA \
2263 $DECODER_LIST \
2264 $ENCODER_LIST \
2265 $PARSER_LIST \
2266 $BSF_LIST \
2267 $DEMUXER_LIST \
2268 $MUXER_LIST \
2269 $FILTER_LIST \
2270 $PROTOCOL_LIST \
2271 $INDEV_LIST \
2272 $OUTDEV_LIST \
2274 echo "#define restrict $_restrict" >> $TMPH
2276 if enabled small; then
2277 echo "#define av_always_inline" >> $TMPH
2280 echo "SRC_PATH=\"$source_path\"" >> config.mak
2281 echo "SRC_PATH_BARE=$source_path" >> config.mak
2282 echo "BUILD_ROOT=\"$PWD\"" >> config.mak
2284 # Apparently it's not possible to portably echo a backslash.
2285 enabled asmalign_pot &&
2286 printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH ||
2287 printf '#define ASMALIGN(ZEROBITS) ".align 1 << " #ZEROBITS "\\n\\t"\n' >> $TMPH
2289 echo "#define EXTERN_PREFIX \"${extern_prefix}\"" >> $TMPH
2291 echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
2293 # Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
2294 cmp -s $TMPH config.h &&
2295 echo "config.h is unchanged" ||
2296 mv -f $TMPH config.h
2298 rm -f $TMPC $TMPE $TMPH $TMPO $TMPS $TMPSH
2300 # build tree in object directory if source path is different from current one
2301 if enabled source_path_used; then
2302 DIRS="\
2303 doc \
2304 libavcodec \
2305 libavcodec/alpha \
2306 libavcodec/armv4l \
2307 libavcodec/bfin \
2308 libavcodec/i386 \
2309 libavcodec/mlib \
2310 libavcodec/ppc \
2311 libavcodec/sh4 \
2312 libavcodec/sparc \
2313 libavdevice \
2314 libavfilter \
2315 libavformat \
2316 libavutil \
2317 libpostproc \
2318 libswscale \
2319 tests \
2320 tools \
2321 vhook \
2323 FILES="\
2324 Makefile \
2325 common.mak \
2326 subdir.mak \
2327 doc/texi2pod.pl \
2328 libavcodec/Makefile \
2329 libavdevice/Makefile \
2330 libavfilter/Makefile \
2331 libavformat/Makefile \
2332 libavutil/Makefile \
2333 libpostproc/Makefile \
2334 libswscale/Makefile \
2336 for dir in $DIRS ; do
2337 mkdir -p $dir
2338 done
2339 for f in $FILES ; do
2340 $ln_s "$source_path/$f" $f
2341 done
2345 # build pkg-config files
2347 pkgconfig_generate(){
2348 name=$1
2349 shortname=${name#lib}${build_suffix}
2350 comment=$2
2351 version=$3
2352 libs=$4
2353 requires=$5
2354 cat <<EOF > $name/$name.pc
2355 prefix=$prefix
2356 exec_prefix=\${prefix}
2357 libdir=$libdir
2358 includedir=$incdir
2360 Name: $name
2361 Description: $comment
2362 Version: $version
2363 Requires: $(disabled shared && echo $requires)
2364 Requires.private: $(enabled shared && echo $requires)
2365 Conflicts:
2366 Libs: -L\${libdir} -l${shortname} $(disabled shared && echo $libs)
2367 Libs.private: $(enabled shared && echo $libs)
2368 Cflags: -I\${includedir}
2370 cat <<EOF > $name/$name-uninstalled.pc
2371 prefix=
2372 exec_prefix=
2373 libdir=\${pcfiledir}
2374 includedir=${source_path}
2376 Name: $name
2377 Description: $comment
2378 Version: $version
2379 Requires: $requires
2380 Conflicts:
2381 Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
2382 Cflags: -I\${includedir}
2386 pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
2387 pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "$pkg_requires libavutil = $LIBAVUTIL_VERSION"
2388 pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "$pkg_requires libavcodec = $LIBAVCODEC_VERSION"
2389 pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "$pkg_requires libavformat = $LIBAVFORMAT_VERSION"
2390 enabled avfilter &&
2391 pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "$pkg_requires libavutil = $LIBAVUTIL_VERSION"
2392 enabled postproc &&
2393 pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
2394 if enabled swscale; then
2395 pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"
2396 else
2397 pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "$pkg_requires libavcodec = $LIBAVCODEC_VERSION"
2398 apply libswscale/libswscale.pc sed s/^Libs:.*$/Libs:/