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