get_bits: remove A32 variant
[libav.git] / configure
CommitLineData
aeb29222 1#!/bin/sh
0f3cb305 2#
070c5d0f 3# Libav configure script
f57620d5 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."
070c5d0f 47 echo "THIS IS NOT A BUG IN LIBAV, DO NOT REPORT IT AS SUCH."
505dfb09 48 echo "Instead, install a working POSIX-compatible shell."
070c5d0f 49 echo "Disabling this configure test will create a broken Libav."
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
19bd477d 64 --logfile=FILE log tests and output to FILE [config.log]
06454877
MR
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]
6291d7e4 68 --datadir=DIR install data files in DIR [PREFIX/share/avconv]
06454877
MR
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
6291d7e4 84 --disable-avconv disable avconv build
266463da 85 --disable-avplay disable avplay build
9e12f0bf 86 --disable-avprobe disable avprobe build
4d58e4cb 87 --disable-avserver disable avserver build
5a0f7131
MR
88 --disable-avdevice disable libavdevice build
89 --disable-avcodec disable libavcodec build
90 --disable-avformat disable libavformat build
91 --disable-swscale disable libswscale build
ced9556b 92 --disable-postproc disable libpostproc build
cccc039f 93 --disable-avfilter disable video filter support [no]
0dbfc1db 94 --disable-pthreads disable pthreads [auto]
7b7b220c 95 --disable-w32threads disable Win32 threads [auto]
06454877
MR
96 --enable-x11grab enable X11 grabbing [no]
97 --disable-network disable network support [no]
06454877
MR
98 --enable-gray enable full grayscale support (slower color)
99 --disable-swscale-alpha disable alpha channel support in swscale
100 --disable-fastdiv disable table-based division
101 --enable-small optimize for size instead of speed
102 --disable-aandct disable AAN DCT code
7f3f5f46 103 --disable-dct disable DCT code
06454877
MR
104 --disable-fft disable FFT code
105 --disable-golomb disable Golomb code
3447f12d 106 --disable-huffman disable Huffman code
06454877
MR
107 --disable-lpc disable LPC code
108 --disable-mdct disable MDCT code
109 --disable-rdft disable RDFT code
dcb73592 110 --enable-vaapi enable VAAPI code
ac3dbb4d 111 --enable-vda enable VDA code
e8f6bd4b 112 --enable-vdpau enable VDPAU code
92c6a099 113 --disable-dxva2 disable DXVA2 code
06454877
MR
114 --enable-runtime-cpudetect detect cpu capabilities at runtime (bigger binary)
115 --enable-hardcoded-tables use hardcoded tables instead of runtime generation
116 --enable-memalign-hack emulate memalign, interferes with memory debuggers
bb55e3a3 117 --disable-everything disable all components listed below
06454877
MR
118 --disable-encoder=NAME disable encoder NAME
119 --enable-encoder=NAME enable encoder NAME
120 --disable-encoders disable all encoders
121 --disable-decoder=NAME disable decoder NAME
122 --enable-decoder=NAME enable decoder NAME
123 --disable-decoders disable all decoders
124 --disable-hwaccel=NAME disable hwaccel NAME
125 --enable-hwaccel=NAME enable hwaccel NAME
126 --disable-hwaccels disable all hwaccels
127 --disable-muxer=NAME disable muxer NAME
128 --enable-muxer=NAME enable muxer NAME
129 --disable-muxers disable all muxers
130 --disable-demuxer=NAME disable demuxer NAME
131 --enable-demuxer=NAME enable demuxer NAME
132 --disable-demuxers disable all demuxers
133 --enable-parser=NAME enable parser NAME
134 --disable-parser=NAME disable parser NAME
135 --disable-parsers disable all parsers
136 --enable-bsf=NAME enable bitstream filter NAME
137 --disable-bsf=NAME disable bitstream filter NAME
138 --disable-bsfs disable all bitstream filters
139 --enable-protocol=NAME enable protocol NAME
140 --disable-protocol=NAME disable protocol NAME
141 --disable-protocols disable all protocols
142 --disable-indev=NAME disable input device NAME
143 --disable-outdev=NAME disable output device NAME
144 --disable-indevs disable input devices
145 --disable-outdevs disable output devices
146 --disable-devices disable all devices
147 --enable-filter=NAME enable filter NAME
148 --disable-filter=NAME disable filter NAME
149 --disable-filters disable all filters
150 --list-decoders show all available decoders
151 --list-encoders show all available encoders
152 --list-hwaccels show all available hardware accelerators
153 --list-muxers show all available muxers
154 --list-demuxers show all available demuxers
155 --list-parsers show all available parsers
156 --list-protocols show all available protocols
157 --list-bsfs show all available bitstream filters
158 --list-indevs show all available input devices
159 --list-outdevs show all available output devices
160 --list-filters show all available filters
161
162External library support:
163 --enable-avisynth enable reading of AVISynth script files [no]
164 --enable-bzlib enable bzlib [autodetect]
47941088 165 --enable-frei0r enable frei0r video filtering
bc8c1395 166 --enable-gnutls enable gnutls [no]
06454877
MR
167 --enable-libopencore-amrnb enable AMR-NB de/encoding via libopencore-amrnb [no]
168 --enable-libopencore-amrwb enable AMR-WB decoding via libopencore-amrwb [no]
6ebf0bfc 169 --enable-libopencv enable video filtering via libopencv [no]
e417d80d 170 --enable-libcdio enable audio CD grabbing with libcdio
06454877
MR
171 --enable-libdc1394 enable IIDC-1394 grabbing using libdc1394
172 and libraw1394 [no]
173 --enable-libdirac enable Dirac support via libdirac [no]
174 --enable-libfaac enable FAAC support via libfaac [no]
a5b64584 175 --enable-libfreetype enable libfreetype [no]
06454877
MR
176 --enable-libgsm enable GSM support via libgsm [no]
177 --enable-libmp3lame enable MP3 encoding via libmp3lame [no]
178 --enable-libnut enable NUT (de)muxing via libnut,
179 native (de)muxer exists [no]
180 --enable-libopenjpeg enable JPEG 2000 decoding via OpenJPEG [no]
7c922411 181 --enable-libpulse enable Pulseaudio input via libpulse [no]
0f943ce6 182 --enable-librtmp enable RTMP[E] support via librtmp [no]
06454877 183 --enable-libschroedinger enable Dirac support via libschroedinger [no]
b606a017 184 --enable-libspeex enable Speex support via libspeex [no]
06454877 185 --enable-libtheora enable Theora encoding via libtheora [no]
d89e738a 186 --enable-libvo-aacenc enable AAC encoding via libvo-aacenc [no]
f502ff3f 187 --enable-libvo-amrwbenc enable AMR-WB encoding via libvo-amrwbenc [no]
06454877
MR
188 --enable-libvorbis enable Vorbis encoding via libvorbis,
189 native implementation exists [no]
8299a7f8 190 --enable-libvpx enable VP8 support via libvpx [no]
06454877 191 --enable-libx264 enable H.264 encoding via x264 [no]
de295976 192 --enable-libxavs enable AVS encoding via xavs [no]
06454877
MR
193 --enable-libxvid enable Xvid encoding via xvidcore,
194 native MPEG-4/Xvid encoder exists [no]
195 --enable-mlib enable Sun medialib [no]
a060866f 196 --enable-openssl enable openssl [no]
06454877
MR
197 --enable-zlib enable zlib [autodetect]
198
199Advanced options (experts only):
06454877
MR
200 --cross-prefix=PREFIX use PREFIX for compilation tools [$cross_prefix]
201 --enable-cross-compile assume a cross-compiler is used
202 --sysroot=PATH root of cross-build tree
203 --sysinclude=PATH location of cross-build system headers
204 --target-os=OS compiler targets OS [$target_os]
205 --target-exec=CMD command to run executables on target
206 --target-path=DIR path to view of build directory on target
207 --nm=NM use nm tool
121d78d0 208 --ar=AR use archive tool AR [$ar_default]
06454877
MR
209 --as=AS use assembler AS [$as_default]
210 --cc=CC use C compiler CC [$cc_default]
211 --ld=LD use linker LD
212 --host-cc=HOSTCC use host C compiler HOSTCC
213 --host-cflags=HCFLAGS use HCFLAGS when compiling for host
214 --host-ldflags=HLDFLAGS use HLDFLAGS when linking for host
215 --host-libs=HLIBS use libs HLIBS when linking for host
216 --extra-cflags=ECFLAGS add ECFLAGS to CFLAGS [$CFLAGS]
217 --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]
218 --extra-libs=ELIBS add ELIBS [$ELIBS]
219 --extra-version=STRING version string suffix []
220 --build-suffix=SUFFIX library name suffix []
221 --arch=ARCH select architecture [$arch]
222 --cpu=CPU select the minimum required CPU (affects
223 instruction selection, may crash on older CPUs)
c8a4ae00 224 --disable-asm disable all assembler optimizations
06454877
MR
225 --disable-altivec disable AltiVec optimizations
226 --disable-amd3dnow disable 3DNow! optimizations
227 --disable-amd3dnowext disable 3DNow! extended optimizations
228 --disable-mmx disable MMX optimizations
229 --disable-mmx2 disable MMX2 optimizations
230 --disable-sse disable SSE optimizations
231 --disable-ssse3 disable SSSE3 optimizations
87f1355f 232 --disable-avx disable AVX optimizations
06454877
MR
233 --disable-armv5te disable armv5te optimizations
234 --disable-armv6 disable armv6 optimizations
235 --disable-armv6t2 disable armv6t2 optimizations
236 --disable-armvfp disable ARM VFP optimizations
237 --disable-iwmmxt disable iwmmxt optimizations
238 --disable-mmi disable MMI optimizations
239 --disable-neon disable neon optimizations
240 --disable-vis disable VIS optimizations
241 --disable-yasm disable use of yasm assembler
242 --enable-pic build position-independent code
4ae40685 243 --malloc-prefix=PFX prefix malloc and related names with PFX
6b35d421 244 --enable-sram allow use of on-chip SRAM
9baec618 245 --disable-symver disable symbol versioning
9cd7b854 246 --optflags override optimization-related compiler flags
06454877 247
070c5d0f 248Developer options (useful when working on Libav itself):
06454877
MR
249 --disable-debug disable debugging symbols
250 --enable-debug=LEVEL set the debug level [$debuglevel]
06454877
MR
251 --disable-optimizations disable compiler optimizations
252 --enable-extra-warnings enable more compiler warnings
52b3cc60
RD
253 --samples=PATH location of test samples for FATE, if not set use
254 \$FATE_SAMPLES at make invocation time.
06454877
MR
255
256NOTE: Object files are built at the place where configure is launched.
257EOF
60e8bc13 258 exit 0
74c53c2d 259}
cf9d24ad 260
0884fadf
MR
261quotes='""'
262
57bd82d4 263log(){
2270b4b2 264 echo "$@" >> $logfile
57bd82d4
MR
265}
266
720c69da 267log_file(){
c8e9f801 268 log BEGIN $1
2270b4b2 269 pr -n -t $1 >> $logfile
c8e9f801
MR
270 log END $1
271}
272
2ba042a7 273echolog(){
c8e9f801 274 log "$@"
57bd82d4 275 echo "$@"
2ba042a7
MR
276}
277
7bfc8ae6
MR
278warn(){
279 log "WARNING: $*"
280 WARNINGS="${WARNINGS}WARNING: $*\n"
281}
282
2ba042a7
MR
283die(){
284 echolog "$@"
285 cat <<EOF
d326cf7f 286
2ba042a7 287If you think configure made a mistake, make sure you are using the latest
4a6a21f5 288version from Git. If the latest version fails, report the problem to the
070c5d0f 289libav-user@libav.org mailing list or IRC #libav on irc.freenode.net.
2ba042a7 290EOF
e155a21a 291 if disabled logging; then
2ba042a7 292 cat <<EOF
e155a21a
DB
293Rerun configure with logging enabled (do not use --disable-logging), and
294include the log this produces with your report.
2ba042a7
MR
295EOF
296 else
297cat <<EOF
e155a21a
DB
298Include the log file "$logfile" produced by configure as this will help
299solving the problem.
2ba042a7
MR
300EOF
301 fi
57bd82d4
MR
302 exit 1
303}
304
6c6007d6 305# Avoid locale weirdness, besides we really just want to translate ASCII.
44161118 306toupper(){
6c6007d6 307 echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
44161118
MR
308}
309
4a5444db 310tolower(){
6c6007d6 311 echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
4a5444db
MR
312}
313
14a8acf1
MR
314c_escape(){
315 echo "$*" | sed 's/["\\]/\\\0/g'
316}
317
b04251c5
MR
318sh_quote(){
319 v=$(echo "$1" | sed "s/'/'\\\\''/g")
d72c981c 320 test "x$v" = "x${v#*[!A-Za-z0-9_/.+-]}" || v="'$v'"
b04251c5
MR
321 echo "$v"
322}
323
bb7a22b5
MR
324cleanws(){
325 echo "$@" | sed 's/^ *//;s/ */ /g;s/ *$//'
326}
327
be8f2501
MR
328filter(){
329 pat=$1
330 shift
331 for v; do
98ef6079 332 eval "case $v in $pat) echo $v ;; esac"
be8f2501
MR
333 done
334}
335
9d201b26
MR
336filter_out(){
337 pat=$1
338 shift
339 for v; do
340 eval "case $v in $pat) ;; *) echo $v ;; esac"
341 done
342}
343
36e2dea0
MR
344map(){
345 m=$1
346 shift
e0e335a0 347 for v; do eval $m; done
36e2dea0
MR
348}
349
a8d04fba
MR
350set_all(){
351 value=$1
352 shift
353 for var in $*; do
354 eval $var=$value
355 done
356}
357
72a43668
MR
358set_weak(){
359 value=$1
360 shift
361 for var; do
362 eval : \${$var:=$value}
363 done
364}
365
3f8040db
MR
366set_safe(){
367 var=$1
368 shift
369 eval $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')='$*'
370}
371
372get_safe(){
373 eval echo \$$(echo "$1" | sed 's/[^A-Za-z0-9_]/_/g')
374}
375
799c9e9b
MR
376pushvar(){
377 for var in $*; do
378 eval level=\${${var}_level:=0}
379 eval ${var}_${level}="\$$var"
380 eval ${var}_level=$(($level+1))
381 done
382}
383
384popvar(){
385 for var in $*; do
386 eval level=\${${var}_level:-0}
387 test $level = 0 && continue
388 eval level=$(($level-1))
389 eval $var="\${${var}_${level}}"
390 eval ${var}_level=$level
391 eval unset ${var}_${level}
392 done
393}
394
a8d04fba
MR
395enable(){
396 set_all yes $*
397}
398
399disable(){
400 set_all no $*
401}
402
72a43668
MR
403enable_weak(){
404 set_weak yes $*
405}
406
407disable_weak(){
408 set_weak no $*
409}
410
72702705 411enable_safe(){
fd07f803
MR
412 for var; do
413 enable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
414 done
72702705
MR
415}
416
417disable_safe(){
fd07f803
MR
418 for var; do
419 disable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
420 done
72702705
MR
421}
422
f9d328da
MR
423do_enable_deep(){
424 for var; do
425 enabled $var && continue
426 eval sel="\$${var}_select"
c510c7b5
MR
427 eval sgs="\$${var}_suggest"
428 pushvar var sgs
f9d328da 429 enable_deep $sel
c510c7b5
MR
430 popvar sgs
431 enable_deep_weak $sgs
f9d328da
MR
432 popvar var
433 done
434}
435
436enable_deep(){
437 do_enable_deep $*
438 enable $*
439}
440
72a43668
MR
441enable_deep_weak(){
442 do_enable_deep $*
443 enable_weak $*
444}
445
57bd82d4 446enabled(){
3250003c
MR
447 test "${1#!}" = "$1" && op== || op=!=
448 eval test "x\$${1#!}" $op "xyes"
44161118
MR
449}
450
37970ebf 451disabled(){
3250003c
MR
452 test "${1#!}" = "$1" && op== || op=!=
453 eval test "x\$${1#!}" $op "xno"
37970ebf
RP
454}
455
44161118
MR
456enabled_all(){
457 for opt; do
458 enabled $opt || return 1
459 done
460}
461
85bca2c5
DB
462disabled_all(){
463 for opt; do
464 disabled $opt || return 1
465 done
466}
467
44161118
MR
468enabled_any(){
469 for opt; do
470 enabled $opt && return 0
471 done
472}
473
85bca2c5
DB
474disabled_any(){
475 for opt; do
476 disabled $opt && return 0
477 done
f7b230a7 478 return 1
85bca2c5
DB
479}
480
c9d19248
MR
481set_default(){
482 for opt; do
88268e94 483 eval : \${$opt:=\$${opt}_default}
c9d19248
MR
484 done
485}
486
4a0d6686
AJ
487is_in(){
488 value=$1
489 shift
490 for var in $*; do
491 [ $var = $value ] && return 0
492 done
493 return 1
494}
495
30fd06be
MR
496check_deps(){
497 for cfg; do
3250003c 498 cfg="${cfg#!}"
799c9e9b
MR
499 enabled ${cfg}_checking && die "Circular dependency for $cfg."
500 disabled ${cfg}_checking && continue
501 enable ${cfg}_checking
502
30fd06be
MR
503 eval dep_all="\$${cfg}_deps"
504 eval dep_any="\$${cfg}_deps_any"
7ef3425f 505 eval dep_sel="\$${cfg}_select"
c510c7b5 506 eval dep_sgs="\$${cfg}_suggest"
3d7453e0
MR
507 eval dep_ifa="\$${cfg}_if"
508 eval dep_ifn="\$${cfg}_if_any"
799c9e9b 509
3d7453e0
MR
510 pushvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
511 check_deps $dep_all $dep_any $dep_sel $dep_sgs $dep_ifa $dep_ifn
512 popvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
799c9e9b 513
3d7453e0
MR
514 [ -n "$dep_ifa" ] && { enabled_all $dep_ifa && enable_weak $cfg; }
515 [ -n "$dep_ifn" ] && { enabled_any $dep_ifn && enable_weak $cfg; }
6a702d4c
MR
516 enabled_all $dep_all || disable $cfg
517 enabled_any $dep_any || disable $cfg
7ef3425f 518 disabled_any $dep_sel && disable $cfg
799c9e9b 519
4ec45764
RP
520 if enabled $cfg; then
521 eval dep_extralibs="\$${cfg}_extralibs"
522 test -n "$dep_extralibs" && add_extralibs $dep_extralibs
f9d328da 523 enable_deep $dep_sel
c510c7b5 524 enable_deep_weak $dep_sgs
4ec45764
RP
525 fi
526
799c9e9b 527 disable ${cfg}_checking
30fd06be
MR
528 done
529}
530
72cfcf41
MR
531print_config_h(){
532 enabled $1 && v=1 || v=0
533 echo "#define $2 $v"
534}
535
536print_config_mak(){
537 enabled $1 && v= || v=!
538 echo "$v$2=yes"
539}
540
55127e7b
MR
541print_config_asm(){
542 enabled $1 && echo "%define $2"
543}
544
44161118
MR
545print_config(){
546 pfx=$1
72cfcf41
MR
547 files=$2
548 shift 2
44161118 549 for cfg; do
5e622c40 550 ucname="$(toupper $cfg)"
72cfcf41
MR
551 for f in $files; do
552 "print_config_${f##*.}" $cfg ${pfx}${ucname} >>$f
553 done
44161118 554 done
57bd82d4
MR
555}
556
31c0121d
MR
557print_enabled(){
558 test "$1" = -n && end=" " && shift || end="\n"
559 suf=$1
560 shift
561 for v; do
562 enabled $v && printf "%s$end" ${v%$suf};
563 done
564}
565
57bd82d4
MR
566append(){
567 var=$1
568 shift
57bd82d4
MR
569 eval "$var=\"\$$var $*\""
570}
571
60361817
MR
572prepend(){
573 var=$1
574 shift
575 eval "$var=\"$* \$$var\""
576}
577
50a334e4 578add_cppflags(){
caf458dd 579 append CPPFLAGS $($filter_cppflags "$@")
50a334e4
MR
580}
581
57bd82d4 582add_cflags(){
caf458dd 583 append CFLAGS $($filter_cflags "$@")
57bd82d4
MR
584}
585
2f2e6c7c 586add_asflags(){
caf458dd 587 append ASFLAGS $($filter_asflags "$@")
2f2e6c7c
MR
588}
589
57bd82d4
MR
590add_ldflags(){
591 append LDFLAGS "$@"
592}
593
594add_extralibs(){
60361817 595 prepend extralibs "$@"
57bd82d4
MR
596}
597
b0cfb663 598check_cmd(){
b3cb5d51 599 log "$@"
2270b4b2 600 "$@" >> $logfile 2>&1
b0cfb663
MR
601}
602
dcd479c0 603check_cc(){
57bd82d4 604 log check_cc "$@"
2270b4b2 605 cat > $TMPC
720c69da 606 log_file $TMPC
50a334e4 607 check_cmd $cc $CPPFLAGS $CFLAGS "$@" -c -o $TMPO $TMPC
57bd82d4
MR
608}
609
610check_cpp(){
611 log check_cpp "$@"
2270b4b2 612 cat > $TMPC
720c69da 613 log_file $TMPC
9e7f3277 614 check_cmd $cc $CPPFLAGS $CFLAGS "$@" -E -o $TMPO $TMPC
dcd479c0
MR
615}
616
f65883c8
MR
617check_as(){
618 log check_as "$@"
619 cat > $TMPC
620 log_file $TMPC
2f2e6c7c 621 check_cmd $as $CPPFLAGS $ASFLAGS "$@" -c -o $TMPO $TMPC
f65883c8
MR
622}
623
940f335a
MR
624check_asm(){
625 log check_asm "$@"
626 name="$1"
3784e82e 627 code="$2"
940f335a 628 shift 2
49214f61
MR
629 disable $name
630 check_as "$@" <<EOF && enable $name
3784e82e 631void foo(void){ __asm__ volatile($code); }
940f335a
MR
632EOF
633}
634
304d586d
LM
635check_yasm(){
636 log check_yasm "$@"
637 echo "$1" > $TMPS
638 log_file $TMPS
639 shift 1
640 check_cmd $yasmexe $YASMFLAGS "$@" -o $TMPO $TMPS
641}
642
dcd479c0 643check_ld(){
57bd82d4 644 log check_ld "$@"
3155a644
MR
645 flags=''
646 libs=''
647 for f; do
648 test "${f}" = "${f#-l}" && flags="$flags $f" || libs="$libs $f"
649 done
2a194acd 650 check_cc $($filter_cflags $flags) || return
7e75f9fe 651 check_cmd $ld $LDFLAGS $flags -o $TMPE $TMPO $libs $extralibs
dcd479c0
MR
652}
653
50a334e4
MR
654check_cppflags(){
655 log check_cppflags "$@"
caf458dd
MR
656 set -- $($filter_cppflags "$@")
657 check_cc "$@" <<EOF && append CPPFLAGS "$@"
50a334e4
MR
658int x;
659EOF
660}
661
dcd479c0 662check_cflags(){
57bd82d4 663 log check_cflags "$@"
caf458dd
MR
664 set -- $($filter_cflags "$@")
665 check_cc "$@" <<EOF && append CFLAGS "$@"
dcd479c0
MR
666int x;
667EOF
668}
669
2ed46eea
MR
670test_ldflags(){
671 log test_ldflags "$@"
672 check_ld "$@" <<EOF
c23a0ac8 673int main(void){ return 0; }
dcd479c0
MR
674EOF
675}
676
2ed46eea
MR
677check_ldflags(){
678 log check_ldflags "$@"
679 test_ldflags "$@" && add_ldflags "$@"
680}
681
dcd479c0 682check_header(){
57bd82d4 683 log check_header "$@"
dcd479c0
MR
684 header=$1
685 shift
b77df637
MR
686 disable_safe $header
687 check_cpp "$@" <<EOF && enable_safe $header
dcd479c0
MR
688#include <$header>
689int x;
690EOF
691}
692
693check_func(){
57bd82d4 694 log check_func "$@"
dcd479c0
MR
695 func=$1
696 shift
d8bc5f06
MR
697 disable $func
698 check_ld "$@" <<EOF && enable $func
dcd479c0 699extern int $func();
c23a0ac8 700int main(void){ $func(); }
dcd479c0
MR
701EOF
702}
703
645d2652 704check_mathfunc(){
6b73c0ae 705 log check_mathfunc "$@"
645d2652
MR
706 func=$1
707 shift
708 disable $func
709 check_ld "$@" <<EOF && enable $func
710#include <math.h>
33bd38db
MR
711float foo(float f) { return $func(f); }
712int main(void){ return 0; }
645d2652
MR
713EOF
714}
715
2446d3d6
DB
716check_func_headers(){
717 log check_func_headers "$@"
f8d7b072 718 headers=$1
edaf1ae2 719 funcs=$2
f8d7b072 720 shift 2
edaf1ae2
MR
721 {
722 for hdr in $headers; do
723 echo "#include <$hdr>"
724 done
725 for func in $funcs; do
726 echo "long check_$func(void) { return (long) $func; }"
727 done
728 echo "int main(void) { return 0; }"
729 } | check_ld "$@" && enable $funcs && enable_safe $headers
f8d7b072
MR
730}
731
a5344cf7
SS
732check_cpp_condition(){
733 log check_cpp_condition "$@"
734 header=$1
735 condition=$2
f855b7b9
MR
736 shift 2
737 check_cpp $($filter_cppflags "$@") <<EOF
a5344cf7
SS
738#include <$header>
739#if !($condition)
740#error "unsatisfied condition: $condition"
741#endif
742EOF
743}
744
57bd82d4
MR
745check_lib(){
746 log check_lib "$@"
747 header="$1"
748 func="$2"
749 shift 2
84400e9d 750 check_header $header && check_func $func "$@" && add_extralibs "$@"
57bd82d4
MR
751}
752
f8d7b072
MR
753check_lib2(){
754 log check_lib2 "$@"
755 headers="$1"
edaf1ae2 756 funcs="$2"
f8d7b072 757 shift 2
edaf1ae2 758 check_func_headers "$headers" "$funcs" "$@" && add_extralibs "$@"
f8d7b072
MR
759}
760
3f8040db
MR
761check_pkg_config(){
762 log check_pkg_config "$@"
763 pkg="$1"
764 headers="$2"
765 funcs="$3"
766 shift 3
767 $pkg_config --exists $pkg || return
768 pkg_cflags=$($pkg_config --cflags $pkg)
769 pkg_libs=$($pkg_config --libs $pkg)
770 check_func_headers "$headers" "$funcs" $pkg_cflags $pkg_libs "$@" &&
771 set_safe ${pkg}_cflags $pkg_cflags &&
772 set_safe ${pkg}_libs $pkg_libs
773}
774
dcd479c0 775check_exec(){
2270b4b2 776 check_ld "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
57bd82d4
MR
777}
778
7dfef245 779check_exec_crash(){
5e622c40 780 code=$(cat)
7dfef245
MR
781
782 # exit() is not async signal safe. _Exit (C99) and _exit (POSIX)
783 # are safe but may not be available everywhere. Thus we use
784 # raise(SIGTERM) instead. The check is run in a subshell so we
785 # can redirect the "Terminated" message from the shell. SIGBUS
786 # is not defined by standard C so it is used conditionally.
787
2270b4b2 788 (check_exec "$@") >> $logfile 2>&1 <<EOF
7dfef245
MR
789#include <signal.h>
790static void sighandler(int sig){
791 raise(SIGTERM);
792}
e5af4a11 793int main(void){
7dfef245
MR
794 signal(SIGILL, sighandler);
795 signal(SIGFPE, sighandler);
796 signal(SIGSEGV, sighandler);
797#ifdef SIGBUS
798 signal(SIGBUS, sighandler);
799#endif
800 { $code }
801}
802EOF
803}
804
72be9e73
DY
805check_type(){
806 log check_type "$@"
807 headers=$1
808 type=$2
809 shift 2
ae550ce9 810 disable_safe "$type"
72be9e73
DY
811 incs=""
812 for hdr in $headers; do
813 incs="$incs
814#include <$hdr>"
815 done
ae550ce9 816 check_cc "$@" <<EOF && enable_safe "$type"
72be9e73
DY
817$incs
818$type v;
819EOF
820}
821
14d36751
MR
822check_struct(){
823 log check_type "$@"
824 headers=$1
825 struct=$2
826 member=$3
827 shift 3
828 disable_safe "${struct}_${member}"
829 incs=""
830 for hdr in $headers; do
831 incs="$incs
832#include <$hdr>"
833 done
834 check_cc "$@" <<EOF && enable_safe "${struct}_${member}"
835$incs
836const void *p = &(($struct *)0)->$member;
837EOF
838}
839
57bd82d4
MR
840require(){
841 name="$1"
842 header="$2"
843 func="$3"
844 shift 3
845 check_lib $header $func "$@" || die "ERROR: $name not found"
dcd479c0
MR
846}
847
f8d7b072
MR
848require2(){
849 name="$1"
850 headers="$2"
851 func="$3"
852 shift 3
853 check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
854}
855
3f8040db
MR
856require_pkg_config(){
857 pkg="$1"
858 check_pkg_config "$@" || die "ERROR: $pkg not found"
859 add_cflags $(get_safe ${pkg}_cflags)
860 add_extralibs $(get_safe ${pkg}_libs)
861}
862
f0125de9
MR
863check_host_cc(){
864 log check_host_cc "$@"
865 cat > $TMPC
866 log_file $TMPC
867 check_cmd $host_cc $host_cflags "$@" -c -o $TMPO $TMPC
868}
869
870check_host_cflags(){
871 log check_host_cflags "$@"
872 check_host_cc "$@" <<EOF && append host_cflags "$@"
873int x;
874EOF
875}
876
c505dd31
MR
877apply(){
878 file=$1
879 shift
880 "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
881}
882
c34681df 883cp_if_changed(){
5e27ec28
MR
884 cmp -s "$1" "$2" && echo "$2 is unchanged" && return
885 mkdir -p "$(dirname $2)"
886 cp -f "$1" "$2"
c34681df
MR
887}
888
dcd61286
DB
889# CONFIG_LIST contains configurable options, while HAVE_LIST is for
890# system-dependent things.
891
4a0d6686
AJ
892COMPONENT_LIST="
893 bsfs
894 decoders
895 demuxers
896 encoders
3cde40aa 897 filters
5666fd73 898 hwaccels
c552605c 899 indevs
4a0d6686 900 muxers
c552605c 901 outdevs
4a0d6686
AJ
902 parsers
903 protocols
904"
905
055c61b8
DB
906PROGRAM_LIST="
907 avconv
908 avplay
909 avprobe
910 avserver
911 ffmpeg
912"
913
4a0d6686
AJ
914CONFIG_LIST="
915 $COMPONENT_LIST
055c61b8 916 $PROGRAM_LIST
e8ed9b7a 917 aandct
a5444fee 918 ac3dsp
5a0f7131
MR
919 avcodec
920 avdevice
f7679c54 921 avfilter
5a0f7131 922 avformat
c88f5d72 923 avisynth
f402916e 924 bzlib
7f3f5f46 925 dct
c73f65d9 926 doc
05aec7bb 927 dwt
92c6a099 928 dxva2
27a9466b 929 fastdiv
1848f7d9 930 fft
47941088 931 frei0r
bc8c1395 932 gnutls
4f034993 933 golomb
c88f5d72 934 gpl
d8d0d0b2 935 gray
88b97357 936 h264chroma
4693b031 937 h264dsp
4a384de5 938 h264pred
3abe5fbd 939 hardcoded_tables
3447f12d 940 huffman
e417d80d 941 libcdio
f7b8bffe 942 libdc1394
690bfceb 943 libdirac
2eed5a46 944 libfaac
a5b64584 945 libfreetype
c88f5d72 946 libgsm
6ebe07fb 947 libmp3lame
c88f5d72 948 libnut
0b175caa
DB
949 libopencore_amrnb
950 libopencore_amrwb
6ebf0bfc 951 libopencv
9a77d59a 952 libopenjpeg
0de9c41f 953 libpulse
0f943ce6 954 librtmp
f7cd9eed 955 libschroedinger
ae14f311 956 libspeex
150d2772 957 libtheora
d89e738a 958 libvo_aacenc
f502ff3f 959 libvo_amrwbenc
c88f5d72 960 libvorbis
8299a7f8 961 libvpx
1cc60c47 962 libx264
de295976 963 libxavs
1cc60c47 964 libxvid
f4d608e3 965 lpc
b781cc12 966 lsp
47a158cb 967 mdct
c88f5d72 968 memalign_hack
a8150374 969 mlib
c4f5c2d6 970 mpegaudiodsp
c88f5d72 971 network
3fe142e2 972 nonfree
a060866f 973 openssl
8a3c8627 974 pic
4a24ab64 975 postproc
68602540 976 rdft
44b70ce5 977 rtpdec
e90f5b5a 978 runtime_cpudetect
2e35e684 979 shared
4538729a 980 sinewin
bd2216e4 981 small
6b35d421 982 sram
2e35e684 983 static
5a0f7131 984 swscale
a9ddb5b1 985 swscale_alpha
8986fddc 986 thumb
17492d5e 987 vaapi
ac3dbb4d 988 vda
17492d5e 989 vdpau
9cad0e4e 990 version3
56a059ac 991 x11grab
c88f5d72 992 zlib
4a0d6686 993"
c88f5d72 994
8eee7025 995THREADS_LIST='
8eee7025
DB
996 pthreads
997 w32threads
998'
999
3f5b56e5
MR
1000ARCH_LIST='
1001 alpha
a2fc0f6a 1002 arm
fdcd782d
MR
1003 avr32
1004 avr32_ap
1005 avr32_uc
3f5b56e5
MR
1006 bfin
1007 ia64
1008 m68k
1009 mips
bae3abb0 1010 mips64
3f5b56e5 1011 parisc
79cb09b2 1012 ppc
34d11b87 1013 ppc64
3f5b56e5
MR
1014 s390
1015 sh4
1016 sparc
1017 sparc64
0844bae1 1018 tomi
3f5b56e5
MR
1019 x86
1020 x86_32
1021 x86_64
1022'
1023
1024ARCH_EXT_LIST='
1ac9331a 1025 altivec
3bf96eec 1026 amd3dnow
a1ef9f08 1027 amd3dnowext
1ac9331a 1028 armv5te
edab3048 1029 armv6
ab5cb084 1030 armv6t2
f55b299a 1031 armvfp
87f1355f 1032 avx
3f5b56e5
MR
1033 iwmmxt
1034 mmi
1035 mmx
d7f0920b 1036 mmx2
6b18d278 1037 neon
799fde37 1038 ppc4xx
1bb04d5a 1039 sse
9eeed841 1040 ssse3
93eb8e4d 1041 vfpv3
bd9d34a0 1042 vis
3f5b56e5
MR
1043'
1044
a3e02a8c
MR
1045HAVE_LIST_PUB='
1046 bigendian
d268eee9 1047 fast_unaligned
a3e02a8c
MR
1048'
1049
3f5b56e5
MR
1050HAVE_LIST="
1051 $ARCH_EXT_LIST
a3e02a8c 1052 $HAVE_LIST_PUB
3f5b56e5 1053 $THREADS_LIST
59782b82 1054 aligned_stack
35fd8122 1055 alsa_asoundlib_h
3f5b56e5 1056 altivec_h
c9fdab0d 1057 arpa_inet_h
6308729e 1058 asm_mod_y
dffb41b9 1059 attribute_may_alias
e7ea5e3d 1060 attribute_packed
ecf97f22 1061 closesocket
1ac9331a 1062 cmov
c88f5d72 1063 dcbzl
f8aa696f
DB
1064 dev_bktr_ioctl_bt848_h
1065 dev_bktr_ioctl_meteor_h
1066 dev_ic_bt8xx_h
f8aa696f 1067 dev_video_bktr_ioctl_bt848_h
3e0b1c9a 1068 dev_video_meteor_ioctl_meteor_h
18b67ae5 1069 dlfcn_h
c88f5d72 1070 dlopen
bc574408 1071 dos_paths
245626d0
DB
1072 ebp_available
1073 ebx_available
6b7c7703
VS
1074 exp2
1075 exp2f
c2a29455 1076 fast_64bit
669b5583 1077 fast_clz
7073e9fc 1078 fast_cmov
534a2231 1079 fcntl
9d99cc5a 1080 fork
84882df6 1081 getaddrinfo
da9e86f8 1082 gethrtime
fc5607f8 1083 GetProcessMemoryInfo
4e68cb8a 1084 GetProcessTimes
66be5b45 1085 getrusage
a49d3025 1086 gnu_as
2f0c136e 1087 ibm_asm
2e1913b1 1088 inet_aton
61d251db 1089 inline_asm
abfc8d05 1090 isatty
9f5ff83f 1091 ldbrx
0b4a1821
AS
1092 libdc1394_1
1093 libdc1394_2
a33cab3a 1094 llrint
07876e25 1095 llrintf
d96cd429
MR
1096 local_aligned_16
1097 local_aligned_8
a5b64584 1098 localtime_r
291fd18a 1099 log2
6b7c7703 1100 log2f
85dd97ad 1101 loongson
a33cab3a 1102 lrint
c88f5d72 1103 lrintf
e4673692 1104 lzo1x_999_compress
f8aa696f
DB
1105 machine_ioctl_bt848_h
1106 machine_ioctl_meteor_h
c88f5d72 1107 malloc_h
73f6d31e 1108 MapViewOfFile
c88f5d72 1109 memalign
6ffa87d3 1110 mkstemp
0328b9ea 1111 mmap
3e0b1c9a 1112 poll_h
1f91cdce 1113 posix_memalign
a33cab3a
MK
1114 round
1115 roundf
c88f5d72
MR
1116 sdl
1117 sdl_video_size
b507ebd1 1118 setmode
3e0b1c9a 1119 setrlimit
15d59d2c 1120 sndio_h
72be9e73 1121 socklen_t
deb29777 1122 soundcard_h
87958234 1123 strerror_r
6379900c 1124 strptime
47941088 1125 strtok_r
c0018613 1126 struct_addrinfo
b4d68544 1127 struct_ipv6_mreq
3e0b1c9a 1128 struct_rusage_ru_maxrss
b4d68544 1129 struct_sockaddr_in6
3b2372bf 1130 struct_sockaddr_sa_len
33a4dbdd 1131 struct_sockaddr_storage
b462d132 1132 symver
b462d132 1133 symver_asm_label
3e0b1c9a 1134 symver_gnu_asm
b58412f1 1135 sys_mman_h
b091aa44 1136 sys_resource_h
81644c2e 1137 sys_select_h
deb29777 1138 sys_soundcard_h
1b6e8b73 1139 sys_videoio_h
b265431e 1140 threads
23d3931a 1141 trunc
7b04b8a0 1142 truncf
ce742de2 1143 vfp_args
7c5bfe7a 1144 VirtualAlloc
6ff3f3e7 1145 winsock2_h
cc078b5d 1146 xform_asm
6f74fb03 1147 xmm_clobbers
304d586d 1148 yasm
0cb78cef 1149"
44161118 1150
b6bb00b0
MR
1151# options emitted with CONFIG_ prefix but not available on command line
1152CONFIG_EXTRA="
dc4f5a1c 1153 avutil
9cad0e4e
DB
1154 gplv3
1155 lgplv3
b6bb00b0
MR
1156"
1157
520cc7f1 1158CMDLINE_SELECT="
3f5b56e5 1159 $ARCH_EXT_LIST
520cc7f1 1160 $CONFIG_LIST
8eee7025 1161 $THREADS_LIST
c8a4ae00 1162 asm
db6107b6 1163 cross_compile
520cc7f1
MR
1164 debug
1165 extra_warnings
8c6afa4d 1166 logging
d2bbb2f7 1167 optimizations
9baec618 1168 symver
7595a5e4 1169 yasm
520cc7f1 1170"
426be5dc
DB
1171
1172PATHS_LIST='
d156bede 1173 bindir
14a8acf1 1174 datadir
26759c44
MR
1175 incdir
1176 libdir
26759c44
MR
1177 mandir
1178 prefix
1179 shlibdir
426be5dc
DB
1180'
1181
1182CMDLINE_SET="
1183 $PATHS_LIST
121d78d0 1184 ar
426be5dc 1185 arch
313c46a6 1186 as
426be5dc
DB
1187 build_suffix
1188 cc
1189 cpu
1190 cross_prefix
50567afa 1191 dep_cc
ac63af34 1192 extra_version
9da6609f
MR
1193 host_cc
1194 host_cflags
1195 host_ldflags
1196 host_libs
82bb3329 1197 host_os
684b28e0 1198 ld
426be5dc 1199 logfile
4ae40685 1200 malloc_prefix
89641463 1201 nm
9cd7b854 1202 optflags
3f8040db 1203 pkg_config
2fad0977 1204 samples
c5200f17
MR
1205 sysinclude
1206 sysroot
a7ada2ba 1207 target_exec
26759c44 1208 target_os
a7ada2ba 1209 target_path
426be5dc 1210"
520cc7f1 1211
89f2932b
MR
1212CMDLINE_APPEND="
1213 extra_cflags
1214"
1215
912f3148
DB
1216# code dependency declarations
1217
9eeed841 1218# architecture extensions
808fa33c 1219
a2fc0f6a
MR
1220armv5te_deps="arm"
1221armv6_deps="arm"
ab5cb084 1222armv6t2_deps="arm"
a2fc0f6a
MR
1223armvfp_deps="arm"
1224iwmmxt_deps="arm"
808fa33c 1225neon_deps="arm"
93eb8e4d 1226vfpv3_deps="armvfp"
808fa33c 1227
e241ba14 1228mmi_deps="mips"
808fa33c
MR
1229
1230altivec_deps="ppc"
1231ppc4xx_deps="ppc"
1232
1233vis_deps="sparc"
1234
7f8c3d1f 1235x86_64_suggest="cmov fast_cmov"
808fa33c
MR
1236amd3dnow_deps="mmx"
1237amd3dnowext_deps="amd3dnow"
9eeed841 1238mmx_deps="x86"
75aa95a6 1239mmx2_deps="mmx"
75aa95a6
DB
1240sse_deps="mmx"
1241ssse3_deps="sse"
87f1355f 1242avx_deps="ssse3"
9eeed841 1243
59782b82 1244aligned_stack_if_any="ppc x86"
e939cedd 1245fast_64bit_if_any="alpha ia64 mips64 parisc64 ppc64 sparc64 x86_64"
669b5583 1246fast_clz_if_any="alpha armv5te avr32 mips ppc x86"
e939cedd 1247fast_unaligned_if_any="armv6 ppc x86"
669b5583 1248
6fec122a 1249inline_asm_deps="!tms470"
3e0b1c9a 1250need_memalign="altivec neon sse"
89e053f8 1251
b462d132
MR
1252symver_if_any="symver_asm_label symver_gnu_asm"
1253
26fbcc85 1254# subsystems
dc609252 1255dct_select="rdft"
26fbcc85
MR
1256mdct_select="fft"
1257rdft_select="fft"
c4f5c2d6 1258mpegaudiodsp_select="dct"
26fbcc85 1259
5666fd73 1260# decoders / encoders / hardware accelerators
cfc2a0cf 1261aac_decoder_select="mdct sinewin"
4538729a 1262aac_encoder_select="mdct sinewin"
136e19e1 1263aac_latm_decoder_select="aac_decoder aac_latm_parser"
6d9f52b2 1264ac3_decoder_select="mdct ac3dsp ac3_parser"
a5444fee 1265ac3_encoder_select="mdct ac3dsp"
3d269059 1266ac3_fixed_encoder_select="mdct ac3dsp"
f4d608e3 1267alac_encoder_select="lpc"
b781cc12 1268amrnb_decoder_select="lsp"
2b2a597e 1269amrwb_decoder_select="lsp"
4538729a 1270atrac1_decoder_select="mdct sinewin"
26fbcc85 1271atrac3_decoder_select="mdct"
a33657ce
DB
1272binkaudio_dct_decoder_select="mdct rdft dct sinewin"
1273binkaudio_rdft_decoder_select="mdct rdft sinewin"
4f034993 1274cavs_decoder_select="golomb"
4538729a 1275cook_decoder_select="mdct sinewin"
2eef7c62 1276cscd_decoder_suggest="zlib"
26fbcc85 1277dca_decoder_select="mdct"
e8ed9b7a 1278dnxhd_encoder_select="aandct"
2eef7c62 1279dxa_decoder_select="zlib"
baf91bb9 1280eac3_decoder_select="ac3_decoder"
aa47c35d 1281eac3_encoder_select="mdct ac3dsp"
84c04e25 1282eamad_decoder_select="aandct"
e8ed9b7a 1283eatgq_decoder_select="aandct"
d52b39c7 1284eatqi_decoder_select="aandct"
4f034993
MR
1285ffv1_decoder_select="golomb"
1286flac_decoder_select="golomb"
f4d608e3 1287flac_encoder_select="golomb lpc"
2eef7c62
AJ
1288flashsv_decoder_select="zlib"
1289flashsv_encoder_select="zlib"
c2d23309 1290flashsv2_decoder_select="zlib"
4414137e 1291flv_decoder_select="h263_decoder"
4d4b4bd1 1292flv_encoder_select="h263_encoder"
3447f12d 1293fraps_decoder_select="huffman"
e8ed9b7a 1294h261_encoder_select="aandct"
7f647ae0 1295h263_decoder_select="h263_parser"
e8ed9b7a 1296h263_encoder_select="aandct"
95a61cfc 1297h263_vaapi_hwaccel_select="vaapi h263_decoder"
4414137e 1298h263i_decoder_select="h263_decoder"
fe629c2d 1299h263p_encoder_select="h263_encoder"
88b97357 1300h264_decoder_select="golomb h264chroma h264dsp h264pred"
92c6a099
LA
1301h264_dxva2_hwaccel_deps="dxva2api_h"
1302h264_dxva2_hwaccel_select="dxva2 h264_decoder"
76718f3f 1303h264_vaapi_hwaccel_select="vaapi h264_decoder"
ac3dbb4d 1304h264_vda_hwaccel_select="vda h264_decoder"
95a61cfc 1305h264_vdpau_decoder_select="vdpau h264_decoder"
56c8227d 1306imc_decoder_select="fft mdct sinewin"
4f034993
MR
1307jpegls_decoder_select="golomb"
1308jpegls_encoder_select="golomb"
e8ed9b7a 1309ljpeg_encoder_select="aandct"
4f034993 1310loco_decoder_select="golomb"
e8ed9b7a 1311mjpeg_encoder_select="aandct"
2cca233b 1312mlp_decoder_select="mlp_parser"
c4f5c2d6 1313mp1_decoder_select="mpegaudiodsp"
c4f5c2d6 1314mp1float_decoder_select="mpegaudiodsp"
3e0b1c9a 1315mp2_decoder_select="mpegaudiodsp"
c4f5c2d6 1316mp2float_decoder_select="mpegaudiodsp"
3e0b1c9a
DB
1317mp3_decoder_select="mpegaudiodsp"
1318mp3adu_decoder_select="mpegaudiodsp"
c4f5c2d6
MR
1319mp3adufloat_decoder_select="mpegaudiodsp"
1320mp3float_decoder_select="mpegaudiodsp"
3e0b1c9a 1321mp3on4_decoder_select="mpegaudiodsp"
c4f5c2d6 1322mp3on4float_decoder_select="mpegaudiodsp"
95a61cfc 1323mpeg_vdpau_decoder_select="vdpau mpegvideo_decoder"
3e0b1c9a
DB
1324mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h"
1325mpeg_xvmc_decoder_select="mpegvideo_decoder"
95a61cfc 1326mpeg1_vdpau_decoder_select="vdpau mpeg1video_decoder"
3e0b1c9a 1327mpeg1video_encoder_select="aandct"
164aab02
LA
1328mpeg2_dxva2_hwaccel_deps="dxva2api_h"
1329mpeg2_dxva2_hwaccel_select="dxva2 mpeg2video_decoder"
95a61cfc 1330mpeg2_vaapi_hwaccel_select="vaapi mpeg2video_decoder"
3e0b1c9a
DB
1331mpeg2video_encoder_select="aandct"
1332mpeg4_decoder_select="h263_decoder mpeg4video_parser"
1333mpeg4_encoder_select="h263_encoder"
95a61cfc 1334mpeg4_vaapi_hwaccel_select="vaapi mpeg4_decoder"
70e0c871 1335mpeg4_vdpau_decoder_select="vdpau mpeg4_decoder"
4414137e 1336msmpeg4v1_decoder_select="h263_decoder"
4e169d89 1337msmpeg4v1_encoder_select="h263_encoder"
4414137e 1338msmpeg4v2_decoder_select="h263_decoder"
4e169d89 1339msmpeg4v2_encoder_select="h263_encoder"
4414137e 1340msmpeg4v3_decoder_select="h263_decoder"
4e169d89 1341msmpeg4v3_encoder_select="h263_encoder"
4538729a
MR
1342nellymoser_decoder_select="mdct sinewin"
1343nellymoser_encoder_select="mdct sinewin"
2eef7c62
AJ
1344png_decoder_select="zlib"
1345png_encoder_select="zlib"
b781cc12 1346qcelp_decoder_select="lsp"
c4f5c2d6 1347qdm2_decoder_select="mdct rdft mpegaudiodsp"
31ed3f1f 1348ra_144_encoder_select="lpc"
a8beb22f 1349rv10_decoder_select="h263_decoder"
b2bf38b4 1350rv10_encoder_select="h263_encoder"
a8beb22f 1351rv20_decoder_select="h263_decoder"
b2bf38b4 1352rv20_encoder_select="h263_encoder"
88b97357
DB
1353rv30_decoder_select="golomb h264chroma h264pred"
1354rv40_decoder_select="golomb h264chroma h264pred"
4f034993 1355shorten_decoder_select="golomb"
b781cc12 1356sipr_decoder_select="lsp"
05aec7bb
MR
1357snow_decoder_select="dwt"
1358snow_encoder_select="aandct dwt"
19ecfb8a 1359svq1_encoder_select="aandct"
88b97357 1360svq3_decoder_select="golomb h264chroma h264dsp h264pred"
bee2eac5 1361svq3_decoder_suggest="zlib"
4eef77c1 1362theora_decoder_select="vp3_decoder"
2eef7c62
AJ
1363tiff_decoder_suggest="zlib"
1364tiff_encoder_suggest="zlib"
aec09a00 1365truehd_decoder_select="mlp_decoder"
2eef7c62 1366tscc_decoder_select="zlib"
4538729a 1367twinvq_decoder_select="mdct lsp sinewin"
88b97357 1368vc1_decoder_select="h263_decoder h264chroma"
9104cd51 1369vc1_dxva2_hwaccel_deps="dxva2api_h DXVA_PictureParameters_wDecodedPictureIndex"
f0f86627 1370vc1_dxva2_hwaccel_select="dxva2 vc1_decoder"
95a61cfc 1371vc1_vaapi_hwaccel_select="vaapi vc1_decoder"
95a61cfc 1372vc1_vdpau_decoder_select="vdpau vc1_decoder"
45ecda85 1373vc1image_decoder_select="vc1_decoder"
26fbcc85
MR
1374vorbis_decoder_select="mdct"
1375vorbis_encoder_select="mdct"
3447f12d 1376vp6_decoder_select="huffman"
e82dc4c9
DB
1377vp6a_decoder_select="vp6_decoder"
1378vp6f_decoder_select="vp6_decoder"
4a384de5 1379vp8_decoder_select="h264pred"
4538729a
MR
1380wmapro_decoder_select="mdct sinewin"
1381wmav1_decoder_select="mdct sinewin"
1382wmav1_encoder_select="mdct sinewin"
1383wmav2_decoder_select="mdct sinewin"
1384wmav2_encoder_select="mdct sinewin"
1385wmavoice_decoder_select="lsp rdft dct mdct sinewin"
f95bfab0 1386wmv1_decoder_select="h263_decoder"
665507aa 1387wmv1_encoder_select="h263_encoder"
f95bfab0 1388wmv2_decoder_select="h263_decoder"
1746e2a9 1389wmv2_encoder_select="h263_encoder"
015f8ee0 1390wmv3_decoder_select="vc1_decoder"
f0f86627 1391wmv3_dxva2_hwaccel_select="vc1_dxva2_hwaccel"
015f8ee0
DB
1392wmv3_vaapi_hwaccel_select="vc1_vaapi_hwaccel"
1393wmv3_vdpau_decoder_select="vc1_vdpau_decoder"
45ecda85 1394wmv3image_decoder_select="wmv3_decoder"
2eef7c62
AJ
1395zlib_decoder_select="zlib"
1396zlib_encoder_select="zlib"
1397zmbv_decoder_select="zlib"
1398zmbv_encoder_select="zlib"
30fd06be 1399
0afab17e 1400vaapi_deps="va_va_h"
ac3dbb4d 1401vda_deps="VideoDecodeAcceleration_VDADecoder_h pthreads"
c89c96e9
MR
1402vdpau_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1403
28b80940 1404# parsers
88b97357 1405h264_parser_select="golomb h264chroma h264dsp h264pred"
28b80940 1406
912f3148 1407# external libraries
1b71f045 1408libdirac_decoder_deps="libdirac !libschroedinger"
690bfceb 1409libdirac_encoder_deps="libdirac"
c9171a83 1410libfaac_encoder_deps="libfaac"
299c77d5
MR
1411libgsm_decoder_deps="libgsm"
1412libgsm_encoder_deps="libgsm"
8ffed8d8
MR
1413libgsm_ms_decoder_deps="libgsm"
1414libgsm_ms_encoder_deps="libgsm"
1cc60c47 1415libmp3lame_encoder_deps="libmp3lame"
0b175caa
DB
1416libopencore_amrnb_decoder_deps="libopencore_amrnb"
1417libopencore_amrnb_encoder_deps="libopencore_amrnb"
1418libopencore_amrwb_decoder_deps="libopencore_amrwb"
9a77d59a 1419libopenjpeg_decoder_deps="libopenjpeg"
f7cd9eed
AS
1420libschroedinger_decoder_deps="libschroedinger"
1421libschroedinger_encoder_deps="libschroedinger"
ae14f311 1422libspeex_decoder_deps="libspeex"
b606a017 1423libspeex_encoder_deps="libspeex"
150d2772 1424libtheora_encoder_deps="libtheora"
d89e738a 1425libvo_aacenc_encoder_deps="libvo_aacenc"
f502ff3f 1426libvo_amrwbenc_encoder_deps="libvo_amrwbenc"
b0caf888 1427libvorbis_encoder_deps="libvorbis"
8299a7f8 1428libvpx_decoder_deps="libvpx"
ee0e9146 1429libvpx_encoder_deps="libvpx"
1cc60c47 1430libx264_encoder_deps="libx264"
de295976 1431libxavs_encoder_deps="libxavs"
1cc60c47 1432libxvid_encoder_deps="libxvid"
30fd06be 1433
912f3148 1434# demuxers / muxers
c2dd0e9e 1435ac3_demuxer_select="ac3_parser"
647c2356 1436asf_stream_muxer_select="asf_muxer"
4e622dea 1437avisynth_demuxer_deps="avisynth"
c2dd0e9e 1438dirac_demuxer_select="dirac_parser"
5b423887 1439eac3_demuxer_select="ac3_parser"
c2dd0e9e 1440flac_demuxer_select="flac_parser"
647c2356 1441ipod_muxer_select="mov_muxer"
4e622dea
SS
1442libnut_demuxer_deps="libnut"
1443libnut_muxer_deps="libnut"
647c2356 1444matroska_audio_muxer_select="matroska_muxer"
4e622dea
SS
1445matroska_demuxer_suggest="zlib bzlib"
1446mov_demuxer_suggest="zlib"
c2dd0e9e 1447mp3_demuxer_select="mpegaudio_parser"
647c2356
DB
1448mp4_muxer_select="mov_muxer"
1449mpegtsraw_demuxer_select="mpegts_demuxer"
1450mxf_d10_muxer_select="mxf_muxer"
24ca518b 1451ogg_demuxer_select="golomb"
647c2356 1452psp_muxer_select="mov_muxer"
44594cc7 1453rtp_demuxer_select="sdp_demuxer"
44b70ce5
MS
1454rtpdec_select="asf_demuxer rm_demuxer rtp_protocol mpegts_demuxer mov_demuxer"
1455rtsp_demuxer_select="http_protocol rtpdec"
1456rtsp_muxer_select="rtp_muxer http_protocol rtp_protocol"
01c8d258 1457sap_demuxer_select="sdp_demuxer"
2aab70c4 1458sap_muxer_select="rtp_muxer rtp_protocol"
44b70ce5 1459sdp_demuxer_select="rtpdec"
f1e94694 1460spdif_muxer_select="aac_parser"
647c2356
DB
1461tg2_muxer_select="mov_muxer"
1462tgp_muxer_select="mov_muxer"
6bdaa5f4 1463w64_demuxer_deps="wav_demuxer"
4e622dea
SS
1464
1465# indevs / outdevs
38e54a75 1466alsa_indev_deps="alsa_asoundlib_h snd_pcm_htimestamp"
38e54a75 1467alsa_outdev_deps="alsa_asoundlib_h"
38e54a75 1468bktr_indev_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
38e54a75 1469dv1394_indev_deps="dv1394 dv_demuxer"
c6f95144 1470fbdev_indev_deps="linux_fb_h"
38e54a75 1471jack_indev_deps="jack_jack_h"
e417d80d 1472libcdio_indev_deps="libcdio"
38e54a75 1473libdc1394_indev_deps="libdc1394"
38e54a75
SS
1474oss_indev_deps_any="soundcard_h sys_soundcard_h"
1475oss_outdev_deps_any="soundcard_h sys_soundcard_h"
0de9c41f 1476pulse_indev_deps="libpulse"
15d59d2c
B
1477sndio_indev_deps="sndio_h"
1478sndio_outdev_deps="sndio_h"
38e54a75
SS
1479v4l_indev_deps="linux_videodev_h"
1480v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h"
ec1ee802 1481vfwcap_indev_deps="capCreateCaptureWindow vfwcap_defines"
a1b3c5a3 1482vfwcap_indev_extralibs="-lavicap32"
38e54a75 1483x11_grab_device_indev_deps="x11grab XShmCreateImage"
781c1aa6 1484x11_grab_device_indev_extralibs="-lX11 -lXext -lXfixes"
30fd06be 1485
912f3148 1486# protocols
3fff6382 1487gopher_protocol_deps="network"
c40e1757
JS
1488httpproxy_protocol_deps="network"
1489httpproxy_protocol_select="tcp_protocol"
c08fb000 1490http_protocol_deps="network"
279a0c97 1491http_protocol_select="tcp_protocol"
183baead 1492https_protocol_select="tls_protocol"
c60a2d70 1493mmsh_protocol_select="http_protocol"
b4cf3f6c 1494mmst_protocol_deps="network"
deeb7012
MS
1495rtmp_protocol_select="tcp_protocol"
1496rtp_protocol_select="udp_protocol"
c08fb000 1497tcp_protocol_deps="network"
558d192d
MS
1498tls_protocol_deps_any="openssl gnutls"
1499tls_protocol_select="tcp_protocol"
c08fb000
AB
1500udp_protocol_deps="network"
1501
6ebf0bfc 1502# filters
13fabd7a 1503blackframe_filter_deps="gpl"
ce6b6ef6 1504boxblur_filter_deps="gpl"
68b79bfc 1505cropdetect_filter_deps="gpl"
b157be1f 1506delogo_filter_deps="gpl"
a5b64584 1507drawtext_filter_deps="libfreetype"
2e5ff4d0 1508frei0r_filter_deps="frei0r dlopen strtok_r"
a42bb9d6 1509frei0r_src_filter_deps="frei0r dlopen strtok_r"
a4dc7aa5 1510hqdn3d_filter_deps="gpl"
cf69ad35 1511ocv_filter_deps="libopencv"
92fe2587 1512scale_filter_deps="swscale"
acbac567 1513yadif_filter_deps="gpl"
6ebf0bfc 1514
5a0f7131
MR
1515# libraries
1516avdevice_deps="avcodec avformat"
1517avformat_deps="avcodec"
ced9556b 1518postproc_deps="gpl"
f7679c54 1519
912f3148 1520# programs
d2ba1fb5
DB
1521avconv_deps="avcodec avformat swscale"
1522avconv_select="buffer_filter"
266463da
AK
1523avplay_deps="avcodec avformat swscale sdl"
1524avplay_select="rdft"
9e12f0bf 1525avprobe_deps="avcodec avformat"
4d58e4cb
AK
1526avserver_deps="avformat ffm_muxer fork rtp_protocol rtsp_demuxer"
1527avserver_extralibs='$ldl'
3e0b1c9a
DB
1528ffmpeg_deps="avcodec avformat swscale"
1529ffmpeg_select="buffer_filter"
a2830dca 1530
c73f65d9 1531doc_deps="texi2html"
912f3148 1532
57442411
MR
1533# tests
1534
1535test_deps(){
1536 suf1=$1
1537 suf2=$2
1538 shift 2
1539 for v; do
1540 dep=${v%=*}
1541 tests=${v#*=}
1542 for name in ${tests}; do
908f12f3 1543 append ${name}_test_deps ${dep}$suf1 ${dep}$suf2
57442411
MR
1544 done
1545 done
1546}
1547
908f12f3
MR
1548mxf_d10_test_deps="avfilter"
1549seek_lavf_mxf_d10_test_deps="mxf_d10_test"
1550
57442411 1551test_deps _encoder _decoder \
57442411
MR
1552 adpcm_ima_qt \
1553 adpcm_ima_wav \
1554 adpcm_ms \
1555 adpcm_swf \
1556 adpcm_yamaha=adpcm_yam \
1557 alac \
1558 asv1 \
1559 asv2 \
1560 bmp \
a7638957 1561 dnxhd="dnxhd_1080i dnxhd_720p dnxhd_720p_rd" \
3fe5fc93 1562 dvvideo="dv dv_411 dv50" \
57442411
MR
1563 ffv1 \
1564 flac \
1565 flashsv \
1566 flv \
3e0b1c9a 1567 adpcm_g726=g726 \
57442411
MR
1568 gif \
1569 h261 \
1570 h263="h263 h263p" \
1571 huffyuv \
1572 jpegls \
1573 mjpeg="jpg mjpeg ljpeg" \
1574 mp2 \
1575 mpeg1video="mpeg mpeg1b" \
3fe5fc93
MR
1576 mpeg2video="mpeg2 mpeg2_422 mpeg2_idct_int mpeg2_ilace mpeg2_ivlc_qprd" \
1577 mpeg2video="mpeg2thread mpeg2thread_ilace" \
1578 mpeg4="mpeg4 mpeg4_adap mpeg4_qpel mpeg4_qprd mpeg4adv mpeg4nr" \
1579 mpeg4="mpeg4thread error rc" \
c0b16605 1580 msmpeg4v3=msmpeg4 \
57442411
MR
1581 msmpeg4v2 \
1582 pbm=pbmpipe \
1583 pcx \
1584 pgm="pgm pgmpipe" \
f0f54c29 1585 png \
57442411
MR
1586 ppm="ppm ppmpipe" \
1587 rawvideo="rgb yuv" \
1588 roq \
1589 rv10 \
1590 rv20 \
1591 sgi \
1592 snow="snow snowll" \
1593 svq1 \
1594 targa=tga \
1595 tiff \
1596 wmav1 \
1597 wmav2 \
1598 wmv1 \
1599 wmv2 \
1600
1601test_deps _muxer _demuxer \
1602 aiff \
1603 pcm_alaw=alaw \
1604 asf \
1605 au \
1606 avi \
1607 dv=dv_fmt \
1608 ffm \
1609 flv=flv_fmt \
1610 gxf \
1611 matroska=mkv \
1612 mmf \
1613 mov \
1614 pcm_mulaw=mulaw \
0218808d 1615 mxf="mxf mxf_d10" \
57442411
MR
1616 nut \
1617 ogg \
1618 rawvideo=pixfmt \
1619 rm \
1620 swf \
1621 mpegts=ts \
1622 voc \
1623 wav \
1624 yuv4mpegpipe=yuv4mpeg \
1625
6fd96d1a 1626ac3_fixed_test_deps="ac3_fixed_encoder ac3_decoder rm_muxer rm_demuxer"
57442411 1627mpg_test_deps="mpeg1system_muxer mpegps_demuxer"
9c261f83 1628
de6d9b64 1629# default parameters
8a608357 1630
19bd477d 1631logfile="config.log"
8a608357
MR
1632
1633# installation paths
c9d19248
MR
1634prefix_default="/usr/local"
1635bindir_default='${prefix}/bin'
6291d7e4 1636datadir_default='${prefix}/share/avconv'
c9d19248
MR
1637incdir_default='${prefix}/include'
1638libdir_default='${prefix}/lib'
1639mandir_default='${prefix}/share/man'
1640shlibdir_default="$libdir_default"
8a608357
MR
1641
1642# toolchain
121d78d0 1643ar_default="ar"
13c7df3d 1644cc_default="gcc"
a3d7c197 1645cc_version=\"unknown\"
9da6609f 1646host_cc_default="gcc"
11e6d03a 1647ln_s="ln -sf"
89641463 1648nm_default="nm"
11e6d03a 1649objformat="elf"
3f8040db 1650pkg_config_default=pkg-config
be7109c1 1651ranlib="ranlib"
11e6d03a 1652yasmexe="yasm"
8a608357 1653
8182dc34 1654nm_opts='-g'
3e0b1c9a 1655nogas=":"
8182dc34 1656
8a608357 1657# machine
8d4c00ed 1658arch_default=$(uname -m)
38d0a8aa 1659cpu="generic"
8a608357 1660
8a608357 1661# OS
8d4c00ed
MR
1662target_os_default=$(tolower $(uname -s))
1663host_os=$target_os_default
8a608357 1664
8a608357 1665# configurable options
055c61b8
DB
1666enable $PROGRAM_LIST
1667
5a0f7131
MR
1668enable avcodec
1669enable avdevice
cccc039f 1670enable avfilter
5a0f7131 1671enable avformat
dc4f5a1c 1672enable avutil
3e0b1c9a
DB
1673enable postproc
1674enable swscale
1675
3e0b1c9a
DB
1676enable asm
1677enable debug
1678enable doc
1679enable fastdiv
497237c7 1680enable network
8400d6b8 1681enable optimizations
530dc538 1682enable static
a9ddb5b1 1683enable swscale_alpha
8a608357 1684
8a608357 1685# build settings
9987769a 1686SHFLAGS='-shared -Wl,-soname,$$(@F)'
4d58e4cb 1687AVSERVERLDFLAGS=-Wl,-E
f3ec2d46
SG
1688LIBPREF="lib"
1689LIBSUF=".a"
c5f14466
RP
1690FULLNAME='$(NAME)$(BUILDSUF)'
1691LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
f3ec2d46
SG
1692SLIBPREF="lib"
1693SLIBSUF=".so"
c5f14466 1694SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
b29bddab
DB
1695SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
1696SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
6cfac0e9 1697LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
2f138f0b
MR
1698SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'
1699SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR) $(SLIBNAME)'
ef0bc4c9 1700
bc877faf 1701AS_O='-o $@'
7e6c86e6
MR
1702CC_O='-o $@'
1703
0a6db2a2 1704host_cflags='-D_ISOC99_SOURCE -O3 -g'
9da6609f
MR
1705host_libs='-lm'
1706
9b861379 1707target_path='$(CURDIR)'
a7ada2ba 1708
a158446b
MR
1709# since the object filename is not given with the -MM flag, the compiler
1710# is only able to print the basename, and we must add the path ourselves
c1c3933a 1711DEPEND_CMD='$(DEPCC) $(DEPFLAGS) $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o," > $(@:.o=.d)'
d8059267 1712DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -MM'
315c741d 1713
c597172e 1714# find source path
24524f36 1715if test -f configure; then
f038cf3c 1716 source_path=.
c597172e 1717else
8477f2de 1718 source_path=$(cd $(dirname "$0"); pwd)
c597172e 1719 echo "$source_path" | grep -q '[[:blank:]]' &&
7483e694 1720 die "Out of tree builds are impossible with whitespace in source path."
337cee68
MC
1721 test -e "$source_path/config.h" &&
1722 die "Out of tree builds are impossible with config.h in source dir."
c597172e
MR
1723fi
1724
13cbe2c0 1725for v in "$@"; do
b04251c5
MR
1726 r=${v#*=}
1727 l=${v%"$r"}
1728 r=$(sh_quote "$r")
29ba0911 1729 LIBAV_CONFIGURATION="${LIBAV_CONFIGURATION# } ${l}${r}"
13cbe2c0 1730done
c597172e 1731
73ef8980
MR
1732find_things(){
1733 thing=$1
1734 pattern=$2
1735 file=$source_path/$3
932ccf39 1736 sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
73ef8980
MR
1737}
1738
1739ENCODER_LIST=$(find_things encoder ENC libavcodec/allcodecs.c)
1740DECODER_LIST=$(find_things decoder DEC libavcodec/allcodecs.c)
5666fd73 1741HWACCEL_LIST=$(find_things hwaccel HWACCEL libavcodec/allcodecs.c)
73ef8980
MR
1742PARSER_LIST=$(find_things parser PARSER libavcodec/allcodecs.c)
1743BSF_LIST=$(find_things bsf BSF libavcodec/allcodecs.c)
1744MUXER_LIST=$(find_things muxer _MUX libavformat/allformats.c)
1745DEMUXER_LIST=$(find_things demuxer DEMUX libavformat/allformats.c)
38e54a75
SS
1746OUTDEV_LIST=$(find_things outdev OUTDEV libavdevice/alldevices.c)
1747INDEV_LIST=$(find_things indev _IN libavdevice/alldevices.c)
73ef8980 1748PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
81124ba0 1749FILTER_LIST=$(find_things filter FILTER libavfilter/allfilters.c)
c597172e 1750
54e75be4
DB
1751ALL_COMPONENTS="
1752 $BSF_LIST
1753 $DECODER_LIST
1754 $DEMUXER_LIST
1755 $ENCODER_LIST
1756 $FILTER_LIST
1757 $HWACCEL_LIST
1758 $INDEV_LIST
1759 $MUXER_LIST
1760 $OUTDEV_LIST
1761 $PARSER_LIST
1762 $PROTOCOL_LIST
1763"
1764
57442411 1765find_tests(){
b9d5f1b7 1766 map "echo ${2}\${v}_test" $(ls "$source_path"/tests/ref/$1 | grep -v '[^-a-z0-9_]')
57442411
MR
1767}
1768
1769ACODEC_TESTS=$(find_tests acodec)
1770VCODEC_TESTS=$(find_tests vsynth1)
1771LAVF_TESTS=$(find_tests lavf)
48c28162 1772LAVFI_TESTS=$(find_tests lavfi)
b9d5f1b7 1773SEEK_TESTS=$(find_tests seek seek_)
57442411 1774
54e75be4
DB
1775ALL_TESTS="$ACODEC_TESTS $VCODEC_TESTS $LAVF_TESTS $LAVFI_TESTS $SEEK_TESTS"
1776
40fe5019
MR
1777pcm_test_deps=$(map 'echo ${v%_*}_decoder $v' $(filter pcm_* $ENCODER_LIST))
1778
8469ae22
MR
1779for n in $COMPONENT_LIST; do
1780 v=$(toupper ${n%s})_LIST
1781 eval enable \$$v
1782 eval ${n}_if_any="\$$v"
1783done
1784
54e75be4 1785enable $ARCH_EXT_LIST $ALL_TESTS
c597172e
MR
1786
1787die_unknown(){
1788 echo "Unknown option \"$1\"."
1789 echo "See $0 --help for available options."
1790 exit 1
1791}
1792
794f8e97 1793show_list() {
bf0c4afa
RP
1794 suffix=_$1
1795 shift
2b444ea7 1796 echo $* | sed s/$suffix//g | tr ' ' '\n' | sort | pr -3 -t
794f8e97
PI
1797 exit 0
1798}
1799
c597172e 1800for opt do
7483e694
DB
1801 optval="${opt#*=}"
1802 case "$opt" in
0f010b2f 1803 --extra-ldflags=*) add_ldflags $optval
7483e694 1804 ;;
0f010b2f 1805 --extra-libs=*) add_extralibs $optval
7483e694 1806 ;;
8fb1cb58 1807 --disable-devices) disable $INDEV_LIST $OUTDEV_LIST
9aa8ed9d 1808 ;;
40bcf4c7
BL
1809 --enable-debug=*) debuglevel="$optval"
1810 ;;
36e2dea0 1811 --disable-everything)
1b15dc3c 1812 map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
36e2dea0 1813 ;;
7483e694 1814 --enable-*=*|--disable-*=*)
8b93ddc3 1815 eval $(echo "${opt%%=*}" | sed 's/--/action=/;s/-/ thing=/')
be8f2501
MR
1816 is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt"
1817 eval list=\$$(toupper $thing)_LIST
8b93ddc3
MR
1818 name=$(echo "${optval}" | sed "s/,/_${thing}|/g")_${thing}
1819 $action $(filter "$name" $list)
7483e694
DB
1820 ;;
1821 --enable-?*|--disable-?*)
5e622c40 1822 eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
e3773a55 1823 if is_in $option $COMPONENT_LIST; then
fed5d54b 1824 test $action = disable && action=unset
e3773a55
MR
1825 eval $action \$$(toupper ${option%s})_LIST
1826 elif is_in $option $CMDLINE_SELECT; then
1827 $action $option
1828 else
1829 die_unknown $opt
1830 fi
7483e694
DB
1831 ;;
1832 --list-*)
1833 NAME="${opt#--list-}"
1834 is_in $NAME $COMPONENT_LIST || die_unknown $opt
1835 NAME=${NAME%s}
1836 eval show_list $NAME \$$(toupper $NAME)_LIST
1837 ;;
1838 --help|-h) show_help
1839 ;;
1840 *)
884a36a7 1841 optname="${opt%%=*}"
26759c44
MR
1842 optname="${optname#--}"
1843 optname=$(echo "$optname" | sed 's/-/_/g')
89f2932b
MR
1844 if is_in $optname $CMDLINE_SET; then
1845 eval $optname='$optval'
1846 elif is_in $optname $CMDLINE_APPEND; then
1847 append $optname "$optval"
1848 else
1849 die_unknown $opt
1850 fi
7483e694
DB
1851 ;;
1852 esac
c597172e
MR
1853done
1854
bcea99bb
MR
1855disabled logging && logfile=/dev/null
1856
29ba0911 1857echo "# $0 $LIBAV_CONFIGURATION" > $logfile
bcea99bb
MR
1858set >> $logfile
1859
9da6609f
MR
1860test -n "$cross_prefix" && enable cross_compile
1861
8d4c00ed
MR
1862if enabled cross_compile; then
1863 test -n "$arch" && test -n "$target_os" ||
1864 die "Must specify target arch and OS when cross-compiling"
1865fi
1866
1867set_default arch target_os
1868
121d78d0 1869ar_default="${cross_prefix}${ar_default}"
11e6d03a 1870cc_default="${cross_prefix}${cc_default}"
20e0ed95 1871nm_default="${cross_prefix}${nm_default}"
3f8040db 1872pkg_config_default="${cross_prefix}${pkg_config_default}"
adb2b908 1873ranlib="${cross_prefix}${ranlib}"
adb2b908 1874
c5200f17
MR
1875sysinclude_default="${sysroot}/usr/include"
1876
e0be794a 1877set_default cc nm pkg_config sysinclude
9da6609f
MR
1878enabled cross_compile || host_cc_default=$cc
1879set_default host_cc
13c7df3d 1880
762f95e4
MR
1881if ! $pkg_config --version >/dev/null 2>&1; then
1882 warn "$pkg_config not found, library detection may fail."
1883 pkg_config=false
1884fi
1885
82bb3329
MR
1886exesuf() {
1887 case $1 in
1c69c79f 1888 mingw32*|cygwin*|*-dos|freedos|opendos|os/2*|symbian) echo .exe ;;
82bb3329
MR
1889 esac
1890}
1891
1892EXESUF=$(exesuf $target_os)
1893HOSTEXESUF=$(exesuf $host_os)
c0f5b7f1 1894
e4e69e0b 1895# set temporary file name
a49d42c2 1896: ${TMPDIR:=$TEMPDIR}
c51fafa1 1897: ${TMPDIR:=$TMP}
a49d42c2 1898: ${TMPDIR:=/tmp}
e4e69e0b 1899
a210bce2 1900if ! check_cmd mktemp -u XXXXXX; then
54460a83
MR
1901 # simple replacement for missing mktemp
1902 # NOT SAFE FOR GENERAL USE
1903 mktemp(){
09a5c245 1904 echo "${2%%XXX*}.${HOSTNAME}.${UID}.$$"
54460a83
MR
1905 }
1906fi
1907
1908tmpfile(){
1909 tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
1910 (set -C; exec > $tmp) 2>/dev/null ||
f7ba16a7 1911 die "Unable to create temporary file in $TMPDIR."
54460a83
MR
1912 append TMPFILES $tmp
1913 eval $1=$tmp
1914}
1915
1916trap 'rm -f -- $TMPFILES' EXIT
54460a83 1917
55127e7b 1918tmpfile TMPASM .asm
3e0b1c9a
DB
1919tmpfile TMPC .c
1920tmpfile TMPE $EXESUF
1921tmpfile TMPH .h
1922tmpfile TMPO .o
1923tmpfile TMPS .S
1924tmpfile TMPSH .sh
1925tmpfile TMPV .ver
54460a83
MR
1926
1927unset -f mktemp
e4e69e0b 1928
fb3c4ffc
MR
1929chmod +x $TMPE
1930
993f2d0f
MR
1931# make sure we can execute files in $TMPDIR
1932cat > $TMPSH 2>> $logfile <<EOF
1933#! /bin/sh
1934EOF
1935chmod +x $TMPSH >> $logfile 2>&1
1936if ! $TMPSH >> $logfile 2>&1; then
1937 cat <<EOF
1938Unable to create and execute files in $TMPDIR. Set the TMPDIR environment
1939variable to another directory and make sure that it is not mounted noexec.
1940EOF
1941 die "Sanity test failed."
1942fi
993f2d0f 1943
3e0b1c9a 1944filter_asflags=echo
19b4c628
MR
1945filter_cflags=echo
1946filter_cppflags=echo
19b4c628 1947
613a4e3f
MR
1948if $cc -v 2>&1 | grep -q '^gcc.*LLVM'; then
1949 cc_type=llvm_gcc
1950 cc_version=__VERSION__
1951 gcc_extra_ver=$(expr "$($cc --version | head -n1)" : '.*\((.*)\)')
1952 cc_ident="llvm-gcc $($cc -dumpversion) $gcc_extra_ver"
1953 CC_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
1954 AS_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
1955 speed_cflags='-O3'
1956 size_cflags='-Os'
1957elif $cc -v 2>&1 | grep -qi ^gcc; then
629687f6 1958 cc_type=gcc
a3d7c197 1959 cc_version=__VERSION__
5d57846b
MR
1960 gcc_version=$($cc --version | head -n1)
1961 gcc_basever=$($cc -dumpversion)
3ad464bf 1962 gcc_pkg_ver=$(expr "$gcc_version" : '[^ ]* \(([^)]*)\)')
5d57846b
MR
1963 gcc_ext_ver=$(expr "$gcc_version" : ".*$gcc_pkg_ver $gcc_basever \\(.*\\)")
1964 cc_ident=$(cleanws "gcc $gcc_basever $gcc_pkg_ver $gcc_ext_ver")
aef6bd1b
MR
1965 if ! $cc -dumpversion | grep -q '^2\.'; then
1966 CC_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
1967 AS_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
1968 fi
14ca9cd0
MR
1969 speed_cflags='-O3'
1970 size_cflags='-Os'
629687f6
MR
1971elif $cc --version 2>/dev/null | grep -q Intel; then
1972 cc_type=icc
6e3fa35d 1973 cc_version="AV_STRINGIFY(__INTEL_COMPILER)"
bb5cecdc 1974 cc_ident=$($cc --version | head -n1)
bdefad73 1975 icc_version=$($cc -dumpversion)
07dec06e
MR
1976 CC_DEPFLAGS='-MMD'
1977 AS_DEPFLAGS='-MMD'
14ca9cd0
MR
1978 speed_cflags='-O3'
1979 size_cflags='-Os'
b05394a0 1980 noopt_cflags='-O1'
629687f6
MR
1981elif $cc -v 2>&1 | grep -q xlc; then
1982 cc_type=xlc
6e3fa35d 1983 cc_version="AV_STRINGIFY(__IBMC__)"
bb5cecdc 1984 cc_ident=$($cc -qversion 2>/dev/null | head -n1)
14ca9cd0
MR
1985 speed_cflags='-O5'
1986 size_cflags='-O5 -qcompact'
df442a8d
MR
1987elif $cc -V 2>/dev/null | grep -q Compaq; then
1988 cc_type=ccc
6e3fa35d 1989 cc_version="AV_STRINGIFY(__DECC_VER)"
bb5cecdc 1990 cc_ident=$($cc -V | head -n1 | cut -d' ' -f1-3)
d8059267 1991 DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -M'
03754fcd 1992 debuglevel=3
df442a8d 1993 add_ldflags -Wl,-z,now # calls to libots crash without this
14ca9cd0
MR
1994 speed_cflags='-fast'
1995 size_cflags='-O1'
6a0d5493 1996elif $cc --vsn 2>/dev/null | grep -q "ARM C/C++ Compiler"; then
03e37762
MR
1997 test -d "$sysroot" || die "No valid sysroot specified."
1998 cc_type=armcc
6e3fa35d 1999 cc_version="AV_STRINGIFY(__ARMCC_VERSION)"
bb5cecdc 2000 cc_ident=$($cc --vsn | head -n1)
03e37762
MR
2001 armcc_conf="$PWD/armcc.conf"
2002 $cc --arm_linux_configure \
2003 --arm_linux_config_file="$armcc_conf" \
2004 --configure_sysroot="$sysroot" \
2005 --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
2006 die "Error creating armcc configuration file."
bcafde61 2007 $cc --vsn | grep -q RVCT && armcc_opt=rvct || armcc_opt=armcc
03e37762 2008 cc="$cc --arm_linux_config_file=$armcc_conf --translate_gcc"
75800dce 2009 as_default="${cross_prefix}gcc"
07dec06e
MR
2010 CC_DEPFLAGS='-MMD'
2011 AS_DEPFLAGS='-MMD'
14ca9cd0
MR
2012 speed_cflags='-O3'
2013 size_cflags='-Os'
d0f0f628 2014 filter_asflags="filter_out -W${armcc_opt}*"
6fec122a
MR
2015elif $cc -version 2>/dev/null | grep -q TMS470; then
2016 cc_type=tms470
6e3fa35d 2017 cc_version="AV_STRINGIFY(__TI_COMPILER_VERSION__)"
bb5cecdc 2018 cc_ident=$($cc -version | head -n1 | tr -s ' ')
6fec122a
MR
2019 cc="$cc --gcc --abi=eabi -eo=.o -mc -me"
2020 CC_O='-fr=$(@D)'
2021 as_default="${cross_prefix}gcc"
2022 ld_default="${cross_prefix}gcc"
6fec122a
MR
2023 TMPO=$(basename $TMPC .c).o
2024 append TMPFILES $TMPO
2025 add_cflags -D__gnuc_va_list=va_list -D__USER_LABEL_PREFIX__=
07dec06e
MR
2026 CC_DEPFLAGS='-ppa -ppd=$(@:.o=.d)'
2027 AS_DEPFLAGS='-MMD'
14ca9cd0
MR
2028 speed_cflags='-O3 -mf=5'
2029 size_cflags='-O3 -mf=2'
6fec122a
MR
2030 filter_cflags=tms470_flags
2031 tms470_flags(){
2032 for flag; do
2033 case $flag in
2034 -march=*|-mcpu=*)
2035 case "${flag#*=}" in
2036 armv7-a|cortex-a*) echo -mv=7a8 ;;
2037 armv7-r|cortex-r*) echo -mv=7r4 ;;
2038 armv7-m|cortex-m*) echo -mv=7m3 ;;
2039 armv6*|arm11*) echo -mv=6 ;;
2040 armv5*e|arm[79]*e*|arm9[24]6*|arm96*|arm102[26])
2041 echo -mv=5e ;;
2042 armv4*|arm7*|arm9[24]*) echo -mv=4 ;;
2043 esac
2044 ;;
2045 -mfpu=neon) echo --float_support=vfpv3 --neon ;;
2046 -mfpu=vfp) echo --float_support=vfpv2 ;;
5fcb865b 2047 -mfpu=vfpv3) echo --float_support=vfpv3 ;;
a2709020 2048 -msoft-float) echo --float_support=vfplib ;;
14ca9cd0 2049 -O[0-3]|-mf=*) echo $flag ;;
6fec122a 2050 -g) echo -g -mn ;;
587d24ff 2051 -pds=*) echo $flag ;;
6fec122a
MR
2052 esac
2053 done
2054 }
06da6943
DC
2055elif $cc -v 2>&1 | grep -q clang; then
2056 cc_type=clang
b67a8f49
DC
2057 $cc -dM -E $TMPC | grep -q __clang_version__ &&
2058 cc_version=__clang_version__ || cc_version=__VERSION__
bb5cecdc 2059 cc_ident=$($cc --version | head -n1)
06da6943
DC
2060 CC_DEPFLAGS='-MMD'
2061 AS_DEPFLAGS='-MMD'
14ca9cd0
MR
2062 speed_cflags='-O3'
2063 size_cflags='-Os'
2a472e9c
MK
2064elif $cc -V 2>&1 | grep -q Sun; then
2065 cc_type=suncc
2066 cc_version="AV_STRINGIFY(__SUNPRO_C)"
448f5b83 2067 cc_ident=$($cc -V 2>&1 | head -n1 | cut -d' ' -f 2-)
faa374b7 2068 DEPEND_CMD='$(DEPCC) $(DEPFLAGS) $< | sed -e "1s,^.*: ,$@: ," -e "\$$!s,\$$, \\\," -e "1!s,^.*: , ," > $(@:.o=.d)'
2a472e9c 2069 DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -xM1'
558c2683 2070 add_ldflags -xc99
14ca9cd0
MR
2071 speed_cflags='-O5'
2072 size_cflags='-O5 -xspace'
03279bbe
MK
2073 filter_cflags=suncc_flags
2074 suncc_flags(){
2075 for flag; do
2076 case $flag in
2077 -march=*|-mcpu=*)
2078 case "${flag#*=}" in
2079 native) echo -xtarget=native ;;
87ddc38b 2080 v9|niagara) echo -xarch=sparc ;;
03279bbe 2081 ultrasparc) echo -xarch=sparcvis ;;
87ddc38b 2082 ultrasparc3|niagara2) echo -xarch=sparcvis2 ;;
03279bbe
MK
2083 i586|pentium) echo -xchip=pentium ;;
2084 i686|pentiumpro|pentium2) echo -xtarget=pentium_pro ;;
2085 pentium3*|c3-2) echo -xtarget=pentium3 ;;
2086 pentium-m) echo -xarch=sse2 -xchip=pentium3 ;;
2087 pentium4*) echo -xtarget=pentium4 ;;
2088 prescott|nocona) echo -xarch=sse3 -xchip=pentium4 ;;
2089 *-sse3) echo -xarch=sse3 ;;
2090 core2) echo -xarch=ssse3 -xchip=core2 ;;
2091 amdfam10|barcelona) echo -xarch=sse4_1 ;;
2092 athlon-4|athlon-[mx]p) echo -xarch=ssea ;;
2093 k8|opteron|athlon64|athlon-fx)
2094 echo -xarch=sse2a ;;
2095 athlon*) echo -xarch=pentium_proa ;;
2096 esac
2097 ;;
2098 -std=c99) echo -xc99 ;;
2099 -fomit-frame-pointer) echo -xregs=frameptr ;;
2100 -fPIC) echo -KPIC -xcode=pic32 ;;
03279bbe
MK
2101 -W*,*) echo $flag ;;
2102 -f*-*|-W*) ;;
2103 *) echo $flag ;;
2104 esac
2105 done
2106 }
180ec37d 2107elif $cc -v 2>&1 | grep -q 'PathScale\|Path64'; then
349d78fe
MR
2108 cc_type=pathscale
2109 cc_version=__PATHSCALE__
2110 cc_ident=$($cc -v 2>&1 | head -n1 | tr -d :)
2111 CC_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
2112 AS_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
2113 speed_cflags='-O2'
2114 size_cflags='-Os'
7b2d2190 2115 filter_cflags='filter_out -Wdisabled-optimization'
6de163e9
MR
2116elif $cc -v 2>&1 | grep -q Open64; then
2117 cc_type=open64
2118 cc_version=__OPEN64__
2119 cc_ident=$($cc -v 2>&1 | head -n1 | tr -d :)
2120 CC_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
2121 AS_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
2122 speed_cflags='-O2'
2123 size_cflags='-Os'
7b2d2190 2124 filter_cflags='filter_out -Wdisabled-optimization|-Wtype-limits|-fno-signed-zeros'
629687f6
MR
2125fi
2126
851ffa80
MR
2127test -n "$cc_type" && enable $cc_type ||
2128 warn "Unknown C compiler $cc, unable to select optimal CFLAGS"
629687f6 2129
75bafbac 2130: ${as_default:=$cc}
50567afa 2131: ${dep_cc_default:=$cc}
684b28e0 2132: ${ld_default:=$cc}
121d78d0 2133set_default ar as dep_cc ld
75800dce 2134
07dec06e
MR
2135test -n "$CC_DEPFLAGS" || CCDEP=$DEPEND_CMD
2136test -n "$AS_DEPFLAGS" || ASDEP=$DEPEND_CMD
2137
7f32f40c 2138add_cflags $extra_cflags
2f2e6c7c 2139add_asflags $extra_cflags
7f32f40c 2140
154d432c
MR
2141if test -n "$sysroot"; then
2142 case "$cc_type" in
00ba041c 2143 gcc|llvm_gcc|clang)
467256f2 2144 add_cppflags --sysroot="$sysroot"
154d432c
MR
2145 add_ldflags --sysroot="$sysroot"
2146 ;;
6fec122a
MR
2147 tms470)
2148 add_cppflags -I"$sysinclude"
2149 add_ldflags --sysroot="$sysroot"
2150 ;;
154d432c
MR
2151 esac
2152fi
2153
d22c13a8
MR
2154if test "$cpu" = host; then
2155 enabled cross_compile && die "--cpu=host makes no sense when cross-compiling."
2156
2157 case "$cc_type" in
613a4e3f 2158 gcc|llvm_gcc)
d22c13a8
MR
2159 check_native(){
2160 $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
b695256e 2161 sed -n "/cc1.*$1=/{
27ce1be8
MR
2162 s/.*$1=\\([^ ]*\\).*/\\1/
2163 p
2164 q
2165 }" $TMPE
d22c13a8
MR
2166 }
2167 cpu=$(check_native -march || check_native -mcpu)
2168 ;;
2169 esac
2170
2171 test "${cpu:-host}" = host && die "--cpu=host not supported with compiler $cc"
2172fi
2173
e939cedd
MR
2174# Deal with common $arch aliases
2175case "$arch" in
2176 arm*)
2177 arch="arm"
2178 ;;
2179 mips|mipsel|IP*)
2180 arch="mips"
2181 ;;
47b1860e 2182 mips64*)
e939cedd
MR
2183 arch="mips"
2184 subarch="mips64"
2185 ;;
2186 parisc|hppa)
2187 arch="parisc"
2188 ;;
2189 parisc64|hppa64)
2190 arch="parisc"
2191 subarch="parisc64"
2192 ;;
2193 "Power Macintosh"|ppc|powerpc)
2194 arch="ppc"
2195 ;;
47b1860e 2196 ppc64|powerpc64)
e939cedd
MR
2197 arch="ppc"
2198 subarch="ppc64"
2199 ;;
2200 s390|s390x)
2201 arch="s390"
2202 ;;
2203 sh4|sh)
2204 arch="sh4"
2205 ;;
2206 sun4u|sparc64)
2207 arch="sparc"
2208 subarch="sparc64"
2209 ;;
d33ed7b3 2210 i[3-6]86|i86pc|BePC|x86pc|x86_64|amd64)
e939cedd
MR
2211 arch="x86"
2212 ;;
2213esac
2214
851ffa80 2215is_in $arch $ARCH_LIST || warn "unknown architecture $arch"
343aef9b 2216enable $arch
e939cedd 2217
df5cdc24 2218# Add processor-specific flags
5d54c126
MR
2219if test "$cpu" = generic; then
2220 : do nothing
2221elif enabled ppc; then
343aef9b 2222
56348891
MR
2223 case $(tolower $cpu) in
2224 601|ppc601|powerpc601)
9dbd5c3d 2225 cpuflags="-mcpu=601"
64ad53ff 2226 disable altivec
9dbd5c3d 2227 ;;
56348891 2228 603*|ppc603*|powerpc603*)
9dbd5c3d 2229 cpuflags="-mcpu=603"
64ad53ff 2230 disable altivec
9dbd5c3d 2231 ;;
56348891 2232 604*|ppc604*|powerpc604*)
9dbd5c3d 2233 cpuflags="-mcpu=604"
64ad53ff 2234 disable altivec
9dbd5c3d 2235 ;;
56348891 2236 g3|75*|ppc75*|powerpc75*)
9dbd5c3d 2237 cpuflags="-mcpu=750 -mpowerpc-gfxopt"
64ad53ff 2238 disable altivec
9dbd5c3d 2239 ;;
56348891 2240 g4|745*|ppc745*|powerpc745*)
9dbd5c3d
MR
2241 cpuflags="-mcpu=7450 -mpowerpc-gfxopt"
2242 ;;
56348891 2243 74*|ppc74*|powerpc74*)
9dbd5c3d
MR
2244 cpuflags="-mcpu=7400 -mpowerpc-gfxopt"
2245 ;;
56348891 2246 g5|970|ppc970|powerpc970|power4*)
9dbd5c3d
MR
2247 cpuflags="-mcpu=970 -mpowerpc-gfxopt -mpowerpc64"
2248 ;;
56348891 2249 cell)
9dbd5c3d
MR
2250 cpuflags="-mcpu=cell"
2251 enable ldbrx
2252 ;;
7b0b81a1
AL
2253 e500v2)
2254 cpuflags="-mcpu=8548 -mhard-float -mfloat-gprs=double"
2255 disable altivec
2256 ;;
2257 e500)
2258 cpuflags="-mcpu=8540 -mhard-float"
2259 disable altivec
2260 ;;
9dbd5c3d 2261 esac
343aef9b
MR
2262
2263elif enabled x86; then
2264
9dbd5c3d
MR
2265 case $cpu in
2266 i[345]86|pentium)
2267 cpuflags="-march=$cpu"
2268 disable mmx
2269 ;;
2270 # targets that do NOT support conditional mov (cmov)
2271 pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
2272 cpuflags="-march=$cpu"
2273 disable cmov
2274 ;;
2275 # targets that do support conditional mov (cmov)
9ddf1b1a 2276 i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64*|k8*|opteron*|athlon-fx|core2|amdfam10|barcelona|atom)
9dbd5c3d
MR
2277 cpuflags="-march=$cpu"
2278 enable cmov
2279 enable fast_cmov
2280 ;;
2281 # targets that do support conditional mov but on which it's slow
2282 pentium4|pentium4m|prescott|nocona)
2283 cpuflags="-march=$cpu"
2284 enable cmov
2285 disable fast_cmov
2286 ;;
2287 esac
343aef9b
MR
2288
2289elif enabled sparc; then
2290
9dbd5c3d 2291 case $cpu in
26b7199e
MK
2292 niagara)
2293 cpuflags="-mcpu=$cpu"
2294 disable vis
2295 ;;
9dbd5c3d
MR
2296 sparc64)
2297 cpuflags="-mcpu=v9"
2298 ;;
2299 esac
343aef9b
MR
2300
2301elif enabled arm; then
2302
34ba23c9
MR
2303 case $cpu in
2304 armv*)
2305 cpuflags="-march=$cpu"
c2eae137 2306 subarch=$(echo $cpu | sed 's/[^a-z0-9]//g')
34ba23c9
MR
2307 ;;
2308 *)
2309 cpuflags="-mcpu=$cpu"
c2eae137
MR
2310 case $cpu in
2311 cortex-a*) subarch=armv7a ;;
2312 cortex-r*) subarch=armv7r ;;
9e19704a 2313 cortex-m*) enable thumb; subarch=armv7m ;;
c2eae137
MR
2314 arm11*) subarch=armv6 ;;
2315 arm[79]*e*|arm9[24]6*|arm96*|arm102[26]) subarch=armv5te ;;
2316 armv4*|arm7*|arm9[24]*) subarch=armv4 ;;
2317 esac
34ba23c9
MR
2318 ;;
2319 esac
343aef9b
MR
2320
2321elif enabled alpha; then
2322
34ba23c9 2323 enabled ccc && cpuflags="-arch $cpu" || cpuflags="-mcpu=$cpu"
343aef9b
MR
2324
2325elif enabled bfin; then
2326
34ba23c9 2327 cpuflags="-mcpu=$cpu"
343aef9b
MR
2328
2329elif enabled mips; then
2330
34ba23c9 2331 cpuflags="-march=$cpu"
343aef9b
MR
2332
2333elif enabled avr32; then
2334
9dbd5c3d
MR
2335 case $cpu in
2336 ap7[02]0[0-2])
2337 subarch="avr32_ap"
2338 cpuflags="-mpart=$cpu"
2339 ;;
2340 ap)
2341 subarch="avr32_ap"
2342 cpuflags="-march=$cpu"
2343 ;;
2344 uc3[ab]*)
2345 subarch="avr32_uc"
2346 cpuflags="-mcpu=$cpu"
2347 ;;
2348 uc)
2349 subarch="avr32_uc"
2350 cpuflags="-march=$cpu"
2351 ;;
2352 esac
df5cdc24 2353
343aef9b
MR
2354fi
2355
df5cdc24
MR
2356add_cflags $cpuflags
2357add_asflags $cpuflags
2358
993f2d0f
MR
2359# compiler sanity check
2360check_exec <<EOF
2361int main(void){ return 0; }
2362EOF
2363if test "$?" != 0; then
2364 echo "$cc is unable to create an executable file."
2365 if test -z "$cross_prefix" && ! enabled cross_compile ; then
2366 echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
2367 echo "Only do this if you know what cross compiling means."
2368 fi
2369 die "C compiler test failed."
2370fi
2371
046f081b 2372add_cppflags -D_ISOC99_SOURCE
e9b9a2f8 2373check_cflags -std=c99
50a334e4 2374check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
9d821fc2
DB
2375#include <stdlib.h>
2376EOF
50a334e4 2377check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
9d821fc2
DB
2378#include <stdlib.h>
2379EOF
e9b9a2f8 2380
f0125de9 2381check_host_cflags -std=c99
0a6db2a2 2382check_host_cflags -Wall
f0125de9 2383
b24dbcbd 2384case "$arch" in
e939cedd 2385 alpha|ia64|mips|parisc|sparc)
8a3c8627 2386 spic=$shared
b24dbcbd 2387 ;;
e939cedd 2388 x86)
cfdb6148 2389 subarch="x86_32"
e939cedd 2390 check_cc <<EOF && subarch="x86_64"
58b3536d 2391 int test[(int)sizeof(char*) - 7];
cfdb6148 2392EOF
de27f4d9 2393 if test "$subarch" = "x86_64"; then
e939cedd 2394 spic=$shared
de27f4d9 2395 fi
b24dbcbd 2396 ;;
b24dbcbd
RP
2397esac
2398
343aef9b 2399enable $subarch
8a3c8627 2400enabled spic && enable pic
b24dbcbd 2401
7483e694 2402# OS specific
4f854758 2403case $target_os in
a1629e28 2404 haiku)
63ae7e7c 2405 prefix_default="/boot/common"
108caaaa 2406 network_extralibs="-lnetwork"
f59c4bd6 2407 host_libs=
a1629e28 2408 ;;
7483e694 2409 sunos)
4d58e4cb 2410 AVSERVERLDFLAGS=""
9987769a 2411 SHFLAGS='-shared -Wl,-h,$$(@F)'
0600d30a 2412 enabled x86 && SHFLAGS="-mimpure-text $SHFLAGS"
7483e694 2413 network_extralibs="-lsocket -lnsl"
50a334e4 2414 add_cppflags -D__EXTENSIONS__
87a74f47
SM
2415 # When using suncc to build, the Solaris linker will mark
2416 # an executable with each instruction set encountered by
2417 # the Solaris assembler. As our libraries contain their own
2418 # guards for processor-specific code, instead suppress
2419 # generation of the HWCAPS ELF section on Solaris x86 only.
2420 enabled_all suncc x86 && echo "hwcap_1 = OVERRIDE;" > mapfile && add_ldflags -Wl,-M,mapfile
8182dc34 2421 nm_opts='-P -g'
7483e694
DB
2422 ;;
2423 netbsd)
a1e4b3f6 2424 disable symver
07a8eef6
MR
2425 oss_indev_extralibs="-lossaudio"
2426 oss_outdev_extralibs="-lossaudio"
7483e694
DB
2427 ;;
2428 openbsd)
89e053f8 2429 enable malloc_aligned
7c4a001a 2430 # On OpenBSD 4.5. the compiler does not use PIC unless
070c5d0f 2431 # explicitly using -fPIC. Libav builds fine without PIC,
7c4a001a
MR
2432 # however the generated executable will not do anything
2433 # (simply quits with exit-code 1, no crash, no output).
a7b9c8ae 2434 # Thus explicitly enable PIC here.
cd78208b 2435 enable pic
a1e4b3f6 2436 disable symver
7483e694 2437 SHFLAGS='-shared'
07a8eef6
MR
2438 oss_indev_extralibs="-lossaudio"
2439 oss_outdev_extralibs="-lossaudio"
7483e694 2440 ;;
a1e4b3f6
MR
2441 dragonfly)
2442 enable malloc_aligned
2443 disable symver
2444 ;;
2445 freebsd)
89e053f8 2446 enable malloc_aligned
7483e694
DB
2447 ;;
2448 bsd/os)
355d81df 2449 add_extralibs -lpoll -lgnugetopt
7483e694
DB
2450 ;;
2451 darwin)
89e053f8 2452 enable malloc_aligned
301ab19d 2453 gas="gas-preprocessor.pl $cc"
e08b8239 2454 enabled ppc && add_asflags -force_cpusubtype_ALL
dff68563
SM
2455 SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR)'
2456 enabled x86_32 && append SHFLAGS -Wl,-read_only_relocs,suppress
355d81df 2457 add_ldflags -Wl,-dynamic,-search_paths_first
7483e694
DB
2458 SLIBSUF=".dylib"
2459 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
2460 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
4d58e4cb 2461 AVSERVERLDFLAGS=-Wl,-bind_at_load
304d586d 2462 objformat="macho"
1b0f6fb8 2463 enabled x86_64 && objformat="macho64"
8dfa86f7 2464 enabled_any pic shared ||
2704bd1a 2465 { check_cflags -mdynamic-no-pic && add_asflags -mdynamic-no-pic; }
7483e694
DB
2466 ;;
2467 mingw32*)
9d3f4f50 2468 if test $target_os = "mingw32ce"; then
1aa71e25
MS
2469 disable network
2470 else
2471 target_os=mingw32
2472 fi
dcc01c06 2473 LIBTARGET=i386
1fc9fb8a 2474 if enabled x86_64; then
89e053f8 2475 enable malloc_aligned
417516f6 2476 LIBTARGET="i386:x86-64"
336cc1b0 2477 elif enabled arm; then
15c5156d 2478 LIBTARGET=arm-wince
dcc01c06 2479 fi
fbd971a4 2480 shlibdir_default="$bindir_default"
7483e694
DB
2481 SLIBPREF=""
2482 SLIBSUF=".dll"
7483e694
DB
2483 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
2484 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
2f138f0b
MR
2485 SLIB_EXTRA_CMD=-'$(DLLTOOL) -m $(LIBTARGET) -d $$(@:$(SLIBSUF)=.def) -l $(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib) -D $(SLIBNAME_WITH_MAJOR)'
2486 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
2487 SLIB_INSTALL_LINKS=
2488 SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
2489 SLIB_INSTALL_EXTRA_LIB='lib$(SLIBNAME:$(SLIBSUF)=.dll.a) $(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
4b51fb1c 2490 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 2491 objformat="win32"
ec10a9ab 2492 dlltool="${cross_prefix}dlltool"
bc574408 2493 enable dos_paths
1894e741 2494 check_cflags -fno-common
e26011d0
RP
2495 check_cpp_condition _mingw.h "defined (__MINGW64_VERSION_MAJOR) || (__MINGW32_MAJOR_VERSION > 3) \
2496 || (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
f7ad5aa2 2497 die "ERROR: MinGW runtime version must be >= 3.15."
5666a9f2 2498 add_cppflags -U__STRICT_ANSI__
7483e694
DB
2499 ;;
2500 cygwin*)
4f854758 2501 target_os=cygwin
fbd971a4 2502 shlibdir_default="$bindir_default"
7483e694
DB
2503 SLIBPREF="cyg"
2504 SLIBSUF=".dll"
2505 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
2506 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
2507 SHFLAGS='-shared -Wl,--enable-auto-image-base'
304d586d 2508 objformat="win32"
bc574408 2509 enable dos_paths
1894e741 2510 check_cflags -fno-common
a7a187a1 2511 add_cppflags -U__STRICT_ANSI__
7483e694 2512 ;;
4f365f37 2513 *-dos|freedos|opendos)
4f365f37 2514 network_extralibs="-lsocket"
ff1c015d 2515 objformat="coff"
bc574408 2516 enable dos_paths
a7a187a1 2517 add_cppflags -U__STRICT_ANSI__
4f365f37 2518 ;;
7483e694 2519 linux)
046f081b 2520 add_cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
7483e694
DB
2521 enable dv1394
2522 ;;
2523 irix*)
4f854758 2524 target_os=irix
7483e694
DB
2525 ranlib="echo ignoring ranlib"
2526 ;;
d22e8442 2527 os/2*)
d22e8442 2528 ln_s="cp -f"
9297f1ed 2529 objformat="aout"
e14574eb 2530 add_cppflags -D_GNU_SOURCE
355d81df 2531 add_ldflags -Zomf -Zbin-files -Zargs-wild -Zmap
71c61f62 2532 SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
4d58e4cb 2533 AVSERVERLDFLAGS=""
287d3b13 2534 LIBSUF="_s.a"
d22e8442
DY
2535 SLIBPREF=""
2536 SLIBSUF=".dll"
2537 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
2538 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
71c61f62
MR
2539 SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
2540 echo PROTMODE >> $(SUBDIR)$(NAME).def; \
2541 echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
2542 echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
2543 echo EXPORTS >> $(SUBDIR)$(NAME).def; \
2544 emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
2545 SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
2546 emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
2f138f0b 2547 SLIB_INSTALL_EXTRA_LIB='$(LIBPREF)$(NAME)_dll.a $(LIBPREF)$(NAME)_dll.lib'
bc574408 2548 enable dos_paths
d22e8442 2549 ;;
83993c1c 2550 gnu/kfreebsd)
c1f54478 2551 add_cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -D_BSD_SOURCE
83993c1c 2552 ;;
34e82167 2553 gnu)
f60d1366 2554 add_cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
34e82167 2555 ;;
d33ed7b3
MR
2556 qnx)
2557 add_cppflags -D_QNX_SOURCE
2558 network_extralibs="-lsocket"
2559 ;;
1c69c79f
MS
2560 symbian)
2561 SLIBSUF=".dll"
2562 enable dos_paths
e3bc07f4
MS
2563 add_cflags --include=$sysinclude/gcce/gcce.h -fvisibility=default
2564 add_cppflags -D__GCCE__ -D__SYMBIAN32__ -DSYMBIAN_OE_POSIX_SIGNALS
2565 add_ldflags -Wl,--target1-abs,--no-undefined \
2566 -Wl,-Ttext,0x80000,-Tdata,0x1000000 -shared \
2567 -Wl,--entry=_E32Startup -Wl,-u,_E32Startup
2568 add_extralibs -l:eexe.lib -l:usrt2_2.lib -l:dfpaeabi.dso \
2569 -l:drtaeabi.dso -l:scppnwdl.dso -lsupc++ -lgcc \
2570 -l:libc.dso -l:libm.dso -l:euser.dso -l:libcrt0.lib
1c69c79f 2571 ;;
614d8911
MR
2572 none)
2573 ;;
7483e694 2574 *)
4f924f9a 2575 die "Unknown OS '$target_os'."
7483e694
DB
2576 ;;
2577esac
2578
29ba0911 2579echo "config:$arch:$subarch:$cpu:$target_os:$cc_ident:$LIBAV_CONFIGURATION" >config.fate
db7515fd 2580
13cb2187
AS
2581check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable pic
2582
c9d19248
MR
2583set_default $PATHS_LIST
2584
320d060a 2585# we need to build at least one lib type
93b3c083 2586if ! enabled_any static shared; then
320d060a
DB
2587 cat <<EOF
2588At least one library type must be built.
2589Specify --enable-static to build the static libraries or --enable-shared to
2590build the shared libraries as well. To only build the shared libraries specify
2591--disable-static in addition to --enable-shared.
2592EOF
2593 exit 1;
2594fi
2595
2184c6f7 2596die_license_disabled() {
4c27207c 2597 enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
2184c6f7
DB
2598}
2599
e417d80d 2600die_license_disabled gpl libcdio
2184c6f7 2601die_license_disabled gpl libx264
de295976 2602die_license_disabled gpl libxavs
2184c6f7 2603die_license_disabled gpl libxvid
2184c6f7
DB
2604die_license_disabled gpl x11grab
2605
2f7ae63b 2606die_license_disabled nonfree libfaac
a060866f 2607die_license_disabled nonfree openssl
b2e3c528 2608
0b175caa
DB
2609die_license_disabled version3 libopencore_amrnb
2610die_license_disabled version3 libopencore_amrwb
d89e738a 2611die_license_disabled version3 libvo_aacenc
f502ff3f 2612die_license_disabled version3 libvo_amrwbenc
0b175caa 2613
9cad0e4e 2614enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
3fe142e2 2615
40617a6d 2616disabled optimizations || check_cflags -fomit-frame-pointer
cf9d24ad 2617
e276d9e8
MR
2618enable_pic() {
2619 enable pic
bce7b696
MR
2620 add_cppflags -DPIC
2621 add_cflags -fPIC
2622 add_asflags -fPIC
e276d9e8
MR
2623}
2624
2625enabled pic && enable_pic
bce7b696 2626
b4d96ba2
MR
2627check_cc <<EOF || die "Symbol mangling check failed."
2628int ff_extern;
2629EOF
8182dc34 2630sym=$($nm $nm_opts $TMPO | awk '/ff_extern/{ print substr($0, match($0, /[^ \t]*ff_extern/)) }')
b4d96ba2
MR
2631extern_prefix=${sym%%ff_extern*}
2632
f65883c8
MR
2633check_cc <<EOF && enable inline_asm
2634void foo(void) { __asm__ volatile ("" ::); }
2635EOF
61d251db 2636
df5e3978
MR
2637_restrict=
2638for restrict_keyword in restrict __restrict__ __restrict; do
2639 check_cc <<EOF && _restrict=$restrict_keyword && break
2640void foo(char * $restrict_keyword p);
2641EOF
2642done
2643
2644check_cc <<EOF && enable attribute_packed
2645struct { int x; } __attribute__((packed)) x;
2646EOF
2647
dffb41b9
MR
2648check_cc <<EOF && enable attribute_may_alias
2649union { int x; } __attribute__((may_alias)) x;
2650EOF
2651
df5e3978
MR
2652check_cc <<EOF || die "endian test failed"
2653unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
2654EOF
48fc536a 2655od -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
df5e3978 2656
e939cedd
MR
2657if enabled alpha; then
2658
2659 check_cflags -mieee
2660
2661elif enabled arm; then
e45391bb 2662
8986fddc 2663 enabled thumb && check_cflags -mthumb || check_cflags -marm
301ab19d 2664 nogas=die
50fa82e6 2665
44caaa56
MR
2666 if check_cpp_condition stddef.h "defined __ARM_PCS_VFP"; then
2667 enable vfp_args
2668 elif ! check_cpp_condition stddef.h "defined __ARM_PCS || defined __SOFTFP__"; then
2669 case "${cross_prefix:-$cc}" in
2670 *hardfloat*) enable vfp_args; fpabi=vfp ;;
2671 *) check_ld <<EOF && enable vfp_args && fpabi=vfp || fpabi=soft ;;
fa0912fe
MR
2672__asm__ (".eabi_attribute 28, 1");
2673int main(void) { return 0; }
2674EOF
44caaa56
MR
2675 esac
2676 warn "Compiler does not indicate floating-point ABI, guessing $fpabi."
2677 fi
fa0912fe 2678
fa0912fe
MR
2679 enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
2680 enabled armv6 && check_asm armv6 '"sadd16 r0, r0, r0"'
2681 enabled armv6t2 && check_asm armv6t2 '"movt r0, #0"'
2682 enabled armvfp && check_asm armvfp '"fadds s0, s0, s0"'
2683 enabled iwmmxt && check_asm iwmmxt '"wunpckelub wr6, wr4"'
2684 enabled neon && check_asm neon '"vadd.i16 q0, q0, q0"'
93eb8e4d 2685 enabled vfpv3 && check_asm vfpv3 '"vmov.f32 s0, #1.0"'
e45391bb 2686
6308729e
MR
2687 check_asm asm_mod_y '"vmul.i32 d0, d0, %y0" :: "x"(0)'
2688
e276d9e8
MR
2689 enabled_all armv6t2 shared !pic && enable_pic
2690
fa0912fe 2691elif enabled mips; then
e45391bb 2692
fa0912fe
MR
2693 check_asm loongson '"dmult.g $1, $2, $3"'
2694 enabled mmi && check_asm mmi '"lq $2, 0($2)"'
e45391bb 2695
fa0912fe 2696elif enabled ppc; then
e45391bb 2697
e6a0c354
MR
2698 enable local_aligned_8 local_aligned_16
2699
135448fa 2700 check_asm dcbzl '"dcbzl 0, %0" :: "r"(0)'
2f0c136e 2701 check_asm ibm_asm '"add 0, 0, 0"'
fa0912fe 2702 check_asm ppc4xx '"maclhw r10, r11, r12"'
64de20d1 2703 check_asm xform_asm '"lwzx %1, %y0" :: "Z"(*(int*)0), "r"(0)'
fa0912fe
MR
2704
2705 # AltiVec flags: The FSF version of GCC differs from the Apple version
2706 if enabled altivec; then
301ab19d 2707 nogas=warn
fa0912fe
MR
2708 check_cflags -maltivec -mabi=altivec &&
2709 { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
2710 check_cflags -faltivec
2711
2712 # check if our compiler supports Motorola AltiVec C API
2713 check_cc <<EOF || disable altivec
2714$inc_altivec_h
2715int main(void) {
2716 vector signed int v1, v2, v3;
2717 v1 = vec_add(v2,v3);
2718 return 0;
2719}
2720EOF
2721
2722 # check if our compiler supports braces for vector declarations
2723 check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
2724$inc_altivec_h
2725int main (void) { (vector int) {1}; return 0; }
2726EOF
2727 fi
e45391bb 2728
fa0912fe 2729elif enabled sparc; then
e45391bb 2730
fa0912fe
MR
2731 enabled vis && check_asm vis '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc &&
2732 add_cflags -mcpu=ultrasparc -mtune=ultrasparc
e45391bb 2733
fa0912fe 2734elif enabled x86; then
e45391bb 2735
e6a0c354
MR
2736 enable local_aligned_8 local_aligned_16
2737
44965991
PI
2738 # check whether EBP is available on x86
2739 # As 'i' is stored on the stack, this program will crash
2740 # if the base pointer is used to access it because the
2741 # base pointer is cleared in the inline assembly code.
7dfef245 2742 check_exec_crash <<EOF && enable ebp_available
44965991 2743 volatile int i=0;
be449fca 2744 __asm__ volatile (
44965991
PI
2745 "xorl %%ebp, %%ebp"
2746 ::: "%ebp");
2747 return i;
44965991
PI
2748EOF
2749
f494213c 2750 # check whether EBX is available on x86
7cee5421
MR
2751 check_asm ebx_available '""::"b"(0)' &&
2752 check_asm ebx_available '"":::"%ebx"'
8e380710 2753
6f74fb03
RP
2754 # check whether xmm clobbers are supported
2755 check_asm xmm_clobbers '"":::"%xmm0"'
2756
d7f0920b 2757 # check whether binutils is new enough to compile SSSE3/MMX2
940f335a 2758 enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
5fd89ca0 2759 enabled mmx2 && check_asm mmx2 '"pmaxub %mm0, %mm1"'
6bd859d6 2760
9cca1e40 2761 if ! disabled_any asm mmx yasm; then
b6c06894
MR
2762 if check_cmd $yasmexe --version; then
2763 enabled x86_64 && yasm_extra="-m amd64"
2764 yasm_debug="-g dwarf2"
2765 elif check_cmd nasm -v; then
2766 yasmexe=nasm
2767 yasm_debug="-g -F dwarf"
2768 enabled x86_64 && test "$objformat" = elf && objformat=elf64
2769 fi
2770
2771 YASMFLAGS="-f $objformat $yasm_extra"
2772 enabled pic && append YASMFLAGS "-DPIC"
2773 test -n "$extern_prefix" && append YASMFLAGS "-DPREFIX"
2774 case "$objformat" in
2775 elf*) enabled debug && append YASMFLAGS $yasm_debug ;;
2776 esac
2777
48545a8f 2778 check_yasm "pextrd [eax], xmm0, 1" && enable yasm ||
25432e85 2779 die "yasm not found, use --disable-yasm for a crippled build"
429059f8 2780 check_yasm "vextractf128 xmm0, ymm0, 0" || disable avx
31a0dcb2 2781 fi
e45391bb 2782
669b5583
MR
2783 case "$cpu" in
2784 athlon*|opteron*|k8*|pentium|pentium-mmx|prescott|nocona|atom|geode)
2785 disable fast_clz
2786 ;;
2787 esac
2788
44965991
PI
2789fi
2790
301ab19d
MR
2791if enabled asm; then
2792 as=${gas:=$as}
2793 check_asm gnu_as '".macro m n\n\\n:.int 0\n.endm\nm x"' ||
2794 $nogas "GNU assembler not found, install gas-preprocessor"
2795fi
2796
4a7e068b
MR
2797check_ldflags -Wl,--as-needed
2798
a98bb16d
RP
2799if check_func dlopen; then
2800 ldl=
2801elif check_func dlopen -ldl; then
2802 ldl=-ldl
8bf5d58f
MN
2803fi
2804
54fe299b
DV
2805if enabled network; then
2806 check_type "sys/types.h sys/socket.h" socklen_t
2807 check_type netdb.h "struct addrinfo"
2808 check_type netinet/in.h "struct ipv6_mreq" -D_DARWIN_C_SOURCE
2809 check_type netinet/in.h "struct sockaddr_in6"
2810 check_type "sys/types.h sys/socket.h" "struct sockaddr_storage"
2811 check_struct "sys/types.h sys/socket.h" "struct sockaddr" sa_len
2812 # Prefer arpa/inet.h over winsock2
2813 if check_header arpa/inet.h ; then
2814 check_func closesocket
2815 elif check_header winsock2.h ; then
2816 check_func_headers winsock2.h closesocket -lws2 && \
2817 network_extralibs="-lws2" || \
2818 { check_func_headers winsock2.h closesocket -lws2_32 && \
2819 network_extralibs="-lws2_32"; }
2820 check_type ws2tcpip.h socklen_t
2821 check_type ws2tcpip.h "struct addrinfo"
2822 check_type ws2tcpip.h "struct ipv6_mreq"
2823 check_type ws2tcpip.h "struct sockaddr_in6"
2824 check_type ws2tcpip.h "struct sockaddr_storage"
2825 check_struct winsock2.h "struct sockaddr" sa_len
2826 else
2827 disable network
2828 fi
2829fi
2830
75ecf149
DB
2831# Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
2832check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
2833
534a2231 2834check_func fcntl
7483e694 2835check_func fork
84882df6 2836check_func getaddrinfo $network_extralibs
7483e694
DB
2837check_func gethrtime
2838check_func getrusage
fc5607f8 2839check_struct "sys/time.h sys/resource.h" "struct rusage" ru_maxrss
094c09bb 2840check_func inet_aton $network_extralibs
abfc8d05 2841check_func isatty
a5b64584 2842check_func localtime_r
4ae40685 2843check_func ${malloc_prefix}memalign && enable memalign
7483e694 2844check_func mkstemp
0328b9ea 2845check_func mmap
4ae40685 2846check_func ${malloc_prefix}posix_memalign && enable posix_memalign
0104b608 2847check_func setrlimit
87958234 2848check_func strerror_r
6379900c 2849check_func strptime
47941088 2850check_func strtok_r
b507ebd1 2851check_func_headers io.h setmode
e4673692 2852check_func_headers lzo/lzo1x.h lzo1x_999_compress
fc5607f8 2853check_lib2 "windows.h psapi.h" GetProcessMemoryInfo -lpsapi
2446d3d6 2854check_func_headers windows.h GetProcessTimes
73f6d31e 2855check_func_headers windows.h MapViewOfFile
7c5bfe7a 2856check_func_headers windows.h VirtualAlloc
6ffa87d3 2857
a98bb16d 2858check_header dlfcn.h
92c6a099 2859check_header dxva2api.h
a98bb16d 2860check_header malloc.h
bf6ce82d 2861check_header poll.h
b58412f1 2862check_header sys/mman.h
b091aa44 2863check_header sys/resource.h
bf6ce82d 2864check_header sys/select.h
272081b0
CEH
2865check_header vdpau/vdpau.h
2866check_header vdpau/vdpau_x11.h
68178ca9 2867check_header X11/extensions/XvMClib.h
a98bb16d 2868
9104cd51
RP
2869check_struct dxva2api.h DXVA_PictureParameters wDecodedPictureIndex
2870
a4fa192c 2871disabled zlib || check_lib zlib.h zlibVersion -lz || disable zlib
632948bd 2872disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
57bd82d4 2873
ff3755cb
JG
2874if ! disabled w32threads && ! enabled pthreads; then
2875 check_func _beginthreadex && enable w32threads
2876fi
2877
57bd82d4
MR
2878# check for some common methods of building with pthread support
2879# do this before the optional library checks as some of them require pthreads
0dbfc1db
MR
2880if ! disabled pthreads && ! enabled w32threads; then
2881 enable pthreads
9e7fd101
MR
2882 if check_func pthread_create; then
2883 :
2884 elif check_func pthread_create -pthread; then
2885 add_cflags -pthread
afc9aee2 2886 add_extralibs -pthread
9e7fd101
MR
2887 elif check_func pthread_create -pthreads; then
2888 add_cflags -pthreads
afc9aee2 2889 add_extralibs -pthreads
8d94f606
GT
2890 elif check_func pthread_create -lpthreadGC2; then
2891 add_extralibs -lpthreadGC2
9e7fd101 2892 elif ! check_lib pthread.h pthread_create -lpthread; then
0dbfc1db 2893 disable pthreads
9e7fd101 2894 fi
57bd82d4
MR
2895fi
2896
8eee7025 2897for thread in $THREADS_LIST; do
e5f94c2b 2898 if enabled $thread; then
3ae3b721
RP
2899 test -n "$thread_type" &&
2900 die "ERROR: Only one thread type must be selected." ||
e5f94c2b 2901 thread_type="$thread"
e5f94c2b
RP
2902 fi
2903done
2904
50f7c296 2905check_lib math.h sin -lm && LIBM="-lm"
f3e3f28e 2906enabled vaapi && require vaapi va/va.h vaInitialize -lva
fdf88598 2907
645d2652
MR
2908check_mathfunc exp2
2909check_mathfunc exp2f
2910check_mathfunc llrint
07876e25 2911check_mathfunc llrintf
645d2652
MR
2912check_mathfunc log2
2913check_mathfunc log2f
2914check_mathfunc lrint
2915check_mathfunc lrintf
2916check_mathfunc round
2917check_mathfunc roundf
23d3931a 2918check_mathfunc trunc
645d2652 2919check_mathfunc truncf
f32adb22 2920
57bd82d4 2921# these are off by default, so fail if requested and not available
a1b3c5a3 2922enabled avisynth && require2 vfw32 "windows.h vfw.h" AVIFileInit -lavifil32
47941088 2923enabled frei0r && { check_header frei0r.h || die "ERROR: frei0r.h header not found"; }
bc8c1395 2924enabled gnutls && require_pkg_config gnutls gnutls/gnutls.h gnutls_global_init
4fa18c56
MR
2925enabled libdirac && require_pkg_config dirac \
2926 "libdirac_decoder/dirac_parser.h libdirac_encoder/dirac_encoder.h" \
2927 "dirac_decoder_init dirac_encoder_init"
79fda097 2928enabled libfaac && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
a5b64584 2929enabled libfreetype && require_pkg_config freetype2 "ft2build.h freetype/freetype.h" FT_Init_FreeType
5af41508 2930enabled libgsm && require libgsm gsm/gsm.h gsm_create -lgsm
9b9d3868 2931enabled libmp3lame && require "libmp3lame >= 3.98.3" lame/lame.h lame_set_VBR_quality -lmp3lame
7483e694 2932enabled libnut && require libnut libnut.h nut_demuxer_init -lnut
eb7626a3
MR
2933enabled libopencore_amrnb && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb
2934enabled libopencore_amrwb && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb
4fa18c56 2935enabled libopencv && require_pkg_config opencv opencv/cv.h cvCreateImageHeader
3d6fac8c 2936enabled libopenjpeg && require libopenjpeg openjpeg.h opj_version -lopenjpeg
0de9c41f 2937enabled libpulse && require_pkg_config libpulse-simple pulse/simple.h pa_simple_new
4fa18c56
MR
2938enabled librtmp && require_pkg_config librtmp librtmp/rtmp.h RTMP_Socket
2939enabled libschroedinger && require_pkg_config schroedinger-1.0 schroedinger/schro.h schro_init
ae14f311 2940enabled libspeex && require libspeex speex/speex.h speex_decoder_init -lspeex
c261a5d9 2941enabled libtheora && require libtheora theora/theoraenc.h th_info_init -ltheoraenc -ltheoradec -logg
d89e738a 2942enabled libvo_aacenc && require libvo_aacenc vo-aacenc/voAAC.h voGetAACEncAPI -lvo-aacenc
f502ff3f 2943enabled libvo_amrwbenc && require libvo_amrwbenc vo-amrwbenc/enc_if.h E_IF_init -lvo-amrwbenc
7483e694 2944enabled libvorbis && require libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
7d07d6f5
DB
2945enabled libvpx && {
2946 enabled libvpx_decoder && { check_lib2 "vpx/vpx_decoder.h vpx/vp8dx.h" vpx_codec_dec_init_ver -lvpx ||
2947 die "ERROR: libvpx decoder version must be >=0.9.1"; }
2948 enabled libvpx_encoder && { check_lib2 "vpx/vpx_encoder.h vpx/vp8cx.h" vpx_codec_enc_init_ver -lvpx ||
2949 die "ERROR: libvpx encoder version must be >=0.9.1"; } }
eb7626a3 2950enabled libx264 && require libx264 x264.h x264_encoder_encode -lx264 &&
46c3c53b
AK
2951 { check_cpp_condition x264.h "X264_BUILD >= 118" ||
2952 die "ERROR: libx264 version must be >= 0.118."; }
de295976 2953enabled libxavs && require libxavs xavs.h xavs_encoder_encode -lxavs
2bfecf73 2954enabled libxvid && require libxvid xvid.h xvid_global -lxvidcore
7483e694 2955enabled mlib && require mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
a060866f
MS
2956enabled openssl && { check_lib openssl/ssl.h SSL_library_init -lssl -lcrypto ||
2957 check_lib openssl/ssl.h SSL_library_init -lssl32 -leay32 ||
2958 check_lib openssl/ssl.h SSL_library_init -lssl -lcrypto -lws2_32 -lgdi32 ||
2959 die "ERROR: openssl not found"; }
8ac17293 2960
0b4a1821
AS
2961# libdc1394 check
2962if enabled libdc1394; then
2963 { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
2964 enable libdc1394_2; } ||
2965 { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
2966 enable libdc1394_1; } ||
2967 die "ERROR: No version of libdc1394 found "
2968fi
2969
8f1b06c8 2970if check_pkg_config sdl SDL_version.h SDL_Linked_Version; then
aa692d54
MR
2971 check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
2972 enable sdl &&
2973 check_struct SDL.h SDL_VideoInfo current_w $sdl_cflags && enable sdl_video_size
c3f6b472 2974fi
57bd82d4 2975
2270b4b2 2976texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
146ea952 2977
c6f95144 2978check_header linux/fb.h
06e31011
RP
2979check_header linux/videodev.h
2980check_header linux/videodev2.h
1b6e8b73 2981check_header sys/videoio.h
47f38850 2982
27796dc3 2983check_func_headers "windows.h vfw.h" capCreateCaptureWindow "$vfwcap_indev_extralibs"
ec1ee802
RP
2984# check that WM_CAP_DRIVER_CONNECT is defined to the proper value
2985# w32api 3.12 had it defined wrong
2986check_cpp_condition vfw.h "WM_CAP_DRIVER_CONNECT > WM_USER" && enable vfwcap_defines
c2345207 2987
f8aa696f 2988# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
1c915f83
RP
2989{ check_header dev/bktr/ioctl_meteor.h &&
2990 check_header dev/bktr/ioctl_bt848.h; } ||
2991{ check_header machine/ioctl_meteor.h &&
2992 check_header machine/ioctl_bt848.h; } ||
2993{ check_header dev/video/meteor/ioctl_meteor.h &&
2994 check_header dev/video/bktr/ioctl_bt848.h; } ||
2995check_header dev/ic/bt8xx.h
f8aa696f 2996
15d59d2c 2997check_header sndio.h
c7682de0
RP
2998check_header sys/soundcard.h
2999check_header soundcard.h
deb29777 3000
b6f3d925 3001enabled_any alsa_indev alsa_outdev && check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
35fd8122 3002
0e57fe17 3003enabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack
80ff8a16 3004
15d59d2c
B
3005enabled_any sndio_indev sndio_outdev && check_lib2 sndio.h sio_open -lsndio
3006
e417d80d
AK
3007enabled libcdio &&
3008 check_lib2 "cdio/cdda.h cdio/paranoia.h" cdio_cddap_open "-lcdio_paranoia -lcdio_cdda -lcdio"
3009
56a059ac 3010enabled x11grab &&
f58f4ce1
GP
3011check_header X11/Xlib.h &&
3012check_header X11/extensions/XShm.h &&
0a045661 3013check_header X11/extensions/Xfixes.h &&
f58f4ce1 3014check_func XOpenDisplay -lX11 &&
781c1aa6
R
3015check_func XShmCreateImage -lX11 -lXext &&
3016check_func XFixesGetCursorImage -lX11 -lXext -lXfixes
f58f4ce1 3017
ac3dbb4d
SZ
3018# check for VDA header
3019if ! disabled vda && check_header VideoDecodeAcceleration/VDADecoder.h; then
be1e8725 3020 enable vda && add_extralibs -framework CoreFoundation -framework VideoDecodeAcceleration -framework QuartzCore
ac3dbb4d
SZ
3021fi
3022
598ef02b 3023if ! disabled vdpau && enabled vdpau_vdpau_h; then
deda2a4a
AC
3024check_cpp_condition \
3025 vdpau/vdpau.h "defined VDP_DECODER_PROFILE_MPEG4_PART2_ASP" ||
d1ebd4a9
AC
3026 { echolog "Please upgrade to libvdpau >= 0.2 if you would like vdpau support." &&
3027 disable vdpau; }
abf649c7 3028fi
deda2a4a 3029
95e561ec 3030enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel"
57bd82d4
MR
3031
3032# add some useful compiler flags if supported
3033check_cflags -Wdeclaration-after-statement
dcd479c0 3034check_cflags -Wall
440e3b2f 3035check_cflags -Wno-parentheses
dcd479c0 3036check_cflags -Wno-switch
b36518dc 3037check_cflags -Wno-format-zero-length
c07bd6a9
MN
3038check_cflags -Wdisabled-optimization
3039check_cflags -Wpointer-arith
3040check_cflags -Wredundant-decls
cc1fb623 3041check_cflags -Wno-pointer-sign
f4929996 3042check_cflags -Wcast-qual
9aceb3cf 3043check_cflags -Wwrite-strings
652a5bf6 3044check_cflags -Wtype-limits
764551c6 3045check_cflags -Wundef
fc298fd9 3046check_cflags -Wmissing-prototypes
c2ed91de 3047check_cflags -Wstrict-prototypes
5af4e0cc 3048enabled extra_warnings && check_cflags -Winline
cf9d24ad 3049
57bd82d4 3050# add some linker flags
5c0e9479 3051check_ldflags -Wl,--warn-common
965dbe09 3052check_ldflags -Wl,-rpath-link=libpostproc:libswscale:libavfilter:libavdevice:libavformat:libavcodec:libavutil
fef2d661 3053test_ldflags -Wl,-Bsymbolic && append SHFLAGS -Wl,-Bsymbolic
94a3401e 3054
a482e61b 3055echo "X{};" > $TMPV
b462d132 3056if test_ldflags -Wl,--version-script,$TMPV; then
a482e61b 3057 append SHFLAGS '-Wl,--version-script,\$(SUBDIR)lib\$(NAME).ver'
b462d132
MR
3058 check_cc <<EOF && enable symver_asm_label
3059void ff_foo(void) __asm__ ("av_foo@VERSION");
0884fadf 3060void ff_foo(void) { ${inline_asm+__asm__($quotes);} }
b462d132
MR
3061EOF
3062 check_cc <<EOF && enable symver_gnu_asm
3063__asm__(".symver ff_foo,av_foo@VERSION");
3064void ff_foo(void) {}
3065EOF
3066fi
a482e61b 3067
9cd7b854
MR
3068if [ -n "$optflags" ]; then
3069 add_cflags $optflags
3070elif enabled small; then
14ca9cd0 3071 add_cflags $size_cflags
8400d6b8 3072elif enabled optimizations; then
14ca9cd0 3073 add_cflags $speed_cflags
b05394a0
MR
3074else
3075 add_cflags $noopt_cflags
cddf3f45 3076fi
11fdbc44 3077check_cflags -fno-math-errno
b2eb2ff0 3078check_cflags -fno-signed-zeros
cddf3f45 3079
629687f6 3080if enabled icc; then
b1598b58
MR
3081 # Just warnings, no remarks
3082 check_cflags -w1
3083 # -wd: Disable following warnings
3084 # 144, 167, 556: -Wno-pointer-sign
91bcad19 3085 # 1292: attribute "foo" ignored
b1598b58 3086 # 10006: ignoring unknown option -fno-signed-zeros
f1c7c6ae 3087 # 10148: ignoring unknown option -Wno-parentheses
b1598b58 3088 # 10156: ignoring option '-W'; no argument required
91bcad19 3089 check_cflags -wd144,167,556,1292,10006,10148,10156
b1598b58
MR
3090 # 11030: Warning unknown option --as-needed
3091 # 10156: ignoring option '-export'; no argument required
3092 check_ldflags -wd10156,11030
3093 # Allow to compile with optimizations
3094 check_ldflags -march=$cpu
be2cf98a
CEH
3095 # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
3096 enable ebp_available
bdefad73
MR
3097 if enabled x86_32; then
3098 test ${icc_version%%.*} -ge 11 && \
3099 check_cflags -falign-stack=maintain-16-byte || \
3100 disable aligned_stack
3101 fi
df442a8d
MR
3102elif enabled ccc; then
3103 # disable some annoying warnings
3104 add_cflags -msg_disable cvtu32to64
3105 add_cflags -msg_disable embedcomment
3106 add_cflags -msg_disable needconstext
3107 add_cflags -msg_disable nomainieee
3108 add_cflags -msg_disable ptrmismatch1
3109 add_cflags -msg_disable unreachcode
973859f5
MR
3110elif enabled gcc; then
3111 check_cflags -fno-tree-vectorize
765e6134 3112 check_cflags -Werror=implicit-function-declaration
de63bfec 3113 check_cflags -Werror=missing-prototypes
613a4e3f
MR
3114elif enabled llvm_gcc; then
3115 check_cflags -mllvm -stack-alignment=16
06da6943 3116elif enabled clang; then
5c8ef670 3117 check_cflags -mllvm -stack-alignment=16
06da6943 3118 check_cflags -Qunused-arguments
138132be
MR
3119elif enabled armcc; then
3120 # 2523: use of inline assembler is deprecated
bcafde61
MR
3121 add_cflags -W${armcc_opt},--diag_suppress=2523
3122 add_cflags -W${armcc_opt},--diag_suppress=1207
5a92140b 3123 add_cflags -W${armcc_opt},--diag_suppress=1293 # assignment in condition
b0c1b66a 3124 add_cflags -W${armcc_opt},--diag_suppress=3343 # hardfp compat
d0ce090e
MR
3125 add_cflags -W${armcc_opt},--diag_suppress=167 # pointer sign
3126 add_cflags -W${armcc_opt},--diag_suppress=513 # pointer sign
587d24ff
MR
3127elif enabled tms470; then
3128 add_cflags -pds=824 -pds=837
5f3b8314
MR
3129elif enabled pathscale; then
3130 add_cflags -fstrict-overflow -OPT:wrap_around_unsafe_opt=OFF
504a64b9
CEH
3131fi
3132
7483e694
DB
3133enabled_any $THREADS_LIST && enable threads
3134
3135check_deps $CONFIG_LIST \
b6bb00b0 3136 $CONFIG_EXTRA \
7483e694 3137 $HAVE_LIST \
54e75be4
DB
3138 $ALL_COMPONENTS \
3139 $ALL_TESTS \
f70f03f6 3140
3bfd582c 3141enabled asm || { arch=c; disable $ARCH_LIST $ARCH_EXT_LIST; }
c8a4ae00 3142
9bbd6a4c
MR
3143! enabled_any memalign posix_memalign malloc_aligned &&
3144 enabled_any $need_memalign && enable memalign_hack
3145
3e89171a 3146echo "install prefix $prefix"
f36958f8
DB
3147echo "source path $source_path"
3148echo "C compiler $cc"
f36958f8 3149echo "ARCH $arch ($cpu)"
ce8871c2
MR
3150if test "$build_suffix" != ""; then
3151 echo "build suffix $build_suffix"
eb94aca9 3152fi
ac63af34
DB
3153if test "$extra_version" != ""; then
3154 echo "version string suffix $extra_version"
3155fi
0db2ce77 3156echo "big-endian ${bigendian-no}"
e90f5b5a 3157echo "runtime cpu detection ${runtime_cpudetect-no}"
5b6c2cbd 3158if enabled x86; then
6348a96c 3159 echo "${yasmexe} ${yasm-no}"
0db2ce77 3160 echo "MMX enabled ${mmx-no}"
30e98e62 3161 echo "MMX2 enabled ${mmx2-no}"
3bf96eec 3162 echo "3DNow! enabled ${amd3dnow-no}"
a1ef9f08 3163 echo "3DNow! extended enabled ${amd3dnowext-no}"
1bb04d5a 3164 echo "SSE enabled ${sse-no}"
30e98e62 3165 echo "SSSE3 enabled ${ssse3-no}"
c73b779d 3166 echo "AVX enabled ${avx-no}"
0db2ce77
MR
3167 echo "CMOV enabled ${cmov-no}"
3168 echo "CMOV is fast ${fast_cmov-no}"
971cc990
MN
3169 echo "EBX available ${ebx_available-no}"
3170 echo "EBP available ${ebp_available-no}"
e41e8342 3171fi
5b6c2cbd 3172if enabled arm; then
0db2ce77
MR
3173 echo "ARMv5TE enabled ${armv5te-no}"
3174 echo "ARMv6 enabled ${armv6-no}"
ab5cb084 3175 echo "ARMv6T2 enabled ${armv6t2-no}"
f55b299a 3176 echo "ARM VFP enabled ${armvfp-no}"
0db2ce77 3177 echo "IWMMXT enabled ${iwmmxt-no}"
6b18d278 3178 echo "NEON enabled ${neon-no}"
eba9ae3c 3179fi
5b6c2cbd 3180if enabled mips; then
0db2ce77 3181 echo "MMI enabled ${mmi-no}"
e41e8342 3182fi
5b6c2cbd 3183if enabled ppc; then
0db2ce77 3184 echo "AltiVec enabled ${altivec-no}"
30e98e62 3185 echo "PPC 4xx optimizations ${ppc4xx-no}"
0db2ce77 3186 echo "dcbzl available ${dcbzl-no}"
30e98e62
DB
3187fi
3188if enabled sparc; then
3189 echo "VIS enabled ${vis-no}"
e41e8342 3190fi
0db2ce77 3191echo "debug symbols ${debug-no}"
f082a0fb 3192echo "optimize for size ${small-no}"
8400d6b8 3193echo "optimizations ${optimizations-no}"
0db2ce77
MR
3194echo "static ${static-no}"
3195echo "shared ${shared-no}"
4a24ab64 3196echo "postprocessing support ${postproc-no}"
f7679c54 3197echo "new filter support ${avfilter-no}"
0db2ce77 3198echo "network support ${network-no}"
0db2ce77
MR
3199echo "threading support ${thread_type-no}"
3200echo "SDL support ${sdl-no}"
0db2ce77 3201echo "Sun medialib support ${mlib-no}"
c562ba4c
DB
3202echo "libdxva2 enabled ${dxva2-no}"
3203echo "libva enabled ${vaapi-no}"
3204echo "libvdpau enabled ${vdpau-no}"
0db2ce77 3205echo "AVISynth enabled ${avisynth-no}"
47941088 3206echo "frei0r enabled ${frei0r-no}"
bc8c1395 3207echo "gnutls enabled ${gnutls-no}"
e417d80d 3208echo "libcdio support ${libcdio-no}"
f7b8bffe 3209echo "libdc1394 support ${libdc1394-no}"
690bfceb 3210echo "libdirac enabled ${libdirac-no}"
0db2ce77 3211echo "libfaac enabled ${libfaac-no}"
0db2ce77
MR
3212echo "libgsm enabled ${libgsm-no}"
3213echo "libmp3lame enabled ${libmp3lame-no}"
3214echo "libnut enabled ${libnut-no}"
0b175caa
DB
3215echo "libopencore-amrnb support ${libopencore_amrnb-no}"
3216echo