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