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