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