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