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