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