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