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