allow --cpu=core2 for Intel Core2 tuning with gcc 4.3 snapshots
[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 " --log[=FILE|yes|no] log tests and output to FILE [config.err]"
60 echo " --prefix=PREFIX install in PREFIX [$PREFIX]"
61 echo " --libdir=DIR install libs in DIR [PREFIX/lib]"
62 echo " --shlibdir=DIR install shared libs in DIR [PREFIX/lib]"
63 echo " --incdir=DIR install includes in DIR [PREFIX/include/ffmpeg]"
64 echo " --mandir=DIR install man page in DIR [PREFIX/man]"
65 echo " --enable-mingw32 enable MinGW native/cross Windows compile"
66 echo " --enable-mingwce enable MinGW native/cross WinCE compile"
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-pp enable GPLed postprocessing support [default=no]"
72 echo " --enable-swscaler software scaler support [default=no]"
73 echo " --enable-sunmlib use Sun medialib [default=no]"
74 echo " --enable-beosthreads use BeOS threads [default=no]"
75 echo " --enable-os2threads use OS/2 threads [default=no]"
76 echo " --enable-pthreads use pthreads [default=no]"
77 echo " --enable-w32threads use Win32 threads [default=no]"
78 echo " --enable-x11grab enable X11 grabbing [default=no]"
79 echo " --enable-dc1394 enable IIDC-1394 grabbing using libdc1394"
80 echo " and libraw1394 [default=no]"
81 echo " --enable-a52 enable GPLed liba52 support [default=no]"
82 echo " --enable-a52bin open liba52.so.0 at runtime [default=no]"
83 echo " --enable-avisynth allow reading AVISynth script files [default=no]"
84 echo " --enable-dts enable GPLed libdts support [default=no]"
85 echo " --enable-faac enable FAAC support via libfaac [default=no]"
86 echo " --enable-faad enable FAAD support via libfaad [default=no]"
87 echo " --enable-faadbin build FAAD support with runtime linking [default=no]"
88 echo " --enable-libgsm enable GSM support via libgsm [default=no]"
89 echo " --enable-mp3lame enable MP3 encoding via libmp3lame [default=no]"
90 echo " --enable-libnut enable NUT support via libnut [default=no]"
91 echo " --enable-libogg enable Ogg support via libogg [default=no]"
92 echo " --enable-vorbis enable Vorbis support via libvorbis [default=no]"
93 echo " --enable-x264 enable H.264 encoding via x264 [default=no]"
94 echo " --enable-xvid enable XviD support via xvidcore [default=no]"
95 echo " --enable-amr_nb enable amr_nb float audio codec"
96 echo " --enable-amr_nb-fixed use fixed point for amr-nb codec"
97 echo " --enable-amr_wb enable amr_wb float audio codec"
98 echo " --enable-amr_if2 enable amr_wb IF2 audio codec"
99 echo " --enable-gpl allow use of GPL code, the resulting libav*"
100 echo " and ffmpeg will be under GPL [default=no]"
101 echo ""
102 echo "Advanced options (experts only):"
103 echo " --source-path=PATH path to source code [$source_path]"
104 echo " --cross-prefix=PREFIX use PREFIX for compilation tools [$cross_prefix]"
105 echo " --cross-compile assume a cross-compiler is used"
106 echo " --cc=CC use C compiler CC [$cc]"
107 echo " --make=MAKE use specified make [$make]"
108 echo " --extra-cflags=ECFLAGS add ECFLAGS to CFLAGS [$CFLAGS]"
109 echo " --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]"
110 echo " --extra-libs=ELIBS add ELIBS [$ELIBS]"
111 echo " --build-suffix=SUFFIX suffix for application specific build []"
112 echo " --arch=ARCH select architecture [$arch]"
113 echo " --cpu=CPU selects the minimum cpu required (affects
114 instruction selection, may crash on older CPUs)"
115 echo " --powerpc-perf-enable enable performance report on PPC"
116 echo " (requires enabling PMC)"
117 echo " --disable-mmx disable MMX usage"
118 echo " --disable-armv5te disable armv5te usage"
119 echo " --disable-iwmmxt disable iwmmxt usage"
120 echo " --disable-altivec disable AltiVec usage"
121 echo " --disable-audio-oss disable OSS audio support [default=no]"
122 echo " --disable-audio-beos disable BeOS audio support [default=no]"
123 echo " --disable-v4l disable video4linux grabbing [default=no]"
124 echo " --disable-v4l2 disable video4linux2 grabbing [default=no]"
125 echo " --disable-bktr disable bktr video grabbing [default=no]"
126 echo " --disable-dv1394 disable DV1394 grabbing [default=no]"
127 echo " --disable-network disable network support [default=no]"
128 echo " --disable-ipv6 disable ipv6 support [default=no]"
129 echo " --disable-zlib disable zlib [default=no]"
130 echo " --disable-vhook disable video hooking support"
131 echo " --enable-gprof enable profiling with gprof [$gprof]"
132 echo " --disable-debug disable debugging symbols"
133 echo " --disable-opts disable compiler optimizations"
134 echo " --enable-extra-warnings enable more compiler warnings"
135 echo " --disable-mpegaudio-hp faster (but less accurate)"
136 echo " MPEG audio decoding [default=no]"
137 echo " --disable-protocols disable I/O protocols support [default=no]"
138 echo " --disable-ffmpeg disable ffmpeg build"
139 echo " --disable-ffserver disable ffserver build"
140 echo " --disable-ffplay disable ffplay build"
141 echo " --enable-small optimize for size instead of speed"
142 echo " --enable-memalign-hack emulate memalign, interferes with memory debuggers"
143 echo " --disable-strip disable stripping of executables and shared libraries"
144 echo " --disable-encoder=NAME disables encoder NAME"
145 echo " --enable-encoder=NAME enables encoder NAME"
146 echo " --disable-decoder=NAME disables decoder NAME"
147 echo " --enable-decoder=NAME enables decoder NAME"
148 echo " --disable-encoders disables all encoders"
149 echo " --disable-decoders disables all decoders"
150 echo " --disable-muxer=NAME disables muxer NAME"
151 echo " --enable-muxer=NAME enables muxer NAME"
152 echo " --disable-muxers disables all muxers"
153 echo " --disable-demuxer=NAME disables demuxer NAME"
154 echo " --enable-demuxer=NAME enables demuxer NAME"
155 echo " --disable-demuxers disables all demuxers"
156 echo " --enable-parser=NAME enables parser NAME"
157 echo " --disable-parser=NAME disables parser NAME"
158 echo " --disable-parsers disables all parsers"
159 echo ""
160 echo "NOTE: Object files are built at the place where configure is launched."
161 exit 1
162 }
163
164 log(){
165 echo "$@" >>$logfile
166 }
167
168 log_file(){
169 log BEGIN $1
170 cat -n $1 >>$logfile
171 log END $1
172 }
173
174 echolog(){
175 log "$@"
176 echo "$@"
177 }
178
179 die(){
180 echolog "$@"
181 cat <<EOF
182 If you think configure made a mistake, make sure you are using the latest
183 version from SVN. If the latest version fails, report the problem to the
184 ffmpeg-devel@mplayerhq.hu mailing list or IRC #ffmpeg on irc.freenode.net.
185 EOF
186 if enabled logging; then
187 cat <<EOF
188 Include the log file "$logfile" produced by configure as this will help
189 solving the problem.
190 EOF
191 else
192 cat <<EOF
193 Rerun configure with logging enabled (do not use --log=no), and include the
194 log this produces with your report.
195 EOF
196 fi
197 rm -f $TMPC $TMPO $TMPE $TMPS $TMPH
198 exit 1
199 }
200
201 # "tr '[a-z]' '[A-Z]'" is a workaround for Solaris tr not grokking "tr a-z A-Z"
202 toupper(){
203 echo "$@" | tr '[a-z]' '[A-Z]'
204 }
205
206 set_all(){
207 value=$1
208 shift
209 for var in $*; do
210 eval $var=$value
211 done
212 }
213
214 enable(){
215 set_all yes $*
216 }
217
218 disable(){
219 set_all no $*
220 }
221
222 enabled(){
223 eval test "x\$$1" = "xyes"
224 }
225
226 enabled_all(){
227 for opt; do
228 enabled $opt || return 1
229 done
230 }
231
232 enabled_any(){
233 for opt; do
234 enabled $opt && return 0
235 done
236 }
237
238 print_config(){
239 pfx=$1
240 header=$2
241 makefile=$3
242 shift 3
243 for cfg; do
244 if enabled $cfg; then
245 ucname="${pfx}`toupper $cfg`"
246 echo "#define ${ucname} 1" >> $header
247 echo "${ucname}=yes" >> $makefile
248 fi
249 done
250 }
251
252 flags_saved(){
253 (: ${SAVE_CFLAGS?}) 2>/dev/null
254 }
255
256 save_flags(){
257 flags_saved && return
258 SAVE_CFLAGS="$CFLAGS"
259 SAVE_LDFLAGS="$LDFLAGS"
260 SAVE_extralibs="$extralibs"
261 }
262
263 restore_flags(){
264 CFLAGS="$SAVE_CFLAGS"
265 LDFLAGS="$SAVE_LDFLAGS"
266 extralibs="$SAVE_extralibs"
267 unset SAVE_CFLAGS
268 unset SAVE_LDFLAGS
269 unset SAVE_extralibs
270 }
271
272 temp_cflags(){
273 save_flags
274 CFLAGS="$CFLAGS $*"
275 }
276
277 temp_ldflags(){
278 save_flags
279 LDFLAGS="$LDFLAGS $*"
280 }
281
282 temp_extralibs(){
283 save_flags
284 extralibs="$extralibs $*"
285 }
286
287 append(){
288 var=$1
289 shift
290 flags_saved && eval "SAVE_$var=\"\$SAVE_$var $*\""
291 eval "$var=\"\$$var $*\""
292 }
293
294 add_cflags(){
295 append CFLAGS "$@"
296 }
297
298 add_ldflags(){
299 append LDFLAGS "$@"
300 }
301
302 add_extralibs(){
303 append extralibs "$@"
304 }
305
306 check_cmd(){
307 log "$@"
308 "$@" >>$logfile 2>&1
309 }
310
311 check_cc(){
312 log check_cc "$@"
313 cat >$TMPC
314 log_file $TMPC
315 check_cmd $cc $CFLAGS "$@" -c -o $TMPO $TMPC
316 }
317
318 check_cpp(){
319 log check_cpp "$@"
320 cat >$TMPC
321 log_file $TMPC
322 check_cmd $cc $CFLAGS "$@" -E -o $TMPO $TMPC
323 }
324
325 check_ld(){
326 log check_ld "$@"
327 check_cc || return
328 check_cmd $cc $LDFLAGS "$@" -o $TMPE $TMPO $extralibs
329 }
330
331 check_cflags(){
332 log check_cflags "$@"
333 check_cc "$@" <<EOF && add_cflags "$@"
334 int x;
335 EOF
336 }
337
338 check_ldflags(){
339 log check_ldflags "$@"
340 check_ld "$@" <<EOF && add_ldflags "$@"
341 int main(){
342 return 0;
343 }
344 EOF
345 }
346
347 check_header(){
348 log check_header "$@"
349 header=$1
350 shift
351 check_cpp "$@" <<EOF
352 #include <$header>
353 int x;
354 EOF
355 err=$?
356 var=`echo $header | sed 's/[^A-Za-z0-9_]/_/g'`
357 test "$err" = 0 && enable $var || disable $var
358 return $err
359 }
360
361 check_func(){
362 log check_func "$@"
363 func=$1
364 shift
365 check_ld "$@" <<EOF
366 extern int $func();
367 int main(){
368 $func();
369 }
370 EOF
371 err=$?
372 test "$err" = 0 && enable $func || disable $func
373 return $err
374 }
375
376 check_lib(){
377 log check_lib "$@"
378 header="$1"
379 func="$2"
380 shift 2
381 temp_extralibs "$@"
382 check_header $header && check_func $func && add_extralibs "$@"
383 err=$?
384 restore_flags
385 return $err
386 }
387
388 check_exec(){
389 check_ld "$@" && { test "$cross_compile" = yes || $TMPE >>$logfile 2>&1; }
390 }
391
392 require(){
393 name="$1"
394 header="$2"
395 func="$3"
396 shift 3
397 check_lib $header $func "$@" || die "ERROR: $name not found"
398 }
399
400 apply(){
401 file=$1
402 shift
403 "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
404 }
405
406 CONFIG_LIST='
407 encoders
408 decoders
409 parsers
410 muxers
411 demuxers
412 amr
413 amr_nb
414 amr_nb_fixed
415 amr_wb
416 audio_beos
417 audio_oss
418 avisynth
419 beos_netserver
420 bktr
421 dc1394
422 dv1394
423 ffmpeg
424 ffplay
425 ffserver
426 gpl
427 ipv6
428 liba52
429 liba52bin
430 libdts
431 libfaac
432 libfaad
433 libfaadbin
434 libgsm
435 libmp3lame
436 libnut
437 libogg
438 libvorbis
439 memalign_hack
440 mpegaudio_hp
441 network
442 pp
443 protocols
444 swscaler
445 vhook
446 video4linux
447 video4linux2
448 wince
449 x11grab
450 x264
451 xvid
452 zlib
453 '
454
455 HAVE_LIST='
456 altivec_h
457 beosthreads
458 byteswap_h
459 dcbzl
460 dev_bktr_ioctl_bt848_h
461 dev_bktr_ioctl_meteor_h
462 dev_ic_bt8xx_h
463 dev_video_meteor_ioctl_meteor_h
464 dev_video_bktr_ioctl_bt848_h
465 dlfcn_h
466 dlopen
467 freetype2
468 gprof
469 imlib2
470 inet_aton
471 localtime_r
472 lrintf
473 machine_ioctl_bt848_h
474 machine_ioctl_meteor_h
475 malloc_h
476 memalign
477 mlib
478 os2
479 os2threads
480 pthreads
481 sdl
482 sdl_video_size
483 threads
484 w32threads
485 '
486
487 # set temporary file name
488 if test ! -z "$TMPDIR" ; then
489 TMPDIR1="${TMPDIR}"
490 elif test ! -z "$TEMPDIR" ; then
491 TMPDIR1="${TEMPDIR}"
492 else
493 TMPDIR1="/tmp"
494 fi
495
496 TMPC="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.c"
497 TMPO="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.o"
498 TMPE="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}"
499 TMPS="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.S"
500 TMPH="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.h"
501
502 # default parameters
503 logging="yes"
504 logfile="config.err"
505 PREFIX="/usr/local"
506 libdir='${PREFIX}/lib'
507 shlibdir="$libdir"
508 incdir='${PREFIX}/include/ffmpeg'
509 mandir='${PREFIX}/man'
510 bindir='${PREFIX}/bin'
511 cross_prefix=""
512 cross_compile="no"
513 cc="gcc"
514 ar="ar"
515 ranlib="ranlib"
516 make="make"
517 strip="strip"
518 arch=`uname -m`
519 cpu="generic"
520 powerpc_perf="no"
521 mmx="default"
522 cmov="no"
523 cmov_is_fast="no"
524 armv5te="default"
525 iwmmxt="default"
526 altivec="default"
527 dcbzl="no"
528 mmi="default"
529 case "$arch" in
530 i386|i486|i586|i686|i86pc|BePC)
531 arch="x86_32"
532 ;;
533 x86_64|amd64)
534 arch="x86_32"
535 canon_arch="`$cc -dumpmachine | sed -e 's,\([^-]*\)-.*,\1,'`"
536 if [ x"$canon_arch" = x"x86_64" -o x"$canon_arch" = x"amd64" ]; then
537 if [ -z "`echo $CFLAGS | grep -- -m32`" ]; then
538 arch="x86_64"
539 fi
540 fi
541 ;;
542 # armv4l is a subset of armv[567]*l
543 arm|armv[4567]*l)
544 arch="armv4l"
545 ;;
546 alpha)
547 arch="alpha"
548 ;;
549 "Power Macintosh"|ppc|ppc64|powerpc)
550 arch="powerpc"
551 ;;
552 mips|mipsel|IP*)
553 arch="mips"
554 ;;
555 sun4u|sparc64)
556 arch="sparc64"
557 ;;
558 sparc)
559 arch="sparc"
560 ;;
561 sh4)
562 arch="sh4"
563 ;;
564 parisc|parisc64)
565 arch="parisc"
566 ;;
567 s390|s390x)
568 arch="s390"
569 ;;
570 m68k)
571 arch="m68k"
572 ;;
573 ia64)
574 arch="ia64"
575 ;;
576 bfin)
577 arch="bfin"
578 ;;
579 *)
580 arch="unknown"
581 ;;
582 esac
583 gprof="no"
584 video4linux="yes"
585 video4linux2="yes"
586 bktr="no"
587 audio_oss="yes"
588 audio_beos="no"
589 x11grab="no"
590 dv1394="yes"
591 dc1394="no"
592 network="yes"
593 ipv6="yes"
594 zlib="yes"
595 liba52="no"
596 liba52bin="no"
597 libdts="no"
598 libfaac="no"
599 libfaad="no"
600 libfaadbin="no"
601 libgsm="no"
602 libmp3lame="no"
603 libnut="no"
604 libogg="no"
605 libvorbis="no"
606 xvid="no"
607 x264="no"
608 pp="no"
609 mingw32="no"
610 wince="no"
611 os2="no"
612 lstatic="yes"
613 lshared="no"
614 optimize="yes"
615 debug="yes"
616 extrawarnings="no"
617 dostrip="yes"
618 installstrip="-s"
619 extralibs="-lm"
620 bigendian="no"
621 vhook="default"
622 avisynth="no"
623 dlfcn_h="no"
624 dlopen="no"
625 mpegaudio_hp="yes"
626 SHFLAGS='-shared -Wl,-soname,$@'
627 VHOOKSHFLAGS='$(SHFLAGS)'
628 beos_netserver="no"
629 protocols="yes"
630 ffmpeg="yes"
631 ffserver="yes"
632 ffplay="yes"
633 LIBOBJFLAGS=""
634 FFLDFLAGS=-Wl,--warn-common
635 LDLATEFLAGS='-Wl,-rpath-link,\$(BUILD_ROOT)/libavcodec -Wl,-rpath-link,\$(BUILD_ROOT)/libavformat -Wl,-rpath-link,\$(BUILD_ROOT)/libavutil'
636 FFSERVERLDFLAGS=-Wl,-E
637 LDCONFIG="ldconfig"
638 LIBPREF="lib"
639 LIBSUF=".a"
640 LIB='$(LIBPREF)$(NAME)$(LIBSUF)'
641 SLIBPREF="lib"
642 SLIBSUF=".so"
643 SLIBNAME='$(SLIBPREF)$(NAME)$(SLIBSUF)'
644 SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
645 SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
646 EXESUF=""
647 BUILDSUF=""
648 amr_nb="no"
649 amr_wb="no"
650 amr_nb_fixed="no"
651 amr_if2="no"
652 mlib="no"
653 beosthreads="no"
654 os2threads="no"
655 pthreads="no"
656 w32threads="no"
657 thread_type="no"
658 swscaler="no"
659 gpl="no"
660 memalign_hack="no"
661 asmalign_pot="unknown"
662 LIB_INSTALL_EXTRA_CMD='$(RANLIB) "$(libdir)/$(LIB)"'
663
664 # OS specific
665 targetos=`uname -s`
666 case $targetos in
667 BeOS)
668 PREFIX="/boot/home/config"
669 # helps building libavcodec
670 add_cflags "-DPIC -fomit-frame-pointer"
671 # 3 gcc releases known for BeOS, each with ugly bugs
672 gcc_version="`$cc -v 2>&1 | grep version | cut -d ' ' -f3-`"
673 case "$gcc_version" in
674 2.9-beos-991026*|2.9-beos-000224*) echo "R5/GG gcc"
675 mmx="no"
676 ;;
677 *20010315*) echo "BeBits gcc"
678 add_cflags "-fno-expensive-optimizations"
679 ;;
680 esac
681 SHFLAGS=-nostart
682 # disable Linux things
683 audio_oss="no"
684 video4linux="no"
685 video4linux2="no"
686 dv1394="no"
687 # enable BeOS things
688 audio_beos="yes"
689 # no need for libm, but the inet stuff
690 # Check for BONE
691 if (echo $BEINCLUDES|grep 'headers/be/bone' >/dev/null); then
692 extralibs="-lbind -lsocket"
693 else
694 beos_netserver="yes"
695 extralibs="-lnet"
696 fi ;;
697 SunOS)
698 video4linux="no"
699 video4linux2="no"
700 audio_oss="no"
701 dv1394="no"
702 make="gmake"
703 FFLDFLAGS=""
704 FFSERVERLDFLAGS=""
705 SHFLAGS="-shared -Wl,-h,\$@"
706 add_extralibs "-lsocket -lnsl"
707 ;;
708 NetBSD)
709 video4linux="no"
710 video4linux2="no"
711 bktr="yes"
712 audio_oss="yes"
713 dv1394="no"
714 make="gmake"
715 add_extralibs "-lossaudio"
716 ;;
717 OpenBSD)
718 video4linux="no"
719 video4linux2="no"
720 bktr="yes"
721 audio_oss="yes"
722 dv1394="no"
723 need_memalign="no"
724 make="gmake"
725 LIBOBJFLAGS="\$(PIC)"
726 LDCONFIG="ldconfig -m \$(shlibdir)"
727 SHFLAGS='-shared'
728 SLIBNAME='$(SLIBPREF)$(NAME)$(SLIBSUF).$(LIBVERSION)'
729 SLIBNAME_WITH_VERSION='$(SLIBNAME)'
730 SLIBNAME_WITH_MAJOR='$(SLIBNAME)'
731 add_extralibs "-lossaudio"
732 ;;
733 FreeBSD)
734 video4linux="no"
735 video4linux2="no"
736 bktr="yes"
737 audio_oss="yes"
738 dv1394="no"
739 make="gmake"
740 need_memalign="no"
741 add_cflags "-pthread"
742 ;;
743 GNU/kFreeBSD)
744 video4linux="no"
745 video4linux2="no"
746 bktr="yes"
747 audio_oss="yes"
748 dv1394="no"
749 add_cflags "-pthread"
750 ;;
751 BSD/OS)
752 video4linux="no"
753 video4linux2="no"
754 bktr="yes"
755 audio_oss="yes"
756 dv1394="no"
757 extralibs="-lpoll -lgnugetopt -lm"
758 make="gmake"
759 strip="strip -d"
760 installstrip=""
761 ;;
762 Darwin)
763 cc="cc"
764 video4linux="no"
765 video4linux2="no"
766 audio_oss="no"
767 dv1394="no"
768 need_memalign="no"
769 SHFLAGS="-dynamiclib -Wl,-single_module -Wl,-install_name,\$(shlibdir)/\$(SLIBNAME),-current_version,\$(SPPVERSION),-compatibility_version,\$(SPPVERSION) -Wl,-read_only_relocs,suppress"
770 VHOOKSHFLAGS='-dynamiclib -Wl,-single_module -flat_namespace -undefined suppress -Wl,-install_name,$(shlibdir)/vhook/$@'
771 extralibs=""
772 strip="strip -x"
773 installstrip=""
774 FFLDFLAGS="-Wl,-dynamic,-search_paths_first"
775 SLIBSUF=".dylib"
776 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME).$(LIBVERSION)$(SLIBSUF)'
777 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(NAME).$(LIBMAJOR)$(SLIBSUF)'
778 FFSERVERLDFLAGS=-Wl,-bind_at_load
779 ;;
780 MINGW32*)
781 # Note: the rest of the mingw32 config is done afterwards as mingw32
782 # can be forced on the command line for Linux cross compilation.
783 mingw32="yes"
784 ;;
785 CYGWIN*)
786 targetos=CYGWIN
787 shlibdir="$bindir"
788 video4linux="no"
789 video4linux2="no"
790 audio_oss="yes"
791 dv1394="no"
792 VHOOKSHFLAGS='-shared -L$(BUILD_ROOT)/libavformat -L$(BUILD_ROOT)/libavcodec -L$(BUILD_ROOT)/libavutil'
793 VHOOKLIBS='-lavformat$(BUILDSUF) -lavcodec$(BUILDSUF) -lavutil$(BUILDSUF) $(EXTRALIBS)'
794 extralibs=""
795 EXESUF=".exe"
796 SLIBPREF="cyg"
797 SLIBSUF=".dll"
798 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
799 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(NAME)-$(LIBMAJOR)$(SLIBSUF)'
800 SHFLAGS='-shared -Wl,--out-implib=lib$(NAME).dll.a'
801 ;;
802 Linux)
803 LDLATEFLAGS="-Wl,--as-needed $LDLATEFLAGS"
804 ;;
805 IRIX*)
806 targetos=IRIX
807 ranlib="echo ignoring ranlib"
808 video4linux="no"
809 video4linux2="no"
810 audio_oss="no"
811 make="gmake"
812 ;;
813 OS/2)
814 TMPE=$TMPE".exe"
815 ar="emxomfar -p128"
816 ranlib="echo ignoring ranlib"
817 strip="echo ignoring strip"
818 add_cflags "-Zomf"
819 FFLDFLAGS="-Zomf -Zstack 16384 -s"
820 SHFLAGS="-Zdll -Zomf"
821 FFSERVERLDFLAGS=""
822 LIBPREF=""
823 LIBSUF=".lib"
824 SLIBPREF=""
825 SLIBSUF=".dll"
826 EXESUF=".exe"
827 extralibs=""
828 pkg_requires=""
829 video4linux="no"
830 video4linux2="no"
831 audio_oss="no"
832 dv1394="no"
833 ffserver="no"
834 vhook="no"
835 os2="yes"
836 ;;
837 *)
838 targetos="${targetos}-UNKNOWN"
839 ;;
840 esac
841
842 # find source path
843 source_path="`dirname \"$0\"`"
844 source_path_used="yes"
845 if test -z "$source_path" -o "$source_path" = "." ; then
846 source_path="`pwd`"
847 source_path_used="no"
848 else
849 source_path="`cd \"$source_path\"; pwd`"
850 echo "$source_path" | grep -q '[[:blank:]]' &&
851 die "Out of tree builds are impossible with whitespace in source path."
852 fi
853
854 if test x"$1" = x"-h" -o x"$1" = x"--help" ; then
855 show_help
856 fi
857
858 FFMPEG_CONFIGURATION=" "
859 for opt do
860 FFMPEG_CONFIGURATION="$FFMPEG_CONFIGURATION""$opt "
861 done
862
863 ENCODER_LIST=`sed -n 's/^[^#]*ENC.*, *\(.*\)).*/\1_encoder/p' "$source_path/libavcodec/allcodecs.c"`
864 DECODER_LIST=`sed -n 's/^[^#]*DEC.*, *\(.*\)).*/\1_decoder/p' "$source_path/libavcodec/allcodecs.c"`
865 PARSER_LIST=`sed -n 's/^[^#]*PARSER.*, *\(.*\)).*/\1_parser/p' "$source_path/libavcodec/allcodecs.c"`
866 MUXER_LIST=`sed -n 's/^[^#]*_MUX.*, *\(.*\)).*/\1_muxer/p' "$source_path/libavformat/allformats.c"`
867 DEMUXER_LIST=`sed -n 's/^[^#]*DEMUX.*, *\(.*\)).*/\1_demuxer/p' "$source_path/libavformat/allformats.c"`
868
869 enable $ENCODER_LIST $DECODER_LIST $PARSER_LIST $MUXER_LIST $DEMUXER_LIST
870
871 for opt do
872 optval="${opt#*=}"
873 case "$opt" in
874 --log)
875 ;;
876 --log=*) logging="$optval"
877 ;;
878 --prefix=*) PREFIX="$optval"
879 ;;
880 --libdir=*) libdir="$optval"
881 ;;
882 --shlibdir=*) shlibdir="$optval"
883 ;;
884 --incdir=*) incdir="$optval"
885 ;;
886 --mandir=*) mandir="$optval"
887 ;;
888 --source-path=*) source_path="$optval"
889 ;;
890 --cross-prefix=*) cross_prefix="$optval"
891 ;;
892 --cross-compile) cross_compile=yes
893 ;;
894 --cc=*) cc="$optval"
895 ;;
896 --make=*) make="$optval"
897 ;;
898 --extra-cflags=*) add_cflags "$optval"
899 ;;
900 --extra-ldflags=*) add_ldflags "$optval"
901 ;;
902 --extra-libs=*) add_extralibs "$optval"
903 ;;
904 --build-suffix=*) BUILDSUF="$optval"
905 ;;
906 --arch=*) arch="$optval"
907 ;;
908 --cpu=*) cpu="$optval"
909 ;;
910 --powerpc-perf-enable) powerpc_perf="yes"
911 ;;
912 --disable-mmx) mmx="no"
913 ;;
914 --disable-armv5te) armv5te="no"
915 ;;
916 --disable-iwmmxt) iwmmxt="no"
917 ;;
918 --disable-altivec) altivec="no"
919 ;;
920 --enable-gprof) gprof="yes"
921 ;;
922 --disable-v4l) video4linux="no"
923 ;;
924 --disable-v4l2) video4linux2="no"
925 ;;
926 --disable-bktr) bktr="no"
927 ;;
928 --disable-audio-oss) audio_oss="no"
929 ;;
930 --disable-audio-beos) audio_beos="no"
931 ;;
932 --disable-dv1394) dv1394="no"
933 ;;
934 --disable-network) network="no"; ffserver="no"
935 ;;
936 --disable-ipv6) ipv6="no";
937 ;;
938 --disable-zlib) zlib="no"
939 ;;
940 --enable-a52) liba52="yes"
941 ;;
942 --enable-a52bin) liba52bin="yes"
943 ;;
944 --enable-dts) libdts="yes"
945 ;;
946 --enable-pp) pp="yes"
947 ;;
948 --enable-libgsm) libgsm="yes"
949 ;;
950 --enable-mp3lame) libmp3lame="yes"
951 ;;
952 --enable-libnut) libnut="yes"
953 ;;
954 --enable-libogg) libogg="yes"
955 pkg_requires="$pkg_requires ogg >= 1.1"
956 ;;
957 --enable-vorbis) libvorbis="yes"
958 pkg_requires="$pkg_requires vorbis vorbisenc"
959 ;;
960 --enable-faad) libfaad="yes"
961 ;;
962 --enable-faadbin) libfaadbin="yes"
963 ;;
964 --enable-faac) libfaac="yes"
965 ;;
966 --enable-xvid) xvid="yes"
967 ;;
968 --enable-x264) x264="yes"
969 ;;
970 --enable-avisynth) avisynth="yes";
971 ;;
972 --enable-x11grab) x11grab="yes";
973 ;;
974 --enable-dc1394) dc1394="yes"
975 pkg_requires="$pkg_requires libraw1394"
976 ;;
977 --disable-vhook) vhook="no"
978 ;;
979 --enable-mingw32) mingw32="yes"
980 ;;
981 --enable-mingwce) wince="yes"
982 ;;
983 --enable-static) lstatic="yes"
984 ;;
985 --disable-static) lstatic="no"
986 ;;
987 --enable-shared) lshared="yes"
988 ;;
989 --disable-shared) lshared="no"
990 ;;
991 --disable-debug) debug="no"
992 ;;
993 --disable-opts) optimize="no"
994 ;;
995 --enable-extra-warnings) extrawarnings="yes"
996 ;;
997 --disable-mpegaudio-hp) mpegaudio_hp="no"
998 ;;
999 --disable-protocols) protocols="no"; network="no"; ffserver="no"
1000 ;;
1001 --disable-ffmpeg) ffmpeg="no"
1002 ;;
1003 --disable-ffserver) ffserver="no"
1004 ;;
1005 --disable-ffplay) ffplay="no"
1006 ;;
1007 --enable-small) optimize="small"
1008 ;;
1009 --enable-amr_nb) amr="yes"; amr_nb="yes"; amr_nb_fixed="no"
1010 ;;
1011 --enable-amr_nb-fixed) amr="yes"; amr_nb_fixed="yes"; amr_nb="no"
1012 ;;
1013 --enable-amr_wb) amr="yes"; amr_wb="yes"
1014 ;;
1015 --enable-amr_if2) amr="yes"; amr_if2="yes"
1016 ;;
1017 --enable-sunmlib) mlib="yes"
1018 ;;
1019 --enable-pthreads) pthreads="yes"
1020 ;;
1021 --enable-w32threads) w32threads="yes"
1022 ;;
1023 --enable-beosthreads) beosthreads="yes"
1024 ;;
1025 --enable-os2threads) os2threads="yes"
1026 ;;
1027 --enable-swscaler) swscaler="yes"
1028 ;;
1029 --enable-gpl) gpl="yes"
1030 ;;
1031 --enable-memalign-hack) memalign_hack="yes"
1032 ;;
1033 --disable-strip) dostrip="no"
1034 ;;
1035 --enable-encoder=*) enable ${optval}_encoder
1036 ;;
1037 --enable-decoder=*) enable ${optval}_decoder
1038 ;;
1039 --disable-encoder=*) disable ${optval}_encoder
1040 ;;
1041 --disable-decoder=*) disable ${optval}_decoder
1042 ;;
1043 --disable-encoders) disable $ENCODER_LIST
1044 ;;
1045 --disable-decoders) disable $DECODER_LIST
1046 ;;
1047 --enable-muxer=*) enable ${optval}_muxer
1048 ;;
1049 --disable-muxer=*) disable ${optval}_muxer
1050 ;;
1051 --disable-muxers) disable $MUXER_LIST; ffserver="no"
1052 ;;
1053 --enable-demuxer=*) enable ${optval}_demuxer
1054 ;;
1055 --disable-demuxer=*) disable ${optval}_demuxer
1056 ;;
1057 --disable-demuxers) disable $DEMUXER_LIST
1058 ;;
1059 --enable-parser=*) enable ${optval}_parser
1060 ;;
1061 --disable-parser=*) disable ${optval}_parser
1062 ;;
1063 --disable-parsers) disable $PARSER_LIST
1064 ;;
1065 --help) show_help
1066 ;;
1067 *)
1068 echo "Unknown option \"$opt\"."
1069 echo "See $0 --help for available options."
1070 exit 1
1071 ;;
1072 esac
1073 done
1074
1075 if test "$logging" != no; then
1076 test "$logging" = yes || logfile="$logging"
1077 echo "# $0 $@" >$logfile
1078 set >>$logfile
1079 else
1080 logfile=/dev/null
1081 fi
1082
1083 if test "$mingw32" = "yes" -o "$wince" = "yes"; then
1084 if test "$lshared" = "yes" && test "$lstatic" = "yes" ; then
1085 cat <<EOF
1086 You can only build one library type at once on MinGW.
1087 Specify --disable-static --enable-shared to only build
1088 the shared libraries. To build only the static libraries
1089 you do not need to pass additional options.
1090 EOF
1091 exit 1
1092 fi
1093 video4linux="no"
1094 video4linux2="no"
1095 audio_oss="no"
1096 dv1394="no"
1097 dc1394="no"
1098 ffserver="no"
1099 network="no"
1100 if test "$wince" = "yes"; then
1101 protocols="no"
1102 fi
1103 SLIBPREF=""
1104 SLIBSUF=".dll"
1105 EXESUF=".exe"
1106 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
1107 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(NAME)-$(LIBMAJOR)$(SLIBSUF)'
1108 SLIB_EXTRA_CMD="-lib /machine:i386 /def:\$(@:${SLIBSUF}=.def)"
1109 SLIB_INSTALL_EXTRA_CMD="-install -m 644 \$(SLIBNAME_WITH_MAJOR:\$(SLIBSUF)=.lib) \"\$(shlibdir)/\$(SLIBNAME_WITH_MAJOR:\$(SLIBSUF)=.lib)\""
1110 SHFLAGS="-shared -Wl,--output-def,\$(@:${SLIBSUF}=.def),--out-implib,lib\$(SLIBNAME:\$(SLIBSUF)=.dll.a) -Wl,--enable-runtime-pseudo-reloc"
1111 fi
1112
1113 # Combine FFLDFLAGS and the LDFLAGS environment variable.
1114 LDFLAGS="$FFLDFLAGS $LDFLAGS"
1115
1116 test -n "$cross_prefix" && cross_compile=yes
1117 cc="${cross_prefix}${cc}"
1118 ar="${cross_prefix}${ar}"
1119 ranlib="${cross_prefix}${ranlib}"
1120 strip="${cross_prefix}${strip}"
1121
1122 # we need to build at least one lib type
1123 if test "$lstatic" = "no" && test "$lshared" = "no" ; then
1124 cat <<EOF
1125 At least one library type must be built.
1126 Specify --enable-static to build the static libraries or --enable-shared to
1127 build the shared libraries as well. To only build the shared libraries specify
1128 --disable-static in addition to --enable-shared.
1129 EOF
1130 exit 1;
1131 fi
1132
1133 if test "$libvorbis" = "yes" && test "$libogg" = "no"; then
1134 die "libogg must be enabled to enable libvorbis."
1135 fi
1136
1137 if test "$gpl" != "yes"; then
1138 if test "$pp" != "no"; then
1139 die "The Postprocessing code is under GPL and --enable-gpl is not specified."
1140 fi
1141
1142 if test "$liba52" != "no" -o "$liba52bin" != "no"; then
1143 die "liba52 is under GPL and --enable-gpl is not specified."
1144 fi
1145
1146 if test "$xvid" != "no"; then
1147 die "libxvidcore is under GPL and --enable-gpl is not specified."
1148 fi
1149
1150 if test "$x264" != "no"; then
1151 die "x264 is under GPL and --enable-gpl is not specified."
1152 fi
1153
1154 if test "$libdts" != "no"; then
1155 die "libdts is under GPL and --enable-gpl is not specified."
1156 fi
1157
1158 if test "$libfaad" != "no" -o "$libfaadbin" != "no"; then
1159 if check_header faad.h; then
1160 check_cc << EOF
1161 #include <faad.h>
1162 #ifndef FAAD2_VERSION
1163 ok faad1
1164 #endif
1165 int main( void ) { return 0; }
1166 EOF
1167 if test $? = 0 ; then
1168 die "FAAD2 is under GPL and --enable-gpl is not specified."
1169 fi
1170 else
1171 libfaad="no"
1172 libfaadbin="no"
1173 echo "FAAD test failed."
1174 fi
1175 fi
1176
1177 if test "$x11grab" != "no"; then
1178 die "The X11 grabber is under GPL and --enable-gpl is not specified."
1179 fi
1180
1181 if test "$swscaler" != "no"; then
1182 die "The software scaler is under GPL and --enable-gpl is not specified."
1183 fi
1184 fi
1185
1186 # compute MMX state
1187 if test $mmx = "default"; then
1188 if test $arch = "x86_32" -o $arch = "x86_64"; then
1189 mmx="yes"
1190 else
1191 mmx="no"
1192 fi
1193 fi
1194
1195 test -z "$need_memalign" && need_memalign="$mmx"
1196
1197 #Darwin CC versions
1198 needmdynamicnopic="no"
1199 if test $targetos = Darwin; then
1200 if test -n "`$cc -v 2>&1 | grep xlc`"; then
1201 add_cflags "-qpdf2 -qlanglvl=extc99 -qmaxmem=-1 -qarch=auto -qtune=auto"
1202 else
1203 gcc_version="`$cc -v 2>&1 | grep version | cut -d ' ' -f3-`"
1204 case "$gcc_version" in
1205 *2.95*)
1206 add_cflags "-no-cpp-precomp -pipe"
1207 ;;
1208 *[34].*)
1209 add_cflags "-no-cpp-precomp -pipe -force_cpusubtype_ALL -Wno-sign-compare"
1210 if test "$lshared" = no; then
1211 needmdynamicnopic="yes"
1212 fi
1213 ;;
1214 *)
1215 add_cflags "-no-cpp-precomp -pipe"
1216 if test "$lshared" = no; then
1217 needmdynamicnopic="yes"
1218 fi
1219 ;;
1220 esac
1221 fi
1222 fi
1223
1224 if test $optimize != "no"; then
1225 add_cflags "-fomit-frame-pointer"
1226 fi
1227
1228 # Can only do AltiVec on PowerPC
1229 if test $altivec = "default"; then
1230 if test $arch = "powerpc"; then
1231 altivec="yes"
1232 else
1233 altivec="no"
1234 fi
1235 fi
1236
1237 # Add processor-specific flags
1238 POWERPCMODE="32bits"
1239 if test $cpu != "generic"; then
1240 case $cpu in
1241 601|ppc601|PowerPC601)
1242 add_cflags "-mcpu=601"
1243 if test $altivec = "yes"; then
1244 echo "WARNING: Tuning for PPC601 but AltiVec enabled!";
1245 fi
1246 ;;
1247 603*|ppc603*|PowerPC603*)
1248 add_cflags "-mcpu=603"
1249 if test $altivec = "yes"; then
1250 echo "WARNING: Tuning for PPC603 but AltiVec enabled!";
1251 fi
1252 ;;
1253 604*|ppc604*|PowerPC604*)
1254 add_cflags "-mcpu=604"
1255 if test $altivec = "yes"; then
1256 echo "WARNING: Tuning for PPC604 but AltiVec enabled!";
1257 fi
1258 ;;
1259 G3|g3|75*|ppc75*|PowerPC75*)
1260 add_cflags "-mcpu=750 -mpowerpc-gfxopt"
1261 if test $altivec = "yes"; then
1262 echo "WARNING: Tuning for PPC75x but AltiVec enabled!";
1263 fi
1264 ;;
1265 G4|g4|745*|ppc745*|PowerPC745*)
1266 add_cflags "-mcpu=7450 -mpowerpc-gfxopt"
1267 if test $altivec = "no"; then
1268 echo "WARNING: Tuning for PPC745x but AltiVec disabled!";
1269 fi
1270 ;;
1271 74*|ppc74*|PowerPC74*)
1272 add_cflags "-mcpu=7400 -mpowerpc-gfxopt"
1273 if test $altivec = "no"; then
1274 echo "WARNING: Tuning for PPC74xx but AltiVec disabled!";
1275 fi
1276 ;;
1277 G5|g5|970|ppc970|PowerPC970|power4*|Power4*)
1278 add_cflags "-mcpu=970 -mpowerpc-gfxopt -mpowerpc64"
1279 if test $altivec = "no"; then
1280 echo "WARNING: Tuning for PPC970 but AltiVec disabled!";
1281 fi
1282 POWERPCMODE="64bits"
1283 ;;
1284 # targets that do NOT support conditional mov (cmov)
1285 i[345]86|pentium|pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
1286 add_cflags "-march=$cpu"
1287 cmov="no"
1288 ;;
1289 # targets that do support conditional mov (cmov)
1290 i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2)
1291 add_cflags "-march=$cpu"
1292 cmov="yes"
1293 cmov_is_fast="yes"
1294 ;;
1295 # targets that do support conditional mov but on which it's slow
1296 pentium4|prescott|nocona)
1297 add_cflags "-march=$cpu"
1298 cmov="yes"
1299 cmov_is_fast="no"
1300 ;;
1301 sparc64)
1302 add_cflags "-mcpu=v9"
1303 ;;
1304 *)
1305 echo "WARNING: Unknown CPU \"$cpu\", ignored."
1306 ;;
1307 esac
1308 fi
1309
1310 # make sure we can execute files in $TMPDIR
1311 cat >$TMPE 2>>$logfile <<EOF
1312 #! /bin/sh
1313 EOF
1314 chmod +x $TMPE >>$logfile 2>&1
1315 if ! $TMPE >>$logfile 2>&1; then
1316 cat <<EOF
1317 Unable to create and execute files in $TMPDIR1. Set the TMPDIR environment
1318 variable to another directory and make sure that $TMPDIR1 is not mounted
1319 noexec.
1320 EOF
1321 die "Sanity test failed."
1322 fi
1323 rm $TMPE
1324
1325 # compiler sanity check
1326 check_exec <<EOF
1327 int main(){
1328 return 0;
1329 }
1330 EOF
1331 if test "$?" != 0; then
1332 echo "$cc is unable to create an executable file."
1333 if test -z "$cross_prefix" -a "$cross_compile" = no; then
1334 echo "If $cc is a cross-compiler, use the --cross-compile option."
1335 echo "Only do this if you know what cross compiling means."
1336 fi
1337 die "C compiler test failed."
1338 fi
1339
1340 # check for assembler specific support
1341
1342 if test $arch = "powerpc"; then
1343 check_cc <<EOF && dcbzl=yes
1344 int main(void) {
1345 register long zero = 0;
1346 char data[1024];
1347 asm volatile("dcbzl %0, %1" : : "b" (data), "r" (zero));
1348 return 0;
1349 }
1350 EOF
1351 fi
1352
1353 # check for SIMD availability
1354
1355 # AltiVec flags: The FSF version of GCC differs from the Apple version
1356 if test $arch = "powerpc"; then
1357 if test $altivec = "yes"; then
1358 if test -n "`$cc -v 2>&1 | grep version | grep Apple`"; then
1359 add_cflags "-faltivec"
1360 else
1361 add_cflags "-maltivec -mabi=altivec"
1362 fi
1363 fi
1364 fi
1365
1366 check_header altivec.h
1367
1368 # check if our compiler supports Motorola AltiVec C API
1369 if test $altivec = "yes"; then
1370 if test $altivec_h = "yes"; then
1371 inc_altivec_h="#include <altivec.h>"
1372 else
1373 inc_altivec_h=
1374 fi
1375 check_cc <<EOF || altivec=no
1376 $inc_altivec_h
1377 int main(void) {
1378 vector signed int v1, v2, v3;
1379 v1 = vec_add(v2,v3);
1380 return 0;
1381 }
1382 EOF
1383 fi
1384
1385 # check armv5te instructions support
1386 if test $armv5te = "default" -a $arch = "armv4l"; then
1387 armv5te=no
1388 check_cc <<EOF && armv5te=yes
1389 int main(void) {
1390 __asm__ __volatile__ ("qadd r0, r0, r0");
1391 }
1392 EOF
1393 fi
1394
1395 # check iwmmxt support
1396 if test $iwmmxt = "default" -a $arch = "armv4l"; then
1397 iwmmxt=no
1398 check_cc <<EOF && iwmmxt=yes
1399 int main(void) {
1400 __asm__ __volatile__ ("wunpckelub wr6, wr4");
1401 }
1402 EOF
1403 fi
1404
1405 # mmi only available on mips
1406 if test $mmi = "default"; then
1407 if test $arch = "mips"; then
1408 mmi="yes"
1409 else
1410 mmi="no"
1411 fi
1412 fi
1413
1414 # check if our compiler supports mmi
1415 enabled mmi && check_cc <<EOF || mmi="no"
1416 int main(void) {
1417 __asm__ ("lq \$2, 0(\$2)");
1418 return 0;
1419 }
1420 EOF
1421
1422 # ---
1423 # big/little-endian test
1424 if test "$cross_compile" = "no"; then
1425 check_ld <<EOF || die "endian test failed" && $TMPE && bigendian="yes"
1426 #include <inttypes.h>
1427 int main(int argc, char ** argv){
1428 volatile uint32_t i=0x01234567;
1429 return (*((uint8_t*)(&i))) == 0x67;
1430 }
1431 EOF
1432 else
1433 # programs cannot be launched if cross compiling, so make a static guess
1434 if test "$arch" = "powerpc" -o "$arch" = "mips" ; then
1435 bigendian="yes"
1436 fi
1437 fi
1438
1439 # ---
1440 # check availability of some header files
1441
1442 check_header malloc.h
1443 check_func memalign
1444
1445 if test "$memalign" = "no" -a "$need_memalign" = "yes" -a \
1446 "$memalign_hack" != "yes"; then
1447 die "Error, no memalign() but SSE enabled, disable it or use --enable-memalign-hack."
1448 fi
1449
1450 check_header byteswap.h
1451
1452 check_func inet_aton
1453 check_func localtime_r
1454 enabled zlib && check_lib zlib.h zlibVersion -lz || zlib="no"
1455
1456 # check for some common methods of building with pthread support
1457 # do this before the optional library checks as some of them require pthreads
1458 if enabled pthreads; then
1459 if check_func pthread_create; then
1460 :
1461 elif check_func pthread_create -pthread; then
1462 add_cflags -pthread
1463 add_ldflags -pthread
1464 elif check_func pthread_create -pthreads; then
1465 add_cflags -pthreads
1466 add_ldflags -pthreads
1467 elif ! check_lib pthread.h pthread_create -lpthread; then
1468 die "ERROR: can't find pthreads library"
1469 fi
1470 fi
1471
1472 for thread in pthreads beosthreads os2threads w32threads; do
1473 if enabled $thread; then
1474 if test $thread_type != "no"; then
1475 die "ERROR: Only one thread type must be selected."
1476 else
1477 thread_type="$thread"
1478 fi
1479 fi
1480 done
1481
1482 # these are off by default, so fail if requested and not available
1483 enabled libdts && require libdts dts.h dts_init -ldts -lm
1484 enabled libgsm && require libgsm gsm.h gsm_create -lgsm
1485 enabled libmp3lame && require LAME lame/lame.h lame_init -lmp3lame -lm
1486 enabled libvorbis && require libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbis -lvorbisenc -logg
1487 enabled libogg && require libogg ogg/ogg.h ogg_sync_init -logg
1488 enabled libnut && require libnut libnut.h nut_demuxer_init -lnut
1489 enabled xvid && require XviD xvid.h xvid_global -lxvidcore
1490 enabled x264 && require x264 x264.h x264_encoder_open -lx264
1491 enabled dc1394 && require libdc1394 libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394
1492 enabled mlib && require mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
1493
1494 # Ugh, libfaac uses stdcall calling convention on win32 so we can't use
1495 # the generic test functions
1496 if enabled libfaac; then
1497 save_flags
1498 temp_extralibs -lfaac
1499 check_ld <<EOF && add_extralibs -lfaac || die "ERROR: libfaac not found"
1500 #include <stdint.h>
1501 #include <faac.h>
1502 int main(){
1503 char *id, *cpr;
1504 faacEncGetVersion(&id, &cpr);
1505 return 0;
1506 }
1507 EOF
1508 restore_flags
1509 fi
1510
1511 # Ugh, recent faad2 versions have renamed all functions and #define the
1512 # old names in faad.h. Generic tests won't work.
1513 if enabled libfaad; then
1514 save_flags
1515 temp_extralibs -lfaad
1516 check_ld <<EOF && add_extralibs -lfaad || die "ERROR: libfaad not found"
1517 #include <faad.h>
1518 int main(){
1519 faacDecOpen();
1520 return 0;
1521 }
1522 EOF
1523 restore_flags
1524 fi
1525
1526 # Ugh, avisynth uses WINAPI calls. Generic tests won't work.
1527 if enabled avisynth; then
1528 save_flags
1529 temp_extralibs -lvfw32
1530 check_ld <<EOF && add_extralibs -lvfw32 || die "ERROR: vfw32 not found"
1531 #include <windows.h>
1532 #include <vfw.h>
1533 int main(){
1534 AVIFileInit();
1535 return 0;
1536 }
1537 EOF
1538 restore_flags
1539 fi
1540
1541
1542 # test for lrintf in math.h
1543 check_exec <<EOF && lrintf=yes || lrintf=no
1544 #define _ISOC9X_SOURCE 1
1545 #include <math.h>
1546 int main( void ) { return (lrintf(3.999f) > 0)?0:1; }
1547 EOF
1548
1549 _restrict=
1550 for restrict_keyword in restrict __restrict__ __restrict; do
1551 check_cc <<EOF && _restrict=$restrict_keyword && break
1552 void foo(char * $restrict_keyword p);
1553 EOF
1554 done
1555
1556 # dlopen/dlfcn.h probing
1557
1558 check_header dlfcn.h
1559
1560 if check_func dlopen; then
1561 ldl=
1562 elif check_func dlopen -ldl; then
1563 ldl=-ldl
1564 fi
1565
1566 if test "$vhook" = "default"; then
1567 vhook="$dlopen"
1568 fi
1569
1570 if enabled_any vhook liba52bin libfaadbin; then
1571 add_extralibs $ldl
1572 fi
1573
1574 if test "$targetos" = "CYGWIN" -a "$lstatic" = "yes" ; then
1575 vhook="no"
1576 echo
1577 echo "At the moment vhooks don't work on Cygwin static builds."
1578 echo "Patches welcome."
1579 echo
1580 fi
1581
1582 if enabled vhook; then
1583 check_ldflags -rdynamic
1584 check_ldflags -export-dynamic
1585 fi
1586
1587 if enabled audio_beos; then
1588 add_extralibs "-lmedia -lbe"
1589 fi
1590
1591 ##########################################
1592 # imlib check
1593
1594 temp_extralibs -lImlib2
1595 check_ld <<EOF && imlib2=yes || imlib2=no
1596 #include <X11/Xlib.h>
1597 #include <Imlib2.h>
1598 int main( void ) { return (int) imlib_load_font("foo"); }
1599 EOF
1600 restore_flags
1601
1602 ##########################################
1603 # FreeType check
1604
1605 freetype2=no
1606 if test "x$targetos" != "xBeOS"; then
1607 if (freetype-config --version) >/dev/null 2>&1 ; then
1608 temp_cflags `freetype-config --cflags`
1609 temp_extralibs `freetype-config --libs`
1610 check_ld <<EOF && freetype2=yes
1611 #include <ft2build.h>
1612 int main( void ) { return (int) FT_Init_FreeType(0); }
1613 EOF
1614 restore_flags
1615 fi
1616 fi
1617
1618 ##########################################
1619 # SDL check
1620
1621 sdl_too_old=no
1622 sdl=no
1623 SDL_CONFIG="${cross_prefix}sdl-config"
1624 if ("${SDL_CONFIG}" --version) >/dev/null 2>&1 ; then
1625 temp_cflags `"${SDL_CONFIG}" --cflags`
1626 temp_extralibs `"${SDL_CONFIG}" --libs`
1627 check_ld <<EOF
1628 #include <SDL.h>
1629 #undef main /* We don't want SDL to override our main() */
1630 int main( void ) { return SDL_Init (SDL_INIT_VIDEO); }
1631 EOF
1632 if test $? = 0; then
1633 _sdlversion=`"${SDL_CONFIG}" --version | sed 's/[^0-9]//g'`
1634 if test "$_sdlversion" -lt 121 ; then
1635 sdl_too_old=yes
1636 else
1637 sdl=yes
1638 check_cc <<EOF && sdl_video_size=yes || sdl_video_size=no
1639 #include <SDL.h>
1640 int main(void){
1641 const SDL_VideoInfo *vi = SDL_GetVideoInfo();
1642 int w = vi->current_w;
1643 return 0;
1644 }
1645 EOF
1646 fi
1647 fi
1648 restore_flags
1649 fi
1650
1651 enabled sdl || ffplay=no
1652
1653 ##########################################
1654 # texi2html check
1655
1656 texi2html=no
1657 if (texi2html -version) >/dev/null 2>&1; then
1658 texi2html=yes
1659 fi
1660
1661 ##########################################
1662 # IPv6 check
1663
1664 enabled network && enabled ipv6 && check_ld <<EOF && ipv6=yes || ipv6=no
1665 #include <sys/types.h>
1666 #include <sys/socket.h>
1667 #include <netinet/in.h>
1668 #include <netdb.h>
1669 int main( void ) {
1670 struct sockaddr_storage saddr;
1671 struct ipv6_mreq mreq6;
1672 getaddrinfo(0,0,0,0);
1673 getnameinfo(0,0,0,0,0,0,0);
1674 IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
1675 }
1676 EOF
1677
1678 # check for video4linux2 --- V4L2_PIX_FMT_YUV420
1679 enabled video4linux2 && check_cc <<EOF || video4linux2="no"
1680 #include <sys/time.h>
1681 #include <asm/types.h>
1682 #include <linux/videodev2.h>
1683 int dummy = V4L2_PIX_FMT_YUV420;
1684 struct v4l2_buffer dummy1;
1685 EOF
1686
1687 # check for ioctl_meteor.h, ioctl_bt848.h and alternatives
1688 if enabled bktr; then
1689 check_header dev/bktr/ioctl_meteor.h
1690 check_header dev/bktr/ioctl_bt848.h
1691
1692 check_header machine/ioctl_meteor.h
1693 check_header machine/ioctl_bt848.h
1694
1695 check_header dev/video/meteor/ioctl_meteor.h
1696 check_header dev/video/bktr/ioctl_bt848.h
1697
1698 check_header dev/ic/bt8xx.h
1699 fi
1700
1701 # Deal with the x11 frame grabber
1702 enabled x11grab &&
1703 enabled gpl &&
1704 enabled x11_grab_device_demuxer &&
1705 check_header X11/Xlib.h &&
1706 check_header X11/extensions/XShm.h &&
1707 check_func XOpenDisplay -lX11 &&
1708 check_func XShmCreateImage -lX11 -lXext &&
1709 add_extralibs -lX11 -lXext ||
1710 disable x11_grab_device_demuxer
1711
1712 enabled debug && add_cflags -g
1713
1714 # add some useful compiler flags if supported
1715 check_cflags -Wdeclaration-after-statement
1716 check_cflags -Wall
1717 check_cflags -Wno-switch
1718 check_cflags -Wdisabled-optimization
1719 check_cflags -Wpointer-arith
1720 check_cflags -Wredundant-decls
1721 enabled extrawarnings && check_cflags -Winline
1722
1723 # add some linker flags
1724 check_ldflags $LDLATEFLAGS
1725
1726 # not all compilers support -Os
1727 test "$optimize" = "small" && check_cflags -Os
1728
1729 if enabled optimize; then
1730 if test -n "`$cc -v 2>&1 | grep xlc`"; then
1731 add_cflags "-O5"
1732 add_ldflags "-O5"
1733 else
1734 add_cflags "-O3"
1735 fi
1736 fi
1737
1738 # PIC flags for shared library objects where they are needed
1739 if test "$lshared" = "yes" ; then
1740 # LIBOBJFLAGS may have already been set in the OS configuration
1741 if test -z "$LIBOBJFLAGS" ; then
1742 case "$arch" in
1743 x86_64|ia64|alpha|sparc*) LIBOBJFLAGS="\$(PIC)" ;;
1744 esac
1745 fi
1746 fi
1747
1748 if test "$gprof" = "yes" ; then
1749 add_cflags "-p"
1750 add_ldflags "-p"
1751 fi
1752
1753 VHOOKCFLAGS="-fPIC $CFLAGS"
1754 test "$needmdynamicnopic" = yes && add_cflags -mdynamic-no-pic
1755
1756 # find if .align arg is power-of-two or not
1757 if test $asmalign_pot = "unknown"; then
1758 asmalign_pot="no"
1759 echo 'asm (".align 3");' | check_cc && asmalign_pot="yes"
1760 fi
1761
1762 echo "install prefix $PREFIX"
1763 echo "source path $source_path"
1764 echo "C compiler $cc"
1765 echo "make $make"
1766 echo ".align is power-of-two $asmalign_pot"
1767 echo "ARCH $arch ($cpu)"
1768 if test "$BUILDSUF" != ""; then
1769 echo "build suffix $BUILDSUF"
1770 fi
1771 echo "big-endian $bigendian"
1772 if test $arch = "x86_32" -o $arch = "x86_64"; then
1773 echo "MMX enabled $mmx"
1774 echo "CMOV enabled $cmov"
1775 echo "CMOV is fast $cmov_is_fast"
1776 fi
1777 if test $arch = "armv4l"; then
1778 echo "ARMv5TE enabled $armv5te"
1779 echo "IWMMXT enabled $iwmmxt"
1780 fi
1781 if test $arch = "mips"; then
1782 echo "MMI enabled $mmi"
1783 fi
1784 if test $arch = "powerpc"; then
1785 echo "AltiVec enabled $altivec"
1786 echo "dcbzl available $dcbzl"
1787 fi
1788 echo "gprof enabled $gprof"
1789 echo "debug symbols $debug"
1790 echo "strip symbols $dostrip"
1791 echo "optimize $optimize"
1792 echo "static $lstatic"
1793 echo "shared $lshared"
1794 echo "postprocessing support $pp"
1795 echo "software scaler enabled $swscaler"
1796 echo "video hooking $vhook"
1797 if test "$vhook" = "yes"; then
1798 echo "Imlib2 support $imlib2"
1799 echo "FreeType support $freetype2"
1800 fi
1801 echo "network support $network"
1802 if test "$network" = "yes" ; then
1803 echo "IPv6 support $ipv6"
1804 fi
1805 echo "threading support $thread_type"
1806 echo "SDL support $sdl"
1807 if test $sdl_too_old = "yes"; then
1808 echo "-> Your SDL version is too old - please upgrade to have FFplay/SDL support."
1809 fi
1810 echo "Sun medialib support $mlib"
1811 echo "AVISynth enabled $avisynth"
1812 echo "liba52 support $liba52"
1813 echo "liba52 dlopened $liba52bin"
1814 echo "libdts support $libdts"
1815 echo "libfaac enabled $libfaac"
1816 echo "libfaad enabled $libfaad"
1817 echo "faadbin enabled $libfaadbin"
1818 echo "libgsm enabled $libgsm"
1819 echo "libmp3lame enabled $libmp3lame"
1820 echo "libnut enabled $libnut"
1821 echo "libogg enabled $libogg"
1822 echo "libvorbis enabled $libvorbis"
1823 echo "x264 enabled $x264"
1824 echo "XviD enabled $xvid"
1825 echo "zlib enabled $zlib"
1826 echo "AMR-NB float support $amr_nb"
1827 echo "AMR-NB fixed support $amr_nb_fixed"
1828 echo "AMR-WB float support $amr_wb"
1829 echo "AMR-WB IF2 support $amr_if2"
1830 if test "$gpl" = "no" ; then
1831 echo "License: LGPL"
1832 else
1833 echo "License: GPL"
1834 fi
1835
1836 echo "Creating config.mak and config.h..."
1837
1838 echo "# Automatically generated by configure - do not modify!" > config.mak
1839 echo "/* Automatically generated by configure - do not modify! */" > $TMPH
1840 echo "#define FFMPEG_CONFIGURATION "'"'"$FFMPEG_CONFIGURATION"'"' >> $TMPH
1841
1842 echo "PREFIX=$PREFIX" >> config.mak
1843 echo "prefix=\$(DESTDIR)\${PREFIX}" >> config.mak
1844 echo "libdir=\$(DESTDIR)$libdir" >> config.mak
1845 echo "shlibdir=\$(DESTDIR)$shlibdir" >> config.mak
1846 echo "incdir=\$(DESTDIR)$incdir" >> config.mak
1847 echo "bindir=\$(DESTDIR)$bindir" >> config.mak
1848 echo "mandir=\$(DESTDIR)$mandir" >> config.mak
1849 echo "MAKE=$make" >> config.mak
1850 echo "CC=$cc" >> config.mak
1851 echo "AR=$ar" >> config.mak
1852 echo "RANLIB=$ranlib" >> config.mak
1853 if test "$dostrip" = "yes" ; then
1854 echo "STRIP=$strip" >> config.mak
1855 echo "INSTALLSTRIP=$installstrip" >> config.mak
1856 else
1857 echo "STRIP=echo ignoring strip" >> config.mak
1858 echo "INSTALLSTRIP=" >> config.mak
1859 fi
1860
1861 echo "OPTFLAGS=$CFLAGS" >> config.mak
1862 echo "VHOOKCFLAGS=$VHOOKCFLAGS">>config.mak
1863 echo "LDFLAGS=$LDFLAGS" >> config.mak
1864 echo "LDCONFIG=$LDCONFIG" >> config.mak
1865 echo "FFSERVERLDFLAGS=$FFSERVERLDFLAGS" >> config.mak
1866 echo "SHFLAGS=$SHFLAGS" >> config.mak
1867 echo "VHOOKSHFLAGS=$VHOOKSHFLAGS" >> config.mak
1868 echo "VHOOKLIBS=$VHOOKLIBS" >> config.mak
1869 echo "LIBOBJFLAGS=$LIBOBJFLAGS" >> config.mak
1870 echo "BUILD_STATIC=$lstatic" >> config.mak
1871 echo "BUILDSUF=$BUILDSUF" >> config.mak
1872 echo "LIBPREF=$LIBPREF" >> config.mak
1873 echo "LIBSUF=\${BUILDSUF}$LIBSUF" >> config.mak
1874 if test "$lstatic" = "yes" ; then
1875 echo "LIB=$LIB" >> config.mak
1876 else # Some Make complain if this variable does not exist.
1877 echo "LIB=" >> config.mak
1878 fi
1879 echo "SLIBPREF=$SLIBPREF" >> config.mak
1880 echo "SLIBSUF=\${BUILDSUF}$SLIBSUF" >> config.mak
1881 echo "EXESUF=\${BUILDSUF}$EXESUF" >> config.mak
1882 echo "TARGET_OS=$targetos" >> config.mak
1883
1884 ucarch=`toupper $arch`
1885 echo "TARGET_ARCH_${ucarch}=yes" >> config.mak
1886 echo "#define ARCH_${ucarch} 1" >> $TMPH
1887
1888 # special cases
1889 case "$arch" in
1890 x86_32|x86_64)
1891 echo "TARGET_ARCH_X86=yes" >> config.mak
1892 echo "#define ARCH_X86 1" >> $TMPH
1893 ;;
1894 powerpc)
1895 if test "$POWERPCMODE" = "64bits"; then
1896 echo "#define POWERPC_MODE_64BITS 1" >> $TMPH
1897 fi
1898 if test "$powerpc_perf" = "yes"; then
1899 echo "#define POWERPC_PERFORMANCE_REPORT 1" >> $TMPH
1900 fi
1901 ;;
1902 sparc64)
1903 echo "TARGET_ARCH_SPARC=yes" >> config.mak
1904 echo "#define ARCH_SPARC 1" >> $TMPH
1905 ;;
1906 esac
1907
1908 if test "$bigendian" = "yes" ; then
1909 echo "WORDS_BIGENDIAN=yes" >> config.mak
1910 echo "#define WORDS_BIGENDIAN 1" >> $TMPH
1911 fi
1912 if test "$mmx" = "yes" ; then
1913 echo "TARGET_MMX=yes" >> config.mak
1914 echo "#define HAVE_MMX 1" >> $TMPH
1915 echo "#define __CPU__ 586" >> $TMPH
1916 fi
1917 if test "$cmov" = "yes" ; then
1918 echo "TARGET_CMOV=yes" >> config.mak
1919 echo "#define HAVE_CMOV 1" >> $TMPH
1920 fi
1921 if test "$cmov_is_fast" = "yes" ; then
1922 echo "TARGET_CMOV_IS_FAST=yes" >> config.mak
1923 echo "#define CMOV_IS_FAST 1" >> $TMPH
1924 fi
1925 if test "$armv5te" = "yes" ; then
1926 echo "TARGET_ARMV5TE=yes" >> config.mak
1927 echo "#define HAVE_ARMV5TE 1" >> $TMPH
1928 fi
1929 if test "$iwmmxt" = "yes" ; then
1930 echo "TARGET_IWMMXT=yes" >> config.mak
1931 echo "#define HAVE_IWMMXT 1" >> $TMPH
1932 fi
1933 if test "$mmi" = "yes" ; then
1934 echo "TARGET_MMI=yes" >> config.mak
1935 echo "#define HAVE_MMI 1" >> $TMPH
1936 fi
1937
1938 if test "$altivec" = "yes" ; then
1939 echo "TARGET_ALTIVEC=yes" >> config.mak
1940 echo "#define HAVE_ALTIVEC 1" >> $TMPH
1941 fi
1942
1943 if test "$sdl" = "yes" ; then
1944 echo "SDL_LIBS=`"${SDL_CONFIG}" --libs`" >> config.mak
1945 echo "SDL_CFLAGS=`"${SDL_CONFIG}" --cflags`" >> config.mak
1946 fi
1947 if test "$texi2html" = "yes"; then
1948 echo "BUILD_DOC=yes" >> config.mak
1949 fi
1950
1951 sws_version=`grep '#define LIBSWSCALE_VERSION ' "$source_path/libswscale/swscale.h" | sed 's/[^0-9\.]//g'`
1952 pp_version=`grep '#define LIBPOSTPROC_VERSION ' "$source_path/libpostproc/postprocess.h" | sed 's/[^0-9\.]//g'`
1953 lavc_version=`grep '#define LIBAVCODEC_VERSION ' "$source_path/libavcodec/avcodec.h" | sed 's/[^0-9\.]//g'`
1954 lavf_version=`grep '#define LIBAVFORMAT_VERSION ' "$source_path/libavformat/avformat.h" | sed 's/[^0-9\.]//g'`
1955 lavu_version=`grep '#define LIBAVUTIL_VERSION ' "$source_path/libavutil/avutil.h" | sed 's/[^0-9\.]//g'`
1956
1957
1958
1959 if test "$lshared" = "yes" ; then
1960 echo "BUILD_SHARED=yes" >> config.mak
1961 echo "PIC=-fPIC -DPIC" >> config.mak
1962 echo "SPPMAJOR=${pp_version%%.*}" >> config.mak
1963 echo "SPPVERSION=$pp_version" >> config.mak
1964 echo "LAVCMAJOR=${lavc_version%%.*}" >> config.mak
1965 echo "LAVCVERSION=$lavc_version" >> config.mak
1966 echo "LAVFMAJOR=${lavf_version%%.*}" >> config.mak
1967 echo "LAVFVERSION=$lavf_version" >> config.mak
1968 echo "LAVUMAJOR=${lavu_version%%.*}" >> config.mak
1969 echo "LAVUVERSION=$lavu_version" >> config.mak
1970 echo "SWSMAJOR=${sws_version%%.*}" >> config.mak
1971 echo "SWSVERSION=$sws_version" >> config.mak
1972 echo "SLIBNAME=${SLIBNAME}" >> config.mak
1973 echo "SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}" >> config.mak
1974 echo "SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}" >> config.mak
1975 echo "SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}" >> config.mak
1976 echo "SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}" >> config.mak
1977 fi
1978 echo "LIB_INSTALL_EXTRA_CMD=${LIB_INSTALL_EXTRA_CMD}" >> config.mak
1979 echo "EXTRALIBS=$extralibs" >> config.mak
1980
1981 enabled_any $ENCODER_LIST && enable encoders
1982 enabled_any $DECODER_LIST && enable decoders
1983 enabled_any $MUXER_LIST && enable muxers
1984 enabled_any $DEMUXER_LIST && enable demuxers
1985
1986 enabled_any pthreads beosthreads os2threads w32threads && enable threads
1987
1988 print_config HAVE_ $TMPH config.mak $HAVE_LIST
1989 print_config CONFIG_ $TMPH config.mak $CONFIG_LIST
1990
1991 if test "$targetos" = "Darwin"; then
1992 echo "#define CONFIG_DARWIN 1" >> $TMPH
1993 fi
1994
1995 echo "#define restrict $_restrict" >> $TMPH
1996
1997 if test "$optimize" = "small"; then
1998 echo "#define always_inline" >> $TMPH
1999 echo "#define CONFIG_SMALL 1" >> $TMPH
2000 fi
2001
2002 echo "SRC_PATH=\"$source_path\"" >> config.mak
2003 echo "SRC_PATH_BARE=$source_path" >> config.mak
2004 echo "BUILD_ROOT=\"$PWD\"" >> config.mak
2005
2006 if test "$amr_if2" = "yes" ; then
2007 echo "AMR_CFLAGS=-DIF2=1" >> config.mak
2008 fi
2009
2010 # Apparently it's not possible to portably echo a backslash.
2011 if test "$asmalign_pot" = "yes" ; then
2012 printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH
2013 else
2014 printf '#define ASMALIGN(ZEROBITS) ".align 1<<" #ZEROBITS "\\n\\t"\n' >> $TMPH
2015 fi
2016
2017
2018 for codec in $DECODER_LIST $ENCODER_LIST $PARSER_LIST $DEMUXER_LIST $MUXER_LIST; do
2019 ucname="`toupper $codec`"
2020 config_name="CONFIG_$ucname"
2021 enabled_name="ENABLE_$ucname"
2022 if enabled $codec; then
2023 echo "#define $config_name 1" >> $TMPH
2024 echo "#define $enabled_name 1" >> $TMPH
2025 echo "$config_name=yes" >> config.mak
2026 else
2027 echo "#define $enabled_name 0" >> $TMPH
2028 fi
2029 done
2030
2031 # Do not overwrite config.h if unchanged to avoid superfluous rebuilds.
2032 if ! cmp -s $TMPH config.h; then
2033 mv -f $TMPH config.h
2034 else
2035 echo "config.h is unchanged"
2036 fi
2037
2038 rm -f $TMPO $TMPC $TMPE $TMPS $TMPH
2039
2040 # build tree in object directory if source path is different from current one
2041 if test "$source_path_used" = "yes" ; then
2042 DIRS="\
2043 doc \
2044 libavformat \
2045 libavcodec \
2046 libavcodec/alpha \
2047 libavcodec/armv4l \
2048 libavcodec/bfin \
2049 libavcodec/i386 \
2050 libavcodec/sparc \
2051 libavcodec/mlib \
2052 libavcodec/ppc \
2053 libavcodec/liba52 \
2054 libavcodec/amr \
2055 libavcodec/amr_float \
2056 libavcodec/amrwb_float \
2057 libpostproc \
2058 libavutil \
2059 libswscale \
2060 tests \
2061 vhook \
2062 "
2063 FILES="\
2064 Makefile \
2065 common.mak \
2066 libavformat/Makefile \
2067 libavcodec/Makefile \
2068 libpostproc/Makefile \
2069 libavutil/Makefile \
2070 libswscale/Makefile \
2071 tests/Makefile \
2072 vhook/Makefile \
2073 doc/Makefile \
2074 doc/texi2pod.pl \
2075 "
2076 for dir in $DIRS ; do
2077 mkdir -p $dir
2078 done
2079 for f in $FILES ; do
2080 ln -sf "$source_path/$f" $f
2081 done
2082 fi
2083
2084
2085 # build pkg-config files
2086 # FIXME: libdir and includedir are hardcoded and may differ from the real path.
2087
2088 pkgconfig_generate(){
2089 name=$1
2090 comment=$2
2091 version=$3
2092 libs=$4
2093 requires=$5
2094 include=$6
2095 cat <<EOF >$name.pc
2096 prefix=$PREFIX
2097 exec_prefix=\${prefix}
2098 libdir=\${exec_prefix}/lib
2099 includedir=\${prefix}/include
2100
2101 Name: $name
2102 Description: $comment
2103 Version: $version
2104 Requires: $requires
2105 Conflicts:
2106 Libs: -L\${libdir} $libs
2107 Cflags: -I\${includedir} -I\${includedir}/$include
2108 EOF
2109 }
2110
2111 pkgconfig_generate_uninstalled(){
2112 name=$1
2113 shortname=${name#lib}
2114 comment=$2
2115 version=$3
2116 libs=$4
2117 requires=$5
2118 cat <<EOF >$name-uninstalled.pc
2119 prefix=
2120 exec_prefix=
2121 libdir=\${pcfiledir}/$name
2122 includedir=\${pcfiledir}/$name
2123
2124 Name: $name
2125 Description: $comment
2126 Version: $version
2127 Requires: $requires
2128 Conflicts:
2129 Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
2130 Cflags: -I\${includedir}
2131 EOF
2132 }
2133
2134 pkgconfig_generate libavutil "FFmpeg utility library" "$lavu_version" -lavutil "" ffmpeg
2135 pkgconfig_generate_uninstalled libavutil "FFmpeg utility library" "$lavu_version"
2136
2137 pkgconfig_generate libavcodec "FFmpeg codec library" "$lavc_version" "-lavcodec $extralibs" "$pkg_requires libavutil = $lavu_version" ffmpeg
2138 pkgconfig_generate_uninstalled libavcodec "FFmpeg codec library" "$lavc_version" "$extralibs" "$pkg_requires libavutil = $lavu_version"
2139
2140 pkgconfig_generate libavformat "FFmpeg container format library" "$lavf_version" "-lavformat $extralibs" "$pkg_requires libavcodec = $lavc_version" ffmpeg
2141 pkgconfig_generate_uninstalled libavformat "FFmpeg container format library" "$lavf_version" "$extralibs" "$pkg_requires libavcodec = $lavc_version"
2142
2143 if test "$pp" = "yes"; then
2144 pkgconfig_generate libpostproc "FFmpeg post processing library" "$pp_version" -lpostproc "" postproc
2145 pkgconfig_generate_uninstalled libpostproc "FFmpeg post processing library" "$pp_version"
2146 fi
2147
2148 if test "$swscaler" != "no"; then
2149 pkgconfig_generate libswscale "FFmpeg image rescaling library" "$sws_version" "-lswscale" "libavutil = $lavu_version" swscale
2150 pkgconfig_generate_uninstalled libswscale "FFmpeg image rescaling library" "$sws_version" "" "libavutil = $lavu_version"
2151 else
2152 pkgconfig_generate libswscale "FFmpeg image rescaling library" "$sws_version" "" "$pkg_requires libavcodec = $lavc_version" swscale
2153 pkgconfig_generate_uninstalled libswscale "FFmpeg image rescaling library" "$sws_version" "" "$pkg_requires libavcodec = $lavc_version"
2154 apply libswscale.pc sed s/^Libs:.*$/Libs:/
2155 apply libswscale-uninstalled.pc sed s/^Libs:.*$/Libs:/
2156 fi