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