Add rules to install generated headers
[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 57show_help(){
06454877
MR
58cat <<EOF
59Usage: configure [options]
60Options: [defaults in brackets after descriptions]
61
62Standard options:
63 --help print this message
64 --logfile=FILE log tests and output to FILE [config.err]
65 --disable-logging do not log configure debug information
66 --prefix=PREFIX install in PREFIX [$prefix]
67 --bindir=DIR install binaries in DIR [PREFIX/bin]
68 --datadir=DIR install data files in DIR [PREFIX/share/ffmpeg]
69 --libdir=DIR install libs in DIR [PREFIX/lib]
70 --shlibdir=DIR install shared libs in DIR [PREFIX/lib]
71 --incdir=DIR install includes in DIR [PREFIX/include]
72 --mandir=DIR install man page in DIR [PREFIX/share/man]
73
74Configuration options:
75 --disable-static do not build static libraries [no]
76 --enable-shared build shared libraries [no]
77 --enable-gpl allow use of GPL code, the resulting libs
78 and binaries will be under GPL [no]
79 --enable-version3 upgrade (L)GPL to version 3 [no]
80 --enable-nonfree allow use of nonfree code, the resulting libs
81 and binaries will be unredistributable [no]
82 --disable-doc do not build documentation
83 --disable-ffmpeg disable ffmpeg build
84 --disable-ffplay disable ffplay build
85 --disable-ffserver disable ffserver build
86 --enable-postproc enable GPLed postprocessing support [no]
87 --enable-avfilter video filter support [no]
88 --enable-avfilter-lavf video filters dependent on avformat [no]
89 --enable-beosthreads use BeOS threads [no]
90 --enable-os2threads use OS/2 threads [no]
91 --enable-pthreads use pthreads [no]
92 --enable-w32threads use Win32 threads [no]
93 --enable-x11grab enable X11 grabbing [no]
94 --disable-network disable network support [no]
95 --disable-ipv6 disable IPv6 support [no]
96 --disable-mpegaudio-hp faster (but less accurate) MPEG audio decoding [no]
97 --enable-gray enable full grayscale support (slower color)
98 --disable-swscale-alpha disable alpha channel support in swscale
99 --disable-fastdiv disable table-based division
100 --enable-small optimize for size instead of speed
101 --disable-aandct disable AAN DCT code
102 --disable-fft disable FFT code
103 --disable-golomb disable Golomb code
104 --disable-lpc disable LPC code
105 --disable-mdct disable MDCT code
106 --disable-rdft disable RDFT code
107 --disable-vaapi disable VAAPI code
108 --disable-vdpau disable VDPAU code
109 --enable-runtime-cpudetect detect cpu capabilities at runtime (bigger binary)
110 --enable-hardcoded-tables use hardcoded tables instead of runtime generation
111 --enable-memalign-hack emulate memalign, interferes with memory debuggers
112 --enable-beos-netserver enable BeOS netserver
113 --disable-encoder=NAME disable encoder NAME
114 --enable-encoder=NAME enable encoder NAME
115 --disable-encoders disable all encoders
116 --disable-decoder=NAME disable decoder NAME
117 --enable-decoder=NAME enable decoder NAME
118 --disable-decoders disable all decoders
119 --disable-hwaccel=NAME disable hwaccel NAME
120 --enable-hwaccel=NAME enable hwaccel NAME
121 --disable-hwaccels disable all hwaccels
122 --disable-muxer=NAME disable muxer NAME
123 --enable-muxer=NAME enable muxer NAME
124 --disable-muxers disable all muxers
125 --disable-demuxer=NAME disable demuxer NAME
126 --enable-demuxer=NAME enable demuxer NAME
127 --disable-demuxers disable all demuxers
128 --enable-parser=NAME enable parser NAME
129 --disable-parser=NAME disable parser NAME
130 --disable-parsers disable all parsers
131 --enable-bsf=NAME enable bitstream filter NAME
132 --disable-bsf=NAME disable bitstream filter NAME
133 --disable-bsfs disable all bitstream filters
134 --enable-protocol=NAME enable protocol NAME
135 --disable-protocol=NAME disable protocol NAME
136 --disable-protocols disable all protocols
137 --disable-indev=NAME disable input device NAME
138 --disable-outdev=NAME disable output device NAME
139 --disable-indevs disable input devices
140 --disable-outdevs disable output devices
141 --disable-devices disable all devices
142 --enable-filter=NAME enable filter NAME
143 --disable-filter=NAME disable filter NAME
144 --disable-filters disable all filters
145 --list-decoders show all available decoders
146 --list-encoders show all available encoders
147 --list-hwaccels show all available hardware accelerators
148 --list-muxers show all available muxers
149 --list-demuxers show all available demuxers
150 --list-parsers show all available parsers
151 --list-protocols show all available protocols
152 --list-bsfs show all available bitstream filters
153 --list-indevs show all available input devices
154 --list-outdevs show all available output devices
155 --list-filters show all available filters
156
157External library support:
158 --enable-avisynth enable reading of AVISynth script files [no]
159 --enable-bzlib enable bzlib [autodetect]
160 --enable-libopencore-amrnb enable AMR-NB de/encoding via libopencore-amrnb [no]
161 --enable-libopencore-amrwb enable AMR-WB decoding via libopencore-amrwb [no]
162 --enable-libdc1394 enable IIDC-1394 grabbing using libdc1394
163 and libraw1394 [no]
164 --enable-libdirac enable Dirac support via libdirac [no]
165 --enable-libfaac enable FAAC support via libfaac [no]
166 --enable-libfaad enable FAAD support via libfaad [no]
167 --enable-libfaadbin open libfaad.so.0 at runtime [no]
168 --enable-libgsm enable GSM support via libgsm [no]
169 --enable-libmp3lame enable MP3 encoding via libmp3lame [no]
170 --enable-libnut enable NUT (de)muxing via libnut,
171 native (de)muxer exists [no]
172 --enable-libopenjpeg enable JPEG 2000 decoding via OpenJPEG [no]
173 --enable-libschroedinger enable Dirac support via libschroedinger [no]
174 --enable-libspeex enable Speex decoding via libspeex [no]
175 --enable-libtheora enable Theora encoding via libtheora [no]
176 --enable-libvorbis enable Vorbis encoding via libvorbis,
177 native implementation exists [no]
178 --enable-libx264 enable H.264 encoding via x264 [no]
179 --enable-libxvid enable Xvid encoding via xvidcore,
180 native MPEG-4/Xvid encoder exists [no]
181 --enable-mlib enable Sun medialib [no]
182 --enable-zlib enable zlib [autodetect]
183
184Advanced options (experts only):
185 --source-path=PATH path to source code [$source_path]
186 --cross-prefix=PREFIX use PREFIX for compilation tools [$cross_prefix]
187 --enable-cross-compile assume a cross-compiler is used
188 --sysroot=PATH root of cross-build tree
189 --sysinclude=PATH location of cross-build system headers
190 --target-os=OS compiler targets OS [$target_os]
191 --target-exec=CMD command to run executables on target
192 --target-path=DIR path to view of build directory on target
193 --nm=NM use nm tool
194 --as=AS use assembler AS [$as_default]
195 --cc=CC use C compiler CC [$cc_default]
196 --ld=LD use linker LD
197 --host-cc=HOSTCC use host C compiler HOSTCC
198 --host-cflags=HCFLAGS use HCFLAGS when compiling for host
199 --host-ldflags=HLDFLAGS use HLDFLAGS when linking for host
200 --host-libs=HLIBS use libs HLIBS when linking for host
201 --extra-cflags=ECFLAGS add ECFLAGS to CFLAGS [$CFLAGS]
202 --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]
203 --extra-libs=ELIBS add ELIBS [$ELIBS]
204 --extra-version=STRING version string suffix []
205 --build-suffix=SUFFIX library name suffix []
206 --arch=ARCH select architecture [$arch]
207 --cpu=CPU select the minimum required CPU (affects
208 instruction selection, may crash on older CPUs)
209 --enable-powerpc-perf enable performance report on PPC
210 (requires enabling PMC)
c8a4ae00 211 --disable-asm disable all assembler optimizations
06454877
MR
212 --disable-altivec disable AltiVec optimizations
213 --disable-amd3dnow disable 3DNow! optimizations
214 --disable-amd3dnowext disable 3DNow! extended optimizations
215 --disable-mmx disable MMX optimizations
216 --disable-mmx2 disable MMX2 optimizations
217 --disable-sse disable SSE optimizations
218 --disable-ssse3 disable SSSE3 optimizations
219 --disable-armv5te disable armv5te optimizations
220 --disable-armv6 disable armv6 optimizations
221 --disable-armv6t2 disable armv6t2 optimizations
222 --disable-armvfp disable ARM VFP optimizations
223 --disable-iwmmxt disable iwmmxt optimizations
224 --disable-mmi disable MMI optimizations
225 --disable-neon disable neon optimizations
226 --disable-vis disable VIS optimizations
227 --disable-yasm disable use of yasm assembler
228 --enable-pic build position-independent code
229
230Developer options (useful when working on FFmpeg itself):
231 --disable-debug disable debugging symbols
232 --enable-debug=LEVEL set the debug level [$debuglevel]
233 --enable-gprof enable profiling with gprof [$gprof]
234 --disable-optimizations disable compiler optimizations
235 --enable-extra-warnings enable more compiler warnings
236 --disable-stripping disable stripping of executables and shared libraries
237
238NOTE: Object files are built at the place where configure is launched.
239EOF
60e8bc13 240 exit 0
74c53c2d 241}
cf9d24ad 242
57bd82d4 243log(){
2270b4b2 244 echo "$@" >> $logfile
57bd82d4
MR
245}
246
720c69da 247log_file(){
c8e9f801 248 log BEGIN $1
2270b4b2 249 pr -n -t $1 >> $logfile
c8e9f801
MR
250 log END $1
251}
252
2ba042a7 253echolog(){
c8e9f801 254 log "$@"
57bd82d4 255 echo "$@"
2ba042a7
MR
256}
257
258die(){
259 echolog "$@"
260 cat <<EOF
d326cf7f 261
2ba042a7
MR
262If you think configure made a mistake, make sure you are using the latest
263version from SVN. If the latest version fails, report the problem to the
e5d8ccd7 264ffmpeg-user@mplayerhq.hu mailing list or IRC #ffmpeg on irc.freenode.net.
2ba042a7 265EOF
e155a21a 266 if disabled logging; then
2ba042a7 267 cat <<EOF
e155a21a
DB
268Rerun configure with logging enabled (do not use --disable-logging), and
269include the log this produces with your report.
2ba042a7
MR
270EOF
271 else
272cat <<EOF
e155a21a
DB
273Include the log file "$logfile" produced by configure as this will help
274solving the problem.
2ba042a7
MR
275EOF
276 fi
57bd82d4
MR
277 exit 1
278}
279
6c6007d6 280# Avoid locale weirdness, besides we really just want to translate ASCII.
44161118 281toupper(){
6c6007d6 282 echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
44161118
MR
283}
284
4a5444db 285tolower(){
6c6007d6 286 echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
4a5444db
MR
287}
288
14a8acf1
MR
289c_escape(){
290 echo "$*" | sed 's/["\\]/\\\0/g'
291}
292
b04251c5
MR
293sh_quote(){
294 v=$(echo "$1" | sed "s/'/'\\\\''/g")
295 test "$v" = "${v#*[ |&;<>()$\`\\\"\'*?\[\]#~=%]}" || v="'$v'"
296 echo "$v"
297}
298
be8f2501
MR
299filter(){
300 pat=$1
301 shift
302 for v; do
98ef6079 303 eval "case $v in $pat) echo $v ;; esac"
be8f2501
MR
304 done
305}
306
a8d04fba
MR
307set_all(){
308 value=$1
309 shift
310 for var in $*; do
311 eval $var=$value
312 done
313}
314
72a43668
MR
315set_weak(){
316 value=$1
317 shift
318 for var; do
319 eval : \${$var:=$value}
320 done
321}
322
799c9e9b
MR
323pushvar(){
324 for var in $*; do
325 eval level=\${${var}_level:=0}
326 eval ${var}_${level}="\$$var"
327 eval ${var}_level=$(($level+1))
328 done
329}
330
331popvar(){
332 for var in $*; do
333 eval level=\${${var}_level:-0}
334 test $level = 0 && continue
335 eval level=$(($level-1))
336 eval $var="\${${var}_${level}}"
337 eval ${var}_level=$level
338 eval unset ${var}_${level}
339 done
340}
341
a8d04fba
MR
342enable(){
343 set_all yes $*
344}
345
346disable(){
347 set_all no $*
348}
349
72a43668
MR
350enable_weak(){
351 set_weak yes $*
352}
353
354disable_weak(){
355 set_weak no $*
356}
357
72702705 358enable_safe(){
fd07f803
MR
359 for var; do
360 enable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
361 done
72702705
MR
362}
363
364disable_safe(){
fd07f803
MR
365 for var; do
366 disable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
367 done
72702705
MR
368}
369
f9d328da
MR
370do_enable_deep(){
371 for var; do
372 enabled $var && continue
373 eval sel="\$${var}_select"
c510c7b5
MR
374 eval sgs="\$${var}_suggest"
375 pushvar var sgs
f9d328da 376 enable_deep $sel
c510c7b5
MR
377 popvar sgs
378 enable_deep_weak $sgs
f9d328da
MR
379 popvar var
380 done
381}
382
383enable_deep(){
384 do_enable_deep $*
385 enable $*
386}
387
72a43668
MR
388enable_deep_weak(){
389 do_enable_deep $*
390 enable_weak $*
391}
392
57bd82d4 393enabled(){
3250003c
MR
394 test "${1#!}" = "$1" && op== || op=!=
395 eval test "x\$${1#!}" $op "xyes"
44161118
MR
396}
397
37970ebf 398disabled(){
3250003c
MR
399 test "${1#!}" = "$1" && op== || op=!=
400 eval test "x\$${1#!}" $op "xno"
37970ebf
RP
401}
402
44161118
MR
403enabled_all(){
404 for opt; do
405 enabled $opt || return 1
406 done
407}
408
85bca2c5
DB
409disabled_all(){
410 for opt; do
411 disabled $opt || return 1
412 done
413}
414
44161118
MR
415enabled_any(){
416 for opt; do
417 enabled $opt && return 0
418 done
419}
420
85bca2c5
DB
421disabled_any(){
422 for opt; do
423 disabled $opt && return 0
424 done
f7b230a7 425 return 1
85bca2c5
DB
426}
427
c9d19248
MR
428set_default(){
429 for opt; do
88268e94 430 eval : \${$opt:=\$${opt}_default}
c9d19248
MR
431 done
432}
433
4a0d6686
AJ
434is_in(){
435 value=$1
436 shift
437 for var in $*; do
438 [ $var = $value ] && return 0
439 done
440 return 1
441}
442
30fd06be
MR
443check_deps(){
444 for cfg; do
3250003c 445 cfg="${cfg#!}"
799c9e9b
MR
446 enabled ${cfg}_checking && die "Circular dependency for $cfg."
447 disabled ${cfg}_checking && continue
448 enable ${cfg}_checking
449
30fd06be
MR
450 eval dep_all="\$${cfg}_deps"
451 eval dep_any="\$${cfg}_deps_any"
7ef3425f 452 eval dep_sel="\$${cfg}_select"
c510c7b5 453 eval dep_sgs="\$${cfg}_suggest"
3d7453e0
MR
454 eval dep_ifa="\$${cfg}_if"
455 eval dep_ifn="\$${cfg}_if_any"
799c9e9b 456
3d7453e0
MR
457 pushvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
458 check_deps $dep_all $dep_any $dep_sel $dep_sgs $dep_ifa $dep_ifn
459 popvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
799c9e9b 460
3d7453e0
MR
461 [ -n "$dep_ifa" ] && { enabled_all $dep_ifa && enable_weak $cfg; }
462 [ -n "$dep_ifn" ] && { enabled_any $dep_ifn && enable_weak $cfg; }
6a702d4c
MR
463 enabled_all $dep_all || disable $cfg
464 enabled_any $dep_any || disable $cfg
7ef3425f 465 disabled_any $dep_sel && disable $cfg
799c9e9b 466
4ec45764
RP
467 if enabled $cfg; then
468 eval dep_extralibs="\$${cfg}_extralibs"
469 test -n "$dep_extralibs" && add_extralibs $dep_extralibs
f9d328da 470 enable_deep $dep_sel
c510c7b5 471 enable_deep_weak $dep_sgs
4ec45764
RP
472 fi
473
799c9e9b 474 disable ${cfg}_checking
30fd06be
MR
475 done
476}
477
44161118
MR
478print_config(){
479 pfx=$1
480 header=$2
481 makefile=$3
482 shift 3
483 for cfg; do
5e622c40 484 ucname="$(toupper $cfg)"
44161118 485 if enabled $cfg; then
3d907e22 486 echo "#define ${pfx}${ucname} 1" >> $header
3d907e22
MR
487 echo "${pfx}${ucname}=yes" >> $makefile
488 else
b250f9c6 489 echo "#define ${pfx}${ucname} 0" >> $header
fbb6c6c2 490 echo "!${pfx}${ucname}=yes" >> $makefile
44161118
MR
491 fi
492 done
57bd82d4
MR
493}
494
495flags_saved(){
2270b4b2 496 (: ${SAVE_CFLAGS?}) 2> /dev/null
57bd82d4
MR
497}
498
dcd479c0 499save_flags(){
57bd82d4 500 flags_saved && return
dcd479c0
MR
501 SAVE_CFLAGS="$CFLAGS"
502 SAVE_LDFLAGS="$LDFLAGS"
503 SAVE_extralibs="$extralibs"
504}
505
506restore_flags(){
f5d28d10 507 flags_saved || return
dcd479c0
MR
508 CFLAGS="$SAVE_CFLAGS"
509 LDFLAGS="$SAVE_LDFLAGS"
510 extralibs="$SAVE_extralibs"
511 unset SAVE_CFLAGS
512 unset SAVE_LDFLAGS
513 unset SAVE_extralibs
514}
515
516temp_cflags(){
517 save_flags
518 CFLAGS="$CFLAGS $*"
519}
520
521temp_ldflags(){
522 save_flags
523 LDFLAGS="$LDFLAGS $*"
524}
525
526temp_extralibs(){
527 save_flags
528 extralibs="$extralibs $*"
529}
530
57bd82d4
MR
531append(){
532 var=$1
533 shift
534 flags_saved && eval "SAVE_$var=\"\$SAVE_$var $*\""
535 eval "$var=\"\$$var $*\""
536}
537
50a334e4 538add_cppflags(){
caf458dd 539 append CPPFLAGS $($filter_cppflags "$@")
50a334e4
MR
540}
541
57bd82d4 542add_cflags(){
caf458dd 543 append CFLAGS $($filter_cflags "$@")
57bd82d4
MR
544}
545
2f2e6c7c 546add_asflags(){
caf458dd 547 append ASFLAGS $($filter_asflags "$@")
2f2e6c7c
MR
548}
549
57bd82d4
MR
550add_ldflags(){
551 append LDFLAGS "$@"
552}
553
554add_extralibs(){
555 append extralibs "$@"
556}
557
b0cfb663 558check_cmd(){
b3cb5d51 559 log "$@"
2270b4b2 560 "$@" >> $logfile 2>&1
b0cfb663
MR
561}
562
dcd479c0 563check_cc(){
57bd82d4 564 log check_cc "$@"
2270b4b2 565 cat > $TMPC
720c69da 566 log_file $TMPC
50a334e4 567 check_cmd $cc $CPPFLAGS $CFLAGS "$@" -c -o $TMPO $TMPC
57bd82d4
MR
568}
569
570check_cpp(){
571 log check_cpp "$@"
2270b4b2 572 cat > $TMPC
720c69da 573 log_file $TMPC
9e7f3277 574 check_cmd $cc $CPPFLAGS $CFLAGS "$@" -E -o $TMPO $TMPC
dcd479c0
MR
575}
576
f65883c8
MR
577check_as(){
578 log check_as "$@"
579 cat > $TMPC
580 log_file $TMPC
2f2e6c7c 581 check_cmd $as $CPPFLAGS $ASFLAGS "$@" -c -o $TMPO $TMPC
f65883c8
MR
582}
583
940f335a
MR
584check_asm(){
585 log check_asm "$@"
586 name="$1"
3784e82e 587 code="$2"
940f335a 588 shift 2
49214f61
MR
589 disable $name
590 check_as "$@" <<EOF && enable $name
3784e82e 591void foo(void){ __asm__ volatile($code); }
940f335a
MR
592EOF
593}
594
304d586d
LM
595check_yasm(){
596 log check_yasm "$@"
597 echo "$1" > $TMPS
598 log_file $TMPS
599 shift 1
600 check_cmd $yasmexe $YASMFLAGS "$@" -o $TMPO $TMPS
601}
602
dcd479c0 603check_ld(){
57bd82d4 604 log check_ld "$@"
3155a644
MR
605 flags=''
606 libs=''
607 for f; do
608 test "${f}" = "${f#-l}" && flags="$flags $f" || libs="$libs $f"
609 done
2a194acd 610 check_cc $($filter_cflags $flags) || return
684b28e0 611 check_cmd $ld $LDFLAGS $flags -o $TMPE $TMPO $extralibs $libs
dcd479c0
MR
612}
613
50a334e4
MR
614check_cppflags(){
615 log check_cppflags "$@"
caf458dd
MR
616 set -- $($filter_cppflags "$@")
617 check_cc "$@" <<EOF && append CPPFLAGS "$@"
50a334e4
MR
618int x;
619EOF
620}
621
dcd479c0 622check_cflags(){
57bd82d4 623 log check_cflags "$@"
caf458dd
MR
624 set -- $($filter_cflags "$@")
625 check_cc "$@" <<EOF && append CFLAGS "$@"
dcd479c0
MR
626int x;
627EOF
628}
629
2ed46eea
MR
630test_ldflags(){
631 log test_ldflags "$@"
632 check_ld "$@" <<EOF
c23a0ac8 633int main(void){ return 0; }
dcd479c0
MR
634EOF
635}
636
2ed46eea
MR
637check_ldflags(){
638 log check_ldflags "$@"
639 test_ldflags "$@" && add_ldflags "$@"
640}
641
dcd479c0 642check_header(){
57bd82d4 643 log check_header "$@"
dcd479c0
MR
644 header=$1
645 shift
b77df637
MR
646 disable_safe $header
647 check_cpp "$@" <<EOF && enable_safe $header
dcd479c0
MR
648#include <$header>
649int x;
650EOF
651}
652
653check_func(){
57bd82d4 654 log check_func "$@"
dcd479c0
MR
655 func=$1
656 shift
d8bc5f06
MR
657 disable $func
658 check_ld "$@" <<EOF && enable $func
dcd479c0 659extern int $func();
c23a0ac8 660int main(void){ $func(); }
dcd479c0
MR
661EOF
662}
663
2446d3d6
DB
664check_func_headers(){
665 log check_func_headers "$@"
f8d7b072
MR
666 headers=$1
667 func=$2
668 shift 2
669 disable $func
670 incs=""
671 for hdr in $headers; do
672 incs="$incs
673#include <$hdr>"
674 done
cd0d9a9d 675 check_ld "$@" <<EOF && enable $func && enable_safe $headers
f8d7b072 676$incs
d6773f56 677int main(int argc, char **argv){
2b2c2a81 678 return (long) $func;
f8d7b072
MR
679}
680EOF
681}
682
a5344cf7
SS
683check_cpp_condition(){
684 log check_cpp_condition "$@"
685 header=$1
686 condition=$2
f855b7b9
MR
687 shift 2
688 check_cpp $($filter_cppflags "$@") <<EOF
a5344cf7
SS
689#include <$header>
690#if !($condition)
691#error "unsatisfied condition: $condition"
692#endif
693EOF
694}
695
57bd82d4
MR
696check_lib(){
697 log check_lib "$@"
698 header="$1"
699 func="$2"
700 shift 2
fcfcde17
MR
701 temp_extralibs "$@"
702 check_header $header && check_func $func && add_extralibs "$@"
703 err=$?
704 restore_flags
705 return $err
57bd82d4
MR
706}
707
f8d7b072
MR
708check_lib2(){
709 log check_lib2 "$@"
710 headers="$1"
711 func="$2"
712 shift 2
300cde27 713 check_func_headers "$headers" $func "$@" && add_extralibs "$@"
f8d7b072
MR
714}
715
dcd479c0 716check_exec(){
2270b4b2 717 check_ld "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
57bd82d4
MR
718}
719
7dfef245 720check_exec_crash(){
5e622c40 721 code=$(cat)
7dfef245
MR
722
723 # exit() is not async signal safe. _Exit (C99) and _exit (POSIX)
724 # are safe but may not be available everywhere. Thus we use
725 # raise(SIGTERM) instead. The check is run in a subshell so we
726 # can redirect the "Terminated" message from the shell. SIGBUS
727 # is not defined by standard C so it is used conditionally.
728
2270b4b2 729 (check_exec "$@") >> $logfile 2>&1 <<EOF
7dfef245
MR
730#include <signal.h>
731static void sighandler(int sig){
732 raise(SIGTERM);
733}
e5af4a11 734int main(void){
7dfef245
MR
735 signal(SIGILL, sighandler);
736 signal(SIGFPE, sighandler);
737 signal(SIGSEGV, sighandler);
738#ifdef SIGBUS
739 signal(SIGBUS, sighandler);
740#endif
741 { $code }
742}
743EOF
744}
745
72be9e73
DY
746check_type(){
747 log check_type "$@"
748 headers=$1
749 type=$2
750 shift 2
ae550ce9 751 disable_safe "$type"
72be9e73
DY
752 incs=""
753 for hdr in $headers; do
754 incs="$incs
755#include <$hdr>"
756 done
ae550ce9 757 check_cc "$@" <<EOF && enable_safe "$type"
72be9e73
DY
758$incs
759$type v;
760EOF
761}
762
14d36751
MR
763check_struct(){
764 log check_type "$@"
765 headers=$1
766 struct=$2
767 member=$3
768 shift 3
769 disable_safe "${struct}_${member}"
770 incs=""
771 for hdr in $headers; do
772 incs="$incs
773#include <$hdr>"
774 done
775 check_cc "$@" <<EOF && enable_safe "${struct}_${member}"
776$incs
777const void *p = &(($struct *)0)->$member;
778EOF
779}
780
57bd82d4
MR
781require(){
782 name="$1"
783 header="$2"
784 func="$3"
785 shift 3
786 check_lib $header $func "$@" || die "ERROR: $name not found"
dcd479c0
MR
787}
788
f8d7b072
MR
789require2(){
790 name="$1"
791 headers="$2"
792 func="$3"
793 shift 3
794 check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
795}
796
eea50282
MR
797check_foo_config(){
798 cfg=$1
799 pkg=$2
800 header=$3
801 func=$4
802 shift 4
803 disable $cfg
804 check_cmd ${pkg}-config --version
805 err=$?
806 if test "$err" = 0; then
5e622c40
DB
807 temp_cflags $(${pkg}-config --cflags)
808 temp_extralibs $(${pkg}-config --libs)
eea50282
MR
809 check_lib "$@" $header $func && enable $cfg
810 fi
811 return $err
812}
813
f0125de9
MR
814check_host_cc(){
815 log check_host_cc "$@"
816 cat > $TMPC
817 log_file $TMPC
818 check_cmd $host_cc $host_cflags "$@" -c -o $TMPO $TMPC
819}
820
821check_host_cflags(){
822 log check_host_cflags "$@"
823 check_host_cc "$@" <<EOF && append host_cflags "$@"
824int x;
825EOF
826}
827
c505dd31
MR
828apply(){
829 file=$1
830 shift
831 "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
832}
833
c34681df
MR
834cp_if_changed(){
835 cmp -s "$1" "$2" &&
836 echo "$2 is unchanged" ||
837 cp -f "$1" "$2"
838}
839
dcd61286
DB
840# CONFIG_LIST contains configurable options, while HAVE_LIST is for
841# system-dependent things.
842
4a0d6686
AJ
843COMPONENT_LIST="
844 bsfs
845 decoders
846 demuxers
847 encoders
3cde40aa 848 filters
5666fd73 849 hwaccels
c552605c 850 indevs
4a0d6686 851 muxers
c552605c 852 outdevs
4a0d6686
AJ
853 parsers
854 protocols
855"
856
857CONFIG_LIST="
858 $COMPONENT_LIST
e8ed9b7a 859 aandct
f7679c54
VS
860 avfilter
861 avfilter_lavf
c88f5d72
MR
862 avisynth
863 beos_netserver
f402916e 864 bzlib
c73f65d9 865 doc
27a9466b 866 fastdiv
c88f5d72
MR
867 ffmpeg
868 ffplay
869 ffserver
1848f7d9 870 fft
4f034993 871 golomb
c88f5d72 872 gpl
ecfc4f44 873 gprof
d8d0d0b2 874 gray
3abe5fbd 875 hardcoded_tables
c88f5d72 876 ipv6
f7b8bffe 877 libdc1394
690bfceb 878 libdirac
2eed5a46
DB
879 libfaac
880 libfaad
881 libfaadbin
c88f5d72 882 libgsm
6ebe07fb 883 libmp3lame
c88f5d72 884 libnut
0b175caa
DB
885 libopencore_amrnb
886 libopencore_amrwb
9a77d59a 887 libopenjpeg
f7cd9eed 888 libschroedinger
ae14f311 889 libspeex
150d2772 890 libtheora
c88f5d72 891 libvorbis
1cc60c47
DB
892 libx264
893 libxvid
f4d608e3 894 lpc
47a158cb 895 mdct
c88f5d72 896 memalign_hack
a8150374 897 mlib
c88f5d72
MR
898 mpegaudio_hp
899 network
3fe142e2 900 nonfree
8a3c8627 901 pic
4a24ab64 902 postproc
2b4c3615 903 powerpc_perf
68602540 904 rdft
e90f5b5a 905 runtime_cpudetect
2e35e684 906 shared
bd2216e4 907 small
2e35e684 908 static
a9ddb5b1 909 swscale_alpha
17492d5e
DB
910 vaapi
911 vdpau
9cad0e4e 912 version3
56a059ac 913 x11grab
c88f5d72 914 zlib
4a0d6686 915"
c88f5d72 916
8eee7025
DB
917THREADS_LIST='
918 beosthreads
d22e8442 919 os2threads
8eee7025
DB
920 pthreads
921 w32threads
922'
923
3f5b56e5
MR
924ARCH_LIST='
925 alpha
a2fc0f6a 926 arm
fdcd782d
MR
927 avr32
928 avr32_ap
929 avr32_uc
3f5b56e5
MR
930 bfin
931 ia64
932 m68k
933 mips
bae3abb0 934 mips64
3f5b56e5 935 parisc
79cb09b2 936 ppc
34d11b87 937 ppc64
3f5b56e5
MR
938 s390
939 sh4
940 sparc
941 sparc64
942 x86
943 x86_32
944 x86_64
945'
946
947ARCH_EXT_LIST='
1ac9331a 948 altivec
3bf96eec 949 amd3dnow
a1ef9f08 950 amd3dnowext
1ac9331a 951 armv5te
edab3048 952 armv6
ab5cb084 953 armv6t2
f55b299a 954 armvfp
3f5b56e5
MR
955 iwmmxt
956 mmi
957 mmx
d7f0920b 958 mmx2
6b18d278 959 neon
799fde37 960 ppc4xx
1bb04d5a 961 sse
9eeed841 962 ssse3
bd9d34a0 963 vis
3f5b56e5
MR
964'
965
966HAVE_LIST="
967 $ARCH_EXT_LIST
968 $THREADS_LIST
35fd8122 969 alsa_asoundlib_h
3f5b56e5 970 altivec_h
c9fdab0d 971 arpa_inet_h
e7ea5e3d 972 attribute_packed
08a85a59 973 bigendian
6bd859d6 974 bswap
ecf97f22 975 closesocket
1ac9331a 976 cmov
e16e49ac 977 conio_h
c88f5d72 978 dcbzl
f8aa696f
DB
979 dev_bktr_ioctl_bt848_h
980 dev_bktr_ioctl_meteor_h
981 dev_ic_bt8xx_h
982 dev_video_meteor_ioctl_meteor_h
983 dev_video_bktr_ioctl_bt848_h
18b67ae5 984 dlfcn_h
c88f5d72 985 dlopen
bc574408 986 dos_paths
245626d0
DB
987 ebp_available
988 ebx_available
6b7c7703
VS
989 exp2
990 exp2f
c2a29455 991 fast_64bit
669b5583 992 fast_clz
7073e9fc 993 fast_cmov
7b829d2a 994 fast_unaligned
9d99cc5a 995 fork
84882df6 996 getaddrinfo
da9e86f8 997 gethrtime
4e68cb8a 998 GetProcessTimes
66be5b45 999 getrusage
2e1913b1 1000 inet_aton
61d251db 1001 inline_asm
abfc8d05 1002 isatty
9f5ff83f 1003 ldbrx
0b4a1821
AS
1004 libdc1394_1
1005 libdc1394_2
a33cab3a 1006 llrint
291fd18a 1007 log2
6b7c7703 1008 log2f
85dd97ad 1009 loongson
a33cab3a 1010 lrint
c88f5d72 1011 lrintf
e4673692 1012 lzo1x_999_compress
f8aa696f
DB
1013 machine_ioctl_bt848_h
1014 machine_ioctl_meteor_h
c88f5d72
MR
1015 malloc_h
1016 memalign
6ffa87d3 1017 mkstemp
b4e806b2 1018 pld
1f91cdce 1019 posix_memalign
a33cab3a
MK
1020 round
1021 roundf
c88f5d72
MR
1022 sdl
1023 sdl_video_size
b507ebd1 1024 setmode
72be9e73 1025 socklen_t
deb29777 1026 soundcard_h
f8cda19e 1027 poll_h
c0018613 1028 struct_addrinfo
33a4dbdd 1029 struct_sockaddr_storage
b58412f1 1030 sys_mman_h
b091aa44 1031 sys_resource_h
81644c2e 1032 sys_select_h
deb29777 1033 sys_soundcard_h
1b6e8b73 1034 sys_videoio_h
d3a4b4e0 1035 ten_operands
e16e49ac 1036 termios_h
b265431e 1037 threads
7b04b8a0 1038 truncf
ce742de2 1039 vfp_args
7c5bfe7a 1040 VirtualAlloc
6ff3f3e7 1041 winsock2_h
cc078b5d 1042 xform_asm
304d586d 1043 yasm
0cb78cef 1044"
44161118 1045
b6bb00b0
MR
1046# options emitted with CONFIG_ prefix but not available on command line
1047CONFIG_EXTRA="
9cad0e4e
DB
1048 gplv3
1049 lgplv3
b6bb00b0
MR
1050"
1051
520cc7f1 1052CMDLINE_SELECT="
3f5b56e5 1053 $ARCH_EXT_LIST
520cc7f1 1054 $CONFIG_LIST
8eee7025 1055 $THREADS_LIST
c8a4ae00 1056 asm
db6107b6 1057 cross_compile
520cc7f1
MR
1058 debug
1059 extra_warnings
8c6afa4d 1060 logging
d2bbb2f7 1061 optimizations
87a0fb62 1062 stripping
7595a5e4 1063 yasm
520cc7f1 1064"
426be5dc
DB
1065
1066PATHS_LIST='
d156bede 1067 bindir
14a8acf1 1068 datadir
26759c44
MR
1069 incdir
1070 libdir
26759c44
MR
1071 mandir
1072 prefix
1073 shlibdir
426be5dc
DB
1074'
1075
1076CMDLINE_SET="
1077 $PATHS_LIST
1078 arch
313c46a6 1079 as
426be5dc
DB
1080 build_suffix
1081 cc
1082 cpu
1083 cross_prefix
50567afa 1084 dep_cc
ac63af34 1085 extra_version
9da6609f
MR
1086 host_cc
1087 host_cflags
1088 host_ldflags
1089 host_libs
82bb3329 1090 host_os
684b28e0 1091 ld
426be5dc 1092 logfile
89641463 1093 nm
26759c44 1094 source_path
c5200f17
MR
1095 sysinclude
1096 sysroot
a7ada2ba 1097 target_exec
26759c44 1098 target_os
a7ada2ba 1099 target_path
426be5dc 1100"
520cc7f1 1101
89f2932b
MR
1102CMDLINE_APPEND="
1103 extra_cflags
1104"
1105
912f3148
DB
1106# code dependency declarations
1107
9eeed841 1108# architecture extensions
808fa33c 1109
a2fc0f6a
MR
1110armv5te_deps="arm"
1111armv6_deps="arm"
ab5cb084 1112armv6t2_deps="arm"
a2fc0f6a
MR
1113armvfp_deps="arm"
1114iwmmxt_deps="arm"
808fa33c
MR
1115neon_deps="arm"
1116
e241ba14 1117mmi_deps="mips"
808fa33c
MR
1118
1119altivec_deps="ppc"
1120ppc4xx_deps="ppc"
1121
1122vis_deps="sparc"
1123
e939cedd 1124x86_64_select="cmov fast_cmov"
808fa33c
MR
1125amd3dnow_deps="mmx"
1126amd3dnowext_deps="amd3dnow"
9eeed841 1127mmx_deps="x86"
75aa95a6 1128mmx2_deps="mmx"
75aa95a6
DB
1129sse_deps="mmx"
1130ssse3_deps="sse"
9eeed841 1131
e939cedd 1132fast_64bit_if_any="alpha ia64 mips64 parisc64 ppc64 sparc64 x86_64"
669b5583 1133fast_clz_if_any="alpha armv5te avr32 mips ppc x86"
e939cedd 1134fast_unaligned_if_any="armv6 ppc x86"
669b5583 1135
89e053f8 1136need_memalign="altivec neon sse"
6fec122a 1137inline_asm_deps="!tms470"
89e053f8 1138
5666fd73 1139# decoders / encoders / hardware accelerators
f1e94694 1140aac_decoder_select="fft mdct aac_parser"
84c04e25 1141aac_encoder_select="fft mdct"
5b423887 1142ac3_decoder_select="fft mdct ac3_parser"
f4d608e3 1143alac_encoder_select="lpc"
47a158cb 1144atrac3_decoder_select="fft mdct"
4f034993 1145cavs_decoder_select="golomb"
47a158cb 1146cook_decoder_select="fft mdct"
2eef7c62 1147cscd_decoder_suggest="zlib"
47a158cb 1148dca_decoder_select="fft mdct"
e8ed9b7a 1149dnxhd_encoder_select="aandct"
2eef7c62 1150dxa_decoder_select="zlib"
baf91bb9 1151eac3_decoder_select="ac3_decoder"
84c04e25 1152eamad_decoder_select="aandct"
e8ed9b7a 1153eatgq_decoder_select="aandct"
d52b39c7 1154eatqi_decoder_select="aandct"
4f034993
MR
1155ffv1_decoder_select="golomb"
1156flac_decoder_select="golomb"
f4d608e3 1157flac_encoder_select="golomb lpc"
2eef7c62
AJ
1158flashsv_decoder_select="zlib"
1159flashsv_encoder_select="zlib"
4414137e 1160flv_decoder_select="h263_decoder"
4d4b4bd1 1161flv_encoder_select="h263_encoder"
e8ed9b7a 1162h261_encoder_select="aandct"
7f647ae0 1163h263_decoder_select="h263_parser"
e8ed9b7a 1164h263_encoder_select="aandct"
ff418735 1165h263_vaapi_hwaccel_deps="va_va_h"
95a61cfc 1166h263_vaapi_hwaccel_select="vaapi h263_decoder"
4414137e 1167h263i_decoder_select="h263_decoder"
fe629c2d 1168h263p_encoder_select="h263_encoder"
4f034993 1169h264_decoder_select="golomb"
ff418735 1170h264_vaapi_hwaccel_deps="va_va_h"
17492d5e 1171h264_vaapi_hwaccel_select="vaapi"
711dae77 1172h264_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
95a61cfc 1173h264_vdpau_decoder_select="vdpau h264_decoder"
47a158cb 1174imc_decoder_select="fft mdct"
4f034993
MR
1175jpegls_decoder_select="golomb"
1176jpegls_encoder_select="golomb"
e8ed9b7a 1177ljpeg_encoder_select="aandct"
4f034993 1178loco_decoder_select="golomb"
e8ed9b7a 1179mjpeg_encoder_select="aandct"
2cca233b 1180mlp_decoder_select="mlp_parser"
e8ed9b7a
DB
1181mpeg1video_encoder_select="aandct"
1182mpeg2video_encoder_select="aandct"
4414137e 1183mpeg4_decoder_select="h263_decoder mpeg4video_parser"
c37de5e1 1184mpeg4_encoder_select="h263_encoder"
711dae77 1185mpeg_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
95a61cfc 1186mpeg_vdpau_decoder_select="vdpau mpegvideo_decoder"
711dae77 1187mpeg1_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
95a61cfc 1188mpeg1_vdpau_decoder_select="vdpau mpeg1video_decoder"
ff418735 1189mpeg2_vaapi_hwaccel_deps="va_va_h"
95a61cfc 1190mpeg2_vaapi_hwaccel_select="vaapi mpeg2video_decoder"
ff418735 1191mpeg4_vaapi_hwaccel_deps="va_va_h"
95a61cfc 1192mpeg4_vaapi_hwaccel_select="vaapi mpeg4_decoder"
70e0c871
NC
1193mpeg4_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1194mpeg4_vdpau_decoder_select="vdpau mpeg4_decoder"
8f6f050a 1195mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h"
4d8eecf4 1196mpeg_xvmc_decoder_select="mpegvideo_decoder"
4414137e 1197msmpeg4v1_decoder_select="h263_decoder"
4e169d89 1198msmpeg4v1_encoder_select="h263_encoder"
4414137e 1199msmpeg4v2_decoder_select="h263_decoder"
4e169d89 1200msmpeg4v2_encoder_select="h263_encoder"
4414137e 1201msmpeg4v3_decoder_select="h263_decoder"
4e169d89 1202msmpeg4v3_encoder_select="h263_encoder"
47a158cb
MR
1203nellymoser_decoder_select="fft mdct"
1204nellymoser_encoder_select="fft mdct"
2eef7c62
AJ
1205png_decoder_select="zlib"
1206png_encoder_select="zlib"
63cae55d 1207qdm2_decoder_select="fft mdct rdft"
a8beb22f 1208rv10_decoder_select="h263_decoder"
b2bf38b4 1209rv10_encoder_select="h263_encoder"
a8beb22f 1210rv20_decoder_select="h263_decoder"
b2bf38b4 1211rv20_encoder_select="h263_encoder"
d52b39c7
AJ
1212rv30_decoder_select="golomb"
1213rv40_decoder_select="golomb"
4f034993
MR
1214shorten_decoder_select="golomb"
1215sonic_decoder_select="golomb"
1216sonic_encoder_select="golomb"
1217sonic_ls_encoder_select="golomb"
1218svq3_decoder_select="golomb"
bee2eac5 1219svq3_decoder_suggest="zlib"
4eef77c1 1220theora_decoder_select="vp3_decoder"
2eef7c62
AJ
1221tiff_decoder_suggest="zlib"
1222tiff_encoder_suggest="zlib"
aec09a00 1223truehd_decoder_select="mlp_decoder"
2eef7c62 1224tscc_decoder_select="zlib"
f95bfab0 1225vc1_decoder_select="h263_decoder"
ff418735 1226vc1_vaapi_hwaccel_deps="va_va_h"
95a61cfc 1227vc1_vaapi_hwaccel_select="vaapi vc1_decoder"
711dae77 1228vc1_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
95a61cfc 1229vc1_vdpau_decoder_select="vdpau vc1_decoder"
47a158cb
MR
1230vorbis_decoder_select="fft mdct"
1231vorbis_encoder_select="fft mdct"
e82dc4c9
DB
1232vp6a_decoder_select="vp6_decoder"
1233vp6f_decoder_select="vp6_decoder"
47a158cb
MR
1234wmav1_decoder_select="fft mdct"
1235wmav1_encoder_select="fft mdct"
1236wmav2_decoder_select="fft mdct"
1237wmav2_encoder_select="fft mdct"
f95bfab0 1238wmv1_decoder_select="h263_decoder"
665507aa 1239wmv1_encoder_select="h263_encoder"
f95bfab0 1240wmv2_decoder_select="h263_decoder"
1746e2a9 1241wmv2_encoder_select="h263_encoder"
015f8ee0
DB
1242wmv3_decoder_select="vc1_decoder"
1243wmv3_vaapi_hwaccel_select="vc1_vaapi_hwaccel"
1244wmv3_vdpau_decoder_select="vc1_vdpau_decoder"
2eef7c62
AJ
1245zlib_decoder_select="zlib"
1246zlib_encoder_select="zlib"
1247zmbv_decoder_select="zlib"
1248zmbv_encoder_select="zlib"
30fd06be 1249
28b80940
DB
1250# parsers
1251h264_parser_select="golomb"
1252
f1e94694
DB
1253# bitstream_filters
1254aac_adtstoasc_bsf_select="aac_parser"
1255
912f3148 1256# external libraries
1b71f045 1257libdirac_decoder_deps="libdirac !libschroedinger"
690bfceb 1258libdirac_encoder_deps="libdirac"
c9171a83 1259libfaac_encoder_deps="libfaac"
69ddbd1d 1260libfaad_decoder_deps="libfaad"
4ec45764 1261libfaadbin_decoder_extralibs='$ldl'
299c77d5
MR
1262libgsm_decoder_deps="libgsm"
1263libgsm_encoder_deps="libgsm"
8ffed8d8
MR
1264libgsm_ms_decoder_deps="libgsm"
1265libgsm_ms_encoder_deps="libgsm"
1cc60c47 1266libmp3lame_encoder_deps="libmp3lame"
0b175caa
DB
1267libopencore_amrnb_decoder_deps="libopencore_amrnb"
1268libopencore_amrnb_encoder_deps="libopencore_amrnb"
1269libopencore_amrwb_decoder_deps="libopencore_amrwb"
9a77d59a 1270libopenjpeg_decoder_deps="libopenjpeg"
f7cd9eed
AS
1271libschroedinger_decoder_deps="libschroedinger"
1272libschroedinger_encoder_deps="libschroedinger"
ae14f311 1273libspeex_decoder_deps="libspeex"
150d2772 1274libtheora_encoder_deps="libtheora"
b0caf888 1275libvorbis_encoder_deps="libvorbis"
1cc60c47
DB
1276libx264_encoder_deps="libx264"
1277libxvid_encoder_deps="libxvid"
30fd06be 1278
912f3148 1279# demuxers / muxers
03a76ba9 1280ac3_demuxer_deps="ac3_parser"
647c2356 1281asf_stream_muxer_select="asf_muxer"
4e622dea
SS
1282avisynth_demuxer_deps="avisynth"
1283dirac_demuxer_deps="dirac_parser"
5b423887 1284eac3_demuxer_select="ac3_parser"
647c2356 1285ipod_muxer_select="mov_muxer"
4e622dea
SS
1286libnut_demuxer_deps="libnut"
1287libnut_muxer_deps="libnut"
647c2356 1288matroska_audio_muxer_select="matroska_muxer"
4e622dea
SS
1289matroska_demuxer_suggest="zlib bzlib"
1290mov_demuxer_suggest="zlib"
1291mp3_demuxer_deps="mpegaudio_parser"
647c2356
DB
1292mp4_muxer_select="mov_muxer"
1293mpegtsraw_demuxer_select="mpegts_demuxer"
1294mxf_d10_muxer_select="mxf_muxer"
24ca518b 1295ogg_demuxer_select="golomb"
647c2356 1296psp_muxer_select="mov_muxer"
4e622dea
SS
1297rtsp_demuxer_deps="sdp_demuxer"
1298sdp_demuxer_deps="rtp_protocol mpegts_demuxer"
f1e94694 1299spdif_muxer_select="aac_parser"
647c2356
DB
1300tg2_muxer_select="mov_muxer"
1301tgp_muxer_select="mov_muxer"
6bdaa5f4 1302w64_demuxer_deps="wav_demuxer"
4e622dea
SS
1303
1304# indevs / outdevs
38e54a75
SS
1305alsa_indev_deps="alsa_asoundlib_h snd_pcm_htimestamp"
1306alsa_indev_extralibs="-lasound"
1307alsa_outdev_deps="alsa_asoundlib_h"
1308alsa_outdev_extralibs="-lasound"
1309audio_beos_indev_deps="audio_beos"
1310audio_beos_indev_extralibs="-lmedia -lbe"
1311audio_beos_outdev_deps="audio_beos"
1312audio_beos_outdev_extralibs="-lmedia -lbe"
38e54a75 1313bktr_indev_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
38e54a75
SS
1314dv1394_indev_deps="dv1394 dv_demuxer"
1315jack_indev_deps="jack_jack_h"
1316jack_indev_extralibs="-ljack"
1317libdc1394_indev_deps="libdc1394"
38e54a75
SS
1318oss_indev_deps_any="soundcard_h sys_soundcard_h"
1319oss_outdev_deps_any="soundcard_h sys_soundcard_h"
38e54a75
SS
1320v4l_indev_deps="linux_videodev_h"
1321v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h"
1322vfwcap_indev_deps="capCreateCaptureWindow"
1323vfwcap_indev_extralibs="-lvfw32"
1324x11_grab_device_indev_deps="x11grab XShmCreateImage"
781c1aa6 1325x11_grab_device_indev_extralibs="-lX11 -lXext -lXfixes"
30fd06be 1326
912f3148 1327# protocols
3fff6382 1328gopher_protocol_deps="network"
c08fb000 1329http_protocol_deps="network"
cbf29889 1330rtmp_protocol_deps="tcp_protocol"
c08fb000
AB
1331rtp_protocol_deps="udp_protocol"
1332tcp_protocol_deps="network"
1333udp_protocol_deps="network"
1334
f7679c54 1335# filters
81124ba0 1336movie_filter_deps="avfilter_lavf"
f7679c54 1337
912f3148 1338# programs
fa859b4d 1339ffplay_deps="sdl"
6ad42348 1340ffserver_deps="ffm_muxer rtp_protocol rtsp_demuxer"
4ec45764 1341ffserver_extralibs='$ldl'
a2830dca 1342
c73f65d9 1343doc_deps="texi2html"
912f3148 1344
de6d9b64 1345# default parameters
8a608357 1346
2ba042a7 1347logfile="config.err"
8a608357
MR
1348
1349# installation paths
c9d19248
MR
1350prefix_default="/usr/local"
1351bindir_default='${prefix}/bin'
14a8acf1 1352datadir_default='${prefix}/share/ffmpeg'
c9d19248
MR
1353incdir_default='${prefix}/include'
1354libdir_default='${prefix}/lib'
1355mandir_default='${prefix}/share/man'
1356shlibdir_default="$libdir_default"
8a608357
MR
1357
1358# toolchain
11e6d03a 1359ar="ar"
13c7df3d 1360cc_default="gcc"
a3d7c197 1361cc_version=\"unknown\"
9da6609f 1362host_cc_default="gcc"
11e6d03a 1363ln_s="ln -sf"
89641463 1364nm_default="nm"
11e6d03a 1365objformat="elf"
be7109c1 1366ranlib="ranlib"
0f3cb305 1367strip="strip"
11e6d03a 1368yasmexe="yasm"
8a608357
MR
1369
1370# machine
5e622c40 1371arch=$(uname -m)
38d0a8aa 1372cpu="generic"
8a608357 1373
8a608357 1374# OS
4f854758 1375target_os=$(tolower $(uname -s))
82bb3329 1376host_os=$target_os
8a608357 1377
8a608357 1378# configurable options
c8a4ae00 1379enable asm
497237c7 1380enable debug
c73f65d9 1381enable doc
aa033b1e 1382enable fastdiv
497237c7
RP
1383enable ffmpeg
1384enable ffplay
1385enable ffserver
1386enable ipv6
497237c7
RP
1387enable mpegaudio_hp
1388enable network
8400d6b8 1389enable optimizations
497237c7 1390enable protocols
530dc538 1391enable static
87a0fb62 1392enable stripping
a9ddb5b1 1393enable swscale_alpha
8a608357 1394
8a608357 1395# build settings
9987769a 1396SHFLAGS='-shared -Wl,-soname,$$(@F)'
c536cb09 1397FFSERVERLDFLAGS=-Wl,-E
f3ec2d46
SG
1398LIBPREF="lib"
1399LIBSUF=".a"
c5f14466
RP
1400FULLNAME='$(NAME)$(BUILDSUF)'
1401LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
f3ec2d46
SG
1402SLIBPREF="lib"
1403SLIBSUF=".so"
c5f14466 1404SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
b29bddab
DB
1405SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
1406SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
24743a76 1407LIB_INSTALL_EXTRA_CMD='$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
ef0bc4c9 1408
7e6c86e6
MR
1409CC_O='-o $@'
1410
f0125de9 1411host_cflags='-D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112 -O3 -g -Wall'
9da6609f
MR
1412host_libs='-lm'
1413
a7ada2ba
MR
1414target_path='.'
1415
0d7dca36
DB
1416# gcc stupidly only outputs the basename of targets with -MM, but we need the
1417# full relative path for objects in subdirectories for non-recursive Make.
c1c3933a 1418DEPEND_CMD='$(DEPCC) $(DEPFLAGS) $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o," > $(@:.o=.d)'
d8059267 1419DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -MM'
315c741d 1420
c597172e 1421# find source path
5e622c40 1422source_path="$(dirname "$0")"
497237c7 1423enable source_path_used
24524f36 1424if test -f configure; then
5e622c40 1425 source_path="$(pwd)"
497237c7 1426 disable source_path_used
c597172e 1427else
5e622c40 1428 source_path="$(cd "$source_path"; pwd)"
c597172e 1429 echo "$source_path" | grep -q '[[:blank:]]' &&
7483e694 1430 die "Out of tree builds are impossible with whitespace in source path."
337cee68
MC
1431 test -e "$source_path/config.h" &&
1432 die "Out of tree builds are impossible with config.h in source dir."
c597172e
MR
1433fi
1434
13cbe2c0 1435for v in "$@"; do
b04251c5
MR
1436 r=${v#*=}
1437 l=${v%"$r"}
1438 r=$(sh_quote "$r")
13cbe2c0
MR
1439 FFMPEG_CONFIGURATION="${FFMPEG_CONFIGURATION# } ${l}${r}"
1440done
c597172e 1441
73ef8980
MR
1442find_things(){
1443 thing=$1
1444 pattern=$2
1445 file=$source_path/$3
932ccf39 1446 sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
73ef8980
MR
1447}
1448
1449ENCODER_LIST=$(find_things encoder ENC libavcodec/allcodecs.c)
1450DECODER_LIST=$(find_things decoder DEC libavcodec/allcodecs.c)
5666fd73 1451HWACCEL_LIST=$(find_things hwaccel HWACCEL libavcodec/allcodecs.c)
73ef8980
MR
1452PARSER_LIST=$(find_things parser PARSER libavcodec/allcodecs.c)
1453BSF_LIST=$(find_things bsf BSF libavcodec/allcodecs.c)
1454MUXER_LIST=$(find_things muxer _MUX libavformat/allformats.c)
1455DEMUXER_LIST=$(find_things demuxer DEMUX libavformat/allformats.c)
38e54a75
SS
1456OUTDEV_LIST=$(find_things outdev OUTDEV libavdevice/alldevices.c)
1457INDEV_LIST=$(find_things indev _IN libavdevice/alldevices.c)
73ef8980 1458PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
81124ba0 1459FILTER_LIST=$(find_things filter FILTER libavfilter/allfilters.c)
c597172e 1460
7483e694
DB
1461enable $ARCH_EXT_LIST \
1462 $DECODER_LIST \
1463 $ENCODER_LIST \
5666fd73 1464 $HWACCEL_LIST \
7483e694
DB
1465 $PARSER_LIST \
1466 $BSF_LIST \
1467 $DEMUXER_LIST \
1468 $MUXER_LIST \
f7679c54 1469 $FILTER_LIST \
7483e694
DB
1470 $PROTOCOL_LIST \
1471 $INDEV_LIST \
1472 $OUTDEV_LIST \
c597172e
MR
1473
1474die_unknown(){
1475 echo "Unknown option \"$1\"."
1476 echo "See $0 --help for available options."
1477 exit 1
1478}
1479
794f8e97 1480show_list() {
bf0c4afa
RP
1481 suffix=_$1
1482 shift
1483 echo $* | sed s/$suffix//g | tr ' ' '\n' | sort
794f8e97
PI
1484 exit 0
1485}
1486
c597172e 1487for opt do
7483e694
DB
1488 optval="${opt#*=}"
1489 case "$opt" in
0f010b2f 1490 --extra-ldflags=*) add_ldflags $optval
7483e694 1491 ;;
0f010b2f 1492 --extra-libs=*) add_extralibs $optval
7483e694 1493 ;;
8fb1cb58 1494 --disable-devices) disable $INDEV_LIST $OUTDEV_LIST
9aa8ed9d 1495 ;;
40bcf4c7
BL
1496 --enable-debug=*) debuglevel="$optval"
1497 ;;
7483e694 1498 --enable-*=*|--disable-*=*)
8b93ddc3 1499 eval $(echo "${opt%%=*}" | sed 's/--/action=/;s/-/ thing=/')
be8f2501
MR
1500 is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt"
1501 eval list=\$$(toupper $thing)_LIST
8b93ddc3
MR
1502 name=$(echo "${optval}" | sed "s/,/_${thing}|/g")_${thing}
1503 $action $(filter "$name" $list)
7483e694
DB
1504 ;;
1505 --enable-?*|--disable-?*)
5e622c40 1506 eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
e3773a55 1507 if is_in $option $COMPONENT_LIST; then
fed5d54b 1508 test $action = disable && action=unset
e3773a55
MR
1509 eval $action \$$(toupper ${option%s})_LIST
1510 elif is_in $option $CMDLINE_SELECT; then
1511 $action $option
1512 else
1513 die_unknown $opt
1514 fi
7483e694
DB
1515 ;;
1516 --list-*)
1517 NAME="${opt#--list-}"
1518 is_in $NAME $COMPONENT_LIST || die_unknown $opt
1519 NAME=${NAME%s}
1520 eval show_list $NAME \$$(toupper $NAME)_LIST
1521 ;;
1522 --help|-h) show_help
1523 ;;
1524 *)
884a36a7 1525 optname="${opt%%=*}"
26759c44
MR
1526 optname="${optname#--}"
1527 optname=$(echo "$optname" | sed 's/-/_/g')
89f2932b
MR
1528 if is_in $optname $CMDLINE_SET; then
1529 eval $optname='$optval'
1530 elif is_in $optname $CMDLINE_APPEND; then
1531 append $optname "$optval"
1532 else
1533 die_unknown $opt
1534 fi
7483e694
DB
1535 ;;
1536 esac
c597172e
MR
1537done
1538
bcea99bb
MR
1539disabled logging && logfile=/dev/null
1540
13cbe2c0 1541echo "# $0 $FFMPEG_CONFIGURATION" > $logfile
bcea99bb
MR
1542set >> $logfile
1543
9da6609f
MR
1544test -n "$cross_prefix" && enable cross_compile
1545
adb2b908 1546ar="${cross_prefix}${ar}"
11e6d03a 1547cc_default="${cross_prefix}${cc_default}"
20e0ed95 1548nm_default="${cross_prefix}${nm_default}"
adb2b908
RP
1549ranlib="${cross_prefix}${ranlib}"
1550strip="${cross_prefix}${strip}"
1551
c5200f17
MR
1552sysinclude_default="${sysroot}/usr/include"
1553
75800dce 1554set_default cc nm sysinclude
9da6609f
MR
1555enabled cross_compile || host_cc_default=$cc
1556set_default host_cc
13c7df3d 1557
82bb3329
MR
1558exesuf() {
1559 case $1 in
1560 mingw32*|cygwin*|*-dos|freedos|opendos|os/2*) echo .exe ;;
1561 esac
1562}
1563
1564EXESUF=$(exesuf $target_os)
1565HOSTEXESUF=$(exesuf $host_os)
c0f5b7f1 1566
e4e69e0b 1567# set temporary file name
a49d42c2 1568: ${TMPDIR:=$TEMPDIR}
c51fafa1 1569: ${TMPDIR:=$TMP}
a49d42c2 1570: ${TMPDIR:=/tmp}
e4e69e0b 1571
54460a83
MR
1572if ! check_cmd type mktemp; then
1573 # simple replacement for missing mktemp
1574 # NOT SAFE FOR GENERAL USE
1575 mktemp(){
1576 echo "${2%XXX*}.${HOSTNAME}.${UID}.$$"
1577 }
1578fi
1579
1580tmpfile(){
1581 tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
1582 (set -C; exec > $tmp) 2>/dev/null ||
f7ba16a7 1583 die "Unable to create temporary file in $TMPDIR."
54460a83
MR
1584 append TMPFILES $tmp
1585 eval $1=$tmp
1586}
1587
1588trap 'rm -f -- $TMPFILES' EXIT
1589trap exit HUP INT TERM
1590
1591tmpfile TMPC .c
1592tmpfile TMPE $EXESUF
1593tmpfile TMPH .h
1594tmpfile TMPO .o
1595tmpfile TMPS .S
a482e61b 1596tmpfile TMPV .ver
54460a83
MR
1597tmpfile TMPSH .sh
1598
1599unset -f mktemp
e4e69e0b 1600
993f2d0f
MR
1601# make sure we can execute files in $TMPDIR
1602cat > $TMPSH 2>> $logfile <<EOF
1603#! /bin/sh
1604EOF
1605chmod +x $TMPSH >> $logfile 2>&1
1606if ! $TMPSH >> $logfile 2>&1; then
1607 cat <<EOF
1608Unable to create and execute files in $TMPDIR. Set the TMPDIR environment
1609variable to another directory and make sure that it is not mounted noexec.
1610EOF
1611 die "Sanity test failed."
1612fi
993f2d0f 1613
19b4c628
MR
1614filter_cflags=echo
1615filter_cppflags=echo
1616filter_asflags=echo
1617
8f0c157a 1618if $cc -v 2>&1 | grep -qi ^gcc; then
629687f6 1619 cc_type=gcc
a3d7c197 1620 cc_version=__VERSION__
aef6bd1b
MR
1621 if ! $cc -dumpversion | grep -q '^2\.'; then
1622 CC_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
1623 AS_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
1624 fi
629687f6
MR
1625elif $cc --version 2>/dev/null | grep -q Intel; then
1626 cc_type=icc
6e3fa35d 1627 cc_version="AV_STRINGIFY(__INTEL_COMPILER)"
07dec06e
MR
1628 CC_DEPFLAGS='-MMD'
1629 AS_DEPFLAGS='-MMD'
629687f6
MR
1630elif $cc -v 2>&1 | grep -q xlc; then
1631 cc_type=xlc
6e3fa35d 1632 cc_version="AV_STRINGIFY(__IBMC__)"
df442a8d
MR
1633elif $cc -V 2>/dev/null | grep -q Compaq; then
1634 cc_type=ccc
6e3fa35d 1635 cc_version="AV_STRINGIFY(__DECC_VER)"
d8059267 1636 DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -M'
03754fcd 1637 debuglevel=3
df442a8d 1638 add_ldflags -Wl,-z,now # calls to libots crash without this
6a0d5493 1639elif $cc --vsn 2>/dev/null | grep -q "ARM C/C++ Compiler"; then
03e37762
MR
1640 test -d "$sysroot" || die "No valid sysroot specified."
1641 cc_type=armcc
6e3fa35d 1642 cc_version="AV_STRINGIFY(__ARMCC_VERSION)"
03e37762
MR
1643 armcc_conf="$PWD/armcc.conf"
1644 $cc --arm_linux_configure \
1645 --arm_linux_config_file="$armcc_conf" \
1646 --configure_sysroot="$sysroot" \
1647 --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
1648 die "Error creating armcc configuration file."
1649 cc="$cc --arm_linux_config_file=$armcc_conf --translate_gcc"
75800dce 1650 as_default="${cross_prefix}gcc"
07dec06e
MR
1651 CC_DEPFLAGS='-MMD'
1652 AS_DEPFLAGS='-MMD'
6fec122a
MR
1653elif $cc -version 2>/dev/null | grep -q TMS470; then
1654 cc_type=tms470
6e3fa35d 1655 cc_version="AV_STRINGIFY(__TI_COMPILER_VERSION__)"
6fec122a
MR
1656 cc="$cc --gcc --abi=eabi -eo=.o -mc -me"
1657 CC_O='-fr=$(@D)'
1658 as_default="${cross_prefix}gcc"
1659 ld_default="${cross_prefix}gcc"
6fec122a
MR
1660 TMPO=$(basename $TMPC .c).o
1661 append TMPFILES $TMPO
1662 add_cflags -D__gnuc_va_list=va_list -D__USER_LABEL_PREFIX__=
07dec06e
MR
1663 CC_DEPFLAGS='-ppa -ppd=$(@:.o=.d)'
1664 AS_DEPFLAGS='-MMD'
6fec122a
MR
1665 filter_cflags=tms470_flags
1666 tms470_flags(){
1667 for flag; do
1668 case $flag in
1669 -march=*|-mcpu=*)
1670 case "${flag#*=}" in
1671 armv7-a|cortex-a*) echo -mv=7a8 ;;
1672 armv7-r|cortex-r*) echo -mv=7r4 ;;
1673 armv7-m|cortex-m*) echo -mv=7m3 ;;
1674 armv6*|arm11*) echo -mv=6 ;;
1675 armv5*e|arm[79]*e*|arm9[24]6*|arm96*|arm102[26])
1676 echo -mv=5e ;;
1677 armv4*|arm7*|arm9[24]*) echo -mv=4 ;;
1678 esac
1679 ;;
1680 -mfpu=neon) echo --float_support=vfpv3 --neon ;;
1681 -mfpu=vfp) echo --float_support=vfpv2 ;;
a2709020 1682 -msoft-float) echo --float_support=vfplib ;;
6fec122a
MR
1683 -Os) echo -O3 -mf=2 ;;
1684 -O[0-3]) echo $flag -mf=5 ;;
1685 -g) echo -g -mn ;;
1686 esac
1687 done
1688 }
06da6943
DC
1689elif $cc -v 2>&1 | grep -q clang; then
1690 cc_type=clang
1691 cc_version=__VERSION__
1692 CC_DEPFLAGS='-MMD'
1693 AS_DEPFLAGS='-MMD'
2a472e9c
MK
1694elif $cc -V 2>&1 | grep -q Sun; then
1695 cc_type=suncc
1696 cc_version="AV_STRINGIFY(__SUNPRO_C)"
faa374b7 1697 DEPEND_CMD='$(DEPCC) $(DEPFLAGS) $< | sed -e "1s,^.*: ,$@: ," -e "\$$!s,\$$, \\\," -e "1!s,^.*: , ," > $(@:.o=.d)'
2a472e9c 1698 DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -xM1'
03279bbe
MK
1699 filter_cflags=suncc_flags
1700 suncc_flags(){
1701 for flag; do
1702 case $flag in
1703 -march=*|-mcpu=*)
1704 case "${flag#*=}" in
1705 native) echo -xtarget=native ;;
1706 v9) echo -xarch=sparc ;;
1707 ultrasparc) echo -xarch=sparcvis ;;
1708 ultrasparc3|niagara*) echo -xarch=sparcvis2 ;;
1709 i586|pentium) echo -xchip=pentium ;;
1710 i686|pentiumpro|pentium2) echo -xtarget=pentium_pro ;;
1711 pentium3*|c3-2) echo -xtarget=pentium3 ;;
1712 pentium-m) echo -xarch=sse2 -xchip=pentium3 ;;
1713 pentium4*) echo -xtarget=pentium4 ;;
1714 prescott|nocona) echo -xarch=sse3 -xchip=pentium4 ;;
1715 *-sse3) echo -xarch=sse3 ;;
1716 core2) echo -xarch=ssse3 -xchip=core2 ;;
1717 amdfam10|barcelona) echo -xarch=sse4_1 ;;
1718 athlon-4|athlon-[mx]p) echo -xarch=ssea ;;
1719 k8|opteron|athlon64|athlon-fx)
1720 echo -xarch=sse2a ;;
1721 athlon*) echo -xarch=pentium_proa ;;
1722 esac
1723 ;;
1724 -std=c99) echo -xc99 ;;
1725 -fomit-frame-pointer) echo -xregs=frameptr ;;
1726 -fPIC) echo -KPIC -xcode=pic32 ;;
1727 -Os) echo -O5 -xspace ;;
1728 -W*,*) echo $flag ;;
1729 -f*-*|-W*) ;;
1730 *) echo $flag ;;
1731 esac
1732 done
1733 }
629687f6
MR
1734fi
1735
1736test -n "$cc_type" && enable $cc_type || echolog "Unknown C compiler $cc"
1737
75bafbac 1738: ${as_default:=$cc}
50567afa 1739: ${dep_cc_default:=$cc}
684b28e0 1740: ${ld_default:=$cc}
50567afa 1741set_default as dep_cc ld
75800dce 1742
07dec06e
MR
1743test -n "$CC_DEPFLAGS" || CCDEP=$DEPEND_CMD
1744test -n "$AS_DEPFLAGS" || ASDEP=$DEPEND_CMD
1745
7f32f40c 1746add_cflags $extra_cflags
2f2e6c7c 1747add_asflags $extra_cflags
7f32f40c 1748
154d432c
MR
1749if test -n "$sysroot"; then
1750 case "$cc_type" in
1751 gcc)
467256f2 1752 add_cppflags --sysroot="$sysroot"
154d432c
MR
1753 add_ldflags --sysroot="$sysroot"
1754 ;;
6fec122a
MR
1755 tms470)
1756 add_cppflags -I"$sysinclude"
1757 add_ldflags --sysroot="$sysroot"
1758 ;;
06da6943
DC
1759 clang)
1760 add_cppflags -isysroot="$sysroot"
1761 add_ldflags -isysroot="$sysroot"
1762 ;;
154d432c
MR
1763 esac
1764fi
1765
d22c13a8
MR
1766if test "$cpu" = host; then
1767 enabled cross_compile && die "--cpu=host makes no sense when cross-compiling."
1768
1769 case "$cc_type" in
1770 gcc)
1771 check_native(){
1772 $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
1773 awk "/$1=/{ match(\$0, /$1=(\\w+)/, a);print a[1];exit }" $TMPE
1774 }
1775 cpu=$(check_native -march || check_native -mcpu)
1776 ;;
1777 esac
1778
1779 test "${cpu:-host}" = host && die "--cpu=host not supported with compiler $cc"
1780fi
1781
e939cedd
MR
1782# Deal with common $arch aliases
1783case "$arch" in
1784 arm*)
1785 arch="arm"
1786 ;;
1787 mips|mipsel|IP*)
1788 arch="mips"
1789 ;;
1790 mips64)
1791 arch="mips"
1792 subarch="mips64"
1793 ;;
1794 parisc|hppa)
1795 arch="parisc"
1796 ;;
1797 parisc64|hppa64)
1798 arch="parisc"
1799 subarch="parisc64"
1800 ;;
1801 "Power Macintosh"|ppc|powerpc)
1802 arch="ppc"
1803 ;;
1804 ppc64)
1805 arch="ppc"
1806 subarch="ppc64"
1807 ;;
1808 s390|s390x)
1809 arch="s390"
1810 ;;
1811 sh4|sh)
1812 arch="sh4"
1813 ;;
1814 sun4u|sparc64)
1815 arch="sparc"
1816 subarch="sparc64"
1817 ;;
1818 i[3-6]86|i86pc|BePC|x86_64|amd64)
1819 arch="x86"
1820 ;;
1821esac
1822
1823is_in $arch $ARCH_LIST || echo "WARNING: unknown arch $arch"
343aef9b 1824enable $arch
e939cedd 1825
df5cdc24 1826# Add processor-specific flags
5d54c126
MR
1827if test "$cpu" = generic; then
1828 : do nothing
1829elif enabled ppc; then
343aef9b 1830
9dbd5c3d
MR
1831 case $cpu in
1832 601|ppc601|PowerPC601)
1833 cpuflags="-mcpu=601"
1834 ;;
1835 603*|ppc603*|PowerPC603*)
1836 cpuflags="-mcpu=603"
1837 ;;
1838 604*|ppc604*|PowerPC604*)
1839 cpuflags="-mcpu=604"
1840 ;;
1841 G3|g3|75*|ppc75*|PowerPC75*)
1842 cpuflags="-mcpu=750 -mpowerpc-gfxopt"
1843 ;;
1844 G4|g4|745*|ppc745*|PowerPC745*)
1845 cpuflags="-mcpu=7450 -mpowerpc-gfxopt"
1846 ;;
1847 74*|ppc74*|PowerPC74*)
1848 cpuflags="-mcpu=7400 -mpowerpc-gfxopt"
1849 ;;
1850 G5|g5|970|ppc970|PowerPC970|power4*|Power4*)
1851 cpuflags="-mcpu=970 -mpowerpc-gfxopt -mpowerpc64"
1852 ;;
1853 Cell|CELL|cell)
1854 cpuflags="-mcpu=cell"
1855 enable ldbrx
1856 ;;
1857 esac
343aef9b
MR
1858
1859elif enabled x86; then
1860
9dbd5c3d
MR
1861 case $cpu in
1862 i[345]86|pentium)
1863 cpuflags="-march=$cpu"
1864 disable mmx
1865 ;;
1866 # targets that do NOT support conditional mov (cmov)
1867 pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
1868 cpuflags="-march=$cpu"
1869 disable cmov
1870 ;;
1871 # targets that do support conditional mov (cmov)
1872 i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2|amdfam10)
1873 cpuflags="-march=$cpu"
1874 enable cmov
1875 enable fast_cmov
1876 ;;
1877 # targets that do support conditional mov but on which it's slow
1878 pentium4|pentium4m|prescott|nocona)
1879 cpuflags="-march=$cpu"
1880 enable cmov
1881 disable fast_cmov
1882 ;;
1883 esac
343aef9b
MR
1884
1885elif enabled sparc; then
1886
9dbd5c3d
MR
1887 case $cpu in
1888 sparc64)
1889 cpuflags="-mcpu=v9"
1890 ;;
1891 esac
343aef9b
MR
1892
1893elif enabled arm; then
1894
34ba23c9
MR
1895 case $cpu in
1896 armv*)
1897 cpuflags="-march=$cpu"
1898 ;;
1899 *)
1900 cpuflags="-mcpu=$cpu"
1901 ;;
1902 esac
343aef9b
MR
1903
1904elif enabled alpha; then
1905
34ba23c9 1906 enabled ccc && cpuflags="-arch $cpu" || cpuflags="-mcpu=$cpu"
343aef9b
MR
1907
1908elif enabled bfin; then
1909
34ba23c9 1910 cpuflags="-mcpu=$cpu"
343aef9b
MR
1911
1912elif enabled mips; then
1913
34ba23c9 1914 cpuflags="-march=$cpu"
343aef9b
MR
1915
1916elif enabled avr32; then
1917
9dbd5c3d
MR
1918 case $cpu in
1919 ap7[02]0[0-2])
1920 subarch="avr32_ap"
1921 cpuflags="-mpart=$cpu"
1922 ;;
1923 ap)
1924 subarch="avr32_ap"
1925 cpuflags="-march=$cpu"
1926 ;;
1927 uc3[ab]*)
1928 subarch="avr32_uc"
1929 cpuflags="-mcpu=$cpu"
1930 ;;
1931 uc)
1932 subarch="avr32_uc"
1933 cpuflags="-march=$cpu"
1934 ;;
1935 esac
df5cdc24 1936
343aef9b
MR
1937fi
1938
df5cdc24
MR
1939add_cflags $cpuflags
1940add_asflags $cpuflags
1941
993f2d0f
MR
1942# compiler sanity check
1943check_exec <<EOF
1944int main(void){ return 0; }
1945EOF
1946if test "$?" != 0; then
1947 echo "$cc is unable to create an executable file."
1948 if test -z "$cross_prefix" && ! enabled cross_compile ; then
1949 echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
1950 echo "Only do this if you know what cross compiling means."
1951 fi
1952 die "C compiler test failed."
1953fi
1954
38a9c529 1955add_cppflags -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112
e9b9a2f8 1956check_cflags -std=c99
50a334e4 1957check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
9d821fc2
DB
1958#include <stdlib.h>
1959EOF
50a334e4 1960check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
9d821fc2
DB
1961#include <stdlib.h>
1962EOF
e9b9a2f8 1963
f0125de9
MR
1964check_host_cflags -std=c99
1965
b24dbcbd 1966case "$arch" in
e939cedd 1967 alpha|ia64|mips|parisc|sparc)
8a3c8627 1968 spic=$shared
b24dbcbd 1969 ;;
e939cedd 1970 x86)
cfdb6148 1971 subarch="x86_32"
e939cedd 1972 check_cc <<EOF && subarch="x86_64"
58b3536d 1973 int test[(int)sizeof(char*) - 7];
cfdb6148 1974EOF
de27f4d9 1975 if test "$subarch" = "x86_64"; then
e939cedd 1976 spic=$shared
de27f4d9 1977 fi
b24dbcbd 1978 ;;
b24dbcbd
RP
1979esac
1980
343aef9b 1981enable $subarch
8a3c8627 1982enabled spic && enable pic
5755bc88 1983check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable pic
b24dbcbd 1984
7483e694 1985# OS specific
4f854758 1986case $target_os in
7483e694 1987 beos|haiku|zeta)
c9d19248 1988 prefix_default="$HOME/config"
7483e694 1989 # 3 gcc releases known for BeOS, each with ugly bugs
5e622c40 1990 gcc_version="$($cc -v 2>&1 | grep version | cut -d ' ' -f3-)"
7483e694
DB
1991 case "$gcc_version" in
1992 2.9-beos-991026*|2.9-beos-000224*) echo "R5/GG gcc"
1993 disable mmx
1994 ;;
1995 *20010315*) echo "BeBits gcc"
0f010b2f 1996 add_cflags -fno-expensive-optimizations
7483e694
DB
1997 ;;
1998 esac
7483e694
DB
1999 SHFLAGS=-nostart
2000 # enable BeOS things
2001 enable audio_beos
2002 # no need for libm, but the inet stuff
2003 # Check for BONE
2004 # XXX: actually should check for NOT net_server
78fe7631 2005 if echo $BEINCLUDES | grep -q 'headers/be/bone'; then
7483e694
DB
2006 network_extralibs="-lbind -lsocket"
2007 else
2008 enable beos_netserver
2009 network_extralibs="-lnet"
2010 fi ;;
2011 sunos)
2012 FFSERVERLDFLAGS=""
9987769a 2013 SHFLAGS='-shared -Wl,-h,$$(@F)'
0600d30a 2014 enabled x86 && SHFLAGS="-mimpure-text $SHFLAGS"
7483e694 2015 network_extralibs="-lsocket -lnsl"
50a334e4 2016 add_cppflags -D__EXTENSIONS__
7483e694
DB
2017 ;;
2018 netbsd)
07a8eef6
MR
2019 oss_indev_extralibs="-lossaudio"
2020 oss_outdev_extralibs="-lossaudio"
7483e694
DB
2021 ;;
2022 openbsd)
89e053f8 2023 enable malloc_aligned
7c4a001a
MR
2024 # On OpenBSD 4.5. the compiler does not use PIC unless
2025 # explicitly using -fPIC. FFmpeg builds fine without PIC,
2026 # however the generated executable will not do anything
2027 # (simply quits with exit-code 1, no crash, no output).
a7b9c8ae 2028 # Thus explicitly enable PIC here.
cd78208b 2029 enable pic
7483e694 2030 SHFLAGS='-shared'
07a8eef6
MR
2031 oss_indev_extralibs="-lossaudio"
2032 oss_outdev_extralibs="-lossaudio"
7483e694 2033 ;;
90b4f091 2034 freebsd|dragonfly)
89e053f8 2035 enable malloc_aligned
7483e694
DB
2036 ;;
2037 bsd/os)
2038 osextralibs="-lpoll -lgnugetopt"
2039 strip="strip -d"
2040 ;;
2041 darwin)
89e053f8 2042 enable malloc_aligned
0138c54e 2043 SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR) -Wl,-read_only_relocs,suppress'
7483e694
DB
2044 strip="strip -x"
2045 FFLDFLAGS="-Wl,-dynamic,-search_paths_first"
2046 SLIBSUF=".dylib"
2047 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
2048 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
2049 FFSERVERLDFLAGS=-Wl,-bind_at_load
304d586d 2050 objformat="macho"
1b0f6fb8 2051 enabled x86_64 && objformat="macho64"
8dfa86f7 2052 enabled_any pic shared ||
2704bd1a 2053 { check_cflags -mdynamic-no-pic && add_asflags -mdynamic-no-pic; }
7483e694
DB
2054 ;;
2055 mingw32*)
ad7da0b5
RP
2056 # Only WinXP or greater are supported
2057 add_cflags -D_WIN32_WINNT=0x0501
9d3f4f50 2058 if test $target_os = "mingw32ce"; then
1aa71e25
MS
2059 disable network
2060 else
2061 target_os=mingw32
2062 fi
dcc01c06 2063 LIBTARGET=i386
1fc9fb8a 2064 if enabled x86_64; then
89e053f8 2065 enable malloc_aligned
dcc01c06 2066 LIBTARGET=x64
336cc1b0
MS
2067 elif enabled arm; then
2068 LIBTARGET=arm
dcc01c06 2069 fi
fbd971a4 2070 shlibdir_default="$bindir_default"
7483e694
DB
2071 disable ffserver
2072 SLIBPREF=""
2073 SLIBSUF=".dll"
7483e694
DB
2074 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
2075 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
06abe7f5 2076 SLIB_EXTRA_CMD='-lib.exe /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)'
4c25d159 2077 SLIB_INSTALL_EXTRA_CMD='-install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"; \
b9349ff4
MS
2078 install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)"; \
2079 install -d "$(LIBDIR)"; \
2080 install -m 644 $(SUBDIR)lib$(SLIBNAME:$(SLIBSUF)=.dll.a) "$(LIBDIR)/lib$(SLIBNAME:$(SLIBSUF)=.dll.a)"'
7483e694 2081 SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"'
4b51fb1c 2082 SHFLAGS='-shared -Wl,--output-def,$$(@:$(SLIBSUF)=.def) -Wl,--out-implib,$(SUBDIR)lib$(SLIBNAME:$(SLIBSUF)=.dll.a) -Wl,--enable-runtime-pseudo-reloc -Wl,--enable-auto-image-base'
304d586d 2083 objformat="win32"
bc574408 2084 enable dos_paths
1894e741 2085 check_cflags -fno-common
b1549d61 2086 if ! enabled x86_64; then
f7ad5aa2
RP
2087 check_cpp_condition _mingw.h "(__MINGW32_MAJOR_VERSION > 3) || (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
2088 die "ERROR: MinGW runtime version must be >= 3.15."
8beb4178 2089 enabled_any avisynth vfwcap_indev &&
f7ad5aa2 2090 { check_cpp_condition w32api.h "(__W32API_MAJOR_VERSION > 3) || (__W32API_MAJOR_VERSION == 3 && __W32API_MINOR_VERSION >= 13)" ||
8beb4178 2091 die "ERROR: avisynth and vfwcap_indev require w32api version 3.13 or later."; }
f7ad5aa2 2092 fi
7483e694
DB
2093 ;;
2094 cygwin*)
4f854758 2095 target_os=cygwin
fbd971a4 2096 shlibdir_default="$bindir_default"
7483e694
DB
2097 SLIBPREF="cyg"
2098 SLIBSUF=".dll"
2099 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
2100 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
2101 SHFLAGS='-shared -Wl,--enable-auto-image-base'
304d586d 2102 objformat="win32"
bc574408 2103 enable dos_paths
1894e741 2104 check_cflags -fno-common
7483e694 2105 ;;
4f365f37 2106 *-dos|freedos|opendos)
fdf11906 2107 disable ffplay ffserver
4f365f37
MK
2108 disable $INDEV_LIST $OUTDEV_LIST
2109 network_extralibs="-lsocket"
ff1c015d 2110 objformat="coff"
bc574408 2111 enable dos_paths
4f365f37 2112 ;;
7483e694 2113 linux)
7483e694
DB
2114 enable dv1394
2115 ;;
2116 irix*)
4f854758 2117 target_os=irix
7483e694
DB
2118 ranlib="echo ignoring ranlib"
2119 ;;
d22e8442 2120 os/2*)
d22e8442
DY
2121 strip="lxlite"
2122 ln_s="cp -f"
d22e8442 2123 FFLDFLAGS="-Zomf -Zbin-files -Zargs-wild -Zmap"
71c61f62 2124 SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
d22e8442 2125 FFSERVERLDFLAGS=""
287d3b13 2126 LIBSUF="_s.a"
d22e8442
DY
2127 SLIBPREF=""
2128 SLIBSUF=".dll"
2129 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
2130 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
71c61f62
MR
2131 SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
2132 echo PROTMODE >> $(SUBDIR)$(NAME).def; \
2133 echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
2134 echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
2135 echo EXPORTS >> $(SUBDIR)$(NAME).def; \
2136 emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
2137 SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
2138 emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
2139 SLIB_INSTALL_EXTRA_CMD='install -m 644 $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib "$(LIBDIR)"'
d22e8442 2140 SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.a "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.lib'
bc574408 2141 enable dos_paths
d22e8442 2142 ;;
83993c1c
AM
2143 gnu/kfreebsd)
2144 ;;
34e82167 2145 gnu)
34e82167 2146 ;;
d22e8442 2147
7483e694 2148 *)
4f924f9a 2149 die "Unknown OS '$target_os'."
7483e694
DB
2150 ;;
2151esac
2152
c9d19248
MR
2153set_default $PATHS_LIST
2154
c597172e 2155add_extralibs $osextralibs
de6d9b64 2156
28d8e661
DB
2157# Combine FFLDFLAGS and the LDFLAGS environment variable.
2158LDFLAGS="$FFLDFLAGS $LDFLAGS"
e89b8b0a 2159
320d060a 2160# we need to build at least one lib type
93b3c083 2161if ! enabled_any static shared; then
320d060a
DB
2162 cat <<EOF
2163At least one library type must be built.
2164Specify --enable-static to build the static libraries or --enable-shared to
2165build the shared libraries as well. To only build the shared libraries specify
2166--disable-static in addition to --enable-shared.
2167EOF
2168 exit 1;
2169fi
2170
abc4e572 2171disabled static && LIBNAME=""
2a320695 2172
a2234ceb
RP
2173if enabled_any libfaad libfaadbin ; then
2174 if check_header faad.h; then
295b8c70 2175 check_cc <<EOF
a2234ceb
RP
2176#include <faad.h>
2177#ifndef FAAD2_VERSION
2178ok faad1
2179#endif
db817cf3 2180int main(void) { return 0; }
a2234ceb
RP
2181EOF
2182 test $? = 0 && enable libfaad2
2183 else
ff3dac65 2184 die "FAAD test failed."
a2234ceb
RP
2185 fi
2186fi
2187
2188
2184c6f7 2189die_license_disabled() {
4c27207c 2190 enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
2184c6f7
DB
2191}
2192
2193die_license_disabled gpl libfaad2
2194die_license_disabled gpl libx264
2195die_license_disabled gpl libxvid
2196die_license_disabled gpl postproc
2197die_license_disabled gpl x11grab
2198
2f7ae63b 2199die_license_disabled nonfree libfaac
b2e3c528 2200
0b175caa
DB
2201die_license_disabled version3 libopencore_amrnb
2202die_license_disabled version3 libopencore_amrwb
2203
9cad0e4e 2204enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
3fe142e2 2205
9eeed841 2206check_deps $ARCH_EXT_LIST
0f3cb305 2207
40617a6d 2208disabled optimizations || check_cflags -fomit-frame-pointer
cf9d24ad 2209
e276d9e8
MR
2210enable_pic() {
2211 enable pic
bce7b696
MR
2212 add_cppflags -DPIC
2213 add_cflags -fPIC
2214 add_asflags -fPIC
e276d9e8
MR
2215}
2216
2217enabled pic && enable_pic
bce7b696 2218
b4d96ba2
MR
2219check_cc <<EOF || die "Symbol mangling check failed."
2220int ff_extern;
2221EOF
2f05d9c1 2222sym=$($nm -P -g $TMPO | grep ff_extern)
b4d96ba2
MR
2223extern_prefix=${sym%%ff_extern*}
2224
f65883c8
MR
2225check_cc <<EOF && enable inline_asm
2226void foo(void) { __asm__ volatile ("" ::); }
2227EOF
61d251db 2228
df5e3978
MR
2229_restrict=
2230for restrict_keyword in restrict __restrict__ __restrict; do
2231 check_cc <<EOF && _restrict=$restrict_keyword && break
2232void foo(char * $restrict_keyword p);
2233EOF
2234done
2235
2236check_cc <<EOF && enable attribute_packed
2237struct { int x; } __attribute__((packed)) x;
2238EOF
2239
2240check_cc <<EOF || die "endian test failed"
2241unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
2242EOF
2243od -A n -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
2244
e939cedd
MR
2245if enabled alpha; then
2246
2247 check_cflags -mieee
2248
2249elif enabled arm; then
e45391bb 2250
50fa82e6
MR
2251 check_cflags -marm
2252
fa0912fe
MR
2253 check_ld <<EOF && enable vfp_args
2254__asm__ (".eabi_attribute 28, 1");
2255int main(void) { return 0; }
2256EOF
2257
2258 # We have to check if pld is a nop and disable it.
2259 check_asm pld '"pld [r0]"'
2260
2261 enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
2262 enabled armv6 && check_asm armv6 '"sadd16 r0, r0, r0"'
2263 enabled armv6t2 && check_asm armv6t2 '"movt r0, #0"'
2264 enabled armvfp && check_asm armvfp '"fadds s0, s0, s0"'
2265 enabled iwmmxt && check_asm iwmmxt '"wunpckelub wr6, wr4"'
2266 enabled neon && check_asm neon '"vadd.i16 q0, q0, q0"'
e45391bb 2267
e276d9e8
MR
2268 enabled_all armv6t2 shared !pic && enable_pic
2269
e939cedd
MR
2270elif enabled ia64; then
2271
2272 # HACK: currently fails to build if .bss is > 4MB and shared libs are built
2273 enabled shared && enable_weak hardcoded_tables
2274
fa0912fe 2275elif enabled mips; then
e45391bb 2276
fa0912fe
MR
2277 check_asm loongson '"dmult.g $1, $2, $3"'
2278 enabled mmi && check_asm mmi '"lq $2, 0($2)"'
e45391bb 2279
fa0912fe 2280elif enabled ppc; then
e45391bb 2281
fa0912fe
MR
2282 check_asm dcbzl '"dcbzl 0, 1"'
2283 check_asm ppc4xx '"maclhw r10, r11, r12"'
64de20d1 2284 check_asm xform_asm '"lwzx %1, %y0" :: "Z"(*(int*)0), "r"(0)'
fa0912fe
MR
2285
2286 # AltiVec flags: The FSF version of GCC differs from the Apple version
2287 if enabled altivec; then
2288 check_cflags -maltivec -mabi=altivec &&
2289 { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
2290 check_cflags -faltivec
2291
2292 # check if our compiler supports Motorola AltiVec C API
2293 check_cc <<EOF || disable altivec
2294$inc_altivec_h
2295int main(void) {
2296 vector signed int v1, v2, v3;
2297 v1 = vec_add(v2,v3);
2298 return 0;
2299}
2300EOF
2301
2302 # check if our compiler supports braces for vector declarations
2303 check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
2304$inc_altivec_h
2305int main (void) { (vector int) {1}; return 0; }
2306EOF
2307 fi
e45391bb 2308
fa0912fe 2309elif enabled sparc; then
e45391bb 2310
fa0912fe
MR
2311 enabled vis && check_asm vis '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc &&
2312 add_cflags -mcpu=ultrasparc -mtune=ultrasparc
e45391bb 2313
fa0912fe 2314elif enabled x86; then
e45391bb 2315
44965991
PI
2316 # check whether EBP is available on x86
2317 # As 'i' is stored on the stack, this program will crash
2318 # if the base pointer is used to access it because the
2319 # base pointer is cleared in the inline assembly code.
7dfef245 2320 check_exec_crash <<EOF && enable ebp_available
44965991 2321 volatile int i=0;
be449fca 2322 __asm__ volatile (
44965991
PI
2323 "xorl %%ebp, %%ebp"
2324 ::: "%ebp");
2325 return i;
44965991
PI
2326EOF
2327
f494213c 2328 # check whether EBX is available on x86
7cee5421
MR
2329 check_asm ebx_available '""::"b"(0)' &&
2330 check_asm ebx_available '"":::"%ebx"'
8e380710 2331
d3a4b4e0
DB
2332 # check whether more than 10 operands are supported
2333 check_cc <<EOF && enable ten_operands
2334int main(void) {
2335 int x=0;
2336 __asm__ volatile(
2337 ""
2338 :"+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x)
2339 );
2340 return 0;
2341}
2342EOF
2343
d7f0920b 2344 # check whether binutils is new enough to compile SSSE3/MMX2
940f335a 2345 enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
5fd89ca0 2346 enabled mmx2 && check_asm mmx2 '"pmaxub %mm0, %mm1"'
6bd859d6
MR
2347
2348 check_asm bswap '"bswap %%eax" ::: "%eax"'
304d586d 2349
d52481b9 2350 YASMFLAGS="-f $objformat -DARCH_$(toupper $subarch)"
304d586d 2351 enabled x86_64 && append YASMFLAGS "-m amd64"
a34ebe60 2352 enabled pic && append YASMFLAGS "-DPIC"
5f36d94d 2353 test -n "$extern_prefix" && append YASMFLAGS "-DPREFIX"
304d586d
LM
2354 case "$objformat" in
2355 elf) enabled debug && append YASMFLAGS "-g dwarf2" ;;
304d586d 2356 esac
7595a5e4 2357 disabled yasm || { check_yasm "pabsw xmm0, xmm0" && enable yasm; }
e45391bb 2358
669b5583
MR
2359 case "$cpu" in
2360 athlon*|opteron*|k8*|pentium|pentium-mmx|prescott|nocona|atom|geode)
2361 disable fast_clz
2362 ;;
2363 esac
2364
44965991
PI
2365fi
2366
a98bb16d
RP
2367if check_func dlopen; then
2368 ldl=
2369elif check_func dlopen -ldl; then
2370 ldl=-ldl
8bf5d58f
MN
2371fi
2372
75ecf149
DB
2373# Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
2374check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
2375
7483e694 2376check_func fork
84882df6 2377check_func getaddrinfo $network_extralibs
7483e694
DB
2378check_func gethrtime
2379check_func getrusage
094c09bb 2380check_func inet_aton $network_extralibs
abfc8d05 2381check_func isatty
7483e694
DB
2382check_func memalign
2383check_func mkstemp
1f91cdce 2384check_func posix_memalign
b507ebd1 2385check_func_headers io.h setmode
e4673692 2386check_func_headers lzo/lzo1x.h lzo1x_999_compress
2446d3d6 2387check_func_headers windows.h GetProcessTimes
7c5bfe7a 2388check_func_headers windows.h VirtualAlloc
6ffa87d3 2389
e16e49ac 2390check_header conio.h
a98bb16d
RP
2391check_header dlfcn.h
2392check_header malloc.h
bf6ce82d 2393check_header poll.h
b58412f1 2394check_header sys/mman.h
b091aa44 2395check_header sys/resource.h
bf6ce82d 2396check_header sys/select.h
a98bb16d 2397check_header termios.h
272081b0
CEH
2398check_header vdpau/vdpau.h
2399check_header vdpau/vdpau_x11.h
68178ca9 2400check_header X11/extensions/XvMClib.h
a98bb16d 2401
89e053f8
MR
2402if ! enabled_any memalign memalign_hack posix_memalign malloc_aligned &&
2403 enabled_any $need_memalign ; then
1f91cdce 2404 die "Error, no aligned memory allocator but SSE enabled, disable it or use --enable-memalign-hack."
a98bb16d 2405fi
e16e49ac 2406
a4fa192c 2407disabled zlib || check_lib zlib.h zlibVersion -lz || disable zlib
632948bd 2408disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
57bd82d4
MR
2409
2410# check for some common methods of building with pthread support
2411# do this before the optional library checks as some of them require pthreads
2412if enabled pthreads; then
9e7fd101
MR
2413 if check_func pthread_create; then
2414 :
2415 elif check_func pthread_create -pthread; then
2416 add_cflags -pthread
afc9aee2 2417 add_extralibs -pthread
9e7fd101
MR
2418 elif check_func pthread_create -pthreads; then
2419 add_cflags -pthreads
afc9aee2 2420 add_extralibs -pthreads
8d94f606
GT
2421 elif check_func pthread_create -lpthreadGC2; then
2422 add_extralibs -lpthreadGC2
9e7fd101
MR
2423 elif ! check_lib pthread.h pthread_create -lpthread; then
2424 die "ERROR: can't find pthreads library"
2425 fi
57bd82d4
MR
2426fi
2427
8eee7025 2428for thread in $THREADS_LIST; do
e5f94c2b 2429 if enabled $thread; then
3ae3b721
RP
2430 test -n "$thread_type" &&
2431 die "ERROR: Only one thread type must be selected." ||
e5f94c2b 2432 thread_type="$thread"
e5f94c2b
RP
2433 fi
2434done
2435
fdf88598 2436check_lib math.h sin -lm
ff418735 2437check_lib va/va.h vaInitialize -lva
fdf88598 2438
6b7c7703
VS
2439check_func exp2
2440check_func exp2f
ad420e25
MR
2441check_func llrint
2442check_func log2
6b7c7703 2443check_func log2f
ad420e25
MR
2444check_func lrint
2445check_func lrintf
2446check_func round
2447check_func roundf
2448check_func truncf
f32adb22 2449
57bd82d4 2450# these are off by default, so fail if requested and not available
79fda097 2451enabled avisynth && require2 vfw32 "windows.h vfw.h" AVIFileInit -lvfw32
e3cc7d6f 2452enabled libdirac && add_cflags $(pkg-config --cflags dirac) &&
2513b2b4
DB
2453 require libdirac libdirac_decoder/dirac_parser.h dirac_decoder_init $(pkg-config --libs dirac) &&
2454 require libdirac libdirac_encoder/dirac_encoder.h dirac_encoder_init $(pkg-config --libs dirac)
79fda097
DB
2455enabled libfaac && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
2456enabled libfaad && require2 libfaad faad.h faacDecOpen -lfaad
7483e694 2457enabled libgsm && require libgsm gsm.h gsm_create -lgsm
2bfecf73 2458enabled libmp3lame && require libmp3lame lame/lame.h lame_init -lmp3lame -lm
7483e694 2459enabled libnut && require libnut libnut.h nut_demuxer_init -lnut
0b175caa
DB
2460enabled libopencore_amrnb && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb -lm
2461enabled libopencore_amrwb && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb -lm
3d6fac8c 2462enabled libopenjpeg && require libopenjpeg openjpeg.h opj_version -lopenjpeg
36718e51
DB
2463enabled libschroedinger && add_cflags $(pkg-config --cflags schroedinger-1.0) &&
2464 require libschroedinger schroedinger/schro.h schro_init $(pkg-config --libs schroedinger-1.0)
ae14f311 2465enabled libspeex && require libspeex speex/speex.h speex_decoder_init -lspeex
c261a5d9 2466enabled libtheora && require libtheora theora/theoraenc.h th_info_init -ltheoraenc -ltheoradec -logg
7483e694 2467enabled libvorbis && require libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
e69bb386 2468enabled libx264 && require libx264 x264.h x264_encoder_encode -lx264 -lm &&
76d81909
JGG
2469 { check_cpp_condition x264.h "X264_BUILD >= 83" ||
2470 die "ERROR: libx264 version must be >= 0.83."; }
2bfecf73 2471enabled libxvid && require libxvid xvid.h xvid_global -lxvidcore
7483e694 2472enabled mlib && require mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
8ac17293 2473
0b4a1821
AS
2474# libdc1394 check
2475if enabled libdc1394; then
2476 { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
2477 enable libdc1394_2; } ||
2478 { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
2479 enable libdc1394_1; } ||
2480 die "ERROR: No version of libdc1394 found "
2481fi
2482
6a1a892f 2483SDL_CONFIG="${cross_prefix}sdl-config"
2270b4b2 2484if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
5e622c40 2485 sdl_cflags=$("${SDL_CONFIG}" --cflags)
b4f93564 2486 sdl_libs=$("${SDL_CONFIG}" --libs)
aa692d54
MR
2487 check_func_headers SDL.h SDL_Init $sdl_cflags $sdl_libs &&
2488 check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
2489 enable sdl &&
2490 check_struct SDL.h SDL_VideoInfo current_w $sdl_cflags && enable sdl_video_size
c3f6b472 2491fi
57bd82d4 2492
2270b4b2 2493texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
146ea952 2494
73b46a95 2495if enabled network; then
96000432 2496 check_type "sys/types.h sys/socket.h" socklen_t
c0018613 2497 check_type netdb.h "struct addrinfo"
33a4dbdd 2498 check_type sys/socket.h "struct sockaddr_storage"
73b46a95
RP
2499 # Prefer arpa/inet.h over winsock2
2500 if check_header arpa/inet.h ; then
2501 check_func closesocket
2502 elif check_header winsock2.h ; then
f4c13872
MS
2503 check_func_headers winsock2.h closesocket -lws2 && \
2504 network_extralibs="-lws2" || \
2505 { check_func_headers winsock2.h closesocket -lws2_32 && \
2506 network_extralibs="-lws2_32"; }
72be9e73 2507 check_type ws2tcpip.h socklen_t
c0018613 2508 check_type ws2tcpip.h "struct addrinfo"
33a4dbdd 2509 check_type ws2tcpip.h "struct sockaddr_storage"
28c9f069
MK
2510 else
2511 disable network
73b46a95
RP
2512 fi
2513fi
2514
b6f3d925 2515enabled_all network ipv6 && check_ld <<EOF || disable ipv6
7a91333f
HZ
2516#include <sys/types.h>
2517#include <sys/socket.h>
2518#include <netinet/in.h>
2519#include <netdb.h>
db817cf3 2520int main(void) {
7483e694
DB
2521 struct sockaddr_storage saddr;
2522 struct ipv6_mreq mreq6;
2523 getaddrinfo(0,0,0,0);
2524 getnameinfo(0,0,0,0,0,0,0);
2525 IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
7a91333f
HZ
2526}
2527EOF
2528
06e31011
RP
2529check_header linux/videodev.h
2530check_header linux/videodev2.h
1b6e8b73 2531check_header sys/videoio.h
47f38850 2532
2446d3d6 2533check_func_headers "windows.h vfw.h" capCreateCaptureWindow -lvfw32
c2345207 2534
f8aa696f 2535# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
1c915f83
RP
2536{ check_header dev/bktr/ioctl_meteor.h &&
2537 check_header dev/bktr/ioctl_bt848.h; } ||
2538{ check_header machine/ioctl_meteor.h &&
2539 check_header machine/ioctl_bt848.h; } ||
2540{ check_header dev/video/meteor/ioctl_meteor.h &&
2541 check_header dev/video/bktr/ioctl_bt848.h; } ||
2542check_header dev/ic/bt8xx.h
f8aa696f 2543
c7682de0
RP
2544check_header sys/soundcard.h
2545check_header soundcard.h
deb29777 2546
b6f3d925 2547enabled_any alsa_indev alsa_outdev && check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
35fd8122 2548
0e57fe17 2549enabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack
80ff8a16 2550
56a059ac 2551enabled x11grab &&
f58f4ce1
GP
2552check_header X11/Xlib.h &&
2553check_header X11/extensions/XShm.h &&
0a045661 2554check_header X11/extensions/Xfixes.h &&
f58f4ce1 2555check_func XOpenDisplay -lX11 &&
781c1aa6
R
2556check_func XShmCreateImage -lX11 -lXext &&
2557check_func XFixesGetCursorImage -lX11 -lXext -lXfixes
f58f4ce1 2558
598ef02b 2559if ! disabled vdpau && enabled vdpau_vdpau_h; then
deda2a4a
AC
2560check_cpp_condition \
2561 vdpau/vdpau.h "defined VDP_DECODER_PROFILE_MPEG4_PART2_ASP" ||
d1ebd4a9
AC
2562 { echolog "Please upgrade to libvdpau >= 0.2 if you would like vdpau support." &&
2563 disable vdpau; }
abf649c7 2564fi
deda2a4a 2565
95e561ec 2566enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel"
57bd82d4
MR
2567
2568# add some useful compiler flags if supported
2569check_cflags -Wdeclaration-after-statement
dcd479c0
MR
2570check_cflags -Wall
2571check_cflags -Wno-switch
c07bd6a9
MN
2572check_cflags -Wdisabled-optimization
2573check_cflags -Wpointer-arith
2574check_cflags -Wredundant-decls
cc1fb623 2575check_cflags -Wno-pointer-sign
f4929996 2576check_cflags -Wcast-qual
9aceb3cf 2577check_cflags -Wwrite-strings
652a5bf6 2578check_cflags -Wtype-limits
764551c6 2579check_cflags -Wundef
5af4e0cc 2580enabled extra_warnings && check_cflags -Winline
cf9d24ad 2581
57bd82d4 2582# add some linker flags
5c0e9479 2583check_ldflags -Wl,--warn-common
8351d2ba
DB
2584check_ldflags -Wl,--as-needed
2585check_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 2586check_ldflags -Wl,-Bsymbolic
94a3401e 2587
a482e61b
MR
2588echo "X{};" > $TMPV
2589test_ldflags -Wl,--version-script,$TMPV &&
2590 append SHFLAGS '-Wl,--version-script,\$(SUBDIR)lib\$(NAME).ver'
2591
bd2216e4
MR
2592if enabled small; then
2593 check_cflags -Os # not all compilers support -Os
8400d6b8
DB
2594 optimizations="small"
2595elif enabled optimizations; then
629687f6 2596 if enabled xlc; then
0f010b2f
DB
2597 add_cflags -O5
2598 add_ldflags -O5
03279bbe
MK
2599 elif enabled suncc; then
2600 add_cflags -O5
df442a8d
MR
2601 elif enabled ccc; then
2602 add_cflags -fast
cf9d24ad 2603 else
0f010b2f 2604 add_cflags -O3
cf9d24ad 2605 fi
cddf3f45 2606fi
11fdbc44 2607check_cflags -fno-math-errno
b2eb2ff0 2608check_cflags -fno-signed-zeros
cddf3f45 2609
629687f6 2610if enabled icc; then
b1598b58
MR
2611 # Just warnings, no remarks
2612 check_cflags -w1
2613 # -wd: Disable following warnings
2614 # 144, 167, 556: -Wno-pointer-sign
2615 # 10006: ignoring unknown option -fno-signed-zeros
2616 # 10156: ignoring option '-W'; no argument required
2617 check_cflags -wd144,167,556,10006,10156
2618 # 11030: Warning unknown option --as-needed
2619 # 10156: ignoring option '-export'; no argument required
2620 check_ldflags -wd10156,11030
2621 # Allow to compile with optimizations
2622 check_ldflags -march=$cpu
be2cf98a
CEH
2623 # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
2624 enable ebp_available
df442a8d
MR
2625elif enabled ccc; then
2626 # disable some annoying warnings
2627 add_cflags -msg_disable cvtu32to64
2628 add_cflags -msg_disable embedcomment
2629 add_cflags -msg_disable needconstext
2630 add_cflags -msg_disable nomainieee
2631 add_cflags -msg_disable ptrmismatch1
2632 add_cflags -msg_disable unreachcode
973859f5
MR
2633elif enabled gcc; then
2634 check_cflags -fno-tree-vectorize
06da6943
DC
2635elif enabled clang; then
2636 check_cflags -Qunused-arguments
504a64b9
CEH
2637fi
2638
90be59ef 2639if enabled gprof; then
0f010b2f
DB
2640 add_cflags -p
2641 add_ldflags -p
1db54e20
DB
2642fi
2643
7f3c02fc 2644# Find out if the .align argument is a power of two or not.
9377b6ce 2645check_asm asmalign_pot '".align 3"'
4454dc1b 2646
7483e694
DB
2647enabled_any $DECODER_LIST && enable decoders
2648enabled_any $ENCODER_LIST && enable encoders
5666fd73 2649enabled_any $HWACCEL_LIST && enable hwaccels
7483e694
DB
2650enabled_any $BSF_LIST && enable bsfs
2651enabled_any $DEMUXER_LIST && enable demuxers
2652enabled_any $MUXER_LIST && enable muxers
f7679c54 2653enabled_any $FILTER_LIST && enable filters
63d72fda
DB
2654enabled_any $INDEV_LIST && enable indevs
2655enabled_any $OUTDEV_LIST && enable outdevs
7483e694
DB
2656enabled_any $PROTOCOL_LIST && enable protocols
2657
2658enabled_any $THREADS_LIST && enable threads
2659
2660check_deps $CONFIG_LIST \
b6bb00b0 2661 $CONFIG_EXTRA \
7483e694
DB
2662 $HAVE_LIST \
2663 $DECODER_LIST \
2664 $ENCODER_LIST \
5666fd73 2665 $HWACCEL_LIST \
7483e694
DB
2666 $PARSER_LIST \
2667 $BSF_LIST \
2668 $DEMUXER_LIST \
2669 $MUXER_LIST \
f7679c54 2670 $FILTER_LIST \
7483e694
DB
2671 $INDEV_LIST \
2672 $OUTDEV_LIST \
2673 $PROTOCOL_LIST \
f70f03f6 2674
c8a4ae00
MR
2675enabled asm || disable $ARCH_LIST $ARCH_EXT_LIST
2676
3e89171a 2677echo "install prefix $prefix"
f36958f8
DB
2678echo "source path $source_path"
2679echo "C compiler $cc"
bfd5afd8 2680echo ".align is power-of-two $asmalign_pot"
f36958f8 2681echo "ARCH $arch ($cpu)"
ce8871c2
MR
2682if test "$build_suffix" != ""; then
2683 echo "build suffix $build_suffix"
eb94aca9 2684fi
ac63af34
DB
2685if test "$extra_version" != ""; then
2686 echo "version string suffix $extra_version"
2687fi
0db2ce77 2688echo "big-endian ${bigendian-no}"
e90f5b5a 2689echo "runtime cpu detection ${runtime_cpudetect-no}"
5b6c2cbd 2690if enabled x86; then
af44e8e4 2691 echo "yasm ${yasm-no}"
0db2ce77 2692 echo "MMX enabled ${mmx-no}"
30e98e62 2693 echo "MMX2 enabled ${mmx2-no}"
3bf96eec 2694 echo "3DNow! enabled ${amd3dnow-no}"
a1ef9f08 2695 echo "3DNow! extended enabled ${amd3dnowext-no}"
1bb04d5a 2696 echo "SSE enabled ${sse-no}"
30e98e62 2697 echo "SSSE3 enabled ${ssse3-no}"
0db2ce77
MR
2698 echo "CMOV enabled ${cmov-no}"
2699 echo "CMOV is fast ${fast_cmov-no}"
971cc990
MN
2700 echo "EBX available ${ebx_available-no}"
2701 echo "EBP available ${ebp_available-no}"
d3a4b4e0 2702 echo "10 operands supported ${ten_operands-no}"
e41e8342 2703fi
5b6c2cbd 2704if enabled arm; then
0db2ce77
MR
2705 echo "ARMv5TE enabled ${armv5te-no}"
2706 echo "ARMv6 enabled ${armv6-no}"
ab5cb084 2707 echo "ARMv6T2 enabled ${armv6t2-no}"
f55b299a 2708 echo "ARM VFP enabled ${armvfp-no}"
0db2ce77 2709 echo "IWMMXT enabled ${iwmmxt-no}"
6b18d278 2710 echo "NEON enabled ${neon-no}"
eba9ae3c 2711fi
5b6c2cbd 2712if enabled mips; then
0db2ce77 2713 echo "MMI enabled ${mmi-no}"
e41e8342 2714fi
5b6c2cbd 2715if enabled ppc; then
0db2ce77 2716 echo "AltiVec enabled ${altivec-no}"
30e98e62 2717 echo "PPC 4xx optimizations ${ppc4xx-no}"
0db2ce77 2718 echo "dcbzl available ${dcbzl-no}"
30e98e62
DB
2719 echo "performance report ${powerpc_perf-no}"
2720fi
2721if enabled sparc; then
2722 echo "VIS enabled ${vis-no}"
e41e8342 2723fi
0db2ce77
MR
2724echo "gprof enabled ${gprof-no}"
2725echo "debug symbols ${debug-no}"
87a0fb62 2726echo "strip symbols ${stripping-no}"
8400d6b8 2727echo "optimizations ${optimizations-no}"
0db2ce77
MR
2728echo "static ${static-no}"
2729echo "shared ${shared-no}"
4a24ab64 2730echo "postprocessing support ${postproc-no}"
f7679c54 2731echo "new filter support ${avfilter-no}"
81124ba0 2732echo "filters using lavformat ${avfilter_lavf-no}"
0db2ce77 2733echo "network support ${network-no}"
90be59ef 2734if enabled network; then
0db2ce77 2735 echo "IPv6 support ${ipv6-no}"
bfd5afd8 2736fi
0db2ce77
MR
2737echo "threading support ${thread_type-no}"
2738echo "SDL support ${sdl-no}"
0db2ce77
MR
2739echo "Sun medialib support ${mlib-no}"
2740echo "AVISynth enabled ${avisynth-no}"
f7b8bffe 2741echo "libdc1394 support ${libdc1394-no}"
690bfceb 2742echo "libdirac enabled ${libdirac-no}"
0db2ce77
MR
2743echo "libfaac enabled ${libfaac-no}"
2744echo "libfaad enabled ${libfaad-no}"
7e0871a7 2745echo "libfaad dlopened ${libfaadbin-no}"
0db2ce77
MR
2746echo "libgsm enabled ${libgsm-no}"
2747echo "libmp3lame enabled ${libmp3lame-no}"
2748echo "libnut enabled ${libnut-no}"
0b175caa
DB
2749echo "libopencore-amrnb support ${libopencore_amrnb-no}"
2750echo "libopencore-amrwb support ${libopencore_amrwb-no}"
9a77d59a 2751echo "libopenjpeg enabled ${libopenjpeg-no}"
f7cd9eed 2752echo "libschroedinger enabled ${libschroedinger-no}"
ae14f311 2753echo "libspeex enabled ${libspeex-no}"
0db2ce77
MR
2754echo "libtheora enabled ${libtheora-no}"
2755echo "libvorbis enabled ${libvorbis-no}"
d6bd62db
DB
2756echo "libx264 enabled ${libx264-no}"
2757echo "libxvid enabled ${libxvid-no}"
0db2ce77 2758echo "zlib enabled ${zlib-no}"
f402916e 2759echo "bzlib enabled ${bzlib-no}"
2c62e737 2760echo
de6d9b64 2761
5666fd73 2762for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
8138b9db 2763 echo "Enabled ${type}s:"
f65c9da1 2764 eval list=\$$(toupper $type)_LIST
8138b9db 2765 for part in $list; do
f65c9da1
MR
2766 enabled $part && echo ${part%_*}
2767 done | sort | pr -3 -t
2768 echo
8138b9db
RP
2769done
2770
ba7a7039 2771license="LGPL version 2.1 or later"
ba321adb 2772if enabled nonfree; then
ba7a7039 2773 license="nonfree and unredistributable"
9cad0e4e
DB
2774elif enabled gplv3; then
2775 license="GPL version 3 or later"
2776elif enabled lgplv3; then
2777 license="LGPL version 3 or later"
ba321adb 2778elif enabled gpl; then
ba7a7039 2779 license="GPL version 2 or later"
ba321adb
JK
2780fi
2781
2782echo "License: $license"
ca5323af 2783
cf1392e9
DB
2784echo "Creating config.mak and config.h..."
2785
df642790
MR
2786# build tree in object directory if source path is different from current one
2787if enabled source_path_used; then
2788 DIRS="
2789 doc
2790 libavcodec
2791 libavcodec/$arch
2792 libavdevice
2793 libavfilter
2794 libavformat
2795 libavutil
2796 libavutil/$arch
2797 libpostproc
2798 libswscale
2799 libswscale/$arch
2800 tests
2801 tools
2802 "
2803 FILES="
2804 Makefile
2805 common.mak
2806 subdir.mak
2807 doc/texi2pod.pl
2808 libavcodec/Makefile
2809 libavdevice/Makefile
2810 libavfilter/Makefile
2811 libavformat/Makefile
2812 libavutil/Makefile
2813 libpostproc/Makefile
2814 libswscale/Makefile
2815 "
2816 for dir in $DIRS ; do
2817 mkdir -p $dir
2818 done
2819 for f in $FILES ; do
2820 $ln_s "$source_path/$f" $f
2821 done
2822fi
2823
ad212cc6
MR
2824enabled stripping || strip="echo skipping strip"
2825
173c983b
MR
2826cat > config.mak <<EOF
2827# Automatically generated by configure - do not modify!
2828ifndef FFMPEG_CONFIG_MAK
2829FFMPEG_CONFIG_MAK=1
2830FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION
2831prefix=$prefix
2832LIBDIR=\$(DESTDIR)$libdir
2833SHLIBDIR=\$(DESTDIR)$shlibdir
2834INCDIR=\$(DESTDIR)$incdir
2835BINDIR=\$(DESTDIR)$bindir
2836DATADIR=\$(DESTDIR)$datadir
2837MANDIR=\$(DESTDIR)$mandir
2838SRC_PATH="$source_path"
2839SRC_PATH_BARE=$source_path
2840BUILD_ROOT="$PWD"
2841ARCH=$arch
2842CC=$cc
2843AS=$as
2844LD=$ld
2845DEPCC=$dep_cc
2846YASM=$yasmexe
2847AR=$ar
2848RANLIB=$ranlib
2849LN_S=$ln_s
2850STRIP=$strip
2851CPPFLAGS=$CPPFLAGS
2852CFLAGS=$CFLAGS
2853ASFLAGS=$ASFLAGS
2854CC_O=$CC_O
2855LDFLAGS=$LDFLAGS
2856FFSERVERLDFLAGS=$FFSERVERLDFLAGS
2857SHFLAGS=$SHFLAGS
2858YASMFLAGS=$YASMFLAGS
2859BUILDSUF=$build_suffix
2860FULLNAME=$FULLNAME
2861LIBPREF=$LIBPREF
2862LIBSUF=$LIBSUF
2863LIBNAME=$LIBNAME
2864SLIBPREF=$SLIBPREF
2865SLIBSUF=$SLIBSUF
2866EXESUF=$EXESUF
2867EXTRA_VERSION=$extra_version
2868DEPFLAGS=$DEPFLAGS
2869CCDEP=$CCDEP
2870ASDEP=$ASDEP
2871CC_DEPFLAGS=$CC_DEPFLAGS
2872AS_DEPFLAGS=$AS_DEPFLAGS
2873HOSTCC=$host_cc
2874HOSTCFLAGS=$host_cflags
2875HOSTEXESUF=$HOSTEXESUF
2876HOSTLDFLAGS=$host_ldflags
2877HOSTLIBS=$host_libs
2878TARGET_EXEC=$target_exec
2879TARGET_PATH=$target_path
2880SDL_LIBS=$sdl_libs
2881SDL_CFLAGS=$sdl_cflags
2882LIB_INSTALL_EXTRA_CMD=$LIB_INSTALL_EXTRA_CMD
2883EXTRALIBS=$extralibs
2884EOF
5a872801 2885
719c8e00
MR
2886get_version(){
2887 name=$1
2888 file=$source_path/$2
147e7692
MR
2889 eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
2890 eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
0e32c8c6
MR
2891 lcname=$(tolower $name)
2892 eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
2893 eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
719c8e00
MR
2894}
2895
147e7692
MR
2896get_version LIBSWSCALE libswscale/swscale.h
2897get_version LIBPOSTPROC libpostproc/postprocess.h
2898get_version LIBAVCODEC libavcodec/avcodec.h
2899get_version LIBAVDEVICE libavdevice/avdevice.h
2900get_version LIBAVFORMAT libavformat/avformat.h
2901get_version LIBAVUTIL libavutil/avutil.h
a6601d69 2902get_version LIBAVFILTER libavfilter/avfilter.h
5a872801 2903
173c983b
MR
2904enabled shared && cat >> config.mak <<EOF
2905LIBTARGET=${LIBTARGET}
2906SLIBNAME=${SLIBNAME}
2907SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}
2908SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}
2909SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}
2910SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}
2911SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}
2912SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}
2913EOF
523ef551 2914
173c983b
MR
2915enabled asmalign_pot || align_shift="1 <<"
2916
2917cat > $TMPH <<EOF
2918/* Automatically generated by configure - do not modify! */
2919#ifndef FFMPEG_CONFIG_H
2920#define FFMPEG_CONFIG_H
2921#define FFMPEG_CONFIGURATION "$(c_escape $FFMPEG_CONFIGURATION)"
c1736936 2922#define FFMPEG_LICENSE "$(c_escape $license)"
173c983b
MR
2923#define FFMPEG_DATADIR "$(eval c_escape $datadir)"
2924#define CC_TYPE "$cc_type"
2925#define CC_VERSION $cc_version
2926#define restrict $_restrict
2927#define ASMALIGN(ZEROBITS) ".align $align_shift " #ZEROBITS "\\n\\t"
2928#define EXTERN_PREFIX "${extern_prefix}"
2929#define EXTERN_ASM ${extern_prefix}
2930EOF
523ef551
DB
2931
2932if enabled small || disabled optimizations; then
2933 echo "#define av_always_inline" >> $TMPH
2934fi
2935
3d907e22
MR
2936print_config ARCH_ $TMPH config.mak $ARCH_LIST
2937print_config HAVE_ $TMPH config.mak $HAVE_LIST
7483e694 2938print_config CONFIG_ $TMPH config.mak $CONFIG_LIST \
b6bb00b0 2939 $CONFIG_EXTRA \
7483e694
DB
2940 $DECODER_LIST \
2941 $ENCODER_LIST \
5666fd73 2942 $HWACCEL_LIST \
7483e694
DB
2943 $PARSER_LIST \
2944 $BSF_LIST \
2945 $DEMUXER_LIST \
2946 $MUXER_LIST \
f7679c54 2947 $FILTER_LIST \
7483e694
DB
2948 $PROTOCOL_LIST \
2949 $INDEV_LIST \
2950 $OUTDEV_LIST \
8ac17293 2951
9c05103f 2952echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
8c6d2da5 2953echo "endif # FFMPEG_CONFIG_MAK" >> config.mak
9c05103f 2954
b7860763 2955# Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
c34681df 2956cp_if_changed $TMPH config.h
3d204385 2957
d0674868 2958# build pkg-config files
def4272a 2959
d0674868
DB
2960pkgconfig_generate(){
2961name=$1
b0dfd108 2962shortname=${name#lib}${build_suffix}
d0674868
DB
2963comment=$2
2964version=$3
2965libs=$4
2966requires=$5
25cd5cb3 2967cat <<EOF > $name/$name.pc
3e89171a 2968prefix=$prefix
a94e666c 2969exec_prefix=\${prefix}
f2b7382c 2970libdir=$libdir
7622778e 2971includedir=$incdir
def4272a 2972
d0674868
DB
2973Name: $name
2974Description: $comment
2975Version: $version
8cd6b388 2976Requires: $(enabled shared || echo $requires)
5dcfe9f8 2977Requires.private: $(enabled shared && echo $requires)
def4272a 2978Conflicts:
8cd6b388 2979Libs: -L\${libdir} -l${shortname} $(enabled shared || echo $libs)
12701f6e 2980Libs.private: $(enabled shared && echo $libs)
76a448ed 2981Cflags: -I\${includedir}
def4272a 2982EOF
25cd5cb3 2983cat <<EOF > $name/$name-uninstalled.pc
def4272a
AJ
2984prefix=
2985exec_prefix=
46d1ff83 2986libdir=\${pcfiledir}
1d44d365 2987includedir=${source_path}
def4272a 2988
d0674868
DB
2989Name: $name
2990Description: $comment
2991Version: $version
2992Requires: $requires
def4272a 2993Conflicts:
12701f6e 2994Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
def4272a
AJ
2995Cflags: -I\${includedir}
2996EOF
d0674868 2997}
def4272a 2998
e426941d 2999pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
46983309
RT
3000pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
3001pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
3002pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "libavformat = $LIBAVFORMAT_VERSION"
3ed1a2ee 3003enabled avfilter &&
46983309 3004 pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
3ed1a2ee 3005enabled postproc &&
e426941d 3006 pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
5add54b4 3007pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"