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