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