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