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