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