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