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