avcodec/shorten: Fix undefined addition in shorten_decode_frame()
[ffmpeg.git] / 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     SetDllDirectory
1801     setmode
1802     setrlimit
1803     Sleep
1804     strerror_r
1805     sysconf
1806     sysctl
1807     usleep
1808     VirtualAlloc
1809     wglGetProcAddress
1810 "
1811
1812 TOOLCHAIN_FEATURES="
1813     as_dn_directive
1814     as_func
1815     as_object_arch
1816     asm_mod_q
1817     attribute_may_alias
1818     attribute_packed
1819     ebp_available
1820     ebx_available
1821     gnu_as
1822     gnu_windres
1823     ibm_asm
1824     inline_asm_labels
1825     inline_asm_nonlocal_labels
1826     inline_asm_direct_symbol_refs
1827     pragma_deprecated
1828     rsync_contimeout
1829     symver_asm_label
1830     symver_gnu_asm
1831     vfp_args
1832     xform_asm
1833     xmm_clobbers
1834 "
1835
1836 TYPES_LIST="
1837     CONDITION_VARIABLE_Ptr
1838     socklen_t
1839     struct_addrinfo
1840     struct_dcadec_exss_info_matrix_encoding
1841     struct_group_source_req
1842     struct_ip_mreq_source
1843     struct_ipv6_mreq
1844     struct_pollfd
1845     struct_rusage_ru_maxrss
1846     struct_sctp_event_subscribe
1847     struct_sockaddr_in6
1848     struct_sockaddr_sa_len
1849     struct_sockaddr_storage
1850     struct_stat_st_mtim_tv_nsec
1851     struct_v4l2_frmivalenum_discrete
1852 "
1853
1854 HAVE_LIST="
1855     $ARCH_EXT_LIST
1856     $(add_suffix _external $ARCH_EXT_LIST)
1857     $(add_suffix _inline   $ARCH_EXT_LIST)
1858     $ARCH_FEATURES
1859     $ATOMICS_LIST
1860     $BUILTIN_LIST
1861     $HAVE_LIST_CMDLINE
1862     $HAVE_LIST_PUB
1863     $HEADERS_LIST
1864     $INTRINSICS_LIST
1865     $MATH_FUNCS
1866     $SYSTEM_FUNCS
1867     $THREADS_LIST
1868     $TOOLCHAIN_FEATURES
1869     $TYPES_LIST
1870     atomics_native
1871     dos_paths
1872     dxva2api_cobj
1873     dxva2_lib
1874     libc_msvcrt
1875     libdc1394_1
1876     libdc1394_2
1877     makeinfo
1878     makeinfo_html
1879     perl
1880     pod2man
1881     sdl
1882     section_data_rel_ro
1883     texi2html
1884     threads
1885     vaapi_x11
1886     vdpau_x11
1887     xlib
1888 "
1889
1890 # options emitted with CONFIG_ prefix but not available on the command line
1891 CONFIG_EXTRA="
1892     aandcttables
1893     ac3dsp
1894     audio_frame_queue
1895     audiodsp
1896     blockdsp
1897     bswapdsp
1898     cabac
1899     dvprofile
1900     exif
1901     faandct
1902     faanidct
1903     fdctdsp
1904     flacdsp
1905     fmtconvert
1906     frame_thread_encoder
1907     g722dsp
1908     gcrypt
1909     gmp
1910     golomb
1911     gplv3
1912     h263dsp
1913     h264chroma
1914     h264dsp
1915     h264pred
1916     h264qpel
1917     hpeldsp
1918     huffman
1919     huffyuvdsp
1920     huffyuvencdsp
1921     idctdsp
1922     iirfilter
1923     imdct15
1924     intrax8
1925     ividsp
1926     jpegtables
1927     libx262
1928     lgplv3
1929     llauddsp
1930     llviddsp
1931     lpc
1932     me_cmp
1933     mpeg_er
1934     mpegaudio
1935     mpegaudiodsp
1936     mpegvideo
1937     mpegvideoenc
1938     mss34dsp
1939     pixblockdsp
1940     qpeldsp
1941     qsv
1942     qsvdec
1943     qsvenc
1944     rangecoder
1945     riffdec
1946     riffenc
1947     rtpdec
1948     rtpenc_chain
1949     rv34dsp
1950     sinewin
1951     snappy
1952     startcode
1953     texturedsp
1954     texturedspenc
1955     tpeldsp
1956     videodsp
1957     vp3dsp
1958     vp56dsp
1959     vp8dsp
1960     wma_freqs
1961     wmv2dsp
1962 "
1963
1964 CMDLINE_SELECT="
1965     $ARCH_EXT_LIST
1966     $CONFIG_LIST
1967     $HAVE_LIST_CMDLINE
1968     $THREADS_LIST
1969     asm
1970     cross_compile
1971     debug
1972     extra_warnings
1973     logging
1974     lto
1975     optimizations
1976     rpath
1977     stripping
1978 "
1979
1980 PATHS_LIST="
1981     bindir
1982     datadir
1983     docdir
1984     incdir
1985     libdir
1986     mandir
1987     pkgconfigdir
1988     prefix
1989     shlibdir
1990 "
1991
1992 CMDLINE_SET="
1993     $PATHS_LIST
1994     ar
1995     arch
1996     as
1997     assert_level
1998     build_suffix
1999     cc
2000     cpu
2001     cross_prefix
2002     cxx
2003     dep_cc
2004     doxygen
2005     env
2006     extra_version
2007     gas
2008     host_cc
2009     host_cflags
2010     host_ld
2011     host_ldflags
2012     host_libs
2013     host_os
2014     install
2015     ld
2016     logfile
2017     malloc_prefix
2018     nm
2019     optflags
2020     pkg_config
2021     pkg_config_flags
2022     progs_suffix
2023     random_seed
2024     ranlib
2025     samples
2026     strip
2027     sws_max_filter_size
2028     sysinclude
2029     sysroot
2030     target_exec
2031     target_os
2032     target_path
2033     target_samples
2034     tempprefix
2035     toolchain
2036     valgrind
2037     yasmexe
2038 "
2039
2040 CMDLINE_APPEND="
2041     extra_cflags
2042     extra_cxxflags
2043     host_cppflags
2044 "
2045
2046 # code dependency declarations
2047
2048 # architecture extensions
2049
2050 armv5te_deps="arm"
2051 armv6_deps="arm"
2052 armv6t2_deps="arm"
2053 armv8_deps="aarch64"
2054 neon_deps_any="aarch64 arm"
2055 intrinsics_neon_deps="neon"
2056 vfp_deps_any="aarch64 arm"
2057 vfpv3_deps="vfp"
2058 setend_deps="arm"
2059
2060 map 'eval ${v}_inline_deps=inline_asm' $ARCH_EXT_LIST_ARM
2061
2062 mipsfpu_deps="mips"
2063 mipsdspr1_deps="mips"
2064 mipsdspr2_deps="mips"
2065 mips32r2_deps="mips"
2066 mips32r5_deps="mips"
2067 mips64r6_deps="mips"
2068 msa_deps="mips"
2069 mmi_deps="mips"
2070
2071 altivec_deps="ppc"
2072 dcbzl_deps="ppc"
2073 ldbrx_deps="ppc"
2074 ppc4xx_deps="ppc"
2075 vsx_deps="altivec"
2076 power8_deps="vsx"
2077
2078 cpunop_deps="i686"
2079 x86_64_select="i686"
2080 x86_64_suggest="fast_cmov"
2081
2082 amd3dnow_deps="mmx"
2083 amd3dnowext_deps="amd3dnow"
2084 i686_deps="x86"
2085 mmx_deps="x86"
2086 mmxext_deps="mmx"
2087 sse_deps="mmxext"
2088 sse2_deps="sse"
2089 sse3_deps="sse2"
2090 ssse3_deps="sse3"
2091 sse4_deps="ssse3"
2092 sse42_deps="sse4"
2093 avx_deps="sse42"
2094 xop_deps="avx"
2095 fma3_deps="avx"
2096 fma4_deps="avx"
2097 avx2_deps="avx"
2098
2099 mmx_external_deps="yasm"
2100 mmx_inline_deps="inline_asm"
2101 mmx_suggest="mmx_external mmx_inline"
2102
2103 for ext in $(filter_out mmx $ARCH_EXT_LIST_X86_SIMD); do
2104     eval dep=\$${ext}_deps
2105     eval ${ext}_external_deps='"${dep}_external"'
2106     eval ${ext}_inline_deps='"${dep}_inline"'
2107     eval ${ext}_suggest='"${ext}_external ${ext}_inline"'
2108 done
2109
2110 aligned_stack_if_any="aarch64 ppc x86"
2111 fast_64bit_if_any="aarch64 alpha ia64 mips64 parisc64 ppc64 sparc64 x86_64"
2112 fast_clz_if_any="aarch64 alpha avr32 mips ppc x86"
2113 fast_unaligned_if_any="aarch64 ppc x86"
2114 simd_align_16_if_any="altivec neon sse"
2115
2116 # system capabilities
2117 symver_if_any="symver_asm_label symver_gnu_asm"
2118 valgrind_backtrace_deps="!optimizations valgrind_valgrind_h"
2119
2120 # threading support
2121 atomics_gcc_if_any="sync_val_compare_and_swap atomic_compare_exchange"
2122 atomics_suncc_if="atomic_cas_ptr machine_rw_barrier"
2123 atomics_win32_if="MemoryBarrier"
2124 atomics_native_if_any="$ATOMICS_LIST"
2125 w32threads_deps="atomics_native"
2126 threads_if_any="$THREADS_LIST"
2127
2128 # subsystems
2129 dct_select="rdft"
2130 error_resilience_select="me_cmp"
2131 faandct_deps="faan fdctdsp"
2132 faanidct_deps="faan idctdsp"
2133 frame_thread_encoder_deps="encoders threads"
2134 intrax8_select="error_resilience"
2135 mdct_select="fft"
2136 rdft_select="fft"
2137 me_cmp_select="fdctdsp idctdsp pixblockdsp"
2138 mpeg_er_select="error_resilience"
2139 mpegaudio_select="mpegaudiodsp"
2140 mpegaudiodsp_select="dct"
2141 mpegvideo_select="blockdsp h264chroma hpeldsp idctdsp me_cmp mpeg_er videodsp"
2142 mpegvideoenc_select="me_cmp mpegvideo pixblockdsp qpeldsp"
2143 qsvdec_select="qsv"
2144 qsvenc_select="qsv"
2145
2146 # decoders / encoders
2147 aac_decoder_select="imdct15 mdct sinewin"
2148 aac_fixed_decoder_select="mdct sinewin"
2149 aac_encoder_select="audio_frame_queue iirfilter lpc mdct sinewin"
2150 aac_latm_decoder_select="aac_decoder aac_latm_parser"
2151 ac3_decoder_select="ac3_parser ac3dsp bswapdsp fmtconvert mdct"
2152 ac3_fixed_decoder_select="ac3_parser ac3dsp bswapdsp mdct"
2153 ac3_encoder_select="ac3dsp audiodsp mdct me_cmp"
2154 ac3_fixed_encoder_select="ac3dsp audiodsp mdct me_cmp"
2155 adpcm_g722_decoder_select="g722dsp"
2156 adpcm_g722_encoder_select="g722dsp"
2157 aic_decoder_select="golomb idctdsp"
2158 alac_encoder_select="lpc"
2159 als_decoder_select="bswapdsp"
2160 amrnb_decoder_select="lsp"
2161 amrwb_decoder_select="lsp"
2162 amv_decoder_select="sp5x_decoder exif"
2163 amv_encoder_select="aandcttables jpegtables mpegvideoenc"
2164 ape_decoder_select="bswapdsp llauddsp"
2165 apng_decoder_select="zlib"
2166 apng_encoder_select="huffyuvencdsp zlib"
2167 asv1_decoder_select="blockdsp bswapdsp idctdsp"
2168 asv1_encoder_select="bswapdsp fdctdsp pixblockdsp"
2169 asv2_decoder_select="blockdsp bswapdsp idctdsp"
2170 asv2_encoder_select="bswapdsp fdctdsp pixblockdsp"
2171 atrac1_decoder_select="mdct sinewin"
2172 atrac3_decoder_select="mdct"
2173 atrac3p_decoder_select="mdct sinewin"
2174 avrn_decoder_select="exif jpegtables"
2175 bink_decoder_select="blockdsp hpeldsp"
2176 binkaudio_dct_decoder_select="mdct rdft dct sinewin wma_freqs"
2177 binkaudio_rdft_decoder_select="mdct rdft sinewin wma_freqs"
2178 cavs_decoder_select="blockdsp golomb h264chroma idctdsp qpeldsp videodsp"
2179 cllc_decoder_select="bswapdsp"
2180 comfortnoise_encoder_select="lpc"
2181 cook_decoder_select="audiodsp mdct sinewin"
2182 cscd_decoder_select="lzo"
2183 cscd_decoder_suggest="zlib"
2184 dca_decoder_select="fmtconvert mdct"
2185 dds_decoder_select="texturedsp"
2186 dirac_decoder_select="dwt golomb videodsp mpegvideoenc"
2187 dnxhd_decoder_select="blockdsp idctdsp"
2188 dnxhd_encoder_select="aandcttables blockdsp fdctdsp idctdsp mpegvideoenc pixblockdsp"
2189 dvvideo_decoder_select="dvprofile idctdsp"
2190 dvvideo_encoder_select="dvprofile fdctdsp me_cmp pixblockdsp"
2191 dxa_decoder_select="zlib"
2192 eac3_decoder_select="ac3_decoder"
2193 eac3_encoder_select="ac3_encoder"
2194 eamad_decoder_select="aandcttables blockdsp bswapdsp idctdsp mpegvideo"
2195 eatgq_decoder_select="aandcttables"
2196 eatqi_decoder_select="aandcttables blockdsp bswapdsp idctdsp mpeg1video_decoder"
2197 exr_decoder_select="zlib"
2198 ffv1_decoder_select="golomb rangecoder"
2199 ffv1_encoder_select="rangecoder"
2200 ffvhuff_decoder_select="huffyuv_decoder"
2201 ffvhuff_encoder_select="huffyuv_encoder"
2202 fic_decoder_select="golomb"
2203 flac_decoder_select="flacdsp golomb"
2204 flac_encoder_select="bswapdsp flacdsp golomb lpc"
2205 flashsv_decoder_select="zlib"
2206 flashsv_encoder_select="zlib"
2207 flashsv2_encoder_select="zlib"
2208 flashsv2_decoder_select="zlib"
2209 flv_decoder_select="h263_decoder"
2210 flv_encoder_select="h263_encoder"
2211 fourxm_decoder_select="blockdsp bswapdsp"
2212 fraps_decoder_select="bswapdsp huffman"
2213 g2m_decoder_select="blockdsp idctdsp jpegtables zlib"
2214 g729_decoder_select="audiodsp"
2215 h261_decoder_select="mpegvideo"
2216 h261_encoder_select="aandcttables mpegvideoenc"
2217 h263_decoder_select="h263_parser h263dsp mpegvideo qpeldsp"
2218 h263_encoder_select="aandcttables h263dsp mpegvideoenc"
2219 h263i_decoder_select="h263_decoder"
2220 h263p_decoder_select="h263_decoder"
2221 h263p_encoder_select="h263_encoder"
2222 h264_decoder_select="cabac golomb h264chroma h264dsp h264pred h264qpel startcode videodsp"
2223 h264_decoder_suggest="error_resilience"
2224 h264_qsv_decoder_deps="libmfx"
2225 h264_qsv_decoder_select="h264_mp4toannexb_bsf h264_parser qsvdec h264_qsv_hwaccel"
2226 h264_qsv_encoder_deps="libmfx"
2227 h264_qsv_encoder_select="qsvenc"
2228 hap_decoder_select="snappy texturedsp"
2229 hap_encoder_deps="libsnappy"
2230 hap_encoder_select="texturedspenc"
2231 hevc_decoder_select="bswapdsp cabac golomb videodsp"
2232 hevc_qsv_encoder_deps="libmfx"
2233 hevc_qsv_decoder_deps="libmfx"
2234 hevc_qsv_decoder_select="hevc_mp4toannexb_bsf hevc_parser qsvdec hevc_qsv_hwaccel"
2235 hevc_qsv_encoder_select="qsvenc"
2236 huffyuv_decoder_select="bswapdsp huffyuvdsp llviddsp"
2237 huffyuv_encoder_select="bswapdsp huffman huffyuvencdsp llviddsp"
2238 iac_decoder_select="imc_decoder"
2239 imc_decoder_select="bswapdsp fft mdct sinewin"
2240 indeo3_decoder_select="hpeldsp"
2241 indeo4_decoder_select="ividsp"
2242 indeo5_decoder_select="ividsp"
2243 interplay_video_decoder_select="hpeldsp"
2244 jpegls_decoder_select="golomb mjpeg_decoder"
2245 jpegls_encoder_select="golomb"
2246 jv_decoder_select="blockdsp"
2247 lagarith_decoder_select="huffyuvdsp"
2248 ljpeg_encoder_select="aandcttables idctdsp jpegtables"
2249 loco_decoder_select="golomb"
2250 mdec_decoder_select="blockdsp idctdsp mpegvideo"
2251 metasound_decoder_select="lsp mdct sinewin"
2252 mimic_decoder_select="blockdsp bswapdsp hpeldsp idctdsp"
2253 mjpeg_decoder_select="blockdsp hpeldsp exif idctdsp jpegtables"
2254 mjpeg_encoder_select="aandcttables jpegtables mpegvideoenc"
2255 mjpegb_decoder_select="mjpeg_decoder"
2256 mlp_decoder_select="mlp_parser"
2257 motionpixels_decoder_select="bswapdsp"
2258 mp1_decoder_select="mpegaudio"
2259 mp1float_decoder_select="mpegaudio"
2260 mp2_decoder_select="mpegaudio"
2261 mp2float_decoder_select="mpegaudio"
2262 mp3_decoder_select="mpegaudio"
2263 mp3adu_decoder_select="mpegaudio"
2264 mp3adufloat_decoder_select="mpegaudio"
2265 mp3float_decoder_select="mpegaudio"
2266 mp3on4_decoder_select="mpegaudio"
2267 mp3on4float_decoder_select="mpegaudio"
2268 mpc7_decoder_select="bswapdsp mpegaudiodsp"
2269 mpc8_decoder_select="mpegaudiodsp"
2270 mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h"
2271 mpeg_xvmc_decoder_select="mpeg2video_decoder"
2272 mpegvideo_decoder_select="mpegvideo"
2273 mpeg1video_decoder_select="mpegvideo"
2274 mpeg1video_encoder_select="aandcttables mpegvideoenc h263dsp"
2275 mpeg2video_decoder_select="mpegvideo"
2276 mpeg2video_encoder_select="aandcttables mpegvideoenc h263dsp"
2277 mpeg2_qsv_decoder_deps="libmfx"
2278 mpeg2_qsv_decoder_select="qsvdec mpeg2_qsv_hwaccel"
2279 mpeg2_qsv_encoder_deps="libmfx"
2280 mpeg2_qsv_encoder_select="qsvenc"
2281 mpeg4_decoder_select="h263_decoder mpeg4video_parser"
2282 mpeg4_encoder_select="h263_encoder"
2283 msa1_decoder_select="mss34dsp"
2284 msmpeg4v1_decoder_select="h263_decoder"
2285 msmpeg4v2_decoder_select="h263_decoder"
2286 msmpeg4v2_encoder_select="h263_encoder"
2287 msmpeg4v3_decoder_select="h263_decoder"
2288 msmpeg4v3_encoder_select="h263_encoder"
2289 mss2_decoder_select="vc1_decoder"
2290 mts2_decoder_select="mss34dsp"
2291 mxpeg_decoder_select="mjpeg_decoder"
2292 nellymoser_decoder_select="mdct sinewin"
2293 nellymoser_encoder_select="audio_frame_queue mdct sinewin"
2294 nuv_decoder_select="idctdsp lzo"
2295 on2avc_decoder_select="mdct"
2296 opus_decoder_deps="swresample"
2297 opus_decoder_select="imdct15"
2298 png_decoder_select="zlib"
2299 png_encoder_select="huffyuvencdsp zlib"
2300 prores_decoder_select="blockdsp idctdsp"
2301 prores_encoder_select="fdctdsp"
2302 qcelp_decoder_select="lsp"
2303 qdm2_decoder_select="mdct rdft mpegaudiodsp"
2304 ra_144_encoder_select="audio_frame_queue lpc audiodsp"
2305 ra_144_decoder_select="audiodsp"
2306 ralf_decoder_select="golomb"
2307 rawvideo_decoder_select="bswapdsp"
2308 rtjpeg_decoder_select="me_cmp"
2309 rv10_decoder_select="h263_decoder"
2310 rv10_encoder_select="h263_encoder"
2311 rv20_decoder_select="h263_decoder"
2312 rv20_encoder_select="h263_encoder"
2313 rv30_decoder_select="golomb h264pred h264qpel mpegvideo rv34dsp"
2314 rv40_decoder_select="golomb h264pred h264qpel mpegvideo rv34dsp"
2315 shorten_decoder_select="golomb"
2316 sipr_decoder_select="lsp"
2317 snow_decoder_select="dwt h264qpel hpeldsp me_cmp rangecoder videodsp"
2318 snow_encoder_select="aandcttables dwt h264qpel hpeldsp me_cmp mpegvideoenc rangecoder"
2319 sonic_decoder_select="golomb rangecoder"
2320 sonic_encoder_select="golomb rangecoder"
2321 sonic_ls_encoder_select="golomb rangecoder"
2322 sp5x_decoder_select="mjpeg_decoder"
2323 svq1_decoder_select="hpeldsp"
2324 svq1_encoder_select="aandcttables hpeldsp me_cmp mpegvideoenc"
2325 svq3_decoder_select="h264_decoder hpeldsp tpeldsp"
2326 svq3_decoder_suggest="zlib"
2327 tak_decoder_select="audiodsp"
2328 tdsc_decoder_select="zlib mjpeg_decoder"
2329 theora_decoder_select="vp3_decoder"
2330 thp_decoder_select="mjpeg_decoder"
2331 tiff_decoder_suggest="zlib lzma"
2332 tiff_encoder_suggest="zlib"
2333 truehd_decoder_select="mlp_parser"
2334 truemotion2_decoder_select="bswapdsp"
2335 truespeech_decoder_select="bswapdsp"
2336 tscc_decoder_select="zlib"
2337 twinvq_decoder_select="mdct lsp sinewin"
2338 txd_decoder_select="texturedsp"
2339 utvideo_decoder_select="bswapdsp"
2340 utvideo_encoder_select="bswapdsp huffman huffyuvencdsp"
2341 vble_decoder_select="huffyuvdsp"
2342 vc1_decoder_select="blockdsp h263_decoder h264qpel intrax8 qpeldsp startcode"
2343 vc1image_decoder_select="vc1_decoder"
2344 vc1_qsv_decoder_deps="libmfx"
2345 vc1_qsv_decoder_select="qsvdec vc1_qsv_hwaccel"
2346 vorbis_decoder_select="mdct"
2347 vorbis_encoder_select="mdct"
2348 vp3_decoder_select="hpeldsp vp3dsp videodsp"
2349 vp5_decoder_select="h264chroma hpeldsp videodsp vp3dsp vp56dsp"
2350 vp6_decoder_select="h264chroma hpeldsp huffman videodsp vp3dsp vp56dsp"
2351 vp6a_decoder_select="vp6_decoder"
2352 vp6f_decoder_select="vp6_decoder"
2353 vp7_decoder_select="h264pred videodsp vp8dsp"
2354 vp8_decoder_select="h264pred videodsp vp8dsp"
2355 vp9_decoder_select="videodsp vp9_parser"
2356 webp_decoder_select="vp8_decoder"
2357 wmalossless_decoder_select="llauddsp"
2358 wmapro_decoder_select="mdct sinewin wma_freqs"
2359 wmav1_decoder_select="mdct sinewin wma_freqs"
2360 wmav1_encoder_select="mdct sinewin wma_freqs"
2361 wmav2_decoder_select="mdct sinewin wma_freqs"
2362 wmav2_encoder_select="mdct sinewin wma_freqs"
2363 wmavoice_decoder_select="lsp rdft dct mdct sinewin"
2364 wmv1_decoder_select="h263_decoder"
2365 wmv1_encoder_select="h263_encoder"
2366 wmv2_decoder_select="blockdsp h263_decoder idctdsp intrax8 videodsp wmv2dsp"
2367 wmv2_encoder_select="h263_encoder wmv2dsp"
2368 wmv3_decoder_select="vc1_decoder"
2369 wmv3image_decoder_select="wmv3_decoder"
2370 zerocodec_decoder_select="zlib"
2371 zlib_decoder_select="zlib"
2372 zlib_encoder_select="zlib"
2373 zmbv_decoder_select="zlib"
2374 zmbv_encoder_select="zlib"
2375
2376 # hardware accelerators
2377 crystalhd_deps="libcrystalhd_libcrystalhd_if_h"
2378 d3d11va_deps="d3d11_h dxva_h ID3D11VideoDecoder ID3D11VideoContext"
2379 dxva2_deps="dxva2api_h DXVA2_ConfigPictureDecode"
2380 vaapi_deps="va_va_h"
2381 vda_deps="VideoDecodeAcceleration_VDADecoder_h pthreads CoreServices_CoreServices_h"
2382 vda_extralibs="-framework CoreFoundation -framework VideoDecodeAcceleration -framework QuartzCore -framework CoreServices"
2383 vdpau_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
2384 videotoolbox_deps="VideoToolbox_VideoToolbox_h pthreads CoreServices_CoreServices_h"
2385 videotoolbox_extralibs="-framework CoreFoundation -framework VideoToolbox -framework CoreMedia -framework QuartzCore -framework CoreServices"
2386 xvmc_deps="X11_extensions_XvMClib_h"
2387
2388 h263_vaapi_hwaccel_deps="vaapi"
2389 h263_vaapi_hwaccel_select="h263_decoder"
2390 h263_vdpau_hwaccel_deps="vdpau"
2391 h263_vdpau_hwaccel_select="h263_decoder"
2392 h263_videotoolbox_hwaccel_deps="videotoolbox"
2393 h263_videotoolbox_hwaccel_select="h263_decoder"
2394 h264_crystalhd_decoder_select="crystalhd h264_mp4toannexb_bsf h264_parser"
2395 h264_d3d11va_hwaccel_deps="d3d11va"
2396 h264_d3d11va_hwaccel_select="h264_decoder"
2397 h264_dxva2_hwaccel_deps="dxva2"
2398 h264_dxva2_hwaccel_select="h264_decoder"
2399 h264_mmal_decoder_deps="mmal"
2400 h264_mmal_hwaccel_deps="mmal"
2401 h264_mmal_decoder_select="h264_decoder"
2402 h264_mmal_encoder_deps="mmal"
2403 h264_qsv_hwaccel_deps="libmfx"
2404 h264_vaapi_hwaccel_deps="vaapi"
2405 h264_vaapi_hwaccel_select="h264_decoder"
2406 h264_vda_decoder_deps="vda"
2407 h264_vda_decoder_select="h264_decoder"
2408 h264_vda_hwaccel_deps="vda"
2409 h264_vda_hwaccel_select="h264_decoder"
2410 h264_vda_old_hwaccel_deps="vda"
2411 h264_vda_old_hwaccel_select="h264_decoder"
2412 h264_vdpau_decoder_deps="vdpau"
2413 h264_vdpau_decoder_select="h264_decoder"
2414 h264_vdpau_hwaccel_deps="vdpau"
2415 h264_vdpau_hwaccel_select="h264_decoder"
2416 h264_videotoolbox_hwaccel_deps="videotoolbox"
2417 h264_videotoolbox_hwaccel_select="h264_decoder"
2418 hevc_d3d11va_hwaccel_deps="d3d11va DXVA_PicParams_HEVC"
2419 hevc_d3d11va_hwaccel_select="hevc_decoder"
2420 hevc_dxva2_hwaccel_deps="dxva2 DXVA_PicParams_HEVC"
2421 hevc_dxva2_hwaccel_select="hevc_decoder"
2422 hevc_qsv_hwaccel_deps="libmfx"
2423 hevc_vaapi_hwaccel_deps="vaapi VAPictureParameterBufferHEVC"
2424 hevc_vaapi_hwaccel_select="hevc_decoder"
2425 hevc_vdpau_hwaccel_deps="vdpau VdpPictureInfoHEVC"
2426 hevc_vdpau_hwaccel_select="hevc_decoder"
2427 mpeg_vdpau_decoder_deps="vdpau"
2428 mpeg_vdpau_decoder_select="mpeg2video_decoder"
2429 mpeg_xvmc_hwaccel_deps="xvmc"
2430 mpeg_xvmc_hwaccel_select="mpeg2video_decoder"
2431 mpeg1_vdpau_decoder_deps="vdpau"
2432 mpeg1_vdpau_decoder_select="mpeg1video_decoder"
2433 mpeg1_vdpau_hwaccel_deps="vdpau"
2434 mpeg1_vdpau_hwaccel_select="mpeg1video_decoder"
2435 mpeg1_videotoolbox_hwaccel_deps="videotoolbox"
2436 mpeg1_videotoolbox_hwaccel_select="mpeg1video_decoder"
2437 mpeg1_xvmc_hwaccel_deps="xvmc"
2438 mpeg1_xvmc_hwaccel_select="mpeg1video_decoder"
2439 mpeg2_crystalhd_decoder_select="crystalhd"
2440 mpeg2_d3d11va_hwaccel_deps="d3d11va"
2441 mpeg2_d3d11va_hwaccel_select="mpeg2video_decoder"
2442 mpeg2_dxva2_hwaccel_deps="dxva2"
2443 mpeg2_dxva2_hwaccel_select="mpeg2video_decoder"
2444 mpeg2_qsv_hwaccel_deps="libmfx"
2445 mpeg2_qsv_hwaccel_select="qsvdec_mpeg2"
2446 mpeg2_vaapi_hwaccel_deps="vaapi"
2447 mpeg2_vaapi_hwaccel_select="mpeg2video_decoder"
2448 mpeg2_vdpau_hwaccel_deps="vdpau"
2449 mpeg2_vdpau_hwaccel_select="mpeg2video_decoder"
2450 mpeg2_videotoolbox_hwaccel_deps="videotoolbox"
2451 mpeg2_videotoolbox_hwaccel_select="mpeg2video_decoder"
2452 mpeg2_xvmc_hwaccel_deps="xvmc"
2453 mpeg2_xvmc_hwaccel_select="mpeg2video_decoder"
2454 mpeg4_crystalhd_decoder_select="crystalhd"
2455 mpeg4_vaapi_hwaccel_deps="vaapi"
2456 mpeg4_vaapi_hwaccel_select="mpeg4_decoder"
2457 mpeg4_vdpau_decoder_deps="vdpau"
2458 mpeg4_vdpau_decoder_select="mpeg4_decoder"
2459 mpeg4_vdpau_hwaccel_deps="vdpau"
2460 mpeg4_vdpau_hwaccel_select="mpeg4_decoder"
2461 mpeg4_videotoolbox_hwaccel_deps="videotoolbox"
2462 mpeg4_videotoolbox_hwaccel_select="mpeg4_decoder"
2463 msmpeg4_crystalhd_decoder_select="crystalhd"
2464 vc1_crystalhd_decoder_select="crystalhd"
2465 vc1_d3d11va_hwaccel_deps="d3d11va"
2466 vc1_d3d11va_hwaccel_select="vc1_decoder"
2467 vc1_dxva2_hwaccel_deps="dxva2"
2468 vc1_dxva2_hwaccel_select="vc1_decoder"
2469 vc1_vaapi_hwaccel_deps="vaapi"
2470 vc1_vaapi_hwaccel_select="vc1_decoder"
2471 vc1_vdpau_decoder_deps="vdpau"
2472 vc1_vdpau_decoder_select="vc1_decoder"
2473 vc1_vdpau_hwaccel_deps="vdpau"
2474 vc1_vdpau_hwaccel_select="vc1_decoder"
2475 vc1_qsv_hwaccel_deps="libmfx"
2476 vc1_qsv_hwaccel_select="qsvdec_vc1"
2477 wmv3_crystalhd_decoder_select="crystalhd"
2478 wmv3_d3d11va_hwaccel_select="vc1_d3d11va_hwaccel"
2479 wmv3_dxva2_hwaccel_select="vc1_dxva2_hwaccel"
2480 wmv3_vaapi_hwaccel_select="vc1_vaapi_hwaccel"
2481 wmv3_vdpau_decoder_select="vc1_vdpau_decoder"
2482 wmv3_vdpau_hwaccel_select="vc1_vdpau_hwaccel"
2483
2484 # parsers
2485 h264_parser_select="h264_decoder"
2486 hevc_parser_select="golomb"
2487 mpegvideo_parser_select="mpegvideo"
2488 mpeg4video_parser_select="h263dsp mpegvideo qpeldsp"
2489 vc1_parser_select="mpegvideo startcode vc1_decoder"
2490
2491 # bitstream_filters
2492 mjpeg2jpeg_bsf_select="jpegtables"
2493
2494 # external libraries
2495 libaacplus_encoder_deps="libaacplus"
2496 libcelt_decoder_deps="libcelt"
2497 libdcadec_decoder_deps="libdcadec"
2498 libfaac_encoder_deps="libfaac"
2499 libfaac_encoder_select="audio_frame_queue"
2500 libfdk_aac_decoder_deps="libfdk_aac"
2501 libfdk_aac_encoder_deps="libfdk_aac"
2502 libfdk_aac_encoder_select="audio_frame_queue"
2503 libgme_demuxer_deps="libgme"
2504 libgsm_decoder_deps="libgsm"
2505 libgsm_encoder_deps="libgsm"
2506 libgsm_ms_decoder_deps="libgsm"
2507 libgsm_ms_encoder_deps="libgsm"
2508 libilbc_decoder_deps="libilbc"
2509 libilbc_encoder_deps="libilbc"
2510 libkvazaar_encoder_deps="libkvazaar"
2511 libmodplug_demuxer_deps="libmodplug"
2512 libmp3lame_encoder_deps="libmp3lame"
2513 libmp3lame_encoder_select="audio_frame_queue"
2514 libopencore_amrnb_decoder_deps="libopencore_amrnb"
2515 libopencore_amrnb_encoder_deps="libopencore_amrnb"
2516 libopencore_amrnb_encoder_select="audio_frame_queue"
2517 libopencore_amrwb_decoder_deps="libopencore_amrwb"
2518 libopenh264_encoder_deps="libopenh264"
2519 libopenjpeg_decoder_deps="libopenjpeg"
2520 libopenjpeg_encoder_deps="libopenjpeg"
2521 libopus_decoder_deps="libopus"
2522 libopus_encoder_deps="libopus"
2523 libopus_encoder_select="audio_frame_queue"
2524 libquvi_demuxer_deps="libquvi"
2525 libschroedinger_decoder_deps="libschroedinger"
2526 libschroedinger_encoder_deps="libschroedinger"
2527 libshine_encoder_deps="libshine"
2528 libshine_encoder_select="audio_frame_queue"
2529 libspeex_decoder_deps="libspeex"
2530 libspeex_encoder_deps="libspeex"
2531 libspeex_encoder_select="audio_frame_queue"
2532 libstagefright_h264_decoder_deps="libstagefright_h264"
2533 libtheora_encoder_deps="libtheora"
2534 libtwolame_encoder_deps="libtwolame"
2535 libvo_aacenc_encoder_deps="libvo_aacenc"
2536 libvo_aacenc_encoder_select="audio_frame_queue"
2537 libvo_amrwbenc_encoder_deps="libvo_amrwbenc"
2538 libvorbis_decoder_deps="libvorbis"
2539 libvorbis_encoder_deps="libvorbis"
2540 libvorbis_encoder_select="audio_frame_queue"
2541 libvpx_vp8_decoder_deps="libvpx"
2542 libvpx_vp8_encoder_deps="libvpx"
2543 libvpx_vp9_decoder_deps="libvpx"
2544 libvpx_vp9_encoder_deps="libvpx"
2545 libwavpack_encoder_deps="libwavpack"
2546 libwebp_encoder_deps="libwebp"
2547 libwebp_anim_encoder_deps="libwebp"
2548 libx262_encoder_deps="libx262"
2549 libx264_encoder_deps="libx264"
2550 libx264rgb_encoder_deps="libx264"
2551 libx264rgb_encoder_select="libx264_encoder"
2552 libx265_encoder_deps="libx265"
2553 libxavs_encoder_deps="libxavs"
2554 libxvid_encoder_deps="libxvid"
2555 libutvideo_decoder_deps="libutvideo"
2556 libutvideo_encoder_deps="libutvideo"
2557 libzvbi_teletext_decoder_deps="libzvbi"
2558 nvenc_encoder_deps="nvenc"
2559 nvenc_h264_encoder_deps="nvenc"
2560 nvenc_hevc_encoder_deps="nvenc"
2561
2562 # demuxers / muxers
2563 ac3_demuxer_select="ac3_parser"
2564 asf_demuxer_select="riffdec"
2565 asf_o_demuxer_select="riffdec"
2566 asf_muxer_select="riffenc"
2567 asf_stream_muxer_select="asf_muxer"
2568 avi_demuxer_select="riffdec exif"
2569 avi_muxer_select="riffenc"
2570 avisynth_demuxer_deps="avisynth"
2571 avisynth_demuxer_select="riffdec"
2572 caf_demuxer_select="riffdec"
2573 dash_muxer_select="mp4_muxer"
2574 dirac_demuxer_select="dirac_parser"
2575 dts_demuxer_select="dca_parser"
2576 dtshd_demuxer_select="dca_parser"
2577 dv_demuxer_select="dvprofile"
2578 dv_muxer_select="dvprofile"
2579 dxa_demuxer_select="riffdec"
2580 eac3_demuxer_select="ac3_parser"
2581 f4v_muxer_select="mov_muxer"
2582 flac_demuxer_select="flac_parser"
2583 hds_muxer_select="flv_muxer"
2584 hls_muxer_select="mpegts_muxer"
2585 image2_alias_pix_demuxer_select="image2_demuxer"
2586 image2_brender_pix_demuxer_select="image2_demuxer"
2587 ipod_muxer_select="mov_muxer"
2588 ismv_muxer_select="mov_muxer"
2589 libnut_demuxer_deps="libnut"
2590 libnut_muxer_deps="libnut"
2591 matroska_audio_muxer_select="matroska_muxer"
2592 matroska_demuxer_select="riffdec"
2593 matroska_demuxer_suggest="bzlib lzo zlib"
2594 matroska_muxer_select="riffenc"
2595 mmf_muxer_select="riffenc"
2596 mov_demuxer_select="riffdec"
2597 mov_demuxer_suggest="zlib"
2598 mov_muxer_select="riffenc rtpenc_chain"
2599 mp3_demuxer_select="mpegaudio_parser"
2600 mp4_muxer_select="mov_muxer"
2601 mpegts_muxer_select="adts_muxer latm_muxer"
2602 mpegtsraw_demuxer_select="mpegts_demuxer"
2603 mxf_d10_muxer_select="mxf_muxer"
2604 mxf_opatom_muxer_select="mxf_muxer"
2605 nut_muxer_select="riffenc"
2606 nuv_demuxer_select="riffdec"
2607 oga_muxer_select="ogg_muxer"
2608 ogg_demuxer_select="golomb"
2609 opus_muxer_select="ogg_muxer"
2610 psp_muxer_select="mov_muxer"
2611 rtp_demuxer_select="sdp_demuxer"
2612 rtpdec_select="asf_demuxer jpegtables mov_demuxer mpegts_demuxer rm_demuxer rtp_protocol"
2613 rtsp_demuxer_select="http_protocol rtpdec"
2614 rtsp_muxer_select="rtp_muxer http_protocol rtp_protocol rtpenc_chain"
2615 sap_demuxer_select="sdp_demuxer"
2616 sap_muxer_select="rtp_muxer rtp_protocol rtpenc_chain"
2617 sdp_demuxer_select="rtpdec"
2618 smoothstreaming_muxer_select="ismv_muxer"
2619 spdif_muxer_select="aac_parser"
2620 spx_muxer_select="ogg_muxer"
2621 tak_demuxer_select="tak_parser"
2622 tg2_muxer_select="mov_muxer"
2623 tgp_muxer_select="mov_muxer"
2624 vobsub_demuxer_select="mpegps_demuxer"
2625 w64_demuxer_select="wav_demuxer"
2626 w64_muxer_select="wav_muxer"
2627 wav_demuxer_select="riffdec"
2628 wav_muxer_select="riffenc"
2629 webm_muxer_select="riffenc"
2630 wtv_demuxer_select="riffdec"
2631 wtv_muxer_select="riffenc"
2632 xmv_demuxer_select="riffdec"
2633 xwma_demuxer_select="riffdec"
2634
2635 # indevs / outdevs
2636 alsa_indev_deps="alsa_asoundlib_h snd_pcm_htimestamp"
2637 alsa_outdev_deps="alsa_asoundlib_h"
2638 avfoundation_indev_extralibs="-framework CoreVideo -framework Foundation -framework AVFoundation -framework CoreMedia"
2639 avfoundation_indev_select="avfoundation"
2640 bktr_indev_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
2641 caca_outdev_deps="libcaca"
2642 decklink_outdev_deps="decklink pthreads"
2643 decklink_outdev_extralibs="-lstdc++"
2644 decklink_indev_deps="decklink pthreads"
2645 decklink_indev_extralibs="-lstdc++"
2646 dshow_indev_deps="IBaseFilter"
2647 dshow_indev_extralibs="-lpsapi -lole32 -lstrmiids -luuid -loleaut32 -lshlwapi"
2648 dv1394_indev_deps="dv1394"
2649 dv1394_indev_select="dv_demuxer"
2650 fbdev_indev_deps="linux_fb_h"
2651 fbdev_outdev_deps="linux_fb_h"
2652 gdigrab_indev_deps="CreateDIBSection"
2653 gdigrab_indev_extralibs="-lgdi32"
2654 gdigrab_indev_select="bmp_decoder"
2655 iec61883_indev_deps="libiec61883"
2656 jack_indev_deps="jack_jack_h sem_timedwait"
2657 lavfi_indev_deps="avfilter"
2658 libcdio_indev_deps="libcdio"
2659 libdc1394_indev_deps="libdc1394"
2660 libv4l2_indev_deps="libv4l2"
2661 openal_indev_deps="openal"
2662 opengl_outdev_deps="opengl"
2663 oss_indev_deps_any="soundcard_h sys_soundcard_h"
2664 oss_outdev_deps_any="soundcard_h sys_soundcard_h"
2665 pulse_indev_deps="libpulse"
2666 pulse_outdev_deps="libpulse"
2667 qtkit_indev_extralibs="-framework QTKit -framework Foundation -framework QuartzCore"
2668 qtkit_indev_select="qtkit"
2669 sdl_outdev_deps="sdl"
2670 sndio_indev_deps="sndio_h"
2671 sndio_outdev_deps="sndio_h"
2672 v4l_indev_deps="linux_videodev_h"
2673 v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h"
2674 v4l2_outdev_deps_any="linux_videodev2_h sys_videoio_h"
2675 vfwcap_indev_deps="capCreateCaptureWindow vfwcap_defines"
2676 vfwcap_indev_extralibs="-lavicap32"
2677 xv_outdev_deps="X11_extensions_Xvlib_h XvGetPortAttribute"
2678 xv_outdev_extralibs="-lXv -lX11 -lXext"
2679 x11grab_indev_deps="x11grab"
2680 x11grab_xcb_indev_deps="libxcb"
2681
2682 # protocols
2683 async_protocol_deps="pthreads"
2684 bluray_protocol_deps="libbluray"
2685 ffrtmpcrypt_protocol_deps="!librtmp_protocol"
2686 ffrtmpcrypt_protocol_deps_any="gcrypt gmp openssl"
2687 ffrtmpcrypt_protocol_select="tcp_protocol"
2688 ffrtmphttp_protocol_deps="!librtmp_protocol"
2689 ffrtmphttp_protocol_select="http_protocol"
2690 ftp_protocol_select="tcp_protocol"
2691 gopher_protocol_select="network"
2692 http_protocol_select="tcp_protocol"
2693 httpproxy_protocol_select="tcp_protocol"
2694 https_protocol_select="tls_protocol"
2695 icecast_protocol_select="http_protocol"
2696 librtmp_protocol_deps="librtmp"
2697 librtmpe_protocol_deps="librtmp"
2698 librtmps_protocol_deps="librtmp"
2699 librtmpt_protocol_deps="librtmp"
2700 librtmpte_protocol_deps="librtmp"
2701 libsmbclient_protocol_deps="libsmbclient gplv3"
2702 libssh_protocol_deps="libssh"
2703 mmsh_protocol_select="http_protocol"
2704 mmst_protocol_select="network"
2705 rtmp_protocol_deps="!librtmp_protocol"
2706 rtmp_protocol_select="tcp_protocol"
2707 rtmpe_protocol_select="ffrtmpcrypt_protocol"
2708 rtmps_protocol_deps="!librtmp_protocol"
2709 rtmps_protocol_select="tls_protocol"
2710 rtmpt_protocol_select="ffrtmphttp_protocol"
2711 rtmpte_protocol_select="ffrtmpcrypt_protocol ffrtmphttp_protocol"
2712 rtmpts_protocol_select="ffrtmphttp_protocol https_protocol"
2713 rtp_protocol_select="udp_protocol"
2714 sctp_protocol_deps="struct_sctp_event_subscribe"
2715 sctp_protocol_select="network"
2716 srtp_protocol_select="rtp_protocol"
2717 tcp_protocol_select="network"
2718 tls_gnutls_protocol_deps="gnutls !tls_securetransport_protocol"
2719 tls_gnutls_protocol_select="tcp_protocol"
2720 tls_openssl_protocol_deps="openssl !tls_securetransport_protocol !tls_gnutls_protocol"
2721 tls_openssl_protocol_select="tcp_protocol"
2722 tls_securetransport_protocol_deps="securetransport"
2723 tls_securetransport_protocol_select="tcp_protocol"
2724 tls_protocol_deps_any="tls_securetransport_protocol tls_gnutls_protocol tls_openssl_protocol"
2725 udp_protocol_select="network"
2726 udplite_protocol_select="network"
2727 unix_protocol_deps="sys_un_h"
2728 unix_protocol_select="network"
2729
2730 # filters
2731 amovie_filter_deps="avcodec avformat"
2732 aresample_filter_deps="swresample"
2733 ass_filter_deps="libass"
2734 asyncts_filter_deps="avresample"
2735 atempo_filter_deps="avcodec"
2736 atempo_filter_select="rdft"
2737 azmq_filter_deps="libzmq"
2738 blackframe_filter_deps="gpl"
2739 boxblur_filter_deps="gpl"
2740 bs2b_filter_deps="libbs2b"
2741 colormatrix_filter_deps="gpl"
2742 cover_rect_filter_deps="avcodec avformat gpl"
2743 cropdetect_filter_deps="gpl"
2744 delogo_filter_deps="gpl"
2745 deshake_filter_select="pixelutils"
2746 drawtext_filter_deps="libfreetype"
2747 dynaudnorm_filter_deps="copysign erf"
2748 ebur128_filter_deps="gpl"
2749 eq_filter_deps="gpl"
2750 fftfilt_filter_deps="avcodec"
2751 fftfilt_filter_select="rdft"
2752 flite_filter_deps="libflite"
2753 find_rect_filter_deps="avcodec avformat gpl"
2754 frei0r_filter_deps="frei0r dlopen"
2755 frei0r_src_filter_deps="frei0r dlopen"
2756 fspp_filter_deps="gpl"
2757 geq_filter_deps="gpl"
2758 histeq_filter_deps="gpl"
2759 hqdn3d_filter_deps="gpl"
2760 interlace_filter_deps="gpl"
2761 kerndeint_filter_deps="gpl"
2762 ladspa_filter_deps="ladspa dlopen"
2763 mcdeint_filter_deps="avcodec gpl"
2764 movie_filter_deps="avcodec avformat"
2765 mpdecimate_filter_deps="gpl"
2766 mpdecimate_filter_select="pixelutils"
2767 mptestsrc_filter_deps="gpl"
2768 negate_filter_deps="lut_filter"
2769 perspective_filter_deps="gpl"
2770 pp7_filter_deps="gpl"
2771 ocv_filter_deps="libopencv"
2772 owdenoise_filter_deps="gpl"
2773 pan_filter_deps="swresample"
2774 phase_filter_deps="gpl"
2775 pp_filter_deps="gpl postproc"
2776 pullup_filter_deps="gpl"
2777 removelogo_filter_deps="avcodec avformat swscale"
2778 repeatfields_filter_deps="gpl"
2779 resample_filter_deps="avresample"
2780 sab_filter_deps="gpl swscale"
2781 scale_filter_deps="swscale"
2782 scale2ref_filter_deps="swscale"
2783 select_filter_select="pixelutils"
2784 smartblur_filter_deps="gpl swscale"
2785 showcqt_filter_deps="avcodec"
2786 showcqt_filter_select="fft"
2787 showfreqs_filter_deps="avcodec"
2788 showfreqs_filter_select="fft"
2789 showspectrum_filter_deps="avcodec"
2790 showspectrum_filter_select="rdft"
2791 spp_filter_deps="gpl avcodec"
2792 spp_filter_select="fft idctdsp fdctdsp me_cmp pixblockdsp"
2793 stereo3d_filter_deps="gpl"
2794 subtitles_filter_deps="avformat avcodec libass"
2795 super2xsai_filter_deps="gpl"
2796 tinterlace_filter_deps="gpl"
2797 vidstabdetect_filter_deps="libvidstab"
2798 vidstabtransform_filter_deps="libvidstab"
2799 pixfmts_super2xsai_test_deps="super2xsai_filter"
2800 tinterlace_merge_test_deps="tinterlace_filter"
2801 tinterlace_pad_test_deps="tinterlace_filter"
2802 uspp_filter_deps="gpl avcodec"
2803 zmq_filter_deps="libzmq"
2804 zoompan_filter_deps="swscale"
2805
2806 # examples
2807 avio_reading="avformat avcodec avutil"
2808 avio_dir_cmd="avformat avutil"
2809 avcodec_example_deps="avcodec avutil"
2810 decoding_encoding_example_deps="avcodec avformat avutil"
2811 demuxing_decoding_example_deps="avcodec avformat avutil"
2812 extract_mvs_example_deps="avcodec avformat avutil"
2813 filter_audio_example_deps="avfilter avutil"
2814 filtering_audio_example_deps="avfilter avcodec avformat avutil"
2815 filtering_video_example_deps="avfilter avcodec avformat avutil"
2816 metadata_example_deps="avformat avutil"
2817 muxing_example_deps="avcodec avformat avutil swscale"
2818 qsvdec_example_deps="avcodec avutil libmfx h264_qsv_decoder vaapi_x11"
2819 remuxing_example_deps="avcodec avformat avutil"
2820 resampling_audio_example_deps="avutil swresample"
2821 scaling_video_example_deps="avutil swscale"
2822 transcode_aac_example_deps="avcodec avformat swresample"
2823 transcoding_example_deps="avfilter avcodec avformat avutil"
2824
2825 # libraries, in linking order
2826 avcodec_deps="avutil"
2827 avdevice_deps="avformat avcodec avutil"
2828 avfilter_deps="avutil"
2829 avformat_deps="avcodec avutil"
2830 avresample_deps="avutil"
2831 postproc_deps="avutil gpl"
2832 swresample_deps="avutil"
2833 swscale_deps="avutil"
2834
2835 # programs
2836 ffmpeg_deps="avcodec avfilter avformat swresample"
2837 ffmpeg_select="aformat_filter anull_filter atrim_filter format_filter
2838                null_filter
2839                setpts_filter trim_filter"
2840 ffplay_deps="avcodec avformat swscale swresample sdl"
2841 ffplay_libs='$sdl_libs'
2842 ffplay_select="rdft crop_filter transpose_filter hflip_filter vflip_filter rotate_filter"
2843 ffprobe_deps="avcodec avformat"
2844 ffserver_deps="avformat fork sarestart"
2845 ffserver_select="ffm_muxer rtp_protocol rtsp_demuxer"
2846
2847 # documentation
2848 podpages_deps="perl"
2849 manpages_deps="perl pod2man"
2850 htmlpages_deps="perl"
2851 htmlpages_deps_any="makeinfo_html texi2html"
2852 txtpages_deps="perl makeinfo"
2853 doc_deps_any="manpages htmlpages podpages txtpages"
2854
2855 # default parameters
2856
2857 logfile="config.log"
2858
2859 # installation paths
2860 prefix_default="/usr/local"
2861 bindir_default='${prefix}/bin'
2862 datadir_default='${prefix}/share/ffmpeg'
2863 docdir_default='${prefix}/share/doc/ffmpeg'
2864 incdir_default='${prefix}/include'
2865 libdir_default='${prefix}/lib'
2866 mandir_default='${prefix}/share/man'
2867
2868 # toolchain
2869 ar_default="ar"
2870 cc_default="gcc"
2871 cxx_default="g++"
2872 host_cc_default="gcc"
2873 cp_f="cp -f"
2874 doxygen_default="doxygen"
2875 install="install"
2876 ln_s="ln -s -f"
2877 nm_default="nm -g"
2878 objformat="elf"
2879 pkg_config_default=pkg-config
2880 ranlib_default="ranlib"
2881 strip_default="strip"
2882 yasmexe_default="yasm"
2883 windres_default="windres"
2884
2885 # OS
2886 target_os_default=$(tolower $(uname -s))
2887 host_os=$target_os_default
2888
2889 # machine
2890 if test "$target_os_default" = aix; then
2891     arch_default=$(uname -p)
2892     strip_default="strip -X32_64"
2893 else
2894     arch_default=$(uname -m)
2895 fi
2896 cpu="generic"
2897 intrinsics="none"
2898
2899 # configurable options
2900 enable $PROGRAM_LIST
2901 enable $DOCUMENT_LIST
2902 enable $EXAMPLE_LIST
2903 enable $(filter_out avresample $LIBRARY_LIST)
2904 enable stripping
2905
2906 enable asm
2907 enable debug
2908 enable doc
2909 enable faan faandct faanidct
2910 enable optimizations
2911 enable runtime_cpudetect
2912 enable safe_bitstream_reader
2913 enable static
2914 enable swscale_alpha
2915 enable valgrind_backtrace
2916
2917 sws_max_filter_size_default=256
2918 set_default sws_max_filter_size
2919
2920 # Enable hwaccels by default.
2921 enable d3d11va dxva2 vaapi vda vdpau videotoolbox xvmc
2922 enable xlib
2923
2924 # build settings
2925 SHFLAGS='-shared -Wl,-soname,$$(@F)'
2926 LIBPREF="lib"
2927 LIBSUF=".a"
2928 FULLNAME='$(NAME)$(BUILDSUF)'
2929 LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
2930 SLIBPREF="lib"
2931 SLIBSUF=".so"
2932 SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
2933 SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
2934 SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
2935 LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
2936 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'
2937 SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR) $(SLIBNAME)'
2938
2939 asflags_filter=echo
2940 cflags_filter=echo
2941 ldflags_filter=echo
2942
2943 AS_C='-c'
2944 AS_O='-o $@'
2945 CC_C='-c'
2946 CC_E='-E -o $@'
2947 CC_O='-o $@'
2948 CXX_C='-c'
2949 CXX_O='-o $@'
2950 LD_O='-o $@'
2951 LD_LIB='-l%'
2952 LD_PATH='-L'
2953 HOSTCC_C='-c'
2954 HOSTCC_E='-E -o $@'
2955 HOSTCC_O='-o $@'
2956 HOSTLD_O='-o $@'
2957
2958 host_libs='-lm'
2959 host_cflags_filter=echo
2960 host_ldflags_filter=echo
2961
2962 target_path='$(CURDIR)'
2963
2964 # since the object filename is not given with the -MM flag, the compiler
2965 # is only able to print the basename, and we must add the path ourselves
2966 DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o," > $(@:.o=.d)'
2967 DEPFLAGS='-MM'
2968
2969 # find source path
2970 if test -f configure; then
2971     source_path=.
2972 else
2973     source_path=$(cd $(dirname "$0"); pwd)
2974     case "$source_path" in
2975         *[[:blank:]]*) die "Out of tree builds are impossible with whitespace in source path." ;;
2976     esac
2977     test -e "$source_path/config.h" &&
2978         die "Out of tree builds are impossible with config.h in source dir."
2979 fi
2980
2981 for v in "$@"; do
2982     r=${v#*=}
2983     l=${v%"$r"}
2984     r=$(sh_quote "$r")
2985     FFMPEG_CONFIGURATION="${FFMPEG_CONFIGURATION# } ${l}${r}"
2986 done
2987
2988 find_things(){
2989     thing=$1
2990     pattern=$2
2991     file=$source_path/$3
2992     sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
2993 }
2994
2995 ENCODER_LIST=$(find_things  encoder  ENC      libavcodec/allcodecs.c)
2996 DECODER_LIST=$(find_things  decoder  DEC      libavcodec/allcodecs.c)
2997 HWACCEL_LIST=$(find_things  hwaccel  HWACCEL  libavcodec/allcodecs.c)
2998 PARSER_LIST=$(find_things   parser   PARSER   libavcodec/allcodecs.c)
2999 BSF_LIST=$(find_things      bsf      BSF      libavcodec/allcodecs.c)
3000 MUXER_LIST=$(find_things    muxer    _MUX     libavformat/allformats.c)
3001 DEMUXER_LIST=$(find_things  demuxer  DEMUX    libavformat/allformats.c)
3002 OUTDEV_LIST=$(find_things   outdev   OUTDEV   libavdevice/alldevices.c)
3003 INDEV_LIST=$(find_things    indev    _IN      libavdevice/alldevices.c)
3004 PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
3005 FILTER_LIST=$(find_things   filter   FILTER   libavfilter/allfilters.c)
3006
3007 ALL_COMPONENTS="
3008     $BSF_LIST
3009     $DECODER_LIST
3010     $DEMUXER_LIST
3011     $ENCODER_LIST
3012     $FILTER_LIST
3013     $HWACCEL_LIST
3014     $INDEV_LIST
3015     $MUXER_LIST
3016     $OUTDEV_LIST
3017     $PARSER_LIST
3018     $PROTOCOL_LIST
3019 "
3020
3021 for n in $COMPONENT_LIST; do
3022     v=$(toupper ${n%s})_LIST
3023     eval enable \$$v
3024     eval ${n}_if_any="\$$v"
3025 done
3026
3027 enable $ARCH_EXT_LIST
3028
3029 die_unknown(){
3030     echo "Unknown option \"$1\"."
3031     echo "See $0 --help for available options."
3032     exit 1
3033 }
3034
3035 print_3_columns() {
3036     cat | tr ' ' '\n' | sort | pr -r -3 -t
3037 }
3038
3039 show_list() {
3040     suffix=_$1
3041     shift
3042     echo $* | sed s/$suffix//g | print_3_columns
3043     exit 0
3044 }
3045
3046 rand_list(){
3047     IFS=', '
3048     set -- $*
3049     unset IFS
3050     for thing; do
3051         comp=${thing%:*}
3052         prob=${thing#$comp}
3053         prob=${prob#:}
3054         is_in ${comp} $COMPONENT_LIST && eval comp=\$$(toupper ${comp%s})_LIST
3055         echo "prob ${prob:-0.5}"
3056         printf '%s\n' $comp
3057     done
3058 }
3059
3060 do_random(){
3061     action=$1
3062     shift
3063     random_seed=$(awk "BEGIN { srand($random_seed); print srand() }")
3064     $action $(rand_list "$@" | awk "BEGIN { srand($random_seed) } \$1 == \"prob\" { prob = \$2; next } rand() < prob { print }")
3065 }
3066
3067 for opt do
3068     optval="${opt#*=}"
3069     case "$opt" in
3070         --extra-ldflags=*)
3071             add_ldflags $optval
3072         ;;
3073         --extra-ldexeflags=*)
3074             add_ldexeflags $optval
3075         ;;
3076         --extra-ldlibflags=*)
3077             add_ldlibflags $optval
3078         ;;
3079         --extra-libs=*)
3080             add_extralibs $optval
3081         ;;
3082         --disable-devices)
3083             disable $INDEV_LIST $OUTDEV_LIST
3084         ;;
3085         --enable-debug=*)
3086             debuglevel="$optval"
3087         ;;
3088         --disable-programs)
3089             disable $PROGRAM_LIST
3090         ;;
3091         --disable-everything)
3092             map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
3093         ;;
3094         --disable-all)
3095             map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
3096             disable $LIBRARY_LIST $PROGRAM_LIST doc
3097         ;;
3098         --enable-random|--disable-random)
3099             action=${opt%%-random}
3100             do_random ${action#--} $COMPONENT_LIST
3101         ;;
3102         --enable-random=*|--disable-random=*)
3103             action=${opt%%-random=*}
3104             do_random ${action#--} $optval
3105         ;;
3106         --enable-*=*|--disable-*=*)
3107             eval $(echo "${opt%%=*}" | sed 's/--/action=/;s/-/ thing=/')
3108             is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt"
3109             eval list=\$$(toupper $thing)_LIST
3110             name=$(echo "${optval}" | sed "s/,/_${thing}|/g")_${thing}
3111             list=$(filter "$name" $list)
3112             [ "$list" = "" ] && warn "Option $opt did not match anything"
3113             $action $list
3114         ;;
3115         --enable-?*|--disable-?*)
3116             eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
3117             if is_in $option $COMPONENT_LIST; then
3118                 test $action = disable && action=unset
3119                 eval $action \$$(toupper ${option%s})_LIST
3120             elif is_in $option $CMDLINE_SELECT; then
3121                 $action $option
3122             else
3123                 die_unknown $opt
3124             fi
3125         ;;
3126         --list-*)
3127             NAME="${opt#--list-}"
3128             is_in $NAME $COMPONENT_LIST || die_unknown $opt
3129             NAME=${NAME%s}
3130             eval show_list $NAME \$$(toupper $NAME)_LIST
3131         ;;
3132         --help|-h) show_help
3133         ;;
3134         --fatal-warnings) enable fatal_warnings
3135         ;;
3136         *)
3137             optname="${opt%%=*}"
3138             optname="${optname#--}"
3139             optname=$(echo "$optname" | sed 's/-/_/g')
3140             if is_in $optname $CMDLINE_SET; then
3141                 eval $optname='$optval'
3142             elif is_in $optname $CMDLINE_APPEND; then
3143                 append $optname "$optval"
3144             else
3145                 die_unknown $opt
3146             fi
3147         ;;
3148     esac
3149 done
3150
3151 for e in $env; do
3152     eval "export $e"
3153 done
3154
3155 disabled logging && logfile=/dev/null
3156
3157 echo "# $0 $FFMPEG_CONFIGURATION" > $logfile
3158 set >> $logfile
3159
3160 test -n "$valgrind" && toolchain="valgrind-memcheck"
3161
3162 case "$toolchain" in
3163     clang-asan)
3164         cc_default="clang"
3165         add_cflags  -fsanitize=address
3166         add_ldflags -fsanitize=address
3167     ;;
3168     clang-tsan)
3169         cc_default="clang"
3170         add_cflags  -fsanitize=thread -pie
3171         add_ldflags -fsanitize=thread -pie
3172     ;;
3173     clang-usan)
3174         cc_default="clang"
3175         add_cflags  -fsanitize=undefined
3176         add_ldflags -fsanitize=undefined
3177     ;;
3178     gcc-asan)
3179         cc_default="gcc"
3180         add_cflags  -fsanitize=address
3181         add_ldflags -fsanitize=address
3182     ;;
3183     gcc-tsan)
3184         cc_default="gcc"
3185         add_cflags  -fsanitize=thread -pie -fPIC
3186         add_ldflags -fsanitize=thread -pie -fPIC
3187     ;;
3188     gcc-usan)
3189         cc_default="gcc"
3190         add_cflags  -fsanitize=undefined
3191         add_ldflags -fsanitize=undefined
3192     ;;
3193     valgrind-massif)
3194         target_exec_default=${valgrind:-"valgrind"}
3195         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"
3196     ;;
3197     valgrind-memcheck)
3198         target_exec_default=${valgrind:-"valgrind"}
3199         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"
3200     ;;
3201     msvc)
3202         # Check whether the current MSVC version needs the C99 converter.
3203         # From MSVC 2013 (compiler major version 18) onwards, it does actually
3204         # support enough of C99 to build ffmpeg. Default to the new
3205         # behaviour if the regexp was unable to match anything, since this
3206         # successfully parses the version number of existing supported
3207         # versions that require the converter (MSVC 2010 and 2012).
3208         cl_major_ver=$(cl 2>&1 | sed -n 's/.*Version \([[:digit:]]\{1,\}\)\..*/\1/p')
3209         if [ -z "$cl_major_ver" ] || [ $cl_major_ver -ge 18 ]; then
3210             cc_default="cl"
3211         else
3212             cc_default="c99wrap cl"
3213         fi
3214         ld_default="$source_path/compat/windows/mslink"
3215         nm_default="dumpbin -symbols"
3216         ar_default="lib"
3217         case "$arch" in
3218         arm*)
3219             as_default="armasm"
3220             ;;
3221         esac
3222         target_os_default="win32"
3223         # Use a relative path for TMPDIR. This makes sure all the
3224         # ffconf temp files are written with a relative path, avoiding
3225         # issues with msys/win32 path conversion for MSVC parameters
3226         # such as -Fo<file> or -out:<file>.
3227         TMPDIR=.
3228     ;;
3229     icl)
3230         cc_default="icl"
3231         ld_default="xilink"
3232         nm_default="dumpbin -symbols"
3233         ar_default="xilib"
3234         target_os_default="win32"
3235         TMPDIR=.
3236     ;;
3237     gcov)
3238         add_cflags  -fprofile-arcs -ftest-coverage
3239         add_ldflags -fprofile-arcs -ftest-coverage
3240     ;;
3241     hardened)
3242         add_cppflags -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2
3243         add_cflags   -fno-strict-overflow -fstack-protector-all
3244         add_ldflags  -Wl,-z,relro -Wl,-z,now
3245     ;;
3246     ?*)
3247         die "Unknown toolchain $toolchain"
3248     ;;
3249 esac
3250
3251 test -n "$cross_prefix" && enable cross_compile
3252
3253 if enabled cross_compile; then
3254     test -n "$arch" && test -n "$target_os" ||
3255         die "Must specify target arch and OS when cross-compiling"
3256 fi
3257
3258 ar_default="${cross_prefix}${ar_default}"
3259 cc_default="${cross_prefix}${cc_default}"
3260 cxx_default="${cross_prefix}${cxx_default}"
3261 nm_default="${cross_prefix}${nm_default}"
3262 pkg_config_default="${cross_prefix}${pkg_config_default}"
3263 if ${cross_prefix}${ranlib_default} 2>&1 | grep -q "\-D "; then
3264     ranlib_default="${cross_prefix}${ranlib_default} -D"
3265 else
3266     ranlib_default="${cross_prefix}${ranlib_default}"
3267 fi
3268 strip_default="${cross_prefix}${strip_default}"
3269 windres_default="${cross_prefix}${windres_default}"
3270
3271 sysinclude_default="${sysroot}/usr/include"
3272
3273 set_default arch cc cxx doxygen pkg_config ranlib strip sysinclude \
3274     target_exec target_os yasmexe
3275 enabled cross_compile || host_cc_default=$cc
3276 set_default host_cc
3277
3278 pkg_config_fail_message=""
3279 if ! $pkg_config --version >/dev/null 2>&1; then
3280     warn "$pkg_config not found, library detection may fail."
3281     pkg_config=false
3282 elif is_in -static $cc $LDFLAGS && ! is_in --static $pkg_config $pkg_config_flags; then
3283     pkg_config_fail_message="
3284 Note: When building a static binary, add --pkg-config-flags=\"--static\"."
3285 fi
3286
3287 if test $doxygen != $doxygen_default && \
3288   ! $doxygen --version >/dev/null 2>&1; then
3289     warn "Specified doxygen \"$doxygen\" not found, API documentation will fail to build."
3290 fi
3291
3292 exesuf() {
3293     case $1 in
3294         mingw32*|win32|win64|cygwin*|*-dos|freedos|opendos|os/2*|symbian) echo .exe ;;
3295     esac
3296 }
3297
3298 EXESUF=$(exesuf $target_os)
3299 HOSTEXESUF=$(exesuf $host_os)
3300
3301 # set temporary file name
3302 : ${TMPDIR:=$TEMPDIR}
3303 : ${TMPDIR:=$TMP}
3304 : ${TMPDIR:=/tmp}
3305
3306 if [ -n "$tempprefix" ] ; then
3307     mktemp(){
3308         echo $tempprefix.${HOSTNAME}.${UID}
3309     }
3310 elif ! check_cmd mktemp -u XXXXXX; then
3311     # simple replacement for missing mktemp
3312     # NOT SAFE FOR GENERAL USE
3313     mktemp(){
3314         echo "${2%%XXX*}.${HOSTNAME}.${UID}.$$"
3315     }
3316 fi
3317
3318 tmpfile(){
3319     tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
3320         (set -C; exec > $tmp) 2>/dev/null ||
3321         die "Unable to create temporary file in $TMPDIR."
3322     append TMPFILES $tmp
3323     eval $1=$tmp
3324 }
3325
3326 trap 'rm -f -- $TMPFILES' EXIT
3327
3328 tmpfile TMPASM .asm
3329 tmpfile TMPC   .c
3330 tmpfile TMPCPP .cpp
3331 tmpfile TMPE   $EXESUF
3332 tmpfile TMPH   .h
3333 tmpfile TMPM   .m
3334 tmpfile TMPO   .o
3335 tmpfile TMPS   .S
3336 tmpfile TMPSH  .sh
3337 tmpfile TMPV   .ver
3338
3339 unset -f mktemp
3340
3341 chmod +x $TMPE
3342
3343 # make sure we can execute files in $TMPDIR
3344 cat > $TMPSH 2>> $logfile <<EOF
3345 #! /bin/sh
3346 EOF
3347 chmod +x $TMPSH >> $logfile 2>&1
3348 if ! $TMPSH >> $logfile 2>&1; then
3349     cat <<EOF
3350 Unable to create and execute files in $TMPDIR.  Set the TMPDIR environment
3351 variable to another directory and make sure that it is not mounted noexec.
3352 EOF
3353     die "Sanity test failed."
3354 fi
3355
3356 armasm_flags(){
3357     for flag; do
3358         case $flag in
3359             # Filter out MSVC cl.exe options from cflags that shouldn't
3360             # be passed to gas-preprocessor
3361             -M[TD]*)                                            ;;
3362             *)                  echo $flag                      ;;
3363         esac
3364    done
3365 }
3366
3367 ccc_flags(){
3368     for flag; do
3369         case $flag in
3370             -std=c99)           echo -c99                       ;;
3371             -mcpu=*)            echo -arch ${flag#*=}           ;;
3372             -mieee)             echo -ieee                      ;;
3373             -O*|-fast)          echo $flag                      ;;
3374             -fno-math-errno)    echo -assume nomath_errno       ;;
3375             -g)                 echo -g3                        ;;
3376             -Wall)              echo -msg_enable level2         ;;
3377             -Wno-pointer-sign)  echo -msg_disable ptrmismatch1  ;;
3378             -Wl,*)              echo $flag                      ;;
3379             -f*|-W*)                                            ;;
3380             *)                  echo $flag                      ;;
3381         esac
3382    done
3383 }
3384
3385 cparser_flags(){
3386     for flag; do
3387         case $flag in
3388             -Wno-switch)             echo -Wno-switch-enum ;;
3389             -Wno-format-zero-length) ;;
3390             -Wdisabled-optimization) ;;
3391             -Wno-pointer-sign)       echo -Wno-other ;;
3392             *)                       echo $flag ;;
3393         esac
3394     done
3395 }
3396
3397 msvc_common_flags(){
3398     for flag; do
3399         case $flag in
3400             # In addition to specifying certain flags under the compiler
3401             # specific filters, they must be specified here as well or else the
3402             # generic catch all at the bottom will print the original flag.
3403             -Wall)                ;;
3404             -std=c99)             ;;
3405             # Common flags
3406             -fomit-frame-pointer) ;;
3407             -g)                   echo -Z7 ;;
3408             -fno-math-errno)      ;;
3409             -fno-common)          ;;
3410             -fno-signed-zeros)    ;;
3411             -fPIC)                ;;
3412             -mthumb)              ;;
3413             -march=*)             ;;
3414             -lz)                  echo zlib.lib ;;
3415             -lavifil32)           echo vfw32.lib ;;
3416             -lavicap32)           echo vfw32.lib user32.lib ;;
3417             -l*)                  echo ${flag#-l}.lib ;;
3418             -LARGEADDRESSAWARE)   echo $flag ;;
3419             -L*)                  echo -libpath:${flag#-L} ;;
3420             *)                    echo $flag ;;
3421         esac
3422     done
3423 }
3424
3425 msvc_flags(){
3426     msvc_common_flags "$@"
3427     for flag; do
3428         case $flag in
3429             -Wall)                echo -W4 -wd4244 -wd4127 -wd4018 -wd4389     \
3430                                        -wd4146 -wd4057 -wd4204 -wd4706 -wd4305 \
3431                                        -wd4152 -wd4324 -we4013 -wd4100 -wd4214 \
3432                                        -wd4307 \
3433                                        -wd4273 -wd4554 -wd4701 ;;
3434         esac
3435     done
3436 }
3437
3438 icl_flags(){
3439     msvc_common_flags "$@"
3440     for flag; do
3441         case $flag in
3442             # Despite what Intel's documentation says -Wall, which is supported
3443             # on Windows, does enable remarks so disable them here.
3444             -Wall)                echo $flag -Qdiag-disable:remark ;;
3445             -std=c99)             echo -Qstd=c99 ;;
3446             -flto)                echo -ipo ;;
3447         esac
3448     done
3449 }
3450
3451 icc_flags(){
3452     for flag; do
3453         case $flag in
3454             -flto)                echo -ipo ;;
3455             *)                    echo $flag ;;
3456         esac
3457     done
3458 }
3459
3460 pgi_flags(){
3461     for flag; do
3462         case $flag in
3463             -flto)                echo -Mipa=fast,libopt,libinline,vestigial ;;
3464             -fomit-frame-pointer) echo -Mnoframe ;;
3465             -g)                   echo -gopt ;;
3466             *)                    echo $flag ;;
3467         esac
3468     done
3469 }
3470
3471 suncc_flags(){
3472     for flag; do
3473         case $flag in
3474             -march=*|-mcpu=*)
3475                 case "${flag#*=}" in
3476                     native)                   echo -xtarget=native       ;;
3477                     v9|niagara)               echo -xarch=sparc          ;;
3478                     ultrasparc)               echo -xarch=sparcvis       ;;
3479                     ultrasparc3|niagara2)     echo -xarch=sparcvis2      ;;
3480                     i586|pentium)             echo -xchip=pentium        ;;
3481                     i686|pentiumpro|pentium2) echo -xtarget=pentium_pro  ;;
3482                     pentium3*|c3-2)           echo -xtarget=pentium3     ;;
3483                     pentium-m)          echo -xarch=sse2 -xchip=pentium3 ;;
3484                     pentium4*)          echo -xtarget=pentium4           ;;
3485                     prescott|nocona)    echo -xarch=sse3 -xchip=pentium4 ;;
3486                     *-sse3)             echo -xarch=sse3                 ;;
3487                     core2)              echo -xarch=ssse3 -xchip=core2   ;;
3488                     bonnell)                   echo -xarch=ssse3         ;;
3489                     corei7|nehalem)            echo -xtarget=nehalem     ;;
3490                     westmere)                  echo -xtarget=westmere    ;;
3491                     silvermont)                echo -xarch=sse4_2        ;;
3492                     corei7-avx|sandybridge)    echo -xtarget=sandybridge ;;
3493                     core-avx*|ivybridge|haswell|broadwell)
3494                                                echo -xarch=avx           ;;
3495                     amdfam10|barcelona)        echo -xtarget=barcelona   ;;
3496                     btver1)                    echo -xarch=amdsse4a      ;;
3497                     btver2|bdver*)             echo -xarch=avx           ;;
3498                     athlon-4|athlon-[mx]p)     echo -xarch=ssea          ;;
3499                     k8|opteron|athlon64|athlon-fx)
3500                                                echo -xarch=sse2a         ;;
3501                     athlon*)                   echo -xarch=pentium_proa  ;;
3502                 esac
3503                 ;;
3504             -std=c99)             echo -xc99              ;;
3505             -fomit-frame-pointer) echo -xregs=frameptr    ;;
3506             -fPIC)                echo -KPIC -xcode=pic32 ;;
3507             -W*,*)                echo $flag              ;;
3508             -f*-*|-W*|-mimpure-text)                      ;;
3509             -shared)              echo -G                 ;;
3510             *)                    echo $flag              ;;
3511         esac
3512     done
3513 }
3514
3515 tms470_flags(){
3516     for flag; do
3517         case $flag in
3518             -march=*|-mcpu=*)
3519                 case "${flag#*=}" in
3520                     armv7-a|cortex-a*)      echo -mv=7a8 ;;
3521                     armv7-r|cortex-r*)      echo -mv=7r4 ;;
3522                     armv7-m|cortex-m*)      echo -mv=7m3 ;;
3523                     armv6*|arm11*)          echo -mv=6   ;;
3524                     armv5*e|arm[79]*e*|arm9[24]6*|arm96*|arm102[26])
3525                                             echo -mv=5e  ;;
3526                     armv4*|arm7*|arm9[24]*) echo -mv=4   ;;
3527                 esac
3528                 ;;
3529             -mfpu=neon)     echo --float_support=vfpv3 --neon ;;
3530             -mfpu=vfp)      echo --float_support=vfpv2        ;;
3531             -mfpu=vfpv3)    echo --float_support=vfpv3        ;;
3532             -mfpu=vfpv3-d16) echo --float_support=vfpv3d16    ;;
3533             -msoft-float)   echo --float_support=vfplib       ;;
3534             -O[0-3]|-mf=*)  echo $flag                        ;;
3535             -g)             echo -g -mn                       ;;
3536             -pds=*)         echo $flag                        ;;
3537             -D*|-I*)        echo $flag                        ;;
3538             --gcc|--abi=*)  echo $flag                        ;;
3539             -me)            echo $flag                        ;;
3540         esac
3541     done
3542 }
3543
3544 probe_cc(){
3545     pfx=$1
3546     _cc=$2
3547     first=$3
3548
3549     unset _type _ident _cc_c _cc_e _cc_o _flags _cflags
3550     unset _ld_o _ldflags _ld_lib _ld_path
3551     unset _depflags _DEPCMD _DEPFLAGS
3552     _flags_filter=echo
3553
3554     if $_cc --version 2>&1 | grep -q '^GNU assembler'; then
3555         true # no-op to avoid reading stdin in following checks
3556     elif $_cc -v 2>&1 | grep -q '^gcc.*LLVM'; then
3557         _type=llvm_gcc
3558         gcc_extra_ver=$(expr "$($_cc --version 2>/dev/null | head -n1)" : '.*\((.*)\)')
3559         _ident="llvm-gcc $($_cc -dumpversion 2>/dev/null) $gcc_extra_ver"
3560         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
3561         _cflags_speed='-O3'
3562         _cflags_size='-Os'
3563     elif $_cc -v 2>&1 | grep -qi ^gcc; then
3564         _type=gcc
3565         gcc_version=$($_cc --version | head -n1)
3566         gcc_basever=$($_cc -dumpversion)
3567         gcc_pkg_ver=$(expr "$gcc_version" : '[^ ]* \(([^)]*)\)')
3568         gcc_ext_ver=$(expr "$gcc_version" : ".*$gcc_pkg_ver $gcc_basever \\(.*\\)")
3569         _ident=$(cleanws "gcc $gcc_basever $gcc_pkg_ver $gcc_ext_ver")
3570         case $gcc_basever in
3571             2*) _depflags='-MMD -MF $(@:.o=.d) -MT $@' ;;
3572         esac
3573         if [ "$first" = true ]; then
3574             case $gcc_basever in
3575                 4.2*)
3576                 warn "gcc 4.2 is outdated and may miscompile FFmpeg. Please use a newer compiler." ;;
3577             esac
3578         fi
3579         _cflags_speed='-O3'
3580         _cflags_size='-Os'
3581     elif $_cc --version 2>/dev/null | grep -q ^icc; then
3582         _type=icc
3583         _ident=$($_cc --version | head -n1)
3584         _depflags='-MMD'
3585         _cflags_speed='-O3'
3586         _cflags_size='-Os'
3587         _cflags_noopt='-O1'
3588         _flags_filter=icc_flags
3589     elif $_cc -v 2>&1 | grep -q xlc; then
3590         _type=xlc
3591         _ident=$($_cc -qversion 2>/dev/null | head -n1)
3592         _cflags_speed='-O5'
3593         _cflags_size='-O5 -qcompact'
3594     elif $_cc -V 2>/dev/null | grep -q Compaq; then
3595         _type=ccc
3596         _ident=$($_cc -V | head -n1 | cut -d' ' -f1-3)
3597         _DEPFLAGS='-M'
3598         _cflags_speed='-fast'
3599         _cflags_size='-O1'
3600         _flags_filter=ccc_flags
3601     elif $_cc --vsn 2>/dev/null | grep -Eq "ARM (C/C\+\+ )?Compiler"; then
3602         test -d "$sysroot" || die "No valid sysroot specified."
3603         _type=armcc
3604         _ident=$($_cc --vsn | grep -i build | head -n1 | sed 's/.*: //')
3605         armcc_conf="$PWD/armcc.conf"
3606         $_cc --arm_linux_configure                 \
3607              --arm_linux_config_file="$armcc_conf" \
3608              --configure_sysroot="$sysroot"        \
3609              --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
3610              die "Error creating armcc configuration file."
3611         $_cc --vsn | grep -q RVCT && armcc_opt=rvct || armcc_opt=armcc
3612         _flags="--arm_linux_config_file=$armcc_conf --translate_gcc"
3613         as_default="${cross_prefix}gcc"
3614         _depflags='-MMD'
3615         _cflags_speed='-O3'
3616         _cflags_size='-Os'
3617     elif $_cc -version 2>/dev/null | grep -Eq 'TMS470|TI ARM'; then
3618         _type=tms470
3619         _ident=$($_cc -version | head -n1 | tr -s ' ')
3620         _flags='--gcc --abi=eabi -me'
3621         _cc_e='-ppl -fe=$@'
3622         _cc_o='-fe=$@'
3623         _depflags='-ppa -ppd=$(@:.o=.d)'
3624         _cflags_speed='-O3 -mf=5'
3625         _cflags_size='-O3 -mf=2'
3626         _flags_filter=tms470_flags
3627     elif $_cc -v 2>&1 | grep -q clang; then
3628         _type=clang
3629         _ident=$($_cc --version 2>/dev/null | head -n1)
3630         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
3631         _cflags_speed='-O3'
3632         _cflags_size='-Os'
3633     elif $_cc -V 2>&1 | grep -q Sun; then
3634         _type=suncc
3635         _ident=$($_cc -V 2>&1 | head -n1 | cut -d' ' -f 2-)
3636         _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "1s,^.*: ,$@: ," -e "\$$!s,\$$, \\\," -e "1!s,^.*: , ," > $(@:.o=.d)'
3637         _DEPFLAGS='-xM1 -xc99'
3638         _ldflags='-std=c99'
3639         _cflags_speed='-O5'
3640         _cflags_size='-O5 -xspace'
3641         _flags_filter=suncc_flags
3642     elif $_cc -v 2>&1 | grep -q 'PathScale\|Path64'; then
3643         _type=pathscale
3644         _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
3645         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
3646         _cflags_speed='-O2'
3647         _cflags_size='-Os'
3648         _flags_filter='filter_out -Wdisabled-optimization'
3649     elif $_cc -v 2>&1 | grep -q Open64; then
3650         _type=open64
3651         _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
3652         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
3653         _cflags_speed='-O2'
3654         _cflags_size='-Os'
3655         _flags_filter='filter_out -Wdisabled-optimization|-Wtype-limits|-fno-signed-zeros'
3656     elif $_cc -V 2>&1 | grep -q Portland; then
3657         _type=pgi
3658         _ident="PGI $($_cc -V 2>&1 | awk '/^pgcc/ { print $2; exit }')"
3659         opt_common='-alias=ansi -Mdse -Mlre -Mpre'
3660         _cflags_speed="-O3 -Mautoinline -Munroll=c:4 $opt_common"
3661         _cflags_size="-O2 -Munroll=c:1 $opt_common"
3662         _cflags_noopt="-O"
3663         _flags_filter=pgi_flags
3664     elif $_cc 2>&1 | grep -q 'Microsoft.*ARM.*Assembler'; then
3665         _type=armasm
3666         _ident=$($_cc | head -n1)
3667         # 4509: "This form of conditional instruction is deprecated"
3668         _flags="-nologo -ignore 4509"
3669         _flags_filter=armasm_flags
3670     elif $_cc 2>&1 | grep -q Intel; then
3671         _type=icl
3672         _ident=$($_cc 2>&1 | head -n1)
3673         _depflags='-QMMD -QMF$(@:.o=.d) -QMT$@'
3674         # Not only is O3 broken on 13.x+ but it is slower on all previous
3675         # versions (tested) as well.
3676         _cflags_speed="-O2"
3677         _cflags_size="-O1 -Oi" # -O1 without -Oi miscompiles stuff
3678         if $_cc 2>&1 | grep -q Linker; then
3679             _ld_o='-out:$@'
3680         else
3681             _ld_o='-Fe$@'
3682         fi
3683         _cc_o='-Fo$@'
3684         _cc_e='-P'
3685         _flags_filter=icl_flags
3686         _ld_lib='lib%.a'
3687         _ld_path='-libpath:'
3688         # -Qdiag-error to make icl error when seeing certain unknown arguments
3689         _flags='-nologo -Qdiag-error:4044,10157'
3690         # -Qvec- -Qsimd- to prevent miscompilation, -GS, fp:precise for consistency
3691         # with MSVC which enables it by default.
3692         _cflags='-D_USE_MATH_DEFINES -Qms0 -Qvec- -Qsimd- -GS -fp:precise'
3693         disable stripping
3694     elif $_cc -nologo- 2>&1 | grep -q Microsoft; then
3695         _type=msvc
3696         _ident=$($_cc 2>&1 | head -n1)
3697         _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< 2>&1 | awk '\''/including/ { sub(/^.*file: */, ""); gsub(/\\/, "/"); if (!match($$0, / /)) print "$@:", $$0 }'\'' > $(@:.o=.d)'
3698         _DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -showIncludes -Zs'
3699         _cflags_speed="-O2"
3700         _cflags_size="-O1"
3701         if $_cc -nologo- 2>&1 | grep -q Linker; then
3702             _ld_o='-out:$@'
3703         else
3704             _ld_o='-Fe$@'
3705         fi
3706         _cc_o='-Fo$@'
3707         _cc_e='-P -Fi$@'
3708         _flags_filter=msvc_flags
3709         _ld_lib='lib%.a'
3710         _ld_path='-libpath:'
3711         _flags='-nologo'
3712         _cflags='-D_USE_MATH_DEFINES -D_CRT_SECURE_NO_WARNINGS'
3713         disable stripping
3714     elif $_cc --version 2>/dev/null | grep -q ^cparser; then
3715         _type=cparser
3716         _ident=$($_cc --version | head -n1)
3717         _depflags='-MMD'
3718         _cflags_speed='-O4'
3719         _cflags_size='-O2'
3720         _flags_filter=cparser_flags
3721     fi
3722
3723     eval ${pfx}_type=\$_type
3724     eval ${pfx}_ident=\$_ident
3725 }
3726
3727 set_ccvars(){
3728     eval ${1}_C=\${_cc_c-\${${1}_C}}
3729     eval ${1}_E=\${_cc_e-\${${1}_E}}
3730     eval ${1}_O=\${_cc_o-\${${1}_O}}
3731
3732     if [ -n "$_depflags" ]; then
3733         eval ${1}_DEPFLAGS=\$_depflags
3734     else
3735         eval ${1}DEP=\${_DEPCMD:-\$DEPCMD}
3736         eval ${1}DEP_FLAGS=\${_DEPFLAGS:-\$DEPFLAGS}
3737         eval DEP${1}FLAGS=\$_flags
3738     fi
3739 }
3740
3741 probe_cc cc "$cc" "true"
3742 cflags_filter=$_flags_filter
3743 cflags_speed=$_cflags_speed
3744 cflags_size=$_cflags_size
3745 cflags_noopt=$_cflags_noopt
3746 add_cflags $_flags $_cflags
3747 cc_ldflags=$_ldflags
3748 set_ccvars CC
3749
3750 probe_cc hostcc "$host_cc"
3751 host_cflags_filter=$_flags_filter
3752 add_host_cflags  $_flags $_cflags
3753 set_ccvars HOSTCC
3754
3755 test -n "$cc_type" && enable $cc_type ||
3756     warn "Unknown C compiler $cc, unable to select optimal CFLAGS"
3757
3758 : ${as_default:=$cc}
3759 : ${dep_cc_default:=$cc}
3760 : ${ld_default:=$cc}
3761 : ${host_ld_default:=$host_cc}
3762 set_default ar as dep_cc ld host_ld windres
3763
3764 probe_cc as "$as"
3765 asflags_filter=$_flags_filter
3766 add_asflags $_flags $_cflags
3767 set_ccvars AS
3768
3769 probe_cc ld "$ld"
3770 ldflags_filter=$_flags_filter
3771 add_ldflags $_flags $_ldflags
3772 test "$cc_type" != "$ld_type" && add_ldflags $cc_ldflags
3773 LD_O=${_ld_o-$LD_O}
3774 LD_LIB=${_ld_lib-$LD_LIB}
3775 LD_PATH=${_ld_path-$LD_PATH}
3776
3777 probe_cc hostld "$host_ld"
3778 host_ldflags_filter=$_flags_filter
3779 add_host_ldflags $_flags $_ldflags
3780 HOSTLD_O=${_ld_o-$HOSTLD_O}
3781
3782 if [ -z "$CC_DEPFLAGS" ] && [ "$dep_cc" != "$cc" ]; then
3783     probe_cc depcc "$dep_cc"
3784     CCDEP=${_DEPCMD:-$DEPCMD}
3785     CCDEP_FLAGS=${_DEPFLAGS:=$DEPFLAGS}
3786     DEPCCFLAGS=$_flags
3787 fi
3788
3789 if $ar 2>&1 | grep -q Microsoft; then
3790     arflags="-nologo"
3791     ar_o='-out:$@'
3792 elif $ar 2>&1 | grep -q 'Texas Instruments'; then
3793     arflags="rq"
3794     ar_o='$@'
3795 elif $ar 2>&1 | grep -q 'Usage: ar.*-X.*any'; then
3796     arflags='-Xany -r -c'
3797     ar_o='$@'
3798 elif $ar 2>&1 | grep -q "\[D\] "; then
3799     arflags="rcD"
3800     ar_o='$@'
3801 else
3802     arflags="rc"
3803     ar_o='$@'
3804 fi
3805
3806 add_cflags $extra_cflags
3807 add_cxxflags $extra_cxxflags
3808 add_asflags $extra_cflags
3809
3810 if test -n "$sysroot"; then
3811     case "$cc_type" in
3812         gcc|llvm_gcc|clang)
3813             add_cppflags --sysroot="$sysroot"
3814             add_ldflags --sysroot="$sysroot"
3815 # On Darwin --sysroot may be ignored, -isysroot always affects headers and linking
3816             add_cppflags -isysroot "$sysroot"
3817             add_ldflags -isysroot "$sysroot"
3818         ;;
3819         tms470)
3820             add_cppflags -I"$sysinclude"
3821             add_ldflags  --sysroot="$sysroot"
3822         ;;
3823     esac
3824 fi
3825
3826 if test "$cpu" = host; then
3827     enabled cross_compile &&
3828         die "--cpu=host makes no sense when cross-compiling."
3829
3830     case "$cc_type" in
3831         gcc|llvm_gcc)
3832             check_native(){
3833                 $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
3834                 sed -n "/cc1.*$1=/{
3835                             s/.*$1=\\([^ ]*\\).*/\\1/
3836                             p
3837                             q
3838                         }" $TMPE
3839             }
3840             cpu=$(check_native -march || check_native -mcpu)
3841         ;;
3842     esac
3843
3844     test "${cpu:-host}" = host &&
3845         die "--cpu=host not supported with compiler $cc"
3846 fi
3847
3848 # Deal with common $arch aliases
3849 case "$arch" in
3850     aarch64|arm64)
3851         arch="aarch64"
3852     ;;
3853     arm*|iPad*|iPhone*)
3854         arch="arm"
3855     ;;
3856     mips*|IP*)
3857         arch="mips"
3858     ;;
3859     parisc*|hppa*)
3860         arch="parisc"
3861     ;;
3862     "Power Macintosh"|ppc*|powerpc*)
3863         arch="ppc"
3864     ;;
3865     s390|s390x)
3866         arch="s390"
3867     ;;
3868     sh4|sh)
3869         arch="sh4"
3870     ;;
3871     sun4u|sparc*)
3872         arch="sparc"
3873     ;;
3874     tilegx|tile-gx)
3875         arch="tilegx"
3876     ;;
3877     i[3-6]86*|i86pc|BePC|x86pc|x86_64|x86_32|amd64)
3878         arch="x86"
3879     ;;
3880 esac
3881
3882 is_in $arch $ARCH_LIST || warn "unknown architecture $arch"
3883 enable $arch
3884
3885 # Add processor-specific flags
3886 if enabled aarch64; then
3887
3888     case $cpu in
3889         armv*)
3890             cpuflags="-march=$cpu"
3891         ;;
3892         *)
3893             cpuflags="-mcpu=$cpu"
3894         ;;
3895     esac
3896
3897 elif enabled alpha; then
3898
3899     cpuflags="-mcpu=$cpu"
3900
3901 elif enabled arm; then
3902
3903     check_arm_arch() {
3904         check_cpp_condition stddef.h \
3905             "defined __ARM_ARCH_${1}__ || defined __TARGET_ARCH_${2:-$1}" \
3906             $cpuflags
3907     }
3908
3909     probe_arm_arch() {
3910         if   check_arm_arch 4;        then echo armv4;
3911         elif check_arm_arch 4T;       then echo armv4t;
3912         elif check_arm_arch 5;        then echo armv5;
3913         elif check_arm_arch 5E;       then echo armv5e;
3914         elif check_arm_arch 5T;       then echo armv5t;
3915         elif check_arm_arch 5TE;      then echo armv5te;
3916         elif check_arm_arch 5TEJ;     then echo armv5te;
3917         elif check_arm_arch 6;        then echo armv6;
3918         elif check_arm_arch 6J;       then echo armv6j;
3919         elif check_arm_arch 6K;       then echo armv6k;
3920         elif check_arm_arch 6Z;       then echo armv6z;
3921         elif check_arm_arch 6ZK;      then echo armv6zk;
3922         elif check_arm_arch 6T2;      then echo armv6t2;
3923         elif check_arm_arch 7;        then echo armv7;
3924         elif check_arm_arch 7A  7_A;  then echo armv7-a;
3925         elif check_arm_arch 7S;       then echo armv7-a;
3926         elif check_arm_arch 7R  7_R;  then echo armv7-r;
3927         elif check_arm_arch 7M  7_M;  then echo armv7-m;
3928         elif check_arm_arch 7EM 7E_M; then echo armv7-m;
3929         elif check_arm_arch 8A  8_A;  then echo armv8-a;
3930         fi
3931     }
3932
3933     [ "$cpu" = generic ] && cpu=$(probe_arm_arch)
3934
3935     case $cpu in
3936         armv*)
3937             cpuflags="-march=$cpu"
3938             subarch=$(echo $cpu | sed 's/[^a-z0-9]//g')
3939         ;;
3940         *)
3941             cpuflags="-mcpu=$cpu"
3942             case $cpu in
3943                 cortex-a*)                               subarch=armv7a  ;;
3944                 cortex-r*)                               subarch=armv7r  ;;
3945                 cortex-m*)                 enable thumb; subarch=armv7m  ;;
3946                 arm11*)                                  subarch=armv6   ;;
3947                 arm[79]*e*|arm9[24]6*|arm96*|arm102[26]) subarch=armv5te ;;
3948                 armv4*|arm7*|arm9[24]*)                  subarch=armv4   ;;
3949                 *)                             subarch=$(probe_arm_arch) ;;
3950             esac
3951         ;;
3952     esac
3953
3954     case "$subarch" in
3955         armv5t*)    enable fast_clz                ;;
3956         armv[6-8]*)
3957             enable fast_clz
3958             disabled fast_unaligned || enable fast_unaligned
3959             ;;
3960     esac
3961
3962 elif enabled avr32; then
3963
3964     case $cpu in
3965         ap7[02]0[0-2])
3966             subarch="avr32_ap"
3967             cpuflags="-mpart=$cpu"
3968         ;;
3969         ap)
3970             subarch="avr32_ap"
3971             cpuflags="-march=$cpu"
3972         ;;
3973         uc3[ab]*)
3974             subarch="avr32_uc"
3975             cpuflags="-mcpu=$cpu"
3976         ;;
3977         uc)
3978             subarch="avr32_uc"
3979             cpuflags="-march=$cpu"
3980         ;;
3981     esac
3982
3983 elif enabled bfin; then
3984
3985     cpuflags="-mcpu=$cpu"
3986
3987 elif enabled mips; then
3988
3989     cpuflags="-march=$cpu"
3990
3991     case $cpu in
3992         24kc)
3993             disable mips32r5
3994             disable mips64r6
3995             disable mipsfpu
3996             disable mipsdspr1
3997             disable mipsdspr2
3998             disable msa
3999         ;;
4000         24kf*)
4001             disable mips32r5
4002             disable mips64r6
4003             disable mipsdspr1
4004             disable mipsdspr2
4005             disable msa
4006         ;;
4007         24kec|34kc|1004kc)
4008             disable mips32r5
4009             disable mips64r6
4010             disable mipsfpu
4011             disable mipsdspr2
4012             disable msa
4013         ;;
4014         24kef*|34kf*|1004kf*)
4015             disable mips32r5
4016             disable mips64r6
4017             disable mipsdspr2
4018             disable msa
4019         ;;
4020         74kc)
4021             disable mips32r5
4022             disable mips64r6
4023             disable mipsfpu
4024             disable msa
4025         ;;
4026         74kf)
4027             disable mips32r5
4028             disable mips64r6
4029             disable msa
4030         ;;
4031         p5600)
4032             disable mips64r6
4033             disable mipsdspr1
4034             disable mipsdspr2
4035
4036             check_cflags "-mtune=p5600"
4037         ;;
4038         i6400)
4039             disable mips32r5
4040             disable mipsdspr1
4041             disable mipsdspr2
4042             disable mipsfpu
4043
4044             check_cflags "-mtune=i6400 -mabi=64"
4045             check_ldflags "-mabi=64"
4046         ;;
4047         loongson*)
4048             disable mipsfpu
4049             disable mips32r2
4050             disable mips32r5
4051             disable mips64r6
4052             disable mipsdspr1
4053             disable mipsdspr2
4054             disable msa
4055             enable local_aligned_8 local_aligned_16 local_aligned_32
4056             enable simd_align_16
4057             enable fast_64bit
4058             enable fast_clz
4059             enable fast_cmov
4060             enable fast_unaligned
4061             disable aligned_stack
4062             case $cpu in
4063                 loongson3*)
4064                     cpuflags="-march=loongson3a -mhard-float -fno-expensive-optimizations"
4065                 ;;
4066                 loongson2e)
4067                     cpuflags="-march=loongson2e -mhard-float -fno-expensive-optimizations"
4068                 ;;
4069                 loongson2f)
4070                     cpuflags="-march=loongson2f -mhard-float -fno-expensive-optimizations"
4071                 ;;
4072             esac
4073         ;;
4074         generic)
4075             disable mips32r5
4076             disable mips64r6
4077             disable msa
4078         ;;
4079     esac
4080
4081 elif enabled ppc; then
4082
4083     disable ldbrx
4084
4085     case $(tolower $cpu) in
4086         601|ppc601|powerpc601)
4087             cpuflags="-mcpu=601"
4088             disable altivec
4089         ;;
4090         603*|ppc603*|powerpc603*)
4091             cpuflags="-mcpu=603"
4092             disable altivec
4093         ;;
4094         604*|ppc604*|powerpc604*)
4095             cpuflags="-mcpu=604"
4096             disable altivec
4097         ;;
4098         g3|75*|ppc75*|powerpc75*)
4099             cpuflags="-mcpu=750"
4100             disable altivec
4101         ;;
4102         g4|745*|ppc745*|powerpc745*)
4103             cpuflags="-mcpu=7450"
4104             disable vsx
4105         ;;
4106         74*|ppc74*|powerpc74*)
4107             cpuflags="-mcpu=7400"
4108             disable vsx
4109         ;;
4110         g5|970|ppc970|powerpc970)
4111             cpuflags="-mcpu=970"
4112             disable vsx
4113         ;;
4114         power[3-6]*)
4115             cpuflags="-mcpu=$cpu"
4116             disable vsx
4117         ;;
4118         power[7-8]*)
4119             cpuflags="-mcpu=$cpu"
4120         ;;
4121         cell)
4122             cpuflags="-mcpu=cell"
4123             enable ldbrx
4124             disable vsx
4125         ;;
4126         e500mc)
4127             cpuflags="-mcpu=e500mc"
4128             disable altivec
4129         ;;
4130         e500v2)
4131             cpuflags="-mcpu=8548 -mhard-float -mfloat-gprs=double"
4132             disable altivec
4133             disable dcbzl
4134         ;;
4135         e500)
4136             cpuflags="-mcpu=8540 -mhard-float"
4137             disable altivec
4138             disable dcbzl
4139         ;;
4140     esac
4141
4142 elif enabled sparc; then
4143
4144     case $cpu in
4145         cypress|f93[04]|tsc701|sparcl*|supersparc|hypersparc|niagara|v[789])
4146             cpuflags="-mcpu=$cpu"
4147         ;;
4148         ultrasparc*|niagara[234])
4149             cpuflags="-mcpu=$cpu"
4150         ;;
4151     esac
4152
4153 elif enabled x86; then
4154
4155     case $cpu in
4156         i[345]86|pentium)
4157             cpuflags="-march=$cpu"
4158             disable i686
4159             disable mmx
4160         ;;
4161         # targets that do NOT support nopl and conditional mov (cmov)
4162         pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
4163             cpuflags="-march=$cpu"
4164             disable i686
4165         ;;
4166         # targets that do support nopl and conditional mov (cmov)
4167         i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64*|k8*|opteron*|athlon-fx\
4168         |core*|atom|bonnell|nehalem|westmere|silvermont|sandybridge|ivybridge|haswell|broadwell|amdfam10|barcelona|b[dt]ver*)
4169             cpuflags="-march=$cpu"
4170             enable i686
4171             enable fast_cmov
4172         ;;
4173         # targets that do support conditional mov but on which it's slow
4174         pentium4|pentium4m|prescott|nocona)
4175             cpuflags="-march=$cpu"
4176             enable i686
4177             disable fast_cmov
4178         ;;
4179     esac
4180
4181 fi
4182
4183 if [ "$cpu" != generic ]; then
4184     add_cflags  $cpuflags
4185     add_asflags $cpuflags
4186 fi
4187
4188 # compiler sanity check
4189 check_exec <<EOF
4190 int main(void){ return 0; }
4191 EOF
4192 if test "$?" != 0; then
4193     echo "$cc is unable to create an executable file."
4194     if test -z "$cross_prefix" && ! enabled cross_compile ; then
4195         echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
4196         echo "Only do this if you know what cross compiling means."
4197     fi
4198     die "C compiler test failed."
4199 fi
4200
4201 add_cppflags -D_ISOC99_SOURCE
4202 add_cxxflags -D__STDC_CONSTANT_MACROS
4203 check_cflags -std=c99
4204 check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
4205 #include <stdlib.h>
4206 EOF
4207 check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
4208 #include <stdlib.h>
4209 EOF
4210
4211 add_host_cppflags -D_ISOC99_SOURCE
4212 check_host_cflags -std=c99
4213 check_host_cflags -Wall
4214 check_host_cflags -O3
4215
4216 check_64bit(){
4217     arch32=$1
4218     arch64=$2
4219     expr=$3
4220     check_code cc "" "int test[2*($expr) - 1]" &&
4221         subarch=$arch64 || subarch=$arch32
4222 }
4223
4224 case "$arch" in
4225     aarch64|alpha|ia64)
4226         spic=$shared
4227     ;;
4228     mips)
4229         check_64bit mips mips64 '_MIPS_SIM > 1'
4230         spic=$shared
4231     ;;
4232     parisc)
4233         check_64bit parisc parisc64 'sizeof(void *) > 4'
4234         spic=$shared
4235     ;;
4236     ppc)
4237         check_64bit ppc ppc64 'sizeof(void *) > 4'
4238         spic=$shared
4239     ;;
4240     s390)
4241         check_64bit s390 s390x 'sizeof(void *) > 4'
4242         spic=$shared
4243     ;;
4244     sparc)
4245         check_64bit sparc sparc64 'sizeof(void *) > 4'
4246         spic=$shared
4247     ;;
4248     x86)
4249         check_64bit x86_32 x86_64 'sizeof(void *) > 4'
4250         # Treat x32 as x64 for now. Note it also needs spic=$shared
4251         test "$subarch" = "x86_32" && check_cpp_condition stddef.h 'defined(__x86_64__)' &&
4252             subarch=x86_64
4253         if test "$subarch" = "x86_64"; then
4254             spic=$shared
4255         fi
4256     ;;
4257     ppc)
4258         check_cc <<EOF && subarch="ppc64"
4259         int test[(int)sizeof(char*) - 7];
4260 EOF
4261     ;;
4262 esac
4263
4264 enable $subarch
4265 enabled spic && enable_weak pic
4266
4267 # OS specific
4268 case $target_os in
4269     aix)
4270         SHFLAGS=-shared
4271         add_cppflags '-I\$(SRC_PATH)/compat/aix'
4272         enabled shared && add_ldflags -Wl,-brtl
4273         ;;
4274     android)
4275         disable symver
4276         enable section_data_rel_ro
4277         SLIB_INSTALL_NAME='$(SLIBNAME)'
4278         SLIB_INSTALL_LINKS=
4279         # soname not set on purpose
4280         SHFLAGS=-shared
4281         ;;
4282     haiku)
4283         prefix_default="/boot/common"
4284         network_extralibs="-lnetwork"
4285         host_libs=
4286         ;;
4287     sunos)
4288         SHFLAGS='-shared -Wl,-h,$$(@F)'
4289         enabled x86 && SHFLAGS="-mimpure-text $SHFLAGS"
4290         network_extralibs="-lsocket -lnsl"
4291         add_cppflags -D__EXTENSIONS__
4292         # When using suncc to build, the Solaris linker will mark
4293         # an executable with each instruction set encountered by
4294         # the Solaris assembler.  As our libraries contain their own
4295         # guards for processor-specific code, instead suppress
4296         # generation of the HWCAPS ELF section on Solaris x86 only.
4297         enabled_all suncc x86 &&
4298             echo "hwcap_1 = OVERRIDE;" > mapfile &&
4299             add_ldflags -Wl,-M,mapfile
4300         nm_default='nm -P -g'
4301         ;;
4302     netbsd)
4303         disable symver
4304         oss_indev_extralibs="-lossaudio"
4305         oss_outdev_extralibs="-lossaudio"
4306         enabled gcc || check_ldflags -Wl,-zmuldefs
4307         ;;
4308     openbsd|bitrig)
4309         disable symver
4310         SHFLAGS='-shared'
4311         SLIB_INSTALL_NAME='$(SLIBNAME).$(LIBMAJOR).$(LIBMINOR)'
4312         SLIB_INSTALL_LINKS=
4313         oss_indev_extralibs="-lossaudio"
4314         oss_outdev_extralibs="-lossaudio"
4315         ;;
4316     dragonfly)
4317         disable symver
4318         ;;
4319     freebsd)
4320         ;;
4321     bsd/os)
4322         add_extralibs -lpoll -lgnugetopt
4323         strip="strip -d"
4324         ;;
4325     darwin)
4326         enabled ppc && add_asflags -force_cpusubtype_ALL
4327         SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR)'
4328         enabled x86_32 && append SHFLAGS -Wl,-read_only_relocs,suppress
4329         strip="${strip} -x"
4330         add_ldflags -Wl,-dynamic,-search_paths_first
4331         SLIBSUF=".dylib"
4332         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
4333         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
4334         objformat="macho"
4335         enabled x86_64 && objformat="macho64"
4336         enabled_any pic shared x86_64 ||
4337             { check_cflags -mdynamic-no-pic && add_asflags -mdynamic-no-pic; }
4338         ;;
4339     mingw32*)
4340         if test $target_os = "mingw32ce"; then
4341             disable network
4342         else
4343             target_os=mingw32
4344         fi
4345         decklink_outdev_extralibs="$decklink_outdev_extralibs -lole32 -loleaut32"
4346         decklink_indev_extralibs="$decklink_indev_extralibs -lole32 -loleaut32"
4347         LIBTARGET=i386
4348         if enabled x86_64; then
4349             LIBTARGET="i386:x86-64"
4350         elif enabled arm; then
4351             LIBTARGET=arm-wince
4352         fi
4353         enabled shared && ! enabled small && check_cmd $windres --version && enable gnu_windres
4354         check_ldflags -Wl,--nxcompat
4355         check_ldflags -Wl,--dynamicbase
4356         enabled x86_32 && check_ldflags -Wl,--large-address-aware
4357         shlibdir_default="$bindir_default"
4358         SLIBPREF=""
4359         SLIBSUF=".dll"
4360         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
4361         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
4362         dlltool="${cross_prefix}dlltool"
4363         if check_cmd lib.exe -list; then
4364             SLIB_EXTRA_CMD=-'sed -e "s/ @[^ ]*//" $$(@:$(SLIBSUF)=.orig.def) > $$(@:$(SLIBSUF)=.def); lib.exe /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib)'
4365             if enabled x86_64; then
4366                 LIBTARGET=x64
4367             fi
4368         elif check_cmd $dlltool --version; then
4369             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)'
4370         fi
4371         SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
4372         SLIB_INSTALL_LINKS=
4373         SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
4374         SLIB_INSTALL_EXTRA_LIB='lib$(SLIBNAME:$(SLIBSUF)=.dll.a) $(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
4375         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'
4376         objformat="win32"
4377         ranlib=:
4378         enable dos_paths
4379         ;;
4380     win32|win64)
4381         disable symver
4382         if enabled shared; then
4383             # Link to the import library instead of the normal static library
4384             # for shared libs.
4385             LD_LIB='%.lib'
4386             # Cannot build both shared and static libs with MSVC or icl.
4387             disable static
4388         fi
4389         enabled x86_32 && check_ldflags -LARGEADDRESSAWARE
4390         shlibdir_default="$bindir_default"
4391         SLIBPREF=""
4392         SLIBSUF=".dll"
4393         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
4394         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
4395         SLIB_CREATE_DEF_CMD='$(SRC_PATH)/compat/windows/makedef $(SUBDIR)lib$(NAME).ver $(OBJS) > $$(@:$(SLIBSUF)=.def)'
4396         SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
4397         SLIB_INSTALL_LINKS=
4398         SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
4399         SLIB_INSTALL_EXTRA_LIB='$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
4400         SHFLAGS='-dll -def:$$(@:$(SLIBSUF)=.def) -implib:$(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib)'
4401         objformat="win32"
4402         ranlib=:
4403         enable dos_paths
4404         ;;
4405     cygwin*)
4406         target_os=cygwin
4407         shlibdir_default="$bindir_default"
4408         SLIBPREF="cyg"
4409         SLIBSUF=".dll"
4410         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
4411         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
4412         SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
4413         SLIB_INSTALL_LINKS=
4414         SLIB_INSTALL_EXTRA_LIB='lib$(FULLNAME).dll.a'
4415         SHFLAGS='-shared -Wl,--out-implib,$(SUBDIR)lib$(FULLNAME).dll.a'
4416         objformat="win32"
4417         enable dos_paths
4418         enabled shared && ! enabled small && check_cmd $windres --version && enable gnu_windres
4419         ;;
4420     *-dos|freedos|opendos)
4421         network_extralibs="-lsocket"
4422         objformat="coff"
4423         enable dos_paths
4424         add_cppflags -U__STRICT_ANSI__
4425         ;;
4426     linux)
4427         enable dv1394
4428         enable section_data_rel_ro
4429         ;;
4430     irix*)
4431         target_os=irix
4432         ranlib="echo ignoring ranlib"
4433         ;;
4434     os/2*)
4435         strip="lxlite -CS"
4436         ln_s="cp -f"
4437         objformat="aout"
4438         add_cppflags -D_GNU_SOURCE
4439         add_ldflags -Zomf -Zbin-files -Zargs-wild -Zmap
4440         SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
4441         LIBSUF="_s.a"
4442         SLIBPREF=""
4443         SLIBSUF=".dll"
4444         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
4445         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
4446         SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
4447             echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
4448             echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
4449             echo EXPORTS >> $(SUBDIR)$(NAME).def; \
4450             emxexp $(OBJS) >> $(SUBDIR)$(NAME).def'
4451         SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
4452             emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
4453         SLIB_INSTALL_EXTRA_LIB='$(LIBPREF)$(NAME)_dll.a $(LIBPREF)$(NAME)_dll.lib'
4454         enable dos_paths
4455         enable_weak os2threads
4456         ;;
4457     gnu/kfreebsd)
4458         add_cppflags -D_BSD_SOURCE
4459         ;;
4460     gnu)
4461         ;;
4462     qnx)
4463         add_cppflags -D_QNX_SOURCE
4464         network_extralibs="-lsocket"
4465         ;;
4466     symbian)
4467         SLIBSUF=".dll"
4468         enable dos_paths
4469         add_cflags --include=$sysinclude/gcce/gcce.h -fvisibility=default
4470         add_cppflags -D__GCCE__ -D__SYMBIAN32__ -DSYMBIAN_OE_POSIX_SIGNALS
4471         add_ldflags -Wl,--target1-abs,--no-undefined \
4472                     -Wl,-Ttext,0x80000,-Tdata,0x1000000 -shared \
4473                     -Wl,--entry=_E32Startup -Wl,-u,_E32Startup
4474         add_extralibs -l:eexe.lib -l:usrt2_2.lib -l:dfpaeabi.dso \
4475                       -l:drtaeabi.dso -l:scppnwdl.dso -lsupc++ -lgcc \
4476                       -l:libc.dso -l:libm.dso -l:euser.dso -l:libcrt0.lib
4477         ;;
4478     osf1)
4479         add_cppflags -D_OSF_SOURCE -D_POSIX_PII -D_REENTRANT
4480         ;;
4481     minix)
4482         ;;
4483     plan9)
4484         add_cppflags -D_C99_SNPRINTF_EXTENSION  \
4485                      -D_REENTRANT_SOURCE        \
4486                      -D_RESEARCH_SOURCE         \
4487                      -DFD_SETSIZE=96            \
4488                      -DHAVE_SOCK_OPTS
4489         add_compat strtod.o strtod=avpriv_strtod
4490         network_extralibs='-lbsd'
4491         exeobjs=compat/plan9/main.o
4492         disable ffserver
4493         cp_f='cp'
4494         ;;
4495     none)
4496         ;;
4497     *)
4498         die "Unknown OS '$target_os'."
4499         ;;
4500 esac
4501
4502 # determine libc flavour
4503
4504 probe_libc(){
4505     pfx=$1
4506     pfx_no_=${pfx%_}
4507     # uclibc defines __GLIBC__, so it needs to be checked before glibc.
4508     if check_${pfx}cpp_condition features.h "defined __UCLIBC__"; then
4509         eval ${pfx}libc_type=uclibc
4510         add_${pfx}cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
4511     elif check_${pfx}cpp_condition features.h "defined __GLIBC__"; then
4512         eval ${pfx}libc_type=glibc
4513         add_${pfx}cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
4514     # MinGW headers can be installed on Cygwin, so check for newlib first.
4515     elif check_${pfx}cpp_condition newlib.h "defined _NEWLIB_VERSION"; then
4516         eval ${pfx}libc_type=newlib
4517         add_${pfx}cppflags -U__STRICT_ANSI__
4518     # MinGW64 is backwards compatible with MinGW32, so check for it first.
4519     elif check_${pfx}cpp_condition _mingw.h "defined __MINGW64_VERSION_MAJOR"; then
4520         eval ${pfx}libc_type=mingw64
4521         if check_${pfx}cpp_condition _mingw.h "__MINGW64_VERSION_MAJOR < 3"; then
4522             add_compat msvcrt/snprintf.o
4523             add_cflags "-include $source_path/compat/msvcrt/snprintf.h"
4524         fi
4525         add_${pfx}cppflags -U__STRICT_ANSI__ -D__USE_MINGW_ANSI_STDIO=1
4526         eval test \$${pfx_no_}cc_type = "gcc" &&
4527             add_${pfx}cppflags -D__printf__=__gnu_printf__
4528     elif check_${pfx}cpp_condition _mingw.h "defined __MINGW_VERSION"  ||
4529          check_${pfx}cpp_condition _mingw.h "defined __MINGW32_VERSION"; then
4530         eval ${pfx}libc_type=mingw32
4531         check_${pfx}cpp_condition _mingw.h "__MINGW32_MAJOR_VERSION > 3 || \
4532             (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
4533             die "ERROR: MinGW32 runtime version must be >= 3.15."
4534         add_${pfx}cppflags -U__STRICT_ANSI__ -D__USE_MINGW_ANSI_STDIO=1
4535         eval test \$${pfx_no_}cc_type = "gcc" &&
4536             add_${pfx}cppflags -D__printf__=__gnu_printf__
4537     elif check_${pfx}cpp_condition crtversion.h "defined _VC_CRT_MAJOR_VERSION"; then
4538         eval ${pfx}libc_type=msvcrt
4539         if check_${pfx}cpp_condition crtversion.h "_VC_CRT_MAJOR_VERSION < 14"; then
4540             if [ "$pfx" = host_ ]; then
4541                 add_host_cppflags -Dsnprintf=_snprintf
4542             else
4543                 add_compat strtod.o strtod=avpriv_strtod
4544                 add_compat msvcrt/snprintf.o snprintf=avpriv_snprintf   \
4545                                              _snprintf=avpriv_snprintf  \
4546                                              vsnprintf=avpriv_vsnprintf
4547             fi
4548         fi
4549         # The MSVC 2010 headers (Win 7.0 SDK) set _WIN32_WINNT to
4550         # 0x601 by default unless something else is set by the user.
4551         # This can easily lead to us detecting functions only present
4552         # in such new versions and producing binaries requiring windows 7.0.
4553         # Therefore explicitly set the default to XP unless the user has
4554         # set something else on the command line.
4555         # Don't do this if WINAPI_FAMILY is set and is set to a non-desktop
4556         # family. For these cases, configure is free to use any functions
4557         # found in the SDK headers by default. (Alternatively, we could force
4558         # _WIN32_WINNT to 0x0602 in that case.)
4559         check_${pfx}cpp_condition stdlib.h "defined(_WIN32_WINNT)" ||
4560             { check_${pfx}cpp <<EOF && add_${pfx}cppflags -D_WIN32_WINNT=0x0502; }
4561 #ifdef WINAPI_FAMILY
4562 #include <winapifamily.h>
4563 #if !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
4564 #error not desktop
4565 #endif
4566 #endif
4567 EOF
4568     elif check_${pfx}cpp_condition stddef.h "defined __KLIBC__"; then
4569         eval ${pfx}libc_type=klibc
4570     elif check_${pfx}cpp_condition sys/cdefs.h "defined __BIONIC__"; then
4571         eval ${pfx}libc_type=bionic
4572     elif check_${pfx}cpp_condition sys/brand.h "defined LABELED_BRAND_NAME"; then
4573         eval ${pfx}libc_type=solaris
4574         add_${pfx}cppflags -D__EXTENSIONS__ -D_XOPEN_SOURCE=600
4575     fi
4576     check_${pfx}cc <<EOF
4577 #include <time.h>
4578 void *v = localtime_r;
4579 EOF
4580 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
4581 #include <time.h>
4582 void *v = localtime_r;
4583 EOF
4584
4585 }
4586
4587 probe_libc
4588 test -n "$libc_type" && enable libc_$libc_type
4589 probe_libc host_
4590 test -n "$host_libc_type" && enable host_libc_$host_libc_type
4591
4592 case $libc_type in
4593     bionic)
4594         add_compat strtod.o strtod=avpriv_strtod
4595         ;;
4596 esac
4597
4598 # hacks for compiler/libc/os combinations
4599
4600 if enabled_all tms470 libc_glibc; then
4601     CPPFLAGS="-I${source_path}/compat/tms470 ${CPPFLAGS}"
4602     add_cppflags -D__USER_LABEL_PREFIX__=
4603     add_cppflags -D__builtin_memset=memset
4604     add_cppflags -D__gnuc_va_list=va_list -D_VA_LIST_DEFINED
4605     add_cflags   -pds=48    # incompatible redefinition of macro
4606 fi
4607
4608 if enabled_all ccc libc_glibc; then
4609     add_ldflags -Wl,-z,now  # calls to libots crash without this
4610 fi
4611
4612 check_compile_assert flt_lim "float.h limits.h" "DBL_MAX == (double)DBL_MAX" ||
4613     add_cppflags '-I\$(SRC_PATH)/compat/float'
4614
4615 esc(){
4616     echo "$*" | sed 's/%/%25/g;s/:/%3a/g'
4617 }
4618
4619 echo "config:$arch:$subarch:$cpu:$target_os:$(esc $cc_ident):$(esc $FFMPEG_CONFIGURATION)" >config.fate
4620
4621 check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable_weak pic
4622
4623 set_default libdir
4624 : ${shlibdir_default:="$libdir"}
4625 : ${pkgconfigdir_default:="$libdir/pkgconfig"}
4626
4627 set_default $PATHS_LIST
4628 set_default nm
4629
4630 # we need to build at least one lib type
4631 if ! enabled_any static shared; then
4632     cat <<EOF
4633 At least one library type must be built.
4634 Specify --enable-static to build the static libraries or --enable-shared to
4635 build the shared libraries as well. To only build the shared libraries specify
4636 --disable-static in addition to --enable-shared.
4637 EOF
4638     exit 1;
4639 fi
4640
4641 die_license_disabled() {
4642     enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
4643 }
4644
4645 die_license_disabled_gpl() {
4646     enabled $1 || { enabled $2 && die "$2 is incompatible with the gpl and --enable-$1 is not specified."; }
4647 }
4648
4649 die_license_disabled gpl frei0r
4650 die_license_disabled gpl libcdio
4651 die_license_disabled gpl libsmbclient
4652 die_license_disabled gpl libutvideo
4653 die_license_disabled gpl libvidstab
4654 die_license_disabled gpl libx264
4655 die_license_disabled gpl libx265
4656 die_license_disabled gpl libxavs
4657 die_license_disabled gpl libxvid
4658 die_license_disabled gpl libzvbi
4659 die_license_disabled gpl x11grab
4660
4661 die_license_disabled nonfree libaacplus
4662 die_license_disabled nonfree libfaac
4663 die_license_disabled nonfree nvenc
4664 enabled gpl && die_license_disabled_gpl nonfree libfdk_aac
4665 enabled gpl && die_license_disabled_gpl nonfree openssl
4666
4667 die_license_disabled version3 libopencore_amrnb
4668 die_license_disabled version3 libopencore_amrwb
4669 die_license_disabled version3 libsmbclient
4670 die_license_disabled version3 libvo_aacenc
4671 die_license_disabled version3 libvo_amrwbenc
4672
4673 enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
4674
4675 disabled optimizations || check_cflags -fomit-frame-pointer
4676
4677 enable_weak_pic() {
4678     disabled pic && return
4679     enable pic
4680     add_cppflags -DPIC
4681     case "$target_os" in
4682     mingw*|cygwin*)
4683         ;;
4684     *)
4685         add_cflags -fPIC
4686         ;;
4687     esac
4688     add_asflags  -fPIC
4689 }
4690
4691 enabled pic && enable_weak_pic
4692
4693 check_cc <<EOF || die "Symbol mangling check failed."
4694 int ff_extern;
4695 EOF
4696 sym=$($nm $TMPO | awk '/ff_extern/{ print substr($0, match($0, /[^ \t]*ff_extern/)) }')
4697 extern_prefix=${sym%%ff_extern*}
4698
4699 check_cc <<EOF && enable_weak inline_asm
4700 void foo(void) { __asm__ volatile ("" ::); }
4701 EOF
4702
4703 _restrict=
4704 for restrict_keyword in restrict __restrict__ __restrict; do
4705     check_cc <<EOF && _restrict=$restrict_keyword && break
4706 void foo(char * $restrict_keyword p);
4707 EOF
4708 done
4709
4710 check_cc <<EOF && enable pragma_deprecated
4711 void foo(void) { _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") }
4712 EOF
4713
4714 check_cc <<EOF && enable attribute_packed
4715 struct { int x; } __attribute__((packed)) x;
4716 EOF
4717
4718 check_cc <<EOF && enable attribute_may_alias
4719 union { int x; } __attribute__((may_alias)) x;
4720 EOF
4721
4722 check_cc <<EOF || die "endian test failed"
4723 unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
4724 EOF
4725 od -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
4726
4727 if ! enabled ppc64 || enabled bigendian; then
4728     disable vsx
4729 fi
4730
4731 check_gas() {
4732     log "check_gas using '$as' as AS"
4733     # :vararg is used on aarch64, arm and ppc altivec
4734     check_as <<EOF || return 1
4735 .macro m n, y:vararg=0
4736 \n: .int \y
4737 .endm
4738 m x
4739 EOF
4740     # .altmacro is only used in arm asm
4741     ! enabled arm || check_as <<EOF || return 1
4742 .altmacro
4743 EOF
4744     enable gnu_as
4745     return 0
4746 }
4747
4748 if enabled_any arm aarch64 || enabled_all ppc altivec && enabled asm; then
4749     nogas=:
4750     enabled_any arm aarch64 && nogas=die
4751     enabled_all ppc altivec && [ $target_os_default != aix ] && nogas=warn
4752     as_noop=-v
4753
4754     case $as_type in
4755         arm*) gaspp_as_type=armasm; as_noop=-h ;;
4756         gcc)  gaspp_as_type=gas ;;
4757         *)    gaspp_as_type=$as_type ;;
4758     esac
4759
4760     [ $target_os = "darwin" ] && gaspp_as_type="apple-$gaspp_as_type"
4761
4762     test "${as#*gas-preprocessor.pl}" != "$as" ||
4763     check_cmd gas-preprocessor.pl -arch $arch -as-type $gaspp_as_type -- ${as:=$cc} $as_noop &&
4764         gas="${gas:=gas-preprocessor.pl} -arch $arch -as-type $gaspp_as_type -- ${as:=$cc}"
4765
4766     if ! check_gas ; then
4767         as=${gas:=$as}
4768         check_gas || \
4769             $nogas "GNU assembler not found, install/update gas-preprocessor"
4770     fi
4771
4772     check_as <<EOF && enable as_func
4773 .func test
4774 .endfunc
4775 EOF
4776 fi
4777
4778 check_inline_asm inline_asm_labels '"1:\n"'
4779
4780 check_inline_asm inline_asm_nonlocal_labels '"Label:\n"'
4781
4782 if enabled aarch64; then
4783     enabled armv8 && check_insn armv8 'prfm   pldl1strm, [x0]'
4784     # internal assembler in clang 3.3 does not support this instruction
4785     enabled neon && check_insn neon 'ext   v0.8B, v0.8B, v1.8B, #1'
4786     enabled vfp  && check_insn vfp  'fmadd d0,    d0,    d1,    d2'
4787
4788     map 'enabled_any ${v}_external ${v}_inline || disable $v' $ARCH_EXT_LIST_ARM
4789
4790 elif enabled alpha; then
4791
4792     check_cflags -mieee
4793
4794 elif enabled arm; then
4795
4796     enabled msvc && check_cpp_condition stddef.h "defined _M_ARMT" && enable thumb
4797
4798     check_cpp_condition stddef.h "defined __thumb__" && check_cc <<EOF && enable_weak thumb
4799 float func(float a, float b){ return a+b; }
4800 EOF
4801
4802     enabled thumb && check_cflags -mthumb || check_cflags -marm
4803
4804     if     check_cpp_condition stddef.h "defined __ARM_PCS_VFP"; then
4805         enable vfp_args
4806     elif check_cpp_condition stddef.h "defined _M_ARM_FP && _M_ARM_FP >= 30"; then
4807         enable vfp_args
4808     elif ! check_cpp_condition stddef.h "defined __ARM_PCS || defined __SOFTFP__" && [ $target_os != darwin ]; then
4809         case "${cross_prefix:-$cc}" in
4810             *hardfloat*)         enable vfp_args;   fpabi=vfp ;;
4811             *) check_ld "cc" <<EOF && enable vfp_args && fpabi=vfp || fpabi=soft ;;
4812 __asm__ (".eabi_attribute 28, 1");
4813 int main(void) { return 0; }
4814 EOF
4815         esac
4816         warn "Compiler does not indicate floating-point ABI, guessing $fpabi."
4817     fi
4818
4819     enabled armv5te && check_insn armv5te 'qadd r0, r0, r0'
4820     enabled armv6   && check_insn armv6   'sadd16 r0, r0, r0'
4821     enabled armv6t2 && check_insn armv6t2 'movt r0, #0'
4822     enabled neon    && check_insn neon    'vadd.i16 q0, q0, q0'
4823     enabled vfp     && check_insn vfp     'fadds s0, s0, s0'
4824     enabled vfpv3   && check_insn vfpv3   'vmov.f32 s0, #1.0'
4825     enabled setend  && check_insn setend  'setend be'
4826
4827     [ $target_os = linux ] || [ $target_os = android ] ||
4828         map 'enabled_any ${v}_external ${v}_inline || disable $v' \
4829             $ARCH_EXT_LIST_ARM
4830
4831     check_inline_asm asm_mod_q '"add r0, %Q0, %R0" :: "r"((long long)0)'
4832
4833     check_as <<EOF && enable as_dn_directive
4834 ra .dn d0.i16
4835 .unreq ra
4836 EOF
4837
4838     # llvm's integrated assembler supports .object_arch from llvm 3.5
4839     [ "$objformat" = elf ] && check_as <<EOF && enable as_object_arch
4840 .object_arch armv4
4841 EOF
4842
4843     [ $target_os != win32 ] && enabled_all armv6t2 shared !pic && enable_weak_pic
4844
4845 elif enabled mips; then
4846
4847     enabled loongson2 && check_inline_asm loongson2 '"dmult.g $8, $9, $10"'
4848     enabled loongson3 && check_inline_asm loongson3 '"gsldxc1 $f0, 0($2, $3)"'
4849     enabled mmi && check_inline_asm mmi '"punpcklhw $f0, $f0, $f0"'
4850
4851     # Enable minimum ISA based on selected options
4852     if enabled mips64 && (enabled mipsdspr1 || enabled mipsdspr2); then
4853         add_cflags "-mips64r2"
4854         add_asflags "-mips64r2"
4855     elif enabled mips64 && enabled mipsfpu && disabled loongson2 && disabled loongson3; then
4856         add_cflags "-mips64"
4857         add_asflags "-mips64"
4858     elif enabled mipsdspr1 || enabled mipsdspr2; then
4859         add_cflags "-mips32r2 -mfp32"
4860         add_asflags "-mips32r2 -mfp32"
4861     elif enabled mips32r5 || enabled mips64r6; then
4862         check_cflags "-mfp64"
4863         check_ldflags "-mfp64"
4864     fi
4865
4866     enabled mips32r5  && check_cflags "-mips32r5 -msched-weight -mload-store-pairs -funroll-loops" &&
4867      check_ldflags "-mips32r5" &&
4868      check_inline_asm mips32r5  '"ulw $t0, ($t1)"'
4869     enabled mips64r6  && check_cflags "-mips64r6 -msched-weight -mload-store-pairs -funroll-loops" &&
4870      check_ldflags "-mips64r6" &&
4871      check_inline_asm mips64r6  '"aui $t0, $t1, 1"'
4872     enabled mipsdspr1 && add_cflags "-mdsp" && add_asflags "-mdsp" &&
4873      check_inline_asm mipsdspr1 '"addu.qb $t0, $t1, $t2"'
4874     enabled mipsdspr2 && add_cflags "-mdspr2" && add_asflags "-mdspr2" &&
4875      check_inline_asm mipsdspr2 '"absq_s.qb $t0, $t1"'
4876     enabled mipsfpu   && add_cflags "-mhard-float" && add_asfl