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