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