fate: remove last incomplete frame from mpeg2-field-enc test
[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
a77f01c7
MR
57test -d /usr/xpg4/bin && PATH=/usr/xpg4/bin:$PATH
58
74c53c2d 59show_help(){
f69f51b3 60 cat <<EOF
06454877
MR
61Usage: configure [options]
62Options: [defaults in brackets after descriptions]
63
3b327a4b 64Help options:
06454877 65 --help print this message
3b327a4b
DB
66 --list-decoders show all available decoders
67 --list-encoders show all available encoders
68 --list-hwaccels show all available hardware accelerators
69 --list-demuxers show all available demuxers
70 --list-muxers show all available muxers
71 --list-parsers show all available parsers
72 --list-protocols show all available protocols
73 --list-bsfs show all available bitstream filters
74 --list-indevs show all available input devices
75 --list-outdevs show all available output devices
76 --list-filters show all available filters
77
78Standard options:
19bd477d 79 --logfile=FILE log tests and output to FILE [config.log]
06454877
MR
80 --disable-logging do not log configure debug information
81 --prefix=PREFIX install in PREFIX [$prefix]
82 --bindir=DIR install binaries in DIR [PREFIX/bin]
6291d7e4 83 --datadir=DIR install data files in DIR [PREFIX/share/avconv]
06454877
MR
84 --libdir=DIR install libs in DIR [PREFIX/lib]
85 --shlibdir=DIR install shared libs in DIR [PREFIX/lib]
86 --incdir=DIR install includes in DIR [PREFIX/include]
87 --mandir=DIR install man page in DIR [PREFIX/share/man]
88
3b327a4b 89Licensing options:
06454877
MR
90 --enable-gpl allow use of GPL code, the resulting libs
91 and binaries will be under GPL [no]
92 --enable-version3 upgrade (L)GPL to version 3 [no]
93 --enable-nonfree allow use of nonfree code, the resulting libs
94 and binaries will be unredistributable [no]
3b327a4b
DB
95
96Configuration options:
97 --disable-static do not build static libraries [no]
98 --enable-shared build shared libraries [no]
99 --enable-small optimize for size instead of speed
100 --enable-runtime-cpudetect detect cpu capabilities at runtime (bigger binary)
101 --enable-gray enable full grayscale support (slower color)
102 --disable-swscale-alpha disable alpha channel support in swscale
844c6852 103 --disable-all disable building components, libraries and programs
3b327a4b 104
e28b7553
DB
105Program options:
106 --disable-programs do not build command line programs
6291d7e4 107 --disable-avconv disable avconv build
266463da 108 --disable-avplay disable avplay build
9e12f0bf 109 --disable-avprobe disable avprobe build
4d58e4cb 110 --disable-avserver disable avserver build
e28b7553
DB
111
112Component options:
113 --disable-doc do not build documentation
5a0f7131
MR
114 --disable-avdevice disable libavdevice build
115 --disable-avcodec disable libavcodec build
116 --disable-avformat disable libavformat build
d89f2fa9 117 --disable-avutil disable libavutil build
5a0f7131 118 --disable-swscale disable libswscale build
cccc039f 119 --disable-avfilter disable video filter support [no]
c8af852b 120 --disable-avresample disable libavresample build [no]
0dbfc1db 121 --disable-pthreads disable pthreads [auto]
7b7b220c 122 --disable-w32threads disable Win32 threads [auto]
06454877 123 --disable-network disable network support [no]
7f3f5f46 124 --disable-dct disable DCT code
193cdd9a 125 --disable-lsp disable LSP code
2a91ada8 126 --disable-lzo disable LZO decoder code
06454877
MR
127 --disable-mdct disable MDCT code
128 --disable-rdft disable RDFT code
3b327a4b 129 --disable-fft disable FFT code
70b348ec
DB
130
131Hardware accelerators:
3b327a4b 132 --enable-dxva2 enable DXVA2 code
dcb73592 133 --enable-vaapi enable VAAPI code
ac3dbb4d 134 --enable-vda enable VDA code
e8f6bd4b 135 --enable-vdpau enable VDPAU code
3b327a4b
DB
136
137Individual component options:
bb55e3a3 138 --disable-everything disable all components listed below
06454877
MR
139 --disable-encoder=NAME disable encoder NAME
140 --enable-encoder=NAME enable encoder NAME
141 --disable-encoders disable all encoders
142 --disable-decoder=NAME disable decoder NAME
143 --enable-decoder=NAME enable decoder NAME
144 --disable-decoders disable all decoders
145 --disable-hwaccel=NAME disable hwaccel NAME
146 --enable-hwaccel=NAME enable hwaccel NAME
147 --disable-hwaccels disable all hwaccels
148 --disable-muxer=NAME disable muxer NAME
149 --enable-muxer=NAME enable muxer NAME
150 --disable-muxers disable all muxers
151 --disable-demuxer=NAME disable demuxer NAME
152 --enable-demuxer=NAME enable demuxer NAME
153 --disable-demuxers disable all demuxers
154 --enable-parser=NAME enable parser NAME
155 --disable-parser=NAME disable parser NAME
156 --disable-parsers disable all parsers
157 --enable-bsf=NAME enable bitstream filter NAME
158 --disable-bsf=NAME disable bitstream filter NAME
159 --disable-bsfs disable all bitstream filters
160 --enable-protocol=NAME enable protocol NAME
161 --disable-protocol=NAME disable protocol NAME
162 --disable-protocols disable all protocols
3b327a4b 163 --enable-indev=NAME enable input device NAME
06454877 164 --disable-indev=NAME disable input device NAME
06454877 165 --disable-indevs disable input devices
3b327a4b
DB
166 --enable-outdev=NAME enable output device NAME
167 --disable-outdev=NAME disable output device NAME
06454877
MR
168 --disable-outdevs disable output devices
169 --disable-devices disable all devices
170 --enable-filter=NAME enable filter NAME
171 --disable-filter=NAME disable filter NAME
172 --disable-filters disable all filters
06454877
MR
173
174External library support:
175 --enable-avisynth enable reading of AVISynth script files [no]
176 --enable-bzlib enable bzlib [autodetect]
47941088 177 --enable-frei0r enable frei0r video filtering
bc8c1395 178 --enable-gnutls enable gnutls [no]
e417d80d 179 --enable-libcdio enable audio CD grabbing with libcdio
06454877
MR
180 --enable-libdc1394 enable IIDC-1394 grabbing using libdc1394
181 and libraw1394 [no]
c547e5ff
DB
182 --enable-libfaac enable AAC encoding via libfaac [no]
183 --enable-libfdk-aac enable AAC encoding via libfdk-aac [no]
a5b64584 184 --enable-libfreetype enable libfreetype [no]
c547e5ff 185 --enable-libgsm enable GSM de/encoding via libgsm [no]
3641b048 186 --enable-libilbc enable iLBC de/encoding via libilbc [no]
06454877 187 --enable-libmp3lame enable MP3 encoding via libmp3lame [no]
becc3c62
MS
188 --enable-libopencore-amrnb enable AMR-NB de/encoding via libopencore-amrnb [no]
189 --enable-libopencore-amrwb enable AMR-WB decoding via libopencore-amrwb [no]
190 --enable-libopencv enable video filtering via libopencv [no]
453c02f9 191 --enable-libopenjpeg enable JPEG 2000 de/encoding via OpenJPEG [no]
44617d6e 192 --enable-libopus enable Opus decoding via libopus [no]
7c922411 193 --enable-libpulse enable Pulseaudio input via libpulse [no]
0f943ce6 194 --enable-librtmp enable RTMP[E] support via librtmp [no]
c547e5ff
DB
195 --enable-libschroedinger enable Dirac de/encoding via libschroedinger [no]
196 --enable-libspeex enable Speex de/encoding via libspeex [no]
06454877 197 --enable-libtheora enable Theora encoding via libtheora [no]
d89e738a 198 --enable-libvo-aacenc enable AAC encoding via libvo-aacenc [no]
f502ff3f 199 --enable-libvo-amrwbenc enable AMR-WB encoding via libvo-amrwbenc [no]
c547e5ff 200 --enable-libvorbis enable Vorbis encoding via libvorbis [no]
3f111804 201 --enable-libvpx enable VP8 and VP9 de/encoding via libvpx [no]
06454877 202 --enable-libx264 enable H.264 encoding via x264 [no]
de295976 203 --enable-libxavs enable AVS encoding via xavs [no]
06454877
MR
204 --enable-libxvid enable Xvid encoding via xvidcore,
205 native MPEG-4/Xvid encoder exists [no]
a060866f 206 --enable-openssl enable openssl [no]
45235ac4 207 --enable-x11grab enable X11 grabbing [no]
06454877
MR
208 --enable-zlib enable zlib [autodetect]
209
210Advanced options (experts only):
06454877
MR
211 --cross-prefix=PREFIX use PREFIX for compilation tools [$cross_prefix]
212 --enable-cross-compile assume a cross-compiler is used
213 --sysroot=PATH root of cross-build tree
214 --sysinclude=PATH location of cross-build system headers
215 --target-os=OS compiler targets OS [$target_os]
216 --target-exec=CMD command to run executables on target
217 --target-path=DIR path to view of build directory on target
aeeb782c 218 --toolchain=NAME set tool defaults according to NAME
06454877 219 --nm=NM use nm tool
121d78d0 220 --ar=AR use archive tool AR [$ar_default]
06454877
MR
221 --as=AS use assembler AS [$as_default]
222 --cc=CC use C compiler CC [$cc_default]
193cdd9a 223 --dep-cc=DEPCC use dependency generator DEPCC [$cc_default]
06454877
MR
224 --ld=LD use linker LD
225 --host-cc=HOSTCC use host C compiler HOSTCC
226 --host-cflags=HCFLAGS use HCFLAGS when compiling for host
4cc4b33f 227 --host-cppflags=HCPPFLAGS use HCPPFLAGS when compiling for host
095792f2 228 --host-ld=HOSTLD use host linker HOSTLD
06454877
MR
229 --host-ldflags=HLDFLAGS use HLDFLAGS when linking for host
230 --host-libs=HLIBS use libs HLIBS when linking for host
193cdd9a 231 --host-os=OS compiler host OS [$target_os]
06454877
MR
232 --extra-cflags=ECFLAGS add ECFLAGS to CFLAGS [$CFLAGS]
233 --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]
234 --extra-libs=ELIBS add ELIBS [$ELIBS]
235 --extra-version=STRING version string suffix []
193cdd9a 236 --optflags=OPTFLAGS override optimization-related compiler flags
06454877 237 --build-suffix=SUFFIX library name suffix []
3b327a4b 238 --malloc-prefix=PREFIX prefix malloc and related names with PREFIX
06454877
MR
239 --arch=ARCH select architecture [$arch]
240 --cpu=CPU select the minimum required CPU (affects
241 instruction selection, may crash on older CPUs)
3b327a4b
DB
242 --enable-pic build position-independent code
243 --enable-sram allow use of on-chip SRAM
193cdd9a 244 --enable-thumb compile for Thumb instruction set
3b327a4b 245 --disable-symver disable symbol versioning
3b327a4b
DB
246 --enable-hardcoded-tables use hardcoded tables instead of runtime generation
247 --disable-safe-bitstream-reader
248 disable buffer boundary checking in bitreaders
249 (faster, but may crash)
250 --enable-memalign-hack emulate memalign, interferes with memory debuggers
65d12900 251 --enable-lto use link-time optimization
3b327a4b
DB
252
253Optimization options (experts only):
c8a4ae00 254 --disable-asm disable all assembler optimizations
06454877
MR
255 --disable-altivec disable AltiVec optimizations
256 --disable-amd3dnow disable 3DNow! optimizations
257 --disable-amd3dnowext disable 3DNow! extended optimizations
258 --disable-mmx disable MMX optimizations
239fdf1b 259 --disable-mmxext disable MMXEXT optimizations
06454877 260 --disable-sse disable SSE optimizations
50cd43f2
DB
261 --disable-sse2 disable SSE2 optimizations
262 --disable-sse3 disable SSE3 optimizations
06454877 263 --disable-ssse3 disable SSSE3 optimizations
50cd43f2
DB
264 --disable-sse4 disable SSE4 optimizations
265 --disable-sse42 disable SSE4.2 optimizations
87f1355f 266 --disable-avx disable AVX optimizations
79687079 267 --disable-fma4 disable FMA4 optimizations
06454877
MR
268 --disable-armv5te disable armv5te optimizations
269 --disable-armv6 disable armv6 optimizations
270 --disable-armv6t2 disable armv6t2 optimizations
b3267559 271 --disable-vfp disable VFP optimizations
5ea20630 272 --disable-neon disable NEON optimizations
06454877 273 --disable-vis disable VIS optimizations
afb5ed55 274 --disable-inline-asm disable use of inline assembler
06454877 275 --disable-yasm disable use of yasm assembler
06454877 276
070c5d0f 277Developer options (useful when working on Libav itself):
06454877
MR
278 --disable-debug disable debugging symbols
279 --enable-debug=LEVEL set the debug level [$debuglevel]
06454877
MR
280 --disable-optimizations disable compiler optimizations
281 --enable-extra-warnings enable more compiler warnings
52b3cc60 282 --samples=PATH location of test samples for FATE, if not set use
9309bdfe 283 \$LIBAV_SAMPLES at make invocation time.
7e4d9d5d
RB
284 --enable-xmm-clobber-test check XMM registers for clobbering (Win64-only;
285 should be used only for debugging purposes)
154caa67
MR
286 --enable-random randomly enable/disable components
287 --disable-random
288 --enable-random=LIST randomly enable/disable specific components or
289 --disable-random=LIST component groups. LIST is a comma-separated list
290 of NAME[:PROB] entries where NAME is a component
291 (group) and PROB the probability associated with
292 NAME (default 0.5).
293 --random-seed=VALUE seed value for --enable/disable-random
06454877
MR
294
295NOTE: Object files are built at the place where configure is launched.
296EOF
60e8bc13 297 exit 0
74c53c2d 298}
cf9d24ad 299
0884fadf
MR
300quotes='""'
301
57bd82d4 302log(){
2270b4b2 303 echo "$@" >> $logfile
57bd82d4
MR
304}
305
720c69da 306log_file(){
c8e9f801 307 log BEGIN $1
2270b4b2 308 pr -n -t $1 >> $logfile
c8e9f801
MR
309 log END $1
310}
311
2ba042a7 312echolog(){
c8e9f801 313 log "$@"
57bd82d4 314 echo "$@"
2ba042a7
MR
315}
316
7bfc8ae6
MR
317warn(){
318 log "WARNING: $*"
319 WARNINGS="${WARNINGS}WARNING: $*\n"
320}
321
2ba042a7
MR
322die(){
323 echolog "$@"
324 cat <<EOF
d326cf7f 325
2ba042a7 326If you think configure made a mistake, make sure you are using the latest
4a6a21f5 327version from Git. If the latest version fails, report the problem to the
070c5d0f 328libav-user@libav.org mailing list or IRC #libav on irc.freenode.net.
2ba042a7 329EOF
e155a21a 330 if disabled logging; then
2ba042a7 331 cat <<EOF
e155a21a
DB
332Rerun configure with logging enabled (do not use --disable-logging), and
333include the log this produces with your report.
2ba042a7
MR
334EOF
335 else
f69f51b3 336 cat <<EOF
e155a21a
DB
337Include the log file "$logfile" produced by configure as this will help
338solving the problem.
2ba042a7
MR
339EOF
340 fi
57bd82d4
MR
341 exit 1
342}
343
6c6007d6 344# Avoid locale weirdness, besides we really just want to translate ASCII.
44161118 345toupper(){
6c6007d6 346 echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
44161118
MR
347}
348
4a5444db 349tolower(){
6c6007d6 350 echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
4a5444db
MR
351}
352
14a8acf1
MR
353c_escape(){
354 echo "$*" | sed 's/["\\]/\\\0/g'
355}
356
b04251c5
MR
357sh_quote(){
358 v=$(echo "$1" | sed "s/'/'\\\\''/g")
d72c981c 359 test "x$v" = "x${v#*[!A-Za-z0-9_/.+-]}" || v="'$v'"
b04251c5
MR
360 echo "$v"
361}
362
bb7a22b5
MR
363cleanws(){
364 echo "$@" | sed 's/^ *//;s/ */ /g;s/ *$//'
365}
366
be8f2501
MR
367filter(){
368 pat=$1
369 shift
370 for v; do
98ef6079 371 eval "case $v in $pat) echo $v ;; esac"
be8f2501
MR
372 done
373}
374
9d201b26
MR
375filter_out(){
376 pat=$1
377 shift
378 for v; do
379 eval "case $v in $pat) ;; *) echo $v ;; esac"
380 done
381}
382
36e2dea0
MR
383map(){
384 m=$1
385 shift
e0e335a0 386 for v; do eval $m; done
36e2dea0
MR
387}
388
43b73d59
DB
389add_suffix(){
390 suffix=$1
391 shift
392 for v; do echo ${v}${suffix}; done
393}
394
a8d04fba
MR
395set_all(){
396 value=$1
397 shift
398 for var in $*; do
399 eval $var=$value
400 done
401}
402
72a43668
MR
403set_weak(){
404 value=$1
405 shift
406 for var; do
407 eval : \${$var:=$value}
408 done
409}
410
3f8040db
MR
411set_safe(){
412 var=$1
413 shift
414 eval $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')='$*'
415}
416
417get_safe(){
418 eval echo \$$(echo "$1" | sed 's/[^A-Za-z0-9_]/_/g')
419}
420
799c9e9b
MR
421pushvar(){
422 for var in $*; do
423 eval level=\${${var}_level:=0}
424 eval ${var}_${level}="\$$var"
425 eval ${var}_level=$(($level+1))
426 done
427}
428
429popvar(){
430 for var in $*; do
431 eval level=\${${var}_level:-0}
432 test $level = 0 && continue
433 eval level=$(($level-1))
434 eval $var="\${${var}_${level}}"
435 eval ${var}_level=$level
436 eval unset ${var}_${level}
437 done
438}
439
a8d04fba
MR
440enable(){
441 set_all yes $*
442}
443
444disable(){
445 set_all no $*
446}
447
72a43668
MR
448enable_weak(){
449 set_weak yes $*
450}
451
452disable_weak(){
453 set_weak no $*
454}
455
72702705 456enable_safe(){
fd07f803
MR
457 for var; do
458 enable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
459 done
72702705
MR
460}
461
462disable_safe(){
fd07f803
MR
463 for var; do
464 disable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
465 done
72702705
MR
466}
467
f9d328da
MR
468do_enable_deep(){
469 for var; do
470 enabled $var && continue
471 eval sel="\$${var}_select"
c510c7b5
MR
472 eval sgs="\$${var}_suggest"
473 pushvar var sgs
f9d328da 474 enable_deep $sel
c510c7b5
MR
475 popvar sgs
476 enable_deep_weak $sgs
f9d328da
MR
477 popvar var
478 done
479}
480
481enable_deep(){
482 do_enable_deep $*
483 enable $*
484}
485
72a43668
MR
486enable_deep_weak(){
487 do_enable_deep $*
488 enable_weak $*
489}
490
57bd82d4 491enabled(){
3250003c
MR
492 test "${1#!}" = "$1" && op== || op=!=
493 eval test "x\$${1#!}" $op "xyes"
44161118
MR
494}
495
37970ebf 496disabled(){
3250003c
MR
497 test "${1#!}" = "$1" && op== || op=!=
498 eval test "x\$${1#!}" $op "xno"
37970ebf
RP
499}
500
44161118
MR
501enabled_all(){
502 for opt; do
503 enabled $opt || return 1
504 done
505}
506
85bca2c5
DB
507disabled_all(){
508 for opt; do
509 disabled $opt || return 1
510 done
511}
512
44161118
MR
513enabled_any(){
514 for opt; do
515 enabled $opt && return 0
516 done
517}
518
85bca2c5
DB
519disabled_any(){
520 for opt; do
521 disabled $opt && return 0
522 done
f7b230a7 523 return 1
85bca2c5
DB
524}
525
c9d19248
MR
526set_default(){
527 for opt; do
88268e94 528 eval : \${$opt:=\$${opt}_default}
c9d19248
MR
529 done
530}
531
4a0d6686
AJ
532is_in(){
533 value=$1
534 shift
535 for var in $*; do
536 [ $var = $value ] && return 0
537 done
538 return 1
539}
540
d4f8cecc 541do_check_deps(){
30fd06be 542 for cfg; do
3250003c 543 cfg="${cfg#!}"
799c9e9b
MR
544 enabled ${cfg}_checking && die "Circular dependency for $cfg."
545 disabled ${cfg}_checking && continue
546 enable ${cfg}_checking
d4f8cecc 547 append allopts $cfg
799c9e9b 548
30fd06be
MR
549 eval dep_all="\$${cfg}_deps"
550 eval dep_any="\$${cfg}_deps_any"
7ef3425f 551 eval dep_sel="\$${cfg}_select"
c510c7b5 552 eval dep_sgs="\$${cfg}_suggest"
3d7453e0
MR
553 eval dep_ifa="\$${cfg}_if"
554 eval dep_ifn="\$${cfg}_if_any"
799c9e9b 555
3d7453e0 556 pushvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
d4f8cecc 557 do_check_deps $dep_all $dep_any $dep_sel $dep_sgs $dep_ifa $dep_ifn
3d7453e0 558 popvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
799c9e9b 559
3d7453e0
MR
560 [ -n "$dep_ifa" ] && { enabled_all $dep_ifa && enable_weak $cfg; }
561 [ -n "$dep_ifn" ] && { enabled_any $dep_ifn && enable_weak $cfg; }
6a702d4c
MR
562 enabled_all $dep_all || disable $cfg
563 enabled_any $dep_any || disable $cfg
7ef3425f 564 disabled_any $dep_sel && disable $cfg
799c9e9b 565
4ec45764 566 if enabled $cfg; then
f9d328da 567 enable_deep $dep_sel
c510c7b5 568 enable_deep_weak $dep_sgs
4ec45764
RP
569 fi
570
799c9e9b 571 disable ${cfg}_checking
30fd06be
MR
572 done
573}
574
d4f8cecc
MR
575check_deps(){
576 unset allopts
577
578 do_check_deps "$@"
579
580 for cfg in $allopts; do
581 enabled $cfg || continue
582 eval dep_extralibs="\$${cfg}_extralibs"
583 test -n "$dep_extralibs" && add_extralibs $dep_extralibs
584 done
585}
586
44161118
MR
587print_config(){
588 pfx=$1
72cfcf41
MR
589 files=$2
590 shift 2
f454e879
MR
591 map 'eval echo "$v \${$v:-no}"' "$@" |
592 awk "BEGIN { split(\"$files\", files) }
593 {
594 c = \"$pfx\" toupper(\$1);
595 v = \$2;
596 sub(/yes/, 1, v);
597 sub(/no/, 0, v);
598 for (f in files) {
599 file = files[f];
600 if (file ~ /\\.h\$/) {
601 printf(\"#define %s %d\\n\", c, v) >>file;
602 } else if (file ~ /\\.asm\$/) {
603 printf(\"%%define %s %d\\n\", c, v) >>file;
604 } else if (file ~ /\\.mak\$/) {
d16c4aeb 605 n = -v ? \"\" : \"!\";
f454e879
MR
606 printf(\"%s%s=yes\\n\", n, c) >>file;
607 }
608 }
609 }"
57bd82d4
MR
610}
611
31c0121d 612print_enabled(){
31c0121d
MR
613 suf=$1
614 shift
615 for v; do
9eda2a85 616 enabled $v && printf "%s\n" ${v%$suf};
31c0121d
MR
617 done
618}
619
57bd82d4
MR
620append(){
621 var=$1
622 shift
57bd82d4
MR
623 eval "$var=\"\$$var $*\""
624}
625
60361817
MR
626prepend(){
627 var=$1
628 shift
629 eval "$var=\"$* \$$var\""
630}
631
50a334e4 632add_cppflags(){
cd52ec95 633 append CPPFLAGS "$@"
50a334e4
MR
634}
635
57bd82d4 636add_cflags(){
01d31e16 637 append CFLAGS $($cflags_filter "$@")
57bd82d4
MR
638}
639
2f2e6c7c 640add_asflags(){
01d31e16 641 append ASFLAGS $($asflags_filter "$@")
2f2e6c7c
MR
642}
643
57bd82d4 644add_ldflags(){
64933b6c 645 append LDFLAGS $($ldflags_filter "$@")
57bd82d4
MR
646}
647
648add_extralibs(){
64933b6c 649 prepend extralibs $($ldflags_filter "$@")
57bd82d4
MR
650}
651
4cc4b33f
DB
652add_host_cppflags(){
653 append host_cppflags "$@"
654}
655
6c3fa06a
MR
656add_host_cflags(){
657 append host_cflags $($host_cflags_filter "$@")
658}
659
660add_host_ldflags(){
661 append host_ldflags $($host_ldflags_filter "$@")
662}
663
84e65c76
MR
664add_compat(){
665 append compat_objs $1
666 shift
667 map 'add_cppflags -D$v' "$@"
668}
669
b0cfb663 670check_cmd(){
b3cb5d51 671 log "$@"
2270b4b2 672 "$@" >> $logfile 2>&1
b0cfb663
MR
673}
674
b2704a65
MR
675cc_o(){
676 eval printf '%s\\n' $CC_O
677}
678
18031c49
MR
679cc_e(){
680 eval printf '%s\\n' $CC_E
681}
682
dcd479c0 683check_cc(){
57bd82d4 684 log check_cc "$@"
2270b4b2 685 cat > $TMPC
720c69da 686 log_file $TMPC
23565c26 687 check_cmd $cc $CPPFLAGS $CFLAGS "$@" $CC_C $(cc_o $TMPO) $TMPC
57bd82d4
MR
688}
689
690check_cpp(){
691 log check_cpp "$@"
2270b4b2 692 cat > $TMPC
720c69da 693 log_file $TMPC
18031c49 694 check_cmd $cc $CPPFLAGS $CFLAGS "$@" $(cc_e $TMPO) $TMPC
dcd479c0
MR
695}
696
df0d6341
MR
697as_o(){
698 eval printf '%s\\n' $AS_O
699}
700
f65883c8
MR
701check_as(){
702 log check_as "$@"
7fd90119
MR
703 cat > $TMPS
704 log_file $TMPS
705 check_cmd $as $CPPFLAGS $ASFLAGS "$@" $AS_C $(as_o $TMPO) $TMPS
f65883c8
MR
706}
707
575db883
DB
708check_inline_asm(){
709 log check_inline_asm "$@"
940f335a 710 name="$1"
3784e82e 711 code="$2"
940f335a 712 shift 2
49214f61 713 disable $name
7fd90119 714 check_cc "$@" <<EOF && enable $name
3784e82e 715void foo(void){ __asm__ volatile($code); }
940f335a
MR
716EOF
717}
718
c6ebc9fa
MR
719check_insn(){
720 log check_insn "$@"
721 check_inline_asm ${1}_inline "\"$2\""
722 echo "$2" | check_as && enable ${1}_external || disable ${1}_external
723}
724
304d586d
LM
725check_yasm(){
726 log check_yasm "$@"
727 echo "$1" > $TMPS
728 log_file $TMPS
729 shift 1
730 check_cmd $yasmexe $YASMFLAGS "$@" -o $TMPO $TMPS
731}
732
29b64b68
MR
733ld_o(){
734 eval printf '%s\\n' $LD_O
735}
736
dcd479c0 737check_ld(){
57bd82d4 738 log check_ld "$@"
66a1ccd7
MR
739 flags=$(filter_out '-l*' "$@")
740 libs=$(filter '-l*' "$@")
01d31e16 741 check_cc $($cflags_filter $flags) || return
64933b6c
MR
742 flags=$($ldflags_filter $flags)
743 libs=$($ldflags_filter $libs)
29b64b68 744 check_cmd $ld $LDFLAGS $flags $(ld_o $TMPE) $TMPO $libs $extralibs
dcd479c0
MR
745}
746
5adc829e
MR
747check_code(){
748 log check_code "$@"
749 check=$1
750 headers=$2
751 code=$3
752 shift 3
753 {
754 for hdr in $headers; do
755 echo "#include <$hdr>"
756 done
757 echo "int main(void) { $code; return 0; }"
758 } | check_$check "$@"
759}
760
50a334e4
MR
761check_cppflags(){
762 log check_cppflags "$@"
caf458dd 763 check_cc "$@" <<EOF && append CPPFLAGS "$@"
50a334e4
MR
764int x;
765EOF
766}
767
dcd479c0 768check_cflags(){
57bd82d4 769 log check_cflags "$@"
01d31e16 770 set -- $($cflags_filter "$@")
caf458dd 771 check_cc "$@" <<EOF && append CFLAGS "$@"
dcd479c0
MR
772int x;
773EOF
774}
775
2ed46eea
MR
776test_ldflags(){
777 log test_ldflags "$@"
778 check_ld "$@" <<EOF
c23a0ac8 779int main(void){ return 0; }
dcd479c0
MR
780EOF
781}
782
2ed46eea
MR
783check_ldflags(){
784 log check_ldflags "$@"
785 test_ldflags "$@" && add_ldflags "$@"
786}
787
dcd479c0 788check_header(){
57bd82d4 789 log check_header "$@"
dcd479c0
MR
790 header=$1
791 shift
b77df637
MR
792 disable_safe $header
793 check_cpp "$@" <<EOF && enable_safe $header
dcd479c0
MR
794#include <$header>
795int x;
796EOF
797}
798
799check_func(){
57bd82d4 800 log check_func "$@"
dcd479c0
MR
801 func=$1
802 shift
d8bc5f06
MR
803 disable $func
804 check_ld "$@" <<EOF && enable $func
dcd479c0 805extern int $func();
c23a0ac8 806int main(void){ $func(); }
dcd479c0
MR
807EOF
808}
809
645d2652 810check_mathfunc(){
6b73c0ae 811 log check_mathfunc "$@"
645d2652 812 func=$1
1aa07aa2
MR
813 narg=$2
814 shift 2
815 test $narg = 2 && args="f, g" || args="f"
645d2652
MR
816 disable $func
817 check_ld "$@" <<EOF && enable $func
818#include <math.h>
1aa07aa2 819float foo(float f, float g) { return $func($args); }
33bd38db 820int main(void){ return 0; }
645d2652
MR
821EOF
822}
823
2446d3d6
DB
824check_func_headers(){
825 log check_func_headers "$@"
f8d7b072 826 headers=$1
edaf1ae2 827 funcs=$2
f8d7b072 828 shift 2
edaf1ae2
MR
829 {
830 for hdr in $headers; do
831 echo "#include <$hdr>"
832 done
833 for func in $funcs; do
834 echo "long check_$func(void) { return (long) $func; }"
835 done
836 echo "int main(void) { return 0; }"
837 } | check_ld "$@" && enable $funcs && enable_safe $headers
f8d7b072
MR
838}
839
a5344cf7
SS
840check_cpp_condition(){
841 log check_cpp_condition "$@"
842 header=$1
843 condition=$2
f855b7b9 844 shift 2
cd52ec95 845 check_cpp "$@" <<EOF
a5344cf7
SS
846#include <$header>
847#if !($condition)
848#error "unsatisfied condition: $condition"
849#endif
850EOF
851}
852
57bd82d4
MR
853check_lib(){
854 log check_lib "$@"
855 header="$1"
856 func="$2"
857 shift 2
84400e9d 858 check_header $header && check_func $func "$@" && add_extralibs "$@"
57bd82d4
MR
859}
860
f8d7b072
MR
861check_lib2(){
862 log check_lib2 "$@"
863 headers="$1"
edaf1ae2 864 funcs="$2"
f8d7b072 865 shift 2
edaf1ae2 866 check_func_headers "$headers" "$funcs" "$@" && add_extralibs "$@"
f8d7b072
MR
867}
868
3f8040db
MR
869check_pkg_config(){
870 log check_pkg_config "$@"
871 pkg="$1"
872 headers="$2"
873 funcs="$3"
874 shift 3
875 $pkg_config --exists $pkg || return
876 pkg_cflags=$($pkg_config --cflags $pkg)
877 pkg_libs=$($pkg_config --libs $pkg)
878 check_func_headers "$headers" "$funcs" $pkg_cflags $pkg_libs "$@" &&
879 set_safe ${pkg}_cflags $pkg_cflags &&
880 set_safe ${pkg}_libs $pkg_libs
881}
882
dcd479c0 883check_exec(){
2270b4b2 884 check_ld "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
57bd82d4
MR
885}
886
7dfef245 887check_exec_crash(){
5e622c40 888 code=$(cat)
7dfef245
MR
889
890 # exit() is not async signal safe. _Exit (C99) and _exit (POSIX)
891 # are safe but may not be available everywhere. Thus we use
892 # raise(SIGTERM) instead. The check is run in a subshell so we
893 # can redirect the "Terminated" message from the shell. SIGBUS
894 # is not defined by standard C so it is used conditionally.
895
2270b4b2 896 (check_exec "$@") >> $logfile 2>&1 <<EOF
7dfef245
MR
897#include <signal.h>
898static void sighandler(int sig){
899 raise(SIGTERM);
900}
692dd8ed
MR
901int foo(void){
902 $code
903}
e5af4a11 904int main(void){
7dfef245
MR
905 signal(SIGILL, sighandler);
906 signal(SIGFPE, sighandler);
907 signal(SIGSEGV, sighandler);
908#ifdef SIGBUS
909 signal(SIGBUS, sighandler);
910#endif
692dd8ed 911 foo();
7dfef245
MR
912}
913EOF
914}
915
72be9e73
DY
916check_type(){
917 log check_type "$@"
918 headers=$1
919 type=$2
920 shift 2
ae550ce9 921 disable_safe "$type"
5adc829e 922 check_code cc "$headers" "$type v" "$@" && enable_safe "$type"
72be9e73
DY
923}
924
14d36751
MR
925check_struct(){
926 log check_type "$@"
927 headers=$1
928 struct=$2
929 member=$3
930 shift 3
931 disable_safe "${struct}_${member}"
5adc829e
MR
932 check_code cc "$headers" "const void *p = &(($struct *)0)->$member" "$@" &&
933 enable_safe "${struct}_${member}"
14d36751
MR
934}
935
57bd82d4
MR
936require(){
937 name="$1"
938 header="$2"
939 func="$3"
940 shift 3
941 check_lib $header $func "$@" || die "ERROR: $name not found"
dcd479c0
MR
942}
943
f8d7b072
MR
944require2(){
945 name="$1"
946 headers="$2"
947 func="$3"
948 shift 3
949 check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
950}
951
3f8040db
MR
952require_pkg_config(){
953 pkg="$1"
954 check_pkg_config "$@" || die "ERROR: $pkg not found"
955 add_cflags $(get_safe ${pkg}_cflags)
956 add_extralibs $(get_safe ${pkg}_libs)
957}
958
ae43c4c0
MR
959hostcc_o(){
960 eval printf '%s\\n' $HOSTCC_O
961}
962
f0125de9
MR
963check_host_cc(){
964 log check_host_cc "$@"
965 cat > $TMPC
966 log_file $TMPC
ae43c4c0 967 check_cmd $host_cc $host_cflags "$@" $HOSTCC_C $(hostcc_o $TMPO) $TMPC
f0125de9
MR
968}
969
4cc4b33f
DB
970check_host_cppflags(){
971 log check_host_cppflags "$@"
972 check_host_cc "$@" <<EOF && append host_cppflags "$@"
973int x;
974EOF
975}
976
f0125de9
MR
977check_host_cflags(){
978 log check_host_cflags "$@"
6c3fa06a 979 set -- $($host_cflags_filter "$@")
f0125de9
MR
980 check_host_cc "$@" <<EOF && append host_cflags "$@"
981int x;
982EOF
983}
984
c505dd31
MR
985apply(){
986 file=$1
987 shift
988 "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
989}
990
c34681df 991cp_if_changed(){
5e27ec28
MR
992 cmp -s "$1" "$2" && echo "$2 is unchanged" && return
993 mkdir -p "$(dirname $2)"
4ebc6a74 994 $cp_f "$1" "$2"
c34681df
MR
995}
996
dcd61286
DB
997# CONFIG_LIST contains configurable options, while HAVE_LIST is for
998# system-dependent things.
999
4a0d6686
AJ
1000COMPONENT_LIST="
1001 bsfs
1002 decoders
1003 demuxers
1004 encoders
3cde40aa 1005 filters
5666fd73 1006 hwaccels
c552605c 1007 indevs
4a0d6686 1008 muxers
c552605c 1009 outdevs
4a0d6686
AJ
1010 parsers
1011 protocols
1012"
1013
3fc09b00
MR
1014EXTERNAL_LIBRARY_LIST="
1015 avisynth
1016 bzlib
1017 frei0r
1018 gnutls
1019 libcdio
1020 libdc1394
1021 libfaac
1022 libfdk_aac
1023 libfreetype
1024 libgsm
1025 libilbc
1026 libmp3lame
1027 libopencore_amrnb
1028 libopencore_amrwb
1029 libopencv
1030 libopenjpeg
1031 libopus
1032 libpulse
1033 librtmp
1034 libschroedinger
1035 libspeex
1036 libtheora
1037 libvo_aacenc
1038 libvo_amrwbenc
1039 libvorbis
1040 libvpx
1041 libx264
1042 libxavs
1043 libxvid
1044 openssl
1045 x11grab
1046 zlib
1047"
1048
70b348ec
DB
1049HWACCEL_LIST="
1050 dxva2
1051 vaapi
1052 vda
1053 vdpau
1054"
d89f2fa9
DB
1055LIBRARY_LIST="
1056 avcodec
1057 avdevice
1058 avfilter
1059 avformat
1060 avresample
1061 avutil
1062 swscale
1063"
1064
055c61b8
DB
1065PROGRAM_LIST="
1066 avconv
1067 avplay
1068 avprobe
1069 avserver
055c61b8
DB
1070"
1071
4a0d6686
AJ
1072CONFIG_LIST="
1073 $COMPONENT_LIST
3fc09b00 1074 $EXTERNAL_LIBRARY_LIST
70b348ec 1075 $HWACCEL_LIST
d89f2fa9 1076 $LIBRARY_LIST
055c61b8 1077 $PROGRAM_LIST
7f3f5f46 1078 dct
c73f65d9 1079 doc
1848f7d9 1080 fft
c88f5d72 1081 gpl
d8d0d0b2 1082 gray
3abe5fbd 1083 hardcoded_tables
b781cc12 1084 lsp
2a91ada8 1085 lzo
47a158cb 1086 mdct
c88f5d72 1087 memalign_hack
c88f5d72 1088 network
3fe142e2 1089 nonfree
8a3c8627 1090 pic
68602540 1091 rdft
e90f5b5a 1092 runtime_cpudetect
8cfbbd92 1093 safe_bitstream_reader
2e35e684 1094 shared
bd2216e4 1095 small
6b35d421 1096 sram
2e35e684 1097 static
a9ddb5b1 1098 swscale_alpha
8986fddc 1099 thumb
9cad0e4e 1100 version3
7e4d9d5d 1101 xmm_clobber_test
4a0d6686 1102"
c88f5d72 1103
8eee7025 1104THREADS_LIST='
8eee7025
DB
1105 pthreads
1106 w32threads
1107'
1108
3f5b56e5 1109ARCH_LIST='
5873b623 1110 aarch64
3f5b56e5 1111 alpha
a2fc0f6a 1112 arm
fdcd782d
MR
1113 avr32
1114 avr32_ap
1115 avr32_uc
3f5b56e5
MR
1116 bfin
1117 ia64
1118 m68k
1119 mips
bae3abb0 1120 mips64
3f5b56e5 1121 parisc
79cb09b2 1122 ppc
34d11b87 1123 ppc64
3f5b56e5
MR
1124 s390
1125 sh4
1126 sparc
1127 sparc64
c75848cd
DB
1128 tilegx
1129 tilepro
0844bae1 1130 tomi
3f5b56e5
MR
1131 x86
1132 x86_32
1133 x86_64
1134'
1135
81dfa21e
MR
1136ARCH_EXT_LIST_ARM='
1137 armv5te
1138 armv6
1139 armv6t2
81dfa21e 1140 neon
b3267559 1141 vfp
81dfa21e
MR
1142 vfpv3
1143'
1144
50cd43f2 1145ARCH_EXT_LIST_X86='
3bf96eec 1146 amd3dnow
a1ef9f08 1147 amd3dnowext
50cd43f2
DB
1148 avx
1149 fma4
1150 mmx
1151 mmxext
1152 sse
1153 sse2
1154 sse3
1155 sse4
1156 sse42
1157 ssse3
1158'
1159
1160ARCH_EXT_LIST="
81dfa21e 1161 $ARCH_EXT_LIST_ARM
50cd43f2
DB
1162 $ARCH_EXT_LIST_X86
1163 altivec
799fde37 1164 ppc4xx
bd9d34a0 1165 vis
50cd43f2 1166"
3f5b56e5 1167
fd712a55
DB
1168HAVE_LIST_CMDLINE='
1169 inline_asm
1170 symver
1171 yasm
1172'
1173
a3e02a8c
MR
1174HAVE_LIST_PUB='
1175 bigendian
d268eee9 1176 fast_unaligned
a3e02a8c
MR
1177'
1178
79042ab3 1179MATH_FUNCS="
fab0a8b2
MR
1180 atanf
1181 atan2f
79042ab3 1182 cbrtf
fab0a8b2 1183 cosf
79042ab3
DB
1184 exp2
1185 exp2f
fab0a8b2 1186 expf
79042ab3
DB
1187 isinf
1188 isnan
fab0a8b2 1189 ldexpf
79042ab3
DB
1190 llrint
1191 llrintf
1192 log2
1193 log2f
fab0a8b2 1194 log10f
79042ab3
DB
1195 lrint
1196 lrintf
fab0a8b2 1197 powf
79042ab3
DB
1198 rint
1199 round
1200 roundf
fab0a8b2 1201 sinf
79042ab3
DB
1202 trunc
1203 truncf
1204"
1205
3f5b56e5
MR
1206HAVE_LIST="
1207 $ARCH_EXT_LIST
43b73d59
DB
1208 $(add_suffix _external $ARCH_EXT_LIST)
1209 $(add_suffix _inline $ARCH_EXT_LIST)
fd712a55 1210 $HAVE_LIST_CMDLINE
a3e02a8c 1211 $HAVE_LIST_PUB
3f5b56e5 1212 $THREADS_LIST
79042ab3 1213 $MATH_FUNCS
be1a839c 1214 aligned_malloc
59782b82 1215 aligned_stack
35fd8122 1216 alsa_asoundlib_h
3f5b56e5 1217 altivec_h
c9fdab0d 1218 arpa_inet_h
ec9d2c15 1219 asm_mod_q
6308729e 1220 asm_mod_y
dffb41b9 1221 attribute_may_alias
e7ea5e3d 1222 attribute_packed
43e0e0c4
LB
1223 cdio_paranoia_h
1224 cdio_paranoia_paranoia_h
ecf97f22 1225 closesocket
1ac9331a 1226 cmov
15caccb9 1227 CommandLineToArgvW
180d43bc 1228 cpunop
1093383d 1229 CryptGenRandom
c88f5d72 1230 dcbzl
f8aa696f
DB
1231 dev_bktr_ioctl_bt848_h
1232 dev_bktr_ioctl_meteor_h
1233 dev_ic_bt8xx_h
f8aa696f 1234 dev_video_bktr_ioctl_bt848_h
3e0b1c9a 1235 dev_video_meteor_ioctl_meteor_h
ca6b544a 1236 direct_h
18b67ae5 1237 dlfcn_h
c88f5d72 1238 dlopen
bc574408 1239 dos_paths
fa845061 1240 dxva_h
245626d0
DB
1241 ebp_available
1242 ebx_available
c2a29455 1243 fast_64bit
669b5583 1244 fast_clz
7073e9fc 1245 fast_cmov
534a2231 1246 fcntl
9d99cc5a 1247 fork
84882df6 1248 getaddrinfo
da9e86f8 1249 gethrtime
667fb97a 1250 getopt
02e8f427 1251 GetProcessAffinityMask
fc5607f8 1252 GetProcessMemoryInfo
4e68cb8a 1253 GetProcessTimes
61183b5a 1254 GetSystemTimeAsFileTime
66be5b45 1255 getrusage
c3e73100 1256 getservbyport
61183b5a 1257 gettimeofday
a49d3025 1258 gnu_as
c7df1532 1259 gsm_h
2f0c136e 1260 ibm_asm
2e1913b1 1261 inet_aton
3b1ab197 1262 io_h
abfc8d05 1263 isatty
8772997d 1264 jack_port_get_latency_range
9f5ff83f 1265 ldbrx
0b4a1821
AS
1266 libdc1394_1
1267 libdc1394_2
d96cd429
MR
1268 local_aligned_16
1269 local_aligned_8
a5b64584 1270 localtime_r
85dd97ad 1271 loongson
f8aa696f
DB
1272 machine_ioctl_bt848_h
1273 machine_ioctl_meteor_h
c88f5d72 1274 malloc_h
73f6d31e 1275 MapViewOfFile
c88f5d72 1276 memalign
6ffa87d3 1277 mkstemp
f80ddd5b 1278 mm_empty
0328b9ea 1279 mmap
e98b02de 1280 mprotect
4fa661a8 1281 msvcrt
d3d3a32c 1282 nanosleep
3e0b1c9a 1283 poll_h
1f91cdce 1284 posix_memalign
07b28702 1285 rdtsc
ea4d5f48 1286 sched_getaffinity
c88f5d72
MR
1287 sdl
1288 sdl_video_size
7e6a11bc 1289 SetConsoleTextAttribute
b507ebd1 1290 setmode
3e0b1c9a 1291 setrlimit
d3d3a32c 1292 Sleep
15d59d2c 1293 sndio_h
72be9e73 1294 socklen_t
deb29777 1295 soundcard_h
87958234 1296 strerror_r
6379900c 1297 strptime
47941088 1298 strtok_r
c0018613 1299 struct_addrinfo
75d339e0
MS
1300 struct_group_source_req
1301 struct_ip_mreq_source
b4d68544 1302 struct_ipv6_mreq
cdee08e3 1303 struct_pollfd
3e0b1c9a 1304 struct_rusage_ru_maxrss
b4d68544 1305 struct_sockaddr_in6
3b2372bf 1306 struct_sockaddr_sa_len
33a4dbdd 1307 struct_sockaddr_storage
a6a4793d 1308 struct_v4l2_frmivalenum_discrete
b462d132 1309 symver_asm_label
3e0b1c9a 1310 symver_gnu_asm
bcc73960 1311 sysconf
b9e22269 1312 sysctl
b58412f1 1313 sys_mman_h
06bb5905 1314 sys_param_h
b091aa44 1315 sys_resource_h
81644c2e 1316 sys_select_h
deb29777 1317 sys_soundcard_h
e64bceea 1318 sys_time_h
1b6e8b73 1319 sys_videoio_h
b265431e 1320 threads
542920b7 1321 unistd_h
d3d3a32c 1322 usleep
ce742de2 1323 vfp_args
7c5bfe7a 1324 VirtualAlloc
d3d3a32c 1325 windows_h
6ff3f3e7 1326 winsock2_h
cc078b5d 1327 xform_asm
6f74fb03 1328 xmm_clobbers
0cb78cef 1329"
44161118 1330
511cf612 1331# options emitted with CONFIG_ prefix but not available on the command line
b6bb00b0 1332CONFIG_EXTRA="
87849592 1333 aandcttables
bfe9f48a 1334 ac3dsp
aa11cb79 1335 audio_frame_queue
c292f6a2 1336 error_resilience
bfe9f48a 1337 gcrypt
478fd534 1338 golomb
9cad0e4e 1339 gplv3
478fd534
DB
1340 h264chroma
1341 h264dsp
1342 h264pred
915a2a0a 1343 h264qpel
478fd534 1344 huffman
9cad0e4e 1345 lgplv3
478fd534 1346 lpc
1e164c0b 1347 mpegaudio
bfe9f48a 1348 mpegaudiodsp
18bbca1f 1349 mpegvideo
ad08dfd5 1350 mpegvideoenc
bfe9f48a 1351 nettle
f704a079 1352 rangecoder
bfe9f48a 1353 rtpdec
5ad2f0bf 1354 rtpenc_chain
bfe9f48a 1355 sinewin
8c53d39e 1356 videodsp
ab9f9876 1357 vp3dsp
b6bb00b0
MR
1358"
1359
520cc7f1 1360CMDLINE_SELECT="
3f5b56e5 1361 $ARCH_EXT_LIST
520cc7f1 1362 $CONFIG_LIST
fd712a55 1363 $HAVE_LIST_CMDLINE
8eee7025 1364 $THREADS_LIST
c8a4ae00 1365 asm
db6107b6 1366 cross_compile
520cc7f1
MR
1367 debug
1368 extra_warnings
8c6afa4d 1369 logging
65d12900 1370 lto
d2bbb2f7 1371 optimizations
520cc7f1 1372"
426be5dc
DB
1373
1374PATHS_LIST='
d156bede 1375 bindir
14a8acf1 1376 datadir
26759c44
MR
1377 incdir
1378 libdir
26759c44
MR
1379 mandir
1380 prefix
1381 shlibdir
426be5dc
DB
1382'
1383
1384CMDLINE_SET="
1385 $PATHS_LIST
121d78d0 1386 ar
426be5dc 1387 arch
313c46a6 1388 as
426be5dc
DB
1389 build_suffix
1390 cc
1391 cpu
1392 cross_prefix
50567afa 1393 dep_cc
ac63af34 1394 extra_version
9da6609f
MR
1395 host_cc
1396 host_cflags
095792f2 1397 host_ld
9da6609f
MR
1398 host_ldflags
1399 host_libs
82bb3329 1400 host_os
684b28e0 1401 ld
426be5dc 1402 logfile
4ae40685 1403 malloc_prefix
89641463 1404 nm
9cd7b854 1405 optflags
3f8040db 1406 pkg_config
154caa67 1407 random_seed
2fad0977 1408 samples
c5200f17
MR
1409 sysinclude
1410 sysroot
a7ada2ba 1411 target_exec
26759c44 1412 target_os
a7ada2ba 1413 target_path
aeeb782c 1414 toolchain
426be5dc 1415"
520cc7f1 1416
89f2932b
MR
1417CMDLINE_APPEND="
1418 extra_cflags
4cc4b33f 1419 host_cppflags
89f2932b
MR
1420"
1421
912f3148
DB
1422# code dependency declarations
1423
9eeed841 1424# architecture extensions
808fa33c 1425
a2fc0f6a
MR
1426armv5te_deps="arm"
1427armv6_deps="arm"
ab5cb084 1428armv6t2_deps="arm"
808fa33c 1429neon_deps="arm"
b3267559
MR
1430vfp_deps="arm"
1431vfpv3_deps="vfp"
808fa33c 1432
637606de
MR
1433map 'eval ${v}_inline_deps=inline_asm' $ARCH_EXT_LIST_ARM
1434
808fa33c
MR
1435altivec_deps="ppc"
1436ppc4xx_deps="ppc"
1437
1438vis_deps="sparc"
1439
7f8c3d1f 1440x86_64_suggest="cmov fast_cmov"
50cd43f2 1441
808fa33c
MR
1442amd3dnow_deps="mmx"
1443amd3dnowext_deps="amd3dnow"
9eeed841 1444mmx_deps="x86"
239fdf1b 1445mmxext_deps="mmx"
50cd43f2
DB
1446sse_deps="mmxext"
1447sse2_deps="sse"
1448sse3_deps="sse2"
1449ssse3_deps="sse3"
1450sse4_deps="ssse3"
1451sse42_deps="sse4"
1452avx_deps="sse42"
79687079 1453fma4_deps="avx"
9eeed841 1454
43b73d59
DB
1455mmx_external_deps="yasm"
1456mmx_inline_deps="inline_asm"
1457mmx_suggest="mmx_external mmx_inline"
1458
1459for ext in $(filter_out mmx $ARCH_EXT_LIST_X86); do
1460 eval dep=\$${ext}_deps
1461 eval ${ext}_external_deps='"${dep}_external"'
1462 eval ${ext}_inline_deps='"${dep}_inline"'
1463 eval ${ext}_suggest='"${ext}_external ${ext}_inline"'
1464done
1465
59782b82 1466aligned_stack_if_any="ppc x86"
e939cedd 1467fast_64bit_if_any="alpha ia64 mips64 parisc64 ppc64 sparc64 x86_64"
f0fe245b
MR
1468fast_clz_if_any="alpha avr32 mips ppc x86"
1469fast_unaligned_if_any="ppc x86"
669b5583 1470
6fec122a 1471inline_asm_deps="!tms470"
3e0b1c9a 1472need_memalign="altivec neon sse"
89e053f8 1473
b462d132
MR
1474symver_if_any="symver_asm_label symver_gnu_asm"
1475
88a35699
MS
1476log2_deps="!msvcrt"
1477
26fbcc85 1478# subsystems
dc609252 1479dct_select="rdft"
26fbcc85
MR
1480mdct_select="fft"
1481rdft_select="fft"
1e164c0b 1482mpegaudio_select="mpegaudiodsp"
c4f5c2d6 1483mpegaudiodsp_select="dct"
ed40b6bf 1484mpegvideo_select="videodsp"
ad08dfd5 1485mpegvideoenc_select="mpegvideo"
26fbcc85 1486
ed40b6bf 1487# decoders / encoders
cfc2a0cf 1488aac_decoder_select="mdct sinewin"
aa11cb79 1489aac_encoder_select="audio_frame_queue mdct sinewin"
136e19e1 1490aac_latm_decoder_select="aac_decoder aac_latm_parser"
6d9f52b2 1491ac3_decoder_select="mdct ac3dsp ac3_parser"
a5444fee 1492ac3_encoder_select="mdct ac3dsp"
3d269059 1493ac3_fixed_encoder_select="mdct ac3dsp"
f4d608e3 1494alac_encoder_select="lpc"
b781cc12 1495amrnb_decoder_select="lsp"
2b2a597e 1496amrwb_decoder_select="lsp"
4538729a 1497atrac1_decoder_select="mdct sinewin"
26fbcc85 1498atrac3_decoder_select="mdct"
a33657ce
DB
1499binkaudio_dct_decoder_select="mdct rdft dct sinewin"
1500binkaudio_rdft_decoder_select="mdct rdft sinewin"
18bbca1f 1501cavs_decoder_select="golomb mpegvideo"
9b500b8f 1502comfortnoise_encoder_select="lpc"
4538729a 1503cook_decoder_select="mdct sinewin"
2a91ada8 1504cscd_decoder_select="lzo"
2eef7c62 1505cscd_decoder_suggest="zlib"
26fbcc85 1506dca_decoder_select="mdct"
ad08dfd5 1507dnxhd_encoder_select="aandcttables mpegvideoenc"
2eef7c62 1508dxa_decoder_select="zlib"
baf91bb9 1509eac3_decoder_select="ac3_decoder"
4264a0dd 1510eac3_encoder_select="ac3_encoder"
69804535 1511eamad_decoder_select="aandcttables error_resilience mpegvideo"
87849592 1512eatgq_decoder_select="aandcttables"
c292f6a2 1513eatqi_decoder_select="aandcttables error_resilience mpegvideo"
f704a079
DB
1514ffv1_decoder_select="golomb rangecoder"
1515ffv1_encoder_select="rangecoder"
5a582bd3 1516ffvhuff_encoder_select="huffman"
4f034993 1517flac_decoder_select="golomb"
f4d608e3 1518flac_encoder_select="golomb lpc"
2eef7c62
AJ
1519flashsv_decoder_select="zlib"
1520flashsv_encoder_select="zlib"
c2d23309 1521flashsv2_decoder_select="zlib"
4414137e 1522flv_decoder_select="h263_decoder"
4d4b4bd1 1523flv_encoder_select="h263_encoder"
3447f12d 1524fraps_decoder_select="huffman"
c292f6a2 1525h261_decoder_select="error_resilience mpegvideo"
ad08dfd5 1526h261_encoder_select="aandcttables mpegvideoenc"
c292f6a2
DB
1527h263_decoder_select="error_resilience h263_parser mpegvideo"
1528h263_encoder_select="aandcttables error_resilience mpegvideoenc"
4414137e 1529h263i_decoder_select="h263_decoder"
fe629c2d 1530h263p_encoder_select="h263_encoder"
c292f6a2 1531h264_decoder_select="error_resilience golomb h264chroma h264dsp h264pred h264qpel mpegvideo"
5a582bd3 1532huffyuv_encoder_select="huffman"
19be0f3c 1533iac_decoder_select="fft mdct sinewin"
56c8227d 1534imc_decoder_select="fft mdct sinewin"
4f034993
MR
1535jpegls_decoder_select="golomb"
1536jpegls_encoder_select="golomb"
ad08dfd5 1537ljpeg_encoder_select="aandcttables mpegvideoenc"
4f034993 1538loco_decoder_select="golomb"
c292f6a2 1539mdec_decoder_select="error_resilience mpegvideo"
ad08dfd5 1540mjpeg_encoder_select="aandcttables mpegvideoenc"
2cca233b 1541mlp_decoder_select="mlp_parser"
1e164c0b
DB
1542mp1_decoder_select="mpegaudio"
1543mp1float_decoder_select="mpegaudio"
1544mp2_decoder_select="mpegaudio"
1545mp2float_decoder_select="mpegaudio"
1546mp3_decoder_select="mpegaudio"
1547mp3adu_decoder_select="mpegaudio"
1548mp3adufloat_decoder_select="mpegaudio"
1549mp3float_decoder_select="mpegaudio"
1550mp3on4_decoder_select="mpegaudio"
1551mp3on4float_decoder_select="mpegaudio"
606c9297
DB
1552mpc7_decoder_select="mpegaudiodsp"
1553mpc8_decoder_select="mpegaudiodsp"
3e0b1c9a
DB
1554mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h"
1555mpeg_xvmc_decoder_select="mpegvideo_decoder"
c292f6a2
DB
1556mpeg1video_decoder_select="error_resilience mpegvideo"
1557mpeg1video_encoder_select="aandcttables error_resilience mpegvideoenc"
c292f6a2
DB
1558mpeg2video_decoder_select="error_resilience mpegvideo"
1559mpeg2video_encoder_select="aandcttables error_resilience mpegvideoenc"
3e0b1c9a
DB
1560mpeg4_decoder_select="h263_decoder mpeg4video_parser"
1561mpeg4_encoder_select="h263_encoder"
4414137e 1562msmpeg4v1_decoder_select="h263_decoder"
4e169d89 1563msmpeg4v1_encoder_select="h263_encoder"
4414137e 1564msmpeg4v2_decoder_select="h263_decoder"
4e169d89 1565msmpeg4v2_encoder_select="h263_encoder"
4414137e 1566msmpeg4v3_decoder_select="h263_decoder"
4e169d89 1567msmpeg4v3_encoder_select="h263_encoder"
ee769c6a 1568mss2_decoder_select="vc1_decoder"
4538729a 1569nellymoser_decoder_select="mdct sinewin"
aa11cb79 1570nellymoser_encoder_select="audio_frame_queue mdct sinewin"
2a91ada8 1571nuv_decoder_select="lzo"
2eef7c62
AJ
1572png_decoder_select="zlib"
1573png_encoder_select="zlib"
b781cc12 1574qcelp_decoder_select="lsp"
c4f5c2d6 1575qdm2_decoder_select="mdct rdft mpegaudiodsp"
aa11cb79 1576ra_144_encoder_select="audio_frame_queue lpc"
9f43fdda 1577ralf_decoder_select="golomb"
a8beb22f 1578rv10_decoder_select="h263_decoder"
b2bf38b4 1579rv10_encoder_select="h263_encoder"
a8beb22f 1580rv20_decoder_select="h263_decoder"
b2bf38b4 1581rv20_encoder_select="h263_encoder"
c292f6a2
DB
1582rv30_decoder_select="error_resilience golomb h264chroma h264pred h264qpel mpegvideo"
1583rv40_decoder_select="error_resilience golomb h264chroma h264pred h264qpel mpegvideo"
4f034993 1584shorten_decoder_select="golomb"
b781cc12 1585sipr_decoder_select="lsp"
c292f6a2
DB
1586svq1_decoder_select="error_resilience mpegvideo"
1587svq1_encoder_select="aandcttables error_resilience mpegvideoenc"
1588svq3_decoder_select="error_resilience golomb h264chroma h264dsp h264pred h264qpel mpegvideo"
bee2eac5 1589svq3_decoder_suggest="zlib"
4eef77c1 1590theora_decoder_select="vp3_decoder"
2eef7c62
AJ
1591tiff_decoder_suggest="zlib"
1592tiff_encoder_suggest="zlib"
aec09a00 1593truehd_decoder_select="mlp_decoder"
2eef7c62 1594tscc_decoder_select="zlib"
4538729a 1595twinvq_decoder_select="mdct lsp sinewin"
aa661113 1596utvideo_encoder_select="huffman"
915a2a0a 1597vc1_decoder_select="h263_decoder h264chroma h264qpel"
45ecda85 1598vc1image_decoder_select="vc1_decoder"
26fbcc85
MR
1599vorbis_decoder_select="mdct"
1600vorbis_encoder_select="mdct"
8c53d39e
RB
1601vp3_decoder_select="vp3dsp videodsp"
1602vp5_decoder_select="vp3dsp videodsp"
1603vp6_decoder_select="huffman vp3dsp videodsp"
e82dc4c9
DB
1604vp6a_decoder_select="vp6_decoder"
1605vp6f_decoder_select="vp6_decoder"
8c53d39e 1606vp8_decoder_select="h264pred videodsp"
4538729a
MR
1607wmapro_decoder_select="mdct sinewin"
1608wmav1_decoder_select="mdct sinewin"
1609wmav1_encoder_select="mdct sinewin"
1610wmav2_decoder_select="mdct sinewin"
1611wmav2_encoder_select="mdct sinewin"
1612wmavoice_decoder_select="lsp rdft dct mdct sinewin"
f95bfab0 1613wmv1_decoder_select="h263_decoder"
665507aa 1614wmv1_encoder_select="h263_encoder"
f95bfab0 1615wmv2_decoder_select="h263_decoder"
1746e2a9 1616wmv2_encoder_select="h263_encoder"
015f8ee0 1617wmv3_decoder_select="vc1_decoder"
45ecda85 1618wmv3image_decoder_select="wmv3_decoder"
0e714f88 1619zerocodec_decoder_select="zlib"
2eef7c62
AJ
1620zlib_decoder_select="zlib"
1621zlib_encoder_select="zlib"
1622zmbv_decoder_select="zlib"
1623zmbv_encoder_select="zlib"
30fd06be 1624
ed40b6bf 1625# hardware accelerators
215cdd35 1626dxva2_deps="dxva2api_h"
0afab17e 1627vaapi_deps="va_va_h"
ac3dbb4d 1628vda_deps="VideoDecodeAcceleration_VDADecoder_h pthreads"
9840130e 1629vda_extralibs="-framework CoreFoundation -framework VideoDecodeAcceleration -framework QuartzCore"
c89c96e9
MR
1630vdpau_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1631
82ca17ac
DB
1632h263_vaapi_hwaccel_deps="vaapi"
1633h263_vaapi_hwaccel_select="h263_decoder"
1634h263_vdpau_hwaccel_deps="vdpau"
1635h263_vdpau_hwaccel_select="h263_decoder"
215cdd35
DB
1636h264_dxva2_hwaccel_deps="dxva2"
1637h264_dxva2_hwaccel_select="h264_decoder"
82ca17ac
DB
1638h264_vaapi_hwaccel_deps="vaapi"
1639h264_vaapi_hwaccel_select="h264_decoder"
1640h264_vda_hwaccel_deps="vda"
1641h264_vda_hwaccel_select="h264_decoder"
1642h264_vdpau_decoder_deps="vdpau"
1643h264_vdpau_decoder_select="h264_decoder"
1644h264_vdpau_hwaccel_deps="vdpau"
1645h264_vdpau_hwaccel_select="h264_decoder"
1646mpeg_vdpau_decoder_deps="vdpau"
1647mpeg_vdpau_decoder_select="mpegvideo_decoder"
1648mpeg1_vdpau_decoder_deps="vdpau"
1649mpeg1_vdpau_decoder_select="mpeg1video_decoder"
1650mpeg1_vdpau_hwaccel_deps="vdpau"
1651mpeg1_vdpau_hwaccel_select="mpeg1video_decoder"
215cdd35
DB
1652mpeg2_dxva2_hwaccel_deps="dxva2"
1653mpeg2_dxva2_hwaccel_select="mpeg2video_decoder"
82ca17ac
DB
1654mpeg2_vaapi_hwaccel_deps="vaapi"
1655mpeg2_vaapi_hwaccel_select="mpeg2video_decoder"
1656mpeg2_vdpau_hwaccel_deps="vdpau"
1657mpeg2_vdpau_hwaccel_select="mpeg2video_decoder"
1658mpeg4_vaapi_hwaccel_deps="vaapi"
1659mpeg4_vaapi_hwaccel_select="mpeg4_decoder"
1660mpeg4_vdpau_decoder_deps="vdpau"
1661mpeg4_vdpau_decoder_select="mpeg4_decoder"
1662mpeg4_vdpau_hwaccel_deps="vdpau"
1663mpeg4_vdpau_hwaccel_select="mpeg4_decoder"
215cdd35
DB
1664vc1_dxva2_hwaccel_deps="dxva2"
1665vc1_dxva2_hwaccel_select="vc1_decoder"
82ca17ac
DB
1666vc1_vaapi_hwaccel_deps="vaapi"
1667vc1_vaapi_hwaccel_select="vc1_decoder"
1668vc1_vdpau_decoder_deps="vdpau"
1669vc1_vdpau_decoder_select="vc1_decoder"
1670vc1_vdpau_hwaccel_deps="vdpau"
1671vc1_vdpau_hwaccel_select="vc1_decoder"
ed40b6bf
DB
1672wmv3_dxva2_hwaccel_select="vc1_dxva2_hwaccel"
1673wmv3_vaapi_hwaccel_select="vc1_vaapi_hwaccel"
1674wmv3_vdpau_decoder_select="vc1_vdpau_decoder"
77525327 1675wmv3_vdpau_hwaccel_select="vc1_vdpau_hwaccel"
ed40b6bf 1676
28b80940 1677# parsers
79dad2a9 1678h264_parser_select="error_resilience golomb h264chroma h264dsp h264pred h264qpel mpegvideo"
c292f6a2
DB
1679mpeg4video_parser_select="error_resilience mpegvideo"
1680mpegvideo_parser_select="error_resilience mpegvideo"
1681vc1_parser_select="error_resilience mpegvideo"
28b80940 1682
912f3148 1683# external libraries
c9171a83 1684libfaac_encoder_deps="libfaac"
aa11cb79 1685libfaac_encoder_select="audio_frame_queue"
37eeb5e2 1686libfdk_aac_encoder_deps="libfdk_aac"
aa11cb79 1687libfdk_aac_encoder_select="audio_frame_queue"
299c77d5
MR
1688libgsm_decoder_deps="libgsm"
1689libgsm_encoder_deps="libgsm"
8ffed8d8
MR
1690libgsm_ms_decoder_deps="libgsm"
1691libgsm_ms_encoder_deps="libgsm"
3641b048
MS
1692libilbc_decoder_deps="libilbc"
1693libilbc_encoder_deps="libilbc"
1cc60c47 1694libmp3lame_encoder_deps="libmp3lame"
aa11cb79 1695libmp3lame_encoder_select="audio_frame_queue"
0b175caa
DB
1696libopencore_amrnb_decoder_deps="libopencore_amrnb"
1697libopencore_amrnb_encoder_deps="libopencore_amrnb"
aa11cb79 1698libopencore_amrnb_encoder_select="audio_frame_queue"
0b175caa 1699libopencore_amrwb_decoder_deps="libopencore_amrwb"
9a77d59a 1700libopenjpeg_decoder_deps="libopenjpeg"
453c02f9 1701libopenjpeg_encoder_deps="libopenjpeg"
44617d6e 1702libopus_decoder_deps="libopus"
6cb8c854 1703libopus_encoder_deps="libopus"
aa11cb79 1704libopus_encoder_select="audio_frame_queue"
f7cd9eed
AS
1705libschroedinger_decoder_deps="libschroedinger"
1706libschroedinger_encoder_deps="libschroedinger"
ae14f311 1707libspeex_decoder_deps="libspeex"
b606a017 1708libspeex_encoder_deps="libspeex"
aa11cb79 1709libspeex_encoder_select="audio_frame_queue"
150d2772 1710libtheora_encoder_deps="libtheora"
d89e738a 1711libvo_aacenc_encoder_deps="libvo_aacenc"
aa11cb79 1712libvo_aacenc_encoder_select="audio_frame_queue"
f502ff3f 1713libvo_amrwbenc_encoder_deps="libvo_amrwbenc"
b0caf888 1714libvorbis_encoder_deps="libvorbis"
aa11cb79 1715libvorbis_encoder_select="audio_frame_queue"
3f111804
LB
1716libvpx_vp8_decoder_deps="libvpx"
1717libvpx_vp8_encoder_deps="libvpx"
1718libvpx_vp9_decoder_deps="libvpx"
1719libvpx_vp9_encoder_deps="libvpx"
1cc60c47 1720libx264_encoder_deps="libx264"
de295976 1721libxavs_encoder_deps="libxavs"
1cc60c47 1722libxvid_encoder_deps="libxvid"
30fd06be 1723
912f3148 1724# demuxers / muxers
c2dd0e9e 1725ac3_demuxer_select="ac3_parser"
647c2356 1726asf_stream_muxer_select="asf_muxer"
4e622dea 1727avisynth_demuxer_deps="avisynth"
c2dd0e9e 1728dirac_demuxer_select="dirac_parser"
5b423887 1729eac3_demuxer_select="ac3_parser"
c2dd0e9e 1730flac_demuxer_select="flac_parser"
647c2356 1731ipod_muxer_select="mov_muxer"
31f16dc1 1732ismv_muxer_select="mov_muxer"
647c2356 1733matroska_audio_muxer_select="matroska_muxer"
2a91ada8 1734matroska_demuxer_suggest="bzlib lzo zlib"
4e622dea 1735mov_demuxer_suggest="zlib"
5ad2f0bf 1736mov_muxer_select="rtpenc_chain"
c2dd0e9e 1737mp3_demuxer_select="mpegaudio_parser"
647c2356 1738mp4_muxer_select="mov_muxer"
18bbca1f 1739mpegts_muxer_select="adts_muxer latm_muxer mpegvideo"
647c2356
DB
1740mpegtsraw_demuxer_select="mpegts_demuxer"
1741mxf_d10_muxer_select="mxf_muxer"
24ca518b 1742ogg_demuxer_select="golomb"
647c2356 1743psp_muxer_select="mov_muxer"
44594cc7 1744rtp_demuxer_select="sdp_demuxer"
18bbca1f 1745rtp_muxer_select="mpegvideo"
44b70ce5
MS
1746rtpdec_select="asf_demuxer rm_demuxer rtp_protocol mpegts_demuxer mov_demuxer"
1747rtsp_demuxer_select="http_protocol rtpdec"
5ad2f0bf 1748rtsp_muxer_select="rtp_muxer http_protocol rtp_protocol rtpenc_chain"
01c8d258 1749sap_demuxer_select="sdp_demuxer"
5ad2f0bf 1750sap_muxer_select="rtp_muxer rtp_protocol rtpenc_chain"
44b70ce5 1751sdp_demuxer_select="rtpdec"
e772f9fa 1752smoothstreaming_muxer_select="ismv_muxer"
f1e94694 1753spdif_muxer_select="aac_parser"
57231e4d 1754tak_demuxer_select="tak_parser"
647c2356
DB
1755tg2_muxer_select="mov_muxer"
1756tgp_muxer_select="mov_muxer"
6bdaa5f4 1757w64_demuxer_deps="wav_demuxer"
4e622dea
SS
1758
1759# indevs / outdevs
38e54a75 1760alsa_indev_deps="alsa_asoundlib_h snd_pcm_htimestamp"
38e54a75 1761alsa_outdev_deps="alsa_asoundlib_h"
38e54a75 1762bktr_indev_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
38e54a75 1763dv1394_indev_deps="dv1394 dv_demuxer"
c6f95144 1764fbdev_indev_deps="linux_fb_h"
38e54a75 1765jack_indev_deps="jack_jack_h"
e417d80d 1766libcdio_indev_deps="libcdio"
38e54a75 1767libdc1394_indev_deps="libdc1394"
38e54a75
SS
1768oss_indev_deps_any="soundcard_h sys_soundcard_h"
1769oss_outdev_deps_any="soundcard_h sys_soundcard_h"
0de9c41f 1770pulse_indev_deps="libpulse"
15d59d2c
B
1771sndio_indev_deps="sndio_h"
1772sndio_outdev_deps="sndio_h"
38e54a75 1773v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h"
ec1ee802 1774vfwcap_indev_deps="capCreateCaptureWindow vfwcap_defines"
a1b3c5a3 1775vfwcap_indev_extralibs="-lavicap32"
24f8961f 1776x11grab_indev_deps="x11grab XShmCreateImage"
30fd06be 1777
912f3148 1778# protocols
acd554c1
SP
1779ffrtmpcrypt_protocol_deps="!librtmp_protocol"
1780ffrtmpcrypt_protocol_deps_any="gcrypt nettle openssl"
1781ffrtmpcrypt_protocol_select="tcp_protocol"
775c4d36
SP
1782ffrtmphttp_protocol_deps="!librtmp_protocol"
1783ffrtmphttp_protocol_select="http_protocol"
998c1ee1 1784gopher_protocol_select="network"
c40e1757 1785httpproxy_protocol_select="tcp_protocol"
279a0c97 1786http_protocol_select="tcp_protocol"
183baead 1787https_protocol_select="tls_protocol"
c3b57d6e
DB
1788librtmp_protocol_deps="librtmp"
1789librtmpe_protocol_deps="librtmp"
1790librtmps_protocol_deps="librtmp"
1791librtmpt_protocol_deps="librtmp"
1792librtmpte_protocol_deps="librtmp"
c60a2d70 1793mmsh_protocol_select="http_protocol"
998c1ee1 1794mmst_protocol_select="network"
c3b57d6e 1795rtmp_protocol_deps="!librtmp_protocol"
deeb7012 1796rtmp_protocol_select="tcp_protocol"
acd554c1 1797rtmpe_protocol_select="ffrtmpcrypt_protocol"
6aedabc9
SP
1798rtmps_protocol_deps="!librtmp_protocol"
1799rtmps_protocol_select="tls_protocol"
775c4d36 1800rtmpt_protocol_select="ffrtmphttp_protocol"
08cd95e8 1801rtmpte_protocol_select="ffrtmpcrypt_protocol ffrtmphttp_protocol"
6c1ed454 1802rtmpts_protocol_select="ffrtmphttp_protocol https_protocol"
deeb7012 1803rtp_protocol_select="udp_protocol"
998c1ee1
DB
1804sctp_protocol_deps="struct_sctp_event_subscribe"
1805sctp_protocol_select="network"
0eecafc9 1806srtp_protocol_select="rtp_protocol"
998c1ee1 1807tcp_protocol_select="network"
558d192d
MS
1808tls_protocol_deps_any="openssl gnutls"
1809tls_protocol_select="tcp_protocol"
998c1ee1 1810udp_protocol_select="network"
c08fb000 1811
6ebf0bfc 1812# filters
13fabd7a 1813blackframe_filter_deps="gpl"
ce6b6ef6 1814boxblur_filter_deps="gpl"
68b79bfc 1815cropdetect_filter_deps="gpl"
b157be1f 1816delogo_filter_deps="gpl"
a5b64584 1817drawtext_filter_deps="libfreetype"
2e5ff4d0 1818frei0r_filter_deps="frei0r dlopen strtok_r"
cfec77aa 1819frei0r_filter_extralibs='$ldl'
a42bb9d6 1820frei0r_src_filter_deps="frei0r dlopen strtok_r"
cfec77aa 1821frei0r_src_filter_extralibs='$ldl'
a4dc7aa5 1822hqdn3d_filter_deps="gpl"
d371e7b9 1823resample_filter_deps="avresample"
cf69ad35 1824ocv_filter_deps="libopencv"
2f296e39 1825scale_filter_deps="swscale"
acbac567 1826yadif_filter_deps="gpl"
6ebf0bfc 1827
5a0f7131 1828# libraries
d89f2fa9
DB
1829avcodec_deps="avutil"
1830avdevice_deps="avutil avcodec avformat"
1831avfilter_deps="avutil"
1832avformat_deps="avutil avcodec"
1833avresample_deps="avutil"
1834swscale_deps="avutil"
f7679c54 1835
912f3148 1836# programs
54fd593a 1837avconv_deps="avcodec avfilter avformat avresample swscale"
0a0e340f
DB
1838avconv_select="aformat_filter anull_filter asyncts_filter format_filter
1839 fps_filter null_filter resample_filter scale_filter
1840 setpts_filter"
d173ede1 1841avplay_deps="avcodec avformat avresample swscale sdl"
266463da 1842avplay_select="rdft"
9e12f0bf 1843avprobe_deps="avcodec avformat"
b263bf66 1844avserver_deps="avformat ffm_muxer fork rtp_protocol rtsp_demuxer !shared"
4d58e4cb 1845avserver_extralibs='$ldl'
a2830dca 1846
c73f65d9 1847doc_deps="texi2html"
912f3148 1848
de6d9b64 1849# default parameters
8a608357 1850
19bd477d 1851logfile="config.log"
8a608357
MR
1852
1853# installation paths
c9d19248
MR
1854prefix_default="/usr/local"
1855bindir_default='${prefix}/bin'
6291d7e4 1856datadir_default='${prefix}/share/avconv'
c9d19248
MR
1857incdir_default='${prefix}/include'
1858libdir_default='${prefix}/lib'
1859mandir_default='${prefix}/share/man'
1860shlibdir_default="$libdir_default"
8a608357
MR
1861
1862# toolchain
121d78d0 1863ar_default="ar"
13c7df3d 1864cc_default="gcc"
9da6609f 1865host_cc_default="gcc"
4ebc6a74 1866cp_f="cp -f"
b58b00ae 1867ln_s="ln -s -f"
2a8a860a 1868nm_default="nm -g"
11e6d03a 1869objformat="elf"
3f8040db 1870pkg_config_default=pkg-config
be7109c1 1871ranlib="ranlib"
11e6d03a 1872yasmexe="yasm"
8a608357 1873
3e0b1c9a 1874nogas=":"
8182dc34 1875
8a608357 1876# machine
8d4c00ed 1877arch_default=$(uname -m)
38d0a8aa 1878cpu="generic"
8a608357 1879
8a608357 1880# OS
8d4c00ed
MR
1881target_os_default=$(tolower $(uname -s))
1882host_os=$target_os_default
8a608357 1883
8a608357 1884# configurable options
d89f2fa9 1885enable $LIBRARY_LIST $PROGRAM_LIST
3e0b1c9a 1886
3e0b1c9a
DB
1887enable asm
1888enable debug
1889enable doc
8400d6b8 1890enable optimizations
8cfbbd92 1891enable safe_bitstream_reader
530dc538 1892enable static
a9ddb5b1 1893enable swscale_alpha
8a608357 1894
8a608357 1895# build settings
9987769a 1896SHFLAGS='-shared -Wl,-soname,$$(@F)'
4d58e4cb 1897AVSERVERLDFLAGS=-Wl,-E
f3ec2d46
SG
1898LIBPREF="lib"
1899LIBSUF=".a"
c5f14466
RP
1900FULLNAME='$(NAME)$(BUILDSUF)'
1901LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
f3ec2d46
SG
1902SLIBPREF="lib"
1903SLIBSUF=".so"
c5f14466 1904SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
b29bddab
DB
1905SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
1906SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
6cfac0e9 1907LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
2f138f0b
MR
1908SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'
1909SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR) $(SLIBNAME)'
ef0bc4c9 1910
68485d1f
MR
1911asflags_filter=echo
1912cflags_filter=echo
64933b6c
MR
1913ldflags_filter=echo
1914
23565c26 1915AS_C='-c'
bc877faf 1916AS_O='-o $@'
23565c26 1917CC_C='-c'
18031c49 1918CC_E='-E -o $@'
7e6c86e6 1919CC_O='-o $@'
a758c5e2 1920LD_O='-o $@'
8db73c61
MR
1921LD_LIB='-l%'
1922LD_PATH='-L'
23565c26 1923HOSTCC_C='-c'
a758c5e2 1924HOSTCC_O='-o $@'
095792f2 1925HOSTLD_O='-o $@'
7e6c86e6 1926
4cc4b33f
DB
1927host_cflags='-O3 -g'
1928host_cppflags='-D_ISOC99_SOURCE -D_XOPEN_SOURCE=600'
9da6609f 1929host_libs='-lm'
6c3fa06a
MR
1930host_cflags_filter=echo
1931host_ldflags_filter=echo
9da6609f 1932
9b861379 1933target_path='$(CURDIR)'
a7ada2ba 1934
a158446b
MR
1935# since the object filename is not given with the -MM flag, the compiler
1936# is only able to print the basename, and we must add the path ourselves
a758c5e2
MR
1937DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o," > $(@:.o=.d)'
1938DEPFLAGS='-MM'
315c741d 1939
c597172e 1940# find source path
24524f36 1941if test -f configure; then
f038cf3c 1942 source_path=.
c597172e 1943else
8477f2de 1944 source_path=$(cd $(dirname "$0"); pwd)
c597172e 1945 echo "$source_path" | grep -q '[[:blank:]]' &&
7483e694 1946 die "Out of tree builds are impossible with whitespace in source path."
337cee68
MC
1947 test -e "$source_path/config.h" &&
1948 die "Out of tree builds are impossible with config.h in source dir."
c597172e
MR
1949fi
1950
13cbe2c0 1951for v in "$@"; do
b04251c5
MR
1952 r=${v#*=}
1953 l=${v%"$r"}
1954 r=$(sh_quote "$r")
29ba0911 1955 LIBAV_CONFIGURATION="${LIBAV_CONFIGURATION# } ${l}${r}"
13cbe2c0 1956done
c597172e 1957
73ef8980
MR
1958find_things(){
1959 thing=$1
1960 pattern=$2
1961 file=$source_path/$3
932ccf39 1962 sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
73ef8980
MR
1963}
1964
1965ENCODER_LIST=$(find_things encoder ENC libavcodec/allcodecs.c)
1966DECODER_LIST=$(find_things decoder DEC libavcodec/allcodecs.c)
5666fd73 1967HWACCEL_LIST=$(find_things hwaccel HWACCEL libavcodec/allcodecs.c)
73ef8980
MR
1968PARSER_LIST=$(find_things parser PARSER libavcodec/allcodecs.c)
1969BSF_LIST=$(find_things bsf BSF libavcodec/allcodecs.c)
1970MUXER_LIST=$(find_things muxer _MUX libavformat/allformats.c)
1971DEMUXER_LIST=$(find_things demuxer DEMUX libavformat/allformats.c)
38e54a75
SS
1972OUTDEV_LIST=$(find_things outdev OUTDEV libavdevice/alldevices.c)
1973INDEV_LIST=$(find_things indev _IN libavdevice/alldevices.c)
73ef8980 1974PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
81124ba0 1975FILTER_LIST=$(find_things filter FILTER libavfilter/allfilters.c)
c597172e 1976
54e75be4
DB
1977ALL_COMPONENTS="
1978 $BSF_LIST
1979 $DECODER_LIST
1980 $DEMUXER_LIST
1981 $ENCODER_LIST
1982 $FILTER_LIST
1983 $HWACCEL_LIST
1984 $INDEV_LIST
1985 $MUXER_LIST
1986 $OUTDEV_LIST
1987 $PARSER_LIST
1988 $PROTOCOL_LIST
1989"
1990
8469ae22
MR
1991for n in $COMPONENT_LIST; do
1992 v=$(toupper ${n%s})_LIST
1993 eval enable \$$v
1994 eval ${n}_if_any="\$$v"
1995done
1996
206a070d 1997enable $ARCH_EXT_LIST
c597172e
MR
1998
1999die_unknown(){
2000 echo "Unknown option \"$1\"."
2001 echo "See $0 --help for available options."
2002 exit 1
2003}
2004
7432e872
DB
2005print_3_columns() {
2006 cat | tr ' ' '\n' | sort | pr -r -3 -t
2007}
2008
794f8e97 2009show_list() {
bf0c4afa
RP
2010 suffix=_$1
2011 shift
7432e872 2012 echo $* | sed s/$suffix//g | print_3_columns
794f8e97
PI
2013 exit 0
2014}
2015
154caa67
MR
2016rand_list(){
2017 IFS=', '
2018 set -- $*
2019 unset IFS
2020 for thing; do
2021 comp=${thing%:*}
2022 prob=${thing#$comp}
2023 prob=${prob#:}
2024 is_in ${comp} $COMPONENT_LIST && eval comp=\$$(toupper ${comp%s})_LIST
2025 echo "prob ${prob:-0.5}"
2026 printf '%s\n' $comp
2027 done
2028}
2029
2030do_random(){
2031 action=$1
2032 shift
2033 random_seed=$(awk "BEGIN { srand($random_seed); print srand() }")
2034 $action $(rand_list "$@" | awk "BEGIN { srand($random_seed) } \$1 == \"prob\" { prob = \$2; next } rand() < prob { print }")
2035}
2036
c597172e 2037for opt do
7483e694
DB
2038 optval="${opt#*=}"
2039 case "$opt" in
ea061af1
DB
2040 --extra-ldflags=*)
2041 add_ldflags $optval
7e9e7cc2 2042 ;;
ea061af1
DB
2043 --extra-libs=*)
2044 add_extralibs $optval
7e9e7cc2 2045 ;;
ea061af1
DB
2046 --disable-devices)
2047 disable $INDEV_LIST $OUTDEV_LIST
7e9e7cc2 2048 ;;
ea061af1
DB
2049 --enable-debug=*)
2050 debuglevel="$optval"
7e9e7cc2
MR
2051 ;;
2052 --disable-programs)
2053 disable $PROGRAM_LIST
2054 ;;
2055 --disable-everything)
2056 map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
2057 ;;
844c6852
DB
2058 --disable-all)
2059 map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
2060 disable $LIBRARY_LIST $PROGRAM_LIST doc
2061 ;;
7e9e7cc2
MR
2062 --enable-random|--disable-random)
2063 action=${opt%%-random}
2064 do_random ${action#--} $COMPONENT_LIST
2065 ;;
2066 --enable-random=*|--disable-random=*)
2067 action=${opt%%-random=*}
2068 do_random ${action#--} $optval
2069 ;;
2070 --enable-*=*|--disable-*=*)
2071 eval $(echo "${opt%%=*}" | sed 's/--/action=/;s/-/ thing=/')
2072 is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt"
2073 eval list=\$$(toupper $thing)_LIST
2074 name=$(echo "${optval}" | sed "s/,/_${thing}|/g")_${thing}
2075 $action $(filter "$name" $list)
2076 ;;
2077 --enable-?*|--disable-?*)
2078 eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
2079 if is_in $option $COMPONENT_LIST; then
2080 test $action = disable && action=unset
2081 eval $action \$$(toupper ${option%s})_LIST
2082 elif is_in $option $CMDLINE_SELECT; then
2083 $action $option
2084 else
2085 die_unknown $opt
2086 fi
2087 ;;
2088 --list-*)
2089 NAME="${opt#--list-}"
2090 is_in $NAME $COMPONENT_LIST || die_unknown $opt
2091 NAME=${NAME%s}
2092 eval show_list $NAME \$$(toupper $NAME)_LIST
2093 ;;
2094 --help|-h) show_help
2095 ;;
2096 *)
2097 optname="${opt%%=*}"
2098 optname="${optname#--}"
2099 optname=$(echo "$optname" | sed 's/-/_/g')
2100 if is_in $optname $CMDLINE_SET; then
2101 eval $optname='$optval'
2102 elif is_in $optname $CMDLINE_APPEND; then
2103 append $optname "$optval"
2104 else
2105 die_unknown $opt
2106 fi
2107 ;;
7483e694 2108 esac
c597172e
MR
2109done
2110
bcea99bb
MR
2111disabled logging && logfile=/dev/null
2112
29ba0911 2113echo "# $0 $LIBAV_CONFIGURATION" > $logfile
bcea99bb
MR
2114set >> $logfile
2115
9da6609f
MR
2116test -n "$cross_prefix" && enable cross_compile
2117
8d4c00ed
MR
2118if enabled cross_compile; then
2119 test -n "$arch" && test -n "$target_os" ||
2120 die "Must specify target arch and OS when cross-compiling"
2121fi
2122
121d78d0 2123ar_default="${cross_prefix}${ar_default}"
11e6d03a 2124cc_default="${cross_prefix}${cc_default}"
20e0ed95 2125nm_default="${cross_prefix}${nm_default}"
3f8040db 2126pkg_config_default="${cross_prefix}${pkg_config_default}"
adb2b908 2127ranlib="${cross_prefix}${ranlib}"
adb2b908 2128
c5200f17
MR
2129sysinclude_default="${sysroot}/usr/include"
2130
aeeb782c 2131case "$toolchain" in
0fbb62a8
LB
2132 clang-asan)
2133 cc_default="clang"
2134 add_cflags -faddress-sanitizer
2135 add_ldflags -faddress-sanitizer
2136 ;;
2137 clang-tsan)
2138 cc_default="clang"
2139 add_cflags -fthread-sanitizer
2140 add_ldflags -fthread-sanitizer
2141 ;;
aeeb782c
MR
2142 msvc)
2143 cc_default="c99wrap cl"
2144 ld_default="c99wrap link"
2145 nm_default="dumpbin -symbols"
ac3a9b51 2146 ar_default="lib"
53e8cd68 2147 target_os_default="win32"
aeeb782c
MR
2148 ;;
2149 ?*)
2150 die "Unknown toolchain $toolchain"
2151 ;;
2152esac
2153
53e8cd68 2154set_default arch cc pkg_config sysinclude target_os
9da6609f
MR
2155enabled cross_compile || host_cc_default=$cc
2156set_default host_cc
13c7df3d 2157
762f95e4
MR
2158if ! $pkg_config --version >/dev/null 2>&1; then
2159 warn "$pkg_config not found, library detection may fail."
2160 pkg_config=false
2161fi
2162
82bb3329
MR
2163exesuf() {
2164 case $1 in
53e8cd68 2165 mingw32*|win32|win64|cygwin*|*-dos|freedos|opendos|os/2*|symbian) echo .exe ;;
82bb3329
MR
2166 esac
2167}
2168
2169EXESUF=$(exesuf $target_os)
2170HOSTEXESUF=$(exesuf $host_os)
c0f5b7f1 2171
e4e69e0b 2172# set temporary file name
a49d42c2 2173: ${TMPDIR:=$TEMPDIR}
c51fafa1 2174: ${TMPDIR:=$TMP}
a49d42c2 2175: ${TMPDIR:=/tmp}
e4e69e0b 2176
a210bce2 2177if ! check_cmd mktemp -u XXXXXX; then
54460a83
MR
2178 # simple replacement for missing mktemp
2179 # NOT SAFE FOR GENERAL USE
2180 mktemp(){
09a5c245 2181 echo "${2%%XXX*}.${HOSTNAME}.${UID}.$$"
54460a83
MR
2182 }
2183fi
2184
2185tmpfile(){
2186 tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
2187 (set -C; exec > $tmp) 2>/dev/null ||
f7ba16a7 2188 die "Unable to create temporary file in $TMPDIR."
54460a83
MR
2189 append TMPFILES $tmp
2190 eval $1=$tmp
2191}
2192
2193trap 'rm -f -- $TMPFILES' EXIT
54460a83 2194
55127e7b 2195tmpfile TMPASM .asm
3e0b1c9a
DB
2196tmpfile TMPC .c
2197tmpfile TMPE $EXESUF
2198tmpfile TMPH .h
2199tmpfile TMPO .o
2200tmpfile TMPS .S
2201tmpfile TMPSH .sh
2202tmpfile TMPV .ver
54460a83
MR
2203
2204unset -f mktemp
e4e69e0b 2205
fb3c4ffc
MR
2206chmod +x $TMPE
2207
993f2d0f
MR
2208# make sure we can execute files in $TMPDIR
2209cat > $TMPSH 2>> $logfile <<EOF
2210#! /bin/sh
2211EOF
2212chmod +x $TMPSH >> $logfile 2>&1
2213if ! $TMPSH >> $logfile 2>&1; then
2214 cat <<EOF
2215Unable to create and execute files in $TMPDIR. Set the TMPDIR environment
2216variable to another directory and make sure that it is not mounted noexec.
2217EOF
2218 die "Sanity test failed."
2219fi
993f2d0f 2220
457cc333
MR
2221ccc_flags(){
2222 for flag; do
2223 case $flag in
2224 -std=c99) echo -c99 ;;
2225 -mcpu=*) echo -arch ${flag#*=} ;;
2226 -mieee) echo -ieee ;;
2227 -O*|-fast) echo $flag ;;
2228 -fno-math-errno) echo -assume nomath_errno ;;
2229 -g) echo -g3 ;;
2230 -Wall) echo -msg_enable level2 ;;
2231 -Wno-pointer-sign) echo -msg_disable ptrmismatch1 ;;
2232 -Wl,*) echo $flag ;;
2233 -f*|-W*) ;;
2234 *) echo $flag ;;
2235 esac
2236 done
2237}
2238
dfa559bc
RB
2239msvc_flags(){
2240 for flag; do
2241 case $flag in
2242 -fomit-frame-pointer) echo -Oy ;;
2243 -g) echo -Z7 ;;
2244 -Wall) echo -W4 -wd4244 -wd4127 -wd4018 -wd4389 \
2245 -wd4146 -wd4057 -wd4204 -wd4706 -wd4305 \
4a185ed2 2246 -wd4152 -wd4324 -we4013 -wd4100 -wd4214 \
d66c52c2 2247 -wd4996 -wd4273 ;;
dfa559bc
RB
2248 -std=c99) ;;
2249 -fno-math-errno) ;;
2250 -fno-common) ;;
2251 -fno-signed-zeros) ;;
50640977 2252 -fPIC) ;;
dfa559bc 2253 -lz) echo zlib.lib ;;
bd680c7b
DB
2254 -lavifil32) echo vfw32.lib ;;
2255 -lavicap32) echo vfw32.lib user32.lib ;;
dfa559bc
RB
2256 -l*) echo ${flag#-l}.lib ;;
2257 *) echo $flag ;;
2258 esac
2259 done
2260}
2261
d0c6d424
MR
2262pgi_flags(){
2263 for flag; do
2264 case $flag in
643933f5 2265 -flto) echo -Mipa=fast,libopt,libinline,vestigial ;;
d0c6d424
MR
2266 -fomit-frame-pointer) echo -Mnoframe ;;
2267 -g) echo -gopt ;;
2268 *) echo $flag ;;
2269 esac
2270 done
2271}
2272
2273suncc_flags(){
2274 for flag; do
2275 case $flag in
2276 -march=*|-mcpu=*)
2277 case "${flag#*=}" in
2278 native) echo -xtarget=native ;;
2279 v9|niagara) echo -xarch=sparc ;;
2280 ultrasparc) echo -xarch=sparcvis ;;
2281 ultrasparc3|niagara2) echo -xarch=sparcvis2 ;;
2282 i586|pentium) echo -xchip=pentium ;;
2283 i686|pentiumpro|pentium2) echo -xtarget=pentium_pro ;;
2284 pentium3*|c3-2) echo -xtarget=pentium3 ;;
2285 pentium-m) echo -xarch=sse2 -xchip=pentium3 ;;
2286 pentium4*) echo -xtarget=pentium4 ;;
2287 prescott|nocona) echo -xarch=sse3 -xchip=pentium4 ;;
2288 *-sse3) echo -xarch=sse3 ;;
2289 core2) echo -xarch=ssse3 -xchip=core2 ;;
f2ce813e
SM
2290 corei7) echo -xarch=sse4_2 -xchip=nehalem ;;
2291 corei7-avx) echo -xarch=avx -xchip=sandybridge ;;
b36f87ff 2292 amdfam10|barcelona|bdver*) echo -xarch=sse4_1 ;;
d0c6d424
MR
2293 athlon-4|athlon-[mx]p) echo -xarch=ssea ;;
2294 k8|opteron|athlon64|athlon-fx)
2295 echo -xarch=sse2a ;;
2296 athlon*) echo -xarch=pentium_proa ;;
2297 esac
2298 ;;
2299 -std=c99) echo -xc99 ;;
2300 -fomit-frame-pointer) echo -xregs=frameptr ;;
2301 -fPIC) echo -KPIC -xcode=pic32 ;;
2302 -W*,*) echo $flag ;;
5e753ed5
SM
2303 -f*-*|-W*|-mimpure-text) ;;
2304 -shared) echo -G ;;
d0c6d424
MR
2305 *) echo $flag ;;
2306 esac
2307 done
2308}
2309
2310tms470_flags(){
2311 for flag; do
2312 case $flag in
2313 -march=*|-mcpu=*)
2314 case "${flag#*=}" in
2315 armv7-a|cortex-a*) echo -mv=7a8 ;;
2316 armv7-r|cortex-r*) echo -mv=7r4 ;;
2317 armv7-m|cortex-m*) echo -mv=7m3 ;;
2318 armv6*|arm11*) echo -mv=6 ;;
2319 armv5*e|arm[79]*e*|arm9[24]6*|arm96*|arm102[26])
2320 echo -mv=5e ;;
2321 armv4*|arm7*|arm9[24]*) echo -mv=4 ;;
2322 esac
2323 ;;
2324 -mfpu=neon) echo --float_support=vfpv3 --neon ;;
2325 -mfpu=vfp) echo --float_support=vfpv2 ;;
2326 -mfpu=vfpv3) echo --float_support=vfpv3 ;;
b5198a26 2327 -mfpu=vfpv3-d16) echo --float_support=vfpv3d16 ;;
d0c6d424
MR
2328 -msoft-float) echo --float_support=vfplib ;;
2329 -O[0-3]|-mf=*) echo $flag ;;
2330 -g) echo -g -mn ;;
2331 -pds=*) echo $flag ;;
ad93dccb
MR
2332 -D*|-I*) echo $flag ;;
2333 --gcc|--abi=*) echo $flag ;;
2334 -me) echo $flag ;;
d0c6d424
MR
2335 esac
2336 done
2337}
2338
a758c5e2
MR
2339probe_cc(){
2340 pfx=$1
2341 _cc=$2
2342
8db73c61
MR
2343 unset _type _ident _cc_c _cc_e _cc_o _flags _cflags
2344 unset _ld_o _ldflags _ld_lib _ld_path
18031c49 2345 unset _depflags _DEPCMD _DEPFLAGS
a758c5e2
MR
2346 _flags_filter=echo
2347
2348 if $_cc -v 2>&1 | grep -q '^gcc.*LLVM'; then
2349 _type=llvm_gcc
2350 gcc_extra_ver=$(expr "$($_cc --version | head -n1)" : '.*\((.*)\)')
2351 _ident="llvm-gcc $($_cc -dumpversion) $gcc_extra_ver"
2352 _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2353 _cflags_speed='-O3'
2354 _cflags_size='-Os'
2355 elif $_cc -v 2>&1 | grep -qi ^gcc; then
2356 _type=gcc
2357 gcc_version=$($_cc --version | head -n1)
2358 gcc_basever=$($_cc -dumpversion)
2359 gcc_pkg_ver=$(expr "$gcc_version" : '[^ ]* \(([^)]*)\)')
2360 gcc_ext_ver=$(expr "$gcc_version" : ".*$gcc_pkg_ver $gcc_basever \\(.*\\)")
2361 _ident=$(cleanws "gcc $gcc_basever $gcc_pkg_ver $gcc_ext_ver")
2362 if ! $_cc -dumpversion | grep -q '^2\.'; then
2363 _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2364 fi
2365 _cflags_speed='-O3'
2366 _cflags_size='-Os'
b2d688ea 2367 elif $_cc --version 2>/dev/null | grep -q ^icc; then
a758c5e2
MR
2368 _type=icc
2369 _ident=$($_cc --version | head -n1)
2370 _depflags='-MMD'
2371 _cflags_speed='-O3'
2372 _cflags_size='-Os'
2373 _cflags_noopt='-O1'
2374 elif $_cc -v 2>&1 | grep -q xlc; then
2375 _type=xlc
2376 _ident=$($_cc -qversion 2>/dev/null | head -n1)
2377 _cflags_speed='-O5'
2378 _cflags_size='-O5 -qcompact'
2379 elif $_cc -V 2>/dev/null | grep -q Compaq; then
2380 _type=ccc
2381 _ident=$($_cc -V | head -n1 | cut -d' ' -f1-3)
2382 _DEPFLAGS='-M'
a758c5e2
MR
2383 _cflags_speed='-fast'
2384 _cflags_size='-O1'
457cc333 2385 _flags_filter=ccc_flags
a758c5e2
MR
2386 elif $_cc --vsn 2>/dev/null | grep -q "ARM C/C++ Compiler"; then
2387 test -d "$sysroot" || die "No valid sysroot specified."
2388 _type=armcc
2389 _ident=$($_cc --vsn | head -n1)
2390 armcc_conf="$PWD/armcc.conf"
2391 $_cc --arm_linux_configure \
2392 --arm_linux_config_file="$armcc_conf" \
2393 --configure_sysroot="$sysroot" \
2394 --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
2395 die "Error creating armcc configuration file."
2396 $_cc --vsn | grep -q RVCT && armcc_opt=rvct || armcc_opt=armcc
2397 _flags="--arm_linux_config_file=$armcc_conf --translate_gcc"
2398 as_default="${cross_prefix}gcc"
2399 _depflags='-MMD'
2400 _cflags_speed='-O3'
2401 _cflags_size='-Os'
0122118e 2402 elif $_cc -version 2>/dev/null | grep -Eq 'TMS470|TI ARM'; then
a758c5e2
MR
2403 _type=tms470
2404 _ident=$($_cc -version | head -n1 | tr -s ' ')
2405 _flags='--gcc --abi=eabi -me'
18031c49 2406 _cc_e='-ppl -fe=$@'
a758c5e2 2407 _cc_o='-fe=$@'
a758c5e2
MR
2408 _depflags='-ppa -ppd=$(@:.o=.d)'
2409 _cflags_speed='-O3 -mf=5'
2410 _cflags_size='-O3 -mf=2'
2411 _flags_filter=tms470_flags
2412 elif $_cc -v 2>&1 | grep -q clang; then
2413 _type=clang
2414 _ident=$($_cc --version | head -n1)
2415 _depflags='-MMD'
2416 _cflags_speed='-O3'
2417 _cflags_size='-Os'
2418 elif $_cc -V 2>&1 | grep -q Sun; then
2419 _type=suncc
2420 _ident=$($_cc -V 2>&1 | head -n1 | cut -d' ' -f 2-)
2421 _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "1s,^.*: ,$@: ," -e "\$$!s,\$$, \\\," -e "1!s,^.*: , ," > $(@:.o=.d)'
c72f12cb 2422 _DEPFLAGS='-xM1 -xc99'
a758c5e2
MR
2423 _ldflags='-std=c99'
2424 _cflags_speed='-O5'
2425 _cflags_size='-O5 -xspace'
2426 _flags_filter=suncc_flags
2427 elif $_cc -v 2>&1 | grep -q 'PathScale\|Path64'; then
2428 _type=pathscale
2429 _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
2430 _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2431 _cflags_speed='-O2'
2432 _cflags_size='-Os'
2433 _flags_filter='filter_out -Wdisabled-optimization'
2434 elif $_cc -v 2>&1 | grep -q Open64; then
2435 _type=open64
2436 _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
2437 _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2438 _cflags_speed='-O2'
2439 _cflags_size='-Os'
2440 _flags_filter='filter_out -Wdisabled-optimization|-Wtype-limits|-fno-signed-zeros'
2441 elif $_cc -V 2>&1 | grep -q Portland; then
2442 _type=pgi
2443 _ident="PGI $($_cc -V 2>&1 | awk '/^pgcc/ { print $2; exit }')"
8f23907f 2444 opt_common='-alias=ansi -Mdse -Mlre -Mpre'
a758c5e2
MR
2445 _cflags_speed="-O3 -Mautoinline -Munroll=c:4 $opt_common"
2446 _cflags_size="-O2 -Munroll=c:1 $opt_common"
2447 _cflags_noopt="-O1"
2448 _flags_filter=pgi_flags
dfa559bc
RB
2449 elif $_cc 2>&1 | grep -q Microsoft; then
2450 _type=msvc
2451 _ident=$($cc 2>&1 | head -n1)
2452 _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< 2>&1 | awk '\''/including/ { sub(/^.*file: */, ""); gsub(/\\/, "/"); if (!match($$0, / /)) print "$@:", $$0 }'\'' > $(@:.o=.d)'
2453 _DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -showIncludes -Zs'
2454 _cflags_speed="-O2"
2455 _cflags_size="-O1"
2456 # Nonstandard output options, to avoid msys path conversion issues, relies on wrapper to remap it
2457 if $_cc 2>&1 | grep -q Linker; then
2458 _ld_o='-out $@'
2459 else
2460 _ld_o='-Fe$@'
2461 fi
2462 _cc_o='-Fo $@'
a224b2cb 2463 _cc_e='-P -Fi $@'
dfa559bc
RB
2464 _flags_filter=msvc_flags
2465 _ld_lib='lib%.a'
2466 _ld_path='-libpath:'
2467 _flags='-nologo'
2468 _cflags='-D_USE_MATH_DEFINES -Dinline=__inline -FIstdlib.h -Dstrtoll=_strtoi64'
2469 if [ $pfx = hostcc ]; then
6a0200f2 2470 append _cflags -Dsnprintf=_snprintf
dfa559bc 2471 fi
aef6bd1b 2472 fi
a758c5e2
MR
2473
2474 eval ${pfx}_type=\$_type
2475 eval ${pfx}_ident=\$_ident
2476}
2477
2478set_ccvars(){
23565c26 2479 eval ${1}_C=\${_cc_c-\${${1}_C}}
18031c49 2480 eval ${1}_E=\${_cc_e-\${${1}_E}}
a758c5e2
MR
2481 eval ${1}_O=\${_cc_o-\${${1}_O}}
2482
2483 if [ -n "$_depflags" ]; then
2484 eval ${1}_DEPFLAGS=\$_depflags
2485 else
2486 eval ${1}DEP=\${_DEPCMD:-\$DEPCMD}
2487 eval ${1}DEP_FLAGS=\${_DEPFLAGS:-\$DEPFLAGS}
2488 eval DEP${1}FLAGS=\$_flags
2489 fi
2490}
2491
2492probe_cc cc "$cc"
2493cflags_filter=$_flags_filter
2494cflags_speed=$_cflags_speed
2495cflags_size=$_cflags_size
2496cflags_noopt=$_cflags_noopt
2497add_cflags $_flags $_cflags
2498cc_ldflags=$_ldflags
2499set_ccvars CC
2500
2501probe_cc hostcc "$host_cc"
2502host_cflags_filter=$_flags_filter
a758c5e2 2503add_host_cflags $_flags $_cflags
a758c5e2 2504set_ccvars HOSTCC
629687f6 2505
851ffa80
MR
2506test -n "$cc_type" && enable $cc_type ||
2507 warn "Unknown C compiler $cc, unable to select optimal CFLAGS"
629687f6 2508
75bafbac 2509: ${as_default:=$cc}
50567afa 2510: ${dep_cc_default:=$cc}
684b28e0 2511: ${ld_default:=$cc}
095792f2
MR
2512: ${host_ld_default:=$host_cc}
2513set_default ar as dep_cc ld host_ld
75800dce 2514
a758c5e2
MR
2515probe_cc as "$as"
2516asflags_filter=$_flags_filter
2517add_asflags $_flags $_cflags
2518set_ccvars AS
2519
2520probe_cc ld "$ld"
2521ldflags_filter=$_flags_filter
2522add_ldflags $_flags $_ldflags
2523test "$cc_type" != "$ld_type" && add_ldflags $cc_ldflags
2763587c 2524LD_O=${_ld_o-$LD_O}
8db73c61
MR
2525LD_LIB=${_ld_lib-$LD_LIB}
2526LD_PATH=${_ld_path-$LD_PATH}
a758c5e2 2527
095792f2
MR
2528probe_cc hostld "$host_ld"
2529host_ldflags_filter=$_flags_filter
2530add_host_ldflags $_flags $_ldflags
2531HOSTLD_O=${_ld_o-$HOSTLD_O}
2532
a758c5e2
MR
2533if [ -z "$CC_DEPFLAGS" ] && [ "$dep_cc" != "$cc" ]; then
2534 probe_cc depcc "$dep_cc"
2535 CCDEP=${_DEPCMD:-$DEPCMD}
2536 CCDEP_FLAGS=${_DEPFLAGS:=$DEPFLAGS}
2537 DEPCCFLAGS=$_flags
2538fi
07dec06e 2539
3dbc777c
MR
2540if $ar 2>&1 | grep -q Microsoft; then
2541 arflags="-nologo"
2542 ar_o='-out:$@'
2543elif $ar 2>&1 | grep -q 'Texas Instruments'; then
2544 arflags="rq"
2545 ar_o='$@'
2546else
2547 arflags="rc"
2548 ar_o='$@'
2549fi
2550
7f32f40c 2551add_cflags $extra_cflags
2f2e6c7c 2552add_asflags $extra_cflags
7f32f40c 2553
154d432c
MR
2554if test -n "$sysroot"; then
2555 case "$cc_type" in
00ba041c 2556 gcc|llvm_gcc|clang)
467256f2 2557 add_cppflags --sysroot="$sysroot"
154d432c
MR
2558 add_ldflags --sysroot="$sysroot"
2559 ;;
6fec122a
MR
2560 tms470)
2561 add_cppflags -I"$sysinclude"
2562 add_ldflags --sysroot="$sysroot"
2563 ;;
154d432c
MR
2564 esac
2565fi
2566
d22c13a8
MR
2567if test "$cpu" = host; then
2568 enabled cross_compile && die "--cpu=host makes no sense when cross-compiling."
2569
2570 case "$cc_type" in
613a4e3f 2571 gcc|llvm_gcc)
d22c13a8
MR
2572 check_native(){
2573 $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
b695256e 2574 sed -n "/cc1.*$1=/{
27ce1be8
MR
2575 s/.*$1=\\([^ ]*\\).*/\\1/
2576 p
2577 q
2578 }" $TMPE
d22c13a8
MR
2579 }
2580 cpu=$(check_native -march || check_native -mcpu)
2581 ;;
2582 esac
2583
2584 test "${cpu:-host}" = host && die "--cpu=host not supported with compiler $cc"
2585fi
2586
e939cedd
MR
2587# Deal with common $arch aliases
2588case "$arch" in
5873b623
MR
2589 aarch64|arm64)
2590 arch="aarch64"
2591 ;;
e939cedd
MR
2592 arm*)
2593 arch="arm"
2594 ;;
2acda282 2595 mips*|IP*)
e939cedd
MR
2596 arch="mips"
2597 ;;
a6e9d649 2598 parisc*|hppa*)
e939cedd
MR
2599 arch="parisc"
2600 ;;
56203596 2601 "Power Macintosh"|ppc*|powerpc*)
e939cedd
MR
2602 arch="ppc"
2603 ;;
e939cedd
MR
2604 s390|s390x)
2605 arch="s390"
2606 ;;
2607 sh4|sh)
2608 arch="sh4"
2609 ;;
4cd217c0 2610 sun4u|sparc*)
e939cedd 2611 arch="sparc"
e939cedd 2612 ;;
c75848cd
DB
2613 tilegx|tile-gx)
2614 arch="tilegx"
2615 ;;
d33ed7b3 2616 i[3-6]86|i86pc|BePC|x86pc|x86_64|amd64)
e939cedd
MR
2617 arch="x86"
2618 ;;
2619esac
2620
851ffa80 2621is_in $arch $ARCH_LIST || warn "unknown architecture $arch"
343aef9b 2622enable $arch
e939cedd 2623
df5cdc24 2624# Add processor-specific flags
9ebd45c2 2625if enabled aarch64; then
33db40f8
MR
2626
2627 case $cpu in
2628 armv*)
2629 cpuflags="-march=$cpu"
2630 ;;
2631 *)
2632 cpuflags="-mcpu=$cpu"
2633 ;;
2634 esac
2635
2636elif enabled alpha; then
2637
2638 cpuflags="-mcpu=$cpu"
2639
2640elif enabled arm; then
2641
1234c66a
MR
2642 check_arm_arch() {
2643 check_cpp_condition stddef.h \
2644 "defined __ARM_ARCH_${1}__ || defined __TARGET_ARCH_${2:-$1}" \
2645 $cpuflags
2646 }
2647
2648 probe_arm_arch() {
2649 if check_arm_arch 4; then echo armv4;
2650 elif check_arm_arch 4T; then echo armv4t;
2651 elif check_arm_arch 5; then echo armv5;
2652 elif check_arm_arch 5E; then echo armv5e;
2653 elif check_arm_arch 5T; then echo armv5t;
2654 elif check_arm_arch 5TE; then echo armv5te;
2655 elif check_arm_arch 5TEJ; then echo armv5te;
2656 elif check_arm_arch 6; then echo armv6;
2657 elif check_arm_arch 6J; then echo armv6j;
2658 elif check_arm_arch 6K; then echo armv6k;
2659 elif check_arm_arch 6Z; then echo armv6z;
2660 elif check_arm_arch 6ZK; then echo armv6zk;
2661 elif check_arm_arch 6T2; then echo armv6t2;
2662 elif check_arm_arch 7; then echo armv7;
2663 elif check_arm_arch 7A 7_A; then echo armv7-a;
2664 elif check_arm_arch 7R 7_R; then echo armv7-r;
2665 elif check_arm_arch 7M 7_M; then echo armv7-m;
2666 elif check_arm_arch 7EM 7E_M; then echo armv7-m;
2667 elif check_arm_arch 8A 8_A; then echo armv8-a;
2668 fi
2669 }
2670
2671 [ "$cpu" = generic ] && cpu=$(probe_arm_arch)
2672
33db40f8
MR
2673 case $cpu in
2674 armv*)
2675 cpuflags="-march=$cpu"
2676 subarch=$(echo $cpu | sed 's/[^a-z0-9]//g')
2677 ;;
2678 *)
2679 cpuflags="-mcpu=$cpu"
2680 case $cpu in
2681 cortex-a*) subarch=armv7a ;;
2682 cortex-r*) subarch=armv7r ;;
2683 cortex-m*) enable thumb; subarch=armv7m ;;
2684 arm11*) subarch=armv6 ;;
2685 arm[79]*e*|arm9[24]6*|arm96*|arm102[26]) subarch=armv5te ;;
2686 armv4*|arm7*|arm9[24]*) subarch=armv4 ;;
1234c66a 2687 *) subarch=$(probe_arm_arch) ;;
33db40f8
MR
2688 esac
2689 ;;
2690 esac
2691
f0fe245b
MR
2692 case "$subarch" in
2693 armv5t*) enable fast_clz ;;
2694 armv[6-8]*) enable fast_clz fast_unaligned ;;
2695 esac
2696
33db40f8
MR
2697elif enabled avr32; then
2698
2699 case $cpu in
2700 ap7[02]0[0-2])
2701 subarch="avr32_ap"
2702 cpuflags="-mpart=$cpu"
2703 ;;
2704 ap)
2705 subarch="avr32_ap"
2706 cpuflags="-march=$cpu"
2707 ;;
2708 uc3[ab]*)
2709 subarch="avr32_uc"
2710 cpuflags="-mcpu=$cpu"
2711 ;;
2712 uc)
2713 subarch="avr32_uc"
2714 cpuflags="-march=$cpu"
2715 ;;
2716 esac
2717
2718elif enabled bfin; then
2719
2720 cpuflags="-mcpu=$cpu"
2721
2722elif enabled mips; then
2723
2724 cpuflags="-march=$cpu"
2725
5d54c126 2726elif enabled ppc; then
343aef9b 2727
56348891
MR
2728 case $(tolower $cpu) in
2729 601|ppc601|powerpc601)
9dbd5c3d 2730 cpuflags="-mcpu=601"
64ad53ff 2731 disable altivec
9dbd5c3d 2732 ;;
56348891 2733 603*|ppc603*|powerpc603*)
9dbd5c3d 2734 cpuflags="-mcpu=603"
64ad53ff 2735 disable altivec
9dbd5c3d 2736 ;;
56348891 2737 604*|ppc604*|powerpc604*)
9dbd5c3d 2738 cpuflags="-mcpu=604"
64ad53ff 2739 disable altivec
9dbd5c3d 2740 ;;
56348891 2741 g3|75*|ppc75*|powerpc75*)
7f1fcaf0 2742 cpuflags="-mcpu=750"
64ad53ff 2743 disable altivec
9dbd5c3d 2744 ;;
56348891 2745 g4|745*|ppc745*|powerpc745*)
7f1fcaf0 2746 cpuflags="-mcpu=7450"
9dbd5c3d 2747 ;;
56348891 2748 74*|ppc74*|powerpc74*)
7f1fcaf0 2749 cpuflags="-mcpu=7400"
9dbd5c3d 2750 ;;
313f9fbf 2751 g5|970|ppc970|powerpc970)
7f1fcaf0 2752 cpuflags="-mcpu=970"
9dbd5c3d 2753 ;;
313f9fbf 2754 power[3-7]*)
7f1fcaf0 2755 cpuflags="-mcpu=$cpu"
313f9fbf 2756 ;;
56348891 2757 cell)
9dbd5c3d
MR
2758 cpuflags="-mcpu=cell"
2759 enable ldbrx
2760 ;;
4ab26cb4
DB
2761 e500mc)
2762 cpuflags="-mcpu=e500mc"
2763 disable altivec
2764 ;;
7b0b81a1
AL
2765 e500v2)
2766 cpuflags="-mcpu=8548 -mhard-float -mfloat-gprs=double"
2767 disable altivec
2768 ;;
2769 e500)
2770 cpuflags="-mcpu=8540 -mhard-float"
2771 disable altivec
2772 ;;
9dbd5c3d 2773 esac
343aef9b 2774
33db40f8
MR
2775elif enabled sparc; then
2776
2777 case $cpu in
2778 cypress|f93[04]|tsc701|sparcl*|supersparc|hypersparc|niagara|v[789])
2779 cpuflags="-mcpu=$cpu"
2780 disable vis
2781 ;;
2782 ultrasparc*|niagara[234])
2783 cpuflags="-mcpu=$cpu"
2784 ;;
2785 esac
2786
343aef9b
MR
2787elif enabled x86; then
2788
9dbd5c3d
MR
2789 case $cpu in
2790 i[345]86|pentium)
2791 cpuflags="-march=$cpu"
2792 disable mmx
2793 ;;
2794 # targets that do NOT support conditional mov (cmov)
2795 pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
2796 cpuflags="-march=$cpu"
2797 disable cmov
2798 ;;
2799 # targets that do support conditional mov (cmov)
f2ce813e 2800 i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64*|k8*|opteron*|athlon-fx|core2|corei7*|amdfam10|barcelona|atom|bdver*)
9dbd5c3d
MR
2801 cpuflags="-march=$cpu"
2802 enable cmov
2803 enable fast_cmov
2804 ;;
2805 # targets that do support conditional mov but on which it's slow
2806 pentium4|pentium4m|prescott|nocona)
2807 cpuflags="-march=$cpu"
2808 enable cmov
2809 disable fast_cmov
2810 ;;
2811 esac
343aef9b 2812
343aef9b
MR
2813fi
2814
9ebd45c2
MR
2815if [ "$cpu" != generic ]; then
2816 add_cflags $cpuflags
2817 add_asflags $cpuflags
2818fi
df5cdc24 2819
993f2d0f
MR
2820# compiler sanity check
2821check_exec <<EOF
2822int main(void){ return 0; }
2823EOF
2824if test "$?" != 0; then
2825 echo "$cc is unable to create an executable file."
2826 if test -z "$cross_prefix" && ! enabled cross_compile ; then
2827 echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
2828 echo "Only do this if you know what cross compiling means."
2829 fi
2830 die "C compiler test failed."
2831fi
2832
046f081b 2833add_cppflags -D_ISOC99_SOURCE
e9b9a2f8 2834check_cflags -std=c99
50a334e4 2835check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
9d821fc2
DB
2836#include <stdlib.h>
2837EOF
50a334e4 2838check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
9d821fc2
DB
2839#include <stdlib.h>
2840EOF
e9b9a2f8 2841
f0125de9 2842check_host_cflags -std=c99
0a6db2a2 2843check_host_cflags -Wall
f0125de9 2844
d4c99513
MR
2845check_64bit(){
2846 arch32=$1
2847 arch64=$2
2848 expr=$3
2849 check_code cc "" "int test[2*($expr) - 1]" &&
2850 subarch=$arch64 || subarch=$arch32
2851}
2852
b24dbcbd 2853case "$arch" in
d11cb13b 2854 aarch64|alpha|ia64)
2acda282
MR
2855 spic=$shared
2856 ;;
2857 mips)
2858 check_64bit mips mips64 '_MIPS_SIM > 1'
8a3c8627 2859 spic=$shared
b24dbcbd 2860 ;;
a6e9d649
MR
2861 parisc)
2862 check_64bit parisc parisc64 'sizeof(void *) > 4'
2863 spic=$shared
2864 ;;
56203596
MR
2865 ppc)
2866 check_64bit ppc ppc64 'sizeof(void *) > 4'
1944d532 2867 spic=$shared
56203596 2868 ;;
4cd217c0
MR
2869 sparc)
2870 check_64bit sparc sparc64 'sizeof(void *) > 4'
2871 spic=$shared
2872 ;;
e939cedd 2873 x86)
d4c99513 2874 check_64bit x86_32 x86_64 'sizeof(void *) > 4'
de27f4d9 2875 if test "$subarch" = "x86_64"; then
e939cedd 2876 spic=$shared
de27f4d9 2877 fi
b24dbcbd 2878 ;;
b24dbcbd
RP
2879esac
2880
343aef9b 2881enable $subarch
8a3c8627 2882enabled spic && enable pic
b24dbcbd 2883
7483e694 2884# OS specific
4f854758 2885case $target_os in
a1629e28 2886 haiku)
63ae7e7c 2887 prefix_default="/boot/common"
108caaaa 2888 network_extralibs="-lnetwork"
f59c4bd6 2889 host_libs=
a1629e28 2890 ;;
7483e694 2891 sunos)
4d58e4cb 2892 AVSERVERLDFLAGS=""
9987769a 2893 SHFLAGS='-shared -Wl,-h,$$(@F)'
0600d30a 2894 enabled x86 && SHFLAGS="-mimpure-text $SHFLAGS"
7483e694 2895 network_extralibs="-lsocket -lnsl"
779222db 2896 add_cppflags -D__EXTENSIONS__ -D_XOPEN_SOURCE=600
87a74f47
SM
2897 # When using suncc to build, the Solaris linker will mark
2898 # an executable with each instruction set encountered by
2899 # the Solaris assembler. As our libraries contain their own
2900 # guards for processor-specific code, instead suppress
2901 # generation of the HWCAPS ELF section on Solaris x86 only.
2902 enabled_all suncc x86 && echo "hwcap_1 = OVERRIDE;" > mapfile && add_ldflags -Wl,-M,mapfile
2a8a860a 2903 nm_default='nm -P -g'
7483e694
DB
2904 ;;
2905 netbsd)
a1e4b3f6 2906 disable symver
07a8eef6
MR
2907 oss_indev_extralibs="-lossaudio"
2908 oss_outdev_extralibs="-lossaudio"
7483e694 2909 ;;
d488c3bc 2910 openbsd|bitrig)
a1e4b3f6 2911 disable symver
7483e694 2912 SHFLAGS='-shared'
69dca3a4 2913 SLIB_INSTALL_NAME='$(SLIBNAME).$(LIBMAJOR).$(LIBMINOR)'
d5683aba 2914 SLIB_INSTALL_LINKS=
07a8eef6
MR
2915 oss_indev_extralibs="-lossaudio"
2916 oss_outdev_extralibs="-lossaudio"
7483e694 2917 ;;
a1e4b3f6 2918 dragonfly)
a1e4b3f6
MR
2919 disable symver
2920 ;;
2921 freebsd)
7483e694
DB
2922 ;;
2923 bsd/os)
355d81df 2924 add_extralibs -lpoll -lgnugetopt
7483e694
DB
2925 ;;
2926 darwin)
301ab19d 2927 gas="gas-preprocessor.pl $cc"
e08b8239 2928 enabled ppc && add_asflags -force_cpusubtype_ALL
49e35f49 2929 SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR)'
dff68563 2930 enabled x86_32 && append SHFLAGS -Wl,-read_only_relocs,suppress
355d81df 2931 add_ldflags -Wl,-dynamic,-search_paths_first
7483e694
DB
2932 SLIBSUF=".dylib"
2933 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
2934 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
4d58e4cb 2935 AVSERVERLDFLAGS=-Wl,-bind_at_load
304d586d 2936 objformat="macho"
1b0f6fb8 2937 enabled x86_64 && objformat="macho64"
8dfa86f7 2938 enabled_any pic shared ||
2704bd1a 2939 { check_cflags -mdynamic-no-pic && add_asflags -mdynamic-no-pic; }
7483e694
DB
2940 ;;
2941 mingw32*)
9d3f4f50 2942 if test $target_os = "mingw32ce"; then
1aa71e25
MS
2943 disable network
2944 else
2945 target_os=mingw32
2946 fi
dcc01c06 2947 LIBTARGET=i386
1fc9fb8a 2948 if enabled x86_64; then
417516f6 2949 LIBTARGET="i386:x86-64"
336cc1b0 2950 elif enabled arm; then
15c5156d 2951 LIBTARGET=arm-wince
dcc01c06 2952 fi
fbd971a4 2953 shlibdir_default="$bindir_default"
7483e694
DB
2954 SLIBPREF=""
2955 SLIBSUF=".dll"
7483e694
DB
2956 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
2957 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
eb7018d2 2958 SLIB_EXTRA_CMD=-'sed -e "s/ @[^ ]*//" $$(@:$(SLIBSUF)=.orig.def) > $$(@:$(SLIBSUF)=.def); $(DLLTOOL) -m $(LIBTARGET) -d $$(@:$(SLIBSUF)=.def) -l $(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib) -D $(SLIBNAME_WITH_MAJOR)'
2f138f0b
MR
2959 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
2960 SLIB_INSTALL_LINKS=
2961 SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
2962 SLIB_INSTALL_EXTRA_LIB='lib$(SLIBNAME:$(SLIBSUF)=.dll.a) $(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
eb7018d2 2963 SHFLAGS='-shared -Wl,--output-def,$$(@:$(SLIBSUF)=.orig.def) -Wl,--out-implib,$(SUBDIR)lib$(SLIBNAME:$(SLIBSUF)=.dll.a) -Wl,--enable-runtime-pseudo-reloc -Wl,--enable-auto-image-base'
304d586d 2964 objformat="win32"
ec10a9ab 2965 dlltool="${cross_prefix}dlltool"
a3222470 2966 ranlib=:
bc574408 2967 enable dos_paths
7483e694 2968 ;;
53e8cd68 2969 win32|win64)
d66c52c2
MS
2970 if enabled shared; then
2971 # Link to the import library instead of the normal static library
2972 # for shared libs.
2973 LD_LIB='%.lib'
2974 # Cannot build shared and static libraries at the same time with
2975 # MSVC.
2976 disable static
2977 fi
2978 shlibdir_default="$bindir_default"
2979 SLIBPREF=""
2980 SLIBSUF=".dll"
2981 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
2982 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
2983 SLIB_CREATE_DEF_CMD='makedef $(SUBDIR)lib$(NAME).ver $(OBJS) > $$(@:$(SLIBSUF)=.def)'
2984 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
2985 SLIB_INSTALL_LINKS=
2986 SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
2987 SLIB_INSTALL_EXTRA_LIB='$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
2988 SHFLAGS='-dll -def:$$(@:$(SLIBSUF)=.def) -implib:$(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib)'
53e8cd68
MS
2989 objformat="win32"
2990 ranlib=:
2991 enable dos_paths
2992 ;;
7483e694 2993 cygwin*)
4f854758 2994 target_os=cygwin
fbd971a4 2995 shlibdir_default="$bindir_default"
7483e694
DB
2996 SLIBPREF="cyg"
2997 SLIBSUF=".dll"
2998 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
2999 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
f5d2c597
YS
3000 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
3001 SLIB_INSTALL_LINKS=
3002 SLIB_INSTALL_EXTRA_LIB='lib$(FULLNAME).dll.a'
3003 SHFLAGS='-shared -Wl,--out-implib,$(SUBDIR)lib$(FULLNAME).dll.a'
304d586d 3004 objformat="win32"
bc574408 3005 enable dos_paths
7483e694 3006 ;;
4f365f37 3007 *-dos|freedos|opendos)
4f365f37 3008 network_extralibs="-lsocket"
ff1c015d 3009 objformat="coff"
bc574408 3010 enable dos_paths
a7a187a1 3011 add_cppflags -U__STRICT_ANSI__
4f365f37 3012 ;;
7483e694 3013 linux)
7483e694
DB
3014 enable dv1394
3015 ;;
3016 irix*)
4f854758 3017 target_os=irix
7483e694
DB
3018 ranlib="echo ignoring ranlib"
3019 ;;
d22e8442 3020 os/2*)
d22e8442 3021 ln_s="cp -f"
9297f1ed 3022 objformat="aout"
e14574eb 3023 add_cppflags -D_GNU_SOURCE
355d81df 3024 add_ldflags -Zomf -Zbin-files -Zargs-wild -Zmap
71c61f62 3025 SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
4d58e4cb 3026 AVSERVERLDFLAGS=""
287d3b13 3027 LIBSUF="_s.a"
d22e8442
DY
3028 SLIBPREF=""
3029 SLIBSUF=".dll"
3030 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
3031 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
71c61f62 3032 SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
f69f51b3
DB
3033 echo PROTMODE >> $(SUBDIR)$(NAME).def; \
3034 echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
3035 echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
3036 echo EXPORTS >> $(SUBDIR)$(NAME).def; \
3037 emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
71c61f62 3038 SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
f69f51b3 3039 emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
2f138f0b 3040 SLIB_INSTALL_EXTRA_LIB='$(LIBPREF)$(NAME)_dll.a $(LIBPREF)$(NAME)_dll.lib'
bc574408 3041 enable dos_paths
d22e8442 3042 ;;
83993c1c 3043 gnu/kfreebsd)
3bd1eacd 3044 add_cppflags -D_BSD_SOURCE
83993c1c 3045 ;;
34e82167 3046 gnu)
34e82167 3047 ;;
d33ed7b3
MR
3048 qnx)
3049 add_cppflags -D_QNX_SOURCE
3050 network_extralibs="-lsocket"
3051 ;;
1c69c79f
MS
3052 symbian)
3053 SLIBSUF=".dll"
3054 enable dos_paths
e3bc07f4
MS
3055 add_cflags --include=$sysinclude/gcce/gcce.h -fvisibility=default
3056 add_cppflags -D__GCCE__ -D__SYMBIAN32__ -DSYMBIAN_OE_POSIX_SIGNALS
3057 add_ldflags -Wl,--target1-abs,--no-undefined \
3058 -Wl,-Ttext,0x80000,-Tdata,0x1000000 -shared \
3059 -Wl,--entry=_E32Startup -Wl,-u,_E32Startup
3060 add_extralibs -l:eexe.lib -l:usrt2_2.lib -l:dfpaeabi.dso \
3061 -l:drtaeabi.dso -l:scppnwdl.dso -lsupc++ -lgcc \
3062 -l:libc.dso -l:libm.dso -l:euser.dso -l:libcrt0.lib
1c69c79f 3063 ;;
fdd66609
MR
3064 osf1)
3065 add_cppflags -D_OSF_SOURCE -D_POSIX_PII -D_REENTRANT
3066 AVSERVERLDFLAGS=
3067 ;;
741a8b72
MR
3068 minix)
3069 ;;
4ebc6a74
MR
3070 plan9)
3071 add_cppflags -D_C99_SNPRINTF_EXTENSION \
3072 -D_REENTRANT_SOURCE \
3073 -D_RESEARCH_SOURCE \
3074 -DFD_SETSIZE=96 \
3075 -DHAVE_SOCK_OPTS
3076 add_compat strtod.o strtod=avpriv_strtod
3077 network_extralibs='-lbsd'
3078 exeobjs=compat/plan9/main.o
3079 disable avserver
4ebc6a74
MR
3080 cp_f='cp'
3081 ;;
614d8911
MR
3082 none)
3083 ;;
7483e694 3084 *)
4f924f9a 3085 die "Unknown OS '$target_os'."
7483e694
DB
3086 ;;
3087esac
3088
b797f3c4
MR
3089# determine libc flavour
3090
197252f1 3091# uclibc defines __GLIBC__, so it needs to be checked before glibc.
b797f3c4
MR
3092if check_cpp_condition features.h "defined __UCLIBC__"; then
3093 libc_type=uclibc
3bd1eacd 3094 add_cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
b797f3c4
MR
3095elif check_cpp_condition features.h "defined __GLIBC__"; then
3096 libc_type=glibc
3bd1eacd 3097 add_cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
29f1fa74
DB
3098# MinGW headers can be installed on Cygwin, so check for newlib first.
3099elif check_cpp_condition newlib.h "defined _NEWLIB_VERSION"; then
3100 libc_type=newlib
3101 add_cppflags -U__STRICT_ANSI__
b797f3c4
MR
3102elif check_header _mingw.h; then
3103 libc_type=mingw
3104 check_cpp_condition _mingw.h \
3105 "defined (__MINGW64_VERSION_MAJOR) || (__MINGW32_MAJOR_VERSION > 3) || \
3106 (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
3107 die "ERROR: MinGW runtime version must be >= 3.15."
759a3a21 3108 add_cppflags -U__STRICT_ANSI__
4fa661a8
RB
3109elif check_func_headers stdlib.h _get_doserrno; then
3110 libc_type=msvcrt
84e65c76
MR
3111 add_compat strtod.o strtod=avpriv_strtod
3112 add_compat msvcrt/snprintf.o snprintf=avpriv_snprintf \
3113 _snprintf=avpriv_snprintf \
3114 vsnprintf=avpriv_vsnprintf
b797f3c4
MR
3115elif check_cpp_condition stddef.h "defined __KLIBC__"; then
3116 libc_type=klibc
3117fi
3118
3119test -n "$libc_type" && enable $libc_type
3120
5ab432fa
MR
3121# hacks for compiler/libc/os combinations
3122
3123if enabled_all tms470 glibc; then
b6f8d635 3124 CPPFLAGS="-I${source_path}/compat/tms470 ${CPPFLAGS}"
5ab432fa
MR
3125 add_cppflags -D__USER_LABEL_PREFIX__=
3126 add_cppflags -D__builtin_memset=memset
3127 add_cppflags -D__gnuc_va_list=va_list -D_VA_LIST_DEFINED
3128 add_cflags -pds=48 # incompatible redefinition of macro
3129fi
3130
457cc333
MR
3131if enabled_all ccc glibc; then
3132 add_ldflags -Wl,-z,now # calls to libots crash without this
3133fi
3134
6555acad
MR
3135esc(){
3136 echo "$*" | sed 's/%/%25/g;s/:/%3a/g'
3137}
3138
3139echo "config:$arch:$subarch:$cpu:$target_os:$(esc $cc_ident):$(esc $LIBAV_CONFIGURATION)" >config.fate
db7515fd 3140
13cb2187
AS
3141check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable pic
3142
c9d19248 3143set_default $PATHS_LIST
2a8a860a 3144set_default nm
c9d19248 3145
320d060a 3146# we need to build at least one lib type
93b3c083 3147if ! enabled_any static shared; then
320d060a
DB
3148 cat <<EOF
3149At least one library type must be built.
3150Specify --enable-static to build the static libraries or --enable-shared to
3151build the shared libraries as well. To only build the shared libraries specify
3152--disable-static in addition to --enable-shared.
3153EOF
3154 exit 1;
3155fi
3156
2184c6f7 3157die_license_disabled() {
4c27207c 3158 enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
2184c6f7
DB
3159}
3160
e417d80d 3161die_license_disabled gpl libcdio
2184c6f7 3162die_license_disabled gpl libx264
de295976 3163die_license_disabled gpl libxavs
2184c6f7 3164die_license_disabled gpl libxvid
2184c6f7
DB
3165die_license_disabled gpl x11grab
3166
2f7ae63b 3167die_license_disabled nonfree libfaac
87246953 3168die_license_disabled nonfree libfdk_aac
a060866f 3169die_license_disabled nonfree openssl
b2e3c528 3170
0b175caa
DB
3171die_license_disabled version3 libopencore_amrnb
3172die_license_disabled version3 libopencore_amrwb
d89e738a 3173die_license_disabled version3 libvo_aacenc
f502ff3f 3174die_license_disabled version3 libvo_amrwbenc
0b175caa 3175
9cad0e4e 3176enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
3fe142e2 3177
40617a6d 3178disabled optimizations || check_cflags -fomit-frame-pointer
cf9d24ad 3179
e276d9e8
MR
3180enable_pic() {
3181 enable pic
bce7b696
MR
3182 add_cppflags -DPIC
3183 add_cflags -fPIC
3184 add_asflags -fPIC
e276d9e8
MR
3185}
3186
3187enabled pic && enable_pic
bce7b696 3188
b4d96ba2
MR
3189check_cc <<EOF || die "Symbol mangling check failed."
3190int ff_extern;
3191EOF
2a8a860a 3192sym=$($nm $TMPO | awk '/ff_extern/{ print substr($0, match($0, /[^ \t]*ff_extern/)) }')
b4d96ba2
MR
3193extern_prefix=${sym%%ff_extern*}
3194
afb5ed55 3195check_cc <<EOF && enable_weak inline_asm
f65883c8
MR
3196void foo(void) { __asm__ volatile ("" ::); }
3197EOF
61d251db 3198
df5e3978
MR
3199_restrict=
3200for restrict_keyword in restrict __restrict__ __restrict; do
3201 check_cc <<EOF && _restrict=$restrict_keyword && break
3202void foo(char * $restrict_keyword p);
3203EOF
3204done
3205
3206check_cc <<EOF && enable attribute_packed
3207struct { int x; } __attribute__((packed)) x;
3208EOF
3209
dffb41b9
MR
3210check_cc <<EOF && enable attribute_may_alias
3211union { int x; } __attribute__((may_alias)) x;
3212EOF
3213
df5e3978
MR
3214check_cc <<EOF || die "endian test failed"
3215unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
3216EOF
48fc536a 3217od -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
df5e3978 3218
e939cedd
MR
3219if enabled alpha; then
3220
3221 check_cflags -mieee
3222
3223elif enabled arm; then
e45391bb 3224
66371c28 3225 check_cpp_condition stddef.h "defined __thumb__" && enable_weak thumb
8986fddc 3226 enabled thumb && check_cflags -mthumb || check_cflags -marm
301ab19d 3227 nogas=die
50fa82e6 3228
44caaa56
MR
3229 if check_cpp_condition stddef.h "defined __ARM_PCS_VFP"; then
3230 enable vfp_args
3231 elif ! check_cpp_condition stddef.h "defined __ARM_PCS || defined __SOFTFP__"; then
3232 case "${cross_prefix:-$cc}" in
3233 *hardfloat*) enable vfp_args; fpabi=vfp ;;
3234 *) check_ld <<EOF && enable vfp_args && fpabi=vfp || fpabi=soft ;;
fa0912fe
MR
3235__asm__ (".eabi_attribute 28, 1");
3236int main(void) { return 0; }
3237EOF
44caaa56
MR
3238 esac
3239 warn "Compiler does not indicate floating-point ABI, guessing $fpabi."
3240 fi
fa0912fe 3241
7f2b3dca
MR
3242 enabled armv5te && check_insn armv5te 'qadd r0, r0, r0'
3243 enabled armv6 && check_insn armv6 'sadd16 r0, r0, r0'
3244 enabled armv6t2 && check_insn armv6t2 'movt r0, #0'
7f2b3dca 3245 enabled neon && check_insn neon 'vadd.i16 q0, q0, q0'
b3267559 3246 enabled vfp && check_insn vfp 'fadds s0, s0, s0'
7f2b3dca
MR
3247 enabled vfpv3 && check_insn vfpv3 'vmov.f32 s0, #1.0'
3248
b57c1da8
MR
3249 [ $target_os = linux ] ||
3250 map 'enabled_any ${v}_external ${v}_inline || disable $v' \
3251 $ARCH_EXT_LIST_ARM
e45391bb 3252
575db883
DB
3253 check_inline_asm asm_mod_q '"add r0, %Q0, %R0" :: "r"((long long)0)'
3254 check_inline_asm asm_mod_y '"vmul.i32 d0, d0, %y0" :: "x"(0)'
6308729e 3255
e276d9e8
MR
3256 enabled_all armv6t2 shared !pic && enable_pic
3257
fa0912fe 3258elif enabled mips; then
e45391bb 3259
575db883 3260 check_inline_asm loongson '"dmult.g $1, $2, $3"'
e45391bb 3261
5af530f5
MR
3262elif enabled parisc; then
3263
3264 if enabled gcc; then
3265 case $($cc -dumpversion) in
3266 4.[3-8].*) check_cflags -fno-optimize-sibling-calls ;;
3267 esac
3268 fi
3269
fa0912fe 3270elif enabled ppc; then
e45391bb 3271
e6a0c354
MR
3272 enable local_aligned_8 local_aligned_16
3273
575db883
DB
3274 check_inline_asm dcbzl '"dcbzl 0, %0" :: "r"(0)'
3275 check_inline_asm ibm_asm '"add 0, 0, 0"'
3276 check_inline_asm ppc4xx '"maclhw r10, r11, r12"'
3277 check_inline_asm xform_asm '"lwzx %1, %y0" :: "Z"(*(int*)0), "r"(0)'
fa0912fe
MR
3278
3279 # AltiVec flags: The FSF version of GCC differs from the Apple version
3280 if enabled altivec; then
301ab19d 3281 nogas=warn
fa0912fe
MR
3282 check_cflags -maltivec -mabi=altivec &&
3283 { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
3284 check_cflags -faltivec
3285
3286 # check if our compiler supports Motorola AltiVec C API
3287 check_cc <<EOF || disable altivec
3288$inc_altivec_h
3289int main(void) {
20bcce50
MR
3290 vector signed int v1 = (vector signed int) { 0 };
3291 vector signed int v2 = (vector signed int) { 1 };
3292 v1 = vec_add(v1, v2);
fa0912fe
MR
3293 return 0;
3294}
3295EOF
3296
20bcce50 3297 enabled altivec || warn "Altivec disabled, possibly missing --cpu flag"
fa0912fe 3298 fi
e45391bb 3299
fa0912fe 3300elif enabled sparc; then
e45391bb 3301
6aa93689 3302 enabled vis && check_inline_asm vis '"pdist %f0, %f0, %f0"'
e45391bb 3303
fa0912fe 3304elif enabled x86; then
e45391bb 3305
8e85ba8d
DB
3306 check_code ld intrin.h "__rdtsc()" && enable rdtsc
3307
f80ddd5b
RB
3308 check_code ld mmintrin.h "_mm_empty()" && enable mm_empty
3309
e6a0c354
MR
3310 enable local_aligned_8 local_aligned_16
3311
44965991
PI
3312 # check whether EBP is available on x86
3313 # As 'i' is stored on the stack, this program will crash
3314 # if the base pointer is used to access it because the
3315 # base pointer is cleared in the inline assembly code.
7dfef245 3316 check_exec_crash <<EOF && enable ebp_available
f69f51b3
DB
3317volatile int i=0;
3318__asm__ volatile ("xorl %%ebp, %%ebp" ::: "%ebp");
3319return i;
44965991
PI
3320EOF
3321
f494213c 3322 # check whether EBX is available on x86
575db883
DB
3323 check_inline_asm ebx_available '""::"b"(0)' &&
3324 check_inline_asm ebx_available '"":::"%ebx"'
8e380710 3325
6f74fb03 3326 # check whether xmm clobbers are supported
575db883 3327 check_inline_asm xmm_clobbers '"":::"%xmm0"'
6f74fb03 3328
239fdf1b 3329 # check whether binutils is new enough to compile SSSE3/MMXEXT
43b73d59
DB
3330 enabled ssse3 && check_inline_asm ssse3_inline '"pabsw %xmm0, %xmm0"'
3331 enabled mmxext && check_inline_asm mmxext_inline '"pmaxub %mm0, %mm1"'
6bd859d6 3332
9cca1e40 3333 if ! disabled_any asm mmx yasm; then
b6c06894
MR
3334 if check_cmd $yasmexe --version; then
3335 enabled x86_64 && yasm_extra="-m amd64"
3336 yasm_debug="-g dwarf2"
3337 elif check_cmd nasm -v; then
3338 yasmexe=nasm
3339 yasm_debug="-g -F dwarf"
3340 enabled x86_64 && test "$objformat" = elf && objformat=elf64
3341 fi
3342