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