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