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