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