Print just [no] or [yes] in the help output instead of [default=no/yes].
[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 libav*"
76 echo " and ffmpeg will be under GPL [no]"
77 echo " --enable-nonfree allow use of nonfree code, the resulting libav*"
78 echo " and ffmpeg will be unredistributable [no]"
79 echo " --enable-postproc enable GPLed postprocessing support [no]"
80 echo " --enable-swscale software scaler support [no]"
81 echo " --enable-avfilter video filter support (replaces vhook) [no]"
82 echo " --enable-avfilter-lavf video filters dependant on avformat [no]"
83 echo " --enable-beosthreads use BeOS threads [no]"
84 echo " --enable-os2threads use OS/2 threads [no]"
85 echo " --enable-pthreads use pthreads [no]"
86 echo " --enable-w32threads use Win32 threads [no]"
87 echo " --enable-x11grab enable X11 grabbing [no]"
88 echo
89 echo "External library support:"
90 echo " --enable-mlib use Sun medialib [no]"
91 echo " --enable-avisynth allow reading AVISynth script files [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 [no]"
96 echo " --enable-libdirac enable Dirac support via libdirac [no]"
97 echo " --enable-libfaac enable FAAC support via libfaac [no]"
98 echo " --enable-libfaad enable FAAD support via libfaad [no]"
99 echo " --enable-libfaadbin open libfaad.so.0 at runtime [no]"
100 echo " --enable-libgsm enable GSM support via libgsm [no]"
101 echo " --enable-libmp3lame enable MP3 encoding via libmp3lame [no]"
102 echo " --enable-libnut enable NUT (de)muxing via libnut,"
103 echo " native demuxer exists [no]"
104 echo " --enable-libschroedinger enable Dirac support via libschroedinger [no]"
105 echo " --enable-libspeex enable Speex decoding via libspeex [no]"
106 echo " --enable-libtheora enable Theora encoding via libtheora [no]"
107 echo " --enable-libvorbis enable Vorbis encoding via libvorbis,"
108 echo " native implementation exists [no]"
109 echo " --enable-libx264 enable H.264 encoding via x264 [no]"
110 echo " --enable-libxvid enable Xvid encoding via xvidcore,"
111 echo " native MPEG-4/Xvid encoder exists [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 [no]"
138 echo " --disable-ipv6 disable ipv6 support [no]"
139 echo " --disable-zlib disable zlib [no]"
140 echo " --disable-bzlib disable bzlib [no]"
141 echo " --disable-vhook disable video hooking support"
142 echo " --disable-mpegaudio-hp faster (but less accurate)"
143 echo " MPEG audio decoding [no]"
144 echo " --enable-gray enable full grayscale support (slower color)"
145 echo " --disable-ffmpeg disable ffmpeg build"
146 echo " --disable-ffserver disable ffserver build"
147 echo " --disable-ffplay disable ffplay build"
148 echo " --enable-small optimize for size instead of speed"
149 echo " --enable-hardcoded-tables use hardcoded tables instead of runtime generation"
150 echo " --enable-memalign-hack emulate memalign, interferes with memory debuggers"
151 echo " --disable-encoder=NAME 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 cmov
1249 enable fast_cmov
1250 enable fast_unaligned
1251 check_cc <<EOF && enable fast_64bit && arch="x86_64"
1252 int test[sizeof(char*) - 7];
1253 EOF
1254 ;;
1255 # armv4l is a subset of armv[567]*l
1256 arm|armv[4567]*l)
1257 arch="armv4l"
1258 ;;
1259 alpha)
1260 arch="alpha"
1261 enable fast_64bit
1262 ;;
1263 "Power Macintosh"|ppc|powerpc)
1264 arch="powerpc"
1265 enable fast_unaligned
1266 ;;
1267 ppc64)
1268 arch="powerpc"
1269 enable fast_64bit
1270 enable fast_unaligned
1271 ;;
1272 mips|mipsel|IP*)
1273 arch="mips"
1274 ;;
1275 sun4u|sparc64)
1276 arch="sparc64"
1277 enable fast_64bit
1278 ;;
1279 sparc)
1280 arch="sparc"
1281 ;;
1282 sh4)
1283 arch="sh4"
1284 ;;
1285 parisc)
1286 arch="parisc"
1287 ;;
1288 parisc64)
1289 arch="parisc"
1290 enable fast_64bit
1291 ;;
1292 s390|s390x)
1293 arch="s390"
1294 ;;
1295 m68k)
1296 arch="m68k"
1297 ;;
1298 ia64)
1299 arch="ia64"
1300 enable fast_64bit
1301 ;;
1302 bfin)
1303 arch="bfin"
1304 ;;
1305 *)
1306 arch="unknown"
1307 ;;
1308 esac
1309
1310 enable $arch
1311 enabled_any x86_32 x86_64 && enable x86
1312 enabled sparc64 && enable sparc
1313
1314 # OS specific
1315 case $target_os in
1316 beos|haiku|zeta)
1317 prefix_default="$HOME/config"
1318 # helps building libavcodec
1319 add_cflags "-DPIC -fomit-frame-pointer"
1320 # 3 gcc releases known for BeOS, each with ugly bugs
1321 gcc_version="`$cc -v 2>&1 | grep version | cut -d ' ' -f3-`"
1322 case "$gcc_version" in
1323 2.9-beos-991026*|2.9-beos-000224*) echo "R5/GG gcc"
1324 disable mmx
1325 ;;
1326 *20010315*) echo "BeBits gcc"
1327 add_cflags "-fno-expensive-optimizations"
1328 ;;
1329 esac
1330 SHFLAGS=-nostart
1331 # enable BeOS things
1332 enable audio_beos
1333 # no need for libm, but the inet stuff
1334 # Check for BONE
1335 # XXX: actually should check for NOT net_server
1336 if echo $BEINCLUDES | grep -q 'headers/be/bone'; then
1337 network_extralibs="-lbind -lsocket"
1338 else
1339 enable beos_netserver
1340 network_extralibs="-lnet"
1341 fi ;;
1342 sunos)
1343 FFSERVERLDFLAGS=""
1344 SHFLAGS='-shared -Wl,-h,$$(@F)'
1345 network_extralibs="-lsocket -lnsl"
1346 ;;
1347 netbsd)
1348 oss_demuxer_extralibs="-lossaudio"
1349 oss_muxer_extralibs="-lossaudio"
1350 ;;
1351 openbsd)
1352 disable need_memalign
1353 LIBOBJFLAGS='$(PIC)'
1354 SHFLAGS='-shared'
1355 SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF).$(LIBVERSION)'
1356 SLIBNAME_WITH_VERSION='$(SLIBNAME)'
1357 SLIBNAME_WITH_MAJOR='$(SLIBNAME)'
1358 oss_demuxer_extralibs="-lossaudio"
1359 oss_muxer_extralibs="-lossaudio"
1360 ;;
1361 freebsd)
1362 disable need_memalign
1363 ;;
1364 bsd/os)
1365 osextralibs="-lpoll -lgnugetopt"
1366 strip="strip -d"
1367 ;;
1368 darwin)
1369 disable need_memalign
1370 SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR) -Wl,-read_only_relocs,suppress'
1371 VHOOKSHFLAGS='-dynamiclib -Wl,-single_module -flat_namespace -undefined suppress -Wl,-install_name,$(SHLIBDIR)/vhook/$$(@F)'
1372 strip="strip -x"
1373 FFLDFLAGS="-Wl,-dynamic,-search_paths_first"
1374 SLIBSUF=".dylib"
1375 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
1376 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
1377 FFSERVERLDFLAGS=-Wl,-bind_at_load
1378 objformat="macho"
1379 enabled x86_64 && objformat="macho64"
1380 ;;
1381 mingw32*)
1382 target_os=mingw32
1383 LIBTARGET=i386
1384 if test $arch = x86_64; then
1385 disable need_memalign
1386 LIBTARGET=x64
1387 fi
1388 shlibdir_default="$bindir_default"
1389 VHOOKSHFLAGS='-shared -L$(BUILD_ROOT)/libavformat -L$(BUILD_ROOT)/libavcodec -L$(BUILD_ROOT)/libavutil'
1390 VHOOKLIBS='-lavformat$(BUILDSUF) -lavcodec$(BUILDSUF) -lavutil$(BUILDSUF) $(EXTRALIBS)'
1391 if enabled swscale; then
1392 VHOOKSHFLAGS="$VHOOKSHFLAGS -L\$(BUILD_ROOT)/libswscale"
1393 VHOOKLIBS="$VHOOKLIBS -lswscale\$(BUILDSUF)"
1394 fi
1395 disable ffserver
1396 SLIBPREF=""
1397 SLIBSUF=".dll"
1398 EXESUF=".exe"
1399 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1400 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1401 SLIB_EXTRA_CMD='-lib /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)'
1402 SLIB_INSTALL_EXTRA_CMD='-install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"; \
1403 install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)"'
1404 SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"'
1405 SHFLAGS='-shared -Wl,--output-def,$$(@:$(SLIBSUF)=.def) -Wl,--enable-runtime-pseudo-reloc -Wl,--enable-auto-image-base'
1406 objformat="win32"
1407 enable dos_paths
1408 check_cpp_condition _mingw.h "(__MINGW32_MAJOR_VERSION > 3) || (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
1409 die "ERROR: MinGW runtime version must be >= 3.15."
1410 enabled_any avisynth vfwcap_demuxer &&
1411 { check_cpp_condition w32api.h "(__W32API_MAJOR_VERSION > 3) || (__W32API_MAJOR_VERSION == 3 && __W32API_MINOR_VERSION >= 12)" ||
1412 die "ERROR: avisynth and vfwcap_demuxer require w32api version 3.12 or later."; }
1413 ;;
1414 cygwin*)
1415 target_os=cygwin
1416 shlibdir_default="$bindir_default"
1417 VHOOKSHFLAGS='-shared -L$(BUILD_ROOT)/libavformat -L$(BUILD_ROOT)/libavcodec -L$(BUILD_ROOT)/libavutil'
1418 VHOOKLIBS='-lavformat$(BUILDSUF) -lavcodec$(BUILDSUF) -lavutil$(BUILDSUF) $(EXTRALIBS)'
1419 if enabled swscale; then
1420 VHOOKSHFLAGS="$VHOOKSHFLAGS -L\$(BUILD_ROOT)/libswscale"
1421 VHOOKLIBS="$VHOOKLIBS -lswscale\$(BUILDSUF)"
1422 fi
1423 EXESUF=".exe"
1424 SLIBPREF="cyg"
1425 SLIBSUF=".dll"
1426 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1427 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1428 SHFLAGS='-shared -Wl,--enable-auto-image-base'
1429 objformat="win32"
1430 enable dos_paths
1431 ;;
1432 *-dos|freedos|opendos)
1433 disable ffplay ffserver vhook
1434 disable $INDEV_LIST $OUTDEV_LIST
1435 network_extralibs="-lsocket"
1436 EXESUF=".exe"
1437 objformat="win32"
1438 enable dos_paths
1439 ;;
1440 linux)
1441 enable dv1394
1442 ;;
1443 irix*)
1444 target_os=irix
1445 ranlib="echo ignoring ranlib"
1446 ;;
1447 os/2*)
1448 strip="lxlite"
1449 ln_s="cp -f"
1450 EXESUF=".exe"
1451 FFLDFLAGS="-Zomf -Zbin-files -Zargs-wild -Zmap"
1452 SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
1453 FFSERVERLDFLAGS=""
1454 LIBSUF="_s.a"
1455 SLIBPREF=""
1456 SLIBSUF=".dll"
1457 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
1458 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
1459 SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
1460 echo PROTMODE >> $(SUBDIR)$(NAME).def; \
1461 echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
1462 echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
1463 echo EXPORTS >> $(SUBDIR)$(NAME).def; \
1464 emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
1465 SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
1466 emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
1467 SLIB_INSTALL_EXTRA_CMD='install -m 644 $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib "$(LIBDIR)"'
1468 SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.a "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.lib'
1469 disable vhook
1470 enable dos_paths
1471 ;;
1472 interix)
1473 disable vhook
1474 ;;
1475
1476 *)
1477 target_os="${target_os}-UNKNOWN"
1478 ;;
1479 esac
1480
1481 set_default $PATHS_LIST
1482
1483 add_extralibs $osextralibs
1484
1485 # Combine FFLDFLAGS and the LDFLAGS environment variable.
1486 LDFLAGS="$FFLDFLAGS $LDFLAGS"
1487
1488 test -n "$cross_prefix" && enable cross_compile
1489
1490 # we need to build at least one lib type
1491 if ! enabled_any static shared; then
1492 cat <<EOF
1493 At least one library type must be built.
1494 Specify --enable-static to build the static libraries or --enable-shared to
1495 build the shared libraries as well. To only build the shared libraries specify
1496 --disable-static in addition to --enable-shared.
1497 EOF
1498 exit 1;
1499 fi
1500
1501 disabled static && LIBNAME=""
1502
1503 if enabled_any libfaad libfaadbin ; then
1504 if check_header faad.h; then
1505 check_cc <<EOF
1506 #include <faad.h>
1507 #ifndef FAAD2_VERSION
1508 ok faad1
1509 #endif
1510 int main(void) { return 0; }
1511 EOF
1512 test $? = 0 && enable libfaad2
1513 else
1514 die "FAAD test failed."
1515 fi
1516 fi
1517
1518
1519 if ! enabled gpl; then
1520 die_gpl_disabled(){
1521 name=$1
1522 shift
1523 enabled_any $@ && die "$name is under GPL and --enable-gpl is not specified."
1524 }
1525 die_gpl_disabled "The Postprocessing code" postproc
1526 die_gpl_disabled "libx264" libx264
1527 die_gpl_disabled "libxvidcore" libxvid
1528 die_gpl_disabled "FAAD2" libfaad2
1529 die_gpl_disabled "The X11 grabber" x11grab
1530 die_gpl_disabled "The software scaler" swscale
1531 fi
1532
1533 if ! enabled nonfree && enabled_any libamr_nb libamr_wb; then
1534 die "libamr is nonfree and --enable-nonfree is not specified."
1535 fi
1536
1537 check_deps $ARCH_EXT_LIST
1538
1539 test -z "$need_memalign" && need_memalign="$mmx"
1540
1541 #Darwin CC versions
1542 if test $target_os = darwin; then
1543 if $cc -v 2>&1 | grep -q xlc; then
1544 add_cflags "-qpdf2 -qlanglvl=extc99 -qmaxmem=-1 -qarch=auto -qtune=auto"
1545 else
1546 add_cflags "-pipe"
1547 check_cflags "-force_cpusubtype_ALL"
1548 check_cflags "-Wno-sign-compare"
1549 enabled shared || check_cflags -mdynamic-no-pic
1550 fi
1551 fi
1552
1553 disabled optimizations || check_cflags -fomit-frame-pointer
1554
1555 # Add processor-specific flags
1556 if test $cpu != "generic"; then
1557 warn_altivec(){
1558 $1 altivec && echo "WARNING: Tuning for $2 but AltiVec $1.";
1559 }
1560 case $cpu in
1561 601|ppc601|PowerPC601)
1562 add_cflags "-mcpu=601"
1563 warn_altivec enabled PPC601
1564 ;;
1565 603*|ppc603*|PowerPC603*)
1566 add_cflags "-mcpu=603"
1567 warn_altivec enabled PPC603
1568 ;;
1569 604*|ppc604*|PowerPC604*)
1570 add_cflags "-mcpu=604"
1571 warn_altivec enabled PPC604
1572 ;;
1573 G3|g3|75*|ppc75*|PowerPC75*)
1574 add_cflags "-mcpu=750 -mpowerpc-gfxopt"
1575 warn_altivec enabled PPC75x
1576 ;;
1577 G4|g4|745*|ppc745*|PowerPC745*)
1578 add_cflags "-mcpu=7450 -mpowerpc-gfxopt"
1579 warn_altivec disabled PPC745x
1580 ;;
1581 74*|ppc74*|PowerPC74*)
1582 add_cflags "-mcpu=7400 -mpowerpc-gfxopt"
1583 warn_altivec disabled PPC74xx
1584 ;;
1585 G5|g5|970|ppc970|PowerPC970|power4*|Power4*)
1586 add_cflags "-mcpu=970 -mpowerpc-gfxopt -mpowerpc64"
1587 warn_altivec disabled PPC970
1588 enable ppc64
1589 ;;
1590 Cell|CELL|cell)
1591 add_cflags "-mcpu=cell"
1592 warn_altivec disabled Cell
1593 enable ppc64
1594 ;;
1595 # targets that do NOT support conditional mov (cmov)
1596 i[345]86|pentium|pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
1597 add_cflags "-march=$cpu"
1598 disable cmov
1599 ;;
1600 # targets that do support conditional mov (cmov)
1601 i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2)
1602 add_cflags "-march=$cpu"
1603 enable cmov
1604 enable fast_cmov
1605 ;;
1606 # targets that do support conditional mov but on which it's slow
1607 pentium4|pentium4m|prescott|nocona)
1608 add_cflags "-march=$cpu"
1609 enable cmov
1610 disable fast_cmov
1611 ;;
1612 sparc64)
1613 add_cflags "-mcpu=v9"
1614 ;;
1615 arm11*|cortex*)
1616 add_cflags "-mcpu=$cpu"
1617 enable fast_unaligned
1618 ;;
1619 armv*)
1620 add_cflags "-march=$cpu"
1621 ;;
1622 arm*)
1623 add_cflags "-mcpu=$cpu"
1624 ;;
1625 *)
1626 echo "WARNING: Unknown CPU \"$cpu\", ignored."
1627 ;;
1628 esac
1629 fi
1630
1631 # make sure we can execute files in $TMPDIR
1632 cat > $TMPSH 2>> $logfile <<EOF
1633 #! /bin/sh
1634 EOF
1635 chmod +x $TMPSH >> $logfile 2>&1
1636 if ! $TMPSH >> $logfile 2>&1; then
1637 cat <<EOF
1638 Unable to create and execute files in $TMPDIR1. Set the TMPDIR environment
1639 variable to another directory and make sure that $TMPDIR1 is not mounted
1640 noexec.
1641 EOF
1642 die "Sanity test failed."
1643 fi
1644 rm $TMPSH
1645
1646 # compiler sanity check
1647 check_exec <<EOF
1648 int main(void){ return 0; }
1649 EOF
1650 if test "$?" != 0; then
1651 echo "$cc is unable to create an executable file."
1652 if test -z "$cross_prefix" && ! enabled cross_compile ; then
1653 echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
1654 echo "Only do this if you know what cross compiling means."
1655 fi
1656 die "C compiler test failed."
1657 fi
1658
1659 check_cc <<EOF || die "Symbol mangling check failed."
1660 int ff_extern;
1661 EOF
1662 sym=$($nm -P -g $TMPO | grep ff_extern)
1663 extern_prefix=${sym%%ff_extern*}
1664
1665 check_asm inline_asm '""'
1666
1667 if enabled x86; then
1668 # check whether EBP is available on x86
1669 # As 'i' is stored on the stack, this program will crash
1670 # if the base pointer is used to access it because the
1671 # base pointer is cleared in the inline assembly code.
1672 check_exec_crash <<EOF && enable ebp_available
1673 volatile int i=0;
1674 __asm__ volatile (
1675 "xorl %%ebp, %%ebp"
1676 ::: "%ebp");
1677 return i;
1678 EOF
1679
1680 # check wether EBX is available on x86
1681 check_asm ebx_available '"":::"%ebx"'
1682
1683 # check whether binutils is new enough to compile SSSE3/MMX2
1684 enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
1685 enabled mmx2 && check_asm mmx2 '"movss %xmm0, %xmm0"'
1686
1687 check_asm bswap '"bswap %%eax" ::: "%eax"'
1688
1689 YASMFLAGS="-f $objformat -DARCH_$(toupper $arch)"
1690 enabled x86_64 && append YASMFLAGS "-m amd64"
1691 enabled_all x86_64 shared && append YASMFLAGS "-DPIC"
1692 case "$objformat" in
1693 elf) enabled debug && append YASMFLAGS "-g dwarf2" ;;
1694 macho64) append YASMFLAGS "-DPIC -DPREFIX" ;;
1695 *) append YASMFLAGS "-DPREFIX" ;;
1696 esac
1697 check_yasm "pabsw xmm0, xmm0" && enable yasm
1698 fi
1699
1700 # check for assembler specific support
1701
1702 if test $arch = "powerpc"; then
1703 check_asm dcbzl '"dcbzl 0, 1"'
1704 fi
1705
1706 # check for SIMD availability
1707
1708 # AltiVec flags: The FSF version of GCC differs from the Apple version
1709 if enabled altivec; then
1710 check_cflags -maltivec -mabi=altivec &&
1711 { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
1712 check_cflags -faltivec
1713
1714 # check if our compiler supports Motorola AltiVec C API
1715 check_cc <<EOF || disable altivec
1716 $inc_altivec_h
1717 int main(void) {
1718 vector signed int v1, v2, v3;
1719 v1 = vec_add(v2,v3);
1720 return 0;
1721 }
1722 EOF
1723
1724 # check if our compiler supports braces for vector declarations
1725 check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
1726 $inc_altivec_h
1727 int main (void) { (vector int) {1}; return 0; }
1728 EOF
1729 fi
1730
1731 # We have to check if pld is a nop and disable it.
1732 enabled armv4l && check_asm pld '"pld [r0]"'
1733 enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
1734 enabled armv6 && check_asm armv6 '"sadd16 r0, r0, r0"'
1735 enabled armvfp && check_asm armvfp '"fadds s0, s0, s0"'
1736 enabled iwmmxt && check_asm iwmmxt '"wunpckelub wr6, wr4"'
1737 enabled mmi && check_asm mmi '"lq $2, 0($2)"'
1738 enabled neon && check_asm neon '"vadd.i16 q0, q0, q0"'
1739 enabled vis && check_asm vis '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc
1740
1741 enabled vis && add_cflags "-mcpu=ultrasparc -mtune=ultrasparc"
1742
1743 # ---
1744 # big/little-endian test
1745 check_cc <<EOF || die "endian test failed"
1746 unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
1747 EOF
1748 od -A n -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
1749
1750 # ---
1751 # check availability of some header files
1752
1753 if check_func dlopen; then
1754 ldl=
1755 elif check_func dlopen -ldl; then
1756 ldl=-ldl
1757 fi
1758
1759 check_func fork
1760 check_func gethrtime
1761 check_func getrusage
1762 check_func inet_aton $network_extralibs
1763 check_func memalign
1764 check_func mkstemp
1765 check_func_headers windows.h GetProcessTimes
1766
1767 check_header conio.h
1768 check_header dlfcn.h
1769 check_header malloc.h
1770 check_header poll.h
1771 check_header sys/mman.h
1772 check_header sys/resource.h
1773 check_header sys/select.h
1774 check_header termios.h
1775
1776 if ! enabled_any memalign memalign_hack && enabled need_memalign ; then
1777 die "Error, no memalign() but SSE enabled, disable it or use --enable-memalign-hack."
1778 fi
1779
1780 disabled zlib || check_lib zlib.h zlibVersion -lz || disable zlib
1781 disabled bzlib || check_lib bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
1782
1783 # check for some common methods of building with pthread support
1784 # do this before the optional library checks as some of them require pthreads
1785 if enabled pthreads; then
1786 if check_func pthread_create; then
1787 :
1788 elif check_func pthread_create -pthread; then
1789 add_cflags -pthread
1790 add_extralibs -pthread
1791 elif check_func pthread_create -pthreads; then
1792 add_cflags -pthreads
1793 add_extralibs -pthreads
1794 elif check_func pthread_create -lpthreadGC2; then
1795 add_extralibs -lpthreadGC2
1796 elif ! check_lib pthread.h pthread_create -lpthread; then
1797 die "ERROR: can't find pthreads library"
1798 fi
1799 fi
1800
1801 for thread in $THREADS_LIST; do
1802 if enabled $thread; then
1803 test -n "$thread_type" &&
1804 die "ERROR: Only one thread type must be selected." ||
1805 thread_type="$thread"
1806 fi
1807 done
1808
1809 check_lib math.h sin -lm
1810
1811 # test for C99 functions in math.h
1812 for func in llrint lrint lrintf round roundf; do
1813 check_exec <<EOF && enable $func || disable $func
1814 #include <math.h>
1815 int main(void) { return ($func(3.999f) > 0)?0:1; }
1816 EOF
1817 done
1818
1819 # these are off by default, so fail if requested and not available
1820 enabled avisynth && require2 vfw32 "windows.h vfw.h" AVIFileInit -lvfw32
1821 enabled libamr_nb && require libamrnb amrnb/interf_dec.h Speech_Decode_Frame_init -lamrnb -lm
1822 enabled libamr_wb && require libamrwb amrwb/dec_if.h D_IF_init -lamrwb -lm
1823 enabled libdirac && add_cflags $(pkg-config --cflags dirac) &&
1824 require libdirac libdirac_decoder/dirac_parser.h dirac_decoder_init -ldirac_decoder &&
1825 require libdirac libdirac_encoder/dirac_encoder.h dirac_encoder_init -ldirac_encoder
1826 enabled libfaac && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
1827 enabled libfaad && require2 libfaad faad.h faacDecOpen -lfaad
1828 enabled libgsm && require libgsm gsm.h gsm_create -lgsm
1829 enabled libmp3lame && require libmp3lame lame/lame.h lame_init -lmp3lame -lm
1830 enabled libnut && require libnut libnut.h nut_demuxer_init -lnut
1831 enabled libschroedinger && add_cflags $(pkg-config --cflags schroedinger-1.0) &&
1832 require libschroedinger schroedinger/schro.h schro_init $(pkg-config --libs schroedinger-1.0)
1833 enabled libspeex && require libspeex speex/speex.h speex_decoder_init -lspeex
1834 enabled libtheora && require libtheora theora/theora.h theora_info_init -ltheora -logg
1835 enabled libvorbis && require libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
1836 enabled libx264 && require libx264 x264.h x264_encoder_open -lx264 -lm &&
1837 { check_cpp_condition x264.h "X264_BUILD >= 65" ||
1838 die "ERROR: libx264 version must be >= 0.65."; }
1839 enabled libxvid && require libxvid xvid.h xvid_global -lxvidcore
1840 enabled mlib && require mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
1841
1842 # libdc1394 check
1843 if enabled libdc1394; then
1844 { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
1845 enable libdc1394_2; } ||
1846 { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
1847 enable libdc1394_1; } ||
1848 die "ERROR: No version of libdc1394 found "
1849 fi
1850
1851
1852 _restrict=
1853 for restrict_keyword in restrict __restrict__ __restrict; do
1854 check_cc <<EOF && _restrict=$restrict_keyword && break
1855 void foo(char * $restrict_keyword p);
1856 EOF
1857 done
1858
1859 test "$vhook" = "default" && vhook="$dlopen"
1860
1861 if test "$target_os" = cygwin -o "$target_os" = mingw32 && enabled_all static vhook ; then
1862 disable vhook
1863 echo
1864 echo "At the moment vhooks don't work on Cygwin or MinGW static builds."
1865 echo "Patches welcome."
1866 echo
1867 fi
1868
1869 if enabled vhook; then
1870 check_ldflags -rdynamic
1871 check_ldflags -export-dynamic
1872 fi
1873
1874 check_foo_config imlib2 imlib2 Imlib2.h imlib_load_font
1875 check_foo_config freetype2 freetype ft2build.h FT_Init_FreeType
1876
1877 ##########################################
1878 # SDL check
1879
1880 disable sdl_too_old
1881 disable sdl
1882 SDL_CONFIG="${cross_prefix}sdl-config"
1883 if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
1884 sdl_cflags=`"${SDL_CONFIG}" --cflags`
1885 temp_cflags $sdl_cflags
1886 temp_extralibs `"${SDL_CONFIG}" --libs`
1887 if check_lib2 SDL.h SDL_Init; then
1888 _sdlversion=`"${SDL_CONFIG}" --version | sed 's/[^0-9]//g'`
1889 if test "$_sdlversion" -lt 121 ; then
1890 enable sdl_too_old
1891 else
1892 enable sdl
1893 check_cc $sdl_cflags <<EOF && enable sdl_video_size
1894 #include <SDL.h>
1895 int main(int argc, char **argv){
1896 const SDL_VideoInfo *vi = SDL_GetVideoInfo();
1897 int w = vi->current_w;
1898 return 0;
1899 }
1900 EOF
1901 fi
1902 fi
1903 restore_flags
1904 fi
1905
1906 texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
1907
1908 ##########################################
1909 # Network check
1910
1911 if enabled network; then
1912 check_type sys/socket.h socklen_t
1913 # Prefer arpa/inet.h over winsock2
1914 if check_header arpa/inet.h ; then
1915 check_func closesocket
1916 elif check_header winsock2.h ; then
1917 network_extralibs="-lws2_32"
1918 check_type ws2tcpip.h socklen_t
1919 check_func_headers winsock2.h closesocket
1920 fi
1921 fi
1922
1923 ##########################################
1924 # IPv6 check
1925
1926 enabled network && enabled ipv6 && check_ld <<EOF && enable ipv6 || disable ipv6
1927 #include <sys/types.h>
1928 #include <sys/socket.h>
1929 #include <netinet/in.h>
1930 #include <netdb.h>
1931 int main(void) {
1932 struct sockaddr_storage saddr;
1933 struct ipv6_mreq mreq6;
1934 getaddrinfo(0,0,0,0);
1935 getnameinfo(0,0,0,0,0,0,0);
1936 IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
1937 }
1938 EOF
1939
1940 check_header linux/videodev.h
1941 check_header linux/videodev2.h
1942 check_header sys/videoio.h
1943
1944 check_func_headers "windows.h vfw.h" capCreateCaptureWindow -lvfw32
1945
1946 # check for ioctl_meteor.h, ioctl_bt848.h and alternatives
1947 { check_header dev/bktr/ioctl_meteor.h &&
1948 check_header dev/bktr/ioctl_bt848.h; } ||
1949 { check_header machine/ioctl_meteor.h &&
1950 check_header machine/ioctl_bt848.h; } ||
1951 { check_header dev/video/meteor/ioctl_meteor.h &&
1952 check_header dev/video/bktr/ioctl_bt848.h; } ||
1953 check_header dev/ic/bt8xx.h
1954
1955 check_header sys/soundcard.h
1956 check_header soundcard.h
1957
1958 # deal with the X11 frame grabber
1959 enabled x11grab &&
1960 check_header X11/Xlib.h &&
1961 check_header X11/extensions/XShm.h &&
1962 check_func XOpenDisplay -lX11 &&
1963 check_func XShmCreateImage -lX11 -lXext
1964
1965 enabled debug && add_cflags -g"$debuglevel"
1966
1967 # add some useful compiler flags if supported
1968 check_cflags -Wdeclaration-after-statement
1969 check_cflags -Wall
1970 check_cflags -Wno-switch
1971 check_cflags -Wdisabled-optimization
1972 check_cflags -Wpointer-arith
1973 check_cflags -Wredundant-decls
1974 check_cflags -Wno-pointer-sign
1975 check_cflags -Wcast-qual
1976 check_cflags -Wwrite-strings
1977 check_cflags -Wtype-limits
1978 enabled extra_warnings && check_cflags -Winline
1979
1980 # add some linker flags
1981 check_ldflags -Wl,--warn-common
1982 check_ldflags -Wl,--as-needed
1983 check_ldflags '-Wl,-rpath-link,\$(BUILD_ROOT)/libpostproc -Wl,-rpath-link,\$(BUILD_ROOT)/libswscale -Wl,-rpath-link,\$(BUILD_ROOT)/libavfilter -Wl,-rpath-link,\$(BUILD_ROOT)/libavdevice -Wl,-rpath-link,\$(BUILD_ROOT)/libavformat -Wl,-rpath-link,\$(BUILD_ROOT)/libavcodec -Wl,-rpath-link,\$(BUILD_ROOT)/libavutil'
1984 check_ldflags -Wl,-Bsymbolic
1985
1986 if enabled small; then
1987 check_cflags -Os # not all compilers support -Os
1988 optimizations="small"
1989 elif enabled optimizations; then
1990 if $cc -v 2>&1 | grep -q xlc; then
1991 add_cflags "-O5"
1992 add_ldflags "-O5"
1993 else
1994 add_cflags "-O3"
1995 fi
1996 fi
1997 check_cflags -fno-math-errno
1998 check_cflags -fno-signed-zeros
1999
2000 # add some flags for Intel C Compiler
2001 if $cc --version 2> /dev/null | grep -q Intel; then
2002 # Just warnings, no remarks
2003 check_cflags -w1
2004 # -wd: Disable following warnings
2005 # 144, 167, 556: -Wno-pointer-sign
2006 # 10006: ignoring unknown option -fno-signed-zeros
2007 # 10156: ignoring option '-W'; no argument required
2008 check_cflags -wd144,167,556,10006,10156
2009 # 11030: Warning unknown option --as-needed
2010 # 10156: ignoring option '-export'; no argument required
2011 check_ldflags -wd10156,11030
2012 # Allow to compile with optimizations
2013 check_ldflags -march=$cpu
2014 fi
2015
2016 # PIC flags for shared library objects where they are needed
2017 if enabled shared; then
2018 # LIBOBJFLAGS may have already been set in the OS configuration
2019 if test -z "$LIBOBJFLAGS" ; then
2020 case "$arch" in
2021 x86_64|ia64|alpha|sparc*|power*|parisc*|mips*) LIBOBJFLAGS='$(PIC)' ;;
2022 esac
2023 fi
2024 fi
2025
2026 if enabled gprof; then
2027 add_cflags "-p"
2028 add_ldflags "-p"
2029 fi
2030
2031 VHOOKCFLAGS="-fPIC"
2032
2033 # Find out if the .align argument is a power of two or not.
2034 if test $asmalign_pot = "unknown"; then
2035 disable asmalign_pot
2036 echo '__asm__ (".align 3");' | check_cc && enable asmalign_pot
2037 fi
2038
2039 enabled_any $DECODER_LIST && enable decoders
2040 enabled_any $ENCODER_LIST && enable encoders
2041 enabled_any $BSF_LIST && enable bsfs
2042 enabled_any $DEMUXER_LIST && enable demuxers
2043 enabled_any $MUXER_LIST && enable muxers
2044 enabled_any $FILTER_LIST && enable filters
2045 enabled_any $INDEV_LIST && enable demuxers
2046 enabled_any $OUTDEV_LIST && enable muxers
2047 enabled_any $PROTOCOL_LIST && enable protocols
2048
2049 enabled_any $THREADS_LIST && enable threads
2050
2051 check_deps $CONFIG_LIST \
2052 $CONFIG_EXTRA \
2053 $HAVE_LIST \
2054 $DECODER_LIST \
2055 $ENCODER_LIST \
2056 $PARSER_LIST \
2057 $BSF_LIST \
2058 $DEMUXER_LIST \
2059 $MUXER_LIST \
2060 $FILTER_LIST \
2061 $INDEV_LIST \
2062 $OUTDEV_LIST \
2063 $PROTOCOL_LIST \
2064
2065 enabled libdc1394 && append pkg_requires "libraw1394"
2066 enabled libdirac && append pkg_requires "dirac"
2067 enabled libtheora && append pkg_requires "theora"
2068 enabled libvorbis && append pkg_requires "vorbisenc"
2069
2070 echo "install prefix $prefix"
2071 echo "source path $source_path"
2072 echo "C compiler $cc"
2073 echo ".align is power-of-two $asmalign_pot"
2074 echo "ARCH $arch ($cpu)"
2075 if test "$build_suffix" != ""; then
2076 echo "build suffix $build_suffix"
2077 fi
2078 if test "$extra_version" != ""; then
2079 echo "version string suffix $extra_version"
2080 fi
2081 echo "big-endian ${bigendian-no}"
2082 if test $arch = "x86_32" -o $arch = "x86_64"; then
2083 echo "yasm ${yasm-no}"
2084 echo "MMX enabled ${mmx-no}"
2085 echo "CMOV enabled ${cmov-no}"
2086 echo "CMOV is fast ${fast_cmov-no}"
2087 echo "EBX available ${ebx_available-no}"
2088 echo "EBP available ${ebp_available-no}"
2089 fi
2090 if test $arch = "armv4l"; then
2091 echo "ARMv5TE enabled ${armv5te-no}"
2092 echo "ARMv6 enabled ${armv6-no}"
2093 echo "ARM VFP enabled ${armvfp-no}"
2094 echo "IWMMXT enabled ${iwmmxt-no}"
2095 echo "NEON enabled ${neon-no}"
2096 fi
2097 if test $arch = "mips"; then
2098 echo "MMI enabled ${mmi-no}"
2099 fi
2100 if test $arch = "powerpc"; then
2101 echo "AltiVec enabled ${altivec-no}"
2102 echo "dcbzl available ${dcbzl-no}"
2103 fi
2104 echo "gprof enabled ${gprof-no}"
2105 echo "debug symbols ${debug-no}"
2106 echo "strip symbols ${stripping-no}"
2107 echo "optimizations ${optimizations-no}"
2108 echo "static ${static-no}"
2109 echo "shared ${shared-no}"
2110 echo "postprocessing support ${postproc-no}"
2111 echo "software scaler enabled ${swscale-no}"
2112 echo "new filter support ${avfilter-no}"
2113 echo "filters using lavformat ${avfilter_lavf-no}"
2114 echo "video hooking ${vhook-no}"
2115 if enabled vhook; then
2116 echo "Imlib2 support ${imlib2-no}"
2117 echo "FreeType support ${freetype2-no}"
2118 fi
2119 echo "network support ${network-no}"
2120 if enabled network; then
2121 echo "IPv6 support ${ipv6-no}"
2122 fi
2123 echo "threading support ${thread_type-no}"
2124 echo "SDL support ${sdl-no}"
2125 if enabled sdl_too_old; then
2126 echo "-> Your SDL version is too old - please upgrade to have FFplay/SDL support."
2127 fi
2128 echo "Sun medialib support ${mlib-no}"
2129 echo "AVISynth enabled ${avisynth-no}"
2130 echo "libamr-nb support ${libamr_nb-no}"
2131 echo "libamr-wb support ${libamr_wb-no}"
2132 echo "libdc1394 support ${libdc1394-no}"
2133 echo "libdirac enabled ${libdirac-no}"
2134 echo "libfaac enabled ${libfaac-no}"
2135 echo "libfaad enabled ${libfaad-no}"
2136 echo "libfaad dlopened ${libfaadbin-no}"
2137 echo "libgsm enabled ${libgsm-no}"
2138 echo "libmp3lame enabled ${libmp3lame-no}"
2139 echo "libnut enabled ${libnut-no}"
2140 echo "libschroedinger enabled ${libschroedinger-no}"
2141 echo "libspeex enabled ${libspeex-no}"
2142 echo "libtheora enabled ${libtheora-no}"
2143 echo "libvorbis enabled ${libvorbis-no}"
2144 echo "libx264 enabled ${libx264-no}"
2145 echo "libxvid enabled ${libxvid-no}"
2146 echo "zlib enabled ${zlib-no}"
2147 echo "bzlib enabled ${bzlib-no}"
2148 echo
2149
2150 for type in decoder encoder parser demuxer muxer protocol filter bsf indev outdev; do
2151 echo "Enabled ${type}s:"
2152 eval list=\$$(toupper $type)_LIST
2153 for part in $list; do
2154 enabled $part && echo ${part%_*}
2155 done | sort | pr -3 -t
2156 echo
2157 done
2158
2159 license="LGPL"
2160 if enabled nonfree; then
2161 license="unredistributable"
2162 elif enabled gpl; then
2163 license="GPL"
2164 fi
2165
2166 echo "License: $license"
2167
2168 echo "Creating config.mak and config.h..."
2169
2170 echo "# Automatically generated by configure - do not modify!" > config.mak
2171 echo "/* Automatically generated by configure - do not modify! */" > $TMPH
2172 echo "#ifndef FFMPEG_CONFIG_H" >> $TMPH
2173 echo "#define FFMPEG_CONFIG_H" >> $TMPH
2174 echo "#define FFMPEG_CONFIGURATION \"$FFMPEG_CONFIGURATION\"" >> $TMPH
2175
2176 echo "FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION" >> config.mak
2177 echo "prefix=$prefix" >> config.mak
2178 echo "LIBDIR=\$(DESTDIR)$libdir" >> config.mak
2179 echo "SHLIBDIR=\$(DESTDIR)$shlibdir" >> config.mak
2180 echo "INCDIR=\$(DESTDIR)$incdir" >> config.mak
2181 echo "BINDIR=\$(DESTDIR)$bindir" >> config.mak
2182 echo "MANDIR=\$(DESTDIR)$mandir" >> config.mak
2183 echo "CC=$cc" >> config.mak
2184 echo "YASM=$yasmexe" >> config.mak
2185 echo "AR=$ar" >> config.mak
2186 echo "RANLIB=$ranlib" >> config.mak
2187 echo "LN_S=$ln_s" >> config.mak
2188 enabled stripping &&
2189 echo "STRIP=$strip" >> config.mak ||
2190 echo "STRIP=echo ignoring strip" >> config.mak
2191
2192 echo "OPTFLAGS=$CFLAGS" >> config.mak
2193 echo "VHOOKCFLAGS=$VHOOKCFLAGS" >> config.mak
2194 echo "LDFLAGS=$LDFLAGS" >> config.mak
2195 echo "FFSERVERLDFLAGS=$FFSERVERLDFLAGS" >> config.mak
2196 echo "SHFLAGS=$SHFLAGS" >> config.mak
2197 echo "YASMFLAGS=$YASMFLAGS" >> config.mak
2198 echo "VHOOKSHFLAGS=$VHOOKSHFLAGS" >> config.mak
2199 echo "VHOOKLIBS=$VHOOKLIBS" >> config.mak
2200 echo "LIBOBJFLAGS=$LIBOBJFLAGS" >> config.mak
2201 echo "BUILD_STATIC=$static" >> config.mak
2202 echo "BUILDSUF=$build_suffix" >> config.mak
2203 echo "FULLNAME=$FULLNAME" >> config.mak
2204 echo "LIBPREF=$LIBPREF" >> config.mak
2205 echo "LIBSUF=$LIBSUF" >> config.mak
2206 echo "LIBNAME=$LIBNAME" >> config.mak
2207 echo "SLIBPREF=$SLIBPREF" >> config.mak
2208 echo "SLIBSUF=$SLIBSUF" >> config.mak
2209 echo "EXESUF=$EXESUF" >> config.mak
2210 echo "EXTRA_VERSION=$extra_version" >> config.mak
2211 echo "DEPEND_CMD=$DEPEND_CMD" >> config.mak
2212
2213 if enabled bigendian; then
2214 echo "WORDS_BIGENDIAN=yes" >> config.mak
2215 echo "#define WORDS_BIGENDIAN 1" >> $TMPH
2216 fi
2217
2218 if enabled sdl; then
2219 echo "SDL_LIBS=`"${SDL_CONFIG}" --libs`" >> config.mak
2220 echo "SDL_CFLAGS=`"${SDL_CONFIG}" --cflags`" >> config.mak
2221 fi
2222 if enabled texi2html; then
2223 echo "BUILD_DOC=yes" >> config.mak
2224 fi
2225
2226 get_version(){
2227 name=$1
2228 file=$source_path/$2
2229 eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
2230 eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
2231 lcname=$(tolower $name)
2232 eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
2233 eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
2234 }
2235
2236 get_version LIBSWSCALE libswscale/swscale.h
2237 get_version LIBPOSTPROC libpostproc/postprocess.h
2238 get_version LIBAVCODEC libavcodec/avcodec.h
2239 get_version LIBAVDEVICE libavdevice/avdevice.h
2240 get_version LIBAVFORMAT libavformat/avformat.h
2241 get_version LIBAVUTIL libavutil/avutil.h
2242 get_version LIBAVFILTER libavfilter/avfilter.h
2243
2244 if enabled shared; then
2245 echo "BUILD_SHARED=yes" >> config.mak
2246 echo "PIC=-fPIC -DPIC" >> config.mak
2247 echo "LIBTARGET=${LIBTARGET}" >> config.mak
2248 echo "SLIBNAME=${SLIBNAME}" >> config.mak
2249 echo "SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}" >> config.mak
2250 echo "SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}" >> config.mak
2251 echo "SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}" >> config.mak
2252 echo "SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}" >> config.mak
2253 echo "SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}" >> config.mak
2254 echo "SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}" >> config.mak
2255 fi
2256 echo "LIB_INSTALL_EXTRA_CMD=${LIB_INSTALL_EXTRA_CMD}" >> config.mak
2257 echo "EXTRALIBS=$extralibs" >> config.mak
2258
2259 print_config ARCH_ $TMPH config.mak $ARCH_LIST
2260 print_config HAVE_ $TMPH config.mak $HAVE_LIST
2261 print_config CONFIG_ $TMPH config.mak $CONFIG_LIST \
2262 $CONFIG_EXTRA \
2263 $DECODER_LIST \
2264 $ENCODER_LIST \
2265 $PARSER_LIST \
2266 $BSF_LIST \
2267 $DEMUXER_LIST \
2268 $MUXER_LIST \
2269 $FILTER_LIST \
2270 $PROTOCOL_LIST \
2271 $INDEV_LIST \
2272 $OUTDEV_LIST \
2273
2274 echo "#define restrict $_restrict" >> $TMPH
2275
2276 if enabled small; then
2277 echo "#define av_always_inline" >> $TMPH
2278 fi
2279
2280 echo "SRC_PATH=\"$source_path\"" >> config.mak
2281 echo "SRC_PATH_BARE=$source_path" >> config.mak
2282 echo "BUILD_ROOT=\"$PWD\"" >> config.mak
2283
2284 # Apparently it's not possible to portably echo a backslash.
2285 enabled asmalign_pot &&
2286 printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH ||
2287 printf '#define ASMALIGN(ZEROBITS) ".align 1 << " #ZEROBITS "\\n\\t"\n' >> $TMPH
2288
2289 echo "#define EXTERN_PREFIX \"${extern_prefix}\"" >> $TMPH
2290
2291 echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
2292
2293 # Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
2294 cmp -s $TMPH config.h &&
2295 echo "config.h is unchanged" ||
2296 mv -f $TMPH config.h
2297
2298 rm -f $TMPC $TMPE $TMPH $TMPO $TMPS $TMPSH
2299
2300 # build tree in object directory if source path is different from current one
2301 if enabled source_path_used; then
2302 DIRS="\
2303 doc \
2304 libavcodec \
2305 libavcodec/alpha \
2306 libavcodec/armv4l \
2307 libavcodec/bfin \
2308 libavcodec/i386 \
2309 libavcodec/mlib \
2310 libavcodec/ppc \
2311 libavcodec/sh4 \
2312 libavcodec/sparc \
2313 libavdevice \
2314 libavfilter \
2315 libavformat \
2316 libavutil \
2317 libpostproc \
2318 libswscale \
2319 tests \
2320 tools \
2321 vhook \
2322 "
2323 FILES="\
2324 Makefile \
2325 common.mak \
2326 subdir.mak \
2327 doc/texi2pod.pl \
2328 libavcodec/Makefile \
2329 libavdevice/Makefile \
2330 libavfilter/Makefile \
2331 libavformat/Makefile \
2332 libavutil/Makefile \
2333 libpostproc/Makefile \
2334 libswscale/Makefile \
2335 "
2336 for dir in $DIRS ; do
2337 mkdir -p $dir
2338 done
2339 for f in $FILES ; do
2340 $ln_s "$source_path/$f" $f
2341 done
2342 fi
2343
2344
2345 # build pkg-config files
2346
2347 pkgconfig_generate(){
2348 name=$1
2349 shortname=${name#lib}
2350 comment=$2
2351 version=$3
2352 libs=$4
2353 requires=$5
2354 cat <<EOF > $name/$name.pc
2355 prefix=$prefix
2356 exec_prefix=\${prefix}
2357 libdir=$libdir
2358 includedir=$incdir
2359
2360 Name: $name
2361 Description: $comment
2362 Version: $version
2363 Requires: $(disabled shared && echo $requires)
2364 Requires.private: $(enabled shared && echo $requires)
2365 Conflicts:
2366 Libs: -L\${libdir} -l${shortname} $(disabled shared && echo $libs)
2367 Libs.private: $(enabled shared && echo $libs)
2368 Cflags: -I\${includedir}
2369 EOF
2370 cat <<EOF > $name/$name-uninstalled.pc
2371 prefix=
2372 exec_prefix=
2373 libdir=\${pcfiledir}
2374 includedir=${source_path}
2375
2376 Name: $name
2377 Description: $comment
2378 Version: $version
2379 Requires: $requires
2380 Conflicts:
2381 Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
2382 Cflags: -I\${includedir}
2383 EOF
2384 }
2385
2386 pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
2387 pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "$pkg_requires libavutil = $LIBAVUTIL_VERSION"
2388 pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "$pkg_requires libavcodec = $LIBAVCODEC_VERSION"
2389 pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "$pkg_requires libavformat = $LIBAVFORMAT_VERSION"
2390 enabled avfilter &&
2391 pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "$pkg_requires libavutil = $LIBAVUTIL_VERSION"
2392 enabled postproc &&
2393 pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
2394 if enabled swscale; then
2395 pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"
2396 else
2397 pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "$pkg_requires libavcodec = $LIBAVCODEC_VERSION"
2398 apply libswscale/libswscale.pc sed s/^Libs:.*$/Libs:/
2399 fi