On2 VP7 decoder
[libav.git] / configure
1 #!/bin/sh
2 #
3 # Libav configure script
4 #
5 # Copyright (c) 2000-2002 Fabrice Bellard
6 # Copyright (c) 2005-2008 Diego Biurrun
7 # Copyright (c) 2005-2008 Mans Rullgard
8 #
9
10 # Prevent locale nonsense from breaking basic text processing.
11 LC_ALL=C
12 export LC_ALL
13
14 # make sure we are running under a compatible shell
15 # try to make this part work with most shells
16
17 try_exec(){
18 echo "Trying shell $1"
19 type "$1" > /dev/null 2>&1 && exec "$@"
20 }
21
22 unset foo
23 (: ${foo%%bar}) 2> /dev/null
24 E1="$?"
25
26 (: ${foo?}) 2> /dev/null
27 E2="$?"
28
29 if test "$E1" != 0 || test "$E2" = 0; then
30 echo "Broken shell detected. Trying alternatives."
31 export FF_CONF_EXEC
32 if test "0$FF_CONF_EXEC" -lt 1; then
33 FF_CONF_EXEC=1
34 try_exec bash "$0" "$@"
35 fi
36 if test "0$FF_CONF_EXEC" -lt 2; then
37 FF_CONF_EXEC=2
38 try_exec ksh "$0" "$@"
39 fi
40 if test "0$FF_CONF_EXEC" -lt 3; then
41 FF_CONF_EXEC=3
42 try_exec /usr/xpg4/bin/sh "$0" "$@"
43 fi
44 echo "No compatible shell script interpreter found."
45 echo "This configure script requires a POSIX-compatible shell"
46 echo "such as bash or ksh."
47 echo "THIS IS NOT A BUG IN LIBAV, DO NOT REPORT IT AS SUCH."
48 echo "Instead, install a working POSIX-compatible shell."
49 echo "Disabling this configure test will create a broken Libav."
50 if test "$BASH_VERSION" = '2.04.0(1)-release'; then
51 echo "This bash version ($BASH_VERSION) is broken on your platform."
52 echo "Upgrade to a later version if available."
53 fi
54 exit 1
55 fi
56
57 test -d /usr/xpg4/bin && PATH=/usr/xpg4/bin:$PATH
58
59 show_help(){
60 cat <<EOF
61 Usage: configure [options]
62 Options: [defaults in brackets after descriptions]
63
64 Help options:
65 --help print this message
66 --list-decoders show all available decoders
67 --list-encoders show all available encoders
68 --list-hwaccels show all available hardware accelerators
69 --list-demuxers show all available demuxers
70 --list-muxers show all available muxers
71 --list-parsers show all available parsers
72 --list-protocols show all available protocols
73 --list-bsfs show all available bitstream filters
74 --list-indevs show all available input devices
75 --list-outdevs show all available output devices
76 --list-filters show all available filters
77
78 Standard options:
79 --logfile=FILE log tests and output to FILE [config.log]
80 --disable-logging do not log configure debug information
81 --prefix=PREFIX install in PREFIX [$prefix]
82 --bindir=DIR install binaries in DIR [PREFIX/bin]
83 --datadir=DIR install data files in DIR [PREFIX/share/avconv]
84 --docdir=DIR install documentation in DIR [PREFIX/share/doc/libav]
85 --libdir=DIR install libs in DIR [PREFIX/lib]
86 --shlibdir=DIR install shared libs in DIR [PREFIX/lib]
87 --incdir=DIR install includes in DIR [PREFIX/include]
88 --mandir=DIR install man page in DIR [PREFIX/share/man]
89
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 Toolchain options:
216 --arch=ARCH select architecture [$arch]
217 --cpu=CPU select the minimum required CPU (affects
218 instruction selection, may crash on older CPUs)
219 --cross-prefix=PREFIX use PREFIX for compilation tools [$cross_prefix]
220 --enable-cross-compile assume a cross-compiler is used
221 --sysroot=PATH root of cross-build tree
222 --sysinclude=PATH location of cross-build system headers
223 --target-os=OS compiler targets OS [$target_os]
224 --target-exec=CMD command to run executables on target
225 --target-path=DIR path to view of build directory on target
226 --target-samples=DIR path to samples directory on target
227 --toolchain=NAME set tool defaults according to NAME
228 --pkg-config=PKGCONFIG use pkg-config tool PKGCONFIG [$pkg_config_default]
229 --nm=NM use nm tool
230 --ar=AR use archive tool AR [$ar_default]
231 --as=AS use assembler AS [$as_default]
232 --cc=CC use C compiler CC [$cc_default]
233 --dep-cc=DEPCC use dependency generator DEPCC [$cc_default]
234 --ld=LD use linker LD
235 --pkg-config=PKGCONF use pkg-config PKGCONF [$pkg_config_default]
236 --pkg-config-flags=FLAGS pass additional flags to pkgconf []
237 --host-cc=HOSTCC use host C compiler HOSTCC
238 --host-cflags=HCFLAGS use HCFLAGS when compiling for host
239 --host-cppflags=HCPPFLAGS use HCPPFLAGS when compiling for host
240 --host-ld=HOSTLD use host linker HOSTLD
241 --host-ldflags=HLDFLAGS use HLDFLAGS when linking for host
242 --host-libs=HLIBS use libs HLIBS when linking for host
243 --host-os=OS compiler host OS [$target_os]
244 --extra-cflags=ECFLAGS add ECFLAGS to CFLAGS [$CFLAGS]
245 --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]
246 --extra-libs=ELIBS add ELIBS [$ELIBS]
247 --extra-version=STRING version string suffix []
248 --optflags=OPTFLAGS override optimization-related compiler flags
249 --build-suffix=SUFFIX library name suffix []
250 --enable-pic build position-independent code
251 --enable-thumb compile for Thumb instruction set
252 --enable-lto use link-time optimization
253
254 Advanced options (experts only):
255 --malloc-prefix=PREFIX prefix malloc and related names with PREFIX
256 --disable-symver disable symbol versioning
257 --enable-hardcoded-tables use hardcoded tables instead of runtime generation
258 --disable-safe-bitstream-reader
259 disable buffer boundary checking in bitreaders
260 (faster, but may crash)
261 --enable-memalign-hack emulate memalign, interferes with memory debuggers
262 --enable-sram allow use of on-chip SRAM
263
264 Optimization options (experts only):
265 --disable-asm disable all assembler optimizations
266 --disable-altivec disable AltiVec optimizations
267 --disable-amd3dnow disable 3DNow! optimizations
268 --disable-amd3dnowext disable 3DNow! extended optimizations
269 --disable-mmx disable MMX optimizations
270 --disable-mmxext disable MMXEXT optimizations
271 --disable-sse disable SSE optimizations
272 --disable-sse2 disable SSE2 optimizations
273 --disable-sse3 disable SSE3 optimizations
274 --disable-ssse3 disable SSSE3 optimizations
275 --disable-sse4 disable SSE4 optimizations
276 --disable-sse42 disable SSE4.2 optimizations
277 --disable-avx disable AVX optimizations
278 --disable-xop disable XOP optimizations
279 --disable-fma3 disable FMA3 optimizations
280 --disable-fma4 disable FMA4 optimizations
281 --disable-avx2 disable AVX2 optimizations
282 --disable-armv5te disable armv5te optimizations
283 --disable-armv6 disable armv6 optimizations
284 --disable-armv6t2 disable armv6t2 optimizations
285 --disable-vfp disable VFP optimizations
286 --disable-neon disable NEON optimizations
287 --disable-inline-asm disable use of inline assembler
288 --disable-yasm disable use of yasm assembler
289
290 Developer options (useful when working on Libav itself):
291 --disable-debug disable debugging symbols
292 --enable-debug=LEVEL set the debug level [$debuglevel]
293 --disable-optimizations disable compiler optimizations
294 --enable-extra-warnings enable more compiler warnings
295 --samples=PATH location of test samples for FATE, if not set use
296 \$LIBAV_SAMPLES at make invocation time.
297 --enable-neon-clobber-test check NEON registers for clobbering (should be
298 used only for debugging purposes)
299 --enable-xmm-clobber-test check XMM registers for clobbering (Win64-only;
300 should be used only for debugging purposes)
301 --enable-random randomly enable/disable components
302 --disable-random
303 --enable-random=LIST randomly enable/disable specific components or
304 --disable-random=LIST component groups. LIST is a comma-separated list
305 of NAME[:PROB] entries where NAME is a component
306 (group) and PROB the probability associated with
307 NAME (default 0.5).
308 --random-seed=VALUE seed value for --enable/disable-random
309
310 NOTE: Object files are built at the place where configure is launched.
311 EOF
312 exit 0
313 }
314
315 quotes='""'
316
317 log(){
318 echo "$@" >> $logfile
319 }
320
321 log_file(){
322 log BEGIN $1
323 pr -n -t $1 >> $logfile
324 log END $1
325 }
326
327 echolog(){
328 log "$@"
329 echo "$@"
330 }
331
332 warn(){
333 log "WARNING: $*"
334 WARNINGS="${WARNINGS}WARNING: $*\n"
335 }
336
337 die(){
338 echolog "$@"
339 cat <<EOF
340
341 If you think configure made a mistake, make sure you are using the latest
342 version from Git. If the latest version fails, report the problem to the
343 libav-tools@libav.org mailing list or IRC #libav on irc.freenode.net.
344 EOF
345 if disabled logging; then
346 cat <<EOF
347 Rerun configure with logging enabled (do not use --disable-logging), and
348 include the log this produces with your report.
349 EOF
350 else
351 cat <<EOF
352 Include the log file "$logfile" produced by configure as this will help
353 solving the problem.
354 EOF
355 fi
356 exit 1
357 }
358
359 # Avoid locale weirdness, besides we really just want to translate ASCII.
360 toupper(){
361 echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
362 }
363
364 tolower(){
365 echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
366 }
367
368 c_escape(){
369 echo "$*" | sed 's/["\\]/\\\0/g'
370 }
371
372 sh_quote(){
373 v=$(echo "$1" | sed "s/'/'\\\\''/g")
374 test "x$v" = "x${v#*[!A-Za-z0-9_/.+-]}" || v="'$v'"
375 echo "$v"
376 }
377
378 cleanws(){
379 echo "$@" | sed 's/^ *//;s/ */ /g;s/ *$//'
380 }
381
382 filter(){
383 pat=$1
384 shift
385 for v; do
386 eval "case $v in $pat) echo $v ;; esac"
387 done
388 }
389
390 filter_out(){
391 pat=$1
392 shift
393 for v; do
394 eval "case $v in $pat) ;; *) echo $v ;; esac"
395 done
396 }
397
398 map(){
399 m=$1
400 shift
401 for v; do eval $m; done
402 }
403
404 add_suffix(){
405 suffix=$1
406 shift
407 for v; do echo ${v}${suffix}; done
408 }
409
410 set_all(){
411 value=$1
412 shift
413 for var in $*; do
414 eval $var=$value
415 done
416 }
417
418 set_weak(){
419 value=$1
420 shift
421 for var; do
422 eval : \${$var:=$value}
423 done
424 }
425
426 sanitize_var_name(){
427 echo $@ | sed 's/[^A-Za-z0-9_]/_/g'
428 }
429
430 set_safe(){
431 var=$1
432 shift
433 eval $(sanitize_var_name "$var")='$*'
434 }
435
436 get_safe(){
437 eval echo \$$(sanitize_var_name "$1")
438 }
439
440 pushvar(){
441 for pvar in $*; do
442 eval level=\${${pvar}_level:=0}
443 eval ${pvar}_${level}="\$$pvar"
444 eval ${pvar}_level=$(($level+1))
445 done
446 }
447
448 popvar(){
449 for pvar in $*; do
450 eval level=\${${pvar}_level:-0}
451 test $level = 0 && continue
452 eval level=$(($level-1))
453 eval $pvar="\${${pvar}_${level}}"
454 eval ${pvar}_level=$level
455 eval unset ${pvar}_${level}
456 done
457 }
458
459 enable(){
460 set_all yes $*
461 }
462
463 disable(){
464 set_all no $*
465 }
466
467 enable_weak(){
468 set_weak yes $*
469 }
470
471 disable_weak(){
472 set_weak no $*
473 }
474
475 enable_safe(){
476 for var; do
477 enable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
478 done
479 }
480
481 disable_safe(){
482 for var; do
483 disable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
484 done
485 }
486
487 do_enable_deep(){
488 for var; do
489 enabled $var && continue
490 eval sel="\$${var}_select"
491 eval sgs="\$${var}_suggest"
492 pushvar var sgs
493 enable_deep $sel
494 popvar sgs
495 enable_deep_weak $sgs
496 popvar var
497 done
498 }
499
500 enable_deep(){
501 do_enable_deep $*
502 enable $*
503 }
504
505 enable_deep_weak(){
506 for var; do
507 disabled $var && continue
508 pushvar var
509 do_enable_deep $var
510 popvar var
511 enable_weak $var
512 done
513 }
514
515 enabled(){
516 test "${1#!}" = "$1" && op== || op=!=
517 eval test "x\$${1#!}" $op "xyes"
518 }
519
520 disabled(){
521 test "${1#!}" = "$1" && op== || op=!=
522 eval test "x\$${1#!}" $op "xno"
523 }
524
525 enabled_all(){
526 for opt; do
527 enabled $opt || return 1
528 done
529 }
530
531 disabled_all(){
532 for opt; do
533 disabled $opt || return 1
534 done
535 }
536
537 enabled_any(){
538 for opt; do
539 enabled $opt && return 0
540 done
541 }
542
543 disabled_any(){
544 for opt; do
545 disabled $opt && return 0
546 done
547 return 1
548 }
549
550 set_default(){
551 for opt; do
552 eval : \${$opt:=\$${opt}_default}
553 done
554 }
555
556 is_in(){
557 value=$1
558 shift
559 for var in $*; do
560 [ $var = $value ] && return 0
561 done
562 return 1
563 }
564
565 do_check_deps(){
566 for cfg; do
567 cfg="${cfg#!}"
568 enabled ${cfg}_checking && die "Circular dependency for $cfg."
569 disabled ${cfg}_checking && continue
570 enable ${cfg}_checking
571 append allopts $cfg
572
573 eval dep_all="\$${cfg}_deps"
574 eval dep_any="\$${cfg}_deps_any"
575 eval dep_sel="\$${cfg}_select"
576 eval dep_sgs="\$${cfg}_suggest"
577 eval dep_ifa="\$${cfg}_if"
578 eval dep_ifn="\$${cfg}_if_any"
579
580 pushvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
581 do_check_deps $dep_all $dep_any $dep_sel $dep_sgs $dep_ifa $dep_ifn
582 popvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
583
584 [ -n "$dep_ifa" ] && { enabled_all $dep_ifa && enable_weak $cfg; }
585 [ -n "$dep_ifn" ] && { enabled_any $dep_ifn && enable_weak $cfg; }
586 enabled_all $dep_all || disable $cfg
587 enabled_any $dep_any || disable $cfg
588 disabled_any $dep_sel && disable $cfg
589
590 if enabled $cfg; then
591 enable_deep $dep_sel
592 enable_deep_weak $dep_sgs
593 fi
594
595 disable ${cfg}_checking
596 done
597 }
598
599 check_deps(){
600 unset allopts
601
602 do_check_deps "$@"
603
604 for cfg in $allopts; do
605 enabled $cfg || continue
606 eval dep_extralibs="\$${cfg}_extralibs"
607 test -n "$dep_extralibs" && add_extralibs $dep_extralibs
608 done
609 }
610
611 print_config(){
612 pfx=$1
613 files=$2
614 shift 2
615 map 'eval echo "$v \${$v:-no}"' "$@" |
616 awk "BEGIN { split(\"$files\", files) }
617 {
618 c = \"$pfx\" toupper(\$1);
619 v = \$2;
620 sub(/yes/, 1, v);
621 sub(/no/, 0, v);
622 for (f in files) {
623 file = files[f];
624 if (file ~ /\\.h\$/) {
625 printf(\"#define %s %d\\n\", c, v) >>file;
626 } else if (file ~ /\\.asm\$/) {
627 printf(\"%%define %s %d\\n\", c, v) >>file;
628 } else if (file ~ /\\.mak\$/) {
629 n = -v ? \"\" : \"!\";
630 printf(\"%s%s=yes\\n\", n, c) >>file;
631 }
632 }
633 }"
634 }
635
636 print_enabled(){
637 suf=$1
638 shift
639 for v; do
640 enabled $v && printf "%s\n" ${v%$suf};
641 done
642 }
643
644 append(){
645 var=$1
646 shift
647 eval "$var=\"\$$var $*\""
648 }
649
650 prepend(){
651 var=$1
652 shift
653 eval "$var=\"$* \$$var\""
654 }
655
656 add_cppflags(){
657 append CPPFLAGS "$@"
658 }
659
660 add_cflags(){
661 append CFLAGS $($cflags_filter "$@")
662 }
663
664 add_asflags(){
665 append ASFLAGS $($asflags_filter "$@")
666 }
667
668 add_ldflags(){
669 append LDFLAGS $($ldflags_filter "$@")
670 }
671
672 add_stripflags(){
673 append STRIPFLAGS "$@"
674 }
675
676 add_extralibs(){
677 prepend extralibs $($ldflags_filter "$@")
678 }
679
680 add_host_cppflags(){
681 append host_cppflags "$@"
682 }
683
684 add_host_cflags(){
685 append host_cflags $($host_cflags_filter "$@")
686 }
687
688 add_host_ldflags(){
689 append host_ldflags $($host_ldflags_filter "$@")
690 }
691
692 add_compat(){
693 append compat_objs $1
694 shift
695 map 'add_cppflags -D$v' "$@"
696 }
697
698 check_cmd(){
699 log "$@"
700 "$@" >> $logfile 2>&1
701 }
702
703 cc_o(){
704 eval printf '%s\\n' $CC_O
705 }
706
707 cc_e(){
708 eval printf '%s\\n' $CC_E
709 }
710
711 check_cc(){
712 log check_cc "$@"
713 cat > $TMPC
714 log_file $TMPC
715 check_cmd $cc $CPPFLAGS $CFLAGS "$@" $CC_C $(cc_o $TMPO) $TMPC
716 }
717
718 check_cpp(){
719 log check_cpp "$@"
720 cat > $TMPC
721 log_file $TMPC
722 check_cmd $cc $CPPFLAGS $CFLAGS "$@" $(cc_e $TMPO) $TMPC
723 }
724
725 as_o(){
726 eval printf '%s\\n' $AS_O
727 }
728
729 check_as(){
730 log check_as "$@"
731 cat > $TMPS
732 log_file $TMPS
733 check_cmd $as $CPPFLAGS $ASFLAGS "$@" $AS_C $(as_o $TMPO) $TMPS
734 }
735
736 check_inline_asm(){
737 log check_inline_asm "$@"
738 name="$1"
739 code="$2"
740 shift 2
741 disable $name
742 check_cc "$@" <<EOF && enable $name
743 void foo(void){ __asm__ volatile($code); }
744 EOF
745 }
746
747 check_insn(){
748 log check_insn "$@"
749 check_inline_asm ${1}_inline "\"$2\""
750 echo "$2" | check_as && enable ${1}_external || disable ${1}_external
751 }
752
753 check_yasm(){
754 log check_yasm "$@"
755 echo "$1" > $TMPS
756 log_file $TMPS
757 shift 1
758 check_cmd $yasmexe $YASMFLAGS "$@" -o $TMPO $TMPS
759 }
760
761 ld_o(){
762 eval printf '%s\\n' $LD_O
763 }
764
765 check_ld(){
766 log check_ld "$@"
767 flags=$(filter_out '-l*' "$@")
768 libs=$(filter '-l*' "$@")
769 check_cc $($cflags_filter $flags) || return
770 flags=$($ldflags_filter $flags)
771 libs=$($ldflags_filter $libs)
772 check_cmd $ld $LDFLAGS $flags $(ld_o $TMPE) $TMPO $libs $extralibs
773 }
774
775 print_include(){
776 hdr=$1
777 test "${hdr%.h}" = "${hdr}" &&
778 echo "#include $hdr" ||
779 echo "#include <$hdr>"
780 }
781
782 check_code(){
783 log check_code "$@"
784 check=$1
785 headers=$2
786 code=$3
787 shift 3
788 {
789 for hdr in $headers; do
790 print_include $hdr
791 done
792 echo "int main(void) { $code; return 0; }"
793 } | check_$check "$@"
794 }
795
796 check_cppflags(){
797 log check_cppflags "$@"
798 check_cc "$@" <<EOF && append CPPFLAGS "$@"
799 int x;
800 EOF
801 }
802
803 test_cflags(){
804 log test_cflags "$@"
805 set -- $($cflags_filter "$@")
806 check_cc "$@" <<EOF
807 int x;
808 EOF
809 }
810
811 check_cflags(){
812 log check_cflags "$@"
813 test_cflags "$@" && add_cflags "$@"
814 }
815
816 test_ldflags(){
817 log test_ldflags "$@"
818 check_ld "$@" <<EOF
819 int main(void){ return 0; }
820 EOF
821 }
822
823 check_ldflags(){
824 log check_ldflags "$@"
825 test_ldflags "$@" && add_ldflags "$@"
826 }
827
828 test_stripflags(){
829 log test_stripflags "$@"
830 # call check_cc to get a fresh TMPO
831 check_cc <<EOF
832 int main(void) { return 0; }
833 EOF
834 check_cmd $strip $STRIPFLAGS "$@" $TMPO
835 }
836
837 check_stripflags(){
838 log check_stripflags "$@"
839 test_stripflags "$@" && add_stripflags "$@"
840 }
841
842 check_header(){
843 log check_header "$@"
844 header=$1
845 shift
846 disable_safe $header
847 check_cpp "$@" <<EOF && enable_safe $header
848 #include <$header>
849 int x;
850 EOF
851 }
852
853 check_func(){
854 log check_func "$@"
855 func=$1
856 shift
857 disable $func
858 check_ld "$@" <<EOF && enable $func
859 extern int $func();
860 int main(void){ $func(); }
861 EOF
862 }
863
864 check_mathfunc(){
865 log check_mathfunc "$@"
866 func=$1
867 narg=$2
868 shift 2
869 test $narg = 2 && args="f, g" || args="f"
870 disable $func
871 check_ld "$@" <<EOF && enable $func
872 #include <math.h>
873 float foo(float f, float g) { return $func($args); }
874 int main(void){ return 0; }
875 EOF
876 }
877
878 check_func_headers(){
879 log check_func_headers "$@"
880 headers=$1
881 funcs=$2
882 shift 2
883 {
884 for hdr in $headers; do
885 print_include $hdr
886 done
887 for func in $funcs; do
888 echo "long check_$func(void) { return (long) $func; }"
889 done
890 echo "int main(void) { return 0; }"
891 } | check_ld "$@" && enable $funcs && enable_safe $headers
892 }
893
894 check_cpp_condition(){
895 log check_cpp_condition "$@"
896 header=$1
897 condition=$2
898 shift 2
899 check_cpp "$@" <<EOF
900 #include <$header>
901 #if !($condition)
902 #error "unsatisfied condition: $condition"
903 #endif
904 EOF
905 }
906
907 check_lib(){
908 log check_lib "$@"
909 header="$1"
910 func="$2"
911 shift 2
912 check_header $header && check_func $func "$@" && add_extralibs "$@"
913 }
914
915 check_lib2(){
916 log check_lib2 "$@"
917 headers="$1"
918 funcs="$2"
919 shift 2
920 check_func_headers "$headers" "$funcs" "$@" && add_extralibs "$@"
921 }
922
923 check_pkg_config(){
924 log check_pkg_config "$@"
925 pkg="$1"
926 headers="$2"
927 funcs="$3"
928 shift 3
929 check_cmd $pkg_config --exists --print-errors $pkg || return
930 pkg_cflags=$($pkg_config --cflags $pkg_config_flags $pkg)
931 pkg_libs=$($pkg_config --libs $pkg_config_flags $pkg)
932 check_func_headers "$headers" "$funcs" $pkg_cflags $pkg_libs "$@" &&
933 set_safe ${pkg}_cflags $pkg_cflags &&
934 set_safe ${pkg}_libs $pkg_libs
935 }
936
937 check_exec(){
938 check_ld "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
939 }
940
941 check_exec_crash(){
942 code=$(cat)
943
944 # exit() is not async signal safe. _Exit (C99) and _exit (POSIX)
945 # are safe but may not be available everywhere. Thus we use
946 # raise(SIGTERM) instead. The check is run in a subshell so we
947 # can redirect the "Terminated" message from the shell. SIGBUS
948 # is not defined by standard C so it is used conditionally.
949
950 (check_exec "$@") >> $logfile 2>&1 <<EOF
951 #include <signal.h>
952 static void sighandler(int sig){
953 raise(SIGTERM);
954 }
955 int foo(void){
956 $code
957 }
958 int (*func_ptr)(void) = foo;
959 int main(void){
960 signal(SIGILL, sighandler);
961 signal(SIGFPE, sighandler);
962 signal(SIGSEGV, sighandler);
963 #ifdef SIGBUS
964 signal(SIGBUS, sighandler);
965 #endif
966 return func_ptr();
967 }
968 EOF
969 }
970
971 check_type(){
972 log check_type "$@"
973 headers=$1
974 type=$2
975 shift 2
976 disable_safe "$type"
977 check_code cc "$headers" "$type v" "$@" && enable_safe "$type"
978 }
979
980 check_struct(){
981 log check_struct "$@"
982 headers=$1
983 struct=$2
984 member=$3
985 shift 3
986 disable_safe "${struct}_${member}"
987 check_code cc "$headers" "const void *p = &(($struct *)0)->$member" "$@" &&
988 enable_safe "${struct}_${member}"
989 }
990
991 check_builtin(){
992 log check_builtin "$@"
993 name=$1
994 headers=$2
995 builtin=$3
996 shift 3
997 disable "$name"
998 check_code ld "$headers" "$builtin" "$@" && enable "$name"
999 }
1000
1001 check_compile_assert(){
1002 log check_compile_assert "$@"
1003 name=$1
1004 headers=$2
1005 condition=$3
1006 shift 3
1007 disable "$name"
1008 check_code cc "$headers" "char c[2 * !!($condition) - 1]" "$@" && enable "$name"
1009 }
1010
1011 require(){
1012 name="$1"
1013 header="$2"
1014 func="$3"
1015 shift 3
1016 check_lib $header $func "$@" || die "ERROR: $name not found"
1017 }
1018
1019 require2(){
1020 name="$1"
1021 headers="$2"
1022 func="$3"
1023 shift 3
1024 check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
1025 }
1026
1027 require_pkg_config(){
1028 pkg="$1"
1029 check_pkg_config "$@" || die "ERROR: $pkg not found"
1030 add_cflags $(get_safe ${pkg}_cflags)
1031 add_extralibs $(get_safe ${pkg}_libs)
1032 }
1033
1034 hostcc_e(){
1035 eval printf '%s\\n' $HOSTCC_E
1036 }
1037
1038 hostcc_o(){
1039 eval printf '%s\\n' $HOSTCC_O
1040 }
1041
1042 check_host_cc(){
1043 log check_host_cc "$@"
1044 cat > $TMPC
1045 log_file $TMPC
1046 check_cmd $host_cc $host_cflags "$@" $HOSTCC_C $(hostcc_o $TMPO) $TMPC
1047 }
1048
1049 check_host_cpp(){
1050 log check_host_cpp "$@"
1051 cat > $TMPC
1052 log_file $TMPC
1053 check_cmd $host_cc $HOSTCPPFLAGS $HOSTCFLAGS "$@" $(hostcc_e $TMPO) $TMPC
1054 }
1055
1056 check_host_cppflags(){
1057 log check_host_cppflags "$@"
1058 check_host_cc "$@" <<EOF && append host_cppflags "$@"
1059 int x;
1060 EOF
1061 }
1062
1063 check_host_cflags(){
1064 log check_host_cflags "$@"
1065 set -- $($host_cflags_filter "$@")
1066 check_host_cc "$@" <<EOF && append host_cflags "$@"
1067 int x;
1068 EOF
1069 }
1070
1071 check_host_cpp_condition(){
1072 log check_host_cpp_condition "$@"
1073 header=$1
1074 condition=$2
1075 shift 2
1076 check_host_cpp "$@" <<EOF
1077 #include <$header>
1078 #if !($condition)
1079 #error "unsatisfied condition: $condition"
1080 #endif
1081 EOF
1082 }
1083
1084 apply(){
1085 file=$1
1086 shift
1087 "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
1088 }
1089
1090 cp_if_changed(){
1091 cmp -s "$1" "$2" && echo "$2 is unchanged" && return
1092 mkdir -p "$(dirname $2)"
1093 $cp_f "$1" "$2"
1094 }
1095
1096 # CONFIG_LIST contains configurable options, while HAVE_LIST is for
1097 # system-dependent things.
1098
1099 COMPONENT_LIST="
1100 bsfs
1101 decoders
1102 demuxers
1103 encoders
1104 filters
1105 hwaccels
1106 indevs
1107 muxers
1108 outdevs
1109 parsers
1110 protocols
1111 "
1112
1113 EXAMPLE_LIST="
1114 avcodec_example
1115 filter_audio_example
1116 metadata_example
1117 output_example
1118 transcode_aac_example
1119 "
1120
1121 EXTERNAL_LIBRARY_LIST="
1122 avisynth
1123 bzlib
1124 frei0r
1125 gnutls
1126 libcdio
1127 libdc1394
1128 libfaac
1129 libfdk_aac
1130 libfreetype
1131 libgsm
1132 libilbc
1133 libmp3lame
1134 libopencore_amrnb
1135 libopencore_amrwb
1136 libopencv
1137 libopenjpeg
1138 libopus
1139 libpulse
1140 librtmp
1141 libschroedinger
1142 libspeex
1143 libtheora
1144 libvo_aacenc
1145 libvo_amrwbenc
1146 libvorbis
1147 libvpx
1148 libwavpack
1149 libwebp
1150 libx264
1151 libx265
1152 libxavs
1153 libxvid
1154 openssl
1155 x11grab
1156 zlib
1157 "
1158
1159 FEATURE_LIST="
1160 gray
1161 hardcoded_tables
1162 runtime_cpudetect
1163 safe_bitstream_reader
1164 shared
1165 small
1166 sram
1167 static
1168 swscale_alpha
1169 "
1170
1171 HWACCEL_LIST="
1172 dxva2
1173 vaapi
1174 vda
1175 vdpau
1176 "
1177
1178 LIBRARY_LIST="
1179 avcodec
1180 avdevice
1181 avfilter
1182 avformat
1183 avresample
1184 avutil
1185 swscale
1186 "
1187
1188 LICENSE_LIST="
1189 gpl
1190 nonfree
1191 version3
1192 "
1193
1194 PROGRAM_LIST="
1195 avconv
1196 avplay
1197 avprobe
1198 avserver
1199 "
1200
1201 SUBSYSTEM_LIST="
1202 dct
1203 doc
1204 error_resilience
1205 fft
1206 lsp
1207 lzo
1208 mdct
1209 network
1210 rdft
1211 "
1212
1213 CONFIG_LIST="
1214 $COMPONENT_LIST
1215 $EXAMPLE_LIST
1216 $EXTERNAL_LIBRARY_LIST
1217 $FEATURE_LIST
1218 $HWACCEL_LIST
1219 $LICENSE_LIST
1220 $LIBRARY_LIST
1221 $PROGRAM_LIST
1222 $SUBSYSTEM_LIST
1223 memalign_hack
1224 neon_clobber_test
1225 pic
1226 pod2man
1227 texi2html
1228 thumb
1229 xmm_clobber_test
1230 "
1231
1232 THREADS_LIST="
1233 pthreads
1234 w32threads
1235 "
1236
1237 ATOMICS_LIST="
1238 atomics_gcc
1239 atomics_suncc
1240 atomics_win32
1241 "
1242
1243 ARCH_LIST="
1244 aarch64
1245 alpha
1246 arm
1247 avr32
1248 avr32_ap
1249 avr32_uc
1250 bfin
1251 ia64
1252 m68k
1253 mips
1254 mips64
1255 parisc
1256 ppc
1257 ppc64
1258 s390
1259 sh4
1260 sparc
1261 sparc64
1262 tilegx
1263 tilepro
1264 tomi
1265 x86
1266 x86_32
1267 x86_64
1268 "
1269
1270 ARCH_EXT_LIST_ARM="
1271 armv5te
1272 armv6
1273 armv6t2
1274 neon
1275 vfp
1276 vfpv3
1277 "
1278
1279 ARCH_EXT_LIST_X86_SIMD="
1280 amd3dnow
1281 amd3dnowext
1282 avx
1283 avx2
1284 fma3
1285 fma4
1286 mmx
1287 mmxext
1288 sse
1289 sse2
1290 sse3
1291 sse4
1292 sse42
1293 ssse3
1294 xop
1295 "
1296
1297 ARCH_EXT_LIST_PPC="
1298 altivec
1299 dcbzl
1300 ldbrx
1301 ppc4xx
1302 "
1303
1304 ARCH_EXT_LIST_X86="
1305 $ARCH_EXT_LIST_X86_SIMD
1306 cpunop
1307 i686
1308 "
1309
1310 ARCH_EXT_LIST="
1311 $ARCH_EXT_LIST_ARM
1312 $ARCH_EXT_LIST_PPC
1313 $ARCH_EXT_LIST_X86
1314 loongson
1315 vis
1316 "
1317
1318 ARCH_FEATURES="
1319 aligned_stack
1320 fast_64bit
1321 fast_clz
1322 fast_cmov
1323 local_aligned_8
1324 local_aligned_16
1325 "
1326
1327 BUILTIN_LIST="
1328 atomic_cas_ptr
1329 machine_rw_barrier
1330 MemoryBarrier
1331 mm_empty
1332 rdtsc
1333 sync_val_compare_and_swap
1334 "
1335 HAVE_LIST_CMDLINE="
1336 inline_asm
1337 symver
1338 yasm
1339 "
1340
1341 HAVE_LIST_PUB="
1342 bigendian
1343 fast_unaligned
1344 "
1345
1346 HEADERS_LIST="
1347 alsa_asoundlib_h
1348 altivec_h
1349 arpa_inet_h
1350 cdio_paranoia_h
1351 cdio_paranoia_paranoia_h
1352 dev_bktr_ioctl_bt848_h
1353 dev_bktr_ioctl_meteor_h
1354 dev_ic_bt8xx_h
1355 dev_video_bktr_ioctl_bt848_h
1356 dev_video_meteor_ioctl_meteor_h
1357 direct_h
1358 dlfcn_h
1359 dxva_h
1360 gsm_h
1361 io_h
1362 mach_mach_time_h
1363 machine_ioctl_bt848_h
1364 machine_ioctl_meteor_h
1365 malloc_h
1366 poll_h
1367 sndio_h
1368 soundcard_h
1369 sys_mman_h
1370 sys_param_h
1371 sys_resource_h
1372 sys_select_h
1373 sys_soundcard_h
1374 sys_time_h
1375 sys_un_h
1376 sys_videoio_h
1377 unistd_h
1378 windows_h
1379 winsock2_h
1380 "
1381
1382 MATH_FUNCS="
1383 atanf
1384 atan2f
1385 cbrtf
1386 cosf
1387 exp2
1388 exp2f
1389 expf
1390 isinf
1391 isnan
1392 ldexpf
1393 llrint
1394 llrintf
1395 log2
1396 log2f
1397 log10f
1398 lrint
1399 lrintf
1400 powf
1401 rint
1402 round
1403 roundf
1404 sinf
1405 trunc
1406 truncf
1407 "
1408
1409 SYSTEM_FUNCS="
1410 aligned_malloc
1411 closesocket
1412 CommandLineToArgvW
1413 CryptGenRandom
1414 dlopen
1415 fcntl
1416 flt_lim
1417 fork
1418 getaddrinfo
1419 gethrtime
1420 getopt
1421 GetProcessAffinityMask
1422 GetProcessMemoryInfo
1423 GetProcessTimes
1424 getrusage
1425 getservbyport
1426 GetSystemTimeAsFileTime
1427 gettimeofday
1428 inet_aton
1429 isatty
1430 jack_port_get_latency_range
1431 localtime_r
1432 mach_absolute_time
1433 MapViewOfFile
1434 memalign
1435 mkstemp
1436 mmap
1437 mprotect
1438 nanosleep
1439 posix_memalign
1440 sched_getaffinity
1441 SetConsoleTextAttribute
1442 setmode
1443 setrlimit
1444 Sleep
1445 strerror_r
1446 strptime
1447 sysconf
1448 sysctl
1449 usleep
1450 VirtualAlloc
1451 "
1452
1453 TOOLCHAIN_FEATURES="
1454 asm_mod_q
1455 attribute_may_alias
1456 attribute_packed
1457 ebp_available
1458 ebx_available
1459 gnu_as
1460 ibm_asm
1461 inline_asm_labels
1462 pragma_deprecated
1463 symver_asm_label
1464 symver_gnu_asm
1465 vfp_args
1466 xform_asm
1467 xmm_clobbers
1468 "
1469
1470 TYPES_LIST="
1471 socklen_t
1472 struct_addrinfo
1473 struct_group_source_req
1474 struct_ip_mreq_source
1475 struct_ipv6_mreq
1476 struct_pollfd
1477 struct_rusage_ru_maxrss
1478 struct_sockaddr_in6
1479 struct_sockaddr_sa_len
1480 struct_sockaddr_storage
1481 struct_v4l2_frmivalenum_discrete
1482 "
1483
1484 HAVE_LIST="
1485 $ARCH_EXT_LIST
1486 $(add_suffix _external $ARCH_EXT_LIST)
1487 $(add_suffix _inline $ARCH_EXT_LIST)
1488 $ARCH_FEATURES
1489 $ATOMICS_LIST
1490 $BUILTIN_LIST
1491 $HAVE_LIST_CMDLINE
1492 $HAVE_LIST_PUB
1493 $HEADERS_LIST
1494 $MATH_FUNCS
1495 $SYSTEM_FUNCS
1496 $THREADS_LIST
1497 $TOOLCHAIN_FEATURES
1498 $TYPES_LIST
1499 atomics_native
1500 dos_paths
1501 libc_msvcrt
1502 libdc1394_1
1503 libdc1394_2
1504 sdl
1505 threads
1506 vdpau_x11
1507 xlib
1508 "
1509
1510 # options emitted with CONFIG_ prefix but not available on the command line
1511 CONFIG_EXTRA="
1512 aandcttables
1513 ac3dsp
1514 audio_frame_queue
1515 cabac
1516 dsputil
1517 gcrypt
1518 golomb
1519 gplv3
1520 h263dsp
1521 h264chroma
1522 h264dsp
1523 h264pred
1524 h264qpel
1525 hpeldsp
1526 huffman
1527 intrax8
1528 lgplv3
1529 lpc
1530 mpegaudio
1531 mpegaudiodsp
1532 mpegvideo
1533 mpegvideoenc
1534 nettle
1535 rangecoder
1536 riffdec
1537 riffenc
1538 rtpdec
1539 rtpenc_chain
1540 sinewin
1541 tpeldsp
1542 videodsp
1543 vp3dsp
1544 "
1545
1546 CMDLINE_SELECT="
1547 $ARCH_EXT_LIST
1548 $CONFIG_LIST
1549 $HAVE_LIST_CMDLINE
1550 $THREADS_LIST
1551 asm
1552 cross_compile
1553 debug
1554 extra_warnings
1555 logging
1556 lto
1557 optimizations
1558 "
1559
1560 PATHS_LIST="
1561 bindir
1562 datadir
1563 docdir
1564 incdir
1565 libdir
1566 mandir
1567 prefix
1568 shlibdir
1569 "
1570
1571 CMDLINE_SET="
1572 $PATHS_LIST
1573 ar
1574 arch
1575 as
1576 build_suffix
1577 cc
1578 cpu
1579 cross_prefix
1580 dep_cc
1581 extra_version
1582 host_cc
1583 host_cflags
1584 host_ld
1585 host_ldflags
1586 host_libs
1587 host_os
1588 ld
1589 logfile
1590 malloc_prefix
1591 nm
1592 optflags
1593 pkg_config
1594 pkg_config_flags
1595 random_seed
1596 samples
1597 sysinclude
1598 sysroot
1599 target_exec
1600 target_os
1601 target_path
1602 target_samples
1603 toolchain
1604 "
1605
1606 CMDLINE_APPEND="
1607 extra_cflags
1608 host_cppflags
1609 "
1610
1611 # code dependency declarations
1612
1613 # architecture extensions
1614
1615 armv5te_deps="arm"
1616 armv6_deps="arm"
1617 armv6t2_deps="arm"
1618 neon_deps_any="aarch64 arm"
1619 vfp_deps_any="aarch64 arm"
1620 vfpv3_deps="vfp"
1621
1622 map 'eval ${v}_inline_deps=inline_asm' $ARCH_EXT_LIST_ARM
1623
1624 altivec_deps="ppc"
1625 ppc4xx_deps="ppc"
1626
1627 cpunop_deps="i686"
1628 x86_64_select="i686"
1629 x86_64_suggest="fast_cmov"
1630
1631 amd3dnow_deps="mmx"
1632 amd3dnowext_deps="amd3dnow"
1633 i686_deps="x86"
1634 mmx_deps="x86"
1635 mmxext_deps="mmx"
1636 sse_deps="mmxext"
1637 sse2_deps="sse"
1638 sse3_deps="sse2"
1639 ssse3_deps="sse3"
1640 sse4_deps="ssse3"
1641 sse42_deps="sse4"
1642 avx_deps="sse42"
1643 xop_deps="avx"
1644 fma3_deps="avx"
1645 fma4_deps="avx"
1646 avx2_deps="avx"
1647
1648 mmx_external_deps="yasm"
1649 mmx_inline_deps="inline_asm"
1650 mmx_suggest="mmx_external mmx_inline"
1651
1652 for ext in $(filter_out mmx $ARCH_EXT_LIST_X86_SIMD); do
1653 eval dep=\$${ext}_deps
1654 eval ${ext}_external_deps='"${dep}_external"'
1655 eval ${ext}_inline_deps='"${dep}_inline"'
1656 eval ${ext}_suggest='"${ext}_external ${ext}_inline"'
1657 done
1658
1659 aligned_stack_if_any="aarch64 ppc x86"
1660 fast_64bit_if_any="aarch64 alpha ia64 mips64 parisc64 ppc64 sparc64 x86_64"
1661 fast_clz_if_any="aarch64 alpha avr32 mips ppc x86"
1662 fast_unaligned_if_any="aarch64 ppc x86"
1663
1664 need_memalign="altivec neon sse"
1665
1666 # system capabilities
1667 log2_deps="!libc_msvcrt"
1668
1669 symver_if_any="symver_asm_label symver_gnu_asm"
1670
1671 # threading support
1672 atomics_gcc_if="sync_val_compare_and_swap"
1673 atomics_suncc_if="atomic_cas_ptr machine_rw_barrier"
1674 atomics_win32_if="MemoryBarrier"
1675 atomics_native_if_any="$ATOMICS_LIST"
1676 w32threads_deps="atomics_native"
1677 threads_if_any="$THREADS_LIST"
1678
1679 # subsystems
1680 dct_select="rdft"
1681 error_resilience_select="dsputil"
1682 mdct_select="fft"
1683 rdft_select="fft"
1684 mpegaudio_select="mpegaudiodsp"
1685 mpegaudiodsp_select="dct"
1686 mpegvideo_select="dsputil hpeldsp videodsp"
1687 mpegvideoenc_select="dsputil mpegvideo"
1688
1689 # decoders / encoders
1690 aac_decoder_select="mdct sinewin"
1691 aac_encoder_select="audio_frame_queue mdct sinewin"
1692 aac_latm_decoder_select="aac_decoder aac_latm_parser"
1693 ac3_decoder_select="mdct ac3dsp ac3_parser dsputil"
1694 ac3_encoder_select="mdct ac3dsp dsputil"
1695 ac3_fixed_encoder_select="mdct ac3dsp dsputil"
1696 aic_decoder_select="dsputil golomb"
1697 alac_encoder_select="lpc"
1698 als_decoder_select="dsputil"
1699 amrnb_decoder_select="lsp"
1700 amrwb_decoder_select="lsp"
1701 amv_decoder_select="sp5x_decoder"
1702 ape_decoder_select="dsputil"
1703 asv1_decoder_select="dsputil"
1704 asv1_encoder_select="dsputil"
1705 asv2_decoder_select="dsputil"
1706 asv2_encoder_select="dsputil"
1707 atrac1_decoder_select="mdct sinewin"
1708 atrac3_decoder_select="mdct"
1709 atrac3p_decoder_select="mdct sinewin"
1710 bink_decoder_select="dsputil hpeldsp"
1711 binkaudio_dct_decoder_select="mdct rdft dct sinewin"
1712 binkaudio_rdft_decoder_select="mdct rdft sinewin"
1713 cavs_decoder_select="dsputil golomb h264chroma videodsp"
1714 cllc_decoder_select="dsputil"
1715 comfortnoise_encoder_select="lpc"
1716 cook_decoder_select="dsputil mdct sinewin"
1717 cscd_decoder_select="lzo"
1718 cscd_decoder_suggest="zlib"
1719 dca_decoder_select="mdct"
1720 dnxhd_decoder_select="dsputil"
1721 dnxhd_encoder_select="aandcttables dsputil mpegvideoenc"
1722 dvvideo_decoder_select="dsputil"
1723 dvvideo_encoder_select="dsputil"
1724 dxa_decoder_deps="zlib"
1725 eac3_decoder_select="ac3_decoder"
1726 eac3_encoder_select="ac3_encoder"
1727 eamad_decoder_select="aandcttables dsputil mpegvideo"
1728 eatgq_decoder_select="aandcttables dsputil"
1729 eatqi_decoder_select="aandcttables dsputil error_resilience mpegvideo"
1730 exr_decoder_deps="zlib"
1731 ffv1_decoder_select="golomb rangecoder"
1732 ffv1_encoder_select="rangecoder"
1733 ffvhuff_decoder_select="huffyuv_decoder"
1734 ffvhuff_encoder_select="huffyuv_encoder"
1735 fic_decoder_select="dsputil golomb"
1736 flac_decoder_select="golomb"
1737 flac_encoder_select="dsputil golomb lpc"
1738 flashsv_decoder_deps="zlib"
1739 flashsv_encoder_deps="zlib"
1740 flashsv2_decoder_deps="zlib"
1741 flv_decoder_select="h263_decoder"
1742 flv_encoder_select="h263_encoder"
1743 fourxm_decoder_select="dsputil"
1744 fraps_decoder_select="dsputil huffman"
1745 g2m_decoder_deps="zlib"
1746 g2m_decoder_select="dsputil"
1747 h261_decoder_select="error_resilience mpegvideo"
1748 h261_encoder_select="aandcttables mpegvideoenc"
1749 h263_decoder_select="error_resilience h263_parser h263dsp mpegvideo"
1750 h263_encoder_select="aandcttables h263dsp mpegvideoenc"
1751 h263i_decoder_select="h263_decoder"
1752 h263p_encoder_select="h263_encoder"
1753 h264_decoder_select="cabac golomb h264chroma h264dsp h264pred h264qpel videodsp"
1754 h264_decoder_suggest="error_resilience"
1755 hevc_decoder_select="cabac dsputil golomb videodsp"
1756 huffyuv_decoder_select="dsputil"
1757 huffyuv_encoder_select="dsputil huffman"
1758 iac_decoder_select="imc_decoder"
1759 imc_decoder_select="dsputil fft mdct sinewin"
1760 indeo3_decoder_select="hpeldsp"
1761 interplay_video_decoder_select="hpeldsp"
1762 jpegls_decoder_select="golomb mjpeg_decoder"
1763 jpegls_encoder_select="golomb"
1764 jv_decoder_select="dsputil"
1765 lagarith_decoder_select="dsputil"
1766 ljpeg_encoder_select="aandcttables mpegvideoenc"
1767 loco_decoder_select="golomb"
1768 mdec_decoder_select="dsputil error_resilience mpegvideo"
1769 metasound_decoder_select="lsp mdct sinewin"
1770 mimic_decoder_select="dsputil hpeldsp"
1771 mjpeg_decoder_select="dsputil hpeldsp"
1772 mjpeg_encoder_select="aandcttables mpegvideoenc"
1773 mjpegb_decoder_select="mjpeg_decoder"
1774 mlp_decoder_select="mlp_parser"
1775 motionpixels_decoder_select="dsputil"
1776 mp1_decoder_select="mpegaudio"
1777 mp1float_decoder_select="mpegaudio"
1778 mp2_decoder_select="mpegaudio"
1779 mp2float_decoder_select="mpegaudio"
1780 mp3_decoder_select="mpegaudio"
1781 mp3adu_decoder_select="mpegaudio"
1782 mp3adufloat_decoder_select="mpegaudio"
1783 mp3float_decoder_select="mpegaudio"
1784 mp3on4_decoder_select="mpegaudio"
1785 mp3on4float_decoder_select="mpegaudio"
1786 mpc7_decoder_select="dsputil mpegaudiodsp"
1787 mpc8_decoder_select="mpegaudiodsp"
1788 mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h"
1789 mpeg_xvmc_decoder_select="mpeg2video_decoder"
1790 mpeg1video_decoder_select="error_resilience mpegvideo"
1791 mpeg1video_encoder_select="aandcttables mpegvideoenc"
1792 mpeg2video_decoder_select="error_resilience mpegvideo"
1793 mpeg2video_encoder_select="aandcttables mpegvideoenc"
1794 mpeg4_decoder_select="h263_decoder mpeg4video_parser"
1795 mpeg4_encoder_select="h263_encoder"
1796 msmpeg4v1_decoder_select="h263_decoder"
1797 msmpeg4v2_decoder_select="h263_decoder"
1798 msmpeg4v2_encoder_select="h263_encoder"
1799 msmpeg4v3_decoder_select="h263_decoder"
1800 msmpeg4v3_encoder_select="h263_encoder"
1801 mss2_decoder_select="error_resilience vc1_decoder"
1802 mxpeg_decoder_select="mjpeg_decoder"
1803 nellymoser_decoder_select="mdct sinewin"
1804 nellymoser_encoder_select="audio_frame_queue mdct sinewin"
1805 nuv_decoder_select="dsputil lzo"
1806 png_decoder_deps="zlib"
1807 png_encoder_deps="zlib"
1808 png_encoder_select="dsputil"
1809 prores_decoder_select="dsputil"
1810 prores_encoder_select="dsputil"
1811 qcelp_decoder_select="lsp"
1812 qdm2_decoder_select="mdct rdft mpegaudiodsp"
1813 ra_144_encoder_select="audio_frame_queue lpc"
1814 ralf_decoder_select="golomb"
1815 rv10_decoder_select="error_resilience h263_decoder h263dsp"
1816 rv10_encoder_select="h263_encoder"
1817 rv20_decoder_select="error_resilience h263_decoder h263dsp"
1818 rv20_encoder_select="h263_encoder"
1819 rv30_decoder_select="error_resilience golomb h264chroma h264pred h264qpel mpegvideo videodsp"
1820 rv40_decoder_select="error_resilience golomb h264chroma h264pred h264qpel mpegvideo videodsp"
1821 shorten_decoder_select="golomb"
1822 sipr_decoder_select="lsp"
1823 sp5x_decoder_select="mjpeg_decoder"
1824 svq1_decoder_select="hpeldsp"
1825 svq1_encoder_select="aandcttables dsputil hpeldsp mpegvideoenc"
1826 svq3_decoder_select="h264_decoder hpeldsp tpeldsp"
1827 svq3_decoder_suggest="zlib"
1828 tak_decoder_select="dsputil"
1829 theora_decoder_select="vp3_decoder"
1830 thp_decoder_select="mjpeg_decoder"
1831 tiff_decoder_suggest="zlib"
1832 tiff_encoder_suggest="zlib"
1833 truehd_decoder_select="mlp_decoder"
1834 truemotion2_decoder_select="dsputil"
1835 truespeech_decoder_select="dsputil"
1836 tscc_decoder_deps="zlib"
1837 twinvq_decoder_select="mdct lsp sinewin"
1838 utvideo_decoder_select="dsputil"
1839 utvideo_encoder_select="dsputil huffman"
1840 vble_decoder_select="dsputil"
1841 vc1_decoder_select="error_resilience h263_decoder h264chroma h264qpel intrax8"
1842 vc1image_decoder_select="vc1_decoder"
1843 vorbis_decoder_select="mdct"
1844 vorbis_encoder_select="mdct"
1845 vp3_decoder_select="hpeldsp vp3dsp videodsp"
1846 vp5_decoder_select="h264chroma hpeldsp videodsp vp3dsp"
1847 vp6_decoder_select="h264chroma hpeldsp huffman videodsp vp3dsp"
1848 vp6a_decoder_select="vp6_decoder"
1849 vp6f_decoder_select="vp6_decoder"
1850 vp7_decoder_select="h264pred videodsp"
1851 vp8_decoder_select="h264pred videodsp"
1852 vp9_decoder_select="videodsp"
1853 webp_decoder_select="vp8_decoder"
1854 wmapro_decoder_select="mdct sinewin"
1855 wmav1_decoder_select="mdct sinewin"
1856 wmav1_encoder_select="mdct sinewin"
1857 wmav2_decoder_select="mdct sinewin"
1858 wmav2_encoder_select="mdct sinewin"
1859 wmavoice_decoder_select="lsp rdft dct mdct sinewin"
1860 wmv1_decoder_select="h263_decoder"
1861 wmv1_encoder_select="h263_encoder"
1862 wmv2_decoder_select="h263_decoder intrax8 videodsp"
1863 wmv2_encoder_select="h263_encoder"
1864 wmv3_decoder_select="vc1_decoder"
1865 wmv3image_decoder_select="wmv3_decoder"
1866 zerocodec_decoder_deps="zlib"
1867 zlib_decoder_deps="zlib"
1868 zlib_encoder_deps="zlib"
1869 zmbv_decoder_deps="zlib"
1870 zmbv_encoder_deps="zlib"
1871
1872 # hardware accelerators
1873 dxva2_deps="dxva2api_h"
1874 vaapi_deps="va_va_h"
1875 vda_deps="VideoDecodeAcceleration_VDADecoder_h pthreads"
1876 vda_extralibs="-framework CoreFoundation -framework VideoDecodeAcceleration -framework QuartzCore"
1877 vdpau_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1878
1879 h263_vaapi_hwaccel_deps="vaapi"
1880 h263_vaapi_hwaccel_select="h263_decoder"
1881 h263_vdpau_hwaccel_deps="vdpau"
1882 h263_vdpau_hwaccel_select="h263_decoder"
1883 h264_dxva2_hwaccel_deps="dxva2"
1884 h264_dxva2_hwaccel_select="h264_decoder"
1885 h264_vaapi_hwaccel_deps="vaapi"
1886 h264_vaapi_hwaccel_select="h264_decoder"
1887 h264_vda_hwaccel_deps="vda"
1888 h264_vda_hwaccel_select="h264_decoder"
1889 h264_vdpau_hwaccel_deps="vdpau"
1890 h264_vdpau_hwaccel_select="h264_decoder"
1891 mpeg1_vdpau_hwaccel_deps="vdpau"
1892 mpeg1_vdpau_hwaccel_select="mpeg1video_decoder"
1893 mpeg2_dxva2_hwaccel_deps="dxva2"
1894 mpeg2_dxva2_hwaccel_select="mpeg2video_decoder"
1895 mpeg2_vaapi_hwaccel_deps="vaapi"
1896 mpeg2_vaapi_hwaccel_select="mpeg2video_decoder"
1897 mpeg2_vdpau_hwaccel_deps="vdpau"
1898 mpeg2_vdpau_hwaccel_select="mpeg2video_decoder"
1899 mpeg4_vaapi_hwaccel_deps="vaapi"
1900 mpeg4_vaapi_hwaccel_select="mpeg4_decoder"
1901 mpeg4_vdpau_hwaccel_deps="vdpau"
1902 mpeg4_vdpau_hwaccel_select="mpeg4_decoder"
1903 vc1_dxva2_hwaccel_deps="dxva2"
1904 vc1_dxva2_hwaccel_select="vc1_decoder"
1905 vc1_vaapi_hwaccel_deps="vaapi"
1906 vc1_vaapi_hwaccel_select="vc1_decoder"
1907 vc1_vdpau_hwaccel_deps="vdpau"
1908 vc1_vdpau_hwaccel_select="vc1_decoder"
1909 wmv3_dxva2_hwaccel_select="vc1_dxva2_hwaccel"
1910 wmv3_vaapi_hwaccel_select="vc1_vaapi_hwaccel"
1911 wmv3_vdpau_hwaccel_select="vc1_vdpau_hwaccel"
1912
1913 # parsers
1914 h264_parser_select="h264_decoder"
1915 mpeg4video_parser_select="error_resilience h263dsp mpegvideo"
1916 mpegvideo_parser_select="error_resilience mpegvideo"
1917 vc1_parser_select="mpegvideo"
1918
1919 # external libraries
1920 libfaac_encoder_deps="libfaac"
1921 libfaac_encoder_select="audio_frame_queue"
1922 libfdk_aac_decoder_deps="libfdk_aac"
1923 libfdk_aac_encoder_deps="libfdk_aac"
1924 libfdk_aac_encoder_select="audio_frame_queue"
1925 libgsm_decoder_deps="libgsm"
1926 libgsm_encoder_deps="libgsm"
1927 libgsm_ms_decoder_deps="libgsm"
1928 libgsm_ms_encoder_deps="libgsm"
1929 libilbc_decoder_deps="libilbc"
1930 libilbc_encoder_deps="libilbc"
1931 libmp3lame_encoder_deps="libmp3lame"
1932 libmp3lame_encoder_select="audio_frame_queue"
1933 libopencore_amrnb_decoder_deps="libopencore_amrnb"
1934 libopencore_amrnb_encoder_deps="libopencore_amrnb"
1935 libopencore_amrnb_encoder_select="audio_frame_queue"
1936 libopencore_amrwb_decoder_deps="libopencore_amrwb"
1937 libopenjpeg_decoder_deps="libopenjpeg"
1938 libopenjpeg_encoder_deps="libopenjpeg"
1939 libopus_decoder_deps="libopus"
1940 libopus_encoder_deps="libopus"
1941 libopus_encoder_select="audio_frame_queue"
1942 libschroedinger_decoder_deps="libschroedinger"
1943 libschroedinger_encoder_deps="libschroedinger"
1944 libspeex_decoder_deps="libspeex"
1945 libspeex_encoder_deps="libspeex"
1946 libspeex_encoder_select="audio_frame_queue"
1947 libtheora_encoder_deps="libtheora"
1948 libvo_aacenc_encoder_deps="libvo_aacenc"
1949 libvo_aacenc_encoder_select="audio_frame_queue"
1950 libvo_amrwbenc_encoder_deps="libvo_amrwbenc"
1951 libvorbis_encoder_deps="libvorbis"
1952 libvorbis_encoder_select="audio_frame_queue"
1953 libvpx_vp8_decoder_deps="libvpx"
1954 libvpx_vp8_encoder_deps="libvpx"
1955 libvpx_vp9_decoder_deps="libvpx"
1956 libvpx_vp9_encoder_deps="libvpx"
1957 libwavpack_encoder_deps="libwavpack"
1958 libwebp_encoder_deps="libwebp"
1959 libx264_encoder_deps="libx264"
1960 libx265_encoder_deps="libx265"
1961 libxavs_encoder_deps="libxavs"
1962 libxvid_encoder_deps="libxvid"
1963
1964 # demuxers / muxers
1965 ac3_demuxer_select="ac3_parser"
1966 asf_demuxer_select="riffdec"
1967 asf_muxer_select="riffenc"
1968 asf_stream_muxer_select="asf_muxer"
1969 avi_demuxer_select="riffdec"
1970 avi_muxer_select="riffenc"
1971 avisynth_demuxer_deps="avisynth"
1972 avisynth_demuxer_select="riffdec"
1973 caf_demuxer_select="riffdec"
1974 dirac_demuxer_select="dirac_parser"
1975 dxa_demuxer_select="riffdec"
1976 eac3_demuxer_select="ac3_parser"
1977 f4v_muxer_select="mov_muxer"
1978 flac_demuxer_select="flac_parser"
1979 hds_muxer_select="flv_muxer"
1980 hls_muxer_select="mpegts_muxer"
1981 ipod_muxer_select="mov_muxer"
1982 ismv_muxer_select="mov_muxer"
1983 matroska_audio_muxer_select="matroska_muxer"
1984 matroska_demuxer_select="riffdec"
1985 matroska_demuxer_suggest="bzlib lzo zlib"
1986 matroska_muxer_select="riffenc"
1987 mmf_muxer_select="riffenc"
1988 mov_demuxer_select="riffdec"
1989 mov_demuxer_suggest="zlib"
1990 mov_muxer_select="riffenc rtpenc_chain"
1991 mp3_demuxer_select="mpegaudio_parser"
1992 mp4_muxer_select="mov_muxer"
1993 mpegts_muxer_select="adts_muxer latm_muxer"
1994 mpegtsraw_demuxer_select="mpegts_demuxer"
1995 mxf_d10_muxer_select="mxf_muxer"
1996 nut_muxer_select="riffenc"
1997 nuv_demuxer_select="riffdec"
1998 ogg_demuxer_select="golomb"
1999 psp_muxer_select="mov_muxer"
2000 rtp_demuxer_select="sdp_demuxer"
2001 rtpdec_select="asf_demuxer rm_demuxer rtp_protocol mpegts_demuxer mov_demuxer"
2002 rtsp_demuxer_select="http_protocol rtpdec"
2003 rtsp_muxer_select="rtp_muxer http_protocol rtp_protocol rtpenc_chain"
2004 sap_demuxer_select="sdp_demuxer"
2005 sap_muxer_select="rtp_muxer rtp_protocol rtpenc_chain"
2006 sdp_demuxer_select="rtpdec"
2007 smoothstreaming_muxer_select="ismv_muxer"
2008 spdif_muxer_select="aac_parser"
2009 tak_demuxer_select="tak_parser"
2010 tg2_muxer_select="mov_muxer"
2011 tgp_muxer_select="mov_muxer"
2012 w64_demuxer_select="wav_demuxer"
2013 wav_demuxer_select="riffdec"
2014 wav_muxer_select="riffenc"
2015 webm_muxer_select="riffenc"
2016 wtv_demuxer_select="riffdec"
2017 xmv_demuxer_select="riffdec"
2018 xwma_demuxer_select="riffdec"
2019
2020 # indevs / outdevs
2021 alsa_indev_deps="alsa_asoundlib_h snd_pcm_htimestamp"
2022 alsa_outdev_deps="alsa_asoundlib_h"
2023 bktr_indev_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
2024 dv1394_indev_deps="dv1394"
2025 dv1394_indev_select="dv_demuxer"
2026 fbdev_indev_deps="linux_fb_h"
2027 jack_indev_deps="jack_jack_h pthreads"
2028 libcdio_indev_deps="libcdio"
2029 libdc1394_indev_deps="libdc1394"
2030 oss_indev_deps_any="soundcard_h sys_soundcard_h"
2031 oss_outdev_deps_any="soundcard_h sys_soundcard_h"
2032 pulse_indev_deps="libpulse"
2033 sndio_indev_deps="sndio_h"
2034 sndio_outdev_deps="sndio_h"
2035 v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h"
2036 vfwcap_indev_deps="capCreateCaptureWindow vfwcap_defines"
2037 vfwcap_indev_extralibs="-lavicap32"
2038 x11grab_indev_deps="x11grab XShmCreateImage"
2039
2040 # protocols
2041 ffrtmpcrypt_protocol_deps="!librtmp_protocol"
2042 ffrtmpcrypt_protocol_deps_any="gcrypt nettle openssl"
2043 ffrtmpcrypt_protocol_select="tcp_protocol"
2044 ffrtmphttp_protocol_deps="!librtmp_protocol"
2045 ffrtmphttp_protocol_select="http_protocol"
2046 gopher_protocol_select="network"
2047 http_protocol_select="tcp_protocol"
2048 httpproxy_protocol_select="tcp_protocol"
2049 https_protocol_select="tls_protocol"
2050 librtmp_protocol_deps="librtmp"
2051 librtmpe_protocol_deps="librtmp"
2052 librtmps_protocol_deps="librtmp"
2053 librtmpt_protocol_deps="librtmp"
2054 librtmpte_protocol_deps="librtmp"
2055 mmsh_protocol_select="http_protocol"
2056 mmst_protocol_select="network"
2057 rtmp_protocol_deps="!librtmp_protocol"
2058 rtmp_protocol_select="tcp_protocol"
2059 rtmpe_protocol_select="ffrtmpcrypt_protocol"
2060 rtmps_protocol_deps="!librtmp_protocol"
2061 rtmps_protocol_select="tls_protocol"
2062 rtmpt_protocol_select="ffrtmphttp_protocol"
2063 rtmpte_protocol_select="ffrtmpcrypt_protocol ffrtmphttp_protocol"
2064 rtmpts_protocol_select="ffrtmphttp_protocol https_protocol"
2065 rtp_protocol_select="udp_protocol"
2066 sctp_protocol_deps="struct_sctp_event_subscribe"
2067 sctp_protocol_select="network"
2068 srtp_protocol_select="rtp_protocol"
2069 tcp_protocol_select="network"
2070 tls_protocol_deps_any="openssl gnutls"
2071 tls_protocol_select="tcp_protocol"
2072 udp_protocol_select="network"
2073 unix_protocol_deps="sys_un_h"
2074 unix_protocol_select="network"
2075
2076 # filters
2077 blackframe_filter_deps="gpl"
2078 boxblur_filter_deps="gpl"
2079 cropdetect_filter_deps="gpl"
2080 delogo_filter_deps="gpl"
2081 drawtext_filter_deps="libfreetype"
2082 frei0r_filter_deps="frei0r dlopen"
2083 frei0r_filter_extralibs='$ldl'
2084 frei0r_src_filter_deps="frei0r dlopen"
2085 frei0r_src_filter_extralibs='$ldl'
2086 hqdn3d_filter_deps="gpl"
2087 interlace_filter_deps="gpl"
2088 ocv_filter_deps="libopencv"
2089 resample_filter_deps="avresample"
2090 scale_filter_deps="swscale"
2091
2092 # examples
2093 avcodec_example_deps="avcodec avutil"
2094 filter_audio_example_deps="avfilter avutil"
2095 metadata_example_deps="avformat avutil"
2096 output_example_deps="avcodec avformat avutil swscale"
2097 transcode_aac_example_deps="avcodec avformat avresample"
2098
2099 # libraries
2100 avcodec_deps="avutil"
2101 avdevice_deps="avutil avcodec avformat"
2102 avfilter_deps="avutil"
2103 avformat_deps="avutil avcodec"
2104 avresample_deps="avutil"
2105 swscale_deps="avutil"
2106
2107 # programs
2108 avconv_deps="avcodec avfilter avformat avresample swscale"
2109 avconv_select="aformat_filter anull_filter asyncts_filter atrim_filter format_filter
2110 fps_filter null_filter resample_filter scale_filter
2111 setpts_filter trim_filter"
2112 avplay_deps="avcodec avformat avresample swscale sdl"
2113 avplay_libs='$sdl_libs'
2114 avplay_select="rdft"
2115 avprobe_deps="avcodec avformat"
2116 avserver_deps="avformat fork !shared"
2117 avserver_select="ffm_muxer rtp_protocol rtsp_demuxer"
2118
2119 # documentation
2120 pod2man_deps="doc"
2121 texi2html_deps="doc"
2122
2123 # default parameters
2124
2125 logfile="config.log"
2126
2127 # installation paths
2128 prefix_default="/usr/local"
2129 bindir_default='${prefix}/bin'
2130 datadir_default='${prefix}/share/avconv'
2131 docdir_default='${prefix}/share/doc/libav'
2132 incdir_default='${prefix}/include'
2133 libdir_default='${prefix}/lib'
2134 mandir_default='${prefix}/share/man'
2135 shlibdir_default="$libdir_default"
2136
2137 # toolchain
2138 ar_default="ar"
2139 cc_default="gcc"
2140 host_cc_default="gcc"
2141 cp_f="cp -f"
2142 ln_s="ln -s -f"
2143 nm_default="nm -g"
2144 objformat="elf"
2145 pkg_config_default=pkg-config
2146 ranlib="ranlib"
2147 strip="strip"
2148 yasmexe="yasm"
2149
2150 nogas=":"
2151
2152 # machine
2153 arch_default=$(uname -m)
2154 cpu="generic"
2155
2156 # OS
2157 target_os_default=$(tolower $(uname -s))
2158 host_os=$target_os_default
2159
2160 # configurable options
2161 enable $EXAMPLE_LIST $LIBRARY_LIST $PROGRAM_LIST
2162
2163 enable asm
2164 enable debug
2165 enable doc
2166 enable optimizations
2167 enable safe_bitstream_reader
2168 enable static
2169 enable swscale_alpha
2170
2171 # By default, enable only those hwaccels that have no external dependencies.
2172 enable dxva2 vdpau
2173
2174 # build settings
2175 SHFLAGS='-shared -Wl,-soname,$$(@F)'
2176 LIBPREF="lib"
2177 LIBSUF=".a"
2178 FULLNAME='$(NAME)$(BUILDSUF)'
2179 LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
2180 SLIBPREF="lib"
2181 SLIBSUF=".so"
2182 SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
2183 SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
2184 SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
2185 LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
2186 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'
2187 SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR) $(SLIBNAME)'
2188
2189 asflags_filter=echo
2190 cflags_filter=echo
2191 ldflags_filter=echo
2192
2193 AS_C='-c'
2194 AS_O='-o $@'
2195 CC_C='-c'
2196 CC_E='-E -o $@'
2197 CC_O='-o $@'
2198 LD_O='-o $@'
2199 LD_LIB='-l%'
2200 LD_PATH='-L'
2201 HOSTCC_C='-c'
2202 HOSTCC_E='-E -o $@'
2203 HOSTCC_O='-o $@'
2204 HOSTLD_O='-o $@'
2205
2206 host_libs='-lm'
2207 host_cflags_filter=echo
2208 host_ldflags_filter=echo
2209
2210 target_path='$(CURDIR)'
2211
2212 # since the object filename is not given with the -MM flag, the compiler
2213 # is only able to print the basename, and we must add the path ourselves
2214 DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o," > $(@:.o=.d)'
2215 DEPFLAGS='-MM'
2216
2217 # find source path
2218 if test -f configure; then
2219 source_path=.
2220 else
2221 source_path=$(cd $(dirname "$0"); pwd)
2222 echo "$source_path" | grep -q '[[:blank:]]' &&
2223 die "Out of tree builds are impossible with whitespace in source path."
2224 test -e "$source_path/config.h" &&
2225 die "Out of tree builds are impossible with config.h in source dir."
2226 fi
2227
2228 for v in "$@"; do
2229 r=${v#*=}
2230 l=${v%"$r"}
2231 r=$(sh_quote "$r")
2232 LIBAV_CONFIGURATION="${LIBAV_CONFIGURATION# } ${l}${r}"
2233 done
2234
2235 find_things(){
2236 thing=$1
2237 pattern=$2
2238 file=$source_path/$3
2239 sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
2240 }
2241
2242 ENCODER_LIST=$(find_things encoder ENC libavcodec/allcodecs.c)
2243 DECODER_LIST=$(find_things decoder DEC libavcodec/allcodecs.c)
2244 HWACCEL_LIST=$(find_things hwaccel HWACCEL libavcodec/allcodecs.c)
2245 PARSER_LIST=$(find_things parser PARSER libavcodec/allcodecs.c)
2246 BSF_LIST=$(find_things bsf BSF libavcodec/allcodecs.c)
2247 MUXER_LIST=$(find_things muxer _MUX libavformat/allformats.c)
2248 DEMUXER_LIST=$(find_things demuxer DEMUX libavformat/allformats.c)
2249 OUTDEV_LIST=$(find_things outdev OUTDEV libavdevice/alldevices.c)
2250 INDEV_LIST=$(find_things indev _IN libavdevice/alldevices.c)
2251 PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
2252 FILTER_LIST=$(find_things filter FILTER libavfilter/allfilters.c)
2253
2254 ALL_COMPONENTS="
2255 $BSF_LIST
2256 $DECODER_LIST
2257 $DEMUXER_LIST
2258 $ENCODER_LIST
2259 $FILTER_LIST
2260 $HWACCEL_LIST
2261 $INDEV_LIST
2262 $MUXER_LIST
2263 $OUTDEV_LIST
2264 $PARSER_LIST
2265 $PROTOCOL_LIST
2266 "
2267
2268 for n in $COMPONENT_LIST; do
2269 v=$(toupper ${n%s})_LIST
2270 eval enable \$$v
2271 eval ${n}_if_any="\$$v"
2272 done
2273
2274 enable $ARCH_EXT_LIST
2275
2276 die_unknown(){
2277 echo "Unknown option \"$1\"."
2278 echo "See $0 --help for available options."
2279 exit 1
2280 }
2281
2282 print_3_columns() {
2283 cat | tr ' ' '\n' | sort | pr -r -3 -t
2284 }
2285
2286 show_list() {
2287 suffix=_$1
2288 shift
2289 echo $* | sed s/$suffix//g | print_3_columns
2290 exit 0
2291 }
2292
2293 rand_list(){
2294 IFS=', '
2295 set -- $*
2296 unset IFS
2297 for thing; do
2298 comp=${thing%:*}
2299 prob=${thing#$comp}
2300 prob=${prob#:}
2301 is_in ${comp} $COMPONENT_LIST && eval comp=\$$(toupper ${comp%s})_LIST
2302 echo "prob ${prob:-0.5}"
2303 printf '%s\n' $comp
2304 done
2305 }
2306
2307 do_random(){
2308 action=$1
2309 shift
2310 random_seed=$(awk "BEGIN { srand($random_seed); print srand() }")
2311 $action $(rand_list "$@" | awk "BEGIN { srand($random_seed) } \$1 == \"prob\" { prob = \$2; next } rand() < prob { print }")
2312 }
2313
2314 for opt do
2315 optval="${opt#*=}"
2316 case "$opt" in
2317 --extra-ldflags=*)
2318 add_ldflags $optval
2319 ;;
2320 --extra-libs=*)
2321 add_extralibs $optval
2322 ;;
2323 --disable-devices)
2324 disable $INDEV_LIST $OUTDEV_LIST
2325 ;;
2326 --enable-debug=*)
2327 debuglevel="$optval"
2328 ;;
2329 --disable-programs)
2330 disable $PROGRAM_LIST
2331 ;;
2332 --disable-everything)
2333 map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
2334 ;;
2335 --disable-all)
2336 map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
2337 disable $LIBRARY_LIST $PROGRAM_LIST doc
2338 ;;
2339 --enable-random|--disable-random)
2340 action=${opt%%-random}
2341 do_random ${action#--} $COMPONENT_LIST
2342 ;;
2343 --enable-random=*|--disable-random=*)
2344 action=${opt%%-random=*}
2345 do_random ${action#--} $optval
2346 ;;
2347 --enable-*=*|--disable-*=*)
2348 eval $(echo "${opt%%=*}" | sed 's/--/action=/;s/-/ thing=/')
2349 is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt"
2350 eval list=\$$(toupper $thing)_LIST
2351 name=$(echo "${optval}" | sed "s/,/_${thing}|/g")_${thing}
2352 $action $(filter "$name" $list)
2353 ;;
2354 --enable-?*|--disable-?*)
2355 eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
2356 if is_in $option $COMPONENT_LIST; then
2357 test $action = disable && action=unset
2358 eval $action \$$(toupper ${option%s})_LIST
2359 elif is_in $option $CMDLINE_SELECT; then
2360 $action $option
2361 else
2362 die_unknown $opt
2363 fi
2364 ;;
2365 --list-*)
2366 NAME="${opt#--list-}"
2367 is_in $NAME $COMPONENT_LIST || die_unknown $opt
2368 NAME=${NAME%s}
2369 eval show_list $NAME \$$(toupper $NAME)_LIST
2370 ;;
2371 --help|-h) show_help
2372 ;;
2373 *)
2374 optname="${opt%%=*}"
2375 optname="${optname#--}"
2376 optname=$(echo "$optname" | sed 's/-/_/g')
2377 if is_in $optname $CMDLINE_SET; then
2378 eval $optname='$optval'
2379 elif is_in $optname $CMDLINE_APPEND; then
2380 append $optname "$optval"
2381 else
2382 die_unknown $opt
2383 fi
2384 ;;
2385 esac
2386 done
2387
2388 disabled logging && logfile=/dev/null
2389
2390 echo "# $0 $LIBAV_CONFIGURATION" > $logfile
2391 set >> $logfile
2392
2393 test -n "$cross_prefix" && enable cross_compile
2394
2395 if enabled cross_compile; then
2396 test -n "$arch" && test -n "$target_os" ||
2397 die "Must specify target arch and OS when cross-compiling"
2398 fi
2399
2400 ar_default="${cross_prefix}${ar_default}"
2401 cc_default="${cross_prefix}${cc_default}"
2402 nm_default="${cross_prefix}${nm_default}"
2403 pkg_config_default="${cross_prefix}${pkg_config_default}"
2404 ranlib="${cross_prefix}${ranlib}"
2405 strip="${cross_prefix}${strip}"
2406
2407 sysinclude_default="${sysroot}/usr/include"
2408
2409 case "$toolchain" in
2410 clang-asan)
2411 cc_default="clang"
2412 add_cflags -fsanitize=address
2413 add_ldflags -fsanitize=address
2414 ;;
2415 clang-tsan)
2416 cc_default="clang"
2417 add_cflags -fsanitize=thread -pie
2418 add_ldflags -fsanitize=thread -pie
2419 ;;
2420 clang-usan)
2421 cc_default="clang"
2422 add_cflags -fsanitize=undefined
2423 add_ldflags -fsanitize=undefined
2424 ;;
2425 gcc-asan)
2426 cc_default="gcc"
2427 add_cflags -fsanitize=address
2428 add_ldflags -fsanitize=address
2429 ;;
2430 gcc-tsan)
2431 cc_default="gcc"
2432 add_cflags -fsanitize=thread -pie -fPIC
2433 add_ldflags -fsanitize=thread -pie -fPIC
2434 ;;
2435 gcc-usan)
2436 cc_default="gcc"
2437 add_cflags -fsanitize=undefined
2438 add_ldflags -fsanitize=undefined
2439 ;;
2440 valgrind-massif)
2441 target_exec_default="valgrind"
2442 target_exec_args="--alloc-fn=av_malloc --alloc-fn=av_mallocz"
2443 ;;
2444 valgrind-memcheck)
2445 target_exec_default="valgrind"
2446 target_exec_args="--track-origins=yes --leak-check=full"
2447 ;;
2448 msvc)
2449 # Check whether the current MSVC version needs the C99 converter.
2450 # From MSVC 2013 (compiler major version 18) onwards, it does actually
2451 # support enough of C99 to build libav. Default to the new
2452 # behaviour if the regexp was unable to match anything, since this
2453 # successfully parses the version number of existing supported
2454 # versions that require the converter (MSVC 2010 and 2012).
2455 cl_major_ver=$(cl 2>&1 | sed -n 's/.*Version \([[:digit:]]\{1,\}\)\..*/\1/p')
2456 if [ -z "$cl_major_ver" ] || [ $cl_major_ver -ge 18 ]; then
2457 cc_default="cl"
2458 else
2459 cc_default="c99wrap cl"
2460 fi
2461 ld_default="link"
2462 nm_default="dumpbin -symbols"
2463 ar_default="lib"
2464 target_os_default="win32"
2465 # Use a relative path for TMPDIR. This makes sure all the
2466 # ffconf temp files are written with a relative path, avoiding
2467 # issues with msys/win32 path conversion for MSVC parameters
2468 # such as -Fo<file> or -out:<file>.
2469 TMPDIR=.
2470 ;;
2471 icl)
2472 cc_default="icl"
2473 ld_default="xilink"
2474 nm_default="dumpbin -symbols"
2475 ar_default="xilib"
2476 target_os_default="win32"
2477 TMPDIR=.
2478 ;;
2479 gcov)
2480 add_cflags -fprofile-arcs -ftest-coverage
2481 add_ldflags -fprofile-arcs -ftest-coverage
2482 ;;
2483 hardened)
2484 add_cflags -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fno-strict-overflow -fstack-protector-all
2485 add_ldflags -Wl,-z,relro -Wl,-z,now
2486 ;;
2487 ?*)
2488 die "Unknown toolchain $toolchain"
2489 ;;
2490 esac
2491
2492 set_default arch cc pkg_config sysinclude target_exec target_os
2493 enabled cross_compile || host_cc_default=$cc
2494 set_default host_cc
2495
2496 if ! $pkg_config --version >/dev/null 2>&1; then
2497 warn "$pkg_config not found, library detection may fail."
2498 pkg_config=false
2499 fi
2500
2501 exesuf() {
2502 case $1 in
2503 mingw32*|win32|win64|cygwin*|*-dos|freedos|opendos|os/2*|symbian) echo .exe ;;
2504 esac
2505 }
2506
2507 EXESUF=$(exesuf $target_os)
2508 HOSTEXESUF=$(exesuf $host_os)
2509
2510 # set temporary file name
2511 : ${TMPDIR:=$TEMPDIR}
2512 : ${TMPDIR:=$TMP}
2513 : ${TMPDIR:=/tmp}
2514
2515 if ! check_cmd mktemp -u XXXXXX; then
2516 # simple replacement for missing mktemp
2517 # NOT SAFE FOR GENERAL USE
2518 mktemp(){
2519 echo "${2%%XXX*}.${HOSTNAME}.${UID}.$$"
2520 }
2521 fi
2522
2523 tmpfile(){
2524 tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
2525 (set -C; exec > $tmp) 2>/dev/null ||
2526 die "Unable to create temporary file in $TMPDIR."
2527 append TMPFILES $tmp
2528 eval $1=$tmp
2529 }
2530
2531 trap 'rm -f -- $TMPFILES' EXIT
2532
2533 tmpfile TMPASM .asm
2534 tmpfile TMPC .c
2535 tmpfile TMPE $EXESUF
2536 tmpfile TMPH .h
2537 tmpfile TMPO .o
2538 tmpfile TMPS .S
2539 tmpfile TMPSH .sh
2540 tmpfile TMPV .ver
2541
2542 unset -f mktemp
2543
2544 chmod +x $TMPE
2545
2546 # make sure we can execute files in $TMPDIR
2547 cat > $TMPSH 2>> $logfile <<EOF
2548 #! /bin/sh
2549 EOF
2550 chmod +x $TMPSH >> $logfile 2>&1
2551 if ! $TMPSH >> $logfile 2>&1; then
2552 cat <<EOF
2553 Unable to create and execute files in $TMPDIR. Set the TMPDIR environment
2554 variable to another directory and make sure that it is not mounted noexec.
2555 EOF
2556 die "Sanity test failed."
2557 fi
2558
2559 ccc_flags(){
2560 for flag; do
2561 case $flag in
2562 -std=c99) echo -c99 ;;
2563 -mcpu=*) echo -arch ${flag#*=} ;;
2564 -mieee) echo -ieee ;;
2565 -O*|-fast) echo $flag ;;
2566 -fno-math-errno) echo -assume nomath_errno ;;
2567 -g) echo -g3 ;;
2568 -Wall) echo -msg_enable level2 ;;
2569 -Wno-pointer-sign) echo -msg_disable ptrmismatch1 ;;
2570 -Wl,*) echo $flag ;;
2571 -f*|-W*) ;;
2572 *) echo $flag ;;
2573 esac
2574 done
2575 }
2576
2577 cparser_flags(){
2578 for flag; do
2579 case $flag in
2580 -Wno-switch) echo -Wno-switch-enum ;;
2581 -Wno-format-zero-length) ;;
2582 -Wdisabled-optimization) ;;
2583 -Wno-pointer-sign) echo -Wno-other ;;
2584 *) echo $flag ;;
2585 esac
2586 done
2587 }
2588
2589 msvc_common_flags(){
2590 for flag; do
2591 case $flag in
2592 # In addition to specifying certain flags under the compiler
2593 # specific filters, they must be specified here as well or else the
2594 # generic catch all at the bottom will print the original flag.
2595 -Wall) ;;
2596 -std=c99) ;;
2597 # Common flags
2598 -fomit-frame-pointer) ;;
2599 -g) echo -Z7 ;;
2600 -fno-math-errno) ;;
2601 -fno-common) ;;
2602 -fno-signed-zeros) ;;
2603 -fPIC) ;;
2604 -mthumb) ;;
2605 -march=*) ;;
2606 -lz) echo zlib.lib ;;
2607 -lavifil32) echo vfw32.lib ;;
2608 -lavicap32) echo vfw32.lib user32.lib ;;
2609 -l*) echo ${flag#-l}.lib ;;
2610 *) echo $flag ;;
2611 esac
2612 done
2613 }
2614
2615 msvc_flags(){
2616 msvc_common_flags "$@"
2617 for flag; do
2618 case $flag in
2619 -Wall) echo -W4 -wd4244 -wd4127 -wd4018 -wd4389 \
2620 -wd4146 -wd4057 -wd4204 -wd4706 -wd4305 \
2621 -wd4152 -wd4324 -we4013 -wd4100 -wd4214 \
2622 -wd4273 ;;
2623 esac
2624 done
2625 }
2626
2627 icl_flags(){
2628 msvc_common_flags "$@"
2629 for flag; do
2630 case $flag in
2631 # Despite what Intel's documentation says -Wall, which is supported
2632 # on Windows, does enable remarks so disable them here.
2633 -Wall) echo $flag -Qdiag-disable:remark ;;
2634 -std=c99) echo -Qstd=c99 ;;
2635 esac
2636 done
2637 }
2638
2639 pgi_flags(){
2640 for flag; do
2641 case $flag in
2642 -flto) echo -Mipa=fast,libopt,libinline,vestigial ;;
2643 -fomit-frame-pointer) echo -Mnoframe ;;
2644 -g) echo -gopt ;;
2645 *) echo $flag ;;
2646 esac
2647 done
2648 }
2649
2650 suncc_flags(){
2651 for flag; do
2652 case $flag in
2653 -march=*|-mcpu=*)
2654 case "${flag#*=}" in
2655 native) echo -xtarget=native ;;
2656 v9|niagara) echo -xarch=sparc ;;
2657 ultrasparc) echo -xarch=sparcvis ;;
2658 ultrasparc3|niagara2) echo -xarch=sparcvis2 ;;
2659 i586|pentium) echo -xchip=pentium ;;
2660 i686|pentiumpro|pentium2) echo -xtarget=pentium_pro ;;
2661 pentium3*|c3-2) echo -xtarget=pentium3 ;;
2662 pentium-m) echo -xarch=sse2 -xchip=pentium3 ;;
2663 pentium4*) echo -xtarget=pentium4 ;;
2664 prescott|nocona) echo -xarch=sse3 -xchip=pentium4 ;;
2665 *-sse3) echo -xarch=sse3 ;;
2666 core2) echo -xarch=ssse3 -xchip=core2 ;;
2667 corei7) echo -xarch=sse4_2 -xchip=nehalem ;;
2668 corei7-avx) echo -xarch=avx -xchip=sandybridge ;;
2669 amdfam10|barcelona|bdver*) echo -xarch=sse4_1 ;;
2670 athlon-4|athlon-[mx]p) echo -xarch=ssea ;;
2671 k8|opteron|athlon64|athlon-fx)
2672 echo -xarch=sse2a ;;
2673 athlon*) echo -xarch=pentium_proa ;;
2674 esac
2675 ;;
2676 -std=c99) echo -xc99 ;;
2677 -fomit-frame-pointer) echo -xregs=frameptr ;;
2678 -fPIC) echo -KPIC -xcode=pic32 ;;
2679 -W*,*) echo $flag ;;
2680 -f*-*|-W*|-mimpure-text) ;;
2681 -shared) echo -G ;;
2682 *) echo $flag ;;
2683 esac
2684 done
2685 }
2686
2687 tms470_flags(){
2688 for flag; do
2689 case $flag in
2690 -march=*|-mcpu=*)
2691 case "${flag#*=}" in
2692 armv7-a|cortex-a*) echo -mv=7a8 ;;
2693 armv7-r|cortex-r*) echo -mv=7r4 ;;
2694 armv7-m|cortex-m*) echo -mv=7m3 ;;
2695 armv6*|arm11*) echo -mv=6 ;;
2696 armv5*e|arm[79]*e*|arm9[24]6*|arm96*|arm102[26])
2697 echo -mv=5e ;;
2698 armv4*|arm7*|arm9[24]*) echo -mv=4 ;;
2699 esac
2700 ;;
2701 -mfpu=neon) echo --float_support=vfpv3 --neon ;;
2702 -mfpu=vfp) echo --float_support=vfpv2 ;;
2703 -mfpu=vfpv3) echo --float_support=vfpv3 ;;
2704 -mfpu=vfpv3-d16) echo --float_support=vfpv3d16 ;;
2705 -msoft-float) echo --float_support=vfplib ;;
2706 -O[0-3]|-mf=*) echo $flag ;;
2707 -g) echo -g -mn ;;
2708 -pds=*) echo $flag ;;
2709 -D*|-I*) echo $flag ;;
2710 --gcc|--abi=*) echo $flag ;;
2711 -me) echo $flag ;;
2712 esac
2713 done
2714 }
2715
2716 probe_cc(){
2717 pfx=$1
2718 _cc=$2
2719
2720 unset _type _ident _cc_c _cc_e _cc_o _flags _cflags
2721 unset _ld_o _ldflags _ld_lib _ld_path
2722 unset _depflags _DEPCMD _DEPFLAGS
2723 _flags_filter=echo
2724
2725 if $_cc -v 2>&1 | grep -q '^gcc.*LLVM'; then
2726 _type=llvm_gcc
2727 gcc_extra_ver=$(expr "$($_cc --version | head -n1)" : '.*\((.*)\)')
2728 _ident="llvm-gcc $($_cc -dumpversion) $gcc_extra_ver"
2729 _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2730 _cflags_speed='-O3'
2731 _cflags_size='-Os'
2732 elif $_cc -v 2>&1 | grep -qi ^gcc; then
2733 _type=gcc
2734 gcc_version=$($_cc --version | head -n1)
2735 gcc_basever=$($_cc -dumpversion)
2736 gcc_pkg_ver=$(expr "$gcc_version" : '[^ ]* \(([^)]*)\)')
2737 gcc_ext_ver=$(expr "$gcc_version" : ".*$gcc_pkg_ver $gcc_basever \\(.*\\)")
2738 _ident=$(cleanws "gcc $gcc_basever $gcc_pkg_ver $gcc_ext_ver")
2739 if ! $_cc -dumpversion | grep -q '^2\.'; then
2740 _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2741 fi
2742 _cflags_speed='-O3'
2743 _cflags_size='-Os'
2744 elif $_cc --version 2>/dev/null | grep -q ^icc; then
2745 _type=icc
2746 _ident=$($_cc --version | head -n1)
2747 _depflags='-MMD'
2748 _cflags_speed='-O3'
2749 _cflags_size='-Os'
2750 _cflags_noopt='-O1'
2751 elif $_cc -v 2>&1 | grep -q xlc; then
2752 _type=xlc
2753 _ident=$($_cc -qversion 2>/dev/null | head -n1)
2754 _cflags_speed='-O5'
2755 _cflags_size='-O5 -qcompact'
2756 elif $_cc -V 2>/dev/null | grep -q Compaq; then
2757 _type=ccc
2758 _ident=$($_cc -V | head -n1 | cut -d' ' -f1-3)
2759 _DEPFLAGS='-M'
2760 _cflags_speed='-fast'
2761 _cflags_size='-O1'
2762 _flags_filter=ccc_flags
2763 elif $_cc --vsn 2>/dev/null | grep -q "ARM C/C++ Compiler"; then
2764 test -d "$sysroot" || die "No valid sysroot specified."
2765 _type=armcc
2766 _ident=$($_cc --vsn | head -n1)
2767 armcc_conf="$PWD/armcc.conf"
2768 $_cc --arm_linux_configure \
2769 --arm_linux_config_file="$armcc_conf" \
2770 --configure_sysroot="$sysroot" \
2771 --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
2772 die "Error creating armcc configuration file."
2773 $_cc --vsn | grep -q RVCT && armcc_opt=rvct || armcc_opt=armcc
2774 _flags="--arm_linux_config_file=$armcc_conf --translate_gcc"
2775 as_default="${cross_prefix}gcc"
2776 _depflags='-MMD'
2777 _cflags_speed='-O3'
2778 _cflags_size='-Os'
2779 elif $_cc -version 2>/dev/null | grep -Eq 'TMS470|TI ARM'; then
2780 _type=tms470
2781 _ident=$($_cc -version | head -n1 | tr -s ' ')
2782 _flags='--gcc --abi=eabi -me'
2783 _cc_e='-ppl -fe=$@'
2784 _cc_o='-fe=$@'
2785 _depflags='-ppa -ppd=$(@:.o=.d)'
2786 _cflags_speed='-O3 -mf=5'
2787 _cflags_size='-O3 -mf=2'
2788 _flags_filter=tms470_flags
2789 elif $_cc -v 2>&1 | grep -q clang; then
2790 _type=clang
2791 _ident=$($_cc --version | head -n1)
2792 _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2793 _cflags_speed='-O3'
2794 _cflags_size='-Os'
2795 elif $_cc -V 2>&1 | grep -q Sun; then
2796 _type=suncc
2797 _ident=$($_cc -V 2>&1 | head -n1 | cut -d' ' -f 2-)
2798 _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "1s,^.*: ,$@: ," -e "\$$!s,\$$, \\\," -e "1!s,^.*: , ," > $(@:.o=.d)'
2799 _DEPFLAGS='-xM1 -xc99'
2800 _ldflags='-std=c99'
2801 _cflags_speed='-O5'
2802 _cflags_size='-O5 -xspace'
2803 _flags_filter=suncc_flags
2804 elif $_cc -v 2>&1 | grep -q 'PathScale\|Path64'; then
2805 _type=pathscale
2806 _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
2807 _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2808 _cflags_speed='-O2'
2809 _cflags_size='-Os'
2810 _flags_filter='filter_out -Wdisabled-optimization'
2811 elif $_cc -v 2>&1 | grep -q Open64; then
2812 _type=open64
2813 _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
2814 _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2815 _cflags_speed='-O2'
2816 _cflags_size='-Os'
2817 _flags_filter='filter_out -Wdisabled-optimization|-Wtype-limits|-fno-signed-zeros'
2818 elif $_cc -V 2>&1 | grep -q Portland; then
2819 _type=pgi
2820 _ident="PGI $($_cc -V 2>&1 | awk '/^pgcc/ { print $2; exit }')"
2821 opt_common='-alias=ansi -Mdse -Mlre -Mpre'
2822 _cflags_speed="-O3 -Mautoinline -Munroll=c:4 $opt_common"
2823 _cflags_size="-O2 -Munroll=c:1 $opt_common"
2824 _cflags_noopt="-O1"
2825 _flags_filter=pgi_flags
2826 elif $_cc 2>&1 | grep -q Microsoft; then
2827 _type=msvc
2828 _ident=$($cc 2>&1 | head -n1)
2829 _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< 2>&1 | awk '\''/including/ { sub(/^.*file: */, ""); gsub(/\\/, "/"); if (!match($$0, / /)) print "$@:", $$0 }'\'' > $(@:.o=.d)'
2830 _DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -showIncludes -Zs'
2831 _cflags_speed="-O2"
2832 _cflags_size="-O1"
2833 if $_cc 2>&1 | grep -q Linker; then
2834 _ld_o='-out:$@'
2835 else
2836 _ld_o='-Fe$@'
2837 fi
2838 _cc_o='-Fo$@'
2839 _cc_e='-P -Fi$@'
2840 _flags_filter=msvc_flags
2841 _ld_lib='lib%.a'
2842 _ld_path='-libpath:'
2843 _flags='-nologo'
2844 _cflags='-D_USE_MATH_DEFINES -D_CRT_SECURE_NO_WARNINGS -Dinline=__inline -FIstdlib.h -Dstrtoll=_strtoi64'
2845 if [ $pfx = hostcc ]; then
2846 append _cflags -Dsnprintf=_snprintf
2847 fi
2848 elif $_cc 2>&1 | grep -q Intel; then
2849 _type=icl
2850 _ident=$($cc 2>&1 | head -n1)
2851 _depflags='-QMMD -QMF$(@:.o=.d) -QMT$@'
2852 # Not only is O3 broken on 13.x+ but it is slower on all previous
2853 # versions (tested) as well.
2854 _cflags_speed="-O2"
2855 _cflags_size="-O1 -Oi" # -O1 without -Oi miscompiles stuff
2856 if $_cc 2>&1 | grep -q Linker; then
2857 _ld_o='-out:$@'
2858 else
2859 _ld_o='-Fe$@'
2860 fi
2861 _cc_o='-Fo$@'
2862 _cc_e='-P'
2863 _flags_filter=icl_flags
2864 _ld_lib='lib%.a'
2865 _ld_path='-libpath:'
2866 # -Qdiag-error to make icl error when seeing certain unknown arguments
2867 _flags='-nologo -Qdiag-error:4044,10157'
2868 # -Qvec- -Qsimd- to prevent miscompilation, -GS for consistency
2869 # with MSVC which enables it by default.
2870 _cflags='-D_USE_MATH_DEFINES -FIstdlib.h -Dstrtoll=_strtoi64 -Qms0 -Qvec- -Qsimd- -GS'
2871 if [ $pfx = hostcc ]; then
2872 append _cflags -Dsnprintf=_snprintf
2873 fi
2874 elif $_cc --version 2>/dev/null | grep -q ^cparser; then
2875 _type=cparser
2876 _ident=$($_cc --version | head -n1)
2877 _depflags='-MMD'
2878 _cflags_speed='-O4'
2879 _cflags_size='-O2'
2880 _flags_filter=cparser_flags
2881 fi
2882
2883 eval ${pfx}_type=\$_type
2884 eval ${pfx}_ident=\$_ident
2885 }
2886
2887 set_ccvars(){
2888 eval ${1}_C=\${_cc_c-\${${1}_C}}
2889 eval ${1}_E=\${_cc_e-\${${1}_E}}
2890 eval ${1}_O=\${_cc_o-\${${1}_O}}
2891
2892 if [ -n "$_depflags" ]; then
2893 eval ${1}_DEPFLAGS=\$_depflags
2894 else
2895 eval ${1}DEP=\${_DEPCMD:-\$DEPCMD}
2896 eval ${1}DEP_FLAGS=\${_DEPFLAGS:-\$DEPFLAGS}
2897 eval DEP${1}FLAGS=\$_flags
2898 fi
2899 }
2900
2901 probe_cc cc "$cc"
2902 cflags_filter=$_flags_filter
2903 cflags_speed=$_cflags_speed
2904 cflags_size=$_cflags_size
2905 cflags_noopt=$_cflags_noopt
2906 add_cflags $_flags $_cflags
2907 cc_ldflags=$_ldflags
2908 set_ccvars CC
2909
2910 probe_cc hostcc "$host_cc"
2911 host_cflags_filter=$_flags_filter
2912 add_host_cflags $_flags $_cflags
2913 set_ccvars HOSTCC
2914
2915 test -n "$cc_type" && enable $cc_type ||
2916 warn "Unknown C compiler $cc, unable to select optimal CFLAGS"
2917
2918 : ${as_default:=$cc}
2919 : ${dep_cc_default:=$cc}
2920 : ${ld_default:=$cc}
2921 : ${host_ld_default:=$host_cc}
2922 set_default ar as dep_cc ld host_ld
2923
2924 probe_cc as "$as"
2925 asflags_filter=$_flags_filter
2926 add_asflags $_flags $_cflags
2927 set_ccvars AS
2928
2929 probe_cc ld "$ld"
2930 ldflags_filter=$_flags_filter
2931 add_ldflags $_flags $_ldflags
2932 test "$cc_type" != "$ld_type" && add_ldflags $cc_ldflags
2933 LD_O=${_ld_o-$LD_O}
2934 LD_LIB=${_ld_lib-$LD_LIB}
2935 LD_PATH=${_ld_path-$LD_PATH}
2936
2937 probe_cc hostld "$host_ld"
2938 host_ldflags_filter=$_flags_filter
2939 add_host_ldflags $_flags $_ldflags
2940 HOSTLD_O=${_ld_o-$HOSTLD_O}
2941
2942 if [ -z "$CC_DEPFLAGS" ] && [ "$dep_cc" != "$cc" ]; then
2943 probe_cc depcc "$dep_cc"
2944 CCDEP=${_DEPCMD:-$DEPCMD}
2945 CCDEP_FLAGS=${_DEPFLAGS:=$DEPFLAGS}
2946 DEPCCFLAGS=$_flags
2947 fi
2948
2949 if $ar 2>&1 | grep -q Microsoft; then
2950 arflags="-nologo"
2951 ar_o='-out:$@'
2952 elif $ar 2>&1 | grep -q 'Texas Instruments'; then
2953 arflags="rq"
2954 ar_o='$@'
2955 elif $ar 2>&1 | grep -q 'Usage: ar.*-X.*any'; then
2956 arflags='-Xany -r -c'
2957 ar_o='$@'
2958 else
2959 arflags="rc"
2960 ar_o='$@'
2961 fi
2962
2963 add_cflags $extra_cflags
2964 add_asflags $extra_cflags
2965
2966 if test -n "$sysroot"; then
2967 case "$cc_type" in
2968 gcc|llvm_gcc|clang)
2969 add_cppflags --sysroot="$sysroot"
2970 add_ldflags --sysroot="$sysroot"
2971 ;;
2972 tms470)
2973 add_cppflags -I"$sysinclude"
2974 add_ldflags --sysroot="$sysroot"
2975 ;;
2976 esac
2977 fi
2978
2979 if test "$cpu" = host; then
2980 enabled cross_compile &&
2981 die "--cpu=host makes no sense when cross-compiling."
2982
2983 case "$cc_type" in
2984 gcc|llvm_gcc)
2985 check_native(){
2986 $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
2987 sed -n "/cc1.*$1=/{
2988 s/.*$1=\\([^ ]*\\).*/\\1/
2989 p
2990 q
2991 }" $TMPE
2992 }
2993 cpu=$(check_native -march || check_native -mcpu)
2994 ;;
2995 esac
2996
2997 test "${cpu:-host}" = host &&
2998 die "--cpu=host not supported with compiler $cc"
2999 fi
3000
3001 # Deal with common $arch aliases
3002 case "$arch" in
3003 aarch64|arm64)
3004 arch="aarch64"
3005 ;;
3006 arm*)
3007 arch="arm"
3008 ;;
3009 mips*|IP*)
3010 arch="mips"
3011 ;;
3012 parisc*|hppa*)
3013 arch="parisc"
3014 ;;
3015 "Power Macintosh"|ppc*|powerpc*)
3016 arch="ppc"
3017 ;;
3018 s390|s390x)
3019 arch="s390"
3020 ;;
3021 sh4|sh)
3022 arch="sh4"
3023 ;;
3024 sun4u|sparc*)
3025 arch="sparc"
3026 ;;
3027 tilegx|tile-gx)
3028 arch="tilegx"
3029 ;;
3030 i[3-6]86|i86pc|BePC|x86pc|x86_64|amd64)
3031 arch="x86"
3032 ;;
3033 esac
3034
3035 is_in $arch $ARCH_LIST || warn "unknown architecture $arch"
3036 enable $arch
3037
3038 # Add processor-specific flags
3039 if enabled aarch64; then
3040
3041 case $cpu in
3042 armv*)
3043 cpuflags="-march=$cpu"
3044 ;;
3045 *)
3046 cpuflags="-mcpu=$cpu"
3047 ;;
3048 esac
3049
3050 elif enabled alpha; then
3051
3052 cpuflags="-mcpu=$cpu"
3053
3054 elif enabled arm; then
3055
3056 check_arm_arch() {
3057 check_cpp_condition stddef.h \
3058 "defined __ARM_ARCH_${1}__ || defined __TARGET_ARCH_${2:-$1}" \
3059 $cpuflags
3060 }
3061
3062 probe_arm_arch() {
3063 if check_arm_arch 4; then echo armv4;
3064 elif check_arm_arch 4T; then echo armv4t;
3065 elif check_arm_arch 5; then echo armv5;
3066 elif check_arm_arch 5E; then echo armv5e;
3067 elif check_arm_arch 5T; then echo armv5t;
3068 elif check_arm_arch 5TE; then echo armv5te;
3069 elif check_arm_arch 5TEJ; then echo armv5te;
3070 elif check_arm_arch 6; then echo armv6;
3071 elif check_arm_arch 6J; then echo armv6j;
3072 elif check_arm_arch 6K; then echo armv6k;
3073 elif check_arm_arch 6Z; then echo armv6z;
3074 elif check_arm_arch 6ZK; then echo armv6zk;
3075 elif check_arm_arch 6T2; then echo armv6t2;
3076 elif check_arm_arch 7; then echo armv7;
3077 elif check_arm_arch 7A 7_A; then echo armv7-a;
3078 elif check_arm_arch 7R 7_R; then echo armv7-r;
3079 elif check_arm_arch 7M 7_M; then echo armv7-m;
3080 elif check_arm_arch 7EM 7E_M; then echo armv7-m;
3081 elif check_arm_arch 8A 8_A; then echo armv8-a;
3082 fi
3083 }
3084
3085 [ "$cpu" = generic ] && cpu=$(probe_arm_arch)
3086
3087 case $cpu in
3088 armv*)
3089 cpuflags="-march=$cpu"
3090 subarch=$(echo $cpu | sed 's/[^a-z0-9]//g')
3091 ;;
3092 *)
3093 cpuflags="-mcpu=$cpu"
3094 case $cpu in
3095 cortex-a*) subarch=armv7a ;;
3096 cortex-r*) subarch=armv7r ;;
3097 cortex-m*) enable thumb; subarch=armv7m ;;
3098 arm11*) subarch=armv6 ;;
3099 arm[79]*e*|arm9[24]6*|arm96*|arm102[26]) subarch=armv5te ;;
3100 armv4*|arm7*|arm9[24]*) subarch=armv4 ;;
3101 *) subarch=$(probe_arm_arch) ;;
3102 esac
3103 ;;
3104 esac
3105
3106 case "$subarch" in
3107 armv5t*) enable fast_clz ;;
3108 armv[6-8]*) enable fast_clz fast_unaligned ;;
3109 esac
3110
3111 elif enabled avr32; then
3112
3113 case $cpu in
3114 ap7[02]0[0-2])
3115 subarch="avr32_ap"
3116 cpuflags="-mpart=$cpu"
3117 ;;
3118 ap)
3119 subarch="avr32_ap"
3120 cpuflags="-march=$cpu"
3121 ;;
3122 uc3[ab]*)
3123 subarch="avr32_uc"
3124 cpuflags="-mcpu=$cpu"
3125 ;;
3126 uc)
3127 subarch="avr32_uc"
3128 cpuflags="-march=$cpu"
3129 ;;
3130 esac
3131
3132 elif enabled bfin; then
3133
3134 cpuflags="-mcpu=$cpu"
3135
3136 elif enabled mips; then
3137
3138 cpuflags="-march=$cpu"
3139
3140 elif enabled ppc; then
3141
3142 disable ldbrx
3143
3144 case $(tolower $cpu) in
3145 601|ppc601|powerpc601)
3146 cpuflags="-mcpu=601"
3147 disable altivec
3148 ;;
3149 603*|ppc603*|powerpc603*)
3150 cpuflags="-mcpu=603"
3151 disable altivec
3152 ;;
3153 604*|ppc604*|powerpc604*)
3154 cpuflags="-mcpu=604"
3155 disable altivec
3156 ;;
3157 g3|75*|ppc75*|powerpc75*)
3158 cpuflags="-mcpu=750"
3159 disable altivec
3160 ;;
3161 g4|745*|ppc745*|powerpc745*)
3162 cpuflags="-mcpu=7450"
3163 ;;
3164 74*|ppc74*|powerpc74*)
3165 cpuflags="-mcpu=7400"
3166 ;;
3167 g5|970|ppc970|powerpc970)
3168 cpuflags="-mcpu=970"
3169 ;;
3170 power[3-7]*)
3171 cpuflags="-mcpu=$cpu"
3172 ;;
3173 cell)
3174 cpuflags="-mcpu=cell"
3175 enable ldbrx
3176 ;;
3177 e500mc)
3178 cpuflags="-mcpu=e500mc"
3179 disable altivec
3180 ;;
3181 e500v2)
3182 cpuflags="-mcpu=8548 -mhard-float -mfloat-gprs=double"
3183 disable altivec
3184 disable dcbzl
3185 ;;
3186 e500)
3187 cpuflags="-mcpu=8540 -mhard-float"
3188 disable altivec
3189 disable dcbzl
3190 ;;
3191 esac
3192
3193 elif enabled sparc; then
3194
3195 case $cpu in
3196 cypress|f93[04]|tsc701|sparcl*|supersparc|hypersparc|niagara|v[789])
3197 cpuflags="-mcpu=$cpu"
3198 ;;
3199 ultrasparc*|niagara[234])
3200 cpuflags="-mcpu=$cpu"
3201 ;;
3202 esac
3203
3204 elif enabled x86; then
3205
3206 case $cpu in
3207 i[345]86|pentium)
3208 cpuflags="-march=$cpu"
3209 disable mmx
3210 ;;
3211 # targets that do NOT support nopl and conditional mov (cmov)
3212 pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
3213 cpuflags="-march=$cpu"
3214 disable i686
3215 ;;
3216 # targets that do support nopl and conditional mov (cmov)
3217 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*)
3218 cpuflags="-march=$cpu"
3219 enable i686
3220 enable fast_cmov
3221 ;;
3222 # targets that do support conditional mov but on which it's slow
3223 pentium4|pentium4m|prescott|nocona)
3224 cpuflags="-march=$cpu"
3225 enable i686
3226 disable fast_cmov
3227 ;;
3228 esac
3229
3230 fi
3231
3232 if [ "$cpu" != generic ]; then
3233 add_cflags $cpuflags
3234 add_asflags $cpuflags
3235 fi
3236
3237 # compiler sanity check
3238 check_exec <<EOF
3239 int main(void){ return 0; }
3240 EOF
3241 if test "$?" != 0; then
3242 echo "$cc is unable to create an executable file."
3243 if test -z "$cross_prefix" && ! enabled cross_compile ; then
3244 echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
3245 echo "Only do this if you know what cross compiling means."
3246 fi
3247 die "C compiler test failed."
3248 fi
3249
3250 add_cppflags -D_ISOC99_SOURCE
3251 check_cflags -std=c99
3252 check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
3253 #include <stdlib.h>
3254 EOF
3255 check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
3256 #include <stdlib.h>
3257 EOF
3258
3259 add_host_cppflags -D_ISOC99_SOURCE
3260 check_host_cflags -std=c99
3261 check_host_cflags -Wall
3262 check_host_cflags -O3
3263
3264 check_64bit(){
3265 arch32=$1
3266 arch64=$2
3267 expr=$3
3268 check_code cc "" "int test[2*($expr) - 1]" &&
3269 subarch=$arch64 || subarch=$arch32
3270 }
3271
3272 case "$arch" in
3273 aarch64|alpha|ia64)
3274 spic=$shared
3275 ;;
3276 mips)
3277 check_64bit mips mips64 '_MIPS_SIM > 1'
3278 spic=$shared
3279 ;;
3280 parisc)
3281 check_64bit parisc parisc64 'sizeof(void *) > 4'
3282 spic=$shared
3283 ;;
3284 ppc)
3285 check_64bit ppc ppc64 'sizeof(void *) > 4'
3286 spic=$shared
3287 ;;
3288 s390)
3289 check_64bit s390 s390x 'sizeof(void *) > 4'
3290 spic=$shared
3291 ;;
3292 sparc)
3293 check_64bit sparc sparc64 'sizeof(void *) > 4'
3294 spic=$shared
3295 ;;
3296 x86)
3297 check_64bit x86_32 x86_64 'sizeof(void *) > 4'
3298 if test "$subarch" = "x86_64"; then
3299 spic=$shared
3300 fi
3301 ;;
3302 esac
3303
3304 enable $subarch
3305 enabled spic && enable_weak pic
3306
3307 # OS specific
3308 case $target_os in
3309 aix)
3310 SHFLAGS=-shared
3311 add_cppflags '-I\$(SRC_PATH)/compat/aix'
3312 enabled shared && add_ldflags -Wl,-brtl
3313 ;;
3314 haiku)
3315 prefix_default="/boot/common"
3316 network_extralibs="-lnetwork"
3317 host_libs=
3318 ;;
3319 sunos)
3320 SHFLAGS='-shared -Wl,-h,$$(@F)'
3321 enabled x86 && SHFLAGS="-mimpure-text $SHFLAGS"
3322 network_extralibs="-lsocket -lnsl"
3323 # When using suncc to build, the Solaris linker will mark
3324 # an executable with each instruction set encountered by
3325 # the Solaris assembler. As our libraries contain their own
3326 # guards for processor-specific code, instead suppress
3327 # generation of the HWCAPS ELF section on Solaris x86 only.
3328 enabled_all suncc x86 &&
3329 echo "hwcap_1 = OVERRIDE;" > mapfile &&
3330 add_ldflags -Wl,-M,mapfile
3331 nm_default='nm -P -g'
3332 ;;
3333 netbsd)
3334 disable symver
3335 oss_indev_extralibs="-lossaudio"
3336 oss_outdev_extralibs="-lossaudio"
3337 ;;
3338 openbsd|bitrig)
3339 disable symver
3340 SHFLAGS='-shared'
3341 SLIB_INSTALL_NAME='$(SLIBNAME).$(LIBMAJOR).$(LIBMINOR)'
3342 SLIB_INSTALL_LINKS=
3343 oss_indev_extralibs="-lossaudio"
3344 oss_outdev_extralibs="-lossaudio"
3345 ;;
3346 dragonfly)
3347 disable symver
3348 ;;
3349 freebsd)
3350 ;;
3351 bsd/os)
3352 add_extralibs -lpoll -lgnugetopt
3353 ;;
3354 darwin)
3355 gas="gas-preprocessor.pl $cc"
3356 enabled ppc && add_asflags -force_cpusubtype_ALL
3357 SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR)'
3358 enabled x86_32 && append SHFLAGS -Wl,-read_only_relocs,suppress
3359 add_ldflags -Wl,-dynamic,-search_paths_first
3360 SLIBSUF=".dylib"
3361 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
3362 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
3363 objformat="macho"
3364 enabled x86_64 && objformat="macho64"
3365 enabled_any pic shared ||
3366 { check_cflags -mdynamic-no-pic && add_asflags -mdynamic-no-pic; }
3367 ;;
3368 mingw32*)
3369 if test $target_os = "mingw32ce"; then
3370 disable network
3371 else
3372 target_os=mingw32
3373 fi
3374 LIBTARGET=i386
3375 if enabled x86_64; then
3376 LIBTARGET="i386:x86-64"
3377 elif enabled arm; then
3378 LIBTARGET=arm-wince
3379 fi
3380 check_ldflags -Wl,--nxcompat
3381 check_ldflags -Wl,--dynamicbase
3382 shlibdir_default="$bindir_default"
3383 SLIBPREF=""
3384 SLIBSUF=".dll"
3385 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
3386 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
3387 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)'
3388 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
3389 SLIB_INSTALL_LINKS=
3390 SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
3391 SLIB_INSTALL_EXTRA_LIB='lib$(SLIBNAME:$(SLIBSUF)=.dll.a) $(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
3392 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'
3393 objformat="win32"
3394 dlltool="${cross_prefix}dlltool"
3395 ranlib=:
3396 enable dos_paths
3397 ;;
3398 win32|win64)
3399 disable symver
3400 if enabled shared; then
3401 # Link to the import library instead of the normal static library
3402 # for shared libs.
3403 LD_LIB='%.lib'
3404 # Cannot build both shared and static libs with MSVC or icl.
3405 disable static
3406 fi
3407 shlibdir_default="$bindir_default"
3408 SLIBPREF=""
3409 SLIBSUF=".dll"
3410 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
3411 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
3412 SLIB_CREATE_DEF_CMD='$(SRC_PATH)/compat/windows/makedef $(SUBDIR)lib$(NAME).ver $(OBJS) > $$(@:$(SLIBSUF)=.def)'
3413 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
3414 SLIB_INSTALL_LINKS=
3415 SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
3416 SLIB_INSTALL_EXTRA_LIB='$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
3417 SHFLAGS='-dll -def:$$(@:$(SLIBSUF)=.def) -implib:$(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib)'
3418 objformat="win32"
3419 ranlib=:
3420 enable dos_paths
3421 ;;
3422 cygwin*)
3423 target_os=cygwin
3424 shlibdir_default="$bindir_default"
3425 SLIBPREF="cyg"
3426 SLIBSUF=".dll"
3427 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
3428 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
3429 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
3430 SLIB_INSTALL_LINKS=
3431 SLIB_INSTALL_EXTRA_LIB='lib$(FULLNAME).dll.a'
3432 SHFLAGS='-shared -Wl,--out-implib,$(SUBDIR)lib$(FULLNAME).dll.a'
3433 objformat="win32"
3434 enable dos_paths
3435 ;;
3436 *-dos|freedos|opendos)
3437 network_extralibs="-lsocket"
3438 objformat="coff"
3439 enable dos_paths
3440 add_cppflags -U__STRICT_ANSI__
3441 ;;
3442 linux)
3443 enable dv1394
3444 ;;
3445 irix*)
3446 target_os=irix
3447 ranlib="echo ignoring ranlib"
3448 ;;
3449 os/2*)
3450 ln_s="cp -f"
3451 objformat="aout"
3452 add_cppflags -D_GNU_SOURCE
3453 add_ldflags -Zomf -Zbin-files -Zargs-wild -Zmap
3454 SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
3455 LIBSUF="_s.a"
3456 SLIBPREF=""
3457 SLIBSUF=".dll"
3458 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
3459 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
3460 SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
3461 echo PROTMODE >> $(SUBDIR)$(NAME).def; \
3462 echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
3463 echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
3464 echo EXPORTS >> $(SUBDIR)$(NAME).def; \
3465 emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
3466 SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
3467 emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
3468 SLIB_INSTALL_EXTRA_LIB='$(LIBPREF)$(NAME)_dll.a $(LIBPREF)$(NAME)_dll.lib'
3469 enable dos_paths
3470 ;;
3471 gnu/kfreebsd)
3472 add_cppflags -D_BSD_SOURCE
3473 ;;
3474 gnu)
3475 ;;
3476 qnx)
3477 add_cppflags -D_QNX_SOURCE
3478 network_extralibs="-lsocket"
3479 ;;
3480 symbian)
3481 SLIBSUF=".dll"
3482 enable dos_paths
3483 add_cflags --include=$sysinclude/gcce/gcce.h -fvisibility=default
3484 add_cppflags -D__GCCE__ -D__SYMBIAN32__ -DSYMBIAN_OE_POSIX_SIGNALS
3485 add_ldflags -Wl,--target1-abs,--no-undefined \
3486 -Wl,-Ttext,0x80000,-Tdata,0x1000000 -shared \
3487 -Wl,--entry=_E32Startup -Wl,-u,_E32Startup
3488 add_extralibs -l:eexe.lib -l:usrt2_2.lib -l:dfpaeabi.dso \
3489 -l:drtaeabi.dso -l:scppnwdl.dso -lsupc++ -lgcc \
3490 -l:libc.dso -l:libm.dso -l:euser.dso -l:libcrt0.lib
3491 ;;
3492 osf1)
3493 add_cppflags -D_OSF_SOURCE -D_POSIX_PII -D_REENTRANT
3494 ;;
3495 minix)
3496 ;;
3497 plan9)
3498 add_cppflags -D_C99_SNPRINTF_EXTENSION \
3499 -D_REENTRANT_SOURCE \
3500 -D_RESEARCH_SOURCE \
3501 -DFD_SETSIZE=96 \
3502 -DHAVE_SOCK_OPTS
3503 add_compat strtod.o strtod=avpriv_strtod
3504 network_extralibs='-lbsd'
3505 exeobjs=compat/plan9/main.o
3506 disable avserver
3507 cp_f='cp'
3508 ;;
3509 none)
3510 ;;
3511 *)
3512 die "Unknown OS '$target_os'."
3513 ;;
3514 esac
3515
3516 # determine libc flavour
3517
3518 probe_libc(){
3519 pfx=$1
3520 pfx_no_=${pfx%_}
3521 # uclibc defines __GLIBC__, so it needs to be checked before glibc.
3522 if check_${pfx}cpp_condition features.h "defined __UCLIBC__"; then
3523 eval ${pfx}libc_type=uclibc
3524 add_${pfx}cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
3525 elif check_${pfx}cpp_condition features.h "defined __GLIBC__"; then
3526 eval ${pfx}libc_type=glibc
3527 add_${pfx}cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
3528 # MinGW headers can be installed on Cygwin, so check for newlib first.
3529 elif check_${pfx}cpp_condition newlib.h "defined _NEWLIB_VERSION"; then
3530 eval ${pfx}libc_type=newlib
3531 add_${pfx}cppflags -U__STRICT_ANSI__
3532 # MinGW64 is backwards compatible with MinGW32, so check for it first.
3533 elif check_${pfx}cpp_condition _mingw.h "defined __MINGW64_VERSION_MAJOR"; then
3534 eval ${pfx}libc_type=mingw64
3535 add_${pfx}cppflags -U__STRICT_ANSI__ -D__USE_MINGW_ANSI_STDIO=1
3536 eval test \$${pfx_no_}cc_type = "gcc" &&
3537 add_${pfx}cppflags -D__printf__=__gnu_printf__
3538 elif check_${pfx}cpp_condition _mingw.h "defined __MINGW_VERSION" ||
3539 check_${pfx}cpp_condition _mingw.h "defined __MINGW32_VERSION"; then
3540 eval ${pfx}libc_type=mingw32
3541 check_${pfx}cpp_condition _mingw.h "__MINGW32_MAJOR_VERSION > 3 || \
3542 (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
3543 die "ERROR: MinGW32 runtime version must be >= 3.15."
3544 add_${pfx}cppflags -U__STRICT_ANSI__ -D__USE_MINGW_ANSI_STDIO=1
3545 eval test \$${pfx_no_}cc_type = "gcc" &&
3546 add_${pfx}cppflags -D__printf__=__gnu_printf__
3547 elif check_${pfx}cpp_condition crtversion.h "defined _VC_CRT_MAJOR_VERSION"; then
3548 eval ${pfx}libc_type=msvcrt
3549 # The MSVC 2010 headers (Win 7.0 SDK) set _WIN32_WINNT to
3550 # 0x601 by default unless something else is set by the user.
3551 # This can easily lead to us detecting functions only present
3552 # in such new versions and producing binaries requiring windows 7.0.
3553 # Therefore explicitly set the default to XP unless the user has
3554 # set something else on the command line.
3555 check_${pfx}cpp_condition stdlib.h "defined(_WIN32_WINNT)" ||
3556 add_${pfx}cppflags -D_WIN32_WINNT=0x0502
3557 elif check_${pfx}cpp_condition stddef.h "defined __KLIBC__"; then
3558 eval ${pfx}libc_type=klibc
3559 elif check_${pfx}cpp_condition sys/cdefs.h "defined __BIONIC__"; then
3560 eval ${pfx}libc_type=bionic
3561 elif check_${pfx}cpp_condition sys/brand.h "defined LABELED_BRAND_NAME"; then
3562 eval ${pfx}libc_type=solaris
3563 add_${pfx}cppflags -D__EXTENSIONS__ -D_XOPEN_SOURCE=600
3564 fi
3565 }
3566
3567 probe_libc
3568 test -n "$libc_type" && enable libc_$libc_type
3569 probe_libc host_
3570 test -n "$host_libc_type" && enable host_libc_$host_libc_type
3571
3572 case $libc_type in
3573 bionic)
3574 add_compat strtod.o strtod=avpriv_strtod
3575 ;;
3576 msvcrt)
3577 add_compat strtod.o strtod=avpriv_strtod
3578 add_compat msvcrt/snprintf.o snprintf=avpriv_snprintf \
3579 _snprintf=avpriv_snprintf \
3580 vsnprintf=avpriv_vsnprintf
3581 ;;
3582 esac
3583
3584 # hacks for compiler/libc/os combinations
3585
3586 if enabled_all tms470 libc_glibc; then
3587 CPPFLAGS="-I${source_path}/compat/tms470 ${CPPFLAGS}"
3588 add_cppflags -D__USER_LABEL_PREFIX__=
3589 add_cppflags -D__builtin_memset=memset
3590 add_cppflags -D__gnuc_va_list=va_list -D_VA_LIST_DEFINED
3591 add_cflags -pds=48 # incompatible redefinition of macro
3592 fi
3593
3594 if enabled_all ccc libc_glibc; then
3595 add_ldflags -Wl,-z,now # calls to libots crash without this
3596 fi
3597
3598 check_compile_assert flt_lim "float.h limits.h" "DBL_MAX == (double)DBL_MAX" ||
3599 add_cppflags '-I\$(SRC_PATH)/compat/float'
3600
3601 esc(){
3602 echo "$*" | sed 's/%/%25/g;s/:/%3a/g'
3603 }
3604
3605 echo "config:$arch:$subarch:$cpu:$target_os:$(esc $cc_ident):$(esc $LIBAV_CONFIGURATION)" >config.fate
3606
3607 check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable_weak pic
3608
3609 set_default $PATHS_LIST
3610 set_default nm
3611
3612 # we need to build at least one lib type
3613 if ! enabled_any static shared; then
3614 cat <<EOF
3615 At least one library type must be built.
3616 Specify --enable-static to build the static libraries or --enable-shared to
3617 build the shared libraries as well. To only build the shared libraries specify
3618 --disable-static in addition to --enable-shared.
3619 EOF
3620 exit 1;
3621 fi
3622
3623 die_license_disabled() {
3624 enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
3625 }
3626
3627 die_license_disabled gpl libcdio
3628 die_license_disabled gpl libx264
3629 die_license_disabled gpl libx265
3630 die_license_disabled gpl libxavs
3631 die_license_disabled gpl libxvid
3632 die_license_disabled gpl x11grab
3633
3634 die_license_disabled nonfree libfaac
3635 die_license_disabled nonfree libfdk_aac
3636 die_license_disabled nonfree openssl
3637
3638 die_license_disabled version3 libopencore_amrnb
3639 die_license_disabled version3 libopencore_amrwb
3640 die_license_disabled version3 libvo_aacenc
3641 die_license_disabled version3 libvo_amrwbenc
3642
3643 enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
3644
3645 disabled optimizations || check_cflags -fomit-frame-pointer
3646
3647 enable_weak_pic() {
3648 disabled pic && return
3649 enable pic
3650 add_cppflags -DPIC
3651 case "$target_os" in
3652 mingw*|cygwin*)
3653 ;;
3654 *)
3655 add_cflags -fPIC
3656 ;;
3657 esac
3658 add_asflags -fPIC
3659 }
3660
3661 enabled pic && enable_weak_pic
3662
3663 check_cc <<EOF || die "Symbol mangling check failed."
3664 int ff_extern;
3665 EOF
3666 sym=$($nm $TMPO | awk '/ff_extern/{ print substr($0, match($0, /[^ \t]*ff_extern/)) }')
3667 extern_prefix=${sym%%ff_extern*}
3668
3669 check_cc <<EOF && enable_weak inline_asm
3670 void foo(void) { __asm__ volatile ("" ::); }
3671 EOF
3672
3673 _restrict=
3674 for restrict_keyword in restrict __restrict__ __restrict; do
3675 check_cc <<EOF && _restrict=$restrict_keyword && break
3676 void foo(char * $restrict_keyword p);
3677 EOF
3678 done
3679
3680 check_cc <<EOF && enable pragma_deprecated
3681 void foo(void) { _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") }
3682 EOF
3683
3684 check_cc <<EOF && enable attribute_packed
3685 struct { int x; } __attribute__((packed)) x;
3686 EOF
3687
3688 check_cc <<EOF && enable attribute_may_alias
3689 union { int x; } __attribute__((may_alias)) x;
3690 EOF
3691
3692 check_cc <<EOF || die "endian test failed"
3693 unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
3694 EOF
3695 od -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
3696
3697 check_inline_asm inline_asm_labels '"1:\n"'
3698
3699 if enabled aarch64; then
3700 # internal assembler in clang 3.3 does not support this instruction
3701 enabled neon && check_insn neon 'ext v0.8B, v0.8B, v1.8B, #1'
3702 enabled vfp && check_insn vfp 'fmadd d0, d0, d1, d2'
3703
3704 map 'enabled_any ${v}_external ${v}_inline || disable $v' $ARCH_EXT_LIST_ARM
3705