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