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