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