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