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