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