37482cf1ef558048f248f1a5751318548759a0b6
[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"
2366 bktr_indev_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
2367 dv1394_indev_deps="dv1394"
2368 dv1394_indev_select="dv_demuxer"
2369 fbdev_indev_deps="linux_fb_h"
2370 jack_indev_deps="jack_jack_h"
2371 jack_indev_deps_any="sem_timedwait dispatch_dispatch_h"
2372 libcdio_indev_deps="libcdio"
2373 libdc1394_indev_deps="libdc1394"
2374 oss_indev_deps_any="soundcard_h sys_soundcard_h"
2375 oss_outdev_deps_any="soundcard_h sys_soundcard_h"
2376 pulse_indev_deps="libpulse"
2377 sndio_indev_deps="sndio_h"
2378 sndio_outdev_deps="sndio_h"
2379 v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h"
2380 vfwcap_indev_deps="capCreateCaptureWindow vfwcap_defines"
2381 vfwcap_indev_extralibs="-lavicap32"
2382 xcbgrab_indev_deps="libxcb"
2383
2384 # protocols
2385 ffrtmpcrypt_protocol_deps="!librtmp_protocol"
2386 ffrtmpcrypt_protocol_deps_any="gmp openssl"
2387 ffrtmpcrypt_protocol_select="tcp_protocol"
2388 ffrtmphttp_protocol_deps="!librtmp_protocol"
2389 ffrtmphttp_protocol_select="http_protocol"
2390 gopher_protocol_select="network"
2391 http_protocol_select="tcp_protocol"
2392 httpproxy_protocol_select="tcp_protocol"
2393 https_protocol_select="tls_protocol"
2394 icecast_protocol_select="http_protocol"
2395 librtmp_protocol_deps="librtmp"
2396 librtmpe_protocol_deps="librtmp"
2397 librtmps_protocol_deps="librtmp"
2398 librtmpt_protocol_deps="librtmp"
2399 librtmpte_protocol_deps="librtmp"
2400 mmsh_protocol_select="http_protocol"
2401 mmst_protocol_select="network"
2402 rtmp_protocol_deps="!librtmp_protocol"
2403 rtmp_protocol_select="tcp_protocol"
2404 rtmpe_protocol_select="ffrtmpcrypt_protocol"
2405 rtmps_protocol_deps="!librtmp_protocol"
2406 rtmps_protocol_select="tls_protocol"
2407 rtmpt_protocol_select="ffrtmphttp_protocol"
2408 rtmpte_protocol_select="ffrtmpcrypt_protocol ffrtmphttp_protocol"
2409 rtmpts_protocol_select="ffrtmphttp_protocol https_protocol"
2410 rtp_protocol_select="udp_protocol"
2411 sctp_protocol_deps="struct_sctp_event_subscribe"
2412 sctp_protocol_select="network"
2413 srtp_protocol_select="rtp_protocol srtp"
2414 tcp_protocol_select="network"
2415 tls_gnutls_protocol_deps="gnutls"
2416 tls_gnutls_protocol_select="tcp_protocol"
2417 tls_openssl_protocol_deps="openssl !tls_gnutls_protocol"
2418 tls_openssl_protocol_select="tcp_protocol"
2419 tls_protocol_deps_any="tls_gnutls_protocol tls_openssl_protocol"
2420 udp_protocol_select="network"
2421 unix_protocol_deps="sys_un_h"
2422 unix_protocol_select="network"
2423
2424 # filters
2425 asyncts_filter_deps="avresample"
2426 blackframe_filter_deps="gpl"
2427 boxblur_filter_deps="gpl"
2428 bs2b_filter_deps="libbs2b"
2429 cropdetect_filter_deps="gpl"
2430 deinterlace_qsv_filter_deps="libmfx"
2431 delogo_filter_deps="gpl"
2432 drawtext_filter_deps="libfreetype"
2433 frei0r_filter_deps="frei0r dlopen"
2434 frei0r_filter_extralibs='$ldl'
2435 frei0r_src_filter_deps="frei0r dlopen"
2436 frei0r_src_filter_extralibs='$ldl'
2437 hdcd_filter_deps="libhdcd"
2438 hqdn3d_filter_deps="gpl"
2439 interlace_filter_deps="gpl"
2440 movie_filter_deps="avcodec avformat"
2441 ocv_filter_deps="libopencv"
2442 resample_filter_deps="avresample"
2443 scale_filter_deps="swscale"
2444 scale_qsv_filter_deps="libmfx"
2445 scale_vaapi_filter_deps="vaapi VAProcPipelineParameterBuffer"
2446
2447 # examples
2448 decode_audio_example_deps="avcodec avutil"
2449 decode_video_example_deps="avcodec avutil"
2450 encode_audio_example_deps="avcodec avutil"
2451 encode_video_example_deps="avcodec avutil"
2452 filter_audio_example_deps="avfilter avutil"
2453 metadata_example_deps="avformat avutil"
2454 output_example_deps="avcodec avformat avresample avutil swscale"
2455 qsvdec_example_deps="avcodec avutil libmfx h264_qsv_decoder"
2456 transcode_aac_example_deps="avcodec avformat avresample"
2457
2458 # libraries, in linking order
2459 avcodec_deps="avutil"
2460 avdevice_deps="avformat avcodec avutil"
2461 avfilter_deps="avutil"
2462 avformat_deps="avcodec avutil"
2463 avresample_deps="avutil"
2464 swscale_deps="avutil"
2465
2466 # programs
2467 avconv_deps="avcodec avfilter avformat avresample swscale"
2468 avconv_select="aformat_filter anull_filter asyncts_filter atrim_filter format_filter
2469 fps_filter null_filter resample_filter scale_filter
2470 trim_filter"
2471 avplay_deps="avcodec avfilter avformat avresample sdl"
2472 avplay_libs='$sdl_libs'
2473 avplay_select="rdft format_filter transpose_filter hflip_filter vflip_filter"
2474 avprobe_deps="avcodec avformat"
2475
2476 # documentation
2477 pod2man_deps="doc"
2478 texi2html_deps="doc"
2479
2480 # default parameters
2481
2482 logfile="config.log"
2483
2484 # installation paths
2485 prefix_default="/usr/local"
2486 bindir_default='${prefix}/bin'
2487 datadir_default='${prefix}/share/avconv'
2488 docdir_default='${prefix}/share/doc/libav'
2489 incdir_default='${prefix}/include'
2490 libdir_default='${prefix}/lib'
2491 mandir_default='${prefix}/share/man'
2492 shlibdir_default="$libdir_default"
2493
2494 # toolchain
2495 ar_default="ar"
2496 cc_default="gcc"
2497 host_cc_default="gcc"
2498 ln_s="ln -s -f"
2499 nm_default="nm -g"
2500 objformat="elf"
2501 pkg_config_default=pkg-config
2502 ranlib="ranlib"
2503 strip="strip"
2504 version_script='--version-script'
2505 yasmexe="yasm"
2506
2507 # machine
2508 arch_default=$(uname -m)
2509 cpu="generic"
2510 intrinsics="none"
2511
2512 # OS
2513 target_os_default=$(tolower $(uname -s))
2514 host_os=$target_os_default
2515
2516 # configurable options
2517 enable $EXAMPLE_LIST $LIBRARY_LIST $PROGRAM_LIST
2518
2519 enable asm
2520 enable debug
2521 enable doc
2522 enable faan faandct faanidct
2523 enable optimizations
2524 enable safe_bitstream_reader
2525 enable static
2526 enable swscale_alpha
2527 enable valgrind_backtrace
2528
2529 # By default, enable only those hwaccels that have no external dependencies.
2530 enable d3d11va dxva2 vda vdpau
2531
2532 # build settings
2533 SHFLAGS='-shared -Wl,-soname,$$(@F)'
2534 LIBPREF="lib"
2535 LIBSUF=".a"
2536 LIBNAME='$(LIBPREF)$(NAME)$(LIBSUF)'
2537 SLIBPREF="lib"
2538 SLIBSUF=".so"
2539 SLIBNAME='$(SLIBPREF)$(NAME)$(SLIBSUF)'
2540 SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
2541 SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
2542 LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
2543 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'
2544 SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR) $(SLIBNAME)'
2545 VERSION_SCRIPT_POSTPROCESS_CMD="cat"
2546
2547 asflags_filter=echo
2548 cflags_filter=echo
2549 ldflags_filter=echo
2550
2551 AS_C='-c'
2552 AS_O='-o $@'
2553 CC_C='-c'
2554 CC_E='-E -o $@'
2555 CC_O='-o $@'
2556 OBJCC_C='-c'
2557 OBJCC_E='-E -o $@'
2558 OBJCC_O='-o $@'
2559 LD_O='-o $@'
2560 LD_LIB='-l%'
2561 LD_PATH='-L'
2562 HOSTCC_C='-c'
2563 HOSTCC_E='-E -o $@'
2564 HOSTCC_O='-o $@'
2565 HOSTLD_O='-o $@'
2566
2567 host_libs='-lm'
2568 host_cflags_filter=echo
2569 host_ldflags_filter=echo
2570
2571 target_path='$(CURDIR)'
2572
2573 # since the object filename is not given with the -MM flag, the compiler
2574 # is only able to print the basename, and we must add the path ourselves
2575 DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o," > $(@:.o=.d)'
2576 DEPFLAGS='-MM'
2577
2578 # find source path
2579 if test -f configure; then
2580 source_path=.
2581 else
2582 source_path=$(cd $(dirname "$0"); pwd)
2583 echo "$source_path" | grep -q '[[:blank:]]' &&
2584 die "Out of tree builds are impossible with whitespace in source path."
2585 test -e "$source_path/config.h" &&
2586 die "Out of tree builds are impossible with config.h in source dir."
2587 fi
2588
2589 for v in "$@"; do
2590 r=${v#*=}
2591 l=${v%"$r"}
2592 r=$(sh_quote "$r")
2593 LIBAV_CONFIGURATION="${LIBAV_CONFIGURATION# } ${l}${r}"
2594 done
2595
2596 find_things(){
2597 thing=$1
2598 pattern=$2
2599 file=$source_path/$3
2600 sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
2601 }
2602
2603 ENCODER_LIST=$(find_things encoder ENC libavcodec/allcodecs.c)
2604 DECODER_LIST=$(find_things decoder DEC libavcodec/allcodecs.c)
2605 HWACCEL_LIST=$(find_things hwaccel HWACCEL libavcodec/allcodecs.c)
2606 PARSER_LIST=$(find_things parser PARSER libavcodec/allcodecs.c)
2607 MUXER_LIST=$(find_things muxer _MUX libavformat/allformats.c)
2608 DEMUXER_LIST=$(find_things demuxer DEMUX libavformat/allformats.c)
2609 OUTDEV_LIST=$(find_things outdev OUTDEV libavdevice/alldevices.c)
2610 INDEV_LIST=$(find_things indev _IN libavdevice/alldevices.c)
2611 FILTER_LIST=$(find_things filter FILTER libavfilter/allfilters.c)
2612
2613 find_things_extern(){
2614 thing=$1
2615 pattern=$2
2616 file=$source_path/$3
2617 sed -n "s/^[^#]*extern.*$pattern *ff_\([^ ]*\)_$thing;/\1_$thing/p" "$file"
2618 }
2619
2620 BSF_LIST=$(find_things_extern bsf AVBitStreamFilter libavcodec/bitstream_filters.c)
2621 PROTOCOL_LIST=$(find_things_extern protocol URLProtocol libavformat/protocols.c)
2622
2623 ALL_COMPONENTS="
2624 $BSF_LIST
2625 $DECODER_LIST
2626 $DEMUXER_LIST
2627 $ENCODER_LIST
2628 $FILTER_LIST
2629 $HWACCEL_LIST
2630 $INDEV_LIST
2631 $MUXER_LIST
2632 $OUTDEV_LIST
2633 $PARSER_LIST
2634 $PROTOCOL_LIST
2635 "
2636
2637 for n in $COMPONENT_LIST; do
2638 v=$(toupper ${n%s})_LIST
2639 eval enable \$$v
2640 eval ${n}_if_any="\$$v"
2641 done
2642
2643 enable $ARCH_EXT_LIST
2644
2645 die_unknown(){
2646 echo "Unknown option \"$1\"."
2647 echo "See $0 --help for available options."
2648 exit 1
2649 }
2650
2651 print_3_columns() {
2652 printf "%-25s %-25s %-25s\n" $(cat | tr ' ' '\n' | sort)
2653 }
2654
2655 show_list() {
2656 suffix=_$1
2657 shift
2658 echo $* | sed s/$suffix//g | print_3_columns
2659 exit 0
2660 }
2661
2662 rand_list(){
2663 IFS=', '
2664 set -- $*
2665 unset IFS
2666 for thing; do
2667 comp=${thing%:*}
2668 prob=${thing#$comp}
2669 prob=${prob#:}
2670 is_in ${comp} $COMPONENT_LIST && eval comp=\$$(toupper ${comp%s})_LIST
2671 echo "prob ${prob:-0.5}"
2672 printf '%s\n' $comp
2673 done
2674 }
2675
2676 do_random(){
2677 action=$1
2678 shift
2679 random_seed=$(awk "BEGIN { srand($random_seed); print srand() }")
2680 $action $(rand_list "$@" | awk "BEGIN { srand($random_seed) } \$1 == \"prob\" { prob = \$2; next } rand() < prob { print }")
2681 }
2682
2683 for opt do
2684 optval="${opt#*=}"
2685 case "$opt" in
2686 --extra-ldflags=*)
2687 add_ldflags $optval
2688 ;;
2689 --extra-ldexeflags=*)
2690 add_ldexeflags $optval
2691 ;;
2692 --extra-libs=*)
2693 add_extralibs $optval
2694 ;;
2695 --disable-devices)
2696 disable $INDEV_LIST $OUTDEV_LIST
2697 ;;
2698 --enable-debug=*)
2699 debuglevel="$optval"
2700 ;;
2701 --disable-programs)
2702 disable $PROGRAM_LIST
2703 ;;
2704 --disable-everything)
2705 map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
2706 ;;
2707 --disable-all)
2708 map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
2709 disable $LIBRARY_LIST $PROGRAM_LIST doc
2710 ;;
2711 --enable-random|--disable-random)
2712 action=${opt%%-random}
2713 do_random ${action#--} $COMPONENT_LIST
2714 ;;
2715 --enable-random=*|--disable-random=*)
2716 action=${opt%%-random=*}
2717 do_random ${action#--} $optval
2718 ;;
2719 --enable-*=*|--disable-*=*)
2720 eval $(echo "${opt%%=*}" | sed 's/--/action=/;s/-/ thing=/')
2721 is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt"
2722 eval list=\$$(toupper $thing)_LIST
2723 name=$(echo "${optval}" | sed "s/,/_${thing}|/g")_${thing}
2724 $action $(filter "$name" $list)
2725 ;;
2726 --enable-avserver|--disable-avserver*)
2727 warn "avserver has been removed, the ${opt} option is only"\
2728 "provided for compatibility and will be removed in the future"
2729 ;;
2730 --enable-?*|--disable-?*)
2731 eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
2732 if is_in $option $COMPONENT_LIST; then
2733 test $action = disable && action=unset
2734 eval $action \$$(toupper ${option%s})_LIST
2735 elif is_in $option $CMDLINE_SELECT; then
2736 $action $option
2737 else
2738 die_unknown $opt
2739 fi
2740 ;;
2741 --list-*)
2742 NAME="${opt#--list-}"
2743 is_in $NAME $COMPONENT_LIST || die_unknown $opt
2744 NAME=${NAME%s}
2745 eval show_list $NAME \$$(toupper $NAME)_LIST
2746 ;;
2747 --help|-h) show_help
2748 ;;
2749 --quiet|-q) quiet=yes
2750 ;;
2751 *)
2752 optname="${opt%%=*}"
2753 optname="${optname#--}"
2754 optname=$(echo "$optname" | sed 's/-/_/g')
2755 if is_in $optname $CMDLINE_SET; then
2756 eval $optname='$optval'
2757 elif is_in $optname $CMDLINE_APPEND; then
2758 append $optname "$optval"
2759 else
2760 die_unknown $opt
2761 fi
2762 ;;
2763 esac
2764 done
2765
2766 for e in $env; do
2767 eval "export $e"
2768 done
2769
2770 disabled logging && logfile=/dev/null
2771
2772 # Die early if licensing-related configure options are incompatible.
2773 die_license_disabled() {
2774 enabled $1 || { enabled $v && die "$v is $1 and --enable-$1 is not specified."; }
2775 }
2776
2777 map "die_license_disabled gpl" $EXTERNAL_LIBRARY_GPL_LIST
2778 map "die_license_disabled nonfree" $EXTERNAL_LIBRARY_NONFREE_LIST $HWACCEL_LIBRARY_NONFREE_LIST
2779 map "die_license_disabled version3" $EXTERNAL_LIBRARY_VERSION3_LIST
2780
2781 enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
2782
2783 # Disable all the library-specific components if the library itself
2784 # is disabled, see AVCODEC_LIST and following _LIST variables.
2785
2786 disable_components(){
2787 disabled ${1} && disable $(
2788 eval components="\$$(toupper ${1})_COMPONENTS"
2789 map 'eval echo \${$(toupper ${v%s})_LIST}' $components
2790 )
2791 }
2792
2793 map 'disable_components $v' $LIBRARY_LIST
2794
2795 echo "# $0 $LIBAV_CONFIGURATION" > $logfile
2796 set >> $logfile
2797
2798 case "$toolchain" in
2799 *-asan)
2800 cc_default="${toolchain%-asan}"
2801 add_cflags -fsanitize=address
2802 add_ldflags -fsanitize=address
2803 ;;
2804 *-msan)
2805 cc_default="${toolchain%-msan}"
2806 add_cflags -fsanitize=memory -fsanitize-memory-track-origins
2807 add_ldflags -fsanitize=memory
2808 ;;
2809 *-tsan)
2810 cc_default="${toolchain%-tsan}"
2811 add_cflags -fsanitize=thread -pie
2812 add_ldflags -fsanitize=thread -pie
2813 case "$toolchain" in
2814 gcc-tsan)
2815 add_cflags -fPIC
2816 add_ldflags -fPIC
2817 ;;
2818 esac
2819 ;;
2820 *-usan)
2821 cc_default="${toolchain%-usan}"
2822 add_cflags -fsanitize=undefined
2823 add_ldflags -fsanitize=undefined
2824 case "$toolchain" in
2825 clang-usan)
2826 add_cflags -O1
2827 ;;
2828 esac
2829 ;;
2830 valgrind-*)
2831 target_exec_default="valgrind"
2832 case "$toolchain" in
2833 valgrind-massif)
2834 target_exec_args="--alloc-fn=av_malloc --alloc-fn=av_mallocz"
2835 ;;
2836 valgrind-memcheck)
2837 target_exec_args="--track-origins=yes --leak-check=full"
2838 ;;
2839 esac
2840 ;;
2841 msvc)
2842 # Check whether the current MSVC version needs the C99 converter.
2843 # From MSVC 2013 (compiler major version 18) onwards, it does actually
2844 # support enough of C99 to build libav. Default to the new
2845 # behaviour if the regexp was unable to match anything, since this
2846 # successfully parses the version number of existing supported
2847 # versions that require the converter (MSVC 2010 and 2012).
2848 cl_major_ver=$(cl 2>&1 | sed -n 's/.*Version \([[:digit:]]\{1,\}\)\..*/\1/p')
2849 if [ -z "$cl_major_ver" ] || [ $cl_major_ver -ge 18 ]; then
2850 cc_default="cl"
2851 else
2852 cc_default="c99wrap cl"
2853 fi
2854 ld_default="$source_path/compat/windows/mslink"
2855 nm_default="dumpbin -symbols"
2856 ar_default="lib"
2857 case "$arch" in
2858 arm*)
2859 as_default="armasm"
2860 ;;
2861 esac
2862 target_os_default="win32"
2863 # Use a relative path for TMPDIR. This makes sure all the
2864 # ffconf temp files are written with a relative path, avoiding
2865 # issues with msys/win32 path conversion for MSVC parameters
2866 # such as -Fo<file> or -out:<file>.
2867 TMPDIR=.
2868 ;;
2869 icl)
2870 cc_default="icl"
2871 ld_default="xilink"
2872 nm_default="dumpbin -symbols"
2873 ar_default="xilib"
2874 target_os_default="win32"
2875 TMPDIR=.
2876 ;;
2877 gcov)
2878 add_cflags -fprofile-arcs -ftest-coverage
2879 add_ldflags -fprofile-arcs -ftest-coverage
2880 ;;
2881 llvm-cov)
2882 add_cflags -fprofile-arcs -ftest-coverage
2883 add_ldflags --coverage
2884 ;;
2885 hardened)
2886 add_cppflags -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2
2887 add_cflags -fno-strict-overflow -fstack-protector-all
2888 add_ldflags -Wl,-z,relro -Wl,-z,now
2889 ;;
2890 ?*)
2891 die "Unknown toolchain $toolchain"
2892 ;;
2893 esac
2894
2895 test -n "$cross_prefix" && enable cross_compile
2896
2897 if enabled cross_compile; then
2898 test -n "$arch" && test -n "$target_os" ||
2899 die "Must specify target arch (--arch) and OS (--target-os) when cross-compiling"
2900 fi
2901
2902 ar_default="${cross_prefix}${ar_default}"
2903 cc_default="${cross_prefix}${cc_default}"
2904 occ_default="${cross_prefix}${occ_default}"
2905 nm_default="${cross_prefix}${nm_default}"
2906 pkg_config_default="${cross_prefix}${pkg_config_default}"
2907 ranlib="${cross_prefix}${ranlib}"
2908 strip="${cross_prefix}${strip}"
2909
2910 sysinclude_default="${sysroot}/usr/include"
2911
2912 set_default arch cc pkg_config sysinclude target_exec target_os
2913 enabled cross_compile || host_cc_default=$cc
2914 set_default host_cc
2915
2916 if ! $pkg_config --version >/dev/null 2>&1; then
2917 warn "$pkg_config not found, library detection may fail."
2918 pkg_config=false
2919 fi
2920
2921 exesuf() {
2922 case $1 in
2923 mingw32*|mingw64*|win32|win64|cygwin*|*-dos|freedos|opendos|os/2*|symbian) echo .exe ;;
2924 esac
2925 }
2926
2927 EXESUF=$(exesuf $target_os)
2928 HOSTEXESUF=$(exesuf $host_os)
2929
2930 # set temporary file name
2931 : ${TMPDIR:=$TEMPDIR}
2932 : ${TMPDIR:=$TMP}
2933 : ${TMPDIR:=/tmp}
2934
2935 if ! check_cmd mktemp -u XXXXXX; then
2936 # simple replacement for missing mktemp
2937 # NOT SAFE FOR GENERAL USE
2938 mktemp(){
2939 echo "${2%%XXX*}.${HOSTNAME}.${UID}.$$"
2940 }
2941 fi
2942
2943 tmpfile(){
2944 tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
2945 (set -C; exec > $tmp) 2>/dev/null ||
2946 die "Unable to create temporary file in $TMPDIR."
2947 append TMPFILES $tmp
2948 eval $1=$tmp
2949 }
2950
2951 trap 'rm -f -- $TMPFILES' EXIT
2952
2953 tmpfile TMPASM .asm
2954 tmpfile TMPC .c
2955 tmpfile TMPE $EXESUF
2956 tmpfile TMPH .h
2957 tmpfile TMPO .o
2958 tmpfile TMPS .S
2959 tmpfile TMPSH .sh
2960 tmpfile TMPV .ver
2961
2962 unset -f mktemp
2963
2964 chmod +x $TMPE
2965
2966 # make sure we can execute files in $TMPDIR
2967 cat > $TMPSH 2>> $logfile <<EOF
2968 #! /bin/sh
2969 EOF
2970 chmod +x $TMPSH >> $logfile 2>&1
2971 if ! $TMPSH >> $logfile 2>&1; then
2972 cat <<EOF
2973 Unable to create and execute files in $TMPDIR. Set the TMPDIR environment
2974 variable to another directory and make sure that it is not mounted noexec.
2975 EOF
2976 die "Sanity test failed."
2977 fi
2978
2979 armasm_flags(){
2980 for flag; do
2981 case $flag in
2982 # Filter out MSVC cl.exe options from cflags that shouldn't
2983 # be passed to gas-preprocessor
2984 -M[TD]*) ;;
2985 *) echo $flag ;;
2986 esac
2987 done
2988 }
2989
2990 ccc_flags(){
2991 for flag; do
2992 case $flag in
2993 -std=c99) echo -c99 ;;
2994 -mcpu=*) echo -arch ${flag#*=} ;;
2995 -mieee) echo -ieee ;;
2996 -O*|-fast) echo $flag ;;
2997 -fno-math-errno) echo -assume nomath_errno ;;
2998 -g) echo -g3 ;;
2999 -Wall) echo -msg_enable level2 ;;
3000 -Wno-pointer-sign) echo -msg_disable ptrmismatch1 ;;
3001 -Wl,*) echo $flag ;;
3002 -f*|-W*) ;;
3003 *) echo $flag ;;
3004 esac
3005 done
3006 }
3007
3008 cparser_flags(){
3009 for flag; do
3010 case $flag in
3011 -Wno-switch) echo -Wno-switch-enum ;;
3012 -Wno-format-zero-length) ;;
3013 -Wdisabled-optimization) ;;
3014 -Wno-pointer-sign) echo -Wno-other ;;
3015 *) echo $flag ;;
3016 esac
3017 done
3018 }
3019
3020 msvc_common_flags(){
3021 for flag; do
3022 case $flag in
3023 # In addition to specifying certain flags under the compiler
3024 # specific filters, they must be specified here as well or else the
3025 # generic catch all at the bottom will print the original flag.
3026 -Wall) ;;
3027 -std=c99) ;;
3028 # Common flags
3029 -fomit-frame-pointer) ;;
3030 -g) echo -Z7 ;;
3031 -fno-math-errno) ;;
3032 -fno-common) ;;
3033 -fno-signed-zeros) ;;
3034 -fPIC) ;;
3035 -mthumb) ;;
3036 -march=*) ;;
3037 -lz) echo zlib.lib ;;
3038 -lavicap32) echo vfw32.lib user32.lib ;;
3039 -lx264) echo libx264.lib ;;
3040 -l*) echo ${flag#-l}.lib ;;
3041 -L*) echo -libpath:${flag#-L} ;;
3042 *) echo $flag ;;
3043 esac
3044 done
3045 }
3046
3047 msvc_flags(){
3048 msvc_common_flags "$@"
3049 for flag; do
3050 case $flag in
3051 -Wall) echo -W4 -wd4244 -wd4127 -wd4018 -wd4389 \
3052 -wd4146 -wd4057 -wd4204 -wd4706 -wd4305 \
3053 -wd4152 -wd4324 -we4013 -wd4100 -wd4214 \
3054 -wd4273 -wd4554 -wd4701 -wd4703 ;;
3055 esac
3056 done
3057 }
3058
3059 icl_flags(){
3060 msvc_common_flags "$@"
3061 for flag; do
3062 case $flag in
3063 # Despite what Intel's documentation says -Wall, which is supported
3064 # on Windows, does enable remarks so disable them here.
3065 -Wall) echo $flag -Qdiag-disable:remark ;;
3066 -std=c99) echo -Qstd=c99 ;;
3067 esac
3068 done
3069 }
3070
3071 pgi_flags(){
3072 for flag; do
3073 case $flag in
3074 -flto) echo -Mipa=fast,libopt,libinline,vestigial ;;
3075 -fomit-frame-pointer) echo -Mnoframe ;;
3076 -g) echo -gopt ;;
3077 *) echo $flag ;;
3078 esac
3079 done
3080 }
3081
3082 suncc_flags(){
3083 for flag; do
3084 case $flag in
3085 -march=*|-mcpu=*)
3086 case "${flag#*=}" in
3087 native) echo -xtarget=native ;;
3088 v9|niagara) echo -xarch=sparc ;;
3089 ultrasparc) echo -xarch=sparcvis ;;
3090 ultrasparc3|niagara2) echo -xarch=sparcvis2 ;;
3091 i586|pentium) echo -xchip=pentium ;;
3092 i686|pentiumpro|pentium2) echo -xtarget=pentium_pro ;;
3093 pentium3*|c3-2) echo -xtarget=pentium3 ;;
3094 pentium-m) echo -xarch=sse2 -xchip=pentium3 ;;
3095 pentium4*) echo -xtarget=pentium4 ;;
3096 prescott|nocona) echo -xarch=sse3 -xchip=pentium4 ;;
3097 *-sse3) echo -xarch=sse3 ;;
3098 core2) echo -xarch=ssse3 -xchip=core2 ;;
3099 corei7) echo -xarch=sse4_2 -xchip=nehalem ;;
3100 corei7-avx) echo -xarch=avx -xchip=sandybridge ;;
3101 amdfam10|barcelona|bdver*) echo -xarch=sse4_1 ;;
3102 athlon-4|athlon-[mx]p) echo -xarch=ssea ;;
3103 k8|opteron|athlon64|athlon-fx)
3104 echo -xarch=sse2a ;;
3105 athlon*) echo -xarch=pentium_proa ;;
3106 esac
3107 ;;
3108 -std=c99) echo -xc99 ;;
3109 -fomit-frame-pointer) echo -xregs=frameptr ;;
3110 -fPIC) echo -KPIC -xcode=pic32 ;;
3111 -W*,*) echo $flag ;;
3112 -f*-*|-W*|-mimpure-text) ;;
3113 -shared) echo -G ;;
3114 *) echo $flag ;;
3115 esac
3116 done
3117 }
3118
3119 tms470_flags(){
3120 for flag; do
3121 case $flag in
3122 -march=*|-mcpu=*)
3123 case "${flag#*=}" in
3124 armv7-a|cortex-a*) echo -mv=7a8 ;;
3125 armv7-r|cortex-r*) echo -mv=7r4 ;;
3126 armv7-m|cortex-m*) echo -mv=7m3 ;;
3127 armv6*|arm11*) echo -mv=6 ;;
3128 armv5*e|arm[79]*e*|arm9[24]6*|arm96*|arm102[26])
3129 echo -mv=5e ;;
3130 armv4*|arm7*|arm9[24]*) echo -mv=4 ;;
3131 esac
3132 ;;
3133 -mfpu=neon) echo --float_support=vfpv3 --neon ;;
3134 -mfpu=vfp) echo --float_support=vfpv2 ;;
3135 -mfpu=vfpv3) echo --float_support=vfpv3 ;;
3136 -mfpu=vfpv3-d16) echo --float_support=vfpv3d16 ;;
3137 -msoft-float) echo --float_support=vfplib ;;
3138 -O[0-3]|-mf=*) echo $flag ;;
3139 -g) echo -g -mn ;;
3140 -pds=*) echo $flag ;;
3141 -D*|-I*) echo $flag ;;
3142 --gcc|--abi=*) echo $flag ;;
3143 -me) echo $flag ;;
3144 esac
3145 done
3146 }
3147
3148 probe_cc(){
3149 pfx=$1
3150 _cc=$2
3151
3152 unset _type _ident _cc_c _cc_e _cc_o _flags _cflags
3153 unset _ld_o _ldflags _ld_lib _ld_path
3154 unset _depflags _DEPCMD _DEPFLAGS
3155 _flags_filter=echo
3156
3157 if $_cc -v 2>&1 | grep -q '^gcc.*LLVM'; then
3158 _type=llvm_gcc
3159 gcc_extra_ver=$(expr "$($_cc --version 2>/dev/null | head -n1)" : '.*\((.*)\)')
3160 _ident="llvm-gcc $($_cc -dumpversion 2>/dev/null) $gcc_extra_ver"
3161 _depflags='-MMD -MF $(@:.o=.d) -MT $@'
3162 _cflags_speed='-O3'
3163 _cflags_size='-Os'
3164 elif $_cc -v 2>&1 | grep -qi ^gcc; then
3165 _type=gcc
3166 gcc_version=$($_cc --version | head -n1)
3167 gcc_basever=$($_cc -dumpversion)
3168 gcc_pkg_ver=$(expr "$gcc_version" : '[^ ]* \(([^)]*)\)')
3169 gcc_ext_ver=$(expr "$gcc_version" : ".*$gcc_pkg_ver $gcc_basever \\(.*\\)")
3170 _ident=$(cleanws "gcc $gcc_basever $gcc_pkg_ver $gcc_ext_ver")
3171 if ! $_cc -dumpversion | grep -q '^2\.'; then
3172 _depflags='-MMD -MF $(@:.o=.d) -MT $@'
3173 fi
3174 _cflags_speed='-O3'
3175 _cflags_size='-Os'
3176 elif $_cc --version 2>/dev/null | grep -q ^icc; then
3177 _type=icc
3178 _ident=$($_cc --version | head -n1)
3179 _depflags='-MMD'
3180 _cflags_speed='-O3'
3181 _cflags_size='-Os'
3182 _cflags_noopt='-O1'
3183 elif $_cc -v 2>&1 | grep -q xlc; then
3184 _type=xlc
3185 _ident=$($_cc -qversion 2>/dev/null | head -n1)
3186 _cflags_speed='-O5'
3187 _cflags_size='-O5 -qcompact'
3188 elif $_cc -V 2>/dev/null | grep -q Compaq; then
3189 _type=ccc
3190 _ident=$($_cc -V | head -n1 | cut -d' ' -f1-3)
3191 _DEPFLAGS='-M'
3192 _cflags_speed='-fast'
3193 _cflags_size='-O1'
3194 _flags_filter=ccc_flags
3195 elif $_cc --vsn 2>/dev/null | grep -Eq "ARM (C/C\+\+ )?Compiler"; then
3196 test -d "$sysroot" || die "No valid sysroot specified."
3197 _type=armcc
3198 _ident=$($_cc --vsn | grep -i build | head -n1 | sed 's/.*: //')
3199 armcc_conf="$PWD/armcc.conf"
3200 $_cc --arm_linux_configure \
3201 --arm_linux_config_file="$armcc_conf" \
3202 --configure_sysroot="$sysroot" \
3203 --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
3204 die "Error creating armcc configuration file."
3205 $_cc --vsn | grep -q RVCT && armcc_opt=rvct || armcc_opt=armcc
3206 _flags="--arm_linux_config_file=$armcc_conf --translate_gcc"
3207 as_default="${cross_prefix}gcc"
3208 _depflags='-MMD'
3209 _cflags_speed='-O3'
3210 _cflags_size='-Os'
3211 elif $_cc -version 2>/dev/null | grep -Eq 'TMS470|TI ARM'; then
3212 _type=tms470
3213 _ident=$($_cc -version | head -n1 | tr -s ' ')
3214 _flags='--gcc --abi=eabi -me'
3215 _cc_e='-ppl -fe=$@'
3216 _cc_o='-fe=$@'
3217 _depflags='-ppa -ppd=$(@:.o=.d)'
3218 _cflags_speed='-O3 -mf=5'
3219 _cflags_size='-O3 -mf=2'
3220 _flags_filter=tms470_flags
3221 elif $_cc -v 2>&1 | grep -q clang; then
3222 _type=clang
3223 _ident=$($_cc --version 2>/dev/null | head -n1)
3224 _depflags='-MMD -MF $(@:.o=.d) -MT $@'
3225 _cflags_speed='-O3'
3226 _cflags_size='-Os'
3227 elif $_cc -V 2>&1 | grep -q Sun; then
3228 _type=suncc
3229 _ident=$($_cc -V 2>&1 | head -n1 | cut -d' ' -f 2-)
3230 _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "1s,^.*: ,$@: ," -e "\$$!s,\$$, \\\," -e "1!s,^.*: , ," > $(@:.o=.d)'
3231 _DEPFLAGS='-xM1 -xc99'
3232 _ldflags='-std=c99'
3233 _cflags_speed='-O5'
3234 _cflags_size='-O5 -xspace'
3235 _flags_filter=suncc_flags
3236 elif $_cc -v 2>&1 | grep -q 'PathScale\|Path64'; then
3237 _type=pathscale
3238 _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
3239 _depflags='-MMD -MF $(@:.o=.d) -MT $@'
3240 _cflags_speed='-O2'
3241 _cflags_size='-Os'
3242 _flags_filter='filter_out -Wdisabled-optimization'
3243 elif $_cc -v 2>&1 | grep -q Open64; then
3244 _type=open64
3245 _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
3246 _depflags='-MMD -MF $(@:.o=.d) -MT $@'
3247 _cflags_speed='-O2'
3248 _cflags_size='-Os'
3249 _flags_filter='filter_out -Wdisabled-optimization|-Wtype-limits|-fno-signed-zeros'
3250 elif $_cc -V 2>&1 | grep -q Portland; then
3251 _type=pgi
3252 _ident="PGI $($_cc -V 2>&1 | awk '/^pgcc/ { print $2; exit }')"
3253 opt_common='-alias=ansi -Mdse -Mlre -Mpre'
3254 _cflags_speed="-O3 -Mautoinline -Munroll=c:4 $opt_common"
3255 _cflags_size="-O2 -Munroll=c:1 $opt_common"
3256 _cflags_noopt="-O1"
3257 _flags_filter=pgi_flags
3258 elif $_cc 2>&1 | grep -q 'Microsoft.*ARM.*Assembler'; then
3259 _type=armasm
3260 _ident=$($_cc | head -n1)
3261 # 4509: "This form of conditional instruction is deprecated"
3262 _flags="-nologo -ignore 4509"
3263 _flags_filter=armasm_flags
3264 elif $_cc -nologo- 2>&1 | grep -q Microsoft; then
3265 _type=msvc
3266 _ident=$($_cc 2>&1 | head -n1)
3267 _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< 2>&1 | awk '\''/including/ { sub(/^.*file: */, ""); gsub(/\\/, "/"); if (!match($$0, / /)) print "$@:", $$0 }'\'' > $(@:.o=.d)'
3268 _DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -showIncludes -Zs'
3269 _cflags_speed="-O2"
3270 _cflags_size="-O1"
3271 if $_cc -nologo- 2>&1 | grep -q Linker; then
3272 _ld_o='-out:$@'
3273 else
3274 _ld_o='-Fe$@'
3275 fi
3276 _cc_o='-Fo$@'
3277 _cc_e='-P -Fi$@'
3278 _flags_filter=msvc_flags
3279 _ld_lib='lib%.a'
3280 _ld_path='-libpath:'
3281 _flags='-nologo'
3282 elif $_cc 2>&1 | grep -q Intel; then
3283 _type=icl
3284 _ident=$($_cc 2>&1 | head -n1)
3285 _depflags='-QMMD -QMF$(@:.o=.d) -QMT$@'
3286 # Not only is O3 broken on 13.x+ but it is slower on all previous
3287 # versions (tested) as well.
3288 _cflags_speed="-O2"
3289 _cflags_size="-O1 -Oi" # -O1 without -Oi miscompiles stuff
3290 if $_cc 2>&1 | grep -q Linker; then
3291 _ld_o='-out:$@'
3292 else
3293 _ld_o='-Fe$@'
3294 fi
3295 _cc_o='-Fo$@'
3296 _cc_e='-P'
3297 _flags_filter=icl_flags
3298 _ld_lib='lib%.a'
3299 _ld_path='-libpath:'
3300 # -Qdiag-error to make icl error when seeing certain unknown arguments
3301 _flags='-nologo -Qdiag-error:4044,10157'
3302 # -Qvec- -Qsimd- to prevent miscompilation, -GS for consistency
3303 # with MSVC which enables it by default.
3304 _cflags='-Qms0 -Qvec- -Qsimd- -GS'
3305 elif $_cc -? 2>/dev/null | grep -q 'LLVM.*Linker'; then
3306 # lld can emulate multiple different linkers; in ms link.exe mode,
3307 # the -? parameter gives the help output which contains an identifyable
3308 # string, while it gives an error in other modes.
3309 _type=lld-link
3310 # The link.exe mode doesn't have a switch for getting the version,
3311 # but we can force it back to gnu mode and get the version from there.
3312 _ident=$($_cc -flavor gnu --version 2>/dev/null)
3313 _ld_o='-out:$@'
3314 _flags_filter=msvc_flags
3315 _ld_lib='lib%.a'
3316 _ld_path='-libpath:'
3317 elif $_cc --version 2>/dev/null | grep -q ^cparser; then
3318 _type=cparser
3319 _ident=$($_cc --version | head -n1)
3320 _depflags='-MMD'
3321 _cflags_speed='-O4'
3322 _cflags_size='-O2'
3323 _flags_filter=cparser_flags
3324 fi
3325
3326 eval ${pfx}_type=\$_type
3327 eval ${pfx}_ident=\$_ident
3328 }
3329
3330 set_ccvars(){
3331 eval ${1}_C=\${_cc_c-\${${1}_C}}
3332 eval ${1}_E=\${_cc_e-\${${1}_E}}
3333 eval ${1}_O=\${_cc_o-\${${1}_O}}
3334
3335 if [ -n "$_depflags" ]; then
3336 eval ${1}_DEPFLAGS=\$_depflags
3337 else
3338 eval ${1}DEP=\${_DEPCMD:-\$DEPCMD}
3339 eval ${1}DEP_FLAGS=\${_DEPFLAGS:-\$DEPFLAGS}
3340 eval DEP${1}FLAGS=\$_flags
3341 fi
3342 }
3343
3344 probe_cc cc "$cc"
3345 cflags_filter=$_flags_filter
3346 cflags_speed=$_cflags_speed
3347 cflags_size=$_cflags_size
3348 cflags_noopt=$_cflags_noopt
3349 add_cflags $_flags $_cflags
3350 cc_ldflags=$_ldflags
3351 set_ccvars CC
3352
3353 probe_cc hostcc "$host_cc"
3354 host_cflags_filter=$_flags_filter
3355 add_host_cflags $_flags $_cflags
3356 set_ccvars HOSTCC
3357
3358 test -n "$cc_type" && enable $cc_type ||
3359 warn "Unknown C compiler $cc, unable to select optimal CFLAGS"
3360
3361 : ${as_default:=$cc}
3362 : ${objcc_default:=$cc}
3363 : ${dep_cc_default:=$cc}
3364 : ${ld_default:=$cc}
3365 : ${host_ld_default:=$host_cc}
3366 set_default ar as objcc dep_cc ld host_ld
3367
3368 probe_cc as "$as"
3369 asflags_filter=$_flags_filter
3370 add_asflags $_flags $_cflags
3371 set_ccvars AS
3372
3373 probe_cc objcc "$objcc"
3374 objcflags_filter=$_flags_filter
3375 add_objcflags $_flags $_cflags
3376 set_ccvars OBJC
3377
3378 probe_cc ld "$ld"
3379 ldflags_filter=$_flags_filter
3380 add_ldflags $_flags $_ldflags
3381 test "$cc_type" != "$ld_type" && add_ldflags $cc_ldflags
3382 LD_O=${_ld_o-$LD_O}
3383 LD_LIB=${_ld_lib-$LD_LIB}
3384 LD_PATH=${_ld_path-$LD_PATH}
3385
3386 probe_cc hostld "$host_ld"
3387 host_ldflags_filter=$_flags_filter
3388 add_host_ldflags $_flags $_ldflags
3389 HOSTLD_O=${_ld_o-$HOSTLD_O}
3390
3391 if [ -z "$CC_DEPFLAGS" ] && [ "$dep_cc" != "$cc" ]; then
3392 probe_cc depcc "$dep_cc"
3393 CCDEP=${_DEPCMD:-$DEPCMD}
3394 CCDEP_FLAGS=${_DEPFLAGS:=$DEPFLAGS}
3395 DEPCCFLAGS=$_flags
3396 fi
3397
3398 if $ar 2>&1 | grep -q Microsoft; then
3399 arflags="-nologo"
3400 ar_o='-out:$@'
3401 elif $ar 2>&1 | grep -q 'Texas Instruments'; then
3402 arflags="rq"
3403 ar_o='$@'
3404 elif $ar 2>&1 | grep -q 'Usage: ar.*-X.*any'; then
3405 arflags='-Xany -r -c'
3406 ar_o='$@'
3407 else
3408 arflags="rc"
3409 ar_o='$@'
3410 fi
3411
3412 add_cflags $extra_cflags
3413 add_objcflags $extra_objcflags
3414 add_asflags $extra_cflags
3415
3416 if test -n "$sysroot"; then
3417 case "$cc_type" in
3418 gcc|llvm_gcc|clang)
3419 add_cppflags --sysroot="$sysroot"
3420 add_ldflags --sysroot="$sysroot"
3421 ;;
3422 tms470)
3423 add_cppflags -I"$sysinclude"
3424 add_ldflags --sysroot="$sysroot"
3425 ;;
3426 esac
3427 fi
3428
3429 if test "$cpu" = host; then
3430 enabled cross_compile &&
3431 die "--cpu=host makes no sense when cross-compiling."
3432
3433 case "$cc_type" in
3434 gcc|llvm_gcc)
3435 check_native(){
3436 $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
3437 sed -n "/cc1.*$1=/{
3438 s/.*$1=\\([^ ]*\\).*/\\1/
3439 p
3440 q
3441 }" $TMPE
3442 }
3443 cpu=$(check_native -march || check_native -mcpu)
3444 ;;
3445 esac
3446
3447 test "${cpu:-host}" = host &&
3448 die "--cpu=host not supported with compiler $cc"
3449 fi
3450
3451 # Deal with common $arch aliases
3452 case "$arch" in
3453 aarch64|arm64)
3454 arch="aarch64"
3455 ;;
3456 arm*)
3457 arch="arm"
3458 ;;
3459 mips*|IP*)
3460 case "$arch" in
3461 *el)
3462 add_cppflags -EL
3463 add_ldflags -EL
3464 ;;
3465 *eb)
3466 add_cppflags -EB
3467 add_ldflags -EB
3468 ;;
3469 esac
3470 arch="mips"
3471 ;;
3472 parisc*|hppa*)
3473 arch="parisc"
3474 ;;
3475 "Power Macintosh"|ppc*|powerpc*)
3476 arch="ppc"
3477 ;;
3478 s390|s390x)
3479 arch="s390"
3480 ;;
3481 sh4|sh)
3482 arch="sh4"
3483 ;;
3484 sun4u|sparc*)
3485 arch="sparc"
3486 ;;
3487 tilegx|tile-gx)
3488 arch="tilegx"
3489 ;;
3490 i[3-6]86|i86pc|BePC|x86pc|x86_64|amd64)
3491 arch="x86"
3492 ;;
3493 esac
3494
3495 is_in $arch $ARCH_LIST || warn "unknown architecture $arch"
3496 enable $arch
3497
3498 # Add processor-specific flags
3499 if enabled aarch64; then
3500
3501 case $cpu in
3502 armv*)
3503 cpuflags="-march=$cpu"
3504 ;;
3505 *)
3506 cpuflags="-mcpu=$cpu"
3507 ;;
3508 esac
3509
3510 elif enabled alpha; then
3511
3512 cpuflags="-mcpu=$cpu"
3513
3514 elif enabled arm; then
3515
3516 check_arm_arch() {
3517 check_cpp_condition stddef.h \
3518 "defined __ARM_ARCH_${1}__ || defined __TARGET_ARCH_${2:-$1}" \
3519 $cpuflags
3520 }
3521
3522 probe_arm_arch() {
3523 if check_arm_arch 4; then echo armv4
3524 elif check_arm_arch 4T; then echo armv4t
3525 elif check_arm_arch 5; then echo armv5
3526 elif check_arm_arch 5E; then echo armv5e
3527 elif check_arm_arch 5T; then echo armv5t
3528 elif check_arm_arch 5TE; then echo armv5te
3529 elif check_arm_arch 5TEJ; then echo armv5te
3530 elif check_arm_arch 6; then echo armv6
3531 elif check_arm_arch 6J; then echo armv6j
3532 elif check_arm_arch 6K; then echo armv6k
3533 elif check_arm_arch 6Z; then echo armv6z
3534 elif check_arm_arch 6ZK; then echo armv6zk
3535 elif check_arm_arch 6T2; then echo armv6t2
3536 elif check_arm_arch 7; then echo armv7
3537 elif check_arm_arch 7A 7_A; then echo armv7-a
3538 elif check_arm_arch 7S; then echo armv7-a
3539 elif check_arm_arch 7R 7_R; then echo armv7-r
3540 elif check_arm_arch 7M 7_M; then echo armv7-m
3541 elif check_arm_arch 7EM 7E_M; then echo armv7-m
3542 elif check_arm_arch 8A 8_A; then echo armv8-a
3543 fi
3544 }
3545
3546 [ "$cpu" = generic ] && cpu=$(probe_arm_arch)
3547
3548 case $cpu in
3549 armv*)
3550 cpuflags="-march=$cpu"
3551 subarch=$(echo $cpu | sed 's/[^a-z0-9]//g')
3552 ;;
3553 *)
3554 cpuflags="-mcpu=$cpu"
3555 case $cpu in
3556 cortex-a*) subarch=armv7a ;;
3557 cortex-r*) subarch=armv7r ;;
3558 cortex-m*) enable thumb; subarch=armv7m ;;
3559 arm11*) subarch=armv6 ;;
3560 arm[79]*e*|arm9[24]6*|arm96*|arm102[26]) subarch=armv5te ;;
3561 armv4*|arm7*|arm9[24]*) subarch=armv4 ;;
3562 *) subarch=$(probe_arm_arch) ;;
3563 esac
3564 ;;
3565 esac
3566
3567 case "$subarch" in
3568 armv5t*) enable fast_clz ;;
3569 armv[6-8]*) enable fast_clz fast_unaligned ;;
3570 esac
3571
3572 elif enabled avr32; then
3573
3574 case $cpu in
3575 ap7[02]0[0-2])
3576 subarch="avr32_ap"
3577 cpuflags="-mpart=$cpu"
3578 ;;
3579 ap)
3580 subarch="avr32_ap"
3581 cpuflags="-march=$cpu"
3582 ;;
3583 uc3[ab]*)
3584 subarch="avr32_uc"
3585 cpuflags="-mcpu=$cpu"
3586 ;;
3587 uc)
3588 subarch="avr32_uc"
3589 cpuflags="-march=$cpu"
3590 ;;
3591 esac
3592
3593 elif enabled bfin; then
3594
3595 cpuflags="-mcpu=$cpu"
3596
3597 elif enabled mips; then
3598
3599 cpuflags="-march=$cpu"
3600
3601 elif enabled ppc; then
3602
3603 disable ldbrx
3604
3605 case $(tolower $cpu) in
3606 601|ppc601|powerpc601)
3607 cpuflags="-mcpu=601"
3608 disable altivec
3609 ;;
3610 603*|ppc603*|powerpc603*)
3611 cpuflags="-mcpu=603"
3612 disable altivec
3613 ;;
3614 604*|ppc604*|powerpc604*)
3615 cpuflags="-mcpu=604"
3616 disable altivec
3617 ;;
3618 g3|75*|ppc75*|powerpc75*)
3619 cpuflags="-mcpu=750"
3620 disable altivec
3621 ;;
3622 g4|745*|ppc745*|powerpc745*)
3623 cpuflags="-mcpu=7450"
3624 disable vsx
3625 ;;
3626 74*|ppc74*|powerpc74*)
3627 cpuflags="-mcpu=7400"
3628 disable vsx
3629 ;;
3630 g5|970|ppc970|powerpc970)
3631 cpuflags="-mcpu=970"
3632 disable vsx
3633 ;;
3634 power[3-6]*)
3635 cpuflags="-mcpu=$cpu"
3636 disable vsx
3637 ;;
3638 power[7-8]*)
3639 cpuflags="-mcpu=$cpu"
3640 enable ldbrx
3641 ;;
3642 cell)
3643 cpuflags="-mcpu=cell"
3644 enable ldbrx
3645 disable vsx
3646 ;;
3647 e500mc)
3648 cpuflags="-mcpu=e500mc"
3649 disable altivec
3650 ;;
3651 e500v2)
3652 cpuflags="-mcpu=8548 -mhard-float -mfloat-gprs=double"
3653 disable altivec
3654 disable dcbzl
3655 ;;
3656 e500)
3657 cpuflags="-mcpu=8540 -mhard-float"
3658 disable altivec
3659 disable dcbzl
3660 ;;
3661 esac
3662
3663 elif enabled sparc; then
3664
3665 case $cpu in
3666 cypress|f93[04]|tsc701|sparcl*|supersparc|hypersparc|niagara|v[789])
3667 cpuflags="-mcpu=$cpu"
3668 ;;
3669 ultrasparc*|niagara[234])
3670 cpuflags="-mcpu=$cpu"
3671 ;;
3672 esac
3673
3674 elif enabled x86; then
3675
3676 case $cpu in
3677 i[345]86|pentium)
3678 cpuflags="-march=$cpu"
3679 disable i686
3680 disable mmx
3681 ;;
3682 # targets that do NOT support nopl and conditional mov (cmov)
3683 pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
3684 cpuflags="-march=$cpu"
3685 disable i686
3686 ;;
3687 # targets that do support nopl and conditional mov (cmov)
3688 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*)
3689 cpuflags="-march=$cpu"
3690 enable i686
3691 enable fast_cmov
3692 ;;
3693 # targets that do support conditional mov but on which it's slow
3694 pentium4|pentium4m|prescott|nocona)
3695 cpuflags="-march=$cpu"
3696 enable i686
3697 disable fast_cmov
3698 ;;
3699 esac
3700
3701 fi
3702
3703 if [ "$cpu" != generic ]; then
3704 add_cflags $cpuflags
3705 add_asflags $cpuflags
3706 test "$cc_type" = "$ld_type" && add_ldflags $cpuflags
3707 fi
3708
3709 # compiler sanity check
3710 check_exec <<EOF
3711 int main(void){ return 0; }
3712 EOF
3713 if test "$?" != 0; then
3714 echo "$cc is unable to create an executable file."
3715 if test -z "$cross_prefix" && ! enabled cross_compile ; then
3716 echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
3717 echo "Only do this if you know what cross compiling means."
3718 fi
3719 die "C compiler test failed."
3720 fi
3721
3722 add_cppflags -D_ISOC99_SOURCE
3723
3724 # some compilers silently accept -std=c11, so we also need to check that the
3725 # version macro is defined properly
3726 if test_cflags_cpp -std=c11 "__STDC_VERSION__ >= 201112L"; then
3727 add_cflags -std=c11
3728 else
3729 check_cflags -std=c99
3730 fi
3731
3732 check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
3733 #include <stdlib.h>
3734 EOF
3735 check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
3736 #include <stdlib.h>
3737 EOF
3738
3739 add_host_cppflags -D_ISOC99_SOURCE
3740 check_host_cflags -std=c99
3741 check_host_cflags -Wall
3742 check_host_cflags -O3
3743
3744 check_64bit(){
3745 arch32=$1
3746 arch64=$2
3747 expr=$3
3748 check_code cc "" "int test[2*($expr) - 1]" &&
3749 subarch=$arch64 || subarch=$arch32
3750 }
3751
3752 case "$arch" in
3753 aarch64|alpha|ia64)
3754 spic=$shared
3755 ;;
3756 mips)
3757 check_64bit mips mips64 '_MIPS_SIM > 1'
3758 spic=$shared
3759 ;;
3760 parisc)
3761 check_64bit parisc parisc64 'sizeof(void *) > 4'
3762 spic=$shared
3763 ;;
3764 ppc)
3765 check_64bit ppc ppc64 'sizeof(void *) > 4'
3766 spic=$shared
3767 ;;
3768 s390)
3769 check_64bit s390 s390x 'sizeof(void *) > 4'
3770 spic=$shared
3771 ;;
3772 sparc)
3773 check_64bit sparc sparc64 'sizeof(void *) > 4'
3774 spic=$shared
3775 ;;
3776 x86)
3777 check_64bit x86_32 x86_64 'sizeof(void *) > 4'
3778 if test "$subarch" = "x86_64"; then
3779 spic=$shared
3780 fi
3781 ;;
3782 esac
3783
3784 enable $subarch
3785 enabled spic && enable_weak pic
3786
3787 # OS specific
3788 case $target_os in
3789 aix)
3790 SHFLAGS=-shared
3791 add_cppflags '-I\$(SRC_PATH)/compat/aix'
3792 enabled shared && add_ldflags -Wl,-brtl
3793 ;;
3794 android)
3795 disable symver
3796 enable section_data_rel_ro
3797 SLIB_INSTALL_NAME='$(SLIBNAME)'
3798 SLIB_INSTALL_LINKS=
3799 SHFLAGS='-shared -Wl,-soname,$(SLIBNAME)'
3800 ;;
3801 haiku)
3802 prefix_default="/boot/common"
3803 network_extralibs="-lnetwork"
3804 host_libs=
3805 ;;
3806 sunos)
3807 SHFLAGS='-shared -Wl,-h,$$(@F)'
3808 enabled x86 && SHFLAGS="-mimpure-text $SHFLAGS"
3809 network_extralibs="-lsocket -lnsl"
3810 # When using suncc to build, the Solaris linker will mark
3811 # an executable with each instruction set encountered by
3812 # the Solaris assembler. As our libraries contain their own
3813 # guards for processor-specific code, instead suppress
3814 # generation of the HWCAPS ELF section on Solaris x86 only.
3815 enabled_all suncc x86 &&
3816 echo "hwcap_1 = OVERRIDE;" > mapfile &&
3817 add_ldflags -Wl,-M,mapfile
3818 nm_default='nm -P -g'
3819 version_script='-M'
3820 VERSION_SCRIPT_POSTPROCESS_CMD='perl $(SRC_PATH)/compat/solaris/make_sunver.pl - $(OBJS)'
3821 ;;
3822 netbsd)
3823 disable symver
3824 oss_indev_extralibs="-lossaudio"
3825 oss_outdev_extralibs="-lossaudio"
3826 ;;
3827 openbsd|bitrig)
3828 disable symver
3829 SHFLAGS='-shared'
3830 SLIB_INSTALL_NAME='$(SLIBNAME).$(LIBMAJOR).$(LIBMINOR)'
3831 SLIB_INSTALL_LINKS=
3832 oss_indev_extralibs="-lossaudio"
3833 oss_outdev_extralibs="-lossaudio"
3834 ;;
3835 dragonfly)
3836 disable symver
3837 ;;
3838 freebsd)
3839 ;;
3840 bsd/os)
3841 add_extralibs -lpoll -lgnugetopt
3842 ;;
3843 darwin)
3844 enabled ppc && add_asflags -force_cpusubtype_ALL
3845 SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR)'
3846 enabled x86_32 && append SHFLAGS -Wl,-read_only_relocs,suppress
3847 add_ldflags -Wl,-dynamic,-search_paths_first
3848 SLIBSUF=".dylib"
3849 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME).$(LIBVERSION)$(SLIBSUF)'
3850 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(NAME).$(LIBMAJOR)$(SLIBSUF)'
3851 objformat="macho"
3852 enabled x86_64 && objformat="macho64"
3853 enabled_any pic shared ||
3854 { check_cflags -mdynamic-no-pic && add_asflags -mdynamic-no-pic; }
3855 check_header dispatch/dispatch.h &&
3856 add_cppflags '-I\$(SRC_PATH)/compat/dispatch_semaphore'
3857 ;;
3858 msys*)
3859 die "Native MSYS builds are discouraged, please use the MINGW environment."
3860 ;;
3861 mingw32*|mingw64*)
3862 if test $target_os = "mingw32ce"; then
3863 disable network
3864 else
3865 target_os=mingw32
3866 fi
3867 LIBTARGET=i386
3868 if enabled x86_64; then
3869 LIBTARGET="i386:x86-64"
3870 elif enabled arm; then
3871 LIBTARGET=arm-wince
3872 fi
3873 check_ldflags -Wl,--nxcompat
3874 check_ldflags -Wl,--dynamicbase
3875 shlibdir_default="$bindir_default"
3876 SLIBPREF=""
3877 SLIBSUF=".dll"
3878 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
3879 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(NAME)-$(LIBMAJOR)$(SLIBSUF)'
3880 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)'
3881 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
3882 SLIB_INSTALL_LINKS=
3883 SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
3884 SLIB_INSTALL_EXTRA_LIB='lib$(SLIBNAME:$(SLIBSUF)=.dll.a) $(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
3885 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'
3886 objformat="win32"
3887 dlltool="${cross_prefix}dlltool"
3888 ranlib=:
3889 enable dos_paths
3890 ;;
3891 win32|win64)
3892 disable symver
3893 if enabled shared; then
3894 # Link to the import library instead of the normal static library
3895 # for shared libs.
3896 LD_LIB='%.lib'
3897 # Cannot build both shared and static libs with MSVC or icl.
3898 disable static
3899 fi
3900 shlibdir_default="$bindir_default"
3901 SLIBPREF=""
3902 SLIBSUF=".dll"
3903 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
3904 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(NAME)-$(LIBMAJOR)$(SLIBSUF)'
3905 SLIB_CREATE_DEF_CMD='$(SRC_PATH)/compat/windows/makedef $(SUBDIR)lib$(NAME).ver $(OBJS) > $$(@:$(SLIBSUF)=.def)'
3906 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
3907 SLIB_INSTALL_LINKS=
3908 SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
3909 SLIB_INSTALL_EXTRA_LIB='$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
3910 SHFLAGS='-dll -def:$$(@:$(SLIBSUF)=.def) -implib:$(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib)'
3911 objformat="win32"
3912 ranlib=:
3913 enable dos_paths
3914 ;;
3915 cygwin*)
3916 target_os=cygwin
3917 shlibdir_default="$bindir_default"
3918 SLIBPREF="cyg"
3919 SLIBSUF=".dll"
3920 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
3921 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(NAME)-$(LIBMAJOR)$(SLIBSUF)'
3922 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
3923 SLIB_INSTALL_LINKS=
3924 SLIB_INSTALL_EXTRA_LIB='lib$(NAME).dll.a'
3925 SHFLAGS='-shared -Wl,--out-implib,$(SUBDIR)lib$(NAME).dll.a'
3926 objformat="win32"
3927 enable dos_paths
3928 ;;
3929 *-dos|freedos|opendos)
3930 network_extralibs="-lsocket"
3931 objformat="coff"
3932 enable dos_paths
3933 add_cppflags -U__STRICT_ANSI__
3934 ;;
3935 linux)
3936 enable dv1394
3937 enable section_data_rel_ro
3938 ;;
3939 irix*)
3940 target_os=irix
3941 ranlib="echo ignoring ranlib"
3942 ;;
3943 os/2*)
3944 ln_s="cp -f"
3945 objformat="aout"
3946 add_cppflags -D_GNU_SOURCE
3947 add_ldflags -Zomf -Zbin-files -Zargs-wild -Zmap
3948 SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
3949 LIBSUF="_s.a"
3950 SLIBPREF=""
3951 SLIBSUF=".dll"
3952 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
3953 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
3954 SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
3955 echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
3956 echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
3957 echo EXPORTS >> $(SUBDIR)$(NAME).def; \
3958 emxexp $(OBJS) >> $(SUBDIR)$(NAME).def'
3959 SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
3960 emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
3961 SLIB_INSTALL_EXTRA_LIB='$(LIBPREF)$(NAME)_dll.a $(LIBPREF)$(NAME)_dll.lib'
3962 enable dos_paths
3963 ;;
3964 gnu/kfreebsd)
3965 add_cppflags -D_BSD_SOURCE
3966 ;;
3967 gnu)
3968 ;;
3969 qnx)
3970 add_cppflags -D_QNX_SOURCE
3971 network_extralibs="-lsocket"
3972 ;;
3973 symbian)
3974 SLIBSUF=".dll"
3975 enable dos_paths
3976 add_cflags --include=$sysinclude/gcce/gcce.h -fvisibility=default
3977 add_cppflags -D__GCCE__ -D__SYMBIAN32__ -DSYMBIAN_OE_POSIX_SIGNALS
3978 add_ldflags -Wl,--target1-abs,--no-undefined \
3979 -Wl,-Ttext,0x80000,-Tdata,0x1000000 -shared \
3980 -Wl,--entry=_E32Startup -Wl,-u,_E32Startup
3981 add_extralibs -l:eexe.lib -l:usrt2_2.lib -l:dfpaeabi.dso \
3982 -l:drtaeabi.dso -l:scppnwdl.dso -lsupc++ -lgcc \
3983 -l:libc.dso -l:libm.dso -l:euser.dso -l:libcrt0.lib
3984 ;;
3985 osf1)
3986 add_cppflags -D_OSF_SOURCE -D_POSIX_PII -D_REENTRANT
3987 ;;
3988 minix)
3989 ;;
3990 none)
3991 ;;
3992 *)
3993 die "Unknown OS '$target_os'."
3994 ;;
3995 esac
3996
3997 # determine libc flavour
3998
3999 probe_libc(){
4000 pfx=$1
4001 pfx_no_=${pfx%_}
4002 # uclibc defines __GLIBC__, so it needs to be checked before glibc.
4003 if check_${pfx}cpp_condition features.h "defined __UCLIBC__"; then
4004 eval ${pfx}libc_type=uclibc
4005 add_${pfx}cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
4006 elif check_${pfx}cpp_condition features.h "defined __GLIBC__"; then
4007 eval ${pfx}libc_type=glibc
4008 add_${pfx}cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
4009 # MinGW headers can be installed on Cygwin, so check for newlib first.
4010 elif check_${pfx}cpp_condition newlib.h "defined _NEWLIB_VERSION"; then
4011 eval ${pfx}libc_type=newlib
4012 add_${pfx}cppflags -U__STRICT_ANSI__
4013 # MinGW64 is backwards compatible with MinGW32, so check for it first.
4014 elif check_${pfx}cpp_condition _mingw.h "defined __MINGW64_VERSION_MAJOR"; then
4015 eval ${pfx}libc_type=mingw64
4016 add_${pfx}cppflags -U__STRICT_ANSI__ -D__USE_MINGW_ANSI_STDIO=1
4017 eval test \$${pfx_no_}cc_type = "gcc" &&
4018 add_${pfx}cppflags -D__printf__=__gnu_printf__
4019 elif check_${pfx}cpp_condition _mingw.h "defined __MINGW_VERSION" ||
4020 check_${pfx}cpp_condition _mingw.h "defined __MINGW32_VERSION"; then
4021 eval ${pfx}libc_type=mingw32
4022 check_${pfx}cpp_condition _mingw.h "__MINGW32_MAJOR_VERSION > 3 || \
4023 (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
4024 die "ERROR: MinGW32 runtime version must be >= 3.15."
4025 add_${pfx}cppflags -U__STRICT_ANSI__ -D__USE_MINGW_ANSI_STDIO=1
4026 check_${pfx}cpp_condition _mingw.h "__MSVCRT_VERSION__ < 0x0700__" &&
4027 add_${pfx}cppflags -D__MSVCRT_VERSION__=0x0700
4028 eval test \$${pfx_no_}cc_type = "gcc" &&
4029 add_${pfx}cppflags -D__printf__=__gnu_printf__
4030 elif check_${pfx}cpp_condition crtversion.h "defined _VC_CRT_MAJOR_VERSION"; then
4031 eval ${pfx}libc_type=msvcrt
4032 if check_${pfx}cpp_condition crtversion.h "_VC_CRT_MAJOR_VERSION < 14"; then
4033 if [ "$pfx" = host_ ]; then
4034 add_host_cppflags -Dsnprintf=_snprintf
4035 else
4036 add_compat strtod.o strtod=avpriv_strtod
4037 add_compat msvcrt/snprintf.o snprintf=avpriv_snprintf \
4038 _snprintf=avpriv_snprintf \
4039 vsnprintf=avpriv_vsnprintf
4040 fi
4041 fi
4042 add_${pfx}cppflags -D_USE_MATH_DEFINES -D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_WARNINGS
4043 # The MSVC 2010 headers (Win 7.0 SDK) set _WIN32_WINNT to
4044 # 0x601 by default unless something else is set by the user.
4045 # This can easily lead to us detecting functions only present
4046 # in such new versions and producing binaries requiring windows 7.0.
4047 # Therefore explicitly set the default to XP unless the user has
4048 # set something else on the command line.
4049 # Don't do this if WINAPI_FAMILY is set and is set to a non-desktop
4050 # family. For these cases, configure is free to use any functions
4051 # found in the SDK headers by default. (Alternatively, we could force
4052 # _WIN32_WINNT to 0x0602 in that case.)
4053 check_${pfx}cpp_condition stdlib.h "defined(_WIN32_WINNT)" ||
4054 { check_${pfx}cpp <<EOF && add_${pfx}cppflags -D_WIN32_WINNT=0x0502; }
4055 #ifdef WINAPI_FAMILY
4056 #include <winapifamily.h>
4057 #if !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
4058 #error not desktop
4059 #endif
4060 #endif
4061 EOF
4062 if [ "$pfx" = "" ]; then
4063 check_func strtoll || add_cflags -Dstrtoll=_strtoi64
4064 fi
4065 elif check_${pfx}cpp_condition stddef.h "defined __KLIBC__"; then
4066 eval ${pfx}libc_type=klibc
4067 elif check_${pfx}cpp_condition sys/cdefs.h "defined __BIONIC__"; then
4068 eval ${pfx}libc_type=bionic
4069 elif check_${pfx}cpp_condition sys/brand.h "defined LABELED_BRAND_NAME"; then
4070 eval ${pfx}libc_type=solaris
4071 add_${pfx}cppflags -D__EXTENSIONS__ -D_XOPEN_SOURCE=600
4072 else
4073 eval ${pfx}libc_type=default
4074 add_${pfx}cppflags -D_DEFAULT_SOURCE
4075 fi
4076 }
4077
4078 probe_libc
4079 test -n "$libc_type" && enable libc_$libc_type
4080 probe_libc host_
4081 test -n "$host_libc_type" && enable host_libc_$host_libc_type
4082
4083 case $libc_type in
4084 bionic)
4085 add_compat strtod.o strtod=avpriv_strtod
4086 ;;
4087 esac
4088
4089 # hacks for compiler/libc/os combinations
4090
4091 if enabled_all tms470 libc_glibc; then
4092 CPPFLAGS="-I${source_path}/compat/tms470 ${CPPFLAGS}"
4093 add_cppflags -D__USER_LABEL_PREFIX__=
4094 add_cppflags -D__builtin_memset=memset
4095 add_cppflags -D__gnuc_va_list=va_list -D_VA_LIST_DEFINED
4096 add_cflags -pds=48 # incompatible redefinition of macro
4097 fi
4098
4099 if enabled_all ccc libc_glibc; then
4100 add_ldflags -Wl,-z,now # calls to libots crash without this
4101 fi
4102
4103 check_compile_assert flt_lim "float.h limits.h" "DBL_MAX == (double)DBL_MAX" ||
4104 add_cppflags '-I\$(SRC_PATH)/compat/float'
4105
4106 esc(){
4107 echo "$*" | sed 's/%/%25/g;s/:/%3a/g'
4108 }
4109
4110 echo "config:$arch:$subarch:$cpu:$target_os:$(esc $cc_ident):$(esc $LIBAV_CONFIGURATION)" >config.fate
4111
4112 check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable_weak pic
4113
4114 set_default $PATHS_LIST
4115 set_default nm
4116
4117 # we need to build at least one lib type
4118 if ! enabled_any static shared; then
4119 cat <<EOF
4120 At least one library type must be built.
4121 Specify --enable-static to build the static libraries or --enable-shared to
4122 build the shared libraries as well. To only build the shared libraries specify
4123 --disable-static in addition to --enable-shared.
4124 EOF
4125 exit 1
4126 fi
4127
4128 disabled optimizations || check_cflags -fomit-frame-pointer
4129
4130 enable_weak_pic() {
4131 disabled pic && return
4132 enable pic
4133 add_cppflags -DPIC
4134 case "$target_os" in
4135 mingw*|cygwin*)
4136 ;;
4137 *)
4138 add_cflags -fPIC
4139 ;;
4140 esac
4141 add_asflags -fPIC
4142 }
4143
4144 enabled pic && enable_weak_pic
4145
4146 check_cc <<EOF || die "Symbol mangling check failed."
4147 int ff_extern;
4148 EOF
4149 sym=$($nm $TMPO | awk '/ff_extern/{ print substr($0, match($0, /[^ \t]*ff_extern/)) }')
4150 extern_prefix=${sym%%ff_extern*}
4151
4152 check_cc <<EOF && enable_weak inline_asm
4153 void foo(void) { __asm__ volatile ("" ::); }
4154 EOF
4155
4156 _restrict=
4157 for restrict_keyword in restrict __restrict__ __restrict; do
4158 check_cc <<EOF && _restrict=$restrict_keyword && break
4159 void foo(char * $restrict_keyword p);
4160 EOF
4161 done
4162
4163 check_cc <<EOF && enable pragma_deprecated
4164 void foo(void) { _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") }
4165 EOF
4166
4167 check_cc <<EOF && enable attribute_packed
4168 struct { int x; } __attribute__((packed)) x;
4169 EOF
4170
4171 check_cc <<EOF && enable attribute_may_alias
4172 union { int x; } __attribute__((may_alias)) x;
4173 EOF
4174
4175 check_cc <<EOF || die "endian test failed"
4176 unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
4177 EOF
4178 od -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
4179
4180 check_gas() {
4181 log "check_gas using '$as' as AS"
4182 # :vararg is used on aarch64, arm and ppc altivec
4183 check_as <<EOF || return 1
4184 .macro m n, y:vararg=0
4185 \n: .int \y
4186 .endm
4187 m x
4188 EOF
4189 # .altmacro is only used in arm asm
4190 ! enabled arm || check_as <<EOF || return 1
4191 .altmacro
4192 EOF
4193 enable gnu_as
4194 return 0
4195 }
4196
4197 if enabled_any arm aarch64 || enabled_all ppc altivec && enabled asm; then
4198 nogas=:
4199 enabled_any arm aarch64 && nogas=die
4200 enabled_all ppc altivec && nogas=warn
4201 as_noop=-v
4202
4203 case $as_type in
4204 arm*) gaspp_as_type=armasm; as_noop=-h ;;
4205 gcc) gaspp_as_type=gas ;;
4206 *) gaspp_as_type=$as_type ;;
4207 esac
4208
4209 [ $target_os = "darwin" ] && gaspp_as_type="apple-$gaspp_as_type"
4210
4211 check_cmd gas-preprocessor.pl -arch $arch -as-type $gaspp_as_type -- $as $as_noop &&
4212 gas="gas-preprocessor.pl -arch $arch -as-type $gaspp_as_type -- $as"
4213
4214 if ! check_gas ; then
4215 as=${gas:=$as}
4216 check_gas || \
4217 $nogas "GNU assembler not found, install/update gas-preprocessor"
4218 fi
4219
4220 check_as <<EOF && enable as_func
4221 .func test
4222 .endfunc
4223 EOF
4224 fi
4225
4226 check_inline_asm inline_asm_labels '"1:\n"'
4227
4228 if enabled aarch64; then
4229 enabled armv8 && check_insn armv8 'prfm pldl1strm, [x0]'
4230 # internal assembler in clang 3.3 does not support this instruction
4231 enabled neon && check_insn neon 'ext v0.8B, v0.8B, v1.8B, #1'
4232 enabled vfp && check_insn vfp 'fmadd d0, d0, d1, d2'
4233
4234 map 'enabled_any ${v}_external ${v}_inline || disable $v' $ARCH_EXT_LIST_ARM
4235
4236 elif enabled alpha; then
4237
4238 check_cflags -mieee
4239
4240 elif enabled arm; then
4241
4242 enabled msvc && check_cpp_condition stddef.h "defined _M_ARMT" && enable thumb
4243 check_cpp_condition stddef.h "defined __thumb__" && enable_weak thumb
4244 enabled thumb && check_cflags -mthumb || check_cflags -marm
4245
4246 if check_cpp_condition stddef.h "defined __ARM_PCS_VFP"; then
4247 enable vfp_args
4248 elif check_cpp_condition stddef.h "defined _M_ARM_FP && _M_ARM_FP >= 30"; then
4249 enable vfp_args
4250 elif ! check_cpp_condition stddef.h "defined __ARM_PCS || defined __SOFTFP__" && [ $target_os != darwin ]; then
4251 case "${cross_prefix:-$cc}" in
4252 *hardfloat*) enable vfp_args; fpabi=vfp ;;
4253 *) check_ld <<EOF && enable vfp_args && fpabi=vfp || fpabi=soft ;;
4254 __asm__ (".eabi_attribute 28, 1");
4255 int main(void) { return 0; }
4256 EOF
4257 esac
4258 warn "Compiler does not indicate floating-point ABI, guessing $fpabi."
4259 fi
4260
4261 enabled armv5te && check_insn armv5te 'qadd r0, r0, r0'
4262 enabled armv6 && check_insn armv6 'sadd16 r0, r0, r0'
4263 enabled armv6t2 && check_insn armv6t2 'movt r0, #0'
4264 enabled neon && check_insn neon 'vadd.i16 q0, q0, q0'
4265 enabled vfp && check_insn vfp 'fadds s0, s0, s0'
4266 enabled vfpv3 && check_insn vfpv3 'vmov.f32 s0, #1.0'
4267
4268 [ $target_os = linux ] || [ $target_os = android ] ||
4269 map 'enabled_any ${v}_external ${v}_inline || disable $v' \
4270 $ARCH_EXT_LIST_ARM
4271
4272 check_inline_asm asm_mod_q '"add r0, %Q0, %R0" :: "r"((long long)0)'
4273
4274 check_as <<EOF && enable as_dn_directive
4275 ra .dn d0.i16
4276 .unreq ra
4277 EOF
4278 check_as <<EOF && enable as_fpu_directive
4279 .fpu neon
4280 EOF
4281
4282 # llvm's integrated assembler supports .object_arch from llvm 3.5
4283 [ "$objformat" = elf ] && check_as <<EOF && enable as_object_arch
4284 .object_arch armv4
4285 EOF
4286
4287 [ $target_os != win32 ] && enabled_all armv6t2 shared !pic && enable_weak_pic
4288
4289 elif enabled mips; then
4290
4291 check_inline_asm loongson '"dmult.g $1, $2, $3"'
4292
4293 # make sure that only an instruction set is enabled
4294 disable mips64r6 mips32r6 mips64r2 mips32r2 mips64r1 mips32r1
4295
4296 if enabled mips64; then
4297 check_inline_asm mips64r6 '"dlsa $0, $0, $0, 1"' ||
4298 check_inline_asm mips64r2 '"dext $0, $0, 0, 1"' ||
4299 check_inline_asm mips64r1 '"daddi $0, $0, 0"'
4300 else
4301 check_inline_asm mips32r6 '"aui $0, $0, 0"' ||
4302 check_inline_asm mips32r2 '"ext $0, $0, 0, 1"' ||
4303 check_inline_asm mips32r1 '"addi $0, $0, 0"'
4304 fi
4305
4306 elif enabled parisc; then
4307
4308 if enabled gcc; then
4309 case $($cc -dumpversion) in
4310 4.[3-8].*) check_cflags -fno-optimize-sibling-calls ;;
4311 esac
4312 fi
4313
4314 elif enabled ppc; then
4315
4316 enable local_aligned_8 local_aligned_16 local_aligned_32
4317
4318 check_inline_asm dcbzl '"dcbzl 0, %0" :: "r"(0)'
4319 check_inline_asm ibm_asm '"add 0, 0, 0"'
4320 check_inline_asm ppc4xx '"maclhw r10, r11, r12"'
4321 check_inline_asm xform_asm '"lwzx %1, %y0" :: "Z"(*(int*)0), "r"(0)'
4322
4323 # AltiVec flags: The FSF version of GCC differs from the Apple version
4324 if enabled altivec; then
4325 check_cflags -maltivec -mabi=altivec &&
4326 { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
4327 check_cflags -faltivec
4328
4329 # check if our compiler supports Motorola AltiVec C API
4330 check_cc <<EOF || disable altivec
4331 $inc_altivec_h
4332 int main(void) {
4333 vector signed int v1 = (vector signed int) { 0 };
4334 vector signed int v2 = (vector signed int) { 1 };
4335 v1 = vec_add(v1, v2);
4336 return 0;
4337 }
4338 EOF
4339
4340 enabled altivec || warn "Altivec disabled, possibly missing --cpu flag"
4341 fi
4342
4343 if enabled vsx; then
4344 check_cflags -mvsx &&
4345 check_builtin vec_vsx_ld "altivec.h" "__builtin_vec_vsx_ld" || disable vsx
4346 fi
4347
4348 if enabled power8; then
4349 check_cpp_condition "altivec.h" "defined(_ARCH_PWR8)" || disable power8
4350 fi
4351
4352 elif enabled x86; then
4353
4354 check_builtin rdtsc intrin.h "__rdtsc()"
4355 check_builtin mm_empty mmintrin.h "_mm_empty()"
4356
4357 enable local_aligned_8 local_aligned_16 local_aligned_32
4358
4359 # check whether EBP is available on x86
4360 # As 'i' is stored on the stack, this program will crash
4361 # if the base pointer is used to access it because the
4362 # base pointer is cleared in the inline assembly code.
4363 check_exec_crash <<EOF && enable ebp_available
4364 volatile int i=0;
4365 __asm__ volatile ("xorl %%ebp, %%ebp" ::: "%ebp");
4366 return i;
4367 EOF
4368
4369 # check whether EBX is available on x86
4370 check_inline_asm ebx_available '""::"b"(0)' &&
4371 check_inline_asm ebx_available '"":::"%ebx"'
4372
4373 # check whether xmm clobbers are supported
4374 check_inline_asm xmm_clobbers '"":::"%xmm0"'
4375
4376 # check whether binutils is new enough to compile SSSE3/MMXEXT
4377 enabled ssse3 && check_inline_asm ssse3_inline '"pabsw %xmm0, %xmm0"'
4378 enabled mmxext && check_inline_asm mmxext_inline '"pmaxub %mm0, %mm1"'
4379
4380 if ! disabled_any asm mmx yasm; then
4381 if check_cmd $yasmexe --version; then
4382 enabled x86_64 && yasm_extra="-m amd64"
4383 yasm_debug="-g dwarf2"
4384 elif check_cmd nasm -v; then
4385 yasmexe=nasm
4386 yasm_debug="-g -F dwarf"
4387 enabled x86_64 && test "$objformat" = elf && objformat=elf64
4388 fi
4389
4390 YASMFLAGS="-f $objformat $yasm_extra"
4391 enabled pic && append YASMFLAGS "-DPIC"
4392 test -n "$extern_prefix" && append YASMFLAGS "-DPREFIX"
4393 case "$objformat" in
4394 elf*) enabled debug && append YASMFLAGS $yasm_debug ;;