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