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