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