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