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