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