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