lavu: Add DRM hwcontext
[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 lavfi_indev_deps="avfilter"
3054 libcdio_indev_deps="libcdio"
3055 libdc1394_indev_deps="libdc1394"
3056 libv4l2_indev_deps="libv4l2"
3057 openal_indev_deps="openal"
3058 opengl_outdev_deps="opengl"
3059 oss_indev_deps_any="soundcard_h sys_soundcard_h"
3060 oss_outdev_deps_any="soundcard_h sys_soundcard_h"
3061 pulse_indev_deps="libpulse"
3062 pulse_outdev_deps="libpulse"
3063 sdl2_outdev_deps="sdl2"
3064 sndio_indev_deps="sndio"
3065 sndio_outdev_deps="sndio"
3066 v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h"
3067 v4l2_outdev_deps_any="linux_videodev2_h sys_videoio_h"
3068 vfwcap_indev_deps="vfw32 vfwcap_defines"
3069 xcbgrab_indev_deps="libxcb"
3070 xv_outdev_deps="X11_extensions_Xvlib_h XvGetPortAttribute"
3071 xv_outdev_extralibs="-lXv -lX11 -lXext"
3072
3073 # protocols
3074 async_protocol_deps="threads"
3075 bluray_protocol_deps="libbluray"
3076 ffrtmpcrypt_protocol_deps="!librtmp_protocol"
3077 ffrtmpcrypt_protocol_deps_any="gcrypt gmp openssl"
3078 ffrtmpcrypt_protocol_select="tcp_protocol"
3079 ffrtmphttp_protocol_deps="!librtmp_protocol"
3080 ffrtmphttp_protocol_select="http_protocol"
3081 ftp_protocol_select="tcp_protocol"
3082 gopher_protocol_select="network"
3083 http_protocol_select="tcp_protocol"
3084 httpproxy_protocol_select="tcp_protocol"
3085 https_protocol_select="tls_protocol"
3086 icecast_protocol_select="http_protocol"
3087 librtmp_protocol_deps="librtmp"
3088 librtmpe_protocol_deps="librtmp"
3089 librtmps_protocol_deps="librtmp"
3090 librtmpt_protocol_deps="librtmp"
3091 librtmpte_protocol_deps="librtmp"
3092 libsmbclient_protocol_deps="libsmbclient gplv3"
3093 libssh_protocol_deps="libssh"
3094 mmsh_protocol_select="http_protocol"
3095 mmst_protocol_select="network"
3096 rtmp_protocol_deps="!librtmp_protocol"
3097 rtmp_protocol_select="tcp_protocol"
3098 rtmpe_protocol_select="ffrtmpcrypt_protocol"
3099 rtmps_protocol_deps="!librtmp_protocol"
3100 rtmps_protocol_select="tls_protocol"
3101 rtmpt_protocol_select="ffrtmphttp_protocol"
3102 rtmpte_protocol_select="ffrtmpcrypt_protocol ffrtmphttp_protocol"
3103 rtmpts_protocol_select="ffrtmphttp_protocol https_protocol"
3104 rtp_protocol_select="udp_protocol"
3105 sctp_protocol_deps="struct_sctp_event_subscribe struct_msghdr_msg_flags"
3106 sctp_protocol_select="network"
3107 srtp_protocol_select="rtp_protocol srtp"
3108 tcp_protocol_select="network"
3109 tls_gnutls_protocol_deps="gnutls !tls_schannel_protocol !tls_securetransport_protocol"
3110 tls_gnutls_protocol_select="tcp_protocol"
3111 tls_openssl_protocol_deps="openssl !tls_schannel_protocol !tls_securetransport_protocol !tls_gnutls_protocol"
3112 tls_openssl_protocol_select="tcp_protocol"
3113 tls_schannel_protocol_deps="schannel"
3114 tls_schannel_protocol_select="tcp_protocol"
3115 tls_securetransport_protocol_deps="securetransport"
3116 tls_securetransport_protocol_select="tcp_protocol"
3117 tls_protocol_deps_any="tls_schannel_protocol tls_securetransport_protocol tls_gnutls_protocol tls_openssl_protocol"
3118 udp_protocol_select="network"
3119 udplite_protocol_select="network"
3120 unix_protocol_deps="sys_un_h"
3121 unix_protocol_select="network"
3122
3123 # filters
3124 afftfilt_filter_deps="avcodec"
3125 afftfilt_filter_select="fft"
3126 afir_filter_deps="avcodec"
3127 afir_filter_select="fft"
3128 amovie_filter_deps="avcodec avformat"
3129 aresample_filter_deps="swresample"
3130 ass_filter_deps="libass"
3131 atempo_filter_deps="avcodec"
3132 atempo_filter_select="rdft"
3133 azmq_filter_deps="libzmq"
3134 blackframe_filter_deps="gpl"
3135 boxblur_filter_deps="gpl"
3136 bs2b_filter_deps="libbs2b"
3137 colormatrix_filter_deps="gpl"
3138 coreimage_filter_deps="coreimage"
3139 coreimage_filter_extralibs="-framework OpenGL -framework AppKit"
3140 coreimagesrc_filter_deps="coreimage"
3141 coreimagesrc_filter_extralibs="-framework OpenGL -framework AppKit"
3142 cover_rect_filter_deps="avcodec avformat gpl"
3143 cropdetect_filter_deps="gpl"
3144 deinterlace_qsv_filter_deps="libmfx"
3145 deinterlace_vaapi_filter_deps="vaapi"
3146 delogo_filter_deps="gpl"
3147 deshake_filter_select="pixelutils"
3148 drawtext_filter_deps="libfreetype"
3149 elbg_filter_deps="avcodec"
3150 eq_filter_deps="gpl"
3151 fftfilt_filter_deps="avcodec"
3152 fftfilt_filter_select="rdft"
3153 find_rect_filter_deps="avcodec avformat gpl"
3154 firequalizer_filter_deps="avcodec"
3155 firequalizer_filter_select="rdft"
3156 flite_filter_deps="libflite"
3157 framerate_filter_select="pixelutils"
3158 frei0r_filter_deps="frei0r dlopen"
3159 frei0r_src_filter_deps="frei0r dlopen"
3160 fspp_filter_deps="gpl"
3161 geq_filter_deps="gpl"
3162 histeq_filter_deps="gpl"
3163 hqdn3d_filter_deps="gpl"
3164 interlace_filter_deps="gpl"
3165 kerndeint_filter_deps="gpl"
3166 ladspa_filter_deps="ladspa dlopen"
3167 mcdeint_filter_deps="avcodec gpl"
3168 movie_filter_deps="avcodec avformat"
3169 mpdecimate_filter_deps="gpl"
3170 mpdecimate_filter_select="pixelutils"
3171 mptestsrc_filter_deps="gpl"
3172 negate_filter_deps="lut_filter"
3173 nnedi_filter_deps="gpl"
3174 ocr_filter_deps="libtesseract"
3175 ocv_filter_deps="libopencv"
3176 owdenoise_filter_deps="gpl"
3177 pan_filter_deps="swresample"
3178 perspective_filter_deps="gpl"
3179 phase_filter_deps="gpl"
3180 pp7_filter_deps="gpl"
3181 pp_filter_deps="gpl postproc"
3182 pullup_filter_deps="gpl"
3183 removelogo_filter_deps="avcodec avformat swscale"
3184 repeatfields_filter_deps="gpl"
3185 resample_filter_deps="avresample"
3186 rubberband_filter_deps="librubberband"
3187 sab_filter_deps="gpl swscale"
3188 scale2ref_filter_deps="swscale"
3189 scale_filter_deps="swscale"
3190 scale_qsv_filter_deps="libmfx"
3191 select_filter_select="pixelutils"
3192 showcqt_filter_deps="avcodec avformat swscale"
3193 showcqt_filter_select="fft"
3194 showfreqs_filter_deps="avcodec"
3195 showfreqs_filter_select="fft"
3196 showspectrum_filter_deps="avcodec"
3197 showspectrum_filter_select="fft"
3198 showspectrumpic_filter_deps="avcodec"
3199 showspectrumpic_filter_select="fft"
3200 signature_filter_deps="gpl avcodec avformat"
3201 smartblur_filter_deps="gpl swscale"
3202 sofalizer_filter_deps="libmysofa avcodec"
3203 sofalizer_filter_select="fft"
3204 spectrumsynth_filter_deps="avcodec"
3205 spectrumsynth_filter_select="fft"
3206 spp_filter_deps="gpl avcodec"
3207 spp_filter_select="fft idctdsp fdctdsp me_cmp pixblockdsp"
3208 stereo3d_filter_deps="gpl"
3209 subtitles_filter_deps="avformat avcodec libass"
3210 super2xsai_filter_deps="gpl"
3211 pixfmts_super2xsai_test_deps="super2xsai_filter"
3212 tinterlace_filter_deps="gpl"
3213 tinterlace_merge_test_deps="tinterlace_filter"
3214 tinterlace_pad_test_deps="tinterlace_filter"
3215 tonemap_filter_deps="const_nan"
3216 uspp_filter_deps="gpl avcodec"
3217 vaguedenoiser_filter_deps="gpl"
3218 vidstabdetect_filter_deps="libvidstab"
3219 vidstabtransform_filter_deps="libvidstab"
3220 libvmaf_filter_deps="libvmaf"
3221 zmq_filter_deps="libzmq"
3222 zoompan_filter_deps="swscale"
3223 zscale_filter_deps="libzimg const_nan"
3224 scale_vaapi_filter_deps="vaapi VAProcPipelineParameterBuffer"
3225
3226 # examples
3227 avio_dir_cmd_deps="avformat avutil"
3228 avio_reading_deps="avformat avcodec avutil"
3229 decode_audio_example_deps="avcodec avutil"
3230 decode_video_example_deps="avcodec avutil"
3231 demuxing_decoding_example_deps="avcodec avformat avutil"
3232 encode_audio_example_deps="avcodec avutil"
3233 encode_video_example_deps="avcodec avutil"
3234 extract_mvs_example_deps="avcodec avformat avutil"
3235 filter_audio_example_deps="avfilter avutil"
3236 filtering_audio_example_deps="avfilter avcodec avformat avutil"
3237 filtering_video_example_deps="avfilter avcodec avformat avutil"
3238 http_multiclient_example_deps="avformat avutil fork"
3239 hw_decode_example_deps="avcodec avformat avutil"
3240 metadata_example_deps="avformat avutil"
3241 muxing_example_deps="avcodec avformat avutil swscale"
3242 qsvdec_example_deps="avcodec avutil libmfx h264_qsv_decoder"
3243 remuxing_example_deps="avcodec avformat avutil"
3244 resampling_audio_example_deps="avutil swresample"
3245 scaling_video_example_deps="avutil swscale"
3246 transcode_aac_example_deps="avcodec avformat swresample"
3247 transcoding_example_deps="avfilter avcodec avformat avutil"
3248
3249 # libraries, in linking order
3250 avcodec_deps="avutil"
3251 avcodec_select="null_bsf"
3252 avdevice_deps="avformat avcodec avutil"
3253 avfilter_deps="avutil"
3254 avformat_deps="avcodec avutil"
3255 avresample_deps="avutil"
3256 postproc_deps="avutil gpl"
3257 swresample_deps="avutil"
3258 swscale_deps="avutil"
3259
3260 # programs
3261 ffmpeg_deps="avcodec avfilter avformat swresample"
3262 ffmpeg_select="aformat_filter anull_filter atrim_filter format_filter
3263                null_filter
3264                trim_filter"
3265 ffplay_deps="avcodec avformat swscale swresample sdl2"
3266 ffplay_extralibs='$sdl2_extralibs'
3267 ffplay_select="rdft crop_filter transpose_filter hflip_filter vflip_filter rotate_filter"
3268 ffprobe_deps="avcodec avformat"
3269 ffserver_deps="avformat fork sarestart"
3270 ffserver_select="ffm_muxer rtp_protocol rtsp_demuxer"
3271
3272 # documentation
3273 podpages_deps="perl"
3274 manpages_deps="perl pod2man"
3275 htmlpages_deps="perl"
3276 htmlpages_deps_any="makeinfo_html texi2html"
3277 txtpages_deps="perl makeinfo"
3278 doc_deps_any="manpages htmlpages podpages txtpages"
3279
3280 # default parameters
3281
3282 logfile="ffbuild/config.log"
3283
3284 # installation paths
3285 prefix_default="/usr/local"
3286 bindir_default='${prefix}/bin'
3287 datadir_default='${prefix}/share/ffmpeg'
3288 docdir_default='${prefix}/share/doc/ffmpeg'
3289 incdir_default='${prefix}/include'
3290 libdir_default='${prefix}/lib'
3291 mandir_default='${prefix}/share/man'
3292
3293 # toolchain
3294 ar_default="ar"
3295 cc_default="gcc"
3296 cxx_default="g++"
3297 host_cc_default="gcc"
3298 doxygen_default="doxygen"
3299 install="install"
3300 ln_s_default="ln -s -f"
3301 nm_default="nm -g"
3302 pkg_config_default=pkg-config
3303 ranlib_default="ranlib"
3304 strip_default="strip"
3305 version_script='--version-script'
3306 x86asmexe_default="nasm"
3307 windres_default="windres"
3308 nvcc_default="nvcc"
3309 nvccflags_default="-gencode arch=compute_30,code=sm_30 -O2"
3310
3311 # OS
3312 target_os_default=$(tolower $(uname -s))
3313 host_os=$target_os_default
3314
3315 # machine
3316 if test "$target_os_default" = aix; then
3317     arch_default=$(uname -p)
3318     strip_default="strip -X32_64"
3319 else
3320     arch_default=$(uname -m)
3321 fi
3322 cpu="generic"
3323 intrinsics="none"
3324
3325 # configurable options
3326 enable $PROGRAM_LIST
3327 enable $DOCUMENT_LIST
3328 enable $EXAMPLE_LIST
3329 enable $(filter_out avresample $LIBRARY_LIST)
3330 enable stripping
3331
3332 enable asm
3333 enable debug
3334 enable doc
3335 enable faan faandct faanidct
3336 enable optimizations
3337 enable runtime_cpudetect
3338 enable safe_bitstream_reader
3339 enable static
3340 enable swscale_alpha
3341 enable valgrind_backtrace
3342
3343 sws_max_filter_size_default=256
3344 set_default sws_max_filter_size
3345
3346 # build settings
3347 SHFLAGS='-shared -Wl,-soname,$$(@F)'
3348 LIBPREF="lib"
3349 LIBSUF=".a"
3350 FULLNAME='$(NAME)$(BUILDSUF)'
3351 LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
3352 SLIBPREF="lib"
3353 SLIBSUF=".so"
3354 SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
3355 SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
3356 SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
3357 LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
3358 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'
3359 SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR) $(SLIBNAME)'
3360 VERSION_SCRIPT_POSTPROCESS_CMD="cat"
3361
3362 asflags_filter=echo
3363 cflags_filter=echo
3364 ldflags_filter=echo
3365
3366 AS_C='-c'
3367 AS_O='-o $@'
3368 CC_C='-c'
3369 CC_E='-E -o $@'
3370 CC_O='-o $@'
3371 CXX_C='-c'
3372 CXX_O='-o $@'
3373 OBJCC_C='-c'
3374 OBJCC_E='-E -o $@'
3375 OBJCC_O='-o $@'
3376 X86ASM_O='-o $@'
3377 LD_O='-o $@'
3378 LD_LIB='-l%'
3379 LD_PATH='-L'
3380 HOSTCC_C='-c'
3381 HOSTCC_E='-E -o $@'
3382 HOSTCC_O='-o $@'
3383 HOSTLD_O='-o $@'
3384 NVCC_C='-c'
3385 NVCC_O='-o $@'
3386
3387 host_extralibs='-lm'
3388 host_cflags_filter=echo
3389 host_ldflags_filter=echo
3390
3391 target_path='$(CURDIR)'
3392
3393 # since the object filename is not given with the -MM flag, the compiler
3394 # is only able to print the basename, and we must add the path ourselves
3395 DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< 2>/dev/null | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(@F),$(@D)/$(@F)," > $(@:.o=.d)'
3396 DEPFLAGS='-MM'
3397
3398 mkdir -p ffbuild
3399
3400 # find source path
3401 if test -f configure; then
3402     source_path=.
3403 else
3404     source_path=$(cd $(dirname "$0"); pwd)
3405     case "$source_path" in
3406         *[[:blank:]]*) die "Out of tree builds are impossible with whitespace in source path." ;;
3407     esac
3408     test -e "$source_path/config.h" &&
3409         die "Out of tree builds are impossible with config.h in source dir."
3410 fi
3411
3412 for v in "$@"; do
3413     r=${v#*=}
3414     l=${v%"$r"}
3415     r=$(sh_quote "$r")
3416     FFMPEG_CONFIGURATION="${FFMPEG_CONFIGURATION# } ${l}${r}"
3417 done
3418
3419 find_things(){
3420     thing=$1
3421     pattern=$2
3422     file=$source_path/$3
3423     sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
3424 }
3425
3426 ENCODER_LIST=$(find_things  encoder  ENC      libavcodec/allcodecs.c)
3427 DECODER_LIST=$(find_things  decoder  DEC      libavcodec/allcodecs.c)
3428 HWACCEL_LIST=$(find_things  hwaccel  HWACCEL  libavcodec/allcodecs.c)
3429 PARSER_LIST=$(find_things   parser   PARSER   libavcodec/allcodecs.c)
3430 MUXER_LIST=$(find_things    muxer    _MUX     libavformat/allformats.c)
3431 DEMUXER_LIST=$(find_things  demuxer  DEMUX    libavformat/allformats.c)
3432 OUTDEV_LIST=$(find_things   outdev   OUTDEV   libavdevice/alldevices.c)
3433 INDEV_LIST=$(find_things    indev    _IN      libavdevice/alldevices.c)
3434 FILTER_LIST=$(find_things   filter   FILTER   libavfilter/allfilters.c)
3435
3436 find_things_extern(){
3437     thing=$1
3438     pattern=$2
3439     file=$source_path/$3
3440     sed -n "s/^[^#]*extern.*$pattern *ff_\([^ ]*\)_$thing;/\1_$thing/p" "$file"
3441 }
3442
3443 BSF_LIST=$(find_things_extern bsf AVBitStreamFilter libavcodec/bitstream_filters.c)
3444 PROTOCOL_LIST=$(find_things_extern protocol URLProtocol libavformat/protocols.c)
3445
3446 ALL_COMPONENTS="
3447     $BSF_LIST
3448     $DECODER_LIST
3449     $DEMUXER_LIST
3450     $ENCODER_LIST
3451     $FILTER_LIST
3452     $HWACCEL_LIST
3453     $INDEV_LIST
3454     $MUXER_LIST
3455     $OUTDEV_LIST
3456     $PARSER_LIST
3457     $PROTOCOL_LIST
3458 "
3459
3460 for n in $COMPONENT_LIST; do
3461     v=$(toupper ${n%s})_LIST
3462     eval enable \$$v
3463     eval ${n}_if_any="\$$v"
3464 done
3465
3466 enable $ARCH_EXT_LIST
3467
3468 die_unknown(){
3469     echo "Unknown option \"$1\"."
3470     echo "See $0 --help for available options."
3471     exit 1
3472 }
3473
3474 print_in_columns() {
3475     cols=$(expr $ncols / 24)
3476     cat | tr ' ' '\n' | sort | pr -r "-$cols" -w $ncols -t
3477 }
3478
3479 show_list() {
3480     suffix=_$1
3481     shift
3482     echo $* | sed s/$suffix//g | print_in_columns
3483     exit 0
3484 }
3485
3486 rand_list(){
3487     IFS=', '
3488     set -- $*
3489     unset IFS
3490     for thing; do
3491         comp=${thing%:*}
3492         prob=${thing#$comp}
3493         prob=${prob#:}
3494         is_in ${comp} $COMPONENT_LIST && eval comp=\$$(toupper ${comp%s})_LIST
3495         echo "prob ${prob:-0.5}"
3496         printf '%s\n' $comp
3497     done
3498 }
3499
3500 do_random(){
3501     action=$1
3502     shift
3503     random_seed=$(awk "BEGIN { srand($random_seed); print srand() }")
3504     $action $(rand_list "$@" | awk "BEGIN { srand($random_seed) } \$1 == \"prob\" { prob = \$2; next } rand() < prob { print }")
3505 }
3506
3507 for opt do
3508     optval="${opt#*=}"
3509     case "$opt" in
3510         --extra-ldflags=*)
3511             add_ldflags $optval
3512         ;;
3513         --extra-ldexeflags=*)
3514             add_ldexeflags $optval
3515         ;;
3516         --extra-ldlibflags=*)
3517             add_ldlibflags $optval
3518         ;;
3519         --extra-libs=*)
3520             add_extralibs $optval
3521         ;;
3522         --disable-devices)
3523             disable $INDEV_LIST $OUTDEV_LIST
3524         ;;
3525         --enable-debug=*)
3526             debuglevel="$optval"
3527         ;;
3528         --disable-programs)
3529             disable $PROGRAM_LIST
3530         ;;
3531         --disable-everything)
3532             map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
3533         ;;
3534         --disable-all)
3535             map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
3536             disable $LIBRARY_LIST $PROGRAM_LIST doc
3537             enable avutil
3538         ;;
3539         --enable-random|--disable-random)
3540             action=${opt%%-random}
3541             do_random ${action#--} $COMPONENT_LIST
3542         ;;
3543         --enable-random=*|--disable-random=*)
3544             action=${opt%%-random=*}
3545             do_random ${action#--} $optval
3546         ;;
3547         --enable-sdl)
3548             enable sdl2
3549         ;;
3550         --enable-*=*|--disable-*=*)
3551             eval $(echo "${opt%%=*}" | sed 's/--/action=/;s/-/ thing=/')
3552             is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt"
3553             eval list=\$$(toupper $thing)_LIST
3554             name=$(echo "${optval}" | sed "s/,/_${thing}|/g")_${thing}
3555             list=$(filter "$name" $list)
3556             [ "$list" = "" ] && warn "Option $opt did not match anything"
3557             $action $list
3558         ;;
3559         --enable-yasm|--disable-yasm)
3560             warn "The ${opt} option is only provided for compatibility and will be\n"\
3561                  "removed in the future. Use --enable-x86asm / --disable-x86asm instead."
3562             test $opt = --enable-yasm && x86asm=yes || x86asm=no
3563         ;;
3564         --yasmexe=*)
3565             warn "The --yasmexe option is only provided for compatibility and will be\n"\
3566                  "removed in the future. Use --x86asmexe instead."
3567             x86asmexe="$optval"
3568         ;;
3569         --enable-?*|--disable-?*)
3570             eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
3571             if is_in $option $COMPONENT_LIST; then
3572                 test $action = disable && action=unset
3573                 eval $action \$$(toupper ${option%s})_LIST
3574             elif is_in $option $CMDLINE_SELECT; then
3575                 $action $option
3576             else
3577                 die_unknown $opt
3578             fi
3579         ;;
3580         --list-*)
3581             NAME="${opt#--list-}"
3582             is_in $NAME $COMPONENT_LIST || die_unknown $opt
3583             NAME=${NAME%s}
3584             eval show_list $NAME \$$(toupper $NAME)_LIST
3585         ;;
3586         --help|-h) show_help
3587         ;;
3588         --quiet|-q) quiet=yes
3589         ;;
3590         --fatal-warnings) enable fatal_warnings
3591         ;;
3592         --libfuzzer=*)
3593             libfuzzer_path="$optval"
3594         ;;
3595         *)
3596             optname="${opt%%=*}"
3597             optname="${optname#--}"
3598             optname=$(echo "$optname" | sed 's/-/_/g')
3599             if is_in $optname $CMDLINE_SET; then
3600                 eval $optname='$optval'
3601             elif is_in $optname $CMDLINE_APPEND; then
3602                 append $optname "$optval"
3603             else
3604                 die_unknown $opt
3605             fi
3606         ;;
3607     esac
3608 done
3609
3610 for e in $env; do
3611     eval "export $e"
3612 done
3613
3614 if disabled autodetect; then
3615
3616     # Unless iconv is explicitely disabled by the user, we still want to probe
3617     # for the iconv from the libc.
3618     disabled iconv || enable libc_iconv
3619
3620     disable_weak $EXTERNAL_AUTODETECT_LIBRARY_LIST
3621     disable_weak $HWACCEL_AUTODETECT_LIBRARY_LIST
3622 fi
3623 # Mark specifically enabled, but normally autodetected libraries as requested.
3624 for lib in $AUTODETECT_LIBS; do
3625     enabled $lib && request $lib
3626 done
3627 #TODO: switch to $AUTODETECT_LIBS when $THREADS_LIST is supported the same way
3628 enable_weak $EXTERNAL_AUTODETECT_LIBRARY_LIST
3629 enable_weak $HWACCEL_AUTODETECT_LIBRARY_LIST
3630
3631 disabled logging && logfile=/dev/null
3632
3633 die_license_disabled() {
3634     enabled $1 || { enabled $v && die "$v is $1 and --enable-$1 is not specified."; }
3635 }
3636
3637 die_license_disabled_gpl() {
3638     enabled $1 || { enabled $v && die "$v is incompatible with the gpl and --enable-$1 is not specified."; }
3639 }
3640
3641 map "die_license_disabled gpl"      $EXTERNAL_LIBRARY_GPL_LIST $EXTERNAL_LIBRARY_GPLV3_LIST
3642 map "die_license_disabled version3" $EXTERNAL_LIBRARY_VERSION3_LIST $EXTERNAL_LIBRARY_GPLV3_LIST
3643
3644 enabled gpl && map "die_license_disabled_gpl nonfree" $EXTERNAL_LIBRARY_NONFREE_LIST
3645 map "die_license_disabled nonfree" $HWACCEL_LIBRARY_NONFREE_LIST
3646
3647 enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
3648
3649 # Disable all the library-specific components if the library itself
3650 # is disabled, see AVCODEC_LIST and following _LIST variables.
3651
3652 disable_components(){
3653     disabled ${1} && disable $(
3654         eval components="\$$(toupper ${1})_COMPONENTS"
3655         map 'eval echo \${$(toupper ${v%s})_LIST}' $components
3656     )
3657 }
3658
3659 map 'disable_components $v' $LIBRARY_LIST
3660
3661 echo "# $0 $FFMPEG_CONFIGURATION" > $logfile
3662 set >> $logfile
3663
3664 test -n "$valgrind" && toolchain="valgrind-memcheck"
3665
3666 enabled ossfuzz && {
3667     add_cflags  -fsanitize=address,undefined -fsanitize-coverage=trace-pc-guard,trace-cmp -fno-omit-frame-pointer
3668     add_ldflags -fsanitize=address,undefined -fsanitize-coverage=trace-pc-guard,trace-cmp
3669 }
3670
3671 case "$toolchain" in
3672     *-asan)
3673         cc_default="${toolchain%-asan}"
3674         add_cflags  -fsanitize=address
3675         add_ldflags -fsanitize=address
3676     ;;
3677     *-msan)
3678         cc_default="${toolchain%-msan}"
3679         add_cflags  -fsanitize=memory -fsanitize-memory-track-origins
3680         add_ldflags -fsanitize=memory
3681     ;;
3682     *-tsan)
3683         cc_default="${toolchain%-tsan}"
3684         add_cflags  -fsanitize=thread -fPIE
3685         add_ldflags -fsanitize=thread -pie
3686         case "$toolchain" in
3687             gcc-tsan)
3688                 add_cflags  -fPIC
3689                 add_ldflags -fPIC
3690                 ;;
3691         esac
3692     ;;
3693     *-usan)
3694         cc_default="${toolchain%-usan}"
3695         add_cflags  -fsanitize=undefined
3696         add_ldflags -fsanitize=undefined
3697     ;;
3698     valgrind-*)
3699         target_exec_default="valgrind"
3700         case "$toolchain" in
3701             valgrind-massif)
3702                 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"
3703                 ;;
3704             valgrind-memcheck)
3705                 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"
3706                 ;;
3707         esac
3708     ;;
3709     msvc)
3710         # Check whether the current MSVC version needs the C99 converter.
3711         # From MSVC 2013 (compiler major version 18) onwards, it does actually
3712         # support enough of C99 to build ffmpeg. Default to the new
3713         # behaviour if the regexp was unable to match anything, since this
3714         # successfully parses the version number of existing supported
3715         # versions that require the converter (MSVC 2010 and 2012).
3716         cl_major_ver=$(cl 2>&1 | sed -n 's/.*Version \([[:digit:]]\{1,\}\)\..*/\1/p')
3717         if [ -z "$cl_major_ver" ] || [ $cl_major_ver -ge 18 ]; then
3718             cc_default="cl"
3719             cxx_default="cl"
3720         else
3721             cc_default="c99wrap cl"
3722             cxx_default="c99wrap cl"
3723         fi
3724         ld_default="$source_path/compat/windows/mslink"
3725         nm_default="dumpbin -symbols"
3726         ar_default="lib"
3727         case "$arch" in
3728         arm*)
3729             as_default="armasm"
3730             ;;
3731         esac
3732         target_os_default="win32"
3733         # Use a relative path for TMPDIR. This makes sure all the
3734         # ffconf temp files are written with a relative path, avoiding
3735         # issues with msys/win32 path conversion for MSVC parameters
3736         # such as -Fo<file> or -out:<file>.
3737         TMPDIR=.
3738     ;;
3739     icl)
3740         cc_default="icl"
3741         ld_default="xilink"
3742         nm_default="dumpbin -symbols"
3743         ar_default="xilib"
3744         target_os_default="win32"
3745         TMPDIR=.
3746     ;;
3747     gcov)
3748         add_cflags  -fprofile-arcs -ftest-coverage
3749         add_ldflags -fprofile-arcs -ftest-coverage
3750     ;;
3751     llvm-cov)
3752         add_cflags -fprofile-arcs -ftest-coverage
3753         add_ldflags --coverage
3754     ;;
3755     hardened)
3756         add_cppflags -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2
3757         add_cflags   -fno-strict-overflow -fstack-protector-all
3758         add_ldflags  -Wl,-z,relro -Wl,-z,now
3759         add_cflags   -fPIE
3760         add_ldexeflags -fPIE -pie
3761     ;;
3762     ?*)
3763         die "Unknown toolchain $toolchain"
3764     ;;
3765 esac
3766
3767 test -n "$cross_prefix" && enable cross_compile
3768
3769 if enabled cross_compile; then
3770     test -n "$arch" && test -n "$target_os" ||
3771         die "Must specify target arch (--arch) and OS (--target-os) when cross-compiling"
3772 fi
3773
3774 ar_default="${cross_prefix}${ar_default}"
3775 cc_default="${cross_prefix}${cc_default}"
3776 cxx_default="${cross_prefix}${cxx_default}"
3777 nm_default="${cross_prefix}${nm_default}"
3778 pkg_config_default="${cross_prefix}${pkg_config_default}"
3779 if ${cross_prefix}${ranlib_default} 2>&1 | grep -q "\-D "; then
3780     ranlib_default="${cross_prefix}${ranlib_default} -D"
3781 else
3782     ranlib_default="${cross_prefix}${ranlib_default}"
3783 fi
3784 strip_default="${cross_prefix}${strip_default}"
3785 windres_default="${cross_prefix}${windres_default}"
3786
3787 sysinclude_default="${sysroot}/usr/include"
3788
3789 set_default arch cc cxx doxygen pkg_config ranlib strip sysinclude \
3790     target_exec target_os x86asmexe nvcc
3791 enabled cross_compile || host_cc_default=$cc
3792 set_default host_cc
3793
3794 pkg_config_fail_message=""
3795 if ! $pkg_config --version >/dev/null 2>&1; then
3796     warn "$pkg_config not found, library detection may fail."
3797     pkg_config=false
3798 elif is_in -static $cc $LDFLAGS && ! is_in --static $pkg_config $pkg_config_flags; then
3799     pkg_config_fail_message="
3800 Note: When building a static binary, add --pkg-config-flags=\"--static\"."
3801 fi
3802
3803 if test $doxygen != $doxygen_default && \
3804   ! $doxygen --version >/dev/null 2>&1; then
3805     warn "Specified doxygen \"$doxygen\" not found, API documentation will fail to build."
3806 fi
3807
3808 exesuf() {
3809     case $1 in
3810         mingw32*|mingw64*|win32|win64|cygwin*|*-dos|freedos|opendos|os/2*|symbian) echo .exe ;;
3811     esac
3812 }
3813
3814 EXESUF=$(exesuf $target_os)
3815 HOSTEXESUF=$(exesuf $host_os)
3816
3817 # set temporary file name
3818 : ${TMPDIR:=$TEMPDIR}
3819 : ${TMPDIR:=$TMP}
3820 : ${TMPDIR:=/tmp}
3821
3822 if [ -n "$tempprefix" ] ; then
3823     mktemp(){
3824         tmpname="$tempprefix.${HOSTNAME}.${UID}"
3825         echo "$tmpname"
3826         mkdir "$tmpname"
3827     }
3828 elif ! check_cmd mktemp -u XXXXXX; then
3829     # simple replacement for missing mktemp
3830     # NOT SAFE FOR GENERAL USE
3831     mktemp(){
3832         tmpname="${2%%XXX*}.${HOSTNAME}.${UID}.$$"
3833         echo "$tmpname"
3834         mkdir "$tmpname"
3835     }
3836 fi
3837
3838 FFTMPDIR=$(mktemp -d "${TMPDIR}/ffconf.XXXXXXXX" 2> /dev/null) ||
3839     die "Unable to create temporary directory in $TMPDIR."
3840
3841 tmpfile(){
3842     tmp="${FFTMPDIR}/test"$2
3843     (set -C; exec > $tmp) 2> /dev/null ||
3844         die "Unable to create temporary file in $FFTMPDIR."
3845     eval $1=$tmp
3846 }
3847
3848 trap 'rm -rf -- "$FFTMPDIR"' EXIT
3849 trap 'exit 2' INT
3850
3851 tmpfile TMPASM .asm
3852 tmpfile TMPC   .c
3853 tmpfile TMPCPP .cpp
3854 tmpfile TMPE   $EXESUF
3855 tmpfile TMPH   .h
3856 tmpfile TMPM   .m
3857 tmpfile TMPO   .o
3858 tmpfile TMPS   .S
3859 tmpfile TMPSH  .sh
3860 tmpfile TMPV   .ver
3861
3862 unset -f mktemp
3863
3864 chmod +x $TMPE
3865
3866 # make sure we can execute files in $TMPDIR
3867 cat > $TMPSH 2>> $logfile <<EOF
3868 #! /bin/sh
3869 EOF
3870 chmod +x $TMPSH >> $logfile 2>&1
3871 if ! $TMPSH >> $logfile 2>&1; then
3872     cat <<EOF
3873 Unable to create and execute files in $TMPDIR.  Set the TMPDIR environment
3874 variable to another directory and make sure that it is not mounted noexec.
3875 EOF
3876     die "Sanity test failed."
3877 fi
3878
3879 armasm_flags(){
3880     for flag; do
3881         case $flag in
3882             # Filter out MSVC cl.exe options from cflags that shouldn't
3883             # be passed to gas-preprocessor
3884             -M[TD]*)                                            ;;
3885             *)                  echo $flag                      ;;
3886         esac
3887    done
3888 }
3889
3890 ccc_flags(){
3891     for flag; do
3892         case $flag in
3893             -std=c99)           echo -c99                       ;;
3894             -mcpu=*)            echo -arch ${flag#*=}           ;;
3895             -mieee)             echo -ieee                      ;;
3896             -O*|-fast)          echo $flag                      ;;
3897             -fno-math-errno)    echo -assume nomath_errno       ;;
3898             -g)                 echo -g3                        ;;
3899             -Wall)              echo -msg_enable level2         ;;
3900             -Wno-pointer-sign)  echo -msg_disable ptrmismatch1  ;;
3901             -Wl,*)              echo $flag                      ;;
3902             -f*|-W*)                                            ;;
3903             *)                  echo $flag                      ;;
3904         esac
3905    done
3906 }
3907
3908 cparser_flags(){
3909     for flag; do
3910         case $flag in
3911             -Wno-switch)             echo -Wno-switch-enum ;;
3912             -Wno-format-zero-length) ;;
3913             -Wdisabled-optimization) ;;
3914             -Wno-pointer-sign)       echo -Wno-other ;;
3915             *)                       echo $flag ;;
3916         esac
3917     done
3918 }
3919
3920 msvc_common_flags(){
3921     for flag; do
3922         case $flag in
3923             # In addition to specifying certain flags under the compiler
3924             # specific filters, they must be specified here as well or else the
3925             # generic catch all at the bottom will print the original flag.
3926             -Wall)                ;;
3927             -Wextra)              ;;
3928             -std=c99)             ;;
3929             # Common flags
3930             -fomit-frame-pointer) ;;
3931             -g)                   echo -Z7 ;;
3932             -fno-math-errno)      ;;
3933             -fno-common)          ;;
3934             -fno-signed-zeros)    ;;
3935             -fPIC)                ;;
3936             -mthumb)              ;;
3937             -march=*)             ;;
3938             -lz)                  echo zlib.lib ;;
3939             -lx264)               echo libx264.lib ;;
3940             -lstdc++)             ;;
3941             -l*)                  echo ${flag#-l}.lib ;;
3942             -LARGEADDRESSAWARE)   echo $flag ;;
3943             -L*)                  echo -libpath:${flag#-L} ;;
3944             *)                    echo $flag ;;
3945         esac
3946     done
3947 }
3948
3949 msvc_flags(){
3950     msvc_common_flags "$@"
3951     for flag; do
3952         case $flag in
3953             -Wall)                echo -W3 -wd4018 -wd4146 -wd4244 -wd4305     \
3954                                        -wd4554 ;;
3955             -Wextra)              echo -W4 -wd4244 -wd4127 -wd4018 -wd4389     \
3956                                        -wd4146 -wd4057 -wd4204 -wd4706 -wd4305 \
3957                                        -wd4152 -wd4324 -we4013 -wd4100 -wd4214 \
3958                                        -wd4307 \
3959                                        -wd4273 -wd4554 -wd4701 -wd4703 ;;
3960         esac
3961     done
3962 }
3963
3964 icl_flags(){
3965     msvc_common_flags "$@"
3966     for flag; do
3967         case $flag in
3968             # Despite what Intel's documentation says -Wall, which is supported
3969             # on Windows, does enable remarks so disable them here.
3970             -Wall)                echo $flag -Qdiag-disable:remark ;;
3971             -std=c99)             echo -Qstd=c99 ;;
3972             -flto)                echo -ipo ;;
3973         esac
3974     done
3975 }
3976
3977 icc_flags(){
3978     for flag; do
3979         case $flag in
3980             -flto)                echo -ipo ;;
3981             *)                    echo $flag ;;
3982         esac
3983     done
3984 }
3985
3986 pgi_flags(){
3987     for flag; do
3988         case $flag in
3989             -flto)                echo -Mipa=fast,libopt,libinline,vestigial ;;
3990             -fomit-frame-pointer) echo -Mnoframe ;;
3991             -g)                   echo -gopt ;;
3992             *)                    echo $flag ;;
3993         esac
3994     done
3995 }
3996
3997 suncc_flags(){
3998     for flag; do
3999         case $flag in
4000             -march=*|-mcpu=*)
4001                 case "${flag#*=}" in
4002                     native)                   echo -xtarget=native       ;;
4003                     v9|niagara)               echo -xarch=sparc          ;;
4004                     ultrasparc)               echo -xarch=sparcvis       ;;
4005                     ultrasparc3|niagara2)     echo -xarch=sparcvis2      ;;
4006                     i586|pentium)             echo -xchip=pentium        ;;
4007                     i686|pentiumpro|pentium2) echo -xtarget=pentium_pro  ;;
4008                     pentium3*|c3-2)           echo -xtarget=pentium3     ;;
4009                     pentium-m)          echo -xarch=sse2 -xchip=pentium3 ;;
4010                     pentium4*)          echo -xtarget=pentium4           ;;
4011                     prescott|nocona)    echo -xarch=sse3 -xchip=pentium4 ;;
4012                     *-sse3)             echo -xarch=sse3                 ;;
4013                     core2)              echo -xarch=ssse3 -xchip=core2   ;;
4014                     bonnell)                   echo -xarch=ssse3         ;;
4015                     corei7|nehalem)            echo -xtarget=nehalem     ;;
4016                     westmere)                  echo -xtarget=westmere    ;;
4017                     silvermont)                echo -xarch=sse4_2        ;;
4018                     corei7-avx|sandybridge)    echo -xtarget=sandybridge ;;
4019                     core-avx*|ivybridge|haswell|broadwell|skylake*|knl)
4020                                                echo -xarch=avx           ;;
4021                     amdfam10|barcelona)        echo -xtarget=barcelona   ;;
4022                     btver1)                    echo -xarch=amdsse4a      ;;
4023                     btver2|bdver*|znver*)      echo -xarch=avx           ;;
4024                     athlon-4|athlon-[mx]p)     echo -xarch=ssea          ;;
4025                     k8|opteron|athlon64|athlon-fx)
4026                                                echo -xarch=sse2a         ;;
4027                     athlon*)                   echo -xarch=pentium_proa  ;;
4028                 esac
4029                 ;;
4030             -std=c99)             echo -xc99              ;;
4031             -fomit-frame-pointer) echo -xregs=frameptr    ;;
4032             -fPIC)                echo -KPIC -xcode=pic32 ;;
4033             -W*,*)                echo $flag              ;;
4034             -f*-*|-W*|-mimpure-text)                      ;;
4035             -shared)              echo -G                 ;;
4036             *)                    echo $flag              ;;
4037         esac
4038     done
4039 }
4040
4041 tms470_flags(){
4042     for flag; do
4043         case $flag in
4044             -march=*|-mcpu=*)
4045                 case "${flag#*=}" in
4046                     armv7-a|cortex-a*)      echo -mv=7a8 ;;
4047                     armv7-r|cortex-r*)      echo -mv=7r4 ;;
4048                     armv7-m|cortex-m*)      echo -mv=7m3 ;;
4049                     armv6*|arm11*)          echo -mv=6   ;;
4050                     armv5*e|arm[79]*e*|arm9[24]6*|arm96*|arm102[26])
4051                                             echo -mv=5e  ;;
4052                     armv4*|arm7*|arm9[24]*) echo -mv=4   ;;
4053                 esac
4054                 ;;
4055             -mfpu=neon)     echo --float_support=vfpv3 --neon ;;
4056             -mfpu=vfp)      echo --float_support=vfpv2        ;;
4057             -mfpu=vfpv3)    echo --float_support=vfpv3        ;;
4058             -mfpu=vfpv3-d16) echo --float_support=vfpv3d16    ;;
4059             -msoft-float)   echo --float_support=vfplib       ;;
4060             -O[0-3]|-mf=*)  echo $flag                        ;;
4061             -g)             echo -g -mn                       ;;
4062             -pds=*)         echo $flag                        ;;
4063             -D*|-I*)        echo $flag                        ;;
4064             --gcc|--abi=*)  echo $flag                        ;;
4065             -me)            echo $flag                        ;;
4066         esac
4067     done
4068 }
4069
4070 probe_cc(){
4071     pfx=$1
4072     _cc=$2
4073     first=$3
4074
4075     unset _type _ident _cc_c _cc_e _cc_o _flags _cflags
4076     unset _ld_o _ldflags _ld_lib _ld_path
4077     unset _depflags _DEPCMD _DEPFLAGS
4078     _flags_filter=echo
4079
4080     if $_cc --version 2>&1 | grep -q '^GNU assembler'; then
4081         true # no-op to avoid reading stdin in following checks
4082     elif $_cc -v 2>&1 | grep -q '^gcc.*LLVM'; then
4083         _type=llvm_gcc
4084         gcc_extra_ver=$(expr "$($_cc --version 2>/dev/null | head -n1)" : '.*\((.*)\)')
4085         _ident="llvm-gcc $($_cc -dumpversion 2>/dev/null) $gcc_extra_ver"
4086         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
4087         _cflags_speed='-O3'
4088         _cflags_size='-Os'
4089     elif $_cc -v 2>&1 | grep -qi ^gcc; then
4090         _type=gcc
4091         gcc_version=$($_cc --version | head -n1)
4092         gcc_basever=$($_cc -dumpversion)
4093         gcc_pkg_ver=$(expr "$gcc_version" : '[^ ]* \(([^)]*)\)')
4094         gcc_ext_ver=$(expr "$gcc_version" : ".*$gcc_pkg_ver $gcc_basever \\(.*\\)")
4095         _ident=$(cleanws "gcc $gcc_basever $gcc_pkg_ver $gcc_ext_ver")
4096         case $gcc_basever in
4097             2) ;;
4098             2.*) ;;
4099             *) _depflags='-MMD -MF $(@:.o=.d) -MT $@' ;;
4100         esac
4101         if [ "$first" = true ]; then
4102             case $gcc_basever in
4103                 4.2*)
4104                 warn "gcc 4.2 is outdated and may miscompile FFmpeg. Please use a newer compiler." ;;
4105             esac
4106         fi
4107         _cflags_speed='-O3'
4108         _cflags_size='-Os'
4109     elif $_cc --version 2>/dev/null | grep -q ^icc; then
4110         _type=icc
4111         _ident=$($_cc --version | head -n1)
4112         _depflags='-MMD'
4113         _cflags_speed='-O3'
4114         _cflags_size='-Os'
4115         _cflags_noopt='-O1'
4116         _flags_filter=icc_flags
4117     elif $_cc -v 2>&1 | grep -q xlc; then
4118         _type=xlc
4119         _ident=$($_cc -qversion 2>/dev/null | head -n1)
4120         _cflags_speed='-O5'
4121         _cflags_size='-O5 -qcompact'
4122     elif $_cc -V 2>/dev/null | grep -q Compaq; then
4123         _type=ccc
4124         _ident=$($_cc -V | head -n1 | cut -d' ' -f1-3)
4125         _DEPFLAGS='-M'
4126         _cflags_speed='-fast'
4127         _cflags_size='-O1'
4128         _flags_filter=ccc_flags
4129     elif $_cc --vsn 2>/dev/null | grep -Eq "ARM (C/C\+\+ )?Compiler"; then
4130         test -d "$sysroot" || die "No valid sysroot specified."
4131         _type=armcc
4132         _ident=$($_cc --vsn | grep -i build | head -n1 | sed 's/.*: //')
4133         armcc_conf="$PWD/armcc.conf"
4134         $_cc --arm_linux_configure                 \
4135              --arm_linux_config_file="$armcc_conf" \
4136              --configure_sysroot="$sysroot"        \
4137              --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
4138              die "Error creating armcc configuration file."
4139         $_cc --vsn | grep -q RVCT && armcc_opt=rvct || armcc_opt=armcc
4140         _flags="--arm_linux_config_file=$armcc_conf --translate_gcc"
4141         as_default="${cross_prefix}gcc"
4142         _depflags='-MMD'
4143         _cflags_speed='-O3'
4144         _cflags_size='-Os'
4145     elif $_cc -version 2>/dev/null | grep -Eq 'TMS470|TI ARM'; then
4146         _type=tms470
4147         _ident=$($_cc -version | head -n1 | tr -s ' ')
4148         _flags='--gcc --abi=eabi -me'
4149         _cc_e='-ppl -fe=$@'
4150         _cc_o='-fe=$@'
4151         _depflags='-ppa -ppd=$(@:.o=.d)'
4152         _cflags_speed='-O3 -mf=5'
4153         _cflags_size='-O3 -mf=2'
4154         _flags_filter=tms470_flags
4155     elif $_cc -v 2>&1 | grep -q clang; then
4156         _type=clang
4157         _ident=$($_cc --version 2>/dev/null | head -n1)
4158         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
4159         _cflags_speed='-O3'
4160         _cflags_size='-Oz'
4161     elif $_cc -V 2>&1 | grep -q Sun; then
4162         _type=suncc
4163         _ident=$($_cc -V 2>&1 | head -n1 | cut -d' ' -f 2-)
4164         _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "1s,^.*: ,$@: ," -e "\$$!s,\$$, \\\," -e "1!s,^.*: , ," > $(@:.o=.d)'
4165         _DEPFLAGS='-xM1 -xc99'
4166         _ldflags='-std=c99'
4167         _cflags_speed='-O5'
4168         _cflags_size='-O5 -xspace'
4169         _flags_filter=suncc_flags
4170     elif $_cc -v 2>&1 | grep -q 'PathScale\|Path64'; then
4171         _type=pathscale
4172         _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
4173         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
4174         _cflags_speed='-O2'
4175         _cflags_size='-Os'
4176         _flags_filter='filter_out -Wdisabled-optimization'
4177     elif $_cc -v 2>&1 | grep -q Open64; then
4178         _type=open64
4179         _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
4180         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
4181         _cflags_speed='-O2'
4182         _cflags_size='-Os'
4183         _flags_filter='filter_out -Wdisabled-optimization|-Wtype-limits|-fno-signed-zeros'
4184     elif $_cc -V 2>&1 | grep -q Portland; then
4185         _type=pgi
4186         _ident="PGI $($_cc -V 2>&1 | awk '/^pgcc/ { print $2; exit }')"
4187         opt_common='-alias=ansi -Mdse -Mlre -Mpre'
4188         _cflags_speed="-O3 -Mautoinline -Munroll=c:4 $opt_common"
4189         _cflags_size="-O2 -Munroll=c:1 $opt_common"
4190         _cflags_noopt="-O"
4191         _flags_filter=pgi_flags
4192     elif $_cc 2>&1 | grep -q 'Microsoft.*ARM.*Assembler'; then
4193         _type=armasm
4194         _ident=$($_cc | head -n1)
4195         # 4509: "This form of conditional instruction is deprecated"
4196         _flags="-nologo -ignore 4509"
4197         _flags_filter=armasm_flags
4198     elif $_cc 2>&1 | grep -q Intel; then
4199         _type=icl
4200         _ident=$($_cc 2>&1 | head -n1)
4201         _depflags='-QMMD -QMF$(@:.o=.d) -QMT$@'
4202         # Not only is O3 broken on 13.x+ but it is slower on all previous
4203         # versions (tested) as well.
4204         _cflags_speed="-O2"
4205         _cflags_size="-O1 -Oi" # -O1 without -Oi miscompiles stuff
4206         if $_cc 2>&1 | grep -q Linker; then
4207             _ld_o='-out:$@'
4208         else
4209             _ld_o='-Fe$@'
4210         fi
4211         _cc_o='-Fo$@'
4212         _cc_e='-P'
4213         _flags_filter=icl_flags
4214         _ld_lib='lib%.a'
4215         _ld_path='-libpath:'
4216         # -Qdiag-error to make icl error when seeing certain unknown arguments
4217         _flags='-nologo -Qdiag-error:4044,10157'
4218         # -Qvec- -Qsimd- to prevent miscompilation, -GS, fp:precise for consistency
4219         # with MSVC which enables it by default.
4220         _cflags='-Qms0 -Qvec- -Qsimd- -GS -fp:precise'
4221         disable stripping
4222     elif $_cc -? 2>/dev/null | grep -q 'LLVM.*Linker'; then
4223         # lld can emulate multiple different linkers; in ms link.exe mode,
4224         # the -? parameter gives the help output which contains an identifyable
4225         # string, while it gives an error in other modes.
4226         _type=lld-link
4227         # The link.exe mode doesn't have a switch for getting the version,
4228         # but we can force it back to gnu mode and get the version from there.
4229         _ident=$($_cc -flavor gnu --version 2>/dev/null)
4230         _ld_o='-out:$@'
4231         _flags_filter=msvc_flags
4232         _ld_lib='lib%.a'
4233         _ld_path='-libpath:'
4234     elif $_cc -nologo- 2>&1 | grep -q Microsoft; then
4235         _type=msvc
4236         _ident=$($_cc 2>&1 | head -n1)
4237         _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< 2>&1 | awk '\''/including/ { sub(/^.*file: */, ""); gsub(/\\/, "/"); if (!match($$0, / /)) print "$@:", $$0 }'\'' > $(@:.o=.d)'
4238         _DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -showIncludes -Zs'
4239         _cflags_speed="-O2"
4240         _cflags_size="-O1"
4241         _cflags_noopt="-O1"
4242         if $_cc -nologo- 2>&1 | grep -q Linker; then
4243             _ld_o='-out:$@'
4244         else
4245             _ld_o='-Fe$@'
4246         fi
4247         _cc_o='-Fo$@'
4248         _cc_e='-P -Fi$@'
4249         _flags_filter=msvc_flags
4250         _ld_lib='lib%.a'
4251         _ld_path='-libpath:'
4252         _flags='-nologo'
4253         disable stripping
4254     elif $_cc --version 2>/dev/null | grep -q ^cparser; then
4255         _type=cparser
4256         _ident=$($_cc --version | head -n1)
4257         _depflags='-MMD'
4258         _cflags_speed='-O4'
4259         _cflags_size='-O2'
4260         _flags_filter=cparser_flags
4261     fi
4262
4263     eval ${pfx}_type=\$_type
4264     eval ${pfx}_ident=\$_ident
4265 }
4266
4267 set_ccvars(){
4268     eval ${1}_C=\${_cc_c-\${${1}_C}}
4269     eval ${1}_E=\${_cc_e-\${${1}_E}}
4270     eval ${1}_O=\${_cc_o-\${${1}_O}}
4271
4272     if [ -n "$_depflags" ]; then
4273         eval ${1}_DEPFLAGS=\$_depflags
4274     else
4275         eval ${1}DEP=\${_DEPCMD:-\$DEPCMD}
4276         eval ${1}DEP_FLAGS=\${_DEPFLAGS:-\$DEPFLAGS}
4277         eval DEP${1}FLAGS=\$_flags
4278     fi
4279 }
4280
4281 probe_cc cc "$cc" "true"
4282 cflags_filter=$_flags_filter
4283 cflags_speed=$_cflags_speed
4284 cflags_size=$_cflags_size
4285 cflags_noopt=$_cflags_noopt
4286 add_cflags $_flags $_cflags
4287 cc_ldflags=$_ldflags
4288 set_ccvars CC
4289 set_ccvars CXX
4290
4291 probe_cc hostcc "$host_cc"
4292 host_cflags_filter=$_flags_filter
4293 host_cflags_speed=$_cflags_speed
4294 add_host_cflags  $_flags $_cflags
4295 set_ccvars HOSTCC
4296
4297 test -n "$cc_type" && enable $cc_type ||
4298     warn "Unknown C compiler $cc, unable to select optimal CFLAGS"
4299
4300 : ${as_default:=$cc}
4301 : ${objcc_default:=$cc}
4302 : ${dep_cc_default:=$cc}
4303 : ${ld_default:=$cc}
4304 : ${host_ld_default:=$host_cc}
4305 set_default ar as objcc dep_cc ld ln_s host_ld windres
4306
4307 probe_cc as "$as"
4308 asflags_filter=$_flags_filter
4309 add_asflags $_flags $_cflags
4310 set_ccvars AS
4311
4312 probe_cc objcc "$objcc"
4313 objcflags_filter=$_flags_filter
4314 add_objcflags $_flags $_cflags
4315 set_ccvars OBJC
4316
4317 probe_cc ld "$ld"
4318 ldflags_filter=$_flags_filter
4319 add_ldflags $_flags $_ldflags
4320 test "$cc_type" != "$ld_type" && add_ldflags $cc_ldflags
4321 LD_O=${_ld_o-$LD_O}
4322 LD_LIB=${_ld_lib-$LD_LIB}
4323 LD_PATH=${_ld_path-$LD_PATH}
4324
4325 probe_cc hostld "$host_ld"
4326 host_ldflags_filter=$_flags_filter
4327 add_host_ldflags $_flags $_ldflags
4328 HOSTLD_O=${_ld_o-$HOSTLD_O}
4329
4330 if [ -z "$CC_DEPFLAGS" ] && [ "$dep_cc" != "$cc" ]; then
4331     probe_cc depcc "$dep_cc"
4332     CCDEP=${_DEPCMD:-$DEPCMD}
4333     CCDEP_FLAGS=${_DEPFLAGS:=$DEPFLAGS}
4334     DEPCCFLAGS=$_flags
4335 fi
4336
4337 if $ar 2>&1 | grep -q Microsoft; then
4338     arflags="-nologo"
4339     ar_o='-out:$@'
4340 elif $ar 2>&1 | grep -q 'Texas Instruments'; then
4341     arflags="rq"
4342     ar_o='$@'
4343 elif $ar 2>&1 | grep -q 'Usage: ar.*-X.*any'; then
4344     arflags='-Xany -r -c'
4345     ar_o='$@'
4346 elif $ar 2>&1 | grep -q "\[D\] "; then
4347     arflags="rcD"
4348     ar_o='$@'
4349 else
4350     arflags="rc"
4351     ar_o='$@'
4352 fi
4353
4354 add_cflags $extra_cflags
4355 add_cxxflags $extra_cxxflags
4356 add_objcflags $extra_objcflags
4357 add_asflags $extra_cflags
4358
4359 if test -n "$sysroot"; then
4360     case "$cc_type" in
4361         gcc|llvm_gcc|clang)
4362             add_cppflags --sysroot="$sysroot"
4363             add_ldflags --sysroot="$sysroot"
4364 # On Darwin --sysroot may be ignored, -isysroot always affects headers and linking
4365             add_cppflags -isysroot "$sysroot"
4366             add_ldflags -isysroot "$sysroot"
4367         ;;
4368         tms470)
4369             add_cppflags -I"$sysinclude"
4370             add_ldflags  --sysroot="$sysroot"
4371         ;;
4372     esac
4373 fi
4374
4375 if test "$cpu" = host; then
4376     enabled cross_compile &&
4377         die "--cpu=host makes no sense when cross-compiling."
4378
4379     case "$cc_type" in
4380         gcc|llvm_gcc)
4381             check_native(){
4382                 $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
4383                 sed -n "/cc1.*$1=/{
4384                             s/.*$1=\\([^ ]*\\).*/\\1/
4385                             p
4386                             q
4387                         }" $TMPE
4388             }
4389             cpu=$(check_native -march || check_native -mcpu)
4390         ;;
4391         clang)
4392             check_native(){
4393                 $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
4394                 sed -n "/cc1.*-target-cpu /{
4395                             s/.*-target-cpu \\([^ ]*\\).*/\\1/
4396                             p
4397                             q
4398                         }" $TMPE
4399             }
4400             cpu=$(check_native -march)
4401         ;;
4402     esac
4403
4404     test "${cpu:-host}" = host &&
4405         die "--cpu=host not supported with compiler $cc"
4406 fi
4407
4408 # Deal with common $arch aliases
4409 case "$arch" in
4410     aarch64|arm64)
4411         arch="aarch64"
4412     ;;
4413     arm*|iPad*|iPhone*)
4414         arch="arm"
4415     ;;
4416     mips*|IP*)
4417         case "$arch" in
4418         *el)
4419             add_cppflags -EL
4420             add_ldflags -EL
4421         ;;
4422         *eb)
4423             add_cppflags -EB
4424             add_ldflags -EB
4425         ;;
4426         esac
4427         arch="mips"
4428     ;;
4429     parisc*|hppa*)
4430         arch="parisc"
4431     ;;
4432     "Power Macintosh"|ppc*|powerpc*)
4433         arch="ppc"
4434     ;;
4435     s390|s390x)
4436         arch="s390"
4437     ;;
4438     sh4|sh)
4439         arch="sh4"
4440     ;;
4441     sun4*|sparc*)
4442         arch="sparc"
4443     ;;
4444     tilegx|tile-gx)
4445         arch="tilegx"
4446     ;;
4447     i[3-6]86*|i86pc|BePC|x86pc|x86_64|x86_32|amd64)
4448         arch="x86"
4449     ;;
4450 esac
4451
4452 is_in $arch $ARCH_LIST || warn "unknown architecture $arch"
4453 enable $arch
4454
4455 # Add processor-specific flags
4456 if enabled aarch64; then
4457
4458     case $cpu in
4459         armv*)
4460             cpuflags="-march=$cpu"
4461         ;;
4462         *)
4463             cpuflags="-mcpu=$cpu"
4464         ;;
4465     esac
4466
4467 elif enabled alpha; then
4468
4469     cpuflags="-mcpu=$cpu"
4470
4471 elif enabled arm; then
4472
4473     check_arm_arch() {
4474         check_cpp_condition stddef.h \
4475             "defined __ARM_ARCH_${1}__ || defined __TARGET_ARCH_${2:-$1}" \
4476             $cpuflags
4477     }
4478
4479     probe_arm_arch() {
4480         if   check_arm_arch 4;        then echo armv4
4481         elif check_arm_arch 4T;       then echo armv4t
4482         elif check_arm_arch 5;        then echo armv5
4483         elif check_arm_arch 5E;       then echo armv5e
4484         elif check_arm_arch 5T;       then echo armv5t
4485         elif check_arm_arch 5TE;      then echo armv5te
4486         elif check_arm_arch 5TEJ;     then echo armv5te
4487         elif check_arm_arch 6;        then echo armv6
4488         elif check_arm_arch 6J;       then echo armv6j
4489         elif check_arm_arch 6K;       then echo armv6k
4490         elif check_arm_arch 6Z;       then echo armv6z
4491         elif check_arm_arch 6ZK;      then echo armv6zk
4492         elif check_arm_arch 6T2;      then echo armv6t2
4493         elif check_arm_arch 7;        then echo armv7
4494         elif check_arm_arch 7A  7_A;  then echo armv7-a
4495         elif check_arm_arch 7S;       then echo armv7-a
4496         elif check_arm_arch 7R  7_R;  then echo armv7-r
4497         elif check_arm_arch 7M  7_M;  then echo armv7-m
4498         elif check_arm_arch 7EM 7E_M; then echo armv7-m
4499         elif check_arm_arch 8A  8_A;  then echo armv8-a
4500         fi
4501     }
4502
4503     [ "$cpu" = generic ] && cpu=$(probe_arm_arch)
4504
4505     case $cpu in
4506         armv*)
4507             cpuflags="-march=$cpu"
4508             subarch=$(echo $cpu | sed 's/[^a-z0-9]//g')
4509         ;;
4510         *)
4511             cpuflags="-mcpu=$cpu"
4512             case $cpu in
4513                 cortex-a*)                               subarch=armv7a  ;;
4514                 cortex-r*)                               subarch=armv7r  ;;
4515                 cortex-m*)                 enable thumb; subarch=armv7m  ;;
4516                 arm11*)                                  subarch=armv6   ;;
4517                 arm[79]*e*|arm9[24]6*|arm96*|arm102[26]) subarch=armv5te ;;
4518                 armv4*|arm7*|arm9[24]*)                  subarch=armv4   ;;
4519                 *)                             subarch=$(probe_arm_arch) ;;
4520             esac
4521         ;;
4522     esac
4523
4524     case "$subarch" in
4525         armv5t*)    enable fast_clz                ;;
4526         armv[6-8]*)
4527             enable fast_clz
4528             disabled fast_unaligned || enable fast_unaligned
4529             ;;
4530     esac
4531
4532 elif enabled avr32; then
4533
4534     case $cpu in
4535         ap7[02]0[0-2])
4536             subarch="avr32_ap"
4537             cpuflags="-mpart=$cpu"
4538         ;;
4539         ap)
4540             subarch="avr32_ap"
4541             cpuflags="-march=$cpu"
4542         ;;
4543         uc3[ab]*)
4544             subarch="avr32_uc"
4545             cpuflags="-mcpu=$cpu"
4546         ;;
4547         uc)
4548             subarch="avr32_uc"
4549             cpuflags="-march=$cpu"
4550         ;;
4551     esac
4552
4553 elif enabled bfin; then
4554
4555     cpuflags="-mcpu=$cpu"
4556
4557 elif enabled mips; then
4558
4559     cpuflags="-march=$cpu"
4560
4561     if [ "$cpu" != "generic" ]; then
4562         disable mips32r2
4563         disable mips32r5
4564         disable mips64r2
4565         disable mips32r6
4566         disable mips64r6
4567         disable loongson2
4568         disable loongson3
4569
4570         case $cpu in
4571             24kc|24kf*|24kec|34kc|1004kc|24kef*|34kf*|1004kf*|74kc|74kf)
4572                 enable mips32r2
4573                 disable msa
4574             ;;
4575             p5600|i6400|p6600)
4576                 disable mipsdsp
4577                 disable mipsdspr2
4578             ;;
4579             loongson*)
4580                 enable loongson2
4581                 enable loongson3
4582                 enable local_aligned_8 local_aligned_16 local_aligned_32
4583                 enable simd_align_16
4584                 enable fast_64bit
4585                 enable fast_clz
4586                 enable fast_cmov
4587                 enable fast_unaligned
4588                 disable aligned_stack
4589                 disable mipsfpu
4590                 disable mipsdsp
4591                 disable mipsdspr2
4592                 case $cpu in
4593                     loongson3*)
4594                         cpuflags="-march=loongson3a -mhard-float -fno-expensive-optimizations"
4595                     ;;
4596                     loongson2e)
4597                         cpuflags="-march=loongson2e -mhard-float -fno-expensive-optimizations"
4598                     ;;
4599                     loongson2f)
4600                         cpuflags="-march=loongson2f -mhard-float -fno-expensive-optimizations"
4601                     ;;
4602                 esac
4603             ;;
4604             *)
4605                 # Unknown CPU. Disable everything.
4606                 warn "unknown CPU. Disabling all MIPS optimizations."
4607                 disable mipsfpu
4608                 disable mipsdsp
4609                 disable mipsdspr2
4610                 disable msa
4611                 disable mmi
4612             ;;
4613         esac
4614
4615         case $cpu in
4616             24kc)
4617                 disable mipsfpu
4618                 disable mipsdsp
4619                 disable mipsdspr2
4620             ;;
4621             24kf*)
4622                 disable mipsdsp
4623                 disable mipsdspr2
4624             ;;
4625             24kec|34kc|1004kc)
4626                 disable mipsfpu
4627                 disable mipsdspr2
4628             ;;
4629             24kef*|34kf*|1004kf*)
4630                 disable mipsdspr2
4631             ;;
4632             74kc)
4633                 disable mipsfpu
4634             ;;
4635             p5600)
4636                 enable mips32r5
4637                 check_cflags "-mtune=p5600" && check_cflags "-msched-weight -mload-store-pairs -funroll-loops"
4638             ;;
4639             i6400)
4640                 enable mips64r6
4641                 check_cflags "-mtune=i6400 -mabi=64" && check_cflags "-msched-weight -mload-store-pairs -funroll-loops" && check_ldflags "-mabi=64"
4642             ;;
4643             p6600)
4644                 enable mips64r6
4645                 check_cflags "-mtune=p6600 -mabi=64" && check_cflags "-msched-weight -mload-store-pairs -funroll-loops" && check_ldflags "-mabi=64"
4646             ;;
4647         esac
4648     else
4649         # We do not disable anything. Is up to the user to disable the unwanted features.
4650         warn 'generic cpu selected'
4651     fi
4652
4653 elif enabled ppc; then
4654
4655     disable ldbrx
4656
4657     case $(tolower $cpu) in
4658         601|ppc601|powerpc601)
4659             cpuflags="-mcpu=601"
4660             disable altivec
4661         ;;
4662         603*|ppc603*|powerpc603*)
4663             cpuflags="-mcpu=603"
4664             disable altivec
4665         ;;
4666         604*|ppc604*|powerpc604*)
4667             cpuflags="-mcpu=604"
4668             disable altivec
4669         ;;
4670         g3|75*|ppc75*|powerpc75*)
4671             cpuflags="-mcpu=750"
4672             disable altivec
4673         ;;
4674         g4|745*|ppc745*|powerpc745*)
4675             cpuflags="-mcpu=7450"
4676             disable vsx
4677         ;;
4678         74*|ppc74*|powerpc74*)
4679             cpuflags="-mcpu=7400"
4680             disable vsx
4681         ;;
4682         g5|970|ppc970|powerpc970)
4683             cpuflags="-mcpu=970"
4684             disable vsx
4685         ;;
4686         power[3-6]*)
4687             cpuflags="-mcpu=$cpu"
4688             disable vsx
4689         ;;
4690         power[7-8]*)
4691             cpuflags="-mcpu=$cpu"
4692         ;;
4693         cell)
4694             cpuflags="-mcpu=cell"
4695             enable ldbrx
4696             disable vsx
4697         ;;
4698         e500mc)
4699             cpuflags="-mcpu=e500mc"
4700             disable altivec
4701         ;;
4702         e500v2)
4703             cpuflags="-mcpu=8548 -mhard-float -mfloat-gprs=double"
4704             disable altivec
4705             disable dcbzl
4706         ;;
4707         e500)
4708             cpuflags="-mcpu=8540 -mhard-float"
4709             disable altivec
4710             disable dcbzl
4711         ;;
4712     esac
4713
4714 elif enabled sparc; then
4715
4716     case $cpu in
4717         cypress|f93[04]|tsc701|sparcl*|supersparc|hypersparc|niagara|v[789])
4718             cpuflags="-mcpu=$cpu"
4719         ;;
4720         ultrasparc*|niagara[234])
4721             cpuflags="-mcpu=$cpu"
4722         ;;
4723     esac
4724
4725 elif enabled x86; then
4726
4727     case $cpu in
4728         i[345]86|pentium)
4729             cpuflags="-march=$cpu"
4730             disable i686
4731             disable mmx
4732         ;;
4733         # targets that do NOT support nopl and conditional mov (cmov)
4734         pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
4735             cpuflags="-march=$cpu"
4736             disable i686
4737         ;;
4738         # targets that do support nopl and conditional mov (cmov)
4739         i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64*|k8*|opteron*|athlon-fx\
4740         |core*|atom|bonnell|nehalem|westmere|silvermont|sandybridge|ivybridge|haswell|broadwell|skylake*|knl\
4741         |amdfam10|barcelona|b[dt]ver*|znver*)
4742             cpuflags="-march=$cpu"
4743             enable i686
4744             enable fast_cmov
4745         ;;
4746         # targets that do support conditional mov but on which it's slow
4747         pentium4|pentium4m|prescott|nocona)
4748             cpuflags="-march=$cpu"
4749             enable i686
4750             disable fast_cmov
4751         ;;
4752     esac
4753
4754 fi
4755
4756 if [ "$cpu" != generic ]; then
4757     add_cflags  $cpuflags
4758     add_asflags $cpuflags
4759     test "$cc_type" = "$ld_type" && add_ldflags $cpuflags
4760 fi
4761
4762 # compiler sanity check
4763 check_exec <<EOF
4764 int main(void){ return 0; }
4765 EOF
4766 if test "$?" != 0; then
4767     echo "$cc is unable to create an executable file."
4768     if test -z "$cross_prefix" && ! enabled cross_compile ; then
4769         echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
4770         echo "Only do this if you know what cross compiling means."
4771     fi
4772     die "C compiler test failed."
4773 fi
4774
4775 add_cppflags -D_ISOC99_SOURCE
4776 add_cxxflags -D__STDC_CONSTANT_MACROS
4777 check_cxxflags -std=c++11 || check_cxxflags -std=c++0x
4778
4779 # some compilers silently accept -std=c11, so we also need to check that the
4780 # version macro is defined properly
4781 if test_cflags_cc -std=c11 ctype.h "__STDC_VERSION__ >= 201112L"; then
4782     add_cflags -std=c11
4783 else
4784     check_cflags -std=c99
4785 fi
4786
4787 check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
4788 #include <stdlib.h>
4789 EOF
4790 check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
4791 #include <stdlib.h>
4792 EOF
4793
4794 add_host_cppflags -D_ISOC99_SOURCE
4795 check_host_cflags -std=c99
4796 check_host_cflags -Wall
4797 check_host_cflags $host_cflags_speed
4798
4799 check_64bit(){
4800     arch32=$1
4801     arch64=$2
4802     expr=$3
4803     check_code cc "" "int test[2*($expr) - 1]" &&
4804         subarch=$arch64 || subarch=$arch32
4805 }
4806
4807 case "$arch" in
4808     aarch64|alpha|ia64)
4809         spic=$shared
4810     ;;
4811     mips)
4812         check_64bit mips mips64 '_MIPS_SIM > 1'
4813         spic=$shared
4814     ;;
4815     parisc)
4816         check_64bit parisc parisc64 'sizeof(void *) > 4'
4817         spic=$shared
4818     ;;
4819     ppc)
4820         check_64bit ppc ppc64 'sizeof(void *) > 4'
4821         spic=$shared
4822     ;;
4823     s390)
4824         check_64bit s390 s390x 'sizeof(void *) > 4'
4825         spic=$shared
4826     ;;
4827     sparc)
4828         check_64bit sparc sparc64 'sizeof(void *) > 4'
4829         spic=$shared
4830     ;;
4831     x86)
4832         check_64bit x86_32 x86_64 'sizeof(void *) > 4'
4833         # Treat x32 as x64 for now. Note it also needs spic=$shared
4834         test "$subarch" = "x86_32" && check_cpp_condition stddef.h 'defined(__x86_64__)' &&
4835             subarch=x86_64
4836         if test "$subarch" = "x86_64"; then
4837             spic=$shared
4838         fi
4839     ;;
4840     ppc)
4841         check_cc <<EOF && subarch="ppc64"
4842         int test[(int)sizeof(char*) - 7];
4843 EOF
4844     ;;
4845 esac
4846
4847 enable $subarch
4848 enabled spic && enable_weak pic
4849
4850 enabled x86_64 && objformat=elf64 || objformat="elf32"
4851
4852 # OS specific
4853 case $target_os in
4854     aix)
4855         SHFLAGS=-shared
4856         add_cppflags '-I\$(SRC_PATH)/compat/aix'
4857         enabled shared && add_ldflags -Wl,-brtl
4858         ;;
4859     android)
4860         disable symver
4861         enable section_data_rel_ro
4862         SLIB_INSTALL_NAME='$(SLIBNAME)'
4863         SLIB_INSTALL_LINKS=
4864         SHFLAGS='-shared -Wl,-soname,$(SLIBNAME)'
4865         ;;
4866     haiku)
4867         prefix_default="/boot/common"
4868         network_extralibs="-lnetwork"
4869         host_extralibs=
4870         ;;
4871     sunos)
4872         SHFLAGS='-shared -Wl,-h,$$(@F)'
4873         enabled x86 && SHFLAGS="-mimpure-text $SHFLAGS"
4874         network_extralibs="-lsocket -lnsl"
4875         add_cppflags -D__EXTENSIONS__
4876         # When using suncc to build, the Solaris linker will mark
4877         # an executable with each instruction set encountered by
4878         # the Solaris assembler.  As our libraries contain their own
4879         # guards for processor-specific code, instead suppress
4880         # generation of the HWCAPS ELF section on Solaris x86 only.
4881         enabled_all suncc x86 &&
4882             echo "hwcap_1 = OVERRIDE;" > mapfile &&
4883             add_ldflags -Wl,-M,mapfile
4884         nm_default='nm -P -g'
4885         version_script='-M'
4886         VERSION_SCRIPT_POSTPROCESS_CMD='perl $(SRC_PATH)/compat/solaris/make_sunver.pl - $(OBJS)'
4887         ;;
4888     netbsd)
4889         disable symver
4890         oss_indev_extralibs="-lossaudio"
4891         oss_outdev_extralibs="-lossaudio"
4892         enabled gcc || check_ldflags -Wl,-zmuldefs
4893         ;;
4894     openbsd|bitrig)
4895         disable symver
4896         SHFLAGS='-shared'
4897         SLIB_INSTALL_NAME='$(SLIBNAME).$(LIBMAJOR).$(LIBMINOR)'
4898         SLIB_INSTALL_LINKS=
4899         oss_indev_extralibs="-lossaudio"
4900         oss_outdev_extralibs="-lossaudio"
4901         ;;
4902     dragonfly)
4903         disable symver
4904         ;;
4905     freebsd)
4906         ;;
4907     bsd/os)
4908         add_extralibs -lpoll -lgnugetopt
4909         strip="strip -d"
4910         ;;
4911     darwin)
4912         enabled ppc && add_asflags -force_cpusubtype_ALL