spelling cosmetics
[FFMpeg-mirror/ffmpeg-vdpau.git] / configure
blob111131f614f895f09ab47a552bc8de5337134621
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 [default=yes]"
72 echo " --disable-static do not build static libraries [default=no]"
73 echo " --enable-shared build shared libraries [default=no]"
74 echo " --disable-shared do not build shared libraries [default=yes]"
75 echo " --enable-gpl allow use of GPL code, the resulting libav*"
76 echo " and ffmpeg will be under GPL [default=no]"
77 echo " --enable-nonfree allow use of nonfree code, the resulting libav*"
78 echo " and ffmpeg will be unredistributable [default=no]"
79 echo " --enable-postproc enable GPLed postprocessing support [default=no]"
80 echo " --enable-swscale software scaler support [default=no]"
81 echo " --enable-avfilter video filter support (replaces vhook) [default=no]"
82 echo " --enable-avfilter-lavf video filters dependant on avformat [default=no]"
83 echo " --enable-beosthreads use BeOS threads [default=no]"
84 echo " --enable-os2threads use OS/2 threads [default=no]"
85 echo " --enable-pthreads use pthreads [default=no]"
86 echo " --enable-w32threads use Win32 threads [default=no]"
87 echo " --enable-x11grab enable X11 grabbing [default=no]"
88 echo
89 echo "External library support:"
90 echo " --enable-mlib use Sun medialib [default=no]"
91 echo " --enable-avisynth allow reading AVISynth script files [default=no]"
92 echo " --enable-libamr-nb enable libamr-nb floating point audio codec"
93 echo " --enable-libamr-wb enable libamr-wb floating point audio codec"
94 echo " --enable-libdc1394 enable IIDC-1394 grabbing using libdc1394"
95 echo " and libraw1394 [default=no]"
96 echo " --enable-libdirac enable Dirac support via libdirac [default=no]"
97 echo " --enable-libfaac enable FAAC support via libfaac [default=no]"
98 echo " --enable-libfaad enable FAAD support via libfaad [default=no]"
99 echo " --enable-libfaadbin open libfaad.so.0 at runtime [default=no]"
100 echo " --enable-libgsm enable GSM support via libgsm [default=no]"
101 echo " --enable-libmp3lame enable MP3 encoding via libmp3lame [default=no]"
102 echo " --enable-libnut enable NUT (de)muxing via libnut,"
103 echo " native demuxer exists [default=no]"
104 echo " --enable-libschroedinger enable Dirac support via libschroedinger [default=no]"
105 echo " --enable-libspeex enable Speex decoding via libspeex [default=no]"
106 echo " --enable-libtheora enable Theora encoding via libtheora [default=no]"
107 echo " --enable-libvorbis enable Vorbis encoding via libvorbis,"
108 echo " native implementation exists [default=no]"
109 echo " --enable-libx264 enable H.264 encoding via x264 [default=no]"
110 echo " --enable-libxvid enable Xvid encoding via xvidcore,"
111 echo " native MPEG-4/Xvid encoder exists [default=no]"
112 echo ""
113 echo "Advanced options (experts only):"
114 echo " --source-path=PATH path to source code [$source_path]"
115 echo " --cross-prefix=PREFIX use PREFIX for compilation tools [$cross_prefix]"
116 echo " --enable-cross-compile assume a cross-compiler is used"
117 echo " --target-os=OS compiler targets OS [$target_os]"
118 echo " --cc=CC use C compiler CC [$cc]"
119 echo " --extra-cflags=ECFLAGS add ECFLAGS to CFLAGS [$CFLAGS]"
120 echo " --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]"
121 echo " --extra-libs=ELIBS add ELIBS [$ELIBS]"
122 echo " --extra-version=STRING version string suffix []"
123 echo " --build-suffix=SUFFIX suffix for application specific build []"
124 echo " --arch=ARCH select architecture [$arch]"
125 echo " --cpu=CPU selects the minimum cpu required (affects"
126 echo " instruction selection, may crash on older CPUs)"
127 echo " --enable-powerpc-perf enable performance report on PPC"
128 echo " (requires enabling PMC)"
129 echo " --disable-mmx disable MMX usage"
130 echo " --disable-mmx2 disable MMX2 usage"
131 echo " --disable-ssse3 disable SSSE3 usage"
132 echo " --disable-armv5te disable armv5te usage"
133 echo " --disable-armv6 disable armv6 usage"
134 echo " --disable-armvfp disable ARM VFP usage"
135 echo " --disable-iwmmxt disable iwmmxt usage"
136 echo " --disable-altivec disable AltiVec usage"
137 echo " --disable-network disable network support [default=no]"
138 echo " --disable-ipv6 disable ipv6 support [default=no]"
139 echo " --disable-zlib disable zlib [default=no]"
140 echo " --disable-bzlib disable bzlib [default=no]"
141 echo " --disable-vhook disable video hooking support"
142 echo " --disable-mpegaudio-hp faster (but less accurate)"
143 echo " MPEG audio decoding [default=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 disables encoder NAME"
152 echo " --enable-encoder=NAME enables encoder NAME"
153 echo " --disable-decoder=NAME disables decoder NAME"
154 echo " --enable-decoder=NAME enables decoder NAME"
155 echo " --disable-encoders disables all encoders"
156 echo " --disable-decoders disables all decoders"
157 echo " --disable-muxer=NAME disables muxer NAME"
158 echo " --enable-muxer=NAME enables muxer NAME"
159 echo " --disable-muxers disables all muxers"
160 echo " --disable-demuxer=NAME disables demuxer NAME"
161 echo " --enable-demuxer=NAME enables demuxer NAME"
162 echo " --disable-demuxers disables all demuxers"
163 echo " --enable-parser=NAME enables parser NAME"
164 echo " --disable-parser=NAME disables parser NAME"
165 echo " --disable-parsers disables all parsers"
166 echo " --enable-bsf=NAME enables bitstream filter NAME"
167 echo " --disable-bsf=NAME disables bitstream filter NAME"
168 echo " --disable-bsfs disables all bitstream filters"
169 echo " --enable-protocol=NAME enables protocol NAME"
170 echo " --disable-protocol=NAME disables protocol NAME"
171 echo " --disable-protocols disables all protocols"
172 echo " --disable-devices disables all devices"
173 echo " --enable-filter=NAME enables filter NAME"
174 echo " --disable-filter=NAME disables filter NAME"
175 echo " --disable-filters disables 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 pushvar(){
254 for var in $*; do
255 eval level=\${${var}_level:=0}
256 eval ${var}_${level}="\$$var"
257 eval ${var}_level=$(($level+1))
258 done
261 popvar(){
262 for var in $*; do
263 eval level=\${${var}_level:-0}
264 test $level = 0 && continue
265 eval level=$(($level-1))
266 eval $var="\${${var}_${level}}"
267 eval ${var}_level=$level
268 eval unset ${var}_${level}
269 done
272 enable(){
273 set_all yes $*
276 disable(){
277 set_all no $*
280 enabled(){
281 test "${1#!}" = "$1" && op== || op=!=
282 eval test "x\$${1#!}" $op "xyes"
285 disabled(){
286 test "${1#!}" = "$1" && op== || op=!=
287 eval test "x\$${1#!}" $op "xno"
290 enabled_all(){
291 for opt; do
292 enabled $opt || return 1
293 done
296 disabled_all(){
297 for opt; do
298 disabled $opt || return 1
299 done
302 enabled_any(){
303 for opt; do
304 enabled $opt && return 0
305 done
308 disabled_any(){
309 for opt; do
310 disabled $opt && return 0
311 done
314 set_default(){
315 for opt; do
316 eval test -z "\$$opt" && eval $opt=\$${opt}_default
317 done
320 is_in(){
321 value=$1
322 shift
323 for var in $*; do
324 [ $var = $value ] && return 0
325 done
326 return 1
329 check_deps(){
330 for cfg; do
331 cfg="${cfg#!}"
332 enabled ${cfg}_checking && die "Circular dependency for $cfg."
333 disabled ${cfg}_checking && continue
334 enable ${cfg}_checking
336 eval dep_all="\$${cfg}_deps"
337 eval dep_any="\$${cfg}_deps_any"
339 pushvar cfg dep_all dep_any
340 check_deps $dep_all $dep_any
341 popvar cfg dep_all dep_any
343 enabled_all $dep_all || disable $cfg
344 enabled_any $dep_any || disable $cfg
346 if enabled $cfg; then
347 eval dep_extralibs="\$${cfg}_extralibs"
348 test -n "$dep_extralibs" && add_extralibs $dep_extralibs
351 disable ${cfg}_checking
352 done
355 print_config(){
356 pfx=$1
357 header=$2
358 makefile=$3
359 shift 3
360 for cfg; do
361 ucname="`toupper $cfg`"
362 if enabled $cfg; then
363 echo "#define ${pfx}${ucname} 1" >> $header
364 echo "#define ENABLE_${ucname} 1" >> $header
365 echo "${pfx}${ucname}=yes" >> $makefile
366 else
367 echo "#define ENABLE_${ucname} 0" >> $header
369 done
372 flags_saved(){
373 (: ${SAVE_CFLAGS?}) 2> /dev/null
376 save_flags(){
377 flags_saved && return
378 SAVE_CFLAGS="$CFLAGS"
379 SAVE_LDFLAGS="$LDFLAGS"
380 SAVE_extralibs="$extralibs"
383 restore_flags(){
384 flags_saved || return
385 CFLAGS="$SAVE_CFLAGS"
386 LDFLAGS="$SAVE_LDFLAGS"
387 extralibs="$SAVE_extralibs"
388 unset SAVE_CFLAGS
389 unset SAVE_LDFLAGS
390 unset SAVE_extralibs
393 temp_cflags(){
394 save_flags
395 CFLAGS="$CFLAGS $*"
398 temp_ldflags(){
399 save_flags
400 LDFLAGS="$LDFLAGS $*"
403 temp_extralibs(){
404 save_flags
405 extralibs="$extralibs $*"
408 append(){
409 var=$1
410 shift
411 flags_saved && eval "SAVE_$var=\"\$SAVE_$var $*\""
412 eval "$var=\"\$$var $*\""
415 add_cflags(){
416 append CFLAGS "$@"
419 add_ldflags(){
420 append LDFLAGS "$@"
423 add_extralibs(){
424 append extralibs "$@"
427 check_cmd(){
428 log "$@"
429 "$@" >> $logfile 2>&1
432 check_cc(){
433 log check_cc "$@"
434 cat > $TMPC
435 log_file $TMPC
436 check_cmd $cc $CFLAGS "$@" -c -o $TMPO $TMPC
439 check_cpp(){
440 log check_cpp "$@"
441 cat > $TMPC
442 log_file $TMPC
443 check_cmd $cc $CFLAGS "$@" -E -o $TMPO $TMPC
446 check_asm(){
447 log check_asm "$@"
448 name="$1"
449 asm="$2"
450 shift 2
451 check_cc "$@" <<EOF && enable $name || disable $name
452 int foo(void){ __asm__ volatile($asm); }
456 check_yasm(){
457 log check_yasm "$@"
458 echo "$1" > $TMPS
459 log_file $TMPS
460 shift 1
461 check_cmd $yasmexe $YASMFLAGS "$@" -o $TMPO $TMPS
464 check_ld(){
465 log check_ld "$@"
466 check_cc || return
467 flags=''
468 libs=''
469 for f; do
470 test "${f}" = "${f#-l}" && flags="$flags $f" || libs="$libs $f"
471 done
472 check_cmd $cc $LDFLAGS $flags -o $TMPE $TMPO $extralibs $libs
475 check_cflags(){
476 log check_cflags "$@"
477 check_cc "$@" <<EOF && add_cflags "$@"
478 int x;
482 check_ldflags(){
483 log check_ldflags "$@"
484 check_ld "$@" <<EOF && add_ldflags "$@"
485 int main(void){ return 0; }
489 check_header(){
490 log check_header "$@"
491 header=$1
492 shift
493 var=`echo $header | sed 's/[^A-Za-z0-9_]/_/g'`
494 disable $var
495 check_cpp "$@" <<EOF && enable $var
496 #include <$header>
497 int x;
501 check_func(){
502 log check_func "$@"
503 func=$1
504 shift
505 disable $func
506 check_ld "$@" <<EOF && enable $func
507 extern int $func();
508 int main(void){ $func(); }
512 check_func_headers(){
513 log check_func_headers "$@"
514 headers=$1
515 func=$2
516 shift 2
517 disable $func
518 incs=""
519 for hdr in $headers; do
520 incs="$incs
521 #include <$hdr>"
522 done
523 check_ld "$@" <<EOF && enable $func
524 $incs
525 int main(int argc, char **argv){
526 (void) $func;
527 return 0;
532 check_cpp_condition(){
533 log check_cpp_condition "$@"
534 header=$1
535 condition=$2
536 check_cpp <<EOF
537 #include <$header>
538 #if !($condition)
539 #error "unsatisfied condition: $condition"
540 #endif
544 check_lib(){
545 log check_lib "$@"
546 header="$1"
547 func="$2"
548 shift 2
549 temp_extralibs "$@"
550 check_header $header && check_func $func && add_extralibs "$@"
551 err=$?
552 restore_flags
553 return $err
556 check_lib2(){
557 log check_lib2 "$@"
558 headers="$1"
559 func="$2"
560 shift 2
561 temp_extralibs "$@"
562 check_func_headers "$headers" $func && add_extralibs "$@"
563 err=$?
564 restore_flags
565 return $err
568 check_exec(){
569 check_ld "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
572 check_exec_crash(){
573 code=`cat`
575 # exit() is not async signal safe. _Exit (C99) and _exit (POSIX)
576 # are safe but may not be available everywhere. Thus we use
577 # raise(SIGTERM) instead. The check is run in a subshell so we
578 # can redirect the "Terminated" message from the shell. SIGBUS
579 # is not defined by standard C so it is used conditionally.
581 (check_exec "$@") >> $logfile 2>&1 <<EOF
582 #include <signal.h>
583 static void sighandler(int sig){
584 raise(SIGTERM);
586 int main(void){
587 signal(SIGILL, sighandler);
588 signal(SIGFPE, sighandler);
589 signal(SIGSEGV, sighandler);
590 #ifdef SIGBUS
591 signal(SIGBUS, sighandler);
592 #endif
593 { $code }
598 check_type(){
599 log check_type "$@"
600 headers=$1
601 type=$2
602 shift 2
603 disable $type
604 incs=""
605 for hdr in $headers; do
606 incs="$incs
607 #include <$hdr>"
608 done
609 check_cc "$@" <<EOF && enable $type
610 $incs
611 $type v;
615 require(){
616 name="$1"
617 header="$2"
618 func="$3"
619 shift 3
620 check_lib $header $func "$@" || die "ERROR: $name not found"
623 require2(){
624 name="$1"
625 headers="$2"
626 func="$3"
627 shift 3
628 check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
631 check_foo_config(){
632 cfg=$1
633 pkg=$2
634 header=$3
635 func=$4
636 shift 4
637 disable $cfg
638 check_cmd ${pkg}-config --version
639 err=$?
640 if test "$err" = 0; then
641 temp_cflags `${pkg}-config --cflags`
642 temp_extralibs `${pkg}-config --libs`
643 check_lib "$@" $header $func && enable $cfg
645 return $err
648 apply(){
649 file=$1
650 shift
651 "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
654 # CONFIG_LIST contains configurable options, while HAVE_LIST is for
655 # system-dependent things.
657 COMPONENT_LIST="
658 bsfs
659 decoders
660 demuxers
661 encoders
662 filters
663 indevs
664 muxers
665 outdevs
666 parsers
667 protocols
670 CONFIG_LIST="
671 $COMPONENT_LIST
672 avfilter
673 avfilter_lavf
674 avisynth
675 beos_netserver
676 bzlib
677 ffmpeg
678 ffplay
679 ffserver
681 gprof
682 gray
683 hardcoded_tables
684 ipv6
685 libamr_nb
686 libamr_wb
687 libdc1394
688 libdirac
689 libfaac
690 libfaad
691 libfaadbin
692 libgsm
693 libmp3lame
694 libnut
695 libschroedinger
696 libspeex
697 libtheora
698 libvorbis
699 libx264
700 libxvid
701 memalign_hack
702 mlib
703 mpegaudio_hp
704 network
705 nonfree
706 postproc
707 powerpc_perf
708 small
709 swscale
710 vhook
711 x11grab
712 zlib
715 THREADS_LIST='
716 beosthreads
717 os2threads
718 pthreads
719 w32threads
722 ARCH_LIST='
723 alpha
724 armv4l
725 bfin
726 ia64
727 m68k
728 mips
729 parisc
730 powerpc
731 s390
733 sparc
734 sparc64
736 x86_32
737 x86_64
740 ARCH_EXT_LIST='
741 altivec
742 armv5te
743 armv6
744 armvfp
745 iwmmxt
748 mmx2
749 neon
750 ssse3
754 HAVE_LIST="
755 $ARCH_EXT_LIST
756 $THREADS_LIST
757 altivec_h
758 arpa_inet_h
759 bswap
760 closesocket
761 cmov
762 conio_h
763 dcbzl
764 dev_bktr_ioctl_bt848_h
765 dev_bktr_ioctl_meteor_h
766 dev_ic_bt8xx_h
767 dev_video_meteor_ioctl_meteor_h
768 dev_video_bktr_ioctl_bt848_h
769 dlfcn_h
770 dlopen
771 dos_paths
772 ebp_available
773 ebx_available
774 fast_64bit
775 fast_cmov
776 fast_unaligned
777 fork
778 freetype2
779 gethrtime
780 GetProcessTimes
781 getrusage
782 imlib2
783 inet_aton
784 inline_asm
785 libdc1394_1
786 libdc1394_2
787 llrint
788 lrint
789 lrintf
790 machine_ioctl_bt848_h
791 machine_ioctl_meteor_h
792 malloc_h
793 memalign
794 mkstemp
796 ppc64
797 round
798 roundf
800 sdl_video_size
801 socklen_t
802 soundcard_h
803 poll_h
804 sys_mman_h
805 sys_resource_h
806 sys_select_h
807 sys_soundcard_h
808 sys_videoio_h
809 termios_h
810 threads
811 winsock2_h
812 yasm
815 CMDLINE_SELECT="
816 $ARCH_EXT_LIST
817 $CONFIG_LIST
818 $THREADS_LIST
819 cross_compile
820 debug
821 extra_warnings
822 logging
823 optimizations
824 shared
825 static
826 stripping
829 PATHS_LIST='
830 bindir
831 incdir
832 libdir
833 mandir
834 prefix
835 shlibdir
838 CMDLINE_SET="
839 $PATHS_LIST
840 arch
841 build_suffix
844 cross_prefix
845 extra_version
846 logfile
847 source_path
848 target_os
851 # code dependency declarations
853 # architecture extensions
854 altivec_deps="powerpc"
855 armv5te_deps="armv4l"
856 armv6_deps="armv4l"
857 armvfp_deps="armv4l"
858 iwmmxt_deps="armv4l"
859 mmi_deps="mips"
860 mmx_deps="x86"
861 mmx2_deps="x86 mmx"
862 neon_deps="armv4l"
863 ssse3_deps="x86"
864 vis_deps="sparc"
866 # decoders / encoders
867 ac3_decoder_deps="gpl"
868 dxa_decoder_deps="zlib"
869 eac3_decoder_deps="gpl"
870 flashsv_decoder_deps="zlib"
871 flashsv_encoder_deps="zlib"
872 mlp_decoder_deps="mlp_parser"
873 mpeg_xvmc_decoder_deps="xvmc"
874 png_decoder_deps="zlib"
875 png_encoder_deps="zlib"
876 zmbv_decoder_deps="zlib"
877 zmbv_encoder_deps="zlib"
879 # external libraries
880 libamr_nb_decoder_deps="libamr_nb"
881 libamr_nb_encoder_deps="libamr_nb"
882 libamr_wb_decoder_deps="libamr_wb"
883 libamr_wb_encoder_deps="libamr_wb"
884 libdirac_decoder_deps="libdirac !libschroedinger"
885 libdirac_encoder_deps="libdirac"
886 libfaac_encoder_deps="libfaac"
887 libfaad_decoder_deps="libfaad"
888 libfaadbin_decoder_extralibs='$ldl'
889 libgsm_decoder_deps="libgsm"
890 libgsm_encoder_deps="libgsm"
891 libgsm_ms_decoder_deps="libgsm"
892 libgsm_ms_encoder_deps="libgsm"
893 libmp3lame_encoder_deps="libmp3lame"
894 libschroedinger_decoder_deps="libschroedinger"
895 libschroedinger_encoder_deps="libschroedinger"
896 libspeex_decoder_deps="libspeex"
897 libtheora_encoder_deps="libtheora"
898 libvorbis_encoder_deps="libvorbis"
899 libx264_encoder_deps="libx264"
900 libxvid_encoder_deps="libxvid"
901 mpeg4aac_decoder_deps="libfaad"
903 # demuxers / muxers
904 ac3_demuxer_deps="ac3_parser"
905 audio_beos_demuxer_deps="audio_beos"
906 audio_beos_demuxer_extralibs="-lmedia -lbe"
907 audio_beos_muxer_deps="audio_beos"
908 audio_beos_muxer_extralibs="-lmedia -lbe"
909 avisynth_demuxer_deps="avisynth"
910 bktr_demuxer_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
911 dirac_demuxer_deps="dirac_parser"
912 dv1394_demuxer_deps="dv1394 dv_demuxer"
913 libdc1394_demuxer_deps="libdc1394"
914 libnut_demuxer_deps="libnut"
915 libnut_muxer_deps="libnut"
916 mp3_demuxer_deps="mpegaudio_parser"
917 oss_demuxer_deps_any="soundcard_h sys_soundcard_h"
918 oss_muxer_deps_any="soundcard_h sys_soundcard_h"
919 redir_demuxer_deps="network"
920 rtp_muxer_deps="network rtp_protocol"
921 rtsp_demuxer_deps="sdp_demuxer"
922 sdp_demuxer_deps="rtp_protocol mpegts_demuxer"
923 v4l_demuxer_deps="linux_videodev_h"
924 v4l2_demuxer_deps_any="linux_videodev2_h sys_videoio_h"
925 vfwcap_demuxer_deps="capCreateCaptureWindow"
926 vfwcap_demuxer_extralibs="-lvfw32"
927 x11_grab_device_demuxer_deps="x11grab XShmCreateImage"
928 x11_grab_device_demuxer_extralibs="-lX11 -lXext"
930 # protocols
931 http_protocol_deps="network"
932 rtp_protocol_deps="udp_protocol"
933 tcp_protocol_deps="network"
934 udp_protocol_deps="network"
936 # filters
937 movie_filter_deps="avfilter_lavf"
939 # programs
940 ffplay_deps="sdl"
941 ffserver_deps="ffm_muxer rtp_protocol rtsp_demuxer"
942 ffserver_extralibs='$ldl'
943 vhook_extralibs='$ldl'
946 # default parameters
948 logfile="config.err"
950 # installation paths
951 prefix_default="/usr/local"
952 bindir_default='${prefix}/bin'
953 incdir_default='${prefix}/include'
954 libdir_default='${prefix}/lib'
955 mandir_default='${prefix}/share/man'
956 shlibdir_default="$libdir_default"
958 # toolchain
959 cc_default="gcc"
960 yasmexe="yasm"
961 ar="ar"
962 nm="nm"
963 ranlib="ranlib"
964 strip="strip"
965 asmalign_pot="unknown"
966 ln_s="ln -sf"
967 objformat="elf"
969 # machine
970 arch=`uname -m`
971 cpu="generic"
973 # OS
974 target_os=$(tolower $(uname -s))
976 # libraries
977 enable bzlib
978 enable zlib
980 # configurable options
981 enable debug
982 enable ffmpeg
983 enable ffplay
984 enable ffserver
985 enable ipv6
986 enable mpegaudio_hp
987 enable network
988 enable optimizations
989 enable protocols
990 enable static
991 enable stripping
992 vhook="default"
994 # build settings
995 add_cflags -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112
996 SHFLAGS='-shared -Wl,-soname,$$(@F)'
997 VHOOKSHFLAGS='$(SHFLAGS)'
998 FFSERVERLDFLAGS=-Wl,-E
999 LIBPREF="lib"
1000 LIBSUF=".a"
1001 FULLNAME='$(NAME)$(BUILDSUF)'
1002 LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
1003 SLIBPREF="lib"
1004 SLIBSUF=".so"
1005 SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
1006 SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
1007 SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
1008 LIB_INSTALL_EXTRA_CMD='$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
1010 # gcc stupidly only outputs the basename of targets with -MM, but we need the
1011 # full relative path for objects in subdirectories for non-recursive Make.
1012 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,"'
1014 # find source path
1015 source_path="`dirname \"$0\"`"
1016 enable source_path_used
1017 if test -z "$source_path" -o "$source_path" = "." ; then
1018 source_path="`pwd`"
1019 disable source_path_used
1020 else
1021 source_path="`cd \"$source_path\"; pwd`"
1022 echo "$source_path" | grep -q '[[:blank:]]' &&
1023 die "Out of tree builds are impossible with whitespace in source path."
1026 FFMPEG_CONFIGURATION="$@"
1028 find_things(){
1029 thing=$1
1030 pattern=$2
1031 file=$source_path/$3
1032 sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
1035 ENCODER_LIST=$(find_things encoder ENC libavcodec/allcodecs.c)
1036 DECODER_LIST=$(find_things decoder DEC libavcodec/allcodecs.c)
1037 PARSER_LIST=$(find_things parser PARSER libavcodec/allcodecs.c)
1038 BSF_LIST=$(find_things bsf BSF libavcodec/allcodecs.c)
1039 MUXER_LIST=$(find_things muxer _MUX libavformat/allformats.c)
1040 DEMUXER_LIST=$(find_things demuxer DEMUX libavformat/allformats.c)
1041 OUTDEV_LIST=$(find_things muxer _MUX libavdevice/alldevices.c)
1042 INDEV_LIST=$(find_things demuxer DEMUX libavdevice/alldevices.c)
1043 PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
1044 FILTER_LIST=$(find_things filter FILTER libavfilter/allfilters.c)
1046 enable $ARCH_EXT_LIST \
1047 $DECODER_LIST \
1048 $ENCODER_LIST \
1049 $PARSER_LIST \
1050 $BSF_LIST \
1051 $DEMUXER_LIST \
1052 $MUXER_LIST \
1053 $FILTER_LIST \
1054 $PROTOCOL_LIST \
1055 $INDEV_LIST \
1056 $OUTDEV_LIST \
1058 die_unknown(){
1059 echo "Unknown option \"$1\"."
1060 echo "See $0 --help for available options."
1061 exit 1
1064 show_list() {
1065 suffix=_$1
1066 shift
1067 echo $* | sed s/$suffix//g | tr ' ' '\n' | sort
1068 exit 0
1071 for opt do
1072 optval="${opt#*=}"
1073 case "$opt" in
1074 --extra-cflags=*) add_cflags "$optval"
1076 --extra-ldflags=*) add_ldflags "$optval"
1078 --extra-libs=*) add_extralibs "$optval"
1080 --disable-devices) disable $INDEV_LIST $OUTDEV_LIST
1082 --enable-debug=*) debuglevel="$optval"
1084 --enable-*=*|--disable-*=*)
1085 eval `echo "$opt" | sed 's/=/-/;s/--/action=/;s/-/ thing=/;s/-/ name=/'`
1086 case "$thing" in
1087 encoder|decoder|muxer|demuxer|parser|bsf|protocol|filter) $action ${optval}_${thing} ;;
1088 *) die_unknown "$opt" ;;
1089 esac
1091 --enable-?*|--disable-?*)
1092 eval `echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g'`
1093 if is_in $option $COMPONENT_LIST; then
1094 eval $action \$$(toupper ${option%s})_LIST
1095 elif is_in $option $CMDLINE_SELECT; then
1096 $action $option
1097 else
1098 die_unknown $opt
1101 --list-*)
1102 NAME="${opt#--list-}"
1103 is_in $NAME $COMPONENT_LIST || die_unknown $opt
1104 NAME=${NAME%s}
1105 eval show_list $NAME \$$(toupper $NAME)_LIST
1107 --help|-h) show_help
1110 optname="${opt%%=*}"
1111 optname="${optname#--}"
1112 optname=$(echo "$optname" | sed 's/-/_/g')
1113 is_in $optname $CMDLINE_SET || die_unknown $opt
1114 eval $optname='$optval'
1116 esac
1117 done
1119 disabled logging && logfile=/dev/null
1121 echo "# $0 $@" > $logfile
1122 set >> $logfile
1124 cc_default="${cross_prefix}${cc_default}"
1125 yasmexe="${cross_prefix}${yasmexe}"
1126 ar="${cross_prefix}${ar}"
1127 nm="${cross_prefix}${nm}"
1128 ranlib="${cross_prefix}${ranlib}"
1129 strip="${cross_prefix}${strip}"
1131 set_default cc
1133 # set temporary file name
1134 if test ! -z "$TMPDIR" ; then
1135 TMPDIR1="${TMPDIR}"
1136 elif test ! -z "$TEMPDIR" ; then
1137 TMPDIR1="${TEMPDIR}"
1138 else
1139 TMPDIR1="/tmp"
1142 TMPC="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.c"
1143 TMPE="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}${EXESUF}"
1144 TMPH="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.h"
1145 TMPO="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.o"
1146 TMPS="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.S"
1147 TMPSH="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.sh"
1149 check_cflags -std=c99
1151 case "$arch" in
1152 i386|i486|i586|i686|i86pc|BePC)
1153 arch="x86_32"
1154 enable fast_unaligned
1156 x86_64|amd64)
1157 arch="x86_32"
1158 enable fast_unaligned
1159 check_cc <<EOF && enable fast_64bit && arch="x86_64"
1160 int test[sizeof(char*) - 7];
1163 # armv4l is a subset of armv[567]*l
1164 arm|armv[4567]*l)
1165 arch="armv4l"
1167 alpha)
1168 arch="alpha"
1169 enable fast_64bit
1171 "Power Macintosh"|ppc|powerpc)
1172 arch="powerpc"
1173 enable fast_unaligned
1175 ppc64)
1176 arch="powerpc"
1177 enable fast_64bit
1178 enable fast_unaligned
1180 mips|mipsel|IP*)
1181 arch="mips"
1183 sun4u|sparc64)
1184 arch="sparc64"
1185 enable fast_64bit
1187 sparc)
1188 arch="sparc"
1190 sh4)
1191 arch="sh4"
1193 parisc)
1194 arch="parisc"
1196 parisc64)
1197 arch="parisc"
1198 enable fast_64bit
1200 s390|s390x)
1201 arch="s390"
1203 m68k)
1204 arch="m68k"
1206 ia64)
1207 arch="ia64"
1208 enable fast_64bit
1210 bfin)
1211 arch="bfin"
1214 arch="unknown"
1216 esac
1218 enable $arch
1219 enabled_any x86_32 x86_64 && enable x86
1220 enabled sparc64 && enable sparc
1222 # OS specific
1223 case $target_os in
1224 beos|haiku|zeta)
1225 prefix_default="$HOME/config"
1226 # helps building libavcodec
1227 add_cflags "-DPIC -fomit-frame-pointer"
1228 # 3 gcc releases known for BeOS, each with ugly bugs
1229 gcc_version="`$cc -v 2>&1 | grep version | cut -d ' ' -f3-`"
1230 case "$gcc_version" in
1231 2.9-beos-991026*|2.9-beos-000224*) echo "R5/GG gcc"
1232 disable mmx
1234 *20010315*) echo "BeBits gcc"
1235 add_cflags "-fno-expensive-optimizations"
1237 esac
1238 SHFLAGS=-nostart
1239 # enable BeOS things
1240 enable audio_beos
1241 # no need for libm, but the inet stuff
1242 # Check for BONE
1243 # XXX: actually should check for NOT net_server
1244 if echo $BEINCLUDES | grep -q 'headers/be/bone'; then
1245 network_extralibs="-lbind -lsocket"
1246 else
1247 enable beos_netserver
1248 network_extralibs="-lnet"
1249 fi ;;
1250 sunos)
1251 FFSERVERLDFLAGS=""
1252 SHFLAGS='-shared -Wl,-h,$$(@F)'
1253 network_extralibs="-lsocket -lnsl"
1255 netbsd)
1256 oss_demuxer_extralibs="-lossaudio"
1257 oss_muxer_extralibs="-lossaudio"
1259 openbsd)
1260 disable need_memalign
1261 LIBOBJFLAGS='$(PIC)'
1262 SHFLAGS='-shared'
1263 SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF).$(LIBVERSION)'
1264 SLIBNAME_WITH_VERSION='$(SLIBNAME)'
1265 SLIBNAME_WITH_MAJOR='$(SLIBNAME)'
1266 oss_demuxer_extralibs="-lossaudio"
1267 oss_muxer_extralibs="-lossaudio"
1269 freebsd)
1270 disable need_memalign
1272 bsd/os)
1273 osextralibs="-lpoll -lgnugetopt"
1274 strip="strip -d"
1276 darwin)
1277 disable need_memalign
1278 SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR) -Wl,-read_only_relocs,suppress'
1279 VHOOKSHFLAGS='-dynamiclib -Wl,-single_module -flat_namespace -undefined suppress -Wl,-install_name,$(SHLIBDIR)/vhook/$$(@F)'
1280 strip="strip -x"
1281 FFLDFLAGS="-Wl,-dynamic,-search_paths_first"
1282 SLIBSUF=".dylib"
1283 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
1284 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
1285 FFSERVERLDFLAGS=-Wl,-bind_at_load
1286 objformat="macho"
1287 enabled x86_64 && objformat="macho64"
1289 mingw32*)
1290 target_os=mingw32
1291 LIBTARGET=i386
1292 if test $arch = x86_64; then
1293 disable need_memalign
1294 LIBTARGET=x64
1296 shlibdir_default="$bindir_default"
1297 VHOOKSHFLAGS='-shared -L$(BUILD_ROOT)/libavformat -L$(BUILD_ROOT)/libavcodec -L$(BUILD_ROOT)/libavutil'
1298 VHOOKLIBS='-lavformat$(BUILDSUF) -lavcodec$(BUILDSUF) -lavutil$(BUILDSUF) $(EXTRALIBS)'
1299 if enabled swscale; then
1300 VHOOKSHFLAGS="$VHOOKSHFLAGS -L\$(BUILD_ROOT)/libswscale"
1301 VHOOKLIBS="$VHOOKLIBS -lswscale\$(BUILDSUF)"
1303 disable ffserver
1304 SLIBPREF=""
1305 SLIBSUF=".dll"
1306 EXESUF=".exe"
1307 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1308 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1309 SLIB_EXTRA_CMD='-lib /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)'
1310 SLIB_INSTALL_EXTRA_CMD='-install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"; \
1311 install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)"'
1312 SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"'
1313 SHFLAGS='-shared -Wl,--output-def,$$(@:$(SLIBSUF)=.def) -Wl,--enable-runtime-pseudo-reloc -Wl,--enable-auto-image-base'
1314 objformat="win32"
1315 enable dos_paths
1317 cygwin*)
1318 target_os=cygwin
1319 shlibdir_default="$bindir_default"
1320 VHOOKSHFLAGS='-shared -L$(BUILD_ROOT)/libavformat -L$(BUILD_ROOT)/libavcodec -L$(BUILD_ROOT)/libavutil'
1321 VHOOKLIBS='-lavformat$(BUILDSUF) -lavcodec$(BUILDSUF) -lavutil$(BUILDSUF) $(EXTRALIBS)'
1322 if enabled swscale; then
1323 VHOOKSHFLAGS="$VHOOKSHFLAGS -L\$(BUILD_ROOT)/libswscale"
1324 VHOOKLIBS="$VHOOKLIBS -lswscale\$(BUILDSUF)"
1326 EXESUF=".exe"
1327 SLIBPREF="cyg"
1328 SLIBSUF=".dll"
1329 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1330 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1331 SHFLAGS='-shared -Wl,--enable-auto-image-base'
1332 objformat="win32"
1333 enable dos_paths
1335 *-dos|freedos|opendos)
1336 disable ffplay ffserver vhook
1337 disable $INDEV_LIST $OUTDEV_LIST
1338 network_extralibs="-lsocket"
1339 EXESUF=".exe"
1340 objformat="win32"
1341 enable dos_paths
1343 linux)
1344 enable dv1394
1346 irix*)
1347 target_os=irix
1348 ranlib="echo ignoring ranlib"
1350 os/2*)
1351 strip="lxlite"
1352 ln_s="cp -f"
1353 EXESUF=".exe"
1354 FFLDFLAGS="-Zomf -Zbin-files -Zargs-wild -Zmap"
1355 SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
1356 FFSERVERLDFLAGS=""
1357 LIBSUF="_s.a"
1358 SLIBPREF=""
1359 SLIBSUF=".dll"
1360 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
1361 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
1362 SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
1363 echo PROTMODE >> $(SUBDIR)$(NAME).def; \
1364 echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
1365 echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
1366 echo EXPORTS >> $(SUBDIR)$(NAME).def; \
1367 emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
1368 SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
1369 emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
1370 SLIB_INSTALL_EXTRA_CMD='install -m 644 $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib "$(LIBDIR)"'
1371 SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.a "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.lib'
1372 disable vhook
1373 enable dos_paths
1375 interix)
1376 disable vhook
1380 target_os="${target_os}-UNKNOWN"
1382 esac
1384 set_default $PATHS_LIST
1386 add_extralibs $osextralibs
1388 # Combine FFLDFLAGS and the LDFLAGS environment variable.
1389 LDFLAGS="$FFLDFLAGS $LDFLAGS"
1391 test -n "$cross_prefix" && enable cross_compile
1393 # we need to build at least one lib type
1394 if ! enabled_any static shared; then
1395 cat <<EOF
1396 At least one library type must be built.
1397 Specify --enable-static to build the static libraries or --enable-shared to
1398 build the shared libraries as well. To only build the shared libraries specify
1399 --disable-static in addition to --enable-shared.
1401 exit 1;
1404 disabled static && LIBNAME=""
1406 if enabled_any libfaad libfaadbin ; then
1407 if check_header faad.h; then
1408 check_cc <<EOF
1409 #include <faad.h>
1410 #ifndef FAAD2_VERSION
1411 ok faad1
1412 #endif
1413 int main(void) { return 0; }
1415 test $? = 0 && enable libfaad2
1416 else
1417 die "FAAD test failed."
1422 if ! enabled gpl; then
1423 die_gpl_disabled(){
1424 name=$1
1425 shift
1426 enabled_any $@ && die "$name is under GPL and --enable-gpl is not specified."
1428 die_gpl_disabled "The Postprocessing code" postproc
1429 die_gpl_disabled "libx264" libx264
1430 die_gpl_disabled "libxvidcore" libxvid
1431 die_gpl_disabled "FAAD2" libfaad2
1432 die_gpl_disabled "The X11 grabber" x11grab
1433 die_gpl_disabled "The software scaler" swscale
1436 if ! enabled nonfree && enabled_any libamr_nb libamr_wb; then
1437 die "libamr is nonfree and --enable-nonfree is not specified."
1440 check_deps $ARCH_EXT_LIST
1442 test -z "$need_memalign" && need_memalign="$mmx"
1444 #Darwin CC versions
1445 if test $target_os = darwin; then
1446 if $cc -v 2>&1 | grep -q xlc; then
1447 add_cflags "-qpdf2 -qlanglvl=extc99 -qmaxmem=-1 -qarch=auto -qtune=auto"
1448 else
1449 add_cflags "-pipe"
1450 check_cflags "-force_cpusubtype_ALL"
1451 check_cflags "-Wno-sign-compare"
1452 enabled shared || check_cflags -mdynamic-no-pic
1456 disabled optimizations || check_cflags -fomit-frame-pointer
1458 # Add processor-specific flags
1459 if test $cpu != "generic"; then
1460 warn_altivec(){
1461 $1 altivec && echo "WARNING: Tuning for $2 but AltiVec $1.";
1463 case $cpu in
1464 601|ppc601|PowerPC601)
1465 add_cflags "-mcpu=601"
1466 warn_altivec enabled PPC601
1468 603*|ppc603*|PowerPC603*)
1469 add_cflags "-mcpu=603"
1470 warn_altivec enabled PPC603
1472 604*|ppc604*|PowerPC604*)
1473 add_cflags "-mcpu=604"
1474 warn_altivec enabled PPC604
1476 G3|g3|75*|ppc75*|PowerPC75*)
1477 add_cflags "-mcpu=750 -mpowerpc-gfxopt"
1478 warn_altivec enabled PPC75x
1480 G4|g4|745*|ppc745*|PowerPC745*)
1481 add_cflags "-mcpu=7450 -mpowerpc-gfxopt"
1482 warn_altivec disabled PPC745x
1484 74*|ppc74*|PowerPC74*)
1485 add_cflags "-mcpu=7400 -mpowerpc-gfxopt"
1486 warn_altivec disabled PPC74xx
1488 G5|g5|970|ppc970|PowerPC970|power4*|Power4*)
1489 add_cflags "-mcpu=970 -mpowerpc-gfxopt -mpowerpc64"
1490 warn_altivec disabled PPC970
1491 enable ppc64
1493 Cell|CELL|cell)
1494 add_cflags "-mcpu=cell"
1495 warn_altivec disabled Cell
1496 enable ppc64
1498 # targets that do NOT support conditional mov (cmov)
1499 i[345]86|pentium|pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
1500 add_cflags "-march=$cpu"
1501 disable cmov
1503 # targets that do support conditional mov (cmov)
1504 i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2)
1505 add_cflags "-march=$cpu"
1506 enable cmov
1507 enable fast_cmov
1509 # targets that do support conditional mov but on which it's slow
1510 pentium4|pentium4m|prescott|nocona)
1511 add_cflags "-march=$cpu"
1512 enable cmov
1513 disable fast_cmov
1515 sparc64)
1516 add_cflags "-mcpu=v9"
1518 arm11*|cortex*)
1519 add_cflags "-mcpu=$cpu"
1520 enable fast_unaligned
1522 armv*)
1523 add_cflags "-march=$cpu"
1525 arm*)
1526 add_cflags "-mcpu=$cpu"
1529 echo "WARNING: Unknown CPU \"$cpu\", ignored."
1531 esac
1534 # make sure we can execute files in $TMPDIR
1535 cat > $TMPSH 2>> $logfile <<EOF
1536 #! /bin/sh
1538 chmod +x $TMPSH >> $logfile 2>&1
1539 if ! $TMPSH >> $logfile 2>&1; then
1540 cat <<EOF
1541 Unable to create and execute files in $TMPDIR1. Set the TMPDIR environment
1542 variable to another directory and make sure that $TMPDIR1 is not mounted
1543 noexec.
1545 die "Sanity test failed."
1547 rm $TMPSH
1549 # compiler sanity check
1550 check_exec <<EOF
1551 int main(void){ return 0; }
1553 if test "$?" != 0; then
1554 echo "$cc is unable to create an executable file."
1555 if test -z "$cross_prefix" && ! enabled cross_compile ; then
1556 echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
1557 echo "Only do this if you know what cross compiling means."
1559 die "C compiler test failed."
1562 check_cc <<EOF || die "Symbol mangling check failed."
1563 int ff_extern;
1565 sym=$($nm -P -g $TMPO | grep ff_extern)
1566 extern_prefix=${sym%%ff_extern*}
1568 check_asm inline_asm '""'
1570 if enabled x86; then
1571 # check whether EBP is available on x86
1572 # As 'i' is stored on the stack, this program will crash
1573 # if the base pointer is used to access it because the
1574 # base pointer is cleared in the inline assembly code.
1575 check_exec_crash <<EOF && enable ebp_available
1576 volatile int i=0;
1577 __asm__ volatile (
1578 "xorl %%ebp, %%ebp"
1579 ::: "%ebp");
1580 return i;
1583 # check wether EBX is available on x86
1584 check_asm ebx_available '"":::"%ebx"'
1586 # check whether binutils is new enough to compile SSSE3/MMX2
1587 enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
1588 enabled mmx2 && check_asm mmx2 '"movss %xmm0, %xmm0"'
1590 check_asm bswap '"bswap %%eax" ::: "%eax"'
1592 YASMFLAGS="-f $objformat -DARCH_$(toupper $arch)"
1593 enabled x86_64 && append YASMFLAGS "-m amd64"
1594 enabled_all x86_64 shared && append YASMFLAGS "-DPIC"
1595 case "$objformat" in
1596 elf) enabled debug && append YASMFLAGS "-g dwarf2" ;;
1597 macho64) append YASMFLAGS "-DPIC -DPREFIX" ;;
1598 *) append YASMFLAGS "-DPREFIX" ;;
1599 esac
1600 check_yasm "pabsw xmm0, xmm0" && enable yasm
1603 # check for assembler specific support
1605 if test $arch = "powerpc"; then
1606 check_asm dcbzl '"dcbzl 0, 1"'
1609 # check for SIMD availability
1611 # AltiVec flags: The FSF version of GCC differs from the Apple version
1612 if enabled altivec; then
1613 check_cflags -maltivec -mabi=altivec &&
1614 { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
1615 check_cflags -faltivec
1617 # check if our compiler supports Motorola AltiVec C API
1618 check_cc <<EOF || disable altivec
1619 $inc_altivec_h
1620 int main(void) {
1621 vector signed int v1, v2, v3;
1622 v1 = vec_add(v2,v3);
1623 return 0;
1627 # check if our compiler supports braces for vector declarations
1628 check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
1629 $inc_altivec_h
1630 int main (void) { (vector int) {1}; return 0; }
1634 # We have to check if pld is a nop and disable it.
1635 enabled armv4l && check_asm pld '"pld [r0]"'
1636 enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
1637 enabled armv6 && check_asm armv6 '"sadd16 r0, r0, r0"'
1638 enabled armvfp && check_asm armvfp '"fadds s0, s0, s0"'
1639 enabled iwmmxt && check_asm iwmmxt '"wunpckelub wr6, wr4"'
1640 enabled mmi && check_asm mmi '"lq $2, 0($2)"'
1641 enabled neon && check_asm neon '"vadd.i16 q0, q0, q0"'
1642 enabled vis && check_asm vis '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc
1644 enabled vis && add_cflags "-mcpu=ultrasparc -mtune=ultrasparc"
1646 # ---
1647 # big/little-endian test
1648 check_cc <<EOF || die "endian test failed"
1649 unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
1651 od -A n -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
1653 # ---
1654 # check availability of some header files
1656 if check_func dlopen; then
1657 ldl=
1658 elif check_func dlopen -ldl; then
1659 ldl=-ldl
1662 check_func fork
1663 check_func gethrtime
1664 check_func getrusage
1665 check_func inet_aton $network_extralibs
1666 check_func memalign
1667 check_func mkstemp
1668 check_func_headers windows.h GetProcessTimes
1670 check_header conio.h
1671 check_header dlfcn.h
1672 check_header malloc.h
1673 check_header poll.h
1674 check_header sys/mman.h
1675 check_header sys/resource.h
1676 check_header sys/select.h
1677 check_header termios.h
1679 if ! enabled_any memalign memalign_hack && enabled need_memalign ; then
1680 die "Error, no memalign() but SSE enabled, disable it or use --enable-memalign-hack."
1683 enabled zlib && check_lib zlib.h zlibVersion -lz || disable zlib
1684 enabled bzlib && check_lib bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
1686 # check for some common methods of building with pthread support
1687 # do this before the optional library checks as some of them require pthreads
1688 if enabled pthreads; then
1689 if check_func pthread_create; then
1691 elif check_func pthread_create -pthread; then
1692 add_cflags -pthread
1693 add_extralibs -pthread
1694 elif check_func pthread_create -pthreads; then
1695 add_cflags -pthreads
1696 add_extralibs -pthreads
1697 elif check_func pthread_create -lpthreadGC2; then
1698 add_extralibs -lpthreadGC2
1699 elif ! check_lib pthread.h pthread_create -lpthread; then
1700 die "ERROR: can't find pthreads library"
1704 for thread in $THREADS_LIST; do
1705 if enabled $thread; then
1706 test -n "$thread_type" &&
1707 die "ERROR: Only one thread type must be selected." ||
1708 thread_type="$thread"
1710 done
1712 check_lib math.h sin -lm
1714 # test for C99 functions in math.h
1715 for func in llrint lrint lrintf round roundf; do
1716 check_exec <<EOF && enable $func || disable $func
1717 #include <math.h>
1718 int main(void) { return ($func(3.999f) > 0)?0:1; }
1720 done
1722 # these are off by default, so fail if requested and not available
1723 enabled avisynth && require2 vfw32 "windows.h vfw.h" AVIFileInit -lvfw32
1724 enabled libamr_nb && require libamrnb amrnb/interf_dec.h Speech_Decode_Frame_init -lamrnb -lm
1725 enabled libamr_wb && require libamrwb amrwb/dec_if.h D_IF_init -lamrwb -lm
1726 enabled libdirac && add_cflags $(pkg-config --cflags dirac) &&
1727 require libdirac libdirac_decoder/dirac_parser.h dirac_decoder_init -ldirac_decoder &&
1728 require libdirac libdirac_encoder/dirac_encoder.h dirac_encoder_init -ldirac_encoder
1729 enabled libfaac && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
1730 enabled libfaad && require2 libfaad faad.h faacDecOpen -lfaad
1731 enabled libgsm && require libgsm gsm.h gsm_create -lgsm
1732 enabled libmp3lame && require LAME lame/lame.h lame_init -lmp3lame -lm
1733 enabled libnut && require libnut libnut.h nut_demuxer_init -lnut
1734 enabled libschroedinger && add_cflags $(pkg-config --cflags schroedinger-1.0) &&
1735 require libschroedinger schroedinger/schro.h schro_init $(pkg-config --libs schroedinger-1.0)
1736 enabled libspeex && require libspeex speex/speex.h speex_decoder_init -lspeex
1737 enabled libtheora && require libtheora theora/theora.h theora_info_init -ltheora -logg
1738 enabled libvorbis && require libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
1739 enabled libx264 && require x264 x264.h x264_encoder_open -lx264 -lm &&
1740 { check_cpp_condition x264.h "X264_BUILD >= 65" ||
1741 die "ERROR: libx264 version must be >= 0.65."; }
1742 enabled libxvid && require Xvid xvid.h xvid_global -lxvidcore
1743 enabled mlib && require mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
1745 # libdc1394 check
1746 if enabled libdc1394; then
1747 { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
1748 enable libdc1394_2; } ||
1749 { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
1750 enable libdc1394_1; } ||
1751 die "ERROR: No version of libdc1394 found "
1755 _restrict=
1756 for restrict_keyword in restrict __restrict__ __restrict; do
1757 check_cc <<EOF && _restrict=$restrict_keyword && break
1758 void foo(char * $restrict_keyword p);
1760 done
1762 test "$vhook" = "default" && vhook="$dlopen"
1764 if test "$target_os" = cygwin -o "$target_os" = mingw32 && enabled_all static vhook ; then
1765 disable vhook
1766 echo
1767 echo "At the moment vhooks don't work on Cygwin or MinGW static builds."
1768 echo "Patches welcome."
1769 echo
1772 if enabled vhook; then
1773 check_ldflags -rdynamic
1774 check_ldflags -export-dynamic
1777 check_foo_config imlib2 imlib2 Imlib2.h imlib_load_font
1778 check_foo_config freetype2 freetype ft2build.h FT_Init_FreeType
1780 ##########################################
1781 # SDL check
1783 disable sdl_too_old
1784 disable sdl
1785 SDL_CONFIG="${cross_prefix}sdl-config"
1786 if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
1787 sdl_cflags=`"${SDL_CONFIG}" --cflags`
1788 temp_cflags $sdl_cflags
1789 temp_extralibs `"${SDL_CONFIG}" --libs`
1790 if check_lib2 SDL.h SDL_Init; then
1791 _sdlversion=`"${SDL_CONFIG}" --version | sed 's/[^0-9]//g'`
1792 if test "$_sdlversion" -lt 121 ; then
1793 enable sdl_too_old
1794 else
1795 enable sdl
1796 check_cc $sdl_cflags <<EOF && enable sdl_video_size
1797 #include <SDL.h>
1798 int main(int argc, char **argv){
1799 const SDL_VideoInfo *vi = SDL_GetVideoInfo();
1800 int w = vi->current_w;
1801 return 0;
1806 restore_flags
1809 texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
1811 ##########################################
1812 # Network check
1814 if enabled network; then
1815 check_type sys/socket.h socklen_t
1816 # Prefer arpa/inet.h over winsock2
1817 if check_header arpa/inet.h ; then
1818 check_func closesocket
1819 elif check_header winsock2.h ; then
1820 network_extralibs="-lws2_32"
1821 check_type ws2tcpip.h socklen_t
1822 check_func_headers winsock2.h closesocket
1826 ##########################################
1827 # IPv6 check
1829 enabled network && enabled ipv6 && check_ld <<EOF && enable ipv6 || disable ipv6
1830 #include <sys/types.h>
1831 #include <sys/socket.h>
1832 #include <netinet/in.h>
1833 #include <netdb.h>
1834 int main(void) {
1835 struct sockaddr_storage saddr;
1836 struct ipv6_mreq mreq6;
1837 getaddrinfo(0,0,0,0);
1838 getnameinfo(0,0,0,0,0,0,0);
1839 IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
1843 check_header linux/videodev.h
1844 check_header linux/videodev2.h
1845 check_header sys/videoio.h
1847 check_func_headers "windows.h vfw.h" capCreateCaptureWindow -lvfw32
1849 # check for ioctl_meteor.h, ioctl_bt848.h and alternatives
1850 { check_header dev/bktr/ioctl_meteor.h &&
1851 check_header dev/bktr/ioctl_bt848.h; } ||
1852 { check_header machine/ioctl_meteor.h &&
1853 check_header machine/ioctl_bt848.h; } ||
1854 { check_header dev/video/meteor/ioctl_meteor.h &&
1855 check_header dev/video/bktr/ioctl_bt848.h; } ||
1856 check_header dev/ic/bt8xx.h
1858 check_header sys/soundcard.h
1859 check_header soundcard.h
1861 # deal with the X11 frame grabber
1862 enabled x11grab &&
1863 check_header X11/Xlib.h &&
1864 check_header X11/extensions/XShm.h &&
1865 check_func XOpenDisplay -lX11 &&
1866 check_func XShmCreateImage -lX11 -lXext
1868 enabled debug && add_cflags -g"$debuglevel"
1870 # add some useful compiler flags if supported
1871 check_cflags -Wdeclaration-after-statement
1872 check_cflags -Wall
1873 check_cflags -Wno-switch
1874 check_cflags -Wdisabled-optimization
1875 check_cflags -Wpointer-arith
1876 check_cflags -Wredundant-decls
1877 check_cflags -Wno-pointer-sign
1878 check_cflags -Wcast-qual
1879 check_cflags -Wwrite-strings
1880 check_cflags -Wtype-limits
1881 enabled extra_warnings && check_cflags -Winline
1883 # add some linker flags
1884 check_ldflags -Wl,--warn-common
1885 check_ldflags -Wl,--as-needed
1886 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'
1887 check_ldflags -Wl,-Bsymbolic
1889 if enabled small; then
1890 check_cflags -Os # not all compilers support -Os
1891 optimizations="small"
1892 elif enabled optimizations; then
1893 if $cc -v 2>&1 | grep -q xlc; then
1894 add_cflags "-O5"
1895 add_ldflags "-O5"
1896 else
1897 add_cflags "-O3"
1900 check_cflags -fno-math-errno
1901 check_cflags -fno-signed-zeros
1903 # add some flags for Intel C Compiler
1904 if $cc --version 2> /dev/null | grep -q Intel; then
1905 # Just warnings, no remarks
1906 check_cflags -w1
1907 # -wd: Disable following warnings
1908 # 144, 167, 556: -Wno-pointer-sign
1909 # 10006: ignoring unknown option -fno-signed-zeros
1910 # 10156: ignoring option '-W'; no argument required
1911 check_cflags -wd144,167,556,10006,10156
1912 # 11030: Warning unknown option --as-needed
1913 # 10156: ignoring option '-export'; no argument required
1914 check_ldflags -wd10156,11030
1915 # Allow to compile with optimizations
1916 check_ldflags -march=$cpu
1919 # PIC flags for shared library objects where they are needed
1920 if enabled shared; then
1921 # LIBOBJFLAGS may have already been set in the OS configuration
1922 if test -z "$LIBOBJFLAGS" ; then
1923 case "$arch" in
1924 x86_64|ia64|alpha|sparc*|power*|parisc*|mips*) LIBOBJFLAGS='$(PIC)' ;;
1925 esac
1929 if enabled gprof; then
1930 add_cflags "-p"
1931 add_ldflags "-p"
1934 VHOOKCFLAGS="-fPIC"
1936 # Find out if the .align argument is a power of two or not.
1937 if test $asmalign_pot = "unknown"; then
1938 disable asmalign_pot
1939 echo '__asm__ (".align 3");' | check_cc && enable asmalign_pot
1942 enabled_any $DECODER_LIST && enable decoders
1943 enabled_any $ENCODER_LIST && enable encoders
1944 enabled_any $BSF_LIST && enable bsfs
1945 enabled_any $DEMUXER_LIST && enable demuxers
1946 enabled_any $MUXER_LIST && enable muxers
1947 enabled_any $FILTER_LIST && enable filters
1948 enabled_any $INDEV_LIST && enable demuxers
1949 enabled_any $OUTDEV_LIST && enable muxers
1950 enabled_any $PROTOCOL_LIST && enable protocols
1952 enabled_any $THREADS_LIST && enable threads
1954 check_deps $CONFIG_LIST \
1955 $HAVE_LIST \
1956 $DECODER_LIST \
1957 $ENCODER_LIST \
1958 $PARSER_LIST \
1959 $BSF_LIST \
1960 $DEMUXER_LIST \
1961 $MUXER_LIST \
1962 $FILTER_LIST \
1963 $INDEV_LIST \
1964 $OUTDEV_LIST \
1965 $PROTOCOL_LIST \
1967 enabled libdc1394 && append pkg_requires "libraw1394"
1968 enabled libdirac && append pkg_requires "dirac"
1969 enabled libtheora && append pkg_requires "theora"
1970 enabled libvorbis && append pkg_requires "vorbisenc"
1972 echo "install prefix $prefix"
1973 echo "source path $source_path"
1974 echo "C compiler $cc"
1975 echo ".align is power-of-two $asmalign_pot"
1976 echo "ARCH $arch ($cpu)"
1977 if test "$build_suffix" != ""; then
1978 echo "build suffix $build_suffix"
1980 if test "$extra_version" != ""; then
1981 echo "version string suffix $extra_version"
1983 echo "big-endian ${bigendian-no}"
1984 if test $arch = "x86_32" -o $arch = "x86_64"; then
1985 echo "yasm ${yasm-no}"
1986 echo "MMX enabled ${mmx-no}"
1987 echo "CMOV enabled ${cmov-no}"
1988 echo "CMOV is fast ${fast_cmov-no}"
1989 echo "EBX available ${ebx_available-no}"
1990 echo "EBP available ${ebp_available-no}"
1992 if test $arch = "armv4l"; then
1993 echo "ARMv5TE enabled ${armv5te-no}"
1994 echo "ARMv6 enabled ${armv6-no}"
1995 echo "ARM VFP enabled ${armvfp-no}"
1996 echo "IWMMXT enabled ${iwmmxt-no}"
1997 echo "NEON enabled ${neon-no}"
1999 if test $arch = "mips"; then
2000 echo "MMI enabled ${mmi-no}"
2002 if test $arch = "powerpc"; then
2003 echo "AltiVec enabled ${altivec-no}"
2004 echo "dcbzl available ${dcbzl-no}"
2006 echo "gprof enabled ${gprof-no}"
2007 echo "debug symbols ${debug-no}"
2008 echo "strip symbols ${stripping-no}"
2009 echo "optimizations ${optimizations-no}"
2010 echo "static ${static-no}"
2011 echo "shared ${shared-no}"
2012 echo "postprocessing support ${postproc-no}"
2013 echo "software scaler enabled ${swscale-no}"
2014 echo "new filter support ${avfilter-no}"
2015 echo "filters using lavformat ${avfilter_lavf-no}"
2016 echo "video hooking ${vhook-no}"
2017 if enabled vhook; then
2018 echo "Imlib2 support ${imlib2-no}"
2019 echo "FreeType support ${freetype2-no}"
2021 echo "network support ${network-no}"
2022 if enabled network; then
2023 echo "IPv6 support ${ipv6-no}"
2025 echo "threading support ${thread_type-no}"
2026 echo "SDL support ${sdl-no}"
2027 if enabled sdl_too_old; then
2028 echo "-> Your SDL version is too old - please upgrade to have FFplay/SDL support."
2030 echo "Sun medialib support ${mlib-no}"
2031 echo "AVISynth enabled ${avisynth-no}"
2032 echo "libamr-nb support ${libamr_nb-no}"
2033 echo "libamr-wb support ${libamr_wb-no}"
2034 echo "libdc1394 support ${libdc1394-no}"
2035 echo "libdirac enabled ${libdirac-no}"
2036 echo "libfaac enabled ${libfaac-no}"
2037 echo "libfaad enabled ${libfaad-no}"
2038 echo "libfaad dlopened ${libfaadbin-no}"
2039 echo "libgsm enabled ${libgsm-no}"
2040 echo "libmp3lame enabled ${libmp3lame-no}"
2041 echo "libnut enabled ${libnut-no}"
2042 echo "libschroedinger enabled ${libschroedinger-no}"
2043 echo "libspeex enabled ${libspeex-no}"
2044 echo "libtheora enabled ${libtheora-no}"
2045 echo "libvorbis enabled ${libvorbis-no}"
2046 echo "libx264 enabled ${libx264-no}"
2047 echo "libxvid enabled ${libxvid-no}"
2048 echo "zlib enabled ${zlib-no}"
2049 echo "bzlib enabled ${bzlib-no}"
2050 echo
2052 for type in decoder encoder parser demuxer muxer protocol filter bsf indev outdev; do
2053 echo "Enabled ${type}s:"
2054 eval list=\$$(toupper $type)_LIST
2055 for part in $list; do
2056 enabled $part && echo ${part%_*}
2057 done | sort | pr -3 -t
2058 echo
2059 done
2061 license="LGPL"
2062 if enabled nonfree; then
2063 license="unredistributable"
2064 elif enabled gpl; then
2065 license="GPL"
2068 echo "License: $license"
2070 echo "Creating config.mak and config.h..."
2072 echo "# Automatically generated by configure - do not modify!" > config.mak
2073 echo "/* Automatically generated by configure - do not modify! */" > $TMPH
2074 echo "#ifndef FFMPEG_CONFIG_H" >> $TMPH
2075 echo "#define FFMPEG_CONFIG_H" >> $TMPH
2076 echo "#define FFMPEG_CONFIGURATION \"$FFMPEG_CONFIGURATION\"" >> $TMPH
2078 echo "FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION" >> config.mak
2079 echo "prefix=$prefix" >> config.mak
2080 echo "LIBDIR=\$(DESTDIR)$libdir" >> config.mak
2081 echo "SHLIBDIR=\$(DESTDIR)$shlibdir" >> config.mak
2082 echo "INCDIR=\$(DESTDIR)$incdir" >> config.mak
2083 echo "BINDIR=\$(DESTDIR)$bindir" >> config.mak
2084 echo "MANDIR=\$(DESTDIR)$mandir" >> config.mak
2085 echo "CC=$cc" >> config.mak
2086 echo "YASM=$yasmexe" >> config.mak
2087 echo "AR=$ar" >> config.mak
2088 echo "RANLIB=$ranlib" >> config.mak
2089 echo "LN_S=$ln_s" >> config.mak
2090 enabled stripping &&
2091 echo "STRIP=$strip" >> config.mak ||
2092 echo "STRIP=echo ignoring strip" >> config.mak
2094 echo "OPTFLAGS=$CFLAGS" >> config.mak
2095 echo "VHOOKCFLAGS=$VHOOKCFLAGS" >> config.mak
2096 echo "LDFLAGS=$LDFLAGS" >> config.mak
2097 echo "FFSERVERLDFLAGS=$FFSERVERLDFLAGS" >> config.mak
2098 echo "SHFLAGS=$SHFLAGS" >> config.mak
2099 echo "YASMFLAGS=$YASMFLAGS" >> config.mak
2100 echo "VHOOKSHFLAGS=$VHOOKSHFLAGS" >> config.mak
2101 echo "VHOOKLIBS=$VHOOKLIBS" >> config.mak
2102 echo "LIBOBJFLAGS=$LIBOBJFLAGS" >> config.mak
2103 echo "BUILD_STATIC=$static" >> config.mak
2104 echo "BUILDSUF=$build_suffix" >> config.mak
2105 echo "FULLNAME=$FULLNAME" >> config.mak
2106 echo "LIBPREF=$LIBPREF" >> config.mak
2107 echo "LIBSUF=$LIBSUF" >> config.mak
2108 echo "LIBNAME=$LIBNAME" >> config.mak
2109 echo "SLIBPREF=$SLIBPREF" >> config.mak
2110 echo "SLIBSUF=$SLIBSUF" >> config.mak
2111 echo "EXESUF=$EXESUF" >> config.mak
2112 echo "EXTRA_VERSION=$extra_version" >> config.mak
2113 echo "DEPEND_CMD=$DEPEND_CMD" >> config.mak
2115 if enabled bigendian; then
2116 echo "WORDS_BIGENDIAN=yes" >> config.mak
2117 echo "#define WORDS_BIGENDIAN 1" >> $TMPH
2120 if enabled sdl; then
2121 echo "SDL_LIBS=`"${SDL_CONFIG}" --libs`" >> config.mak
2122 echo "SDL_CFLAGS=`"${SDL_CONFIG}" --cflags`" >> config.mak
2124 if enabled texi2html; then
2125 echo "BUILD_DOC=yes" >> config.mak
2128 get_version(){
2129 name=$1
2130 file=$source_path/$2
2131 eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
2132 eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
2133 lcname=$(tolower $name)
2134 eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
2135 eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
2138 get_version LIBSWSCALE libswscale/swscale.h
2139 get_version LIBPOSTPROC libpostproc/postprocess.h
2140 get_version LIBAVCODEC libavcodec/avcodec.h
2141 get_version LIBAVDEVICE libavdevice/avdevice.h
2142 get_version LIBAVFORMAT libavformat/avformat.h
2143 get_version LIBAVUTIL libavutil/avutil.h
2144 get_version LIBAVFILTER libavfilter/avfilter.h
2146 if enabled shared; then
2147 echo "BUILD_SHARED=yes" >> config.mak
2148 echo "PIC=-fPIC -DPIC" >> config.mak
2149 echo "LIBTARGET=${LIBTARGET}" >> config.mak
2150 echo "SLIBNAME=${SLIBNAME}" >> config.mak
2151 echo "SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}" >> config.mak
2152 echo "SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}" >> config.mak
2153 echo "SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}" >> config.mak
2154 echo "SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}" >> config.mak
2155 echo "SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}" >> config.mak
2156 echo "SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}" >> config.mak
2158 echo "LIB_INSTALL_EXTRA_CMD=${LIB_INSTALL_EXTRA_CMD}" >> config.mak
2159 echo "EXTRALIBS=$extralibs" >> config.mak
2161 print_config ARCH_ $TMPH config.mak $ARCH_LIST
2162 print_config HAVE_ $TMPH config.mak $HAVE_LIST
2163 print_config CONFIG_ $TMPH config.mak $CONFIG_LIST \
2164 $DECODER_LIST \
2165 $ENCODER_LIST \
2166 $PARSER_LIST \
2167 $BSF_LIST \
2168 $DEMUXER_LIST \
2169 $MUXER_LIST \
2170 $FILTER_LIST \
2171 $PROTOCOL_LIST \
2172 $INDEV_LIST \
2173 $OUTDEV_LIST \
2175 echo "#define restrict $_restrict" >> $TMPH
2177 if enabled small; then
2178 echo "#define av_always_inline" >> $TMPH
2181 echo "SRC_PATH=\"$source_path\"" >> config.mak
2182 echo "SRC_PATH_BARE=$source_path" >> config.mak
2183 echo "BUILD_ROOT=\"$PWD\"" >> config.mak
2185 # Apparently it's not possible to portably echo a backslash.
2186 enabled asmalign_pot &&
2187 printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH ||
2188 printf '#define ASMALIGN(ZEROBITS) ".align 1 << " #ZEROBITS "\\n\\t"\n' >> $TMPH
2190 echo "#define EXTERN_PREFIX \"${extern_prefix}\"" >> $TMPH
2192 echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
2194 # Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
2195 cmp -s $TMPH config.h &&
2196 echo "config.h is unchanged" ||
2197 mv -f $TMPH config.h
2199 rm -f $TMPC $TMPE $TMPH $TMPO $TMPS $TMPSH
2201 # build tree in object directory if source path is different from current one
2202 if enabled source_path_used; then
2203 DIRS="\
2204 doc \
2205 libavcodec \
2206 libavcodec/alpha \
2207 libavcodec/armv4l \
2208 libavcodec/bfin \
2209 libavcodec/i386 \
2210 libavcodec/mlib \
2211 libavcodec/ppc \
2212 libavcodec/sh4 \
2213 libavcodec/sparc \
2214 libavdevice \
2215 libavfilter \
2216 libavformat \
2217 libavutil \
2218 libpostproc \
2219 libswscale \
2220 tests \
2221 tools \
2222 vhook \
2224 FILES="\
2225 Makefile \
2226 common.mak \
2227 subdir.mak \
2228 doc/texi2pod.pl \
2229 libavcodec/Makefile \
2230 libavdevice/Makefile \
2231 libavfilter/Makefile \
2232 libavformat/Makefile \
2233 libavutil/Makefile \
2234 libpostproc/Makefile \
2235 libswscale/Makefile \
2237 for dir in $DIRS ; do
2238 mkdir -p $dir
2239 done
2240 for f in $FILES ; do
2241 $ln_s "$source_path/$f" $f
2242 done
2246 # build pkg-config files
2248 pkgconfig_generate(){
2249 name=$1
2250 shortname=${name#lib}
2251 comment=$2
2252 version=$3
2253 libs=$4
2254 requires=$5
2255 cat <<EOF > $name/$name.pc
2256 prefix=$prefix
2257 exec_prefix=\${prefix}
2258 libdir=$libdir
2259 includedir=$incdir
2261 Name: $name
2262 Description: $comment
2263 Version: $version
2264 Requires: $(disabled shared && echo $requires)
2265 Requires.private: $(enabled shared && echo $requires)
2266 Conflicts:
2267 Libs: -L\${libdir} -l${shortname} $(disabled shared && echo $libs)
2268 Libs.private: $(enabled shared && echo $libs)
2269 Cflags: -I\${includedir}
2271 cat <<EOF > $name/$name-uninstalled.pc
2272 prefix=
2273 exec_prefix=
2274 libdir=\${pcfiledir}
2275 includedir=${source_path}
2277 Name: $name
2278 Description: $comment
2279 Version: $version
2280 Requires: $requires
2281 Conflicts:
2282 Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
2283 Cflags: -I\${includedir}
2287 pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
2288 pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "$pkg_requires libavutil = $LIBAVUTIL_VERSION"
2289 pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "$pkg_requires libavcodec = $LIBAVCODEC_VERSION"
2290 pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "$pkg_requires libavformat = $LIBAVFORMAT_VERSION"
2291 enabled avfilter &&
2292 pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "$pkg_requires libavutil = $LIBAVUTIL_VERSION"
2293 enabled postproc &&
2294 pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
2295 if enabled swscale; then
2296 pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"
2297 else
2298 pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "$pkg_requires libavcodec = $LIBAVCODEC_VERSION"
2299 apply libswscale/libswscale.pc sed s/^Libs:.*$/Libs:/