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