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