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