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