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