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