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