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