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