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