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