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