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