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