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