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