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