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