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