d87871eadda04aa77ed80cac21792f293cd92427
[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 $host_cppflags $host_cflags "$@" $(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_cppflags -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2
2557 add_cflags -fno-strict-overflow -fstack-protector-all
2558 add_ldflags -Wl,-z,relro -Wl,-z,now
2559 ;;
2560 ?*)
2561 die "Unknown toolchain $toolchain"
2562 ;;
2563 esac
2564
2565 set_default arch cc pkg_config sysinclude target_exec target_os
2566 enabled cross_compile || host_cc_default=$cc
2567 set_default host_cc
2568
2569 if ! $pkg_config --version >/dev/null 2>&1; then
2570 warn "$pkg_config not found, library detection may fail."
2571 pkg_config=false
2572 fi
2573
2574 exesuf() {
2575 case $1 in
2576 mingw32*|win32|win64|cygwin*|*-dos|freedos|opendos|os/2*|symbian) echo .exe ;;
2577 esac
2578 }
2579
2580 EXESUF=$(exesuf $target_os)
2581 HOSTEXESUF=$(exesuf $host_os)
2582
2583 # set temporary file name
2584 : ${TMPDIR:=$TEMPDIR}
2585 : ${TMPDIR:=$TMP}
2586 : ${TMPDIR:=/tmp}
2587
2588 if ! check_cmd mktemp -u XXXXXX; then
2589 # simple replacement for missing mktemp
2590 # NOT SAFE FOR GENERAL USE
2591 mktemp(){
2592 echo "${2%%XXX*}.${HOSTNAME}.${UID}.$$"
2593 }
2594 fi
2595
2596 tmpfile(){
2597 tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
2598 (set -C; exec > $tmp) 2>/dev/null ||
2599 die "Unable to create temporary file in $TMPDIR."
2600 append TMPFILES $tmp
2601 eval $1=$tmp
2602 }
2603
2604 trap 'rm -f -- $TMPFILES' EXIT
2605
2606 tmpfile TMPASM .asm
2607 tmpfile TMPC .c
2608 tmpfile TMPE $EXESUF
2609 tmpfile TMPH .h
2610 tmpfile TMPO .o
2611 tmpfile TMPS .S
2612 tmpfile TMPSH .sh
2613 tmpfile TMPV .ver
2614
2615 unset -f mktemp
2616
2617 chmod +x $TMPE
2618
2619 # make sure we can execute files in $TMPDIR
2620 cat > $TMPSH 2>> $logfile <<EOF
2621 #! /bin/sh
2622 EOF
2623 chmod +x $TMPSH >> $logfile 2>&1
2624 if ! $TMPSH >> $logfile 2>&1; then
2625 cat <<EOF
2626 Unable to create and execute files in $TMPDIR. Set the TMPDIR environment
2627 variable to another directory and make sure that it is not mounted noexec.
2628 EOF
2629 die "Sanity test failed."
2630 fi
2631
2632 armasm_flags(){
2633 for flag; do
2634 case $flag in
2635 # Filter out MSVC cl.exe options from cflags that shouldn't
2636 # be passed to gas-preprocessor
2637 -M[TD]*) ;;
2638 *) echo $flag ;;
2639 esac
2640 done
2641 }
2642
2643 ccc_flags(){
2644 for flag; do
2645 case $flag in
2646 -std=c99) echo -c99 ;;
2647 -mcpu=*) echo -arch ${flag#*=} ;;
2648 -mieee) echo -ieee ;;
2649 -O*|-fast) echo $flag ;;
2650 -fno-math-errno) echo -assume nomath_errno ;;
2651 -g) echo -g3 ;;
2652 -Wall) echo -msg_enable level2 ;;
2653 -Wno-pointer-sign) echo -msg_disable ptrmismatch1 ;;
2654 -Wl,*) echo $flag ;;
2655 -f*|-W*) ;;
2656 *) echo $flag ;;
2657 esac
2658 done
2659 }
2660
2661 cparser_flags(){
2662 for flag; do
2663 case $flag in
2664 -Wno-switch) echo -Wno-switch-enum ;;
2665 -Wno-format-zero-length) ;;
2666 -Wdisabled-optimization) ;;
2667 -Wno-pointer-sign) echo -Wno-other ;;
2668 *) echo $flag ;;
2669 esac
2670 done
2671 }
2672
2673 msvc_common_flags(){
2674 for flag; do
2675 case $flag in
2676 # In addition to specifying certain flags under the compiler
2677 # specific filters, they must be specified here as well or else the
2678 # generic catch all at the bottom will print the original flag.
2679 -Wall) ;;
2680 -std=c99) ;;
2681 # Common flags
2682 -fomit-frame-pointer) ;;
2683 -g) echo -Z7 ;;
2684 -fno-math-errno) ;;
2685 -fno-common) ;;
2686 -fno-signed-zeros) ;;
2687 -fPIC) ;;
2688 -mthumb) ;;
2689 -march=*) ;;
2690 -lz) echo zlib.lib ;;
2691 -lavifil32) echo vfw32.lib ;;
2692 -lavicap32) echo vfw32.lib user32.lib ;;
2693 -l*) echo ${flag#-l}.lib ;;
2694 *) echo $flag ;;
2695 esac
2696 done
2697 }
2698
2699 msvc_flags(){
2700 msvc_common_flags "$@"
2701 for flag; do
2702 case $flag in
2703 -Wall) echo -W4 -wd4244 -wd4127 -wd4018 -wd4389 \
2704 -wd4146 -wd4057 -wd4204 -wd4706 -wd4305 \
2705 -wd4152 -wd4324 -we4013 -wd4100 -wd4214 \
2706 -wd4273 -wd4701 ;;
2707 esac
2708 done
2709 }
2710
2711 icl_flags(){
2712 msvc_common_flags "$@"
2713 for flag; do
2714 case $flag in
2715 # Despite what Intel's documentation says -Wall, which is supported
2716 # on Windows, does enable remarks so disable them here.
2717 -Wall) echo $flag -Qdiag-disable:remark ;;
2718 -std=c99) echo -Qstd=c99 ;;
2719 esac
2720 done
2721 }
2722
2723 pgi_flags(){
2724 for flag; do
2725 case $flag in
2726 -flto) echo -Mipa=fast,libopt,libinline,vestigial ;;
2727 -fomit-frame-pointer) echo -Mnoframe ;;
2728 -g) echo -gopt ;;
2729 *) echo $flag ;;
2730 esac
2731 done
2732 }
2733
2734 suncc_flags(){
2735 for flag; do
2736 case $flag in
2737 -march=*|-mcpu=*)
2738 case "${flag#*=}" in
2739 native) echo -xtarget=native ;;
2740 v9|niagara) echo -xarch=sparc ;;
2741 ultrasparc) echo -xarch=sparcvis ;;
2742 ultrasparc3|niagara2) echo -xarch=sparcvis2 ;;
2743 i586|pentium) echo -xchip=pentium ;;
2744 i686|pentiumpro|pentium2) echo -xtarget=pentium_pro ;;
2745 pentium3*|c3-2) echo -xtarget=pentium3 ;;
2746 pentium-m) echo -xarch=sse2 -xchip=pentium3 ;;
2747 pentium4*) echo -xtarget=pentium4 ;;
2748 prescott|nocona) echo -xarch=sse3 -xchip=pentium4 ;;
2749 *-sse3) echo -xarch=sse3 ;;
2750 core2) echo -xarch=ssse3 -xchip=core2 ;;
2751 corei7) echo -xarch=sse4_2 -xchip=nehalem ;;
2752 corei7-avx) echo -xarch=avx -xchip=sandybridge ;;
2753 amdfam10|barcelona|bdver*) echo -xarch=sse4_1 ;;
2754 athlon-4|athlon-[mx]p) echo -xarch=ssea ;;
2755 k8|opteron|athlon64|athlon-fx)
2756 echo -xarch=sse2a ;;
2757 athlon*) echo -xarch=pentium_proa ;;
2758 esac
2759 ;;
2760 -std=c99) echo -xc99 ;;
2761 -fomit-frame-pointer) echo -xregs=frameptr ;;
2762 -fPIC) echo -KPIC -xcode=pic32 ;;
2763 -W*,*) echo $flag ;;
2764 -f*-*|-W*|-mimpure-text) ;;
2765 -shared) echo -G ;;
2766 *) echo $flag ;;
2767 esac
2768 done
2769 }
2770
2771 tms470_flags(){
2772 for flag; do
2773 case $flag in
2774 -march=*|-mcpu=*)
2775 case "${flag#*=}" in
2776 armv7-a|cortex-a*) echo -mv=7a8 ;;
2777 armv7-r|cortex-r*) echo -mv=7r4 ;;
2778 armv7-m|cortex-m*) echo -mv=7m3 ;;
2779 armv6*|arm11*) echo -mv=6 ;;
2780 armv5*e|arm[79]*e*|arm9[24]6*|arm96*|arm102[26])
2781 echo -mv=5e ;;
2782 armv4*|arm7*|arm9[24]*) echo -mv=4 ;;
2783 esac
2784 ;;
2785 -mfpu=neon) echo --float_support=vfpv3 --neon ;;
2786 -mfpu=vfp) echo --float_support=vfpv2 ;;
2787 -mfpu=vfpv3) echo --float_support=vfpv3 ;;
2788 -mfpu=vfpv3-d16) echo --float_support=vfpv3d16 ;;
2789 -msoft-float) echo --float_support=vfplib ;;
2790 -O[0-3]|-mf=*) echo $flag ;;
2791 -g) echo -g -mn ;;
2792 -pds=*) echo $flag ;;
2793 -D*|-I*) echo $flag ;;
2794 --gcc|--abi=*) echo $flag ;;
2795 -me) echo $flag ;;
2796 esac
2797 done
2798 }
2799
2800 probe_cc(){
2801 pfx=$1
2802 _cc=$2
2803
2804 unset _type _ident _cc_c _cc_e _cc_o _flags _cflags
2805 unset _ld_o _ldflags _ld_lib _ld_path
2806 unset _depflags _DEPCMD _DEPFLAGS
2807 _flags_filter=echo
2808
2809 if $_cc -v 2>&1 | grep -q '^gcc.*LLVM'; then
2810 _type=llvm_gcc
2811 gcc_extra_ver=$(expr "$($_cc --version | head -n1)" : '.*\((.*)\)')
2812 _ident="llvm-gcc $($_cc -dumpversion) $gcc_extra_ver"
2813 _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2814 _cflags_speed='-O3'
2815 _cflags_size='-Os'
2816 elif $_cc -v 2>&1 | grep -qi ^gcc; then
2817 _type=gcc
2818 gcc_version=$($_cc --version | head -n1)
2819 gcc_basever=$($_cc -dumpversion)
2820 gcc_pkg_ver=$(expr "$gcc_version" : '[^ ]* \(([^)]*)\)')
2821 gcc_ext_ver=$(expr "$gcc_version" : ".*$gcc_pkg_ver $gcc_basever \\(.*\\)")
2822 _ident=$(cleanws "gcc $gcc_basever $gcc_pkg_ver $gcc_ext_ver")
2823 if ! $_cc -dumpversion | grep -q '^2\.'; then
2824 _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2825 fi
2826 _cflags_speed='-O3'
2827 _cflags_size='-Os'
2828 elif $_cc --version 2>/dev/null | grep -q ^icc; then
2829 _type=icc
2830 _ident=$($_cc --version | head -n1)
2831 _depflags='-MMD'
2832 _cflags_speed='-O3'
2833 _cflags_size='-Os'
2834 _cflags_noopt='-O1'
2835 elif $_cc -v 2>&1 | grep -q xlc; then
2836 _type=xlc
2837 _ident=$($_cc -qversion 2>/dev/null | head -n1)
2838 _cflags_speed='-O5'
2839 _cflags_size='-O5 -qcompact'
2840 elif $_cc -V 2>/dev/null | grep -q Compaq; then
2841 _type=ccc
2842 _ident=$($_cc -V | head -n1 | cut -d' ' -f1-3)
2843 _DEPFLAGS='-M'
2844 _cflags_speed='-fast'
2845 _cflags_size='-O1'
2846 _flags_filter=ccc_flags
2847 elif $_cc --vsn 2>/dev/null | grep -Eq "ARM (C/C\+\+ )?Compiler"; then
2848 test -d "$sysroot" || die "No valid sysroot specified."
2849 _type=armcc
2850 _ident=$($_cc --vsn | grep -i build | head -n1 | sed 's/.*: //')
2851 armcc_conf="$PWD/armcc.conf"
2852 $_cc --arm_linux_configure \
2853 --arm_linux_config_file="$armcc_conf" \
2854 --configure_sysroot="$sysroot" \
2855 --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
2856 die "Error creating armcc configuration file."
2857 $_cc --vsn | grep -q RVCT && armcc_opt=rvct || armcc_opt=armcc
2858 _flags="--arm_linux_config_file=$armcc_conf --translate_gcc"
2859 as_default="${cross_prefix}gcc"
2860 _depflags='-MMD'
2861 _cflags_speed='-O3'
2862 _cflags_size='-Os'
2863 elif $_cc -version 2>/dev/null | grep -Eq 'TMS470|TI ARM'; then
2864 _type=tms470
2865 _ident=$($_cc -version | head -n1 | tr -s ' ')
2866 _flags='--gcc --abi=eabi -me'
2867 _cc_e='-ppl -fe=$@'
2868 _cc_o='-fe=$@'
2869 _depflags='-ppa -ppd=$(@:.o=.d)'
2870 _cflags_speed='-O3 -mf=5'
2871 _cflags_size='-O3 -mf=2'
2872 _flags_filter=tms470_flags
2873 elif $_cc -v 2>&1 | grep -q clang; then
2874 _type=clang
2875 _ident=$($_cc --version | head -n1)
2876 _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2877 _cflags_speed='-O3'
2878 _cflags_size='-Os'
2879 elif $_cc -V 2>&1 | grep -q Sun; then
2880 _type=suncc
2881 _ident=$($_cc -V 2>&1 | head -n1 | cut -d' ' -f 2-)
2882 _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "1s,^.*: ,$@: ," -e "\$$!s,\$$, \\\," -e "1!s,^.*: , ," > $(@:.o=.d)'
2883 _DEPFLAGS='-xM1 -xc99'
2884 _ldflags='-std=c99'
2885 _cflags_speed='-O5'
2886 _cflags_size='-O5 -xspace'
2887 _flags_filter=suncc_flags
2888 elif $_cc -v 2>&1 | grep -q 'PathScale\|Path64'; then
2889 _type=pathscale
2890 _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
2891 _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2892 _cflags_speed='-O2'
2893 _cflags_size='-Os'
2894 _flags_filter='filter_out -Wdisabled-optimization'
2895 elif $_cc -v 2>&1 | grep -q Open64; then
2896 _type=open64
2897 _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
2898 _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2899 _cflags_speed='-O2'
2900 _cflags_size='-Os'
2901 _flags_filter='filter_out -Wdisabled-optimization|-Wtype-limits|-fno-signed-zeros'
2902 elif $_cc -V 2>&1 | grep -q Portland; then
2903 _type=pgi
2904 _ident="PGI $($_cc -V 2>&1 | awk '/^pgcc/ { print $2; exit }')"
2905 opt_common='-alias=ansi -Mdse -Mlre -Mpre'
2906 _cflags_speed="-O3 -Mautoinline -Munroll=c:4 $opt_common"
2907 _cflags_size="-O2 -Munroll=c:1 $opt_common"
2908 _cflags_noopt="-O1"
2909 _flags_filter=pgi_flags
2910 elif $_cc 2>&1 | grep -q 'Microsoft.*ARM.*Assembler'; then
2911 _type=armasm
2912 _ident=$($_cc | head -n1)
2913 # 4509: "This form of conditional instruction is deprecated"
2914 _flags="-nologo -ignore 4509"
2915 _flags_filter=armasm_flags
2916 elif $_cc 2>&1 | grep -q Microsoft; then
2917 _type=msvc
2918 _ident=$($cc 2>&1 | head -n1)
2919 _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< 2>&1 | awk '\''/including/ { sub(/^.*file: */, ""); gsub(/\\/, "/"); if (!match($$0, / /)) print "$@:", $$0 }'\'' > $(@:.o=.d)'
2920 _DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -showIncludes -Zs'
2921 _cflags_speed="-O2"
2922 _cflags_size="-O1"
2923 if $_cc 2>&1 | grep -q Linker; then
2924 _ld_o='-out:$@'
2925 else
2926 _ld_o='-Fe$@'
2927 fi
2928 _cc_o='-Fo$@'
2929 _cc_e='-P -Fi$@'
2930 _flags_filter=msvc_flags
2931 _ld_lib='lib%.a'
2932 _ld_path='-libpath:'
2933 _flags='-nologo'
2934 _cflags='-D_USE_MATH_DEFINES -D_CRT_SECURE_NO_WARNINGS -Dinline=__inline -FIstdlib.h -Dstrtoll=_strtoi64'
2935 if [ $pfx = hostcc ]; then
2936 append _cflags -Dsnprintf=_snprintf
2937 fi
2938 elif $_cc 2>&1 | grep -q Intel; then
2939 _type=icl
2940 _ident=$($cc 2>&1 | head -n1)
2941 _depflags='-QMMD -QMF$(@:.o=.d) -QMT$@'
2942 # Not only is O3 broken on 13.x+ but it is slower on all previous
2943 # versions (tested) as well.
2944 _cflags_speed="-O2"
2945 _cflags_size="-O1 -Oi" # -O1 without -Oi miscompiles stuff
2946 if $_cc 2>&1 | grep -q Linker; then
2947 _ld_o='-out:$@'
2948 else
2949 _ld_o='-Fe$@'
2950 fi
2951 _cc_o='-Fo$@'
2952 _cc_e='-P'
2953 _flags_filter=icl_flags
2954 _ld_lib='lib%.a'
2955 _ld_path='-libpath:'
2956 # -Qdiag-error to make icl error when seeing certain unknown arguments
2957 _flags='-nologo -Qdiag-error:4044,10157'
2958 # -Qvec- -Qsimd- to prevent miscompilation, -GS for consistency
2959 # with MSVC which enables it by default.
2960 _cflags='-D_USE_MATH_DEFINES -FIstdlib.h -Dstrtoll=_strtoi64 -Qms0 -Qvec- -Qsimd- -GS'
2961 if [ $pfx = hostcc ]; then
2962 append _cflags -Dsnprintf=_snprintf
2963 fi
2964 elif $_cc --version 2>/dev/null | grep -q ^cparser; then
2965 _type=cparser
2966 _ident=$($_cc --version | head -n1)
2967 _depflags='-MMD'
2968 _cflags_speed='-O4'
2969 _cflags_size='-O2'
2970 _flags_filter=cparser_flags
2971 fi
2972
2973 eval ${pfx}_type=\$_type
2974 eval ${pfx}_ident=\$_ident
2975 }
2976
2977 set_ccvars(){
2978 eval ${1}_C=\${_cc_c-\${${1}_C}}
2979 eval ${1}_E=\${_cc_e-\${${1}_E}}
2980 eval ${1}_O=\${_cc_o-\${${1}_O}}
2981
2982 if [ -n "$_depflags" ]; then
2983 eval ${1}_DEPFLAGS=\$_depflags
2984 else
2985 eval ${1}DEP=\${_DEPCMD:-\$DEPCMD}
2986 eval ${1}DEP_FLAGS=\${_DEPFLAGS:-\$DEPFLAGS}
2987 eval DEP${1}FLAGS=\$_flags
2988 fi
2989 }
2990
2991 probe_cc cc "$cc"
2992 cflags_filter=$_flags_filter
2993 cflags_speed=$_cflags_speed
2994 cflags_size=$_cflags_size
2995 cflags_noopt=$_cflags_noopt
2996 add_cflags $_flags $_cflags
2997 cc_ldflags=$_ldflags
2998 set_ccvars CC
2999
3000 probe_cc hostcc "$host_cc"
3001 host_cflags_filter=$_flags_filter
3002 add_host_cflags $_flags $_cflags
3003 set_ccvars HOSTCC
3004
3005 test -n "$cc_type" && enable $cc_type ||
3006 warn "Unknown C compiler $cc, unable to select optimal CFLAGS"
3007
3008 : ${as_default:=$cc}
3009 : ${dep_cc_default:=$cc}
3010 : ${ld_default:=$cc}
3011 : ${host_ld_default:=$host_cc}
3012 set_default ar as dep_cc ld host_ld
3013
3014 probe_cc as "$as"
3015 asflags_filter=$_flags_filter
3016 add_asflags $_flags $_cflags
3017 set_ccvars AS
3018
3019 probe_cc ld "$ld"
3020 ldflags_filter=$_flags_filter
3021 add_ldflags $_flags $_ldflags
3022 test "$cc_type" != "$ld_type" && add_ldflags $cc_ldflags
3023 LD_O=${_ld_o-$LD_O}
3024 LD_LIB=${_ld_lib-$LD_LIB}
3025 LD_PATH=${_ld_path-$LD_PATH}
3026
3027 probe_cc hostld "$host_ld"
3028 host_ldflags_filter=$_flags_filter
3029 add_host_ldflags $_flags $_ldflags
3030 HOSTLD_O=${_ld_o-$HOSTLD_O}
3031
3032 if [ -z "$CC_DEPFLAGS" ] && [ "$dep_cc" != "$cc" ]; then
3033 probe_cc depcc "$dep_cc"
3034 CCDEP=${_DEPCMD:-$DEPCMD}
3035 CCDEP_FLAGS=${_DEPFLAGS:=$DEPFLAGS}
3036 DEPCCFLAGS=$_flags
3037 fi
3038
3039 if $ar 2>&1 | grep -q Microsoft; then
3040 arflags="-nologo"
3041 ar_o='-out:$@'
3042 elif $ar 2>&1 | grep -q 'Texas Instruments'; then
3043 arflags="rq"
3044 ar_o='$@'
3045 elif $ar 2>&1 | grep -q 'Usage: ar.*-X.*any'; then
3046 arflags='-Xany -r -c'
3047 ar_o='$@'
3048 else
3049 arflags="rc"
3050 ar_o='$@'
3051 fi
3052
3053 add_cflags $extra_cflags
3054 add_asflags $extra_cflags
3055
3056 if test -n "$sysroot"; then
3057 case "$cc_type" in
3058 gcc|llvm_gcc|clang)
3059 add_cppflags --sysroot="$sysroot"
3060 add_ldflags --sysroot="$sysroot"
3061 ;;
3062 tms470)
3063 add_cppflags -I"$sysinclude"
3064 add_ldflags --sysroot="$sysroot"
3065 ;;
3066 esac
3067 fi
3068
3069 if test "$cpu" = host; then
3070 enabled cross_compile &&
3071 die "--cpu=host makes no sense when cross-compiling."
3072
3073 case "$cc_type" in
3074 gcc|llvm_gcc)
3075 check_native(){
3076 $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
3077 sed -n "/cc1.*$1=/{
3078 s/.*$1=\\([^ ]*\\).*/\\1/
3079 p
3080 q
3081 }" $TMPE
3082 }
3083 cpu=$(check_native -march || check_native -mcpu)
3084 ;;
3085 esac
3086
3087 test "${cpu:-host}" = host &&
3088 die "--cpu=host not supported with compiler $cc"
3089 fi
3090
3091 # Deal with common $arch aliases
3092 case "$arch" in
3093 aarch64|arm64)
3094 arch="aarch64"
3095 ;;
3096 arm*)
3097 arch="arm"
3098 ;;
3099 mips*|IP*)
3100 arch="mips"
3101 ;;
3102 parisc*|hppa*)
3103 arch="parisc"
3104 ;;
3105 "Power Macintosh"|ppc*|powerpc*)
3106 arch="ppc"
3107 ;;
3108 s390|s390x)
3109 arch="s390"
3110 ;;
3111 sh4|sh)
3112 arch="sh4"
3113 ;;
3114 sun4u|sparc*)
3115 arch="sparc"
3116 ;;
3117 tilegx|tile-gx)
3118 arch="tilegx"
3119 ;;
3120 i[3-6]86|i86pc|BePC|x86pc|x86_64|amd64)
3121 arch="x86"
3122 ;;
3123 esac
3124
3125 is_in $arch $ARCH_LIST || warn "unknown architecture $arch"
3126 enable $arch
3127
3128 # Add processor-specific flags
3129 if enabled aarch64; then
3130
3131 case $cpu in
3132 armv*)
3133 cpuflags="-march=$cpu"
3134 ;;
3135 *)
3136 cpuflags="-mcpu=$cpu"
3137 ;;
3138 esac
3139
3140 elif enabled alpha; then
3141
3142 cpuflags="-mcpu=$cpu"
3143
3144 elif enabled arm; then
3145
3146 check_arm_arch() {
3147 check_cpp_condition stddef.h \
3148 "defined __ARM_ARCH_${1}__ || defined __TARGET_ARCH_${2:-$1}" \
3149 $cpuflags
3150 }
3151
3152 probe_arm_arch() {
3153 if check_arm_arch 4; then echo armv4;
3154 elif check_arm_arch 4T; then echo armv4t;
3155 elif check_arm_arch 5; then echo armv5;
3156 elif check_arm_arch 5E; then echo armv5e;
3157 elif check_arm_arch 5T; then echo armv5t;
3158 elif check_arm_arch 5TE; then echo armv5te;
3159 elif check_arm_arch 5TEJ; then echo armv5te;
3160 elif check_arm_arch 6; then echo armv6;
3161 elif check_arm_arch 6J; then echo armv6j;
3162 elif check_arm_arch 6K; then echo armv6k;
3163 elif check_arm_arch 6Z; then echo armv6z;
3164 elif check_arm_arch 6ZK; then echo armv6zk;
3165 elif check_arm_arch 6T2; then echo armv6t2;
3166 elif check_arm_arch 7; then echo armv7;
3167 elif check_arm_arch 7A 7_A; then echo armv7-a;
3168 elif check_arm_arch 7R 7_R; then echo armv7-r;
3169 elif check_arm_arch 7M 7_M; then echo armv7-m;
3170 elif check_arm_arch 7EM 7E_M; then echo armv7-m;
3171 elif check_arm_arch 8A 8_A; then echo armv8-a;
3172 fi
3173 }
3174
3175 [ "$cpu" = generic ] && cpu=$(probe_arm_arch)
3176
3177 case $cpu in
3178 armv*)
3179 cpuflags="-march=$cpu"
3180 subarch=$(echo $cpu | sed 's/[^a-z0-9]//g')
3181 ;;
3182 *)
3183 cpuflags="-mcpu=$cpu"
3184 case $cpu in
3185 cortex-a*) subarch=armv7a ;;
3186 cortex-r*) subarch=armv7r ;;
3187 cortex-m*) enable thumb; subarch=armv7m ;;
3188 arm11*) subarch=armv6 ;;
3189 arm[79]*e*|arm9[24]6*|arm96*|arm102[26]) subarch=armv5te ;;
3190 armv4*|arm7*|arm9[24]*) subarch=armv4 ;;
3191 *) subarch=$(probe_arm_arch) ;;
3192 esac
3193 ;;
3194 esac
3195
3196 case "$subarch" in
3197 armv5t*) enable fast_clz ;;
3198 armv[6-8]*) enable fast_clz fast_unaligned ;;
3199 esac
3200
3201 elif enabled avr32; then
3202
3203 case $cpu in
3204 ap7[02]0[0-2])
3205 subarch="avr32_ap"
3206 cpuflags="-mpart=$cpu"
3207 ;;
3208 ap)
3209 subarch="avr32_ap"
3210 cpuflags="-march=$cpu"
3211 ;;
3212 uc3[ab]*)
3213 subarch="avr32_uc"
3214 cpuflags="-mcpu=$cpu"
3215 ;;
3216 uc)
3217 subarch="avr32_uc"
3218 cpuflags="-march=$cpu"
3219 ;;
3220 esac
3221
3222 elif enabled bfin; then
3223
3224 cpuflags="-mcpu=$cpu"
3225
3226 elif enabled mips; then
3227
3228 cpuflags="-march=$cpu"
3229
3230 elif enabled ppc; then
3231
3232 disable ldbrx
3233
3234 case $(tolower $cpu) in
3235 601|ppc601|powerpc601)
3236 cpuflags="-mcpu=601"
3237 disable altivec
3238 ;;
3239 603*|ppc603*|powerpc603*)
3240 cpuflags="-mcpu=603"
3241 disable altivec
3242 ;;
3243 604*|ppc604*|powerpc604*)
3244 cpuflags="-mcpu=604"
3245 disable altivec
3246 ;;
3247 g3|75*|ppc75*|powerpc75*)
3248 cpuflags="-mcpu=750"
3249 disable altivec
3250 ;;
3251 g4|745*|ppc745*|powerpc745*)
3252 cpuflags="-mcpu=7450"
3253 ;;
3254 74*|ppc74*|powerpc74*)
3255 cpuflags="-mcpu=7400"
3256 ;;
3257 g5|970|ppc970|powerpc970)
3258 cpuflags="-mcpu=970"
3259 ;;
3260 power[3-7]*)
3261 cpuflags="-mcpu=$cpu"
3262 ;;
3263 cell)
3264 cpuflags="-mcpu=cell"
3265 enable ldbrx
3266 ;;
3267 e500mc)
3268 cpuflags="-mcpu=e500mc"
3269 disable altivec
3270 ;;
3271 e500v2)
3272 cpuflags="-mcpu=8548 -mhard-float -mfloat-gprs=double"
3273 disable altivec
3274 disable dcbzl
3275 ;;
3276 e500)
3277 cpuflags="-mcpu=8540 -mhard-float"
3278 disable altivec
3279 disable dcbzl
3280 ;;
3281 esac
3282
3283 elif enabled sparc; then
3284
3285 case $cpu in
3286 cypress|f93[04]|tsc701|sparcl*|supersparc|hypersparc|niagara|v[789])
3287 cpuflags="-mcpu=$cpu"
3288 ;;
3289 ultrasparc*|niagara[234])
3290 cpuflags="-mcpu=$cpu"
3291 ;;
3292 esac
3293
3294 elif enabled x86; then
3295
3296 case $cpu in
3297 i[345]86|pentium)
3298 cpuflags="-march=$cpu"
3299 disable i686
3300 disable mmx
3301 ;;
3302 # targets that do NOT support nopl and conditional mov (cmov)
3303 pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
3304 cpuflags="-march=$cpu"
3305 disable i686
3306 ;;
3307 # targets that do support nopl and conditional mov (cmov)
3308 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*)
3309 cpuflags="-march=$cpu"
3310 enable i686
3311 enable fast_cmov
3312 ;;
3313 # targets that do support conditional mov but on which it's slow
3314 pentium4|pentium4m|prescott|nocona)
3315 cpuflags="-march=$cpu"
3316 enable i686
3317 disable fast_cmov
3318 ;;
3319 esac
3320
3321 fi
3322
3323 if [ "$cpu" != generic ]; then
3324 add_cflags $cpuflags
3325 add_asflags $cpuflags
3326 fi
3327
3328 # compiler sanity check
3329 check_exec <<EOF
3330 int main(void){ return 0; }
3331 EOF
3332 if test "$?" != 0; then
3333 echo "$cc is unable to create an executable file."
3334 if test -z "$cross_prefix" && ! enabled cross_compile ; then
3335 echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
3336 echo "Only do this if you know what cross compiling means."
3337 fi
3338 die "C compiler test failed."
3339 fi
3340
3341 add_cppflags -D_ISOC99_SOURCE
3342 check_cflags -std=c99
3343 check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
3344 #include <stdlib.h>
3345 EOF
3346 check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
3347 #include <stdlib.h>
3348 EOF
3349
3350 add_host_cppflags -D_ISOC99_SOURCE
3351 check_host_cflags -std=c99
3352 check_host_cflags -Wall
3353 check_host_cflags -O3
3354
3355 check_64bit(){
3356 arch32=$1
3357 arch64=$2
3358 expr=$3
3359 check_code cc "" "int test[2*($expr) - 1]" &&
3360 subarch=$arch64 || subarch=$arch32
3361 }
3362
3363 case "$arch" in
3364 aarch64|alpha|ia64)
3365 spic=$shared
3366 ;;
3367 mips)
3368 check_64bit mips mips64 '_MIPS_SIM > 1'
3369 spic=$shared
3370 ;;
3371 parisc)
3372 check_64bit parisc parisc64 'sizeof(void *) > 4'
3373 spic=$shared
3374 ;;
3375 ppc)
3376 check_64bit ppc ppc64 'sizeof(void *) > 4'
3377 spic=$shared
3378 ;;
3379 s390)
3380 check_64bit s390 s390x 'sizeof(void *) > 4'
3381 spic=$shared
3382 ;;
3383 sparc)
3384 check_64bit sparc sparc64 'sizeof(void *) > 4'
3385 spic=$shared
3386 ;;
3387 x86)
3388 check_64bit x86_32 x86_64 'sizeof(void *) > 4'
3389 if test "$subarch" = "x86_64"; then
3390 spic=$shared
3391 fi
3392 ;;
3393 esac
3394
3395 enable $subarch
3396 enabled spic && enable_weak pic
3397
3398 # OS specific
3399 case $target_os in
3400 aix)
3401 SHFLAGS=-shared
3402 add_cppflags '-I\$(SRC_PATH)/compat/aix'
3403 enabled shared && add_ldflags -Wl,-brtl
3404 ;;
3405 android)
3406 disable symver
3407 SLIB_INSTALL_NAME='$(SLIBNAME)'
3408 SLIB_INSTALL_LINKS=
3409 # soname not set on purpose
3410 SHFLAGS=-shared
3411 ;;
3412 haiku)
3413 prefix_default="/boot/common"
3414 network_extralibs="-lnetwork"
3415 host_libs=
3416 ;;
3417 sunos)
3418 SHFLAGS='-shared -Wl,-h,$$(@F)'
3419 enabled x86 && SHFLAGS="-mimpure-text $SHFLAGS"
3420 network_extralibs="-lsocket -lnsl"
3421 # When using suncc to build, the Solaris linker will mark
3422 # an executable with each instruction set encountered by
3423 # the Solaris assembler. As our libraries contain their own
3424 # guards for processor-specific code, instead suppress
3425 # generation of the HWCAPS ELF section on Solaris x86 only.
3426 enabled_all suncc x86 &&
3427 echo "hwcap_1 = OVERRIDE;" > mapfile &&
3428 add_ldflags -Wl,-M,mapfile
3429 nm_default='nm -P -g'
3430 ;;
3431 netbsd)
3432 disable symver
3433 oss_indev_extralibs="-lossaudio"
3434 oss_outdev_extralibs="-lossaudio"
3435 ;;
3436 openbsd|bitrig)
3437 disable symver
3438 SHFLAGS='-shared'
3439 SLIB_INSTALL_NAME='$(SLIBNAME).$(LIBMAJOR).$(LIBMINOR)'
3440 SLIB_INSTALL_LINKS=
3441 oss_indev_extralibs="-lossaudio"
3442 oss_outdev_extralibs="-lossaudio"
3443 ;;
3444 dragonfly)
3445 disable symver
3446 ;;
3447 freebsd)
3448 ;;
3449 bsd/os)
3450 add_extralibs -lpoll -lgnugetopt
3451 ;;
3452 darwin)
3453 enabled ppc && add_asflags -force_cpusubtype_ALL
3454 SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR)'
3455 enabled x86_32 && append SHFLAGS -Wl,-read_only_relocs,suppress
3456 add_ldflags -Wl,-dynamic,-search_paths_first
3457 SLIBSUF=".dylib"
3458 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
3459 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
3460 objformat="macho"
3461 enabled x86_64 && objformat="macho64"
3462 enabled_any pic shared ||
3463 { check_cflags -mdynamic-no-pic && add_asflags -mdynamic-no-pic; }
3464 ;;
3465 mingw32*)
3466 if test $target_os = "mingw32ce"; then
3467 disable network
3468 else
3469 target_os=mingw32
3470 fi
3471 LIBTARGET=i386
3472 if enabled x86_64; then
3473 LIBTARGET="i386:x86-64"
3474 elif enabled arm; then
3475 LIBTARGET=arm-wince
3476 fi
3477 check_ldflags -Wl,--nxcompat
3478 check_ldflags -Wl,--dynamicbase
3479 shlibdir_default="$bindir_default"
3480 SLIBPREF=""
3481 SLIBSUF=".dll"
3482 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
3483 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
3484 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)'
3485 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
3486 SLIB_INSTALL_LINKS=
3487 SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
3488 SLIB_INSTALL_EXTRA_LIB='lib$(SLIBNAME:$(SLIBSUF)=.dll.a) $(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
3489 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'
3490 objformat="win32"
3491 dlltool="${cross_prefix}dlltool"
3492 ranlib=:
3493 enable dos_paths
3494 ;;
3495 win32|win64)
3496 disable symver
3497 if enabled shared; then
3498 # Link to the import library instead of the normal static library
3499 # for shared libs.
3500 LD_LIB='%.lib'
3501 # Cannot build both shared and static libs with MSVC or icl.
3502 disable static
3503 fi
3504 shlibdir_default="$bindir_default"
3505 SLIBPREF=""
3506 SLIBSUF=".dll"
3507 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
3508 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
3509 SLIB_CREATE_DEF_CMD='$(SRC_PATH)/compat/windows/makedef $(SUBDIR)lib$(NAME).ver $(OBJS) > $$(@:$(SLIBSUF)=.def)'
3510 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
3511 SLIB_INSTALL_LINKS=
3512 SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
3513 SLIB_INSTALL_EXTRA_LIB='$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
3514 SHFLAGS='-dll -def:$$(@:$(SLIBSUF)=.def) -implib:$(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib)'
3515 objformat="win32"
3516 ranlib=:
3517 enable dos_paths
3518 ;;
3519 cygwin*)
3520 target_os=cygwin
3521 shlibdir_default="$bindir_default"
3522 SLIBPREF="cyg"
3523 SLIBSUF=".dll"
3524 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
3525 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
3526 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
3527 SLIB_INSTALL_LINKS=
3528 SLIB_INSTALL_EXTRA_LIB='lib$(FULLNAME).dll.a'
3529 SHFLAGS='-shared -Wl,--out-implib,$(SUBDIR)lib$(FULLNAME).dll.a'
3530 objformat="win32"
3531 enable dos_paths
3532 ;;
3533 *-dos|freedos|opendos)
3534 network_extralibs="-lsocket"
3535 objformat="coff"
3536 enable dos_paths
3537 add_cppflags -U__STRICT_ANSI__
3538 ;;
3539 linux)
3540 enable dv1394
3541 ;;
3542 irix*)
3543 target_os=irix
3544 ranlib="echo ignoring ranlib"
3545 ;;
3546 os/2*)
3547 ln_s="cp -f"
3548 objformat="aout"
3549 add_cppflags -D_GNU_SOURCE
3550 add_ldflags -Zomf -Zbin-files -Zargs-wild -Zmap
3551 SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
3552 LIBSUF="_s.a"
3553 SLIBPREF=""
3554 SLIBSUF=".dll"
3555 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
3556 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
3557 SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
3558 echo PROTMODE >> $(SUBDIR)$(NAME).def; \
3559 echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
3560 echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
3561 echo EXPORTS >> $(SUBDIR)$(NAME).def; \
3562 emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
3563 SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
3564 emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
3565 SLIB_INSTALL_EXTRA_LIB='$(LIBPREF)$(NAME)_dll.a $(LIBPREF)$(NAME)_dll.lib'
3566 enable dos_paths
3567 ;;
3568 gnu/kfreebsd)
3569 add_cppflags -D_BSD_SOURCE
3570 ;;
3571 gnu)
3572 ;;
3573 qnx)
3574 add_cppflags -D_QNX_SOURCE
3575 network_extralibs="-lsocket"
3576 ;;
3577 symbian)
3578 SLIBSUF=".dll"
3579 enable dos_paths
3580 add_cflags --include=$sysinclude/gcce/gcce.h -fvisibility=default
3581 add_cppflags -D__GCCE__ -D__SYMBIAN32__ -DSYMBIAN_OE_POSIX_SIGNALS
3582 add_ldflags -Wl,--target1-abs,--no-undefined \
3583 -Wl,-Ttext,0x80000,-Tdata,0x1000000 -shared \
3584 -Wl,--entry=_E32Startup -Wl,-u,_E32Startup
3585 add_extralibs -l:eexe.lib -l:usrt2_2.lib -l:dfpaeabi.dso \
3586 -l:drtaeabi.dso -l:scppnwdl.dso -lsupc++ -lgcc \
3587 -l:libc.dso -l:libm.dso -l:euser.dso -l:libcrt0.lib
3588 ;;
3589 osf1)
3590 add_cppflags -D_OSF_SOURCE -D_POSIX_PII -D_REENTRANT
3591 ;;
3592 minix)
3593 ;;
3594 plan9)
3595 add_cppflags -D_C99_SNPRINTF_EXTENSION \
3596 -D_REENTRANT_SOURCE \
3597 -D_RESEARCH_SOURCE \
3598 -DFD_SETSIZE=96 \
3599 -DHAVE_SOCK_OPTS
3600 add_compat strtod.o strtod=avpriv_strtod
3601 network_extralibs='-lbsd'
3602 exeobjs=compat/plan9/main.o
3603 cp_f='cp'
3604 ;;
3605 none)
3606 ;;
3607 *)
3608 die "Unknown OS '$target_os'."
3609 ;;
3610 esac
3611
3612 # determine libc flavour
3613
3614 probe_libc(){
3615 pfx=$1
3616 pfx_no_=${pfx%_}
3617 # uclibc defines __GLIBC__, so it needs to be checked before glibc.
3618 if check_${pfx}cpp_condition features.h "defined __UCLIBC__"; then
3619 eval ${pfx}libc_type=uclibc
3620 add_${pfx}cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
3621 elif check_${pfx}cpp_condition features.h "defined __GLIBC__"; then
3622 eval ${pfx}libc_type=glibc
3623 add_${pfx}cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
3624 # MinGW headers can be installed on Cygwin, so check for newlib first.
3625 elif check_${pfx}cpp_condition newlib.h "defined _NEWLIB_VERSION"; then
3626 eval ${pfx}libc_type=newlib
3627 add_${pfx}cppflags -U__STRICT_ANSI__
3628 # MinGW64 is backwards compatible with MinGW32, so check for it first.
3629 elif check_${pfx}cpp_condition _mingw.h "defined __MINGW64_VERSION_MAJOR"; then
3630 eval ${pfx}libc_type=mingw64
3631 add_${pfx}cppflags -U__STRICT_ANSI__ -D__USE_MINGW_ANSI_STDIO=1
3632 eval test \$${pfx_no_}cc_type = "gcc" &&
3633 add_${pfx}cppflags -D__printf__=__gnu_printf__
3634 elif check_${pfx}cpp_condition _mingw.h "defined __MINGW_VERSION" ||
3635 check_${pfx}cpp_condition _mingw.h "defined __MINGW32_VERSION"; then
3636 eval ${pfx}libc_type=mingw32
3637 check_${pfx}cpp_condition _mingw.h "__MINGW32_MAJOR_VERSION > 3 || \
3638 (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
3639 die "ERROR: MinGW32 runtime version must be >= 3.15."
3640 add_${pfx}cppflags -U__STRICT_ANSI__ -D__USE_MINGW_ANSI_STDIO=1
3641 eval test \$${pfx_no_}cc_type = "gcc" &&
3642 add_${pfx}cppflags -D__printf__=__gnu_printf__
3643 elif check_${pfx}cpp_condition crtversion.h "defined _VC_CRT_MAJOR_VERSION"; then
3644 eval ${pfx}libc_type=msvcrt
3645 # The MSVC 2010 headers (Win 7.0 SDK) set _WIN32_WINNT to
3646 # 0x601 by default unless something else is set by the user.
3647 # This can easily lead to us detecting functions only present
3648 # in such new versions and producing binaries requiring windows 7.0.
3649 # Therefore explicitly set the default to XP unless the user has
3650 # set something else on the command line.
3651 check_${pfx}cpp_condition stdlib.h "defined(_WIN32_WINNT)" ||
3652 add_${pfx}cppflags -D_WIN32_WINNT=0x0502
3653 elif check_${pfx}cpp_condition stddef.h "defined __KLIBC__"; then
3654 eval ${pfx}libc_type=klibc
3655 elif check_${pfx}cpp_condition sys/cdefs.h "defined __BIONIC__"; then
3656 eval ${pfx}libc_type=bionic
3657 elif check_${pfx}cpp_condition sys/brand.h "defined LABELED_BRAND_NAME"; then
3658 eval ${pfx}libc_type=solaris
3659 add_${pfx}cppflags -D__EXTENSIONS__ -D_XOPEN_SOURCE=600
3660 else
3661 eval ${pfx}libc_type=default
3662 add_${pfx}cppflags -D_DEFAULT_SOURCE
3663 fi
3664 }
3665
3666 probe_libc
3667 test -n "$libc_type" && enable libc_$libc_type
3668 probe_libc host_
3669 test -n "$host_libc_type" && enable host_libc_$host_libc_type
3670
3671 case $libc_type in
3672 bionic)
3673 add_compat strtod.o strtod=avpriv_strtod
3674 ;;
3675 msvcrt)
3676 add_compat strtod.o strtod=avpriv_strtod
3677 add_compat msvcrt/snprintf.o snprintf=avpriv_snprintf \
3678 _snprintf=avpriv_snprintf \
3679 vsnprintf=avpriv_vsnprintf
3680 ;;
3681 esac
3682
3683 # hacks for compiler/libc/os combinations
3684
3685 if enabled_all tms470 libc_glibc; then
3686 CPPFLAGS="-I${source_path}/compat/tms470 ${CPPFLAGS}"
3687 add_cppflags -D__USER_LABEL_PREFIX__=
3688 add_cppflags -D__builtin_memset=memset
3689 add_cppflags -D__gnuc_va_list=va_list -D_VA_LIST_DEFINED
3690 add_cflags -pds=48 # incompatible redefinition of macro
3691 fi
3692
3693 if enabled_all ccc libc_glibc; then
3694 add_ldflags -Wl,-z,now # calls to libots crash without this
3695 fi
3696
3697 check_compile_assert flt_lim "float.h limits.h" "DBL_MAX == (double)DBL_MAX" ||
3698 add_cppflags '-I\$(SRC_PATH)/compat/float'
3699
3700 esc(){
3701 echo "$*" | sed 's/%/%25/g;s/:/%3a/g'
3702 }
3703
3704 echo "config:$arch:$subarch:$cpu:$target_os:$(esc $cc_ident):$(esc $LIBAV_CONFIGURATION)" >config.fate
3705
3706 check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable_weak pic
3707
3708 set_default $PATHS_LIST
3709 set_default nm
3710
3711 # we need to build at least one lib type
3712 if ! enabled_any static shared; then
3713 cat <<EOF
3714 At least one library type must be built.
3715 Specify --enable-static to build the static libraries or --enable-shared to
3716 build the shared libraries as well. To only build the shared libraries specify
3717 --disable-static in addition to --enable-shared.
3718 EOF
3719 exit 1;
3720 fi
3721
3722 die_license_disabled() {
3723 enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
3724 }
3725
3726 die_license_disabled gpl libcdio
3727 die_license_disabled gpl libx264
3728 die_license_disabled gpl libx265
3729 die_license_disabled gpl libxavs
3730 die_license_disabled gpl libxvid
3731 die_license_disabled gpl x11grab
3732
3733 die_license_disabled nonfree libfaac
3734 die_license_disabled nonfree libfdk_aac
3735 die_license_disabled nonfree openssl
3736
3737 die_license_disabled version3 libopencore_amrnb
3738 die_license_disabled version3 libopencore_amrwb
3739 die_license_disabled version3 libvo_aacenc
3740 die_license_disabled version3 libvo_amrwbenc
3741
3742 enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
3743
3744 disabled optimizations || check_cflags -fomit-frame-pointer
3745
3746 enable_weak_pic() {
3747 disabled pic && return
3748 enable pic
3749 add_cppflags -DPIC
3750 case "$target_os" in
3751 mingw*|cygwin*)
3752 ;;
3753 *)
3754 add_cflags -fPIC
3755 ;;
3756 esac
3757 add_asflags -fPIC
3758 }
3759
3760 enabled pic && enable_weak_pic
3761
3762 check_cc <<EOF || die "Symbol mangling check failed."
3763 int ff_extern;
3764 EOF
3765 sym=$($nm $TMPO | awk '/ff_extern/{ print substr($0, match($0, /[^ \t]*ff_extern/)) }')
3766 extern_prefix=${sym%%ff_extern*}
3767
3768 check_cc <<EOF && enable_weak inline_asm
3769 void foo(void) { __asm__ volatile ("" ::); }
3770 EOF
3771
3772 _restrict=
3773 for restrict_keyword in restrict __restrict__ __restrict; do
3774 check_cc <<EOF && _restrict=$restrict_keyword && break
3775 void foo(char * $restrict_keyword p);
3776 EOF
3777 done
3778
3779 check_cc <<EOF && enable pragma_deprecated
3780 void foo(void) { _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") }
3781 EOF
3782
3783 check_cc <<EOF && enable attribute_packed
3784 struct { int x; } __attribute__((packed)) x;
3785 EOF
3786
3787 check_cc <<EOF && enable attribute_may_alias
3788 union { int x; } __attribute__((may_alias)) x;
3789 EOF
3790
3791 check_cc <<EOF || die "endian test failed"
3792 unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
3793 EOF
3794 od -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
3795
3796 check_gas() {
3797 log "check_gas using '$as' as AS"
3798 # :vararg is used on aarch64, arm and ppc altivec
3799 check_as <<EOF || return 1
3800 .macro m n, y:vararg=0
3801 \n: .int \y
3802 .endm
3803 m x
3804 EOF
3805 # .altmacro is only used in arm asm
3806 ! enabled arm || check_as <<EOF || return 1
3807 .altmacro
3808 EOF
3809 enable gnu_as
3810 return 0
3811 }
3812
3813 if enabled_any arm aarch64 || enabled_all ppc altivec && enabled asm; then
3814 nogas=:
3815 enabled_any arm aarch64 && nogas=die
3816 enabled_all ppc altivec && nogas=warn
3817 as_noop=-v
3818
3819 case $as_type in
3820 arm*) gaspp_as_type=armasm; as_noop=-h ;;
3821 gcc) gaspp_as_type=gas ;;
3822 *) gaspp_as_type=$as_type ;;
3823 esac
3824
3825 [ $target_os = "darwin" ] && gaspp_as_type="apple-$gaspp_as_type"
3826
3827 check_cmd gas-preprocessor.pl -arch $arch -as-type $gaspp_as_type -- $as $as_noop &&
3828 gas="gas-preprocessor.pl -arch $arch -as-type $gaspp_as_type -- $as"
3829
3830 if ! check_gas ; then
3831 as=${gas:=$as}
3832 check_gas || \
3833 $nogas "GNU assembler not found, install/update gas-preprocessor"
3834 fi
3835
3836 check_as <<EOF && enable as_func
3837 .func test
3838 .endfunc
3839 EOF
3840 fi
3841
3842 check_inline_asm inline_asm_labels '"1:\n"'
3843
3844 if enabled aarch64; then
3845 enabled armv8 && check_insn armv8 'prfm pldl1strm, [x0]'
3846 # internal assembler in clang 3.3 does not support this instruction
3847 enabled neon && check_insn neon 'ext v0.8B, v0.8B, v1.8B, #1'
3848 enabled vfp && check_insn vfp 'fmadd d0, d0, d1, d2'
3849
3850 map 'enabled_any ${v}_external ${v}_inline || disable $v' $ARCH_EXT_LIST_ARM
3851
3852 elif enabled alpha; then
3853
3854 check_cflags -mieee
3855
3856 elif enabled arm; then
3857
3858 check_cpp_condition stddef.h "defined __thumb__" && enable_weak thumb
3859 enabled thumb && check_cflags -mthumb || check_cflags -marm
3860
3861 if check_cpp_condition stddef.h "defined __ARM_PCS_VFP"; then
3862 enable vfp_args
3863 elif ! check_cpp_condition stddef.h "defined __ARM_PCS || defined __SOFTFP__"; then
3864 case "${cross_prefix:-$cc}" in
3865 *hardfloat*) enable vfp_args; fpabi=vfp ;;
3866 *) check_ld <<EOF && enable vfp_args && fpabi=vfp || fpabi=soft ;;
3867 __asm__ (".eabi_attribute 28, 1");
3868 int main(void) { return 0; }
3869 EOF
3870 esac
3871 warn "Compiler does not indicate floating-point ABI, guessing $fpabi."
3872 fi
3873
3874 enabled armv5te && check_insn armv5te 'qadd r0, r0, r0'
3875 enabled armv6 && check_insn armv6 'sadd16 r0, r0, r0'
3876 enabled armv6t2 && check_insn armv6t2 'movt r0, #0'
3877 enabled neon && check_insn neon 'vadd.i16 q0, q0, q0'
3878 enabled vfp && check_insn vfp 'fadds s0, s0, s0'
3879 enabled vfpv3 && check_insn vfpv3 'vmov.f32 s0, #1.0'
3880
3881 [ $target_os = linux ] || [ $target_os = android ] ||
3882 map 'enabled_any ${v}_external ${v}_inline || disable $v' \
3883 $ARCH_EXT_LIST_ARM
3884
3885 check_inline_asm asm_mod_q '"add r0, %Q0, %R0" :: "r"((long long)0)'
3886
3887 check_as <<EOF && enable as_dn_directive
3888 ra .dn d0.i16
3889 .unreq ra
3890 EOF
3891
3892 [ $target_os != win32 ] && enabled_all armv6t2 shared !pic && enable_weak_pic
3893
3894 elif enabled mips; then
3895
3896 check_inline_asm loongson '"dmult.g $1, $2, $3"'
3897
3898 elif enabled parisc; then
3899
3900 if enabled gcc; then
3901 case $($cc -dumpversion) in
3902 4.[3-8].*) check_cflags -fno-optimize-sibling-calls ;;
3903 esac
3904 fi
3905
3906 elif enabled ppc; then
3907
3908 enable local_aligned_8 local_aligned_16
3909
3910 check_inline_asm dcbzl '"dcbzl 0, %0" :: "r"(0)'
3911 check_inline_asm ibm_asm '"add 0, 0, 0"'
3912 check_inline_asm ppc4xx '"maclhw r10, r11, r12"'
3913 check_inline_asm xform_asm '"lwzx %1, %y0" :: "Z"(*(int*)0), "r"(0)'
3914
3915 # AltiVec flags: The FSF version of GCC differs from the Apple version
3916 if enabled altivec; then
3917 check_cflags -maltivec -mabi=altivec &&
3918 { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
3919 check_cflags -faltivec
3920
3921 # check if our compiler supports Motorola AltiVec C API
3922 check_cc <<EOF || disable altivec
3923 $inc_altivec_h
3924 int main(void) {
3925 vector signed int v1 = (vector signed int) { 0 };
3926 vector signed int v2 = (vector signed int) { 1 };
3927 v1 = vec_add(v1, v2);
3928 return 0;
3929 }
3930 EOF
3931
3932 enabled altivec || warn "Altivec disabled, possibly missing --cpu flag"
3933 fi
3934
3935 elif enabled x86; then
3936
3937 check_builtin rdtsc intrin.h "__rdtsc()"
3938 check_builtin mm_empty mmintrin.h "_mm_empty()"
3939
3940 enable local_aligned_8 local_aligned_16
3941
3942 # check whether EBP is available on x86
3943 # As 'i' is stored on the stack, this program will crash
3944 # if the base pointer is used to access it because the
3945 # base pointer is cleared in the inline assembly code.
3946 check_exec_crash <<EOF && enable ebp_available
3947 volatile int i=0;
3948 __asm__ volatile ("xorl %%ebp, %%ebp" ::: "%ebp");
3949 return i;
3950 EOF
3951
3952 # check whether EBX is available on x86
3953 check_inline_asm ebx_available '""::"b"(0)' &&
3954 check_inline_asm ebx_available '"":::"%ebx"'
3955
3956 # check whether xmm clobbers are supported
3957 check_inline_asm xmm_clobbers '"":::"%xmm0"'
3958
3959 # check whether binutils is new enough to compile SSSE3/MMXEXT
3960 enabled ssse3 && check_inline_asm ssse3_inline '"pabsw %xmm0, %xmm0"'
3961 enabled mmxext && check_inline_asm mmxext_inline '"pmaxub %mm0, %mm1"'
3962
3963 if ! disabled_any asm mmx yasm; then
3964 if check_cmd $yasmexe --version; then
3965 enabled x86_64 && yasm_extra="-m amd64"
3966 yasm_debug="-g dwarf2"
3967 elif check_cmd nasm -v; then
3968 yasmexe=nasm
3969 yasm_debug="-g -F dwarf"
3970 enabled x86_64 && test "$objformat" = elf && objformat=elf64
3971 fi
3972
3973 YASMFLAGS="-f $objformat $yasm_extra"
3974 enabled pic && append YASMFLAGS "-DPIC"
3975 test -n "$extern_prefix" && append YASMFLAGS "-DPREFIX"
3976 case "$objformat" in
3977 elf*) enabled debug && append YASMFLAGS $yasm_debug ;;
3978 esac
3979
3980 check_yasm "movbe ecx, [5]" && enable yasm ||
3981 die "yasm/nasm not found or too old. Use --disable-yasm for a crippled build."
3982 check_yasm "vpmacsdd xmm0, xmm1, xmm2, xmm3" || disable xop_external
3983 check_yasm "vfmadd132ps ymm0, ymm1, ymm2" || disable fma3_external
3984 check_yasm "vfmaddps ymm0, ymm1, ymm2, ymm3" || disable fma4_external
3985 check_yasm "CPU amdnop" || disable cpunop
3986 fi
3987
3988 case "$cpu" in
3989 athlon*|opteron*|k8*|pentium|pentium-mmx|prescott|nocona|atom|geode)
3990 disable fast_clz
3991 ;;
3992 esac
3993
3994 fi
3995
3996 check_code cc arm_neon.h "int16x8_t test = vdupq_n_s16(0)" && enable intrinsics_neon
3997
3998 check_ldflags -Wl,--as-needed
3999
4000 if check_func dlopen; then
4001 ldl=
4002 elif check_func dlopen -ldl; then
4003 ldl=-ldl
4004 fi
4005
4006 if ! disabled network; then
4007 check_func getaddrinfo $network_extralibs
4008 check_func getservbyport $network_extralibs
4009 check_func inet_aton $network_extralibs
4010
4011 check_type netdb.h "struct addrinfo"
4012 check_type netinet/in.h "struct group_source_req" -D_BSD_SOURCE
4013 check_type netinet/in.h "struct ip_mreq_source" -D_BSD_SOURCE
4014 check_type netinet/in.h "struct ipv6_mreq" -D_DARWIN_C_SOURCE
4015 check_type poll.h "struct pollfd"
4016 check_type netinet/sctp.h "struct sctp_event_subscribe"
4017 check_struct "sys/types.h sys/socket.h" "struct sockaddr" sa_len
4018 check_type netinet/in.h "struct sockaddr_in6"
4019 check_type "sys/types.h sys/socket.h" "struct sockaddr_storage"
4020 check_type "sys/types.h sys/socket.h" socklen_t
4021
4022 # Prefer arpa/inet.h over winsock2
4023 if check_header arpa/inet.h ; then
4024 check_func closesocket
4025 elif check_header winsock2.h ; then
4026 check_func_headers winsock2.h closesocket -lws2 &&
4027 network_extralibs="-lws2" ||
4028 { check_func_headers winsock2.h closesocket -lws2_32 &&
4029 network_extralibs="-lws2_32"; } || disable winsock2_h network
4030 check_func_headers ws2tcpip.h getaddrinfo $network_extralibs
4031
4032 check_type ws2tcpip.h socklen_t
4033 check_type ws2tcpip.h "struct addrinfo"
4034 check_type ws2tcpip.h "struct group_source_req"
4035 check_type ws2tcpip.h "struct ip_mreq_source"
4036 check_type ws2tcpip.h "struct ipv6_mreq"
4037 check_type winsock2.h "struct pollfd"
4038 check_struct winsock2.h "struct sockaddr" sa_len
4039 check_type ws2tcpip.h "struct sockaddr_in6"
4040 check_type ws2tcpip.h "struct sockaddr_storage"
4041 else
4042 disable network
4043 fi
4044 fi
4045
4046 check_builtin atomic_cas_ptr atomic.h "void **ptr; void *oldval, *newval; atomic_cas_ptr(ptr, oldval, newval)"
4047 check_builtin machine_rw_barrier mbarrier.h "__machine_rw_barrier()"
4048 check_builtin MemoryBarrier windows.h "MemoryBarrier()"
4049 check_builtin sync_val_compare_and_swap "" "int *ptr; int oldval, newval; __sync_val_compare_and_swap(ptr, oldval, newval)"
4050
4051 check_func_headers malloc.h _aligned_malloc && enable aligned_malloc
4052 check_func ${malloc_prefix}memalign && enable memalign
4053 check_func ${malloc_prefix}posix_memalign && enable posix_memalign
4054
4055 check_cpp_condition unistd.h "defined(_POSIX_MONOTONIC_CLOCK)" &&
4056 check_func_headers time.h clock_gettime || { check_func_headers time.h clock_gettime -lrt && add_extralibs -lrt && LIBRT="-lrt"; }
4057
4058 check_func fcntl
4059 check_func fork
4060 check_func gethrtime
4061 check_func getopt
4062 check_func getrusage
4063 check_func gettimeofday
4064 check_func isatty
4065 check_func localtime_r
4066 check_func mach_absolute_time
4067 check_func mkstemp
4068 check_func mmap
4069 check_func mprotect
4070 # Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
4071 check_func_headers time.h nanosleep || { check_func_headers time.h nanosleep -lrt && add_extralibs -lrt; }
4072 check_func sched_getaffinity
4073 check_func setrlimit
4074 check_func strerror_r
4075 check_func strptime
4076 check_func sysconf
4077 check_func sysctl
4078 check_func usleep
4079
4080 check_func_headers io.h setmode
4081 check_func_headers stdlib.h getenv
4082
4083 check_func_headers windows.h CoTaskMemFree -lole32
4084 check_func_headers windows.h GetProcessAffinityMask
4085 check_func_headers windows.h GetProcessTimes
4086 check_func_headers windows.h GetSystemTimeAsFileTime
4087 check_func_headers windows.h MapViewOfFile
4088 check_func_headers windows.h SetConsoleTextAttribute
4089 check_func_headers windows.h Sleep
4090 check_func_headers windows.h VirtualAlloc
4091
4092 check_header direct.h
4093 check_header dlfcn.h
4094 check_header dxva.h
4095 check_header dxva2api.h
4096 check_header io.h
4097 check_header mach/mach_time.h
4098 check_header malloc.h
4099 check_header poll.h
4100 check_header sys/mman.h
4101 check_header sys/param.h
4102 check_header sys/resource.h
4103 check_header sys/select.h
4104 check_header sys/time.h
4105 check_header sys/un.h
4106 check_header unistd.h
4107 check_header vdpau/vdpau.h
4108 check_header vdpau/vdpau_x11.h
4109 check_header VideoDecodeAcceleration/VDADecoder.h
4110 check_header windows.h
4111 check_header X11/extensions/XvMClib.h
4112
4113 check_lib2 "windows.h shellapi.h" CommandLineToArgvW -lshell32
4114 check_lib2 "windows.h wincrypt.h" CryptGenRandom -ladvapi32
4115 check_lib2 "windows.h psapi.h" GetProcessMemoryInfo -lpsapi
4116
4117 check_struct "sys/time.h sys/resource.h" "struct rusage" ru_maxrss
4118
4119 if ! disabled w32threads && ! enabled pthreads; then
4120 check_func_headers "windows.h process.h" _beginthreadex &&
4121 enable w32threads || disable w32threads
4122 fi
4123
4124 # check for some common methods of building with pthread support
4125 # do this before the optional library checks as some of them require pthreads
4126 if ! disabled pthreads && ! enabled w32threads; then
4127 enable pthreads
4128 if check_func pthread_join -pthread; then
4129 add_cflags -pthread
4130 add_extralibs -pthread
4131 elif check_func pthread_join -pthreads; then
4132 add_cflags -pthreads
4133 add_extralibs -pthreads
4134 elif check_func pthread_join -lpthreadGC2; then
4135 add_extralibs -lpthreadGC2
4136 elif check_lib pthread.h pthread_join -lpthread; then
4137 :
4138 elif ! check_func pthread_join; then
4139 disable pthreads
4140 fi
4141 fi
4142
4143 disabled zlib || check_lib zlib.h zlibVersion -lz || disable zlib
4144 disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
4145
4146 check_lib math.h sin -lm && LIBM="-lm"
4147 enabled vaapi && require vaapi va/va.h vaInitialize -lva
4148
4149 atan2f_args=2
4150 ldexpf_args=2
4151 powf_args=2
4152
4153 for func in $MATH_FUNCS; do
4154 eval check_mathfunc $func \${${func}_args:-1}
4155 done
4156
4157 # these are off by default, so fail if requested and not available
4158 enabled avisynth && { { check_header "avisynth/avisynth_c.h" && check_lib2 "windows.h" LoadLibrary; } ||
4159 { check_header "avxsynth/avxsynth_c.h" && check_lib2 "dlfcn.h" dlopen -ldl; } ||
4160 die "ERROR: LoadLibrary/dlopen not found, or avisynth header not found"; }
4161 enabled frei0r && { check_header frei0r.h || die "ERROR: frei0r.h header not found"; }
4162 enabled gnutls && require_pkg_config gnutls gnutls/gnutls.h gnutls_global_init
4163 enabled libbs2b && require_pkg_config libbs2b bs2b.h bs2b_open
4164 enabled libfaac && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
4165 enabled libfdk_aac && require libfdk_aac fdk-aac/aacenc_lib.h aacEncOpen -lfdk-aac
4166 enabled libfontconfig && require_pkg_config fontconfig "fontconfig/fontconfig.h" FcInit
4167 enabled libfreetype && require_pkg_config freetype2 "ft2build.h FT_FREETYPE_H" FT_Init_FreeType
4168 enabled libgsm && { for gsm_hdr in "gsm.h" "gsm/gsm.h"; do
4169 check_lib "${gsm_hdr}" gsm_create -lgsm && break;
4170 done || die "ERROR: libgsm not found"; }
4171 enabled libilbc && require libilbc ilbc.h WebRtcIlbcfix_InitDecode -lilbc
4172 enabled libmp3lame && require "libmp3lame >= 3.98.3" lame/lame.h lame_set_VBR_quality -lmp3lame
4173 enabled libopencore_amrnb && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb
4174 enabled libopencore_amrwb && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb
4175 enabled libopencv && require_pkg_config opencv opencv/cv.h cvCreateImageHeader
4176 enabled libopenjpeg && { { check_header openjpeg.h && check_lib2 openjpeg.h opj_version -lopenjpeg -DOPJ_STATIC; } ||
4177 { require_pkg_config libopenjpeg1 openjpeg.h opj_version -DOPJ_STATIC; } }
4178 enabled libopus && require_pkg_config opus opus_multistream.h opus_multistream_decoder_create
4179 enabled libpulse && require_pkg_config libpulse-simple pulse/simple.h pa_simple_new
4180 enabled librtmp && require_pkg_config librtmp librtmp/rtmp.h RTMP_Socket
4181 enabled libschroedinger && require_pkg_config schroedinger-1.0 schroedinger/schro.h schro_init
4182 enabled libspeex && require_pkg_config speex speex/speex.h speex_decoder_init -lspeex
4183 enabled libtheora && require libtheora theora/theoraenc.h th_info_init -ltheoraenc -ltheoradec -logg
4184 enabled libtwolame && require libtwolame twolame.h twolame_init -ltwolame
4185 enabled libvo_aacenc && require libvo_aacenc vo-aacenc/voAAC.h voGetAACEncAPI -lvo-aacenc
4186 enabled libvo_amrwbenc && require libvo_amrwbenc vo-amrwbenc/enc_if.h E_IF_init -lvo-amrwbenc
4187 enabled libvorbis && require libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
4188 enabled libvpx && {
4189 enabled libvpx_vp8_decoder && { check_lib2 "vpx/vpx_decoder.h vpx/vp8dx.h" vpx_codec_dec_init_ver -lvpx ||
4190 die "ERROR: libvpx decoder version must be >=0.9.1"; }
4191 enabled libvpx_vp8_encoder && { check_lib2 "vpx/vpx_encoder.h vpx/vp8cx.h" "vpx_codec_enc_init_ver VPX_CQ" -lvpx ||
4192 die "ERROR: libvpx encoder version must be >=0.9.6"; }
4193 enabled libvpx_vp9_decoder && { check_lib2 "vpx/vpx_decoder.h vpx/vp8dx.h" "vpx_codec_vp9_dx" -lvpx || disable libvpx_vp9_decoder; }
4194 enabled libvpx_vp9_encoder && { check_lib2 "vpx/vpx_encoder.h vpx/vp8cx.h" "vpx_codec_vp9_cx" -lvpx || disable libvpx_vp9_encoder; } }
4195 enabled libwavpack && require libwavpack wavpack/wavpack.h WavpackOpenFileOutput -lwavpack
4196 enabled libwebp && require_pkg_config libwebp webp/encode.h WebPGetEncoderVersion
4197 enabled libx264 && require_pkg_config x264 "stdint.h x264.h" x264_encoder_encode &&
4198 { check_cpp_condition x264.h "X264_BUILD >= 118" ||
4199 die "ERROR: libx264 version must be >= 0.118."; }
4200 enabled libx265 && require_pkg_config x265 x265.h x265_encoder_encode &&
4201 { check_cpp_condition x265.h "X265_BUILD >= 17" ||
4202 die "ERROR: libx265 version must be >= 17."; }
4203 enabled libxavs && require libxavs xavs.h xavs_encoder_encode -lxavs
4204 enabled libxvid && require libxvid xvid.h xvid_global -lxvidcore
4205 enabled openssl && { check_lib openssl/ssl.h SSL_library_init -lssl -lcrypto ||
4206 check_lib openssl/ssl.h SSL_library_init -lssl32 -leay32 ||
4207 check_lib openssl/ssl.h SSL_library_init -lssl -lcrypto -lws2_32 -lgdi32 ||
4208 die "ERROR: openssl not found"; }
4209
4210 if enabled gnutls; then
4211 { check_lib nettle/bignum.h nettle_mpz_get_str_256 -lnettle -lhogweed -lgmp && enable nettle; } ||
4212 { check_lib gcrypt.h gcry_mpi_new -lgcrypt && enable gcrypt; }
4213 fi
4214
4215 # libdc1394 check
4216 if enabled libdc1394; then
4217 { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
4218 enable libdc1394_2; } ||
4219 { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
4220 enable libdc1394_1; } ||
4221 die "ERROR: No version of libdc1394 found "
4222 fi
4223
4224 if check_pkg_config sdl SDL_events.h SDL_PollEvent; then
4225 check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
4226 check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) < 0x010300" $sdl_cflags &&
4227 enable sdl
4228 fi
4229
4230 pod2man --help > /dev/null 2>&1 && enable pod2man || disable pod2man
4231 texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
4232
4233 check_header linux/fb.h
4234 check_header linux/videodev2.h
4235 check_struct linux/videodev2.h "struct v4l2_frmivalenum" discrete
4236
4237 check_header sys/videoio.h
4238
4239 check_func_headers "windows.h vfw.h" capCreateCaptureWindow "$vfwcap_indev_extralibs"
4240 # check that WM_CAP_DRIVER_CONNECT is defined to the proper value
4241 # w32api 3.12 had it defined wrong
4242 check_cpp_condition vfw.h "WM_CAP_DRIVER_CONNECT > WM_USER" && enable vfwcap_defines
4243
4244 # check for ioctl_meteor.h, ioctl_bt848.h and alternatives
4245 { check_header dev/bktr/ioctl_meteor.h &&
4246 check_header dev/bktr/ioctl_bt848.h; } ||
4247 { check_header machine/ioctl_meteor.h &&
4248 check_header machine/ioctl_bt848.h; } ||
4249 { check_header dev/video/meteor/ioctl_meteor.h &&
4250 check_header dev/video/bktr/ioctl_bt848.h; } ||
4251 check_header dev/ic/bt8xx.h
4252
4253 check_header sndio.h
4254 check_header sys/soundcard.h
4255 check_header soundcard.h
4256
4257 enabled_any alsa_indev alsa_outdev &&
4258 check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
4259
4260 enabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack &&
4261 check_func jack_port_get_latency_range -ljack
4262
4263 enabled_any sndio_indev sndio_outdev && check_lib2 sndio.h sio_open -lsndio
4264
4265 if enabled libcdio; then
4266 check_lib2 "cdio/cdda.h cdio/paranoia.h" cdio_cddap_open -lcdio_paranoia -lcdio_cdda -lcdio ||
4267 check_lib2 "cdio/paranoia/cdda.h cdio/paranoia/paranoia.h" cdio_cddap_open -lcdio_paranoia -lcdio_cdda -lcdio
4268 fi
4269
4270 check_lib X11/Xlib.h XOpenDisplay -lX11 && enable xlib
4271
4272 enabled x11grab &&
4273 require Xext X11/extensions/XShm.h XShmCreateImage -lXext &&
4274 require Xfixes X11/extensions/Xfixes.h XFixesGetCursorImage -lXfixes &&
4275 { enabled xlib || die "ERROR: Xlib not found"; }
4276
4277 enabled vdpau &&
4278 check_cpp_condition vdpau/vdpau.h "defined VDP_DECODER_PROFILE_MPEG4_PART2_ASP" ||
4279 disable vdpau
4280
4281 enabled vdpau && enabled xlib &&
4282 check_func_headers "vdpau/vdpau.h vdpau/vdpau_x11.h" vdp_device_create_x11 -lvdpau &&
4283 prepend avconv_libs $($ldflags_filter "-lvdpau") &&
4284 enable vdpau_x11
4285
4286 enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel"
4287
4288 # add some useful compiler flags if supported
4289 check_cflags -Wdeclaration-after-statement
4290 check_cflags -Wall
4291 check_cflags -Wdisabled-optimization
4292 check_cflags -Wpointer-arith
4293 check_cflags -Wredundant-decls
4294 check_cflags -Wcast-qual
4295 check_cflags -Wwrite-strings
4296 check_cflags -Wtype-limits
4297 check_cflags -Wundef
4298 check_cflags -Wmissing-prototypes
4299 check_cflags -Wstrict-prototypes
4300 enabled extra_warnings && check_cflags -Winline
4301
4302 check_disable_warning(){
4303 warning_flag=-W${1#-Wno-}
4304 test_cflags $warning_flag && add_cflags $1
4305 }
4306
4307 check_disable_warning -Wno-parentheses
4308 check_disable_warning -Wno-switch
4309 check_disable_warning -Wno-format-zero-length
4310 check_disable_warning -Wno-pointer-sign
4311
4312 # add some linker flags
4313 check_ldflags -Wl,--warn-common
4314 check_ldflags -Wl,-rpath-link=libswscale:libavfilter:libavdevice:libavformat:libavcodec:libavutil:libavresample
4315 enabled rpath && add_ldexeflags -Wl,-rpath,$libdir
4316 test_ldflags -Wl,-Bsymbolic && append SHFLAGS -Wl,-Bsymbolic
4317
4318 # add some strip flags
4319 # -wN '..@*' is more selective than -x, but not available everywhere.
4320 check_stripflags -wN \'..@*\' || check_stripflags -x || strip='true'
4321
4322 enabled neon_clobber_test &&
4323 check_ldflags -Wl,--wrap,avcodec_open2 \
4324 -Wl,--wrap,avcodec_decode_audio4 \
4325 -Wl,--wrap,avcodec_decode_video2 \
4326 -Wl,--wrap,avcodec_decode_subtitle2 \
4327 -Wl,--wrap,avcodec_encode_audio2 \
4328 -Wl,--wrap,avcodec_encode_video2 \
4329 -Wl,--wrap,avcodec_encode_subtitle \
4330 -Wl,--wrap,avresample_convert ||
4331 disable neon_clobber_test
4332
4333 enabled xmm_clobber_test &&
4334 check_ldflags -Wl,--wrap,avcodec_open2 \
4335 -Wl,--wrap,avcodec_decode_audio4 \
4336 -Wl,--wrap,avcodec_decode_video2 \
4337 -Wl,--wrap,avcodec_decode_subtitle2 \
4338 -Wl,--wrap,avcodec_encode_audio2 \
4339 -Wl,--wrap,avcodec_encode_video2 \
4340 -Wl,--wrap,avcodec_encode_subtitle \
4341 -Wl,--wrap,avresample_convert \
4342 -Wl,--wrap,sws_scale ||
4343 disable xmm_clobber_test
4344
4345 echo "X{};" > $TMPV
4346 if test_ldflags -Wl,--version-script,$TMPV; then
4347 append SHFLAGS '-Wl,--version-script,\$(SUBDIR)lib\$(NAME).ver'
4348 check_cc <<EOF && enable symver_asm_label
4349 void ff_foo(void) __asm__ ("av_foo@VERSION");
4350 void ff_foo(void) { ${inline_asm+__asm__($quotes);} }
4351 EOF
4352 check_cc <<EOF && enable symver_gnu_asm
4353 __asm__(".symver ff_foo,av_foo@VERSION");
4354 void ff_foo(void) {}
4355 EOF
4356 fi
4357
4358 if [ -z "$optflags" ]; then
4359 if enabled small; then
4360 optflags=$cflags_size
4361 elif enabled optimizations; then
4362 optflags=$cflags_speed
4363 else
4364 optflags=$cflags_noopt
4365 fi
4366 fi
4367
4368 check_optflags(){
4369 check_cflags "$@"
4370 enabled lto && check_ldflags "$@"
4371 }
4372
4373
4374 if enabled lto; then
4375 test "$cc_type" != "$ld_type" && die "LTO requires same compiler and linker"
4376 check_cflags -flto
4377 check_ldflags -flto $cpuflags
4378 fi
4379