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