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