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