Move AC3 header parsing code together with the rest of the AC3 parsing code.
[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
26c1b3be
DB
1285 add_cflags "-no-cpp-precomp -pipe"
1286 check_cflags "-force_cpusubtype_ALL"
1287 check_cflags "-Wno-sign-compare"
1288 disabled shared && needmdynamicnopic="yes"
cf9d24ad 1289 fi
2a1a6b64
MN
1290fi
1291
703afd07 1292disabled optimize || add_cflags -fomit-frame-pointer
cf9d24ad 1293
ab6c65f6
BF
1294# Can only do AltiVec on PowerPC
1295if test $altivec = "default"; then
cc6a90dd 1296 if test $arch = "powerpc"; then
ab6c65f6
BF
1297 altivec="yes"
1298 else
1299 altivec="no"
1300 fi
1301fi
1302
a4adb608 1303# Add processor-specific flags
9007f514 1304POWERPCMODE="32bits"
38d0a8aa 1305if test $cpu != "generic"; then
bc8ec47b
MR
1306 warn_altivec(){
1307 $1 altivec && echo "WARNING: Tuning for $2 but AltiVec $1.";
1658bc4f 1308 }
38d0a8aa 1309 case $cpu in
bb270c08 1310 601|ppc601|PowerPC601)
1c5d830c 1311 add_cflags "-mcpu=601"
bc8ec47b 1312 warn_altivec enabled PPC601
bb270c08
DB
1313 ;;
1314 603*|ppc603*|PowerPC603*)
1c5d830c 1315 add_cflags "-mcpu=603"
bc8ec47b 1316 warn_altivec enabled PPC603
bb270c08
DB
1317 ;;
1318 604*|ppc604*|PowerPC604*)
1c5d830c 1319 add_cflags "-mcpu=604"
bc8ec47b 1320 warn_altivec enabled PPC604
bb270c08
DB
1321 ;;
1322 G3|g3|75*|ppc75*|PowerPC75*)
1c5d830c 1323 add_cflags "-mcpu=750 -mpowerpc-gfxopt"
bc8ec47b 1324 warn_altivec enabled PPC75x
bb270c08
DB
1325 ;;
1326 G4|g4|745*|ppc745*|PowerPC745*)
1c5d830c 1327 add_cflags "-mcpu=7450 -mpowerpc-gfxopt"
bc8ec47b 1328 warn_altivec disabled PPC745x
bb270c08
DB
1329 ;;
1330 74*|ppc74*|PowerPC74*)
1c5d830c 1331 add_cflags "-mcpu=7400 -mpowerpc-gfxopt"
bc8ec47b 1332 warn_altivec disabled PPC74xx
bb270c08
DB
1333 ;;
1334 G5|g5|970|ppc970|PowerPC970|power4*|Power4*)
1c5d830c 1335 add_cflags "-mcpu=970 -mpowerpc-gfxopt -mpowerpc64"
bc8ec47b 1336 warn_altivec disabled PPC970
9007f514 1337 POWERPCMODE="64bits"
bb270c08 1338 ;;
e7768fc5
GP
1339 # targets that do NOT support conditional mov (cmov)
1340 i[345]86|pentium|pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
38d0a8aa 1341 add_cflags "-march=$cpu"
e7768fc5
GP
1342 cmov="no"
1343 ;;
1344 # targets that do support conditional mov (cmov)
416519dd 1345 i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2)
e7768fc5 1346 add_cflags "-march=$cpu"
4c8d81fa 1347 cmov="yes"
7073e9fc 1348 fast_cmov="yes"
94e4c3a3
GP
1349 ;;
1350 # targets that do support conditional mov but on which it's slow
1351 pentium4|prescott|nocona)
1352 add_cflags "-march=$cpu"
1353 cmov="yes"
7073e9fc 1354 fast_cmov="no"
bb270c08 1355 ;;
d7b34d08 1356 sparc64)
1c5d830c 1357 add_cflags "-mcpu=v9"
d7b34d08 1358 ;;
8684704b
MH
1359 bf*) #bf531 bf532 bf533 bf561 bf5xx all get this config
1360 add_cflags "-mfdpic"
846dffeb 1361 add_ldflags "-mfdpic"
8684704b 1362 ;;
bb270c08 1363 *)
38d0a8aa 1364 echo "WARNING: Unknown CPU \"$cpu\", ignored."
bb270c08 1365 ;;
a4adb608
MN
1366 esac
1367fi
1368
412c1562
MR
1369gnu_make(){
1370 $1 --version 2>&1 | grep -q GNU
1371}
1372
1373if ! gnu_make $make; then
1374 gnu_make gmake && make=gmake || die "GNU make not found."
1375fi
1376
be0d52ab
MR
1377# make sure we can execute files in $TMPDIR
1378cat >$TMPE 2>>$logfile <<EOF
1379#! /bin/sh
1380EOF
1381chmod +x $TMPE >>$logfile 2>&1
1382if ! $TMPE >>$logfile 2>&1; then
1383 cat <<EOF
1384Unable to create and execute files in $TMPDIR1. Set the TMPDIR environment
68300911
DB
1385variable to another directory and make sure that $TMPDIR1 is not mounted
1386noexec.
be0d52ab
MR
1387EOF
1388 die "Sanity test failed."
1389fi
0244f743 1390rm $TMPE
be0d52ab 1391
1a268acc
MR
1392# compiler sanity check
1393check_exec <<EOF
1394int main(){
1395 return 0;
1396}
1397EOF
1398if test "$?" != 0; then
1399 echo "$cc is unable to create an executable file."
d6ceace3 1400 if test -z "$cross_prefix" && disabled cross_compile ; then
1a268acc 1401 echo "If $cc is a cross-compiler, use the --cross-compile option."
c7ae6345 1402 echo "Only do this if you know what cross compiling means."
1a268acc
MR
1403 fi
1404 die "C compiler test failed."
1405fi
1406
44965991 1407if test $arch = "x86_32" -o $arch = "x86_64"; then
44965991
PI
1408 # check whether EBP is available on x86
1409 # As 'i' is stored on the stack, this program will crash
1410 # if the base pointer is used to access it because the
1411 # base pointer is cleared in the inline assembly code.
7dfef245 1412 check_exec_crash <<EOF && enable ebp_available
44965991
PI
1413 volatile int i=0;
1414 asm volatile (
1415 "xorl %%ebp, %%ebp"
1416 ::: "%ebp");
1417 return i;
44965991
PI
1418EOF
1419
1420 # check wether EBX is available on x86
1421 check_cc <<EOF && enable ebx_available
1422int main(){
1423 asm volatile ("":::"%ebx");
1424}
1425EOF
1426fi
1427
87ea51e0
LB
1428# check for assembler specific support
1429
cc6a90dd 1430if test $arch = "powerpc"; then
87ea51e0
LB
1431check_cc <<EOF && dcbzl=yes
1432int main(void) {
1433 register long zero = 0;
1434 char data[1024];
1435 asm volatile("dcbzl %0, %1" : : "b" (data), "r" (zero));
1436return 0;
1437}
1438EOF
1439fi
1440
57bd82d4
MR
1441# check for SIMD availability
1442
115329f1 1443# AltiVec flags: The FSF version of GCC differs from the Apple version
cc6a90dd 1444if test $arch = "powerpc"; then
90be59ef 1445 if enabled altivec; then
b2924696 1446 if test -n "`$cc -v 2>&1 | grep version | grep Apple`"; then
30a3e5d4 1447 add_cflags "-faltivec"
b6e52719 1448 else
30a3e5d4 1449 add_cflags "-maltivec -mabi=altivec"
b6e52719
MD
1450 fi
1451 fi
1452fi
1453
0701ca7f 1454check_header altivec.h
a9a07762 1455
29799f8b 1456# check if our compiler supports Motorola AltiVec C API
90be59ef
RP
1457if enabled altivec; then
1458 if enabled altivec_h; then
f25fc9b1
MR
1459 inc_altivec_h="#include <altivec.h>"
1460 else
1461 inc_altivec_h=
1462 fi
1463 check_cc <<EOF || altivec=no
dcd479c0 1464$inc_altivec_h
a9a07762
MN
1465int main(void) {
1466 vector signed int v1, v2, v3;
1467 v1 = vec_add(v2,v3);
1468 return 0;
1469}
1470EOF
1471fi
ab6c65f6 1472
854fdb51 1473# check armv5te instructions support
cc6a90dd 1474if test $armv5te = "default" -a $arch = "armv4l"; then
854fdb51
MR
1475 armv5te=no
1476 check_cc <<EOF && armv5te=yes
1477 int main(void) {
1478 __asm__ __volatile__ ("qadd r0, r0, r0");
1479 }
1480EOF
1481fi
1482
edab3048
MR
1483if test $armv6 = "default" -a $arch = "armv4l"; then
1484 check_cc <<EOF && armv6=yes || armv6=no
1485int main(void) {
1486 __asm__ __volatile__ ("sadd16 r0, r0, r0");
1487}
1488EOF
1489fi
1490
854fdb51 1491# check iwmmxt support
cc6a90dd 1492if test $iwmmxt = "default" -a $arch = "armv4l"; then
854fdb51
MR
1493 iwmmxt=no
1494 check_cc <<EOF && iwmmxt=yes
1495 int main(void) {
1496 __asm__ __volatile__ ("wunpckelub wr6, wr4");
1497 }
1498EOF
1499fi
1500
29799f8b 1501# mmi only available on mips
d46aba26 1502if test $mmi = "default"; then
cc6a90dd 1503 if test $arch = "mips"; then
d46aba26
LS
1504 mmi="yes"
1505 else
1506 mmi="no"
1507 fi
1508fi
1509
29799f8b 1510# check if our compiler supports mmi
57bd82d4 1511enabled mmi && check_cc <<EOF || mmi="no"
d46aba26
LS
1512int main(void) {
1513 __asm__ ("lq \$2, 0(\$2)");
1514 return 0;
1515}
1516EOF
57bd82d4 1517
57bd82d4
MR
1518# ---
1519# big/little-endian test
37970ebf 1520if disabled cross_compile; then
57bd82d4 1521 check_ld <<EOF || die "endian test failed" && $TMPE && bigendian="yes"
a3999908
MN
1522#include <inttypes.h>
1523int main(int argc, char ** argv){
bb270c08
DB
1524 volatile uint32_t i=0x01234567;
1525 return (*((uint8_t*)(&i))) == 0x67;
a3999908
MN
1526}
1527EOF
487a54d7 1528else
f25fc9b1 1529 # programs cannot be launched if cross compiling, so make a static guess
cc6a90dd 1530 if test "$arch" = "powerpc" -o "$arch" = "mips" ; then
f25fc9b1
MR
1531 bigendian="yes"
1532 fi
487a54d7
FB
1533fi
1534
a3999908 1535# ---
3d204385
NK
1536# check availability of some header files
1537
0701ca7f
MR
1538check_header malloc.h
1539check_func memalign
3d204385 1540
797ee6a6 1541if disabled_all memalign memalign_hack && enabled need_memalign ; then
57bd82d4 1542 die "Error, no memalign() but SSE enabled, disable it or use --enable-memalign-hack."
8bf5d58f
MN
1543fi
1544
0701ca7f 1545check_header byteswap.h
47d23bbf 1546
c9fdab0d
FR
1547check_header arpa/inet.h
1548
0701ca7f
MR
1549check_func inet_aton
1550check_func localtime_r
57bd82d4 1551enabled zlib && check_lib zlib.h zlibVersion -lz || zlib="no"
57bd82d4 1552
b0c858d8
FR
1553# ffserver uses poll(),
1554# if it's not found we can emulate it using select().
1555if enabled ffserver; then
1556 check_header sys/poll.h
1557fi
1558
57bd82d4
MR
1559# check for some common methods of building with pthread support
1560# do this before the optional library checks as some of them require pthreads
1561if enabled pthreads; then
9e7fd101
MR
1562 if check_func pthread_create; then
1563 :
1564 elif check_func pthread_create -pthread; then
1565 add_cflags -pthread
1566 add_ldflags -pthread
1567 elif check_func pthread_create -pthreads; then
1568 add_cflags -pthreads
1569 add_ldflags -pthreads
1570 elif ! check_lib pthread.h pthread_create -lpthread; then
1571 die "ERROR: can't find pthreads library"
1572 fi
57bd82d4
MR
1573fi
1574
8eee7025 1575for thread in $THREADS_LIST; do
e5f94c2b 1576 if enabled $thread; then
e3c00e34 1577 if ! disabled thread_type ; then
e5f94c2b
RP
1578 die "ERROR: Only one thread type must be selected."
1579 else
1580 thread_type="$thread"
1581 fi
1582 fi
1583done
1584
91024272 1585enabled_any amr_nb amr_nb_fixed amr_wb && enable amr
12b61a74
MR
1586enabled_all amr_nb amr_nb_fixed &&
1587 die "Only one of amr_nb and amr_nb_fixed may be enabled."
1588
57bd82d4 1589# these are off by default, so fail if requested and not available
91024272
SB
1590enabled amr_nb && require libamrnb amrnb/interf_dec.h Speech_Decode_Frame_init -lamrnb -lm
1591enabled amr_wb && require libamrwb amrwb/dec_if.h D_IF_init -lamrwb -lm
7bc5f2a8 1592enabled liba52 && require liba52 a52dec/a52.h a52_init -la52
910c62e1
DB
1593enabled libdts && require libdts dts.h dts_init -ldts -lm
1594enabled libgsm && require libgsm gsm.h gsm_create -lgsm
6ebe07fb 1595enabled libmp3lame && require LAME lame/lame.h lame_init -lmp3lame -lm
910c62e1
DB
1596enabled libtheora && require libtheora theora/theora.h theora_info_init -ltheora -logg
1597enabled libvorbis && require libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbis -lvorbisenc -logg
1598enabled libogg && require libogg ogg/ogg.h ogg_sync_init -logg
1599enabled libnut && require libnut libnut.h nut_demuxer_init -lnut
1600enabled xvid && require XviD xvid.h xvid_global -lxvidcore
1601enabled x264 && require x264 x264.h x264_encoder_open -lx264
1602enabled dc1394 && require libdc1394 libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394
1603enabled mlib && require mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
f8d7b072
MR
1604enabled libfaac && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
1605enabled libfaad && require2 libfaad faad.h faacDecOpen -lfaad
1606enabled avisynth && require2 vfw32 "windows.h vfw.h" AVIFileInit -lvfw32
8ac17293 1607
95e2ce4a 1608# test for lrintf in math.h
fc2b267f 1609check_exec <<EOF && lrintf=yes || lrintf=no
95e2ce4a
MN
1610#define _ISOC9X_SOURCE 1
1611#include <math.h>
1612int main( void ) { return (lrintf(3.999f) > 0)?0:1; }
1613EOF
1614
c13e1abd
FH
1615_restrict=
1616for restrict_keyword in restrict __restrict__ __restrict; do
57bd82d4 1617 check_cc <<EOF && _restrict=$restrict_keyword && break
dcd479c0
MR
1618void foo(char * $restrict_keyword p);
1619EOF
c13e1abd
FH
1620done
1621
a8721c09
FB
1622# dlopen/dlfcn.h probing
1623
0701ca7f 1624check_header dlfcn.h
a8721c09 1625
dcd479c0 1626if check_func dlopen; then
dcd479c0 1627 ldl=
0701ca7f
MR
1628elif check_func dlopen -ldl; then
1629 ldl=-ldl
a8721c09
FB
1630fi
1631
703afd07 1632test "$vhook" = "default" && vhook="$dlopen"
a8721c09 1633
81a409c8 1634enabled_any vhook liba52bin libfaadbin ffserver && add_extralibs $ldl
bfd2edeb 1635
ced75d92 1636if test "$targetos" = cygwin && enabled static ; then
fbb9d104
VP
1637 vhook="no"
1638 echo
1639 echo "At the moment vhooks don't work on Cygwin static builds."
1640 echo "Patches welcome."
1641 echo
1642fi
1643
8d923001
MR
1644if enabled vhook; then
1645 check_ldflags -rdynamic
1646 check_ldflags -export-dynamic
1647fi
bfd2edeb 1648
703afd07 1649enabled audio_beos && add_extralibs "-lmedia -lbe"
9464f2b8 1650
eea50282
MR
1651check_foo_config imlib2 imlib2 Imlib2.h imlib_load_font
1652check_foo_config freetype2 freetype ft2build.h FT_Init_FreeType
04511d53 1653
a86b921c 1654##########################################
29799f8b 1655# SDL check
a86b921c 1656
a86b921c
FB
1657sdl_too_old=no
1658sdl=no
6a1a892f 1659SDL_CONFIG="${cross_prefix}sdl-config"
225e21ef
MR
1660if "${SDL_CONFIG}" --version >/dev/null 2>&1; then
1661 sdl_cflags=`"${SDL_CONFIG}" --cflags`
1662 temp_cflags $sdl_cflags
dcd479c0 1663 temp_extralibs `"${SDL_CONFIG}" --libs`
225e21ef 1664 if check_lib SDL.h SDL_Init; then
dcd479c0 1665 _sdlversion=`"${SDL_CONFIG}" --version | sed 's/[^0-9]//g'`
29f3b38a 1666 if test "$_sdlversion" -lt 121 ; then
dcd479c0
MR
1667 sdl_too_old=yes
1668 else
1669 sdl=yes
225e21ef 1670 check_cc $sdl_cflags <<EOF && enable sdl_video_size
29f3b38a
MR
1671#include <SDL.h>
1672int main(void){
1673 const SDL_VideoInfo *vi = SDL_GetVideoInfo();
1674 int w = vi->current_w;
1675 return 0;
1676}
1677EOF
dcd479c0
MR
1678 fi
1679 fi
29f3b38a 1680 restore_flags
c3f6b472 1681fi
57bd82d4 1682
d5697779 1683texi2html -version >/dev/null 2>&1 && enable texi2html || disable texi2html
146ea952 1684
7a91333f 1685##########################################
29799f8b 1686# IPv6 check
7a91333f 1687
0c7bb0e5 1688enabled network && enabled ipv6 && check_ld <<EOF && ipv6=yes || ipv6=no
7a91333f
HZ
1689#include <sys/types.h>
1690#include <sys/socket.h>
1691#include <netinet/in.h>
1692#include <netdb.h>
1693int main( void ) {
1694 struct sockaddr_storage saddr;
1695 struct ipv6_mreq mreq6;
1696 getaddrinfo(0,0,0,0);
1697 getnameinfo(0,0,0,0,0,0,0);
12fe88b4 1698 IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
7a91333f
HZ
1699}
1700EOF
1701
afde41b4
MR
1702enabled v4l && check_header linux/videodev.h || disable v4l
1703enabled v4l2 && check_header linux/videodev2.h || disable v4l2
47f38850 1704
f8aa696f
DB
1705# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
1706if enabled bktr; then
3eac5c63
MR
1707 { check_header dev/bktr/ioctl_meteor.h &&
1708 check_header dev/bktr/ioctl_bt848.h; } ||
1709 { check_header machine/ioctl_meteor.h &&
1710 check_header machine/ioctl_bt848.h; } ||
1711 { check_header dev/video/meteor/ioctl_meteor.h &&
1712 check_header dev/video/bktr/ioctl_bt848.h; } ||
1713 check_header dev/ic/bt8xx.h ||
1714 disable bktr
f8aa696f
DB
1715fi
1716
deb29777
MR
1717enabled audio_oss &&
1718 check_header sys/soundcard.h ||
1719 check_header soundcard.h ||
1720 disable audio_oss
1721
f58f4ce1 1722# Deal with the x11 frame grabber
56a059ac 1723enabled x11grab &&
f58f4ce1
GP
1724enabled gpl &&
1725enabled x11_grab_device_demuxer &&
1726check_header X11/Xlib.h &&
1727check_header X11/extensions/XShm.h &&
1728check_func XOpenDisplay -lX11 &&
1729check_func XShmCreateImage -lX11 -lXext &&
1730add_extralibs -lX11 -lXext ||
1731disable x11_grab_device_demuxer
1732
57bd82d4
MR
1733enabled debug && add_cflags -g
1734
1735# add some useful compiler flags if supported
1736check_cflags -Wdeclaration-after-statement
dcd479c0
MR
1737check_cflags -Wall
1738check_cflags -Wno-switch
c07bd6a9
MN
1739check_cflags -Wdisabled-optimization
1740check_cflags -Wpointer-arith
1741check_cflags -Wredundant-decls
cc1fb623 1742check_cflags -Wno-pointer-sign
5af4e0cc 1743enabled extra_warnings && check_cflags -Winline
cf9d24ad 1744
57bd82d4 1745# add some linker flags
e240ee67 1746check_ldflags $LDLATEFLAGS
94a3401e 1747
57bd82d4
MR
1748# not all compilers support -Os
1749test "$optimize" = "small" && check_cflags -Os
cddf3f45 1750
57bd82d4 1751if enabled optimize; then
b2924696 1752 if test -n "`$cc -v 2>&1 | grep xlc`"; then
30a3e5d4
NP
1753 add_cflags "-O5"
1754 add_ldflags "-O5"
cf9d24ad 1755 else
30a3e5d4 1756 add_cflags "-O3"
cf9d24ad 1757 fi
cddf3f45
GM
1758fi
1759
80581e98 1760# PIC flags for shared library objects where they are needed
5af4e0cc 1761if enabled shared; then
f25fc9b1
MR
1762 # LIBOBJFLAGS may have already been set in the OS configuration
1763 if test -z "$LIBOBJFLAGS" ; then
cc6a90dd 1764 case "$arch" in
f824ba7b 1765 x86_64|ia64|alpha|sparc*|power*) LIBOBJFLAGS="\$(PIC)" ;;
813457e5 1766 esac
80581e98 1767 fi
80581e98
MN
1768fi
1769
90be59ef 1770if enabled gprof; then
30a3e5d4
NP
1771 add_cflags "-p"
1772 add_ldflags "-p"
1db54e20
DB
1773fi
1774
18451f7d 1775VHOOKCFLAGS="-fPIC $CFLAGS"
90be59ef 1776enabled needmdynamicnopic && add_cflags -mdynamic-no-pic
18451f7d 1777
4454dc1b
JD
1778# find if .align arg is power-of-two or not
1779if test $asmalign_pot = "unknown"; then
1780 asmalign_pot="no"
1781 echo 'asm (".align 3");' | check_cc && asmalign_pot="yes"
1782fi
1783
f70f03f6
MR
1784enabled_any $ENCODER_LIST && enable encoders
1785enabled_any $DECODER_LIST && enable decoders
1786enabled_any $MUXER_LIST && enable muxers
1787enabled_any $DEMUXER_LIST && enable demuxers
1788
8eee7025 1789enabled_any $THREADS_LIST && enable threads
f70f03f6
MR
1790
1791check_deps $CONFIG_LIST $HAVE_LIST $DECODER_LIST $ENCODER_LIST $PARSER_LIST \
1792 $DEMUXER_LIST $MUXER_LIST
1793
fb2ce7d9
MR
1794enabled libogg && append pkg_requires "ogg >= 1.1"
1795enabled libtheora && append pkg_requires "theora"
1796enabled libvorbis && append pkg_requires "vorbis vorbisenc"
1797enabled dc1394 && append pkg_requires "libraw1394"
1798
f36958f8
DB
1799echo "install prefix $PREFIX"
1800echo "source path $source_path"
1801echo "C compiler $cc"
1802echo "make $make"
bfd5afd8 1803echo ".align is power-of-two $asmalign_pot"
f36958f8 1804echo "ARCH $arch ($cpu)"
eb94aca9 1805if test "$BUILDSUF" != ""; then
f36958f8 1806 echo "build suffix $BUILDSUF"
eb94aca9 1807fi
f36958f8 1808echo "big-endian $bigendian"
419b8784 1809if test $arch = "x86_32" -o $arch = "x86_64"; then
f36958f8
DB
1810 echo "MMX enabled $mmx"
1811 echo "CMOV enabled $cmov"
7073e9fc 1812 echo "CMOV is fast $fast_cmov"
e41e8342 1813fi
cc6a90dd 1814if test $arch = "armv4l"; then
f36958f8 1815 echo "ARMv5TE enabled $armv5te"
edab3048 1816 echo "ARMv6 enabled $armv6"
f36958f8 1817 echo "IWMMXT enabled $iwmmxt"
eba9ae3c 1818fi
cc6a90dd 1819if test $arch = "mips"; then
f36958f8 1820 echo "MMI enabled $mmi"
e41e8342 1821fi
cc6a90dd 1822if test $arch = "powerpc"; then
f36958f8
DB
1823 echo "AltiVec enabled $altivec"
1824 echo "dcbzl available $dcbzl"
e41e8342 1825fi
f36958f8 1826echo "gprof enabled $gprof"
f36958f8
DB
1827echo "debug symbols $debug"
1828echo "strip symbols $dostrip"
1829echo "optimize $optimize"
5af4e0cc
MR
1830echo "static $static"
1831echo "shared $shared"
bfd5afd8
DB
1832echo "postprocessing support $pp"
1833echo "software scaler enabled $swscaler"
f36958f8 1834echo "video hooking $vhook"
90be59ef 1835if enabled vhook; then
f36958f8
DB
1836 echo "Imlib2 support $imlib2"
1837 echo "FreeType support $freetype2"
68892110 1838fi
bfd5afd8 1839echo "network support $network"
90be59ef 1840if enabled network; then
bfd5afd8
DB
1841 echo "IPv6 support $ipv6"
1842fi
e5f94c2b 1843echo "threading support $thread_type"
bfd5afd8 1844echo "SDL support $sdl"
90be59ef 1845if enabled sdl_too_old; then
bfd5afd8
DB
1846 echo "-> Your SDL version is too old - please upgrade to have FFplay/SDL support."
1847fi
1848echo "Sun medialib support $mlib"
1849echo "AVISynth enabled $avisynth"
7bc5f2a8 1850echo "liba52 support $liba52"
f8904fd9 1851echo "liba52 dlopened $liba52bin"
3ffab361 1852echo "libdts support $libdts"
2eed5a46
DB
1853echo "libfaac enabled $libfaac"
1854echo "libfaad enabled $libfaad"
1855echo "faadbin enabled $libfaadbin"
bfd5afd8 1856echo "libgsm enabled $libgsm"
6ebe07fb 1857echo "libmp3lame enabled $libmp3lame"
bfd5afd8
DB
1858echo "libnut enabled $libnut"
1859echo "libogg enabled $libogg"
150d2772 1860echo "libtheora enabled $libtheora"
bfd5afd8 1861echo "libvorbis enabled $libvorbis"
bfd5afd8 1862echo "x264 enabled $x264"
dc922953 1863echo "XviD enabled $xvid"
bfd5afd8 1864echo "zlib enabled $zlib"
f36958f8
DB
1865echo "AMR-NB float support $amr_nb"
1866echo "AMR-NB fixed support $amr_nb_fixed"
1867echo "AMR-WB float support $amr_wb"
37970ebf 1868if disabled gpl; then
f25fc9b1 1869 echo "License: LGPL"
b2e3c528 1870else
f25fc9b1 1871 echo "License: GPL"
b2e3c528 1872fi
de6d9b64 1873
29799f8b 1874echo "Creating config.mak and config.h..."
de6d9b64 1875
29799f8b
DB
1876echo "# Automatically generated by configure - do not modify!" > config.mak
1877echo "/* Automatically generated by configure - do not modify! */" > $TMPH
0fd12426 1878echo "#define FFMPEG_CONFIGURATION \"$FFMPEG_CONFIGURATION\"" >> $TMPH
de6d9b64 1879
2266e085
DB
1880echo "PREFIX=$PREFIX" >> config.mak
1881echo "prefix=\$(DESTDIR)\${PREFIX}" >> config.mak
9a695e98 1882echo "libdir=\$(DESTDIR)$libdir" >> config.mak
84c22efd 1883echo "shlibdir=\$(DESTDIR)$shlibdir" >> config.mak
1d67a1d4 1884echo "incdir=\$(DESTDIR)$incdir" >> config.mak
9a695e98
DB
1885echo "bindir=\$(DESTDIR)$bindir" >> config.mak
1886echo "mandir=\$(DESTDIR)$mandir" >> config.mak
4a908fbc 1887echo "MAKE=$make" >> config.mak
980fc7b8
FB
1888echo "CC=$cc" >> config.mak
1889echo "AR=$ar" >> config.mak
be7109c1 1890echo "RANLIB=$ranlib" >> config.mak
90be59ef 1891if enabled dostrip; then
f25fc9b1 1892 echo "STRIP=$strip" >> config.mak
65d1bea2 1893else
f25fc9b1 1894 echo "STRIP=echo ignoring strip" >> config.mak
65d1bea2 1895fi
75388c74 1896
a9b3f630 1897echo "OPTFLAGS=$CFLAGS" >> config.mak
408382a4 1898echo "VHOOKCFLAGS=$VHOOKCFLAGS">>config.mak
0f3cb305 1899echo "LDFLAGS=$LDFLAGS" >> config.mak
f39e56a8 1900echo "LDCONFIG=$LDCONFIG" >> config.mak
c536cb09 1901echo "FFSERVERLDFLAGS=$FFSERVERLDFLAGS" >> config.mak
e1707f52 1902echo "SHFLAGS=$SHFLAGS" >> config.mak
408382a4 1903echo "VHOOKSHFLAGS=$VHOOKSHFLAGS" >> config.mak
fbb9d104 1904echo "VHOOKLIBS=$VHOOKLIBS" >> config.mak
80581e98 1905echo "LIBOBJFLAGS=$LIBOBJFLAGS" >> config.mak
5af4e0cc 1906echo "BUILD_STATIC=$static" >> config.mak
eb94aca9 1907echo "BUILDSUF=$BUILDSUF" >> config.mak
f3ec2d46 1908echo "LIBPREF=$LIBPREF" >> config.mak
eb94aca9 1909echo "LIBSUF=\${BUILDSUF}$LIBSUF" >> config.mak
5af4e0cc 1910if enabled static; then
320d060a 1911 echo "LIB=$LIB" >> config.mak
1a44a8b6
AS
1912else # Some Make complain if this variable does not exist.
1913 echo "LIB=" >> config.mak
320d060a 1914fi
f3ec2d46 1915echo "SLIBPREF=$SLIBPREF" >> config.mak
eb94aca9
CY
1916echo "SLIBSUF=\${BUILDSUF}$SLIBSUF" >> config.mak
1917echo "EXESUF=\${BUILDSUF}$EXESUF" >> config.mak
4dc62701
MR
1918
1919ucarch=`toupper $arch`
1920echo "TARGET_ARCH_${ucarch}=yes" >> config.mak
1921echo "#define ARCH_${ucarch} 1" >> $TMPH
1922
1923# special cases
1924case "$arch" in
1925 x86_32|x86_64)
1926 echo "TARGET_ARCH_X86=yes" >> config.mak
1927 echo "#define ARCH_X86 1" >> $TMPH
1928 ;;
1929 powerpc)
1930 if test "$POWERPCMODE" = "64bits"; then
1931 echo "#define POWERPC_MODE_64BITS 1" >> $TMPH
4dc62701
MR
1932 fi
1933 ;;
1934 sparc64)
1935 echo "TARGET_ARCH_SPARC=yes" >> config.mak
1936 echo "#define ARCH_SPARC 1" >> $TMPH
1937 ;;
1938esac
1939
90be59ef 1940if enabled bigendian; then
0f3cb305
FB
1941 echo "WORDS_BIGENDIAN=yes" >> config.mak
1942 echo "#define WORDS_BIGENDIAN 1" >> $TMPH
91d1f1a4 1943fi
90be59ef 1944if enabled mmx; then
e82c5a8c 1945 echo "#define __CPU__ 586" >> $TMPH
de6d9b64 1946fi
44161118 1947
90be59ef 1948if enabled sdl; then
6a1a892f
FD
1949 echo "SDL_LIBS=`"${SDL_CONFIG}" --libs`" >> config.mak
1950 echo "SDL_CFLAGS=`"${SDL_CONFIG}" --cflags`" >> config.mak
a86b921c 1951fi
90be59ef 1952if enabled texi2html; then
146ea952
NB
1953 echo "BUILD_DOC=yes" >> config.mak
1954fi
5a872801 1955
790c9ca7 1956sws_version=`grep '#define LIBSWSCALE_VERSION ' "$source_path/libswscale/swscale.h" | sed 's/[^0-9\.]//g'`
6d9a2421 1957pp_version=`grep '#define LIBPOSTPROC_VERSION ' "$source_path/libpostproc/postprocess.h" | sed 's/[^0-9\.]//g'`
5a872801
LB
1958lavc_version=`grep '#define LIBAVCODEC_VERSION ' "$source_path/libavcodec/avcodec.h" | sed 's/[^0-9\.]//g'`
1959lavf_version=`grep '#define LIBAVFORMAT_VERSION ' "$source_path/libavformat/avformat.h" | sed 's/[^0-9\.]//g'`
1960lavu_version=`grep '#define LIBAVUTIL_VERSION ' "$source_path/libavutil/avutil.h" | sed 's/[^0-9\.]//g'`
1961
1962
1963
5af4e0cc 1964if enabled shared; then
0319c531 1965 echo "BUILD_SHARED=yes" >> config.mak
97006039 1966 echo "PIC=-fPIC -DPIC" >> config.mak
7e303556
DB
1967 echo "SPPMAJOR=${pp_version%%.*}" >> config.mak
1968 echo "SPPVERSION=$pp_version" >> config.mak
39503a27 1969 echo "LAVCMAJOR=${lavc_version%%.*}" >> config.mak
5a872801 1970 echo "LAVCVERSION=$lavc_version" >> config.mak
39503a27 1971 echo "LAVFMAJOR=${lavf_version%%.*}" >> config.mak
5a872801 1972 echo "LAVFVERSION=$lavf_version" >> config.mak
39503a27 1973 echo "LAVUMAJOR=${lavu_version%%.*}" >> config.mak
5a872801 1974 echo "LAVUVERSION=$lavu_version" >> config.mak
790c9ca7
LA
1975 echo "SWSMAJOR=${sws_version%%.*}" >> config.mak
1976 echo "SWSVERSION=$sws_version" >> config.mak
4bdd05e7 1977 echo "SLIBNAME=${SLIBNAME}" >> config.mak
f3b60109
DB
1978 echo "SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}" >> config.mak
1979 echo "SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}" >> config.mak
5cb854e1 1980 echo "SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}" >> config.mak
8fbec4f4 1981 echo "SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}" >> config.mak
0319c531 1982fi
d7e27559 1983echo "LIB_INSTALL_EXTRA_CMD=${LIB_INSTALL_EXTRA_CMD}" >> config.mak
ef0bc4c9 1984echo "EXTRALIBS=$extralibs" >> config.mak
d2845d68 1985
44161118
MR
1986print_config HAVE_ $TMPH config.mak $HAVE_LIST
1987print_config CONFIG_ $TMPH config.mak $CONFIG_LIST
1ac9331a 1988print_config TARGET_ $TMPH config.mak $TARGET_LIST
8ac17293 1989
ced75d92 1990if test "$targetos" = darwin; then
90cee0c3 1991 echo "#define CONFIG_DARWIN 1" >> $TMPH
90cee0c3
MN
1992fi
1993
c13e1abd
FH
1994echo "#define restrict $_restrict" >> $TMPH
1995
bb801c97
MN
1996if test "$optimize" = "small"; then
1997 echo "#define always_inline" >> $TMPH
e5f28e8f 1998 echo "#define CONFIG_SMALL 1" >> $TMPH
bb801c97
MN
1999fi
2000
997baf01
MR
2001echo "SRC_PATH=\"$source_path\"" >> config.mak
2002echo "SRC_PATH_BARE=$source_path" >> config.mak
2003echo "BUILD_ROOT=\"$PWD\"" >> config.mak
0f3cb305 2004
8156056e 2005# Apparently it's not possible to portably echo a backslash.
90be59ef 2006if enabled asmalign_pot; then
8156056e 2007 printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH
4454dc1b 2008else
8156056e 2009 printf '#define ASMALIGN(ZEROBITS) ".align 1<<" #ZEROBITS "\\n\\t"\n' >> $TMPH
4454dc1b
JD
2010fi
2011
bc634f6f 2012
1a2a5b3e
DB
2013for part in $DECODER_LIST $ENCODER_LIST $PARSER_LIST $DEMUXER_LIST $MUXER_LIST; do
2014 ucname="`toupper $part`"
a8d04fba
MR
2015 config_name="CONFIG_$ucname"
2016 enabled_name="ENABLE_$ucname"
1a2a5b3e 2017 if enabled $part; then
a8d04fba
MR
2018 echo "#define $config_name 1" >> $TMPH
2019 echo "#define $enabled_name 1" >> $TMPH
2020 echo "$config_name=yes" >> config.mak
2021 else
2022 echo "#define $enabled_name 0" >> $TMPH
2023 fi
009cf97d
MN
2024done
2025
9cb2cf10 2026# Do not overwrite config.h if unchanged to avoid superfluous rebuilds.
c683a5d1 2027if ! cmp -s $TMPH config.h; then
9cb2cf10
DB
2028 mv -f $TMPH config.h
2029else
2030 echo "config.h is unchanged"
2031fi
3d204385 2032
f3ec2d46 2033rm -f $TMPO $TMPC $TMPE $TMPS $TMPH
def4272a 2034
165af439 2035# build tree in object directory if source path is different from current one
90be59ef 2036if enabled source_path_used; then
165af439
MR
2037 DIRS="\
2038 doc \
2039 libavformat \
2040 libavcodec \
2041 libavcodec/alpha \
2042 libavcodec/armv4l \
2043 libavcodec/bfin \
2044 libavcodec/i386 \
2045 libavcodec/sparc \
2046 libavcodec/mlib \
2047 libavcodec/ppc \
3918dc4f 2048 libavcodec/amr \
165af439
MR
2049 libpostproc \
2050 libavutil \
2051 libswscale \
2052 tests \
2053 vhook \
2054 "
2055 FILES="\
2056 Makefile \
2057 common.mak \
2058 libavformat/Makefile \
2059 libavcodec/Makefile \
2060 libpostproc/Makefile \
2061 libavutil/Makefile \
2062 libswscale/Makefile \
2063 tests/Makefile \
2064 vhook/Makefile \
2065 doc/Makefile \
2066 doc/texi2pod.pl \
2067 "
2068 for dir in $DIRS ; do
2069 mkdir -p $dir
2070 done
2071 for f in $FILES ; do
2072 ln -sf "$source_path/$f" $f
2073 done
2074fi
def4272a 2075
def4272a 2076
d0674868 2077# build pkg-config files
77aee36c 2078# FIXME: libdir and includedir are hardcoded and may differ from the real path.
def4272a 2079
d0674868
DB
2080pkgconfig_generate(){
2081name=$1
2082comment=$2
2083version=$3
2084libs=$4
2085requires=$5
2086include=$6
2087cat <<EOF >$name.pc
2266e085 2088prefix=$PREFIX
a94e666c 2089exec_prefix=\${prefix}
def4272a 2090libdir=\${exec_prefix}/lib
a94e666c 2091includedir=\${prefix}/include
def4272a 2092
d0674868
DB
2093Name: $name
2094Description: $comment
2095Version: $version
2096Requires: $requires
def4272a 2097Conflicts:
d0674868
DB
2098Libs: -L\${libdir} $libs
2099Cflags: -I\${includedir} -I\${includedir}/$include
def4272a 2100EOF
d0674868 2101}
def4272a 2102
d0674868
DB
2103pkgconfig_generate_uninstalled(){
2104name=$1
9c476fd6 2105shortname=${name#lib}
d0674868
DB
2106comment=$2
2107version=$3
2108libs=$4
2109requires=$5
2110cat <<EOF >$name-uninstalled.pc
def4272a
AJ
2111prefix=
2112exec_prefix=
d0674868
DB
2113libdir=\${pcfiledir}/$name
2114includedir=\${pcfiledir}/$name
def4272a 2115
d0674868
DB
2116Name: $name
2117Description: $comment
2118Version: $version
2119Requires: $requires
def4272a 2120Conflicts:
d0674868 2121Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
def4272a
AJ
2122Cflags: -I\${includedir}
2123EOF
d0674868 2124}
def4272a 2125
9d824ad1 2126pkgconfig_generate libavutil "FFmpeg utility library" "$lavu_version" -lavutil "" ffmpeg
d0674868 2127pkgconfig_generate_uninstalled libavutil "FFmpeg utility library" "$lavu_version"
def4272a 2128
d0674868
DB
2129pkgconfig_generate libavcodec "FFmpeg codec library" "$lavc_version" "-lavcodec $extralibs" "$pkg_requires libavutil = $lavu_version" ffmpeg
2130pkgconfig_generate_uninstalled libavcodec "FFmpeg codec library" "$lavc_version" "$extralibs" "$pkg_requires libavutil = $lavu_version"
def4272a 2131
d0674868
DB
2132pkgconfig_generate libavformat "FFmpeg container format library" "$lavf_version" "-lavformat $extralibs" "$pkg_requires libavcodec = $lavc_version" ffmpeg
2133pkgconfig_generate_uninstalled libavformat "FFmpeg container format library" "$lavf_version" "$extralibs" "$pkg_requires libavcodec = $lavc_version"
def4272a 2134
90be59ef 2135if enabled pp; then
2e3bcd38
DB
2136 pkgconfig_generate libpostproc "FFmpeg post processing library" "$pp_version" -lpostproc "" postproc
2137 pkgconfig_generate_uninstalled libpostproc "FFmpeg post processing library" "$pp_version"
2138fi
790c9ca7 2139
c839db53 2140if enabled swscaler; then
3d3361e5 2141 pkgconfig_generate libswscale "FFmpeg image rescaling library" "$sws_version" -lswscale "libavutil = $lavu_version" ffmpeg
20c516c6 2142 pkgconfig_generate_uninstalled libswscale "FFmpeg image rescaling library" "$sws_version" "" "libavutil = $lavu_version"
6c0d0413 2143else
3d3361e5 2144 pkgconfig_generate libswscale "FFmpeg image rescaling library" "$sws_version" "" "$pkg_requires libavcodec = $lavc_version" ffmpeg
d0674868 2145 pkgconfig_generate_uninstalled libswscale "FFmpeg image rescaling library" "$sws_version" "" "$pkg_requires libavcodec = $lavc_version"
c505dd31
MR
2146 apply libswscale.pc sed s/^Libs:.*$/Libs:/
2147 apply libswscale-uninstalled.pc sed s/^Libs:.*$/Libs:/
6c0d0413 2148fi