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