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