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