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