configure: check for --as-needed support early
[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 SLIBPREF=""
2414 SLIBSUF=".dll"
2415 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
2416 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
2417 SLIB_EXTRA_CMD=-'$(DLLTOOL) -m $(LIBTARGET) -d $$(@:$(SLIBSUF)=.def) -l $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) -D $(SLIBNAME_WITH_MAJOR)'
2418 SLIB_INSTALL_EXTRA_CMD='-install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"; \
2419 install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)"; \
2420 install -d "$(LIBDIR)"; \
2421 install -m 644 $(SUBDIR)lib$(SLIBNAME:$(SLIBSUF)=.dll.a) "$(LIBDIR)/lib$(SLIBNAME:$(SLIBSUF)=.dll.a)"'
2422 SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"'
2423 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'
2424 objformat="win32"
2425 dlltool="${cross_prefix}dlltool"
2426 enable dos_paths
2427 check_cflags -fno-common
2428 check_cpp_condition _mingw.h "defined (__MINGW64_VERSION_MAJOR) || (__MINGW32_MAJOR_VERSION > 3) \
2429 || (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
2430 die "ERROR: MinGW runtime version must be >= 3.15."
2431 ;;
2432 cygwin*)
2433 target_os=cygwin
2434 shlibdir_default="$bindir_default"
2435 SLIBPREF="cyg"
2436 SLIBSUF=".dll"
2437 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
2438 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
2439 SHFLAGS='-shared -Wl,--enable-auto-image-base'
2440 objformat="win32"
2441 enable dos_paths
2442 check_cflags -fno-common
2443 ;;
2444 *-dos|freedos|opendos)
2445 network_extralibs="-lsocket"
2446 objformat="coff"
2447 enable dos_paths
2448 ;;
2449 linux)
2450 enable dv1394
2451 ;;
2452 irix*)
2453 target_os=irix
2454 ranlib="echo ignoring ranlib"
2455 ;;
2456 os/2*)
2457 strip="lxlite -CS"
2458 ln_s="cp -f"
2459 add_ldflags -Zomf -Zbin-files -Zargs-wild -Zmap
2460 SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
2461 FFSERVERLDFLAGS=""
2462 LIBSUF="_s.a"
2463 SLIBPREF=""
2464 SLIBSUF=".dll"
2465 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
2466 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
2467 SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
2468 echo PROTMODE >> $(SUBDIR)$(NAME).def; \
2469 echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
2470 echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
2471 echo EXPORTS >> $(SUBDIR)$(NAME).def; \
2472 emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
2473 SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
2474 emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
2475 SLIB_INSTALL_EXTRA_CMD='install -m 644 $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib "$(LIBDIR)"'
2476 SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.a "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.lib'
2477 enable dos_paths
2478 ;;
2479 gnu/kfreebsd)
2480 ;;
2481 gnu)
2482 ;;
2483 qnx)
2484 add_cppflags -D_QNX_SOURCE
2485 network_extralibs="-lsocket"
2486 ;;
2487 none)
2488 ;;
2489 *)
2490 die "Unknown OS '$target_os'."
2491 ;;
2492 esac
2493
2494 echo "config:$arch:$subarch:$cpu:$target_os:$cc_ident:$LIBAV_CONFIGURATION" >config.fate
2495
2496 check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable pic
2497
2498 set_default $PATHS_LIST
2499
2500 # we need to build at least one lib type
2501 if ! enabled_any static shared; then
2502 cat <<EOF
2503 At least one library type must be built.
2504 Specify --enable-static to build the static libraries or --enable-shared to
2505 build the shared libraries as well. To only build the shared libraries specify
2506 --disable-static in addition to --enable-shared.
2507 EOF
2508 exit 1;
2509 fi
2510
2511 disabled static && LIBNAME=""
2512
2513 die_license_disabled() {
2514 enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
2515 }
2516
2517 die_license_disabled gpl libx264
2518 die_license_disabled gpl libxavs
2519 die_license_disabled gpl libxvid
2520 die_license_disabled gpl postproc
2521 die_license_disabled gpl x11grab
2522
2523 die_license_disabled nonfree libfaac
2524
2525 die_license_disabled version3 libopencore_amrnb
2526 die_license_disabled version3 libopencore_amrwb
2527
2528 enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
2529
2530 disabled optimizations || check_cflags -fomit-frame-pointer
2531
2532 enable_pic() {
2533 enable pic
2534 add_cppflags -DPIC
2535 add_cflags -fPIC
2536 add_asflags -fPIC
2537 }
2538
2539 enabled pic && enable_pic
2540
2541 check_cc <<EOF || die "Symbol mangling check failed."
2542 int ff_extern;
2543 EOF
2544 sym=$($nm $nm_opts $TMPO | awk '/ff_extern/{ print substr($0, match($0, /[^ \t]*ff_extern/)) }')
2545 extern_prefix=${sym%%ff_extern*}
2546
2547 check_cc <<EOF && enable inline_asm
2548 void foo(void) { __asm__ volatile ("" ::); }
2549 EOF
2550
2551 _restrict=
2552 for restrict_keyword in restrict __restrict__ __restrict; do
2553 check_cc <<EOF && _restrict=$restrict_keyword && break
2554 void foo(char * $restrict_keyword p);
2555 EOF
2556 done
2557
2558 check_cc <<EOF && enable attribute_packed
2559 struct { int x; } __attribute__((packed)) x;
2560 EOF
2561
2562 check_cc <<EOF && enable attribute_may_alias
2563 union { int x; } __attribute__((may_alias)) x;
2564 EOF
2565
2566 check_cc <<EOF || die "endian test failed"
2567 unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
2568 EOF
2569 od -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
2570
2571 if enabled alpha; then
2572
2573 check_cflags -mieee
2574
2575 elif enabled arm; then
2576
2577 check_cflags -marm
2578 nogas=die
2579
2580 if check_cpp_condition stddef.h "defined __ARM_PCS_VFP"; then
2581 enable vfp_args
2582 elif ! check_cpp_condition stddef.h "defined __ARM_PCS || defined __SOFTFP__"; then
2583 case "${cross_prefix:-$cc}" in
2584 *hardfloat*) enable vfp_args; fpabi=vfp ;;
2585 *) check_ld <<EOF && enable vfp_args && fpabi=vfp || fpabi=soft ;;
2586 __asm__ (".eabi_attribute 28, 1");
2587 int main(void) { return 0; }
2588 EOF
2589 esac
2590 warn "Compiler does not indicate floating-point ABI, guessing $fpabi."
2591 fi
2592
2593 # We have to check if pld is a nop and disable it.
2594 check_asm pld '"pld [r0]"'
2595
2596 enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
2597 enabled armv6 && check_asm armv6 '"sadd16 r0, r0, r0"'
2598 enabled armv6t2 && check_asm armv6t2 '"movt r0, #0"'
2599 enabled armvfp && check_asm armvfp '"fadds s0, s0, s0"'
2600 enabled iwmmxt && check_asm iwmmxt '"wunpckelub wr6, wr4"'
2601 enabled neon && check_asm neon '"vadd.i16 q0, q0, q0"'
2602
2603 enabled_all armv6t2 shared !pic && enable_pic
2604
2605 elif enabled mips; then
2606
2607 check_asm loongson '"dmult.g $1, $2, $3"'
2608 enabled mmi && check_asm mmi '"lq $2, 0($2)"'
2609
2610 elif enabled ppc; then
2611
2612 enable local_aligned_8 local_aligned_16
2613
2614 check_asm dcbzl '"dcbzl 0, %0" :: "r"(0)'
2615 check_asm ibm_asm '"add 0, 0, 0"'
2616 check_asm ppc4xx '"maclhw r10, r11, r12"'
2617 check_asm xform_asm '"lwzx %1, %y0" :: "Z"(*(int*)0), "r"(0)'
2618
2619 # AltiVec flags: The FSF version of GCC differs from the Apple version
2620 if enabled altivec; then
2621 nogas=warn
2622 check_cflags -maltivec -mabi=altivec &&
2623 { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
2624 check_cflags -faltivec
2625
2626 # check if our compiler supports Motorola AltiVec C API
2627 check_cc <<EOF || disable altivec
2628 $inc_altivec_h
2629 int main(void) {
2630 vector signed int v1, v2, v3;
2631 v1 = vec_add(v2,v3);
2632 return 0;
2633 }
2634 EOF
2635
2636 # check if our compiler supports braces for vector declarations
2637 check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
2638 $inc_altivec_h
2639 int main (void) { (vector int) {1}; return 0; }
2640 EOF
2641 fi
2642
2643 elif enabled sparc; then
2644
2645 enabled vis && check_asm vis '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc &&
2646 add_cflags -mcpu=ultrasparc -mtune=ultrasparc
2647
2648 elif enabled x86; then
2649
2650 enable local_aligned_8 local_aligned_16
2651
2652 # check whether EBP is available on x86
2653 # As 'i' is stored on the stack, this program will crash
2654 # if the base pointer is used to access it because the
2655 # base pointer is cleared in the inline assembly code.
2656 check_exec_crash <<EOF && enable ebp_available
2657 volatile int i=0;
2658 __asm__ volatile (
2659 "xorl %%ebp, %%ebp"
2660 ::: "%ebp");
2661 return i;
2662 EOF
2663
2664 # check whether EBX is available on x86
2665 check_asm ebx_available '""::"b"(0)' &&
2666 check_asm ebx_available '"":::"%ebx"'
2667
2668 # check whether xmm clobbers are supported
2669 check_asm xmm_clobbers '"":::"%xmm0"'
2670
2671 # check whether more than 10 operands are supported
2672 check_cc <<EOF && enable ten_operands
2673 int main(void) {
2674 int x=0;
2675 __asm__ volatile(
2676 ""
2677 :"+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x)
2678 );
2679 return 0;
2680 }
2681 EOF
2682
2683 # check whether binutils is new enough to compile SSSE3/MMX2
2684 enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
2685 enabled mmx2 && check_asm mmx2 '"pmaxub %mm0, %mm1"'
2686
2687 check_asm bswap '"bswap %%eax" ::: "%eax"'
2688
2689 if ! disabled_any asm mmx yasm; then
2690 if check_cmd $yasmexe --version; then
2691 enabled x86_64 && yasm_extra="-m amd64"
2692 yasm_debug="-g dwarf2"
2693 elif check_cmd nasm -v; then
2694 yasmexe=nasm
2695 yasm_debug="-g -F dwarf"
2696 enabled x86_64 && test "$objformat" = elf && objformat=elf64
2697 fi
2698
2699 YASMFLAGS="-f $objformat $yasm_extra"
2700 enabled pic && append YASMFLAGS "-DPIC"
2701 test -n "$extern_prefix" && append YASMFLAGS "-DPREFIX"
2702 case "$objformat" in
2703 elf*) enabled debug && append YASMFLAGS $yasm_debug ;;
2704 esac
2705
2706 check_yasm "pextrd [eax], xmm0, 1" && enable yasm ||
2707 die "yasm not found, use --disable-yasm for a crippled build"
2708 check_yasm "vpaddw xmm0, xmm0, xmm0" || disable avx
2709 fi
2710
2711 case "$cpu" in
2712 athlon*|opteron*|k8*|pentium|pentium-mmx|prescott|nocona|atom|geode)
2713 disable fast_clz
2714 ;;
2715 esac
2716
2717 fi
2718
2719 if enabled asm; then
2720 as=${gas:=$as}
2721 check_asm gnu_as '".macro m n\n\\n:.int 0\n.endm\nm x"' ||
2722 $nogas "GNU assembler not found, install gas-preprocessor"
2723 fi
2724
2725 check_ldflags -Wl,--as-needed
2726
2727 if check_func dlopen; then
2728 ldl=
2729 elif check_func dlopen -ldl; then
2730 ldl=-ldl
2731 fi
2732
2733 if enabled network; then
2734 check_type "sys/types.h sys/socket.h" socklen_t
2735 check_type netdb.h "struct addrinfo"
2736 check_type netinet/in.h "struct ipv6_mreq" -D_DARWIN_C_SOURCE
2737 check_type netinet/in.h "struct sockaddr_in6"
2738 check_type "sys/types.h sys/socket.h" "struct sockaddr_storage"
2739 check_struct "sys/types.h sys/socket.h" "struct sockaddr" sa_len
2740 # Prefer arpa/inet.h over winsock2
2741 if check_header arpa/inet.h ; then
2742 check_func closesocket
2743 elif check_header winsock2.h ; then
2744 check_func_headers winsock2.h closesocket -lws2 && \
2745 network_extralibs="-lws2" || \
2746 { check_func_headers winsock2.h closesocket -lws2_32 && \
2747 network_extralibs="-lws2_32"; }
2748 check_type ws2tcpip.h socklen_t
2749 check_type ws2tcpip.h "struct addrinfo"
2750 check_type ws2tcpip.h "struct ipv6_mreq"
2751 check_type ws2tcpip.h "struct sockaddr_in6"
2752 check_type ws2tcpip.h "struct sockaddr_storage"
2753 check_struct winsock2.h "struct sockaddr" sa_len
2754 else
2755 disable network
2756 fi
2757 fi
2758
2759 # Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
2760 check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
2761
2762 check_func fcntl
2763 check_func fork
2764 check_func getaddrinfo $network_extralibs
2765 check_func gethrtime
2766 check_func getrusage
2767 check_struct "sys/time.h sys/resource.h" "struct rusage" ru_maxrss
2768 check_func inet_aton $network_extralibs
2769 check_func isatty
2770 check_func ${malloc_prefix}memalign && enable memalign
2771 check_func mkstemp
2772 check_func mmap
2773 check_func ${malloc_prefix}posix_memalign && enable posix_memalign
2774 check_func setrlimit
2775 check_func strerror_r
2776 check_func strtok_r
2777 check_func_headers conio.h kbhit
2778 check_func_headers io.h setmode
2779 check_func_headers lzo/lzo1x.h lzo1x_999_compress
2780 check_lib2 "windows.h psapi.h" GetProcessMemoryInfo -lpsapi
2781 check_func_headers windows.h GetProcessTimes
2782 check_func_headers windows.h MapViewOfFile
2783 check_func_headers windows.h VirtualAlloc
2784
2785 check_header dlfcn.h
2786 check_header dxva2api.h
2787 check_header malloc.h
2788 check_header poll.h
2789 check_header sys/mman.h
2790 check_header sys/resource.h
2791 check_header sys/select.h
2792 check_header vdpau/vdpau.h
2793 check_header vdpau/vdpau_x11.h
2794 check_header X11/extensions/XvMClib.h
2795
2796 check_struct dxva2api.h DXVA_PictureParameters wDecodedPictureIndex
2797
2798 if ! enabled_any memalign memalign_hack posix_memalign malloc_aligned &&
2799 enabled_any $need_memalign ; then
2800 die "Error, no aligned memory allocator but SSE enabled, disable it or use --enable-memalign-hack."
2801 fi
2802
2803 disabled zlib || check_lib zlib.h zlibVersion -lz || disable zlib
2804 disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
2805
2806 # check for some common methods of building with pthread support
2807 # do this before the optional library checks as some of them require pthreads
2808 if ! disabled pthreads && ! enabled w32threads; then
2809 enable pthreads
2810 if check_func pthread_create; then
2811 :
2812 elif check_func pthread_create -pthread; then
2813 add_cflags -pthread
2814 add_extralibs -pthread
2815 elif check_func pthread_create -pthreads; then
2816 add_cflags -pthreads
2817 add_extralibs -pthreads
2818 elif check_func pthread_create -lpthreadGC2; then
2819 add_extralibs -lpthreadGC2
2820 elif ! check_lib pthread.h pthread_create -lpthread; then
2821 disable pthreads
2822 fi
2823 fi
2824
2825 for thread in $THREADS_LIST; do
2826 if enabled $thread; then
2827 test -n "$thread_type" &&
2828 die "ERROR: Only one thread type must be selected." ||
2829 thread_type="$thread"
2830 fi
2831 done
2832
2833 check_lib math.h sin -lm
2834 disabled vaapi || check_lib va/va.h vaInitialize -lva
2835
2836 check_mathfunc exp2
2837 check_mathfunc exp2f
2838 check_mathfunc llrint
2839 check_mathfunc llrintf
2840 check_mathfunc log2
2841 check_mathfunc log2f
2842 check_mathfunc lrint
2843 check_mathfunc lrintf
2844 check_mathfunc round
2845 check_mathfunc roundf
2846 check_mathfunc truncf
2847
2848 # these are off by default, so fail if requested and not available
2849 enabled avisynth && require2 vfw32 "windows.h vfw.h" AVIFileInit -lavifil32
2850 enabled frei0r && { check_header frei0r.h || die "ERROR: frei0r.h header not found"; }
2851 enabled libdirac && require_pkg_config dirac \
2852 "libdirac_decoder/dirac_parser.h libdirac_encoder/dirac_encoder.h" \
2853 "dirac_decoder_init dirac_encoder_init"
2854 enabled libfaac && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
2855 enabled libgsm && require libgsm gsm/gsm.h gsm_create -lgsm
2856 enabled libmp3lame && require "libmp3lame >= 3.98.3" lame/lame.h lame_set_VBR_quality -lmp3lame
2857 enabled libnut && require libnut libnut.h nut_demuxer_init -lnut
2858 enabled libopencore_amrnb && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb
2859 enabled libopencore_amrwb && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb
2860 enabled libopencv && require_pkg_config opencv opencv/cv.h cvCreateImageHeader
2861 enabled libopenjpeg && require libopenjpeg openjpeg.h opj_version -lopenjpeg
2862 enabled librtmp && require_pkg_config librtmp librtmp/rtmp.h RTMP_Socket
2863 enabled libschroedinger && require_pkg_config schroedinger-1.0 schroedinger/schro.h schro_init
2864 enabled libspeex && require libspeex speex/speex.h speex_decoder_init -lspeex
2865 enabled libtheora && require libtheora theora/theoraenc.h th_info_init -ltheoraenc -ltheoradec -logg
2866 enabled libvorbis && require libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
2867 enabled libvpx && {
2868 enabled libvpx_decoder && { check_lib2 "vpx/vpx_decoder.h vpx/vp8dx.h" vpx_codec_dec_init_ver -lvpx ||
2869 die "ERROR: libvpx decoder version must be >=0.9.1"; }
2870 enabled libvpx_encoder && { check_lib2 "vpx/vpx_encoder.h vpx/vp8cx.h" vpx_codec_enc_init_ver -lvpx ||
2871 die "ERROR: libvpx encoder version must be >=0.9.1"; } }
2872 enabled libx264 && require libx264 x264.h x264_encoder_encode -lx264 &&
2873 { check_cpp_condition x264.h "X264_BUILD >= 99" ||
2874 die "ERROR: libx264 version must be >= 0.99."; }
2875 enabled libxavs && require libxavs xavs.h xavs_encoder_encode -lxavs
2876 enabled libxvid && require libxvid xvid.h xvid_global -lxvidcore
2877 enabled mlib && require mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
2878
2879 # libdc1394 check
2880 if enabled libdc1394; then
2881 { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
2882 enable libdc1394_2; } ||
2883 { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
2884 enable libdc1394_1; } ||
2885 die "ERROR: No version of libdc1394 found "
2886 fi
2887
2888 if check_pkg_config sdl SDL_version.h SDL_Linked_Version; then
2889 check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
2890 enable sdl &&
2891 check_struct SDL.h SDL_VideoInfo current_w $sdl_cflags && enable sdl_video_size
2892 fi
2893
2894 texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
2895
2896 check_header linux/videodev.h
2897 check_header linux/videodev2.h
2898 check_header sys/videoio.h
2899
2900 check_func_headers "windows.h vfw.h" capCreateCaptureWindow "$vfwcap_indev_extralibs"
2901 # check that WM_CAP_DRIVER_CONNECT is defined to the proper value
2902 # w32api 3.12 had it defined wrong
2903 check_cpp_condition vfw.h "WM_CAP_DRIVER_CONNECT > WM_USER" && enable vfwcap_defines
2904
2905 # check for ioctl_meteor.h, ioctl_bt848.h and alternatives
2906 { check_header dev/bktr/ioctl_meteor.h &&
2907 check_header dev/bktr/ioctl_bt848.h; } ||
2908 { check_header machine/ioctl_meteor.h &&
2909 check_header machine/ioctl_bt848.h; } ||
2910 { check_header dev/video/meteor/ioctl_meteor.h &&
2911 check_header dev/video/bktr/ioctl_bt848.h; } ||
2912 check_header dev/ic/bt8xx.h
2913
2914 check_header sys/soundcard.h
2915 check_header soundcard.h
2916
2917 enabled_any alsa_indev alsa_outdev && check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
2918
2919 enabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack
2920
2921 enabled x11grab &&
2922 check_header X11/Xlib.h &&
2923 check_header X11/extensions/XShm.h &&
2924 check_header X11/extensions/Xfixes.h &&
2925 check_func XOpenDisplay -lX11 &&
2926 check_func XShmCreateImage -lX11 -lXext &&
2927 check_func XFixesGetCursorImage -lX11 -lXext -lXfixes
2928
2929 if ! disabled vdpau && enabled vdpau_vdpau_h; then
2930 check_cpp_condition \
2931 vdpau/vdpau.h "defined VDP_DECODER_PROFILE_MPEG4_PART2_ASP" ||
2932 { echolog "Please upgrade to libvdpau >= 0.2 if you would like vdpau support." &&
2933 disable vdpau; }
2934 fi
2935
2936 enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel"
2937
2938 # add some useful compiler flags if supported
2939 check_cflags -Wdeclaration-after-statement
2940 check_cflags -Wall
2941 check_cflags -Wno-parentheses
2942 check_cflags -Wno-switch
2943 check_cflags -Wdisabled-optimization
2944 check_cflags -Wpointer-arith
2945 check_cflags -Wredundant-decls
2946 check_cflags -Wno-pointer-sign
2947 check_cflags -Wcast-qual
2948 check_cflags -Wwrite-strings
2949 check_cflags -Wtype-limits
2950 check_cflags -Wundef
2951 check_cflags -Wmissing-prototypes
2952 enabled extra_warnings && check_cflags -Winline
2953
2954 # add some linker flags
2955 check_ldflags -Wl,--warn-common
2956 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'
2957 test_ldflags -Wl,-Bsymbolic && append SHFLAGS -Wl,-Bsymbolic
2958
2959 echo "X{};" > $TMPV
2960 if test_ldflags -Wl,--version-script,$TMPV; then
2961 append SHFLAGS '-Wl,--version-script,\$(SUBDIR)lib\$(NAME).ver'
2962 check_cc <<EOF && enable symver_asm_label
2963 void ff_foo(void) __asm__ ("av_foo@VERSION");
2964 void ff_foo(void) { ${inline_asm+__asm__($quotes);} }
2965 EOF
2966 check_cc <<EOF && enable symver_gnu_asm
2967 __asm__(".symver ff_foo,av_foo@VERSION");
2968 void ff_foo(void) {}
2969 EOF
2970 fi
2971
2972 if enabled small; then
2973 add_cflags $size_cflags
2974 optimizations="small"
2975 elif enabled optimizations; then
2976 add_cflags $speed_cflags
2977 else
2978 add_cflags $noopt_cflags
2979 fi
2980 check_cflags -fno-math-errno
2981 check_cflags -fno-signed-zeros
2982
2983 if enabled icc; then
2984 # Just warnings, no remarks
2985 check_cflags -w1
2986 # -wd: Disable following warnings
2987 # 144, 167, 556: -Wno-pointer-sign
2988 # 1292: attribute "foo" ignored
2989 # 10006: ignoring unknown option -fno-signed-zeros
2990 # 10148: ignoring unknown option -Wno-parentheses
2991 # 10156: ignoring option '-W'; no argument required
2992 check_cflags -wd144,167,556,1292,10006,10148,10156
2993 # 11030: Warning unknown option --as-needed
2994 # 10156: ignoring option '-export'; no argument required
2995 check_ldflags -wd10156,11030
2996 # Allow to compile with optimizations
2997 check_ldflags -march=$cpu
2998 # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
2999 enable ebp_available
3000 if enabled x86_32; then
3001 test ${icc_version%%.*} -ge 11 && \
3002 check_cflags -falign-stack=maintain-16-byte || \
3003 disable aligned_stack
3004 fi
3005 elif enabled ccc; then
3006 # disable some annoying warnings
3007 add_cflags -msg_disable cvtu32to64
3008 add_cflags -msg_disable embedcomment
3009 add_cflags -msg_disable needconstext
3010 add_cflags -msg_disable nomainieee
3011 add_cflags -msg_disable ptrmismatch1
3012 add_cflags -msg_disable unreachcode
3013 elif enabled gcc; then
3014 check_cflags -fno-tree-vectorize
3015 check_cflags -Werror=implicit-function-declaration
3016 check_cflags -Werror=missing-prototypes
3017 elif enabled llvm_gcc; then
3018 check_cflags -mllvm -stack-alignment=16
3019 elif enabled clang; then
3020 check_cflags -mllvm -stack-alignment=16
3021 check_cflags -Qunused-arguments
3022 elif enabled armcc; then
3023 # 2523: use of inline assembler is deprecated
3024 add_cflags -W${armcc_opt},--diag_suppress=2523
3025 add_cflags -W${armcc_opt},--diag_suppress=1207
3026 add_cflags -W${armcc_opt},--diag_suppress=1293 # assignment in condition
3027 add_cflags -W${armcc_opt},--diag_suppress=3343 # hardfp compat
3028 elif enabled tms470; then
3029 add_cflags -pds=824 -pds=837
3030 elif enabled pathscale; then
3031 add_cflags -fstrict-overflow -OPT:wrap_around_unsafe_opt=OFF
3032 fi
3033
3034 enabled_any $THREADS_LIST && enable threads
3035
3036 check_deps $CONFIG_LIST \
3037 $CONFIG_EXTRA \
3038 $HAVE_LIST \
3039 $DECODER_LIST \
3040 $ENCODER_LIST \
3041 $HWACCEL_LIST \
3042 $PARSER_LIST \
3043 $BSF_LIST \
3044 $DEMUXER_LIST \
3045 $MUXER_LIST \
3046 $FILTER_LIST \
3047 $INDEV_LIST \
3048 $OUTDEV_LIST \
3049 $PROTOCOL_LIST \
3050 $ACODEC_TESTS \
3051 $VCODEC_TESTS \
3052 $LAVF_TESTS \
3053 $LAVFI_TESTS \
3054 $SEEK_TESTS \
3055
3056 enabled asm || { arch=c; disable $ARCH_LIST $ARCH_EXT_LIST; }
3057
3058 echo "install prefix $prefix"
3059 echo "source path $source_path"
3060 echo "C compiler $cc"
3061 echo "ARCH $arch ($cpu)"
3062 if test "$build_suffix" != ""; then
3063 echo "build suffix $build_suffix"
3064 fi
3065 if test "$extra_version" != ""; then
3066 echo "version string suffix $extra_version"
3067 fi
3068 echo "big-endian ${bigendian-no}"
3069 echo "runtime cpu detection ${runtime_cpudetect-no}"
3070 if enabled x86; then
3071 echo "yasm ${yasm-no}"
3072 echo "MMX enabled ${mmx-no}"
3073 echo "MMX2 enabled ${mmx2-no}"
3074 echo "3DNow! enabled ${amd3dnow-no}"
3075 echo "3DNow! extended enabled ${amd3dnowext-no}"
3076 echo "SSE enabled ${sse-no}"
3077 echo "SSSE3 enabled ${ssse3-no}"
3078 echo "CMOV enabled ${cmov-no}"
3079 echo "CMOV is fast ${fast_cmov-no}"
3080 echo "EBX available ${ebx_available-no}"
3081 echo "EBP available ${ebp_available-no}"
3082 echo "10 operands supported ${ten_operands-no}"
3083 fi
3084 if enabled arm; then
3085 echo "ARMv5TE enabled ${armv5te-no}"
3086 echo "ARMv6 enabled ${armv6-no}"
3087 echo "ARMv6T2 enabled ${armv6t2-no}"
3088 echo "ARM VFP enabled ${armvfp-no}"
3089 echo "IWMMXT enabled ${iwmmxt-no}"
3090 echo "NEON enabled ${neon-no}"
3091 fi
3092 if enabled mips; then
3093 echo "MMI enabled ${mmi-no}"
3094 fi
3095 if enabled ppc; then
3096 echo "AltiVec enabled ${altivec-no}"
3097 echo "PPC 4xx optimizations ${ppc4xx-no}"
3098 echo "dcbzl available ${dcbzl-no}"
3099 fi
3100 if enabled sparc; then
3101 echo "VIS enabled ${vis-no}"
3102 fi
3103 echo "debug symbols ${debug-no}"
3104 echo "strip symbols ${stripping-no}"
3105 echo "optimizations ${optimizations-no}"
3106 echo "static ${static-no}"
3107 echo "shared ${shared-no}"
3108 echo "postprocessing support ${postproc-no}"
3109 echo "new filter support ${avfilter-no}"
3110 echo "network support ${network-no}"
3111 echo "threading support ${thread_type-no}"
3112 echo "SDL support ${sdl-no}"
3113 echo "Sun medialib support ${mlib-no}"
3114 echo "AVISynth enabled ${avisynth-no}"
3115 echo "frei0r enabled ${frei0r-no}"
3116 echo "libdc1394 support ${libdc1394-no}"
3117 echo "libdirac enabled ${libdirac-no}"
3118 echo "libfaac enabled ${libfaac-no}"
3119 echo "libgsm enabled ${libgsm-no}"
3120 echo "libmp3lame enabled ${libmp3lame-no}"
3121 echo "libnut enabled ${libnut-no}"
3122 echo "libopencore-amrnb support ${libopencore_amrnb-no}"
3123 echo "libopencore-amrwb support ${libopencore_amrwb-no}"
3124 echo "libopencv support ${libopencv-no}"
3125 echo "libopenjpeg enabled ${libopenjpeg-no}"
3126 echo "librtmp enabled ${librtmp-no}"
3127 echo "libschroedinger enabled ${libschroedinger-no}"
3128 echo "libspeex enabled ${libspeex-no}"
3129 echo "libtheora enabled ${libtheora-no}"
3130 echo "libvorbis enabled ${libvorbis-no}"
3131 echo "libvpx enabled ${libvpx-no}"
3132 echo "libx264 enabled ${libx264-no}"
3133 echo "libxavs enabled ${libxavs-no}"
3134 echo "libxvid enabled ${libxvid-no}"
3135 echo "zlib enabled ${zlib-no}"
3136 echo "bzlib enabled ${bzlib-no}"
3137 echo
3138
3139 for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
3140 echo "Enabled ${type}s:"
3141 eval list=\$$(toupper $type)_LIST
3142 print_enabled '_*' $list | sort | pr -r -3 -t
3143 echo
3144 done
3145
3146 license="LGPL version 2.1 or later"
3147 if enabled nonfree; then
3148 license="nonfree and unredistributable"
3149 elif enabled gplv3; then
3150 license="GPL version 3 or later"
3151 elif enabled lgplv3; then
3152 license="LGPL version 3 or later"
3153 elif enabled gpl; then
3154 license="GPL version 2 or later"
3155 fi
3156
3157 echo "License: $license"
3158
3159 echo "Creating config.mak and config.h..."
3160
3161 # build tree in object directory if source path is different from current one
3162 if enabled source_path_used; then
3163 DIRS="
3164 doc
3165 libavcodec
3166 libavcodec/$arch
3167 libavdevice
3168 libavfilter
3169 libavfilter/$arch
3170 libavformat
3171 libavutil
3172 libavutil/$arch
3173 libpostproc
3174 libswscale
3175 libswscale/$arch
3176 tests
3177 tools
3178 "
3179 FILES="
3180 Makefile
3181 common.mak
3182 subdir.mak
3183 doc/texi2pod.pl
3184 libavcodec/Makefile
3185 libavcodec/${arch}/Makefile
3186 libavdevice/Makefile
3187 libavfilter/Makefile
3188 libavfilter/${arch}/Makefile
3189 libavformat/Makefile
3190 libavutil/Makefile
3191 libpostproc/Makefile
3192 libswscale/Makefile
3193 "
3194 map 'mkdir -p $v' $DIRS;
3195 map 'test -f "$source_path/$v" && $ln_s "$source_path/$v" $v' $FILES
3196 fi
3197
3198 enabled stripping || strip="echo skipping strip"
3199
3200 config_files="$TMPH config.mak"
3201
3202 cat > config.mak <<EOF
3203 # Automatically generated by configure - do not modify!
3204 ifndef LIBAV_CONFIG_MAK
3205 LIBAV_CONFIG_MAK=1
3206 LIBAV_CONFIGURATION=$LIBAV_CONFIGURATION
3207 prefix=$prefix
3208 LIBDIR=\$(DESTDIR)$libdir
3209 SHLIBDIR=\$(DESTDIR)$shlibdir
3210 INCDIR=\$(DESTDIR)$incdir
3211 BINDIR=\$(DESTDIR)$bindir
3212 DATADIR=\$(DESTDIR)$datadir
3213 MANDIR=\$(DESTDIR)$mandir
3214 SRC_PATH="$source_path"
3215 SRC_PATH_BARE=$source_path
3216 BUILD_ROOT="$PWD"
3217 CC_IDENT=$cc_ident
3218 ARCH=$arch
3219 CC=$cc
3220 AS=$as
3221 LD=$ld
3222 DEPCC=$dep_cc
3223 YASM=$yasmexe
3224 YASMDEP=$yasmexe
3225 AR=$ar
3226 RANLIB=$ranlib
3227 CP=cp -p
3228 LN_S=$ln_s
3229 STRIP=$strip
3230 CPPFLAGS=$CPPFLAGS
3231 CFLAGS=$CFLAGS
3232 ASFLAGS=$ASFLAGS
3233 CC_O=$CC_O
3234 DLLTOOL=$dlltool
3235 LDFLAGS=$LDFLAGS
3236 FFSERVERLDFLAGS=$FFSERVERLDFLAGS
3237 SHFLAGS=$SHFLAGS
3238 YASMFLAGS=$YASMFLAGS
3239 BUILDSUF=$build_suffix
3240 FULLNAME=$FULLNAME
3241 LIBPREF=$LIBPREF
3242 LIBSUF=$LIBSUF
3243 LIBNAME=$LIBNAME
3244 SLIBPREF=$SLIBPREF
3245 SLIBSUF=$SLIBSUF
3246 EXESUF=$EXESUF
3247 EXTRA_VERSION=$extra_version
3248 DEPFLAGS=$DEPFLAGS
3249 CCDEP=$CCDEP
3250 ASDEP=$ASDEP
3251 CC_DEPFLAGS=$CC_DEPFLAGS
3252 AS_DEPFLAGS=$AS_DEPFLAGS
3253 HOSTCC=$host_cc
3254 HOSTCFLAGS=$host_cflags
3255 HOSTEXESUF=$HOSTEXESUF
3256 HOSTLDFLAGS=$host_ldflags
3257 HOSTLIBS=$host_libs
3258 TARGET_EXEC=$target_exec
3259 TARGET_PATH=$target_path
3260 SDL_LIBS=$sdl_libs
3261 SDL_CFLAGS=$sdl_cflags
3262 LIB_INSTALL_EXTRA_CMD=$LIB_INSTALL_EXTRA_CMD
3263 EXTRALIBS=$extralibs
3264 INSTALL=install
3265 LIBTARGET=${LIBTARGET}
3266 SLIBNAME=${SLIBNAME}
3267 SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}
3268 SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}
3269 SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}
3270 SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}
3271 SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}
3272 SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}
3273 SAMPLES=${samples:-\$(FATE_SAMPLES)}
3274 EOF
3275
3276 get_version(){
3277 name=$1
3278 file=$source_path/$2
3279 eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
3280 eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
3281 lcname=$(tolower $name)
3282 eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
3283 eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
3284 }
3285
3286 get_version LIBSWSCALE libswscale/swscale.h
3287 get_version LIBPOSTPROC libpostproc/postprocess.h
3288 get_version LIBAVCODEC libavcodec/version.h
3289 get_version LIBAVDEVICE libavdevice/avdevice.h
3290 get_version LIBAVFORMAT libavformat/version.h
3291 get_version LIBAVUTIL libavutil/avutil.h
3292 get_version LIBAVFILTER libavfilter/avfilter.h
3293
3294 cat > $TMPH <<EOF
3295 /* Automatically generated by configure - do not modify! */
3296 #ifndef LIBAV_CONFIG_H
3297 #define LIBAV_CONFIG_H
3298 #define LIBAV_CONFIGURATION "$(c_escape $LIBAV_CONFIGURATION)"
3299 #define LIBAV_LICENSE "$(c_escape $license)"
3300 #define FFMPEG_DATADIR "$(eval c_escape $datadir)"
3301 #define CC_TYPE "$cc_type"
3302 #define CC_VERSION $cc_version
3303 #define restrict $_restrict
3304 #define EXTERN_PREFIX "${extern_prefix}"
3305 #define EXTERN_ASM ${extern_prefix}
3306 #define SLIBSUF "$SLIBSUF"
3307 EOF
3308
3309 test -n "$malloc_prefix" &&
3310 echo "#define MALLOC_PREFIX $malloc_prefix" >>$TMPH
3311
3312 if enabled small || disabled optimizations; then
3313 echo "#undef av_always_inline" >> $TMPH
3314 if enabled small; then
3315 echo "#define av_always_inline inline" >> $TMPH
3316 else
3317 echo "#define av_always_inline av_unused" >> $TMPH
3318 fi
3319 fi
3320
3321 if enabled yasm; then
3322 append config_files $TMPASM
3323 printf '' >$TMPASM
3324 fi
3325
3326 print_config ARCH_ "$config_files" $ARCH_LIST
3327 print_config HAVE_ "$config_files" $HAVE_LIST
3328 print_config CONFIG_ "$config_files" $CONFIG_LIST \
3329 $CONFIG_EXTRA \
3330 $DECODER_LIST \
3331 $ENCODER_LIST \
3332 $HWACCEL_LIST \
3333 $PARSER_LIST \
3334 $BSF_LIST \
3335 $DEMUXER_LIST \
3336 $MUXER_LIST \
3337 $FILTER_LIST \
3338 $PROTOCOL_LIST \
3339 $INDEV_LIST \
3340 $OUTDEV_LIST \
3341
3342 cat >>config.mak <<EOF
3343 ACODEC_TESTS=$(print_enabled -n _test $ACODEC_TESTS)
3344 VCODEC_TESTS=$(print_enabled -n _test $VCODEC_TESTS)
3345 LAVF_TESTS=$(print_enabled -n _test $LAVF_TESTS)
3346 LAVFI_TESTS=$(print_enabled -n _test $LAVFI_TESTS)
3347 SEEK_TESTS=$(print_enabled -n _test $SEEK_TESTS)
3348 EOF
3349
3350 echo "#endif /* LIBAV_CONFIG_H */" >> $TMPH
3351 echo "endif # LIBAV_CONFIG_MAK" >> config.mak
3352
3353 # Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
3354 cp_if_changed $TMPH config.h
3355 touch .config
3356
3357 enabled yasm && cp_if_changed $TMPASM config.asm
3358
3359 cat > $TMPH <<EOF
3360 /* Generated by ffconf */
3361 #ifndef AVUTIL_AVCONFIG_H
3362 #define AVUTIL_AVCONFIG_H
3363 EOF
3364
3365 print_config AV_HAVE_ $TMPH $HAVE_LIST_PUB
3366
3367 echo "#endif /* AVUTIL_AVCONFIG_H */" >> $TMPH
3368
3369 cp_if_changed $TMPH libavutil/avconfig.h
3370
3371 test -n "$WARNINGS" && printf "\n$WARNINGS"
3372
3373 # build pkg-config files
3374
3375 pkgconfig_generate(){
3376 name=$1
3377 shortname=${name#lib}${build_suffix}
3378 comment=$2
3379 version=$3
3380 libs=$4
3381 requires=$5
3382 enabled ${name#lib} || return 0
3383 cat <<EOF > $name/$name.pc
3384 prefix=$prefix
3385 exec_prefix=\${prefix}
3386 libdir=$libdir
3387 includedir=$incdir
3388
3389 Name: $name
3390 Description: $comment
3391 Version: $version
3392 Requires: $(enabled shared || echo $requires)
3393 Requires.private: $(enabled shared && echo $requires)
3394 Conflicts:
3395 Libs: -L\${libdir} -l${shortname} $(enabled shared || echo $libs)
3396 Libs.private: $(enabled shared && echo $libs)
3397 Cflags: -I\${includedir}
3398 EOF
3399 cat <<EOF > $name/$name-uninstalled.pc
3400 prefix=
3401 exec_prefix=
3402 libdir=\${pcfiledir}
3403 includedir=${source_path}
3404
3405 Name: $name
3406 Description: $comment
3407 Version: $version
3408 Requires: $requires
3409 Conflicts:
3410 Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
3411 Cflags: -I\${includedir}
3412 EOF
3413 }
3414
3415 pkgconfig_generate libavutil "Libav utility library" "$LIBAVUTIL_VERSION"
3416 pkgconfig_generate libavcodec "Libav codec library" "$LIBAVCODEC_VERSION" "$extralibs"
3417 pkgconfig_generate libavformat "Libav container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
3418 pkgconfig_generate libavdevice "Libav device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "libavformat = $LIBAVFORMAT_VERSION"
3419 pkgconfig_generate libavfilter "Libav video filtering library" "$LIBAVFILTER_VERSION" "$extralibs"
3420 pkgconfig_generate libpostproc "Libav post processing library" "$LIBPOSTPROC_VERSION"
3421 pkgconfig_generate libswscale "Libav image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"