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