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