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