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