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