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