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