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