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