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