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