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