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