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