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