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