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