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