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