error_resilience: decouple ER from MpegEncContext
[FFMpeg-mirror/mplayer-patches.git] / configure
blobf65c53f1796ba8e9f2bae160480b9d87d13de23f
1 #!/bin/sh
3 # Libav configure script
5 # Copyright (c) 2000-2002 Fabrice Bellard
6 # Copyright (c) 2005-2008 Diego Biurrun
7 # Copyright (c) 2005-2008 Mans Rullgard
10 # Prevent locale nonsense from breaking basic text processing.
11 LC_ALL=C
12 export LC_ALL
14 # make sure we are running under a compatible shell
15 # try to make this part work with most shells
17 try_exec(){
18 echo "Trying shell $1"
19 type "$1" > /dev/null 2>&1 && exec "$@"
22 unset foo
23 (: ${foo%%bar}) 2> /dev/null
24 E1="$?"
26 (: ${foo?}) 2> /dev/null
27 E2="$?"
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" "$@"
36 if test "0$FF_CONF_EXEC" -lt 2; then
37 FF_CONF_EXEC=2
38 try_exec ksh "$0" "$@"
40 if test "0$FF_CONF_EXEC" -lt 3; then
41 FF_CONF_EXEC=3
42 try_exec /usr/xpg4/bin/sh "$0" "$@"
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."
54 exit 1
57 test -d /usr/xpg4/bin && PATH=/usr/xpg4/bin:$PATH
59 show_help(){
60 cat <<EOF
61 Usage: configure [options]
62 Options: [defaults in brackets after descriptions]
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
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 --libdir=DIR install libs in DIR [PREFIX/lib]
85 --shlibdir=DIR install shared libs in DIR [PREFIX/lib]
86 --incdir=DIR install includes in DIR [PREFIX/include]
87 --mandir=DIR install man page in DIR [PREFIX/share/man]
89 Licensing options:
90 --enable-gpl allow use of GPL code, the resulting libs
91 and binaries will be under GPL [no]
92 --enable-version3 upgrade (L)GPL to version 3 [no]
93 --enable-nonfree allow use of nonfree code, the resulting libs
94 and binaries will be unredistributable [no]
96 Configuration options:
97 --disable-static do not build static libraries [no]
98 --enable-shared build shared libraries [no]
99 --enable-small optimize for size instead of speed
100 --enable-runtime-cpudetect detect cpu capabilities at runtime (bigger binary)
101 --enable-gray enable full grayscale support (slower color)
102 --disable-swscale-alpha disable alpha channel support in swscale
103 --disable-all disable building components, libraries and programs
105 Program options:
106 --disable-programs do not build command line programs
107 --disable-avconv disable avconv build
108 --disable-avplay disable avplay build
109 --disable-avprobe disable avprobe build
110 --disable-avserver disable avserver build
112 Component options:
113 --disable-doc do not build documentation
114 --disable-avdevice disable libavdevice build
115 --disable-avcodec disable libavcodec build
116 --disable-avformat disable libavformat build
117 --disable-avutil disable libavutil build
118 --disable-swscale disable libswscale build
119 --disable-avfilter disable video filter support [no]
120 --disable-avresample disable libavresample build [no]
121 --disable-pthreads disable pthreads [auto]
122 --disable-w32threads disable Win32 threads [auto]
123 --enable-x11grab enable X11 grabbing [no]
124 --disable-network disable network support [no]
125 --disable-dct disable DCT code
126 --disable-lsp disable LSP code
127 --disable-lzo disable LZO decoder code
128 --disable-mdct disable MDCT code
129 --disable-rdft disable RDFT code
130 --disable-fft disable FFT code
132 Hardware accelerators:
133 --enable-dxva2 enable DXVA2 code
134 --enable-vaapi enable VAAPI code
135 --enable-vda enable VDA code
136 --enable-vdpau enable VDPAU code
138 Individual component options:
139 --disable-everything disable all components listed below
140 --disable-encoder=NAME disable encoder NAME
141 --enable-encoder=NAME enable encoder NAME
142 --disable-encoders disable all encoders
143 --disable-decoder=NAME disable decoder NAME
144 --enable-decoder=NAME enable decoder NAME
145 --disable-decoders disable all decoders
146 --disable-hwaccel=NAME disable hwaccel NAME
147 --enable-hwaccel=NAME enable hwaccel NAME
148 --disable-hwaccels disable all hwaccels
149 --disable-muxer=NAME disable muxer NAME
150 --enable-muxer=NAME enable muxer NAME
151 --disable-muxers disable all muxers
152 --disable-demuxer=NAME disable demuxer NAME
153 --enable-demuxer=NAME enable demuxer NAME
154 --disable-demuxers disable all demuxers
155 --enable-parser=NAME enable parser NAME
156 --disable-parser=NAME disable parser NAME
157 --disable-parsers disable all parsers
158 --enable-bsf=NAME enable bitstream filter NAME
159 --disable-bsf=NAME disable bitstream filter NAME
160 --disable-bsfs disable all bitstream filters
161 --enable-protocol=NAME enable protocol NAME
162 --disable-protocol=NAME disable protocol NAME
163 --disable-protocols disable all protocols
164 --enable-indev=NAME enable input device NAME
165 --disable-indev=NAME disable input device NAME
166 --disable-indevs disable input devices
167 --enable-outdev=NAME enable output device NAME
168 --disable-outdev=NAME disable output device NAME
169 --disable-outdevs disable output devices
170 --disable-devices disable all devices
171 --enable-filter=NAME enable filter NAME
172 --disable-filter=NAME disable filter NAME
173 --disable-filters disable all filters
175 External library support:
176 --enable-avisynth enable reading of AVISynth script files [no]
177 --enable-bzlib enable bzlib [autodetect]
178 --enable-frei0r enable frei0r video filtering
179 --enable-gnutls enable gnutls [no]
180 --enable-libcdio enable audio CD grabbing with libcdio
181 --enable-libdc1394 enable IIDC-1394 grabbing using libdc1394
182 and libraw1394 [no]
183 --enable-libfaac enable AAC encoding via libfaac [no]
184 --enable-libfdk-aac enable AAC encoding via libfdk-aac [no]
185 --enable-libfreetype enable libfreetype [no]
186 --enable-libgsm enable GSM de/encoding via libgsm [no]
187 --enable-libilbc enable iLBC de/encoding via libilbc [no]
188 --enable-libmp3lame enable MP3 encoding via libmp3lame [no]
189 --enable-libopencore-amrnb enable AMR-NB de/encoding via libopencore-amrnb [no]
190 --enable-libopencore-amrwb enable AMR-WB decoding via libopencore-amrwb [no]
191 --enable-libopencv enable video filtering via libopencv [no]
192 --enable-libopenjpeg enable JPEG 2000 de/encoding via OpenJPEG [no]
193 --enable-libopus enable Opus decoding via libopus [no]
194 --enable-libpulse enable Pulseaudio input via libpulse [no]
195 --enable-librtmp enable RTMP[E] support via librtmp [no]
196 --enable-libschroedinger enable Dirac de/encoding via libschroedinger [no]
197 --enable-libspeex enable Speex de/encoding via libspeex [no]
198 --enable-libtheora enable Theora encoding via libtheora [no]
199 --enable-libvo-aacenc enable AAC encoding via libvo-aacenc [no]
200 --enable-libvo-amrwbenc enable AMR-WB encoding via libvo-amrwbenc [no]
201 --enable-libvorbis enable Vorbis encoding via libvorbis [no]
202 --enable-libvpx enable VP8 and VP9 de/encoding via libvpx [no]
203 --enable-libx264 enable H.264 encoding via x264 [no]
204 --enable-libxavs enable AVS encoding via xavs [no]
205 --enable-libxvid enable Xvid encoding via xvidcore,
206 native MPEG-4/Xvid encoder exists [no]
207 --enable-openssl enable openssl [no]
208 --enable-zlib enable zlib [autodetect]
210 Advanced options (experts only):
211 --cross-prefix=PREFIX use PREFIX for compilation tools [$cross_prefix]
212 --enable-cross-compile assume a cross-compiler is used
213 --sysroot=PATH root of cross-build tree
214 --sysinclude=PATH location of cross-build system headers
215 --target-os=OS compiler targets OS [$target_os]
216 --target-exec=CMD command to run executables on target
217 --target-path=DIR path to view of build directory on target
218 --toolchain=NAME set tool defaults according to NAME
219 --nm=NM use nm tool
220 --ar=AR use archive tool AR [$ar_default]
221 --as=AS use assembler AS [$as_default]
222 --cc=CC use C compiler CC [$cc_default]
223 --dep-cc=DEPCC use dependency generator DEPCC [$cc_default]
224 --ld=LD use linker LD
225 --host-cc=HOSTCC use host C compiler HOSTCC
226 --host-cflags=HCFLAGS use HCFLAGS when compiling for host
227 --host-ld=HOSTLD use host linker HOSTLD
228 --host-ldflags=HLDFLAGS use HLDFLAGS when linking for host
229 --host-libs=HLIBS use libs HLIBS when linking for host
230 --host-os=OS compiler host OS [$target_os]
231 --extra-cflags=ECFLAGS add ECFLAGS to CFLAGS [$CFLAGS]
232 --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]
233 --extra-libs=ELIBS add ELIBS [$ELIBS]
234 --extra-version=STRING version string suffix []
235 --optflags=OPTFLAGS override optimization-related compiler flags
236 --build-suffix=SUFFIX library name suffix []
237 --malloc-prefix=PREFIX prefix malloc and related names with PREFIX
238 --arch=ARCH select architecture [$arch]
239 --cpu=CPU select the minimum required CPU (affects
240 instruction selection, may crash on older CPUs)
241 --enable-pic build position-independent code
242 --enable-sram allow use of on-chip SRAM
243 --enable-thumb compile for Thumb instruction set
244 --disable-symver disable symbol versioning
245 --enable-hardcoded-tables use hardcoded tables instead of runtime generation
246 --disable-safe-bitstream-reader
247 disable buffer boundary checking in bitreaders
248 (faster, but may crash)
249 --enable-memalign-hack emulate memalign, interferes with memory debuggers
250 --enable-lto use link-time optimization
252 Optimization options (experts only):
253 --disable-asm disable all assembler optimizations
254 --disable-altivec disable AltiVec optimizations
255 --disable-amd3dnow disable 3DNow! optimizations
256 --disable-amd3dnowext disable 3DNow! extended optimizations
257 --disable-mmx disable MMX optimizations
258 --disable-mmxext disable MMXEXT optimizations
259 --disable-sse disable SSE optimizations
260 --disable-sse2 disable SSE2 optimizations
261 --disable-sse3 disable SSE3 optimizations
262 --disable-ssse3 disable SSSE3 optimizations
263 --disable-sse4 disable SSE4 optimizations
264 --disable-sse42 disable SSE4.2 optimizations
265 --disable-avx disable AVX optimizations
266 --disable-fma4 disable FMA4 optimizations
267 --disable-armv5te disable armv5te optimizations
268 --disable-armv6 disable armv6 optimizations
269 --disable-armv6t2 disable armv6t2 optimizations
270 --disable-vfp disable VFP optimizations
271 --disable-neon disable NEON optimizations
272 --disable-vis disable VIS optimizations
273 --disable-inline-asm disable use of inline assembler
274 --disable-yasm disable use of yasm assembler
276 Developer options (useful when working on Libav itself):
277 --disable-debug disable debugging symbols
278 --enable-debug=LEVEL set the debug level [$debuglevel]
279 --disable-optimizations disable compiler optimizations
280 --enable-extra-warnings enable more compiler warnings
281 --samples=PATH location of test samples for FATE, if not set use
282 \$LIBAV_SAMPLES at make invocation time.
283 --enable-xmm-clobber-test check XMM registers for clobbering (Win64-only;
284 should be used only for debugging purposes)
285 --enable-random randomly enable/disable components
286 --disable-random
287 --enable-random=LIST randomly enable/disable specific components or
288 --disable-random=LIST component groups. LIST is a comma-separated list
289 of NAME[:PROB] entries where NAME is a component
290 (group) and PROB the probability associated with
291 NAME (default 0.5).
292 --random-seed=VALUE seed value for --enable/disable-random
294 NOTE: Object files are built at the place where configure is launched.
296 exit 0
299 quotes='""'
301 log(){
302 echo "$@" >> $logfile
305 log_file(){
306 log BEGIN $1
307 pr -n -t $1 >> $logfile
308 log END $1
311 echolog(){
312 log "$@"
313 echo "$@"
316 warn(){
317 log "WARNING: $*"
318 WARNINGS="${WARNINGS}WARNING: $*\n"
321 die(){
322 echolog "$@"
323 cat <<EOF
325 If you think configure made a mistake, make sure you are using the latest
326 version from Git. If the latest version fails, report the problem to the
327 libav-user@libav.org mailing list or IRC #libav on irc.freenode.net.
329 if disabled logging; then
330 cat <<EOF
331 Rerun configure with logging enabled (do not use --disable-logging), and
332 include the log this produces with your report.
334 else
335 cat <<EOF
336 Include the log file "$logfile" produced by configure as this will help
337 solving the problem.
340 exit 1
343 # Avoid locale weirdness, besides we really just want to translate ASCII.
344 toupper(){
345 echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
348 tolower(){
349 echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
352 c_escape(){
353 echo "$*" | sed 's/["\\]/\\\0/g'
356 sh_quote(){
357 v=$(echo "$1" | sed "s/'/'\\\\''/g")
358 test "x$v" = "x${v#*[!A-Za-z0-9_/.+-]}" || v="'$v'"
359 echo "$v"
362 cleanws(){
363 echo "$@" | sed 's/^ *//;s/ */ /g;s/ *$//'
366 filter(){
367 pat=$1
368 shift
369 for v; do
370 eval "case $v in $pat) echo $v ;; esac"
371 done
374 filter_out(){
375 pat=$1
376 shift
377 for v; do
378 eval "case $v in $pat) ;; *) echo $v ;; esac"
379 done
382 map(){
383 m=$1
384 shift
385 for v; do eval $m; done
388 add_suffix(){
389 suffix=$1
390 shift
391 for v; do echo ${v}${suffix}; done
394 set_all(){
395 value=$1
396 shift
397 for var in $*; do
398 eval $var=$value
399 done
402 set_weak(){
403 value=$1
404 shift
405 for var; do
406 eval : \${$var:=$value}
407 done
410 set_safe(){
411 var=$1
412 shift
413 eval $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')='$*'
416 get_safe(){
417 eval echo \$$(echo "$1" | sed 's/[^A-Za-z0-9_]/_/g')
420 pushvar(){
421 for var in $*; do
422 eval level=\${${var}_level:=0}
423 eval ${var}_${level}="\$$var"
424 eval ${var}_level=$(($level+1))
425 done
428 popvar(){
429 for var in $*; do
430 eval level=\${${var}_level:-0}
431 test $level = 0 && continue
432 eval level=$(($level-1))
433 eval $var="\${${var}_${level}}"
434 eval ${var}_level=$level
435 eval unset ${var}_${level}
436 done
439 enable(){
440 set_all yes $*
443 disable(){
444 set_all no $*
447 enable_weak(){
448 set_weak yes $*
451 disable_weak(){
452 set_weak no $*
455 enable_safe(){
456 for var; do
457 enable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
458 done
461 disable_safe(){
462 for var; do
463 disable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
464 done
467 do_enable_deep(){
468 for var; do
469 enabled $var && continue
470 eval sel="\$${var}_select"
471 eval sgs="\$${var}_suggest"
472 pushvar var sgs
473 enable_deep $sel
474 popvar sgs
475 enable_deep_weak $sgs
476 popvar var
477 done
480 enable_deep(){
481 do_enable_deep $*
482 enable $*
485 enable_deep_weak(){
486 do_enable_deep $*
487 enable_weak $*
490 enabled(){
491 test "${1#!}" = "$1" && op== || op=!=
492 eval test "x\$${1#!}" $op "xyes"
495 disabled(){
496 test "${1#!}" = "$1" && op== || op=!=
497 eval test "x\$${1#!}" $op "xno"
500 enabled_all(){
501 for opt; do
502 enabled $opt || return 1
503 done
506 disabled_all(){
507 for opt; do
508 disabled $opt || return 1
509 done
512 enabled_any(){
513 for opt; do
514 enabled $opt && return 0
515 done
518 disabled_any(){
519 for opt; do
520 disabled $opt && return 0
521 done
522 return 1
525 set_default(){
526 for opt; do
527 eval : \${$opt:=\$${opt}_default}
528 done
531 is_in(){
532 value=$1
533 shift
534 for var in $*; do
535 [ $var = $value ] && return 0
536 done
537 return 1
540 do_check_deps(){
541 for cfg; do
542 cfg="${cfg#!}"
543 enabled ${cfg}_checking && die "Circular dependency for $cfg."
544 disabled ${cfg}_checking && continue
545 enable ${cfg}_checking
546 append allopts $cfg
548 eval dep_all="\$${cfg}_deps"
549 eval dep_any="\$${cfg}_deps_any"
550 eval dep_sel="\$${cfg}_select"
551 eval dep_sgs="\$${cfg}_suggest"
552 eval dep_ifa="\$${cfg}_if"
553 eval dep_ifn="\$${cfg}_if_any"
555 pushvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
556 do_check_deps $dep_all $dep_any $dep_sel $dep_sgs $dep_ifa $dep_ifn
557 popvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
559 [ -n "$dep_ifa" ] && { enabled_all $dep_ifa && enable_weak $cfg; }
560 [ -n "$dep_ifn" ] && { enabled_any $dep_ifn && enable_weak $cfg; }
561 enabled_all $dep_all || disable $cfg
562 enabled_any $dep_any || disable $cfg
563 disabled_any $dep_sel && disable $cfg
565 if enabled $cfg; then
566 enable_deep $dep_sel
567 enable_deep_weak $dep_sgs
570 disable ${cfg}_checking
571 done
574 check_deps(){
575 unset allopts
577 do_check_deps "$@"
579 for cfg in $allopts; do
580 enabled $cfg || continue
581 eval dep_extralibs="\$${cfg}_extralibs"
582 test -n "$dep_extralibs" && add_extralibs $dep_extralibs
583 done
586 print_config(){
587 pfx=$1
588 files=$2
589 shift 2
590 map 'eval echo "$v \${$v:-no}"' "$@" |
591 awk "BEGIN { split(\"$files\", files) }
593 c = \"$pfx\" toupper(\$1);
594 v = \$2;
595 sub(/yes/, 1, v);
596 sub(/no/, 0, v);
597 for (f in files) {
598 file = files[f];
599 if (file ~ /\\.h\$/) {
600 printf(\"#define %s %d\\n\", c, v) >>file;
601 } else if (file ~ /\\.asm\$/) {
602 printf(\"%%define %s %d\\n\", c, v) >>file;
603 } else if (file ~ /\\.mak\$/) {
604 n = -v ? \"\" : \"!\";
605 printf(\"%s%s=yes\\n\", n, c) >>file;
611 print_enabled(){
612 suf=$1
613 shift
614 for v; do
615 enabled $v && printf "%s\n" ${v%$suf};
616 done
619 append(){
620 var=$1
621 shift
622 eval "$var=\"\$$var $*\""
625 prepend(){
626 var=$1
627 shift
628 eval "$var=\"$* \$$var\""
631 add_cppflags(){
632 append CPPFLAGS "$@"
635 add_cflags(){
636 append CFLAGS $($cflags_filter "$@")
639 add_asflags(){
640 append ASFLAGS $($asflags_filter "$@")
643 add_ldflags(){
644 append LDFLAGS $($ldflags_filter "$@")
647 add_extralibs(){
648 prepend extralibs $($ldflags_filter "$@")
651 add_host_cflags(){
652 append host_cflags $($host_cflags_filter "$@")
655 add_host_ldflags(){
656 append host_ldflags $($host_ldflags_filter "$@")
659 add_compat(){
660 append compat_objs $1
661 shift
662 map 'add_cppflags -D$v' "$@"
665 check_cmd(){
666 log "$@"
667 "$@" >> $logfile 2>&1
670 cc_o(){
671 eval printf '%s\\n' $CC_O
674 cc_e(){
675 eval printf '%s\\n' $CC_E
678 check_cc(){
679 log check_cc "$@"
680 cat > $TMPC
681 log_file $TMPC
682 check_cmd $cc $CPPFLAGS $CFLAGS "$@" $CC_C $(cc_o $TMPO) $TMPC
685 check_cpp(){
686 log check_cpp "$@"
687 cat > $TMPC
688 log_file $TMPC
689 check_cmd $cc $CPPFLAGS $CFLAGS "$@" $(cc_e $TMPO) $TMPC
692 as_o(){
693 eval printf '%s\\n' $AS_O
696 check_as(){
697 log check_as "$@"
698 cat > $TMPS
699 log_file $TMPS
700 check_cmd $as $CPPFLAGS $ASFLAGS "$@" $AS_C $(as_o $TMPO) $TMPS
703 check_inline_asm(){
704 log check_inline_asm "$@"
705 name="$1"
706 code="$2"
707 shift 2
708 disable $name
709 check_cc "$@" <<EOF && enable $name
710 void foo(void){ __asm__ volatile($code); }
714 check_insn(){
715 log check_insn "$@"
716 check_inline_asm ${1}_inline "\"$2\""
717 echo "$2" | check_as && enable ${1}_external || disable ${1}_external
720 check_yasm(){
721 log check_yasm "$@"
722 echo "$1" > $TMPS
723 log_file $TMPS
724 shift 1
725 check_cmd $yasmexe $YASMFLAGS "$@" -o $TMPO $TMPS
728 ld_o(){
729 eval printf '%s\\n' $LD_O
732 check_ld(){
733 log check_ld "$@"
734 flags=$(filter_out '-l*' "$@")
735 libs=$(filter '-l*' "$@")
736 check_cc $($cflags_filter $flags) || return
737 flags=$($ldflags_filter $flags)
738 libs=$($ldflags_filter $libs)
739 check_cmd $ld $LDFLAGS $flags $(ld_o $TMPE) $TMPO $libs $extralibs
742 check_code(){
743 log check_code "$@"
744 check=$1
745 headers=$2
746 code=$3
747 shift 3
749 for hdr in $headers; do
750 echo "#include <$hdr>"
751 done
752 echo "int main(void) { $code; return 0; }"
753 } | check_$check "$@"
756 check_cppflags(){
757 log check_cppflags "$@"
758 check_cc "$@" <<EOF && append CPPFLAGS "$@"
759 int x;
763 check_cflags(){
764 log check_cflags "$@"
765 set -- $($cflags_filter "$@")
766 check_cc "$@" <<EOF && append CFLAGS "$@"
767 int x;
771 test_ldflags(){
772 log test_ldflags "$@"
773 check_ld "$@" <<EOF
774 int main(void){ return 0; }
778 check_ldflags(){
779 log check_ldflags "$@"
780 test_ldflags "$@" && add_ldflags "$@"
783 check_header(){
784 log check_header "$@"
785 header=$1
786 shift
787 disable_safe $header
788 check_cpp "$@" <<EOF && enable_safe $header
789 #include <$header>
790 int x;
794 check_func(){
795 log check_func "$@"
796 func=$1
797 shift
798 disable $func
799 check_ld "$@" <<EOF && enable $func
800 extern int $func();
801 int main(void){ $func(); }
805 check_mathfunc(){
806 log check_mathfunc "$@"
807 func=$1
808 narg=$2
809 shift 2
810 test $narg = 2 && args="f, g" || args="f"
811 disable $func
812 check_ld "$@" <<EOF && enable $func
813 #include <math.h>
814 float foo(float f, float g) { return $func($args); }
815 int main(void){ return 0; }
819 check_func_headers(){
820 log check_func_headers "$@"
821 headers=$1
822 funcs=$2
823 shift 2
825 for hdr in $headers; do
826 echo "#include <$hdr>"
827 done
828 for func in $funcs; do
829 echo "long check_$func(void) { return (long) $func; }"
830 done
831 echo "int main(void) { return 0; }"
832 } | check_ld "$@" && enable $funcs && enable_safe $headers
835 check_cpp_condition(){
836 log check_cpp_condition "$@"
837 header=$1
838 condition=$2
839 shift 2
840 check_cpp "$@" <<EOF
841 #include <$header>
842 #if !($condition)
843 #error "unsatisfied condition: $condition"
844 #endif
848 check_lib(){
849 log check_lib "$@"
850 header="$1"
851 func="$2"
852 shift 2
853 check_header $header && check_func $func "$@" && add_extralibs "$@"
856 check_lib2(){
857 log check_lib2 "$@"
858 headers="$1"
859 funcs="$2"
860 shift 2
861 check_func_headers "$headers" "$funcs" "$@" && add_extralibs "$@"
864 check_pkg_config(){
865 log check_pkg_config "$@"
866 pkg="$1"
867 headers="$2"
868 funcs="$3"
869 shift 3
870 $pkg_config --exists $pkg || return
871 pkg_cflags=$($pkg_config --cflags $pkg)
872 pkg_libs=$($pkg_config --libs $pkg)
873 check_func_headers "$headers" "$funcs" $pkg_cflags $pkg_libs "$@" &&
874 set_safe ${pkg}_cflags $pkg_cflags &&
875 set_safe ${pkg}_libs $pkg_libs
878 check_exec(){
879 check_ld "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
882 check_exec_crash(){
883 code=$(cat)
885 # exit() is not async signal safe. _Exit (C99) and _exit (POSIX)
886 # are safe but may not be available everywhere. Thus we use
887 # raise(SIGTERM) instead. The check is run in a subshell so we
888 # can redirect the "Terminated" message from the shell. SIGBUS
889 # is not defined by standard C so it is used conditionally.
891 (check_exec "$@") >> $logfile 2>&1 <<EOF
892 #include <signal.h>
893 static void sighandler(int sig){
894 raise(SIGTERM);
896 int foo(void){
897 $code
899 int main(void){
900 signal(SIGILL, sighandler);
901 signal(SIGFPE, sighandler);
902 signal(SIGSEGV, sighandler);
903 #ifdef SIGBUS
904 signal(SIGBUS, sighandler);
905 #endif
906 foo();
911 check_type(){
912 log check_type "$@"
913 headers=$1
914 type=$2
915 shift 2
916 disable_safe "$type"
917 check_code cc "$headers" "$type v" "$@" && enable_safe "$type"
920 check_struct(){
921 log check_type "$@"
922 headers=$1
923 struct=$2
924 member=$3
925 shift 3
926 disable_safe "${struct}_${member}"
927 check_code cc "$headers" "const void *p = &(($struct *)0)->$member" "$@" &&
928 enable_safe "${struct}_${member}"
931 require(){
932 name="$1"
933 header="$2"
934 func="$3"
935 shift 3
936 check_lib $header $func "$@" || die "ERROR: $name not found"
939 require2(){
940 name="$1"
941 headers="$2"
942 func="$3"
943 shift 3
944 check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
947 require_pkg_config(){
948 pkg="$1"
949 check_pkg_config "$@" || die "ERROR: $pkg not found"
950 add_cflags $(get_safe ${pkg}_cflags)
951 add_extralibs $(get_safe ${pkg}_libs)
954 hostcc_o(){
955 eval printf '%s\\n' $HOSTCC_O
958 check_host_cc(){
959 log check_host_cc "$@"
960 cat > $TMPC
961 log_file $TMPC
962 check_cmd $host_cc $host_cflags "$@" $HOSTCC_C $(hostcc_o $TMPO) $TMPC
965 check_host_cflags(){
966 log check_host_cflags "$@"
967 set -- $($host_cflags_filter "$@")
968 check_host_cc "$@" <<EOF && append host_cflags "$@"
969 int x;
973 apply(){
974 file=$1
975 shift
976 "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
979 cp_if_changed(){
980 cmp -s "$1" "$2" && echo "$2 is unchanged" && return
981 mkdir -p "$(dirname $2)"
982 $cp_f "$1" "$2"
985 # CONFIG_LIST contains configurable options, while HAVE_LIST is for
986 # system-dependent things.
988 COMPONENT_LIST="
989 bsfs
990 decoders
991 demuxers
992 encoders
993 filters
994 hwaccels
995 indevs
996 muxers
997 outdevs
998 parsers
999 protocols
1002 HWACCEL_LIST="
1003 dxva2
1004 vaapi
1006 vdpau
1008 LIBRARY_LIST="
1009 avcodec
1010 avdevice
1011 avfilter
1012 avformat
1013 avresample
1014 avutil
1015 swscale
1018 PROGRAM_LIST="
1019 avconv
1020 avplay
1021 avprobe
1022 avserver
1025 CONFIG_LIST="
1026 $COMPONENT_LIST
1027 $HWACCEL_LIST
1028 $LIBRARY_LIST
1029 $PROGRAM_LIST
1030 avisynth
1031 bzlib
1035 frei0r
1036 gnutls
1038 gray
1039 hardcoded_tables
1040 libcdio
1041 libdc1394
1042 libfaac
1043 libfdk_aac
1044 libfreetype
1045 libgsm
1046 libilbc
1047 libmp3lame
1048 libopencore_amrnb
1049 libopencore_amrwb
1050 libopencv
1051 libopenjpeg
1052 libopus
1053 libpulse
1054 librtmp
1055 libschroedinger
1056 libspeex
1057 libtheora
1058 libvo_aacenc
1059 libvo_amrwbenc
1060 libvorbis
1061 libvpx
1062 libx264
1063 libxavs
1064 libxvid
1067 mdct
1068 memalign_hack
1069 network
1070 nonfree
1071 openssl
1073 rdft
1074 runtime_cpudetect
1075 safe_bitstream_reader
1076 shared
1077 small
1078 sram
1079 static
1080 swscale_alpha
1081 thumb
1082 version3
1083 xmm_clobber_test
1084 x11grab
1085 zlib
1088 THREADS_LIST='
1089 pthreads
1090 w32threads
1093 ARCH_LIST='
1094 aarch64
1095 alpha
1097 avr32
1098 avr32_ap
1099 avr32_uc
1100 bfin
1101 ia64
1102 m68k
1103 mips
1104 mips64
1105 parisc
1107 ppc64
1108 s390
1110 sparc
1111 sparc64
1112 tilegx
1113 tilepro
1114 tomi
1116 x86_32
1117 x86_64
1120 ARCH_EXT_LIST_ARM='
1121 armv5te
1122 armv6
1123 armv6t2
1124 neon
1126 vfpv3
1129 ARCH_EXT_LIST_X86='
1130 amd3dnow
1131 amd3dnowext
1133 fma4
1135 mmxext
1137 sse2
1138 sse3
1139 sse4
1140 sse42
1141 ssse3
1144 ARCH_EXT_LIST="
1145 $ARCH_EXT_LIST_ARM
1146 $ARCH_EXT_LIST_X86
1147 altivec
1148 ppc4xx
1152 HAVE_LIST_CMDLINE='
1153 inline_asm
1154 symver
1155 yasm
1158 HAVE_LIST_PUB='
1159 bigendian
1160 fast_unaligned
1163 MATH_FUNCS="
1164 atanf
1165 atan2f
1166 cbrtf
1167 cosf
1168 exp2
1169 exp2f
1170 expf
1171 isinf
1172 isnan
1173 ldexpf
1174 llrint
1175 llrintf
1176 log2
1177 log2f
1178 log10f
1179 lrint
1180 lrintf
1181 powf
1182 rint
1183 round
1184 roundf
1185 sinf
1186 trunc
1187 truncf
1190 HAVE_LIST="
1191 $ARCH_EXT_LIST
1192 $(add_suffix _external $ARCH_EXT_LIST)
1193 $(add_suffix _inline $ARCH_EXT_LIST)
1194 $HAVE_LIST_CMDLINE
1195 $HAVE_LIST_PUB
1196 $THREADS_LIST
1197 $MATH_FUNCS
1198 aligned_malloc
1199 aligned_stack
1200 alsa_asoundlib_h
1201 altivec_h
1202 arpa_inet_h
1203 asm_mod_q
1204 asm_mod_y
1205 attribute_may_alias
1206 attribute_packed
1207 cdio_paranoia_h
1208 cdio_paranoia_paranoia_h
1209 closesocket
1210 cmov
1211 CommandLineToArgvW
1212 cpunop
1213 CryptGenRandom
1214 dcbzl
1215 dev_bktr_ioctl_bt848_h
1216 dev_bktr_ioctl_meteor_h
1217 dev_ic_bt8xx_h
1218 dev_video_bktr_ioctl_bt848_h
1219 dev_video_meteor_ioctl_meteor_h
1220 direct_h
1221 dlfcn_h
1222 dlopen
1223 dos_paths
1224 dxva_h
1225 ebp_available
1226 ebx_available
1227 fast_64bit
1228 fast_clz
1229 fast_cmov
1230 fcntl
1231 fork
1232 getaddrinfo
1233 gethrtime
1234 getopt
1235 GetProcessAffinityMask
1236 GetProcessMemoryInfo
1237 GetProcessTimes
1238 GetSystemTimeAsFileTime
1239 getrusage
1240 getservbyport
1241 gettimeofday
1242 gnu_as
1243 gsm_h
1244 ibm_asm
1245 inet_aton
1246 io_h
1247 isatty
1248 jack_port_get_latency_range
1249 ldbrx
1250 libdc1394_1
1251 libdc1394_2
1252 local_aligned_16
1253 local_aligned_8
1254 localtime_r
1255 loongson
1256 machine_ioctl_bt848_h
1257 machine_ioctl_meteor_h
1258 malloc_h
1259 MapViewOfFile
1260 memalign
1261 mkstemp
1262 mm_empty
1263 mmap
1264 mprotect
1265 msvcrt
1266 nanosleep
1267 poll_h
1268 posix_memalign
1269 rdtsc
1270 sched_getaffinity
1272 sdl_video_size
1273 SetConsoleTextAttribute
1274 setmode
1275 setrlimit
1276 Sleep
1277 sndio_h
1278 socklen_t
1279 soundcard_h
1280 strerror_r
1281 strptime
1282 strtok_r
1283 struct_addrinfo
1284 struct_group_source_req
1285 struct_ip_mreq_source
1286 struct_ipv6_mreq
1287 struct_pollfd
1288 struct_rusage_ru_maxrss
1289 struct_sockaddr_in6
1290 struct_sockaddr_sa_len
1291 struct_sockaddr_storage
1292 struct_v4l2_frmivalenum_discrete
1293 symver_asm_label
1294 symver_gnu_asm
1295 sysconf
1296 sysctl
1297 sys_mman_h
1298 sys_param_h
1299 sys_resource_h
1300 sys_select_h
1301 sys_soundcard_h
1302 sys_time_h
1303 sys_videoio_h
1304 threads
1305 unistd_h
1306 usleep
1307 vfp_args
1308 VirtualAlloc
1309 windows_h
1310 winsock2_h
1311 xform_asm
1312 xmm_clobbers
1315 # options emitted with CONFIG_ prefix but not available on the command line
1316 CONFIG_EXTRA="
1317 aandcttables
1318 ac3dsp
1319 error_resilience
1320 gcrypt
1321 golomb
1322 gplv3
1323 h264chroma
1324 h264dsp
1325 h264pred
1326 h264qpel
1327 huffman
1328 lgplv3
1330 mpegaudio
1331 mpegaudiodsp
1332 mpegvideo
1333 mpegvideoenc
1334 nettle
1335 rangecoder
1336 rtpdec
1337 rtpenc_chain
1338 sinewin
1339 videodsp
1340 vp3dsp
1343 CMDLINE_SELECT="
1344 $ARCH_EXT_LIST
1345 $CONFIG_LIST
1346 $HAVE_LIST_CMDLINE
1347 $THREADS_LIST
1349 cross_compile
1350 debug
1351 extra_warnings
1352 logging
1354 optimizations
1357 PATHS_LIST='
1358 bindir
1359 datadir
1360 incdir
1361 libdir
1362 mandir
1363 prefix
1364 shlibdir
1367 CMDLINE_SET="
1368 $PATHS_LIST
1370 arch
1372 build_suffix
1375 cross_prefix
1376 dep_cc
1377 extra_version
1378 host_cc
1379 host_cflags
1380 host_ld
1381 host_ldflags
1382 host_libs
1383 host_os
1385 logfile
1386 malloc_prefix
1388 optflags
1389 pkg_config
1390 random_seed
1391 samples
1392 sysinclude
1393 sysroot
1394 target_exec
1395 target_os
1396 target_path
1397 toolchain
1400 CMDLINE_APPEND="
1401 extra_cflags
1404 # code dependency declarations
1406 # architecture extensions
1408 armv5te_deps="arm"
1409 armv6_deps="arm"
1410 armv6t2_deps="arm"
1411 neon_deps="arm"
1412 vfp_deps="arm"
1413 vfpv3_deps="vfp"
1415 map 'eval ${v}_inline_deps=inline_asm' $ARCH_EXT_LIST_ARM
1417 altivec_deps="ppc"
1418 ppc4xx_deps="ppc"
1420 vis_deps="sparc"
1422 x86_64_suggest="cmov fast_cmov"
1424 amd3dnow_deps="mmx"
1425 amd3dnowext_deps="amd3dnow"
1426 mmx_deps="x86"
1427 mmxext_deps="mmx"
1428 sse_deps="mmxext"
1429 sse2_deps="sse"
1430 sse3_deps="sse2"
1431 ssse3_deps="sse3"
1432 sse4_deps="ssse3"
1433 sse42_deps="sse4"
1434 avx_deps="sse42"
1435 fma4_deps="avx"
1437 mmx_external_deps="yasm"
1438 mmx_inline_deps="inline_asm"
1439 mmx_suggest="mmx_external mmx_inline"
1441 for ext in $(filter_out mmx $ARCH_EXT_LIST_X86); do
1442 eval dep=\$${ext}_deps
1443 eval ${ext}_external_deps='"${dep}_external"'
1444 eval ${ext}_inline_deps='"${dep}_inline"'
1445 eval ${ext}_suggest='"${ext}_external ${ext}_inline"'
1446 done
1448 aligned_stack_if_any="ppc x86"
1449 fast_64bit_if_any="alpha ia64 mips64 parisc64 ppc64 sparc64 x86_64"
1450 fast_clz_if_any="alpha avr32 mips ppc x86"
1451 fast_unaligned_if_any="ppc x86"
1453 inline_asm_deps="!tms470"
1454 need_memalign="altivec neon sse"
1456 symver_if_any="symver_asm_label symver_gnu_asm"
1458 log2_deps="!msvcrt"
1460 # subsystems
1461 dct_select="rdft"
1462 mdct_select="fft"
1463 rdft_select="fft"
1464 mpegaudio_select="mpegaudiodsp"
1465 mpegaudiodsp_select="dct"
1466 mpegvideo_select="videodsp"
1467 mpegvideoenc_select="mpegvideo"
1469 # decoders / encoders
1470 aac_decoder_select="mdct sinewin"
1471 aac_encoder_select="mdct sinewin"
1472 aac_latm_decoder_select="aac_decoder aac_latm_parser"
1473 ac3_decoder_select="mdct ac3dsp ac3_parser"
1474 ac3_encoder_select="mdct ac3dsp"
1475 ac3_fixed_encoder_select="mdct ac3dsp"
1476 alac_encoder_select="lpc"
1477 amrnb_decoder_select="lsp"
1478 amrwb_decoder_select="lsp"
1479 atrac1_decoder_select="mdct sinewin"
1480 atrac3_decoder_select="mdct"
1481 binkaudio_dct_decoder_select="mdct rdft dct sinewin"
1482 binkaudio_rdft_decoder_select="mdct rdft sinewin"
1483 cavs_decoder_select="golomb mpegvideo"
1484 comfortnoise_encoder_select="lpc"
1485 cook_decoder_select="mdct sinewin"
1486 cscd_decoder_select="lzo"
1487 cscd_decoder_suggest="zlib"
1488 dca_decoder_select="mdct"
1489 dnxhd_encoder_select="aandcttables mpegvideoenc"
1490 dxa_decoder_select="zlib"
1491 eac3_decoder_select="ac3_decoder"
1492 eac3_encoder_select="ac3_encoder"
1493 eamad_decoder_select="aandcttables error_resilience mpegvideo"
1494 eatgq_decoder_select="aandcttables"
1495 eatqi_decoder_select="aandcttables error_resilience mpegvideo"
1496 ffv1_decoder_select="golomb rangecoder"
1497 ffv1_encoder_select="rangecoder"
1498 ffvhuff_encoder_select="huffman"
1499 flac_decoder_select="golomb"
1500 flac_encoder_select="golomb lpc"
1501 flashsv_decoder_select="zlib"
1502 flashsv_encoder_select="zlib"
1503 flashsv2_decoder_select="zlib"
1504 flv_decoder_select="h263_decoder"
1505 flv_encoder_select="h263_encoder"
1506 fraps_decoder_select="huffman"
1507 h261_decoder_select="error_resilience mpegvideo"
1508 h261_encoder_select="aandcttables mpegvideoenc"
1509 h263_decoder_select="error_resilience h263_parser mpegvideo"
1510 h263_encoder_select="aandcttables error_resilience mpegvideoenc"
1511 h263i_decoder_select="h263_decoder"
1512 h263p_encoder_select="h263_encoder"
1513 h264_decoder_select="error_resilience golomb h264chroma h264dsp h264pred h264qpel mpegvideo"
1514 huffyuv_encoder_select="huffman"
1515 iac_decoder_select="fft mdct sinewin"
1516 imc_decoder_select="fft mdct sinewin"
1517 jpegls_decoder_select="golomb"
1518 jpegls_encoder_select="golomb"
1519 ljpeg_encoder_select="aandcttables mpegvideoenc"
1520 loco_decoder_select="golomb"
1521 mdec_decoder_select="error_resilience mpegvideo"
1522 mjpeg_encoder_select="aandcttables mpegvideoenc"
1523 mlp_decoder_select="mlp_parser"
1524 mp1_decoder_select="mpegaudio"
1525 mp1float_decoder_select="mpegaudio"
1526 mp2_decoder_select="mpegaudio"
1527 mp2float_decoder_select="mpegaudio"
1528 mp3_decoder_select="mpegaudio"
1529 mp3adu_decoder_select="mpegaudio"
1530 mp3adufloat_decoder_select="mpegaudio"
1531 mp3float_decoder_select="mpegaudio"
1532 mp3on4_decoder_select="mpegaudio"
1533 mp3on4float_decoder_select="mpegaudio"
1534 mpc7_decoder_select="mpegaudiodsp"
1535 mpc8_decoder_select="mpegaudiodsp"
1536 mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h"
1537 mpeg_xvmc_decoder_select="mpegvideo_decoder"
1538 mpeg1video_decoder_select="error_resilience mpegvideo"
1539 mpeg1video_encoder_select="aandcttables error_resilience mpegvideoenc"
1540 mpeg2video_decoder_select="error_resilience mpegvideo"
1541 mpeg2video_encoder_select="aandcttables error_resilience mpegvideoenc"
1542 mpeg4_decoder_select="h263_decoder mpeg4video_parser"
1543 mpeg4_encoder_select="h263_encoder"
1544 msmpeg4v1_decoder_select="h263_decoder"
1545 msmpeg4v1_encoder_select="h263_encoder"
1546 msmpeg4v2_decoder_select="h263_decoder"
1547 msmpeg4v2_encoder_select="h263_encoder"
1548 msmpeg4v3_decoder_select="h263_decoder"
1549 msmpeg4v3_encoder_select="h263_encoder"
1550 mss2_decoder_select="vc1_decoder"
1551 nellymoser_decoder_select="mdct sinewin"
1552 nellymoser_encoder_select="mdct sinewin"
1553 nuv_decoder_select="lzo"
1554 png_decoder_select="zlib"
1555 png_encoder_select="zlib"
1556 qcelp_decoder_select="lsp"
1557 qdm2_decoder_select="mdct rdft mpegaudiodsp"
1558 ra_144_encoder_select="lpc"
1559 ralf_decoder_select="golomb"
1560 rv10_decoder_select="h263_decoder"
1561 rv10_encoder_select="h263_encoder"
1562 rv20_decoder_select="h263_decoder"
1563 rv20_encoder_select="h263_encoder"
1564 rv30_decoder_select="error_resilience golomb h264chroma h264pred h264qpel mpegvideo"
1565 rv40_decoder_select="error_resilience golomb h264chroma h264pred h264qpel mpegvideo"
1566 shorten_decoder_select="golomb"
1567 sipr_decoder_select="lsp"
1568 svq1_decoder_select="error_resilience mpegvideo"
1569 svq1_encoder_select="aandcttables error_resilience mpegvideoenc"
1570 svq3_decoder_select="error_resilience golomb h264chroma h264dsp h264pred h264qpel mpegvideo"
1571 svq3_decoder_suggest="zlib"
1572 theora_decoder_select="vp3_decoder"
1573 tiff_decoder_suggest="zlib"
1574 tiff_encoder_suggest="zlib"
1575 truehd_decoder_select="mlp_decoder"
1576 tscc_decoder_select="zlib"
1577 twinvq_decoder_select="mdct lsp sinewin"
1578 utvideo_encoder_select="huffman"
1579 vc1_decoder_select="h263_decoder h264chroma h264qpel"
1580 vc1image_decoder_select="vc1_decoder"
1581 vorbis_decoder_select="mdct"
1582 vorbis_encoder_select="mdct"
1583 vp3_decoder_select="vp3dsp videodsp"
1584 vp5_decoder_select="vp3dsp videodsp"
1585 vp6_decoder_select="huffman vp3dsp videodsp"
1586 vp6a_decoder_select="vp6_decoder"
1587 vp6f_decoder_select="vp6_decoder"
1588 vp8_decoder_select="h264pred videodsp"
1589 wmapro_decoder_select="mdct sinewin"
1590 wmav1_decoder_select="mdct sinewin"
1591 wmav1_encoder_select="mdct sinewin"
1592 wmav2_decoder_select="mdct sinewin"
1593 wmav2_encoder_select="mdct sinewin"
1594 wmavoice_decoder_select="lsp rdft dct mdct sinewin"
1595 wmv1_decoder_select="h263_decoder"
1596 wmv1_encoder_select="h263_encoder"
1597 wmv2_decoder_select="h263_decoder"
1598 wmv2_encoder_select="h263_encoder"
1599 wmv3_decoder_select="vc1_decoder"
1600 wmv3image_decoder_select="wmv3_decoder"
1601 zerocodec_decoder_select="zlib"
1602 zlib_decoder_select="zlib"
1603 zlib_encoder_select="zlib"
1604 zmbv_decoder_select="zlib"
1605 zmbv_encoder_select="zlib"
1607 # hardware accelerators
1608 vaapi_deps="va_va_h"
1609 vda_deps="VideoDecodeAcceleration_VDADecoder_h pthreads"
1610 vdpau_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1612 h263_vaapi_hwaccel_select="vaapi h263_decoder"
1613 h263_vdpau_hwaccel_select="vdpau h263_decoder"
1614 h264_dxva2_hwaccel_deps="dxva2api_h"
1615 h264_dxva2_hwaccel_select="dxva2 h264_decoder"
1616 h264_vaapi_hwaccel_select="vaapi h264_decoder"
1617 h264_vda_hwaccel_select="vda h264_decoder"
1618 h264_vdpau_decoder_select="vdpau h264_decoder"
1619 h264_vdpau_hwaccel_select="vdpau h264_decoder"
1620 mpeg_vdpau_decoder_select="vdpau mpegvideo_decoder"
1621 mpeg1_vdpau_decoder_select="vdpau mpeg1video_decoder"
1622 mpeg1_vdpau_hwaccel_select="vdpau mpeg1video_decoder"
1623 mpeg2_dxva2_hwaccel_deps="dxva2api_h"
1624 mpeg2_dxva2_hwaccel_select="dxva2 mpeg2video_decoder"
1625 mpeg2_vaapi_hwaccel_select="vaapi mpeg2video_decoder"
1626 mpeg2_vdpau_hwaccel_select="vdpau mpeg2video_decoder"
1627 mpeg4_vaapi_hwaccel_select="vaapi mpeg4_decoder"
1628 mpeg4_vdpau_decoder_select="vdpau mpeg4_decoder"
1629 mpeg4_vdpau_hwaccel_select="vdpau mpeg4_decoder"
1630 vc1_dxva2_hwaccel_deps="dxva2api_h"
1631 vc1_dxva2_hwaccel_select="dxva2 vc1_decoder"
1632 vc1_vaapi_hwaccel_select="vaapi vc1_decoder"
1633 vc1_vdpau_decoder_select="vdpau vc1_decoder"
1634 vc1_vdpau_hwaccel_select="vdpau vc1_decoder"
1635 wmv3_dxva2_hwaccel_select="vc1_dxva2_hwaccel"
1636 wmv3_vaapi_hwaccel_select="vc1_vaapi_hwaccel"
1637 wmv3_vdpau_decoder_select="vc1_vdpau_decoder"
1638 wmv3_vdpau_hwaccel_select="vc1_vdpau_hwaccel"
1640 # parsers
1641 h264_parser_select="error_resilience golomb h264chroma h264dsp h264pred h264qpel mpegvideo"
1642 mpeg4video_parser_select="error_resilience mpegvideo"
1643 mpegvideo_parser_select="error_resilience mpegvideo"
1644 vc1_parser_select="error_resilience mpegvideo"
1646 # external libraries
1647 libfaac_encoder_deps="libfaac"
1648 libfdk_aac_encoder_deps="libfdk_aac"
1649 libgsm_decoder_deps="libgsm"
1650 libgsm_encoder_deps="libgsm"
1651 libgsm_ms_decoder_deps="libgsm"
1652 libgsm_ms_encoder_deps="libgsm"
1653 libilbc_decoder_deps="libilbc"
1654 libilbc_encoder_deps="libilbc"
1655 libmp3lame_encoder_deps="libmp3lame"
1656 libopencore_amrnb_decoder_deps="libopencore_amrnb"
1657 libopencore_amrnb_encoder_deps="libopencore_amrnb"
1658 libopencore_amrwb_decoder_deps="libopencore_amrwb"
1659 libopenjpeg_decoder_deps="libopenjpeg"
1660 libopenjpeg_encoder_deps="libopenjpeg"
1661 libopus_decoder_deps="libopus"
1662 libopus_encoder_deps="libopus"
1663 libschroedinger_decoder_deps="libschroedinger"
1664 libschroedinger_encoder_deps="libschroedinger"
1665 libspeex_decoder_deps="libspeex"
1666 libspeex_encoder_deps="libspeex"
1667 libtheora_encoder_deps="libtheora"
1668 libvo_aacenc_encoder_deps="libvo_aacenc"
1669 libvo_amrwbenc_encoder_deps="libvo_amrwbenc"
1670 libvorbis_encoder_deps="libvorbis"
1671 libvpx_vp8_decoder_deps="libvpx"
1672 libvpx_vp8_encoder_deps="libvpx"
1673 libvpx_vp9_decoder_deps="libvpx"
1674 libvpx_vp9_encoder_deps="libvpx"
1675 libx264_encoder_deps="libx264"
1676 libxavs_encoder_deps="libxavs"
1677 libxvid_encoder_deps="libxvid"
1679 # demuxers / muxers
1680 ac3_demuxer_select="ac3_parser"
1681 asf_stream_muxer_select="asf_muxer"
1682 avisynth_demuxer_deps="avisynth"
1683 dirac_demuxer_select="dirac_parser"
1684 eac3_demuxer_select="ac3_parser"
1685 flac_demuxer_select="flac_parser"
1686 ipod_muxer_select="mov_muxer"
1687 ismv_muxer_select="mov_muxer"
1688 matroska_audio_muxer_select="matroska_muxer"
1689 matroska_demuxer_suggest="bzlib lzo zlib"
1690 mov_demuxer_suggest="zlib"
1691 mov_muxer_select="rtpenc_chain"
1692 mp3_demuxer_select="mpegaudio_parser"
1693 mp4_muxer_select="mov_muxer"
1694 mpegts_muxer_select="adts_muxer latm_muxer mpegvideo"
1695 mpegtsraw_demuxer_select="mpegts_demuxer"
1696 mxf_d10_muxer_select="mxf_muxer"
1697 ogg_demuxer_select="golomb"
1698 psp_muxer_select="mov_muxer"
1699 rtp_demuxer_select="sdp_demuxer"
1700 rtp_muxer_select="mpegvideo"
1701 rtpdec_select="asf_demuxer rm_demuxer rtp_protocol mpegts_demuxer mov_demuxer"
1702 rtsp_demuxer_select="http_protocol rtpdec"
1703 rtsp_muxer_select="rtp_muxer http_protocol rtp_protocol rtpenc_chain"
1704 sap_demuxer_select="sdp_demuxer"
1705 sap_muxer_select="rtp_muxer rtp_protocol rtpenc_chain"
1706 sdp_demuxer_select="rtpdec"
1707 smoothstreaming_muxer_select="ismv_muxer"
1708 spdif_muxer_select="aac_parser"
1709 tak_demuxer_select="tak_parser"
1710 tg2_muxer_select="mov_muxer"
1711 tgp_muxer_select="mov_muxer"
1712 w64_demuxer_deps="wav_demuxer"
1714 # indevs / outdevs
1715 alsa_indev_deps="alsa_asoundlib_h snd_pcm_htimestamp"
1716 alsa_outdev_deps="alsa_asoundlib_h"
1717 bktr_indev_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
1718 dv1394_indev_deps="dv1394 dv_demuxer"
1719 fbdev_indev_deps="linux_fb_h"
1720 jack_indev_deps="jack_jack_h"
1721 libcdio_indev_deps="libcdio"
1722 libdc1394_indev_deps="libdc1394"
1723 oss_indev_deps_any="soundcard_h sys_soundcard_h"
1724 oss_outdev_deps_any="soundcard_h sys_soundcard_h"
1725 pulse_indev_deps="libpulse"
1726 sndio_indev_deps="sndio_h"
1727 sndio_outdev_deps="sndio_h"
1728 v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h"
1729 vfwcap_indev_deps="capCreateCaptureWindow vfwcap_defines"
1730 vfwcap_indev_extralibs="-lavicap32"
1731 x11grab_indev_deps="x11grab XShmCreateImage"
1733 # protocols
1734 ffrtmpcrypt_protocol_deps="!librtmp_protocol"
1735 ffrtmpcrypt_protocol_deps_any="gcrypt nettle openssl"
1736 ffrtmpcrypt_protocol_select="tcp_protocol"
1737 ffrtmphttp_protocol_deps="!librtmp_protocol"
1738 ffrtmphttp_protocol_select="http_protocol"
1739 gopher_protocol_select="network"
1740 httpproxy_protocol_select="tcp_protocol"
1741 http_protocol_select="tcp_protocol"
1742 https_protocol_select="tls_protocol"
1743 librtmp_protocol_deps="librtmp"
1744 librtmpe_protocol_deps="librtmp"
1745 librtmps_protocol_deps="librtmp"
1746 librtmpt_protocol_deps="librtmp"
1747 librtmpte_protocol_deps="librtmp"
1748 mmsh_protocol_select="http_protocol"
1749 mmst_protocol_select="network"
1750 rtmp_protocol_deps="!librtmp_protocol"
1751 rtmp_protocol_select="tcp_protocol"
1752 rtmpe_protocol_select="ffrtmpcrypt_protocol"
1753 rtmps_protocol_deps="!librtmp_protocol"
1754 rtmps_protocol_select="tls_protocol"
1755 rtmpt_protocol_select="ffrtmphttp_protocol"
1756 rtmpte_protocol_select="ffrtmpcrypt_protocol ffrtmphttp_protocol"
1757 rtmpts_protocol_select="ffrtmphttp_protocol https_protocol"
1758 rtp_protocol_select="udp_protocol"
1759 sctp_protocol_deps="struct_sctp_event_subscribe"
1760 sctp_protocol_select="network"
1761 srtp_protocol_select="rtp_protocol"
1762 tcp_protocol_select="network"
1763 tls_protocol_deps_any="openssl gnutls"
1764 tls_protocol_select="tcp_protocol"
1765 udp_protocol_select="network"
1767 # filters
1768 blackframe_filter_deps="gpl"
1769 boxblur_filter_deps="gpl"
1770 cropdetect_filter_deps="gpl"
1771 delogo_filter_deps="gpl"
1772 drawtext_filter_deps="libfreetype"
1773 frei0r_filter_deps="frei0r dlopen strtok_r"
1774 frei0r_filter_extralibs='$ldl'
1775 frei0r_src_filter_deps="frei0r dlopen strtok_r"
1776 frei0r_src_filter_extralibs='$ldl'
1777 hqdn3d_filter_deps="gpl"
1778 resample_filter_deps="avresample"
1779 ocv_filter_deps="libopencv"
1780 scale_filter_deps="swscale"
1781 yadif_filter_deps="gpl"
1783 # libraries
1784 avcodec_deps="avutil"
1785 avdevice_deps="avutil avcodec avformat"
1786 avfilter_deps="avutil"
1787 avformat_deps="avutil avcodec"
1788 avresample_deps="avutil"
1789 swscale_deps="avutil"
1791 # programs
1792 avconv_deps="avcodec avfilter avformat avresample swscale"
1793 avconv_select="aformat_filter anull_filter asyncts_filter format_filter
1794 fps_filter null_filter resample_filter scale_filter
1795 setpts_filter"
1796 avplay_deps="avcodec avformat avresample swscale sdl"
1797 avplay_select="rdft"
1798 avprobe_deps="avcodec avformat"
1799 avserver_deps="avformat ffm_muxer fork rtp_protocol rtsp_demuxer !shared"
1800 avserver_extralibs='$ldl'
1802 doc_deps="texi2html"
1804 # default parameters
1806 logfile="config.log"
1808 # installation paths
1809 prefix_default="/usr/local"
1810 bindir_default='${prefix}/bin'
1811 datadir_default='${prefix}/share/avconv'
1812 incdir_default='${prefix}/include'
1813 libdir_default='${prefix}/lib'
1814 mandir_default='${prefix}/share/man'
1815 shlibdir_default="$libdir_default"
1817 # toolchain
1818 ar_default="ar"
1819 cc_default="gcc"
1820 host_cc_default="gcc"
1821 cp_f="cp -f"
1822 ln_s="ln -sf"
1823 nm_default="nm -g"
1824 objformat="elf"
1825 pkg_config_default=pkg-config
1826 ranlib="ranlib"
1827 yasmexe="yasm"
1829 nogas=":"
1831 # machine
1832 arch_default=$(uname -m)
1833 cpu="generic"
1835 # OS
1836 target_os_default=$(tolower $(uname -s))
1837 host_os=$target_os_default
1839 # configurable options
1840 enable $LIBRARY_LIST $PROGRAM_LIST
1842 enable asm
1843 enable debug
1844 enable doc
1845 enable optimizations
1846 enable safe_bitstream_reader
1847 enable static
1848 enable swscale_alpha
1850 # build settings
1851 SHFLAGS='-shared -Wl,-soname,$$(@F)'
1852 AVSERVERLDFLAGS=-Wl,-E
1853 LIBPREF="lib"
1854 LIBSUF=".a"
1855 FULLNAME='$(NAME)$(BUILDSUF)'
1856 LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
1857 SLIBPREF="lib"
1858 SLIBSUF=".so"
1859 SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
1860 SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
1861 SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
1862 LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
1863 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'
1864 SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR) $(SLIBNAME)'
1866 asflags_filter=echo
1867 cflags_filter=echo
1868 ldflags_filter=echo
1870 AS_C='-c'
1871 AS_O='-o $@'
1872 CC_C='-c'
1873 CC_E='-E -o $@'
1874 CC_O='-o $@'
1875 LD_O='-o $@'
1876 LD_LIB='-l%'
1877 LD_PATH='-L'
1878 HOSTCC_C='-c'
1879 HOSTCC_O='-o $@'
1880 HOSTLD_O='-o $@'
1882 host_cflags='-D_ISOC99_SOURCE -D_XOPEN_SOURCE=600 -O3 -g'
1883 host_libs='-lm'
1884 host_cflags_filter=echo
1885 host_ldflags_filter=echo
1887 target_path='$(CURDIR)'
1889 # since the object filename is not given with the -MM flag, the compiler
1890 # is only able to print the basename, and we must add the path ourselves
1891 DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o," > $(@:.o=.d)'
1892 DEPFLAGS='-MM'
1894 # find source path
1895 if test -f configure; then
1896 source_path=.
1897 else
1898 source_path=$(cd $(dirname "$0"); pwd)
1899 echo "$source_path" | grep -q '[[:blank:]]' &&
1900 die "Out of tree builds are impossible with whitespace in source path."
1901 test -e "$source_path/config.h" &&
1902 die "Out of tree builds are impossible with config.h in source dir."
1905 for v in "$@"; do
1906 r=${v#*=}
1907 l=${v%"$r"}
1908 r=$(sh_quote "$r")
1909 LIBAV_CONFIGURATION="${LIBAV_CONFIGURATION# } ${l}${r}"
1910 done
1912 find_things(){
1913 thing=$1
1914 pattern=$2
1915 file=$source_path/$3
1916 sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
1919 ENCODER_LIST=$(find_things encoder ENC libavcodec/allcodecs.c)
1920 DECODER_LIST=$(find_things decoder DEC libavcodec/allcodecs.c)
1921 HWACCEL_LIST=$(find_things hwaccel HWACCEL libavcodec/allcodecs.c)
1922 PARSER_LIST=$(find_things parser PARSER libavcodec/allcodecs.c)
1923 BSF_LIST=$(find_things bsf BSF libavcodec/allcodecs.c)
1924 MUXER_LIST=$(find_things muxer _MUX libavformat/allformats.c)
1925 DEMUXER_LIST=$(find_things demuxer DEMUX libavformat/allformats.c)
1926 OUTDEV_LIST=$(find_things outdev OUTDEV libavdevice/alldevices.c)
1927 INDEV_LIST=$(find_things indev _IN libavdevice/alldevices.c)
1928 PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
1929 FILTER_LIST=$(find_things filter FILTER libavfilter/allfilters.c)
1931 ALL_COMPONENTS="
1932 $BSF_LIST
1933 $DECODER_LIST
1934 $DEMUXER_LIST
1935 $ENCODER_LIST
1936 $FILTER_LIST
1937 $HWACCEL_LIST
1938 $INDEV_LIST
1939 $MUXER_LIST
1940 $OUTDEV_LIST
1941 $PARSER_LIST
1942 $PROTOCOL_LIST
1945 for n in $COMPONENT_LIST; do
1946 v=$(toupper ${n%s})_LIST
1947 eval enable \$$v
1948 eval ${n}_if_any="\$$v"
1949 done
1951 enable $ARCH_EXT_LIST
1953 die_unknown(){
1954 echo "Unknown option \"$1\"."
1955 echo "See $0 --help for available options."
1956 exit 1
1959 show_list() {
1960 suffix=_$1
1961 shift
1962 echo $* | sed s/$suffix//g | tr ' ' '\n' | sort | pr -3 -t
1963 exit 0
1966 rand_list(){
1967 IFS=', '
1968 set -- $*
1969 unset IFS
1970 for thing; do
1971 comp=${thing%:*}
1972 prob=${thing#$comp}
1973 prob=${prob#:}
1974 is_in ${comp} $COMPONENT_LIST && eval comp=\$$(toupper ${comp%s})_LIST
1975 echo "prob ${prob:-0.5}"
1976 printf '%s\n' $comp
1977 done
1980 do_random(){
1981 action=$1
1982 shift
1983 random_seed=$(awk "BEGIN { srand($random_seed); print srand() }")
1984 $action $(rand_list "$@" | awk "BEGIN { srand($random_seed) } \$1 == \"prob\" { prob = \$2; next } rand() < prob { print }")
1987 for opt do
1988 optval="${opt#*=}"
1989 case "$opt" in
1990 --extra-ldflags=*)
1991 add_ldflags $optval
1993 --extra-libs=*)
1994 add_extralibs $optval
1996 --disable-devices)
1997 disable $INDEV_LIST $OUTDEV_LIST
1999 --enable-debug=*)
2000 debuglevel="$optval"
2002 --disable-programs)
2003 disable $PROGRAM_LIST
2005 --disable-everything)
2006 map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
2008 --disable-all)
2009 map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
2010 disable $LIBRARY_LIST $PROGRAM_LIST doc
2012 --enable-random|--disable-random)
2013 action=${opt%%-random}
2014 do_random ${action#--} $COMPONENT_LIST
2016 --enable-random=*|--disable-random=*)
2017 action=${opt%%-random=*}
2018 do_random ${action#--} $optval
2020 --enable-*=*|--disable-*=*)
2021 eval $(echo "${opt%%=*}" | sed 's/--/action=/;s/-/ thing=/')
2022 is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt"
2023 eval list=\$$(toupper $thing)_LIST
2024 name=$(echo "${optval}" | sed "s/,/_${thing}|/g")_${thing}
2025 $action $(filter "$name" $list)
2027 --enable-?*|--disable-?*)
2028 eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
2029 if is_in $option $COMPONENT_LIST; then
2030 test $action = disable && action=unset
2031 eval $action \$$(toupper ${option%s})_LIST
2032 elif is_in $option $CMDLINE_SELECT; then
2033 $action $option
2034 else
2035 die_unknown $opt
2038 --list-*)
2039 NAME="${opt#--list-}"
2040 is_in $NAME $COMPONENT_LIST || die_unknown $opt
2041 NAME=${NAME%s}
2042 eval show_list $NAME \$$(toupper $NAME)_LIST
2044 --help|-h) show_help
2047 optname="${opt%%=*}"
2048 optname="${optname#--}"
2049 optname=$(echo "$optname" | sed 's/-/_/g')
2050 if is_in $optname $CMDLINE_SET; then
2051 eval $optname='$optval'
2052 elif is_in $optname $CMDLINE_APPEND; then
2053 append $optname "$optval"
2054 else
2055 die_unknown $opt
2058 esac
2059 done
2061 disabled logging && logfile=/dev/null
2063 echo "# $0 $LIBAV_CONFIGURATION" > $logfile
2064 set >> $logfile
2066 test -n "$cross_prefix" && enable cross_compile
2068 if enabled cross_compile; then
2069 test -n "$arch" && test -n "$target_os" ||
2070 die "Must specify target arch and OS when cross-compiling"
2073 ar_default="${cross_prefix}${ar_default}"
2074 cc_default="${cross_prefix}${cc_default}"
2075 nm_default="${cross_prefix}${nm_default}"
2076 pkg_config_default="${cross_prefix}${pkg_config_default}"
2077 ranlib="${cross_prefix}${ranlib}"
2079 sysinclude_default="${sysroot}/usr/include"
2081 case "$toolchain" in
2082 clang-asan)
2083 cc_default="clang"
2084 add_cflags -faddress-sanitizer
2085 add_ldflags -faddress-sanitizer
2087 clang-tsan)
2088 cc_default="clang"
2089 add_cflags -fthread-sanitizer
2090 add_ldflags -fthread-sanitizer
2092 msvc)
2093 cc_default="c99wrap cl"
2094 ld_default="c99wrap link"
2095 nm_default="dumpbin -symbols"
2096 ar_default="lib"
2097 target_os_default="win32"
2100 die "Unknown toolchain $toolchain"
2102 esac
2104 set_default arch cc pkg_config sysinclude target_os
2105 enabled cross_compile || host_cc_default=$cc
2106 set_default host_cc
2108 if ! $pkg_config --version >/dev/null 2>&1; then
2109 warn "$pkg_config not found, library detection may fail."
2110 pkg_config=false
2113 exesuf() {
2114 case $1 in
2115 mingw32*|win32|win64|cygwin*|*-dos|freedos|opendos|os/2*|symbian) echo .exe ;;
2116 esac
2119 EXESUF=$(exesuf $target_os)
2120 HOSTEXESUF=$(exesuf $host_os)
2122 # set temporary file name
2123 : ${TMPDIR:=$TEMPDIR}
2124 : ${TMPDIR:=$TMP}
2125 : ${TMPDIR:=/tmp}
2127 if ! check_cmd mktemp -u XXXXXX; then
2128 # simple replacement for missing mktemp
2129 # NOT SAFE FOR GENERAL USE
2130 mktemp(){
2131 echo "${2%%XXX*}.${HOSTNAME}.${UID}.$$"
2135 tmpfile(){
2136 tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
2137 (set -C; exec > $tmp) 2>/dev/null ||
2138 die "Unable to create temporary file in $TMPDIR."
2139 append TMPFILES $tmp
2140 eval $1=$tmp
2143 trap 'rm -f -- $TMPFILES' EXIT
2145 tmpfile TMPASM .asm
2146 tmpfile TMPC .c
2147 tmpfile TMPE $EXESUF
2148 tmpfile TMPH .h
2149 tmpfile TMPO .o
2150 tmpfile TMPS .S
2151 tmpfile TMPSH .sh
2152 tmpfile TMPV .ver
2154 unset -f mktemp
2156 chmod +x $TMPE
2158 # make sure we can execute files in $TMPDIR
2159 cat > $TMPSH 2>> $logfile <<EOF
2160 #! /bin/sh
2162 chmod +x $TMPSH >> $logfile 2>&1
2163 if ! $TMPSH >> $logfile 2>&1; then
2164 cat <<EOF
2165 Unable to create and execute files in $TMPDIR. Set the TMPDIR environment
2166 variable to another directory and make sure that it is not mounted noexec.
2168 die "Sanity test failed."
2171 ccc_flags(){
2172 for flag; do
2173 case $flag in
2174 -std=c99) echo -c99 ;;
2175 -mcpu=*) echo -arch ${flag#*=} ;;
2176 -mieee) echo -ieee ;;
2177 -O*|-fast) echo $flag ;;
2178 -fno-math-errno) echo -assume nomath_errno ;;
2179 -g) echo -g3 ;;
2180 -Wall) echo -msg_enable level2 ;;
2181 -Wno-pointer-sign) echo -msg_disable ptrmismatch1 ;;
2182 -Wl,*) echo $flag ;;
2183 -f*|-W*) ;;
2184 *) echo $flag ;;
2185 esac
2186 done
2189 msvc_flags(){
2190 for flag; do
2191 case $flag in
2192 -fomit-frame-pointer) echo -Oy ;;
2193 -g) echo -Z7 ;;
2194 -Wall) echo -W4 -wd4244 -wd4127 -wd4018 -wd4389 \
2195 -wd4146 -wd4057 -wd4204 -wd4706 -wd4305 \
2196 -wd4152 -wd4324 -we4013 -wd4100 -wd4214 \
2197 -wd4996 -wd4273 ;;
2198 -std=c99) ;;
2199 -fno-math-errno) ;;
2200 -fno-common) ;;
2201 -fno-signed-zeros) ;;
2202 -fPIC) ;;
2203 -lz) echo zlib.lib ;;
2204 -lavifil32) echo vfw32.lib ;;
2205 -lavicap32) echo vfw32.lib user32.lib ;;
2206 -l*) echo ${flag#-l}.lib ;;
2207 *) echo $flag ;;
2208 esac
2209 done
2212 pgi_flags(){
2213 for flag; do
2214 case $flag in
2215 -flto) echo -Mipa=fast,libopt,libinline,vestigial ;;
2216 -fomit-frame-pointer) echo -Mnoframe ;;
2217 -g) echo -gopt ;;
2218 *) echo $flag ;;
2219 esac
2220 done
2223 suncc_flags(){
2224 for flag; do
2225 case $flag in
2226 -march=*|-mcpu=*)
2227 case "${flag#*=}" in
2228 native) echo -xtarget=native ;;
2229 v9|niagara) echo -xarch=sparc ;;
2230 ultrasparc) echo -xarch=sparcvis ;;
2231 ultrasparc3|niagara2) echo -xarch=sparcvis2 ;;
2232 i586|pentium) echo -xchip=pentium ;;
2233 i686|pentiumpro|pentium2) echo -xtarget=pentium_pro ;;
2234 pentium3*|c3-2) echo -xtarget=pentium3 ;;
2235 pentium-m) echo -xarch=sse2 -xchip=pentium3 ;;
2236 pentium4*) echo -xtarget=pentium4 ;;
2237 prescott|nocona) echo -xarch=sse3 -xchip=pentium4 ;;
2238 *-sse3) echo -xarch=sse3 ;;
2239 core2) echo -xarch=ssse3 -xchip=core2 ;;
2240 corei7) echo -xarch=sse4_2 -xchip=nehalem ;;
2241 corei7-avx) echo -xarch=avx -xchip=sandybridge ;;
2242 amdfam10|barcelona|bdver*) echo -xarch=sse4_1 ;;
2243 athlon-4|athlon-[mx]p) echo -xarch=ssea ;;
2244 k8|opteron|athlon64|athlon-fx)
2245 echo -xarch=sse2a ;;
2246 athlon*) echo -xarch=pentium_proa ;;
2247 esac
2249 -std=c99) echo -xc99 ;;
2250 -fomit-frame-pointer) echo -xregs=frameptr ;;
2251 -fPIC) echo -KPIC -xcode=pic32 ;;
2252 -W*,*) echo $flag ;;
2253 -f*-*|-W*|-mimpure-text) ;;
2254 -shared) echo -G ;;
2255 *) echo $flag ;;
2256 esac
2257 done
2260 tms470_flags(){
2261 for flag; do
2262 case $flag in
2263 -march=*|-mcpu=*)
2264 case "${flag#*=}" in
2265 armv7-a|cortex-a*) echo -mv=7a8 ;;
2266 armv7-r|cortex-r*) echo -mv=7r4 ;;
2267 armv7-m|cortex-m*) echo -mv=7m3 ;;
2268 armv6*|arm11*) echo -mv=6 ;;
2269 armv5*e|arm[79]*e*|arm9[24]6*|arm96*|arm102[26])
2270 echo -mv=5e ;;
2271 armv4*|arm7*|arm9[24]*) echo -mv=4 ;;
2272 esac
2274 -mfpu=neon) echo --float_support=vfpv3 --neon ;;
2275 -mfpu=vfp) echo --float_support=vfpv2 ;;
2276 -mfpu=vfpv3) echo --float_support=vfpv3 ;;
2277 -mfpu=vfpv3-d16) echo --float_support=vfpv3d16 ;;
2278 -msoft-float) echo --float_support=vfplib ;;
2279 -O[0-3]|-mf=*) echo $flag ;;
2280 -g) echo -g -mn ;;
2281 -pds=*) echo $flag ;;
2282 -D*|-I*) echo $flag ;;
2283 --gcc|--abi=*) echo $flag ;;
2284 -me) echo $flag ;;
2285 esac
2286 done
2289 probe_cc(){
2290 pfx=$1
2291 _cc=$2
2293 unset _type _ident _cc_c _cc_e _cc_o _flags _cflags
2294 unset _ld_o _ldflags _ld_lib _ld_path
2295 unset _depflags _DEPCMD _DEPFLAGS
2296 _flags_filter=echo
2298 if $_cc -v 2>&1 | grep -q '^gcc.*LLVM'; then
2299 _type=llvm_gcc
2300 gcc_extra_ver=$(expr "$($_cc --version | head -n1)" : '.*\((.*)\)')
2301 _ident="llvm-gcc $($_cc -dumpversion) $gcc_extra_ver"
2302 _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2303 _cflags_speed='-O3'
2304 _cflags_size='-Os'
2305 elif $_cc -v 2>&1 | grep -qi ^gcc; then
2306 _type=gcc
2307 gcc_version=$($_cc --version | head -n1)
2308 gcc_basever=$($_cc -dumpversion)
2309 gcc_pkg_ver=$(expr "$gcc_version" : '[^ ]* \(([^)]*)\)')
2310 gcc_ext_ver=$(expr "$gcc_version" : ".*$gcc_pkg_ver $gcc_basever \\(.*\\)")
2311 _ident=$(cleanws "gcc $gcc_basever $gcc_pkg_ver $gcc_ext_ver")
2312 if ! $_cc -dumpversion | grep -q '^2\.'; then
2313 _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2315 _cflags_speed='-O3'
2316 _cflags_size='-Os'
2317 elif $_cc --version 2>/dev/null | grep -q Intel; then
2318 _type=icc
2319 _ident=$($_cc --version | head -n1)
2320 _depflags='-MMD'
2321 _cflags_speed='-O3'
2322 _cflags_size='-Os'
2323 _cflags_noopt='-O1'
2324 elif $_cc -v 2>&1 | grep -q xlc; then
2325 _type=xlc
2326 _ident=$($_cc -qversion 2>/dev/null | head -n1)
2327 _cflags_speed='-O5'
2328 _cflags_size='-O5 -qcompact'
2329 elif $_cc -V 2>/dev/null | grep -q Compaq; then
2330 _type=ccc
2331 _ident=$($_cc -V | head -n1 | cut -d' ' -f1-3)
2332 _DEPFLAGS='-M'
2333 _cflags_speed='-fast'
2334 _cflags_size='-O1'
2335 _flags_filter=ccc_flags
2336 elif $_cc --vsn 2>/dev/null | grep -q "ARM C/C++ Compiler"; then
2337 test -d "$sysroot" || die "No valid sysroot specified."
2338 _type=armcc
2339 _ident=$($_cc --vsn | head -n1)
2340 armcc_conf="$PWD/armcc.conf"
2341 $_cc --arm_linux_configure \
2342 --arm_linux_config_file="$armcc_conf" \
2343 --configure_sysroot="$sysroot" \
2344 --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
2345 die "Error creating armcc configuration file."
2346 $_cc --vsn | grep -q RVCT && armcc_opt=rvct || armcc_opt=armcc
2347 _flags="--arm_linux_config_file=$armcc_conf --translate_gcc"
2348 as_default="${cross_prefix}gcc"
2349 _depflags='-MMD'
2350 _cflags_speed='-O3'
2351 _cflags_size='-Os'
2352 elif $_cc -version 2>/dev/null | grep -Eq 'TMS470|TI ARM'; then
2353 _type=tms470
2354 _ident=$($_cc -version | head -n1 | tr -s ' ')
2355 _flags='--gcc --abi=eabi -me'
2356 _cc_e='-ppl -fe=$@'
2357 _cc_o='-fe=$@'
2358 _depflags='-ppa -ppd=$(@:.o=.d)'
2359 _cflags_speed='-O3 -mf=5'
2360 _cflags_size='-O3 -mf=2'
2361 _flags_filter=tms470_flags
2362 elif $_cc -v 2>&1 | grep -q clang; then
2363 _type=clang
2364 _ident=$($_cc --version | head -n1)
2365 _depflags='-MMD'
2366 _cflags_speed='-O3'
2367 _cflags_size='-Os'
2368 elif $_cc -V 2>&1 | grep -q Sun; then
2369 _type=suncc
2370 _ident=$($_cc -V 2>&1 | head -n1 | cut -d' ' -f 2-)
2371 _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "1s,^.*: ,$@: ," -e "\$$!s,\$$, \\\," -e "1!s,^.*: , ," > $(@:.o=.d)'
2372 _DEPFLAGS='-xM1 -xc99'
2373 _ldflags='-std=c99'
2374 _cflags_speed='-O5'
2375 _cflags_size='-O5 -xspace'
2376 _flags_filter=suncc_flags
2377 elif $_cc -v 2>&1 | grep -q 'PathScale\|Path64'; then
2378 _type=pathscale
2379 _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
2380 _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2381 _cflags_speed='-O2'
2382 _cflags_size='-Os'
2383 _flags_filter='filter_out -Wdisabled-optimization'
2384 elif $_cc -v 2>&1 | grep -q Open64; then
2385 _type=open64
2386 _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
2387 _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2388 _cflags_speed='-O2'
2389 _cflags_size='-Os'
2390 _flags_filter='filter_out -Wdisabled-optimization|-Wtype-limits|-fno-signed-zeros'
2391 elif $_cc -V 2>&1 | grep -q Portland; then
2392 _type=pgi
2393 _ident="PGI $($_cc -V 2>&1 | awk '/^pgcc/ { print $2; exit }')"
2394 opt_common='-alias=ansi -Mdse -Mlre -Mpre'
2395 _cflags_speed="-O3 -Mautoinline -Munroll=c:4 $opt_common"
2396 _cflags_size="-O2 -Munroll=c:1 $opt_common"
2397 _cflags_noopt="-O1"
2398 _flags_filter=pgi_flags
2399 elif $_cc 2>&1 | grep -q Microsoft; then
2400 _type=msvc
2401 _ident=$($cc 2>&1 | head -n1)
2402 _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< 2>&1 | awk '\''/including/ { sub(/^.*file: */, ""); gsub(/\\/, "/"); if (!match($$0, / /)) print "$@:", $$0 }'\'' > $(@:.o=.d)'
2403 _DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -showIncludes -Zs'
2404 _cflags_speed="-O2"
2405 _cflags_size="-O1"
2406 # Nonstandard output options, to avoid msys path conversion issues, relies on wrapper to remap it
2407 if $_cc 2>&1 | grep -q Linker; then
2408 _ld_o='-out $@'
2409 else
2410 _ld_o='-Fe$@'
2412 _cc_o='-Fo $@'
2413 _cc_e='-P -Fi $@'
2414 _flags_filter=msvc_flags
2415 _ld_lib='lib%.a'
2416 _ld_path='-libpath:'
2417 _flags='-nologo'
2418 _cflags='-D_USE_MATH_DEFINES -Dinline=__inline -FIstdlib.h -Dstrtoll=_strtoi64'
2419 if [ $pfx = hostcc ]; then
2420 append _cflags -Dsnprintf=_snprintf
2424 eval ${pfx}_type=\$_type
2425 eval ${pfx}_ident=\$_ident
2428 set_ccvars(){
2429 eval ${1}_C=\${_cc_c-\${${1}_C}}
2430 eval ${1}_E=\${_cc_e-\${${1}_E}}
2431 eval ${1}_O=\${_cc_o-\${${1}_O}}
2433 if [ -n "$_depflags" ]; then
2434 eval ${1}_DEPFLAGS=\$_depflags
2435 else
2436 eval ${1}DEP=\${_DEPCMD:-\$DEPCMD}
2437 eval ${1}DEP_FLAGS=\${_DEPFLAGS:-\$DEPFLAGS}
2438 eval DEP${1}FLAGS=\$_flags
2442 probe_cc cc "$cc"
2443 cflags_filter=$_flags_filter
2444 cflags_speed=$_cflags_speed
2445 cflags_size=$_cflags_size
2446 cflags_noopt=$_cflags_noopt
2447 add_cflags $_flags $_cflags
2448 cc_ldflags=$_ldflags
2449 set_ccvars CC
2451 probe_cc hostcc "$host_cc"
2452 host_cflags_filter=$_flags_filter
2453 add_host_cflags $_flags $_cflags
2454 set_ccvars HOSTCC
2456 test -n "$cc_type" && enable $cc_type ||
2457 warn "Unknown C compiler $cc, unable to select optimal CFLAGS"
2459 : ${as_default:=$cc}
2460 : ${dep_cc_default:=$cc}
2461 : ${ld_default:=$cc}
2462 : ${host_ld_default:=$host_cc}
2463 set_default ar as dep_cc ld host_ld
2465 probe_cc as "$as"
2466 asflags_filter=$_flags_filter
2467 add_asflags $_flags $_cflags
2468 set_ccvars AS
2470 probe_cc ld "$ld"
2471 ldflags_filter=$_flags_filter
2472 add_ldflags $_flags $_ldflags
2473 test "$cc_type" != "$ld_type" && add_ldflags $cc_ldflags
2474 LD_O=${_ld_o-$LD_O}
2475 LD_LIB=${_ld_lib-$LD_LIB}
2476 LD_PATH=${_ld_path-$LD_PATH}
2478 probe_cc hostld "$host_ld"
2479 host_ldflags_filter=$_flags_filter
2480 add_host_ldflags $_flags $_ldflags
2481 HOSTLD_O=${_ld_o-$HOSTLD_O}
2483 if [ -z "$CC_DEPFLAGS" ] && [ "$dep_cc" != "$cc" ]; then
2484 probe_cc depcc "$dep_cc"
2485 CCDEP=${_DEPCMD:-$DEPCMD}
2486 CCDEP_FLAGS=${_DEPFLAGS:=$DEPFLAGS}
2487 DEPCCFLAGS=$_flags
2490 if $ar 2>&1 | grep -q Microsoft; then
2491 arflags="-nologo"
2492 ar_o='-out:$@'
2493 elif $ar 2>&1 | grep -q 'Texas Instruments'; then
2494 arflags="rq"
2495 ar_o='$@'
2496 else
2497 arflags="rc"
2498 ar_o='$@'
2501 add_cflags $extra_cflags
2502 add_asflags $extra_cflags
2504 if test -n "$sysroot"; then
2505 case "$cc_type" in
2506 gcc|llvm_gcc|clang)
2507 add_cppflags --sysroot="$sysroot"
2508 add_ldflags --sysroot="$sysroot"
2510 tms470)
2511 add_cppflags -I"$sysinclude"
2512 add_ldflags --sysroot="$sysroot"
2514 esac
2517 if test "$cpu" = host; then
2518 enabled cross_compile && die "--cpu=host makes no sense when cross-compiling."
2520 case "$cc_type" in
2521 gcc|llvm_gcc)
2522 check_native(){
2523 $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
2524 sed -n "/cc1.*$1=/{
2525 s/.*$1=\\([^ ]*\\).*/\\1/
2528 }" $TMPE
2530 cpu=$(check_native -march || check_native -mcpu)
2532 esac
2534 test "${cpu:-host}" = host && die "--cpu=host not supported with compiler $cc"
2537 # Deal with common $arch aliases
2538 case "$arch" in
2539 aarch64|arm64)
2540 arch="aarch64"
2542 arm*)
2543 arch="arm"
2545 mips*|IP*)
2546 arch="mips"
2548 parisc*|hppa*)
2549 arch="parisc"
2551 "Power Macintosh"|ppc*|powerpc*)
2552 arch="ppc"
2554 s390|s390x)
2555 arch="s390"
2557 sh4|sh)
2558 arch="sh4"
2560 sun4u|sparc*)
2561 arch="sparc"
2563 tilegx|tile-gx)
2564 arch="tilegx"
2566 i[3-6]86|i86pc|BePC|x86pc|x86_64|amd64)
2567 arch="x86"
2569 esac
2571 is_in $arch $ARCH_LIST || warn "unknown architecture $arch"
2572 enable $arch
2574 # Add processor-specific flags
2575 if enabled aarch64; then
2577 case $cpu in
2578 armv*)
2579 cpuflags="-march=$cpu"
2582 cpuflags="-mcpu=$cpu"
2584 esac
2586 elif enabled alpha; then
2588 cpuflags="-mcpu=$cpu"
2590 elif enabled arm; then
2592 check_arm_arch() {
2593 check_cpp_condition stddef.h \
2594 "defined __ARM_ARCH_${1}__ || defined __TARGET_ARCH_${2:-$1}" \
2595 $cpuflags
2598 probe_arm_arch() {
2599 if check_arm_arch 4; then echo armv4;
2600 elif check_arm_arch 4T; then echo armv4t;
2601 elif check_arm_arch 5; then echo armv5;
2602 elif check_arm_arch 5E; then echo armv5e;
2603 elif check_arm_arch 5T; then echo armv5t;
2604 elif check_arm_arch 5TE; then echo armv5te;
2605 elif check_arm_arch 5TEJ; then echo armv5te;
2606 elif check_arm_arch 6; then echo armv6;
2607 elif check_arm_arch 6J; then echo armv6j;
2608 elif check_arm_arch 6K; then echo armv6k;
2609 elif check_arm_arch 6Z; then echo armv6z;
2610 elif check_arm_arch 6ZK; then echo armv6zk;
2611 elif check_arm_arch 6T2; then echo armv6t2;
2612 elif check_arm_arch 7; then echo armv7;
2613 elif check_arm_arch 7A 7_A; then echo armv7-a;
2614 elif check_arm_arch 7R 7_R; then echo armv7-r;
2615 elif check_arm_arch 7M 7_M; then echo armv7-m;
2616 elif check_arm_arch 7EM 7E_M; then echo armv7-m;
2617 elif check_arm_arch 8A 8_A; then echo armv8-a;
2621 [ "$cpu" = generic ] && cpu=$(probe_arm_arch)
2623 case $cpu in
2624 armv*)
2625 cpuflags="-march=$cpu"
2626 subarch=$(echo $cpu | sed 's/[^a-z0-9]//g')
2629 cpuflags="-mcpu=$cpu"
2630 case $cpu in
2631 cortex-a*) subarch=armv7a ;;
2632 cortex-r*) subarch=armv7r ;;
2633 cortex-m*) enable thumb; subarch=armv7m ;;
2634 arm11*) subarch=armv6 ;;
2635 arm[79]*e*|arm9[24]6*|arm96*|arm102[26]) subarch=armv5te ;;
2636 armv4*|arm7*|arm9[24]*) subarch=armv4 ;;
2637 *) subarch=$(probe_arm_arch) ;;
2638 esac
2640 esac
2642 case "$subarch" in
2643 armv5t*) enable fast_clz ;;
2644 armv[6-8]*) enable fast_clz fast_unaligned ;;
2645 esac
2647 elif enabled avr32; then
2649 case $cpu in
2650 ap7[02]0[0-2])
2651 subarch="avr32_ap"
2652 cpuflags="-mpart=$cpu"
2655 subarch="avr32_ap"
2656 cpuflags="-march=$cpu"
2658 uc3[ab]*)
2659 subarch="avr32_uc"
2660 cpuflags="-mcpu=$cpu"
2663 subarch="avr32_uc"
2664 cpuflags="-march=$cpu"
2666 esac
2668 elif enabled bfin; then
2670 cpuflags="-mcpu=$cpu"
2672 elif enabled mips; then
2674 cpuflags="-march=$cpu"
2676 elif enabled ppc; then
2678 case $(tolower $cpu) in
2679 601|ppc601|powerpc601)
2680 cpuflags="-mcpu=601"
2681 disable altivec
2683 603*|ppc603*|powerpc603*)
2684 cpuflags="-mcpu=603"
2685 disable altivec
2687 604*|ppc604*|powerpc604*)
2688 cpuflags="-mcpu=604"
2689 disable altivec
2691 g3|75*|ppc75*|powerpc75*)
2692 cpuflags="-mcpu=750"
2693 disable altivec
2695 g4|745*|ppc745*|powerpc745*)
2696 cpuflags="-mcpu=7450"
2698 74*|ppc74*|powerpc74*)
2699 cpuflags="-mcpu=7400"
2701 g5|970|ppc970|powerpc970)
2702 cpuflags="-mcpu=970"
2704 power[3-7]*)
2705 cpuflags="-mcpu=$cpu"
2707 cell)
2708 cpuflags="-mcpu=cell"
2709 enable ldbrx
2711 e500mc)
2712 cpuflags="-mcpu=e500mc"
2713 disable altivec
2715 e500v2)
2716 cpuflags="-mcpu=8548 -mhard-float -mfloat-gprs=double"
2717 disable altivec
2719 e500)
2720 cpuflags="-mcpu=8540 -mhard-float"
2721 disable altivec
2723 esac
2725 elif enabled sparc; then
2727 case $cpu in
2728 cypress|f93[04]|tsc701|sparcl*|supersparc|hypersparc|niagara|v[789])
2729 cpuflags="-mcpu=$cpu"
2730 disable vis
2732 ultrasparc*|niagara[234])
2733 cpuflags="-mcpu=$cpu"
2735 esac
2737 elif enabled x86; then
2739 case $cpu in
2740 i[345]86|pentium)
2741 cpuflags="-march=$cpu"
2742 disable mmx
2744 # targets that do NOT support conditional mov (cmov)
2745 pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
2746 cpuflags="-march=$cpu"
2747 disable cmov
2749 # targets that do support conditional mov (cmov)
2750 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*)
2751 cpuflags="-march=$cpu"
2752 enable cmov
2753 enable fast_cmov
2755 # targets that do support conditional mov but on which it's slow
2756 pentium4|pentium4m|prescott|nocona)
2757 cpuflags="-march=$cpu"
2758 enable cmov
2759 disable fast_cmov
2761 esac
2765 if [ "$cpu" != generic ]; then
2766 add_cflags $cpuflags
2767 add_asflags $cpuflags
2770 # compiler sanity check
2771 check_exec <<EOF
2772 int main(void){ return 0; }
2774 if test "$?" != 0; then
2775 echo "$cc is unable to create an executable file."
2776 if test -z "$cross_prefix" && ! enabled cross_compile ; then
2777 echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
2778 echo "Only do this if you know what cross compiling means."
2780 die "C compiler test failed."
2783 add_cppflags -D_ISOC99_SOURCE
2784 check_cflags -std=c99
2785 check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
2786 #include <stdlib.h>
2788 check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
2789 #include <stdlib.h>
2792 check_host_cflags -std=c99
2793 check_host_cflags -Wall
2795 check_64bit(){
2796 arch32=$1
2797 arch64=$2
2798 expr=$3
2799 check_code cc "" "int test[2*($expr) - 1]" &&
2800 subarch=$arch64 || subarch=$arch32
2803 case "$arch" in
2804 aarch64|alpha|ia64)
2805 spic=$shared
2807 mips)
2808 check_64bit mips mips64 '_MIPS_SIM > 1'
2809 spic=$shared
2811 parisc)
2812 check_64bit parisc parisc64 'sizeof(void *) > 4'
2813 spic=$shared
2815 ppc)
2816 check_64bit ppc ppc64 'sizeof(void *) > 4'
2817 spic=$shared
2819 sparc)
2820 check_64bit sparc sparc64 'sizeof(void *) > 4'
2821 spic=$shared
2823 x86)
2824 check_64bit x86_32 x86_64 'sizeof(void *) > 4'
2825 if test "$subarch" = "x86_64"; then
2826 spic=$shared
2829 esac
2831 enable $subarch
2832 enabled spic && enable pic
2834 # OS specific
2835 case $target_os in
2836 haiku)
2837 prefix_default="/boot/common"
2838 network_extralibs="-lnetwork"
2839 host_libs=
2841 sunos)
2842 AVSERVERLDFLAGS=""
2843 SHFLAGS='-shared -Wl,-h,$$(@F)'
2844 enabled x86 && SHFLAGS="-mimpure-text $SHFLAGS"
2845 network_extralibs="-lsocket -lnsl"
2846 add_cppflags -D__EXTENSIONS__ -D_XOPEN_SOURCE=600
2847 # When using suncc to build, the Solaris linker will mark
2848 # an executable with each instruction set encountered by
2849 # the Solaris assembler. As our libraries contain their own
2850 # guards for processor-specific code, instead suppress
2851 # generation of the HWCAPS ELF section on Solaris x86 only.
2852 enabled_all suncc x86 && echo "hwcap_1 = OVERRIDE;" > mapfile && add_ldflags -Wl,-M,mapfile
2853 nm_default='nm -P -g'
2855 netbsd)
2856 disable symver
2857 oss_indev_extralibs="-lossaudio"
2858 oss_outdev_extralibs="-lossaudio"
2860 openbsd|bitrig)
2861 disable symver
2862 SHFLAGS='-shared'
2863 SLIB_INSTALL_NAME='$(SLIBNAME).$(LIBMAJOR).$(LIBMINOR)'
2864 SLIB_INSTALL_LINKS=
2865 oss_indev_extralibs="-lossaudio"
2866 oss_outdev_extralibs="-lossaudio"
2868 dragonfly)
2869 disable symver
2871 freebsd)
2873 bsd/os)
2874 add_extralibs -lpoll -lgnugetopt
2876 darwin)
2877 gas="gas-preprocessor.pl $cc"
2878 enabled ppc && add_asflags -force_cpusubtype_ALL
2879 SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR)'
2880 enabled x86_32 && append SHFLAGS -Wl,-read_only_relocs,suppress
2881 add_ldflags -Wl,-dynamic,-search_paths_first
2882 SLIBSUF=".dylib"
2883 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
2884 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
2885 AVSERVERLDFLAGS=-Wl,-bind_at_load
2886 objformat="macho"
2887 enabled x86_64 && objformat="macho64"
2888 enabled_any pic shared ||
2889 { check_cflags -mdynamic-no-pic && add_asflags -mdynamic-no-pic; }
2891 mingw32*)
2892 if test $target_os = "mingw32ce"; then
2893 disable network
2894 else
2895 target_os=mingw32
2897 LIBTARGET=i386
2898 if enabled x86_64; then
2899 LIBTARGET="i386:x86-64"
2900 elif enabled arm; then
2901 LIBTARGET=arm-wince
2903 shlibdir_default="$bindir_default"
2904 SLIBPREF=""
2905 SLIBSUF=".dll"
2906 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
2907 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
2908 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)'
2909 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
2910 SLIB_INSTALL_LINKS=
2911 SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
2912 SLIB_INSTALL_EXTRA_LIB='lib$(SLIBNAME:$(SLIBSUF)=.dll.a) $(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
2913 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'
2914 objformat="win32"
2915 dlltool="${cross_prefix}dlltool"
2916 ranlib=:
2917 enable dos_paths
2919 win32|win64)
2920 if enabled shared; then
2921 # Link to the import library instead of the normal static library
2922 # for shared libs.
2923 LD_LIB='%.lib'
2924 # Cannot build shared and static libraries at the same time with
2925 # MSVC.
2926 disable static
2928 shlibdir_default="$bindir_default"
2929 SLIBPREF=""
2930 SLIBSUF=".dll"
2931 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
2932 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
2933 SLIB_CREATE_DEF_CMD='makedef $(SUBDIR)lib$(NAME).ver $(OBJS) > $$(@:$(SLIBSUF)=.def)'
2934 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
2935 SLIB_INSTALL_LINKS=
2936 SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
2937 SLIB_INSTALL_EXTRA_LIB='$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
2938 SHFLAGS='-dll -def:$$(@:$(SLIBSUF)=.def) -implib:$(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib)'
2939 objformat="win32"
2940 ranlib=:
2941 enable dos_paths
2943 cygwin*)
2944 target_os=cygwin
2945 shlibdir_default="$bindir_default"
2946 SLIBPREF="cyg"
2947 SLIBSUF=".dll"
2948 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
2949 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
2950 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
2951 SLIB_INSTALL_LINKS=
2952 SLIB_INSTALL_EXTRA_LIB='lib$(FULLNAME).dll.a'
2953 SHFLAGS='-shared -Wl,--out-implib,$(SUBDIR)lib$(FULLNAME).dll.a'
2954 objformat="win32"
2955 enable dos_paths
2957 *-dos|freedos|opendos)
2958 network_extralibs="-lsocket"
2959 objformat="coff"
2960 enable dos_paths
2961 add_cppflags -U__STRICT_ANSI__
2963 linux)
2964 enable dv1394
2966 irix*)
2967 target_os=irix
2968 ranlib="echo ignoring ranlib"
2970 os/2*)
2971 ln_s="cp -f"
2972 objformat="aout"
2973 add_cppflags -D_GNU_SOURCE
2974 add_ldflags -Zomf -Zbin-files -Zargs-wild -Zmap
2975 SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
2976 AVSERVERLDFLAGS=""
2977 LIBSUF="_s.a"
2978 SLIBPREF=""
2979 SLIBSUF=".dll"
2980 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
2981 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
2982 SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
2983 echo PROTMODE >> $(SUBDIR)$(NAME).def; \
2984 echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
2985 echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
2986 echo EXPORTS >> $(SUBDIR)$(NAME).def; \
2987 emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
2988 SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
2989 emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
2990 SLIB_INSTALL_EXTRA_LIB='$(LIBPREF)$(NAME)_dll.a $(LIBPREF)$(NAME)_dll.lib'
2991 enable dos_paths
2993 gnu/kfreebsd)
2994 add_cppflags -D_BSD_SOURCE
2996 gnu)
2998 qnx)
2999 add_cppflags -D_QNX_SOURCE
3000 network_extralibs="-lsocket"
3002 symbian)
3003 SLIBSUF=".dll"
3004 enable dos_paths
3005 add_cflags --include=$sysinclude/gcce/gcce.h -fvisibility=default
3006 add_cppflags -D__GCCE__ -D__SYMBIAN32__ -DSYMBIAN_OE_POSIX_SIGNALS
3007 add_ldflags -Wl,--target1-abs,--no-undefined \
3008 -Wl,-Ttext,0x80000,-Tdata,0x1000000 -shared \
3009 -Wl,--entry=_E32Startup -Wl,-u,_E32Startup
3010 add_extralibs -l:eexe.lib -l:usrt2_2.lib -l:dfpaeabi.dso \
3011 -l:drtaeabi.dso -l:scppnwdl.dso -lsupc++ -lgcc \
3012 -l:libc.dso -l:libm.dso -l:euser.dso -l:libcrt0.lib
3014 osf1)
3015 add_cppflags -D_OSF_SOURCE -D_POSIX_PII -D_REENTRANT
3016 AVSERVERLDFLAGS=
3018 minix)
3020 plan9)
3021 add_cppflags -D_C99_SNPRINTF_EXTENSION \
3022 -D_REENTRANT_SOURCE \
3023 -D_RESEARCH_SOURCE \
3024 -DFD_SETSIZE=96 \
3025 -DHAVE_SOCK_OPTS
3026 add_compat strtod.o strtod=avpriv_strtod
3027 network_extralibs='-lbsd'
3028 exeobjs=compat/plan9/main.o
3029 disable avserver
3030 ln_s='ln -s -f'
3031 cp_f='cp'
3033 none)
3036 die "Unknown OS '$target_os'."
3038 esac
3040 # determine libc flavour
3042 # uclibc defines __GLIBC__, so it needs to be checked before glibc.
3043 if check_cpp_condition features.h "defined __UCLIBC__"; then
3044 libc_type=uclibc
3045 add_cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
3046 elif check_cpp_condition features.h "defined __GLIBC__"; then
3047 libc_type=glibc
3048 add_cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
3049 # MinGW headers can be installed on Cygwin, so check for newlib first.
3050 elif check_cpp_condition newlib.h "defined _NEWLIB_VERSION"; then
3051 libc_type=newlib
3052 add_cppflags -U__STRICT_ANSI__
3053 elif check_header _mingw.h; then
3054 libc_type=mingw
3055 check_cpp_condition _mingw.h \
3056 "defined (__MINGW64_VERSION_MAJOR) || (__MINGW32_MAJOR_VERSION > 3) || \
3057 (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
3058 die "ERROR: MinGW runtime version must be >= 3.15."
3059 add_cppflags -U__STRICT_ANSI__
3060 elif check_func_headers stdlib.h _get_doserrno; then
3061 libc_type=msvcrt
3062 add_compat strtod.o strtod=avpriv_strtod
3063 add_compat msvcrt/snprintf.o snprintf=avpriv_snprintf \
3064 _snprintf=avpriv_snprintf \
3065 vsnprintf=avpriv_vsnprintf
3066 elif check_cpp_condition stddef.h "defined __KLIBC__"; then
3067 libc_type=klibc
3070 test -n "$libc_type" && enable $libc_type
3072 # hacks for compiler/libc/os combinations
3074 if enabled_all tms470 glibc; then
3075 CPPFLAGS="-I${source_path}/compat/tms470 ${CPPFLAGS}"
3076 add_cppflags -D__USER_LABEL_PREFIX__=
3077 add_cppflags -D__builtin_memset=memset
3078 add_cppflags -D__gnuc_va_list=va_list -D_VA_LIST_DEFINED
3079 add_cflags -pds=48 # incompatible redefinition of macro
3082 if enabled_all ccc glibc; then
3083 add_ldflags -Wl,-z,now # calls to libots crash without this
3086 esc(){
3087 echo "$*" | sed 's/%/%25/g;s/:/%3a/g'
3090 echo "config:$arch:$subarch:$cpu:$target_os:$(esc $cc_ident):$(esc $LIBAV_CONFIGURATION)" >config.fate
3092 check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable pic
3094 set_default $PATHS_LIST
3095 set_default nm
3097 # we need to build at least one lib type
3098 if ! enabled_any static shared; then
3099 cat <<EOF
3100 At least one library type must be built.
3101 Specify --enable-static to build the static libraries or --enable-shared to
3102 build the shared libraries as well. To only build the shared libraries specify
3103 --disable-static in addition to --enable-shared.
3105 exit 1;
3108 die_license_disabled() {
3109 enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
3112 die_license_disabled gpl libcdio
3113 die_license_disabled gpl libx264
3114 die_license_disabled gpl libxavs
3115 die_license_disabled gpl libxvid
3116 die_license_disabled gpl x11grab
3118 die_license_disabled nonfree libfaac
3119 die_license_disabled nonfree libfdk_aac
3120 die_license_disabled nonfree openssl
3122 die_license_disabled version3 libopencore_amrnb
3123 die_license_disabled version3 libopencore_amrwb
3124 die_license_disabled version3 libvo_aacenc
3125 die_license_disabled version3 libvo_amrwbenc
3127 enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
3129 disabled optimizations || check_cflags -fomit-frame-pointer
3131 enable_pic() {
3132 enable pic
3133 add_cppflags -DPIC
3134 add_cflags -fPIC
3135 add_asflags -fPIC
3138 enabled pic && enable_pic
3140 check_cc <<EOF || die "Symbol mangling check failed."
3141 int ff_extern;
3143 sym=$($nm $TMPO | awk '/ff_extern/{ print substr($0, match($0, /[^ \t]*ff_extern/)) }')
3144 extern_prefix=${sym%%ff_extern*}
3146 check_cc <<EOF && enable_weak inline_asm
3147 void foo(void) { __asm__ volatile ("" ::); }
3150 _restrict=
3151 for restrict_keyword in restrict __restrict__ __restrict; do
3152 check_cc <<EOF && _restrict=$restrict_keyword && break
3153 void foo(char * $restrict_keyword p);
3155 done
3157 check_cc <<EOF && enable attribute_packed
3158 struct { int x; } __attribute__((packed)) x;
3161 check_cc <<EOF && enable attribute_may_alias
3162 union { int x; } __attribute__((may_alias)) x;
3165 check_cc <<EOF || die "endian test failed"
3166 unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
3168 od -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
3170 if enabled alpha; then
3172 check_cflags -mieee
3174 elif enabled arm; then
3176 check_cpp_condition stddef.h "defined __thumb__" && enable_weak thumb
3177 enabled thumb && check_cflags -mthumb || check_cflags -marm
3178 nogas=die
3180 if check_cpp_condition stddef.h "defined __ARM_PCS_VFP"; then
3181 enable vfp_args
3182 elif ! check_cpp_condition stddef.h "defined __ARM_PCS || defined __SOFTFP__"; then
3183 case "${cross_prefix:-$cc}" in
3184 *hardfloat*) enable vfp_args; fpabi=vfp ;;
3185 *) check_ld <<EOF && enable vfp_args && fpabi=vfp || fpabi=soft ;;
3186 __asm__ (".eabi_attribute 28, 1");
3187 int main(void) { return 0; }
3189 esac
3190 warn "Compiler does not indicate floating-point ABI, guessing $fpabi."
3193 enabled armv5te && check_insn armv5te 'qadd r0, r0, r0'
3194 enabled armv6 && check_insn armv6 'sadd16 r0, r0, r0'
3195 enabled armv6t2 && check_insn armv6t2 'movt r0, #0'
3196 enabled neon && check_insn neon 'vadd.i16 q0, q0, q0'
3197 enabled vfp && check_insn vfp 'fadds s0, s0, s0'
3198 enabled vfpv3 && check_insn vfpv3 'vmov.f32 s0, #1.0'
3200 [ $target_os = linux ] ||
3201 map 'enabled_any ${v}_external ${v}_inline || disable $v' \
3202 $ARCH_EXT_LIST_ARM
3204 check_inline_asm asm_mod_q '"add r0, %Q0, %R0" :: "r"((long long)0)'
3205 check_inline_asm asm_mod_y '"vmul.i32 d0, d0, %y0" :: "x"(0)'
3207 enabled_all armv6t2 shared !pic && enable_pic
3209 elif enabled mips; then
3211 check_inline_asm loongson '"dmult.g $1, $2, $3"'
3213 elif enabled parisc; then
3215 if enabled gcc; then
3216 case $($cc -dumpversion) in
3217 4.[3-8].*) check_cflags -fno-optimize-sibling-calls ;;
3218 esac
3221 elif enabled ppc; then
3223 enable local_aligned_8 local_aligned_16
3225 check_inline_asm dcbzl '"dcbzl 0, %0" :: "r"(0)'
3226 check_inline_asm ibm_asm '"add 0, 0, 0"'
3227 check_inline_asm ppc4xx '"maclhw r10, r11, r12"'
3228 check_inline_asm xform_asm '"lwzx %1, %y0" :: "Z"(*(int*)0), "r"(0)'
3230 # AltiVec flags: The FSF version of GCC differs from the Apple version
3231 if enabled altivec; then
3232 nogas=warn
3233 check_cflags -maltivec -mabi=altivec &&
3234 { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
3235 check_cflags -faltivec
3237 # check if our compiler supports Motorola AltiVec C API
3238 check_cc <<EOF || disable altivec
3239 $inc_altivec_h
3240 int main(void) {
3241 vector signed int v1 = (vector signed int) { 0 };
3242 vector signed int v2 = (vector signed int) { 1 };
3243 v1 = vec_add(v1, v2);
3244 return 0;
3248 enabled altivec || warn "Altivec disabled, possibly missing --cpu flag"
3251 elif enabled sparc; then
3253 enabled vis && check_inline_asm vis '"pdist %f0, %f0, %f0"'
3255 elif enabled x86; then
3257 check_code ld intrin.h "__rdtsc()" && enable rdtsc
3259 check_code ld mmintrin.h "_mm_empty()" && enable mm_empty
3261 enable local_aligned_8 local_aligned_16
3263 # check whether EBP is available on x86
3264 # As 'i' is stored on the stack, this program will crash
3265 # if the base pointer is used to access it because the
3266 # base pointer is cleared in the inline assembly code.
3267 check_exec_crash <<EOF && enable ebp_available
3268 volatile int i=0;
3269 __asm__ volatile ("xorl %%ebp, %%ebp" ::: "%ebp");
3270 return i;
3273 # check whether EBX is available on x86
3274 check_inline_asm ebx_available '""::"b"(0)' &&
3275 check_inline_asm ebx_available '"":::"%ebx"'
3277 # check whether xmm clobbers are supported
3278 check_inline_asm xmm_clobbers '"":::"%xmm0"'
3280 # check whether binutils is new enough to compile SSSE3/MMXEXT
3281 enabled ssse3 && check_inline_asm ssse3_inline '"pabsw %xmm0, %xmm0"'
3282 enabled mmxext && check_inline_asm mmxext_inline '"pmaxub %mm0, %mm1"'
3284 if ! disabled_any asm mmx yasm; then
3285 if check_cmd $yasmexe --version; then
3286 enabled x86_64 && yasm_extra="-m amd64"
3287 yasm_debug="-g dwarf2"
3288 elif check_cmd nasm -v; then
3289 yasmexe=nasm
3290 yasm_debug="-g -F dwarf"
3291 enabled x86_64 && test "$objformat" = elf && objformat=elf64
3294 YASMFLAGS="-f $objformat $yasm_extra"
3295 enabled pic && append YASMFLAGS "-DPIC"
3296 test -n "$extern_prefix" && append YASMFLAGS "-DPREFIX"
3297 case "$objformat" in
3298 elf*) enabled debug && append YASMFLAGS $yasm_debug ;;
3299 esac
3301 check_yasm "vextractf128 xmm0, ymm0, 0" && enable yasm ||
3302 die "yasm not found, use --disable-yasm for a crippled build"
3303 check_yasm "vfmaddps ymm0, ymm1, ymm2, ymm3" || disable fma4_external
3304 check_yasm "CPU amdnop" && enable cpunop
3307 case "$cpu" in
3308 athlon*|opteron*|k8*|pentium|pentium-mmx|prescott|nocona|atom|geode)
3309 disable fast_clz
3311 esac
3315 if enabled asm; then
3316 as=${gas:=$as}
3317 check_as <<EOF && enable gnu_as || \
3318 $nogas "GNU assembler not found, install gas-preprocessor"
3319 .macro m n
3320 \n: .int 0
3321 .endm
3326 check_ldflags -Wl,--as-needed
3328 if check_func dlopen; then
3329 ldl=
3330 elif check_func dlopen -ldl; then
3331 ldl=-ldl
3334 if ! disabled network; then
3335 check_type "sys/types.h sys/socket.h" socklen_t
3336 check_type netdb.h "struct addrinfo"
3337 check_type netinet/in.h "struct group_source_req" -D_BSD_SOURCE
3338 check_type netinet/in.h "struct ip_mreq_source" -D_BSD_SOURCE
3339 check_type netinet/in.h "struct ipv6_mreq" -D_DARWIN_C_SOURCE
3340 check_type netinet/in.h "struct sockaddr_in6"
3341 check_type poll.h "struct pollfd"
3342 check_type "sys/types.h sys/socket.h" "struct sockaddr_storage"
3343 check_struct "sys/types.h sys/socket.h" "struct sockaddr" sa_len
3344 check_type netinet/sctp.h "struct sctp_event_subscribe"
3345 check_func getaddrinfo $network_extralibs
3346 check_func getservbyport $network_extralibs
3347 # Prefer arpa/inet.h over winsock2
3348 if check_header arpa/inet.h ; then
3349 check_func closesocket
3350 elif check_header winsock2.h ; then
3351 check_func_headers winsock2.h closesocket -lws2 &&
3352 network_extralibs="-lws2" ||
3353 { check_func_headers winsock2.h closesocket -lws2_32 &&
3354 network_extralibs="-lws2_32"; }
3355 check_func_headers ws2tcpip.h getaddrinfo $network_extralibs
3356 check_type ws2tcpip.h socklen_t
3357 check_type ws2tcpip.h "struct addrinfo"
3358 check_type ws2tcpip.h "struct group_source_req"
3359 check_type ws2tcpip.h "struct ip_mreq_source"
3360 check_type ws2tcpip.h "struct ipv6_mreq"
3361 check_type winsock2.h "struct pollfd"
3362 check_type ws2tcpip.h "struct sockaddr_in6"
3363 check_type ws2tcpip.h "struct sockaddr_storage"
3364 check_struct winsock2.h "struct sockaddr" sa_len
3365 else
3366 disable network
3370 # Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
3371 check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
3373 check_func fcntl
3374 check_func fork
3375 check_func gethrtime
3376 check_func getopt
3377 check_func getrusage
3378 check_struct "sys/time.h sys/resource.h" "struct rusage" ru_maxrss
3379 check_func gettimeofday
3380 check_func inet_aton $network_extralibs
3381 check_func isatty
3382 check_func localtime_r
3383 check_func ${malloc_prefix}memalign && enable memalign
3384 check_func mkstemp
3385 check_func mmap
3386 check_func mprotect
3387 check_func ${malloc_prefix}posix_memalign && enable posix_memalign
3388 check_func_headers malloc.h _aligned_malloc && enable aligned_malloc
3389 check_func setrlimit
3390 check_func strerror_r
3391 check_func strptime
3392 check_func strtok_r
3393 check_func sched_getaffinity
3394 check_func sysconf
3395 check_func sysctl
3396 check_func usleep
3397 check_func_headers io.h setmode
3398 check_lib2 "windows.h shellapi.h" CommandLineToArgvW -lshell32
3399 check_lib2 "windows.h wincrypt.h" CryptGenRandom -ladvapi32
3400 check_lib2 "windows.h psapi.h" GetProcessMemoryInfo -lpsapi
3401 check_func_headers windows.h GetProcessAffinityMask
3402 check_func_headers windows.h GetProcessTimes
3403 check_func_headers windows.h GetSystemTimeAsFileTime
3404 check_func_headers windows.h MapViewOfFile
3405 check_func_headers windows.h SetConsoleTextAttribute
3406 check_func_headers windows.h Sleep
3407 check_func_headers windows.h VirtualAlloc
3409 check_header direct.h
3410 check_header dlfcn.h
3411 check_header dxva.h
3412 check_header dxva2api.h
3413 check_header io.h
3414 check_header malloc.h
3415 check_header poll.h
3416 check_header sys/mman.h
3417 check_header sys/param.h
3418 check_header sys/resource.h
3419 check_header sys/select.h
3420 check_header sys/time.h
3421 check_header unistd.h
3422 check_header vdpau/vdpau.h
3423 check_header vdpau/vdpau_x11.h
3424 check_header windows.h
3425 check_header X11/extensions/XvMClib.h
3427 disabled zlib || check_lib zlib.h zlibVersion -lz || disable zlib
3428 disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
3430 if ! disabled w32threads && ! enabled pthreads; then
3431 check_func_headers "windows.h process.h" _beginthreadex && enable w32threads
3434 # check for some common methods of building with pthread support
3435 # do this before the optional library checks as some of them require pthreads
3436 if ! disabled pthreads && ! enabled w32threads; then
3437 enable pthreads
3438 if check_func pthread_create; then
3440 elif check_func pthread_create -pthread; then
3441 add_cflags -pthread
3442 add_extralibs -pthread
3443 elif check_func pthread_create -pthreads; then
3444 add_cflags -pthreads
3445 add_extralibs -pthreads
3446 elif check_func pthread_create -lpthreadGC2; then
3447 add_extralibs -lpthreadGC2
3448 elif ! check_lib pthread.h pthread_create -lpthread; then
3449 disable pthreads
3453 for thread in $THREADS_LIST; do
3454 if enabled $thread; then
3455 test -n "$thread_type" &&
3456 die "ERROR: Only one thread type must be selected." ||
3457 thread_type="$thread"
3459 done
3461 check_lib math.h sin -lm && LIBM="-lm"
3462 enabled vaapi && require vaapi va/va.h vaInitialize -lva
3464 atan2f_args=2
3465 ldexpf_args=2
3466 powf_args=2
3468 for func in $MATH_FUNCS; do
3469 eval check_mathfunc $func \${${func}_args:-1}
3470 done
3472 # these are off by default, so fail if requested and not available
3473 enabled avisynth && require2 vfw32 "windows.h vfw.h" AVIFileInit -lavifil32
3474 enabled frei0r && { check_header frei0r.h || die "ERROR: frei0r.h header not found"; }
3475 enabled gnutls && require_pkg_config gnutls gnutls/gnutls.h gnutls_global_init
3476 enabled libfaac && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
3477 enabled libfdk_aac && require libfdk_aac fdk-aac/aacenc_lib.h aacEncOpen -lfdk-aac
3478 enabled libfreetype && require_pkg_config freetype2 "ft2build.h freetype/freetype.h" FT_Init_FreeType
3479 enabled libgsm && { for gsm_hdr in "gsm.h" "gsm/gsm.h"; do
3480 check_lib "${gsm_hdr}" gsm_create -lgsm && break;
3481 done || die "ERROR: libgsm not found"; }
3482 enabled libilbc && require libilbc ilbc.h WebRtcIlbcfix_InitDecode -lilbc
3483 enabled libmp3lame && require "libmp3lame >= 3.98.3" lame/lame.h lame_set_VBR_quality -lmp3lame
3484 enabled libopencore_amrnb && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb
3485 enabled libopencore_amrwb && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb
3486 enabled libopencv && require_pkg_config opencv opencv/cv.h cvCreateImageHeader
3487 enabled libopenjpeg && require libopenjpeg openjpeg.h opj_version -lopenjpeg
3488 enabled libopus && require_pkg_config opus opus_multistream.h opus_multistream_decoder_create
3489 enabled libpulse && require_pkg_config libpulse-simple pulse/simple.h pa_simple_new
3490 enabled librtmp && require_pkg_config librtmp librtmp/rtmp.h RTMP_Socket
3491 enabled libschroedinger && require_pkg_config schroedinger-1.0 schroedinger/schro.h schro_init
3492 enabled libspeex && require libspeex speex/speex.h speex_decoder_init -lspeex
3493 enabled libtheora && require libtheora theora/theoraenc.h th_info_init -ltheoraenc -ltheoradec -logg
3494 enabled libvo_aacenc && require libvo_aacenc vo-aacenc/voAAC.h voGetAACEncAPI -lvo-aacenc
3495 enabled libvo_amrwbenc && require libvo_amrwbenc vo-amrwbenc/enc_if.h E_IF_init -lvo-amrwbenc
3496 enabled libvorbis && require libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
3497 enabled libvpx && {
3498 enabled libvpx_vp8_decoder && { check_lib2 "vpx/vpx_decoder.h vpx/vp8dx.h" vpx_codec_dec_init_ver -lvpx ||
3499 die "ERROR: libvpx decoder version must be >=0.9.1"; }
3500 enabled libvpx_vp8_encoder && { check_lib2 "vpx/vpx_encoder.h vpx/vp8cx.h" "vpx_codec_enc_init_ver VPX_CQ" -lvpx ||
3501 die "ERROR: libvpx encoder version must be >=0.9.6"; }
3502 enabled libvpx_vp9_decoder && { check_lib2 "vpx/vpx_decoder.h vpx/vp8dx.h" "vpx_codec_vp9_dx" -lvpx || disable libvpx_vp9_decoder; }
3503 enabled libvpx_vp9_encoder && { check_lib2 "vpx/vpx_encoder.h vpx/vp8cx.h" "vpx_codec_vp9_cx" -lvpx || disable libvpx_vp9_encoder; } }
3504 enabled libx264 && require libx264 x264.h x264_encoder_encode -lx264 &&
3505 { check_cpp_condition x264.h "X264_BUILD >= 118" ||
3506 die "ERROR: libx264 version must be >= 0.118."; }
3507 enabled libxavs && require libxavs xavs.h xavs_encoder_encode -lxavs
3508 enabled libxvid && require libxvid xvid.h xvid_global -lxvidcore
3509 enabled openssl && { check_lib openssl/ssl.h SSL_library_init -lssl -lcrypto ||
3510 check_lib openssl/ssl.h SSL_library_init -lssl32 -leay32 ||
3511 check_lib openssl/ssl.h SSL_library_init -lssl -lcrypto -lws2_32 -lgdi32 ||
3512 die "ERROR: openssl not found"; }
3514 if enabled gnutls; then
3515 { check_lib nettle/bignum.h nettle_mpz_get_str_256 -lnettle -lhogweed -lgmp && enable nettle; } ||
3516 { check_lib gcrypt.h gcry_mpi_new -lgcrypt && enable gcrypt; }
3519 # libdc1394 check
3520 if enabled libdc1394; then
3521 { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
3522 enable libdc1394_2; } ||
3523 { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
3524 enable libdc1394_1; } ||
3525 die "ERROR: No version of libdc1394 found "
3528 if check_pkg_config sdl SDL_events.h SDL_PollEvent; then
3529 check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
3530 enable sdl &&
3531 check_struct SDL.h SDL_VideoInfo current_w $sdl_cflags && enable sdl_video_size
3534 texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
3536 check_header linux/fb.h
3537 check_header linux/videodev2.h
3538 check_struct linux/videodev2.h "struct v4l2_frmivalenum" discrete
3540 check_header sys/videoio.h
3542 check_func_headers "windows.h vfw.h" capCreateCaptureWindow "$vfwcap_indev_extralibs"
3543 # check that WM_CAP_DRIVER_CONNECT is defined to the proper value
3544 # w32api 3.12 had it defined wrong
3545 check_cpp_condition vfw.h "WM_CAP_DRIVER_CONNECT > WM_USER" && enable vfwcap_defines
3547 # check for ioctl_meteor.h, ioctl_bt848.h and alternatives
3548 { check_header dev/bktr/ioctl_meteor.h &&
3549 check_header dev/bktr/ioctl_bt848.h; } ||
3550 { check_header machine/ioctl_meteor.h &&
3551 check_header machine/ioctl_bt848.h; } ||
3552 { check_header dev/video/meteor/ioctl_meteor.h &&
3553 check_header dev/video/bktr/ioctl_bt848.h; } ||
3554 check_header dev/ic/bt8xx.h
3556 check_header sndio.h
3557 check_header sys/soundcard.h
3558 check_header soundcard.h
3560 enabled_any alsa_indev alsa_outdev && check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
3562 enabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack &&
3563 check_func jack_port_get_latency_range -ljack
3565 enabled_any sndio_indev sndio_outdev && check_lib2 sndio.h sio_open -lsndio
3567 if enabled libcdio; then
3568 check_lib2 "cdio/cdda.h cdio/paranoia.h" cdio_cddap_open -lcdio_paranoia -lcdio_cdda -lcdio || check_lib2 "cdio/paranoia/cdda.h cdio/paranoia/paranoia.h" cdio_cddap_open -lcdio_paranoia -lcdio_cdda -lcdio
3571 enabled x11grab &&
3572 require X11 X11/Xlib.h XOpenDisplay -lX11 &&
3573 require Xext X11/extensions/XShm.h XShmCreateImage -lXext &&
3574 require Xfixes X11/extensions/Xfixes.h XFixesGetCursorImage -lXfixes
3576 # check for VDA header
3577 if ! disabled vda && check_header VideoDecodeAcceleration/VDADecoder.h; then
3578 enable vda && add_extralibs -framework CoreFoundation -framework VideoDecodeAcceleration -framework QuartzCore
3581 if ! disabled vdpau && enabled vdpau_vdpau_h; then
3582 check_cpp_condition vdpau/vdpau.h "defined VDP_DECODER_PROFILE_MPEG4_PART2_ASP" ||
3583 { echolog "Please upgrade to libvdpau >= 0.2 if you would like vdpau support." && disable vdpau; }
3586 enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel"
3588 # add some useful compiler flags if supported
3589 check_cflags -Wdeclaration-after-statement
3590 check_cflags -Wall
3591 check_cflags -Wno-parentheses
3592 check_cflags -Wno-switch
3593 check_cflags -Wno-format-zero-length
3594 check_cflags -Wdisabled-optimization
3595 check_cflags -Wpointer-arith
3596 check_cflags -Wredundant-decls
3597 check_cflags -Wno-pointer-sign
3598 check_cflags -Wcast-qual
3599 check_cflags -Wwrite-strings
3600 check_cflags -Wtype-limits
3601 check_cflags -Wundef
3602 check_cflags -Wmissing-prototypes
3603 check_cflags -Wstrict-prototypes
3604 enabled extra_warnings && check_cflags -Winline
3606 # add some linker flags
3607 check_ldflags -Wl,--warn-common
3608 check_ldflags -Wl,-rpath-link=libswscale:libavfilter:libavdevice:libavformat:libavcodec:libavutil:libavresample
3609 test_ldflags -Wl,-Bsymbolic && append SHFLAGS -Wl,-Bsymbolic
3611 enabled xmm_clobber_test &&
3612 check_ldflags -Wl,--wrap,avcodec_open2 \
3613 -Wl,--wrap,avcodec_decode_audio4 \
3614 -Wl,--wrap,avcodec_decode_video2 \
3615 -Wl,--wrap,avcodec_decode_subtitle2 \
3616 -Wl,--wrap,avcodec_encode_audio2 \
3617 -Wl,--wrap,avcodec_encode_video \
3618 -Wl,--wrap,avcodec_encode_subtitle \
3619 -Wl,--wrap,sws_scale ||
3620 disable xmm_clobber_test
3622 echo "X{};" > $TMPV
3623 if test_ldflags -Wl,--version-script,$TMPV; then
3624 append SHFLAGS '-Wl,--version-script,\$(SUBDIR)lib\$(NAME).ver'
3625 check_cc <<EOF && enable symver_asm_label
3626 void ff_foo(void) __asm__ ("av_foo@VERSION");
3627 void ff_foo(void) { ${inline_asm+__asm__($quotes);} }
3629 check_cc <<EOF && enable symver_gnu_asm
3630 __asm__(".symver ff_foo,av_foo@VERSION");
3631 void ff_foo(void) {}
3635 if [ -z "$optflags" ]; then
3636 if enabled small; then
3637 optflags=$cflags_size
3638 elif enabled optimizations; then
3639 optflags=$cflags_speed
3640 else
3641 optflags=$cflags_noopt
3645 check_optflags(){
3646 check_cflags "$@"
3647 enabled lto && check_ldflags "$@"
3651 if enabled lto; then
3652 test "$cc_type" != "$ld_type" && die "LTO requires same compiler and linker"
3653 check_cflags -flto
3654 check_ldflags -flto $cpuflags
3657 check_optflags $optflags
3658 check_optflags -fno-math-errno
3659 check_optflags -fno-signed-zeros
3661 if enabled icc; then
3662 # Just warnings, no remarks
3663 check_cflags -w1
3664 # -wd: Disable following warnings
3665 # 144, 167, 556: -Wno-pointer-sign
3666 # 1292: attribute "foo" ignored
3667 # 1419: external declaration in primary source file
3668 # 10006: ignoring unknown option -fno-signed-zeros
3669 # 10148: ignoring unknown option -Wno-parentheses
3670 # 10156: ignoring option '-W'; no argument required
3671 check_cflags -wd144,167,556,1292,1419,10006,10148,10156
3672 # 11030: Warning unknown option --as-needed
3673 # 10156: ignoring option '-export'; no argument required
3674 check_ldflags -wd10156,11030
3675 # Allow to compile with optimizations
3676 check_ldflags -march=$cpu
3677 # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
3678 enable ebp_available
3679 if enabled x86_32; then
3680 icc_version=$($cc -dumpversion)
3681 test ${icc_version%%.*} -ge 11 &&
3682 check_cflags -falign-stack=maintain-16-byte ||
3683 disable aligned_stack
3685 elif enabled ccc; then
3686 # disable some annoying warnings
3687 add_cflags -msg_disable bitnotint
3688 add_cflags -msg_disable mixfuncvoid
3689 add_cflags -msg_disable nonstandcast
3690 add_cflags -msg_disable unsupieee
3691 elif enabled gcc; then
3692 check_optflags -fno-tree-vectorize
3693 check_cflags -Werror=implicit-function-declaration
3694 check_cflags -Werror=missing-prototypes
3695 check_cflags -Werror=return-type
3696 check_cflags -Werror=declaration-after-statement
3697 check_cflags -Werror=vla
3698 elif enabled llvm_gcc; then
3699 check_cflags -mllvm -stack-alignment=16
3700 elif enabled clang; then
3701 check_cflags -mllvm -stack-alignment=16
3702 check_cflags -Qunused-arguments
3703 check_cflags -Werror=implicit-function-declaration
3704 check_cflags -Werror=missing-prototypes
3705 check_cflags -Werror=return-type
3706 elif enabled armcc; then
3707 # 2523: use of inline assembler is deprecated
3708 add_cflags -W${armcc_opt},--diag_suppress=2523
3709 add_cflags -W${armcc_opt},--diag_suppress=1207
3710 add_cflags -W${armcc_opt},--diag_suppress=1293 # assignment in condition
3711 add_cflags -W${armcc_opt},--diag_suppress=3343 # hardfp compat
3712 add_cflags -W${armcc_opt},--diag_suppress=167 # pointer sign
3713 add_cflags -W${armcc_opt},--diag_suppress=513 # pointer sign
3714 elif enabled tms470; then
3715 add_cflags -pds=824 -pds=837
3716 elif enabled pathscale; then
3717 add_cflags -fstrict-overflow -OPT:wrap_around_unsafe_opt=OFF
3718 elif enabled msvc; then
3719 enabled x86_32 && disable aligned_stack
3722 case $target_os in
3723 osf1)
3724 enabled ccc && add_ldflags '-Wl,-expect_unresolved,*'
3726 plan9)
3727 add_cppflags -Dmain=plan9_main
3729 esac
3731 enabled_any $THREADS_LIST && enable threads
3733 enabled asm || { arch=c; disable $ARCH_LIST $ARCH_EXT_LIST; }
3735 check_deps $CONFIG_LIST \
3736 $CONFIG_EXTRA \
3737 $HAVE_LIST \
3738 $ALL_COMPONENTS \
3740 ! enabled_any memalign posix_memalign aligned_malloc &&
3741 enabled_any $need_memalign && enable memalign_hack
3743 echo "install prefix $prefix"
3744 echo "source path $source_path"
3745 echo "C compiler $cc"
3746 echo "ARCH $arch ($cpu)"
3747 if test "$build_suffix" != ""; then
3748 echo "build suffix $build_suffix"
3750 if test "$extra_version" != ""; then
3751 echo "version string suffix $extra_version"
3753 echo "big-endian ${bigendian-no}"
3754 echo "runtime cpu detection ${runtime_cpudetect-no}"
3755 if enabled x86; then
3756 echo "${yasmexe} ${yasm-no}"
3757 echo "MMX enabled ${mmx-no}"
3758 echo "MMXEXT enabled ${mmxext-no}"
3759 echo "3DNow! enabled ${amd3dnow-no}"
3760 echo "3DNow! extended enabled ${amd3dnowext-no}"
3761 echo "SSE enabled ${sse-no}"
3762 echo "SSSE3 enabled ${ssse3-no}"
3763 echo "AVX enabled ${avx-no}"
3764 echo "FMA4 enabled ${fma4-no}"
3765 echo "CMOV enabled ${cmov-no}"
3766 echo "CMOV is fast ${fast_cmov-no}"
3767 echo "EBX available ${ebx_available-no}"
3768 echo "EBP available ${ebp_available-no}"
3770 if enabled arm; then
3771 echo "ARMv5TE enabled ${armv5te-no}"
3772 echo "ARMv6 enabled ${armv6-no}"
3773 echo "ARMv6T2 enabled ${armv6t2-no}"
3774 echo "VFP enabled ${vfp-no}"
3775 echo "NEON enabled ${neon-no}"
3777 if enabled ppc; then
3778 echo "AltiVec enabled ${altivec-no}"
3779 echo "PPC 4xx optimizations ${ppc4xx-no}"
3780 echo "dcbzl available ${dcbzl-no}"
3782 if enabled sparc; then
3783 echo "VIS enabled ${vis-no}"
3785 echo "debug symbols ${debug-no}"
3786 echo "optimize for size ${small-no}"
3787 echo "optimizations ${optimizations-no}"
3788 echo "static ${static-no}"
3789 echo "shared ${shared-no}"
3790 echo "new filter support ${avfilter-no}"
3791 echo "network support ${network-no}"
3792 echo "threading support ${thread_type-no}"
3793 echo "safe bitstream reader ${safe_bitstream_reader-no}"
3794 echo "SDL support ${sdl-no}"
3795 echo "libdxva2 enabled ${dxva2-no}"
3796 echo "libva enabled ${vaapi-no}"
3797 echo "libvdpau enabled ${vdpau-no}"
3798 echo "AVISynth enabled ${avisynth-no}"
3799 echo "frei0r enabled ${frei0r-no}"
3800 echo "gnutls enabled ${gnutls-no}"
3801 echo "libcdio support ${libcdio-no}"
3802 echo "libdc1394 support ${libdc1394-no}"
3803 echo "libfaac enabled ${libfaac-no}"
3804 echo "libfdk-aac enabled ${libfdk_aac-no}"
3805 echo "libgsm enabled ${libgsm-no}"
3806 echo "libilbc enabled ${libilbc-no}"
3807 echo "libmp3lame enabled ${libmp3lame-no}"
3808 echo "libopencore-amrnb support ${libopencore_amrnb-no}"
3809 echo "libopencore-amrwb support ${libopencore_amrwb-no}"
3810 echo "libopencv support ${libopencv-no}"
3811 echo "libopenjpeg enabled ${libopenjpeg-no}"
3812 echo "libopus enabled ${libopus-no}"
3813 echo "libpulse enabled ${libpulse-no}"
3814 echo "librtmp enabled ${librtmp-no}"
3815 echo "libschroedinger enabled ${libschroedinger-no}"
3816 echo "libspeex enabled ${libspeex-no}"
3817 echo "libtheora enabled ${libtheora-no}"
3818 echo "libvo-aacenc support ${libvo_aacenc-no}"
3819 echo "libvo-amrwbenc support ${libvo_amrwbenc-no}"
3820 echo "libvorbis enabled ${libvorbis-no}"
3821 echo "libvpx enabled ${libvpx-no}"
3822 echo "libx264 enabled ${libx264-no}"
3823 echo "libxavs enabled ${libxavs-no}"
3824 echo "libxvid enabled ${libxvid-no}"
3825 echo "openssl enabled ${openssl-no}"
3826 echo "zlib enabled ${zlib-no}"
3827 echo "bzlib enabled ${bzlib-no}"
3828 test -n "$random_seed" &&
3829 echo "random seed ${random_seed}"
3830 echo
3832 for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
3833 echo "Enabled ${type}s:"
3834 eval list=\$$(toupper $type)_LIST
3835 print_enabled '_*' $list | sort | pr -r -3 -t
3836 echo
3837 done
3839 license="LGPL version 2.1 or later"
3840 if enabled nonfree; then
3841 license="nonfree and unredistributable"
3842 elif enabled gplv3; then
3843 license="GPL version 3 or later"
3844 elif enabled lgplv3; then
3845 license="LGPL version 3 or later"
3846 elif enabled gpl; then
3847 license="GPL version 2 or later"
3850 echo "License: $license"
3852 echo "Creating config.mak and config.h..."
3854 test -e Makefile || $ln_s "$source_path/Makefile" .
3856 config_files="$TMPH config.mak"
3858 cat > config.mak <<EOF
3859 # Automatically generated by configure - do not modify!
3860 LIBAV_CONFIGURATION=$LIBAV_CONFIGURATION
3861 prefix=$prefix
3862 LIBDIR=\$(DESTDIR)$libdir
3863 SHLIBDIR=\$(DESTDIR)$shlibdir
3864 INCDIR=\$(DESTDIR)$incdir
3865 BINDIR=\$(DESTDIR)$bindir
3866 DATADIR=\$(DESTDIR)$datadir
3867 MANDIR=\$(DESTDIR)$mandir
3868 SRC_PATH=$source_path
3869 CC_IDENT=$cc_ident
3870 ARCH=$arch
3871 CC=$cc
3872 AS=$as
3873 LD=$ld
3874 DEPCC=$dep_cc
3875 DEPCCFLAGS=$DEPCCFLAGS \$(CPPFLAGS)
3876 DEPAS=$as
3877 DEPASFLAGS=$DEPASFLAGS \$(CPPFLAGS)
3878 YASM=$yasmexe
3879 DEPYASM=$yasmexe
3880 AR=$ar
3881 ARFLAGS=$arflags
3882 AR_O=$ar_o
3883 RANLIB=$ranlib
3884 LN_S=$ln_s
3885 CPPFLAGS=$CPPFLAGS
3886 CFLAGS=$CFLAGS
3887 ASFLAGS=$ASFLAGS
3888 AS_C=$AS_C
3889 AS_O=$AS_O
3890 CC_C=$CC_C
3891 CC_E=$CC_E
3892 CC_O=$CC_O
3893 LD_O=$LD_O
3894 LD_LIB=$LD_LIB
3895 LD_PATH=$LD_PATH
3896 DLLTOOL=$dlltool
3897 LDFLAGS=$LDFLAGS
3898 LDFLAGS-avserver=$AVSERVERLDFLAGS
3899 SHFLAGS=$(echo $($ldflags_filter $SHFLAGS))
3900 YASMFLAGS=$YASMFLAGS
3901 BUILDSUF=$build_suffix
3902 FULLNAME=$FULLNAME
3903 LIBPREF=$LIBPREF
3904 LIBSUF=$LIBSUF
3905 LIBNAME=$LIBNAME
3906 SLIBPREF=$SLIBPREF
3907 SLIBSUF=$SLIBSUF
3908 EXESUF=$EXESUF
3909 EXTRA_VERSION=$extra_version
3910 CCDEP=$CCDEP
3911 CCDEP_FLAGS=$CCDEP_FLAGS
3912 ASDEP=$ASDEP
3913 ASDEP_FLAGS=$ASDEP_FLAGS
3914 CC_DEPFLAGS=$CC_DEPFLAGS
3915 AS_DEPFLAGS=$AS_DEPFLAGS
3916 HOSTCC=$host_cc
3917 HOSTLD=$host_ld
3918 HOSTCFLAGS=$host_cflags
3919 HOSTEXESUF=$HOSTEXESUF
3920 HOSTLDFLAGS=$host_ldflags
3921 HOSTLIBS=$host_libs
3922 DEPHOSTCC=$host_cc
3923 DEPHOSTCCFLAGS=$DEPHOSTCCFLAGS \$(HOSTCCFLAGS)
3924 HOSTCCDEP=$HOSTCCDEP
3925 HOSTCCDEP_FLAGS=$HOSTCCDEP_FLAGS
3926 HOSTCC_DEPFLAGS=$HOSTCC_DEPFLAGS
3927 HOSTCC_C=$HOSTCC_C
3928 HOSTCC_O=$HOSTCC_O
3929 HOSTLD_O=$HOSTLD_O
3930 TARGET_EXEC=$target_exec
3931 TARGET_PATH=$target_path
3932 LIBS-avplay=$sdl_libs
3933 CFLAGS-avplay=$sdl_cflags
3934 ZLIB=$($ldflags_filter -lz)
3935 LIB_INSTALL_EXTRA_CMD=$LIB_INSTALL_EXTRA_CMD
3936 EXTRALIBS=$extralibs
3937 COMPAT_OBJS=$compat_objs
3938 EXEOBJS=$exeobjs
3939 INSTALL=install
3940 LIBTARGET=${LIBTARGET}
3941 SLIBNAME=${SLIBNAME}
3942 SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}
3943 SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}
3944 SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}
3945 SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}
3946 SLIB_INSTALL_NAME=${SLIB_INSTALL_NAME}
3947 SLIB_INSTALL_LINKS=${SLIB_INSTALL_LINKS}
3948 SLIB_INSTALL_EXTRA_LIB=${SLIB_INSTALL_EXTRA_LIB}
3949 SLIB_INSTALL_EXTRA_SHLIB=${SLIB_INSTALL_EXTRA_SHLIB}
3950 SAMPLES:=${samples:-\$(LIBAV_SAMPLES)}
3953 get_version(){
3954 lcname=lib${1}
3955 name=$(toupper $lcname)
3956 file=$source_path/$lcname/version.h
3957 eval $(awk "/#define ${name}_VERSION_M/ { print \$2 \"=\" \$3 }" "$file")
3958 eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
3959 eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
3960 eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
3961 eval echo "${lcname}_VERSION_MINOR=\$${name}_VERSION_MINOR" >> config.mak
3964 map 'get_version $v' $LIBRARY_LIST
3966 cat > $TMPH <<EOF
3967 /* Automatically generated by configure - do not modify! */
3968 #ifndef LIBAV_CONFIG_H
3969 #define LIBAV_CONFIG_H
3970 #define LIBAV_CONFIGURATION "$(c_escape $LIBAV_CONFIGURATION)"
3971 #define LIBAV_LICENSE "$(c_escape $license)"
3972 #define AVCONV_DATADIR "$(eval c_escape $datadir)"
3973 #define CC_IDENT "$(c_escape ${cc_ident:-Unknown compiler})"
3974 #define restrict $_restrict
3975 #define EXTERN_PREFIX "${extern_prefix}"
3976 #define EXTERN_ASM ${extern_prefix}
3977 #define SLIBSUF "$SLIBSUF"
3980 test -n "$malloc_prefix" &&
3981 echo "#define MALLOC_PREFIX $malloc_prefix" >>$TMPH
3983 if enabled yasm; then
3984 append config_files $TMPASM
3985 printf '' >$TMPASM
3988 print_config ARCH_ "$config_files" $ARCH_LIST
3989 print_config HAVE_ "$config_files" $HAVE_LIST
3990 print_config CONFIG_ "$config_files" $CONFIG_LIST \
3991 $CONFIG_EXTRA \
3992 $ALL_COMPONENTS \
3994 echo "#endif /* LIBAV_CONFIG_H */" >> $TMPH
3996 # Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
3997 cp_if_changed $TMPH config.h
3998 touch .config
4000 enabled yasm && cp_if_changed $TMPASM config.asm
4002 cat > $TMPH <<EOF
4003 /* Generated by ffconf */
4004 #ifndef AVUTIL_AVCONFIG_H
4005 #define AVUTIL_AVCONFIG_H
4008 print_config AV_HAVE_ $TMPH $HAVE_LIST_PUB
4010 echo "#endif /* AVUTIL_AVCONFIG_H */" >> $TMPH
4012 cp_if_changed $TMPH libavutil/avconfig.h
4014 test -n "$WARNINGS" && printf "\n$WARNINGS"
4016 # build pkg-config files
4018 pkgconfig_generate(){
4019 name=$1
4020 shortname=${name#lib}${build_suffix}
4021 comment=$2
4022 version=$3
4023 libs=$4
4024 requires=$5
4025 enabled ${name#lib} || return 0
4026 mkdir -p $name
4027 cat <<EOF > $name/$name.pc
4028 prefix=$prefix
4029 exec_prefix=\${prefix}
4030 libdir=$libdir
4031 includedir=$incdir
4033 Name: $name
4034 Description: $comment
4035 Version: $version
4036 Requires: $(enabled shared || echo $requires)
4037 Requires.private: $(enabled shared && echo $requires)
4038 Conflicts:
4039 Libs: -L\${libdir} -l${shortname} $(enabled shared || echo $libs)
4040 Libs.private: $(enabled shared && echo $libs)
4041 Cflags: -I\${includedir}
4043 cat <<EOF > $name/$name-uninstalled.pc
4044 prefix=
4045 exec_prefix=
4046 libdir=\${pcfiledir}
4047 includedir=${source_path}
4049 Name: $name
4050 Description: $comment
4051 Version: $version
4052 Requires: $requires
4053 Conflicts:
4054 Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
4055 Cflags: -I\${includedir}
4059 pkgconfig_generate libavutil "Libav utility library" "$LIBAVUTIL_VERSION" "$LIBM"
4060 pkgconfig_generate libavcodec "Libav codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
4061 pkgconfig_generate libavformat "Libav container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
4062 pkgconfig_generate libavdevice "Libav device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "libavformat = $LIBAVFORMAT_VERSION"
4063 pkgconfig_generate libavfilter "Libav video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
4064 pkgconfig_generate libavresample "Libav audio resampling library" "$LIBAVRESAMPLE_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
4065 pkgconfig_generate libswscale "Libav image rescaling library" "$LIBSWSCALE_VERSION" "$LIBM" "libavutil = $LIBAVUTIL_VERSION"