configure: Don't run "export $e" for an empty string
[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_gnutls_protocol_select="tcp_protocol"
2219 tls_openssl_protocol_deps="openssl !tls_gnutls_protocol"
2220 tls_openssl_protocol_select="tcp_protocol"
2221 tls_protocol_deps_any="tls_gnutls_protocol tls_openssl_protocol"
2222 udp_protocol_select="network"
2223 unix_protocol_deps="sys_un_h"
2224 unix_protocol_select="network"
2225
2226 # filters
2227 blackframe_filter_deps="gpl"
2228 boxblur_filter_deps="gpl"
2229 bs2b_filter_deps="libbs2b"
2230 cropdetect_filter_deps="gpl"
2231 delogo_filter_deps="gpl"
2232 drawtext_filter_deps="libfreetype"
2233 frei0r_filter_deps="frei0r dlopen"
2234 frei0r_filter_extralibs='$ldl'
2235 frei0r_src_filter_deps="frei0r dlopen"
2236 frei0r_src_filter_extralibs='$ldl'
2237 hqdn3d_filter_deps="gpl"
2238 interlace_filter_deps="gpl"
2239 ocv_filter_deps="libopencv"
2240 resample_filter_deps="avresample"
2241 scale_filter_deps="swscale"
2242
2243 # examples
2244 avcodec_example_deps="avcodec avutil"
2245 filter_audio_example_deps="avfilter avutil"
2246 metadata_example_deps="avformat avutil"
2247 output_example_deps="avcodec avformat avutil swscale"
2248 qsvdec_example_deps="avcodec avutil libmfx h264_qsv_decoder vaapi_x11"
2249 transcode_aac_example_deps="avcodec avformat avresample"
2250
2251 # libraries, in linking order
2252 avcodec_deps="avutil"
2253 avdevice_deps="avformat avcodec avutil"
2254 avfilter_deps="avutil"
2255 avformat_deps="avcodec avutil"
2256 avresample_deps="avutil"
2257 swscale_deps="avutil"
2258
2259 # programs
2260 avconv_deps="avcodec avfilter avformat avresample swscale"
2261 avconv_select="aformat_filter anull_filter asyncts_filter atrim_filter format_filter
2262                fps_filter null_filter resample_filter scale_filter
2263                setpts_filter trim_filter"
2264 avplay_deps="avcodec avformat avresample swscale sdl"
2265 avplay_libs='$sdl_libs'
2266 avplay_select="rdft transpose_filter hflip_filter vflip_filter"
2267 avprobe_deps="avcodec avformat"
2268
2269 # documentation
2270 pod2man_deps="doc"
2271 texi2html_deps="doc"
2272
2273 # default parameters
2274
2275 logfile="config.log"
2276
2277 # installation paths
2278 prefix_default="/usr/local"
2279 bindir_default='${prefix}/bin'
2280 datadir_default='${prefix}/share/avconv'
2281 docdir_default='${prefix}/share/doc/libav'
2282 incdir_default='${prefix}/include'
2283 libdir_default='${prefix}/lib'
2284 mandir_default='${prefix}/share/man'
2285 shlibdir_default="$libdir_default"
2286
2287 # toolchain
2288 ar_default="ar"
2289 cc_default="gcc"
2290 host_cc_default="gcc"
2291 cp_f="cp -f"
2292 ln_s="ln -s -f"
2293 nm_default="nm -g"
2294 objformat="elf"
2295 pkg_config_default=pkg-config
2296 ranlib="ranlib"
2297 strip="strip"
2298 yasmexe="yasm"
2299
2300 # machine
2301 arch_default=$(uname -m)
2302 cpu="generic"
2303 intrinsics="none"
2304
2305 # OS
2306 target_os_default=$(tolower $(uname -s))
2307 host_os=$target_os_default
2308
2309 # configurable options
2310 enable $EXAMPLE_LIST $LIBRARY_LIST $PROGRAM_LIST
2311
2312 enable asm
2313 enable debug
2314 enable doc
2315 enable faan faandct faanidct
2316 enable optimizations
2317 enable safe_bitstream_reader
2318 enable static
2319 enable swscale_alpha
2320 enable valgrind_backtrace
2321
2322 # By default, enable only those hwaccels that have no external dependencies.
2323 enable d3d11va dxva2 vda vdpau
2324
2325 # build settings
2326 SHFLAGS='-shared -Wl,-soname,$$(@F)'
2327 LIBPREF="lib"
2328 LIBSUF=".a"
2329 FULLNAME='$(NAME)$(BUILDSUF)'
2330 LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
2331 SLIBPREF="lib"
2332 SLIBSUF=".so"
2333 SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
2334 SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
2335 SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
2336 LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
2337 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'
2338 SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR) $(SLIBNAME)'
2339
2340 asflags_filter=echo
2341 cflags_filter=echo
2342 ldflags_filter=echo
2343
2344 AS_C='-c'
2345 AS_O='-o $@'
2346 CC_C='-c'
2347 CC_E='-E -o $@'
2348 CC_O='-o $@'
2349 LD_O='-o $@'
2350 LD_LIB='-l%'
2351 LD_PATH='-L'
2352 HOSTCC_C='-c'
2353 HOSTCC_E='-E -o $@'
2354 HOSTCC_O='-o $@'
2355 HOSTLD_O='-o $@'
2356
2357 host_libs='-lm'
2358 host_cflags_filter=echo
2359 host_ldflags_filter=echo
2360
2361 target_path='$(CURDIR)'
2362
2363 # since the object filename is not given with the -MM flag, the compiler
2364 # is only able to print the basename, and we must add the path ourselves
2365 DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o," > $(@:.o=.d)'
2366 DEPFLAGS='-MM'
2367
2368 # find source path
2369 if test -f configure; then
2370     source_path=.
2371 else
2372     source_path=$(cd $(dirname "$0"); pwd)
2373     echo "$source_path" | grep -q '[[:blank:]]' &&
2374         die "Out of tree builds are impossible with whitespace in source path."
2375     test -e "$source_path/config.h" &&
2376         die "Out of tree builds are impossible with config.h in source dir."
2377 fi
2378
2379 for v in "$@"; do
2380     r=${v#*=}
2381     l=${v%"$r"}
2382     r=$(sh_quote "$r")
2383     LIBAV_CONFIGURATION="${LIBAV_CONFIGURATION# } ${l}${r}"
2384 done
2385
2386 find_things(){
2387     thing=$1
2388     pattern=$2
2389     file=$source_path/$3
2390     sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
2391 }
2392
2393 ENCODER_LIST=$(find_things  encoder  ENC      libavcodec/allcodecs.c)
2394 DECODER_LIST=$(find_things  decoder  DEC      libavcodec/allcodecs.c)
2395 HWACCEL_LIST=$(find_things  hwaccel  HWACCEL  libavcodec/allcodecs.c)
2396 PARSER_LIST=$(find_things   parser   PARSER   libavcodec/allcodecs.c)
2397 BSF_LIST=$(find_things      bsf      BSF      libavcodec/allcodecs.c)
2398 MUXER_LIST=$(find_things    muxer    _MUX     libavformat/allformats.c)
2399 DEMUXER_LIST=$(find_things  demuxer  DEMUX    libavformat/allformats.c)
2400 OUTDEV_LIST=$(find_things   outdev   OUTDEV   libavdevice/alldevices.c)
2401 INDEV_LIST=$(find_things    indev    _IN      libavdevice/alldevices.c)
2402 PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
2403 FILTER_LIST=$(find_things   filter   FILTER   libavfilter/allfilters.c)
2404
2405 ALL_COMPONENTS="
2406     $BSF_LIST
2407     $DECODER_LIST
2408     $DEMUXER_LIST
2409     $ENCODER_LIST
2410     $FILTER_LIST
2411     $HWACCEL_LIST
2412     $INDEV_LIST
2413     $MUXER_LIST
2414     $OUTDEV_LIST
2415     $PARSER_LIST
2416     $PROTOCOL_LIST
2417 "
2418
2419 for n in $COMPONENT_LIST; do
2420     v=$(toupper ${n%s})_LIST
2421     eval enable \$$v
2422     eval ${n}_if_any="\$$v"
2423 done
2424
2425 enable $ARCH_EXT_LIST
2426
2427 die_unknown(){
2428     echo "Unknown option \"$1\"."
2429     echo "See $0 --help for available options."
2430     exit 1
2431 }
2432
2433 print_3_columns() {
2434     cat | tr ' ' '\n' | sort | pr -r -3 -t
2435 }
2436
2437 show_list() {
2438     suffix=_$1
2439     shift
2440     echo $* | sed s/$suffix//g | print_3_columns
2441     exit 0
2442 }
2443
2444 rand_list(){
2445     IFS=', '
2446     set -- $*
2447     unset IFS
2448     for thing; do
2449         comp=${thing%:*}
2450         prob=${thing#$comp}
2451         prob=${prob#:}
2452         is_in ${comp} $COMPONENT_LIST && eval comp=\$$(toupper ${comp%s})_LIST
2453         echo "prob ${prob:-0.5}"
2454         printf '%s\n' $comp
2455     done
2456 }
2457
2458 do_random(){
2459     action=$1
2460     shift
2461     random_seed=$(awk "BEGIN { srand($random_seed); print srand() }")
2462     $action $(rand_list "$@" | awk "BEGIN { srand($random_seed) } \$1 == \"prob\" { prob = \$2; next } rand() < prob { print }")
2463 }
2464
2465 for opt do
2466     optval="${opt#*=}"
2467     case "$opt" in
2468         --extra-ldflags=*)
2469             add_ldflags $optval
2470         ;;
2471         --extra-ldexeflags=*)
2472             add_ldexeflags $optval
2473         ;;
2474         --extra-libs=*)
2475             add_extralibs $optval
2476         ;;
2477         --disable-devices)
2478             disable $INDEV_LIST $OUTDEV_LIST
2479         ;;
2480         --enable-debug=*)
2481             debuglevel="$optval"
2482         ;;
2483         --disable-programs)
2484             disable $PROGRAM_LIST
2485         ;;
2486         --disable-everything)
2487             map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
2488         ;;
2489         --disable-all)
2490             map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
2491             disable $LIBRARY_LIST $PROGRAM_LIST doc
2492         ;;
2493         --enable-random|--disable-random)
2494             action=${opt%%-random}
2495             do_random ${action#--} $COMPONENT_LIST
2496         ;;
2497         --enable-random=*|--disable-random=*)
2498             action=${opt%%-random=*}
2499             do_random ${action#--} $optval
2500         ;;
2501         --enable-*=*|--disable-*=*)
2502             eval $(echo "${opt%%=*}" | sed 's/--/action=/;s/-/ thing=/')
2503             is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt"
2504             eval list=\$$(toupper $thing)_LIST
2505             name=$(echo "${optval}" | sed "s/,/_${thing}|/g")_${thing}
2506             $action $(filter "$name" $list)
2507         ;;
2508         --enable-avserver|--disable-avserver*)
2509             warn "avserver has been removed, the ${opt} option is only"\
2510                  "provided for compatibility and will be removed in the future"
2511         ;;
2512         --enable-?*|--disable-?*)
2513             eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
2514             if is_in $option $COMPONENT_LIST; then
2515                 test $action = disable && action=unset
2516                 eval $action \$$(toupper ${option%s})_LIST
2517             elif is_in $option $CMDLINE_SELECT; then
2518                 $action $option
2519             else
2520                 die_unknown $opt
2521             fi
2522         ;;
2523         --list-*)
2524             NAME="${opt#--list-}"
2525             is_in $NAME $COMPONENT_LIST || die_unknown $opt
2526             NAME=${NAME%s}
2527             eval show_list $NAME \$$(toupper $NAME)_LIST
2528         ;;
2529         --help|-h) show_help
2530         ;;
2531         *)
2532             optname="${opt%%=*}"
2533             optname="${optname#--}"
2534             optname=$(echo "$optname" | sed 's/-/_/g')
2535             if is_in $optname $CMDLINE_SET; then
2536                 eval $optname='$optval'
2537             elif is_in $optname $CMDLINE_APPEND; then
2538                 append $optname "$optval"
2539             else
2540                 die_unknown $opt
2541             fi
2542         ;;
2543     esac
2544 done
2545
2546 for e in $env; do
2547     eval "export $e"
2548 done
2549
2550 disabled logging && logfile=/dev/null
2551
2552 echo "# $0 $LIBAV_CONFIGURATION" > $logfile
2553 set >> $logfile
2554
2555 case "$toolchain" in
2556     clang-asan)
2557         cc_default="clang"
2558         add_cflags  -fsanitize=address
2559         add_ldflags -fsanitize=address
2560     ;;
2561     clang-tsan)
2562         cc_default="clang"
2563         add_cflags  -fsanitize=thread -pie
2564         add_ldflags -fsanitize=thread -pie
2565     ;;
2566     clang-usan)
2567         cc_default="clang"
2568         add_cflags  -fsanitize=undefined -O1
2569         add_ldflags -fsanitize=undefined
2570     ;;
2571     gcc-asan)
2572         cc_default="gcc"
2573         add_cflags  -fsanitize=address
2574         add_ldflags -fsanitize=address
2575     ;;
2576     gcc-tsan)
2577         cc_default="gcc"
2578         add_cflags  -fsanitize=thread -pie -fPIC
2579         add_ldflags -fsanitize=thread -pie -fPIC
2580     ;;
2581     gcc-usan)
2582         cc_default="gcc"
2583         add_cflags  -fsanitize=undefined
2584         add_ldflags -fsanitize=undefined
2585     ;;
2586     valgrind-massif)
2587         target_exec_default="valgrind"
2588         target_exec_args="--alloc-fn=av_malloc --alloc-fn=av_mallocz"
2589     ;;
2590     valgrind-memcheck)
2591         target_exec_default="valgrind"
2592         target_exec_args="--track-origins=yes --leak-check=full"
2593     ;;
2594     msvc)
2595         # Check whether the current MSVC version needs the C99 converter.
2596         # From MSVC 2013 (compiler major version 18) onwards, it does actually
2597         # support enough of C99 to build libav. Default to the new
2598         # behaviour if the regexp was unable to match anything, since this
2599         # successfully parses the version number of existing supported
2600         # versions that require the converter (MSVC 2010 and 2012).
2601         cl_major_ver=$(cl 2>&1 | sed -n 's/.*Version \([[:digit:]]\{1,\}\)\..*/\1/p')
2602         if [ -z "$cl_major_ver" ] || [ $cl_major_ver -ge 18 ]; then
2603             cc_default="cl"
2604         else
2605             cc_default="c99wrap cl"
2606         fi
2607         ld_default="link"
2608         nm_default="dumpbin -symbols"
2609         ar_default="lib"
2610         target_os_default="win32"
2611         # Use a relative path for TMPDIR. This makes sure all the
2612         # ffconf temp files are written with a relative path, avoiding
2613         # issues with msys/win32 path conversion for MSVC parameters
2614         # such as -Fo<file> or -out:<file>.
2615         TMPDIR=.
2616     ;;
2617     icl)
2618         cc_default="icl"
2619         ld_default="xilink"
2620         nm_default="dumpbin -symbols"
2621         ar_default="xilib"
2622         target_os_default="win32"
2623         TMPDIR=.
2624     ;;
2625     gcov)
2626         add_cflags  -fprofile-arcs -ftest-coverage
2627         add_ldflags -fprofile-arcs -ftest-coverage
2628     ;;
2629     hardened)
2630         add_cppflags -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2
2631         add_cflags   -fno-strict-overflow -fstack-protector-all
2632         add_ldflags  -Wl,-z,relro -Wl,-z,now
2633     ;;
2634     ?*)
2635         die "Unknown toolchain $toolchain"
2636     ;;
2637 esac
2638
2639 test -n "$cross_prefix" && enable cross_compile
2640
2641 if enabled cross_compile; then
2642     test -n "$arch" && test -n "$target_os" ||
2643         die "Must specify target arch and OS when cross-compiling"
2644 fi
2645
2646 ar_default="${cross_prefix}${ar_default}"
2647 cc_default="${cross_prefix}${cc_default}"
2648 nm_default="${cross_prefix}${nm_default}"
2649 pkg_config_default="${cross_prefix}${pkg_config_default}"
2650 ranlib="${cross_prefix}${ranlib}"
2651 strip="${cross_prefix}${strip}"
2652
2653 sysinclude_default="${sysroot}/usr/include"
2654
2655 set_default arch cc pkg_config sysinclude target_exec target_os
2656 enabled cross_compile || host_cc_default=$cc
2657 set_default host_cc
2658
2659 if ! $pkg_config --version >/dev/null 2>&1; then
2660     warn "$pkg_config not found, library detection may fail."
2661     pkg_config=false
2662 fi
2663
2664 exesuf() {
2665     case $1 in
2666         mingw32*|win32|win64|cygwin*|*-dos|freedos|opendos|os/2*|symbian) echo .exe ;;
2667     esac
2668 }
2669
2670 EXESUF=$(exesuf $target_os)
2671 HOSTEXESUF=$(exesuf $host_os)
2672
2673 # set temporary file name
2674 : ${TMPDIR:=$TEMPDIR}
2675 : ${TMPDIR:=$TMP}
2676 : ${TMPDIR:=/tmp}
2677
2678 if ! check_cmd mktemp -u XXXXXX; then
2679     # simple replacement for missing mktemp
2680     # NOT SAFE FOR GENERAL USE
2681     mktemp(){
2682         echo "${2%%XXX*}.${HOSTNAME}.${UID}.$$"
2683     }
2684 fi
2685
2686 tmpfile(){
2687     tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
2688         (set -C; exec > $tmp) 2>/dev/null ||
2689         die "Unable to create temporary file in $TMPDIR."
2690     append TMPFILES $tmp
2691     eval $1=$tmp
2692 }
2693
2694 trap 'rm -f -- $TMPFILES' EXIT
2695
2696 tmpfile TMPASM .asm
2697 tmpfile TMPC   .c
2698 tmpfile TMPE   $EXESUF
2699 tmpfile TMPH   .h
2700 tmpfile TMPO   .o
2701 tmpfile TMPS   .S
2702 tmpfile TMPSH  .sh
2703 tmpfile TMPV   .ver
2704
2705 unset -f mktemp
2706
2707 chmod +x $TMPE
2708
2709 # make sure we can execute files in $TMPDIR
2710 cat > $TMPSH 2>> $logfile <<EOF
2711 #! /bin/sh
2712 EOF
2713 chmod +x $TMPSH >> $logfile 2>&1
2714 if ! $TMPSH >> $logfile 2>&1; then
2715     cat <<EOF
2716 Unable to create and execute files in $TMPDIR.  Set the TMPDIR environment
2717 variable to another directory and make sure that it is not mounted noexec.
2718 EOF
2719     die "Sanity test failed."
2720 fi
2721
2722 armasm_flags(){
2723     for flag; do
2724         case $flag in
2725             # Filter out MSVC cl.exe options from cflags that shouldn't
2726             # be passed to gas-preprocessor
2727             -M[TD]*)                                            ;;
2728             *)                  echo $flag                      ;;
2729         esac
2730    done
2731 }
2732
2733 ccc_flags(){
2734     for flag; do
2735         case $flag in
2736             -std=c99)           echo -c99                       ;;
2737             -mcpu=*)            echo -arch ${flag#*=}           ;;
2738             -mieee)             echo -ieee                      ;;
2739             -O*|-fast)          echo $flag                      ;;
2740             -fno-math-errno)    echo -assume nomath_errno       ;;
2741             -g)                 echo -g3                        ;;
2742             -Wall)              echo -msg_enable level2         ;;
2743             -Wno-pointer-sign)  echo -msg_disable ptrmismatch1  ;;
2744             -Wl,*)              echo $flag                      ;;
2745             -f*|-W*)                                            ;;
2746             *)                  echo $flag                      ;;
2747         esac
2748    done
2749 }
2750
2751 cparser_flags(){
2752     for flag; do
2753         case $flag in
2754             -Wno-switch)             echo -Wno-switch-enum ;;
2755             -Wno-format-zero-length) ;;
2756             -Wdisabled-optimization) ;;
2757             -Wno-pointer-sign)       echo -Wno-other ;;
2758             *)                       echo $flag ;;
2759         esac
2760     done
2761 }
2762
2763 msvc_common_flags(){
2764     for flag; do
2765         case $flag in
2766             # In addition to specifying certain flags under the compiler
2767             # specific filters, they must be specified here as well or else the
2768             # generic catch all at the bottom will print the original flag.
2769             -Wall)                ;;
2770             -std=c99)             ;;
2771             # Common flags
2772             -fomit-frame-pointer) ;;
2773             -g)                   echo -Z7 ;;
2774             -fno-math-errno)      ;;
2775             -fno-common)          ;;
2776             -fno-signed-zeros)    ;;
2777             -fPIC)                ;;
2778             -mthumb)              ;;
2779             -march=*)             ;;
2780             -lz)                  echo zlib.lib ;;
2781             -lavifil32)           echo vfw32.lib ;;
2782             -lavicap32)           echo vfw32.lib user32.lib ;;
2783             -l*)                  echo ${flag#-l}.lib ;;
2784             -L*)                  echo -libpath:${flag#-L} ;;
2785             *)                    echo $flag ;;
2786         esac
2787     done
2788 }
2789
2790 msvc_flags(){
2791     msvc_common_flags "$@"
2792     for flag; do
2793         case $flag in
2794             -Wall)                echo -W4 -wd4244 -wd4127 -wd4018 -wd4389     \
2795                                        -wd4146 -wd4057 -wd4204 -wd4706 -wd4305 \
2796                                        -wd4152 -wd4324 -we4013 -wd4100 -wd4214 \
2797                                        -wd4273 -wd4554 -wd4701 ;;
2798         esac
2799     done
2800 }
2801
2802 icl_flags(){
2803     msvc_common_flags "$@"
2804     for flag; do
2805         case $flag in
2806             # Despite what Intel's documentation says -Wall, which is supported
2807             # on Windows, does enable remarks so disable them here.
2808             -Wall)                echo $flag -Qdiag-disable:remark ;;
2809             -std=c99)             echo -Qstd=c99 ;;
2810         esac
2811     done
2812 }
2813
2814 pgi_flags(){
2815     for flag; do
2816         case $flag in
2817             -flto)                echo -Mipa=fast,libopt,libinline,vestigial ;;
2818             -fomit-frame-pointer) echo -Mnoframe ;;
2819             -g)                   echo -gopt ;;
2820             *)                    echo $flag ;;
2821         esac
2822     done
2823 }
2824
2825 suncc_flags(){
2826     for flag; do
2827         case $flag in
2828             -march=*|-mcpu=*)
2829                 case "${flag#*=}" in
2830                     native)                   echo -xtarget=native       ;;
2831                     v9|niagara)               echo -xarch=sparc          ;;
2832                     ultrasparc)               echo -xarch=sparcvis       ;;
2833                     ultrasparc3|niagara2)     echo -xarch=sparcvis2      ;;
2834                     i586|pentium)             echo -xchip=pentium        ;;
2835                     i686|pentiumpro|pentium2) echo -xtarget=pentium_pro  ;;
2836                     pentium3*|c3-2)           echo -xtarget=pentium3     ;;
2837                     pentium-m)          echo -xarch=sse2 -xchip=pentium3 ;;
2838                     pentium4*)          echo -xtarget=pentium4           ;;
2839                     prescott|nocona)    echo -xarch=sse3 -xchip=pentium4 ;;
2840                     *-sse3)             echo -xarch=sse3                 ;;
2841                     core2)              echo -xarch=ssse3 -xchip=core2   ;;
2842                     corei7)           echo -xarch=sse4_2 -xchip=nehalem  ;;
2843                     corei7-avx)       echo -xarch=avx -xchip=sandybridge ;;
2844                     amdfam10|barcelona|bdver*) echo -xarch=sse4_1        ;;
2845                     athlon-4|athlon-[mx]p)     echo -xarch=ssea          ;;
2846                     k8|opteron|athlon64|athlon-fx)
2847                                                echo -xarch=sse2a         ;;
2848                     athlon*)                   echo -xarch=pentium_proa  ;;
2849                 esac
2850                 ;;
2851             -std=c99)             echo -xc99              ;;
2852             -fomit-frame-pointer) echo -xregs=frameptr    ;;
2853             -fPIC)                echo -KPIC -xcode=pic32 ;;
2854             -W*,*)                echo $flag              ;;
2855             -f*-*|-W*|-mimpure-text)                      ;;
2856             -shared)              echo -G                 ;;
2857             *)                    echo $flag              ;;
2858         esac
2859     done
2860 }
2861
2862 tms470_flags(){
2863     for flag; do
2864         case $flag in
2865             -march=*|-mcpu=*)
2866                 case "${flag#*=}" in
2867                     armv7-a|cortex-a*)      echo -mv=7a8 ;;
2868                     armv7-r|cortex-r*)      echo -mv=7r4 ;;
2869                     armv7-m|cortex-m*)      echo -mv=7m3 ;;
2870                     armv6*|arm11*)          echo -mv=6   ;;
2871                     armv5*e|arm[79]*e*|arm9[24]6*|arm96*|arm102[26])
2872                                             echo -mv=5e  ;;
2873                     armv4*|arm7*|arm9[24]*) echo -mv=4   ;;
2874                 esac
2875                 ;;
2876             -mfpu=neon)     echo --float_support=vfpv3 --neon ;;
2877             -mfpu=vfp)      echo --float_support=vfpv2        ;;
2878             -mfpu=vfpv3)    echo --float_support=vfpv3        ;;
2879             -mfpu=vfpv3-d16) echo --float_support=vfpv3d16    ;;
2880             -msoft-float)   echo --float_support=vfplib       ;;
2881             -O[0-3]|-mf=*)  echo $flag                        ;;
2882             -g)             echo -g -mn                       ;;
2883             -pds=*)         echo $flag                        ;;
2884             -D*|-I*)        echo $flag                        ;;
2885             --gcc|--abi=*)  echo $flag                        ;;
2886             -me)            echo $flag                        ;;
2887         esac
2888     done
2889 }
2890
2891 probe_cc(){
2892     pfx=$1
2893     _cc=$2
2894
2895     unset _type _ident _cc_c _cc_e _cc_o _flags _cflags
2896     unset _ld_o _ldflags _ld_lib _ld_path
2897     unset _depflags _DEPCMD _DEPFLAGS
2898     _flags_filter=echo
2899
2900     if $_cc -v 2>&1 | grep -q '^gcc.*LLVM'; then
2901         _type=llvm_gcc
2902         gcc_extra_ver=$(expr "$($_cc --version | head -n1)" : '.*\((.*)\)')
2903         _ident="llvm-gcc $($_cc -dumpversion) $gcc_extra_ver"
2904         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2905         _cflags_speed='-O3'
2906         _cflags_size='-Os'
2907     elif $_cc -v 2>&1 | grep -qi ^gcc; then
2908         _type=gcc
2909         gcc_version=$($_cc --version | head -n1)
2910         gcc_basever=$($_cc -dumpversion)
2911         gcc_pkg_ver=$(expr "$gcc_version" : '[^ ]* \(([^)]*)\)')
2912         gcc_ext_ver=$(expr "$gcc_version" : ".*$gcc_pkg_ver $gcc_basever \\(.*\\)")
2913         _ident=$(cleanws "gcc $gcc_basever $gcc_pkg_ver $gcc_ext_ver")
2914         if ! $_cc -dumpversion | grep -q '^2\.'; then
2915             _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2916         fi
2917         _cflags_speed='-O3'
2918         _cflags_size='-Os'
2919     elif $_cc --version 2>/dev/null | grep -q ^icc; then
2920         _type=icc
2921         _ident=$($_cc --version | head -n1)
2922         _depflags='-MMD'
2923         _cflags_speed='-O3'
2924         _cflags_size='-Os'
2925         _cflags_noopt='-O1'
2926     elif $_cc -v 2>&1 | grep -q xlc; then
2927         _type=xlc
2928         _ident=$($_cc -qversion 2>/dev/null | head -n1)
2929         _cflags_speed='-O5'
2930         _cflags_size='-O5 -qcompact'
2931     elif $_cc -V 2>/dev/null | grep -q Compaq; then
2932         _type=ccc
2933         _ident=$($_cc -V | head -n1 | cut -d' ' -f1-3)
2934         _DEPFLAGS='-M'
2935         _cflags_speed='-fast'
2936         _cflags_size='-O1'
2937         _flags_filter=ccc_flags
2938     elif $_cc --vsn 2>/dev/null | grep -Eq "ARM (C/C\+\+ )?Compiler"; then
2939         test -d "$sysroot" || die "No valid sysroot specified."
2940         _type=armcc
2941         _ident=$($_cc --vsn | grep -i build | head -n1 | sed 's/.*: //')
2942         armcc_conf="$PWD/armcc.conf"
2943         $_cc --arm_linux_configure                 \
2944              --arm_linux_config_file="$armcc_conf" \
2945              --configure_sysroot="$sysroot"        \
2946              --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
2947              die "Error creating armcc configuration file."
2948         $_cc --vsn | grep -q RVCT && armcc_opt=rvct || armcc_opt=armcc
2949         _flags="--arm_linux_config_file=$armcc_conf --translate_gcc"
2950         as_default="${cross_prefix}gcc"
2951         _depflags='-MMD'
2952         _cflags_speed='-O3'
2953         _cflags_size='-Os'
2954     elif $_cc -version 2>/dev/null | grep -Eq 'TMS470|TI ARM'; then
2955         _type=tms470
2956         _ident=$($_cc -version | head -n1 | tr -s ' ')
2957         _flags='--gcc --abi=eabi -me'
2958         _cc_e='-ppl -fe=$@'
2959         _cc_o='-fe=$@'
2960         _depflags='-ppa -ppd=$(@:.o=.d)'
2961         _cflags_speed='-O3 -mf=5'
2962         _cflags_size='-O3 -mf=2'
2963         _flags_filter=tms470_flags
2964     elif $_cc -v 2>&1 | grep -q clang; then
2965         _type=clang
2966         _ident=$($_cc --version | head -n1)
2967         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2968         _cflags_speed='-O3'
2969         _cflags_size='-Os'
2970     elif $_cc -V 2>&1 | grep -q Sun; then
2971         _type=suncc
2972         _ident=$($_cc -V 2>&1 | head -n1 | cut -d' ' -f 2-)
2973         _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "1s,^.*: ,$@: ," -e "\$$!s,\$$, \\\," -e "1!s,^.*: , ," > $(@:.o=.d)'
2974         _DEPFLAGS='-xM1 -xc99'
2975         _ldflags='-std=c99'
2976         _cflags_speed='-O5'
2977         _cflags_size='-O5 -xspace'
2978         _flags_filter=suncc_flags
2979     elif $_cc -v 2>&1 | grep -q 'PathScale\|Path64'; then
2980         _type=pathscale
2981         _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
2982         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2983         _cflags_speed='-O2'
2984         _cflags_size='-Os'
2985         _flags_filter='filter_out -Wdisabled-optimization'
2986     elif $_cc -v 2>&1 | grep -q Open64; then
2987         _type=open64
2988         _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
2989         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2990         _cflags_speed='-O2'
2991         _cflags_size='-Os'
2992         _flags_filter='filter_out -Wdisabled-optimization|-Wtype-limits|-fno-signed-zeros'
2993     elif $_cc -V 2>&1 | grep -q Portland; then
2994         _type=pgi
2995         _ident="PGI $($_cc -V 2>&1 | awk '/^pgcc/ { print $2; exit }')"
2996         opt_common='-alias=ansi -Mdse -Mlre -Mpre'
2997         _cflags_speed="-O3 -Mautoinline -Munroll=c:4 $opt_common"
2998         _cflags_size="-O2 -Munroll=c:1 $opt_common"
2999         _cflags_noopt="-O1"
3000         _flags_filter=pgi_flags
3001     elif $_cc 2>&1 | grep -q 'Microsoft.*ARM.*Assembler'; then
3002         _type=armasm
3003         _ident=$($_cc | head -n1)
3004         # 4509: "This form of conditional instruction is deprecated"
3005         _flags="-nologo -ignore 4509"
3006         _flags_filter=armasm_flags
3007     elif $_cc 2>&1 | grep -q Microsoft; then
3008         _type=msvc
3009         _ident=$($_cc 2>&1 | head -n1)
3010         _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< 2>&1 | awk '\''/including/ { sub(/^.*file: */, ""); gsub(/\\/, "/"); if (!match($$0, / /)) print "$@:", $$0 }'\'' > $(@:.o=.d)'
3011         _DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -showIncludes -Zs'
3012         _cflags_speed="-O2"
3013         _cflags_size="-O1"
3014         if $_cc 2>&1 | grep -q Linker; then
3015             _ld_o='-out:$@'
3016         else
3017             _ld_o='-Fe$@'
3018         fi
3019         _cc_o='-Fo$@'
3020         _cc_e='-P -Fi$@'
3021         _flags_filter=msvc_flags
3022         _ld_lib='lib%.a'
3023         _ld_path='-libpath:'
3024         _flags='-nologo'
3025         _cflags='-D_USE_MATH_DEFINES -D_CRT_SECURE_NO_WARNINGS -Dinline=__inline -FIstdlib.h -Dstrtoll=_strtoi64'
3026         if [ $pfx = hostcc ]; then
3027             append _cflags -Dsnprintf=_snprintf
3028         fi
3029     elif $_cc 2>&1 | grep -q Intel; then
3030         _type=icl
3031         _ident=$($_cc 2>&1 | head -n1)
3032         _depflags='-QMMD -QMF$(@:.o=.d) -QMT$@'
3033         # Not only is O3 broken on 13.x+ but it is slower on all previous
3034         # versions (tested) as well.
3035         _cflags_speed="-O2"
3036         _cflags_size="-O1 -Oi" # -O1 without -Oi miscompiles stuff
3037         if $_cc 2>&1 | grep -q Linker; then
3038             _ld_o='-out:$@'
3039         else
3040             _ld_o='-Fe$@'
3041         fi
3042         _cc_o='-Fo$@'
3043         _cc_e='-P'
3044         _flags_filter=icl_flags
3045         _ld_lib='lib%.a'
3046         _ld_path='-libpath:'
3047         # -Qdiag-error to make icl error when seeing certain unknown arguments
3048         _flags='-nologo -Qdiag-error:4044,10157'
3049         # -Qvec- -Qsimd- to prevent miscompilation, -GS for consistency
3050         # with MSVC which enables it by default.
3051         _cflags='-D_USE_MATH_DEFINES -FIstdlib.h -Dstrtoll=_strtoi64 -Qms0 -Qvec- -Qsimd- -GS'
3052         if [ $pfx = hostcc ]; then
3053             append _cflags -Dsnprintf=_snprintf
3054         fi
3055     elif $_cc --version 2>/dev/null | grep -q ^cparser; then
3056         _type=cparser
3057         _ident=$($_cc --version | head -n1)
3058         _depflags='-MMD'
3059         _cflags_speed='-O4'
3060         _cflags_size='-O2'
3061         _flags_filter=cparser_flags
3062     fi
3063
3064     eval ${pfx}_type=\$_type
3065     eval ${pfx}_ident=\$_ident
3066 }
3067
3068 set_ccvars(){
3069     eval ${1}_C=\${_cc_c-\${${1}_C}}
3070     eval ${1}_E=\${_cc_e-\${${1}_E}}
3071     eval ${1}_O=\${_cc_o-\${${1}_O}}
3072
3073     if [ -n "$_depflags" ]; then
3074         eval ${1}_DEPFLAGS=\$_depflags
3075     else
3076         eval ${1}DEP=\${_DEPCMD:-\$DEPCMD}
3077         eval ${1}DEP_FLAGS=\${_DEPFLAGS:-\$DEPFLAGS}
3078         eval DEP${1}FLAGS=\$_flags
3079     fi
3080 }
3081
3082 probe_cc cc "$cc"
3083 cflags_filter=$_flags_filter
3084 cflags_speed=$_cflags_speed
3085 cflags_size=$_cflags_size
3086 cflags_noopt=$_cflags_noopt
3087 add_cflags $_flags $_cflags
3088 cc_ldflags=$_ldflags
3089 set_ccvars CC
3090
3091 probe_cc hostcc "$host_cc"
3092 host_cflags_filter=$_flags_filter
3093 add_host_cflags  $_flags $_cflags
3094 set_ccvars HOSTCC
3095
3096 test -n "$cc_type" && enable $cc_type ||
3097     warn "Unknown C compiler $cc, unable to select optimal CFLAGS"
3098
3099 : ${as_default:=$cc}
3100 : ${dep_cc_default:=$cc}
3101 : ${ld_default:=$cc}
3102 : ${host_ld_default:=$host_cc}
3103 set_default ar as dep_cc ld host_ld
3104
3105 probe_cc as "$as"
3106 asflags_filter=$_flags_filter
3107 add_asflags $_flags $_cflags
3108 set_ccvars AS
3109
3110 probe_cc ld "$ld"
3111 ldflags_filter=$_flags_filter
3112 add_ldflags $_flags $_ldflags
3113 test "$cc_type" != "$ld_type" && add_ldflags $cc_ldflags
3114 LD_O=${_ld_o-$LD_O}
3115 LD_LIB=${_ld_lib-$LD_LIB}
3116 LD_PATH=${_ld_path-$LD_PATH}
3117
3118 probe_cc hostld "$host_ld"
3119 host_ldflags_filter=$_flags_filter
3120 add_host_ldflags $_flags $_ldflags
3121 HOSTLD_O=${_ld_o-$HOSTLD_O}
3122
3123 if [ -z "$CC_DEPFLAGS" ] && [ "$dep_cc" != "$cc" ]; then
3124     probe_cc depcc "$dep_cc"
3125     CCDEP=${_DEPCMD:-$DEPCMD}
3126     CCDEP_FLAGS=${_DEPFLAGS:=$DEPFLAGS}
3127     DEPCCFLAGS=$_flags
3128 fi
3129
3130 if $ar 2>&1 | grep -q Microsoft; then
3131     arflags="-nologo"
3132     ar_o='-out:$@'
3133 elif $ar 2>&1 | grep -q 'Texas Instruments'; then
3134     arflags="rq"
3135     ar_o='$@'
3136 elif $ar 2>&1 | grep -q 'Usage: ar.*-X.*any'; then
3137     arflags='-Xany -r -c'
3138     ar_o='$@'
3139 else
3140     arflags="rc"
3141     ar_o='$@'
3142 fi
3143
3144 add_cflags $extra_cflags
3145 add_asflags $extra_cflags
3146
3147 if test -n "$sysroot"; then
3148     case "$cc_type" in
3149         gcc|llvm_gcc|clang)
3150             add_cppflags --sysroot="$sysroot"
3151             add_ldflags --sysroot="$sysroot"
3152         ;;
3153         tms470)
3154             add_cppflags -I"$sysinclude"
3155             add_ldflags  --sysroot="$sysroot"
3156         ;;
3157     esac
3158 fi
3159
3160 if test "$cpu" = host; then
3161     enabled cross_compile &&
3162         die "--cpu=host makes no sense when cross-compiling."
3163
3164     case "$cc_type" in
3165         gcc|llvm_gcc)
3166             check_native(){
3167                 $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
3168                 sed -n "/cc1.*$1=/{
3169                             s/.*$1=\\([^ ]*\\).*/\\1/
3170                             p
3171                             q
3172                         }" $TMPE
3173             }
3174             cpu=$(check_native -march || check_native -mcpu)
3175         ;;
3176     esac
3177
3178     test "${cpu:-host}" = host &&
3179         die "--cpu=host not supported with compiler $cc"
3180 fi
3181
3182 # Deal with common $arch aliases
3183 case "$arch" in
3184     aarch64|arm64)
3185         arch="aarch64"
3186     ;;
3187     arm*)
3188         arch="arm"
3189     ;;
3190     mips*|IP*)
3191         arch="mips"
3192     ;;
3193     parisc*|hppa*)
3194         arch="parisc"
3195     ;;
3196     "Power Macintosh"|ppc*|powerpc*)
3197         arch="ppc"
3198     ;;
3199     s390|s390x)
3200         arch="s390"
3201     ;;
3202     sh4|sh)
3203         arch="sh4"
3204     ;;
3205     sun4u|sparc*)
3206         arch="sparc"
3207     ;;
3208     tilegx|tile-gx)
3209         arch="tilegx"
3210     ;;
3211     i[3-6]86|i86pc|BePC|x86pc|x86_64|amd64)
3212         arch="x86"
3213     ;;
3214 esac
3215
3216 is_in $arch $ARCH_LIST || warn "unknown architecture $arch"
3217 enable $arch
3218
3219 # Add processor-specific flags
3220 if enabled aarch64; then
3221
3222     case $cpu in
3223         armv*)
3224             cpuflags="-march=$cpu"
3225         ;;
3226         *)
3227             cpuflags="-mcpu=$cpu"
3228         ;;
3229     esac
3230
3231 elif enabled alpha; then
3232
3233     cpuflags="-mcpu=$cpu"
3234
3235 elif enabled arm; then
3236
3237     check_arm_arch() {
3238         check_cpp_condition stddef.h \
3239             "defined __ARM_ARCH_${1}__ || defined __TARGET_ARCH_${2:-$1}" \
3240             $cpuflags
3241     }
3242
3243     probe_arm_arch() {
3244         if   check_arm_arch 4;        then echo armv4;
3245         elif check_arm_arch 4T;       then echo armv4t;
3246         elif check_arm_arch 5;        then echo armv5;
3247         elif check_arm_arch 5E;       then echo armv5e;
3248         elif check_arm_arch 5T;       then echo armv5t;
3249         elif check_arm_arch 5TE;      then echo armv5te;
3250         elif check_arm_arch 5TEJ;     then echo armv5te;
3251         elif check_arm_arch 6;        then echo armv6;
3252         elif check_arm_arch 6J;       then echo armv6j;
3253         elif check_arm_arch 6K;       then echo armv6k;
3254         elif check_arm_arch 6Z;       then echo armv6z;
3255         elif check_arm_arch 6ZK;      then echo armv6zk;
3256         elif check_arm_arch 6T2;      then echo armv6t2;
3257         elif check_arm_arch 7;        then echo armv7;
3258         elif check_arm_arch 7A  7_A;  then echo armv7-a;
3259         elif check_arm_arch 7S;       then echo armv7-a;
3260         elif check_arm_arch 7R  7_R;  then echo armv7-r;
3261         elif check_arm_arch 7M  7_M;  then echo armv7-m;
3262         elif check_arm_arch 7EM 7E_M; then echo armv7-m;
3263         elif check_arm_arch 8A  8_A;  then echo armv8-a;
3264         fi
3265     }
3266
3267     [ "$cpu" = generic ] && cpu=$(probe_arm_arch)
3268
3269     case $cpu in
3270         armv*)
3271             cpuflags="-march=$cpu"
3272             subarch=$(echo $cpu | sed 's/[^a-z0-9]//g')
3273         ;;
3274         *)
3275             cpuflags="-mcpu=$cpu"
3276             case $cpu in
3277                 cortex-a*)                               subarch=armv7a  ;;
3278                 cortex-r*)                               subarch=armv7r  ;;
3279                 cortex-m*)                 enable thumb; subarch=armv7m  ;;
3280                 arm11*)                                  subarch=armv6   ;;
3281                 arm[79]*e*|arm9[24]6*|arm96*|arm102[26]) subarch=armv5te ;;
3282                 armv4*|arm7*|arm9[24]*)                  subarch=armv4   ;;
3283                 *)                             subarch=$(probe_arm_arch) ;;
3284             esac
3285         ;;
3286     esac
3287
3288     case "$subarch" in
3289         armv5t*)    enable fast_clz                ;;
3290         armv[6-8]*) enable fast_clz fast_unaligned ;;
3291     esac
3292
3293 elif enabled avr32; then
3294
3295     case $cpu in
3296         ap7[02]0[0-2])
3297             subarch="avr32_ap"
3298             cpuflags="-mpart=$cpu"
3299         ;;
3300         ap)
3301             subarch="avr32_ap"
3302             cpuflags="-march=$cpu"
3303         ;;
3304         uc3[ab]*)
3305             subarch="avr32_uc"
3306             cpuflags="-mcpu=$cpu"
3307         ;;
3308         uc)
3309             subarch="avr32_uc"
3310             cpuflags="-march=$cpu"
3311         ;;
3312     esac
3313
3314 elif enabled bfin; then
3315
3316     cpuflags="-mcpu=$cpu"
3317
3318 elif enabled mips; then
3319
3320     cpuflags="-march=$cpu"
3321
3322 elif enabled ppc; then
3323
3324     disable ldbrx
3325
3326     case $(tolower $cpu) in
3327         601|ppc601|powerpc601)
3328             cpuflags="-mcpu=601"
3329             disable altivec
3330         ;;
3331         603*|ppc603*|powerpc603*)
3332             cpuflags="-mcpu=603"
3333             disable altivec
3334         ;;
3335         604*|ppc604*|powerpc604*)
3336             cpuflags="-mcpu=604"
3337             disable altivec
3338         ;;
3339         g3|75*|ppc75*|powerpc75*)
3340             cpuflags="-mcpu=750"
3341             disable altivec
3342         ;;
3343         g4|745*|ppc745*|powerpc745*)
3344             cpuflags="-mcpu=7450"
3345             disable vsx
3346         ;;
3347         74*|ppc74*|powerpc74*)
3348             cpuflags="-mcpu=7400"
3349             disable vsx
3350         ;;
3351         g5|970|ppc970|powerpc970)
3352             cpuflags="-mcpu=970"
3353             disable vsx
3354         ;;
3355         power[3-6]*)
3356             cpuflags="-mcpu=$cpu"
3357             disable vsx
3358         ;;
3359         power[7-8]*)
3360             cpuflags="-mcpu=$cpu"
3361             enable ldbrx
3362         ;;
3363         cell)
3364             cpuflags="-mcpu=cell"
3365             enable ldbrx
3366             disable vsx
3367         ;;
3368         e500mc)
3369             cpuflags="-mcpu=e500mc"
3370             disable altivec
3371         ;;
3372         e500v2)
3373             cpuflags="-mcpu=8548 -mhard-float -mfloat-gprs=double"
3374             disable altivec
3375             disable dcbzl
3376         ;;
3377         e500)
3378             cpuflags="-mcpu=8540 -mhard-float"
3379             disable altivec
3380             disable dcbzl
3381         ;;
3382     esac
3383
3384 elif enabled sparc; then
3385
3386     case $cpu in
3387         cypress|f93[04]|tsc701|sparcl*|supersparc|hypersparc|niagara|v[789])
3388             cpuflags="-mcpu=$cpu"
3389         ;;
3390         ultrasparc*|niagara[234])
3391             cpuflags="-mcpu=$cpu"
3392         ;;
3393     esac
3394
3395 elif enabled x86; then
3396
3397     case $cpu in
3398         i[345]86|pentium)
3399             cpuflags="-march=$cpu"
3400             disable i686
3401             disable mmx
3402         ;;
3403         # targets that do NOT support nopl and conditional mov (cmov)
3404         pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
3405             cpuflags="-march=$cpu"
3406             disable i686
3407         ;;
3408         # targets that do support nopl and conditional mov (cmov)
3409         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*)
3410             cpuflags="-march=$cpu"
3411             enable i686
3412             enable fast_cmov
3413         ;;
3414         # targets that do support conditional mov but on which it's slow
3415         pentium4|pentium4m|prescott|nocona)
3416             cpuflags="-march=$cpu"
3417             enable i686
3418             disable fast_cmov
3419         ;;
3420     esac
3421
3422 fi
3423
3424 if [ "$cpu" != generic ]; then
3425     add_cflags  $cpuflags
3426     add_asflags $cpuflags
3427 fi
3428
3429 # compiler sanity check
3430 check_exec <<EOF
3431 int main(void){ return 0; }
3432 EOF
3433 if test "$?" != 0; then
3434     echo "$cc is unable to create an executable file."
3435     if test -z "$cross_prefix" && ! enabled cross_compile ; then
3436         echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
3437         echo "Only do this if you know what cross compiling means."
3438     fi
3439     die "C compiler test failed."
3440 fi
3441
3442 add_cppflags -D_ISOC99_SOURCE
3443 check_cflags -std=c99
3444 check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
3445 #include <stdlib.h>
3446 EOF
3447 check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
3448 #include <stdlib.h>
3449 EOF
3450
3451 add_host_cppflags -D_ISOC99_SOURCE
3452 check_host_cflags -std=c99
3453 check_host_cflags -Wall
3454 check_host_cflags -O3
3455
3456 check_64bit(){
3457     arch32=$1
3458     arch64=$2
3459     expr=$3
3460     check_code cc "" "int test[2*($expr) - 1]" &&
3461         subarch=$arch64 || subarch=$arch32
3462 }
3463
3464 case "$arch" in
3465     aarch64|alpha|ia64)
3466         spic=$shared
3467     ;;
3468     mips)
3469         check_64bit mips mips64 '_MIPS_SIM > 1'
3470         spic=$shared
3471     ;;
3472     parisc)
3473         check_64bit parisc parisc64 'sizeof(void *) > 4'
3474         spic=$shared
3475     ;;
3476     ppc)
3477         check_64bit ppc ppc64 'sizeof(void *) > 4'
3478         spic=$shared
3479     ;;
3480     s390)
3481         check_64bit s390 s390x 'sizeof(void *) > 4'
3482         spic=$shared
3483     ;;
3484     sparc)
3485         check_64bit sparc sparc64 'sizeof(void *) > 4'
3486         spic=$shared
3487     ;;
3488     x86)
3489         check_64bit x86_32 x86_64 'sizeof(void *) > 4'
3490         if test "$subarch" = "x86_64"; then
3491             spic=$shared
3492         fi
3493     ;;
3494 esac
3495
3496 enable $subarch
3497 enabled spic && enable_weak pic
3498
3499 # OS specific
3500 case $target_os in
3501     aix)
3502         SHFLAGS=-shared
3503         add_cppflags '-I\$(SRC_PATH)/compat/aix'
3504         enabled shared && add_ldflags -Wl,-brtl
3505         ;;
3506     android)
3507         disable symver
3508         enable section_data_rel_ro
3509         SLIB_INSTALL_NAME='$(SLIBNAME)'
3510         SLIB_INSTALL_LINKS=
3511         # soname not set on purpose
3512         SHFLAGS=-shared
3513         ;;
3514     haiku)
3515         prefix_default="/boot/common"
3516         network_extralibs="-lnetwork"
3517         host_libs=
3518         ;;
3519     sunos)
3520         SHFLAGS='-shared -Wl,-h,$$(@F)'
3521         enabled x86 && SHFLAGS="-mimpure-text $SHFLAGS"
3522         network_extralibs="-lsocket -lnsl"
3523         # When using suncc to build, the Solaris linker will mark
3524         # an executable with each instruction set encountered by
3525         # the Solaris assembler.  As our libraries contain their own
3526         # guards for processor-specific code, instead suppress
3527         # generation of the HWCAPS ELF section on Solaris x86 only.
3528         enabled_all suncc x86 &&
3529             echo "hwcap_1 = OVERRIDE;" > mapfile &&
3530             add_ldflags -Wl,-M,mapfile
3531         nm_default='nm -P -g'
3532         ;;
3533     netbsd)
3534         disable symver
3535         oss_indev_extralibs="-lossaudio"
3536         oss_outdev_extralibs="-lossaudio"
3537         ;;
3538     openbsd|bitrig)
3539         disable symver
3540         SHFLAGS='-shared'
3541         SLIB_INSTALL_NAME='$(SLIBNAME).$(LIBMAJOR).$(LIBMINOR)'
3542         SLIB_INSTALL_LINKS=
3543         oss_indev_extralibs="-lossaudio"
3544         oss_outdev_extralibs="-lossaudio"
3545         ;;
3546     dragonfly)
3547         disable symver
3548         ;;
3549     freebsd)
3550         ;;
3551     bsd/os)
3552         add_extralibs -lpoll -lgnugetopt
3553         ;;
3554     darwin)
3555         enabled ppc && add_asflags -force_cpusubtype_ALL
3556         SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR)'
3557         enabled x86_32 && append SHFLAGS -Wl,-read_only_relocs,suppress
3558         add_ldflags -Wl,-dynamic,-search_paths_first
3559         SLIBSUF=".dylib"
3560         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
3561         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
3562         objformat="macho"
3563         enabled x86_64 && objformat="macho64"
3564         enabled_any pic shared ||
3565             { check_cflags -mdynamic-no-pic && add_asflags -mdynamic-no-pic; }
3566         ;;
3567     mingw32*)
3568         if test $target_os = "mingw32ce"; then
3569             disable network
3570         else
3571             target_os=mingw32
3572         fi
3573         LIBTARGET=i386
3574         if enabled x86_64; then
3575             LIBTARGET="i386:x86-64"
3576         elif enabled arm; then
3577             LIBTARGET=arm-wince
3578         fi
3579         check_ldflags -Wl,--nxcompat
3580         check_ldflags -Wl,--dynamicbase
3581         shlibdir_default="$bindir_default"
3582         SLIBPREF=""
3583         SLIBSUF=".dll"
3584         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
3585         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
3586         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)'
3587         SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
3588         SLIB_INSTALL_LINKS=
3589         SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
3590         SLIB_INSTALL_EXTRA_LIB='lib$(SLIBNAME:$(SLIBSUF)=.dll.a) $(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
3591         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'
3592         objformat="win32"
3593         dlltool="${cross_prefix}dlltool"
3594         ranlib=:
3595         enable dos_paths
3596         ;;
3597     win32|win64)
3598         disable symver
3599         if enabled shared; then
3600             # Link to the import library instead of the normal static library
3601             # for shared libs.
3602             LD_LIB='%.lib'
3603             # Cannot build both shared and static libs with MSVC or icl.
3604             disable static
3605         fi
3606         shlibdir_default="$bindir_default"
3607         SLIBPREF=""
3608         SLIBSUF=".dll"
3609         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
3610         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
3611         SLIB_CREATE_DEF_CMD='$(SRC_PATH)/compat/windows/makedef $(SUBDIR)lib$(NAME).ver $(OBJS) > $$(@:$(SLIBSUF)=.def)'
3612         SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
3613         SLIB_INSTALL_LINKS=
3614         SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
3615         SLIB_INSTALL_EXTRA_LIB='$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
3616         SHFLAGS='-dll -def:$$(@:$(SLIBSUF)=.def) -implib:$(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib)'
3617         objformat="win32"
3618         ranlib=:
3619         enable dos_paths
3620         ;;
3621     cygwin*)
3622         target_os=cygwin
3623         shlibdir_default="$bindir_default"
3624         SLIBPREF="cyg"
3625         SLIBSUF=".dll"
3626         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
3627         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
3628         SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
3629         SLIB_INSTALL_LINKS=
3630         SLIB_INSTALL_EXTRA_LIB='lib$(FULLNAME).dll.a'
3631         SHFLAGS='-shared -Wl,--out-implib,$(SUBDIR)lib$(FULLNAME).dll.a'
3632         objformat="win32"
3633         enable dos_paths
3634         ;;
3635     *-dos|freedos|opendos)
3636         network_extralibs="-lsocket"
3637         objformat="coff"
3638         enable dos_paths
3639         add_cppflags -U__STRICT_ANSI__
3640         ;;
3641     linux)
3642         enable dv1394
3643         enable section_data_rel_ro
3644         ;;
3645     irix*)
3646         target_os=irix
3647         ranlib="echo ignoring ranlib"
3648         ;;
3649     os/2*)
3650         ln_s="cp -f"
3651         objformat="aout"
3652         add_cppflags -D_GNU_SOURCE
3653         add_ldflags -Zomf -Zbin-files -Zargs-wild -Zmap
3654         SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
3655         LIBSUF="_s.a"
3656         SLIBPREF=""
3657         SLIBSUF=".dll"
3658         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
3659         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
3660         SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
3661             echo PROTMODE >> $(SUBDIR)$(NAME).def; \
3662             echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
3663             echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
3664             echo EXPORTS >> $(SUBDIR)$(NAME).def; \
3665             emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
3666         SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
3667             emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
3668         SLIB_INSTALL_EXTRA_LIB='$(LIBPREF)$(NAME)_dll.a $(LIBPREF)$(NAME)_dll.lib'
3669         enable dos_paths
3670         ;;
3671     gnu/kfreebsd)
3672         add_cppflags -D_BSD_SOURCE
3673         ;;
3674     gnu)
3675         ;;
3676     qnx)
3677         add_cppflags -D_QNX_SOURCE
3678         network_extralibs="-lsocket"
3679         ;;
3680     symbian)
3681         SLIBSUF=".dll"
3682         enable dos_paths
3683         add_cflags --include=$sysinclude/gcce/gcce.h -fvisibility=default
3684         add_cppflags -D__GCCE__ -D__SYMBIAN32__ -DSYMBIAN_OE_POSIX_SIGNALS
3685         add_ldflags -Wl,--target1-abs,--no-undefined \
3686                     -Wl,-Ttext,0x80000,-Tdata,0x1000000 -shared \
3687                     -Wl,--entry=_E32Startup -Wl,-u,_E32Startup
3688         add_extralibs -l:eexe.lib -l:usrt2_2.lib -l:dfpaeabi.dso \
3689                       -l:drtaeabi.dso -l:scppnwdl.dso -lsupc++ -lgcc \
3690                       -l:libc.dso -l:libm.dso -l:euser.dso -l:libcrt0.lib
3691         ;;
3692     osf1)
3693         add_cppflags -D_OSF_SOURCE -D_POSIX_PII -D_REENTRANT
3694         ;;
3695     minix)
3696         ;;
3697     plan9)
3698         add_cppflags -D_C99_SNPRINTF_EXTENSION  \
3699                      -D_REENTRANT_SOURCE        \
3700                      -D_RESEARCH_SOURCE         \
3701                      -DFD_SETSIZE=96            \
3702                      -DHAVE_SOCK_OPTS
3703         add_compat strtod.o strtod=avpriv_strtod
3704         network_extralibs='-lbsd'
3705         exeobjs=compat/plan9/main.o
3706         cp_f='cp'
3707         ;;
3708     none)
3709         ;;
3710     *)
3711         die "Unknown OS '$target_os'."
3712         ;;
3713 esac
3714
3715 # determine libc flavour
3716
3717 probe_libc(){
3718     pfx=$1
3719     pfx_no_=${pfx%_}
3720     # uclibc defines __GLIBC__, so it needs to be checked before glibc.
3721     if check_${pfx}cpp_condition features.h "defined __UCLIBC__"; then
3722         eval ${pfx}libc_type=uclibc
3723         add_${pfx}cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
3724     elif check_${pfx}cpp_condition features.h "defined __GLIBC__"; then
3725         eval ${pfx}libc_type=glibc
3726         add_${pfx}cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
3727     # MinGW headers can be installed on Cygwin, so check for newlib first.
3728     elif check_${pfx}cpp_condition newlib.h "defined _NEWLIB_VERSION"; then
3729         eval ${pfx}libc_type=newlib
3730         add_${pfx}cppflags -U__STRICT_ANSI__
3731     # MinGW64 is backwards compatible with MinGW32, so check for it first.
3732     elif check_${pfx}cpp_condition _mingw.h "defined __MINGW64_VERSION_MAJOR"; then
3733         eval ${pfx}libc_type=mingw64
3734         add_${pfx}cppflags -U__STRICT_ANSI__ -D__USE_MINGW_ANSI_STDIO=1
3735         eval test \$${pfx_no_}cc_type = "gcc" &&
3736             add_${pfx}cppflags -D__printf__=__gnu_printf__
3737     elif check_${pfx}cpp_condition _mingw.h "defined __MINGW_VERSION"  ||
3738          check_${pfx}cpp_condition _mingw.h "defined __MINGW32_VERSION"; then
3739         eval ${pfx}libc_type=mingw32
3740         check_${pfx}cpp_condition _mingw.h "__MINGW32_MAJOR_VERSION > 3 || \
3741             (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
3742             die "ERROR: MinGW32 runtime version must be >= 3.15."
3743         add_${pfx}cppflags -U__STRICT_ANSI__ -D__USE_MINGW_ANSI_STDIO=1
3744         eval test \$${pfx_no_}cc_type = "gcc" &&
3745             add_${pfx}cppflags -D__printf__=__gnu_printf__
3746     elif check_${pfx}cpp_condition crtversion.h "defined _VC_CRT_MAJOR_VERSION"; then
3747         eval ${pfx}libc_type=msvcrt
3748         # The MSVC 2010 headers (Win 7.0 SDK) set _WIN32_WINNT to
3749         # 0x601 by default unless something else is set by the user.
3750         # This can easily lead to us detecting functions only present
3751         # in such new versions and producing binaries requiring windows 7.0.
3752         # Therefore explicitly set the default to XP unless the user has
3753         # set something else on the command line.
3754         check_${pfx}cpp_condition stdlib.h "defined(_WIN32_WINNT)" ||
3755             add_${pfx}cppflags -D_WIN32_WINNT=0x0502
3756     elif check_${pfx}cpp_condition stddef.h "defined __KLIBC__"; then
3757         eval ${pfx}libc_type=klibc
3758     elif check_${pfx}cpp_condition sys/cdefs.h "defined __BIONIC__"; then
3759         eval ${pfx}libc_type=bionic
3760     elif check_${pfx}cpp_condition sys/brand.h "defined LABELED_BRAND_NAME"; then
3761         eval ${pfx}libc_type=solaris
3762         add_${pfx}cppflags -D__EXTENSIONS__ -D_XOPEN_SOURCE=600
3763     else
3764         eval ${pfx}libc_type=default
3765         add_${pfx}cppflags -D_DEFAULT_SOURCE
3766     fi
3767 }
3768
3769 probe_libc
3770 test -n "$libc_type" && enable libc_$libc_type
3771 probe_libc host_
3772 test -n "$host_libc_type" && enable host_libc_$host_libc_type
3773
3774 case $libc_type in
3775     bionic)
3776         add_compat strtod.o strtod=avpriv_strtod
3777         ;;
3778     msvcrt)
3779         add_compat strtod.o strtod=avpriv_strtod
3780         add_compat msvcrt/snprintf.o snprintf=avpriv_snprintf   \
3781                                      _snprintf=avpriv_snprintf  \
3782                                      vsnprintf=avpriv_vsnprintf
3783         ;;
3784 esac
3785
3786 # hacks for compiler/libc/os combinations
3787
3788 if enabled_all tms470 libc_glibc; then
3789     CPPFLAGS="-I${source_path}/compat/tms470 ${CPPFLAGS}"
3790     add_cppflags -D__USER_LABEL_PREFIX__=
3791     add_cppflags -D__builtin_memset=memset
3792     add_cppflags -D__gnuc_va_list=va_list -D_VA_LIST_DEFINED
3793     add_cflags   -pds=48    # incompatible redefinition of macro
3794 fi
3795
3796 if enabled_all ccc libc_glibc; then
3797     add_ldflags -Wl,-z,now  # calls to libots crash without this
3798 fi
3799
3800 check_compile_assert flt_lim "float.h limits.h" "DBL_MAX == (double)DBL_MAX" ||
3801     add_cppflags '-I\$(SRC_PATH)/compat/float'
3802
3803 esc(){
3804     echo "$*" | sed 's/%/%25/g;s/:/%3a/g'
3805 }
3806
3807 echo "config:$arch:$subarch:$cpu:$target_os:$(esc $cc_ident):$(esc $LIBAV_CONFIGURATION)" >config.fate
3808
3809 check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable_weak pic
3810
3811 set_default $PATHS_LIST
3812 set_default nm
3813
3814 # we need to build at least one lib type
3815 if ! enabled_any static shared; then
3816     cat <<EOF
3817 At least one library type must be built.
3818 Specify --enable-static to build the static libraries or --enable-shared to
3819 build the shared libraries as well. To only build the shared libraries specify
3820 --disable-static in addition to --enable-shared.
3821 EOF
3822     exit 1;
3823 fi
3824
3825 die_license_disabled() {
3826     enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
3827 }
3828
3829 die_license_disabled gpl libcdio
3830 die_license_disabled gpl libx264
3831 die_license_disabled gpl libx265
3832 die_license_disabled gpl libxavs
3833 die_license_disabled gpl libxvid
3834 die_license_disabled gpl x11grab
3835
3836 die_license_disabled nonfree libfaac
3837 die_license_disabled nonfree libfdk_aac
3838 die_license_disabled nonfree nvenc
3839 die_license_disabled nonfree openssl
3840
3841 die_license_disabled version3 libopencore_amrnb
3842 die_license_disabled version3 libopencore_amrwb
3843 die_license_disabled version3 libvo_aacenc
3844 die_license_disabled version3 libvo_amrwbenc
3845
3846 enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
3847
3848 disabled optimizations || check_cflags -fomit-frame-pointer
3849
3850 enable_weak_pic() {
3851     disabled pic && return
3852     enable pic
3853     add_cppflags -DPIC
3854     case "$target_os" in
3855     mingw*|cygwin*)
3856         ;;
3857     *)
3858         add_cflags -fPIC
3859         ;;
3860     esac
3861     add_asflags  -fPIC
3862 }
3863
3864 enabled pic && enable_weak_pic
3865
3866 check_cc <<EOF || die "Symbol mangling check failed."
3867 int ff_extern;
3868 EOF
3869 sym=$($nm $TMPO | awk '/ff_extern/{ print substr($0, match($0, /[^ \t]*ff_extern/)) }')
3870 extern_prefix=${sym%%ff_extern*}
3871
3872 check_cc <<EOF && enable_weak inline_asm
3873 void foo(void) { __asm__ volatile ("" ::); }
3874 EOF
3875
3876 _restrict=
3877 for restrict_keyword in restrict __restrict__ __restrict; do
3878     check_cc <<EOF && _restrict=$restrict_keyword && break
3879 void foo(char * $restrict_keyword p);
3880 EOF
3881 done
3882
3883 check_cc <<EOF && enable pragma_deprecated
3884 void foo(void) { _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") }
3885 EOF
3886
3887 check_cc <<EOF && enable attribute_packed
3888 struct { int x; } __attribute__((packed)) x;
3889 EOF
3890
3891 check_cc <<EOF && enable attribute_may_alias
3892 union { int x; } __attribute__((may_alias)) x;
3893 EOF
3894
3895 check_cc <<EOF || die "endian test failed"
3896 unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
3897 EOF
3898 od -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
3899
3900 check_gas() {
3901     log "check_gas using '$as' as AS"
3902     # :vararg is used on aarch64, arm and ppc altivec
3903     check_as <<EOF || return 1
3904 .macro m n, y:vararg=0
3905 \n: .int \y
3906 .endm
3907 m x
3908 EOF
3909     # .altmacro is only used in arm asm
3910     ! enabled arm || check_as <<EOF || return 1
3911 .altmacro
3912 EOF
3913     enable gnu_as
3914     return 0
3915 }
3916
3917 if enabled_any arm aarch64 || enabled_all ppc altivec && enabled asm; then
3918     nogas=:
3919     enabled_any arm aarch64 && nogas=die
3920     enabled_all ppc altivec && nogas=warn
3921     as_noop=-v
3922
3923     case $as_type in
3924         arm*) gaspp_as_type=armasm; as_noop=-h ;;
3925         gcc)  gaspp_as_type=gas ;;
3926         *)    gaspp_as_type=$as_type ;;
3927     esac
3928
3929     [ $target_os = "darwin" ] && gaspp_as_type="apple-$gaspp_as_type"
3930
3931     check_cmd gas-preprocessor.pl -arch $arch -as-type $gaspp_as_type -- $as $as_noop &&
3932         gas="gas-preprocessor.pl -arch $arch -as-type $gaspp_as_type -- $as"
3933
3934     if ! check_gas ; then
3935         as=${gas:=$as}
3936         check_gas || \
3937             $nogas "GNU assembler not found, install/update gas-preprocessor"
3938     fi
3939
3940     check_as <<EOF && enable as_func
3941 .func test
3942 .endfunc
3943 EOF
3944 fi
3945
3946 check_inline_asm inline_asm_labels '"1:\n"'
3947
3948 if enabled aarch64; then
3949     enabled armv8 && check_insn armv8 'prfm   pldl1strm, [x0]'
3950     # internal assembler in clang 3.3 does not support this instruction
3951     enabled neon && check_insn neon 'ext   v0.8B, v0.8B, v1.8B, #1'
3952     enabled vfp  && check_insn vfp  'fmadd d0,    d0,    d1,    d2'
3953
3954     map 'enabled_any ${v}_external ${v}_inline || disable $v' $ARCH_EXT_LIST_ARM
3955
3956 elif enabled alpha; then
3957
3958     check_cflags -mieee
3959
3960 elif enabled arm; then
3961
3962     check_cpp_condition stddef.h "defined __thumb__" && enable_weak thumb
3963     enabled thumb && check_cflags -mthumb || check_cflags -marm
3964
3965     if     check_cpp_condition stddef.h "defined __ARM_PCS_VFP"; then
3966         enable vfp_args
3967     elif ! check_cpp_condition stddef.h "defined __ARM_PCS || defined __SOFTFP__"; then
3968         case "${cross_prefix:-$cc}" in
3969             *hardfloat*)         enable vfp_args;   fpabi=vfp ;;
3970             *) check_ld <<EOF && enable vfp_args && fpabi=vfp || fpabi=soft ;;
3971 __asm__ (".eabi_attribute 28, 1");
3972 int main(void) { return 0; }
3973 EOF
3974         esac
3975         warn "Compiler does not indicate floating-point ABI, guessing $fpabi."
3976     fi
3977
3978     enabled armv5te && check_insn armv5te 'qadd r0, r0, r0'
3979     enabled armv6   && check_insn armv6   'sadd16 r0, r0, r0'
3980     enabled armv6t2 && check_insn armv6t2 'movt r0, #0'
3981     enabled neon    && check_insn neon    'vadd.i16 q0, q0, q0'
3982     enabled vfp     && check_insn vfp     'fadds s0, s0, s0'
3983     enabled vfpv3   && check_insn vfpv3   'vmov.f32 s0, #1.0'
3984
3985     [ $target_os = linux ] || [ $target_os = android ] ||
3986         map 'enabled_any ${v}_external ${v}_inline || disable $v' \
3987             $ARCH_EXT_LIST_ARM
3988
3989     check_inline_asm asm_mod_q '"add r0, %Q0, %R0" :: "r"((long long)0)'
3990
3991     check_as <<EOF && enable as_dn_directive
3992 ra .dn d0.i16
3993 .unreq ra
3994 EOF
3995
3996     # llvm's integrated assembler supports .object_arch from llvm 3.5
3997     [ "$objformat" = elf ] && check_as <<EOF && enable as_object_arch
3998 .object_arch armv4
3999 EOF
4000
4001     [ $target_os != win32 ] && enabled_all armv6t2 shared !pic && enable_weak_pic
4002
4003 elif enabled mips; then
4004
4005     check_inline_asm loongson '"dmult.g $1, $2, $3"'
4006
4007 elif enabled parisc; then
4008
4009     if enabled gcc; then
4010         case $($cc -dumpversion) in
4011             4.[3-8].*) check_cflags -fno-optimize-sibling-calls ;;
4012         esac
4013     fi
4014
4015 elif enabled ppc; then
4016
4017     enable local_aligned_8 local_aligned_16
4018
4019     check_inline_asm dcbzl     '"dcbzl 0, %0" :: "r"(0)'
4020     check_inline_asm ibm_asm   '"add 0, 0, 0"'
4021     check_inline_asm ppc4xx    '"maclhw r10, r11, r12"'
4022     check_inline_asm xform_asm '"lwzx %1, %y0" :: "Z"(*(int*)0), "r"(0)'
4023
4024     # AltiVec flags: The FSF version of GCC differs from the Apple version
4025     if enabled altivec; then
4026         check_cflags -maltivec -mabi=altivec &&
4027         { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
4028         check_cflags -faltivec
4029
4030         # check if our compiler supports Motorola AltiVec C API
4031         check_cc <<EOF || disable altivec
4032 $inc_altivec_h
4033 int main(void) {
4034     vector signed int v1 = (vector signed int) { 0 };
4035     vector signed int v2 = (vector signed int) { 1 };
4036     v1 = vec_add(v1, v2);
4037     return 0;
4038 }
4039 EOF
4040
4041         enabled altivec || warn "Altivec disabled, possibly missing --cpu flag"
4042     fi
4043
4044     if enabled vsx; then
4045         check_cflags -mvsx &&
4046         check_builtin vec_vsx_ld "altivec.h" "__builtin_vec_vsx_ld" || disable vsx
4047     fi
4048
4049     if enabled power8; then
4050         check_cpp_condition "altivec.h" "defined(_ARCH_PWR8)" || disable power8
4051     fi
4052
4053 elif enabled x86; then
4054
4055     check_builtin rdtsc    intrin.h   "__rdtsc()"
4056     check_builtin mm_empty mmintrin.h "_mm_empty()"
4057
4058     enable local_aligned_8 local_aligned_16
4059
4060     # check whether EBP is available on x86
4061     # As 'i' is stored on the stack, this program will crash
4062     # if the base pointer is used to access it because the
4063     # base pointer is cleared in the inline assembly code.
4064     check_exec_crash <<EOF && enable ebp_available
4065 volatile int i=0;
4066 __asm__ volatile ("xorl %%ebp, %%ebp" ::: "%ebp");
4067 return i;
4068 EOF
4069
4070     # check whether EBX is available on x86
4071     check_inline_asm ebx_available '""::"b"(0)' &&
4072         check_inline_asm ebx_available '"":::"%ebx"'
4073
4074     # check whether xmm clobbers are supported
4075     check_inline_asm xmm_clobbers '"":::"%xmm0"'
4076
4077     # check whether binutils is new enough to compile SSSE3/MMXEXT
4078     enabled ssse3  && check_inline_asm ssse3_inline  '"pabsw %xmm0, %xmm0"'
4079     enabled mmxext && check_inline_asm mmxext_inline '"pmaxub %mm0, %mm1"'
4080
4081     if ! disabled_any asm mmx yasm; then
4082         if check_cmd $yasmexe --version; then
4083             enabled x86_64 && yasm_extra="-m amd64"
4084             yasm_debug="-g dwarf2"
4085         elif check_cmd nasm -v; then
4086             yasmexe=nasm
4087             yasm_debug="-g -F dwarf"
4088             enabled x86_64 && test "$objformat" = elf && objformat=elf64
4089         fi
4090
4091         YASMFLAGS="-f $objformat $yasm_extra"
4092         enabled pic               && append YASMFLAGS "-DPIC"
4093         test -n "$extern_prefix"  && append YASMFLAGS "-DPREFIX"
4094         case "$objformat" in
4095             elf*) enabled debug && append YASMFLAGS $yasm_debug ;;
4096         esac
4097
4098         check_yasm "movbe ecx, [5]" && enable yasm ||
4099             die "yasm/nasm not found or too old. Use --disable-yasm for a crippled build."
4100         check_yasm "vpmacsdd xmm0, xmm1, xmm2, xmm3" || disable xop_external
4101         check_yasm "vfmadd132ps ymm0, ymm1, ymm2"    || disable fma3_external
4102         check_yasm "vfmaddps ymm0, ymm1, ymm2, ymm3" || disable fma4_external
4103         check_yasm "CPU amdnop" || disable cpunop
4104     fi
4105
4106     case "$cpu" in
4107         athlon*|opteron*|k8*|pentium|pentium-mmx|prescott|nocona|atom|geode)
4108             disable fast_clz
4109         ;;
4110     esac
4111
4112 fi
4113
4114 check_code cc arm_neon.h "int16x8_t test = vdupq_n_s16(0)" && enable intrinsics_neon
4115
4116 check_ldflags -Wl,--as-needed
4117
4118 if check_func dlopen; then
4119     ldl=
4120 elif check_func dlopen -ldl; then
4121     ldl=-ldl
4122 fi
4123
4124 if ! disabled network; then
4125     check_func getaddrinfo $network_extralibs
4126     check_func getservbyport $network_extralibs
4127     check_func inet_aton $network_extralibs
4128
4129     check_type netdb.h "struct addrinfo"
4130     check_type netinet/in.h "struct group_source_req" -D_BSD_SOURCE
4131     check_type netinet/in.h "struct ip_mreq_source" -D_BSD_SOURCE
4132     check_type netinet/in.h "struct ipv6_mreq" -D_DARWIN_C_SOURCE
4133     check_type poll.h "struct pollfd"
4134     check_type netinet/sctp.h "struct sctp_event_subscribe"
4135     check_struct "sys/types.h sys/socket.h" "struct sockaddr" sa_len
4136     check_type netinet/in.h "struct sockaddr_in6"
4137     check_type "sys/types.h sys/socket.h" "struct sockaddr_storage"
4138     check_type "sys/types.h sys/socket.h" socklen_t
4139
4140     # Prefer arpa/inet.h over winsock2
4141     if check_header arpa/inet.h ; then
4142         check_func closesocket
4143     elif check_header winsock2.h ; then
4144         check_func_headers winsock2.h closesocket -lws2 &&
4145             network_extralibs="-lws2" ||
4146         { check_func_headers winsock2.h closesocket -lws2_32 &&
4147             network_extralibs="-lws2_32"; } || disable winsock2_h network
4148         check_func_headers ws2tcpip.h getaddrinfo $network_extralibs
4149
4150         check_type ws2tcpip.h socklen_t
4151         check_type ws2tcpip.h "struct addrinfo"
4152         check_type ws2tcpip.h "struct group_source_req"
4153         check_type ws2tcpip.h "struct ip_mreq_source"
4154         check_type ws2tcpip.h "struct ipv6_mreq"
4155         check_type winsock2.h "struct pollfd"
4156         check_struct winsock2.h "struct sockaddr" sa_len
4157         check_type ws2tcpip.h "struct sockaddr_in6"
4158         check_type ws2tcpip.h "struct sockaddr_storage"
4159     else
4160         disable network
4161     fi
4162 fi
4163
4164 check_builtin atomic_cas_ptr atomic.h "void **ptr; void *oldval, *newval; atomic_cas_ptr(ptr, oldval, newval)"
4165 check_builtin machine_rw_barrier mbarrier.h "__machine_rw_barrier()"
4166 check_builtin MemoryBarrier windows.h "MemoryBarrier()"
4167 check_builtin sync_val_compare_and_swap "" "int *ptr; int oldval, newval; __sync_val_compare_and_swap(ptr, oldval, newval)"
4168
4169 check_func_headers malloc.h _aligned_malloc     && enable aligned_malloc
4170 check_func  ${malloc_prefix}memalign            && enable memalign
4171 check_func  ${malloc_prefix}posix_memalign      && enable posix_memalign
4172
4173 check_cpp_condition unistd.h "defined(_POSIX_MONOTONIC_CLOCK)" &&
4174     check_func_headers time.h clock_gettime || { check_func_headers time.h clock_gettime -lrt && add_extralibs -lrt && LIBRT="-lrt"; }
4175
4176 check_func  fcntl
4177 check_func  fork
4178 check_func  gethrtime
4179 check_func  getopt
4180 check_func  getrusage
4181 check_func  gettimeofday
4182 check_func  gmtime_r
4183 check_func  isatty
4184 check_func  localtime_r
4185 check_func  mach_absolute_time
4186 check_func  mkstemp
4187 check_func  mmap
4188 check_func  mprotect
4189 # Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
4190 check_func_headers time.h nanosleep || { check_func_headers time.h nanosleep -lrt && add_extralibs -lrt; }
4191 check_func  sched_getaffinity
4192 check_func  setrlimit
4193 check_func  strerror_r
4194 check_func  sysconf
4195 check_func  sysctl
4196 check_func  usleep
4197
4198 check_func_headers io.h setmode
4199 check_func_headers stdlib.h getenv
4200
4201 check_func_headers windows.h CoTaskMemFree -lole32
4202 check_func_headers windows.h GetProcessAffinityMask
4203 check_func_headers windows.h GetProcessTimes
4204 check_func_headers windows.h GetSystemTimeAsFileTime
4205 check_func_headers windows.h LoadLibrary
4206 check_func_headers windows.h MapViewOfFile
4207 check_func_headers windows.h SetConsoleTextAttribute
4208 check_func_headers windows.h Sleep
4209 check_func_headers windows.h VirtualAlloc
4210 check_struct windows.h "CONDITION_VARIABLE" Ptr
4211
4212 check_header direct.h
4213 check_header dlfcn.h
4214 check_header d3d11.h
4215 check_header dxva.h
4216 check_header dxva2api.h
4217 check_header io.h
4218 check_header mach/mach_time.h
4219 check_header malloc.h
4220 check_header poll.h
4221 check_header sys/mman.h
4222 check_header sys/param.h
4223 check_header sys/resource.h
4224 check_header sys/select.h
4225 check_header sys/time.h
4226 check_header sys/un.h
4227 check_header unistd.h
4228 check_header valgrind/valgrind.h
4229 check_header vdpau/vdpau.h
4230 check_header vdpau/vdpau_x11.h
4231 check_header VideoDecodeAcceleration/VDADecoder.h
4232 check_header windows.h
4233 check_header X11/extensions/XvMClib.h
4234
4235 check_lib2 "windows.h shellapi.h" CommandLineToArgvW -lshell32
4236 check_lib2 "windows.h wincrypt.h" CryptGenRandom -ladvapi32
4237 check_lib2 "windows.h psapi.h" GetProcessMemoryInfo -lpsapi
4238
4239 check_struct "sys/time.h sys/resource.h" "struct rusage" ru_maxrss
4240
4241 check_type "windows.h dxva.h" "DXVA_PicParams_HEVC"
4242 check_type "windows.h d3d11.h" "ID3D11VideoDecoder"
4243 check_type d3d9.h LPDIRECT3DSURFACE9
4244
4245 if ! disabled w32threads && ! enabled pthreads; then
4246     check_func_headers "windows.h process.h" _beginthreadex &&
4247         enable w32threads || disable w32threads
4248 fi
4249
4250 # check for some common methods of building with pthread support
4251 # do this before the optional library checks as some of them require pthreads
4252 if ! disabled pthreads && ! enabled w32threads; then
4253     enable pthreads
4254     if check_func pthread_join -pthread; then
4255         add_cflags -pthread
4256         add_extralibs -pthread
4257     elif check_func pthread_join -pthreads; then
4258         add_cflags -pthreads
4259         add_extralibs -pthreads
4260     elif check_func pthread_join -lpthreadGC2; then
4261         add_extralibs -lpthreadGC2
4262     elif check_lib pthread.h pthread_join -lpthread; then
4263         :
4264     elif ! check_func pthread_join; then
4265         disable pthreads
4266     fi
4267 fi
4268
4269 disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
4270 disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
4271
4272 check_lib math.h sin -lm && LIBM="-lm"
4273 enabled vaapi && require vaapi va/va.h vaInitialize -lva
4274
4275 atan2f_args=2
4276 ldexpf_args=2
4277 powf_args=2
4278
4279 for func in $MATH_FUNCS; do
4280     eval check_mathfunc $func \${${func}_args:-1}
4281 done
4282
4283 # these are off by default, so fail if requested and not available
4284 enabled avisynth          && { check_lib2 "avisynth/avisynth_c.h windows.h" LoadLibrary ||
4285                                check_lib2 "avxsynth/avxsynth_c.h dlfcn.h" dlopen -ldl   ||
4286                                die "ERROR: LoadLibrary/dlopen not found, or avisynth header not found"; }
4287 enabled frei0r            && { check_header frei0r.h || die "ERROR: frei0r.h header not found"; }
4288 enabled gnutls            && require_pkg_config gnutls gnutls/gnutls.h gnutls_global_init
4289 enabled libbs2b           && require_pkg_config libbs2b bs2b.h bs2b_open
4290 enabled libdcadec         && require libdcadec libdcadec/dca_context.h dcadec_context_create -ldcadec
4291 enabled libfaac           && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
4292 enabled libfdk_aac        && require_pkg_config fdk-aac "fdk-aac/aacenc_lib.h" aacEncOpen
4293 enabled libfontconfig     && require_pkg_config fontconfig "fontconfig/fontconfig.h" FcInit
4294 enabled libfreetype       && require_pkg_config freetype2 "ft2build.h FT_FREETYPE_H" FT_Init_FreeType
4295 enabled libgsm            && { for gsm_hdr in "gsm.h" "gsm/gsm.h"; do
4296                                    check_lib "${gsm_hdr}" gsm_create -lgsm && break;
4297                                done || die "ERROR: libgsm not found"; }
4298 enabled libilbc           && require libilbc ilbc.h WebRtcIlbcfix_InitDecode -lilbc
4299 enabled libmfx            && require_pkg_config libmfx "mfx/mfxvideo.h" MFXInit
4300 enabled libmp3lame        && require "libmp3lame >= 3.98.3" lame/lame.h lame_set_VBR_quality -lmp3lame
4301 enabled libopencore_amrnb && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb
4302 enabled libopencore_amrwb && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb
4303 enabled libopencv         && require_pkg_config opencv opencv/cv.h cvCreateImageHeader
4304 enabled libopenh264       && require_pkg_config openh264 wels/codec_api.h WelsGetCodecVersion
4305 enabled libopenjpeg       && { { check_header openjpeg.h && check_lib2 openjpeg.h opj_version -lopenjpeg -DOPJ_STATIC; } ||
4306                                { require_pkg_config libopenjpeg1 openjpeg.h opj_version -DOPJ_STATIC; } }
4307 enabled libopus           && require_pkg_config opus opus_multistream.h opus_multistream_decoder_create
4308 enabled libpulse          && require_pkg_config libpulse-simple pulse/simple.h pa_simple_new
4309 enabled librtmp           && require_pkg_config librtmp librtmp/rtmp.h RTMP_Socket
4310 enabled libschroedinger   && require_pkg_config schroedinger-1.0 schroedinger/schro.h schro_init
4311 enabled libspeex          && require_pkg_config speex speex/speex.h speex_decoder_init -lspeex
4312 enabled libtheora         && require libtheora theora/theoraenc.h th_info_init -ltheoraenc -ltheoradec -logg
4313 enabled libtwolame        && require libtwolame twolame.h twolame_init -ltwolame
4314 enabled libvo_aacenc      && require libvo_aacenc vo-aacenc/voAAC.h voGetAACEncAPI -lvo-aacenc
4315 enabled libvo_amrwbenc    && require libvo_amrwbenc vo-amrwbenc/enc_if.h E_IF_init -lvo-amrwbenc
4316 enabled libvorbis         && require libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
4317 enabled libvpx            && {
4318     enabled libvpx_vp8_decoder && { check_lib2 "vpx/vpx_decoder.h vpx/vp8dx.h" vpx_codec_dec_init_ver -lvpx ||
4319                                     die "ERROR: libvpx decoder version must be >=0.9.1"; }
4320     enabled libvpx_vp8_encoder && { check_lib2 "vpx/vpx_encoder.h vpx/vp8cx.h" "vpx_codec_enc_init_ver VPX_CQ" -lvpx ||
4321                                     die "ERROR: libvpx encoder version must be >=0.9.6"; }
4322     enabled libvpx_vp9_decoder && { check_lib2 "vpx/vpx_decoder.h vpx/vp8dx.h" "vpx_codec_vp9_dx" -lvpx || disable libvpx_vp9_decoder; }
4323     enabled libvpx_vp9_encoder && { check_lib2 "vpx/vpx_encoder.h vpx/vp8cx.h" "vpx_codec_vp9_cx" -lvpx || disable libvpx_vp9_encoder; } }
4324 enabled libwavpack        && require libwavpack wavpack/wavpack.h WavpackOpenFileOutput  -lwavpack
4325 enabled libwebp           && require_pkg_config libwebp webp/encode.h WebPGetEncoderVersion
4326 enabled libx264           && require_pkg_config x264 "stdint.h x264.h" x264_encoder_encode &&
4327                              { check_cpp_condition x264.h "X264_BUILD >= 118" ||
4328                                die "ERROR: libx264 version must be >= 0.118."; }
4329 enabled libx265           && require_pkg_config x265 x265.h x265_encoder_encode &&
4330                              { check_cpp_condition x265.h "X265_BUILD >= 57" ||
4331                                die "ERROR: libx265 version must be >= 57."; }
4332 enabled libxavs           && require libxavs xavs.h xavs_encoder_encode -lxavs
4333 enabled libxvid           && require libxvid xvid.h xvid_global -lxvidcore
4334 enabled mmal              && { check_lib interface/mmal/mmal.h mmal_port_connect -lmmal_core -lmmal_util -lmmal_vc_client -lbcm_host ||
4335                                 { ! enabled cross_compile && {
4336                                     add_cflags -isystem/opt/vc/include/ -isystem/opt/vc/include/interface/vmcs_host/linux -isystem/opt/vc/include/interface/vcos/pthreads -fgnu89-inline ;
4337                                     add_extralibs -L/opt/vc/lib/ -lmmal_core -lmmal_util -lmmal_vc_client -lbcm_host ;
4338                                     check_lib interface/mmal/mmal.h mmal_port_connect ; }
4339                                 check_lib interface/mmal/mmal.h mmal_port_connect ; } ||
4340                                die "ERROR: mmal not found"; }
4341 enabled openssl           && { check_lib openssl/ssl.h SSL_library_init -lssl -lcrypto ||
4342                                check_lib openssl/ssl.h SSL_library_init -lssl32 -leay32 ||
4343                                check_lib openssl/ssl.h SSL_library_init -lssl -lcrypto -lws2_32 -lgdi32 ||
4344                                die "ERROR: openssl not found"; }
4345
4346 if enabled gnutls; then
4347     { check_lib2 gmp.h mpz_export -lgmp && enable gmp; } ||
4348     { check_lib gcrypt.h gcry_mpi_new -lgcrypt && enable gcrypt; }
4349 fi
4350
4351 # libdc1394 check
4352 if enabled libdc1394; then
4353     { require_pkg_config libdc1394-2 dc1394/dc1394.h dc1394_new &&
4354         enable libdc1394_2; } ||
4355     { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
4356         enable libdc1394_1; } ||
4357     die "ERROR: No version of libdc1394 found "
4358 fi
4359
4360 if enabled nvenc; then
4361     check_header cuda.h || die "ERROR: cuda.h not found.";
4362     check_header nvEncodeAPI.h || die "ERROR: nvEncodeAPI.h not found.";
4363     check_cpp_condition nvEncodeAPI.h "NVENCAPI_MAJOR_VERSION >= 5" ||
4364         die "ERROR: NVENC API version 4 or older is not supported";
4365 fi
4366
4367 if check_pkg_config sdl SDL_events.h SDL_PollEvent; then
4368     check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
4369     check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) < 0x010300" $sdl_cflags &&
4370     enable sdl
4371 fi
4372
4373 pod2man --help     > /dev/null 2>&1 && enable pod2man   || disable pod2man
4374 texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
4375
4376 check_header linux/fb.h
4377 check_header linux/videodev2.h
4378 check_struct linux/videodev2.h "struct v4l2_frmivalenum" discrete
4379
4380 check_header sys/videoio.h
4381
4382 check_func_headers "windows.h vfw.h" capCreateCaptureWindow "$vfwcap_indev_extralibs"
4383 # check that WM_CAP_DRIVER_CONNECT is defined to the proper value
4384 # w32api 3.12 had it defined wrong
4385 check_cpp_condition vfw.h "WM_CAP_DRIVER_CONNECT > WM_USER" && enable vfwcap_defines
4386
4387 # check for ioctl_meteor.h, ioctl_bt848.h and alternatives
4388 { check_header dev/bktr/ioctl_meteor.h &&
4389   check_header dev/bktr/ioctl_bt848.h; } ||
4390 { check_header machine/ioctl_meteor.h &&
4391   check_header machine/ioctl_bt848.h; } ||
4392 { check_header dev/video/meteor/ioctl_meteor.h &&
4393   check_header dev/video/bktr/ioctl_bt848.h; } ||
4394 check_header dev/ic/bt8xx.h
4395
4396 check_header sndio.h
4397 check_header sys/soundcard.h
4398 check_header soundcard.h
4399
4400 enabled_any alsa_indev alsa_outdev &&
4401     check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
4402
4403 enabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack &&
4404     check_func jack_port_get_latency_range -ljack
4405
4406 enabled_any sndio_indev sndio_outdev && check_lib2 sndio.h sio_open -lsndio
4407
4408 if enabled libcdio; then
4409     check_lib2 "cdio/cdda.h cdio/paranoia.h" cdio_cddap_open -lcdio_paranoia -lcdio_cdda -lcdio ||
4410     check_lib2 "cdio/paranoia/cdda.h cdio/paranoia/paranoia.h" cdio_cddap_open -lcdio_paranoia -lcdio_cdda -lcdio ||
4411     die "ERROR: No usable libcdio/cdparanoia found"
4412 fi
4413
4414 check_lib X11/Xlib.h XOpenDisplay -lX11 && enable xlib
4415
4416 if enabled libxcb || enabled x11grab && ! disabled libxcb; then
4417     check_pkg_config xcb-shape xcb/shape.h xcb_shape_rectangles || {
4418         enabled libxcb && die "ERROR: libxcb not found";
4419     } && disable x11grab && enable libxcb
4420
4421     disabled libxcb_shm ||
4422         check_pkg_config xcb-shm xcb/shm.h xcb_shm_attach || {
4423             enabled libxcb_shm && die "ERROR: libxcb_shm not found";
4424         } && check_header sys/shm.h && enable libxcb_shm
4425
4426     disabled libxcb_xfixes ||
4427         check_pkg_config xcb-xfixes xcb/xfixes.h xcb_xfixes_get_cursor_image || {
4428             enabled libxcb_xfixes && die "ERROR: libxcb_xfixes not found";
4429         } && enable libxcb_xfixes
4430
4431     add_cflags "$xcb_event_cflags $xcb_shm_cflags $xcb_xfixes_cflags"
4432     add_extralibs "$xcb_event_libs $xcb_shm_libs $xcb_xfixes_libs"
4433 fi
4434
4435 if enabled x11grab; then
4436     enabled xlib || die "ERROR: Xlib not found"
4437     require Xext X11/extensions/XShm.h XShmCreateImage -lXext
4438     require Xfixes X11/extensions/Xfixes.h XFixesGetCursorImage -lXfixes
4439 fi
4440
4441 enabled d3d11_h &&
4442     check_cc <<EOF && enable d3d11_cobj
4443 #define _WIN32_WINNT 0x0600
4444 #define COBJMACROS
4445 #include <windows.h>
4446 #include <d3d11.h>
4447 int main(void) { ID3D11VideoDecoder *o = NULL; ID3D11VideoDecoder_Release(o); return 0; }
4448 EOF
4449
4450 enabled vaapi && enabled xlib &&
4451     check_lib2 "va/va.h va/va_x11.h" vaGetDisplay -lva -lva-x11 &&
4452     enable vaapi_x11
4453
4454 enabled vdpau &&
4455     check_cpp_condition vdpau/vdpau.h "defined VDP_DECODER_PROFILE_MPEG4_PART2_ASP" ||
4456     disable vdpau
4457
4458 enabled vdpau && enabled xlib &&
4459     check_func_headers "vdpau/vdpau.h vdpau/vdpau_x11.h" vdp_device_create_x11 -lvdpau &&
4460     prepend avconv_libs $($ldflags_filter "-lvdpau") &&
4461     enable vdpau_x11
4462
4463 enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel"
4464
4465 # add some useful compiler flags if supported
4466 check_cflags -Wdeclaration-after-statement
4467 check_cflags -Wall
4468 check_cflags -Wdisabled-optimization
4469 check_cflags -Wpointer-arith
4470 check_cflags -Wredundant-decls
4471 check_cflags -Wcast-qual
4472 check_cflags -Wwrite-strings
4473 check_cflags -Wtype-limits
4474 check_cflags -Wundef
4475 check_cflags -Wmissing-prototypes
4476 check_cflags -Wstrict-prototypes
4477 enabled extra_warnings && check_cflags -Winline
4478
4479 check_disable_warning(){
4480     warning_flag=-W${1#-Wno-}
4481     test_cflags $warning_flag && add_cflags $1
4482 }
4483
4484 check_disable_warning -Wno-parentheses
4485 check_disable_warning -Wno-switch
4486 check_disable_warning -Wno-format-zero-length
4487 check_disable_warning -Wno-pointer-sign
4488
4489 # add some linker flags
4490 check_ldflags -Wl,--warn-common
4491 check_ldflags -Wl,-rpath-link=libswscale:libavfilter:libavdevice:libavformat:libavcodec:libavutil:libavresample
4492 enabled rpath && add_ldexeflags -Wl,-rpath,$libdir
4493 test_ldflags -Wl,-Bsymbolic && append SHFLAGS -Wl,-Bsymbolic
4494
4495 # add some strip flags
4496 # -wN '..@*' is more selective than -x, but not available everywhere.
4497 check_stripflags -wN \'..@*\' || check_stripflags -x || strip='true'
4498
4499 enabled neon_clobber_test &&
4500     check_ldflags -Wl,--wrap,avcodec_open2              \
4501                   -Wl,--wrap,avcodec_decode_audio4      \
4502                   -Wl,--wrap,avcodec_decode_video2      \
4503                   -Wl,--wrap,avcodec_decode_subtitle2   \
4504                   -Wl,--wrap,avcodec_encode_audio2      \
4505                   -Wl,--wrap,avcodec_encode_video2      \
4506                   -Wl,--wrap,avcodec_encode_subtitle    \
4507                   -Wl,--wrap,avresample_convert ||
4508     disable neon_clobber_test
4509
4510 enabled xmm_clobber_test &&
4511     check_ldflags -Wl,--wrap,avcodec_open2              \
4512                   -Wl,--wrap,avcodec_decode_audio4      \
4513                   -Wl,--wrap,avcodec_decode_video2      \
4514                   -Wl,--wrap,avcodec_decode_subtitle2   \
4515                   -Wl,--wrap,avcodec_encode_audio2      \
4516                   -Wl,--wrap,avcodec_encode_video2      \
4517                   -Wl,--wrap,avcodec_encode_subtitle    \
4518                   -Wl,--wrap,avresample_convert         \
4519                   -Wl,--wrap,sws_scale ||
4520     disable xmm_clobber_test
4521
4522 echo "X{};" > $TMPV
4523 if test_ldflags -Wl,--version-script,$TMPV; then
4524     append SHFLAGS '-Wl,--version-script,\$(SUBDIR)lib\$(NAME).ver'
4525     check_cc <<EOF && enable symver_asm_label
4526 void ff_foo(void) __asm__ ("av_foo@VERSION");
4527 void ff_foo(void) { ${inline_asm+__asm__($quotes);} }
4528 EOF
4529     check_cc <<EOF && enable symver_gnu_asm
4530 __asm__(".symver ff_foo,av_foo@VERSION");
4531 void ff_foo(void) {}
4532 EOF
4533 fi
4534
4535 if [ -z "$optflags" ]; then
4536     if enabled small; then
4537         optflags=$cflags_size
4538     elif enabled optimizations; then
4539         optflags=$cflags_speed
4540     else
4541         optflags=$cflags_noopt
4542     fi
4543 fi
4544
4545 check_optflags(){
4546     check_cflags "$@"
4547     enabled lto && check_ldflags "$@"
4548 }
4549
4550
4551 if enabled lto; then
4552     test "$cc_type" != "$ld_type" && die "LTO requires same compiler and linker"
4553     check_cflags  -flto
4554     check_ldflags -flto $cpuflags
4555 fi
4556
4557 check_optflags $optflags
4558 check_optflags -fno-math-errno
4559 check_optflags -fno-signed-zeros
4560
4561 if enabled icc; then
4562     # Just warnings, no remarks
4563     check_cflags -w1
4564     # -wd: Disable following warnings
4565     # 144, 167, 556: -Wno-pointer-sign
4566     # 1292: attribute "foo" ignored
4567     # 1419: external declaration in primary source file
4568     # 10006: ignoring unknown option -fno-signed-zeros
4569     # 10148: ignoring unknown option -Wno-parentheses
4570     # 10156: ignoring option '-W'; no argument required
4571     check_cflags -wd144,167,556,1292,1419,10006,10148,10156
4572     # 11030: Warning unknown option --as-needed
4573     # 10156: ignoring option '-export'; no argument required
4574     check_ldflags -wd10156,11030
4575     # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
4576     enable ebp_available
4577     if enabled x86_32; then
4578         icc_version=$($cc -dumpversion)
4579         test ${icc_version%%.*} -ge 11 &&
4580             check_cflags -falign-stack=maintain-16-byte ||
4581             disable aligned_stack
4582     fi
4583 elif enabled ccc; then
4584     # disable some annoying warnings
4585     add_cflags -msg_disable bitnotint
4586     add_cflags -msg_disable mixfuncvoid
4587     add_cflags -msg_disable nonstandcast
4588     add_cflags -msg_disable unsupieee
4589 elif enabled gcc; then
4590     check_optflags -fno-tree-vectorize
4591     check_cflags -Werror=implicit-function-declaration
4592     check_cflags -Werror=missing-prototypes
4593     check_cflags -Werror=return-type
4594     check_cflags -Werror=declaration-after-statement
4595     check_cflags -Werror=vla
4596     check_cflags -Werror=format-security
4597     check_cflags -fdiagnostics-color=auto
4598     enabled extra_warnings || check_disable_warning -Wno-maybe-uninitialized
4599 elif enabled llvm_gcc; then
4600     check_cflags -mllvm -stack-alignment=16
4601 elif enabled clang; then
4602     check_cflags -mllvm -stack-alignment=16
4603     check_cflags -Qunused-arguments
4604     check_cflags -Werror=implicit-function-declaration
4605     check_cflags -Werror=missing-prototypes
4606     check_cflags -Werror=return-type
4607 elif enabled cparser; then
4608     add_cflags -Wno-missing-variable-declarations
4609     add_cflags -Wno-empty-statement
4610 elif enabled armcc; then
4611     add_cflags -W${armcc_opt},--diag_suppress=4343 # hardfp compat
4612     add_cflags -W${armcc_opt},--diag_suppress=3036 # using . as system include dir
4613     # 2523: use of inline assembly is deprecated
4614     add_cflags -W${armcc_opt},--diag_suppress=2523
4615     add_cflags -W${armcc_opt},--diag_suppress=1207
4616     add_cflags -W${armcc_opt},--diag_suppress=1293 # assignment in condition
4617     add_cflags -W${armcc_opt},--diag_suppress=3343 # hardfp compat
4618     add_cflags -W${armcc_opt},--diag_suppress=167  # pointer sign
4619     add_cflags -W${armcc_opt},--diag_suppress=513  # pointer sign
4620 elif enabled tms470; then
4621     add_cflags -pds=824 -pds=837
4622     disable inline_asm
4623 elif enabled pathscale; then
4624     add_cflags -fstrict-overflow -OPT:wrap_around_unsafe_opt=OFF
4625 elif enabled_any msvc icl; then
4626     enabled x86_32 && disable aligned_stack
4627     enabled_all x86_32 debug && add_cflags -Oy-
4628     enabled debug && add_ldflags -debug
4629     enable pragma_deprecated
4630     if enabled icl; then
4631         # -Qansi-alias is basically -fstrict-aliasing, but does not work
4632         # (correctly) on icl 13.x.
4633         check_cpp_condition "windows.h" "__ICL < 1300 || __ICL >= 1400" &&
4634             add_cflags -Qansi-alias
4635         # icl will pass the inline asm tests but inline asm is currently
4636         # not supported (build will fail)
4637         disable inline_asm
4638     fi
4639     # msvcrt10 x64 incorrectly enables log2, only msvcrt12 (MSVC 2013) onwards actually has log2.
4640     check_cpp_condition crtversion.h "_VC_CRT_MAJOR_VERSION >= 12" || disable log2
4641 fi
4642
4643 case $as_type in
4644     clang)
4645         add_asflags -Qunused-arguments
4646     ;;
4647 esac
4648
4649 case $ld_type in
4650     clang)
4651         check_ldflags -Qunused-arguments
4652     ;;
4653 esac
4654
4655 case $target_os in
4656     osf1)
4657         enabled ccc && add_ldflags '-Wl,-expect_unresolved,*'
4658     ;;
4659     plan9)
4660         add_cppflags -Dmain=plan9_main
4661     ;;
4662 esac
4663
4664 enabled asm || { arch=c; disable $ARCH_LIST $ARCH_EXT_LIST; }
4665
4666 check_deps $CONFIG_LIST       \
4667            $CONFIG_EXTRA      \
4668            $HAVE_LIST         \
4669            $ALL_COMPONENTS    \
4670
4671 enabled_all d3d11va d3d11_cobj CoTaskMemFree &&
4672     prepend avconv_libs $($ldflags_filter "-lole32") &&
4673     enable d3d11va_lib
4674
4675 enabled_all dxva2 CoTaskMemFree &&
4676     prepend avconv_libs $($ldflags_filter "-lole32") &&
4677     enable dxva2_lib
4678
4679 ! enabled_any memalign posix_memalign aligned_malloc &&
4680     enabled simd_align_16 && enable memalign_hack
4681
4682 map 'enabled $v && intrinsics=${v#intrinsics_}' $INTRINSICS_LIST
4683
4684 for thread in $THREADS_LIST; do
4685     if enabled $thread; then
4686         test -n "$thread_type" &&
4687             die "ERROR: Only one thread type must be selected." ||
4688             thread_type="$thread"
4689     fi
4690 done
4691
4692 enabled zlib && add_cppflags -DZLIB_CONST
4693
4694 # conditional library dependencies, in linking order
4695 enabled movie_filter    && prepend avfilter_deps "avformat avcodec"
4696 enabled resample_filter && prepend avfilter_deps "avresample"
4697 enabled scale_filter    && prepend avfilter_deps "swscale"
4698
4699 enabled opus_decoder    && prepend avcodec_deps "avresample"
4700
4701 expand_deps(){
4702     lib_deps=${1}_deps
4703     eval "deps=\$$lib_deps"
4704     append $lib_deps $(map 'eval echo \$${v}_deps' $deps)
4705     unique $lib_deps
4706 }
4707
4708 map 'expand_deps $v' $LIBRARY_LIST
4709
4710 echo "install prefix            $prefix"
4711 echo "source path               $source_path"
4712 echo "C compiler                $cc"
4713 echo "C library                 $libc_type"
4714 if test "$host_cc" != "$cc"; then
4715     echo "host C compiler           $host_cc"
4716     echo "host C library            $host_libc_type"
4717 fi
4718 echo "ARCH                      $arch ($cpu)"
4719 if test "$build_suffix" != ""; then
4720     echo "build suffix              $build_suffix"
4721 fi
4722 if test "$extra_version" != ""; then
4723     echo "version string suffix     $extra_version"
4724 fi
4725 echo "big-endian                ${bigendian-no}"
4726 echo "runtime cpu detection     ${runtime_cpudetect-no}"
4727 if enabled x86; then
4728     echo "${yasmexe}                      ${yasm-no}"
4729     echo "MMX enabled               ${mmx-no}"
4730     echo "MMXEXT enabled            ${mmxext-no}"
4731     echo "3DNow! enabled            ${amd3dnow-no}"
4732     echo "3DNow! extended enabled   ${amd3dnowext-no}"
4733     echo "SSE enabled               ${sse-no}"
4734     echo "SSSE3 enabled             ${ssse3-no}"
4735     echo "AVX enabled               ${avx-no}"
4736     echo "XOP enabled               ${xop-no}"
4737     echo "FMA3 enabled              ${fma3-no}"
4738     echo "FMA4 enabled              ${fma4-no}"
4739     echo "i686 features enabled     ${i686-no}"
4740     echo "CMOV is fast              ${fast_cmov-no}"
4741     echo "EBX available             ${ebx_available-no}"
4742     echo "EBP available             ${ebp_available-no}"
4743 fi
4744 if enabled aarch64; then
4745     echo "NEON enabled              ${neon-no}"
4746     echo "VFP enabled               ${vfp-no}"
4747 fi
4748 if enabled arm; then
4749     echo "ARMv5TE enabled           ${armv5te-no}"
4750     echo "ARMv6 enabled             ${armv6-no}"
4751     echo "ARMv6T2 enabled           ${armv6t2-no}"
4752     echo "VFP enabled               ${vfp-no}"
4753     echo "NEON enabled              ${neon-no}"
4754 fi
4755 if enabled ppc; then
4756     echo "AltiVec enabled           ${altivec-no}"
4757     echo "VSX enabled               ${vsx-no}"
4758     echo "POWER8 enabled            ${power8-no}"
4759     echo "PPC 4xx optimizations     ${ppc4xx-no}"
4760     echo "dcbzl available           ${dcbzl-no}"
4761 fi
4762 echo "debug symbols             ${debug-no}"
4763 echo "optimize for size         ${small-no}"
4764 echo "optimizations             ${optimizations-no}"
4765 echo "static                    ${static-no}"
4766 echo "shared                    ${shared-no}"
4767 echo "new filter support        ${avfilter-no}"
4768 echo "network support           ${network-no}"
4769 echo "threading support         ${thread_type-no}"
4770 echo "safe bitstream reader     ${safe_bitstream_reader-no}"
4771 echo "SDL support               ${sdl-no}"
4772 test -n "$random_seed" &&
4773     echo "random seed               ${random_seed}"
4774 echo
4775
4776 echo "External libraries:"
4777 print_enabled '' $EXTERNAL_LIBRARY_LIST | print_3_columns
4778 echo
4779
4780 for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
4781     echo "Enabled ${type}s:"
4782     eval list=\$$(toupper $type)_LIST
4783     print_enabled '_*' $list | print_3_columns
4784     echo
4785 done
4786
4787 license="LGPL version 2.1 or later"
4788 if enabled nonfree; then
4789     license="nonfree and unredistributable"
4790 elif enabled gplv3; then
4791     license="GPL version 3 or later"
4792 elif enabled lgplv3; then
4793     license="LGPL version 3 or later"
4794 elif enabled gpl; then
4795     license="GPL version 2 or later"
4796 fi
4797
4798 echo "License: $license"
4799
4800 echo "Creating config.mak and config.h..."
4801
4802 test -e Makefile || echo "include $source_path/Makefile" > Makefile
4803
4804 config_files="$TMPH config.mak"
4805
4806 cat > config.mak <<EOF
4807 # Automatically generated by configure - do not modify!
4808 LIBAV_CONFIGURATION=$LIBAV_CONFIGURATION
4809 prefix=$prefix
4810 LIBDIR=\$(DESTDIR)$libdir
4811 SHLIBDIR=\$(DESTDIR)$shlibdir
4812 INCDIR=\$(DESTDIR)$incdir
4813 BINDIR=\$(DESTDIR)$bindir
4814 DATADIR=\$(DESTDIR)$datadir
4815 DOCDIR=\$(DESTDIR)$docdir
4816 MANDIR=\$(DESTDIR)$mandir
4817 SRC_PATH=$source_path
4818 CC_IDENT=$cc_ident
4819 ARCH=$arch
4820 INTRINSICS=$intrinsics
4821 CC=$cc
4822 AS=$as
4823 LD=$ld
4824 DEPCC=$dep_cc
4825 DEPCCFLAGS=$DEPCCFLAGS \$(CPPFLAGS)
4826 DEPAS=$as
4827 DEPASFLAGS=$DEPASFLAGS \$(CPPFLAGS)
4828 YASM=$yasmexe
4829 DEPYASM=$yasmexe
4830 AR=$ar
4831 ARFLAGS=$arflags
4832 AR_O=$ar_o
4833 RANLIB=$ranlib
4834 STRIP=$strip
4835 LN_S=$ln_s
4836 CPPFLAGS=$CPPFLAGS
4837 CFLAGS=$CFLAGS
4838 ASFLAGS=$ASFLAGS
4839 AS_C=$AS_C
4840 AS_O=$AS_O
4841 CC_C=$CC_C
4842 CC_E=$CC_E
4843 CC_O=$CC_O
4844 LD_O=$LD_O
4845 LD_LIB=$LD_LIB
4846 LD_PATH=$LD_PATH
4847 DLLTOOL=$dlltool
4848 LDFLAGS=$LDFLAGS
4849 LDEXEFLAGS=$LDEXEFLAGS
4850 SHFLAGS=$(echo $($ldflags_filter $SHFLAGS))