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