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