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