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