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