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