build: Add proper infrastructure for adding and checking host CPPFLAGS
[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 vaapi_deps="va_va_h"
1623 vda_deps="VideoDecodeAcceleration_VDADecoder_h pthreads"
1624 vda_extralibs="-framework CoreFoundation -framework VideoDecodeAcceleration -framework QuartzCore"
1625 vdpau_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1626
1627 h263_vaapi_hwaccel_select="vaapi h263_decoder"
1628 h263_vdpau_hwaccel_select="vdpau h263_decoder"
1629 h264_dxva2_hwaccel_deps="dxva2api_h"
1630 h264_dxva2_hwaccel_select="dxva2 h264_decoder"
1631 h264_vaapi_hwaccel_select="vaapi h264_decoder"
1632 h264_vda_hwaccel_select="vda h264_decoder"
1633 h264_vdpau_decoder_select="vdpau h264_decoder"
1634 h264_vdpau_hwaccel_select="vdpau h264_decoder"
1635 mpeg_vdpau_decoder_select="vdpau mpegvideo_decoder"
1636 mpeg1_vdpau_decoder_select="vdpau mpeg1video_decoder"
1637 mpeg1_vdpau_hwaccel_select="vdpau mpeg1video_decoder"
1638 mpeg2_dxva2_hwaccel_deps="dxva2api_h"
1639 mpeg2_dxva2_hwaccel_select="dxva2 mpeg2video_decoder"
1640 mpeg2_vaapi_hwaccel_select="vaapi mpeg2video_decoder"
1641 mpeg2_vdpau_hwaccel_select="vdpau mpeg2video_decoder"
1642 mpeg4_vaapi_hwaccel_select="vaapi mpeg4_decoder"
1643 mpeg4_vdpau_decoder_select="vdpau mpeg4_decoder"
1644 mpeg4_vdpau_hwaccel_select="vdpau mpeg4_decoder"
1645 vc1_dxva2_hwaccel_deps="dxva2api_h"
1646 vc1_dxva2_hwaccel_select="dxva2 vc1_decoder"
1647 vc1_vaapi_hwaccel_select="vaapi vc1_decoder"
1648 vc1_vdpau_decoder_select="vdpau vc1_decoder"
1649 vc1_vdpau_hwaccel_select="vdpau vc1_decoder"
1650 wmv3_dxva2_hwaccel_select="vc1_dxva2_hwaccel"
1651 wmv3_vaapi_hwaccel_select="vc1_vaapi_hwaccel"
1652 wmv3_vdpau_decoder_select="vc1_vdpau_decoder"
1653 wmv3_vdpau_hwaccel_select="vc1_vdpau_hwaccel"
1654
1655 # parsers
1656 h264_parser_select="error_resilience golomb h264chroma h264dsp h264pred h264qpel mpegvideo"
1657 mpeg4video_parser_select="error_resilience mpegvideo"
1658 mpegvideo_parser_select="error_resilience mpegvideo"
1659 vc1_parser_select="error_resilience mpegvideo"
1660
1661 # external libraries
1662 libfaac_encoder_deps="libfaac"
1663 libfaac_encoder_select="audio_frame_queue"
1664 libfdk_aac_encoder_deps="libfdk_aac"
1665 libfdk_aac_encoder_select="audio_frame_queue"
1666 libgsm_decoder_deps="libgsm"
1667 libgsm_encoder_deps="libgsm"
1668 libgsm_ms_decoder_deps="libgsm"
1669 libgsm_ms_encoder_deps="libgsm"
1670 libilbc_decoder_deps="libilbc"
1671 libilbc_encoder_deps="libilbc"
1672 libmp3lame_encoder_deps="libmp3lame"
1673 libmp3lame_encoder_select="audio_frame_queue"
1674 libopencore_amrnb_decoder_deps="libopencore_amrnb"
1675 libopencore_amrnb_encoder_deps="libopencore_amrnb"
1676 libopencore_amrnb_encoder_select="audio_frame_queue"
1677 libopencore_amrwb_decoder_deps="libopencore_amrwb"
1678 libopenjpeg_decoder_deps="libopenjpeg"
1679 libopenjpeg_encoder_deps="libopenjpeg"
1680 libopus_decoder_deps="libopus"
1681 libopus_encoder_deps="libopus"
1682 libopus_encoder_select="audio_frame_queue"
1683 libschroedinger_decoder_deps="libschroedinger"
1684 libschroedinger_encoder_deps="libschroedinger"
1685 libspeex_decoder_deps="libspeex"
1686 libspeex_encoder_deps="libspeex"
1687 libspeex_encoder_select="audio_frame_queue"
1688 libtheora_encoder_deps="libtheora"
1689 libvo_aacenc_encoder_deps="libvo_aacenc"
1690 libvo_aacenc_encoder_select="audio_frame_queue"
1691 libvo_amrwbenc_encoder_deps="libvo_amrwbenc"
1692 libvorbis_encoder_deps="libvorbis"
1693 libvorbis_encoder_select="audio_frame_queue"
1694 libvpx_vp8_decoder_deps="libvpx"
1695 libvpx_vp8_encoder_deps="libvpx"
1696 libvpx_vp9_decoder_deps="libvpx"
1697 libvpx_vp9_encoder_deps="libvpx"
1698 libx264_encoder_deps="libx264"
1699 libxavs_encoder_deps="libxavs"
1700 libxvid_encoder_deps="libxvid"
1701
1702 # demuxers / muxers
1703 ac3_demuxer_select="ac3_parser"
1704 asf_stream_muxer_select="asf_muxer"
1705 avisynth_demuxer_deps="avisynth"
1706 dirac_demuxer_select="dirac_parser"
1707 eac3_demuxer_select="ac3_parser"
1708 flac_demuxer_select="flac_parser"
1709 ipod_muxer_select="mov_muxer"
1710 ismv_muxer_select="mov_muxer"
1711 matroska_audio_muxer_select="matroska_muxer"
1712 matroska_demuxer_suggest="bzlib lzo zlib"
1713 mov_demuxer_suggest="zlib"
1714 mov_muxer_select="rtpenc_chain"
1715 mp3_demuxer_select="mpegaudio_parser"
1716 mp4_muxer_select="mov_muxer"
1717 mpegts_muxer_select="adts_muxer latm_muxer mpegvideo"
1718 mpegtsraw_demuxer_select="mpegts_demuxer"
1719 mxf_d10_muxer_select="mxf_muxer"
1720 ogg_demuxer_select="golomb"
1721 psp_muxer_select="mov_muxer"
1722 rtp_demuxer_select="sdp_demuxer"
1723 rtp_muxer_select="mpegvideo"
1724 rtpdec_select="asf_demuxer rm_demuxer rtp_protocol mpegts_demuxer mov_demuxer"
1725 rtsp_demuxer_select="http_protocol rtpdec"
1726 rtsp_muxer_select="rtp_muxer http_protocol rtp_protocol rtpenc_chain"
1727 sap_demuxer_select="sdp_demuxer"
1728 sap_muxer_select="rtp_muxer rtp_protocol rtpenc_chain"
1729 sdp_demuxer_select="rtpdec"
1730 smoothstreaming_muxer_select="ismv_muxer"
1731 spdif_muxer_select="aac_parser"
1732 tak_demuxer_select="tak_parser"
1733 tg2_muxer_select="mov_muxer"
1734 tgp_muxer_select="mov_muxer"
1735 w64_demuxer_deps="wav_demuxer"
1736
1737 # indevs / outdevs
1738 alsa_indev_deps="alsa_asoundlib_h snd_pcm_htimestamp"
1739 alsa_outdev_deps="alsa_asoundlib_h"
1740 bktr_indev_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
1741 dv1394_indev_deps="dv1394 dv_demuxer"
1742 fbdev_indev_deps="linux_fb_h"
1743 jack_indev_deps="jack_jack_h"
1744 libcdio_indev_deps="libcdio"
1745 libdc1394_indev_deps="libdc1394"
1746 oss_indev_deps_any="soundcard_h sys_soundcard_h"
1747 oss_outdev_deps_any="soundcard_h sys_soundcard_h"
1748 pulse_indev_deps="libpulse"
1749 sndio_indev_deps="sndio_h"
1750 sndio_outdev_deps="sndio_h"
1751 v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h"
1752 vfwcap_indev_deps="capCreateCaptureWindow vfwcap_defines"
1753 vfwcap_indev_extralibs="-lavicap32"
1754 x11grab_indev_deps="x11grab XShmCreateImage"
1755
1756 # protocols
1757 ffrtmpcrypt_protocol_deps="!librtmp_protocol"
1758 ffrtmpcrypt_protocol_deps_any="gcrypt nettle openssl"
1759 ffrtmpcrypt_protocol_select="tcp_protocol"
1760 ffrtmphttp_protocol_deps="!librtmp_protocol"
1761 ffrtmphttp_protocol_select="http_protocol"
1762 gopher_protocol_select="network"
1763 httpproxy_protocol_select="tcp_protocol"
1764 http_protocol_select="tcp_protocol"
1765 https_protocol_select="tls_protocol"
1766 librtmp_protocol_deps="librtmp"
1767 librtmpe_protocol_deps="librtmp"
1768 librtmps_protocol_deps="librtmp"
1769 librtmpt_protocol_deps="librtmp"
1770 librtmpte_protocol_deps="librtmp"
1771 mmsh_protocol_select="http_protocol"
1772 mmst_protocol_select="network"
1773 rtmp_protocol_deps="!librtmp_protocol"
1774 rtmp_protocol_select="tcp_protocol"
1775 rtmpe_protocol_select="ffrtmpcrypt_protocol"
1776 rtmps_protocol_deps="!librtmp_protocol"
1777 rtmps_protocol_select="tls_protocol"
1778 rtmpt_protocol_select="ffrtmphttp_protocol"
1779 rtmpte_protocol_select="ffrtmpcrypt_protocol ffrtmphttp_protocol"
1780 rtmpts_protocol_select="ffrtmphttp_protocol https_protocol"
1781 rtp_protocol_select="udp_protocol"
1782 sctp_protocol_deps="struct_sctp_event_subscribe"
1783 sctp_protocol_select="network"
1784 srtp_protocol_select="rtp_protocol"
1785 tcp_protocol_select="network"
1786 tls_protocol_deps_any="openssl gnutls"
1787 tls_protocol_select="tcp_protocol"
1788 udp_protocol_select="network"
1789
1790 # filters
1791 blackframe_filter_deps="gpl"
1792 boxblur_filter_deps="gpl"
1793 cropdetect_filter_deps="gpl"
1794 delogo_filter_deps="gpl"
1795 drawtext_filter_deps="libfreetype"
1796 frei0r_filter_deps="frei0r dlopen strtok_r"
1797 frei0r_filter_extralibs='$ldl'
1798 frei0r_src_filter_deps="frei0r dlopen strtok_r"
1799 frei0r_src_filter_extralibs='$ldl'
1800 hqdn3d_filter_deps="gpl"
1801 resample_filter_deps="avresample"
1802 ocv_filter_deps="libopencv"
1803 scale_filter_deps="swscale"
1804 yadif_filter_deps="gpl"
1805
1806 # libraries
1807 avcodec_deps="avutil"
1808 avdevice_deps="avutil avcodec avformat"
1809 avfilter_deps="avutil"
1810 avformat_deps="avutil avcodec"
1811 avresample_deps="avutil"
1812 swscale_deps="avutil"
1813
1814 # programs
1815 avconv_deps="avcodec avfilter avformat avresample swscale"
1816 avconv_select="aformat_filter anull_filter asyncts_filter format_filter
1817 fps_filter null_filter resample_filter scale_filter
1818 setpts_filter"
1819 avplay_deps="avcodec avformat avresample swscale sdl"
1820 avplay_select="rdft"
1821 avprobe_deps="avcodec avformat"
1822 avserver_deps="avformat ffm_muxer fork rtp_protocol rtsp_demuxer !shared"
1823 avserver_extralibs='$ldl'
1824
1825 doc_deps="texi2html"
1826
1827 # default parameters
1828
1829 logfile="config.log"
1830
1831 # installation paths
1832 prefix_default="/usr/local"
1833 bindir_default='${prefix}/bin'
1834 datadir_default='${prefix}/share/avconv'
1835 incdir_default='${prefix}/include'
1836 libdir_default='${prefix}/lib'
1837 mandir_default='${prefix}/share/man'
1838 shlibdir_default="$libdir_default"
1839
1840 # toolchain
1841 ar_default="ar"
1842 cc_default="gcc"
1843 host_cc_default="gcc"
1844 cp_f="cp -f"
1845 ln_s="ln -sf"
1846 nm_default="nm -g"
1847 objformat="elf"
1848 pkg_config_default=pkg-config
1849 ranlib="ranlib"
1850 yasmexe="yasm"
1851
1852 nogas=":"
1853
1854 # machine
1855 arch_default=$(uname -m)
1856 cpu="generic"
1857
1858 # OS
1859 target_os_default=$(tolower $(uname -s))
1860 host_os=$target_os_default
1861
1862 # configurable options
1863 enable $LIBRARY_LIST $PROGRAM_LIST
1864
1865 enable asm
1866 enable debug
1867 enable doc
1868 enable optimizations
1869 enable safe_bitstream_reader
1870 enable static
1871 enable swscale_alpha
1872
1873 # build settings
1874 SHFLAGS='-shared -Wl,-soname,$$(@F)'
1875 AVSERVERLDFLAGS=-Wl,-E
1876 LIBPREF="lib"
1877 LIBSUF=".a"
1878 FULLNAME='$(NAME)$(BUILDSUF)'
1879 LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
1880 SLIBPREF="lib"
1881 SLIBSUF=".so"
1882 SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
1883 SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
1884 SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
1885 LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
1886 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'
1887 SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR) $(SLIBNAME)'
1888
1889 asflags_filter=echo
1890 cflags_filter=echo
1891 ldflags_filter=echo
1892
1893 AS_C='-c'
1894 AS_O='-o $@'
1895 CC_C='-c'
1896 CC_E='-E -o $@'
1897 CC_O='-o $@'
1898 LD_O='-o $@'
1899 LD_LIB='-l%'
1900 LD_PATH='-L'
1901 HOSTCC_C='-c'
1902 HOSTCC_O='-o $@'
1903 HOSTLD_O='-o $@'
1904
1905 host_cflags='-O3 -g'
1906 host_cppflags='-D_ISOC99_SOURCE -D_XOPEN_SOURCE=600'
1907 host_libs='-lm'
1908 host_cflags_filter=echo
1909 host_ldflags_filter=echo
1910
1911 target_path='$(CURDIR)'
1912
1913 # since the object filename is not given with the -MM flag, the compiler
1914 # is only able to print the basename, and we must add the path ourselves
1915 DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o," > $(@:.o=.d)'
1916 DEPFLAGS='-MM'
1917
1918 # find source path
1919 if test -f configure; then
1920 source_path=.
1921 else
1922 source_path=$(cd $(dirname "$0"); pwd)
1923 echo "$source_path" | grep -q '[[:blank:]]' &&
1924 die "Out of tree builds are impossible with whitespace in source path."
1925 test -e "$source_path/config.h" &&
1926 die "Out of tree builds are impossible with config.h in source dir."
1927 fi
1928
1929 for v in "$@"; do
1930 r=${v#*=}
1931 l=${v%"$r"}
1932 r=$(sh_quote "$r")
1933 LIBAV_CONFIGURATION="${LIBAV_CONFIGURATION# } ${l}${r}"
1934 done
1935
1936 find_things(){
1937 thing=$1
1938 pattern=$2
1939 file=$source_path/$3
1940 sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
1941 }
1942
1943 ENCODER_LIST=$(find_things encoder ENC libavcodec/allcodecs.c)
1944 DECODER_LIST=$(find_things decoder DEC libavcodec/allcodecs.c)
1945 HWACCEL_LIST=$(find_things hwaccel HWACCEL libavcodec/allcodecs.c)
1946 PARSER_LIST=$(find_things parser PARSER libavcodec/allcodecs.c)
1947 BSF_LIST=$(find_things bsf BSF libavcodec/allcodecs.c)
1948 MUXER_LIST=$(find_things muxer _MUX libavformat/allformats.c)
1949 DEMUXER_LIST=$(find_things demuxer DEMUX libavformat/allformats.c)
1950 OUTDEV_LIST=$(find_things outdev OUTDEV libavdevice/alldevices.c)
1951 INDEV_LIST=$(find_things indev _IN libavdevice/alldevices.c)
1952 PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
1953 FILTER_LIST=$(find_things filter FILTER libavfilter/allfilters.c)
1954
1955 ALL_COMPONENTS="
1956 $BSF_LIST
1957 $DECODER_LIST
1958 $DEMUXER_LIST
1959 $ENCODER_LIST
1960 $FILTER_LIST
1961 $HWACCEL_LIST
1962 $INDEV_LIST
1963 $MUXER_LIST
1964 $OUTDEV_LIST
1965 $PARSER_LIST
1966 $PROTOCOL_LIST
1967 "
1968
1969 for n in $COMPONENT_LIST; do
1970 v=$(toupper ${n%s})_LIST
1971 eval enable \$$v
1972 eval ${n}_if_any="\$$v"
1973 done
1974
1975 enable $ARCH_EXT_LIST
1976
1977 die_unknown(){
1978 echo "Unknown option \"$1\"."
1979 echo "See $0 --help for available options."
1980 exit 1
1981 }
1982
1983 print_3_columns() {
1984 cat | tr ' ' '\n' | sort | pr -r -3 -t
1985 }
1986
1987 show_list() {
1988 suffix=_$1
1989 shift
1990 echo $* | sed s/$suffix//g | print_3_columns
1991 exit 0
1992 }
1993
1994 rand_list(){
1995 IFS=', '
1996 set -- $*
1997 unset IFS
1998 for thing; do
1999 comp=${thing%:*}
2000 prob=${thing#$comp}
2001 prob=${prob#:}
2002 is_in ${comp} $COMPONENT_LIST && eval comp=\$$(toupper ${comp%s})_LIST
2003 echo "prob ${prob:-0.5}"
2004 printf '%s\n' $comp
2005 done
2006 }
2007
2008 do_random(){
2009 action=$1
2010 shift
2011 random_seed=$(awk "BEGIN { srand($random_seed); print srand() }")
2012 $action $(rand_list "$@" | awk "BEGIN { srand($random_seed) } \$1 == \"prob\" { prob = \$2; next } rand() < prob { print }")
2013 }
2014
2015 for opt do
2016 optval="${opt#*=}"
2017 case "$opt" in
2018 --extra-ldflags=*)
2019 add_ldflags $optval
2020 ;;
2021 --extra-libs=*)
2022 add_extralibs $optval
2023 ;;
2024 --disable-devices)
2025 disable $INDEV_LIST $OUTDEV_LIST
2026 ;;
2027 --enable-debug=*)
2028 debuglevel="$optval"
2029 ;;
2030 --disable-programs)
2031 disable $PROGRAM_LIST
2032 ;;
2033 --disable-everything)
2034 map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
2035 ;;
2036 --disable-all)
2037 map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
2038 disable $LIBRARY_LIST $PROGRAM_LIST doc
2039 ;;
2040 --enable-random|--disable-random)
2041 action=${opt%%-random}
2042 do_random ${action#--} $COMPONENT_LIST
2043 ;;
2044 --enable-random=*|--disable-random=*)
2045 action=${opt%%-random=*}
2046 do_random ${action#--} $optval
2047 ;;
2048 --enable-*=*|--disable-*=*)
2049 eval $(echo "${opt%%=*}" | sed 's/--/action=/;s/-/ thing=/')
2050 is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt"
2051 eval list=\$$(toupper $thing)_LIST
2052 name=$(echo "${optval}" | sed "s/,/_${thing}|/g")_${thing}
2053 $action $(filter "$name" $list)
2054 ;;
2055 --enable-?*|--disable-?*)
2056 eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
2057 if is_in $option $COMPONENT_LIST; then
2058 test $action = disable && action=unset
2059 eval $action \$$(toupper ${option%s})_LIST
2060 elif is_in $option $CMDLINE_SELECT; then
2061 $action $option
2062 else
2063 die_unknown $opt
2064 fi
2065 ;;
2066 --list-*)
2067 NAME="${opt#--list-}"
2068 is_in $NAME $COMPONENT_LIST || die_unknown $opt
2069 NAME=${NAME%s}
2070 eval show_list $NAME \$$(toupper $NAME)_LIST
2071 ;;
2072 --help|-h) show_help
2073 ;;
2074 *)
2075 optname="${opt%%=*}"
2076 optname="${optname#--}"
2077 optname=$(echo "$optname" | sed 's/-/_/g')
2078 if is_in $optname $CMDLINE_SET; then
2079 eval $optname='$optval'
2080 elif is_in $optname $CMDLINE_APPEND; then
2081 append $optname "$optval"
2082 else
2083 die_unknown $opt
2084 fi
2085 ;;
2086 esac
2087 done
2088
2089 disabled logging && logfile=/dev/null
2090
2091 echo "# $0 $LIBAV_CONFIGURATION" > $logfile
2092 set >> $logfile
2093
2094 test -n "$cross_prefix" && enable cross_compile
2095
2096 if enabled cross_compile; then
2097 test -n "$arch" && test -n "$target_os" ||
2098 die "Must specify target arch and OS when cross-compiling"
2099 fi
2100
2101 ar_default="${cross_prefix}${ar_default}"
2102 cc_default="${cross_prefix}${cc_default}"
2103 nm_default="${cross_prefix}${nm_default}"
2104 pkg_config_default="${cross_prefix}${pkg_config_default}"
2105 ranlib="${cross_prefix}${ranlib}"
2106
2107 sysinclude_default="${sysroot}/usr/include"
2108
2109 case "$toolchain" in
2110 clang-asan)
2111 cc_default="clang"
2112 add_cflags -faddress-sanitizer
2113 add_ldflags -faddress-sanitizer
2114 ;;
2115 clang-tsan)
2116 cc_default="clang"
2117 add_cflags -fthread-sanitizer
2118 add_ldflags -fthread-sanitizer
2119 ;;
2120 msvc)
2121 cc_default="c99wrap cl"
2122 ld_default="c99wrap link"
2123 nm_default="dumpbin -symbols"
2124 ar_default="lib"
2125 target_os_default="win32"
2126 ;;
2127 ?*)
2128 die "Unknown toolchain $toolchain"
2129 ;;
2130 esac
2131
2132 set_default arch cc pkg_config sysinclude target_os
2133 enabled cross_compile || host_cc_default=$cc
2134 set_default host_cc
2135
2136 if ! $pkg_config --version >/dev/null 2>&1; then
2137 warn "$pkg_config not found, library detection may fail."
2138 pkg_config=false
2139 fi
2140
2141 exesuf() {
2142 case $1 in
2143 mingw32*|win32|win64|cygwin*|*-dos|freedos|opendos|os/2*|symbian) echo .exe ;;
2144 esac
2145 }
2146
2147 EXESUF=$(exesuf $target_os)
2148 HOSTEXESUF=$(exesuf $host_os)
2149
2150 # set temporary file name
2151 : ${TMPDIR:=$TEMPDIR}
2152 : ${TMPDIR:=$TMP}
2153 : ${TMPDIR:=/tmp}
2154
2155 if ! check_cmd mktemp -u XXXXXX; then
2156 # simple replacement for missing mktemp
2157 # NOT SAFE FOR GENERAL USE
2158 mktemp(){
2159 echo "${2%%XXX*}.${HOSTNAME}.${UID}.$$"
2160 }
2161 fi
2162
2163 tmpfile(){
2164 tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
2165 (set -C; exec > $tmp) 2>/dev/null ||
2166 die "Unable to create temporary file in $TMPDIR."
2167 append TMPFILES $tmp
2168 eval $1=$tmp
2169 }
2170
2171 trap 'rm -f -- $TMPFILES' EXIT
2172
2173 tmpfile TMPASM .asm
2174 tmpfile TMPC .c
2175 tmpfile TMPE $EXESUF
2176 tmpfile TMPH .h
2177 tmpfile TMPO .o
2178 tmpfile TMPS .S
2179 tmpfile TMPSH .sh
2180 tmpfile TMPV .ver
2181
2182 unset -f mktemp
2183
2184 chmod +x $TMPE
2185
2186 # make sure we can execute files in $TMPDIR
2187 cat > $TMPSH 2>> $logfile <<EOF
2188 #! /bin/sh
2189 EOF
2190 chmod +x $TMPSH >> $logfile 2>&1
2191 if ! $TMPSH >> $logfile 2>&1; then
2192 cat <<EOF
2193 Unable to create and execute files in $TMPDIR. Set the TMPDIR environment
2194 variable to another directory and make sure that it is not mounted noexec.
2195 EOF
2196 die "Sanity test failed."
2197 fi
2198
2199 ccc_flags(){
2200 for flag; do
2201 case $flag in
2202 -std=c99) echo -c99 ;;
2203 -mcpu=*) echo -arch ${flag#*=} ;;
2204 -mieee) echo -ieee ;;
2205 -O*|-fast) echo $flag ;;
2206 -fno-math-errno) echo -assume nomath_errno ;;
2207 -g) echo -g3 ;;
2208 -Wall) echo -msg_enable level2 ;;
2209 -Wno-pointer-sign) echo -msg_disable ptrmismatch1 ;;
2210 -Wl,*) echo $flag ;;
2211 -f*|-W*) ;;
2212 *) echo $flag ;;
2213 esac
2214 done
2215 }
2216
2217 msvc_flags(){
2218 for flag; do
2219 case $flag in
2220 -fomit-frame-pointer) echo -Oy ;;
2221 -g) echo -Z7 ;;
2222 -Wall) echo -W4 -wd4244 -wd4127 -wd4018 -wd4389 \
2223 -wd4146 -wd4057 -wd4204 -wd4706 -wd4305 \
2224 -wd4152 -wd4324 -we4013 -wd4100 -wd4214 \
2225 -wd4996 -wd4273 ;;
2226 -std=c99) ;;
2227 -fno-math-errno) ;;
2228 -fno-common) ;;
2229 -fno-signed-zeros) ;;
2230 -fPIC) ;;
2231 -lz) echo zlib.lib ;;
2232 -lavifil32) echo vfw32.lib ;;
2233 -lavicap32) echo vfw32.lib user32.lib ;;
2234 -l*) echo ${flag#-l}.lib ;;
2235 *) echo $flag ;;
2236 esac
2237 done
2238 }
2239
2240 pgi_flags(){
2241 for flag; do
2242 case $flag in
2243 -flto) echo -Mipa=fast,libopt,libinline,vestigial ;;
2244 -fomit-frame-pointer) echo -Mnoframe ;;
2245 -g) echo -gopt ;;
2246 *) echo $flag ;;
2247 esac
2248 done
2249 }
2250
2251 suncc_flags(){
2252 for flag; do
2253 case $flag in
2254 -march=*|-mcpu=*)
2255 case "${flag#*=}" in
2256 native) echo -xtarget=native ;;
2257 v9|niagara) echo -xarch=sparc ;;
2258 ultrasparc) echo -xarch=sparcvis ;;
2259 ultrasparc3|niagara2) echo -xarch=sparcvis2 ;;
2260 i586|pentium) echo -xchip=pentium ;;
2261 i686|pentiumpro|pentium2) echo -xtarget=pentium_pro ;;
2262 pentium3*|c3-2) echo -xtarget=pentium3 ;;
2263 pentium-m) echo -xarch=sse2 -xchip=pentium3 ;;
2264 pentium4*) echo -xtarget=pentium4 ;;
2265 prescott|nocona) echo -xarch=sse3 -xchip=pentium4 ;;
2266 *-sse3) echo -xarch=sse3 ;;
2267 core2) echo -xarch=ssse3 -xchip=core2 ;;
2268 corei7) echo -xarch=sse4_2 -xchip=nehalem ;;
2269 corei7-avx) echo -xarch=avx -xchip=sandybridge ;;
2270 amdfam10|barcelona|bdver*) echo -xarch=sse4_1 ;;
2271 athlon-4|athlon-[mx]p) echo -xarch=ssea ;;
2272 k8|opteron|athlon64|athlon-fx)
2273 echo -xarch=sse2a ;;
2274 athlon*) echo -xarch=pentium_proa ;;
2275 esac
2276 ;;
2277 -std=c99) echo -xc99 ;;
2278 -fomit-frame-pointer) echo -xregs=frameptr ;;
2279 -fPIC) echo -KPIC -xcode=pic32 ;;
2280 -W*,*) echo $flag ;;
2281 -f*-*|-W*|-mimpure-text) ;;
2282 -shared) echo -G ;;
2283 *) echo $flag ;;
2284 esac
2285 done
2286 }
2287
2288 tms470_flags(){
2289 for flag; do
2290 case $flag in
2291 -march=*|-mcpu=*)
2292 case "${flag#*=}" in
2293 armv7-a|cortex-a*) echo -mv=7a8 ;;
2294 armv7-r|cortex-r*) echo -mv=7r4 ;;
2295 armv7-m|cortex-m*) echo -mv=7m3 ;;
2296 armv6*|arm11*) echo -mv=6 ;;
2297 armv5*e|arm[79]*e*|arm9[24]6*|arm96*|arm102[26])
2298 echo -mv=5e ;;
2299 armv4*|arm7*|arm9[24]*) echo -mv=4 ;;
2300 esac
2301 ;;
2302 -mfpu=neon) echo --float_support=vfpv3 --neon ;;
2303 -mfpu=vfp) echo --float_support=vfpv2 ;;
2304 -mfpu=vfpv3) echo --float_support=vfpv3 ;;
2305 -mfpu=vfpv3-d16) echo --float_support=vfpv3d16 ;;
2306 -msoft-float) echo --float_support=vfplib ;;
2307 -O[0-3]|-mf=*) echo $flag ;;
2308 -g) echo -g -mn ;;
2309 -pds=*) echo $flag ;;
2310 -D*|-I*) echo $flag ;;
2311 --gcc|--abi=*) echo $flag ;;
2312 -me) echo $flag ;;
2313 esac
2314 done
2315 }
2316
2317 probe_cc(){
2318 pfx=$1
2319 _cc=$2
2320
2321 unset _type _ident _cc_c _cc_e _cc_o _flags _cflags
2322 unset _ld_o _ldflags _ld_lib _ld_path
2323 unset _depflags _DEPCMD _DEPFLAGS
2324 _flags_filter=echo
2325
2326 if $_cc -v 2>&1 | grep -q '^gcc.*LLVM'; then
2327 _type=llvm_gcc
2328 gcc_extra_ver=$(expr "$($_cc --version | head -n1)" : '.*\((.*)\)')
2329 _ident="llvm-gcc $($_cc -dumpversion) $gcc_extra_ver"
2330 _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2331 _cflags_speed='-O3'
2332 _cflags_size='-Os'
2333 elif $_cc -v 2>&1 | grep -qi ^gcc; then
2334 _type=gcc
2335 gcc_version=$($_cc --version | head -n1)
2336 gcc_basever=$($_cc -dumpversion)
2337 gcc_pkg_ver=$(expr "$gcc_version" : '[^ ]* \(([^)]*)\)')
2338 gcc_ext_ver=$(expr "$gcc_version" : ".*$gcc_pkg_ver $gcc_basever \\(.*\\)")
2339 _ident=$(cleanws "gcc $gcc_basever $gcc_pkg_ver $gcc_ext_ver")
2340 if ! $_cc -dumpversion | grep -q '^2\.'; then
2341 _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2342 fi
2343 _cflags_speed='-O3'
2344 _cflags_size='-Os'
2345 elif $_cc --version 2>/dev/null | grep -q Intel; then
2346 _type=icc
2347 _ident=$($_cc --version | head -n1)
2348 _depflags='-MMD'
2349 _cflags_speed='-O3'
2350 _cflags_size='-Os'
2351 _cflags_noopt='-O1'
2352 elif $_cc -v 2>&1 | grep -q xlc; then
2353 _type=xlc
2354 _ident=$($_cc -qversion 2>/dev/null | head -n1)
2355 _cflags_speed='-O5'
2356 _cflags_size='-O5 -qcompact'
2357 elif $_cc -V 2>/dev/null | grep -q Compaq; then
2358 _type=ccc
2359 _ident=$($_cc -V | head -n1 | cut -d' ' -f1-3)
2360 _DEPFLAGS='-M'
2361 _cflags_speed='-fast'
2362 _cflags_size='-O1'
2363 _flags_filter=ccc_flags
2364 elif $_cc --vsn 2>/dev/null | grep -q "ARM C/C++ Compiler"; then
2365 test -d "$sysroot" || die "No valid sysroot specified."
2366 _type=armcc
2367 _ident=$($_cc --vsn | head -n1)
2368 armcc_conf="$PWD/armcc.conf"
2369 $_cc --arm_linux_configure \
2370 --arm_linux_config_file="$armcc_conf" \
2371 --configure_sysroot="$sysroot" \
2372 --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
2373 die "Error creating armcc configuration file."
2374 $_cc --vsn | grep -q RVCT && armcc_opt=rvct || armcc_opt=armcc
2375 _flags="--arm_linux_config_file=$armcc_conf --translate_gcc"
2376 as_default="${cross_prefix}gcc"
2377 _depflags='-MMD'
2378 _cflags_speed='-O3'
2379 _cflags_size='-Os'
2380 elif $_cc -version 2>/dev/null | grep -Eq 'TMS470|TI ARM'; then
2381 _type=tms470
2382 _ident=$($_cc -version | head -n1 | tr -s ' ')
2383 _flags='--gcc --abi=eabi -me'
2384 _cc_e='-ppl -fe=$@'
2385 _cc_o='-fe=$@'
2386 _depflags='-ppa -ppd=$(@:.o=.d)'
2387 _cflags_speed='-O3 -mf=5'
2388 _cflags_size='-O3 -mf=2'
2389 _flags_filter=tms470_flags
2390 elif $_cc -v 2>&1 | grep -q clang; then
2391 _type=clang
2392 _ident=$($_cc --version | head -n1)
2393 _depflags='-MMD'
2394 _cflags_speed='-O3'
2395 _cflags_size='-Os'
2396 elif $_cc -V 2>&1 | grep -q Sun; then
2397 _type=suncc
2398 _ident=$($_cc -V 2>&1 | head -n1 | cut -d' ' -f 2-)
2399 _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "1s,^.*: ,$@: ," -e "\$$!s,\$$, \\\," -e "1!s,^.*: , ," > $(@:.o=.d)'
2400 _DEPFLAGS='-xM1 -xc99'
2401 _ldflags='-std=c99'
2402 _cflags_speed='-O5'
2403 _cflags_size='-O5 -xspace'
2404 _flags_filter=suncc_flags
2405 elif $_cc -v 2>&1 | grep -q 'PathScale\|Path64'; then
2406 _type=pathscale
2407 _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
2408 _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2409 _cflags_speed='-O2'
2410 _cflags_size='-Os'
2411 _flags_filter='filter_out -Wdisabled-optimization'
2412 elif $_cc -v 2>&1 | grep -q Open64; then
2413 _type=open64
2414 _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
2415 _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2416 _cflags_speed='-O2'
2417 _cflags_size='-Os'
2418 _flags_filter='filter_out -Wdisabled-optimization|-Wtype-limits|-fno-signed-zeros'
2419 elif $_cc -V 2>&1 | grep -q Portland; then
2420 _type=pgi
2421 _ident="PGI $($_cc -V 2>&1 | awk '/^pgcc/ { print $2; exit }')"
2422 opt_common='-alias=ansi -Mdse -Mlre -Mpre'
2423 _cflags_speed="-O3 -Mautoinline -Munroll=c:4 $opt_common"
2424 _cflags_size="-O2 -Munroll=c:1 $opt_common"
2425 _cflags_noopt="-O1"
2426 _flags_filter=pgi_flags
2427 elif $_cc 2>&1 | grep -q Microsoft; then
2428 _type=msvc
2429 _ident=$($cc 2>&1 | head -n1)
2430 _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< 2>&1 | awk '\''/including/ { sub(/^.*file: */, ""); gsub(/\\/, "/"); if (!match($$0, / /)) print "$@:", $$0 }'\'' > $(@:.o=.d)'
2431 _DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -showIncludes -Zs'
2432 _cflags_speed="-O2"
2433 _cflags_size="-O1"
2434 # Nonstandard output options, to avoid msys path conversion issues, relies on wrapper to remap it
2435 if $_cc 2>&1 | grep -q Linker; then
2436 _ld_o='-out $@'
2437 else
2438 _ld_o='-Fe$@'
2439 fi
2440 _cc_o='-Fo $@'
2441 _cc_e='-P -Fi $@'
2442 _flags_filter=msvc_flags
2443 _ld_lib='lib%.a'
2444 _ld_path='-libpath:'
2445 _flags='-nologo'
2446 _cflags='-D_USE_MATH_DEFINES -Dinline=__inline -FIstdlib.h -Dstrtoll=_strtoi64'
2447 if [ $pfx = hostcc ]; then
2448 append _cflags -Dsnprintf=_snprintf
2449 fi
2450 fi
2451
2452 eval ${pfx}_type=\$_type
2453 eval ${pfx}_ident=\$_ident
2454 }
2455
2456 set_ccvars(){
2457 eval ${1}_C=\${_cc_c-\${${1}_C}}
2458 eval ${1}_E=\${_cc_e-\${${1}_E}}
2459 eval ${1}_O=\${_cc_o-\${${1}_O}}
2460
2461 if [ -n "$_depflags" ]; then
2462 eval ${1}_DEPFLAGS=\$_depflags
2463 else
2464 eval ${1}DEP=\${_DEPCMD:-\$DEPCMD}
2465 eval ${1}DEP_FLAGS=\${_DEPFLAGS:-\$DEPFLAGS}
2466 eval DEP${1}FLAGS=\$_flags
2467 fi
2468 }
2469
2470 probe_cc cc "$cc"
2471 cflags_filter=$_flags_filter
2472 cflags_speed=$_cflags_speed
2473 cflags_size=$_cflags_size
2474 cflags_noopt=$_cflags_noopt
2475 add_cflags $_flags $_cflags
2476 cc_ldflags=$_ldflags
2477 set_ccvars CC
2478
2479 probe_cc hostcc "$host_cc"
2480 host_cflags_filter=$_flags_filter
2481 add_host_cflags $_flags $_cflags
2482 set_ccvars HOSTCC
2483
2484 test -n "$cc_type" && enable $cc_type ||
2485 warn "Unknown C compiler $cc, unable to select optimal CFLAGS"
2486
2487 : ${as_default:=$cc}
2488 : ${dep_cc_default:=$cc}
2489 : ${ld_default:=$cc}
2490 : ${host_ld_default:=$host_cc}
2491 set_default ar as dep_cc ld host_ld
2492
2493 probe_cc as "$as"
2494 asflags_filter=$_flags_filter
2495 add_asflags $_flags $_cflags
2496 set_ccvars AS
2497
2498 probe_cc ld "$ld"
2499 ldflags_filter=$_flags_filter
2500 add_ldflags $_flags $_ldflags
2501 test "$cc_type" != "$ld_type" && add_ldflags $cc_ldflags
2502 LD_O=${_ld_o-$LD_O}
2503 LD_LIB=${_ld_lib-$LD_LIB}
2504 LD_PATH=${_ld_path-$LD_PATH}
2505
2506 probe_cc hostld "$host_ld"
2507 host_ldflags_filter=$_flags_filter
2508 add_host_ldflags $_flags $_ldflags
2509 HOSTLD_O=${_ld_o-$HOSTLD_O}
2510
2511 if [ -z "$CC_DEPFLAGS" ] && [ "$dep_cc" != "$cc" ]; then
2512 probe_cc depcc "$dep_cc"
2513 CCDEP=${_DEPCMD:-$DEPCMD}
2514 CCDEP_FLAGS=${_DEPFLAGS:=$DEPFLAGS}
2515 DEPCCFLAGS=$_flags
2516 fi
2517
2518 if $ar 2>&1 | grep -q Microsoft; then
2519 arflags="-nologo"
2520 ar_o='-out:$@'
2521 elif $ar 2>&1 | grep -q 'Texas Instruments'; then
2522 arflags="rq"
2523 ar_o='$@'
2524 else
2525 arflags="rc"
2526 ar_o='$@'
2527 fi
2528
2529 add_cflags $extra_cflags
2530 add_asflags $extra_cflags
2531
2532 if test -n "$sysroot"; then
2533 case "$cc_type" in
2534 gcc|llvm_gcc|clang)
2535 add_cppflags --sysroot="$sysroot"
2536 add_ldflags --sysroot="$sysroot"
2537 ;;
2538 tms470)
2539 add_cppflags -I"$sysinclude"
2540 add_ldflags --sysroot="$sysroot"
2541 ;;
2542 esac
2543 fi
2544
2545 if test "$cpu" = host; then
2546 enabled cross_compile && die "--cpu=host makes no sense when cross-compiling."
2547
2548 case "$cc_type" in
2549 gcc|llvm_gcc)
2550 check_native(){
2551 $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
2552 sed -n "/cc1.*$1=/{
2553 s/.*$1=\\([^ ]*\\).*/\\1/
2554 p
2555 q
2556 }" $TMPE
2557 }
2558 cpu=$(check_native -march || check_native -mcpu)
2559 ;;
2560 esac
2561
2562 test "${cpu:-host}" = host && die "--cpu=host not supported with compiler $cc"
2563 fi
2564
2565 # Deal with common $arch aliases
2566 case "$arch" in
2567 aarch64|arm64)
2568 arch="aarch64"
2569 ;;
2570 arm*)
2571 arch="arm"
2572 ;;
2573 mips*|IP*)
2574 arch="mips"
2575 ;;
2576 parisc*|hppa*)
2577 arch="parisc"
2578 ;;
2579 "Power Macintosh"|ppc*|powerpc*)
2580 arch="ppc"
2581 ;;
2582 s390|s390x)
2583 arch="s390"
2584 ;;
2585 sh4|sh)
2586 arch="sh4"
2587 ;;
2588 sun4u|sparc*)
2589 arch="sparc"
2590 ;;
2591 tilegx|tile-gx)
2592 arch="tilegx"
2593 ;;
2594 i[3-6]86|i86pc|BePC|x86pc|x86_64|amd64)
2595 arch="x86"
2596 ;;
2597 esac
2598
2599 is_in $arch $ARCH_LIST || warn "unknown architecture $arch"
2600 enable $arch
2601
2602 # Add processor-specific flags
2603 if enabled aarch64; then
2604
2605 case $cpu in
2606 armv*)
2607 cpuflags="-march=$cpu"
2608 ;;
2609 *)
2610 cpuflags="-mcpu=$cpu"
2611 ;;
2612 esac
2613
2614 elif enabled alpha; then
2615
2616 cpuflags="-mcpu=$cpu"
2617
2618 elif enabled arm; then
2619
2620 check_arm_arch() {
2621 check_cpp_condition stddef.h \
2622 "defined __ARM_ARCH_${1}__ || defined __TARGET_ARCH_${2:-$1}" \
2623 $cpuflags
2624 }
2625
2626 probe_arm_arch() {
2627 if check_arm_arch 4; then echo armv4;
2628 elif check_arm_arch 4T; then echo armv4t;
2629 elif check_arm_arch 5; then echo armv5;
2630 elif check_arm_arch 5E; then echo armv5e;
2631 elif check_arm_arch 5T; then echo armv5t;
2632 elif check_arm_arch 5TE; then echo armv5te;
2633 elif check_arm_arch 5TEJ; then echo armv5te;
2634 elif check_arm_arch 6; then echo armv6;
2635 elif check_arm_arch 6J; then echo armv6j;
2636 elif check_arm_arch 6K; then echo armv6k;
2637 elif check_arm_arch 6Z; then echo armv6z;
2638 elif check_arm_arch 6ZK; then echo armv6zk;
2639 elif check_arm_arch 6T2; then echo armv6t2;
2640 elif check_arm_arch 7; then echo armv7;
2641 elif check_arm_arch 7A 7_A; then echo armv7-a;
2642 elif check_arm_arch 7R 7_R; then echo armv7-r;
2643 elif check_arm_arch 7M 7_M; then echo armv7-m;
2644 elif check_arm_arch 7EM 7E_M; then echo armv7-m;
2645 elif check_arm_arch 8A 8_A; then echo armv8-a;
2646 fi
2647 }
2648
2649 [ "$cpu" = generic ] && cpu=$(probe_arm_arch)
2650
2651 case $cpu in
2652 armv*)
2653 cpuflags="-march=$cpu"
2654 subarch=$(echo $cpu | sed 's/[^a-z0-9]//g')
2655 ;;
2656 *)
2657 cpuflags="-mcpu=$cpu"
2658 case $cpu in
2659 cortex-a*) subarch=armv7a ;;
2660 cortex-r*) subarch=armv7r ;;
2661 cortex-m*) enable thumb; subarch=armv7m ;;
2662 arm11*) subarch=armv6 ;;
2663 arm[79]*e*|arm9[24]6*|arm96*|arm102[26]) subarch=armv5te ;;
2664 armv4*|arm7*|arm9[24]*) subarch=armv4 ;;
2665 *) subarch=$(probe_arm_arch) ;;
2666 esac
2667 ;;
2668 esac
2669
2670 case "$subarch" in
2671 armv5t*) enable fast_clz ;;
2672 armv[6-8]*) enable fast_clz fast_unaligned ;;
2673 esac
2674
2675 elif enabled avr32; then
2676
2677 case $cpu in
2678 ap7[02]0[0-2])
2679 subarch="avr32_ap"
2680 cpuflags="-mpart=$cpu"
2681 ;;
2682 ap)
2683 subarch="avr32_ap"
2684 cpuflags="-march=$cpu"
2685 ;;
2686 uc3[ab]*)
2687 subarch="avr32_uc"
2688 cpuflags="-mcpu=$cpu"
2689 ;;
2690 uc)
2691 subarch="avr32_uc"
2692 cpuflags="-march=$cpu"
2693 ;;
2694 esac
2695
2696 elif enabled bfin; then
2697
2698 cpuflags="-mcpu=$cpu"
2699
2700 elif enabled mips; then
2701
2702 cpuflags="-march=$cpu"
2703
2704 elif enabled ppc; then
2705
2706 case $(tolower $cpu) in
2707 601|ppc601|powerpc601)
2708 cpuflags="-mcpu=601"
2709 disable altivec
2710 ;;
2711 603*|ppc603*|powerpc603*)
2712 cpuflags="-mcpu=603"
2713 disable altivec
2714 ;;
2715 604*|ppc604*|powerpc604*)
2716 cpuflags="-mcpu=604"
2717 disable altivec
2718 ;;
2719 g3|75*|ppc75*|powerpc75*)
2720 cpuflags="-mcpu=750"
2721 disable altivec
2722 ;;
2723 g4|745*|ppc745*|powerpc745*)
2724 cpuflags="-mcpu=7450"
2725 ;;
2726 74*|ppc74*|powerpc74*)
2727 cpuflags="-mcpu=7400"
2728 ;;
2729 g5|970|ppc970|powerpc970)
2730 cpuflags="-mcpu=970"
2731 ;;
2732 power[3-7]*)
2733 cpuflags="-mcpu=$cpu"
2734 ;;
2735 cell)
2736 cpuflags="-mcpu=cell"
2737 enable ldbrx
2738 ;;
2739 e500mc)
2740 cpuflags="-mcpu=e500mc"
2741 disable altivec
2742 ;;
2743 e500v2)
2744 cpuflags="-mcpu=8548 -mhard-float -mfloat-gprs=double"
2745 disable altivec
2746 ;;
2747 e500)
2748 cpuflags="-mcpu=8540 -mhard-float"
2749 disable altivec
2750 ;;
2751 esac
2752
2753 elif enabled sparc; then
2754
2755 case $cpu in
2756 cypress|f93[04]|tsc701|sparcl*|supersparc|hypersparc|niagara|v[789])
2757 cpuflags="-mcpu=$cpu"
2758 disable vis
2759 ;;
2760 ultrasparc*|niagara[234])
2761 cpuflags="-mcpu=$cpu"
2762 ;;
2763 esac
2764
2765 elif enabled x86; then
2766
2767 case $cpu in
2768 i[345]86|pentium)
2769 cpuflags="-march=$cpu"
2770 disable mmx
2771 ;;
2772 # targets that do NOT support conditional mov (cmov)
2773 pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
2774 cpuflags="-march=$cpu"
2775 disable cmov
2776 ;;
2777 # targets that do support conditional mov (cmov)
2778 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*)
2779 cpuflags="-march=$cpu"
2780 enable cmov
2781 enable fast_cmov
2782 ;;
2783 # targets that do support conditional mov but on which it's slow
2784 pentium4|pentium4m|prescott|nocona)
2785 cpuflags="-march=$cpu"
2786 enable cmov
2787 disable fast_cmov
2788 ;;
2789 esac
2790
2791 fi
2792
2793 if [ "$cpu" != generic ]; then
2794 add_cflags $cpuflags
2795 add_asflags $cpuflags
2796 fi
2797
2798 # compiler sanity check
2799 check_exec <<EOF
2800 int main(void){ return 0; }
2801 EOF
2802 if test "$?" != 0; then
2803 echo "$cc is unable to create an executable file."
2804 if test -z "$cross_prefix" && ! enabled cross_compile ; then
2805 echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
2806 echo "Only do this if you know what cross compiling means."
2807 fi
2808 die "C compiler test failed."
2809 fi
2810
2811 add_cppflags -D_ISOC99_SOURCE
2812 check_cflags -std=c99
2813 check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
2814 #include <stdlib.h>
2815 EOF
2816 check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
2817 #include <stdlib.h>
2818 EOF
2819
2820 check_host_cflags -std=c99
2821 check_host_cflags -Wall
2822
2823 check_64bit(){
2824 arch32=$1
2825 arch64=$2
2826 expr=$3
2827 check_code cc "" "int test[2*($expr) - 1]" &&
2828 subarch=$arch64 || subarch=$arch32
2829 }
2830
2831 case "$arch" in
2832 aarch64|alpha|ia64)
2833 spic=$shared
2834 ;;
2835 mips)
2836 check_64bit mips mips64 '_MIPS_SIM > 1'
2837 spic=$shared
2838 ;;
2839 parisc)
2840 check_64bit parisc parisc64 'sizeof(void *) > 4'
2841 spic=$shared
2842 ;;
2843 ppc)
2844 check_64bit ppc ppc64 'sizeof(void *) > 4'
2845 spic=$shared
2846 ;;
2847 sparc)
2848 check_64bit sparc sparc64 'sizeof(void *) > 4'
2849 spic=$shared
2850 ;;
2851 x86)
2852 check_64bit x86_32 x86_64 'sizeof(void *) > 4'
2853 if test "$subarch" = "x86_64"; then
2854 spic=$shared
2855 fi
2856 ;;
2857 esac
2858
2859 enable $subarch
2860 enabled spic && enable pic
2861
2862 # OS specific
2863 case $target_os in
2864 haiku)
2865 prefix_default="/boot/common"
2866 network_extralibs="-lnetwork"
2867 host_libs=
2868 ;;
2869 sunos)
2870 AVSERVERLDFLAGS=""
2871 SHFLAGS='-shared -Wl,-h,$$(@F)'
2872 enabled x86 && SHFLAGS="-mimpure-text $SHFLAGS"
2873 network_extralibs="-lsocket -lnsl"
2874 add_cppflags -D__EXTENSIONS__ -D_XOPEN_SOURCE=600
2875 # When using suncc to build, the Solaris linker will mark
2876 # an executable with each instruction set encountered by
2877 # the Solaris assembler. As our libraries contain their own
2878 # guards for processor-specific code, instead suppress
2879 # generation of the HWCAPS ELF section on Solaris x86 only.
2880 enabled_all suncc x86 && echo "hwcap_1 = OVERRIDE;" > mapfile && add_ldflags -Wl,-M,mapfile
2881 nm_default='nm -P -g'
2882 ;;
2883 netbsd)
2884 disable symver
2885 oss_indev_extralibs="-lossaudio"
2886 oss_outdev_extralibs="-lossaudio"
2887 ;;
2888 openbsd|bitrig)
2889 disable symver
2890 SHFLAGS='-shared'
2891 SLIB_INSTALL_NAME='$(SLIBNAME).$(LIBMAJOR).$(LIBMINOR)'
2892 SLIB_INSTALL_LINKS=
2893 oss_indev_extralibs="-lossaudio"
2894 oss_outdev_extralibs="-lossaudio"
2895 ;;
2896 dragonfly)
2897 disable symver
2898 ;;
2899 freebsd)
2900 ;;
2901 bsd/os)
2902 add_extralibs -lpoll -lgnugetopt
2903 ;;
2904 darwin)
2905 gas="gas-preprocessor.pl $cc"
2906 enabled ppc && add_asflags -force_cpusubtype_ALL
2907 SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR)'
2908 enabled x86_32 && append SHFLAGS -Wl,-read_only_relocs,suppress
2909 add_ldflags -Wl,-dynamic,-search_paths_first
2910 SLIBSUF=".dylib"
2911 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
2912 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
2913 AVSERVERLDFLAGS=-Wl,-bind_at_load
2914 objformat="macho"
2915 enabled x86_64 && objformat="macho64"
2916 enabled_any pic shared ||
2917 { check_cflags -mdynamic-no-pic && add_asflags -mdynamic-no-pic; }
2918 ;;
2919 mingw32*)
2920 if test $target_os = "mingw32ce"; then
2921 disable network
2922 else
2923 target_os=mingw32
2924 fi
2925 LIBTARGET=i386
2926 if enabled x86_64; then
2927 LIBTARGET="i386:x86-64"
2928 elif enabled arm; then
2929 LIBTARGET=arm-wince
2930 fi
2931 shlibdir_default="$bindir_default"
2932 SLIBPREF=""
2933 SLIBSUF=".dll"
2934 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
2935 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
2936 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)'
2937 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
2938 SLIB_INSTALL_LINKS=
2939 SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
2940 SLIB_INSTALL_EXTRA_LIB='lib$(SLIBNAME:$(SLIBSUF)=.dll.a) $(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
2941 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'
2942 objformat="win32"
2943 dlltool="${cross_prefix}dlltool"
2944 ranlib=:
2945 enable dos_paths
2946 ;;
2947 win32|win64)
2948 if enabled shared; then
2949 # Link to the import library instead of the normal static library
2950 # for shared libs.
2951 LD_LIB='%.lib'
2952 # Cannot build shared and static libraries at the same time with
2953 # MSVC.
2954 disable static
2955 fi
2956 shlibdir_default="$bindir_default"
2957 SLIBPREF=""
2958 SLIBSUF=".dll"
2959 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
2960 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
2961 SLIB_CREATE_DEF_CMD='makedef $(SUBDIR)lib$(NAME).ver $(OBJS) > $$(@:$(SLIBSUF)=.def)'
2962 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
2963 SLIB_INSTALL_LINKS=
2964 SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
2965 SLIB_INSTALL_EXTRA_LIB='$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
2966 SHFLAGS='-dll -def:$$(@:$(SLIBSUF)=.def) -implib:$(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib)'
2967 objformat="win32"
2968 ranlib=:
2969 enable dos_paths
2970 ;;
2971 cygwin*)
2972 target_os=cygwin
2973 shlibdir_default="$bindir_default"
2974 SLIBPREF="cyg"
2975 SLIBSUF=".dll"
2976 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
2977 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
2978 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
2979 SLIB_INSTALL_LINKS=
2980 SLIB_INSTALL_EXTRA_LIB='lib$(FULLNAME).dll.a'
2981 SHFLAGS='-shared -Wl,--out-implib,$(SUBDIR)lib$(FULLNAME).dll.a'
2982 objformat="win32"
2983 enable dos_paths
2984 ;;
2985 *-dos|freedos|opendos)
2986 network_extralibs="-lsocket"
2987 objformat="coff"
2988 enable dos_paths
2989 add_cppflags -U__STRICT_ANSI__
2990 ;;
2991 linux)
2992 enable dv1394
2993 ;;
2994 irix*)
2995 target_os=irix
2996 ranlib="echo ignoring ranlib"
2997 ;;
2998 os/2*)
2999 ln_s="cp -f"
3000 objformat="aout"
3001 add_cppflags -D_GNU_SOURCE
3002 add_ldflags -Zomf -Zbin-files -Zargs-wild -Zmap
3003 SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
3004 AVSERVERLDFLAGS=""
3005 LIBSUF="_s.a"
3006 SLIBPREF=""
3007 SLIBSUF=".dll"
3008 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
3009 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
3010 SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
3011 echo PROTMODE >> $(SUBDIR)$(NAME).def; \
3012 echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
3013 echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
3014 echo EXPORTS >> $(SUBDIR)$(NAME).def; \
3015 emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
3016 SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
3017 emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
3018 SLIB_INSTALL_EXTRA_LIB='$(LIBPREF)$(NAME)_dll.a $(LIBPREF)$(NAME)_dll.lib'
3019 enable dos_paths
3020 ;;
3021 gnu/kfreebsd)
3022 add_cppflags -D_BSD_SOURCE
3023 ;;
3024 gnu)
3025 ;;
3026 qnx)
3027 add_cppflags -D_QNX_SOURCE
3028 network_extralibs="-lsocket"
3029 ;;
3030 symbian)
3031 SLIBSUF=".dll"
3032 enable dos_paths
3033 add_cflags --include=$sysinclude/gcce/gcce.h -fvisibility=default
3034 add_cppflags -D__GCCE__ -D__SYMBIAN32__ -DSYMBIAN_OE_POSIX_SIGNALS
3035 add_ldflags -Wl,--target1-abs,--no-undefined \
3036 -Wl,-Ttext,0x80000,-Tdata,0x1000000 -shared \
3037 -Wl,--entry=_E32Startup -Wl,-u,_E32Startup
3038 add_extralibs -l:eexe.lib -l:usrt2_2.lib -l:dfpaeabi.dso \
3039 -l:drtaeabi.dso -l:scppnwdl.dso -lsupc++ -lgcc \
3040 -l:libc.dso -l:libm.dso -l:euser.dso -l:libcrt0.lib
3041 ;;
3042 osf1)
3043 add_cppflags -D_OSF_SOURCE -D_POSIX_PII -D_REENTRANT
3044 AVSERVERLDFLAGS=
3045 ;;
3046 minix)
3047 ;;
3048 plan9)
3049 add_cppflags -D_C99_SNPRINTF_EXTENSION \
3050 -D_REENTRANT_SOURCE \
3051 -D_RESEARCH_SOURCE \
3052 -DFD_SETSIZE=96 \
3053 -DHAVE_SOCK_OPTS
3054 add_compat strtod.o strtod=avpriv_strtod
3055 network_extralibs='-lbsd'
3056 exeobjs=compat/plan9/main.o
3057 disable avserver
3058 ln_s='ln -s -f'
3059 cp_f='cp'
3060 ;;
3061 none)
3062 ;;
3063 *)
3064 die "Unknown OS '$target_os'."
3065 ;;
3066 esac
3067
3068 # determine libc flavour
3069
3070 # uclibc defines __GLIBC__, so it needs to be checked before glibc.
3071 if check_cpp_condition features.h "defined __UCLIBC__"; then
3072 libc_type=uclibc
3073 add_cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
3074 elif check_cpp_condition features.h "defined __GLIBC__"; then
3075 libc_type=glibc
3076 add_cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
3077 # MinGW headers can be installed on Cygwin, so check for newlib first.
3078 elif check_cpp_condition newlib.h "defined _NEWLIB_VERSION"; then
3079 libc_type=newlib
3080 add_cppflags -U__STRICT_ANSI__
3081 elif check_header _mingw.h; then
3082 libc_type=mingw
3083 check_cpp_condition _mingw.h \
3084 "defined (__MINGW64_VERSION_MAJOR) || (__MINGW32_MAJOR_VERSION > 3) || \
3085 (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
3086 die "ERROR: MinGW runtime version must be >= 3.15."
3087 add_cppflags -U__STRICT_ANSI__
3088 elif check_func_headers stdlib.h _get_doserrno; then
3089 libc_type=msvcrt
3090 add_compat strtod.o strtod=avpriv_strtod
3091 add_compat msvcrt/snprintf.o snprintf=avpriv_snprintf \
3092 _snprintf=avpriv_snprintf \
3093 vsnprintf=avpriv_vsnprintf
3094 elif check_cpp_condition stddef.h "defined __KLIBC__"; then
3095 libc_type=klibc
3096 fi
3097
3098 test -n "$libc_type" && enable $libc_type
3099
3100 # hacks for compiler/libc/os combinations
3101
3102 if enabled_all tms470 glibc; then
3103 CPPFLAGS="-I${source_path}/compat/tms470 ${CPPFLAGS}"
3104 add_cppflags -D__USER_LABEL_PREFIX__=
3105 add_cppflags -D__builtin_memset=memset
3106 add_cppflags -D__gnuc_va_list=va_list -D_VA_LIST_DEFINED
3107 add_cflags -pds=48 # incompatible redefinition of macro
3108 fi
3109
3110 if enabled_all ccc glibc; then
3111 add_ldflags -Wl,-z,now # calls to libots crash without this
3112 fi
3113
3114 esc(){
3115 echo "$*" | sed 's/%/%25/g;s/:/%3a/g'
3116 }
3117
3118 echo "config:$arch:$subarch:$cpu:$target_os:$(esc $cc_ident):$(esc $LIBAV_CONFIGURATION)" >config.fate
3119
3120 check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable pic
3121
3122 set_default $PATHS_LIST
3123 set_default nm
3124
3125 # we need to build at least one lib type
3126 if ! enabled_any static shared; then
3127 cat <<EOF
3128 At least one library type must be built.
3129 Specify --enable-static to build the static libraries or --enable-shared to
3130 build the shared libraries as well. To only build the shared libraries specify
3131 --disable-static in addition to --enable-shared.
3132 EOF
3133 exit 1;
3134 fi
3135
3136 die_license_disabled() {
3137 enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
3138 }
3139
3140 die_license_disabled gpl libcdio
3141 die_license_disabled gpl libx264
3142 die_license_disabled gpl libxavs
3143 die_license_disabled gpl libxvid
3144 die_license_disabled gpl x11grab
3145
3146 die_license_disabled nonfree libfaac
3147 die_license_disabled nonfree libfdk_aac
3148 die_license_disabled nonfree openssl
3149
3150 die_license_disabled version3 libopencore_amrnb
3151 die_license_disabled version3 libopencore_amrwb
3152 die_license_disabled version3 libvo_aacenc
3153 die_license_disabled version3 libvo_amrwbenc
3154
3155 enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
3156
3157 disabled optimizations || check_cflags -fomit-frame-pointer
3158
3159 enable_pic() {
3160 enable pic
3161 add_cppflags -DPIC
3162 add_cflags -fPIC
3163 add_asflags -fPIC
3164 }
3165
3166 enabled pic && enable_pic
3167
3168 check_cc <<EOF || die "Symbol mangling check failed."
3169 int ff_extern;
3170 EOF
3171 sym=$($nm $TMPO | awk '/ff_extern/{ print substr($0, match($0, /[^ \t]*ff_extern/)) }')
3172 extern_prefix=${sym%%ff_extern*}
3173
3174 check_cc <<EOF && enable_weak inline_asm
3175 void foo(void) { __asm__ volatile ("" ::); }
3176 EOF
3177
3178 _restrict=
3179 for restrict_keyword in restrict __restrict__ __restrict; do
3180 check_cc <<EOF && _restrict=$restrict_keyword && break
3181 void foo(char * $restrict_keyword p);
3182 EOF
3183 done
3184
3185 check_cc <<EOF && enable attribute_packed
3186 struct { int x; } __attribute__((packed)) x;
3187 EOF
3188
3189 check_cc <<EOF && enable attribute_may_alias
3190 union { int x; } __attribute__((may_alias)) x;
3191 EOF
3192
3193 check_cc <<EOF || die "endian test failed"
3194 unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
3195 EOF
3196 od -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
3197
3198 if enabled alpha; then
3199
3200 check_cflags -mieee
3201
3202 elif enabled arm; then
3203
3204 check_cpp_condition stddef.h "defined __thumb__" && enable_weak thumb
3205 enabled thumb && check_cflags -mthumb || check_cflags -marm
3206 nogas=die
3207
3208 if check_cpp_condition stddef.h "defined __ARM_PCS_VFP"; then
3209 enable vfp_args
3210 elif ! check_cpp_condition stddef.h "defined __ARM_PCS || defined __SOFTFP__"; then
3211 case "${cross_prefix:-$cc}" in
3212 *hardfloat*) enable vfp_args; fpabi=vfp ;;
3213 *) check_ld <<EOF && enable vfp_args && fpabi=vfp || fpabi=soft ;;
3214 __asm__ (".eabi_attribute 28, 1");
3215 int main(void) { return 0; }
3216 EOF
3217 esac
3218 warn "Compiler does not indicate floating-point ABI, guessing $fpabi."
3219 fi
3220
3221 enabled armv5te && check_insn armv5te 'qadd r0, r0, r0'
3222 enabled armv6 && check_insn armv6 'sadd16 r0, r0, r0'
3223 enabled armv6t2 && check_insn armv6t2 'movt r0, #0'
3224 enabled neon && check_insn neon 'vadd.i16 q0, q0, q0'
3225 enabled vfp && check_insn vfp 'fadds s0, s0, s0'
3226 enabled vfpv3 && check_insn vfpv3 'vmov.f32 s0, #1.0'
3227
3228 [ $target_os = linux ] ||
3229 map 'enabled_any ${v}_external ${v}_inline || disable $v' \
3230 $ARCH_EXT_LIST_ARM
3231
3232 check_inline_asm asm_mod_q '"add r0, %Q0, %R0" :: "r"((long long)0)'
3233 check_inline_asm asm_mod_y '"vmul.i32 d0, d0, %y0" :: "x"(0)'
3234
3235 enabled_all armv6t2 shared !pic && enable_pic
3236
3237 elif enabled mips; then
3238
3239 check_inline_asm loongson '"dmult.g $1, $2, $3"'
3240
3241 elif enabled parisc; then
3242
3243 if enabled gcc; then
3244 case $($cc -dumpversion) in
3245 4.[3-8].*) check_cflags -fno-optimize-sibling-calls ;;
3246 esac
3247 fi
3248
3249 elif enabled ppc; then
3250
3251 enable local_aligned_8 local_aligned_16
3252
3253 check_inline_asm dcbzl '"dcbzl 0, %0" :: "r"(0)'
3254 check_inline_asm ibm_asm '"add 0, 0, 0"'
3255 check_inline_asm ppc4xx '"maclhw r10, r11, r12"'
3256 check_inline_asm xform_asm '"lwzx %1, %y0" :: "Z"(*(int*)0), "r"(0)'
3257
3258 # AltiVec flags: The FSF version of GCC differs from the Apple version
3259 if enabled altivec; then
3260 nogas=warn
3261 check_cflags -maltivec -mabi=altivec &&
3262 { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
3263 check_cflags -faltivec
3264
3265 # check if our compiler supports Motorola AltiVec C API
3266 check_cc <<EOF || disable altivec
3267 $inc_altivec_h
3268 int main(void) {
3269 vector signed int v1 = (vector signed int) { 0 };
3270 vector signed int v2 = (vector signed int) { 1 };
3271 v1 = vec_add(v1, v2);
3272 return 0;
3273 }
3274 EOF
3275
3276 enabled altivec || warn "Altivec disabled, possibly missing --cpu flag"
3277 fi
3278
3279 elif enabled sparc; then
3280
3281 enabled vis && check_inline_asm vis '"pdist %f0, %f0, %f0"'
3282
3283 elif enabled x86; then
3284
3285 check_code ld intrin.h "__rdtsc()" && enable rdtsc
3286
3287 check_code ld mmintrin.h "_mm_empty()" && enable mm_empty
3288
3289 enable local_aligned_8 local_aligned_16
3290
3291 # check whether EBP is available on x86
3292 # As 'i' is stored on the stack, this program will crash
3293 # if the base pointer is used to access it because the
3294 # base pointer is cleared in the inline assembly code.
3295 check_exec_crash <<EOF && enable ebp_available
3296 volatile int i=0;
3297 __asm__ volatile ("xorl %%ebp, %%ebp" ::: "%ebp");
3298 return i;
3299 EOF
3300
3301 # check whether EBX is available on x86
3302 check_inline_asm ebx_available '""::"b"(0)' &&
3303 check_inline_asm ebx_available '"":::"%ebx"'
3304
3305 # check whether xmm clobbers are supported
3306 check_inline_asm xmm_clobbers '"":::"%xmm0"'
3307
3308 # check whether binutils is new enough to compile SSSE3/MMXEXT
3309 enabled ssse3 && check_inline_asm ssse3_inline '"pabsw %xmm0, %xmm0"'
3310 enabled mmxext && check_inline_asm mmxext_inline '"pmaxub %mm0, %mm1"'
3311
3312 if ! disabled_any asm mmx yasm; then
3313 if check_cmd $yasmexe --version; then
3314 enabled x86_64 && yasm_extra="-m amd64"
3315 yasm_debug="-g dwarf2"
3316 elif check_cmd nasm -v; then
3317 yasmexe=nasm
3318 yasm_debug="-g -F dwarf"
3319 enabled x86_64 && test "$objformat" = elf && objformat=elf64
3320 fi
3321
3322 YASMFLAGS="-f $objformat $yasm_extra"
3323 enabled pic && append YASMFLAGS "-DPIC"
3324 test -n "$extern_prefix" && append YASMFLAGS "-DPREFIX"
3325 case "$objformat" in
3326 elf*) enabled debug && append YASMFLAGS $yasm_debug ;;
3327 esac
3328
3329 check_yasm "vextractf128 xmm0, ymm0, 0" && enable yasm ||
3330 die "yasm not found, use --disable-yasm for a crippled build"
3331 check_yasm "vfmaddps ymm0, ymm1, ymm2, ymm3" || disable fma4_external
3332 check_yasm "CPU amdnop" && enable cpunop
3333 fi
3334
3335 case "$cpu" in
3336 athlon*|opteron*|k8*|pentium|pentium-mmx|prescott|nocona|atom|geode)
3337 disable fast_clz
3338 ;;
3339 esac
3340
3341 fi
3342
3343 if enabled asm; then
3344 as=${gas:=$as}
3345 check_as <<EOF && enable gnu_as || \
3346 $nogas "GNU assembler not found, install gas-preprocessor"
3347 .macro m n
3348 \n: .int 0
3349 .endm
3350 m x
3351 EOF
3352 fi
3353
3354 check_ldflags -Wl,--as-needed
3355
3356 if check_func dlopen; then
3357 ldl=
3358 elif check_func dlopen -ldl; then
3359 ldl=-ldl
3360 fi
3361
3362 if ! disabled network; then
3363 check_type "sys/types.h sys/socket.h" socklen_t
3364 check_type netdb.h "struct addrinfo"
3365 check_type netinet/in.h "struct group_source_req" -D_BSD_SOURCE
3366 check_type netinet/in.h "struct ip_mreq_source" -D_BSD_SOURCE
3367 check_type netinet/in.h "struct ipv6_mreq" -D_DARWIN_C_SOURCE
3368 check_type netinet/in.h "struct sockaddr_in6"
3369 check_type poll.h "struct pollfd"
3370 check_type "sys/types.h sys/socket.h" "struct sockaddr_storage"
3371 check_struct "sys/types.h sys/socket.h" "struct sockaddr" sa_len
3372 check_type netinet/sctp.h "struct sctp_event_subscribe"
3373 check_func getaddrinfo $network_extralibs
3374 check_func getservbyport $network_extralibs
3375 # Prefer arpa/inet.h over winsock2
3376 if check_header arpa/inet.h ; then
3377 check_func closesocket
3378 elif check_header winsock2.h ; then
3379 check_func_headers winsock2.h closesocket -lws2 &&
3380 network_extralibs="-lws2" ||
3381 { check_func_headers winsock2.h closesocket -lws2_32 &&
3382 network_extralibs="-lws2_32"; }
3383 check_func_headers ws2tcpip.h getaddrinfo $network_extralibs
3384 check_type ws2tcpip.h socklen_t
3385 check_type ws2tcpip.h "struct addrinfo"
3386 check_type ws2tcpip.h "struct group_source_req"
3387 check_type ws2tcpip.h "struct ip_mreq_source"
3388 check_type ws2tcpip.h "struct ipv6_mreq"
3389 check_type winsock2.h "struct pollfd"
3390 check_type ws2tcpip.h "struct sockaddr_in6"
3391 check_type ws2tcpip.h "struct sockaddr_storage"
3392 check_struct winsock2.h "struct sockaddr" sa_len
3393 else
3394 disable network
3395 fi
3396 fi
3397
3398 # Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
3399 check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
3400
3401 check_func fcntl
3402 check_func fork
3403 check_func gethrtime
3404 check_func getopt
3405 check_func getrusage
3406 check_struct "sys/time.h sys/resource.h" "struct rusage" ru_maxrss
3407 check_func gettimeofday
3408 check_func inet_aton $network_extralibs
3409 check_func isatty
3410 check_func localtime_r
3411 check_func ${malloc_prefix}memalign && enable memalign
3412 check_func mkstemp
3413 check_func mmap
3414 check_func mprotect
3415 check_func ${malloc_prefix}posix_memalign && enable posix_memalign
3416 check_func_headers malloc.h _aligned_malloc && enable aligned_malloc
3417 check_func setrlimit
3418 check_func strerror_r
3419 check_func strptime
3420 check_func strtok_r
3421 check_func sched_getaffinity
3422 check_func sysconf
3423 check_func sysctl
3424 check_func usleep
3425 check_func_headers io.h setmode
3426 check_lib2 "windows.h shellapi.h" CommandLineToArgvW -lshell32
3427 check_lib2 "windows.h wincrypt.h" CryptGenRandom -ladvapi32
3428 check_lib2 "windows.h psapi.h" GetProcessMemoryInfo -lpsapi
3429 check_func_headers windows.h GetProcessAffinityMask
3430 check_func_headers windows.h GetProcessTimes
3431 check_func_headers windows.h GetSystemTimeAsFileTime
3432 check_func_headers windows.h MapViewOfFile
3433 check_func_headers windows.h SetConsoleTextAttribute
3434 check_func_headers windows.h Sleep
3435 check_func_headers windows.h VirtualAlloc
3436
3437 check_header direct.h
3438 check_header dlfcn.h
3439 check_header dxva.h
3440 check_header dxva2api.h
3441 check_header io.h
3442 check_header malloc.h
3443 check_header poll.h
3444 check_header sys/mman.h
3445 check_header sys/param.h
3446 check_header sys/resource.h
3447 check_header sys/select.h
3448 check_header sys/time.h
3449 check_header unistd.h
3450 check_header vdpau/vdpau.h
3451 check_header vdpau/vdpau_x11.h
3452 check_header VideoDecodeAcceleration/VDADecoder.h
3453 check_header windows.h
3454 check_header X11/extensions/XvMClib.h
3455
3456 disabled zlib || check_lib zlib.h zlibVersion -lz || disable zlib
3457 disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
3458
3459 if ! disabled w32threads && ! enabled pthreads; then
3460 check_func_headers "windows.h process.h" _beginthreadex && enable w32threads
3461 fi
3462
3463 # check for some common methods of building with pthread support
3464 # do this before the optional library checks as some of them require pthreads
3465 if ! disabled pthreads && ! enabled w32threads; then
3466 enable pthreads
3467 if check_func pthread_create; then
3468 :
3469 elif check_func pthread_create -pthread; then
3470 add_cflags -pthread
3471 add_extralibs -pthread
3472 elif check_func pthread_create -pthreads; then
3473 add_cflags -pthreads
3474 add_extralibs -pthreads
3475 elif check_func pthread_create -lpthreadGC2; then
3476 add_extralibs -lpthreadGC2
3477 elif ! check_lib pthread.h pthread_create -lpthread; then
3478 disable pthreads
3479 fi
3480 fi
3481
3482 for thread in $THREADS_LIST; do
3483 if enabled $thread; then
3484 test -n "$thread_type" &&
3485 die "ERROR: Only one thread type must be selected." ||
3486 thread_type="$thread"
3487 fi
3488 done
3489
3490 check_lib math.h sin -lm && LIBM="-lm"
3491 enabled vaapi && require vaapi va/va.h vaInitialize -lva
3492
3493 atan2f_args=2
3494 ldexpf_args=2
3495 powf_args=2
3496
3497 for func in $MATH_FUNCS; do
3498 eval check_mathfunc $func \${${func}_args:-1}
3499 done
3500
3501 # these are off by default, so fail if requested and not available
3502 enabled avisynth && require2 vfw32 "windows.h vfw.h" AVIFileInit -lavifil32
3503 enabled frei0r && { check_header frei0r.h || die "ERROR: frei0r.h header not found"; }
3504 enabled gnutls && require_pkg_config gnutls gnutls/gnutls.h gnutls_global_init
3505 enabled libfaac && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
3506 enabled libfdk_aac && require libfdk_aac fdk-aac/aacenc_lib.h aacEncOpen -lfdk-aac
3507 enabled libfreetype && require_pkg_config freetype2 "ft2build.h freetype/freetype.h" FT_Init_FreeType
3508 enabled libgsm && { for gsm_hdr in "gsm.h" "gsm/gsm.h"; do
3509 check_lib "${gsm_hdr}" gsm_create -lgsm && break;
3510 done || die "ERROR: libgsm not found"; }
3511 enabled libilbc && require libilbc ilbc.h WebRtcIlbcfix_InitDecode -lilbc
3512 enabled libmp3lame && require "libmp3lame >= 3.98.3" lame/lame.h lame_set_VBR_quality -lmp3lame
3513 enabled libopencore_amrnb && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb
3514 enabled libopencore_amrwb && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb
3515 enabled libopencv && require_pkg_config opencv opencv/cv.h cvCreateImageHeader
3516 enabled libopenjpeg && require libopenjpeg openjpeg.h opj_version -lopenjpeg
3517 enabled libopus && require_pkg_config opus opus_multistream.h opus_multistream_decoder_create
3518 enabled libpulse && require_pkg_config libpulse-simple pulse/simple.h pa_simple_new
3519 enabled librtmp && require_pkg_config librtmp librtmp/rtmp.h RTMP_Socket
3520 enabled libschroedinger && require_pkg_config schroedinger-1.0 schroedinger/schro.h schro_init
3521 enabled libspeex && require libspeex speex/speex.h speex_decoder_init -lspeex
3522 enabled libtheora && require libtheora theora/theoraenc.h th_info_init -ltheoraenc -ltheoradec -logg
3523 enabled libvo_aacenc && require libvo_aacenc vo-aacenc/voAAC.h voGetAACEncAPI -lvo-aacenc
3524 enabled libvo_amrwbenc && require libvo_amrwbenc vo-amrwbenc/enc_if.h E_IF_init -lvo-amrwbenc
3525 enabled libvorbis && require libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
3526 enabled libvpx && {
3527 enabled libvpx_vp8_decoder && { check_lib2 "vpx/vpx_decoder.h vpx/vp8dx.h" vpx_codec_dec_init_ver -lvpx ||
3528 die "ERROR: libvpx decoder version must be >=0.9.1"; }
3529 enabled libvpx_vp8_encoder && { check_lib2 "vpx/vpx_encoder.h vpx/vp8cx.h" "vpx_codec_enc_init_ver VPX_CQ" -lvpx ||
3530 die "ERROR: libvpx encoder version must be >=0.9.6"; }
3531 enabled libvpx_vp9_decoder && { check_lib2 "vpx/vpx_decoder.h vpx/vp8dx.h" "vpx_codec_vp9_dx" -lvpx || disable libvpx_vp9_decoder; }
3532 enabled libvpx_vp9_encoder && { check_lib2 "vpx/vpx_encoder.h vpx/vp8cx.h" "vpx_codec_vp9_cx" -lvpx || disable libvpx_vp9_encoder; } }
3533 enabled libx264 && require libx264 x264.h x264_encoder_encode -lx264 &&
3534 { check_cpp_condition x264.h "X264_BUILD >= 118" ||
3535 die "ERROR: libx264 version must be >= 0.118."; }
3536 enabled libxavs && require libxavs xavs.h xavs_encoder_encode -lxavs
3537 enabled libxvid && require libxvid xvid.h xvid_global -lxvidcore
3538 enabled openssl && { check_lib openssl/ssl.h SSL_library_init -lssl -lcrypto ||
3539 check_lib openssl/ssl.h SSL_library_init -lssl32 -leay32 ||
3540 check_lib openssl/ssl.h SSL_library_init -lssl -lcrypto -lws2_32 -lgdi32 ||
3541 die "ERROR: openssl not found"; }
3542
3543 if enabled gnutls; then
3544 { check_lib nettle/bignum.h nettle_mpz_get_str_256 -lnettle -lhogweed -lgmp && enable nettle; } ||
3545 { check_lib gcrypt.h gcry_mpi_new -lgcrypt && enable gcrypt; }
3546 fi
3547
3548 # libdc1394 check
3549 if enabled libdc1394; then
3550 { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
3551 enable libdc1394_2; } ||
3552 { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
3553 enable libdc1394_1; } ||
3554 die "ERROR: No version of libdc1394 found "
3555 fi
3556
3557 if check_pkg_config sdl SDL_events.h SDL_PollEvent; then
3558 check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
3559 enable sdl &&
3560 check_struct SDL.h SDL_VideoInfo current_w $sdl_cflags && enable sdl_video_size
3561 fi
3562
3563 texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
3564
3565 check_header linux/fb.h
3566 check_header linux/videodev2.h
3567 check_struct linux/videodev2.h "struct v4l2_frmivalenum" discrete
3568
3569 check_header sys/videoio.h
3570
3571 check_func_headers "windows.h vfw.h" capCreateCaptureWindow "$vfwcap_indev_extralibs"
3572 # check that WM_CAP_DRIVER_CONNECT is defined to the proper value
3573 # w32api 3.12 had it defined wrong
3574 check_cpp_condition vfw.h "WM_CAP_DRIVER_CONNECT > WM_USER" && enable vfwcap_defines
3575
3576 # check for ioctl_meteor.h, ioctl_bt848.h and alternatives
3577 { check_header dev/bktr/ioctl_meteor.h &&
3578 check_header dev/bktr/ioctl_bt848.h; } ||
3579 { check_header machine/ioctl_meteor.h &&
3580 check_header machine/ioctl_bt848.h; } ||
3581 { check_header dev/video/meteor/ioctl_meteor.h &&
3582 check_header dev/video/bktr/ioctl_bt848.h; } ||
3583 check_header dev/ic/bt8xx.h
3584
3585 check_header sndio.h
3586 check_header sys/soundcard.h
3587 check_header soundcard.h
3588
3589 enabled_any alsa_indev alsa_outdev && check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
3590
3591 enabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack &&
3592 check_func jack_port_get_latency_range -ljack
3593
3594 enabled_any sndio_indev sndio_outdev && check_lib2 sndio.h sio_open -lsndio
3595
3596 if enabled libcdio; then
3597 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
3598 fi
3599
3600 enabled x11grab &&
3601 require X11 X11/Xlib.h XOpenDisplay -lX11 &&
3602 require Xext X11/extensions/XShm.h XShmCreateImage -lXext &&
3603 require Xfixes X11/extensions/Xfixes.h XFixesGetCursorImage -lXfixes
3604
3605 enabled vdpau &&
3606 check_cpp_condition vdpau/vdpau.h "defined VDP_DECODER_PROFILE_MPEG4_PART2_ASP" ||
3607 disable vdpau
3608
3609 enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel"
3610
3611 # add some useful compiler flags if supported
3612 check_cflags -Wdeclaration-after-statement
3613 check_cflags -Wall
3614 check_cflags -Wno-parentheses
3615 check_cflags -Wno-switch
3616 check_cflags -Wno-format-zero-length
3617 check_cflags -Wdisabled-optimization
3618 check_cflags -Wpointer-arith
3619 check_cflags -Wredundant-decls
3620 check_cflags -Wno-pointer-sign
3621 check_cflags -Wcast-qual
3622 check_cflags -Wwrite-strings
3623 check_cflags -Wtype-limits
3624 check_cflags -Wundef
3625 check_cflags -Wmissing-prototypes
3626 check_cflags -Wstrict-prototypes
3627 enabled extra_warnings && check_cflags -Winline
3628
3629 # add some linker flags
3630 check_ldflags -Wl,--warn-common
3631 check_ldflags -Wl,-rpath-link=libswscale:libavfilter:libavdevice:libavformat:libavcodec:libavutil:libavresample
3632 test_ldflags -Wl,-Bsymbolic && append SHFLAGS -Wl,-Bsymbolic
3633
3634 enabled xmm_clobber_test &&
3635 check_ldflags -Wl,--wrap,avcodec_open2 \
3636 -Wl,--wrap,avcodec_decode_audio4 \
3637 -Wl,--wrap,avcodec_decode_video2 \
3638 -Wl,--wrap,avcodec_decode_subtitle2 \
3639 -Wl,--wrap,avcodec_encode_audio2 \
3640 -Wl,--wrap,avcodec_encode_video \
3641 -Wl,--wrap,avcodec_encode_subtitle \
3642 -Wl,--wrap,sws_scale ||
3643 disable xmm_clobber_test
3644
3645 echo "X{};" > $TMPV
3646 if test_ldflags -Wl,--version-script,$TMPV; then
3647 append SHFLAGS '-Wl,--version-script,\$(SUBDIR)lib\$(NAME).ver'
3648 check_cc <<EOF && enable symver_asm_label
3649 void ff_foo(void) __asm__ ("av_foo@VERSION");
3650 void ff_foo(void) { ${inline_asm+__asm__($quotes);} }
3651 EOF
3652 check_cc <<EOF && enable symver_gnu_asm
3653 __asm__(".symver ff_foo,av_foo@VERSION");
3654 void ff_foo(void) {}
3655 EOF
3656 fi
3657
3658 if [ -z "$optflags" ]; then
3659 if enabled small; then
3660 optflags=$cflags_size
3661 elif enabled optimizations; then
3662 optflags=$cflags_speed
3663 else
3664 optflags=$cflags_noopt
3665 fi
3666 fi
3667
3668 check_optflags(){
3669 check_cflags "$@"
3670 enabled lto && check_ldflags "$@"
3671 }
3672
3673
3674 if enabled lto; then
3675 test "$cc_type" != "$ld_type" && die "LTO requires same compiler and linker"
3676 check_cflags -flto
3677 check_ldflags -flto $cpuflags
3678 fi
3679
3680 check_optflags $optflags
3681 check_optflags -fno-math-errno
3682 check_optflags -fno-signed-zeros
3683
3684 if enabled icc; then
3685 # Just warnings, no remarks
3686 check_cflags -w1
3687 # -wd: Disable following warnings
3688 # 144, 167, 556: -Wno-pointer-sign
3689 # 1292: attribute "foo" ignored
3690 # 1419: external declaration in primary source file
3691 # 10006: ignoring unknown option -fno-signed-zeros
3692 # 10148: ignoring unknown option -Wno-parentheses
3693 # 10156: ignoring option '-W'; no argument required