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