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