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