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