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