configure: loongson disable expensive optimizations in gcc O3 optimization
[ffmpeg.git] / 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-libkvazaar      enable HEVC encoding via libkvazaar [no]
226   --enable-libmfx          enable HW acceleration through libmfx
227   --enable-libmodplug      enable ModPlug via libmodplug [no]
228   --enable-libmp3lame      enable MP3 encoding via libmp3lame [no]
229   --enable-libnut          enable NUT (de)muxing via libnut,
230                            native (de)muxer exists [no]
231   --enable-libopencore-amrnb enable AMR-NB de/encoding via libopencore-amrnb [no]
232   --enable-libopencore-amrwb enable AMR-WB decoding via libopencore-amrwb [no]
233   --enable-libopencv       enable video filtering via libopencv [no]
234   --enable-libopenh264     enable H.264 encoding via OpenH264 [no]
235   --enable-libopenjpeg     enable JPEG 2000 de/encoding via OpenJPEG [no]
236   --enable-libopus         enable Opus de/encoding via libopus [no]
237   --enable-libpulse        enable Pulseaudio input via libpulse [no]
238   --enable-libquvi         enable quvi input via libquvi [no]
239   --enable-librtmp         enable RTMP[E] support via librtmp [no]
240   --enable-libschroedinger enable Dirac de/encoding via libschroedinger [no]
241   --enable-libshine        enable fixed-point MP3 encoding via libshine [no]
242   --enable-libsmbclient    enable Samba protocol via libsmbclient [no]
243   --enable-libsnappy       enable Snappy compression, needed for hap encoding [no]
244   --enable-libsoxr         enable Include libsoxr resampling [no]
245   --enable-libspeex        enable Speex de/encoding via libspeex [no]
246   --enable-libssh          enable SFTP protocol via libssh [no]
247   --enable-libstagefright-h264  enable H.264 decoding via libstagefright [no]
248   --enable-libtheora       enable Theora encoding via libtheora [no]
249   --enable-libtwolame      enable MP2 encoding via libtwolame [no]
250   --enable-libutvideo      enable Ut Video encoding and decoding via libutvideo [no]
251   --enable-libv4l2         enable libv4l2/v4l-utils [no]
252   --enable-libvidstab      enable video stabilization using vid.stab [no]
253   --enable-libvo-aacenc    enable AAC encoding via libvo-aacenc [no]
254   --enable-libvo-amrwbenc  enable AMR-WB encoding via libvo-amrwbenc [no]
255   --enable-libvorbis       enable Vorbis en/decoding via libvorbis,
256                            native implementation exists [no]
257   --enable-libvpx          enable VP8 and VP9 de/encoding via libvpx [no]
258   --enable-libwavpack      enable wavpack encoding via libwavpack [no]
259   --enable-libwebp         enable WebP encoding via libwebp [no]
260   --enable-libx264         enable H.264 encoding via x264 [no]
261   --enable-libx265         enable HEVC encoding via x265 [no]
262   --enable-libxavs         enable AVS encoding via xavs [no]
263   --enable-libxcb          enable X11 grabbing using XCB [autodetect]
264   --enable-libxcb-shm      enable X11 grabbing shm communication [autodetect]
265   --enable-libxcb-xfixes   enable X11 grabbing mouse rendering [autodetect]
266   --enable-libxcb-shape    enable X11 grabbing shape rendering [autodetect]
267   --enable-libxvid         enable Xvid encoding via xvidcore,
268                            native MPEG-4/Xvid encoder exists [no]
269   --enable-libzmq          enable message passing via libzmq [no]
270   --enable-libzvbi         enable teletext support via libzvbi [no]
271   --disable-lzma           disable lzma [autodetect]
272   --enable-decklink        enable Blackmagick DeckLink I/O support [no]
273   --enable-mmal            enable decoding via MMAL [no]
274   --enable-nvenc           enable NVIDIA NVENC support [no]
275   --enable-openal          enable OpenAL 1.1 capture support [no]
276   --enable-opencl          enable OpenCL code
277   --enable-opengl          enable OpenGL rendering [no]
278   --enable-openssl         enable openssl, needed for https support
279                            if gnutls is not used [no]
280   --disable-sdl            disable sdl [autodetect]
281   --disable-securetransport disable Secure Transport, needed for TLS support
282                            on OSX if openssl and gnutls are not used [autodetect]
283   --enable-x11grab         enable X11 grabbing (legacy) [no]
284   --disable-xlib           disable xlib [autodetect]
285   --disable-zlib           disable zlib [autodetect]
286
287 Toolchain options:
288   --arch=ARCH              select architecture [$arch]
289   --cpu=CPU                select the minimum required CPU (affects
290                            instruction selection, may crash on older CPUs)
291   --cross-prefix=PREFIX    use PREFIX for compilation tools [$cross_prefix]
292   --progs-suffix=SUFFIX    program name suffix []
293   --enable-cross-compile   assume a cross-compiler is used
294   --sysroot=PATH           root of cross-build tree
295   --sysinclude=PATH        location of cross-build system headers
296   --target-os=OS           compiler targets OS [$target_os]
297   --target-exec=CMD        command to run executables on target
298   --target-path=DIR        path to view of build directory on target
299   --target-samples=DIR     path to samples directory on target
300   --tempprefix=PATH        force fixed dir/prefix instead of mktemp for checks
301   --toolchain=NAME         set tool defaults according to NAME
302   --nm=NM                  use nm tool NM [$nm_default]
303   --ar=AR                  use archive tool AR [$ar_default]
304   --as=AS                  use assembler AS [$as_default]
305   --windres=WINDRES        use windows resource compiler WINDRES [$windres_default]
306   --yasmexe=EXE            use yasm-compatible assembler EXE [$yasmexe_default]
307   --cc=CC                  use C compiler CC [$cc_default]
308   --cxx=CXX                use C compiler CXX [$cxx_default]
309   --dep-cc=DEPCC           use dependency generator DEPCC [$cc_default]
310   --ld=LD                  use linker LD [$ld_default]
311   --pkg-config=PKGCONFIG   use pkg-config tool PKGCONFIG [$pkg_config_default]
312   --pkg-config-flags=FLAGS pass additional flags to pkgconf []
313   --ranlib=RANLIB          use ranlib RANLIB [$ranlib_default]
314   --doxygen=DOXYGEN        use DOXYGEN to generate API doc [$doxygen_default]
315   --host-cc=HOSTCC         use host C compiler HOSTCC
316   --host-cflags=HCFLAGS    use HCFLAGS when compiling for host
317   --host-cppflags=HCPPFLAGS use HCPPFLAGS when compiling for host
318   --host-ld=HOSTLD         use host linker HOSTLD
319   --host-ldflags=HLDFLAGS  use HLDFLAGS when linking for host
320   --host-libs=HLIBS        use libs HLIBS when linking for host
321   --host-os=OS             compiler host OS [$target_os]
322   --extra-cflags=ECFLAGS   add ECFLAGS to CFLAGS [$CFLAGS]
323   --extra-cxxflags=ECFLAGS add ECFLAGS to CXXFLAGS [$CXXFLAGS]
324   --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]
325   --extra-ldexeflags=ELDFLAGS add ELDFLAGS to LDEXEFLAGS [$LDEXEFLAGS]
326   --extra-ldlibflags=ELDFLAGS add ELDFLAGS to LDLIBFLAGS [$LDLIBFLAGS]
327   --extra-libs=ELIBS       add ELIBS [$ELIBS]
328   --extra-version=STRING   version string suffix []
329   --optflags=OPTFLAGS      override optimization-related compiler flags
330   --build-suffix=SUFFIX    library name suffix []
331   --enable-pic             build position-independent code
332   --enable-thumb           compile for Thumb instruction set
333   --enable-lto             use link-time optimization
334   --env="ENV=override"     override the environment variables
335
336 Advanced options (experts only):
337   --malloc-prefix=PREFIX   prefix malloc and related names with PREFIX
338   --disable-symver         disable symbol versioning
339   --enable-hardcoded-tables use hardcoded tables instead of runtime generation
340   --disable-safe-bitstream-reader
341                            disable buffer boundary checking in bitreaders
342                            (faster, but may crash)
343   --enable-memalign-hack   emulate memalign, interferes with memory debuggers
344   --sws-max-filter-size=N  the max filter size swscale uses [$sws_max_filter_size_default]
345
346 Optimization options (experts only):
347   --disable-asm            disable all assembly optimizations
348   --disable-altivec        disable AltiVec optimizations
349   --disable-vsx            disable VSX optimizations
350   --disable-power8         disable POWER8 optimizations
351   --disable-amd3dnow       disable 3DNow! optimizations
352   --disable-amd3dnowext    disable 3DNow! extended optimizations
353   --disable-mmx            disable MMX optimizations
354   --disable-mmxext         disable MMXEXT optimizations
355   --disable-sse            disable SSE optimizations
356   --disable-sse2           disable SSE2 optimizations
357   --disable-sse3           disable SSE3 optimizations
358   --disable-ssse3          disable SSSE3 optimizations
359   --disable-sse4           disable SSE4 optimizations
360   --disable-sse42          disable SSE4.2 optimizations
361   --disable-avx            disable AVX optimizations
362   --disable-xop            disable XOP optimizations
363   --disable-fma3           disable FMA3 optimizations
364   --disable-fma4           disable FMA4 optimizations
365   --disable-avx2           disable AVX2 optimizations
366   --disable-armv5te        disable armv5te optimizations
367   --disable-armv6          disable armv6 optimizations
368   --disable-armv6t2        disable armv6t2 optimizations
369   --disable-vfp            disable VFP optimizations
370   --disable-neon           disable NEON optimizations
371   --disable-inline-asm     disable use of inline assembly
372   --disable-yasm           disable use of nasm/yasm assembly
373   --disable-mips32r5       disable MIPS32R5 optimizations
374   --disable-mips64r6       disable MIPS64R6 optimizations
375   --disable-mipsdspr1      disable MIPS DSP ASE R1 optimizations
376   --disable-mipsdspr2      disable MIPS DSP ASE R2 optimizations
377   --disable-msa            disable MSA optimizations
378   --disable-mipsfpu        disable floating point MIPS optimizations
379   --disable-mmi            disable Loongson SIMD optimizations
380   --disable-fast-unaligned consider unaligned accesses slow
381
382 Developer options (useful when working on FFmpeg itself):
383   --disable-debug          disable debugging symbols
384   --enable-debug=LEVEL     set the debug level [$debuglevel]
385   --disable-optimizations  disable compiler optimizations
386   --enable-extra-warnings  enable more compiler warnings
387   --disable-stripping      disable stripping of executables and shared libraries
388   --assert-level=level     0(default), 1 or 2, amount of assertion testing,
389                            2 causes a slowdown at runtime.
390   --enable-memory-poisoning fill heap uninitialized allocated space with arbitrary data
391   --valgrind=VALGRIND      run "make fate" tests through valgrind to detect memory
392                            leaks and errors, using the specified valgrind binary.
393                            Cannot be combined with --target-exec
394   --enable-ftrapv          Trap arithmetic overflows
395   --samples=PATH           location of test samples for FATE, if not set use
396                            \$FATE_SAMPLES at make invocation time.
397   --enable-neon-clobber-test check NEON registers for clobbering (should be
398                            used only for debugging purposes)
399   --enable-xmm-clobber-test check XMM registers for clobbering (Win64-only;
400                            should be used only for debugging purposes)
401   --enable-random          randomly enable/disable components
402   --disable-random
403   --enable-random=LIST     randomly enable/disable specific components or
404   --disable-random=LIST    component groups. LIST is a comma-separated list
405                            of NAME[:PROB] entries where NAME is a component
406                            (group) and PROB the probability associated with
407                            NAME (default 0.5).
408   --random-seed=VALUE      seed value for --enable/disable-random
409   --disable-valgrind-backtrace do not print a backtrace under Valgrind
410                            (only applies to --disable-optimizations builds)
411
412 NOTE: Object files are built at the place where configure is launched.
413 EOF
414   exit 0
415 }
416
417 quotes='""'
418
419 log(){
420     echo "$@" >> $logfile
421 }
422
423 log_file(){
424     log BEGIN $1
425     pr -n -t $1 >> $logfile
426     log END $1
427 }
428
429 echolog(){
430     log "$@"
431     echo "$@"
432 }
433
434 warn(){
435     log "WARNING: $*"
436     WARNINGS="${WARNINGS}WARNING: $*\n"
437 }
438
439 die(){
440     echolog "$@"
441     cat <<EOF
442
443 If you think configure made a mistake, make sure you are using the latest
444 version from Git.  If the latest version fails, report the problem to the
445 ffmpeg-user@ffmpeg.org mailing list or IRC #ffmpeg on irc.freenode.net.
446 EOF
447     if disabled logging; then
448         cat <<EOF
449 Rerun configure with logging enabled (do not use --disable-logging), and
450 include the log this produces with your report.
451 EOF
452     else
453         cat <<EOF
454 Include the log file "$logfile" produced by configure as this will help
455 solve the problem.
456 EOF
457     fi
458     exit 1
459 }
460
461 # Avoid locale weirdness, besides we really just want to translate ASCII.
462 toupper(){
463     echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
464 }
465
466 tolower(){
467     echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
468 }
469
470 c_escape(){
471     echo "$*" | sed 's/["\\]/\\\0/g'
472 }
473
474 sh_quote(){
475     v=$(echo "$1" | sed "s/'/'\\\\''/g")
476     test "x$v" = "x${v#*[!A-Za-z0-9_/.+-]}" || v="'$v'"
477     echo "$v"
478 }
479
480 cleanws(){
481     echo "$@" | sed 's/^ *//;s/[[:space:]][[:space:]]*/ /g;s/ *$//'
482 }
483
484 filter(){
485     pat=$1
486     shift
487     for v; do
488         eval "case $v in $pat) echo $v ;; esac"
489     done
490 }
491
492 filter_out(){
493     pat=$1
494     shift
495     for v; do
496         eval "case $v in $pat) ;; *) echo $v ;; esac"
497     done
498 }
499
500 map(){
501     m=$1
502     shift
503     for v; do eval $m; done
504 }
505
506 add_suffix(){
507     suffix=$1
508     shift
509     for v; do echo ${v}${suffix}; done
510 }
511
512 set_all(){
513     value=$1
514     shift
515     for var in $*; do
516         eval $var=$value
517     done
518 }
519
520 set_weak(){
521     value=$1
522     shift
523     for var; do
524         eval : \${$var:=$value}
525     done
526 }
527
528 sanitize_var_name(){
529     echo $@ | sed 's/[^A-Za-z0-9_]/_/g'
530 }
531
532 set_safe(){
533     var=$1
534     shift
535     eval $(sanitize_var_name "$var")='$*'
536 }
537
538 get_safe(){
539     eval echo \$$(sanitize_var_name "$1")
540 }
541
542 pushvar(){
543     for pvar in $*; do
544         eval level=\${${pvar}_level:=0}
545         eval ${pvar}_${level}="\$$pvar"
546         eval ${pvar}_level=$(($level+1))
547     done
548 }
549
550 popvar(){
551     for pvar in $*; do
552         eval level=\${${pvar}_level:-0}
553         test $level = 0 && continue
554         eval level=$(($level-1))
555         eval $pvar="\${${pvar}_${level}}"
556         eval ${pvar}_level=$level
557         eval unset ${pvar}_${level}
558     done
559 }
560
561 enable(){
562     set_all yes $*
563 }
564
565 disable(){
566     set_all no $*
567 }
568
569 enable_weak(){
570     set_weak yes $*
571 }
572
573 disable_weak(){
574     set_weak no $*
575 }
576
577 enable_safe(){
578     for var; do
579         enable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
580     done
581 }
582
583 disable_safe(){
584     for var; do
585         disable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
586     done
587 }
588
589 do_enable_deep(){
590     for var; do
591         enabled $var && continue
592         eval sel="\$${var}_select"
593         eval sgs="\$${var}_suggest"
594         pushvar var sgs
595         enable_deep $sel
596         popvar sgs
597         enable_deep_weak $sgs
598         popvar var
599     done
600 }
601
602 enable_deep(){
603     do_enable_deep $*
604     enable $*
605 }
606
607 enable_deep_weak(){
608     for var; do
609         disabled $var && continue
610         pushvar var
611         do_enable_deep $var
612         popvar var
613         enable_weak $var
614     done
615 }
616
617 enabled(){
618     test "${1#!}" = "$1" && op== || op=!=
619     eval test "x\$${1#!}" $op "xyes"
620 }
621
622 disabled(){
623     test "${1#!}" = "$1" && op== || op=!=
624     eval test "x\$${1#!}" $op "xno"
625 }
626
627 enabled_all(){
628     for opt; do
629         enabled $opt || return 1
630     done
631 }
632
633 disabled_all(){
634     for opt; do
635         disabled $opt || return 1
636     done
637 }
638
639 enabled_any(){
640     for opt; do
641         enabled $opt && return 0
642     done
643 }
644
645 disabled_any(){
646     for opt; do
647         disabled $opt && return 0
648     done
649     return 1
650 }
651
652 set_default(){
653     for opt; do
654         eval : \${$opt:=\$${opt}_default}
655     done
656 }
657
658 is_in(){
659     value=$1
660     shift
661     for var in $*; do
662         [ $var = $value ] && return 0
663     done
664     return 1
665 }
666
667 do_check_deps(){
668     for cfg; do
669         cfg="${cfg#!}"
670         enabled ${cfg}_checking && die "Circular dependency for $cfg."
671         disabled ${cfg}_checking && continue
672         enable ${cfg}_checking
673         append allopts $cfg
674
675         eval dep_all="\$${cfg}_deps"
676         eval dep_any="\$${cfg}_deps_any"
677         eval dep_sel="\$${cfg}_select"
678         eval dep_sgs="\$${cfg}_suggest"
679         eval dep_ifa="\$${cfg}_if"
680         eval dep_ifn="\$${cfg}_if_any"
681
682         pushvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
683         do_check_deps $dep_all $dep_any $dep_sel $dep_sgs $dep_ifa $dep_ifn
684         popvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
685
686         [ -n "$dep_ifa" ] && { enabled_all $dep_ifa && enable_weak $cfg; }
687         [ -n "$dep_ifn" ] && { enabled_any $dep_ifn && enable_weak $cfg; }
688         enabled_all  $dep_all || disable $cfg
689         enabled_any  $dep_any || disable $cfg
690         disabled_any $dep_sel && disable $cfg
691
692         if enabled $cfg; then
693             enable_deep $dep_sel
694             enable_deep_weak $dep_sgs
695         fi
696
697         disable ${cfg}_checking
698     done
699 }
700
701 check_deps(){
702     unset allopts
703
704     do_check_deps "$@"
705
706     for cfg in $allopts; do
707         enabled $cfg || continue
708         eval dep_extralibs="\$${cfg}_extralibs"
709         test -n "$dep_extralibs" && add_extralibs $dep_extralibs
710     done
711 }
712
713 print_config(){
714     pfx=$1
715     files=$2
716     shift 2
717     map 'eval echo "$v \${$v:-no}"' "$@" |
718     awk "BEGIN { split(\"$files\", files) }
719         {
720             c = \"$pfx\" toupper(\$1);
721             v = \$2;
722             sub(/yes/, 1, v);
723             sub(/no/,  0, v);
724             for (f in files) {
725                 file = files[f];
726                 if (file ~ /\\.h\$/) {
727                     printf(\"#define %s %d\\n\", c, v) >>file;
728                 } else if (file ~ /\\.asm\$/) {
729                     printf(\"%%define %s %d\\n\", c, v) >>file;
730                 } else if (file ~ /\\.mak\$/) {
731                     n = -v ? \"\" : \"!\";
732                     printf(\"%s%s=yes\\n\", n, c) >>file;
733                 } else if (file ~ /\\.texi\$/) {
734                     pre = -v ? \"\" : \"@c \";
735                     yesno = \$2;
736                     c2 = tolower(c);
737                     gsub(/_/, \"-\", c2);
738                     printf(\"%s@set %s %s\\n\", pre, c2, yesno) >>file;
739                 }
740             }
741         }"
742 }
743
744 print_enabled(){
745     suf=$1
746     shift
747     for v; do
748         enabled $v && printf "%s\n" ${v%$suf};
749     done
750 }
751
752 append(){
753     var=$1
754     shift
755     eval "$var=\"\$$var $*\""
756 }
757
758 prepend(){
759     var=$1
760     shift
761     eval "$var=\"$* \$$var\""
762 }
763
764 unique(){
765     var=$1
766     uniq_list=""
767     for tok in $(eval echo \$$var); do
768         uniq_list="$(filter_out $tok $uniq_list) $tok"
769     done
770     eval "$var=\"${uniq_list}\""
771 }
772
773 add_cppflags(){
774     append CPPFLAGS "$@"
775 }
776
777 add_cflags(){
778     append CFLAGS $($cflags_filter "$@")
779 }
780
781 add_cxxflags(){
782     append CXXFLAGS $($cflags_filter "$@")
783 }
784
785 add_asflags(){
786     append ASFLAGS $($asflags_filter "$@")
787 }
788
789 add_ldflags(){
790     append LDFLAGS $($ldflags_filter "$@")
791 }
792
793 add_ldexeflags(){
794     append LDEXEFLAGS $($ldflags_filter "$@")
795 }
796
797 add_ldlibflags(){
798     append LDLIBFLAGS $($ldflags_filter "$@")
799 }
800
801 add_stripflags(){
802     append ASMSTRIPFLAGS "$@"
803 }
804
805 add_extralibs(){
806     prepend extralibs $($ldflags_filter "$@")
807 }
808
809 add_host_cppflags(){
810     append host_cppflags "$@"
811 }
812
813 add_host_cflags(){
814     append host_cflags $($host_cflags_filter "$@")
815 }
816
817 add_host_ldflags(){
818     append host_ldflags $($host_ldflags_filter "$@")
819 }
820
821 add_compat(){
822     append compat_objs $1
823     shift
824     map 'add_cppflags -D$v' "$@"
825 }
826
827 check_cmd(){
828     log "$@"
829     "$@" >> $logfile 2>&1
830 }
831
832 check_stat(){
833     log check_stat "$@"
834     stat "$1" >> $logfile 2>&1
835 }
836
837 cc_o(){
838     eval printf '%s\\n' $CC_O
839 }
840
841 cc_e(){
842     eval printf '%s\\n' $CC_E
843 }
844
845 check_cc(){
846     log check_cc "$@"
847     cat > $TMPC
848     log_file $TMPC
849     check_cmd $cc $CPPFLAGS $CFLAGS "$@" $CC_C $(cc_o $TMPO) $TMPC
850 }
851
852 check_cxx(){
853     log check_cxx "$@"
854     cat > $TMPCPP
855     log_file $TMPCPP
856     check_cmd $cxx $CPPFLAGS $CFLAGS $CXXFLAGS "$@" $CXX_C -o $TMPO $TMPCPP
857 }
858
859 check_oc(){
860     log check_oc "$@"
861     cat > $TMPM
862     log_file $TMPM
863     check_cmd $cc -Werror=missing-prototypes $CPPFLAGS $CFLAGS "$@" $CC_C $(cc_o $TMPO) $TMPM
864 }
865
866 check_cpp(){
867     log check_cpp "$@"
868     cat > $TMPC
869     log_file $TMPC
870     check_cmd $cc $CPPFLAGS $CFLAGS "$@" $(cc_e $TMPO) $TMPC
871 }
872
873 as_o(){
874     eval printf '%s\\n' $AS_O
875 }
876
877 check_as(){
878     log check_as "$@"
879     cat > $TMPS
880     log_file $TMPS
881     check_cmd $as $CPPFLAGS $ASFLAGS "$@" $AS_C $(as_o $TMPO) $TMPS
882 }
883
884 check_inline_asm(){
885     log check_inline_asm "$@"
886     name="$1"
887     code="$2"
888     shift 2
889     disable $name
890     check_cc "$@" <<EOF && enable $name
891 void foo(void){ __asm__ volatile($code); }
892 EOF
893 }
894
895 check_insn(){
896     log check_insn "$@"
897     check_inline_asm ${1}_inline "\"$2\""
898     echo "$2" | check_as && enable ${1}_external || disable ${1}_external
899 }
900
901 check_yasm(){
902     log check_yasm "$@"
903     echo "$1" > $TMPS
904     log_file $TMPS
905     shift 1
906     check_cmd $yasmexe $YASMFLAGS -Werror "$@" -o $TMPO $TMPS
907 }
908
909 ld_o(){
910     eval printf '%s\\n' $LD_O
911 }
912
913 check_ld(){
914     log check_ld "$@"
915     type=$1
916     shift 1
917     flags=$(filter_out '-l*|*.so' $@)
918     libs=$(filter '-l*|*.so' $@)
919     check_$type $($cflags_filter $flags) || return
920     flags=$($ldflags_filter $flags)
921     libs=$($ldflags_filter $libs)
922     check_cmd $ld $LDFLAGS $flags $(ld_o $TMPE) $TMPO $libs $extralibs
923 }
924
925 print_include(){
926     hdr=$1
927     test "${hdr%.h}" = "${hdr}" &&
928         echo "#include $hdr"    ||
929         echo "#include <$hdr>"
930 }
931
932 check_code(){
933     log check_code "$@"
934     check=$1
935     headers=$2
936     code=$3
937     shift 3
938     {
939         for hdr in $headers; do
940             print_include $hdr
941         done
942         echo "int main(void) { $code; return 0; }"
943     } | check_$check "$@"
944 }
945
946 check_cppflags(){
947     log check_cppflags "$@"
948     check_cc "$@" <<EOF && append CPPFLAGS "$@"
949 int x;
950 EOF
951 }
952
953 test_cflags(){
954     log test_cflags "$@"
955     set -- $($cflags_filter "$@")
956     check_cc "$@" <<EOF
957 int x;
958 EOF
959 }
960
961 check_cflags(){
962     log check_cflags "$@"
963     test_cflags "$@" && add_cflags "$@"
964 }
965
966 check_cxxflags(){
967     log check_cxxflags "$@"
968     set -- $($cflags_filter "$@")
969     check_cxx "$@" <<EOF && append CXXFLAGS "$@"
970 int x;
971 EOF
972 }
973
974 test_ldflags(){
975     log test_ldflags "$@"
976     check_ld "cc" "$@" <<EOF
977 int main(void){ return 0; }
978 EOF
979 }
980
981 check_ldflags(){
982     log check_ldflags "$@"
983     test_ldflags "$@" && add_ldflags "$@"
984 }
985
986 test_stripflags(){
987     log test_stripflags "$@"
988     # call check_cc to get a fresh TMPO
989     check_cc <<EOF
990 int main(void) { return 0; }
991 EOF
992     check_cmd $strip $ASMSTRIPFLAGS "$@" $TMPO
993 }
994
995 check_stripflags(){
996     log check_stripflags "$@"
997     test_stripflags "$@" && add_stripflags "$@"
998 }
999
1000 check_header(){
1001     log check_header "$@"
1002     header=$1
1003     shift
1004     disable_safe $header
1005     check_cpp "$@" <<EOF && enable_safe $header
1006 #include <$header>
1007 int x;
1008 EOF
1009 }
1010
1011 check_header_oc(){
1012     log check_header_oc "$@"
1013     rm -f -- "$TMPO"
1014     header=$1
1015     shift
1016     disable_safe $header
1017     {
1018        echo "#include <$header>"
1019        echo "int main(void) { return 0; }"
1020     } | check_oc && check_stat "$TMPO" && enable_safe $headers
1021 }
1022
1023 check_func(){
1024     log check_func "$@"
1025     func=$1
1026     shift
1027     disable $func
1028     check_ld "cc" "$@" <<EOF && enable $func
1029 extern int $func();
1030 int main(void){ $func(); }
1031 EOF
1032 }
1033
1034 check_mathfunc(){
1035     log check_mathfunc "$@"
1036     func=$1
1037     narg=$2
1038     shift 2
1039     test $narg = 2 && args="f, g" || args="f"
1040     disable $func
1041     check_ld "cc" "$@" <<EOF && enable $func
1042 #include <math.h>
1043 float foo(float f, float g) { return $func($args); }
1044 int main(void){ return (int) foo; }
1045 EOF
1046 }
1047
1048 check_func_headers(){
1049     log check_func_headers "$@"
1050     headers=$1
1051     funcs=$2
1052     shift 2
1053     {
1054         for hdr in $headers; do
1055             print_include $hdr
1056         done
1057         for func in $funcs; do
1058             echo "long check_$func(void) { return (long) $func; }"
1059         done
1060         echo "int main(void) { return 0; }"
1061     } | check_ld "cc" "$@" && enable $funcs && enable_safe $headers
1062 }
1063
1064 check_class_headers_cpp(){
1065     log check_class_headers_cpp "$@"
1066     headers=$1
1067     classes=$2
1068     shift 2
1069     {
1070         for hdr in $headers; do
1071             echo "#include <$hdr>"
1072         done
1073         echo "int main(void) { "
1074         i=1
1075         for class in $classes; do
1076             echo "$class obj$i;"
1077             i=$(expr $i + 1)
1078         done
1079         echo "return 0; }"
1080     } | check_ld "cxx" "$@" && enable $funcs && enable_safe $headers
1081 }
1082
1083 check_cpp_condition(){
1084     log check_cpp_condition "$@"
1085     header=$1
1086     condition=$2
1087     shift 2
1088     check_cpp "$@" <<EOF
1089 #include <$header>
1090 #if !($condition)
1091 #error "unsatisfied condition: $condition"
1092 #endif
1093 EOF
1094 }
1095
1096 check_lib(){
1097     log check_lib "$@"
1098     header="$1"
1099     func="$2"
1100     shift 2
1101     check_header $header && check_func $func "$@" && add_extralibs "$@"
1102 }
1103
1104 check_lib2(){
1105     log check_lib2 "$@"
1106     headers="$1"
1107     funcs="$2"
1108     shift 2
1109     check_func_headers "$headers" "$funcs" "$@" && add_extralibs "$@"
1110 }
1111
1112 check_lib_cpp(){
1113     log check_lib_cpp "$@"
1114     headers="$1"
1115     classes="$2"
1116     shift 2
1117     check_class_headers_cpp "$headers" "$classes" "$@" && add_extralibs "$@"
1118 }
1119
1120 check_pkg_config(){
1121     log check_pkg_config "$@"
1122     pkgandversion="$1"
1123     pkg="${1%% *}"
1124     headers="$2"
1125     funcs="$3"
1126     shift 3
1127     check_cmd $pkg_config --exists --print-errors $pkgandversion || return
1128     pkg_cflags=$($pkg_config --cflags $pkg_config_flags $pkg)
1129     pkg_libs=$($pkg_config --libs $pkg_config_flags $pkg)
1130     check_func_headers "$headers" "$funcs" $pkg_cflags $pkg_libs "$@" &&
1131         set_safe "${pkg}_cflags" $pkg_cflags   &&
1132         set_safe "${pkg}_libs"   $pkg_libs
1133 }
1134
1135 check_exec(){
1136     check_ld "cc" "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
1137 }
1138
1139 check_exec_crash(){
1140     code=$(cat)
1141
1142     # exit() is not async signal safe.  _Exit (C99) and _exit (POSIX)
1143     # are safe but may not be available everywhere.  Thus we use
1144     # raise(SIGTERM) instead.  The check is run in a subshell so we
1145     # can redirect the "Terminated" message from the shell.  SIGBUS
1146     # is not defined by standard C so it is used conditionally.
1147
1148     (check_exec "$@") >> $logfile 2>&1 <<EOF
1149 #include <signal.h>
1150 static void sighandler(int sig){
1151     raise(SIGTERM);
1152 }
1153 int foo(void){
1154     $code
1155 }
1156 int (*func_ptr)(void) = foo;
1157 int main(void){
1158     signal(SIGILL, sighandler);
1159     signal(SIGFPE, sighandler);
1160     signal(SIGSEGV, sighandler);
1161 #ifdef SIGBUS
1162     signal(SIGBUS, sighandler);
1163 #endif
1164     return func_ptr();
1165 }
1166 EOF
1167 }
1168
1169 check_type(){
1170     log check_type "$@"
1171     headers=$1
1172     type=$2
1173     shift 2
1174     disable_safe "$type"
1175     check_code cc "$headers" "$type v" "$@" && enable_safe "$type"
1176 }
1177
1178 check_struct(){
1179     log check_struct "$@"
1180     headers=$1
1181     struct=$2
1182     member=$3
1183     shift 3
1184     disable_safe "${struct}_${member}"
1185     check_code cc "$headers" "const void *p = &(($struct *)0)->$member" "$@" &&
1186         enable_safe "${struct}_${member}"
1187 }
1188
1189 check_builtin(){
1190     log check_builtin "$@"
1191     name=$1
1192     headers=$2
1193     builtin=$3
1194     shift 3
1195     disable "$name"
1196     check_code ld "$headers" "$builtin" "cc" "$@" && enable "$name"
1197 }
1198
1199 check_compile_assert(){
1200     log check_compile_assert "$@"
1201     name=$1
1202     headers=$2
1203     condition=$3
1204     shift 3
1205     disable "$name"
1206     check_code cc "$headers" "char c[2 * !!($condition) - 1]" "$@" && enable "$name"
1207 }
1208
1209 require(){
1210     name="$1"
1211     header="$2"
1212     func="$3"
1213     shift 3
1214     check_lib $header $func "$@" || die "ERROR: $name not found"
1215 }
1216
1217 require2(){
1218     name="$1"
1219     headers="$2"
1220     func="$3"
1221     shift 3
1222     check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
1223 }
1224
1225 require_cpp(){
1226     name="$1"
1227     headers="$2"
1228     classes="$3"
1229     shift 3
1230     check_lib_cpp "$headers" "$classes" "$@" || die "ERROR: $name not found"
1231 }
1232
1233 use_pkg_config(){
1234     pkg="$1"
1235     check_pkg_config "$@" || return 1
1236     add_cflags    $(get_safe "${pkg}_cflags")
1237     add_extralibs $(get_safe "${pkg}_libs")
1238 }
1239
1240 require_pkg_config(){
1241     use_pkg_config "$@" || die "ERROR: $pkg not found using pkg-config$pkg_config_fail_message"
1242 }
1243
1244 require_libfreetype(){
1245     log require_libfreetype "$@"
1246     pkg="freetype2"
1247     check_cmd $pkg_config --exists --print-errors $pkg \
1248       || die "ERROR: $pkg not found"
1249     pkg_cflags=$($pkg_config --cflags $pkg_config_flags $pkg)
1250     pkg_libs=$($pkg_config --libs $pkg_config_flags $pkg)
1251     {
1252         echo "#include <ft2build.h>"
1253         echo "#include FT_FREETYPE_H"
1254         echo "long check_func(void) { return (long) FT_Init_FreeType; }"
1255         echo "int main(void) { return 0; }"
1256     } | check_ld "cc" $pkg_cflags $pkg_libs \
1257       && set_safe "${pkg}_cflags" $pkg_cflags \
1258       && set_safe "${pkg}_libs"   $pkg_libs \
1259       || die "ERROR: $pkg not found"
1260     add_cflags    $(get_safe "${pkg}_cflags")
1261     add_extralibs $(get_safe "${pkg}_libs")
1262 }
1263
1264 hostcc_e(){
1265     eval printf '%s\\n' $HOSTCC_E
1266 }
1267
1268 hostcc_o(){
1269     eval printf '%s\\n' $HOSTCC_O
1270 }
1271
1272 check_host_cc(){
1273     log check_host_cc "$@"
1274     cat > $TMPC
1275     log_file $TMPC
1276     check_cmd $host_cc $host_cflags "$@" $HOSTCC_C $(hostcc_o $TMPO) $TMPC
1277 }
1278
1279 check_host_cpp(){
1280     log check_host_cpp "$@"
1281     cat > $TMPC
1282     log_file $TMPC
1283     check_cmd $host_cc $host_cppflags $host_cflags "$@" $(hostcc_e $TMPO) $TMPC
1284 }
1285
1286 check_host_cppflags(){
1287     log check_host_cppflags "$@"
1288     check_host_cc "$@" <<EOF && append host_cppflags "$@"
1289 int x;
1290 EOF
1291 }
1292
1293 check_host_cflags(){
1294     log check_host_cflags "$@"
1295     set -- $($host_cflags_filter "$@")
1296     check_host_cc "$@" <<EOF && append host_cflags "$@"
1297 int x;
1298 EOF
1299 }
1300
1301 check_host_cpp_condition(){
1302     log check_host_cpp_condition "$@"
1303     header=$1
1304     condition=$2
1305     shift 2
1306     check_host_cpp "$@" <<EOF
1307 #include <$header>
1308 #if !($condition)
1309 #error "unsatisfied condition: $condition"
1310 #endif
1311 EOF
1312 }
1313
1314 apply(){
1315     file=$1
1316     shift
1317     "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
1318 }
1319
1320 cp_if_changed(){
1321     cmp -s "$1" "$2" && echo "$2 is unchanged" && return
1322     mkdir -p "$(dirname $2)"
1323     $cp_f "$1" "$2"
1324 }
1325
1326 # CONFIG_LIST contains configurable options, while HAVE_LIST is for
1327 # system-dependent things.
1328
1329 COMPONENT_LIST="
1330     bsfs
1331     decoders
1332     demuxers
1333     encoders
1334     filters
1335     hwaccels
1336     indevs
1337     muxers
1338     outdevs
1339     parsers
1340     protocols
1341 "
1342
1343 EXAMPLE_LIST="
1344     avio_reading_example
1345     avio_list_dir_example
1346     decoding_encoding_example
1347     demuxing_decoding_example
1348     extract_mvs_example
1349     filter_audio_example
1350     filtering_audio_example
1351     filtering_video_example
1352     metadata_example
1353     muxing_example
1354     qsvdec_example
1355     remuxing_example
1356     resampling_audio_example
1357     scaling_video_example
1358     transcode_aac_example
1359     transcoding_example
1360 "
1361
1362 EXTERNAL_LIBRARY_LIST="
1363     avisynth
1364     bzlib
1365     crystalhd
1366     decklink
1367     frei0r
1368     gnutls
1369     iconv
1370     ladspa
1371     libaacplus
1372     libass
1373     libbluray
1374     libbs2b
1375     libcaca
1376     libcdio
1377     libcelt
1378     libdc1394
1379     libdcadec
1380     libfaac
1381     libfdk_aac
1382     libflite
1383     libfontconfig
1384     libfreetype
1385     libfribidi
1386     libgme
1387     libgsm
1388     libiec61883
1389     libilbc
1390     libkvazaar
1391     libmfx
1392     libmodplug
1393     libmp3lame
1394     libnut
1395     libopencore_amrnb
1396     libopencore_amrwb
1397     libopencv
1398     libopenh264
1399     libopenjpeg
1400     libopus
1401     libpulse
1402     libquvi
1403     librtmp
1404     libschroedinger
1405     libshine
1406     libsmbclient
1407     libsnappy
1408     libsoxr
1409     libspeex
1410     libssh
1411     libstagefright_h264
1412     libtheora
1413     libtwolame
1414     libutvideo
1415     libv4l2
1416     libvidstab
1417     libvo_aacenc
1418     libvo_amrwbenc
1419     libvorbis
1420     libvpx
1421     libwavpack
1422     libwebp
1423     libx264
1424     libx265
1425     libxavs
1426     libxcb
1427     libxcb_shm
1428     libxcb_shape
1429     libxcb_xfixes
1430     libxvid
1431     libzmq
1432     libzvbi
1433     lzma
1434     mmal
1435     nvenc
1436     openal
1437     opencl
1438     opengl
1439     openssl
1440     sdl
1441     securetransport
1442     x11grab
1443     xlib
1444     zlib
1445 "
1446
1447 DOCUMENT_LIST="
1448     doc
1449     htmlpages
1450     manpages
1451     podpages
1452     txtpages
1453 "
1454
1455 FEATURE_LIST="
1456     ftrapv
1457     gray
1458     hardcoded_tables
1459     runtime_cpudetect
1460     safe_bitstream_reader
1461     shared
1462     small
1463     static
1464     swscale_alpha
1465 "
1466
1467 HWACCEL_LIST="
1468     d3d11va
1469     dxva2
1470     vaapi
1471     vda
1472     vdpau
1473     xvmc
1474 "
1475
1476 LIBRARY_LIST="
1477     avcodec
1478     avdevice
1479     avfilter
1480     avformat
1481     avresample
1482     avutil
1483     postproc
1484     swresample
1485     swscale
1486 "
1487
1488 LICENSE_LIST="
1489     gpl
1490     nonfree
1491     version3
1492 "
1493
1494 PROGRAM_LIST="
1495     ffplay
1496     ffprobe
1497     ffserver
1498     ffmpeg
1499 "
1500
1501 SUBSYSTEM_LIST="
1502     dct
1503     dwt
1504     error_resilience
1505     faan
1506     fast_unaligned
1507     fft
1508     lsp
1509     lzo
1510     mdct
1511     pixelutils
1512     network
1513     rdft
1514 "
1515
1516 CONFIG_LIST="
1517     $COMPONENT_LIST
1518     $DOCUMENT_LIST
1519     $EXAMPLE_LIST
1520     $EXTERNAL_LIBRARY_LIST
1521     $FEATURE_LIST
1522     $HWACCEL_LIST
1523     $LICENSE_LIST
1524     $LIBRARY_LIST
1525     $PROGRAM_LIST
1526     $SUBSYSTEM_LIST
1527     fontconfig
1528     incompatible_libav_abi
1529     memalign_hack
1530     memory_poisoning
1531     neon_clobber_test
1532     pic
1533     pod2man
1534     raise_major
1535     thumb
1536     valgrind_backtrace
1537     xmm_clobber_test
1538 "
1539
1540 THREADS_LIST="
1541     pthreads
1542     os2threads
1543     w32threads
1544 "
1545
1546 ATOMICS_LIST="
1547     atomics_gcc
1548     atomics_suncc
1549     atomics_win32
1550 "
1551
1552 ARCH_LIST="
1553     aarch64
1554     alpha
1555     arm
1556     avr32
1557     avr32_ap
1558     avr32_uc
1559     bfin
1560     ia64
1561     m68k
1562     mips
1563     mips64
1564     parisc
1565     ppc
1566     ppc64
1567     s390
1568     sh4
1569     sparc
1570     sparc64
1571     tilegx
1572     tilepro
1573     tomi
1574     x86
1575     x86_32
1576     x86_64
1577 "
1578
1579 ARCH_EXT_LIST_ARM="
1580     armv5te
1581     armv6
1582     armv6t2
1583     armv8
1584     neon
1585     vfp
1586     vfpv3
1587     setend
1588 "
1589
1590 ARCH_EXT_LIST_MIPS="
1591     mipsfpu
1592     mips32r2
1593     mips32r5
1594     mips64r6
1595     mipsdspr1
1596     mipsdspr2
1597     msa
1598 "
1599
1600 ARCH_EXT_LIST_LOONGSON="
1601     loongson2
1602     loongson3
1603     mmi
1604 "
1605
1606 ARCH_EXT_LIST_X86_SIMD="
1607     amd3dnow
1608     amd3dnowext
1609     avx
1610     avx2
1611     fma3
1612     fma4
1613     mmx
1614     mmxext
1615     sse
1616     sse2
1617     sse3
1618     sse4
1619     sse42
1620     ssse3
1621     xop
1622 "
1623
1624 ARCH_EXT_LIST_PPC="
1625     altivec
1626     dcbzl
1627     ldbrx
1628     power8
1629     ppc4xx
1630     vsx
1631 "
1632
1633 ARCH_EXT_LIST_X86="
1634     $ARCH_EXT_LIST_X86_SIMD
1635     cpunop
1636     i686
1637 "
1638
1639 ARCH_EXT_LIST="
1640     $ARCH_EXT_LIST_ARM
1641     $ARCH_EXT_LIST_PPC
1642     $ARCH_EXT_LIST_X86
1643     $ARCH_EXT_LIST_MIPS
1644     $ARCH_EXT_LIST_LOONGSON
1645 "
1646
1647 ARCH_FEATURES="
1648     aligned_stack
1649     fast_64bit
1650     fast_clz
1651     fast_cmov
1652     local_aligned_8
1653     local_aligned_16
1654     local_aligned_32
1655     simd_align_16
1656 "
1657
1658 BUILTIN_LIST="
1659     atomic_cas_ptr
1660     atomic_compare_exchange
1661     machine_rw_barrier
1662     MemoryBarrier
1663     mm_empty
1664     rdtsc
1665     sarestart
1666     sync_val_compare_and_swap
1667 "
1668 HAVE_LIST_CMDLINE="
1669     inline_asm
1670     symver
1671     yasm
1672 "
1673
1674 HAVE_LIST_PUB="
1675     bigendian
1676     fast_unaligned
1677     incompatible_libav_abi
1678 "
1679
1680 HEADERS_LIST="
1681     alsa_asoundlib_h
1682     altivec_h
1683     arpa_inet_h
1684     asm_types_h
1685     cdio_paranoia_h
1686     cdio_paranoia_paranoia_h
1687     dev_bktr_ioctl_bt848_h
1688     dev_bktr_ioctl_meteor_h
1689     dev_ic_bt8xx_h
1690     dev_video_bktr_ioctl_bt848_h
1691     dev_video_meteor_ioctl_meteor_h
1692     direct_h
1693     dlfcn_h
1694     d3d11_h
1695     dxva_h
1696     ES2_gl_h
1697     gsm_h
1698     io_h
1699     mach_mach_time_h
1700     machine_ioctl_bt848_h
1701     machine_ioctl_meteor_h
1702     malloc_h
1703     openjpeg_1_5_openjpeg_h
1704     OpenGL_gl3_h
1705     poll_h
1706     sndio_h
1707     soundcard_h
1708     sys_mman_h
1709     sys_param_h
1710     sys_resource_h
1711     sys_select_h
1712     sys_soundcard_h
1713     sys_time_h
1714     sys_un_h
1715     sys_videoio_h
1716     termios_h
1717     udplite_h
1718     unistd_h
1719     valgrind_valgrind_h
1720     windows_h
1721     winsock2_h
1722 "
1723
1724 INTRINSICS_LIST="
1725     intrinsics_neon
1726 "
1727
1728 MATH_FUNCS="
1729     atanf
1730     atan2f
1731     cbrt
1732     cbrtf
1733     cosf
1734     exp2
1735     exp2f
1736     expf
1737     isinf
1738     isnan
1739     ldexpf
1740     llrint
1741     llrintf
1742     log2
1743     log2f
1744     log10f
1745     lrint
1746     lrintf
1747     powf
1748     rint
1749     round
1750     roundf
1751     sinf
1752     trunc
1753     truncf
1754 "
1755
1756 SYSTEM_FUNCS="
1757     access
1758     aligned_malloc
1759     clock_gettime
1760     closesocket
1761     CommandLineToArgvW
1762     CoTaskMemFree
1763     CryptGenRandom
1764     dlopen
1765     fcntl
1766     flt_lim
1767     fork
1768     getaddrinfo
1769     gethrtime
1770     getopt
1771     GetProcessAffinityMask
1772     GetProcessMemoryInfo
1773     GetProcessTimes
1774     getrusage
1775     getservbyport
1776     GetSystemTimeAsFileTime
1777     gettimeofday
1778     glob
1779     glXGetProcAddress
1780     gmtime_r
1781     inet_aton
1782     isatty
1783     jack_port_get_latency_range
1784     kbhit
1785     localtime_r
1786     lzo1x_999_compress
1787     mach_absolute_time
1788     MapViewOfFile
1789     memalign
1790     mkstemp
1791     mmap
1792     mprotect
1793     nanosleep
1794     PeekNamedPipe
1795     posix_memalign
1796     pthread_cancel
1797     sched_getaffinity
1798     SetConsoleTextAttribute
1799     SetConsoleCtrlHandler
1800     setmode
1801     setrlimit
1802     Sleep
1803     strerror_r
1804     sysconf
1805     sysctl
1806     usleep
1807     VirtualAlloc
1808     wglGetProcAddress
1809 "
1810
1811 TOOLCHAIN_FEATURES="
1812     as_dn_directive
1813     as_func
1814     as_object_arch
1815     asm_mod_q
1816     attribute_may_alias
1817     attribute_packed
1818     ebp_available
1819     ebx_available
1820     gnu_as
1821     gnu_windres
1822     ibm_asm
1823     inline_asm_labels
1824     inline_asm_nonlocal_labels
1825     inline_asm_direct_symbol_refs
1826     pragma_deprecated
1827     rsync_contimeout
1828     symver_asm_label
1829     symver_gnu_asm
1830     vfp_args
1831     xform_asm
1832     xmm_clobbers
1833 "
1834
1835 TYPES_LIST="
1836     CONDITION_VARIABLE_Ptr
1837     socklen_t
1838     struct_addrinfo
1839     struct_dcadec_exss_info_matrix_encoding
1840     struct_group_source_req
1841     struct_ip_mreq_source
1842     struct_ipv6_mreq
1843     struct_pollfd
1844     struct_rusage_ru_maxrss
1845     struct_sctp_event_subscribe
1846     struct_sockaddr_in6
1847     struct_sockaddr_sa_len
1848     struct_sockaddr_storage
1849     struct_stat_st_mtim_tv_nsec
1850     struct_v4l2_frmivalenum_discrete
1851 "
1852
1853 HAVE_LIST="
1854     $ARCH_EXT_LIST
1855     $(add_suffix _external $ARCH_EXT_LIST)
1856     $(add_suffix _inline   $ARCH_EXT_LIST)
1857     $ARCH_FEATURES
1858     $ATOMICS_LIST
1859     $BUILTIN_LIST
1860     $HAVE_LIST_CMDLINE
1861     $HAVE_LIST_PUB
1862     $HEADERS_LIST
1863     $INTRINSICS_LIST
1864     $MATH_FUNCS
1865     $SYSTEM_FUNCS
1866     $THREADS_LIST
1867     $TOOLCHAIN_FEATURES
1868     $TYPES_LIST
1869     atomics_native
1870     dos_paths
1871     dxva2api_cobj
1872     dxva2_lib
1873     libc_msvcrt
1874     libdc1394_1
1875     libdc1394_2
1876     makeinfo
1877     makeinfo_html
1878     perl
1879     pod2man
1880     sdl
1881     section_data_rel_ro
1882     texi2html
1883     threads
1884     vaapi_x11
1885     vdpau_x11
1886     xlib
1887 "
1888
1889 # options emitted with CONFIG_ prefix but not available on the command line
1890 CONFIG_EXTRA="
1891     aandcttables
1892     ac3dsp
1893     audio_frame_queue
1894     audiodsp
1895     blockdsp
1896     bswapdsp
1897     cabac
1898     dvprofile
1899     exif
1900     faandct
1901     faanidct
1902     fdctdsp
1903     fmtconvert
1904     frame_thread_encoder
1905     gcrypt
1906     gmp
1907     golomb
1908     gplv3
1909     h263dsp
1910     h264chroma
1911     h264dsp
1912     h264pred
1913     h264qpel
1914     hpeldsp
1915     huffman
1916     huffyuvdsp
1917     huffyuvencdsp
1918     idctdsp
1919     iirfilter
1920     imdct15
1921     intrax8
1922     jpegtables
1923     lgplv3
1924     llauddsp
1925     llviddsp
1926     lpc
1927     me_cmp
1928     mpeg_er
1929     mpegaudio
1930     mpegaudiodsp
1931     mpegvideo
1932     mpegvideoenc
1933     pixblockdsp
1934     qpeldsp
1935     qsv
1936     qsvdec
1937     qsvenc
1938     rangecoder
1939     riffdec
1940     riffenc
1941     rtpdec
1942     rtpenc_chain
1943     sinewin
1944     snappy
1945     startcode
1946     texturedsp
1947     texturedspenc
1948     tpeldsp
1949     videodsp
1950     vp3dsp
1951     wma_freqs
1952 "
1953
1954 CMDLINE_SELECT="
1955     $ARCH_EXT_LIST
1956     $CONFIG_LIST
1957     $HAVE_LIST_CMDLINE
1958     $THREADS_LIST
1959     asm
1960     cross_compile
1961     debug
1962     extra_warnings
1963     logging
1964     lto
1965     optimizations
1966     rpath
1967     stripping
1968 "
1969
1970 PATHS_LIST="
1971     bindir
1972     datadir
1973     docdir
1974     incdir
1975     libdir
1976     mandir
1977     pkgconfigdir
1978     prefix
1979     shlibdir
1980 "
1981
1982 CMDLINE_SET="
1983     $PATHS_LIST
1984     ar
1985     arch
1986     as
1987     assert_level
1988     build_suffix
1989     cc
1990     cpu
1991     cross_prefix
1992     cxx
1993     dep_cc
1994     doxygen
1995     env
1996     extra_version
1997     gas
1998     host_cc
1999     host_cflags
2000     host_ld
2001     host_ldflags
2002     host_libs
2003     host_os
2004     install
2005     ld
2006     logfile
2007     malloc_prefix
2008     nm
2009     optflags
2010     pkg_config
2011     pkg_config_flags
2012     progs_suffix
2013     random_seed
2014     ranlib
2015     samples
2016     strip
2017     sws_max_filter_size
2018     sysinclude
2019     sysroot
2020     target_exec
2021     target_os
2022     target_path
2023     target_samples
2024     tempprefix
2025     toolchain
2026     valgrind
2027     yasmexe
2028 "
2029
2030 CMDLINE_APPEND="
2031     extra_cflags
2032     extra_cxxflags
2033     host_cppflags
2034 "
2035
2036 # code dependency declarations
2037
2038 # architecture extensions
2039
2040 armv5te_deps="arm"
2041 armv6_deps="arm"
2042 armv6t2_deps="arm"
2043 armv8_deps="aarch64"
2044 neon_deps_any="aarch64 arm"
2045 intrinsics_neon_deps="neon"
2046 vfp_deps_any="aarch64 arm"
2047 vfpv3_deps="vfp"
2048 setend_deps="arm"
2049
2050 map 'eval ${v}_inline_deps=inline_asm' $ARCH_EXT_LIST_ARM
2051
2052 mipsfpu_deps="mips"
2053 mipsdspr1_deps="mips"
2054 mipsdspr2_deps="mips"
2055 mips32r2_deps="mips"
2056 mips32r5_deps="mips"
2057 mips64r6_deps="mips"
2058 msa_deps="mips"
2059 mmi_deps="mips"
2060
2061 altivec_deps="ppc"
2062 dcbzl_deps="ppc"
2063 ldbrx_deps="ppc"
2064 ppc4xx_deps="ppc"
2065 vsx_deps="altivec"
2066 power8_deps="vsx"
2067
2068 cpunop_deps="i686"
2069 x86_64_select="i686"
2070 x86_64_suggest="fast_cmov"
2071
2072 amd3dnow_deps="mmx"
2073 amd3dnowext_deps="amd3dnow"
2074 i686_deps="x86"
2075 mmx_deps="x86"
2076 mmxext_deps="mmx"
2077 sse_deps="mmxext"
2078 sse2_deps="sse"
2079 sse3_deps="sse2"
2080 ssse3_deps="sse3"
2081 sse4_deps="ssse3"
2082 sse42_deps="sse4"
2083 avx_deps="sse42"
2084 xop_deps="avx"
2085 fma3_deps="avx"
2086 fma4_deps="avx"
2087 avx2_deps="avx"
2088
2089 mmx_external_deps="yasm"
2090 mmx_inline_deps="inline_asm"
2091 mmx_suggest="mmx_external mmx_inline"
2092
2093 for ext in $(filter_out mmx $ARCH_EXT_LIST_X86_SIMD); do
2094     eval dep=\$${ext}_deps
2095     eval ${ext}_external_deps='"${dep}_external"'
2096     eval ${ext}_inline_deps='"${dep}_inline"'
2097     eval ${ext}_suggest='"${ext}_external ${ext}_inline"'
2098 done
2099
2100 aligned_stack_if_any="aarch64 ppc x86"
2101 fast_64bit_if_any="aarch64 alpha ia64 mips64 parisc64 ppc64 sparc64 x86_64"
2102 fast_clz_if_any="aarch64 alpha avr32 mips ppc x86"
2103 fast_unaligned_if_any="aarch64 ppc x86"
2104 simd_align_16_if_any="altivec neon sse"
2105
2106 # system capabilities
2107 symver_if_any="symver_asm_label symver_gnu_asm"
2108 valgrind_backtrace_deps="!optimizations valgrind_valgrind_h"
2109
2110 # threading support
2111 atomics_gcc_if_any="sync_val_compare_and_swap atomic_compare_exchange"
2112 atomics_suncc_if="atomic_cas_ptr machine_rw_barrier"
2113 atomics_win32_if="MemoryBarrier"
2114 atomics_native_if_any="$ATOMICS_LIST"
2115 w32threads_deps="atomics_native"
2116 threads_if_any="$THREADS_LIST"
2117
2118 # subsystems
2119 dct_select="rdft"
2120 error_resilience_select="me_cmp"
2121 faandct_deps="faan fdctdsp"
2122 faanidct_deps="faan idctdsp"
2123 frame_thread_encoder_deps="encoders threads"
2124 intrax8_select="error_resilience"
2125 mdct_select="fft"
2126 rdft_select="fft"
2127 me_cmp_select="fdctdsp idctdsp pixblockdsp"
2128 mpeg_er_select="error_resilience"
2129 mpegaudio_select="mpegaudiodsp"
2130 mpegaudiodsp_select="dct"
2131 mpegvideo_select="blockdsp h264chroma hpeldsp idctdsp me_cmp videodsp"
2132 mpegvideoenc_select="me_cmp mpegvideo pixblockdsp qpeldsp"
2133 qsvdec_select="qsv"
2134 qsvenc_select="qsv"
2135
2136 # decoders / encoders
2137 aac_decoder_select="imdct15 mdct sinewin"
2138 aac_fixed_decoder_select="mdct sinewin"
2139 aac_encoder_select="audio_frame_queue iirfilter mdct sinewin"
2140 aac_latm_decoder_select="aac_decoder aac_latm_parser"
2141 ac3_decoder_select="ac3_parser ac3dsp bswapdsp fmtconvert mdct"
2142 ac3_fixed_decoder_select="ac3_parser ac3dsp bswapdsp mdct"
2143 ac3_encoder_select="ac3dsp audiodsp mdct me_cmp"
2144 ac3_fixed_encoder_select="ac3dsp audiodsp mdct me_cmp"
2145 aic_decoder_select="golomb idctdsp"
2146 alac_encoder_select="lpc"
2147 als_decoder_select="bswapdsp"
2148 amrnb_decoder_select="lsp"
2149 amrwb_decoder_select="lsp"
2150 amv_decoder_select="sp5x_decoder exif"
2151 amv_encoder_select="aandcttables jpegtables mpegvideoenc"
2152 ape_decoder_select="bswapdsp llauddsp"
2153 apng_decoder_select="zlib"
2154 apng_encoder_select="huffyuvencdsp zlib"
2155 asv1_decoder_select="blockdsp bswapdsp idctdsp"
2156 asv1_encoder_select="bswapdsp fdctdsp pixblockdsp"
2157 asv2_decoder_select="blockdsp bswapdsp idctdsp"
2158 asv2_encoder_select="bswapdsp fdctdsp pixblockdsp"
2159 atrac1_decoder_select="mdct sinewin"
2160 atrac3_decoder_select="mdct"
2161 atrac3p_decoder_select="mdct sinewin"
2162 avrn_decoder_select="exif jpegtables"
2163 bink_decoder_select="blockdsp hpeldsp"
2164 binkaudio_dct_decoder_select="mdct rdft dct sinewin wma_freqs"
2165 binkaudio_rdft_decoder_select="mdct rdft sinewin wma_freqs"
2166 cavs_decoder_select="blockdsp golomb h264chroma idctdsp qpeldsp videodsp"
2167 cllc_decoder_select="bswapdsp"
2168 comfortnoise_encoder_select="lpc"
2169 cook_decoder_select="audiodsp mdct sinewin"
2170 cscd_decoder_select="lzo"
2171 cscd_decoder_suggest="zlib"
2172 dca_decoder_select="fmtconvert mdct"
2173 dds_decoder_select="texturedsp"
2174 dirac_decoder_select="dwt golomb videodsp mpegvideoenc"
2175 dnxhd_decoder_select="blockdsp idctdsp"
2176 dnxhd_encoder_select="aandcttables blockdsp fdctdsp idctdsp mpegvideoenc pixblockdsp"
2177 dvvideo_decoder_select="dvprofile idctdsp"
2178 dvvideo_encoder_select="dvprofile fdctdsp me_cmp pixblockdsp"
2179 dxa_decoder_select="zlib"
2180 eac3_decoder_select="ac3_decoder"
2181 eac3_encoder_select="ac3_encoder"
2182 eamad_decoder_select="aandcttables blockdsp bswapdsp idctdsp mpegvideo"
2183 eatgq_decoder_select="aandcttables"
2184 eatqi_decoder_select="aandcttables blockdsp bswapdsp idctdsp mpeg1video_decoder"
2185 exr_decoder_select="zlib"
2186 ffv1_decoder_select="golomb rangecoder"
2187 ffv1_encoder_select="rangecoder"
2188 ffvhuff_decoder_select="huffyuv_decoder"
2189 ffvhuff_encoder_select="huffyuv_encoder"
2190 fic_decoder_select="golomb"
2191 flac_decoder_select="golomb"
2192 flac_encoder_select="bswapdsp golomb lpc"
2193 flashsv_decoder_select="zlib"
2194 flashsv_encoder_select="zlib"
2195 flashsv2_encoder_select="zlib"
2196 flashsv2_decoder_select="zlib"
2197 flv_decoder_select="h263_decoder"
2198 flv_encoder_select="h263_encoder"
2199 fourxm_decoder_select="blockdsp bswapdsp"
2200 fraps_decoder_select="bswapdsp huffman"
2201 g2m_decoder_select="blockdsp idctdsp jpegtables zlib"
2202 g729_decoder_select="audiodsp"
2203 h261_decoder_select="mpeg_er mpegvideo"
2204 h261_encoder_select="aandcttables mpegvideoenc"
2205 h263_decoder_select="error_resilience h263_parser h263dsp mpeg_er mpegvideo qpeldsp"
2206 h263_encoder_select="aandcttables h263dsp mpegvideoenc"
2207 h263i_decoder_select="h263_decoder"
2208 h263p_decoder_select="h263_decoder"
2209 h263p_encoder_select="h263_encoder"
2210 h264_decoder_select="cabac golomb h264chroma h264dsp h264pred h264qpel startcode videodsp"
2211 h264_decoder_suggest="error_resilience"
2212 h264_qsv_decoder_deps="libmfx"
2213 h264_qsv_decoder_select="h264_mp4toannexb_bsf h264_parser qsvdec h264_qsv_hwaccel"
2214 h264_qsv_encoder_deps="libmfx"
2215 h264_qsv_encoder_select="qsvenc"
2216 hap_decoder_select="snappy texturedsp"
2217 hap_encoder_deps="libsnappy"
2218 hap_encoder_select="texturedspenc"
2219 hevc_decoder_select="bswapdsp cabac golomb videodsp"
2220 hevc_qsv_encoder_deps="libmfx"
2221 hevc_qsv_encoder_select="qsvenc"
2222 huffyuv_decoder_select="bswapdsp huffyuvdsp llviddsp"
2223 huffyuv_encoder_select="bswapdsp huffman huffyuvencdsp llviddsp"
2224 iac_decoder_select="imc_decoder"
2225 imc_decoder_select="bswapdsp fft mdct sinewin"
2226 indeo3_decoder_select="hpeldsp"
2227 interplay_video_decoder_select="hpeldsp"
2228 jpegls_decoder_select="golomb mjpeg_decoder"
2229 jpegls_encoder_select="golomb"
2230 jv_decoder_select="blockdsp"
2231 lagarith_decoder_select="huffyuvdsp"
2232 ljpeg_encoder_select="aandcttables idctdsp jpegtables"
2233 loco_decoder_select="golomb"
2234 mdec_decoder_select="blockdsp idctdsp mpegvideo"
2235 metasound_decoder_select="lsp mdct sinewin"
2236 mimic_decoder_select="blockdsp bswapdsp hpeldsp idctdsp"
2237 mjpeg_decoder_select="blockdsp hpeldsp exif idctdsp jpegtables"
2238 mjpeg_encoder_select="aandcttables jpegtables mpegvideoenc"
2239 mjpegb_decoder_select="mjpeg_decoder"
2240 mlp_decoder_select="mlp_parser"
2241 motionpixels_decoder_select="bswapdsp"
2242 mp1_decoder_select="mpegaudio"
2243 mp1float_decoder_select="mpegaudio"
2244 mp2_decoder_select="mpegaudio"
2245 mp2float_decoder_select="mpegaudio"
2246 mp3_decoder_select="mpegaudio"
2247 mp3adu_decoder_select="mpegaudio"
2248 mp3adufloat_decoder_select="mpegaudio"
2249 mp3float_decoder_select="mpegaudio"
2250 mp3on4_decoder_select="mpegaudio"
2251 mp3on4float_decoder_select="mpegaudio"
2252 mpc7_decoder_select="bswapdsp mpegaudiodsp"
2253 mpc8_decoder_select="mpegaudiodsp"
2254 mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h"
2255 mpeg_xvmc_decoder_select="mpeg2video_decoder"
2256 mpegvideo_decoder_select="error_resilience mpeg_er mpegvideo"
2257 mpeg1video_decoder_select="error_resilience mpeg_er mpegvideo"
2258 mpeg1video_encoder_select="aandcttables mpegvideoenc h263dsp"
2259 mpeg2video_decoder_select="error_resilience mpeg_er mpegvideo"
2260 mpeg2video_encoder_select="aandcttables mpegvideoenc h263dsp"
2261 mpeg2_qsv_encoder_deps="libmfx"
2262 mpeg2_qsv_encoder_select="qsvenc"
2263 mpeg4_decoder_select="h263_decoder mpeg4video_parser"
2264 mpeg4_encoder_select="h263_encoder"
2265 msmpeg4v1_decoder_select="h263_decoder"
2266 msmpeg4v2_decoder_select="h263_decoder"
2267 msmpeg4v2_encoder_select="h263_encoder"
2268 msmpeg4v3_decoder_select="h263_decoder"
2269 msmpeg4v3_encoder_select="h263_encoder"
2270 mss2_decoder_select="error_resilience mpeg_er qpeldsp vc1_decoder"
2271 mxpeg_decoder_select="mjpeg_decoder"
2272 nellymoser_decoder_select="mdct sinewin"
2273 nellymoser_encoder_select="audio_frame_queue mdct sinewin"
2274 nuv_decoder_select="idctdsp lzo"
2275 on2avc_decoder_select="mdct"
2276 opus_decoder_deps="swresample"
2277 opus_decoder_select="imdct15"
2278 png_decoder_select="zlib"
2279 png_encoder_select="huffyuvencdsp zlib"
2280 prores_decoder_select="blockdsp idctdsp"
2281 prores_encoder_select="fdctdsp"
2282 qcelp_decoder_select="lsp"
2283 qdm2_decoder_select="mdct rdft mpegaudiodsp"
2284 ra_144_encoder_select="audio_frame_queue lpc audiodsp"
2285 ra_144_decoder_select="audiodsp"
2286 ralf_decoder_select="golomb"
2287 rawvideo_decoder_select="bswapdsp"
2288 rtjpeg_decoder_select="me_cmp"
2289 rv10_decoder_select="error_resilience h263_decoder h263dsp mpeg_er"
2290 rv10_encoder_select="h263_encoder"
2291 rv20_decoder_select="error_resilience h263_decoder h263dsp mpeg_er"
2292 rv20_encoder_select="h263_encoder"
2293 rv30_decoder_select="error_resilience golomb h264chroma h264pred h264qpel mpeg_er mpegvideo videodsp"
2294 rv40_decoder_select="error_resilience golomb h264chroma h264pred h264qpel mpeg_er mpegvideo videodsp"
2295 shorten_decoder_select="golomb"
2296 sipr_decoder_select="lsp"
2297 snow_decoder_select="dwt h264qpel hpeldsp me_cmp rangecoder videodsp"
2298 snow_encoder_select="aandcttables dwt h264qpel hpeldsp me_cmp mpegvideoenc rangecoder"
2299 sonic_decoder_select="golomb rangecoder"
2300 sonic_encoder_select="golomb rangecoder"
2301 sonic_ls_encoder_select="golomb rangecoder"
2302 sp5x_decoder_select="mjpeg_decoder"
2303 svq1_decoder_select="hpeldsp"
2304 svq1_encoder_select="aandcttables hpeldsp me_cmp mpegvideoenc"
2305 svq3_decoder_select="h264_decoder hpeldsp tpeldsp"
2306 svq3_decoder_suggest="zlib"
2307 tak_decoder_select="audiodsp"
2308 tdsc_decoder_select="zlib mjpeg_decoder"
2309 theora_decoder_select="vp3_decoder"
2310 thp_decoder_select="mjpeg_decoder"
2311 tiff_decoder_suggest="zlib lzma"
2312 tiff_encoder_suggest="zlib"
2313 truehd_decoder_select="mlp_parser"
2314 truemotion2_decoder_select="bswapdsp"
2315 truespeech_decoder_select="bswapdsp"
2316 tscc_decoder_select="zlib"
2317 twinvq_decoder_select="mdct lsp sinewin"
2318 txd_decoder_select="texturedsp"
2319 utvideo_decoder_select="bswapdsp"
2320 utvideo_encoder_select="bswapdsp huffman huffyuvencdsp"
2321 vble_decoder_select="huffyuvdsp"
2322 vc1_decoder_select="blockdsp error_resilience h263_decoder h264chroma h264qpel intrax8 mpeg_er qpeldsp startcode"
2323 vc1image_decoder_select="vc1_decoder"
2324 vorbis_decoder_select="mdct"
2325 vorbis_encoder_select="mdct"
2326 vp3_decoder_select="hpeldsp vp3dsp videodsp"
2327 vp5_decoder_select="h264chroma hpeldsp videodsp vp3dsp"
2328 vp6_decoder_select="h264chroma hpeldsp huffman videodsp vp3dsp"
2329 vp6a_decoder_select="vp6_decoder"
2330 vp6f_decoder_select="vp6_decoder"
2331 vp7_decoder_select="h264pred videodsp"
2332 vp8_decoder_select="h264pred videodsp"
2333 vp9_decoder_select="videodsp vp9_parser"
2334 webp_decoder_select="vp8_decoder"
2335 wmalossless_decoder_select="llauddsp"
2336 wmapro_decoder_select="mdct sinewin wma_freqs"
2337 wmav1_decoder_select="mdct sinewin wma_freqs"
2338 wmav1_encoder_select="mdct sinewin wma_freqs"
2339 wmav2_decoder_select="mdct sinewin wma_freqs"
2340 wmav2_encoder_select="mdct sinewin wma_freqs"
2341 wmavoice_decoder_select="lsp rdft dct mdct sinewin"
2342 wmv1_decoder_select="h263_decoder"
2343 wmv1_encoder_select="h263_encoder"
2344 wmv2_decoder_select="blockdsp h263_decoder idctdsp intrax8 videodsp"
2345 wmv2_encoder_select="h263_encoder"
2346 wmv3_decoder_select="vc1_decoder"
2347 wmv3image_decoder_select="wmv3_decoder"
2348 zerocodec_decoder_select="zlib"
2349 zlib_decoder_select="zlib"
2350 zlib_encoder_select="zlib"
2351 zmbv_decoder_select="zlib"
2352 zmbv_encoder_select="zlib"
2353
2354 # hardware accelerators
2355 crystalhd_deps="libcrystalhd_libcrystalhd_if_h"
2356 d3d11va_deps="d3d11_h dxva_h ID3D11VideoDecoder"
2357 dxva2_deps="dxva2api_h DXVA2_ConfigPictureDecode"
2358 vaapi_deps="va_va_h"
2359 vda_deps="VideoDecodeAcceleration_VDADecoder_h pthreads"
2360 vda_extralibs="-framework CoreFoundation -framework VideoDecodeAcceleration -framework QuartzCore"
2361 vdpau_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
2362 xvmc_deps="X11_extensions_XvMClib_h"
2363
2364 h263_vaapi_hwaccel_deps="vaapi"
2365 h263_vaapi_hwaccel_select="h263_decoder"
2366 h263_vdpau_hwaccel_deps="vdpau"
2367 h263_vdpau_hwaccel_select="h263_decoder"
2368 h264_crystalhd_decoder_select="crystalhd h264_mp4toannexb_bsf h264_parser"
2369 h264_d3d11va_hwaccel_deps="d3d11va"
2370 h264_d3d11va_hwaccel_select="h264_decoder"
2371 h264_dxva2_hwaccel_deps="dxva2"
2372 h264_dxva2_hwaccel_select="h264_decoder"
2373 h264_mmal_decoder_deps="mmal"
2374 h264_mmal_hwaccel_deps="mmal"
2375 h264_mmal_decoder_select="h264_decoder"
2376 h264_mmal_encoder_deps="mmal"
2377 h264_qsv_hwaccel_deps="libmfx"
2378 h264_vaapi_hwaccel_deps="vaapi"
2379 h264_vaapi_hwaccel_select="h264_decoder"
2380 h264_vda_decoder_deps="vda"
2381 h264_vda_decoder_select="h264_decoder"
2382 h264_vda_hwaccel_deps="vda"
2383 h264_vda_hwaccel_select="h264_decoder"
2384 h264_vda_old_hwaccel_deps="vda"
2385 h264_vda_old_hwaccel_select="h264_decoder"
2386 h264_vdpau_decoder_deps="vdpau"
2387 h264_vdpau_decoder_select="h264_decoder"
2388 h264_vdpau_hwaccel_deps="vdpau"
2389 h264_vdpau_hwaccel_select="h264_decoder"
2390 hevc_d3d11va_hwaccel_deps="d3d11va DXVA_PicParams_HEVC"
2391 hevc_d3d11va_hwaccel_select="hevc_decoder"
2392 hevc_dxva2_hwaccel_deps="dxva2 DXVA_PicParams_HEVC"
2393 hevc_dxva2_hwaccel_select="hevc_decoder"
2394 hevc_vdpau_hwaccel_deps="vdpau VdpPictureInfoHEVC"
2395 hevc_vdpau_hwaccel_select="hevc_decoder"
2396 mpeg_vdpau_decoder_deps="vdpau"
2397 mpeg_vdpau_decoder_select="mpeg2video_decoder"
2398 mpeg_xvmc_hwaccel_deps="xvmc"
2399 mpeg_xvmc_hwaccel_select="mpeg2video_decoder"
2400 mpeg1_vdpau_decoder_deps="vdpau"
2401 mpeg1_vdpau_decoder_select="mpeg1video_decoder"
2402 mpeg1_vdpau_hwaccel_deps="vdpau"
2403 mpeg1_vdpau_hwaccel_select="mpeg1video_decoder"
2404 mpeg1_xvmc_hwaccel_deps="xvmc"
2405 mpeg1_xvmc_hwaccel_select="mpeg1video_decoder"
2406 mpeg2_crystalhd_decoder_select="crystalhd"
2407 mpeg2_d3d11va_hwaccel_deps="d3d11va"
2408 mpeg2_d3d11va_hwaccel_select="mpeg2video_decoder"
2409 mpeg2_dxva2_hwaccel_deps="dxva2"
2410 mpeg2_dxva2_hwaccel_select="mpeg2video_decoder"
2411 mpeg2_vaapi_hwaccel_deps="vaapi"
2412 mpeg2_vaapi_hwaccel_select="mpeg2video_decoder"
2413 mpeg2_vdpau_hwaccel_deps="vdpau"
2414 mpeg2_vdpau_hwaccel_select="mpeg2video_decoder"
2415 mpeg2_xvmc_hwaccel_deps="xvmc"
2416 mpeg2_xvmc_hwaccel_select="mpeg2video_decoder"
2417 mpeg4_crystalhd_decoder_select="crystalhd"
2418 mpeg4_vaapi_hwaccel_deps="vaapi"
2419 mpeg4_vaapi_hwaccel_select="mpeg4_decoder"
2420 mpeg4_vdpau_decoder_deps="vdpau"
2421 mpeg4_vdpau_decoder_select="mpeg4_decoder"
2422 mpeg4_vdpau_hwaccel_deps="vdpau"
2423 mpeg4_vdpau_hwaccel_select="mpeg4_decoder"
2424 msmpeg4_crystalhd_decoder_select="crystalhd"
2425 vc1_crystalhd_decoder_select="crystalhd"
2426 vc1_d3d11va_hwaccel_deps="d3d11va"
2427 vc1_d3d11va_hwaccel_select="vc1_decoder"
2428 vc1_dxva2_hwaccel_deps="dxva2"
2429 vc1_dxva2_hwaccel_select="vc1_decoder"
2430 vc1_vaapi_hwaccel_deps="vaapi"
2431 vc1_vaapi_hwaccel_select="vc1_decoder"
2432 vc1_vdpau_decoder_deps="vdpau"
2433 vc1_vdpau_decoder_select="vc1_decoder"
2434 vc1_vdpau_hwaccel_deps="vdpau"
2435 vc1_vdpau_hwaccel_select="vc1_decoder"
2436 wmv3_crystalhd_decoder_select="crystalhd"
2437 wmv3_d3d11va_hwaccel_select="vc1_d3d11va_hwaccel"
2438 wmv3_dxva2_hwaccel_select="vc1_dxva2_hwaccel"
2439 wmv3_vaapi_hwaccel_select="vc1_vaapi_hwaccel"
2440 wmv3_vdpau_decoder_select="vc1_vdpau_decoder"
2441 wmv3_vdpau_hwaccel_select="vc1_vdpau_hwaccel"
2442
2443 # parsers
2444 h264_parser_select="h264_decoder"
2445 hevc_parser_select="golomb"
2446 mpegvideo_parser_select="mpegvideo"
2447 mpeg4video_parser_select="error_resilience h263dsp mpeg_er mpegvideo qpeldsp"
2448 vc1_parser_select="mpegvideo startcode vc1_decoder"
2449
2450 # bitstream_filters
2451 mjpeg2jpeg_bsf_select="jpegtables"
2452
2453 # external libraries
2454 libaacplus_encoder_deps="libaacplus"
2455 libcelt_decoder_deps="libcelt"
2456 libdcadec_decoder_deps="libdcadec"
2457 libfaac_encoder_deps="libfaac"
2458 libfaac_encoder_select="audio_frame_queue"
2459 libfdk_aac_decoder_deps="libfdk_aac"
2460 libfdk_aac_encoder_deps="libfdk_aac"
2461 libfdk_aac_encoder_select="audio_frame_queue"
2462 libgme_demuxer_deps="libgme"
2463 libgsm_decoder_deps="libgsm"
2464 libgsm_encoder_deps="libgsm"
2465 libgsm_ms_decoder_deps="libgsm"
2466 libgsm_ms_encoder_deps="libgsm"
2467 libilbc_decoder_deps="libilbc"
2468 libilbc_encoder_deps="libilbc"
2469 libkvazaar_encoder_deps="libkvazaar"
2470 libmodplug_demuxer_deps="libmodplug"
2471 libmp3lame_encoder_deps="libmp3lame"
2472 libmp3lame_encoder_select="audio_frame_queue"
2473 libopencore_amrnb_decoder_deps="libopencore_amrnb"
2474 libopencore_amrnb_encoder_deps="libopencore_amrnb"
2475 libopencore_amrnb_encoder_select="audio_frame_queue"
2476 libopencore_amrwb_decoder_deps="libopencore_amrwb"
2477 libopenh264_encoder_deps="libopenh264"
2478 libopenjpeg_decoder_deps="libopenjpeg"
2479 libopenjpeg_encoder_deps="libopenjpeg"
2480 libopus_decoder_deps="libopus"
2481 libopus_encoder_deps="libopus"
2482 libopus_encoder_select="audio_frame_queue"
2483 libquvi_demuxer_deps="libquvi"
2484 libschroedinger_decoder_deps="libschroedinger"
2485 libschroedinger_encoder_deps="libschroedinger"
2486 libshine_encoder_deps="libshine"
2487 libshine_encoder_select="audio_frame_queue"
2488 libspeex_decoder_deps="libspeex"
2489 libspeex_encoder_deps="libspeex"
2490 libspeex_encoder_select="audio_frame_queue"
2491 libstagefright_h264_decoder_deps="libstagefright_h264"
2492 libtheora_encoder_deps="libtheora"
2493 libtwolame_encoder_deps="libtwolame"
2494 libvo_aacenc_encoder_deps="libvo_aacenc"
2495 libvo_aacenc_encoder_select="audio_frame_queue"
2496 libvo_amrwbenc_encoder_deps="libvo_amrwbenc"
2497 libvorbis_decoder_deps="libvorbis"
2498 libvorbis_encoder_deps="libvorbis"
2499 libvorbis_encoder_select="audio_frame_queue"
2500 libvpx_vp8_decoder_deps="libvpx"
2501 libvpx_vp8_encoder_deps="libvpx"
2502 libvpx_vp9_decoder_deps="libvpx"
2503 libvpx_vp9_encoder_deps="libvpx"
2504 libwavpack_encoder_deps="libwavpack"
2505 libwebp_encoder_deps="libwebp"
2506 libwebp_anim_encoder_deps="libwebp"
2507 libx264_encoder_deps="libx264"
2508 libx264rgb_encoder_deps="libx264"
2509 libx264rgb_encoder_select="libx264_encoder"
2510 libx265_encoder_deps="libx265"
2511 libxavs_encoder_deps="libxavs"
2512 libxvid_encoder_deps="libxvid"
2513 libutvideo_decoder_deps="libutvideo"
2514 libutvideo_encoder_deps="libutvideo"
2515 libzvbi_teletext_decoder_deps="libzvbi"
2516 nvenc_encoder_deps="nvenc"
2517 nvenc_h264_encoder_deps="nvenc"
2518 nvenc_hevc_encoder_deps="nvenc"
2519
2520 # demuxers / muxers
2521 ac3_demuxer_select="ac3_parser"
2522 asf_demuxer_select="riffdec"
2523 asf_o_demuxer_select="riffdec"
2524 asf_muxer_select="riffenc"
2525 asf_stream_muxer_select="asf_muxer"
2526 avi_demuxer_select="riffdec exif"
2527 avi_muxer_select="riffenc"
2528 avisynth_demuxer_deps="avisynth"
2529 avisynth_demuxer_select="riffdec"
2530 caf_demuxer_select="riffdec"
2531 dash_muxer_select="mp4_muxer"
2532 dirac_demuxer_select="dirac_parser"
2533 dts_demuxer_select="dca_parser"
2534 dtshd_demuxer_select="dca_parser"
2535 dv_demuxer_select="dvprofile"
2536 dv_muxer_select="dvprofile"
2537 dxa_demuxer_select="riffdec"
2538 eac3_demuxer_select="ac3_parser"
2539 f4v_muxer_select="mov_muxer"
2540 flac_demuxer_select="flac_parser"
2541 hds_muxer_select="flv_muxer"
2542 hls_muxer_select="mpegts_muxer"
2543 image2_alias_pix_demuxer_select="image2_demuxer"
2544 image2_brender_pix_demuxer_select="image2_demuxer"
2545 ipod_muxer_select="mov_muxer"
2546 ismv_muxer_select="mov_muxer"
2547 libnut_demuxer_deps="libnut"
2548 libnut_muxer_deps="libnut"
2549 matroska_audio_muxer_select="matroska_muxer"
2550 matroska_demuxer_select="riffdec"
2551 matroska_demuxer_suggest="bzlib lzo zlib"
2552 matroska_muxer_select="riffenc"
2553 mmf_muxer_select="riffenc"
2554 mov_demuxer_select="riffdec"
2555 mov_demuxer_suggest="zlib"
2556 mov_muxer_select="riffenc rtpenc_chain"
2557 mp3_demuxer_select="mpegaudio_parser"
2558 mp4_muxer_select="mov_muxer"
2559 mpegts_muxer_select="adts_muxer latm_muxer"
2560 mpegtsraw_demuxer_select="mpegts_demuxer"
2561 mxf_d10_muxer_select="mxf_muxer"
2562 mxf_opatom_muxer_select="mxf_muxer"
2563 nut_muxer_select="riffenc"
2564 nuv_demuxer_select="riffdec"
2565 oga_muxer_select="ogg_muxer"
2566 ogg_demuxer_select="golomb"
2567 opus_muxer_select="ogg_muxer"
2568 psp_muxer_select="mov_muxer"
2569 rtp_demuxer_select="sdp_demuxer"
2570 rtpdec_select="asf_demuxer jpegtables mov_demuxer mpegts_demuxer rm_demuxer rtp_protocol"
2571 rtsp_demuxer_select="http_protocol rtpdec"
2572 rtsp_muxer_select="rtp_muxer http_protocol rtp_protocol rtpenc_chain"
2573 sap_demuxer_select="sdp_demuxer"
2574 sap_muxer_select="rtp_muxer rtp_protocol rtpenc_chain"
2575 sdp_demuxer_select="rtpdec"
2576 smoothstreaming_muxer_select="ismv_muxer"
2577 spdif_muxer_select="aac_parser"
2578 spx_muxer_select="ogg_muxer"
2579 tak_demuxer_select="tak_parser"
2580 tg2_muxer_select="mov_muxer"
2581 tgp_muxer_select="mov_muxer"
2582 vobsub_demuxer_select="mpegps_demuxer"
2583 w64_demuxer_select="wav_demuxer"
2584 w64_muxer_select="wav_muxer"
2585 wav_demuxer_select="riffdec"
2586 wav_muxer_select="riffenc"
2587 webm_muxer_select="riffenc"
2588 wtv_demuxer_select="riffdec"
2589 wtv_muxer_select="riffenc"
2590 xmv_demuxer_select="riffdec"
2591 xwma_demuxer_select="riffdec"
2592
2593 # indevs / outdevs
2594 alsa_indev_deps="alsa_asoundlib_h snd_pcm_htimestamp"
2595 alsa_outdev_deps="alsa_asoundlib_h"
2596 avfoundation_indev_extralibs="-framework CoreVideo -framework Foundation -framework AVFoundation -framework CoreMedia"
2597 avfoundation_indev_select="avfoundation"
2598 bktr_indev_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
2599 caca_outdev_deps="libcaca"
2600 decklink_outdev_deps="decklink pthreads"
2601 decklink_outdev_extralibs="-lstdc++"
2602 decklink_indev_deps="decklink pthreads"
2603 decklink_indev_extralibs="-lstdc++"
2604 dshow_indev_deps="IBaseFilter"
2605 dshow_indev_extralibs="-lpsapi -lole32 -lstrmiids -luuid -loleaut32 -lshlwapi"
2606 dv1394_indev_deps="dv1394"
2607 dv1394_indev_select="dv_demuxer"
2608 fbdev_indev_deps="linux_fb_h"
2609 fbdev_outdev_deps="linux_fb_h"
2610 gdigrab_indev_deps="CreateDIBSection"
2611 gdigrab_indev_extralibs="-lgdi32"
2612 gdigrab_indev_select="bmp_decoder"
2613 iec61883_indev_deps="libiec61883"
2614 jack_indev_deps="jack_jack_h sem_timedwait"
2615 lavfi_indev_deps="avfilter"
2616 libcdio_indev_deps="libcdio"
2617 libdc1394_indev_deps="libdc1394"
2618 libv4l2_indev_deps="libv4l2"
2619 openal_indev_deps="openal"
2620 opengl_outdev_deps="opengl"
2621 oss_indev_deps_any="soundcard_h sys_soundcard_h"
2622 oss_outdev_deps_any="soundcard_h sys_soundcard_h"
2623 pulse_indev_deps="libpulse"
2624 pulse_outdev_deps="libpulse"
2625 qtkit_indev_extralibs="-framework QTKit -framework Foundation -framework QuartzCore"
2626 qtkit_indev_select="qtkit"
2627 sdl_outdev_deps="sdl"
2628 sndio_indev_deps="sndio_h"
2629 sndio_outdev_deps="sndio_h"
2630 v4l_indev_deps="linux_videodev_h"
2631 v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h"
2632 v4l2_outdev_deps_any="linux_videodev2_h sys_videoio_h"
2633 vfwcap_indev_deps="capCreateCaptureWindow vfwcap_defines"
2634 vfwcap_indev_extralibs="-lavicap32"
2635 xv_outdev_deps="X11_extensions_Xvlib_h XvGetPortAttribute"
2636 xv_outdev_extralibs="-lXv -lX11 -lXext"
2637 x11grab_indev_deps="x11grab"
2638 x11grab_xcb_indev_deps="libxcb"
2639
2640 # protocols
2641 bluray_protocol_deps="libbluray"
2642 ffrtmpcrypt_protocol_deps="!librtmp_protocol"
2643 ffrtmpcrypt_protocol_deps_any="gcrypt gmp openssl"
2644 ffrtmpcrypt_protocol_select="tcp_protocol"
2645 ffrtmphttp_protocol_deps="!librtmp_protocol"
2646 ffrtmphttp_protocol_select="http_protocol"
2647 ftp_protocol_select="tcp_protocol"
2648 gopher_protocol_select="network"
2649 http_protocol_select="tcp_protocol"
2650 httpproxy_protocol_select="tcp_protocol"
2651 https_protocol_select="tls_protocol"
2652 icecast_protocol_select="http_protocol"
2653 librtmp_protocol_deps="librtmp"
2654 librtmpe_protocol_deps="librtmp"
2655 librtmps_protocol_deps="librtmp"
2656 librtmpt_protocol_deps="librtmp"
2657 librtmpte_protocol_deps="librtmp"
2658 libsmbclient_protocol_deps="libsmbclient gplv3"
2659 libssh_protocol_deps="libssh"
2660 mmsh_protocol_select="http_protocol"
2661 mmst_protocol_select="network"
2662 rtmp_protocol_deps="!librtmp_protocol"
2663 rtmp_protocol_select="tcp_protocol"
2664 rtmpe_protocol_select="ffrtmpcrypt_protocol"
2665 rtmps_protocol_deps="!librtmp_protocol"
2666 rtmps_protocol_select="tls_protocol"
2667 rtmpt_protocol_select="ffrtmphttp_protocol"
2668 rtmpte_protocol_select="ffrtmpcrypt_protocol ffrtmphttp_protocol"
2669 rtmpts_protocol_select="ffrtmphttp_protocol https_protocol"
2670 rtp_protocol_select="udp_protocol"
2671 sctp_protocol_deps="struct_sctp_event_subscribe"
2672 sctp_protocol_select="network"
2673 srtp_protocol_select="rtp_protocol"
2674 tcp_protocol_select="network"
2675 tls_gnutls_protocol_deps="gnutls !tls_securetransport_protocol"
2676 tls_gnutls_protocol_select="tcp_protocol"
2677 tls_openssl_protocol_deps="openssl !tls_securetransport_protocol !tls_gnutls_protocol"
2678 tls_openssl_protocol_select="tcp_protocol"
2679 tls_securetransport_protocol_deps="securetransport"
2680 tls_securetransport_protocol_select="tcp_protocol"
2681 tls_protocol_deps_any="tls_securetransport_protocol tls_gnutls_protocol tls_openssl_protocol"
2682 udp_protocol_select="network"
2683 udplite_protocol_select="network"
2684 unix_protocol_deps="sys_un_h"
2685 unix_protocol_select="network"
2686
2687 # filters
2688 amovie_filter_deps="avcodec avformat"
2689 aresample_filter_deps="swresample"
2690 ass_filter_deps="libass"
2691 asyncts_filter_deps="avresample"
2692 atempo_filter_deps="avcodec"
2693 atempo_filter_select="rdft"
2694 azmq_filter_deps="libzmq"
2695 blackframe_filter_deps="gpl"
2696 boxblur_filter_deps="gpl"
2697 bs2b_filter_deps="libbs2b"
2698 colormatrix_filter_deps="gpl"
2699 cover_rect_filter_deps="avcodec avformat gpl"
2700 cropdetect_filter_deps="gpl"
2701 delogo_filter_deps="gpl"
2702 deshake_filter_select="pixelutils"
2703 drawtext_filter_deps="libfreetype"
2704 ebur128_filter_deps="gpl"
2705 eq_filter_deps="gpl"
2706 fftfilt_filter_deps="avcodec"
2707 fftfilt_filter_select="rdft"
2708 flite_filter_deps="libflite"
2709 find_rect_filter_deps="avcodec avformat gpl"
2710 frei0r_filter_deps="frei0r dlopen"
2711 frei0r_src_filter_deps="frei0r dlopen"
2712 fspp_filter_deps="gpl"
2713 geq_filter_deps="gpl"
2714 histeq_filter_deps="gpl"
2715 hqdn3d_filter_deps="gpl"
2716 interlace_filter_deps="gpl"
2717 kerndeint_filter_deps="gpl"
2718 ladspa_filter_deps="ladspa dlopen"
2719 mcdeint_filter_deps="avcodec gpl"
2720 movie_filter_deps="avcodec avformat"
2721 mpdecimate_filter_deps="gpl"
2722 mpdecimate_filter_select="pixelutils"
2723 mptestsrc_filter_deps="gpl"
2724 negate_filter_deps="lut_filter"
2725 perspective_filter_deps="gpl"
2726 pp7_filter_deps="gpl"
2727 ocv_filter_deps="libopencv"
2728 owdenoise_filter_deps="gpl"
2729 pan_filter_deps="swresample"
2730 phase_filter_deps="gpl"
2731 pp_filter_deps="gpl postproc"
2732 pullup_filter_deps="gpl"
2733 removelogo_filter_deps="avcodec avformat swscale"
2734 repeatfields_filter_deps="gpl"
2735 resample_filter_deps="avresample"
2736 sab_filter_deps="gpl swscale"
2737 scale_filter_deps="swscale"
2738 select_filter_select="pixelutils"
2739 smartblur_filter_deps="gpl swscale"
2740 showcqt_filter_deps="avcodec"
2741 showcqt_filter_select="fft"
2742 showspectrum_filter_deps="avcodec"
2743 showspectrum_filter_select="rdft"
2744 spp_filter_deps="gpl avcodec"
2745 spp_filter_select="fft idctdsp fdctdsp me_cmp pixblockdsp"
2746 stereo3d_filter_deps="gpl"
2747 subtitles_filter_deps="avformat avcodec libass"
2748 super2xsai_filter_deps="gpl"
2749 tinterlace_filter_deps="gpl"
2750 vidstabdetect_filter_deps="libvidstab"
2751 vidstabtransform_filter_deps="libvidstab"
2752 pixfmts_super2xsai_test_deps="super2xsai_filter"
2753 tinterlace_merge_test_deps="tinterlace_filter"
2754 tinterlace_pad_test_deps="tinterlace_filter"
2755 uspp_filter_deps="gpl avcodec"
2756 zmq_filter_deps="libzmq"
2757 zoompan_filter_deps="swscale"
2758
2759 # examples
2760 avio_reading="avformat avcodec avutil"
2761 avio_list_dir="avformat avutil"
2762 avcodec_example_deps="avcodec avutil"
2763 decoding_encoding_example_deps="avcodec avformat avutil"
2764 demuxing_decoding_example_deps="avcodec avformat avutil"
2765 extract_mvs_example_deps="avcodec avformat avutil"
2766 filter_audio_example_deps="avfilter avutil"
2767 filtering_audio_example_deps="avfilter avcodec avformat avutil"
2768 filtering_video_example_deps="avfilter avcodec avformat avutil"
2769 metadata_example_deps="avformat avutil"
2770 muxing_example_deps="avcodec avformat avutil swscale"
2771 qsvdec_example_deps="avcodec avutil libmfx h264_qsv_decoder vaapi_x11"
2772 remuxing_example_deps="avcodec avformat avutil"
2773 resampling_audio_example_deps="avutil swresample"
2774 scaling_video_example_deps="avutil swscale"
2775 transcode_aac_example_deps="avcodec avformat swresample"
2776 transcoding_example_deps="avfilter avcodec avformat avutil"
2777
2778 # libraries, in linking order
2779 avcodec_deps="avutil"
2780 avdevice_deps="avformat avcodec avutil"
2781 avfilter_deps="avutil"
2782 avformat_deps="avcodec avutil"
2783 avresample_deps="avutil"
2784 postproc_deps="avutil gpl"
2785 swresample_deps="avutil"
2786 swscale_deps="avutil"
2787
2788 # programs
2789 ffmpeg_deps="avcodec avfilter avformat swresample"
2790 ffmpeg_select="aformat_filter anull_filter atrim_filter format_filter
2791                null_filter
2792                setpts_filter trim_filter"
2793 ffplay_deps="avcodec avformat swscale swresample sdl"
2794 ffplay_libs='$sdl_libs'
2795 ffplay_select="rdft crop_filter transpose_filter hflip_filter vflip_filter rotate_filter"
2796 ffprobe_deps="avcodec avformat"
2797 ffserver_deps="avformat fork sarestart"
2798 ffserver_select="ffm_muxer rtp_protocol rtsp_demuxer"
2799
2800 # documentation
2801 podpages_deps="perl"
2802 manpages_deps="perl pod2man"
2803 htmlpages_deps="perl"
2804 htmlpages_deps_any="makeinfo_html texi2html"
2805 txtpages_deps="perl makeinfo"
2806 doc_deps_any="manpages htmlpages podpages txtpages"
2807
2808 # default parameters
2809
2810 logfile="config.log"
2811
2812 # installation paths
2813 prefix_default="/usr/local"
2814 bindir_default='${prefix}/bin'
2815 datadir_default='${prefix}/share/ffmpeg'
2816 docdir_default='${prefix}/share/doc/ffmpeg'
2817 incdir_default='${prefix}/include'
2818 libdir_default='${prefix}/lib'
2819 mandir_default='${prefix}/share/man'
2820
2821 # toolchain
2822 ar_default="ar"
2823 cc_default="gcc"
2824 cxx_default="g++"
2825 host_cc_default="gcc"
2826 cp_f="cp -f"
2827 doxygen_default="doxygen"
2828 install="install"
2829 ln_s="ln -s -f"
2830 nm_default="nm -g"
2831 objformat="elf"
2832 pkg_config_default=pkg-config
2833 ranlib_default="ranlib"
2834 strip_default="strip"
2835 yasmexe_default="yasm"
2836 windres_default="windres"
2837
2838 # OS
2839 target_os_default=$(tolower $(uname -s))
2840 host_os=$target_os_default
2841
2842 # machine
2843 if test "$target_os_default" = aix; then
2844     arch_default=$(uname -p)
2845     strip_default="strip -X32_64"
2846 else
2847     arch_default=$(uname -m)
2848 fi
2849 cpu="generic"
2850 intrinsics="none"
2851
2852 # configurable options
2853 enable $PROGRAM_LIST
2854 enable $DOCUMENT_LIST
2855 enable $EXAMPLE_LIST
2856 enable $(filter_out avresample $LIBRARY_LIST)
2857 enable stripping
2858
2859 enable asm
2860 enable debug
2861 enable doc
2862 enable faan faandct faanidct
2863 enable optimizations
2864 enable runtime_cpudetect
2865 enable safe_bitstream_reader
2866 enable static
2867 enable swscale_alpha
2868 enable valgrind_backtrace
2869
2870 sws_max_filter_size_default=256
2871 set_default sws_max_filter_size
2872
2873 # Enable hwaccels by default.
2874 enable d3d11va dxva2 vaapi vda vdpau xvmc
2875 enable xlib
2876
2877 # build settings
2878 SHFLAGS='-shared -Wl,-soname,$$(@F)'
2879 LIBPREF="lib"
2880 LIBSUF=".a"
2881 FULLNAME='$(NAME)$(BUILDSUF)'
2882 LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
2883 SLIBPREF="lib"
2884 SLIBSUF=".so"
2885 SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
2886 SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
2887 SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
2888 LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
2889 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'
2890 SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR) $(SLIBNAME)'
2891
2892 asflags_filter=echo
2893 cflags_filter=echo
2894 ldflags_filter=echo
2895
2896 AS_C='-c'
2897 AS_O='-o $@'
2898 CC_C='-c'
2899 CC_E='-E -o $@'
2900 CC_O='-o $@'
2901 CXX_C='-c'
2902 CXX_O='-o $@'
2903 LD_O='-o $@'
2904 LD_LIB='-l%'
2905 LD_PATH='-L'
2906 HOSTCC_C='-c'
2907 HOSTCC_E='-E -o $@'
2908 HOSTCC_O='-o $@'
2909 HOSTLD_O='-o $@'
2910
2911 host_libs='-lm'
2912 host_cflags_filter=echo
2913 host_ldflags_filter=echo
2914
2915 target_path='$(CURDIR)'
2916
2917 # since the object filename is not given with the -MM flag, the compiler
2918 # is only able to print the basename, and we must add the path ourselves
2919 DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o," > $(@:.o=.d)'
2920 DEPFLAGS='-MM'
2921
2922 # find source path
2923 if test -f configure; then
2924     source_path=.
2925 else
2926     source_path=$(cd $(dirname "$0"); pwd)
2927     echo "$source_path" | grep -q '[[:blank:]]' &&
2928         die "Out of tree builds are impossible with whitespace in source path."
2929     test -e "$source_path/config.h" &&
2930         die "Out of tree builds are impossible with config.h in source dir."
2931 fi
2932
2933 for v in "$@"; do
2934     r=${v#*=}
2935     l=${v%"$r"}
2936     r=$(sh_quote "$r")
2937     FFMPEG_CONFIGURATION="${FFMPEG_CONFIGURATION# } ${l}${r}"
2938 done
2939
2940 find_things(){
2941     thing=$1
2942     pattern=$2
2943     file=$source_path/$3
2944     sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
2945 }
2946
2947 ENCODER_LIST=$(find_things  encoder  ENC      libavcodec/allcodecs.c)
2948 DECODER_LIST=$(find_things  decoder  DEC      libavcodec/allcodecs.c)
2949 HWACCEL_LIST=$(find_things  hwaccel  HWACCEL  libavcodec/allcodecs.c)
2950 PARSER_LIST=$(find_things   parser   PARSER   libavcodec/allcodecs.c)
2951 BSF_LIST=$(find_things      bsf      BSF      libavcodec/allcodecs.c)
2952 MUXER_LIST=$(find_things    muxer    _MUX     libavformat/allformats.c)
2953 DEMUXER_LIST=$(find_things  demuxer  DEMUX    libavformat/allformats.c)
2954 OUTDEV_LIST=$(find_things   outdev   OUTDEV   libavdevice/alldevices.c)
2955 INDEV_LIST=$(find_things    indev    _IN      libavdevice/alldevices.c)
2956 PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
2957 FILTER_LIST=$(find_things   filter   FILTER   libavfilter/allfilters.c)
2958
2959 ALL_COMPONENTS="
2960     $BSF_LIST
2961     $DECODER_LIST
2962     $DEMUXER_LIST
2963     $ENCODER_LIST
2964     $FILTER_LIST
2965     $HWACCEL_LIST
2966     $INDEV_LIST
2967     $MUXER_LIST
2968     $OUTDEV_LIST
2969     $PARSER_LIST
2970     $PROTOCOL_LIST
2971 "
2972
2973 for n in $COMPONENT_LIST; do
2974     v=$(toupper ${n%s})_LIST
2975     eval enable \$$v
2976     eval ${n}_if_any="\$$v"
2977 done
2978
2979 enable $ARCH_EXT_LIST
2980
2981 die_unknown(){
2982     echo "Unknown option \"$1\"."
2983     echo "See $0 --help for available options."
2984     exit 1
2985 }
2986
2987 print_3_columns() {
2988     cat | tr ' ' '\n' | sort | pr -r -3 -t
2989 }
2990
2991 show_list() {
2992     suffix=_$1
2993     shift
2994     echo $* | sed s/$suffix//g | print_3_columns
2995     exit 0
2996 }
2997
2998 rand_list(){
2999     IFS=', '
3000     set -- $*
3001     unset IFS
3002     for thing; do
3003         comp=${thing%:*}
3004         prob=${thing#$comp}
3005         prob=${prob#:}
3006         is_in ${comp} $COMPONENT_LIST && eval comp=\$$(toupper ${comp%s})_LIST
3007         echo "prob ${prob:-0.5}"
3008         printf '%s\n' $comp
3009     done
3010 }
3011
3012 do_random(){
3013     action=$1
3014     shift
3015     random_seed=$(awk "BEGIN { srand($random_seed); print srand() }")
3016     $action $(rand_list "$@" | awk "BEGIN { srand($random_seed) } \$1 == \"prob\" { prob = \$2; next } rand() < prob { print }")
3017 }
3018
3019 for opt do
3020     optval="${opt#*=}"
3021     case "$opt" in
3022         --extra-ldflags=*)
3023             add_ldflags $optval
3024         ;;
3025         --extra-ldexeflags=*)
3026             add_ldexeflags $optval
3027         ;;
3028         --extra-ldlibflags=*)
3029             add_ldlibflags $optval
3030         ;;
3031         --extra-libs=*)
3032             add_extralibs $optval
3033         ;;
3034         --disable-devices)
3035             disable $INDEV_LIST $OUTDEV_LIST
3036         ;;
3037         --enable-debug=*)
3038             debuglevel="$optval"
3039         ;;
3040         --disable-programs)
3041             disable $PROGRAM_LIST
3042         ;;
3043         --disable-everything)
3044             map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
3045         ;;
3046         --disable-all)
3047             map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
3048             disable $LIBRARY_LIST $PROGRAM_LIST doc
3049         ;;
3050         --enable-random|--disable-random)
3051             action=${opt%%-random}
3052             do_random ${action#--} $COMPONENT_LIST
3053         ;;
3054         --enable-random=*|--disable-random=*)
3055             action=${opt%%-random=*}
3056             do_random ${action#--} $optval
3057         ;;
3058         --enable-*=*|--disable-*=*)
3059             eval $(echo "${opt%%=*}" | sed 's/--/action=/;s/-/ thing=/')
3060             is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt"
3061             eval list=\$$(toupper $thing)_LIST
3062             name=$(echo "${optval}" | sed "s/,/_${thing}|/g")_${thing}
3063             list=$(filter "$name" $list)
3064             [ "$list" = "" ] && warn "Option $opt did not match anything"
3065             $action $list
3066         ;;
3067         --enable-?*|--disable-?*)
3068             eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
3069             if is_in $option $COMPONENT_LIST; then
3070                 test $action = disable && action=unset
3071                 eval $action \$$(toupper ${option%s})_LIST
3072             elif is_in $option $CMDLINE_SELECT; then
3073                 $action $option
3074             else
3075                 die_unknown $opt
3076             fi
3077         ;;
3078         --list-*)
3079             NAME="${opt#--list-}"
3080             is_in $NAME $COMPONENT_LIST || die_unknown $opt
3081             NAME=${NAME%s}
3082             eval show_list $NAME \$$(toupper $NAME)_LIST
3083         ;;
3084         --help|-h) show_help
3085         ;;
3086         --fatal-warnings) enable fatal_warnings
3087         ;;
3088         *)
3089             optname="${opt%%=*}"
3090             optname="${optname#--}"
3091             optname=$(echo "$optname" | sed 's/-/_/g')
3092             if is_in $optname $CMDLINE_SET; then
3093                 eval $optname='$optval'
3094             elif is_in $optname $CMDLINE_APPEND; then
3095                 append $optname "$optval"
3096             else
3097                 die_unknown $opt
3098             fi
3099         ;;
3100     esac
3101 done
3102
3103 for e in $env; do
3104     eval "export $e"
3105 done
3106
3107 disabled logging && logfile=/dev/null
3108
3109 echo "# $0 $FFMPEG_CONFIGURATION" > $logfile
3110 set >> $logfile
3111
3112 test -n "$valgrind" && toolchain="valgrind-memcheck"
3113
3114 case "$toolchain" in
3115     clang-asan)
3116         cc_default="clang"
3117         add_cflags  -fsanitize=address
3118         add_ldflags -fsanitize=address
3119     ;;
3120     clang-tsan)
3121         cc_default="clang"
3122         add_cflags  -fsanitize=thread -pie
3123         add_ldflags -fsanitize=thread -pie
3124     ;;
3125     clang-usan)
3126         cc_default="clang"
3127         add_cflags  -fsanitize=undefined
3128         add_ldflags -fsanitize=undefined
3129     ;;
3130     gcc-asan)
3131         cc_default="gcc"
3132         add_cflags  -fsanitize=address
3133         add_ldflags -fsanitize=address
3134     ;;
3135     gcc-tsan)
3136         cc_default="gcc"
3137         add_cflags  -fsanitize=thread -pie -fPIC
3138         add_ldflags -fsanitize=thread -pie -fPIC
3139     ;;
3140     gcc-usan)
3141         cc_default="gcc"
3142         add_cflags  -fsanitize=undefined
3143         add_ldflags -fsanitize=undefined
3144     ;;
3145     valgrind-massif)
3146         target_exec_default=${valgrind:-"valgrind"}
3147         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"
3148     ;;
3149     valgrind-memcheck)
3150         target_exec_default=${valgrind:-"valgrind"}
3151         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"
3152     ;;
3153     msvc)
3154         # Check whether the current MSVC version needs the C99 converter.
3155         # From MSVC 2013 (compiler major version 18) onwards, it does actually
3156         # support enough of C99 to build ffmpeg. Default to the new
3157         # behaviour if the regexp was unable to match anything, since this
3158         # successfully parses the version number of existing supported
3159         # versions that require the converter (MSVC 2010 and 2012).
3160         cl_major_ver=$(cl 2>&1 | sed -n 's/.*Version \([[:digit:]]\{1,\}\)\..*/\1/p')
3161         if [ -z "$cl_major_ver" ] || [ $cl_major_ver -ge 18 ]; then
3162             cc_default="cl"
3163         else
3164             cc_default="c99wrap cl"
3165         fi
3166         ld_default="link"
3167         nm_default="dumpbin -symbols"
3168         ar_default="lib"
3169         target_os_default="win32"
3170         # Use a relative path for TMPDIR. This makes sure all the
3171         # ffconf temp files are written with a relative path, avoiding
3172         # issues with msys/win32 path conversion for MSVC parameters
3173         # such as -Fo<file> or -out:<file>.
3174         TMPDIR=.
3175     ;;
3176     icl)
3177         cc_default="icl"
3178         ld_default="xilink"
3179         nm_default="dumpbin -symbols"
3180         ar_default="xilib"
3181         target_os_default="win32"
3182         TMPDIR=.
3183     ;;
3184     gcov)
3185         add_cflags  -fprofile-arcs -ftest-coverage
3186         add_ldflags -fprofile-arcs -ftest-coverage
3187     ;;
3188     hardened)
3189         add_cppflags -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2
3190         add_cflags   -fno-strict-overflow -fstack-protector-all
3191         add_ldflags  -Wl,-z,relro -Wl,-z,now
3192     ;;
3193     ?*)
3194         die "Unknown toolchain $toolchain"
3195     ;;
3196 esac
3197
3198 test -n "$cross_prefix" && enable cross_compile
3199
3200 if enabled cross_compile; then
3201     test -n "$arch" && test -n "$target_os" ||
3202         die "Must specify target arch and OS when cross-compiling"
3203 fi
3204
3205 ar_default="${cross_prefix}${ar_default}"
3206 cc_default="${cross_prefix}${cc_default}"
3207 cxx_default="${cross_prefix}${cxx_default}"
3208 nm_default="${cross_prefix}${nm_default}"
3209 pkg_config_default="${cross_prefix}${pkg_config_default}"
3210 if ${cross_prefix}${ranlib_default} 2>&1 | grep -q "\-D "; then
3211     ranlib_default="${cross_prefix}${ranlib_default} -D"
3212 else
3213     ranlib_default="${cross_prefix}${ranlib_default}"
3214 fi
3215 strip_default="${cross_prefix}${strip_default}"
3216 windres_default="${cross_prefix}${windres_default}"
3217
3218 sysinclude_default="${sysroot}/usr/include"
3219
3220 set_default arch cc cxx doxygen pkg_config ranlib strip sysinclude \
3221     target_exec target_os yasmexe
3222 enabled cross_compile || host_cc_default=$cc
3223 set_default host_cc
3224
3225 pkg_config_fail_message=""
3226 if ! $pkg_config --version >/dev/null 2>&1; then
3227     warn "$pkg_config not found, library detection may fail."
3228     pkg_config=false
3229 elif is_in -static $cc $LDFLAGS && ! is_in --static $pkg_config $pkg_config_flags; then
3230     pkg_config_fail_message="
3231 Note: When building a static binary, add --pkg-config-flags=\"--static\"."
3232 fi
3233
3234 if test $doxygen != $doxygen_default && \
3235   ! $doxygen --version >/dev/null 2>&1; then
3236     warn "Specified doxygen \"$doxygen\" not found, API documentation will fail to build."
3237 fi
3238
3239 exesuf() {
3240     case $1 in
3241         mingw32*|win32|win64|cygwin*|*-dos|freedos|opendos|os/2*|symbian) echo .exe ;;
3242     esac
3243 }
3244
3245 EXESUF=$(exesuf $target_os)
3246 HOSTEXESUF=$(exesuf $host_os)
3247
3248 # set temporary file name
3249 : ${TMPDIR:=$TEMPDIR}
3250 : ${TMPDIR:=$TMP}
3251 : ${TMPDIR:=/tmp}
3252
3253 if [ -n "$tempprefix" ] ; then
3254     mktemp(){
3255         echo $tempprefix.${HOSTNAME}.${UID}
3256     }
3257 elif ! check_cmd mktemp -u XXXXXX; then
3258     # simple replacement for missing mktemp
3259     # NOT SAFE FOR GENERAL USE
3260     mktemp(){
3261         echo "${2%%XXX*}.${HOSTNAME}.${UID}.$$"
3262     }
3263 fi
3264
3265 tmpfile(){
3266     tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
3267         (set -C; exec > $tmp) 2>/dev/null ||
3268         die "Unable to create temporary file in $TMPDIR."
3269     append TMPFILES $tmp
3270     eval $1=$tmp
3271 }
3272
3273 trap 'rm -f -- $TMPFILES' EXIT
3274
3275 tmpfile TMPASM .asm
3276 tmpfile TMPC   .c
3277 tmpfile TMPCPP .cpp
3278 tmpfile TMPE   $EXESUF
3279 tmpfile TMPH   .h
3280 tmpfile TMPM   .m
3281 tmpfile TMPO   .o
3282 tmpfile TMPS   .S
3283 tmpfile TMPSH  .sh
3284 tmpfile TMPV   .ver
3285
3286 unset -f mktemp
3287
3288 chmod +x $TMPE
3289
3290 # make sure we can execute files in $TMPDIR
3291 cat > $TMPSH 2>> $logfile <<EOF
3292 #! /bin/sh
3293 EOF
3294 chmod +x $TMPSH >> $logfile 2>&1
3295 if ! $TMPSH >> $logfile 2>&1; then
3296     cat <<EOF
3297 Unable to create and execute files in $TMPDIR.  Set the TMPDIR environment
3298 variable to another directory and make sure that it is not mounted noexec.
3299 EOF
3300     die "Sanity test failed."
3301 fi
3302
3303 armasm_flags(){
3304     for flag; do
3305         case $flag in
3306             # Filter out MSVC cl.exe options from cflags that shouldn't
3307             # be passed to gas-preprocessor
3308             -M[TD]*)                                            ;;
3309             *)                  echo $flag                      ;;
3310         esac
3311    done
3312 }
3313
3314 ccc_flags(){
3315     for flag; do
3316         case $flag in
3317             -std=c99)           echo -c99                       ;;
3318             -mcpu=*)            echo -arch ${flag#*=}           ;;
3319             -mieee)             echo -ieee                      ;;
3320             -O*|-fast)          echo $flag                      ;;
3321             -fno-math-errno)    echo -assume nomath_errno       ;;
3322             -g)                 echo -g3                        ;;
3323             -Wall)              echo -msg_enable level2         ;;
3324             -Wno-pointer-sign)  echo -msg_disable ptrmismatch1  ;;
3325             -Wl,*)              echo $flag                      ;;
3326             -f*|-W*)                                            ;;
3327             *)                  echo $flag                      ;;
3328         esac
3329    done
3330 }
3331
3332 cparser_flags(){
3333     for flag; do
3334         case $flag in
3335             -Wno-switch)             echo -Wno-switch-enum ;;
3336             -Wno-format-zero-length) ;;
3337             -Wdisabled-optimization) ;;
3338             -Wno-pointer-sign)       echo -Wno-other ;;
3339             *)                       echo $flag ;;
3340         esac
3341     done
3342 }
3343
3344 msvc_common_flags(){
3345     for flag; do
3346         case $flag in
3347             # In addition to specifying certain flags under the compiler
3348             # specific filters, they must be specified here as well or else the
3349             # generic catch all at the bottom will print the original flag.
3350             -Wall)                ;;
3351             -std=c99)             ;;
3352             # Common flags
3353             -fomit-frame-pointer) ;;
3354             -g)                   echo -Z7 ;;
3355             -fno-math-errno)      ;;
3356             -fno-common)          ;;
3357             -fno-signed-zeros)    ;;
3358             -fPIC)                ;;
3359             -mthumb)              ;;
3360             -march=*)             ;;
3361             -lz)                  echo zlib.lib ;;
3362             -lavifil32)           echo vfw32.lib ;;
3363             -lavicap32)           echo vfw32.lib user32.lib ;;
3364             -l*)                  echo ${flag#-l}.lib ;;
3365             -L*)                  echo -libpath:${flag#-L} ;;
3366             *)                    echo $flag ;;
3367         esac
3368     done
3369 }
3370
3371 msvc_flags(){
3372     msvc_common_flags "$@"
3373     for flag; do
3374         case $flag in
3375             -Wall)                echo -W4 -wd4244 -wd4127 -wd4018 -wd4389     \
3376                                        -wd4146 -wd4057 -wd4204 -wd4706 -wd4305 \
3377                                        -wd4152 -wd4324 -we4013 -wd4100 -wd4214 \
3378                                        -wd4307 \
3379                                        -wd4273 -wd4554 -wd4701 ;;
3380         esac
3381     done
3382 }
3383
3384 icl_flags(){
3385     msvc_common_flags "$@"
3386     for flag; do
3387         case $flag in
3388             # Despite what Intel's documentation says -Wall, which is supported
3389             # on Windows, does enable remarks so disable them here.
3390             -Wall)                echo $flag -Qdiag-disable:remark ;;
3391             -std=c99)             echo -Qstd=c99 ;;
3392             -flto)                echo -ipo ;;
3393         esac
3394     done
3395 }
3396
3397 icc_flags(){
3398     for flag; do
3399         case $flag in
3400             -flto)                echo -ipo ;;
3401             *)                    echo $flag ;;
3402         esac
3403     done
3404 }
3405
3406 pgi_flags(){
3407     for flag; do
3408         case $flag in
3409             -flto)                echo -Mipa=fast,libopt,libinline,vestigial ;;
3410             -fomit-frame-pointer) echo -Mnoframe ;;
3411             -g)                   echo -gopt ;;
3412             *)                    echo $flag ;;
3413         esac
3414     done
3415 }
3416
3417 suncc_flags(){
3418     for flag; do
3419         case $flag in
3420             -march=*|-mcpu=*)
3421                 case "${flag#*=}" in
3422                     native)                   echo -xtarget=native       ;;
3423                     v9|niagara)               echo -xarch=sparc          ;;
3424                     ultrasparc)               echo -xarch=sparcvis       ;;
3425                     ultrasparc3|niagara2)     echo -xarch=sparcvis2      ;;
3426                     i586|pentium)             echo -xchip=pentium        ;;
3427                     i686|pentiumpro|pentium2) echo -xtarget=pentium_pro  ;;
3428                     pentium3*|c3-2)           echo -xtarget=pentium3     ;;
3429                     pentium-m)          echo -xarch=sse2 -xchip=pentium3 ;;
3430                     pentium4*)          echo -xtarget=pentium4           ;;
3431                     prescott|nocona)    echo -xarch=sse3 -xchip=pentium4 ;;
3432                     *-sse3)             echo -xarch=sse3                 ;;
3433                     core2)              echo -xarch=ssse3 -xchip=core2   ;;
3434                     bonnell)                   echo -xarch=ssse3         ;;
3435                     corei7|nehalem)            echo -xtarget=nehalem     ;;
3436                     westmere)                  echo -xtarget=westmere    ;;
3437                     silvermont)                echo -xarch=sse4_2        ;;
3438                     corei7-avx|sandybridge)    echo -xtarget=sandybridge ;;
3439                     core-avx*|ivybridge|haswell|broadwell)
3440                                                echo -xarch=avx           ;;
3441                     amdfam10|barcelona)        echo -xtarget=barcelona   ;;
3442                     btver1)                    echo -xarch=amdsse4a      ;;
3443                     btver2|bdver*)             echo -xarch=avx           ;;
3444                     athlon-4|athlon-[mx]p)     echo -xarch=ssea          ;;
3445                     k8|opteron|athlon64|athlon-fx)
3446                                                echo -xarch=sse2a         ;;
3447                     athlon*)                   echo -xarch=pentium_proa  ;;
3448                 esac
3449                 ;;
3450             -std=c99)             echo -xc99              ;;
3451             -fomit-frame-pointer) echo -xregs=frameptr    ;;
3452             -fPIC)                echo -KPIC -xcode=pic32 ;;
3453             -W*,*)                echo $flag              ;;
3454             -f*-*|-W*|-mimpure-text)                      ;;
3455             -shared)              echo -G                 ;;
3456             *)                    echo $flag              ;;
3457         esac
3458     done
3459 }
3460
3461 tms470_flags(){
3462     for flag; do
3463         case $flag in
3464             -march=*|-mcpu=*)
3465                 case "${flag#*=}" in
3466                     armv7-a|cortex-a*)      echo -mv=7a8 ;;
3467                     armv7-r|cortex-r*)      echo -mv=7r4 ;;
3468                     armv7-m|cortex-m*)      echo -mv=7m3 ;;
3469                     armv6*|arm11*)          echo -mv=6   ;;
3470                     armv5*e|arm[79]*e*|arm9[24]6*|arm96*|arm102[26])
3471                                             echo -mv=5e  ;;
3472                     armv4*|arm7*|arm9[24]*) echo -mv=4   ;;
3473                 esac
3474                 ;;
3475             -mfpu=neon)     echo --float_support=vfpv3 --neon ;;
3476             -mfpu=vfp)      echo --float_support=vfpv2        ;;
3477             -mfpu=vfpv3)    echo --float_support=vfpv3        ;;
3478             -mfpu=vfpv3-d16) echo --float_support=vfpv3d16    ;;
3479             -msoft-float)   echo --float_support=vfplib       ;;
3480             -O[0-3]|-mf=*)  echo $flag                        ;;
3481             -g)             echo -g -mn                       ;;
3482             -pds=*)         echo $flag                        ;;
3483             -D*|-I*)        echo $flag                        ;;
3484             --gcc|--abi=*)  echo $flag                        ;;
3485             -me)            echo $flag                        ;;
3486         esac
3487     done
3488 }
3489
3490 probe_cc(){
3491     pfx=$1
3492     _cc=$2
3493
3494     unset _type _ident _cc_c _cc_e _cc_o _flags _cflags
3495     unset _ld_o _ldflags _ld_lib _ld_path
3496     unset _depflags _DEPCMD _DEPFLAGS
3497     _flags_filter=echo
3498
3499     if $_cc --version 2>&1 | grep -q '^GNU assembler'; then
3500         true # no-op to avoid reading stdin in following checks
3501     elif $_cc -v 2>&1 | grep -q '^gcc.*LLVM'; then
3502         _type=llvm_gcc
3503         gcc_extra_ver=$(expr "$($_cc --version | head -n1)" : '.*\((.*)\)')
3504         _ident="llvm-gcc $($_cc -dumpversion) $gcc_extra_ver"
3505         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
3506         _cflags_speed='-O3'
3507         _cflags_size='-Os'
3508     elif $_cc -v 2>&1 | grep -qi ^gcc; then
3509         _type=gcc
3510         gcc_version=$($_cc --version | head -n1)
3511         gcc_basever=$($_cc -dumpversion)
3512         gcc_pkg_ver=$(expr "$gcc_version" : '[^ ]* \(([^)]*)\)')
3513         gcc_ext_ver=$(expr "$gcc_version" : ".*$gcc_pkg_ver $gcc_basever \\(.*\\)")
3514         _ident=$(cleanws "gcc $gcc_basever $gcc_pkg_ver $gcc_ext_ver")
3515         if ! $_cc -dumpversion | grep -q '^2\.'; then
3516             _depflags='-MMD -MF $(@:.o=.d) -MT $@'
3517         fi
3518         _cflags_speed='-O3'
3519         _cflags_size='-Os'
3520     elif $_cc --version 2>/dev/null | grep -q ^icc; then
3521         _type=icc
3522         _ident=$($_cc --version | head -n1)
3523         _depflags='-MMD'
3524         _cflags_speed='-O3'
3525         _cflags_size='-Os'
3526         _cflags_noopt='-O1'
3527         _flags_filter=icc_flags
3528     elif $_cc -v 2>&1 | grep -q xlc; then
3529         _type=xlc
3530         _ident=$($_cc -qversion 2>/dev/null | head -n1)
3531         _cflags_speed='-O5'
3532         _cflags_size='-O5 -qcompact'
3533     elif $_cc -V 2>/dev/null | grep -q Compaq; then
3534         _type=ccc
3535         _ident=$($_cc -V | head -n1 | cut -d' ' -f1-3)
3536         _DEPFLAGS='-M'
3537         _cflags_speed='-fast'
3538         _cflags_size='-O1'
3539         _flags_filter=ccc_flags
3540     elif $_cc --vsn 2>/dev/null | grep -Eq "ARM (C/C\+\+ )?Compiler"; then
3541         test -d "$sysroot" || die "No valid sysroot specified."
3542         _type=armcc
3543         _ident=$($_cc --vsn | grep -i build | head -n1 | sed 's/.*: //')
3544         armcc_conf="$PWD/armcc.conf"
3545         $_cc --arm_linux_configure                 \
3546              --arm_linux_config_file="$armcc_conf" \
3547              --configure_sysroot="$sysroot"        \
3548              --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
3549              die "Error creating armcc configuration file."
3550         $_cc --vsn | grep -q RVCT && armcc_opt=rvct || armcc_opt=armcc
3551         _flags="--arm_linux_config_file=$armcc_conf --translate_gcc"
3552         as_default="${cross_prefix}gcc"
3553         _depflags='-MMD'
3554         _cflags_speed='-O3'
3555         _cflags_size='-Os'
3556     elif $_cc -version 2>/dev/null | grep -Eq 'TMS470|TI ARM'; then
3557         _type=tms470
3558         _ident=$($_cc -version | head -n1 | tr -s ' ')
3559         _flags='--gcc --abi=eabi -me'
3560         _cc_e='-ppl -fe=$@'
3561         _cc_o='-fe=$@'
3562         _depflags='-ppa -ppd=$(@:.o=.d)'
3563         _cflags_speed='-O3 -mf=5'
3564         _cflags_size='-O3 -mf=2'
3565         _flags_filter=tms470_flags
3566     elif $_cc -v 2>&1 | grep -q clang; then
3567         _type=clang
3568         _ident=$($_cc --version | head -n1)
3569         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
3570         _cflags_speed='-O3'
3571         _cflags_size='-Os'
3572     elif $_cc -V 2>&1 | grep -q Sun; then
3573         _type=suncc
3574         _ident=$($_cc -V 2>&1 | head -n1 | cut -d' ' -f 2-)
3575         _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "1s,^.*: ,$@: ," -e "\$$!s,\$$, \\\," -e "1!s,^.*: , ," > $(@:.o=.d)'
3576         _DEPFLAGS='-xM1 -xc99'
3577         _ldflags='-std=c99'
3578         _cflags_speed='-O5'
3579         _cflags_size='-O5 -xspace'
3580         _flags_filter=suncc_flags
3581     elif $_cc -v 2>&1 | grep -q 'PathScale\|Path64'; then
3582         _type=pathscale
3583         _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
3584         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
3585         _cflags_speed='-O2'
3586         _cflags_size='-Os'
3587         _flags_filter='filter_out -Wdisabled-optimization'
3588     elif $_cc -v 2>&1 | grep -q Open64; then
3589         _type=open64
3590         _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
3591         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
3592         _cflags_speed='-O2'
3593         _cflags_size='-Os'
3594         _flags_filter='filter_out -Wdisabled-optimization|-Wtype-limits|-fno-signed-zeros'
3595     elif $_cc -V 2>&1 | grep -q Portland; then
3596         _type=pgi
3597         _ident="PGI $($_cc -V 2>&1 | awk '/^pgcc/ { print $2; exit }')"
3598         opt_common='-alias=ansi -Mdse -Mlre -Mpre'
3599         _cflags_speed="-O3 -Mautoinline -Munroll=c:4 $opt_common"
3600         _cflags_size="-O2 -Munroll=c:1 $opt_common"
3601         _cflags_noopt="-O"
3602         _flags_filter=pgi_flags
3603     elif $_cc 2>&1 | grep -q 'Microsoft.*ARM.*Assembler'; then
3604         _type=armasm
3605         _ident=$($_cc | head -n1)
3606         # 4509: "This form of conditional instruction is deprecated"
3607         _flags="-nologo -ignore 4509"
3608         _flags_filter=armasm_flags
3609     elif $_cc 2>&1 | grep -q Intel; then
3610         _type=icl
3611         _ident=$($_cc 2>&1 | head -n1)
3612         _depflags='-QMMD -QMF$(@:.o=.d) -QMT$@'
3613         # Not only is O3 broken on 13.x+ but it is slower on all previous
3614         # versions (tested) as well.
3615         _cflags_speed="-O2"
3616         _cflags_size="-O1 -Oi" # -O1 without -Oi miscompiles stuff
3617         if $_cc 2>&1 | grep -q Linker; then
3618             _ld_o='-out:$@'
3619         else
3620             _ld_o='-Fe$@'
3621         fi
3622         _cc_o='-Fo$@'
3623         _cc_e='-P'
3624         _flags_filter=icl_flags
3625         _ld_lib='lib%.a'
3626         _ld_path='-libpath:'
3627         # -Qdiag-error to make icl error when seeing certain unknown arguments
3628         _flags='-nologo -Qdiag-error:4044,10157'
3629         # -Qvec- -Qsimd- to prevent miscompilation, -GS, fp:precise for consistency
3630         # with MSVC which enables it by default.
3631         _cflags='-D_USE_MATH_DEFINES -FIstdlib.h -Dstrtoll=_strtoi64 -Qms0 -Qvec- -Qsimd- -GS -fp:precise'
3632         disable stripping
3633     elif $_cc 2>&1 | grep -q Microsoft; then
3634         _type=msvc
3635         _ident=$($_cc 2>&1 | head -n1)
3636         _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< 2>&1 | awk '\''/including/ { sub(/^.*file: */, ""); gsub(/\\/, "/"); if (!match($$0, / /)) print "$@:", $$0 }'\'' > $(@:.o=.d)'
3637         _DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -showIncludes -Zs'
3638         _cflags_speed="-O2"
3639         _cflags_size="-O1"
3640         if $_cc 2>&1 | grep -q Linker; then
3641             _ld_o='-out:$@'
3642         else
3643             _ld_o='-Fe$@'
3644         fi
3645         _cc_o='-Fo$@'
3646         _cc_e='-P -Fi$@'
3647         _flags_filter=msvc_flags
3648         _ld_lib='lib%.a'
3649         _ld_path='-libpath:'
3650         _flags='-nologo'
3651         _cflags='-D_USE_MATH_DEFINES -D_CRT_SECURE_NO_WARNINGS -Dinline=__inline -FIstdlib.h -Dstrtoll=_strtoi64'
3652         disable stripping
3653     elif $_cc --version 2>/dev/null | grep -q ^cparser; then
3654         _type=cparser
3655         _ident=$($_cc --version | head -n1)
3656         _depflags='-MMD'
3657         _cflags_speed='-O4'
3658         _cflags_size='-O2'
3659         _flags_filter=cparser_flags
3660     fi
3661
3662     eval ${pfx}_type=\$_type
3663     eval ${pfx}_ident=\$_ident
3664 }
3665
3666 set_ccvars(){
3667     eval ${1}_C=\${_cc_c-\${${1}_C}}
3668     eval ${1}_E=\${_cc_e-\${${1}_E}}
3669     eval ${1}_O=\${_cc_o-\${${1}_O}}
3670
3671     if [ -n "$_depflags" ]; then
3672         eval ${1}_DEPFLAGS=\$_depflags
3673     else
3674         eval ${1}DEP=\${_DEPCMD:-\$DEPCMD}
3675         eval ${1}DEP_FLAGS=\${_DEPFLAGS:-\$DEPFLAGS}
3676         eval DEP${1}FLAGS=\$_flags
3677     fi
3678 }
3679
3680 probe_cc cc "$cc"
3681 cflags_filter=$_flags_filter
3682 cflags_speed=$_cflags_speed
3683 cflags_size=$_cflags_size
3684 cflags_noopt=$_cflags_noopt
3685 add_cflags $_flags $_cflags
3686 cc_ldflags=$_ldflags
3687 set_ccvars CC
3688
3689 probe_cc hostcc "$host_cc"
3690 host_cflags_filter=$_flags_filter
3691 add_host_cflags  $_flags $_cflags
3692 set_ccvars HOSTCC
3693
3694 test -n "$cc_type" && enable $cc_type ||
3695     warn "Unknown C compiler $cc, unable to select optimal CFLAGS"
3696
3697 : ${as_default:=$cc}
3698 : ${dep_cc_default:=$cc}
3699 : ${ld_default:=$cc}
3700 : ${host_ld_default:=$host_cc}
3701 set_default ar as dep_cc ld host_ld windres
3702
3703 probe_cc as "$as"
3704 asflags_filter=$_flags_filter
3705 add_asflags $_flags $_cflags
3706 set_ccvars AS
3707
3708 probe_cc ld "$ld"
3709 ldflags_filter=$_flags_filter
3710 add_ldflags $_flags $_ldflags
3711 test "$cc_type" != "$ld_type" && add_ldflags $cc_ldflags
3712 LD_O=${_ld_o-$LD_O}
3713 LD_LIB=${_ld_lib-$LD_LIB}
3714 LD_PATH=${_ld_path-$LD_PATH}
3715
3716 probe_cc hostld "$host_ld"
3717 host_ldflags_filter=$_flags_filter
3718 add_host_ldflags $_flags $_ldflags
3719 HOSTLD_O=${_ld_o-$HOSTLD_O}
3720
3721 if [ -z "$CC_DEPFLAGS" ] && [ "$dep_cc" != "$cc" ]; then
3722     probe_cc depcc "$dep_cc"
3723     CCDEP=${_DEPCMD:-$DEPCMD}
3724     CCDEP_FLAGS=${_DEPFLAGS:=$DEPFLAGS}
3725     DEPCCFLAGS=$_flags
3726 fi
3727
3728 if $ar 2>&1 | grep -q Microsoft; then
3729     arflags="-nologo"
3730     ar_o='-out:$@'
3731 elif $ar 2>&1 | grep -q 'Texas Instruments'; then
3732     arflags="rq"
3733     ar_o='$@'
3734 elif $ar 2>&1 | grep -q 'Usage: ar.*-X.*any'; then
3735     arflags='-Xany -r -c'
3736     ar_o='$@'
3737 elif $ar 2>&1 | grep -q "\[D\] "; then
3738     arflags="rcD"
3739     ar_o='$@'
3740 else
3741     arflags="rc"
3742     ar_o='$@'
3743 fi
3744
3745 add_cflags $extra_cflags
3746 add_cxxflags $extra_cxxflags
3747 add_asflags $extra_cflags
3748
3749 if test -n "$sysroot"; then
3750     case "$cc_type" in
3751         gcc|llvm_gcc|clang)
3752             add_cppflags --sysroot="$sysroot"
3753             add_ldflags --sysroot="$sysroot"
3754 # On Darwin --sysroot may be ignored, -isysroot always affects headers and linking
3755             add_cppflags -isysroot "$sysroot"
3756             add_ldflags -isysroot "$sysroot"
3757         ;;
3758         tms470)
3759             add_cppflags -I"$sysinclude"
3760             add_ldflags  --sysroot="$sysroot"
3761         ;;
3762     esac
3763 fi
3764
3765 if test "$cpu" = host; then
3766     enabled cross_compile &&
3767         die "--cpu=host makes no sense when cross-compiling."
3768
3769     case "$cc_type" in
3770         gcc|llvm_gcc)
3771             check_native(){
3772                 $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
3773                 sed -n "/cc1.*$1=/{
3774                             s/.*$1=\\([^ ]*\\).*/\\1/
3775                             p
3776                             q
3777                         }" $TMPE
3778             }
3779             cpu=$(check_native -march || check_native -mcpu)
3780         ;;
3781     esac
3782
3783     test "${cpu:-host}" = host &&
3784         die "--cpu=host not supported with compiler $cc"
3785 fi
3786
3787 # Deal with common $arch aliases
3788 case "$arch" in
3789     aarch64|arm64)
3790         arch="aarch64"
3791     ;;
3792     arm*|iPad*|iPhone*)
3793         arch="arm"
3794     ;;
3795     mips*|IP*)
3796         arch="mips"
3797     ;;
3798     parisc*|hppa*)
3799         arch="parisc"
3800     ;;
3801     "Power Macintosh"|ppc*|powerpc*)
3802         arch="ppc"
3803     ;;
3804     s390|s390x)
3805         arch="s390"
3806     ;;
3807     sh4|sh)
3808         arch="sh4"
3809     ;;
3810     sun4u|sparc*)
3811         arch="sparc"
3812     ;;
3813     tilegx|tile-gx)
3814         arch="tilegx"
3815     ;;
3816     i[3-6]86*|i86pc|BePC|x86pc|x86_64|x86_32|amd64)
3817         arch="x86"
3818     ;;
3819 esac
3820
3821 is_in $arch $ARCH_LIST || warn "unknown architecture $arch"
3822 enable $arch
3823
3824 # Add processor-specific flags
3825 if enabled aarch64; then
3826
3827     case $cpu in
3828         armv*)
3829             cpuflags="-march=$cpu"
3830         ;;
3831         *)
3832             cpuflags="-mcpu=$cpu"
3833         ;;
3834     esac
3835
3836 elif enabled alpha; then
3837
3838     cpuflags="-mcpu=$cpu"
3839
3840 elif enabled arm; then
3841
3842     check_arm_arch() {
3843         check_cpp_condition stddef.h \
3844             "defined __ARM_ARCH_${1}__ || defined __TARGET_ARCH_${2:-$1}" \
3845             $cpuflags
3846     }
3847
3848     probe_arm_arch() {
3849         if   check_arm_arch 4;        then echo armv4;
3850         elif check_arm_arch 4T;       then echo armv4t;
3851         elif check_arm_arch 5;        then echo armv5;
3852         elif check_arm_arch 5E;       then echo armv5e;
3853         elif check_arm_arch 5T;       then echo armv5t;
3854         elif check_arm_arch 5TE;      then echo armv5te;
3855         elif check_arm_arch 5TEJ;     then echo armv5te;
3856         elif check_arm_arch 6;        then echo armv6;
3857         elif check_arm_arch 6J;       then echo armv6j;
3858         elif check_arm_arch 6K;       then echo armv6k;
3859         elif check_arm_arch 6Z;       then echo armv6z;
3860         elif check_arm_arch 6ZK;      then echo armv6zk;
3861         elif check_arm_arch 6T2;      then echo armv6t2;
3862         elif check_arm_arch 7;        then echo armv7;
3863         elif check_arm_arch 7A  7_A;  then echo armv7-a;
3864         elif check_arm_arch 7S;       then echo armv7-a;
3865         elif check_arm_arch 7R  7_R;  then echo armv7-r;
3866         elif check_arm_arch 7M  7_M;  then echo armv7-m;
3867         elif check_arm_arch 7EM 7E_M; then echo armv7-m;
3868         elif check_arm_arch 8A  8_A;  then echo armv8-a;
3869         fi
3870     }
3871
3872     [ "$cpu" = generic ] && cpu=$(probe_arm_arch)
3873
3874     case $cpu in
3875         armv*)
3876             cpuflags="-march=$cpu"
3877             subarch=$(echo $cpu | sed 's/[^a-z0-9]//g')
3878         ;;
3879         *)
3880             cpuflags="-mcpu=$cpu"
3881             case $cpu in
3882                 cortex-a*)                               subarch=armv7a  ;;
3883                 cortex-r*)                               subarch=armv7r  ;;
3884                 cortex-m*)                 enable thumb; subarch=armv7m  ;;
3885                 arm11*)                                  subarch=armv6   ;;
3886                 arm[79]*e*|arm9[24]6*|arm96*|arm102[26]) subarch=armv5te ;;
3887                 armv4*|arm7*|arm9[24]*)                  subarch=armv4   ;;
3888                 *)                             subarch=$(probe_arm_arch) ;;
3889             esac
3890         ;;
3891     esac
3892
3893     case "$subarch" in
3894         armv5t*)    enable fast_clz                ;;
3895         armv[6-8]*)
3896             enable fast_clz
3897             disabled fast_unaligned || enable fast_unaligned
3898             ;;
3899     esac
3900
3901 elif enabled avr32; then
3902
3903     case $cpu in
3904         ap7[02]0[0-2])
3905             subarch="avr32_ap"
3906             cpuflags="-mpart=$cpu"
3907         ;;
3908         ap)
3909             subarch="avr32_ap"
3910             cpuflags="-march=$cpu"
3911         ;;
3912         uc3[ab]*)
3913             subarch="avr32_uc"
3914             cpuflags="-mcpu=$cpu"
3915         ;;
3916         uc)
3917             subarch="avr32_uc"
3918             cpuflags="-march=$cpu"
3919         ;;
3920     esac
3921
3922 elif enabled bfin; then
3923
3924     cpuflags="-mcpu=$cpu"
3925
3926 elif enabled mips; then
3927
3928     cpuflags="-march=$cpu"
3929
3930     case $cpu in
3931         24kc)
3932             disable mips32r5
3933             disable mips64r6
3934             disable mipsfpu
3935             disable mipsdspr1
3936             disable mipsdspr2
3937             disable msa
3938         ;;
3939         24kf*)
3940             disable mips32r5
3941             disable mips64r6
3942             disable mipsdspr1
3943             disable mipsdspr2
3944             disable msa
3945         ;;
3946         24kec|34kc|1004kc)
3947             disable mips32r5
3948             disable mips64r6
3949             disable mipsfpu
3950             disable mipsdspr2
3951             disable msa
3952         ;;
3953         24kef*|34kf*|1004kf*)
3954             disable mips32r5
3955             disable mips64r6
3956             disable mipsdspr2
3957             disable msa
3958         ;;
3959         74kc)
3960             disable mips32r5
3961             disable mips64r6
3962             disable mipsfpu
3963             disable msa
3964         ;;
3965         74kf)
3966             disable mips32r5
3967             disable mips64r6
3968             disable msa
3969         ;;
3970         p5600)
3971             disable mips64r6
3972             disable mipsdspr1
3973             disable mipsdspr2
3974
3975             check_cflags "-mtune=p5600"
3976         ;;
3977         i6400)
3978             disable mips32r5
3979             disable mipsdspr1
3980             disable mipsdspr2
3981             disable mipsfpu
3982
3983             check_cflags "-mtune=i6400 -mabi=64"
3984             check_ldflags "-mabi=64"
3985         ;;
3986         loongson*)
3987             disable mipsfpu
3988             disable mips32r2
3989             disable mips32r5
3990             disable mips64r6
3991             disable mipsdspr1
3992             disable mipsdspr2
3993             disable msa
3994             enable local_aligned_8 local_aligned_16 local_aligned_32
3995             enable simd_align_16
3996             enable fast_64bit
3997             enable fast_clz
3998             enable fast_cmov
3999             enable fast_unaligned
4000             disable aligned_stack
4001             case $cpu in
4002                 loongson3*)
4003                     cpuflags="-march=loongson3a -mhard-float -fno-expensive-optimizations"
4004                 ;;
4005                 loongson2e)
4006                     cpuflags="-march=loongson2e -mhard-float -fno-expensive-optimizations"
4007                 ;;
4008                 loongson2f)
4009                     cpuflags="-march=loongson2f -mhard-float -fno-expensive-optimizations"
4010                 ;;
4011             esac
4012         ;;
4013         generic)
4014             disable mips32r5
4015             disable mips64r6
4016             disable msa
4017         ;;
4018     esac
4019
4020 elif enabled ppc; then
4021
4022     disable ldbrx
4023
4024     case $(tolower $cpu) in
4025         601|ppc601|powerpc601)
4026             cpuflags="-mcpu=601"
4027             disable altivec
4028         ;;
4029         603*|ppc603*|powerpc603*)
4030             cpuflags="-mcpu=603"
4031             disable altivec
4032         ;;
4033         604*|ppc604*|powerpc604*)
4034             cpuflags="-mcpu=604"
4035             disable altivec
4036         ;;
4037         g3|75*|ppc75*|powerpc75*)
4038             cpuflags="-mcpu=750"
4039             disable altivec
4040         ;;
4041         g4|745*|ppc745*|powerpc745*)
4042             cpuflags="-mcpu=7450"
4043             disable vsx
4044         ;;
4045         74*|ppc74*|powerpc74*)
4046             cpuflags="-mcpu=7400"
4047             disable vsx
4048         ;;
4049         g5|970|ppc970|powerpc970)
4050             cpuflags="-mcpu=970"
4051             disable vsx
4052         ;;
4053         power[3-6]*)
4054             cpuflags="-mcpu=$cpu"
4055             disable vsx
4056         ;;
4057         power[7-8]*)
4058             cpuflags="-mcpu=$cpu"
4059         ;;
4060         cell)
4061             cpuflags="-mcpu=cell"
4062             enable ldbrx
4063             disable vsx
4064         ;;
4065         e500mc)
4066             cpuflags="-mcpu=e500mc"
4067             disable altivec
4068         ;;
4069         e500v2)
4070             cpuflags="-mcpu=8548 -mhard-float -mfloat-gprs=double"
4071             disable altivec
4072             disable dcbzl
4073         ;;
4074         e500)
4075             cpuflags="-mcpu=8540 -mhard-float"
4076             disable altivec
4077             disable dcbzl
4078         ;;
4079     esac
4080
4081 elif enabled sparc; then
4082
4083     case $cpu in
4084         cypress|f93[04]|tsc701|sparcl*|supersparc|hypersparc|niagara|v[789])
4085             cpuflags="-mcpu=$cpu"
4086         ;;
4087         ultrasparc*|niagara[234])
4088             cpuflags="-mcpu=$cpu"
4089         ;;
4090     esac
4091
4092 elif enabled x86; then
4093
4094     case $cpu in
4095         i[345]86|pentium)
4096             cpuflags="-march=$cpu"
4097             disable i686
4098             disable mmx
4099         ;;
4100         # targets that do NOT support nopl and conditional mov (cmov)
4101         pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
4102             cpuflags="-march=$cpu"
4103             disable i686
4104         ;;
4105         # targets that do support nopl and conditional mov (cmov)
4106         i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64*|k8*|opteron*|athlon-fx\
4107         |core*|atom|bonnell|nehalem|westmere|silvermont|sandybridge|ivybridge|haswell|broadwell|amdfam10|barcelona|b[dt]ver*)
4108             cpuflags="-march=$cpu"
4109             enable i686
4110             enable fast_cmov
4111         ;;
4112         # targets that do support conditional mov but on which it's slow
4113         pentium4|pentium4m|prescott|nocona)
4114             cpuflags="-march=$cpu"
4115             enable i686
4116             disable fast_cmov
4117         ;;
4118     esac
4119
4120 fi
4121
4122 if [ "$cpu" != generic ]; then
4123     add_cflags  $cpuflags
4124     add_asflags $cpuflags
4125 fi
4126
4127 # compiler sanity check
4128 check_exec <<EOF
4129 int main(void){ return 0; }
4130 EOF
4131 if test "$?" != 0; then
4132     echo "$cc is unable to create an executable file."
4133     if test -z "$cross_prefix" && ! enabled cross_compile ; then
4134         echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
4135         echo "Only do this if you know what cross compiling means."
4136     fi
4137     die "C compiler test failed."
4138 fi
4139
4140 add_cppflags -D_ISOC99_SOURCE
4141 add_cxxflags -D__STDC_CONSTANT_MACROS
4142 check_cflags -std=c99
4143 check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
4144 #include <stdlib.h>
4145 EOF
4146 check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
4147 #include <stdlib.h>
4148 EOF
4149
4150 add_host_cppflags -D_ISOC99_SOURCE
4151 check_host_cflags -std=c99
4152 check_host_cflags -Wall
4153 check_host_cflags -O3
4154
4155 check_64bit(){
4156     arch32=$1
4157     arch64=$2
4158     expr=$3
4159     check_code cc "" "int test[2*($expr) - 1]" &&
4160         subarch=$arch64 || subarch=$arch32
4161 }
4162
4163 case "$arch" in
4164     aarch64|alpha|ia64)
4165         spic=$shared
4166     ;;
4167     mips)
4168         check_64bit mips mips64 '_MIPS_SIM > 1'
4169         spic=$shared
4170     ;;
4171     parisc)
4172         check_64bit parisc parisc64 'sizeof(void *) > 4'
4173         spic=$shared
4174     ;;
4175     ppc)
4176         check_64bit ppc ppc64 'sizeof(void *) > 4'
4177         spic=$shared
4178     ;;
4179     s390)
4180         check_64bit s390 s390x 'sizeof(void *) > 4'
4181         spic=$shared
4182     ;;
4183     sparc)
4184         check_64bit sparc sparc64 'sizeof(void *) > 4'
4185         spic=$shared
4186     ;;
4187     x86)
4188         check_64bit x86_32 x86_64 'sizeof(void *) > 4'
4189         # Treat x32 as x64 for now. Note it also needs spic=$shared
4190         test "$subarch" = "x86_32" && check_cpp_condition stddef.h 'defined(__x86_64__)' &&
4191             subarch=x86_64
4192         if test "$subarch" = "x86_64"; then
4193             spic=$shared
4194         fi
4195     ;;
4196     ppc)
4197         check_cc <<EOF && subarch="ppc64"
4198         int test[(int)sizeof(char*) - 7];
4199 EOF
4200     ;;
4201 esac
4202
4203 enable $subarch
4204 enabled spic && enable_weak pic
4205
4206 # OS specific
4207 case $target_os in
4208     aix)
4209         SHFLAGS=-shared
4210         add_cppflags '-I\$(SRC_PATH)/compat/aix'
4211         enabled shared && add_ldflags -Wl,-brtl
4212         ;;
4213     android)
4214         disable symver
4215         enable section_data_rel_ro
4216         SLIB_INSTALL_NAME='$(SLIBNAME)'
4217         SLIB_INSTALL_LINKS=
4218         # soname not set on purpose
4219         SHFLAGS=-shared
4220         ;;
4221     haiku)
4222         prefix_default="/boot/common"
4223         network_extralibs="-lnetwork"
4224         host_libs=
4225         ;;
4226     sunos)
4227         SHFLAGS='-shared -Wl,-h,$$(@F)'
4228         enabled x86 && SHFLAGS="-mimpure-text $SHFLAGS"
4229         network_extralibs="-lsocket -lnsl"
4230         add_cppflags -D__EXTENSIONS__
4231         # When using suncc to build, the Solaris linker will mark
4232         # an executable with each instruction set encountered by
4233         # the Solaris assembler.  As our libraries contain their own
4234         # guards for processor-specific code, instead suppress
4235         # generation of the HWCAPS ELF section on Solaris x86 only.
4236         enabled_all suncc x86 &&
4237             echo "hwcap_1 = OVERRIDE;" > mapfile &&
4238             add_ldflags -Wl,-M,mapfile
4239         nm_default='nm -P -g'
4240         ;;
4241     netbsd)
4242         disable symver
4243         oss_indev_extralibs="-lossaudio"
4244         oss_outdev_extralibs="-lossaudio"
4245         enabled gcc || check_ldflags -Wl,-zmuldefs
4246         ;;
4247     openbsd|bitrig)
4248         disable symver
4249         SHFLAGS='-shared'
4250         SLIB_INSTALL_NAME='$(SLIBNAME).$(LIBMAJOR).$(LIBMINOR)'
4251         SLIB_INSTALL_LINKS=
4252         oss_indev_extralibs="-lossaudio"
4253         oss_outdev_extralibs="-lossaudio"
4254         ;;
4255     dragonfly)
4256         disable symver
4257         ;;
4258     freebsd)
4259         ;;
4260     bsd/os)
4261         add_extralibs -lpoll -lgnugetopt
4262         strip="strip -d"
4263         ;;
4264     darwin)
4265         enabled ppc && add_asflags -force_cpusubtype_ALL
4266         SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR)'
4267         enabled x86_32 && append SHFLAGS -Wl,-read_only_relocs,suppress
4268         strip="${strip} -x"
4269         add_ldflags -Wl,-dynamic,-search_paths_first
4270         SLIBSUF=".dylib"
4271         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
4272         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
4273         objformat="macho"
4274         enabled x86_64 && objformat="macho64"
4275         enabled_any pic shared x86_64 ||
4276             { check_cflags -mdynamic-no-pic && add_asflags -mdynamic-no-pic; }
4277         ;;
4278     mingw32*)
4279         if test $target_os = "mingw32ce"; then
4280             disable network
4281         else
4282             target_os=mingw32
4283         fi
4284         LIBTARGET=i386
4285         if enabled x86_64; then
4286             LIBTARGET="i386:x86-64"
4287         elif enabled arm; then
4288             LIBTARGET=arm-wince
4289         fi
4290         enabled shared && ! enabled small && check_cmd $windres --version && enable gnu_windres
4291         check_ldflags -Wl,--nxcompat
4292         check_ldflags -Wl,--dynamicbase
4293         enabled x86_32 && check_ldflags -Wl,--large-address-aware
4294         shlibdir_default="$bindir_default"
4295         SLIBPREF=""
4296         SLIBSUF=".dll"
4297         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
4298         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
4299         dlltool="${cross_prefix}dlltool"
4300         if check_cmd lib.exe -list; then
4301             SLIB_EXTRA_CMD=-'sed -e "s/ @[^ ]*//" $$(@:$(SLIBSUF)=.orig.def) > $$(@:$(SLIBSUF)=.def); lib.exe /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib)'
4302             if enabled x86_64; then
4303                 LIBTARGET=x64
4304             fi
4305         elif check_cmd $dlltool --version; then
4306             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)'
4307         fi
4308         SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
4309         SLIB_INSTALL_LINKS=
4310         SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
4311         SLIB_INSTALL_EXTRA_LIB='lib$(SLIBNAME:$(SLIBSUF)=.dll.a) $(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
4312         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'
4313         objformat="win32"
4314         ranlib=:
4315         enable dos_paths
4316         ;;
4317     win32|win64)
4318         disable symver
4319         if enabled shared; then
4320             # Link to the import library instead of the normal static library
4321             # for shared libs.
4322             LD_LIB='%.lib'
4323             # Cannot build both shared and static libs with MSVC or icl.
4324             disable static
4325         fi
4326         enabled x86_32 && check_ldflags -LARGEADDRESSAWARE
4327         shlibdir_default="$bindir_default"
4328         SLIBPREF=""
4329         SLIBSUF=".dll"
4330         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
4331         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
4332         SLIB_CREATE_DEF_CMD='$(SRC_PATH)/compat/windows/makedef $(SUBDIR)lib$(NAME).ver $(OBJS) > $$(@:$(SLIBSUF)=.def)'
4333         SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
4334         SLIB_INSTALL_LINKS=
4335         SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
4336         SLIB_INSTALL_EXTRA_LIB='$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
4337         SHFLAGS='-dll -def:$$(@:$(SLIBSUF)=.def) -implib:$(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib)'
4338         objformat="win32"
4339         ranlib=:
4340         enable dos_paths
4341         ;;
4342     cygwin*)
4343         target_os=cygwin
4344         shlibdir_default="$bindir_default"
4345         SLIBPREF="cyg"
4346         SLIBSUF=".dll"
4347         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
4348         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
4349         SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
4350         SLIB_INSTALL_LINKS=
4351         SLIB_INSTALL_EXTRA_LIB='lib$(FULLNAME).dll.a'
4352         SHFLAGS='-shared -Wl,--out-implib,$(SUBDIR)lib$(FULLNAME).dll.a'
4353         objformat="win32"
4354         enable dos_paths
4355         enabled shared && ! enabled small && check_cmd $windres --version && enable gnu_windres
4356         ;;
4357     *-dos|freedos|opendos)
4358         network_extralibs="-lsocket"
4359         objformat="coff"
4360         enable dos_paths
4361         add_cppflags -U__STRICT_ANSI__
4362         ;;
4363     linux)
4364         enable dv1394
4365         enable section_data_rel_ro
4366         ;;
4367     irix*)
4368         target_os=irix
4369         ranlib="echo ignoring ranlib"
4370         ;;
4371     os/2*)
4372         strip="lxlite -CS"
4373         ln_s="cp -f"
4374         objformat="aout"
4375         add_cppflags -D_GNU_SOURCE
4376         add_ldflags -Zomf -Zbin-files -Zargs-wild -Zmap
4377         SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
4378         LIBSUF="_s.a"
4379         SLIBPREF=""
4380         SLIBSUF=".dll"
4381         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
4382         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
4383         SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
4384             echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
4385             echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
4386             echo EXPORTS >> $(SUBDIR)$(NAME).def; \
4387             emxexp $(OBJS) >> $(SUBDIR)$(NAME).def'
4388         SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
4389             emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
4390         SLIB_INSTALL_EXTRA_LIB='$(LIBPREF)$(NAME)_dll.a $(LIBPREF)$(NAME)_dll.lib'
4391         enable dos_paths
4392         enable_weak os2threads
4393         ;;
4394     gnu/kfreebsd)
4395         add_cppflags -D_BSD_SOURCE
4396         ;;
4397     gnu)
4398         ;;
4399     qnx)
4400         add_cppflags -D_QNX_SOURCE
4401         network_extralibs="-lsocket"
4402         ;;
4403     symbian)
4404         SLIBSUF=".dll"
4405         enable dos_paths
4406         add_cflags --include=$sysinclude/gcce/gcce.h -fvisibility=default
4407         add_cppflags -D__GCCE__ -D__SYMBIAN32__ -DSYMBIAN_OE_POSIX_SIGNALS
4408         add_ldflags -Wl,--target1-abs,--no-undefined \
4409                     -Wl,-Ttext,0x80000,-Tdata,0x1000000 -shared \
4410                     -Wl,--entry=_E32Startup -Wl,-u,_E32Startup
4411         add_extralibs -l:eexe.lib -l:usrt2_2.lib -l:dfpaeabi.dso \
4412                       -l:drtaeabi.dso -l:scppnwdl.dso -lsupc++ -lgcc \
4413                       -l:libc.dso -l:libm.dso -l:euser.dso -l:libcrt0.lib
4414         ;;
4415     osf1)
4416         add_cppflags -D_OSF_SOURCE -D_POSIX_PII -D_REENTRANT
4417         ;;
4418     minix)
4419         ;;
4420     plan9)
4421         add_cppflags -D_C99_SNPRINTF_EXTENSION  \
4422                      -D_REENTRANT_SOURCE        \
4423                      -D_RESEARCH_SOURCE         \
4424                      -DFD_SETSIZE=96            \
4425                      -DHAVE_SOCK_OPTS
4426         add_compat strtod.o strtod=avpriv_strtod
4427         network_extralibs='-lbsd'
4428         exeobjs=compat/plan9/main.o
4429         disable ffserver
4430         cp_f='cp'
4431         ;;
4432     none)
4433         ;;
4434     *)
4435         die "Unknown OS '$target_os'."
4436         ;;
4437 esac
4438
4439 # determine libc flavour
4440
4441 probe_libc(){
4442     pfx=$1
4443     pfx_no_=${pfx%_}
4444     # uclibc defines __GLIBC__, so it needs to be checked before glibc.
4445     if check_${pfx}cpp_condition features.h "defined __UCLIBC__"; then
4446         eval ${pfx}libc_type=uclibc
4447         add_${pfx}cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
4448     elif check_${pfx}cpp_condition features.h "defined __GLIBC__"; then
4449         eval ${pfx}libc_type=glibc
4450         add_${pfx}cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
4451     # MinGW headers can be installed on Cygwin, so check for newlib first.
4452     elif check_${pfx}cpp_condition newlib.h "defined _NEWLIB_VERSION"; then
4453         eval ${pfx}libc_type=newlib
4454         add_${pfx}cppflags -U__STRICT_ANSI__
4455     # MinGW64 is backwards compatible with MinGW32, so check for it first.
4456     elif check_${pfx}cpp_condition _mingw.h "defined __MINGW64_VERSION_MAJOR"; then
4457         eval ${pfx}libc_type=mingw64
4458         if check_${pfx}cpp_condition _mingw.h "__MINGW64_VERSION_MAJOR < 3"; then
4459             add_compat msvcrt/snprintf.o
4460             add_cflags "-include $source_path/compat/msvcrt/snprintf.h"
4461         fi
4462         add_${pfx}cppflags -U__STRICT_ANSI__ -D__USE_MINGW_ANSI_STDIO=1
4463         eval test \$${pfx_no_}cc_type = "gcc" &&
4464             add_${pfx}cppflags -D__printf__=__gnu_printf__
4465     elif check_${pfx}cpp_condition _mingw.h "defined __MINGW_VERSION"  ||
4466          check_${pfx}cpp_condition _mingw.h "defined __MINGW32_VERSION"; then
4467         eval ${pfx}libc_type=mingw32
4468         check_${pfx}cpp_condition _mingw.h "__MINGW32_MAJOR_VERSION > 3 || \
4469             (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
4470             die "ERROR: MinGW32 runtime version must be >= 3.15."
4471         add_${pfx}cppflags -U__STRICT_ANSI__ -D__USE_MINGW_ANSI_STDIO=1
4472         eval test \$${pfx_no_}cc_type = "gcc" &&
4473             add_${pfx}cppflags -D__printf__=__gnu_printf__
4474     elif check_${pfx}cpp_condition crtversion.h "defined _VC_CRT_MAJOR_VERSION"; then
4475         eval ${pfx}libc_type=msvcrt
4476         if check_${pfx}cpp_condition crtversion.h "_VC_CRT_MAJOR_VERSION < 14"; then
4477             if [ "$pfx" = host_ ]; then
4478                 add_host_cppflags -Dsnprintf=_snprintf
4479             else
4480                 add_compat strtod.o strtod=avpriv_strtod
4481                 add_compat msvcrt/snprintf.o snprintf=avpriv_snprintf   \
4482                                              _snprintf=avpriv_snprintf  \
4483                                              vsnprintf=avpriv_vsnprintf
4484             fi
4485         fi
4486         # The MSVC 2010 headers (Win 7.0 SDK) set _WIN32_WINNT to
4487         # 0x601 by default unless something else is set by the user.
4488         # This can easily lead to us detecting functions only present
4489         # in such new versions and producing binaries requiring windows 7.0.
4490         # Therefore explicitly set the default to XP unless the user has
4491         # set something else on the command line.
4492         check_${pfx}cpp_condition stdlib.h "defined(_WIN32_WINNT)" ||
4493             add_${pfx}cppflags -D_WIN32_WINNT=0x0502
4494     elif check_${pfx}cpp_condition stddef.h "defined __KLIBC__"; then
4495         eval ${pfx}libc_type=klibc
4496     elif check_${pfx}cpp_condition sys/cdefs.h "defined __BIONIC__"; then
4497         eval ${pfx}libc_type=bionic
4498     elif check_${pfx}cpp_condition sys/brand.h "defined LABELED_BRAND_NAME"; then
4499         eval ${pfx}libc_type=solaris
4500         add_${pfx}cppflags -D__EXTENSIONS__ -D_XOPEN_SOURCE=600
4501     fi
4502     check_${pfx}cc <<EOF
4503 #include <time.h>
4504 void *v = localtime_r;
4505 EOF
4506 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
4507 #include <time.h>
4508 void *v = localtime_r;
4509 EOF
4510
4511 }
4512
4513 probe_libc
4514 test -n "$libc_type" && enable libc_$libc_type
4515 probe_libc host_
4516 test -n "$host_libc_type" && enable host_libc_$host_libc_type
4517
4518 case $libc_type in
4519     bionic)
4520         add_compat strtod.o strtod=avpriv_strtod
4521         ;;
4522 esac
4523
4524 # hacks for compiler/libc/os combinations
4525
4526 if enabled_all tms470 libc_glibc; then
4527     CPPFLAGS="-I${source_path}/compat/tms470 ${CPPFLAGS}"
4528     add_cppflags -D__USER_LABEL_PREFIX__=
4529     add_cppflags -D__builtin_memset=memset
4530     add_cppflags -D__gnuc_va_list=va_list -D_VA_LIST_DEFINED
4531     add_cflags   -pds=48    # incompatible redefinition of macro
4532 fi
4533
4534 if enabled_all ccc libc_glibc; then
4535     add_ldflags -Wl,-z,now  # calls to libots crash without this
4536 fi
4537
4538 check_compile_assert flt_lim "float.h limits.h" "DBL_MAX == (double)DBL_MAX" ||
4539     add_cppflags '-I\$(SRC_PATH)/compat/float'
4540
4541 esc(){
4542     echo "$*" | sed 's/%/%25/g;s/:/%3a/g'
4543 }
4544
4545 echo "config:$arch:$subarch:$cpu:$target_os:$(esc $cc_ident):$(esc $FFMPEG_CONFIGURATION)" >config.fate
4546
4547 check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable_weak pic
4548
4549 set_default libdir
4550 : ${shlibdir_default:="$libdir"}
4551 : ${pkgconfigdir_default:="$libdir/pkgconfig"}
4552
4553 set_default $PATHS_LIST
4554 set_default nm
4555
4556 # we need to build at least one lib type
4557 if ! enabled_any static shared; then
4558     cat <<EOF
4559 At least one library type must be built.
4560 Specify --enable-static to build the static libraries or --enable-shared to
4561 build the shared libraries as well. To only build the shared libraries specify
4562 --disable-static in addition to --enable-shared.
4563 EOF
4564     exit 1;
4565 fi
4566
4567 die_license_disabled() {
4568     enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
4569 }
4570
4571 die_license_disabled_gpl() {
4572     enabled $1 || { enabled $2 && die "$2 is incompatible with the gpl and --enable-$1 is not specified."; }
4573 }
4574
4575 die_license_disabled gpl frei0r
4576 die_license_disabled gpl libcdio
4577 die_license_disabled gpl libsmbclient
4578 die_license_disabled gpl libutvideo
4579 die_license_disabled gpl libvidstab
4580 die_license_disabled gpl libx264
4581 die_license_disabled gpl libx265
4582 die_license_disabled gpl libxavs
4583 die_license_disabled gpl libxvid
4584 die_license_disabled gpl libzvbi
4585 die_license_disabled gpl x11grab
4586
4587 die_license_disabled nonfree libaacplus
4588 die_license_disabled nonfree libfaac
4589 die_license_disabled nonfree nvenc
4590 enabled gpl && die_license_disabled_gpl nonfree libfdk_aac
4591 enabled gpl && die_license_disabled_gpl nonfree openssl
4592
4593 die_license_disabled version3 libopencore_amrnb
4594 die_license_disabled version3 libopencore_amrwb
4595 die_license_disabled version3 libsmbclient
4596 die_license_disabled version3 libvo_aacenc
4597 die_license_disabled version3 libvo_amrwbenc
4598
4599 enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
4600
4601 disabled optimizations || check_cflags -fomit-frame-pointer
4602
4603 enable_weak_pic() {
4604     disabled pic && return
4605     enable pic
4606     add_cppflags -DPIC
4607     case "$target_os" in
4608     mingw*|cygwin*)
4609         ;;
4610     *)
4611         add_cflags -fPIC
4612         ;;
4613     esac
4614     add_asflags  -fPIC
4615 }
4616
4617 enabled pic && enable_weak_pic
4618
4619 check_cc <<EOF || die "Symbol mangling check failed."
4620 int ff_extern;
4621 EOF
4622 sym=$($nm $TMPO | awk '/ff_extern/{ print substr($0, match($0, /[^ \t]*ff_extern/)) }')
4623 extern_prefix=${sym%%ff_extern*}
4624
4625 check_cc <<EOF && enable_weak inline_asm
4626 void foo(void) { __asm__ volatile ("" ::); }
4627 EOF
4628
4629 _restrict=
4630 for restrict_keyword in restrict __restrict__ __restrict; do
4631     check_cc <<EOF && _restrict=$restrict_keyword && break
4632 void foo(char * $restrict_keyword p);
4633 EOF
4634 done
4635
4636 check_cc <<EOF && enable pragma_deprecated
4637 void foo(void) { _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") }
4638 EOF
4639
4640 check_cc <<EOF && enable attribute_packed
4641 struct { int x; } __attribute__((packed)) x;
4642 EOF
4643
4644 check_cc <<EOF && enable attribute_may_alias
4645 union { int x; } __attribute__((may_alias)) x;
4646 EOF
4647
4648 check_cc <<EOF || die "endian test failed"
4649 unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
4650 EOF
4651 od -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
4652
4653 if ! enabled ppc64 || enabled bigendian; then
4654     disable vsx
4655 fi
4656
4657 check_gas() {
4658     log "check_gas using '$as' as AS"
4659     # :vararg is used on aarch64, arm and ppc altivec
4660     check_as <<EOF || return 1
4661 .macro m n, y:vararg=0
4662 \n: .int \y
4663 .endm
4664 m x
4665 EOF
4666     # .altmacro is only used in arm asm
4667     ! enabled arm || check_as <<EOF || return 1
4668 .altmacro
4669 EOF
4670     enable gnu_as
4671     return 0
4672 }
4673
4674 if enabled_any arm aarch64 || enabled_all ppc altivec && enabled asm; then
4675     nogas=:
4676     enabled_any arm aarch64 && nogas=die
4677     enabled_all ppc altivec && [ $target_os_default != aix ] && nogas=warn
4678     as_noop=-v
4679
4680     case $as_type in
4681         arm*) gaspp_as_type=armasm; as_noop=-h ;;
4682         gcc)  gaspp_as_type=gas ;;
4683         *)    gaspp_as_type=$as_type ;;
4684     esac
4685
4686     [ $target_os = "darwin" ] && gaspp_as_type="apple-$gaspp_as_type"
4687
4688     test "${as#*gas-preprocessor.pl}" != "$as" ||
4689     check_cmd gas-preprocessor.pl -arch $arch -as-type $gaspp_as_type -- ${as:=$cc} $as_noop &&
4690         gas="${gas:=gas-preprocessor.pl} -arch $arch -as-type $gaspp_as_type -- ${as:=$cc}"
4691
4692     if ! check_gas ; then
4693         as=${gas:=$as}
4694         check_gas || \
4695             $nogas "GNU assembler not found, install/update gas-preprocessor"
4696     fi
4697
4698     check_as <<EOF && enable as_func
4699 .func test
4700 .endfunc
4701 EOF
4702 fi
4703
4704 check_inline_asm inline_asm_labels '"1:\n"'
4705
4706 check_inline_asm inline_asm_nonlocal_labels '"Label:\n"'
4707
4708 if enabled aarch64; then
4709     enabled armv8 && check_insn armv8 'prfm   pldl1strm, [x0]'
4710     # internal assembler in clang 3.3 does not support this instruction
4711     enabled neon && check_insn neon 'ext   v0.8B, v0.8B, v1.8B, #1'
4712     enabled vfp  && check_insn vfp  'fmadd d0,    d0,    d1,    d2'
4713
4714     map 'enabled_any ${v}_external ${v}_inline || disable $v' $ARCH_EXT_LIST_ARM
4715
4716 elif enabled alpha; then
4717
4718     check_cflags -mieee
4719
4720 elif enabled arm; then
4721
4722     check_cpp_condition stddef.h "defined __thumb__" && check_cc <<EOF && enable_weak thumb
4723 float func(float a, float b){ return a+b; }
4724 EOF
4725
4726     enabled thumb && check_cflags -mthumb || check_cflags -marm
4727
4728     if     check_cpp_condition stddef.h "defined __ARM_PCS_VFP"; then
4729         enable vfp_args
4730     elif ! check_cpp_condition stddef.h "defined __ARM_PCS || defined __SOFTFP__"; then
4731         case "${cross_prefix:-$cc}" in
4732             *hardfloat*)         enable vfp_args;   fpabi=vfp ;;
4733             *) check_ld "cc" <<EOF && enable vfp_args && fpabi=vfp || fpabi=soft ;;
4734 __asm__ (".eabi_attribute 28, 1");
4735 int main(void) { return 0; }
4736 EOF
4737         esac
4738         warn "Compiler does not indicate floating-point ABI, guessing $fpabi."
4739     fi
4740
4741     enabled armv5te && check_insn armv5te 'qadd r0, r0, r0'
4742     enabled armv6   && check_insn armv6   'sadd16 r0, r0, r0'
4743     enabled armv6t2 && check_insn armv6t2 'movt r0, #0'
4744     enabled neon    && check_insn neon    'vadd.i16 q0, q0, q0'
4745     enabled vfp     && check_insn vfp     'fadds s0, s0, s0'
4746     enabled vfpv3   && check_insn vfpv3   'vmov.f32 s0, #1.0'
4747     enabled setend  && check_insn setend  'setend be'
4748
4749     [ $target_os = linux ] || [ $target_os = android ] ||
4750         map 'enabled_any ${v}_external ${v}_inline || disable $v' \
4751             $ARCH_EXT_LIST_ARM
4752
4753     check_inline_asm asm_mod_q '"add r0, %Q0, %R0" :: "r"((long long)0)'
4754
4755     check_as <<EOF && enable as_dn_directive
4756 ra .dn d0.i16
4757 .unreq ra
4758 EOF
4759
4760     # llvm's integrated assembler supports .object_arch from llvm 3.5
4761     [ "$objformat" = elf ] && check_as <<EOF && enable as_object_arch
4762 .object_arch armv4
4763 EOF
4764
4765     [ $target_os != win32 ] && enabled_all armv6t2 shared !pic && enable_weak_pic
4766
4767 elif enabled mips; then
4768
4769     enabled loongson2 && check_inline_asm loongson2 '"dmult.g $8, $9, $10"'
4770     enabled loongson3 && check_inline_asm loongson3 '"gsldxc1 $f0, 0($2, $3)"'
4771     enabled mmi && check_inline_asm mmi '"punpcklhw $f0, $f0, $f0"'
4772
4773     # Enable minimum ISA based on selected options
4774     if enabled mips64 && (enabled mipsdspr1 || enabled mipsdspr2); then
4775         add_cflags "-mips64r2"
4776         add_asflags "-mips64r2"
4777     elif enabled mips64 && enabled mipsfpu && disabled loongson2 && disabled loongson3; then
4778         add_cflags "-mips64"
4779         add_asflags "-mips64"
4780     elif enabled mipsdspr1 || enabled mipsdspr2; then
4781         add_cflags "-mips32r2 -mfp32"
4782         add_asflags "-mips32r2 -mfp32"
4783     elif enabled mips32r5 || enabled mips64r6; then
4784         check_cflags "-mfp64"
4785         check_ldflags "-mfp64"
4786     fi
4787
4788     enabled mips32r5  && check_cflags "-mips32r5 -msched-weight -mload-store-pairs -funroll-loops" &&
4789      check_ldflags "-mips32r5" &&
4790      check_inline_asm mips32r5  '"ulw $t0, ($t1)"'
4791     enabled mips64r6  && check_cflags "-mips64r6 -msched-weight -mload-store-pairs -funroll-loops" &&
4792      check_ldflags "-mips64r6" &&
4793      check_inline_asm mips64r6  '"aui $t0, $t1, 1"'
4794     enabled mipsdspr1 && add_cflags "-mdsp" && add_asflags "-mdsp" &&
4795      check_inline_asm mipsdspr1 '"addu.qb $t0, $t1, $t2"'
4796     enabled mipsdspr2 && add_cflags "-mdspr2" && add_asflags "-mdspr2" &&
4797      check_inline_asm mipsdspr2 '"absq_s.qb $t0, $t1"'
4798     enabled mipsfpu   && add_cflags "-mhard-float" && add_asflags "-mhard-float" &&
4799      check_inline_asm mipsfpu   '"madd.d $f0, $f2, $f4, $f6"'
4800     enabled msa       && check_cflags "-mmsa" && check_ldflags "-mmsa" &&
4801      check_inline_asm msa       '"addvi.b $w0, $w1, 1"'
4802
4803     enabled mips32r5 && add_asflags "-mips32r5 -mfp64"
4804     enabled mips64r6 && add_asflags "-mips64r6 -mfp64"
4805     enabled msa && add_asflags "-mmsa"
4806
4807 elif enabled parisc; then
4808
4809     if enabled gcc; then
4810         case $($cc -dumpversion) in
4811             4.[3-9].*) check_cflags -fno-optimize-sibling-calls ;;
4812         esac
4813     fi
4814
4815 elif enabled ppc; then
4816
4817     enable local_aligned_8 local_aligned_16 local_aligned_32
4818
4819     check_inline_asm dcbzl     '"dcbzl 0, %0" :: "r"(0)'
4820     check_inline_asm ibm_asm   '"add 0, 0, 0"'
4821     check_inline_asm ppc4xx    '"maclhw r10, r11, r12"'
4822     check_inline_asm xform_asm '"lwzx %1, %y0" :: "Z"(*(int*)0), "r"(0)'
4823
4824     # AltiVec flags: The FSF version of GCC differs from the Apple version
4825     if enabled altivec; then
4826         check_cflags -maltivec -mabi=altivec &&
4827         { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
4828         check_cflags -faltivec
4829
4830         # check if our compiler supports Motorola AltiVec C API
4831         check_cc <<EOF || disable altivec
4832 $inc_altivec_h
4833 int main(void) {
4834     vector signed int v1 = (vector signed int) { 0 };
4835     vector signed int v2 = (vector signed int) { 1 };
4836     v1 = vec_add(v1, v2);
4837     return 0;
4838 }
4839 EOF
4840
4841         enabled altivec || warn "Altivec disabled, possibly missing --cpu flag"
4842     fi
4843
4844     if enabled vsx; then
4845         check_cflags -mvsx &&
4846         check_builtin vec_vsx_ld "altivec.h" "__builtin_vec_vsx_ld" || disable vsx
4847     fi
4848
4849     if enabled power8; then
4850         check_cpp_condition "altivec.h" "defined(_ARCH_PWR8)" || disable power8
4851     fi
4852
4853 elif enabled x86; then
4854
4855     check_builtin rdtsc    intrin.h   "__rdtsc()"
4856     check_builtin mm_empty mmintrin.h "_mm_empty()"
4857
4858     enable local_aligned_8 local_aligned_16 local_aligned_32
4859
4860     # check whether EBP is available on x86
4861     # As 'i' is stored on the stack, this program will crash
4862     # if the base pointer is used to access it because the
4863     # base pointer is cleared in the inline assembly code.
4864     check_exec_crash <<EOF && enable ebp_available
4865 volatile int i=0;
4866 __asm__ volatile ("xorl %%ebp, %%ebp" ::: "%ebp");
4867 return i;
4868 EOF
4869
4870     # check whether EBX is available on x86
4871     check_inline_asm ebx_available '""::"b"(0)' &&
4872         check_inline_asm ebx_available '"":::"%ebx"'