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