Alpha: use -g3 with ccc to allow optimisation with debugging symbols
[libav.git] / configure
CommitLineData
aeb29222 1#!/bin/sh
0f3cb305 2#
f57620d5
MR
3# FFmpeg configure script
4#
949906ea
DB
5# Copyright (c) 2000-2002 Fabrice Bellard
6# Copyright (c) 2005-2008 Diego Biurrun
7# Copyright (c) 2005-2008 Mans Rullgard
0f3cb305 8#
cf9d24ad 9
31e647f8 10# Prevent locale nonsense from breaking basic text processing.
79ab96ba
DB
11LC_ALL=C
12export LC_ALL
31e647f8 13
cde2d79a 14# make sure we are running under a compatible shell
c21d6325
MR
15# try to make this part work with most shells
16
17try_exec(){
0dbe81bb 18 echo "Trying shell $1"
2270b4b2 19 type "$1" > /dev/null 2>&1 && exec "$@"
c21d6325
MR
20}
21
5237ce67 22unset foo
2270b4b2 23(: ${foo%%bar}) 2> /dev/null
0dbe81bb
MR
24E1="$?"
25
2270b4b2 26(: ${foo?}) 2> /dev/null
0dbe81bb
MR
27E2="$?"
28
29if test "$E1" != 0 || test "$E2" = 0; then
30 echo "Broken shell detected. Trying alternatives."
c21d6325
MR
31 export FF_CONF_EXEC
32 if test "0$FF_CONF_EXEC" -lt 1; then
33 FF_CONF_EXEC=1
34 try_exec bash "$0" "$@"
35 fi
36 if test "0$FF_CONF_EXEC" -lt 2; then
37 FF_CONF_EXEC=2
38 try_exec ksh "$0" "$@"
39 fi
40 if test "0$FF_CONF_EXEC" -lt 3; then
41 FF_CONF_EXEC=3
42 try_exec /usr/xpg4/bin/sh "$0" "$@"
cde2d79a
MR
43 fi
44 echo "No compatible shell script interpreter found."
fc53da20 45 echo "This configure script requires a POSIX-compatible shell"
c21d6325 46 echo "such as bash or ksh."
505dfb09
DB
47 echo "THIS IS NOT A BUG IN FFMPEG, DO NOT REPORT IT AS SUCH."
48 echo "Instead, install a working POSIX-compatible shell."
49 echo "Disabling this configure test will create a broken FFmpeg."
c21d6325
MR
50 if test "$BASH_VERSION" = '2.04.0(1)-release'; then
51 echo "This bash version ($BASH_VERSION) is broken on your platform."
52 echo "Upgrade to a later version if available."
53 fi
cde2d79a
MR
54 exit 1
55fi
56
74c53c2d
MR
57show_help(){
58 echo "Usage: configure [options]"
59 echo "Options: [defaults in brackets after descriptions]"
60 echo
61 echo "Standard options:"
62 echo " --help print this message"
8c6afa4d
DB
63 echo " --logfile=FILE log tests and output to FILE [config.err]"
64 echo " --disable-logging do not log configure debug information"
3e89171a 65 echo " --prefix=PREFIX install in PREFIX [$prefix]"
d156bede 66 echo " --bindir=DIR install binaries in DIR [PREFIX/bin]"
14a8acf1 67 echo " --datadir=DIR install data files in DIR [PREFIX/share/ffmpeg]"
74c53c2d 68 echo " --libdir=DIR install libs in DIR [PREFIX/lib]"
84c22efd 69 echo " --shlibdir=DIR install shared libs in DIR [PREFIX/lib]"
5341d856 70 echo " --incdir=DIR install includes in DIR [PREFIX/include]"
4ca5ece5 71 echo " --mandir=DIR install man page in DIR [PREFIX/share/man]"
62560865
DB
72 echo
73 echo "Configuration options:"
e6b9d588
DB
74 echo " --disable-static do not build static libraries [no]"
75 echo " --enable-shared build shared libraries [no]"
0a23c0bb
DB
76 echo " --enable-gpl allow use of GPL code, the resulting libs"
77 echo " and binaries will be under GPL [no]"
78 echo " --enable-nonfree allow use of nonfree code, the resulting libs"
79 echo " and binaries will be unredistributable [no]"
62560865
DB
80 echo " --disable-ffmpeg disable ffmpeg build"
81 echo " --disable-ffplay disable ffplay build"
82 echo " --disable-ffserver disable ffserver build"
e6b9d588 83 echo " --enable-postproc enable GPLed postprocessing support [no]"
fdf11906 84 echo " --enable-avfilter video filter support [no]"
0a23c0bb 85 echo " --enable-avfilter-lavf video filters dependent on avformat [no]"
e6b9d588
DB
86 echo " --enable-beosthreads use BeOS threads [no]"
87 echo " --enable-os2threads use OS/2 threads [no]"
88 echo " --enable-pthreads use pthreads [no]"
89 echo " --enable-w32threads use Win32 threads [no]"
90 echo " --enable-x11grab enable X11 grabbing [no]"
732c9a34 91 echo " --enable-vdpau enable VDPAU support [no]"
62560865
DB
92 echo " --disable-network disable network support [no]"
93 echo " --disable-ipv6 disable IPv6 support [no]"
94 echo " --disable-mpegaudio-hp faster (but less accurate) MPEG audio decoding [no]"
95 echo " --enable-gray enable full grayscale support (slower color)"
242e2270 96 echo " --enable-fastdiv enable table-based division"
62560865
DB
97 echo " --enable-small optimize for size instead of speed"
98 echo " --disable-aandct disable AAN DCT code"
99 echo " --disable-fft disable FFT code"
100 echo " --disable-golomb disable Golomb code"
101 echo " --disable-mdct disable MDCT code"
68602540 102 echo " --disable-rdft disable RDFT code"
62560865
DB
103 echo " --enable-hardcoded-tables use hardcoded tables instead of runtime generation"
104 echo " --enable-memalign-hack emulate memalign, interferes with memory debuggers"
105 echo " --enable-beos-netserver enable BeOS netserver"
106 echo " --disable-encoder=NAME disable encoder NAME"
107 echo " --enable-encoder=NAME enable encoder NAME"
108 echo " --disable-encoders disable all encoders"
109 echo " --disable-decoder=NAME disable decoder NAME"
110 echo " --enable-decoder=NAME enable decoder NAME"
111 echo " --disable-decoders disable all decoders"
112 echo " --disable-muxer=NAME disable muxer NAME"
113 echo " --enable-muxer=NAME enable muxer NAME"
114 echo " --disable-muxers disable all muxers"
115 echo " --disable-demuxer=NAME disable demuxer NAME"
116 echo " --enable-demuxer=NAME enable demuxer NAME"
117 echo " --disable-demuxers disable all demuxers"
118 echo " --enable-parser=NAME enable parser NAME"
119 echo " --disable-parser=NAME disable parser NAME"
120 echo " --disable-parsers disable all parsers"
121 echo " --enable-bsf=NAME enable bitstream filter NAME"
122 echo " --disable-bsf=NAME disable bitstream filter NAME"
123 echo " --disable-bsfs disable all bitstream filters"
124 echo " --enable-protocol=NAME enable protocol NAME"
125 echo " --disable-protocol=NAME disable protocol NAME"
126 echo " --disable-protocols disable all protocols"
127 echo " --disable-indevs disable input devices"
128 echo " --disable-outdevs disable output devices"
129 echo " --disable-devices disable all devices"
130 echo " --enable-filter=NAME enable filter NAME"
131 echo " --disable-filter=NAME disable filter NAME"
132 echo " --disable-filters disable all filters"
133 echo " --list-decoders show all available decoders"
134 echo " --list-encoders show all available encoders"
135 echo " --list-muxers show all available muxers"
136 echo " --list-demuxers show all available demuxers"
137 echo " --list-parsers show all available parsers"
138 echo " --list-protocols show all available protocols"
139 echo " --list-bsfs show all available bitstream filters"
140 echo " --list-indevs show all available input devices"
141 echo " --list-outdevs show all available output devices"
142 echo " --list-filters show all available filters"
0a622b98
MR
143 echo
144 echo "External library support:"
0a23c0bb 145 echo " --enable-avisynth enable reading of AVISynth script files [no]"
27cb5cbc
CEH
146 echo " --enable-bzlib enable bzlib [autodetect]"
147 echo " --enable-libamr-nb enable libamr-nb floating point audio codec [no]"
148 echo " --enable-libamr-wb enable libamr-wb floating point audio codec [no]"
f7b8bffe 149 echo " --enable-libdc1394 enable IIDC-1394 grabbing using libdc1394"
e6b9d588
DB
150 echo " and libraw1394 [no]"
151 echo " --enable-libdirac enable Dirac support via libdirac [no]"
152 echo " --enable-libfaac enable FAAC support via libfaac [no]"
153 echo " --enable-libfaad enable FAAD support via libfaad [no]"
154 echo " --enable-libfaadbin open libfaad.so.0 at runtime [no]"
155 echo " --enable-libgsm enable GSM support via libgsm [no]"
156 echo " --enable-libmp3lame enable MP3 encoding via libmp3lame [no]"
31235134 157 echo " --enable-libnut enable NUT (de)muxing via libnut,"
0a23c0bb 158 echo " native (de)muxer exists [no]"
9a77d59a 159 echo " --enable-libopenjpeg enable JPEG 2000 decoding via OpenJPEG [no]"
e6b9d588
DB
160 echo " --enable-libschroedinger enable Dirac support via libschroedinger [no]"
161 echo " --enable-libspeex enable Speex decoding via libspeex [no]"
162 echo " --enable-libtheora enable Theora encoding via libtheora [no]"
f9def9cc 163 echo " --enable-libvorbis enable Vorbis encoding via libvorbis,"
e6b9d588
DB
164 echo " native implementation exists [no]"
165 echo " --enable-libx264 enable H.264 encoding via x264 [no]"
1cc60c47 166 echo " --enable-libxvid enable Xvid encoding via xvidcore,"
e6b9d588 167 echo " native MPEG-4/Xvid encoder exists [no]"
732c9a34 168 echo " --enable-mlib enable Sun medialib [no]"
27cb5cbc 169 echo " --enable-zlib enable zlib [autodetect]"
74c53c2d
MR
170 echo ""
171 echo "Advanced options (experts only):"
172 echo " --source-path=PATH path to source code [$source_path]"
173 echo " --cross-prefix=PREFIX use PREFIX for compilation tools [$cross_prefix]"
db6107b6 174 echo " --enable-cross-compile assume a cross-compiler is used"
c5200f17
MR
175 echo " --sysroot=PATH root of cross-build tree"
176 echo " --sysinclude=PATH location of cross-build system headers"
4f854758 177 echo " --target-os=OS compiler targets OS [$target_os]"
a7ada2ba
MR
178 echo " --target-exec=CMD command to run executables on target"
179 echo " --target-path=DIR path to view of build directory on target"
89641463 180 echo " --nm=NM use nm tool"
15396d5c 181 echo " --cc=CC use C compiler CC [$cc_default]"
9da6609f
MR
182 echo " --host-cc=HOSTCC use host C compiler HOSTCC"
183 echo " --host-cflags=HCFLAGS use HCFLAGS when compiling for host"
184 echo " --host-ldflags=HLDFLAGS use HLDFLAGS when linking for host"
185 echo " --host-libs=HLIBS use libs HLIBS when linking for host"
74c53c2d
MR
186 echo " --extra-cflags=ECFLAGS add ECFLAGS to CFLAGS [$CFLAGS]"
187 echo " --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]"
188 echo " --extra-libs=ELIBS add ELIBS [$ELIBS]"
ac63af34 189 echo " --extra-version=STRING version string suffix []"
0a23c0bb
DB
190 echo " --build-suffix=SUFFIX library name suffix []"
191 echo " --arch=ARCH select architecture [$arch]"
192 echo " --cpu=CPU select the minimum required CPU (affects"
7c758d33 193 echo " instruction selection, may crash on older CPUs)"
2b4c3615 194 echo " --enable-powerpc-perf enable performance report on PPC"
74c53c2d 195 echo " (requires enabling PMC)"
4f50c3d5 196 echo " --disable-altivec disable AltiVec optimizations"
3bf96eec 197 echo " --disable-amd3dnow disable 3DNow! optimizations"
a1ef9f08 198 echo " --disable-amd3dnowext disable 3DNow! extended optimizations"
0a23c0bb
DB
199 echo " --disable-mmx disable MMX optimizations"
200 echo " --disable-mmx2 disable MMX2 optimizations"
1bb04d5a 201 echo " --disable-sse disable SSE optimizations"
0a23c0bb
DB
202 echo " --disable-ssse3 disable SSSE3 optimizations"
203 echo " --disable-armv5te disable armv5te optimizations"
204 echo " --disable-armv6 disable armv6 optimizations"
26c7aa17 205 echo " --disable-armv6t2 disable armv6t2 optimizations"
3bbcba32 206 echo " --disable-armvfp disable ARM VFP optimizations"
0a23c0bb 207 echo " --disable-iwmmxt disable iwmmxt optimizations"
49276307
DB
208 echo " --disable-mmi disable MMI optimizations"
209 echo " --disable-neon disable neon optimizations"
210 echo " --disable-vis disable VIS optimizations"
7595a5e4 211 echo " --disable-yasm disable use of yasm assembler"
0a622b98
MR
212 echo
213 echo "Developer options (useful when working on FFmpeg itself):"
9c56a1f9 214 echo " --disable-debug disable debugging symbols"
b7d49373 215 echo " --enable-debug=LEVEL set the debug level [$debuglevel]"
0a622b98 216 echo " --enable-gprof enable profiling with gprof [$gprof]"
d2bbb2f7 217 echo " --disable-optimizations disable compiler optimizations"
0a622b98 218 echo " --enable-extra-warnings enable more compiler warnings"
87a0fb62 219 echo " --disable-stripping disable stripping of executables and shared libraries"
74c53c2d
MR
220 echo ""
221 echo "NOTE: Object files are built at the place where configure is launched."
60e8bc13 222 exit 0
74c53c2d 223}
cf9d24ad 224
57bd82d4 225log(){
2270b4b2 226 echo "$@" >> $logfile
57bd82d4
MR
227}
228
720c69da 229log_file(){
c8e9f801 230 log BEGIN $1
2270b4b2 231 pr -n -t $1 >> $logfile
c8e9f801
MR
232 log END $1
233}
234
2ba042a7 235echolog(){
c8e9f801 236 log "$@"
57bd82d4 237 echo "$@"
2ba042a7
MR
238}
239
240die(){
241 echolog "$@"
242 cat <<EOF
243If you think configure made a mistake, make sure you are using the latest
244version from SVN. If the latest version fails, report the problem to the
e5d8ccd7 245ffmpeg-user@mplayerhq.hu mailing list or IRC #ffmpeg on irc.freenode.net.
2ba042a7 246EOF
e155a21a 247 if disabled logging; then
2ba042a7 248 cat <<EOF
e155a21a
DB
249Rerun configure with logging enabled (do not use --disable-logging), and
250include the log this produces with your report.
2ba042a7
MR
251EOF
252 else
253cat <<EOF
e155a21a
DB
254Include the log file "$logfile" produced by configure as this will help
255solving the problem.
2ba042a7
MR
256EOF
257 fi
57bd82d4
MR
258 exit 1
259}
260
6c6007d6 261# Avoid locale weirdness, besides we really just want to translate ASCII.
44161118 262toupper(){
6c6007d6 263 echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
44161118
MR
264}
265
4a5444db 266tolower(){
6c6007d6 267 echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
4a5444db
MR
268}
269
14a8acf1
MR
270c_escape(){
271 echo "$*" | sed 's/["\\]/\\\0/g'
272}
273
a8d04fba
MR
274set_all(){
275 value=$1
276 shift
277 for var in $*; do
278 eval $var=$value
279 done
280}
281
72a43668
MR
282set_weak(){
283 value=$1
284 shift
285 for var; do
286 eval : \${$var:=$value}
287 done
288}
289
799c9e9b
MR
290pushvar(){
291 for var in $*; do
292 eval level=\${${var}_level:=0}
293 eval ${var}_${level}="\$$var"
294 eval ${var}_level=$(($level+1))
295 done
296}
297
298popvar(){
299 for var in $*; do
300 eval level=\${${var}_level:-0}
301 test $level = 0 && continue
302 eval level=$(($level-1))
303 eval $var="\${${var}_${level}}"
304 eval ${var}_level=$level
305 eval unset ${var}_${level}
306 done
307}
308
a8d04fba
MR
309enable(){
310 set_all yes $*
311}
312
313disable(){
314 set_all no $*
315}
316
72a43668
MR
317enable_weak(){
318 set_weak yes $*
319}
320
321disable_weak(){
322 set_weak no $*
323}
324
72702705
MR
325enable_safe(){
326 enable $(echo "$*" | sed 's/[^A-Za-z0-9_ ]/_/g')
327}
328
329disable_safe(){
330 disable $(echo "$*" | sed 's/[^A-Za-z0-9_ ]/_/g')
331}
332
f9d328da
MR
333do_enable_deep(){
334 for var; do
335 enabled $var && continue
336 eval sel="\$${var}_select"
c510c7b5
MR
337 eval sgs="\$${var}_suggest"
338 pushvar var sgs
f9d328da 339 enable_deep $sel
c510c7b5
MR
340 popvar sgs
341 enable_deep_weak $sgs
f9d328da
MR
342 popvar var
343 done
344}
345
346enable_deep(){
347 do_enable_deep $*
348 enable $*
349}
350
72a43668
MR
351enable_deep_weak(){
352 do_enable_deep $*
353 enable_weak $*
354}
355
57bd82d4 356enabled(){
3250003c
MR
357 test "${1#!}" = "$1" && op== || op=!=
358 eval test "x\$${1#!}" $op "xyes"
44161118
MR
359}
360
37970ebf 361disabled(){
3250003c
MR
362 test "${1#!}" = "$1" && op== || op=!=
363 eval test "x\$${1#!}" $op "xno"
37970ebf
RP
364}
365
44161118
MR
366enabled_all(){
367 for opt; do
368 enabled $opt || return 1
369 done
370}
371
85bca2c5
DB
372disabled_all(){
373 for opt; do
374 disabled $opt || return 1
375 done
376}
377
44161118
MR
378enabled_any(){
379 for opt; do
380 enabled $opt && return 0
381 done
382}
383
85bca2c5
DB
384disabled_any(){
385 for opt; do
386 disabled $opt && return 0
387 done
f7b230a7 388 return 1
85bca2c5
DB
389}
390
c9d19248
MR
391set_default(){
392 for opt; do
88268e94 393 eval : \${$opt:=\$${opt}_default}
c9d19248
MR
394 done
395}
396
4a0d6686
AJ
397is_in(){
398 value=$1
399 shift
400 for var in $*; do
401 [ $var = $value ] && return 0
402 done
403 return 1
404}
405
30fd06be
MR
406check_deps(){
407 for cfg; do
3250003c 408 cfg="${cfg#!}"
799c9e9b
MR
409 enabled ${cfg}_checking && die "Circular dependency for $cfg."
410 disabled ${cfg}_checking && continue
411 enable ${cfg}_checking
412
30fd06be
MR
413 eval dep_all="\$${cfg}_deps"
414 eval dep_any="\$${cfg}_deps_any"
7ef3425f 415 eval dep_sel="\$${cfg}_select"
c510c7b5 416 eval dep_sgs="\$${cfg}_suggest"
799c9e9b 417
c510c7b5
MR
418 pushvar cfg dep_all dep_any dep_sel dep_sgs
419 check_deps $dep_all $dep_any $dep_sel $dep_sgs
420 popvar cfg dep_all dep_any dep_sel dep_sgs
799c9e9b 421
6a702d4c
MR
422 enabled_all $dep_all || disable $cfg
423 enabled_any $dep_any || disable $cfg
7ef3425f 424 disabled_any $dep_sel && disable $cfg
799c9e9b 425
4ec45764
RP
426 if enabled $cfg; then
427 eval dep_extralibs="\$${cfg}_extralibs"
428 test -n "$dep_extralibs" && add_extralibs $dep_extralibs
f9d328da 429 enable_deep $dep_sel
c510c7b5 430 enable_deep_weak $dep_sgs
4ec45764
RP
431 fi
432
799c9e9b 433 disable ${cfg}_checking
30fd06be
MR
434 done
435}
436
44161118
MR
437print_config(){
438 pfx=$1
439 header=$2
440 makefile=$3
441 shift 3
442 for cfg; do
3d907e22 443 ucname="`toupper $cfg`"
44161118 444 if enabled $cfg; then
3d907e22 445 echo "#define ${pfx}${ucname} 1" >> $header
3d907e22
MR
446 echo "${pfx}${ucname}=yes" >> $makefile
447 else
b250f9c6 448 echo "#define ${pfx}${ucname} 0" >> $header
44161118
MR
449 fi
450 done
57bd82d4
MR
451}
452
453flags_saved(){
2270b4b2 454 (: ${SAVE_CFLAGS?}) 2> /dev/null
57bd82d4
MR
455}
456
dcd479c0 457save_flags(){
57bd82d4 458 flags_saved && return
dcd479c0
MR
459 SAVE_CFLAGS="$CFLAGS"
460 SAVE_LDFLAGS="$LDFLAGS"
461 SAVE_extralibs="$extralibs"
462}
463
464restore_flags(){
f5d28d10 465 flags_saved || return
dcd479c0
MR
466 CFLAGS="$SAVE_CFLAGS"
467 LDFLAGS="$SAVE_LDFLAGS"
468 extralibs="$SAVE_extralibs"
469 unset SAVE_CFLAGS
470 unset SAVE_LDFLAGS
471 unset SAVE_extralibs
472}
473
474temp_cflags(){
475 save_flags
476 CFLAGS="$CFLAGS $*"
477}
478
479temp_ldflags(){
480 save_flags
481 LDFLAGS="$LDFLAGS $*"
482}
483
484temp_extralibs(){
485 save_flags
486 extralibs="$extralibs $*"
487}
488
57bd82d4
MR
489append(){
490 var=$1
491 shift
492 flags_saved && eval "SAVE_$var=\"\$SAVE_$var $*\""
493 eval "$var=\"\$$var $*\""
494}
495
496add_cflags(){
497 append CFLAGS "$@"
498}
499
500add_ldflags(){
501 append LDFLAGS "$@"
502}
503
504add_extralibs(){
505 append extralibs "$@"
506}
507
b0cfb663 508check_cmd(){
b3cb5d51 509 log "$@"
2270b4b2 510 "$@" >> $logfile 2>&1
b0cfb663
MR
511}
512
dcd479c0 513check_cc(){
57bd82d4 514 log check_cc "$@"
2270b4b2 515 cat > $TMPC
720c69da 516 log_file $TMPC
b0cfb663 517 check_cmd $cc $CFLAGS "$@" -c -o $TMPO $TMPC
57bd82d4
MR
518}
519
520check_cpp(){
521 log check_cpp "$@"
2270b4b2 522 cat > $TMPC
720c69da 523 log_file $TMPC
b0cfb663 524 check_cmd $cc $CFLAGS "$@" -E -o $TMPO $TMPC
dcd479c0
MR
525}
526
940f335a
MR
527check_asm(){
528 log check_asm "$@"
529 name="$1"
530 asm="$2"
531 shift 2
532 check_cc "$@" <<EOF && enable $name || disable $name
124c21d7 533void foo(void){ __asm__ volatile($asm); }
940f335a
MR
534EOF
535}
536
304d586d
LM
537check_yasm(){
538 log check_yasm "$@"
539 echo "$1" > $TMPS
540 log_file $TMPS
541 shift 1
542 check_cmd $yasmexe $YASMFLAGS "$@" -o $TMPO $TMPS
543}
544
dcd479c0 545check_ld(){
57bd82d4 546 log check_ld "$@"
0607887f 547 check_cc || return
3155a644
MR
548 flags=''
549 libs=''
550 for f; do
551 test "${f}" = "${f#-l}" && flags="$flags $f" || libs="$libs $f"
552 done
553 check_cmd $cc $LDFLAGS $flags -o $TMPE $TMPO $extralibs $libs
dcd479c0
MR
554}
555
556check_cflags(){
57bd82d4
MR
557 log check_cflags "$@"
558 check_cc "$@" <<EOF && add_cflags "$@"
dcd479c0
MR
559int x;
560EOF
561}
562
563check_ldflags(){
57bd82d4
MR
564 log check_ldflags "$@"
565 check_ld "$@" <<EOF && add_ldflags "$@"
c23a0ac8 566int main(void){ return 0; }
dcd479c0
MR
567EOF
568}
569
570check_header(){
57bd82d4 571 log check_header "$@"
dcd479c0
MR
572 header=$1
573 shift
b77df637
MR
574 disable_safe $header
575 check_cpp "$@" <<EOF && enable_safe $header
dcd479c0
MR
576#include <$header>
577int x;
578EOF
579}
580
581check_func(){
57bd82d4 582 log check_func "$@"
dcd479c0
MR
583 func=$1
584 shift
d8bc5f06
MR
585 disable $func
586 check_ld "$@" <<EOF && enable $func
dcd479c0 587extern int $func();
c23a0ac8 588int main(void){ $func(); }
dcd479c0
MR
589EOF
590}
591
2446d3d6
DB
592check_func_headers(){
593 log check_func_headers "$@"
f8d7b072
MR
594 headers=$1
595 func=$2
596 shift 2
597 disable $func
598 incs=""
599 for hdr in $headers; do
600 incs="$incs
601#include <$hdr>"
602 done
cd0d9a9d 603 check_ld "$@" <<EOF && enable $func && enable_safe $headers
f8d7b072 604$incs
d6773f56 605int main(int argc, char **argv){
f8d7b072
MR
606 (void) $func;
607 return 0;
608}
609EOF
610}
611
a5344cf7
SS
612check_cpp_condition(){
613 log check_cpp_condition "$@"
614 header=$1
615 condition=$2
616 check_cpp <<EOF
617#include <$header>
618#if !($condition)
619#error "unsatisfied condition: $condition"
620#endif
621EOF
622}
623
57bd82d4
MR
624check_lib(){
625 log check_lib "$@"
626 header="$1"
627 func="$2"
628 shift 2
fcfcde17
MR
629 temp_extralibs "$@"
630 check_header $header && check_func $func && add_extralibs "$@"
631 err=$?
632 restore_flags
633 return $err
57bd82d4
MR
634}
635
f8d7b072
MR
636check_lib2(){
637 log check_lib2 "$@"
638 headers="$1"
639 func="$2"
640 shift 2
641 temp_extralibs "$@"
2446d3d6 642 check_func_headers "$headers" $func && add_extralibs "$@"
f8d7b072
MR
643 err=$?
644 restore_flags
645 return $err
646}
647
dcd479c0 648check_exec(){
2270b4b2 649 check_ld "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
57bd82d4
MR
650}
651
7dfef245
MR
652check_exec_crash(){
653 code=`cat`
654
655 # exit() is not async signal safe. _Exit (C99) and _exit (POSIX)
656 # are safe but may not be available everywhere. Thus we use
657 # raise(SIGTERM) instead. The check is run in a subshell so we
658 # can redirect the "Terminated" message from the shell. SIGBUS
659 # is not defined by standard C so it is used conditionally.
660
2270b4b2 661 (check_exec "$@") >> $logfile 2>&1 <<EOF
7dfef245
MR
662#include <signal.h>
663static void sighandler(int sig){
664 raise(SIGTERM);
665}
e5af4a11 666int main(void){
7dfef245
MR
667 signal(SIGILL, sighandler);
668 signal(SIGFPE, sighandler);
669 signal(SIGSEGV, sighandler);
670#ifdef SIGBUS
671 signal(SIGBUS, sighandler);
672#endif
673 { $code }
674}
675EOF
676}
677
72be9e73
DY
678check_type(){
679 log check_type "$@"
680 headers=$1
681 type=$2
682 shift 2
683 disable $type
684 incs=""
685 for hdr in $headers; do
686 incs="$incs
687#include <$hdr>"
688 done
689 check_cc "$@" <<EOF && enable $type
690$incs
691$type v;
692EOF
693}
694
57bd82d4
MR
695require(){
696 name="$1"
697 header="$2"
698 func="$3"
699 shift 3
700 check_lib $header $func "$@" || die "ERROR: $name not found"
dcd479c0
MR
701}
702
f8d7b072
MR
703require2(){
704 name="$1"
705 headers="$2"
706 func="$3"
707 shift 3
708 check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
709}
710
eea50282
MR
711check_foo_config(){
712 cfg=$1
713 pkg=$2
714 header=$3
715 func=$4
716 shift 4
717 disable $cfg
718 check_cmd ${pkg}-config --version
719 err=$?
720 if test "$err" = 0; then
721 temp_cflags `${pkg}-config --cflags`
722 temp_extralibs `${pkg}-config --libs`
723 check_lib "$@" $header $func && enable $cfg
724 fi
725 return $err
726}
727
c505dd31
MR
728apply(){
729 file=$1
730 shift
731 "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
732}
733
dcd61286
DB
734# CONFIG_LIST contains configurable options, while HAVE_LIST is for
735# system-dependent things.
736
4a0d6686
AJ
737COMPONENT_LIST="
738 bsfs
739 decoders
740 demuxers
741 encoders
3cde40aa 742 filters
c552605c 743 indevs
4a0d6686 744 muxers
c552605c 745 outdevs
4a0d6686
AJ
746 parsers
747 protocols
748"
749
750CONFIG_LIST="
751 $COMPONENT_LIST
e8ed9b7a 752 aandct
f7679c54
VS
753 avfilter
754 avfilter_lavf
c88f5d72
MR
755 avisynth
756 beos_netserver
f402916e 757 bzlib
27a9466b 758 fastdiv
c88f5d72
MR
759 ffmpeg
760 ffplay
761 ffserver
1848f7d9 762 fft
4f034993 763 golomb
c88f5d72 764 gpl
ecfc4f44 765 gprof
d8d0d0b2 766 gray
3abe5fbd 767 hardcoded_tables
c88f5d72 768 ipv6
f5a756ef
DB
769 libamr_nb
770 libamr_wb
f7b8bffe 771 libdc1394
690bfceb 772 libdirac
2eed5a46
DB
773 libfaac
774 libfaad
775 libfaadbin
c88f5d72 776 libgsm
6ebe07fb 777 libmp3lame
c88f5d72 778 libnut
9a77d59a 779 libopenjpeg
f7cd9eed 780 libschroedinger
ae14f311 781 libspeex
150d2772 782 libtheora
c88f5d72 783 libvorbis
1cc60c47
DB
784 libx264
785 libxvid
47a158cb 786 mdct
c88f5d72 787 memalign_hack
a8150374 788 mlib
c88f5d72
MR
789 mpegaudio_hp
790 network
3fe142e2 791 nonfree
4a24ab64 792 postproc
2b4c3615 793 powerpc_perf
68602540 794 rdft
2e35e684 795 shared
bd2216e4 796 small
2e35e684 797 static
272081b0 798 vdpau
56a059ac 799 x11grab
c88f5d72 800 zlib
4a0d6686 801"
c88f5d72 802
8eee7025
DB
803THREADS_LIST='
804 beosthreads
d22e8442 805 os2threads
8eee7025
DB
806 pthreads
807 w32threads
808'
809
3f5b56e5
MR
810ARCH_LIST='
811 alpha
a2fc0f6a 812 arm
3f5b56e5
MR
813 bfin
814 ia64
815 m68k
816 mips
817 parisc
79cb09b2 818 ppc
3f5b56e5
MR
819 s390
820 sh4
821 sparc
822 sparc64
823 x86
824 x86_32
825 x86_64
826'
827
828ARCH_EXT_LIST='
1ac9331a 829 altivec
3bf96eec 830 amd3dnow
a1ef9f08 831 amd3dnowext
1ac9331a 832 armv5te
edab3048 833 armv6
ab5cb084 834 armv6t2
f55b299a 835 armvfp
3f5b56e5
MR
836 iwmmxt
837 mmi
838 mmx
d7f0920b 839 mmx2
6b18d278 840 neon
799fde37 841 ppc4xx
1bb04d5a 842 sse
9eeed841 843 ssse3
bd9d34a0 844 vis
3f5b56e5
MR
845'
846
847HAVE_LIST="
848 $ARCH_EXT_LIST
849 $THREADS_LIST
35fd8122 850 alsa_asoundlib_h
3f5b56e5 851 altivec_h
c9fdab0d 852 arpa_inet_h
6bd859d6 853 bswap
ecf97f22 854 closesocket
1ac9331a 855 cmov
e16e49ac 856 conio_h
c88f5d72 857 dcbzl
f8aa696f
DB
858 dev_bktr_ioctl_bt848_h
859 dev_bktr_ioctl_meteor_h
860 dev_ic_bt8xx_h
861 dev_video_meteor_ioctl_meteor_h
862 dev_video_bktr_ioctl_bt848_h
18b67ae5 863 dlfcn_h
c88f5d72 864 dlopen
bc574408 865 dos_paths
245626d0
DB
866 ebp_available
867 ebx_available
c2a29455 868 fast_64bit
7073e9fc 869 fast_cmov
7b829d2a 870 fast_unaligned
9d99cc5a 871 fork
da9e86f8 872 gethrtime
4e68cb8a 873 GetProcessTimes
66be5b45 874 getrusage
2e1913b1 875 inet_aton
61d251db 876 inline_asm
0b4a1821
AS
877 libdc1394_1
878 libdc1394_2
a33cab3a
MK
879 llrint
880 lrint
c88f5d72 881 lrintf
f8aa696f
DB
882 machine_ioctl_bt848_h
883 machine_ioctl_meteor_h
c88f5d72
MR
884 malloc_h
885 memalign
6ffa87d3 886 mkstemp
b4e806b2 887 pld
1f91cdce 888 posix_memalign
9cafbd6c 889 ppc64
a33cab3a
MK
890 round
891 roundf
c88f5d72
MR
892 sdl
893 sdl_video_size
b507ebd1 894 setmode
72be9e73 895 socklen_t
deb29777 896 soundcard_h
f8cda19e 897 poll_h
b58412f1 898 sys_mman_h
b091aa44 899 sys_resource_h
81644c2e 900 sys_select_h
deb29777 901 sys_soundcard_h
1b6e8b73 902 sys_videoio_h
d3a4b4e0 903 ten_operands
e16e49ac 904 termios_h
b265431e 905 threads
7b04b8a0 906 truncf
6ff3f3e7 907 winsock2_h
304d586d 908 yasm
0cb78cef 909"
44161118 910
b6bb00b0
MR
911# options emitted with CONFIG_ prefix but not available on command line
912CONFIG_EXTRA="
b6bb00b0
MR
913"
914
520cc7f1 915CMDLINE_SELECT="
3f5b56e5 916 $ARCH_EXT_LIST
520cc7f1 917 $CONFIG_LIST
8eee7025 918 $THREADS_LIST
db6107b6 919 cross_compile
520cc7f1
MR
920 debug
921 extra_warnings
8c6afa4d 922 logging
d2bbb2f7 923 optimizations
87a0fb62 924 stripping
511b3667 925 swscale
7595a5e4 926 yasm
520cc7f1 927"
426be5dc
DB
928
929PATHS_LIST='
d156bede 930 bindir
14a8acf1 931 datadir
26759c44
MR
932 incdir
933 libdir
26759c44
MR
934 mandir
935 prefix
936 shlibdir
426be5dc
DB
937'
938
939CMDLINE_SET="
940 $PATHS_LIST
941 arch
942 build_suffix
943 cc
944 cpu
945 cross_prefix
ac63af34 946 extra_version
9da6609f
MR
947 host_cc
948 host_cflags
949 host_ldflags
950 host_libs
426be5dc 951 logfile
89641463 952 nm
26759c44 953 source_path
c5200f17
MR
954 sysinclude
955 sysroot
a7ada2ba 956 target_exec
26759c44 957 target_os
a7ada2ba 958 target_path
426be5dc 959"
520cc7f1 960
912f3148
DB
961# code dependency declarations
962
9eeed841 963# architecture extensions
79cb09b2 964altivec_deps="ppc"
3bf96eec 965amd3dnow_deps="mmx"
a1ef9f08 966amd3dnowext_deps="amd3dnow"
a2fc0f6a
MR
967armv5te_deps="arm"
968armv6_deps="arm"
ab5cb084 969armv6t2_deps="arm"
a2fc0f6a
MR
970armvfp_deps="arm"
971iwmmxt_deps="arm"
e241ba14 972mmi_deps="mips"
9eeed841 973mmx_deps="x86"
75aa95a6 974mmx2_deps="mmx"
a2fc0f6a 975neon_deps="arm"
799fde37 976ppc4xx_deps="ppc"
75aa95a6
DB
977sse_deps="mmx"
978ssse3_deps="sse"
bd9d34a0 979vis_deps="sparc"
9eeed841 980
912f3148 981# decoders / encoders
47a158cb 982aac_decoder_select="fft mdct"
d8d12c15 983ac3_decoder_deps="gpl"
47a158cb
MR
984ac3_decoder_select="fft mdct"
985atrac3_decoder_select="fft mdct"
4f034993 986cavs_decoder_select="golomb"
47a158cb 987cook_decoder_select="fft mdct"
2eef7c62 988cscd_decoder_suggest="zlib"
47a158cb 989dca_decoder_select="fft mdct"
e8ed9b7a 990dnxhd_encoder_select="aandct"
2eef7c62 991dxa_decoder_select="zlib"
406ab5cc 992eac3_decoder_deps="gpl"
47a158cb 993eac3_decoder_select="fft mdct"
e8ed9b7a 994eatgq_decoder_select="aandct"
d52b39c7 995eatqi_decoder_select="aandct"
4f034993
MR
996ffv1_decoder_select="golomb"
997flac_decoder_select="golomb"
998flac_encoder_select="golomb"
2eef7c62
AJ
999flashsv_decoder_select="zlib"
1000flashsv_encoder_select="zlib"
e8ed9b7a
DB
1001flv_encoder_select="aandct"
1002h261_encoder_select="aandct"
1003h263_encoder_select="aandct"
1004h263p_encoder_select="aandct"
4f034993 1005h264_decoder_select="golomb"
369122dd 1006h264_vdpau_decoder_deps="vdpau"
47a158cb 1007imc_decoder_select="fft mdct"
4f034993
MR
1008jpegls_decoder_select="golomb"
1009jpegls_encoder_select="golomb"
e8ed9b7a 1010ljpeg_encoder_select="aandct"
4f034993 1011loco_decoder_select="golomb"
e8ed9b7a
DB
1012mjpeg_encoder_select="aandct"
1013mpeg1video_encoder_select="aandct"
1014mpeg2video_encoder_select="aandct"
1015mpeg4_encoder_select="aandct"
d37edddc 1016mpeg_vdpau_decoder_deps="vdpau"
2b324225 1017mpeg1_vdpau_decoder_deps="vdpau"
8f6f050a 1018mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h"
e8ed9b7a
DB
1019msmpeg4v1_encoder_select="aandct"
1020msmpeg4v2_encoder_select="aandct"
1021msmpeg4v3_encoder_select="aandct"
47a158cb
MR
1022nellymoser_decoder_select="fft mdct"
1023nellymoser_encoder_select="fft mdct"
2eef7c62
AJ
1024png_decoder_select="zlib"
1025png_encoder_select="zlib"
63cae55d 1026qdm2_decoder_select="fft mdct rdft"
e8ed9b7a
DB
1027rv10_encoder_select="aandct"
1028rv20_encoder_select="aandct"
d52b39c7
AJ
1029rv30_decoder_select="golomb"
1030rv40_decoder_select="golomb"
4f034993
MR
1031shorten_decoder_select="golomb"
1032sonic_decoder_select="golomb"
1033sonic_encoder_select="golomb"
1034sonic_ls_encoder_select="golomb"
1035svq3_decoder_select="golomb"
bee2eac5 1036svq3_decoder_suggest="zlib"
2eef7c62
AJ
1037tiff_decoder_suggest="zlib"
1038tiff_encoder_suggest="zlib"
1039tscc_decoder_select="zlib"
c5b42f4a 1040vc1_vdpau_decoder_deps="vdpau"
47a158cb
MR
1041vorbis_decoder_select="fft mdct"
1042vorbis_encoder_select="fft mdct"
1043wmav1_decoder_select="fft mdct"
1044wmav1_encoder_select="fft mdct"
1045wmav2_decoder_select="fft mdct"
1046wmav2_encoder_select="fft mdct"
e8ed9b7a
DB
1047wmv1_encoder_select="aandct"
1048wmv2_encoder_select="aandct"
c5b42f4a 1049wmv3_vdpau_decoder_deps="vdpau"
2eef7c62
AJ
1050zlib_decoder_select="zlib"
1051zlib_encoder_select="zlib"
1052zmbv_decoder_select="zlib"
1053zmbv_encoder_select="zlib"
30fd06be 1054
912f3148 1055# external libraries
f5a756ef
DB
1056libamr_nb_decoder_deps="libamr_nb"
1057libamr_nb_encoder_deps="libamr_nb"
1058libamr_wb_decoder_deps="libamr_wb"
1059libamr_wb_encoder_deps="libamr_wb"
1b71f045 1060libdirac_decoder_deps="libdirac !libschroedinger"
690bfceb 1061libdirac_encoder_deps="libdirac"
c9171a83 1062libfaac_encoder_deps="libfaac"
69ddbd1d 1063libfaad_decoder_deps="libfaad"
4ec45764 1064libfaadbin_decoder_extralibs='$ldl'
299c77d5
MR
1065libgsm_decoder_deps="libgsm"
1066libgsm_encoder_deps="libgsm"
8ffed8d8
MR
1067libgsm_ms_decoder_deps="libgsm"
1068libgsm_ms_encoder_deps="libgsm"
1cc60c47 1069libmp3lame_encoder_deps="libmp3lame"
9a77d59a 1070libopenjpeg_decoder_deps="libopenjpeg"
f7cd9eed
AS
1071libschroedinger_decoder_deps="libschroedinger"
1072libschroedinger_encoder_deps="libschroedinger"
ae14f311 1073libspeex_decoder_deps="libspeex"
150d2772 1074libtheora_encoder_deps="libtheora"
b0caf888 1075libvorbis_encoder_deps="libvorbis"
1cc60c47
DB
1076libx264_encoder_deps="libx264"
1077libxvid_encoder_deps="libxvid"
272081b0 1078vdpau_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
30fd06be 1079
912f3148 1080# demuxers / muxers
03a76ba9 1081ac3_demuxer_deps="ac3_parser"
35fd8122
NG
1082alsa_demuxer_deps="alsa_asoundlib_h snd_pcm_htimestamp"
1083alsa_demuxer_extralibs="-lasound"
1084alsa_muxer_deps="alsa_asoundlib_h"
1085alsa_muxer_extralibs="-lasound"
50383e88 1086audio_beos_demuxer_deps="audio_beos"
4ec45764 1087audio_beos_demuxer_extralibs="-lmedia -lbe"
50383e88 1088audio_beos_muxer_deps="audio_beos"
4ec45764 1089audio_beos_muxer_extralibs="-lmedia -lbe"
53b73365 1090avisynth_demuxer_deps="avisynth"
73483024 1091bktr_demuxer_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
17ac9f1c 1092dirac_demuxer_deps="dirac_parser"
fe9bb347 1093dv1394_demuxer_deps="dv1394 dv_demuxer"
f7b8bffe 1094libdc1394_demuxer_deps="libdc1394"
d7c59247
DB
1095libnut_demuxer_deps="libnut"
1096libnut_muxer_deps="libnut"
2eef7c62
AJ
1097matroska_demuxer_suggest="zlib bzlib"
1098mov_demuxer_suggest="zlib"
4bd8e17c 1099mp3_demuxer_deps="mpegaudio_parser"
c7682de0
RP
1100oss_demuxer_deps_any="soundcard_h sys_soundcard_h"
1101oss_muxer_deps_any="soundcard_h sys_soundcard_h"
30fd06be 1102redir_demuxer_deps="network"
8eb793c4 1103rtp_muxer_deps="network rtp_protocol"
95c21842
LA
1104rtsp_demuxer_deps="sdp_demuxer"
1105sdp_demuxer_deps="rtp_protocol mpegts_demuxer"
06e31011 1106v4l_demuxer_deps="linux_videodev_h"
1b6e8b73 1107v4l2_demuxer_deps_any="linux_videodev2_h sys_videoio_h"
c2345207
RP
1108vfwcap_demuxer_deps="capCreateCaptureWindow"
1109vfwcap_demuxer_extralibs="-lvfw32"
06eab4ba 1110x11_grab_device_demuxer_deps="x11grab XShmCreateImage"
4ec45764 1111x11_grab_device_demuxer_extralibs="-lX11 -lXext"
30fd06be 1112
912f3148 1113# protocols
3fff6382 1114gopher_protocol_deps="network"
c08fb000
AB
1115http_protocol_deps="network"
1116rtp_protocol_deps="udp_protocol"
1117tcp_protocol_deps="network"
1118udp_protocol_deps="network"
1119
f7679c54 1120# filters
81124ba0 1121movie_filter_deps="avfilter_lavf"
f7679c54 1122
912f3148 1123# programs
fa859b4d 1124ffplay_deps="sdl"
6ad42348 1125ffserver_deps="ffm_muxer rtp_protocol rtsp_demuxer"
4ec45764 1126ffserver_extralibs='$ldl'
a2830dca 1127
912f3148 1128
de6d9b64 1129# default parameters
8a608357 1130
2ba042a7 1131logfile="config.err"
8a608357
MR
1132
1133# installation paths
c9d19248
MR
1134prefix_default="/usr/local"
1135bindir_default='${prefix}/bin'
14a8acf1 1136datadir_default='${prefix}/share/ffmpeg'
c9d19248
MR
1137incdir_default='${prefix}/include'
1138libdir_default='${prefix}/lib'
1139mandir_default='${prefix}/share/man'
1140shlibdir_default="$libdir_default"
8a608357
MR
1141
1142# toolchain
11e6d03a 1143ar="ar"
13c7df3d 1144cc_default="gcc"
9da6609f 1145host_cc_default="gcc"
11e6d03a 1146ln_s="ln -sf"
89641463 1147nm_default="nm"
11e6d03a 1148objformat="elf"
be7109c1 1149ranlib="ranlib"
0f3cb305 1150strip="strip"
11e6d03a 1151yasmexe="yasm"
8a608357
MR
1152
1153# machine
cc6a90dd 1154arch=`uname -m`
38d0a8aa 1155cpu="generic"
8a608357 1156
8a608357 1157# OS
4f854758 1158target_os=$(tolower $(uname -s))
8a608357 1159
8a608357 1160# configurable options
497237c7 1161enable debug
497237c7
RP
1162enable ffmpeg
1163enable ffplay
1164enable ffserver
1165enable ipv6
497237c7
RP
1166enable mpegaudio_hp
1167enable network
8400d6b8 1168enable optimizations
497237c7 1169enable protocols
530dc538 1170enable static
87a0fb62 1171enable stripping
8a608357 1172
8a608357 1173# build settings
11a9d3e8 1174add_cflags -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112
9987769a 1175SHFLAGS='-shared -Wl,-soname,$$(@F)'
c536cb09 1176FFSERVERLDFLAGS=-Wl,-E
f3ec2d46
SG
1177LIBPREF="lib"
1178LIBSUF=".a"
c5f14466
RP
1179FULLNAME='$(NAME)$(BUILDSUF)'
1180LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
f3ec2d46
SG
1181SLIBPREF="lib"
1182SLIBSUF=".so"
c5f14466 1183SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
b29bddab
DB
1184SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
1185SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
24743a76 1186LIB_INSTALL_EXTRA_CMD='$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
ef0bc4c9 1187
9da6609f
MR
1188host_cflags='-O3 -g -Wall'
1189host_libs='-lm'
1190
a7ada2ba
MR
1191target_path='.'
1192
0d7dca36
DB
1193# gcc stupidly only outputs the basename of targets with -MM, but we need the
1194# full relative path for objects in subdirectories for non-recursive Make.
333d5374 1195DEPEND_CMD='$(CC) $(CFLAGS) -MM $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o,"'
315c741d 1196
c597172e
MR
1197# find source path
1198source_path="`dirname \"$0\"`"
497237c7 1199enable source_path_used
c597172e
MR
1200if test -z "$source_path" -o "$source_path" = "." ; then
1201 source_path="`pwd`"
497237c7 1202 disable source_path_used
c597172e
MR
1203else
1204 source_path="`cd \"$source_path\"; pwd`"
1205 echo "$source_path" | grep -q '[[:blank:]]' &&
7483e694 1206 die "Out of tree builds are impossible with whitespace in source path."
c597172e
MR
1207fi
1208
c597172e
MR
1209FFMPEG_CONFIGURATION="$@"
1210
73ef8980
MR
1211find_things(){
1212 thing=$1
1213 pattern=$2
1214 file=$source_path/$3
932ccf39 1215 sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
73ef8980
MR
1216}
1217
1218ENCODER_LIST=$(find_things encoder ENC libavcodec/allcodecs.c)
1219DECODER_LIST=$(find_things decoder DEC libavcodec/allcodecs.c)
1220PARSER_LIST=$(find_things parser PARSER libavcodec/allcodecs.c)
1221BSF_LIST=$(find_things bsf BSF libavcodec/allcodecs.c)
1222MUXER_LIST=$(find_things muxer _MUX libavformat/allformats.c)
1223DEMUXER_LIST=$(find_things demuxer DEMUX libavformat/allformats.c)
1224OUTDEV_LIST=$(find_things muxer _MUX libavdevice/alldevices.c)
1225INDEV_LIST=$(find_things demuxer DEMUX libavdevice/alldevices.c)
1226PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
81124ba0 1227FILTER_LIST=$(find_things filter FILTER libavfilter/allfilters.c)
c597172e 1228
7483e694
DB
1229enable $ARCH_EXT_LIST \
1230 $DECODER_LIST \
1231 $ENCODER_LIST \
1232 $PARSER_LIST \
1233 $BSF_LIST \
1234 $DEMUXER_LIST \
1235 $MUXER_LIST \
f7679c54 1236 $FILTER_LIST \
7483e694
DB
1237 $PROTOCOL_LIST \
1238 $INDEV_LIST \
1239 $OUTDEV_LIST \
c597172e
MR
1240
1241die_unknown(){
1242 echo "Unknown option \"$1\"."
1243 echo "See $0 --help for available options."
1244 exit 1
1245}
1246
794f8e97 1247show_list() {
bf0c4afa
RP
1248 suffix=_$1
1249 shift
1250 echo $* | sed s/$suffix//g | tr ' ' '\n' | sort
794f8e97
PI
1251 exit 0
1252}
1253
c597172e 1254for opt do
7483e694
DB
1255 optval="${opt#*=}"
1256 case "$opt" in
0f010b2f 1257 --extra-cflags=*) add_cflags $optval
7483e694 1258 ;;
0f010b2f 1259 --extra-ldflags=*) add_ldflags $optval
7483e694 1260 ;;
0f010b2f 1261 --extra-libs=*) add_extralibs $optval
7483e694 1262 ;;
8fb1cb58 1263 --disable-devices) disable $INDEV_LIST $OUTDEV_LIST
9aa8ed9d 1264 ;;
40bcf4c7
BL
1265 --enable-debug=*) debuglevel="$optval"
1266 ;;
7483e694
DB
1267 --enable-*=*|--disable-*=*)
1268 eval `echo "$opt" | sed 's/=/-/;s/--/action=/;s/-/ thing=/;s/-/ name=/'`
1269 case "$thing" in
81124ba0 1270 encoder|decoder|muxer|demuxer|parser|bsf|protocol|filter) $action ${optval}_${thing} ;;
7483e694
DB
1271 *) die_unknown "$opt" ;;
1272 esac
1273 ;;
1274 --enable-?*|--disable-?*)
1275 eval `echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g'`
e3773a55
MR
1276 if is_in $option $COMPONENT_LIST; then
1277 eval $action \$$(toupper ${option%s})_LIST
1278 elif is_in $option $CMDLINE_SELECT; then
1279 $action $option
1280 else
1281 die_unknown $opt
1282 fi
7483e694
DB
1283 ;;
1284 --list-*)
1285 NAME="${opt#--list-}"
1286 is_in $NAME $COMPONENT_LIST || die_unknown $opt
1287 NAME=${NAME%s}
1288 eval show_list $NAME \$$(toupper $NAME)_LIST
1289 ;;
1290 --help|-h) show_help
1291 ;;
1292 *)
884a36a7 1293 optname="${opt%%=*}"
26759c44
MR
1294 optname="${optname#--}"
1295 optname=$(echo "$optname" | sed 's/-/_/g')
1296 is_in $optname $CMDLINE_SET || die_unknown $opt
1297 eval $optname='$optval'
7483e694
DB
1298 ;;
1299 esac
c597172e
MR
1300done
1301
bcea99bb
MR
1302disabled logging && logfile=/dev/null
1303
1304echo "# $0 $@" > $logfile
1305set >> $logfile
1306
9da6609f
MR
1307test -n "$cross_prefix" && enable cross_compile
1308
adb2b908 1309ar="${cross_prefix}${ar}"
11e6d03a 1310cc_default="${cross_prefix}${cc_default}"
20e0ed95 1311nm_default="${cross_prefix}${nm_default}"
adb2b908
RP
1312ranlib="${cross_prefix}${ranlib}"
1313strip="${cross_prefix}${strip}"
1314
c5200f17
MR
1315sysinclude_default="${sysroot}/usr/include"
1316
1317set_default cc nm sysinclude
9da6609f
MR
1318enabled cross_compile || host_cc_default=$cc
1319set_default host_cc
13c7df3d 1320
c0f5b7f1
MR
1321case $target_os in
1322 mingw32*|cygwin*|*-dos|freedos|opendos|os/2*) EXESUF=.exe ;;
1323esac
1324
e4e69e0b 1325# set temporary file name
a49d42c2 1326: ${TMPDIR:=$TEMPDIR}
c51fafa1 1327: ${TMPDIR:=$TMP}
a49d42c2 1328: ${TMPDIR:=/tmp}
e4e69e0b 1329
54460a83
MR
1330if ! check_cmd type mktemp; then
1331 # simple replacement for missing mktemp
1332 # NOT SAFE FOR GENERAL USE
1333 mktemp(){
1334 echo "${2%XXX*}.${HOSTNAME}.${UID}.$$"
1335 }
1336fi
1337
1338tmpfile(){
1339 tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
1340 (set -C; exec > $tmp) 2>/dev/null ||
1341 die "Unable to create temoporary file in $TMPDIR."
1342 append TMPFILES $tmp
1343 eval $1=$tmp
1344}
1345
1346trap 'rm -f -- $TMPFILES' EXIT
1347trap exit HUP INT TERM
1348
1349tmpfile TMPC .c
1350tmpfile TMPE $EXESUF
1351tmpfile TMPH .h
1352tmpfile TMPO .o
1353tmpfile TMPS .S
1354tmpfile TMPSH .sh
1355
1356unset -f mktemp
e4e69e0b 1357
993f2d0f
MR
1358# make sure we can execute files in $TMPDIR
1359cat > $TMPSH 2>> $logfile <<EOF
1360#! /bin/sh
1361EOF
1362chmod +x $TMPSH >> $logfile 2>&1
1363if ! $TMPSH >> $logfile 2>&1; then
1364 cat <<EOF
1365Unable to create and execute files in $TMPDIR. Set the TMPDIR environment
1366variable to another directory and make sure that it is not mounted noexec.
1367EOF
1368 die "Sanity test failed."
1369fi
993f2d0f 1370
3a636b6f 1371if $cc --version 2>/dev/null | grep -qi gcc; then
629687f6
MR
1372 cc_type=gcc
1373elif $cc --version 2>/dev/null | grep -q Intel; then
1374 cc_type=icc
1375elif $cc -v 2>&1 | grep -q xlc; then
1376 cc_type=xlc
df442a8d
MR
1377elif $cc -V 2>/dev/null | grep -q Compaq; then
1378 cc_type=ccc
1379 DEPEND_CMD='$(CC) $(CFLAGS) -M $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o,"'
03754fcd 1380 debuglevel=3
df442a8d 1381 add_ldflags -Wl,-z,now # calls to libots crash without this
629687f6
MR
1382fi
1383
1384test -n "$cc_type" && enable $cc_type || echolog "Unknown C compiler $cc"
1385
154d432c
MR
1386if test -n "$sysroot"; then
1387 case "$cc_type" in
1388 gcc)
1389 add_cflags --sysroot="$sysroot"
1390 add_ldflags --sysroot="$sysroot"
1391 ;;
1392 esac
1393fi
1394
993f2d0f
MR
1395# compiler sanity check
1396check_exec <<EOF
1397int main(void){ return 0; }
1398EOF
1399if test "$?" != 0; then
1400 echo "$cc is unable to create an executable file."
1401 if test -z "$cross_prefix" && ! enabled cross_compile ; then
1402 echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
1403 echo "Only do this if you know what cross compiling means."
1404 fi
1405 die "C compiler test failed."
1406fi
1407
e9b9a2f8 1408check_cflags -std=c99
9d821fc2
DB
1409check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cflags -D_FILE_OFFSET_BITS=64
1410#include <stdlib.h>
1411EOF
1412check_cc -D_LARGEFILE_SOURCE <<EOF && add_cflags -D_LARGEFILE_SOURCE
1413#include <stdlib.h>
1414EOF
e9b9a2f8 1415
b24dbcbd 1416case "$arch" in
b24dbcbd
RP
1417 alpha)
1418 arch="alpha"
1419 enable fast_64bit
c0a02a3e 1420 check_cflags -mieee
b24dbcbd 1421 ;;
cfdb6148
MR
1422 arm|armv[4567]*l)
1423 arch="arm"
b24dbcbd 1424 ;;
f4870943
MR
1425 avr32)
1426 ;;
cfdb6148
MR
1427 bfin)
1428 arch="bfin"
1429 ;;
1430 ia64)
1431 arch="ia64"
b24dbcbd 1432 enable fast_64bit
cfdb6148
MR
1433 ;;
1434 m68k)
1435 arch="m68k"
b24dbcbd 1436 ;;
de3a1240 1437 mips|mipsel|IP*)
b24dbcbd
RP
1438 arch="mips"
1439 ;;
de3a1240
DB
1440 mips64)
1441 arch="mips"
1442 enable fast_64bit
1443 ;;
61597a98 1444 parisc|hppa)
b24dbcbd
RP
1445 arch="parisc"
1446 ;;
61597a98 1447 parisc64|hppa64)
b24dbcbd
RP
1448 arch="parisc"
1449 enable fast_64bit
1450 ;;
cfdb6148
MR
1451 "Power Macintosh"|ppc|powerpc)
1452 arch="ppc"
1453 enable fast_unaligned
1454 ;;
1455 ppc64)
1456 arch="ppc"
1457 enable fast_64bit
1458 enable fast_unaligned
1459 ;;
b24dbcbd
RP
1460 s390|s390x)
1461 arch="s390"
1462 ;;
cfdb6148
MR
1463 sh4|sh)
1464 arch="sh4"
b24dbcbd 1465 ;;
cfdb6148
MR
1466 sparc)
1467 arch="sparc"
1468 ;;
1469 sun4u|sparc64)
1470 arch="sparc"
1471 subarch="sparc64"
b24dbcbd
RP
1472 enable fast_64bit
1473 ;;
cfdb6148
MR
1474 i386|i486|i586|i686|i86pc|BePC)
1475 arch="x86"
1476 subarch="x86_32"
1477 enable fast_unaligned
1478 ;;
1479 x86_64|amd64)
1480 arch="x86"
1481 subarch="x86_32"
1482 enable cmov
1483 enable fast_cmov
1484 enable fast_unaligned
1485 check_cc <<EOF && enable fast_64bit && subarch="x86_64"
1486 int test[sizeof(char*) - 7];
1487EOF
b24dbcbd
RP
1488 ;;
1489 *)
1490 arch="unknown"
1491 ;;
1492esac
1493
62045d48 1494enable $arch $subarch
b24dbcbd 1495
7483e694 1496# OS specific
4f854758 1497case $target_os in
7483e694 1498 beos|haiku|zeta)
c9d19248 1499 prefix_default="$HOME/config"
7483e694 1500 # helps building libavcodec
0f010b2f 1501 add_cflags -DPIC -fomit-frame-pointer
7483e694
DB
1502 # 3 gcc releases known for BeOS, each with ugly bugs
1503 gcc_version="`$cc -v 2>&1 | grep version | cut -d ' ' -f3-`"
1504 case "$gcc_version" in
1505 2.9-beos-991026*|2.9-beos-000224*) echo "R5/GG gcc"
1506 disable mmx
1507 ;;
1508 *20010315*) echo "BeBits gcc"
0f010b2f 1509 add_cflags -fno-expensive-optimizations
7483e694
DB
1510 ;;
1511 esac
7483e694
DB
1512 SHFLAGS=-nostart
1513 # enable BeOS things
1514 enable audio_beos
1515 # no need for libm, but the inet stuff
1516 # Check for BONE
1517 # XXX: actually should check for NOT net_server
78fe7631 1518 if echo $BEINCLUDES | grep -q 'headers/be/bone'; then
7483e694
DB
1519 network_extralibs="-lbind -lsocket"
1520 else
1521 enable beos_netserver
1522 network_extralibs="-lnet"
1523 fi ;;
1524 sunos)
1525 FFSERVERLDFLAGS=""
9987769a 1526 SHFLAGS='-shared -Wl,-h,$$(@F)'
7483e694 1527 network_extralibs="-lsocket -lnsl"
e193c74e 1528 add_cflags -D__EXTENSIONS__
7483e694
DB
1529 ;;
1530 netbsd)
1531 oss_demuxer_extralibs="-lossaudio"
1532 oss_muxer_extralibs="-lossaudio"
1533 ;;
1534 openbsd)
1535 disable need_memalign
1536 LIBOBJFLAGS='$(PIC)'
7483e694 1537 SHFLAGS='-shared'
7483e694
DB
1538 oss_demuxer_extralibs="-lossaudio"
1539 oss_muxer_extralibs="-lossaudio"
1540 ;;
1541 freebsd)
1542 disable need_memalign
1543 ;;
1544 bsd/os)
1545 osextralibs="-lpoll -lgnugetopt"
1546 strip="strip -d"
1547 ;;
1548 darwin)
1549 disable need_memalign
0138c54e 1550 SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR) -Wl,-read_only_relocs,suppress'
7483e694
DB
1551 strip="strip -x"
1552 FFLDFLAGS="-Wl,-dynamic,-search_paths_first"
1553 SLIBSUF=".dylib"
1554 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
1555 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
1556 FFSERVERLDFLAGS=-Wl,-bind_at_load
304d586d 1557 objformat="macho"
1b0f6fb8 1558 enabled x86_64 && objformat="macho64"
7483e694
DB
1559 ;;
1560 mingw32*)
4f854758 1561 target_os=mingw32
dcc01c06 1562 LIBTARGET=i386
1fc9fb8a 1563 if enabled x86_64; then
dcc01c06
RP
1564 disable need_memalign
1565 LIBTARGET=x64
1566 fi
fbd971a4 1567 shlibdir_default="$bindir_default"
7483e694
DB
1568 disable ffserver
1569 SLIBPREF=""
1570 SLIBSUF=".dll"
7483e694
DB
1571 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1572 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
dcc01c06 1573 SLIB_EXTRA_CMD='-lib /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)'
4c25d159
RP
1574 SLIB_INSTALL_EXTRA_CMD='-install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"; \
1575 install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)"'
7483e694 1576 SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"'
71c61f62 1577 SHFLAGS='-shared -Wl,--output-def,$$(@:$(SLIBSUF)=.def) -Wl,--enable-runtime-pseudo-reloc -Wl,--enable-auto-image-base'
304d586d 1578 objformat="win32"
bc574408 1579 enable dos_paths
b1549d61 1580 if ! enabled x86_64; then
f7ad5aa2
RP
1581 check_cpp_condition _mingw.h "(__MINGW32_MAJOR_VERSION > 3) || (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
1582 die "ERROR: MinGW runtime version must be >= 3.15."
1583 enabled_any avisynth vfwcap_demuxer &&
1584 { check_cpp_condition w32api.h "(__W32API_MAJOR_VERSION > 3) || (__W32API_MAJOR_VERSION == 3 && __W32API_MINOR_VERSION >= 13)" ||
1585 die "ERROR: avisynth and vfwcap_demuxer require w32api version 3.13 or later."; }
1586 fi
7483e694
DB
1587 ;;
1588 cygwin*)
4f854758 1589 target_os=cygwin
fbd971a4 1590 shlibdir_default="$bindir_default"
7483e694
DB
1591 SLIBPREF="cyg"
1592 SLIBSUF=".dll"
1593 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1594 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1595 SHFLAGS='-shared -Wl,--enable-auto-image-base'
304d586d 1596 objformat="win32"
bc574408 1597 enable dos_paths
7483e694 1598 ;;
4f365f37 1599 *-dos|freedos|opendos)
fdf11906 1600 disable ffplay ffserver
4f365f37
MK
1601 disable $INDEV_LIST $OUTDEV_LIST
1602 network_extralibs="-lsocket"
ff1c015d 1603 objformat="coff"
bc574408 1604 enable dos_paths
4f365f37 1605 ;;
7483e694 1606 linux)
7483e694
DB
1607 enable dv1394
1608 ;;
1609 irix*)
4f854758 1610 target_os=irix
7483e694
DB
1611 ranlib="echo ignoring ranlib"
1612 ;;
d22e8442 1613 os/2*)
d22e8442
DY
1614 strip="lxlite"
1615 ln_s="cp -f"
d22e8442 1616 FFLDFLAGS="-Zomf -Zbin-files -Zargs-wild -Zmap"
71c61f62 1617 SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
d22e8442 1618 FFSERVERLDFLAGS=""
287d3b13 1619 LIBSUF="_s.a"
d22e8442
DY
1620 SLIBPREF=""
1621 SLIBSUF=".dll"
1622 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
1623 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
71c61f62
MR
1624 SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
1625 echo PROTMODE >> $(SUBDIR)$(NAME).def; \
1626 echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
1627 echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
1628 echo EXPORTS >> $(SUBDIR)$(NAME).def; \
1629 emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
1630 SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
1631 emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
1632 SLIB_INSTALL_EXTRA_CMD='install -m 644 $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib "$(LIBDIR)"'
d22e8442 1633 SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.a "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.lib'
bc574408 1634 enable dos_paths
d22e8442
DY
1635 ;;
1636
7483e694 1637 *)
4f924f9a 1638 die "Unknown OS '$target_os'."
7483e694
DB
1639 ;;
1640esac
1641
c9d19248
MR
1642set_default $PATHS_LIST
1643
c597172e 1644add_extralibs $osextralibs
de6d9b64 1645
28d8e661
DB
1646# Combine FFLDFLAGS and the LDFLAGS environment variable.
1647LDFLAGS="$FFLDFLAGS $LDFLAGS"
e89b8b0a 1648
320d060a 1649# we need to build at least one lib type
93b3c083 1650if ! enabled_any static shared; then
320d060a
DB
1651 cat <<EOF
1652At least one library type must be built.
1653Specify --enable-static to build the static libraries or --enable-shared to
1654build the shared libraries as well. To only build the shared libraries specify
1655--disable-static in addition to --enable-shared.
1656EOF
1657 exit 1;
1658fi
1659
abc4e572 1660disabled static && LIBNAME=""
2a320695 1661
a2234ceb
RP
1662if enabled_any libfaad libfaadbin ; then
1663 if check_header faad.h; then
295b8c70 1664 check_cc <<EOF
a2234ceb
RP
1665#include <faad.h>
1666#ifndef FAAD2_VERSION
1667ok faad1
1668#endif
db817cf3 1669int main(void) { return 0; }
a2234ceb
RP
1670EOF
1671 test $? = 0 && enable libfaad2
1672 else
ff3dac65 1673 die "FAAD test failed."
a2234ceb
RP
1674 fi
1675fi
1676
1677
93b3c083 1678if ! enabled gpl; then
54118497
RP
1679 die_gpl_disabled(){
1680 name=$1
1681 shift
1682 enabled_any $@ && die "$name is under GPL and --enable-gpl is not specified."
1683 }
4a24ab64 1684 die_gpl_disabled "The Postprocessing code" postproc
1cc60c47
DB
1685 die_gpl_disabled "libx264" libx264
1686 die_gpl_disabled "libxvidcore" libxvid
54118497
RP
1687 die_gpl_disabled "FAAD2" libfaad2
1688 die_gpl_disabled "The X11 grabber" x11grab
ebb810d9 1689fi
b2e3c528 1690
3fe142e2
DB
1691if ! enabled nonfree && enabled_any libamr_nb libamr_wb; then
1692 die "libamr is nonfree and --enable-nonfree is not specified."
1693fi
1694
9eeed841 1695check_deps $ARCH_EXT_LIST
0f3cb305 1696
5d323602
MR
1697test -z "$need_memalign" && need_memalign="$mmx"
1698
cf9d24ad 1699#Darwin CC versions
4f854758 1700if test $target_os = darwin; then
629687f6 1701 if enabled xlc; then
0f010b2f 1702 add_cflags -qpdf2 -qlanglvl=extc99 -qmaxmem=-1 -qarch=auto -qtune=auto
cf9d24ad 1703 else
0f010b2f
DB
1704 add_cflags -pipe
1705 check_cflags -force_cpusubtype_ALL
1706 check_cflags -Wno-sign-compare
f946a9a4 1707 enabled shared || check_cflags -mdynamic-no-pic
cf9d24ad 1708 fi
2a1a6b64
MN
1709fi
1710
40617a6d 1711disabled optimizations || check_cflags -fomit-frame-pointer
cf9d24ad 1712
a4adb608 1713# Add processor-specific flags
38d0a8aa 1714if test $cpu != "generic"; then
bc8ec47b
MR
1715 warn_altivec(){
1716 $1 altivec && echo "WARNING: Tuning for $2 but AltiVec $1.";
1658bc4f 1717 }
38d0a8aa 1718 case $cpu in
bb270c08 1719 601|ppc601|PowerPC601)
0f010b2f 1720 add_cflags -mcpu=601
bc8ec47b 1721 warn_altivec enabled PPC601
bb270c08
DB
1722 ;;
1723 603*|ppc603*|PowerPC603*)
0f010b2f 1724 add_cflags -mcpu=603
bc8ec47b 1725 warn_altivec enabled PPC603
bb270c08
DB
1726 ;;
1727 604*|ppc604*|PowerPC604*)
0f010b2f 1728 add_cflags -mcpu=604
bc8ec47b 1729 warn_altivec enabled PPC604
bb270c08
DB
1730 ;;
1731 G3|g3|75*|ppc75*|PowerPC75*)
0f010b2f 1732 add_cflags -mcpu=750 -mpowerpc-gfxopt
bc8ec47b 1733 warn_altivec enabled PPC75x
bb270c08
DB
1734 ;;
1735 G4|g4|745*|ppc745*|PowerPC745*)
0f010b2f 1736 add_cflags -mcpu=7450 -mpowerpc-gfxopt
bc8ec47b 1737 warn_altivec disabled PPC745x
bb270c08
DB
1738 ;;
1739 74*|ppc74*|PowerPC74*)
0f010b2f 1740 add_cflags -mcpu=7400 -mpowerpc-gfxopt
bc8ec47b 1741 warn_altivec disabled PPC74xx
bb270c08
DB
1742 ;;
1743 G5|g5|970|ppc970|PowerPC970|power4*|Power4*)
0f010b2f 1744 add_cflags -mcpu=970 -mpowerpc-gfxopt -mpowerpc64
bc8ec47b 1745 warn_altivec disabled PPC970
9cafbd6c 1746 enable ppc64
bb270c08 1747 ;;
e07e357d 1748 Cell|CELL|cell)
0f010b2f 1749 add_cflags -mcpu=cell
e07e357d 1750 warn_altivec disabled Cell
9cafbd6c 1751 enable ppc64
e07e357d 1752 ;;
e7768fc5
GP
1753 # targets that do NOT support conditional mov (cmov)
1754 i[345]86|pentium|pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
0f010b2f 1755 add_cflags -march=$cpu
497237c7 1756 disable cmov
e7768fc5
GP
1757 ;;
1758 # targets that do support conditional mov (cmov)
416519dd 1759 i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2)
0f010b2f 1760 add_cflags -march=$cpu
497237c7
RP
1761 enable cmov
1762 enable fast_cmov
94e4c3a3
GP
1763 ;;
1764 # targets that do support conditional mov but on which it's slow
800a5a19 1765 pentium4|pentium4m|prescott|nocona)
0f010b2f 1766 add_cflags -march=$cpu
497237c7
RP
1767 enable cmov
1768 disable fast_cmov
bb270c08 1769 ;;
d7b34d08 1770 sparc64)
0f010b2f 1771 add_cflags -mcpu=v9
d7b34d08 1772 ;;
f2e49553 1773 arm11*|cortex*)
0f010b2f 1774 add_cflags -mcpu=$cpu
f2e49553
MR
1775 enable fast_unaligned
1776 ;;
0223bd6f 1777 armv*)
0f010b2f 1778 add_cflags -march=$cpu
0223bd6f 1779 ;;
f2e49553 1780 arm*)
0f010b2f 1781 add_cflags -mcpu=$cpu
6b19786b 1782 ;;
1cd11856 1783 ev4|ev45|ev5|ev56|pca56|ev6|ev67)
df442a8d 1784 enabled ccc && add_cflags -arch $cpu || add_cflags -mcpu=$cpu
1cd11856 1785 ;;
bb270c08 1786 *)
7483e694 1787 echo "WARNING: Unknown CPU \"$cpu\", ignored."
bb270c08 1788 ;;
a4adb608
MN
1789 esac
1790fi
1791
b4d96ba2
MR
1792check_cc <<EOF || die "Symbol mangling check failed."
1793int ff_extern;
1794EOF
2f05d9c1 1795sym=$($nm -P -g $TMPO | grep ff_extern)
b4d96ba2
MR
1796extern_prefix=${sym%%ff_extern*}
1797
61d251db
MR
1798check_asm inline_asm '""'
1799
9eeed841 1800if enabled x86; then
44965991
PI
1801 # check whether EBP is available on x86
1802 # As 'i' is stored on the stack, this program will crash
1803 # if the base pointer is used to access it because the
1804 # base pointer is cleared in the inline assembly code.
7dfef245 1805 check_exec_crash <<EOF && enable ebp_available
44965991 1806 volatile int i=0;
be449fca 1807 __asm__ volatile (
44965991
PI
1808 "xorl %%ebp, %%ebp"
1809 ::: "%ebp");
1810 return i;
44965991
PI
1811EOF
1812
1813 # check wether EBX is available on x86
940f335a 1814 check_asm ebx_available '"":::"%ebx"'
8e380710 1815
d3a4b4e0
DB
1816 # check whether more than 10 operands are supported
1817 check_cc <<EOF && enable ten_operands
1818int main(void) {
1819 int x=0;
1820 __asm__ volatile(
1821 ""
1822 :"+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x)
1823 );
1824 return 0;
1825}
1826EOF
1827
d7f0920b 1828 # check whether binutils is new enough to compile SSSE3/MMX2
940f335a 1829 enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
d7f0920b 1830 enabled mmx2 && check_asm mmx2 '"movss %xmm0, %xmm0"'
6bd859d6
MR
1831
1832 check_asm bswap '"bswap %%eax" ::: "%eax"'
304d586d 1833
d52481b9 1834 YASMFLAGS="-f $objformat -DARCH_$(toupper $subarch)"
304d586d
LM
1835 enabled x86_64 && append YASMFLAGS "-m amd64"
1836 enabled_all x86_64 shared && append YASMFLAGS "-DPIC"
1837 case "$objformat" in
1838 elf) enabled debug && append YASMFLAGS "-g dwarf2" ;;
1b0f6fb8 1839 macho64) append YASMFLAGS "-DPIC -DPREFIX" ;;
304d586d
LM
1840 *) append YASMFLAGS "-DPREFIX" ;;
1841 esac
7595a5e4 1842 disabled yasm || { check_yasm "pabsw xmm0, xmm0" && enable yasm; }
44965991
PI
1843fi
1844
87ea51e0
LB
1845# check for assembler specific support
1846
5b6c2cbd 1847enabled ppc && check_asm dcbzl '"dcbzl 0, 1"'
799fde37 1848enabled ppc && check_asm ppc4xx '"maclhw r10, r11, r12"'
87ea51e0 1849
57bd82d4
MR
1850# check for SIMD availability
1851
115329f1 1852# AltiVec flags: The FSF version of GCC differs from the Apple version
9eeed841 1853if enabled altivec; then
3ed1a2ee
DB
1854 check_cflags -maltivec -mabi=altivec &&
1855 { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
4477b9f4 1856 check_cflags -faltivec
b6e52719 1857
0182fee8 1858 # check if our compiler supports Motorola AltiVec C API
497237c7 1859 check_cc <<EOF || disable altivec
dcd479c0 1860$inc_altivec_h
a9a07762
MN
1861int main(void) {
1862 vector signed int v1, v2, v3;
1863 v1 = vec_add(v2,v3);
1864 return 0;
1865}
1866EOF
b006b26c
DB
1867
1868 # check if our compiler supports braces for vector declarations
80a61f08 1869 check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
b006b26c 1870$inc_altivec_h
80a61f08 1871int main (void) { (vector int) {1}; return 0; }
b006b26c 1872EOF
a9a07762 1873fi
ab6c65f6 1874
b4e806b2 1875# We have to check if pld is a nop and disable it.
a2fc0f6a 1876enabled arm && check_asm pld '"pld [r0]"'
940f335a
MR
1877enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
1878enabled armv6 && check_asm armv6 '"sadd16 r0, r0, r0"'
ab5cb084 1879enabled armv6t2 && check_asm armv6t2 '"movt r0, #0"'
f55b299a 1880enabled armvfp && check_asm armvfp '"fadds s0, s0, s0"'
940f335a
MR
1881enabled iwmmxt && check_asm iwmmxt '"wunpckelub wr6, wr4"'
1882enabled mmi && check_asm mmi '"lq $2, 0($2)"'
6b18d278 1883enabled neon && check_asm neon '"vadd.i16 q0, q0, q0"'
940f335a 1884enabled vis && check_asm vis '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc
bd9d34a0 1885
0f010b2f 1886enabled vis && add_cflags -mcpu=ultrasparc -mtune=ultrasparc
8b03def6 1887
57bd82d4
MR
1888# ---
1889# big/little-endian test
9eebe687
MR
1890check_cc <<EOF || die "endian test failed"
1891unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
a3999908 1892EOF
d04d9e16 1893od -A n -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
487a54d7 1894
a3999908 1895# ---
3d204385
NK
1896# check availability of some header files
1897
a98bb16d
RP
1898if check_func dlopen; then
1899 ldl=
1900elif check_func dlopen -ldl; then
1901 ldl=-ldl
8bf5d58f
MN
1902fi
1903
75ecf149
DB
1904# Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
1905check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
1906
7483e694
DB
1907check_func fork
1908check_func gethrtime
1909check_func getrusage
094c09bb 1910check_func inet_aton $network_extralibs
7483e694
DB
1911check_func memalign
1912check_func mkstemp
1f91cdce 1913check_func posix_memalign
b507ebd1 1914check_func_headers io.h setmode
2446d3d6 1915check_func_headers windows.h GetProcessTimes
6ffa87d3 1916
e16e49ac 1917check_header conio.h
a98bb16d
RP
1918check_header dlfcn.h
1919check_header malloc.h
bf6ce82d 1920check_header poll.h
b58412f1 1921check_header sys/mman.h
b091aa44 1922check_header sys/resource.h
bf6ce82d 1923check_header sys/select.h
a98bb16d 1924check_header termios.h
272081b0
CEH
1925check_header vdpau/vdpau.h
1926check_header vdpau/vdpau_x11.h
68178ca9 1927check_header X11/extensions/XvMClib.h
a98bb16d 1928
1f91cdce
RP
1929if ! enabled_any memalign memalign_hack posix_memalign && enabled need_memalign ; then
1930 die "Error, no aligned memory allocator but SSE enabled, disable it or use --enable-memalign-hack."
a98bb16d 1931fi
e16e49ac 1932
a4fa192c 1933disabled zlib || check_lib zlib.h zlibVersion -lz || disable zlib
632948bd 1934disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
57bd82d4
MR
1935
1936# check for some common methods of building with pthread support
1937# do this before the optional library checks as some of them require pthreads
1938if enabled pthreads; then
9e7fd101
MR
1939 if check_func pthread_create; then
1940 :
1941 elif check_func pthread_create -pthread; then
1942 add_cflags -pthread
afc9aee2 1943 add_extralibs -pthread
9e7fd101
MR
1944 elif check_func pthread_create -pthreads; then
1945 add_cflags -pthreads
afc9aee2 1946 add_extralibs -pthreads
8d94f606
GT
1947 elif check_func pthread_create -lpthreadGC2; then
1948 add_extralibs -lpthreadGC2
9e7fd101
MR
1949 elif ! check_lib pthread.h pthread_create -lpthread; then
1950 die "ERROR: can't find pthreads library"
1951 fi
57bd82d4
MR
1952fi
1953
8eee7025 1954for thread in $THREADS_LIST; do
e5f94c2b 1955 if enabled $thread; then
3ae3b721
RP
1956 test -n "$thread_type" &&
1957 die "ERROR: Only one thread type must be selected." ||
e5f94c2b 1958 thread_type="$thread"
e5f94c2b
RP
1959 fi
1960done
1961
fdf88598
MR
1962check_lib math.h sin -lm
1963
a33cab3a 1964# test for C99 functions in math.h
7b04b8a0 1965for func in llrint lrint lrintf round roundf truncf; do
a33cab3a 1966 check_exec <<EOF && enable $func || disable $func
f32adb22 1967#include <math.h>
a33cab3a 1968int main(void) { return ($func(3.999f) > 0)?0:1; }
f32adb22 1969EOF
a33cab3a 1970done
f32adb22 1971
57bd82d4 1972# these are off by default, so fail if requested and not available
79fda097 1973enabled avisynth && require2 vfw32 "windows.h vfw.h" AVIFileInit -lvfw32
7483e694
DB
1974enabled libamr_nb && require libamrnb amrnb/interf_dec.h Speech_Decode_Frame_init -lamrnb -lm
1975enabled libamr_wb && require libamrwb amrwb/dec_if.h D_IF_init -lamrwb -lm
e3cc7d6f 1976enabled libdirac && add_cflags $(pkg-config --cflags dirac) &&
36718e51
DB
1977 require libdirac libdirac_decoder/dirac_parser.h dirac_decoder_init -ldirac_decoder &&
1978 require libdirac libdirac_encoder/dirac_encoder.h dirac_encoder_init -ldirac_encoder
79fda097
DB
1979enabled libfaac && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
1980enabled libfaad && require2 libfaad faad.h faacDecOpen -lfaad
7483e694 1981enabled libgsm && require libgsm gsm.h gsm_create -lgsm
2bfecf73 1982enabled libmp3lame && require libmp3lame lame/lame.h lame_init -lmp3lame -lm
7483e694 1983enabled libnut && require libnut libnut.h nut_demuxer_init -lnut
3d6fac8c 1984enabled libopenjpeg && require libopenjpeg openjpeg.h opj_version -lopenjpeg
36718e51
DB
1985enabled libschroedinger && add_cflags $(pkg-config --cflags schroedinger-1.0) &&
1986 require libschroedinger schroedinger/schro.h schro_init $(pkg-config --libs schroedinger-1.0)
ae14f311 1987enabled libspeex && require libspeex speex/speex.h speex_decoder_init -lspeex
7483e694
DB
1988enabled libtheora && require libtheora theora/theora.h theora_info_init -ltheora -logg
1989enabled libvorbis && require libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
2bfecf73 1990enabled libx264 && require libx264 x264.h x264_encoder_open -lx264 -lm &&
57f0ec6e
MR
1991 { check_cpp_condition x264.h "X264_BUILD >= 65" ||
1992 die "ERROR: libx264 version must be >= 0.65."; }
2bfecf73 1993enabled libxvid && require libxvid xvid.h xvid_global -lxvidcore
7483e694 1994enabled mlib && require mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
8ac17293 1995
0b4a1821
AS
1996# libdc1394 check
1997if enabled libdc1394; then
1998 { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
1999 enable libdc1394_2; } ||
2000 { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
2001 enable libdc1394_1; } ||
2002 die "ERROR: No version of libdc1394 found "
2003fi
2004
2005
c13e1abd
FH
2006_restrict=
2007for restrict_keyword in restrict __restrict__ __restrict; do
57bd82d4 2008 check_cc <<EOF && _restrict=$restrict_keyword && break
dcd479c0
MR
2009void foo(char * $restrict_keyword p);
2010EOF
c13e1abd
FH
2011done
2012
a86b921c 2013##########################################
29799f8b 2014# SDL check
a86b921c 2015
497237c7
RP
2016disable sdl_too_old
2017disable sdl
6a1a892f 2018SDL_CONFIG="${cross_prefix}sdl-config"
2270b4b2 2019if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
225e21ef
MR
2020 sdl_cflags=`"${SDL_CONFIG}" --cflags`
2021 temp_cflags $sdl_cflags
dcd479c0 2022 temp_extralibs `"${SDL_CONFIG}" --libs`
1ca5d97f 2023 if check_lib2 SDL.h SDL_Init; then
dcd479c0 2024 _sdlversion=`"${SDL_CONFIG}" --version | sed 's/[^0-9]//g'`
29f3b38a 2025 if test "$_sdlversion" -lt 121 ; then
497237c7 2026 enable sdl_too_old
dcd479c0 2027 else
497237c7 2028 enable sdl
225e21ef 2029 check_cc $sdl_cflags <<EOF && enable sdl_video_size
29f3b38a 2030#include <SDL.h>
d6773f56 2031int main(int argc, char **argv){
29f3b38a
MR
2032 const SDL_VideoInfo *vi = SDL_GetVideoInfo();
2033 int w = vi->current_w;
2034 return 0;
2035}
2036EOF
dcd479c0
MR
2037 fi
2038 fi
29f3b38a 2039 restore_flags
c3f6b472 2040fi
57bd82d4 2041
2270b4b2 2042texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
146ea952 2043
7a91333f 2044##########################################
73b46a95
RP
2045# Network check
2046
2047if enabled network; then
96000432 2048 check_type "sys/types.h sys/socket.h" socklen_t
73b46a95
RP
2049 # Prefer arpa/inet.h over winsock2
2050 if check_header arpa/inet.h ; then
2051 check_func closesocket
2052 elif check_header winsock2.h ; then
ea10ddde 2053 network_extralibs="-lws2_32"
72be9e73 2054 check_type ws2tcpip.h socklen_t
2446d3d6 2055 check_func_headers winsock2.h closesocket
73b46a95
RP
2056 fi
2057fi
2058
2059##########################################
29799f8b 2060# IPv6 check
7a91333f 2061
497237c7 2062enabled network && enabled ipv6 && check_ld <<EOF && enable ipv6 || disable ipv6
7a91333f
HZ
2063#include <sys/types.h>
2064#include <sys/socket.h>
2065#include <netinet/in.h>
2066#include <netdb.h>
db817cf3 2067int main(void) {
7483e694
DB
2068 struct sockaddr_storage saddr;
2069 struct ipv6_mreq mreq6;
2070 getaddrinfo(0,0,0,0);
2071 getnameinfo(0,0,0,0,0,0,0);
2072 IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
7a91333f
HZ
2073}
2074EOF
2075
06e31011
RP
2076check_header linux/videodev.h
2077check_header linux/videodev2.h
1b6e8b73 2078check_header sys/videoio.h
47f38850 2079
2446d3d6 2080check_func_headers "windows.h vfw.h" capCreateCaptureWindow -lvfw32
c2345207 2081
f8aa696f 2082# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
1c915f83
RP
2083{ check_header dev/bktr/ioctl_meteor.h &&
2084 check_header dev/bktr/ioctl_bt848.h; } ||
2085{ check_header machine/ioctl_meteor.h &&
2086 check_header machine/ioctl_bt848.h; } ||
2087{ check_header dev/video/meteor/ioctl_meteor.h &&
2088 check_header dev/video/bktr/ioctl_bt848.h; } ||
2089check_header dev/ic/bt8xx.h
f8aa696f 2090
c7682de0
RP
2091check_header sys/soundcard.h
2092check_header soundcard.h
deb29777 2093
35fd8122
NG
2094check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
2095
7483e694 2096# deal with the X11 frame grabber
56a059ac 2097enabled x11grab &&
f58f4ce1
GP
2098check_header X11/Xlib.h &&
2099check_header X11/extensions/XShm.h &&
2100check_func XOpenDisplay -lX11 &&
06eab4ba 2101check_func XShmCreateImage -lX11 -lXext
f58f4ce1 2102
40bcf4c7 2103enabled debug && add_cflags -g"$debuglevel"
57bd82d4
MR
2104
2105# add some useful compiler flags if supported
2106check_cflags -Wdeclaration-after-statement
dcd479c0
MR
2107check_cflags -Wall
2108check_cflags -Wno-switch
c07bd6a9
MN
2109check_cflags -Wdisabled-optimization
2110check_cflags -Wpointer-arith
2111check_cflags -Wredundant-decls
cc1fb623 2112check_cflags -Wno-pointer-sign
f4929996 2113check_cflags -Wcast-qual
9aceb3cf 2114check_cflags -Wwrite-strings
652a5bf6 2115check_cflags -Wtype-limits
764551c6 2116check_cflags -Wundef
5af4e0cc 2117enabled extra_warnings && check_cflags -Winline
cf9d24ad 2118
57bd82d4 2119# add some linker flags
5c0e9479 2120check_ldflags -Wl,--warn-common
8351d2ba
DB
2121check_ldflags -Wl,--as-needed
2122check_ldflags '-Wl,-rpath-link,\$(BUILD_ROOT)/libpostproc -Wl,-rpath-link,\$(BUILD_ROOT)/libswscale -Wl,-rpath-link,\$(BUILD_ROOT)/libavfilter -Wl,-rpath-link,\$(BUILD_ROOT)/libavdevice -Wl,-rpath-link,\$(BUILD_ROOT)/libavformat -Wl,-rpath-link,\$(BUILD_ROOT)/libavcodec -Wl,-rpath-link,\$(BUILD_ROOT)/libavutil'
c2fd6530 2123check_ldflags -Wl,-Bsymbolic
94a3401e 2124
bd2216e4
MR
2125if enabled small; then
2126 check_cflags -Os # not all compilers support -Os
8400d6b8
DB
2127 optimizations="small"
2128elif enabled optimizations; then
629687f6 2129 if enabled xlc; then
0f010b2f
DB
2130 add_cflags -O5
2131 add_ldflags -O5
df442a8d
MR
2132 elif enabled ccc; then
2133 add_cflags -fast
cf9d24ad 2134 else
0f010b2f 2135 add_cflags -O3
cf9d24ad 2136 fi
cddf3f45 2137fi
11fdbc44 2138check_cflags -fno-math-errno
b2eb2ff0 2139check_cflags -fno-signed-zeros
cddf3f45 2140
504a64b9 2141# add some flags for Intel C Compiler
629687f6 2142if enabled icc; then
b1598b58
MR
2143 # Just warnings, no remarks
2144 check_cflags -w1
2145 # -wd: Disable following warnings
2146 # 144, 167, 556: -Wno-pointer-sign
2147 # 10006: ignoring unknown option -fno-signed-zeros
2148 # 10156: ignoring option '-W'; no argument required
2149 check_cflags -wd144,167,556,10006,10156
2150 # 11030: Warning unknown option --as-needed
2151 # 10156: ignoring option '-export'; no argument required
2152 check_ldflags -wd10156,11030
2153 # Allow to compile with optimizations
2154 check_ldflags -march=$cpu
df442a8d
MR
2155elif enabled ccc; then
2156 # disable some annoying warnings
2157 add_cflags -msg_disable cvtu32to64
2158 add_cflags -msg_disable embedcomment
2159 add_cflags -msg_disable needconstext
2160 add_cflags -msg_disable nomainieee
2161 add_cflags -msg_disable ptrmismatch1
2162 add_cflags -msg_disable unreachcode
504a64b9
CEH
2163fi
2164
80581e98 2165# PIC flags for shared library objects where they are needed
5af4e0cc 2166if enabled shared; then
569cb218
MR
2167 # LIBOBJFLAGS may have already been set in the OS configuration
2168 if test -z "$LIBOBJFLAGS" ; then
a8e28698 2169 case "${subarch-$arch}" in
b6bd7268 2170 x86_64|ia64|alpha|sparc*|power*|parisc*|mips*) LIBOBJFLAGS='$(PIC)' ;;
569cb218
MR
2171 esac
2172 fi
80581e98
MN
2173fi
2174
90be59ef 2175if enabled gprof; then
0f010b2f
DB
2176 add_cflags -p
2177 add_ldflags -p
1db54e20
DB
2178fi
2179
7f3c02fc 2180# Find out if the .align argument is a power of two or not.
9377b6ce 2181check_asm asmalign_pot '".align 3"'
4454dc1b 2182
7483e694
DB
2183enabled_any $DECODER_LIST && enable decoders
2184enabled_any $ENCODER_LIST && enable encoders
2185enabled_any $BSF_LIST && enable bsfs
2186enabled_any $DEMUXER_LIST && enable demuxers
2187enabled_any $MUXER_LIST && enable muxers
f7679c54 2188enabled_any $FILTER_LIST && enable filters
7483e694
DB
2189enabled_any $INDEV_LIST && enable demuxers
2190enabled_any $OUTDEV_LIST && enable muxers
2191enabled_any $PROTOCOL_LIST && enable protocols
2192
2193enabled_any $THREADS_LIST && enable threads
2194
2195check_deps $CONFIG_LIST \
b6bb00b0 2196 $CONFIG_EXTRA \
7483e694
DB
2197 $HAVE_LIST \
2198 $DECODER_LIST \
2199 $ENCODER_LIST \
2200 $PARSER_LIST \
2201 $BSF_LIST \
2202 $DEMUXER_LIST \
2203 $MUXER_LIST \
f7679c54 2204 $FILTER_LIST \
7483e694
DB
2205 $INDEV_LIST \
2206 $OUTDEV_LIST \
2207 $PROTOCOL_LIST \
f70f03f6 2208
3e89171a 2209echo "install prefix $prefix"
f36958f8
DB
2210echo "source path $source_path"
2211echo "C compiler $cc"
bfd5afd8 2212echo ".align is power-of-two $asmalign_pot"
f36958f8 2213echo "ARCH $arch ($cpu)"
ce8871c2
MR
2214if test "$build_suffix" != ""; then
2215 echo "build suffix $build_suffix"
eb94aca9 2216fi
ac63af34
DB
2217if test "$extra_version" != ""; then
2218 echo "version string suffix $extra_version"
2219fi
0db2ce77 2220echo "big-endian ${bigendian-no}"
5b6c2cbd 2221if enabled x86; then
af44e8e4 2222 echo "yasm ${yasm-no}"
0db2ce77 2223 echo "MMX enabled ${mmx-no}"
30e98e62 2224 echo "MMX2 enabled ${mmx2-no}"
3bf96eec 2225 echo "3DNow! enabled ${amd3dnow-no}"
a1ef9f08 2226 echo "3DNow! extended enabled ${amd3dnowext-no}"
1bb04d5a 2227 echo "SSE enabled ${sse-no}"
30e98e62 2228 echo "SSSE3 enabled ${ssse3-no}"
0db2ce77
MR
2229 echo "CMOV enabled ${cmov-no}"
2230 echo "CMOV is fast ${fast_cmov-no}"
971cc990
MN
2231 echo "EBX available ${ebx_available-no}"
2232 echo "EBP available ${ebp_available-no}"
d3a4b4e0 2233 echo "10 operands supported ${ten_operands-no}"
e41e8342 2234fi
5b6c2cbd 2235if enabled arm; then
0db2ce77
MR
2236 echo "ARMv5TE enabled ${armv5te-no}"
2237 echo "ARMv6 enabled ${armv6-no}"
ab5cb084 2238 echo "ARMv6T2 enabled ${armv6t2-no}"
f55b299a 2239 echo "ARM VFP enabled ${armvfp-no}"
0db2ce77 2240 echo "IWMMXT enabled ${iwmmxt-no}"
6b18d278 2241 echo "NEON enabled ${neon-no}"
eba9ae3c 2242fi
5b6c2cbd 2243if enabled mips; then
0db2ce77 2244 echo "MMI enabled ${mmi-no}"
e41e8342 2245fi
5b6c2cbd 2246if enabled ppc; then
0db2ce77 2247 echo "AltiVec enabled ${altivec-no}"
30e98e62 2248 echo "PPC 4xx optimizations ${ppc4xx-no}"
0db2ce77 2249 echo "dcbzl available ${dcbzl-no}"
30e98e62
DB
2250 echo "performance report ${powerpc_perf-no}"
2251fi
2252if enabled sparc; then
2253 echo "VIS enabled ${vis-no}"
e41e8342 2254fi
0db2ce77
MR
2255echo "gprof enabled ${gprof-no}"
2256echo "debug symbols ${debug-no}"
87a0fb62 2257echo "strip symbols ${stripping-no}"
8400d6b8 2258echo "optimizations ${optimizations-no}"
0db2ce77
MR
2259echo "static ${static-no}"
2260echo "shared ${shared-no}"
4a24ab64 2261echo "postprocessing support ${postproc-no}"
f7679c54 2262echo "new filter support ${avfilter-no}"
81124ba0 2263echo "filters using lavformat ${avfilter_lavf-no}"
0db2ce77 2264echo "network support ${network-no}"
90be59ef 2265if enabled network; then
0db2ce77 2266 echo "IPv6 support ${ipv6-no}"
bfd5afd8 2267fi
0db2ce77
MR
2268echo "threading support ${thread_type-no}"
2269echo "SDL support ${sdl-no}"
90be59ef 2270if enabled sdl_too_old; then
bfd5afd8
DB
2271 echo "-> Your SDL version is too old - please upgrade to have FFplay/SDL support."
2272fi
0db2ce77
MR
2273echo "Sun medialib support ${mlib-no}"
2274echo "AVISynth enabled ${avisynth-no}"
0db2ce77
MR
2275echo "libamr-nb support ${libamr_nb-no}"
2276echo "libamr-wb support ${libamr_wb-no}"
f7b8bffe 2277echo "libdc1394 support ${libdc1394-no}"
690bfceb 2278echo "libdirac enabled ${libdirac-no}"
0db2ce77
MR
2279echo "libfaac enabled ${libfaac-no}"
2280echo "libfaad enabled ${libfaad-no}"
7e0871a7 2281echo "libfaad dlopened ${libfaadbin-no}"
0db2ce77
MR
2282echo "libgsm enabled ${libgsm-no}"
2283echo "libmp3lame enabled ${libmp3lame-no}"
2284echo "libnut enabled ${libnut-no}"
9a77d59a 2285echo "libopenjpeg enabled ${libopenjpeg-no}"
f7cd9eed 2286echo "libschroedinger enabled ${libschroedinger-no}"
ae14f311 2287echo "libspeex enabled ${libspeex-no}"
0db2ce77
MR
2288echo "libtheora enabled ${libtheora-no}"
2289echo "libvorbis enabled ${libvorbis-no}"
d6bd62db
DB
2290echo "libx264 enabled ${libx264-no}"
2291echo "libxvid enabled ${libxvid-no}"
272081b0 2292echo "vdpau enabled ${vdpau-no}"
0db2ce77 2293echo "zlib enabled ${zlib-no}"
f402916e 2294echo "bzlib enabled ${bzlib-no}"
2c62e737 2295echo
de6d9b64 2296
f7679c54 2297for type in decoder encoder parser demuxer muxer protocol filter bsf indev outdev; do
8138b9db 2298 echo "Enabled ${type}s:"
f65c9da1 2299 eval list=\$$(toupper $type)_LIST
8138b9db 2300 for part in $list; do
f65c9da1
MR
2301 enabled $part && echo ${part%_*}
2302 done | sort | pr -3 -t
2303 echo
8138b9db
RP
2304done
2305
ba321adb
JK
2306license="LGPL"
2307if enabled nonfree; then
2308 license="unredistributable"
2309elif enabled gpl; then
2310 license="GPL"
2311fi
2312
2313echo "License: $license"
ca5323af 2314
cf1392e9
DB
2315echo "Creating config.mak and config.h..."
2316
29799f8b
DB
2317echo "# Automatically generated by configure - do not modify!" > config.mak
2318echo "/* Automatically generated by configure - do not modify! */" > $TMPH
9c05103f
DB
2319echo "#ifndef FFMPEG_CONFIG_H" >> $TMPH
2320echo "#define FFMPEG_CONFIG_H" >> $TMPH
0fd12426 2321echo "#define FFMPEG_CONFIGURATION \"$FFMPEG_CONFIGURATION\"" >> $TMPH
14a8acf1 2322echo "#define FFMPEG_DATADIR \"$(eval c_escape $datadir)\"" >> $TMPH
de6d9b64 2323
d921f03f 2324echo "FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION" >> config.mak
c9d19248 2325echo "prefix=$prefix" >> config.mak
22a324da
DB
2326echo "LIBDIR=\$(DESTDIR)$libdir" >> config.mak
2327echo "SHLIBDIR=\$(DESTDIR)$shlibdir" >> config.mak
2328echo "INCDIR=\$(DESTDIR)$incdir" >> config.mak
2329echo "BINDIR=\$(DESTDIR)$bindir" >> config.mak
14a8acf1 2330echo "DATADIR=\$(DESTDIR)$datadir" >> config.mak
22a324da 2331echo "MANDIR=\$(DESTDIR)$mandir" >> config.mak
980fc7b8 2332echo "CC=$cc" >> config.mak
304d586d 2333echo "YASM=$yasmexe" >> config.mak
980fc7b8 2334echo "AR=$ar" >> config.mak
be7109c1 2335echo "RANLIB=$ranlib" >> config.mak
20369773 2336echo "LN_S=$ln_s" >> config.mak
87a0fb62 2337enabled stripping &&
3ae3b721 2338 echo "STRIP=$strip" >> config.mak ||
f25fc9b1 2339 echo "STRIP=echo ignoring strip" >> config.mak
75388c74 2340
a9b3f630 2341echo "OPTFLAGS=$CFLAGS" >> config.mak
0f3cb305 2342echo "LDFLAGS=$LDFLAGS" >> config.mak
c536cb09 2343echo "FFSERVERLDFLAGS=$FFSERVERLDFLAGS" >> config.mak
e1707f52 2344echo "SHFLAGS=$SHFLAGS" >> config.mak
304d586d 2345echo "YASMFLAGS=$YASMFLAGS" >> config.mak
80581e98 2346echo "LIBOBJFLAGS=$LIBOBJFLAGS" >> config.mak
5af4e0cc 2347echo "BUILD_STATIC=$static" >> config.mak
ce8871c2 2348echo "BUILDSUF=$build_suffix" >> config.mak
c5f14466 2349echo "FULLNAME=$FULLNAME" >> config.mak
f3ec2d46 2350echo "LIBPREF=$LIBPREF" >> config.mak
c5f14466 2351echo "LIBSUF=$LIBSUF" >> config.mak
24743a76 2352echo "LIBNAME=$LIBNAME" >> config.mak
f3ec2d46 2353echo "SLIBPREF=$SLIBPREF" >> config.mak
c5f14466
RP
2354echo "SLIBSUF=$SLIBSUF" >> config.mak
2355echo "EXESUF=$EXESUF" >> config.mak
ac63af34 2356echo "EXTRA_VERSION=$extra_version" >> config.mak
315c741d 2357echo "DEPEND_CMD=$DEPEND_CMD" >> config.mak
9da6609f
MR
2358echo "HOSTCC=$host_cc" >> config.mak
2359echo "HOSTCFLAGS=$host_cflags" >> config.mak
2360echo "HOSTLDFLAGS=$host_ldflags" >> config.mak
2361echo "HOSTLIBS=$host_libs" >> config.mak
a7ada2ba
MR
2362echo "TARGET_EXEC=$target_exec" >> config.mak
2363echo "TARGET_PATH=$target_path" >> config.mak
4dc62701 2364
90be59ef 2365if enabled bigendian; then
7483e694
DB
2366 echo "WORDS_BIGENDIAN=yes" >> config.mak
2367 echo "#define WORDS_BIGENDIAN 1" >> $TMPH
91d1f1a4 2368fi
44161118 2369
90be59ef 2370if enabled sdl; then
7483e694
DB
2371 echo "SDL_LIBS=`"${SDL_CONFIG}" --libs`" >> config.mak
2372 echo "SDL_CFLAGS=`"${SDL_CONFIG}" --cflags`" >> config.mak
a86b921c 2373fi
90be59ef 2374if enabled texi2html; then
7483e694 2375 echo "BUILD_DOC=yes" >> config.mak
146ea952 2376fi
5a872801 2377
719c8e00
MR
2378get_version(){
2379 name=$1
2380 file=$source_path/$2
147e7692
MR
2381 eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
2382 eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
0e32c8c6
MR
2383 lcname=$(tolower $name)
2384 eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
2385 eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
719c8e00
MR
2386}
2387
147e7692
MR
2388get_version LIBSWSCALE libswscale/swscale.h
2389get_version LIBPOSTPROC libpostproc/postprocess.h
2390get_version LIBAVCODEC libavcodec/avcodec.h
2391get_version LIBAVDEVICE libavdevice/avdevice.h
2392get_version LIBAVFORMAT libavformat/avformat.h
2393get_version LIBAVUTIL libavutil/avutil.h
a6601d69 2394get_version LIBAVFILTER libavfilter/avfilter.h
5a872801 2395
5af4e0cc 2396if enabled shared; then
7483e694
DB
2397 echo "BUILD_SHARED=yes" >> config.mak
2398 echo "PIC=-fPIC -DPIC" >> config.mak
dcc01c06 2399 echo "LIBTARGET=${LIBTARGET}" >> config.mak
7483e694
DB
2400 echo "SLIBNAME=${SLIBNAME}" >> config.mak
2401 echo "SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}" >> config.mak
2402 echo "SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}" >> config.mak
d22e8442 2403 echo "SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}" >> config.mak
7483e694
DB
2404 echo "SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}" >> config.mak
2405 echo "SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}" >> config.mak
2406 echo "SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}" >> config.mak
0319c531 2407fi
d7e27559 2408echo "LIB_INSTALL_EXTRA_CMD=${LIB_INSTALL_EXTRA_CMD}" >> config.mak
ef0bc4c9 2409echo "EXTRALIBS=$extralibs" >> config.mak
d2845d68 2410
7b5e8a27
DB
2411echo "ARCH=$arch" >> config.mak
2412
3d907e22
MR
2413print_config ARCH_ $TMPH config.mak $ARCH_LIST
2414print_config HAVE_ $TMPH config.mak $HAVE_LIST
7483e694 2415print_config CONFIG_ $TMPH config.mak $CONFIG_LIST \
b6bb00b0 2416 $CONFIG_EXTRA \
7483e694
DB
2417 $DECODER_LIST \
2418 $ENCODER_LIST \
2419 $PARSER_LIST \
2420 $BSF_LIST \
2421 $DEMUXER_LIST \
2422 $MUXER_LIST \
f7679c54 2423 $FILTER_LIST \
7483e694
DB
2424 $PROTOCOL_LIST \
2425 $INDEV_LIST \
2426 $OUTDEV_LIST \
8ac17293 2427
c13e1abd
FH
2428echo "#define restrict $_restrict" >> $TMPH
2429
bd2216e4 2430if enabled small; then
7483e694 2431 echo "#define av_always_inline" >> $TMPH
bb801c97
MN
2432fi
2433
997baf01
MR
2434echo "SRC_PATH=\"$source_path\"" >> config.mak
2435echo "SRC_PATH_BARE=$source_path" >> config.mak
2436echo "BUILD_ROOT=\"$PWD\"" >> config.mak
0f3cb305 2437
8156056e 2438# Apparently it's not possible to portably echo a backslash.
3ae3b721 2439enabled asmalign_pot &&
7483e694 2440 printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH ||
295b8c70 2441 printf '#define ASMALIGN(ZEROBITS) ".align 1 << " #ZEROBITS "\\n\\t"\n' >> $TMPH
4454dc1b 2442
b4d96ba2 2443echo "#define EXTERN_PREFIX \"${extern_prefix}\"" >> $TMPH
bc634f6f 2444
9c05103f
DB
2445echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
2446
b7860763 2447# Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
3ae3b721
RP
2448cmp -s $TMPH config.h &&
2449 echo "config.h is unchanged" ||
2450 mv -f $TMPH config.h
3d204385 2451
165af439 2452# build tree in object directory if source path is different from current one
90be59ef 2453if enabled source_path_used; then
165af439 2454 DIRS="\
7483e694
DB
2455 doc \
2456 libavcodec \
2457 libavcodec/alpha \
a2fc0f6a 2458 libavcodec/arm \
7483e694 2459 libavcodec/bfin \
7483e694
DB
2460 libavcodec/mlib \
2461 libavcodec/ppc \
2462 libavcodec/sh4 \
2463 libavcodec/sparc \
a6493a8f 2464 libavcodec/x86 \
52a9cf34 2465 libavdevice \
f7679c54 2466 libavfilter \
7483e694
DB
2467 libavformat \
2468 libavutil \
2469 libpostproc \
2470 libswscale \
2471 tests \
2472 tools \
7483e694 2473 "
165af439 2474 FILES="\
7483e694
DB
2475 Makefile \
2476 common.mak \
71c61f62 2477 subdir.mak \
7483e694
DB
2478 doc/texi2pod.pl \
2479 libavcodec/Makefile \
52a9cf34 2480 libavdevice/Makefile \
f7679c54 2481 libavfilter/Makefile \
7483e694
DB
2482 libavformat/Makefile \
2483 libavutil/Makefile \
2484 libpostproc/Makefile \
2485 libswscale/Makefile \
2486 "
165af439 2487 for dir in $DIRS ; do
7483e694 2488 mkdir -p $dir
165af439
MR
2489 done
2490 for f in $FILES ; do
20369773 2491 $ln_s "$source_path/$f" $f
165af439
MR
2492 done
2493fi
def4272a 2494
def4272a 2495
d0674868 2496# build pkg-config files
def4272a 2497
d0674868
DB
2498pkgconfig_generate(){
2499name=$1
b0dfd108 2500shortname=${name#lib}${build_suffix}
d0674868
DB
2501comment=$2
2502version=$3
2503libs=$4
2504requires=$5
25cd5cb3 2505cat <<EOF > $name/$name.pc
3e89171a 2506prefix=$prefix
a94e666c 2507exec_prefix=\${prefix}
f2b7382c 2508libdir=$libdir
7622778e 2509includedir=$incdir
def4272a 2510
d0674868
DB
2511Name: $name
2512Description: $comment
2513Version: $version
5dcfe9f8
AH
2514Requires: $(disabled shared && echo $requires)
2515Requires.private: $(enabled shared && echo $requires)
def4272a 2516Conflicts:
12701f6e
AH
2517Libs: -L\${libdir} -l${shortname} $(disabled shared && echo $libs)
2518Libs.private: $(enabled shared && echo $libs)
76a448ed 2519Cflags: -I\${includedir}
def4272a 2520EOF
25cd5cb3 2521cat <<EOF > $name/$name-uninstalled.pc
def4272a
AJ
2522prefix=
2523exec_prefix=
46d1ff83 2524libdir=\${pcfiledir}
1d44d365 2525includedir=${source_path}
def4272a 2526
d0674868
DB
2527Name: $name
2528Description: $comment
2529Version: $version
2530Requires: $requires
def4272a 2531Conflicts:
12701f6e 2532Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
def4272a
AJ
2533Cflags: -I\${includedir}
2534EOF
d0674868 2535}
def4272a 2536
e426941d 2537pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
46983309
RT
2538pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
2539pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
2540pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "libavformat = $LIBAVFORMAT_VERSION"
3ed1a2ee 2541enabled avfilter &&
46983309 2542 pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
3ed1a2ee 2543enabled postproc &&
e426941d 2544 pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
e426941d 2545 pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"