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