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