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