]> git.sesse.net Git - ffmpeg/blob - configure
fate/mpeg4: add mpeg4-es with codec timestamps (vlc ticket 7571)
[ffmpeg] / configure
1 #!/bin/sh
2 #
3 # FFmpeg configure script
4 #
5 # Copyright (c) 2000-2002 Fabrice Bellard
6 # Copyright (c) 2005-2008 Diego Biurrun
7 # Copyright (c) 2005-2008 Mans Rullgard
8 #
9
10 # Prevent locale nonsense from breaking basic text processing.
11 LC_ALL=C
12 export LC_ALL
13
14 # make sure we are running under a compatible shell
15 # try to make this part work with most shells
16
17 try_exec(){
18     echo "Trying shell $1"
19     type "$1" > /dev/null 2>&1 && exec "$@"
20 }
21
22 unset foo
23 (: ${foo%%bar}) 2> /dev/null
24 E1="$?"
25
26 (: ${foo?}) 2> /dev/null
27 E2="$?"
28
29 if test "$E1" != 0 || test "$E2" = 0; then
30     echo "Broken shell detected.  Trying alternatives."
31     export FF_CONF_EXEC
32     if test "0$FF_CONF_EXEC" -lt 1; then
33         FF_CONF_EXEC=1
34         try_exec bash "$0" "$@"
35     fi
36     if test "0$FF_CONF_EXEC" -lt 2; then
37         FF_CONF_EXEC=2
38         try_exec ksh "$0" "$@"
39     fi
40     if test "0$FF_CONF_EXEC" -lt 3; then
41         FF_CONF_EXEC=3
42         try_exec /usr/xpg4/bin/sh "$0" "$@"
43     fi
44     echo "No compatible shell script interpreter found."
45     echo "This configure script requires a POSIX-compatible shell"
46     echo "such as bash or ksh."
47     echo "THIS IS NOT A BUG IN FFMPEG, DO NOT REPORT IT AS SUCH."
48     echo "Instead, install a working POSIX-compatible shell."
49     echo "Disabling this configure test will create a broken FFmpeg."
50     if test "$BASH_VERSION" = '2.04.0(1)-release'; then
51         echo "This bash version ($BASH_VERSION) is broken on your platform."
52         echo "Upgrade to a later version if available."
53     fi
54     exit 1
55 fi
56
57 test -d /usr/xpg4/bin && PATH=/usr/xpg4/bin:$PATH
58
59 show_help(){
60     cat <<EOF
61 Usage: configure [options]
62 Options: [defaults in brackets after descriptions]
63
64 Help options:
65   --help                   print this message
66   --list-decoders          show all available decoders
67   --list-encoders          show all available encoders
68   --list-hwaccels          show all available hardware accelerators
69   --list-demuxers          show all available demuxers
70   --list-muxers            show all available muxers
71   --list-parsers           show all available parsers
72   --list-protocols         show all available protocols
73   --list-bsfs              show all available bitstream filters
74   --list-indevs            show all available input devices
75   --list-outdevs           show all available output devices
76   --list-filters           show all available filters
77
78 Standard options:
79   --logfile=FILE           log tests and output to FILE [config.log]
80   --disable-logging        do not log configure debug information
81   --fatal-warnings         fail if any configure warning is generated
82   --prefix=PREFIX          install in PREFIX [$prefix]
83   --bindir=DIR             install binaries in DIR [PREFIX/bin]
84   --datadir=DIR            install data files in DIR [PREFIX/share/ffmpeg]
85   --docdir=DIR             install documentation in DIR [PREFIX/share/doc/ffmpeg]
86   --libdir=DIR             install libs in DIR [PREFIX/lib]
87   --shlibdir=DIR           install shared libs in DIR [LIBDIR]
88   --incdir=DIR             install includes in DIR [PREFIX/include]
89   --mandir=DIR             install man page in DIR [PREFIX/share/man]
90   --pkgconfigdir=DIR       install pkg-config files in DIR [LIBDIR/pkgconfig]
91   --enable-rpath           use rpath to allow installing libraries in paths
92                            not part of the dynamic linker search path
93                            use rpath when linking programs [USE WITH CARE]
94
95 Licensing options:
96   --enable-gpl             allow use of GPL code, the resulting libs
97                            and binaries will be under GPL [no]
98   --enable-version3        upgrade (L)GPL to version 3 [no]
99   --enable-nonfree         allow use of nonfree code, the resulting libs
100                            and binaries will be unredistributable [no]
101
102 Configuration options:
103   --disable-static         do not build static libraries [no]
104   --enable-shared          build shared libraries [no]
105   --enable-small           optimize for size instead of speed
106   --disable-runtime-cpudetect disable detecting cpu capabilities at runtime (smaller binary)
107   --enable-gray            enable full grayscale support (slower color)
108   --disable-swscale-alpha  disable alpha channel support in swscale
109   --disable-all            disable building components, libraries and programs
110   --enable-incompatible-libav-abi enable incompatible Libav fork ABI [no]
111   --enable-raise-major     increase major version numbers in sonames [no]
112
113 Program options:
114   --disable-programs       do not build command line programs
115   --disable-ffmpeg         disable ffmpeg build
116   --disable-ffplay         disable ffplay build
117   --disable-ffprobe        disable ffprobe build
118   --disable-ffserver       disable ffserver build
119
120 Documentation options:
121   --disable-doc            do not build documentation
122   --disable-htmlpages      do not build HTML documentation pages
123   --disable-manpages       do not build man documentation pages
124   --disable-podpages       do not build POD documentation pages
125   --disable-txtpages       do not build text documentation pages
126
127 Component options:
128   --disable-avdevice       disable libavdevice build
129   --disable-avcodec        disable libavcodec build
130   --disable-avformat       disable libavformat build
131   --disable-swresample     disable libswresample build
132   --disable-swscale        disable libswscale build
133   --disable-postproc       disable libpostproc build
134   --disable-avfilter       disable libavfilter build
135   --enable-avresample      enable libavresample build [no]
136   --disable-pthreads       disable pthreads [autodetect]
137   --disable-w32threads     disable Win32 threads [autodetect]
138   --disable-os2threads     disable OS/2 threads [autodetect]
139   --disable-network        disable network support [no]
140   --disable-dct            disable DCT code
141   --disable-dwt            disable DWT code
142   --disable-error-resilience disable error resilience code
143   --disable-lsp            disable LSP code
144   --disable-lzo            disable LZO decoder code
145   --disable-mdct           disable MDCT code
146   --disable-rdft           disable RDFT code
147   --disable-fft            disable FFT code
148   --disable-faan           disable floating point AAN (I)DCT code
149   --disable-pixelutils     disable pixel utils in libavutil
150
151 Hardware accelerators:
152   --disable-d3d11va        disable D3D11VA code [autodetect]
153   --disable-dxva2          disable DXVA2 code [autodetect]
154   --disable-vaapi          disable VAAPI code [autodetect]
155   --disable-vda            disable VDA code [autodetect]
156   --disable-vdpau          disable VDPAU code [autodetect]
157   --enable-videotoolbox    enable VideoToolbox code [autodetect]
158
159 Individual component options:
160   --disable-everything     disable all components listed below
161   --disable-encoder=NAME   disable encoder NAME
162   --enable-encoder=NAME    enable encoder NAME
163   --disable-encoders       disable all encoders
164   --disable-decoder=NAME   disable decoder NAME
165   --enable-decoder=NAME    enable decoder NAME
166   --disable-decoders       disable all decoders
167   --disable-hwaccel=NAME   disable hwaccel NAME
168   --enable-hwaccel=NAME    enable hwaccel NAME
169   --disable-hwaccels       disable all hwaccels
170   --disable-muxer=NAME     disable muxer NAME
171   --enable-muxer=NAME      enable muxer NAME
172   --disable-muxers         disable all muxers
173   --disable-demuxer=NAME   disable demuxer NAME
174   --enable-demuxer=NAME    enable demuxer NAME
175   --disable-demuxers       disable all demuxers
176   --enable-parser=NAME     enable parser NAME
177   --disable-parser=NAME    disable parser NAME
178   --disable-parsers        disable all parsers
179   --enable-bsf=NAME        enable bitstream filter NAME
180   --disable-bsf=NAME       disable bitstream filter NAME
181   --disable-bsfs           disable all bitstream filters
182   --enable-protocol=NAME   enable protocol NAME
183   --disable-protocol=NAME  disable protocol NAME
184   --disable-protocols      disable all protocols
185   --enable-indev=NAME      enable input device NAME
186   --disable-indev=NAME     disable input device NAME
187   --disable-indevs         disable input devices
188   --enable-outdev=NAME     enable output device NAME
189   --disable-outdev=NAME    disable output device NAME
190   --disable-outdevs        disable output devices
191   --disable-devices        disable all devices
192   --enable-filter=NAME     enable filter NAME
193   --disable-filter=NAME    disable filter NAME
194   --disable-filters        disable all filters
195
196 External library support:
197   --enable-avisynth        enable reading of AviSynth script files [no]
198   --disable-bzlib          disable bzlib [autodetect]
199   --enable-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-ladspa          enable LADSPA audio filtering [no]
211   --enable-libass          enable libass subtitles rendering,
212                            needed for subtitles and ass filter [no]
213   --enable-libbluray       enable BluRay reading using libbluray [no]
214   --enable-libbs2b         enable bs2b DSP library [no]
215   --enable-libcaca         enable textual display using libcaca [no]
216   --enable-libcelt         enable CELT decoding via libcelt [no]
217   --enable-libcdio         enable audio CD grabbing with libcdio [no]
218   --enable-libdc1394       enable IIDC-1394 grabbing using libdc1394
219                            and libraw1394 [no]
220   --enable-libdcadec       enable DCA decoding via libdcadec [no]
221   --enable-libfaac         enable AAC encoding via libfaac [no]
222   --enable-libfdk-aac      enable AAC de/encoding via libfdk-aac [no]
223   --enable-libflite        enable flite (voice synthesis) support via libflite [no]
224   --enable-libfreetype     enable libfreetype, needed for drawtext filter [no]
225   --enable-libfribidi      enable libfribidi, improves drawtext filter [no]
226   --enable-libgme          enable Game Music Emu via libgme [no]
227   --enable-libgsm          enable GSM de/encoding via libgsm [no]
228   --enable-libiec61883     enable iec61883 via libiec61883 [no]
229   --enable-libilbc         enable iLBC de/encoding via libilbc [no]
230   --enable-libkvazaar      enable HEVC encoding via libkvazaar [no]
231   --enable-libmfx          enable HW acceleration through libmfx
232   --enable-libmodplug      enable ModPlug via libmodplug [no]
233   --enable-libmp3lame      enable MP3 encoding via libmp3lame [no]
234   --enable-libnut          enable NUT (de)muxing via libnut,
235                            native (de)muxer exists [no]
236   --enable-libopencore-amrnb enable AMR-NB de/encoding via libopencore-amrnb [no]
237   --enable-libopencore-amrwb enable AMR-WB decoding via libopencore-amrwb [no]
238   --enable-libopencv       enable video filtering via libopencv [no]
239   --enable-libopenh264     enable H.264 encoding via OpenH264 [no]
240   --enable-libopenjpeg     enable JPEG 2000 de/encoding via OpenJPEG [no]
241   --enable-libopus         enable Opus de/encoding via libopus [no]
242   --enable-libpulse        enable Pulseaudio input via libpulse [no]
243   --enable-librubberband   enable rubberband needed for rubberband filter [no]
244   --enable-librtmp         enable RTMP[E] support via librtmp [no]
245   --enable-libschroedinger enable Dirac de/encoding via libschroedinger [no]
246   --enable-libshine        enable fixed-point MP3 encoding via libshine [no]
247   --enable-libsmbclient    enable Samba protocol via libsmbclient [no]
248   --enable-libsnappy       enable Snappy compression, needed for hap encoding [no]
249   --enable-libsoxr         enable Include libsoxr resampling [no]
250   --enable-libspeex        enable Speex de/encoding via libspeex [no]
251   --enable-libssh          enable SFTP protocol via libssh [no]
252   --enable-libtesseract    enable Tesseract, needed for ocr filter [no]
253   --enable-libtheora       enable Theora encoding via libtheora [no]
254   --enable-libtwolame      enable MP2 encoding via libtwolame [no]
255   --enable-libutvideo      enable Ut Video encoding and decoding via libutvideo [no]
256   --enable-libv4l2         enable libv4l2/v4l-utils [no]
257   --enable-libvidstab      enable video stabilization using vid.stab [no]
258   --enable-libvo-amrwbenc  enable AMR-WB encoding via libvo-amrwbenc [no]
259   --enable-libvorbis       enable Vorbis en/decoding via libvorbis,
260                            native implementation exists [no]
261   --enable-libvpx          enable VP8 and VP9 de/encoding via libvpx [no]
262   --enable-libwavpack      enable wavpack encoding via libwavpack [no]
263   --enable-libwebp         enable WebP encoding via libwebp [no]
264   --enable-libx264         enable H.264 encoding via x264 [no]
265   --enable-libx265         enable HEVC encoding via x265 [no]
266   --enable-libxavs         enable AVS encoding via xavs [no]
267   --enable-libxcb          enable X11 grabbing using XCB [autodetect]
268   --enable-libxcb-shm      enable X11 grabbing shm communication [autodetect]
269   --enable-libxcb-xfixes   enable X11 grabbing mouse rendering [autodetect]
270   --enable-libxcb-shape    enable X11 grabbing shape rendering [autodetect]
271   --enable-libxvid         enable Xvid encoding via xvidcore,
272                            native MPEG-4/Xvid encoder exists [no]
273   --enable-libzimg         enable z.lib, needed for zscale filter [no]
274   --enable-libzmq          enable message passing via libzmq [no]
275   --enable-libzvbi         enable teletext support via libzvbi [no]
276   --disable-lzma           disable lzma [autodetect]
277   --enable-decklink        enable Blackmagic DeckLink I/O support [no]
278   --enable-mmal            enable decoding via MMAL [no]
279   --enable-netcdf          enable NetCDF, needed for sofalizer filter [no]
280   --enable-nvenc           enable NVIDIA NVENC support [no]
281   --enable-openal          enable OpenAL 1.1 capture support [no]
282   --enable-opencl          enable OpenCL code
283   --enable-opengl          enable OpenGL rendering [no]
284   --enable-openssl         enable openssl, needed for https support
285                            if gnutls is not used [no]
286   --disable-schannel       disable SChannel SSP, needed for TLS support on
287                            Windows if openssl and gnutls are not used [autodetect]
288   --disable-sdl            disable sdl [autodetect]
289   --disable-securetransport disable Secure Transport, needed for TLS support
290                            on OSX if openssl and gnutls are not used [autodetect]
291   --enable-x11grab         enable X11 grabbing (legacy) [no]
292   --disable-xlib           disable xlib [autodetect]
293   --disable-zlib           disable zlib [autodetect]
294
295 Toolchain options:
296   --arch=ARCH              select architecture [$arch]
297   --cpu=CPU                select the minimum required CPU (affects
298                            instruction selection, may crash on older CPUs)
299   --cross-prefix=PREFIX    use PREFIX for compilation tools [$cross_prefix]
300   --progs-suffix=SUFFIX    program name suffix []
301   --enable-cross-compile   assume a cross-compiler is used
302   --sysroot=PATH           root of cross-build tree
303   --sysinclude=PATH        location of cross-build system headers
304   --target-os=OS           compiler targets OS [$target_os]
305   --target-exec=CMD        command to run executables on target
306   --target-path=DIR        path to view of build directory on target
307   --target-samples=DIR     path to samples directory on target
308   --tempprefix=PATH        force fixed dir/prefix instead of mktemp for checks
309   --toolchain=NAME         set tool defaults according to NAME
310   --nm=NM                  use nm tool NM [$nm_default]
311   --ar=AR                  use archive tool AR [$ar_default]
312   --as=AS                  use assembler AS [$as_default]
313   --strip=STRIP            use strip tool STRIP [$strip_default]
314   --windres=WINDRES        use windows resource compiler WINDRES [$windres_default]
315   --yasmexe=EXE            use yasm-compatible assembler EXE [$yasmexe_default]
316   --cc=CC                  use C compiler CC [$cc_default]
317   --cxx=CXX                use C compiler CXX [$cxx_default]
318   --objcc=OCC              use ObjC compiler OCC [$cc_default]
319   --dep-cc=DEPCC           use dependency generator DEPCC [$cc_default]
320   --ld=LD                  use linker LD [$ld_default]
321   --pkg-config=PKGCONFIG   use pkg-config tool PKGCONFIG [$pkg_config_default]
322   --pkg-config-flags=FLAGS pass additional flags to pkgconf []
323   --ranlib=RANLIB          use ranlib RANLIB [$ranlib_default]
324   --doxygen=DOXYGEN        use DOXYGEN to generate API doc [$doxygen_default]
325   --host-cc=HOSTCC         use host C compiler HOSTCC
326   --host-cflags=HCFLAGS    use HCFLAGS when compiling for host
327   --host-cppflags=HCPPFLAGS use HCPPFLAGS when compiling for host
328   --host-ld=HOSTLD         use host linker HOSTLD
329   --host-ldflags=HLDFLAGS  use HLDFLAGS when linking for host
330   --host-libs=HLIBS        use libs HLIBS when linking for host
331   --host-os=OS             compiler host OS [$target_os]
332   --extra-cflags=ECFLAGS   add ECFLAGS to CFLAGS [$CFLAGS]
333   --extra-cxxflags=ECFLAGS add ECFLAGS to CXXFLAGS [$CXXFLAGS]
334   --extra-objcflags=FLAGS  add FLAGS to OBJCFLAGS [$CFLAGS]
335   --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]
336   --extra-ldexeflags=ELDFLAGS add ELDFLAGS to LDEXEFLAGS [$LDEXEFLAGS]
337   --extra-ldlibflags=ELDFLAGS add ELDFLAGS to LDLIBFLAGS [$LDLIBFLAGS]
338   --extra-libs=ELIBS       add ELIBS [$ELIBS]
339   --extra-version=STRING   version string suffix []
340   --optflags=OPTFLAGS      override optimization-related compiler flags
341   --build-suffix=SUFFIX    library name suffix []
342   --enable-pic             build position-independent code
343   --enable-thumb           compile for Thumb instruction set
344   --enable-lto             use link-time optimization
345   --env="ENV=override"     override the environment variables
346
347 Advanced options (experts only):
348   --malloc-prefix=PREFIX   prefix malloc and related names with PREFIX
349   --custom-allocator=NAME  use a supported custom allocator
350   --disable-symver         disable symbol versioning
351   --enable-hardcoded-tables use hardcoded tables instead of runtime generation
352   --disable-safe-bitstream-reader
353                            disable buffer boundary checking in bitreaders
354                            (faster, but may crash)
355   --enable-memalign-hack   emulate memalign, interferes with memory debuggers
356   --sws-max-filter-size=N  the max filter size swscale uses [$sws_max_filter_size_default]
357
358 Optimization options (experts only):
359   --disable-asm            disable all assembly optimizations
360   --disable-altivec        disable AltiVec optimizations
361   --disable-vsx            disable VSX optimizations
362   --disable-power8         disable POWER8 optimizations
363   --disable-amd3dnow       disable 3DNow! optimizations
364   --disable-amd3dnowext    disable 3DNow! extended optimizations
365   --disable-mmx            disable MMX optimizations
366   --disable-mmxext         disable MMXEXT optimizations
367   --disable-sse            disable SSE optimizations
368   --disable-sse2           disable SSE2 optimizations
369   --disable-sse3           disable SSE3 optimizations
370   --disable-ssse3          disable SSSE3 optimizations
371   --disable-sse4           disable SSE4 optimizations
372   --disable-sse42          disable SSE4.2 optimizations
373   --disable-avx            disable AVX optimizations
374   --disable-xop            disable XOP optimizations
375   --disable-fma3           disable FMA3 optimizations
376   --disable-fma4           disable FMA4 optimizations
377   --disable-avx2           disable AVX2 optimizations
378   --disable-aesni          disable AESNI optimizations
379   --disable-armv5te        disable armv5te optimizations
380   --disable-armv6          disable armv6 optimizations
381   --disable-armv6t2        disable armv6t2 optimizations
382   --disable-vfp            disable VFP optimizations
383   --disable-neon           disable NEON optimizations
384   --disable-inline-asm     disable use of inline assembly
385   --disable-yasm           disable use of nasm/yasm assembly
386   --disable-mipsdsp        disable MIPS DSP ASE R1 optimizations
387   --disable-mipsdspr2      disable MIPS DSP ASE R2 optimizations
388   --disable-msa            disable MSA optimizations
389   --disable-mipsfpu        disable floating point MIPS optimizations
390   --disable-mmi            disable Loongson SIMD optimizations
391   --disable-fast-unaligned consider unaligned accesses slow
392
393 Developer options (useful when working on FFmpeg itself):
394   --disable-debug          disable debugging symbols
395   --enable-debug=LEVEL     set the debug level [$debuglevel]
396   --disable-optimizations  disable compiler optimizations
397   --enable-extra-warnings  enable more compiler warnings
398   --disable-stripping      disable stripping of executables and shared libraries
399   --assert-level=level     0(default), 1 or 2, amount of assertion testing,
400                            2 causes a slowdown at runtime.
401   --enable-memory-poisoning fill heap uninitialized allocated space with arbitrary data
402   --valgrind=VALGRIND      run "make fate" tests through valgrind to detect memory
403                            leaks and errors, using the specified valgrind binary.
404                            Cannot be combined with --target-exec
405   --enable-ftrapv          Trap arithmetic overflows
406   --samples=PATH           location of test samples for FATE, if not set use
407                            \$FATE_SAMPLES at make invocation time.
408   --enable-neon-clobber-test check NEON registers for clobbering (should be
409                            used only for debugging purposes)
410   --enable-xmm-clobber-test check XMM registers for clobbering (Win64-only;
411                            should be used only for debugging purposes)
412   --enable-random          randomly enable/disable components
413   --disable-random
414   --enable-random=LIST     randomly enable/disable specific components or
415   --disable-random=LIST    component groups. LIST is a comma-separated list
416                            of NAME[:PROB] entries where NAME is a component
417                            (group) and PROB the probability associated with
418                            NAME (default 0.5).
419   --random-seed=VALUE      seed value for --enable/disable-random
420   --disable-valgrind-backtrace do not print a backtrace under Valgrind
421                            (only applies to --disable-optimizations builds)
422
423 NOTE: Object files are built at the place where configure is launched.
424 EOF
425   exit 0
426 }
427
428 quotes='""'
429 if test -t 1 && which tput >/dev/null 2>&1; then
430     ncolors=$(tput colors)
431     if test -n "$ncolors" && test $ncolors -ge 8; then
432         bold_color=$(tput bold)
433         warn_color=$(tput setaf 3)
434         error_color=$(tput setaf 1)
435         reset_color=$(tput sgr0)
436     fi
437     # 72 used instead of 80 since that's the default of pr
438     ncols=$(tput cols)
439 fi
440 : ${ncols:=72}
441
442 log(){
443     echo "$@" >> $logfile
444 }
445
446 log_file(){
447     log BEGIN $1
448     pr -n -t $1 >> $logfile
449     log END $1
450 }
451
452 warn(){
453     log "WARNING: $*"
454     WARNINGS="${WARNINGS}WARNING: $*\n"
455 }
456
457 die(){
458     log "$@"
459     echo "$error_color$bold_color$@$reset_color"
460     cat <<EOF
461
462 If you think configure made a mistake, make sure you are using the latest
463 version from Git.  If the latest version fails, report the problem to the
464 ffmpeg-user@ffmpeg.org mailing list or IRC #ffmpeg on irc.freenode.net.
465 EOF
466     if disabled logging; then
467         cat <<EOF
468 Rerun configure with logging enabled (do not use --disable-logging), and
469 include the log this produces with your report.
470 EOF
471     else
472         cat <<EOF
473 Include the log file "$logfile" produced by configure as this will help
474 solve the problem.
475 EOF
476     fi
477     exit 1
478 }
479
480 # Avoid locale weirdness, besides we really just want to translate ASCII.
481 toupper(){
482     echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
483 }
484
485 tolower(){
486     echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
487 }
488
489 c_escape(){
490     echo "$*" | sed 's/["\\]/\\\0/g'
491 }
492
493 sh_quote(){
494     v=$(echo "$1" | sed "s/'/'\\\\''/g")
495     test "x$v" = "x${v#*[!A-Za-z0-9_/.+-]}" || v="'$v'"
496     echo "$v"
497 }
498
499 cleanws(){
500     echo "$@" | sed 's/^ *//;s/[[:space:]][[:space:]]*/ /g;s/ *$//'
501 }
502
503 filter(){
504     pat=$1
505     shift
506     for v; do
507         eval "case $v in $pat) echo $v ;; esac"
508     done
509 }
510
511 filter_out(){
512     pat=$1
513     shift
514     for v; do
515         eval "case $v in $pat) ;; *) echo $v ;; esac"
516     done
517 }
518
519 map(){
520     m=$1
521     shift
522     for v; do eval $m; done
523 }
524
525 add_suffix(){
526     suffix=$1
527     shift
528     for v; do echo ${v}${suffix}; done
529 }
530
531 set_all(){
532     value=$1
533     shift
534     for var in $*; do
535         eval $var=$value
536     done
537 }
538
539 set_weak(){
540     value=$1
541     shift
542     for var; do
543         eval : \${$var:=$value}
544     done
545 }
546
547 sanitize_var_name(){
548     echo $@ | sed 's/[^A-Za-z0-9_]/_/g'
549 }
550
551 set_safe(){
552     var=$1
553     shift
554     eval $(sanitize_var_name "$var")='$*'
555 }
556
557 get_safe(){
558     eval echo \$$(sanitize_var_name "$1")
559 }
560
561 pushvar(){
562     for pvar in $*; do
563         eval level=\${${pvar}_level:=0}
564         eval ${pvar}_${level}="\$$pvar"
565         eval ${pvar}_level=$(($level+1))
566     done
567 }
568
569 popvar(){
570     for pvar in $*; do
571         eval level=\${${pvar}_level:-0}
572         test $level = 0 && continue
573         eval level=$(($level-1))
574         eval $pvar="\${${pvar}_${level}}"
575         eval ${pvar}_level=$level
576         eval unset ${pvar}_${level}
577     done
578 }
579
580 enable(){
581     set_all yes $*
582 }
583
584 disable(){
585     set_all no $*
586 }
587
588 enable_weak(){
589     set_weak yes $*
590 }
591
592 disable_weak(){
593     set_weak no $*
594 }
595
596 enable_safe(){
597     for var; do
598         enable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
599     done
600 }
601
602 disable_safe(){
603     for var; do
604         disable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
605     done
606 }
607
608 do_enable_deep(){
609     for var; do
610         enabled $var && continue
611         eval sel="\$${var}_select"
612         eval sgs="\$${var}_suggest"
613         pushvar var sgs
614         enable_deep $sel
615         popvar sgs
616         enable_deep_weak $sgs
617         popvar var
618     done
619 }
620
621 enable_deep(){
622     do_enable_deep $*
623     enable $*
624 }
625
626 enable_deep_weak(){
627     for var; do
628         disabled $var && continue
629         pushvar var
630         do_enable_deep $var
631         popvar var
632         enable_weak $var
633     done
634 }
635
636 enabled(){
637     test "${1#!}" = "$1" && op='=' || op=!=
638     eval test "x\$${1#!}" $op "xyes"
639 }
640
641 disabled(){
642     test "${1#!}" = "$1" && op='=' || op=!=
643     eval test "x\$${1#!}" $op "xno"
644 }
645
646 enabled_all(){
647     for opt; do
648         enabled $opt || return 1
649     done
650 }
651
652 disabled_all(){
653     for opt; do
654         disabled $opt || return 1
655     done
656 }
657
658 enabled_any(){
659     for opt; do
660         enabled $opt && return 0
661     done
662 }
663
664 disabled_any(){
665     for opt; do
666         disabled $opt && return 0
667     done
668     return 1
669 }
670
671 set_default(){
672     for opt; do
673         eval : \${$opt:=\$${opt}_default}
674     done
675 }
676
677 is_in(){
678     value=$1
679     shift
680     for var in $*; do
681         [ $var = $value ] && return 0
682     done
683     return 1
684 }
685
686 do_check_deps(){
687     for cfg; do
688         cfg="${cfg#!}"
689         enabled ${cfg}_checking && die "Circular dependency for $cfg."
690         disabled ${cfg}_checking && continue
691         enable ${cfg}_checking
692         append allopts $cfg
693
694         eval dep_all="\$${cfg}_deps"
695         eval dep_any="\$${cfg}_deps_any"
696         eval dep_sel="\$${cfg}_select"
697         eval dep_sgs="\$${cfg}_suggest"
698         eval dep_ifa="\$${cfg}_if"
699         eval dep_ifn="\$${cfg}_if_any"
700
701         pushvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
702         do_check_deps $dep_all $dep_any $dep_sel $dep_sgs $dep_ifa $dep_ifn
703         popvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
704
705         [ -n "$dep_ifa" ] && { enabled_all $dep_ifa && enable_weak $cfg; }
706         [ -n "$dep_ifn" ] && { enabled_any $dep_ifn && enable_weak $cfg; }
707         enabled_all  $dep_all || disable $cfg
708         enabled_any  $dep_any || disable $cfg
709         disabled_any $dep_sel && disable $cfg
710
711         if enabled $cfg; then
712             enable_deep $dep_sel
713             enable_deep_weak $dep_sgs
714         fi
715
716         disable ${cfg}_checking
717     done
718 }
719
720 check_deps(){
721     unset allopts
722
723     do_check_deps "$@"
724
725     for cfg in $allopts; do
726         enabled $cfg || continue
727         eval dep_extralibs="\$${cfg}_extralibs"
728         test -n "$dep_extralibs" && add_extralibs $dep_extralibs
729     done
730 }
731
732 print_config(){
733     pfx=$1
734     files=$2
735     shift 2
736     map 'eval echo "$v \${$v:-no}"' "$@" |
737     awk "BEGIN { split(\"$files\", files) }
738         {
739             c = \"$pfx\" toupper(\$1);
740             v = \$2;
741             sub(/yes/, 1, v);
742             sub(/no/,  0, v);
743             for (f in files) {
744                 file = files[f];
745                 if (file ~ /\\.h\$/) {
746                     printf(\"#define %s %d\\n\", c, v) >>file;
747                 } else if (file ~ /\\.asm\$/) {
748                     printf(\"%%define %s %d\\n\", c, v) >>file;
749                 } else if (file ~ /\\.mak\$/) {
750                     n = -v ? \"\" : \"!\";
751                     printf(\"%s%s=yes\\n\", n, c) >>file;
752                 } else if (file ~ /\\.texi\$/) {
753                     pre = -v ? \"\" : \"@c \";
754                     yesno = \$2;
755                     c2 = tolower(c);
756                     gsub(/_/, \"-\", c2);
757                     printf(\"%s@set %s %s\\n\", pre, c2, yesno) >>file;
758                 }
759             }
760         }"
761 }
762
763 print_enabled(){
764     suf=$1
765     shift
766     for v; do
767         enabled $v && printf "%s\n" ${v%$suf};
768     done
769 }
770
771 append(){
772     var=$1
773     shift
774     eval "$var=\"\$$var $*\""
775 }
776
777 prepend(){
778     var=$1
779     shift
780     eval "$var=\"$* \$$var\""
781 }
782
783 unique(){
784     var=$1
785     uniq_list=""
786     for tok in $(eval echo \$$var); do
787         uniq_list="$(filter_out $tok $uniq_list) $tok"
788     done
789     eval "$var=\"${uniq_list}\""
790 }
791
792 add_cppflags(){
793     append CPPFLAGS "$@"
794 }
795
796 add_cflags(){
797     append CFLAGS $($cflags_filter "$@")
798 }
799
800 add_cxxflags(){
801     append CXXFLAGS $($cflags_filter "$@")
802 }
803
804 add_asflags(){
805     append ASFLAGS $($asflags_filter "$@")
806 }
807
808 add_objcflags(){
809     append OBJCFLAGS $($objcflags_filter "$@")
810 }
811
812 add_ldflags(){
813     append LDFLAGS $($ldflags_filter "$@")
814 }
815
816 add_ldexeflags(){
817     append LDEXEFLAGS $($ldflags_filter "$@")
818 }
819
820 add_ldlibflags(){
821     append LDLIBFLAGS $($ldflags_filter "$@")
822 }
823
824 add_stripflags(){
825     append ASMSTRIPFLAGS "$@"
826 }
827
828 add_extralibs(){
829     prepend extralibs $($ldflags_filter "$@")
830 }
831
832 add_host_cppflags(){
833     append host_cppflags "$@"
834 }
835
836 add_host_cflags(){
837     append host_cflags $($host_cflags_filter "$@")
838 }
839
840 add_host_ldflags(){
841     append host_ldflags $($host_ldflags_filter "$@")
842 }
843
844 add_compat(){
845     append compat_objs $1
846     shift
847     map 'add_cppflags -D$v' "$@"
848 }
849
850 check_cmd(){
851     log "$@"
852     "$@" >> $logfile 2>&1
853 }
854
855 check_stat(){
856     log check_stat "$@"
857     stat "$1" >> $logfile 2>&1
858 }
859
860 cc_o(){
861     eval printf '%s\\n' $CC_O
862 }
863
864 cc_e(){
865     eval printf '%s\\n' $CC_E
866 }
867
868 check_cc(){
869     log check_cc "$@"
870     cat > $TMPC
871     log_file $TMPC
872     check_cmd $cc $CPPFLAGS $CFLAGS "$@" $CC_C $(cc_o $TMPO) $TMPC
873 }
874
875 check_cxx(){
876     log check_cxx "$@"
877     cat > $TMPCPP
878     log_file $TMPCPP
879     check_cmd $cxx $CPPFLAGS $CFLAGS $CXXFLAGS "$@" $CXX_C -o $TMPO $TMPCPP
880 }
881
882 check_objcc(){
883     log check_objcc "$@"
884     cat > $TMPM
885     log_file $TMPM
886     check_cmd $objcc -Werror=missing-prototypes $CPPFLAGS $CFLAGS $OBJCFLAGS "$@" $OBJCC_C $(cc_o $TMPO) $TMPM
887 }
888
889 check_cpp(){
890     log check_cpp "$@"
891     cat > $TMPC
892     log_file $TMPC
893     check_cmd $cc $CPPFLAGS $CFLAGS "$@" $(cc_e $TMPO) $TMPC
894 }
895
896 as_o(){
897     eval printf '%s\\n' $AS_O
898 }
899
900 check_as(){
901     log check_as "$@"
902     cat > $TMPS
903     log_file $TMPS
904     check_cmd $as $CPPFLAGS $ASFLAGS "$@" $AS_C $(as_o $TMPO) $TMPS
905 }
906
907 check_inline_asm(){
908     log check_inline_asm "$@"
909     name="$1"
910     code="$2"
911     shift 2
912     disable $name
913     check_cc "$@" <<EOF && enable $name
914 void foo(void){ __asm__ volatile($code); }
915 EOF
916 }
917
918 check_insn(){
919     log check_insn "$@"
920     check_inline_asm ${1}_inline "\"$2\""
921     echo "$2" | check_as && enable ${1}_external || disable ${1}_external
922 }
923
924 check_yasm(){
925     log check_yasm "$@"
926     echo "$1" > $TMPS
927     log_file $TMPS
928     shift 1
929     check_cmd $yasmexe $YASMFLAGS -Werror "$@" -o $TMPO $TMPS
930 }
931
932 ld_o(){
933     eval printf '%s\\n' $LD_O
934 }
935
936 check_ld(){
937     log check_ld "$@"
938     type=$1
939     shift 1
940     flags=$(filter_out '-l*|*.so' $@)
941     libs=$(filter '-l*|*.so' $@)
942     check_$type $($cflags_filter $flags) || return
943     flags=$($ldflags_filter $flags)
944     libs=$($ldflags_filter $libs)
945     check_cmd $ld $LDFLAGS $flags $(ld_o $TMPE) $TMPO $libs $extralibs
946 }
947
948 print_include(){
949     hdr=$1
950     test "${hdr%.h}" = "${hdr}" &&
951         echo "#include $hdr"    ||
952         echo "#include <$hdr>"
953 }
954
955 check_code(){
956     log check_code "$@"
957     check=$1
958     headers=$2
959     code=$3
960     shift 3
961     {
962         for hdr in $headers; do
963             print_include $hdr
964         done
965         echo "int main(void) { $code; return 0; }"
966     } | check_$check "$@"
967 }
968
969 check_cppflags(){
970     log check_cppflags "$@"
971     check_cc "$@" <<EOF && append CPPFLAGS "$@"
972 int x;
973 EOF
974 }
975
976 test_cflags(){
977     log test_cflags "$@"
978     set -- $($cflags_filter "$@")
979     check_cc "$@" <<EOF
980 int x;
981 EOF
982 }
983
984 check_cflags(){
985     log check_cflags "$@"
986     test_cflags "$@" && add_cflags "$@"
987 }
988
989 check_cxxflags(){
990     log check_cxxflags "$@"
991     set -- $($cflags_filter "$@")
992     check_cxx "$@" <<EOF && append CXXFLAGS "$@"
993 int x;
994 EOF
995 }
996
997 test_objcflags(){
998     log test_cflags "$@"
999     set -- $($cflags_filter "$@")
1000     check_objcc "$@" <<EOF
1001 int x;
1002 EOF
1003 }
1004
1005 check_objcflags(){
1006     log check_cflags "$@"
1007     test_objcflags "$@" && add_objcflags "$@"
1008 }
1009
1010 test_ldflags(){
1011     log test_ldflags "$@"
1012     check_ld "cc" "$@" <<EOF
1013 int main(void){ return 0; }
1014 EOF
1015 }
1016
1017 check_ldflags(){
1018     log check_ldflags "$@"
1019     test_ldflags "$@" && add_ldflags "$@"
1020 }
1021
1022 test_stripflags(){
1023     log test_stripflags "$@"
1024     # call check_cc to get a fresh TMPO
1025     check_cc <<EOF
1026 int main(void) { return 0; }
1027 EOF
1028     check_cmd $strip $ASMSTRIPFLAGS "$@" $TMPO
1029 }
1030
1031 check_stripflags(){
1032     log check_stripflags "$@"
1033     test_stripflags "$@" && add_stripflags "$@"
1034 }
1035
1036 check_header(){
1037     log check_header "$@"
1038     header=$1
1039     shift
1040     disable_safe $header
1041     check_cpp "$@" <<EOF && enable_safe $header
1042 #include <$header>
1043 int x;
1044 EOF
1045 }
1046
1047 check_header_objcc(){
1048     log check_header_objcc "$@"
1049     rm -f -- "$TMPO"
1050     header=$1
1051     shift
1052     disable_safe $header
1053     {
1054        echo "#include <$header>"
1055        echo "int main(void) { return 0; }"
1056     } | check_objcc && check_stat "$TMPO" && enable_safe $headers
1057 }
1058
1059 check_func(){
1060     log check_func "$@"
1061     func=$1
1062     shift
1063     disable $func
1064     check_ld "cc" "$@" <<EOF && enable $func
1065 extern int $func();
1066 int main(void){ $func(); }
1067 EOF
1068 }
1069
1070 check_complexfunc(){
1071     log check_complexfunc "$@"
1072     func=$1
1073     narg=$2
1074     shift 2
1075     test $narg = 2 && args="f, g" || args="f * I"
1076     disable $func
1077     check_ld "cc" "$@" <<EOF && enable $func
1078 #include <complex.h>
1079 #include <math.h>
1080 float foo(complex float f, complex float g) { return $func($args); }
1081 int main(void){ return (int) foo; }
1082 EOF
1083 }
1084
1085 check_mathfunc(){
1086     log check_mathfunc "$@"
1087     func=$1
1088     narg=$2
1089     shift 2
1090     test $narg = 2 && args="f, g" || args="f"
1091     disable $func
1092     check_ld "cc" "$@" <<EOF && enable $func
1093 #include <math.h>
1094 float foo(float f, float g) { return $func($args); }
1095 int main(void){ return (int) foo; }
1096 EOF
1097 }
1098
1099 check_func_headers(){
1100     log check_func_headers "$@"
1101     headers=$1
1102     funcs=$2
1103     shift 2
1104     {
1105         for hdr in $headers; do
1106             print_include $hdr
1107         done
1108         for func in $funcs; do
1109             echo "long check_$func(void) { return (long) $func; }"
1110         done
1111         echo "int main(void) { return 0; }"
1112     } | check_ld "cc" "$@" && enable $funcs && enable_safe $headers
1113 }
1114
1115 check_class_headers_cpp(){
1116     log check_class_headers_cpp "$@"
1117     headers=$1
1118     classes=$2
1119     shift 2
1120     {
1121         for hdr in $headers; do
1122             echo "#include <$hdr>"
1123         done
1124         echo "int main(void) { "
1125         i=1
1126         for class in $classes; do
1127             echo "$class obj$i;"
1128             i=$(expr $i + 1)
1129         done
1130         echo "return 0; }"
1131     } | check_ld "cxx" "$@" && enable $funcs && enable_safe $headers
1132 }
1133
1134 check_cpp_condition(){
1135     log check_cpp_condition "$@"
1136     header=$1
1137     condition=$2
1138     shift 2
1139     check_cpp "$@" <<EOF
1140 #include <$header>
1141 #if !($condition)
1142 #error "unsatisfied condition: $condition"
1143 #endif
1144 EOF
1145 }
1146
1147 check_lib(){
1148     log check_lib "$@"
1149     header="$1"
1150     func="$2"
1151     shift 2
1152     check_header $header && check_func $func "$@" && add_extralibs "$@"
1153 }
1154
1155 check_lib2(){
1156     log check_lib2 "$@"
1157     headers="$1"
1158     funcs="$2"
1159     shift 2
1160     check_func_headers "$headers" "$funcs" "$@" && add_extralibs "$@"
1161 }
1162
1163 check_lib_cpp(){
1164     log check_lib_cpp "$@"
1165     headers="$1"
1166     classes="$2"
1167     shift 2
1168     check_class_headers_cpp "$headers" "$classes" "$@" && add_extralibs "$@"
1169 }
1170
1171 check_pkg_config(){
1172     log check_pkg_config "$@"
1173     pkgandversion="$1"
1174     pkg="${1%% *}"
1175     headers="$2"
1176     funcs="$3"
1177     shift 3
1178     check_cmd $pkg_config --exists --print-errors $pkgandversion || return
1179     pkg_cflags=$($pkg_config --cflags $pkg_config_flags $pkg)
1180     pkg_libs=$($pkg_config --libs $pkg_config_flags $pkg)
1181     check_func_headers "$headers" "$funcs" $pkg_cflags $pkg_libs "$@" &&
1182         set_safe "${pkg}_cflags" $pkg_cflags   &&
1183         set_safe "${pkg}_libs"   $pkg_libs
1184 }
1185
1186 check_exec(){
1187     check_ld "cc" "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
1188 }
1189
1190 check_exec_crash(){
1191     code=$(cat)
1192
1193     # exit() is not async signal safe.  _Exit (C99) and _exit (POSIX)
1194     # are safe but may not be available everywhere.  Thus we use
1195     # raise(SIGTERM) instead.  The check is run in a subshell so we
1196     # can redirect the "Terminated" message from the shell.  SIGBUS
1197     # is not defined by standard C so it is used conditionally.
1198
1199     (check_exec "$@") >> $logfile 2>&1 <<EOF
1200 #include <signal.h>
1201 static void sighandler(int sig){
1202     raise(SIGTERM);
1203 }
1204 int foo(void){
1205     $code
1206 }
1207 int (*func_ptr)(void) = foo;
1208 int main(void){
1209     signal(SIGILL, sighandler);
1210     signal(SIGFPE, sighandler);
1211     signal(SIGSEGV, sighandler);
1212 #ifdef SIGBUS
1213     signal(SIGBUS, sighandler);
1214 #endif
1215     return func_ptr();
1216 }
1217 EOF
1218 }
1219
1220 check_type(){
1221     log check_type "$@"
1222     headers=$1
1223     type=$2
1224     shift 2
1225     disable_safe "$type"
1226     check_code cc "$headers" "$type v" "$@" && enable_safe "$type"
1227 }
1228
1229 check_struct(){
1230     log check_struct "$@"
1231     headers=$1
1232     struct=$2
1233     member=$3
1234     shift 3
1235     disable_safe "${struct}_${member}"
1236     check_code cc "$headers" "const void *p = &(($struct *)0)->$member" "$@" &&
1237         enable_safe "${struct}_${member}"
1238 }
1239
1240 check_builtin(){
1241     log check_builtin "$@"
1242     name=$1
1243     headers=$2
1244     builtin=$3
1245     shift 3
1246     disable "$name"
1247     check_code ld "$headers" "$builtin" "cc" "$@" && enable "$name"
1248 }
1249
1250 check_compile_assert(){
1251     log check_compile_assert "$@"
1252     name=$1
1253     headers=$2
1254     condition=$3
1255     shift 3
1256     disable "$name"
1257     check_code cc "$headers" "char c[2 * !!($condition) - 1]" "$@" && enable "$name"
1258 }
1259
1260 require(){
1261     name="$1"
1262     header="$2"
1263     func="$3"
1264     shift 3
1265     check_lib $header $func "$@" || die "ERROR: $name not found"
1266 }
1267
1268 require2(){
1269     name="$1"
1270     headers="$2"
1271     func="$3"
1272     shift 3
1273     check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
1274 }
1275
1276 require_cpp(){
1277     name="$1"
1278     headers="$2"
1279     classes="$3"
1280     shift 3
1281     check_lib_cpp "$headers" "$classes" "$@" || die "ERROR: $name not found"
1282 }
1283
1284 use_pkg_config(){
1285     pkg="$1"
1286     check_pkg_config "$@" || return 1
1287     add_cflags    $(get_safe "${pkg}_cflags")
1288     add_extralibs $(get_safe "${pkg}_libs")
1289 }
1290
1291 require_pkg_config(){
1292     use_pkg_config "$@" || die "ERROR: $pkg not found using pkg-config$pkg_config_fail_message"
1293 }
1294
1295 require_libfreetype(){
1296     log require_libfreetype "$@"
1297     pkg="freetype2"
1298     check_cmd $pkg_config --exists --print-errors $pkg \
1299       || die "ERROR: $pkg not found"
1300     pkg_cflags=$($pkg_config --cflags $pkg_config_flags $pkg)
1301     pkg_libs=$($pkg_config --libs $pkg_config_flags $pkg)
1302     {
1303         echo "#include <ft2build.h>"
1304         echo "#include FT_FREETYPE_H"
1305         echo "long check_func(void) { return (long) FT_Init_FreeType; }"
1306         echo "int main(void) { return 0; }"
1307     } | check_ld "cc" $pkg_cflags $pkg_libs \
1308       && set_safe "${pkg}_cflags" $pkg_cflags \
1309       && set_safe "${pkg}_libs"   $pkg_libs \
1310       || die "ERROR: $pkg not found"
1311     add_cflags    $(get_safe "${pkg}_cflags")
1312     add_extralibs $(get_safe "${pkg}_libs")
1313 }
1314
1315 hostcc_e(){
1316     eval printf '%s\\n' $HOSTCC_E
1317 }
1318
1319 hostcc_o(){
1320     eval printf '%s\\n' $HOSTCC_O
1321 }
1322
1323 check_host_cc(){
1324     log check_host_cc "$@"
1325     cat > $TMPC
1326     log_file $TMPC
1327     check_cmd $host_cc $host_cflags "$@" $HOSTCC_C $(hostcc_o $TMPO) $TMPC
1328 }
1329
1330 check_host_cpp(){
1331     log check_host_cpp "$@"
1332     cat > $TMPC
1333     log_file $TMPC
1334     check_cmd $host_cc $host_cppflags $host_cflags "$@" $(hostcc_e $TMPO) $TMPC
1335 }
1336
1337 check_host_cppflags(){
1338     log check_host_cppflags "$@"
1339     check_host_cc "$@" <<EOF && append host_cppflags "$@"
1340 int x;
1341 EOF
1342 }
1343
1344 check_host_cflags(){
1345     log check_host_cflags "$@"
1346     set -- $($host_cflags_filter "$@")
1347     check_host_cc "$@" <<EOF && append host_cflags "$@"
1348 int x;
1349 EOF
1350 }
1351
1352 check_host_cpp_condition(){
1353     log check_host_cpp_condition "$@"
1354     header=$1
1355     condition=$2
1356     shift 2
1357     check_host_cpp "$@" <<EOF
1358 #include <$header>
1359 #if !($condition)
1360 #error "unsatisfied condition: $condition"
1361 #endif
1362 EOF
1363 }
1364
1365 cp_if_changed(){
1366     cmp -s "$1" "$2" && echo "$2 is unchanged" && return
1367     mkdir -p "$(dirname $2)"
1368     $cp_f "$1" "$2"
1369 }
1370
1371 # CONFIG_LIST contains configurable options, while HAVE_LIST is for
1372 # system-dependent things.
1373
1374 AVCODEC_COMPONENTS="
1375     bsfs
1376     decoders
1377     encoders
1378     hwaccels
1379     parsers
1380 "
1381
1382 AVDEVICE_COMPONENTS="
1383     indevs
1384     outdevs
1385 "
1386 AVFILTER_COMPONENTS="
1387     filters
1388 "
1389 AVFORMAT_COMPONENTS="
1390     demuxers
1391     muxers
1392     protocols
1393 "
1394
1395 AVRESAMPLE_COMPONENTS=""
1396 AVUTIL_COMPONENTS=""
1397
1398 COMPONENT_LIST="
1399     $AVCODEC_COMPONENTS
1400     $AVDEVICE_COMPONENTS
1401     $AVFILTER_COMPONENTS
1402     $AVFORMAT_COMPONENTS
1403     $AVRESAMPLE_COMPONENTS
1404     $AVUTIL_COMPONENTS
1405 "
1406
1407 EXAMPLE_LIST="
1408     avio_reading_example
1409     avio_dir_cmd_example
1410     decoding_encoding_example
1411     demuxing_decoding_example
1412     extract_mvs_example
1413     filter_audio_example
1414     filtering_audio_example
1415     filtering_video_example
1416     metadata_example
1417     muxing_example
1418     qsvdec_example
1419     remuxing_example
1420     resampling_audio_example
1421     scaling_video_example
1422     transcode_aac_example
1423     transcoding_example
1424 "
1425
1426 EXTERNAL_LIBRARY_LIST="
1427     avisynth
1428     bzlib
1429     chromaprint
1430     crystalhd
1431     cuda
1432     decklink
1433     frei0r
1434     gcrypt
1435     gmp
1436     gnutls
1437     iconv
1438     ladspa
1439     libass
1440     libbluray
1441     libbs2b
1442     libcaca
1443     libcdio
1444     libcelt
1445     libdc1394
1446     libdcadec
1447     libfaac
1448     libfdk_aac
1449     libflite
1450     libfontconfig
1451     libfreetype
1452     libfribidi
1453     libgme
1454     libgsm
1455     libiec61883
1456     libilbc
1457     libkvazaar
1458     libmfx
1459     libmodplug
1460     libmp3lame
1461     libnut
1462     libopencore_amrnb
1463     libopencore_amrwb
1464     libopencv
1465     libopenh264
1466     libopenjpeg
1467     libopus
1468     libpulse
1469     librtmp
1470     librubberband
1471     libschroedinger
1472     libshine
1473     libsmbclient
1474     libsnappy
1475     libsoxr
1476     libspeex
1477     libssh
1478     libtesseract
1479     libtheora
1480     libtwolame
1481     libutvideo
1482     libv4l2
1483     libvidstab
1484     libvo_amrwbenc
1485     libvorbis
1486     libvpx
1487     libwavpack
1488     libwebp
1489     libx264
1490     libx265
1491     libxavs
1492     libxcb
1493     libxcb_shm
1494     libxcb_shape
1495     libxcb_xfixes
1496     libxvid
1497     libzimg
1498     libzmq
1499     libzvbi
1500     lzma
1501     mmal
1502     netcdf
1503     nvenc
1504     openal
1505     opencl
1506     opengl
1507     openssl
1508     schannel
1509     sdl
1510     securetransport
1511     x11grab
1512     xlib
1513     zlib
1514 "
1515
1516 DOCUMENT_LIST="
1517     doc
1518     htmlpages
1519     manpages
1520     podpages
1521     txtpages
1522 "
1523
1524 FEATURE_LIST="
1525     ftrapv
1526     gray
1527     hardcoded_tables
1528     runtime_cpudetect
1529     safe_bitstream_reader
1530     shared
1531     small
1532     static
1533     swscale_alpha
1534 "
1535
1536 HWACCEL_LIST="
1537     d3d11va
1538     dxva2
1539     vaapi
1540     vda
1541     vdpau
1542     videotoolbox
1543     xvmc
1544 "
1545
1546 LIBRARY_LIST="
1547     avcodec
1548     avdevice
1549     avfilter
1550     avformat
1551     avresample
1552     avutil
1553     postproc
1554     swresample
1555     swscale
1556 "
1557
1558 LICENSE_LIST="
1559     gpl
1560     nonfree
1561     version3
1562 "
1563
1564 PROGRAM_LIST="
1565     ffplay
1566     ffprobe
1567     ffserver
1568     ffmpeg
1569 "
1570
1571 SUBSYSTEM_LIST="
1572     dct
1573     dwt
1574     error_resilience
1575     faan
1576     fast_unaligned
1577     fft
1578     lsp
1579     lzo
1580     mdct
1581     pixelutils
1582     network
1583     rdft
1584 "
1585
1586 CONFIG_LIST="
1587     $COMPONENT_LIST
1588     $DOCUMENT_LIST
1589     $EXAMPLE_LIST
1590     $EXTERNAL_LIBRARY_LIST
1591     $FEATURE_LIST
1592     $HWACCEL_LIST
1593     $LICENSE_LIST
1594     $LIBRARY_LIST
1595     $PROGRAM_LIST
1596     $SUBSYSTEM_LIST
1597     fontconfig
1598     incompatible_libav_abi
1599     memalign_hack
1600     memory_poisoning
1601     neon_clobber_test
1602     pic
1603     pod2man
1604     raise_major
1605     thumb
1606     valgrind_backtrace
1607     xmm_clobber_test
1608 "
1609
1610 THREADS_LIST="
1611     pthreads
1612     os2threads
1613     w32threads
1614 "
1615
1616 ATOMICS_LIST="
1617     atomics_gcc
1618     atomics_suncc
1619     atomics_win32
1620 "
1621
1622 ARCH_LIST="
1623     aarch64
1624     alpha
1625     arm
1626     avr32
1627     avr32_ap
1628     avr32_uc
1629     bfin
1630     ia64
1631     m68k
1632     mips
1633     mips64
1634     parisc
1635     ppc
1636     ppc64
1637     s390
1638     sh4
1639     sparc
1640     sparc64
1641     tilegx
1642     tilepro
1643     tomi
1644     x86
1645     x86_32
1646     x86_64
1647 "
1648
1649 ARCH_EXT_LIST_ARM="
1650     armv5te
1651     armv6
1652     armv6t2
1653     armv8
1654     neon
1655     vfp
1656     vfpv3
1657     setend
1658 "
1659
1660 ARCH_EXT_LIST_MIPS="
1661     mipsfpu
1662     mips32r2
1663     mips64r2
1664     mips32r6
1665     mips64r6
1666     mipsdsp
1667     mipsdspr2
1668     msa
1669 "
1670
1671 ARCH_EXT_LIST_LOONGSON="
1672     loongson2
1673     loongson3
1674     mmi
1675 "
1676
1677 ARCH_EXT_LIST_X86_SIMD="
1678     aesni
1679     amd3dnow
1680     amd3dnowext
1681     avx
1682     avx2
1683     fma3
1684     fma4
1685     mmx
1686     mmxext
1687     sse
1688     sse2
1689     sse3
1690     sse4
1691     sse42
1692     ssse3
1693     xop
1694 "
1695
1696 ARCH_EXT_LIST_PPC="
1697     altivec
1698     dcbzl
1699     ldbrx
1700     power8
1701     ppc4xx
1702     vsx
1703 "
1704
1705 ARCH_EXT_LIST_X86="
1706     $ARCH_EXT_LIST_X86_SIMD
1707     cpunop
1708     i686
1709 "
1710
1711 ARCH_EXT_LIST="
1712     $ARCH_EXT_LIST_ARM
1713     $ARCH_EXT_LIST_PPC
1714     $ARCH_EXT_LIST_X86
1715     $ARCH_EXT_LIST_MIPS
1716     $ARCH_EXT_LIST_LOONGSON
1717 "
1718
1719 ARCH_FEATURES="
1720     aligned_stack
1721     fast_64bit
1722     fast_clz
1723     fast_cmov
1724     local_aligned_8
1725     local_aligned_16
1726     local_aligned_32
1727     simd_align_16
1728 "
1729
1730 BUILTIN_LIST="
1731     atomic_cas_ptr
1732     atomic_compare_exchange
1733     machine_rw_barrier
1734     MemoryBarrier
1735     mm_empty
1736     rdtsc
1737     sarestart
1738     sem_timedwait
1739     sync_val_compare_and_swap
1740 "
1741 HAVE_LIST_CMDLINE="
1742     inline_asm
1743     symver
1744     yasm
1745 "
1746
1747 HAVE_LIST_PUB="
1748     bigendian
1749     fast_unaligned
1750     incompatible_libav_abi
1751 "
1752
1753 HEADERS_LIST="
1754     alsa_asoundlib_h
1755     altivec_h
1756     arpa_inet_h
1757     asm_types_h
1758     cdio_paranoia_h
1759     cdio_paranoia_paranoia_h
1760     dispatch_dispatch_h
1761     dev_bktr_ioctl_bt848_h
1762     dev_bktr_ioctl_meteor_h
1763     dev_ic_bt8xx_h
1764     dev_video_bktr_ioctl_bt848_h
1765     dev_video_meteor_ioctl_meteor_h
1766     direct_h
1767     dirent_h
1768     dlfcn_h
1769     d3d11_h
1770     dxva_h
1771     ES2_gl_h
1772     gsm_h
1773     io_h
1774     mach_mach_time_h
1775     machine_ioctl_bt848_h
1776     machine_ioctl_meteor_h
1777     malloc_h
1778     opencv2_core_core_c_h
1779     openjpeg_2_1_openjpeg_h
1780     openjpeg_2_0_openjpeg_h
1781     openjpeg_1_5_openjpeg_h
1782     OpenGL_gl3_h
1783     poll_h
1784     sndio_h
1785     soundcard_h
1786     sys_mman_h
1787     sys_param_h
1788     sys_resource_h
1789     sys_select_h
1790     sys_soundcard_h
1791     sys_time_h
1792     sys_un_h
1793     sys_videoio_h
1794     termios_h
1795     udplite_h
1796     unistd_h
1797     valgrind_valgrind_h
1798     windows_h
1799     winsock2_h
1800 "
1801
1802 INTRINSICS_LIST="
1803     intrinsics_neon
1804 "
1805
1806 COMPLEX_FUNCS="
1807     cabs
1808     cexp
1809 "
1810
1811 MATH_FUNCS="
1812     atanf
1813     atan2f
1814     cbrt
1815     cbrtf
1816     copysign
1817     cosf
1818     erf
1819     exp2
1820     exp2f
1821     expf
1822     hypot
1823     isfinite
1824     isinf
1825     isnan
1826     ldexpf
1827     llrint
1828     llrintf
1829     log2
1830     log2f
1831     log10f
1832     lrint
1833     lrintf
1834     powf
1835     rint
1836     round
1837     roundf
1838     sinf
1839     trunc
1840     truncf
1841 "
1842
1843 SYSTEM_FUNCS="
1844     access
1845     aligned_malloc
1846     arc4random
1847     clock_gettime
1848     closesocket
1849     CommandLineToArgvW
1850     CoTaskMemFree
1851     CryptGenRandom
1852     dlopen
1853     fcntl
1854     flt_lim
1855     fork
1856     getaddrinfo
1857     gethrtime
1858     getopt
1859     GetProcessAffinityMask
1860     GetProcessMemoryInfo
1861     GetProcessTimes
1862     getrusage
1863     GetSystemTimeAsFileTime
1864     gettimeofday
1865     glob
1866     glXGetProcAddress
1867     gmtime_r
1868     inet_aton
1869     isatty
1870     jack_port_get_latency_range
1871     kbhit
1872     localtime_r
1873     lstat
1874     lzo1x_999_compress
1875     mach_absolute_time
1876     MapViewOfFile
1877     memalign
1878     mkstemp
1879     mmap
1880     mprotect
1881     nanosleep
1882     PeekNamedPipe
1883     posix_memalign
1884     pthread_cancel
1885     sched_getaffinity
1886     SetConsoleTextAttribute
1887     SetConsoleCtrlHandler
1888     setmode
1889     setrlimit
1890     Sleep
1891     strerror_r
1892     sysconf
1893     sysctl
1894     usleep
1895     UTGetOSTypeFromString
1896     VirtualAlloc
1897     wglGetProcAddress
1898 "
1899
1900 TOOLCHAIN_FEATURES="
1901     as_dn_directive
1902     as_func
1903     as_object_arch
1904     asm_mod_q
1905     attribute_may_alias
1906     attribute_packed
1907     ebp_available
1908     ebx_available
1909     gnu_as
1910     gnu_windres
1911     ibm_asm
1912     inline_asm_direct_symbol_refs
1913     inline_asm_labels
1914     inline_asm_nonlocal_labels
1915     pragma_deprecated
1916     rsync_contimeout
1917     symver_asm_label
1918     symver_gnu_asm
1919     vfp_args
1920     xform_asm
1921     xmm_clobbers
1922 "
1923
1924 TYPES_LIST="
1925     CONDITION_VARIABLE_Ptr
1926     socklen_t
1927     struct_addrinfo
1928     struct_group_source_req
1929     struct_ip_mreq_source
1930     struct_ipv6_mreq
1931     struct_pollfd
1932     struct_rusage_ru_maxrss
1933     struct_sctp_event_subscribe
1934     struct_sockaddr_in6
1935     struct_sockaddr_sa_len
1936     struct_sockaddr_storage
1937     struct_stat_st_mtim_tv_nsec
1938     struct_v4l2_frmivalenum_discrete
1939 "
1940
1941 HAVE_LIST="
1942     $ARCH_EXT_LIST
1943     $(add_suffix _external $ARCH_EXT_LIST)
1944     $(add_suffix _inline   $ARCH_EXT_LIST)
1945     $ARCH_FEATURES
1946     $ATOMICS_LIST
1947     $BUILTIN_LIST
1948     $COMPLEX_FUNCS
1949     $HAVE_LIST_CMDLINE
1950     $HAVE_LIST_PUB
1951     $HEADERS_LIST
1952     $INTRINSICS_LIST
1953     $MATH_FUNCS
1954     $SYSTEM_FUNCS
1955     $THREADS_LIST
1956     $TOOLCHAIN_FEATURES
1957     $TYPES_LIST
1958     atomics_native
1959     dos_paths
1960     dxva2_lib
1961     dxva2api_cobj
1962     libc_msvcrt
1963     libdc1394_1
1964     libdc1394_2
1965     makeinfo
1966     makeinfo_html
1967     perl
1968     pod2man
1969     sdl
1970     section_data_rel_ro
1971     texi2html
1972     threads
1973     vaapi_x11
1974     vdpau_x11
1975     winrt
1976     xlib
1977 "
1978
1979 # options emitted with CONFIG_ prefix but not available on the command line
1980 CONFIG_EXTRA="
1981     aandcttables
1982     ac3dsp
1983     audio_frame_queue
1984     audiodsp
1985     blockdsp
1986     bswapdsp
1987     cabac
1988     dirac_parse
1989     dvprofile
1990     exif
1991     faandct
1992     faanidct
1993     fdctdsp
1994     flacdsp
1995     fmtconvert
1996     frame_thread_encoder
1997     g722dsp
1998     golomb
1999     gplv3
2000     h263dsp
2001     h264chroma
2002     h264dsp
2003     h264pred
2004     h264qpel
2005     hpeldsp
2006     huffman
2007     huffyuvdsp
2008     huffyuvencdsp
2009     idctdsp
2010     iirfilter
2011     imdct15
2012     intrax8
2013     iso_media
2014     ividsp
2015     jpegtables
2016     lgplv3
2017     libx262
2018     llauddsp
2019     llviddsp
2020     lpc
2021     lzf
2022     me_cmp
2023     mpeg_er
2024     mpegaudio
2025     mpegaudiodsp
2026     mpegvideo
2027     mpegvideoenc
2028     mss34dsp
2029     pixblockdsp
2030     qpeldsp
2031     qsv
2032     qsvdec
2033     qsvenc
2034     rangecoder
2035     riffdec
2036     riffenc
2037     rtpdec
2038     rtpenc_chain
2039     rv34dsp
2040     sinewin
2041     snappy
2042     startcode
2043     texturedsp
2044     texturedspenc
2045     tpeldsp
2046     vc1dsp
2047     videodsp
2048     vp3dsp
2049     vp56dsp
2050     vp8dsp
2051     wma_freqs
2052     wmv2dsp
2053 "
2054
2055 CMDLINE_SELECT="
2056     $ARCH_EXT_LIST
2057     $CONFIG_LIST
2058     $HAVE_LIST_CMDLINE
2059     $THREADS_LIST
2060     asm
2061     cross_compile
2062     debug
2063     extra_warnings
2064     logging
2065     lto
2066     optimizations
2067     rpath
2068     stripping
2069 "
2070
2071 PATHS_LIST="
2072     bindir
2073     datadir
2074     docdir
2075     incdir
2076     libdir
2077     mandir
2078     pkgconfigdir
2079     prefix
2080     shlibdir
2081 "
2082
2083 CMDLINE_SET="
2084     $PATHS_LIST
2085     ar
2086     arch
2087     as
2088     assert_level
2089     build_suffix
2090     cc
2091     objcc
2092     cpu
2093     cross_prefix
2094     custom_allocator
2095     cxx
2096     dep_cc
2097     doxygen
2098     env
2099     extra_version
2100     gas
2101     host_cc
2102     host_cflags
2103     host_ld
2104     host_ldflags
2105     host_libs
2106     host_os
2107     install
2108     ld
2109     logfile
2110     malloc_prefix
2111     nm
2112     optflags
2113     pkg_config
2114     pkg_config_flags
2115     progs_suffix
2116     random_seed
2117     ranlib
2118     samples
2119     strip
2120     sws_max_filter_size
2121     sysinclude
2122     sysroot
2123     target_exec
2124     target_os
2125     target_path
2126     target_samples
2127     tempprefix
2128     toolchain
2129     valgrind
2130     yasmexe
2131 "
2132
2133 CMDLINE_APPEND="
2134     extra_cflags
2135     extra_cxxflags
2136     extra_objcflags
2137     host_cppflags
2138 "
2139
2140 # code dependency declarations
2141
2142 # architecture extensions
2143
2144 armv5te_deps="arm"
2145 armv6_deps="arm"
2146 armv6t2_deps="arm"
2147 armv8_deps="aarch64"
2148 neon_deps_any="aarch64 arm"
2149 intrinsics_neon_deps="neon"
2150 vfp_deps_any="aarch64 arm"
2151 vfpv3_deps="vfp"
2152 setend_deps="arm"
2153
2154 map 'eval ${v}_inline_deps=inline_asm' $ARCH_EXT_LIST_ARM
2155
2156 mipsfpu_deps="mips"
2157 mipsdsp_deps="mips"
2158 mipsdspr2_deps="mips"
2159 mips32r2_deps="mips"
2160 mips32r6_deps="mips"
2161 mips64r2_deps="mips"
2162 mips64r6_deps="mips"
2163 msa_deps="mips"
2164 mmi_deps="mips"
2165
2166 altivec_deps="ppc"
2167 dcbzl_deps="ppc"
2168 ldbrx_deps="ppc"
2169 ppc4xx_deps="ppc"
2170 vsx_deps="altivec"
2171 power8_deps="vsx"
2172
2173 cpunop_deps="i686"
2174 x86_64_select="i686"
2175 x86_64_suggest="fast_cmov"
2176
2177 amd3dnow_deps="mmx"
2178 amd3dnowext_deps="amd3dnow"
2179 i686_deps="x86"
2180 mmx_deps="x86"
2181 mmxext_deps="mmx"
2182 sse_deps="mmxext"
2183 sse2_deps="sse"
2184 sse3_deps="sse2"
2185 ssse3_deps="sse3"
2186 sse4_deps="ssse3"
2187 sse42_deps="sse4"
2188 aesni_deps="sse42"
2189 avx_deps="sse42"
2190 xop_deps="avx"
2191 fma3_deps="avx"
2192 fma4_deps="avx"
2193 avx2_deps="avx"
2194
2195 mmx_external_deps="yasm"
2196 mmx_inline_deps="inline_asm"
2197 mmx_suggest="mmx_external mmx_inline"
2198
2199 for ext in $(filter_out mmx $ARCH_EXT_LIST_X86_SIMD); do
2200     eval dep=\$${ext}_deps
2201     eval ${ext}_external_deps='"${dep}_external"'
2202     eval ${ext}_inline_deps='"${dep}_inline"'
2203     eval ${ext}_suggest='"${ext}_external ${ext}_inline"'
2204 done
2205
2206 aligned_stack_if_any="aarch64 ppc x86"
2207 fast_64bit_if_any="aarch64 alpha ia64 mips64 parisc64 ppc64 sparc64 x86_64"
2208 fast_clz_if_any="aarch64 alpha avr32 mips ppc x86"
2209 fast_unaligned_if_any="aarch64 ppc x86"
2210 simd_align_16_if_any="altivec neon sse"
2211
2212 # system capabilities
2213 symver_if_any="symver_asm_label symver_gnu_asm"
2214 valgrind_backtrace_deps="!optimizations valgrind_valgrind_h"
2215
2216 # threading support
2217 atomics_gcc_if_any="sync_val_compare_and_swap atomic_compare_exchange"
2218 atomics_suncc_if="atomic_cas_ptr machine_rw_barrier"
2219 atomics_win32_if="MemoryBarrier"
2220 atomics_native_if_any="$ATOMICS_LIST"
2221 w32threads_deps="atomics_native"
2222 threads_if_any="$THREADS_LIST"
2223
2224 # subsystems
2225 dct_select="rdft"
2226 dirac_parse_select="golomb"
2227 error_resilience_select="me_cmp"
2228 faandct_deps="faan fdctdsp"
2229 faanidct_deps="faan idctdsp"
2230 h264dsp_select="startcode"
2231 frame_thread_encoder_deps="encoders threads"
2232 intrax8_select="error_resilience"
2233 mdct_select="fft"
2234 me_cmp_select="fdctdsp idctdsp pixblockdsp"
2235 mpeg_er_select="error_resilience"
2236 mpegaudio_select="mpegaudiodsp"
2237 mpegaudiodsp_select="dct"
2238 mpegvideo_select="blockdsp h264chroma hpeldsp idctdsp me_cmp mpeg_er videodsp"
2239 mpegvideoenc_select="me_cmp mpegvideo pixblockdsp qpeldsp"
2240 qsvdec_select="qsv"
2241 qsvenc_select="qsv"
2242 vc1dsp_select="h264chroma qpeldsp startcode"
2243 rdft_select="fft"
2244
2245 # decoders / encoders
2246 aac_decoder_select="imdct15 mdct sinewin"
2247 aac_fixed_decoder_select="mdct sinewin"
2248 aac_encoder_select="audio_frame_queue iirfilter lpc mdct sinewin"
2249 aac_latm_decoder_select="aac_decoder aac_latm_parser"
2250 ac3_decoder_select="ac3_parser ac3dsp bswapdsp fmtconvert mdct"
2251 ac3_fixed_decoder_select="ac3_parser ac3dsp bswapdsp mdct"
2252 ac3_encoder_select="ac3dsp audiodsp mdct me_cmp"
2253 ac3_fixed_encoder_select="ac3dsp audiodsp mdct me_cmp"
2254 adpcm_g722_decoder_select="g722dsp"
2255 adpcm_g722_encoder_select="g722dsp"
2256 aic_decoder_select="golomb idctdsp"
2257 alac_encoder_select="lpc"
2258 als_decoder_select="bswapdsp"
2259 amrnb_decoder_select="lsp"
2260 amrwb_decoder_select="lsp"
2261 amv_decoder_select="sp5x_decoder exif"
2262 amv_encoder_select="aandcttables jpegtables mpegvideoenc"
2263 ape_decoder_select="bswapdsp llauddsp"
2264 apng_decoder_select="zlib"
2265 apng_encoder_select="huffyuvencdsp zlib"
2266 asv1_decoder_select="blockdsp bswapdsp idctdsp"
2267 asv1_encoder_select="bswapdsp fdctdsp pixblockdsp"
2268 asv2_decoder_select="blockdsp bswapdsp idctdsp"
2269 asv2_encoder_select="bswapdsp fdctdsp pixblockdsp"
2270 atrac1_decoder_select="mdct sinewin"
2271 atrac3_decoder_select="mdct"
2272 atrac3p_decoder_select="mdct sinewin"
2273 avrn_decoder_select="exif jpegtables"
2274 bink_decoder_select="blockdsp hpeldsp"
2275 binkaudio_dct_decoder_select="mdct rdft dct sinewin wma_freqs"
2276 binkaudio_rdft_decoder_select="mdct rdft sinewin wma_freqs"
2277 cavs_decoder_select="blockdsp golomb h264chroma idctdsp qpeldsp videodsp"
2278 cllc_decoder_select="bswapdsp"
2279 comfortnoise_encoder_select="lpc"
2280 cook_decoder_select="audiodsp mdct sinewin"
2281 cscd_decoder_select="lzo"
2282 cscd_decoder_suggest="zlib"
2283 dca_decoder_select="mdct"
2284 dds_decoder_select="texturedsp"
2285 dirac_decoder_select="dirac_parse dwt golomb videodsp mpegvideoenc"
2286 dnxhd_decoder_select="blockdsp idctdsp"
2287 dnxhd_encoder_select="aandcttables blockdsp fdctdsp idctdsp mpegvideoenc pixblockdsp"
2288 dvvideo_decoder_select="dvprofile idctdsp"
2289 dvvideo_encoder_select="dvprofile fdctdsp me_cmp pixblockdsp"
2290 dxa_decoder_select="zlib"
2291 dxv_decoder_select="lzf texturedsp"
2292 eac3_decoder_select="ac3_decoder"
2293 eac3_encoder_select="ac3_encoder"
2294 eamad_decoder_select="aandcttables blockdsp bswapdsp idctdsp mpegvideo"
2295 eatgq_decoder_select="aandcttables"
2296 eatqi_decoder_select="aandcttables blockdsp bswapdsp idctdsp"
2297 exr_decoder_select="zlib"
2298 ffv1_decoder_select="golomb rangecoder"
2299 ffv1_encoder_select="rangecoder"
2300 ffvhuff_decoder_select="huffyuv_decoder"
2301 ffvhuff_encoder_select="huffyuv_encoder"
2302 fic_decoder_select="golomb"
2303 flac_decoder_select="flacdsp golomb"
2304 flac_encoder_select="bswapdsp flacdsp golomb lpc"
2305 flashsv2_decoder_select="zlib"
2306 flashsv2_encoder_select="zlib"
2307 flashsv_decoder_select="zlib"
2308 flashsv_encoder_select="zlib"
2309 flv_decoder_select="h263_decoder"
2310 flv_encoder_select="h263_encoder"
2311 fourxm_decoder_select="blockdsp bswapdsp"
2312 fraps_decoder_select="bswapdsp huffman"
2313 g2m_decoder_select="blockdsp idctdsp jpegtables zlib"
2314 g729_decoder_select="audiodsp"
2315 h261_decoder_select="mpegvideo"
2316 h261_encoder_select="aandcttables mpegvideoenc"
2317 h263_decoder_select="h263_parser h263dsp mpegvideo qpeldsp"
2318 h263_encoder_select="aandcttables h263dsp mpegvideoenc"
2319 h263i_decoder_select="h263_decoder"
2320 h263p_decoder_select="h263_decoder"
2321 h263p_encoder_select="h263_encoder"
2322 h264_decoder_select="cabac golomb h264chroma h264dsp h264pred h264qpel videodsp"
2323 h264_decoder_suggest="error_resilience"
2324 h264_qsv_decoder_deps="libmfx"
2325 h264_qsv_decoder_select="h264_mp4toannexb_bsf h264_parser qsvdec h264_qsv_hwaccel"
2326 h264_qsv_encoder_deps="libmfx"
2327 h264_qsv_encoder_select="qsvenc"
2328 hap_decoder_select="snappy texturedsp"
2329 hap_encoder_deps="libsnappy"
2330 hap_encoder_select="texturedspenc"
2331 hevc_decoder_select="bswapdsp cabac golomb videodsp"
2332 hevc_qsv_decoder_deps="libmfx"
2333 hevc_qsv_decoder_select="hevc_mp4toannexb_bsf hevc_parser qsvdec hevc_qsv_hwaccel"
2334 hevc_qsv_encoder_deps="libmfx"
2335 hevc_qsv_encoder_select="qsvenc"
2336 huffyuv_decoder_select="bswapdsp huffyuvdsp llviddsp"
2337 huffyuv_encoder_select="bswapdsp huffman huffyuvencdsp llviddsp"
2338 iac_decoder_select="imc_decoder"
2339 imc_decoder_select="bswapdsp fft mdct sinewin"
2340 indeo3_decoder_select="hpeldsp"
2341 indeo4_decoder_select="ividsp"
2342 indeo5_decoder_select="ividsp"
2343 interplay_video_decoder_select="hpeldsp"
2344 jpegls_decoder_select="golomb mjpeg_decoder"
2345 jpegls_encoder_select="golomb"
2346 jv_decoder_select="blockdsp"
2347 lagarith_decoder_select="huffyuvdsp"
2348 ljpeg_encoder_select="aandcttables idctdsp jpegtables"
2349 loco_decoder_select="golomb"
2350 mdec_decoder_select="blockdsp idctdsp mpegvideo"
2351 metasound_decoder_select="lsp mdct sinewin"
2352 mimic_decoder_select="blockdsp bswapdsp hpeldsp idctdsp"
2353 mjpeg_decoder_select="blockdsp hpeldsp exif idctdsp jpegtables"
2354 mjpeg_encoder_select="aandcttables jpegtables mpegvideoenc"
2355 mjpegb_decoder_select="mjpeg_decoder"
2356 mlp_decoder_select="mlp_parser"
2357 motionpixels_decoder_select="bswapdsp"
2358 mp1_decoder_select="mpegaudio"
2359 mp1float_decoder_select="mpegaudio"
2360 mp2_decoder_select="mpegaudio"
2361 mp2float_decoder_select="mpegaudio"
2362 mp3_decoder_select="mpegaudio"
2363 mp3adu_decoder_select="mpegaudio"
2364 mp3adufloat_decoder_select="mpegaudio"
2365 mp3float_decoder_select="mpegaudio"
2366 mp3on4_decoder_select="mpegaudio"
2367 mp3on4float_decoder_select="mpegaudio"
2368 mpc7_decoder_select="bswapdsp mpegaudiodsp"
2369 mpc8_decoder_select="mpegaudiodsp"
2370 mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h"
2371 mpeg_xvmc_decoder_select="mpeg2video_decoder"
2372 mpegvideo_decoder_select="mpegvideo"
2373 mpeg1video_decoder_select="mpegvideo"
2374 mpeg1video_encoder_select="aandcttables mpegvideoenc h263dsp"
2375 mpeg2video_decoder_select="mpegvideo"
2376 mpeg2video_encoder_select="aandcttables mpegvideoenc h263dsp"
2377 mpeg2_qsv_decoder_deps="libmfx"
2378 mpeg2_qsv_decoder_select="qsvdec mpeg2_qsv_hwaccel"
2379 mpeg2_qsv_encoder_deps="libmfx"
2380 mpeg2_qsv_encoder_select="qsvenc"
2381 mpeg4_decoder_select="h263_decoder mpeg4video_parser"
2382 mpeg4_encoder_select="h263_encoder"
2383 msa1_decoder_select="mss34dsp"
2384 msmpeg4v1_decoder_select="h263_decoder"
2385 msmpeg4v2_decoder_select="h263_decoder"
2386 msmpeg4v2_encoder_select="h263_encoder"
2387 msmpeg4v3_decoder_select="h263_decoder"
2388 msmpeg4v3_encoder_select="h263_encoder"
2389 mss2_decoder_select="vc1_decoder mpegvideo"
2390 mts2_decoder_select="mss34dsp"
2391 mxpeg_decoder_select="mjpeg_decoder"
2392 nellymoser_decoder_select="mdct sinewin"
2393 nellymoser_encoder_select="audio_frame_queue mdct sinewin"
2394 nuv_decoder_select="idctdsp lzo"
2395 on2avc_decoder_select="mdct"
2396 opus_decoder_deps="swresample"
2397 opus_decoder_select="imdct15"
2398 png_decoder_select="zlib"
2399 png_encoder_select="huffyuvencdsp zlib"
2400 prores_decoder_select="blockdsp idctdsp"
2401 prores_encoder_select="fdctdsp"
2402 qcelp_decoder_select="lsp"
2403 qdm2_decoder_select="mdct rdft mpegaudiodsp"
2404 ra_144_decoder_select="audiodsp"
2405 ra_144_encoder_select="audio_frame_queue lpc audiodsp"
2406 ralf_decoder_select="golomb"
2407 rawvideo_decoder_select="bswapdsp"
2408 rscc_decoder_select="zlib"
2409 rtjpeg_decoder_select="me_cmp"
2410 rv10_decoder_select="h263_decoder"
2411 rv10_encoder_select="h263_encoder"
2412 rv20_decoder_select="h263_decoder"
2413 rv20_encoder_select="h263_encoder"
2414 rv30_decoder_select="golomb h264pred h264qpel mpegvideo rv34dsp"
2415 rv40_decoder_select="golomb h264pred h264qpel mpegvideo rv34dsp"
2416 screenpresso_decoder_select="zlib"
2417 shorten_decoder_select="golomb"
2418 sipr_decoder_select="lsp"
2419 snow_decoder_select="dwt h264qpel hpeldsp me_cmp rangecoder videodsp"
2420 snow_encoder_select="aandcttables dwt h264qpel hpeldsp me_cmp mpegvideoenc rangecoder"
2421 sonic_decoder_select="golomb rangecoder"
2422 sonic_encoder_select="golomb rangecoder"
2423 sonic_ls_encoder_select="golomb rangecoder"
2424 sp5x_decoder_select="mjpeg_decoder"
2425 svq1_decoder_select="hpeldsp"
2426 svq1_encoder_select="aandcttables hpeldsp me_cmp mpegvideoenc"
2427 svq3_decoder_select="h264_decoder hpeldsp tpeldsp"
2428 svq3_decoder_suggest="zlib"
2429 tak_decoder_select="audiodsp"
2430 tdsc_decoder_select="zlib mjpeg_decoder"
2431 theora_decoder_select="vp3_decoder"
2432 thp_decoder_select="mjpeg_decoder"
2433 tiff_decoder_suggest="zlib lzma"
2434 tiff_encoder_suggest="zlib"
2435 truehd_decoder_select="mlp_parser"
2436 truemotion2_decoder_select="bswapdsp"
2437 truespeech_decoder_select="bswapdsp"
2438 tscc_decoder_select="zlib"
2439 twinvq_decoder_select="mdct lsp sinewin"
2440 txd_decoder_select="texturedsp"
2441 utvideo_decoder_select="bswapdsp"
2442 utvideo_encoder_select="bswapdsp huffman huffyuvencdsp"
2443 vble_decoder_select="huffyuvdsp"
2444 vc1_decoder_select="blockdsp h263_decoder h264qpel intrax8 mpegvideo vc1dsp"
2445 vc1_qsv_decoder_deps="libmfx"
2446 vc1_qsv_decoder_select="qsvdec vc1_qsv_hwaccel"
2447 vc1image_decoder_select="vc1_decoder"
2448 vorbis_decoder_select="mdct"
2449 vorbis_encoder_select="mdct"
2450 vp3_decoder_select="hpeldsp vp3dsp videodsp"
2451 vp5_decoder_select="h264chroma hpeldsp videodsp vp3dsp vp56dsp"
2452 vp6_decoder_select="h264chroma hpeldsp huffman videodsp vp3dsp vp56dsp"
2453 vp6a_decoder_select="vp6_decoder"
2454 vp6f_decoder_select="vp6_decoder"
2455 vp7_decoder_select="h264pred videodsp vp8dsp"
2456 vp8_decoder_select="h264pred videodsp vp8dsp"
2457 vp9_decoder_select="videodsp vp9_parser"
2458 webp_decoder_select="vp8_decoder exif"
2459 wmalossless_decoder_select="llauddsp"
2460 wmapro_decoder_select="mdct sinewin wma_freqs"
2461 wmav1_decoder_select="mdct sinewin wma_freqs"
2462 wmav1_encoder_select="mdct sinewin wma_freqs"
2463 wmav2_decoder_select="mdct sinewin wma_freqs"
2464 wmav2_encoder_select="mdct sinewin wma_freqs"
2465 wmavoice_decoder_select="lsp rdft dct mdct sinewin"
2466 wmv1_decoder_select="h263_decoder"
2467 wmv1_encoder_select="h263_encoder"
2468 wmv2_decoder_select="blockdsp h263_decoder idctdsp intrax8 videodsp wmv2dsp"
2469 wmv2_encoder_select="h263_encoder wmv2dsp"
2470 wmv3_decoder_select="vc1_decoder"
2471 wmv3image_decoder_select="wmv3_decoder"
2472 xma1_decoder_select="wmapro_decoder"
2473 xma2_decoder_select="wmapro_decoder"
2474 zerocodec_decoder_select="zlib"
2475 zlib_decoder_select="zlib"
2476 zlib_encoder_select="zlib"
2477 zmbv_decoder_select="zlib"
2478 zmbv_encoder_select="zlib"
2479
2480 # hardware accelerators
2481 crystalhd_deps="libcrystalhd_libcrystalhd_if_h"
2482 d3d11va_deps="d3d11_h dxva_h ID3D11VideoDecoder ID3D11VideoContext"
2483 dxva2_deps="dxva2api_h DXVA2_ConfigPictureDecode"
2484 vaapi_deps="va_va_h"
2485 vda_deps="VideoDecodeAcceleration_VDADecoder_h pthreads"
2486 vda_extralibs="-framework CoreFoundation -framework VideoDecodeAcceleration -framework QuartzCore"
2487 vdpau_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
2488 videotoolbox_deps="VideoToolbox_VideoToolbox_h pthreads"
2489 videotoolbox_extralibs="-framework CoreFoundation -framework VideoToolbox -framework CoreMedia -framework QuartzCore -framework CoreVideo"
2490 xvmc_deps="X11_extensions_XvMClib_h"
2491
2492 h263_vaapi_hwaccel_deps="vaapi"
2493 h263_vaapi_hwaccel_select="h263_decoder"
2494 h263_videotoolbox_hwaccel_deps="videotoolbox"
2495 h263_videotoolbox_hwaccel_select="h263_decoder"
2496 h264_crystalhd_decoder_select="crystalhd h264_mp4toannexb_bsf h264_parser"
2497 h264_d3d11va_hwaccel_deps="d3d11va"
2498 h264_d3d11va_hwaccel_select="h264_decoder"
2499 h264_dxva2_hwaccel_deps="dxva2"
2500 h264_dxva2_hwaccel_select="h264_decoder"
2501 h264_mmal_decoder_deps="mmal"
2502 h264_mmal_decoder_select="mmal"
2503 h264_mmal_hwaccel_deps="mmal"
2504 h264_qsv_hwaccel_deps="libmfx"
2505 h264_vaapi_hwaccel_deps="vaapi"
2506 h264_vaapi_hwaccel_select="h264_decoder"
2507 h264_vda_decoder_deps="vda"
2508 h264_vda_decoder_select="h264_decoder"
2509 h264_vda_hwaccel_deps="vda"
2510 h264_vda_hwaccel_select="h264_decoder"
2511 h264_vda_old_hwaccel_deps="vda"
2512 h264_vda_old_hwaccel_select="h264_decoder"
2513 h264_vdpau_decoder_deps="vdpau"
2514 h264_vdpau_decoder_select="h264_decoder"
2515 h264_vdpau_hwaccel_deps="vdpau"
2516 h264_vdpau_hwaccel_select="h264_decoder"
2517 h264_videotoolbox_hwaccel_deps="videotoolbox"
2518 h264_videotoolbox_hwaccel_select="h264_decoder"
2519 hevc_d3d11va_hwaccel_deps="d3d11va DXVA_PicParams_HEVC"
2520 hevc_d3d11va_hwaccel_select="hevc_decoder"
2521 hevc_dxva2_hwaccel_deps="dxva2 DXVA_PicParams_HEVC"
2522 hevc_dxva2_hwaccel_select="hevc_decoder"
2523 hevc_qsv_hwaccel_deps="libmfx"
2524 hevc_vaapi_hwaccel_deps="vaapi VAPictureParameterBufferHEVC"
2525 hevc_vaapi_hwaccel_select="hevc_decoder"
2526 hevc_vdpau_hwaccel_deps="vdpau VdpPictureInfoHEVC"
2527 hevc_vdpau_hwaccel_select="hevc_decoder"
2528 mpeg_vdpau_decoder_deps="vdpau"
2529 mpeg_vdpau_decoder_select="mpeg2video_decoder"
2530 mpeg_xvmc_hwaccel_deps="xvmc"
2531 mpeg_xvmc_hwaccel_select="mpeg2video_decoder"
2532 mpeg1_vdpau_decoder_deps="vdpau"
2533 mpeg1_vdpau_decoder_select="mpeg1video_decoder"
2534 mpeg1_vdpau_hwaccel_deps="vdpau"
2535 mpeg1_vdpau_hwaccel_select="mpeg1video_decoder"
2536 mpeg1_videotoolbox_hwaccel_deps="videotoolbox"
2537 mpeg1_videotoolbox_hwaccel_select="mpeg1video_decoder"
2538 mpeg1_xvmc_hwaccel_deps="xvmc"
2539 mpeg1_xvmc_hwaccel_select="mpeg1video_decoder"
2540 mpeg2_crystalhd_decoder_select="crystalhd"
2541 mpeg2_d3d11va_hwaccel_deps="d3d11va"
2542 mpeg2_d3d11va_hwaccel_select="mpeg2video_decoder"
2543 mpeg2_dxva2_hwaccel_deps="dxva2"
2544 mpeg2_dxva2_hwaccel_select="mpeg2video_decoder"
2545 mpeg2_mmal_decoder_deps="mmal"
2546 mpeg2_mmal_decoder_select="mmal"
2547 mpeg2_mmal_hwaccel_deps="mmal"
2548 mpeg2_qsv_hwaccel_deps="libmfx"
2549 mpeg2_qsv_hwaccel_select="qsvdec_mpeg2"
2550 mpeg2_vaapi_hwaccel_deps="vaapi"
2551 mpeg2_vaapi_hwaccel_select="mpeg2video_decoder"
2552 mpeg2_vdpau_hwaccel_deps="vdpau"
2553 mpeg2_vdpau_hwaccel_select="mpeg2video_decoder"
2554 mpeg2_videotoolbox_hwaccel_deps="videotoolbox"
2555 mpeg2_videotoolbox_hwaccel_select="mpeg2video_decoder"
2556 mpeg2_xvmc_hwaccel_deps="xvmc"
2557 mpeg2_xvmc_hwaccel_select="mpeg2video_decoder"
2558 mpeg4_crystalhd_decoder_select="crystalhd"
2559 mpeg4_mmal_decoder_deps="mmal"
2560 mpeg4_mmal_decoder_select="mmal"
2561 mpeg4_mmal_hwaccel_deps="mmal"
2562 mpeg4_vaapi_hwaccel_deps="vaapi"
2563 mpeg4_vaapi_hwaccel_select="mpeg4_decoder"
2564 mpeg4_vdpau_decoder_deps="vdpau"
2565 mpeg4_vdpau_decoder_select="mpeg4_decoder"
2566 mpeg4_vdpau_hwaccel_deps="vdpau"
2567 mpeg4_vdpau_hwaccel_select="mpeg4_decoder"
2568 mpeg4_videotoolbox_hwaccel_deps="videotoolbox"
2569 mpeg4_videotoolbox_hwaccel_select="mpeg4_decoder"
2570 msmpeg4_crystalhd_decoder_select="crystalhd"
2571 vc1_crystalhd_decoder_select="crystalhd"
2572 vc1_d3d11va_hwaccel_deps="d3d11va"
2573 vc1_d3d11va_hwaccel_select="vc1_decoder"
2574 vc1_dxva2_hwaccel_deps="dxva2"
2575 vc1_dxva2_hwaccel_select="vc1_decoder"
2576 vc1_mmal_decoder_deps="mmal"
2577 vc1_mmal_decoder_select="mmal"
2578 vc1_mmal_hwaccel_deps="mmal"
2579 vc1_qsv_hwaccel_deps="libmfx"
2580 vc1_qsv_hwaccel_select="qsvdec_vc1"
2581 vc1_vaapi_hwaccel_deps="vaapi"
2582 vc1_vaapi_hwaccel_select="vc1_decoder"
2583 vc1_vdpau_decoder_deps="vdpau"
2584 vc1_vdpau_decoder_select="vc1_decoder"
2585 vc1_vdpau_hwaccel_deps="vdpau"
2586 vc1_vdpau_hwaccel_select="vc1_decoder"
2587 vp9_d3d11va_hwaccel_deps="d3d11va DXVA_PicParams_VP9"
2588 vp9_d3d11va_hwaccel_select="vp9_decoder"
2589 vp9_dxva2_hwaccel_deps="dxva2 DXVA_PicParams_VP9"
2590 vp9_dxva2_hwaccel_select="vp9_decoder"
2591 vp9_vaapi_hwaccel_deps="vaapi VADecPictureParameterBufferVP9"
2592 vp9_vaapi_hwaccel_select="vp9_decoder"
2593 wmv3_crystalhd_decoder_select="crystalhd"
2594 wmv3_d3d11va_hwaccel_select="vc1_d3d11va_hwaccel"
2595 wmv3_dxva2_hwaccel_select="vc1_dxva2_hwaccel"
2596 wmv3_vaapi_hwaccel_select="vc1_vaapi_hwaccel"
2597 wmv3_vdpau_decoder_select="vc1_vdpau_decoder"
2598 wmv3_vdpau_hwaccel_select="vc1_vdpau_hwaccel"
2599
2600 # parsers
2601 h264_parser_select="h264_decoder"
2602 hevc_parser_select="golomb"
2603 mpegvideo_parser_select="mpegvideo"
2604 mpeg4video_parser_select="h263dsp mpegvideo qpeldsp"
2605 vc1_parser_select="vc1dsp"
2606
2607 # bitstream_filters
2608 mjpeg2jpeg_bsf_select="jpegtables"
2609
2610 # external libraries
2611 chromaprint_muxer_deps="chromaprint"
2612 libcelt_decoder_deps="libcelt"
2613 libdcadec_decoder_deps="libdcadec"
2614 libfaac_encoder_deps="libfaac"
2615 libfaac_encoder_select="audio_frame_queue"
2616 libfdk_aac_decoder_deps="libfdk_aac"
2617 libfdk_aac_encoder_deps="libfdk_aac"
2618 libfdk_aac_encoder_select="audio_frame_queue"
2619 libgme_demuxer_deps="libgme"
2620 libgsm_decoder_deps="libgsm"
2621 libgsm_encoder_deps="libgsm"
2622 libgsm_ms_decoder_deps="libgsm"
2623 libgsm_ms_encoder_deps="libgsm"
2624 libilbc_decoder_deps="libilbc"
2625 libilbc_encoder_deps="libilbc"
2626 libkvazaar_encoder_deps="libkvazaar"
2627 libmodplug_demuxer_deps="libmodplug"
2628 libmp3lame_encoder_deps="libmp3lame"
2629 libmp3lame_encoder_select="audio_frame_queue"
2630 libopencore_amrnb_decoder_deps="libopencore_amrnb"
2631 libopencore_amrnb_encoder_deps="libopencore_amrnb"
2632 libopencore_amrnb_encoder_select="audio_frame_queue"
2633 libopencore_amrwb_decoder_deps="libopencore_amrwb"
2634 libopenh264_encoder_deps="libopenh264"
2635 libopenjpeg_decoder_deps="libopenjpeg"
2636 libopenjpeg_encoder_deps="libopenjpeg"
2637 libopus_decoder_deps="libopus"
2638 libopus_encoder_deps="libopus"
2639 libopus_encoder_select="audio_frame_queue"
2640 libschroedinger_decoder_deps="libschroedinger"
2641 libschroedinger_encoder_deps="libschroedinger"
2642 libshine_encoder_deps="libshine"
2643 libshine_encoder_select="audio_frame_queue"
2644 libspeex_decoder_deps="libspeex"
2645 libspeex_encoder_deps="libspeex"
2646 libspeex_encoder_select="audio_frame_queue"
2647 libtheora_encoder_deps="libtheora"
2648 libtwolame_encoder_deps="libtwolame"
2649 libutvideo_decoder_deps="libutvideo"
2650 libutvideo_encoder_deps="libutvideo"
2651 libvo_amrwbenc_encoder_deps="libvo_amrwbenc"
2652 libvorbis_decoder_deps="libvorbis"
2653 libvorbis_encoder_deps="libvorbis"
2654 libvorbis_encoder_select="audio_frame_queue"
2655 libvpx_vp8_decoder_deps="libvpx"
2656 libvpx_vp8_encoder_deps="libvpx"
2657 libvpx_vp9_decoder_deps="libvpx"
2658 libvpx_vp9_encoder_deps="libvpx"
2659 libwavpack_encoder_deps="libwavpack"
2660 libwebp_encoder_deps="libwebp"
2661 libwebp_anim_encoder_deps="libwebp"
2662 libx262_encoder_deps="libx262"
2663 libx264_encoder_deps="libx264"
2664 libx264rgb_encoder_deps="libx264"
2665 libx264rgb_encoder_select="libx264_encoder"
2666 libx265_encoder_deps="libx265"
2667 libxavs_encoder_deps="libxavs"
2668 libxvid_encoder_deps="libxvid"
2669 libzvbi_teletext_decoder_deps="libzvbi"
2670 nvenc_encoder_deps="nvenc"
2671 nvenc_h264_encoder_deps="nvenc"
2672 nvenc_hevc_encoder_deps="nvenc"
2673
2674 # demuxers / muxers
2675 ac3_demuxer_select="ac3_parser"
2676 asf_demuxer_select="riffdec"
2677 asf_o_demuxer_select="riffdec"
2678 asf_muxer_select="riffenc"
2679 asf_stream_muxer_select="asf_muxer"
2680 avi_demuxer_select="iso_media riffdec exif"
2681 avi_muxer_select="riffenc"
2682 avisynth_demuxer_deps="avisynth"
2683 avisynth_demuxer_select="riffdec"
2684 caf_demuxer_select="iso_media riffdec"
2685 dash_muxer_select="mp4_muxer"
2686 dirac_demuxer_select="dirac_parser"
2687 dts_demuxer_select="dca_parser"
2688 dtshd_demuxer_select="dca_parser"
2689 dv_demuxer_select="dvprofile"
2690 dv_muxer_select="dvprofile"
2691 dxa_demuxer_select="riffdec"
2692 eac3_demuxer_select="ac3_parser"
2693 f4v_muxer_select="mov_muxer"
2694 flac_demuxer_select="flac_parser"
2695 hds_muxer_select="flv_muxer"
2696 hls_muxer_select="mpegts_muxer"
2697 image2_alias_pix_demuxer_select="image2_demuxer"
2698 image2_brender_pix_demuxer_select="image2_demuxer"
2699 ipod_muxer_select="mov_muxer"
2700 ismv_muxer_select="mov_muxer"
2701 libnut_demuxer_deps="libnut"
2702 libnut_muxer_deps="libnut"
2703 matroska_audio_muxer_select="matroska_muxer"
2704 matroska_demuxer_select="iso_media riffdec"
2705 matroska_demuxer_suggest="bzlib lzo zlib"
2706 matroska_muxer_select="iso_media riffenc"
2707 mmf_muxer_select="riffenc"
2708 mov_demuxer_select="iso_media riffdec"
2709 mov_demuxer_suggest="zlib"
2710 mov_muxer_select="iso_media riffenc rtpenc_chain"
2711 mp3_demuxer_select="mpegaudio_parser"
2712 mp4_muxer_select="mov_muxer"
2713 mpegts_demuxer_select="iso_media"
2714 mpegts_muxer_select="adts_muxer latm_muxer"
2715 mpegtsraw_demuxer_select="mpegts_demuxer"
2716 mxf_d10_muxer_select="mxf_muxer"
2717 mxf_opatom_muxer_select="mxf_muxer"
2718 nut_muxer_select="riffenc"
2719 nuv_demuxer_select="riffdec"
2720 oga_muxer_select="ogg_muxer"
2721 ogg_demuxer_select="dirac_parse"
2722 opus_muxer_select="ogg_muxer"
2723 psp_muxer_select="mov_muxer"
2724 rtp_demuxer_select="sdp_demuxer"
2725 rtpdec_select="asf_demuxer jpegtables mov_demuxer mpegts_demuxer rm_demuxer rtp_protocol"
2726 rtsp_demuxer_select="http_protocol rtpdec"
2727 rtsp_muxer_select="rtp_muxer http_protocol rtp_protocol rtpenc_chain"
2728 sap_demuxer_select="sdp_demuxer"
2729 sap_muxer_select="rtp_muxer rtp_protocol rtpenc_chain"
2730 sdp_demuxer_select="rtpdec"
2731 smoothstreaming_muxer_select="ismv_muxer"
2732 spdif_muxer_select="aac_parser"
2733 spx_muxer_select="ogg_muxer"
2734 swf_demuxer_suggest="zlib"
2735 tak_demuxer_select="tak_parser"
2736 tg2_muxer_select="mov_muxer"
2737 tgp_muxer_select="mov_muxer"
2738 vobsub_demuxer_select="mpegps_demuxer"
2739 w64_demuxer_select="wav_demuxer"
2740 w64_muxer_select="wav_muxer"
2741 wav_demuxer_select="riffdec"
2742 wav_muxer_select="riffenc"
2743 webm_muxer_select="iso_media riffenc"
2744 webm_dash_manifest_demuxer_select="matroska_demuxer"
2745 wtv_demuxer_select="mpegts_demuxer riffdec"
2746 wtv_muxer_select="mpegts_muxer riffenc"
2747 xmv_demuxer_select="riffdec"
2748 xwma_demuxer_select="riffdec"
2749
2750 # indevs / outdevs
2751 alsa_indev_deps="alsa_asoundlib_h snd_pcm_htimestamp"
2752 alsa_outdev_deps="alsa_asoundlib_h"
2753 avfoundation_indev_extralibs="-framework CoreVideo -framework Foundation -framework AVFoundation -framework CoreMedia"
2754 avfoundation_indev_select="avfoundation"
2755 bktr_indev_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
2756 caca_outdev_deps="libcaca"
2757 decklink_indev_deps="decklink pthreads"
2758 decklink_indev_extralibs="-lstdc++"
2759 decklink_outdev_deps="decklink pthreads"
2760 decklink_outdev_extralibs="-lstdc++"
2761 dshow_indev_deps="IBaseFilter"
2762 dshow_indev_extralibs="-lpsapi -lole32 -lstrmiids -luuid -loleaut32 -lshlwapi"
2763 dv1394_indev_deps="dv1394"
2764 dv1394_indev_select="dv_demuxer"
2765 fbdev_indev_deps="linux_fb_h"
2766 fbdev_outdev_deps="linux_fb_h"
2767 gdigrab_indev_deps="CreateDIBSection"
2768 gdigrab_indev_extralibs="-lgdi32"
2769 gdigrab_indev_select="bmp_decoder"
2770 iec61883_indev_deps="libiec61883"
2771 jack_indev_deps="jack_jack_h"
2772 jack_indev_deps_any="sem_timedwait dispatch_dispatch_h"
2773 lavfi_indev_deps="avfilter"
2774 libcdio_indev_deps="libcdio"
2775 libdc1394_indev_deps="libdc1394"
2776 libv4l2_indev_deps="libv4l2"
2777 openal_indev_deps="openal"
2778 opengl_outdev_deps="opengl"
2779 oss_indev_deps_any="soundcard_h sys_soundcard_h"
2780 oss_outdev_deps_any="soundcard_h sys_soundcard_h"
2781 pulse_indev_deps="libpulse"
2782 pulse_outdev_deps="libpulse"
2783 qtkit_indev_extralibs="-framework QTKit -framework Foundation -framework QuartzCore"
2784 qtkit_indev_select="qtkit"
2785 sdl_outdev_deps="sdl"
2786 sndio_indev_deps="sndio_h"
2787 sndio_outdev_deps="sndio_h"
2788 v4l_indev_deps="linux_videodev_h"
2789 v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h"
2790 v4l2_outdev_deps_any="linux_videodev2_h sys_videoio_h"
2791 vfwcap_indev_deps="capCreateCaptureWindow vfwcap_defines"
2792 vfwcap_indev_extralibs="-lavicap32"
2793 x11grab_indev_deps="x11grab"
2794 x11grab_xcb_indev_deps="libxcb"
2795 xv_outdev_deps="X11_extensions_Xvlib_h XvGetPortAttribute"
2796 xv_outdev_extralibs="-lXv -lX11 -lXext"
2797
2798 # protocols
2799 async_protocol_deps="threads"
2800 bluray_protocol_deps="libbluray"
2801 ffrtmpcrypt_protocol_deps="!librtmp_protocol"
2802 ffrtmpcrypt_protocol_deps_any="gcrypt gmp openssl"
2803 ffrtmpcrypt_protocol_select="tcp_protocol"
2804 ffrtmphttp_protocol_deps="!librtmp_protocol"
2805 ffrtmphttp_protocol_select="http_protocol"
2806 ftp_protocol_select="tcp_protocol"
2807 gopher_protocol_select="network"
2808 http_protocol_select="tcp_protocol"
2809 httpproxy_protocol_select="tcp_protocol"
2810 https_protocol_select="tls_protocol"
2811 icecast_protocol_select="http_protocol"
2812 librtmp_protocol_deps="librtmp"
2813 librtmpe_protocol_deps="librtmp"
2814 librtmps_protocol_deps="librtmp"
2815 librtmpt_protocol_deps="librtmp"
2816 librtmpte_protocol_deps="librtmp"
2817 libsmbclient_protocol_deps="libsmbclient gplv3"
2818 libssh_protocol_deps="libssh"
2819 mmsh_protocol_select="http_protocol"
2820 mmst_protocol_select="network"
2821 rtmp_protocol_deps="!librtmp_protocol"
2822 rtmp_protocol_select="tcp_protocol"
2823 rtmpe_protocol_select="ffrtmpcrypt_protocol"
2824 rtmps_protocol_deps="!librtmp_protocol"
2825 rtmps_protocol_select="tls_protocol"
2826 rtmpt_protocol_select="ffrtmphttp_protocol"
2827 rtmpte_protocol_select="ffrtmpcrypt_protocol ffrtmphttp_protocol"
2828 rtmpts_protocol_select="ffrtmphttp_protocol https_protocol"
2829 rtp_protocol_select="udp_protocol"
2830 sctp_protocol_deps="struct_sctp_event_subscribe"
2831 sctp_protocol_select="network"
2832 srtp_protocol_select="rtp_protocol"
2833 tcp_protocol_select="network"
2834 tls_gnutls_protocol_deps="gnutls !tls_schannel_protocol !tls_securetransport_protocol"
2835 tls_gnutls_protocol_select="tcp_protocol"
2836 tls_openssl_protocol_deps="openssl !tls_schannel_protocol !tls_securetransport_protocol !tls_gnutls_protocol"
2837 tls_openssl_protocol_select="tcp_protocol"
2838 tls_schannel_protocol_deps="schannel"
2839 tls_schannel_protocol_select="tcp_protocol"
2840 tls_securetransport_protocol_deps="securetransport"
2841 tls_securetransport_protocol_select="tcp_protocol"
2842 tls_protocol_deps_any="tls_schannel_protocol tls_securetransport_protocol tls_gnutls_protocol tls_openssl_protocol"
2843 udp_protocol_select="network"
2844 udplite_protocol_select="network"
2845 unix_protocol_deps="sys_un_h"
2846 unix_protocol_select="network"
2847
2848 # filters
2849 afftfilt_filter_deps="avcodec"
2850 afftfilt_filter_select="fft"
2851 amovie_filter_deps="avcodec avformat"
2852 aresample_filter_deps="swresample"
2853 ass_filter_deps="libass"
2854 asyncts_filter_deps="avresample"
2855 atempo_filter_deps="avcodec"
2856 atempo_filter_select="rdft"
2857 azmq_filter_deps="libzmq"
2858 blackframe_filter_deps="gpl"
2859 boxblur_filter_deps="gpl"
2860 bs2b_filter_deps="libbs2b"
2861 colormatrix_filter_deps="gpl"
2862 cover_rect_filter_deps="avcodec avformat gpl"
2863 cropdetect_filter_deps="gpl"
2864 delogo_filter_deps="gpl"
2865 deshake_filter_select="pixelutils"
2866 drawtext_filter_deps="libfreetype"
2867 ebur128_filter_deps="gpl"
2868 eq_filter_deps="gpl"
2869 fftfilt_filter_deps="avcodec"
2870 fftfilt_filter_select="rdft"
2871 find_rect_filter_deps="avcodec avformat gpl"
2872 firequalizer_filter_deps="avcodec"
2873 firequalizer_filter_select="rdft"
2874 flite_filter_deps="libflite"
2875 frei0r_filter_deps="frei0r dlopen"
2876 frei0r_src_filter_deps="frei0r dlopen"
2877 fspp_filter_deps="gpl"
2878 geq_filter_deps="gpl"
2879 histeq_filter_deps="gpl"
2880 hqdn3d_filter_deps="gpl"
2881 hwupload_cuda_filter_deps="cuda"
2882 interlace_filter_deps="gpl"
2883 kerndeint_filter_deps="gpl"
2884 ladspa_filter_deps="ladspa dlopen"
2885 mcdeint_filter_deps="avcodec gpl"
2886 movie_filter_deps="avcodec avformat"
2887 mpdecimate_filter_deps="gpl"
2888 mpdecimate_filter_select="pixelutils"
2889 mptestsrc_filter_deps="gpl"
2890 negate_filter_deps="lut_filter"
2891 nnedi_filter_deps="gpl"
2892 ocr_filter_deps="libtesseract"
2893 ocv_filter_deps="libopencv"
2894 owdenoise_filter_deps="gpl"
2895 pan_filter_deps="swresample"
2896 perspective_filter_deps="gpl"
2897 phase_filter_deps="gpl"
2898 pp7_filter_deps="gpl"
2899 pp_filter_deps="gpl postproc"
2900 pullup_filter_deps="gpl"
2901 removelogo_filter_deps="avcodec avformat swscale"
2902 repeatfields_filter_deps="gpl"
2903 resample_filter_deps="avresample"
2904 rubberband_filter_deps="librubberband"
2905 sab_filter_deps="gpl swscale"
2906 scale2ref_filter_deps="swscale"
2907 scale_filter_deps="swscale"
2908 select_filter_select="pixelutils"
2909 showcqt_filter_deps="avcodec avformat swscale"
2910 showcqt_filter_select="fft"
2911 showfreqs_filter_deps="avcodec"
2912 showfreqs_filter_select="fft"
2913 showspectrum_filter_deps="avcodec"
2914 showspectrum_filter_select="fft"
2915 showspectrumpic_filter_deps="avcodec"
2916 showspectrumpic_filter_select="fft"
2917 smartblur_filter_deps="gpl swscale"
2918 sofalizer_filter_deps="netcdf avcodec"
2919 sofalizer_filter_select="fft"
2920 spectrumsynth_filter_deps="avcodec"
2921 spectrumsynth_filter_select="fft"
2922 spp_filter_deps="gpl avcodec"
2923 spp_filter_select="fft idctdsp fdctdsp me_cmp pixblockdsp"
2924 stereo3d_filter_deps="gpl"
2925 subtitles_filter_deps="avformat avcodec libass"
2926 super2xsai_filter_deps="gpl"
2927 pixfmts_super2xsai_test_deps="super2xsai_filter"
2928 tinterlace_filter_deps="gpl"
2929 tinterlace_merge_test_deps="tinterlace_filter"
2930 tinterlace_pad_test_deps="tinterlace_filter"
2931 uspp_filter_deps="gpl avcodec"
2932 vidstabdetect_filter_deps="libvidstab"
2933 vidstabtransform_filter_deps="libvidstab"
2934 zmq_filter_deps="libzmq"
2935 zoompan_filter_deps="swscale"
2936 zscale_filter_deps="libzimg"
2937
2938 # examples
2939 avcodec_example_deps="avcodec avutil"
2940 avio_dir_cmd="avformat avutil"
2941 avio_reading="avformat avcodec avutil"
2942 decoding_encoding_example_deps="avcodec avformat avutil"
2943 demuxing_decoding_example_deps="avcodec avformat avutil"
2944 extract_mvs_example_deps="avcodec avformat avutil"
2945 filter_audio_example_deps="avfilter avutil"
2946 filtering_audio_example_deps="avfilter avcodec avformat avutil"
2947 filtering_video_example_deps="avfilter avcodec avformat avutil"
2948 metadata_example_deps="avformat avutil"
2949 muxing_example_deps="avcodec avformat avutil swscale"
2950 qsvdec_example_deps="avcodec avutil libmfx h264_qsv_decoder vaapi_x11"
2951 remuxing_example_deps="avcodec avformat avutil"
2952 resampling_audio_example_deps="avutil swresample"
2953 scaling_video_example_deps="avutil swscale"
2954 transcode_aac_example_deps="avcodec avformat swresample"
2955 transcoding_example_deps="avfilter avcodec avformat avutil"
2956
2957 # libraries, in linking order
2958 avcodec_deps="avutil"
2959 avdevice_deps="avformat avcodec avutil"
2960 avfilter_deps="avutil"
2961 avformat_deps="avcodec avutil"
2962 avresample_deps="avutil"
2963 postproc_deps="avutil gpl"
2964 swresample_deps="avutil"
2965 swscale_deps="avutil"
2966
2967 # programs
2968 ffmpeg_deps="avcodec avfilter avformat swresample"
2969 ffmpeg_select="aformat_filter anull_filter atrim_filter format_filter
2970                null_filter
2971                setpts_filter trim_filter"
2972 ffplay_deps="avcodec avformat swscale swresample sdl"
2973 ffplay_libs='$sdl_libs'
2974 ffplay_select="rdft crop_filter transpose_filter hflip_filter vflip_filter rotate_filter"
2975 ffprobe_deps="avcodec avformat"
2976 ffserver_deps="avformat fork sarestart"
2977 ffserver_select="ffm_muxer rtp_protocol rtsp_demuxer"
2978
2979 # documentation
2980 podpages_deps="perl"
2981 manpages_deps="perl pod2man"
2982 htmlpages_deps="perl"
2983 htmlpages_deps_any="makeinfo_html texi2html"
2984 txtpages_deps="perl makeinfo"
2985 doc_deps_any="manpages htmlpages podpages txtpages"
2986
2987 # default parameters
2988
2989 logfile="config.log"
2990
2991 # installation paths
2992 prefix_default="/usr/local"
2993 bindir_default='${prefix}/bin'
2994 datadir_default='${prefix}/share/ffmpeg'
2995 docdir_default='${prefix}/share/doc/ffmpeg'
2996 incdir_default='${prefix}/include'
2997 libdir_default='${prefix}/lib'
2998 mandir_default='${prefix}/share/man'
2999
3000 # toolchain
3001 ar_default="ar"
3002 cc_default="gcc"
3003 cxx_default="g++"
3004 host_cc_default="gcc"
3005 cp_f="cp -f"
3006 doxygen_default="doxygen"
3007 install="install"
3008 ln_s="ln -s -f"
3009 nm_default="nm -g"
3010 objformat="elf"
3011 pkg_config_default=pkg-config
3012 ranlib_default="ranlib"
3013 strip_default="strip"
3014 yasmexe_default="yasm"
3015 windres_default="windres"
3016
3017 # OS
3018 target_os_default=$(tolower $(uname -s))
3019 host_os=$target_os_default
3020
3021 # machine
3022 if test "$target_os_default" = aix; then
3023     arch_default=$(uname -p)
3024     strip_default="strip -X32_64"
3025 else
3026     arch_default=$(uname -m)
3027 fi
3028 cpu="generic"
3029 intrinsics="none"
3030
3031 # configurable options
3032 enable $PROGRAM_LIST
3033 enable $DOCUMENT_LIST
3034 enable $EXAMPLE_LIST
3035 enable $(filter_out avresample $LIBRARY_LIST)
3036 enable stripping
3037
3038 enable asm
3039 enable debug
3040 enable doc
3041 enable faan faandct faanidct
3042 enable optimizations
3043 enable runtime_cpudetect
3044 enable safe_bitstream_reader
3045 enable static
3046 enable swscale_alpha
3047 enable valgrind_backtrace
3048
3049 sws_max_filter_size_default=256
3050 set_default sws_max_filter_size
3051
3052 # Enable hwaccels by default.
3053 enable d3d11va dxva2 vaapi vda vdpau videotoolbox xvmc
3054 enable xlib
3055
3056 # build settings
3057 SHFLAGS='-shared -Wl,-soname,$$(@F)'
3058 LIBPREF="lib"
3059 LIBSUF=".a"
3060 FULLNAME='$(NAME)$(BUILDSUF)'
3061 LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
3062 SLIBPREF="lib"
3063 SLIBSUF=".so"
3064 SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
3065 SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
3066 SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
3067 LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
3068 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'
3069 SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR) $(SLIBNAME)'
3070
3071 asflags_filter=echo
3072 cflags_filter=echo
3073 ldflags_filter=echo
3074
3075 AS_C='-c'
3076 AS_O='-o $@'
3077 CC_C='-c'
3078 CC_E='-E -o $@'
3079 CC_O='-o $@'
3080 CXX_C='-c'
3081 CXX_O='-o $@'
3082 OBJCC_C='-c'
3083 OBJCC_E='-E -o $@'
3084 OBJCC_O='-o $@'
3085 LD_O='-o $@'
3086 LD_LIB='-l%'
3087 LD_PATH='-L'
3088 HOSTCC_C='-c'
3089 HOSTCC_E='-E -o $@'
3090 HOSTCC_O='-o $@'
3091 HOSTLD_O='-o $@'
3092
3093 host_libs='-lm'
3094 host_cflags_filter=echo
3095 host_ldflags_filter=echo
3096
3097 target_path='$(CURDIR)'
3098
3099 # since the object filename is not given with the -MM flag, the compiler
3100 # is only able to print the basename, and we must add the path ourselves
3101 DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< 2>/dev/null | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(@F),$(@D)/$(@F)," > $(@:.o=.d)'
3102 DEPFLAGS='-MM'
3103
3104 # find source path
3105 if test -f configure; then
3106     source_path=.
3107 else
3108     source_path=$(cd $(dirname "$0"); pwd)
3109     case "$source_path" in
3110         *[[:blank:]]*) die "Out of tree builds are impossible with whitespace in source path." ;;
3111     esac
3112     test -e "$source_path/config.h" &&
3113         die "Out of tree builds are impossible with config.h in source dir."
3114 fi
3115
3116 for v in "$@"; do
3117     r=${v#*=}
3118     l=${v%"$r"}
3119     r=$(sh_quote "$r")
3120     FFMPEG_CONFIGURATION="${FFMPEG_CONFIGURATION# } ${l}${r}"
3121 done
3122
3123 find_things(){
3124     thing=$1
3125     pattern=$2
3126     file=$source_path/$3
3127     sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
3128 }
3129
3130 ENCODER_LIST=$(find_things  encoder  ENC      libavcodec/allcodecs.c)
3131 DECODER_LIST=$(find_things  decoder  DEC      libavcodec/allcodecs.c)
3132 HWACCEL_LIST=$(find_things  hwaccel  HWACCEL  libavcodec/allcodecs.c)
3133 PARSER_LIST=$(find_things   parser   PARSER   libavcodec/allcodecs.c)
3134 BSF_LIST=$(find_things      bsf      BSF      libavcodec/allcodecs.c)
3135 MUXER_LIST=$(find_things    muxer    _MUX     libavformat/allformats.c)
3136 DEMUXER_LIST=$(find_things  demuxer  DEMUX    libavformat/allformats.c)
3137 OUTDEV_LIST=$(find_things   outdev   OUTDEV   libavdevice/alldevices.c)
3138 INDEV_LIST=$(find_things    indev    _IN      libavdevice/alldevices.c)
3139 PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
3140 FILTER_LIST=$(find_things   filter   FILTER   libavfilter/allfilters.c)
3141
3142 ALL_COMPONENTS="
3143     $BSF_LIST
3144     $DECODER_LIST
3145     $DEMUXER_LIST
3146     $ENCODER_LIST
3147     $FILTER_LIST
3148     $HWACCEL_LIST
3149     $INDEV_LIST
3150     $MUXER_LIST
3151     $OUTDEV_LIST
3152     $PARSER_LIST
3153     $PROTOCOL_LIST
3154 "
3155
3156 for n in $COMPONENT_LIST; do
3157     v=$(toupper ${n%s})_LIST
3158     eval enable \$$v
3159     eval ${n}_if_any="\$$v"
3160 done
3161
3162 enable $ARCH_EXT_LIST
3163
3164 die_unknown(){
3165     echo "Unknown option \"$1\"."
3166     echo "See $0 --help for available options."
3167     exit 1
3168 }
3169
3170 print_in_columns() {
3171     cols=$(expr $ncols / 24)
3172     cat | tr ' ' '\n' | sort | pr -r "-$cols" -w $ncols -t
3173 }
3174
3175 show_list() {
3176     suffix=_$1
3177     shift
3178     echo $* | sed s/$suffix//g | print_in_columns
3179     exit 0
3180 }
3181
3182 rand_list(){
3183     IFS=', '
3184     set -- $*
3185     unset IFS
3186     for thing; do
3187         comp=${thing%:*}
3188         prob=${thing#$comp}
3189         prob=${prob#:}
3190         is_in ${comp} $COMPONENT_LIST && eval comp=\$$(toupper ${comp%s})_LIST
3191         echo "prob ${prob:-0.5}"
3192         printf '%s\n' $comp
3193     done
3194 }
3195
3196 do_random(){
3197     action=$1
3198     shift
3199     random_seed=$(awk "BEGIN { srand($random_seed); print srand() }")
3200     $action $(rand_list "$@" | awk "BEGIN { srand($random_seed) } \$1 == \"prob\" { prob = \$2; next } rand() < prob { print }")
3201 }
3202
3203 for opt do
3204     optval="${opt#*=}"
3205     case "$opt" in
3206         --extra-ldflags=*)
3207             add_ldflags $optval
3208         ;;
3209         --extra-ldexeflags=*)
3210             add_ldexeflags $optval
3211         ;;
3212         --extra-ldlibflags=*)
3213             add_ldlibflags $optval
3214         ;;
3215         --extra-libs=*)
3216             add_extralibs $optval
3217         ;;
3218         --disable-devices)
3219             disable $INDEV_LIST $OUTDEV_LIST
3220         ;;
3221         --enable-debug=*)
3222             debuglevel="$optval"
3223         ;;
3224         --disable-programs)
3225             disable $PROGRAM_LIST
3226         ;;
3227         --disable-everything)
3228             map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
3229         ;;
3230         --disable-all)
3231             map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
3232             disable $LIBRARY_LIST $PROGRAM_LIST doc
3233             enable avutil
3234         ;;
3235         --enable-random|--disable-random)
3236             action=${opt%%-random}
3237             do_random ${action#--} $COMPONENT_LIST
3238         ;;
3239         --enable-random=*|--disable-random=*)
3240             action=${opt%%-random=*}
3241             do_random ${action#--} $optval
3242         ;;
3243         --enable-*=*|--disable-*=*)
3244             eval $(echo "${opt%%=*}" | sed 's/--/action=/;s/-/ thing=/')
3245             is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt"
3246             eval list=\$$(toupper $thing)_LIST
3247             name=$(echo "${optval}" | sed "s/,/_${thing}|/g")_${thing}
3248             list=$(filter "$name" $list)
3249             [ "$list" = "" ] && warn "Option $opt did not match anything"
3250             $action $list
3251         ;;
3252         --enable-?*|--disable-?*)
3253             eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
3254             if is_in $option $COMPONENT_LIST; then
3255                 test $action = disable && action=unset
3256                 eval $action \$$(toupper ${option%s})_LIST
3257             elif is_in $option $CMDLINE_SELECT; then
3258                 $action $option
3259             else
3260                 die_unknown $opt
3261             fi
3262         ;;
3263         --list-*)
3264             NAME="${opt#--list-}"
3265             is_in $NAME $COMPONENT_LIST || die_unknown $opt
3266             NAME=${NAME%s}
3267             eval show_list $NAME \$$(toupper $NAME)_LIST
3268         ;;
3269         --help|-h) show_help
3270         ;;
3271         --fatal-warnings) enable fatal_warnings
3272         ;;
3273         *)
3274             optname="${opt%%=*}"
3275             optname="${optname#--}"
3276             optname=$(echo "$optname" | sed 's/-/_/g')
3277             if is_in $optname $CMDLINE_SET; then
3278                 eval $optname='$optval'
3279             elif is_in $optname $CMDLINE_APPEND; then
3280                 append $optname "$optval"
3281             else
3282                 die_unknown $opt
3283             fi
3284         ;;
3285     esac
3286 done
3287
3288 for e in $env; do
3289     eval "export $e"
3290 done
3291
3292 disabled logging && logfile=/dev/null
3293
3294 # Disable all the library-specific components if the library itself
3295 # is disabled, see AVCODEC_LIST and following _LIST variables.
3296
3297 disable_components(){
3298     disabled ${1} && disable $(
3299         eval components="\$$(toupper ${1})_COMPONENTS"
3300         map 'eval echo \${$(toupper ${v%s})_LIST}' $components
3301     )
3302 }
3303
3304 map 'disable_components $v' $LIBRARY_LIST
3305
3306 echo "# $0 $FFMPEG_CONFIGURATION" > $logfile
3307 set >> $logfile
3308
3309 test -n "$valgrind" && toolchain="valgrind-memcheck"
3310
3311 case "$toolchain" in
3312     *-asan)
3313         cc_default="${toolchain%-asan}"
3314         add_cflags  -fsanitize=address
3315         add_ldflags -fsanitize=address
3316     ;;
3317     *-tsan)
3318         cc_default="${toolchain%-tsan}"
3319         add_cflags  -fsanitize=thread -pie
3320         add_ldflags -fsanitize=thread -pie
3321         case "$toolchain" in
3322             gcc-tsan)
3323                 add_cflags  -fPIC
3324                 add_ldflags -fPIC
3325                 ;;
3326         esac
3327     ;;
3328     *-usan)
3329         cc_default="${toolchain%-usan}"
3330         add_cflags  -fsanitize=undefined
3331         add_ldflags -fsanitize=undefined
3332     ;;
3333     valgrind-*)
3334         target_exec_default="valgrind"
3335         case "$toolchain" in
3336             valgrind-massif)
3337                 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"
3338                 ;;
3339             valgrind-memcheck)
3340                 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"
3341                 ;;
3342         esac
3343     ;;
3344     msvc)
3345         # Check whether the current MSVC version needs the C99 converter.
3346         # From MSVC 2013 (compiler major version 18) onwards, it does actually
3347         # support enough of C99 to build ffmpeg. Default to the new
3348         # behaviour if the regexp was unable to match anything, since this
3349         # successfully parses the version number of existing supported
3350         # versions that require the converter (MSVC 2010 and 2012).
3351         cl_major_ver=$(cl 2>&1 | sed -n 's/.*Version \([[:digit:]]\{1,\}\)\..*/\1/p')
3352         if [ -z "$cl_major_ver" ] || [ $cl_major_ver -ge 18 ]; then
3353             cc_default="cl"
3354         else
3355             cc_default="c99wrap cl"
3356         fi
3357         ld_default="$source_path/compat/windows/mslink"
3358         nm_default="dumpbin -symbols"
3359         ar_default="lib"
3360         case "$arch" in
3361         arm*)
3362             as_default="armasm"
3363             ;;
3364         esac
3365         target_os_default="win32"
3366         # Use a relative path for TMPDIR. This makes sure all the
3367         # ffconf temp files are written with a relative path, avoiding
3368         # issues with msys/win32 path conversion for MSVC parameters
3369         # such as -Fo<file> or -out:<file>.
3370         TMPDIR=.
3371     ;;
3372     icl)
3373         cc_default="icl"
3374         ld_default="xilink"
3375         nm_default="dumpbin -symbols"
3376         ar_default="xilib"
3377         target_os_default="win32"
3378         TMPDIR=.
3379     ;;
3380     gcov)
3381         add_cflags  -fprofile-arcs -ftest-coverage
3382         add_ldflags -fprofile-arcs -ftest-coverage
3383     ;;
3384     hardened)
3385         add_cppflags -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2
3386         add_cflags   -fno-strict-overflow -fstack-protector-all
3387         add_ldflags  -Wl,-z,relro -Wl,-z,now
3388     ;;
3389     ?*)
3390         die "Unknown toolchain $toolchain"
3391     ;;
3392 esac
3393
3394 test -n "$cross_prefix" && enable cross_compile
3395
3396 if enabled cross_compile; then
3397     test -n "$arch" && test -n "$target_os" ||
3398         die "Must specify target arch and OS when cross-compiling"
3399 fi
3400
3401 ar_default="${cross_prefix}${ar_default}"
3402 cc_default="${cross_prefix}${cc_default}"
3403 cxx_default="${cross_prefix}${cxx_default}"
3404 nm_default="${cross_prefix}${nm_default}"
3405 pkg_config_default="${cross_prefix}${pkg_config_default}"
3406 if ${cross_prefix}${ranlib_default} 2>&1 | grep -q "\-D "; then
3407     ranlib_default="${cross_prefix}${ranlib_default} -D"
3408 else
3409     ranlib_default="${cross_prefix}${ranlib_default}"
3410 fi
3411 strip_default="${cross_prefix}${strip_default}"
3412 windres_default="${cross_prefix}${windres_default}"
3413
3414 sysinclude_default="${sysroot}/usr/include"
3415
3416 set_default arch cc cxx doxygen pkg_config ranlib strip sysinclude \
3417     target_exec target_os yasmexe
3418 enabled cross_compile || host_cc_default=$cc
3419 set_default host_cc
3420
3421 pkg_config_fail_message=""
3422 if ! $pkg_config --version >/dev/null 2>&1; then
3423     warn "$pkg_config not found, library detection may fail."
3424     pkg_config=false
3425 elif is_in -static $cc $LDFLAGS && ! is_in --static $pkg_config $pkg_config_flags; then
3426     pkg_config_fail_message="
3427 Note: When building a static binary, add --pkg-config-flags=\"--static\"."
3428 fi
3429
3430 if test $doxygen != $doxygen_default && \
3431   ! $doxygen --version >/dev/null 2>&1; then
3432     warn "Specified doxygen \"$doxygen\" not found, API documentation will fail to build."
3433 fi
3434
3435 exesuf() {
3436     case $1 in
3437         mingw32*|mingw64*|win32|win64|cygwin*|*-dos|freedos|opendos|os/2*|symbian) echo .exe ;;
3438     esac
3439 }
3440
3441 EXESUF=$(exesuf $target_os)
3442 HOSTEXESUF=$(exesuf $host_os)
3443
3444 # set temporary file name
3445 : ${TMPDIR:=$TEMPDIR}
3446 : ${TMPDIR:=$TMP}
3447 : ${TMPDIR:=/tmp}
3448
3449 if [ -n "$tempprefix" ] ; then
3450     mktemp(){
3451         echo $tempprefix.${HOSTNAME}.${UID}
3452     }
3453 elif ! check_cmd mktemp -u XXXXXX; then
3454     # simple replacement for missing mktemp
3455     # NOT SAFE FOR GENERAL USE
3456     mktemp(){
3457         echo "${2%%XXX*}.${HOSTNAME}.${UID}.$$"
3458     }
3459 fi
3460
3461 tmpfile(){
3462     tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
3463         (set -C; exec > $tmp) 2>/dev/null ||
3464         die "Unable to create temporary file in $TMPDIR."
3465     append TMPFILES $tmp
3466     eval $1=$tmp
3467 }
3468
3469 trap 'rm -f -- $TMPFILES' EXIT
3470
3471 tmpfile TMPASM .asm
3472 tmpfile TMPC   .c
3473 tmpfile TMPCPP .cpp
3474 tmpfile TMPE   $EXESUF
3475 tmpfile TMPH   .h
3476 tmpfile TMPM   .m
3477 tmpfile TMPO   .o
3478 tmpfile TMPS   .S
3479 tmpfile TMPSH  .sh
3480 tmpfile TMPV   .ver
3481
3482 unset -f mktemp
3483
3484 chmod +x $TMPE
3485
3486 # make sure we can execute files in $TMPDIR
3487 cat > $TMPSH 2>> $logfile <<EOF
3488 #! /bin/sh
3489 EOF
3490 chmod +x $TMPSH >> $logfile 2>&1
3491 if ! $TMPSH >> $logfile 2>&1; then
3492     cat <<EOF
3493 Unable to create and execute files in $TMPDIR.  Set the TMPDIR environment
3494 variable to another directory and make sure that it is not mounted noexec.
3495 EOF
3496     die "Sanity test failed."
3497 fi
3498
3499 armasm_flags(){
3500     for flag; do
3501         case $flag in
3502             # Filter out MSVC cl.exe options from cflags that shouldn't
3503             # be passed to gas-preprocessor
3504             -M[TD]*)                                            ;;
3505             *)                  echo $flag                      ;;
3506         esac
3507    done
3508 }
3509
3510 ccc_flags(){
3511     for flag; do
3512         case $flag in
3513             -std=c99)           echo -c99                       ;;
3514             -mcpu=*)            echo -arch ${flag#*=}           ;;
3515             -mieee)             echo -ieee                      ;;
3516             -O*|-fast)          echo $flag                      ;;
3517             -fno-math-errno)    echo -assume nomath_errno       ;;
3518             -g)                 echo -g3                        ;;
3519             -Wall)              echo -msg_enable level2         ;;
3520             -Wno-pointer-sign)  echo -msg_disable ptrmismatch1  ;;
3521             -Wl,*)              echo $flag                      ;;
3522             -f*|-W*)                                            ;;
3523             *)                  echo $flag                      ;;
3524         esac
3525    done
3526 }
3527
3528 cparser_flags(){
3529     for flag; do
3530         case $flag in
3531             -Wno-switch)             echo -Wno-switch-enum ;;
3532             -Wno-format-zero-length) ;;
3533             -Wdisabled-optimization) ;;
3534             -Wno-pointer-sign)       echo -Wno-other ;;
3535             *)                       echo $flag ;;
3536         esac
3537     done
3538 }
3539
3540 msvc_common_flags(){
3541     for flag; do
3542         case $flag in
3543             # In addition to specifying certain flags under the compiler
3544             # specific filters, they must be specified here as well or else the
3545             # generic catch all at the bottom will print the original flag.
3546             -Wall)                ;;
3547             -std=c99)             ;;
3548             # Common flags
3549             -fomit-frame-pointer) ;;
3550             -g)                   echo -Z7 ;;
3551             -fno-math-errno)      ;;
3552             -fno-common)          ;;
3553             -fno-signed-zeros)    ;;
3554             -fPIC)                ;;
3555             -mthumb)              ;;
3556             -march=*)             ;;
3557             -lz)                  echo zlib.lib ;;
3558             -lavifil32)           echo vfw32.lib ;;
3559             -lavicap32)           echo vfw32.lib user32.lib ;;
3560             -lx264)               echo libx264.lib ;;
3561             -l*)                  echo ${flag#-l}.lib ;;
3562             -LARGEADDRESSAWARE)   echo $flag ;;
3563             -L*)                  echo -libpath:${flag#-L} ;;
3564             *)                    echo $flag ;;
3565         esac
3566     done
3567 }
3568
3569 msvc_flags(){
3570     msvc_common_flags "$@"
3571     for flag; do
3572         case $flag in
3573             -Wall)                echo -W4 -wd4244 -wd4127 -wd4018 -wd4389     \
3574                                        -wd4146 -wd4057 -wd4204 -wd4706 -wd4305 \
3575                                        -wd4152 -wd4324 -we4013 -wd4100 -wd4214 \
3576                                        -wd4307 \
3577                                        -wd4273 -wd4554 -wd4701 ;;
3578         esac
3579     done
3580 }
3581
3582 icl_flags(){
3583     msvc_common_flags "$@"
3584     for flag; do
3585         case $flag in
3586             # Despite what Intel's documentation says -Wall, which is supported
3587             # on Windows, does enable remarks so disable them here.
3588             -Wall)                echo $flag -Qdiag-disable:remark ;;
3589             -std=c99)             echo -Qstd=c99 ;;
3590             -flto)                echo -ipo ;;
3591         esac
3592     done
3593 }
3594
3595 icc_flags(){
3596     for flag; do
3597         case $flag in
3598             -flto)                echo -ipo ;;
3599             *)                    echo $flag ;;
3600         esac
3601     done
3602 }
3603
3604 pgi_flags(){
3605     for flag; do
3606         case $flag in
3607             -flto)                echo -Mipa=fast,libopt,libinline,vestigial ;;
3608             -fomit-frame-pointer) echo -Mnoframe ;;
3609             -g)                   echo -gopt ;;
3610             *)                    echo $flag ;;
3611         esac
3612     done
3613 }
3614
3615 suncc_flags(){
3616     for flag; do
3617         case $flag in
3618             -march=*|-mcpu=*)
3619                 case "${flag#*=}" in
3620                     native)                   echo -xtarget=native       ;;
3621                     v9|niagara)               echo -xarch=sparc          ;;
3622                     ultrasparc)               echo -xarch=sparcvis       ;;
3623                     ultrasparc3|niagara2)     echo -xarch=sparcvis2      ;;
3624                     i586|pentium)             echo -xchip=pentium        ;;
3625                     i686|pentiumpro|pentium2) echo -xtarget=pentium_pro  ;;
3626                     pentium3*|c3-2)           echo -xtarget=pentium3     ;;
3627                     pentium-m)          echo -xarch=sse2 -xchip=pentium3 ;;
3628                     pentium4*)          echo -xtarget=pentium4           ;;
3629                     prescott|nocona)    echo -xarch=sse3 -xchip=pentium4 ;;
3630                     *-sse3)             echo -xarch=sse3                 ;;
3631                     core2)              echo -xarch=ssse3 -xchip=core2   ;;
3632                     bonnell)                   echo -xarch=ssse3         ;;
3633                     corei7|nehalem)            echo -xtarget=nehalem     ;;
3634                     westmere)                  echo -xtarget=westmere    ;;
3635                     silvermont)                echo -xarch=sse4_2        ;;
3636                     corei7-avx|sandybridge)    echo -xtarget=sandybridge ;;
3637                     core-avx*|ivybridge|haswell|broadwell)
3638                                                echo -xarch=avx           ;;
3639                     amdfam10|barcelona)        echo -xtarget=barcelona   ;;
3640                     btver1)                    echo -xarch=amdsse4a      ;;
3641                     btver2|bdver*)             echo -xarch=avx           ;;
3642                     athlon-4|athlon-[mx]p)     echo -xarch=ssea          ;;
3643                     k8|opteron|athlon64|athlon-fx)
3644                                                echo -xarch=sse2a         ;;
3645                     athlon*)                   echo -xarch=pentium_proa  ;;
3646                 esac
3647                 ;;
3648             -std=c99)             echo -xc99              ;;
3649             -fomit-frame-pointer) echo -xregs=frameptr    ;;
3650             -fPIC)                echo -KPIC -xcode=pic32 ;;
3651             -W*,*)                echo $flag              ;;
3652             -f*-*|-W*|-mimpure-text)                      ;;
3653             -shared)              echo -G                 ;;
3654             *)                    echo $flag              ;;
3655         esac
3656     done
3657 }
3658
3659 tms470_flags(){
3660     for flag; do
3661         case $flag in
3662             -march=*|-mcpu=*)
3663                 case "${flag#*=}" in
3664                     armv7-a|cortex-a*)      echo -mv=7a8 ;;
3665                     armv7-r|cortex-r*)      echo -mv=7r4 ;;
3666                     armv7-m|cortex-m*)      echo -mv=7m3 ;;
3667                     armv6*|arm11*)          echo -mv=6   ;;
3668                     armv5*e|arm[79]*e*|arm9[24]6*|arm96*|arm102[26])
3669                                             echo -mv=5e  ;;
3670                     armv4*|arm7*|arm9[24]*) echo -mv=4   ;;
3671                 esac
3672                 ;;
3673             -mfpu=neon)     echo --float_support=vfpv3 --neon ;;
3674             -mfpu=vfp)      echo --float_support=vfpv2        ;;
3675             -mfpu=vfpv3)    echo --float_support=vfpv3        ;;
3676             -mfpu=vfpv3-d16) echo --float_support=vfpv3d16    ;;
3677             -msoft-float)   echo --float_support=vfplib       ;;
3678             -O[0-3]|-mf=*)  echo $flag                        ;;
3679             -g)             echo -g -mn                       ;;
3680             -pds=*)         echo $flag                        ;;
3681             -D*|-I*)        echo $flag                        ;;
3682             --gcc|--abi=*)  echo $flag                        ;;
3683             -me)            echo $flag                        ;;
3684         esac
3685     done
3686 }
3687
3688 probe_cc(){
3689     pfx=$1
3690     _cc=$2
3691     first=$3
3692
3693     unset _type _ident _cc_c _cc_e _cc_o _flags _cflags
3694     unset _ld_o _ldflags _ld_lib _ld_path
3695     unset _depflags _DEPCMD _DEPFLAGS
3696     _flags_filter=echo
3697
3698     if $_cc --version 2>&1 | grep -q '^GNU assembler'; then
3699         true # no-op to avoid reading stdin in following checks
3700     elif $_cc -v 2>&1 | grep -q '^gcc.*LLVM'; then
3701         _type=llvm_gcc
3702         gcc_extra_ver=$(expr "$($_cc --version 2>/dev/null | head -n1)" : '.*\((.*)\)')
3703         _ident="llvm-gcc $($_cc -dumpversion 2>/dev/null) $gcc_extra_ver"
3704         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
3705         _cflags_speed='-O3'
3706         _cflags_size='-Os'
3707     elif $_cc -v 2>&1 | grep -qi ^gcc; then
3708         _type=gcc
3709         gcc_version=$($_cc --version | head -n1)
3710         gcc_basever=$($_cc -dumpversion)
3711         gcc_pkg_ver=$(expr "$gcc_version" : '[^ ]* \(([^)]*)\)')
3712         gcc_ext_ver=$(expr "$gcc_version" : ".*$gcc_pkg_ver $gcc_basever \\(.*\\)")
3713         _ident=$(cleanws "gcc $gcc_basever $gcc_pkg_ver $gcc_ext_ver")
3714         case $gcc_basever in
3715             2) ;;
3716             2.*) ;;
3717             *) _depflags='-MMD -MF $(@:.o=.d) -MT $@' ;;
3718         esac
3719         if [ "$first" = true ]; then
3720             case $gcc_basever in
3721                 4.2*)
3722                 warn "gcc 4.2 is outdated and may miscompile FFmpeg. Please use a newer compiler." ;;
3723             esac
3724         fi
3725         _cflags_speed='-O3'
3726         _cflags_size='-Os'
3727     elif $_cc --version 2>/dev/null | grep -q ^icc; then
3728         _type=icc
3729         _ident=$($_cc --version | head -n1)
3730         _depflags='-MMD'
3731         _cflags_speed='-O3'
3732         _cflags_size='-Os'
3733         _cflags_noopt='-O1'
3734         _flags_filter=icc_flags
3735     elif $_cc -v 2>&1 | grep -q xlc; then
3736         _type=xlc
3737         _ident=$($_cc -qversion 2>/dev/null | head -n1)
3738         _cflags_speed='-O5'
3739         _cflags_size='-O5 -qcompact'
3740     elif $_cc -V 2>/dev/null | grep -q Compaq; then
3741         _type=ccc
3742         _ident=$($_cc -V | head -n1 | cut -d' ' -f1-3)
3743         _DEPFLAGS='-M'
3744         _cflags_speed='-fast'
3745         _cflags_size='-O1'
3746         _flags_filter=ccc_flags
3747     elif $_cc --vsn 2>/dev/null | grep -Eq "ARM (C/C\+\+ )?Compiler"; then
3748         test -d "$sysroot" || die "No valid sysroot specified."
3749         _type=armcc
3750         _ident=$($_cc --vsn | grep -i build | head -n1 | sed 's/.*: //')
3751         armcc_conf="$PWD/armcc.conf"
3752         $_cc --arm_linux_configure                 \
3753              --arm_linux_config_file="$armcc_conf" \
3754              --configure_sysroot="$sysroot"        \
3755              --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
3756              die "Error creating armcc configuration file."
3757         $_cc --vsn | grep -q RVCT && armcc_opt=rvct || armcc_opt=armcc
3758         _flags="--arm_linux_config_file=$armcc_conf --translate_gcc"
3759         as_default="${cross_prefix}gcc"
3760         _depflags='-MMD'
3761         _cflags_speed='-O3'
3762         _cflags_size='-Os'
3763     elif $_cc -version 2>/dev/null | grep -Eq 'TMS470|TI ARM'; then
3764         _type=tms470
3765         _ident=$($_cc -version | head -n1 | tr -s ' ')
3766         _flags='--gcc --abi=eabi -me'
3767         _cc_e='-ppl -fe=$@'
3768         _cc_o='-fe=$@'
3769         _depflags='-ppa -ppd=$(@:.o=.d)'
3770         _cflags_speed='-O3 -mf=5'
3771         _cflags_size='-O3 -mf=2'
3772         _flags_filter=tms470_flags
3773     elif $_cc -v 2>&1 | grep -q clang; then
3774         _type=clang
3775         _ident=$($_cc --version 2>/dev/null | head -n1)
3776         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
3777         _cflags_speed='-O3'
3778         _cflags_size='-Os'
3779     elif $_cc -V 2>&1 | grep -q Sun; then
3780         _type=suncc
3781         _ident=$($_cc -V 2>&1 | head -n1 | cut -d' ' -f 2-)
3782         _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "1s,^.*: ,$@: ," -e "\$$!s,\$$, \\\," -e "1!s,^.*: , ," > $(@:.o=.d)'
3783         _DEPFLAGS='-xM1 -xc99'
3784         _ldflags='-std=c99'
3785         _cflags_speed='-O5'
3786         _cflags_size='-O5 -xspace'
3787         _flags_filter=suncc_flags
3788     elif $_cc -v 2>&1 | grep -q 'PathScale\|Path64'; then
3789         _type=pathscale
3790         _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
3791         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
3792         _cflags_speed='-O2'
3793         _cflags_size='-Os'
3794         _flags_filter='filter_out -Wdisabled-optimization'
3795     elif $_cc -v 2>&1 | grep -q Open64; then
3796         _type=open64
3797         _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
3798         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
3799         _cflags_speed='-O2'
3800         _cflags_size='-Os'
3801         _flags_filter='filter_out -Wdisabled-optimization|-Wtype-limits|-fno-signed-zeros'
3802     elif $_cc -V 2>&1 | grep -q Portland; then
3803         _type=pgi
3804         _ident="PGI $($_cc -V 2>&1 | awk '/^pgcc/ { print $2; exit }')"
3805         opt_common='-alias=ansi -Mdse -Mlre -Mpre'
3806         _cflags_speed="-O3 -Mautoinline -Munroll=c:4 $opt_common"
3807         _cflags_size="-O2 -Munroll=c:1 $opt_common"
3808         _cflags_noopt="-O"
3809         _flags_filter=pgi_flags
3810     elif $_cc 2>&1 | grep -q 'Microsoft.*ARM.*Assembler'; then
3811         _type=armasm
3812         _ident=$($_cc | head -n1)
3813         # 4509: "This form of conditional instruction is deprecated"
3814         _flags="-nologo -ignore 4509"
3815         _flags_filter=armasm_flags
3816     elif $_cc 2>&1 | grep -q Intel; then
3817         _type=icl
3818         _ident=$($_cc 2>&1 | head -n1)
3819         _depflags='-QMMD -QMF$(@:.o=.d) -QMT$@'
3820         # Not only is O3 broken on 13.x+ but it is slower on all previous
3821         # versions (tested) as well.
3822         _cflags_speed="-O2"
3823         _cflags_size="-O1 -Oi" # -O1 without -Oi miscompiles stuff
3824         if $_cc 2>&1 | grep -q Linker; then
3825             _ld_o='-out:$@'
3826         else
3827             _ld_o='-Fe$@'
3828         fi
3829         _cc_o='-Fo$@'
3830         _cc_e='-P'
3831         _flags_filter=icl_flags
3832         _ld_lib='lib%.a'
3833         _ld_path='-libpath:'
3834         # -Qdiag-error to make icl error when seeing certain unknown arguments
3835         _flags='-nologo -Qdiag-error:4044,10157'
3836         # -Qvec- -Qsimd- to prevent miscompilation, -GS, fp:precise for consistency
3837         # with MSVC which enables it by default.
3838         _cflags='-D_USE_MATH_DEFINES -Qms0 -Qvec- -Qsimd- -GS -fp:precise'
3839         disable stripping
3840     elif $_cc -nologo- 2>&1 | grep -q Microsoft; then
3841         _type=msvc
3842         _ident=$($_cc 2>&1 | head -n1)
3843         _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< 2>&1 | awk '\''/including/ { sub(/^.*file: */, ""); gsub(/\\/, "/"); if (!match($$0, / /)) print "$@:", $$0 }'\'' > $(@:.o=.d)'
3844         _DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -showIncludes -Zs'
3845         _cflags_speed="-O2"
3846         _cflags_size="-O1"
3847         if $_cc -nologo- 2>&1 | grep -q Linker; then
3848             _ld_o='-out:$@'
3849         else
3850             _ld_o='-Fe$@'
3851         fi
3852         _cc_o='-Fo$@'
3853         _cc_e='-P -Fi$@'
3854         _flags_filter=msvc_flags
3855         _ld_lib='lib%.a'
3856         _ld_path='-libpath:'
3857         _flags='-nologo'
3858         _cflags='-D_USE_MATH_DEFINES -D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_WARNINGS'
3859         disable stripping
3860     elif $_cc --version 2>/dev/null | grep -q ^cparser; then
3861         _type=cparser
3862         _ident=$($_cc --version | head -n1)
3863         _depflags='-MMD'
3864         _cflags_speed='-O4'
3865         _cflags_size='-O2'
3866         _flags_filter=cparser_flags
3867     fi
3868
3869     eval ${pfx}_type=\$_type
3870     eval ${pfx}_ident=\$_ident
3871 }
3872
3873 set_ccvars(){
3874     eval ${1}_C=\${_cc_c-\${${1}_C}}
3875     eval ${1}_E=\${_cc_e-\${${1}_E}}
3876     eval ${1}_O=\${_cc_o-\${${1}_O}}
3877
3878     if [ -n "$_depflags" ]; then
3879         eval ${1}_DEPFLAGS=\$_depflags
3880     else
3881         eval ${1}DEP=\${_DEPCMD:-\$DEPCMD}
3882         eval ${1}DEP_FLAGS=\${_DEPFLAGS:-\$DEPFLAGS}
3883         eval DEP${1}FLAGS=\$_flags
3884     fi
3885 }
3886
3887 probe_cc cc "$cc" "true"
3888 cflags_filter=$_flags_filter
3889 cflags_speed=$_cflags_speed
3890 cflags_size=$_cflags_size
3891 cflags_noopt=$_cflags_noopt
3892 add_cflags $_flags $_cflags
3893 cc_ldflags=$_ldflags
3894 set_ccvars CC
3895
3896 probe_cc hostcc "$host_cc"
3897 host_cflags_filter=$_flags_filter
3898 add_host_cflags  $_flags $_cflags
3899 set_ccvars HOSTCC
3900
3901 test -n "$cc_type" && enable $cc_type ||
3902     warn "Unknown C compiler $cc, unable to select optimal CFLAGS"
3903
3904 : ${as_default:=$cc}
3905 : ${objcc_default:=$cc}
3906 : ${dep_cc_default:=$cc}
3907 : ${ld_default:=$cc}
3908 : ${host_ld_default:=$host_cc}
3909 set_default ar as objcc dep_cc ld host_ld windres
3910
3911 probe_cc as "$as"
3912 asflags_filter=$_flags_filter
3913 add_asflags $_flags $_cflags
3914 set_ccvars AS
3915
3916 probe_cc objcc "$objcc"
3917 objcflags_filter=$_flags_filter
3918 add_objcflags $_flags $_cflags
3919 set_ccvars OBJC
3920
3921 probe_cc ld "$ld"
3922 ldflags_filter=$_flags_filter
3923 add_ldflags $_flags $_ldflags
3924 test "$cc_type" != "$ld_type" && add_ldflags $cc_ldflags
3925 LD_O=${_ld_o-$LD_O}
3926 LD_LIB=${_ld_lib-$LD_LIB}
3927 LD_PATH=${_ld_path-$LD_PATH}
3928
3929 probe_cc hostld "$host_ld"
3930 host_ldflags_filter=$_flags_filter
3931 add_host_ldflags $_flags $_ldflags
3932 HOSTLD_O=${_ld_o-$HOSTLD_O}
3933
3934 if [ -z "$CC_DEPFLAGS" ] && [ "$dep_cc" != "$cc" ]; then
3935     probe_cc depcc "$dep_cc"
3936     CCDEP=${_DEPCMD:-$DEPCMD}
3937     CCDEP_FLAGS=${_DEPFLAGS:=$DEPFLAGS}
3938     DEPCCFLAGS=$_flags
3939 fi
3940
3941 if $ar 2>&1 | grep -q Microsoft; then
3942     arflags="-nologo"
3943     ar_o='-out:$@'
3944 elif $ar 2>&1 | grep -q 'Texas Instruments'; then
3945     arflags="rq"
3946     ar_o='$@'
3947 elif $ar 2>&1 | grep -q 'Usage: ar.*-X.*any'; then
3948     arflags='-Xany -r -c'
3949     ar_o='$@'
3950 elif $ar 2>&1 | grep -q "\[D\] "; then
3951     arflags="rcD"
3952     ar_o='$@'
3953 else
3954     arflags="rc"
3955     ar_o='$@'
3956 fi
3957
3958 add_cflags $extra_cflags
3959 add_cxxflags $extra_cxxflags
3960 add_objcflags $extra_objcflags
3961 add_asflags $extra_cflags
3962
3963 if test -n "$sysroot"; then
3964     case "$cc_type" in
3965         gcc|llvm_gcc|clang)
3966             add_cppflags --sysroot="$sysroot"
3967             add_ldflags --sysroot="$sysroot"
3968 # On Darwin --sysroot may be ignored, -isysroot always affects headers and linking
3969             add_cppflags -isysroot "$sysroot"
3970             add_ldflags -isysroot "$sysroot"
3971         ;;
3972         tms470)
3973             add_cppflags -I"$sysinclude"
3974             add_ldflags  --sysroot="$sysroot"
3975         ;;
3976     esac
3977 fi
3978
3979 if test "$cpu" = host; then
3980     enabled cross_compile &&
3981         die "--cpu=host makes no sense when cross-compiling."
3982
3983     case "$cc_type" in
3984         gcc|llvm_gcc)
3985             check_native(){
3986                 $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
3987                 sed -n "/cc1.*$1=/{
3988                             s/.*$1=\\([^ ]*\\).*/\\1/
3989                             p
3990                             q
3991                         }" $TMPE
3992             }
3993             cpu=$(check_native -march || check_native -mcpu)
3994         ;;
3995         clang)
3996             check_native(){
3997                 $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
3998                 sed -n "/cc1.*-target-cpu /{
3999                             s/.*-target-cpu \\([^ ]*\\).*/\\1/
4000                             p
4001                             q
4002                         }" $TMPE
4003             }
4004             cpu=$(check_native -march)
4005         ;;
4006     esac
4007
4008     test "${cpu:-host}" = host &&
4009         die "--cpu=host not supported with compiler $cc"
4010 fi
4011
4012 # Deal with common $arch aliases
4013 case "$arch" in
4014     aarch64|arm64)
4015         arch="aarch64"
4016     ;;
4017     arm*|iPad*|iPhone*)
4018         arch="arm"
4019     ;;
4020     mips*|IP*)
4021         case "$arch" in
4022         *el)
4023             add_cppflags -EL
4024             add_ldflags -EL
4025         ;;
4026         *eb)
4027             add_cppflags -EB
4028             add_ldflags -EB
4029         ;;
4030         esac
4031         arch="mips"
4032     ;;
4033     parisc*|hppa*)
4034         arch="parisc"
4035     ;;
4036     "Power Macintosh"|ppc*|powerpc*)
4037         arch="ppc"
4038     ;;
4039     s390|s390x)
4040         arch="s390"
4041     ;;
4042     sh4|sh)
4043         arch="sh4"
4044     ;;
4045     sun4u|sparc*)
4046         arch="sparc"
4047     ;;
4048     tilegx|tile-gx)
4049         arch="tilegx"
4050     ;;
4051     i[3-6]86*|i86pc|BePC|x86pc|x86_64|x86_32|amd64)
4052         arch="x86"
4053     ;;
4054 esac
4055
4056 is_in $arch $ARCH_LIST || warn "unknown architecture $arch"
4057 enable $arch
4058
4059 # Add processor-specific flags
4060 if enabled aarch64; then
4061
4062     case $cpu in
4063         armv*)
4064             cpuflags="-march=$cpu"
4065         ;;
4066         *)
4067             cpuflags="-mcpu=$cpu"
4068         ;;
4069     esac
4070
4071 elif enabled alpha; then
4072
4073     cpuflags="-mcpu=$cpu"
4074
4075 elif enabled arm; then
4076
4077     check_arm_arch() {
4078         check_cpp_condition stddef.h \
4079             "defined __ARM_ARCH_${1}__ || defined __TARGET_ARCH_${2:-$1}" \
4080             $cpuflags
4081     }
4082
4083     probe_arm_arch() {
4084         if   check_arm_arch 4;        then echo armv4;
4085         elif check_arm_arch 4T;       then echo armv4t;
4086         elif check_arm_arch 5;        then echo armv5;
4087         elif check_arm_arch 5E;       then echo armv5e;
4088         elif check_arm_arch 5T;       then echo armv5t;
4089         elif check_arm_arch 5TE;      then echo armv5te;
4090         elif check_arm_arch 5TEJ;     then echo armv5te;
4091         elif check_arm_arch 6;        then echo armv6;
4092         elif check_arm_arch 6J;       then echo armv6j;
4093         elif check_arm_arch 6K;       then echo armv6k;
4094         elif check_arm_arch 6Z;       then echo armv6z;
4095         elif check_arm_arch 6ZK;      then echo armv6zk;
4096         elif check_arm_arch 6T2;      then echo armv6t2;
4097         elif check_arm_arch 7;        then echo armv7;
4098         elif check_arm_arch 7A  7_A;  then echo armv7-a;
4099         elif check_arm_arch 7S;       then echo armv7-a;
4100         elif check_arm_arch 7R  7_R;  then echo armv7-r;
4101         elif check_arm_arch 7M  7_M;  then echo armv7-m;
4102         elif check_arm_arch 7EM 7E_M; then echo armv7-m;
4103         elif check_arm_arch 8A  8_A;  then echo armv8-a;
4104         fi
4105     }
4106
4107     [ "$cpu" = generic ] && cpu=$(probe_arm_arch)
4108
4109     case $cpu in
4110         armv*)
4111             cpuflags="-march=$cpu"
4112             subarch=$(echo $cpu | sed 's/[^a-z0-9]//g')
4113         ;;
4114         *)
4115             cpuflags="-mcpu=$cpu"
4116             case $cpu in
4117                 cortex-a*)                               subarch=armv7a  ;;
4118                 cortex-r*)                               subarch=armv7r  ;;
4119                 cortex-m*)                 enable thumb; subarch=armv7m  ;;
4120                 arm11*)                                  subarch=armv6   ;;
4121                 arm[79]*e*|arm9[24]6*|arm96*|arm102[26]) subarch=armv5te ;;
4122                 armv4*|arm7*|arm9[24]*)                  subarch=armv4   ;;
4123                 *)                             subarch=$(probe_arm_arch) ;;
4124             esac
4125         ;;
4126     esac
4127
4128     case "$subarch" in
4129         armv5t*)    enable fast_clz                ;;
4130         armv[6-8]*)
4131             enable fast_clz
4132             disabled fast_unaligned || enable fast_unaligned
4133             ;;
4134     esac
4135
4136 elif enabled avr32; then
4137
4138     case $cpu in
4139         ap7[02]0[0-2])
4140             subarch="avr32_ap"
4141             cpuflags="-mpart=$cpu"
4142         ;;
4143         ap)
4144             subarch="avr32_ap"
4145             cpuflags="-march=$cpu"
4146         ;;
4147         uc3[ab]*)
4148             subarch="avr32_uc"
4149             cpuflags="-mcpu=$cpu"
4150         ;;
4151         uc)
4152             subarch="avr32_uc"
4153             cpuflags="-march=$cpu"
4154         ;;
4155     esac
4156
4157 elif enabled bfin; then
4158
4159     cpuflags="-mcpu=$cpu"
4160
4161 elif enabled mips; then
4162
4163     cpuflags="-march=$cpu"
4164
4165     case $cpu in
4166         24kc)
4167             disable mips32r6
4168             disable mips64r2
4169             disable mips64r6
4170             disable mipsfpu
4171             disable mipsdsp
4172             disable mipsdspr2
4173             disable msa
4174         ;;
4175         24kf*)
4176             disable mips32r6
4177             disable mips64r2
4178             disable mips64r6
4179             disable mipsdsp
4180             disable mipsdspr2
4181             disable msa
4182         ;;
4183         24kec|34kc|1004kc)
4184             disable mips32r6
4185             disable mips64r2
4186             disable mips64r6
4187             disable mipsfpu
4188             disable mipsdspr2
4189             disable msa
4190         ;;
4191         24kef*|34kf*|1004kf*)
4192             disable mips32r6
4193             disable mips64r2
4194             disable mips64r6
4195             disable mipsdspr2
4196             disable msa
4197         ;;
4198         74kc)
4199             disable mips32r6
4200             disable mips64r2
4201             disable mips64r6
4202             disable mipsfpu
4203             disable msa
4204         ;;
4205         74kf)
4206             disable mips32r6
4207             disable mips64r2
4208             disable mips64r6
4209             disable msa
4210         ;;
4211         p5600)
4212             disable mips32r6
4213             disable mips64r2
4214             disable mips64r6
4215             disable mipsdsp
4216             disable mipsdspr2
4217             check_cflags "-mtune=p5600" &&
4218             check_cflags "-mfp64 -msched-weight -mload-store-pairs -funroll-loops" &&
4219             add_asflags "-mfp64"
4220         ;;
4221         i6400)
4222             disable mips32r2
4223             disable mips32r6
4224             disable mips64r2
4225             disable mipsdsp
4226             disable mipsdspr2
4227             check_cflags "-mtune=i6400 -mabi=64" &&
4228             check_cflags "-mfp64 -msched-weight -mload-store-pairs -funroll-loops" &&
4229             check_ldflags "-mabi=64" &&
4230             add_asflags "-mfp64"
4231         ;;
4232         loongson*)
4233             disable mips32r2
4234             disable mips32r6
4235             disable mips64r2
4236             disable mips64r6
4237             disable mipsfpu
4238             disable mipsdsp
4239             disable mipsdspr2
4240             disable msa
4241             enable local_aligned_8 local_aligned_16 local_aligned_32
4242             enable simd_align_16
4243             enable fast_64bit
4244             enable fast_clz
4245             enable fast_cmov
4246             enable fast_unaligned
4247             disable aligned_stack
4248             case $cpu in
4249                 loongson3*)
4250                     cpuflags="-march=loongson3a -mhard-float -fno-expensive-optimizations"
4251                 ;;
4252                 loongson2e)
4253                     cpuflags="-march=loongson2e -mhard-float -fno-expensive-optimizations"
4254                 ;;
4255                 loongson2f)
4256                     cpuflags="-march=loongson2f -mhard-float -fno-expensive-optimizations"
4257                 ;;
4258             esac
4259         ;;
4260         generic)
4261             # We do not disable anything. Is up to the user to disable
4262             # the unwanted features.
4263         ;;
4264         *)
4265             # Unknown CPU. Disable everything.
4266             warn "unknown CPU. Disabling all MIPS optimizations."
4267             disable mipsfpu
4268             disable mips32r2
4269             disable mips32r6
4270             disable mips64r2
4271             disable mips64r6
4272             disable mipsdsp
4273             disable mipsdspr2
4274             disable msa
4275         ;;
4276     esac
4277
4278 elif enabled ppc; then
4279
4280     disable ldbrx
4281
4282     case $(tolower $cpu) in
4283         601|ppc601|powerpc601)
4284             cpuflags="-mcpu=601"
4285             disable altivec
4286         ;;
4287         603*|ppc603*|powerpc603*)
4288             cpuflags="-mcpu=603"
4289             disable altivec
4290         ;;
4291         604*|ppc604*|powerpc604*)
4292             cpuflags="-mcpu=604"
4293             disable altivec
4294         ;;
4295         g3|75*|ppc75*|powerpc75*)
4296             cpuflags="-mcpu=750"
4297             disable altivec
4298         ;;
4299         g4|745*|ppc745*|powerpc745*)
4300             cpuflags="-mcpu=7450"
4301             disable vsx
4302         ;;
4303         74*|ppc74*|powerpc74*)
4304             cpuflags="-mcpu=7400"
4305             disable vsx
4306         ;;
4307         g5|970|ppc970|powerpc970)
4308             cpuflags="-mcpu=970"
4309             disable vsx
4310         ;;
4311         power[3-6]*)
4312             cpuflags="-mcpu=$cpu"
4313             disable vsx
4314         ;;
4315         power[7-8]*)
4316             cpuflags="-mcpu=$cpu"
4317         ;;
4318         cell)
4319             cpuflags="-mcpu=cell"
4320             enable ldbrx
4321             disable vsx
4322         ;;
4323         e500mc)
4324             cpuflags="-mcpu=e500mc"
4325             disable altivec
4326         ;;
4327         e500v2)
4328             cpuflags="-mcpu=8548 -mhard-float -mfloat-gprs=double"
4329             disable altivec
4330             disable dcbzl
4331         ;;
4332         e500)
4333             cpuflags="-mcpu=8540 -mhard-float"
4334             disable altivec
4335             disable dcbzl
4336         ;;
4337     esac
4338
4339 elif enabled sparc; then
4340
4341     case $cpu in
4342         cypress|f93[04]|tsc701|sparcl*|supersparc|hypersparc|niagara|v[789])
4343             cpuflags="-mcpu=$cpu"
4344         ;;
4345         ultrasparc*|niagara[234])
4346             cpuflags="-mcpu=$cpu"
4347         ;;
4348     esac
4349
4350 elif enabled x86; then
4351
4352     case $cpu in
4353         i[345]86|pentium)
4354             cpuflags="-march=$cpu"
4355             disable i686
4356             disable mmx
4357         ;;
4358         # targets that do NOT support nopl and conditional mov (cmov)
4359         pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
4360             cpuflags="-march=$cpu"
4361             disable i686
4362         ;;
4363         # targets that do support nopl and conditional mov (cmov)
4364         i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64*|k8*|opteron*|athlon-fx\
4365         |core*|atom|bonnell|nehalem|westmere|silvermont|sandybridge|ivybridge|haswell|broadwell|amdfam10|barcelona|b[dt]ver*)
4366             cpuflags="-march=$cpu"
4367             enable i686
4368             enable fast_cmov
4369         ;;
4370         # targets that do support conditional mov but on which it's slow
4371         pentium4|pentium4m|prescott|nocona)
4372             cpuflags="-march=$cpu"
4373             enable i686
4374             disable fast_cmov
4375         ;;
4376     esac
4377
4378 fi
4379
4380 if [ "$cpu" != generic ]; then
4381     add_cflags  $cpuflags
4382     add_asflags $cpuflags
4383     test "$cc_type" = "$ld_type" && add_ldflags $cpuflags
4384 fi
4385
4386 # compiler sanity check
4387 check_exec <<EOF
4388 int main(void){ return 0; }
4389 EOF
4390 if test "$?" != 0; then
4391     echo "$cc is unable to create an executable file."
4392     if test -z "$cross_prefix" && ! enabled cross_compile ; then
4393         echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
4394         echo "Only do this if you know what cross compiling means."
4395     fi
4396     die "C compiler test failed."
4397 fi
4398
4399 add_cppflags -D_ISOC99_SOURCE
4400 add_cxxflags -D__STDC_CONSTANT_MACROS
4401 check_cflags -std=c99
4402 check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
4403 #include <stdlib.h>
4404 EOF
4405 check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
4406 #include <stdlib.h>
4407 EOF
4408
4409 add_host_cppflags -D_ISOC99_SOURCE
4410 check_host_cflags -std=c99
4411 check_host_cflags -Wall
4412 check_host_cflags -O3
4413
4414 check_64bit(){
4415     arch32=$1
4416     arch64=$2
4417     expr=$3
4418     check_code cc "" "int test[2*($expr) - 1]" &&
4419         subarch=$arch64 || subarch=$arch32
4420 }
4421
4422 case "$arch" in
4423     aarch64|alpha|ia64)
4424         spic=$shared
4425     ;;
4426     mips)
4427         check_64bit mips mips64 '_MIPS_SIM > 1'
4428         spic=$shared
4429     ;;
4430     parisc)
4431         check_64bit parisc parisc64 'sizeof(void *) > 4'
4432         spic=$shared
4433     ;;
4434     ppc)
4435         check_64bit ppc ppc64 'sizeof(void *) > 4'
4436         spic=$shared
4437     ;;
4438     s390)
4439         check_64bit s390 s390x 'sizeof(void *) > 4'
4440         spic=$shared
4441     ;;
4442     sparc)
4443         check_64bit sparc sparc64 'sizeof(void *) > 4'
4444         spic=$shared
4445     ;;
4446     x86)
4447         check_64bit x86_32 x86_64 'sizeof(void *) > 4'
4448         # Treat x32 as x64 for now. Note it also needs spic=$shared
4449         test "$subarch" = "x86_32" && check_cpp_condition stddef.h 'defined(__x86_64__)' &&
4450             subarch=x86_64
4451         if test "$subarch" = "x86_64"; then
4452             spic=$shared
4453         fi
4454     ;;
4455     ppc)
4456         check_cc <<EOF && subarch="ppc64"
4457         int test[(int)sizeof(char*) - 7];
4458 EOF
4459     ;;
4460 esac
4461
4462 enable $subarch
4463 enabled spic && enable_weak pic
4464
4465 # OS specific
4466 case $target_os in
4467     aix)
4468         SHFLAGS=-shared
4469         add_cppflags '-I\$(SRC_PATH)/compat/aix'
4470         enabled shared && add_ldflags -Wl,-brtl
4471         ;;
4472     android)
4473         disable symver
4474         enable section_data_rel_ro
4475         SLIB_INSTALL_NAME='$(SLIBNAME)'
4476         SLIB_INSTALL_LINKS=
4477         SHFLAGS='-shared -Wl,-soname,$(SLIBNAME)'
4478         ;;
4479     haiku)
4480         prefix_default="/boot/common"
4481         network_extralibs="-lnetwork"
4482         host_libs=
4483         ;;
4484     sunos)
4485         SHFLAGS='-shared -Wl,-h,$$(@F)'
4486         enabled x86 && SHFLAGS="-mimpure-text $SHFLAGS"
4487         network_extralibs="-lsocket -lnsl"
4488         add_cppflags -D__EXTENSIONS__
4489         # When using suncc to build, the Solaris linker will mark
4490         # an executable with each instruction set encountered by
4491         # the Solaris assembler.  As our libraries contain their own
4492         # guards for processor-specific code, instead suppress
4493         # generation of the HWCAPS ELF section on Solaris x86 only.
4494         enabled_all suncc x86 &&
4495             echo "hwcap_1 = OVERRIDE;" > mapfile &&
4496             add_ldflags -Wl,-M,mapfile
4497         nm_default='nm -P -g'
4498         SLIB_CREATE_DEF_CMD='$(Q)perl $(SRC_PATH)/compat/solaris/make_sunver.pl $$(filter %.ver,$$^) $(OBJS) | grep -v @ > $(SUBDIR)lib$(NAME).ver-sol2'
4499         ;;
4500     netbsd)
4501         disable symver
4502         oss_indev_extralibs="-lossaudio"
4503         oss_outdev_extralibs="-lossaudio"
4504         enabled gcc || check_ldflags -Wl,-zmuldefs
4505         ;;
4506     openbsd|bitrig)
4507         disable symver
4508         SHFLAGS='-shared'
4509         SLIB_INSTALL_NAME='$(SLIBNAME).$(LIBMAJOR).$(LIBMINOR)'
4510         SLIB_INSTALL_LINKS=
4511         oss_indev_extralibs="-lossaudio"
4512         oss_outdev_extralibs="-lossaudio"
4513         ;;
4514     dragonfly)
4515         disable symver
4516         ;;
4517     freebsd)
4518         ;;
4519     bsd/os)
4520         add_extralibs -lpoll -lgnugetopt
4521         strip="strip -d"
4522         ;;
4523     darwin)
4524         enabled ppc && add_asflags -force_cpusubtype_ALL
4525         SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR)'
4526         enabled x86_32 && append SHFLAGS -Wl,-read_only_relocs,suppress
4527         strip="${strip} -x"
4528         add_ldflags -Wl,-dynamic,-search_paths_first
4529         SLIBSUF=".dylib"
4530         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
4531         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
4532         objformat="macho"
4533         enabled x86_64 && objformat="macho64"
4534         enabled_any pic shared x86_64 ||
4535             { check_cflags -mdynamic-no-pic && add_asflags -mdynamic-no-pic; }
4536         check_header dispatch/dispatch.h
4537         ;;
4538     msys*)
4539         die "Native MSYS builds are discouraged, please use the MINGW environment.";
4540         ;;
4541     mingw32*|mingw64*)
4542         if test $target_os = "mingw32ce"; then
4543             disable network
4544         else
4545             target_os=mingw32
4546         fi
4547         decklink_outdev_extralibs="$decklink_outdev_extralibs -lole32 -loleaut32"
4548         decklink_indev_extralibs="$decklink_indev_extralibs -lole32 -loleaut32"
4549         LIBTARGET=i386
4550         if enabled x86_64; then
4551             LIBTARGET="i386:x86-64"
4552         elif enabled arm; then
4553             LIBTARGET=arm-wince
4554         fi
4555         enabled shared && ! enabled small && check_cmd $windres --version && enable gnu_windres
4556         enabled x86_32 && check_ldflags -Wl,--large-address-aware
4557         shlibdir_default="$bindir_default"
4558         SLIBPREF=""
4559         SLIBSUF=".dll"
4560         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
4561         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
4562         dlltool="${cross_prefix}dlltool"
4563         if check_cmd lib.exe -list; then
4564             SLIB_EXTRA_CMD=-'sed -e "s/ @[^ ]*//" $$(@:$(SLIBSUF)=.orig.def) > $$(@:$(SLIBSUF)=.def); lib.exe /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib)'
4565             if enabled x86_64; then
4566                 LIBTARGET=x64
4567             fi
4568         elif check_cmd $dlltool --version; then
4569             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)'
4570         fi
4571         SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
4572         SLIB_INSTALL_LINKS=
4573         SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
4574         SLIB_INSTALL_EXTRA_LIB='lib$(SLIBNAME:$(SLIBSUF)=.dll.a) $(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
4575         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'
4576         objformat="win32"
4577         ranlib=:
4578         enable dos_paths
4579         check_ldflags -Wl,--nxcompat,--dynamicbase
4580         # Lets work around some stupidity in binutils.
4581         # ld will strip relocations from executables even though we need them
4582         # for dynamicbase (ASLR).  Using -pie does retain the reloc section
4583         # however ld then forgets what the entry point should be (oops) so we
4584         # have to manually (re)set it.
4585         if enabled x86_32; then
4586             add_ldexeflags -Wl,--pic-executable,-e,_mainCRTStartup
4587         elif enabled x86_64; then
4588             add_ldexeflags -Wl,--pic-executable,-e,mainCRTStartup
4589             check_ldflags -Wl,--high-entropy-va # binutils 2.25
4590             # Set image base >4GB for extra entropy with HEASLR
4591             add_ldexeflags -Wl,--image-base,0x140000000
4592             append SHFLAGS -Wl,--image-base,0x180000000
4593         fi
4594         ;;
4595     win32|win64)
4596         disable symver
4597         if enabled shared; then
4598             # Link to the import library instead of the normal static library
4599             # for shared libs.
4600             LD_LIB='%.lib'
4601             # Cannot build both shared and static libs with MSVC or icl.
4602             disable static
4603         fi
4604         enabled x86_32 && check_ldflags -LARGEADDRESSAWARE
4605         shlibdir_default="$bindir_default"
4606         SLIBPREF=""
4607         SLIBSUF=".dll"
4608         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
4609         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
4610         SLIB_CREATE_DEF_CMD='$(SRC_PATH)/compat/windows/makedef $(SUBDIR)lib$(NAME).ver $(OBJS) > $$(@:$(SLIBSUF)=.def)'
4611         SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
4612         SLIB_INSTALL_LINKS=
4613         SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
4614         SLIB_INSTALL_EXTRA_LIB='$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
4615         SHFLAGS='-dll -def:$$(@:$(SLIBSUF)=.def) -implib:$(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib)'
4616         objformat="win32"
4617         ranlib=:
4618         enable dos_paths
4619         ;;
4620     cygwin*)
4621         target_os=cygwin
4622         shlibdir_default="$bindir_default"
4623         SLIBPREF="cyg"
4624         SLIBSUF=".dll"
4625         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
4626         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
4627         SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
4628         SLIB_INSTALL_LINKS=
4629         SLIB_INSTALL_EXTRA_LIB='lib$(FULLNAME).dll.a'
4630         SHFLAGS='-shared -Wl,--out-implib,$(SUBDIR)lib$(FULLNAME).dll.a'
4631         objformat="win32"
4632         enable dos_paths
4633         enabled shared && ! enabled small && check_cmd $windres --version && enable gnu_windres
4634         ;;
4635     *-dos|freedos|opendos)
4636         network_extralibs="-lsocket"
4637         objformat="coff"
4638         enable dos_paths
4639         add_cppflags -U__STRICT_ANSI__
4640         ;;
4641     linux)
4642         enable dv1394
4643         enable section_data_rel_ro
4644         ;;
4645     irix*)
4646         target_os=irix
4647         ranlib="echo ignoring ranlib"
4648         ;;
4649     os/2*)
4650         strip="lxlite -CS"
4651         ln_s="cp -f"
4652         objformat="aout"
4653         add_cppflags -D_GNU_SOURCE
4654         add_ldflags -Zomf -Zbin-files -Zargs-wild -Zmap
4655         SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
4656         LIBSUF="_s.a"
4657         SLIBPREF=""
4658         SLIBSUF=".dll"
4659         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
4660         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
4661         SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
4662             echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
4663             echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
4664             echo EXPORTS >> $(SUBDIR)$(NAME).def; \
4665             emxexp $(OBJS) >> $(SUBDIR)$(NAME).def'
4666         SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
4667             emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
4668         SLIB_INSTALL_EXTRA_LIB='$(LIBPREF)$(NAME)_dll.a $(LIBPREF)$(NAME)_dll.lib'
4669         enable dos_paths
4670         enable_weak os2threads
4671         ;;
4672     gnu/kfreebsd)
4673         add_cppflags -D_BSD_SOURCE
4674         ;;
4675     gnu)
4676         ;;
4677     qnx)
4678         add_cppflags -D_QNX_SOURCE
4679         network_extralibs="-lsocket"
4680         ;;
4681     symbian)
4682         SLIBSUF=".dll"
4683         enable dos_paths
4684         add_cflags --include=$sysinclude/gcce/gcce.h -fvisibility=default
4685         add_cppflags -D__GCCE__ -D__SYMBIAN32__ -DSYMBIAN_OE_POSIX_SIGNALS
4686         add_ldflags -Wl,--target1-abs,--no-undefined \
4687                     -Wl,-Ttext,0x80000,-Tdata,0x1000000 -shared \
4688                     -Wl,--entry=_E32Startup -Wl,-u,_E32Startup
4689         add_extralibs -l:eexe.lib -l:usrt2_2.lib -l:dfpaeabi.dso \
4690                       -l:drtaeabi.dso -l:scppnwdl.dso -lsupc++ -lgcc \
4691                       -l:libc.dso -l:libm.dso -l:euser.dso -l:libcrt0.lib
4692         ;;
4693     osf1)
4694         add_cppflags -D_OSF_SOURCE -D_POSIX_PII -D_REENTRANT
4695         ;;
4696     minix)
4697         ;;
4698     plan9)
4699         add_cppflags -D_C99_SNPRINTF_EXTENSION  \
4700                      -D_REENTRANT_SOURCE        \
4701                      -D_RESEARCH_SOURCE         \
4702                      -DFD_SETSIZE=96            \
4703                      -DHAVE_SOCK_OPTS
4704         add_compat strtod.o strtod=avpriv_strtod
4705         network_extralibs='-lbsd'
4706         exeobjs=compat/plan9/main.o
4707         disable ffserver
4708         cp_f='cp'
4709         ;;
4710     none)
4711         ;;
4712     *)
4713         die "Unknown OS '$target_os'."
4714         ;;
4715 esac
4716
4717 # test if creating links works
4718 link_dest=$(mktemp -u $TMPDIR/dest_XXXXXXXX)
4719 link_name=$(mktemp -u $TMPDIR/name_XXXXXXXX)
4720 mkdir "$link_dest"
4721 $ln_s "$link_dest" "$link_name"
4722 touch "$link_dest/test_file"
4723 if [ "$source_path" != "." ] && ([ ! -d src ] || [ -L src ]) && [ -e "$link_name/test_file" ]; then
4724     # create link to source path
4725     [ -e src ] && rm src
4726     $ln_s "$source_path" src
4727     source_link=src
4728 else
4729     # creating directory links doesn't work
4730     # fall back to using the full source path
4731     source_link="$source_path"
4732 fi
4733 # cleanup
4734 rm -r "$link_dest"
4735 rm -r "$link_name"
4736
4737 # determine libc flavour
4738
4739 probe_libc(){
4740     pfx=$1
4741     pfx_no_=${pfx%_}
4742     # uclibc defines __GLIBC__, so it needs to be checked before glibc.
4743     if check_${pfx}cpp_condition features.h "defined __UCLIBC__"; then
4744         eval ${pfx}libc_type=uclibc
4745         add_${pfx}cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
4746     elif check_${pfx}cpp_condition features.h "defined __GLIBC__"; then
4747         eval ${pfx}libc_type=glibc
4748         add_${pfx}cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
4749     # MinGW headers can be installed on Cygwin, so check for newlib first.
4750     elif check_${pfx}cpp_condition newlib.h "defined _NEWLIB_VERSION"; then
4751         eval ${pfx}libc_type=newlib
4752         add_${pfx}cppflags -U__STRICT_ANSI__
4753     # MinGW64 is backwards compatible with MinGW32, so check for it first.
4754     elif check_${pfx}cpp_condition _mingw.h "defined __MINGW64_VERSION_MAJOR"; then
4755         eval ${pfx}libc_type=mingw64
4756         if check_${pfx}cpp_condition _mingw.h "__MINGW64_VERSION_MAJOR < 3"; then
4757             add_compat msvcrt/snprintf.o
4758             add_cflags "-include $source_path/compat/msvcrt/snprintf.h"
4759         fi
4760         add_${pfx}cppflags -U__STRICT_ANSI__ -D__USE_MINGW_ANSI_STDIO=1
4761         eval test \$${pfx_no_}cc_type = "gcc" &&
4762             add_${pfx}cppflags -D__printf__=__gnu_printf__
4763     elif check_${pfx}cpp_condition _mingw.h "defined __MINGW_VERSION"  ||
4764          check_${pfx}cpp_condition _mingw.h "defined __MINGW32_VERSION"; then
4765         eval ${pfx}libc_type=mingw32
4766         check_${pfx}cpp_condition _mingw.h "__MINGW32_MAJOR_VERSION > 3 || \
4767             (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
4768             die "ERROR: MinGW32 runtime version must be >= 3.15."
4769         add_${pfx}cppflags -U__STRICT_ANSI__ -D__USE_MINGW_ANSI_STDIO=1
4770         eval test \$${pfx_no_}cc_type = "gcc" &&
4771             add_${pfx}cppflags -D__printf__=__gnu_printf__
4772     elif check_${pfx}cpp_condition crtversion.h "defined _VC_CRT_MAJOR_VERSION"; then
4773         eval ${pfx}libc_type=msvcrt
4774         if check_${pfx}cpp_condition crtversion.h "_VC_CRT_MAJOR_VERSION < 14"; then
4775             if [ "$pfx" = host_ ]; then
4776                 add_host_cppflags -Dsnprintf=_snprintf
4777             else
4778                 add_compat strtod.o strtod=avpriv_strtod
4779                 add_compat msvcrt/snprintf.o snprintf=avpriv_snprintf   \
4780                                              _snprintf=avpriv_snprintf  \
4781                                              vsnprintf=avpriv_vsnprintf
4782             fi
4783         fi
4784         # The MSVC 2010 headers (Win 7.0 SDK) set _WIN32_WINNT to
4785         # 0x601 by default unless something else is set by the user.
4786         # This can easily lead to us detecting functions only present
4787         # in such new versions and producing binaries requiring windows 7.0.
4788         # Therefore explicitly set the default to XP unless the user has
4789         # set something else on the command line.
4790         # Don't do this if WINAPI_FAMILY is set and is set to a non-desktop
4791         # family. For these cases, configure is free to use any functions
4792         # found in the SDK headers by default. (Alternatively, we could force
4793         # _WIN32_WINNT to 0x0602 in that case.)
4794         check_${pfx}cpp_condition stdlib.h "defined(_WIN32_WINNT)" ||
4795             { check_${pfx}cpp <<EOF && add_${pfx}cppflags -D_WIN32_WINNT=0x0502; }
4796 #ifdef WINAPI_FAMILY
4797 #include <winapifamily.h>
4798 #if !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
4799 #error not desktop
4800 #endif
4801 #endif
4802 EOF
4803     elif check_${pfx}cpp_condition stddef.h "defined __KLIBC__"; then
4804         eval ${pfx}libc_type=klibc
4805     elif check_${pfx}cpp_condition sys/cdefs.h "defined __BIONIC__"; then
4806         eval ${pfx}libc_type=bionic
4807     elif check_${pfx}cpp_condition sys/brand.h "defined LABELED_BRAND_NAME"; then
4808         eval ${pfx}libc_type=solaris
4809         add_${pfx}cppflags -D__EXTENSIONS__ -D_XOPEN_SOURCE=600
4810     fi
4811     check_${pfx}cc <<EOF
4812 #include <time.h>
4813 void *v = localtime_r;
4814 EOF
4815 test "$?" != 0 && check_${pfx}cc -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 <<EOF && add_${pfx}cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
4816 #include <time.h>
4817 void *v = localtime_r;
4818 EOF
4819
4820 }
4821
4822 probe_libc
4823 test -n "$libc_type" && enable libc_$libc_type
4824 probe_libc host_
4825 test -n "$host_libc_type" && enable host_libc_$host_libc_type
4826
4827 case $libc_type in
4828     bionic)
4829         add_compat strtod.o strtod=avpriv_strtod
4830         ;;
4831 esac
4832
4833 # hacks for compiler/libc/os combinations
4834
4835 if enabled_all tms470 libc_glibc; then
4836     CPPFLAGS="-I${source_path}/compat/tms470 ${CPPFLAGS}"
4837     add_cppflags -D__USER_LABEL_PREFIX__=
4838     add_cppflags -D__builtin_memset=memset
4839     add_cppflags -D__gnuc_va_list=va_list -D_VA_LIST_DEFINED
4840     add_cflags   -pds=48    # incompatible redefinition of macro
4841 fi
4842
4843 if enabled_all ccc libc_glibc; then
4844     add_ldflags -Wl,-z,now  # calls to libots crash without this
4845 fi
4846
4847 check_compile_assert flt_lim "float.h limits.h" "DBL_MAX == (double)DBL_MAX" ||
4848     add_cppflags '-I\$(SRC_PATH)/compat/float'
4849
4850 esc(){
4851     echo "$*" | sed 's/%/%25/g;s/:/%3a/g'
4852 }
4853
4854 echo "config:$arch:$subarch:$cpu:$target_os:$(esc $cc_ident):$(esc $FFMPEG_CONFIGURATION)" >config.fate
4855
4856 check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable_weak pic
4857
4858 set_default libdir
4859 : ${shlibdir_default:="$libdir"}
4860 : ${pkgconfigdir_default:="$libdir/pkgconfig"}
4861
4862 set_default $PATHS_LIST
4863 set_default nm
4864
4865 # we need to build at least one lib type
4866 if ! enabled_any static shared; then
4867     cat <<EOF
4868 At least one library type must be built.
4869 Specify --enable-static to build the static libraries or --enable-shared to
4870 build the shared libraries as well. To only build the shared libraries specify
4871 --disable-static in addition to --enable-shared.
4872 EOF
4873     exit 1;
4874 fi
4875
4876 die_license_disabled() {
4877     enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
4878 }
4879
4880 die_license_disabled_gpl() {
4881     enabled $1 || { enabled $2 && die "$2 is incompatible with the gpl and --enable-$1 is not specified."; }
4882 }
4883
4884 die_license_disabled gpl frei0r
4885 die_license_disabled gpl libcdio
4886 die_license_disabled gpl librubberband
4887 die_license_disabled gpl libsmbclient
4888 die_license_disabled gpl libutvideo
4889 die_license_disabled gpl libvidstab
4890 die_license_disabled gpl libx264
4891 die_license_disabled gpl libx265
4892 die_license_disabled gpl libxavs
4893 die_license_disabled gpl libxvid
4894 die_license_disabled gpl x11grab
4895
4896 die_license_disabled nonfree cuda
4897 die_license_disabled nonfree libfaac
4898 die_license_disabled nonfree nvenc
4899 enabled gpl && die_license_disabled_gpl nonfree libfdk_aac
4900 enabled gpl && die_license_disabled_gpl nonfree openssl
4901
4902 die_license_disabled version3 gmp
4903 die_license_disabled version3 libopencore_amrnb
4904 die_license_disabled version3 libopencore_amrwb
4905 die_license_disabled version3 libsmbclient
4906 die_license_disabled version3 libvo_amrwbenc
4907
4908 enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
4909
4910 disabled optimizations || check_cflags -fomit-frame-pointer
4911
4912 enable_weak_pic() {
4913     disabled pic && return
4914     enable pic
4915     add_cppflags -DPIC
4916     case "$target_os" in
4917     mingw*|cygwin*)
4918         ;;
4919     *)
4920         add_cflags -fPIC
4921         ;;
4922     esac
4923     add_asflags  -fPIC
4924 }
4925
4926 enabled pic && enable_weak_pic
4927
4928 check_cc <<EOF || die "Symbol mangling check failed."
4929 int ff_extern;
4930 EOF
4931 sym=$($nm $TMPO | awk '/ff_extern/{ print substr($0, match($0, /[^ \t]*ff_extern/)) }')
4932 extern_prefix=${sym%%ff_extern*}
4933
4934 check_cc <<EOF && enable_weak inline_asm
4935 void foo(void) { __asm__ volatile ("" ::); }
4936 EOF
4937
4938 _restrict=
4939 for restrict_keyword in restrict __restrict__ __restrict; do
4940     check_cc <<EOF && _restrict=$restrict_keyword && break
4941 void foo(char * $restrict_keyword p);
4942 EOF
4943 done
4944
4945 check_cc <<EOF && enable pragma_deprecated
4946 void foo(void) { _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") }
4947 EOF
4948
4949 check_cc <<EOF && enable attribute_packed
4950 struct { int x; } __attribute__((packed)) x;
4951 EOF
4952
4953 check_cc <<EOF && enable attribute_may_alias
4954 union { int x; } __attribute__((may_alias)) x;
4955 EOF
4956
4957 check_cc <<EOF || die "endian test failed"
4958 unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
4959 EOF
4960 od -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
4961
4962 if ! enabled ppc64 || enabled bigendian; then
4963     disable vsx
4964 fi
4965
4966 check_gas() {
4967     log "check_gas using '$as' as AS"
4968     # :vararg is used on aarch64, arm and ppc altivec
4969     check_as <<EOF || return 1
4970 .macro m n, y:vararg=0
4971 \n: .int \y
4972 .endm
4973 m x
4974 EOF
4975     # .altmacro is only used in arm asm
4976     ! enabled arm || check_as <<EOF || return 1
4977 .altmacro
4978 EOF
4979     enable gnu_as
4980     return 0
4981 }
4982
4983 if enabled_any arm aarch64 || enabled_all ppc altivec && enabled asm; then
4984     nogas=:
4985     enabled_any arm aarch64 && nogas=die
4986     enabled_all ppc altivec && [ $target_os_default != aix ] && nogas=warn
4987     as_noop=-v
4988
4989     case $as_type in
4990         arm*) gaspp_as_type=armasm; as_noop=-h ;;
4991         gcc)  gaspp_as_type=gas ;;
4992         *)    gaspp_as_type=$as_type ;;
4993     esac
4994
4995     [ $target_os = "darwin" ] && gaspp_as_type="apple-$gaspp_as_type"
4996
4997     test "${as#*gas-preprocessor.pl}" != "$as" ||
4998     check_cmd gas-preprocessor.pl -arch $arch -as-type $gaspp_as_type -- ${as:=$cc} $as_noop &&
4999         gas="${gas:=gas-preprocessor.pl} -arch $arch -as-type $gaspp_as_type -- ${as:=$cc}"
5000
5001     if ! check_gas ; then
5002         as=${gas:=$as}
5003         check_gas || \
5004             $nogas "GNU assembler not found, install/update gas-preprocessor"
5005     fi
5006
5007     check_as <<EOF && enable as_func
5008 .func test
5009 .endfunc
5010 EOF
5011 fi
5012
5013 check_inline_asm inline_asm_labels '"1:\n"'
5014
5015 check_inline_asm inline_asm_nonlocal_labels '"Label:\n"'
5016
5017 if enabled aarch64; then
5018     enabled armv8 && check_insn armv8 'prfm   pldl1strm, [x0]'
5019     # internal assembler in clang 3.3 does not support this instruction
5020     enabled neon && check_insn neon 'ext   v0.8B, v0.8B, v1.8B, #1'
5021     enabled vfp  && check_insn vfp  'fmadd d0,    d0,    d1,    d2'
5022
5023     map 'enabled_any ${v}_external ${v}_inline || disable $v' $ARCH_EXT_LIST_ARM
5024
5025 elif enabled alpha; then
5026
5027     check_cflags -mieee
5028
5029 elif enabled arm; then
5030
5031     enabled msvc && check_cpp_condition stddef.h "defined _M_ARMT" && enable thumb
5032
5033     check_cpp_condition stddef.h "defined __thumb__" && check_cc <<EOF && enable_weak thumb
5034 float func(float a, float b){ return a+b; }
5035 EOF
5036
5037     enabled thumb && check_cflags -mthumb || check_cflags -marm
5038
5039     if     check_cpp_condition stddef.h "defined __ARM_PCS_VFP"; then
5040         enable vfp_args
5041     elif check_cpp_condition stddef.h "defined _M_ARM_FP && _M_ARM_FP >= 30"; then
5042         enable vfp_args
5043     elif ! check_cpp_condition stddef.h "defined __ARM_PCS || defined __SOFTFP__" && [ $target_os != darwin ]; then
5044         case "${cross_prefix:-$cc}" in
5045             *hardfloat*)         enable vfp_args;   fpabi=vfp ;;
5046             *) check_ld "cc" <<EOF && enable vfp_args && fpabi=vfp || fpabi=soft ;;
5047 __asm__ (".eabi_attribute 28, 1");
5048 int main(void) { return 0; }
5049 EOF
5050         esac
5051         warn "Compiler does not indicate floating-point ABI, guessing $fpabi."
5052     fi
5053
5054     enabled armv5te && check_insn armv5te 'qadd r0, r0, r0'
5055     enabled armv6   && check_insn armv6   'sadd16 r0, r0, r0'
5056     enabled armv6t2 && check_insn armv6t2 'movt r0, #0'
5057     enabled neon    && check_insn neon    'vadd.i16 q0, q0, q0'
5058     enabled vfp     && check_insn vfp     'fadds s0, s0, s0'
5059     enabled vfpv3   && check_insn vfpv3   'vmov.f32 s0, #1.0'
5060     enabled setend  && check_insn setend  'setend be'
5061
5062     [ $target_os = linux ] || [ $target_os = android ] ||
5063         map 'enabled_any ${v}_external ${v}_inline || disable $v' \
5064             $ARCH_EXT_LIST_ARM
5065
5066     check_inline_asm asm_mod_q '"add r0, %Q0, %R0" :: "r"((long long)0)'
5067
5068     check_as <<EOF && enable as_dn_directive
5069 ra .dn d0.i16
5070 .unreq ra
5071 EOF
5072
5073     # llvm's integrated assembler supports .object_arch from llvm 3.5
5074     [ "$objformat" = elf ] && check_as <<EOF && enable as_object_arch
5075 .object_arch armv4
5076 EOF
5077
5078     [ $target_os != win32 ] && enabled_all armv6t2 shared !pic && enable_weak_pic
5079
5080 elif enabled mips; then
5081
5082     enabled loongson2 && check_inline_asm loongson2 '"dmult.g $8, $9, $10"'
5083     enabled loongson3 && check_inline_asm loongson3 '"gsldxc1 $f0, 0($2, $3)"'
5084     enabled mmi && check_inline_asm mmi '"punpcklhw $f0, $f0, $f0"'
5085
5086     # Enable minimum ISA based on selected options
5087     if enabled mips64; then
5088         if enabled mips64r6; then
5089             check_ldflags "-mips64r6" &&
5090             add_cflags "-mips64r6" &&
5091             add_asflags "-mips64r6" &&
5092             check_inline_asm mips64r6 '"dlsa $0, $0, $0, 1"' ||
5093             disable mips64r6
5094         fi
5095         if disabled mips64r6 && enabled mips64r2; then
5096             check_ldflags "-mips64r2" &&
5097             add_cflags "-mips64r2" &&
5098             add_asflags "-mips64r2" &&
5099             check_inline_asm mips64r2 '"dext $0, $0, 0, 1"' ||
5100             disable mips64r2
5101         fi
5102         if disabled mips64r6 && disabled mips64r2; then
5103             check_ldflags "-mips64" &&
5104             add_cflags "-mips64" &&
5105             add_asflags "-mips64" &&
5106             check_inline_asm mips64r1 '"daddi $0, $0, 0"' ||
5107             disable mips64r1
5108         fi
5109     else
5110         if enabled mips32r6; then
5111             check_ldflags "-mips32r6" &&
5112             add_cflags "-mips32r6" &&
5113             add_asflags "-mips32r6" &&
5114             check_inline_asm mips32r6 '"aui $0, $0, 0"' ||
5115             disable mips32r6
5116         fi
5117         if disabled mips32r6 && enabled mips32r2; then
5118             check_ldflags "-mips32r2" &&
5119             add_cflags "-mips32r2" &&
5120             add_asflags "-mips32r2" &&
5121             check_inline_asm mips32r2 '"ext $0, $0, 0, 1"' ||
5122             disable mips32r2
5123         fi
5124         if disabled mips32r6 && disabled mips32r2; then
5125             check_ldflags "-mips32" &&
5126             add_cflags "-mips32" &&
5127             add_asflags "-mips32" &&
5128             check_inline_asm mips32r1 '"addi $0, $0, 0"' ||
5129             disable mips32r1
5130         fi
5131     fi
5132
5133     # MIPS FPU
5134     if enabled mipsfpu; then
5135         check_ldflags "-mhard-float" &&
5136         add_cflags "-mhard-float" &&
5137         add_asflags "-mhard-float" &&
5138         check_inline_asm mipsfpu '"cvt.d.l $f0, $f2"' ||
5139         disable mipsfpu
5140     fi
5141
5142     # MSA and DSP support require ISA revision level 2 or greater
5143     if enabled mips32r2 || enabled mips64r2 || enabled mips32r6 || enabled mips64r6; then
5144         # MSA must be used with -mfp64 and -mhard-float
5145         if enabled mipsfpu; then
5146             if enabled msa; then
5147                 check_ldflags "-mfp64 -mmsa" &&
5148                 add_cflags "-mfp64 -mmsa" &&
5149                 add_asflags "-mfp64 -mmsa" &&
5150                 check_inline_asm msa '"addvi.b $w0, $w1, 1"' &&
5151                 check_header msa.h ||
5152                 disable msa
5153             fi
5154         else
5155             disable msa
5156         fi
5157
5158         if enabled mipsdsp; then
5159             check_ldflags "-mdsp" &&
5160             add_cflags "-mdsp" &&
5161             add_asflags "-mdsp" &&
5162             check_inline_asm mipsdsp '"addu.qb $t0, $t1, $t2"' ||
5163             disable mipsdsp
5164         fi
5165         if enabled mipsdspr2; then
5166             check_ldflags "-mdspr2" &&
5167             add_cflags "-mdspr2" &&
5168             add_asflags "-mdspr2" &&
5169             check_inline_asm mipsdspr2 '"absq_s.qb $t0, $t1"' ||
5170             disable mipsdspr2
5171         fi
5172     fi
5173
5174 elif enabled parisc; then
5175
5176     if enabled gcc; then
5177         case $($cc -dumpversion) in
5178             4.[3-9].*) check_cflags -fno-optimize-sibling-calls ;;
5179         esac
5180     fi
5181
5182 elif enabled ppc; then
5183
5184     enable local_aligned_8 local_aligned_16 local_aligned_32
5185
5186     check_inline_asm dcbzl     '"dcbzl 0, %0" :: "r"(0)'
5187     check_inline_asm ibm_asm   '"add 0, 0, 0"'
5188     check_inline_asm ppc4xx    '"maclhw r10, r11, r12"'
5189     check_inline_asm xform_asm '"lwzx %1, %y0" :: "Z"(*(int*)0), "r"(0)'
5190
5191     # AltiVec flags: The FSF version of GCC differs from the Apple version
5192     if enabled altivec; then
5193         check_cflags -maltivec -mabi=altivec &&
5194         { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
5195         check_cflags -faltivec
5196
5197         # check if our compiler supports Motorola AltiVec C API
5198         check_cc <<EOF || disable altivec
5199 $inc_altivec_h
5200 int main(void) {
5201     vector signed int v1 = (vector signed int) { 0 };
5202     vector signed int v2 = (vector signed int) { 1 };
5203     v1 = vec_add(v1, v2);
5204     return 0;
5205 }
5206 EOF
5207
5208         enabled altivec || warn "Altivec disabled, possibly missing --cpu flag"
5209     fi
5210
5211     if enabled vsx; then
5212         check_cflags -mvsx &&
5213         check_builtin vec_vsx_ld "altivec.h" "__builtin_vec_vsx_ld" || disable vsx
5214     fi
5215
5216     if enabled power8; then
5217         check_cpp_condition "altivec.h" "defined(_ARCH_PWR8)" || disable power8
5218     fi
5219
5220 elif enabled x86; then
5221
5222     check_builtin rdtsc    intrin.h   "__rdtsc()"
5223     check_builtin mm_empty mmintrin.h "_mm_empty()"
5224
5225     enable local_aligned_8 local_aligned_16 local_aligned_32
5226
5227     # check whether EBP is available on x86
5228     # As 'i' is stored on the stack, this program will crash
5229     # if the base pointer is used to access it because the
5230     # base pointer is cleared in the inline assembly code.
5231     check_exec_crash <<EOF && enable ebp_available
5232 volatile int i=0;
5233 __asm__ volatile ("xorl %%ebp, %%ebp" ::: "%ebp");
5234 return i;
5235 EOF
5236
5237     # check whether EBX is available on x86
5238     check_inline_asm ebx_available '""::"b"(0)' &&
5239         check_inline_asm ebx_available '"":::"%ebx"'
5240
5241     # check whether xmm clobbers are supported
5242     check_inline_asm xmm_clobbers '"":::"%xmm0"'
5243
5244     check_inline_asm inline_asm_direct_symbol_refs '"movl '$extern_prefix'test, %eax"' ||
5245         check_inline_asm inline_asm_direct_symbol_refs '"movl '$extern_prefix'test(%rip), %eax"'
5246
5247     # check whether binutils is new enough to compile SSSE3/MMXEXT
5248     enabled ssse3  && check_inline_asm ssse3_inline  '"pabsw %xmm0, %xmm0"'
5249     enabled mmxext && check_inline_asm mmxext_inline '"pmaxub %mm0, %mm1"'
5250
5251     if ! disabled_any asm mmx yasm; then
5252         if check_cmd $yasmexe --version; then
5253             enabled x86_64 && yasm_extra="-m amd64"
5254             yasm_debug="-g dwarf2"
5255         elif check_cmd nasm -v; then
5256             yasmexe=nasm
5257             yasm_debug="-g -F dwarf"
5258             if enabled x86_64; then
5259                 case "$objformat" in
5260                     elf)   objformat=elf64 ;;
5261                     win32) objformat=win64 ;;
5262                 esac
5263             fi
5264         fi
5265
5266         YASMFLAGS="-f $objformat $yasm_extra"
5267         enabled pic               && append YASMFLAGS "-DPIC"
5268         test -n "$extern_prefix"  && append YASMFLAGS "-DPREFIX"
5269         case "$objformat" in
5270             elf*) enabled debug && append YASMFLAGS $yasm_debug ;;
5271         esac
5272
5273         check_yasm "movbe ecx, [5]" && enable yasm ||
5274             die "yasm/nasm not found or too old. Use --disable-yasm for a crippled build."
5275         check_yasm "vextracti128 xmm0, ymm0, 0"      || disable avx2_external
5276         check_yasm "vpmacsdd xmm0, xmm1, xmm2, xmm3" || disable xop_external
5277         check_yasm "vfmaddps ymm0, ymm1, ymm2, ymm3" || disable fma4_external
5278         check_yasm "CPU amdnop" || disable cpunop
5279     fi
5280
5281     case "$cpu" in
5282         athlon*|opteron*|k8*|pentium|pentium-mmx|prescott|nocona|atom|geode)
5283             disable fast_clz
5284         ;;
5285     esac
5286
5287 fi
5288
5289 check_code cc arm_neon.h "int16x8_t test = vdupq_n_s16(0)" && enable intrinsics_neon
5290
5291 check_ldflags -Wl,--as-needed
5292 check_ldflags -Wl,-z,noexecstack
5293
5294 if check_func dlopen; then
5295     ldl=
5296 elif check_func dlopen -ldl; then
5297     ldl=-ldl
5298 fi
5299
5300 decklink_outdev_extralibs="$decklink_outdev_extralibs $ldl"
5301 decklink_indev_extralibs="$decklink_indev_extralibs $ldl"
5302 frei0r_filter_extralibs='$ldl'
5303 frei0r_src_filter_extralibs='$ldl'
5304 ladspa_filter_extralibs='$ldl'
5305 nvenc_encoder_extralibs='$ldl'
5306
5307 if ! disabled network; then
5308     check_func getaddrinfo $network_extralibs
5309     check_func inet_aton $network_extralibs
5310
5311     check_type netdb.h "struct addrinfo"
5312     check_type netinet/in.h "struct group_source_req" -D_BSD_SOURCE
5313     check_type netinet/in.h "struct ip_mreq_source" -D_BSD_SOURCE
5314     check_type netinet/in.h "struct ipv6_mreq" -D_DARWIN_C_SOURCE
5315     check_type poll.h "struct pollfd"
5316     check_type netinet/sctp.h "struct sctp_event_subscribe"
5317     check_struct "sys/types.h sys/socket.h" "struct sockaddr" sa_len
5318     check_type netinet/in.h "struct sockaddr_in6"
5319     check_type "sys/types.h sys/socket.h" "struct sockaddr_storage"
5320     check_type "sys/types.h sys/socket.h" socklen_t
5321
5322     # Prefer arpa/inet.h over winsock2
5323     if check_header arpa/inet.h ; then
5324         check_func closesocket
5325     elif check_header winsock2.h ; then
5326         check_func_headers winsock2.h closesocket -lws2 &&
5327             network_extralibs="-lws2" ||
5328         { check_func_headers winsock2.h closesocket -lws2_32 &&
5329             network_extralibs="-lws2_32"; } || disable winsock2_h network
5330         check_func_headers ws2tcpip.h getaddrinfo $network_extralibs
5331
5332         check_type ws2tcpip.h socklen_t
5333         check_type ws2tcpip.h "struct addrinfo"
5334         check_type ws2tcpip.h "struct group_source_req"
5335         check_type ws2tcpip.h "struct ip_mreq_source"
5336         check_type ws2tcpip.h "struct ipv6_mreq"
5337         check_type winsock2.h "struct pollfd"
5338         check_struct winsock2.h "struct sockaddr" sa_len
5339         check_type ws2tcpip.h "struct sockaddr_in6"
5340         check_type ws2tcpip.h "struct sockaddr_storage"
5341     else
5342         disable network
5343     fi
5344 fi
5345
5346 check_builtin atomic_cas_ptr atomic.h "void **ptr; void *oldval, *newval; atomic_cas_ptr(ptr, oldval, newval)"
5347 check_builtin atomic_compare_exchange "" "int *ptr, *oldval; int newval; __atomic_compare_exchange_n(ptr, oldval, newval, 0, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST)"
5348 check_builtin machine_rw_barrier mbarrier.h "__machine_rw_barrier()"
5349 check_builtin MemoryBarrier windows.h "MemoryBarrier()"
5350 check_builtin sarestart signal.h "SA_RESTART"
5351 check_builtin sem_timedwait semaphore.h "sem_t *s; sem_init(s,0,0); sem_timedwait(s,0); sem_destroy(s)" -lpthread
5352 check_builtin sync_val_compare_and_swap "" "int *ptr; int oldval, newval; __sync_val_compare_and_swap(ptr, oldval, newval)"
5353 check_builtin gmtime_r time.h "time_t *time; struct tm *tm; gmtime_r(time, tm)"
5354 check_builtin localtime_r time.h "time_t *time; struct tm *tm; localtime_r(time, tm)"
5355
5356 case "$custom_allocator" in
5357     jemalloc)
5358         # jemalloc by default does not use a prefix
5359         require libjemalloc jemalloc/jemalloc.h malloc -ljemalloc
5360     ;;
5361     tcmalloc)
5362         require_pkg_config libtcmalloc gperftools/tcmalloc.h tc_malloc
5363         malloc_prefix=tc_
5364     ;;
5365 esac
5366
5367 check_func_headers malloc.h _aligned_malloc     && enable aligned_malloc
5368 check_func  ${malloc_prefix}memalign            && enable memalign
5369 check_func  ${malloc_prefix}posix_memalign      && enable posix_memalign
5370
5371 check_func  access
5372 check_func  arc4random
5373 check_func_headers time.h clock_gettime || { check_func_headers time.h clock_gettime -lrt && add_extralibs -lrt && LIBRT="-lrt"; }
5374 check_func  fcntl
5375 check_func  fork
5376 check_func  gethrtime
5377 check_func  getopt
5378 check_func  getrusage
5379 check_func  gettimeofday
5380 check_func  isatty
5381 check_func  mach_absolute_time
5382 check_func  mkstemp
5383 check_func  mmap
5384 check_func  mprotect
5385 # Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
5386 check_func_headers time.h nanosleep || { check_func_headers time.h nanosleep -lrt && add_extralibs -lrt && LIBRT="-lrt"; }
5387 check_func  sched_getaffinity
5388 check_func  setrlimit
5389 check_struct "sys/stat.h" "struct stat" st_mtim.tv_nsec -D_BSD_SOURCE
5390 check_func  strerror_r
5391 check_func  sysconf
5392 check_func  sysctl
5393 check_func  usleep
5394
5395 check_func_headers conio.h kbhit
5396 check_func_headers io.h setmode
5397 check_func_headers lzo/lzo1x.h lzo1x_999_compress
5398 check_func_headers stdlib.h getenv
5399 check_func_headers sys/stat.h lstat
5400
5401 check_func_headers windows.h CoTaskMemFree -lole32
5402 check_func_headers windows.h GetProcessAffinityMask
5403 check_func_headers windows.h GetProcessTimes
5404 check_func_headers windows.h GetSystemTimeAsFileTime
5405 check_func_headers windows.h MapViewOfFile
5406 check_func_headers windows.h PeekNamedPipe
5407 check_func_headers windows.h SetConsoleTextAttribute
5408 check_func_headers windows.h SetConsoleCtrlHandler
5409 check_func_headers windows.h Sleep
5410 check_func_headers windows.h VirtualAlloc
5411 check_struct windows.h "CONDITION_VARIABLE" Ptr
5412 check_func_headers glob.h glob
5413 enabled xlib &&
5414     check_func_headers "X11/Xlib.h X11/extensions/Xvlib.h" XvGetPortAttribute -lXv -lX11 -lXext
5415
5416 check_header direct.h
5417 check_header dirent.h
5418 check_header dlfcn.h
5419 check_header d3d11.h
5420 check_header dxva.h
5421 check_header dxva2api.h -D_WIN32_WINNT=0x0600
5422 check_header io.h
5423 check_header libcrystalhd/libcrystalhd_if.h
5424 check_header mach/mach_time.h
5425 check_header malloc.h
5426 check_header net/udplite.h
5427 check_header poll.h
5428 check_header sys/mman.h
5429 check_header sys/param.h
5430 check_header sys/resource.h
5431 check_header sys/select.h
5432 check_header sys/time.h
5433 check_header sys/un.h
5434 check_header termios.h
5435 check_header unistd.h
5436 check_header valgrind/valgrind.h
5437 check_header vdpau/vdpau.h
5438 check_header vdpau/vdpau_x11.h
5439 check_header VideoDecodeAcceleration/VDADecoder.h
5440 check_header VideoToolbox/VideoToolbox.h
5441 check_header windows.h
5442 check_header X11/extensions/XvMClib.h
5443 check_header asm/types.h
5444
5445 check_lib2 "windows.h shellapi.h" CommandLineToArgvW -lshell32
5446 check_lib2 "windows.h wincrypt.h" CryptGenRandom -ladvapi32
5447 check_lib2 "windows.h psapi.h" GetProcessMemoryInfo -lpsapi
5448 check_lib "CoreServices/CoreServices.h" UTGetOSTypeFromString "-framework CoreServices"
5449
5450 check_struct "sys/time.h sys/resource.h" "struct rusage" ru_maxrss
5451
5452 check_type "windows.h dxva.h" "DXVA_PicParams_HEVC" -DWINAPI_FAMILY=WINAPI_FAMILY_DESKTOP_APP -D_CRT_BUILD_DESKTOP_APP=0
5453 check_type "windows.h dxva.h" "DXVA_PicParams_VP9" -DWINAPI_FAMILY=WINAPI_FAMILY_DESKTOP_APP -D_CRT_BUILD_DESKTOP_APP=0
5454 check_type "windows.h d3d11.h" "ID3D11VideoDecoder"
5455 check_type "windows.h d3d11.h" "ID3D11VideoContext"
5456 check_type "d3d9.h dxva2api.h" DXVA2_ConfigPictureDecode -D_WIN32_WINNT=0x0602
5457
5458 check_type "va/va.h" "VAPictureParameterBufferHEVC"
5459 check_type "va/va.h" "VADecPictureParameterBufferVP9"
5460
5461 check_type "vdpau/vdpau.h" "VdpPictureInfoHEVC"
5462
5463 check_cpp_condition windows.h "!WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)" && enable winrt || disable winrt
5464
5465 if ! disabled w32threads && ! enabled pthreads; then
5466     check_func_headers "windows.h process.h" _beginthreadex &&
5467         enable w32threads || disable w32threads
5468     if ! enabled w32threads && enabled winrt; then
5469         check_func_headers "windows.h" CreateThread &&
5470             enable w32threads || disable w32threads
5471     fi
5472 fi
5473
5474 # check for some common methods of building with pthread support
5475 # do this before the optional library checks as some of them require pthreads
5476 if ! disabled pthreads && ! enabled w32threads && ! enabled os2threads; then
5477     enable pthreads
5478     if check_func pthread_join -pthread && check_func pthread_create -pthread; then
5479         add_cflags -pthread
5480         add_extralibs -pthread
5481     elif check_func pthread_join -pthreads && check_func pthread_create -pthreads; then
5482         add_cflags -pthreads
5483         add_extralibs -pthreads
5484     elif check_func pthread_join -ldl -pthread && check_func pthread_create -ldl -pthread; then
5485         add_cflags -ldl -pthread
5486         add_extralibs -ldl -pthread
5487     elif check_func pthread_join -lpthreadGC2 && check_func pthread_create -lpthreadGC2; then
5488         add_extralibs -lpthreadGC2
5489     elif check_lib pthread.h pthread_join -lpthread && check_lib pthread.h pthread_create -lpthread; then
5490         :
5491     elif ! check_func pthread_join && ! check_func pthread_create; then
5492         disable pthreads
5493     fi
5494     check_code cc "pthread.h" "static pthread_mutex_t atomic_lock = PTHREAD_MUTEX_INITIALIZER" || disable pthreads
5495 fi
5496
5497
5498 if enabled pthreads; then
5499   check_func pthread_cancel
5500 fi
5501
5502 disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
5503 disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
5504 disabled  lzma || check_lib2  lzma.h lzma_version_number -llzma || disable lzma
5505
5506 check_lib math.h sin -lm && LIBM="-lm"
5507 disabled crystalhd || check_lib libcrystalhd/libcrystalhd_if.h DtsCrystalHDVersion -lcrystalhd || disable crystalhd
5508
5509 atan2f_args=2
5510 copysign_args=2
5511 hypot_args=2
5512 ldexpf_args=2
5513 powf_args=2
5514
5515 for func in $MATH_FUNCS; do
5516     eval check_mathfunc $func \${${func}_args:-1}
5517 done
5518
5519 for func in $COMPLEX_FUNCS; do
5520     eval check_complexfunc $func \${${func}_args:-1}
5521 done
5522
5523 # these are off by default, so fail if requested and not available
5524 enabled avfoundation_indev && { check_header_objcc AVFoundation/AVFoundation.h || disable avfoundation_indev; }
5525 enabled avfoundation_indev && { check_lib2 CoreGraphics/CoreGraphics.h CGGetActiveDisplayList -framework CoreGraphics ||
5526                                 check_lib2 ApplicationServices/ApplicationServices.h CGGetActiveDisplayList -framework ApplicationServices; }
5527 enabled avisynth          && { { check_lib2 "windows.h" LoadLibrary; } ||
5528                                { check_lib2 "dlfcn.h" dlopen -ldl; } ||
5529                                die "ERROR: LoadLibrary/dlopen not found for avisynth"; }
5530 enabled cuda              && check_lib cuda.h cuInit -lcuda
5531 enabled chromaprint       && require chromaprint chromaprint.h chromaprint_get_version -lchromaprint
5532 enabled decklink          && { check_header DeckLinkAPI.h || die "ERROR: DeckLinkAPI.h header not found"; }
5533 enabled frei0r            && { check_header frei0r.h || die "ERROR: frei0r.h header not found"; }
5534 enabled gmp               && require2 gmp gmp.h mpz_export -lgmp
5535 enabled gnutls            && require_pkg_config gnutls gnutls/gnutls.h gnutls_global_init
5536 enabled ladspa            && { check_header ladspa.h || die "ERROR: ladspa.h header not found"; }
5537 enabled libiec61883       && require libiec61883 libiec61883/iec61883.h iec61883_cmp_connect -lraw1394 -lavc1394 -lrom1394 -liec61883
5538 enabled libass            && require_pkg_config libass ass/ass.h ass_library_init
5539 enabled libbluray         && require_pkg_config libbluray libbluray/bluray.h bd_open
5540 enabled libbs2b           && require_pkg_config libbs2b bs2b.h bs2b_open
5541 enabled libcelt           && require libcelt celt/celt.h celt_decode -lcelt0 &&
5542                              { check_lib celt/celt.h celt_decoder_create_custom -lcelt0 ||
5543                                die "ERROR: libcelt must be installed and version must be >= 0.11.0."; }
5544 enabled libcaca           && require_pkg_config caca caca.h caca_create_canvas
5545 enabled libdcadec         && require_pkg_config "dcadec >= 0.1.0" libdcadec/dca_context.h dcadec_context_create
5546 enabled libfaac           && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
5547 enabled libfdk_aac        && { use_pkg_config fdk-aac "fdk-aac/aacenc_lib.h" aacEncOpen ||
5548                                { require libfdk_aac fdk-aac/aacenc_lib.h aacEncOpen -lfdk-aac &&
5549                                  warn "using libfdk without pkg-config"; } }
5550 flite_libs="-lflite_cmu_time_awb -lflite_cmu_us_awb -lflite_cmu_us_kal -lflite_cmu_us_kal16 -lflite_cmu_us_rms -lflite_cmu_us_slt -lflite_usenglish -lflite_cmulex -lflite"
5551 enabled libflite          && require2 libflite "flite/flite.h" flite_init $flite_libs
5552 enabled fontconfig        && enable libfontconfig
5553 enabled libfontconfig     && require_pkg_config fontconfig "fontconfig/fontconfig.h" FcInit
5554 enabled libfreetype       && require_libfreetype
5555 enabled libfribidi        && require_pkg_config fribidi fribidi.h fribidi_version_info
5556 enabled libgme            && require  libgme gme/gme.h gme_new_emu -lgme -lstdc++
5557 enabled libgsm            && { for gsm_hdr in "gsm.h" "gsm/gsm.h"; do
5558                                    check_lib "${gsm_hdr}" gsm_create -lgsm && break;
5559                                done || die "ERROR: libgsm not found"; }
5560 enabled libilbc           && require libilbc ilbc.h WebRtcIlbcfix_InitDecode -lilbc
5561 enabled libkvazaar        && require_pkg_config "kvazaar >= 0.8.1" kvazaar.h kvz_api_get
5562 enabled libmfx            && require_pkg_config libmfx "mfx/mfxvideo.h" MFXInit
5563 enabled libmodplug        && require_pkg_config libmodplug libmodplug/modplug.h ModPlug_Load
5564 enabled libmp3lame        && require "libmp3lame >= 3.98.3" lame/lame.h lame_set_VBR_quality -lmp3lame
5565 enabled libnut            && require libnut libnut.h nut_demuxer_init -lnut
5566 enabled libopencore_amrnb && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb
5567 enabled libopencore_amrwb && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb
5568 enabled libopencv         && { check_header opencv2/core/core_c.h &&
5569                                { use_pkg_config opencv opencv2/core/core_c.h cvCreateImageHeader ||
5570                                  require opencv opencv2/core/core_c.h cvCreateImageHeader -lopencv_core -lopencv_imgproc; } ||
5571                                require_pkg_config opencv opencv/cxcore.h cvCreateImageHeader; }
5572 enabled libopenh264       && require_pkg_config openh264 wels/codec_api.h WelsGetCodecVersion
5573 enabled libopenjpeg       && { check_lib openjpeg-2.1/openjpeg.h opj_version -lopenjp2 -DOPJ_STATIC ||
5574                                check_lib openjpeg-2.0/openjpeg.h opj_version -lopenjp2 -DOPJ_STATIC ||
5575                                check_lib openjpeg-1.5/openjpeg.h opj_version -lopenjpeg -DOPJ_STATIC ||
5576                                check_lib openjpeg.h opj_version -lopenjpeg -DOPJ_STATIC ||
5577                                die "ERROR: libopenjpeg not found"; }
5578 enabled libopus           && require_pkg_config opus opus_multistream.h opus_multistream_decoder_create
5579 enabled libpulse          && require_pkg_config libpulse pulse/pulseaudio.h pa_context_new
5580 enabled librtmp           && require_pkg_config librtmp librtmp/rtmp.h RTMP_Socket
5581 enabled librubberband     && require_pkg_config "rubberband >= 1.8.1" rubberband/rubberband-c.h rubberband_new
5582 enabled libschroedinger   && require_pkg_config schroedinger-1.0 schroedinger/schro.h schro_init
5583 enabled libshine          && require_pkg_config shine shine/layer3.h shine_encode_buffer
5584 enabled libsmbclient      && { use_pkg_config smbclient libsmbclient.h smbc_init ||
5585                                require smbclient libsmbclient.h smbc_init -lsmbclient; }
5586 enabled libsnappy         && require snappy snappy-c.h snappy_compress -lsnappy
5587 enabled libsoxr           && require libsoxr soxr.h soxr_create -lsoxr && LIBSOXR="-lsoxr"
5588 enabled libssh            && require_pkg_config libssh libssh/sftp.h sftp_init
5589 enabled libspeex          && require_pkg_config speex speex/speex.h speex_decoder_init -lspeex
5590 enabled libtesseract      && require_pkg_config tesseract tesseract/capi.h TessBaseAPICreate
5591 enabled libtheora         && require libtheora theora/theoraenc.h th_info_init -ltheoraenc -ltheoradec -logg
5592 enabled libtwolame        && require libtwolame twolame.h twolame_init -ltwolame &&
5593                              { check_lib twolame.h twolame_encode_buffer_float32_interleaved -ltwolame ||
5594                                die "ERROR: libtwolame must be installed and version must be >= 0.3.10"; }
5595 enabled libutvideo        && require_cpp utvideo "stdint.h stdlib.h utvideo/utvideo.h utvideo/Codec.h" 'CCodec*' -lutvideo -lstdc++
5596 enabled libv4l2           && require_pkg_config libv4l2 libv4l2.h v4l2_ioctl
5597 enabled libvidstab        && require_pkg_config "vidstab >= 0.98" vid.stab/libvidstab.h vsMotionDetectInit
5598 enabled libvo_amrwbenc    && require libvo_amrwbenc vo-amrwbenc/enc_if.h E_IF_init -lvo-amrwbenc
5599 enabled libvorbis         && require libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
5600
5601 enabled libvpx            && {
5602     enabled libvpx_vp8_decoder && {
5603         use_pkg_config "vpx >= 0.9.1" "vpx/vpx_decoder.h vpx/vp8dx.h" vpx_codec_vp8_dx ||
5604             check_lib2 "vpx/vpx_decoder.h vpx/vp8dx.h" vpx_codec_dec_init_ver -lvpx ||
5605                 die "ERROR: libvpx decoder version must be >=0.9.1";
5606     }
5607     enabled libvpx_vp8_encoder && {
5608         use_pkg_config "vpx >= 0.9.7" "vpx/vpx_encoder.h vpx/vp8cx.h" vpx_codec_vp8_cx ||
5609             check_lib2 "vpx/vpx_encoder.h vpx/vp8cx.h" "vpx_codec_enc_init_ver VP8E_SET_MAX_INTRA_BITRATE_PCT" -lvpx ||
5610                 die "ERROR: libvpx encoder version must be >=0.9.7";
5611     }
5612     enabled libvpx_vp9_decoder && {
5613         use_pkg_config "vpx >= 1.3.0" "vpx/vpx_decoder.h vpx/vp8dx.h" vpx_codec_vp9_dx ||
5614             check_lib2 "vpx/vpx_decoder.h vpx/vp8dx.h" "vpx_codec_vp9_dx" -lvpx ||
5615                 disable libvpx_vp9_decoder;
5616     }
5617     enabled libvpx_vp9_encoder && {
5618         use_pkg_config "vpx >= 1.3.0" "vpx/vpx_encoder.h vpx/vp8cx.h" vpx_codec_vp9_cx ||
5619             check_lib2 "vpx/vpx_encoder.h vpx/vp8cx.h" "vpx_codec_vp9_cx VP9E_SET_AQ_MODE" -lvpx ||
5620                 disable libvpx_vp9_encoder;
5621     }
5622     if disabled_all libvpx_vp8_decoder libvpx_vp9_decoder libvpx_vp8_encoder libvpx_vp9_encoder; then
5623         die "libvpx enabled but no supported decoders found"
5624     fi
5625 }
5626
5627 enabled libwavpack        && require libwavpack wavpack/wavpack.h WavpackOpenFileOutput  -lwavpack
5628 enabled libwebp           && {
5629     enabled libwebp_encoder      && require_pkg_config "libwebp >= 0.2.0" webp/encode.h WebPGetEncoderVersion
5630     enabled libwebp_anim_encoder && { use_pkg_config "libwebpmux >= 0.4.0" webp/mux.h WebPAnimEncoderOptionsInit || disable libwebp_anim_encoder; } }
5631 enabled libx264           && { use_pkg_config x264 "stdint.h x264.h" x264_encoder_encode ||
5632                                { require libx264 x264.h x264_encoder_encode -lx264 &&
5633                                  warn "using libx264 without pkg-config"; } } &&
5634                              { check_cpp_condition x264.h "X264_BUILD >= 118" ||
5635                                die "ERROR: libx264 must be installed and version must be >= 0.118."; } &&
5636                              { check_cpp_condition x264.h "X264_MPEG2" &&
5637                                enable libx262; }
5638 enabled libx265           && require_pkg_config x265 x265.h x265_api_get &&
5639                              { check_cpp_condition x265.h "X265_BUILD >= 68" ||
5640                                die "ERROR: libx265 version must be >= 68."; }
5641 enabled libxavs           && require libxavs xavs.h xavs_encoder_encode -lxavs
5642 enabled libxvid           && require libxvid xvid.h xvid_global -lxvidcore
5643 enabled libzimg           && require_pkg_config zimg zimg.h zimg_get_api_version
5644 enabled libzmq            && require_pkg_config libzmq zmq.h zmq_ctx_new
5645 enabled libzvbi           && require libzvbi libzvbi.h vbi_decoder_new -lzvbi &&
5646                              { check_cpp_condition libzvbi.h "VBI_VERSION_MAJOR > 0 || VBI_VERSION_MINOR > 2 || VBI_VERSION_MINOR == 2 && VBI_VERSION_MICRO >= 28" ||
5647                                enabled gpl || die "ERROR: libzvbi requires version 0.2.28 or --enable-gpl."; }
5648 enabled mmal              && { check_lib interface/mmal/mmal.h mmal_port_connect -lmmal_core -lmmal_util -lmmal_vc_client -lbcm_host ||
5649                                 { ! enabled cross_compile && {
5650                                     add_cflags -isystem/opt/vc/include/ -isystem/opt/vc/include/interface/vmcs_host/linux -isystem/opt/vc/include/interface/vcos/pthreads -fgnu89-inline ;
5651                                     add_extralibs -L/opt/vc/lib/ -lmmal_core -lmmal_util -lmmal_vc_client -lbcm_host ;
5652                                     check_lib interface/mmal/mmal.h mmal_port_connect ; }
5653                                 check_lib interface/mmal/mmal.h mmal_port_connect ; } ||
5654                                die "ERROR: mmal not found"; }
5655 enabled mmal &&
5656     (check_code cc interface/mmal/mmal.h "MMAL_PARAMETER_VIDEO_MAX_NUM_CALLBACKS" ||
5657      die "ERROR: mmal firmware headers too old")
5658
5659 enabled netcdf            && require_pkg_config netcdf netcdf.h nc_inq_libvers
5660 enabled nvenc             && { check_header nvEncodeAPI.h || die "ERROR: nvEncodeAPI.h not found."; } &&
5661                              { check_cpp_condition nvEncodeAPI.h "NVENCAPI_MAJOR_VERSION >= 5" ||
5662                                die "ERROR: NVENC API version 4 or older is not supported"; } &&
5663                              { [ $target_os != cygwin ] || die "ERROR: NVENC is not supported on Cygwin currently."; }
5664 enabled openal            && { { for al_libs in "${OPENAL_LIBS}" "-lopenal" "-lOpenAL32"; do
5665                                check_lib 'AL/al.h' alGetError "${al_libs}" && break; done } ||
5666                                die "ERROR: openal not found"; } &&
5667                              { check_cpp_condition "AL/al.h" "defined(AL_VERSION_1_1)" ||
5668                                die "ERROR: openal must be installed and version must be 1.1 or compatible"; }
5669 enabled opencl            && { check_lib2 OpenCL/cl.h clEnqueueNDRangeKernel -Wl,-framework,OpenCL ||
5670                                check_lib2 CL/cl.h clEnqueueNDRangeKernel -lOpenCL ||
5671                                die "ERROR: opencl not found"; } &&
5672                              { check_cpp_condition "OpenCL/cl.h" "defined(CL_VERSION_1_2)" ||
5673                                check_cpp_condition "CL/cl.h" "defined(CL_VERSION_1_2)" ||
5674                                die "ERROR: opencl must be installed and version must be 1.2 or compatible"; }
5675 enabled opengl            && { check_lib GL/glx.h glXGetProcAddress "-lGL" ||
5676                                check_lib2 windows.h wglGetProcAddress "-lopengl32 -lgdi32" ||
5677                                check_lib2 OpenGL/gl3.h glGetError "-Wl,-framework,OpenGL" ||
5678                                check_lib2 ES2/gl.h glGetError "-isysroot=${sysroot} -Wl,-framework,OpenGLES" ||
5679                                die "ERROR: opengl not found."
5680                              }
5681 enabled openssl           && { use_pkg_config openssl openssl/ssl.h SSL_library_init ||
5682                                check_lib openssl/ssl.h SSL_library_init -lssl -lcrypto ||
5683                                check_lib openssl/ssl.h SSL_library_init -lssl32 -leay32 ||
5684                                check_lib openssl/ssl.h SSL_library_init -lssl -lcrypto -lws2_32 -lgdi32 ||
5685                                die "ERROR: openssl not found"; }
5686 enabled qtkit_indev      && { check_header_objcc QTKit/QTKit.h || disable qtkit_indev; }
5687
5688 # libdc1394 check
5689 if enabled libdc1394; then
5690     { require_pkg_config libdc1394-2 dc1394/dc1394.h dc1394_new &&
5691         enable libdc1394_2; } ||
5692     { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
5693         enable libdc1394_1; } ||
5694     die "ERROR: No version of libdc1394 found "
5695 fi
5696
5697 if enabled gcrypt; then
5698     GCRYPT_CONFIG="${cross_prefix}libgcrypt-config"
5699     if "${GCRYPT_CONFIG}" --version > /dev/null 2>&1; then
5700         gcrypt_cflags=$("${GCRYPT_CONFIG}" --cflags)
5701         gcrypt_libs=$("${GCRYPT_CONFIG}" --libs)
5702         check_func_headers gcrypt.h gcry_mpi_new $gcrypt_cflags $gcrypt_libs ||
5703             die "ERROR: gcrypt not found"
5704         add_cflags $gcrypt_cflags && add_extralibs $gcrypt_libs
5705     else
5706         require2 gcrypt gcrypt.h gcry_mpi_new -lgcrypt
5707     fi
5708 fi
5709
5710 if ! disabled sdl; then
5711     SDL_CONFIG="${cross_prefix}sdl-config"
5712     if check_pkg_config sdl SDL_events.h SDL_PollEvent; then
5713         check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
5714         check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) < 0x010300" $sdl_cflags &&
5715         enable sdl
5716     else
5717         if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
5718             sdl_cflags=$("${SDL_CONFIG}" --cflags)
5719             sdl_libs=$("${SDL_CONFIG}" --libs)
5720             check_func_headers SDL_version.h SDL_Linked_Version $sdl_cflags $sdl_libs &&
5721             check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
5722             check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) < 0x010300" $sdl_cflags &&
5723             enable sdl
5724         elif enabled sdl ; then
5725             die "ERROR: SDL not found"
5726         else
5727             disable sdl
5728         fi
5729     fi
5730     if test $target_os = "mingw32"; then
5731         sdl_libs="$sdl_libs -mconsole"
5732     fi
5733 fi
5734 enabled sdl && add_cflags $sdl_cflags && add_extralibs $sdl_libs
5735
5736 disabled securetransport || { check_func SecIdentityCreate "-Wl,-framework,CoreFoundation -Wl,-framework,Security" &&
5737     check_lib2 "Security/SecureTransport.h Security/Security.h" "SSLCreateContext SecItemImport" "-Wl,-framework,CoreFoundation -Wl,-framework,Security" &&
5738     enable securetransport; }
5739
5740 disabled schannel || { check_func_headers "windows.h Security.h" InitializeSecurityContext -DSECURITY_WIN32 -lSecur32 &&
5741                        enable schannel && add_extralibs -lSecur32; }
5742
5743 makeinfo --version > /dev/null 2>&1 && enable makeinfo  || disable makeinfo
5744 enabled makeinfo \
5745     && [ 0$(makeinfo --version | grep "texinfo" | sed 's/.*texinfo[^0-9]*\([0-9]*\)\..*/\1/') -ge 5 ] \
5746     && enable makeinfo_html || disable makeinfo_html
5747 disabled makeinfo_html && texi2html --help 2> /dev/null | grep -q 'init-file' && enable texi2html || disable texi2html
5748 perl -v            > /dev/null 2>&1 && enable perl      || disable perl
5749 pod2man --help     > /dev/null 2>&1 && enable pod2man   || disable pod2man
5750 rsync --help 2> /dev/null | grep -q 'contimeout' && enable rsync_contimeout || disable rsync_contimeout
5751
5752 check_header linux/fb.h
5753 check_header linux/videodev.h
5754 check_header linux/videodev2.h
5755 check_code cc linux/videodev2.h "struct v4l2_frmsizeenum vfse; vfse.discrete.width = 0;" && enable_safe struct_v4l2_frmivalenum_discrete
5756
5757 check_header sys/videoio.h
5758 check_code cc sys/videoio.h "struct v4l2_frmsizeenum vfse; vfse.discrete.width = 0;" && enable_safe struct_v4l2_frmivalenum_discrete
5759
5760 check_func_headers "windows.h vfw.h" capCreateCaptureWindow "$vfwcap_indev_extralibs"
5761 # check that WM_CAP_DRIVER_CONNECT is defined to the proper value
5762 # w32api 3.12 had it defined wrong
5763 check_cpp_condition vfw.h "WM_CAP_DRIVER_CONNECT > WM_USER" && enable vfwcap_defines
5764
5765 check_type "dshow.h" IBaseFilter
5766
5767 # check for ioctl_meteor.h, ioctl_bt848.h and alternatives
5768 { check_header dev/bktr/ioctl_meteor.h &&
5769   check_header dev/bktr/ioctl_bt848.h; } ||
5770 { check_header machine/ioctl_meteor.h &&
5771   check_header machine/ioctl_bt848.h; } ||
5772 { check_header dev/video/meteor/ioctl_meteor.h &&
5773   check_header dev/video/bktr/ioctl_bt848.h; } ||
5774 check_header dev/ic/bt8xx.h
5775
5776 check_header sndio.h
5777 if check_struct sys/soundcard.h audio_buf_info bytes; then
5778     enable_safe sys/soundcard.h
5779 else
5780     check_cc -D__BSD_VISIBLE -D__XSI_VISIBLE <<EOF && add_cppflags -D__BSD_VISIBLE -D__XSI_VISIBLE && enable_safe sys/soundcard.h
5781     #include <sys/soundcard.h>
5782     audio_buf_info abc;
5783 EOF
5784 fi
5785 check_header soundcard.h
5786
5787 enabled_any alsa_indev alsa_outdev &&
5788     check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
5789
5790 enabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack &&
5791     check_func jack_port_get_latency_range -ljack
5792
5793 enabled_any sndio_indev sndio_outdev && check_lib2 sndio.h sio_open -lsndio
5794
5795 if enabled libcdio; then
5796     check_lib2 "cdio/cdda.h cdio/paranoia.h" cdio_cddap_open -lcdio_paranoia -lcdio_cdda -lcdio ||
5797     check_lib2 "cdio/paranoia/cdda.h cdio/paranoia/paranoia.h" cdio_cddap_open -lcdio_paranoia -lcdio_cdda -lcdio ||
5798     die "ERROR: No usable libcdio/cdparanoia found"
5799 fi
5800
5801 enabled xlib &&
5802     check_lib X11/Xlib.h XOpenDisplay -lX11 || disable xlib
5803
5804 if ! disabled libxcb; then
5805     check_pkg_config "xcb >= 1.4" xcb/xcb.h xcb_connect || {
5806         enabled libxcb && die "ERROR: libxcb >= 1.4 not found";
5807     } && disable x11grab && enable libxcb
5808
5809 if enabled libxcb; then
5810     disabled libxcb_shm || {
5811         check_pkg_config xcb-shm xcb/shm.h xcb_shm_attach || {
5812             enabled libxcb_shm && die "ERROR: libxcb_shm not found";
5813         } && check_header sys/shm.h && enable libxcb_shm; }
5814
5815     disabled libxcb_xfixes || {
5816         check_pkg_config xcb-xfixes xcb/xfixes.h xcb_xfixes_get_cursor_image || {
5817             enabled libxcb_xfixes && die "ERROR: libxcb_xfixes not found";
5818         } && enable libxcb_xfixes; }
5819
5820     disabled libxcb_shape || {
5821         check_pkg_config xcb-shape xcb/shape.h xcb_shape_get_rectangles || {
5822             enabled libxcb_shape && die "ERROR: libxcb_shape not found";
5823         } && enable libxcb_shape; }
5824
5825     add_cflags $xcb_cflags $xcb_shm_cflags $xcb_xfixes_cflags $xcb_shape_cflags
5826     add_extralibs $xcb_libs $xcb_shm_libs $xcb_xfixes_libs $xcb_shape_libs
5827 fi
5828 fi
5829
5830 if enabled x11grab; then
5831     enabled xlib || die "ERROR: Xlib not found"
5832     require Xext X11/extensions/XShm.h XShmCreateImage -lXext
5833     require Xfixes X11/extensions/Xfixes.h XFixesGetCursorImage -lXfixes
5834 fi
5835
5836 check_func_headers "windows.h" CreateDIBSection "$gdigrab_indev_extralibs"
5837
5838 enabled dxva2api_h &&
5839     check_cc <<EOF && enable dxva2api_cobj
5840 #define _WIN32_WINNT 0x0600
5841 #define COBJMACROS
5842 #include <windows.h>
5843 #include <d3d9.h>
5844 #include <dxva2api.h>
5845 int main(void) { IDirectXVideoDecoder *o = NULL; IDirectXVideoDecoder_Release(o); return 0; }
5846 EOF
5847
5848 enabled vaapi &&
5849     check_lib va/va.h vaInitialize -lva ||
5850     disable vaapi
5851
5852 enabled vaapi && enabled xlib &&
5853     check_lib2 "va/va.h va/va_x11.h" vaGetDisplay -lva -lva-x11 &&
5854     enable vaapi_x11
5855
5856 enabled vdpau &&
5857     check_cpp_condition vdpau/vdpau.h "defined VDP_DECODER_PROFILE_MPEG4_PART2_ASP" ||
5858     disable vdpau
5859
5860 enabled vdpau && enabled xlib &&
5861     check_func_headers "vdpau/vdpau.h vdpau/vdpau_x11.h" vdp_device_create_x11 -lvdpau &&
5862     prepend ffmpeg_libs $($ldflags_filter "-lvdpau") &&
5863     enable vdpau_x11
5864
5865 # Funny iconv installations are not unusual, so check it after all flags have been set
5866 disabled iconv || check_func_headers iconv.h iconv || check_lib2 iconv.h iconv -liconv || disable iconv
5867
5868 enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel"
5869
5870 # add some useful compiler flags if supported
5871 check_cflags -Wdeclaration-after-statement
5872 check_cflags -Wall
5873 check_cflags -Wdisabled-optimization
5874 check_cflags -Wpointer-arith
5875 check_cflags -Wredundant-decls
5876 check_cflags -Wwrite-strings
5877 check_cflags -Wtype-limits
5878 check_cflags -Wundef
5879 check_cflags -Wmissing-prototypes
5880 check_cflags -Wno-pointer-to-int-cast
5881 check_cflags -Wstrict-prototypes
5882 check_cflags -Wempty-body
5883 enabled extra_warnings && check_cflags -Winline
5884 enabled extra_warnings && check_cflags -Wcast-qual
5885
5886 check_disable_warning(){
5887     warning_flag=-W${1#-Wno-}
5888     test_cflags $warning_flag && add_cflags $1
5889 }
5890
5891 check_disable_warning -Wno-parentheses
5892 check_disable_warning -Wno-switch
5893 check_disable_warning -Wno-format-zero-length
5894 check_disable_warning -Wno-pointer-sign
5895 check_disable_warning -Wno-unused-const-variable
5896
5897 # add some linker flags
5898 check_ldflags -Wl,--warn-common
5899 check_ldflags -Wl,-rpath-link=libpostproc:libswresample:libswscale:libavfilter:libavdevice:libavformat:libavcodec:libavutil:libavresample
5900 enabled rpath && add_ldexeflags -Wl,-rpath,$libdir
5901 enabled rpath && add_ldlibflags -Wl,-rpath,$libdir
5902 test_ldflags -Wl,-Bsymbolic && append SHFLAGS -Wl,-Bsymbolic
5903
5904 # add some strip flags
5905 # -wN '..@*' is more selective than -x, but not available everywhere.
5906 check_stripflags -wN \'..@*\' || check_stripflags -x
5907
5908 enabled neon_clobber_test &&
5909     check_ldflags -Wl,--wrap,avcodec_open2              \
5910                   -Wl,--wrap,avcodec_decode_audio4      \
5911                   -Wl,--wrap,avcodec_decode_video2      \
5912                   -Wl,--wrap,avcodec_decode_subtitle2   \
5913                   -Wl,--wrap,avcodec_encode_audio2      \
5914                   -Wl,--wrap,avcodec_encode_video2      \
5915                   -Wl,--wrap,avcodec_encode_subtitle    \
5916                   -Wl,--wrap,swr_convert                \
5917                   -Wl,--wrap,avresample_convert ||
5918     disable neon_clobber_test
5919
5920 enabled xmm_clobber_test &&
5921     check_ldflags -Wl,--wrap,avcodec_open2              \
5922                   -Wl,--wrap,avcodec_decode_audio4      \
5923                   -Wl,--wrap,avcodec_decode_video2      \
5924                   -Wl,--wrap,avcodec_decode_subtitle2   \
5925                   -Wl,--wrap,avcodec_encode_audio2      \
5926                   -Wl,--wrap,avcodec_encode_video2      \
5927                   -Wl,--wrap,avcodec_encode_subtitle    \
5928                   -Wl,--wrap,swr_convert                \
5929                   -Wl,--wrap,avresample_convert         \
5930                   -Wl,--wrap,sws_scale ||
5931     disable xmm_clobber_test
5932
5933 echo "X { local: *; };" > $TMPV
5934 if test_ldflags -Wl,--version-script,$TMPV; then
5935     append SHFLAGS '-Wl,--version-script,\$(SUBDIR)lib\$(NAME).ver'
5936 elif test_ldflags -Wl,-M,$TMPV; then
5937     append SHFLAGS '-Wl,-M,\$(SUBDIR)lib\$(NAME).ver-sol2'
5938 fi
5939
5940 check_cc <<EOF && enable symver_asm_label
5941 void ff_foo(void) __asm__ ("av_foo@VERSION");
5942 void ff_foo(void) { ${inline_asm+__asm__($quotes);} }
5943 EOF
5944     check_cc <<EOF && enable symver_gnu_asm
5945 __asm__(".symver ff_foo,av_foo@VERSION");
5946 void ff_foo(void) {}
5947 EOF
5948
5949 if [ -z "$optflags" ]; then
5950     if enabled small; then
5951         optflags=$cflags_size
5952     elif enabled optimizations; then
5953         optflags=$cflags_speed
5954     else
5955         optflags=$cflags_noopt
5956     fi
5957 fi
5958
5959 check_optflags(){
5960     check_cflags "$@"
5961     enabled lto && check_ldflags "$@"
5962 }
5963
5964
5965 if enabled lto; then
5966     test "$cc_type" != "$ld_type" && die "LTO requires same compiler and linker"
5967     check_cflags  -flto
5968     check_ldflags -flto $cpuflags
5969     disable inline_asm_direct_symbol_refs
5970 fi
5971
5972 check_optflags $optflags
5973 check_optflags -fno-math-errno
5974 check_optflags -fno-signed-zeros
5975
5976 enabled ftrapv && check_cflags -ftrapv
5977
5978 check_cc -mno-red-zone <<EOF && noredzone_flags="-mno-red-zone"
5979 int x;
5980 EOF
5981
5982
5983 if enabled icc; then
5984     # Just warnings, no remarks
5985     check_cflags -w1
5986     # -wd: Disable following warnings
5987     # 144, 167, 556: -Wno-pointer-sign
5988     # 188: enumerated type mixed with another type
5989     # 1292: attribute "foo" ignored
5990     # 1419: external declaration in primary source file
5991     # 10006: ignoring unknown option -fno-signed-zeros
5992     # 10148: ignoring unknown option -Wno-parentheses
5993     # 10156: ignoring option '-W'; no argument required
5994     # 13200: No EMMS instruction before call to function
5995     # 13203: No EMMS instruction before return from function
5996     check_cflags -wd144,167,188,556,1292,1419,10006,10148,10156,13200,13203
5997     # 11030: Warning unknown option --as-needed
5998     # 10156: ignoring option '-export'; no argument required
5999     check_ldflags -wd10156,11030
6000     # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
6001     enable ebp_available
6002     # The test above does not test linking
6003     enabled lto && disable symver_asm_label
6004     if enabled x86_32; then
6005         icc_version=$($cc -dumpversion)
6006         test ${icc_version%%.*} -ge 11 &&
6007             check_cflags -falign-stack=maintain-16-byte ||
6008             disable aligned_stack
6009     fi
6010 elif enabled ccc; then
6011     # disable some annoying warnings
6012     add_cflags -msg_disable bitnotint
6013     add_cflags -msg_disable mixfuncvoid
6014     add_cflags -msg_disable nonstandcast
6015     add_cflags -msg_disable unsupieee
6016 elif enabled gcc; then
6017     case $gcc_basever in
6018         4.9*) enabled x86 || check_optflags -fno-tree-vectorize ;;
6019         4.*)                 check_optflags -fno-tree-vectorize ;;
6020         *)    enabled x86 || check_optflags -fno-tree-vectorize ;;
6021     esac
6022     check_cflags -Werror=format-security
6023     check_cflags -Werror=implicit-function-declaration
6024     check_cflags -Werror=missing-prototypes
6025     check_cflags -Werror=return-type
6026     check_cflags -Werror=vla
6027     check_cflags -Wformat
6028     check_cflags -fdiagnostics-color=auto
6029     enabled extra_warnings || check_disable_warning -Wno-maybe-uninitialized
6030 elif enabled llvm_gcc; then
6031     check_cflags -mllvm -stack-alignment=16
6032 elif enabled clang; then
6033     check_cflags -mllvm -stack-alignment=16
6034     check_cflags -Qunused-arguments
6035     check_cflags -Werror=implicit-function-declaration
6036     check_cflags -Werror=missing-prototypes
6037     check_cflags -Werror=return-type
6038 elif enabled cparser; then
6039     add_cflags -Wno-missing-variable-declarations
6040     add_cflags -Wno-empty-statement
6041 elif enabled armcc; then
6042     add_cflags -W${armcc_opt},--diag_suppress=4343 # hardfp compat
6043     add_cflags -W${armcc_opt},--diag_suppress=3036 # using . as system include dir
6044     # 2523: use of inline assembly is deprecated
6045     add_cflags -W${armcc_opt},--diag_suppress=2523
6046     add_cflags -W${armcc_opt},--diag_suppress=1207
6047     add_cflags -W${armcc_opt},--diag_suppress=1293 # assignment in condition
6048     add_cflags -W${armcc_opt},--diag_suppress=3343 # hardfp compat
6049     add_cflags -W${armcc_opt},--diag_suppress=167  # pointer sign
6050     add_cflags -W${armcc_opt},--diag_suppress=513  # pointer sign
6051 elif enabled tms470; then
6052     add_cflags -pds=824 -pds=837
6053     disable inline_asm
6054 elif enabled pathscale; then
6055     add_cflags -fstrict-overflow -OPT:wrap_around_unsafe_opt=OFF
6056 elif enabled_any msvc icl; then
6057     enabled x86_32 && disable aligned_stack
6058     enabled_all x86_32 debug && add_cflags -Oy-
6059     enabled debug && add_ldflags -debug
6060     enable pragma_deprecated
6061     if enabled icl; then
6062         # -Qansi-alias is basically -fstrict-aliasing, but does not work
6063         # (correctly) on icl 13.x.
6064         check_cpp_condition "windows.h" "__ICL < 1300 || __ICL >= 1400" &&
6065             add_cflags -Qansi-alias
6066         # Some inline asm is not compilable in debug
6067         if enabled debug; then
6068             disable ebp_available
6069             disable ebx_available
6070         fi
6071     fi
6072     # msvcrt10 x64 incorrectly enables log2, only msvcrt12 (MSVC 2013) onwards actually has log2.
6073     check_cpp_condition crtversion.h "_VC_CRT_MAJOR_VERSION >= 12" || disable log2
6074     # The CRT headers contain __declspec(restrict) in a few places, but if redefining
6075     # restrict, this might break. MSVC 2010 and 2012 fail with __declspec(__restrict)
6076     # (as it ends up if the restrict redefine is done before including stdlib.h), while
6077     # MSVC 2013 and newer can handle it fine.
6078     # If this declspec fails, force including stdlib.h before the restrict redefinition
6079     # happens in config.h.
6080     if [ $_restrict != restrict ]; then
6081         check_cc <<EOF || add_cflags -FIstdlib.h
6082 __declspec($_restrict) void* foo(int);
6083 EOF
6084     fi
6085     check_func strtoll || add_cflags -Dstrtoll=_strtoi64
6086 fi
6087
6088 for pfx in "" host_; do
6089     varname=${pfx%_}cc_type
6090     eval "type=\$$varname"
6091     if [ $type = "msvc" ]; then
6092         check_${pfx}cc <<EOF || add_${pfx}cflags -Dinline=__inline
6093 static inline int foo(int a) { return a; }
6094 EOF
6095     fi
6096 done
6097
6098 case $as_type in
6099     clang)
6100         add_asflags -Qunused-arguments
6101     ;;
6102 esac
6103
6104 case $ld_type in
6105     clang)
6106         check_ldflags -Qunused-arguments
6107     ;;
6108 esac
6109
6110 case $target_os in
6111     osf1)
6112         enabled ccc && add_ldflags '-Wl,-expect_unresolved,*'
6113     ;;
6114     plan9)
6115         add_cppflags -Dmain=plan9_main
6116     ;;
6117 esac
6118
6119 enable frame_thread_encoder
6120
6121 enabled asm || { arch=c; disable $ARCH_LIST $ARCH_EXT_LIST; }
6122
6123 check_deps $CONFIG_LIST       \
6124            $CONFIG_EXTRA      \
6125            $HAVE_LIST         \
6126            $ALL_COMPONENTS    \
6127
6128 enabled threads && ! enabled pthreads && ! enabled atomics_native && die "non pthread threading without atomics not supported, try adding --enable-pthreads or --cpu=i486 or higher if you are on x86"
6129
6130
6131 if test $target_os = "haiku"; then
6132     disable memalign
6133     disable posix_memalign
6134 fi
6135
6136 enabled_all dxva2 dxva2api_cobj CoTaskMemFree &&
6137     prepend ffmpeg_libs $($ldflags_filter "-lole32" "-luser32") &&
6138     enable dxva2_lib
6139
6140 ! enabled_any memalign posix_memalign aligned_malloc &&
6141     enabled simd_align_16 && enable memalign_hack
6142
6143 # add_dep lib dep
6144 # -> enable ${lib}_deps_${dep}
6145 # -> add $dep to ${lib}_deps only once
6146 add_dep() {
6147     lib=$1
6148     dep=$2
6149     enabled "${lib}_deps_${dep}" && return 0
6150     enable  "${lib}_deps_${dep}"
6151     prepend "${lib}_deps" $dep
6152 }
6153
6154 # merge deps lib components
6155 # merge all ${component}_deps into ${lib}_deps and ${lib}_deps_*
6156 merge_deps() {
6157     lib=$1
6158     shift
6159     for comp in $*; do
6160         enabled $comp || continue
6161         eval "dep=\"\$${comp}_deps\""
6162         for d in $dep; do
6163             add_dep $lib $d
6164         done
6165     done
6166 }
6167
6168 merge_deps libavfilter $FILTER_LIST
6169
6170 map 'enabled $v && intrinsics=${v#intrinsics_}' $INTRINSICS_LIST
6171
6172 for thread in $THREADS_LIST; do
6173     if enabled $thread; then
6174         test -n "$thread_type" &&
6175             die "ERROR: Only one thread type must be selected." ||
6176             thread_type="$thread"
6177     fi
6178 done
6179
6180 enabled zlib && add_cppflags -DZLIB_CONST
6181
6182 # conditional library dependencies, in linking order
6183 enabled afftfilt_filter     && prepend avfilter_deps "avcodec"
6184 enabled amovie_filter       && prepend avfilter_deps "avformat avcodec"
6185 enabled aresample_filter    && prepend avfilter_deps "swresample"
6186 enabled asyncts_filter      && prepend avfilter_deps "avresample"
6187 enabled atempo_filter       && prepend avfilter_deps "avcodec"
6188 enabled cover_rect_filter   && prepend avfilter_deps "avformat avcodec"
6189 enabled ebur128_filter && enabled swresample && prepend avfilter_deps "swresample"
6190 enabled elbg_filter         && prepend avfilter_deps "avcodec"
6191 enabled fftfilt_filter      && prepend avfilter_deps "avcodec"
6192 enabled find_rect_filter    && prepend avfilter_deps "avformat avcodec"
6193 enabled mcdeint_filter      && prepend avfilter_deps "avcodec"
6194 enabled movie_filter    && prepend avfilter_deps "avformat avcodec"
6195 enabled pan_filter          && prepend avfilter_deps "swresample"
6196 enabled pp_filter           && prepend avfilter_deps "postproc"
6197 enabled removelogo_filter   && prepend avfilter_deps "avformat avcodec swscale"
6198 enabled resample_filter && prepend avfilter_deps "avresample"
6199 enabled sab_filter          && prepend avfilter_deps "swscale"
6200 enabled scale_filter    && prepend avfilter_deps "swscale"
6201 enabled scale2ref_filter    && prepend avfilter_deps "swscale"
6202 enabled sofalizer_filter    && prepend avfilter_deps "avcodec"
6203 enabled showcqt_filter      && prepend avfilter_deps "avformat avcodec swscale"
6204 enabled showfreqs_filter    && prepend avfilter_deps "avcodec"
6205 enabled showspectrum_filter && prepend avfilter_deps "avcodec"
6206 enabled smartblur_filter    && prepend avfilter_deps "swscale"
6207 enabled spectrumsynth_filter && prepend avfilter_deps "avcodec"
6208 enabled subtitles_filter    && prepend avfilter_deps "avformat avcodec"
6209 enabled uspp_filter         && prepend avfilter_deps "avcodec"
6210
6211 enabled lavfi_indev         && prepend avdevice_deps "avfilter"
6212
6213 enabled opus_decoder    && prepend avcodec_deps "swresample"
6214
6215 expand_deps(){
6216     lib_deps=${1}_deps
6217     eval "deps=\$$lib_deps"
6218     append $lib_deps $(map 'eval echo \$${v}_deps' $deps)
6219     unique $lib_deps
6220 }
6221
6222 #we have to remove gpl from the deps here as some code assumes all lib deps are libs
6223 postproc_deps="$(filter_out 'gpl' $postproc_deps)"
6224
6225 map 'expand_deps $v' $LIBRARY_LIST
6226
6227 echo "install prefix            $prefix"
6228 echo "source path               $source_path"
6229 echo "C compiler                $cc"
6230 echo "C library                 $libc_type"
6231 if test "$host_cc" != "$cc"; then
6232     echo "host C compiler           $host_cc"
6233     echo "host C library            $host_libc_type"
6234 fi
6235 echo "ARCH                      $arch ($cpu)"
6236 if test "$build_suffix" != ""; then
6237     echo "build suffix              $build_suffix"
6238 fi
6239 if test "$progs_suffix" != ""; then
6240     echo "progs suffix              $progs_suffix"
6241 fi
6242 if test "$extra_version" != ""; then
6243     echo "version string suffix     $extra_version"
6244 fi
6245 echo "big-endian                ${bigendian-no}"
6246 echo "runtime cpu detection     ${runtime_cpudetect-no}"
6247 if enabled x86; then
6248     echo "${yasmexe}                      ${yasm-no}"
6249     echo "MMX enabled               ${mmx-no}"
6250     echo "MMXEXT enabled            ${mmxext-no}"
6251     echo "3DNow! enabled            ${amd3dnow-no}"
6252     echo "3DNow! extended enabled   ${amd3dnowext-no}"
6253     echo "SSE enabled               ${sse-no}"
6254     echo "SSSE3 enabled             ${ssse3-no}"
6255     echo "AESNI enabled             ${aesni-no}"
6256     echo "AVX enabled               ${avx-no}"
6257     echo "XOP enabled               ${xop-no}"
6258     echo "FMA3 enabled              ${fma3-no}"
6259     echo "FMA4 enabled              ${fma4-no}"
6260     echo "i686 features enabled     ${i686-no}"
6261     echo "CMOV is fast              ${fast_cmov-no}"
6262     echo "EBX available             ${ebx_available-no}"
6263     echo "EBP available             ${ebp_available-no}"
6264 fi
6265 if enabled aarch64; then
6266     echo "NEON enabled              ${neon-no}"
6267     echo "VFP enabled               ${vfp-no}"
6268 fi
6269 if enabled arm; then
6270     echo "ARMv5TE enabled           ${armv5te-no}"
6271     echo "ARMv6 enabled             ${armv6-no}"
6272     echo "ARMv6T2 enabled           ${armv6t2-no}"
6273     echo "VFP enabled               ${vfp-no}"
6274     echo "NEON enabled              ${neon-no}"
6275     echo "THUMB enabled             ${thumb-no}"
6276 fi
6277 if enabled mips; then
6278     echo "MIPS FPU enabled          ${mipsfpu-no}"
6279     echo "MIPS DSP R1 enabled       ${mipsdsp-no}"
6280     echo "MIPS DSP R2 enabled       ${mipsdspr2-no}"
6281     echo "MIPS MSA enabled          ${msa-no}"
6282     echo "LOONGSON MMI enabled      ${mmi-no}"
6283 fi
6284 if enabled ppc; then
6285     echo "AltiVec enabled           ${altivec-no}"
6286     echo "VSX enabled               ${vsx-no}"
6287     echo "POWER8 enabled            ${power8-no}"
6288     echo "PPC 4xx optimizations     ${ppc4xx-no}"
6289     echo "dcbzl available           ${dcbzl-no}"
6290 fi
6291 echo "debug symbols             ${debug-no}"
6292 echo "strip symbols             ${stripping-no}"
6293 echo "optimize for size         ${small-no}"
6294 echo "optimizations             ${optimizations-no}"
6295 echo "static                    ${static-no}"
6296 echo "shared                    ${shared-no}"
6297 echo "postprocessing support    ${postproc-no}"
6298 echo "new filter support        ${avfilter-no}"
6299 echo "network support           ${network-no}"
6300 echo "threading support         ${thread_type-no}"
6301 echo "safe bitstream reader     ${safe_bitstream_reader-no}"
6302 echo "SDL support               ${sdl-no}"
6303 echo "opencl enabled            ${opencl-no}"
6304 echo "texi2html enabled         ${texi2html-no}"
6305 echo "perl enabled              ${perl-no}"
6306 echo "pod2man enabled           ${pod2man-no}"
6307 echo "makeinfo enabled          ${makeinfo-no}"
6308 echo "makeinfo supports HTML    ${makeinfo_html-no}"
6309 test -n "$random_seed" &&
6310     echo "random seed               ${random_seed}"
6311 echo
6312
6313 echo "Enabled programs:"
6314 print_enabled '' $PROGRAM_LIST | print_in_columns
6315 echo
6316
6317 echo "External libraries:"
6318 print_enabled '' $EXTERNAL_LIBRARY_LIST | print_in_columns
6319 echo
6320
6321 echo "Libraries:"
6322 print_enabled '' $LIBRARY_LIST | print_in_columns
6323 echo
6324
6325 for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
6326     echo "Enabled ${type}s:"
6327     eval list=\$$(toupper $type)_LIST
6328     print_enabled '_*' $list | print_in_columns
6329     echo
6330 done
6331
6332 license="LGPL version 2.1 or later"
6333 if enabled nonfree; then
6334     license="nonfree and unredistributable"
6335 elif enabled gplv3; then
6336     license="GPL version 3 or later"
6337 elif enabled lgplv3; then
6338     license="LGPL version 3 or later"
6339 elif enabled gpl; then
6340     license="GPL version 2 or later"
6341 fi
6342
6343 echo "License: $license"
6344
6345 echo "Creating config.mak, config.h, and doc/config.texi..."
6346
6347 test -e Makefile || echo "include $source_path/Makefile" > Makefile
6348
6349 enabled stripping || strip="echo skipping strip"
6350
6351 config_files="$TMPH config.mak doc/config.texi"
6352
6353 cat > config.mak <<EOF
6354 # Automatically generated by configure - do not modify!
6355 ifndef FFMPEG_CONFIG_MAK
6356 FFMPEG_CONFIG_MAK=1
6357 FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION
6358 prefix=$prefix
6359 LIBDIR=\$(DESTDIR)$libdir
6360 SHLIBDIR=\$(DESTDIR)$shlibdir
6361 INCDIR=\$(DESTDIR)$incdir
6362 BINDIR=\$(DESTDIR)$bindir
6363 DATADIR=\$(DESTDIR)$datadir
6364 DOCDIR=\$(DESTDIR)$docdir
6365 MANDIR=\$(DESTDIR)$mandir
6366 PKGCONFIGDIR=\$(DESTDIR)$pkgconfigdir
6367 SRC_PATH=$source_path
6368 SRC_LINK=$source_link
6369 ifndef MAIN_MAKEFILE
6370 SRC_PATH:=\$(SRC_PATH:.%=..%)
6371 endif
6372 CC_IDENT=$cc_ident
6373 ARCH=$arch
6374 INTRINSICS=$intrinsics
6375 CC=$cc
6376 CXX=$cxx
6377 AS=$as
6378 OBJCC=$objcc
6379 LD=$ld
6380 DEPCC=$dep_cc
6381 DEPCCFLAGS=$DEPCCFLAGS \$(CPPFLAGS)
6382 DEPAS=$as
6383 DEPASFLAGS=$DEPASFLAGS \$(CPPFLAGS)
6384 YASM=$yasmexe
6385 DEPYASM=$yasmexe
6386 AR=$ar
6387 ARFLAGS=$arflags
6388 AR_O=$ar_o
6389 RANLIB=$ranlib
6390 STRIP=$strip
6391 CP=cp -p
6392 LN_S=$ln_s
6393 CPPFLAGS=$CPPFLAGS
6394 CFLAGS=$CFLAGS
6395 CXXFLAGS=$CXXFLAGS
6396 OBJCFLAGS=$OBJCFLAGS
6397 ASFLAGS=$ASFLAGS
6398 AS_C=$AS_C
6399 AS_O=$AS_O
6400 OBJCC_C=$OBJCC_C
6401 OBJCC_E=$OBJCC_E
6402 OBJCC_O=$OBJCC_O
6403 CC_C=$CC_C
6404 CC_E=$CC_E
6405 CC_O=$CC_O
6406 CXX_C=$CXX_C
6407 CXX_O=$CXX_O
6408 LD_O=$LD_O
6409 LD_LIB=$LD_LIB
6410 LD_PATH=$LD_PATH
6411 DLLTOOL=$dlltool
6412 WINDRES=$windres
6413 DEPWINDRES=$dep_cc
6414 DOXYGEN=$doxygen
6415 LDFLAGS=$LDFLAGS
6416 LDEXEFLAGS=$LDEXEFLAGS
6417 LDLIBFLAGS=$LDLIBFLAGS
6418 SHFLAGS=$(echo $($ldflags_filter $SHFLAGS))
6419 ASMSTRIPFLAGS=$ASMSTRIPFLAGS
6420 YASMFLAGS=$YASMFLAGS
6421 BUILDSUF=$build_suffix
6422 PROGSSUF=$progs_suffix
6423 FULLNAME=$FULLNAME
6424 LIBPREF=$LIBPREF
6425 LIBSUF=$LIBSUF
6426 LIBNAME=$LIBNAME
6427 SLIBPREF=$SLIBPREF
6428 SLIBSUF=$SLIBSUF
6429 EXESUF=$EXESUF
6430 EXTRA_VERSION=$extra_version
6431 CCDEP=$CCDEP
6432 CXXDEP=$CXXDEP
6433 CCDEP_FLAGS=$CCDEP_FLAGS
6434 ASDEP=$ASDEP
6435 ASDEP_FLAGS=$ASDEP_FLAGS
6436 CC_DEPFLAGS=$CC_DEPFLAGS
6437 AS_DEPFLAGS=$AS_DEPFLAGS
6438 HOSTCC=$host_cc
6439 HOSTLD=$host_ld
6440 HOSTCFLAGS=$host_cflags
6441 HOSTCPPFLAGS=$host_cppflags
6442 HOSTEXESUF=$HOSTEXESUF
6443 HOSTLDFLAGS=$host_ldflags
6444 HOSTLIBS=$host_libs
6445 DEPHOSTCC=$host_cc
6446 DEPHOSTCCFLAGS=$DEPHOSTCCFLAGS \$(HOSTCCFLAGS)
6447 HOSTCCDEP=$HOSTCCDEP
6448 HOSTCCDEP_FLAGS=$HOSTCCDEP_FLAGS
6449 HOSTCC_DEPFLAGS=$HOSTCC_DEPFLAGS
6450 HOSTCC_C=$HOSTCC_C
6451 HOSTCC_O=$HOSTCC_O
6452 HOSTLD_O=$HOSTLD_O
6453 TARGET_EXEC=$target_exec $target_exec_args
6454 TARGET_PATH=$target_path
6455 TARGET_SAMPLES=${target_samples:-\$(SAMPLES)}
6456 CFLAGS-ffplay=$sdl_cflags
6457 ZLIB=$($ldflags_filter -lz)
6458 LIB_INSTALL_EXTRA_CMD=$LIB_INSTALL_EXTRA_CMD
6459 EXTRALIBS=$extralibs
6460 COMPAT_OBJS=$compat_objs
6461 EXEOBJS=$exeobjs
6462 INSTALL=$install
6463 LIBTARGET=${LIBTARGET}
6464 SLIBNAME=${SLIBNAME}
6465 SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}
6466 SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}
6467 SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}
6468 SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}
6469 SLIB_INSTALL_NAME=${SLIB_INSTALL_NAME}
6470 SLIB_INSTALL_LINKS=${SLIB_INSTALL_LINKS}
6471 SLIB_INSTALL_EXTRA_LIB=${SLIB_INSTALL_EXTRA_LIB}
6472 SLIB_INSTALL_EXTRA_SHLIB=${SLIB_INSTALL_EXTRA_SHLIB}
6473 SAMPLES:=${samples:-\$(FATE_SAMPLES)}
6474 NOREDZONE_FLAGS=$noredzone_flags
6475 EOF
6476
6477 get_version(){
6478     lcname=lib${1}
6479     name=$(toupper $lcname)
6480     file=$source_path/$lcname/version.h
6481     eval $(awk "/#define ${name}_VERSION_M/ { print \$2 \"=\" \$3 }" "$file")
6482     enabled raise_major && eval ${name}_VERSION_MAJOR=$((${name}_VERSION_MAJOR+100))
6483     eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
6484     eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
6485     eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
6486     eval echo "${lcname}_VERSION_MINOR=\$${name}_VERSION_MINOR" >> config.mak
6487 }
6488
6489 map 'get_version $v' $LIBRARY_LIST
6490
6491 map 'eval echo "${v}_FFLIBS=\$${v}_deps" >> config.mak' $LIBRARY_LIST
6492
6493 print_program_libs(){
6494     eval "program_libs=\$${1}_libs"
6495     eval echo "LIBS-${1}=${program_libs}" >> config.mak
6496 }
6497
6498 map 'print_program_libs $v' $PROGRAM_LIST
6499
6500 cat > $TMPH <<EOF
6501 /* Automatically generated by configure - do not modify! */
6502 #ifndef FFMPEG_CONFIG_H
6503 #define FFMPEG_CONFIG_H
6504 #define FFMPEG_CONFIGURATION "$(c_escape $FFMPEG_CONFIGURATION)"
6505 #define FFMPEG_LICENSE "$(c_escape $license)"
6506 #define CONFIG_THIS_YEAR 2016
6507 #define FFMPEG_DATADIR "$(eval c_escape $datadir)"
6508 #define AVCONV_DATADIR "$(eval c_escape $datadir)"
6509 #define CC_IDENT "$(c_escape ${cc_ident:-Unknown compiler})"
6510 #define av_restrict $_restrict
6511 #define EXTERN_PREFIX "${extern_prefix}"
6512 #define EXTERN_ASM ${extern_prefix}
6513 #define BUILDSUF "$build_suffix"
6514 #define SLIBSUF "$SLIBSUF"
6515 #define HAVE_MMX2 HAVE_MMXEXT
6516 #define SWS_MAX_FILTER_SIZE $sws_max_filter_size
6517 EOF
6518
6519 test -n "$assert_level" &&
6520     echo "#define ASSERT_LEVEL $assert_level" >>$TMPH
6521
6522 test -n "$malloc_prefix" &&
6523     echo "#define MALLOC_PREFIX $malloc_prefix" >>$TMPH
6524
6525 if enabled yasm; then
6526     append config_files $TMPASM
6527     printf '' >$TMPASM
6528 fi
6529
6530 enabled getenv || echo "#define getenv(x) NULL" >> $TMPH
6531
6532
6533 mkdir -p doc
6534 mkdir -p tests
6535 mkdir -p tests/api
6536 echo "@c auto-generated by configure - do not modify! " > doc/config.texi
6537
6538 print_config ARCH_   "$config_files" $ARCH_LIST
6539 print_config HAVE_   "$config_files" $HAVE_LIST
6540 print_config CONFIG_ "$config_files" $CONFIG_LIST       \
6541                                      $CONFIG_EXTRA      \
6542                                      $ALL_COMPONENTS    \
6543
6544 echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
6545 echo "endif # FFMPEG_CONFIG_MAK" >> config.mak
6546
6547 # Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
6548 cp_if_changed $TMPH config.h
6549 touch .config
6550
6551 enabled yasm && cp_if_changed $TMPASM config.asm
6552
6553 cat > $TMPH <<EOF
6554 /* Generated by ffconf */
6555 #ifndef AVUTIL_AVCONFIG_H
6556 #define AVUTIL_AVCONFIG_H
6557 EOF
6558
6559 print_config AV_HAVE_ $TMPH $HAVE_LIST_PUB
6560
6561 echo "#endif /* AVUTIL_AVCONFIG_H */" >> $TMPH
6562
6563 cp_if_changed $TMPH libavutil/avconfig.h
6564
6565 if test -n "$WARNINGS"; then
6566     printf "\n%s%s$WARNINGS%s" "$warn_color" "$bold_color" "$reset_color"
6567     enabled fatal_warnings && exit 1
6568 fi
6569
6570 # build pkg-config files
6571
6572 lib_version(){
6573     eval printf "\"lib${1}${build_suffix} >= \$LIB$(toupper ${1})_VERSION, \""
6574 }
6575
6576 pkgconfig_generate(){
6577     name=$1
6578     shortname=${name#lib}${build_suffix}
6579     comment=$2
6580     version=$3
6581     libs=$4
6582     requires=$(map 'lib_version $v' $(eval echo \$${name#lib}_deps))
6583     requires=${requires%, }
6584     enabled ${name#lib} || return 0
6585     mkdir -p $name
6586     cat <<EOF > $name/$name${build_suffix}.pc
6587 prefix=$prefix
6588 exec_prefix=\${prefix}
6589 libdir=$libdir
6590 includedir=$incdir
6591
6592 Name: $name
6593 Description: $comment
6594 Version: $version
6595 Requires: $(enabled shared || echo $requires)
6596 Requires.private: $(enabled shared && echo $requires)
6597 Conflicts:
6598 Libs: -L\${libdir} $(enabled rpath && echo "-Wl,-rpath,\${libdir}") -l${shortname} $(enabled shared || echo $libs)
6599 Libs.private: $(enabled shared && echo $libs)
6600 Cflags: -I\${includedir}
6601 EOF
6602
6603 mkdir -p doc/examples/pc-uninstalled
6604 includedir=${source_path}
6605 [ "$includedir" = . ] && includedir="\${pcfiledir}/../../.."
6606     cat <<EOF > doc/examples/pc-uninstalled/$name.pc
6607 prefix=
6608 exec_prefix=
6609 libdir=\${pcfiledir}/../../../$name
6610 includedir=${includedir}
6611
6612 Name: $name
6613 Description: $comment
6614 Version: $version
6615 Requires: $requires
6616 Conflicts:
6617 Libs: -L\${libdir} -Wl,-rpath,\${libdir} -l${shortname} $(enabled shared || echo $libs)
6618 Cflags: -I\${includedir}
6619 EOF
6620 }
6621
6622 pkgconfig_generate libavutil     "FFmpeg utility library"               "$LIBAVUTIL_VERSION"     "$LIBRT $LIBM"
6623 pkgconfig_generate libavcodec    "FFmpeg codec library"                 "$LIBAVCODEC_VERSION"    "$extralibs"
6624 pkgconfig_generate libavformat   "FFmpeg container format library"      "$LIBAVFORMAT_VERSION"   "$extralibs"
6625 pkgconfig_generate libavdevice   "FFmpeg device handling library"       "$LIBAVDEVICE_VERSION"   "$extralibs"
6626 pkgconfig_generate libavfilter   "FFmpeg audio/video filtering library" "$LIBAVFILTER_VERSION"   "$extralibs"
6627 pkgconfig_generate libpostproc   "FFmpeg postprocessing library"        "$LIBPOSTPROC_VERSION"   ""
6628 pkgconfig_generate libavresample "Libav audio resampling library"       "$LIBAVRESAMPLE_VERSION" "$LIBM"
6629 pkgconfig_generate libswscale    "FFmpeg image rescaling library"       "$LIBSWSCALE_VERSION"    "$LIBM"
6630 pkgconfig_generate libswresample "FFmpeg audio resampling library"      "$LIBSWRESAMPLE_VERSION" "$LIBM $LIBSOXR"