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