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