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