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