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