]> git.sesse.net Git - ffmpeg/blob - configure
webmdashenc: Support for live stream manifests
[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 apng_encoder_select="huffyuvencdsp zlib"
2103 asv1_decoder_select="blockdsp bswapdsp idctdsp"
2104 asv1_encoder_select="bswapdsp fdctdsp pixblockdsp"
2105 asv2_decoder_select="blockdsp bswapdsp idctdsp"
2106 asv2_encoder_select="bswapdsp fdctdsp pixblockdsp"
2107 atrac1_decoder_select="mdct sinewin"
2108 atrac3_decoder_select="mdct"
2109 atrac3p_decoder_select="mdct sinewin"
2110 avrn_decoder_select="exif jpegtables"
2111 bink_decoder_select="blockdsp hpeldsp"
2112 binkaudio_dct_decoder_select="mdct rdft dct sinewin wma_freqs"
2113 binkaudio_rdft_decoder_select="mdct rdft sinewin wma_freqs"
2114 cavs_decoder_select="blockdsp golomb h264chroma idctdsp qpeldsp videodsp"
2115 cllc_decoder_select="bswapdsp"
2116 comfortnoise_encoder_select="lpc"
2117 cook_decoder_select="audiodsp mdct sinewin"
2118 cscd_decoder_select="lzo"
2119 cscd_decoder_suggest="zlib"
2120 dca_decoder_select="fmtconvert mdct"
2121 dirac_decoder_select="dwt golomb videodsp mpegvideoenc"
2122 dnxhd_decoder_select="blockdsp idctdsp"
2123 dnxhd_encoder_select="aandcttables blockdsp fdctdsp idctdsp mpegvideoenc pixblockdsp"
2124 dvvideo_decoder_select="dvprofile idctdsp"
2125 dvvideo_encoder_select="dvprofile fdctdsp me_cmp pixblockdsp"
2126 dxa_decoder_select="zlib"
2127 eac3_decoder_select="ac3_decoder"
2128 eac3_encoder_select="ac3_encoder"
2129 eamad_decoder_select="aandcttables blockdsp bswapdsp idctdsp mpegvideo"
2130 eatgq_decoder_select="aandcttables"
2131 eatqi_decoder_select="aandcttables blockdsp bswapdsp idctdsp mpeg1video_decoder"
2132 exr_decoder_select="zlib"
2133 ffv1_decoder_select="golomb rangecoder"
2134 ffv1_encoder_select="rangecoder"
2135 ffvhuff_decoder_select="huffyuv_decoder"
2136 ffvhuff_encoder_select="huffyuv_encoder"
2137 fic_decoder_select="golomb"
2138 flac_decoder_select="golomb"
2139 flac_encoder_select="bswapdsp golomb lpc"
2140 flashsv_decoder_select="zlib"
2141 flashsv_encoder_select="zlib"
2142 flashsv2_encoder_select="zlib"
2143 flashsv2_decoder_select="zlib"
2144 flv_decoder_select="h263_decoder"
2145 flv_encoder_select="h263_encoder"
2146 fourxm_decoder_select="blockdsp bswapdsp"
2147 fraps_decoder_select="bswapdsp huffman"
2148 g2m_decoder_select="blockdsp idctdsp jpegtables zlib"
2149 g729_decoder_select="audiodsp"
2150 h261_decoder_select="mpeg_er mpegvideo"
2151 h261_encoder_select="aandcttables mpegvideoenc"
2152 h263_decoder_select="error_resilience h263_parser h263dsp mpeg_er mpegvideo qpeldsp"
2153 h263_encoder_select="aandcttables h263dsp mpegvideoenc"
2154 h263i_decoder_select="h263_decoder"
2155 h263p_encoder_select="h263_encoder"
2156 h264_decoder_select="cabac golomb h264chroma h264dsp h264pred h264qpel startcode videodsp"
2157 h264_decoder_suggest="error_resilience"
2158 h264_qsv_decoder_deps="libmfx"
2159 h264_qsv_decoder_select="h264_mp4toannexb_bsf h264_parser qsvdec h264_qsv_hwaccel"
2160 h264_qsv_encoder_deps="libmfx"
2161 h264_qsv_encoder_select="qsvenc"
2162 hevc_decoder_select="bswapdsp cabac golomb videodsp"
2163 huffyuv_decoder_select="bswapdsp huffyuvdsp llviddsp"
2164 huffyuv_encoder_select="bswapdsp huffman huffyuvencdsp llviddsp"
2165 iac_decoder_select="imc_decoder"
2166 imc_decoder_select="bswapdsp fft mdct sinewin"
2167 indeo3_decoder_select="hpeldsp"
2168 interplay_video_decoder_select="hpeldsp"
2169 jpegls_decoder_select="golomb mjpeg_decoder"
2170 jpegls_encoder_select="golomb"
2171 jv_decoder_select="blockdsp"
2172 lagarith_decoder_select="huffyuvdsp"
2173 ljpeg_encoder_select="aandcttables idctdsp jpegtables"
2174 loco_decoder_select="golomb"
2175 mdec_decoder_select="blockdsp idctdsp mpegvideo"
2176 metasound_decoder_select="lsp mdct sinewin"
2177 mimic_decoder_select="blockdsp bswapdsp hpeldsp idctdsp"
2178 mjpeg_decoder_select="blockdsp hpeldsp exif idctdsp jpegtables"
2179 mjpeg_encoder_select="aandcttables jpegtables mpegvideoenc"
2180 mjpegb_decoder_select="mjpeg_decoder"
2181 mlp_decoder_select="mlp_parser"
2182 motionpixels_decoder_select="bswapdsp"
2183 mp1_decoder_select="mpegaudio"
2184 mp1float_decoder_select="mpegaudio"
2185 mp2_decoder_select="mpegaudio"
2186 mp2float_decoder_select="mpegaudio"
2187 mp3_decoder_select="mpegaudio"
2188 mp3adu_decoder_select="mpegaudio"
2189 mp3adufloat_decoder_select="mpegaudio"
2190 mp3float_decoder_select="mpegaudio"
2191 mp3on4_decoder_select="mpegaudio"
2192 mp3on4float_decoder_select="mpegaudio"
2193 mpc7_decoder_select="bswapdsp mpegaudiodsp"
2194 mpc8_decoder_select="mpegaudiodsp"
2195 mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h"
2196 mpeg_xvmc_decoder_select="mpeg2video_decoder"
2197 mpegvideo_decoder_select="error_resilience mpeg_er mpegvideo"
2198 mpeg1video_decoder_select="error_resilience mpeg_er mpegvideo"
2199 mpeg1video_encoder_select="aandcttables mpegvideoenc h263dsp"
2200 mpeg2video_decoder_select="error_resilience mpeg_er mpegvideo"
2201 mpeg2video_encoder_select="aandcttables mpegvideoenc h263dsp"
2202 mpeg4_decoder_select="h263_decoder mpeg4video_parser"
2203 mpeg4_encoder_select="h263_encoder"
2204 msmpeg4v1_decoder_select="h263_decoder"
2205 msmpeg4v2_decoder_select="h263_decoder"
2206 msmpeg4v2_encoder_select="h263_encoder"
2207 msmpeg4v3_decoder_select="h263_decoder"
2208 msmpeg4v3_encoder_select="h263_encoder"
2209 mss2_decoder_select="error_resilience mpeg_er qpeldsp vc1_decoder"
2210 mxpeg_decoder_select="mjpeg_decoder"
2211 nellymoser_decoder_select="mdct sinewin"
2212 nellymoser_encoder_select="audio_frame_queue mdct sinewin"
2213 nuv_decoder_select="idctdsp lzo"
2214 on2avc_decoder_select="mdct"
2215 opus_decoder_deps="swresample"
2216 opus_decoder_select="imdct15"
2217 png_decoder_select="zlib"
2218 png_encoder_select="huffyuvencdsp zlib"
2219 prores_decoder_select="blockdsp idctdsp"
2220 prores_encoder_select="fdctdsp"
2221 qcelp_decoder_select="lsp"
2222 qdm2_decoder_select="mdct rdft mpegaudiodsp"
2223 ra_144_encoder_select="audio_frame_queue lpc audiodsp"
2224 ra_144_decoder_select="audiodsp"
2225 ralf_decoder_select="golomb"
2226 rawvideo_decoder_select="bswapdsp"
2227 rtjpeg_decoder_select="me_cmp"
2228 rv10_decoder_select="error_resilience h263_decoder h263dsp mpeg_er"
2229 rv10_encoder_select="h263_encoder"
2230 rv20_decoder_select="error_resilience h263_decoder h263dsp mpeg_er"
2231 rv20_encoder_select="h263_encoder"
2232 rv30_decoder_select="error_resilience golomb h264chroma h264pred h264qpel mpeg_er mpegvideo videodsp"
2233 rv40_decoder_select="error_resilience golomb h264chroma h264pred h264qpel mpeg_er mpegvideo videodsp"
2234 shorten_decoder_select="golomb"
2235 sipr_decoder_select="lsp"
2236 snow_decoder_select="dwt h264qpel hpeldsp me_cmp rangecoder videodsp"
2237 snow_encoder_select="aandcttables dwt h264qpel hpeldsp me_cmp mpegvideoenc rangecoder"
2238 sonic_decoder_select="golomb rangecoder"
2239 sonic_encoder_select="golomb rangecoder"
2240 sonic_ls_encoder_select="golomb rangecoder"
2241 sp5x_decoder_select="mjpeg_decoder"
2242 svq1_decoder_select="hpeldsp"
2243 svq1_encoder_select="aandcttables hpeldsp me_cmp mpegvideoenc"
2244 svq3_decoder_select="h264_decoder hpeldsp tpeldsp"
2245 svq3_decoder_suggest="zlib"
2246 tak_decoder_select="audiodsp"
2247 tdsc_decoder_select="zlib mjpeg_decoder"
2248 theora_decoder_select="vp3_decoder"
2249 thp_decoder_select="mjpeg_decoder"
2250 tiff_decoder_suggest="zlib lzma"
2251 tiff_encoder_suggest="zlib"
2252 truehd_decoder_select="mlp_parser"
2253 truemotion2_decoder_select="bswapdsp"
2254 truespeech_decoder_select="bswapdsp"
2255 tscc_decoder_select="zlib"
2256 twinvq_decoder_select="mdct lsp sinewin"
2257 utvideo_decoder_select="bswapdsp"
2258 utvideo_encoder_select="bswapdsp huffman huffyuvencdsp"
2259 vble_decoder_select="huffyuvdsp"
2260 vc1_decoder_select="blockdsp error_resilience h263_decoder h264chroma h264qpel intrax8 mpeg_er qpeldsp startcode"
2261 vc1image_decoder_select="vc1_decoder"
2262 vorbis_decoder_select="mdct"
2263 vorbis_encoder_select="mdct"
2264 vp3_decoder_select="hpeldsp vp3dsp videodsp"
2265 vp5_decoder_select="h264chroma hpeldsp videodsp vp3dsp"
2266 vp6_decoder_select="h264chroma hpeldsp huffman videodsp vp3dsp"
2267 vp6a_decoder_select="vp6_decoder"
2268 vp6f_decoder_select="vp6_decoder"
2269 vp7_decoder_select="h264pred videodsp"
2270 vp8_decoder_select="h264pred videodsp"
2271 vp9_decoder_select="videodsp vp9_parser"
2272 webp_decoder_select="vp8_decoder"
2273 wmalossless_decoder_select="llauddsp"
2274 wmapro_decoder_select="mdct sinewin wma_freqs"
2275 wmav1_decoder_select="mdct sinewin wma_freqs"
2276 wmav1_encoder_select="mdct sinewin wma_freqs"
2277 wmav2_decoder_select="mdct sinewin wma_freqs"
2278 wmav2_encoder_select="mdct sinewin wma_freqs"
2279 wmavoice_decoder_select="lsp rdft dct mdct sinewin"
2280 wmv1_decoder_select="h263_decoder"
2281 wmv1_encoder_select="h263_encoder"
2282 wmv2_decoder_select="blockdsp h263_decoder idctdsp intrax8 videodsp"
2283 wmv2_encoder_select="h263_encoder"
2284 wmv3_decoder_select="vc1_decoder"
2285 wmv3image_decoder_select="wmv3_decoder"
2286 zerocodec_decoder_select="zlib"
2287 zlib_decoder_select="zlib"
2288 zlib_encoder_select="zlib"
2289 zmbv_decoder_select="zlib"
2290 zmbv_encoder_select="zlib"
2291
2292 # hardware accelerators
2293 crystalhd_deps="libcrystalhd_libcrystalhd_if_h"
2294 dxva2_deps="dxva2api_h"
2295 vaapi_deps="va_va_h"
2296 vda_deps="VideoDecodeAcceleration_VDADecoder_h pthreads"
2297 vda_extralibs="-framework CoreFoundation -framework VideoDecodeAcceleration -framework QuartzCore"
2298 vdpau_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
2299 xvmc_deps="X11_extensions_XvMClib_h"
2300
2301 h263_vaapi_hwaccel_deps="vaapi"
2302 h263_vaapi_hwaccel_select="h263_decoder"
2303 h263_vdpau_hwaccel_deps="vdpau"
2304 h263_vdpau_hwaccel_select="h263_decoder"
2305 h264_crystalhd_decoder_select="crystalhd h264_mp4toannexb_bsf h264_parser"
2306 h264_dxva2_hwaccel_deps="dxva2"
2307 h264_dxva2_hwaccel_select="h264_decoder"
2308 h264_mmal_decoder_deps="mmal"
2309 h264_mmal_hwaccel_deps="mmal"
2310 h264_mmal_decoder_select="h264_decoder"
2311 h264_mmal_encoder_deps="mmal"
2312 h264_qsv_hwaccel_deps="libmfx"
2313 h264_vaapi_hwaccel_deps="vaapi"
2314 h264_vaapi_hwaccel_select="h264_decoder"
2315 h264_vda_decoder_deps="vda"
2316 h264_vda_decoder_select="h264_decoder"
2317 h264_vda_hwaccel_deps="vda"
2318 h264_vda_hwaccel_select="h264_decoder"
2319 h264_vda_old_hwaccel_deps="vda"
2320 h264_vda_old_hwaccel_select="h264_decoder"
2321 h264_vdpau_decoder_deps="vdpau"
2322 h264_vdpau_decoder_select="h264_decoder"
2323 h264_vdpau_hwaccel_deps="vdpau"
2324 h264_vdpau_hwaccel_select="h264_decoder"
2325 hevc_dxva2_hwaccel_deps="dxva2 DXVA_PicParams_HEVC"
2326 hevc_dxva2_hwaccel_select="hevc_decoder"
2327 mpeg_vdpau_decoder_deps="vdpau"
2328 mpeg_vdpau_decoder_select="mpeg2video_decoder"
2329 mpeg_xvmc_hwaccel_deps="xvmc"
2330 mpeg_xvmc_hwaccel_select="mpeg2video_decoder"
2331 mpeg1_vdpau_decoder_deps="vdpau"
2332 mpeg1_vdpau_decoder_select="mpeg1video_decoder"
2333 mpeg1_vdpau_hwaccel_deps="vdpau"
2334 mpeg1_vdpau_hwaccel_select="mpeg1video_decoder"
2335 mpeg1_xvmc_hwaccel_deps="xvmc"
2336 mpeg1_xvmc_hwaccel_select="mpeg1video_decoder"
2337 mpeg2_crystalhd_decoder_select="crystalhd"
2338 mpeg2_dxva2_hwaccel_deps="dxva2"
2339 mpeg2_dxva2_hwaccel_select="mpeg2video_decoder"
2340 mpeg2_vaapi_hwaccel_deps="vaapi"
2341 mpeg2_vaapi_hwaccel_select="mpeg2video_decoder"
2342 mpeg2_vdpau_hwaccel_deps="vdpau"
2343 mpeg2_vdpau_hwaccel_select="mpeg2video_decoder"
2344 mpeg2_xvmc_hwaccel_deps="xvmc"
2345 mpeg2_xvmc_hwaccel_select="mpeg2video_decoder"
2346 mpeg4_crystalhd_decoder_select="crystalhd"
2347 mpeg4_vaapi_hwaccel_deps="vaapi"
2348 mpeg4_vaapi_hwaccel_select="mpeg4_decoder"
2349 mpeg4_vdpau_decoder_deps="vdpau"
2350 mpeg4_vdpau_decoder_select="mpeg4_decoder"
2351 mpeg4_vdpau_hwaccel_deps="vdpau"
2352 mpeg4_vdpau_hwaccel_select="mpeg4_decoder"
2353 msmpeg4_crystalhd_decoder_select="crystalhd"
2354 vc1_crystalhd_decoder_select="crystalhd"
2355 vc1_dxva2_hwaccel_deps="dxva2"
2356 vc1_dxva2_hwaccel_select="vc1_decoder"
2357 vc1_vaapi_hwaccel_deps="vaapi"
2358 vc1_vaapi_hwaccel_select="vc1_decoder"
2359 vc1_vdpau_decoder_deps="vdpau"
2360 vc1_vdpau_decoder_select="vc1_decoder"
2361 vc1_vdpau_hwaccel_deps="vdpau"
2362 vc1_vdpau_hwaccel_select="vc1_decoder"
2363 wmv3_crystalhd_decoder_select="crystalhd"
2364 wmv3_dxva2_hwaccel_select="vc1_dxva2_hwaccel"
2365 wmv3_vaapi_hwaccel_select="vc1_vaapi_hwaccel"
2366 wmv3_vdpau_decoder_select="vc1_vdpau_decoder"
2367 wmv3_vdpau_hwaccel_select="vc1_vdpau_hwaccel"
2368
2369 # parsers
2370 h264_parser_select="h264_decoder"
2371 hevc_parser_select="hevc_decoder"
2372 mpegvideo_parser_select="mpegvideo"
2373 mpeg4video_parser_select="error_resilience h263dsp mpeg_er mpegvideo qpeldsp"
2374 vc1_parser_select="mpegvideo startcode vc1_decoder"
2375
2376 # bitstream_filters
2377 mjpeg2jpeg_bsf_select="jpegtables"
2378
2379 # external libraries
2380 libaacplus_encoder_deps="libaacplus"
2381 libcelt_decoder_deps="libcelt"
2382 libdcadec_decoder_deps="libdcadec"
2383 libfaac_encoder_deps="libfaac"
2384 libfaac_encoder_select="audio_frame_queue"
2385 libfdk_aac_decoder_deps="libfdk_aac"
2386 libfdk_aac_encoder_deps="libfdk_aac"
2387 libfdk_aac_encoder_select="audio_frame_queue"
2388 libgme_demuxer_deps="libgme"
2389 libgsm_decoder_deps="libgsm"
2390 libgsm_encoder_deps="libgsm"
2391 libgsm_ms_decoder_deps="libgsm"
2392 libgsm_ms_encoder_deps="libgsm"
2393 libilbc_decoder_deps="libilbc"
2394 libilbc_encoder_deps="libilbc"
2395 libmodplug_demuxer_deps="libmodplug"
2396 libmp3lame_encoder_deps="libmp3lame"
2397 libmp3lame_encoder_select="audio_frame_queue"
2398 libopencore_amrnb_decoder_deps="libopencore_amrnb"
2399 libopencore_amrnb_encoder_deps="libopencore_amrnb"
2400 libopencore_amrnb_encoder_select="audio_frame_queue"
2401 libopencore_amrwb_decoder_deps="libopencore_amrwb"
2402 libopenh264_encoder_deps="libopenh264"
2403 libopenjpeg_decoder_deps="libopenjpeg"
2404 libopenjpeg_encoder_deps="libopenjpeg"
2405 libopus_decoder_deps="libopus"
2406 libopus_encoder_deps="libopus"
2407 libopus_encoder_select="audio_frame_queue"
2408 libquvi_demuxer_deps="libquvi"
2409 libschroedinger_decoder_deps="libschroedinger"
2410 libschroedinger_encoder_deps="libschroedinger"
2411 libshine_encoder_deps="libshine"
2412 libshine_encoder_select="audio_frame_queue"
2413 libspeex_decoder_deps="libspeex"
2414 libspeex_encoder_deps="libspeex"
2415 libspeex_encoder_select="audio_frame_queue"
2416 libstagefright_h264_decoder_deps="libstagefright_h264"
2417 libtheora_encoder_deps="libtheora"
2418 libtwolame_encoder_deps="libtwolame"
2419 libvo_aacenc_encoder_deps="libvo_aacenc"
2420 libvo_aacenc_encoder_select="audio_frame_queue"
2421 libvo_amrwbenc_encoder_deps="libvo_amrwbenc"
2422 libvorbis_decoder_deps="libvorbis"
2423 libvorbis_encoder_deps="libvorbis"
2424 libvorbis_encoder_select="audio_frame_queue"
2425 libvpx_vp8_decoder_deps="libvpx"
2426 libvpx_vp8_encoder_deps="libvpx"
2427 libvpx_vp9_decoder_deps="libvpx"
2428 libvpx_vp9_encoder_deps="libvpx"
2429 libwavpack_encoder_deps="libwavpack"
2430 libwebp_encoder_deps="libwebp"
2431 libx264_encoder_deps="libx264"
2432 libx264rgb_encoder_deps="libx264"
2433 libx264rgb_encoder_select="libx264_encoder"
2434 libx265_encoder_deps="libx265"
2435 libxavs_encoder_deps="libxavs"
2436 libxvid_encoder_deps="libxvid"
2437 libutvideo_decoder_deps="libutvideo"
2438 libutvideo_encoder_deps="libutvideo"
2439 libzvbi_teletext_decoder_deps="libzvbi"
2440 nvenc_encoder_deps="nvenc"
2441 nvenc_h265_encoder_deps="nvenc"
2442
2443 # demuxers / muxers
2444 ac3_demuxer_select="ac3_parser"
2445 asf_demuxer_select="riffdec"
2446 asf_muxer_select="riffenc"
2447 asf_stream_muxer_select="asf_muxer"
2448 avi_demuxer_select="riffdec exif"
2449 avi_muxer_select="riffenc"
2450 avisynth_demuxer_deps="avisynth"
2451 avisynth_demuxer_select="riffdec"
2452 caf_demuxer_select="riffdec"
2453 dash_muxer_select="mp4_muxer"
2454 dirac_demuxer_select="dirac_parser"
2455 dts_demuxer_select="dca_parser"
2456 dtshd_demuxer_select="dca_parser"
2457 dv_demuxer_select="dvprofile"
2458 dv_muxer_select="dvprofile"
2459 dxa_demuxer_select="riffdec"
2460 eac3_demuxer_select="ac3_parser"
2461 f4v_muxer_select="mov_muxer"
2462 flac_demuxer_select="flac_parser"
2463 hds_muxer_select="flv_muxer"
2464 hls_muxer_select="mpegts_muxer"
2465 image2_alias_pix_demuxer_select="image2_demuxer"
2466 image2_brender_pix_demuxer_select="image2_demuxer"
2467 ipod_muxer_select="mov_muxer"
2468 ismv_muxer_select="mov_muxer"
2469 libnut_demuxer_deps="libnut"
2470 libnut_muxer_deps="libnut"
2471 matroska_audio_muxer_select="matroska_muxer"
2472 matroska_demuxer_select="riffdec"
2473 matroska_demuxer_suggest="bzlib lzo zlib"
2474 matroska_muxer_select="riffenc"
2475 mmf_muxer_select="riffenc"
2476 mov_demuxer_select="riffdec"
2477 mov_demuxer_suggest="zlib"
2478 mov_muxer_select="riffenc rtpenc_chain"
2479 mp3_demuxer_select="mpegaudio_parser"
2480 mp4_muxer_select="mov_muxer"
2481 mpegts_muxer_select="adts_muxer latm_muxer"
2482 mpegtsraw_demuxer_select="mpegts_demuxer"
2483 mxf_d10_muxer_select="mxf_muxer"
2484 mxf_opatom_muxer_select="mxf_muxer"
2485 nut_muxer_select="riffenc"
2486 nuv_demuxer_select="riffdec"
2487 oga_muxer_select="ogg_muxer"
2488 ogg_demuxer_select="golomb"
2489 opus_muxer_select="ogg_muxer"
2490 psp_muxer_select="mov_muxer"
2491 rtp_demuxer_select="sdp_demuxer"
2492 rtpdec_select="asf_demuxer jpegtables mov_demuxer mpegts_demuxer rm_demuxer rtp_protocol"
2493 rtsp_demuxer_select="http_protocol rtpdec"
2494 rtsp_muxer_select="rtp_muxer http_protocol rtp_protocol rtpenc_chain"
2495 sap_demuxer_select="sdp_demuxer"
2496 sap_muxer_select="rtp_muxer rtp_protocol rtpenc_chain"
2497 sdp_demuxer_select="rtpdec"
2498 smoothstreaming_muxer_select="ismv_muxer"
2499 spdif_muxer_select="aac_parser"
2500 spx_muxer_select="ogg_muxer"
2501 tak_demuxer_select="tak_parser"
2502 tg2_muxer_select="mov_muxer"
2503 tgp_muxer_select="mov_muxer"
2504 vobsub_demuxer_select="mpegps_demuxer"
2505 w64_demuxer_select="wav_demuxer"
2506 w64_muxer_select="wav_muxer"
2507 wav_demuxer_select="riffdec"
2508 wav_muxer_select="riffenc"
2509 webm_muxer_select="riffenc"
2510 wtv_demuxer_select="riffdec"
2511 wtv_muxer_select="riffenc"
2512 xmv_demuxer_select="riffdec"
2513 xwma_demuxer_select="riffdec"
2514
2515 # indevs / outdevs
2516 alsa_indev_deps="alsa_asoundlib_h snd_pcm_htimestamp"
2517 alsa_outdev_deps="alsa_asoundlib_h"
2518 avfoundation_indev_extralibs="-framework CoreVideo -framework Foundation -framework AVFoundation -framework CoreMedia"
2519 avfoundation_indev_select="avfoundation"
2520 bktr_indev_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
2521 caca_outdev_deps="libcaca"
2522 decklink_outdev_deps="decklink pthreads"
2523 decklink_outdev_extralibs="-lstdc++"
2524 decklink_indev_deps="decklink pthreads"
2525 decklink_indev_extralibs="-lstdc++"
2526 dshow_indev_deps="IBaseFilter"
2527 dshow_indev_extralibs="-lpsapi -lole32 -lstrmiids -luuid -loleaut32"
2528 dv1394_indev_deps="dv1394"
2529 dv1394_indev_select="dv_demuxer"
2530 fbdev_indev_deps="linux_fb_h"
2531 fbdev_outdev_deps="linux_fb_h"
2532 gdigrab_indev_deps="CreateDIBSection"
2533 gdigrab_indev_extralibs="-lgdi32"
2534 gdigrab_indev_select="bmp_decoder"
2535 iec61883_indev_deps="libiec61883"
2536 jack_indev_deps="jack_jack_h sem_timedwait"
2537 lavfi_indev_deps="avfilter"
2538 libcdio_indev_deps="libcdio"
2539 libdc1394_indev_deps="libdc1394"
2540 libv4l2_indev_deps="libv4l2"
2541 openal_indev_deps="openal"
2542 opengl_outdev_deps="opengl"
2543 oss_indev_deps_any="soundcard_h sys_soundcard_h"
2544 oss_outdev_deps_any="soundcard_h sys_soundcard_h"
2545 pulse_indev_deps="libpulse"
2546 pulse_outdev_deps="libpulse"
2547 qtkit_indev_extralibs="-framework QTKit -framework Foundation -framework QuartzCore"
2548 qtkit_indev_select="qtkit"
2549 sdl_outdev_deps="sdl"
2550 sndio_indev_deps="sndio_h"
2551 sndio_outdev_deps="sndio_h"
2552 v4l_indev_deps="linux_videodev_h"
2553 v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h"
2554 v4l2_outdev_deps_any="linux_videodev2_h sys_videoio_h"
2555 vfwcap_indev_deps="capCreateCaptureWindow vfwcap_defines"
2556 vfwcap_indev_extralibs="-lavicap32"
2557 xv_outdev_deps="X11_extensions_Xvlib_h XvGetPortAttribute"
2558 xv_outdev_extralibs="-lXv -lX11 -lXext"
2559 x11grab_indev_deps="x11grab"
2560 x11grab_xcb_indev_deps="libxcb"
2561
2562 # protocols
2563 bluray_protocol_deps="libbluray"
2564 ffrtmpcrypt_protocol_deps="!librtmp_protocol"
2565 ffrtmpcrypt_protocol_deps_any="gcrypt nettle openssl"
2566 ffrtmpcrypt_protocol_select="tcp_protocol"
2567 ffrtmphttp_protocol_deps="!librtmp_protocol"
2568 ffrtmphttp_protocol_select="http_protocol"
2569 ftp_protocol_select="tcp_protocol"
2570 gopher_protocol_select="network"
2571 http_protocol_select="tcp_protocol"
2572 httpproxy_protocol_select="tcp_protocol"
2573 https_protocol_select="tls_protocol"
2574 icecast_protocol_select="http_protocol"
2575 librtmp_protocol_deps="librtmp"
2576 librtmpe_protocol_deps="librtmp"
2577 librtmps_protocol_deps="librtmp"
2578 librtmpt_protocol_deps="librtmp"
2579 librtmpte_protocol_deps="librtmp"
2580 libsmbclient_protocol_deps="libsmbclient gplv3"
2581 libssh_protocol_deps="libssh"
2582 mmsh_protocol_select="http_protocol"
2583 mmst_protocol_select="network"
2584 rtmp_protocol_deps="!librtmp_protocol"
2585 rtmp_protocol_select="tcp_protocol"
2586 rtmpe_protocol_select="ffrtmpcrypt_protocol"
2587 rtmps_protocol_deps="!librtmp_protocol"
2588 rtmps_protocol_select="tls_protocol"
2589 rtmpt_protocol_select="ffrtmphttp_protocol"
2590 rtmpte_protocol_select="ffrtmpcrypt_protocol ffrtmphttp_protocol"
2591 rtmpts_protocol_select="ffrtmphttp_protocol https_protocol"
2592 rtp_protocol_select="udp_protocol"
2593 sctp_protocol_deps="struct_sctp_event_subscribe"
2594 sctp_protocol_select="network"
2595 srtp_protocol_select="rtp_protocol"
2596 tcp_protocol_select="network"
2597 tls_protocol_deps_any="openssl gnutls"
2598 tls_protocol_select="tcp_protocol"
2599 udp_protocol_select="network"
2600 udplite_protocol_select="network"
2601 unix_protocol_deps="sys_un_h"
2602 unix_protocol_select="network"
2603
2604 # filters
2605 amovie_filter_deps="avcodec avformat"
2606 aresample_filter_deps="swresample"
2607 ass_filter_deps="libass"
2608 asyncts_filter_deps="avresample"
2609 atempo_filter_deps="avcodec"
2610 atempo_filter_select="rdft"
2611 azmq_filter_deps="libzmq"
2612 blackframe_filter_deps="gpl"
2613 boxblur_filter_deps="gpl"
2614 bs2b_filter_deps="libbs2b"
2615 colormatrix_filter_deps="gpl"
2616 cropdetect_filter_deps="gpl"
2617 delogo_filter_deps="gpl"
2618 deshake_filter_select="pixelutils"
2619 drawtext_filter_deps="libfreetype"
2620 ebur128_filter_deps="gpl"
2621 eq_filter_deps="gpl"
2622 fftfilt_filter_deps="avcodec"
2623 fftfilt_filter_select="rdft"
2624 flite_filter_deps="libflite"
2625 frei0r_filter_deps="frei0r dlopen"
2626 frei0r_src_filter_deps="frei0r dlopen"
2627 fspp_filter_deps="gpl"
2628 geq_filter_deps="gpl"
2629 histeq_filter_deps="gpl"
2630 hqdn3d_filter_deps="gpl"
2631 interlace_filter_deps="gpl"
2632 kerndeint_filter_deps="gpl"
2633 ladspa_filter_deps="ladspa dlopen"
2634 mcdeint_filter_deps="avcodec gpl"
2635 movie_filter_deps="avcodec avformat"
2636 mpdecimate_filter_deps="gpl"
2637 mpdecimate_filter_select="pixelutils"
2638 mptestsrc_filter_deps="gpl"
2639 negate_filter_deps="lut_filter"
2640 perspective_filter_deps="gpl"
2641 pp7_filter_deps="gpl"
2642 ocv_filter_deps="libopencv"
2643 owdenoise_filter_deps="gpl"
2644 pan_filter_deps="swresample"
2645 phase_filter_deps="gpl"
2646 pp_filter_deps="gpl postproc"
2647 pullup_filter_deps="gpl"
2648 removelogo_filter_deps="avcodec avformat swscale"
2649 repeatfields_filter_deps="gpl"
2650 resample_filter_deps="avresample"
2651 sab_filter_deps="gpl swscale"
2652 scale_filter_deps="swscale"
2653 select_filter_select="pixelutils"
2654 smartblur_filter_deps="gpl swscale"
2655 showspectrum_filter_deps="avcodec"
2656 showspectrum_filter_select="rdft"
2657 spp_filter_deps="gpl avcodec"
2658 spp_filter_select="fft idctdsp fdctdsp me_cmp pixblockdsp"
2659 stereo3d_filter_deps="gpl"
2660 subtitles_filter_deps="avformat avcodec libass"
2661 super2xsai_filter_deps="gpl"
2662 tinterlace_filter_deps="gpl"
2663 vidstabdetect_filter_deps="libvidstab"
2664 vidstabtransform_filter_deps="libvidstab"
2665 pixfmts_super2xsai_test_deps="super2xsai_filter"
2666 tinterlace_merge_test_deps="tinterlace_filter"
2667 tinterlace_pad_test_deps="tinterlace_filter"
2668 uspp_filter_deps="gpl avcodec"
2669 zmq_filter_deps="libzmq"
2670 zoompan_filter_deps="swscale"
2671
2672 # examples
2673 avio_reading="avformat avcodec avutil"
2674 avio_list_dir="avformat avutil"
2675 avcodec_example_deps="avcodec avutil"
2676 decoding_encoding_example_deps="avcodec avformat avutil"
2677 demuxing_decoding_example_deps="avcodec avformat avutil"
2678 extract_mvs_example_deps="avcodec avformat avutil"
2679 filter_audio_example_deps="avfilter avutil"
2680 filtering_audio_example_deps="avfilter avcodec avformat avutil"
2681 filtering_video_example_deps="avfilter avcodec avformat avutil"
2682 metadata_example_deps="avformat avutil"
2683 muxing_example_deps="avcodec avformat avutil swscale"
2684 qsvdec_example_deps="avcodec avutil libmfx h264_qsv_decoder vaapi_x11"
2685 remuxing_example_deps="avcodec avformat avutil"
2686 resampling_audio_example_deps="avutil swresample"
2687 scaling_video_example_deps="avutil swscale"
2688 transcode_aac_example_deps="avcodec avformat swresample"
2689 transcoding_example_deps="avfilter avcodec avformat avutil"
2690
2691 # libraries, in linking order
2692 avcodec_deps="avutil"
2693 avdevice_deps="avformat avcodec avutil"
2694 avfilter_deps="avutil"
2695 avformat_deps="avcodec avutil"
2696 avresample_deps="avutil"
2697 postproc_deps="avutil gpl"
2698 swresample_deps="avutil"
2699 swscale_deps="avutil"
2700
2701 # programs
2702 ffmpeg_deps="avcodec avfilter avformat swresample"
2703 ffmpeg_select="aformat_filter anull_filter atrim_filter format_filter
2704                null_filter
2705                setpts_filter trim_filter"
2706 ffplay_deps="avcodec avformat swscale swresample sdl"
2707 ffplay_libs='$sdl_libs'
2708 ffplay_select="rdft crop_filter transpose_filter hflip_filter vflip_filter rotate_filter"
2709 ffprobe_deps="avcodec avformat"
2710 ffserver_deps="avformat fork sarestart"
2711 ffserver_select="ffm_muxer rtp_protocol rtsp_demuxer"
2712
2713 # documentation
2714 podpages_deps="perl"
2715 manpages_deps="perl pod2man"
2716 htmlpages_deps="perl"
2717 htmlpages_deps_any="makeinfo_html texi2html"
2718 txtpages_deps="perl makeinfo"
2719 doc_deps_any="manpages htmlpages podpages txtpages"
2720
2721 # default parameters
2722
2723 logfile="config.log"
2724
2725 # installation paths
2726 prefix_default="/usr/local"
2727 bindir_default='${prefix}/bin'
2728 datadir_default='${prefix}/share/ffmpeg'
2729 docdir_default='${prefix}/share/doc/ffmpeg'
2730 incdir_default='${prefix}/include'
2731 libdir_default='${prefix}/lib'
2732 mandir_default='${prefix}/share/man'
2733
2734 # toolchain
2735 ar_default="ar"
2736 cc_default="gcc"
2737 cxx_default="g++"
2738 host_cc_default="gcc"
2739 cp_f="cp -f"
2740 doxygen_default="doxygen"
2741 install="install"
2742 ln_s="ln -s -f"
2743 nm_default="nm -g"
2744 objformat="elf"
2745 pkg_config_default=pkg-config
2746 if ranlib 2>&1 | grep -q "\-D "; then
2747     ranlib_default="ranlib -D"
2748 else
2749     ranlib_default="ranlib"
2750 fi
2751 strip_default="strip"
2752 yasmexe_default="yasm"
2753 windres_default="windres"
2754
2755 # OS
2756 target_os_default=$(tolower $(uname -s))
2757 host_os=$target_os_default
2758
2759 # machine
2760 if test "$target_os_default" = aix; then
2761     arch_default=$(uname -p)
2762     strip_default="strip -X32_64"
2763 else
2764     arch_default=$(uname -m)
2765 fi
2766 cpu="generic"
2767 intrinsics="none"
2768
2769 # configurable options
2770 enable $PROGRAM_LIST
2771 enable $DOCUMENT_LIST
2772 enable $EXAMPLE_LIST
2773 enable $(filter_out avresample $LIBRARY_LIST)
2774 enable stripping
2775
2776 enable asm
2777 enable debug
2778 enable doc
2779 enable faan faandct faanidct
2780 enable optimizations
2781 enable runtime_cpudetect
2782 enable safe_bitstream_reader
2783 enable static
2784 enable swscale_alpha
2785
2786 sws_max_filter_size_default=256
2787 set_default sws_max_filter_size
2788
2789 # Enable hwaccels by default.
2790 enable dxva2 vaapi vda vdpau xvmc
2791 enable xlib
2792
2793 # build settings
2794 SHFLAGS='-shared -Wl,-soname,$$(@F)'
2795 LIBPREF="lib"
2796 LIBSUF=".a"
2797 FULLNAME='$(NAME)$(BUILDSUF)'
2798 LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
2799 SLIBPREF="lib"
2800 SLIBSUF=".so"
2801 SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
2802 SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
2803 SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
2804 LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
2805 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'
2806 SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR) $(SLIBNAME)'
2807
2808 asflags_filter=echo
2809 cflags_filter=echo
2810 ldflags_filter=echo
2811
2812 AS_C='-c'
2813 AS_O='-o $@'
2814 CC_C='-c'
2815 CC_E='-E -o $@'
2816 CC_O='-o $@'
2817 CXX_C='-c'
2818 CXX_O='-o $@'
2819 LD_O='-o $@'
2820 LD_LIB='-l%'
2821 LD_PATH='-L'
2822 HOSTCC_C='-c'
2823 HOSTCC_E='-E -o $@'
2824 HOSTCC_O='-o $@'
2825 HOSTLD_O='-o $@'
2826
2827 host_libs='-lm'
2828 host_cflags_filter=echo
2829 host_ldflags_filter=echo
2830
2831 target_path='$(CURDIR)'
2832
2833 # since the object filename is not given with the -MM flag, the compiler
2834 # is only able to print the basename, and we must add the path ourselves
2835 DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o," > $(@:.o=.d)'
2836 DEPFLAGS='-MM'
2837
2838 # find source path
2839 if test -f configure; then
2840     source_path=.
2841 else
2842     source_path=$(cd $(dirname "$0"); pwd)
2843     echo "$source_path" | grep -q '[[:blank:]]' &&
2844         die "Out of tree builds are impossible with whitespace in source path."
2845     test -e "$source_path/config.h" &&
2846         die "Out of tree builds are impossible with config.h in source dir."
2847 fi
2848
2849 for v in "$@"; do
2850     r=${v#*=}
2851     l=${v%"$r"}
2852     r=$(sh_quote "$r")
2853     FFMPEG_CONFIGURATION="${FFMPEG_CONFIGURATION# } ${l}${r}"
2854 done
2855
2856 find_things(){
2857     thing=$1
2858     pattern=$2
2859     file=$source_path/$3
2860     sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
2861 }
2862
2863 ENCODER_LIST=$(find_things  encoder  ENC      libavcodec/allcodecs.c)
2864 DECODER_LIST=$(find_things  decoder  DEC      libavcodec/allcodecs.c)
2865 HWACCEL_LIST=$(find_things  hwaccel  HWACCEL  libavcodec/allcodecs.c)
2866 PARSER_LIST=$(find_things   parser   PARSER   libavcodec/allcodecs.c)
2867 BSF_LIST=$(find_things      bsf      BSF      libavcodec/allcodecs.c)
2868 MUXER_LIST=$(find_things    muxer    _MUX     libavformat/allformats.c)
2869 DEMUXER_LIST=$(find_things  demuxer  DEMUX    libavformat/allformats.c)
2870 OUTDEV_LIST=$(find_things   outdev   OUTDEV   libavdevice/alldevices.c)
2871 INDEV_LIST=$(find_things    indev    _IN      libavdevice/alldevices.c)
2872 PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
2873 FILTER_LIST=$(find_things   filter   FILTER   libavfilter/allfilters.c)
2874
2875 ALL_COMPONENTS="
2876     $BSF_LIST
2877     $DECODER_LIST
2878     $DEMUXER_LIST
2879     $ENCODER_LIST
2880     $FILTER_LIST
2881     $HWACCEL_LIST
2882     $INDEV_LIST
2883     $MUXER_LIST
2884     $OUTDEV_LIST
2885     $PARSER_LIST
2886     $PROTOCOL_LIST
2887 "
2888
2889 for n in $COMPONENT_LIST; do
2890     v=$(toupper ${n%s})_LIST
2891     eval enable \$$v
2892     eval ${n}_if_any="\$$v"
2893 done
2894
2895 enable $ARCH_EXT_LIST
2896
2897 die_unknown(){
2898     echo "Unknown option \"$1\"."
2899     echo "See $0 --help for available options."
2900     exit 1
2901 }
2902
2903 print_3_columns() {
2904     cat | tr ' ' '\n' | sort | pr -r -3 -t
2905 }
2906
2907 show_list() {
2908     suffix=_$1
2909     shift
2910     echo $* | sed s/$suffix//g | print_3_columns
2911     exit 0
2912 }
2913
2914 rand_list(){
2915     IFS=', '
2916     set -- $*
2917     unset IFS
2918     for thing; do
2919         comp=${thing%:*}
2920         prob=${thing#$comp}
2921         prob=${prob#:}
2922         is_in ${comp} $COMPONENT_LIST && eval comp=\$$(toupper ${comp%s})_LIST
2923         echo "prob ${prob:-0.5}"
2924         printf '%s\n' $comp
2925     done
2926 }
2927
2928 do_random(){
2929     action=$1
2930     shift
2931     random_seed=$(awk "BEGIN { srand($random_seed); print srand() }")
2932     $action $(rand_list "$@" | awk "BEGIN { srand($random_seed) } \$1 == \"prob\" { prob = \$2; next } rand() < prob { print }")
2933 }
2934
2935 for opt do
2936     optval="${opt#*=}"
2937     case "$opt" in
2938         --extra-ldflags=*)
2939             add_ldflags $optval
2940         ;;
2941         --extra-ldexeflags=*)
2942             add_ldexeflags $optval
2943         ;;
2944         --extra-libs=*)
2945             add_extralibs $optval
2946         ;;
2947         --disable-devices)
2948             disable $INDEV_LIST $OUTDEV_LIST
2949         ;;
2950         --enable-debug=*)
2951             debuglevel="$optval"
2952         ;;
2953         --disable-programs)
2954             disable $PROGRAM_LIST
2955         ;;
2956         --disable-everything)
2957             map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
2958         ;;
2959         --disable-all)
2960             map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
2961             disable $LIBRARY_LIST $PROGRAM_LIST doc
2962         ;;
2963         --enable-random|--disable-random)
2964             action=${opt%%-random}
2965             do_random ${action#--} $COMPONENT_LIST
2966         ;;
2967         --enable-random=*|--disable-random=*)
2968             action=${opt%%-random=*}
2969             do_random ${action#--} $optval
2970         ;;
2971         --enable-*=*|--disable-*=*)
2972             eval $(echo "${opt%%=*}" | sed 's/--/action=/;s/-/ thing=/')
2973             is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt"
2974             eval list=\$$(toupper $thing)_LIST
2975             name=$(echo "${optval}" | sed "s/,/_${thing}|/g")_${thing}
2976             list=$(filter "$name" $list)
2977             [ "$list" = "" ] && warn "Option $opt did not match anything"
2978             $action $list
2979         ;;
2980         --enable-?*|--disable-?*)
2981             eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
2982             if is_in $option $COMPONENT_LIST; then
2983                 test $action = disable && action=unset
2984                 eval $action \$$(toupper ${option%s})_LIST
2985             elif is_in $option $CMDLINE_SELECT; then
2986                 $action $option
2987             else
2988                 die_unknown $opt
2989             fi
2990         ;;
2991         --list-*)
2992             NAME="${opt#--list-}"
2993             is_in $NAME $COMPONENT_LIST || die_unknown $opt
2994             NAME=${NAME%s}
2995             eval show_list $NAME \$$(toupper $NAME)_LIST
2996         ;;
2997         --help|-h) show_help
2998         ;;
2999         --fatal-warnings) enable fatal_warnings
3000         ;;
3001         *)
3002             optname="${opt%%=*}"
3003             optname="${optname#--}"
3004             optname=$(echo "$optname" | sed 's/-/_/g')
3005             if is_in $optname $CMDLINE_SET; then
3006                 eval $optname='$optval'
3007             elif is_in $optname $CMDLINE_APPEND; then
3008                 append $optname "$optval"
3009             else
3010                 die_unknown $opt
3011             fi
3012         ;;
3013     esac
3014 done
3015
3016 disabled logging && logfile=/dev/null
3017
3018 echo "# $0 $FFMPEG_CONFIGURATION" > $logfile
3019 set >> $logfile
3020
3021 test -n "$valgrind" && toolchain="valgrind-memcheck"
3022
3023 case "$toolchain" in
3024     clang-asan)
3025         cc_default="clang"
3026         add_cflags  -fsanitize=address
3027         add_ldflags -fsanitize=address
3028     ;;
3029     clang-tsan)
3030         cc_default="clang"
3031         add_cflags  -fsanitize=thread -pie
3032         add_ldflags -fsanitize=thread -pie
3033     ;;
3034     clang-usan)
3035         cc_default="clang"
3036         add_cflags  -fsanitize=undefined
3037         add_ldflags -fsanitize=undefined
3038     ;;
3039     gcc-asan)
3040         cc_default="gcc"
3041         add_cflags  -fsanitize=address
3042         add_ldflags -fsanitize=address
3043     ;;
3044     gcc-tsan)
3045         cc_default="gcc"
3046         add_cflags  -fsanitize=thread -pie -fPIC
3047         add_ldflags -fsanitize=thread -pie -fPIC
3048     ;;
3049     gcc-usan)
3050         cc_default="gcc"
3051         add_cflags  -fsanitize=undefined
3052         add_ldflags -fsanitize=undefined
3053     ;;
3054     valgrind-massif)
3055         target_exec_default=${valgrind:-"valgrind"}
3056         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"
3057     ;;
3058     valgrind-memcheck)
3059         target_exec_default=${valgrind:-"valgrind"}
3060         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"
3061     ;;
3062     msvc)
3063         # Check whether the current MSVC version needs the C99 converter.
3064         # From MSVC 2013 (compiler major version 18) onwards, it does actually
3065         # support enough of C99 to build ffmpeg. Default to the new
3066         # behaviour if the regexp was unable to match anything, since this
3067         # successfully parses the version number of existing supported
3068         # versions that require the converter (MSVC 2010 and 2012).
3069         cl_major_ver=$(cl 2>&1 | sed -n 's/.*Version \([[:digit:]]\{1,\}\)\..*/\1/p')
3070         if [ -z "$cl_major_ver" ] || [ $cl_major_ver -ge 18 ]; then
3071             cc_default="cl"
3072         else
3073             cc_default="c99wrap cl"
3074         fi
3075         ld_default="link"
3076         nm_default="dumpbin -symbols"
3077         ar_default="lib"
3078         target_os_default="win32"
3079         # Use a relative path for TMPDIR. This makes sure all the
3080         # ffconf temp files are written with a relative path, avoiding
3081         # issues with msys/win32 path conversion for MSVC parameters
3082         # such as -Fo<file> or -out:<file>.
3083         TMPDIR=.
3084     ;;
3085     icl)
3086         cc_default="icl"
3087         ld_default="xilink"
3088         nm_default="dumpbin -symbols"
3089         ar_default="xilib"
3090         target_os_default="win32"
3091         TMPDIR=.
3092     ;;
3093     gcov)
3094         add_cflags  -fprofile-arcs -ftest-coverage
3095         add_ldflags -fprofile-arcs -ftest-coverage
3096     ;;
3097     hardened)
3098         add_cppflags -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2
3099         add_cflags   -fno-strict-overflow -fstack-protector-all
3100         add_ldflags  -Wl,-z,relro -Wl,-z,now
3101     ;;
3102     ?*)
3103         die "Unknown toolchain $toolchain"
3104     ;;
3105 esac
3106
3107 test -n "$cross_prefix" && enable cross_compile
3108
3109 if enabled cross_compile; then
3110     test -n "$arch" && test -n "$target_os" ||
3111         die "Must specify target arch and OS when cross-compiling"
3112 fi
3113
3114 ar_default="${cross_prefix}${ar_default}"
3115 cc_default="${cross_prefix}${cc_default}"
3116 cxx_default="${cross_prefix}${cxx_default}"
3117 nm_default="${cross_prefix}${nm_default}"
3118 pkg_config_default="${cross_prefix}${pkg_config_default}"
3119 ranlib_default="${cross_prefix}${ranlib_default}"
3120 strip_default="${cross_prefix}${strip_default}"
3121 windres_default="${cross_prefix}${windres_default}"
3122
3123 sysinclude_default="${sysroot}/usr/include"
3124
3125 set_default arch cc cxx doxygen pkg_config ranlib strip sysinclude \
3126     target_exec target_os yasmexe
3127 enabled cross_compile || host_cc_default=$cc
3128 set_default host_cc
3129
3130 pkg_config_fail_message=""
3131 if ! $pkg_config --version >/dev/null 2>&1; then
3132     warn "$pkg_config not found, library detection may fail."
3133     pkg_config=false
3134 elif is_in -static $cc $LDFLAGS && ! is_in --static $pkg_config $pkg_config_flags; then
3135     pkg_config_fail_message="
3136 Note: When building a static binary, add --pkg-config-flags=\"--static\"."
3137 fi
3138
3139 if test $doxygen != $doxygen_default && \
3140   ! $doxygen --version >/dev/null 2>&1; then
3141     warn "Specified doxygen \"$doxygen\" not found, API documentation will fail to build."
3142 fi
3143
3144 exesuf() {
3145     case $1 in
3146         mingw32*|win32|win64|cygwin*|*-dos|freedos|opendos|os/2*|symbian) echo .exe ;;
3147     esac
3148 }
3149
3150 EXESUF=$(exesuf $target_os)
3151 HOSTEXESUF=$(exesuf $host_os)
3152
3153 # set temporary file name
3154 : ${TMPDIR:=$TEMPDIR}
3155 : ${TMPDIR:=$TMP}
3156 : ${TMPDIR:=/tmp}
3157
3158 if [ -n "$tempprefix" ] ; then
3159     mktemp(){
3160         echo $tempprefix.${HOSTNAME}.${UID}
3161     }
3162 elif ! check_cmd mktemp -u XXXXXX; then
3163     # simple replacement for missing mktemp
3164     # NOT SAFE FOR GENERAL USE
3165     mktemp(){
3166         echo "${2%%XXX*}.${HOSTNAME}.${UID}.$$"
3167     }
3168 fi
3169
3170 tmpfile(){
3171     tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
3172         (set -C; exec > $tmp) 2>/dev/null ||
3173         die "Unable to create temporary file in $TMPDIR."
3174     append TMPFILES $tmp
3175     eval $1=$tmp
3176 }
3177
3178 trap 'rm -f -- $TMPFILES' EXIT
3179
3180 tmpfile TMPASM .asm
3181 tmpfile TMPC   .c
3182 tmpfile TMPCPP .cpp
3183 tmpfile TMPE   $EXESUF
3184 tmpfile TMPH   .h
3185 tmpfile TMPM   .m
3186 tmpfile TMPO   .o
3187 tmpfile TMPS   .S
3188 tmpfile TMPSH  .sh
3189 tmpfile TMPV   .ver
3190
3191 unset -f mktemp
3192
3193 chmod +x $TMPE
3194
3195 # make sure we can execute files in $TMPDIR
3196 cat > $TMPSH 2>> $logfile <<EOF
3197 #! /bin/sh
3198 EOF
3199 chmod +x $TMPSH >> $logfile 2>&1
3200 if ! $TMPSH >> $logfile 2>&1; then
3201     cat <<EOF
3202 Unable to create and execute files in $TMPDIR.  Set the TMPDIR environment
3203 variable to another directory and make sure that it is not mounted noexec.
3204 EOF
3205     die "Sanity test failed."
3206 fi
3207
3208 armasm_flags(){
3209     for flag; do
3210         case $flag in
3211             # Filter out MSVC cl.exe options from cflags that shouldn't
3212             # be passed to gas-preprocessor
3213             -M[TD]*)                                            ;;
3214             *)                  echo $flag                      ;;
3215         esac
3216    done
3217 }
3218
3219 ccc_flags(){
3220     for flag; do
3221         case $flag in
3222             -std=c99)           echo -c99                       ;;
3223             -mcpu=*)            echo -arch ${flag#*=}           ;;
3224             -mieee)             echo -ieee                      ;;
3225             -O*|-fast)          echo $flag                      ;;
3226             -fno-math-errno)    echo -assume nomath_errno       ;;
3227             -g)                 echo -g3                        ;;
3228             -Wall)              echo -msg_enable level2         ;;
3229             -Wno-pointer-sign)  echo -msg_disable ptrmismatch1  ;;
3230             -Wl,*)              echo $flag                      ;;
3231             -f*|-W*)                                            ;;
3232             *)                  echo $flag                      ;;
3233         esac
3234    done
3235 }
3236
3237 cparser_flags(){
3238     for flag; do
3239         case $flag in
3240             -Wno-switch)             echo -Wno-switch-enum ;;
3241             -Wno-format-zero-length) ;;
3242             -Wdisabled-optimization) ;;
3243             -Wno-pointer-sign)       echo -Wno-other ;;
3244             *)                       echo $flag ;;
3245         esac
3246     done
3247 }
3248
3249 msvc_common_flags(){
3250     for flag; do
3251         case $flag in
3252             # In addition to specifying certain flags under the compiler
3253             # specific filters, they must be specified here as well or else the
3254             # generic catch all at the bottom will print the original flag.
3255             -Wall)                ;;
3256             -std=c99)             ;;
3257             # Common flags
3258             -fomit-frame-pointer) ;;
3259             -g)                   echo -Z7 ;;
3260             -fno-math-errno)      ;;
3261             -fno-common)          ;;
3262             -fno-signed-zeros)    ;;
3263             -fPIC)                ;;
3264             -mthumb)              ;;
3265             -march=*)             ;;
3266             -lz)                  echo zlib.lib ;;
3267             -lavifil32)           echo vfw32.lib ;;
3268             -lavicap32)           echo vfw32.lib user32.lib ;;
3269             -l*)                  echo ${flag#-l}.lib ;;
3270             -L*)                  echo -libpath:${flag#-L} ;;
3271             *)                    echo $flag ;;
3272         esac
3273     done
3274 }
3275
3276 msvc_flags(){
3277     msvc_common_flags "$@"
3278     for flag; do
3279         case $flag in
3280             -Wall)                echo -W4 -wd4244 -wd4127 -wd4018 -wd4389     \
3281                                        -wd4146 -wd4057 -wd4204 -wd4706 -wd4305 \
3282                                        -wd4152 -wd4324 -we4013 -wd4100 -wd4214 \
3283                                        -wd4307 \
3284                                        -wd4273 -wd4554 -wd4701 ;;
3285         esac
3286     done
3287 }
3288
3289 icl_flags(){
3290     msvc_common_flags "$@"
3291     for flag; do
3292         case $flag in
3293             # Despite what Intel's documentation says -Wall, which is supported
3294             # on Windows, does enable remarks so disable them here.
3295             -Wall)                echo $flag -Qdiag-disable:remark ;;
3296             -std=c99)             echo -Qstd=c99 ;;
3297             -flto)                echo -ipo ;;
3298         esac
3299     done
3300 }
3301
3302 icc_flags(){
3303     for flag; do
3304         case $flag in
3305             -flto)                echo -ipo ;;
3306             *)                    echo $flag ;;
3307         esac
3308     done
3309 }
3310
3311 pgi_flags(){
3312     for flag; do
3313         case $flag in
3314             -flto)                echo -Mipa=fast,libopt,libinline,vestigial ;;
3315             -fomit-frame-pointer) echo -Mnoframe ;;
3316             -g)                   echo -gopt ;;
3317             *)                    echo $flag ;;
3318         esac
3319     done
3320 }
3321
3322 suncc_flags(){
3323     for flag; do
3324         case $flag in
3325             -march=*|-mcpu=*)
3326                 case "${flag#*=}" in
3327                     native)                   echo -xtarget=native       ;;
3328                     v9|niagara)               echo -xarch=sparc          ;;
3329                     ultrasparc)               echo -xarch=sparcvis       ;;
3330                     ultrasparc3|niagara2)     echo -xarch=sparcvis2      ;;
3331                     i586|pentium)             echo -xchip=pentium        ;;
3332                     i686|pentiumpro|pentium2) echo -xtarget=pentium_pro  ;;
3333                     pentium3*|c3-2)           echo -xtarget=pentium3     ;;
3334                     pentium-m)          echo -xarch=sse2 -xchip=pentium3 ;;
3335                     pentium4*)          echo -xtarget=pentium4           ;;
3336                     prescott|nocona)    echo -xarch=sse3 -xchip=pentium4 ;;
3337                     *-sse3)             echo -xarch=sse3                 ;;
3338                     core2)              echo -xarch=ssse3 -xchip=core2   ;;
3339                     bonnell)                   echo -xarch=ssse3         ;;
3340                     corei7|nehalem)            echo -xtarget=nehalem     ;;
3341                     westmere)                  echo -xtarget=westmere    ;;
3342                     silvermont)                echo -xarch=sse4_2        ;;
3343                     corei7-avx|sandybridge)    echo -xtarget=sandybridge ;;
3344                     core-avx*|ivybridge|haswell|broadwell)
3345                                                echo -xarch=avx           ;;
3346                     amdfam10|barcelona)        echo -xtarget=barcelona   ;;
3347                     btver1)                    echo -xarch=amdsse4a      ;;
3348                     btver2|bdver*)             echo -xarch=avx           ;;
3349                     athlon-4|athlon-[mx]p)     echo -xarch=ssea          ;;
3350                     k8|opteron|athlon64|athlon-fx)
3351                                                echo -xarch=sse2a         ;;
3352                     athlon*)                   echo -xarch=pentium_proa  ;;
3353                 esac
3354                 ;;
3355             -std=c99)             echo -xc99              ;;
3356             -fomit-frame-pointer) echo -xregs=frameptr    ;;
3357             -fPIC)                echo -KPIC -xcode=pic32 ;;
3358             -W*,*)                echo $flag              ;;
3359             -f*-*|-W*|-mimpure-text)                      ;;
3360             -shared)              echo -G                 ;;
3361             *)                    echo $flag              ;;
3362         esac
3363     done
3364 }
3365
3366 tms470_flags(){
3367     for flag; do
3368         case $flag in
3369             -march=*|-mcpu=*)
3370                 case "${flag#*=}" in
3371                     armv7-a|cortex-a*)      echo -mv=7a8 ;;
3372                     armv7-r|cortex-r*)      echo -mv=7r4 ;;
3373                     armv7-m|cortex-m*)      echo -mv=7m3 ;;
3374                     armv6*|arm11*)          echo -mv=6   ;;
3375                     armv5*e|arm[79]*e*|arm9[24]6*|arm96*|arm102[26])
3376                                             echo -mv=5e  ;;
3377                     armv4*|arm7*|arm9[24]*) echo -mv=4   ;;
3378                 esac
3379                 ;;
3380             -mfpu=neon)     echo --float_support=vfpv3 --neon ;;
3381             -mfpu=vfp)      echo --float_support=vfpv2        ;;
3382             -mfpu=vfpv3)    echo --float_support=vfpv3        ;;
3383             -mfpu=vfpv3-d16) echo --float_support=vfpv3d16    ;;
3384             -msoft-float)   echo --float_support=vfplib       ;;
3385             -O[0-3]|-mf=*)  echo $flag                        ;;
3386             -g)             echo -g -mn                       ;;
3387             -pds=*)         echo $flag                        ;;
3388             -D*|-I*)        echo $flag                        ;;
3389             --gcc|--abi=*)  echo $flag                        ;;
3390             -me)            echo $flag                        ;;
3391         esac
3392     done
3393 }
3394
3395 probe_cc(){
3396     pfx=$1
3397     _cc=$2
3398
3399     unset _type _ident _cc_c _cc_e _cc_o _flags _cflags
3400     unset _ld_o _ldflags _ld_lib _ld_path
3401     unset _depflags _DEPCMD _DEPFLAGS
3402     _flags_filter=echo
3403
3404     if $_cc --version 2>&1 | grep -q '^GNU assembler'; then
3405         true # no-op to avoid reading stdin in following checks
3406     elif $_cc -v 2>&1 | grep -q '^gcc.*LLVM'; then
3407         _type=llvm_gcc
3408         gcc_extra_ver=$(expr "$($_cc --version | head -n1)" : '.*\((.*)\)')
3409         _ident="llvm-gcc $($_cc -dumpversion) $gcc_extra_ver"
3410         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
3411         _cflags_speed='-O3'
3412         _cflags_size='-Os'
3413     elif $_cc -v 2>&1 | grep -qi ^gcc; then
3414         _type=gcc
3415         gcc_version=$($_cc --version | head -n1)
3416         gcc_basever=$($_cc -dumpversion)
3417         gcc_pkg_ver=$(expr "$gcc_version" : '[^ ]* \(([^)]*)\)')
3418         gcc_ext_ver=$(expr "$gcc_version" : ".*$gcc_pkg_ver $gcc_basever \\(.*\\)")
3419         _ident=$(cleanws "gcc $gcc_basever $gcc_pkg_ver $gcc_ext_ver")
3420         if ! $_cc -dumpversion | grep -q '^2\.'; then
3421             _depflags='-MMD -MF $(@:.o=.d) -MT $@'
3422         fi
3423         _cflags_speed='-O3'
3424         _cflags_size='-Os'
3425     elif $_cc --version 2>/dev/null | grep -q ^icc; then
3426         _type=icc
3427         _ident=$($_cc --version | head -n1)
3428         _depflags='-MMD'
3429         _cflags_speed='-O3'
3430         _cflags_size='-Os'
3431         _cflags_noopt='-O1'
3432         _flags_filter=icc_flags
3433     elif $_cc -v 2>&1 | grep -q xlc; then
3434         _type=xlc
3435         _ident=$($_cc -qversion 2>/dev/null | head -n1)
3436         _cflags_speed='-O5'
3437         _cflags_size='-O5 -qcompact'
3438     elif $_cc -V 2>/dev/null | grep -q Compaq; then
3439         _type=ccc
3440         _ident=$($_cc -V | head -n1 | cut -d' ' -f1-3)
3441         _DEPFLAGS='-M'
3442         _cflags_speed='-fast'
3443         _cflags_size='-O1'
3444         _flags_filter=ccc_flags
3445     elif $_cc --vsn 2>/dev/null | grep -Eq "ARM (C/C\+\+ )?Compiler"; then
3446         test -d "$sysroot" || die "No valid sysroot specified."
3447         _type=armcc
3448         _ident=$($_cc --vsn | grep -i build | head -n1 | sed 's/.*: //')
3449         armcc_conf="$PWD/armcc.conf"
3450         $_cc --arm_linux_configure                 \
3451              --arm_linux_config_file="$armcc_conf" \
3452              --configure_sysroot="$sysroot"        \
3453              --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
3454              die "Error creating armcc configuration file."
3455         $_cc --vsn | grep -q RVCT && armcc_opt=rvct || armcc_opt=armcc
3456         _flags="--arm_linux_config_file=$armcc_conf --translate_gcc"
3457         as_default="${cross_prefix}gcc"
3458         _depflags='-MMD'
3459         _cflags_speed='-O3'
3460         _cflags_size='-Os'
3461     elif $_cc -version 2>/dev/null | grep -Eq 'TMS470|TI ARM'; then
3462         _type=tms470
3463         _ident=$($_cc -version | head -n1 | tr -s ' ')
3464         _flags='--gcc --abi=eabi -me'
3465         _cc_e='-ppl -fe=$@'
3466         _cc_o='-fe=$@'
3467         _depflags='-ppa -ppd=$(@:.o=.d)'
3468         _cflags_speed='-O3 -mf=5'
3469         _cflags_size='-O3 -mf=2'
3470         _flags_filter=tms470_flags
3471     elif $_cc -v 2>&1 | grep -q clang; then
3472         _type=clang
3473         _ident=$($_cc --version | head -n1)
3474         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
3475         _cflags_speed='-O3'
3476         _cflags_size='-Os'
3477     elif $_cc -V 2>&1 | grep -q Sun; then
3478         _type=suncc
3479         _ident=$($_cc -V 2>&1 | head -n1 | cut -d' ' -f 2-)
3480         _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "1s,^.*: ,$@: ," -e "\$$!s,\$$, \\\," -e "1!s,^.*: , ," > $(@:.o=.d)'
3481         _DEPFLAGS='-xM1 -xc99'
3482         _ldflags='-std=c99'
3483         _cflags_speed='-O5'
3484         _cflags_size='-O5 -xspace'
3485         _flags_filter=suncc_flags
3486     elif $_cc -v 2>&1 | grep -q 'PathScale\|Path64'; then
3487         _type=pathscale
3488         _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
3489         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
3490         _cflags_speed='-O2'
3491         _cflags_size='-Os'
3492         _flags_filter='filter_out -Wdisabled-optimization'
3493     elif $_cc -v 2>&1 | grep -q Open64; then
3494         _type=open64
3495         _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
3496         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
3497         _cflags_speed='-O2'
3498         _cflags_size='-Os'
3499         _flags_filter='filter_out -Wdisabled-optimization|-Wtype-limits|-fno-signed-zeros'
3500     elif $_cc -V 2>&1 | grep -q Portland; then
3501         _type=pgi
3502         _ident="PGI $($_cc -V 2>&1 | awk '/^pgcc/ { print $2; exit }')"
3503         opt_common='-alias=ansi -Mdse -Mlre -Mpre'
3504         _cflags_speed="-O3 -Mautoinline -Munroll=c:4 $opt_common"
3505         _cflags_size="-O2 -Munroll=c:1 $opt_common"
3506         _cflags_noopt="-O"
3507         _flags_filter=pgi_flags
3508     elif $_cc 2>&1 | grep -q 'Microsoft.*ARM.*Assembler'; then
3509         _type=armasm
3510         _ident=$($_cc | head -n1)
3511         # 4509: "This form of conditional instruction is deprecated"
3512         _flags="-nologo -ignore 4509"
3513         _flags_filter=armasm_flags
3514     elif $_cc 2>&1 | grep -q Intel; then
3515         _type=icl
3516         _ident=$($cc 2>&1 | head -n1)
3517         _depflags='-QMMD -QMF$(@:.o=.d) -QMT$@'
3518         # Not only is O3 broken on 13.x+ but it is slower on all previous
3519         # versions (tested) as well.
3520         _cflags_speed="-O2"
3521         _cflags_size="-O1 -Oi" # -O1 without -Oi miscompiles stuff
3522         if $_cc 2>&1 | grep -q Linker; then
3523             _ld_o='-out:$@'
3524         else
3525             _ld_o='-Fe$@'
3526         fi
3527         _cc_o='-Fo$@'
3528         _cc_e='-P'
3529         _flags_filter=icl_flags
3530         _ld_lib='lib%.a'
3531         _ld_path='-libpath:'
3532         # -Qdiag-error to make icl error when seeing certain unknown arguments
3533         _flags='-nologo -Qdiag-error:4044,10157'
3534         # -Qvec- -Qsimd- to prevent miscompilation, -GS, fp:precise for consistency
3535         # with MSVC which enables it by default.
3536         _cflags='-D_USE_MATH_DEFINES -FIstdlib.h -Dstrtoll=_strtoi64 -Qms0 -Qvec- -Qsimd- -GS -fp:precise'
3537         if [ $pfx = hostcc ]; then
3538             append _cflags -Dsnprintf=_snprintf
3539         fi
3540         disable stripping
3541     elif $_cc 2>&1 | grep -q Microsoft; then
3542         _type=msvc
3543         _ident=$($cc 2>&1 | head -n1)
3544         _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< 2>&1 | awk '\''/including/ { sub(/^.*file: */, ""); gsub(/\\/, "/"); if (!match($$0, / /)) print "$@:", $$0 }'\'' > $(@:.o=.d)'
3545         _DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -showIncludes -Zs'
3546         _cflags_speed="-O2"
3547         _cflags_size="-O1"
3548         if $_cc 2>&1 | grep -q Linker; then
3549             _ld_o='-out:$@'
3550         else
3551             _ld_o='-Fe$@'
3552         fi
3553         _cc_o='-Fo$@'
3554         _cc_e='-P -Fi$@'
3555         _flags_filter=msvc_flags
3556         _ld_lib='lib%.a'
3557         _ld_path='-libpath:'
3558         _flags='-nologo'
3559         _cflags='-D_USE_MATH_DEFINES -D_CRT_SECURE_NO_WARNINGS -Dinline=__inline -FIstdlib.h -Dstrtoll=_strtoi64'
3560         if [ $pfx = hostcc ]; then
3561             if [ -z "$cl_major_ver" ] || [ $cl_major_ver -le 18 ]; then
3562                 append _cflags -Dsnprintf=_snprintf
3563             fi
3564         fi
3565         disable stripping
3566     elif $_cc --version 2>/dev/null | grep -q ^cparser; then
3567         _type=cparser
3568         _ident=$($_cc --version | head -n1)
3569         _depflags='-MMD'
3570         _cflags_speed='-O4'
3571         _cflags_size='-O2'
3572         _flags_filter=cparser_flags
3573     fi
3574
3575     eval ${pfx}_type=\$_type
3576     eval ${pfx}_ident=\$_ident
3577 }
3578
3579 set_ccvars(){
3580     eval ${1}_C=\${_cc_c-\${${1}_C}}
3581     eval ${1}_E=\${_cc_e-\${${1}_E}}
3582     eval ${1}_O=\${_cc_o-\${${1}_O}}
3583
3584     if [ -n "$_depflags" ]; then
3585         eval ${1}_DEPFLAGS=\$_depflags
3586     else
3587         eval ${1}DEP=\${_DEPCMD:-\$DEPCMD}
3588         eval ${1}DEP_FLAGS=\${_DEPFLAGS:-\$DEPFLAGS}
3589         eval DEP${1}FLAGS=\$_flags
3590     fi
3591 }
3592
3593 probe_cc cc "$cc"
3594 cflags_filter=$_flags_filter
3595 cflags_speed=$_cflags_speed
3596 cflags_size=$_cflags_size
3597 cflags_noopt=$_cflags_noopt
3598 add_cflags $_flags $_cflags
3599 cc_ldflags=$_ldflags
3600 set_ccvars CC
3601
3602 probe_cc hostcc "$host_cc"
3603 host_cflags_filter=$_flags_filter
3604 add_host_cflags  $_flags $_cflags
3605 set_ccvars HOSTCC
3606
3607 test -n "$cc_type" && enable $cc_type ||
3608     warn "Unknown C compiler $cc, unable to select optimal CFLAGS"
3609
3610 : ${as_default:=$cc}
3611 : ${dep_cc_default:=$cc}
3612 : ${ld_default:=$cc}
3613 : ${host_ld_default:=$host_cc}
3614 set_default ar as dep_cc ld host_ld windres
3615
3616 probe_cc as "$as"
3617 asflags_filter=$_flags_filter
3618 add_asflags $_flags $_cflags
3619 set_ccvars AS
3620
3621 probe_cc ld "$ld"
3622 ldflags_filter=$_flags_filter
3623 add_ldflags $_flags $_ldflags
3624 test "$cc_type" != "$ld_type" && add_ldflags $cc_ldflags
3625 LD_O=${_ld_o-$LD_O}
3626 LD_LIB=${_ld_lib-$LD_LIB}
3627 LD_PATH=${_ld_path-$LD_PATH}
3628
3629 probe_cc hostld "$host_ld"
3630 host_ldflags_filter=$_flags_filter
3631 add_host_ldflags $_flags $_ldflags
3632 HOSTLD_O=${_ld_o-$HOSTLD_O}
3633
3634 if [ -z "$CC_DEPFLAGS" ] && [ "$dep_cc" != "$cc" ]; then
3635     probe_cc depcc "$dep_cc"
3636     CCDEP=${_DEPCMD:-$DEPCMD}
3637     CCDEP_FLAGS=${_DEPFLAGS:=$DEPFLAGS}
3638     DEPCCFLAGS=$_flags
3639 fi
3640
3641 if $ar 2>&1 | grep -q Microsoft; then
3642     arflags="-nologo"
3643     ar_o='-out:$@'
3644 elif $ar 2>&1 | grep -q 'Texas Instruments'; then
3645     arflags="rq"
3646     ar_o='$@'
3647 elif $ar 2>&1 | grep -q 'Usage: ar.*-X.*any'; then
3648     arflags='-Xany -r -c'
3649     ar_o='$@'
3650 elif $ar 2>&1 | grep -q "\[D\] "; then
3651     arflags="rcD"
3652     ar_o='$@'
3653 else
3654     arflags="rc"
3655     ar_o='$@'
3656 fi
3657
3658 add_cflags $extra_cflags
3659 add_cxxflags $extra_cxxflags
3660 add_asflags $extra_cflags
3661
3662 if test -n "$sysroot"; then
3663     case "$cc_type" in
3664         gcc|llvm_gcc|clang)
3665             add_cppflags --sysroot="$sysroot"
3666             add_ldflags --sysroot="$sysroot"
3667 # On Darwin --sysroot may be ignored, -isysroot always affects headers and linking
3668             add_cppflags -isysroot "$sysroot"
3669             add_ldflags -isysroot "$sysroot"
3670         ;;
3671         tms470)
3672             add_cppflags -I"$sysinclude"
3673             add_ldflags  --sysroot="$sysroot"
3674         ;;
3675     esac
3676 fi
3677
3678 if test "$cpu" = host; then
3679     enabled cross_compile &&
3680         die "--cpu=host makes no sense when cross-compiling."
3681
3682     case "$cc_type" in
3683         gcc|llvm_gcc)
3684             check_native(){
3685                 $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
3686                 sed -n "/cc1.*$1=/{
3687                             s/.*$1=\\([^ ]*\\).*/\\1/
3688                             p
3689                             q
3690                         }" $TMPE
3691             }
3692             cpu=$(check_native -march || check_native -mcpu)
3693         ;;
3694     esac
3695
3696     test "${cpu:-host}" = host &&
3697         die "--cpu=host not supported with compiler $cc"
3698 fi
3699
3700 # Deal with common $arch aliases
3701 case "$arch" in
3702     aarch64|arm64)
3703         arch="aarch64"
3704     ;;
3705     arm*|iPad*|iPhone*)
3706         arch="arm"
3707     ;;
3708     mips*|IP*)
3709         arch="mips"
3710     ;;
3711     parisc*|hppa*)
3712         arch="parisc"
3713     ;;
3714     "Power Macintosh"|ppc*|powerpc*)
3715         arch="ppc"
3716     ;;
3717     s390|s390x)
3718         arch="s390"
3719     ;;
3720     sh4|sh)
3721         arch="sh4"
3722     ;;
3723     sun4u|sparc*)
3724         arch="sparc"
3725     ;;
3726     tilegx|tile-gx)
3727         arch="tilegx"
3728     ;;
3729     i[3-6]86*|i86pc|BePC|x86pc|x86_64|x86_32|amd64)
3730         arch="x86"
3731     ;;
3732 esac
3733
3734 is_in $arch $ARCH_LIST || warn "unknown architecture $arch"
3735 enable $arch
3736
3737 # Add processor-specific flags
3738 if enabled aarch64; then
3739
3740     case $cpu in
3741         armv*)
3742             cpuflags="-march=$cpu"
3743         ;;
3744         *)
3745             cpuflags="-mcpu=$cpu"
3746         ;;
3747     esac
3748
3749 elif enabled alpha; then
3750
3751     cpuflags="-mcpu=$cpu"
3752
3753 elif enabled arm; then
3754
3755     check_arm_arch() {
3756         check_cpp_condition stddef.h \
3757             "defined __ARM_ARCH_${1}__ || defined __TARGET_ARCH_${2:-$1}" \
3758             $cpuflags
3759     }
3760
3761     probe_arm_arch() {
3762         if   check_arm_arch 4;        then echo armv4;
3763         elif check_arm_arch 4T;       then echo armv4t;
3764         elif check_arm_arch 5;        then echo armv5;
3765         elif check_arm_arch 5E;       then echo armv5e;
3766         elif check_arm_arch 5T;       then echo armv5t;
3767         elif check_arm_arch 5TE;      then echo armv5te;
3768         elif check_arm_arch 5TEJ;     then echo armv5te;
3769         elif check_arm_arch 6;        then echo armv6;
3770         elif check_arm_arch 6J;       then echo armv6j;
3771         elif check_arm_arch 6K;       then echo armv6k;
3772         elif check_arm_arch 6Z;       then echo armv6z;
3773         elif check_arm_arch 6ZK;      then echo armv6zk;
3774         elif check_arm_arch 6T2;      then echo armv6t2;
3775         elif check_arm_arch 7;        then echo armv7;
3776         elif check_arm_arch 7A  7_A;  then echo armv7-a;
3777         elif check_arm_arch 7S;       then echo armv7-a;
3778         elif check_arm_arch 7R  7_R;  then echo armv7-r;
3779         elif check_arm_arch 7M  7_M;  then echo armv7-m;
3780         elif check_arm_arch 7EM 7E_M; then echo armv7-m;
3781         elif check_arm_arch 8A  8_A;  then echo armv8-a;
3782         fi
3783     }
3784
3785     [ "$cpu" = generic ] && cpu=$(probe_arm_arch)
3786
3787     case $cpu in
3788         armv*)
3789             cpuflags="-march=$cpu"
3790             subarch=$(echo $cpu | sed 's/[^a-z0-9]//g')
3791         ;;
3792         *)
3793             cpuflags="-mcpu=$cpu"
3794             case $cpu in
3795                 cortex-a*)                               subarch=armv7a  ;;
3796                 cortex-r*)                               subarch=armv7r  ;;
3797                 cortex-m*)                 enable thumb; subarch=armv7m  ;;
3798                 arm11*)                                  subarch=armv6   ;;
3799                 arm[79]*e*|arm9[24]6*|arm96*|arm102[26]) subarch=armv5te ;;
3800                 armv4*|arm7*|arm9[24]*)                  subarch=armv4   ;;
3801                 *)                             subarch=$(probe_arm_arch) ;;
3802             esac
3803         ;;
3804     esac
3805
3806     case "$subarch" in
3807         armv5t*)    enable fast_clz                ;;
3808         armv[6-8]*)
3809             enable fast_clz
3810             disabled fast_unaligned || enable fast_unaligned
3811             ;;
3812     esac
3813
3814 elif enabled avr32; then
3815
3816     case $cpu in
3817         ap7[02]0[0-2])
3818             subarch="avr32_ap"
3819             cpuflags="-mpart=$cpu"
3820         ;;
3821         ap)
3822             subarch="avr32_ap"
3823             cpuflags="-march=$cpu"
3824         ;;
3825         uc3[ab]*)
3826             subarch="avr32_uc"
3827             cpuflags="-mcpu=$cpu"
3828         ;;
3829         uc)
3830             subarch="avr32_uc"
3831             cpuflags="-march=$cpu"
3832         ;;
3833     esac
3834
3835 elif enabled bfin; then
3836
3837     cpuflags="-mcpu=$cpu"
3838
3839 elif enabled mips; then
3840
3841     cpuflags="-march=$cpu"
3842
3843     case $cpu in
3844         24kc)
3845             disable mipsfpu
3846             disable mipsdspr1
3847             disable mipsdspr2
3848         ;;
3849         24kf*)
3850             disable mipsdspr1
3851             disable mipsdspr2
3852         ;;
3853         24kec|34kc|1004kc)
3854             disable mipsfpu
3855             disable mipsdspr2
3856         ;;
3857         24kef*|34kf*|1004kf*)
3858             disable mipsdspr2
3859         ;;
3860         74kc)
3861             disable mipsfpu
3862         ;;
3863     esac
3864
3865 elif enabled ppc; then
3866
3867     disable ldbrx
3868     disable vsx
3869
3870     case $(tolower $cpu) in
3871         601|ppc601|powerpc601)
3872             cpuflags="-mcpu=601"
3873             disable altivec
3874         ;;
3875         603*|ppc603*|powerpc603*)
3876             cpuflags="-mcpu=603"
3877             disable altivec
3878         ;;
3879         604*|ppc604*|powerpc604*)
3880             cpuflags="-mcpu=604"
3881             disable altivec
3882         ;;
3883         g3|75*|ppc75*|powerpc75*)
3884             cpuflags="-mcpu=750"
3885             disable altivec
3886         ;;
3887         g4|745*|ppc745*|powerpc745*)
3888             cpuflags="-mcpu=7450"
3889         ;;
3890         74*|ppc74*|powerpc74*)
3891             cpuflags="-mcpu=7400"
3892         ;;
3893         g5|970|ppc970|powerpc970)
3894             cpuflags="-mcpu=970"
3895         ;;
3896         power[3-8]*)
3897             cpuflags="-mcpu=$cpu"
3898         ;;
3899         cell)
3900             cpuflags="-mcpu=cell"
3901             enable ldbrx
3902         ;;
3903         e500mc)
3904             cpuflags="-mcpu=e500mc"
3905             disable altivec
3906         ;;
3907         e500v2)
3908             cpuflags="-mcpu=8548 -mhard-float -mfloat-gprs=double"
3909             disable altivec
3910             disable dcbzl
3911         ;;
3912         e500)
3913             cpuflags="-mcpu=8540 -mhard-float"
3914             disable altivec
3915             disable dcbzl
3916         ;;
3917     esac
3918
3919 elif enabled sparc; then
3920
3921     case $cpu in
3922         cypress|f93[04]|tsc701|sparcl*|supersparc|hypersparc|niagara|v[789])
3923             cpuflags="-mcpu=$cpu"
3924         ;;
3925         ultrasparc*|niagara[234])
3926             cpuflags="-mcpu=$cpu"
3927         ;;
3928     esac
3929
3930 elif enabled x86; then
3931
3932     case $cpu in
3933         i[345]86|pentium)
3934             cpuflags="-march=$cpu"
3935             disable i686
3936             disable mmx
3937         ;;
3938         # targets that do NOT support nopl and conditional mov (cmov)
3939         pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
3940             cpuflags="-march=$cpu"
3941             disable i686
3942         ;;
3943         # targets that do support nopl and conditional mov (cmov)
3944         i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64*|k8*|opteron*|athlon-fx\
3945         |core*|atom|bonnell|nehalem|westmere|silvermont|sandybridge|ivybridge|haswell|broadwell|amdfam10|barcelona|b[dt]ver*)
3946             cpuflags="-march=$cpu"
3947             enable i686
3948             enable fast_cmov
3949         ;;
3950         # targets that do support conditional mov but on which it's slow
3951         pentium4|pentium4m|prescott|nocona)
3952             cpuflags="-march=$cpu"
3953             enable i686
3954             disable fast_cmov
3955         ;;
3956     esac
3957
3958 fi
3959
3960 if [ "$cpu" != generic ]; then
3961     add_cflags  $cpuflags
3962     add_asflags $cpuflags
3963 fi
3964
3965 # compiler sanity check
3966 check_exec <<EOF
3967 int main(void){ return 0; }
3968 EOF
3969 if test "$?" != 0; then
3970     echo "$cc is unable to create an executable file."
3971     if test -z "$cross_prefix" && ! enabled cross_compile ; then
3972         echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
3973         echo "Only do this if you know what cross compiling means."
3974     fi
3975     die "C compiler test failed."
3976 fi
3977
3978 add_cppflags -D_ISOC99_SOURCE
3979 add_cxxflags -D__STDC_CONSTANT_MACROS
3980 check_cflags -std=c99
3981 check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
3982 #include <stdlib.h>
3983 EOF
3984 check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
3985 #include <stdlib.h>
3986 EOF
3987
3988 add_host_cppflags -D_ISOC99_SOURCE
3989 check_host_cflags -std=c99
3990 check_host_cflags -Wall
3991 check_host_cflags -O3
3992
3993 check_64bit(){
3994     arch32=$1
3995     arch64=$2
3996     expr=$3
3997     check_code cc "" "int test[2*($expr) - 1]" &&
3998         subarch=$arch64 || subarch=$arch32
3999 }
4000
4001 case "$arch" in
4002     aarch64|alpha|ia64)
4003         spic=$shared
4004     ;;
4005     mips)
4006         check_64bit mips mips64 '_MIPS_SIM > 1'
4007         spic=$shared
4008     ;;
4009     parisc)
4010         check_64bit parisc parisc64 'sizeof(void *) > 4'
4011         spic=$shared
4012     ;;
4013     ppc)
4014         check_64bit ppc ppc64 'sizeof(void *) > 4'
4015         spic=$shared
4016     ;;
4017     s390)
4018         check_64bit s390 s390x 'sizeof(void *) > 4'
4019         spic=$shared
4020     ;;
4021     sparc)
4022         check_64bit sparc sparc64 'sizeof(void *) > 4'
4023         spic=$shared
4024     ;;
4025     x86)
4026         check_64bit x86_32 x86_64 'sizeof(void *) > 4'
4027         # Treat x32 as x64 for now. Note it also needs spic=$shared
4028         test "$subarch" = "x86_32" && check_cpp_condition stddef.h 'defined(__x86_64__)' &&
4029             subarch=x86_64
4030         if test "$subarch" = "x86_64"; then
4031             spic=$shared
4032         fi
4033     ;;
4034     ppc)
4035         check_cc <<EOF && subarch="ppc64"
4036         int test[(int)sizeof(char*) - 7];
4037 EOF
4038     ;;
4039 esac
4040
4041 enable $subarch
4042 enabled spic && enable_weak pic
4043
4044 # OS specific
4045 case $target_os in
4046     aix)
4047         SHFLAGS=-shared
4048         add_cppflags '-I\$(SRC_PATH)/compat/aix'
4049         enabled shared && add_ldflags -Wl,-brtl
4050         ;;
4051     android)
4052         disable symver
4053         enable section_data_rel_ro
4054         SLIB_INSTALL_NAME='$(SLIBNAME)'
4055         SLIB_INSTALL_LINKS=
4056         # soname not set on purpose
4057         SHFLAGS=-shared
4058         ;;
4059     haiku)
4060         prefix_default="/boot/common"
4061         network_extralibs="-lnetwork"
4062         host_libs=
4063         ;;
4064     sunos)
4065         SHFLAGS='-shared -Wl,-h,$$(@F)'
4066         enabled x86 && SHFLAGS="-mimpure-text $SHFLAGS"
4067         network_extralibs="-lsocket -lnsl"
4068         add_cppflags -D__EXTENSIONS__
4069         # When using suncc to build, the Solaris linker will mark
4070         # an executable with each instruction set encountered by
4071         # the Solaris assembler.  As our libraries contain their own
4072         # guards for processor-specific code, instead suppress
4073         # generation of the HWCAPS ELF section on Solaris x86 only.
4074         enabled_all suncc x86 &&
4075             echo "hwcap_1 = OVERRIDE;" > mapfile &&
4076             add_ldflags -Wl,-M,mapfile
4077         nm_default='nm -P -g'
4078         ;;
4079     netbsd)
4080         disable symver
4081         oss_indev_extralibs="-lossaudio"
4082         oss_outdev_extralibs="-lossaudio"
4083         enabled gcc || check_ldflags -Wl,-zmuldefs
4084         ;;
4085     openbsd|bitrig)
4086         disable symver
4087         SHFLAGS='-shared'
4088         SLIB_INSTALL_NAME='$(SLIBNAME).$(LIBMAJOR).$(LIBMINOR)'
4089         SLIB_INSTALL_LINKS=
4090         oss_indev_extralibs="-lossaudio"
4091         oss_outdev_extralibs="-lossaudio"
4092         ;;
4093     dragonfly)
4094         disable symver
4095         ;;
4096     freebsd)
4097         ;;
4098     bsd/os)
4099         add_extralibs -lpoll -lgnugetopt
4100         strip="strip -d"
4101         ;;
4102     darwin)
4103         enabled ppc && add_asflags -force_cpusubtype_ALL
4104         SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR)'
4105         enabled x86_32 && append SHFLAGS -Wl,-read_only_relocs,suppress
4106         strip="${strip} -x"
4107         add_ldflags -Wl,-dynamic,-search_paths_first
4108         SLIBSUF=".dylib"
4109         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
4110         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
4111         objformat="macho"
4112         enabled x86_64 && objformat="macho64"
4113         enabled_any pic shared x86_64 ||
4114             { check_cflags -mdynamic-no-pic && add_asflags -mdynamic-no-pic; }
4115         ;;
4116     mingw32*)
4117         if test $target_os = "mingw32ce"; then
4118             disable network
4119         else
4120             target_os=mingw32
4121         fi
4122         LIBTARGET=i386
4123         if enabled x86_64; then
4124             LIBTARGET="i386:x86-64"
4125         elif enabled arm; then
4126             LIBTARGET=arm-wince
4127         fi
4128         enabled shared && ! enabled small && check_cmd $windres --version && enable gnu_windres
4129         check_ldflags -Wl,--nxcompat
4130         check_ldflags -Wl,--dynamicbase
4131         enabled x86_32 && check_ldflags -Wl,--large-address-aware
4132         shlibdir_default="$bindir_default"
4133         SLIBPREF=""
4134         SLIBSUF=".dll"
4135         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
4136         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
4137         dlltool="${cross_prefix}dlltool"
4138         if check_cmd lib.exe -list; then
4139             SLIB_EXTRA_CMD=-'sed -e "s/ @[^ ]*//" $$(@:$(SLIBSUF)=.orig.def) > $$(@:$(SLIBSUF)=.def); lib.exe /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib)'
4140             if enabled x86_64; then
4141                 LIBTARGET=x64
4142             fi
4143         elif check_cmd $dlltool --version; then
4144             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)'
4145         fi
4146         SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
4147         SLIB_INSTALL_LINKS=
4148         SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
4149         SLIB_INSTALL_EXTRA_LIB='lib$(SLIBNAME:$(SLIBSUF)=.dll.a) $(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
4150         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'
4151         objformat="win32"
4152         ranlib=:
4153         enable dos_paths
4154         ;;
4155     win32|win64)
4156         disable symver
4157         if enabled shared; then
4158             # Link to the import library instead of the normal static library
4159             # for shared libs.
4160             LD_LIB='%.lib'
4161             # Cannot build both shared and static libs with MSVC or icl.
4162             disable static
4163         fi
4164         enabled x86_32 && check_ldflags -LARGEADDRESSAWARE
4165         shlibdir_default="$bindir_default"
4166         SLIBPREF=""
4167         SLIBSUF=".dll"
4168         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
4169         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
4170         SLIB_CREATE_DEF_CMD='$(SRC_PATH)/compat/windows/makedef $(SUBDIR)lib$(NAME).ver $(OBJS) > $$(@:$(SLIBSUF)=.def)'
4171         SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
4172         SLIB_INSTALL_LINKS=
4173         SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
4174         SLIB_INSTALL_EXTRA_LIB='$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
4175         SHFLAGS='-dll -def:$$(@:$(SLIBSUF)=.def) -implib:$(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib)'
4176         objformat="win32"
4177         ranlib=:
4178         enable dos_paths
4179         ;;
4180     cygwin*)
4181         target_os=cygwin
4182         shlibdir_default="$bindir_default"
4183         SLIBPREF="cyg"
4184         SLIBSUF=".dll"
4185         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
4186         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
4187         SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
4188         SLIB_INSTALL_LINKS=
4189         SLIB_INSTALL_EXTRA_LIB='lib$(FULLNAME).dll.a'
4190         SHFLAGS='-shared -Wl,--out-implib,$(SUBDIR)lib$(FULLNAME).dll.a'
4191         objformat="win32"
4192         enable dos_paths
4193         enabled shared && ! enabled small && check_cmd $windres --version && enable gnu_windres
4194         ;;
4195     *-dos|freedos|opendos)
4196         network_extralibs="-lsocket"
4197         objformat="coff"
4198         enable dos_paths
4199         add_cppflags -U__STRICT_ANSI__
4200         ;;
4201     linux)
4202         enable dv1394
4203         enable section_data_rel_ro
4204         ;;
4205     irix*)
4206         target_os=irix
4207         ranlib="echo ignoring ranlib"
4208         ;;
4209     os/2*)
4210         strip="lxlite -CS"
4211         ln_s="cp -f"
4212         objformat="aout"
4213         add_cppflags -D_GNU_SOURCE
4214         add_ldflags -Zomf -Zbin-files -Zargs-wild -Zmap
4215         SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
4216         LIBSUF="_s.a"
4217         SLIBPREF=""
4218         SLIBSUF=".dll"
4219         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
4220         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
4221         SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
4222             echo PROTMODE >> $(SUBDIR)$(NAME).def; \
4223             echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
4224             echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
4225             echo EXPORTS >> $(SUBDIR)$(NAME).def; \
4226             emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
4227         SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
4228             emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
4229         SLIB_INSTALL_EXTRA_LIB='$(LIBPREF)$(NAME)_dll.a $(LIBPREF)$(NAME)_dll.lib'
4230         enable dos_paths
4231         enable_weak os2threads
4232         ;;
4233     gnu/kfreebsd)
4234         add_cppflags -D_BSD_SOURCE
4235         ;;
4236     gnu)
4237         ;;
4238     qnx)
4239         add_cppflags -D_QNX_SOURCE
4240         network_extralibs="-lsocket"
4241         ;;
4242     symbian)
4243         SLIBSUF=".dll"
4244         enable dos_paths
4245         add_cflags --include=$sysinclude/gcce/gcce.h -fvisibility=default
4246         add_cppflags -D__GCCE__ -D__SYMBIAN32__ -DSYMBIAN_OE_POSIX_SIGNALS
4247         add_ldflags -Wl,--target1-abs,--no-undefined \
4248                     -Wl,-Ttext,0x80000,-Tdata,0x1000000 -shared \
4249                     -Wl,--entry=_E32Startup -Wl,-u,_E32Startup
4250         add_extralibs -l:eexe.lib -l:usrt2_2.lib -l:dfpaeabi.dso \
4251                       -l:drtaeabi.dso -l:scppnwdl.dso -lsupc++ -lgcc \
4252                       -l:libc.dso -l:libm.dso -l:euser.dso -l:libcrt0.lib
4253         ;;
4254     osf1)
4255         add_cppflags -D_OSF_SOURCE -D_POSIX_PII -D_REENTRANT
4256         ;;
4257     minix)
4258         ;;
4259     plan9)
4260         add_cppflags -D_C99_SNPRINTF_EXTENSION  \
4261                      -D_REENTRANT_SOURCE        \
4262                      -D_RESEARCH_SOURCE         \
4263                      -DFD_SETSIZE=96            \
4264                      -DHAVE_SOCK_OPTS
4265         add_compat strtod.o strtod=avpriv_strtod
4266         network_extralibs='-lbsd'
4267         exeobjs=compat/plan9/main.o
4268         disable ffserver
4269         cp_f='cp'
4270         ;;
4271     none)
4272         ;;
4273     *)
4274         die "Unknown OS '$target_os'."
4275         ;;
4276 esac
4277
4278 # determine libc flavour
4279
4280 probe_libc(){
4281     pfx=$1
4282     pfx_no_=${pfx%_}
4283     # uclibc defines __GLIBC__, so it needs to be checked before glibc.
4284     if check_${pfx}cpp_condition features.h "defined __UCLIBC__"; then
4285         eval ${pfx}libc_type=uclibc
4286         add_${pfx}cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
4287     elif check_${pfx}cpp_condition features.h "defined __GLIBC__"; then
4288         eval ${pfx}libc_type=glibc
4289         add_${pfx}cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
4290     # MinGW headers can be installed on Cygwin, so check for newlib first.
4291     elif check_${pfx}cpp_condition newlib.h "defined _NEWLIB_VERSION"; then
4292         eval ${pfx}libc_type=newlib
4293         add_${pfx}cppflags -U__STRICT_ANSI__
4294     # MinGW64 is backwards compatible with MinGW32, so check for it first.
4295     elif check_${pfx}cpp_condition _mingw.h "defined __MINGW64_VERSION_MAJOR"; then
4296         eval ${pfx}libc_type=mingw64
4297         if check_${pfx}cpp_condition _mingw.h "__MINGW64_VERSION_MAJOR < 3"; then
4298             add_compat msvcrt/snprintf.o
4299             add_cflags "-include $source_path/compat/msvcrt/snprintf.h"
4300         fi
4301         add_${pfx}cppflags -U__STRICT_ANSI__ -D__USE_MINGW_ANSI_STDIO=1
4302         eval test \$${pfx_no_}cc_type = "gcc" &&
4303             add_${pfx}cppflags -D__printf__=__gnu_printf__
4304     elif check_${pfx}cpp_condition _mingw.h "defined __MINGW_VERSION"  ||
4305          check_${pfx}cpp_condition _mingw.h "defined __MINGW32_VERSION"; then
4306         eval ${pfx}libc_type=mingw32
4307         check_${pfx}cpp_condition _mingw.h "__MINGW32_MAJOR_VERSION > 3 || \
4308             (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
4309             die "ERROR: MinGW32 runtime version must be >= 3.15."
4310         add_${pfx}cppflags -U__STRICT_ANSI__ -D__USE_MINGW_ANSI_STDIO=1
4311         eval test \$${pfx_no_}cc_type = "gcc" &&
4312             add_${pfx}cppflags -D__printf__=__gnu_printf__
4313     elif check_${pfx}cpp_condition crtversion.h "defined _VC_CRT_MAJOR_VERSION"; then
4314         eval ${pfx}libc_type=msvcrt
4315         # The MSVC 2010 headers (Win 7.0 SDK) set _WIN32_WINNT to
4316         # 0x601 by default unless something else is set by the user.
4317         # This can easily lead to us detecting functions only present
4318         # in such new versions and producing binaries requiring windows 7.0.
4319         # Therefore explicitly set the default to XP unless the user has
4320         # set something else on the command line.
4321         check_${pfx}cpp_condition stdlib.h "defined(_WIN32_WINNT)" ||
4322             add_${pfx}cppflags -D_WIN32_WINNT=0x0502
4323     elif check_${pfx}cpp_condition stddef.h "defined __KLIBC__"; then
4324         eval ${pfx}libc_type=klibc
4325     elif check_${pfx}cpp_condition sys/cdefs.h "defined __BIONIC__"; then
4326         eval ${pfx}libc_type=bionic
4327     elif check_${pfx}cpp_condition sys/brand.h "defined LABELED_BRAND_NAME"; then
4328         eval ${pfx}libc_type=solaris
4329         add_${pfx}cppflags -D__EXTENSIONS__ -D_XOPEN_SOURCE=600
4330     fi
4331     check_${pfx}cc <<EOF
4332 #include <time.h>
4333 void *v = localtime_r;
4334 EOF
4335 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
4336 #include <time.h>
4337 void *v = localtime_r;
4338 EOF
4339
4340 }
4341
4342 probe_libc
4343 test -n "$libc_type" && enable libc_$libc_type
4344 probe_libc host_
4345 test -n "$host_libc_type" && enable host_libc_$host_libc_type
4346
4347 case $libc_type in
4348     bionic)
4349         add_compat strtod.o strtod=avpriv_strtod
4350         ;;
4351     msvcrt)
4352         if [ -z "$cl_major_ver" ] || [ $cl_major_ver -le 18 ]; then
4353             add_compat strtod.o strtod=avpriv_strtod
4354             add_compat msvcrt/snprintf.o snprintf=avpriv_snprintf   \
4355                                          _snprintf=avpriv_snprintf  \
4356                                          vsnprintf=avpriv_vsnprintf
4357         fi
4358         ;;
4359 esac
4360
4361 # hacks for compiler/libc/os combinations
4362
4363 if enabled_all tms470 libc_glibc; then
4364     CPPFLAGS="-I${source_path}/compat/tms470 ${CPPFLAGS}"
4365     add_cppflags -D__USER_LABEL_PREFIX__=
4366     add_cppflags -D__builtin_memset=memset
4367     add_cppflags -D__gnuc_va_list=va_list -D_VA_LIST_DEFINED
4368     add_cflags   -pds=48    # incompatible redefinition of macro
4369 fi
4370
4371 if enabled_all ccc libc_glibc; then
4372     add_ldflags -Wl,-z,now  # calls to libots crash without this
4373 fi
4374
4375 check_compile_assert flt_lim "float.h limits.h" "DBL_MAX == (double)DBL_MAX" ||
4376     add_cppflags '-I\$(SRC_PATH)/compat/float'
4377
4378 esc(){
4379     echo "$*" | sed 's/%/%25/g;s/:/%3a/g'
4380 }
4381
4382 echo "config:$arch:$subarch:$cpu:$target_os:$(esc $cc_ident):$(esc $FFMPEG_CONFIGURATION)" >config.fate
4383
4384 check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable_weak pic
4385
4386 set_default libdir
4387 : ${shlibdir_default:="$libdir"}
4388
4389 set_default $PATHS_LIST
4390 set_default nm
4391
4392 # we need to build at least one lib type
4393 if ! enabled_any static shared; then
4394     cat <<EOF
4395 At least one library type must be built.
4396 Specify --enable-static to build the static libraries or --enable-shared to
4397 build the shared libraries as well. To only build the shared libraries specify
4398 --disable-static in addition to --enable-shared.
4399 EOF
4400     exit 1;
4401 fi
4402
4403 die_license_disabled() {
4404     enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
4405 }
4406
4407 die_license_disabled_gpl() {
4408     enabled $1 || { enabled $2 && die "$2 is incompatible with the gpl and --enable-$1 is not specified."; }
4409 }
4410
4411 die_license_disabled gpl frei0r
4412 die_license_disabled gpl libcdio
4413 die_license_disabled gpl libsmbclient
4414 die_license_disabled gpl libutvideo
4415 die_license_disabled gpl libvidstab
4416 die_license_disabled gpl libx264
4417 die_license_disabled gpl libx265
4418 die_license_disabled gpl libxavs
4419 die_license_disabled gpl libxvid
4420 die_license_disabled gpl libzvbi
4421 die_license_disabled gpl x11grab
4422
4423 die_license_disabled nonfree libaacplus
4424 die_license_disabled nonfree libfaac
4425 die_license_disabled nonfree nvenc
4426 enabled gpl && die_license_disabled_gpl nonfree libfdk_aac
4427 enabled gpl && die_license_disabled_gpl nonfree openssl
4428
4429 die_license_disabled version3 libopencore_amrnb
4430 die_license_disabled version3 libopencore_amrwb
4431 die_license_disabled version3 libsmbclient
4432 die_license_disabled version3 libvo_aacenc
4433 die_license_disabled version3 libvo_amrwbenc
4434
4435 enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
4436
4437 disabled optimizations || check_cflags -fomit-frame-pointer
4438
4439 enable_weak_pic() {
4440     disabled pic && return
4441     enable pic
4442     add_cppflags -DPIC
4443     case "$target_os" in
4444     mingw*|cygwin*)
4445         ;;
4446     *)
4447         add_cflags -fPIC
4448         ;;
4449     esac
4450     add_asflags  -fPIC
4451 }
4452
4453 enabled pic && enable_weak_pic
4454
4455 check_cc <<EOF || die "Symbol mangling check failed."
4456 int ff_extern;
4457 EOF
4458 sym=$($nm $TMPO | awk '/ff_extern/{ print substr($0, match($0, /[^ \t]*ff_extern/)) }')
4459 extern_prefix=${sym%%ff_extern*}
4460
4461 check_cc <<EOF && enable_weak inline_asm
4462 void foo(void) { __asm__ volatile ("" ::); }
4463 EOF
4464
4465 _restrict=
4466 for restrict_keyword in restrict __restrict__ __restrict; do
4467     check_cc <<EOF && _restrict=$restrict_keyword && break
4468 void foo(char * $restrict_keyword p);
4469 EOF
4470 done
4471
4472 check_cc <<EOF && enable pragma_deprecated
4473 void foo(void) { _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") }
4474 EOF
4475
4476 check_cc <<EOF && enable attribute_packed
4477 struct { int x; } __attribute__((packed)) x;
4478 EOF
4479
4480 check_cc <<EOF && enable attribute_may_alias
4481 union { int x; } __attribute__((may_alias)) x;
4482 EOF
4483
4484 check_cc <<EOF || die "endian test failed"
4485 unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
4486 EOF
4487 od -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
4488
4489 if  [ "$cpu" = "power7" ] || [ "$cpu" = "power8" ] || enabled ppc64; then
4490     if ! enabled bigendian && enabled altivec ;then
4491         enable vsx
4492     fi
4493 fi
4494
4495 check_gas() {
4496     log "check_gas using '$as' as AS"
4497     # :vararg is used on aarch64, arm and ppc altivec
4498     check_as <<EOF || return 1
4499 .macro m n, y:vararg=0
4500 \n: .int \y
4501 .endm
4502 m x
4503 EOF
4504     # .altmacro is only used in arm asm
4505     ! enabled arm || check_as <<EOF || return 1
4506 .altmacro
4507 EOF
4508     enable gnu_as
4509     return 0
4510 }
4511
4512 if enabled_any arm aarch64 || enabled_all ppc altivec && enabled asm; then
4513     nogas=:
4514     enabled_any arm aarch64 && nogas=die
4515     enabled_all ppc altivec && [ $target_os_default != aix ] && nogas=warn
4516     as_noop=-v
4517
4518     case $as_type in
4519         arm*) gaspp_as_type=armasm; as_noop=-h ;;
4520         gcc)  gaspp_as_type=gas ;;
4521         *)    gaspp_as_type=$as_type ;;
4522     esac
4523
4524     [ $target_os = "darwin" ] && gaspp_as_type="apple-$gaspp_as_type"
4525
4526     test "${as#*gas-preprocessor.pl}" != "$as" ||
4527     check_cmd gas-preprocessor.pl -arch $arch -as-type $gaspp_as_type -- ${as:=$cc} $as_noop &&
4528         gas="${gas:=gas-preprocessor.pl} -arch $arch -as-type $gaspp_as_type -- ${as:=$cc}"
4529
4530     if ! check_gas ; then
4531         as=${gas:=$as}
4532         check_gas || \
4533             $nogas "GNU assembler not found, install/update gas-preprocessor"
4534     fi
4535
4536     check_as <<EOF && enable as_func
4537 .func test
4538 .endfunc
4539 EOF
4540 fi
4541
4542 check_inline_asm inline_asm_labels '"1:\n"'
4543
4544 check_inline_asm inline_asm_nonlocal_labels '"Label:\n"'
4545
4546 if enabled aarch64; then
4547     enabled armv8 && check_insn armv8 'prfm   pldl1strm, [x0]'
4548     # internal assembler in clang 3.3 does not support this instruction
4549     enabled neon && check_insn neon 'ext   v0.8B, v0.8B, v1.8B, #1'
4550     enabled vfp  && check_insn vfp  'fmadd d0,    d0,    d1,    d2'
4551
4552     map 'enabled_any ${v}_external ${v}_inline || disable $v' $ARCH_EXT_LIST_ARM
4553
4554 elif enabled alpha; then
4555
4556     check_cflags -mieee
4557
4558 elif enabled arm; then
4559
4560     check_cpp_condition stddef.h "defined __thumb__" && check_cc <<EOF && enable_weak thumb
4561 float func(float a, float b){ return a+b; }
4562 EOF
4563
4564     enabled thumb && check_cflags -mthumb || check_cflags -marm
4565
4566     if     check_cpp_condition stddef.h "defined __ARM_PCS_VFP"; then
4567         enable vfp_args
4568     elif ! check_cpp_condition stddef.h "defined __ARM_PCS || defined __SOFTFP__"; then
4569         case "${cross_prefix:-$cc}" in
4570             *hardfloat*)         enable vfp_args;   fpabi=vfp ;;
4571             *) check_ld "cc" <<EOF && enable vfp_args && fpabi=vfp || fpabi=soft ;;
4572 __asm__ (".eabi_attribute 28, 1");
4573 int main(void) { return 0; }
4574 EOF
4575         esac
4576         warn "Compiler does not indicate floating-point ABI, guessing $fpabi."
4577     fi
4578
4579     enabled armv5te && check_insn armv5te 'qadd r0, r0, r0'
4580     enabled armv6   && check_insn armv6   'sadd16 r0, r0, r0'
4581     enabled armv6t2 && check_insn armv6t2 'movt r0, #0'
4582     enabled neon    && check_insn neon    'vadd.i16 q0, q0, q0'
4583     enabled vfp     && check_insn vfp     'fadds s0, s0, s0'
4584     enabled vfpv3   && check_insn vfpv3   'vmov.f32 s0, #1.0'
4585     enabled setend  && check_insn setend  'setend be'
4586
4587     [ $target_os = linux ] || [ $target_os = android ] ||
4588         map 'enabled_any ${v}_external ${v}_inline || disable $v' \
4589             $ARCH_EXT_LIST_ARM
4590
4591     check_inline_asm asm_mod_q '"add r0, %Q0, %R0" :: "r"((long long)0)'
4592
4593     check_as <<EOF && enable as_dn_directive
4594 ra .dn d0.i16
4595 .unreq ra
4596 EOF
4597
4598     # llvm's integrated assembler supports .object_arch from llvm 3.5
4599     [ "$objformat" = elf ] && check_as <<EOF && enable as_object_arch
4600 .object_arch armv4
4601 EOF
4602
4603     [ $target_os != win32 ] && enabled_all armv6t2 shared !pic && enable_weak_pic
4604
4605 elif enabled mips; then
4606
4607     check_inline_asm loongson '"dmult.g $1, $2, $3"'
4608
4609     # Enable minimum ISA based on selected options
4610     if enabled mips64 && (enabled mipsdspr1 || enabled mipsdspr2); then
4611         add_cflags "-mips64r2"
4612         add_asflags "-mips64r2"
4613     elif enabled mips64 && enabled mipsfpu; then
4614         add_cflags "-mips64"
4615         add_asflags "-mips64"
4616     elif enabled mipsfpu || enabled mipsdspr1 || enabled mipsdspr2; then
4617         add_cflags "-mips32r2"
4618         add_asflags "-mips32r2"
4619     fi
4620
4621     enabled mipsdspr1 && add_cflags "-mdsp" && add_asflags "-mdsp" &&
4622      check_inline_asm mipsdspr1 '"addu.qb $t0, $t1, $t2"'
4623     enabled mipsdspr2 && add_cflags "-mdspr2" && add_asflags "-mdspr2" &&
4624      check_inline_asm mipsdspr2 '"absq_s.qb $t0, $t1"'
4625     enabled mipsfpu   && add_cflags "-mhard-float" && add_asflags "-mhard-float" &&
4626      check_inline_asm mipsfpu   '"madd.d $f0, $f2, $f4, $f6"'
4627
4628 elif enabled parisc; then
4629
4630     if enabled gcc; then
4631         case $($cc -dumpversion) in
4632             4.[3-9].*) check_cflags -fno-optimize-sibling-calls ;;
4633         esac
4634     fi
4635
4636 elif enabled ppc; then
4637
4638     enable local_aligned_8 local_aligned_16 local_aligned_32
4639
4640     check_inline_asm dcbzl     '"dcbzl 0, %0" :: "r"(0)'
4641     check_inline_asm ibm_asm   '"add 0, 0, 0"'
4642     check_inline_asm ppc4xx    '"maclhw r10, r11, r12"'
4643     check_inline_asm xform_asm '"lwzx %1, %y0" :: "Z"(*(int*)0), "r"(0)'
4644
4645     # AltiVec flags: The FSF version of GCC differs from the Apple version
4646     if enabled altivec; then
4647         check_cflags -maltivec -mabi=altivec &&
4648         { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
4649         check_cflags -faltivec
4650
4651         # check if our compiler supports Motorola AltiVec C API
4652         check_cc <<EOF || disable altivec
4653 $inc_altivec_h
4654 int main(void) {
4655     vector signed int v1 = (vector signed int) { 0 };
4656     vector signed int v2 = (vector signed int) { 1 };
4657     v1 = vec_add(v1, v2);
4658     return 0;
4659 }
4660 EOF
4661
4662         enabled altivec || warn "Altivec disabled, possibly missing --cpu flag"
4663     fi
4664
4665     if enabled vsx; then
4666         check_cflags -mvsx
4667     fi
4668 elif enabled x86; then
4669
4670     check_builtin rdtsc    intrin.h   "__rdtsc()"
4671     check_builtin mm_empty mmintrin.h "_mm_empty()"
4672
4673     enable local_aligned_8 local_aligned_16 local_aligned_32
4674
4675     # check whether EBP is available on x86
4676     # As 'i' is stored on the stack, this program will crash
4677     # if the base pointer is used to access it because the
4678     # base pointer is cleared in the inline assembly code.
4679     check_exec_crash <<EOF && enable ebp_available
4680 volatile int i=0;
4681 __asm__ volatile ("xorl %%ebp, %%ebp" ::: "%ebp");
4682 return i;
4683 EOF
4684
4685     # check whether EBX is available on x86
4686     check_inline_asm ebx_available '""::"b"(0)' &&
4687         check_inline_asm ebx_available '"":::"%ebx"'
4688
4689     # check whether xmm clobbers are supported
4690     check_inline_asm xmm_clobbers '"":::"%xmm0"'
4691
4692     check_inline_asm inline_asm_direct_symbol_refs '"movl '$extern_prefix'test, %eax"' ||
4693         check_inline_asm inline_asm_direct_symbol_refs '"movl '$extern_prefix'test(%rip), %eax"'
4694
4695     # check whether binutils is new enough to compile SSSE3/MMXEXT
4696     enabled ssse3  && check_inline_asm ssse3_inline  '"pabsw %xmm0, %xmm0"'
4697     enabled mmxext && check_inline_asm mmxext_inline '"pmaxub %mm0, %mm1"'
4698
4699     if ! disabled_any asm mmx yasm; then
4700         if check_cmd $yasmexe --version; then
4701             enabled x86_64 && yasm_extra="-m amd64"
4702             yasm_debug="-g dwarf2"
4703         elif check_cmd nasm -v; then
4704             yasmexe=nasm
4705             yasm_debug="-g -F dwarf"
4706             if enabled x86_64; then
4707                 case "$objformat" in
4708                     elf)   objformat=elf64 ;;
4709                     win32) objformat=win64 ;;
4710                 esac
4711             fi
4712         fi
4713
4714         YASMFLAGS="-f $objformat $yasm_extra"
4715         enabled pic               && append YASMFLAGS "-DPIC"
4716         test -n "$extern_prefix"  && append YASMFLAGS "-DPREFIX"
4717         case "$objformat" in
4718             elf*) enabled debug && append YASMFLAGS $yasm_debug ;;
4719         esac
4720
4721         check_yasm "movbe ecx, [5]" && enable yasm ||
4722             die "yasm/nasm not found or too old. Use --disable-yasm for a crippled build."
4723         check_yasm "vextracti128 xmm0, ymm0, 0"      || disable avx2_external
4724         check_yasm "vpmacsdd xmm0, xmm1, xmm2, xmm3" || disable xop_external
4725         check_yasm "vfmaddps ymm0, ymm1, ymm2, ymm3" || disable fma4_external
4726         check_yasm "CPU amdnop" || disable cpunop
4727     fi
4728
4729     case "$cpu" in
4730         athlon*|opteron*|k8*|pentium|pentium-mmx|prescott|nocona|atom|geode)
4731             disable fast_clz
4732         ;;
4733     esac
4734
4735 fi
4736
4737 check_code cc arm_neon.h "int16x8_t test = vdupq_n_s16(0)" && enable intrinsics_neon
4738
4739 check_ldflags -Wl,--as-needed
4740 check_ldflags -Wl,-z,noexecstack
4741
4742 if check_func dlopen; then
4743     ldl=
4744 elif check_func dlopen -ldl; then
4745     ldl=-ldl
4746 fi
4747
4748 frei0r_filter_extralibs='$ldl'
4749 frei0r_src_filter_extralibs='$ldl'
4750 ladspa_filter_extralibs='$ldl'
4751 nvenc_encoder_extralibs='$ldl'
4752
4753 if ! disabled network; then
4754     check_func getaddrinfo $network_extralibs
4755     check_func getservbyport $network_extralibs
4756     check_func inet_aton $network_extralibs
4757
4758     check_type netdb.h "struct addrinfo"
4759     check_type netinet/in.h "struct group_source_req" -D_BSD_SOURCE
4760     check_type netinet/in.h "struct ip_mreq_source" -D_BSD_SOURCE
4761     check_type netinet/in.h "struct ipv6_mreq" -D_DARWIN_C_SOURCE
4762     check_type poll.h "struct pollfd"
4763     check_type netinet/sctp.h "struct sctp_event_subscribe"
4764     check_struct "sys/types.h sys/socket.h" "struct sockaddr" sa_len
4765     check_type netinet/in.h "struct sockaddr_in6"
4766     check_type "sys/types.h sys/socket.h" "struct sockaddr_storage"
4767     check_type "sys/types.h sys/socket.h" socklen_t
4768
4769     # Prefer arpa/inet.h over winsock2
4770     if check_header arpa/inet.h ; then
4771         check_func closesocket
4772     elif check_header winsock2.h ; then
4773         check_func_headers winsock2.h closesocket -lws2 &&
4774             network_extralibs="-lws2" ||
4775         { check_func_headers winsock2.h closesocket -lws2_32 &&
4776             network_extralibs="-lws2_32"; } || disable winsock2_h network
4777         check_func_headers ws2tcpip.h getaddrinfo $network_extralibs
4778
4779         check_type ws2tcpip.h socklen_t
4780         check_type ws2tcpip.h "struct addrinfo"
4781         check_type ws2tcpip.h "struct group_source_req"
4782         check_type ws2tcpip.h "struct ip_mreq_source"
4783         check_type ws2tcpip.h "struct ipv6_mreq"
4784         check_type winsock2.h "struct pollfd"
4785         check_struct winsock2.h "struct sockaddr" sa_len
4786         check_type ws2tcpip.h "struct sockaddr_in6"
4787         check_type ws2tcpip.h "struct sockaddr_storage"
4788     else
4789         disable network
4790     fi
4791 fi
4792
4793 check_builtin atomic_cas_ptr atomic.h "void **ptr; void *oldval, *newval; atomic_cas_ptr(ptr, oldval, newval)"
4794 check_builtin atomic_compare_exchange "" "int *ptr, *oldval; int newval; __atomic_compare_exchange_n(ptr, oldval, newval, 0, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST)"
4795 check_builtin machine_rw_barrier mbarrier.h "__machine_rw_barrier()"
4796 check_builtin MemoryBarrier windows.h "MemoryBarrier()"
4797 check_builtin sarestart signal.h "SA_RESTART"
4798 check_builtin sync_val_compare_and_swap "" "int *ptr; int oldval, newval; __sync_val_compare_and_swap(ptr, oldval, newval)"
4799
4800 check_func_headers malloc.h _aligned_malloc     && enable aligned_malloc
4801 check_func  ${malloc_prefix}memalign            && enable memalign
4802 check_func  ${malloc_prefix}posix_memalign      && enable posix_memalign
4803
4804 check_func  access
4805 check_func_headers time.h clock_gettime || { check_func_headers time.h clock_gettime -lrt && add_extralibs -lrt && LIBRT="-lrt"; }
4806 check_func  fcntl
4807 check_func  fork
4808 check_func  gethrtime
4809 check_func  getopt
4810 check_func  getrusage
4811 check_func  gettimeofday
4812 check_func  gmtime_r
4813 check_func  isatty
4814 check_func  localtime_r
4815 check_func  mach_absolute_time
4816 check_func  mkstemp
4817 check_func  mmap
4818 check_func  mprotect
4819 # Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
4820 check_func_headers time.h nanosleep || { check_func_headers time.h nanosleep -lrt && add_extralibs -lrt && LIBRT="-lrt"; }
4821 check_func  sched_getaffinity
4822 check_func  setrlimit
4823 check_struct "sys/stat.h" "struct stat" st_mtim.tv_nsec -D_BSD_SOURCE
4824 check_func  strerror_r
4825 check_func  sysconf
4826 check_func  sysctl
4827 check_func  usleep
4828
4829 check_func_headers conio.h kbhit
4830 check_func_headers io.h setmode
4831 check_func_headers lzo/lzo1x.h lzo1x_999_compress
4832 check_func_headers stdlib.h getenv
4833
4834 check_func_headers windows.h CoTaskMemFree -lole32
4835 check_func_headers windows.h GetProcessAffinityMask
4836 check_func_headers windows.h GetProcessTimes
4837 check_func_headers windows.h GetSystemTimeAsFileTime
4838 check_func_headers windows.h MapViewOfFile
4839 check_func_headers windows.h PeekNamedPipe
4840 check_func_headers windows.h SetConsoleTextAttribute
4841 check_func_headers windows.h Sleep
4842 check_func_headers windows.h VirtualAlloc
4843 check_struct windows.h "CONDITION_VARIABLE" Ptr
4844 check_func_headers glob.h glob
4845 enabled xlib &&
4846     check_func_headers "X11/Xlib.h X11/extensions/Xvlib.h" XvGetPortAttribute -lXv -lX11 -lXext
4847
4848 check_header direct.h
4849 check_header dlfcn.h
4850 check_header dxva.h
4851 check_header dxva2api.h -D_WIN32_WINNT=0x0600
4852 check_header io.h
4853 check_header libcrystalhd/libcrystalhd_if.h
4854 check_header mach/mach_time.h
4855 check_header malloc.h
4856 check_header net/udplite.h
4857 check_header poll.h
4858 check_header sys/mman.h
4859 check_header sys/param.h
4860 check_header sys/resource.h
4861 check_header sys/select.h
4862 check_header sys/time.h
4863 check_header sys/un.h
4864 check_header termios.h
4865 check_header unistd.h
4866 check_header vdpau/vdpau.h
4867 check_header vdpau/vdpau_x11.h
4868 check_header VideoDecodeAcceleration/VDADecoder.h
4869 check_header windows.h
4870 check_header X11/extensions/XvMClib.h
4871 check_header asm/types.h
4872
4873 check_lib2 "windows.h shellapi.h" CommandLineToArgvW -lshell32
4874 check_lib2 "windows.h wincrypt.h" CryptGenRandom -ladvapi32
4875 check_lib2 "windows.h psapi.h" GetProcessMemoryInfo -lpsapi
4876
4877 check_struct "sys/time.h sys/resource.h" "struct rusage" ru_maxrss
4878
4879 check_type "windows.h dxva.h" "DXVA_PicParams_HEVC"
4880
4881 if ! disabled w32threads && ! enabled pthreads; then
4882     check_func_headers "windows.h process.h" _beginthreadex &&
4883         enable w32threads || disable w32threads
4884 fi
4885
4886 # check for some common methods of building with pthread support
4887 # do this before the optional library checks as some of them require pthreads
4888 if ! disabled pthreads && ! enabled w32threads && ! enabled os2threads; then
4889     enable pthreads
4890     if check_func pthread_join -pthread && check_func pthread_create -pthread; then
4891         add_cflags -pthread
4892         add_extralibs -pthread
4893     elif check_func pthread_join -pthreads && check_func pthread_create -pthreads; then
4894         add_cflags -pthreads
4895         add_extralibs -pthreads
4896     elif check_func pthread_join -ldl -pthread && check_func pthread_create -ldl -pthread; then
4897         add_cflags -ldl -pthread
4898         add_extralibs -ldl -pthread
4899     elif check_func pthread_join -lpthreadGC2 && check_func pthread_create -lpthreadGC2; then
4900         add_extralibs -lpthreadGC2
4901     elif check_lib pthread.h pthread_join -lpthread && check_lib pthread.h pthread_create -lpthread; then
4902         :
4903     elif ! check_func pthread_join && ! check_func pthread_create; then
4904         disable pthreads
4905     fi
4906     check_code cc "pthread.h" "static pthread_mutex_t atomic_lock = PTHREAD_MUTEX_INITIALIZER" || disable pthreads
4907 fi
4908
4909
4910 if enabled pthreads; then
4911   check_func pthread_cancel
4912 fi
4913
4914 disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
4915 disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
4916 disabled  lzma || check_lib2  lzma.h lzma_version_number -llzma || disable lzma
4917
4918 check_lib math.h sin -lm && LIBM="-lm"
4919 disabled crystalhd || check_lib libcrystalhd/libcrystalhd_if.h DtsCrystalHDVersion -lcrystalhd || disable crystalhd
4920
4921 atan2f_args=2
4922 ldexpf_args=2
4923 powf_args=2
4924
4925 for func in $MATH_FUNCS; do
4926     eval check_mathfunc $func \${${func}_args:-1}
4927 done
4928
4929 # these are off by default, so fail if requested and not available
4930 enabled avfoundation_indev && { check_header_oc AVFoundation/AVFoundation.h || disable avfoundation_indev; }
4931 enabled avfoundation_indev && { check_lib2 CoreGraphics/CoreGraphics.h CGGetActiveDisplayList -framework CoreGraphics ||
4932                                 check_lib2 ApplicationServices/ApplicationServices.h CGGetActiveDisplayList -framework ApplicationServices; }
4933 enabled avisynth          && { { check_lib2 "windows.h" LoadLibrary; } ||
4934                                { check_lib2 "dlfcn.h" dlopen -ldl; } ||
4935                                die "ERROR: LoadLibrary/dlopen not found for avisynth"; }
4936 enabled decklink          && { check_header DeckLinkAPI.h || die "ERROR: DeckLinkAPI.h header not found"; }
4937 enabled frei0r            && { check_header frei0r.h || die "ERROR: frei0r.h header not found"; }
4938 enabled gnutls            && require_pkg_config gnutls gnutls/gnutls.h gnutls_global_init
4939 enabled ladspa            && { check_header ladspa.h || die "ERROR: ladspa.h header not found"; }
4940 enabled libiec61883       && require libiec61883 libiec61883/iec61883.h iec61883_cmp_connect -lraw1394 -lavc1394 -lrom1394 -liec61883
4941 enabled libaacplus        && require "libaacplus >= 2.0.0" aacplus.h aacplusEncOpen -laacplus
4942 enabled libass            && require_pkg_config libass ass/ass.h ass_library_init
4943 enabled libbluray         && require_pkg_config libbluray libbluray/bluray.h bd_open
4944 enabled libbs2b           && require_pkg_config libbs2b bs2b.h bs2b_open
4945 enabled libcelt           && require libcelt celt/celt.h celt_decode -lcelt0 &&
4946                              { check_lib celt/celt.h celt_decoder_create_custom -lcelt0 ||
4947                                die "ERROR: libcelt must be installed and version must be >= 0.11.0."; }
4948 enabled libcaca           && require_pkg_config caca caca.h caca_create_canvas
4949 enabled libdcadec         && require libdcadec libdcadec/dca_context.h dcadec_context_create -ldcadec
4950 enabled libfaac           && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
4951 enabled libfdk_aac        && require libfdk_aac fdk-aac/aacenc_lib.h aacEncOpen -lfdk-aac
4952 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"
4953 enabled libflite          && require2 libflite "flite/flite.h" flite_init $flite_libs
4954 enabled fontconfig        && enable libfontconfig
4955 enabled libfontconfig     && require_pkg_config fontconfig "fontconfig/fontconfig.h" FcInit
4956 enabled libfreetype       && require_libfreetype
4957 enabled libfribidi        && require_pkg_config fribidi fribidi.h fribidi_version_info
4958 enabled libgme            && require  libgme gme/gme.h gme_new_emu -lgme -lstdc++
4959 enabled libgsm            && { for gsm_hdr in "gsm.h" "gsm/gsm.h"; do
4960                                    check_lib "${gsm_hdr}" gsm_create -lgsm && break;
4961                                done || die "ERROR: libgsm not found"; }
4962 enabled libilbc           && require libilbc ilbc.h WebRtcIlbcfix_InitDecode -lilbc
4963 enabled libmfx            && require_pkg_config libmfx "mfx/mfxvideo.h" MFXInit
4964 enabled libmodplug        && require_pkg_config libmodplug libmodplug/modplug.h ModPlug_Load
4965 enabled libmp3lame        && require "libmp3lame >= 3.98.3" lame/lame.h lame_set_VBR_quality -lmp3lame
4966 enabled libnut            && require libnut libnut.h nut_demuxer_init -lnut
4967 enabled libopencore_amrnb && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb
4968 enabled libopencore_amrwb && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb
4969 enabled libopencv         && require_pkg_config opencv opencv/cxcore.h cvCreateImageHeader
4970 enabled libopenh264       && require_pkg_config openh264 wels/codec_api.h WelsGetCodecVersion
4971 enabled libopenjpeg       && { check_lib openjpeg.h opj_version -lopenmj2 -DOPJ_STATIC ||
4972                                check_lib openjpeg-1.5/openjpeg.h opj_version -lopenjpeg -DOPJ_STATIC ||
4973                                check_lib openjpeg.h opj_version -lopenjpeg -DOPJ_STATIC ||
4974                                die "ERROR: libopenjpeg not found"; }
4975 enabled libopus           && require_pkg_config opus opus_multistream.h opus_multistream_decoder_create
4976 enabled libpulse          && require_pkg_config libpulse pulse/pulseaudio.h pa_context_new
4977 enabled libquvi           && require_pkg_config libquvi quvi/quvi.h quvi_init
4978 enabled librtmp           && require_pkg_config librtmp librtmp/rtmp.h RTMP_Socket
4979 enabled libschroedinger   && require_pkg_config schroedinger-1.0 schroedinger/schro.h schro_init
4980 enabled libshine          && require_pkg_config shine shine/layer3.h shine_encode_buffer
4981 enabled libsmbclient      && { use_pkg_config smbclient libsmbclient.h smbc_init ||
4982                                require smbclient libsmbclient.h smbc_init -lsmbclient; }
4983 enabled libsoxr           && require libsoxr soxr.h soxr_create -lsoxr
4984 enabled libssh            && require_pkg_config libssh libssh/sftp.h sftp_init
4985 enabled libspeex          && require_pkg_config speex speex/speex.h speex_decoder_init -lspeex
4986 enabled libstagefright_h264 && require_cpp libstagefright_h264 "binder/ProcessState.h media/stagefright/MetaData.h
4987     media/stagefright/MediaBufferGroup.h media/stagefright/MediaDebug.h media/stagefright/MediaDefs.h
4988     media/stagefright/OMXClient.h media/stagefright/OMXCodec.h" android::OMXClient -lstagefright -lmedia -lutils -lbinder -lgnustl_static
4989 enabled libtheora         && require libtheora theora/theoraenc.h th_info_init -ltheoraenc -ltheoradec -logg
4990 enabled libtwolame        && require libtwolame twolame.h twolame_init -ltwolame &&
4991                              { check_lib twolame.h twolame_encode_buffer_float32_interleaved -ltwolame ||
4992                                die "ERROR: libtwolame must be installed and version must be >= 0.3.10"; }
4993 enabled libutvideo        && require_cpp utvideo "stdint.h stdlib.h utvideo/utvideo.h utvideo/Codec.h" 'CCodec*' -lutvideo -lstdc++
4994 enabled libv4l2           && require_pkg_config libv4l2 libv4l2.h v4l2_ioctl
4995 enabled libvidstab        && require_pkg_config "vidstab >= 0.98" vid.stab/libvidstab.h vsMotionDetectInit
4996 enabled libvo_aacenc      && require libvo_aacenc vo-aacenc/voAAC.h voGetAACEncAPI -lvo-aacenc
4997 enabled libvo_amrwbenc    && require libvo_amrwbenc vo-amrwbenc/enc_if.h E_IF_init -lvo-amrwbenc
4998 enabled libvorbis         && require libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
4999 enabled libvpx            && {
5000     enabled libvpx_vp8_decoder && { check_lib2 "vpx/vpx_decoder.h vpx/vp8dx.h" vpx_codec_dec_init_ver -lvpx ||
5001                                     die "ERROR: libvpx decoder version must be >=0.9.1"; }
5002     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 ||
5003                                     die "ERROR: libvpx encoder version must be >=0.9.7"; }
5004     enabled libvpx_vp9_decoder && { check_lib2 "vpx/vpx_decoder.h vpx/vp8dx.h" "vpx_codec_vp9_dx" -lvpx || disable libvpx_vp9_decoder; }
5005     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; } }
5006 enabled libwavpack        && require libwavpack wavpack/wavpack.h WavpackOpenFileOutput  -lwavpack
5007 enabled libwebp           && require_pkg_config "libwebp >= 0.2.0" webp/encode.h WebPGetEncoderVersion
5008 enabled libx264           && { use_pkg_config x264 "stdint.h x264.h" x264_encoder_encode ||
5009                                { require libx264 x264.h x264_encoder_encode -lx264 &&
5010                                  warn "using libx264 without pkg-config"; } } &&
5011                              { check_cpp_condition x264.h "X264_BUILD >= 118" ||
5012                                die "ERROR: libx264 must be installed and version must be >= 0.118."; }
5013 enabled libx265           && require_pkg_config x265 x265.h x265_encoder_encode &&
5014                              { check_cpp_condition x265.h "X265_BUILD >= 17" ||
5015                                die "ERROR: libx265 version must be >= 17."; }
5016 enabled libxavs           && require libxavs xavs.h xavs_encoder_encode -lxavs
5017 enabled libxvid           && require libxvid xvid.h xvid_global -lxvidcore
5018 enabled libzmq            && require_pkg_config libzmq zmq.h zmq_ctx_new
5019 enabled libzvbi           && require libzvbi libzvbi.h vbi_decoder_new -lzvbi
5020 enabled mmal              && { check_lib interface/mmal/mmal.h mmal_port_connect -lmmal_core -lmmal_util -lmmal_vc_client -lbcm_host ||
5021                                 { ! enabled cross_compile && {
5022                                     add_cflags -isystem/opt/vc/include/ -isystem/opt/vc/include/interface/vmcs_host/linux -isystem/opt/vc/include/interface/vcos/pthreads -fgnu89-inline ;
5023                                     add_extralibs -L/opt/vc/lib/ -lmmal_core -lmmal_util -lmmal_vc_client -lbcm_host ;
5024                                     check_lib interface/mmal/mmal.h mmal_port_connect ; }
5025                                 check_lib interface/mmal/mmal.h mmal_port_connect ; } ||
5026                                die "ERROR: mmal not found"; }
5027 enabled nvenc             && { check_header nvEncodeAPI.h || die "ERROR: nvEncodeAPI.h not found."; } &&
5028                              { check_cpp_condition nvEncodeAPI.h "NVENCAPI_MAJOR_VERSION >= 5" ||
5029                                die "ERROR: NVENC API version 4 or older is not supported"; } &&
5030                              { [ $target_os != cygwin ] || die "ERROR: NVENC is not supported on Cygwin currently."; }
5031 enabled openal            && { { for al_libs in "${OPENAL_LIBS}" "-lopenal" "-lOpenAL32"; do
5032                                check_lib 'AL/al.h' alGetError "${al_libs}" && break; done } ||
5033                                die "ERROR: openal not found"; } &&
5034                              { check_cpp_condition "AL/al.h" "defined(AL_VERSION_1_1)" ||
5035                                die "ERROR: openal must be installed and version must be 1.1 or compatible"; }
5036 enabled opencl            && { check_lib2 OpenCL/cl.h clEnqueueNDRangeKernel -Wl,-framework,OpenCL ||
5037                                check_lib2 CL/cl.h clEnqueueNDRangeKernel -lOpenCL ||
5038                                die "ERROR: opencl not found"; } &&
5039                              { check_cpp_condition "OpenCL/cl.h" "defined(CL_VERSION_1_2)" ||
5040                                check_cpp_condition "CL/cl.h" "defined(CL_VERSION_1_2)" ||
5041                                die "ERROR: opencl must be installed and version must be 1.2 or compatible"; }
5042 enabled opengl            && { check_lib GL/glx.h glXGetProcAddress "-lGL" ||
5043                                check_lib2 windows.h wglGetProcAddress "-lopengl32 -lgdi32" ||
5044                                check_lib2 OpenGL/gl3.h glGetError "-Wl,-framework,OpenGL" ||
5045                                check_lib2 ES2/gl.h glGetError "-isysroot=${sysroot} -Wl,-framework,OpenGLES" ||
5046                                die "ERROR: opengl not found."
5047                              }
5048 enabled openssl           && { check_lib openssl/ssl.h SSL_library_init -lssl -lcrypto ||
5049                                check_lib openssl/ssl.h SSL_library_init -lssl32 -leay32 ||
5050                                check_lib openssl/ssl.h SSL_library_init -lssl -lcrypto -lws2_32 -lgdi32 ||
5051                                die "ERROR: openssl not found"; }
5052 enabled qtkit_indev      && { check_header_oc QTKit/QTKit.h || disable qtkit_indev; }
5053
5054 if enabled gnutls; then
5055     { check_lib nettle/bignum.h nettle_mpz_get_str_256 -lnettle -lhogweed -lgmp && enable nettle; } ||
5056     { check_lib gcrypt.h gcry_mpi_new -lgcrypt && enable gcrypt; }
5057 fi
5058
5059 # libdc1394 check
5060 if enabled libdc1394; then
5061     { require_pkg_config libdc1394-2 dc1394/dc1394.h dc1394_new &&
5062         enable libdc1394_2; } ||
5063     { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
5064         enable libdc1394_1; } ||
5065     die "ERROR: No version of libdc1394 found "
5066 fi
5067 if ! disabled sdl; then
5068     SDL_CONFIG="${cross_prefix}sdl-config"
5069     if check_pkg_config sdl SDL_events.h SDL_PollEvent; then
5070         check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
5071         check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) < 0x010300" $sdl_cflags &&
5072         enable sdl
5073     else
5074         if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
5075             sdl_cflags=$("${SDL_CONFIG}" --cflags)
5076             sdl_libs=$("${SDL_CONFIG}" --libs)
5077             check_func_headers SDL_version.h SDL_Linked_Version $sdl_cflags $sdl_libs &&
5078             check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
5079             check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) < 0x010300" $sdl_cflags &&
5080             enable sdl
5081         elif enabled sdl ; then
5082             die "ERROR: SDL not found"
5083         else
5084             disable sdl
5085         fi
5086     fi
5087 fi
5088 enabled sdl && add_cflags $sdl_cflags && add_extralibs $sdl_libs
5089
5090 makeinfo --version > /dev/null 2>&1 && enable makeinfo  || disable makeinfo
5091 enabled makeinfo && (makeinfo --version | \
5092                      grep -q 'makeinfo (GNU texinfo) 5' > /dev/null 2>&1) \
5093     && enable makeinfo_html || disable makeinfo_html
5094 disabled makeinfo_html && texi2html --help 2> /dev/null | grep -q 'init-file' && enable texi2html || disable texi2html
5095 perl -v            > /dev/null 2>&1 && enable perl      || disable perl
5096 pod2man --help     > /dev/null 2>&1 && enable pod2man   || disable pod2man
5097 rsync --help 2> /dev/null | grep -q 'contimeout' && enable rsync_contimeout || disable rsync_contimeout
5098
5099 check_header linux/fb.h
5100 check_header linux/videodev.h
5101 check_header linux/videodev2.h
5102 check_code cc linux/videodev2.h "struct v4l2_frmsizeenum vfse; vfse.discrete.width = 0;" && enable_safe struct_v4l2_frmivalenum_discrete
5103
5104 check_header sys/videoio.h
5105 check_code cc sys/videoio.h "struct v4l2_frmsizeenum vfse; vfse.discrete.width = 0;" && enable_safe struct_v4l2_frmivalenum_discrete
5106
5107 check_func_headers "windows.h vfw.h" capCreateCaptureWindow "$vfwcap_indev_extralibs"
5108 # check that WM_CAP_DRIVER_CONNECT is defined to the proper value
5109 # w32api 3.12 had it defined wrong
5110 check_cpp_condition vfw.h "WM_CAP_DRIVER_CONNECT > WM_USER" && enable vfwcap_defines
5111
5112 check_type "dshow.h" IBaseFilter
5113
5114 # check for ioctl_meteor.h, ioctl_bt848.h and alternatives
5115 { check_header dev/bktr/ioctl_meteor.h &&
5116   check_header dev/bktr/ioctl_bt848.h; } ||
5117 { check_header machine/ioctl_meteor.h &&
5118   check_header machine/ioctl_bt848.h; } ||
5119 { check_header dev/video/meteor/ioctl_meteor.h &&
5120   check_header dev/video/bktr/ioctl_bt848.h; } ||
5121 check_header dev/ic/bt8xx.h
5122
5123 check_header sndio.h
5124 if check_struct sys/soundcard.h audio_buf_info bytes; then
5125     enable_safe sys/soundcard.h
5126 else
5127     check_cc -D__BSD_VISIBLE -D__XSI_VISIBLE <<EOF && add_cppflags -D__BSD_VISIBLE -D__XSI_VISIBLE && enable_safe sys/soundcard.h
5128     #include <sys/soundcard.h>
5129     audio_buf_info abc;
5130 EOF
5131 fi
5132 check_header soundcard.h
5133
5134 enabled_any alsa_indev alsa_outdev &&
5135     check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
5136
5137 enabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack && check_func sem_timedwait &&
5138     check_func jack_port_get_latency_range -ljack
5139
5140 enabled_any sndio_indev sndio_outdev && check_lib2 sndio.h sio_open -lsndio
5141
5142 if enabled libcdio; then
5143     check_lib2 "cdio/cdda.h cdio/paranoia.h" cdio_cddap_open -lcdio_paranoia -lcdio_cdda -lcdio ||
5144     check_lib2 "cdio/paranoia/cdda.h cdio/paranoia/paranoia.h" cdio_cddap_open -lcdio_paranoia -lcdio_cdda -lcdio ||
5145     die "ERROR: No usable libcdio/cdparanoia found"
5146 fi
5147
5148 enabled xlib &&
5149     check_lib X11/Xlib.h XOpenDisplay -lX11 || disable xlib
5150
5151 if ! disabled libxcb; then
5152     check_pkg_config "xcb >= 1.4" xcb/xcb.h xcb_connect || {
5153         enabled libxcb && die "ERROR: libxcb >= 1.4 not found";
5154     } && disable x11grab && enable libxcb
5155
5156 if enabled libxcb; then
5157     disabled libxcb_shm || {
5158         check_pkg_config xcb-shm xcb/shm.h xcb_shm_attach || {
5159             enabled libxcb_shm && die "ERROR: libxcb_shm not found";
5160         } && check_header sys/shm.h && enable libxcb_shm; }
5161
5162     disabled libxcb_xfixes || {
5163         check_pkg_config xcb-xfixes xcb/xfixes.h xcb_xfixes_get_cursor_image || {
5164             enabled libxcb_xfixes && die "ERROR: libxcb_xfixes not found";
5165         } && enable libxcb_xfixes; }
5166
5167     disabled libxcb_shape || {
5168         check_pkg_config xcb-shape xcb/shape.h xcb_shape_get_rectangles || {
5169             enabled libxcb_shape && die "ERROR: libxcb_shape not found";
5170         } && enable libxcb_shape; }
5171
5172     add_cflags $xcb_cflags $xcb_shm_cflags $xcb_xfixes_cflags $xcb_shape_cflags
5173     add_extralibs $xcb_libs $xcb_shm_libs $xcb_xfixes_libs $xcb_shape_libs
5174 fi
5175 fi
5176
5177 if enabled x11grab; then
5178     enabled xlib || die "ERROR: Xlib not found"
5179     require Xext X11/extensions/XShm.h XShmCreateImage -lXext
5180     require Xfixes X11/extensions/Xfixes.h XFixesGetCursorImage -lXfixes
5181 fi
5182
5183 check_func_headers "windows.h" CreateDIBSection "$gdigrab_indev_extralibs"
5184
5185 enabled dxva2api_h &&
5186     check_cc <<EOF && enable dxva2api_cobj
5187 #define _WIN32_WINNT 0x0600
5188 #define COBJMACROS
5189 #include <windows.h>
5190 #include <d3d9.h>
5191 #include <dxva2api.h>
5192 int main(void) { IDirectXVideoDecoder *o = NULL; IDirectXVideoDecoder_Release(o); return 0; }
5193 EOF
5194
5195 enabled vaapi &&
5196     check_lib va/va.h vaInitialize -lva ||
5197     disable vaapi
5198
5199 enabled vaapi && enabled xlib &&
5200     check_lib2 "va/va.h va/va_x11.h" vaGetDisplay -lva -lva-x11 &&
5201     enable vaapi_x11
5202
5203 enabled vdpau &&
5204     check_cpp_condition vdpau/vdpau.h "defined VDP_DECODER_PROFILE_MPEG4_PART2_ASP" ||
5205     disable vdpau
5206
5207 enabled vdpau && enabled xlib &&
5208     check_func_headers "vdpau/vdpau.h vdpau/vdpau_x11.h" vdp_device_create_x11 -lvdpau &&
5209     prepend ffmpeg_libs $($ldflags_filter "-lvdpau") &&
5210     enable vdpau_x11
5211
5212 # Funny iconv installations are not unusual, so check it after all flags have been set
5213 disabled iconv || check_func_headers iconv.h iconv || check_lib2 iconv.h iconv -liconv || disable iconv
5214
5215 enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel"
5216
5217 # add some useful compiler flags if supported
5218 check_cflags -Wdeclaration-after-statement
5219 check_cflags -Wall
5220 check_cflags -Wdisabled-optimization
5221 check_cflags -Wpointer-arith
5222 check_cflags -Wredundant-decls
5223 check_cflags -Wwrite-strings
5224 check_cflags -Wtype-limits
5225 check_cflags -Wundef
5226 check_cflags -Wmissing-prototypes
5227 check_cflags -Wno-pointer-to-int-cast
5228 check_cflags -Wstrict-prototypes
5229 check_cflags -Wempty-body
5230 enabled extra_warnings && check_cflags -Winline
5231
5232 check_disable_warning(){
5233     warning_flag=-W${1#-Wno-}
5234     test_cflags $warning_flag && add_cflags $1
5235 }
5236
5237 check_disable_warning -Wno-parentheses
5238 check_disable_warning -Wno-switch
5239 check_disable_warning -Wno-format-zero-length
5240 check_disable_warning -Wno-pointer-sign
5241
5242 # add some linker flags
5243 check_ldflags -Wl,--warn-common
5244 check_ldflags -Wl,-rpath-link=libpostproc:libswresample:libswscale:libavfilter:libavdevice:libavformat:libavcodec:libavutil:libavresample
5245 enabled rpath && add_ldexeflags -Wl,-rpath,$libdir
5246 test_ldflags -Wl,-Bsymbolic && append SHFLAGS -Wl,-Bsymbolic
5247
5248 # add some strip flags
5249 # -wN '..@*' is more selective than -x, but not available everywhere.
5250 check_stripflags -wN \'..@*\' || check_stripflags -x
5251
5252 enabled neon_clobber_test &&
5253     check_ldflags -Wl,--wrap,avcodec_open2              \
5254                   -Wl,--wrap,avcodec_decode_audio4      \
5255                   -Wl,--wrap,avcodec_decode_video2      \
5256                   -Wl,--wrap,avcodec_decode_subtitle2   \
5257                   -Wl,--wrap,avcodec_encode_audio2      \
5258                   -Wl,--wrap,avcodec_encode_video2      \
5259                   -Wl,--wrap,avcodec_encode_subtitle    \
5260                   -Wl,--wrap,swr_convert                \
5261                   -Wl,--wrap,avresample_convert ||
5262     disable neon_clobber_test
5263
5264 enabled xmm_clobber_test &&
5265     check_ldflags -Wl,--wrap,avcodec_open2              \
5266                   -Wl,--wrap,avcodec_decode_audio4      \
5267                   -Wl,--wrap,avcodec_decode_video2      \
5268                   -Wl,--wrap,avcodec_decode_subtitle2   \
5269                   -Wl,--wrap,avcodec_encode_audio2      \
5270                   -Wl,--wrap,avcodec_encode_video       \
5271                   -Wl,--wrap,avcodec_encode_video2      \
5272                   -Wl,--wrap,avcodec_encode_subtitle    \
5273                   -Wl,--wrap,swr_convert                \
5274                   -Wl,--wrap,avresample_convert         \
5275                   -Wl,--wrap,sws_scale ||
5276     disable xmm_clobber_test
5277
5278 echo "X{};" > $TMPV
5279 if test_ldflags -Wl,--version-script,$TMPV; then
5280     append SHFLAGS '-Wl,--version-script,\$(SUBDIR)lib\$(NAME).ver'
5281     check_cc <<EOF && enable symver_asm_label
5282 void ff_foo(void) __asm__ ("av_foo@VERSION");
5283 void ff_foo(void) { ${inline_asm+__asm__($quotes);} }
5284 EOF
5285     check_cc <<EOF && enable symver_gnu_asm
5286 __asm__(".symver ff_foo,av_foo@VERSION");
5287 void ff_foo(void) {}
5288 EOF
5289 fi
5290
5291 if [ -z "$optflags" ]; then
5292     if enabled small; then
5293         optflags=$cflags_size
5294     elif enabled optimizations; then
5295         optflags=$cflags_speed
5296     else
5297         optflags=$cflags_noopt
5298     fi
5299 fi
5300
5301 check_optflags(){
5302     check_cflags "$@"
5303     enabled lto && check_ldflags "$@"
5304 }
5305
5306
5307 if enabled lto; then
5308     test "$cc_type" != "$ld_type" && die "LTO requires same compiler and linker"
5309     check_cflags  -flto
5310     check_ldflags -flto $cpuflags
5311     disable inline_asm_direct_symbol_refs
5312 fi
5313
5314 check_optflags $optflags
5315 check_optflags -fno-math-errno
5316 check_optflags -fno-signed-zeros
5317
5318 enabled ftrapv && check_cflags -ftrapv
5319
5320 check_cc -mno-red-zone <<EOF && noredzone_flags="-mno-red-zone"
5321 int x;
5322 EOF
5323
5324
5325 if enabled icc; then
5326     # Just warnings, no remarks
5327     check_cflags -w1
5328     # -wd: Disable following warnings
5329     # 144, 167, 556: -Wno-pointer-sign
5330     # 188: enumerated type mixed with another type
5331     # 1292: attribute "foo" ignored
5332     # 1419: external declaration in primary source file
5333     # 10006: ignoring unknown option -fno-signed-zeros
5334     # 10148: ignoring unknown option -Wno-parentheses
5335     # 10156: ignoring option '-W'; no argument required
5336     # 13200: No EMMS instruction before call to function
5337     # 13203: No EMMS instruction before return from function
5338     check_cflags -wd144,167,188,556,1292,1419,10006,10148,10156,13200,13203
5339     # 11030: Warning unknown option --as-needed
5340     # 10156: ignoring option '-export'; no argument required
5341     check_ldflags -wd10156,11030
5342     # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
5343     enable ebp_available
5344     # The test above does not test linking
5345     enabled lto && disable symver_asm_label
5346     if enabled x86_32; then
5347         icc_version=$($cc -dumpversion)
5348         test ${icc_version%%.*} -ge 11 &&
5349             check_cflags -falign-stack=maintain-16-byte ||
5350             disable aligned_stack
5351     fi
5352 elif enabled ccc; then
5353     # disable some annoying warnings
5354     add_cflags -msg_disable bitnotint
5355     add_cflags -msg_disable mixfuncvoid
5356     add_cflags -msg_disable nonstandcast
5357     add_cflags -msg_disable unsupieee
5358 elif enabled gcc; then
5359     check_optflags -fno-tree-vectorize
5360     check_cflags -Werror=format-security
5361     check_cflags -Werror=implicit-function-declaration
5362     check_cflags -Werror=missing-prototypes
5363     check_cflags -Werror=return-type
5364     check_cflags -Werror=vla
5365     check_cflags -Wformat
5366     check_cflags -fdiagnostics-color=auto
5367     enabled extra_warnings || check_disable_warning -Wno-maybe-uninitialized
5368 elif enabled llvm_gcc; then
5369     check_cflags -mllvm -stack-alignment=16
5370 elif enabled clang; then
5371     check_cflags -mllvm -stack-alignment=16
5372     check_cflags -Qunused-arguments
5373     check_cflags -Werror=implicit-function-declaration
5374     check_cflags -Werror=missing-prototypes
5375     check_cflags -Werror=return-type
5376 elif enabled cparser; then
5377     add_cflags -Wno-missing-variable-declarations
5378     add_cflags -Wno-empty-statement
5379 elif enabled armcc; then
5380     add_cflags -W${armcc_opt},--diag_suppress=4343 # hardfp compat
5381     add_cflags -W${armcc_opt},--diag_suppress=3036 # using . as system include dir
5382     # 2523: use of inline assembly is deprecated
5383     add_cflags -W${armcc_opt},--diag_suppress=2523
5384     add_cflags -W${armcc_opt},--diag_suppress=1207
5385     add_cflags -W${armcc_opt},--diag_suppress=1293 # assignment in condition
5386     add_cflags -W${armcc_opt},--diag_suppress=3343 # hardfp compat
5387     add_cflags -W${armcc_opt},--diag_suppress=167  # pointer sign
5388     add_cflags -W${armcc_opt},--diag_suppress=513  # pointer sign
5389 elif enabled tms470; then
5390     add_cflags -pds=824 -pds=837
5391     disable inline_asm
5392 elif enabled pathscale; then
5393     add_cflags -fstrict-overflow -OPT:wrap_around_unsafe_opt=OFF
5394 elif enabled_any msvc icl; then
5395     enabled x86_32 && disable aligned_stack
5396     enabled_all x86_32 debug && add_cflags -Oy-
5397     enabled debug && add_ldflags -debug
5398     enable pragma_deprecated
5399     if enabled icl; then
5400         # -Qansi-alias is basically -fstrict-aliasing, but does not work
5401         # (correctly) on icl 13.x.
5402         check_cpp_condition "windows.h" "__ICL < 1300 || __ICL >= 1400" &&
5403             add_cflags -Qansi-alias
5404         # Some inline asm is not compilable in debug
5405         if enabled debug; then
5406             disable ebp_available
5407             disable ebx_available
5408         fi
5409     fi
5410     # msvcrt10 x64 incorrectly enables log2, only msvcrt12 onwards actually has log2.
5411     check_cpp_condition crtversion.h "_VC_CRT_MAJOR_VERSION >= 12" || disable log2
5412 fi
5413
5414 case $as_type in
5415     clang)
5416         add_asflags -Qunused-arguments
5417     ;;
5418 esac
5419
5420 case $ld_type in
5421     clang)
5422         check_ldflags -Qunused-arguments
5423     ;;
5424 esac
5425
5426 case $target_os in
5427     osf1)
5428         enabled ccc && add_ldflags '-Wl,-expect_unresolved,*'
5429     ;;
5430     plan9)
5431         add_cppflags -Dmain=plan9_main
5432     ;;
5433 esac
5434
5435 enable frame_thread_encoder
5436
5437 enabled asm || { arch=c; disable $ARCH_LIST $ARCH_EXT_LIST; }
5438
5439 check_deps $CONFIG_LIST       \
5440            $CONFIG_EXTRA      \
5441            $HAVE_LIST         \
5442            $ALL_COMPONENTS    \
5443
5444 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"
5445
5446
5447 if test $target_os = "haiku"; then
5448     disable memalign
5449     disable posix_memalign
5450 fi
5451
5452 enabled_all dxva2 dxva2api_cobj CoTaskMemFree &&
5453     prepend ffmpeg_libs $($ldflags_filter "-lole32" "-luser32") &&
5454     enable dxva2_lib
5455
5456 ! enabled_any memalign posix_memalign aligned_malloc &&
5457     enabled simd_align_16 && enable memalign_hack
5458
5459 # add_dep lib dep
5460 # -> enable ${lib}_deps_${dep}
5461 # -> add $dep to ${lib}_deps only once
5462 add_dep() {
5463     lib=$1
5464     dep=$2
5465     enabled "${lib}_deps_${dep}" && return 0
5466     enable  "${lib}_deps_${dep}"
5467     prepend "${lib}_deps" $dep
5468 }
5469
5470 # merge deps lib components
5471 # merge all ${component}_deps into ${lib}_deps and ${lib}_deps_*
5472 merge_deps() {
5473     lib=$1
5474     shift
5475     for comp in $*; do
5476         enabled $comp || continue
5477         eval "dep=\"\$${comp}_deps\""
5478         for d in $dep; do
5479             add_dep $lib $d
5480         done
5481     done
5482 }
5483
5484 merge_deps libavfilter $FILTER_LIST
5485
5486 map 'enabled $v && intrinsics=${v#intrinsics_}' $INTRINSICS_LIST
5487
5488 for thread in $THREADS_LIST; do
5489     if enabled $thread; then
5490         test -n "$thread_type" &&
5491             die "ERROR: Only one thread type must be selected." ||
5492             thread_type="$thread"
5493     fi
5494 done
5495
5496 enabled zlib && add_cppflags -DZLIB_CONST
5497
5498 # conditional library dependencies, in linking order
5499 enabled amovie_filter       && prepend avfilter_deps "avformat avcodec"
5500 enabled aresample_filter    && prepend avfilter_deps "swresample"
5501 enabled asyncts_filter      && prepend avfilter_deps "avresample"
5502 enabled atempo_filter       && prepend avfilter_deps "avcodec"
5503 enabled ebur128_filter && enabled swresample && prepend avfilter_deps "swresample"
5504 enabled elbg_filter         && prepend avfilter_deps "avcodec"
5505 enabled fftfilt_filter      && prepend avfilter_deps "avcodec"
5506 enabled mcdeint_filter      && prepend avfilter_deps "avcodec"
5507 enabled movie_filter    && prepend avfilter_deps "avformat avcodec"
5508 enabled pan_filter          && prepend avfilter_deps "swresample"
5509 enabled pp_filter           && prepend avfilter_deps "postproc"
5510 enabled removelogo_filter   && prepend avfilter_deps "avformat avcodec swscale"
5511 enabled resample_filter && prepend avfilter_deps "avresample"
5512 enabled sab_filter          && prepend avfilter_deps "swscale"
5513 enabled scale_filter    && prepend avfilter_deps "swscale"
5514 enabled showspectrum_filter && prepend avfilter_deps "avcodec"
5515 enabled smartblur_filter    && prepend avfilter_deps "swscale"
5516 enabled subtitles_filter    && prepend avfilter_deps "avformat avcodec"
5517 enabled uspp_filter         && prepend avfilter_deps "avcodec"
5518
5519 enabled lavfi_indev         && prepend avdevice_deps "avfilter"
5520
5521 enabled opus_decoder    && prepend avcodec_deps "swresample"
5522
5523 expand_deps(){
5524     lib_deps=${1}_deps
5525     eval "deps=\$$lib_deps"
5526     append $lib_deps $(map 'eval echo \$${v}_deps' $deps)
5527     unique $lib_deps
5528 }
5529
5530 #we have to remove gpl from the deps here as some code assumes all lib deps are libs
5531 postproc_deps="$(filter_out 'gpl' $postproc_deps)"
5532
5533 map 'expand_deps $v' $LIBRARY_LIST
5534
5535 echo "install prefix            $prefix"
5536 echo "source path               $source_path"
5537 echo "C compiler                $cc"
5538 echo "C library                 $libc_type"
5539 if test "$host_cc" != "$cc"; then
5540     echo "host C compiler           $host_cc"
5541     echo "host C library            $host_libc_type"
5542 fi
5543 echo "ARCH                      $arch ($cpu)"
5544 if test "$build_suffix" != ""; then
5545     echo "build suffix              $build_suffix"
5546 fi
5547 if test "$progs_suffix" != ""; then
5548     echo "progs suffix              $progs_suffix"
5549 fi
5550 if test "$extra_version" != ""; then
5551     echo "version string suffix     $extra_version"
5552 fi
5553 echo "big-endian                ${bigendian-no}"
5554 echo "runtime cpu detection     ${runtime_cpudetect-no}"
5555 if enabled x86; then
5556     echo "${yasmexe}                      ${yasm-no}"
5557     echo "MMX enabled               ${mmx-no}"
5558     echo "MMXEXT enabled            ${mmxext-no}"
5559     echo "3DNow! enabled            ${amd3dnow-no}"
5560     echo "3DNow! extended enabled   ${amd3dnowext-no}"
5561     echo "SSE enabled               ${sse-no}"
5562     echo "SSSE3 enabled             ${ssse3-no}"
5563     echo "AVX enabled               ${avx-no}"
5564     echo "XOP enabled               ${xop-no}"
5565     echo "FMA3 enabled              ${fma3-no}"
5566     echo "FMA4 enabled              ${fma4-no}"
5567     echo "i686 features enabled     ${i686-no}"
5568     echo "CMOV is fast              ${fast_cmov-no}"
5569     echo "EBX available             ${ebx_available-no}"
5570     echo "EBP available             ${ebp_available-no}"
5571 fi
5572 if enabled aarch64; then
5573     echo "NEON enabled              ${neon-no}"
5574     echo "VFP enabled               ${vfp-no}"
5575 fi
5576 if enabled arm; then
5577     echo "ARMv5TE enabled           ${armv5te-no}"
5578     echo "ARMv6 enabled             ${armv6-no}"
5579     echo "ARMv6T2 enabled           ${armv6t2-no}"
5580     echo "VFP enabled               ${vfp-no}"
5581     echo "NEON enabled              ${neon-no}"
5582     echo "THUMB enabled             ${thumb-no}"
5583 fi
5584 if enabled mips; then
5585     echo "MIPS FPU enabled          ${mipsfpu-no}"
5586     echo "MIPS DSP R1 enabled       ${mipsdspr1-no}"
5587     echo "MIPS DSP R2 enabled       ${mipsdspr2-no}"
5588 fi
5589 if enabled ppc; then
5590     echo "AltiVec enabled           ${altivec-no}"
5591     echo "PPC 4xx optimizations     ${ppc4xx-no}"
5592     echo "PPC VSX optimizations     ${vsx-no}"
5593     echo "dcbzl available           ${dcbzl-no}"
5594 fi
5595 echo "debug symbols             ${debug-no}"
5596 echo "strip symbols             ${stripping-no}"
5597 echo "optimize for size         ${small-no}"
5598 echo "optimizations             ${optimizations-no}"
5599 echo "static                    ${static-no}"
5600 echo "shared                    ${shared-no}"
5601 echo "postprocessing support    ${postproc-no}"
5602 echo "new filter support        ${avfilter-no}"
5603 echo "network support           ${network-no}"
5604 echo "threading support         ${thread_type-no}"
5605 echo "safe bitstream reader     ${safe_bitstream_reader-no}"
5606 echo "SDL support               ${sdl-no}"
5607 echo "opencl enabled            ${opencl-no}"
5608 echo "texi2html enabled         ${texi2html-no}"
5609 echo "perl enabled              ${perl-no}"
5610 echo "pod2man enabled           ${pod2man-no}"
5611 echo "makeinfo enabled          ${makeinfo-no}"
5612 echo "makeinfo supports HTML    ${makeinfo_html-no}"
5613 test -n "$random_seed" &&
5614     echo "random seed               ${random_seed}"
5615 echo
5616
5617 echo "External libraries:"
5618 print_enabled '' $EXTERNAL_LIBRARY_LIST | print_3_columns
5619 echo
5620
5621 for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
5622     echo "Enabled ${type}s:"
5623     eval list=\$$(toupper $type)_LIST
5624     print_enabled '_*' $list | print_3_columns
5625     echo
5626 done
5627
5628 license="LGPL version 2.1 or later"
5629 if enabled nonfree; then
5630     license="nonfree and unredistributable"
5631 elif enabled gplv3; then
5632     license="GPL version 3 or later"
5633 elif enabled lgplv3; then
5634     license="LGPL version 3 or later"
5635 elif enabled gpl; then
5636     license="GPL version 2 or later"
5637 fi
5638
5639 echo "License: $license"
5640
5641 echo "Creating config.mak, config.h, and doc/config.texi..."
5642
5643 test -e Makefile || echo "include $source_path/Makefile" > Makefile
5644
5645 enabled stripping || strip="echo skipping strip"
5646
5647 config_files="$TMPH config.mak doc/config.texi"
5648
5649 cat > config.mak <<EOF
5650 # Automatically generated by configure - do not modify!
5651 ifndef FFMPEG_CONFIG_MAK
5652 FFMPEG_CONFIG_MAK=1
5653 FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION
5654 prefix=$prefix
5655 LIBDIR=\$(DESTDIR)$libdir
5656 SHLIBDIR=\$(DESTDIR)$shlibdir
5657 INCDIR=\$(DESTDIR)$incdir
5658 BINDIR=\$(DESTDIR)$bindir
5659 DATADIR=\$(DESTDIR)$datadir
5660 DOCDIR=\$(DESTDIR)$docdir
5661 MANDIR=\$(DESTDIR)$mandir
5662 SRC_PATH=$source_path
5663 ifndef MAIN_MAKEFILE
5664 SRC_PATH:=\$(SRC_PATH:.%=..%)
5665 endif
5666 CC_IDENT=$cc_ident
5667 ARCH=$arch
5668 INTRINSICS=$intrinsics
5669 CC=$cc
5670 CXX=$cxx
5671 AS=$as
5672 LD=$ld
5673 DEPCC=$dep_cc
5674 DEPCCFLAGS=$DEPCCFLAGS \$(CPPFLAGS)
5675 DEPAS=$as
5676 DEPASFLAGS=$DEPASFLAGS \$(CPPFLAGS)
5677 YASM=$yasmexe
5678 DEPYASM=$yasmexe
5679 AR=$ar
5680 ARFLAGS=$arflags
5681 AR_O=$ar_o
5682 RANLIB=$ranlib
5683 STRIP=$strip
5684 CP=cp -p
5685 LN_S=$ln_s
5686 CPPFLAGS=$CPPFLAGS
5687 CFLAGS=$CFLAGS
5688 CXXFLAGS=$CXXFLAGS
5689 ASFLAGS=$ASFLAGS
5690 AS_C=$AS_C
5691 AS_O=$AS_O
5692 CC_C=$CC_C
5693 CC_E=$CC_E
5694 CC_O=$CC_O
5695 CXX_C=$CXX_C
5696 CXX_O=$CXX_O
5697 LD_O=$LD_O
5698 LD_LIB=$LD_LIB
5699 LD_PATH=$LD_PATH
5700 DLLTOOL=$dlltool
5701 WINDRES=$windres
5702 DEPWINDRES=$dep_cc
5703 DOXYGEN=$doxygen
5704 LDFLAGS=$LDFLAGS
5705 LDEXEFLAGS=$LDEXEFLAGS
5706 SHFLAGS=$(echo $($ldflags_filter $SHFLAGS))
5707 ASMSTRIPFLAGS=$ASMSTRIPFLAGS
5708 YASMFLAGS=$YASMFLAGS
5709 BUILDSUF=$build_suffix
5710 PROGSSUF=$progs_suffix
5711 FULLNAME=$FULLNAME
5712 LIBPREF=$LIBPREF
5713 LIBSUF=$LIBSUF
5714 LIBNAME=$LIBNAME
5715 SLIBPREF=$SLIBPREF
5716 SLIBSUF=$SLIBSUF
5717 EXESUF=$EXESUF
5718 EXTRA_VERSION=$extra_version
5719 CCDEP=$CCDEP
5720 CXXDEP=$CXXDEP
5721 CCDEP_FLAGS=$CCDEP_FLAGS
5722 ASDEP=$ASDEP
5723 ASDEP_FLAGS=$ASDEP_FLAGS
5724 CC_DEPFLAGS=$CC_DEPFLAGS
5725 AS_DEPFLAGS=$AS_DEPFLAGS
5726 HOSTCC=$host_cc
5727 HOSTLD=$host_ld
5728 HOSTCFLAGS=$host_cflags
5729 HOSTCPPFLAGS=$host_cppflags
5730 HOSTEXESUF=$HOSTEXESUF
5731 HOSTLDFLAGS=$host_ldflags
5732 HOSTLIBS=$host_libs
5733 DEPHOSTCC=$host_cc
5734 DEPHOSTCCFLAGS=$DEPHOSTCCFLAGS \$(HOSTCCFLAGS)
5735 HOSTCCDEP=$HOSTCCDEP
5736 HOSTCCDEP_FLAGS=$HOSTCCDEP_FLAGS
5737 HOSTCC_DEPFLAGS=$HOSTCC_DEPFLAGS
5738 HOSTCC_C=$HOSTCC_C
5739 HOSTCC_O=$HOSTCC_O
5740 HOSTLD_O=$HOSTLD_O
5741 TARGET_EXEC=$target_exec $target_exec_args
5742 TARGET_PATH=$target_path
5743 TARGET_SAMPLES=${target_samples:-\$(SAMPLES)}
5744 CFLAGS-ffplay=$sdl_cflags
5745 ZLIB=$($ldflags_filter -lz)
5746 LIB_INSTALL_EXTRA_CMD=$LIB_INSTALL_EXTRA_CMD
5747 EXTRALIBS=$extralibs
5748 COMPAT_OBJS=$compat_objs
5749 EXEOBJS=$exeobjs
5750 INSTALL=$install
5751 LIBTARGET=${LIBTARGET}
5752 SLIBNAME=${SLIBNAME}
5753 SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}
5754 SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}
5755 SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}
5756 SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}
5757 SLIB_INSTALL_NAME=${SLIB_INSTALL_NAME}
5758 SLIB_INSTALL_LINKS=${SLIB_INSTALL_LINKS}
5759 SLIB_INSTALL_EXTRA_LIB=${SLIB_INSTALL_EXTRA_LIB}
5760 SLIB_INSTALL_EXTRA_SHLIB=${SLIB_INSTALL_EXTRA_SHLIB}
5761 SAMPLES:=${samples:-\$(FATE_SAMPLES)}
5762 NOREDZONE_FLAGS=$noredzone_flags
5763 EOF
5764
5765 get_version(){
5766     lcname=lib${1}
5767     name=$(toupper $lcname)
5768     file=$source_path/$lcname/version.h
5769     eval $(awk "/#define ${name}_VERSION_M/ { print \$2 \"=\" \$3 }" "$file")
5770     enabled raise_major && eval ${name}_VERSION_MAJOR=$((${name}_VERSION_MAJOR+100))
5771     eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
5772     eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
5773     eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
5774     eval echo "${lcname}_VERSION_MINOR=\$${name}_VERSION_MINOR" >> config.mak
5775 }
5776
5777 map 'get_version $v' $LIBRARY_LIST
5778
5779 map 'eval echo "${v}_FFLIBS=\$${v}_deps" >> config.mak' $LIBRARY_LIST
5780
5781 print_program_libs(){
5782     eval "program_libs=\$${1}_libs"
5783     eval echo "LIBS-${1}=${program_libs}" >> config.mak
5784 }
5785
5786 map 'print_program_libs $v' $PROGRAM_LIST
5787
5788 cat > $TMPH <<EOF
5789 /* Automatically generated by configure - do not modify! */
5790 #ifndef FFMPEG_CONFIG_H
5791 #define FFMPEG_CONFIG_H
5792 #define FFMPEG_CONFIGURATION "$(c_escape $FFMPEG_CONFIGURATION)"
5793 #define FFMPEG_LICENSE "$(c_escape $license)"
5794 #define CONFIG_THIS_YEAR 2015
5795 #define FFMPEG_DATADIR "$(eval c_escape $datadir)"
5796 #define AVCONV_DATADIR "$(eval c_escape $datadir)"
5797 #define CC_IDENT "$(c_escape ${cc_ident:-Unknown compiler})"
5798 #define av_restrict $_restrict
5799 #define EXTERN_PREFIX "${extern_prefix}"
5800 #define EXTERN_ASM ${extern_prefix}
5801 #define BUILDSUF "$build_suffix"
5802 #define SLIBSUF "$SLIBSUF"
5803 #define HAVE_MMX2 HAVE_MMXEXT
5804 #define SWS_MAX_FILTER_SIZE $sws_max_filter_size
5805 EOF
5806
5807 test -n "$assert_level" &&
5808     echo "#define ASSERT_LEVEL $assert_level" >>$TMPH
5809
5810 test -n "$malloc_prefix" &&
5811     echo "#define MALLOC_PREFIX $malloc_prefix" >>$TMPH
5812
5813 if enabled yasm; then
5814     append config_files $TMPASM
5815     printf '' >$TMPASM
5816 fi
5817
5818 enabled getenv || echo "#define getenv(x) NULL" >> $TMPH
5819
5820
5821 mkdir -p doc
5822 mkdir -p tests
5823 echo "@c auto-generated by configure" > doc/config.texi
5824
5825 print_config ARCH_   "$config_files" $ARCH_LIST
5826 print_config HAVE_   "$config_files" $HAVE_LIST
5827 print_config CONFIG_ "$config_files" $CONFIG_LIST       \
5828                                      $CONFIG_EXTRA      \
5829                                      $ALL_COMPONENTS    \
5830
5831 echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
5832 echo "endif # FFMPEG_CONFIG_MAK" >> config.mak
5833
5834 # Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
5835 cp_if_changed $TMPH config.h
5836 touch .config
5837
5838 enabled yasm && cp_if_changed $TMPASM config.asm
5839
5840 cat > $TMPH <<EOF
5841 /* Generated by ffconf */
5842 #ifndef AVUTIL_AVCONFIG_H
5843 #define AVUTIL_AVCONFIG_H
5844 EOF
5845
5846 print_config AV_HAVE_ $TMPH $HAVE_LIST_PUB
5847
5848 echo "#endif /* AVUTIL_AVCONFIG_H */" >> $TMPH
5849
5850 cp_if_changed $TMPH libavutil/avconfig.h
5851
5852 if test -n "$WARNINGS"; then
5853     printf "\n$WARNINGS"
5854     enabled fatal_warnings && exit 1
5855 fi
5856
5857 # build pkg-config files
5858
5859 lib_version(){
5860     eval printf "\"lib${1}${build_suffix} >= \$LIB$(toupper ${1})_VERSION, \""
5861 }
5862
5863 pkgconfig_generate(){
5864     name=$1
5865     shortname=${name#lib}${build_suffix}
5866     comment=$2
5867     version=$3
5868     libs=$4
5869     requires=$(map 'lib_version $v' $(eval echo \$${name#lib}_deps))
5870     requires=${requires%, }
5871     enabled ${name#lib} || return 0
5872     mkdir -p $name
5873     cat <<EOF > $name/$name${build_suffix}.pc
5874 prefix=$prefix
5875 exec_prefix=\${prefix}
5876 libdir=$libdir
5877 includedir=$incdir
5878
5879 Name: $name
5880 Description: $comment
5881 Version: $version
5882 Requires: $(enabled shared || echo $requires)
5883 Requires.private: $(enabled shared && echo $requires)
5884 Conflicts:
5885 Libs: -L\${libdir} $(enabled rpath && echo "-Wl,-rpath,\${libdir}") -l${shortname} $(enabled shared || echo $libs)
5886 Libs.private: $(enabled shared && echo $libs)
5887 Cflags: -I\${includedir}
5888 EOF
5889
5890 mkdir -p doc/examples/pc-uninstalled
5891 includedir=${source_path}
5892 [ "$includedir" = . ] && includedir="\${pcfiledir}/../../.."
5893     cat <<EOF > doc/examples/pc-uninstalled/$name.pc
5894 prefix=
5895 exec_prefix=
5896 libdir=\${pcfiledir}/../../../$name
5897 includedir=${includedir}
5898
5899 Name: $name
5900 Description: $comment
5901 Version: $version
5902 Requires: $requires
5903 Conflicts:
5904 Libs: -L\${libdir} -Wl,-rpath,\${libdir} -l${shortname} $(enabled shared || echo $libs)
5905 Cflags: -I\${includedir}
5906 EOF
5907 }
5908
5909 pkgconfig_generate libavutil     "FFmpeg utility library"               "$LIBAVUTIL_VERSION"     "$LIBRT $LIBM"
5910 pkgconfig_generate libavcodec    "FFmpeg codec library"                 "$LIBAVCODEC_VERSION"    "$extralibs"
5911 pkgconfig_generate libavformat   "FFmpeg container format library"      "$LIBAVFORMAT_VERSION"   "$extralibs"
5912 pkgconfig_generate libavdevice   "FFmpeg device handling library"       "$LIBAVDEVICE_VERSION"   "$extralibs"
5913 pkgconfig_generate libavfilter   "FFmpeg audio/video filtering library" "$LIBAVFILTER_VERSION"   "$extralibs"
5914 pkgconfig_generate libpostproc   "FFmpeg postprocessing library"        "$LIBPOSTPROC_VERSION"   ""
5915 pkgconfig_generate libavresample "Libav audio resampling library"       "$LIBAVRESAMPLE_VERSION" "$LIBM"
5916 pkgconfig_generate libswscale    "FFmpeg image rescaling library"       "$LIBSWSCALE_VERSION"    "$LIBM"
5917 pkgconfig_generate libswresample "FFmpeg audio resampling library"      "$LIBSWRESAMPLE_VERSION" "$LIBM"