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