lavd: Add KMS screen grabber
[ffmpeg.git] / configure
1 #!/bin/sh
2 #
3 # FFmpeg configure script
4 #
5 # Copyright (c) 2000-2002 Fabrice Bellard
6 # Copyright (c) 2005-2008 Diego Biurrun
7 # Copyright (c) 2005-2008 Mans Rullgard
8 #
9
10 # Prevent locale nonsense from breaking basic text processing.
11 LC_ALL=C
12 export LC_ALL
13
14 # make sure we are running under a compatible shell
15 # try to make this part work with most shells
16
17 try_exec(){
18     echo "Trying shell $1"
19     type "$1" > /dev/null 2>&1 && exec "$@"
20 }
21
22 unset foo
23 (: ${foo%%bar}) 2> /dev/null
24 E1="$?"
25
26 (: ${foo?}) 2> /dev/null
27 E2="$?"
28
29 if test "$E1" != 0 || test "$E2" = 0; then
30     echo "Broken shell detected.  Trying alternatives."
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" "$@"
43     fi
44     echo "No compatible shell script interpreter found."
45     echo "This configure script requires a POSIX-compatible shell"
46     echo "such as bash or ksh."
47     echo "THIS IS NOT A BUG IN FFMPEG, DO NOT REPORT IT AS SUCH."
48     echo "Instead, install a working POSIX-compatible shell."
49     echo "Disabling this configure test will create a broken FFmpeg."
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
54     exit 1
55 fi
56
57 test -d /usr/xpg4/bin && PATH=/usr/xpg4/bin:$PATH
58
59 show_help(){
60     cat <<EOF
61 Usage: configure [options]
62 Options: [defaults in brackets after descriptions]
63
64 Help options:
65   --help                   print this message
66   --quiet                  Suppress showing informative output
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
76   --list-outdevs           show all available output devices
77   --list-filters           show all available filters
78
79 Standard options:
80   --logfile=FILE           log tests and output to FILE [ffbuild/config.log]
81   --disable-logging        do not log configure debug information
82   --fatal-warnings         fail if any configure warning is generated
83   --prefix=PREFIX          install in PREFIX [$prefix_default]
84   --bindir=DIR             install binaries in DIR [PREFIX/bin]
85   --datadir=DIR            install data files in DIR [PREFIX/share/ffmpeg]
86   --docdir=DIR             install documentation in DIR [PREFIX/share/doc/ffmpeg]
87   --libdir=DIR             install libs in DIR [PREFIX/lib]
88   --shlibdir=DIR           install shared libs in DIR [LIBDIR]
89   --incdir=DIR             install includes in DIR [PREFIX/include]
90   --mandir=DIR             install man page in DIR [PREFIX/share/man]
91   --pkgconfigdir=DIR       install pkg-config files in DIR [LIBDIR/pkgconfig]
92   --enable-rpath           use rpath to allow installing libraries in paths
93                            not part of the dynamic linker search path
94                            use rpath when linking programs (USE WITH CARE)
95   --install-name-dir=DIR   Darwin directory name for installed targets
96
97 Licensing options:
98   --enable-gpl             allow use of GPL code, the resulting libs
99                            and binaries will be under GPL [no]
100   --enable-version3        upgrade (L)GPL to version 3 [no]
101   --enable-nonfree         allow use of nonfree code, the resulting libs
102                            and binaries will be unredistributable [no]
103
104 Configuration options:
105   --disable-static         do not build static libraries [no]
106   --enable-shared          build shared libraries [no]
107   --enable-small           optimize for size instead of speed
108   --disable-runtime-cpudetect disable detecting CPU capabilities at runtime (smaller binary)
109   --enable-gray            enable full grayscale support (slower color)
110   --disable-swscale-alpha  disable alpha channel support in swscale
111   --disable-all            disable building components, libraries and programs
112   --disable-autodetect     disable automatically detected external libraries [no]
113
114 Program options:
115   --disable-programs       do not build command line programs
116   --disable-ffmpeg         disable ffmpeg build
117   --disable-ffplay         disable ffplay build
118   --disable-ffprobe        disable ffprobe build
119   --disable-ffserver       disable ffserver build
120
121 Documentation options:
122   --disable-doc            do not build documentation
123   --disable-htmlpages      do not build HTML documentation pages
124   --disable-manpages       do not build man documentation pages
125   --disable-podpages       do not build POD documentation pages
126   --disable-txtpages       do not build text documentation pages
127
128 Component options:
129   --disable-avdevice       disable libavdevice build
130   --disable-avcodec        disable libavcodec build
131   --disable-avformat       disable libavformat build
132   --disable-swresample     disable libswresample build
133   --disable-swscale        disable libswscale build
134   --disable-postproc       disable libpostproc build
135   --disable-avfilter       disable libavfilter build
136   --enable-avresample      enable libavresample build [no]
137   --disable-pthreads       disable pthreads [autodetect]
138   --disable-w32threads     disable Win32 threads [autodetect]
139   --disable-os2threads     disable OS/2 threads [autodetect]
140   --disable-network        disable network support [no]
141   --disable-dct            disable DCT code
142   --disable-dwt            disable DWT code
143   --disable-error-resilience disable error resilience code
144   --disable-lsp            disable LSP code
145   --disable-lzo            disable LZO decoder code
146   --disable-mdct           disable MDCT code
147   --disable-rdft           disable RDFT code
148   --disable-fft            disable FFT code
149   --disable-faan           disable floating point AAN (I)DCT code
150   --disable-pixelutils     disable pixel utils in libavutil
151
152 Individual component options:
153   --disable-everything     disable all components listed below
154   --disable-encoder=NAME   disable encoder NAME
155   --enable-encoder=NAME    enable encoder NAME
156   --disable-encoders       disable all encoders
157   --disable-decoder=NAME   disable decoder NAME
158   --enable-decoder=NAME    enable decoder NAME
159   --disable-decoders       disable all decoders
160   --disable-hwaccel=NAME   disable hwaccel NAME
161   --enable-hwaccel=NAME    enable hwaccel NAME
162   --disable-hwaccels       disable all hwaccels
163   --disable-muxer=NAME     disable muxer NAME
164   --enable-muxer=NAME      enable muxer NAME
165   --disable-muxers         disable all muxers
166   --disable-demuxer=NAME   disable demuxer NAME
167   --enable-demuxer=NAME    enable demuxer NAME
168   --disable-demuxers       disable all demuxers
169   --enable-parser=NAME     enable parser NAME
170   --disable-parser=NAME    disable parser NAME
171   --disable-parsers        disable all parsers
172   --enable-bsf=NAME        enable bitstream filter NAME
173   --disable-bsf=NAME       disable bitstream filter NAME
174   --disable-bsfs           disable all bitstream filters
175   --enable-protocol=NAME   enable protocol NAME
176   --disable-protocol=NAME  disable protocol NAME
177   --disable-protocols      disable all protocols
178   --enable-indev=NAME      enable input device NAME
179   --disable-indev=NAME     disable input device NAME
180   --disable-indevs         disable input devices
181   --enable-outdev=NAME     enable output device NAME
182   --disable-outdev=NAME    disable output device NAME
183   --disable-outdevs        disable output devices
184   --disable-devices        disable all devices
185   --enable-filter=NAME     enable filter NAME
186   --disable-filter=NAME    disable filter NAME
187   --disable-filters        disable all filters
188
189 External library support:
190
191   Using any of the following switches will allow FFmpeg to link to the
192   corresponding external library. All the components depending on that library
193   will become enabled, if all their other dependencies are met and they are not
194   explicitly disabled. E.g. --enable-libwavpack will enable linking to
195   libwavpack and allow the libwavpack encoder to be built, unless it is
196   specifically disabled with --disable-encoder=libwavpack.
197
198   Note that only the system libraries are auto-detected. All the other external
199   libraries must be explicitly enabled.
200
201   Also note that the following help text describes the purpose of the libraries
202   themselves, not all their features will necessarily be usable by FFmpeg.
203
204   --disable-alsa           disable ALSA support [autodetect]
205   --disable-avfoundation   disable Apple AVFoundation framework [autodetect]
206   --enable-avisynth        enable reading of AviSynth script files [no]
207   --disable-bzlib          disable bzlib [autodetect]
208   --disable-coreimage      disable Apple CoreImage framework [autodetect]
209   --enable-chromaprint     enable audio fingerprinting with chromaprint [no]
210   --enable-frei0r          enable frei0r video filtering [no]
211   --enable-gcrypt          enable gcrypt, needed for rtmp(t)e support
212                            if openssl, librtmp or gmp is not used [no]
213   --enable-gmp             enable gmp, needed for rtmp(t)e support
214                            if openssl or librtmp is not used [no]
215   --enable-gnutls          enable gnutls, needed for https support
216                            if openssl is not used [no]
217   --disable-iconv          disable iconv [autodetect]
218   --disable-jack           disable libjack support [autodetect]
219   --enable-jni             enable JNI support [no]
220   --enable-ladspa          enable LADSPA audio filtering [no]
221   --enable-libass          enable libass subtitles rendering,
222                            needed for subtitles and ass filter [no]
223   --enable-libbluray       enable BluRay reading using libbluray [no]
224   --enable-libbs2b         enable bs2b DSP library [no]
225   --enable-libcaca         enable textual display using libcaca [no]
226   --enable-libcelt         enable CELT decoding via libcelt [no]
227   --enable-libcdio         enable audio CD grabbing with libcdio [no]
228   --enable-libdc1394       enable IIDC-1394 grabbing using libdc1394
229                            and libraw1394 [no]
230   --enable-libfdk-aac      enable AAC de/encoding via libfdk-aac [no]
231   --enable-libflite        enable flite (voice synthesis) support via libflite [no]
232   --enable-libfontconfig   enable libfontconfig, useful for drawtext filter [no]
233   --enable-libfreetype     enable libfreetype, needed for drawtext filter [no]
234   --enable-libfribidi      enable libfribidi, improves drawtext filter [no]
235   --enable-libgme          enable Game Music Emu via libgme [no]
236   --enable-libgsm          enable GSM de/encoding via libgsm [no]
237   --enable-libiec61883     enable iec61883 via libiec61883 [no]
238   --enable-libilbc         enable iLBC de/encoding via libilbc [no]
239   --enable-libkvazaar      enable HEVC encoding via libkvazaar [no]
240   --enable-libmodplug      enable ModPlug via libmodplug [no]
241   --enable-libmp3lame      enable MP3 encoding via libmp3lame [no]
242   --enable-libopencore-amrnb enable AMR-NB de/encoding via libopencore-amrnb [no]
243   --enable-libopencore-amrwb enable AMR-WB decoding via libopencore-amrwb [no]
244   --enable-libopencv       enable video filtering via libopencv [no]
245   --enable-libopenh264     enable H.264 encoding via OpenH264 [no]
246   --enable-libopenjpeg     enable JPEG 2000 de/encoding via OpenJPEG [no]
247   --enable-libopenmpt      enable decoding tracked files via libopenmpt [no]
248   --enable-libopus         enable Opus de/encoding via libopus [no]
249   --enable-libpulse        enable Pulseaudio input via libpulse [no]
250   --enable-librsvg         enable SVG rasterization via librsvg [no]
251   --enable-librubberband   enable rubberband needed for rubberband filter [no]
252   --enable-librtmp         enable RTMP[E] support via librtmp [no]
253   --enable-libshine        enable fixed-point MP3 encoding via libshine [no]
254   --enable-libsmbclient    enable Samba protocol via libsmbclient [no]
255   --enable-libsnappy       enable Snappy compression, needed for hap encoding [no]
256   --enable-libsoxr         enable Include libsoxr resampling [no]
257   --enable-libspeex        enable Speex de/encoding via libspeex [no]
258   --enable-libssh          enable SFTP protocol via libssh [no]
259   --enable-libtesseract    enable Tesseract, needed for ocr filter [no]
260   --enable-libtheora       enable Theora encoding via libtheora [no]
261   --enable-libtwolame      enable MP2 encoding via libtwolame [no]
262   --enable-libv4l2         enable libv4l2/v4l-utils [no]
263   --enable-libvidstab      enable video stabilization using vid.stab [no]
264   --enable-libvmaf         enable vmaf filter via libvmaf [no]
265   --enable-libvo-amrwbenc  enable AMR-WB encoding via libvo-amrwbenc [no]
266   --enable-libvorbis       enable Vorbis en/decoding via libvorbis,
267                            native implementation exists [no]
268   --enable-libvpx          enable VP8 and VP9 de/encoding via libvpx [no]
269   --enable-libwavpack      enable wavpack encoding via libwavpack [no]
270   --enable-libwebp         enable WebP encoding via libwebp [no]
271   --enable-libx264         enable H.264 encoding via x264 [no]
272   --enable-libx265         enable HEVC encoding via x265 [no]
273   --enable-libxavs         enable AVS encoding via xavs [no]
274   --enable-libxcb          enable X11 grabbing using XCB [autodetect]
275   --enable-libxcb-shm      enable X11 grabbing shm communication [autodetect]
276   --enable-libxcb-xfixes   enable X11 grabbing mouse rendering [autodetect]
277   --enable-libxcb-shape    enable X11 grabbing shape rendering [autodetect]
278   --enable-libxvid         enable Xvid encoding via xvidcore,
279                            native MPEG-4/Xvid encoder exists [no]
280   --enable-libxml2         enable XML parsing using the C library libxml2 [no]
281   --enable-libzimg         enable z.lib, needed for zscale filter [no]
282   --enable-libzmq          enable message passing via libzmq [no]
283   --enable-libzvbi         enable teletext support via libzvbi [no]
284   --disable-lzma           disable lzma [autodetect]
285   --enable-decklink        enable Blackmagic DeckLink I/O support [no]
286   --enable-libndi_newtek   enable Newteck NDI I/O support [no]
287   --enable-mediacodec      enable Android MediaCodec support [no]
288   --enable-libmysofa       enable libmysofa, needed for sofalizer filter [no]
289   --enable-openal          enable OpenAL 1.1 capture support [no]
290   --enable-opencl          enable OpenCL code
291   --enable-opengl          enable OpenGL rendering [no]
292   --enable-openssl         enable openssl, needed for https support
293                            if gnutls is not used [no]
294   --disable-sndio          disable sndio support [autodetect]
295   --disable-schannel       disable SChannel SSP, needed for TLS support on
296                            Windows if openssl and gnutls are not used [autodetect]
297   --disable-sdl2           disable sdl2 [autodetect]
298   --disable-securetransport disable Secure Transport, needed for TLS support
299                            on OSX if openssl and gnutls are not used [autodetect]
300   --disable-xlib           disable xlib [autodetect]
301   --disable-zlib           disable zlib [autodetect]
302
303   The following libraries provide various hardware acceleration features:
304   --disable-audiotoolbox   disable Apple AudioToolbox code [autodetect]
305   --disable-cuda           disable dynamically linked Nvidia CUDA code [autodetect]
306   --enable-cuda-sdk        enable CUDA features that require the CUDA SDK [no]
307   --disable-cuvid          disable Nvidia CUVID support [autodetect]
308   --disable-d3d11va        disable Microsoft Direct3D 11 video acceleration code [autodetect]
309   --disable-dxva2          disable Microsoft DirectX 9 video acceleration code [autodetect]
310   --enable-libdrm          enable DRM code (Linux) [no]
311   --enable-libmfx          enable Intel MediaSDK (AKA Quick Sync Video) code via libmfx [no]
312   --enable-libnpp          enable Nvidia Performance Primitives-based code [no]
313   --enable-mmal            enable Broadcom Multi-Media Abstraction Layer (Raspberry Pi) via MMAL [no]
314   --disable-nvenc          disable Nvidia video encoding code [autodetect]
315   --enable-omx             enable OpenMAX IL code [no]
316   --enable-omx-rpi         enable OpenMAX IL code for Raspberry Pi [no]
317   --disable-vaapi          disable Video Acceleration API (mainly Unix/Intel) code [autodetect]
318   --disable-vda            disable Apple Video Decode Acceleration code [autodetect]
319   --disable-vdpau          disable Nvidia Video Decode and Presentation API for Unix code [autodetect]
320   --disable-videotoolbox   disable VideoToolbox code [autodetect]
321
322 Toolchain options:
323   --arch=ARCH              select architecture [$arch]
324   --cpu=CPU                select the minimum required CPU (affects
325                            instruction selection, may crash on older CPUs)
326   --cross-prefix=PREFIX    use PREFIX for compilation tools [$cross_prefix]
327   --progs-suffix=SUFFIX    program name suffix []
328   --enable-cross-compile   assume a cross-compiler is used
329   --sysroot=PATH           root of cross-build tree
330   --sysinclude=PATH        location of cross-build system headers
331   --target-os=OS           compiler targets OS [$target_os]
332   --target-exec=CMD        command to run executables on target
333   --target-path=DIR        path to view of build directory on target
334   --target-samples=DIR     path to samples directory on target
335   --tempprefix=PATH        force fixed dir/prefix instead of mktemp for checks
336   --toolchain=NAME         set tool defaults according to NAME
337   --nm=NM                  use nm tool NM [$nm_default]
338   --ar=AR                  use archive tool AR [$ar_default]
339   --as=AS                  use assembler AS [$as_default]
340   --ln_s=LN_S              use symbolic link tool LN_S [$ln_s_default]
341   --strip=STRIP            use strip tool STRIP [$strip_default]
342   --windres=WINDRES        use windows resource compiler WINDRES [$windres_default]
343   --x86asmexe=EXE          use nasm-compatible assembler EXE [$x86asmexe_default]
344   --cc=CC                  use C compiler CC [$cc_default]
345   --cxx=CXX                use C compiler CXX [$cxx_default]
346   --objcc=OCC              use ObjC compiler OCC [$cc_default]
347   --dep-cc=DEPCC           use dependency generator DEPCC [$cc_default]
348   --nvcc=NVCC              use Nvidia CUDA compiler NVCC [$nvcc_default]
349   --ld=LD                  use linker LD [$ld_default]
350   --pkg-config=PKGCONFIG   use pkg-config tool PKGCONFIG [$pkg_config_default]
351   --pkg-config-flags=FLAGS pass additional flags to pkgconf []
352   --ranlib=RANLIB          use ranlib RANLIB [$ranlib_default]
353   --doxygen=DOXYGEN        use DOXYGEN to generate API doc [$doxygen_default]
354   --host-cc=HOSTCC         use host C compiler HOSTCC
355   --host-cflags=HCFLAGS    use HCFLAGS when compiling for host
356   --host-cppflags=HCPPFLAGS use HCPPFLAGS when compiling for host
357   --host-ld=HOSTLD         use host linker HOSTLD
358   --host-ldflags=HLDFLAGS  use HLDFLAGS when linking for host
359   --host-libs=HLIBS        use libs HLIBS when linking for host
360   --host-os=OS             compiler host OS [$target_os]
361   --extra-cflags=ECFLAGS   add ECFLAGS to CFLAGS [$CFLAGS]
362   --extra-cxxflags=ECFLAGS add ECFLAGS to CXXFLAGS [$CXXFLAGS]
363   --extra-objcflags=FLAGS  add FLAGS to OBJCFLAGS [$CFLAGS]
364   --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]
365   --extra-ldexeflags=ELDFLAGS add ELDFLAGS to LDEXEFLAGS [$LDEXEFLAGS]
366   --extra-ldlibflags=ELDFLAGS add ELDFLAGS to LDLIBFLAGS [$LDLIBFLAGS]
367   --extra-libs=ELIBS       add ELIBS [$ELIBS]
368   --extra-version=STRING   version string suffix []
369   --optflags=OPTFLAGS      override optimization-related compiler flags
370   --nvccflags=NVCCFLAGS    override nvcc flags [$nvccflags_default]
371   --build-suffix=SUFFIX    library name suffix []
372   --enable-pic             build position-independent code
373   --enable-thumb           compile for Thumb instruction set
374   --enable-lto             use link-time optimization
375   --env="ENV=override"     override the environment variables
376
377 Advanced options (experts only):
378   --malloc-prefix=PREFIX   prefix malloc and related names with PREFIX
379   --custom-allocator=NAME  use a supported custom allocator
380   --disable-symver         disable symbol versioning
381   --enable-hardcoded-tables use hardcoded tables instead of runtime generation
382   --disable-safe-bitstream-reader
383                            disable buffer boundary checking in bitreaders
384                            (faster, but may crash)
385   --sws-max-filter-size=N  the max filter size swscale uses [$sws_max_filter_size_default]
386
387 Optimization options (experts only):
388   --disable-asm            disable all assembly optimizations
389   --disable-altivec        disable AltiVec optimizations
390   --disable-vsx            disable VSX optimizations
391   --disable-power8         disable POWER8 optimizations
392   --disable-amd3dnow       disable 3DNow! optimizations
393   --disable-amd3dnowext    disable 3DNow! extended optimizations
394   --disable-mmx            disable MMX optimizations
395   --disable-mmxext         disable MMXEXT optimizations
396   --disable-sse            disable SSE optimizations
397   --disable-sse2           disable SSE2 optimizations
398   --disable-sse3           disable SSE3 optimizations
399   --disable-ssse3          disable SSSE3 optimizations
400   --disable-sse4           disable SSE4 optimizations
401   --disable-sse42          disable SSE4.2 optimizations
402   --disable-avx            disable AVX optimizations
403   --disable-xop            disable XOP optimizations
404   --disable-fma3           disable FMA3 optimizations
405   --disable-fma4           disable FMA4 optimizations
406   --disable-avx2           disable AVX2 optimizations
407   --disable-aesni          disable AESNI optimizations
408   --disable-armv5te        disable armv5te optimizations
409   --disable-armv6          disable armv6 optimizations
410   --disable-armv6t2        disable armv6t2 optimizations
411   --disable-vfp            disable VFP optimizations
412   --disable-neon           disable NEON optimizations
413   --disable-inline-asm     disable use of inline assembly
414   --disable-x86asm         disable use of standalone x86 assembly
415   --disable-mipsdsp        disable MIPS DSP ASE R1 optimizations
416   --disable-mipsdspr2      disable MIPS DSP ASE R2 optimizations
417   --disable-msa            disable MSA optimizations
418   --disable-mipsfpu        disable floating point MIPS optimizations
419   --disable-mmi            disable Loongson SIMD optimizations
420   --disable-fast-unaligned consider unaligned accesses slow
421
422 Developer options (useful when working on FFmpeg itself):
423   --disable-debug          disable debugging symbols
424   --enable-debug=LEVEL     set the debug level [$debuglevel]
425   --disable-optimizations  disable compiler optimizations
426   --enable-extra-warnings  enable more compiler warnings
427   --disable-stripping      disable stripping of executables and shared libraries
428   --assert-level=level     0(default), 1 or 2, amount of assertion testing,
429                            2 causes a slowdown at runtime.
430   --enable-memory-poisoning fill heap uninitialized allocated space with arbitrary data
431   --valgrind=VALGRIND      run "make fate" tests through valgrind to detect memory
432                            leaks and errors, using the specified valgrind binary.
433                            Cannot be combined with --target-exec
434   --enable-ftrapv          Trap arithmetic overflows
435   --samples=PATH           location of test samples for FATE, if not set use
436                            \$FATE_SAMPLES at make invocation time.
437   --enable-neon-clobber-test check NEON registers for clobbering (should be
438                            used only for debugging purposes)
439   --enable-xmm-clobber-test check XMM registers for clobbering (Win64-only;
440                            should be used only for debugging purposes)
441   --enable-random          randomly enable/disable components
442   --disable-random
443   --enable-random=LIST     randomly enable/disable specific components or
444   --disable-random=LIST    component groups. LIST is a comma-separated list
445                            of NAME[:PROB] entries where NAME is a component
446                            (group) and PROB the probability associated with
447                            NAME (default 0.5).
448   --random-seed=VALUE      seed value for --enable/disable-random
449   --disable-valgrind-backtrace do not print a backtrace under Valgrind
450                            (only applies to --disable-optimizations builds)
451   --enable-osfuzz          Enable building fuzzer tool
452   --libfuzzer=PATH         path to libfuzzer
453   --ignore-tests=TESTS     comma-separated list (without "fate-" prefix
454                            in the name) of tests whose result is ignored
455   --enable-linux-perf      enable Linux Performance Monitor API
456
457 NOTE: Object files are built at the place where configure is launched.
458 EOF
459   exit 0
460 }
461
462 quotes='""'
463 if test -t 1 && which tput >/dev/null 2>&1; then
464     ncolors=$(tput colors)
465     if test -n "$ncolors" && test $ncolors -ge 8; then
466         bold_color=$(tput bold)
467         warn_color=$(tput setaf 3)
468         error_color=$(tput setaf 1)
469         reset_color=$(tput sgr0)
470     fi
471     # 72 used instead of 80 since that's the default of pr
472     ncols=$(tput cols)
473 fi
474 : ${ncols:=72}
475
476 log(){
477     echo "$@" >> $logfile
478 }
479
480 log_file(){
481     log BEGIN $1
482     pr -n -t $1 >> $logfile
483     log END $1
484 }
485
486 warn(){
487     log "WARNING: $*"
488     WARNINGS="${WARNINGS}WARNING: $*\n"
489 }
490
491 die(){
492     log "$@"
493     echo "$error_color$bold_color$@$reset_color"
494     cat <<EOF
495
496 If you think configure made a mistake, make sure you are using the latest
497 version from Git.  If the latest version fails, report the problem to the
498 ffmpeg-user@ffmpeg.org mailing list or IRC #ffmpeg on irc.freenode.net.
499 EOF
500     if disabled logging; then
501         cat <<EOF
502 Rerun configure with logging enabled (do not use --disable-logging), and
503 include the log this produces with your report.
504 EOF
505     else
506         cat <<EOF
507 Include the log file "$logfile" produced by configure as this will help
508 solve the problem.
509 EOF
510     fi
511     exit 1
512 }
513
514 # Avoid locale weirdness, besides we really just want to translate ASCII.
515 toupper(){
516     echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
517 }
518
519 tolower(){
520     echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
521 }
522
523 c_escape(){
524     echo "$*" | sed 's/["\\]/\\\0/g'
525 }
526
527 sh_quote(){
528     v=$(echo "$1" | sed "s/'/'\\\\''/g")
529     test "x$v" = "x${v#*[!A-Za-z0-9_/.+-]}" || v="'$v'"
530     echo "$v"
531 }
532
533 cleanws(){
534     echo "$@" | sed 's/^ *//;s/[[:space:]][[:space:]]*/ /g;s/ *$//'
535 }
536
537 filter(){
538     pat=$1
539     shift
540     for v; do
541         eval "case $v in $pat) printf '%s ' $v ;; esac"
542     done
543 }
544
545 filter_out(){
546     pat=$1
547     shift
548     for v; do
549         eval "case $v in $pat) ;; *) printf '%s ' $v ;; esac"
550     done
551 }
552
553 map(){
554     m=$1
555     shift
556     for v; do eval $m; done
557 }
558
559 add_suffix(){
560     suffix=$1
561     shift
562     for v; do echo ${v}${suffix}; done
563 }
564
565 set_all(){
566     value=$1
567     shift
568     for var in $*; do
569         eval $var=$value
570     done
571 }
572
573 set_weak(){
574     value=$1
575     shift
576     for var; do
577         eval : \${$var:=$value}
578     done
579 }
580
581 sanitize_var_name(){
582     echo $@ | sed 's/[^A-Za-z0-9_]/_/g'
583 }
584
585 set_safe(){
586     var=$1
587     shift
588     eval $(sanitize_var_name "$var")='$*'
589 }
590
591 get_safe(){
592     eval echo \$$(sanitize_var_name "$1")
593 }
594
595 pushvar(){
596     for pvar in $*; do
597         eval level=\${${pvar}_level:=0}
598         eval ${pvar}_${level}="\$$pvar"
599         eval ${pvar}_level=$(($level+1))
600     done
601 }
602
603 popvar(){
604     for pvar in $*; do
605         eval level=\${${pvar}_level:-0}
606         test $level = 0 && continue
607         eval level=$(($level-1))
608         eval $pvar="\${${pvar}_${level}}"
609         eval ${pvar}_level=$level
610         eval unset ${pvar}_${level}
611     done
612 }
613
614 request(){
615     for var in $*; do
616         eval ${var}_requested=yes
617         eval $var=
618     done
619 }
620
621 enable(){
622     set_all yes $*
623 }
624
625 disable(){
626     set_all no $*
627 }
628
629 enable_weak(){
630     set_weak yes $*
631 }
632
633 disable_weak(){
634     set_weak no $*
635 }
636
637 enable_safe(){
638     for var; do
639         enable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
640     done
641 }
642
643 disable_safe(){
644     for var; do
645         disable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
646     done
647 }
648
649 do_enable_deep(){
650     for var; do
651         enabled $var && continue
652         eval sel="\$${var}_select"
653         eval sgs="\$${var}_suggest"
654         pushvar var sgs
655         enable_deep $sel
656         popvar sgs
657         enable_deep_weak $sgs
658         popvar var
659     done
660 }
661
662 enable_deep(){
663     do_enable_deep $*
664     enable $*
665 }
666
667 enable_deep_weak(){
668     for var; do
669         disabled $var && continue
670         pushvar var
671         do_enable_deep $var
672         popvar var
673         enable_weak $var
674     done
675 }
676
677 requested(){
678     test "${1#!}" = "$1" && op='=' || op=!=
679     eval test "x\$${1#!}_requested" $op "xyes"
680 }
681
682 enabled(){
683     test "${1#!}" = "$1" && op='=' || op=!=
684     eval test "x\$${1#!}" $op "xyes"
685 }
686
687 disabled(){
688     test "${1#!}" = "$1" && op='=' || op=!=
689     eval test "x\$${1#!}" $op "xno"
690 }
691
692 enabled_all(){
693     for opt; do
694         enabled $opt || return 1
695     done
696 }
697
698 disabled_all(){
699     for opt; do
700         disabled $opt || return 1
701     done
702 }
703
704 enabled_any(){
705     for opt; do
706         enabled $opt && return 0
707     done
708 }
709
710 disabled_any(){
711     for opt; do
712         disabled $opt && return 0
713     done
714     return 1
715 }
716
717 set_default(){
718     for opt; do
719         eval : \${$opt:=\$${opt}_default}
720     done
721 }
722
723 is_in(){
724     value=$1
725     shift
726     for var in $*; do
727         [ $var = $value ] && return 0
728     done
729     return 1
730 }
731
732 do_check_deps(){
733     for cfg; do
734         cfg="${cfg#!}"
735         enabled ${cfg}_checking && die "Circular dependency for $cfg."
736         disabled ${cfg}_checking && continue
737         enable ${cfg}_checking
738         append allopts $cfg
739
740         eval dep_all="\$${cfg}_deps"
741         eval dep_any="\$${cfg}_deps_any"
742         eval dep_sel="\$${cfg}_select"
743         eval dep_sgs="\$${cfg}_suggest"
744         eval dep_ifa="\$${cfg}_if"
745         eval dep_ifn="\$${cfg}_if_any"
746
747         pushvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
748         do_check_deps $dep_all $dep_any $dep_sel $dep_sgs $dep_ifa $dep_ifn
749         popvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
750
751         [ -n "$dep_ifa" ] && { enabled_all $dep_ifa && enable_weak $cfg; }
752         [ -n "$dep_ifn" ] && { enabled_any $dep_ifn && enable_weak $cfg; }
753         enabled_all  $dep_all || { disable $cfg && requested $cfg && die "ERROR: $cfg requested, but not all dependencies are satisfied: $dep_all"; }
754         enabled_any  $dep_any || { disable $cfg && requested $cfg && die "ERROR: $cfg requested, but not any dependency is satisfied: $dep_any"; }
755         disabled_any $dep_sel && { disable $cfg && requested $cfg && die "ERROR: $cfg requested, but some selected dependency is unsatisfied: $dep_sel"; }
756
757         if enabled $cfg; then
758             enable_deep $dep_sel
759             enable_deep_weak $dep_sgs
760         fi
761
762         disable ${cfg}_checking
763     done
764 }
765
766 check_deps(){
767     unset allopts
768
769     do_check_deps "$@"
770
771     for cfg in $allopts; do
772         enabled $cfg || continue
773         eval dep_extralibs="\$${cfg}_extralibs"
774         test -n "$dep_extralibs" && add_extralibs $dep_extralibs
775     done
776 }
777
778 print_config(){
779     pfx=$1
780     files=$2
781     shift 2
782     map 'eval echo "$v \${$v:-no}"' "$@" |
783     awk "BEGIN { split(\"$files\", files) }
784         {
785             c = \"$pfx\" toupper(\$1);
786             v = \$2;
787             sub(/yes/, 1, v);
788             sub(/no/,  0, v);
789             for (f in files) {
790                 file = files[f];
791                 if (file ~ /\\.h\$/) {
792                     printf(\"#define %s %d\\n\", c, v) >>file;
793                 } else if (file ~ /\\.asm\$/) {
794                     printf(\"%%define %s %d\\n\", c, v) >>file;
795                 } else if (file ~ /\\.mak\$/) {
796                     n = -v ? \"\" : \"!\";
797                     printf(\"%s%s=yes\\n\", n, c) >>file;
798                 } else if (file ~ /\\.texi\$/) {
799                     pre = -v ? \"\" : \"@c \";
800                     yesno = \$2;
801                     c2 = tolower(c);
802                     gsub(/_/, \"-\", c2);
803                     printf(\"%s@set %s %s\\n\", pre, c2, yesno) >>file;
804                 }
805             }
806         }"
807 }
808
809 print_enabled(){
810     suf=$1
811     shift
812     for v; do
813         enabled $v && printf "%s\n" ${v%$suf}
814     done
815 }
816
817 append(){
818     var=$1
819     shift
820     eval "$var=\"\$$var $*\""
821 }
822
823 prepend(){
824     var=$1
825     shift
826     eval "$var=\"$* \$$var\""
827 }
828
829 unique(){
830     var=$1
831     uniq_list=""
832     for tok in $(eval echo \$$var); do
833         uniq_list="$(filter_out $tok $uniq_list) $tok"
834     done
835     eval "$var=\"${uniq_list}\""
836 }
837
838 add_cppflags(){
839     append CPPFLAGS "$@"
840 }
841
842 add_cflags(){
843     append CFLAGS $($cflags_filter "$@")
844 }
845
846 add_cflags_headers(){
847     append CFLAGS_HEADERS $($cflags_filter "$@")
848 }
849
850 add_cxxflags(){
851     append CXXFLAGS $($cflags_filter "$@")
852 }
853
854 add_asflags(){
855     append ASFLAGS $($asflags_filter "$@")
856 }
857
858 add_objcflags(){
859     append OBJCFLAGS $($objcflags_filter "$@")
860 }
861
862 add_ldflags(){
863     append LDFLAGS $($ldflags_filter "$@")
864 }
865
866 add_ldexeflags(){
867     append LDEXEFLAGS $($ldflags_filter "$@")
868 }
869
870 add_ldlibflags(){
871     append LDLIBFLAGS $($ldflags_filter "$@")
872 }
873
874 add_stripflags(){
875     append ASMSTRIPFLAGS "$@"
876 }
877
878 add_extralibs(){
879     prepend extralibs $($ldflags_filter "$@")
880 }
881
882 add_host_cppflags(){
883     append host_cppflags "$@"
884 }
885
886 add_host_cflags(){
887     append host_cflags $($host_cflags_filter "$@")
888 }
889
890 add_host_ldflags(){
891     append host_ldflags $($host_ldflags_filter "$@")
892 }
893
894 add_compat(){
895     append compat_objs $1
896     shift
897     map 'add_cppflags -D$v' "$@"
898 }
899
900 check_cmd(){
901     log "$@"
902     "$@" >> $logfile 2>&1
903 }
904
905 check_stat(){
906     log check_stat "$@"
907     stat "$1" >> $logfile 2>&1
908 }
909
910 cc_o(){
911     eval printf '%s\\n' $CC_O
912 }
913
914 cc_e(){
915     eval printf '%s\\n' $CC_E
916 }
917
918 check_cc(){
919     log check_cc "$@"
920     cat > $TMPC
921     log_file $TMPC
922     check_cmd $cc $CPPFLAGS $CFLAGS "$@" $CC_C $(cc_o $TMPO) $TMPC
923 }
924
925 check_cxx(){
926     log check_cxx "$@"
927     cat > $TMPCPP
928     log_file $TMPCPP
929     check_cmd $cxx $CPPFLAGS $CFLAGS $CXXFLAGS "$@" $CXX_C -o $TMPO $TMPCPP
930 }
931
932 check_objcc(){
933     log check_objcc "$@"
934     cat > $TMPM
935     log_file $TMPM
936     check_cmd $objcc -Werror=missing-prototypes $CPPFLAGS $CFLAGS $OBJCFLAGS "$@" $OBJCC_C $(cc_o $TMPO) $TMPM
937 }
938
939 check_cpp(){
940     log check_cpp "$@"
941     cat > $TMPC
942     log_file $TMPC
943     check_cmd $cc $CPPFLAGS $CFLAGS "$@" $(cc_e $TMPO) $TMPC
944 }
945
946 as_o(){
947     eval printf '%s\\n' $AS_O
948 }
949
950 check_as(){
951     log check_as "$@"
952     cat > $TMPS
953     log_file $TMPS
954     check_cmd $as $CPPFLAGS $ASFLAGS "$@" $AS_C $(as_o $TMPO) $TMPS
955 }
956
957 check_inline_asm(){
958     log check_inline_asm "$@"
959     name="$1"
960     code="$2"
961     shift 2
962     disable $name
963     check_cc "$@" <<EOF && enable $name
964 void foo(void){ __asm__ volatile($code); }
965 EOF
966 }
967
968 check_inline_asm_flags(){
969     log check_inline_asm_flags "$@"
970     name="$1"
971     code="$2"
972     flags=''
973     shift 2
974     while [ "$1" != "" ]; do
975       append flags $1
976       shift
977     done;
978     disable $name
979     cat > $TMPC <<EOF
980 void foo(void){ __asm__ volatile($code); }
981 EOF
982     log_file $TMPC
983     check_cmd $cc $CPPFLAGS $CFLAGS $flags "$@" $CC_C $(cc_o $TMPO) $TMPC &&
984     enable $name && add_cflags $flags && add_asflags $flags && add_ldflags $flags
985 }
986
987 check_insn(){
988     log check_insn "$@"
989     check_inline_asm ${1}_inline "\"$2\""
990     echo "$2" | check_as && enable ${1}_external || disable ${1}_external
991 }
992
993 check_x86asm(){
994     log check_x86asm "$@"
995     echo "$1" > $TMPS
996     log_file $TMPS
997     shift 1
998     check_cmd $x86asmexe $X86ASMFLAGS -Werror "$@" -o $TMPO $TMPS
999 }
1000
1001 ld_o(){
1002     eval printf '%s\\n' $LD_O
1003 }
1004
1005 check_ld(){
1006     log check_ld "$@"
1007     type=$1
1008     shift 1
1009     flags=$(filter_out '-l*|*.so' $@)
1010     libs=$(filter '-l*|*.so' $@)
1011     check_$type $($cflags_filter $flags) || return
1012     flags=$($ldflags_filter $flags)
1013     libs=$($ldflags_filter $libs)
1014     check_cmd $ld $LDFLAGS $LDEXEFLAGS $flags $(ld_o $TMPE) $TMPO $libs $extralibs
1015 }
1016
1017 print_include(){
1018     hdr=$1
1019     test "${hdr%.h}" = "${hdr}" &&
1020         echo "#include $hdr"    ||
1021         echo "#include <$hdr>"
1022 }
1023
1024 check_code(){
1025     log check_code "$@"
1026     check=$1
1027     headers=$2
1028     code=$3
1029     shift 3
1030     {
1031         for hdr in $headers; do
1032             print_include $hdr
1033         done
1034         echo "int main(void) { $code; return 0; }"
1035     } | check_$check "$@"
1036 }
1037
1038 check_cppflags(){
1039     log check_cppflags "$@"
1040     check_cpp "$@" <<EOF && append CPPFLAGS "$@"
1041 int x;
1042 EOF
1043 }
1044
1045 test_cflags(){
1046     log test_cflags "$@"
1047     set -- $($cflags_filter "$@")
1048     check_cc "$@" <<EOF
1049 int x;
1050 EOF
1051 }
1052
1053 check_cflags(){
1054     log check_cflags "$@"
1055     test_cflags "$@" && add_cflags "$@"
1056 }
1057
1058 check_cxxflags(){
1059     log check_cxxflags "$@"
1060     set -- $($cflags_filter "$@")
1061     check_cxx "$@" <<EOF && append CXXFLAGS "$@"
1062 int x;
1063 EOF
1064 }
1065
1066 test_objcflags(){
1067     log test_objcflags "$@"
1068     set -- $($objcflags_filter "$@")
1069     check_objcc "$@" <<EOF
1070 int x;
1071 EOF
1072 }
1073
1074 check_objcflags(){
1075     log check_objcflags "$@"
1076     test_objcflags "$@" && add_objcflags "$@"
1077 }
1078
1079 test_ldflags(){
1080     log test_ldflags "$@"
1081     check_ld "cc" "$@" <<EOF
1082 int main(void){ return 0; }
1083 EOF
1084 }
1085
1086 check_ldflags(){
1087     log check_ldflags "$@"
1088     test_ldflags "$@" && add_ldflags "$@"
1089 }
1090
1091 test_stripflags(){
1092     log test_stripflags "$@"
1093     # call check_cc to get a fresh TMPO
1094     check_cc <<EOF
1095 int main(void) { return 0; }
1096 EOF
1097     check_cmd $strip $ASMSTRIPFLAGS "$@" $TMPO
1098 }
1099
1100 check_stripflags(){
1101     log check_stripflags "$@"
1102     test_stripflags "$@" && add_stripflags "$@"
1103 }
1104
1105 check_header(){
1106     log check_header "$@"
1107     header=$1
1108     shift
1109     disable_safe $header
1110     check_cpp "$@" <<EOF && enable_safe $header
1111 #include <$header>
1112 int x;
1113 EOF
1114 }
1115
1116 check_header_objcc(){
1117     log check_header_objcc "$@"
1118     rm -f -- "$TMPO"
1119     header=$1
1120     shift
1121     disable_safe $header
1122     {
1123        echo "#include <$header>"
1124        echo "int main(void) { return 0; }"
1125     } | check_objcc && check_stat "$TMPO" && enable_safe $header
1126 }
1127
1128 check_apple_framework(){
1129     log check_apple_framework "$@"
1130     framework="$1"
1131     name="$(tolower $framework)"
1132     header="${framework}/${framework}.h"
1133     disable $name
1134     check_header_objcc $header && enable $name && add_extralibs "-framework $framework"
1135 }
1136
1137 check_func(){
1138     log check_func "$@"
1139     func=$1
1140     shift
1141     disable $func
1142     check_ld "cc" "$@" <<EOF && enable $func
1143 extern int $func();
1144 int main(void){ $func(); }
1145 EOF
1146 }
1147
1148 check_complexfunc(){
1149     log check_complexfunc "$@"
1150     func=$1
1151     narg=$2
1152     shift 2
1153     test $narg = 2 && args="f, g" || args="f * I"
1154     disable $func
1155     check_ld "cc" "$@" <<EOF && enable $func
1156 #include <complex.h>
1157 #include <math.h>
1158 float foo(complex float f, complex float g) { return $func($args); }
1159 int main(void){ return (int) foo; }
1160 EOF
1161 }
1162
1163 check_mathfunc(){
1164     log check_mathfunc "$@"
1165     func=$1
1166     narg=$2
1167     shift 2
1168     test $narg = 2 && args="f, g" || args="f"
1169     disable $func
1170     check_ld "cc" "$@" <<EOF && enable $func
1171 #include <math.h>
1172 float foo(float f, float g) { return $func($args); }
1173 int main(void){ return (int) foo; }
1174 EOF
1175 }
1176
1177 check_func_headers(){
1178     log check_func_headers "$@"
1179     headers=$1
1180     funcs=$2
1181     shift 2
1182     {
1183         for hdr in $headers; do
1184             print_include $hdr
1185         done
1186         echo "#include <stdint.h>"
1187         for func in $funcs; do
1188             echo "long check_$func(void) { return (long) $func; }"
1189         done
1190         echo "int main(void) { int ret = 0;"
1191         # LTO could optimize out the test functions without this
1192         for func in $funcs; do
1193             echo " ret |= ((intptr_t)check_$func) & 0xFFFF;"
1194         done
1195         echo "return ret; }"
1196     } | check_ld "cc" "$@" && enable $funcs && enable_safe $headers
1197 }
1198
1199 check_class_headers_cpp(){
1200     log check_class_headers_cpp "$@"
1201     headers=$1
1202     classes=$2
1203     shift 2
1204     {
1205         for hdr in $headers; do
1206             echo "#include <$hdr>"
1207         done
1208         echo "int main(void) { "
1209         i=1
1210         for class in $classes; do
1211             echo "$class obj$i;"
1212             i=$(expr $i + 1)
1213         done
1214         echo "return 0; }"
1215     } | check_ld "cxx" "$@" && enable $funcs && enable_safe $headers
1216 }
1217
1218 check_cpp_condition(){
1219     log check_cpp_condition "$@"
1220     header=$1
1221     condition=$2
1222     shift 2
1223     check_cpp "$@" <<EOF
1224 #include <$header>
1225 #if !($condition)
1226 #error "unsatisfied condition: $condition"
1227 #endif
1228 EOF
1229 }
1230
1231 test_cflags_cc(){
1232     log test_cflags_cc "$@"
1233     flags=$1
1234     header=$2
1235     condition=$3
1236     shift 3
1237     set -- $($cflags_filter "$flags")
1238     check_cc "$@" <<EOF
1239 #include <$header>
1240 #if !($condition)
1241 #error "unsatisfied condition: $condition"
1242 #endif
1243 EOF
1244 }
1245
1246 check_lib(){
1247     log check_lib "$@"
1248     name="$1"
1249     headers="$2"
1250     funcs="$3"
1251     shift 3
1252     disable $name
1253     check_func_headers "$headers" "$funcs" "$@" &&
1254         enable $name && add_extralibs "$@"
1255 }
1256
1257 check_lib_cpp(){
1258     log check_lib_cpp "$@"
1259     headers="$1"
1260     classes="$2"
1261     shift 2
1262     check_class_headers_cpp "$headers" "$classes" "$@" && add_extralibs "$@"
1263 }
1264
1265 check_pkg_config(){
1266     log check_pkg_config "$@"
1267     pkg_version="$1"
1268     pkg="${1%% *}"
1269     headers="$2"
1270     funcs="$3"
1271     shift 3
1272     check_cmd $pkg_config --exists --print-errors $pkg_version || return
1273     pkg_cflags=$($pkg_config --cflags $pkg_config_flags $pkg)
1274     pkg_libs=$($pkg_config --libs $pkg_config_flags $pkg)
1275     check_func_headers "$headers" "$funcs" $pkg_cflags $pkg_libs "$@" &&
1276         set_safe "${pkg}_cflags"    $pkg_cflags &&
1277         set_safe "${pkg}_extralibs" $pkg_libs
1278 }
1279
1280 check_exec(){
1281     check_ld "cc" "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
1282 }
1283
1284 check_exec_crash(){
1285     log check_exec_crash "$@"
1286     code=$(cat)
1287
1288     # exit() is not async signal safe.  _Exit (C99) and _exit (POSIX)
1289     # are safe but may not be available everywhere.  Thus we use
1290     # raise(SIGTERM) instead.  The check is run in a subshell so we
1291     # can redirect the "Terminated" message from the shell.  SIGBUS
1292     # is not defined by standard C so it is used conditionally.
1293
1294     (check_exec "$@") >> $logfile 2>&1 <<EOF
1295 #include <signal.h>
1296 static void sighandler(int sig){
1297     raise(SIGTERM);
1298 }
1299 int foo(void){
1300     $code
1301 }
1302 int (*func_ptr)(void) = foo;
1303 int main(void){
1304     signal(SIGILL, sighandler);
1305     signal(SIGFPE, sighandler);
1306     signal(SIGSEGV, sighandler);
1307 #ifdef SIGBUS
1308     signal(SIGBUS, sighandler);
1309 #endif
1310     return func_ptr();
1311 }
1312 EOF
1313 }
1314
1315 check_type(){
1316     log check_type "$@"
1317     headers=$1
1318     type=$2
1319     shift 2
1320     disable_safe "$type"
1321     check_code cc "$headers" "$type v" "$@" && enable_safe "$type"
1322 }
1323
1324 check_struct(){
1325     log check_struct "$@"
1326     headers=$1
1327     struct=$2
1328     member=$3
1329     shift 3
1330     disable_safe "${struct}_${member}"
1331     check_code cc "$headers" "const void *p = &(($struct *)0)->$member" "$@" &&
1332         enable_safe "${struct}_${member}"
1333 }
1334
1335 check_builtin(){
1336     log check_builtin "$@"
1337     name=$1
1338     headers=$2
1339     builtin=$3
1340     shift 3
1341     disable "$name"
1342     check_code ld "$headers" "$builtin" "cc" "$@" && enable "$name"
1343 }
1344
1345 check_compile_assert(){
1346     log check_compile_assert "$@"
1347     name=$1
1348     headers=$2
1349     condition=$3
1350     shift 3
1351     disable "$name"
1352     check_code cc "$headers" "char c[2 * !!($condition) - 1]" "$@" && enable "$name"
1353 }
1354
1355 require(){
1356     log require "$@"
1357     name_version="$1"
1358     name="${1%% *}"
1359     headers="$2"
1360     func="$3"
1361     shift 3
1362     check_lib $name "$headers" $func "$@" || die "ERROR: $name_version not found"
1363 }
1364
1365 require_cpp(){
1366     name="$1"
1367     headers="$2"
1368     classes="$3"
1369     shift 3
1370     check_lib_cpp "$headers" "$classes" "$@" || die "ERROR: $name not found"
1371 }
1372
1373 use_pkg_config(){
1374     log use_pkg_config "$@"
1375     pkg="$1"
1376     check_pkg_config "$@" || return 1
1377     add_cflags    $(get_safe "${pkg}_cflags")
1378     add_extralibs $(get_safe "${pkg}_extralibs")
1379 }
1380
1381 require_pkg_config(){
1382     use_pkg_config "$@" || die "ERROR: $pkg not found using pkg-config$pkg_config_fail_message"
1383 }
1384
1385 hostcc_e(){
1386     eval printf '%s\\n' $HOSTCC_E
1387 }
1388
1389 hostcc_o(){
1390     eval printf '%s\\n' $HOSTCC_O
1391 }
1392
1393 check_host_cc(){
1394     log check_host_cc "$@"
1395     cat > $TMPC
1396     log_file $TMPC
1397     check_cmd $host_cc $host_cflags "$@" $HOSTCC_C $(hostcc_o $TMPO) $TMPC
1398 }
1399
1400 check_host_cpp(){
1401     log check_host_cpp "$@"
1402     cat > $TMPC
1403     log_file $TMPC
1404     check_cmd $host_cc $host_cppflags $host_cflags "$@" $(hostcc_e $TMPO) $TMPC
1405 }
1406
1407 check_host_cppflags(){
1408     log check_host_cppflags "$@"
1409     check_host_cpp "$@" <<EOF && append host_cppflags "$@"
1410 int x;
1411 EOF
1412 }
1413
1414 check_host_cflags(){
1415     log check_host_cflags "$@"
1416     set -- $($host_cflags_filter "$@")
1417     check_host_cc "$@" <<EOF && append host_cflags "$@"
1418 int x;
1419 EOF
1420 }
1421
1422 check_host_cpp_condition(){
1423     log check_host_cpp_condition "$@"
1424     header=$1
1425     condition=$2
1426     shift 2
1427     check_host_cpp "$@" <<EOF
1428 #include <$header>
1429 #if !($condition)
1430 #error "unsatisfied condition: $condition"
1431 #endif
1432 EOF
1433 }
1434
1435 cp_if_changed(){
1436     cmp -s "$1" "$2" && { test "$quiet" != "yes" && echo "$2 is unchanged"; } && return
1437     mkdir -p "$(dirname $2)"
1438     cp -f "$1" "$2"
1439 }
1440
1441 # CONFIG_LIST contains configurable options, while HAVE_LIST is for
1442 # system-dependent things.
1443
1444 AVCODEC_COMPONENTS="
1445     bsfs
1446     decoders
1447     encoders
1448     hwaccels
1449     parsers
1450 "
1451
1452 AVDEVICE_COMPONENTS="
1453     indevs
1454     outdevs
1455 "
1456
1457 AVFILTER_COMPONENTS="
1458     filters
1459 "
1460
1461 AVFORMAT_COMPONENTS="
1462     demuxers
1463     muxers
1464     protocols
1465 "
1466
1467 AVRESAMPLE_COMPONENTS=""
1468
1469 AVUTIL_COMPONENTS=""
1470
1471 COMPONENT_LIST="
1472     $AVCODEC_COMPONENTS
1473     $AVDEVICE_COMPONENTS
1474     $AVFILTER_COMPONENTS
1475     $AVFORMAT_COMPONENTS
1476     $AVRESAMPLE_COMPONENTS
1477     $AVUTIL_COMPONENTS
1478 "
1479
1480 EXAMPLE_LIST="
1481     avio_dir_cmd_example
1482     avio_reading_example
1483     decode_audio_example
1484     decode_video_example
1485     demuxing_decoding_example
1486     encode_audio_example
1487     encode_video_example
1488     extract_mvs_example
1489     filter_audio_example
1490     filtering_audio_example
1491     filtering_video_example
1492     http_multiclient_example
1493     hw_decode_example
1494     metadata_example
1495     muxing_example
1496     qsvdec_example
1497     remuxing_example
1498     resampling_audio_example
1499     scaling_video_example
1500     transcode_aac_example
1501     transcoding_example
1502 "
1503
1504 EXTERNAL_AUTODETECT_LIBRARY_LIST="
1505     alsa
1506     avfoundation
1507     bzlib
1508     coreimage
1509     iconv
1510     jack
1511     libxcb
1512     libxcb_shm
1513     libxcb_shape
1514     libxcb_xfixes
1515     lzma
1516     schannel
1517     sdl2
1518     securetransport
1519     sndio
1520     xlib
1521     zlib
1522 "
1523
1524 EXTERNAL_LIBRARY_GPL_LIST="
1525     avisynth
1526     frei0r
1527     libcdio
1528     librubberband
1529     libvidstab
1530     libx264
1531     libx265
1532     libxavs
1533     libxvid
1534 "
1535
1536 EXTERNAL_LIBRARY_NONFREE_LIST="
1537     decklink
1538     libndi_newtek
1539     libfdk_aac
1540     openssl
1541 "
1542
1543 EXTERNAL_LIBRARY_VERSION3_LIST="
1544     gmp
1545     libopencore_amrnb
1546     libopencore_amrwb
1547     libvo_amrwbenc
1548 "
1549
1550 EXTERNAL_LIBRARY_GPLV3_LIST="
1551     libsmbclient
1552 "
1553
1554 EXTERNAL_LIBRARY_LIST="
1555     $EXTERNAL_AUTODETECT_LIBRARY_LIST
1556     $EXTERNAL_LIBRARY_GPL_LIST
1557     $EXTERNAL_LIBRARY_NONFREE_LIST
1558     $EXTERNAL_LIBRARY_VERSION3_LIST
1559     $EXTERNAL_LIBRARY_GPLV3_LIST
1560     chromaprint
1561     gcrypt
1562     gnutls
1563     jni
1564     ladspa
1565     libass
1566     libbluray
1567     libbs2b
1568     libcaca
1569     libcelt
1570     libdc1394
1571     libdrm
1572     libflite
1573     libfontconfig
1574     libfreetype
1575     libfribidi
1576     libgme
1577     libgsm
1578     libiec61883
1579     libilbc
1580     libkvazaar
1581     libmodplug
1582     libmp3lame
1583     libmysofa
1584     libopencv
1585     libopenh264
1586     libopenjpeg
1587     libopenmpt
1588     libopus
1589     libpulse
1590     librsvg
1591     librtmp
1592     libshine
1593     libsmbclient
1594     libsnappy
1595     libsoxr
1596     libspeex
1597     libssh
1598     libtesseract
1599     libtheora
1600     libtwolame
1601     libv4l2
1602     libvmaf
1603     libvorbis
1604     libvpx
1605     libwavpack
1606     libwebp
1607     libxml2
1608     libzimg
1609     libzmq
1610     libzvbi
1611     mediacodec
1612     openal
1613     opencl
1614     opengl
1615 "
1616
1617 HWACCEL_AUTODETECT_LIBRARY_LIST="
1618     audiotoolbox
1619     crystalhd
1620     cuda
1621     cuvid
1622     d3d11va
1623     dxva2
1624     nvenc
1625     vaapi
1626     vda
1627     vdpau
1628     videotoolbox
1629     xvmc
1630 "
1631
1632 HWACCEL_LIBRARY_NONFREE_LIST="
1633     cuda_sdk
1634     libnpp
1635 "
1636
1637 HWACCEL_LIBRARY_LIST="
1638     $HWACCEL_AUTODETECT_LIBRARY_LIST
1639     $HWACCEL_LIBRARY_NONFREE_LIST
1640     libmfx
1641     mmal
1642     omx
1643 "
1644
1645 DOCUMENT_LIST="
1646     doc
1647     htmlpages
1648     manpages
1649     podpages
1650     txtpages
1651 "
1652
1653 FEATURE_LIST="
1654     ftrapv
1655     gray
1656     hardcoded_tables
1657     omx_rpi
1658     runtime_cpudetect
1659     safe_bitstream_reader
1660     shared
1661     small
1662     static
1663     swscale_alpha
1664 "
1665
1666 LIBRARY_LIST="
1667     avcodec
1668     avdevice
1669     avfilter
1670     avformat
1671     avresample
1672     avutil
1673     postproc
1674     swresample
1675     swscale
1676 "
1677
1678 LICENSE_LIST="
1679     gpl
1680     nonfree
1681     version3
1682 "
1683
1684 PROGRAM_LIST="
1685     ffplay
1686     ffprobe
1687     ffserver
1688     ffmpeg
1689 "
1690
1691 SUBSYSTEM_LIST="
1692     dct
1693     dwt
1694     error_resilience
1695     faan
1696     fast_unaligned
1697     fft
1698     lsp
1699     lzo
1700     mdct
1701     pixelutils
1702     network
1703     rdft
1704 "
1705
1706 # COMPONENT_LIST needs to come last to ensure correct dependency checking
1707 CONFIG_LIST="
1708     $DOCUMENT_LIST
1709     $EXAMPLE_LIST
1710     $EXTERNAL_LIBRARY_LIST
1711     $HWACCEL_LIBRARY_LIST
1712     $FEATURE_LIST
1713     $LICENSE_LIST
1714     $LIBRARY_LIST
1715     $PROGRAM_LIST
1716     $SUBSYSTEM_LIST
1717     autodetect
1718     fontconfig
1719     linux_perf
1720     memory_poisoning
1721     neon_clobber_test
1722     ossfuzz
1723     pic
1724     thumb
1725     valgrind_backtrace
1726     xmm_clobber_test
1727     $COMPONENT_LIST
1728 "
1729
1730 THREADS_LIST="
1731     pthreads
1732     os2threads
1733     w32threads
1734 "
1735
1736 ATOMICS_LIST="
1737     atomics_gcc
1738     atomics_suncc
1739     atomics_win32
1740 "
1741
1742 AUTODETECT_LIBS="
1743     $EXTERNAL_AUTODETECT_LIBRARY_LIST
1744     $HWACCEL_AUTODETECT_LIBRARY_LIST
1745     $THREADS_LIST
1746 "
1747
1748 ARCH_LIST="
1749     aarch64
1750     alpha
1751     arm
1752     avr32
1753     avr32_ap
1754     avr32_uc
1755     bfin
1756     ia64
1757     m68k
1758     mips
1759     mips64
1760     parisc
1761     ppc
1762     ppc64
1763     s390
1764     sh4
1765     sparc
1766     sparc64
1767     tilegx
1768     tilepro
1769     tomi
1770     x86
1771     x86_32
1772     x86_64
1773 "
1774
1775 ARCH_EXT_LIST_ARM="
1776     armv5te
1777     armv6
1778     armv6t2
1779     armv8
1780     neon
1781     vfp
1782     vfpv3
1783     setend
1784 "
1785
1786 ARCH_EXT_LIST_MIPS="
1787     mipsfpu
1788     mips32r2
1789     mips32r5
1790     mips64r2
1791     mips32r6
1792     mips64r6
1793     mipsdsp
1794     mipsdspr2
1795     msa
1796 "
1797
1798 ARCH_EXT_LIST_LOONGSON="
1799     loongson2
1800     loongson3
1801     mmi
1802 "
1803
1804 ARCH_EXT_LIST_X86_SIMD="
1805     aesni
1806     amd3dnow
1807     amd3dnowext
1808     avx
1809     avx2
1810     fma3
1811     fma4
1812     mmx
1813     mmxext
1814     sse
1815     sse2
1816     sse3
1817     sse4
1818     sse42
1819     ssse3
1820     xop
1821 "
1822
1823 ARCH_EXT_LIST_PPC="
1824     altivec
1825     dcbzl
1826     ldbrx
1827     power8
1828     ppc4xx
1829     vsx
1830 "
1831
1832 ARCH_EXT_LIST_X86="
1833     $ARCH_EXT_LIST_X86_SIMD
1834     cpunop
1835     i686
1836 "
1837
1838 ARCH_EXT_LIST="
1839     $ARCH_EXT_LIST_ARM
1840     $ARCH_EXT_LIST_PPC
1841     $ARCH_EXT_LIST_X86
1842     $ARCH_EXT_LIST_MIPS
1843     $ARCH_EXT_LIST_LOONGSON
1844 "
1845
1846 ARCH_FEATURES="
1847     aligned_stack
1848     fast_64bit
1849     fast_clz
1850     fast_cmov
1851     local_aligned_8
1852     local_aligned_16
1853     local_aligned_32
1854     simd_align_16
1855     simd_align_32
1856 "
1857
1858 BUILTIN_LIST="
1859     atomic_cas_ptr
1860     machine_rw_barrier
1861     MemoryBarrier
1862     mm_empty
1863     rdtsc
1864     sarestart
1865     sem_timedwait
1866     sync_val_compare_and_swap
1867 "
1868 HAVE_LIST_CMDLINE="
1869     inline_asm
1870     symver
1871     x86asm
1872 "
1873
1874 HAVE_LIST_PUB="
1875     bigendian
1876     fast_unaligned
1877 "
1878
1879 HEADERS_LIST="
1880     altivec_h
1881     arpa_inet_h
1882     asm_types_h
1883     cdio_paranoia_h
1884     cdio_paranoia_paranoia_h
1885     cuda_h
1886     d3d11_h
1887     dispatch_dispatch_h
1888     dev_bktr_ioctl_bt848_h
1889     dev_bktr_ioctl_meteor_h
1890     dev_ic_bt8xx_h
1891     dev_video_bktr_ioctl_bt848_h
1892     dev_video_meteor_ioctl_meteor_h
1893     direct_h
1894     dirent_h
1895     dlfcn_h
1896     dxgidebug_h
1897     dxva_h
1898     ES2_gl_h
1899     gsm_h
1900     io_h
1901     mach_mach_time_h
1902     machine_ioctl_bt848_h
1903     machine_ioctl_meteor_h
1904     malloc_h
1905     opencv2_core_core_c_h
1906     openjpeg_2_2_openjpeg_h
1907     openjpeg_2_1_openjpeg_h
1908     openjpeg_2_0_openjpeg_h
1909     openjpeg_1_5_openjpeg_h
1910     OpenGL_gl3_h
1911     poll_h
1912     soundcard_h
1913     stdatomic_h
1914     sys_mman_h
1915     sys_param_h
1916     sys_resource_h
1917     sys_select_h
1918     sys_soundcard_h
1919     sys_time_h
1920     sys_un_h
1921     sys_videoio_h
1922     termios_h
1923     udplite_h
1924     unistd_h
1925     valgrind_valgrind_h
1926     windows_h
1927     winsock2_h
1928 "
1929
1930 INTRINSICS_LIST="
1931     intrinsics_neon
1932 "
1933
1934 COMPLEX_FUNCS="
1935     cabs
1936     cexp
1937 "
1938
1939 MATH_FUNCS="
1940     atanf
1941     atan2f
1942     cbrt
1943     cbrtf
1944     copysign
1945     cosf
1946     erf
1947     exp2
1948     exp2f
1949     expf
1950     hypot
1951     isfinite
1952     isinf
1953     isnan
1954     ldexpf
1955     llrint
1956     llrintf
1957     log2
1958     log2f
1959     log10f
1960     lrint
1961     lrintf
1962     powf
1963     rint
1964     round
1965     roundf
1966     sinf
1967     trunc
1968     truncf
1969 "
1970
1971 SYSTEM_FUNCS="
1972     access
1973     aligned_malloc
1974     arc4random
1975     clock_gettime
1976     closesocket
1977     CommandLineToArgvW
1978     CoTaskMemFree
1979     CryptGenRandom
1980     dlopen
1981     fcntl
1982     flt_lim
1983     fork
1984     getaddrinfo
1985     gethrtime
1986     getopt
1987     GetProcessAffinityMask
1988     GetProcessMemoryInfo
1989     GetProcessTimes
1990     getrusage
1991     GetSystemTimeAsFileTime
1992     gettimeofday
1993     glob
1994     glXGetProcAddress
1995     gmtime_r
1996     inet_aton
1997     isatty
1998     jack_port_get_latency_range
1999     kbhit
2000     LoadLibrary
2001     localtime_r
2002     lstat
2003     lzo1x_999_compress
2004     mach_absolute_time
2005     MapViewOfFile
2006     memalign
2007     mkstemp
2008     mmap
2009     mprotect
2010     nanosleep
2011     PeekNamedPipe
2012     posix_memalign
2013     pthread_cancel
2014     sched_getaffinity
2015     SetConsoleTextAttribute
2016     SetConsoleCtrlHandler
2017     setmode
2018     setrlimit
2019     Sleep
2020     strerror_r
2021     sysconf
2022     sysctl
2023     usleep
2024     UTGetOSTypeFromString
2025     VirtualAlloc
2026     wglGetProcAddress
2027 "
2028
2029 TOOLCHAIN_FEATURES="
2030     as_dn_directive
2031     as_fpu_directive
2032     as_func
2033     as_object_arch
2034     asm_mod_q
2035     attribute_may_alias
2036     attribute_packed
2037     blocks_extension
2038     ebp_available
2039     ebx_available
2040     gnu_as
2041     gnu_windres
2042     ibm_asm
2043     inline_asm_direct_symbol_refs
2044     inline_asm_labels
2045     inline_asm_nonlocal_labels
2046     pragma_deprecated
2047     rsync_contimeout
2048     symver_asm_label
2049     symver_gnu_asm
2050     vfp_args
2051     xform_asm
2052     xmm_clobbers
2053 "
2054
2055 TYPES_LIST="
2056     CONDITION_VARIABLE_Ptr
2057     socklen_t
2058     struct_addrinfo
2059     struct_group_source_req
2060     struct_ip_mreq_source
2061     struct_ipv6_mreq
2062     struct_msghdr_msg_flags
2063     struct_pollfd
2064     struct_rusage_ru_maxrss
2065     struct_sctp_event_subscribe
2066     struct_sockaddr_in6
2067     struct_sockaddr_sa_len
2068     struct_sockaddr_storage
2069     struct_stat_st_mtim_tv_nsec
2070     struct_v4l2_frmivalenum_discrete
2071 "
2072
2073 HAVE_LIST="
2074     $ARCH_EXT_LIST
2075     $(add_suffix _external $ARCH_EXT_LIST)
2076     $(add_suffix _inline   $ARCH_EXT_LIST)
2077     $ARCH_FEATURES
2078     $ATOMICS_LIST
2079     $BUILTIN_LIST
2080     $COMPLEX_FUNCS
2081     $HAVE_LIST_CMDLINE
2082     $HAVE_LIST_PUB
2083     $HEADERS_LIST
2084     $INTRINSICS_LIST
2085     $MATH_FUNCS
2086     $SYSTEM_FUNCS
2087     $THREADS_LIST
2088     $TOOLCHAIN_FEATURES
2089     $TYPES_LIST
2090     atomics_native
2091     dos_paths
2092     libc_msvcrt
2093     makeinfo
2094     makeinfo_html
2095     MMAL_PARAMETER_VIDEO_MAX_NUM_CALLBACKS
2096     perl
2097     pod2man
2098     section_data_rel_ro
2099     texi2html
2100     threads
2101     uwp
2102     vaapi_drm
2103     vaapi_x11
2104     vdpau_x11
2105     winrt
2106 "
2107
2108 # options emitted with CONFIG_ prefix but not available on the command line
2109 CONFIG_EXTRA="
2110     aandcttables
2111     ac3dsp
2112     audio_frame_queue
2113     audiodsp
2114     blockdsp
2115     bswapdsp
2116     cabac
2117     dirac_parse
2118     dvprofile
2119     exif
2120     faandct
2121     faanidct
2122     fdctdsp
2123     flacdsp
2124     fmtconvert
2125     frame_thread_encoder
2126     g722dsp
2127     golomb
2128     gplv3
2129     h263dsp
2130     h264chroma
2131     h264dsp
2132     h264parse
2133     h264pred
2134     h264qpel
2135     hevcparse
2136     hpeldsp
2137     huffman
2138     huffyuvdsp
2139     huffyuvencdsp
2140     idctdsp
2141     iirfilter
2142     mdct15
2143     intrax8
2144     iso_media
2145     ividsp
2146     jpegtables
2147     lgplv3
2148     libx262
2149     llauddsp
2150     llviddsp
2151     llvidencdsp
2152     lpc
2153     lzf
2154     me_cmp
2155     mpeg_er
2156     mpegaudio
2157     mpegaudiodsp
2158     mpegaudioheader
2159     mpegvideo
2160     mpegvideoenc
2161     mss34dsp
2162     pixblockdsp
2163     qpeldsp
2164     qsv
2165     qsvdec
2166     qsvenc
2167     rangecoder
2168     riffdec
2169     riffenc
2170     rtpdec
2171     rtpenc_chain
2172     rv34dsp
2173     sinewin
2174     snappy
2175     srtp
2176     startcode
2177     texturedsp
2178     texturedspenc
2179     tpeldsp
2180     vaapi_encode
2181     vc1dsp
2182     videodsp
2183     vp3dsp
2184     vp56dsp
2185     vp8dsp
2186     wma_freqs
2187     wmv2dsp
2188 "
2189
2190 CMDLINE_SELECT="
2191     $ARCH_EXT_LIST
2192     $CONFIG_LIST
2193     $HAVE_LIST_CMDLINE
2194     $THREADS_LIST
2195     asm
2196     cross_compile
2197     debug
2198     extra_warnings
2199     logging
2200     lto
2201     optimizations
2202     rpath
2203     stripping
2204 "
2205
2206 PATHS_LIST="
2207     bindir
2208     datadir
2209     docdir
2210     incdir
2211     libdir
2212     mandir
2213     pkgconfigdir
2214     prefix
2215     shlibdir
2216     install_name_dir
2217 "
2218
2219 CMDLINE_SET="
2220     $PATHS_LIST
2221     ar
2222     arch
2223     as
2224     assert_level
2225     build_suffix
2226     cc
2227     objcc
2228     cpu
2229     cross_prefix
2230     custom_allocator
2231     cxx
2232     dep_cc
2233     doxygen
2234     env
2235     extra_version
2236     gas
2237     host_cc
2238     host_cflags
2239     host_extralibs
2240     host_ld
2241     host_ldflags
2242     host_os
2243     ignore_tests
2244     install
2245     ld
2246     ln_s
2247     logfile
2248     malloc_prefix
2249     nm
2250     optflags
2251     nvccflags
2252     pkg_config
2253     pkg_config_flags
2254     progs_suffix
2255     random_seed
2256     ranlib
2257     samples
2258     strip
2259     sws_max_filter_size
2260     sysinclude
2261     sysroot
2262     target_exec
2263     target_os
2264     target_path
2265     target_samples
2266     tempprefix
2267     toolchain
2268     valgrind
2269     x86asmexe
2270 "
2271
2272 CMDLINE_APPEND="
2273     extra_cflags
2274     extra_cxxflags
2275     extra_objcflags
2276     host_cppflags
2277 "
2278
2279 # code dependency declarations
2280
2281 # architecture extensions
2282
2283 armv5te_deps="arm"
2284 armv6_deps="arm"
2285 armv6t2_deps="arm"
2286 armv8_deps="aarch64"
2287 neon_deps_any="aarch64 arm"
2288 intrinsics_neon_deps="neon"
2289 vfp_deps_any="aarch64 arm"
2290 vfpv3_deps="vfp"
2291 setend_deps="arm"
2292
2293 map 'eval ${v}_inline_deps=inline_asm' $ARCH_EXT_LIST_ARM
2294
2295 loongson2_deps="mips"
2296 loongson3_deps="mips"
2297 mipsfpu_deps="mips"
2298 mipsdsp_deps="mips"
2299 mipsdspr2_deps="mips"
2300 mips32r2_deps="mips"
2301 mips32r5_deps="mips"
2302 mips32r6_deps="mips"
2303 mips64r2_deps="mips"
2304 mips64r6_deps="mips"
2305 msa_deps="mipsfpu"
2306 mmi_deps="mips"
2307
2308 altivec_deps="ppc"
2309 dcbzl_deps="ppc"
2310 ldbrx_deps="ppc"
2311 ppc4xx_deps="ppc"
2312 vsx_deps="altivec"
2313 power8_deps="vsx"
2314
2315 cpunop_deps="i686"
2316 x86_64_select="i686"
2317 x86_64_suggest="fast_cmov"
2318
2319 amd3dnow_deps="mmx"
2320 amd3dnowext_deps="amd3dnow"
2321 i686_deps="x86"
2322 mmx_deps="x86"
2323 mmxext_deps="mmx"
2324 sse_deps="mmxext"
2325 sse2_deps="sse"
2326 sse3_deps="sse2"
2327 ssse3_deps="sse3"
2328 sse4_deps="ssse3"
2329 sse42_deps="sse4"
2330 aesni_deps="sse42"
2331 avx_deps="sse42"
2332 xop_deps="avx"
2333 fma3_deps="avx"
2334 fma4_deps="avx"
2335 avx2_deps="avx"
2336
2337 mmx_external_deps="x86asm"
2338 mmx_inline_deps="inline_asm"
2339 mmx_suggest="mmx_external mmx_inline"
2340
2341 for ext in $(filter_out mmx $ARCH_EXT_LIST_X86_SIMD); do
2342     eval dep=\$${ext}_deps
2343     eval ${ext}_external_deps='"${dep}_external"'
2344     eval ${ext}_inline_deps='"${dep}_inline"'
2345     eval ${ext}_suggest='"${ext}_external ${ext}_inline"'
2346 done
2347
2348 aligned_stack_if_any="aarch64 ppc x86"
2349 fast_64bit_if_any="aarch64 alpha ia64 mips64 parisc64 ppc64 sparc64 x86_64"
2350 fast_clz_if_any="aarch64 alpha avr32 mips ppc x86"
2351 fast_unaligned_if_any="aarch64 ppc x86"
2352 simd_align_16_if_any="altivec neon sse"
2353 simd_align_32_if_any="avx"
2354
2355 # system capabilities
2356 symver_if_any="symver_asm_label symver_gnu_asm"
2357 valgrind_backtrace_deps="!optimizations valgrind_valgrind_h"
2358
2359 # threading support
2360 atomics_gcc_if="sync_val_compare_and_swap"
2361 atomics_suncc_if="atomic_cas_ptr machine_rw_barrier"
2362 atomics_win32_if="MemoryBarrier"
2363 atomics_native_if_any="$ATOMICS_LIST"
2364 w32threads_deps="atomics_native"
2365 threads_if_any="$THREADS_LIST"
2366
2367 # subsystems
2368 dct_select="rdft"
2369 dirac_parse_select="golomb"
2370 error_resilience_select="me_cmp"
2371 faandct_deps="faan fdctdsp"
2372 faanidct_deps="faan idctdsp"
2373 h264dsp_select="startcode"
2374 hevcparse_select="golomb"
2375 frame_thread_encoder_deps="encoders threads"
2376 intrax8_select="blockdsp idctdsp"
2377 mdct_select="fft"
2378 mdct15_select="fft"
2379 me_cmp_select="fdctdsp idctdsp pixblockdsp"
2380 mpeg_er_select="error_resilience"
2381 mpegaudio_select="mpegaudiodsp mpegaudioheader"
2382 mpegaudiodsp_select="dct"
2383 mpegvideo_select="blockdsp h264chroma hpeldsp idctdsp me_cmp mpeg_er videodsp"
2384 mpegvideoenc_select="me_cmp mpegvideo pixblockdsp qpeldsp"
2385 vc1dsp_select="h264chroma qpeldsp startcode"
2386 rdft_select="fft"
2387
2388 # decoders / encoders
2389 aac_decoder_select="mdct15 mdct sinewin"
2390 aac_fixed_decoder_select="mdct sinewin"
2391 aac_encoder_select="audio_frame_queue iirfilter lpc mdct sinewin"
2392 aac_latm_decoder_select="aac_decoder aac_latm_parser"
2393 ac3_decoder_select="ac3_parser ac3dsp bswapdsp fmtconvert mdct"
2394 ac3_fixed_decoder_select="ac3_parser ac3dsp bswapdsp mdct"
2395 ac3_encoder_select="ac3dsp audiodsp mdct me_cmp"
2396 ac3_fixed_encoder_select="ac3dsp audiodsp mdct me_cmp"
2397 adpcm_g722_decoder_select="g722dsp"
2398 adpcm_g722_encoder_select="g722dsp"
2399 aic_decoder_select="golomb idctdsp"
2400 alac_encoder_select="lpc"
2401 als_decoder_select="bswapdsp"
2402 amrnb_decoder_select="lsp"
2403 amrwb_decoder_select="lsp"
2404 amv_decoder_select="sp5x_decoder exif"
2405 amv_encoder_select="aandcttables jpegtables mpegvideoenc"
2406 ape_decoder_select="bswapdsp llauddsp"
2407 apng_decoder_select="zlib"
2408 apng_encoder_select="llvidencdsp zlib"
2409 asv1_decoder_select="blockdsp bswapdsp idctdsp"
2410 asv1_encoder_select="bswapdsp fdctdsp pixblockdsp"
2411 asv2_decoder_select="blockdsp bswapdsp idctdsp"
2412 asv2_encoder_select="bswapdsp fdctdsp pixblockdsp"
2413 atrac1_decoder_select="mdct sinewin"
2414 atrac3_decoder_select="mdct"
2415 atrac3p_decoder_select="mdct sinewin"
2416 avrn_decoder_select="exif jpegtables"
2417 bink_decoder_select="blockdsp hpeldsp"
2418 binkaudio_dct_decoder_select="mdct rdft dct sinewin wma_freqs"
2419 binkaudio_rdft_decoder_select="mdct rdft sinewin wma_freqs"
2420 cavs_decoder_select="blockdsp golomb h264chroma idctdsp qpeldsp videodsp"
2421 clearvideo_decoder_select="idctdsp"
2422 cllc_decoder_select="bswapdsp"
2423 comfortnoise_encoder_select="lpc"
2424 cook_decoder_select="audiodsp mdct sinewin"
2425 cscd_decoder_select="lzo"
2426 cscd_decoder_suggest="zlib"
2427 dca_decoder_select="mdct"
2428 dds_decoder_select="texturedsp"
2429 dirac_decoder_select="dirac_parse dwt golomb videodsp mpegvideoenc"
2430 dnxhd_decoder_select="blockdsp idctdsp"
2431 dnxhd_encoder_select="aandcttables blockdsp fdctdsp idctdsp mpegvideoenc pixblockdsp"
2432 dolby_e_decoder_select="mdct"
2433 dvvideo_decoder_select="dvprofile idctdsp"
2434 dvvideo_encoder_select="dvprofile fdctdsp me_cmp pixblockdsp"
2435 dxa_decoder_select="zlib"
2436 dxv_decoder_select="lzf texturedsp"
2437 eac3_decoder_select="ac3_decoder"
2438 eac3_encoder_select="ac3_encoder"
2439 eamad_decoder_select="aandcttables blockdsp bswapdsp idctdsp mpegvideo"
2440 eatgq_decoder_select="aandcttables"
2441 eatqi_decoder_select="aandcttables blockdsp bswapdsp idctdsp"
2442 exr_decoder_select="zlib"
2443 ffv1_decoder_select="rangecoder"
2444 ffv1_encoder_select="rangecoder"
2445 ffvhuff_decoder_select="huffyuv_decoder"
2446 ffvhuff_encoder_select="huffyuv_encoder"
2447 fic_decoder_select="golomb"
2448 flac_decoder_select="flacdsp"
2449 flac_encoder_select="bswapdsp flacdsp lpc"
2450 flashsv2_decoder_select="zlib"
2451 flashsv2_encoder_select="zlib"
2452 flashsv_decoder_select="zlib"
2453 flashsv_encoder_select="zlib"
2454 flv_decoder_select="h263_decoder"
2455 flv_encoder_select="h263_encoder"
2456 fourxm_decoder_select="blockdsp bswapdsp"
2457 fraps_decoder_select="bswapdsp huffman"
2458 g2m_decoder_select="blockdsp idctdsp jpegtables zlib"
2459 g729_decoder_select="audiodsp"
2460 h261_decoder_select="mpegvideo"
2461 h261_encoder_select="aandcttables mpegvideoenc"
2462 h263_decoder_select="h263_parser h263dsp mpegvideo qpeldsp"
2463 h263_encoder_select="aandcttables h263dsp mpegvideoenc"
2464 h263i_decoder_select="h263_decoder"
2465 h263p_decoder_select="h263_decoder"
2466 h263p_encoder_select="h263_encoder"
2467 h264_decoder_select="cabac golomb h264chroma h264dsp h264parse h264pred h264qpel videodsp"
2468 h264_decoder_suggest="error_resilience"
2469 hap_decoder_select="snappy texturedsp"
2470 hap_encoder_deps="libsnappy"
2471 hap_encoder_select="texturedspenc"
2472 hevc_decoder_select="bswapdsp cabac golomb hevcparse videodsp"
2473 huffyuv_decoder_select="bswapdsp huffyuvdsp llviddsp"
2474 huffyuv_encoder_select="bswapdsp huffman huffyuvencdsp llvidencdsp"
2475 iac_decoder_select="imc_decoder"
2476 imc_decoder_select="bswapdsp fft mdct sinewin"
2477 indeo3_decoder_select="hpeldsp"
2478 indeo4_decoder_select="ividsp"
2479 indeo5_decoder_select="ividsp"
2480 interplay_video_decoder_select="hpeldsp"
2481 jpegls_decoder_select="mjpeg_decoder"
2482 jv_decoder_select="blockdsp"
2483 lagarith_decoder_select="llviddsp"
2484 ljpeg_encoder_select="aandcttables idctdsp jpegtables mpegvideoenc"
2485 magicyuv_decoder_select="llviddsp"
2486 mdec_decoder_select="blockdsp idctdsp mpegvideo"
2487 metasound_decoder_select="lsp mdct sinewin"
2488 mimic_decoder_select="blockdsp bswapdsp hpeldsp idctdsp"
2489 mjpeg_decoder_select="blockdsp hpeldsp exif idctdsp jpegtables"
2490 mjpeg_encoder_select="aandcttables jpegtables mpegvideoenc"
2491 mjpegb_decoder_select="mjpeg_decoder"
2492 mlp_decoder_select="mlp_parser"
2493 mlp_encoder_select="lpc"
2494 motionpixels_decoder_select="bswapdsp"
2495 mp1_decoder_select="mpegaudio"
2496 mp1float_decoder_select="mpegaudio"
2497 mp2_decoder_select="mpegaudio"
2498 mp2float_decoder_select="mpegaudio"
2499 mp3_decoder_select="mpegaudio"
2500 mp3adu_decoder_select="mpegaudio"
2501 mp3adufloat_decoder_select="mpegaudio"
2502 mp3float_decoder_select="mpegaudio"
2503 mp3on4_decoder_select="mpegaudio"
2504 mp3on4float_decoder_select="mpegaudio"
2505 mpc7_decoder_select="bswapdsp mpegaudiodsp"
2506 mpc8_decoder_select="mpegaudiodsp"
2507 mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h"
2508 mpeg_xvmc_decoder_select="mpeg2video_decoder"
2509 mpegvideo_decoder_select="mpegvideo"
2510 mpeg1video_decoder_select="mpegvideo"
2511 mpeg1video_encoder_select="aandcttables mpegvideoenc h263dsp"
2512 mpeg2video_decoder_select="mpegvideo"
2513 mpeg2video_encoder_select="aandcttables mpegvideoenc h263dsp"
2514 mpeg4_decoder_select="h263_decoder mpeg4video_parser"
2515 mpeg4_encoder_select="h263_encoder"
2516 msa1_decoder_select="mss34dsp"
2517 mscc_decoder_select="zlib"
2518 msmpeg4v1_decoder_select="h263_decoder"
2519 msmpeg4v2_decoder_select="h263_decoder"
2520 msmpeg4v2_encoder_select="h263_encoder"
2521 msmpeg4v3_decoder_select="h263_decoder"
2522 msmpeg4v3_encoder_select="h263_encoder"
2523 mss2_decoder_select="mpegvideo qpeldsp vc1_decoder"
2524 mts2_decoder_select="mss34dsp"
2525 mxpeg_decoder_select="mjpeg_decoder"
2526 nellymoser_decoder_select="mdct sinewin"
2527 nellymoser_encoder_select="audio_frame_queue mdct sinewin"
2528 nuv_decoder_select="idctdsp lzo"
2529 on2avc_decoder_select="mdct"
2530 opus_decoder_deps="swresample"
2531 opus_decoder_select="mdct15"
2532 opus_encoder_select="audio_frame_queue mdct15"
2533 png_decoder_select="zlib"
2534 png_encoder_select="llvidencdsp zlib"
2535 prores_decoder_select="blockdsp idctdsp"
2536 prores_encoder_select="fdctdsp"
2537 qcelp_decoder_select="lsp"
2538 qdm2_decoder_select="mdct rdft mpegaudiodsp"
2539 ra_144_decoder_select="audiodsp"
2540 ra_144_encoder_select="audio_frame_queue lpc audiodsp"
2541 ralf_decoder_select="golomb"
2542 rawvideo_decoder_select="bswapdsp"
2543 rscc_decoder_select="zlib"
2544 rtjpeg_decoder_select="me_cmp"
2545 rv10_decoder_select="h263_decoder"
2546 rv10_encoder_select="h263_encoder"
2547 rv20_decoder_select="h263_decoder"
2548 rv20_encoder_select="h263_encoder"
2549 rv30_decoder_select="golomb h264pred h264qpel mpegvideo rv34dsp"
2550 rv40_decoder_select="golomb h264pred h264qpel mpegvideo rv34dsp"
2551 screenpresso_decoder_select="zlib"
2552 shorten_decoder_select="bswapdsp"
2553 sipr_decoder_select="lsp"
2554 snow_decoder_select="dwt h264qpel hpeldsp me_cmp rangecoder videodsp"
2555 snow_encoder_select="aandcttables dwt h264qpel hpeldsp me_cmp mpegvideoenc rangecoder"
2556 sonic_decoder_select="golomb rangecoder"
2557 sonic_encoder_select="golomb rangecoder"
2558 sonic_ls_encoder_select="golomb rangecoder"
2559 sp5x_decoder_select="mjpeg_decoder"
2560 srgc_decoder_select="zlib"
2561 svq1_decoder_select="hpeldsp"
2562 svq1_encoder_select="aandcttables hpeldsp me_cmp mpegvideoenc"
2563 svq3_decoder_select="golomb h264dsp h264parse h264pred hpeldsp tpeldsp videodsp"
2564 svq3_decoder_suggest="zlib"
2565 tak_decoder_select="audiodsp"
2566 tdsc_decoder_select="zlib mjpeg_decoder"
2567 theora_decoder_select="vp3_decoder"
2568 thp_decoder_select="mjpeg_decoder"
2569 tiff_decoder_suggest="zlib lzma"
2570 tiff_encoder_suggest="zlib"
2571 truehd_decoder_select="mlp_parser"
2572 truehd_encoder_select="lpc"
2573 truemotion2_decoder_select="bswapdsp"
2574 truespeech_decoder_select="bswapdsp"
2575 tscc_decoder_select="zlib"
2576 twinvq_decoder_select="mdct lsp sinewin"
2577 txd_decoder_select="texturedsp"
2578 utvideo_decoder_select="bswapdsp llviddsp"
2579 utvideo_encoder_select="bswapdsp huffman llvidencdsp"
2580 vble_decoder_select="llviddsp"
2581 vc1_decoder_select="blockdsp h263_decoder h264qpel intrax8 mpegvideo vc1dsp"
2582 vc1_qsv_decoder_deps="libmfx"
2583 vc1_qsv_decoder_select="qsvdec vc1_qsv_hwaccel vc1_parser"
2584 vc1image_decoder_select="vc1_decoder"
2585 vorbis_decoder_select="mdct"
2586 vorbis_encoder_select="mdct"
2587 vp3_decoder_select="hpeldsp vp3dsp videodsp"
2588 vp5_decoder_select="h264chroma hpeldsp videodsp vp3dsp vp56dsp"
2589 vp6_decoder_select="h264chroma hpeldsp huffman videodsp vp3dsp vp56dsp"
2590 vp6a_decoder_select="vp6_decoder"
2591 vp6f_decoder_select="vp6_decoder"
2592 vp7_decoder_select="h264pred videodsp vp8dsp"
2593 vp8_decoder_select="h264pred videodsp vp8dsp"
2594 vp9_decoder_select="videodsp vp9_parser"
2595 webp_decoder_select="vp8_decoder exif"
2596 wmalossless_decoder_select="llauddsp"
2597 wmapro_decoder_select="mdct sinewin wma_freqs"
2598 wmav1_decoder_select="mdct sinewin wma_freqs"
2599 wmav1_encoder_select="mdct sinewin wma_freqs"
2600 wmav2_decoder_select="mdct sinewin wma_freqs"
2601 wmav2_encoder_select="mdct sinewin wma_freqs"
2602 wmavoice_decoder_select="lsp rdft dct mdct sinewin"
2603 wmv1_decoder_select="h263_decoder"
2604 wmv1_encoder_select="h263_encoder"
2605 wmv2_decoder_select="blockdsp error_resilience h263_decoder idctdsp intrax8 videodsp wmv2dsp"
2606 wmv2_encoder_select="h263_encoder wmv2dsp"
2607 wmv3_decoder_select="vc1_decoder"
2608 wmv3image_decoder_select="wmv3_decoder"
2609 xma1_decoder_select="wmapro_decoder"
2610 xma2_decoder_select="wmapro_decoder"
2611 zerocodec_decoder_select="zlib"
2612 zlib_decoder_select="zlib"
2613 zlib_encoder_select="zlib"
2614 zmbv_decoder_select="zlib"
2615 zmbv_encoder_select="zlib"
2616
2617 # hardware accelerators
2618 crystalhd_deps="libcrystalhd_libcrystalhd_if_h"
2619 cuda_deps_any="dlopen LoadLibrary"
2620 cuvid_deps="cuda"
2621 d3d11va_deps="d3d11_h dxva_h ID3D11VideoDecoder ID3D11VideoContext"
2622 dxva2_deps="dxva2api_h DXVA2_ConfigPictureDecode ole32"
2623 dxva2_extralibs="-luser32"
2624 vda_framework_deps="VideoDecodeAcceleration_VDADecoder_h blocks_extension"
2625 vda_framework_extralibs="-framework VideoDecodeAcceleration"
2626 vda_deps="vda_framework pthreads"
2627 vda_extralibs="-framework CoreFoundation -framework QuartzCore"
2628 videotoolbox_hwaccel_deps="videotoolbox pthreads"
2629 videotoolbox_hwaccel_extralibs="-framework QuartzCore"
2630 xvmc_deps="X11_extensions_XvMClib_h"
2631
2632 h263_vaapi_hwaccel_deps="vaapi"
2633 h263_vaapi_hwaccel_select="h263_decoder"
2634 h263_videotoolbox_hwaccel_deps="videotoolbox"
2635 h263_videotoolbox_hwaccel_select="h263_decoder"
2636 h264_cuvid_hwaccel_deps="cuda cuvid"
2637 h264_cuvid_hwaccel_select="h264_cuvid_decoder"
2638 h264_d3d11va_hwaccel_deps="d3d11va"
2639 h264_d3d11va_hwaccel_select="h264_decoder"
2640 h264_d3d11va2_hwaccel_deps="d3d11va"
2641 h264_d3d11va2_hwaccel_select="h264_decoder"
2642 h264_dxva2_hwaccel_deps="dxva2"
2643 h264_dxva2_hwaccel_select="h264_decoder"
2644 h264_mediacodec_hwaccel_deps="mediacodec"
2645 h264_mmal_hwaccel_deps="mmal"
2646 h264_qsv_hwaccel_deps="libmfx"
2647 h264_vaapi_hwaccel_deps="vaapi"
2648 h264_vaapi_hwaccel_select="h264_decoder"
2649 h264_vda_hwaccel_deps="vda"
2650 h264_vda_hwaccel_select="h264_decoder"
2651 h264_vda_old_hwaccel_deps="vda"
2652 h264_vda_old_hwaccel_select="h264_decoder"
2653 h264_vdpau_hwaccel_deps="vdpau"
2654 h264_vdpau_hwaccel_select="h264_decoder"
2655 h264_videotoolbox_hwaccel_deps="videotoolbox"
2656 h264_videotoolbox_hwaccel_select="h264_decoder"
2657 hevc_cuvid_hwaccel_deps="cuda cuvid"
2658 hevc_cuvid_hwaccel_select="hevc_cuvid_decoder"
2659 hevc_d3d11va_hwaccel_deps="d3d11va DXVA_PicParams_HEVC"
2660 hevc_d3d11va_hwaccel_select="hevc_decoder"
2661 hevc_mediacodec_hwaccel_deps="mediacodec"
2662 hevc_d3d11va2_hwaccel_deps="d3d11va DXVA_PicParams_HEVC"
2663 hevc_d3d11va2_hwaccel_select="hevc_decoder"
2664 hevc_dxva2_hwaccel_deps="dxva2 DXVA_PicParams_HEVC"
2665 hevc_dxva2_hwaccel_select="hevc_decoder"
2666 hevc_qsv_hwaccel_deps="libmfx"
2667 hevc_vaapi_hwaccel_deps="vaapi VAPictureParameterBufferHEVC"
2668 hevc_vaapi_hwaccel_select="hevc_decoder"
2669 hevc_vdpau_hwaccel_deps="vdpau VdpPictureInfoHEVC"
2670 hevc_vdpau_hwaccel_select="hevc_decoder"
2671 mjpeg_cuvid_hwaccel_deps="cuda cuvid"
2672 mjpeg_cuvid_hwaccel_select="mjpeg_cuvid_decoder"
2673 mpeg_xvmc_hwaccel_deps="xvmc"
2674 mpeg_xvmc_hwaccel_select="mpeg2video_decoder"
2675 mpeg1_cuvid_hwaccel_deps="cuda cuvid"
2676 mpeg1_cuvid_hwaccel_select="mpeg1_cuvid_decoder"
2677 mpeg1_vdpau_hwaccel_deps="vdpau"
2678 mpeg1_vdpau_hwaccel_select="mpeg1video_decoder"
2679 mpeg1_videotoolbox_hwaccel_deps="videotoolbox"
2680 mpeg1_videotoolbox_hwaccel_select="mpeg1video_decoder"
2681 mpeg1_xvmc_hwaccel_deps="xvmc"
2682 mpeg1_xvmc_hwaccel_select="mpeg1video_decoder"
2683 mpeg2_cuvid_hwaccel_deps="cuda cuvid"
2684 mpeg2_cuvid_hwaccel_select="mpeg2_cuvid_decoder"
2685 mpeg2_d3d11va_hwaccel_deps="d3d11va"
2686 mpeg2_d3d11va_hwaccel_select="mpeg2video_decoder"
2687 mpeg2_d3d11va2_hwaccel_deps="d3d11va"
2688 mpeg2_d3d11va2_hwaccel_select="mpeg2video_decoder"
2689 mpeg2_dxva2_hwaccel_deps="dxva2"
2690 mpeg2_dxva2_hwaccel_select="mpeg2video_decoder"
2691 mpeg2_mediacodec_hwaccel_deps="mediacodec"
2692 mpeg2_mmal_hwaccel_deps="mmal"
2693 mpeg2_qsv_hwaccel_deps="libmfx"
2694 mpeg2_qsv_hwaccel_select="qsvdec_mpeg2"
2695 mpeg2_vaapi_hwaccel_deps="vaapi"
2696 mpeg2_vaapi_hwaccel_select="mpeg2video_decoder"
2697 mpeg2_vdpau_hwaccel_deps="vdpau"
2698 mpeg2_vdpau_hwaccel_select="mpeg2video_decoder"
2699 mpeg2_videotoolbox_hwaccel_deps="videotoolbox"
2700 mpeg2_videotoolbox_hwaccel_select="mpeg2video_decoder"
2701 mpeg2_xvmc_hwaccel_deps="xvmc"
2702 mpeg2_xvmc_hwaccel_select="mpeg2video_decoder"
2703 mpeg4_cuvid_hwaccel_deps="cuda cuvid"
2704 mpeg4_cuvid_hwaccel_select="mpeg4_cuvid_decoder"
2705 mpeg4_mediacodec_hwaccel_deps="mediacodec"
2706 mpeg4_mmal_hwaccel_deps="mmal"
2707 mpeg4_vaapi_hwaccel_deps="vaapi"
2708 mpeg4_vaapi_hwaccel_select="mpeg4_decoder"
2709 mpeg4_vdpau_hwaccel_deps="vdpau"
2710 mpeg4_vdpau_hwaccel_select="mpeg4_decoder"
2711 mpeg4_videotoolbox_hwaccel_deps="videotoolbox"
2712 mpeg4_videotoolbox_hwaccel_select="mpeg4_decoder"
2713 vc1_cuvid_hwaccel_deps="cuda cuvid"
2714 vc1_cuvid_hwaccel_select="vc1_cuvid_decoder"
2715 vc1_d3d11va_hwaccel_deps="d3d11va"
2716 vc1_d3d11va_hwaccel_select="vc1_decoder"
2717 vc1_d3d11va2_hwaccel_deps="d3d11va"
2718 vc1_d3d11va2_hwaccel_select="vc1_decoder"
2719 vc1_dxva2_hwaccel_deps="dxva2"
2720 vc1_dxva2_hwaccel_select="vc1_decoder"
2721 vc1_mmal_hwaccel_deps="mmal"
2722 vc1_qsv_hwaccel_deps="libmfx"
2723 vc1_qsv_hwaccel_select="qsvdec_vc1"
2724 vc1_vaapi_hwaccel_deps="vaapi"
2725 vc1_vaapi_hwaccel_select="vc1_decoder"
2726 vc1_vdpau_hwaccel_deps="vdpau"
2727 vc1_vdpau_hwaccel_select="vc1_decoder"
2728 vp8_cuvid_hwaccel_deps="cuda cuvid"
2729 vp8_cuvid_hwaccel_select="vp8_cuvid_decoder"
2730 vp9_cuvid_hwaccel_deps="cuda cuvid"
2731 vp9_cuvid_hwaccel_select="vp9_cuvid_decoder"
2732 vp8_mediacodec_hwaccel_deps="mediacodec"
2733 vp8_qsv_hwaccel_deps="libmfx"
2734 vp9_d3d11va_hwaccel_deps="d3d11va DXVA_PicParams_VP9"
2735 vp9_d3d11va_hwaccel_select="vp9_decoder"
2736 vp9_d3d11va2_hwaccel_deps="d3d11va DXVA_PicParams_VP9"
2737 vp9_d3d11va2_hwaccel_select="vp9_decoder"
2738 vp9_dxva2_hwaccel_deps="dxva2 DXVA_PicParams_VP9"
2739 vp9_dxva2_hwaccel_select="vp9_decoder"
2740 vp9_mediacodec_hwaccel_deps="mediacodec"
2741 vp9_vaapi_hwaccel_deps="vaapi VADecPictureParameterBufferVP9_bit_depth"
2742 vp9_vaapi_hwaccel_select="vp9_decoder"
2743 wmv3_d3d11va_hwaccel_select="vc1_d3d11va_hwaccel"
2744 wmv3_d3d11va2_hwaccel_select="vc1_d3d11va2_hwaccel"
2745 wmv3_dxva2_hwaccel_select="vc1_dxva2_hwaccel"
2746 wmv3_vaapi_hwaccel_select="vc1_vaapi_hwaccel"
2747 wmv3_vdpau_hwaccel_select="vc1_vdpau_hwaccel"
2748
2749 # hardware-accelerated codecs
2750 omx_deps="dlopen pthreads"
2751 omx_extralibs='$ldl'
2752 omx_rpi_select="omx"
2753 qsvdec_select="qsv"
2754 qsvenc_select="qsv"
2755 vaapi_encode_deps="vaapi"
2756
2757 hwupload_cuda_filter_deps="cuda"
2758 scale_npp_filter_deps="cuda libnpp"
2759 scale_cuda_filter_deps="cuda_sdk"
2760
2761 nvenc_deps="cuda"
2762 nvenc_deps_any="dlopen LoadLibrary"
2763 nvenc_encoder_deps="nvenc"
2764
2765 h264_crystalhd_decoder_select="crystalhd h264_mp4toannexb_bsf h264_parser"
2766 h264_cuvid_decoder_deps="cuda cuvid"
2767 h264_cuvid_decoder_select="h264_mp4toannexb_bsf"
2768 h264_mediacodec_decoder_deps="mediacodec"
2769 h264_mediacodec_decoder_select="h264_mp4toannexb_bsf h264_parser"
2770 h264_mmal_decoder_deps="mmal"
2771 h264_nvenc_encoder_deps="nvenc"
2772 h264_omx_encoder_deps="omx"
2773 h264_qsv_decoder_deps="libmfx"
2774 h264_qsv_decoder_select="h264_mp4toannexb_bsf h264_parser qsvdec h264_qsv_hwaccel"
2775 h264_qsv_encoder_deps="libmfx"
2776 h264_qsv_encoder_select="qsvenc"
2777 h264_vaapi_encoder_deps="VAEncPictureParameterBufferH264"
2778 h264_vaapi_encoder_select="vaapi_encode golomb"
2779 h264_vda_decoder_deps="vda"
2780 h264_vda_decoder_select="h264_decoder"
2781 h264_vdpau_decoder_deps="vdpau"
2782 h264_vdpau_decoder_select="h264_decoder"
2783 hevc_cuvid_decoder_deps="cuda cuvid"
2784 hevc_cuvid_decoder_select="hevc_mp4toannexb_bsf"
2785 hevc_mediacodec_decoder_deps="mediacodec"
2786 hevc_mediacodec_decoder_select="hevc_mp4toannexb_bsf hevc_parser"
2787 hevc_nvenc_encoder_deps="nvenc"
2788 hevc_qsv_decoder_deps="libmfx"
2789 hevc_qsv_decoder_select="hevc_mp4toannexb_bsf hevc_parser qsvdec hevc_qsv_hwaccel"
2790 hevc_qsv_encoder_deps="libmfx"
2791 hevc_qsv_encoder_select="hevcparse qsvenc"
2792 hevc_vaapi_encoder_deps="VAEncPictureParameterBufferHEVC"
2793 hevc_vaapi_encoder_select="vaapi_encode golomb"
2794 mjpeg_cuvid_decoder_deps="cuda cuvid"
2795 mjpeg_vaapi_encoder_deps="VAEncPictureParameterBufferJPEG"
2796 mjpeg_vaapi_encoder_select="vaapi_encode jpegtables"
2797 mpeg1_cuvid_decoder_deps="cuda cuvid"
2798 mpeg1_vdpau_decoder_deps="vdpau"
2799 mpeg1_vdpau_decoder_select="mpeg1video_decoder"
2800 mpeg2_crystalhd_decoder_select="crystalhd"
2801 mpeg2_cuvid_decoder_deps="cuda cuvid"
2802 mpeg2_mmal_decoder_deps="mmal"
2803 mpeg2_mediacodec_decoder_deps="mediacodec"
2804 mpeg2_qsv_decoder_deps="libmfx"
2805 mpeg2_qsv_decoder_select="qsvdec mpeg2_qsv_hwaccel"
2806 mpeg2_qsv_encoder_deps="libmfx"
2807 mpeg2_qsv_encoder_select="qsvenc"
2808 mpeg2_vaapi_encoder_deps="VAEncPictureParameterBufferMPEG2"
2809 mpeg2_vaapi_encoder_select="vaapi_encode"
2810 mpeg4_crystalhd_decoder_select="crystalhd"
2811 mpeg4_cuvid_decoder_deps="cuda cuvid"
2812 mpeg4_mediacodec_decoder_deps="mediacodec"
2813 mpeg4_mmal_decoder_deps="mmal"
2814 mpeg4_omx_encoder_deps="omx"
2815 mpeg4_vdpau_decoder_deps="vdpau"
2816 mpeg4_vdpau_decoder_select="mpeg4_decoder"
2817 mpeg_vdpau_decoder_deps="vdpau"
2818 mpeg_vdpau_decoder_select="mpeg2video_decoder"
2819 msmpeg4_crystalhd_decoder_select="crystalhd"
2820 nvenc_h264_encoder_select="h264_nvenc_encoder"
2821 nvenc_hevc_encoder_select="hevc_nvenc_encoder"
2822 vc1_crystalhd_decoder_select="crystalhd"
2823 vc1_cuvid_decoder_deps="cuda cuvid"
2824 vc1_mmal_decoder_deps="mmal"
2825 vc1_vdpau_decoder_deps="vdpau"
2826 vc1_vdpau_decoder_select="vc1_decoder"
2827 vp8_cuvid_decoder_deps="cuda cuvid"
2828 vp8_mediacodec_decoder_deps="mediacodec"
2829 vp8_qsv_decoder_deps="libmfx"
2830 vp8_qsv_decoder_select="qsvdec vp8_qsv_hwaccel vp8_parser"
2831 vp8_vaapi_encoder_deps="VAEncPictureParameterBufferVP8"
2832 vp8_vaapi_encoder_select="vaapi_encode"
2833 vp9_cuvid_decoder_deps="cuda cuvid"
2834 vp9_mediacodec_decoder_deps="mediacodec"
2835 vp9_vaapi_encoder_deps="VAEncPictureParameterBufferVP9"
2836 vp9_vaapi_encoder_select="vaapi_encode"
2837 wmv3_crystalhd_decoder_select="crystalhd"
2838 wmv3_vdpau_decoder_select="vc1_vdpau_decoder"
2839
2840 # parsers
2841 h264_parser_select="golomb h264dsp h264parse"
2842 hevc_parser_select="hevcparse"
2843 mpegaudio_parser_select="mpegaudioheader"
2844 mpegvideo_parser_select="mpegvideo"
2845 mpeg4video_parser_select="h263dsp mpegvideo qpeldsp"
2846 vc1_parser_select="vc1dsp"
2847
2848 # bitstream_filters
2849 mjpeg2jpeg_bsf_select="jpegtables"
2850
2851 # external libraries
2852 aac_at_decoder_deps="audiotoolbox"
2853 ac3_at_decoder_deps="audiotoolbox"
2854 ac3_at_decoder_select="ac3_parser"
2855 adpcm_ima_qt_at_decoder_deps="audiotoolbox"
2856 alac_at_decoder_deps="audiotoolbox"
2857 amr_nb_at_decoder_deps="audiotoolbox"
2858 avisynth_deps_any="dlopen LoadLibrary"
2859 avisynth_demuxer_deps="avisynth"
2860 avisynth_demuxer_select="riffdec"
2861 eac3_at_decoder_deps="audiotoolbox"
2862 eac3_at_decoder_select="ac3_parser"
2863 gsm_ms_at_decoder_deps="audiotoolbox"
2864 ilbc_at_decoder_deps="audiotoolbox"
2865 mp1_at_decoder_deps="audiotoolbox"
2866 mp2_at_decoder_deps="audiotoolbox"
2867 mp3_at_decoder_deps="audiotoolbox"
2868 mp1_at_decoder_select="mpegaudioheader"
2869 mp2_at_decoder_select="mpegaudioheader"
2870 mp3_at_decoder_select="mpegaudioheader"
2871 pcm_alaw_at_decoder_deps="audiotoolbox"
2872 pcm_mulaw_at_decoder_deps="audiotoolbox"
2873 qdmc_at_decoder_deps="audiotoolbox"
2874 qdm2_at_decoder_deps="audiotoolbox"
2875 aac_at_encoder_deps="audiotoolbox"
2876 aac_at_encoder_select="audio_frame_queue"
2877 alac_at_encoder_deps="audiotoolbox"
2878 alac_at_encoder_select="audio_frame_queue"
2879 ilbc_at_encoder_deps="audiotoolbox"
2880 ilbc_at_encoder_select="audio_frame_queue"
2881 pcm_alaw_at_encoder_deps="audiotoolbox"
2882 pcm_alaw_at_encoder_select="audio_frame_queue"
2883 pcm_mulaw_at_encoder_deps="audiotoolbox"
2884 pcm_mulaw_at_encoder_select="audio_frame_queue"
2885 chromaprint_muxer_deps="chromaprint"
2886 h264_videotoolbox_encoder_deps="videotoolbox_encoder pthreads"
2887 libcelt_decoder_deps="libcelt"
2888 libfdk_aac_decoder_deps="libfdk_aac"
2889 libfdk_aac_encoder_deps="libfdk_aac"
2890 libfdk_aac_encoder_select="audio_frame_queue"
2891 libgme_demuxer_deps="libgme"
2892 libgsm_decoder_deps="libgsm"
2893 libgsm_encoder_deps="libgsm"
2894 libgsm_ms_decoder_deps="libgsm"
2895 libgsm_ms_encoder_deps="libgsm"
2896 libilbc_decoder_deps="libilbc"
2897 libilbc_encoder_deps="libilbc"
2898 libkvazaar_encoder_deps="libkvazaar"
2899 libmodplug_demuxer_deps="libmodplug"
2900 libmp3lame_encoder_deps="libmp3lame"
2901 libmp3lame_encoder_select="audio_frame_queue mpegaudioheader"
2902 libopencore_amrnb_decoder_deps="libopencore_amrnb"
2903 libopencore_amrnb_encoder_deps="libopencore_amrnb"
2904 libopencore_amrnb_encoder_select="audio_frame_queue"
2905 libopencore_amrwb_decoder_deps="libopencore_amrwb"
2906 libopenh264_decoder_deps="libopenh264"
2907 libopenh264_decoder_select="h264_mp4toannexb_bsf"
2908 libopenh264_encoder_deps="libopenh264"
2909 libopenjpeg_decoder_deps="libopenjpeg"
2910 libopenjpeg_encoder_deps="libopenjpeg"
2911 libopenmpt_demuxer_deps="libopenmpt"
2912 libopus_decoder_deps="libopus"
2913 libopus_encoder_deps="libopus"
2914 libopus_encoder_select="audio_frame_queue"
2915 librsvg_decoder_deps="librsvg"
2916 libshine_encoder_deps="libshine"
2917 libshine_encoder_select="audio_frame_queue"
2918 libspeex_decoder_deps="libspeex"
2919 libspeex_encoder_deps="libspeex"
2920 libspeex_encoder_select="audio_frame_queue"
2921 libtheora_encoder_deps="libtheora"
2922 libtwolame_encoder_deps="libtwolame"
2923 libvo_amrwbenc_encoder_deps="libvo_amrwbenc"
2924 libvorbis_decoder_deps="libvorbis"
2925 libvorbis_encoder_deps="libvorbis"
2926 libvorbis_encoder_select="audio_frame_queue"
2927 libvpx_vp8_decoder_deps="libvpx"
2928 libvpx_vp8_encoder_deps="libvpx"
2929 libvpx_vp9_decoder_deps="libvpx"
2930 libvpx_vp9_encoder_deps="libvpx"
2931 libwavpack_encoder_deps="libwavpack"
2932 libwavpack_encoder_select="audio_frame_queue"
2933 libwebp_encoder_deps="libwebp"
2934 libwebp_anim_encoder_deps="libwebp"
2935 libx262_encoder_deps="libx262"
2936 libx264_encoder_deps="libx264"
2937 libx264rgb_encoder_deps="libx264 x264_csp_bgr"
2938 libx264rgb_encoder_select="libx264_encoder"
2939 libx265_encoder_deps="libx265"
2940 libxavs_encoder_deps="libxavs"
2941 libxvid_encoder_deps="libxvid"
2942 libzvbi_teletext_decoder_deps="libzvbi"
2943 videotoolbox_extralibs="-framework CoreFoundation -framework VideoToolbox -framework CoreMedia -framework CoreVideo"
2944 videotoolbox_encoder_deps="videotoolbox VTCompressionSessionPrepareToEncodeFrames"
2945 videotoolbox_encoder_suggest="vda_framework"
2946
2947 # demuxers / muxers
2948 ac3_demuxer_select="ac3_parser"
2949 aiff_muxer_select="iso_media"
2950 asf_demuxer_select="riffdec"
2951 asf_o_demuxer_select="riffdec"
2952 asf_muxer_select="riffenc"
2953 asf_stream_muxer_select="asf_muxer"
2954 avi_demuxer_select="iso_media riffdec exif"
2955 avi_muxer_select="riffenc"
2956 caf_demuxer_select="iso_media riffdec"
2957 caf_muxer_select="iso_media"
2958 dash_muxer_select="mp4_muxer"
2959 dash_demuxer_deps="libxml2"
2960 dirac_demuxer_select="dirac_parser"
2961 dts_demuxer_select="dca_parser"
2962 dtshd_demuxer_select="dca_parser"
2963 dv_demuxer_select="dvprofile"
2964 dv_muxer_select="dvprofile"
2965 dxa_demuxer_select="riffdec"
2966 eac3_demuxer_select="ac3_parser"
2967 f4v_muxer_select="mov_muxer"
2968 fifo_muxer_deps="threads"
2969 flac_demuxer_select="flac_parser"
2970 hds_muxer_select="flv_muxer"
2971 hls_muxer_select="mpegts_muxer"
2972 image2_alias_pix_demuxer_select="image2_demuxer"
2973 image2_brender_pix_demuxer_select="image2_demuxer"
2974 ipod_muxer_select="mov_muxer"
2975 ismv_muxer_select="mov_muxer"
2976 matroska_audio_muxer_select="matroska_muxer"
2977 matroska_demuxer_select="iso_media riffdec"
2978 matroska_demuxer_suggest="bzlib lzo zlib"
2979 matroska_muxer_select="iso_media riffenc"
2980 mmf_muxer_select="riffenc"
2981 mov_demuxer_select="iso_media riffdec"
2982 mov_demuxer_suggest="zlib"
2983 mov_muxer_select="iso_media riffenc rtpenc_chain"
2984 mp3_demuxer_select="mpegaudio_parser"
2985 mp3_muxer_select="mpegaudioheader"
2986 mp4_muxer_select="mov_muxer"
2987 mpegts_demuxer_select="iso_media"
2988 mpegts_muxer_select="adts_muxer latm_muxer"
2989 mpegtsraw_demuxer_select="mpegts_demuxer"
2990 mxf_d10_muxer_select="mxf_muxer"
2991 mxf_opatom_muxer_select="mxf_muxer"
2992 nut_muxer_select="riffenc"
2993 nuv_demuxer_select="riffdec"
2994 oga_muxer_select="ogg_muxer"
2995 ogg_demuxer_select="dirac_parse"
2996 ogv_muxer_select="ogg_muxer"
2997 opus_muxer_select="ogg_muxer"
2998 psp_muxer_select="mov_muxer"
2999 rtp_demuxer_select="sdp_demuxer"
3000 rtp_muxer_select="golomb"
3001 rtpdec_select="asf_demuxer jpegtables mov_demuxer mpegts_demuxer rm_demuxer rtp_protocol srtp"
3002 rtsp_demuxer_select="http_protocol rtpdec"
3003 rtsp_muxer_select="rtp_muxer http_protocol rtp_protocol rtpenc_chain"
3004 sap_demuxer_select="sdp_demuxer"
3005 sap_muxer_select="rtp_muxer rtp_protocol rtpenc_chain"
3006 sdp_demuxer_select="rtpdec"
3007 smoothstreaming_muxer_select="ismv_muxer"
3008 spdif_muxer_select="aac_parser"
3009 spx_muxer_select="ogg_muxer"
3010 swf_demuxer_suggest="zlib"
3011 tak_demuxer_select="tak_parser"
3012 tg2_muxer_select="mov_muxer"
3013 tgp_muxer_select="mov_muxer"
3014 vobsub_demuxer_select="mpegps_demuxer"
3015 w64_demuxer_select="wav_demuxer"
3016 w64_muxer_select="wav_muxer"
3017 wav_demuxer_select="riffdec"
3018 wav_muxer_select="riffenc"
3019 webm_muxer_select="iso_media riffenc"
3020 webm_dash_manifest_demuxer_select="matroska_demuxer"
3021 wtv_demuxer_select="mpegts_demuxer riffdec"
3022 wtv_muxer_select="mpegts_muxer riffenc"
3023 xmv_demuxer_select="riffdec"
3024 xwma_demuxer_select="riffdec"
3025
3026 # indevs / outdevs
3027 alsa_indev_deps="alsa"
3028 alsa_outdev_deps="alsa"
3029 avfoundation_indev_deps="avfoundation pthreads"
3030 avfoundation_indev_extralibs="-framework Foundation -framework CoreVideo -framework CoreMedia"
3031 bktr_indev_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
3032 caca_outdev_deps="libcaca"
3033 decklink_indev_deps="decklink threads"
3034 decklink_indev_extralibs="-lstdc++"
3035 decklink_outdev_deps="decklink threads"
3036 decklink_outdev_extralibs="-lstdc++"
3037 libndi_newtek_indev_deps="libndi_newtek"
3038 libndi_newtek_indev_extralibs="-lndi"
3039 libndi_newtek_outdev_deps="libndi_newtek"
3040 libndi_newtek_outdev_extralibs="-lndi"
3041 dshow_indev_deps="IBaseFilter"
3042 dshow_indev_extralibs="-lpsapi -lole32 -lstrmiids -luuid -loleaut32 -lshlwapi"
3043 dv1394_indev_deps="dv1394"
3044 dv1394_indev_select="dv_demuxer"
3045 fbdev_indev_deps="linux_fb_h"
3046 fbdev_outdev_deps="linux_fb_h"
3047 gdigrab_indev_deps="CreateDIBSection"
3048 gdigrab_indev_extralibs="-lgdi32"
3049 gdigrab_indev_select="bmp_decoder"
3050 iec61883_indev_deps="libiec61883"
3051 jack_indev_deps="jack"
3052 jack_indev_deps_any="sem_timedwait dispatch_dispatch_h"
3053 kmsgrab_indev_deps="libdrm"
3054 lavfi_indev_deps="avfilter"
3055 libcdio_indev_deps="libcdio"
3056 libdc1394_indev_deps="libdc1394"
3057 libv4l2_indev_deps="libv4l2"
3058 openal_indev_deps="openal"
3059 opengl_outdev_deps="opengl"
3060 oss_indev_deps_any="soundcard_h sys_soundcard_h"
3061 oss_outdev_deps_any="soundcard_h sys_soundcard_h"
3062 pulse_indev_deps="libpulse"
3063 pulse_outdev_deps="libpulse"
3064 sdl2_outdev_deps="sdl2"
3065 sndio_indev_deps="sndio"
3066 sndio_outdev_deps="sndio"
3067 v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h"
3068 v4l2_outdev_deps_any="linux_videodev2_h sys_videoio_h"
3069 vfwcap_indev_deps="vfw32 vfwcap_defines"
3070 xcbgrab_indev_deps="libxcb"
3071 xv_outdev_deps="X11_extensions_Xvlib_h XvGetPortAttribute"
3072 xv_outdev_extralibs="-lXv -lX11 -lXext"
3073
3074 # protocols
3075 async_protocol_deps="threads"
3076 bluray_protocol_deps="libbluray"
3077 ffrtmpcrypt_protocol_deps="!librtmp_protocol"
3078 ffrtmpcrypt_protocol_deps_any="gcrypt gmp openssl"
3079 ffrtmpcrypt_protocol_select="tcp_protocol"
3080 ffrtmphttp_protocol_deps="!librtmp_protocol"
3081 ffrtmphttp_protocol_select="http_protocol"
3082 ftp_protocol_select="tcp_protocol"
3083 gopher_protocol_select="network"
3084 http_protocol_select="tcp_protocol"
3085 httpproxy_protocol_select="tcp_protocol"
3086 https_protocol_select="tls_protocol"
3087 icecast_protocol_select="http_protocol"
3088 librtmp_protocol_deps="librtmp"
3089 librtmpe_protocol_deps="librtmp"
3090 librtmps_protocol_deps="librtmp"
3091 librtmpt_protocol_deps="librtmp"
3092 librtmpte_protocol_deps="librtmp"
3093 libsmbclient_protocol_deps="libsmbclient gplv3"
3094 libssh_protocol_deps="libssh"
3095 mmsh_protocol_select="http_protocol"
3096 mmst_protocol_select="network"
3097 rtmp_protocol_deps="!librtmp_protocol"
3098 rtmp_protocol_select="tcp_protocol"
3099 rtmpe_protocol_select="ffrtmpcrypt_protocol"
3100 rtmps_protocol_deps="!librtmp_protocol"
3101 rtmps_protocol_select="tls_protocol"
3102 rtmpt_protocol_select="ffrtmphttp_protocol"
3103 rtmpte_protocol_select="ffrtmpcrypt_protocol ffrtmphttp_protocol"
3104 rtmpts_protocol_select="ffrtmphttp_protocol https_protocol"
3105 rtp_protocol_select="udp_protocol"
3106 sctp_protocol_deps="struct_sctp_event_subscribe struct_msghdr_msg_flags"
3107 sctp_protocol_select="network"
3108 srtp_protocol_select="rtp_protocol srtp"
3109 tcp_protocol_select="network"
3110 tls_gnutls_protocol_deps="gnutls !tls_schannel_protocol !tls_securetransport_protocol"
3111 tls_gnutls_protocol_select="tcp_protocol"
3112 tls_openssl_protocol_deps="openssl !tls_schannel_protocol !tls_securetransport_protocol !tls_gnutls_protocol"
3113 tls_openssl_protocol_select="tcp_protocol"
3114 tls_schannel_protocol_deps="schannel"
3115 tls_schannel_protocol_select="tcp_protocol"
3116 tls_securetransport_protocol_deps="securetransport"
3117 tls_securetransport_protocol_select="tcp_protocol"
3118 tls_protocol_deps_any="tls_schannel_protocol tls_securetransport_protocol tls_gnutls_protocol tls_openssl_protocol"
3119 udp_protocol_select="network"
3120 udplite_protocol_select="network"
3121 unix_protocol_deps="sys_un_h"
3122 unix_protocol_select="network"
3123
3124 # filters
3125 afftfilt_filter_deps="avcodec"
3126 afftfilt_filter_select="fft"
3127 afir_filter_deps="avcodec"
3128 afir_filter_select="fft"
3129 amovie_filter_deps="avcodec avformat"
3130 aresample_filter_deps="swresample"
3131 ass_filter_deps="libass"
3132 atempo_filter_deps="avcodec"
3133 atempo_filter_select="rdft"
3134 azmq_filter_deps="libzmq"
3135 blackframe_filter_deps="gpl"
3136 boxblur_filter_deps="gpl"
3137 bs2b_filter_deps="libbs2b"
3138 colormatrix_filter_deps="gpl"
3139 coreimage_filter_deps="coreimage"
3140 coreimage_filter_extralibs="-framework OpenGL -framework AppKit"
3141 coreimagesrc_filter_deps="coreimage"
3142 coreimagesrc_filter_extralibs="-framework OpenGL -framework AppKit"
3143 cover_rect_filter_deps="avcodec avformat gpl"
3144 cropdetect_filter_deps="gpl"
3145 deinterlace_qsv_filter_deps="libmfx"
3146 deinterlace_vaapi_filter_deps="vaapi"
3147 delogo_filter_deps="gpl"
3148 deshake_filter_select="pixelutils"
3149 drawtext_filter_deps="libfreetype"
3150 elbg_filter_deps="avcodec"
3151 eq_filter_deps="gpl"
3152 fftfilt_filter_deps="avcodec"
3153 fftfilt_filter_select="rdft"
3154 find_rect_filter_deps="avcodec avformat gpl"
3155 firequalizer_filter_deps="avcodec"
3156 firequalizer_filter_select="rdft"
3157 flite_filter_deps="libflite"
3158 framerate_filter_select="pixelutils"
3159 frei0r_filter_deps="frei0r dlopen"
3160 frei0r_src_filter_deps="frei0r dlopen"
3161 fspp_filter_deps="gpl"
3162 geq_filter_deps="gpl"
3163 histeq_filter_deps="gpl"
3164 hqdn3d_filter_deps="gpl"
3165 interlace_filter_deps="gpl"
3166 kerndeint_filter_deps="gpl"
3167 ladspa_filter_deps="ladspa dlopen"
3168 mcdeint_filter_deps="avcodec gpl"
3169 movie_filter_deps="avcodec avformat"
3170 mpdecimate_filter_deps="gpl"
3171 mpdecimate_filter_select="pixelutils"
3172 mptestsrc_filter_deps="gpl"
3173 negate_filter_deps="lut_filter"
3174 nnedi_filter_deps="gpl"
3175 ocr_filter_deps="libtesseract"
3176 ocv_filter_deps="libopencv"
3177 owdenoise_filter_deps="gpl"
3178 pan_filter_deps="swresample"
3179 perspective_filter_deps="gpl"
3180 phase_filter_deps="gpl"
3181 pp7_filter_deps="gpl"
3182 pp_filter_deps="gpl postproc"
3183 pullup_filter_deps="gpl"
3184 removelogo_filter_deps="avcodec avformat swscale"
3185 repeatfields_filter_deps="gpl"
3186 resample_filter_deps="avresample"
3187 rubberband_filter_deps="librubberband"
3188 sab_filter_deps="gpl swscale"
3189 scale2ref_filter_deps="swscale"
3190 scale_filter_deps="swscale"
3191 scale_qsv_filter_deps="libmfx"
3192 select_filter_select="pixelutils"
3193 showcqt_filter_deps="avcodec avformat swscale"
3194 showcqt_filter_select="fft"
3195 showfreqs_filter_deps="avcodec"
3196 showfreqs_filter_select="fft"
3197 showspectrum_filter_deps="avcodec"
3198 showspectrum_filter_select="fft"
3199 showspectrumpic_filter_deps="avcodec"
3200 showspectrumpic_filter_select="fft"
3201 signature_filter_deps="gpl avcodec avformat"
3202 smartblur_filter_deps="gpl swscale"
3203 sofalizer_filter_deps="libmysofa avcodec"
3204 sofalizer_filter_select="fft"
3205 spectrumsynth_filter_deps="avcodec"
3206 spectrumsynth_filter_select="fft"
3207 spp_filter_deps="gpl avcodec"
3208 spp_filter_select="fft idctdsp fdctdsp me_cmp pixblockdsp"
3209 stereo3d_filter_deps="gpl"
3210 subtitles_filter_deps="avformat avcodec libass"
3211 super2xsai_filter_deps="gpl"
3212 pixfmts_super2xsai_test_deps="super2xsai_filter"
3213 tinterlace_filter_deps="gpl"
3214 tinterlace_merge_test_deps="tinterlace_filter"
3215 tinterlace_pad_test_deps="tinterlace_filter"
3216 tonemap_filter_deps="const_nan"
3217 uspp_filter_deps="gpl avcodec"
3218 vaguedenoiser_filter_deps="gpl"
3219 vidstabdetect_filter_deps="libvidstab"
3220 vidstabtransform_filter_deps="libvidstab"
3221 libvmaf_filter_deps="libvmaf"
3222 zmq_filter_deps="libzmq"
3223 zoompan_filter_deps="swscale"
3224 zscale_filter_deps="libzimg const_nan"
3225 scale_vaapi_filter_deps="vaapi VAProcPipelineParameterBuffer"
3226
3227 # examples
3228 avio_dir_cmd_deps="avformat avutil"
3229 avio_reading_deps="avformat avcodec avutil"
3230 decode_audio_example_deps="avcodec avutil"
3231 decode_video_example_deps="avcodec avutil"
3232 demuxing_decoding_example_deps="avcodec avformat avutil"
3233 encode_audio_example_deps="avcodec avutil"
3234 encode_video_example_deps="avcodec avutil"
3235 extract_mvs_example_deps="avcodec avformat avutil"
3236 filter_audio_example_deps="avfilter avutil"
3237 filtering_audio_example_deps="avfilter avcodec avformat avutil"
3238 filtering_video_example_deps="avfilter avcodec avformat avutil"
3239 http_multiclient_example_deps="avformat avutil fork"
3240 hw_decode_example_deps="avcodec avformat avutil"
3241 metadata_example_deps="avformat avutil"
3242 muxing_example_deps="avcodec avformat avutil swscale"
3243 qsvdec_example_deps="avcodec avutil libmfx h264_qsv_decoder"
3244 remuxing_example_deps="avcodec avformat avutil"
3245 resampling_audio_example_deps="avutil swresample"
3246 scaling_video_example_deps="avutil swscale"
3247 transcode_aac_example_deps="avcodec avformat swresample"
3248 transcoding_example_deps="avfilter avcodec avformat avutil"
3249
3250 # libraries, in linking order
3251 avcodec_deps="avutil"
3252 avcodec_select="null_bsf"
3253 avdevice_deps="avformat avcodec avutil"
3254 avfilter_deps="avutil"
3255 avformat_deps="avcodec avutil"
3256 avresample_deps="avutil"
3257 postproc_deps="avutil gpl"
3258 swresample_deps="avutil"
3259 swscale_deps="avutil"
3260
3261 # programs
3262 ffmpeg_deps="avcodec avfilter avformat swresample"
3263 ffmpeg_select="aformat_filter anull_filter atrim_filter format_filter
3264                null_filter
3265                trim_filter"
3266 ffplay_deps="avcodec avformat swscale swresample sdl2"
3267 ffplay_extralibs='$sdl2_extralibs'
3268 ffplay_select="rdft crop_filter transpose_filter hflip_filter vflip_filter rotate_filter"
3269 ffprobe_deps="avcodec avformat"
3270 ffserver_deps="avformat fork sarestart"
3271 ffserver_select="ffm_muxer rtp_protocol rtsp_demuxer"
3272
3273 # documentation
3274 podpages_deps="perl"
3275 manpages_deps="perl pod2man"
3276 htmlpages_deps="perl"
3277 htmlpages_deps_any="makeinfo_html texi2html"
3278 txtpages_deps="perl makeinfo"
3279 doc_deps_any="manpages htmlpages podpages txtpages"
3280
3281 # default parameters
3282
3283 logfile="ffbuild/config.log"
3284
3285 # installation paths
3286 prefix_default="/usr/local"
3287 bindir_default='${prefix}/bin'
3288 datadir_default='${prefix}/share/ffmpeg'
3289 docdir_default='${prefix}/share/doc/ffmpeg'
3290 incdir_default='${prefix}/include'
3291 libdir_default='${prefix}/lib'
3292 mandir_default='${prefix}/share/man'
3293
3294 # toolchain
3295 ar_default="ar"
3296 cc_default="gcc"
3297 cxx_default="g++"
3298 host_cc_default="gcc"
3299 doxygen_default="doxygen"
3300 install="install"
3301 ln_s_default="ln -s -f"
3302 nm_default="nm -g"
3303 pkg_config_default=pkg-config
3304 ranlib_default="ranlib"
3305 strip_default="strip"
3306 version_script='--version-script'
3307 x86asmexe_default="nasm"
3308 windres_default="windres"
3309 nvcc_default="nvcc"
3310 nvccflags_default="-gencode arch=compute_30,code=sm_30 -O2"
3311
3312 # OS
3313 target_os_default=$(tolower $(uname -s))
3314 host_os=$target_os_default
3315
3316 # machine
3317 if test "$target_os_default" = aix; then
3318     arch_default=$(uname -p)
3319     strip_default="strip -X32_64"
3320 else
3321     arch_default=$(uname -m)
3322 fi
3323 cpu="generic"
3324 intrinsics="none"
3325
3326 # configurable options
3327 enable $PROGRAM_LIST
3328 enable $DOCUMENT_LIST
3329 enable $EXAMPLE_LIST
3330 enable $(filter_out avresample $LIBRARY_LIST)
3331 enable stripping
3332
3333 enable asm
3334 enable debug
3335 enable doc
3336 enable faan faandct faanidct
3337 enable optimizations
3338 enable runtime_cpudetect
3339 enable safe_bitstream_reader
3340 enable static
3341 enable swscale_alpha
3342 enable valgrind_backtrace
3343
3344 sws_max_filter_size_default=256
3345 set_default sws_max_filter_size
3346
3347 # build settings
3348 SHFLAGS='-shared -Wl,-soname,$$(@F)'
3349 LIBPREF="lib"
3350 LIBSUF=".a"
3351 FULLNAME='$(NAME)$(BUILDSUF)'
3352 LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
3353 SLIBPREF="lib"
3354 SLIBSUF=".so"
3355 SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
3356 SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
3357 SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
3358 LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
3359 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'
3360 SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR) $(SLIBNAME)'
3361 VERSION_SCRIPT_POSTPROCESS_CMD="cat"
3362
3363 asflags_filter=echo
3364 cflags_filter=echo
3365 ldflags_filter=echo
3366
3367 AS_C='-c'
3368 AS_O='-o $@'
3369 CC_C='-c'
3370 CC_E='-E -o $@'
3371 CC_O='-o $@'
3372 CXX_C='-c'
3373 CXX_O='-o $@'
3374 OBJCC_C='-c'
3375 OBJCC_E='-E -o $@'
3376 OBJCC_O='-o $@'
3377 X86ASM_O='-o $@'
3378 LD_O='-o $@'
3379 LD_LIB='-l%'
3380 LD_PATH='-L'
3381 HOSTCC_C='-c'
3382 HOSTCC_E='-E -o $@'
3383 HOSTCC_O='-o $@'
3384 HOSTLD_O='-o $@'
3385 NVCC_C='-c'
3386 NVCC_O='-o $@'
3387
3388 host_extralibs='-lm'
3389 host_cflags_filter=echo
3390 host_ldflags_filter=echo
3391
3392 target_path='$(CURDIR)'
3393
3394 # since the object filename is not given with the -MM flag, the compiler
3395 # is only able to print the basename, and we must add the path ourselves
3396 DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< 2>/dev/null | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(@F),$(@D)/$(@F)," > $(@:.o=.d)'
3397 DEPFLAGS='-MM'
3398
3399 mkdir -p ffbuild
3400
3401 # find source path
3402 if test -f configure; then
3403     source_path=.
3404 else
3405     source_path=$(cd $(dirname "$0"); pwd)
3406     case "$source_path" in
3407         *[[:blank:]]*) die "Out of tree builds are impossible with whitespace in source path." ;;
3408     esac
3409     test -e "$source_path/config.h" &&
3410         die "Out of tree builds are impossible with config.h in source dir."
3411 fi
3412
3413 for v in "$@"; do
3414     r=${v#*=}
3415     l=${v%"$r"}
3416     r=$(sh_quote "$r")
3417     FFMPEG_CONFIGURATION="${FFMPEG_CONFIGURATION# } ${l}${r}"
3418 done
3419
3420 find_things(){
3421     thing=$1
3422     pattern=$2
3423     file=$source_path/$3
3424     sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
3425 }
3426
3427 ENCODER_LIST=$(find_things  encoder  ENC      libavcodec/allcodecs.c)
3428 DECODER_LIST=$(find_things  decoder  DEC      libavcodec/allcodecs.c)
3429 HWACCEL_LIST=$(find_things  hwaccel  HWACCEL  libavcodec/allcodecs.c)
3430 PARSER_LIST=$(find_things   parser   PARSER   libavcodec/allcodecs.c)
3431 MUXER_LIST=$(find_things    muxer    _MUX     libavformat/allformats.c)
3432 DEMUXER_LIST=$(find_things  demuxer  DEMUX    libavformat/allformats.c)
3433 OUTDEV_LIST=$(find_things   outdev   OUTDEV   libavdevice/alldevices.c)
3434 INDEV_LIST=$(find_things    indev    _IN      libavdevice/alldevices.c)
3435 FILTER_LIST=$(find_things   filter   FILTER   libavfilter/allfilters.c)
3436
3437 find_things_extern(){
3438     thing=$1
3439     pattern=$2
3440     file=$source_path/$3
3441     sed -n "s/^[^#]*extern.*$pattern *ff_\([^ ]*\)_$thing;/\1_$thing/p" "$file"
3442 }
3443
3444 BSF_LIST=$(find_things_extern bsf AVBitStreamFilter libavcodec/bitstream_filters.c)
3445 PROTOCOL_LIST=$(find_things_extern protocol URLProtocol libavformat/protocols.c)
3446
3447 ALL_COMPONENTS="
3448     $BSF_LIST
3449     $DECODER_LIST
3450     $DEMUXER_LIST
3451     $ENCODER_LIST
3452     $FILTER_LIST
3453     $HWACCEL_LIST
3454     $INDEV_LIST
3455     $MUXER_LIST
3456     $OUTDEV_LIST
3457     $PARSER_LIST
3458     $PROTOCOL_LIST
3459 "
3460
3461 for n in $COMPONENT_LIST; do
3462     v=$(toupper ${n%s})_LIST
3463     eval enable \$$v
3464     eval ${n}_if_any="\$$v"
3465 done
3466
3467 enable $ARCH_EXT_LIST
3468
3469 die_unknown(){
3470     echo "Unknown option \"$1\"."
3471     echo "See $0 --help for available options."
3472     exit 1
3473 }
3474
3475 print_in_columns() {
3476     cols=$(expr $ncols / 24)
3477     cat | tr ' ' '\n' | sort | pr -r "-$cols" -w $ncols -t
3478 }
3479
3480 show_list() {
3481     suffix=_$1
3482     shift
3483     echo $* | sed s/$suffix//g | print_in_columns
3484     exit 0
3485 }
3486
3487 rand_list(){
3488     IFS=', '
3489     set -- $*
3490     unset IFS
3491     for thing; do
3492         comp=${thing%:*}
3493         prob=${thing#$comp}
3494         prob=${prob#:}
3495         is_in ${comp} $COMPONENT_LIST && eval comp=\$$(toupper ${comp%s})_LIST
3496         echo "prob ${prob:-0.5}"
3497         printf '%s\n' $comp
3498     done
3499 }
3500
3501 do_random(){
3502     action=$1
3503     shift
3504     random_seed=$(awk "BEGIN { srand($random_seed); print srand() }")
3505     $action $(rand_list "$@" | awk "BEGIN { srand($random_seed) } \$1 == \"prob\" { prob = \$2; next } rand() < prob { print }")
3506 }
3507
3508 for opt do
3509     optval="${opt#*=}"
3510     case "$opt" in
3511         --extra-ldflags=*)
3512             add_ldflags $optval
3513         ;;
3514         --extra-ldexeflags=*)
3515             add_ldexeflags $optval
3516         ;;
3517         --extra-ldlibflags=*)
3518             add_ldlibflags $optval
3519         ;;
3520         --extra-libs=*)
3521             add_extralibs $optval
3522         ;;
3523         --disable-devices)
3524             disable $INDEV_LIST $OUTDEV_LIST
3525         ;;
3526         --enable-debug=*)
3527             debuglevel="$optval"
3528         ;;
3529         --disable-programs)
3530             disable $PROGRAM_LIST
3531         ;;
3532         --disable-everything)
3533             map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
3534         ;;
3535         --disable-all)
3536             map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
3537             disable $LIBRARY_LIST $PROGRAM_LIST doc
3538             enable avutil
3539         ;;
3540         --enable-random|--disable-random)
3541             action=${opt%%-random}
3542             do_random ${action#--} $COMPONENT_LIST
3543         ;;
3544         --enable-random=*|--disable-random=*)
3545             action=${opt%%-random=*}
3546             do_random ${action#--} $optval
3547         ;;
3548         --enable-sdl)
3549             enable sdl2
3550         ;;
3551         --enable-*=*|--disable-*=*)
3552             eval $(echo "${opt%%=*}" | sed 's/--/action=/;s/-/ thing=/')
3553             is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt"
3554             eval list=\$$(toupper $thing)_LIST
3555             name=$(echo "${optval}" | sed "s/,/_${thing}|/g")_${thing}
3556             list=$(filter "$name" $list)
3557             [ "$list" = "" ] && warn "Option $opt did not match anything"
3558             $action $list
3559         ;;
3560         --enable-yasm|--disable-yasm)
3561             warn "The ${opt} option is only provided for compatibility and will be\n"\
3562                  "removed in the future. Use --enable-x86asm / --disable-x86asm instead."
3563             test $opt = --enable-yasm && x86asm=yes || x86asm=no
3564         ;;
3565         --yasmexe=*)
3566             warn "The --yasmexe option is only provided for compatibility and will be\n"\
3567                  "removed in the future. Use --x86asmexe instead."
3568             x86asmexe="$optval"
3569         ;;
3570         --enable-?*|--disable-?*)
3571             eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
3572             if is_in $option $COMPONENT_LIST; then
3573                 test $action = disable && action=unset
3574                 eval $action \$$(toupper ${option%s})_LIST
3575             elif is_in $option $CMDLINE_SELECT; then
3576                 $action $option
3577             else
3578                 die_unknown $opt
3579             fi
3580         ;;
3581         --list-*)
3582             NAME="${opt#--list-}"
3583             is_in $NAME $COMPONENT_LIST || die_unknown $opt
3584             NAME=${NAME%s}
3585             eval show_list $NAME \$$(toupper $NAME)_LIST
3586         ;;
3587         --help|-h) show_help
3588         ;;
3589         --quiet|-q) quiet=yes
3590         ;;
3591         --fatal-warnings) enable fatal_warnings
3592         ;;
3593         --libfuzzer=*)
3594             libfuzzer_path="$optval"
3595         ;;
3596         *)
3597             optname="${opt%%=*}"
3598             optname="${optname#--}"
3599             optname=$(echo "$optname" | sed 's/-/_/g')
3600             if is_in $optname $CMDLINE_SET; then
3601                 eval $optname='$optval'
3602             elif is_in $optname $CMDLINE_APPEND; then
3603                 append $optname "$optval"
3604             else
3605                 die_unknown $opt
3606             fi
3607         ;;
3608     esac
3609 done
3610
3611 for e in $env; do
3612     eval "export $e"
3613 done
3614
3615 if disabled autodetect; then
3616
3617     # Unless iconv is explicitely disabled by the user, we still want to probe
3618     # for the iconv from the libc.
3619     disabled iconv || enable libc_iconv
3620
3621     disable_weak $EXTERNAL_AUTODETECT_LIBRARY_LIST
3622     disable_weak $HWACCEL_AUTODETECT_LIBRARY_LIST
3623 fi
3624 # Mark specifically enabled, but normally autodetected libraries as requested.
3625 for lib in $AUTODETECT_LIBS; do
3626     enabled $lib && request $lib
3627 done
3628 #TODO: switch to $AUTODETECT_LIBS when $THREADS_LIST is supported the same way
3629 enable_weak $EXTERNAL_AUTODETECT_LIBRARY_LIST
3630 enable_weak $HWACCEL_AUTODETECT_LIBRARY_LIST
3631
3632 disabled logging && logfile=/dev/null
3633
3634 die_license_disabled() {
3635     enabled $1 || { enabled $v && die "$v is $1 and --enable-$1 is not specified."; }
3636 }
3637
3638 die_license_disabled_gpl() {
3639     enabled $1 || { enabled $v && die "$v is incompatible with the gpl and --enable-$1 is not specified."; }
3640 }
3641
3642 map "die_license_disabled gpl"      $EXTERNAL_LIBRARY_GPL_LIST $EXTERNAL_LIBRARY_GPLV3_LIST
3643 map "die_license_disabled version3" $EXTERNAL_LIBRARY_VERSION3_LIST $EXTERNAL_LIBRARY_GPLV3_LIST
3644
3645 enabled gpl && map "die_license_disabled_gpl nonfree" $EXTERNAL_LIBRARY_NONFREE_LIST
3646 map "die_license_disabled nonfree" $HWACCEL_LIBRARY_NONFREE_LIST
3647
3648 enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
3649
3650 # Disable all the library-specific components if the library itself
3651 # is disabled, see AVCODEC_LIST and following _LIST variables.
3652
3653 disable_components(){
3654     disabled ${1} && disable $(
3655         eval components="\$$(toupper ${1})_COMPONENTS"
3656         map 'eval echo \${$(toupper ${v%s})_LIST}' $components
3657     )
3658 }
3659
3660 map 'disable_components $v' $LIBRARY_LIST
3661
3662 echo "# $0 $FFMPEG_CONFIGURATION" > $logfile
3663 set >> $logfile
3664
3665 test -n "$valgrind" && toolchain="valgrind-memcheck"
3666
3667 enabled ossfuzz && {
3668     add_cflags  -fsanitize=address,undefined -fsanitize-coverage=trace-pc-guard,trace-cmp -fno-omit-frame-pointer
3669     add_ldflags -fsanitize=address,undefined -fsanitize-coverage=trace-pc-guard,trace-cmp
3670 }
3671
3672 case "$toolchain" in
3673     *-asan)
3674         cc_default="${toolchain%-asan}"
3675         add_cflags  -fsanitize=address
3676         add_ldflags -fsanitize=address
3677     ;;
3678     *-msan)
3679         cc_default="${toolchain%-msan}"
3680         add_cflags  -fsanitize=memory -fsanitize-memory-track-origins
3681         add_ldflags -fsanitize=memory
3682     ;;
3683     *-tsan)
3684         cc_default="${toolchain%-tsan}"
3685         add_cflags  -fsanitize=thread -fPIE
3686         add_ldflags -fsanitize=thread -pie
3687         case "$toolchain" in
3688             gcc-tsan)
3689                 add_cflags  -fPIC
3690                 add_ldflags -fPIC
3691                 ;;
3692         esac
3693     ;;
3694     *-usan)
3695         cc_default="${toolchain%-usan}"
3696         add_cflags  -fsanitize=undefined
3697         add_ldflags -fsanitize=undefined
3698     ;;
3699     valgrind-*)
3700         target_exec_default="valgrind"
3701         case "$toolchain" in
3702             valgrind-massif)
3703                 target_exec_args="--tool=massif --alloc-fn=av_malloc --alloc-fn=av_mallocz --alloc-fn=av_calloc --alloc-fn=av_fast_padded_malloc --alloc-fn=av_fast_malloc --alloc-fn=av_realloc_f --alloc-fn=av_fast_realloc --alloc-fn=av_realloc"
3704                 ;;
3705             valgrind-memcheck)
3706                 target_exec_args="--error-exitcode=1 --malloc-fill=0x2a --track-origins=yes --leak-check=full --gen-suppressions=all --suppressions=$source_path/tests/fate-valgrind.supp"
3707                 ;;
3708         esac
3709     ;;
3710     msvc)
3711         # Check whether the current MSVC version needs the C99 converter.
3712         # From MSVC 2013 (compiler major version 18) onwards, it does actually
3713         # support enough of C99 to build ffmpeg. Default to the new
3714         # behaviour if the regexp was unable to match anything, since this
3715         # successfully parses the version number of existing supported
3716         # versions that require the converter (MSVC 2010 and 2012).
3717         cl_major_ver=$(cl 2>&1 | sed -n 's/.*Version \([[:digit:]]\{1,\}\)\..*/\1/p')
3718         if [ -z "$cl_major_ver" ] || [ $cl_major_ver -ge 18 ]; then
3719             cc_default="cl"
3720             cxx_default="cl"
3721         else
3722             cc_default="c99wrap cl"
3723             cxx_default="c99wrap cl"
3724         fi
3725         ld_default="$source_path/compat/windows/mslink"
3726         nm_default="dumpbin -symbols"
3727         ar_default="lib"
3728         case "$arch" in
3729         arm*)
3730             as_default="armasm"
3731             ;;
3732         esac
3733         target_os_default="win32"
3734         # Use a relative path for TMPDIR. This makes sure all the
3735         # ffconf temp files are written with a relative path, avoiding
3736         # issues with msys/win32 path conversion for MSVC parameters
3737         # such as -Fo<file> or -out:<file>.
3738         TMPDIR=.
3739     ;;
3740     icl)
3741         cc_default="icl"
3742         ld_default="xilink"
3743         nm_default="dumpbin -symbols"
3744         ar_default="xilib"
3745         target_os_default="win32"
3746         TMPDIR=.
3747     ;;
3748     gcov)
3749         add_cflags  -fprofile-arcs -ftest-coverage
3750         add_ldflags -fprofile-arcs -ftest-coverage
3751     ;;
3752     llvm-cov)
3753         add_cflags -fprofile-arcs -ftest-coverage
3754         add_ldflags --coverage
3755     ;;
3756     hardened)
3757         add_cppflags -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2
3758         add_cflags   -fno-strict-overflow -fstack-protector-all
3759         add_ldflags  -Wl,-z,relro -Wl,-z,now
3760         add_cflags   -fPIE
3761         add_ldexeflags -fPIE -pie
3762     ;;
3763     ?*)
3764         die "Unknown toolchain $toolchain"
3765     ;;
3766 esac
3767
3768 test -n "$cross_prefix" && enable cross_compile
3769
3770 if enabled cross_compile; then
3771     test -n "$arch" && test -n "$target_os" ||
3772         die "Must specify target arch (--arch) and OS (--target-os) when cross-compiling"
3773 fi
3774
3775 ar_default="${cross_prefix}${ar_default}"
3776 cc_default="${cross_prefix}${cc_default}"
3777 cxx_default="${cross_prefix}${cxx_default}"
3778 nm_default="${cross_prefix}${nm_default}"
3779 pkg_config_default="${cross_prefix}${pkg_config_default}"
3780 if ${cross_prefix}${ranlib_default} 2>&1 | grep -q "\-D "; then
3781     ranlib_default="${cross_prefix}${ranlib_default} -D"
3782 else
3783     ranlib_default="${cross_prefix}${ranlib_default}"
3784 fi
3785 strip_default="${cross_prefix}${strip_default}"
3786 windres_default="${cross_prefix}${windres_default}"
3787
3788 sysinclude_default="${sysroot}/usr/include"
3789
3790 set_default arch cc cxx doxygen pkg_config ranlib strip sysinclude \
3791     target_exec target_os x86asmexe nvcc
3792 enabled cross_compile || host_cc_default=$cc
3793 set_default host_cc
3794
3795 pkg_config_fail_message=""
3796 if ! $pkg_config --version >/dev/null 2>&1; then
3797     warn "$pkg_config not found, library detection may fail."
3798     pkg_config=false
3799 elif is_in -static $cc $LDFLAGS && ! is_in --static $pkg_config $pkg_config_flags; then
3800     pkg_config_fail_message="
3801 Note: When building a static binary, add --pkg-config-flags=\"--static\"."
3802 fi
3803
3804 if test $doxygen != $doxygen_default && \
3805   ! $doxygen --version >/dev/null 2>&1; then
3806     warn "Specified doxygen \"$doxygen\" not found, API documentation will fail to build."
3807 fi
3808
3809 exesuf() {
3810     case $1 in
3811         mingw32*|mingw64*|win32|win64|cygwin*|*-dos|freedos|opendos|os/2*|symbian) echo .exe ;;
3812     esac
3813 }
3814
3815 EXESUF=$(exesuf $target_os)
3816 HOSTEXESUF=$(exesuf $host_os)
3817
3818 # set temporary file name
3819 : ${TMPDIR:=$TEMPDIR}
3820 : ${TMPDIR:=$TMP}
3821 : ${TMPDIR:=/tmp}
3822
3823 if [ -n "$tempprefix" ] ; then
3824     mktemp(){
3825         tmpname="$tempprefix.${HOSTNAME}.${UID}"
3826         echo "$tmpname"
3827         mkdir "$tmpname"
3828     }
3829 elif ! check_cmd mktemp -u XXXXXX; then
3830     # simple replacement for missing mktemp
3831     # NOT SAFE FOR GENERAL USE
3832     mktemp(){
3833         tmpname="${2%%XXX*}.${HOSTNAME}.${UID}.$$"
3834         echo "$tmpname"
3835         mkdir "$tmpname"
3836     }
3837 fi
3838
3839 FFTMPDIR=$(mktemp -d "${TMPDIR}/ffconf.XXXXXXXX" 2> /dev/null) ||
3840     die "Unable to create temporary directory in $TMPDIR."
3841
3842 tmpfile(){
3843     tmp="${FFTMPDIR}/test"$2
3844     (set -C; exec > $tmp) 2> /dev/null ||
3845         die "Unable to create temporary file in $FFTMPDIR."
3846     eval $1=$tmp
3847 }
3848
3849 trap 'rm -rf -- "$FFTMPDIR"' EXIT
3850 trap 'exit 2' INT
3851
3852 tmpfile TMPASM .asm
3853 tmpfile TMPC   .c
3854 tmpfile TMPCPP .cpp
3855 tmpfile TMPE   $EXESUF
3856 tmpfile TMPH   .h
3857 tmpfile TMPM   .m
3858 tmpfile TMPO   .o
3859 tmpfile TMPS   .S
3860 tmpfile TMPSH  .sh
3861 tmpfile TMPV   .ver
3862
3863 unset -f mktemp
3864
3865 chmod +x $TMPE
3866
3867 # make sure we can execute files in $TMPDIR
3868 cat > $TMPSH 2>> $logfile <<EOF
3869 #! /bin/sh
3870 EOF
3871 chmod +x $TMPSH >> $logfile 2>&1
3872 if ! $TMPSH >> $logfile 2>&1; then
3873     cat <<EOF
3874 Unable to create and execute files in $TMPDIR.  Set the TMPDIR environment
3875 variable to another directory and make sure that it is not mounted noexec.
3876 EOF
3877     die "Sanity test failed."
3878 fi
3879
3880 armasm_flags(){
3881     for flag; do
3882         case $flag in
3883             # Filter out MSVC cl.exe options from cflags that shouldn't
3884             # be passed to gas-preprocessor
3885             -M[TD]*)                                            ;;
3886             *)                  echo $flag                      ;;
3887         esac
3888    done
3889 }
3890
3891 ccc_flags(){
3892     for flag; do
3893         case $flag in
3894             -std=c99)           echo -c99                       ;;
3895             -mcpu=*)            echo -arch ${flag#*=}           ;;
3896             -mieee)             echo -ieee                      ;;
3897             -O*|-fast)          echo $flag                      ;;
3898             -fno-math-errno)    echo -assume nomath_errno       ;;
3899             -g)                 echo -g3                        ;;
3900             -Wall)              echo -msg_enable level2         ;;
3901             -Wno-pointer-sign)  echo -msg_disable ptrmismatch1  ;;
3902             -Wl,*)              echo $flag                      ;;
3903             -f*|-W*)                                            ;;
3904             *)                  echo $flag                      ;;
3905         esac
3906    done
3907 }
3908
3909 cparser_flags(){
3910     for flag; do
3911         case $flag in
3912             -Wno-switch)             echo -Wno-switch-enum ;;
3913             -Wno-format-zero-length) ;;
3914             -Wdisabled-optimization) ;;
3915             -Wno-pointer-sign)       echo -Wno-other ;;
3916             *)                       echo $flag ;;
3917         esac
3918     done
3919 }
3920
3921 msvc_common_flags(){
3922     for flag; do
3923         case $flag in
3924             # In addition to specifying certain flags under the compiler
3925             # specific filters, they must be specified here as well or else the
3926             # generic catch all at the bottom will print the original flag.
3927             -Wall)                ;;
3928             -Wextra)              ;;
3929             -std=c99)             ;;
3930             # Common flags
3931             -fomit-frame-pointer) ;;
3932             -g)                   echo -Z7 ;;
3933             -fno-math-errno)      ;;
3934             -fno-common)          ;;
3935             -fno-signed-zeros)    ;;
3936             -fPIC)                ;;
3937             -mthumb)              ;;
3938             -march=*)             ;;
3939             -lz)                  echo zlib.lib ;;
3940             -lx264)               echo libx264.lib ;;
3941             -lstdc++)             ;;
3942             -l*)                  echo ${flag#-l}.lib ;;
3943             -LARGEADDRESSAWARE)   echo $flag ;;
3944             -L*)                  echo -libpath:${flag#-L} ;;
3945             *)                    echo $flag ;;
3946         esac
3947     done
3948 }
3949
3950 msvc_flags(){
3951     msvc_common_flags "$@"
3952     for flag; do
3953         case $flag in
3954             -Wall)                echo -W3 -wd4018 -wd4146 -wd4244 -wd4305     \
3955                                        -wd4554 ;;
3956             -Wextra)              echo -W4 -wd4244 -wd4127 -wd4018 -wd4389     \
3957                                        -wd4146 -wd4057 -wd4204 -wd4706 -wd4305 \
3958                                        -wd4152 -wd4324 -we4013 -wd4100 -wd4214 \
3959                                        -wd4307 \
3960                                        -wd4273 -wd4554 -wd4701 -wd4703 ;;
3961         esac
3962     done
3963 }
3964
3965 icl_flags(){
3966     msvc_common_flags "$@"
3967     for flag; do
3968         case $flag in
3969             # Despite what Intel's documentation says -Wall, which is supported
3970             # on Windows, does enable remarks so disable them here.
3971             -Wall)                echo $flag -Qdiag-disable:remark ;;
3972             -std=c99)             echo -Qstd=c99 ;;
3973             -flto)                echo -ipo ;;
3974         esac
3975     done
3976 }
3977
3978 icc_flags(){
3979     for flag; do
3980         case $flag in
3981             -flto)                echo -ipo ;;
3982             *)                    echo $flag ;;
3983         esac
3984     done
3985 }
3986
3987 pgi_flags(){
3988     for flag; do
3989         case $flag in
3990             -flto)                echo -Mipa=fast,libopt,libinline,vestigial ;;
3991             -fomit-frame-pointer) echo -Mnoframe ;;
3992             -g)                   echo -gopt ;;
3993             *)                    echo $flag ;;
3994         esac
3995     done
3996 }
3997
3998 suncc_flags(){
3999     for flag; do
4000         case $flag in
4001             -march=*|-mcpu=*)
4002                 case "${flag#*=}" in
4003                     native)                   echo -xtarget=native       ;;
4004                     v9|niagara)               echo -xarch=sparc          ;;
4005                     ultrasparc)               echo -xarch=sparcvis       ;;
4006                     ultrasparc3|niagara2)     echo -xarch=sparcvis2      ;;
4007                     i586|pentium)             echo -xchip=pentium        ;;
4008                     i686|pentiumpro|pentium2) echo -xtarget=pentium_pro  ;;
4009                     pentium3*|c3-2)           echo -xtarget=pentium3     ;;
4010                     pentium-m)          echo -xarch=sse2 -xchip=pentium3 ;;
4011                     pentium4*)          echo -xtarget=pentium4           ;;
4012                     prescott|nocona)    echo -xarch=sse3 -xchip=pentium4 ;;
4013                     *-sse3)             echo -xarch=sse3                 ;;
4014                     core2)              echo -xarch=ssse3 -xchip=core2   ;;
4015                     bonnell)                   echo -xarch=ssse3         ;;
4016                     corei7|nehalem)            echo -xtarget=nehalem     ;;
4017                     westmere)                  echo -xtarget=westmere    ;;
4018                     silvermont)                echo -xarch=sse4_2        ;;
4019                     corei7-avx|sandybridge)    echo -xtarget=sandybridge ;;
4020                     core-avx*|ivybridge|haswell|broadwell|skylake*|knl)
4021                                                echo -xarch=avx           ;;
4022                     amdfam10|barcelona)        echo -xtarget=barcelona   ;;
4023                     btver1)                    echo -xarch=amdsse4a      ;;
4024                     btver2|bdver*|znver*)      echo -xarch=avx           ;;
4025                     athlon-4|athlon-[mx]p)     echo -xarch=ssea          ;;
4026                     k8|opteron|athlon64|athlon-fx)
4027                                                echo -xarch=sse2a         ;;
4028                     athlon*)                   echo -xarch=pentium_proa  ;;
4029                 esac
4030                 ;;
4031             -std=c99)             echo -xc99              ;;
4032             -fomit-frame-pointer) echo -xregs=frameptr    ;;
4033             -fPIC)                echo -KPIC -xcode=pic32 ;;
4034             -W*,*)                echo $flag              ;;
4035             -f*-*|-W*|-mimpure-text)                      ;;
4036             -shared)              echo -G                 ;;
4037             *)                    echo $flag              ;;
4038         esac
4039     done
4040 }
4041
4042 tms470_flags(){
4043     for flag; do
4044         case $flag in
4045             -march=*|-mcpu=*)
4046                 case "${flag#*=}" in
4047                     armv7-a|cortex-a*)      echo -mv=7a8 ;;
4048                     armv7-r|cortex-r*)      echo -mv=7r4 ;;
4049                     armv7-m|cortex-m*)      echo -mv=7m3 ;;
4050                     armv6*|arm11*)          echo -mv=6   ;;
4051                     armv5*e|arm[79]*e*|arm9[24]6*|arm96*|arm102[26])
4052                                             echo -mv=5e  ;;
4053                     armv4*|arm7*|arm9[24]*) echo -mv=4   ;;
4054                 esac
4055                 ;;
4056             -mfpu=neon)     echo --float_support=vfpv3 --neon ;;
4057             -mfpu=vfp)      echo --float_support=vfpv2        ;;
4058             -mfpu=vfpv3)    echo --float_support=vfpv3        ;;
4059             -mfpu=vfpv3-d16) echo --float_support=vfpv3d16    ;;
4060             -msoft-float)   echo --float_support=vfplib       ;;
4061             -O[0-3]|-mf=*)  echo $flag                        ;;
4062             -g)             echo -g -mn                       ;;
4063             -pds=*)         echo $flag                        ;;
4064             -D*|-I*)        echo $flag                        ;;
4065             --gcc|--abi=*)  echo $flag                        ;;
4066             -me)            echo $flag                        ;;
4067         esac
4068     done
4069 }
4070
4071 probe_cc(){
4072     pfx=$1
4073     _cc=$2
4074     first=$3
4075
4076     unset _type _ident _cc_c _cc_e _cc_o _flags _cflags
4077     unset _ld_o _ldflags _ld_lib _ld_path
4078     unset _depflags _DEPCMD _DEPFLAGS
4079     _flags_filter=echo
4080
4081     if $_cc --version 2>&1 | grep -q '^GNU assembler'; then
4082         true # no-op to avoid reading stdin in following checks
4083     elif $_cc -v 2>&1 | grep -q '^gcc.*LLVM'; then
4084         _type=llvm_gcc
4085         gcc_extra_ver=$(expr "$($_cc --version 2>/dev/null | head -n1)" : '.*\((.*)\)')
4086         _ident="llvm-gcc $($_cc -dumpversion 2>/dev/null) $gcc_extra_ver"
4087         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
4088         _cflags_speed='-O3'
4089         _cflags_size='-Os'
4090     elif $_cc -v 2>&1 | grep -qi ^gcc; then
4091         _type=gcc
4092         gcc_version=$($_cc --version | head -n1)
4093         gcc_basever=$($_cc -dumpversion)
4094         gcc_pkg_ver=$(expr "$gcc_version" : '[^ ]* \(([^)]*)\)')
4095         gcc_ext_ver=$(expr "$gcc_version" : ".*$gcc_pkg_ver $gcc_basever \\(.*\\)")
4096         _ident=$(cleanws "gcc $gcc_basever $gcc_pkg_ver $gcc_ext_ver")
4097         case $gcc_basever in
4098             2) ;;
4099             2.*) ;;
4100             *) _depflags='-MMD -MF $(@:.o=.d) -MT $@' ;;
4101         esac
4102         if [ "$first" = true ]; then
4103             case $gcc_basever in
4104                 4.2*)
4105                 warn "gcc 4.2 is outdated and may miscompile FFmpeg. Please use a newer compiler." ;;
4106             esac
4107         fi
4108         _cflags_speed='-O3'
4109         _cflags_size='-Os'
4110     elif $_cc --version 2>/dev/null | grep -q ^icc; then
4111         _type=icc
4112         _ident=$($_cc --version | head -n1)
4113         _depflags='-MMD'
4114         _cflags_speed='-O3'
4115         _cflags_size='-Os'
4116         _cflags_noopt='-O1'
4117         _flags_filter=icc_flags
4118     elif $_cc -v 2>&1 | grep -q xlc; then
4119         _type=xlc
4120         _ident=$($_cc -qversion 2>/dev/null | head -n1)
4121         _cflags_speed='-O5'
4122         _cflags_size='-O5 -qcompact'
4123     elif $_cc -V 2>/dev/null | grep -q Compaq; then
4124         _type=ccc
4125         _ident=$($_cc -V | head -n1 | cut -d' ' -f1-3)
4126         _DEPFLAGS='-M'
4127         _cflags_speed='-fast'
4128         _cflags_size='-O1'
4129         _flags_filter=ccc_flags
4130     elif $_cc --vsn 2>/dev/null | grep -Eq "ARM (C/C\+\+ )?Compiler"; then
4131         test -d "$sysroot" || die "No valid sysroot specified."
4132         _type=armcc
4133         _ident=$($_cc --vsn | grep -i build | head -n1 | sed 's/.*: //')
4134         armcc_conf="$PWD/armcc.conf"
4135         $_cc --arm_linux_configure                 \
4136              --arm_linux_config_file="$armcc_conf" \
4137              --configure_sysroot="$sysroot"        \
4138              --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
4139              die "Error creating armcc configuration file."
4140         $_cc --vsn | grep -q RVCT && armcc_opt=rvct || armcc_opt=armcc
4141         _flags="--arm_linux_config_file=$armcc_conf --translate_gcc"
4142         as_default="${cross_prefix}gcc"
4143         _depflags='-MMD'
4144         _cflags_speed='-O3'
4145         _cflags_size='-Os'
4146     elif $_cc -version 2>/dev/null | grep -Eq 'TMS470|TI ARM'; then
4147         _type=tms470
4148         _ident=$($_cc -version | head -n1 | tr -s ' ')
4149         _flags='--gcc --abi=eabi -me'
4150         _cc_e='-ppl -fe=$@'
4151         _cc_o='-fe=$@'
4152         _depflags='-ppa -ppd=$(@:.o=.d)'
4153         _cflags_speed='-O3 -mf=5'
4154         _cflags_size='-O3 -mf=2'
4155         _flags_filter=tms470_flags
4156     elif $_cc -v 2>&1 | grep -q clang; then
4157         _type=clang
4158         _ident=$($_cc --version 2>/dev/null | head -n1)
4159         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
4160         _cflags_speed='-O3'
4161         _cflags_size='-Oz'
4162     elif $_cc -V 2>&1 | grep -q Sun; then
4163         _type=suncc
4164         _ident=$($_cc -V 2>&1 | head -n1 | cut -d' ' -f 2-)
4165         _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "1s,^.*: ,$@: ," -e "\$$!s,\$$, \\\," -e "1!s,^.*: , ," > $(@:.o=.d)'
4166         _DEPFLAGS='-xM1 -xc99'
4167         _ldflags='-std=c99'
4168         _cflags_speed='-O5'
4169         _cflags_size='-O5 -xspace'
4170         _flags_filter=suncc_flags
4171     elif $_cc -v 2>&1 | grep -q 'PathScale\|Path64'; then
4172         _type=pathscale
4173         _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
4174         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
4175         _cflags_speed='-O2'
4176         _cflags_size='-Os'
4177         _flags_filter='filter_out -Wdisabled-optimization'
4178     elif $_cc -v 2>&1 | grep -q Open64; then
4179         _type=open64
4180         _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
4181         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
4182         _cflags_speed='-O2'
4183         _cflags_size='-Os'
4184         _flags_filter='filter_out -Wdisabled-optimization|-Wtype-limits|-fno-signed-zeros'
4185     elif $_cc -V 2>&1 | grep -q Portland; then
4186         _type=pgi
4187         _ident="PGI $($_cc -V 2>&1 | awk '/^pgcc/ { print $2; exit }')"
4188         opt_common='-alias=ansi -Mdse -Mlre -Mpre'
4189         _cflags_speed="-O3 -Mautoinline -Munroll=c:4 $opt_common"
4190         _cflags_size="-O2 -Munroll=c:1 $opt_common"
4191         _cflags_noopt="-O"
4192         _flags_filter=pgi_flags
4193     elif $_cc 2>&1 | grep -q 'Microsoft.*ARM.*Assembler'; then
4194         _type=armasm
4195         _ident=$($_cc | head -n1)
4196         # 4509: "This form of conditional instruction is deprecated"
4197         _flags="-nologo -ignore 4509"
4198         _flags_filter=armasm_flags
4199     elif $_cc 2>&1 | grep -q Intel; then
4200         _type=icl
4201         _ident=$($_cc 2>&1 | head -n1)
4202         _depflags='-QMMD -QMF$(@:.o=.d) -QMT$@'
4203         # Not only is O3 broken on 13.x+ but it is slower on all previous
4204         # versions (tested) as well.
4205         _cflags_speed="-O2"
4206         _cflags_size="-O1 -Oi" # -O1 without -Oi miscompiles stuff
4207         if $_cc 2>&1 | grep -q Linker; then
4208             _ld_o='-out:$@'
4209         else
4210             _ld_o='-Fe$@'
4211         fi
4212         _cc_o='-Fo$@'
4213         _cc_e='-P'
4214         _flags_filter=icl_flags
4215         _ld_lib='lib%.a'
4216         _ld_path='-libpath:'
4217         # -Qdiag-error to make icl error when seeing certain unknown arguments
4218         _flags='-nologo -Qdiag-error:4044,10157'
4219         # -Qvec- -Qsimd- to prevent miscompilation, -GS, fp:precise for consistency
4220         # with MSVC which enables it by default.
4221         _cflags='-Qms0 -Qvec- -Qsimd- -GS -fp:precise'
4222         disable stripping
4223     elif $_cc -? 2>/dev/null | grep -q 'LLVM.*Linker'; then
4224         # lld can emulate multiple different linkers; in ms link.exe mode,
4225         # the -? parameter gives the help output which contains an identifyable
4226         # string, while it gives an error in other modes.
4227         _type=lld-link
4228         # The link.exe mode doesn't have a switch for getting the version,
4229         # but we can force it back to gnu mode and get the version from there.
4230         _ident=$($_cc -flavor gnu --version 2>/dev/null)
4231         _ld_o='-out:$@'
4232         _flags_filter=msvc_flags
4233         _ld_lib='lib%.a'
4234         _ld_path='-libpath:'
4235     elif $_cc -nologo- 2>&1 | grep -q Microsoft; then
4236         _type=msvc
4237         _ident=$($_cc 2>&1 | head -n1)
4238         _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< 2>&1 | awk '\''/including/ { sub(/^.*file: */, ""); gsub(/\\/, "/"); if (!match($$0, / /)) print "$@:", $$0 }'\'' > $(@:.o=.d)'
4239         _DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -showIncludes -Zs'
4240         _cflags_speed="-O2"
4241         _cflags_size="-O1"
4242         _cflags_noopt="-O1"
4243         if $_cc -nologo- 2>&1 | grep -q Linker; then
4244             _ld_o='-out:$@'
4245         else
4246             _ld_o='-Fe$@'
4247         fi
4248         _cc_o='-Fo$@'
4249         _cc_e='-P -Fi$@'
4250         _flags_filter=msvc_flags
4251         _ld_lib='lib%.a'
4252         _ld_path='-libpath:'
4253         _flags='-nologo'
4254         disable stripping
4255     elif $_cc --version 2>/dev/null | grep -q ^cparser; then
4256         _type=cparser
4257         _ident=$($_cc --version | head -n1)
4258         _depflags='-MMD'
4259         _cflags_speed='-O4'
4260         _cflags_size='-O2'
4261         _flags_filter=cparser_flags
4262     fi
4263
4264     eval ${pfx}_type=\$_type
4265     eval ${pfx}_ident=\$_ident
4266 }
4267
4268 set_ccvars(){
4269     eval ${1}_C=\${_cc_c-\${${1}_C}}
4270     eval ${1}_E=\${_cc_e-\${${1}_E}}
4271     eval ${1}_O=\${_cc_o-\${${1}_O}}
4272
4273     if [ -n "$_depflags" ]; then
4274         eval ${1}_DEPFLAGS=\$_depflags
4275     else
4276         eval ${1}DEP=\${_DEPCMD:-\$DEPCMD}
4277         eval ${1}DEP_FLAGS=\${_DEPFLAGS:-\$DEPFLAGS}
4278         eval DEP${1}FLAGS=\$_flags
4279     fi
4280 }
4281
4282 probe_cc cc "$cc" "true"
4283 cflags_filter=$_flags_filter
4284 cflags_speed=$_cflags_speed
4285 cflags_size=$_cflags_size
4286 cflags_noopt=$_cflags_noopt
4287 add_cflags $_flags $_cflags
4288 cc_ldflags=$_ldflags
4289 set_ccvars CC
4290 set_ccvars CXX
4291
4292 probe_cc hostcc "$host_cc"
4293 host_cflags_filter=$_flags_filter
4294 host_cflags_speed=$_cflags_speed
4295 add_host_cflags  $_flags $_cflags
4296 set_ccvars HOSTCC
4297
4298 test -n "$cc_type" && enable $cc_type ||
4299     warn "Unknown C compiler $cc, unable to select optimal CFLAGS"
4300
4301 : ${as_default:=$cc}
4302 : ${objcc_default:=$cc}
4303 : ${dep_cc_default:=$cc}
4304 : ${ld_default:=$cc}
4305 : ${host_ld_default:=$host_cc}
4306 set_default ar as objcc dep_cc ld ln_s host_ld windres
4307
4308 probe_cc as "$as"
4309 asflags_filter=$_flags_filter
4310 add_asflags $_flags $_cflags
4311 set_ccvars AS
4312
4313 probe_cc objcc "$objcc"
4314 objcflags_filter=$_flags_filter
4315 add_objcflags $_flags $_cflags
4316 set_ccvars OBJC
4317
4318 probe_cc ld "$ld"
4319 ldflags_filter=$_flags_filter
4320 add_ldflags $_flags $_ldflags
4321 test "$cc_type" != "$ld_type" && add_ldflags $cc_ldflags
4322 LD_O=${_ld_o-$LD_O}
4323 LD_LIB=${_ld_lib-$LD_LIB}
4324 LD_PATH=${_ld_path-$LD_PATH}
4325
4326 probe_cc hostld "$host_ld"
4327 host_ldflags_filter=$_flags_filter
4328 add_host_ldflags $_flags $_ldflags
4329 HOSTLD_O=${_ld_o-$HOSTLD_O}
4330
4331 if [ -z "$CC_DEPFLAGS" ] && [ "$dep_cc" != "$cc" ]; then
4332     probe_cc depcc "$dep_cc"
4333     CCDEP=${_DEPCMD:-$DEPCMD}
4334     CCDEP_FLAGS=${_DEPFLAGS:=$DEPFLAGS}
4335     DEPCCFLAGS=$_flags
4336 fi
4337
4338 if $ar 2>&1 | grep -q Microsoft; then
4339     arflags="-nologo"
4340     ar_o='-out:$@'
4341 elif $ar 2>&1 | grep -q 'Texas Instruments'; then
4342     arflags="rq"
4343     ar_o='$@'
4344 elif $ar 2>&1 | grep -q 'Usage: ar.*-X.*any'; then
4345     arflags='-Xany -r -c'
4346     ar_o='$@'
4347 elif $ar 2>&1 | grep -q "\[D\] "; then
4348     arflags="rcD"
4349     ar_o='$@'
4350 else
4351     arflags="rc"
4352     ar_o='$@'
4353 fi
4354
4355 add_cflags $extra_cflags
4356 add_cxxflags $extra_cxxflags
4357 add_objcflags $extra_objcflags
4358 add_asflags $extra_cflags
4359
4360 if test -n "$sysroot"; then
4361     case "$cc_type" in
4362         gcc|llvm_gcc|clang)
4363             add_cppflags --sysroot="$sysroot"
4364             add_ldflags --sysroot="$sysroot"
4365 # On Darwin --sysroot may be ignored, -isysroot always affects headers and linking
4366             add_cppflags -isysroot "$sysroot"
4367             add_ldflags -isysroot "$sysroot"
4368         ;;
4369         tms470)
4370             add_cppflags -I"$sysinclude"
4371             add_ldflags  --sysroot="$sysroot"
4372         ;;
4373     esac
4374 fi
4375
4376 if test "$cpu" = host; then
4377     enabled cross_compile &&
4378         die "--cpu=host makes no sense when cross-compiling."
4379
4380     case "$cc_type" in
4381         gcc|llvm_gcc)
4382             check_native(){
4383                 $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
4384                 sed -n "/cc1.*$1=/{
4385                             s/.*$1=\\([^ ]*\\).*/\\1/
4386                             p
4387                             q
4388                         }" $TMPE
4389             }
4390             cpu=$(check_native -march || check_native -mcpu)
4391         ;;
4392         clang)
4393             check_native(){
4394                 $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
4395                 sed -n "/cc1.*-target-cpu /{
4396                             s/.*-target-cpu \\([^ ]*\\).*/\\1/
4397                             p
4398                             q
4399                         }" $TMPE
4400             }
4401             cpu=$(check_native -march)
4402         ;;
4403     esac
4404
4405     test "${cpu:-host}" = host &&
4406         die "--cpu=host not supported with compiler $cc"
4407 fi
4408
4409 # Deal with common $arch aliases
4410 case "$arch" in
4411     aarch64|arm64)
4412         arch="aarch64"
4413     ;;
4414     arm*|iPad*|iPhone*)
4415         arch="arm"
4416     ;;
4417     mips*|IP*)
4418         case "$arch" in
4419         *el)
4420             add_cppflags -EL
4421             add_ldflags -EL
4422         ;;
4423         *eb)
4424             add_cppflags -EB
4425             add_ldflags -EB
4426         ;;
4427         esac
4428         arch="mips"
4429     ;;
4430     parisc*|hppa*)
4431         arch="parisc"
4432     ;;
4433     "Power Macintosh"|ppc*|powerpc*)
4434         arch="ppc"
4435     ;;
4436     s390|s390x)
4437         arch="s390"
4438     ;;
4439     sh4|sh)
4440         arch="sh4"
4441     ;;
4442     sun4*|sparc*)
4443         arch="sparc"
4444     ;;
4445     tilegx|tile-gx)
4446         arch="tilegx"
4447     ;;
4448     i[3-6]86*|i86pc|BePC|x86pc|x86_64|x86_32|amd64)
4449         arch="x86"
4450     ;;
4451 esac
4452
4453 is_in $arch $ARCH_LIST || warn "unknown architecture $arch"
4454 enable $arch
4455
4456 # Add processor-specific flags
4457 if enabled aarch64; then
4458
4459     case $cpu in
4460         armv*)
4461             cpuflags="-march=$cpu"
4462         ;;
4463         *)
4464             cpuflags="-mcpu=$cpu"
4465         ;;
4466     esac
4467
4468 elif enabled alpha; then
4469
4470     cpuflags="-mcpu=$cpu"
4471
4472 elif enabled arm; then
4473
4474     check_arm_arch() {
4475         check_cpp_condition stddef.h \
4476             "defined __ARM_ARCH_${1}__ || defined __TARGET_ARCH_${2:-$1}" \
4477             $cpuflags
4478     }
4479
4480     probe_arm_arch() {
4481         if   check_arm_arch 4;        then echo armv4
4482         elif check_arm_arch 4T;       then echo armv4t
4483         elif check_arm_arch 5;        then echo armv5
4484         elif check_arm_arch 5E;       then echo armv5e
4485         elif check_arm_arch 5T;       then echo armv5t
4486         elif check_arm_arch 5TE;      then echo armv5te
4487         elif check_arm_arch 5TEJ;     then echo armv5te
4488         elif check_arm_arch 6;        then echo armv6
4489         elif check_arm_arch 6J;       then echo armv6j
4490         elif check_arm_arch 6K;       then echo armv6k
4491         elif check_arm_arch 6Z;       then echo armv6z
4492         elif check_arm_arch 6ZK;      then echo armv6zk
4493         elif check_arm_arch 6T2;      then echo armv6t2
4494         elif check_arm_arch 7;        then echo armv7
4495         elif check_arm_arch 7A  7_A;  then echo armv7-a
4496         elif check_arm_arch 7S;       then echo armv7-a
4497         elif check_arm_arch 7R  7_R;  then echo armv7-r
4498         elif check_arm_arch 7M  7_M;  then echo armv7-m
4499         elif check_arm_arch 7EM 7E_M; then echo armv7-m
4500         elif check_arm_arch 8A  8_A;  then echo armv8-a
4501         fi
4502     }
4503
4504     [ "$cpu" = generic ] && cpu=$(probe_arm_arch)
4505
4506     case $cpu in
4507         armv*)
4508             cpuflags="-march=$cpu"
4509             subarch=$(echo $cpu | sed 's/[^a-z0-9]//g')
4510         ;;
4511         *)
4512             cpuflags="-mcpu=$cpu"
4513             case $cpu in
4514                 cortex-a*)                               subarch=armv7a  ;;
4515                 cortex-r*)                               subarch=armv7r  ;;
4516                 cortex-m*)                 enable thumb; subarch=armv7m  ;;
4517                 arm11*)                                  subarch=armv6   ;;
4518                 arm[79]*e*|arm9[24]6*|arm96*|arm102[26]) subarch=armv5te ;;
4519                 armv4*|arm7*|arm9[24]*)                  subarch=armv4   ;;
4520                 *)                             subarch=$(probe_arm_arch) ;;
4521             esac
4522         ;;
4523     esac
4524
4525     case "$subarch" in
4526         armv5t*)    enable fast_clz                ;;
4527         armv[6-8]*)
4528             enable fast_clz
4529             disabled fast_unaligned || enable fast_unaligned
4530             ;;
4531     esac
4532
4533 elif enabled avr32; then
4534
4535     case $cpu in
4536         ap7[02]0[0-2])
4537             subarch="avr32_ap"
4538             cpuflags="-mpart=$cpu"
4539         ;;
4540         ap)
4541             subarch="avr32_ap"
4542             cpuflags="-march=$cpu"
4543         ;;
4544         uc3[ab]*)
4545             subarch="avr32_uc"
4546             cpuflags="-mcpu=$cpu"
4547         ;;
4548         uc)
4549             subarch="avr32_uc"
4550             cpuflags="-march=$cpu"
4551         ;;
4552     esac
4553
4554 elif enabled bfin; then
4555
4556     cpuflags="-mcpu=$cpu"
4557
4558 elif enabled mips; then
4559
4560     cpuflags="-march=$cpu"
4561
4562     if [ "$cpu" != "generic" ]; then
4563         disable mips32r2
4564         disable mips32r5
4565         disable mips64r2
4566         disable mips32r6
4567         disable mips64r6
4568         disable loongson2
4569         disable loongson3
4570
4571         case $cpu in
4572             24kc|24kf*|24kec|34kc|1004kc|24kef*|34kf*|1004kf*|74kc|74kf)
4573                 enable mips32r2
4574                 disable msa
4575             ;;
4576             p5600|i6400|p6600)
4577                 disable mipsdsp
4578                 disable mipsdspr2
4579             ;;
4580             loongson*)
4581                 enable loongson2
4582                 enable loongson3
4583                 enable local_aligned_8 local_aligned_16 local_aligned_32
4584                 enable simd_align_16
4585                 enable fast_64bit
4586                 enable fast_clz
4587                 enable fast_cmov
4588                 enable fast_unaligned
4589                 disable aligned_stack
4590                 disable mipsfpu
4591                 disable mipsdsp
4592                 disable mipsdspr2
4593                 case $cpu in
4594                     loongson3*)
4595                         cpuflags="-march=loongson3a -mhard-float -fno-expensive-optimizations"
4596                     ;;
4597                     loongson2e)
4598                         cpuflags="-march=loongson2e -mhard-float -fno-expensive-optimizations"
4599                     ;;
4600                     loongson2f)
4601                         cpuflags="-march=loongson2f -mhard-float -fno-expensive-optimizations"
4602                     ;;
4603                 esac
4604             ;;
4605             *)
4606                 # Unknown CPU. Disable everything.
4607                 warn "unknown CPU. Disabling all MIPS optimizations."
4608                 disable mipsfpu
4609                 disable mipsdsp
4610                 disable mipsdspr2
4611                 disable msa
4612                 disable mmi
4613             ;;
4614         esac
4615
4616         case $cpu in
4617             24kc)
4618                 disable mipsfpu
4619                 disable mipsdsp
4620                 disable mipsdspr2
4621             ;;
4622             24kf*)
4623                 disable mipsdsp
4624                 disable mipsdspr2
4625             ;;
4626             24kec|34kc|1004kc)
4627                 disable mipsfpu
4628                 disable mipsdspr2
4629             ;;
4630             24kef*|34kf*|1004kf*)
4631                 disable mipsdspr2
4632             ;;
4633             74kc)
4634                 disable mipsfpu
4635             ;;
4636             p5600)
4637                 enable mips32r5
4638                 check_cflags "-mtune=p5600" && check_cflags "-msched-weight -mload-store-pairs -funroll-loops"
4639             ;;
4640             i6400)
4641                 enable mips64r6
4642                 check_cflags "-mtune=i6400 -mabi=64" && check_cflags "-msched-weight -mload-store-pairs -funroll-loops" && check_ldflags "-mabi=64"
4643             ;;
4644             p6600)
4645                 enable mips64r6
4646                 check_cflags "-mtune=p6600 -mabi=64" && check_cflags "-msched-weight -mload-store-pairs -funroll-loops" && check_ldflags "-mabi=64"
4647             ;;
4648         esac
4649     else
4650         # We do not disable anything. Is up to the user to disable the unwanted features.
4651         warn 'generic cpu selected'
4652     fi
4653
4654 elif enabled ppc; then
4655
4656     disable ldbrx
4657
4658     case $(tolower $cpu) in
4659         601|ppc601|powerpc601)
4660             cpuflags="-mcpu=601"
4661             disable altivec
4662         ;;
4663         603*|ppc603*|powerpc603*)
4664             cpuflags="-mcpu=603"
4665             disable altivec
4666         ;;
4667         604*|ppc604*|powerpc604*)
4668             cpuflags="-mcpu=604"
4669             disable altivec
4670         ;;
4671         g3|75*|ppc75*|powerpc75*)
4672             cpuflags="-mcpu=750"
4673             disable altivec
4674         ;;
4675         g4|745*|ppc745*|powerpc745*)
4676             cpuflags="-mcpu=7450"
4677             disable vsx
4678         ;;
4679         74*|ppc74*|powerpc74*)
4680             cpuflags="-mcpu=7400"
4681             disable vsx
4682         ;;
4683         g5|970|ppc970|powerpc970)
4684             cpuflags="-mcpu=970"
4685             disable vsx
4686         ;;
4687         power[3-6]*)
4688             cpuflags="-mcpu=$cpu"
4689             disable vsx
4690         ;;
4691         power[7-8]*)
4692             cpuflags="-mcpu=$cpu"
4693         ;;
4694         cell)
4695             cpuflags="-mcpu=cell"
4696             enable ldbrx
4697             disable vsx
4698         ;;
4699         e500mc)
4700             cpuflags="-mcpu=e500mc"
4701             disable altivec
4702         ;;
4703         e500v2)
4704             cpuflags="-mcpu=8548 -mhard-float -mfloat-gprs=double"
4705             disable altivec
4706             disable dcbzl
4707         ;;
4708         e500)
4709             cpuflags="-mcpu=8540 -mhard-float"
4710             disable altivec
4711             disable dcbzl
4712         ;;
4713     esac
4714
4715 elif enabled sparc; then
4716
4717     case $cpu in
4718         cypress|f93[04]|tsc701|sparcl*|supersparc|hypersparc|niagara|v[789])
4719             cpuflags="-mcpu=$cpu"
4720         ;;
4721         ultrasparc*|niagara[234])
4722             cpuflags="-mcpu=$cpu"
4723         ;;
4724     esac
4725
4726 elif enabled x86; then
4727
4728     case $cpu in
4729         i[345]86|pentium)
4730             cpuflags="-march=$cpu"
4731             disable i686
4732             disable mmx
4733         ;;
4734         # targets that do NOT support nopl and conditional mov (cmov)
4735         pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
4736             cpuflags="-march=$cpu"
4737             disable i686
4738         ;;
4739         # targets that do support nopl and conditional mov (cmov)
4740         i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64*|k8*|opteron*|athlon-fx\
4741         |core*|atom|bonnell|nehalem|westmere|silvermont|sandybridge|ivybridge|haswell|broadwell|skylake*|knl\
4742         |amdfam10|barcelona|b[dt]ver*|znver*)
4743             cpuflags="-march=$cpu"
4744             enable i686
4745             enable fast_cmov
4746         ;;
4747         # targets that do support conditional mov but on which it's slow
4748         pentium4|pentium4m|prescott|nocona)
4749             cpuflags="-march=$cpu"
4750             enable i686
4751             disable fast_cmov
4752         ;;
4753     esac
4754
4755 fi
4756
4757 if [ "$cpu" != generic ]; then
4758     add_cflags  $cpuflags
4759     add_asflags $cpuflags
4760     test "$cc_type" = "$ld_type" && add_ldflags $cpuflags
4761 fi
4762
4763 # compiler sanity check
4764 check_exec <<EOF
4765 int main(void){ return 0; }
4766 EOF
4767 if test "$?" != 0; then
4768     echo "$cc is unable to create an executable file."
4769     if test -z "$cross_prefix" && ! enabled cross_compile ; then
4770         echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
4771         echo "Only do this if you know what cross compiling means."
4772     fi
4773     die "C compiler test failed."
4774 fi
4775
4776 add_cppflags -D_ISOC99_SOURCE
4777 add_cxxflags -D__STDC_CONSTANT_MACROS
4778 check_cxxflags -std=c++11 || check_cxxflags -std=c++0x
4779
4780 # some compilers silently accept -std=c11, so we also need to check that the
4781 # version macro is defined properly
4782 if test_cflags_cc -std=c11 ctype.h "__STDC_VERSION__ >= 201112L"; then
4783     add_cflags -std=c11
4784 else
4785     check_cflags -std=c99
4786 fi
4787
4788 check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
4789 #include <stdlib.h>
4790 EOF
4791 check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
4792 #include <stdlib.h>
4793 EOF
4794
4795 add_host_cppflags -D_ISOC99_SOURCE
4796 check_host_cflags -std=c99
4797 check_host_cflags -Wall
4798 check_host_cflags $host_cflags_speed
4799
4800 check_64bit(){
4801     arch32=$1
4802     arch64=$2
4803     expr=$3
4804     check_code cc "" "int test[2*($expr) - 1]" &&
4805         subarch=$arch64 || subarch=$arch32
4806 }
4807
4808 case "$arch" in
4809     aarch64|alpha|ia64)
4810         spic=$shared
4811     ;;
4812     mips)
4813         check_64bit mips mips64 '_MIPS_SIM > 1'
4814         spic=$shared
4815     ;;
4816     parisc)
4817         check_64bit parisc parisc64 'sizeof(void *) > 4'
4818         spic=$shared
4819     ;;
4820     ppc)
4821         check_64bit ppc ppc64 'sizeof(void *) > 4'
4822         spic=$shared
4823     ;;
4824     s390)
4825         check_64bit s390 s390x 'sizeof(void *) > 4'
4826         spic=$shared
4827     ;;
4828     sparc)
4829         check_64bit sparc sparc64 'sizeof(void *) > 4'
4830         spic=$shared
4831     ;;
4832     x86)
4833         check_64bit x86_32 x86_64 'sizeof(void *) > 4'
4834         # Treat x32 as x64 for now. Note it also needs spic=$shared
4835         test "$subarch" = "x86_32" && check_cpp_condition stddef.h 'defined(__x86_64__)' &&
4836             subarch=x86_64
4837         if test "$subarch" = "x86_64"; then
4838             spic=$shared
4839         fi
4840     ;;
4841     ppc)
4842         check_cc <<EOF && subarch="ppc64"
4843         int test[(int)sizeof(char*) - 7];
4844 EOF
4845     ;;
4846 esac
4847
4848 enable $subarch
4849 enabled spic && enable_weak pic
4850
4851 enabled x86_64 && objformat=elf64 || objformat="elf32"
4852
4853 # OS specific
4854 case $target_os in
4855     aix)
4856         SHFLAGS=-shared
4857         add_cppflags '-I\$(SRC_PATH)/compat/aix'
4858         enabled shared && add_ldflags -Wl,-brtl
4859         ;;
4860     android)
4861         disable symver
4862         enable section_data_rel_ro
4863         SLIB_INSTALL_NAME='$(SLIBNAME)'
4864         SLIB_INSTALL_LINKS=
4865         SHFLAGS='-shared -Wl,-soname,$(SLIBNAME)'
4866         ;;
4867     haiku)
4868         prefix_default="/boot/common"
4869         network_extralibs="-lnetwork"
4870         host_extralibs=
4871         ;;