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