6b335ad3c61ed35b1dd54983e40b0463395a4e7d
[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 g729_decoder_select="dsputil"
1775 h261_decoder_select="error_resilience mpegvideo"
1776 h261_encoder_select="aandcttables mpegvideoenc"
1777 h263_decoder_select="error_resilience h263_parser mpegvideo"
1778 h263_encoder_select="aandcttables mpegvideoenc"
1779 h263i_decoder_select="h263_decoder"
1780 h263p_encoder_select="h263_encoder"
1781 h264_decoder_select="golomb h264chroma h264dsp h264pred h264qpel videodsp"
1782 h264_decoder_suggest="error_resilience"
1783 huffyuv_decoder_select="dsputil"
1784 huffyuv_encoder_select="dsputil huffman"
1785 iac_decoder_select="dsputil fft mdct sinewin"
1786 imc_decoder_select="dsputil fft mdct sinewin"
1787 indeo3_decoder_select="hpeldsp"
1788 interplay_video_decoder_select="hpeldsp"
1789 jpegls_decoder_select="dsputil golomb hpeldsp"
1790 jpegls_encoder_select="golomb"
1791 jv_decoder_select="dsputil"
1792 lagarith_decoder_select="dsputil"
1793 ljpeg_encoder_select="aandcttables mpegvideoenc"
1794 loco_decoder_select="golomb"
1795 mdec_decoder_select="dsputil error_resilience mpegvideo"
1796 mimic_decoder_select="dsputil hpeldsp"
1797 mjpeg_decoder_select="dsputil hpeldsp"
1798 mjpegb_decoder_select="dsputil hpeldsp"
1799 mjpeg_encoder_select="aandcttables dsputil mpegvideoenc"
1800 mlp_decoder_select="dsputil mlp_parser"
1801 motionpixels_decoder_select="dsputil"
1802 mp1_decoder_select="mpegaudio"
1803 mp1float_decoder_select="mpegaudio"
1804 mp2_decoder_select="mpegaudio"
1805 mp2float_decoder_select="mpegaudio"
1806 mp3_decoder_select="mpegaudio"
1807 mp3adu_decoder_select="mpegaudio"
1808 mp3adufloat_decoder_select="mpegaudio"
1809 mp3float_decoder_select="mpegaudio"
1810 mp3on4_decoder_select="mpegaudio"
1811 mp3on4float_decoder_select="mpegaudio"
1812 mpc7_decoder_select="dsputil mpegaudiodsp"
1813 mpc8_decoder_select="dsputil mpegaudiodsp"
1814 mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h"
1815 mpeg_xvmc_decoder_select="mpeg2video_decoder"
1816 mpeg1video_decoder_select="error_resilience mpegvideo"
1817 mpeg1video_encoder_select="aandcttables mpegvideoenc"
1818 mpeg2video_decoder_select="error_resilience mpegvideo"
1819 mpeg2video_encoder_select="aandcttables mpegvideoenc"
1820 mpeg4_decoder_select="h263_decoder mpeg4video_parser"
1821 mpeg4_encoder_select="h263_encoder"
1822 msmpeg4v1_decoder_select="h263_decoder"
1823 msmpeg4v2_decoder_select="h263_decoder"
1824 msmpeg4v2_encoder_select="h263_encoder"
1825 msmpeg4v3_decoder_select="h263_decoder"
1826 msmpeg4v3_encoder_select="h263_encoder"
1827 mss2_decoder_select="error_resilience vc1_decoder"
1828 mxpeg_decoder_select="dsputil hpeldsp"
1829 nellymoser_decoder_select="mdct sinewin"
1830 nellymoser_encoder_select="audio_frame_queue mdct sinewin"
1831 nuv_decoder_select="dsputil lzo"
1832 png_decoder_select="zlib"
1833 png_encoder_select="dsputil zlib"
1834 prores_decoder_select="dsputil"
1835 prores_encoder_select="dsputil"
1836 qcelp_decoder_select="lsp"
1837 qdm2_decoder_select="mdct rdft mpegaudiodsp"
1838 ra_144_encoder_select="audio_frame_queue lpc"
1839 ralf_decoder_select="golomb"
1840 rtjpeg_decoder_select="dsputil"
1841 rv10_decoder_select="error_resilience h263_decoder"
1842 rv10_encoder_select="h263_encoder"
1843 rv20_decoder_select="error_resilience h263_decoder"
1844 rv20_encoder_select="h263_encoder"
1845 rv30_decoder_select="error_resilience golomb h264chroma h264pred h264qpel mpegvideo videodsp"
1846 rv40_decoder_select="error_resilience golomb h264chroma h264pred h264qpel mpegvideo videodsp"
1847 shorten_decoder_select="golomb"
1848 sipr_decoder_select="lsp"
1849 snow_decoder_select="dsputil dwt h264qpel hpeldsp rangecoder"
1850 snow_encoder_select="aandcttables dsputil dwt h264qpel hpeldsp mpegvideoenc rangecoder"
1851 sonic_decoder_select="golomb"
1852 sonic_encoder_select="golomb"
1853 sonic_ls_encoder_select="golomb"
1854 sp5x_decoder_select="dsputil hpeldsp"
1855 svq1_decoder_select="hpeldsp"
1856 svq1_encoder_select="aandcttables dsputil hpeldsp mpegvideoenc"
1857 svq3_decoder_select="golomb h264chroma h264dsp h264pred h264qpel hpeldsp mpegvideo videodsp"
1858 svq3_decoder_suggest="error_resilience zlib"
1859 tak_decoder_select="dsputil"
1860 theora_decoder_select="vp3_decoder"
1861 tiff_decoder_suggest="zlib"
1862 tiff_encoder_suggest="zlib"
1863 thp_decoder_select="dsputil hpeldsp"
1864 truehd_decoder_select="mlp_parser"
1865 truemotion2_decoder_select="dsputil"
1866 truespeech_decoder_select="dsputil"
1867 tscc_decoder_select="zlib"
1868 twinvq_decoder_select="mdct lsp sinewin"
1869 utvideo_decoder_select="dsputil"
1870 utvideo_encoder_select="dsputil huffman"
1871 vble_decoder_select="dsputil"
1872 vc1_decoder_select="error_resilience h263_decoder h264chroma h264qpel"
1873 vc1image_decoder_select="vc1_decoder"
1874 vorbis_decoder_select="mdct"
1875 vorbis_encoder_select="mdct"
1876 vp3_decoder_select="hpeldsp vp3dsp videodsp"
1877 vp5_decoder_select="h264chroma hpeldsp videodsp vp3dsp"
1878 vp6_decoder_select="h264chroma hpeldsp huffman videodsp vp3dsp"
1879 vp6a_decoder_select="vp6_decoder"
1880 vp6f_decoder_select="vp6_decoder"
1881 vp8_decoder_select="h264pred videodsp"
1882 wmapro_decoder_select="mdct sinewin"
1883 wmav1_decoder_select="mdct sinewin"
1884 wmav1_encoder_select="mdct sinewin"
1885 wmav2_decoder_select="mdct sinewin"
1886 wmav2_encoder_select="mdct sinewin"
1887 wmavoice_decoder_select="lsp rdft dct mdct sinewin"
1888 wmv1_decoder_select="h263_decoder"
1889 wmv1_encoder_select="h263_encoder"
1890 wmv2_decoder_select="h263_decoder videodsp"
1891 wmv2_encoder_select="h263_encoder"
1892 wmv3_decoder_select="vc1_decoder"
1893 wmv3image_decoder_select="wmv3_decoder"
1894 zerocodec_decoder_select="zlib"
1895 zlib_decoder_select="zlib"
1896 zlib_encoder_select="zlib"
1897 zmbv_decoder_select="zlib"
1898 zmbv_encoder_select="zlib"
1899
1900 # hardware accelerators
1901 crystalhd_deps="libcrystalhd_libcrystalhd_if_h"
1902 dxva2_deps="dxva2api_h"
1903 vaapi_deps="va_va_h"
1904 vda_deps="VideoDecodeAcceleration_VDADecoder_h pthreads"
1905 vda_extralibs="-framework CoreFoundation -framework VideoDecodeAcceleration -framework QuartzCore"
1906 vdpau_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1907
1908 h263_vaapi_hwaccel_deps="vaapi"
1909 h263_vaapi_hwaccel_select="h263_decoder"
1910 h263_vdpau_hwaccel_deps="vdpau"
1911 h263_vdpau_hwaccel_select="h263_decoder"
1912 h264_crystalhd_decoder_select="crystalhd h264_mp4toannexb_bsf h264_parser"
1913 h264_dxva2_hwaccel_deps="dxva2"
1914 h264_dxva2_hwaccel_select="h264_decoder"
1915 h264_vaapi_hwaccel_deps="vaapi"
1916 h264_vaapi_hwaccel_select="h264_decoder"
1917 h264_vda_decoder_deps="vda"
1918 h264_vda_decoder_select="h264_decoder"
1919 h264_vda_hwaccel_deps="vda"
1920 h264_vda_hwaccel_select="h264_decoder"
1921 h264_vdpau_decoder_deps="vdpau"
1922 h264_vdpau_decoder_select="h264_decoder"
1923 h264_vdpau_hwaccel_deps="vdpau"
1924 h264_vdpau_hwaccel_select="h264_decoder"
1925 mpeg_vdpau_decoder_deps="vdpau"
1926 mpeg_vdpau_decoder_select="mpeg2video_decoder"
1927 mpeg1_vdpau_decoder_deps="vdpau"
1928 mpeg1_vdpau_decoder_select="mpeg1video_decoder"
1929 mpeg1_vdpau_hwaccel_deps="vdpau"
1930 mpeg1_vdpau_hwaccel_select="mpeg1video_decoder"
1931 mpeg2_crystalhd_decoder_select="crystalhd"
1932 mpeg2_dxva2_hwaccel_deps="dxva2"
1933 mpeg2_dxva2_hwaccel_select="mpeg2video_decoder"
1934 mpeg2_vaapi_hwaccel_deps="vaapi"
1935 mpeg2_vaapi_hwaccel_select="mpeg2video_decoder"
1936 mpeg2_vdpau_hwaccel_deps="vdpau"
1937 mpeg2_vdpau_hwaccel_select="mpeg2video_decoder"
1938 mpeg4_crystalhd_decoder_select="crystalhd"
1939 mpeg4_vaapi_hwaccel_deps="vaapi"
1940 mpeg4_vaapi_hwaccel_select="mpeg4_decoder"
1941 mpeg4_vdpau_decoder_deps="vdpau"
1942 mpeg4_vdpau_decoder_select="mpeg4_decoder"
1943 mpeg4_vdpau_hwaccel_deps="vdpau"
1944 mpeg4_vdpau_hwaccel_select="mpeg4_decoder"
1945 msmpeg4_crystalhd_decoder_select="crystalhd"
1946 vc1_crystalhd_decoder_select="crystalhd"
1947 vc1_dxva2_hwaccel_deps="dxva2"
1948 vc1_dxva2_hwaccel_select="vc1_decoder"
1949 vc1_vaapi_hwaccel_deps="vaapi"
1950 vc1_vaapi_hwaccel_select="vc1_decoder"
1951 vc1_vdpau_decoder_deps="vdpau"
1952 vc1_vdpau_decoder_select="vc1_decoder"
1953 vc1_vdpau_hwaccel_deps="vdpau"
1954 vc1_vdpau_hwaccel_select="vc1_decoder"
1955 wmv3_crystalhd_decoder_select="crystalhd"
1956 wmv3_dxva2_hwaccel_select="vc1_dxva2_hwaccel"
1957 wmv3_vaapi_hwaccel_select="vc1_vaapi_hwaccel"
1958 wmv3_vdpau_decoder_select="vc1_vdpau_decoder"
1959 wmv3_vdpau_hwaccel_select="vc1_vdpau_hwaccel"
1960
1961 # parsers
1962 h264_parser_select="golomb h264chroma h264dsp h264pred h264qpel videodsp"
1963 mpeg4video_parser_select="error_resilience mpegvideo"
1964 mpegvideo_parser_select="error_resilience mpegvideo"
1965 vc1_parser_select="mpegvideo"
1966
1967 # external libraries
1968 libaacplus_encoder_deps="libaacplus"
1969 libcelt_decoder_deps="libcelt"
1970 libfaac_encoder_deps="libfaac"
1971 libfaac_encoder_select="audio_frame_queue"
1972 libfdk_aac_encoder_deps="libfdk_aac"
1973 libfdk_aac_encoder_select="audio_frame_queue"
1974 libgsm_decoder_deps="libgsm"
1975 libgsm_encoder_deps="libgsm"
1976 libgsm_ms_decoder_deps="libgsm"
1977 libgsm_ms_encoder_deps="libgsm"
1978 libilbc_decoder_deps="libilbc"
1979 libilbc_encoder_deps="libilbc"
1980 libmodplug_demuxer_deps="libmodplug"
1981 libmp3lame_encoder_deps="libmp3lame"
1982 libmp3lame_encoder_select="audio_frame_queue"
1983 libopencore_amrnb_decoder_deps="libopencore_amrnb"
1984 libopencore_amrnb_encoder_deps="libopencore_amrnb"
1985 libopencore_amrnb_encoder_select="audio_frame_queue"
1986 libopencore_amrwb_decoder_deps="libopencore_amrwb"
1987 libopenjpeg_decoder_deps="libopenjpeg"
1988 libopenjpeg_encoder_deps="libopenjpeg"
1989 libopus_decoder_deps="libopus"
1990 libopus_encoder_deps="libopus"
1991 libopus_encoder_select="audio_frame_queue"
1992 libquvi_demuxer_deps="libquvi"
1993 libschroedinger_decoder_deps="libschroedinger"
1994 libschroedinger_encoder_deps="libschroedinger"
1995 libshine_encoder_deps="libshine"
1996 libshine_encoder_select="audio_frame_queue"
1997 libspeex_decoder_deps="libspeex"
1998 libspeex_encoder_deps="libspeex"
1999 libspeex_encoder_select="audio_frame_queue"
2000 libstagefright_h264_decoder_deps="libstagefright_h264"
2001 libtheora_encoder_deps="libtheora"
2002 libtwolame_encoder_deps="libtwolame"
2003 libvo_aacenc_encoder_deps="libvo_aacenc"
2004 libvo_aacenc_encoder_select="audio_frame_queue"
2005 libvo_amrwbenc_encoder_deps="libvo_amrwbenc"
2006 libvorbis_decoder_deps="libvorbis"
2007 libvorbis_encoder_deps="libvorbis"
2008 libvorbis_encoder_select="audio_frame_queue"
2009 libvpx_vp8_decoder_deps="libvpx"
2010 libvpx_vp8_encoder_deps="libvpx"
2011 libvpx_vp9_decoder_deps="libvpx"
2012 libvpx_vp9_encoder_deps="libvpx"
2013 libx264_encoder_deps="libx264"
2014 libx264rgb_encoder_deps="libx264"
2015 libxavs_encoder_deps="libxavs"
2016 libxvid_encoder_deps="libxvid"
2017 libutvideo_decoder_deps="libutvideo"
2018 libutvideo_encoder_deps="libutvideo"
2019
2020 # demuxers / muxers
2021 ac3_demuxer_select="ac3_parser"
2022 asf_stream_muxer_select="asf_muxer"
2023 avisynth_demuxer_deps="avisynth"
2024 dirac_demuxer_select="dirac_parser"
2025 dts_demuxer_select="dca_parser"
2026 dtshd_demuxer_select="dca_parser"
2027 eac3_demuxer_select="ac3_parser"
2028 f4v_muxer_select="mov_muxer"
2029 flac_demuxer_select="flac_parser"
2030 ipod_muxer_select="mov_muxer"
2031 ismv_muxer_select="mov_muxer"
2032 libnut_demuxer_deps="libnut"
2033 libnut_muxer_deps="libnut"
2034 matroska_audio_muxer_select="matroska_muxer"
2035 matroska_demuxer_suggest="bzlib lzo zlib"
2036 mov_demuxer_suggest="zlib"
2037 mov_muxer_select="rtpenc_chain"
2038 mp3_demuxer_select="mpegaudio_parser"
2039 mp4_muxer_select="mov_muxer"
2040 mpegts_muxer_select="adts_muxer latm_muxer"
2041 mpegtsraw_demuxer_select="mpegts_demuxer"
2042 mxf_d10_muxer_select="mxf_muxer"
2043 ogg_demuxer_select="golomb"
2044 psp_muxer_select="mov_muxer"
2045 rtp_demuxer_select="sdp_demuxer"
2046 rtpdec_select="asf_demuxer rm_demuxer rtp_protocol mpegts_demuxer mov_demuxer"
2047 rtsp_demuxer_select="http_protocol rtpdec"
2048 rtsp_muxer_select="rtp_muxer http_protocol rtp_protocol rtpenc_chain"
2049 sap_demuxer_select="sdp_demuxer"
2050 sap_muxer_select="rtp_muxer rtp_protocol rtpenc_chain"
2051 sdp_demuxer_select="rtpdec"
2052 smoothstreaming_muxer_select="ismv_muxer"
2053 spdif_muxer_select="aac_parser"
2054 tak_demuxer_select="tak_parser"
2055 tg2_muxer_select="mov_muxer"
2056 tgp_muxer_select="mov_muxer"
2057 vobsub_demuxer_select="mpegps_demuxer"
2058 w64_demuxer_deps="wav_demuxer"
2059 w64_muxer_deps="wav_muxer"
2060
2061 # indevs / outdevs
2062 alsa_indev_deps="alsa_asoundlib_h snd_pcm_htimestamp"
2063 alsa_outdev_deps="alsa_asoundlib_h"
2064 bktr_indev_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
2065 caca_outdev_deps="libcaca"
2066 dshow_indev_deps="IBaseFilter"
2067 dshow_indev_extralibs="-lpsapi -lole32 -lstrmiids -luuid"
2068 dv1394_indev_deps="dv1394 dv_demuxer"
2069 fbdev_indev_deps="linux_fb_h"
2070 iec61883_indev_deps="libiec61883"
2071 jack_indev_deps="jack_jack_h sem_timedwait"
2072 lavfi_indev_deps="avfilter"
2073 libcdio_indev_deps="libcdio"
2074 libdc1394_indev_deps="libdc1394"
2075 libv4l2_indev_deps="libv4l2"
2076 openal_indev_deps="openal"
2077 oss_indev_deps_any="soundcard_h sys_soundcard_h"
2078 oss_outdev_deps_any="soundcard_h sys_soundcard_h"
2079 pulse_indev_deps="libpulse"
2080 sdl_outdev_deps="sdl"
2081 sndio_indev_deps="sndio_h"
2082 sndio_outdev_deps="sndio_h"
2083 v4l_indev_deps="linux_videodev_h"
2084 v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h"
2085 v4l2_outdev_deps_any="linux_videodev2_h sys_videoio_h"
2086 vfwcap_indev_deps="capCreateCaptureWindow vfwcap_defines"
2087 vfwcap_indev_extralibs="-lavicap32"
2088 xv_outdev_deps="X11_extensions_Xvlib_h XvGetPortAttribute"
2089 xv_outdev_extralibs="-lXv -lX11 -lXext"
2090 x11grab_indev_deps="x11grab"
2091
2092 # protocols
2093 bluray_protocol_deps="libbluray"
2094 ffrtmpcrypt_protocol_deps="!librtmp_protocol"
2095 ffrtmpcrypt_protocol_deps_any="gcrypt nettle openssl"
2096 ffrtmpcrypt_protocol_select="tcp_protocol"
2097 ffrtmphttp_protocol_deps="!librtmp_protocol"
2098 ffrtmphttp_protocol_select="http_protocol"
2099 ftp_protocol_select="tcp_protocol"
2100 gopher_protocol_select="network"
2101 httpproxy_protocol_select="tcp_protocol"
2102 http_protocol_select="tcp_protocol"
2103 https_protocol_select="tls_protocol"
2104 librtmp_protocol_deps="librtmp"
2105 librtmpe_protocol_deps="librtmp"
2106 librtmps_protocol_deps="librtmp"
2107 librtmpt_protocol_deps="librtmp"
2108 librtmpte_protocol_deps="librtmp"
2109 mmsh_protocol_select="http_protocol"
2110 mmst_protocol_select="network"
2111 rtmp_protocol_deps="!librtmp_protocol"
2112 rtmp_protocol_select="tcp_protocol"
2113 rtmpe_protocol_select="ffrtmpcrypt_protocol"
2114 rtmps_protocol_deps="!librtmp_protocol"
2115 rtmps_protocol_select="tls_protocol"
2116 rtmpt_protocol_select="ffrtmphttp_protocol"
2117 rtmpte_protocol_select="ffrtmpcrypt_protocol ffrtmphttp_protocol"
2118 rtmpts_protocol_select="ffrtmphttp_protocol https_protocol"
2119 rtp_protocol_select="udp_protocol"
2120 sctp_protocol_deps="struct_sctp_event_subscribe"
2121 sctp_protocol_select="network"
2122 srtp_protocol_select="rtp_protocol"
2123 tcp_protocol_select="network"
2124 tls_protocol_deps_any="openssl gnutls"
2125 tls_protocol_select="tcp_protocol"
2126 udp_protocol_select="network"
2127
2128 # filters
2129 aconvert_filter_deps="swresample"
2130 amovie_filter_deps="avcodec avformat"
2131 aresample_filter_deps="swresample"
2132 ass_filter_deps="libass"
2133 asyncts_filter_deps="avresample"
2134 atempo_filter_deps="avcodec rdft"
2135 azmq_filter_deps="libzmq"
2136 blackframe_filter_deps="gpl"
2137 boxblur_filter_deps="gpl"
2138 colormatrix_filter_deps="gpl"
2139 cropdetect_filter_deps="gpl"
2140 dctdnoiz_filter_deps="avcodec fft"
2141 delogo_filter_deps="gpl"
2142 deshake_filter_deps="avcodec"
2143 deshake_filter_select="dsputil"
2144 drawtext_filter_deps="libfreetype"
2145 ebur128_filter_deps="gpl"
2146 flite_filter_deps="libflite"
2147 frei0r_filter_deps="frei0r dlopen"
2148 frei0r_filter_extralibs='$ldl'
2149 frei0r_src_filter_deps="frei0r dlopen"
2150 frei0r_src_filter_extralibs='$ldl'
2151 geq_filter_deps="gpl"
2152 histeq_filter_deps="gpl"
2153 hqdn3d_filter_deps="gpl"
2154 hue_filter_deps="gpl"
2155 interlace_filter_deps="gpl"
2156 kerndeint_filter_deps="gpl"
2157 mcdeint_filter_deps="avcodec gpl"
2158 movie_filter_deps="avcodec avformat"
2159 mp_filter_deps="gpl avcodec swscale inline_asm"
2160 mpdecimate_filter_deps="gpl avcodec"
2161 mptestsrc_filter_deps="gpl"
2162 negate_filter_deps="lut_filter"
2163 noise_filter_deps="gpl"
2164 resample_filter_deps="avresample"
2165 ocv_filter_deps="libopencv"
2166 owdenoise_filter_deps="gpl"
2167 pan_filter_deps="swresample"
2168 pp_filter_deps="gpl postproc"
2169 removelogo_filter_deps="avcodec avformat swscale"
2170 scale_filter_deps="swscale"
2171 smartblur_filter_deps="gpl swscale"
2172 showspectrum_filter_deps="avcodec rdft"
2173 stereo3d_filter_deps="gpl"
2174 subtitles_filter_deps="avformat avcodec libass"
2175 super2xsai_filter_deps="gpl"
2176 tinterlace_filter_deps="gpl"
2177 vidstabdetect_filter_deps="libvidstab"
2178 vidstabtransform_filter_deps="libvidstab"
2179 yadif_filter_deps="gpl"
2180 pixfmts_super2xsai_test_deps="super2xsai_filter"
2181 tinterlace_merge_test_deps="tinterlace_filter"
2182 tinterlace_pad_test_deps="tinterlace_filter"
2183 zmq_filter_deps="libzmq"
2184
2185 # libraries
2186 avcodec_deps="avutil"
2187 avdevice_deps="avutil avcodec avformat"
2188 avfilter_deps="avutil"
2189 avformat_deps="avutil avcodec"
2190 avresample_deps="avutil"
2191 postproc_deps="avutil gpl"
2192 swscale_deps="avutil"
2193
2194 # programs
2195 ffmpeg_deps="avcodec avfilter avformat swscale swresample"
2196 ffmpeg_select="aformat_filter anull_filter atrim_filter format_filter
2197                null_filter
2198                setpts_filter trim_filter"
2199 ffplay_deps="avcodec avformat swscale swresample sdl"
2200 ffplay_select="rdft crop_filter"
2201 ffprobe_deps="avcodec avformat"
2202 ffserver_deps="avformat ffm_muxer fork rtp_protocol rtsp_demuxer"
2203 ffserver_extralibs='$ldl'
2204
2205 # documentation
2206 podpages_deps="perl"
2207 manpages_deps="perl pod2man"
2208 htmlpages_deps="texi2html"
2209 txtpages_deps="makeinfo"
2210 doc_deps_any="manpages htmlpages podpages txtpages"
2211
2212 # default parameters
2213
2214 logfile="config.log"
2215
2216 # installation paths
2217 prefix_default="/usr/local"
2218 bindir_default='${prefix}/bin'
2219 datadir_default='${prefix}/share/ffmpeg'
2220 incdir_default='${prefix}/include'
2221 libdir_default='${prefix}/lib'
2222 mandir_default='${prefix}/share/man'
2223 shlibdir_default="$libdir_default"
2224
2225 # toolchain
2226 ar_default="ar"
2227 cc_default="gcc"
2228 cxx_default="g++"
2229 host_cc_default="gcc"
2230 cp_f="cp -f"
2231 install="install"
2232 ln_s="ln -s -f"
2233 nm_default="nm -g"
2234 objformat="elf"
2235 pkg_config_default=pkg-config
2236 ranlib="ranlib"
2237 strip_default="strip"
2238 yasmexe_default="yasm"
2239
2240 nogas=":"
2241
2242 # machine
2243 arch_default=$(uname -m)
2244 cpu="generic"
2245
2246 # OS
2247 target_os_default=$(tolower $(uname -s))
2248 host_os=$target_os_default
2249
2250 # configurable options
2251 enable $PROGRAM_LIST
2252 enable $DOCUMENT_LIST
2253 enable $(filter_out avresample $LIBRARY_LIST)
2254 enable stripping
2255
2256 enable asm
2257 enable debug
2258 enable doc
2259 enable optimizations
2260 enable runtime_cpudetect
2261 enable safe_bitstream_reader
2262 enable static
2263 enable swscale_alpha
2264
2265 # Enable hwaccels by default.
2266 enable dxva2 vaapi vdpau
2267
2268 # build settings
2269 SHFLAGS='-shared -Wl,-soname,$$(@F)'
2270 FFSERVERLDFLAGS=-Wl,-E
2271 LIBPREF="lib"
2272 LIBSUF=".a"
2273 FULLNAME='$(NAME)$(BUILDSUF)'
2274 LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
2275 SLIBPREF="lib"
2276 SLIBSUF=".so"
2277 SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
2278 SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
2279 SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
2280 LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
2281 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'
2282 SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR) $(SLIBNAME)'
2283
2284 asflags_filter=echo
2285 cflags_filter=echo
2286 ldflags_filter=echo
2287
2288 AS_C='-c'
2289 AS_O='-o $@'
2290 CC_C='-c'
2291 CC_E='-E -o $@'
2292 CC_O='-o $@'
2293 CXX_C='-c'
2294 CXX_O='-o $@'
2295 LD_O='-o $@'
2296 LD_LIB='-l%'
2297 LD_PATH='-L'
2298 HOSTCC_C='-c'
2299 HOSTCC_O='-o $@'
2300 HOSTLD_O='-o $@'
2301
2302 host_cflags='-O3 -g'
2303 host_cppflags='-D_ISOC99_SOURCE -D_XOPEN_SOURCE=600'
2304 host_libs='-lm'
2305 host_cflags_filter=echo
2306 host_ldflags_filter=echo
2307
2308 target_path='$(CURDIR)'
2309
2310 # since the object filename is not given with the -MM flag, the compiler
2311 # is only able to print the basename, and we must add the path ourselves
2312 DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o," > $(@:.o=.d)'
2313 DEPFLAGS='-MM'
2314
2315 # find source path
2316 if test -f configure; then
2317     source_path=.
2318 else
2319     source_path=$(cd $(dirname "$0"); pwd)
2320     echo "$source_path" | grep -q '[[:blank:]]' &&
2321         die "Out of tree builds are impossible with whitespace in source path."
2322     test -e "$source_path/config.h" &&
2323         die "Out of tree builds are impossible with config.h in source dir."
2324 fi
2325
2326 for v in "$@"; do
2327     r=${v#*=}
2328     l=${v%"$r"}
2329     r=$(sh_quote "$r")
2330     FFMPEG_CONFIGURATION="${FFMPEG_CONFIGURATION# } ${l}${r}"
2331 done
2332
2333 find_things(){
2334     thing=$1
2335     pattern=$2
2336     file=$source_path/$3
2337     sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
2338 }
2339
2340 ENCODER_LIST=$(find_things  encoder  ENC      libavcodec/allcodecs.c)
2341 DECODER_LIST=$(find_things  decoder  DEC      libavcodec/allcodecs.c)
2342 HWACCEL_LIST=$(find_things  hwaccel  HWACCEL  libavcodec/allcodecs.c)
2343 PARSER_LIST=$(find_things   parser   PARSER   libavcodec/allcodecs.c)
2344 BSF_LIST=$(find_things      bsf      BSF      libavcodec/allcodecs.c)
2345 MUXER_LIST=$(find_things    muxer    _MUX     libavformat/allformats.c)
2346 DEMUXER_LIST=$(find_things  demuxer  DEMUX    libavformat/allformats.c)
2347 OUTDEV_LIST=$(find_things   outdev   OUTDEV   libavdevice/alldevices.c)
2348 INDEV_LIST=$(find_things    indev    _IN      libavdevice/alldevices.c)
2349 PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
2350 FILTER_LIST=$(find_things   filter   FILTER   libavfilter/allfilters.c)
2351
2352 ALL_COMPONENTS="
2353     $BSF_LIST
2354     $DECODER_LIST
2355     $DEMUXER_LIST
2356     $ENCODER_LIST
2357     $FILTER_LIST
2358     $HWACCEL_LIST
2359     $INDEV_LIST
2360     $MUXER_LIST
2361     $OUTDEV_LIST
2362     $PARSER_LIST
2363     $PROTOCOL_LIST
2364 "
2365
2366 for n in $COMPONENT_LIST; do
2367     v=$(toupper ${n%s})_LIST
2368     eval enable \$$v
2369     eval ${n}_if_any="\$$v"
2370 done
2371
2372 enable $ARCH_EXT_LIST
2373
2374 die_unknown(){
2375     echo "Unknown option \"$1\"."
2376     echo "See $0 --help for available options."
2377     exit 1
2378 }
2379
2380 print_3_columns() {
2381     cat | tr ' ' '\n' | sort | pr -r -3 -t
2382 }
2383
2384 show_list() {
2385     suffix=_$1
2386     shift
2387     echo $* | sed s/$suffix//g | print_3_columns
2388     exit 0
2389 }
2390
2391 rand_list(){
2392     IFS=', '
2393     set -- $*
2394     unset IFS
2395     for thing; do
2396         comp=${thing%:*}
2397         prob=${thing#$comp}
2398         prob=${prob#:}
2399         is_in ${comp} $COMPONENT_LIST && eval comp=\$$(toupper ${comp%s})_LIST
2400         echo "prob ${prob:-0.5}"
2401         printf '%s\n' $comp
2402     done
2403 }
2404
2405 do_random(){
2406     action=$1
2407     shift
2408     random_seed=$(awk "BEGIN { srand($random_seed); print srand() }")
2409     $action $(rand_list "$@" | awk "BEGIN { srand($random_seed) } \$1 == \"prob\" { prob = \$2; next } rand() < prob { print }")
2410 }
2411
2412 for opt do
2413     optval="${opt#*=}"
2414     case "$opt" in
2415         --extra-ldflags=*)
2416             add_ldflags $optval
2417         ;;
2418         --extra-libs=*)
2419             add_extralibs $optval
2420         ;;
2421         --disable-devices)
2422             disable $INDEV_LIST $OUTDEV_LIST
2423         ;;
2424         --enable-debug=*)
2425             debuglevel="$optval"
2426         ;;
2427         --disable-programs)
2428             disable $PROGRAM_LIST
2429         ;;
2430         --disable-everything)
2431             map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
2432         ;;
2433         --disable-all)
2434             map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
2435             disable $LIBRARY_LIST $PROGRAM_LIST doc
2436         ;;
2437         --enable-random|--disable-random)
2438             action=${opt%%-random}
2439             do_random ${action#--} $COMPONENT_LIST
2440         ;;
2441         --enable-random=*|--disable-random=*)
2442             action=${opt%%-random=*}
2443             do_random ${action#--} $optval
2444         ;;
2445         --enable-*=*|--disable-*=*)
2446             eval $(echo "${opt%%=*}" | sed 's/--/action=/;s/-/ thing=/')
2447             is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt"
2448             eval list=\$$(toupper $thing)_LIST
2449             name=$(echo "${optval}" | sed "s/,/_${thing}|/g")_${thing}
2450             list=$(filter "$name" $list)
2451             [ "$list" = "" ] && warn "Option $opt did not match anything"
2452             $action $list
2453         ;;
2454         --enable-?*|--disable-?*)
2455             eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
2456             if is_in $option $COMPONENT_LIST; then
2457                 test $action = disable && action=unset
2458                 eval $action \$$(toupper ${option%s})_LIST
2459             elif is_in $option $CMDLINE_SELECT; then
2460                 $action $option
2461             else
2462                 die_unknown $opt
2463             fi
2464         ;;
2465         --list-*)
2466             NAME="${opt#--list-}"
2467             is_in $NAME $COMPONENT_LIST || die_unknown $opt
2468             NAME=${NAME%s}
2469             eval show_list $NAME \$$(toupper $NAME)_LIST
2470         ;;
2471         --help|-h) show_help
2472         ;;
2473         --fatal-warnings) enable fatal_warnings
2474         ;;
2475         *)
2476             optname="${opt%%=*}"
2477             optname="${optname#--}"
2478             optname=$(echo "$optname" | sed 's/-/_/g')
2479             if is_in $optname $CMDLINE_SET; then
2480                 eval $optname='$optval'
2481             elif is_in $optname $CMDLINE_APPEND; then
2482                 append $optname "$optval"
2483             else
2484                 die_unknown $opt
2485             fi
2486         ;;
2487     esac
2488 done
2489
2490 disabled logging && logfile=/dev/null
2491
2492 echo "# $0 $FFMPEG_CONFIGURATION" > $logfile
2493 set >> $logfile
2494
2495 test -n "$cross_prefix" && enable cross_compile
2496
2497 if enabled cross_compile; then
2498     test -n "$arch" && test -n "$target_os" ||
2499         die "Must specify target arch and OS when cross-compiling"
2500 fi
2501
2502 ar_default="${cross_prefix}${ar_default}"
2503 cc_default="${cross_prefix}${cc_default}"
2504 cxx_default="${cross_prefix}${cxx_default}"
2505 nm_default="${cross_prefix}${nm_default}"
2506 pkg_config_default="${cross_prefix}${pkg_config_default}"
2507 ranlib="${cross_prefix}${ranlib}"
2508 strip_default="${cross_prefix}${strip_default}"
2509
2510 sysinclude_default="${sysroot}/usr/include"
2511
2512 test -n "$valgrind" && toolchain="valgrind-memcheck"
2513
2514 case "$toolchain" in
2515     clang-asan)
2516         cc_default="clang"
2517         add_cflags  -fsanitize=address
2518         add_ldflags -fsanitize=address
2519     ;;
2520     clang-tsan)
2521         cc_default="clang"
2522         add_cflags  -fsanitize=thread -pie
2523         add_ldflags -fsanitize=thread -pie
2524     ;;
2525     gcc-asan)
2526         cc_default="gcc"
2527         add_cflags  -fsanitize=address
2528         add_ldflags -fsanitize=address
2529     ;;
2530     gcc-tsan)
2531         cc_default="gcc"
2532         add_cflags  -fsanitize=thread -pie -fPIC
2533         add_ldflags -fsanitize=thread -pie -fPIC
2534     ;;
2535     valgrind-massif)
2536         target_exec_default=${valgrind:-"valgrind"}
2537         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"
2538     ;;
2539     valgrind-memcheck)
2540         target_exec_default=${valgrind:-"valgrind"}
2541         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"
2542     ;;
2543     msvc)
2544         cc_default="c99wrap cl"
2545         ld_default="c99wrap link"
2546         nm_default="dumpbin -symbols"
2547         ar_default="lib"
2548         target_os_default="win32"
2549     ;;
2550     icl)
2551         cc_default="c99wrap -noconv icl"
2552         ld_default="c99wrap xilink"
2553         nm_default="dumpbin -symbols"
2554         ar_default="xilib"
2555         target_os_default="win32"
2556     ;;
2557     gcov)
2558         add_cflags  -fprofile-arcs -ftest-coverage
2559         add_ldflags -fprofile-arcs -ftest-coverage
2560     ;;
2561     ?*)
2562         die "Unknown toolchain $toolchain"
2563     ;;
2564 esac
2565
2566 set_default arch cc cxx pkg_config strip sysinclude target_exec target_os yasmexe
2567 enabled cross_compile || host_cc_default=$cc
2568 set_default host_cc
2569
2570 if ! $pkg_config --version >/dev/null 2>&1; then
2571     warn "$pkg_config not found, library detection may fail."
2572     pkg_config=false
2573 fi
2574
2575 exesuf() {
2576     case $1 in
2577         mingw32*|win32|win64|cygwin*|*-dos|freedos|opendos|os/2*|symbian) echo .exe ;;
2578     esac
2579 }
2580
2581 EXESUF=$(exesuf $target_os)
2582 HOSTEXESUF=$(exesuf $host_os)
2583
2584 # set temporary file name
2585 : ${TMPDIR:=$TEMPDIR}
2586 : ${TMPDIR:=$TMP}
2587 : ${TMPDIR:=/tmp}
2588
2589 if ! check_cmd mktemp -u XXXXXX; then
2590     # simple replacement for missing mktemp
2591     # NOT SAFE FOR GENERAL USE
2592     mktemp(){
2593         echo "${2%%XXX*}.${HOSTNAME}.${UID}.$$"
2594     }
2595 fi
2596
2597 tmpfile(){
2598     tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
2599         (set -C; exec > $tmp) 2>/dev/null ||
2600         die "Unable to create temporary file in $TMPDIR."
2601     append TMPFILES $tmp
2602     eval $1=$tmp
2603 }
2604
2605 trap 'rm -f -- $TMPFILES' EXIT
2606
2607 tmpfile TMPASM .asm
2608 tmpfile TMPC   .c
2609 tmpfile TMPCPP .cpp
2610 tmpfile TMPE   $EXESUF
2611 tmpfile TMPH   .h
2612 tmpfile TMPO   .o
2613 tmpfile TMPS   .S
2614 tmpfile TMPSH  .sh
2615 tmpfile TMPV   .ver
2616
2617 unset -f mktemp
2618
2619 chmod +x $TMPE
2620
2621 # make sure we can execute files in $TMPDIR
2622 cat > $TMPSH 2>> $logfile <<EOF
2623 #! /bin/sh
2624 EOF
2625 chmod +x $TMPSH >> $logfile 2>&1
2626 if ! $TMPSH >> $logfile 2>&1; then
2627     cat <<EOF
2628 Unable to create and execute files in $TMPDIR.  Set the TMPDIR environment
2629 variable to another directory and make sure that it is not mounted noexec.
2630 EOF
2631     die "Sanity test failed."
2632 fi
2633
2634 ccc_flags(){
2635     for flag; do
2636         case $flag in
2637             -std=c99)           echo -c99                       ;;
2638             -mcpu=*)            echo -arch ${flag#*=}           ;;
2639             -mieee)             echo -ieee                      ;;
2640             -O*|-fast)          echo $flag                      ;;
2641             -fno-math-errno)    echo -assume nomath_errno       ;;
2642             -g)                 echo -g3                        ;;
2643             -Wall)              echo -msg_enable level2         ;;
2644             -Wno-pointer-sign)  echo -msg_disable ptrmismatch1  ;;
2645             -Wl,*)              echo $flag                      ;;
2646             -f*|-W*)                                            ;;
2647             *)                  echo $flag                      ;;
2648         esac
2649    done
2650 }
2651
2652 msvc_common_flags(){
2653     for flag; do
2654         case $flag in
2655             # In addition to specifying certain flags under the compiler
2656             # specific filters, they must be specified here as well or else the
2657             # generic catch all at the bottom will print the original flag.
2658             -Wall)                ;;
2659             -std=c99)             ;;
2660             # Common flags
2661             -fomit-frame-pointer) echo -Oy ;;
2662             -g)                   echo -Z7 ;;
2663             -fno-math-errno)      ;;
2664             -fno-common)          ;;
2665             -fno-signed-zeros)    ;;
2666             -fPIC)                ;;
2667             -mthumb)              ;;
2668             -march=*)             ;;
2669             -lz)                  echo zlib.lib ;;
2670             -lavifil32)           echo vfw32.lib ;;
2671             -lavicap32)           echo vfw32.lib user32.lib ;;
2672             -l*)                  echo ${flag#-l}.lib ;;
2673             *)                    echo $flag ;;
2674         esac
2675     done
2676 }
2677
2678 msvc_flags(){
2679     msvc_common_flags "$@"
2680     for flag; do
2681         case $flag in
2682             -Wall)                echo -W4 -wd4244 -wd4127 -wd4018 -wd4389 \
2683                                        -wd4146 -wd4057 -wd4204 -wd4706 -wd4305 \
2684                                        -wd4152 -wd4324 -we4013 -wd4100 -wd4214 \
2685                                        -wd4554 \
2686                                        -wd4996 -wd4273 ;;
2687         esac
2688     done
2689 }
2690
2691 icl_flags(){
2692     msvc_common_flags "$@"
2693     for flag; do
2694         case $flag in
2695             # Despite what Intel's documentation says -Wall, which is supported
2696             # on Windows, does enable remarks so disable them here.
2697             -Wall)                echo $flag -Qdiag-disable:remark ;;
2698             -std=c99)             echo -Qstd=c99 ;;
2699         esac
2700     done
2701 }
2702
2703 pgi_flags(){
2704     for flag; do
2705         case $flag in
2706             -flto)                echo -Mipa=fast,libopt,libinline,vestigial ;;
2707             -fomit-frame-pointer) echo -Mnoframe ;;
2708             -g)                   echo -gopt ;;
2709             *)                    echo $flag ;;
2710         esac
2711     done
2712 }
2713
2714 suncc_flags(){
2715     for flag; do
2716         case $flag in
2717             -march=*|-mcpu=*)
2718                 case "${flag#*=}" in
2719                     native)                   echo -xtarget=native       ;;
2720                     v9|niagara)               echo -xarch=sparc          ;;
2721                     ultrasparc)               echo -xarch=sparcvis       ;;
2722                     ultrasparc3|niagara2)     echo -xarch=sparcvis2      ;;
2723                     i586|pentium)             echo -xchip=pentium        ;;
2724                     i686|pentiumpro|pentium2) echo -xtarget=pentium_pro  ;;
2725                     pentium3*|c3-2)           echo -xtarget=pentium3     ;;
2726                     pentium-m)          echo -xarch=sse2 -xchip=pentium3 ;;
2727                     pentium4*)          echo -xtarget=pentium4           ;;
2728                     prescott|nocona)    echo -xarch=sse3 -xchip=pentium4 ;;
2729                     *-sse3)             echo -xarch=sse3                 ;;
2730                     core2)              echo -xarch=ssse3 -xchip=core2   ;;
2731                     corei7)           echo -xarch=sse4_2 -xchip=nehalem  ;;
2732                     corei7-avx)       echo -xarch=avx -xchip=sandybridge ;;
2733                     amdfam10|barcelona)       echo -xtarget=barcelona    ;;
2734                     bdver*)                   echo -xarch=avx            ;;
2735                     athlon-4|athlon-[mx]p)    echo -xarch=ssea           ;;
2736                     k8|opteron|athlon64|athlon-fx)
2737                                               echo -xarch=sse2a          ;;
2738                     athlon*)                  echo -xarch=pentium_proa   ;;
2739                 esac
2740                 ;;
2741             -std=c99)             echo -xc99              ;;
2742             -fomit-frame-pointer) echo -xregs=frameptr    ;;
2743             -fPIC)                echo -KPIC -xcode=pic32 ;;
2744             -W*,*)                echo $flag              ;;
2745             -f*-*|-W*|-mimpure-text)                      ;;
2746             -shared)              echo -G                 ;;
2747             *)                    echo $flag              ;;
2748         esac
2749     done
2750 }
2751
2752 tms470_flags(){
2753     for flag; do
2754         case $flag in
2755             -march=*|-mcpu=*)
2756                 case "${flag#*=}" in
2757                     armv7-a|cortex-a*)      echo -mv=7a8 ;;
2758                     armv7-r|cortex-r*)      echo -mv=7r4 ;;
2759                     armv7-m|cortex-m*)      echo -mv=7m3 ;;
2760                     armv6*|arm11*)          echo -mv=6   ;;
2761                     armv5*e|arm[79]*e*|arm9[24]6*|arm96*|arm102[26])
2762                                             echo -mv=5e  ;;
2763                     armv4*|arm7*|arm9[24]*) echo -mv=4   ;;
2764                 esac
2765                 ;;
2766             -mfpu=neon)     echo --float_support=vfpv3 --neon ;;
2767             -mfpu=vfp)      echo --float_support=vfpv2        ;;
2768             -mfpu=vfpv3)    echo --float_support=vfpv3        ;;
2769             -mfpu=vfpv3-d16) echo --float_support=vfpv3d16    ;;
2770             -msoft-float)   echo --float_support=vfplib       ;;
2771             -O[0-3]|-mf=*)  echo $flag                        ;;
2772             -g)             echo -g -mn                       ;;
2773             -pds=*)         echo $flag                        ;;
2774             -D*|-I*)        echo $flag                        ;;
2775             --gcc|--abi=*)  echo $flag                        ;;
2776             -me)            echo $flag                        ;;
2777         esac
2778     done
2779 }
2780
2781 probe_cc(){
2782     pfx=$1
2783     _cc=$2
2784
2785     unset _type _ident _cc_c _cc_e _cc_o _flags _cflags
2786     unset _ld_o _ldflags _ld_lib _ld_path
2787     unset _depflags _DEPCMD _DEPFLAGS
2788     _flags_filter=echo
2789
2790     if $_cc -v 2>&1 | grep -q '^gcc.*LLVM'; then
2791         _type=llvm_gcc
2792         gcc_extra_ver=$(expr "$($_cc --version | head -n1)" : '.*\((.*)\)')
2793         _ident="llvm-gcc $($_cc -dumpversion) $gcc_extra_ver"
2794         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2795         _cflags_speed='-O3'
2796         _cflags_size='-Os'
2797     elif $_cc -v 2>&1 | grep -qi ^gcc; then
2798         _type=gcc
2799         gcc_version=$($_cc --version | head -n1)
2800         gcc_basever=$($_cc -dumpversion)
2801         gcc_pkg_ver=$(expr "$gcc_version" : '[^ ]* \(([^)]*)\)')
2802         gcc_ext_ver=$(expr "$gcc_version" : ".*$gcc_pkg_ver $gcc_basever \\(.*\\)")
2803         _ident=$(cleanws "gcc $gcc_basever $gcc_pkg_ver $gcc_ext_ver")
2804         if ! $_cc -dumpversion | grep -q '^2\.'; then
2805             _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2806         fi
2807         _cflags_speed='-O3'
2808         _cflags_size='-Os'
2809     elif $_cc --version 2>/dev/null | grep -q ^icc; then
2810         _type=icc
2811         _ident=$($_cc --version | head -n1)
2812         _depflags='-MMD'
2813         _cflags_speed='-O3'
2814         _cflags_size='-Os'
2815         _cflags_noopt='-O1'
2816     elif $_cc -v 2>&1 | grep -q xlc; then
2817         _type=xlc
2818         _ident=$($_cc -qversion 2>/dev/null | head -n1)
2819         _cflags_speed='-O5'
2820         _cflags_size='-O5 -qcompact'
2821     elif $_cc -V 2>/dev/null | grep -q Compaq; then
2822         _type=ccc
2823         _ident=$($_cc -V | head -n1 | cut -d' ' -f1-3)
2824         _DEPFLAGS='-M'
2825         _cflags_speed='-fast'
2826         _cflags_size='-O1'
2827         _flags_filter=ccc_flags
2828     elif $_cc --vsn 2>/dev/null | grep -q "ARM C/C++ Compiler"; then
2829         test -d "$sysroot" || die "No valid sysroot specified."
2830         _type=armcc
2831         _ident=$($_cc --vsn | head -n1)
2832         armcc_conf="$PWD/armcc.conf"
2833         $_cc --arm_linux_configure                 \
2834              --arm_linux_config_file="$armcc_conf" \
2835              --configure_sysroot="$sysroot"        \
2836              --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
2837              die "Error creating armcc configuration file."
2838         $_cc --vsn | grep -q RVCT && armcc_opt=rvct || armcc_opt=armcc
2839         _flags="--arm_linux_config_file=$armcc_conf --translate_gcc"
2840         as_default="${cross_prefix}gcc"
2841         _depflags='-MMD'
2842         _cflags_speed='-O3'
2843         _cflags_size='-Os'
2844     elif $_cc -version 2>/dev/null | grep -Eq 'TMS470|TI ARM'; then
2845         _type=tms470
2846         _ident=$($_cc -version | head -n1 | tr -s ' ')
2847         _flags='--gcc --abi=eabi -me'
2848         _cc_e='-ppl -fe=$@'
2849         _cc_o='-fe=$@'
2850         _depflags='-ppa -ppd=$(@:.o=.d)'
2851         _cflags_speed='-O3 -mf=5'
2852         _cflags_size='-O3 -mf=2'
2853         _flags_filter=tms470_flags
2854     elif $_cc -v 2>&1 | grep -q clang; then
2855         _type=clang
2856         _ident=$($_cc --version | head -n1)
2857         _depflags='-MMD'
2858         _cflags_speed='-O3'
2859         _cflags_size='-Os'
2860     elif $_cc -V 2>&1 | grep -q Sun; then
2861         _type=suncc
2862         _ident=$($_cc -V 2>&1 | head -n1 | cut -d' ' -f 2-)
2863         _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "1s,^.*: ,$@: ," -e "\$$!s,\$$, \\\," -e "1!s,^.*: , ," > $(@:.o=.d)'
2864         _DEPFLAGS='-xM1 -xc99'
2865         _ldflags='-std=c99'
2866         _cflags_speed='-O5'
2867         _cflags_size='-O5 -xspace'
2868         _flags_filter=suncc_flags
2869     elif $_cc -v 2>&1 | grep -q 'PathScale\|Path64'; then
2870         _type=pathscale
2871         _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
2872         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2873         _cflags_speed='-O2'
2874         _cflags_size='-Os'
2875         _flags_filter='filter_out -Wdisabled-optimization'
2876     elif $_cc -v 2>&1 | grep -q Open64; then
2877         _type=open64
2878         _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
2879         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2880         _cflags_speed='-O2'
2881         _cflags_size='-Os'
2882         _flags_filter='filter_out -Wdisabled-optimization|-Wtype-limits|-fno-signed-zeros'
2883     elif $_cc -V 2>&1 | grep -q Portland; then
2884         _type=pgi
2885         _ident="PGI $($_cc -V 2>&1 | awk '/^pgcc/ { print $2; exit }')"
2886         opt_common='-alias=ansi -Mdse -Mlre -Mpre'
2887         _cflags_speed="-O3 -Mautoinline -Munroll=c:4 $opt_common"
2888         _cflags_size="-O2 -Munroll=c:1 $opt_common"
2889         _cflags_noopt="-O"
2890         _flags_filter=pgi_flags
2891     elif $_cc 2>&1 | grep -q Microsoft; then
2892         _type=msvc
2893         _ident=$($cc 2>&1 | head -n1)
2894         _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< 2>&1 | awk '\''/including/ { sub(/^.*file: */, ""); gsub(/\\/, "/"); if (!match($$0, / /)) print "$@:", $$0 }'\'' > $(@:.o=.d)'
2895         _DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -showIncludes -Zs'
2896         _cflags_speed="-O2"
2897         _cflags_size="-O1"
2898         # Nonstandard output options, to avoid msys path conversion issues, relies on wrapper to remap it
2899         if $_cc 2>&1 | grep -q Linker; then
2900             _ld_o='-out $@'
2901         else
2902             _ld_o='-Fe$@'
2903         fi
2904         _cc_o='-Fo $@'
2905         _cc_e='-P -Fi $@'
2906         _flags_filter=msvc_flags
2907         _ld_lib='lib%.a'
2908         _ld_path='-libpath:'
2909         _flags='-nologo'
2910         _cflags='-D_USE_MATH_DEFINES -Dinline=__inline -FIstdlib.h -Dstrtoll=_strtoi64'
2911         if [ $pfx = hostcc ]; then
2912             append _cflags -Dsnprintf=_snprintf
2913         fi
2914         disable stripping
2915     elif $_cc 2>&1 | grep -q Intel; then
2916         _type=icl
2917         _ident=$($cc 2>&1 | head -n1)
2918         _depflags='-QMMD -QMF$(@:.o=.d) -QMT$@'
2919         # Not only is O3 broken on 13.x+ but it's slower on all previous versions (tested) as well
2920         _cflags_speed="-O2"
2921         _cflags_size="-O1 -Oi" # -O1 without -Oi miscompiles stuff
2922         # Nonstandard output options, to avoid msys path conversion issues, relies on wrapper to remap it
2923         if $_cc 2>&1 | grep -q Linker; then
2924             _ld_o='-out $@'
2925         else
2926             _ld_o='-Fe$@'
2927         fi
2928         _cc_o='-Fo $@'
2929         _cc_e='-P'
2930         _flags_filter=icl_flags
2931         _ld_lib='lib%.a'
2932         _ld_path='-libpath:'
2933         # -Qdiag-error to make icl error when presented with certain unknown arguments
2934         _flags='-nologo -Qdiag-error:4044,10157'
2935         # -Qvec- -Qsimd- to prevent miscompilation, -GS for consistency with msvc which enables it by default
2936         _cflags='-D_USE_MATH_DEFINES -Dinline=__inline -FIstdlib.h -Dstrtoll=_strtoi64 -Qms0 -Qvec- -Qsimd- -GS'
2937         if [ $pfx = hostcc ]; then
2938             append _cflags -Dsnprintf=_snprintf
2939         fi
2940     fi
2941
2942     eval ${pfx}_type=\$_type
2943     eval ${pfx}_ident=\$_ident
2944 }
2945
2946 set_ccvars(){
2947     eval ${1}_C=\${_cc_c-\${${1}_C}}
2948     eval ${1}_E=\${_cc_e-\${${1}_E}}
2949     eval ${1}_O=\${_cc_o-\${${1}_O}}
2950
2951     if [ -n "$_depflags" ]; then
2952         eval ${1}_DEPFLAGS=\$_depflags
2953     else
2954         eval ${1}DEP=\${_DEPCMD:-\$DEPCMD}
2955         eval ${1}DEP_FLAGS=\${_DEPFLAGS:-\$DEPFLAGS}
2956         eval DEP${1}FLAGS=\$_flags
2957     fi
2958 }
2959
2960 probe_cc cc "$cc"
2961 cflags_filter=$_flags_filter
2962 cflags_speed=$_cflags_speed
2963 cflags_size=$_cflags_size
2964 cflags_noopt=$_cflags_noopt
2965 add_cflags $_flags $_cflags
2966 cc_ldflags=$_ldflags
2967 set_ccvars CC
2968
2969 probe_cc hostcc "$host_cc"
2970 host_cflags_filter=$_flags_filter
2971 add_host_cflags  $_flags $_cflags
2972 set_ccvars HOSTCC
2973
2974 test -n "$cc_type" && enable $cc_type ||
2975     warn "Unknown C compiler $cc, unable to select optimal CFLAGS"
2976
2977 : ${as_default:=$cc}
2978 : ${dep_cc_default:=$cc}
2979 : ${ld_default:=$cc}
2980 : ${host_ld_default:=$host_cc}
2981 set_default ar as dep_cc ld host_ld
2982
2983 probe_cc as "$as"
2984 asflags_filter=$_flags_filter
2985 add_asflags $_flags $_cflags
2986 set_ccvars AS
2987
2988 probe_cc ld "$ld"
2989 ldflags_filter=$_flags_filter
2990 add_ldflags $_flags $_ldflags
2991 test "$cc_type" != "$ld_type" && add_ldflags $cc_ldflags
2992 LD_O=${_ld_o-$LD_O}
2993 LD_LIB=${_ld_lib-$LD_LIB}
2994 LD_PATH=${_ld_path-$LD_PATH}
2995
2996 probe_cc hostld "$host_ld"
2997 host_ldflags_filter=$_flags_filter
2998 add_host_ldflags $_flags $_ldflags
2999 HOSTLD_O=${_ld_o-$HOSTLD_O}
3000
3001 if [ -z "$CC_DEPFLAGS" ] && [ "$dep_cc" != "$cc" ]; then
3002     probe_cc depcc "$dep_cc"
3003     CCDEP=${_DEPCMD:-$DEPCMD}
3004     CCDEP_FLAGS=${_DEPFLAGS:=$DEPFLAGS}
3005     DEPCCFLAGS=$_flags
3006 fi
3007
3008 if $ar 2>&1 | grep -q Microsoft; then
3009     arflags="-nologo"
3010     ar_o='-out:$@'
3011 elif $ar 2>&1 | grep -q 'Texas Instruments'; then
3012     arflags="rq"
3013     ar_o='$@'
3014 else
3015     arflags="rc"
3016     ar_o='$@'
3017 fi
3018
3019 add_cflags $extra_cflags
3020 add_cxxflags $extra_cxxflags
3021 add_asflags $extra_cflags
3022
3023 if test -n "$sysroot"; then
3024     case "$cc_type" in
3025         gcc|llvm_gcc|clang)
3026             add_cppflags --sysroot="$sysroot"
3027             add_ldflags --sysroot="$sysroot"
3028         ;;
3029         tms470)
3030             add_cppflags -I"$sysinclude"
3031             add_ldflags  --sysroot="$sysroot"
3032         ;;
3033     esac
3034 fi
3035
3036 if test "$cpu" = host; then
3037     enabled cross_compile && die "--cpu=host makes no sense when cross-compiling."
3038
3039     case "$cc_type" in
3040         gcc|llvm_gcc)
3041             check_native(){
3042                 $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
3043                 sed -n "/cc1.*$1=/{
3044                             s/.*$1=\\([^ ]*\\).*/\\1/
3045                             p
3046                             q
3047                         }" $TMPE
3048             }
3049             cpu=$(check_native -march || check_native -mcpu)
3050         ;;
3051     esac
3052
3053     test "${cpu:-host}" = host && die "--cpu=host not supported with compiler $cc"
3054 fi
3055
3056 # Deal with common $arch aliases
3057 case "$arch" in
3058     aarch64|arm64)
3059         arch="aarch64"
3060     ;;
3061     arm*|iPad*)
3062         arch="arm"
3063     ;;
3064     mips*|IP*)
3065         arch="mips"
3066     ;;
3067     parisc*|hppa*)
3068         arch="parisc"
3069     ;;
3070     "Power Macintosh"|ppc*|powerpc*)
3071         arch="ppc"
3072     ;;
3073     s390|s390x)
3074         arch="s390"
3075     ;;
3076     sh4|sh)
3077         arch="sh4"
3078     ;;
3079     sun4u|sparc*)
3080         arch="sparc"
3081     ;;
3082     tilegx|tile-gx)
3083         arch="tilegx"
3084     ;;
3085     i[3-6]86|i86pc|BePC|x86pc|x86_64|x86_32|amd64)
3086         arch="x86"
3087     ;;
3088 esac
3089
3090 is_in $arch $ARCH_LIST || warn "unknown architecture $arch"
3091 enable $arch
3092
3093 # Add processor-specific flags
3094 if enabled aarch64; then
3095
3096     case $cpu in
3097         armv*)
3098             cpuflags="-march=$cpu"
3099         ;;
3100         *)
3101             cpuflags="-mcpu=$cpu"
3102         ;;
3103     esac
3104
3105 elif enabled alpha; then
3106
3107     cpuflags="-mcpu=$cpu"
3108
3109 elif enabled arm; then
3110
3111     check_arm_arch() {
3112         check_cpp_condition stddef.h \
3113             "defined __ARM_ARCH_${1}__ || defined __TARGET_ARCH_${2:-$1}" \
3114             $cpuflags
3115     }
3116
3117     probe_arm_arch() {
3118         if   check_arm_arch 4;        then echo armv4;
3119         elif check_arm_arch 4T;       then echo armv4t;
3120         elif check_arm_arch 5;        then echo armv5;
3121         elif check_arm_arch 5E;       then echo armv5e;
3122         elif check_arm_arch 5T;       then echo armv5t;
3123         elif check_arm_arch 5TE;      then echo armv5te;
3124         elif check_arm_arch 5TEJ;     then echo armv5te;
3125         elif check_arm_arch 6;        then echo armv6;
3126         elif check_arm_arch 6J;       then echo armv6j;
3127         elif check_arm_arch 6K;       then echo armv6k;
3128         elif check_arm_arch 6Z;       then echo armv6z;
3129         elif check_arm_arch 6ZK;      then echo armv6zk;
3130         elif check_arm_arch 6T2;      then echo armv6t2;
3131         elif check_arm_arch 7;        then echo armv7;
3132         elif check_arm_arch 7A  7_A;  then echo armv7-a;
3133         elif check_arm_arch 7R  7_R;  then echo armv7-r;
3134         elif check_arm_arch 7M  7_M;  then echo armv7-m;
3135         elif check_arm_arch 7EM 7E_M; then echo armv7-m;
3136         elif check_arm_arch 8A  8_A;  then echo armv8-a;
3137         fi
3138     }
3139
3140     [ "$cpu" = generic ] && cpu=$(probe_arm_arch)
3141
3142     case $cpu in
3143         armv*)
3144             cpuflags="-march=$cpu"
3145             subarch=$(echo $cpu | sed 's/[^a-z0-9]//g')
3146         ;;
3147         *)
3148             cpuflags="-mcpu=$cpu"
3149             case $cpu in
3150                 cortex-a*)                               subarch=armv7a  ;;
3151                 cortex-r*)                               subarch=armv7r  ;;
3152                 cortex-m*)                 enable thumb; subarch=armv7m  ;;
3153                 arm11*)                                  subarch=armv6   ;;
3154                 arm[79]*e*|arm9[24]6*|arm96*|arm102[26]) subarch=armv5te ;;
3155                 armv4*|arm7*|arm9[24]*)                  subarch=armv4   ;;
3156                 *)                             subarch=$(probe_arm_arch) ;;
3157             esac
3158         ;;
3159     esac
3160
3161     case "$subarch" in
3162         armv5t*)    enable fast_clz                ;;
3163         armv[6-8]*) enable fast_clz fast_unaligned ;;
3164     esac
3165
3166 elif enabled avr32; then
3167
3168     case $cpu in
3169         ap7[02]0[0-2])
3170             subarch="avr32_ap"
3171             cpuflags="-mpart=$cpu"
3172         ;;
3173         ap)
3174             subarch="avr32_ap"
3175             cpuflags="-march=$cpu"
3176         ;;
3177         uc3[ab]*)
3178             subarch="avr32_uc"
3179             cpuflags="-mcpu=$cpu"
3180         ;;
3181         uc)
3182             subarch="avr32_uc"
3183             cpuflags="-march=$cpu"
3184         ;;
3185     esac
3186
3187 elif enabled bfin; then
3188
3189     cpuflags="-mcpu=$cpu"
3190
3191 elif enabled mips; then
3192
3193     cpuflags="-march=$cpu"
3194
3195     case $cpu in
3196         24kc)
3197             disable mipsfpu
3198             disable mipsdspr1
3199             disable mipsdspr2
3200         ;;
3201         24kf*)
3202             disable mipsdspr1
3203             disable mipsdspr2
3204         ;;
3205         24kec|34kc|1004kc)
3206             disable mipsfpu
3207             disable mipsdspr2
3208         ;;
3209         24kef*|34kf*|1004kf*)
3210             disable mipsdspr2
3211         ;;
3212         74kc)
3213             disable mipsfpu
3214         ;;
3215     esac
3216
3217 elif enabled ppc; then
3218
3219     case $(tolower $cpu) in
3220         601|ppc601|powerpc601)
3221             cpuflags="-mcpu=601"
3222             disable altivec
3223         ;;
3224         603*|ppc603*|powerpc603*)
3225             cpuflags="-mcpu=603"
3226             disable altivec
3227         ;;
3228         604*|ppc604*|powerpc604*)
3229             cpuflags="-mcpu=604"
3230             disable altivec
3231         ;;
3232         g3|75*|ppc75*|powerpc75*)
3233             cpuflags="-mcpu=750"
3234             disable altivec
3235         ;;
3236         g4|745*|ppc745*|powerpc745*)
3237             cpuflags="-mcpu=7450"
3238         ;;
3239         74*|ppc74*|powerpc74*)
3240             cpuflags="-mcpu=7400"
3241         ;;
3242         g5|970|ppc970|powerpc970)
3243             cpuflags="-mcpu=970"
3244         ;;
3245         power[3-7]*)
3246             cpuflags="-mcpu=$cpu"
3247         ;;
3248         cell)
3249             cpuflags="-mcpu=cell"
3250             enable ldbrx
3251         ;;
3252         e500mc)
3253             cpuflags="-mcpu=e500mc"
3254             disable altivec
3255         ;;
3256         e500v2)
3257             cpuflags="-mcpu=8548 -mhard-float -mfloat-gprs=double"
3258             disable altivec
3259         ;;
3260         e500)
3261             cpuflags="-mcpu=8540 -mhard-float"
3262             disable altivec
3263         ;;
3264     esac
3265
3266 elif enabled sparc; then
3267
3268     case $cpu in
3269         cypress|f93[04]|tsc701|sparcl*|supersparc|hypersparc|niagara|v[789])
3270             cpuflags="-mcpu=$cpu"
3271             disable vis
3272         ;;
3273         ultrasparc*|niagara[234])
3274             cpuflags="-mcpu=$cpu"
3275         ;;
3276     esac
3277
3278 elif enabled x86; then
3279
3280     case $cpu in
3281         i[345]86|pentium)
3282             cpuflags="-march=$cpu"
3283             disable mmx
3284         ;;
3285         # targets that do NOT support nopl and conditional mov (cmov)
3286         pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
3287             cpuflags="-march=$cpu"
3288             disable i686
3289         ;;
3290         # targets that do support nopl and conditional mov (cmov)
3291         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*)
3292             cpuflags="-march=$cpu"
3293             enable i686
3294             enable fast_cmov
3295         ;;
3296         # targets that do support conditional mov but on which it's slow
3297         pentium4|pentium4m|prescott|nocona)
3298             cpuflags="-march=$cpu"
3299             enable i686
3300             disable fast_cmov
3301         ;;
3302     esac
3303
3304 fi
3305
3306 if [ "$cpu" != generic ]; then
3307     add_cflags  $cpuflags
3308     add_asflags $cpuflags
3309 fi
3310
3311 # compiler sanity check
3312 check_exec <<EOF
3313 int main(void){ return 0; }
3314 EOF
3315 if test "$?" != 0; then
3316     echo "$cc is unable to create an executable file."
3317     if test -z "$cross_prefix" && ! enabled cross_compile ; then
3318         echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
3319         echo "Only do this if you know what cross compiling means."
3320     fi
3321     die "C compiler test failed."
3322 fi
3323
3324 add_cppflags -D_ISOC99_SOURCE
3325 add_cxxflags -D__STDC_CONSTANT_MACROS
3326 check_cflags -std=c99
3327 check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
3328 #include <stdlib.h>
3329 EOF
3330 check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
3331 #include <stdlib.h>
3332 EOF
3333
3334 check_host_cflags -std=c99
3335 check_host_cflags -Wall
3336
3337 check_64bit(){
3338     arch32=$1
3339     arch64=$2
3340     expr=$3
3341     check_code cc "" "int test[2*($expr) - 1]" &&
3342         subarch=$arch64 || subarch=$arch32
3343 }
3344
3345 case "$arch" in
3346     aarch64|alpha|ia64)
3347         spic=$shared
3348     ;;
3349     mips)
3350         check_64bit mips mips64 '_MIPS_SIM > 1'
3351         spic=$shared
3352     ;;
3353     parisc)
3354         check_64bit parisc parisc64 'sizeof(void *) > 4'
3355         spic=$shared
3356     ;;
3357     ppc)
3358         check_64bit ppc ppc64 'sizeof(void *) > 4'
3359         spic=$shared
3360     ;;
3361     sparc)
3362         check_64bit sparc sparc64 'sizeof(void *) > 4'
3363         spic=$shared
3364     ;;
3365     x86)
3366         check_64bit x86_32 x86_64 'sizeof(void *) > 4'
3367         if test "$subarch" = "x86_64"; then
3368             spic=$shared
3369         fi
3370     ;;
3371     ppc)
3372         check_cc <<EOF && subarch="ppc64"
3373         int test[(int)sizeof(char*) - 7];
3374 EOF
3375     ;;
3376 esac
3377
3378 enable $subarch
3379 enabled spic && enable_weak pic
3380
3381 # OS specific
3382 case $target_os in
3383     haiku)
3384         prefix_default="/boot/common"
3385         network_extralibs="-lnetwork"
3386         host_libs=
3387         ;;
3388     sunos)
3389         FFSERVERLDFLAGS=""
3390         SHFLAGS='-shared -Wl,-h,$$(@F)'
3391         enabled x86 && SHFLAGS="-mimpure-text $SHFLAGS"
3392         network_extralibs="-lsocket -lnsl"
3393         add_cppflags -D__EXTENSIONS__ -D_XOPEN_SOURCE=600
3394         # When using suncc to build, the Solaris linker will mark
3395         # an executable with each instruction set encountered by
3396         # the Solaris assembler.  As our libraries contain their own
3397         # guards for processor-specific code, instead suppress
3398         # generation of the HWCAPS ELF section on Solaris x86 only.
3399         enabled_all suncc x86 && echo "hwcap_1 = OVERRIDE;" > mapfile && add_ldflags -Wl,-M,mapfile
3400         nm_default='nm -P -g'
3401         ;;
3402     netbsd)
3403         disable symver
3404         oss_indev_extralibs="-lossaudio"
3405         oss_outdev_extralibs="-lossaudio"
3406         enabled gcc || check_ldflags -Wl,-zmuldefs
3407         ;;
3408     openbsd|bitrig)
3409         disable symver
3410         SHFLAGS='-shared'
3411         SLIB_INSTALL_NAME='$(SLIBNAME).$(LIBMAJOR).$(LIBMINOR)'
3412         SLIB_INSTALL_LINKS=
3413         oss_indev_extralibs="-lossaudio"
3414         oss_outdev_extralibs="-lossaudio"
3415         ;;
3416     dragonfly)
3417         disable symver
3418         ;;
3419     freebsd)
3420         ;;
3421     bsd/os)
3422         add_extralibs -lpoll -lgnugetopt
3423         strip="strip -d"
3424         ;;
3425     darwin)
3426         gas="gas-preprocessor.pl $cc"
3427         enabled ppc && add_asflags -force_cpusubtype_ALL
3428         SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR)'
3429         enabled x86_32 && append SHFLAGS -Wl,-read_only_relocs,suppress
3430         strip="${strip} -x"
3431         add_ldflags -Wl,-dynamic,-search_paths_first
3432         SLIBSUF=".dylib"
3433         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
3434         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
3435         FFSERVERLDFLAGS=-Wl,-bind_at_load
3436         objformat="macho"
3437         enabled x86_64 && objformat="macho64"
3438         enabled_any pic shared ||
3439             { check_cflags -mdynamic-no-pic && add_asflags -mdynamic-no-pic; }
3440         ;;
3441     mingw32*)
3442         if test $target_os = "mingw32ce"; then
3443             disable network
3444         else
3445             target_os=mingw32
3446         fi
3447         LIBTARGET=i386
3448         if enabled x86_64; then
3449             LIBTARGET="i386:x86-64"
3450         elif enabled arm; then
3451             LIBTARGET=arm-wince
3452         fi
3453         check_ldflags -Wl,--nxcompat
3454         check_ldflags -Wl,--dynamicbase
3455         shlibdir_default="$bindir_default"
3456         SLIBPREF=""
3457         SLIBSUF=".dll"
3458         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
3459         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
3460         dlltool="${cross_prefix}dlltool"
3461         if check_cmd lib.exe -list; then
3462             SLIB_EXTRA_CMD=-'sed -e "s/ @[^ ]*//" $$(@:$(SLIBSUF)=.orig.def) > $$(@:$(SLIBSUF)=.def); lib.exe /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib)'
3463             if enabled x86_64; then
3464                 LIBTARGET=x64
3465             fi
3466         elif check_cmd $dlltool --version; then
3467             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)'
3468         fi
3469         SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
3470         SLIB_INSTALL_LINKS=
3471         SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
3472         SLIB_INSTALL_EXTRA_LIB='lib$(SLIBNAME:$(SLIBSUF)=.dll.a) $(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
3473         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'
3474         objformat="win32"
3475         ranlib=:
3476         enable dos_paths
3477         disable pic
3478         ;;
3479     win32|win64)
3480         if enabled shared; then
3481             # Link to the import library instead of the normal static library
3482             # for shared libs.
3483             LD_LIB='%.lib'
3484             # Cannot build shared and static libraries at the same time with
3485             # MSVC.
3486             disable static
3487         fi
3488         shlibdir_default="$bindir_default"
3489         SLIBPREF=""
3490         SLIBSUF=".dll"
3491         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
3492         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
3493         SLIB_CREATE_DEF_CMD='makedef $(SUBDIR)lib$(NAME).ver $(OBJS) > $$(@:$(SLIBSUF)=.def)'
3494         SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
3495         SLIB_INSTALL_LINKS=
3496         SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
3497         SLIB_INSTALL_EXTRA_LIB='$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
3498         SHFLAGS='-dll -def:$$(@:$(SLIBSUF)=.def) -implib:$(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib)'
3499         objformat="win32"
3500         ranlib=:
3501         enable dos_paths
3502         disable pic
3503         ;;
3504     cygwin*)
3505         target_os=cygwin
3506         shlibdir_default="$bindir_default"
3507         SLIBPREF="cyg"
3508         SLIBSUF=".dll"
3509         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
3510         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
3511         SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
3512         SLIB_INSTALL_LINKS=
3513         SLIB_INSTALL_EXTRA_LIB='lib$(FULLNAME).dll.a'
3514         SHFLAGS='-shared -Wl,--out-implib,$(SUBDIR)lib$(FULLNAME).dll.a'
3515         objformat="win32"
3516         enable dos_paths
3517         disable pic
3518         ;;
3519     *-dos|freedos|opendos)
3520         network_extralibs="-lsocket"
3521         objformat="coff"
3522         enable dos_paths
3523         add_cppflags -U__STRICT_ANSI__
3524         ;;
3525     linux)
3526         enable dv1394
3527         ;;
3528     irix*)
3529         target_os=irix
3530         ranlib="echo ignoring ranlib"
3531         ;;
3532     os/2*)
3533         strip="lxlite -CS"
3534         ln_s="cp -f"
3535         objformat="aout"
3536         add_cppflags -D_GNU_SOURCE
3537         add_ldflags -Zomf -Zbin-files -Zargs-wild -Zmap
3538         SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
3539         FFSERVERLDFLAGS=""
3540         LIBSUF="_s.a"
3541         SLIBPREF=""
3542         SLIBSUF=".dll"
3543         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
3544         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
3545         SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
3546             echo PROTMODE >> $(SUBDIR)$(NAME).def; \
3547             echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
3548             echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
3549             echo EXPORTS >> $(SUBDIR)$(NAME).def; \
3550             emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
3551         SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
3552             emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
3553         SLIB_INSTALL_EXTRA_LIB='$(LIBPREF)$(NAME)_dll.a $(LIBPREF)$(NAME)_dll.lib'
3554         enable dos_paths
3555         enable_weak os2threads
3556         ;;
3557     gnu/kfreebsd)
3558         add_cppflags -D_BSD_SOURCE
3559         ;;
3560     gnu)
3561         ;;
3562     qnx)
3563         add_cppflags -D_QNX_SOURCE
3564         network_extralibs="-lsocket"
3565         ;;
3566     symbian)
3567         SLIBSUF=".dll"
3568         enable dos_paths
3569         add_cflags --include=$sysinclude/gcce/gcce.h -fvisibility=default
3570         add_cppflags -D__GCCE__ -D__SYMBIAN32__ -DSYMBIAN_OE_POSIX_SIGNALS
3571         add_ldflags -Wl,--target1-abs,--no-undefined \
3572                     -Wl,-Ttext,0x80000,-Tdata,0x1000000 -shared \
3573                     -Wl,--entry=_E32Startup -Wl,-u,_E32Startup
3574         add_extralibs -l:eexe.lib -l:usrt2_2.lib -l:dfpaeabi.dso \
3575                       -l:drtaeabi.dso -l:scppnwdl.dso -lsupc++ -lgcc \
3576                       -l:libc.dso -l:libm.dso -l:euser.dso -l:libcrt0.lib
3577         ;;
3578     osf1)
3579         add_cppflags -D_OSF_SOURCE -D_POSIX_PII -D_REENTRANT
3580         FFSERVERLDFLAGS=
3581         ;;
3582     minix)
3583         ;;
3584     plan9)
3585         add_cppflags -D_C99_SNPRINTF_EXTENSION  \
3586                      -D_REENTRANT_SOURCE        \
3587                      -D_RESEARCH_SOURCE         \
3588                      -DFD_SETSIZE=96            \
3589                      -DHAVE_SOCK_OPTS
3590         add_compat strtod.o strtod=avpriv_strtod
3591         network_extralibs='-lbsd'
3592         exeobjs=compat/plan9/main.o
3593         disable ffserver
3594         cp_f='cp'
3595         ;;
3596     none)
3597         ;;
3598     *)
3599         die "Unknown OS '$target_os'."
3600         ;;
3601 esac
3602
3603 # determine libc flavour
3604
3605 # uclibc defines __GLIBC__, so it needs to be checked before glibc.
3606 if check_cpp_condition features.h "defined __UCLIBC__"; then
3607     libc_type=uclibc
3608     add_cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
3609 elif check_cpp_condition features.h "defined __GLIBC__"; then
3610     libc_type=glibc
3611     add_cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
3612 # MinGW headers can be installed on Cygwin, so check for newlib first.
3613 elif check_cpp_condition newlib.h "defined _NEWLIB_VERSION"; then
3614     libc_type=newlib
3615     add_cppflags -U__STRICT_ANSI__
3616 elif check_header _mingw.h; then
3617     libc_type=mingw
3618     check_cpp_condition _mingw.h \
3619         "defined (__MINGW64_VERSION_MAJOR) || (__MINGW32_MAJOR_VERSION > 3) || \
3620             (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
3621         die "ERROR: MinGW runtime version must be >= 3.15."
3622     add_cppflags -U__STRICT_ANSI__
3623     if check_cpp_condition _mingw.h "defined(__MINGW64_VERSION_MAJOR) && \
3624             __MINGW64_VERSION_MAJOR < 3"; then
3625         add_compat msvcrt/snprintf.o
3626         add_cflags "-include $source_path/compat/msvcrt/snprintf.h"
3627     fi
3628 elif check_func_headers stdlib.h _get_doserrno; then
3629     libc_type=msvcrt
3630     add_compat strtod.o strtod=avpriv_strtod
3631     add_compat msvcrt/snprintf.o snprintf=avpriv_snprintf   \
3632                                  _snprintf=avpriv_snprintf  \
3633                                  vsnprintf=avpriv_vsnprintf
3634     # The MSVC 2010 headers (Win 7.0 SDK) set _WIN32_WINNT to
3635     # 0x601 by default unless something else is set by the user.
3636     # This can easily lead to us detecting functions only present
3637     # in such new versions and producing binaries requiring windows 7.0.
3638     # Therefore explicitly set the default to XP unless the user has
3639     # set something else on the command line.
3640     check_cpp_condition stdlib.h "defined(_WIN32_WINNT)" || add_cppflags -D_WIN32_WINNT=0x0502
3641 elif check_cpp_condition stddef.h "defined __KLIBC__"; then
3642     libc_type=klibc
3643 elif check_cpp_condition sys/cdefs.h "defined __BIONIC__"; then
3644     libc_type=bionic
3645     add_compat strtod.o strtod=avpriv_strtod
3646 fi
3647
3648 test -n "$libc_type" && enable $libc_type
3649
3650 # hacks for compiler/libc/os combinations
3651
3652 if enabled_all tms470 glibc; then
3653     CPPFLAGS="-I${source_path}/compat/tms470 ${CPPFLAGS}"
3654     add_cppflags -D__USER_LABEL_PREFIX__=
3655     add_cppflags -D__builtin_memset=memset
3656     add_cppflags -D__gnuc_va_list=va_list -D_VA_LIST_DEFINED
3657     add_cflags   -pds=48    # incompatible redefinition of macro
3658 fi
3659
3660 if enabled_all ccc glibc; then
3661     add_ldflags -Wl,-z,now  # calls to libots crash without this
3662 fi
3663
3664 esc(){
3665     echo "$*" | sed 's/%/%25/g;s/:/%3a/g'
3666 }
3667
3668 echo "config:$arch:$subarch:$cpu:$target_os:$(esc $cc_ident):$(esc $FFMPEG_CONFIGURATION)" >config.fate
3669
3670 check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable_weak pic
3671
3672 set_default $PATHS_LIST
3673 set_default nm
3674
3675 # we need to build at least one lib type
3676 if ! enabled_any static shared; then
3677     cat <<EOF
3678 At least one library type must be built.
3679 Specify --enable-static to build the static libraries or --enable-shared to
3680 build the shared libraries as well. To only build the shared libraries specify
3681 --disable-static in addition to --enable-shared.
3682 EOF
3683     exit 1;
3684 fi
3685
3686 die_license_disabled() {
3687     enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
3688 }
3689
3690 die_license_disabled_gpl() {
3691     enabled $1 || { enabled $2 && die "$2 is incompatible with the gpl and --enable-$1 is not specified."; }
3692 }
3693
3694 die_license_disabled gpl libcdio
3695 die_license_disabled gpl libutvideo
3696 die_license_disabled gpl libvidstab
3697 die_license_disabled gpl libx264
3698 die_license_disabled gpl libxavs
3699 die_license_disabled gpl libxvid
3700 die_license_disabled gpl x11grab
3701
3702 die_license_disabled nonfree libaacplus
3703 die_license_disabled nonfree libfaac
3704 enabled gpl && die_license_disabled_gpl nonfree libfdk_aac
3705 enabled gpl && die_license_disabled_gpl nonfree openssl
3706
3707 die_license_disabled version3 libopencore_amrnb
3708 die_license_disabled version3 libopencore_amrwb
3709 die_license_disabled version3 libvo_aacenc
3710 die_license_disabled version3 libvo_amrwbenc
3711
3712 enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
3713
3714 disabled optimizations || check_cflags -fomit-frame-pointer
3715
3716 enable_weak_pic() {
3717     disabled pic && return
3718     enable pic
3719     add_cppflags -DPIC
3720     add_cflags   -fPIC
3721     add_asflags  -fPIC
3722 }
3723
3724 enabled pic && enable_weak_pic
3725
3726 check_cc <<EOF || die "Symbol mangling check failed."
3727 int ff_extern;
3728 EOF
3729 sym=$($nm $TMPO | awk '/ff_extern/{ print substr($0, match($0, /[^ \t]*ff_extern/)) }')
3730 extern_prefix=${sym%%ff_extern*}
3731
3732 check_cc <<EOF && enable_weak inline_asm
3733 void foo(void) { __asm__ volatile ("" ::); }
3734 EOF
3735
3736 _restrict=
3737 for restrict_keyword in restrict __restrict__ __restrict; do
3738     check_cc <<EOF && _restrict=$restrict_keyword && break
3739 void foo(char * $restrict_keyword p);
3740 EOF
3741 done
3742
3743 check_cc <<EOF && enable attribute_packed
3744 struct { int x; } __attribute__((packed)) x;
3745 EOF
3746
3747 check_cc <<EOF && enable attribute_may_alias
3748 union { int x; } __attribute__((may_alias)) x;
3749 EOF
3750
3751 check_cc <<EOF || die "endian test failed"
3752 unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
3753 EOF
3754 od -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
3755
3756 if enabled alpha; then
3757
3758     check_cflags -mieee
3759
3760 elif enabled arm; then
3761
3762     check_cpp_condition stddef.h "defined __thumb__" && check_cc <<EOF && enable_weak thumb
3763 float func(float a, float b){ return a+b; }
3764 EOF
3765
3766     enabled thumb && check_cflags -mthumb || check_cflags -marm
3767     nogas=die
3768
3769     if     check_cpp_condition stddef.h "defined __ARM_PCS_VFP"; then
3770         enable vfp_args
3771     elif ! check_cpp_condition stddef.h "defined __ARM_PCS || defined __SOFTFP__"; then
3772         case "${cross_prefix:-$cc}" in
3773             *hardfloat*)         enable vfp_args;   fpabi=vfp ;;
3774             *) check_ld "cc" <<EOF && enable vfp_args && fpabi=vfp || fpabi=soft ;;
3775 __asm__ (".eabi_attribute 28, 1");
3776 int main(void) { return 0; }
3777 EOF
3778         esac
3779         warn "Compiler does not indicate floating-point ABI, guessing $fpabi."
3780     fi
3781
3782     enabled armv5te && check_insn armv5te 'qadd r0, r0, r0'
3783     enabled armv6   && check_insn armv6   'sadd16 r0, r0, r0'
3784     enabled armv6t2 && check_insn armv6t2 'movt r0, #0'
3785     enabled neon    && check_insn neon    'vadd.i16 q0, q0, q0'
3786     enabled vfp     && check_insn vfp     'fadds s0, s0, s0'
3787     enabled vfpv3   && check_insn vfpv3   'vmov.f32 s0, #1.0'
3788
3789     [ $target_os = linux ] ||
3790         map 'enabled_any ${v}_external ${v}_inline || disable $v' \
3791             $ARCH_EXT_LIST_ARM
3792
3793     check_inline_asm asm_mod_q '"add r0, %Q0, %R0" :: "r"((long long)0)'
3794     check_inline_asm asm_mod_y '"vmul.i32 d0, d0, %y0" :: "x"(0)'
3795
3796     enabled_all armv6t2 shared !pic && enable_weak_pic
3797
3798 elif enabled mips; then
3799
3800     check_inline_asm loongson '"dmult.g $1, $2, $3"'
3801     enabled mips32r2  && add_cflags "-mips32r2" && add_asflags "-mips32r2" &&
3802      check_inline_asm mips32r2  '"rotr $t0, $t1, 1"'
3803     enabled mipsdspr1 && add_cflags "-mdsp" && add_asflags "-mdsp" &&
3804      check_inline_asm mipsdspr1 '"addu.qb $t0, $t1, $t2"'
3805     enabled mipsdspr2 && add_cflags "-mdspr2" && add_asflags "-mdspr2" &&
3806      check_inline_asm mipsdspr2 '"absq_s.qb $t0, $t1"'
3807     enabled mipsfpu   && add_cflags "-mhard-float" && add_asflags "-mhard-float" &&
3808      check_inline_asm mipsfpu   '"madd.d $f0, $f2, $f4, $f6"'
3809
3810 elif enabled parisc; then
3811
3812     if enabled gcc; then
3813         case $($cc -dumpversion) in
3814             4.[3-8].*) check_cflags -fno-optimize-sibling-calls ;;
3815         esac
3816     fi
3817
3818 elif enabled ppc; then
3819
3820     enable local_aligned_8 local_aligned_16
3821
3822     check_inline_asm dcbzl     '"dcbzl 0, %0" :: "r"(0)'
3823     check_inline_asm ibm_asm   '"add 0, 0, 0"'
3824     check_inline_asm ppc4xx    '"maclhw r10, r11, r12"'
3825     check_inline_asm xform_asm '"lwzx %1, %y0" :: "Z"(*(int*)0), "r"(0)'
3826
3827     # AltiVec flags: The FSF version of GCC differs from the Apple version
3828     if enabled altivec; then
3829         nogas=warn
3830         check_cflags -maltivec -mabi=altivec &&
3831         { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
3832         check_cflags -faltivec
3833
3834         # check if our compiler supports Motorola AltiVec C API
3835         check_cc <<EOF || disable altivec
3836 $inc_altivec_h
3837 int main(void) {
3838     vector signed int v1 = (vector signed int) { 0 };
3839     vector signed int v2 = (vector signed int) { 1 };
3840     v1 = vec_add(v1, v2);
3841     return 0;
3842 }
3843 EOF
3844
3845         enabled altivec || warn "Altivec disabled, possibly missing --cpu flag"
3846     fi
3847
3848 elif enabled sparc; then
3849
3850     enabled vis && check_inline_asm vis '"pdist %f0, %f0, %f0"'
3851
3852 elif enabled x86; then
3853
3854     check_builtin rdtsc    intrin.h   "__rdtsc()"
3855     check_builtin mm_empty mmintrin.h "_mm_empty()"
3856
3857     enable local_aligned_8 local_aligned_16
3858
3859     # check whether EBP is available on x86
3860     # As 'i' is stored on the stack, this program will crash
3861     # if the base pointer is used to access it because the
3862     # base pointer is cleared in the inline assembly code.
3863     check_exec_crash <<EOF && enable ebp_available
3864 volatile int i=0;
3865 __asm__ volatile ("xorl %%ebp, %%ebp" ::: "%ebp");
3866 return i;
3867 EOF
3868
3869     # check whether EBX is available on x86
3870     check_inline_asm ebx_available '""::"b"(0)' &&
3871         check_inline_asm ebx_available '"":::"%ebx"'
3872
3873     # check whether xmm clobbers are supported
3874     check_inline_asm xmm_clobbers '"":::"%xmm0"'
3875
3876     # check whether binutils is new enough to compile SSSE3/MMXEXT
3877     enabled ssse3  && check_inline_asm ssse3_inline  '"pabsw %xmm0, %xmm0"'
3878     enabled mmxext && check_inline_asm mmxext_inline '"pmaxub %mm0, %mm1"'
3879
3880     if ! disabled_any asm mmx yasm; then
3881         if check_cmd $yasmexe --version; then
3882             enabled x86_64 && yasm_extra="-m amd64"
3883             yasm_debug="-g dwarf2"
3884         elif check_cmd nasm -v; then
3885             yasmexe=nasm
3886             yasm_debug="-g -F dwarf"
3887             enabled x86_64 && test "$objformat" = elf && objformat=elf64
3888         fi
3889
3890         YASMFLAGS="-f $objformat $yasm_extra"
3891         enabled pic               && append YASMFLAGS "-DPIC"
3892         test -n "$extern_prefix"  && append YASMFLAGS "-DPREFIX"
3893         case "$objformat" in
3894             elf*) enabled debug && append YASMFLAGS $yasm_debug ;;
3895         esac
3896
3897         check_yasm "pextrd [eax], xmm0, 1" && enable yasm ||
3898             die "yasm not found, use --disable-yasm for a crippled build"
3899         check_yasm "vextractf128 xmm0, ymm0, 0"      || disable avx_external
3900         check_yasm "vfmaddps ymm0, ymm1, ymm2, ymm3" || disable fma4_external
3901         check_yasm "CPU amdnop" && enabled i686 && enable cpunop
3902     fi
3903
3904     case "$cpu" in
3905         athlon*|opteron*|k8*|pentium|pentium-mmx|prescott|nocona|atom|geode)
3906             disable fast_clz
3907         ;;
3908     esac
3909
3910 fi
3911
3912 if enabled asm; then
3913     as=${gas:=$as}
3914     check_as <<EOF && enable gnu_as || \
3915         $nogas "GNU assembler not found, install gas-preprocessor"
3916 .macro m n
3917 \n: .int 0
3918 .endm
3919 m x
3920 EOF
3921 fi
3922
3923 check_ldflags -Wl,--as-needed
3924
3925 if check_func dlopen; then
3926     ldl=
3927 elif check_func dlopen -ldl; then
3928     ldl=-ldl
3929 fi
3930
3931 if ! disabled network; then
3932     check_type "sys/types.h sys/socket.h" socklen_t
3933     check_type netdb.h "struct addrinfo"
3934     check_type netinet/in.h "struct group_source_req" -D_BSD_SOURCE
3935     check_type netinet/in.h "struct ip_mreq_source" -D_BSD_SOURCE
3936     check_type netinet/in.h "struct ipv6_mreq" -D_DARWIN_C_SOURCE
3937     check_type netinet/in.h "struct sockaddr_in6"
3938     check_type poll.h "struct pollfd"
3939     check_type "sys/types.h sys/socket.h" "struct sockaddr_storage"
3940     check_struct "sys/types.h sys/socket.h" "struct sockaddr" sa_len
3941     check_type netinet/sctp.h "struct sctp_event_subscribe"
3942     check_func getaddrinfo $network_extralibs
3943     check_func getservbyport $network_extralibs
3944     # Prefer arpa/inet.h over winsock2
3945     if check_header arpa/inet.h ; then
3946         check_func closesocket
3947     elif check_header winsock2.h ; then
3948         check_func_headers winsock2.h closesocket -lws2 &&
3949             network_extralibs="-lws2" ||
3950         { check_func_headers winsock2.h closesocket -lws2_32 &&
3951             network_extralibs="-lws2_32"; }
3952         check_func_headers ws2tcpip.h getaddrinfo $network_extralibs
3953         check_type ws2tcpip.h socklen_t
3954         check_type ws2tcpip.h "struct addrinfo"
3955         check_type ws2tcpip.h "struct group_source_req"
3956         check_type ws2tcpip.h "struct ip_mreq_source"
3957         check_type ws2tcpip.h "struct ipv6_mreq"
3958         check_type winsock2.h "struct pollfd"
3959         check_type ws2tcpip.h "struct sockaddr_in6"
3960         check_type ws2tcpip.h "struct sockaddr_storage"
3961         check_struct winsock2.h "struct sockaddr" sa_len
3962     else
3963         disable network
3964     fi
3965 fi
3966
3967 # Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
3968 check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
3969
3970 check_func  access
3971 check_func  clock_gettime || { check_func clock_gettime -lrt && add_extralibs -lrt; }
3972 check_func  fcntl
3973 check_func  fork
3974 check_func_headers stdlib.h getenv
3975 check_func  gethrtime
3976 check_func  getopt
3977 check_func  getrusage
3978 check_struct "sys/time.h sys/resource.h" "struct rusage" ru_maxrss
3979 check_func  gettimeofday
3980 check_func  inet_aton $network_extralibs
3981 check_func  isatty
3982 check_func  localtime_r
3983 check_func  ${malloc_prefix}memalign            && enable memalign
3984 check_func  mkstemp
3985 check_func  mmap
3986 check_func  mprotect
3987 check_func  ${malloc_prefix}posix_memalign      && enable posix_memalign
3988 check_func_headers malloc.h _aligned_malloc     && enable aligned_malloc
3989 check_func  setrlimit
3990 check_struct "sys/stat.h" "struct stat" st_mtim.tv_nsec -D_BSD_SOURCE
3991 check_func  strerror_r
3992 check_func  sched_getaffinity
3993 check_builtin sync_val_compare_and_swap "" "int *ptr; int oldval, newval; __sync_val_compare_and_swap(ptr, oldval, newval)"
3994 check_builtin machine_rw_barrier mbarrier.h "__machine_rw_barrier()"
3995 check_builtin atomic_cas_ptr atomic.h "void **ptr; void *oldval, *newval; atomic_cas_ptr(ptr, oldval, newval)"
3996 check_builtin MemoryBarrier windows.h "MemoryBarrier()"
3997 check_func  sysconf
3998 check_func  sysctl
3999 check_func  usleep
4000 check_func_headers conio.h kbhit
4001 check_func_headers windows.h PeekNamedPipe
4002 check_func_headers io.h setmode
4003 check_func_headers lzo/lzo1x.h lzo1x_999_compress
4004 check_lib2 "windows.h shellapi.h" CommandLineToArgvW -lshell32
4005 check_lib2 "windows.h wincrypt.h" CryptGenRandom -ladvapi32
4006 check_lib2 "windows.h psapi.h" GetProcessMemoryInfo -lpsapi
4007 check_func_headers windows.h GetProcessAffinityMask
4008 check_func_headers windows.h GetProcessTimes
4009 check_func_headers windows.h GetSystemTimeAsFileTime
4010 check_func_headers windows.h MapViewOfFile
4011 check_func_headers windows.h SetConsoleTextAttribute
4012 check_func_headers windows.h Sleep
4013 check_func_headers windows.h VirtualAlloc
4014 check_func_headers glob.h glob
4015 check_func_headers "X11/Xlib.h X11/extensions/Xvlib.h" XvGetPortAttribute -lXv -lX11 -lXext
4016
4017 check_header cl/cl.h
4018 check_header direct.h
4019 check_header dlfcn.h
4020 check_header dxva.h
4021 check_header dxva2api.h -D_WIN32_WINNT=0x0600
4022 check_header io.h
4023 check_header libcrystalhd/libcrystalhd_if.h
4024 check_header malloc.h
4025 check_header poll.h
4026 check_header sys/mman.h
4027 check_header sys/param.h
4028 check_header sys/resource.h
4029 check_header sys/select.h
4030 check_header sys/time.h
4031 check_header termios.h
4032 check_header unistd.h
4033 check_header vdpau/vdpau.h
4034 check_header vdpau/vdpau_x11.h
4035 check_header VideoDecodeAcceleration/VDADecoder.h
4036 check_header windows.h
4037 check_header X11/extensions/XvMClib.h
4038 check_header asm/types.h
4039
4040 disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
4041 disabled bzlib ||&nb