]> git.sesse.net Git - ffmpeg/blob - configure
Merge commit '05bf3f54e6078716f6267df530bf1d474ca3d606'
[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         disable stripping
3600     elif $_cc 2>&1 | grep -q Microsoft; then
3601         _type=msvc
3602         _ident=$($_cc 2>&1 | head -n1)
3603         _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< 2>&1 | awk '\''/including/ { sub(/^.*file: */, ""); gsub(/\\/, "/"); if (!match($$0, / /)) print "$@:", $$0 }'\'' > $(@:.o=.d)'
3604         _DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -showIncludes -Zs'
3605         _cflags_speed="-O2"
3606         _cflags_size="-O1"
3607         if $_cc 2>&1 | grep -q Linker; then
3608             _ld_o='-out:$@'
3609         else
3610             _ld_o='-Fe$@'
3611         fi
3612         _cc_o='-Fo$@'
3613         _cc_e='-P -Fi$@'
3614         _flags_filter=msvc_flags
3615         _ld_lib='lib%.a'
3616         _ld_path='-libpath:'
3617         _flags='-nologo'
3618         _cflags='-D_USE_MATH_DEFINES -D_CRT_SECURE_NO_WARNINGS -Dinline=__inline -FIstdlib.h -Dstrtoll=_strtoi64'
3619         disable stripping
3620     elif $_cc --version 2>/dev/null | grep -q ^cparser; then
3621         _type=cparser
3622         _ident=$($_cc --version | head -n1)
3623         _depflags='-MMD'
3624         _cflags_speed='-O4'
3625         _cflags_size='-O2'
3626         _flags_filter=cparser_flags
3627     fi
3628
3629     eval ${pfx}_type=\$_type
3630     eval ${pfx}_ident=\$_ident
3631 }
3632
3633 set_ccvars(){
3634     eval ${1}_C=\${_cc_c-\${${1}_C}}
3635     eval ${1}_E=\${_cc_e-\${${1}_E}}
3636     eval ${1}_O=\${_cc_o-\${${1}_O}}
3637
3638     if [ -n "$_depflags" ]; then
3639         eval ${1}_DEPFLAGS=\$_depflags
3640     else
3641         eval ${1}DEP=\${_DEPCMD:-\$DEPCMD}
3642         eval ${1}DEP_FLAGS=\${_DEPFLAGS:-\$DEPFLAGS}
3643         eval DEP${1}FLAGS=\$_flags
3644     fi
3645 }
3646
3647 probe_cc cc "$cc"
3648 cflags_filter=$_flags_filter
3649 cflags_speed=$_cflags_speed
3650 cflags_size=$_cflags_size
3651 cflags_noopt=$_cflags_noopt
3652 add_cflags $_flags $_cflags
3653 cc_ldflags=$_ldflags
3654 set_ccvars CC
3655
3656 probe_cc hostcc "$host_cc"
3657 host_cflags_filter=$_flags_filter
3658 add_host_cflags  $_flags $_cflags
3659 set_ccvars HOSTCC
3660
3661 test -n "$cc_type" && enable $cc_type ||
3662     warn "Unknown C compiler $cc, unable to select optimal CFLAGS"
3663
3664 : ${as_default:=$cc}
3665 : ${dep_cc_default:=$cc}
3666 : ${ld_default:=$cc}
3667 : ${host_ld_default:=$host_cc}
3668 set_default ar as dep_cc ld host_ld windres
3669
3670 probe_cc as "$as"
3671 asflags_filter=$_flags_filter
3672 add_asflags $_flags $_cflags
3673 set_ccvars AS
3674
3675 probe_cc ld "$ld"
3676 ldflags_filter=$_flags_filter
3677 add_ldflags $_flags $_ldflags
3678 test "$cc_type" != "$ld_type" && add_ldflags $cc_ldflags
3679 LD_O=${_ld_o-$LD_O}
3680 LD_LIB=${_ld_lib-$LD_LIB}
3681 LD_PATH=${_ld_path-$LD_PATH}
3682
3683 probe_cc hostld "$host_ld"
3684 host_ldflags_filter=$_flags_filter
3685 add_host_ldflags $_flags $_ldflags
3686 HOSTLD_O=${_ld_o-$HOSTLD_O}
3687
3688 if [ -z "$CC_DEPFLAGS" ] && [ "$dep_cc" != "$cc" ]; then
3689     probe_cc depcc "$dep_cc"
3690     CCDEP=${_DEPCMD:-$DEPCMD}
3691     CCDEP_FLAGS=${_DEPFLAGS:=$DEPFLAGS}
3692     DEPCCFLAGS=$_flags
3693 fi
3694
3695 if $ar 2>&1 | grep -q Microsoft; then
3696     arflags="-nologo"
3697     ar_o='-out:$@'
3698 elif $ar 2>&1 | grep -q 'Texas Instruments'; then
3699     arflags="rq"
3700     ar_o='$@'
3701 elif $ar 2>&1 | grep -q 'Usage: ar.*-X.*any'; then
3702     arflags='-Xany -r -c'
3703     ar_o='$@'
3704 elif $ar 2>&1 | grep -q "\[D\] "; then
3705     arflags="rcD"
3706     ar_o='$@'
3707 else
3708     arflags="rc"
3709     ar_o='$@'
3710 fi
3711
3712 add_cflags $extra_cflags
3713 add_cxxflags $extra_cxxflags
3714 add_asflags $extra_cflags
3715
3716 if test -n "$sysroot"; then
3717     case "$cc_type" in
3718         gcc|llvm_gcc|clang)
3719             add_cppflags --sysroot="$sysroot"
3720             add_ldflags --sysroot="$sysroot"
3721 # On Darwin --sysroot may be ignored, -isysroot always affects headers and linking
3722             add_cppflags -isysroot "$sysroot"
3723             add_ldflags -isysroot "$sysroot"
3724         ;;
3725         tms470)
3726             add_cppflags -I"$sysinclude"
3727             add_ldflags  --sysroot="$sysroot"
3728         ;;
3729     esac
3730 fi
3731
3732 if test "$cpu" = host; then
3733     enabled cross_compile &&
3734         die "--cpu=host makes no sense when cross-compiling."
3735
3736     case "$cc_type" in
3737         gcc|llvm_gcc)
3738             check_native(){
3739                 $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
3740                 sed -n "/cc1.*$1=/{
3741                             s/.*$1=\\([^ ]*\\).*/\\1/
3742                             p
3743                             q
3744                         }" $TMPE
3745             }
3746             cpu=$(check_native -march || check_native -mcpu)
3747         ;;
3748     esac
3749
3750     test "${cpu:-host}" = host &&
3751         die "--cpu=host not supported with compiler $cc"
3752 fi
3753
3754 # Deal with common $arch aliases
3755 case "$arch" in
3756     aarch64|arm64)
3757         arch="aarch64"
3758     ;;
3759     arm*|iPad*|iPhone*)
3760         arch="arm"
3761     ;;
3762     mips*|IP*)
3763         arch="mips"
3764     ;;
3765     parisc*|hppa*)
3766         arch="parisc"
3767     ;;
3768     "Power Macintosh"|ppc*|powerpc*)
3769         arch="ppc"
3770     ;;
3771     s390|s390x)
3772         arch="s390"
3773     ;;
3774     sh4|sh)
3775         arch="sh4"
3776     ;;
3777     sun4u|sparc*)
3778         arch="sparc"
3779     ;;
3780     tilegx|tile-gx)
3781         arch="tilegx"
3782     ;;
3783     i[3-6]86*|i86pc|BePC|x86pc|x86_64|x86_32|amd64)
3784         arch="x86"
3785     ;;
3786 esac
3787
3788 is_in $arch $ARCH_LIST || warn "unknown architecture $arch"
3789 enable $arch
3790
3791 # Add processor-specific flags
3792 if enabled aarch64; then
3793
3794     case $cpu in
3795         armv*)
3796             cpuflags="-march=$cpu"
3797         ;;
3798         *)
3799             cpuflags="-mcpu=$cpu"
3800         ;;
3801     esac
3802
3803 elif enabled alpha; then
3804
3805     cpuflags="-mcpu=$cpu"
3806
3807 elif enabled arm; then
3808
3809     check_arm_arch() {
3810         check_cpp_condition stddef.h \
3811             "defined __ARM_ARCH_${1}__ || defined __TARGET_ARCH_${2:-$1}" \
3812             $cpuflags
3813     }
3814
3815     probe_arm_arch() {
3816         if   check_arm_arch 4;        then echo armv4;
3817         elif check_arm_arch 4T;       then echo armv4t;
3818         elif check_arm_arch 5;        then echo armv5;
3819         elif check_arm_arch 5E;       then echo armv5e;
3820         elif check_arm_arch 5T;       then echo armv5t;
3821         elif check_arm_arch 5TE;      then echo armv5te;
3822         elif check_arm_arch 5TEJ;     then echo armv5te;
3823         elif check_arm_arch 6;        then echo armv6;
3824         elif check_arm_arch 6J;       then echo armv6j;
3825         elif check_arm_arch 6K;       then echo armv6k;
3826         elif check_arm_arch 6Z;       then echo armv6z;
3827         elif check_arm_arch 6ZK;      then echo armv6zk;
3828         elif check_arm_arch 6T2;      then echo armv6t2;
3829         elif check_arm_arch 7;        then echo armv7;
3830         elif check_arm_arch 7A  7_A;  then echo armv7-a;
3831         elif check_arm_arch 7S;       then echo armv7-a;
3832         elif check_arm_arch 7R  7_R;  then echo armv7-r;
3833         elif check_arm_arch 7M  7_M;  then echo armv7-m;
3834         elif check_arm_arch 7EM 7E_M; then echo armv7-m;
3835         elif check_arm_arch 8A  8_A;  then echo armv8-a;
3836         fi
3837     }
3838
3839     [ "$cpu" = generic ] && cpu=$(probe_arm_arch)
3840
3841     case $cpu in
3842         armv*)
3843             cpuflags="-march=$cpu"
3844             subarch=$(echo $cpu | sed 's/[^a-z0-9]//g')
3845         ;;
3846         *)
3847             cpuflags="-mcpu=$cpu"
3848             case $cpu in
3849                 cortex-a*)                               subarch=armv7a  ;;
3850                 cortex-r*)                               subarch=armv7r  ;;
3851                 cortex-m*)                 enable thumb; subarch=armv7m  ;;
3852                 arm11*)                                  subarch=armv6   ;;
3853                 arm[79]*e*|arm9[24]6*|arm96*|arm102[26]) subarch=armv5te ;;
3854                 armv4*|arm7*|arm9[24]*)                  subarch=armv4   ;;
3855                 *)                             subarch=$(probe_arm_arch) ;;
3856             esac
3857         ;;
3858     esac
3859
3860     case "$subarch" in
3861         armv5t*)    enable fast_clz                ;;
3862         armv[6-8]*)
3863             enable fast_clz
3864             disabled fast_unaligned || enable fast_unaligned
3865             ;;
3866     esac
3867
3868 elif enabled avr32; then
3869
3870     case $cpu in
3871         ap7[02]0[0-2])
3872             subarch="avr32_ap"
3873             cpuflags="-mpart=$cpu"
3874         ;;
3875         ap)
3876             subarch="avr32_ap"
3877             cpuflags="-march=$cpu"
3878         ;;
3879         uc3[ab]*)
3880             subarch="avr32_uc"
3881             cpuflags="-mcpu=$cpu"
3882         ;;
3883         uc)
3884             subarch="avr32_uc"
3885             cpuflags="-march=$cpu"
3886         ;;
3887     esac
3888
3889 elif enabled bfin; then
3890
3891     cpuflags="-mcpu=$cpu"
3892
3893 elif enabled mips; then
3894
3895     cpuflags="-march=$cpu"
3896
3897     case $cpu in
3898         24kc)
3899             disable mips32r5
3900             disable mips64r6
3901             disable mipsfpu
3902             disable mipsdspr1
3903             disable mipsdspr2
3904             disable msa
3905         ;;
3906         24kf*)
3907             disable mips32r5
3908             disable mips64r6
3909             disable mipsdspr1
3910             disable mipsdspr2
3911             disable msa
3912         ;;
3913         24kec|34kc|1004kc)
3914             disable mips32r5
3915             disable mips64r6
3916             disable mipsfpu
3917             disable mipsdspr2
3918             disable msa
3919         ;;
3920         24kef*|34kf*|1004kf*)
3921             disable mips32r5
3922             disable mips64r6
3923             disable mipsdspr2
3924             disable msa
3925         ;;
3926         74kc)
3927             disable mips32r5
3928             disable mips64r6
3929             disable mipsfpu
3930             disable msa
3931         ;;
3932         74kf)
3933             disable mips32r5
3934             disable mips64r6
3935             disable msa
3936         ;;
3937         p5600)
3938             disable mips64r6
3939             disable mipsdspr1
3940             disable mipsdspr2
3941
3942             check_cflags "-mtune=p5600"
3943         ;;
3944         i6400)
3945             disable mips32r5
3946             disable mipsdspr1
3947             disable mipsdspr2
3948             disable mipsfpu
3949
3950             check_cflags "-mtune=i6400 -mabi=64"
3951             check_ldflags "-mabi=64"
3952         ;;
3953         loongson3*)
3954             disable mipsfpu
3955             disable mips32r2
3956             disable mips32r5
3957             disable mips64r6
3958             disable mipsdspr1
3959             disable mipsdspr2
3960             disable msa
3961             enable local_aligned_8 local_aligned_16
3962             enable simd_align_16
3963             enable fast_64bit
3964             enable fast_clz
3965             enable fast_cmov
3966             enable fast_unaligned
3967             disable aligned_stack
3968             cpuflags="-march=loongson3a -mhard-float"
3969         ;;
3970         generic)
3971             disable mips32r5
3972             disable mips64r6
3973             disable msa
3974         ;;
3975     esac
3976
3977 elif enabled ppc; then
3978
3979     disable ldbrx
3980
3981     case $(tolower $cpu) in
3982         601|ppc601|powerpc601)
3983             cpuflags="-mcpu=601"
3984             disable altivec
3985         ;;
3986         603*|ppc603*|powerpc603*)
3987             cpuflags="-mcpu=603"
3988             disable altivec
3989         ;;
3990         604*|ppc604*|powerpc604*)
3991             cpuflags="-mcpu=604"
3992             disable altivec
3993         ;;
3994         g3|75*|ppc75*|powerpc75*)
3995             cpuflags="-mcpu=750"
3996             disable altivec
3997         ;;
3998         g4|745*|ppc745*|powerpc745*)
3999             cpuflags="-mcpu=7450"
4000             disable vsx
4001         ;;
4002         74*|ppc74*|powerpc74*)
4003             cpuflags="-mcpu=7400"
4004             disable vsx
4005         ;;
4006         g5|970|ppc970|powerpc970)
4007             cpuflags="-mcpu=970"
4008             disable vsx
4009         ;;
4010         power[3-6]*)
4011             cpuflags="-mcpu=$cpu"
4012             disable vsx
4013         ;;
4014         power[7-8]*)
4015             cpuflags="-mcpu=$cpu"
4016         ;;
4017         cell)
4018             cpuflags="-mcpu=cell"
4019             enable ldbrx
4020             disable vsx
4021         ;;
4022         e500mc)
4023             cpuflags="-mcpu=e500mc"
4024             disable altivec
4025         ;;
4026         e500v2)
4027             cpuflags="-mcpu=8548 -mhard-float -mfloat-gprs=double"
4028             disable altivec
4029             disable dcbzl
4030         ;;
4031         e500)
4032             cpuflags="-mcpu=8540 -mhard-float"
4033             disable altivec
4034             disable dcbzl
4035         ;;
4036     esac
4037
4038 elif enabled sparc; then
4039
4040     case $cpu in
4041         cypress|f93[04]|tsc701|sparcl*|supersparc|hypersparc|niagara|v[789])
4042             cpuflags="-mcpu=$cpu"
4043         ;;
4044         ultrasparc*|niagara[234])
4045             cpuflags="-mcpu=$cpu"
4046         ;;
4047     esac
4048
4049 elif enabled x86; then
4050
4051     case $cpu in
4052         i[345]86|pentium)
4053             cpuflags="-march=$cpu"
4054             disable i686
4055             disable mmx
4056         ;;
4057         # targets that do NOT support nopl and conditional mov (cmov)
4058         pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
4059             cpuflags="-march=$cpu"
4060             disable i686
4061         ;;
4062         # targets that do support nopl and conditional mov (cmov)
4063         i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64*|k8*|opteron*|athlon-fx\
4064         |core*|atom|bonnell|nehalem|westmere|silvermont|sandybridge|ivybridge|haswell|broadwell|amdfam10|barcelona|b[dt]ver*)
4065             cpuflags="-march=$cpu"
4066             enable i686
4067             enable fast_cmov
4068         ;;
4069         # targets that do support conditional mov but on which it's slow
4070         pentium4|pentium4m|prescott|nocona)
4071             cpuflags="-march=$cpu"
4072             enable i686
4073             disable fast_cmov
4074         ;;
4075     esac
4076
4077 fi
4078
4079 if [ "$cpu" != generic ]; then
4080     add_cflags  $cpuflags
4081     add_asflags $cpuflags
4082 fi
4083
4084 # compiler sanity check
4085 check_exec <<EOF
4086 int main(void){ return 0; }
4087 EOF
4088 if test "$?" != 0; then
4089     echo "$cc is unable to create an executable file."
4090     if test -z "$cross_prefix" && ! enabled cross_compile ; then
4091         echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
4092         echo "Only do this if you know what cross compiling means."
4093     fi
4094     die "C compiler test failed."
4095 fi
4096
4097 add_cppflags -D_ISOC99_SOURCE
4098 add_cxxflags -D__STDC_CONSTANT_MACROS
4099 check_cflags -std=c99
4100 check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
4101 #include <stdlib.h>
4102 EOF
4103 check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
4104 #include <stdlib.h>
4105 EOF
4106
4107 add_host_cppflags -D_ISOC99_SOURCE
4108 check_host_cflags -std=c99
4109 check_host_cflags -Wall
4110 check_host_cflags -O3
4111
4112 check_64bit(){
4113     arch32=$1
4114     arch64=$2
4115     expr=$3
4116     check_code cc "" "int test[2*($expr) - 1]" &&
4117         subarch=$arch64 || subarch=$arch32
4118 }
4119
4120 case "$arch" in
4121     aarch64|alpha|ia64)
4122         spic=$shared
4123     ;;
4124     mips)
4125         check_64bit mips mips64 '_MIPS_SIM > 1'
4126         spic=$shared
4127     ;;
4128     parisc)
4129         check_64bit parisc parisc64 'sizeof(void *) > 4'
4130         spic=$shared
4131     ;;
4132     ppc)
4133         check_64bit ppc ppc64 'sizeof(void *) > 4'
4134         spic=$shared
4135     ;;
4136     s390)
4137         check_64bit s390 s390x 'sizeof(void *) > 4'
4138         spic=$shared
4139     ;;
4140     sparc)
4141         check_64bit sparc sparc64 'sizeof(void *) > 4'
4142         spic=$shared
4143     ;;
4144     x86)
4145         check_64bit x86_32 x86_64 'sizeof(void *) > 4'
4146         # Treat x32 as x64 for now. Note it also needs spic=$shared
4147         test "$subarch" = "x86_32" && check_cpp_condition stddef.h 'defined(__x86_64__)' &&
4148             subarch=x86_64
4149         if test "$subarch" = "x86_64"; then
4150             spic=$shared
4151         fi
4152     ;;
4153     ppc)
4154         check_cc <<EOF && subarch="ppc64"
4155         int test[(int)sizeof(char*) - 7];
4156 EOF
4157     ;;
4158 esac
4159
4160 enable $subarch
4161 enabled spic && enable_weak pic
4162
4163 # OS specific
4164 case $target_os in
4165     aix)
4166         SHFLAGS=-shared
4167         add_cppflags '-I\$(SRC_PATH)/compat/aix'
4168         enabled shared && add_ldflags -Wl,-brtl
4169         ;;
4170     android)
4171         disable symver
4172         enable section_data_rel_ro
4173         SLIB_INSTALL_NAME='$(SLIBNAME)'
4174         SLIB_INSTALL_LINKS=
4175         # soname not set on purpose
4176         SHFLAGS=-shared
4177         ;;
4178     haiku)
4179         prefix_default="/boot/common"
4180         network_extralibs="-lnetwork"
4181         host_libs=
4182         ;;
4183     sunos)
4184         SHFLAGS='-shared -Wl,-h,$$(@F)'
4185         enabled x86 && SHFLAGS="-mimpure-text $SHFLAGS"
4186         network_extralibs="-lsocket -lnsl"
4187         add_cppflags -D__EXTENSIONS__
4188         # When using suncc to build, the Solaris linker will mark
4189         # an executable with each instruction set encountered by
4190         # the Solaris assembler.  As our libraries contain their own
4191         # guards for processor-specific code, instead suppress
4192         # generation of the HWCAPS ELF section on Solaris x86 only.
4193         enabled_all suncc x86 &&
4194             echo "hwcap_1 = OVERRIDE;" > mapfile &&
4195             add_ldflags -Wl,-M,mapfile
4196         nm_default='nm -P -g'
4197         ;;
4198     netbsd)
4199         disable symver
4200         oss_indev_extralibs="-lossaudio"
4201         oss_outdev_extralibs="-lossaudio"
4202         enabled gcc || check_ldflags -Wl,-zmuldefs
4203         ;;
4204     openbsd|bitrig)
4205         disable symver
4206         SHFLAGS='-shared'
4207         SLIB_INSTALL_NAME='$(SLIBNAME).$(LIBMAJOR).$(LIBMINOR)'
4208         SLIB_INSTALL_LINKS=
4209         oss_indev_extralibs="-lossaudio"
4210         oss_outdev_extralibs="-lossaudio"
4211         ;;
4212     dragonfly)
4213         disable symver
4214         ;;
4215     freebsd)
4216         ;;
4217     bsd/os)
4218         add_extralibs -lpoll -lgnugetopt
4219         strip="strip -d"
4220         ;;
4221     darwin)
4222         enabled ppc && add_asflags -force_cpusubtype_ALL
4223         SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR)'
4224         enabled x86_32 && append SHFLAGS -Wl,-read_only_relocs,suppress
4225         strip="${strip} -x"
4226         add_ldflags -Wl,-dynamic,-search_paths_first
4227         SLIBSUF=".dylib"
4228         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
4229         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
4230         objformat="macho"
4231         enabled x86_64 && objformat="macho64"
4232         enabled_any pic shared x86_64 ||
4233             { check_cflags -mdynamic-no-pic && add_asflags -mdynamic-no-pic; }
4234         ;;
4235     mingw32*)
4236         if test $target_os = "mingw32ce"; then
4237             disable network
4238         else
4239             target_os=mingw32
4240         fi
4241         LIBTARGET=i386
4242         if enabled x86_64; then
4243             LIBTARGET="i386:x86-64"
4244         elif enabled arm; then
4245             LIBTARGET=arm-wince
4246         fi
4247         enabled shared && ! enabled small && check_cmd $windres --version && enable gnu_windres
4248         check_ldflags -Wl,--nxcompat
4249         check_ldflags -Wl,--dynamicbase
4250         enabled x86_32 && check_ldflags -Wl,--large-address-aware
4251         shlibdir_default="$bindir_default"
4252         SLIBPREF=""
4253         SLIBSUF=".dll"
4254         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
4255         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
4256         dlltool="${cross_prefix}dlltool"
4257         if check_cmd lib.exe -list; then
4258             SLIB_EXTRA_CMD=-'sed -e "s/ @[^ ]*//" $$(@:$(SLIBSUF)=.orig.def) > $$(@:$(SLIBSUF)=.def); lib.exe /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib)'
4259             if enabled x86_64; then
4260                 LIBTARGET=x64
4261             fi
4262         elif check_cmd $dlltool --version; then
4263             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)'
4264         fi
4265         SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
4266         SLIB_INSTALL_LINKS=
4267         SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
4268         SLIB_INSTALL_EXTRA_LIB='lib$(SLIBNAME:$(SLIBSUF)=.dll.a) $(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
4269         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'
4270         objformat="win32"
4271         ranlib=:
4272         enable dos_paths
4273         ;;
4274     win32|win64)
4275         disable symver
4276         if enabled shared; then
4277             # Link to the import library instead of the normal static library
4278             # for shared libs.
4279             LD_LIB='%.lib'
4280             # Cannot build both shared and static libs with MSVC or icl.
4281             disable static
4282         fi
4283         enabled x86_32 && check_ldflags -LARGEADDRESSAWARE
4284         shlibdir_default="$bindir_default"
4285         SLIBPREF=""
4286         SLIBSUF=".dll"
4287         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
4288         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
4289         SLIB_CREATE_DEF_CMD='$(SRC_PATH)/compat/windows/makedef $(SUBDIR)lib$(NAME).ver $(OBJS) > $$(@:$(SLIBSUF)=.def)'
4290         SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
4291         SLIB_INSTALL_LINKS=
4292         SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
4293         SLIB_INSTALL_EXTRA_LIB='$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
4294         SHFLAGS='-dll -def:$$(@:$(SLIBSUF)=.def) -implib:$(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib)'
4295         objformat="win32"
4296         ranlib=:
4297         enable dos_paths
4298         ;;
4299     cygwin*)
4300         target_os=cygwin
4301         shlibdir_default="$bindir_default"
4302         SLIBPREF="cyg"
4303         SLIBSUF=".dll"
4304         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
4305         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
4306         SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
4307         SLIB_INSTALL_LINKS=
4308         SLIB_INSTALL_EXTRA_LIB='lib$(FULLNAME).dll.a'
4309         SHFLAGS='-shared -Wl,--out-implib,$(SUBDIR)lib$(FULLNAME).dll.a'
4310         objformat="win32"
4311         enable dos_paths
4312         enabled shared && ! enabled small && check_cmd $windres --version && enable gnu_windres
4313         ;;
4314     *-dos|freedos|opendos)
4315         network_extralibs="-lsocket"
4316         objformat="coff"
4317         enable dos_paths
4318         add_cppflags -U__STRICT_ANSI__
4319         ;;
4320     linux)
4321         enable dv1394
4322         enable section_data_rel_ro
4323         ;;
4324     irix*)
4325         target_os=irix
4326         ranlib="echo ignoring ranlib"
4327         ;;
4328     os/2*)
4329         strip="lxlite -CS"
4330         ln_s="cp -f"
4331         objformat="aout"
4332         add_cppflags -D_GNU_SOURCE
4333         add_ldflags -Zomf -Zbin-files -Zargs-wild -Zmap
4334         SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
4335         LIBSUF="_s.a"
4336         SLIBPREF=""
4337         SLIBSUF=".dll"
4338         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
4339         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
4340         SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
4341             echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
4342             echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
4343             echo EXPORTS >> $(SUBDIR)$(NAME).def; \
4344             emxexp $(OBJS) >> $(SUBDIR)$(NAME).def'
4345         SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
4346             emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
4347         SLIB_INSTALL_EXTRA_LIB='$(LIBPREF)$(NAME)_dll.a $(LIBPREF)$(NAME)_dll.lib'
4348         enable dos_paths
4349         enable_weak os2threads
4350         ;;
4351     gnu/kfreebsd)
4352         add_cppflags -D_BSD_SOURCE
4353         ;;
4354     gnu)
4355         ;;
4356     qnx)
4357         add_cppflags -D_QNX_SOURCE
4358         network_extralibs="-lsocket"
4359         ;;
4360     symbian)
4361         SLIBSUF=".dll"
4362         enable dos_paths
4363         add_cflags --include=$sysinclude/gcce/gcce.h -fvisibility=default
4364         add_cppflags -D__GCCE__ -D__SYMBIAN32__ -DSYMBIAN_OE_POSIX_SIGNALS
4365         add_ldflags -Wl,--target1-abs,--no-undefined \
4366                     -Wl,-Ttext,0x80000,-Tdata,0x1000000 -shared \
4367                     -Wl,--entry=_E32Startup -Wl,-u,_E32Startup
4368         add_extralibs -l:eexe.lib -l:usrt2_2.lib -l:dfpaeabi.dso \
4369                       -l:drtaeabi.dso -l:scppnwdl.dso -lsupc++ -lgcc \
4370                       -l:libc.dso -l:libm.dso -l:euser.dso -l:libcrt0.lib
4371         ;;
4372     osf1)
4373         add_cppflags -D_OSF_SOURCE -D_POSIX_PII -D_REENTRANT
4374         ;;
4375     minix)
4376         ;;
4377     plan9)
4378         add_cppflags -D_C99_SNPRINTF_EXTENSION  \
4379                      -D_REENTRANT_SOURCE        \
4380                      -D_RESEARCH_SOURCE         \
4381                      -DFD_SETSIZE=96            \
4382                      -DHAVE_SOCK_OPTS
4383         add_compat strtod.o strtod=avpriv_strtod
4384         network_extralibs='-lbsd'
4385         exeobjs=compat/plan9/main.o
4386         disable ffserver
4387         cp_f='cp'
4388         ;;
4389     none)
4390         ;;
4391     *)
4392         die "Unknown OS '$target_os'."
4393         ;;
4394 esac
4395
4396 # determine libc flavour
4397
4398 probe_libc(){
4399     pfx=$1
4400     pfx_no_=${pfx%_}
4401     # uclibc defines __GLIBC__, so it needs to be checked before glibc.
4402     if check_${pfx}cpp_condition features.h "defined __UCLIBC__"; then
4403         eval ${pfx}libc_type=uclibc
4404         add_${pfx}cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
4405     elif check_${pfx}cpp_condition features.h "defined __GLIBC__"; then
4406         eval ${pfx}libc_type=glibc
4407         add_${pfx}cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
4408     # MinGW headers can be installed on Cygwin, so check for newlib first.
4409     elif check_${pfx}cpp_condition newlib.h "defined _NEWLIB_VERSION"; then
4410         eval ${pfx}libc_type=newlib
4411         add_${pfx}cppflags -U__STRICT_ANSI__
4412     # MinGW64 is backwards compatible with MinGW32, so check for it first.
4413     elif check_${pfx}cpp_condition _mingw.h "defined __MINGW64_VERSION_MAJOR"; then
4414         eval ${pfx}libc_type=mingw64
4415         if check_${pfx}cpp_condition _mingw.h "__MINGW64_VERSION_MAJOR < 3"; then
4416             add_compat msvcrt/snprintf.o
4417             add_cflags "-include $source_path/compat/msvcrt/snprintf.h"
4418         fi
4419         add_${pfx}cppflags -U__STRICT_ANSI__ -D__USE_MINGW_ANSI_STDIO=1
4420         eval test \$${pfx_no_}cc_type = "gcc" &&
4421             add_${pfx}cppflags -D__printf__=__gnu_printf__
4422     elif check_${pfx}cpp_condition _mingw.h "defined __MINGW_VERSION"  ||
4423          check_${pfx}cpp_condition _mingw.h "defined __MINGW32_VERSION"; then
4424         eval ${pfx}libc_type=mingw32
4425         check_${pfx}cpp_condition _mingw.h "__MINGW32_MAJOR_VERSION > 3 || \
4426             (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
4427             die "ERROR: MinGW32 runtime version must be >= 3.15."
4428         add_${pfx}cppflags -U__STRICT_ANSI__ -D__USE_MINGW_ANSI_STDIO=1
4429         eval test \$${pfx_no_}cc_type = "gcc" &&
4430             add_${pfx}cppflags -D__printf__=__gnu_printf__
4431     elif check_${pfx}cpp_condition crtversion.h "defined _VC_CRT_MAJOR_VERSION"; then
4432         eval ${pfx}libc_type=msvcrt
4433         if check_${pfx}cpp_condition crtversion.h "_VC_CRT_MAJOR_VERSION < 14"; then
4434             if [ "$pfx" = host_ ]; then
4435                 add_host_cppflags -Dsnprintf=_snprintf
4436             else
4437                 add_compat strtod.o strtod=avpriv_strtod
4438                 add_compat msvcrt/snprintf.o snprintf=avpriv_snprintf   \
4439                                              _snprintf=avpriv_snprintf  \
4440                                              vsnprintf=avpriv_vsnprintf
4441             fi
4442         fi
4443         # The MSVC 2010 headers (Win 7.0 SDK) set _WIN32_WINNT to
4444         # 0x601 by default unless something else is set by the user.
4445         # This can easily lead to us detecting functions only present
4446         # in such new versions and producing binaries requiring windows 7.0.
4447         # Therefore explicitly set the default to XP unless the user has
4448         # set something else on the command line.
4449         check_${pfx}cpp_condition stdlib.h "defined(_WIN32_WINNT)" ||
4450             add_${pfx}cppflags -D_WIN32_WINNT=0x0502
4451     elif check_${pfx}cpp_condition stddef.h "defined __KLIBC__"; then
4452         eval ${pfx}libc_type=klibc
4453     elif check_${pfx}cpp_condition sys/cdefs.h "defined __BIONIC__"; then
4454         eval ${pfx}libc_type=bionic
4455     elif check_${pfx}cpp_condition sys/brand.h "defined LABELED_BRAND_NAME"; then
4456         eval ${pfx}libc_type=solaris
4457         add_${pfx}cppflags -D__EXTENSIONS__ -D_XOPEN_SOURCE=600
4458     fi
4459     check_${pfx}cc <<EOF
4460 #include <time.h>
4461 void *v = localtime_r;
4462 EOF
4463 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
4464 #include <time.h>
4465 void *v = localtime_r;
4466 EOF
4467
4468 }
4469
4470 probe_libc
4471 test -n "$libc_type" && enable libc_$libc_type
4472 probe_libc host_
4473 test -n "$host_libc_type" && enable host_libc_$host_libc_type
4474
4475 case $libc_type in
4476     bionic)
4477         add_compat strtod.o strtod=avpriv_strtod
4478         ;;
4479 esac
4480
4481 # hacks for compiler/libc/os combinations
4482
4483 if enabled_all tms470 libc_glibc; then
4484     CPPFLAGS="-I${source_path}/compat/tms470 ${CPPFLAGS}"
4485     add_cppflags -D__USER_LABEL_PREFIX__=
4486     add_cppflags -D__builtin_memset=memset
4487     add_cppflags -D__gnuc_va_list=va_list -D_VA_LIST_DEFINED
4488     add_cflags   -pds=48    # incompatible redefinition of macro
4489 fi
4490
4491 if enabled_all ccc libc_glibc; then
4492     add_ldflags -Wl,-z,now  # calls to libots crash without this
4493 fi
4494
4495 check_compile_assert flt_lim "float.h limits.h" "DBL_MAX == (double)DBL_MAX" ||
4496     add_cppflags '-I\$(SRC_PATH)/compat/float'
4497
4498 esc(){
4499     echo "$*" | sed 's/%/%25/g;s/:/%3a/g'
4500 }
4501
4502 echo "config:$arch:$subarch:$cpu:$target_os:$(esc $cc_ident):$(esc $FFMPEG_CONFIGURATION)" >config.fate
4503
4504 check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable_weak pic
4505
4506 set_default libdir
4507 : ${shlibdir_default:="$libdir"}
4508 : ${pkgconfigdir_default:="$libdir/pkgconfig"}
4509
4510 set_default $PATHS_LIST
4511 set_default nm
4512
4513 # we need to build at least one lib type
4514 if ! enabled_any static shared; then
4515     cat <<EOF
4516 At least one library type must be built.
4517 Specify --enable-static to build the static libraries or --enable-shared to
4518 build the shared libraries as well. To only build the shared libraries specify
4519 --disable-static in addition to --enable-shared.
4520 EOF
4521     exit 1;
4522 fi
4523
4524 die_license_disabled() {
4525     enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
4526 }
4527
4528 die_license_disabled_gpl() {
4529     enabled $1 || { enabled $2 && die "$2 is incompatible with the gpl and --enable-$1 is not specified."; }
4530 }
4531
4532 die_license_disabled gpl frei0r
4533 die_license_disabled gpl libcdio
4534 die_license_disabled gpl libsmbclient
4535 die_license_disabled gpl libutvideo
4536 die_license_disabled gpl libvidstab
4537 die_license_disabled gpl libx264
4538 die_license_disabled gpl libx265
4539 die_license_disabled gpl libxavs
4540 die_license_disabled gpl libxvid
4541 die_license_disabled gpl libzvbi
4542 die_license_disabled gpl x11grab
4543
4544 die_license_disabled nonfree libaacplus
4545 die_license_disabled nonfree libfaac
4546 die_license_disabled nonfree nvenc
4547 enabled gpl && die_license_disabled_gpl nonfree libfdk_aac
4548 enabled gpl && die_license_disabled_gpl nonfree openssl
4549
4550 die_license_disabled version3 libopencore_amrnb
4551 die_license_disabled version3 libopencore_amrwb
4552 die_license_disabled version3 libsmbclient
4553 die_license_disabled version3 libvo_aacenc
4554 die_license_disabled version3 libvo_amrwbenc
4555
4556 enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
4557
4558 disabled optimizations || check_cflags -fomit-frame-pointer
4559
4560 enable_weak_pic() {
4561     disabled pic && return
4562     enable pic
4563     add_cppflags -DPIC
4564     case "$target_os" in
4565     mingw*|cygwin*)
4566         ;;
4567     *)
4568         add_cflags -fPIC
4569         ;;
4570     esac
4571     add_asflags  -fPIC
4572 }
4573
4574 enabled pic && enable_weak_pic
4575
4576 check_cc <<EOF || die "Symbol mangling check failed."
4577 int ff_extern;
4578 EOF
4579 sym=$($nm $TMPO | awk '/ff_extern/{ print substr($0, match($0, /[^ \t]*ff_extern/)) }')
4580 extern_prefix=${sym%%ff_extern*}
4581
4582 check_cc <<EOF && enable_weak inline_asm
4583 void foo(void) { __asm__ volatile ("" ::); }
4584 EOF
4585
4586 _restrict=
4587 for restrict_keyword in restrict __restrict__ __restrict; do
4588     check_cc <<EOF && _restrict=$restrict_keyword && break
4589 void foo(char * $restrict_keyword p);
4590 EOF
4591 done
4592
4593 check_cc <<EOF && enable pragma_deprecated
4594 void foo(void) { _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") }
4595 EOF
4596
4597 check_cc <<EOF && enable attribute_packed
4598 struct { int x; } __attribute__((packed)) x;
4599 EOF
4600
4601 check_cc <<EOF && enable attribute_may_alias
4602 union { int x; } __attribute__((may_alias)) x;
4603 EOF
4604
4605 check_cc <<EOF || die "endian test failed"
4606 unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
4607 EOF
4608 od -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
4609
4610 if ! enabled ppc64 || enabled bigendian; then
4611     disable vsx
4612 fi
4613
4614 check_gas() {
4615     log "check_gas using '$as' as AS"
4616     # :vararg is used on aarch64, arm and ppc altivec
4617     check_as <<EOF || return 1
4618 .macro m n, y:vararg=0
4619 \n: .int \y
4620 .endm
4621 m x
4622 EOF
4623     # .altmacro is only used in arm asm
4624     ! enabled arm || check_as <<EOF || return 1
4625 .altmacro
4626 EOF
4627     enable gnu_as
4628     return 0
4629 }
4630
4631 if enabled_any arm aarch64 || enabled_all ppc altivec && enabled asm; then
4632     nogas=:
4633     enabled_any arm aarch64 && nogas=die
4634     enabled_all ppc altivec && [ $target_os_default != aix ] && nogas=warn
4635     as_noop=-v
4636
4637     case $as_type in
4638         arm*) gaspp_as_type=armasm; as_noop=-h ;;
4639         gcc)  gaspp_as_type=gas ;;
4640         *)    gaspp_as_type=$as_type ;;
4641     esac
4642
4643     [ $target_os = "darwin" ] && gaspp_as_type="apple-$gaspp_as_type"
4644
4645     test "${as#*gas-preprocessor.pl}" != "$as" ||
4646     check_cmd gas-preprocessor.pl -arch $arch -as-type $gaspp_as_type -- ${as:=$cc} $as_noop &&
4647         gas="${gas:=gas-preprocessor.pl} -arch $arch -as-type $gaspp_as_type -- ${as:=$cc}"
4648
4649     if ! check_gas ; then
4650         as=${gas:=$as}
4651         check_gas || \
4652             $nogas "GNU assembler not found, install/update gas-preprocessor"
4653     fi
4654
4655     check_as <<EOF && enable as_func
4656 .func test
4657 .endfunc
4658 EOF
4659 fi
4660
4661 check_inline_asm inline_asm_labels '"1:\n"'
4662
4663 check_inline_asm inline_asm_nonlocal_labels '"Label:\n"'
4664
4665 if enabled aarch64; then
4666     enabled armv8 && check_insn armv8 'prfm   pldl1strm, [x0]'
4667     # internal assembler in clang 3.3 does not support this instruction
4668     enabled neon && check_insn neon 'ext   v0.8B, v0.8B, v1.8B, #1'
4669     enabled vfp  && check_insn vfp  'fmadd d0,    d0,    d1,    d2'
4670
4671     map 'enabled_any ${v}_external ${v}_inline || disable $v' $ARCH_EXT_LIST_ARM
4672
4673 elif enabled alpha; then
4674
4675     check_cflags -mieee
4676
4677 elif enabled arm; then
4678
4679     check_cpp_condition stddef.h "defined __thumb__" && check_cc <<EOF && enable_weak thumb
4680 float func(float a, float b){ return a+b; }
4681 EOF
4682
4683     enabled thumb && check_cflags -mthumb || check_cflags -marm
4684
4685     if     check_cpp_condition stddef.h "defined __ARM_PCS_VFP"; then
4686         enable vfp_args
4687     elif ! check_cpp_condition stddef.h "defined __ARM_PCS || defined __SOFTFP__"; then
4688         case "${cross_prefix:-$cc}" in
4689             *hardfloat*)         enable vfp_args;   fpabi=vfp ;;
4690             *) check_ld "cc" <<EOF && enable vfp_args && fpabi=vfp || fpabi=soft ;;
4691 __asm__ (".eabi_attribute 28, 1");
4692 int main(void) { return 0; }
4693 EOF
4694         esac
4695         warn "Compiler does not indicate floating-point ABI, guessing $fpabi."
4696     fi
4697
4698     enabled armv5te && check_insn armv5te 'qadd r0, r0, r0'
4699     enabled armv6   && check_insn armv6   'sadd16 r0, r0, r0'
4700     enabled armv6t2 && check_insn armv6t2 'movt r0, #0'
4701     enabled neon    && check_insn neon    'vadd.i16 q0, q0, q0'
4702     enabled vfp     && check_insn vfp     'fadds s0, s0, s0'
4703     enabled vfpv3   && check_insn vfpv3   'vmov.f32 s0, #1.0'
4704     enabled setend  && check_insn setend  'setend be'
4705
4706     [ $target_os = linux ] || [ $target_os = android ] ||
4707         map 'enabled_any ${v}_external ${v}_inline || disable $v' \
4708             $ARCH_EXT_LIST_ARM
4709
4710     check_inline_asm asm_mod_q '"add r0, %Q0, %R0" :: "r"((long long)0)'
4711
4712     check_as <<EOF && enable as_dn_directive
4713 ra .dn d0.i16
4714 .unreq ra
4715 EOF
4716
4717     # llvm's integrated assembler supports .object_arch from llvm 3.5
4718     [ "$objformat" = elf ] && check_as <<EOF && enable as_object_arch
4719 .object_arch armv4
4720 EOF
4721
4722     [ $target_os != win32 ] && enabled_all armv6t2 shared !pic && enable_weak_pic
4723
4724 elif enabled mips; then
4725
4726     # Enable minimum ISA based on selected options
4727     if enabled mips64 && (enabled mipsdspr1 || enabled mipsdspr2); then
4728         add_cflags "-mips64r2"
4729         add_asflags "-mips64r2"
4730     elif enabled mips64 && enabled mipsfpu && disabled loongson3; then
4731         add_cflags "-mips64"
4732         add_asflags "-mips64"
4733     elif enabled mipsdspr1 || enabled mipsdspr2; then
4734         add_cflags "-mips32r2 -mfp32"
4735         add_asflags "-mips32r2 -mfp32"
4736     elif enabled mips32r5 || enabled mips64r6; then
4737         check_cflags "-mfp64"
4738         check_ldflags "-mfp64"
4739     fi
4740
4741     enabled mips32r5  && check_cflags "-mips32r5 -msched-weight -mload-store-pairs -funroll-loops" &&
4742      check_ldflags "-mips32r5" &&
4743      check_inline_asm mips32r5  '"ulw $t0, ($t1)"'
4744     enabled mips64r6  && check_cflags "-mips64r6 -msched-weight -mload-store-pairs -funroll-loops" &&
4745      check_ldflags "-mips64r6" &&
4746      check_inline_asm mips64r6  '"aui $t0, $t1, 1"'
4747     enabled mipsdspr1 && add_cflags "-mdsp" && add_asflags "-mdsp" &&
4748      check_inline_asm mipsdspr1 '"addu.qb $t0, $t1, $t2"'
4749     enabled mipsdspr2 && add_cflags "-mdspr2" && add_asflags "-mdspr2" &&
4750      check_inline_asm mipsdspr2 '"absq_s.qb $t0, $t1"'
4751     enabled mipsfpu   && add_cflags "-mhard-float" && add_asflags "-mhard-float" &&
4752      check_inline_asm mipsfpu   '"madd.d $f0, $f2, $f4, $f6"'
4753     enabled msa       && check_cflags "-mmsa" && check_ldflags "-mmsa" &&
4754      check_inline_asm msa       '"addvi.b $w0, $w1, 1"'
4755     enabled loongson3 && check_inline_asm loongson3 '"gsldxc1 $f0, 0($2, $3)"'
4756
4757     enabled mips32r5 && add_asflags "-mips32r5 -mfp64"
4758     enabled mips64r6 && add_asflags "-mips64r6 -mfp64"
4759     enabled msa && add_asflags "-mmsa"
4760
4761 elif enabled parisc; then
4762
4763     if enabled gcc; then
4764         case $($cc -dumpversion) in
4765             4.[3-9].*) check_cflags -fno-optimize-sibling-calls ;;
4766         esac
4767     fi
4768
4769 elif enabled ppc; then
4770
4771     enable local_aligned_8 local_aligned_16 local_aligned_32
4772
4773     check_inline_asm dcbzl     '"dcbzl 0, %0" :: "r"(0)'
4774     check_inline_asm ibm_asm   '"add 0, 0, 0"'
4775     check_inline_asm ppc4xx    '"maclhw r10, r11, r12"'
4776     check_inline_asm xform_asm '"lwzx %1, %y0" :: "Z"(*(int*)0), "r"(0)'
4777
4778     # AltiVec flags: The FSF version of GCC differs from the Apple version
4779     if enabled altivec; then
4780         check_cflags -maltivec -mabi=altivec &&
4781         { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
4782         check_cflags -faltivec
4783
4784         # check if our compiler supports Motorola AltiVec C API
4785         check_cc <<EOF || disable altivec
4786 $inc_altivec_h
4787 int main(void) {
4788     vector signed int v1 = (vector signed int) { 0 };
4789     vector signed int v2 = (vector signed int) { 1 };
4790     v1 = vec_add(v1, v2);
4791     return 0;
4792 }
4793 EOF
4794
4795         enabled altivec || warn "Altivec disabled, possibly missing --cpu flag"
4796     fi
4797
4798     if enabled vsx; then
4799         check_cflags -mvsx &&
4800         check_builtin vec_vsx_ld "altivec.h" "__builtin_vec_vsx_ld" || disable vsx
4801     fi
4802
4803     if enabled power8; then
4804         check_cpp_condition "altivec.h" "defined(_ARCH_PWR8)" || disable power8
4805     fi
4806
4807 elif enabled x86; then
4808
4809     check_builtin rdtsc    intrin.h   "__rdtsc()"
4810     check_builtin mm_empty mmintrin.h "_mm_empty()"
4811
4812     enable local_aligned_8 local_aligned_16 local_aligned_32
4813
4814     # check whether EBP is available on x86
4815     # As 'i' is stored on the stack, this program will crash
4816     # if the base pointer is used to access it because the
4817     # base pointer is cleared in the inline assembly code.
4818     check_exec_crash <<EOF && enable ebp_available
4819 volatile int i=0;
4820 __asm__ volatile ("xorl %%ebp, %%ebp" ::: "%ebp");
4821 return i;
4822 EOF
4823
4824     # check whether EBX is available on x86
4825     check_inline_asm ebx_available '""::"b"(0)' &&
4826         check_inline_asm ebx_available '"":::"%ebx"'
4827
4828     # check whether xmm clobbers are supported
4829     check_inline_asm xmm_clobbers '"":::"%xmm0"'
4830
4831     check_inline_asm inline_asm_direct_symbol_refs '"movl '$extern_prefix'test, %eax"' ||
4832         check_inline_asm inline_asm_direct_symbol_refs '"movl '$extern_prefix'test(%rip), %eax"'
4833
4834     # check whether binutils is new enough to compile SSSE3/MMXEXT
4835     enabled ssse3  && check_inline_asm ssse3_inline  '"pabsw %xmm0, %xmm0"'
4836     enabled mmxext && check_inline_asm mmxext_inline '"pmaxub %mm0, %mm1"'
4837
4838     if ! disabled_any asm mmx yasm; then
4839         if check_cmd $yasmexe --version; then
4840             enabled x86_64 && yasm_extra="-m amd64"
4841             yasm_debug="-g dwarf2"
4842         elif check_cmd nasm -v; then
4843             yasmexe=nasm
4844             yasm_debug="-g -F dwarf"
4845             if enabled x86_64; then
4846                 case "$objformat" in
4847                     elf)   objformat=elf64 ;;
4848                     win32) objformat=win64 ;;
4849                 esac
4850             fi
4851         fi
4852
4853         YASMFLAGS="-f $objformat $yasm_extra"
4854         enabled pic               && append YASMFLAGS "-DPIC"
4855         test -n "$extern_prefix"  && append YASMFLAGS "-DPREFIX"
4856         case "$objformat" in
4857             elf*) enabled debug && append YASMFLAGS $yasm_debug ;;
4858         esac
4859
4860         check_yasm "movbe ecx, [5]" && enable yasm ||
4861             die "yasm/nasm not found or too old. Use --disable-yasm for a crippled build."
4862         check_yasm "vextracti128 xmm0, ymm0, 0"      || disable avx2_external
4863         check_yasm "vpmacsdd xmm0, xmm1, xmm2, xmm3" || disable xop_external
4864         check_yasm "vfmaddps ymm0, ymm1, ymm2, ymm3" || disable fma4_external
4865         check_yasm "CPU amdnop" || disable cpunop
4866     fi
4867
4868     case "$cpu" in
4869         athlon*|opteron*|k8*|pentium|pentium-mmx|prescott|nocona|atom|geode)
4870             disable fast_clz
4871         ;;
4872     esac
4873
4874 fi
4875
4876 check_code cc arm_neon.h "int16x8_t test = vdupq_n_s16(0)" && enable intrinsics_neon
4877
4878 check_ldflags -Wl,--as-needed
4879 check_ldflags -Wl,-z,noexecstack
4880
4881 if check_func dlopen; then
4882     ldl=
4883 elif check_func dlopen -ldl; then
4884     ldl=-ldl
4885 fi
4886
4887 frei0r_filter_extralibs='$ldl'
4888 frei0r_src_filter_extralibs='$ldl'
4889 ladspa_filter_extralibs='$ldl'
4890 nvenc_encoder_extralibs='$ldl'
4891
4892 if ! disabled network; then
4893     check_func getaddrinfo $network_extralibs
4894     check_func getservbyport $network_extralibs
4895     check_func inet_aton $network_extralibs
4896
4897     check_type netdb.h "struct addrinfo"
4898     check_type netinet/in.h "struct group_source_req" -D_BSD_SOURCE
4899     check_type netinet/in.h "struct ip_mreq_source" -D_BSD_SOURCE
4900     check_type netinet/in.h "struct ipv6_mreq" -D_DARWIN_C_SOURCE
4901     check_type poll.h "struct pollfd"
4902     check_type netinet/sctp.h "struct sctp_event_subscribe"
4903     check_struct "sys/types.h sys/socket.h" "struct sockaddr" sa_len
4904     check_type netinet/in.h "struct sockaddr_in6"
4905     check_type "sys/types.h sys/socket.h" "struct sockaddr_storage"
4906     check_type "sys/types.h sys/socket.h" socklen_t
4907
4908     # Prefer arpa/inet.h over winsock2
4909     if check_header arpa/inet.h ; then
4910         check_func closesocket
4911     elif check_header winsock2.h ; then
4912         check_func_headers winsock2.h closesocket -lws2 &&
4913             network_extralibs="-lws2" ||
4914         { check_func_headers winsock2.h closesocket -lws2_32 &&
4915             network_extralibs="-lws2_32"; } || disable winsock2_h network
4916         check_func_headers ws2tcpip.h getaddrinfo $network_extralibs
4917
4918         check_type ws2tcpip.h socklen_t
4919         check_type ws2tcpip.h "struct addrinfo"
4920         check_type ws2tcpip.h "struct group_source_req"
4921         check_type ws2tcpip.h "struct ip_mreq_source"
4922         check_type ws2tcpip.h "struct ipv6_mreq"
4923         check_type winsock2.h "struct pollfd"
4924         check_struct winsock2.h "struct sockaddr" sa_len
4925         check_type ws2tcpip.h "struct sockaddr_in6"
4926         check_type ws2tcpip.h "struct sockaddr_storage"
4927     else
4928         disable network
4929     fi
4930 fi
4931
4932 check_builtin atomic_cas_ptr atomic.h "void **ptr; void *oldval, *newval; atomic_cas_ptr(ptr, oldval, newval)"
4933 check_builtin atomic_compare_exchange "" "int *ptr, *oldval; int newval; __atomic_compare_exchange_n(ptr, oldval, newval, 0, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST)"
4934 check_builtin machine_rw_barrier mbarrier.h "__machine_rw_barrier()"
4935 check_builtin MemoryBarrier windows.h "MemoryBarrier()"
4936 check_builtin sarestart signal.h "SA_RESTART"
4937 check_builtin sync_val_compare_and_swap "" "int *ptr; int oldval, newval; __sync_val_compare_and_swap(ptr, oldval, newval)"
4938 check_builtin gmtime_r time.h "time_t *time; struct tm *tm; gmtime_r(time, tm)"
4939 check_builtin localtime_r time.h "time_t *time; struct tm *tm; localtime_r(time, tm)"
4940
4941 check_func_headers malloc.h _aligned_malloc     && enable aligned_malloc
4942 check_func  ${malloc_prefix}memalign            && enable memalign
4943 check_func  ${malloc_prefix}posix_memalign      && enable posix_memalign
4944
4945 check_func  access
4946 check_func_headers time.h clock_gettime || { check_func_headers time.h clock_gettime -lrt && add_extralibs -lrt && LIBRT="-lrt"; }
4947 check_func  fcntl
4948 check_func  fork
4949 check_func  gethrtime
4950 check_func  getopt
4951 check_func  getrusage
4952 check_func  gettimeofday
4953 check_func  isatty
4954 check_func  mach_absolute_time
4955 check_func  mkstemp
4956 check_func  mmap
4957 check_func  mprotect
4958 # Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
4959 check_func_headers time.h nanosleep || { check_func_headers time.h nanosleep -lrt && add_extralibs -lrt && LIBRT="-lrt"; }
4960 check_func  sched_getaffinity
4961 check_func  setrlimit
4962 check_struct "sys/stat.h" "struct stat" st_mtim.tv_nsec -D_BSD_SOURCE
4963 check_func  strerror_r
4964 check_func  sysconf
4965 check_func  sysctl
4966 check_func  usleep
4967
4968 check_func_headers conio.h kbhit
4969 check_func_headers io.h setmode
4970 check_func_headers lzo/lzo1x.h lzo1x_999_compress
4971 check_func_headers stdlib.h getenv
4972
4973 check_func_headers windows.h CoTaskMemFree -lole32
4974 check_func_headers windows.h GetProcessAffinityMask
4975 check_func_headers windows.h GetProcessTimes
4976 check_func_headers windows.h GetSystemTimeAsFileTime
4977 check_func_headers windows.h MapViewOfFile
4978 check_func_headers windows.h PeekNamedPipe
4979 check_func_headers windows.h SetConsoleTextAttribute
4980 check_func_headers windows.h Sleep
4981 check_func_headers windows.h VirtualAlloc
4982 check_struct windows.h "CONDITION_VARIABLE" Ptr
4983 check_func_headers glob.h glob
4984 enabled xlib &&
4985     check_func_headers "X11/Xlib.h X11/extensions/Xvlib.h" XvGetPortAttribute -lXv -lX11 -lXext
4986
4987 check_header direct.h
4988 check_header dlfcn.h
4989 check_header d3d11.h
4990 check_header dxva.h
4991 check_header dxva2api.h -D_WIN32_WINNT=0x0600
4992 check_header io.h
4993 check_header libcrystalhd/libcrystalhd_if.h
4994 check_header mach/mach_time.h
4995 check_header malloc.h
4996 check_header net/udplite.h
4997 check_header poll.h
4998 check_header sys/mman.h
4999 check_header sys/param.h
5000 check_header sys/resource.h
5001 check_header sys/select.h
5002 check_header sys/time.h
5003 check_header sys/un.h
5004 check_header termios.h
5005 check_header unistd.h
5006 check_header valgrind/valgrind.h
5007 check_header vdpau/vdpau.h
5008 check_header vdpau/vdpau_x11.h
5009 check_header VideoDecodeAcceleration/VDADecoder.h
5010 check_header windows.h
5011 check_header X11/extensions/XvMClib.h
5012 check_header asm/types.h
5013
5014 check_lib2 "windows.h shellapi.h" CommandLineToArgvW -lshell32
5015 check_lib2 "windows.h wincrypt.h" CryptGenRandom -ladvapi32
5016 check_lib2 "windows.h psapi.h" GetProcessMemoryInfo -lpsapi
5017
5018 check_struct "sys/time.h sys/resource.h" "struct rusage" ru_maxrss
5019
5020 check_type "windows.h dxva.h" "DXVA_PicParams_HEVC"
5021 check_type "windows.h d3d11.h" "ID3D11VideoDecoder"
5022 check_type "d3d9.h dxva2api.h" DXVA2_ConfigPictureDecode -D_WIN32_WINNT=0x0600
5023
5024 if ! disabled w32threads && ! enabled pthreads; then
5025     check_func_headers "windows.h process.h" _beginthreadex &&
5026         enable w32threads || disable w32threads
5027 fi
5028
5029 # check for some common methods of building with pthread support
5030 # do this before the optional library checks as some of them require pthreads
5031 if ! disabled pthreads && ! enabled w32threads && ! enabled os2threads; then
5032     enable pthreads
5033     if check_func pthread_join -pthread && check_func pthread_create -pthread; then
5034         add_cflags -pthread
5035         add_extralibs -pthread
5036     elif check_func pthread_join -pthreads && check_func pthread_create -pthreads; then
5037         add_cflags -pthreads
5038         add_extralibs -pthreads
5039     elif check_func pthread_join -ldl -pthread && check_func pthread_create -ldl -pthread; then
5040         add_cflags -ldl -pthread
5041         add_extralibs -ldl -pthread
5042     elif check_func pthread_join -lpthreadGC2 && check_func pthread_create -lpthreadGC2; then
5043         add_extralibs -lpthreadGC2
5044     elif check_lib pthread.h pthread_join -lpthread && check_lib pthread.h pthread_create -lpthread; then
5045         :
5046     elif ! check_func pthread_join && ! check_func pthread_create; then
5047         disable pthreads
5048     fi
5049     check_code cc "pthread.h" "static pthread_mutex_t atomic_lock = PTHREAD_MUTEX_INITIALIZER" || disable pthreads
5050 fi
5051
5052
5053 if enabled pthreads; then
5054   check_func pthread_cancel
5055 fi
5056
5057 disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
5058 disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
5059 disabled  lzma || check_lib2  lzma.h lzma_version_number -llzma || disable lzma
5060
5061 check_lib math.h sin -lm && LIBM="-lm"
5062 disabled crystalhd || check_lib libcrystalhd/libcrystalhd_if.h DtsCrystalHDVersion -lcrystalhd || disable crystalhd
5063
5064 atan2f_args=2
5065 ldexpf_args=2
5066 powf_args=2
5067
5068 for func in $MATH_FUNCS; do
5069     eval check_mathfunc $func \${${func}_args:-1}
5070 done
5071
5072 # these are off by default, so fail if requested and not available
5073 enabled avfoundation_indev && { check_header_oc AVFoundation/AVFoundation.h || disable avfoundation_indev; }
5074 enabled avfoundation_indev && { check_lib2 CoreGraphics/CoreGraphics.h CGGetActiveDisplayList -framework CoreGraphics ||
5075                                 check_lib2 ApplicationServices/ApplicationServices.h CGGetActiveDisplayList -framework ApplicationServices; }
5076 enabled avisynth          && { { check_lib2 "windows.h" LoadLibrary; } ||
5077                                { check_lib2 "dlfcn.h" dlopen -ldl; } ||
5078                                die "ERROR: LoadLibrary/dlopen not found for avisynth"; }
5079 enabled decklink          && { check_header DeckLinkAPI.h || die "ERROR: DeckLinkAPI.h header not found"; }
5080 enabled frei0r            && { check_header frei0r.h || die "ERROR: frei0r.h header not found"; }
5081 enabled gnutls            && require_pkg_config gnutls gnutls/gnutls.h gnutls_global_init
5082 enabled ladspa            && { check_header ladspa.h || die "ERROR: ladspa.h header not found"; }
5083 enabled libiec61883       && require libiec61883 libiec61883/iec61883.h iec61883_cmp_connect -lraw1394 -lavc1394 -lrom1394 -liec61883
5084 enabled libaacplus        && require "libaacplus >= 2.0.0" aacplus.h aacplusEncOpen -laacplus
5085 enabled libass            && require_pkg_config libass ass/ass.h ass_library_init
5086 enabled libbluray         && require_pkg_config libbluray libbluray/bluray.h bd_open
5087 enabled libbs2b           && require_pkg_config libbs2b bs2b.h bs2b_open
5088 enabled libcelt           && require libcelt celt/celt.h celt_decode -lcelt0 &&
5089                              { check_lib celt/celt.h celt_decoder_create_custom -lcelt0 ||
5090                                die "ERROR: libcelt must be installed and version must be >= 0.11.0."; }
5091 enabled libcaca           && require_pkg_config caca caca.h caca_create_canvas
5092 enabled libdcadec         && require_pkg_config dcadec libdcadec/dca_context.h dcadec_context_create
5093 enabled libfaac           && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
5094 enabled libfdk_aac        && { use_pkg_config fdk-aac "fdk-aac/aacenc_lib.h" aacEncOpen ||
5095                                { require libfdk_aac fdk-aac/aacenc_lib.h aacEncOpen -lfdk-aac &&
5096                                  warn "using libfdk without pkg-config"; } }
5097 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"
5098 enabled libflite          && require2 libflite "flite/flite.h" flite_init $flite_libs
5099 enabled fontconfig        && enable libfontconfig
5100 enabled libfontconfig     && require_pkg_config fontconfig "fontconfig/fontconfig.h" FcInit
5101 enabled libfreetype       && require_libfreetype
5102 enabled libfribidi        && require_pkg_config fribidi fribidi.h fribidi_version_info
5103 enabled libgme            && require  libgme gme/gme.h gme_new_emu -lgme -lstdc++
5104 enabled libgsm            && { for gsm_hdr in "gsm.h" "gsm/gsm.h"; do
5105                                    check_lib "${gsm_hdr}" gsm_create -lgsm && break;
5106                                done || die "ERROR: libgsm not found"; }
5107 enabled libilbc           && require libilbc ilbc.h WebRtcIlbcfix_InitDecode -lilbc
5108 enabled libmfx            && require_pkg_config libmfx "mfx/mfxvideo.h" MFXInit
5109 enabled libmodplug        && require_pkg_config libmodplug libmodplug/modplug.h ModPlug_Load
5110 enabled libmp3lame        && require "libmp3lame >= 3.98.3" lame/lame.h lame_set_VBR_quality -lmp3lame
5111 enabled libnut            && require libnut libnut.h nut_demuxer_init -lnut
5112 enabled libopencore_amrnb && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb
5113 enabled libopencore_amrwb && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb
5114 enabled libopencv         && require_pkg_config opencv opencv/cxcore.h cvCreateImageHeader
5115 enabled libopenh264       && require_pkg_config openh264 wels/codec_api.h WelsGetCodecVersion
5116 enabled libopenjpeg       && { check_lib openjpeg.h opj_version -lopenmj2 -DOPJ_STATIC ||
5117                                check_lib openjpeg-1.5/openjpeg.h opj_version -lopenjpeg -DOPJ_STATIC ||
5118                                check_lib openjpeg.h opj_version -lopenjpeg -DOPJ_STATIC ||
5119                                die "ERROR: libopenjpeg not found"; }
5120 enabled libopus           && require_pkg_config opus opus_multistream.h opus_multistream_decoder_create
5121 enabled libpulse          && require_pkg_config libpulse pulse/pulseaudio.h pa_context_new
5122 enabled libquvi           && require_pkg_config libquvi quvi/quvi.h quvi_init
5123 enabled librtmp           && require_pkg_config librtmp librtmp/rtmp.h RTMP_Socket
5124 enabled libschroedinger   && require_pkg_config schroedinger-1.0 schroedinger/schro.h schro_init
5125 enabled libshine          && require_pkg_config shine shine/layer3.h shine_encode_buffer
5126 enabled libsmbclient      && { use_pkg_config smbclient libsmbclient.h smbc_init ||
5127                                require smbclient libsmbclient.h smbc_init -lsmbclient; }
5128 enabled libsoxr           && require libsoxr soxr.h soxr_create -lsoxr
5129 enabled libssh            && require_pkg_config libssh libssh/sftp.h sftp_init
5130 enabled libspeex          && require_pkg_config speex speex/speex.h speex_decoder_init -lspeex
5131 enabled libstagefright_h264 && require_cpp libstagefright_h264 "binder/ProcessState.h media/stagefright/MetaData.h
5132     media/stagefright/MediaBufferGroup.h media/stagefright/MediaDebug.h media/stagefright/MediaDefs.h
5133     media/stagefright/OMXClient.h media/stagefright/OMXCodec.h" android::OMXClient -lstagefright -lmedia -lutils -lbinder -lgnustl_static
5134 enabled libtheora         && require libtheora theora/theoraenc.h th_info_init -ltheoraenc -ltheoradec -logg
5135 enabled libtwolame        && require libtwolame twolame.h twolame_init -ltwolame &&
5136                              { check_lib twolame.h twolame_encode_buffer_float32_interleaved -ltwolame ||
5137                                die "ERROR: libtwolame must be installed and version must be >= 0.3.10"; }
5138 enabled libutvideo        && require_cpp utvideo "stdint.h stdlib.h utvideo/utvideo.h utvideo/Codec.h" 'CCodec*' -lutvideo -lstdc++
5139 enabled libv4l2           && require_pkg_config libv4l2 libv4l2.h v4l2_ioctl
5140 enabled libvidstab        && require_pkg_config "vidstab >= 0.98" vid.stab/libvidstab.h vsMotionDetectInit
5141 enabled libvo_aacenc      && require libvo_aacenc vo-aacenc/voAAC.h voGetAACEncAPI -lvo-aacenc
5142 enabled libvo_amrwbenc    && require libvo_amrwbenc vo-amrwbenc/enc_if.h E_IF_init -lvo-amrwbenc
5143 enabled libvorbis         && require libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
5144 enabled libvpx            && {
5145     enabled libvpx_vp8_decoder && { check_lib2 "vpx/vpx_decoder.h vpx/vp8dx.h" vpx_codec_dec_init_ver -lvpx ||
5146                                     die "ERROR: libvpx decoder version must be >=0.9.1"; }
5147     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 ||
5148                                     die "ERROR: libvpx encoder version must be >=0.9.7"; }
5149     enabled libvpx_vp9_decoder && { check_lib2 "vpx/vpx_decoder.h vpx/vp8dx.h" "vpx_codec_vp9_dx" -lvpx || disable libvpx_vp9_decoder; }
5150     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; } }
5151 enabled libwavpack        && require libwavpack wavpack/wavpack.h WavpackOpenFileOutput  -lwavpack
5152 enabled libwebp           && {
5153     enabled libwebp_encoder      && require_pkg_config "libwebp >= 0.2.0" webp/encode.h WebPGetEncoderVersion
5154     enabled libwebp_anim_encoder && { use_pkg_config "libwebpmux >= 0.4.0" webp/mux.h WebPAnimEncoderOptionsInit || disable libwebp_anim_encoder; } }
5155 enabled libx264           && { use_pkg_config x264 "stdint.h x264.h" x264_encoder_encode ||
5156                                { require libx264 x264.h x264_encoder_encode -lx264 &&
5157                                  warn "using libx264 without pkg-config"; } } &&
5158                              { check_cpp_condition x264.h "X264_BUILD >= 118" ||
5159                                die "ERROR: libx264 must be installed and version must be >= 0.118."; }
5160 enabled libx265           && require_pkg_config x265 x265.h x265_encoder_encode &&
5161                              { check_cpp_condition x265.h "X265_BUILD >= 57" ||
5162                                die "ERROR: libx265 version must be >= 57."; }
5163 enabled libxavs           && require libxavs xavs.h xavs_encoder_encode -lxavs
5164 enabled libxvid           && require libxvid xvid.h xvid_global -lxvidcore
5165 enabled libzmq            && require_pkg_config libzmq zmq.h zmq_ctx_new
5166 enabled libzvbi           && require libzvbi libzvbi.h vbi_decoder_new -lzvbi
5167 enabled mmal              && { check_lib interface/mmal/mmal.h mmal_port_connect -lmmal_core -lmmal_util -lmmal_vc_client -lbcm_host ||
5168                                 { ! enabled cross_compile && {
5169                                     add_cflags -isystem/opt/vc/include/ -isystem/opt/vc/include/interface/vmcs_host/linux -isystem/opt/vc/include/interface/vcos/pthreads -fgnu89-inline ;
5170                                     add_extralibs -L/opt/vc/lib/ -lmmal_core -lmmal_util -lmmal_vc_client -lbcm_host ;
5171                                     check_lib interface/mmal/mmal.h mmal_port_connect ; }
5172                                 check_lib interface/mmal/mmal.h mmal_port_connect ; } ||
5173                                die "ERROR: mmal not found"; }
5174 enabled nvenc             && { check_header nvEncodeAPI.h || die "ERROR: nvEncodeAPI.h not found."; } &&
5175                              { check_cpp_condition nvEncodeAPI.h "NVENCAPI_MAJOR_VERSION >= 5" ||
5176                                die "ERROR: NVENC API version 4 or older is not supported"; } &&
5177                              { [ $target_os != cygwin ] || die "ERROR: NVENC is not supported on Cygwin currently."; }
5178 enabled openal            && { { for al_libs in "${OPENAL_LIBS}" "-lopenal" "-lOpenAL32"; do
5179                                check_lib 'AL/al.h' alGetError "${al_libs}" && break; done } ||
5180                                die "ERROR: openal not found"; } &&
5181                              { check_cpp_condition "AL/al.h" "defined(AL_VERSION_1_1)" ||
5182                                die "ERROR: openal must be installed and version must be 1.1 or compatible"; }
5183 enabled opencl            && { check_lib2 OpenCL/cl.h clEnqueueNDRangeKernel -Wl,-framework,OpenCL ||
5184                                check_lib2 CL/cl.h clEnqueueNDRangeKernel -lOpenCL ||
5185                                die "ERROR: opencl not found"; } &&
5186                              { check_cpp_condition "OpenCL/cl.h" "defined(CL_VERSION_1_2)" ||
5187                                check_cpp_condition "CL/cl.h" "defined(CL_VERSION_1_2)" ||
5188                                die "ERROR: opencl must be installed and version must be 1.2 or compatible"; }
5189 enabled opengl            && { check_lib GL/glx.h glXGetProcAddress "-lGL" ||
5190                                check_lib2 windows.h wglGetProcAddress "-lopengl32 -lgdi32" ||
5191                                check_lib2 OpenGL/gl3.h glGetError "-Wl,-framework,OpenGL" ||
5192                                check_lib2 ES2/gl.h glGetError "-isysroot=${sysroot} -Wl,-framework,OpenGLES" ||
5193                                die "ERROR: opengl not found."
5194                              }
5195 enabled openssl           && { check_lib openssl/ssl.h SSL_library_init -lssl -lcrypto ||
5196                                check_lib openssl/ssl.h SSL_library_init -lssl32 -leay32 ||
5197                                check_lib openssl/ssl.h SSL_library_init -lssl -lcrypto -lws2_32 -lgdi32 ||
5198                                die "ERROR: openssl not found"; }
5199 enabled qtkit_indev      && { check_header_oc QTKit/QTKit.h || disable qtkit_indev; }
5200
5201 if enabled gnutls; then
5202     { check_lib2 gmp.h mpz_export -lgmp && enable gmp; } ||
5203     { check_lib gcrypt.h gcry_mpi_new -lgcrypt && enable gcrypt; }
5204 fi
5205
5206 # libdc1394 check
5207 if enabled libdc1394; then
5208     { require_pkg_config libdc1394-2 dc1394/dc1394.h dc1394_new &&
5209         enable libdc1394_2; } ||
5210     { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
5211         enable libdc1394_1; } ||
5212     die "ERROR: No version of libdc1394 found "
5213 fi
5214 if ! disabled sdl; then
5215     SDL_CONFIG="${cross_prefix}sdl-config"
5216     if check_pkg_config sdl SDL_events.h SDL_PollEvent; then
5217         check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
5218         check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) < 0x010300" $sdl_cflags &&
5219         enable sdl
5220     else
5221         if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
5222             sdl_cflags=$("${SDL_CONFIG}" --cflags)
5223             sdl_libs=$("${SDL_CONFIG}" --libs)
5224             check_func_headers SDL_version.h SDL_Linked_Version $sdl_cflags $sdl_libs &&
5225             check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
5226             check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) < 0x010300" $sdl_cflags &&
5227             enable sdl
5228         elif enabled sdl ; then
5229             die "ERROR: SDL not found"
5230         else
5231             disable sdl
5232         fi
5233     fi
5234 fi
5235 enabled sdl && add_cflags $sdl_cflags && add_extralibs $sdl_libs
5236
5237 disabled securetransport || { check_func SecIdentityCreate "-Wl,-framework,CoreFoundation -Wl,-framework,Security" &&
5238     check_lib2 "Security/SecureTransport.h Security/Security.h" "SSLCreateContext SecItemImport" "-Wl,-framework,CoreFoundation -Wl,-framework,Security" &&
5239     enable securetransport; }
5240
5241 makeinfo --version > /dev/null 2>&1 && enable makeinfo  || disable makeinfo
5242 enabled makeinfo \
5243     && [ 0$(makeinfo --version | grep "texinfo" | sed 's/.*texinfo[^0-9]*\([0-9]*\)\..*/\1/') -ge 5 ] \
5244     && enable makeinfo_html || disable makeinfo_html
5245 disabled makeinfo_html && texi2html --help 2> /dev/null | grep -q 'init-file' && enable texi2html || disable texi2html
5246 perl -v            > /dev/null 2>&1 && enable perl      || disable perl
5247 pod2man --help     > /dev/null 2>&1 && enable pod2man   || disable pod2man
5248 rsync --help 2> /dev/null | grep -q 'contimeout' && enable rsync_contimeout || disable rsync_contimeout
5249
5250 check_header linux/fb.h
5251 check_header linux/videodev.h
5252 check_header linux/videodev2.h
5253 check_code cc linux/videodev2.h "struct v4l2_frmsizeenum vfse; vfse.discrete.width = 0;" && enable_safe struct_v4l2_frmivalenum_discrete
5254
5255 check_header sys/videoio.h
5256 check_code cc sys/videoio.h "struct v4l2_frmsizeenum vfse; vfse.discrete.width = 0;" && enable_safe struct_v4l2_frmivalenum_discrete
5257
5258 check_func_headers "windows.h vfw.h" capCreateCaptureWindow "$vfwcap_indev_extralibs"
5259 # check that WM_CAP_DRIVER_CONNECT is defined to the proper value
5260 # w32api 3.12 had it defined wrong
5261 check_cpp_condition vfw.h "WM_CAP_DRIVER_CONNECT > WM_USER" && enable vfwcap_defines
5262
5263 check_type "dshow.h" IBaseFilter
5264
5265 # check for ioctl_meteor.h, ioctl_bt848.h and alternatives
5266 { check_header dev/bktr/ioctl_meteor.h &&
5267   check_header dev/bktr/ioctl_bt848.h; } ||
5268 { check_header machine/ioctl_meteor.h &&
5269   check_header machine/ioctl_bt848.h; } ||
5270 { check_header dev/video/meteor/ioctl_meteor.h &&
5271   check_header dev/video/bktr/ioctl_bt848.h; } ||
5272 check_header dev/ic/bt8xx.h
5273
5274 check_header sndio.h
5275 if check_struct sys/soundcard.h audio_buf_info bytes; then
5276     enable_safe sys/soundcard.h
5277 else
5278     check_cc -D__BSD_VISIBLE -D__XSI_VISIBLE <<EOF && add_cppflags -D__BSD_VISIBLE -D__XSI_VISIBLE && enable_safe sys/soundcard.h
5279     #include <sys/soundcard.h>
5280     audio_buf_info abc;
5281 EOF
5282 fi
5283 check_header soundcard.h
5284
5285 enabled_any alsa_indev alsa_outdev &&
5286     check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
5287
5288 enabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack && check_func sem_timedwait &&
5289     check_func jack_port_get_latency_range -ljack
5290
5291 enabled_any sndio_indev sndio_outdev && check_lib2 sndio.h sio_open -lsndio
5292
5293 if enabled libcdio; then
5294     check_lib2 "cdio/cdda.h cdio/paranoia.h" cdio_cddap_open -lcdio_paranoia -lcdio_cdda -lcdio ||
5295     check_lib2 "cdio/paranoia/cdda.h cdio/paranoia/paranoia.h" cdio_cddap_open -lcdio_paranoia -lcdio_cdda -lcdio ||
5296     die "ERROR: No usable libcdio/cdparanoia found"
5297 fi
5298
5299 enabled xlib &&
5300     check_lib X11/Xlib.h XOpenDisplay -lX11 || disable xlib
5301
5302 if ! disabled libxcb; then
5303     check_pkg_config "xcb >= 1.4" xcb/xcb.h xcb_connect || {
5304         enabled libxcb && die "ERROR: libxcb >= 1.4 not found";
5305     } && disable x11grab && enable libxcb
5306
5307 if enabled libxcb; then
5308     disabled libxcb_shm || {
5309         check_pkg_config xcb-shm xcb/shm.h xcb_shm_attach || {
5310             enabled libxcb_shm && die "ERROR: libxcb_shm not found";
5311         } && check_header sys/shm.h && enable libxcb_shm; }
5312
5313     disabled libxcb_xfixes || {
5314         check_pkg_config xcb-xfixes xcb/xfixes.h xcb_xfixes_get_cursor_image || {
5315             enabled libxcb_xfixes && die "ERROR: libxcb_xfixes not found";
5316         } && enable libxcb_xfixes; }
5317
5318     disabled libxcb_shape || {
5319         check_pkg_config xcb-shape xcb/shape.h xcb_shape_get_rectangles || {
5320             enabled libxcb_shape && die "ERROR: libxcb_shape not found";
5321         } && enable libxcb_shape; }
5322
5323     add_cflags $xcb_cflags $xcb_shm_cflags $xcb_xfixes_cflags $xcb_shape_cflags
5324     add_extralibs $xcb_libs $xcb_shm_libs $xcb_xfixes_libs $xcb_shape_libs
5325 fi
5326 fi
5327
5328 if enabled x11grab; then
5329     enabled xlib || die "ERROR: Xlib not found"
5330     require Xext X11/extensions/XShm.h XShmCreateImage -lXext
5331     require Xfixes X11/extensions/Xfixes.h XFixesGetCursorImage -lXfixes
5332 fi
5333
5334 check_func_headers "windows.h" CreateDIBSection "$gdigrab_indev_extralibs"
5335
5336 enabled dxva2api_h &&
5337     check_cc <<EOF && enable dxva2api_cobj
5338 #define _WIN32_WINNT 0x0600
5339 #define COBJMACROS
5340 #include <windows.h>
5341 #include <d3d9.h>
5342 #include <dxva2api.h>
5343 int main(void) { IDirectXVideoDecoder *o = NULL; IDirectXVideoDecoder_Release(o); return 0; }
5344 EOF
5345
5346 enabled vaapi &&
5347     check_lib va/va.h vaInitialize -lva ||
5348     disable vaapi
5349
5350 enabled vaapi && enabled xlib &&
5351     check_lib2 "va/va.h va/va_x11.h" vaGetDisplay -lva -lva-x11 &&
5352     enable vaapi_x11
5353
5354 enabled vdpau &&
5355     check_cpp_condition vdpau/vdpau.h "defined VDP_DECODER_PROFILE_MPEG4_PART2_ASP" ||
5356     disable vdpau
5357
5358 enabled vdpau && enabled xlib &&
5359     check_func_headers "vdpau/vdpau.h vdpau/vdpau_x11.h" vdp_device_create_x11 -lvdpau &&
5360     prepend ffmpeg_libs $($ldflags_filter "-lvdpau") &&
5361     enable vdpau_x11
5362
5363 # Funny iconv installations are not unusual, so check it after all flags have been set
5364 disabled iconv || check_func_headers iconv.h iconv || check_lib2 iconv.h iconv -liconv || disable iconv
5365
5366 enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel"
5367
5368 # add some useful compiler flags if supported
5369 check_cflags -Wdeclaration-after-statement
5370 check_cflags -Wall
5371 check_cflags -Wdisabled-optimization
5372 check_cflags -Wpointer-arith
5373 check_cflags -Wredundant-decls
5374 check_cflags -Wwrite-strings
5375 check_cflags -Wtype-limits
5376 check_cflags -Wundef
5377 check_cflags -Wmissing-prototypes
5378 check_cflags -Wno-pointer-to-int-cast
5379 check_cflags -Wstrict-prototypes
5380 check_cflags -Wempty-body
5381 enabled extra_warnings && check_cflags -Winline
5382
5383 check_disable_warning(){
5384     warning_flag=-W${1#-Wno-}
5385     test_cflags $warning_flag && add_cflags $1
5386 }
5387
5388 check_disable_warning -Wno-parentheses
5389 check_disable_warning -Wno-switch
5390 check_disable_warning -Wno-format-zero-length
5391 check_disable_warning -Wno-pointer-sign
5392
5393 # add some linker flags
5394 check_ldflags -Wl,--warn-common
5395 check_ldflags -Wl,-rpath-link=libpostproc:libswresample:libswscale:libavfilter:libavdevice:libavformat:libavcodec:libavutil:libavresample
5396 enabled rpath && add_ldexeflags -Wl,-rpath,$libdir
5397 test_ldflags -Wl,-Bsymbolic && append SHFLAGS -Wl,-Bsymbolic
5398
5399 # add some strip flags
5400 # -wN '..@*' is more selective than -x, but not available everywhere.
5401 check_stripflags -wN \'..@*\' || check_stripflags -x
5402
5403 enabled neon_clobber_test &&
5404     check_ldflags -Wl,--wrap,avcodec_open2              \
5405                   -Wl,--wrap,avcodec_decode_audio4      \
5406                   -Wl,--wrap,avcodec_decode_video2      \
5407                   -Wl,--wrap,avcodec_decode_subtitle2   \
5408                   -Wl,--wrap,avcodec_encode_audio2      \
5409                   -Wl,--wrap,avcodec_encode_video2      \
5410                   -Wl,--wrap,avcodec_encode_subtitle    \
5411                   -Wl,--wrap,swr_convert                \
5412                   -Wl,--wrap,avresample_convert ||
5413     disable neon_clobber_test
5414
5415 enabled xmm_clobber_test &&
5416     check_ldflags -Wl,--wrap,avcodec_open2              \
5417                   -Wl,--wrap,avcodec_decode_audio4      \
5418                   -Wl,--wrap,avcodec_decode_video2      \
5419                   -Wl,--wrap,avcodec_decode_subtitle2   \
5420                   -Wl,--wrap,avcodec_encode_audio2      \
5421                   -Wl,--wrap,avcodec_encode_video       \
5422                   -Wl,--wrap,avcodec_encode_video2      \
5423                   -Wl,--wrap,avcodec_encode_subtitle    \
5424                   -Wl,--wrap,swr_convert                \
5425                   -Wl,--wrap,avresample_convert         \
5426                   -Wl,--wrap,sws_scale ||
5427     disable xmm_clobber_test
5428
5429 echo "X{};" > $TMPV
5430 if test_ldflags -Wl,--version-script,$TMPV; then
5431     append SHFLAGS '-Wl,--version-script,\$(SUBDIR)lib\$(NAME).ver'
5432     check_cc <<EOF && enable symver_asm_label
5433 void ff_foo(void) __asm__ ("av_foo@VERSION");
5434 void ff_foo(void) { ${inline_asm+__asm__($quotes);} }
5435 EOF
5436     check_cc <<EOF && enable symver_gnu_asm
5437 __asm__(".symver ff_foo,av_foo@VERSION");
5438 void ff_foo(void) {}
5439 EOF
5440 fi
5441
5442 if [ -z "$optflags" ]; then
5443     if enabled small; then
5444         optflags=$cflags_size
5445     elif enabled optimizations; then
5446         optflags=$cflags_speed
5447     else
5448         optflags=$cflags_noopt
5449     fi
5450 fi
5451
5452 check_optflags(){
5453     check_cflags "$@"
5454     enabled lto && check_ldflags "$@"
5455 }
5456
5457
5458 if enabled lto; then
5459     test "$cc_type" != "$ld_type" && die "LTO requires same compiler and linker"
5460     check_cflags  -flto
5461     check_ldflags -flto $cpuflags
5462     disable inline_asm_direct_symbol_refs
5463 fi
5464
5465 check_optflags $optflags
5466 check_optflags -fno-math-errno
5467 check_optflags -fno-signed-zeros
5468
5469 enabled ftrapv && check_cflags -ftrapv
5470
5471 check_cc -mno-red-zone <<EOF && noredzone_flags="-mno-red-zone"
5472 int x;
5473 EOF
5474
5475
5476 if enabled icc; then
5477     # Just warnings, no remarks
5478     check_cflags -w1
5479     # -wd: Disable following warnings
5480     # 144, 167, 556: -Wno-pointer-sign
5481     # 188: enumerated type mixed with another type
5482     # 1292: attribute "foo" ignored
5483     # 1419: external declaration in primary source file
5484     # 10006: ignoring unknown option -fno-signed-zeros
5485     # 10148: ignoring unknown option -Wno-parentheses
5486     # 10156: ignoring option '-W'; no argument required
5487     # 13200: No EMMS instruction before call to function
5488     # 13203: No EMMS instruction before return from function
5489     check_cflags -wd144,167,188,556,1292,1419,10006,10148,10156,13200,13203
5490     # 11030: Warning unknown option --as-needed
5491     # 10156: ignoring option '-export'; no argument required
5492     check_ldflags -wd10156,11030
5493     # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
5494     enable ebp_available
5495     # The test above does not test linking
5496     enabled lto && disable symver_asm_label
5497     if enabled x86_32; then
5498         icc_version=$($cc -dumpversion)
5499         test ${icc_version%%.*} -ge 11 &&
5500             check_cflags -falign-stack=maintain-16-byte ||
5501             disable aligned_stack
5502     fi
5503 elif enabled ccc; then
5504     # disable some annoying warnings
5505     add_cflags -msg_disable bitnotint
5506     add_cflags -msg_disable mixfuncvoid
5507     add_cflags -msg_disable nonstandcast
5508     add_cflags -msg_disable unsupieee
5509 elif enabled gcc; then
5510     check_optflags -fno-tree-vectorize
5511     check_cflags -Werror=format-security
5512     check_cflags -Werror=implicit-function-declaration
5513     check_cflags -Werror=missing-prototypes
5514     check_cflags -Werror=return-type
5515     check_cflags -Werror=vla
5516     check_cflags -Wformat
5517     check_cflags -fdiagnostics-color=auto
5518     enabled extra_warnings || check_disable_warning -Wno-maybe-uninitialized
5519 elif enabled llvm_gcc; then
5520     check_cflags -mllvm -stack-alignment=16
5521 elif enabled clang; then
5522     check_cflags -mllvm -stack-alignment=16
5523     check_cflags -Qunused-arguments
5524     check_cflags -Werror=implicit-function-declaration
5525     check_cflags -Werror=missing-prototypes
5526     check_cflags -Werror=return-type
5527 elif enabled cparser; then
5528     add_cflags -Wno-missing-variable-declarations
5529     add_cflags -Wno-empty-statement
5530 elif enabled armcc; then
5531     add_cflags -W${armcc_opt},--diag_suppress=4343 # hardfp compat
5532     add_cflags -W${armcc_opt},--diag_suppress=3036 # using . as system include dir
5533     # 2523: use of inline assembly is deprecated
5534     add_cflags -W${armcc_opt},--diag_suppress=2523
5535     add_cflags -W${armcc_opt},--diag_suppress=1207
5536     add_cflags -W${armcc_opt},--diag_suppress=1293 # assignment in condition
5537     add_cflags -W${armcc_opt},--diag_suppress=3343 # hardfp compat
5538     add_cflags -W${armcc_opt},--diag_suppress=167  # pointer sign
5539     add_cflags -W${armcc_opt},--diag_suppress=513  # pointer sign
5540 elif enabled tms470; then
5541     add_cflags -pds=824 -pds=837
5542     disable inline_asm
5543 elif enabled pathscale; then
5544     add_cflags -fstrict-overflow -OPT:wrap_around_unsafe_opt=OFF
5545 elif enabled_any msvc icl; then
5546     enabled x86_32 && disable aligned_stack
5547     enabled_all x86_32 debug && add_cflags -Oy-
5548     enabled debug && add_ldflags -debug
5549     enable pragma_deprecated
5550     if enabled icl; then
5551         # -Qansi-alias is basically -fstrict-aliasing, but does not work
5552         # (correctly) on icl 13.x.
5553         check_cpp_condition "windows.h" "__ICL < 1300 || __ICL >= 1400" &&
5554             add_cflags -Qansi-alias
5555         # Some inline asm is not compilable in debug
5556         if enabled debug; then
5557             disable ebp_available
5558             disable ebx_available
5559         fi
5560     fi
5561     # msvcrt10 x64 incorrectly enables log2, only msvcrt12 (MSVC 2013) onwards actually has log2.
5562     check_cpp_condition crtversion.h "_VC_CRT_MAJOR_VERSION >= 12" || disable log2
5563 fi
5564
5565 case $as_type in
5566     clang)
5567         add_asflags -Qunused-arguments
5568     ;;
5569 esac
5570
5571 case $ld_type in
5572     clang)
5573         check_ldflags -Qunused-arguments
5574     ;;
5575 esac
5576
5577 case $target_os in
5578     osf1)
5579         enabled ccc && add_ldflags '-Wl,-expect_unresolved,*'
5580     ;;
5581     plan9)
5582         add_cppflags -Dmain=plan9_main
5583     ;;
5584 esac
5585
5586 enable frame_thread_encoder
5587
5588 enabled asm || { arch=c; disable $ARCH_LIST $ARCH_EXT_LIST; }
5589
5590 check_deps $CONFIG_LIST       \
5591            $CONFIG_EXTRA      \
5592            $HAVE_LIST         \
5593            $ALL_COMPONENTS    \
5594
5595 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"
5596
5597
5598 if test $target_os = "haiku"; then
5599     disable memalign
5600     disable posix_memalign
5601 fi
5602
5603 enabled_all dxva2 dxva2api_cobj CoTaskMemFree &&
5604     prepend ffmpeg_libs $($ldflags_filter "-lole32" "-luser32") &&
5605     enable dxva2_lib
5606
5607 ! enabled_any memalign posix_memalign aligned_malloc &&
5608     enabled simd_align_16 && enable memalign_hack
5609
5610 # add_dep lib dep
5611 # -> enable ${lib}_deps_${dep}
5612 # -> add $dep to ${lib}_deps only once
5613 add_dep() {
5614     lib=$1
5615     dep=$2
5616     enabled "${lib}_deps_${dep}" && return 0
5617     enable  "${lib}_deps_${dep}"
5618     prepend "${lib}_deps" $dep
5619 }
5620
5621 # merge deps lib components
5622 # merge all ${component}_deps into ${lib}_deps and ${lib}_deps_*
5623 merge_deps() {
5624     lib=$1
5625     shift
5626     for comp in $*; do
5627         enabled $comp || continue
5628         eval "dep=\"\$${comp}_deps\""
5629         for d in $dep; do
5630             add_dep $lib $d
5631         done
5632     done
5633 }
5634
5635 merge_deps libavfilter $FILTER_LIST
5636
5637 map 'enabled $v && intrinsics=${v#intrinsics_}' $INTRINSICS_LIST
5638
5639 for thread in $THREADS_LIST; do
5640     if enabled $thread; then
5641         test -n "$thread_type" &&
5642             die "ERROR: Only one thread type must be selected." ||
5643             thread_type="$thread"
5644     fi
5645 done
5646
5647 enabled zlib && add_cppflags -DZLIB_CONST
5648
5649 # conditional library dependencies, in linking order
5650 enabled amovie_filter       && prepend avfilter_deps "avformat avcodec"
5651 enabled aresample_filter    && prepend avfilter_deps "swresample"
5652 enabled asyncts_filter      && prepend avfilter_deps "avresample"
5653 enabled atempo_filter       && prepend avfilter_deps "avcodec"
5654 enabled cover_rect_filter   && prepend avfilter_deps "avformat avcodec"
5655 enabled ebur128_filter && enabled swresample && prepend avfilter_deps "swresample"
5656 enabled elbg_filter         && prepend avfilter_deps "avcodec"
5657 enabled fftfilt_filter      && prepend avfilter_deps "avcodec"
5658 enabled find_rect_filter    && prepend avfilter_deps "avformat avcodec"
5659 enabled mcdeint_filter      && prepend avfilter_deps "avcodec"
5660 enabled movie_filter    && prepend avfilter_deps "avformat avcodec"
5661 enabled pan_filter          && prepend avfilter_deps "swresample"
5662 enabled pp_filter           && prepend avfilter_deps "postproc"
5663 enabled removelogo_filter   && prepend avfilter_deps "avformat avcodec swscale"
5664 enabled resample_filter && prepend avfilter_deps "avresample"
5665 enabled sab_filter          && prepend avfilter_deps "swscale"
5666 enabled scale_filter    && prepend avfilter_deps "swscale"
5667 enabled showspectrum_filter && prepend avfilter_deps "avcodec"
5668 enabled smartblur_filter    && prepend avfilter_deps "swscale"
5669 enabled subtitles_filter    && prepend avfilter_deps "avformat avcodec"
5670 enabled uspp_filter         && prepend avfilter_deps "avcodec"
5671
5672 enabled lavfi_indev         && prepend avdevice_deps "avfilter"
5673
5674 enabled opus_decoder    && prepend avcodec_deps "swresample"
5675
5676 expand_deps(){
5677     lib_deps=${1}_deps
5678     eval "deps=\$$lib_deps"
5679     append $lib_deps $(map 'eval echo \$${v}_deps' $deps)
5680     unique $lib_deps
5681 }
5682
5683 #we have to remove gpl from the deps here as some code assumes all lib deps are libs
5684 postproc_deps="$(filter_out 'gpl' $postproc_deps)"
5685
5686 map 'expand_deps $v' $LIBRARY_LIST
5687
5688 echo "install prefix            $prefix"
5689 echo "source path               $source_path"
5690 echo "C compiler                $cc"
5691 echo "C library                 $libc_type"
5692 if test "$host_cc" != "$cc"; then
5693     echo "host C compiler           $host_cc"
5694     echo "host C library            $host_libc_type"
5695 fi
5696 echo "ARCH                      $arch ($cpu)"
5697 if test "$build_suffix" != ""; then
5698     echo "build suffix              $build_suffix"
5699 fi
5700 if test "$progs_suffix" != ""; then
5701     echo "progs suffix              $progs_suffix"
5702 fi
5703 if test "$extra_version" != ""; then
5704     echo "version string suffix     $extra_version"
5705 fi
5706 echo "big-endian                ${bigendian-no}"
5707 echo "runtime cpu detection     ${runtime_cpudetect-no}"
5708 if enabled x86; then
5709     echo "${yasmexe}                      ${yasm-no}"
5710     echo "MMX enabled               ${mmx-no}"
5711     echo "MMXEXT enabled            ${mmxext-no}"
5712     echo "3DNow! enabled            ${amd3dnow-no}"
5713     echo "3DNow! extended enabled   ${amd3dnowext-no}"
5714     echo "SSE enabled               ${sse-no}"
5715     echo "SSSE3 enabled             ${ssse3-no}"
5716     echo "AVX enabled               ${avx-no}"
5717     echo "XOP enabled               ${xop-no}"
5718     echo "FMA3 enabled              ${fma3-no}"
5719     echo "FMA4 enabled              ${fma4-no}"
5720     echo "i686 features enabled     ${i686-no}"
5721     echo "CMOV is fast              ${fast_cmov-no}"
5722     echo "EBX available             ${ebx_available-no}"
5723     echo "EBP available             ${ebp_available-no}"
5724 fi
5725 if enabled aarch64; then
5726     echo "NEON enabled              ${neon-no}"
5727     echo "VFP enabled               ${vfp-no}"
5728 fi
5729 if enabled arm; then
5730     echo "ARMv5TE enabled           ${armv5te-no}"
5731     echo "ARMv6 enabled             ${armv6-no}"
5732     echo "ARMv6T2 enabled           ${armv6t2-no}"
5733     echo "VFP enabled               ${vfp-no}"
5734     echo "NEON enabled              ${neon-no}"
5735     echo "THUMB enabled             ${thumb-no}"
5736 fi
5737 if enabled mips; then
5738     echo "MIPS FPU enabled          ${mipsfpu-no}"
5739     echo "MIPS32R5 enabled          ${mips32r5-no}"
5740     echo "MIPS64R6 enabled          ${mips64r6-no}"
5741     echo "MIPS DSP R1 enabled       ${mipsdspr1-no}"
5742     echo "MIPS DSP R2 enabled       ${mipsdspr2-no}"
5743     echo "MIPS MSA enabled          ${msa-no}"
5744     echo "LOONGSON3 enabled         ${loongson3-no}"
5745 fi
5746 if enabled ppc; then
5747     echo "AltiVec enabled           ${altivec-no}"
5748     echo "VSX enabled               ${vsx-no}"
5749     echo "POWER8 enabled            ${power8-no}"
5750     echo "PPC 4xx optimizations     ${ppc4xx-no}"
5751     echo "dcbzl available           ${dcbzl-no}"
5752 fi
5753 echo "debug symbols             ${debug-no}"
5754 echo "strip symbols             ${stripping-no}"
5755 echo "optimize for size         ${small-no}"
5756 echo "optimizations             ${optimizations-no}"
5757 echo "static                    ${static-no}"
5758 echo "shared                    ${shared-no}"
5759 echo "postprocessing support    ${postproc-no}"
5760 echo "new filter support        ${avfilter-no}"
5761 echo "network support           ${network-no}"
5762 echo "threading support         ${thread_type-no}"
5763 echo "safe bitstream reader     ${safe_bitstream_reader-no}"
5764 echo "SDL support               ${sdl-no}"
5765 echo "opencl enabled            ${opencl-no}"
5766 echo "texi2html enabled         ${texi2html-no}"
5767 echo "perl enabled              ${perl-no}"
5768 echo "pod2man enabled           ${pod2man-no}"
5769 echo "makeinfo enabled          ${makeinfo-no}"
5770 echo "makeinfo supports HTML    ${makeinfo_html-no}"
5771 test -n "$random_seed" &&
5772     echo "random seed               ${random_seed}"
5773 echo
5774
5775 echo "External libraries:"
5776 print_enabled '' $EXTERNAL_LIBRARY_LIST | print_3_columns
5777 echo
5778
5779 for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
5780     echo "Enabled ${type}s:"
5781     eval list=\$$(toupper $type)_LIST
5782     print_enabled '_*' $list | print_3_columns
5783     echo
5784 done
5785
5786 license="LGPL version 2.1 or later"
5787 if enabled nonfree; then
5788     license="nonfree and unredistributable"
5789 elif enabled gplv3; then
5790     license="GPL version 3 or later"
5791 elif enabled lgplv3; then
5792     license="LGPL version 3 or later"
5793 elif enabled gpl; then
5794     license="GPL version 2 or later"
5795 fi
5796
5797 echo "License: $license"
5798
5799 echo "Creating config.mak, config.h, and doc/config.texi..."
5800
5801 test -e Makefile || echo "include $source_path/Makefile" > Makefile
5802
5803 enabled stripping || strip="echo skipping strip"
5804
5805 config_files="$TMPH config.mak doc/config.texi"
5806
5807 cat > config.mak <<EOF
5808 # Automatically generated by configure - do not modify!
5809 ifndef FFMPEG_CONFIG_MAK
5810 FFMPEG_CONFIG_MAK=1
5811 FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION
5812 prefix=$prefix
5813 LIBDIR=\$(DESTDIR)$libdir
5814 SHLIBDIR=\$(DESTDIR)$shlibdir
5815 INCDIR=\$(DESTDIR)$incdir
5816 BINDIR=\$(DESTDIR)$bindir
5817 DATADIR=\$(DESTDIR)$datadir
5818 DOCDIR=\$(DESTDIR)$docdir
5819 MANDIR=\$(DESTDIR)$mandir
5820 PKGCONFIGDIR=\$(DESTDIR)$pkgconfigdir
5821 SRC_PATH=$source_path
5822 ifndef MAIN_MAKEFILE
5823 SRC_PATH:=\$(SRC_PATH:.%=..%)
5824 endif
5825 CC_IDENT=$cc_ident
5826 ARCH=$arch
5827 INTRINSICS=$intrinsics
5828 CC=$cc
5829 CXX=$cxx
5830 AS=$as
5831 LD=$ld
5832 DEPCC=$dep_cc
5833 DEPCCFLAGS=$DEPCCFLAGS \$(CPPFLAGS)
5834 DEPAS=$as
5835 DEPASFLAGS=$DEPASFLAGS \$(CPPFLAGS)
5836 YASM=$yasmexe
5837 DEPYASM=$yasmexe
5838 AR=$ar
5839 ARFLAGS=$arflags
5840 AR_O=$ar_o
5841 RANLIB=$ranlib
5842 STRIP=$strip
5843 CP=cp -p
5844 LN_S=$ln_s
5845 CPPFLAGS=$CPPFLAGS
5846 CFLAGS=$CFLAGS
5847 CXXFLAGS=$CXXFLAGS
5848 ASFLAGS=$ASFLAGS
5849 AS_C=$AS_C
5850 AS_O=$AS_O
5851 CC_C=$CC_C
5852 CC_E=$CC_E
5853 CC_O=$CC_O
5854 CXX_C=$CXX_C
5855 CXX_O=$CXX_O
5856 LD_O=$LD_O
5857 LD_LIB=$LD_LIB
5858 LD_PATH=$LD_PATH
5859 DLLTOOL=$dlltool
5860 WINDRES=$windres
5861 DEPWINDRES=$dep_cc
5862 DOXYGEN=$doxygen
5863 LDFLAGS=$LDFLAGS
5864 LDEXEFLAGS=$LDEXEFLAGS
5865 SHFLAGS=$(echo $($ldflags_filter $SHFLAGS))
5866 ASMSTRIPFLAGS=$ASMSTRIPFLAGS
5867 YASMFLAGS=$YASMFLAGS
5868 BUILDSUF=$build_suffix
5869 PROGSSUF=$progs_suffix
5870 FULLNAME=$FULLNAME
5871 LIBPREF=$LIBPREF
5872 LIBSUF=$LIBSUF
5873 LIBNAME=$LIBNAME
5874 SLIBPREF=$SLIBPREF
5875 SLIBSUF=$SLIBSUF
5876 EXESUF=$EXESUF
5877 EXTRA_VERSION=$extra_version
5878 CCDEP=$CCDEP
5879 CXXDEP=$CXXDEP
5880 CCDEP_FLAGS=$CCDEP_FLAGS
5881 ASDEP=$ASDEP
5882 ASDEP_FLAGS=$ASDEP_FLAGS
5883 CC_DEPFLAGS=$CC_DEPFLAGS
5884 AS_DEPFLAGS=$AS_DEPFLAGS
5885 HOSTCC=$host_cc
5886 HOSTLD=$host_ld
5887 HOSTCFLAGS=$host_cflags
5888 HOSTCPPFLAGS=$host_cppflags
5889 HOSTEXESUF=$HOSTEXESUF
5890 HOSTLDFLAGS=$host_ldflags
5891 HOSTLIBS=$host_libs
5892 DEPHOSTCC=$host_cc
5893 DEPHOSTCCFLAGS=$DEPHOSTCCFLAGS \$(HOSTCCFLAGS)
5894 HOSTCCDEP=$HOSTCCDEP
5895 HOSTCCDEP_FLAGS=$HOSTCCDEP_FLAGS
5896 HOSTCC_DEPFLAGS=$HOSTCC_DEPFLAGS
5897 HOSTCC_C=$HOSTCC_C
5898 HOSTCC_O=$HOSTCC_O
5899 HOSTLD_O=$HOSTLD_O
5900 TARGET_EXEC=$target_exec $target_exec_args
5901 TARGET_PATH=$target_path
5902 TARGET_SAMPLES=${target_samples:-\$(SAMPLES)}
5903 CFLAGS-ffplay=$sdl_cflags
5904 ZLIB=$($ldflags_filter -lz)
5905 LIB_INSTALL_EXTRA_CMD=$LIB_INSTALL_EXTRA_CMD
5906 EXTRALIBS=$extralibs
5907 COMPAT_OBJS=$compat_objs
5908 EXEOBJS=$exeobjs
5909 INSTALL=$install
5910 LIBTARGET=${LIBTARGET}
5911 SLIBNAME=${SLIBNAME}
5912 SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}
5913 SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}
5914 SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}
5915 SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}
5916 SLIB_INSTALL_NAME=${SLIB_INSTALL_NAME}
5917 SLIB_INSTALL_LINKS=${SLIB_INSTALL_LINKS}
5918 SLIB_INSTALL_EXTRA_LIB=${SLIB_INSTALL_EXTRA_LIB}
5919 SLIB_INSTALL_EXTRA_SHLIB=${SLIB_INSTALL_EXTRA_SHLIB}
5920 SAMPLES:=${samples:-\$(FATE_SAMPLES)}
5921 NOREDZONE_FLAGS=$noredzone_flags
5922 EOF
5923
5924 get_version(){
5925     lcname=lib${1}
5926     name=$(toupper $lcname)
5927     file=$source_path/$lcname/version.h
5928     eval $(awk "/#define ${name}_VERSION_M/ { print \$2 \"=\" \$3 }" "$file")
5929     enabled raise_major && eval ${name}_VERSION_MAJOR=$((${name}_VERSION_MAJOR+100))
5930     eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
5931     eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
5932     eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
5933     eval echo "${lcname}_VERSION_MINOR=\$${name}_VERSION_MINOR" >> config.mak
5934 }
5935
5936 map 'get_version $v' $LIBRARY_LIST
5937
5938 map 'eval echo "${v}_FFLIBS=\$${v}_deps" >> config.mak' $LIBRARY_LIST
5939
5940 print_program_libs(){
5941     eval "program_libs=\$${1}_libs"
5942     eval echo "LIBS-${1}=${program_libs}" >> config.mak
5943 }
5944
5945 map 'print_program_libs $v' $PROGRAM_LIST
5946
5947 cat > $TMPH <<EOF
5948 /* Automatically generated by configure - do not modify! */
5949 #ifndef FFMPEG_CONFIG_H
5950 #define FFMPEG_CONFIG_H
5951 #define FFMPEG_CONFIGURATION "$(c_escape $FFMPEG_CONFIGURATION)"
5952 #define FFMPEG_LICENSE "$(c_escape $license)"
5953 #define CONFIG_THIS_YEAR 2015
5954 #define FFMPEG_DATADIR "$(eval c_escape $datadir)"
5955 #define AVCONV_DATADIR "$(eval c_escape $datadir)"
5956 #define CC_IDENT "$(c_escape ${cc_ident:-Unknown compiler})"
5957 #define av_restrict $_restrict
5958 #define EXTERN_PREFIX "${extern_prefix}"
5959 #define EXTERN_ASM ${extern_prefix}
5960 #define BUILDSUF "$build_suffix"
5961 #define SLIBSUF "$SLIBSUF"
5962 #define HAVE_MMX2 HAVE_MMXEXT
5963 #define SWS_MAX_FILTER_SIZE $sws_max_filter_size
5964 EOF
5965
5966 test -n "$assert_level" &&
5967     echo "#define ASSERT_LEVEL $assert_level" >>$TMPH
5968
5969 test -n "$malloc_prefix" &&
5970     echo "#define MALLOC_PREFIX $malloc_prefix" >>$TMPH
5971
5972 if enabled yasm; then
5973     append config_files $TMPASM
5974     printf '' >$TMPASM
5975 fi
5976
5977 enabled getenv || echo "#define getenv(x) NULL" >> $TMPH
5978
5979
5980 mkdir -p doc
5981 mkdir -p tests
5982 echo "@c auto-generated by configure" > doc/config.texi
5983
5984 print_config ARCH_   "$config_files" $ARCH_LIST
5985 print_config HAVE_   "$config_files" $HAVE_LIST
5986 print_config CONFIG_ "$config_files" $CONFIG_LIST       \
5987                                      $CONFIG_EXTRA      \
5988                                      $ALL_COMPONENTS    \
5989
5990 echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
5991 echo "endif # FFMPEG_CONFIG_MAK" >> config.mak
5992
5993 # Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
5994 cp_if_changed $TMPH config.h
5995 touch .config
5996
5997 enabled yasm && cp_if_changed $TMPASM config.asm
5998
5999 cat > $TMPH <<EOF
6000 /* Generated by ffconf */
6001 #ifndef AVUTIL_AVCONFIG_H
6002 #define AVUTIL_AVCONFIG_H
6003 EOF
6004
6005 print_config AV_HAVE_ $TMPH $HAVE_LIST_PUB
6006
6007 echo "#endif /* AVUTIL_AVCONFIG_H */" >> $TMPH
6008
6009 cp_if_changed $TMPH libavutil/avconfig.h
6010
6011 if test -n "$WARNINGS"; then
6012     printf "\n$WARNINGS"
6013     enabled fatal_warnings && exit 1
6014 fi
6015
6016 # build pkg-config files
6017
6018 lib_version(){
6019     eval printf "\"lib${1}${build_suffix} >= \$LIB$(toupper ${1})_VERSION, \""
6020 }
6021
6022 pkgconfig_generate(){
6023     name=$1
6024     shortname=${name#lib}${build_suffix}
6025     comment=$2
6026     version=$3
6027     libs=$4
6028     requires=$(map 'lib_version $v' $(eval echo \$${name#lib}_deps))
6029     requires=${requires%, }
6030     enabled ${name#lib} || return 0
6031     mkdir -p $name
6032     cat <<EOF > $name/$name${build_suffix}.pc
6033 prefix=$prefix
6034 exec_prefix=\${prefix}
6035 libdir=$libdir
6036 includedir=$incdir
6037
6038 Name: $name
6039 Description: $comment
6040 Version: $version
6041 Requires: $(enabled shared || echo $requires)
6042 Requires.private: $(enabled shared && echo $requires)
6043 Conflicts:
6044 Libs: -L\${libdir} $(enabled rpath && echo "-Wl,-rpath,\${libdir}") -l${shortname} $(enabled shared || echo $libs)
6045 Libs.private: $(enabled shared && echo $libs)
6046 Cflags: -I\${includedir}
6047 EOF
6048
6049 mkdir -p doc/examples/pc-uninstalled
6050 includedir=${source_path}
6051 [ "$includedir" = . ] && includedir="\${pcfiledir}/../../.."
6052     cat <<EOF > doc/examples/pc-uninstalled/$name.pc
6053 prefix=
6054 exec_prefix=
6055 libdir=\${pcfiledir}/../../../$name
6056 includedir=${includedir}
6057
6058 Name: $name
6059 Description: $comment
6060 Version: $version
6061 Requires: $requires
6062 Conflicts:
6063 Libs: -L\${libdir} -Wl,-rpath,\${libdir} -l${shortname} $(enabled shared || echo $libs)
6064 Cflags: -I\${includedir}
6065 EOF
6066 }
6067
6068 pkgconfig_generate libavutil     "FFmpeg utility library"               "$LIBAVUTIL_VERSION"     "$LIBRT $LIBM"
6069 pkgconfig_generate libavcodec    "FFmpeg codec library"                 "$LIBAVCODEC_VERSION"    "$extralibs"
6070 pkgconfig_generate libavformat   "FFmpeg container format library"      "$LIBAVFORMAT_VERSION"   "$extralibs"
6071 pkgconfig_generate libavdevice   "FFmpeg device handling library"       "$LIBAVDEVICE_VERSION"   "$extralibs"
6072 pkgconfig_generate libavfilter   "FFmpeg audio/video filtering library" "$LIBAVFILTER_VERSION"   "$extralibs"
6073 pkgconfig_generate libpostproc   "FFmpeg postprocessing library"        "$LIBPOSTPROC_VERSION"   ""
6074 pkgconfig_generate libavresample "Libav audio resampling library"       "$LIBAVRESAMPLE_VERSION" "$LIBM"
6075 pkgconfig_generate libswscale    "FFmpeg image rescaling library"       "$LIBSWSCALE_VERSION"    "$LIBM"
6076 pkgconfig_generate libswresample "FFmpeg audio resampling library"      "$LIBSWRESAMPLE_VERSION" "$LIBM"