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