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