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