Remove duplicate line.
[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"
5e49e762 756SHFLAGS="-dynamiclib -Wl,-single_module -Wl,-install_name,\$(shlibdir)/\$(SLIBNAME),-current_version,\$(SPPVERSION),-compatibility_version,\$(SPPVERSION) -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)"
a77caa4d 1095 SHFLAGS="-shared -Wl,--output-def,\$(@:${SLIBSUF}=.def),--out-implib,lib\$(SLIBNAME:\$(SLIBSUF)=.dll.a) -Wl,--enable-runtime-pseudo-reloc"
e67bcdd9
DB
1096fi
1097
28d8e661
DB
1098# Combine FFLDFLAGS and the LDFLAGS environment variable.
1099LDFLAGS="$FFLDFLAGS $LDFLAGS"
e89b8b0a 1100
fac252f9 1101test -n "$cross_prefix" && cross_compile=yes
1ea46bed
MR
1102cc="${cross_prefix}${cc}"
1103ar="${cross_prefix}${ar}"
1104ranlib="${cross_prefix}${ranlib}"
1105strip="${cross_prefix}${strip}"
1106
320d060a
DB
1107# we need to build at least one lib type
1108if test "$lstatic" = "no" && test "$lshared" = "no" ; then
1109 cat <<EOF
1110At least one library type must be built.
1111Specify --enable-static to build the static libraries or --enable-shared to
1112build the shared libraries as well. To only build the shared libraries specify
1113--disable-static in addition to --enable-shared.
1114EOF
1115 exit 1;
1116fi
1117
be74741c 1118if test "$libvorbis" = "yes" ; then
9146ca37 1119 if test "$libogg" = "no"; then
29799f8b 1120 echo "libogg must be enabled to enable Vorbis."
5c5dea3f 1121 fail="yes"
5c5dea3f
NB
1122 fi
1123fi
1124
b2e3c528 1125if test "$gpl" != "yes"; then
ba64106a 1126 if test "$pp" != "no"; then
29799f8b 1127 echo "The Postprocessing code is under GPL and --enable-gpl is not specified."
b2e3c528
MN
1128 fail="yes"
1129 fi
1130
1131 if test "$a52" != "no" -o "$a52bin" != "no"; then
29799f8b 1132 echo "liba52 is under GPL and --enable-gpl is not specified."
b2e3c528
MN
1133 fail="yes"
1134 fi
23c99253 1135
1ddadfa9 1136 if test "$xvid" != "no"; then
29799f8b 1137 echo "libxvidcore is under GPL and --enable-gpl is not specified."
1ddadfa9
AT
1138 fail="yes"
1139 fi
1140
6662ec29 1141 if test "$x264" != "no"; then
29799f8b 1142 echo "x264 is under GPL and --enable-gpl is not specified."
6662ec29
MN
1143 fail="yes"
1144 fi
1145
23c99253 1146 if test "$dts" != "no"; then
29799f8b 1147 echo "libdts is under GPL and --enable-gpl is not specified."
23c99253
MN
1148 fail="yes"
1149 fi
115329f1 1150
b2e3c528 1151 if test "$faad" != "no" -o "$faadbin" != "no"; then
dcd479c0
MR
1152 if check_header faad.h; then
1153 check_cc << EOF
b2e3c528
MN
1154 #include <faad.h>
1155 #ifndef FAAD2_VERSION
1156 ok faad1
1157 #endif
1158 int main( void ) { return 0; }
1159EOF
dcd479c0 1160 if test $? = 0 ; then
29799f8b 1161 echo "FAAD2 is under GPL and --enable-gpl is not specified."
b2e3c528
MN
1162 fail="yes"
1163 fi
1164 else
1165 faad="no"
1166 faadbin="no"
29799f8b 1167 echo "FAAD test failed."
b2e3c528
MN
1168 fi
1169 fi
56a059ac
DB
1170
1171 if test "$x11grab" != "no"; then
1172 echo "The X11 grabber is under GPL and --enable-gpl is not specified."
1173 fail="yes"
1174 fi
ebb810d9 1175fi
b2e3c528 1176
ebb810d9
RP
1177if test "$fail" = "yes"; then
1178 exit 1
b2e3c528
MN
1179fi
1180
29799f8b 1181# compute MMX state
0f3cb305 1182if test $mmx = "default"; then
419b8784 1183 if test $arch = "x86_32" -o $arch = "x86_64"; then
0f3cb305
FB
1184 mmx="yes"
1185 else
1186 mmx="no"
1187 fi
1188fi
1189
5d323602
MR
1190test -z "$need_memalign" && need_memalign="$mmx"
1191
cf9d24ad 1192#Darwin CC versions
75388c74 1193needmdynamicnopic="no"
cf9d24ad 1194if test $targetos = Darwin; then
b2924696 1195 if test -n "`$cc -v 2>&1 | grep xlc`"; then
30a3e5d4 1196 add_cflags "-qpdf2 -qlanglvl=extc99 -qmaxmem=-1 -qarch=auto -qtune=auto"
cf9d24ad 1197 else
bb270c08
DB
1198 gcc_version="`$cc -v 2>&1 | grep version | cut -d ' ' -f3-`"
1199 case "$gcc_version" in
1200 *2.95*)
30a3e5d4 1201 add_cflags "-no-cpp-precomp -pipe"
bb270c08
DB
1202 ;;
1203 *[34].*)
30a3e5d4 1204 add_cflags "-no-cpp-precomp -pipe -force_cpusubtype_ALL -Wno-sign-compare"
bb270c08
DB
1205 if test "$lshared" = no; then
1206 needmdynamicnopic="yes"
1207 fi
1208 ;;
1209 *)
30a3e5d4 1210 add_cflags "-no-cpp-precomp -pipe"
bb270c08
DB
1211 if test "$lshared" = no; then
1212 needmdynamicnopic="yes"
1213 fi
1214 ;;
1215 esac
cf9d24ad 1216 fi
2a1a6b64
MN
1217fi
1218
1219if test $optimize != "no"; then
1220 add_cflags "-fomit-frame-pointer"
cf9d24ad
DC
1221fi
1222
ab6c65f6
BF
1223# Can only do AltiVec on PowerPC
1224if test $altivec = "default"; then
cc6a90dd 1225 if test $arch = "powerpc"; then
ab6c65f6
BF
1226 altivec="yes"
1227 else
1228 altivec="no"
1229 fi
1230fi
1231
a4adb608 1232# Add processor-specific flags
9007f514 1233POWERPCMODE="32bits"
38d0a8aa
GP
1234if test $cpu != "generic"; then
1235 case $cpu in
bb270c08 1236 601|ppc601|PowerPC601)
1c5d830c 1237 add_cflags "-mcpu=601"
bb270c08
DB
1238 if test $altivec = "yes"; then
1239 echo "WARNING: Tuning for PPC601 but AltiVec enabled!";
1240 fi
bb270c08
DB
1241 ;;
1242 603*|ppc603*|PowerPC603*)
1c5d830c 1243 add_cflags "-mcpu=603"
bb270c08
DB
1244 if test $altivec = "yes"; then
1245 echo "WARNING: Tuning for PPC603 but AltiVec enabled!";
1246 fi
bb270c08
DB
1247 ;;
1248 604*|ppc604*|PowerPC604*)
1c5d830c 1249 add_cflags "-mcpu=604"
bb270c08
DB
1250 if test $altivec = "yes"; then
1251 echo "WARNING: Tuning for PPC604 but AltiVec enabled!";
1252 fi
bb270c08
DB
1253 ;;
1254 G3|g3|75*|ppc75*|PowerPC75*)
1c5d830c 1255 add_cflags "-mcpu=750 -mpowerpc-gfxopt"
bb270c08
DB
1256 if test $altivec = "yes"; then
1257 echo "WARNING: Tuning for PPC75x but AltiVec enabled!";
1258 fi
bb270c08
DB
1259 ;;
1260 G4|g4|745*|ppc745*|PowerPC745*)
1c5d830c 1261 add_cflags "-mcpu=7450 -mpowerpc-gfxopt"
bb270c08
DB
1262 if test $altivec = "no"; then
1263 echo "WARNING: Tuning for PPC745x but AltiVec disabled!";
1264 fi
bb270c08
DB
1265 ;;
1266 74*|ppc74*|PowerPC74*)
1c5d830c 1267 add_cflags "-mcpu=7400 -mpowerpc-gfxopt"
bb270c08
DB
1268 if test $altivec = "no"; then
1269 echo "WARNING: Tuning for PPC74xx but AltiVec disabled!";
1270 fi
bb270c08
DB
1271 ;;
1272 G5|g5|970|ppc970|PowerPC970|power4*|Power4*)
1c5d830c 1273 add_cflags "-mcpu=970 -mpowerpc-gfxopt -mpowerpc64"
bb270c08
DB
1274 if test $altivec = "no"; then
1275 echo "WARNING: Tuning for PPC970 but AltiVec disabled!";
1276 fi
9007f514 1277 POWERPCMODE="64bits"
bb270c08 1278 ;;
e7768fc5
GP
1279 # targets that do NOT support conditional mov (cmov)
1280 i[345]86|pentium|pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
38d0a8aa 1281 add_cflags "-march=$cpu"
e7768fc5
GP
1282 cmov="no"
1283 ;;
1284 # targets that do support conditional mov (cmov)
94e4c3a3 1285 i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx)
e7768fc5 1286 add_cflags "-march=$cpu"
4c8d81fa 1287 cmov="yes"
94e4c3a3
GP
1288 cmov_is_fast="yes"
1289 ;;
1290 # targets that do support conditional mov but on which it's slow
1291 pentium4|prescott|nocona)
1292 add_cflags "-march=$cpu"
1293 cmov="yes"
1294 cmov_is_fast="no"
bb270c08 1295 ;;
d7b34d08 1296 sparc64)
1c5d830c 1297 add_cflags "-mcpu=v9"
d7b34d08 1298 ;;
bb270c08 1299 *)
38d0a8aa 1300 echo "WARNING: Unknown CPU \"$cpu\", ignored."
bb270c08 1301 ;;
a4adb608
MN
1302 esac
1303fi
1304
be0d52ab
MR
1305# make sure we can execute files in $TMPDIR
1306cat >$TMPE 2>>$logfile <<EOF
1307#! /bin/sh
1308EOF
1309chmod +x $TMPE >>$logfile 2>&1
1310if ! $TMPE >>$logfile 2>&1; then
1311 cat <<EOF
1312Unable to create and execute files in $TMPDIR1. Set the TMPDIR environment
68300911
DB
1313variable to another directory and make sure that $TMPDIR1 is not mounted
1314noexec.
be0d52ab
MR
1315EOF
1316 die "Sanity test failed."
1317fi
0244f743 1318rm $TMPE
be0d52ab 1319
1a268acc
MR
1320# compiler sanity check
1321check_exec <<EOF
1322int main(){
1323 return 0;
1324}
1325EOF
1326if test "$?" != 0; then
1327 echo "$cc is unable to create an executable file."
1328 if test -z "$cross_prefix" -a "$cross_compile" = no; then
1329 echo "If $cc is a cross-compiler, use the --cross-compile option."
c7ae6345 1330 echo "Only do this if you know what cross compiling means."
1a268acc
MR
1331 fi
1332 die "C compiler test failed."
1333fi
1334
87ea51e0
LB
1335# check for assembler specific support
1336
cc6a90dd 1337if test $arch = "powerpc"; then
87ea51e0
LB
1338check_cc <<EOF && dcbzl=yes
1339int main(void) {
1340 register long zero = 0;
1341 char data[1024];
1342 asm volatile("dcbzl %0, %1" : : "b" (data), "r" (zero));
1343return 0;
1344}
1345EOF
1346fi
1347
57bd82d4
MR
1348# check for SIMD availability
1349
115329f1 1350# AltiVec flags: The FSF version of GCC differs from the Apple version
cc6a90dd 1351if test $arch = "powerpc"; then
b6e52719 1352 if test $altivec = "yes"; then
b2924696 1353 if test -n "`$cc -v 2>&1 | grep version | grep Apple`"; then
30a3e5d4 1354 add_cflags "-faltivec"
b6e52719 1355 else
30a3e5d4 1356 add_cflags "-maltivec -mabi=altivec"
b6e52719
MD
1357 fi
1358 fi
1359fi
1360
0701ca7f 1361check_header altivec.h
a9a07762 1362
29799f8b 1363# check if our compiler supports Motorola AltiVec C API
ab6c65f6 1364if test $altivec = "yes"; then
6e7a01e4 1365 if test $altivec_h = "yes"; then
f25fc9b1
MR
1366 inc_altivec_h="#include <altivec.h>"
1367 else
1368 inc_altivec_h=
1369 fi
1370 check_cc <<EOF || altivec=no
dcd479c0 1371$inc_altivec_h
a9a07762
MN
1372int main(void) {
1373 vector signed int v1, v2, v3;
1374 v1 = vec_add(v2,v3);
1375 return 0;
1376}
1377EOF
1378fi
ab6c65f6 1379
854fdb51 1380# check armv5te instructions support
cc6a90dd 1381if test $armv5te = "default" -a $arch = "armv4l"; then
854fdb51
MR
1382 armv5te=no
1383 check_cc <<EOF && armv5te=yes
1384 int main(void) {
1385 __asm__ __volatile__ ("qadd r0, r0, r0");
1386 }
1387EOF
1388fi
1389
1390# check iwmmxt support
cc6a90dd 1391if test $iwmmxt = "default" -a $arch = "armv4l"; then
854fdb51
MR
1392 iwmmxt=no
1393 check_cc <<EOF && iwmmxt=yes
1394 int main(void) {
1395 __asm__ __volatile__ ("wunpckelub wr6, wr4");
1396 }
1397EOF
1398fi
1399
29799f8b 1400# mmi only available on mips
d46aba26 1401if test $mmi = "default"; then
cc6a90dd 1402 if test $arch = "mips"; then
d46aba26
LS
1403 mmi="yes"
1404 else
1405 mmi="no"
1406 fi
1407fi
1408
29799f8b 1409# check if our compiler supports mmi
57bd82d4 1410enabled mmi && check_cc <<EOF || mmi="no"
d46aba26
LS
1411int main(void) {
1412 __asm__ ("lq \$2, 0(\$2)");
1413 return 0;
1414}
1415EOF
57bd82d4 1416
57bd82d4
MR
1417# ---
1418# big/little-endian test
fac252f9 1419if test "$cross_compile" = "no"; then
57bd82d4 1420 check_ld <<EOF || die "endian test failed" && $TMPE && bigendian="yes"
a3999908
MN
1421#include <inttypes.h>
1422int main(int argc, char ** argv){
bb270c08
DB
1423 volatile uint32_t i=0x01234567;
1424 return (*((uint8_t*)(&i))) == 0x67;
a3999908
MN
1425}
1426EOF
487a54d7 1427else
f25fc9b1 1428 # programs cannot be launched if cross compiling, so make a static guess
cc6a90dd 1429 if test "$arch" = "powerpc" -o "$arch" = "mips" ; then
f25fc9b1
MR
1430 bigendian="yes"
1431 fi
487a54d7
FB
1432fi
1433
a3999908 1434# ---
3d204385
NK
1435# check availability of some header files
1436
0701ca7f
MR
1437check_header malloc.h
1438check_func memalign
3d204385 1439
5d323602
MR
1440if test "$memalign" = "no" -a "$need_memalign" = "yes" -a \
1441 "$memalign_hack" != "yes"; then
57bd82d4 1442 die "Error, no memalign() but SSE enabled, disable it or use --enable-memalign-hack."
8bf5d58f
MN
1443fi
1444
0701ca7f 1445check_header byteswap.h
47d23bbf 1446
0701ca7f
MR
1447check_func inet_aton
1448check_func localtime_r
57bd82d4 1449enabled zlib && check_lib zlib.h zlibVersion -lz || zlib="no"
57bd82d4
MR
1450
1451# check for some common methods of building with pthread support
1452# do this before the optional library checks as some of them require pthreads
1453if enabled pthreads; then
9e7fd101
MR
1454 if check_func pthread_create; then
1455 :
1456 elif check_func pthread_create -pthread; then
1457 add_cflags -pthread
1458 add_ldflags -pthread
1459 elif check_func pthread_create -pthreads; then
1460 add_cflags -pthreads
1461 add_ldflags -pthreads
1462 elif ! check_lib pthread.h pthread_create -lpthread; then
1463 die "ERROR: can't find pthreads library"
1464 fi
57bd82d4
MR
1465fi
1466
1467# these are off by default, so fail if requested and not available
4cbed916 1468enabled dts && require libdts dts.h dts_init -ldts -lm
57bd82d4 1469enabled libgsm && require libgsm gsm.h gsm_create -lgsm
4cbed916 1470enabled mp3lame && require LAME lame/lame.h lame_init -lmp3lame -lm
be74741c 1471enabled libvorbis && require libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbis -lvorbisenc -logg
aedf11f8 1472enabled libogg && require libogg ogg/ogg.h ogg_sync_init -logg
4d8aa1c3 1473enabled libnut && require libnut libnut.h nut_demuxer_init -lnut
57bd82d4
MR
1474enabled xvid && require XviD xvid.h xvid_global -lxvidcore
1475enabled x264 && require x264 x264.h x264_encoder_open -lx264
1476enabled dc1394 && require libdc1394 libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394
bde24d6e 1477enabled mlib && require mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
e0f80bd7 1478
3b9bee88
MR
1479# Ugh, faac uses stdcall calling convention on win32 so we can't use
1480# the generic test functions
1481if enabled faac; then
1482 save_flags
1483 temp_extralibs -lfaac
1484 check_ld <<EOF && add_extralibs -lfaac || die "ERROR: libfaac not found"
1485#include <stdint.h>
1486#include <faac.h>
1487int main(){
1488 char *id, *cpr;
1489 faacEncGetVersion(&id, &cpr);
1490 return 0;
1491}
1492EOF
1493 restore_flags
1494fi
1495
87f1c97e
MR
1496# Ugh, recent faad2 versions have renamed all functions and #define the
1497# old names in faad.h. Generic tests won't work.
1498if enabled faad; then
1499 save_flags
1500 temp_extralibs -lfaad
1501 check_ld <<EOF && add_extralibs -lfaad || die "ERROR: libfaad not found"
1502#include <faad.h>
1503int main(){
1504 faacDecOpen();
1505 return 0;
1506}
1507EOF
1508 restore_flags
1509fi
1510
8ac17293
SH
1511# Ugh, avisynth uses WINAPI calls. Generic tests won't work.
1512if enabled avisynth; then
1513 save_flags
1514 temp_extralibs -lvfw32
1515 check_ld <<EOF && add_extralibs -lvfw32 || die "ERROR: vfw32 not found"
1516#include <windows.h>
1517#include <vfw.h>
1518int main(){
1519 AVIFileInit();
1520 return 0;
1521}
1522EOF
1523 restore_flags
1524fi
1525
1526
95e2ce4a 1527# test for lrintf in math.h
fc2b267f 1528check_exec <<EOF && lrintf=yes || lrintf=no
95e2ce4a
MN
1529#define _ISOC9X_SOURCE 1
1530#include <math.h>
1531int main( void ) { return (lrintf(3.999f) > 0)?0:1; }
1532EOF
1533
c13e1abd
FH
1534_restrict=
1535for restrict_keyword in restrict __restrict__ __restrict; do
57bd82d4 1536 check_cc <<EOF && _restrict=$restrict_keyword && break
dcd479c0
MR
1537void foo(char * $restrict_keyword p);
1538EOF
c13e1abd
FH
1539done
1540
a8721c09
FB
1541# dlopen/dlfcn.h probing
1542
0701ca7f 1543check_header dlfcn.h
a8721c09 1544
dcd479c0 1545if check_func dlopen; then
dcd479c0 1546 ldl=
0701ca7f
MR
1547elif check_func dlopen -ldl; then
1548 ldl=-ldl
a8721c09
FB
1549fi
1550
f25fc9b1
MR
1551if test "$vhook" = "default"; then
1552 vhook="$dlopen"
a8721c09
FB
1553fi
1554
22df6d18 1555if enabled_any vhook a52bin faadbin; then
57bd82d4 1556 add_extralibs $ldl
bfd2edeb
MN
1557fi
1558
fbb9d104
VP
1559if test "$targetos" = "CYGWIN" -a "$lstatic" = "yes" ; then
1560 vhook="no"
1561 echo
1562 echo "At the moment vhooks don't work on Cygwin static builds."
1563 echo "Patches welcome."
1564 echo
1565fi
1566
8d923001
MR
1567if enabled vhook; then
1568 check_ldflags -rdynamic
1569 check_ldflags -export-dynamic
1570fi
bfd2edeb 1571
9464f2b8
DB
1572if enabled audio_beos; then
1573 add_extralibs "-lmedia -lbe"
1574fi
1575
a86b921c 1576##########################################
29799f8b 1577# imlib check
a86b921c 1578
dcd479c0
MR
1579temp_extralibs -lImlib2
1580check_ld <<EOF && imlib2=yes || imlib2=no
a8721c09
FB
1581#include <X11/Xlib.h>
1582#include <Imlib2.h>
1583int main( void ) { return (int) imlib_load_font("foo"); }
1584EOF
dcd479c0 1585restore_flags
52b41d7f 1586
a86b921c 1587##########################################
29799f8b 1588# FreeType check
a86b921c 1589
04511d53 1590freetype2=no
e2a5fd20 1591if test "x$targetos" != "xBeOS"; then
e2a3cd59 1592 if (freetype-config --version) >/dev/null 2>&1 ; then
dcd479c0
MR
1593 temp_cflags `freetype-config --cflags`
1594 temp_extralibs `freetype-config --libs`
1595 check_ld <<EOF && freetype2=yes
1596#include <ft2build.h>
1597int main( void ) { return (int) FT_Init_FreeType(0); }
1598EOF
1599 restore_flags
dee076fc 1600 fi
04511d53
PG
1601fi
1602
a86b921c 1603##########################################
29799f8b 1604# SDL check
a86b921c 1605
a86b921c
FB
1606sdl_too_old=no
1607sdl=no
6a1a892f
FD
1608SDL_CONFIG="${cross_prefix}sdl-config"
1609if ("${SDL_CONFIG}" --version) >/dev/null 2>&1 ; then
dcd479c0
MR
1610 temp_cflags `"${SDL_CONFIG}" --cflags`
1611 temp_extralibs `"${SDL_CONFIG}" --libs`
1612 check_ld <<EOF
1613#include <SDL.h>
1614#undef main /* We don't want SDL to override our main() */
1615int main( void ) { return SDL_Init (SDL_INIT_VIDEO); }
1616EOF
dcd479c0
MR
1617 if test $? = 0; then
1618 _sdlversion=`"${SDL_CONFIG}" --version | sed 's/[^0-9]//g'`
29f3b38a 1619 if test "$_sdlversion" -lt 121 ; then
dcd479c0
MR
1620 sdl_too_old=yes
1621 else
1622 sdl=yes
29f3b38a
MR
1623 check_cc <<EOF && sdl_video_size=yes || sdl_video_size=no
1624#include <SDL.h>
1625int main(void){
1626 const SDL_VideoInfo *vi = SDL_GetVideoInfo();
1627 int w = vi->current_w;
1628 return 0;
1629}
1630EOF
dcd479c0
MR
1631 fi
1632 fi
29f3b38a 1633 restore_flags
c3f6b472 1634fi
a86b921c 1635
57bd82d4
MR
1636enabled sdl || ffplay=no
1637
146ea952 1638##########################################
29799f8b 1639# texi2html check
146ea952
NB
1640
1641texi2html=no
e2a3cd59 1642if (texi2html -version) >/dev/null 2>&1; then
146ea952
NB
1643texi2html=yes
1644fi
1645
7a91333f 1646##########################################
29799f8b 1647# IPv6 check
7a91333f 1648
0c7bb0e5 1649enabled network && enabled ipv6 && check_ld <<EOF && ipv6=yes || ipv6=no
7a91333f
HZ
1650#include <sys/types.h>
1651#include <sys/socket.h>
1652#include <netinet/in.h>
1653#include <netdb.h>
1654int main( void ) {
1655 struct sockaddr_storage saddr;
1656 struct ipv6_mreq mreq6;
1657 getaddrinfo(0,0,0,0);
1658 getnameinfo(0,0,0,0,0,0,0);
12fe88b4 1659 IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
7a91333f
HZ
1660}
1661EOF
1662
47f38850 1663# check for video4linux2 --- V4L2_PIX_FMT_YUV420
9d2a0f1c 1664enabled video4linux2 && check_cc <<EOF || video4linux2="no"
84fe9963 1665#include <sys/time.h>
f743a062
LA
1666#include <asm/types.h>
1667#include <linux/videodev2.h>
47f38850 1668int dummy = V4L2_PIX_FMT_YUV420;
490c189b 1669struct v4l2_buffer dummy1;
47f38850 1670EOF
47f38850 1671
f58f4ce1 1672# Deal with the x11 frame grabber
56a059ac 1673enabled x11grab &&
f58f4ce1
GP
1674enabled gpl &&
1675enabled x11_grab_device_demuxer &&
1676check_header X11/Xlib.h &&
1677check_header X11/extensions/XShm.h &&
1678check_func XOpenDisplay -lX11 &&
1679check_func XShmCreateImage -lX11 -lXext &&
1680add_extralibs -lX11 -lXext ||
1681disable x11_grab_device_demuxer
1682
57bd82d4
MR
1683enabled debug && add_cflags -g
1684
1685# add some useful compiler flags if supported
1686check_cflags -Wdeclaration-after-statement
dcd479c0
MR
1687check_cflags -Wall
1688check_cflags -Wno-switch
c07bd6a9
MN
1689check_cflags -Wdisabled-optimization
1690check_cflags -Wpointer-arith
1691check_cflags -Wredundant-decls
78fcba8f 1692enabled extrawarnings && check_cflags -Winline
cf9d24ad 1693
57bd82d4 1694# add some linker flags
e240ee67 1695check_ldflags $LDLATEFLAGS
94a3401e 1696
57bd82d4
MR
1697# not all compilers support -Os
1698test "$optimize" = "small" && check_cflags -Os
cddf3f45 1699
57bd82d4 1700if enabled optimize; then
b2924696 1701 if test -n "`$cc -v 2>&1 | grep xlc`"; then
30a3e5d4
NP
1702 add_cflags "-O5"
1703 add_ldflags "-O5"
cf9d24ad 1704 else
30a3e5d4 1705 add_cflags "-O3"
cf9d24ad 1706 fi
cddf3f45
GM
1707fi
1708
80581e98
MN
1709# PIC flags for shared library objects where they are needed
1710if test "$lshared" = "yes" ; then
f25fc9b1
MR
1711 # LIBOBJFLAGS may have already been set in the OS configuration
1712 if test -z "$LIBOBJFLAGS" ; then
cc6a90dd 1713 case "$arch" in
813457e5
MR
1714 x86_64|ia64|alpha|sparc*) LIBOBJFLAGS="\$(PIC)" ;;
1715 esac
80581e98 1716 fi
80581e98
MN
1717fi
1718
1db54e20 1719if test "$gprof" = "yes" ; then
30a3e5d4
NP
1720 add_cflags "-p"
1721 add_ldflags "-p"
1db54e20
DB
1722fi
1723
18451f7d
MR
1724VHOOKCFLAGS="-fPIC $CFLAGS"
1725test "$needmdynamicnopic" = yes && add_cflags -mdynamic-no-pic
1726
4454dc1b
JD
1727# find if .align arg is power-of-two or not
1728if test $asmalign_pot = "unknown"; then
1729 asmalign_pot="no"
1730 echo 'asm (".align 3");' | check_cc && asmalign_pot="yes"
1731fi
1732
2266e085 1733echo "install prefix $PREFIX"
29799f8b 1734echo "source path $source_path"
de6d9b64 1735echo "C compiler $cc"
4a908fbc 1736echo "make $make"
38d0a8aa 1737echo "ARCH $arch ($cpu)"
eb94aca9 1738if test "$BUILDSUF" != ""; then
f25fc9b1 1739 echo "build suffix $BUILDSUF"
eb94aca9 1740fi
29799f8b 1741echo "big-endian $bigendian"
419b8784 1742if test $arch = "x86_32" -o $arch = "x86_64"; then
f25fc9b1 1743 echo "MMX enabled $mmx"
e7768fc5 1744 echo "CMOV enabled $cmov"
94e4c3a3 1745 echo "CMOV is fast $cmov_is_fast"
e41e8342 1746fi
cc6a90dd 1747if test $arch = "armv4l"; then
1839e854 1748 echo "ARMv5TE enabled $armv5te"
f25fc9b1 1749 echo "IWMMXT enabled $iwmmxt"
eba9ae3c 1750fi
cc6a90dd 1751if test $arch = "mips"; then
f25fc9b1 1752 echo "MMI enabled $mmi"
e41e8342 1753fi
cc6a90dd 1754if test $arch = "powerpc"; then
f25fc9b1 1755 echo "AltiVec enabled $altivec"
87ea51e0 1756 echo "dcbzl available $dcbzl"
e41e8342 1757fi
de6d9b64 1758echo "gprof enabled $gprof"
0147f198 1759echo "zlib enabled $zlib"
bb4c2140 1760echo "libgsm enabled $libgsm"
a6741398 1761echo "mp3lame enabled $mp3lame"
f956e129 1762echo "libnut enabled $libnut"
9146ca37 1763echo "libogg enabled $libogg"
be74741c 1764echo "Vorbis enabled $libvorbis"
29799f8b 1765echo "FAAD enabled $faad"
445ad18d 1766echo "faadbin enabled $faadbin"
29799f8b
DB
1767echo "FAAC enabled $faac"
1768echo "XviD enabled $xvid"
6662ec29 1769echo "x264 enabled $x264"
5cbcf02c 1770echo "a52 support $a52"
57514323 1771echo "a52 dlopened $a52bin"
29799f8b 1772echo "DTS support $dts"
bba9b16c 1773echo "pp support $pp"
790c9ca7 1774echo "Software Scaler enabled $swscaler"
8ac17293 1775echo "AVISynth enabled $avisynth"
cddf3f45 1776echo "debug symbols $debug"
65d1bea2 1777echo "strip symbols $dostrip"
cddf3f45 1778echo "optimize $optimize"
320d060a 1779echo "static $lstatic"
1ddf5ba1 1780echo "shared $lshared"
29799f8b 1781echo "video hooking $vhook"
a86b921c
FB
1782echo "SDL support $sdl"
1783if test $sdl_too_old = "yes"; then
f25fc9b1 1784 echo "-> Your SDL version is too old - please upgrade to have FFplay/SDL support."
a86b921c 1785fi
68892110 1786
f25fc9b1
MR
1787if test "$vhook" = "yes"; then
1788 echo "Imlib2 support $imlib2"
1789 echo "FreeType support $freetype2"
68892110 1790fi
bde24d6e 1791echo "Sun medialib support" $mlib
9c3d33d6 1792echo "pthreads support" $pthreads
bc634f6f
ZK
1793echo "AMR-NB float support" $amr_nb
1794echo "AMR-NB fixed support" $amr_nb_fixed
d663a1fd 1795echo "AMR-WB float support" $amr_wb
2a515c08 1796echo "AMR-WB IF2 support" $amr_if2
7a91333f
HZ
1797echo "network support $network"
1798if test "$network" = "yes" ; then
f25fc9b1 1799 echo "IPv6 support $ipv6"
7a91333f 1800fi
4454dc1b 1801echo ".align is power-of-two" $asmalign_pot
b2e3c528 1802if test "$gpl" = "no" ; then
f25fc9b1 1803 echo "License: LGPL"
b2e3c528 1804else
f25fc9b1 1805 echo "License: GPL"
b2e3c528 1806fi
de6d9b64 1807
29799f8b 1808echo "Creating config.mak and config.h..."
de6d9b64 1809
29799f8b
DB
1810echo "# Automatically generated by configure - do not modify!" > config.mak
1811echo "/* Automatically generated by configure - do not modify! */" > $TMPH
f255e0ab 1812echo "#define FFMPEG_CONFIGURATION "'"'"$FFMPEG_CONFIGURATION"'"' >> $TMPH
de6d9b64 1813
2266e085
DB
1814echo "PREFIX=$PREFIX" >> config.mak
1815echo "prefix=\$(DESTDIR)\${PREFIX}" >> config.mak
9a695e98 1816echo "libdir=\$(DESTDIR)$libdir" >> config.mak
84c22efd 1817echo "shlibdir=\$(DESTDIR)$shlibdir" >> config.mak
1d67a1d4 1818echo "incdir=\$(DESTDIR)$incdir" >> config.mak
9a695e98
DB
1819echo "bindir=\$(DESTDIR)$bindir" >> config.mak
1820echo "mandir=\$(DESTDIR)$mandir" >> config.mak
4a908fbc 1821echo "MAKE=$make" >> config.mak
980fc7b8
FB
1822echo "CC=$cc" >> config.mak
1823echo "AR=$ar" >> config.mak
be7109c1 1824echo "RANLIB=$ranlib" >> config.mak
65d1bea2 1825if test "$dostrip" = "yes" ; then
f25fc9b1
MR
1826 echo "STRIP=$strip" >> config.mak
1827 echo "INSTALLSTRIP=$installstrip" >> config.mak
65d1bea2 1828else
f25fc9b1
MR
1829 echo "STRIP=echo ignoring strip" >> config.mak
1830 echo "INSTALLSTRIP=" >> config.mak
65d1bea2 1831fi
75388c74 1832
a9b3f630 1833echo "OPTFLAGS=$CFLAGS" >> config.mak
408382a4 1834echo "VHOOKCFLAGS=$VHOOKCFLAGS">>config.mak
0f3cb305 1835echo "LDFLAGS=$LDFLAGS" >> config.mak
f39e56a8 1836echo "LDCONFIG=$LDCONFIG" >> config.mak
c536cb09 1837echo "FFSERVERLDFLAGS=$FFSERVERLDFLAGS" >> config.mak
e1707f52 1838echo "SHFLAGS=$SHFLAGS" >> config.mak
408382a4 1839echo "VHOOKSHFLAGS=$VHOOKSHFLAGS" >> config.mak
fbb9d104 1840echo "VHOOKLIBS=$VHOOKLIBS" >> config.mak
80581e98 1841echo "LIBOBJFLAGS=$LIBOBJFLAGS" >> config.mak
b12f8273 1842echo "BUILD_STATIC=$lstatic" >> config.mak
eb94aca9 1843echo "BUILDSUF=$BUILDSUF" >> config.mak
f3ec2d46 1844echo "LIBPREF=$LIBPREF" >> config.mak
eb94aca9 1845echo "LIBSUF=\${BUILDSUF}$LIBSUF" >> config.mak
320d060a
DB
1846if test "$lstatic" = "yes" ; then
1847 echo "LIB=$LIB" >> config.mak
1a44a8b6
AS
1848else # Some Make complain if this variable does not exist.
1849 echo "LIB=" >> config.mak
320d060a 1850fi
f3ec2d46 1851echo "SLIBPREF=$SLIBPREF" >> config.mak
eb94aca9
CY
1852echo "SLIBSUF=\${BUILDSUF}$SLIBSUF" >> config.mak
1853echo "EXESUF=\${BUILDSUF}$EXESUF" >> config.mak
b2828252 1854echo "TARGET_OS=$targetos" >> config.mak
4dc62701
MR
1855
1856ucarch=`toupper $arch`
1857echo "TARGET_ARCH_${ucarch}=yes" >> config.mak
1858echo "#define ARCH_${ucarch} 1" >> $TMPH
1859
1860# special cases
1861case "$arch" in
1862 x86_32|x86_64)
1863 echo "TARGET_ARCH_X86=yes" >> config.mak
1864 echo "#define ARCH_X86 1" >> $TMPH
1865 ;;
1866 powerpc)
1867 if test "$POWERPCMODE" = "64bits"; then
1868 echo "#define POWERPC_MODE_64BITS 1" >> $TMPH
1869 fi
1870 if test "$powerpc_perf" = "yes"; then
1871 echo "#define POWERPC_PERFORMANCE_REPORT 1" >> $TMPH
1872 fi
1873 ;;
1874 sparc64)
1875 echo "TARGET_ARCH_SPARC=yes" >> config.mak
1876 echo "#define ARCH_SPARC 1" >> $TMPH
1877 ;;
1878esac
1879
0f3cb305
FB
1880if test "$bigendian" = "yes" ; then
1881 echo "WORDS_BIGENDIAN=yes" >> config.mak
1882 echo "#define WORDS_BIGENDIAN 1" >> $TMPH
91d1f1a4 1883fi
57514323 1884if test "$mmx" = "yes" ; then
980fc7b8 1885 echo "TARGET_MMX=yes" >> config.mak
045ed63f 1886 echo "#define HAVE_MMX 1" >> $TMPH
e82c5a8c 1887 echo "#define __CPU__ 586" >> $TMPH
de6d9b64 1888fi
e7768fc5
GP
1889if test "$cmov" = "yes" ; then
1890 echo "TARGET_CMOV=yes" >> config.mak
1891 echo "#define HAVE_CMOV 1" >> $TMPH
1892fi
94e4c3a3
GP
1893if test "$cmov_is_fast" = "yes" ; then
1894 echo "TARGET_CMOV_IS_FAST=yes" >> config.mak
1895 echo "#define CMOV_IS_FAST 1" >> $TMPH
1896fi
1839e854
SS
1897if test "$armv5te" = "yes" ; then
1898 echo "TARGET_ARMV5TE=yes" >> config.mak
1899 echo "#define HAVE_ARMV5TE 1" >> $TMPH
1900fi
eba9ae3c
GB
1901if test "$iwmmxt" = "yes" ; then
1902 echo "TARGET_IWMMXT=yes" >> config.mak
1903 echo "#define HAVE_IWMMXT 1" >> $TMPH
1904fi
d46aba26
LS
1905if test "$mmi" = "yes" ; then
1906 echo "TARGET_MMI=yes" >> config.mak
1907 echo "#define HAVE_MMI 1" >> $TMPH
1908fi
87ea51e0 1909
ab6c65f6
BF
1910if test "$altivec" = "yes" ; then
1911 echo "TARGET_ALTIVEC=yes" >> config.mak
1912 echo "#define HAVE_ALTIVEC 1" >> $TMPH
f80f7964 1913fi
44161118 1914
a86b921c 1915if test "$sdl" = "yes" ; then
6a1a892f
FD
1916 echo "SDL_LIBS=`"${SDL_CONFIG}" --libs`" >> config.mak
1917 echo "SDL_CFLAGS=`"${SDL_CONFIG}" --cflags`" >> config.mak
a86b921c 1918fi
146ea952
NB
1919if test "$texi2html" = "yes"; then
1920 echo "BUILD_DOC=yes" >> config.mak
1921fi
5a872801 1922
790c9ca7 1923sws_version=`grep '#define LIBSWSCALE_VERSION ' "$source_path/libswscale/swscale.h" | sed 's/[^0-9\.]//g'`
6d9a2421 1924pp_version=`grep '#define LIBPOSTPROC_VERSION ' "$source_path/libpostproc/postprocess.h" | sed 's/[^0-9\.]//g'`
5a872801
LB
1925lavc_version=`grep '#define LIBAVCODEC_VERSION ' "$source_path/libavcodec/avcodec.h" | sed 's/[^0-9\.]//g'`
1926lavf_version=`grep '#define LIBAVFORMAT_VERSION ' "$source_path/libavformat/avformat.h" | sed 's/[^0-9\.]//g'`
1927lavu_version=`grep '#define LIBAVUTIL_VERSION ' "$source_path/libavutil/avutil.h" | sed 's/[^0-9\.]//g'`
1928
1929
1930
57514323 1931if test "$lshared" = "yes" ; then
0319c531 1932 echo "BUILD_SHARED=yes" >> config.mak
97006039 1933 echo "PIC=-fPIC -DPIC" >> config.mak
7e303556
DB
1934 echo "SPPMAJOR=${pp_version%%.*}" >> config.mak
1935 echo "SPPVERSION=$pp_version" >> config.mak
39503a27 1936 echo "LAVCMAJOR=${lavc_version%%.*}" >> config.mak
5a872801 1937 echo "LAVCVERSION=$lavc_version" >> config.mak
39503a27 1938 echo "LAVFMAJOR=${lavf_version%%.*}" >> config.mak
5a872801 1939 echo "LAVFVERSION=$lavf_version" >> config.mak
39503a27 1940 echo "LAVUMAJOR=${lavu_version%%.*}" >> config.mak
5a872801 1941 echo "LAVUVERSION=$lavu_version" >> config.mak
790c9ca7
LA
1942 echo "SWSMAJOR=${sws_version%%.*}" >> config.mak
1943 echo "SWSVERSION=$sws_version" >> config.mak
4bdd05e7 1944 echo "SLIBNAME=${SLIBNAME}" >> config.mak
f3b60109
DB
1945 echo "SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}" >> config.mak
1946 echo "SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}" >> config.mak
5cb854e1 1947 echo "SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}" >> config.mak
0319c531 1948fi
d7e27559 1949echo "LIB_INSTALL_EXTRA_CMD=${LIB_INSTALL_EXTRA_CMD}" >> config.mak
ef0bc4c9 1950echo "EXTRALIBS=$extralibs" >> config.mak
d2845d68 1951
44161118
MR
1952enabled_any $ENCODER_LIST && enable encoders
1953enabled_any $DECODER_LIST && enable decoders
1954enabled_any $MUXER_LIST && enable muxers
1955enabled_any $DEMUXER_LIST && enable demuxers
f956e129 1956
b265431e
MR
1957enabled_any pthreads beosthreads os2threads w32threads && enable threads
1958
44161118
MR
1959print_config HAVE_ $TMPH config.mak $HAVE_LIST
1960print_config CONFIG_ $TMPH config.mak $CONFIG_LIST
8ac17293 1961
b2828252 1962if test "$targetos" = "Darwin"; then
90cee0c3 1963 echo "#define CONFIG_DARWIN 1" >> $TMPH
90cee0c3
MN
1964fi
1965
c13e1abd
FH
1966echo "#define restrict $_restrict" >> $TMPH
1967
bb801c97
MN
1968if test "$optimize" = "small"; then
1969 echo "#define always_inline" >> $TMPH
e5f28e8f 1970 echo "#define CONFIG_SMALL 1" >> $TMPH
bb801c97
MN
1971fi
1972
997baf01
MR
1973echo "SRC_PATH=\"$source_path\"" >> config.mak
1974echo "SRC_PATH_BARE=$source_path" >> config.mak
1975echo "BUILD_ROOT=\"$PWD\"" >> config.mak
0f3cb305 1976
2a515c08
TM
1977if test "$amr_if2" = "yes" ; then
1978 echo "AMR_CFLAGS=-DIF2=1" >> config.mak
1979fi
1980
8156056e 1981# Apparently it's not possible to portably echo a backslash.
4454dc1b 1982if test "$asmalign_pot" = "yes" ; then
8156056e 1983 printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH
4454dc1b 1984else
8156056e 1985 printf '#define ASMALIGN(ZEROBITS) ".align 1<<" #ZEROBITS "\\n\\t"\n' >> $TMPH
4454dc1b
JD
1986fi
1987
bc634f6f 1988
55006fc0 1989for codec in $DECODER_LIST $ENCODER_LIST $PARSER_LIST $DEMUXER_LIST $MUXER_LIST; do
44161118 1990 ucname="`toupper $codec`"
a8d04fba
MR
1991 config_name="CONFIG_$ucname"
1992 enabled_name="ENABLE_$ucname"
1993 if enabled $codec; then
1994 echo "#define $config_name 1" >> $TMPH
1995 echo "#define $enabled_name 1" >> $TMPH
1996 echo "$config_name=yes" >> config.mak
1997 else
1998 echo "#define $enabled_name 0" >> $TMPH
1999 fi
009cf97d
MN
2000done
2001
9cb2cf10 2002# Do not overwrite config.h if unchanged to avoid superfluous rebuilds.
c683a5d1 2003if ! cmp -s $TMPH config.h; then
9cb2cf10
DB
2004 mv -f $TMPH config.h
2005else
2006 echo "config.h is unchanged"
2007fi
3d204385 2008
f3ec2d46 2009rm -f $TMPO $TMPC $TMPE $TMPS $TMPH
def4272a 2010
165af439
MR
2011# build tree in object directory if source path is different from current one
2012if test "$source_path_used" = "yes" ; then
2013 DIRS="\
2014 doc \
2015 libavformat \
2016 libavcodec \
2017 libavcodec/alpha \
2018 libavcodec/armv4l \
2019 libavcodec/bfin \
2020 libavcodec/i386 \
2021 libavcodec/sparc \
2022 libavcodec/mlib \
2023 libavcodec/ppc \
2024 libavcodec/liba52 \
2025 libpostproc \
2026 libavutil \
2027 libswscale \
2028 tests \
2029 vhook \
2030 "
2031 FILES="\
2032 Makefile \
2033 common.mak \
2034 libavformat/Makefile \
2035 libavcodec/Makefile \
2036 libpostproc/Makefile \
2037 libavutil/Makefile \
2038 libswscale/Makefile \
2039 tests/Makefile \
2040 vhook/Makefile \
2041 doc/Makefile \
2042 doc/texi2pod.pl \
2043 "
2044 for dir in $DIRS ; do
2045 mkdir -p $dir
2046 done
2047 for f in $FILES ; do
2048 ln -sf "$source_path/$f" $f
2049 done
2050fi
def4272a 2051
def4272a 2052
d0674868 2053# build pkg-config files
def4272a 2054
d0674868
DB
2055pkgconfig_generate(){
2056name=$1
2057comment=$2
2058version=$3
2059libs=$4
2060requires=$5
2061include=$6
2062cat <<EOF >$name.pc
2266e085 2063prefix=$PREFIX
a94e666c 2064exec_prefix=\${prefix}
def4272a 2065libdir=\${exec_prefix}/lib
a94e666c 2066includedir=\${prefix}/include
def4272a 2067
d0674868
DB
2068Name: $name
2069Description: $comment
2070Version: $version
2071Requires: $requires
def4272a 2072Conflicts:
d0674868
DB
2073Libs: -L\${libdir} $libs
2074Cflags: -I\${includedir} -I\${includedir}/$include
def4272a 2075EOF
d0674868 2076}
def4272a 2077
d0674868
DB
2078pkgconfig_generate_uninstalled(){
2079name=$1
9c476fd6 2080shortname=${name#lib}
d0674868
DB
2081comment=$2
2082version=$3
2083libs=$4
2084requires=$5
2085cat <<EOF >$name-uninstalled.pc
def4272a
AJ
2086prefix=
2087exec_prefix=
d0674868
DB
2088libdir=\${pcfiledir}/$name
2089includedir=\${pcfiledir}/$name
def4272a 2090
d0674868
DB
2091Name: $name
2092Description: $comment
2093Version: $version
2094Requires: $requires
def4272a 2095Conflicts:
d0674868 2096Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
def4272a
AJ
2097Cflags: -I\${includedir}
2098EOF
d0674868 2099}
def4272a 2100
9d824ad1 2101pkgconfig_generate libavutil "FFmpeg utility library" "$lavu_version" -lavutil "" ffmpeg
d0674868 2102pkgconfig_generate_uninstalled libavutil "FFmpeg utility library" "$lavu_version"
def4272a 2103
d0674868
DB
2104pkgconfig_generate libavcodec "FFmpeg codec library" "$lavc_version" "-lavcodec $extralibs" "$pkg_requires libavutil = $lavu_version" ffmpeg
2105pkgconfig_generate_uninstalled libavcodec "FFmpeg codec library" "$lavc_version" "$extralibs" "$pkg_requires libavutil = $lavu_version"
def4272a 2106
d0674868
DB
2107pkgconfig_generate libavformat "FFmpeg container format library" "$lavf_version" "-lavformat $extralibs" "$pkg_requires libavcodec = $lavc_version" ffmpeg
2108pkgconfig_generate_uninstalled libavformat "FFmpeg container format library" "$lavf_version" "$extralibs" "$pkg_requires libavcodec = $lavc_version"
def4272a 2109
d0674868
DB
2110pkgconfig_generate libpostproc "FFmpeg post processing library" "$pp_version" -lpostproc "" postproc
2111pkgconfig_generate_uninstalled libpostproc "FFmpeg post processing library" "$pp_version"
790c9ca7 2112
6c0d0413 2113if test "$swscaler" != "no"; then
d0674868
DB
2114 pkgconfig_generate libswscale "FFmpeg image rescaling library" "$sws_version" "-lswscale" "$pkg_requires libavutil = $lavu_version" swscale
2115 pkgconfig_generate_uninstalled libswscale "FFmpeg image rescaling library" "$sws_version" "" "$pkg_requires libavutil = $lavu_version"
6c0d0413 2116else
d0674868
DB
2117 pkgconfig_generate libswscale "FFmpeg image rescaling library" "$sws_version" "" "$pkg_requires libavcodec = $lavc_version" swscale
2118 pkgconfig_generate_uninstalled libswscale "FFmpeg image rescaling library" "$sws_version" "" "$pkg_requires libavcodec = $lavc_version"
c505dd31
MR
2119 apply libswscale.pc sed s/^Libs:.*$/Libs:/
2120 apply libswscale-uninstalled.pc sed s/^Libs:.*$/Libs:/
6c0d0413 2121fi