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