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