svq3 decoder may need zlib
[libav.git] / configure
1 #!/bin/sh
2 #
3 # FFmpeg configure script
4 #
5 # Copyright (c) 2000-2002 Fabrice Bellard
6 # Copyright (c) 2005-2008 Diego Biurrun
7 # Copyright (c) 2005-2008 Mans Rullgard
8 #
9
10 # Prevent locale nonsense from breaking basic text processing.
11 LC_ALL=C
12 export LC_ALL
13
14 # make sure we are running under a compatible shell
15 # try to make this part work with most shells
16
17 try_exec(){
18 echo "Trying shell $1"
19 type "$1" > /dev/null 2>&1 && exec "$@"
20 }
21
22 unset foo
23 (: ${foo%%bar}) 2> /dev/null
24 E1="$?"
25
26 (: ${foo?}) 2> /dev/null
27 E2="$?"
28
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" "$@"
35 fi
36 if test "0$FF_CONF_EXEC" -lt 2; then
37 FF_CONF_EXEC=2
38 try_exec ksh "$0" "$@"
39 fi
40 if test "0$FF_CONF_EXEC" -lt 3; then
41 FF_CONF_EXEC=3
42 try_exec /usr/xpg4/bin/sh "$0" "$@"
43 fi
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."
53 fi
54 exit 1
55 fi
56
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
197 }
198
199 log(){
200 echo "$@" >> $logfile
201 }
202
203 log_file(){
204 log BEGIN $1
205 pr -n -t $1 >> $logfile
206 log END $1
207 }
208
209 echolog(){
210 log "$@"
211 echo "$@"
212 }
213
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.
220 EOF
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.
225 EOF
226 else
227 cat <<EOF
228 Include the log file "$logfile" produced by configure as this will help
229 solving the problem.
230 EOF
231 fi
232 rm -f $TMPC $TMPE $TMPH $TMPO $TMPS $TMPSH
233 exit 1
234 }
235
236 # Avoid locale weirdness, besides we really just want to translate ASCII.
237 toupper(){
238 echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
239 }
240
241 tolower(){
242 echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
243 }
244
245 set_all(){
246 value=$1
247 shift
248 for var in $*; do
249 eval $var=$value
250 done
251 }
252
253 set_weak(){
254 value=$1
255 shift
256 for var; do
257 eval : \${$var:=$value}
258 done
259 }
260
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
267 }
268
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
278 }
279
280 enable(){
281 set_all yes $*
282 }
283
284 disable(){
285 set_all no $*
286 }
287
288 enable_weak(){
289 set_weak yes $*
290 }
291
292 disable_weak(){
293 set_weak no $*
294 }
295
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
307 }
308
309 enable_deep(){
310 do_enable_deep $*
311 enable $*
312 }
313
314 enable_deep_weak(){
315 do_enable_deep $*
316 enable_weak $*
317 }
318
319 enabled(){
320 test "${1#!}" = "$1" && op== || op=!=
321 eval test "x\$${1#!}" $op "xyes"
322 }
323
324 disabled(){
325 test "${1#!}" = "$1" && op== || op=!=
326 eval test "x\$${1#!}" $op "xno"
327 }
328
329 enabled_all(){
330 for opt; do
331 enabled $opt || return 1
332 done
333 }
334
335 disabled_all(){
336 for opt; do
337 disabled $opt || return 1
338 done
339 }
340
341 enabled_any(){
342 for opt; do
343 enabled $opt && return 0
344 done
345 }
346
347 disabled_any(){
348 for opt; do
349 disabled $opt && return 0
350 done
351 return 1
352 }
353
354 set_default(){
355 for opt; do
356 eval test -z "\$$opt" && eval $opt=\$${opt}_default
357 done
358 }
359
360 is_in(){
361 value=$1
362 shift
363 for var in $*; do
364 [ $var = $value ] && return 0
365 done
366 return 1
367 }
368
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
375
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"
380
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
384
385 enabled_all $dep_all || disable $cfg
386 enabled_any $dep_any || disable $cfg
387 disabled_any $dep_sel && disable $cfg
388
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
394 fi
395
396 disable ${cfg}_checking
397 done
398 }
399
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
413 fi
414 done
415 }
416
417 flags_saved(){
418 (: ${SAVE_CFLAGS?}) 2> /dev/null
419 }
420
421 save_flags(){
422 flags_saved && return
423 SAVE_CFLAGS="$CFLAGS"
424 SAVE_LDFLAGS="$LDFLAGS"
425 SAVE_extralibs="$extralibs"
426 }
427
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
436 }
437
438 temp_cflags(){
439 save_flags
440 CFLAGS="$CFLAGS $*"
441 }
442
443 temp_ldflags(){
444 save_flags
445 LDFLAGS="$LDFLAGS $*"
446 }
447
448 temp_extralibs(){
449 save_flags
450 extralibs="$extralibs $*"
451 }
452
453 append(){
454 var=$1
455 shift
456 flags_saved && eval "SAVE_$var=\"\$SAVE_$var $*\""
457 eval "$var=\"\$$var $*\""
458 }
459
460 add_cflags(){
461 append CFLAGS "$@"
462 }
463
464 add_ldflags(){
465 append LDFLAGS "$@"
466 }
467
468 add_extralibs(){
469 append extralibs "$@"
470 }
471
472 check_cmd(){
473 log "$@"
474 "$@" >> $logfile 2>&1
475 }
476
477 check_cc(){
478 log check_cc "$@"
479 cat > $TMPC
480 log_file $TMPC
481 check_cmd $cc $CFLAGS "$@" -c -o $TMPO $TMPC
482 }
483
484 check_cpp(){
485 log check_cpp "$@"
486 cat > $TMPC
487 log_file $TMPC
488 check_cmd $cc $CFLAGS "$@" -E -o $TMPO $TMPC
489 }
490
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); }
498 EOF
499 }
500
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
507 }
508
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
518 }
519
520 check_cflags(){
521 log check_cflags "$@"
522 check_cc "$@" <<EOF && add_cflags "$@"
523 int x;
524 EOF
525 }
526
527 check_ldflags(){
528 log check_ldflags "$@"
529 check_ld "$@" <<EOF && add_ldflags "$@"
530 int main(void){ return 0; }
531 EOF
532 }
533
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;
543 EOF
544 }
545
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(); }
554 EOF
555 }
556
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;
573 }
574 EOF
575 }
576
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
586 EOF
587 }
588
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
599 }
600
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
611 }
612
613 check_exec(){
614 check_ld "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
615 }
616
617 check_exec_crash(){
618 code=`cat`
619
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.
625
626 (check_exec "$@") >> $logfile 2>&1 <<EOF
627 #include <signal.h>
628 static void sighandler(int sig){
629 raise(SIGTERM);
630 }
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 }
639 }
640 EOF
641 }
642
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;
657 EOF
658 }
659
660 require(){
661 name="$1"
662 header="$2"
663 func="$3"
664 shift 3
665 check_lib $header $func "$@" || die "ERROR: $name not found"
666 }
667
668 require2(){
669 name="$1"
670 headers="$2"
671 func="$3"
672 shift 3
673 check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
674 }
675
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
689 fi
690 return $err
691 }
692
693 apply(){
694 file=$1
695 shift
696 "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
697 }
698
699 # CONFIG_LIST contains configurable options, while HAVE_LIST is for
700 # system-dependent things.
701
702 COMPONENT_LIST="
703 bsfs
704 decoders
705 demuxers
706 encoders
707 filters
708 indevs
709 muxers
710 outdevs
711 parsers
712 protocols
713 "
714
715 CONFIG_LIST="
716 $COMPONENT_LIST
717 avfilter
718 avfilter_lavf
719 avisynth
720 beos_netserver
721 bzlib
722 ffmpeg
723 ffplay
724 ffserver
725 fft
726 golomb
727 gpl
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
761 "
762
763 THREADS_LIST='
764 beosthreads
765 os2threads
766 pthreads
767 w32threads
768 '
769
770 ARCH_LIST='
771 alpha
772 armv4l
773 bfin
774 ia64
775 m68k
776 mips
777 parisc
778 powerpc
779 s390
780 sh4
781 sparc
782 sparc64
783 x86
784 x86_32
785 x86_64
786 '
787
788 ARCH_EXT_LIST='
789 altivec
790 armv5te
791 armv6
792 armvfp
793 iwmmxt
794 mmi
795 mmx
796 mmx2
797 neon
798 ssse3
799 vis
800 '
801
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
843 pld
844 ppc64
845 round
846 roundf
847 sdl
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
861 "
862
863 # options emitted with CONFIG_ prefix but not available on command line
864 CONFIG_EXTRA="
865 fft_mmx
866 "
867
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
880 "
881
882 PATHS_LIST='
883 bindir
884 incdir
885 libdir
886 mandir
887 prefix
888 shlibdir
889 '
890
891 CMDLINE_SET="
892 $PATHS_LIST
893 arch
894 build_suffix
895 cc
896 cpu
897 cross_prefix
898 extra_version
899 logfile
900 source_path
901 target_os
902 "
903
904 # code dependency declarations
905
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"
918
919 # common features
920 fft_suggest="fft_mmx"
921 fft_mmx_deps="mmx yasm"
922
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"
970
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"
994
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"
1023
1024 # protocols
1025 http_protocol_deps="network"
1026 rtp_protocol_deps="udp_protocol"
1027 tcp_protocol_deps="network"
1028 udp_protocol_deps="network"
1029
1030 # filters
1031 movie_filter_deps="avfilter_lavf"
1032
1033 # programs
1034 ffplay_deps="sdl"
1035 ffserver_deps="ffm_muxer rtp_protocol rtsp_demuxer"
1036 ffserver_extralibs='$ldl'
1037 vhook_extralibs='$ldl'
1038
1039
1040 # default parameters
1041
1042 logfile="config.err"
1043
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"
1051
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"
1062
1063 # machine
1064 arch=`uname -m`
1065 cpu="generic"
1066
1067 # OS
1068 target_os=$(tolower $(uname -s))
1069
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"
1083
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)"'
1099
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,"'
1103
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."
1114 fi
1115
1116 FFMPEG_CONFIGURATION="$@"
1117
1118 find_things(){
1119 thing=$1
1120 pattern=$2
1121 file=$source_path/$3
1122 sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
1123 }
1124
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)
1135
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 \
1147
1148 die_unknown(){
1149 echo "Unknown option \"$1\"."
1150 echo "See $0 --help for available options."
1151 exit 1
1152 }
1153
1154 show_list() {
1155 suffix=_$1
1156 shift
1157 echo $* | sed s/$suffix//g | tr ' ' '\n' | sort
1158 exit 0
1159 }
1160
1161 for opt do
1162 optval="${opt#*=}"
1163 case "$opt" in
1164 --extra-cflags=*) add_cflags "$optval"
1165 ;;
1166 --extra-ldflags=*) add_ldflags "$optval"
1167 ;;
1168 --extra-libs=*) add_extralibs "$optval"
1169 ;;
1170 --disable-devices) disable $INDEV_LIST $OUTDEV_LIST
1171 ;;
1172 --enable-debug=*) debuglevel="$optval"
1173 ;;
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
1180 ;;
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
1189 fi
1190 ;;
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
1196 ;;
1197 --help|-h) show_help
1198 ;;
1199 *)
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'
1205 ;;
1206 esac
1207 done
1208
1209 disabled logging && logfile=/dev/null
1210
1211 echo "# $0 $@" > $logfile
1212 set >> $logfile
1213
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}"
1220
1221 set_default cc
1222
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"
1230 fi
1231
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"
1238
1239 check_cflags -std=c99
1240
1241 case "$arch" in
1242 i386|i486|i586|i686|i86pc|BePC)
1243 arch="x86_32"
1244 enable fast_unaligned
1245 ;;
1246 x86_64|amd64)
1247 arch="x86_32"
1248 enable fast_unaligned
1249 check_cc <<EOF && enable fast_64bit && arch="x86_64"
1250 int test[sizeof(char*) - 7];
1251 EOF
1252 ;;
1253 # armv4l is a subset of armv[567]*l
1254 arm|armv[4567]*l)
1255 arch="armv4l"
1256 ;;
1257 alpha)
1258 arch="alpha"
1259 enable fast_64bit
1260 ;;
1261 "Power Macintosh"|ppc|powerpc)
1262 arch="powerpc"
1263 enable fast_unaligned
1264 ;;
1265 ppc64)
1266 arch="powerpc"
1267 enable fast_64bit
1268 enable fast_unaligned
1269 ;;
1270 mips|mipsel|IP*)
1271 arch="mips"
1272 ;;
1273 sun4u|sparc64)
1274 arch="sparc64"
1275 enable fast_64bit
1276 ;;
1277 sparc)
1278 arch="sparc"
1279 ;;
1280 sh4)
1281 arch="sh4"
1282 ;;
1283 parisc)
1284 arch="parisc"
1285 ;;
1286 parisc64)
1287 arch="parisc"
1288 enable fast_64bit
1289 ;;
1290 s390|s390x)
1291 arch="s390"
1292 ;;
1293 m68k)
1294 arch="m68k"
1295 ;;
1296 ia64)
1297 arch="ia64"
1298 enable fast_64bit
1299 ;;
1300 bfin)
1301 arch="bfin"
1302 ;;
1303 *)
1304 arch="unknown"
1305 ;;
1306 esac
1307
1308 enable $arch
1309 enabled_any x86_32 x86_64 && enable x86
1310 enabled sparc64 && enable sparc
1311
1312 # OS specific
1313 case $target_os in
1314 beos|haiku|zeta)
1315 prefix_default="$HOME/config"
1316 # helps building libavcodec
1317 add_cflags "-DPIC -fomit-frame-pointer"
1318 # 3 gcc releases known for BeOS, each with ugly bugs
1319 gcc_version="`$cc -v 2>&1 | grep version | cut -d ' ' -f3-`"
1320 case "$gcc_version" in
1321 2.9-beos-991026*|2.9-beos-000224*) echo "R5/GG gcc"
1322 disable mmx
1323 ;;
1324 *20010315*) echo "BeBits gcc"
1325 add_cflags "-fno-expensive-optimizations"
1326 ;;
1327 esac
1328 SHFLAGS=-nostart
1329 # enable BeOS things
1330 enable audio_beos
1331 # no need for libm, but the inet stuff
1332 # Check for BONE
1333 # XXX: actually should check for NOT net_server
1334 if echo $BEINCLUDES | grep -q 'headers/be/bone'; then
1335 network_extralibs="-lbind -lsocket"
1336 else
1337 enable beos_netserver
1338 network_extralibs="-lnet"
1339 fi ;;
1340 sunos)
1341 FFSERVERLDFLAGS=""
1342 SHFLAGS='-shared -Wl,-h,$$(@F)'
1343 network_extralibs="-lsocket -lnsl"
1344 ;;
1345 netbsd)
1346 oss_demuxer_extralibs="-lossaudio"
1347 oss_muxer_extralibs="-lossaudio"
1348 ;;
1349 openbsd)
1350 disable need_memalign
1351 LIBOBJFLAGS='$(PIC)'
1352 SHFLAGS='-shared'
1353 SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF).$(LIBVERSION)'
1354 SLIBNAME_WITH_VERSION='$(SLIBNAME)'
1355 SLIBNAME_WITH_MAJOR='$(SLIBNAME)'
1356 oss_demuxer_extralibs="-lossaudio"
1357 oss_muxer_extralibs="-lossaudio"
1358 ;;
1359 freebsd)
1360 disable need_memalign
1361 ;;
1362 bsd/os)
1363 osextralibs="-lpoll -lgnugetopt"
1364 strip="strip -d"
1365 ;;
1366 darwin)
1367 disable need_memalign
1368 SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR) -Wl,-read_only_relocs,suppress'
1369 VHOOKSHFLAGS='-dynamiclib -Wl,-single_module -flat_namespace -undefined suppress -Wl,-install_name,$(SHLIBDIR)/vhook/$$(@F)'
1370 strip="strip -x"
1371 FFLDFLAGS="-Wl,-dynamic,-search_paths_first"
1372 SLIBSUF=".dylib"
1373 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
1374 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
1375 FFSERVERLDFLAGS=-Wl,-bind_at_load
1376 objformat="macho"
1377 enabled x86_64 && objformat="macho64"
1378 ;;
1379 mingw32*)
1380 target_os=mingw32
1381 LIBTARGET=i386
1382 if test $arch = x86_64; then
1383 disable need_memalign
1384 LIBTARGET=x64
1385 fi
1386 shlibdir_default="$bindir_default"
1387 VHOOKSHFLAGS='-shared -L$(BUILD_ROOT)/libavformat -L$(BUILD_ROOT)/libavcodec -L$(BUILD_ROOT)/libavutil'
1388 VHOOKLIBS='-lavformat$(BUILDSUF) -lavcodec$(BUILDSUF) -lavutil$(BUILDSUF) $(EXTRALIBS)'
1389 if enabled swscale; then
1390 VHOOKSHFLAGS="$VHOOKSHFLAGS -L\$(BUILD_ROOT)/libswscale"
1391 VHOOKLIBS="$VHOOKLIBS -lswscale\$(BUILDSUF)"
1392 fi
1393 disable ffserver
1394 SLIBPREF=""
1395 SLIBSUF=".dll"
1396 EXESUF=".exe"
1397 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1398 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1399 SLIB_EXTRA_CMD='-lib /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)'
1400 SLIB_INSTALL_EXTRA_CMD='-install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"; \
1401 install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)"'
1402 SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"'
1403 SHFLAGS='-shared -Wl,--output-def,$$(@:$(SLIBSUF)=.def) -Wl,--enable-runtime-pseudo-reloc -Wl,--enable-auto-image-base'
1404 objformat="win32"
1405 enable dos_paths
1406 ;;
1407 cygwin*)
1408 target_os=cygwin
1409 shlibdir_default="$bindir_default"
1410 VHOOKSHFLAGS='-shared -L$(BUILD_ROOT)/libavformat -L$(BUILD_ROOT)/libavcodec -L$(BUILD_ROOT)/libavutil'
1411 VHOOKLIBS='-lavformat$(BUILDSUF) -lavcodec$(BUILDSUF) -lavutil$(BUILDSUF) $(EXTRALIBS)'
1412 if enabled swscale; then
1413 VHOOKSHFLAGS="$VHOOKSHFLAGS -L\$(BUILD_ROOT)/libswscale"
1414 VHOOKLIBS="$VHOOKLIBS -lswscale\$(BUILDSUF)"
1415 fi
1416 EXESUF=".exe"
1417 SLIBPREF="cyg"
1418 SLIBSUF=".dll"
1419 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1420 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1421 SHFLAGS='-shared -Wl,--enable-auto-image-base'
1422 objformat="win32"
1423 enable dos_paths
1424 ;;
1425 *-dos|freedos|opendos)
1426 disable ffplay ffserver vhook
1427 disable $INDEV_LIST $OUTDEV_LIST
1428 network_extralibs="-lsocket"
1429 EXESUF=".exe"
1430 objformat="win32"
1431 enable dos_paths
1432 ;;
1433 linux)
1434 enable dv1394
1435 ;;
1436 irix*)
1437 target_os=irix
1438 ranlib="echo ignoring ranlib"
1439 ;;
1440 os/2*)
1441 strip="lxlite"
1442 ln_s="cp -f"
1443 EXESUF=".exe"
1444 FFLDFLAGS="-Zomf -Zbin-files -Zargs-wild -Zmap"
1445 SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
1446 FFSERVERLDFLAGS=""
1447 LIBSUF="_s.a"
1448 SLIBPREF=""
1449 SLIBSUF=".dll"
1450 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
1451 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
1452 SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
1453 echo PROTMODE >> $(SUBDIR)$(NAME).def; \
1454 echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
1455 echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
1456 echo EXPORTS >> $(SUBDIR)$(NAME).def; \
1457 emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
1458 SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
1459 emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
1460 SLIB_INSTALL_EXTRA_CMD='install -m 644 $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib "$(LIBDIR)"'
1461 SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.a "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.lib'
1462 disable vhook
1463 enable dos_paths
1464 ;;
1465 interix)
1466 disable vhook
1467 ;;
1468
1469 *)
1470 target_os="${target_os}-UNKNOWN"
1471 ;;
1472 esac
1473
1474 set_default $PATHS_LIST
1475
1476 add_extralibs $osextralibs
1477
1478 # Combine FFLDFLAGS and the LDFLAGS environment variable.
1479 LDFLAGS="$FFLDFLAGS $LDFLAGS"
1480
1481 test -n "$cross_prefix" && enable cross_compile
1482
1483 # we need to build at least one lib type
1484 if ! enabled_any static shared; then
1485 cat <<EOF
1486 At least one library type must be built.
1487 Specify --enable-static to build the static libraries or --enable-shared to
1488 build the shared libraries as well. To only build the shared libraries specify
1489 --disable-static in addition to --enable-shared.
1490 EOF
1491 exit 1;
1492 fi
1493
1494 disabled static && LIBNAME=""
1495
1496 if enabled_any libfaad libfaadbin ; then
1497 if check_header faad.h; then
1498 check_cc <<EOF
1499 #include <faad.h>
1500 #ifndef FAAD2_VERSION
1501 ok faad1
1502 #endif
1503 int main(void) { return 0; }
1504 EOF
1505 test $? = 0 && enable libfaad2
1506 else
1507 die "FAAD test failed."
1508 fi
1509 fi
1510
1511
1512 if ! enabled gpl; then
1513 die_gpl_disabled(){
1514 name=$1
1515 shift
1516 enabled_any $@ && die "$name is under GPL and --enable-gpl is not specified."
1517 }
1518 die_gpl_disabled "The Postprocessing code" postproc
1519 die_gpl_disabled "libx264" libx264
1520 die_gpl_disabled "libxvidcore" libxvid
1521 die_gpl_disabled "FAAD2" libfaad2
1522 die_gpl_disabled "The X11 grabber" x11grab
1523 die_gpl_disabled "The software scaler" swscale
1524 fi
1525
1526 if ! enabled nonfree && enabled_any libamr_nb libamr_wb; then
1527 die "libamr is nonfree and --enable-nonfree is not specified."
1528 fi
1529
1530 check_deps $ARCH_EXT_LIST
1531
1532 test -z "$need_memalign" && need_memalign="$mmx"
1533
1534 #Darwin CC versions
1535 if test $target_os = darwin; then
1536 if $cc -v 2>&1 | grep -q xlc; then
1537 add_cflags "-qpdf2 -qlanglvl=extc99 -qmaxmem=-1 -qarch=auto -qtune=auto"
1538 else
1539 add_cflags "-pipe"
1540 check_cflags "-force_cpusubtype_ALL"
1541 check_cflags "-Wno-sign-compare"
1542 enabled shared || check_cflags -mdynamic-no-pic
1543 fi
1544 fi
1545
1546 disabled optimizations || check_cflags -fomit-frame-pointer
1547
1548 # Add processor-specific flags
1549 if test $cpu != "generic"; then
1550 warn_altivec(){
1551 $1 altivec && echo "WARNING: Tuning for $2 but AltiVec $1.";
1552 }
1553 case $cpu in
1554 601|ppc601|PowerPC601)
1555 add_cflags "-mcpu=601"
1556 warn_altivec enabled PPC601
1557 ;;
1558 603*|ppc603*|PowerPC603*)
1559 add_cflags "-mcpu=603"
1560 warn_altivec enabled PPC603
1561 ;;
1562 604*|ppc604*|PowerPC604*)
1563 add_cflags "-mcpu=604"
1564 warn_altivec enabled PPC604
1565 ;;
1566 G3|g3|75*|ppc75*|PowerPC75*)
1567 add_cflags "-mcpu=750 -mpowerpc-gfxopt"
1568 warn_altivec enabled PPC75x
1569 ;;
1570 G4|g4|745*|ppc745*|PowerPC745*)
1571 add_cflags "-mcpu=7450 -mpowerpc-gfxopt"
1572 warn_altivec disabled PPC745x
1573 ;;
1574 74*|ppc74*|PowerPC74*)
1575 add_cflags "-mcpu=7400 -mpowerpc-gfxopt"
1576 warn_altivec disabled PPC74xx
1577 ;;
1578 G5|g5|970|ppc970|PowerPC970|power4*|Power4*)
1579 add_cflags "-mcpu=970 -mpowerpc-gfxopt -mpowerpc64"
1580 warn_altivec disabled PPC970
1581 enable ppc64
1582 ;;
1583 Cell|CELL|cell)
1584 add_cflags "-mcpu=cell"
1585 warn_altivec disabled Cell
1586 enable ppc64
1587 ;;
1588 # targets that do NOT support conditional mov (cmov)
1589 i[345]86|pentium|pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
1590 add_cflags "-march=$cpu"
1591 disable cmov
1592 ;;
1593 # targets that do support conditional mov (cmov)
1594 i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2)
1595 add_cflags "-march=$cpu"
1596 enable cmov
1597 enable fast_cmov
1598 ;;
1599 # targets that do support conditional mov but on which it's slow
1600 pentium4|pentium4m|prescott|nocona)
1601 add_cflags "-march=$cpu"
1602 enable cmov
1603 disable fast_cmov
1604 ;;
1605 sparc64)
1606 add_cflags "-mcpu=v9"
1607 ;;
1608 arm11*|cortex*)
1609 add_cflags "-mcpu=$cpu"
1610 enable fast_unaligned
1611 ;;
1612 armv*)
1613 add_cflags "-march=$cpu"
1614 ;;
1615 arm*)
1616 add_cflags "-mcpu=$cpu"
1617 ;;
1618 *)
1619 echo "WARNING: Unknown CPU \"$cpu\", ignored."
1620 ;;
1621 esac
1622 fi
1623
1624 # make sure we can execute files in $TMPDIR
1625 cat > $TMPSH 2>> $logfile <<EOF
1626 #! /bin/sh
1627 EOF
1628 chmod +x $TMPSH >> $logfile 2>&1
1629 if ! $TMPSH >> $logfile 2>&1; then
1630 cat <<EOF
1631 Unable to create and execute files in $TMPDIR1. Set the TMPDIR environment
1632 variable to another directory and make sure that $TMPDIR1 is not mounted
1633 noexec.
1634 EOF
1635 die "Sanity test failed."
1636 fi
1637 rm $TMPSH
1638
1639 # compiler sanity check
1640 check_exec <<EOF
1641 int main(void){ return 0; }
1642 EOF
1643 if test "$?" != 0; then
1644 echo "$cc is unable to create an executable file."
1645 if test -z "$cross_prefix" && ! enabled cross_compile ; then
1646 echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
1647 echo "Only do this if you know what cross compiling means."
1648 fi
1649 die "C compiler test failed."
1650 fi
1651
1652 check_cc <<EOF || die "Symbol mangling check failed."
1653 int ff_extern;
1654 EOF
1655 sym=$($nm -P -g $TMPO | grep ff_extern)
1656 extern_prefix=${sym%%ff_extern*}
1657
1658 check_asm inline_asm '""'
1659
1660 if enabled x86; then
1661 # check whether EBP is available on x86
1662 # As 'i' is stored on the stack, this program will crash
1663 # if the base pointer is used to access it because the
1664 # base pointer is cleared in the inline assembly code.
1665 check_exec_crash <<EOF && enable ebp_available
1666 volatile int i=0;
1667 __asm__ volatile (
1668 "xorl %%ebp, %%ebp"
1669 ::: "%ebp");
1670 return i;
1671 EOF
1672
1673 # check wether EBX is available on x86
1674 check_asm ebx_available '"":::"%ebx"'
1675
1676 # check whether binutils is new enough to compile SSSE3/MMX2
1677 enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
1678 enabled mmx2 && check_asm mmx2 '"movss %xmm0, %xmm0"'
1679
1680 check_asm bswap '"bswap %%eax" ::: "%eax"'
1681
1682 YASMFLAGS="-f $objformat -DARCH_$(toupper $arch)"
1683 enabled x86_64 && append YASMFLAGS "-m amd64"
1684 enabled_all x86_64 shared && append YASMFLAGS "-DPIC"
1685 case "$objformat" in
1686 elf) enabled debug && append YASMFLAGS "-g dwarf2" ;;
1687 macho64) append YASMFLAGS "-DPIC -DPREFIX" ;;
1688 *) append YASMFLAGS "-DPREFIX" ;;
1689 esac
1690 check_yasm "pabsw xmm0, xmm0" && enable yasm
1691 fi
1692
1693 # check for assembler specific support
1694
1695 if test $arch = "powerpc"; then
1696 check_asm dcbzl '"dcbzl 0, 1"'
1697 fi
1698
1699 # check for SIMD availability
1700
1701 # AltiVec flags: The FSF version of GCC differs from the Apple version
1702 if enabled altivec; then
1703 check_cflags -maltivec -mabi=altivec &&
1704 { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
1705 check_cflags -faltivec
1706
1707 # check if our compiler supports Motorola AltiVec C API
1708 check_cc <<EOF || disable altivec
1709 $inc_altivec_h
1710 int main(void) {
1711 vector signed int v1, v2, v3;
1712 v1 = vec_add(v2,v3);
1713 return 0;
1714 }
1715 EOF
1716
1717 # check if our compiler supports braces for vector declarations
1718 check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
1719 $inc_altivec_h
1720 int main (void) { (vector int) {1}; return 0; }
1721 EOF
1722 fi
1723
1724 # We have to check if pld is a nop and disable it.
1725 enabled armv4l && check_asm pld '"pld [r0]"'
1726 enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
1727 enabled armv6 && check_asm armv6 '"sadd16 r0, r0, r0"'
1728 enabled armvfp && check_asm armvfp '"fadds s0, s0, s0"'
1729 enabled iwmmxt && check_asm iwmmxt '"wunpckelub wr6, wr4"'
1730 enabled mmi && check_asm mmi '"lq $2, 0($2)"'
1731 enabled neon && check_asm neon '"vadd.i16 q0, q0, q0"'
1732 enabled vis && check_asm vis '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc
1733
1734 enabled vis && add_cflags "-mcpu=ultrasparc -mtune=ultrasparc"
1735
1736 # ---
1737 # big/little-endian test
1738 check_cc <<EOF || die "endian test failed"
1739 unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
1740 EOF
1741 od -A n -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
1742
1743 # ---
1744 # check availability of some header files
1745
1746 if check_func dlopen; then
1747 ldl=
1748 elif check_func dlopen -ldl; then
1749 ldl=-ldl
1750 fi
1751
1752 check_func fork
1753 check_func gethrtime
1754 check_func getrusage
1755 check_func inet_aton $network_extralibs
1756 check_func memalign
1757 check_func mkstemp
1758 check_func_headers windows.h GetProcessTimes
1759
1760 check_header conio.h
1761 check_header dlfcn.h
1762 check_header malloc.h
1763 check_header poll.h
1764 check_header sys/mman.h
1765 check_header sys/resource.h
1766 check_header sys/select.h
1767 check_header termios.h
1768
1769 if ! enabled_any memalign memalign_hack && enabled need_memalign ; then
1770 die "Error, no memalign() but SSE enabled, disable it or use --enable-memalign-hack."
1771 fi
1772
1773 disabled zlib || check_lib zlib.h zlibVersion -lz || disable zlib
1774 disabled bzlib || check_lib bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
1775
1776 # check for some common methods of building with pthread support
1777 # do this before the optional library checks as some of them require pthreads
1778 if enabled pthreads; then
1779 if check_func pthread_create; then
1780 :
1781 elif check_func pthread_create -pthread; then
1782 add_cflags -pthread
1783 add_extralibs -pthread
1784 elif check_func pthread_create -pthreads; then
1785 add_cflags -pthreads
1786 add_extralibs -pthreads
1787 elif check_func pthread_create -lpthreadGC2; then
1788 add_extralibs -lpthreadGC2
1789 elif ! check_lib pthread.h pthread_create -lpthread; then
1790 die "ERROR: can't find pthreads library"
1791 fi
1792 fi
1793
1794 for thread in $THREADS_LIST; do
1795 if enabled $thread; then
1796 test -n "$thread_type" &&
1797 die "ERROR: Only one thread type must be selected." ||
1798 thread_type="$thread"
1799 fi
1800 done
1801
1802 check_lib math.h sin -lm
1803
1804 # test for C99 functions in math.h
1805 for func in llrint lrint lrintf round roundf; do
1806 check_exec <<EOF && enable $func || disable $func
1807 #include <math.h>
1808 int main(void) { return ($func(3.999f) > 0)?0:1; }
1809 EOF
1810 done
1811
1812 # these are off by default, so fail if requested and not available
1813 enabled avisynth && require2 vfw32 "windows.h vfw.h" AVIFileInit -lvfw32
1814 enabled libamr_nb && require libamrnb amrnb/interf_dec.h Speech_Decode_Frame_init -lamrnb -lm
1815 enabled libamr_wb && require libamrwb amrwb/dec_if.h D_IF_init -lamrwb -lm
1816 enabled libdirac && add_cflags $(pkg-config --cflags dirac) &&
1817 require libdirac libdirac_decoder/dirac_parser.h dirac_decoder_init -ldirac_decoder &&
1818 require libdirac libdirac_encoder/dirac_encoder.h dirac_encoder_init -ldirac_encoder
1819 enabled libfaac && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
1820 enabled libfaad && require2 libfaad faad.h faacDecOpen -lfaad
1821 enabled libgsm && require libgsm gsm.h gsm_create -lgsm
1822 enabled libmp3lame && require LAME lame/lame.h lame_init -lmp3lame -lm
1823 enabled libnut && require libnut libnut.h nut_demuxer_init -lnut
1824 enabled libschroedinger && add_cflags $(pkg-config --cflags schroedinger-1.0) &&
1825 require libschroedinger schroedinger/schro.h schro_init $(pkg-config --libs schroedinger-1.0)
1826 enabled libspeex && require libspeex speex/speex.h speex_decoder_init -lspeex
1827 enabled libtheora && require libtheora theora/theora.h theora_info_init -ltheora -logg
1828 enabled libvorbis && require libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
1829 enabled libx264 && require x264 x264.h x264_encoder_open -lx264 -lm &&
1830 { check_cpp_condition x264.h "X264_BUILD >= 65" ||
1831 die "ERROR: libx264 version must be >= 0.65."; }
1832 enabled libxvid && require Xvid xvid.h xvid_global -lxvidcore
1833 enabled mlib && require mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
1834
1835 # libdc1394 check
1836 if enabled libdc1394; then
1837 { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
1838 enable libdc1394_2; } ||
1839 { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
1840 enable libdc1394_1; } ||
1841 die "ERROR: No version of libdc1394 found "
1842 fi
1843
1844
1845 _restrict=
1846 for restrict_keyword in restrict __restrict__ __restrict; do
1847 check_cc <<EOF && _restrict=$restrict_keyword && break
1848 void foo(char * $restrict_keyword p);
1849 EOF
1850 done
1851
1852 test "$vhook" = "default" && vhook="$dlopen"
1853
1854 if test "$target_os" = cygwin -o "$target_os" = mingw32 && enabled_all static vhook ; then
1855 disable vhook
1856 echo
1857 echo "At the moment vhooks don't work on Cygwin or MinGW static builds."
1858 echo "Patches welcome."
1859 echo
1860 fi
1861
1862 if enabled vhook; then
1863 check_ldflags -rdynamic
1864 check_ldflags -export-dynamic
1865 fi
1866
1867 check_foo_config imlib2 imlib2 Imlib2.h imlib_load_font
1868 check_foo_config freetype2 freetype ft2build.h FT_Init_FreeType
1869
1870 ##########################################
1871 # SDL check
1872
1873 disable sdl_too_old
1874 disable sdl
1875 SDL_CONFIG="${cross_prefix}sdl-config"
1876 if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
1877 sdl_cflags=`"${SDL_CONFIG}" --cflags`
1878 temp_cflags $sdl_cflags
1879 temp_extralibs `"${SDL_CONFIG}" --libs`
1880 if check_lib2 SDL.h SDL_Init; then
1881 _sdlversion=`"${SDL_CONFIG}" --version | sed 's/[^0-9]//g'`
1882 if test "$_sdlversion" -lt 121 ; then
1883 enable sdl_too_old
1884 else
1885 enable sdl
1886 check_cc $sdl_cflags <<EOF && enable sdl_video_size
1887 #include <SDL.h>
1888 int main(int argc, char **argv){
1889 const SDL_VideoInfo *vi = SDL_GetVideoInfo();
1890 int w = vi->current_w;
1891 return 0;
1892 }
1893 EOF
1894 fi
1895 fi
1896 restore_flags
1897 fi
1898
1899 texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
1900
1901 ##########################################
1902 # Network check
1903
1904 if enabled network; then
1905 check_type sys/socket.h socklen_t
1906 # Prefer arpa/inet.h over winsock2
1907 if check_header arpa/inet.h ; then
1908 check_func closesocket
1909 elif check_header winsock2.h ; then
1910 network_extralibs="-lws2_32"
1911 check_type ws2tcpip.h socklen_t
1912 check_func_headers winsock2.h closesocket
1913 fi
1914 fi
1915
1916 ##########################################
1917 # IPv6 check
1918
1919 enabled network && enabled ipv6 && check_ld <<EOF && enable ipv6 || disable ipv6
1920 #include <sys/types.h>
1921 #include <sys/socket.h>
1922 #include <netinet/in.h>
1923 #include <netdb.h>
1924 int main(void) {
1925 struct sockaddr_storage saddr;
1926 struct ipv6_mreq mreq6;
1927 getaddrinfo(0,0,0,0);
1928 getnameinfo(0,0,0,0,0,0,0);
1929 IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
1930 }
1931 EOF
1932
1933 check_header linux/videodev.h
1934 check_header linux/videodev2.h
1935 check_header sys/videoio.h
1936
1937 check_func_headers "windows.h vfw.h" capCreateCaptureWindow -lvfw32
1938
1939 # check for ioctl_meteor.h, ioctl_bt848.h and alternatives
1940 { check_header dev/bktr/ioctl_meteor.h &&
1941 check_header dev/bktr/ioctl_bt848.h; } ||
1942 { check_header machine/ioctl_meteor.h &&
1943 check_header machine/ioctl_bt848.h; } ||
1944 { check_header dev/video/meteor/ioctl_meteor.h &&
1945 check_header dev/video/bktr/ioctl_bt848.h; } ||
1946 check_header dev/ic/bt8xx.h
1947
1948 check_header sys/soundcard.h
1949 check_header soundcard.h
1950
1951 # deal with the X11 frame grabber
1952 enabled x11grab &&
1953 check_header X11/Xlib.h &&
1954 check_header X11/extensions/XShm.h &&
1955 check_func XOpenDisplay -lX11 &&
1956 check_func XShmCreateImage -lX11 -lXext
1957
1958 enabled debug && add_cflags -g"$debuglevel"
1959
1960 # add some useful compiler flags if supported
1961 check_cflags -Wdeclaration-after-statement
1962 check_cflags -Wall
1963 check_cflags -Wno-switch
1964 check_cflags -Wdisabled-optimization
1965 check_cflags -Wpointer-arith
1966 check_cflags -Wredundant-decls
1967 check_cflags -Wno-pointer-sign
1968 check_cflags -Wcast-qual
1969 check_cflags -Wwrite-strings
1970 check_cflags -Wtype-limits
1971 enabled extra_warnings && check_cflags -Winline
1972
1973 # add some linker flags
1974 check_ldflags -Wl,--warn-common
1975 check_ldflags -Wl,--as-needed
1976 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'
1977 check_ldflags -Wl,-Bsymbolic
1978
1979 if enabled small; then
1980 check_cflags -Os # not all compilers support -Os
1981 optimizations="small"
1982 elif enabled optimizations; then
1983 if $cc -v 2>&1 | grep -q xlc; then
1984 add_cflags "-O5"
1985 add_ldflags "-O5"
1986 else
1987 add_cflags "-O3"
1988 fi
1989 fi
1990 check_cflags -fno-math-errno
1991 check_cflags -fno-signed-zeros
1992
1993 # add some flags for Intel C Compiler
1994 if $cc --version 2> /dev/null | grep -q Intel; then
1995 # Just warnings, no remarks
1996 check_cflags -w1
1997 # -wd: Disable following warnings
1998 # 144, 167, 556: -Wno-pointer-sign
1999 # 10006: ignoring unknown option -fno-signed-zeros
2000 # 10156: ignoring option '-W'; no argument required
2001 check_cflags -wd144,167,556,10006,10156
2002 # 11030: Warning unknown option --as-needed
2003 # 10156: ignoring option '-export'; no argument required
2004 check_ldflags -wd10156,11030
2005 # Allow to compile with optimizations
2006 check_ldflags -march=$cpu
2007 fi
2008
2009 # PIC flags for shared library objects where they are needed
2010 if enabled shared; then
2011 # LIBOBJFLAGS may have already been set in the OS configuration
2012 if test -z "$LIBOBJFLAGS" ; then
2013 case "$arch" in
2014 x86_64|ia64|alpha|sparc*|power*|parisc*|mips*) LIBOBJFLAGS='$(PIC)' ;;
2015 esac
2016 fi
2017 fi
2018
2019 if enabled gprof; then
2020 add_cflags "-p"
2021 add_ldflags "-p"
2022 fi
2023
2024 VHOOKCFLAGS="-fPIC"
2025
2026 # Find out if the .align argument is a power of two or not.
2027 if test $asmalign_pot = "unknown"; then
2028 disable asmalign_pot
2029 echo '__asm__ (".align 3");' | check_cc && enable asmalign_pot
2030 fi
2031
2032 enabled_any $DECODER_LIST && enable decoders
2033 enabled_any $ENCODER_LIST && enable encoders
2034 enabled_any $BSF_LIST && enable bsfs
2035 enabled_any $DEMUXER_LIST && enable demuxers
2036 enabled_any $MUXER_LIST && enable muxers
2037 enabled_any $FILTER_LIST && enable filters
2038 enabled_any $INDEV_LIST && enable demuxers
2039 enabled_any $OUTDEV_LIST && enable muxers
2040 enabled_any $PROTOCOL_LIST && enable protocols
2041
2042 enabled_any $THREADS_LIST && enable threads
2043
2044 check_deps $CONFIG_LIST \
2045 $CONFIG_EXTRA \
2046 $HAVE_LIST \
2047 $DECODER_LIST \
2048 $ENCODER_LIST \
2049 $PARSER_LIST \
2050 $BSF_LIST \
2051 $DEMUXER_LIST \
2052 $MUXER_LIST \
2053 $FILTER_LIST \
2054 $INDEV_LIST \
2055 $OUTDEV_LIST \
2056 $PROTOCOL_LIST \
2057
2058 enabled libdc1394 && append pkg_requires "libraw1394"
2059 enabled libdirac && append pkg_requires "dirac"
2060 enabled libtheora && append pkg_requires "theora"
2061 enabled libvorbis && append pkg_requires "vorbisenc"
2062
2063 echo "install prefix $prefix"
2064 echo "source path $source_path"
2065 echo "C compiler $cc"
2066 echo ".align is power-of-two $asmalign_pot"
2067 echo "ARCH $arch ($cpu)"
2068 if test "$build_suffix" != ""; then
2069 echo "build suffix $build_suffix"
2070 fi
2071 if test "$extra_version" != ""; then
2072 echo "version string suffix $extra_version"
2073 fi
2074 echo "big-endian ${bigendian-no}"
2075 if test $arch = "x86_32" -o $arch = "x86_64"; then
2076 echo "yasm ${yasm-no}"
2077 echo "MMX enabled ${mmx-no}"
2078 echo "CMOV enabled ${cmov-no}"
2079 echo "CMOV is fast ${fast_cmov-no}"
2080 echo "EBX available ${ebx_available-no}"
2081 echo "EBP available ${ebp_available-no}"
2082 fi
2083 if test $arch = "armv4l"; then
2084 echo "ARMv5TE enabled ${armv5te-no}"
2085 echo "ARMv6 enabled ${armv6-no}"
2086 echo "ARM VFP enabled ${armvfp-no}"
2087 echo "IWMMXT enabled ${iwmmxt-no}"
2088 echo "NEON enabled ${neon-no}"
2089 fi
2090 if test $arch = "mips"; then
2091 echo "MMI enabled ${mmi-no}"
2092 fi
2093 if test $arch = "powerpc"; then
2094 echo "AltiVec enabled ${altivec-no}"
2095 echo "dcbzl available ${dcbzl-no}"
2096 fi
2097 echo "gprof enabled ${gprof-no}"
2098 echo "debug symbols ${debug-no}"
2099 echo "strip symbols ${stripping-no}"
2100 echo "optimizations ${optimizations-no}"
2101 echo "static ${static-no}"
2102 echo "shared ${shared-no}"
2103 echo "postprocessing support ${postproc-no}"
2104 echo "software scaler enabled ${swscale-no}"
2105 echo "new filter support ${avfilter-no}"
2106 echo "filters using lavformat ${avfilter_lavf-no}"
2107 echo "video hooking ${vhook-no}"
2108 if enabled vhook; then
2109 echo "Imlib2 support ${imlib2-no}"
2110 echo "FreeType support ${freetype2-no}"
2111 fi
2112 echo "network support ${network-no}"
2113 if enabled network; then
2114 echo "IPv6 support ${ipv6-no}"
2115 fi
2116 echo "threading support ${thread_type-no}"
2117 echo "SDL support ${sdl-no}"
2118 if enabled sdl_too_old; then
2119 echo "-> Your SDL version is too old - please upgrade to have FFplay/SDL support."
2120 fi
2121 echo "Sun medialib support ${mlib-no}"
2122 echo "AVISynth enabled ${avisynth-no}"
2123 echo "libamr-nb support ${libamr_nb-no}"
2124 echo "libamr-wb support ${libamr_wb-no}"
2125 echo "libdc1394 support ${libdc1394-no}"
2126 echo "libdirac enabled ${libdirac-no}"
2127 echo "libfaac enabled ${libfaac-no}"
2128 echo "libfaad enabled ${libfaad-no}"
2129 echo "libfaad dlopened ${libfaadbin-no}"
2130 echo "libgsm enabled ${libgsm-no}"
2131 echo "libmp3lame enabled ${libmp3lame-no}"
2132 echo "libnut enabled ${libnut-no}"
2133 echo "libschroedinger enabled ${libschroedinger-no}"
2134 echo "libspeex enabled ${libspeex-no}"
2135 echo "libtheora enabled ${libtheora-no}"
2136 echo "libvorbis enabled ${libvorbis-no}"
2137 echo "libx264 enabled ${libx264-no}"
2138 echo "libxvid enabled ${libxvid-no}"
2139 echo "zlib enabled ${zlib-no}"
2140 echo "bzlib enabled ${bzlib-no}"
2141 echo
2142
2143 for type in decoder encoder parser demuxer muxer protocol filter bsf indev outdev; do
2144 echo "Enabled ${type}s:"
2145 eval list=\$$(toupper $type)_LIST
2146 for part in $list; do
2147 enabled $part && echo ${part%_*}
2148 done | sort | pr -3 -t
2149 echo
2150 done
2151
2152 license="LGPL"
2153 if enabled nonfree; then
2154 license="unredistributable"
2155 elif enabled gpl; then
2156 license="GPL"
2157 fi
2158
2159 echo "License: $license"
2160
2161 echo "Creating config.mak and config.h..."
2162
2163 echo "# Automatically generated by configure - do not modify!" > config.mak
2164 echo "/* Automatically generated by configure - do not modify! */" > $TMPH
2165 echo "#ifndef FFMPEG_CONFIG_H" >> $TMPH
2166 echo "#define FFMPEG_CONFIG_H" >> $TMPH
2167 echo "#define FFMPEG_CONFIGURATION \"$FFMPEG_CONFIGURATION\"" >> $TMPH
2168
2169 echo "FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION" >> config.mak
2170 echo "prefix=$prefix" >> config.mak
2171 echo "LIBDIR=\$(DESTDIR)$libdir" >> config.mak
2172 echo "SHLIBDIR=\$(DESTDIR)$shlibdir" >> config.mak
2173 echo "INCDIR=\$(DESTDIR)$incdir" >> config.mak
2174 echo "BINDIR=\$(DESTDIR)$bindir" >> config.mak
2175 echo "MANDIR=\$(DESTDIR)$mandir" >> config.mak
2176 echo "CC=$cc" >> config.mak
2177 echo "YASM=$yasmexe" >> config.mak
2178 echo "AR=$ar" >> config.mak
2179 echo "RANLIB=$ranlib" >> config.mak
2180 echo "LN_S=$ln_s" >> config.mak
2181 enabled stripping &&
2182 echo "STRIP=$strip" >> config.mak ||
2183 echo "STRIP=echo ignoring strip" >> config.mak
2184
2185 echo "OPTFLAGS=$CFLAGS" >> config.mak
2186 echo "VHOOKCFLAGS=$VHOOKCFLAGS" >> config.mak
2187 echo "LDFLAGS=$LDFLAGS" >> config.mak
2188 echo "FFSERVERLDFLAGS=$FFSERVERLDFLAGS" >> config.mak
2189 echo "SHFLAGS=$SHFLAGS" >> config.mak
2190 echo "YASMFLAGS=$YASMFLAGS" >> config.mak
2191 echo "VHOOKSHFLAGS=$VHOOKSHFLAGS" >> config.mak
2192 echo "VHOOKLIBS=$VHOOKLIBS" >> config.mak
2193 echo "LIBOBJFLAGS=$LIBOBJFLAGS" >> config.mak
2194 echo "BUILD_STATIC=$static" >> config.mak
2195 echo "BUILDSUF=$build_suffix" >> config.mak
2196 echo "FULLNAME=$FULLNAME" >> config.mak
2197 echo "LIBPREF=$LIBPREF" >> config.mak
2198 echo "LIBSUF=$LIBSUF" >> config.mak
2199 echo "LIBNAME=$LIBNAME" >> config.mak
2200 echo "SLIBPREF=$SLIBPREF" >> config.mak
2201 echo "SLIBSUF=$SLIBSUF" >> config.mak
2202 echo "EXESUF=$EXESUF" >> config.mak
2203 echo "EXTRA_VERSION=$extra_version" >> config.mak
2204 echo "DEPEND_CMD=$DEPEND_CMD" >> config.mak
2205
2206 if enabled bigendian; then
2207 echo "WORDS_BIGENDIAN=yes" >> config.mak
2208 echo "#define WORDS_BIGENDIAN 1" >> $TMPH
2209 fi
2210
2211 if enabled sdl; then
2212 echo "SDL_LIBS=`"${SDL_CONFIG}" --libs`" >> config.mak
2213 echo "SDL_CFLAGS=`"${SDL_CONFIG}" --cflags`" >> config.mak
2214 fi
2215 if enabled texi2html; then
2216 echo "BUILD_DOC=yes" >> config.mak
2217 fi
2218
2219 get_version(){
2220 name=$1
2221 file=$source_path/$2
2222 eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
2223 eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
2224 lcname=$(tolower $name)
2225 eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
2226 eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
2227 }
2228
2229 get_version LIBSWSCALE libswscale/swscale.h
2230 get_version LIBPOSTPROC libpostproc/postprocess.h
2231 get_version LIBAVCODEC libavcodec/avcodec.h
2232 get_version LIBAVDEVICE libavdevice/avdevice.h
2233 get_version LIBAVFORMAT libavformat/avformat.h
2234 get_version LIBAVUTIL libavutil/avutil.h
2235 get_version LIBAVFILTER libavfilter/avfilter.h
2236
2237 if enabled shared; then
2238 echo "BUILD_SHARED=yes" >> config.mak
2239 echo "PIC=-fPIC -DPIC" >> config.mak
2240 echo "LIBTARGET=${LIBTARGET}" >> config.mak
2241 echo "SLIBNAME=${SLIBNAME}" >> config.mak
2242 echo "SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}" >> config.mak
2243 echo "SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}" >> config.mak
2244 echo "SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}" >> config.mak
2245 echo "SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}" >> config.mak
2246 echo "SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}" >> config.mak
2247 echo "SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}" >> config.mak
2248 fi
2249 echo "LIB_INSTALL_EXTRA_CMD=${LIB_INSTALL_EXTRA_CMD}" >> config.mak
2250 echo "EXTRALIBS=$extralibs" >> config.mak
2251
2252 print_config ARCH_ $TMPH config.mak $ARCH_LIST
2253 print_config HAVE_ $TMPH config.mak $HAVE_LIST
2254 print_config CONFIG_ $TMPH config.mak $CONFIG_LIST \
2255 $CONFIG_EXTRA \
2256 $DECODER_LIST \
2257 $ENCODER_LIST \
2258 $PARSER_LIST \
2259 $BSF_LIST \
2260 $DEMUXER_LIST \
2261 $MUXER_LIST \
2262 $FILTER_LIST \
2263 $PROTOCOL_LIST \
2264 $INDEV_LIST \
2265 $OUTDEV_LIST \
2266
2267 echo "#define restrict $_restrict" >> $TMPH
2268
2269 if enabled small; then
2270 echo "#define av_always_inline" >> $TMPH
2271 fi
2272
2273 echo "SRC_PATH=\"$source_path\"" >> config.mak
2274 echo "SRC_PATH_BARE=$source_path" >> config.mak
2275 echo "BUILD_ROOT=\"$PWD\"" >> config.mak
2276
2277 # Apparently it's not possible to portably echo a backslash.
2278 enabled asmalign_pot &&
2279 printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH ||
2280 printf '#define ASMALIGN(ZEROBITS) ".align 1 << " #ZEROBITS "\\n\\t"\n' >> $TMPH
2281
2282 echo "#define EXTERN_PREFIX \"${extern_prefix}\"" >> $TMPH
2283
2284 echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
2285
2286 # Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
2287 cmp -s $TMPH config.h &&
2288 echo "config.h is unchanged" ||
2289 mv -f $TMPH config.h
2290
2291 rm -f $TMPC $TMPE $TMPH $TMPO $TMPS $TMPSH
2292
2293 # build tree in object directory if source path is different from current one
2294 if enabled source_path_used; then
2295 DIRS="\
2296 doc \
2297 libavcodec \
2298 libavcodec/alpha \
2299 libavcodec/armv4l \
2300 libavcodec/bfin \
2301 libavcodec/i386 \
2302 libavcodec/mlib \
2303 libavcodec/ppc \
2304 libavcodec/sh4 \
2305 libavcodec/sparc \
2306 libavdevice \
2307 libavfilter \
2308 libavformat \
2309 libavutil \
2310 libpostproc \
2311 libswscale \
2312 tests \
2313 tools \
2314 vhook \
2315 "
2316 FILES="\
2317 Makefile \
2318 common.mak \
2319 subdir.mak \
2320 doc/texi2pod.pl \
2321 libavcodec/Makefile \
2322 libavdevice/Makefile \
2323 libavfilter/Makefile \
2324 libavformat/Makefile \
2325 libavutil/Makefile \
2326 libpostproc/Makefile \
2327 libswscale/Makefile \
2328 "
2329 for dir in $DIRS ; do
2330 mkdir -p $dir
2331 done
2332 for f in $FILES ; do
2333 $ln_s "$source_path/$f" $f
2334 done
2335 fi
2336
2337
2338 # build pkg-config files
2339
2340 pkgconfig_generate(){
2341 name=$1
2342 shortname=${name#lib}
2343 comment=$2
2344 version=$3
2345 libs=$4
2346 requires=$5
2347 cat <<EOF > $name/$name.pc
2348 prefix=$prefix
2349 exec_prefix=\${prefix}
2350 libdir=$libdir
2351 includedir=$incdir
2352
2353 Name: $name
2354 Description: $comment
2355 Version: $version
2356 Requires: $(disabled shared && echo $requires)
2357 Requires.private: $(enabled shared && echo $requires)
2358 Conflicts:
2359 Libs: -L\${libdir} -l${shortname} $(disabled shared && echo $libs)
2360 Libs.private: $(enabled shared && echo $libs)
2361 Cflags: -I\${includedir}
2362 EOF
2363 cat <<EOF > $name/$name-uninstalled.pc
2364 prefix=
2365 exec_prefix=
2366 libdir=\${pcfiledir}
2367 includedir=${source_path}
2368
2369 Name: $name
2370 Description: $comment
2371 Version: $version
2372 Requires: $requires
2373 Conflicts:
2374 Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
2375 Cflags: -I\${includedir}
2376 EOF
2377 }
2378
2379 pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
2380 pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "$pkg_requires libavutil = $LIBAVUTIL_VERSION"
2381 pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "$pkg_requires libavcodec = $LIBAVCODEC_VERSION"
2382 pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "$pkg_requires libavformat = $LIBAVFORMAT_VERSION"
2383 enabled avfilter &&
2384 pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "$pkg_requires libavutil = $LIBAVUTIL_VERSION"
2385 enabled postproc &&
2386 pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
2387 if enabled swscale; then
2388 pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"
2389 else
2390 pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "$pkg_requires libavcodec = $LIBAVCODEC_VERSION"
2391 apply libswscale/libswscale.pc sed s/^Libs:.*$/Libs:/
2392 fi