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