avformat, avcodec: log discard padding
[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   --enable-rpath           use rpath to allow installing libraries in paths
91                            not part of the dynamic linker search path
92                            use rpath when linking programs [USE WITH CARE]
93
94 Licensing options:
95   --enable-gpl             allow use of GPL code, the resulting libs
96                            and binaries will be under GPL [no]
97   --enable-version3        upgrade (L)GPL to version 3 [no]
98   --enable-nonfree         allow use of nonfree code, the resulting libs
99                            and binaries will be unredistributable [no]
100
101 Configuration options:
102   --disable-static         do not build static libraries [no]
103   --enable-shared          build shared libraries [no]
104   --enable-small           optimize for size instead of speed
105   --disable-runtime-cpudetect disable detecting cpu capabilities at runtime (smaller binary)
106   --enable-gray            enable full grayscale support (slower color)
107   --disable-swscale-alpha  disable alpha channel support in swscale
108   --disable-all            disable building components, libraries and programs
109   --enable-incompatible-libav-abi enable incompatible Libav fork ABI [no]
110   --enable-raise-major     increase major version numbers in sonames [no]
111
112 Program options:
113   --disable-programs       do not build command line programs
114   --disable-ffmpeg         disable ffmpeg build
115   --disable-ffplay         disable ffplay build
116   --disable-ffprobe        disable ffprobe build
117   --disable-ffserver       disable ffserver build
118
119 Documentation options:
120   --disable-doc            do not build documentation
121   --disable-htmlpages      do not build HTML documentation pages
122   --disable-manpages       do not build man documentation pages
123   --disable-podpages       do not build POD documentation pages
124   --disable-txtpages       do not build text documentation pages
125
126 Component options:
127   --disable-avdevice       disable libavdevice build
128   --disable-avcodec        disable libavcodec build
129   --disable-avformat       disable libavformat build
130   --disable-avutil         disable libavutil build
131   --disable-swresample     disable libswresample build
132   --disable-swscale        disable libswscale build
133   --disable-postproc       disable libpostproc build
134   --disable-avfilter       disable libavfilter build
135   --enable-avresample      enable libavresample build [no]
136   --disable-pthreads       disable pthreads [autodetect]
137   --disable-w32threads     disable Win32 threads [autodetect]
138   --disable-os2threads     disable OS/2 threads [autodetect]
139   --disable-network        disable network support [no]
140   --disable-dct            disable DCT code
141   --disable-dwt            disable DWT code
142   --disable-error-resilience disable error resilience code
143   --disable-lsp            disable LSP code
144   --disable-lzo            disable LZO decoder code
145   --disable-mdct           disable MDCT code
146   --disable-rdft           disable RDFT code
147   --disable-fft            disable FFT code
148   --disable-faan           disable floating point AAN (I)DCT code
149   --disable-pixelutils     disable pixel utils in libavutil
150
151 Hardware accelerators:
152   --disable-dxva2          disable DXVA2 code [autodetect]
153   --disable-vaapi          disable VAAPI code [autodetect]
154   --disable-vda            disable VDA code [autodetect]
155   --disable-vdpau          disable VDPAU code [autodetect]
156
157 Individual component options:
158   --disable-everything     disable all components listed below
159   --disable-encoder=NAME   disable encoder NAME
160   --enable-encoder=NAME    enable encoder NAME
161   --disable-encoders       disable all encoders
162   --disable-decoder=NAME   disable decoder NAME
163   --enable-decoder=NAME    enable decoder NAME
164   --disable-decoders       disable all decoders
165   --disable-hwaccel=NAME   disable hwaccel NAME
166   --enable-hwaccel=NAME    enable hwaccel NAME
167   --disable-hwaccels       disable all hwaccels
168   --disable-muxer=NAME     disable muxer NAME
169   --enable-muxer=NAME      enable muxer NAME
170   --disable-muxers         disable all muxers
171   --disable-demuxer=NAME   disable demuxer NAME
172   --enable-demuxer=NAME    enable demuxer NAME
173   --disable-demuxers       disable all demuxers
174   --enable-parser=NAME     enable parser NAME
175   --disable-parser=NAME    disable parser NAME
176   --disable-parsers        disable all parsers
177   --enable-bsf=NAME        enable bitstream filter NAME
178   --disable-bsf=NAME       disable bitstream filter NAME
179   --disable-bsfs           disable all bitstream filters
180   --enable-protocol=NAME   enable protocol NAME
181   --disable-protocol=NAME  disable protocol NAME
182   --disable-protocols      disable all protocols
183   --enable-indev=NAME      enable input device NAME
184   --disable-indev=NAME     disable input device NAME
185   --disable-indevs         disable input devices
186   --enable-outdev=NAME     enable output device NAME
187   --disable-outdev=NAME    disable output device NAME
188   --disable-outdevs        disable output devices
189   --disable-devices        disable all devices
190   --enable-filter=NAME     enable filter NAME
191   --disable-filter=NAME    disable filter NAME
192   --disable-filters        disable all filters
193
194 External library support:
195   --enable-avisynth        enable reading of AviSynth script files [no]
196   --disable-bzlib          disable bzlib [autodetect]
197   --enable-fontconfig      enable fontconfig, useful for drawtext filter [no]
198   --enable-frei0r          enable frei0r video filtering [no]
199   --enable-gnutls          enable gnutls, needed for https support
200                            if openssl is not used [no]
201   --disable-iconv          disable iconv [autodetect]
202   --enable-ladspa          enable LADSPA audio filtering [no]
203   --enable-libaacplus      enable AAC+ encoding via libaacplus [no]
204   --enable-libass          enable libass subtitles rendering,
205                            needed for subtitles and ass filter [no]
206   --enable-libbluray       enable BluRay reading using libbluray [no]
207   --enable-libbs2b         enable bs2b DSP library [no]
208   --enable-libcaca         enable textual display using libcaca [no]
209   --enable-libcelt         enable CELT decoding via libcelt [no]
210   --enable-libcdio         enable audio CD grabbing with libcdio [no]
211   --enable-libdc1394       enable IIDC-1394 grabbing using libdc1394
212                            and libraw1394 [no]
213   --enable-libdcadec       enable DCA decoding via libdcadec [no]
214   --enable-libfaac         enable AAC encoding via libfaac [no]
215   --enable-libfdk-aac      enable AAC de/encoding via libfdk-aac [no]
216   --enable-libflite        enable flite (voice synthesis) support via libflite [no]
217   --enable-libfreetype     enable libfreetype, needed for drawtext filter [no]
218   --enable-libfribidi      enable libfribidi, improves drawtext filter [no]
219   --enable-libgme          enable Game Music Emu via libgme [no]
220   --enable-libgsm          enable GSM de/encoding via libgsm [no]
221   --enable-libiec61883     enable iec61883 via libiec61883 [no]
222   --enable-libilbc         enable iLBC de/encoding via libilbc [no]
223   --enable-libmfx          enable HW acceleration through libmfx
224   --enable-libmodplug      enable ModPlug via libmodplug [no]
225   --enable-libmp3lame      enable MP3 encoding via libmp3lame [no]
226   --enable-libnut          enable NUT (de)muxing via libnut,
227                            native (de)muxer exists [no]
228   --enable-libopencore-amrnb enable AMR-NB de/encoding via libopencore-amrnb [no]
229   --enable-libopencore-amrwb enable AMR-WB decoding via libopencore-amrwb [no]
230   --enable-libopencv       enable video filtering via libopencv [no]
231   --enable-libopenh264     enable H.264 encoding via OpenH264 [no]
232   --enable-libopenjpeg     enable JPEG 2000 de/encoding via OpenJPEG [no]
233   --enable-libopus         enable Opus de/encoding via libopus [no]
234   --enable-libpulse        enable Pulseaudio input via libpulse [no]
235   --enable-libquvi         enable quvi input via libquvi [no]
236   --enable-librtmp         enable RTMP[E] support via librtmp [no]
237   --enable-libschroedinger enable Dirac de/encoding via libschroedinger [no]
238   --enable-libshine        enable fixed-point MP3 encoding via libshine [no]
239   --enable-libsmbclient    enable Samba protocol via libsmbclient [no]
240   --enable-libsoxr         enable Include libsoxr resampling [no]
241   --enable-libspeex        enable Speex de/encoding via libspeex [no]
242   --enable-libssh          enable SFTP protocol via libssh [no]
243   --enable-libstagefright-h264  enable H.264 decoding via libstagefright [no]
244   --enable-libtheora       enable Theora encoding via libtheora [no]
245   --enable-libtwolame      enable MP2 encoding via libtwolame [no]
246   --enable-libutvideo      enable Ut Video encoding and decoding via libutvideo [no]
247   --enable-libv4l2         enable libv4l2/v4l-utils [no]
248   --enable-libvidstab      enable video stabilization using vid.stab [no]
249   --enable-libvo-aacenc    enable AAC encoding via libvo-aacenc [no]
250   --enable-libvo-amrwbenc  enable AMR-WB encoding via libvo-amrwbenc [no]
251   --enable-libvorbis       enable Vorbis en/decoding via libvorbis,
252                            native implementation exists [no]
253   --enable-libvpx          enable VP8 and VP9 de/encoding via libvpx [no]
254   --enable-libwavpack      enable wavpack encoding via libwavpack [no]
255   --enable-libwebp         enable WebP encoding via libwebp [no]
256   --enable-libx264         enable H.264 encoding via x264 [no]
257   --enable-libx265         enable HEVC encoding via x265 [no]
258   --enable-libxavs         enable AVS encoding via xavs [no]
259   --enable-libxcb          enable X11 grabbing using XCB [autodetect]
260   --enable-libxcb-shm      enable X11 grabbing shm communication [autodetect]
261   --enable-libxcb-xfixes   enable X11 grabbing mouse rendering [autodetect]
262   --enable-libxcb-shape    enable X11 grabbing shape rendering [autodetect]
263   --enable-libxvid         enable Xvid encoding via xvidcore,
264                            native MPEG-4/Xvid encoder exists [no]
265   --enable-libzmq          enable message passing via libzmq [no]
266   --enable-libzvbi         enable teletext support via libzvbi [no]
267   --disable-lzma           disable lzma [autodetect]
268   --enable-decklink        enable Blackmagick DeckLink I/O support [no]
269   --enable-mmal            enable decoding via MMAL [no]
270   --enable-nvenc           enable NVIDIA NVENC support [no]
271   --enable-openal          enable OpenAL 1.1 capture support [no]
272   --enable-opencl          enable OpenCL code
273   --enable-opengl          enable OpenGL rendering [no]
274   --enable-openssl         enable openssl, needed for https support
275                            if gnutls is not used [no]
276   --disable-sdl            disable sdl [autodetect]
277   --enable-x11grab         enable X11 grabbing (legacy) [no]
278   --disable-xlib           disable xlib [autodetect]
279   --disable-zlib           disable zlib [autodetect]
280
281 Toolchain options:
282   --arch=ARCH              select architecture [$arch]
283   --cpu=CPU                select the minimum required CPU (affects
284                            instruction selection, may crash on older CPUs)
285   --cross-prefix=PREFIX    use PREFIX for compilation tools [$cross_prefix]
286   --progs-suffix=SUFFIX    program name suffix []
287   --enable-cross-compile   assume a cross-compiler is used
288   --sysroot=PATH           root of cross-build tree
289   --sysinclude=PATH        location of cross-build system headers
290   --target-os=OS           compiler targets OS [$target_os]
291   --target-exec=CMD        command to run executables on target
292   --target-path=DIR        path to view of build directory on target
293   --target-samples=DIR     path to samples directory on target
294   --tempprefix=PATH        force fixed dir/prefix instead of mktemp for checks
295   --toolchain=NAME         set tool defaults according to NAME
296   --nm=NM                  use nm tool NM [$nm_default]
297   --ar=AR                  use archive tool AR [$ar_default]
298   --as=AS                  use assembler AS [$as_default]
299   --windres=WINDRES        use windows resource compiler WINDRES [$windres_default]
300   --yasmexe=EXE            use yasm-compatible assembler EXE [$yasmexe_default]
301   --cc=CC                  use C compiler CC [$cc_default]
302   --cxx=CXX                use C compiler CXX [$cxx_default]
303   --dep-cc=DEPCC           use dependency generator DEPCC [$cc_default]
304   --ld=LD                  use linker LD [$ld_default]
305   --pkg-config=PKGCONFIG   use pkg-config tool PKGCONFIG [$pkg_config_default]
306   --pkg-config-flags=FLAGS pass additional flags to pkgconf []
307   --ranlib=RANLIB          use ranlib RANLIB [$ranlib_default]
308   --doxygen=DOXYGEN        use DOXYGEN to generate API doc [$doxygen_default]
309   --host-cc=HOSTCC         use host C compiler HOSTCC
310   --host-cflags=HCFLAGS    use HCFLAGS when compiling for host
311   --host-cppflags=HCPPFLAGS use HCPPFLAGS when compiling for host
312   --host-ld=HOSTLD         use host linker HOSTLD
313   --host-ldflags=HLDFLAGS  use HLDFLAGS when linking for host
314   --host-libs=HLIBS        use libs HLIBS when linking for host
315   --host-os=OS             compiler host OS [$target_os]
316   --extra-cflags=ECFLAGS   add ECFLAGS to CFLAGS [$CFLAGS]
317   --extra-cxxflags=ECFLAGS add ECFLAGS to CXXFLAGS [$CXXFLAGS]
318   --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]
319   --extra-ldexeflags=ELDFLAGS add ELDFLAGS to LDEXEFLAGS [$LDEXEFLAGS]
320   --extra-libs=ELIBS       add ELIBS [$ELIBS]
321   --extra-version=STRING   version string suffix []
322   --optflags=OPTFLAGS      override optimization-related compiler flags
323   --build-suffix=SUFFIX    library name suffix []
324   --enable-pic             build position-independent code
325   --enable-thumb           compile for Thumb instruction set
326   --enable-lto             use link-time optimization
327
328 Advanced options (experts only):
329   --malloc-prefix=PREFIX   prefix malloc and related names with PREFIX
330   --disable-symver         disable symbol versioning
331   --enable-hardcoded-tables use hardcoded tables instead of runtime generation
332   --disable-safe-bitstream-reader
333                            disable buffer boundary checking in bitreaders
334                            (faster, but may crash)
335   --enable-memalign-hack   emulate memalign, interferes with memory debuggers
336   --sws-max-filter-size=N  the max filter size swscale uses [$sws_max_filter_size_default]
337
338 Optimization options (experts only):
339   --disable-asm            disable all assembly optimizations
340   --disable-altivec        disable AltiVec optimizations
341   --disable-amd3dnow       disable 3DNow! optimizations
342   --disable-amd3dnowext    disable 3DNow! extended optimizations
343   --disable-mmx            disable MMX optimizations
344   --disable-mmxext         disable MMXEXT optimizations
345   --disable-sse            disable SSE optimizations
346   --disable-sse2           disable SSE2 optimizations
347   --disable-sse3           disable SSE3 optimizations
348   --disable-ssse3          disable SSSE3 optimizations
349   --disable-sse4           disable SSE4 optimizations
350   --disable-sse42          disable SSE4.2 optimizations
351   --disable-avx            disable AVX optimizations
352   --disable-xop            disable XOP optimizations
353   --disable-fma3           disable FMA3 optimizations
354   --disable-fma4           disable FMA4 optimizations
355   --disable-avx2           disable AVX2 optimizations
356   --disable-armv5te        disable armv5te optimizations
357   --disable-armv6          disable armv6 optimizations
358   --disable-armv6t2        disable armv6t2 optimizations
359   --disable-vfp            disable VFP optimizations
360   --disable-neon           disable NEON optimizations
361   --disable-inline-asm     disable use of inline assembly
362   --disable-yasm           disable use of nasm/yasm assembly
363   --disable-mips32r5       disable MIPS32R5 optimizations
364   --disable-mips64r6       disable MIPS64R6 optimizations
365   --disable-mipsdspr1      disable MIPS DSP ASE R1 optimizations
366   --disable-mipsdspr2      disable MIPS DSP ASE R2 optimizations
367   --disable-msa            disable MSA optimizations
368   --disable-mipsfpu        disable floating point MIPS optimizations
369   --disable-fast-unaligned consider unaligned accesses slow
370
371 Developer options (useful when working on FFmpeg itself):
372   --disable-debug          disable debugging symbols
373   --enable-debug=LEVEL     set the debug level [$debuglevel]
374   --disable-optimizations  disable compiler optimizations
375   --enable-extra-warnings  enable more compiler warnings
376   --disable-stripping      disable stripping of executables and shared libraries
377   --assert-level=level     0(default), 1 or 2, amount of assertion testing,
378                            2 causes a slowdown at runtime.
379   --enable-memory-poisoning fill heap uninitialized allocated space with arbitrary data
380   --valgrind=VALGRIND      run "make fate" tests through valgrind to detect memory
381                            leaks and errors, using the specified valgrind binary.
382                            Cannot be combined with --target-exec
383   --enable-ftrapv          Trap arithmetic overflows
384   --samples=PATH           location of test samples for FATE, if not set use
385                            \$FATE_SAMPLES at make invocation time.
386   --enable-neon-clobber-test check NEON registers for clobbering (should be
387                            used only for debugging purposes)
388   --enable-xmm-clobber-test check XMM registers for clobbering (Win64-only;
389                            should be used only for debugging purposes)
390   --enable-random          randomly enable/disable components
391   --disable-random
392   --enable-random=LIST     randomly enable/disable specific components or
393   --disable-random=LIST    component groups. LIST is a comma-separated list
394                            of NAME[:PROB] entries where NAME is a component
395                            (group) and PROB the probability associated with
396                            NAME (default 0.5).
397   --random-seed=VALUE      seed value for --enable/disable-random
398
399 NOTE: Object files are built at the place where configure is launched.
400 EOF
401   exit 0
402 }
403
404 quotes='""'
405
406 log(){
407     echo "$@" >> $logfile
408 }
409
410 log_file(){
411     log BEGIN $1
412     pr -n -t $1 >> $logfile
413     log END $1
414 }
415
416 echolog(){
417     log "$@"
418     echo "$@"
419 }
420
421 warn(){
422     log "WARNING: $*"
423     WARNINGS="${WARNINGS}WARNING: $*\n"
424 }
425
426 die(){
427     echolog "$@"
428     cat <<EOF
429
430 If you think configure made a mistake, make sure you are using the latest
431 version from Git.  If the latest version fails, report the problem to the
432 ffmpeg-user@ffmpeg.org mailing list or IRC #ffmpeg on irc.freenode.net.
433 EOF
434     if disabled logging; then
435         cat <<EOF
436 Rerun configure with logging enabled (do not use --disable-logging), and
437 include the log this produces with your report.
438 EOF
439     else
440         cat <<EOF
441 Include the log file "$logfile" produced by configure as this will help
442 solve the problem.
443 EOF
444     fi
445     exit 1
446 }
447
448 # Avoid locale weirdness, besides we really just want to translate ASCII.
449 toupper(){
450     echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
451 }
452
453 tolower(){
454     echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
455 }
456
457 c_escape(){
458     echo "$*" | sed 's/["\\]/\\\0/g'
459 }
460
461 sh_quote(){
462     v=$(echo "$1" | sed "s/'/'\\\\''/g")
463     test "x$v" = "x${v#*[!A-Za-z0-9_/.+-]}" || v="'$v'"
464     echo "$v"
465 }
466
467 cleanws(){
468     echo "$@" | sed 's/^ *//;s/  */ /g;s/ *$//;s/\\r//g'
469 }
470
471 filter(){
472     pat=$1
473     shift
474     for v; do
475         eval "case $v in $pat) echo $v ;; esac"
476     done
477 }
478
479 filter_out(){
480     pat=$1
481     shift
482     for v; do
483         eval "case $v in $pat) ;; *) echo $v ;; esac"
484     done
485 }
486
487 map(){
488     m=$1
489     shift
490     for v; do eval $m; done
491 }
492
493 add_suffix(){
494     suffix=$1
495     shift
496     for v; do echo ${v}${suffix}; done
497 }
498
499 set_all(){
500     value=$1
501     shift
502     for var in $*; do
503         eval $var=$value
504     done
505 }
506
507 set_weak(){
508     value=$1
509     shift
510     for var; do
511         eval : \${$var:=$value}
512     done
513 }
514
515 sanitize_var_name(){
516     echo $@ | sed 's/[^A-Za-z0-9_]/_/g'
517 }
518
519 set_safe(){
520     var=$1
521     shift
522     eval $(sanitize_var_name "$var")='$*'
523 }
524
525 get_safe(){
526     eval echo \$$(sanitize_var_name "$1")
527 }
528
529 pushvar(){
530     for pvar in $*; do
531         eval level=\${${pvar}_level:=0}
532         eval ${pvar}_${level}="\$$pvar"
533         eval ${pvar}_level=$(($level+1))
534     done
535 }
536
537 popvar(){
538     for pvar in $*; do
539         eval level=\${${pvar}_level:-0}
540         test $level = 0 && continue
541         eval level=$(($level-1))
542         eval $pvar="\${${pvar}_${level}}"
543         eval ${pvar}_level=$level
544         eval unset ${pvar}_${level}
545     done
546 }
547
548 enable(){
549     set_all yes $*
550 }
551
552 disable(){
553     set_all no $*
554 }
555
556 enable_weak(){
557     set_weak yes $*
558 }
559
560 disable_weak(){
561     set_weak no $*
562 }
563
564 enable_safe(){
565     for var; do
566         enable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
567     done
568 }
569
570 disable_safe(){
571     for var; do
572         disable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
573     done
574 }
575
576 do_enable_deep(){
577     for var; do
578         enabled $var && continue
579         eval sel="\$${var}_select"
580         eval sgs="\$${var}_suggest"
581         pushvar var sgs
582         enable_deep $sel
583         popvar sgs
584         enable_deep_weak $sgs
585         popvar var
586     done
587 }
588
589 enable_deep(){
590     do_enable_deep $*
591     enable $*
592 }
593
594 enable_deep_weak(){
595     for var; do
596         disabled $var && continue
597         pushvar var
598         do_enable_deep $var
599         popvar var
600         enable_weak $var
601     done
602 }
603
604 enabled(){
605     test "${1#!}" = "$1" && op== || op=!=
606     eval test "x\$${1#!}" $op "xyes"
607 }
608
609 disabled(){
610     test "${1#!}" = "$1" && op== || op=!=
611     eval test "x\$${1#!}" $op "xno"
612 }
613
614 enabled_all(){
615     for opt; do
616         enabled $opt || return 1
617     done
618 }
619
620 disabled_all(){
621     for opt; do
622         disabled $opt || return 1
623     done
624 }
625
626 enabled_any(){
627     for opt; do
628         enabled $opt && return 0
629     done
630 }
631
632 disabled_any(){
633     for opt; do
634         disabled $opt && return 0
635     done
636     return 1
637 }
638
639 set_default(){
640     for opt; do
641         eval : \${$opt:=\$${opt}_default}
642     done
643 }
644
645 is_in(){
646     value=$1
647     shift
648     for var in $*; do
649         [ $var = $value ] && return 0
650     done
651     return 1
652 }
653
654 do_check_deps(){
655     for cfg; do
656         cfg="${cfg#!}"
657         enabled ${cfg}_checking && die "Circular dependency for $cfg."
658         disabled ${cfg}_checking && continue
659         enable ${cfg}_checking
660         append allopts $cfg
661
662         eval dep_all="\$${cfg}_deps"
663         eval dep_any="\$${cfg}_deps_any"
664         eval dep_sel="\$${cfg}_select"
665         eval dep_sgs="\$${cfg}_suggest"
666         eval dep_ifa="\$${cfg}_if"
667         eval dep_ifn="\$${cfg}_if_any"
668
669         pushvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
670         do_check_deps $dep_all $dep_any $dep_sel $dep_sgs $dep_ifa $dep_ifn
671         popvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
672
673         [ -n "$dep_ifa" ] && { enabled_all $dep_ifa && enable_weak $cfg; }
674         [ -n "$dep_ifn" ] && { enabled_any $dep_ifn && enable_weak $cfg; }
675         enabled_all  $dep_all || disable $cfg
676         enabled_any  $dep_any || disable $cfg
677         disabled_any $dep_sel && disable $cfg
678
679         if enabled $cfg; then
680             enable_deep $dep_sel
681             enable_deep_weak $dep_sgs
682         fi
683
684         disable ${cfg}_checking
685     done
686 }
687
688 check_deps(){
689     unset allopts
690
691     do_check_deps "$@"
692
693     for cfg in $allopts; do
694         enabled $cfg || continue
695         eval dep_extralibs="\$${cfg}_extralibs"
696         test -n "$dep_extralibs" && add_extralibs $dep_extralibs
697     done
698 }
699
700 print_config(){
701     pfx=$1
702     files=$2
703     shift 2
704     map 'eval echo "$v \${$v:-no}"' "$@" |
705     awk "BEGIN { split(\"$files\", files) }
706         {
707             c = \"$pfx\" toupper(\$1);
708             v = \$2;
709             sub(/yes/, 1, v);
710             sub(/no/,  0, v);
711             for (f in files) {
712                 file = files[f];
713                 if (file ~ /\\.h\$/) {
714                     printf(\"#define %s %d\\n\", c, v) >>file;
715                 } else if (file ~ /\\.asm\$/) {
716                     printf(\"%%define %s %d\\n\", c, v) >>file;
717                 } else if (file ~ /\\.mak\$/) {
718                     n = -v ? \"\" : \"!\";
719                     printf(\"%s%s=yes\\n\", n, c) >>file;
720                 } else if (file ~ /\\.texi\$/) {
721                     pre = -v ? \"\" : \"@c \";
722                     yesno = \$2;
723                     c2 = tolower(c);
724                     gsub(/_/, \"-\", c2);
725                     printf(\"%s@set %s %s\\n\", pre, c2, yesno) >>file;
726                 }
727             }
728         }"
729 }
730
731 print_enabled(){
732     suf=$1
733     shift
734     for v; do
735         enabled $v && printf "%s\n" ${v%$suf};
736     done
737 }
738
739 append(){
740     var=$1
741     shift
742     eval "$var=\"\$$var $*\""
743 }
744
745 prepend(){
746     var=$1
747     shift
748     eval "$var=\"$* \$$var\""
749 }
750
751 unique(){
752     var=$1
753     uniq_list=""
754     for tok in $(eval echo \$$var); do
755         uniq_list="$(filter_out $tok $uniq_list) $tok"
756     done
757     eval "$var=\"${uniq_list}\""
758 }
759
760 add_cppflags(){
761     append CPPFLAGS "$@"
762 }
763
764 add_cflags(){
765     append CFLAGS $($cflags_filter "$@")
766 }
767
768 add_cxxflags(){
769     append CXXFLAGS $($cflags_filter "$@")
770 }
771
772 add_asflags(){
773     append ASFLAGS $($asflags_filter "$@")
774 }
775
776 add_ldflags(){
777     append LDFLAGS $($ldflags_filter "$@")
778 }
779
780 add_ldexeflags(){
781     append LDEXEFLAGS $($ldflags_filter "$@")
782 }
783
784 add_stripflags(){
785     append ASMSTRIPFLAGS "$@"
786 }
787
788 add_extralibs(){
789     prepend extralibs $($ldflags_filter "$@")
790 }
791
792 add_host_cppflags(){
793     append host_cppflags "$@"
794 }
795
796 add_host_cflags(){
797     append host_cflags $($host_cflags_filter "$@")
798 }
799
800 add_host_ldflags(){
801     append host_ldflags $($host_ldflags_filter "$@")
802 }
803
804 add_compat(){
805     append compat_objs $1
806     shift
807     map 'add_cppflags -D$v' "$@"
808 }
809
810 check_cmd(){
811     log "$@"
812     "$@" >> $logfile 2>&1
813 }
814
815 check_stat(){
816     log check_stat "$@"
817     stat "$1" >> $logfile 2>&1
818 }
819
820 cc_o(){
821     eval printf '%s\\n' $CC_O
822 }
823
824 cc_e(){
825     eval printf '%s\\n' $CC_E
826 }
827
828 check_cc(){
829     log check_cc "$@"
830     cat > $TMPC
831     log_file $TMPC
832     check_cmd $cc $CPPFLAGS $CFLAGS "$@" $CC_C $(cc_o $TMPO) $TMPC
833 }
834
835 check_cxx(){
836     log check_cxx "$@"
837     cat > $TMPCPP
838     log_file $TMPCPP
839     check_cmd $cxx $CPPFLAGS $CFLAGS $CXXFLAGS "$@" $CXX_C -o $TMPO $TMPCPP
840 }
841
842 check_oc(){
843     log check_oc "$@"
844     cat > $TMPM
845     log_file $TMPM
846     check_cmd $cc -Werror=missing-prototypes $CPPFLAGS $CFLAGS "$@" $CC_C $(cc_o $TMPO) $TMPM
847 }
848
849 check_cpp(){
850     log check_cpp "$@"
851     cat > $TMPC
852     log_file $TMPC
853     check_cmd $cc $CPPFLAGS $CFLAGS "$@" $(cc_e $TMPO) $TMPC
854 }
855
856 as_o(){
857     eval printf '%s\\n' $AS_O
858 }
859
860 check_as(){
861     log check_as "$@"
862     cat > $TMPS
863     log_file $TMPS
864     check_cmd $as $CPPFLAGS $ASFLAGS "$@" $AS_C $(as_o $TMPO) $TMPS
865 }
866
867 check_inline_asm(){
868     log check_inline_asm "$@"
869     name="$1"
870     code="$2"
871     shift 2
872     disable $name
873     check_cc "$@" <<EOF && enable $name
874 void foo(void){ __asm__ volatile($code); }
875 EOF
876 }
877
878 check_insn(){
879     log check_insn "$@"
880     check_inline_asm ${1}_inline "\"$2\""
881     echo "$2" | check_as && enable ${1}_external || disable ${1}_external
882 }
883
884 check_yasm(){
885     log check_yasm "$@"
886     echo "$1" > $TMPS
887     log_file $TMPS
888     shift 1
889     check_cmd $yasmexe $YASMFLAGS -Werror "$@" -o $TMPO $TMPS
890 }
891
892 ld_o(){
893     eval printf '%s\\n' $LD_O
894 }
895
896 check_ld(){
897     log check_ld "$@"
898     type=$1
899     shift 1
900     flags=$(filter_out '-l*|*.so' $@)
901     libs=$(filter '-l*|*.so' $@)
902     check_$type $($cflags_filter $flags) || return
903     flags=$($ldflags_filter $flags)
904     libs=$($ldflags_filter $libs)
905     check_cmd $ld $LDFLAGS $flags $(ld_o $TMPE) $TMPO $libs $extralibs
906 }
907
908 print_include(){
909     hdr=$1
910     test "${hdr%.h}" = "${hdr}" &&
911         echo "#include $hdr"    ||
912         echo "#include <$hdr>"
913 }
914
915 check_code(){
916     log check_code "$@"
917     check=$1
918     headers=$2
919     code=$3
920     shift 3
921     {
922         for hdr in $headers; do
923             print_include $hdr
924         done
925         echo "int main(void) { $code; return 0; }"
926     } | check_$check "$@"
927 }
928
929 check_cppflags(){
930     log check_cppflags "$@"
931     check_cc "$@" <<EOF && append CPPFLAGS "$@"
932 int x;
933 EOF
934 }
935
936 test_cflags(){
937     log test_cflags "$@"
938     set -- $($cflags_filter "$@")
939     check_cc "$@" <<EOF
940 int x;
941 EOF
942 }
943
944 check_cflags(){
945     log check_cflags "$@"
946     test_cflags "$@" && add_cflags "$@"
947 }
948
949 check_cxxflags(){
950     log check_cxxflags "$@"
951     set -- $($cflags_filter "$@")
952     check_cxx "$@" <<EOF && append CXXFLAGS "$@"
953 int x;
954 EOF
955 }
956
957 test_ldflags(){
958     log test_ldflags "$@"
959     check_ld "cc" "$@" <<EOF
960 int main(void){ return 0; }
961 EOF
962 }
963
964 check_ldflags(){
965     log check_ldflags "$@"
966     test_ldflags "$@" && add_ldflags "$@"
967 }
968
969 test_stripflags(){
970     log test_stripflags "$@"
971     # call check_cc to get a fresh TMPO
972     check_cc <<EOF
973 int main(void) { return 0; }
974 EOF
975     check_cmd $strip $ASMSTRIPFLAGS "$@" $TMPO
976 }
977
978 check_stripflags(){
979     log check_stripflags "$@"
980     test_stripflags "$@" && add_stripflags "$@"
981 }
982
983 check_header(){
984     log check_header "$@"
985     header=$1
986     shift
987     disable_safe $header
988     check_cpp "$@" <<EOF && enable_safe $header
989 #include <$header>
990 int x;
991 EOF
992 }
993
994 check_header_oc(){
995     log check_header_oc "$@"
996     rm -f -- "$TMPO"
997     header=$1
998     shift
999     disable_safe $header
1000     {
1001        echo "#include <$header>"
1002        echo "int main(void) { return 0; }"
1003     } | check_oc && check_stat "$TMPO" && enable_safe $headers
1004 }
1005
1006 check_func(){
1007     log check_func "$@"
1008     func=$1
1009     shift
1010     disable $func
1011     check_ld "cc" "$@" <<EOF && enable $func
1012 extern int $func();
1013 int main(void){ $func(); }
1014 EOF
1015 }
1016
1017 check_mathfunc(){
1018     log check_mathfunc "$@"
1019     func=$1
1020     narg=$2
1021     shift 2
1022     test $narg = 2 && args="f, g" || args="f"
1023     disable $func
1024     check_ld "cc" "$@" <<EOF && enable $func
1025 #include <math.h>
1026 float foo(float f, float g) { return $func($args); }
1027 int main(void){ return (int) foo; }
1028 EOF
1029 }
1030
1031 check_func_headers(){
1032     log check_func_headers "$@"
1033     headers=$1
1034     funcs=$2
1035     shift 2
1036     {
1037         for hdr in $headers; do
1038             print_include $hdr
1039         done
1040         for func in $funcs; do
1041             echo "long check_$func(void) { return (long) $func; }"
1042         done
1043         echo "int main(void) { return 0; }"
1044     } | check_ld "cc" "$@" && enable $funcs && enable_safe $headers
1045 }
1046
1047 check_class_headers_cpp(){
1048     log check_class_headers_cpp "$@"
1049     headers=$1
1050     classes=$2
1051     shift 2
1052     {
1053         for hdr in $headers; do
1054             echo "#include <$hdr>"
1055         done
1056         echo "int main(void) { "
1057         i=1
1058         for class in $classes; do
1059             echo "$class obj$i;"
1060             i=$(expr $i + 1)
1061         done
1062         echo "return 0; }"
1063     } | check_ld "cxx" "$@" && enable $funcs && enable_safe $headers
1064 }
1065
1066 check_cpp_condition(){
1067     log check_cpp_condition "$@"
1068     header=$1
1069     condition=$2
1070     shift 2
1071     check_cpp "$@" <<EOF
1072 #include <$header>
1073 #if !($condition)
1074 #error "unsatisfied condition: $condition"
1075 #endif
1076 EOF
1077 }
1078
1079 check_lib(){
1080     log check_lib "$@"
1081     header="$1"
1082     func="$2"
1083     shift 2
1084     check_header $header && check_func $func "$@" && add_extralibs "$@"
1085 }
1086
1087 check_lib2(){
1088     log check_lib2 "$@"
1089     headers="$1"
1090     funcs="$2"
1091     shift 2
1092     check_func_headers "$headers" "$funcs" "$@" && add_extralibs "$@"
1093 }
1094
1095 check_lib_cpp(){
1096     log check_lib_cpp "$@"
1097     headers="$1"
1098     classes="$2"
1099     shift 2
1100     check_class_headers_cpp "$headers" "$classes" "$@" && add_extralibs "$@"
1101 }
1102
1103 check_pkg_config(){
1104     log check_pkg_config "$@"
1105     pkgandversion="$1"
1106     pkg="${1%% *}"
1107     headers="$2"
1108     funcs="$3"
1109     shift 3
1110     check_cmd $pkg_config --exists --print-errors $pkgandversion || return
1111     pkg_cflags=$($pkg_config --cflags $pkg_config_flags $pkg)
1112     pkg_libs=$($pkg_config --libs $pkg_config_flags $pkg)
1113     check_func_headers "$headers" "$funcs" $pkg_cflags $pkg_libs "$@" &&
1114         set_safe ${pkg}_cflags $pkg_cflags   &&
1115         set_safe ${pkg}_libs   $pkg_libs
1116 }
1117
1118 check_exec(){
1119     check_ld "cc" "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
1120 }
1121
1122 check_exec_crash(){
1123     code=$(cat)
1124
1125     # exit() is not async signal safe.  _Exit (C99) and _exit (POSIX)
1126     # are safe but may not be available everywhere.  Thus we use
1127     # raise(SIGTERM) instead.  The check is run in a subshell so we
1128     # can redirect the "Terminated" message from the shell.  SIGBUS
1129     # is not defined by standard C so it is used conditionally.
1130
1131     (check_exec "$@") >> $logfile 2>&1 <<EOF
1132 #include <signal.h>
1133 static void sighandler(int sig){
1134     raise(SIGTERM);
1135 }
1136 int foo(void){
1137     $code
1138 }
1139 int (*func_ptr)(void) = foo;
1140 int main(void){
1141     signal(SIGILL, sighandler);
1142     signal(SIGFPE, sighandler);
1143     signal(SIGSEGV, sighandler);
1144 #ifdef SIGBUS
1145     signal(SIGBUS, sighandler);
1146 #endif
1147     return func_ptr();
1148 }
1149 EOF
1150 }
1151
1152 check_type(){
1153     log check_type "$@"
1154     headers=$1
1155     type=$2
1156     shift 2
1157     disable_safe "$type"
1158     check_code cc "$headers" "$type v" "$@" && enable_safe "$type"
1159 }
1160
1161 check_struct(){
1162     log check_struct "$@"
1163     headers=$1
1164     struct=$2
1165     member=$3
1166     shift 3
1167     disable_safe "${struct}_${member}"
1168     check_code cc "$headers" "const void *p = &(($struct *)0)->$member" "$@" &&
1169         enable_safe "${struct}_${member}"
1170 }
1171
1172 check_builtin(){
1173     log check_builtin "$@"
1174     name=$1
1175     headers=$2
1176     builtin=$3
1177     shift 3
1178     disable "$name"
1179     check_code ld "$headers" "$builtin" "cc" "$@" && enable "$name"
1180 }
1181
1182 check_compile_assert(){
1183     log check_compile_assert "$@"
1184     name=$1
1185     headers=$2
1186     condition=$3
1187     shift 3
1188     disable "$name"
1189     check_code cc "$headers" "char c[2 * !!($condition) - 1]" "$@" && enable "$name"
1190 }
1191
1192 require(){
1193     name="$1"
1194     header="$2"
1195     func="$3"
1196     shift 3
1197     check_lib $header $func "$@" || die "ERROR: $name not found"
1198 }
1199
1200 require2(){
1201     name="$1"
1202     headers="$2"
1203     func="$3"
1204     shift 3
1205     check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
1206 }
1207
1208 require_cpp(){
1209     name="$1"
1210     headers="$2"
1211     classes="$3"
1212     shift 3
1213     check_lib_cpp "$headers" "$classes" "$@" || die "ERROR: $name not found"
1214 }
1215
1216 use_pkg_config(){
1217     pkg="$1"
1218     check_pkg_config "$@" || return 1
1219     add_cflags    $(get_safe ${pkg}_cflags)
1220     add_extralibs $(get_safe ${pkg}_libs)
1221 }
1222
1223 require_pkg_config(){
1224     use_pkg_config "$@" || die "ERROR: $pkg not found using pkg-config$pkg_config_fail_message"
1225 }
1226
1227 require_libfreetype(){
1228     log require_libfreetype "$@"
1229     pkg="freetype2"
1230     check_cmd $pkg_config --exists --print-errors $pkg \
1231       || die "ERROR: $pkg not found"
1232     pkg_cflags=$($pkg_config --cflags $pkg_config_flags $pkg)
1233     pkg_libs=$($pkg_config --libs $pkg_config_flags $pkg)
1234     {
1235         echo "#include <ft2build.h>"
1236         echo "#include FT_FREETYPE_H"
1237         echo "long check_func(void) { return (long) FT_Init_FreeType; }"
1238         echo "int main(void) { return 0; }"
1239     } | check_ld "cc" $pkg_cflags $pkg_libs \
1240       && set_safe ${pkg}_cflags $pkg_cflags \
1241       && set_safe ${pkg}_libs   $pkg_libs \
1242       || die "ERROR: $pkg not found"
1243     add_cflags    $(get_safe ${pkg}_cflags)
1244     add_extralibs $(get_safe ${pkg}_libs)
1245 }
1246
1247 hostcc_e(){
1248     eval printf '%s\\n' $HOSTCC_E
1249 }
1250
1251 hostcc_o(){
1252     eval printf '%s\\n' $HOSTCC_O
1253 }
1254
1255 check_host_cc(){
1256     log check_host_cc "$@"
1257     cat > $TMPC
1258     log_file $TMPC
1259     check_cmd $host_cc $host_cflags "$@" $HOSTCC_C $(hostcc_o $TMPO) $TMPC
1260 }
1261
1262 check_host_cpp(){
1263     log check_host_cpp "$@"
1264     cat > $TMPC
1265     log_file $TMPC
1266     check_cmd $host_cc $host_cppflags $host_cflags "$@" $(hostcc_e $TMPO) $TMPC
1267 }
1268
1269 check_host_cppflags(){
1270     log check_host_cppflags "$@"
1271     check_host_cc "$@" <<EOF && append host_cppflags "$@"
1272 int x;
1273 EOF
1274 }
1275
1276 check_host_cflags(){
1277     log check_host_cflags "$@"
1278     set -- $($host_cflags_filter "$@")
1279     check_host_cc "$@" <<EOF && append host_cflags "$@"
1280 int x;
1281 EOF
1282 }
1283
1284 check_host_cpp_condition(){
1285     log check_host_cpp_condition "$@"
1286     header=$1
1287     condition=$2
1288     shift 2
1289     check_host_cpp "$@" <<EOF
1290 #include <$header>
1291 #if !($condition)
1292 #error "unsatisfied condition: $condition"
1293 #endif
1294 EOF
1295 }
1296
1297 apply(){
1298     file=$1
1299     shift
1300     "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
1301 }
1302
1303 cp_if_changed(){
1304     cmp -s "$1" "$2" && echo "$2 is unchanged" && return
1305     mkdir -p "$(dirname $2)"
1306     $cp_f "$1" "$2"
1307 }
1308
1309 # CONFIG_LIST contains configurable options, while HAVE_LIST is for
1310 # system-dependent things.
1311
1312 COMPONENT_LIST="
1313     bsfs
1314     decoders
1315     demuxers
1316     encoders
1317     filters
1318     hwaccels
1319     indevs
1320     muxers
1321     outdevs
1322     parsers
1323     protocols
1324 "
1325
1326 EXAMPLE_LIST="
1327     avio_reading_example
1328     avio_list_dir_example
1329     decoding_encoding_example
1330     demuxing_decoding_example
1331     extract_mvs_example
1332     filter_audio_example
1333     filtering_audio_example
1334     filtering_video_example
1335     metadata_example
1336     muxing_example
1337     qsvdec_example
1338     remuxing_example
1339     resampling_audio_example
1340     scaling_video_example
1341     transcode_aac_example
1342     transcoding_example
1343 "
1344
1345 EXTERNAL_LIBRARY_LIST="
1346     avisynth
1347     bzlib
1348     crystalhd
1349     decklink
1350     frei0r
1351     gnutls
1352     iconv
1353     ladspa
1354     libaacplus
1355     libass
1356     libbluray
1357     libbs2b
1358     libcaca
1359     libcdio
1360     libcelt
1361     libdc1394
1362     libdcadec
1363     libfaac
1364     libfdk_aac
1365     libflite
1366     libfontconfig
1367     libfreetype
1368     libfribidi
1369     libgme
1370     libgsm
1371     libiec61883
1372     libilbc
1373     libmfx
1374     libmodplug
1375     libmp3lame
1376     libnut
1377     libopencore_amrnb
1378     libopencore_amrwb
1379     libopencv
1380     libopenh264
1381     libopenjpeg
1382     libopus
1383     libpulse
1384     libquvi
1385     librtmp
1386     libschroedinger
1387     libshine
1388     libsmbclient
1389     libsoxr
1390     libspeex
1391     libssh
1392     libstagefright_h264
1393     libtheora
1394     libtwolame
1395     libutvideo
1396     libv4l2
1397     libvidstab
1398     libvo_aacenc
1399     libvo_amrwbenc
1400     libvorbis
1401     libvpx
1402     libwavpack
1403     libwebp
1404     libx264
1405     libx265
1406     libxavs
1407     libxcb
1408     libxcb_shm
1409     libxcb_shape
1410     libxcb_xfixes
1411     libxvid
1412     libzmq
1413     libzvbi
1414     lzma
1415     mmal
1416     nvenc
1417     openal
1418     opencl
1419     opengl
1420     openssl
1421     sdl
1422     x11grab
1423     xlib
1424     zlib
1425 "
1426
1427 DOCUMENT_LIST="
1428     doc
1429     htmlpages
1430     manpages
1431     podpages
1432     txtpages
1433 "
1434
1435 FEATURE_LIST="
1436     ftrapv
1437     gray
1438     hardcoded_tables
1439     runtime_cpudetect
1440     safe_bitstream_reader
1441     shared
1442     small
1443     static
1444     swscale_alpha
1445 "
1446
1447 HWACCEL_LIST="
1448     dxva2
1449     vaapi
1450     vda
1451     vdpau
1452     xvmc
1453 "
1454
1455 LIBRARY_LIST="
1456     avcodec
1457     avdevice
1458     avfilter
1459     avformat
1460     avresample
1461     avutil
1462     postproc
1463     swresample
1464     swscale
1465 "
1466
1467 LICENSE_LIST="
1468     gpl
1469     nonfree
1470     version3
1471 "
1472
1473 PROGRAM_LIST="
1474     ffplay
1475     ffprobe
1476     ffserver
1477     ffmpeg
1478 "
1479
1480 SUBSYSTEM_LIST="
1481     dct
1482     dwt
1483     error_resilience
1484     faan
1485     fast_unaligned
1486     fft
1487     lsp
1488     lzo
1489     mdct
1490     pixelutils
1491     network
1492     rdft
1493 "
1494
1495 CONFIG_LIST="
1496     $COMPONENT_LIST
1497     $DOCUMENT_LIST
1498     $EXAMPLE_LIST
1499     $EXTERNAL_LIBRARY_LIST
1500     $FEATURE_LIST
1501     $HWACCEL_LIST
1502     $LICENSE_LIST
1503     $LIBRARY_LIST
1504     $PROGRAM_LIST
1505     $SUBSYSTEM_LIST
1506     fontconfig
1507     incompatible_libav_abi
1508     memalign_hack
1509     memory_poisoning
1510     neon_clobber_test
1511     pic
1512     pod2man
1513     raise_major
1514     thumb
1515     xmm_clobber_test
1516 "
1517
1518 THREADS_LIST="
1519     pthreads
1520     os2threads
1521     w32threads
1522 "
1523
1524 ATOMICS_LIST="
1525     atomics_gcc
1526     atomics_suncc
1527     atomics_win32
1528 "
1529
1530 ARCH_LIST="
1531     aarch64
1532     alpha
1533     arm
1534     avr32
1535     avr32_ap
1536     avr32_uc
1537     bfin
1538     ia64
1539     m68k
1540     mips
1541     mips64
1542     parisc
1543     ppc
1544     ppc64
1545     s390
1546     sh4
1547     sparc
1548     sparc64
1549     tilegx
1550     tilepro
1551     tomi
1552     x86
1553     x86_32
1554     x86_64
1555 "
1556
1557 ARCH_EXT_LIST_ARM="
1558     armv5te
1559     armv6
1560     armv6t2
1561     armv8
1562     neon
1563     vfp
1564     vfpv3
1565     setend
1566 "
1567
1568 ARCH_EXT_LIST_MIPS="
1569     mipsfpu
1570     mips32r2
1571     mips32r5
1572     mips64r6
1573     mipsdspr1
1574     mipsdspr2
1575     msa
1576 "
1577
1578 ARCH_EXT_LIST_X86_SIMD="
1579     amd3dnow
1580     amd3dnowext
1581     avx
1582     avx2
1583     fma3
1584     fma4
1585     mmx
1586     mmxext
1587     sse
1588     sse2
1589     sse3
1590     sse4
1591     sse42
1592     ssse3
1593     xop
1594 "
1595
1596 ARCH_EXT_LIST_PPC="
1597     altivec
1598     dcbzl
1599     ldbrx
1600     ppc4xx
1601     vsx
1602 "
1603
1604 ARCH_EXT_LIST_X86="
1605     $ARCH_EXT_LIST_X86_SIMD
1606     cpunop
1607     i686
1608 "
1609
1610 ARCH_EXT_LIST="
1611     $ARCH_EXT_LIST_ARM
1612     $ARCH_EXT_LIST_PPC
1613     $ARCH_EXT_LIST_X86
1614     $ARCH_EXT_LIST_MIPS
1615     loongson
1616 "
1617
1618 ARCH_FEATURES="
1619     aligned_stack
1620     fast_64bit
1621     fast_clz
1622     fast_cmov
1623     local_aligned_8
1624     local_aligned_16
1625     local_aligned_32
1626     simd_align_16
1627 "
1628
1629 BUILTIN_LIST="
1630     atomic_cas_ptr
1631     atomic_compare_exchange
1632     machine_rw_barrier
1633     MemoryBarrier
1634     mm_empty
1635     rdtsc
1636     sarestart
1637     sync_val_compare_and_swap
1638 "
1639 HAVE_LIST_CMDLINE="
1640     inline_asm
1641     symver
1642     yasm
1643 "
1644
1645 HAVE_LIST_PUB="
1646     bigendian
1647     fast_unaligned
1648     incompatible_libav_abi
1649 "
1650
1651 HEADERS_LIST="
1652     alsa_asoundlib_h
1653     altivec_h
1654     arpa_inet_h
1655     asm_types_h
1656     cdio_paranoia_h
1657     cdio_paranoia_paranoia_h
1658     dev_bktr_ioctl_bt848_h
1659     dev_bktr_ioctl_meteor_h
1660     dev_ic_bt8xx_h
1661     dev_video_bktr_ioctl_bt848_h
1662     dev_video_meteor_ioctl_meteor_h
1663     direct_h
1664     dlfcn_h
1665     dxva_h
1666     ES2_gl_h
1667     gsm_h
1668     io_h
1669     mach_mach_time_h
1670     machine_ioctl_bt848_h
1671     machine_ioctl_meteor_h
1672     malloc_h
1673     openjpeg_1_5_openjpeg_h
1674     OpenGL_gl3_h
1675     poll_h
1676     sndio_h
1677     soundcard_h
1678     sys_mman_h
1679     sys_param_h
1680     sys_resource_h
1681     sys_select_h
1682     sys_soundcard_h
1683     sys_time_h
1684     sys_un_h
1685     sys_videoio_h
1686     termios_h
1687     udplite_h
1688     unistd_h
1689     windows_h
1690     winsock2_h
1691 "
1692
1693 INTRINSICS_LIST="
1694     intrinsics_neon
1695 "
1696
1697 MATH_FUNCS="
1698     atanf
1699     atan2f
1700     cbrt
1701     cbrtf
1702     cosf
1703     exp2
1704     exp2f
1705     expf
1706     isinf
1707     isnan
1708     ldexpf
1709     llrint
1710     llrintf
1711     log2
1712     log2f
1713     log10f
1714     lrint
1715     lrintf
1716     powf
1717     rint
1718     round
1719     roundf
1720     sinf
1721     trunc
1722     truncf
1723 "
1724
1725 SYSTEM_FUNCS="
1726     access
1727     aligned_malloc
1728     clock_gettime
1729     closesocket
1730     CommandLineToArgvW
1731     CoTaskMemFree
1732     CryptGenRandom
1733     dlopen
1734     fcntl
1735     flt_lim
1736     fork
1737     getaddrinfo
1738     gethrtime
1739     getopt
1740     GetProcessAffinityMask
1741     GetProcessMemoryInfo
1742     GetProcessTimes
1743     getrusage
1744     getservbyport
1745     GetSystemTimeAsFileTime
1746     gettimeofday
1747     glob
1748     glXGetProcAddress
1749     gmtime_r
1750     inet_aton
1751     isatty
1752     jack_port_get_latency_range
1753     kbhit
1754     localtime_r
1755     lzo1x_999_compress
1756     mach_absolute_time
1757     MapViewOfFile
1758     memalign
1759     mkstemp
1760     mmap
1761     mprotect
1762     nanosleep
1763     PeekNamedPipe
1764     posix_memalign
1765     pthread_cancel
1766     sched_getaffinity
1767     SetConsoleTextAttribute
1768     setmode
1769     setrlimit
1770     Sleep
1771     strerror_r
1772     sysconf
1773     sysctl
1774     usleep
1775     VirtualAlloc
1776     wglGetProcAddress
1777 "
1778
1779 TOOLCHAIN_FEATURES="
1780     as_dn_directive
1781     as_func
1782     as_object_arch
1783     asm_mod_q
1784     attribute_may_alias
1785     attribute_packed
1786     ebp_available
1787     ebx_available
1788     gnu_as
1789     gnu_windres
1790     ibm_asm
1791     inline_asm_labels
1792     inline_asm_nonlocal_labels
1793     inline_asm_direct_symbol_refs
1794     pragma_deprecated
1795     rsync_contimeout
1796     symver_asm_label
1797     symver_gnu_asm
1798     vfp_args
1799     xform_asm
1800     xmm_clobbers
1801 "
1802
1803 TYPES_LIST="
1804     CONDITION_VARIABLE_Ptr
1805     DXVA_PicParams_HEVC
1806     socklen_t
1807     struct_addrinfo
1808     struct_group_source_req
1809     struct_ip_mreq_source
1810     struct_ipv6_mreq
1811     struct_pollfd
1812     struct_rusage_ru_maxrss
1813     struct_sctp_event_subscribe
1814     struct_sockaddr_in6
1815     struct_sockaddr_sa_len
1816     struct_sockaddr_storage
1817     struct_stat_st_mtim_tv_nsec
1818     struct_v4l2_frmivalenum_discrete
1819 "
1820
1821 HAVE_LIST="
1822     $ARCH_EXT_LIST
1823     $(add_suffix _external $ARCH_EXT_LIST)
1824     $(add_suffix _inline   $ARCH_EXT_LIST)
1825     $ARCH_FEATURES
1826     $ATOMICS_LIST
1827     $BUILTIN_LIST
1828     $HAVE_LIST_CMDLINE
1829     $HAVE_LIST_PUB
1830     $HEADERS_LIST
1831     $INTRINSICS_LIST
1832     $MATH_FUNCS
1833     $SYSTEM_FUNCS
1834     $THREADS_LIST
1835     $TOOLCHAIN_FEATURES
1836     $TYPES_LIST
1837     atomics_native
1838     dos_paths
1839     dxva2api_cobj
1840     dxva2_lib
1841     libc_msvcrt
1842     libdc1394_1
1843     libdc1394_2
1844     makeinfo
1845     makeinfo_html
1846     perl
1847     pod2man
1848     sdl
1849     section_data_rel_ro
1850     texi2html
1851     threads
1852     vaapi_x11
1853     vdpau_x11
1854     xlib
1855 "
1856
1857 # options emitted with CONFIG_ prefix but not available on the command line
1858 CONFIG_EXTRA="
1859     aandcttables
1860     ac3dsp
1861     audio_frame_queue
1862     audiodsp
1863     blockdsp
1864     bswapdsp
1865     cabac
1866     dvprofile
1867     exif
1868     faandct
1869     faanidct
1870     fdctdsp
1871     fmtconvert
1872     frame_thread_encoder
1873     gcrypt
1874     golomb
1875     gplv3
1876     h263dsp
1877     h264chroma
1878     h264dsp
1879     h264pred
1880     h264qpel
1881     hpeldsp
1882     huffman
1883     huffyuvdsp
1884     huffyuvencdsp
1885     idctdsp
1886     iirfilter
1887     imdct15
1888     intrax8
1889     jpegtables
1890     lgplv3
1891     llauddsp
1892     llviddsp
1893     lpc
1894     me_cmp
1895     mpeg_er
1896     mpegaudio
1897     mpegaudiodsp
1898     mpegvideo
1899     mpegvideoenc
1900     nettle
1901     pixblockdsp
1902     qpeldsp
1903     qsv
1904     qsvdec
1905     qsvenc
1906     rangecoder
1907     riffdec
1908     riffenc
1909     rtpdec
1910     rtpenc_chain
1911     sinewin
1912     startcode
1913     tpeldsp
1914     videodsp
1915     vp3dsp
1916     wma_freqs
1917 "
1918
1919 CMDLINE_SELECT="
1920     $ARCH_EXT_LIST
1921     $CONFIG_LIST
1922     $HAVE_LIST_CMDLINE
1923     $THREADS_LIST
1924     asm
1925     cross_compile
1926     debug
1927     extra_warnings
1928     logging
1929     lto
1930     optimizations
1931     rpath
1932     stripping
1933 "
1934
1935 PATHS_LIST="
1936     bindir
1937     datadir
1938     docdir
1939     incdir
1940     libdir
1941     mandir
1942     prefix
1943     shlibdir
1944 "
1945
1946 CMDLINE_SET="
1947     $PATHS_LIST
1948     ar
1949     arch
1950     as
1951     assert_level
1952     build_suffix
1953     cc
1954     cpu
1955     cross_prefix
1956     cxx
1957     dep_cc
1958     doxygen
1959     extra_version
1960     gas
1961     host_cc
1962     host_cflags
1963     host_ld
1964     host_ldflags
1965     host_libs
1966     host_os
1967     install
1968     ld
1969     logfile
1970     malloc_prefix
1971     nm
1972     optflags
1973     pkg_config
1974     pkg_config_flags
1975     progs_suffix
1976     random_seed
1977     ranlib
1978     samples
1979     strip
1980     sws_max_filter_size
1981     sysinclude
1982     sysroot
1983     target_exec
1984     target_os
1985     target_path
1986     target_samples
1987     tempprefix
1988     toolchain
1989     valgrind
1990     yasmexe
1991 "
1992
1993 CMDLINE_APPEND="
1994     extra_cflags
1995     extra_cxxflags
1996     host_cppflags
1997 "
1998
1999 # code dependency declarations
2000
2001 # architecture extensions
2002
2003 armv5te_deps="arm"
2004 armv6_deps="arm"
2005 armv6t2_deps="arm"
2006 armv8_deps="aarch64"
2007 neon_deps_any="aarch64 arm"
2008 intrinsics_neon_deps="neon"
2009 vfp_deps_any="aarch64 arm"
2010 vfpv3_deps="vfp"
2011 setend_deps="arm"
2012
2013 map 'eval ${v}_inline_deps=inline_asm' $ARCH_EXT_LIST_ARM
2014
2015 mipsfpu_deps="mips"
2016 mipsdspr1_deps="mips"
2017 mipsdspr2_deps="mips"
2018 mips32r5_deps="mips"
2019 mips64r6_deps="mips"
2020 msa_deps="mips"
2021
2022 altivec_deps="ppc"
2023 ppc4xx_deps="ppc"
2024 vsx_deps="ppc"
2025
2026 cpunop_deps="i686"
2027 x86_64_select="i686"
2028 x86_64_suggest="fast_cmov"
2029
2030 amd3dnow_deps="mmx"
2031 amd3dnowext_deps="amd3dnow"
2032 i686_deps="x86"
2033 mmx_deps="x86"
2034 mmxext_deps="mmx"
2035 sse_deps="mmxext"
2036 sse2_deps="sse"
2037 sse3_deps="sse2"
2038 ssse3_deps="sse3"
2039 sse4_deps="ssse3"
2040 sse42_deps="sse4"
2041 avx_deps="sse42"
2042 xop_deps="avx"
2043 fma3_deps="avx"
2044 fma4_deps="avx"
2045 avx2_deps="avx"
2046
2047 mmx_external_deps="yasm"
2048 mmx_inline_deps="inline_asm"
2049 mmx_suggest="mmx_external mmx_inline"
2050
2051 for ext in $(filter_out mmx $ARCH_EXT_LIST_X86_SIMD); do
2052     eval dep=\$${ext}_deps
2053     eval ${ext}_external_deps='"${dep}_external"'
2054     eval ${ext}_inline_deps='"${dep}_inline"'
2055     eval ${ext}_suggest='"${ext}_external ${ext}_inline"'
2056 done
2057
2058 aligned_stack_if_any="aarch64 ppc x86"
2059 fast_64bit_if_any="aarch64 alpha ia64 mips64 parisc64 ppc64 sparc64 x86_64"
2060 fast_clz_if_any="aarch64 alpha avr32 mips ppc x86"
2061 fast_unaligned_if_any="aarch64 ppc x86"
2062 simd_align_16_if_any="altivec neon sse"
2063
2064 # system capabilities
2065
2066 symver_if_any="symver_asm_label symver_gnu_asm"
2067
2068 # threading support
2069 atomics_gcc_if_any="sync_val_compare_and_swap atomic_compare_exchange"
2070 atomics_suncc_if="atomic_cas_ptr machine_rw_barrier"
2071 atomics_win32_if="MemoryBarrier"
2072 atomics_native_if_any="$ATOMICS_LIST"
2073 w32threads_deps="atomics_native"
2074 threads_if_any="$THREADS_LIST"
2075
2076 # subsystems
2077 dct_select="rdft"
2078 error_resilience_select="me_cmp"
2079 faandct_deps="faan fdctdsp"
2080 faanidct_deps="faan idctdsp"
2081 frame_thread_encoder_deps="encoders threads"
2082 intrax8_select="error_resilience"
2083 mdct_select="fft"
2084 rdft_select="fft"
2085 me_cmp_select="fdctdsp idctdsp pixblockdsp"
2086 mpeg_er_select="error_resilience"
2087 mpegaudio_select="mpegaudiodsp"
2088 mpegaudiodsp_select="dct"
2089 mpegvideo_select="blockdsp h264chroma hpeldsp idctdsp me_cmp videodsp"
2090 mpegvideoenc_select="me_cmp mpegvideo pixblockdsp qpeldsp"
2091 qsvdec_select="qsv"
2092 qsvenc_select="qsv"
2093
2094 # decoders / encoders
2095 aac_decoder_select="imdct15 mdct sinewin"
2096 aac_encoder_select="audio_frame_queue iirfilter mdct sinewin"
2097 aac_latm_decoder_select="aac_decoder aac_latm_parser"
2098 ac3_decoder_select="ac3_parser ac3dsp bswapdsp fmtconvert mdct"
2099 ac3_fixed_decoder_select="ac3_parser ac3dsp bswapdsp mdct"
2100 ac3_encoder_select="ac3dsp audiodsp mdct me_cmp"
2101 ac3_fixed_encoder_select="ac3dsp audiodsp mdct me_cmp"
2102 aic_decoder_select="golomb idctdsp"
2103 alac_encoder_select="lpc"
2104 als_decoder_select="bswapdsp"
2105 amrnb_decoder_select="lsp"
2106 amrwb_decoder_select="lsp"
2107 amv_decoder_select="sp5x_decoder exif"
2108 amv_encoder_select="aandcttables jpegtables mpegvideoenc"
2109 ape_decoder_select="bswapdsp llauddsp"
2110 apng_decoder_select="zlib"
2111 apng_encoder_select="huffyuvencdsp zlib"
2112 asv1_decoder_select="blockdsp bswapdsp idctdsp"
2113 asv1_encoder_select="bswapdsp fdctdsp pixblockdsp"
2114 asv2_decoder_select="blockdsp bswapdsp idctdsp"
2115 asv2_encoder_select="bswapdsp fdctdsp pixblockdsp"
2116 atrac1_decoder_select="mdct sinewin"
2117 atrac3_decoder_select="mdct"
2118 atrac3p_decoder_select="mdct sinewin"
2119 avrn_decoder_select="exif jpegtables"
2120 bink_decoder_select="blockdsp hpeldsp"
2121 binkaudio_dct_decoder_select="mdct rdft dct sinewin wma_freqs"
2122 binkaudio_rdft_decoder_select="mdct rdft sinewin wma_freqs"
2123 cavs_decoder_select="blockdsp golomb h264chroma idctdsp qpeldsp videodsp"
2124 cllc_decoder_select="bswapdsp"
2125 comfortnoise_encoder_select="lpc"
2126 cook_decoder_select="audiodsp mdct sinewin"
2127 cscd_decoder_select="lzo"
2128 cscd_decoder_suggest="zlib"
2129 dca_decoder_select="fmtconvert mdct"
2130 dirac_decoder_select="dwt golomb videodsp mpegvideoenc"
2131 dnxhd_decoder_select="blockdsp idctdsp"
2132 dnxhd_encoder_select="aandcttables blockdsp fdctdsp idctdsp mpegvideoenc pixblockdsp"
2133 dvvideo_decoder_select="dvprofile idctdsp"
2134 dvvideo_encoder_select="dvprofile fdctdsp me_cmp pixblockdsp"
2135 dxa_decoder_select="zlib"
2136 eac3_decoder_select="ac3_decoder"
2137 eac3_encoder_select="ac3_encoder"
2138 eamad_decoder_select="aandcttables blockdsp bswapdsp idctdsp mpegvideo"
2139 eatgq_decoder_select="aandcttables"
2140 eatqi_decoder_select="aandcttables blockdsp bswapdsp idctdsp mpeg1video_decoder"
2141 exr_decoder_select="zlib"
2142 ffv1_decoder_select="golomb rangecoder"
2143 ffv1_encoder_select="rangecoder"
2144 ffvhuff_decoder_select="huffyuv_decoder"
2145 ffvhuff_encoder_select="huffyuv_encoder"
2146 fic_decoder_select="golomb"
2147 flac_decoder_select="golomb"
2148 flac_encoder_select="bswapdsp golomb lpc"
2149 flashsv_decoder_select="zlib"
2150 flashsv_encoder_select="zlib"
2151 flashsv2_encoder_select="zlib"
2152 flashsv2_decoder_select="zlib"
2153 flv_decoder_select="h263_decoder"
2154 flv_encoder_select="h263_encoder"
2155 fourxm_decoder_select="blockdsp bswapdsp"
2156 fraps_decoder_select="bswapdsp huffman"
2157 g2m_decoder_select="blockdsp idctdsp jpegtables zlib"
2158 g729_decoder_select="audiodsp"
2159 h261_decoder_select="mpeg_er mpegvideo"
2160 h261_encoder_select="aandcttables mpegvideoenc"
2161 h263_decoder_select="error_resilience h263_parser h263dsp mpeg_er mpegvideo qpeldsp"
2162 h263_encoder_select="aandcttables h263dsp mpegvideoenc"
2163 h263i_decoder_select="h263_decoder"
2164 h263p_decoder_select="h263_decoder"
2165 h263p_encoder_select="h263_encoder"
2166 h264_decoder_select="cabac golomb h264chroma h264dsp h264pred h264qpel startcode videodsp"
2167 h264_decoder_suggest="error_resilience"
2168 h264_qsv_decoder_deps="libmfx"
2169 h264_qsv_decoder_select="h264_mp4toannexb_bsf h264_parser qsvdec h264_qsv_hwaccel"
2170 h264_qsv_encoder_deps="libmfx"
2171 h264_qsv_encoder_select="qsvenc"
2172 hevc_decoder_select="bswapdsp cabac golomb videodsp"
2173 huffyuv_decoder_select="bswapdsp huffyuvdsp llviddsp"
2174 huffyuv_encoder_select="bswapdsp huffman huffyuvencdsp llviddsp"
2175 iac_decoder_select="imc_decoder"
2176 imc_decoder_select="bswapdsp fft mdct sinewin"
2177 indeo3_decoder_select="hpeldsp"
2178 interplay_video_decoder_select="hpeldsp"
2179 jpegls_decoder_select="golomb mjpeg_decoder"
2180 jpegls_encoder_select="golomb"
2181 jv_decoder_select="blockdsp"
2182 lagarith_decoder_select="huffyuvdsp"
2183 ljpeg_encoder_select="aandcttables idctdsp jpegtables"
2184 loco_decoder_select="golomb"
2185 mdec_decoder_select="blockdsp idctdsp mpegvideo"
2186 metasound_decoder_select="lsp mdct sinewin"
2187 mimic_decoder_select="blockdsp bswapdsp hpeldsp idctdsp"
2188 mjpeg_decoder_select="blockdsp hpeldsp exif idctdsp jpegtables"
2189 mjpeg_encoder_select="aandcttables jpegtables mpegvideoenc"
2190 mjpegb_decoder_select="mjpeg_decoder"
2191 mlp_decoder_select="mlp_parser"
2192 motionpixels_decoder_select="bswapdsp"
2193 mp1_decoder_select="mpegaudio"
2194 mp1float_decoder_select="mpegaudio"
2195 mp2_decoder_select="mpegaudio"
2196 mp2float_decoder_select="mpegaudio"
2197 mp3_decoder_select="mpegaudio"
2198 mp3adu_decoder_select="mpegaudio"
2199 mp3adufloat_decoder_select="mpegaudio"
2200 mp3float_decoder_select="mpegaudio"
2201 mp3on4_decoder_select="mpegaudio"
2202 mp3on4float_decoder_select="mpegaudio"
2203 mpc7_decoder_select="bswapdsp mpegaudiodsp"
2204 mpc8_decoder_select="mpegaudiodsp"
2205 mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h"
2206 mpeg_xvmc_decoder_select="mpeg2video_decoder"
2207 mpegvideo_decoder_select="error_resilience mpeg_er mpegvideo"
2208 mpeg1video_decoder_select="error_resilience mpeg_er mpegvideo"
2209 mpeg1video_encoder_select="aandcttables mpegvideoenc h263dsp"
2210 mpeg2video_decoder_select="error_resilience mpeg_er mpegvideo"
2211 mpeg2video_encoder_select="aandcttables mpegvideoenc h263dsp"
2212 mpeg4_decoder_select="h263_decoder mpeg4video_parser"
2213 mpeg4_encoder_select="h263_encoder"
2214 msmpeg4v1_decoder_select="h263_decoder"
2215 msmpeg4v2_decoder_select="h263_decoder"
2216 msmpeg4v2_encoder_select="h263_encoder"
2217 msmpeg4v3_decoder_select="h263_decoder"
2218 msmpeg4v3_encoder_select="h263_encoder"
2219 mss2_decoder_select="error_resilience mpeg_er qpeldsp vc1_decoder"
2220 mxpeg_decoder_select="mjpeg_decoder"
2221 nellymoser_decoder_select="mdct sinewin"
2222 nellymoser_encoder_select="audio_frame_queue mdct sinewin"
2223 nuv_decoder_select="idctdsp lzo"
2224 on2avc_decoder_select="mdct"
2225 opus_decoder_deps="swresample"
2226 opus_decoder_select="imdct15"
2227 png_decoder_select="zlib"
2228 png_encoder_select="huffyuvencdsp zlib"
2229 prores_decoder_select="blockdsp idctdsp"
2230 prores_encoder_select="fdctdsp"
2231 qcelp_decoder_select="lsp"
2232 qdm2_decoder_select="mdct rdft mpegaudiodsp"
2233 ra_144_encoder_select="audio_frame_queue lpc audiodsp"
2234 ra_144_decoder_select="audiodsp"
2235 ralf_decoder_select="golomb"
2236 rawvideo_decoder_select="bswapdsp"
2237 rtjpeg_decoder_select="me_cmp"
2238 rv10_decoder_select="error_resilience h263_decoder h263dsp mpeg_er"
2239 rv10_encoder_select="h263_encoder"
2240 rv20_decoder_select="error_resilience h263_decoder h263dsp mpeg_er"
2241 rv20_encoder_select="h263_encoder"
2242 rv30_decoder_select="error_resilience golomb h264chroma h264pred h264qpel mpeg_er mpegvideo videodsp"
2243 rv40_decoder_select="error_resilience golomb h264chroma h264pred h264qpel mpeg_er mpegvideo videodsp"
2244 shorten_decoder_select="golomb"
2245 sipr_decoder_select="lsp"
2246 snow_decoder_select="dwt h264qpel hpeldsp me_cmp rangecoder videodsp"
2247 snow_encoder_select="aandcttables dwt h264qpel hpeldsp me_cmp mpegvideoenc rangecoder"
2248 sonic_decoder_select="golomb rangecoder"
2249 sonic_encoder_select="golomb rangecoder"
2250 sonic_ls_encoder_select="golomb rangecoder"
2251 sp5x_decoder_select="mjpeg_decoder"
2252 svq1_decoder_select="hpeldsp"
2253 svq1_encoder_select="aandcttables hpeldsp me_cmp mpegvideoenc"
2254 svq3_decoder_select="h264_decoder hpeldsp tpeldsp"
2255 svq3_decoder_suggest="zlib"
2256 tak_decoder_select="audiodsp"
2257 tdsc_decoder_select="zlib mjpeg_decoder"
2258 theora_decoder_select="vp3_decoder"
2259 thp_decoder_select="mjpeg_decoder"
2260 tiff_decoder_suggest="zlib lzma"
2261 tiff_encoder_suggest="zlib"
2262 truehd_decoder_select="mlp_parser"
2263 truemotion2_decoder_select="bswapdsp"
2264 truespeech_decoder_select="bswapdsp"
2265 tscc_decoder_select="zlib"
2266 twinvq_decoder_select="mdct lsp sinewin"
2267 utvideo_decoder_select="bswapdsp"
2268 utvideo_encoder_select="bswapdsp huffman huffyuvencdsp"
2269 vble_decoder_select="huffyuvdsp"
2270 vc1_decoder_select="blockdsp error_resilience h263_decoder h264chroma h264qpel intrax8 mpeg_er qpeldsp startcode"
2271 vc1image_decoder_select="vc1_decoder"
2272 vorbis_decoder_select="mdct"
2273 vorbis_encoder_select="mdct"
2274 vp3_decoder_select="hpeldsp vp3dsp videodsp"
2275 vp5_decoder_select="h264chroma hpeldsp videodsp vp3dsp"
2276 vp6_decoder_select="h264chroma hpeldsp huffman videodsp vp3dsp"
2277 vp6a_decoder_select="vp6_decoder"
2278 vp6f_decoder_select="vp6_decoder"
2279 vp7_decoder_select="h264pred videodsp"
2280 vp8_decoder_select="h264pred videodsp"
2281 vp9_decoder_select="videodsp vp9_parser"
2282 webp_decoder_select="vp8_decoder"
2283 wmalossless_decoder_select="llauddsp"
2284 wmapro_decoder_select="mdct sinewin wma_freqs"
2285 wmav1_decoder_select="mdct sinewin wma_freqs"
2286 wmav1_encoder_select="mdct sinewin wma_freqs"
2287 wmav2_decoder_select="mdct sinewin wma_freqs"
2288 wmav2_encoder_select="mdct sinewin wma_freqs"
2289 wmavoice_decoder_select="lsp rdft dct mdct sinewin"
2290 wmv1_decoder_select="h263_decoder"
2291 wmv1_encoder_select="h263_encoder"
2292 wmv2_decoder_select="blockdsp h263_decoder idctdsp intrax8 videodsp"
2293 wmv2_encoder_select="h263_encoder"
2294 wmv3_decoder_select="vc1_decoder"
2295 wmv3image_decoder_select="wmv3_decoder"
2296 zerocodec_decoder_select="zlib"
2297 zlib_decoder_select="zlib"
2298 zlib_encoder_select="zlib"
2299 zmbv_decoder_select="zlib"
2300 zmbv_encoder_select="zlib"
2301
2302 # hardware accelerators
2303 crystalhd_deps="libcrystalhd_libcrystalhd_if_h"
2304 dxva2_deps="dxva2api_h"
2305 vaapi_deps="va_va_h"
2306 vda_deps="VideoDecodeAcceleration_VDADecoder_h pthreads"
2307 vda_extralibs="-framework CoreFoundation -framework VideoDecodeAcceleration -framework QuartzCore"
2308 vdpau_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
2309 xvmc_deps="X11_extensions_XvMClib_h"
2310
2311 h263_vaapi_hwaccel_deps="vaapi"
2312 h263_vaapi_hwaccel_select="h263_decoder"
2313 h263_vdpau_hwaccel_deps="vdpau"
2314 h263_vdpau_hwaccel_select="h263_decoder"
2315 h264_crystalhd_decoder_select="crystalhd h264_mp4toannexb_bsf h264_parser"
2316 h264_dxva2_hwaccel_deps="dxva2"
2317 h264_dxva2_hwaccel_select="h264_decoder"
2318 h264_mmal_decoder_deps="mmal"
2319 h264_mmal_hwaccel_deps="mmal"
2320 h264_mmal_decoder_select="h264_decoder"
2321 h264_mmal_encoder_deps="mmal"
2322 h264_qsv_hwaccel_deps="libmfx"
2323 h264_vaapi_hwaccel_deps="vaapi"
2324 h264_vaapi_hwaccel_select="h264_decoder"
2325 h264_vda_decoder_deps="vda"
2326 h264_vda_decoder_select="h264_decoder"
2327 h264_vda_hwaccel_deps="vda"
2328 h264_vda_hwaccel_select="h264_decoder"
2329 h264_vda_old_hwaccel_deps="vda"
2330 h264_vda_old_hwaccel_select="h264_decoder"
2331 h264_vdpau_decoder_deps="vdpau"
2332 h264_vdpau_decoder_select="h264_decoder"
2333 h264_vdpau_hwaccel_deps="vdpau"
2334 h264_vdpau_hwaccel_select="h264_decoder"
2335 hevc_dxva2_hwaccel_deps="dxva2 DXVA_PicParams_HEVC"
2336 hevc_dxva2_hwaccel_select="hevc_decoder"
2337 mpeg_vdpau_decoder_deps="vdpau"
2338 mpeg_vdpau_decoder_select="mpeg2video_decoder"
2339 mpeg_xvmc_hwaccel_deps="xvmc"
2340 mpeg_xvmc_hwaccel_select="mpeg2video_decoder"
2341 mpeg1_vdpau_decoder_deps="vdpau"
2342 mpeg1_vdpau_decoder_select="mpeg1video_decoder"
2343 mpeg1_vdpau_hwaccel_deps="vdpau"
2344 mpeg1_vdpau_hwaccel_select="mpeg1video_decoder"
2345 mpeg1_xvmc_hwaccel_deps="xvmc"
2346 mpeg1_xvmc_hwaccel_select="mpeg1video_decoder"
2347 mpeg2_crystalhd_decoder_select="crystalhd"
2348 mpeg2_dxva2_hwaccel_deps="dxva2"
2349 mpeg2_dxva2_hwaccel_select="mpeg2video_decoder"
2350 mpeg2_vaapi_hwaccel_deps="vaapi"
2351 mpeg2_vaapi_hwaccel_select="mpeg2video_decoder"
2352 mpeg2_vdpau_hwaccel_deps="vdpau"
2353 mpeg2_vdpau_hwaccel_select="mpeg2video_decoder"
2354 mpeg2_xvmc_hwaccel_deps="xvmc"
2355 mpeg2_xvmc_hwaccel_select="mpeg2video_decoder"
2356 mpeg4_crystalhd_decoder_select="crystalhd"
2357 mpeg4_vaapi_hwaccel_deps="vaapi"
2358 mpeg4_vaapi_hwaccel_select="mpeg4_decoder"
2359 mpeg4_vdpau_decoder_deps="vdpau"
2360 mpeg4_vdpau_decoder_select="mpeg4_decoder"
2361 mpeg4_vdpau_hwaccel_deps="vdpau"
2362 mpeg4_vdpau_hwaccel_select="mpeg4_decoder"
2363 msmpeg4_crystalhd_decoder_select="crystalhd"
2364 vc1_crystalhd_decoder_select="crystalhd"
2365 vc1_dxva2_hwaccel_deps="dxva2"
2366 vc1_dxva2_hwaccel_select="vc1_decoder"
2367 vc1_vaapi_hwaccel_deps="vaapi"
2368 vc1_vaapi_hwaccel_select="vc1_decoder"
2369 vc1_vdpau_decoder_deps="vdpau"
2370 vc1_vdpau_decoder_select="vc1_decoder"
2371 vc1_vdpau_hwaccel_deps="vdpau"
2372 vc1_vdpau_hwaccel_select="vc1_decoder"
2373 wmv3_crystalhd_decoder_select="crystalhd"
2374 wmv3_dxva2_hwaccel_select="vc1_dxva2_hwaccel"
2375 wmv3_vaapi_hwaccel_select="vc1_vaapi_hwaccel"
2376 wmv3_vdpau_decoder_select="vc1_vdpau_decoder"
2377 wmv3_vdpau_hwaccel_select="vc1_vdpau_hwaccel"
2378
2379 # parsers
2380 h264_parser_select="h264_decoder"
2381 hevc_parser_select="hevc_decoder"
2382 mpegvideo_parser_select="mpegvideo"
2383 mpeg4video_parser_select="error_resilience h263dsp mpeg_er mpegvideo qpeldsp"
2384 vc1_parser_select="mpegvideo startcode vc1_decoder"
2385
2386 # bitstream_filters
2387 mjpeg2jpeg_bsf_select="jpegtables"
2388
2389 # external libraries
2390 libaacplus_encoder_deps="libaacplus"
2391 libcelt_decoder_deps="libcelt"
2392 libdcadec_decoder_deps="libdcadec"
2393 libfaac_encoder_deps="libfaac"
2394 libfaac_encoder_select="audio_frame_queue"
2395 libfdk_aac_decoder_deps="libfdk_aac"
2396 libfdk_aac_encoder_deps="libfdk_aac"
2397 libfdk_aac_encoder_select="audio_frame_queue"
2398 libgme_demuxer_deps="libgme"
2399 libgsm_decoder_deps="libgsm"
2400 libgsm_encoder_deps="libgsm"
2401 libgsm_ms_decoder_deps="libgsm"
2402 libgsm_ms_encoder_deps="libgsm"
2403 libilbc_decoder_deps="libilbc"
2404 libilbc_encoder_deps="libilbc"
2405 libmodplug_demuxer_deps="libmodplug"
2406 libmp3lame_encoder_deps="libmp3lame"
2407 libmp3lame_encoder_select="audio_frame_queue"
2408 libopencore_amrnb_decoder_deps="libopencore_amrnb"
2409 libopencore_amrnb_encoder_deps="libopencore_amrnb"
2410 libopencore_amrnb_encoder_select="audio_frame_queue"
2411 libopencore_amrwb_decoder_deps="libopencore_amrwb"
2412 libopenh264_encoder_deps="libopenh264"
2413 libopenjpeg_decoder_deps="libopenjpeg"
2414 libopenjpeg_encoder_deps="libopenjpeg"
2415 libopus_decoder_deps="libopus"
2416 libopus_encoder_deps="libopus"
2417 libopus_encoder_select="audio_frame_queue"
2418 libquvi_demuxer_deps="libquvi"
2419 libschroedinger_decoder_deps="libschroedinger"
2420 libschroedinger_encoder_deps="libschroedinger"
2421 libshine_encoder_deps="libshine"
2422 libshine_encoder_select="audio_frame_queue"
2423 libspeex_decoder_deps="libspeex"
2424 libspeex_encoder_deps="libspeex"
2425 libspeex_encoder_select="audio_frame_queue"
2426 libstagefright_h264_decoder_deps="libstagefright_h264"
2427 libtheora_encoder_deps="libtheora"
2428 libtwolame_encoder_deps="libtwolame"
2429 libvo_aacenc_encoder_deps="libvo_aacenc"
2430 libvo_aacenc_encoder_select="audio_frame_queue"
2431 libvo_amrwbenc_encoder_deps="libvo_amrwbenc"
2432 libvorbis_decoder_deps="libvorbis"
2433 libvorbis_encoder_deps="libvorbis"
2434 libvorbis_encoder_select="audio_frame_queue"
2435 libvpx_vp8_decoder_deps="libvpx"
2436 libvpx_vp8_encoder_deps="libvpx"
2437 libvpx_vp9_decoder_deps="libvpx"
2438 libvpx_vp9_encoder_deps="libvpx"
2439 libwavpack_encoder_deps="libwavpack"
2440 libwebp_encoder_deps="libwebp"
2441 libx264_encoder_deps="libx264"
2442 libx264rgb_encoder_deps="libx264"
2443 libx264rgb_encoder_select="libx264_encoder"
2444 libx265_encoder_deps="libx265"
2445 libxavs_encoder_deps="libxavs"
2446 libxvid_encoder_deps="libxvid"
2447 libutvideo_decoder_deps="libutvideo"
2448 libutvideo_encoder_deps="libutvideo"
2449 libzvbi_teletext_decoder_deps="libzvbi"
2450 nvenc_encoder_deps="nvenc"
2451 nvenc_h265_encoder_deps="nvenc"
2452
2453 # demuxers / muxers
2454 ac3_demuxer_select="ac3_parser"
2455 asf_demuxer_select="riffdec"
2456 asf_muxer_select="riffenc"
2457 asf_stream_muxer_select="asf_muxer"
2458 avi_demuxer_select="riffdec exif"
2459 avi_muxer_select="riffenc"
2460 avisynth_demuxer_deps="avisynth"
2461 avisynth_demuxer_select="riffdec"
2462 caf_demuxer_select="riffdec"
2463 dash_muxer_select="mp4_muxer"
2464 dirac_demuxer_select="dirac_parser"
2465 dts_demuxer_select="dca_parser"
2466 dtshd_demuxer_select="dca_parser"
2467 dv_demuxer_select="dvprofile"
2468 dv_muxer_select="dvprofile"
2469 dxa_demuxer_select="riffdec"
2470 eac3_demuxer_select="ac3_parser"
2471 f4v_muxer_select="mov_muxer"
2472 flac_demuxer_select="flac_parser"
2473 hds_muxer_select="flv_muxer"
2474 hls_muxer_select="mpegts_muxer"
2475 image2_alias_pix_demuxer_select="image2_demuxer"
2476 image2_brender_pix_demuxer_select="image2_demuxer"
2477 ipod_muxer_select="mov_muxer"
2478 ismv_muxer_select="mov_muxer"
2479 libnut_demuxer_deps="libnut"
2480 libnut_muxer_deps="libnut"
2481 matroska_audio_muxer_select="matroska_muxer"
2482 matroska_demuxer_select="riffdec"
2483 matroska_demuxer_suggest="bzlib lzo zlib"
2484 matroska_muxer_select="riffenc"
2485 mmf_muxer_select="riffenc"
2486 mov_demuxer_select="riffdec"
2487 mov_demuxer_suggest="zlib"
2488 mov_muxer_select="riffenc rtpenc_chain"
2489 mp3_demuxer_select="mpegaudio_parser"
2490 mp4_muxer_select="mov_muxer"
2491 mpegts_muxer_select="adts_muxer latm_muxer"
2492 mpegtsraw_demuxer_select="mpegts_demuxer"
2493 mxf_d10_muxer_select="mxf_muxer"
2494 mxf_opatom_muxer_select="mxf_muxer"
2495 nut_muxer_select="riffenc"
2496 nuv_demuxer_select="riffdec"
2497 oga_muxer_select="ogg_muxer"
2498 ogg_demuxer_select="golomb"
2499 opus_muxer_select="ogg_muxer"
2500 psp_muxer_select="mov_muxer"
2501 rtp_demuxer_select="sdp_demuxer"
2502 rtpdec_select="asf_demuxer jpegtables mov_demuxer mpegts_demuxer rm_demuxer rtp_protocol"
2503 rtsp_demuxer_select="http_protocol rtpdec"
2504 rtsp_muxer_select="rtp_muxer http_protocol rtp_protocol rtpenc_chain"
2505 sap_demuxer_select="sdp_demuxer"
2506 sap_muxer_select="rtp_muxer rtp_protocol rtpenc_chain"
2507 sdp_demuxer_select="rtpdec"
2508 smoothstreaming_muxer_select="ismv_muxer"
2509 spdif_muxer_select="aac_parser"
2510 spx_muxer_select="ogg_muxer"
2511 tak_demuxer_select="tak_parser"
2512 tg2_muxer_select="mov_muxer"
2513 tgp_muxer_select="mov_muxer"
2514 vobsub_demuxer_select="mpegps_demuxer"
2515 w64_demuxer_select="wav_demuxer"
2516 w64_muxer_select="wav_muxer"
2517 wav_demuxer_select="riffdec"
2518 wav_muxer_select="riffenc"
2519 webm_muxer_select="riffenc"
2520 wtv_demuxer_select="riffdec"
2521 wtv_muxer_select="riffenc"
2522 xmv_demuxer_select="riffdec"
2523 xwma_demuxer_select="riffdec"
2524
2525 # indevs / outdevs
2526 alsa_indev_deps="alsa_asoundlib_h snd_pcm_htimestamp"
2527 alsa_outdev_deps="alsa_asoundlib_h"
2528 avfoundation_indev_extralibs="-framework CoreVideo -framework Foundation -framework AVFoundation -framework CoreMedia"
2529 avfoundation_indev_select="avfoundation"
2530 bktr_indev_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
2531 caca_outdev_deps="libcaca"
2532 decklink_outdev_deps="decklink pthreads"
2533 decklink_outdev_extralibs="-lstdc++"
2534 decklink_indev_deps="decklink pthreads"
2535 decklink_indev_extralibs="-lstdc++"
2536 dshow_indev_deps="IBaseFilter"
2537 dshow_indev_extralibs="-lpsapi -lole32 -lstrmiids -luuid -loleaut32"
2538 dv1394_indev_deps="dv1394"
2539 dv1394_indev_select="dv_demuxer"
2540 fbdev_indev_deps="linux_fb_h"
2541 fbdev_outdev_deps="linux_fb_h"
2542 gdigrab_indev_deps="CreateDIBSection"
2543 gdigrab_indev_extralibs="-lgdi32"
2544 gdigrab_indev_select="bmp_decoder"
2545 iec61883_indev_deps="libiec61883"
2546 jack_indev_deps="jack_jack_h sem_timedwait"
2547 lavfi_indev_deps="avfilter"
2548 libcdio_indev_deps="libcdio"
2549 libdc1394_indev_deps="libdc1394"
2550 libv4l2_indev_deps="libv4l2"
2551 openal_indev_deps="openal"
2552 opengl_outdev_deps="opengl"
2553 oss_indev_deps_any="soundcard_h sys_soundcard_h"
2554 oss_outdev_deps_any="soundcard_h sys_soundcard_h"
2555 pulse_indev_deps="libpulse"
2556 pulse_outdev_deps="libpulse"
2557 qtkit_indev_extralibs="-framework QTKit -framework Foundation -framework QuartzCore"
2558 qtkit_indev_select="qtkit"
2559 sdl_outdev_deps="sdl"
2560 sndio_indev_deps="sndio_h"
2561 sndio_outdev_deps="sndio_h"
2562 v4l_indev_deps="linux_videodev_h"
2563 v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h"
2564 v4l2_outdev_deps_any="linux_videodev2_h sys_videoio_h"
2565 vfwcap_indev_deps="capCreateCaptureWindow vfwcap_defines"
2566 vfwcap_indev_extralibs="-lavicap32"
2567 xv_outdev_deps="X11_extensions_Xvlib_h XvGetPortAttribute"
2568 xv_outdev_extralibs="-lXv -lX11 -lXext"
2569 x11grab_indev_deps="x11grab"
2570 x11grab_xcb_indev_deps="libxcb"
2571
2572 # protocols
2573 bluray_protocol_deps="libbluray"
2574 ffrtmpcrypt_protocol_deps="!librtmp_protocol"
2575 ffrtmpcrypt_protocol_deps_any="gcrypt nettle openssl"
2576 ffrtmpcrypt_protocol_select="tcp_protocol"
2577 ffrtmphttp_protocol_deps="!librtmp_protocol"
2578 ffrtmphttp_protocol_select="http_protocol"
2579 ftp_protocol_select="tcp_protocol"
2580 gopher_protocol_select="network"
2581 http_protocol_select="tcp_protocol"
2582 httpproxy_protocol_select="tcp_protocol"
2583 https_protocol_select="tls_protocol"
2584 icecast_protocol_select="http_protocol"
2585 librtmp_protocol_deps="librtmp"
2586 librtmpe_protocol_deps="librtmp"
2587 librtmps_protocol_deps="librtmp"
2588 librtmpt_protocol_deps="librtmp"
2589 librtmpte_protocol_deps="librtmp"
2590 libsmbclient_protocol_deps="libsmbclient gplv3"
2591 libssh_protocol_deps="libssh"
2592 mmsh_protocol_select="http_protocol"
2593 mmst_protocol_select="network"
2594 rtmp_protocol_deps="!librtmp_protocol"
2595 rtmp_protocol_select="tcp_protocol"
2596 rtmpe_protocol_select="ffrtmpcrypt_protocol"
2597 rtmps_protocol_deps="!librtmp_protocol"
2598 rtmps_protocol_select="tls_protocol"
2599 rtmpt_protocol_select="ffrtmphttp_protocol"
2600 rtmpte_protocol_select="ffrtmpcrypt_protocol ffrtmphttp_protocol"
2601 rtmpts_protocol_select="ffrtmphttp_protocol https_protocol"
2602 rtp_protocol_select="udp_protocol"
2603 sctp_protocol_deps="struct_sctp_event_subscribe"
2604 sctp_protocol_select="network"
2605 srtp_protocol_select="rtp_protocol"
2606 tcp_protocol_select="network"
2607 tls_protocol_deps_any="openssl gnutls"
2608 tls_protocol_select="tcp_protocol"
2609 udp_protocol_select="network"
2610 udplite_protocol_select="network"
2611 unix_protocol_deps="sys_un_h"
2612 unix_protocol_select="network"
2613
2614 # filters
2615 amovie_filter_deps="avcodec avformat"
2616 aresample_filter_deps="swresample"
2617 ass_filter_deps="libass"
2618 asyncts_filter_deps="avresample"
2619 atempo_filter_deps="avcodec"
2620 atempo_filter_select="rdft"
2621 azmq_filter_deps="libzmq"
2622 blackframe_filter_deps="gpl"
2623 boxblur_filter_deps="gpl"
2624 bs2b_filter_deps="libbs2b"
2625 colormatrix_filter_deps="gpl"
2626 cropdetect_filter_deps="gpl"
2627 delogo_filter_deps="gpl"
2628 deshake_filter_select="pixelutils"
2629 drawtext_filter_deps="libfreetype"
2630 ebur128_filter_deps="gpl"
2631 eq_filter_deps="gpl"
2632 fftfilt_filter_deps="avcodec"
2633 fftfilt_filter_select="rdft"
2634 flite_filter_deps="libflite"
2635 frei0r_filter_deps="frei0r dlopen"
2636 frei0r_src_filter_deps="frei0r dlopen"
2637 fspp_filter_deps="gpl"
2638 geq_filter_deps="gpl"
2639 histeq_filter_deps="gpl"
2640 hqdn3d_filter_deps="gpl"
2641 interlace_filter_deps="gpl"
2642 kerndeint_filter_deps="gpl"
2643 ladspa_filter_deps="ladspa dlopen"
2644 mcdeint_filter_deps="avcodec gpl"
2645 movie_filter_deps="avcodec avformat"
2646 mpdecimate_filter_deps="gpl"
2647 mpdecimate_filter_select="pixelutils"
2648 mptestsrc_filter_deps="gpl"
2649 negate_filter_deps="lut_filter"
2650 perspective_filter_deps="gpl"
2651 pp7_filter_deps="gpl"
2652 ocv_filter_deps="libopencv"
2653 owdenoise_filter_deps="gpl"
2654 pan_filter_deps="swresample"
2655 phase_filter_deps="gpl"
2656 pp_filter_deps="gpl postproc"
2657 pullup_filter_deps="gpl"
2658 removelogo_filter_deps="avcodec avformat swscale"
2659 repeatfields_filter_deps="gpl"
2660 resample_filter_deps="avresample"
2661 sab_filter_deps="gpl swscale"
2662 scale_filter_deps="swscale"
2663 select_filter_select="pixelutils"
2664 smartblur_filter_deps="gpl swscale"
2665 showspectrum_filter_deps="avcodec"
2666 showspectrum_filter_select="rdft"
2667 spp_filter_deps="gpl avcodec"
2668 spp_filter_select="fft idctdsp fdctdsp me_cmp pixblockdsp"
2669 stereo3d_filter_deps="gpl"
2670 subtitles_filter_deps="avformat avcodec libass"
2671 super2xsai_filter_deps="gpl"
2672 tinterlace_filter_deps="gpl"
2673 vidstabdetect_filter_deps="libvidstab"
2674 vidstabtransform_filter_deps="libvidstab"
2675 pixfmts_super2xsai_test_deps="super2xsai_filter"
2676 tinterlace_merge_test_deps="tinterlace_filter"
2677 tinterlace_pad_test_deps="tinterlace_filter"
2678 uspp_filter_deps="gpl avcodec"
2679 zmq_filter_deps="libzmq"
2680 zoompan_filter_deps="swscale"
2681
2682 # examples
2683 avio_reading="avformat avcodec avutil"
2684 avio_list_dir="avformat avutil"
2685 avcodec_example_deps="avcodec avutil"
2686 decoding_encoding_example_deps="avcodec avformat avutil"
2687 demuxing_decoding_example_deps="avcodec avformat avutil"
2688 extract_mvs_example_deps="avcodec avformat avutil"
2689 filter_audio_example_deps="avfilter avutil"
2690 filtering_audio_example_deps="avfilter avcodec avformat avutil"
2691 filtering_video_example_deps="avfilter avcodec avformat avutil"
2692 metadata_example_deps="avformat avutil"
2693 muxing_example_deps="avcodec avformat avutil swscale"
2694 qsvdec_example_deps="avcodec avutil libmfx h264_qsv_decoder vaapi_x11"
2695 remuxing_example_deps="avcodec avformat avutil"
2696 resampling_audio_example_deps="avutil swresample"
2697 scaling_video_example_deps="avutil swscale"
2698 transcode_aac_example_deps="avcodec avformat swresample"
2699 transcoding_example_deps="avfilter avcodec avformat avutil"
2700
2701 # libraries, in linking order
2702 avcodec_deps="avutil"
2703 avdevice_deps="avformat avcodec avutil"
2704 avfilter_deps="avutil"
2705 avformat_deps="avcodec avutil"
2706 avresample_deps="avutil"
2707 postproc_deps="avutil gpl"
2708 swresample_deps="avutil"
2709 swscale_deps="avutil"
2710
2711 # programs
2712 ffmpeg_deps="avcodec avfilter avformat swresample"
2713 ffmpeg_select="aformat_filter anull_filter atrim_filter format_filter
2714                null_filter
2715                setpts_filter trim_filter"
2716 ffplay_deps="avcodec avformat swscale swresample sdl"
2717 ffplay_libs='$sdl_libs'
2718 ffplay_select="rdft crop_filter transpose_filter hflip_filter vflip_filter rotate_filter"
2719 ffprobe_deps="avcodec avformat"
2720 ffserver_deps="avformat fork sarestart"
2721 ffserver_select="ffm_muxer rtp_protocol rtsp_demuxer"
2722
2723 # documentation
2724 podpages_deps="perl"
2725 manpages_deps="perl pod2man"
2726 htmlpages_deps="perl"
2727 htmlpages_deps_any="makeinfo_html texi2html"
2728 txtpages_deps="perl makeinfo"
2729 doc_deps_any="manpages htmlpages podpages txtpages"
2730
2731 # default parameters
2732
2733 logfile="config.log"
2734
2735 # installation paths
2736 prefix_default="/usr/local"
2737 bindir_default='${prefix}/bin'
2738 datadir_default='${prefix}/share/ffmpeg'
2739 docdir_default='${prefix}/share/doc/ffmpeg'
2740 incdir_default='${prefix}/include'
2741 libdir_default='${prefix}/lib'
2742 mandir_default='${prefix}/share/man'
2743
2744 # toolchain
2745 ar_default="ar"
2746 cc_default="gcc"
2747 cxx_default="g++"
2748 host_cc_default="gcc"
2749 cp_f="cp -f"
2750 doxygen_default="doxygen"
2751 install="install"
2752 ln_s="ln -s -f"
2753 nm_default="nm -g"
2754 objformat="elf"
2755 pkg_config_default=pkg-config
2756 if ranlib 2>&1 | grep -q "\-D "; then
2757     ranlib_default="ranlib -D"
2758 else
2759     ranlib_default="ranlib"
2760 fi
2761 strip_default="strip"
2762 yasmexe_default="yasm"
2763 windres_default="windres"
2764
2765 # OS
2766 target_os_default=$(tolower $(uname -s))
2767 host_os=$target_os_default
2768
2769 # machine
2770 if test "$target_os_default" = aix; then
2771     arch_default=$(uname -p)
2772     strip_default="strip -X32_64"
2773 else
2774     arch_default=$(uname -m)
2775 fi
2776 cpu="generic"
2777 intrinsics="none"
2778
2779 # configurable options
2780 enable $PROGRAM_LIST
2781 enable $DOCUMENT_LIST
2782 enable $EXAMPLE_LIST
2783 enable $(filter_out avresample $LIBRARY_LIST)
2784 enable stripping
2785
2786 enable asm
2787 enable debug
2788 enable doc
2789 enable faan faandct faanidct
2790 enable optimizations
2791 enable runtime_cpudetect
2792 enable safe_bitstream_reader
2793 enable static
2794 enable swscale_alpha
2795
2796 sws_max_filter_size_default=256
2797 set_default sws_max_filter_size
2798
2799 # Enable hwaccels by default.
2800 enable dxva2 vaapi vda vdpau xvmc
2801 enable xlib
2802
2803 # build settings
2804 SHFLAGS='-shared -Wl,-soname,$$(@F)'
2805 LIBPREF="lib"
2806 LIBSUF=".a"
2807 FULLNAME='$(NAME)$(BUILDSUF)'
2808 LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
2809 SLIBPREF="lib"
2810 SLIBSUF=".so"
2811 SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
2812 SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
2813 SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
2814 LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
2815 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'
2816 SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR) $(SLIBNAME)'
2817
2818 asflags_filter=echo
2819 cflags_filter=echo
2820 ldflags_filter=echo
2821
2822 AS_C='-c'
2823 AS_O='-o $@'
2824 CC_C='-c'
2825 CC_E='-E -o $@'
2826 CC_O='-o $@'
2827 CXX_C='-c'
2828 CXX_O='-o $@'
2829 LD_O='-o $@'
2830 LD_LIB='-l%'
2831 LD_PATH='-L'
2832 HOSTCC_C='-c'
2833 HOSTCC_E='-E -o $@'
2834 HOSTCC_O='-o $@'
2835 HOSTLD_O='-o $@'
2836
2837 host_libs='-lm'
2838 host_cflags_filter=echo
2839 host_ldflags_filter=echo
2840
2841 target_path='$(CURDIR)'
2842
2843 # since the object filename is not given with the -MM flag, the compiler
2844 # is only able to print the basename, and we must add the path ourselves
2845 DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o," > $(@:.o=.d)'
2846 DEPFLAGS='-MM'
2847
2848 # find source path
2849 if test -f configure; then
2850     source_path=.
2851 else
2852     source_path=$(cd $(dirname "$0"); pwd)
2853     echo "$source_path" | grep -q '[[:blank:]]' &&
2854         die "Out of tree builds are impossible with whitespace in source path."
2855     test -e "$source_path/config.h" &&
2856         die "Out of tree builds are impossible with config.h in source dir."
2857 fi
2858
2859 for v in "$@"; do
2860     r=${v#*=}
2861     l=${v%"$r"}
2862     r=$(sh_quote "$r")
2863     FFMPEG_CONFIGURATION="${FFMPEG_CONFIGURATION# } ${l}${r}"
2864 done
2865
2866 find_things(){
2867     thing=$1
2868     pattern=$2
2869     file=$source_path/$3
2870     sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
2871 }
2872
2873 ENCODER_LIST=$(find_things  encoder  ENC      libavcodec/allcodecs.c)
2874 DECODER_LIST=$(find_things  decoder  DEC      libavcodec/allcodecs.c)
2875 HWACCEL_LIST=$(find_things  hwaccel  HWACCEL  libavcodec/allcodecs.c)
2876 PARSER_LIST=$(find_things   parser   PARSER   libavcodec/allcodecs.c)
2877 BSF_LIST=$(find_things      bsf      BSF      libavcodec/allcodecs.c)
2878 MUXER_LIST=$(find_things    muxer    _MUX     libavformat/allformats.c)
2879 DEMUXER_LIST=$(find_things  demuxer  DEMUX    libavformat/allformats.c)
2880 OUTDEV_LIST=$(find_things   outdev   OUTDEV   libavdevice/alldevices.c)
2881 INDEV_LIST=$(find_things    indev    _IN      libavdevice/alldevices.c)
2882 PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
2883 FILTER_LIST=$(find_things   filter   FILTER   libavfilter/allfilters.c)
2884
2885 ALL_COMPONENTS="
2886     $BSF_LIST
2887     $DECODER_LIST
2888     $DEMUXER_LIST
2889     $ENCODER_LIST
2890     $FILTER_LIST
2891     $HWACCEL_LIST
2892     $INDEV_LIST
2893     $MUXER_LIST
2894     $OUTDEV_LIST
2895     $PARSER_LIST
2896     $PROTOCOL_LIST
2897 "
2898
2899 for n in $COMPONENT_LIST; do
2900     v=$(toupper ${n%s})_LIST
2901     eval enable \$$v
2902     eval ${n}_if_any="\$$v"
2903 done
2904
2905 enable $ARCH_EXT_LIST
2906
2907 die_unknown(){
2908     echo "Unknown option \"$1\"."
2909     echo "See $0 --help for available options."
2910     exit 1
2911 }
2912
2913 print_3_columns() {
2914     cat | tr ' ' '\n' | sort | pr -r -3 -t
2915 }
2916
2917 show_list() {
2918     suffix=_$1
2919     shift
2920     echo $* | sed s/$suffix//g | print_3_columns
2921     exit 0
2922 }
2923
2924 rand_list(){
2925     IFS=', '
2926     set -- $*
2927     unset IFS
2928     for thing; do
2929         comp=${thing%:*}
2930         prob=${thing#$comp}
2931         prob=${prob#:}
2932         is_in ${comp} $COMPONENT_LIST && eval comp=\$$(toupper ${comp%s})_LIST
2933         echo "prob ${prob:-0.5}"
2934         printf '%s\n' $comp
2935     done
2936 }
2937
2938 do_random(){
2939     action=$1
2940     shift
2941     random_seed=$(awk "BEGIN { srand($random_seed); print srand() }")
2942     $action $(rand_list "$@" | awk "BEGIN { srand($random_seed) } \$1 == \"prob\" { prob = \$2; next } rand() < prob { print }")
2943 }
2944
2945 for opt do
2946     optval="${opt#*=}"
2947     case "$opt" in
2948         --extra-ldflags=*)
2949             add_ldflags $optval
2950         ;;
2951         --extra-ldexeflags=*)
2952             add_ldexeflags $optval
2953         ;;
2954         --extra-libs=*)
2955             add_extralibs $optval
2956         ;;
2957         --disable-devices)
2958             disable $INDEV_LIST $OUTDEV_LIST
2959         ;;
2960         --enable-debug=*)
2961             debuglevel="$optval"
2962         ;;
2963         --disable-programs)
2964             disable $PROGRAM_LIST
2965         ;;
2966         --disable-everything)
2967             map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
2968         ;;
2969         --disable-all)
2970             map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
2971             disable $LIBRARY_LIST $PROGRAM_LIST doc
2972         ;;
2973         --enable-random|--disable-random)
2974             action=${opt%%-random}
2975             do_random ${action#--} $COMPONENT_LIST
2976         ;;
2977         --enable-random=*|--disable-random=*)
2978             action=${opt%%-random=*}
2979             do_random ${action#--} $optval
2980         ;;
2981         --enable-*=*|--disable-*=*)
2982             eval $(echo "${opt%%=*}" | sed 's/--/action=/;s/-/ thing=/')
2983             is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt"
2984             eval list=\$$(toupper $thing)_LIST
2985             name=$(echo "${optval}" | sed "s/,/_${thing}|/g")_${thing}
2986             list=$(filter "$name" $list)
2987             [ "$list" = "" ] && warn "Option $opt did not match anything"
2988             $action $list
2989         ;;
2990         --enable-?*|--disable-?*)
2991             eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
2992             if is_in $option $COMPONENT_LIST; then
2993                 test $action = disable && action=unset
2994                 eval $action \$$(toupper ${option%s})_LIST
2995             elif is_in $option $CMDLINE_SELECT; then
2996                 $action $option
2997             else
2998                 die_unknown $opt
2999             fi
3000         ;;
3001         --list-*)
3002             NAME="${opt#--list-}"
3003             is_in $NAME $COMPONENT_LIST || die_unknown $opt
3004             NAME=${NAME%s}
3005             eval show_list $NAME \$$(toupper $NAME)_LIST
3006         ;;
3007         --help|-h) show_help
3008         ;;
3009         --fatal-warnings) enable fatal_warnings
3010         ;;
3011         *)
3012             optname="${opt%%=*}"
3013             optname="${optname#--}"
3014             optname=$(echo "$optname" | sed 's/-/_/g')
3015             if is_in $optname $CMDLINE_SET; then
3016                 eval $optname='$optval'
3017             elif is_in $optname $CMDLINE_APPEND; then
3018                 append $optname "$optval"
3019             else
3020                 die_unknown $opt
3021             fi
3022         ;;
3023     esac
3024 done
3025
3026 disabled logging && logfile=/dev/null
3027
3028 echo "# $0 $FFMPEG_CONFIGURATION" > $logfile
3029 set >> $logfile
3030
3031 test -n "$valgrind" && toolchain="valgrind-memcheck"
3032
3033 case "$toolchain" in
3034     clang-asan)
3035         cc_default="clang"
3036         add_cflags  -fsanitize=address
3037         add_ldflags -fsanitize=address
3038     ;;
3039     clang-tsan)
3040         cc_default="clang"
3041         add_cflags  -fsanitize=thread -pie
3042         add_ldflags -fsanitize=thread -pie
3043     ;;
3044     clang-usan)
3045         cc_default="clang"
3046         add_cflags  -fsanitize=undefined
3047         add_ldflags -fsanitize=undefined
3048     ;;
3049     gcc-asan)
3050         cc_default="gcc"
3051         add_cflags  -fsanitize=address
3052         add_ldflags -fsanitize=address
3053     ;;
3054     gcc-tsan)
3055         cc_default="gcc"
3056         add_cflags  -fsanitize=thread -pie -fPIC
3057         add_ldflags -fsanitize=thread -pie -fPIC
3058     ;;
3059     gcc-usan)
3060         cc_default="gcc"
3061         add_cflags  -fsanitize=undefined
3062         add_ldflags -fsanitize=undefined
3063     ;;
3064     valgrind-massif)
3065         target_exec_default=${valgrind:-"valgrind"}
3066         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"
3067     ;;
3068     valgrind-memcheck)
3069         target_exec_default=${valgrind:-"valgrind"}
3070         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"
3071     ;;
3072     msvc)
3073         # Check whether the current MSVC version needs the C99 converter.
3074         # From MSVC 2013 (compiler major version 18) onwards, it does actually
3075         # support enough of C99 to build ffmpeg. Default to the new
3076         # behaviour if the regexp was unable to match anything, since this
3077         # successfully parses the version number of existing supported
3078         # versions that require the converter (MSVC 2010 and 2012).
3079         cl_major_ver=$(cl 2>&1 | sed -n 's/.*Version \([[:digit:]]\{1,\}\)\..*/\1/p')
3080         if [ -z "$cl_major_ver" ] || [ $cl_major_ver -ge 18 ]; then
3081             cc_default="cl"
3082         else
3083             cc_default="c99wrap cl"
3084         fi
3085         ld_default="link"
3086         nm_default="dumpbin -symbols"
3087         ar_default="lib"
3088         target_os_default="win32"
3089         # Use a relative path for TMPDIR. This makes sure all the
3090         # ffconf temp files are written with a relative path, avoiding
3091         # issues with msys/win32 path conversion for MSVC parameters
3092         # such as -Fo<file> or -out:<file>.
3093         TMPDIR=.
3094     ;;
3095     icl)
3096         cc_default="icl"
3097         ld_default="xilink"
3098         nm_default="dumpbin -symbols"
3099         ar_default="xilib"
3100         target_os_default="win32"
3101         TMPDIR=.
3102     ;;
3103     gcov)
3104         add_cflags  -fprofile-arcs -ftest-coverage
3105         add_ldflags -fprofile-arcs -ftest-coverage
3106     ;;
3107     hardened)
3108         add_cppflags -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2
3109         add_cflags   -fno-strict-overflow -fstack-protector-all
3110         add_ldflags  -Wl,-z,relro -Wl,-z,now
3111     ;;
3112     ?*)
3113         die "Unknown toolchain $toolchain"
3114     ;;
3115 esac
3116
3117 test -n "$cross_prefix" && enable cross_compile
3118
3119 if enabled cross_compile; then
3120     test -n "$arch" && test -n "$target_os" ||
3121         die "Must specify target arch and OS when cross-compiling"
3122 fi
3123
3124 ar_default="${cross_prefix}${ar_default}"
3125 cc_default="${cross_prefix}${cc_default}"
3126 cxx_default="${cross_prefix}${cxx_default}"
3127 nm_default="${cross_prefix}${nm_default}"
3128 pkg_config_default="${cross_prefix}${pkg_config_default}"
3129 ranlib_default="${cross_prefix}${ranlib_default}"
3130 strip_default="${cross_prefix}${strip_default}"
3131 windres_default="${cross_prefix}${windres_default}"
3132
3133 sysinclude_default="${sysroot}/usr/include"
3134
3135 set_default arch cc cxx doxygen pkg_config ranlib strip sysinclude \
3136     target_exec target_os yasmexe
3137 enabled cross_compile || host_cc_default=$cc
3138 set_default host_cc
3139
3140 pkg_config_fail_message=""
3141 if ! $pkg_config --version >/dev/null 2>&1; then
3142     warn "$pkg_config not found, library detection may fail."
3143     pkg_config=false
3144 elif is_in -static $cc $LDFLAGS && ! is_in --static $pkg_config $pkg_config_flags; then
3145     pkg_config_fail_message="
3146 Note: When building a static binary, add --pkg-config-flags=\"--static\"."
3147 fi
3148
3149 if test $doxygen != $doxygen_default && \
3150   ! $doxygen --version >/dev/null 2>&1; then
3151     warn "Specified doxygen \"$doxygen\" not found, API documentation will fail to build."
3152 fi
3153
3154 exesuf() {
3155     case $1 in
3156         mingw32*|win32|win64|cygwin*|*-dos|freedos|opendos|os/2*|symbian) echo .exe ;;
3157     esac
3158 }
3159
3160 EXESUF=$(exesuf $target_os)
3161 HOSTEXESUF=$(exesuf $host_os)
3162
3163 # set temporary file name
3164 : ${TMPDIR:=$TEMPDIR}
3165 : ${TMPDIR:=$TMP}
3166 : ${TMPDIR:=/tmp}
3167
3168 if [ -n "$tempprefix" ] ; then
3169     mktemp(){
3170         echo $tempprefix.${HOSTNAME}.${UID}
3171     }
3172 elif ! check_cmd mktemp -u XXXXXX; then
3173     # simple replacement for missing mktemp
3174     # NOT SAFE FOR GENERAL USE
3175     mktemp(){
3176         echo "${2%%XXX*}.${HOSTNAME}.${UID}.$$"
3177     }
3178 fi
3179
3180 tmpfile(){
3181     tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
3182         (set -C; exec > $tmp) 2>/dev/null ||
3183         die "Unable to create temporary file in $TMPDIR."
3184     append TMPFILES $tmp
3185     eval $1=$tmp
3186 }
3187
3188 trap 'rm -f -- $TMPFILES' EXIT
3189
3190 tmpfile TMPASM .asm
3191 tmpfile TMPC   .c
3192 tmpfile TMPCPP .cpp
3193 tmpfile TMPE   $EXESUF
3194 tmpfile TMPH   .h
3195 tmpfile TMPM   .m
3196 tmpfile TMPO   .o
3197 tmpfile TMPS   .S
3198 tmpfile TMPSH  .sh
3199 tmpfile TMPV   .ver
3200
3201 unset -f mktemp
3202
3203 chmod +x $TMPE
3204
3205 # make sure we can execute files in $TMPDIR
3206 cat > $TMPSH 2>> $logfile <<EOF
3207 #! /bin/sh
3208 EOF
3209 chmod +x $TMPSH >> $logfile 2>&1
3210 if ! $TMPSH >> $logfile 2>&1; then
3211     cat <<EOF
3212 Unable to create and execute files in $TMPDIR.  Set the TMPDIR environment
3213 variable to another directory and make sure that it is not mounted noexec.
3214 EOF
3215     die "Sanity test failed."
3216 fi
3217
3218 armasm_flags(){
3219     for flag; do
3220         case $flag in
3221             # Filter out MSVC cl.exe options from cflags that shouldn't
3222             # be passed to gas-preprocessor
3223             -M[TD]*)                                            ;;
3224             *)                  echo $flag                      ;;
3225         esac
3226    done
3227 }
3228
3229 ccc_flags(){
3230     for flag; do
3231         case $flag in
3232             -std=c99)           echo -c99                       ;;
3233             -mcpu=*)            echo -arch ${flag#*=}           ;;
3234             -mieee)             echo -ieee                      ;;
3235             -O*|-fast)          echo $flag                      ;;
3236             -fno-math-errno)    echo -assume nomath_errno       ;;
3237             -g)                 echo -g3                        ;;
3238             -Wall)              echo -msg_enable level2         ;;
3239             -Wno-pointer-sign)  echo -msg_disable ptrmismatch1  ;;
3240             -Wl,*)              echo $flag                      ;;
3241             -f*|-W*)                                            ;;
3242             *)                  echo $flag                      ;;
3243         esac
3244    done
3245 }
3246
3247 cparser_flags(){
3248     for flag; do
3249         case $flag in
3250             -Wno-switch)             echo -Wno-switch-enum ;;
3251             -Wno-format-zero-length) ;;
3252             -Wdisabled-optimization) ;;
3253             -Wno-pointer-sign)       echo -Wno-other ;;
3254             *)                       echo $flag ;;
3255         esac
3256     done
3257 }
3258
3259 msvc_common_flags(){
3260     for flag; do
3261         case $flag in
3262             # In addition to specifying certain flags under the compiler
3263             # specific filters, they must be specified here as well or else the
3264             # generic catch all at the bottom will print the original flag.
3265             -Wall)                ;;
3266             -std=c99)             ;;
3267             # Common flags
3268             -fomit-frame-pointer) ;;
3269             -g)                   echo -Z7 ;;
3270             -fno-math-errno)      ;;
3271             -fno-common)          ;;
3272             -fno-signed-zeros)    ;;
3273             -fPIC)                ;;
3274             -mthumb)              ;;
3275             -march=*)             ;;
3276             -lz)                  echo zlib.lib ;;
3277             -lavifil32)           echo vfw32.lib ;;
3278             -lavicap32)           echo vfw32.lib user32.lib ;;
3279             -l*)                  echo ${flag#-l}.lib ;;
3280             -L*)                  echo -libpath:${flag#-L} ;;
3281             *)                    echo $flag ;;
3282         esac
3283     done
3284 }
3285
3286 msvc_flags(){
3287     msvc_common_flags "$@"
3288     for flag; do
3289         case $flag in
3290             -Wall)                echo -W4 -wd4244 -wd4127 -wd4018 -wd4389     \
3291                                        -wd4146 -wd4057 -wd4204 -wd4706 -wd4305 \
3292                                        -wd4152 -wd4324 -we4013 -wd4100 -wd4214 \
3293                                        -wd4307 \
3294                                        -wd4273 -wd4554 -wd4701 ;;
3295         esac
3296     done
3297 }
3298
3299 icl_flags(){
3300     msvc_common_flags "$@"
3301     for flag; do
3302         case $flag in
3303             # Despite what Intel's documentation says -Wall, which is supported
3304             # on Windows, does enable remarks so disable them here.
3305             -Wall)                echo $flag -Qdiag-disable:remark ;;
3306             -std=c99)             echo -Qstd=c99 ;;
3307             -flto)                echo -ipo ;;
3308         esac
3309     done
3310 }
3311
3312 icc_flags(){
3313     for flag; do
3314         case $flag in
3315             -flto)                echo -ipo ;;
3316             *)                    echo $flag ;;
3317         esac
3318     done
3319 }
3320
3321 pgi_flags(){
3322     for flag; do
3323         case $flag in
3324             -flto)                echo -Mipa=fast,libopt,libinline,vestigial ;;
3325             -fomit-frame-pointer) echo -Mnoframe ;;
3326             -g)                   echo -gopt ;;
3327             *)                    echo $flag ;;
3328         esac
3329     done
3330 }
3331
3332 suncc_flags(){
3333     for flag; do
3334         case $flag in
3335             -march=*|-mcpu=*)
3336                 case "${flag#*=}" in
3337                     native)                   echo -xtarget=native       ;;
3338                     v9|niagara)               echo -xarch=sparc          ;;
3339                     ultrasparc)               echo -xarch=sparcvis       ;;
3340                     ultrasparc3|niagara2)     echo -xarch=sparcvis2      ;;
3341                     i586|pentium)             echo -xchip=pentium        ;;
3342                     i686|pentiumpro|pentium2) echo -xtarget=pentium_pro  ;;
3343                     pentium3*|c3-2)           echo -xtarget=pentium3     ;;
3344                     pentium-m)          echo -xarch=sse2 -xchip=pentium3 ;;
3345                     pentium4*)          echo -xtarget=pentium4           ;;
3346                     prescott|nocona)    echo -xarch=sse3 -xchip=pentium4 ;;
3347                     *-sse3)             echo -xarch=sse3                 ;;
3348                     core2)              echo -xarch=ssse3 -xchip=core2   ;;
3349                     bonnell)                   echo -xarch=ssse3         ;;
3350                     corei7|nehalem)            echo -xtarget=nehalem     ;;
3351                     westmere)                  echo -xtarget=westmere    ;;
3352                     silvermont)                echo -xarch=sse4_2        ;;
3353                     corei7-avx|sandybridge)    echo -xtarget=sandybridge ;;
3354                     core-avx*|ivybridge|haswell|broadwell)
3355                                                echo -xarch=avx           ;;
3356                     amdfam10|barcelona)        echo -xtarget=barcelona   ;;
3357                     btver1)                    echo -xarch=amdsse4a      ;;
3358                     btver2|bdver*)             echo -xarch=avx           ;;
3359                     athlon-4|athlon-[mx]p)     echo -xarch=ssea          ;;
3360                     k8|opteron|athlon64|athlon-fx)
3361                                                echo -xarch=sse2a         ;;
3362                     athlon*)                   echo -xarch=pentium_proa  ;;
3363                 esac
3364                 ;;
3365             -std=c99)             echo -xc99              ;;
3366             -fomit-frame-pointer) echo -xregs=frameptr    ;;
3367             -fPIC)                echo -KPIC -xcode=pic32 ;;
3368             -W*,*)                echo $flag              ;;
3369             -f*-*|-W*|-mimpure-text)                      ;;
3370             -shared)              echo -G                 ;;
3371             *)                    echo $flag              ;;
3372         esac
3373     done
3374 }
3375
3376 tms470_flags(){
3377     for flag; do
3378         case $flag in
3379             -march=*|-mcpu=*)
3380                 case "${flag#*=}" in
3381                     armv7-a|cortex-a*)      echo -mv=7a8 ;;
3382                     armv7-r|cortex-r*)      echo -mv=7r4 ;;
3383                     armv7-m|cortex-m*)      echo -mv=7m3 ;;
3384                     armv6*|arm11*)          echo -mv=6   ;;
3385                     armv5*e|arm[79]*e*|arm9[24]6*|arm96*|arm102[26])
3386                                             echo -mv=5e  ;;
3387                     armv4*|arm7*|arm9[24]*) echo -mv=4   ;;
3388                 esac
3389                 ;;
3390             -mfpu=neon)     echo --float_support=vfpv3 --neon ;;
3391             -mfpu=vfp)      echo --float_support=vfpv2        ;;
3392             -mfpu=vfpv3)    echo --float_support=vfpv3        ;;
3393             -mfpu=vfpv3-d16) echo --float_support=vfpv3d16    ;;
3394             -msoft-float)   echo --float_support=vfplib       ;;
3395             -O[0-3]|-mf=*)  echo $flag                        ;;
3396             -g)             echo -g -mn                       ;;
3397             -pds=*)         echo $flag                        ;;
3398             -D*|-I*)        echo $flag                        ;;
3399             --gcc|--abi=*)  echo $flag                        ;;
3400             -me)            echo $flag                        ;;
3401         esac
3402     done
3403 }
3404
3405 probe_cc(){
3406     pfx=$1
3407     _cc=$2
3408
3409     unset _type _ident _cc_c _cc_e _cc_o _flags _cflags
3410     unset _ld_o _ldflags _ld_lib _ld_path
3411     unset _depflags _DEPCMD _DEPFLAGS
3412     _flags_filter=echo
3413
3414     if $_cc --version 2>&1 | grep -q '^GNU assembler'; then
3415         true # no-op to avoid reading stdin in following checks
3416     elif $_cc -v 2>&1 | grep -q '^gcc.*LLVM'; then
3417         _type=llvm_gcc
3418         gcc_extra_ver=$(expr "$($_cc --version | head -n1)" : '.*\((.*)\)')
3419         _ident="llvm-gcc $($_cc -dumpversion) $gcc_extra_ver"
3420         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
3421         _cflags_speed='-O3'
3422         _cflags_size='-Os'
3423     elif $_cc -v 2>&1 | grep -qi ^gcc; then
3424         _type=gcc
3425         gcc_version=$($_cc --version | head -n1)
3426         gcc_basever=$($_cc -dumpversion)
3427         gcc_pkg_ver=$(expr "$gcc_version" : '[^ ]* \(([^)]*)\)')
3428         gcc_ext_ver=$(expr "$gcc_version" : ".*$gcc_pkg_ver $gcc_basever \\(.*\\)")
3429         _ident=$(cleanws "gcc $gcc_basever $gcc_pkg_ver $gcc_ext_ver")
3430         if ! $_cc -dumpversion | grep -q '^2\.'; then
3431             _depflags='-MMD -MF $(@:.o=.d) -MT $@'
3432         fi
3433         _cflags_speed='-O3'
3434         _cflags_size='-Os'
3435     elif $_cc --version 2>/dev/null | grep -q ^icc; then
3436         _type=icc
3437         _ident=$($_cc --version | head -n1)
3438         _depflags='-MMD'
3439         _cflags_speed='-O3'
3440         _cflags_size='-Os'
3441         _cflags_noopt='-O1'
3442         _flags_filter=icc_flags
3443     elif $_cc -v 2>&1 | grep -q xlc; then
3444         _type=xlc
3445         _ident=$($_cc -qversion 2>/dev/null | head -n1)
3446         _cflags_speed='-O5'
3447         _cflags_size='-O5 -qcompact'
3448     elif $_cc -V 2>/dev/null | grep -q Compaq; then
3449         _type=ccc
3450         _ident=$($_cc -V | head -n1 | cut -d' ' -f1-3)
3451         _DEPFLAGS='-M'
3452         _cflags_speed='-fast'
3453         _cflags_size='-O1'
3454         _flags_filter=ccc_flags
3455     elif $_cc --vsn 2>/dev/null | grep -Eq "ARM (C/C\+\+ )?Compiler"; then
3456         test -d "$sysroot" || die "No valid sysroot specified."
3457         _type=armcc
3458         _ident=$($_cc --vsn | grep -i build | head -n1 | sed 's/.*: //')
3459         armcc_conf="$PWD/armcc.conf"
3460         $_cc --arm_linux_configure                 \
3461              --arm_linux_config_file="$armcc_conf" \
3462              --configure_sysroot="$sysroot"        \
3463              --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
3464              die "Error creating armcc configuration file."
3465         $_cc --vsn | grep -q RVCT && armcc_opt=rvct || armcc_opt=armcc
3466         _flags="--arm_linux_config_file=$armcc_conf --translate_gcc"
3467         as_default="${cross_prefix}gcc"
3468         _depflags='-MMD'
3469         _cflags_speed='-O3'
3470         _cflags_size='-Os'
3471     elif $_cc -version 2>/dev/null | grep -Eq 'TMS470|TI ARM'; then
3472         _type=tms470
3473         _ident=$($_cc -version | head -n1 | tr -s ' ')
3474         _flags='--gcc --abi=eabi -me'
3475         _cc_e='-ppl -fe=$@'
3476         _cc_o='-fe=$@'
3477         _depflags='-ppa -ppd=$(@:.o=.d)'
3478         _cflags_speed='-O3 -mf=5'
3479         _cflags_size='-O3 -mf=2'
3480         _flags_filter=tms470_flags
3481     elif $_cc -v 2>&1 | grep -q clang; then
3482         _type=clang
3483         _ident=$($_cc --version | head -n1)
3484         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
3485         _cflags_speed='-O3'
3486         _cflags_size='-Os'
3487     elif $_cc -V 2>&1 | grep -q Sun; then
3488         _type=suncc
3489         _ident=$($_cc -V 2>&1 | head -n1 | cut -d' ' -f 2-)
3490         _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "1s,^.*: ,$@: ," -e "\$$!s,\$$, \\\," -e "1!s,^.*: , ," > $(@:.o=.d)'
3491         _DEPFLAGS='-xM1 -xc99'
3492         _ldflags='-std=c99'
3493         _cflags_speed='-O5'
3494         _cflags_size='-O5 -xspace'
3495         _flags_filter=suncc_flags
3496     elif $_cc -v 2>&1 | grep -q 'PathScale\|Path64'; then
3497         _type=pathscale
3498         _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
3499         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
3500         _cflags_speed='-O2'
3501         _cflags_size='-Os'
3502         _flags_filter='filter_out -Wdisabled-optimization'
3503     elif $_cc -v 2>&1 | grep -q Open64; then
3504         _type=open64
3505         _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
3506         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
3507         _cflags_speed='-O2'
3508         _cflags_size='-Os'
3509         _flags_filter='filter_out -Wdisabled-optimization|-Wtype-limits|-fno-signed-zeros'
3510     elif $_cc -V 2>&1 | grep -q Portland; then
3511         _type=pgi
3512         _ident="PGI $($_cc -V 2>&1 | awk '/^pgcc/ { print $2; exit }')"
3513         opt_common='-alias=ansi -Mdse -Mlre -Mpre'
3514         _cflags_speed="-O3 -Mautoinline -Munroll=c:4 $opt_common"
3515         _cflags_size="-O2 -Munroll=c:1 $opt_common"
3516         _cflags_noopt="-O"
3517         _flags_filter=pgi_flags
3518     elif $_cc 2>&1 | grep -q 'Microsoft.*ARM.*Assembler'; then
3519         _type=armasm
3520         _ident=$($_cc | head -n1)
3521         # 4509: "This form of conditional instruction is deprecated"
3522         _flags="-nologo -ignore 4509"
3523         _flags_filter=armasm_flags
3524     elif $_cc 2>&1 | grep -q Intel; then
3525         _type=icl
3526         _ident=$($cc 2>&1 | head -n1)
3527         _depflags='-QMMD -QMF$(@:.o=.d) -QMT$@'
3528         # Not only is O3 broken on 13.x+ but it is slower on all previous
3529         # versions (tested) as well.
3530         _cflags_speed="-O2"
3531         _cflags_size="-O1 -Oi" # -O1 without -Oi miscompiles stuff
3532         if $_cc 2>&1 | grep -q Linker; then
3533             _ld_o='-out:$@'
3534         else
3535             _ld_o='-Fe$@'
3536         fi
3537         _cc_o='-Fo$@'
3538         _cc_e='-P'
3539         _flags_filter=icl_flags
3540         _ld_lib='lib%.a'
3541         _ld_path='-libpath:'
3542         # -Qdiag-error to make icl error when seeing certain unknown arguments
3543         _flags='-nologo -Qdiag-error:4044,10157'
3544         # -Qvec- -Qsimd- to prevent miscompilation, -GS, fp:precise for consistency
3545         # with MSVC which enables it by default.
3546         _cflags='-D_USE_MATH_DEFINES -FIstdlib.h -Dstrtoll=_strtoi64 -Qms0 -Qvec- -Qsimd- -GS -fp:precise'
3547         if [ $pfx = hostcc ]; then
3548             append _cflags -Dsnprintf=_snprintf
3549         fi
3550         disable stripping
3551     elif $_cc 2>&1 | grep -q Microsoft; then
3552         _type=msvc
3553         _ident=$($cc 2>&1 | head -n1)
3554         _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< 2>&1 | awk '\''/including/ { sub(/^.*file: */, ""); gsub(/\\/, "/"); if (!match($$0, / /)) print "$@:", $$0 }'\'' > $(@:.o=.d)'
3555         _DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -showIncludes -Zs'
3556         _cflags_speed="-O2"
3557         _cflags_size="-O1"
3558         if $_cc 2>&1 | grep -q Linker; then
3559             _ld_o='-out:$@'
3560         else
3561             _ld_o='-Fe$@'
3562         fi
3563         _cc_o='-Fo$@'
3564         _cc_e='-P -Fi$@'
3565         _flags_filter=msvc_flags
3566         _ld_lib='lib%.a'
3567         _ld_path='-libpath:'
3568         _flags='-nologo'
3569         _cflags='-D_USE_MATH_DEFINES -D_CRT_SECURE_NO_WARNINGS -Dinline=__inline -FIstdlib.h -Dstrtoll=_strtoi64'
3570         if [ $pfx = hostcc ]; then
3571             if [ -z "$cl_major_ver" ] || [ $cl_major_ver -le 18 ]; then
3572                 append _cflags -Dsnprintf=_snprintf
3573             fi
3574         fi
3575         disable stripping
3576     elif $_cc --version 2>/dev/null | grep -q ^cparser; then
3577         _type=cparser
3578         _ident=$($_cc --version | head -n1)
3579         _depflags='-MMD'
3580         _cflags_speed='-O4'
3581         _cflags_size='-O2'
3582         _flags_filter=cparser_flags
3583     fi
3584
3585     eval ${pfx}_type=\$_type
3586     eval ${pfx}_ident=\$_ident
3587 }
3588
3589 set_ccvars(){
3590     eval ${1}_C=\${_cc_c-\${${1}_C}}
3591     eval ${1}_E=\${_cc_e-\${${1}_E}}
3592     eval ${1}_O=\${_cc_o-\${${1}_O}}
3593
3594     if [ -n "$_depflags" ]; then
3595         eval ${1}_DEPFLAGS=\$_depflags
3596     else
3597         eval ${1}DEP=\${_DEPCMD:-\$DEPCMD}
3598         eval ${1}DEP_FLAGS=\${_DEPFLAGS:-\$DEPFLAGS}
3599         eval DEP${1}FLAGS=\$_flags
3600     fi
3601 }
3602
3603 probe_cc cc "$cc"
3604 cflags_filter=$_flags_filter
3605 cflags_speed=$_cflags_speed
3606 cflags_size=$_cflags_size
3607 cflags_noopt=$_cflags_noopt
3608 add_cflags $_flags $_cflags
3609 cc_ldflags=$_ldflags
3610 set_ccvars CC
3611
3612 probe_cc hostcc "$host_cc"
3613 host_cflags_filter=$_flags_filter
3614 add_host_cflags  $_flags $_cflags
3615 set_ccvars HOSTCC
3616
3617 test -n "$cc_type" && enable $cc_type ||
3618     warn "Unknown C compiler $cc, unable to select optimal CFLAGS"
3619
3620 : ${as_default:=$cc}
3621 : ${dep_cc_default:=$cc}
3622 : ${ld_default:=$cc}
3623 : ${host_ld_default:=$host_cc}
3624 set_default ar as dep_cc ld host_ld windres
3625
3626 probe_cc as "$as"
3627 asflags_filter=$_flags_filter
3628 add_asflags $_flags $_cflags
3629 set_ccvars AS
3630
3631 probe_cc ld "$ld"
3632 ldflags_filter=$_flags_filter
3633 add_ldflags $_flags $_ldflags
3634 test "$cc_type" != "$ld_type" && add_ldflags $cc_ldflags
3635 LD_O=${_ld_o-$LD_O}
3636 LD_LIB=${_ld_lib-$LD_LIB}
3637 LD_PATH=${_ld_path-$LD_PATH}
3638
3639 probe_cc hostld "$host_ld"
3640 host_ldflags_filter=$_flags_filter
3641 add_host_ldflags $_flags $_ldflags
3642 HOSTLD_O=${_ld_o-$HOSTLD_O}
3643
3644 if [ -z "$CC_DEPFLAGS" ] && [ "$dep_cc" != "$cc" ]; then
3645     probe_cc depcc "$dep_cc"
3646     CCDEP=${_DEPCMD:-$DEPCMD}
3647     CCDEP_FLAGS=${_DEPFLAGS:=$DEPFLAGS}
3648     DEPCCFLAGS=$_flags
3649 fi
3650
3651 if $ar 2>&1 | grep -q Microsoft; then
3652     arflags="-nologo"
3653     ar_o='-out:$@'
3654 elif $ar 2>&1 | grep -q 'Texas Instruments'; then
3655     arflags="rq"
3656     ar_o='$@'
3657 elif $ar 2>&1 | grep -q 'Usage: ar.*-X.*any'; then
3658     arflags='-Xany -r -c'
3659     ar_o='$@'
3660 elif $ar 2>&1 | grep -q "\[D\] "; then
3661     arflags="rcD"
3662     ar_o='$@'
3663 else
3664     arflags="rc"
3665     ar_o='$@'
3666 fi
3667
3668 add_cflags $extra_cflags
3669 add_cxxflags $extra_cxxflags
3670 add_asflags $extra_cflags
3671
3672 if test -n "$sysroot"; then
3673     case "$cc_type" in
3674         gcc|llvm_gcc|clang)
3675             add_cppflags --sysroot="$sysroot"
3676             add_ldflags --sysroot="$sysroot"
3677 # On Darwin --sysroot may be ignored, -isysroot always affects headers and linking
3678             add_cppflags -isysroot "$sysroot"
3679             add_ldflags -isysroot "$sysroot"
3680         ;;
3681         tms470)
3682             add_cppflags -I"$sysinclude"
3683             add_ldflags  --sysroot="$sysroot"
3684         ;;
3685     esac
3686 fi
3687
3688 if test "$cpu" = host; then
3689     enabled cross_compile &&
3690         die "--cpu=host makes no sense when cross-compiling."
3691
3692     case "$cc_type" in
3693         gcc|llvm_gcc)
3694             check_native(){
3695                 $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
3696                 sed -n "/cc1.*$1=/{
3697                             s/.*$1=\\([^ ]*\\).*/\\1/
3698                             p
3699                             q
3700                         }" $TMPE
3701             }
3702             cpu=$(check_native -march || check_native -mcpu)
3703         ;;
3704     esac
3705
3706     test "${cpu:-host}" = host &&
3707         die "--cpu=host not supported with compiler $cc"
3708 fi
3709
3710 # Deal with common $arch aliases
3711 case "$arch" in
3712     aarch64|arm64)
3713         arch="aarch64"
3714     ;;
3715     arm*|iPad*|iPhone*)
3716         arch="arm"
3717     ;;
3718     mips*|IP*)
3719         arch="mips"
3720     ;;
3721     parisc*|hppa*)
3722         arch="parisc"
3723     ;;
3724     "Power Macintosh"|ppc*|powerpc*)
3725         arch="ppc"
3726     ;;
3727     s390|s390x)
3728         arch="s390"
3729     ;;
3730     sh4|sh)
3731         arch="sh4"
3732     ;;
3733     sun4u|sparc*)
3734         arch="sparc"
3735     ;;
3736     tilegx|tile-gx)
3737         arch="tilegx"
3738     ;;
3739     i[3-6]86*|i86pc|BePC|x86pc|x86_64|x86_32|amd64)
3740         arch="x86"
3741     ;;
3742 esac
3743
3744 is_in $arch $ARCH_LIST || warn "unknown architecture $arch"
3745 enable $arch
3746
3747 # Add processor-specific flags
3748 if enabled aarch64; then
3749
3750     case $cpu in
3751         armv*)
3752             cpuflags="-march=$cpu"
3753         ;;
3754         *)
3755             cpuflags="-mcpu=$cpu"
3756         ;;
3757     esac
3758
3759 elif enabled alpha; then
3760
3761     cpuflags="-mcpu=$cpu"
3762
3763 elif enabled arm; then
3764
3765     check_arm_arch() {
3766         check_cpp_condition stddef.h \
3767             "defined __ARM_ARCH_${1}__ || defined __TARGET_ARCH_${2:-$1}" \
3768             $cpuflags
3769     }
3770
3771     probe_arm_arch() {
3772         if   check_arm_arch 4;        then echo armv4;
3773         elif check_arm_arch 4T;       then echo armv4t;
3774         elif check_arm_arch 5;        then echo armv5;
3775         elif check_arm_arch 5E;       then echo armv5e;
3776         elif check_arm_arch 5T;       then echo armv5t;
3777         elif check_arm_arch 5TE;      then echo armv5te;
3778         elif check_arm_arch 5TEJ;     then echo armv5te;
3779         elif check_arm_arch 6;        then echo armv6;
3780         elif check_arm_arch 6J;       then echo armv6j;
3781         elif check_arm_arch 6K;       then echo armv6k;
3782         elif check_arm_arch 6Z;       then echo armv6z;
3783         elif check_arm_arch 6ZK;      then echo armv6zk;
3784         elif check_arm_arch 6T2;      then echo armv6t2;
3785         elif check_arm_arch 7;        then echo armv7;
3786         elif check_arm_arch 7A  7_A;  then echo armv7-a;
3787         elif check_arm_arch 7S;       then echo armv7-a;
3788         elif check_arm_arch 7R  7_R;  then echo armv7-r;
3789         elif check_arm_arch 7M  7_M;  then echo armv7-m;
3790         elif check_arm_arch 7EM 7E_M; then echo armv7-m;
3791         elif check_arm_arch 8A  8_A;  then echo armv8-a;
3792         fi
3793     }
3794
3795     [ "$cpu" = generic ] && cpu=$(probe_arm_arch)
3796
3797     case $cpu in
3798         armv*)
3799             cpuflags="-march=$cpu"
3800             subarch=$(echo $cpu | sed 's/[^a-z0-9]//g')
3801         ;;
3802         *)
3803             cpuflags="-mcpu=$cpu"
3804             case $cpu in
3805                 cortex-a*)                               subarch=armv7a  ;;
3806                 cortex-r*)                               subarch=armv7r  ;;
3807                 cortex-m*)                 enable thumb; subarch=armv7m  ;;
3808                 arm11*)                                  subarch=armv6   ;;
3809                 arm[79]*e*|arm9[24]6*|arm96*|arm102[26]) subarch=armv5te ;;
3810                 armv4*|arm7*|arm9[24]*)                  subarch=armv4   ;;
3811                 *)                             subarch=$(probe_arm_arch) ;;
3812             esac
3813         ;;
3814     esac
3815
3816     case "$subarch" in
3817         armv5t*)    enable fast_clz                ;;
3818         armv[6-8]*)
3819             enable fast_clz
3820             disabled fast_unaligned || enable fast_unaligned
3821             ;;
3822     esac
3823
3824 elif enabled avr32; then
3825
3826     case $cpu in
3827         ap7[02]0[0-2])
3828             subarch="avr32_ap"
3829             cpuflags="-mpart=$cpu"
3830         ;;
3831         ap)
3832             subarch="avr32_ap"
3833             cpuflags="-march=$cpu"
3834         ;;
3835         uc3[ab]*)
3836             subarch="avr32_uc"
3837             cpuflags="-mcpu=$cpu"
3838         ;;
3839         uc)
3840             subarch="avr32_uc"
3841             cpuflags="-march=$cpu"
3842         ;;
3843     esac
3844
3845 elif enabled bfin; then
3846
3847     cpuflags="-mcpu=$cpu"
3848
3849 elif enabled mips; then
3850
3851     cpuflags="-march=$cpu"
3852
3853     case $cpu in
3854         24kc)
3855             disable mips32r5
3856             disable mips64r6
3857             disable mipsfpu
3858             disable mipsdspr1
3859             disable mipsdspr2
3860             disable msa
3861         ;;
3862         24kf*)
3863             disable mips32r5
3864             disable mips64r6
3865             disable mipsdspr1
3866             disable mipsdspr2
3867             disable msa
3868         ;;
3869         24kec|34kc|1004kc)
3870             disable mips32r5
3871             disable mips64r6
3872             disable mipsfpu
3873             disable mipsdspr2
3874             disable msa
3875         ;;
3876         24kef*|34kf*|1004kf*)
3877             disable mips32r5
3878             disable mips64r6
3879             disable mipsdspr2
3880             disable msa
3881         ;;
3882         74kc)
3883             disable mips32r5
3884             disable mips64r6
3885             disable mipsfpu
3886             disable msa
3887         ;;
3888         74kf)
3889             disable mips32r5
3890             disable mips64r6
3891             disable msa
3892         ;;
3893         p5600)
3894             disable mips64r6
3895             disable mipsdspr1
3896             disable mipsdspr2
3897
3898             check_cflags "-mtune=p5600"
3899         ;;
3900         i6400)
3901             disable mips32r5
3902             disable mipsdspr1
3903             disable mipsdspr2
3904             disable mipsfpu
3905
3906             check_cflags "-mtune=i6400 -mabi=64"
3907             check_ldflags "-mabi=64"
3908         ;;
3909         generic)
3910             disable mips32r5
3911             disable mips64r6
3912             disable msa
3913         ;;
3914     esac
3915
3916 elif enabled ppc; then
3917
3918     disable ldbrx
3919     disable vsx
3920
3921     case $(tolower $cpu) in
3922         601|ppc601|powerpc601)
3923             cpuflags="-mcpu=601"
3924             disable altivec
3925         ;;
3926         603*|ppc603*|powerpc603*)
3927             cpuflags="-mcpu=603"
3928             disable altivec
3929         ;;
3930         604*|ppc604*|powerpc604*)
3931             cpuflags="-mcpu=604"
3932             disable altivec
3933         ;;
3934         g3|75*|ppc75*|powerpc75*)
3935             cpuflags="-mcpu=750"
3936             disable altivec
3937         ;;
3938         g4|745*|ppc745*|powerpc745*)
3939             cpuflags="-mcpu=7450"
3940         ;;
3941         74*|ppc74*|powerpc74*)
3942             cpuflags="-mcpu=7400"
3943         ;;
3944         g5|970|ppc970|powerpc970)
3945             cpuflags="-mcpu=970"
3946         ;;
3947         power[3-8]*)
3948             cpuflags="-mcpu=$cpu"
3949         ;;
3950         cell)
3951             cpuflags="-mcpu=cell"
3952             enable ldbrx
3953         ;;
3954         e500mc)
3955             cpuflags="-mcpu=e500mc"
3956             disable altivec
3957         ;;
3958         e500v2)
3959             cpuflags="-mcpu=8548 -mhard-float -mfloat-gprs=double"
3960             disable altivec
3961             disable dcbzl
3962         ;;
3963         e500)
3964             cpuflags="-mcpu=8540 -mhard-float"
3965             disable altivec
3966             disable dcbzl
3967         ;;
3968     esac
3969
3970 elif enabled sparc; then
3971
3972     case $cpu in
3973         cypress|f93[04]|tsc701|sparcl*|supersparc|hypersparc|niagara|v[789])
3974             cpuflags="-mcpu=$cpu"
3975         ;;
3976         ultrasparc*|niagara[234])
3977             cpuflags="-mcpu=$cpu"
3978         ;;
3979     esac
3980
3981 elif enabled x86; then
3982
3983     case $cpu in
3984         i[345]86|pentium)
3985             cpuflags="-march=$cpu"
3986             disable i686
3987             disable mmx
3988         ;;
3989         # targets that do NOT support nopl and conditional mov (cmov)
3990         pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
3991             cpuflags="-march=$cpu"
3992             disable i686
3993         ;;
3994         # targets that do support nopl and conditional mov (cmov)
3995         i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64*|k8*|opteron*|athlon-fx\
3996         |core*|atom|bonnell|nehalem|westmere|silvermont|sandybridge|ivybridge|haswell|broadwell|amdfam10|barcelona|b[dt]ver*)
3997             cpuflags="-march=$cpu"
3998             enable i686
3999             enable fast_cmov
4000         ;;
4001         # targets that do support conditional mov but on which it's slow
4002         pentium4|pentium4m|prescott|nocona)
4003             cpuflags="-march=$cpu"
4004             enable i686
4005             disable fast_cmov
4006         ;;
4007     esac
4008
4009 fi
4010
4011 if [ "$cpu" != generic ]; then
4012     add_cflags  $cpuflags
4013     add_asflags $cpuflags
4014 fi
4015
4016 # compiler sanity check
4017 check_exec <<EOF
4018 int main(void){ return 0; }
4019 EOF
4020 if test "$?" != 0; then
4021     echo "$cc is unable to create an executable file."
4022     if test -z "$cross_prefix" && ! enabled cross_compile ; then
4023         echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
4024         echo "Only do this if you know what cross compiling means."
4025     fi
4026     die "C compiler test failed."
4027 fi
4028
4029 add_cppflags -D_ISOC99_SOURCE
4030 add_cxxflags -D__STDC_CONSTANT_MACROS
4031 check_cflags -std=c99
4032 check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
4033 #include <stdlib.h>
4034 EOF
4035 check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
4036 #include <stdlib.h>
4037 EOF
4038
4039 add_host_cppflags -D_ISOC99_SOURCE
4040 check_host_cflags -std=c99
4041 check_host_cflags -Wall
4042 check_host_cflags -O3
4043
4044 check_64bit(){
4045     arch32=$1
4046     arch64=$2
4047     expr=$3
4048     check_code cc "" "int test[2*($expr) - 1]" &&
4049         subarch=$arch64 || subarch=$arch32
4050 }
4051
4052 case "$arch" in
4053     aarch64|alpha|ia64)
4054         spic=$shared
4055     ;;
4056     mips)
4057         check_64bit mips mips64 '_MIPS_SIM > 1'
4058         spic=$shared
4059     ;;
4060     parisc)
4061         check_64bit parisc parisc64 'sizeof(void *) > 4'
4062         spic=$shared
4063     ;;
4064     ppc)
4065         check_64bit ppc ppc64 'sizeof(void *) > 4'
4066         spic=$shared
4067     ;;
4068     s390)
4069         check_64bit s390 s390x 'sizeof(void *) > 4'
4070         spic=$shared