ecccd21b07d2a6a1f8bf0f6161a645027ae868f0
[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 dsputil
1516 gcrypt
1517 golomb
1518 gplv3
1519 h263dsp
1520 h264chroma
1521 h264dsp
1522 h264pred
1523 h264qpel
1524 hpeldsp
1525 huffman
1526 intrax8
1527 lgplv3
1528 lpc
1529 mpegaudio
1530 mpegaudiodsp
1531 mpegvideo
1532 mpegvideoenc
1533 nettle
1534 rangecoder
1535 riffdec
1536 riffenc
1537 rtpdec
1538 rtpenc_chain
1539 sinewin
1540 videodsp
1541 vp3dsp
1542 "
1543
1544 CMDLINE_SELECT="
1545 $ARCH_EXT_LIST
1546 $CONFIG_LIST
1547 $HAVE_LIST_CMDLINE
1548 $THREADS_LIST
1549 asm
1550 cross_compile
1551 debug
1552 extra_warnings
1553 logging
1554 lto
1555 optimizations
1556 "
1557
1558 PATHS_LIST="
1559 bindir
1560 datadir
1561 docdir
1562 incdir
1563 libdir
1564 mandir
1565 prefix
1566 shlibdir
1567 "
1568
1569 CMDLINE_SET="
1570 $PATHS_LIST
1571 ar
1572 arch
1573 as
1574 build_suffix
1575 cc
1576 cpu
1577 cross_prefix
1578 dep_cc
1579 extra_version
1580 host_cc
1581 host_cflags
1582 host_ld
1583 host_ldflags
1584 host_libs
1585 host_os
1586 ld
1587 logfile
1588 malloc_prefix
1589 nm
1590 optflags
1591 pkg_config
1592 pkg_config_flags
1593 random_seed
1594 samples
1595 sysinclude
1596 sysroot
1597 target_exec
1598 target_os
1599 target_path
1600 target_samples
1601 toolchain
1602 "
1603
1604 CMDLINE_APPEND="
1605 extra_cflags
1606 host_cppflags
1607 "
1608
1609 # code dependency declarations
1610
1611 # architecture extensions
1612
1613 armv5te_deps="arm"
1614 armv6_deps="arm"
1615 armv6t2_deps="arm"
1616 neon_deps_any="aarch64 arm"
1617 vfp_deps_any="aarch64 arm"
1618 vfpv3_deps="vfp"
1619
1620 map 'eval ${v}_inline_deps=inline_asm' $ARCH_EXT_LIST_ARM
1621
1622 altivec_deps="ppc"
1623 ppc4xx_deps="ppc"
1624
1625 cpunop_deps="i686"
1626 x86_64_select="i686"
1627 x86_64_suggest="fast_cmov"
1628
1629 amd3dnow_deps="mmx"
1630 amd3dnowext_deps="amd3dnow"
1631 i686_deps="x86"
1632 mmx_deps="x86"
1633 mmxext_deps="mmx"
1634 sse_deps="mmxext"
1635 sse2_deps="sse"
1636 sse3_deps="sse2"
1637 ssse3_deps="sse3"
1638 sse4_deps="ssse3"
1639 sse42_deps="sse4"
1640 avx_deps="sse42"
1641 xop_deps="avx"
1642 fma3_deps="avx"
1643 fma4_deps="avx"
1644 avx2_deps="avx"
1645
1646 mmx_external_deps="yasm"
1647 mmx_inline_deps="inline_asm"
1648 mmx_suggest="mmx_external mmx_inline"
1649
1650 for ext in $(filter_out mmx $ARCH_EXT_LIST_X86_SIMD); do
1651 eval dep=\$${ext}_deps
1652 eval ${ext}_external_deps='"${dep}_external"'
1653 eval ${ext}_inline_deps='"${dep}_inline"'
1654 eval ${ext}_suggest='"${ext}_external ${ext}_inline"'
1655 done
1656
1657 aligned_stack_if_any="aarch64 ppc x86"
1658 fast_64bit_if_any="aarch64 alpha ia64 mips64 parisc64 ppc64 sparc64 x86_64"
1659 fast_clz_if_any="aarch64 alpha avr32 mips ppc x86"
1660 fast_unaligned_if_any="aarch64 ppc x86"
1661
1662 need_memalign="altivec neon sse"
1663
1664 # system capabilities
1665 log2_deps="!libc_msvcrt"
1666
1667 symver_if_any="symver_asm_label symver_gnu_asm"
1668
1669 # threading support
1670 atomics_gcc_if="sync_val_compare_and_swap"
1671 atomics_suncc_if="atomic_cas_ptr machine_rw_barrier"
1672 atomics_win32_if="MemoryBarrier"
1673 atomics_native_if_any="$ATOMICS_LIST"
1674 w32threads_deps="atomics_native"
1675 threads_if_any="$THREADS_LIST"
1676
1677 # subsystems
1678 dct_select="rdft"
1679 error_resilience_select="dsputil"
1680 mdct_select="fft"
1681 rdft_select="fft"
1682 mpegaudio_select="mpegaudiodsp"
1683 mpegaudiodsp_select="dct"
1684 mpegvideo_select="dsputil hpeldsp videodsp"
1685 mpegvideoenc_select="dsputil mpegvideo"
1686
1687 # decoders / encoders
1688 aac_decoder_select="mdct sinewin"
1689 aac_encoder_select="audio_frame_queue mdct sinewin"
1690 aac_latm_decoder_select="aac_decoder aac_latm_parser"
1691 ac3_decoder_select="mdct ac3dsp ac3_parser dsputil"
1692 ac3_encoder_select="mdct ac3dsp dsputil"
1693 ac3_fixed_encoder_select="mdct ac3dsp dsputil"
1694 aic_decoder_select="dsputil golomb"
1695 alac_encoder_select="lpc"
1696 als_decoder_select="dsputil"
1697 amrnb_decoder_select="lsp"
1698 amrwb_decoder_select="lsp"
1699 amv_decoder_select="sp5x_decoder"
1700 ape_decoder_select="dsputil"
1701 asv1_decoder_select="dsputil"
1702 asv1_encoder_select="dsputil"
1703 asv2_decoder_select="dsputil"
1704 asv2_encoder_select="dsputil"
1705 atrac1_decoder_select="mdct sinewin"
1706 atrac3_decoder_select="mdct"
1707 atrac3p_decoder_select="mdct sinewin"
1708 bink_decoder_select="dsputil hpeldsp"
1709 binkaudio_dct_decoder_select="mdct rdft dct sinewin"
1710 binkaudio_rdft_decoder_select="mdct rdft sinewin"
1711 cavs_decoder_select="dsputil golomb h264chroma videodsp"
1712 cllc_decoder_select="dsputil"
1713 comfortnoise_encoder_select="lpc"
1714 cook_decoder_select="dsputil mdct sinewin"
1715 cscd_decoder_select="lzo"
1716 cscd_decoder_suggest="zlib"
1717 dca_decoder_select="mdct"
1718 dnxhd_decoder_select="dsputil"
1719 dnxhd_encoder_select="aandcttables dsputil mpegvideoenc"
1720 dvvideo_decoder_select="dsputil"
1721 dvvideo_encoder_select="dsputil"
1722 dxa_decoder_deps="zlib"
1723 eac3_decoder_select="ac3_decoder"
1724 eac3_encoder_select="ac3_encoder"
1725 eamad_decoder_select="aandcttables dsputil mpegvideo"
1726 eatgq_decoder_select="aandcttables dsputil"
1727 eatqi_decoder_select="aandcttables dsputil error_resilience mpegvideo"
1728 ffv1_decoder_select="golomb rangecoder"
1729 ffv1_encoder_select="rangecoder"
1730 ffvhuff_decoder_select="huffyuv_decoder"
1731 ffvhuff_encoder_select="huffyuv_encoder"
1732 fic_decoder_select="dsputil golomb"
1733 flac_decoder_select="golomb"
1734 flac_encoder_select="dsputil golomb lpc"
1735 flashsv_decoder_deps="zlib"
1736 flashsv_encoder_deps="zlib"
1737 flashsv2_decoder_deps="zlib"
1738 flv_decoder_select="h263_decoder"
1739 flv_encoder_select="h263_encoder"
1740 fourxm_decoder_select="dsputil"
1741 fraps_decoder_select="dsputil huffman"
1742 g2m_decoder_deps="zlib"
1743 g2m_decoder_select="dsputil"
1744 h261_decoder_select="error_resilience mpegvideo"
1745 h261_encoder_select="aandcttables mpegvideoenc"
1746 h263_decoder_select="error_resilience h263_parser h263dsp mpegvideo"
1747 h263_encoder_select="aandcttables h263dsp mpegvideoenc"
1748 h263i_decoder_select="h263_decoder"
1749 h263p_encoder_select="h263_encoder"
1750 h264_decoder_select="golomb h264chroma h264dsp h264pred h264qpel videodsp"
1751 h264_decoder_suggest="error_resilience"
1752 hevc_decoder_select="dsputil golomb videodsp"
1753 huffyuv_decoder_select="dsputil"
1754 huffyuv_encoder_select="dsputil huffman"
1755 iac_decoder_select="imc_decoder"
1756 imc_decoder_select="dsputil fft mdct sinewin"
1757 indeo3_decoder_select="hpeldsp"
1758 interplay_video_decoder_select="hpeldsp"
1759 jpegls_decoder_select="golomb mjpeg_decoder"
1760 jpegls_encoder_select="golomb"
1761 jv_decoder_select="dsputil"
1762 lagarith_decoder_select="dsputil"
1763 ljpeg_encoder_select="aandcttables mpegvideoenc"
1764 loco_decoder_select="golomb"
1765 mdec_decoder_select="dsputil error_resilience mpegvideo"
1766 metasound_decoder_select="lsp mdct sinewin"
1767 mimic_decoder_select="dsputil hpeldsp"
1768 mjpeg_decoder_select="dsputil hpeldsp"
1769 mjpeg_encoder_select="aandcttables mpegvideoenc"
1770 mjpegb_decoder_select="mjpeg_decoder"
1771 mlp_decoder_select="mlp_parser"
1772 motionpixels_decoder_select="dsputil"
1773 mp1_decoder_select="mpegaudio"
1774 mp1float_decoder_select="mpegaudio"
1775 mp2_decoder_select="mpegaudio"
1776 mp2float_decoder_select="mpegaudio"
1777 mp3_decoder_select="mpegaudio"
1778 mp3adu_decoder_select="mpegaudio"
1779 mp3adufloat_decoder_select="mpegaudio"
1780 mp3float_decoder_select="mpegaudio"
1781 mp3on4_decoder_select="mpegaudio"
1782 mp3on4float_decoder_select="mpegaudio"
1783 mpc7_decoder_select="dsputil mpegaudiodsp"
1784 mpc8_decoder_select="mpegaudiodsp"
1785 mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h"
1786 mpeg_xvmc_decoder_select="mpeg2video_decoder"
1787 mpeg1video_decoder_select="error_resilience mpegvideo"
1788 mpeg1video_encoder_select="aandcttables mpegvideoenc"
1789 mpeg2video_decoder_select="error_resilience mpegvideo"
1790 mpeg2video_encoder_select="aandcttables mpegvideoenc"
1791 mpeg4_decoder_select="h263_decoder mpeg4video_parser"
1792 mpeg4_encoder_select="h263_encoder"
1793 msmpeg4v1_decoder_select="h263_decoder"
1794 msmpeg4v2_decoder_select="h263_decoder"
1795 msmpeg4v2_encoder_select="h263_encoder"
1796 msmpeg4v3_decoder_select="h263_decoder"
1797 msmpeg4v3_encoder_select="h263_encoder"
1798 mss2_decoder_select="error_resilience vc1_decoder"
1799 mxpeg_decoder_select="mjpeg_decoder"
1800 nellymoser_decoder_select="mdct sinewin"
1801 nellymoser_encoder_select="audio_frame_queue mdct sinewin"
1802 nuv_decoder_select="dsputil lzo"
1803 png_decoder_deps="zlib"
1804 png_encoder_deps="zlib"
1805 png_encoder_select="dsputil"
1806 prores_decoder_select="dsputil"
1807 prores_encoder_select="dsputil"
1808 qcelp_decoder_select="lsp"
1809 qdm2_decoder_select="mdct rdft mpegaudiodsp"
1810 ra_144_encoder_select="audio_frame_queue lpc"
1811 ralf_decoder_select="golomb"
1812 rv10_decoder_select="error_resilience h263_decoder h263dsp"
1813 rv10_encoder_select="h263_encoder"
1814 rv20_decoder_select="error_resilience h263_decoder h263dsp"
1815 rv20_encoder_select="h263_encoder"
1816 rv30_decoder_select="error_resilience golomb h264chroma h264pred h264qpel mpegvideo videodsp"
1817 rv40_decoder_select="error_resilience golomb h264chroma h264pred h264qpel mpegvideo videodsp"
1818 shorten_decoder_select="golomb"
1819 sipr_decoder_select="lsp"
1820 sp5x_decoder_select="mjpeg_decoder"
1821 svq1_decoder_select="hpeldsp"
1822 svq1_encoder_select="aandcttables dsputil hpeldsp mpegvideoenc"
1823 svq3_decoder_select="h264_decoder hpeldsp mpegvideo"
1824 svq3_decoder_suggest="zlib"
1825 tak_decoder_select="dsputil"
1826 theora_decoder_select="vp3_decoder"
1827 thp_decoder_select="mjpeg_decoder"
1828 tiff_decoder_suggest="zlib"
1829 tiff_encoder_suggest="zlib"
1830 truehd_decoder_select="mlp_decoder"
1831 truemotion2_decoder_select="dsputil"
1832 truespeech_decoder_select="dsputil"
1833 tscc_decoder_deps="zlib"
1834 twinvq_decoder_select="mdct lsp sinewin"
1835 utvideo_decoder_select="dsputil"
1836 utvideo_encoder_select="dsputil huffman"
1837 vble_decoder_select="dsputil"
1838 vc1_decoder_select="error_resilience h263_decoder h264chroma h264qpel intrax8"
1839 vc1image_decoder_select="vc1_decoder"
1840 vorbis_decoder_select="mdct"
1841 vorbis_encoder_select="mdct"
1842 vp3_decoder_select="hpeldsp vp3dsp videodsp"
1843 vp5_decoder_select="h264chroma hpeldsp videodsp vp3dsp"
1844 vp6_decoder_select="h264chroma hpeldsp huffman videodsp vp3dsp"
1845 vp6a_decoder_select="vp6_decoder"
1846 vp6f_decoder_select="vp6_decoder"
1847 vp8_decoder_select="h264pred videodsp"
1848 vp9_decoder_select="videodsp"
1849 webp_decoder_select="vp8_decoder"
1850 wmapro_decoder_select="mdct sinewin"
1851 wmav1_decoder_select="mdct sinewin"
1852 wmav1_encoder_select="mdct sinewin"
1853 wmav2_decoder_select="mdct sinewin"
1854 wmav2_encoder_select="mdct sinewin"
1855 wmavoice_decoder_select="lsp rdft dct mdct sinewin"
1856 wmv1_decoder_select="h263_decoder"
1857 wmv1_encoder_select="h263_encoder"
1858 wmv2_decoder_select="h263_decoder intrax8 videodsp"
1859 wmv2_encoder_select="h263_encoder"
1860 wmv3_decoder_select="vc1_decoder"
1861 wmv3image_decoder_select="wmv3_decoder"
1862 zerocodec_decoder_deps="zlib"
1863 zlib_decoder_deps="zlib"
1864 zlib_encoder_deps="zlib"
1865 zmbv_decoder_deps="zlib"
1866 zmbv_encoder_deps="zlib"
1867
1868 # hardware accelerators
1869 dxva2_deps="dxva2api_h"
1870 vaapi_deps="va_va_h"
1871 vda_deps="VideoDecodeAcceleration_VDADecoder_h pthreads"
1872 vda_extralibs="-framework CoreFoundation -framework VideoDecodeAcceleration -framework QuartzCore"
1873 vdpau_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1874
1875 h263_vaapi_hwaccel_deps="vaapi"
1876 h263_vaapi_hwaccel_select="h263_decoder"
1877 h263_vdpau_hwaccel_deps="vdpau"
1878 h263_vdpau_hwaccel_select="h263_decoder"
1879 h264_dxva2_hwaccel_deps="dxva2"
1880 h264_dxva2_hwaccel_select="h264_decoder"
1881 h264_vaapi_hwaccel_deps="vaapi"
1882 h264_vaapi_hwaccel_select="h264_decoder"
1883 h264_vda_hwaccel_deps="vda"
1884 h264_vda_hwaccel_select="h264_decoder"
1885 h264_vdpau_hwaccel_deps="vdpau"
1886 h264_vdpau_hwaccel_select="h264_decoder"
1887 mpeg1_vdpau_hwaccel_deps="vdpau"
1888 mpeg1_vdpau_hwaccel_select="mpeg1video_decoder"
1889 mpeg2_dxva2_hwaccel_deps="dxva2"
1890 mpeg2_dxva2_hwaccel_select="mpeg2video_decoder"
1891 mpeg2_vaapi_hwaccel_deps="vaapi"
1892 mpeg2_vaapi_hwaccel_select="mpeg2video_decoder"
1893 mpeg2_vdpau_hwaccel_deps="vdpau"
1894 mpeg2_vdpau_hwaccel_select="mpeg2video_decoder"
1895 mpeg4_vaapi_hwaccel_deps="vaapi"
1896 mpeg4_vaapi_hwaccel_select="mpeg4_decoder"
1897 mpeg4_vdpau_hwaccel_deps="vdpau"
1898 mpeg4_vdpau_hwaccel_select="mpeg4_decoder"
1899 vc1_dxva2_hwaccel_deps="dxva2"
1900 vc1_dxva2_hwaccel_select="vc1_decoder"
1901 vc1_vaapi_hwaccel_deps="vaapi"
1902 vc1_vaapi_hwaccel_select="vc1_decoder"
1903 vc1_vdpau_hwaccel_deps="vdpau"
1904 vc1_vdpau_hwaccel_select="vc1_decoder"
1905 wmv3_dxva2_hwaccel_select="vc1_dxva2_hwaccel"
1906 wmv3_vaapi_hwaccel_select="vc1_vaapi_hwaccel"
1907 wmv3_vdpau_hwaccel_select="vc1_vdpau_hwaccel"
1908
1909 # parsers
1910 h264_parser_select="golomb h264chroma h264dsp h264pred h264qpel videodsp"
1911 mpeg4video_parser_select="error_resilience h263dsp mpegvideo"
1912 mpegvideo_parser_select="error_resilience mpegvideo"
1913 vc1_parser_select="mpegvideo"
1914
1915 # external libraries
1916 libfaac_encoder_deps="libfaac"
1917 libfaac_encoder_select="audio_frame_queue"
1918 libfdk_aac_decoder_deps="libfdk_aac"
1919 libfdk_aac_encoder_deps="libfdk_aac"
1920 libfdk_aac_encoder_select="audio_frame_queue"
1921 libgsm_decoder_deps="libgsm"
1922 libgsm_encoder_deps="libgsm"
1923 libgsm_ms_decoder_deps="libgsm"
1924 libgsm_ms_encoder_deps="libgsm"
1925 libilbc_decoder_deps="libilbc"
1926 libilbc_encoder_deps="libilbc"
1927 libmp3lame_encoder_deps="libmp3lame"
1928 libmp3lame_encoder_select="audio_frame_queue"
1929 libopencore_amrnb_decoder_deps="libopencore_amrnb"
1930 libopencore_amrnb_encoder_deps="libopencore_amrnb"
1931 libopencore_amrnb_encoder_select="audio_frame_queue"
1932 libopencore_amrwb_decoder_deps="libopencore_amrwb"
1933 libopenjpeg_decoder_deps="libopenjpeg"
1934 libopenjpeg_encoder_deps="libopenjpeg"
1935 libopus_decoder_deps="libopus"
1936 libopus_encoder_deps="libopus"
1937 libopus_encoder_select="audio_frame_queue"
1938 libschroedinger_decoder_deps="libschroedinger"
1939 libschroedinger_encoder_deps="libschroedinger"
1940 libspeex_decoder_deps="libspeex"
1941 libspeex_encoder_deps="libspeex"
1942 libspeex_encoder_select="audio_frame_queue"
1943 libtheora_encoder_deps="libtheora"
1944 libvo_aacenc_encoder_deps="libvo_aacenc"
1945 libvo_aacenc_encoder_select="audio_frame_queue"
1946 libvo_amrwbenc_encoder_deps="libvo_amrwbenc"
1947 libvorbis_encoder_deps="libvorbis"
1948 libvorbis_encoder_select="audio_frame_queue"
1949 libvpx_vp8_decoder_deps="libvpx"
1950 libvpx_vp8_encoder_deps="libvpx"
1951 libvpx_vp9_decoder_deps="libvpx"
1952 libvpx_vp9_encoder_deps="libvpx"
1953 libwavpack_encoder_deps="libwavpack"
1954 libwebp_encoder_deps="libwebp"
1955 libx264_encoder_deps="libx264"
1956 libx265_encoder_deps="libx265"
1957 libxavs_encoder_deps="libxavs"
1958 libxvid_encoder_deps="libxvid"
1959
1960 # demuxers / muxers
1961 ac3_demuxer_select="ac3_parser"
1962 asf_demuxer_select="riffdec"
1963 asf_muxer_select="riffenc"
1964 asf_stream_muxer_select="asf_muxer"
1965 avi_demuxer_select="riffdec"
1966 avi_muxer_select="riffenc"
1967 avisynth_demuxer_deps="avisynth"
1968 avisynth_demuxer_select="riffdec"
1969 caf_demuxer_select="riffdec"
1970 dirac_demuxer_select="dirac_parser"
1971 dxa_demuxer_select="riffdec"
1972 eac3_demuxer_select="ac3_parser"
1973 f4v_muxer_select="mov_muxer"
1974 flac_demuxer_select="flac_parser"
1975 hds_muxer_select="flv_muxer"
1976 hls_muxer_select="mpegts_muxer"
1977 ipod_muxer_select="mov_muxer"
1978 ismv_muxer_select="mov_muxer"
1979 matroska_audio_muxer_select="matroska_muxer"
1980 matroska_demuxer_select="riffdec"
1981 matroska_demuxer_suggest="bzlib lzo zlib"
1982 matroska_muxer_select="riffenc"
1983 mmf_muxer_select="riffenc"
1984 mov_demuxer_select="riffdec"
1985 mov_demuxer_suggest="zlib"
1986 mov_muxer_select="riffenc rtpenc_chain"
1987 mp3_demuxer_select="mpegaudio_parser"
1988 mp4_muxer_select="mov_muxer"
1989 mpegts_muxer_select="adts_muxer latm_muxer"
1990 mpegtsraw_demuxer_select="mpegts_demuxer"
1991 mxf_d10_muxer_select="mxf_muxer"
1992 nut_muxer_select="riffenc"
1993 nuv_demuxer_select="riffdec"
1994 ogg_demuxer_select="golomb"
1995 psp_muxer_select="mov_muxer"
1996 rtp_demuxer_select="sdp_demuxer"
1997 rtpdec_select="asf_demuxer rm_demuxer rtp_protocol mpegts_demuxer mov_demuxer"
1998 rtsp_demuxer_select="http_protocol rtpdec"
1999 rtsp_muxer_select="rtp_muxer http_protocol rtp_protocol rtpenc_chain"
2000 sap_demuxer_select="sdp_demuxer"
2001 sap_muxer_select="rtp_muxer rtp_protocol rtpenc_chain"
2002 sdp_demuxer_select="rtpdec"
2003 smoothstreaming_muxer_select="ismv_muxer"
2004 spdif_muxer_select="aac_parser"
2005 tak_demuxer_select="tak_parser"
2006 tg2_muxer_select="mov_muxer"
2007 tgp_muxer_select="mov_muxer"
2008 w64_demuxer_select="wav_demuxer"
2009 wav_demuxer_select="riffdec"
2010 wav_muxer_select="riffenc"
2011 webm_muxer_select="riffenc"
2012 wtv_demuxer_select="riffdec"
2013 xmv_demuxer_select="riffdec"
2014 xwma_demuxer_select="riffdec"
2015
2016 # indevs / outdevs
2017 alsa_indev_deps="alsa_asoundlib_h snd_pcm_htimestamp"
2018 alsa_outdev_deps="alsa_asoundlib_h"
2019 bktr_indev_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
2020 dv1394_indev_deps="dv1394"
2021 dv1394_indev_select="dv_demuxer"
2022 fbdev_indev_deps="linux_fb_h"
2023 jack_indev_deps="jack_jack_h pthreads"
2024 libcdio_indev_deps="libcdio"
2025 libdc1394_indev_deps="libdc1394"
2026 oss_indev_deps_any="soundcard_h sys_soundcard_h"
2027 oss_outdev_deps_any="soundcard_h sys_soundcard_h"
2028 pulse_indev_deps="libpulse"
2029 sndio_indev_deps="sndio_h"
2030 sndio_outdev_deps="sndio_h"
2031 v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h"
2032 vfwcap_indev_deps="capCreateCaptureWindow vfwcap_defines"
2033 vfwcap_indev_extralibs="-lavicap32"
2034 x11grab_indev_deps="x11grab XShmCreateImage"
2035
2036 # protocols
2037 ffrtmpcrypt_protocol_deps="!librtmp_protocol"
2038 ffrtmpcrypt_protocol_deps_any="gcrypt nettle openssl"
2039 ffrtmpcrypt_protocol_select="tcp_protocol"
2040 ffrtmphttp_protocol_deps="!librtmp_protocol"
2041 ffrtmphttp_protocol_select="http_protocol"
2042 gopher_protocol_select="network"
2043 http_protocol_select="tcp_protocol"
2044 httpproxy_protocol_select="tcp_protocol"
2045 https_protocol_select="tls_protocol"
2046 librtmp_protocol_deps="librtmp"
2047 librtmpe_protocol_deps="librtmp"
2048 librtmps_protocol_deps="librtmp"
2049 librtmpt_protocol_deps="librtmp"
2050 librtmpte_protocol_deps="librtmp"
2051 mmsh_protocol_select="http_protocol"
2052 mmst_protocol_select="network"
2053 rtmp_protocol_deps="!librtmp_protocol"
2054 rtmp_protocol_select="tcp_protocol"
2055 rtmpe_protocol_select="ffrtmpcrypt_protocol"
2056 rtmps_protocol_deps="!librtmp_protocol"
2057 rtmps_protocol_select="tls_protocol"
2058 rtmpt_protocol_select="ffrtmphttp_protocol"
2059 rtmpte_protocol_select="ffrtmpcrypt_protocol ffrtmphttp_protocol"
2060 rtmpts_protocol_select="ffrtmphttp_protocol https_protocol"
2061 rtp_protocol_select="udp_protocol"
2062 sctp_protocol_deps="struct_sctp_event_subscribe"
2063 sctp_protocol_select="network"
2064 srtp_protocol_select="rtp_protocol"
2065 tcp_protocol_select="network"
2066 tls_protocol_deps_any="openssl gnutls"
2067 tls_protocol_select="tcp_protocol"
2068 udp_protocol_select="network"
2069 unix_protocol_deps="sys_un_h"
2070 unix_protocol_select="network"
2071
2072 # filters
2073 blackframe_filter_deps="gpl"
2074 boxblur_filter_deps="gpl"
2075 cropdetect_filter_deps="gpl"
2076 delogo_filter_deps="gpl"
2077 drawtext_filter_deps="libfreetype"
2078 frei0r_filter_deps="frei0r dlopen"
2079 frei0r_filter_extralibs='$ldl'
2080 frei0r_src_filter_deps="frei0r dlopen"
2081 frei0r_src_filter_extralibs='$ldl'
2082 hqdn3d_filter_deps="gpl"
2083 interlace_filter_deps="gpl"
2084 ocv_filter_deps="libopencv"
2085 resample_filter_deps="avresample"
2086 scale_filter_deps="swscale"
2087
2088 # examples
2089 avcodec_example_deps="avcodec avutil"
2090 filter_audio_example_deps="avfilter avutil"
2091 metadata_example_deps="avformat avutil"
2092 output_example_deps="avcodec avformat avutil swscale"
2093 transcode_aac_example_deps="avcodec avformat avresample"
2094
2095 # libraries
2096 avcodec_deps="avutil"
2097 avdevice_deps="avutil avcodec avformat"
2098 avfilter_deps="avutil"
2099 avformat_deps="avutil avcodec"
2100 avresample_deps="avutil"
2101 swscale_deps="avutil"
2102
2103 # programs
2104 avconv_deps="avcodec avfilter avformat avresample swscale"
2105 avconv_select="aformat_filter anull_filter asyncts_filter atrim_filter format_filter
2106 fps_filter null_filter resample_filter scale_filter
2107 setpts_filter trim_filter"
2108 avplay_deps="avcodec avformat avresample swscale sdl"
2109 avplay_libs='$sdl_libs'
2110 avplay_select="rdft"
2111 avprobe_deps="avcodec avformat"
2112 avserver_deps="avformat fork !shared"
2113 avserver_select="ffm_muxer rtp_protocol rtsp_demuxer"
2114
2115 # documentation
2116 pod2man_deps="doc"
2117 texi2html_deps="doc"
2118
2119 # default parameters
2120
2121 logfile="config.log"
2122
2123 # installation paths
2124 prefix_default="/usr/local"
2125 bindir_default='${prefix}/bin'
2126 datadir_default='${prefix}/share/avconv'
2127 docdir_default='${prefix}/share/doc/libav'
2128 incdir_default='${prefix}/include'
2129 libdir_default='${prefix}/lib'
2130 mandir_default='${prefix}/share/man'
2131 shlibdir_default="$libdir_default"
2132
2133 # toolchain
2134 ar_default="ar"
2135 cc_default="gcc"
2136 host_cc_default="gcc"
2137 cp_f="cp -f"
2138 ln_s="ln -s -f"
2139 nm_default="nm -g"
2140 objformat="elf"
2141 pkg_config_default=pkg-config
2142 ranlib="ranlib"
2143 strip="strip"
2144 yasmexe="yasm"
2145
2146 nogas=":"
2147
2148 # machine
2149 arch_default=$(uname -m)
2150 cpu="generic"
2151
2152 # OS
2153 target_os_default=$(tolower $(uname -s))
2154 host_os=$target_os_default
2155
2156 # configurable options
2157 enable $EXAMPLE_LIST $LIBRARY_LIST $PROGRAM_LIST
2158
2159 enable asm
2160 enable debug
2161 enable doc
2162 enable optimizations
2163 enable safe_bitstream_reader
2164 enable static
2165 enable swscale_alpha
2166
2167 # By default, enable only those hwaccels that have no external dependencies.
2168 enable dxva2 vdpau
2169
2170 # build settings
2171 SHFLAGS='-shared -Wl,-soname,$$(@F)'
2172 LIBPREF="lib"
2173 LIBSUF=".a"
2174 FULLNAME='$(NAME)$(BUILDSUF)'
2175 LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
2176 SLIBPREF="lib"
2177 SLIBSUF=".so"
2178 SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
2179 SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
2180 SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
2181 LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
2182 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'
2183 SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR) $(SLIBNAME)'
2184
2185 asflags_filter=echo
2186 cflags_filter=echo
2187 ldflags_filter=echo
2188
2189 AS_C='-c'
2190 AS_O='-o $@'
2191 CC_C='-c'
2192 CC_E='-E -o $@'
2193 CC_O='-o $@'
2194 LD_O='-o $@'
2195 LD_LIB='-l%'
2196 LD_PATH='-L'
2197 HOSTCC_C='-c'
2198 HOSTCC_E='-E -o $@'
2199 HOSTCC_O='-o $@'
2200 HOSTLD_O='-o $@'
2201
2202 host_libs='-lm'
2203 host_cflags_filter=echo
2204 host_ldflags_filter=echo
2205
2206 target_path='$(CURDIR)'
2207
2208 # since the object filename is not given with the -MM flag, the compiler
2209 # is only able to print the basename, and we must add the path ourselves
2210 DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o," > $(@:.o=.d)'
2211 DEPFLAGS='-MM'
2212
2213 # find source path
2214 if test -f configure; then
2215 source_path=.
2216 else
2217 source_path=$(cd $(dirname "$0"); pwd)
2218 echo "$source_path" | grep -q '[[:blank:]]' &&
2219 die "Out of tree builds are impossible with whitespace in source path."
2220 test -e "$source_path/config.h" &&
2221 die "Out of tree builds are impossible with config.h in source dir."
2222 fi
2223
2224 for v in "$@"; do
2225 r=${v#*=}
2226 l=${v%"$r"}
2227 r=$(sh_quote "$r")
2228 LIBAV_CONFIGURATION="${LIBAV_CONFIGURATION# } ${l}${r}"
2229 done
2230
2231 find_things(){
2232 thing=$1
2233 pattern=$2
2234 file=$source_path/$3
2235 sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
2236 }
2237
2238 ENCODER_LIST=$(find_things encoder ENC libavcodec/allcodecs.c)
2239 DECODER_LIST=$(find_things decoder DEC libavcodec/allcodecs.c)
2240 HWACCEL_LIST=$(find_things hwaccel HWACCEL libavcodec/allcodecs.c)
2241 PARSER_LIST=$(find_things parser PARSER libavcodec/allcodecs.c)
2242 BSF_LIST=$(find_things bsf BSF libavcodec/allcodecs.c)
2243 MUXER_LIST=$(find_things muxer _MUX libavformat/allformats.c)
2244 DEMUXER_LIST=$(find_things demuxer DEMUX libavformat/allformats.c)
2245 OUTDEV_LIST=$(find_things outdev OUTDEV libavdevice/alldevices.c)
2246 INDEV_LIST=$(find_things indev _IN libavdevice/alldevices.c)
2247 PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
2248 FILTER_LIST=$(find_things filter FILTER libavfilter/allfilters.c)
2249
2250 ALL_COMPONENTS="
2251 $BSF_LIST
2252 $DECODER_LIST
2253 $DEMUXER_LIST
2254 $ENCODER_LIST
2255 $FILTER_LIST
2256 $HWACCEL_LIST
2257 $INDEV_LIST
2258 $MUXER_LIST
2259 $OUTDEV_LIST
2260 $PARSER_LIST
2261 $PROTOCOL_LIST
2262 "
2263
2264 for n in $COMPONENT_LIST; do
2265 v=$(toupper ${n%s})_LIST
2266 eval enable \$$v
2267 eval ${n}_if_any="\$$v"
2268 done
2269
2270 enable $ARCH_EXT_LIST
2271
2272 die_unknown(){
2273 echo "Unknown option \"$1\"."
2274 echo "See $0 --help for available options."
2275 exit 1
2276 }
2277
2278 print_3_columns() {
2279 cat | tr ' ' '\n' | sort | pr -r -3 -t
2280 }
2281
2282 show_list() {
2283 suffix=_$1
2284 shift
2285 echo $* | sed s/$suffix//g | print_3_columns
2286 exit 0
2287 }
2288
2289 rand_list(){
2290 IFS=', '
2291 set -- $*
2292 unset IFS
2293 for thing; do
2294 comp=${thing%:*}
2295 prob=${thing#$comp}
2296 prob=${prob#:}
2297 is_in ${comp} $COMPONENT_LIST && eval comp=\$$(toupper ${comp%s})_LIST
2298 echo "prob ${prob:-0.5}"
2299 printf '%s\n' $comp
2300 done
2301 }
2302
2303 do_random(){
2304 action=$1
2305 shift
2306 random_seed=$(awk "BEGIN { srand($random_seed); print srand() }")
2307 $action $(rand_list "$@" | awk "BEGIN { srand($random_seed) } \$1 == \"prob\" { prob = \$2; next } rand() < prob { print }")
2308 }
2309
2310 for opt do
2311 optval="${opt#*=}"
2312 case "$opt" in
2313 --extra-ldflags=*)
2314 add_ldflags $optval
2315 ;;
2316 --extra-libs=*)
2317 add_extralibs $optval
2318 ;;
2319 --disable-devices)
2320 disable $INDEV_LIST $OUTDEV_LIST
2321 ;;
2322 --enable-debug=*)
2323 debuglevel="$optval"
2324 ;;
2325 --disable-programs)
2326 disable $PROGRAM_LIST
2327 ;;
2328 --disable-everything)
2329 map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
2330 ;;
2331 --disable-all)
2332 map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
2333 disable $LIBRARY_LIST $PROGRAM_LIST doc
2334 ;;
2335 --enable-random|--disable-random)
2336 action=${opt%%-random}
2337 do_random ${action#--} $COMPONENT_LIST
2338 ;;
2339 --enable-random=*|--disable-random=*)
2340 action=${opt%%-random=*}
2341 do_random ${action#--} $optval
2342 ;;
2343 --enable-*=*|--disable-*=*)
2344 eval $(echo "${opt%%=*}" | sed 's/--/action=/;s/-/ thing=/')
2345 is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt"
2346 eval list=\$$(toupper $thing)_LIST
2347 name=$(echo "${optval}" | sed "s/,/_${thing}|/g")_${thing}
2348 $action $(filter "$name" $list)
2349 ;;
2350 --enable-?*|--disable-?*)
2351 eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
2352 if is_in $option $COMPONENT_LIST; then
2353 test $action = disable && action=unset
2354 eval $action \$$(toupper ${option%s})_LIST
2355 elif is_in $option $CMDLINE_SELECT; then
2356 $action $option
2357 else
2358 die_unknown $opt
2359 fi
2360 ;;
2361 --list-*)
2362 NAME="${opt#--list-}"
2363 is_in $NAME $COMPONENT_LIST || die_unknown $opt
2364 NAME=${NAME%s}
2365 eval show_list $NAME \$$(toupper $NAME)_LIST
2366 ;;
2367 --help|-h) show_help
2368 ;;
2369 *)
2370 optname="${opt%%=*}"
2371 optname="${optname#--}"
2372 optname=$(echo "$optname" | sed 's/-/_/g')
2373 if is_in $optname $CMDLINE_SET; then
2374 eval $optname='$optval'
2375 elif is_in $optname $CMDLINE_APPEND; then
2376 append $optname "$optval"
2377 else
2378 die_unknown $opt
2379 fi
2380 ;;
2381 esac
2382 done
2383
2384 disabled logging && logfile=/dev/null
2385
2386 echo "# $0 $LIBAV_CONFIGURATION" > $logfile
2387 set >> $logfile
2388
2389 test -n "$cross_prefix" && enable cross_compile
2390
2391 if enabled cross_compile; then
2392 test -n "$arch" && test -n "$target_os" ||
2393 die "Must specify target arch and OS when cross-compiling"
2394 fi
2395
2396 ar_default="${cross_prefix}${ar_default}"
2397 cc_default="${cross_prefix}${cc_default}"
2398 nm_default="${cross_prefix}${nm_default}"
2399 pkg_config_default="${cross_prefix}${pkg_config_default}"
2400 ranlib="${cross_prefix}${ranlib}"
2401 strip="${cross_prefix}${strip}"
2402
2403 sysinclude_default="${sysroot}/usr/include"
2404
2405 case "$toolchain" in
2406 clang-asan)
2407 cc_default="clang"
2408 add_cflags -fsanitize=address
2409 add_ldflags -fsanitize=address
2410 ;;
2411 clang-tsan)
2412 cc_default="clang"
2413 add_cflags -fsanitize=thread -pie
2414 add_ldflags -fsanitize=thread -pie
2415 ;;
2416 clang-usan)
2417 cc_default="clang"
2418 add_cflags -fsanitize=undefined
2419 add_ldflags -fsanitize=undefined
2420 ;;
2421 gcc-asan)
2422 cc_default="gcc"
2423 add_cflags -fsanitize=address
2424 add_ldflags -fsanitize=address
2425 ;;
2426 gcc-tsan)
2427 cc_default="gcc"
2428 add_cflags -fsanitize=thread -pie -fPIC
2429 add_ldflags -fsanitize=thread -pie -fPIC
2430 ;;
2431 gcc-usan)
2432 cc_default="gcc"
2433 add_cflags -fsanitize=undefined
2434 add_ldflags -fsanitize=undefined
2435 ;;
2436 valgrind-massif)
2437 target_exec_default="valgrind"
2438 target_exec_args="--alloc-fn=av_malloc --alloc-fn=av_mallocz"
2439 ;;
2440 valgrind-memcheck)
2441 target_exec_default="valgrind"
2442 target_exec_args="--track-origins=yes --leak-check=full"
2443 ;;
2444 msvc)
2445 # Check whether the current MSVC version needs the C99 converter.
2446 # From MSVC 2013 (compiler major version 18) onwards, it does actually
2447 # support enough of C99 to build libav. Default to the new
2448 # behaviour if the regexp was unable to match anything, since this
2449 # successfully parses the version number of existing supported
2450 # versions that require the converter (MSVC 2010 and 2012).
2451 cl_major_ver=$(cl 2>&1 | sed -n 's/.*Version \([[:digit:]]\{1,\}\)\..*/\1/p')
2452 if [ -z "$cl_major_ver" ] || [ $cl_major_ver -ge 18 ]; then
2453 cc_default="cl"
2454 else
2455 cc_default="c99wrap cl"
2456 fi
2457 ld_default="link"
2458 nm_default="dumpbin -symbols"
2459 ar_default="lib"
2460 target_os_default="win32"
2461 # Use a relative path for TMPDIR. This makes sure all the
2462 # ffconf temp files are written with a relative path, avoiding
2463 # issues with msys/win32 path conversion for MSVC parameters
2464 # such as -Fo<file> or -out:<file>.
2465 TMPDIR=.
2466 ;;
2467 icl)
2468 cc_default="icl"
2469 ld_default="xilink"
2470 nm_default="dumpbin -symbols"
2471 ar_default="xilib"
2472 target_os_default="win32"
2473 TMPDIR=.
2474 ;;
2475 gcov)
2476 add_cflags -fprofile-arcs -ftest-coverage
2477 add_ldflags -fprofile-arcs -ftest-coverage
2478 ;;
2479 hardened)
2480 add_cflags -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fno-strict-overflow -fstack-protector-all
2481 add_ldflags -Wl,-z,relro -Wl,-z,now
2482 ;;
2483 ?*)
2484 die "Unknown toolchain $toolchain"
2485 ;;
2486 esac
2487
2488 set_default arch cc pkg_config sysinclude target_exec target_os
2489 enabled cross_compile || host_cc_default=$cc
2490 set_default host_cc
2491
2492 if ! $pkg_config --version >/dev/null 2>&1; then
2493 warn "$pkg_config not found, library detection may fail."
2494 pkg_config=false
2495 fi
2496
2497 exesuf() {
2498 case $1 in
2499 mingw32*|win32|win64|cygwin*|*-dos|freedos|opendos|os/2*|symbian) echo .exe ;;
2500 esac
2501 }
2502
2503 EXESUF=$(exesuf $target_os)
2504 HOSTEXESUF=$(exesuf $host_os)
2505
2506 # set temporary file name
2507 : ${TMPDIR:=$TEMPDIR}
2508 : ${TMPDIR:=$TMP}
2509 : ${TMPDIR:=/tmp}
2510
2511 if ! check_cmd mktemp -u XXXXXX; then
2512 # simple replacement for missing mktemp
2513 # NOT SAFE FOR GENERAL USE
2514 mktemp(){
2515 echo "${2%%XXX*}.${HOSTNAME}.${UID}.$$"
2516 }
2517 fi
2518
2519 tmpfile(){
2520 tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
2521 (set -C; exec > $tmp) 2>/dev/null ||
2522 die "Unable to create temporary file in $TMPDIR."
2523 append TMPFILES $tmp
2524 eval $1=$tmp
2525 }
2526
2527 trap 'rm -f -- $TMPFILES' EXIT
2528
2529 tmpfile TMPASM .asm
2530 tmpfile TMPC .c
2531 tmpfile TMPE $EXESUF
2532 tmpfile TMPH .h
2533 tmpfile TMPO .o
2534 tmpfile TMPS .S
2535 tmpfile TMPSH .sh
2536 tmpfile TMPV .ver
2537
2538 unset -f mktemp
2539
2540 chmod +x $TMPE
2541
2542 # make sure we can execute files in $TMPDIR
2543 cat > $TMPSH 2>> $logfile <<EOF
2544 #! /bin/sh
2545 EOF
2546 chmod +x $TMPSH >> $logfile 2>&1
2547 if ! $TMPSH >> $logfile 2>&1; then
2548 cat <<EOF
2549 Unable to create and execute files in $TMPDIR. Set the TMPDIR environment
2550 variable to another directory and make sure that it is not mounted noexec.
2551 EOF
2552 die "Sanity test failed."
2553 fi
2554
2555 ccc_flags(){
2556 for flag; do
2557 case $flag in
2558 -std=c99) echo -c99 ;;
2559 -mcpu=*) echo -arch ${flag#*=} ;;
2560 -mieee) echo -ieee ;;
2561 -O*|-fast) echo $flag ;;
2562 -fno-math-errno) echo -assume nomath_errno ;;
2563 -g) echo -g3 ;;
2564 -Wall) echo -msg_enable level2 ;;
2565 -Wno-pointer-sign) echo -msg_disable ptrmismatch1 ;;
2566 -Wl,*) echo $flag ;;
2567 -f*|-W*) ;;
2568 *) echo $flag ;;
2569 esac
2570 done
2571 }
2572
2573 cparser_flags(){
2574 for flag; do
2575 case $flag in
2576 -Wno-switch) echo -Wno-switch-enum ;;
2577 -Wno-format-zero-length) ;;
2578 -Wdisabled-optimization) ;;
2579 -Wno-pointer-sign) echo -Wno-other ;;
2580 *) echo $flag ;;
2581 esac
2582 done
2583 }
2584
2585 msvc_common_flags(){
2586 for flag; do
2587 case $flag in
2588 # In addition to specifying certain flags under the compiler
2589 # specific filters, they must be specified here as well or else the
2590 # generic catch all at the bottom will print the original flag.
2591 -Wall) ;;
2592 -std=c99) ;;
2593 # Common flags
2594 -fomit-frame-pointer) ;;
2595 -g) echo -Z7 ;;
2596 -fno-math-errno) ;;
2597 -fno-common) ;;
2598 -fno-signed-zeros) ;;
2599 -fPIC) ;;
2600 -mthumb) ;;
2601 -march=*) ;;
2602 -lz) echo zlib.lib ;;
2603 -lavifil32) echo vfw32.lib ;;
2604 -lavicap32) echo vfw32.lib user32.lib ;;
2605 -l*) echo ${flag#-l}.lib ;;
2606 *) echo $flag ;;
2607 esac
2608 done
2609 }
2610
2611 msvc_flags(){
2612 msvc_common_flags "$@"
2613 for flag; do
2614 case $flag in
2615 -Wall) echo -W4 -wd4244 -wd4127 -wd4018 -wd4389 \
2616 -wd4146 -wd4057 -wd4204 -wd4706 -wd4305 \
2617 -wd4152 -wd4324 -we4013 -wd4100 -wd4214 \
2618 -wd4273 ;;
2619 esac
2620 done
2621 }
2622
2623 icl_flags(){
2624 msvc_common_flags "$@"
2625 for flag; do
2626 case $flag in
2627 # Despite what Intel's documentation says -Wall, which is supported
2628 # on Windows, does enable remarks so disable them here.
2629 -Wall) echo $flag -Qdiag-disable:remark ;;
2630 -std=c99) echo -Qstd=c99 ;;
2631 esac
2632 done
2633 }
2634
2635 pgi_flags(){
2636 for flag; do
2637 case $flag in
2638 -flto) echo -Mipa=fast,libopt,libinline,vestigial ;;
2639 -fomit-frame-pointer) echo -Mnoframe ;;
2640 -g) echo -gopt ;;
2641 *) echo $flag ;;
2642 esac
2643 done
2644 }
2645
2646 suncc_flags(){
2647 for flag; do
2648 case $flag in
2649 -march=*|-mcpu=*)
2650 case "${flag#*=}" in
2651 native) echo -xtarget=native ;;
2652 v9|niagara) echo -xarch=sparc ;;
2653 ultrasparc) echo -xarch=sparcvis ;;
2654 ultrasparc3|niagara2) echo -xarch=sparcvis2 ;;
2655 i586|pentium) echo -xchip=pentium ;;
2656 i686|pentiumpro|pentium2) echo -xtarget=pentium_pro ;;
2657 pentium3*|c3-2) echo -xtarget=pentium3 ;;
2658 pentium-m) echo -xarch=sse2 -xchip=pentium3 ;;
2659 pentium4*) echo -xtarget=pentium4 ;;
2660 prescott|nocona) echo -xarch=sse3 -xchip=pentium4 ;;
2661 *-sse3) echo -xarch=sse3 ;;
2662 core2) echo -xarch=ssse3 -xchip=core2 ;;
2663 corei7) echo -xarch=sse4_2 -xchip=nehalem ;;
2664 corei7-avx) echo -xarch=avx -xchip=sandybridge ;;
2665 amdfam10|barcelona|bdver*) echo -xarch=sse4_1 ;;
2666 athlon-4|athlon-[mx]p) echo -xarch=ssea ;;
2667 k8|opteron|athlon64|athlon-fx)
2668 echo -xarch=sse2a ;;
2669 athlon*) echo -xarch=pentium_proa ;;
2670 esac
2671 ;;
2672 -std=c99) echo -xc99 ;;
2673 -fomit-frame-pointer) echo -xregs=frameptr ;;
2674 -fPIC) echo -KPIC -xcode=pic32 ;;
2675 -W*,*) echo $flag ;;
2676 -f*-*|-W*|-mimpure-text) ;;
2677 -shared) echo -G ;;
2678 *) echo $flag ;;
2679 esac
2680 done
2681 }
2682
2683 tms470_flags(){
2684 for flag; do
2685 case $flag in
2686 -march=*|-mcpu=*)
2687 case "${flag#*=}" in
2688 armv7-a|cortex-a*) echo -mv=7a8 ;;
2689 armv7-r|cortex-r*) echo -mv=7r4 ;;
2690 armv7-m|cortex-m*) echo -mv=7m3 ;;
2691 armv6*|arm11*) echo -mv=6 ;;
2692 armv5*e|arm[79]*e*|arm9[24]6*|arm96*|arm102[26])
2693 echo -mv=5e ;;
2694 armv4*|arm7*|arm9[24]*) echo -mv=4 ;;
2695 esac
2696 ;;
2697 -mfpu=neon) echo --float_support=vfpv3 --neon ;;
2698 -mfpu=vfp) echo --float_support=vfpv2 ;;
2699 -mfpu=vfpv3) echo --float_support=vfpv3 ;;
2700 -mfpu=vfpv3-d16) echo --float_support=vfpv3d16 ;;
2701 -msoft-float) echo --float_support=vfplib ;;
2702 -O[0-3]|-mf=*) echo $flag ;;
2703 -g) echo -g -mn ;;
2704 -pds=*) echo $flag ;;
2705 -D*|-I*) echo $flag ;;
2706 --gcc|--abi=*) echo $flag ;;
2707 -me) echo $flag ;;
2708 esac
2709 done
2710 }
2711
2712 probe_cc(){
2713 pfx=$1
2714 _cc=$2
2715
2716 unset _type _ident _cc_c _cc_e _cc_o _flags _cflags
2717 unset _ld_o _ldflags _ld_lib _ld_path
2718 unset _depflags _DEPCMD _DEPFLAGS
2719 _flags_filter=echo
2720
2721 if $_cc -v 2>&1 | grep -q '^gcc.*LLVM'; then
2722 _type=llvm_gcc
2723 gcc_extra_ver=$(expr "$($_cc --version | head -n1)" : '.*\((.*)\)')
2724 _ident="llvm-gcc $($_cc -dumpversion) $gcc_extra_ver"
2725 _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2726 _cflags_speed='-O3'
2727 _cflags_size='-Os'
2728 elif $_cc -v 2>&1 | grep -qi ^gcc; then
2729 _type=gcc
2730 gcc_version=$($_cc --version | head -n1)
2731 gcc_basever=$($_cc -dumpversion)
2732 gcc_pkg_ver=$(expr "$gcc_version" : '[^ ]* \(([^)]*)\)')
2733 gcc_ext_ver=$(expr "$gcc_version" : ".*$gcc_pkg_ver $gcc_basever \\(.*\\)")
2734 _ident=$(cleanws "gcc $gcc_basever $gcc_pkg_ver $gcc_ext_ver")
2735 if ! $_cc -dumpversion | grep -q '^2\.'; then
2736 _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2737 fi
2738 _cflags_speed='-O3'
2739 _cflags_size='-Os'
2740 elif $_cc --version 2>/dev/null | grep -q ^icc; then
2741 _type=icc
2742 _ident=$($_cc --version | head -n1)
2743 _depflags='-MMD'
2744 _cflags_speed='-O3'
2745 _cflags_size='-Os'
2746 _cflags_noopt='-O1'
2747 elif $_cc -v 2>&1 | grep -q xlc; then
2748 _type=xlc
2749 _ident=$($_cc -qversion 2>/dev/null | head -n1)
2750 _cflags_speed='-O5'
2751 _cflags_size='-O5 -qcompact'
2752 elif $_cc -V 2>/dev/null | grep -q Compaq; then
2753 _type=ccc
2754 _ident=$($_cc -V | head -n1 | cut -d' ' -f1-3)
2755 _DEPFLAGS='-M'
2756 _cflags_speed='-fast'
2757 _cflags_size='-O1'
2758 _flags_filter=ccc_flags
2759 elif $_cc --vsn 2>/dev/null | grep -q "ARM C/C++ Compiler"; then
2760 test -d "$sysroot" || die "No valid sysroot specified."
2761 _type=armcc
2762 _ident=$($_cc --vsn | head -n1)
2763 armcc_conf="$PWD/armcc.conf"
2764 $_cc --arm_linux_configure \
2765 --arm_linux_config_file="$armcc_conf" \
2766 --configure_sysroot="$sysroot" \
2767 --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
2768 die "Error creating armcc configuration file."
2769 $_cc --vsn | grep -q RVCT && armcc_opt=rvct || armcc_opt=armcc
2770 _flags="--arm_linux_config_file=$armcc_conf --translate_gcc"
2771 as_default="${cross_prefix}gcc"
2772 _depflags='-MMD'
2773 _cflags_speed='-O3'
2774 _cflags_size='-Os'
2775 elif $_cc -version 2>/dev/null | grep -Eq 'TMS470|TI ARM'; then
2776 _type=tms470
2777 _ident=$($_cc -version | head -n1 | tr -s ' ')
2778 _flags='--gcc --abi=eabi -me'
2779 _cc_e='-ppl -fe=$@'
2780 _cc_o='-fe=$@'
2781 _depflags='-ppa -ppd=$(@:.o=.d)'
2782 _cflags_speed='-O3 -mf=5'
2783 _cflags_size='-O3 -mf=2'
2784 _flags_filter=tms470_flags
2785 elif $_cc -v 2>&1 | grep -q clang; then
2786 _type=clang
2787 _ident=$($_cc --version | head -n1)
2788 _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2789 _cflags_speed='-O3'
2790 _cflags_size='-Os'
2791 elif $_cc -V 2>&1 | grep -q Sun; then
2792 _type=suncc
2793 _ident=$($_cc -V 2>&1 | head -n1 | cut -d' ' -f 2-)
2794 _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "1s,^.*: ,$@: ," -e "\$$!s,\$$, \\\," -e "1!s,^.*: , ," > $(@:.o=.d)'
2795 _DEPFLAGS='-xM1 -xc99'
2796 _ldflags='-std=c99'
2797 _cflags_speed='-O5'
2798 _cflags_size='-O5 -xspace'
2799 _flags_filter=suncc_flags
2800 elif $_cc -v 2>&1 | grep -q 'PathScale\|Path64'; then
2801 _type=pathscale
2802 _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
2803 _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2804 _cflags_speed='-O2'
2805 _cflags_size='-Os'
2806 _flags_filter='filter_out -Wdisabled-optimization'
2807 elif $_cc -v 2>&1 | grep -q Open64; then
2808 _type=open64
2809 _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
2810 _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2811 _cflags_speed='-O2'
2812 _cflags_size='-Os'
2813 _flags_filter='filter_out -Wdisabled-optimization|-Wtype-limits|-fno-signed-zeros'
2814 elif $_cc -V 2>&1 | grep -q Portland; then
2815 _type=pgi
2816 _ident="PGI $($_cc -V 2>&1 | awk '/^pgcc/ { print $2; exit }')"
2817 opt_common='-alias=ansi -Mdse -Mlre -Mpre'
2818 _cflags_speed="-O3 -Mautoinline -Munroll=c:4 $opt_common"
2819 _cflags_size="-O2 -Munroll=c:1 $opt_common"
2820 _cflags_noopt="-O1"
2821 _flags_filter=pgi_flags
2822 elif $_cc 2>&1 | grep -q Microsoft; then
2823 _type=msvc
2824 _ident=$($cc 2>&1 | head -n1)
2825 _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< 2>&1 | awk '\''/including/ { sub(/^.*file: */, ""); gsub(/\\/, "/"); if (!match($$0, / /)) print "$@:", $$0 }'\'' > $(@:.o=.d)'
2826 _DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -showIncludes -Zs'
2827 _cflags_speed="-O2"
2828 _cflags_size="-O1"
2829 if $_cc 2>&1 | grep -q Linker; then
2830 _ld_o='-out:$@'
2831 else
2832 _ld_o='-Fe$@'
2833 fi
2834 _cc_o='-Fo$@'
2835 _cc_e='-P -Fi$@'
2836 _flags_filter=msvc_flags
2837 _ld_lib='lib%.a'
2838 _ld_path='-libpath:'
2839 _flags='-nologo'
2840 _cflags='-D_USE_MATH_DEFINES -D_CRT_SECURE_NO_WARNINGS -Dinline=__inline -FIstdlib.h -Dstrtoll=_strtoi64'
2841 if [ $pfx = hostcc ]; then
2842 append _cflags -Dsnprintf=_snprintf
2843 fi
2844 elif $_cc 2>&1 | grep -q Intel; then
2845 _type=icl
2846 _ident=$($cc 2>&1 | head -n1)
2847 _depflags='-QMMD -QMF$(@:.o=.d) -QMT$@'
2848 # Not only is O3 broken on 13.x+ but it is slower on all previous
2849 # versions (tested) as well.
2850 _cflags_speed="-O2"
2851 _cflags_size="-O1 -Oi" # -O1 without -Oi miscompiles stuff
2852 if $_cc 2>&1 | grep -q Linker; then
2853 _ld_o='-out:$@'
2854 else
2855 _ld_o='-Fe$@'
2856 fi
2857 _cc_o='-Fo$@'
2858 _cc_e='-P'
2859 _flags_filter=icl_flags
2860 _ld_lib='lib%.a'
2861 _ld_path='-libpath:'
2862 # -Qdiag-error to make icl error when seeing certain unknown arguments
2863 _flags='-nologo -Qdiag-error:4044,10157'
2864 # -Qvec- -Qsimd- to prevent miscompilation, -GS for consistency
2865 # with MSVC which enables it by default.
2866 _cflags='-D_USE_MATH_DEFINES -FIstdlib.h -Dstrtoll=_strtoi64 -Qms0 -Qvec- -Qsimd- -GS'
2867 if [ $pfx = hostcc ]; then
2868 append _cflags -Dsnprintf=_snprintf
2869 fi
2870 elif $_cc --version 2>/dev/null | grep -q ^cparser; then
2871 _type=cparser
2872 _ident=$($_cc --version | head -n1)
2873 _depflags='-MMD'
2874 _cflags_speed='-O4'
2875 _cflags_size='-O2'
2876 _flags_filter=cparser_flags
2877 fi
2878
2879 eval ${pfx}_type=\$_type
2880 eval ${pfx}_ident=\$_ident
2881 }
2882
2883 set_ccvars(){
2884 eval ${1}_C=\${_cc_c-\${${1}_C}}
2885 eval ${1}_E=\${_cc_e-\${${1}_E}}
2886 eval ${1}_O=\${_cc_o-\${${1}_O}}
2887
2888 if [ -n "$_depflags" ]; then
2889 eval ${1}_DEPFLAGS=\$_depflags
2890 else
2891 eval ${1}DEP=\${_DEPCMD:-\$DEPCMD}
2892 eval ${1}DEP_FLAGS=\${_DEPFLAGS:-\$DEPFLAGS}
2893 eval DEP${1}FLAGS=\$_flags
2894 fi
2895 }
2896
2897 probe_cc cc "$cc"
2898 cflags_filter=$_flags_filter
2899 cflags_speed=$_cflags_speed
2900 cflags_size=$_cflags_size
2901 cflags_noopt=$_cflags_noopt
2902 add_cflags $_flags $_cflags
2903 cc_ldflags=$_ldflags
2904 set_ccvars CC
2905
2906 probe_cc hostcc "$host_cc"
2907 host_cflags_filter=$_flags_filter
2908 add_host_cflags $_flags $_cflags
2909 set_ccvars HOSTCC
2910
2911 test -n "$cc_type" && enable $cc_type ||
2912 warn "Unknown C compiler $cc, unable to select optimal CFLAGS"
2913
2914 : ${as_default:=$cc}
2915 : ${dep_cc_default:=$cc}
2916 : ${ld_default:=$cc}
2917 : ${host_ld_default:=$host_cc}
2918 set_default ar as dep_cc ld host_ld
2919
2920 probe_cc as "$as"
2921 asflags_filter=$_flags_filter
2922 add_asflags $_flags $_cflags
2923 set_ccvars AS
2924
2925 probe_cc ld "$ld"
2926 ldflags_filter=$_flags_filter
2927 add_ldflags $_flags $_ldflags
2928 test "$cc_type" != "$ld_type" && add_ldflags $cc_ldflags
2929 LD_O=${_ld_o-$LD_O}
2930 LD_LIB=${_ld_lib-$LD_LIB}
2931 LD_PATH=${_ld_path-$LD_PATH}
2932
2933 probe_cc hostld "$host_ld"
2934 host_ldflags_filter=$_flags_filter
2935 add_host_ldflags $_flags $_ldflags
2936 HOSTLD_O=${_ld_o-$HOSTLD_O}
2937
2938 if [ -z "$CC_DEPFLAGS" ] && [ "$dep_cc" != "$cc" ]; then
2939 probe_cc depcc "$dep_cc"
2940 CCDEP=${_DEPCMD:-$DEPCMD}
2941 CCDEP_FLAGS=${_DEPFLAGS:=$DEPFLAGS}
2942 DEPCCFLAGS=$_flags
2943 fi
2944
2945 if $ar 2>&1 | grep -q Microsoft; then
2946 arflags="-nologo"
2947 ar_o='-out:$@'
2948 elif $ar 2>&1 | grep -q 'Texas Instruments'; then
2949 arflags="rq"
2950 ar_o='$@'
2951 elif $ar 2>&1 | grep -q 'Usage: ar.*-X.*any'; then
2952 arflags='-Xany -r -c'
2953 ar_o='$@'
2954 else
2955 arflags="rc"
2956 ar_o='$@'
2957 fi
2958
2959 add_cflags $extra_cflags
2960 add_asflags $extra_cflags
2961
2962 if test -n "$sysroot"; then
2963 case "$cc_type" in
2964 gcc|llvm_gcc|clang)
2965 add_cppflags --sysroot="$sysroot"
2966 add_ldflags --sysroot="$sysroot"
2967 ;;
2968 tms470)
2969 add_cppflags -I"$sysinclude"
2970 add_ldflags --sysroot="$sysroot"
2971 ;;
2972 esac
2973 fi
2974
2975 if test "$cpu" = host; then
2976 enabled cross_compile &&
2977 die "--cpu=host makes no sense when cross-compiling."
2978
2979 case "$cc_type" in
2980 gcc|llvm_gcc)
2981 check_native(){
2982 $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
2983 sed -n "/cc1.*$1=/{
2984 s/.*$1=\\([^ ]*\\).*/\\1/
2985 p
2986 q
2987 }" $TMPE
2988 }
2989 cpu=$(check_native -march || check_native -mcpu)
2990 ;;
2991 esac
2992
2993 test "${cpu:-host}" = host &&
2994 die "--cpu=host not supported with compiler $cc"
2995 fi
2996
2997 # Deal with common $arch aliases
2998 case "$arch" in
2999 aarch64|arm64)
3000 arch="aarch64"
3001 ;;
3002 arm*)
3003 arch="arm"
3004 ;;
3005 mips*|IP*)
3006 arch="mips"
3007 ;;
3008 parisc*|hppa*)
3009 arch="parisc"
3010 ;;
3011 "Power Macintosh"|ppc*|powerpc*)
3012 arch="ppc"
3013 ;;
3014 s390|s390x)
3015 arch="s390"
3016 ;;
3017 sh4|sh)
3018 arch="sh4"
3019 ;;
3020 sun4u|sparc*)
3021 arch="sparc"
3022 ;;
3023 tilegx|tile-gx)
3024 arch="tilegx"
3025 ;;
3026 i[3-6]86|i86pc|BePC|x86pc|x86_64|amd64)
3027 arch="x86"
3028 ;;
3029 esac
3030
3031 is_in $arch $ARCH_LIST || warn "unknown architecture $arch"
3032 enable $arch
3033
3034 # Add processor-specific flags
3035 if enabled aarch64; then
3036
3037 case $cpu in
3038 armv*)
3039 cpuflags="-march=$cpu"
3040 ;;
3041 *)
3042 cpuflags="-mcpu=$cpu"
3043 ;;
3044 esac
3045
3046 elif enabled alpha; then
3047
3048 cpuflags="-mcpu=$cpu"
3049
3050 elif enabled arm; then
3051
3052 check_arm_arch() {
3053 check_cpp_condition stddef.h \
3054 "defined __ARM_ARCH_${1}__ || defined __TARGET_ARCH_${2:-$1}" \
3055 $cpuflags
3056 }
3057
3058 probe_arm_arch() {
3059 if check_arm_arch 4; then echo armv4;
3060 elif check_arm_arch 4T; then echo armv4t;
3061 elif check_arm_arch 5; then echo armv5;
3062 elif check_arm_arch 5E; then echo armv5e;
3063 elif check_arm_arch 5T; then echo armv5t;
3064 elif check_arm_arch 5TE; then echo armv5te;
3065 elif check_arm_arch 5TEJ; then echo armv5te;
3066 elif check_arm_arch 6; then echo armv6;
3067 elif check_arm_arch 6J; then echo armv6j;
3068 elif check_arm_arch 6K; then echo armv6k;
3069 elif check_arm_arch 6Z; then echo armv6z;
3070 elif check_arm_arch 6ZK; then echo armv6zk;
3071 elif check_arm_arch 6T2; then echo armv6t2;
3072 elif check_arm_arch 7; then echo armv7;
3073 elif check_arm_arch 7A 7_A; then echo armv7-a;
3074 elif check_arm_arch 7R 7_R; then echo armv7-r;
3075 elif check_arm_arch 7M 7_M; then echo armv7-m;
3076 elif check_arm_arch 7EM 7E_M; then echo armv7-m;
3077 elif check_arm_arch 8A 8_A; then echo armv8-a;
3078 fi
3079 }
3080
3081 [ "$cpu" = generic ] && cpu=$(probe_arm_arch)
3082
3083 case $cpu in
3084 armv*)
3085 cpuflags="-march=$cpu"
3086 subarch=$(echo $cpu | sed 's/[^a-z0-9]//g')
3087 ;;
3088 *)
3089 cpuflags="-mcpu=$cpu"
3090 case $cpu in
3091 cortex-a*) subarch=armv7a ;;
3092 cortex-r*) subarch=armv7r ;;
3093 cortex-m*) enable thumb; subarch=armv7m ;;
3094 arm11*) subarch=armv6 ;;
3095 arm[79]*e*|arm9[24]6*|arm96*|arm102[26]) subarch=armv5te ;;
3096 armv4*|arm7*|arm9[24]*) subarch=armv4 ;;
3097 *) subarch=$(probe_arm_arch) ;;
3098 esac
3099 ;;
3100 esac
3101
3102 case "$subarch" in
3103 armv5t*) enable fast_clz ;;
3104 armv[6-8]*) enable fast_clz fast_unaligned ;;
3105 esac
3106
3107 elif enabled avr32; then
3108
3109 case $cpu in
3110 ap7[02]0[0-2])
3111 subarch="avr32_ap"
3112 cpuflags="-mpart=$cpu"
3113 ;;
3114 ap)
3115 subarch="avr32_ap"
3116 cpuflags="-march=$cpu"
3117 ;;
3118 uc3[ab]*)
3119 subarch="avr32_uc"
3120 cpuflags="-mcpu=$cpu"
3121 ;;
3122 uc)
3123 subarch="avr32_uc"
3124 cpuflags="-march=$cpu"
3125 ;;
3126 esac
3127
3128 elif enabled bfin; then
3129
3130 cpuflags="-mcpu=$cpu"
3131
3132 elif enabled mips; then
3133
3134 cpuflags="-march=$cpu"
3135
3136 elif enabled ppc; then
3137
3138 case $(tolower $cpu) in
3139 601|ppc601|powerpc601)
3140 cpuflags="-mcpu=601"
3141 disable altivec
3142 ;;
3143 603*|ppc603*|powerpc603*)
3144 cpuflags="-mcpu=603"
3145 disable altivec
3146 ;;
3147 604*|ppc604*|powerpc604*)
3148 cpuflags="-mcpu=604"
3149 disable altivec
3150 ;;
3151 g3|75*|ppc75*|powerpc75*)
3152 cpuflags="-mcpu=750"
3153 disable altivec
3154 ;;
3155 g4|745*|ppc745*|powerpc745*)
3156 cpuflags="-mcpu=7450"
3157 ;;
3158 74*|ppc74*|powerpc74*)
3159 cpuflags="-mcpu=7400"
3160 ;;
3161 g5|970|ppc970|powerpc970)
3162 cpuflags="-mcpu=970"
3163 ;;
3164 power[3-7]*)
3165 cpuflags="-mcpu=$cpu"
3166 ;;
3167 cell)
3168 cpuflags="-mcpu=cell"
3169 enable ldbrx
3170 ;;
3171 e500mc)
3172 cpuflags="-mcpu=e500mc"
3173 disable altivec
3174 ;;
3175 e500v2)
3176 cpuflags="-mcpu=8548 -mhard-float -mfloat-gprs=double"
3177 disable altivec
3178 ;;
3179 e500)
3180 cpuflags="-mcpu=8540 -mhard-float"
3181 disable altivec
3182 ;;
3183 esac
3184
3185 elif enabled sparc; then
3186
3187 case $cpu in
3188 cypress|f93[04]|tsc701|sparcl*|supersparc|hypersparc|niagara|v[789])
3189 cpuflags="-mcpu=$cpu"
3190 ;;
3191 ultrasparc*|niagara[234])
3192 cpuflags="-mcpu=$cpu"
3193 ;;
3194 esac
3195
3196 elif enabled x86; then
3197
3198 case $cpu in
3199 i[345]86|pentium)
3200 cpuflags="-march=$cpu"
3201 disable mmx
3202 ;;
3203 # targets that do NOT support nopl and conditional mov (cmov)
3204 pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
3205 cpuflags="-march=$cpu"
3206 disable i686
3207 ;;
3208 # targets that do support nopl and conditional mov (cmov)
3209 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*)
3210 cpuflags="-march=$cpu"
3211 enable i686
3212 enable fast_cmov
3213 ;;
3214 # targets that do support conditional mov but on which it's slow
3215 pentium4|pentium4m|prescott|nocona)
3216 cpuflags="-march=$cpu"
3217 enable i686
3218 disable fast_cmov
3219 ;;
3220 esac
3221
3222 fi
3223
3224 if [ "$cpu" != generic ]; then
3225 add_cflags $cpuflags
3226 add_asflags $cpuflags
3227 fi
3228
3229 # compiler sanity check
3230 check_exec <<EOF
3231 int main(void){ return 0; }
3232 EOF
3233 if test "$?" != 0; then
3234 echo "$cc is unable to create an executable file."
3235 if test -z "$cross_prefix" && ! enabled cross_compile ; then
3236 echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
3237 echo "Only do this if you know what cross compiling means."
3238 fi
3239 die "C compiler test failed."
3240 fi
3241
3242 add_cppflags -D_ISOC99_SOURCE
3243 check_cflags -std=c99
3244 check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
3245 #include <stdlib.h>
3246 EOF
3247 check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
3248 #include <stdlib.h>
3249 EOF
3250
3251 add_host_cppflags -D_ISOC99_SOURCE
3252 check_host_cflags -std=c99
3253 check_host_cflags -Wall
3254 check_host_cflags -O3
3255
3256 check_64bit(){
3257 arch32=$1
3258 arch64=$2
3259 expr=$3
3260 check_code cc "" "int test[2*($expr) - 1]" &&
3261 subarch=$arch64 || subarch=$arch32
3262 }
3263
3264 case "$arch" in
3265 aarch64|alpha|ia64)
3266 spic=$shared
3267 ;;
3268 mips)
3269 check_64bit mips mips64 '_MIPS_SIM > 1'
3270 spic=$shared
3271 ;;
3272 parisc)
3273 check_64bit parisc parisc64 'sizeof(void *) > 4'
3274 spic=$shared
3275 ;;
3276 ppc)
3277 check_64bit ppc ppc64 'sizeof(void *) > 4'
3278 spic=$shared
3279 ;;
3280 s390)
3281 check_64bit s390 s390x 'sizeof(void *) > 4'
3282 spic=$shared
3283 ;;
3284 sparc)
3285 check_64bit sparc sparc64 'sizeof(void *) > 4'
3286 spic=$shared
3287 ;;
3288 x86)
3289 check_64bit x86_32 x86_64 'sizeof(void *) > 4'
3290 if test "$subarch" = "x86_64"; then
3291 spic=$shared
3292 fi
3293 ;;
3294 esac
3295
3296 enable $subarch
3297 enabled spic && enable_weak pic
3298
3299 # OS specific
3300 case $target_os in
3301 aix)
3302 SHFLAGS=-shared
3303 add_cppflags '-I\$(SRC_PATH)/compat/aix'
3304 enabled shared && add_ldflags -Wl,-brtl
3305 ;;
3306 haiku)
3307 prefix_default="/boot/common"
3308 network_extralibs="-lnetwork"
3309 host_libs=
3310 ;;
3311 sunos)
3312 SHFLAGS='-shared -Wl,-h,$$(@F)'
3313 enabled x86 && SHFLAGS="-mimpure-text $SHFLAGS"
3314 network_extralibs="-lsocket -lnsl"
3315 # When using suncc to build, the Solaris linker will mark
3316 # an executable with each instruction set encountered by
3317 # the Solaris assembler. As our libraries contain their own
3318 # guards for processor-specific code, instead suppress
3319 # generation of the HWCAPS ELF section on Solaris x86 only.
3320 enabled_all suncc x86 &&
3321 echo "hwcap_1 = OVERRIDE;" > mapfile &&
3322 add_ldflags -Wl,-M,mapfile
3323 nm_default='nm -P -g'
3324 ;;
3325 netbsd)
3326 disable symver
3327 oss_indev_extralibs="-lossaudio"
3328 oss_outdev_extralibs="-lossaudio"
3329 ;;
3330 openbsd|bitrig)
3331 disable symver
3332 SHFLAGS='-shared'
3333 SLIB_INSTALL_NAME='$(SLIBNAME).$(LIBMAJOR).$(LIBMINOR)'
3334 SLIB_INSTALL_LINKS=
3335 oss_indev_extralibs="-lossaudio"
3336 oss_outdev_extralibs="-lossaudio"
3337 ;;
3338 dragonfly)
3339 disable symver
3340 ;;
3341 freebsd)
3342 ;;
3343 bsd/os)
3344 add_extralibs -lpoll -lgnugetopt
3345 ;;
3346 darwin)
3347 gas="gas-preprocessor.pl $cc"
3348 enabled ppc && add_asflags -force_cpusubtype_ALL
3349 SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR)'
3350 enabled x86_32 && append SHFLAGS -Wl,-read_only_relocs,suppress
3351 add_ldflags -Wl,-dynamic,-search_paths_first
3352 SLIBSUF=".dylib"
3353 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
3354 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
3355 objformat="macho"
3356 enabled x86_64 && objformat="macho64"
3357 enabled_any pic shared ||
3358 { check_cflags -mdynamic-no-pic && add_asflags -mdynamic-no-pic; }
3359 ;;
3360 mingw32*)
3361 if test $target_os = "mingw32ce"; then
3362 disable network
3363 else
3364 target_os=mingw32
3365 fi
3366 LIBTARGET=i386
3367 if enabled x86_64; then
3368 LIBTARGET="i386:x86-64"
3369 elif enabled arm; then
3370 LIBTARGET=arm-wince
3371 fi
3372 check_ldflags -Wl,--nxcompat
3373 check_ldflags -Wl,--dynamicbase
3374 shlibdir_default="$bindir_default"
3375 SLIBPREF=""
3376 SLIBSUF=".dll"
3377 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
3378 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
3379 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)'
3380 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
3381 SLIB_INSTALL_LINKS=
3382 SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
3383 SLIB_INSTALL_EXTRA_LIB='lib$(SLIBNAME:$(SLIBSUF)=.dll.a) $(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
3384 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'
3385 objformat="win32"
3386 dlltool="${cross_prefix}dlltool"
3387 ranlib=:
3388 enable dos_paths
3389 ;;
3390 win32|win64)
3391 disable symver
3392 if enabled shared; then
3393 # Link to the import library instead of the normal static library
3394 # for shared libs.
3395 LD_LIB='%.lib'
3396 # Cannot build both shared and static libs with MSVC or icl.
3397 disable static
3398 fi
3399 shlibdir_default="$bindir_default"
3400 SLIBPREF=""
3401 SLIBSUF=".dll"
3402 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
3403 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
3404 SLIB_CREATE_DEF_CMD='$(SRC_PATH)/compat/windows/makedef $(SUBDIR)lib$(NAME).ver $(OBJS) > $$(@:$(SLIBSUF)=.def)'
3405 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
3406 SLIB_INSTALL_LINKS=
3407 SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
3408 SLIB_INSTALL_EXTRA_LIB='$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
3409 SHFLAGS='-dll -def:$$(@:$(SLIBSUF)=.def) -implib:$(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib)'
3410 objformat="win32"
3411 ranlib=:
3412 enable dos_paths
3413 ;;
3414 cygwin*)
3415 target_os=cygwin
3416 shlibdir_default="$bindir_default"
3417 SLIBPREF="cyg"
3418 SLIBSUF=".dll"
3419 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
3420 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
3421 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
3422 SLIB_INSTALL_LINKS=
3423 SLIB_INSTALL_EXTRA_LIB='lib$(FULLNAME).dll.a'
3424 SHFLAGS='-shared -Wl,--out-implib,$(SUBDIR)lib$(FULLNAME).dll.a'
3425 objformat="win32"
3426 enable dos_paths
3427 ;;
3428 *-dos|freedos|opendos)
3429 network_extralibs="-lsocket"
3430 objformat="coff"
3431 enable dos_paths
3432 add_cppflags -U__STRICT_ANSI__
3433 ;;
3434 linux)
3435 enable dv1394
3436 ;;
3437 irix*)
3438 target_os=irix
3439 ranlib="echo ignoring ranlib"
3440 ;;
3441 os/2*)
3442 ln_s="cp -f"
3443 objformat="aout"
3444 add_cppflags -D_GNU_SOURCE
3445 add_ldflags -Zomf -Zbin-files -Zargs-wild -Zmap
3446 SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
3447 LIBSUF="_s.a"
3448 SLIBPREF=""
3449 SLIBSUF=".dll"
3450 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
3451 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
3452 SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
3453 echo PROTMODE >> $(SUBDIR)$(NAME).def; \
3454 echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
3455 echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
3456 echo EXPORTS >> $(SUBDIR)$(NAME).def; \
3457 emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
3458 SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
3459 emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
3460 SLIB_INSTALL_EXTRA_LIB='$(LIBPREF)$(NAME)_dll.a $(LIBPREF)$(NAME)_dll.lib'
3461 enable dos_paths
3462 ;;
3463 gnu/kfreebsd)
3464 add_cppflags -D_BSD_SOURCE
3465 ;;
3466 gnu)
3467 ;;
3468 qnx)
3469 add_cppflags -D_QNX_SOURCE
3470 network_extralibs="-lsocket"
3471 ;;
3472 symbian)
3473 SLIBSUF=".dll"
3474 enable dos_paths
3475 add_cflags --include=$sysinclude/gcce/gcce.h -fvisibility=default
3476 add_cppflags -D__GCCE__ -D__SYMBIAN32__ -DSYMBIAN_OE_POSIX_SIGNALS
3477 add_ldflags -Wl,--target1-abs,--no-undefined \
3478 -Wl,-Ttext,0x80000,-Tdata,0x1000000 -shared \
3479 -Wl,--entry=_E32Startup -Wl,-u,_E32Startup
3480 add_extralibs -l:eexe.lib -l:usrt2_2.lib -l:dfpaeabi.dso \
3481 -l:drtaeabi.dso -l:scppnwdl.dso -lsupc++ -lgcc \
3482 -l:libc.dso -l:libm.dso -l:euser.dso -l:libcrt0.lib
3483 ;;
3484 osf1)
3485 add_cppflags -D_OSF_SOURCE -D_POSIX_PII -D_REENTRANT
3486 ;;
3487 minix)
3488 ;;
3489 plan9)
3490 add_cppflags -D_C99_SNPRINTF_EXTENSION \
3491 -D_REENTRANT_SOURCE \
3492 -D_RESEARCH_SOURCE \
3493 -DFD_SETSIZE=96 \
3494 -DHAVE_SOCK_OPTS
3495 add_compat strtod.o strtod=avpriv_strtod
3496 network_extralibs='-lbsd'
3497 exeobjs=compat/plan9/main.o
3498 disable avserver
3499 cp_f='cp'
3500 ;;
3501 none)
3502 ;;
3503 *)
3504 die "Unknown OS '$target_os'."
3505 ;;
3506 esac
3507
3508 # determine libc flavour
3509
3510 probe_libc(){
3511 pfx=$1
3512 pfx_no_=${pfx%_}
3513 # uclibc defines __GLIBC__, so it needs to be checked before glibc.
3514 if check_${pfx}cpp_condition features.h "defined __UCLIBC__"; then
3515 eval ${pfx}libc_type=uclibc
3516 add_${pfx}cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
3517 elif check_${pfx}cpp_condition features.h "defined __GLIBC__"; then
3518 eval ${pfx}libc_type=glibc
3519 add_${pfx}cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
3520 # MinGW headers can be installed on Cygwin, so check for newlib first.
3521 elif check_${pfx}cpp_condition newlib.h "defined _NEWLIB_VERSION"; then
3522 eval ${pfx}libc_type=newlib
3523 add_${pfx}cppflags -U__STRICT_ANSI__
3524 # MinGW64 is backwards compatible with MinGW32, so check for it first.
3525 elif check_${pfx}cpp_condition _mingw.h "defined __MINGW64_VERSION_MAJOR"; then
3526 eval ${pfx}libc_type=mingw64
3527 add_${pfx}cppflags -U__STRICT_ANSI__ -D__USE_MINGW_ANSI_STDIO=1
3528 eval test \$${pfx_no_}cc_type = "gcc" &&
3529 add_${pfx}cppflags -D__printf__=__gnu_printf__
3530 elif check_${pfx}cpp_condition _mingw.h "defined __MINGW_VERSION" ||
3531 check_${pfx}cpp_condition _mingw.h "defined __MINGW32_VERSION"; then
3532 eval ${pfx}libc_type=mingw32
3533 check_${pfx}cpp_condition _mingw.h "__MINGW32_MAJOR_VERSION > 3 || \
3534 (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
3535 die "ERROR: MinGW32 runtime version must be >= 3.15."
3536 add_${pfx}cppflags -U__STRICT_ANSI__ -D__USE_MINGW_ANSI_STDIO=1
3537 eval test \$${pfx_no_}cc_type = "gcc" &&
3538 add_${pfx}cppflags -D__printf__=__gnu_printf__
3539 elif check_${pfx}cpp_condition crtversion.h "defined _VC_CRT_MAJOR_VERSION"; then
3540 eval ${pfx}libc_type=msvcrt
3541 # The MSVC 2010 headers (Win 7.0 SDK) set _WIN32_WINNT to
3542 # 0x601 by default unless something else is set by the user.
3543 # This can easily lead to us detecting functions only present
3544 # in such new versions and producing binaries requiring windows 7.0.
3545 # Therefore explicitly set the default to XP unless the user has
3546 # set something else on the command line.
3547 check_${pfx}cpp_condition stdlib.h "defined(_WIN32_WINNT)" ||
3548 add_${pfx}cppflags -D_WIN32_WINNT=0x0502
3549 elif check_${pfx}cpp_condition stddef.h "defined __KLIBC__"; then
3550 eval ${pfx}libc_type=klibc
3551 elif check_${pfx}cpp_condition sys/cdefs.h "defined __BIONIC__"; then
3552 eval ${pfx}libc_type=bionic
3553 elif check_${pfx}cpp_condition sys/brand.h "defined LABELED_BRAND_NAME"; then
3554 eval ${pfx}libc_type=solaris
3555 add_${pfx}cppflags -D__EXTENSIONS__ -D_XOPEN_SOURCE=600
3556 fi
3557 }
3558
3559 probe_libc
3560 test -n "$libc_type" && enable libc_$libc_type
3561 probe_libc host_
3562 test -n "$host_libc_type" && enable host_libc_$host_libc_type
3563
3564 case $libc_type in
3565 bionic)
3566 add_compat strtod.o strtod=avpriv_strtod
3567 ;;
3568 msvcrt)
3569 add_compat strtod.o strtod=avpriv_strtod
3570 add_compat msvcrt/snprintf.o snprintf=avpriv_snprintf \
3571 _snprintf=avpriv_snprintf \
3572 vsnprintf=avpriv_vsnprintf
3573 ;;
3574 esac
3575
3576 # hacks for compiler/libc/os combinations
3577
3578 if enabled_all tms470 libc_glibc; then
3579 CPPFLAGS="-I${source_path}/compat/tms470 ${CPPFLAGS}"
3580 add_cppflags -D__USER_LABEL_PREFIX__=
3581 add_cppflags -D__builtin_memset=memset
3582 add_cppflags -D__gnuc_va_list=va_list -D_VA_LIST_DEFINED
3583 add_cflags -pds=48 # incompatible redefinition of macro
3584 fi
3585
3586 if enabled_all ccc libc_glibc; then
3587 add_ldflags -Wl,-z,now # calls to libots crash without this
3588 fi
3589
3590 check_compile_assert flt_lim "float.h limits.h" "DBL_MAX == (double)DBL_MAX" ||
3591 add_cppflags '-I\$(SRC_PATH)/compat/float'
3592
3593 esc(){
3594 echo "$*" | sed 's/%/%25/g;s/:/%3a/g'
3595 }
3596
3597 echo "config:$arch:$subarch:$cpu:$target_os:$(esc $cc_ident):$(esc $LIBAV_CONFIGURATION)" >config.fate
3598
3599 check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable_weak pic
3600
3601 set_default $PATHS_LIST
3602 set_default nm
3603
3604 # we need to build at least one lib type
3605 if ! enabled_any static shared; then
3606 cat <<EOF
3607 At least one library type must be built.
3608 Specify --enable-static to build the static libraries or --enable-shared to
3609 build the shared libraries as well. To only build the shared libraries specify
3610 --disable-static in addition to --enable-shared.
3611 EOF
3612 exit 1;
3613 fi
3614
3615 die_license_disabled() {
3616 enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
3617 }
3618
3619 die_license_disabled gpl libcdio
3620 die_license_disabled gpl libx264
3621 die_license_disabled gpl libx265
3622 die_license_disabled gpl libxavs
3623 die_license_disabled gpl libxvid
3624 die_license_disabled gpl x11grab
3625
3626 die_license_disabled nonfree libfaac
3627 die_license_disabled nonfree libfdk_aac
3628 die_license_disabled nonfree openssl
3629
3630 die_license_disabled version3 libopencore_amrnb
3631 die_license_disabled version3 libopencore_amrwb
3632 die_license_disabled version3 libvo_aacenc
3633 die_license_disabled version3 libvo_amrwbenc
3634
3635 enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
3636
3637 disabled optimizations || check_cflags -fomit-frame-pointer
3638
3639 enable_weak_pic() {
3640 disabled pic && return
3641 enable pic
3642 add_cppflags -DPIC
3643 case "$target_os" in
3644 mingw*|cygwin*)
3645 ;;
3646 *)
3647 add_cflags -fPIC
3648 ;;
3649 esac
3650 add_asflags -fPIC
3651 }
3652
3653 enabled pic && enable_weak_pic
3654
3655 check_cc <<EOF || die "Symbol mangling check failed."
3656 int ff_extern;
3657 EOF
3658 sym=$($nm $TMPO | awk '/ff_extern/{ print substr($0, match($0, /[^ \t]*ff_extern/)) }')
3659 extern_prefix=${sym%%ff_extern*}
3660
3661 check_cc <<EOF && enable_weak inline_asm
3662 void foo(void) { __asm__ volatile ("" ::); }
3663 EOF
3664
3665 _restrict=
3666 for restrict_keyword in restrict __restrict__ __restrict; do
3667 check_cc <<EOF && _restrict=$restrict_keyword && break
3668 void foo(char * $restrict_keyword p);
3669 EOF
3670 done
3671
3672 check_cc <<EOF && enable pragma_deprecated
3673 void foo(void) { _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") }
3674 EOF
3675
3676 check_cc <<EOF && enable attribute_packed
3677 struct { int x; } __attribute__((packed)) x;
3678 EOF
3679
3680 check_cc <<EOF && enable attribute_may_alias
3681 union { int x; } __attribute__((may_alias)) x;
3682 EOF
3683
3684 check_cc <<EOF || die "endian test failed"
3685 unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
3686 EOF
3687 od -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
3688
3689 check_inline_asm inline_asm_labels '"1:\n"'
3690
3691 if enabled aarch64; then
3692 # internal assembler in clang 3.3 does not support this instruction
3693 enabled neon && check_insn neon 'ext v0.8B, v0.8B, v1.8B, #1'
3694 enabled vfp && check_insn vfp 'fmadd d0, d0, d1, d2'
3695
3696 map 'enabled_any ${v}_external ${v}_inline || disable $v' $ARCH_EXT_LIST_ARM
3697
3698 elif enabled alpha; then
3699
3700 check_cflags -mieee
3701
3702 elif enabled arm; then
3703
3704 check_cpp_condition stddef.h "defined __thumb__" && enable_weak thumb
3705 enabled thumb && check_cflags -mthumb || check_cflags -marm
3706 nogas=die
3707
3708 if check_cpp_condition stddef.h "defined __ARM_PCS_VFP"; then