Merge commit 'fd11465b21ac90bf6964b0c0ca9d6ba64cd3291d'
[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     cuda_h
1677     dev_bktr_ioctl_bt848_h
1678     dev_bktr_ioctl_meteor_h
1679     dev_ic_bt8xx_h
1680     dev_video_bktr_ioctl_bt848_h
1681     dev_video_meteor_ioctl_meteor_h
1682     direct_h
1683     dlfcn_h
1684     d3d11_h
1685     dxva_h
1686     ES2_gl_h
1687     gsm_h
1688     io_h
1689     mach_mach_time_h
1690     machine_ioctl_bt848_h
1691     machine_ioctl_meteor_h
1692     malloc_h
1693     openjpeg_1_5_openjpeg_h
1694     OpenGL_gl3_h
1695     poll_h
1696     sndio_h
1697     soundcard_h
1698     sys_mman_h
1699     sys_param_h
1700     sys_resource_h
1701     sys_select_h
1702     sys_soundcard_h
1703     sys_time_h
1704     sys_un_h
1705     sys_videoio_h
1706     termios_h
1707     udplite_h
1708     unistd_h
1709     valgrind_valgrind_h
1710     windows_h
1711     winsock2_h
1712 "
1713
1714 INTRINSICS_LIST="
1715     intrinsics_neon
1716 "
1717
1718 MATH_FUNCS="
1719     atanf
1720     atan2f
1721     cbrt
1722     cbrtf
1723     cosf
1724     exp2
1725     exp2f
1726     expf
1727     isinf
1728     isnan
1729     ldexpf
1730     llrint
1731     llrintf
1732     log2
1733     log2f
1734     log10f
1735     lrint
1736     lrintf
1737     powf
1738     rint
1739     round
1740     roundf
1741     sinf
1742     trunc
1743     truncf
1744 "
1745
1746 SYSTEM_FUNCS="
1747     access
1748     aligned_malloc
1749     clock_gettime
1750     closesocket
1751     CommandLineToArgvW
1752     CoTaskMemFree
1753     CryptGenRandom
1754     dlopen
1755     fcntl
1756     flt_lim
1757     fork
1758     getaddrinfo
1759     gethrtime
1760     getopt
1761     GetProcessAffinityMask
1762     GetProcessMemoryInfo
1763     GetProcessTimes
1764     getrusage
1765     getservbyport
1766     GetSystemTimeAsFileTime
1767     gettimeofday
1768     glob
1769     glXGetProcAddress
1770     gmtime_r
1771     inet_aton
1772     isatty
1773     jack_port_get_latency_range
1774     kbhit
1775     LoadLibrary
1776     localtime_r
1777     lzo1x_999_compress
1778     mach_absolute_time
1779     MapViewOfFile
1780     memalign
1781     mkstemp
1782     mmap
1783     mprotect
1784     nanosleep
1785     PeekNamedPipe
1786     posix_memalign
1787     pthread_cancel
1788     sched_getaffinity
1789     SetConsoleTextAttribute
1790     setmode
1791     setrlimit
1792     Sleep
1793     strerror_r
1794     sysconf
1795     sysctl
1796     usleep
1797     VirtualAlloc
1798     wglGetProcAddress
1799 "
1800
1801 TOOLCHAIN_FEATURES="
1802     as_dn_directive
1803     as_func
1804     as_object_arch
1805     asm_mod_q
1806     attribute_may_alias
1807     attribute_packed
1808     ebp_available
1809     ebx_available
1810     gnu_as
1811     gnu_windres
1812     ibm_asm
1813     inline_asm_labels
1814     inline_asm_nonlocal_labels
1815     inline_asm_direct_symbol_refs
1816     pragma_deprecated
1817     rsync_contimeout
1818     symver_asm_label
1819     symver_gnu_asm
1820     vfp_args
1821     xform_asm
1822     xmm_clobbers
1823 "
1824
1825 TYPES_LIST="
1826     CONDITION_VARIABLE_Ptr
1827     socklen_t
1828     struct_addrinfo
1829     struct_group_source_req
1830     struct_ip_mreq_source
1831     struct_ipv6_mreq
1832     struct_pollfd
1833     struct_rusage_ru_maxrss
1834     struct_sctp_event_subscribe
1835     struct_sockaddr_in6
1836     struct_sockaddr_sa_len
1837     struct_sockaddr_storage
1838     struct_stat_st_mtim_tv_nsec
1839     struct_v4l2_frmivalenum_discrete
1840 "
1841
1842 HAVE_LIST="
1843     $ARCH_EXT_LIST
1844     $(add_suffix _external $ARCH_EXT_LIST)
1845     $(add_suffix _inline   $ARCH_EXT_LIST)
1846     $ARCH_FEATURES
1847     $ATOMICS_LIST
1848     $BUILTIN_LIST
1849     $HAVE_LIST_CMDLINE
1850     $HAVE_LIST_PUB
1851     $HEADERS_LIST
1852     $INTRINSICS_LIST
1853     $MATH_FUNCS
1854     $SYSTEM_FUNCS
1855     $THREADS_LIST
1856     $TOOLCHAIN_FEATURES
1857     $TYPES_LIST
1858     atomics_native
1859     dos_paths
1860     d3d11_cobj
1861     d3d11va_lib
1862     dxva2api_cobj
1863     dxva2_lib
1864     libc_msvcrt
1865     libdc1394_1
1866     libdc1394_2
1867     makeinfo
1868     makeinfo_html
1869     perl
1870     pod2man
1871     sdl
1872     section_data_rel_ro
1873     texi2html
1874     threads
1875     vaapi_x11
1876     vdpau_x11
1877     xlib
1878 "
1879
1880 # options emitted with CONFIG_ prefix but not available on the command line
1881 CONFIG_EXTRA="
1882     aandcttables
1883     ac3dsp
1884     audio_frame_queue
1885     audiodsp
1886     blockdsp
1887     bswapdsp
1888     cabac
1889     dvprofile
1890     exif
1891     faandct
1892     faanidct
1893     fdctdsp
1894     fmtconvert
1895     frame_thread_encoder
1896     gcrypt
1897     gmp
1898     golomb
1899     gplv3
1900     h263dsp
1901     h264chroma
1902     h264dsp
1903     h264pred
1904     h264qpel
1905     hpeldsp
1906     huffman
1907     huffyuvdsp
1908     huffyuvencdsp
1909     idctdsp
1910     iirfilter
1911     imdct15
1912     intrax8
1913     jpegtables
1914     lgplv3
1915     llauddsp
1916     llviddsp
1917     lpc
1918     me_cmp
1919     mpeg_er
1920     mpegaudio
1921     mpegaudiodsp
1922     mpegvideo
1923     mpegvideoenc
1924     pixblockdsp
1925     qpeldsp
1926     qsv
1927     qsvdec
1928     qsvenc
1929     rangecoder
1930     riffdec
1931     riffenc
1932     rtpdec
1933     rtpenc_chain
1934     sinewin
1935     startcode
1936     tpeldsp
1937     videodsp
1938     vp3dsp
1939     wma_freqs
1940 "
1941
1942 CMDLINE_SELECT="
1943     $ARCH_EXT_LIST
1944     $CONFIG_LIST
1945     $HAVE_LIST_CMDLINE
1946     $THREADS_LIST
1947     asm
1948     cross_compile
1949     debug
1950     extra_warnings
1951     logging
1952     lto
1953     optimizations
1954     rpath
1955     stripping
1956 "
1957
1958 PATHS_LIST="
1959     bindir
1960     datadir
1961     docdir
1962     incdir
1963     libdir
1964     mandir
1965     pkgconfigdir
1966     prefix
1967     shlibdir
1968 "
1969
1970 CMDLINE_SET="
1971     $PATHS_LIST
1972     ar
1973     arch
1974     as
1975     assert_level
1976     build_suffix
1977     cc
1978     cpu
1979     cross_prefix
1980     cxx
1981     dep_cc
1982     doxygen
1983     env
1984     extra_version
1985     gas
1986     host_cc
1987     host_cflags
1988     host_ld
1989     host_ldflags
1990     host_libs
1991     host_os
1992     install
1993     ld
1994     logfile
1995     malloc_prefix
1996     nm
1997     optflags
1998     pkg_config
1999     pkg_config_flags
2000     progs_suffix
2001     random_seed
2002     ranlib
2003     samples
2004     strip
2005     sws_max_filter_size
2006     sysinclude
2007     sysroot
2008     target_exec
2009     target_os
2010     target_path
2011     target_samples
2012     tempprefix
2013     toolchain
2014     valgrind
2015     yasmexe
2016 "
2017
2018 CMDLINE_APPEND="
2019     extra_cflags
2020     extra_cxxflags
2021     host_cppflags
2022 "
2023
2024 # code dependency declarations
2025
2026 # architecture extensions
2027
2028 armv5te_deps="arm"
2029 armv6_deps="arm"
2030 armv6t2_deps="arm"
2031 armv8_deps="aarch64"
2032 neon_deps_any="aarch64 arm"
2033 intrinsics_neon_deps="neon"
2034 vfp_deps_any="aarch64 arm"
2035 vfpv3_deps="vfp"
2036 setend_deps="arm"
2037
2038 map 'eval ${v}_inline_deps=inline_asm' $ARCH_EXT_LIST_ARM
2039
2040 mipsfpu_deps="mips"
2041 mipsdspr1_deps="mips"
2042 mipsdspr2_deps="mips"
2043 mips32r2_deps="mips"
2044 mips32r5_deps="mips"
2045 mips64r6_deps="mips"
2046 msa_deps="mips"
2047 loongson3_deps="mips"
2048
2049 altivec_deps="ppc"
2050 dcbzl_deps="ppc"
2051 ldbrx_deps="ppc"
2052 ppc4xx_deps="ppc"
2053 vsx_deps="altivec"
2054 power8_deps="vsx"
2055
2056 cpunop_deps="i686"
2057 x86_64_select="i686"
2058 x86_64_suggest="fast_cmov"
2059
2060 amd3dnow_deps="mmx"
2061 amd3dnowext_deps="amd3dnow"
2062 i686_deps="x86"
2063 mmx_deps="x86"
2064 mmxext_deps="mmx"
2065 sse_deps="mmxext"
2066 sse2_deps="sse"
2067 sse3_deps="sse2"
2068 ssse3_deps="sse3"
2069 sse4_deps="ssse3"
2070 sse42_deps="sse4"
2071 avx_deps="sse42"
2072 xop_deps="avx"
2073 fma3_deps="avx"
2074 fma4_deps="avx"
2075 avx2_deps="avx"
2076
2077 mmx_external_deps="yasm"
2078 mmx_inline_deps="inline_asm"
2079 mmx_suggest="mmx_external mmx_inline"
2080
2081 for ext in $(filter_out mmx $ARCH_EXT_LIST_X86_SIMD); do
2082     eval dep=\$${ext}_deps
2083     eval ${ext}_external_deps='"${dep}_external"'
2084     eval ${ext}_inline_deps='"${dep}_inline"'
2085     eval ${ext}_suggest='"${ext}_external ${ext}_inline"'
2086 done
2087
2088 aligned_stack_if_any="aarch64 ppc x86"
2089 fast_64bit_if_any="aarch64 alpha ia64 mips64 parisc64 ppc64 sparc64 x86_64"
2090 fast_clz_if_any="aarch64 alpha avr32 mips ppc x86"
2091 fast_unaligned_if_any="aarch64 ppc x86"
2092 simd_align_16_if_any="altivec neon sse"
2093
2094 # system capabilities
2095 symver_if_any="symver_asm_label symver_gnu_asm"
2096 valgrind_backtrace_deps="!optimizations valgrind_valgrind_h"
2097
2098 # threading support
2099 atomics_gcc_if_any="sync_val_compare_and_swap atomic_compare_exchange"
2100 atomics_suncc_if="atomic_cas_ptr machine_rw_barrier"
2101 atomics_win32_if="MemoryBarrier"
2102 atomics_native_if_any="$ATOMICS_LIST"
2103 w32threads_deps="atomics_native"
2104 threads_if_any="$THREADS_LIST"
2105
2106 # subsystems
2107 dct_select="rdft"
2108 error_resilience_select="me_cmp"
2109 faandct_deps="faan fdctdsp"
2110 faanidct_deps="faan idctdsp"
2111 frame_thread_encoder_deps="encoders threads"
2112 intrax8_select="error_resilience"
2113 mdct_select="fft"
2114 rdft_select="fft"
2115 me_cmp_select="fdctdsp idctdsp pixblockdsp"
2116 mpeg_er_select="error_resilience"
2117 mpegaudio_select="mpegaudiodsp"
2118 mpegaudiodsp_select="dct"
2119 mpegvideo_select="blockdsp h264chroma hpeldsp idctdsp me_cmp videodsp"
2120 mpegvideoenc_select="me_cmp mpegvideo pixblockdsp qpeldsp"
2121 nvenc_deps_any="dlopen LoadLibrary"
2122 nvenc_extralibs='$ldl'
2123 qsvdec_select="qsv"
2124 qsvenc_select="qsv"
2125
2126 # decoders / encoders
2127 aac_decoder_select="imdct15 mdct sinewin"
2128 aac_encoder_select="audio_frame_queue iirfilter mdct sinewin"
2129 aac_latm_decoder_select="aac_decoder aac_latm_parser"
2130 ac3_decoder_select="ac3_parser ac3dsp bswapdsp fmtconvert mdct"
2131 ac3_fixed_decoder_select="ac3_parser ac3dsp bswapdsp mdct"
2132 ac3_encoder_select="ac3dsp audiodsp mdct me_cmp"
2133 ac3_fixed_encoder_select="ac3dsp audiodsp mdct me_cmp"
2134 aic_decoder_select="golomb idctdsp"
2135 alac_encoder_select="lpc"
2136 als_decoder_select="bswapdsp"
2137 amrnb_decoder_select="lsp"
2138 amrwb_decoder_select="lsp"
2139 amv_decoder_select="sp5x_decoder exif"
2140 amv_encoder_select="aandcttables jpegtables mpegvideoenc"
2141 ape_decoder_select="bswapdsp llauddsp"
2142 apng_decoder_select="zlib"
2143 apng_encoder_select="huffyuvencdsp zlib"
2144 asv1_decoder_select="blockdsp bswapdsp idctdsp"
2145 asv1_encoder_select="bswapdsp fdctdsp pixblockdsp"
2146 asv2_decoder_select="blockdsp bswapdsp idctdsp"
2147 asv2_encoder_select="bswapdsp fdctdsp pixblockdsp"
2148 atrac1_decoder_select="mdct sinewin"
2149 atrac3_decoder_select="mdct"
2150 atrac3p_decoder_select="mdct sinewin"
2151 avrn_decoder_select="exif jpegtables"
2152 bink_decoder_select="blockdsp hpeldsp"
2153 binkaudio_dct_decoder_select="mdct rdft dct sinewin wma_freqs"
2154 binkaudio_rdft_decoder_select="mdct rdft sinewin wma_freqs"
2155 cavs_decoder_select="blockdsp golomb h264chroma idctdsp qpeldsp videodsp"
2156 cllc_decoder_select="bswapdsp"
2157 comfortnoise_encoder_select="lpc"
2158 cook_decoder_select="audiodsp mdct sinewin"
2159 cscd_decoder_select="lzo"
2160 cscd_decoder_suggest="zlib"
2161 dca_decoder_select="fmtconvert mdct"
2162 dirac_decoder_select="dwt golomb videodsp mpegvideoenc"
2163 dnxhd_decoder_select="blockdsp idctdsp"
2164 dnxhd_encoder_select="aandcttables blockdsp fdctdsp idctdsp mpegvideoenc pixblockdsp"
2165 dvvideo_decoder_select="dvprofile idctdsp"
2166 dvvideo_encoder_select="dvprofile fdctdsp me_cmp pixblockdsp"
2167 dxa_decoder_select="zlib"
2168 eac3_decoder_select="ac3_decoder"
2169 eac3_encoder_select="ac3_encoder"
2170 eamad_decoder_select="aandcttables blockdsp bswapdsp idctdsp mpegvideo"
2171 eatgq_decoder_select="aandcttables"
2172 eatqi_decoder_select="aandcttables blockdsp bswapdsp idctdsp mpeg1video_decoder"
2173 exr_decoder_select="zlib"
2174 ffv1_decoder_select="golomb rangecoder"
2175 ffv1_encoder_select="rangecoder"
2176 ffvhuff_decoder_select="huffyuv_decoder"
2177 ffvhuff_encoder_select="huffyuv_encoder"
2178 fic_decoder_select="golomb"
2179 flac_decoder_select="golomb"
2180 flac_encoder_select="bswapdsp golomb lpc"
2181 flashsv_decoder_select="zlib"
2182 flashsv_encoder_select="zlib"
2183 flashsv2_encoder_select="zlib"
2184 flashsv2_decoder_select="zlib"
2185 flv_decoder_select="h263_decoder"
2186 flv_encoder_select="h263_encoder"
2187 fourxm_decoder_select="blockdsp bswapdsp"
2188 fraps_decoder_select="bswapdsp huffman"
2189 g2m_decoder_select="blockdsp idctdsp jpegtables zlib"
2190 g729_decoder_select="audiodsp"
2191 h261_decoder_select="mpeg_er mpegvideo"
2192 h261_encoder_select="aandcttables mpegvideoenc"
2193 h263_decoder_select="error_resilience h263_parser h263dsp mpeg_er mpegvideo qpeldsp"
2194 h263_encoder_select="aandcttables h263dsp mpegvideoenc"
2195 h263i_decoder_select="h263_decoder"
2196 h263p_decoder_select="h263_decoder"
2197 h263p_encoder_select="h263_encoder"
2198 h264_decoder_select="cabac golomb h264chroma h264dsp h264pred h264qpel startcode videodsp"
2199 h264_decoder_suggest="error_resilience"
2200 h264_nvenc_encoder_deps="nvenc cuda_h"
2201 h264_qsv_decoder_deps="libmfx"
2202 h264_qsv_decoder_select="h264_mp4toannexb_bsf h264_parser qsvdec h264_qsv_hwaccel"
2203 h264_qsv_encoder_deps="libmfx"
2204 h264_qsv_encoder_select="qsvenc"
2205 hevc_decoder_select="bswapdsp cabac golomb videodsp"
2206 hevc_nvenc_encoder_deps="nvenc cuda_h"
2207 huffyuv_decoder_select="bswapdsp huffyuvdsp llviddsp"
2208 huffyuv_encoder_select="bswapdsp huffman huffyuvencdsp llviddsp"
2209 iac_decoder_select="imc_decoder"
2210 imc_decoder_select="bswapdsp fft mdct sinewin"
2211 indeo3_decoder_select="hpeldsp"
2212 interplay_video_decoder_select="hpeldsp"
2213 jpegls_decoder_select="golomb mjpeg_decoder"
2214 jpegls_encoder_select="golomb"
2215 jv_decoder_select="blockdsp"
2216 lagarith_decoder_select="huffyuvdsp"
2217 ljpeg_encoder_select="aandcttables idctdsp jpegtables"
2218 loco_decoder_select="golomb"
2219 mdec_decoder_select="blockdsp idctdsp mpegvideo"
2220 metasound_decoder_select="lsp mdct sinewin"
2221 mimic_decoder_select="blockdsp bswapdsp hpeldsp idctdsp"
2222 mjpeg_decoder_select="blockdsp hpeldsp exif idctdsp jpegtables"
2223 mjpeg_encoder_select="aandcttables jpegtables mpegvideoenc"
2224 mjpegb_decoder_select="mjpeg_decoder"
2225 mlp_decoder_select="mlp_parser"
2226 motionpixels_decoder_select="bswapdsp"
2227 mp1_decoder_select="mpegaudio"
2228 mp1float_decoder_select="mpegaudio"
2229 mp2_decoder_select="mpegaudio"
2230 mp2float_decoder_select="mpegaudio"
2231 mp3_decoder_select="mpegaudio"
2232 mp3adu_decoder_select="mpegaudio"
2233 mp3adufloat_decoder_select="mpegaudio"
2234 mp3float_decoder_select="mpegaudio"
2235 mp3on4_decoder_select="mpegaudio"
2236 mp3on4float_decoder_select="mpegaudio"
2237 mpc7_decoder_select="bswapdsp mpegaudiodsp"
2238 mpc8_decoder_select="mpegaudiodsp"
2239 mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h"
2240 mpeg_xvmc_decoder_select="mpeg2video_decoder"
2241 mpegvideo_decoder_select="error_resilience mpeg_er mpegvideo"
2242 mpeg1video_decoder_select="error_resilience mpeg_er mpegvideo"
2243 mpeg1video_encoder_select="aandcttables mpegvideoenc h263dsp"
2244 mpeg2video_decoder_select="error_resilience mpeg_er mpegvideo"
2245 mpeg2video_encoder_select="aandcttables mpegvideoenc h263dsp"
2246 mpeg4_decoder_select="h263_decoder mpeg4video_parser"
2247 mpeg4_encoder_select="h263_encoder"
2248 msmpeg4v1_decoder_select="h263_decoder"
2249 msmpeg4v2_decoder_select="h263_decoder"
2250 msmpeg4v2_encoder_select="h263_encoder"
2251 msmpeg4v3_decoder_select="h263_decoder"
2252 msmpeg4v3_encoder_select="h263_encoder"
2253 mss2_decoder_select="error_resilience mpeg_er qpeldsp vc1_decoder"
2254 mxpeg_decoder_select="mjpeg_decoder"
2255 nellymoser_decoder_select="mdct sinewin"
2256 nellymoser_encoder_select="audio_frame_queue mdct sinewin"
2257 nuv_decoder_select="idctdsp lzo"
2258 on2avc_decoder_select="mdct"
2259 opus_decoder_deps="swresample"
2260 opus_decoder_select="imdct15"
2261 png_decoder_select="zlib"
2262 png_encoder_select="huffyuvencdsp zlib"
2263 prores_decoder_select="blockdsp idctdsp"
2264 prores_encoder_select="fdctdsp"
2265 qcelp_decoder_select="lsp"
2266 qdm2_decoder_select="mdct rdft mpegaudiodsp"
2267 ra_144_encoder_select="audio_frame_queue lpc audiodsp"
2268 ra_144_decoder_select="audiodsp"
2269 ralf_decoder_select="golomb"
2270 rawvideo_decoder_select="bswapdsp"
2271 rtjpeg_decoder_select="me_cmp"
2272 rv10_decoder_select="error_resilience h263_decoder h263dsp mpeg_er"
2273 rv10_encoder_select="h263_encoder"
2274 rv20_decoder_select="error_resilience h263_decoder h263dsp mpeg_er"
2275 rv20_encoder_select="h263_encoder"
2276 rv30_decoder_select="error_resilience golomb h264chroma h264pred h264qpel mpeg_er mpegvideo videodsp"
2277 rv40_decoder_select="error_resilience golomb h264chroma h264pred h264qpel mpeg_er mpegvideo videodsp"
2278 shorten_decoder_select="golomb"
2279 sipr_decoder_select="lsp"
2280 snow_decoder_select="dwt h264qpel hpeldsp me_cmp rangecoder videodsp"
2281 snow_encoder_select="aandcttables dwt h264qpel hpeldsp me_cmp mpegvideoenc rangecoder"
2282 sonic_decoder_select="golomb rangecoder"
2283 sonic_encoder_select="golomb rangecoder"
2284 sonic_ls_encoder_select="golomb rangecoder"
2285 sp5x_decoder_select="mjpeg_decoder"
2286 svq1_decoder_select="hpeldsp"
2287 svq1_encoder_select="aandcttables hpeldsp me_cmp mpegvideoenc"
2288 svq3_decoder_select="h264_decoder hpeldsp tpeldsp"
2289 svq3_decoder_suggest="zlib"
2290 tak_decoder_select="audiodsp"
2291 tdsc_decoder_select="zlib mjpeg_decoder"
2292 theora_decoder_select="vp3_decoder"
2293 thp_decoder_select="mjpeg_decoder"
2294 tiff_decoder_suggest="zlib lzma"
2295 tiff_encoder_suggest="zlib"
2296 truehd_decoder_select="mlp_parser"
2297 truemotion2_decoder_select="bswapdsp"
2298 truespeech_decoder_select="bswapdsp"
2299 tscc_decoder_select="zlib"
2300 twinvq_decoder_select="mdct lsp sinewin"
2301 utvideo_decoder_select="bswapdsp"
2302 utvideo_encoder_select="bswapdsp huffman huffyuvencdsp"
2303 vble_decoder_select="huffyuvdsp"
2304 vc1_decoder_select="blockdsp error_resilience h263_decoder h264chroma h264qpel intrax8 mpeg_er qpeldsp startcode"
2305 vc1image_decoder_select="vc1_decoder"
2306 vorbis_decoder_select="mdct"
2307 vorbis_encoder_select="mdct"
2308 vp3_decoder_select="hpeldsp vp3dsp videodsp"
2309 vp5_decoder_select="h264chroma hpeldsp videodsp vp3dsp"
2310 vp6_decoder_select="h264chroma hpeldsp huffman videodsp vp3dsp"
2311 vp6a_decoder_select="vp6_decoder"
2312 vp6f_decoder_select="vp6_decoder"
2313 vp7_decoder_select="h264pred videodsp"
2314 vp8_decoder_select="h264pred videodsp"
2315 vp9_decoder_select="videodsp vp9_parser"
2316 webp_decoder_select="vp8_decoder"
2317 wmalossless_decoder_select="llauddsp"
2318 wmapro_decoder_select="mdct sinewin wma_freqs"
2319 wmav1_decoder_select="mdct sinewin wma_freqs"
2320 wmav1_encoder_select="mdct sinewin wma_freqs"
2321 wmav2_decoder_select="mdct sinewin wma_freqs"
2322 wmav2_encoder_select="mdct sinewin wma_freqs"
2323 wmavoice_decoder_select="lsp rdft dct mdct sinewin"
2324 wmv1_decoder_select="h263_decoder"
2325 wmv1_encoder_select="h263_encoder"
2326 wmv2_decoder_select="blockdsp h263_decoder idctdsp intrax8 videodsp"
2327 wmv2_encoder_select="h263_encoder"
2328 wmv3_decoder_select="vc1_decoder"
2329 wmv3image_decoder_select="wmv3_decoder"
2330 zerocodec_decoder_select="zlib"
2331 zlib_decoder_select="zlib"
2332 zlib_encoder_select="zlib"
2333 zmbv_decoder_select="zlib"
2334 zmbv_encoder_select="zlib"
2335
2336 # hardware accelerators
2337 crystalhd_deps="libcrystalhd_libcrystalhd_if_h"
2338 d3d11va_deps="d3d11_h dxva_h ID3D11VideoDecoder"
2339 dxva2_deps="dxva2api_h LPDIRECT3DSURFACE9"
2340 vaapi_deps="va_va_h"
2341 vda_deps="VideoDecodeAcceleration_VDADecoder_h pthreads"
2342 vda_extralibs="-framework CoreFoundation -framework VideoDecodeAcceleration -framework QuartzCore"
2343 vdpau_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
2344 xvmc_deps="X11_extensions_XvMClib_h"
2345
2346 h263_vaapi_hwaccel_deps="vaapi"
2347 h263_vaapi_hwaccel_select="h263_decoder"
2348 h263_vdpau_hwaccel_deps="vdpau"
2349 h263_vdpau_hwaccel_select="h263_decoder"
2350 h264_crystalhd_decoder_select="crystalhd h264_mp4toannexb_bsf h264_parser"
2351 h264_d3d11va_hwaccel_deps="d3d11va"
2352 h264_d3d11va_hwaccel_select="h264_decoder"
2353 h264_dxva2_hwaccel_deps="dxva2"
2354 h264_dxva2_hwaccel_select="h264_decoder"
2355 h264_mmal_decoder_deps="mmal"
2356 h264_mmal_hwaccel_deps="mmal"
2357 h264_mmal_decoder_select="h264_decoder"
2358 h264_mmal_encoder_deps="mmal"
2359 h264_qsv_hwaccel_deps="libmfx"
2360 h264_vaapi_hwaccel_deps="vaapi"
2361 h264_vaapi_hwaccel_select="h264_decoder"
2362 h264_vda_decoder_deps="vda"
2363 h264_vda_decoder_select="h264_decoder"
2364 h264_vda_hwaccel_deps="vda"
2365 h264_vda_hwaccel_select="h264_decoder"
2366 h264_vda_old_hwaccel_deps="vda"
2367 h264_vda_old_hwaccel_select="h264_decoder"
2368 h264_vdpau_decoder_deps="vdpau"
2369 h264_vdpau_decoder_select="h264_decoder"
2370 h264_vdpau_hwaccel_deps="vdpau"
2371 h264_vdpau_hwaccel_select="h264_decoder"
2372 hevc_d3d11va_hwaccel_deps="d3d11va DXVA_PicParams_HEVC"
2373 hevc_d3d11va_hwaccel_select="hevc_decoder"
2374 hevc_dxva2_hwaccel_deps="dxva2 DXVA_PicParams_HEVC"
2375 hevc_dxva2_hwaccel_select="hevc_decoder"
2376 mpeg_vdpau_decoder_deps="vdpau"
2377 mpeg_vdpau_decoder_select="mpeg2video_decoder"
2378 mpeg_xvmc_hwaccel_deps="xvmc"
2379 mpeg_xvmc_hwaccel_select="mpeg2video_decoder"
2380 mpeg1_vdpau_decoder_deps="vdpau"
2381 mpeg1_vdpau_decoder_select="mpeg1video_decoder"
2382 mpeg1_vdpau_hwaccel_deps="vdpau"
2383 mpeg1_vdpau_hwaccel_select="mpeg1video_decoder"
2384 mpeg1_xvmc_hwaccel_deps="xvmc"
2385 mpeg1_xvmc_hwaccel_select="mpeg1video_decoder"
2386 mpeg2_crystalhd_decoder_select="crystalhd"
2387 mpeg2_d3d11va_hwaccel_deps="d3d11va"
2388 mpeg2_d3d11va_hwaccel_select="mpeg2video_decoder"
2389 mpeg2_dxva2_hwaccel_deps="dxva2"
2390 mpeg2_dxva2_hwaccel_select="mpeg2video_decoder"
2391 mpeg2_vaapi_hwaccel_deps="vaapi"
2392 mpeg2_vaapi_hwaccel_select="mpeg2video_decoder"
2393 mpeg2_vdpau_hwaccel_deps="vdpau"
2394 mpeg2_vdpau_hwaccel_select="mpeg2video_decoder"
2395 mpeg2_xvmc_hwaccel_deps="xvmc"
2396 mpeg2_xvmc_hwaccel_select="mpeg2video_decoder"
2397 mpeg4_crystalhd_decoder_select="crystalhd"
2398 mpeg4_vaapi_hwaccel_deps="vaapi"
2399 mpeg4_vaapi_hwaccel_select="mpeg4_decoder"
2400 mpeg4_vdpau_decoder_deps="vdpau"
2401 mpeg4_vdpau_decoder_select="mpeg4_decoder"
2402 mpeg4_vdpau_hwaccel_deps="vdpau"
2403 mpeg4_vdpau_hwaccel_select="mpeg4_decoder"
2404 msmpeg4_crystalhd_decoder_select="crystalhd"
2405 vc1_crystalhd_decoder_select="crystalhd"
2406 vc1_d3d11va_hwaccel_deps="d3d11va"
2407 vc1_d3d11va_hwaccel_select="vc1_decoder"
2408 vc1_dxva2_hwaccel_deps="dxva2"
2409 vc1_dxva2_hwaccel_select="vc1_decoder"
2410 vc1_vaapi_hwaccel_deps="vaapi"
2411 vc1_vaapi_hwaccel_select="vc1_decoder"
2412 vc1_vdpau_decoder_deps="vdpau"
2413 vc1_vdpau_decoder_select="vc1_decoder"
2414 vc1_vdpau_hwaccel_deps="vdpau"
2415 vc1_vdpau_hwaccel_select="vc1_decoder"
2416 wmv3_crystalhd_decoder_select="crystalhd"
2417 wmv3_d3d11va_hwaccel_select="vc1_d3d11va_hwaccel"
2418 wmv3_dxva2_hwaccel_select="vc1_dxva2_hwaccel"
2419 wmv3_vaapi_hwaccel_select="vc1_vaapi_hwaccel"
2420 wmv3_vdpau_decoder_select="vc1_vdpau_decoder"
2421 wmv3_vdpau_hwaccel_select="vc1_vdpau_hwaccel"
2422
2423 # parsers
2424 h264_parser_select="h264_decoder"
2425 hevc_parser_select="hevc_decoder"
2426 mpegvideo_parser_select="mpegvideo"
2427 mpeg4video_parser_select="error_resilience h263dsp mpeg_er mpegvideo qpeldsp"
2428 vc1_parser_select="mpegvideo startcode vc1_decoder"
2429
2430 # bitstream_filters
2431 mjpeg2jpeg_bsf_select="jpegtables"
2432
2433 # external libraries
2434 libaacplus_encoder_deps="libaacplus"
2435 libcelt_decoder_deps="libcelt"
2436 libdcadec_decoder_deps="libdcadec"
2437 libfaac_encoder_deps="libfaac"
2438 libfaac_encoder_select="audio_frame_queue"
2439 libfdk_aac_decoder_deps="libfdk_aac"
2440 libfdk_aac_encoder_deps="libfdk_aac"
2441 libfdk_aac_encoder_select="audio_frame_queue"
2442 libgme_demuxer_deps="libgme"
2443 libgsm_decoder_deps="libgsm"
2444 libgsm_encoder_deps="libgsm"
2445 libgsm_ms_decoder_deps="libgsm"
2446 libgsm_ms_encoder_deps="libgsm"
2447 libilbc_decoder_deps="libilbc"
2448 libilbc_encoder_deps="libilbc"
2449 libmodplug_demuxer_deps="libmodplug"
2450 libmp3lame_encoder_deps="libmp3lame"
2451 libmp3lame_encoder_select="audio_frame_queue"
2452 libopencore_amrnb_decoder_deps="libopencore_amrnb"
2453 libopencore_amrnb_encoder_deps="libopencore_amrnb"
2454 libopencore_amrnb_encoder_select="audio_frame_queue"
2455 libopencore_amrwb_decoder_deps="libopencore_amrwb"
2456 libopenh264_encoder_deps="libopenh264"
2457 libopenjpeg_decoder_deps="libopenjpeg"
2458 libopenjpeg_encoder_deps="libopenjpeg"
2459 libopus_decoder_deps="libopus"
2460 libopus_encoder_deps="libopus"
2461 libopus_encoder_select="audio_frame_queue"
2462 libquvi_demuxer_deps="libquvi"
2463 libschroedinger_decoder_deps="libschroedinger"
2464 libschroedinger_encoder_deps="libschroedinger"
2465 libshine_encoder_deps="libshine"
2466 libshine_encoder_select="audio_frame_queue"
2467 libspeex_decoder_deps="libspeex"
2468 libspeex_encoder_deps="libspeex"
2469 libspeex_encoder_select="audio_frame_queue"
2470 libstagefright_h264_decoder_deps="libstagefright_h264"
2471 libtheora_encoder_deps="libtheora"
2472 libtwolame_encoder_deps="libtwolame"
2473 libvo_aacenc_encoder_deps="libvo_aacenc"
2474 libvo_aacenc_encoder_select="audio_frame_queue"
2475 libvo_amrwbenc_encoder_deps="libvo_amrwbenc"
2476 libvorbis_decoder_deps="libvorbis"
2477 libvorbis_encoder_deps="libvorbis"
2478 libvorbis_encoder_select="audio_frame_queue"
2479 libvpx_vp8_decoder_deps="libvpx"
2480 libvpx_vp8_encoder_deps="libvpx"
2481 libvpx_vp9_decoder_deps="libvpx"
2482 libvpx_vp9_encoder_deps="libvpx"
2483 libwavpack_encoder_deps="libwavpack"
2484 libwebp_encoder_deps="libwebp"
2485 libwebp_anim_encoder_deps="libwebp"
2486 libx264_encoder_deps="libx264"
2487 libx264rgb_encoder_deps="libx264"
2488 libx264rgb_encoder_select="libx264_encoder"
2489 libx265_encoder_deps="libx265"
2490 libxavs_encoder_deps="libxavs"
2491 libxvid_encoder_deps="libxvid"
2492 libutvideo_decoder_deps="libutvideo"
2493 libutvideo_encoder_deps="libutvideo"
2494 libzvbi_teletext_decoder_deps="libzvbi"
2495 nvenc_encoder_deps="nvenc"
2496 nvenc_h265_encoder_deps="nvenc"
2497
2498 # demuxers / muxers
2499 ac3_demuxer_select="ac3_parser"
2500 asf_demuxer_select="riffdec"
2501 asf_muxer_select="riffenc"
2502 asf_stream_muxer_select="asf_muxer"
2503 avi_demuxer_select="riffdec exif"
2504 avi_muxer_select="riffenc"
2505 avisynth_demuxer_deps="avisynth"
2506 avisynth_demuxer_select="riffdec"
2507 caf_demuxer_select="riffdec"
2508 dash_muxer_select="mp4_muxer"
2509 dirac_demuxer_select="dirac_parser"
2510 dts_demuxer_select="dca_parser"
2511 dtshd_demuxer_select="dca_parser"
2512 dv_demuxer_select="dvprofile"
2513 dv_muxer_select="dvprofile"
2514 dxa_demuxer_select="riffdec"
2515 eac3_demuxer_select="ac3_parser"
2516 f4v_muxer_select="mov_muxer"
2517 flac_demuxer_select="flac_parser"
2518 hds_muxer_select="flv_muxer"
2519 hls_muxer_select="mpegts_muxer"
2520 image2_alias_pix_demuxer_select="image2_demuxer"
2521 image2_brender_pix_demuxer_select="image2_demuxer"
2522 ipod_muxer_select="mov_muxer"
2523 ismv_muxer_select="mov_muxer"
2524 libnut_demuxer_deps="libnut"
2525 libnut_muxer_deps="libnut"
2526 matroska_audio_muxer_select="matroska_muxer"
2527 matroska_demuxer_select="riffdec"
2528 matroska_demuxer_suggest="bzlib lzo zlib"
2529 matroska_muxer_select="riffenc"
2530 mmf_muxer_select="riffenc"
2531 mov_demuxer_select="riffdec"
2532 mov_demuxer_suggest="zlib"
2533 mov_muxer_select="riffenc rtpenc_chain"
2534 mp3_demuxer_select="mpegaudio_parser"
2535 mp4_muxer_select="mov_muxer"
2536 mpegts_muxer_select="adts_muxer latm_muxer"
2537 mpegtsraw_demuxer_select="mpegts_demuxer"
2538 mxf_d10_muxer_select="mxf_muxer"
2539 mxf_opatom_muxer_select="mxf_muxer"
2540 nut_muxer_select="riffenc"
2541 nuv_demuxer_select="riffdec"
2542 oga_muxer_select="ogg_muxer"
2543 ogg_demuxer_select="golomb"
2544 opus_muxer_select="ogg_muxer"
2545 psp_muxer_select="mov_muxer"
2546 rtp_demuxer_select="sdp_demuxer"
2547 rtpdec_select="asf_demuxer jpegtables mov_demuxer mpegts_demuxer rm_demuxer rtp_protocol"
2548 rtsp_demuxer_select="http_protocol rtpdec"
2549 rtsp_muxer_select="rtp_muxer http_protocol rtp_protocol rtpenc_chain"
2550 sap_demuxer_select="sdp_demuxer"
2551 sap_muxer_select="rtp_muxer rtp_protocol rtpenc_chain"
2552 sdp_demuxer_select="rtpdec"
2553 smoothstreaming_muxer_select="ismv_muxer"
2554 spdif_muxer_select="aac_parser"
2555 spx_muxer_select="ogg_muxer"
2556 tak_demuxer_select="tak_parser"
2557 tg2_muxer_select="mov_muxer"
2558 tgp_muxer_select="mov_muxer"
2559 vobsub_demuxer_select="mpegps_demuxer"
2560 w64_demuxer_select="wav_demuxer"
2561 w64_muxer_select="wav_muxer"
2562 wav_demuxer_select="riffdec"
2563 wav_muxer_select="riffenc"
2564 webm_muxer_select="riffenc"
2565 wtv_demuxer_select="riffdec"
2566 wtv_muxer_select="riffenc"
2567 xmv_demuxer_select="riffdec"
2568 xwma_demuxer_select="riffdec"
2569
2570 # indevs / outdevs
2571 alsa_indev_deps="alsa_asoundlib_h snd_pcm_htimestamp"
2572 alsa_outdev_deps="alsa_asoundlib_h"
2573 avfoundation_indev_extralibs="-framework CoreVideo -framework Foundation -framework AVFoundation -framework CoreMedia"
2574 avfoundation_indev_select="avfoundation"
2575 bktr_indev_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
2576 caca_outdev_deps="libcaca"
2577 decklink_outdev_deps="decklink pthreads"
2578 decklink_outdev_extralibs="-lstdc++"
2579 decklink_indev_deps="decklink pthreads"
2580 decklink_indev_extralibs="-lstdc++"
2581 dshow_indev_deps="IBaseFilter"
2582 dshow_indev_extralibs="-lpsapi -lole32 -lstrmiids -luuid -loleaut32 -lshlwapi"
2583 dv1394_indev_deps="dv1394"
2584 dv1394_indev_select="dv_demuxer"
2585 fbdev_indev_deps="linux_fb_h"
2586 fbdev_outdev_deps="linux_fb_h"
2587 gdigrab_indev_deps="CreateDIBSection"
2588 gdigrab_indev_extralibs="-lgdi32"
2589 gdigrab_indev_select="bmp_decoder"
2590 iec61883_indev_deps="libiec61883"
2591 jack_indev_deps="jack_jack_h sem_timedwait"
2592 lavfi_indev_deps="avfilter"
2593 libcdio_indev_deps="libcdio"
2594 libdc1394_indev_deps="libdc1394"
2595 libv4l2_indev_deps="libv4l2"
2596 openal_indev_deps="openal"
2597 opengl_outdev_deps="opengl"
2598 oss_indev_deps_any="soundcard_h sys_soundcard_h"
2599 oss_outdev_deps_any="soundcard_h sys_soundcard_h"
2600 pulse_indev_deps="libpulse"
2601 pulse_outdev_deps="libpulse"
2602 qtkit_indev_extralibs="-framework QTKit -framework Foundation -framework QuartzCore"
2603 qtkit_indev_select="qtkit"
2604 sdl_outdev_deps="sdl"
2605 sndio_indev_deps="sndio_h"
2606 sndio_outdev_deps="sndio_h"
2607 v4l_indev_deps="linux_videodev_h"
2608 v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h"
2609 v4l2_outdev_deps_any="linux_videodev2_h sys_videoio_h"
2610 vfwcap_indev_deps="capCreateCaptureWindow vfwcap_defines"
2611 vfwcap_indev_extralibs="-lavicap32"
2612 xv_outdev_deps="X11_extensions_Xvlib_h XvGetPortAttribute"
2613 xv_outdev_extralibs="-lXv -lX11 -lXext"
2614 x11grab_indev_deps="x11grab"
2615 x11grab_xcb_indev_deps="libxcb"
2616
2617 # protocols
2618 bluray_protocol_deps="libbluray"
2619 ffrtmpcrypt_protocol_deps="!librtmp_protocol"
2620 ffrtmpcrypt_protocol_deps_any="gcrypt gmp openssl"
2621 ffrtmpcrypt_protocol_select="tcp_protocol"
2622 ffrtmphttp_protocol_deps="!librtmp_protocol"
2623 ffrtmphttp_protocol_select="http_protocol"
2624 ftp_protocol_select="tcp_protocol"
2625 gopher_protocol_select="network"
2626 http_protocol_select="tcp_protocol"
2627 httpproxy_protocol_select="tcp_protocol"
2628 https_protocol_select="tls_protocol"
2629 icecast_protocol_select="http_protocol"
2630 librtmp_protocol_deps="librtmp"
2631 librtmpe_protocol_deps="librtmp"
2632 librtmps_protocol_deps="librtmp"
2633 librtmpt_protocol_deps="librtmp"
2634 librtmpte_protocol_deps="librtmp"
2635 libsmbclient_protocol_deps="libsmbclient gplv3"
2636 libssh_protocol_deps="libssh"
2637 mmsh_protocol_select="http_protocol"
2638 mmst_protocol_select="network"
2639 rtmp_protocol_deps="!librtmp_protocol"
2640 rtmp_protocol_select="tcp_protocol"
2641 rtmpe_protocol_select="ffrtmpcrypt_protocol"
2642 rtmps_protocol_deps="!librtmp_protocol"
2643 rtmps_protocol_select="tls_protocol"
2644 rtmpt_protocol_select="ffrtmphttp_protocol"
2645 rtmpte_protocol_select="ffrtmpcrypt_protocol ffrtmphttp_protocol"
2646 rtmpts_protocol_select="ffrtmphttp_protocol https_protocol"
2647 rtp_protocol_select="udp_protocol"
2648 sctp_protocol_deps="struct_sctp_event_subscribe"
2649 sctp_protocol_select="network"
2650 srtp_protocol_select="rtp_protocol"
2651 tcp_protocol_select="network"
2652 tls_securetransport_protocol_deps="securetransport"
2653 tls_gnutls_protocol_deps="gnutls !tls_securetransport_protocol"
2654 tls_openssl_protocol_deps="openssl !tls_securetransport_protocol !tls_gnutls_protocol"
2655 tls_gnutls_protocol_select="tcp_protocol"
2656 tls_openssl_protocol_select="tcp_protocol"
2657 tls_securetransport_protocol_select="tcp_protocol"
2658 tls_protocol_deps_any="tls_securetransport_protocol tls_gnutls_protocol tls_openssl_protocol"
2659 tls_protocol_select="tcp_protocol"
2660 udp_protocol_select="network"
2661 udplite_protocol_select="network"
2662 unix_protocol_deps="sys_un_h"
2663 unix_protocol_select="network"
2664
2665 # filters
2666 amovie_filter_deps="avcodec avformat"
2667 aresample_filter_deps="swresample"
2668 ass_filter_deps="libass"
2669 asyncts_filter_deps="avresample"
2670 atempo_filter_deps="avcodec"
2671 atempo_filter_select="rdft"
2672 azmq_filter_deps="libzmq"
2673 blackframe_filter_deps="gpl"
2674 boxblur_filter_deps="gpl"
2675 bs2b_filter_deps="libbs2b"
2676 colormatrix_filter_deps="gpl"
2677 cover_rect_filter_deps="avcodec avformat gpl"
2678 cropdetect_filter_deps="gpl"
2679 delogo_filter_deps="gpl"
2680 deshake_filter_select="pixelutils"
2681 drawtext_filter_deps="libfreetype"
2682 ebur128_filter_deps="gpl"
2683 eq_filter_deps="gpl"
2684 fftfilt_filter_deps="avcodec"
2685 fftfilt_filter_select="rdft"
2686 flite_filter_deps="libflite"
2687 find_rect_filter_deps="avcodec avformat gpl"
2688 frei0r_filter_deps="frei0r dlopen"
2689 frei0r_src_filter_deps="frei0r dlopen"
2690 fspp_filter_deps="gpl"
2691 geq_filter_deps="gpl"
2692 histeq_filter_deps="gpl"
2693 hqdn3d_filter_deps="gpl"
2694 interlace_filter_deps="gpl"
2695 kerndeint_filter_deps="gpl"
2696 ladspa_filter_deps="ladspa dlopen"
2697 mcdeint_filter_deps="avcodec gpl"
2698 movie_filter_deps="avcodec avformat"
2699 mpdecimate_filter_deps="gpl"
2700 mpdecimate_filter_select="pixelutils"
2701 mptestsrc_filter_deps="gpl"
2702 negate_filter_deps="lut_filter"
2703 perspective_filter_deps="gpl"
2704 pp7_filter_deps="gpl"
2705 ocv_filter_deps="libopencv"
2706 owdenoise_filter_deps="gpl"
2707 pan_filter_deps="swresample"
2708 phase_filter_deps="gpl"
2709 pp_filter_deps="gpl postproc"
2710 pullup_filter_deps="gpl"
2711 removelogo_filter_deps="avcodec avformat swscale"
2712 repeatfields_filter_deps="gpl"
2713 resample_filter_deps="avresample"
2714 sab_filter_deps="gpl swscale"
2715 scale_filter_deps="swscale"
2716 select_filter_select="pixelutils"
2717 smartblur_filter_deps="gpl swscale"
2718 showcqt_filter_deps="avcodec"
2719 showcqt_filter_select="fft"
2720 showspectrum_filter_deps="avcodec"
2721 showspectrum_filter_select="rdft"
2722 spp_filter_deps="gpl avcodec"
2723 spp_filter_select="fft idctdsp fdctdsp me_cmp pixblockdsp"
2724 stereo3d_filter_deps="gpl"
2725 subtitles_filter_deps="avformat avcodec libass"
2726 super2xsai_filter_deps="gpl"
2727 tinterlace_filter_deps="gpl"
2728 vidstabdetect_filter_deps="libvidstab"
2729 vidstabtransform_filter_deps="libvidstab"
2730 pixfmts_super2xsai_test_deps="super2xsai_filter"
2731 tinterlace_merge_test_deps="tinterlace_filter"
2732 tinterlace_pad_test_deps="tinterlace_filter"
2733 uspp_filter_deps="gpl avcodec"
2734 zmq_filter_deps="libzmq"
2735 zoompan_filter_deps="swscale"
2736
2737 # examples
2738 avio_reading="avformat avcodec avutil"
2739 avio_list_dir="avformat avutil"
2740 avcodec_example_deps="avcodec avutil"
2741 decoding_encoding_example_deps="avcodec avformat avutil"
2742 demuxing_decoding_example_deps="avcodec avformat avutil"
2743 extract_mvs_example_deps="avcodec avformat avutil"
2744 filter_audio_example_deps="avfilter avutil"
2745 filtering_audio_example_deps="avfilter avcodec avformat avutil"
2746 filtering_video_example_deps="avfilter avcodec avformat avutil"
2747 metadata_example_deps="avformat avutil"
2748 muxing_example_deps="avcodec avformat avutil swscale"
2749 qsvdec_example_deps="avcodec avutil libmfx h264_qsv_decoder vaapi_x11"
2750 remuxing_example_deps="avcodec avformat avutil"
2751 resampling_audio_example_deps="avutil swresample"
2752 scaling_video_example_deps="avutil swscale"
2753 transcode_aac_example_deps="avcodec avformat swresample"
2754 transcoding_example_deps="avfilter avcodec avformat avutil"
2755
2756 # libraries, in linking order
2757 avcodec_deps="avutil"
2758 avdevice_deps="avformat avcodec avutil"
2759 avfilter_deps="avutil"
2760 avformat_deps="avcodec avutil"
2761 avresample_deps="avutil"
2762 postproc_deps="avutil gpl"
2763 swresample_deps="avutil"
2764 swscale_deps="avutil"
2765
2766 # programs
2767 ffmpeg_deps="avcodec avfilter avformat swresample"
2768 ffmpeg_select="aformat_filter anull_filter atrim_filter format_filter
2769                null_filter
2770                setpts_filter trim_filter"
2771 ffplay_deps="avcodec avformat swscale swresample sdl"
2772 ffplay_libs='$sdl_libs'
2773 ffplay_select="rdft crop_filter transpose_filter hflip_filter vflip_filter rotate_filter"
2774 ffprobe_deps="avcodec avformat"
2775 ffserver_deps="avformat fork sarestart"
2776 ffserver_select="ffm_muxer rtp_protocol rtsp_demuxer"
2777
2778 # documentation
2779 podpages_deps="perl"
2780 manpages_deps="perl pod2man"
2781 htmlpages_deps="perl"
2782 htmlpages_deps_any="makeinfo_html texi2html"
2783 txtpages_deps="perl makeinfo"
2784 doc_deps_any="manpages htmlpages podpages txtpages"
2785
2786 # default parameters
2787
2788 logfile="config.log"
2789
2790 # installation paths
2791 prefix_default="/usr/local"
2792 bindir_default='${prefix}/bin'
2793 datadir_default='${prefix}/share/ffmpeg'
2794 docdir_default='${prefix}/share/doc/ffmpeg'
2795 incdir_default='${prefix}/include'
2796 libdir_default='${prefix}/lib'
2797 mandir_default='${prefix}/share/man'
2798
2799 # toolchain
2800 ar_default="ar"
2801 cc_default="gcc"
2802 cxx_default="g++"
2803 host_cc_default="gcc"
2804 cp_f="cp -f"
2805 doxygen_default="doxygen"
2806 install="install"
2807 ln_s="ln -s -f"
2808 nm_default="nm -g"
2809 objformat="elf"
2810 pkg_config_default=pkg-config
2811 if ranlib 2>&1 | grep -q "\-D "; then
2812     ranlib_default="ranlib -D"
2813 else
2814     ranlib_default="ranlib"
2815 fi
2816 strip_default="strip"
2817 yasmexe_default="yasm"
2818 windres_default="windres"
2819
2820 # OS
2821 target_os_default=$(tolower $(uname -s))
2822 host_os=$target_os_default
2823
2824 # machine
2825 if test "$target_os_default" = aix; then
2826     arch_default=$(uname -p)
2827     strip_default="strip -X32_64"
2828 else
2829     arch_default=$(uname -m)
2830 fi
2831 cpu="generic"
2832 intrinsics="none"
2833
2834 # configurable options
2835 enable $PROGRAM_LIST
2836 enable $DOCUMENT_LIST
2837 enable $EXAMPLE_LIST
2838 enable $(filter_out avresample $LIBRARY_LIST)
2839 enable stripping
2840
2841 enable asm
2842 enable debug
2843 enable doc
2844 enable faan faandct faanidct
2845 enable optimizations
2846 enable runtime_cpudetect
2847 enable safe_bitstream_reader
2848 enable static
2849 enable swscale_alpha
2850 enable valgrind_backtrace
2851
2852 sws_max_filter_size_default=256
2853 set_default sws_max_filter_size
2854
2855 # Enable hwaccels by default.
2856 enable d3d11va dxva2 vaapi vda vdpau xvmc
2857 enable xlib
2858
2859 # build settings
2860 SHFLAGS='-shared -Wl,-soname,$$(@F)'
2861 LIBPREF="lib"
2862 LIBSUF=".a"
2863 FULLNAME='$(NAME)$(BUILDSUF)'
2864 LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
2865 SLIBPREF="lib"
2866 SLIBSUF=".so"
2867 SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
2868 SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
2869 SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
2870 LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
2871 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'
2872 SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR) $(SLIBNAME)'
2873
2874 asflags_filter=echo
2875 cflags_filter=echo
2876 ldflags_filter=echo
2877
2878 AS_C='-c'
2879 AS_O='-o $@'
2880 CC_C='-c'
2881 CC_E='-E -o $@'
2882 CC_O='-o $@'
2883 CXX_C='-c'
2884 CXX_O='-o $@'
2885 LD_O='-o $@'
2886 LD_LIB='-l%'
2887 LD_PATH='-L'
2888 HOSTCC_C='-c'
2889 HOSTCC_E='-E -o $@'
2890 HOSTCC_O='-o $@'
2891 HOSTLD_O='-o $@'
2892
2893 host_libs='-lm'
2894 host_cflags_filter=echo
2895 host_ldflags_filter=echo
2896
2897 target_path='$(CURDIR)'
2898
2899 # since the object filename is not given with the -MM flag, the compiler
2900 # is only able to print the basename, and we must add the path ourselves
2901 DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o," > $(@:.o=.d)'
2902 DEPFLAGS='-MM'
2903
2904 # find source path
2905 if test -f configure; then
2906     source_path=.
2907 else
2908     source_path=$(cd $(dirname "$0"); pwd)
2909     echo "$source_path" | grep -q '[[:blank:]]' &&
2910         die "Out of tree builds are impossible with whitespace in source path."
2911     test -e "$source_path/config.h" &&
2912         die "Out of tree builds are impossible with config.h in source dir."
2913 fi
2914
2915 for v in "$@"; do
2916     r=${v#*=}
2917     l=${v%"$r"}
2918     r=$(sh_quote "$r")
2919     FFMPEG_CONFIGURATION="${FFMPEG_CONFIGURATION# } ${l}${r}"
2920 done
2921
2922 find_things(){
2923     thing=$1
2924     pattern=$2
2925     file=$source_path/$3
2926     sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
2927 }
2928
2929 ENCODER_LIST=$(find_things  encoder  ENC      libavcodec/allcodecs.c)
2930 DECODER_LIST=$(find_things  decoder  DEC      libavcodec/allcodecs.c)
2931 HWACCEL_LIST=$(find_things  hwaccel  HWACCEL  libavcodec/allcodecs.c)
2932 PARSER_LIST=$(find_things   parser   PARSER   libavcodec/allcodecs.c)
2933 BSF_LIST=$(find_things      bsf      BSF      libavcodec/allcodecs.c)
2934 MUXER_LIST=$(find_things    muxer    _MUX     libavformat/allformats.c)
2935 DEMUXER_LIST=$(find_things  demuxer  DEMUX    libavformat/allformats.c)
2936 OUTDEV_LIST=$(find_things   outdev   OUTDEV   libavdevice/alldevices.c)
2937 INDEV_LIST=$(find_things    indev    _IN      libavdevice/alldevices.c)
2938 PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
2939 FILTER_LIST=$(find_things   filter   FILTER   libavfilter/allfilters.c)
2940
2941 ALL_COMPONENTS="
2942     $BSF_LIST
2943     $DECODER_LIST
2944     $DEMUXER_LIST
2945     $ENCODER_LIST
2946     $FILTER_LIST
2947     $HWACCEL_LIST
2948     $INDEV_LIST
2949     $MUXER_LIST
2950     $OUTDEV_LIST
2951     $PARSER_LIST
2952     $PROTOCOL_LIST
2953 "
2954
2955 for n in $COMPONENT_LIST; do
2956     v=$(toupper ${n%s})_LIST
2957     eval enable \$$v
2958     eval ${n}_if_any="\$$v"
2959 done
2960
2961 enable $ARCH_EXT_LIST
2962
2963 die_unknown(){
2964     echo "Unknown option \"$1\"."
2965     echo "See $0 --help for available options."
2966     exit 1
2967 }
2968
2969 print_3_columns() {
2970     cat | tr ' ' '\n' | sort | pr -r -3 -t
2971 }
2972
2973 show_list() {
2974     suffix=_$1
2975     shift
2976     echo $* | sed s/$suffix//g | print_3_columns
2977     exit 0
2978 }
2979
2980 rand_list(){
2981     IFS=', '
2982     set -- $*
2983     unset IFS
2984     for thing; do
2985         comp=${thing%:*}
2986         prob=${thing#$comp}
2987         prob=${prob#:}
2988         is_in ${comp} $COMPONENT_LIST && eval comp=\$$(toupper ${comp%s})_LIST
2989         echo "prob ${prob:-0.5}"
2990         printf '%s\n' $comp
2991     done
2992 }
2993
2994 do_random(){
2995     action=$1
2996     shift
2997     random_seed=$(awk "BEGIN { srand($random_seed); print srand() }")
2998     $action $(rand_list "$@" | awk "BEGIN { srand($random_seed) } \$1 == \"prob\" { prob = \$2; next } rand() < prob { print }")
2999 }
3000
3001 for opt do
3002     optval="${opt#*=}"
3003     case "$opt" in
3004         --extra-ldflags=*)
3005             add_ldflags $optval
3006         ;;
3007         --extra-ldexeflags=*)
3008             add_ldexeflags $optval
3009         ;;
3010         --extra-libs=*)
3011             add_extralibs $optval
3012         ;;
3013         --disable-devices)
3014             disable $INDEV_LIST $OUTDEV_LIST
3015         ;;
3016         --enable-debug=*)
3017             debuglevel="$optval"
3018         ;;
3019         --disable-programs)
3020             disable $PROGRAM_LIST
3021         ;;
3022         --disable-everything)
3023             map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
3024         ;;
3025         --disable-all)
3026             map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
3027             disable $LIBRARY_LIST $PROGRAM_LIST doc
3028         ;;
3029         --enable-random|--disable-random)
3030             action=${opt%%-random}
3031             do_random ${action#--} $COMPONENT_LIST
3032         ;;
3033         --enable-random=*|--disable-random=*)
3034             action=${opt%%-random=*}
3035             do_random ${action#--} $optval
3036         ;;
3037         --enable-*=*|--disable-*=*)
3038             eval $(echo "${opt%%=*}" | sed 's/--/action=/;s/-/ thing=/')
3039             is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt"
3040             eval list=\$$(toupper $thing)_LIST
3041             name=$(echo "${optval}" | sed "s/,/_${thing}|/g")_${thing}
3042             list=$(filter "$name" $list)
3043             [ "$list" = "" ] && warn "Option $opt did not match anything"
3044             $action $list
3045         ;;
3046         --enable-?*|--disable-?*)
3047             eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
3048             if is_in $option $COMPONENT_LIST; then
3049                 test $action = disable && action=unset
3050                 eval $action \$$(toupper ${option%s})_LIST
3051             elif is_in $option $CMDLINE_SELECT; then
3052                 $action $option
3053             else
3054                 die_unknown $opt
3055             fi
3056         ;;
3057         --list-*)
3058             NAME="${opt#--list-}"
3059             is_in $NAME $COMPONENT_LIST || die_unknown $opt
3060             NAME=${NAME%s}
3061             eval show_list $NAME \$$(toupper $NAME)_LIST
3062         ;;
3063         --help|-h) show_help
3064         ;;
3065         --fatal-warnings) enable fatal_warnings
3066         ;;
3067         *)
3068             optname="${opt%%=*}"
3069             optname="${optname#--}"
3070             optname=$(echo "$optname" | sed 's/-/_/g')
3071             if is_in $optname $CMDLINE_SET; then
3072                 eval $optname='$optval'
3073             elif is_in $optname $CMDLINE_APPEND; then
3074                 append $optname "$optval"
3075             else
3076                 die_unknown $opt
3077             fi
3078         ;;
3079     esac
3080 done
3081
3082 for e in "$env"; do
3083     eval "export $e"
3084 done
3085
3086 disabled logging && logfile=/dev/null
3087
3088 echo "# $0 $FFMPEG_CONFIGURATION" > $logfile
3089 set >> $logfile
3090
3091 test -n "$valgrind" && toolchain="valgrind-memcheck"
3092
3093 case "$toolchain" in
3094     clang-asan)
3095         cc_default="clang"
3096         add_cflags  -fsanitize=address
3097         add_ldflags -fsanitize=address
3098     ;;
3099     clang-tsan)
3100         cc_default="clang"
3101         add_cflags  -fsanitize=thread -pie
3102         add_ldflags -fsanitize=thread -pie
3103     ;;
3104     clang-usan)
3105         cc_default="clang"
3106         add_cflags  -fsanitize=undefined
3107         add_ldflags -fsanitize=undefined
3108     ;;
3109     gcc-asan)
3110         cc_default="gcc"
3111         add_cflags  -fsanitize=address
3112         add_ldflags -fsanitize=address
3113     ;;
3114     gcc-tsan)
3115         cc_default="gcc"
3116         add_cflags  -fsanitize=thread -pie -fPIC
3117         add_ldflags -fsanitize=thread -pie -fPIC
3118     ;;
3119     gcc-usan)
3120         cc_default="gcc"
3121         add_cflags  -fsanitize=undefined
3122         add_ldflags -fsanitize=undefined
3123     ;;
3124     valgrind-massif)
3125         target_exec_default=${valgrind:-"valgrind"}
3126         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"
3127     ;;
3128     valgrind-memcheck)
3129         target_exec_default=${valgrind:-"valgrind"}
3130         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"
3131     ;;
3132     msvc)
3133         # Check whether the current MSVC version needs the C99 converter.
3134         # From MSVC 2013 (compiler major version 18) onwards, it does actually
3135         # support enough of C99 to build ffmpeg. Default to the new
3136         # behaviour if the regexp was unable to match anything, since this
3137         # successfully parses the version number of existing supported
3138         # versions that require the converter (MSVC 2010 and 2012).
3139         cl_major_ver=$(cl 2>&1 | sed -n 's/.*Version \([[:digit:]]\{1,\}\)\..*/\1/p')
3140         if [ -z "$cl_major_ver" ] || [ $cl_major_ver -ge 18 ]; then
3141             cc_default="cl"
3142         else
3143             cc_default="c99wrap cl"
3144         fi
3145         ld_default="link"
3146         nm_default="dumpbin -symbols"
3147         ar_default="lib"
3148         target_os_default="win32"
3149         # Use a relative path for TMPDIR. This makes sure all the
3150         # ffconf temp files are written with a relative path, avoiding
3151         # issues with msys/win32 path conversion for MSVC parameters
3152         # such as -Fo<file> or -out:<file>.
3153         TMPDIR=.
3154     ;;
3155     icl)
3156         cc_default="icl"
3157         ld_default="xilink"
3158         nm_default="dumpbin -symbols"
3159         ar_default="xilib"
3160         target_os_default="win32"
3161         TMPDIR=.
3162     ;;
3163     gcov)
3164         add_cflags  -fprofile-arcs -ftest-coverage
3165         add_ldflags -fprofile-arcs -ftest-coverage
3166     ;;
3167     hardened)
3168         add_cppflags -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2
3169         add_cflags   -fno-strict-overflow -fstack-protector-all
3170         add_ldflags  -Wl,-z,relro -Wl,-z,now
3171     ;;
3172     ?*)
3173         die "Unknown toolchain $toolchain"
3174     ;;
3175 esac
3176
3177 test -n "$cross_prefix" && enable cross_compile
3178
3179 if enabled cross_compile; then
3180     test -n "$arch" && test -n "$target_os" ||
3181         die "Must specify target arch and OS when cross-compiling"
3182 fi
3183
3184 ar_default="${cross_prefix}${ar_default}"
3185 cc_default="${cross_prefix}${cc_default}"
3186 cxx_default="${cross_prefix}${cxx_default}"
3187 nm_default="${cross_prefix}${nm_default}"
3188 pkg_config_default="${cross_prefix}${pkg_config_default}"
3189 ranlib_default="${cross_prefix}${ranlib_default}"
3190 strip_default="${cross_prefix}${strip_default}"
3191 windres_default="${cross_prefix}${windres_default}"
3192
3193 sysinclude_default="${sysroot}/usr/include"
3194
3195 set_default arch cc cxx doxygen pkg_config ranlib strip sysinclude \
3196     target_exec target_os yasmexe
3197 enabled cross_compile || host_cc_default=$cc
3198 set_default host_cc
3199
3200 pkg_config_fail_message=""
3201 if ! $pkg_config --version >/dev/null 2>&1; then
3202     warn "$pkg_config not found, library detection may fail."
3203     pkg_config=false
3204 elif is_in -static $cc $LDFLAGS && ! is_in --static $pkg_config $pkg_config_flags; then
3205     pkg_config_fail_message="
3206 Note: When building a static binary, add --pkg-config-flags=\"--static\"."
3207 fi
3208
3209 if test $doxygen != $doxygen_default && \
3210   ! $doxygen --version >/dev/null 2>&1; then
3211     warn "Specified doxygen \"$doxygen\" not found, API documentation will fail to build."
3212 fi
3213
3214 exesuf() {
3215     case $1 in
3216         mingw32*|win32|win64|cygwin*|*-dos|freedos|opendos|os/2*|symbian) echo .exe ;;
3217     esac
3218 }
3219
3220 EXESUF=$(exesuf $target_os)
3221 HOSTEXESUF=$(exesuf $host_os)
3222
3223 # set temporary file name
3224 : ${TMPDIR:=$TEMPDIR}
3225 : ${TMPDIR:=$TMP}
3226 : ${TMPDIR:=/tmp}
3227
3228 if [ -n "$tempprefix" ] ; then
3229     mktemp(){
3230         echo $tempprefix.${HOSTNAME}.${UID}
3231     }
3232 elif ! check_cmd mktemp -u XXXXXX; then
3233     # simple replacement for missing mktemp
3234     # NOT SAFE FOR GENERAL USE
3235     mktemp(){
3236         echo "${2%%XXX*}.${HOSTNAME}.${UID}.$$"
3237     }
3238 fi
3239
3240 tmpfile(){
3241     tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
3242         (set -C; exec > $tmp) 2>/dev/null ||
3243         die "Unable to create temporary file in $TMPDIR."
3244     append TMPFILES $tmp
3245     eval $1=$tmp
3246 }
3247
3248 trap 'rm -f -- $TMPFILES' EXIT
3249
3250 tmpfile TMPASM .asm
3251 tmpfile TMPC   .c
3252 tmpfile TMPCPP .cpp
3253 tmpfile TMPE   $EXESUF
3254 tmpfile TMPH   .h
3255 tmpfile TMPM   .m
3256 tmpfile TMPO   .o
3257 tmpfile TMPS   .S
3258 tmpfile TMPSH  .sh
3259 tmpfile TMPV   .ver
3260
3261 unset -f mktemp
3262
3263 chmod +x $TMPE
3264
3265 # make sure we can execute files in $TMPDIR
3266 cat > $TMPSH 2>> $logfile <<EOF
3267 #! /bin/sh
3268 EOF
3269 chmod +x $TMPSH >> $logfile 2>&1
3270 if ! $TMPSH >> $logfile 2>&1; then
3271     cat <<EOF
3272 Unable to create and execute files in $TMPDIR.  Set the TMPDIR environment
3273 variable to another directory and make sure that it is not mounted noexec.
3274 EOF
3275     die "Sanity test failed."
3276 fi
3277
3278 armasm_flags(){
3279     for flag; do
3280         case $flag in
3281             # Filter out MSVC cl.exe options from cflags that shouldn't
3282             # be passed to gas-preprocessor
3283             -M[TD]*)                                            ;;
3284             *)                  echo $flag                      ;;
3285         esac
3286    done
3287 }
3288
3289 ccc_flags(){
3290     for flag; do
3291         case $flag in
3292             -std=c99)           echo -c99                       ;;
3293             -mcpu=*)            echo -arch ${flag#*=}           ;;
3294             -mieee)             echo -ieee                      ;;
3295             -O*|-fast)          echo $flag                      ;;
3296             -fno-math-errno)    echo -assume nomath_errno       ;;
3297             -g)                 echo -g3                        ;;
3298             -Wall)              echo -msg_enable level2         ;;
3299             -Wno-pointer-sign)  echo -msg_disable ptrmismatch1  ;;
3300             -Wl,*)              echo $flag                      ;;
3301             -f*|-W*)                                            ;;
3302             *)                  echo $flag                      ;;
3303         esac
3304    done
3305 }
3306
3307 cparser_flags(){
3308     for flag; do
3309         case $flag in
3310             -Wno-switch)             echo -Wno-switch-enum ;;
3311             -Wno-format-zero-length) ;;
3312             -Wdisabled-optimization) ;;
3313             -Wno-pointer-sign)       echo -Wno-other ;;
3314             *)                       echo $flag ;;
3315         esac
3316     done
3317 }
3318
3319 msvc_common_flags(){
3320     for flag; do
3321         case $flag in
3322             # In addition to specifying certain flags under the compiler
3323             # specific filters, they must be specified here as well or else the
3324             # generic catch all at the bottom will print the original flag.
3325             -Wall)                ;;
3326             -std=c99)             ;;
3327             # Common flags
3328             -fomit-frame-pointer) ;;
3329             -g)                   echo -Z7 ;;
3330             -fno-math-errno)      ;;
3331             -fno-common)          ;;
3332             -fno-signed-zeros)    ;;
3333             -fPIC)                ;;
3334             -mthumb)              ;;
3335             -march=*)             ;;
3336             -lz)                  echo zlib.lib ;;
3337             -lavifil32)           echo vfw32.lib ;;
3338             -lavicap32)           echo vfw32.lib user32.lib ;;
3339             -l*)                  echo ${flag#-l}.lib ;;
3340             -L*)                  echo -libpath:${flag#-L} ;;
3341             *)                    echo $flag ;;
3342         esac
3343     done
3344 }
3345
3346 msvc_flags(){
3347     msvc_common_flags "$@"
3348     for flag; do
3349         case $flag in
3350             -Wall)                echo -W4 -wd4244 -wd4127 -wd4018 -wd4389     \
3351                                        -wd4146 -wd4057 -wd4204 -wd4706 -wd4305 \
3352                                        -wd4152 -wd4324 -we4013 -wd4100 -wd4214 \
3353                                        -wd4307 \
3354                                        -wd4273 -wd4554 -wd4701 ;;
3355         esac
3356     done
3357 }
3358
3359 icl_flags(){
3360     msvc_common_flags "$@"
3361     for flag; do
3362         case $flag in
3363             # Despite what Intel's documentation says -Wall, which is supported
3364             # on Windows, does enable remarks so disable them here.
3365             -Wall)                echo $flag -Qdiag-disable:remark ;;
3366             -std=c99)             echo -Qstd=c99 ;;
3367             -flto)                echo -ipo ;;
3368         esac
3369     done
3370 }
3371
3372 icc_flags(){
3373     for flag; do
3374         case $flag in
3375             -flto)                echo -ipo ;;
3376             *)                    echo $flag ;;
3377         esac
3378     done
3379 }
3380
3381 pgi_flags(){
3382     for flag; do
3383         case $flag in
3384             -flto)                echo -Mipa=fast,libopt,libinline,vestigial ;;
3385             -fomit-frame-pointer) echo -Mnoframe ;;
3386             -g)                   echo -gopt ;;
3387             *)                    echo $flag ;;
3388         esac
3389     done
3390 }
3391
3392 suncc_flags(){
3393     for flag; do
3394         case $flag in
3395             -march=*|-mcpu=*)
3396                 case "${flag#*=}" in
3397                     native)                   echo -xtarget=native       ;;
3398                     v9|niagara)               echo -xarch=sparc          ;;
3399                     ultrasparc)               echo -xarch=sparcvis       ;;
3400                     ultrasparc3|niagara2)     echo -xarch=sparcvis2      ;;
3401                     i586|pentium)             echo -xchip=pentium        ;;
3402                     i686|pentiumpro|pentium2) echo -xtarget=pentium_pro  ;;
3403                     pentium3*|c3-2)           echo -xtarget=pentium3     ;;
3404                     pentium-m)          echo -xarch=sse2 -xchip=pentium3 ;;
3405                     pentium4*)          echo -xtarget=pentium4           ;;
3406                     prescott|nocona)    echo -xarch=sse3 -xchip=pentium4 ;;
3407                     *-sse3)             echo -xarch=sse3                 ;;
3408                     core2)              echo -xarch=ssse3 -xchip=core2   ;;
3409                     bonnell)                   echo -xarch=ssse3         ;;
3410                     corei7|nehalem)            echo -xtarget=nehalem     ;;
3411                     westmere)                  echo -xtarget=westmere    ;;
3412                     silvermont)                echo -xarch=sse4_2        ;;
3413                     corei7-avx|sandybridge)    echo -xtarget=sandybridge ;;
3414                     core-avx*|ivybridge|haswell|broadwell)
3415                                                echo -xarch=avx           ;;
3416                     amdfam10|barcelona)        echo -xtarget=barcelona   ;;
3417                     btver1)                    echo -xarch=amdsse4a      ;;
3418                     btver2|bdver*)             echo -xarch=avx           ;;
3419                     athlon-4|athlon-[mx]p)     echo -xarch=ssea          ;;
3420                     k8|opteron|athlon64|athlon-fx)
3421                                                echo -xarch=sse2a         ;;
3422                     athlon*)                   echo -xarch=pentium_proa  ;;
3423                 esac
3424                 ;;
3425             -std=c99)             echo -xc99              ;;
3426             -fomit-frame-pointer) echo -xregs=frameptr    ;;
3427             -fPIC)                echo -KPIC -xcode=pic32 ;;
3428             -W*,*)                echo $flag              ;;
3429             -f*-*|-W*|-mimpure-text)                      ;;
3430             -shared)              echo -G                 ;;
3431             *)                    echo $flag              ;;
3432         esac
3433     done
3434 }
3435
3436 tms470_flags(){
3437     for flag; do
3438         case $flag in
3439             -march=*|-mcpu=*)
3440                 case "${flag#*=}" in
3441                     armv7-a|cortex-a*)      echo -mv=7a8 ;;
3442                     armv7-r|cortex-r*)      echo -mv=7r4 ;;
3443                     armv7-m|cortex-m*)      echo -mv=7m3 ;;
3444                     armv6*|arm11*)          echo -mv=6   ;;
3445                     armv5*e|arm[79]*e*|arm9[24]6*|arm96*|arm102[26])
3446                                             echo -mv=5e  ;;
3447                     armv4*|arm7*|arm9[24]*) echo -mv=4   ;;
3448                 esac
3449                 ;;
3450             -mfpu=neon)     echo --float_support=vfpv3 --neon ;;
3451             -mfpu=vfp)      echo --float_support=vfpv2        ;;
3452             -mfpu=vfpv3)    echo --float_support=vfpv3        ;;
3453             -mfpu=vfpv3-d16) echo --float_support=vfpv3d16    ;;
3454             -msoft-float)   echo --float_support=vfplib       ;;
3455             -O[0-3]|-mf=*)  echo $flag                        ;;
3456             -g)             echo -g -mn                       ;;
3457             -pds=*)         echo $flag                        ;;
3458             -D*|-I*)        echo $flag                        ;;
3459             --gcc|--abi=*)  echo $flag                        ;;
3460             -me)            echo $flag                        ;;
3461         esac
3462     done
3463 }
3464
3465 probe_cc(){
3466     pfx=$1
3467     _cc=$2
3468
3469     unset _type _ident _cc_c _cc_e _cc_o _flags _cflags
3470     unset _ld_o _ldflags _ld_lib _ld_path
3471     unset _depflags _DEPCMD _DEPFLAGS
3472     _flags_filter=echo
3473
3474     if $_cc --version 2>&1 | grep -q '^GNU assembler'; then
3475         true # no-op to avoid reading stdin in following checks
3476     elif $_cc -v 2>&1 | grep -q '^gcc.*LLVM'; then
3477         _type=llvm_gcc
3478         gcc_extra_ver=$(expr "$($_cc --version | head -n1)" : '.*\((.*)\)')
3479         _ident="llvm-gcc $($_cc -dumpversion) $gcc_extra_ver"
3480         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
3481         _cflags_speed='-O3'
3482         _cflags_size='-Os'
3483     elif $_cc -v 2>&1 | grep -qi ^gcc; then
3484         _type=gcc
3485         gcc_version=$($_cc --version | head -n1)
3486         gcc_basever=$($_cc -dumpversion)
3487         gcc_pkg_ver=$(expr "$gcc_version" : '[^ ]* \(([^)]*)\)')
3488         gcc_ext_ver=$(expr "$gcc_version" : ".*$gcc_pkg_ver $gcc_basever \\(.*\\)")
3489         _ident=$(cleanws "gcc $gcc_basever $gcc_pkg_ver $gcc_ext_ver")
3490         if ! $_cc -dumpversion | grep -q '^2\.'; then
3491             _depflags='-MMD -MF $(@:.o=.d) -MT $@'
3492         fi
3493         _cflags_speed='-O3'
3494         _cflags_size='-Os'
3495     elif $_cc --version 2>/dev/null | grep -q ^icc; then
3496         _type=icc
3497         _ident=$($_cc --version | head -n1)
3498         _depflags='-MMD'
3499         _cflags_speed='-O3'
3500         _cflags_size='-Os'
3501         _cflags_noopt='-O1'
3502         _flags_filter=icc_flags
3503     elif $_cc -v 2>&1 | grep -q xlc; then
3504         _type=xlc
3505         _ident=$($_cc -qversion 2>/dev/null | head -n1)
3506         _cflags_speed='-O5'
3507         _cflags_size='-O5 -qcompact'
3508     elif $_cc -V 2>/dev/null | grep -q Compaq; then
3509         _type=ccc
3510         _ident=$($_cc -V | head -n1 | cut -d' ' -f1-3)
3511         _DEPFLAGS='-M'
3512         _cflags_speed='-fast'
3513         _cflags_size='-O1'
3514         _flags_filter=ccc_flags
3515     elif $_cc --vsn 2>/dev/null | grep -Eq "ARM (C/C\+\+ )?Compiler"; then
3516         test -d "$sysroot" || die "No valid sysroot specified."
3517         _type=armcc
3518         _ident=$($_cc --vsn | grep -i build | head -n1 | sed 's/.*: //')
3519         armcc_conf="$PWD/armcc.conf"
3520         $_cc --arm_linux_configure                 \
3521              --arm_linux_config_file="$armcc_conf" \
3522              --configure_sysroot="$sysroot"        \
3523              --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
3524              die "Error creating armcc configuration file."
3525         $_cc --vsn | grep -q RVCT && armcc_opt=rvct || armcc_opt=armcc
3526         _flags="--arm_linux_config_file=$armcc_conf --translate_gcc"
3527         as_default="${cross_prefix}gcc"
3528         _depflags='-MMD'
3529         _cflags_speed='-O3'
3530         _cflags_size='-Os'
3531     elif $_cc -version 2>/dev/null | grep -Eq 'TMS470|TI ARM'; then
3532         _type=tms470
3533         _ident=$($_cc -version | head -n1 | tr -s ' ')
3534         _flags='--gcc --abi=eabi -me'
3535         _cc_e='-ppl -fe=$@'
3536         _cc_o='-fe=$@'
3537         _depflags='-ppa -ppd=$(@:.o=.d)'
3538         _cflags_speed='-O3 -mf=5'
3539         _cflags_size='-O3 -mf=2'
3540         _flags_filter=tms470_flags
3541     elif $_cc -v 2>&1 | grep -q clang; then
3542         _type=clang
3543         _ident=$($_cc --version | head -n1)
3544         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
3545         _cflags_speed='-O3'
3546         _cflags_size='-Os'
3547     elif $_cc -V 2>&1 | grep -q Sun; then
3548         _type=suncc
3549         _ident=$($_cc -V 2>&1 | head -n1 | cut -d' ' -f 2-)
3550         _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "1s,^.*: ,$@: ," -e "\$$!s,\$$, \\\," -e "1!s,^.*: , ," > $(@:.o=.d)'
3551         _DEPFLAGS='-xM1 -xc99'
3552         _ldflags='-std=c99'
3553         _cflags_speed='-O5'
3554         _cflags_size='-O5 -xspace'
3555         _flags_filter=suncc_flags
3556     elif $_cc -v 2>&1 | grep -q 'PathScale\|Path64'; then
3557         _type=pathscale
3558         _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
3559         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
3560         _cflags_speed='-O2'
3561         _cflags_size='-Os'
3562         _flags_filter='filter_out -Wdisabled-optimization'
3563     elif $_cc -v 2>&1 | grep -q Open64; then
3564         _type=open64
3565         _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
3566         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
3567         _cflags_speed='-O2'
3568         _cflags_size='-Os'
3569         _flags_filter='filter_out -Wdisabled-optimization|-Wtype-limits|-fno-signed-zeros'
3570     elif $_cc -V 2>&1 | grep -q Portland; then
3571         _type=pgi
3572         _ident="PGI $($_cc -V 2>&1 | awk '/^pgcc/ { print $2; exit }')"
3573         opt_common='-alias=ansi -Mdse -Mlre -Mpre'
3574         _cflags_speed="-O3 -Mautoinline -Munroll=c:4 $opt_common"
3575         _cflags_size="-O2 -Munroll=c:1 $opt_common"
3576         _cflags_noopt="-O"
3577         _flags_filter=pgi_flags
3578     elif $_cc 2>&1 | grep -q 'Microsoft.*ARM.*Assembler'; then
3579         _type=armasm
3580         _ident=$($_cc | head -n1)
3581         # 4509: "This form of conditional instruction is deprecated"
3582         _flags="-nologo -ignore 4509"
3583         _flags_filter=armasm_flags
3584     elif $_cc 2>&1 | grep -q Intel; then
3585         _type=icl
3586         _ident=$($_cc 2>&1 | head -n1)
3587         _depflags='-QMMD -QMF$(@:.o=.d) -QMT$@'
3588         # Not only is O3 broken on 13.x+ but it is slower on all previous
3589         # versions (tested) as well.
3590         _cflags_speed="-O2"
3591         _cflags_size="-O1 -Oi" # -O1 without -Oi miscompiles stuff
3592         if $_cc 2>&1 | grep -q Linker; then
3593             _ld_o='-out:$@'
3594         else
3595             _ld_o='-Fe$@'
3596         fi
3597         _cc_o='-Fo$@'
3598         _cc_e='-P'
3599         _flags_filter=icl_flags
3600         _ld_lib='lib%.a'
3601         _ld_path='-libpath:'
3602         # -Qdiag-error to make icl error when seeing certain unknown arguments
3603         _flags='-nologo -Qdiag-error:4044,10157'
3604         # -Qvec- -Qsimd- to prevent miscompilation, -GS, fp:precise for consistency
3605         # with MSVC which enables it by default.
3606         _cflags='-D_USE_MATH_DEFINES -FIstdlib.h -Dstrtoll=_strtoi64 -Qms0 -Qvec- -Qsimd- -GS -fp:precise'
3607         if [ $pfx = hostcc ]; then
3608             append _cflags -Dsnprintf=_snprintf
3609         fi
3610         disable stripping
3611     elif $_cc 2>&1 | grep -q Microsoft; then
3612         _type=msvc
3613         _ident=$($_cc 2>&1 | head -n1)
3614         _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< 2>&1 | awk '\''/including/ { sub(/^.*file: */, ""); gsub(/\\/, "/"); if (!match($$0, / /)) print "$@:", $$0 }'\'' > $(@:.o=.d)'
3615         _DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -showIncludes -Zs'
3616         _cflags_speed="-O2"
3617         _cflags_size="-O1"
3618         if $_cc 2>&1 | grep -q Linker; then
3619             _ld_o='-out:$@'
3620         else
3621             _ld_o='-Fe$@'
3622         fi
3623         _cc_o='-Fo$@'
3624         _cc_e='-P -Fi$@'
3625         _flags_filter=msvc_flags
3626         _ld_lib='lib%.a'
3627         _ld_path='-libpath:'
3628         _flags='-nologo'
3629         _cflags='-D_USE_MATH_DEFINES -D_CRT_SECURE_NO_WARNINGS -Dinline=__inline -FIstdlib.h -Dstrtoll=_strtoi64'
3630         if [ $pfx = hostcc ]; then
3631             if [ -z "$cl_major_ver" ] || [ $cl_major_ver -le 18 ]; then
3632                 append _cflags -Dsnprintf=_snprintf
3633             fi
3634         fi
3635         disable stripping
3636     elif $_cc --version 2>/dev/null | grep -q ^cparser; then
3637         _type=cparser
3638         _ident=$($_cc --version | head -n1)
3639         _depflags='-MMD'
3640         _cflags_speed='-O4'
3641         _cflags_size='-O2'
3642         _flags_filter=cparser_flags
3643     fi
3644
3645     eval ${pfx}_type=\$_type
3646     eval ${pfx}_ident=\$_ident
3647 }
3648
3649 set_ccvars(){
3650     eval ${1}_C=\${_cc_c-\${${1}_C}}
3651     eval ${1}_E=\${_cc_e-\${${1}_E}}
3652     eval ${1}_O=\${_cc_o-\${${1}_O}}
3653
3654     if [ -n "$_depflags" ]; then
3655         eval ${1}_DEPFLAGS=\$_depflags
3656     else
3657         eval ${1}DEP=\${_DEPCMD:-\$DEPCMD}
3658         eval ${1}DEP_FLAGS=\${_DEPFLAGS:-\$DEPFLAGS}
3659         eval DEP${1}FLAGS=\$_flags
3660     fi
3661 }
3662
3663 probe_cc cc "$cc"
3664 cflags_filter=$_flags_filter
3665 cflags_speed=$_cflags_speed
3666 cflags_size=$_cflags_size
3667 cflags_noopt=$_cflags_noopt
3668 add_cflags $_flags $_cflags
3669 cc_ldflags=$_ldflags
3670 set_ccvars CC
3671
3672 probe_cc hostcc "$host_cc"
3673 host_cflags_filter=$_flags_filter
3674 add_host_cflags  $_flags $_cflags
3675 set_ccvars HOSTCC
3676
3677 test -n "$cc_type" && enable $cc_type ||
3678     warn "Unknown C compiler $cc, unable to select optimal CFLAGS"
3679
3680 : ${as_default:=$cc}
3681 : ${dep_cc_default:=$cc}
3682 : ${ld_default:=$cc}
3683 : ${host_ld_default:=$host_cc}
3684 set_default ar as dep_cc ld host_ld windres
3685
3686 probe_cc as "$as"
3687 asflags_filter=$_flags_filter
3688 add_asflags $_flags $_cflags
3689 set_ccvars AS
3690
3691 probe_cc ld "$ld"
3692 ldflags_filter=$_flags_filter
3693 add_ldflags $_flags $_ldflags
3694 test "$cc_type" != "$ld_type" && add_ldflags $cc_ldflags
3695 LD_O=${_ld_o-$LD_O}
3696 LD_LIB=${_ld_lib-$LD_LIB}
3697 LD_PATH=${_ld_path-$LD_PATH}
3698
3699 probe_cc hostld "$host_ld"
3700 host_ldflags_filter=$_flags_filter
3701 add_host_ldflags $_flags $_ldflags
3702 HOSTLD_O=${_ld_o-$HOSTLD_O}
3703
3704 if [ -z "$CC_DEPFLAGS" ] && [ "$dep_cc" != "$cc" ]; then
3705     probe_cc depcc "$dep_cc"
3706     CCDEP=${_DEPCMD:-$DEPCMD}
3707     CCDEP_FLAGS=${_DEPFLAGS:=$DEPFLAGS}
3708     DEPCCFLAGS=$_flags
3709 fi
3710
3711 if $ar 2>&1 | grep -q Microsoft; then
3712     arflags="-nologo"
3713     ar_o='-out:$@'
3714 elif $ar 2>&1 | grep -q 'Texas Instruments'; then
3715     arflags="rq"
3716     ar_o='$@'
3717 elif $ar 2>&1 | grep -q 'Usage: ar.*-X.*any'; then
3718     arflags='-Xany -r -c'
3719     ar_o='$@'
3720 elif $ar 2>&1 | grep -q "\[D\] "; then
3721     arflags="rcD"
3722     ar_o='$@'
3723 else
3724     arflags="rc"
3725     ar_o='$@'
3726 fi
3727
3728 add_cflags $extra_cflags
3729 add_cxxflags $extra_cxxflags
3730 add_asflags $extra_cflags
3731
3732 if test -n "$sysroot"; then
3733     case "$cc_type" in
3734         gcc|llvm_gcc|clang)
3735             add_cppflags --sysroot="$sysroot"
3736             add_ldflags --sysroot="$sysroot"
3737 # On Darwin --sysroot may be ignored, -isysroot always affects headers and linking
3738             add_cppflags -isysroot "$sysroot"
3739             add_ldflags -isysroot "$sysroot"
3740         ;;
3741         tms470)
3742             add_cppflags -I"$sysinclude"
3743             add_ldflags  --sysroot="$sysroot"
3744         ;;
3745     esac
3746 fi
3747
3748 if test "$cpu" = host; then
3749     enabled cross_compile &&
3750         die "--cpu=host makes no sense when cross-compiling."
3751
3752     case "$cc_type" in
3753         gcc|llvm_gcc)
3754             check_native(){
3755                 $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
3756                 sed -n "/cc1.*$1=/{
3757                             s/.*$1=\\([^ ]*\\).*/\\1/
3758                             p
3759                             q
3760                         }" $TMPE
3761             }
3762             cpu=$(check_native -march || check_native -mcpu)
3763         ;;
3764     esac
3765
3766     test "${cpu:-host}" = host &&
3767         die "--cpu=host not supported with compiler $cc"
3768 fi
3769
3770 # Deal with common $arch aliases
3771 case "$arch" in
3772     aarch64|arm64)
3773         arch="aarch64"
3774     ;;
3775     arm*|iPad*|iPhone*)
3776         arch="arm"
3777     ;;
3778     mips*|IP*)
3779         arch="mips"
3780     ;;
3781     parisc*|hppa*)
3782         arch="parisc"
3783     ;;
3784     "Power Macintosh"|ppc*|powerpc*)
3785         arch="ppc"
3786     ;;
3787     s390|s390x)
3788         arch="s390"
3789     ;;
3790     sh4|sh)
3791         arch="sh4"
3792     ;;
3793     sun4u|sparc*)
3794         arch="sparc"
3795     ;;
3796     tilegx|tile-gx)
3797         arch="tilegx"
3798     ;;
3799     i[3-6]86*|i86pc|BePC|x86pc|x86_64|x86_32|amd64)
3800         arch="x86"
3801     ;;
3802 esac
3803
3804 is_in $arch $ARCH_LIST || warn "unknown architecture $arch"
3805 enable $arch
3806
3807 # Add processor-specific flags
3808 if enabled aarch64; then
3809
3810     case $cpu in
3811         armv*)
3812             cpuflags="-march=$cpu"
3813         ;;
3814         *)
3815             cpuflags="-mcpu=$cpu"
3816         ;;
3817     esac
3818
3819 elif enabled alpha; then
3820
3821     cpuflags="-mcpu=$cpu"
3822
3823 elif enabled arm; then
3824
3825     check_arm_arch() {
3826         check_cpp_condition stddef.h \
3827             "defined __ARM_ARCH_${1}__ || defined __TARGET_ARCH_${2:-$1}" \
3828             $cpuflags
3829     }
3830
3831     probe_arm_arch() {
3832         if   check_arm_arch 4;        then echo armv4;
3833         elif check_arm_arch 4T;       then echo armv4t;
3834         elif check_arm_arch 5;        then echo armv5;
3835         elif check_arm_arch 5E;       then echo armv5e;
3836         elif check_arm_arch 5T;       then echo armv5t;
3837         elif check_arm_arch 5TE;      then echo armv5te;
3838         elif check_arm_arch 5TEJ;     then echo armv5te;
3839         elif check_arm_arch 6;        then echo armv6;
3840         elif check_arm_arch 6J;       then echo armv6j;
3841         elif check_arm_arch 6K;       then echo armv6k;
3842         elif check_arm_arch 6Z;       then echo armv6z;
3843         elif check_arm_arch 6ZK;      then echo armv6zk;
3844         elif check_arm_arch 6T2;      then echo armv6t2;
3845         elif check_arm_arch 7;        then echo armv7;
3846         elif check_arm_arch 7A  7_A;  then echo armv7-a;
3847         elif check_arm_arch 7S;       then echo armv7-a;
3848         elif check_arm_arch 7R  7_R;  then echo armv7-r;
3849         elif check_arm_arch 7M  7_M;  then echo armv7-m;
3850         elif check_arm_arch 7EM 7E_M; then echo armv7-m;
3851         elif check_arm_arch 8A  8_A;  then echo armv8-a;
3852         fi
3853     }
3854
3855     [ "$cpu" = generic ] && cpu=$(probe_arm_arch)
3856
3857     case $cpu in
3858         armv*)
3859             cpuflags="-march=$cpu"
3860             subarch=$(echo $cpu | sed 's/[^a-z0-9]//g')
3861         ;;
3862         *)
3863             cpuflags="-mcpu=$cpu"
3864             case $cpu in
3865                 cortex-a*)                               subarch=armv7a  ;;
3866                 cortex-r*)                               subarch=armv7r  ;;
3867                 cortex-m*)                 enable thumb; subarch=armv7m  ;;
3868                 arm11*)                                  subarch=armv6   ;;
3869                 arm[79]*e*|arm9[24]6*|arm96*|arm102[26]) subarch=armv5te ;;
3870                 armv4*|arm7*|arm9[24]*)                  subarch=armv4   ;;
3871                 *)                             subarch=$(probe_arm_arch) ;;
3872             esac
3873         ;;
3874     esac
3875
3876     case "$subarch" in
3877         armv5t*)    enable fast_clz                ;;
3878         armv[6-8]*)
3879             enable fast_clz
3880             disabled fast_unaligned || enable fast_unaligned
3881             ;;
3882     esac
3883
3884 elif enabled avr32; then
3885
3886     case $cpu in
3887         ap7[02]0[0-2])
3888             subarch="avr32_ap"
3889             cpuflags="-mpart=$cpu"
3890         ;;
3891         ap)
3892             subarch="avr32_ap"
3893             cpuflags="-march=$cpu"
3894         ;;
3895         uc3[ab]*)
3896             subarch="avr32_uc"
3897             cpuflags="-mcpu=$cpu"
3898         ;;
3899         uc)
3900             subarch="avr32_uc"
3901             cpuflags="-march=$cpu"
3902         ;;
3903     esac
3904
3905 elif enabled bfin; then
3906
3907     cpuflags="-mcpu=$cpu"
3908
3909 elif enabled mips; then
3910
3911     cpuflags="-march=$cpu"
3912
3913     case $cpu in
3914         24kc)
3915             disable mips32r5
3916             disable mips64r6
3917             disable mipsfpu
3918             disable mipsdspr1
3919             disable mipsdspr2
3920             disable msa
3921         ;;
3922         24kf*)
3923             disable mips32r5
3924             disable mips64r6
3925             disable mipsdspr1
3926             disable mipsdspr2
3927             disable msa
3928         ;;
3929         24kec|34kc|1004kc)
3930             disable mips32r5
3931             disable mips64r6
3932             disable mipsfpu
3933             disable mipsdspr2
3934             disable msa
3935         ;;
3936         24kef*|34kf*|1004kf*)
3937             disable mips32r5
3938             disable mips64r6
3939             disable mipsdspr2
3940             disable msa
3941         ;;
3942         74kc)
3943             disable mips32r5
3944             disable mips64r6
3945             disable mipsfpu
3946             disable msa
3947         ;;
3948         74kf)
3949             disable mips32r5
3950             disable mips64r6
3951             disable msa
3952         ;;
3953         p5600)
3954             disable mips64r6
3955             disable mipsdspr1
3956             disable mipsdspr2
3957
3958             check_cflags "-mtune=p5600"
3959         ;;
3960         i6400)
3961             disable mips32r5
3962             disable mipsdspr1
3963             disable mipsdspr2
3964             disable mipsfpu
3965
3966             check_cflags "-mtune=i6400 -mabi=64"
3967             check_ldflags "-mabi=64"
3968         ;;
3969         loongson3*)
3970             disable mipsfpu
3971             disable mips32r2
3972             disable mips32r5
3973             disable mips64r6
3974             disable mipsdspr1
3975             disable mipsdspr2
3976             disable msa
3977             enable local_aligned_8 local_aligned_16
3978             enable simd_align_16
3979             enable fast_64bit
3980             enable fast_clz
3981             enable fast_cmov
3982             enable fast_unaligned
3983             disable aligned_stack
3984             cpuflags="-march=loongson3a -mhard-float"
3985         ;;
3986         generic)
3987             disable mips32r5
3988             disable mips64r6
3989             disable msa
3990         ;;
3991     esac
3992
3993 elif enabled ppc; then
3994
3995     disable ldbrx
3996     disable vsx
3997
3998     case $(tolower $cpu) in
3999         601|ppc601|powerpc601)
4000             cpuflags="-mcpu=601"
4001             disable altivec
4002         ;;
4003         603*|ppc603*|powerpc603*)
4004             cpuflags="-mcpu=603"
4005             disable altivec
4006         ;;
4007         604*|ppc604*|powerpc604*)
4008             cpuflags="-mcpu=604"
4009             disable altivec
4010         ;;
4011         g3|75*|ppc75*|powerpc75*)
4012             cpuflags="-mcpu=750"
4013             disable altivec
4014         ;;
4015         g4|745*|ppc745*|powerpc745*)
4016             cpuflags="-mcpu=7450"
4017             disable vsx
4018         ;;
4019         74*|ppc74*|powerpc74*)
4020             cpuflags="-mcpu=7400"
4021             disable vsx
4022         ;;
4023         g5|970|ppc970|powerpc970)
4024             cpuflags="-mcpu=970"
4025             disable vsx
4026         ;;
4027         power[3-6]*)
4028             cpuflags="-mcpu=$cpu"
4029             disable vsx
4030         ;;
4031         power[7-8]*)
4032             cpuflags="-mcpu=$cpu"
4033         ;;
4034         cell)
4035             cpuflags="-mcpu=cell"
4036             enable ldbrx
4037             disable vsx
4038         ;;
4039         e500mc)
4040             cpuflags="-mcpu=e500mc"
4041             disable altivec
4042         ;;
4043         e500v2)
4044             cpuflags="-mcpu=8548 -mhard-float -mfloat-gprs=double"
4045             disable altivec
4046             disable dcbzl
4047         ;;
4048         e500)
4049             cpuflags="-mcpu=8540 -mhard-float"
4050             disable altivec
4051             disable dcbzl
4052         ;;
4053     esac
4054
4055 elif enabled sparc; then
4056
4057     case $cpu in
4058         cypress|f93[04]|tsc701|sparcl*|supersparc|hypersparc|niagara|v[789])
4059             cpuflags="-mcpu=$cpu"
4060         ;;
4061         ultrasparc*|niagara[234])
4062             cpuflags="-mcpu=$cpu"
4063         ;;
4064     esac
4065
4066 elif enabled x86; then
4067
4068     case $cpu in
4069         i[345]86|pentium)
4070             cpuflags="-march=$cpu"
4071             disable i686
4072             disable mmx
4073         ;;
4074         # targets that do NOT support nopl and conditional mov (cmov)
4075         pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
4076             cpuflags="-march=$cpu"
4077             disable i686
4078         ;;
4079         # targets that do support nopl and conditional mov (cmov)
4080         i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64*|k8*|opteron*|athlon-fx\
4081         |core*|atom|bonnell|nehalem|westmere|silvermont|sandybridge|ivybridge|haswell|broadwell|amdfam10|barcelona|b[dt]ver*)
4082             cpuflags="-march=$cpu"
4083             enable i686
4084             enable fast_cmov
4085         ;;
4086         # targets that do support conditional mov but on which it's slow
4087         pentium4|pentium4m|prescott|nocona)
4088             cpuflags="-march=$cpu"
4089             enable i686
4090             disable fast_cmov
4091         ;;
4092     esac
4093
4094 fi
4095
4096 if [ "$cpu" != generic ]; then
4097     add_cflags  $cpuflags
4098     add_asflags $cpuflags
4099 fi
4100
4101 # compiler sanity check
4102 check_exec <<EOF
4103 int main(void){ return 0; }
4104 EOF
4105 if test "$?" != 0; then
4106     echo "$cc is unable to create an executable file."
4107     if test -z "$cross_prefix" && ! enabled cross_compile ; then
4108         echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
4109         echo "Only do this if you know what cross compiling means."
4110     fi
4111     die "C compiler test failed."
4112 fi
4113
4114 add_cppflags -D_ISOC99_SOURCE
4115 add_cxxflags -D__STDC_CONSTANT_MACROS
4116 check_cflags -std=c99
4117 check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
4118 #include <stdlib.h>
4119 EOF
4120 check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
4121 #include <stdlib.h>
4122 EOF
4123
4124 add_host_cppflags -D_ISOC99_SOURCE
4125 check_host_cflags -std=c99
4126 check_host_cflags -Wall
4127 check_host_cflags -O3
4128
4129 check_64bit(){
4130     arch32=$1
4131     arch64=$2
4132     expr=$3
4133     check_code cc "" "int test[2*($expr) - 1]" &&
4134         subarch=$arch64 || subarch=$arch32
4135 }
4136
4137 case "$arch" in
4138     aarch64|alpha|ia64)
4139         spic=$shared
4140     ;;
4141     mips)
4142         check_64bit mips mips64 '_MIPS_SIM > 1'
4143         spic=$shared
4144     ;;
4145     parisc)
4146         check_64bit parisc parisc64 'sizeof(void *) > 4'
4147         spic=$shared
4148     ;;
4149     ppc)
4150         check_64bit ppc ppc64 'sizeof(void *) > 4'
4151         spic=$shared
4152     ;;
4153     s390)
4154         check_64bit s390 s390x 'sizeof(void *) > 4'
4155         spic=$shared
4156     ;;
4157     sparc)
4158         check_64bit sparc sparc64 'sizeof(void *) > 4'
4159         spic=$shared
4160     ;;
4161     x86)
4162         check_64bit x86_32 x86_64 'sizeof(void *) > 4'
4163         # Treat x32 as x64 for now. Note it also needs spic=$shared
4164         test "$subarch" = "x86_32" && check_cpp_condition stddef.h 'defined(__x86_64__)' &&
4165             subarch=x86_64
4166         if test "$subarch" = "x86_64"; then
4167             spic=$shared
4168         fi
4169     ;;
4170     ppc)
4171         check_cc <<EOF && subarch="ppc64"
4172         int test[(int)sizeof(char*) - 7];
4173 EOF
4174     ;;
4175 esac
4176
4177 enable $subarch
4178 enabled spic && enable_weak pic
4179
4180 # OS specific
4181 case $target_os in
4182     aix)
4183         SHFLAGS=-shared
4184         add_cppflags '-I\$(SRC_PATH)/compat/aix'
4185         enabled shared && add_ldflags -Wl,-brtl
4186         ;;
4187     android)
4188         disable symver
4189         enable section_data_rel_ro
4190         SLIB_INSTALL_NAME='$(SLIBNAME)'
4191         SLIB_INSTALL_LINKS=
4192         # soname not set on purpose
4193         SHFLAGS=-shared
4194         ;;
4195     haiku)
4196         prefix_default="/boot/common"
4197         network_extralibs="-lnetwork"
4198         host_libs=
4199         ;;
4200     sunos)
4201         SHFLAGS='-shared -Wl,-h,$$(@F)'
4202         enabled x86 && SHFLAGS="-mimpure-text $SHFLAGS"
4203         network_extralibs="-lsocket -lnsl"
4204         add_cppflags -D__EXTENSIONS__
4205         # When using suncc to build, the Solaris linker will mark
4206         # an executable with each instruction set encountered by
4207         # the Solaris assembler.  As our libraries contain their own
4208         # guards for processor-specific code, instead suppress
4209         # generation of the HWCAPS ELF section on Solaris x86 only.
4210         enabled_all suncc x86 &&
4211             echo "hwcap_1 = OVERRIDE;" > mapfile &&
4212             add_ldflags -Wl,-M,mapfile
4213         nm_default='nm -P -g'
4214         ;;
4215     netbsd)
4216         disable symver
4217         oss_indev_extralibs="-lossaudio"
4218         oss_outdev_extralibs="-lossaudio"
4219         enabled gcc || check_ldflags -Wl,-zmuldefs
4220         ;;
4221     openbsd|bitrig)
4222         disable symver
4223         SHFLAGS='-shared'
4224         SLIB_INSTALL_NAME='$(SLIBNAME).$(LIBMAJOR).$(LIBMINOR)'
4225         SLIB_INSTALL_LINKS=
4226         oss_indev_extralibs="-lossaudio"
4227         oss_outdev_extralibs="-lossaudio"
4228         ;;
4229     dragonfly)
4230         disable symver
4231         ;;
4232     freebsd)
4233         ;;
4234     bsd/os)
4235         add_extralibs -lpoll -lgnugetopt
4236         strip="strip -d"
4237         ;;
4238     darwin)
4239         enabled ppc && add_asflags -force_cpusubtype_ALL
4240         SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR)'
4241         enabled x86_32 && append SHFLAGS -Wl,-read_only_relocs,suppress
4242         strip="${strip} -x"
4243         add_ldflags -Wl,-dynamic,-search_paths_first
4244         SLIBSUF=".dylib"
4245         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
4246         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
4247         objformat="macho"
4248         enabled x86_64 && objformat="macho64"
4249         enabled_any pic shared x86_64 ||
4250             { check_cflags -mdynamic-no-pic && add_asflags -mdynamic-no-pic; }
4251         ;;
4252     mingw32*)
4253         if test $target_os = "mingw32ce"; then
4254             disable network
4255         else
4256             target_os=mingw32
4257         fi
4258         LIBTARGET=i386
4259         if enabled x86_64; then
4260             LIBTARGET="i386:x86-64"
4261         elif enabled arm; then
4262             LIBTARGET=arm-wince
4263         fi
4264         enabled shared && ! enabled small && check_cmd $windres --version && enable gnu_windres
4265         check_ldflags -Wl,--nxcompat
4266         check_ldflags -Wl,--dynamicbase
4267         enabled x86_32 && check_ldflags -Wl,--large-address-aware
4268         shlibdir_default="$bindir_default"
4269         SLIBPREF=""
4270         SLIBSUF=".dll"
4271         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
4272         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
4273         dlltool="${cross_prefix}dlltool"
4274         if check_cmd lib.exe -list; then
4275             SLIB_EXTRA_CMD=-'sed -e "s/ @[^ ]*//" $$(@:$(SLIBSUF)=.orig.def) > $$(@:$(SLIBSUF)=.def); lib.exe /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib)'
4276             if enabled x86_64; then
4277                 LIBTARGET=x64
4278             fi
4279         elif check_cmd $dlltool --version; then
4280             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)'
4281         fi
4282         SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
4283         SLIB_INSTALL_LINKS=
4284         SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
4285         SLIB_INSTALL_EXTRA_LIB='lib$(SLIBNAME:$(SLIBSUF)=.dll.a) $(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
4286         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'
4287         objformat="win32"
4288         ranlib=:
4289         enable dos_paths
4290         ;;
4291     win32|win64)
4292         disable symver
4293         if enabled shared; then
4294             # Link to the import library instead of the normal static library
4295             # for shared libs.
4296             LD_LIB='%.lib'
4297             # Cannot build both shared and static libs with MSVC or icl.
4298             disable static
4299         fi
4300         enabled x86_32 && check_ldflags -LARGEADDRESSAWARE
4301         shlibdir_default="$bindir_default"
4302         SLIBPREF=""
4303         SLIBSUF=".dll"
4304         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
4305         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
4306         SLIB_CREATE_DEF_CMD='$(SRC_PATH)/compat/windows/makedef $(SUBDIR)lib$(NAME).ver $(OBJS) > $$(@:$(SLIBSUF)=.def)'
4307         SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
4308         SLIB_INSTALL_LINKS=
4309         SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
4310         SLIB_INSTALL_EXTRA_LIB='$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
4311         SHFLAGS='-dll -def:$$(@:$(SLIBSUF)=.def) -implib:$(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib)'
4312         objformat="win32"
4313         ranlib=:
4314         enable dos_paths
4315         ;;
4316     cygwin*)
4317         target_os=cygwin
4318         shlibdir_default="$bindir_default"
4319         SLIBPREF="cyg"
4320         SLIBSUF=".dll"
4321         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
4322         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
4323         SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
4324         SLIB_INSTALL_LINKS=
4325         SLIB_INSTALL_EXTRA_LIB='lib$(FULLNAME).dll.a'
4326         SHFLAGS='-shared -Wl,--out-implib,$(SUBDIR)lib$(FULLNAME).dll.a'
4327         objformat="win32"
4328         enable dos_paths
4329         enabled shared && ! enabled small && check_cmd $windres --version && enable gnu_windres
4330         ;;
4331     *-dos|freedos|opendos)
4332         network_extralibs="-lsocket"
4333         objformat="coff"
4334         enable dos_paths
4335         add_cppflags -U__STRICT_ANSI__
4336         ;;
4337     linux)
4338         enable dv1394
4339         enable section_data_rel_ro
4340         ;;
4341     irix*)
4342         target_os=irix
4343         ranlib="echo ignoring ranlib"
4344         ;;
4345     os/2*)
4346         strip="lxlite -CS"
4347         ln_s="cp -f"
4348         objformat="aout"
4349         add_cppflags -D_GNU_SOURCE
4350         add_ldflags -Zomf -Zbin-files -Zargs-wild -Zmap
4351         SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
4352         LIBSUF="_s.a"
4353         SLIBPREF=""
4354         SLIBSUF=".dll"
4355         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
4356         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
4357         SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
4358             echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
4359             echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
4360             echo EXPORTS >> $(SUBDIR)$(NAME).def; \
4361             emxexp $(OBJS) >> $(SUBDIR)$(NAME).def'
4362         SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
4363             emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
4364         SLIB_INSTALL_EXTRA_LIB='$(LIBPREF)$(NAME)_dll.a $(LIBPREF)$(NAME)_dll.lib'
4365         enable dos_paths
4366         enable_weak os2threads
4367         ;;
4368     gnu/kfreebsd)
4369         add_cppflags -D_BSD_SOURCE
4370         ;;
4371     gnu)
4372         ;;
4373     qnx)
4374         add_cppflags -D_QNX_SOURCE
4375         network_extralibs="-lsocket"
4376         ;;
4377     symbian)
4378         SLIBSUF=".dll"
4379         enable dos_paths
4380         add_cflags --include=$sysinclude/gcce/gcce.h -fvisibility=default
4381         add_cppflags -D__GCCE__ -D__SYMBIAN32__ -DSYMBIAN_OE_POSIX_SIGNALS
4382         add_ldflags -Wl,--target1-abs,--no-undefined \
4383                     -Wl,-Ttext,0x80000,-Tdata,0x1000000 -shared \
4384                     -Wl,--entry=_E32Startup -Wl,-u,_E32Startup
4385         add_extralibs -l:eexe.lib -l:usrt2_2.lib -l:dfpaeabi.dso \
4386                       -l:drtaeabi.dso -l:scppnwdl.dso -lsupc++ -lgcc \
4387                       -l:libc.dso -l:libm.dso -l:euser.dso -l:libcrt0.lib
4388         ;;
4389     osf1)
4390         add_cppflags -D_OSF_SOURCE -D_POSIX_PII -D_REENTRANT
4391         ;;
4392     minix)
4393         ;;
4394     plan9)
4395         add_cppflags -D_C99_SNPRINTF_EXTENSION  \
4396                      -D_REENTRANT_SOURCE        \
4397                      -D_RESEARCH_SOURCE         \
4398                      -DFD_SETSIZE=96            \
4399                      -DHAVE_SOCK_OPTS
4400         add_compat strtod.o strtod=avpriv_strtod
4401         network_extralibs='-lbsd'
4402         exeobjs=compat/plan9/main.o
4403         disable ffserver
4404         cp_f='cp'
4405         ;;
4406     none)
4407         ;;
4408     *)
4409         die "Unknown OS '$target_os'."
4410         ;;
4411 esac
4412
4413 # determine libc flavour
4414
4415 probe_libc(){
4416     pfx=$1
4417     pfx_no_=${pfx%_}
4418     # uclibc defines __GLIBC__, so it needs to be checked before glibc.
4419     if check_${pfx}cpp_condition features.h "defined __UCLIBC__"; then
4420         eval ${pfx}libc_type=uclibc
4421         add_${pfx}cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
4422     elif check_${pfx}cpp_condition features.h "defined __GLIBC__"; then
4423         eval ${pfx}libc_type=glibc
4424         add_${pfx}cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
4425     # MinGW headers can be installed on Cygwin, so check for newlib first.
4426     elif check_${pfx}cpp_condition newlib.h "defined _NEWLIB_VERSION"; then
4427         eval ${pfx}libc_type=newlib
4428         add_${pfx}cppflags -U__STRICT_ANSI__
4429     # MinGW64 is backwards compatible with MinGW32, so check for it first.
4430     elif check_${pfx}cpp_condition _mingw.h "defined __MINGW64_VERSION_MAJOR"; then
4431         eval ${pfx}libc_type=mingw64
4432         if check_${pfx}cpp_condition _mingw.h "__MINGW64_VERSION_MAJOR < 3"; then
4433             add_compat msvcrt/snprintf.o
4434             add_cflags "-include $source_path/compat/msvcrt/snprintf.h"
4435         fi
4436         add_${pfx}cppflags -U__STRICT_ANSI__ -D__USE_MINGW_ANSI_STDIO=1
4437         eval test \$${pfx_no_}cc_type = "gcc" &&
4438             add_${pfx}cppflags -D__printf__=__gnu_printf__
4439     elif check_${pfx}cpp_condition _mingw.h "defined __MINGW_VERSION"  ||
4440          check_${pfx}cpp_condition _mingw.h "defined __MINGW32_VERSION"; then
4441         eval ${pfx}libc_type=mingw32
4442         check_${pfx}cpp_condition _mingw.h "__MINGW32_MAJOR_VERSION > 3 || \
4443             (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
4444             die "ERROR: MinGW32 runtime version must be >= 3.15."
4445         add_${pfx}cppflags -U__STRICT_ANSI__ -D__USE_MINGW_ANSI_STDIO=1
4446         eval test \$${pfx_no_}cc_type = "gcc" &&
4447             add_${pfx}cppflags -D__printf__=__gnu_printf__
4448     elif check_${pfx}cpp_condition crtversion.h "defined _VC_CRT_MAJOR_VERSION"; then
4449         eval ${pfx}libc_type=msvcrt
4450         # The MSVC 2010 headers (Win 7.0 SDK) set _WIN32_WINNT to
4451         # 0x601 by default unless something else is set by the user.
4452         # This can easily lead to us detecting functions only present
4453         # in such new versions and producing binaries requiring windows 7.0.
4454         # Therefore explicitly set the default to XP unless the user has
4455         # set something else on the command line.
4456         check_${pfx}cpp_condition stdlib.h "defined(_WIN32_WINNT)" ||
4457             add_${pfx}cppflags -D_WIN32_WINNT=0x0502
4458     elif check_${pfx}cpp_condition stddef.h "defined __KLIBC__"; then
4459         eval ${pfx}libc_type=klibc
4460     elif check_${pfx}cpp_condition sys/cdefs.h "defined __BIONIC__"; then
4461         eval ${pfx}libc_type=bionic
4462     elif check_${pfx}cpp_condition sys/brand.h "defined LABELED_BRAND_NAME"; then
4463         eval ${pfx}libc_type=solaris
4464         add_${pfx}cppflags -D__EXTENSIONS__ -D_XOPEN_SOURCE=600
4465     fi
4466     check_${pfx}cc <<EOF
4467 #include <time.h>
4468 void *v = localtime_r;
4469 EOF
4470 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
4471 #include <time.h>
4472 void *v = localtime_r;
4473 EOF
4474
4475 }
4476
4477 probe_libc
4478 test -n "$libc_type" && enable libc_$libc_type
4479 probe_libc host_
4480 test -n "$host_libc_type" && enable host_libc_$host_libc_type
4481
4482 case $libc_type in
4483     bionic)
4484         add_compat strtod.o strtod=avpriv_strtod
4485         ;;
4486     msvcrt)
4487         if [ -z "$cl_major_ver" ] || [ $cl_major_ver -le 18 ]; then
4488             add_compat strtod.o strtod=avpriv_strtod
4489             add_compat msvcrt/snprintf.o snprintf=avpriv_snprintf   \
4490                                          _snprintf=avpriv_snprintf  \
4491                                          vsnprintf=avpriv_vsnprintf
4492         fi
4493         ;;
4494 esac
4495
4496 # hacks for compiler/libc/os combinations
4497
4498 if enabled_all tms470 libc_glibc; then
4499     CPPFLAGS="-I${source_path}/compat/tms470 ${CPPFLAGS}"
4500     add_cppflags -D__USER_LABEL_PREFIX__=
4501     add_cppflags -D__builtin_memset=memset
4502     add_cppflags -D__gnuc_va_list=va_list -D_VA_LIST_DEFINED
4503     add_cflags   -pds=48    # incompatible redefinition of macro
4504 fi
4505
4506 if enabled_all ccc libc_glibc; then
4507     add_ldflags -Wl,-z,now  # calls to libots crash without this
4508 fi
4509
4510 check_compile_assert flt_lim "float.h limits.h" "DBL_MAX == (double)DBL_MAX" ||
4511     add_cppflags '-I\$(SRC_PATH)/compat/float'
4512
4513 esc(){
4514     echo "$*" | sed 's/%/%25/g;s/:/%3a/g'
4515 }
4516
4517 echo "config:$arch:$subarch:$cpu:$target_os:$(esc $cc_ident):$(esc $FFMPEG_CONFIGURATION)" >config.fate
4518
4519 check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable_weak pic
4520
4521 set_default libdir
4522 : ${shlibdir_default:="$libdir"}
4523 : ${pkgconfigdir_default:="$libdir/pkgconfig"}
4524
4525 set_default $PATHS_LIST
4526 set_default nm
4527
4528 # we need to build at least one lib type
4529 if ! enabled_any static shared; then
4530     cat <<EOF
4531 At least one library type must be built.
4532 Specify --enable-static to build the static libraries or --enable-shared to
4533 build the shared libraries as well. To only build the shared libraries specify
4534 --disable-static in addition to --enable-shared.
4535 EOF
4536     exit 1;
4537 fi
4538
4539 die_license_disabled() {
4540     enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
4541 }
4542
4543 die_license_disabled_gpl() {
4544     enabled $1 || { enabled $2 && die "$2 is incompatible with the gpl and --enable-$1 is not specified."; }
4545 }
4546
4547 die_license_disabled gpl frei0r
4548 die_license_disabled gpl libcdio
4549 die_license_disabled gpl libsmbclient
4550 die_license_disabled gpl libutvideo
4551 die_license_disabled gpl libvidstab
4552 die_license_disabled gpl libx264
4553 die_license_disabled gpl libx265
4554 die_license_disabled gpl libxavs
4555 die_license_disabled gpl libxvid
4556 die_license_disabled gpl libzvbi
4557 die_license_disabled gpl x11grab
4558
4559 die_license_disabled nonfree libaacplus
4560 die_license_disabled nonfree libfaac
4561 die_license_disabled nonfree nvenc
4562 enabled gpl && die_license_disabled_gpl nonfree libfdk_aac
4563 enabled gpl && die_license_disabled_gpl nonfree openssl
4564
4565 die_license_disabled version3 libopencore_amrnb
4566 die_license_disabled version3 libopencore_amrwb
4567 die_license_disabled version3 libsmbclient
4568 die_license_disabled version3 libvo_aacenc
4569 die_license_disabled version3 libvo_amrwbenc
4570
4571 enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
4572
4573 disabled optimizations || check_cflags -fomit-frame-pointer
4574
4575 enable_weak_pic() {
4576     disabled pic && return
4577     enable pic
4578     add_cppflags -DPIC
4579     case "$target_os" in
4580     mingw*|cygwin*)
4581         ;;
4582     *)
4583         add_cflags -fPIC
4584         ;;
4585     esac
4586     add_asflags  -fPIC
4587 }
4588
4589 enabled pic && enable_weak_pic
4590
4591 check_cc <<EOF || die "Symbol mangling check failed."
4592 int ff_extern;
4593 EOF
4594 sym=$($nm $TMPO | awk '/ff_extern/{ print substr($0, match($0, /[^ \t]*ff_extern/)) }')
4595 extern_prefix=${sym%%ff_extern*}
4596
4597 check_cc <<EOF && enable_weak inline_asm
4598 void foo(void) { __asm__ volatile ("" ::); }
4599 EOF
4600
4601 _restrict=
4602 for restrict_keyword in restrict __restrict__ __restrict; do
4603     check_cc <<EOF && _restrict=$restrict_keyword && break
4604 void foo(char * $restrict_keyword p);
4605 EOF
4606 done
4607
4608 check_cc <<EOF && enable pragma_deprecated
4609 void foo(void) { _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") }
4610 EOF
4611
4612 check_cc <<EOF && enable attribute_packed
4613 struct { int x; } __attribute__((packed)) x;
4614 EOF
4615
4616 check_cc <<EOF && enable attribute_may_alias
4617 union { int x; } __attribute__((may_alias)) x;
4618 EOF
4619
4620 check_cc <<EOF || die "endian test failed"
4621 unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
4622 EOF
4623 od -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
4624
4625 if  [ "$cpu" = "power7" ] || [ "$cpu" = "power8" ] || enabled ppc64; then
4626     if ! enabled bigendian && enabled altivec ;then
4627         enable vsx
4628     fi
4629 fi
4630
4631 check_gas() {
4632     log "check_gas using '$as' as AS"
4633     # :vararg is used on aarch64, arm and ppc altivec
4634     check_as <<EOF || return 1
4635 .macro m n, y:vararg=0
4636 \n: .int \y
4637 .endm
4638 m x
4639 EOF
4640     # .altmacro is only used in arm asm
4641     ! enabled arm || check_as <<EOF || return 1
4642 .altmacro
4643 EOF
4644     enable gnu_as
4645     return 0
4646 }
4647
4648 if enabled_any arm aarch64 || enabled_all ppc altivec && enabled asm; then
4649     nogas=:
4650     enabled_any arm aarch64 && nogas=die
4651     enabled_all ppc altivec && [ $target_os_default != aix ] && nogas=warn
4652     as_noop=-v
4653
4654     case $as_type in
4655         arm*) gaspp_as_type=armasm; as_noop=-h ;;
4656         gcc)  gaspp_as_type=gas ;;
4657         *)    gaspp_as_type=$as_type ;;
4658     esac
4659
4660     [ $target_os = "darwin" ] && gaspp_as_type="apple-$gaspp_as_type"
4661
4662     test "${as#*gas-preprocessor.pl}" != "$as" ||
4663     check_cmd gas-preprocessor.pl -arch $arch -as-type $gaspp_as_type -- ${as:=$cc} $as_noop &&
4664         gas="${gas:=gas-preprocessor.pl} -arch $arch -as-type $gaspp_as_type -- ${as:=$cc}"
4665
4666     if ! check_gas ; then
4667         as=${gas:=$as}
4668         check_gas || \
4669             $nogas "GNU assembler not found, install/update gas-preprocessor"
4670     fi
4671
4672     check_as <<EOF && enable as_func
4673 .func test
4674 .endfunc
4675 EOF
4676 fi
4677
4678 check_inline_asm inline_asm_labels '"1:\n"'
4679
4680 check_inline_asm inline_asm_nonlocal_labels '"Label:\n"'
4681
4682 if enabled aarch64; then
4683     enabled armv8 && check_insn armv8 'prfm   pldl1strm, [x0]'
4684     # internal assembler in clang 3.3 does not support this instruction
4685     enabled neon && check_insn neon 'ext   v0.8B, v0.8B, v1.8B, #1'
4686     enabled vfp  && check_insn vfp  'fmadd d0,    d0,    d1,    d2'
4687
4688     map 'enabled_any ${v}_external ${v}_inline || disable $v' $ARCH_EXT_LIST_ARM
4689
4690 elif enabled alpha; then
4691
4692     check_cflags -mieee
4693
4694 elif enabled arm; then
4695
4696     check_cpp_condition stddef.h "defined __thumb__" && check_cc <<EOF && enable_weak thumb
4697 float func(float a, float b){ return a+b; }
4698 EOF
4699
4700     enabled thumb && check_cflags -mthumb || check_cflags -marm
4701
4702     if     check_cpp_condition stddef.h "defined __ARM_PCS_VFP"; then
4703         enable vfp_args
4704     elif ! check_cpp_condition stddef.h "defined __ARM_PCS || defined __SOFTFP__"; then
4705         case "${cross_prefix:-$cc}" in
4706             *hardfloat*)         enable vfp_args;   fpabi=vfp ;;
4707             *) check_ld "cc" <<EOF && enable vfp_args && fpabi=vfp || fpabi=soft ;;
4708 __asm__ (".eabi_attribute 28, 1");
4709 int main(void) { return 0; }
4710 EOF
4711         esac
4712         warn "Compiler does not indicate floating-point ABI, guessing $fpabi."
4713     fi
4714
4715     enabled armv5te && check_insn armv5te 'qadd r0, r0, r0'
4716     enabled armv6   && check_insn armv6   'sadd16 r0, r0, r0'
4717     enabled armv6t2 && check_insn armv6t2 'movt r0, #0'
4718     enabled neon    && check_insn neon    'vadd.i16 q0, q0, q0'
4719     enabled vfp     && check_insn vfp     'fadds s0, s0, s0'
4720     enabled vfpv3   && check_insn vfpv3   'vmov.f32 s0, #1.0'
4721     enabled setend  && check_insn setend  'setend be'
4722
4723     [ $target_os = linux ] || [ $target_os = android ] ||
4724         map 'enabled_any ${v}_external ${v}_inline || disable $v' \
4725             $ARCH_EXT_LIST_ARM
4726
4727     check_inline_asm asm_mod_q '"add r0, %Q0, %R0" :: "r"((long long)0)'
4728
4729     check_as <<EOF && enable as_dn_directive
4730 ra .dn d0.i16
4731 .unreq ra
4732 EOF
4733
4734     # llvm's integrated assembler supports .object_arch from llvm 3.5
4735     [ "$objformat" = elf ] && check_as <<EOF && enable as_object_arch
4736 .object_arch armv4
4737 EOF
4738
4739     [ $target_os != win32 ] && enabled_all armv6t2 shared !pic && enable_weak_pic
4740
4741 elif enabled mips; then
4742
4743     # Enable minimum ISA based on selected options
4744     if enabled mips64 && (enabled mipsdspr1 || enabled mipsdspr2); then
4745         add_cflags "-mips64r2"
4746         add_asflags "-mips64r2"
4747     elif enabled mips64 && enabled mipsfpu && disabled loongson3; then
4748         add_cflags "-mips64"
4749         add_asflags "-mips64"
4750     elif enabled mipsdspr1 || enabled mipsdspr2; then
4751         add_cflags "-mips32r2 -mfp32"
4752         add_asflags "-mips32r2 -mfp32"
4753     elif enabled mips32r5 || enabled mips64r6; then
4754         check_cflags "-mfp64"
4755         check_ldflags "-mfp64"
4756     fi
4757
4758     enabled mips32r5  && check_cflags "-mips32r5 -msched-weight -mload-store-pairs -funroll-loops" &&
4759      check_ldflags "-mips32r5" &&
4760      check_inline_asm mips32r5  '"ulw $t0, ($t1)"'
4761     enabled mips64r6  && check_cflags "-mips64r6 -msched-weight -mload-store-pairs -funroll-loops" &&
4762      check_ldflags "-mips64r6" &&
4763      check_inline_asm mips64r6  '"aui $t0, $t1, 1"'
4764     enabled mipsdspr1 && add_cflags "-mdsp" && add_asflags "-mdsp" &&
4765      check_inline_asm mipsdspr1 '"addu.qb $t0, $t1, $t2"'
4766     enabled mipsdspr2 && add_cflags "-mdspr2" && add_asflags "-mdspr2" &&
4767      check_inline_asm mipsdspr2 '"absq_s.qb $t0, $t1"'
4768     enabled mipsfpu   && add_cflags "-mhard-float" && add_asflags "-mhard-float" &&
4769      check_inline_asm mipsfpu   '"madd.d $f0, $f2, $f4, $f6"'
4770     enabled msa       && check_cflags "-mmsa" && check_ldflags "-mmsa" &&
4771      check_inline_asm msa       '"addvi.b $w0, $w1, 1"'
4772     enabled loongson3 && check_inline_asm loongson3 '"gsldxc1 $f0, 0($2, $3)"'
4773
4774     enabled mips32r5 && add_asflags "-mips32r5 -mfp64"
4775     enabled mips64r6 && add_asflags "-mips64r6 -mfp64"
4776     enabled msa && add_asflags "-mmsa"
4777
4778 elif enabled parisc; then
4779
4780     if enabled gcc; then
4781         case $($cc -dumpversion) in
4782             4.[3-9].*) check_cflags -fno-optimize-sibling-calls ;;
4783         esac
4784     fi
4785
4786 elif enabled ppc; then
4787
4788     enable local_aligned_8 local_aligned_16 local_aligned_32
4789
4790     check_inline_asm dcbzl     '"dcbzl 0, %0" :: "r"(0)'
4791     check_inline_asm ibm_asm   '"add 0, 0, 0"'
4792     check_inline_asm ppc4xx    '"maclhw r10, r11, r12"'
4793     check_inline_asm xform_asm '"lwzx %1, %y0" :: "Z"(*(int*)0), "r"(0)'
4794
4795     # AltiVec flags: The FSF version of GCC differs from the Apple version
4796     if enabled altivec; then
4797         check_cflags -maltivec -mabi=altivec &&
4798         { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
4799         check_cflags -faltivec
4800
4801         # check if our compiler supports Motorola AltiVec C API
4802         check_cc <<EOF || disable altivec
4803 $inc_altivec_h
4804 int main(void) {
4805     vector signed int v1 = (vector signed int) { 0 };
4806     vector signed int v2 = (vector signed int) { 1 };
4807     v1 = vec_add(v1, v2);
4808     return 0;
4809 }
4810 EOF
4811
4812         enabled altivec || warn "Altivec disabled, possibly missing --cpu flag"
4813     fi
4814
4815     if enabled vsx; then
4816         check_cflags -mvsx &&
4817         check_builtin vec_vsx_ld "altivec.h" "__builtin_vec_vsx_ld" || disable vsx
4818     fi
4819
4820     if enabled power8; then
4821         check_cpp_condition "altivec.h" "defined(_ARCH_PWR8)" || disable power8
4822     fi
4823
4824 elif enabled x86; then
4825
4826     check_builtin rdtsc    intrin.h   "__rdtsc()"
4827     check_builtin mm_empty mmintrin.h "_mm_empty()"
4828
4829     enable local_aligned_8 local_aligned_16 local_aligned_32
4830
4831     # check whether EBP is available on x86
4832     # As 'i' is stored on the stack, this program will crash
4833     # if the base pointer is used to access it because the
4834     # base pointer is cleared in the inline assembly code.
4835     check_exec_crash <<EOF && enable ebp_available
4836 volatile int i=0;
4837 __asm__ volatile ("xorl %%ebp, %%ebp" ::: "%ebp");
4838 return i;
4839 EOF
4840
4841     # check whether EBX is available on x86
4842     check_inline_asm ebx_available '""::"b"(0)' &&
4843         check_inline_asm ebx_available '"":::"%ebx"'
4844
4845     # check whether xmm clobbers are supported
4846     check_inline_asm xmm_clobbers '"":::"%xmm0"'
4847
4848     check_inline_asm inline_asm_direct_symbol_refs '"movl '$extern_prefix'test, %eax"' ||
4849         check_inline_asm inline_asm_direct_symbol_refs '"movl '$extern_prefix'test(%rip), %eax"'
4850
4851     # check whether binutils is new enough to compile SSSE3/MMXEXT
4852     enabled ssse3  && check_inline_asm ssse3_inline  '"pabsw %xmm0, %xmm0"'
4853     enabled mmxext && check_inline_asm mmxext_inline '"pmaxub %mm0, %mm1"'
4854
4855     if ! disabled_any asm mmx yasm; then
4856         if check_cmd $yasmexe --version; then
4857             enabled x86_64 && yasm_extra="-m amd64"
4858             yasm_debug="-g dwarf2"
4859         elif check_cmd nasm -v; then
4860             yasmexe=nasm
4861             yasm_debug="-g -F dwarf"
4862             if enabled x86_64; then
4863                 case "$objformat" in
4864                     elf)   objformat=elf64 ;;
4865                     win32) objformat=win64 ;;
4866                 esac
4867             fi
4868         fi
4869
4870         YASMFLAGS="-f $objformat $yasm_extra"
4871  &