darwin: use -read_only_relocs flag only on 32-bit x86
[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 small
961 sram
962 static
963 swscale
964 swscale_alpha
965 vaapi
966 vdpau
967 version3
968 x11grab
969 zlib
970 "
971
972 THREADS_LIST='
973 pthreads
974 w32threads
975 '
976
977 ARCH_LIST='
978 alpha
979 arm
980 avr32
981 avr32_ap
982 avr32_uc
983 bfin
984 ia64
985 m68k
986 mips
987 mips64
988 parisc
989 ppc
990 ppc64
991 s390
992 sh4
993 sparc
994 sparc64
995 tomi
996 x86
997 x86_32
998 x86_64
999 '
1000
1001 ARCH_EXT_LIST='
1002 altivec
1003 amd3dnow
1004 amd3dnowext
1005 armv5te
1006 armv6
1007 armv6t2
1008 armvfp
1009 avx
1010 iwmmxt
1011 mmi
1012 mmx
1013 mmx2
1014 neon
1015 ppc4xx
1016 sse
1017 ssse3
1018 vis
1019 '
1020
1021 HAVE_LIST_PUB='
1022 bigendian
1023 fast_unaligned
1024 '
1025
1026 HAVE_LIST="
1027 $ARCH_EXT_LIST
1028 $HAVE_LIST_PUB
1029 $THREADS_LIST
1030 aligned_stack
1031 alsa_asoundlib_h
1032 altivec_h
1033 arpa_inet_h
1034 attribute_may_alias
1035 attribute_packed
1036 bswap
1037 closesocket
1038 cmov
1039 conio_h
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 ldbrx
1070 libdc1394_1
1071 libdc1394_2
1072 llrint
1073 llrintf
1074 local_aligned_16
1075 local_aligned_8
1076 log2
1077 log2f
1078 loongson
1079 lrint
1080 lrintf
1081 lzo1x_999_compress
1082 machine_ioctl_bt848_h
1083 machine_ioctl_meteor_h
1084 malloc_h
1085 MapViewOfFile
1086 memalign
1087 mkstemp
1088 mmap
1089 pld
1090 posix_memalign
1091 round
1092 roundf
1093 sdl
1094 sdl_video_size
1095 setmode
1096 socklen_t
1097 soundcard_h
1098 poll_h
1099 setrlimit
1100 strerror_r
1101 strtok_r
1102 struct_addrinfo
1103 struct_ipv6_mreq
1104 struct_sockaddr_in6
1105 struct_sockaddr_sa_len
1106 struct_sockaddr_storage
1107 symver
1108 symver_gnu_asm
1109 symver_asm_label
1110 sys_mman_h
1111 sys_resource_h
1112 sys_select_h
1113 sys_soundcard_h
1114 sys_videoio_h
1115 ten_operands
1116 termios_h
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"
1238 aac_encoder_select="mdct"
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"
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"
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"
1311 nellymoser_encoder_select="mdct"
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 sonic_decoder_select="golomb"
1328 sonic_encoder_select="golomb"
1329 sonic_ls_encoder_select="golomb"
1330 svq1_encoder_select="aandct"
1331 svq3_decoder_select="golomb h264dsp h264pred"
1332 svq3_decoder_suggest="zlib"
1333 theora_decoder_select="vp3_decoder"
1334 tiff_decoder_suggest="zlib"
1335 tiff_encoder_suggest="zlib"
1336 truehd_decoder_select="mlp_decoder"
1337 tscc_decoder_select="zlib"
1338 twinvq_decoder_select="mdct lsp"
1339 vc1_decoder_select="h263_decoder"
1340 vc1_dxva2_hwaccel_deps="dxva2api_h DXVA_PictureParameters_wDecodedPictureIndex"
1341 vc1_dxva2_hwaccel_select="dxva2 vc1_decoder"
1342 vc1_vaapi_hwaccel_select="vaapi vc1_decoder"
1343 vc1_vdpau_decoder_select="vdpau vc1_decoder"
1344 vorbis_decoder_select="mdct"
1345 vorbis_encoder_select="mdct"
1346 vp6_decoder_select="huffman"
1347 vp6a_decoder_select="vp6_decoder"
1348 vp6f_decoder_select="vp6_decoder"
1349 vp8_decoder_select="h264pred"
1350 wmapro_decoder_select="mdct"
1351 wmav1_decoder_select="mdct"
1352 wmav1_encoder_select="mdct"
1353 wmav2_decoder_select="mdct"
1354 wmav2_encoder_select="mdct"
1355 wmavoice_decoder_select="lsp rdft dct mdct"
1356 wmv1_decoder_select="h263_decoder"
1357 wmv1_encoder_select="h263_encoder"
1358 wmv2_decoder_select="h263_decoder"
1359 wmv2_encoder_select="h263_encoder"
1360 wmv3_decoder_select="vc1_decoder"
1361 wmv3_dxva2_hwaccel_select="vc1_dxva2_hwaccel"
1362 wmv3_vaapi_hwaccel_select="vc1_vaapi_hwaccel"
1363 wmv3_vdpau_decoder_select="vc1_vdpau_decoder"
1364 zlib_decoder_select="zlib"
1365 zlib_encoder_select="zlib"
1366 zmbv_decoder_select="zlib"
1367 zmbv_encoder_select="zlib"
1368
1369 vaapi_deps="va_va_h"
1370 vdpau_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1371
1372 # parsers
1373 h264_parser_select="golomb h264dsp h264pred"
1374
1375 # external libraries
1376 libdirac_decoder_deps="libdirac !libschroedinger"
1377 libdirac_encoder_deps="libdirac"
1378 libfaac_encoder_deps="libfaac"
1379 libgsm_decoder_deps="libgsm"
1380 libgsm_encoder_deps="libgsm"
1381 libgsm_ms_decoder_deps="libgsm"
1382 libgsm_ms_encoder_deps="libgsm"
1383 libmp3lame_encoder_deps="libmp3lame"
1384 libopencore_amrnb_decoder_deps="libopencore_amrnb"
1385 libopencore_amrnb_encoder_deps="libopencore_amrnb"
1386 libopencore_amrwb_decoder_deps="libopencore_amrwb"
1387 libopenjpeg_decoder_deps="libopenjpeg"
1388 libschroedinger_decoder_deps="libschroedinger"
1389 libschroedinger_encoder_deps="libschroedinger"
1390 libspeex_decoder_deps="libspeex"
1391 libtheora_encoder_deps="libtheora"
1392 libvorbis_encoder_deps="libvorbis"
1393 libvpx_decoder_deps="libvpx"
1394 libvpx_encoder_deps="libvpx"
1395 libx264_encoder_deps="libx264"
1396 libxavs_encoder_deps="libxavs"
1397 libxvid_encoder_deps="libxvid"
1398
1399 # demuxers / muxers
1400 ac3_demuxer_select="ac3_parser"
1401 asf_stream_muxer_select="asf_muxer"
1402 avisynth_demuxer_deps="avisynth"
1403 dirac_demuxer_select="dirac_parser"
1404 eac3_demuxer_select="ac3_parser"
1405 flac_demuxer_select="flac_parser"
1406 ipod_muxer_select="mov_muxer"
1407 libnut_demuxer_deps="libnut"
1408 libnut_muxer_deps="libnut"
1409 matroska_audio_muxer_select="matroska_muxer"
1410 matroska_demuxer_suggest="zlib bzlib"
1411 mov_demuxer_suggest="zlib"
1412 mp3_demuxer_select="mpegaudio_parser"
1413 mp4_muxer_select="mov_muxer"
1414 mpegtsraw_demuxer_select="mpegts_demuxer"
1415 mxf_d10_muxer_select="mxf_muxer"
1416 ogg_demuxer_select="golomb"
1417 psp_muxer_select="mov_muxer"
1418 rtp_demuxer_select="sdp_demuxer"
1419 rtpdec_select="asf_demuxer rm_demuxer rtp_protocol mpegts_demuxer mov_demuxer"
1420 rtsp_demuxer_select="http_protocol rtpdec"
1421 rtsp_muxer_select="rtp_muxer http_protocol rtp_protocol"
1422 sap_demuxer_select="sdp_demuxer"
1423 sap_muxer_select="rtp_muxer rtp_protocol"
1424 sdp_demuxer_select="rtpdec"
1425 spdif_muxer_select="aac_parser"
1426 tg2_muxer_select="mov_muxer"
1427 tgp_muxer_select="mov_muxer"
1428 w64_demuxer_deps="wav_demuxer"
1429
1430 # indevs / outdevs
1431 alsa_indev_deps="alsa_asoundlib_h snd_pcm_htimestamp"
1432 alsa_outdev_deps="alsa_asoundlib_h"
1433 bktr_indev_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
1434 dv1394_indev_deps="dv1394 dv_demuxer"
1435 jack_indev_deps="jack_jack_h"
1436 libdc1394_indev_deps="libdc1394"
1437 oss_indev_deps_any="soundcard_h sys_soundcard_h"
1438 oss_outdev_deps_any="soundcard_h sys_soundcard_h"
1439 v4l_indev_deps="linux_videodev_h"
1440 v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h"
1441 vfwcap_indev_deps="capCreateCaptureWindow vfwcap_defines"
1442 vfwcap_indev_extralibs="-lavicap32"
1443 x11_grab_device_indev_deps="x11grab XShmCreateImage"
1444 x11_grab_device_indev_extralibs="-lX11 -lXext -lXfixes"
1445
1446 # protocols
1447 gopher_protocol_deps="network"
1448 http_protocol_deps="network"
1449 http_protocol_select="tcp_protocol"
1450 mmsh_protocol_select="http_protocol"
1451 mmst_protocol_deps="network"
1452 rtmp_protocol_select="tcp_protocol"
1453 rtp_protocol_select="udp_protocol"
1454 tcp_protocol_deps="network"
1455 udp_protocol_deps="network"
1456
1457 # filters
1458 blackframe_filter_deps="gpl"
1459 cropdetect_filter_deps="gpl"
1460 frei0r_filter_deps="frei0r dlopen strtok_r"
1461 frei0r_src_filter_deps="frei0r dlopen strtok_r"
1462 hqdn3d_filter_deps="gpl"
1463 scale_filter_deps="swscale"
1464 ocv_filter_deps="libopencv"
1465 yadif_filter_deps="gpl"
1466
1467 # libraries
1468 avdevice_deps="avcodec avformat"
1469 avformat_deps="avcodec"
1470
1471 # programs
1472 ffmpeg_deps="avcodec avformat swscale"
1473 ffmpeg_select="buffer_filter"
1474 ffplay_deps="avcodec avformat swscale sdl"
1475 ffplay_select="rdft"
1476 ffprobe_deps="avcodec avformat"
1477 ffserver_deps="avformat ffm_muxer rtp_protocol rtsp_demuxer"
1478 ffserver_extralibs='$ldl'
1479
1480 doc_deps="texi2html"
1481
1482 # tests
1483
1484 test_deps(){
1485 suf1=$1
1486 suf2=$2
1487 shift 2
1488 for v; do
1489 dep=${v%=*}
1490 tests=${v#*=}
1491 for name in ${tests}; do
1492 eval ${name}_test_deps="'${dep}$suf1 ${dep}$suf2'"
1493 done
1494 done
1495 }
1496
1497 set_ne_test_deps(){
1498 eval ${1}_be_test_deps="bigendian"
1499 eval ${1}_le_test_deps="!bigendian"
1500 }
1501
1502 test_deps _encoder _decoder \
1503 adpcm_g726=g726 \
1504 adpcm_ima_qt \
1505 adpcm_ima_wav \
1506 adpcm_ms \
1507 adpcm_swf \
1508 adpcm_yamaha=adpcm_yam \
1509 alac \
1510 asv1 \
1511 asv2 \
1512 bmp \
1513 dnxhd="dnxhd_1080i dnxhd_720p dnxhd_720p_rd" \
1514 dvvideo="dv dv50" \
1515 ffv1 \
1516 flac \
1517 flashsv \
1518 flv \
1519 gif \
1520 h261 \
1521 h263="h263 h263p" \
1522 huffyuv \
1523 jpegls \
1524 mjpeg="jpg mjpeg ljpeg" \
1525 mp2 \
1526 mpeg1video="mpeg mpeg1b" \
1527 mpeg2video="mpeg2 mpeg2thread" \
1528 mpeg4="mpeg4 mpeg4adv mpeg4nr mpeg4thread error rc" \
1529 msmpeg4v3=msmpeg4 \
1530 msmpeg4v2 \
1531 pbm=pbmpipe \
1532 pcx \
1533 pgm="pgm pgmpipe" \
1534 png \
1535 ppm="ppm ppmpipe" \
1536 rawvideo="rgb yuv" \
1537 roq \
1538 rv10 \
1539 rv20 \
1540 sgi \
1541 snow="snow snowll" \
1542 svq1 \
1543 targa=tga \
1544 tiff \
1545 wmav1 \
1546 wmav2 \
1547 wmv1 \
1548 wmv2 \
1549
1550 test_deps _muxer _demuxer \
1551 aiff \
1552 pcm_alaw=alaw \
1553 asf \
1554 au \
1555 avi \
1556 dv=dv_fmt \
1557 ffm \
1558 flv=flv_fmt \
1559 gxf \
1560 matroska=mkv \
1561 mmf \
1562 mov \
1563 pcm_mulaw=mulaw \
1564 mxf \
1565 nut \
1566 ogg \
1567 rawvideo=pixfmt \
1568 rm \
1569 swf \
1570 mpegts=ts \
1571 voc \
1572 wav \
1573 yuv4mpegpipe=yuv4mpeg \
1574
1575 ac3_fixed_test_deps="ac3_fixed_encoder ac3_decoder rm_muxer rm_demuxer"
1576 mpg_test_deps="mpeg1system_muxer mpegps_demuxer"
1577
1578 set_ne_test_deps pixdesc
1579 set_ne_test_deps pixfmts_copy
1580 set_ne_test_deps pixfmts_crop
1581 set_ne_test_deps pixfmts_hflip
1582 set_ne_test_deps pixfmts_null
1583 set_ne_test_deps pixfmts_pad
1584 set_ne_test_deps pixfmts_scale
1585 set_ne_test_deps pixfmts_vflip
1586
1587 # default parameters
1588
1589 logfile="config.log"
1590
1591 # installation paths
1592 prefix_default="/usr/local"
1593 bindir_default='${prefix}/bin'
1594 datadir_default='${prefix}/share/ffmpeg'
1595 incdir_default='${prefix}/include'
1596 libdir_default='${prefix}/lib'
1597 mandir_default='${prefix}/share/man'
1598 shlibdir_default="$libdir_default"
1599
1600 # toolchain
1601 ar_default="ar"
1602 cc_default="gcc"
1603 cc_version=\"unknown\"
1604 host_cc_default="gcc"
1605 ln_s="ln -sf"
1606 nm_default="nm"
1607 objformat="elf"
1608 pkg_config_default=pkg-config
1609 ranlib="ranlib"
1610 strip_default="strip"
1611 yasmexe="yasm"
1612 nogas=":"
1613
1614 nm_opts='-g'
1615
1616 # machine
1617 arch_default=$(uname -m)
1618 cpu="generic"
1619
1620 # OS
1621 target_os_default=$(tolower $(uname -s))
1622 host_os=$target_os_default
1623
1624 # configurable options
1625 enable avcodec
1626 enable avdevice
1627 enable avfilter
1628 enable avformat
1629 enable avutil
1630 enable asm
1631 enable debug
1632 enable doc
1633 enable fastdiv
1634 enable ffmpeg
1635 enable ffplay
1636 enable ffprobe
1637 enable ffserver
1638 enable mpegaudio_hp
1639 enable network
1640 enable optimizations
1641 enable protocols
1642 enable static
1643 enable stripping
1644 enable swscale
1645 enable swscale_alpha
1646
1647 # build settings
1648 SHFLAGS='-shared -Wl,-soname,$$(@F)'
1649 FFSERVERLDFLAGS=-Wl,-E
1650 LIBPREF="lib"
1651 LIBSUF=".a"
1652 FULLNAME='$(NAME)$(BUILDSUF)'
1653 LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
1654 SLIBPREF="lib"
1655 SLIBSUF=".so"
1656 SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
1657 SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
1658 SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
1659 LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
1660
1661 CC_O='-o $@'
1662
1663 host_cflags='-D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112 -O3 -g -Wall'
1664 host_libs='-lm'
1665
1666 target_path='$(CURDIR)'
1667
1668 # since the object filename is not given with the -MM flag, the compiler
1669 # is only able to print the basename, and we must add the path ourselves
1670 DEPEND_CMD='$(DEPCC) $(DEPFLAGS) $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o," > $(@:.o=.d)'
1671 DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -MM'
1672
1673 # find source path
1674 source_path="$(dirname "$0")"
1675 enable source_path_used
1676 if test -f configure; then
1677 source_path="$(pwd)"
1678 disable source_path_used
1679 else
1680 source_path="$(cd "$source_path"; pwd)"
1681 echo "$source_path" | grep -q '[[:blank:]]' &&
1682 die "Out of tree builds are impossible with whitespace in source path."
1683 test -e "$source_path/config.h" &&
1684 die "Out of tree builds are impossible with config.h in source dir."
1685 fi
1686
1687 for v in "$@"; do
1688 r=${v#*=}
1689 l=${v%"$r"}
1690 r=$(sh_quote "$r")
1691 LIBAV_CONFIGURATION="${LIBAV_CONFIGURATION# } ${l}${r}"
1692 done
1693
1694 find_things(){
1695 thing=$1
1696 pattern=$2
1697 file=$source_path/$3
1698 sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
1699 }
1700
1701 ENCODER_LIST=$(find_things encoder ENC libavcodec/allcodecs.c)
1702 DECODER_LIST=$(find_things decoder DEC libavcodec/allcodecs.c)
1703 HWACCEL_LIST=$(find_things hwaccel HWACCEL libavcodec/allcodecs.c)
1704 PARSER_LIST=$(find_things parser PARSER libavcodec/allcodecs.c)
1705 BSF_LIST=$(find_things bsf BSF libavcodec/allcodecs.c)
1706 MUXER_LIST=$(find_things muxer _MUX libavformat/allformats.c)
1707 DEMUXER_LIST=$(find_things demuxer DEMUX libavformat/allformats.c)
1708 OUTDEV_LIST=$(find_things outdev OUTDEV libavdevice/alldevices.c)
1709 INDEV_LIST=$(find_things indev _IN libavdevice/alldevices.c)
1710 PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
1711 FILTER_LIST=$(find_things filter FILTER libavfilter/allfilters.c)
1712
1713 find_tests(){
1714 map "echo ${2}\${v}_test" $(ls "$source_path"/tests/ref/$1 | grep -v '[^-a-z0-9_]')
1715 }
1716
1717 ACODEC_TESTS=$(find_tests acodec)
1718 VCODEC_TESTS=$(find_tests vsynth1)
1719 LAVF_TESTS=$(find_tests lavf)
1720 LAVFI_TESTS=$(find_tests lavfi)
1721 SEEK_TESTS=$(find_tests seek seek_)
1722
1723 pcm_test_deps=$(map 'echo ${v%_*}_decoder $v' $(filter pcm_* $ENCODER_LIST))
1724
1725 for n in $COMPONENT_LIST; do
1726 v=$(toupper ${n%s})_LIST
1727 eval enable \$$v
1728 eval ${n}_if_any="\$$v"
1729 done
1730
1731 enable $ARCH_EXT_LIST $ACODEC_TESTS $VCODEC_TESTS $LAVF_TESTS $LAVFI_TESTS $SEEK_TESTS
1732
1733 die_unknown(){
1734 echo "Unknown option \"$1\"."
1735 echo "See $0 --help for available options."
1736 exit 1
1737 }
1738
1739 show_list() {
1740 suffix=_$1
1741 shift
1742 echo $* | sed s/$suffix//g | tr ' ' '\n' | sort | pr -3 -t
1743 exit 0
1744 }
1745
1746 for opt do
1747 optval="${opt#*=}"
1748 case "$opt" in
1749 --extra-ldflags=*) add_ldflags $optval
1750 ;;
1751 --extra-libs=*) add_extralibs $optval
1752 ;;
1753 --disable-devices) disable $INDEV_LIST $OUTDEV_LIST
1754 ;;
1755 --enable-debug=*) debuglevel="$optval"
1756 ;;
1757 --disable-everything)
1758 map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
1759 ;;
1760 --enable-*=*|--disable-*=*)
1761 eval $(echo "${opt%%=*}" | sed 's/--/action=/;s/-/ thing=/')
1762 is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt"
1763 eval list=\$$(toupper $thing)_LIST
1764 name=$(echo "${optval}" | sed "s/,/_${thing}|/g")_${thing}
1765 $action $(filter "$name" $list)
1766 ;;
1767 --enable-?*|--disable-?*)
1768 eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
1769 if is_in $option $COMPONENT_LIST; then
1770 test $action = disable && action=unset
1771 eval $action \$$(toupper ${option%s})_LIST
1772 elif is_in $option $CMDLINE_SELECT; then
1773 $action $option
1774 else
1775 die_unknown $opt
1776 fi
1777 ;;
1778 --list-*)
1779 NAME="${opt#--list-}"
1780 is_in $NAME $COMPONENT_LIST || die_unknown $opt
1781 NAME=${NAME%s}
1782 eval show_list $NAME \$$(toupper $NAME)_LIST
1783 ;;
1784 --help|-h) show_help
1785 ;;
1786 *)
1787 optname="${opt%%=*}"
1788 optname="${optname#--}"
1789 optname=$(echo "$optname" | sed 's/-/_/g')
1790 if is_in $optname $CMDLINE_SET; then
1791 eval $optname='$optval'
1792 elif is_in $optname $CMDLINE_APPEND; then
1793 append $optname "$optval"
1794 else
1795 die_unknown $opt
1796 fi
1797 ;;
1798 esac
1799 done
1800
1801 disabled logging && logfile=/dev/null
1802
1803 echo "# $0 $LIBAV_CONFIGURATION" > $logfile
1804 set >> $logfile
1805
1806 test -n "$cross_prefix" && enable cross_compile
1807
1808 if enabled cross_compile; then
1809 test -n "$arch" && test -n "$target_os" ||
1810 die "Must specify target arch and OS when cross-compiling"
1811 fi
1812
1813 set_default arch target_os
1814
1815 ar_default="${cross_prefix}${ar_default}"
1816 cc_default="${cross_prefix}${cc_default}"
1817 nm_default="${cross_prefix}${nm_default}"
1818 pkg_config_default="${cross_prefix}${pkg_config_default}"
1819 ranlib="${cross_prefix}${ranlib}"
1820 strip_default="${cross_prefix}${strip_default}"
1821
1822 sysinclude_default="${sysroot}/usr/include"
1823
1824 set_default cc nm pkg_config strip sysinclude
1825 enabled cross_compile || host_cc_default=$cc
1826 set_default host_cc
1827
1828 exesuf() {
1829 case $1 in
1830 mingw32*|cygwin*|*-dos|freedos|opendos|os/2*) echo .exe ;;
1831 esac
1832 }
1833
1834 EXESUF=$(exesuf $target_os)
1835 HOSTEXESUF=$(exesuf $host_os)
1836
1837 # set temporary file name
1838 : ${TMPDIR:=$TEMPDIR}
1839 : ${TMPDIR:=$TMP}
1840 : ${TMPDIR:=/tmp}
1841
1842 if ! check_cmd mktemp -u XXXXXX; then
1843 # simple replacement for missing mktemp
1844 # NOT SAFE FOR GENERAL USE
1845 mktemp(){
1846 echo "${2%%XXX*}.${HOSTNAME}.${UID}.$$"
1847 }
1848 fi
1849
1850 tmpfile(){
1851 tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
1852 (set -C; exec > $tmp) 2>/dev/null ||
1853 die "Unable to create temporary file in $TMPDIR."
1854 append TMPFILES $tmp
1855 eval $1=$tmp
1856 }
1857
1858 trap 'rm -f -- $TMPFILES' EXIT
1859
1860 tmpfile TMPC .c
1861 tmpfile TMPE $EXESUF
1862 tmpfile TMPH .h
1863 tmpfile TMPO .o
1864 tmpfile TMPS .S
1865 tmpfile TMPV .ver
1866 tmpfile TMPSH .sh
1867 tmpfile TMPASM .asm
1868
1869 unset -f mktemp
1870
1871 chmod +x $TMPE
1872
1873 # make sure we can execute files in $TMPDIR
1874 cat > $TMPSH 2>> $logfile <<EOF
1875 #! /bin/sh
1876 EOF
1877 chmod +x $TMPSH >> $logfile 2>&1
1878 if ! $TMPSH >> $logfile 2>&1; then
1879 cat <<EOF
1880 Unable to create and execute files in $TMPDIR. Set the TMPDIR environment
1881 variable to another directory and make sure that it is not mounted noexec.
1882 EOF
1883 die "Sanity test failed."
1884 fi
1885
1886 filter_cflags=echo
1887 filter_cppflags=echo
1888 filter_asflags=echo
1889
1890 if $cc -v 2>&1 | grep -q '^gcc.*LLVM'; then
1891 cc_type=llvm_gcc
1892 cc_version=__VERSION__
1893 gcc_extra_ver=$(expr "$($cc --version | head -n1)" : '.*\((.*)\)')
1894 cc_ident="llvm-gcc $($cc -dumpversion) $gcc_extra_ver"
1895 CC_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
1896 AS_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
1897 speed_cflags='-O3'
1898 size_cflags='-Os'
1899 elif $cc -v 2>&1 | grep -qi ^gcc; then
1900 cc_type=gcc
1901 cc_version=__VERSION__
1902 gcc_version=$($cc --version | head -n1)
1903 gcc_basever=$($cc -dumpversion)
1904 gcc_pkg_ver=$(expr "$gcc_version" : '[^ ]* \(([^)]*)\)')
1905 gcc_ext_ver=$(expr "$gcc_version" : ".*$gcc_pkg_ver $gcc_basever \\(.*\\)")
1906 cc_ident=$(cleanws "gcc $gcc_basever $gcc_pkg_ver $gcc_ext_ver")
1907 if ! $cc -dumpversion | grep -q '^2\.'; then
1908 CC_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
1909 AS_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
1910 fi
1911 speed_cflags='-O3'
1912 size_cflags='-Os'
1913 elif $cc --version 2>/dev/null | grep -q Intel; then
1914 cc_type=icc
1915 cc_version="AV_STRINGIFY(__INTEL_COMPILER)"
1916 cc_ident=$($cc --version | head -n1)
1917 icc_version=$($cc -dumpversion)
1918 CC_DEPFLAGS='-MMD'
1919 AS_DEPFLAGS='-MMD'
1920 speed_cflags='-O3'
1921 size_cflags='-Os'
1922 noopt_cflags='-O1'
1923 elif $cc -v 2>&1 | grep -q xlc; then
1924 cc_type=xlc
1925 cc_version="AV_STRINGIFY(__IBMC__)"
1926 cc_ident=$($cc -qversion 2>/dev/null | head -n1)
1927 speed_cflags='-O5'
1928 size_cflags='-O5 -qcompact'
1929 elif $cc -V 2>/dev/null | grep -q Compaq; then
1930 cc_type=ccc
1931 cc_version="AV_STRINGIFY(__DECC_VER)"
1932 cc_ident=$($cc -V | head -n1 | cut -d' ' -f1-3)
1933 DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -M'
1934 debuglevel=3
1935 add_ldflags -Wl,-z,now # calls to libots crash without this
1936 speed_cflags='-fast'
1937 size_cflags='-O1'
1938 elif $cc --vsn 2>/dev/null | grep -q "ARM C/C++ Compiler"; then
1939 test -d "$sysroot" || die "No valid sysroot specified."
1940 cc_type=armcc
1941 cc_version="AV_STRINGIFY(__ARMCC_VERSION)"
1942 cc_ident=$($cc --vsn | head -n1)
1943 armcc_conf="$PWD/armcc.conf"
1944 $cc --arm_linux_configure \
1945 --arm_linux_config_file="$armcc_conf" \
1946 --configure_sysroot="$sysroot" \
1947 --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
1948 die "Error creating armcc configuration file."
1949 $cc --vsn | grep -q RVCT && armcc_opt=rvct || armcc_opt=armcc
1950 cc="$cc --arm_linux_config_file=$armcc_conf --translate_gcc"
1951 as_default="${cross_prefix}gcc"
1952 CC_DEPFLAGS='-MMD'
1953 AS_DEPFLAGS='-MMD'
1954 speed_cflags='-O3'
1955 size_cflags='-Os'
1956 filter_asflags="filter_out -W${armcc_opt}*"
1957 elif $cc -version 2>/dev/null | grep -q TMS470; then
1958 cc_type=tms470
1959 cc_version="AV_STRINGIFY(__TI_COMPILER_VERSION__)"
1960 cc_ident=$($cc -version | head -n1 | tr -s ' ')
1961 cc="$cc --gcc --abi=eabi -eo=.o -mc -me"
1962 CC_O='-fr=$(@D)'
1963 as_default="${cross_prefix}gcc"
1964 ld_default="${cross_prefix}gcc"
1965 TMPO=$(basename $TMPC .c).o
1966 append TMPFILES $TMPO
1967 add_cflags -D__gnuc_va_list=va_list -D__USER_LABEL_PREFIX__=
1968 CC_DEPFLAGS='-ppa -ppd=$(@:.o=.d)'
1969 AS_DEPFLAGS='-MMD'
1970 speed_cflags='-O3 -mf=5'
1971 size_cflags='-O3 -mf=2'
1972 filter_cflags=tms470_flags
1973 tms470_flags(){
1974 for flag; do
1975 case $flag in
1976 -march=*|-mcpu=*)
1977 case "${flag#*=}" in
1978 armv7-a|cortex-a*) echo -mv=7a8 ;;
1979 armv7-r|cortex-r*) echo -mv=7r4 ;;
1980 armv7-m|cortex-m*) echo -mv=7m3 ;;
1981 armv6*|arm11*) echo -mv=6 ;;
1982 armv5*e|arm[79]*e*|arm9[24]6*|arm96*|arm102[26])
1983 echo -mv=5e ;;
1984 armv4*|arm7*|arm9[24]*) echo -mv=4 ;;
1985 esac
1986 ;;
1987 -mfpu=neon) echo --float_support=vfpv3 --neon ;;
1988 -mfpu=vfp) echo --float_support=vfpv2 ;;
1989 -mfpu=vfpv3) echo --float_support=vfpv3 ;;
1990 -msoft-float) echo --float_support=vfplib ;;
1991 -O[0-3]|-mf=*) echo $flag ;;
1992 -g) echo -g -mn ;;
1993 -pds=*) echo $flag ;;
1994 esac
1995 done
1996 }
1997 elif $cc -v 2>&1 | grep -q clang; then
1998 cc_type=clang
1999 $cc -dM -E $TMPC | grep -q __clang_version__ &&
2000 cc_version=__clang_version__ || cc_version=__VERSION__
2001 cc_ident=$($cc --version | head -n1)
2002 CC_DEPFLAGS='-MMD'
2003 AS_DEPFLAGS='-MMD'
2004 speed_cflags='-O3'
2005 size_cflags='-Os'
2006 elif $cc -V 2>&1 | grep -q Sun; then
2007 cc_type=suncc
2008 cc_version="AV_STRINGIFY(__SUNPRO_C)"
2009 cc_ident=$($cc -V 2>&1 | head -n1 | cut -d' ' -f 2-)
2010 DEPEND_CMD='$(DEPCC) $(DEPFLAGS) $< | sed -e "1s,^.*: ,$@: ," -e "\$$!s,\$$, \\\," -e "1!s,^.*: , ," > $(@:.o=.d)'
2011 DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -xM1'
2012 speed_cflags='-O5'
2013 size_cflags='-O5 -xspace'
2014 filter_cflags=suncc_flags
2015 suncc_flags(){
2016 for flag; do
2017 case $flag in
2018 -march=*|-mcpu=*)
2019 case "${flag#*=}" in
2020 native) echo -xtarget=native ;;
2021 v9|niagara) echo -xarch=sparc ;;
2022 ultrasparc) echo -xarch=sparcvis ;;
2023 ultrasparc3|niagara2) echo -xarch=sparcvis2 ;;
2024 i586|pentium) echo -xchip=pentium ;;
2025 i686|pentiumpro|pentium2) echo -xtarget=pentium_pro ;;
2026 pentium3*|c3-2) echo -xtarget=pentium3 ;;
2027 pentium-m) echo -xarch=sse2 -xchip=pentium3 ;;
2028 pentium4*) echo -xtarget=pentium4 ;;
2029 prescott|nocona) echo -xarch=sse3 -xchip=pentium4 ;;
2030 *-sse3) echo -xarch=sse3 ;;
2031 core2) echo -xarch=ssse3 -xchip=core2 ;;
2032 amdfam10|barcelona) echo -xarch=sse4_1 ;;
2033 athlon-4|athlon-[mx]p) echo -xarch=ssea ;;
2034 k8|opteron|athlon64|athlon-fx)
2035 echo -xarch=sse2a ;;
2036 athlon*) echo -xarch=pentium_proa ;;
2037 esac
2038 ;;
2039 -std=c99) echo -xc99 ;;
2040 -fomit-frame-pointer) echo -xregs=frameptr ;;
2041 -fPIC) echo -KPIC -xcode=pic32 ;;
2042 -W*,*) echo $flag ;;
2043 -f*-*|-W*) ;;
2044 *) echo $flag ;;
2045 esac
2046 done
2047 }
2048 elif $cc -v 2>&1 | grep -q 'PathScale\|Path64'; then
2049 cc_type=pathscale
2050 cc_version=__PATHSCALE__
2051 cc_ident=$($cc -v 2>&1 | head -n1 | tr -d :)
2052 CC_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
2053 AS_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
2054 speed_cflags='-O2'
2055 size_cflags='-Os'
2056 elif $cc -v 2>&1 | grep -q Open64; then
2057 cc_type=open64
2058 cc_version=__OPEN64__
2059 cc_ident=$($cc -v 2>&1 | head -n1 | tr -d :)
2060 CC_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
2061 AS_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
2062 speed_cflags='-O2'
2063 size_cflags='-Os'
2064 fi
2065
2066 test -n "$cc_type" && enable $cc_type ||
2067 warn "Unknown C compiler $cc, unable to select optimal CFLAGS"
2068
2069 : ${as_default:=$cc}
2070 : ${dep_cc_default:=$cc}
2071 : ${ld_default:=$cc}
2072 set_default ar as dep_cc ld
2073
2074 test -n "$CC_DEPFLAGS" || CCDEP=$DEPEND_CMD
2075 test -n "$AS_DEPFLAGS" || ASDEP=$DEPEND_CMD
2076
2077 add_cflags $extra_cflags
2078 add_asflags $extra_cflags
2079
2080 if test -n "$sysroot"; then
2081 case "$cc_type" in
2082 gcc|llvm_gcc|clang)
2083 add_cppflags --sysroot="$sysroot"
2084 add_ldflags --sysroot="$sysroot"
2085 ;;
2086 tms470)
2087 add_cppflags -I"$sysinclude"
2088 add_ldflags --sysroot="$sysroot"
2089 ;;
2090 esac
2091 fi
2092
2093 if test "$cpu" = host; then
2094 enabled cross_compile && die "--cpu=host makes no sense when cross-compiling."
2095
2096 case "$cc_type" in
2097 gcc|llvm_gcc)
2098 check_native(){
2099 $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
2100 sed -n "/$1=/{
2101 s/.*$1=\\([^ ]*\\).*/\\1/
2102 p
2103 q
2104 }" $TMPE
2105 }
2106 cpu=$(check_native -march || check_native -mcpu)
2107 ;;
2108 esac
2109
2110 test "${cpu:-host}" = host && die "--cpu=host not supported with compiler $cc"
2111 fi
2112
2113 # Deal with common $arch aliases
2114 case "$arch" in
2115 arm*)
2116 arch="arm"
2117 ;;
2118 mips|mipsel|IP*)
2119 arch="mips"
2120 ;;
2121 mips64*)
2122 arch="mips"
2123 subarch="mips64"
2124 ;;
2125 parisc|hppa)
2126 arch="parisc"
2127 ;;
2128 parisc64|hppa64)
2129 arch="parisc"
2130 subarch="parisc64"
2131 ;;
2132 "Power Macintosh"|ppc|powerpc)
2133 arch="ppc"
2134 ;;
2135 ppc64|powerpc64)
2136 arch="ppc"
2137 subarch="ppc64"
2138 ;;
2139 s390|s390x)
2140 arch="s390"
2141 ;;
2142 sh4|sh)
2143 arch="sh4"
2144 ;;
2145 sun4u|sparc64)
2146 arch="sparc"
2147 subarch="sparc64"
2148 ;;
2149 i[3-6]86|i86pc|BePC|x86pc|x86_64|amd64)
2150 arch="x86"
2151 ;;
2152 esac
2153
2154 is_in $arch $ARCH_LIST || warn "unknown architecture $arch"
2155 enable $arch
2156
2157 # Add processor-specific flags
2158 if test "$cpu" = generic; then
2159 : do nothing
2160 elif enabled ppc; then
2161
2162 case $(tolower $cpu) in
2163 601|ppc601|powerpc601)
2164 cpuflags="-mcpu=601"
2165 disable altivec
2166 ;;
2167 603*|ppc603*|powerpc603*)
2168 cpuflags="-mcpu=603"
2169 disable altivec
2170 ;;
2171 604*|ppc604*|powerpc604*)
2172 cpuflags="-mcpu=604"
2173 disable altivec
2174 ;;
2175 g3|75*|ppc75*|powerpc75*)
2176 cpuflags="-mcpu=750 -mpowerpc-gfxopt"
2177 disable altivec
2178 ;;
2179 g4|745*|ppc745*|powerpc745*)
2180 cpuflags="-mcpu=7450 -mpowerpc-gfxopt"
2181 ;;
2182 74*|ppc74*|powerpc74*)
2183 cpuflags="-mcpu=7400 -mpowerpc-gfxopt"
2184 ;;
2185 g5|970|ppc970|powerpc970|power4*)
2186 cpuflags="-mcpu=970 -mpowerpc-gfxopt -mpowerpc64"
2187 ;;
2188 cell)
2189 cpuflags="-mcpu=cell"
2190 enable ldbrx
2191 ;;
2192 e500v2)
2193 cpuflags="-mcpu=8548 -mhard-float -mfloat-gprs=double"
2194 disable altivec
2195 ;;
2196 e500)
2197 cpuflags="-mcpu=8540 -mhard-float"
2198 disable altivec
2199 ;;
2200 esac
2201
2202 elif enabled x86; then
2203
2204 case $cpu in
2205 i[345]86|pentium)
2206 cpuflags="-march=$cpu"
2207 disable mmx
2208 ;;
2209 # targets that do NOT support conditional mov (cmov)
2210 pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
2211 cpuflags="-march=$cpu"
2212 disable cmov
2213 ;;
2214 # targets that do support conditional mov (cmov)
2215 i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2|amdfam10|barcelona|atom)
2216 cpuflags="-march=$cpu"
2217 enable cmov
2218 enable fast_cmov
2219 ;;
2220 # targets that do support conditional mov but on which it's slow
2221 pentium4|pentium4m|prescott|nocona)
2222 cpuflags="-march=$cpu"
2223 enable cmov
2224 disable fast_cmov
2225 ;;
2226 esac
2227
2228 elif enabled sparc; then
2229
2230 case $cpu in
2231 niagara)
2232 cpuflags="-mcpu=$cpu"
2233 disable vis
2234 ;;
2235 sparc64)
2236 cpuflags="-mcpu=v9"
2237 ;;
2238 esac
2239
2240 elif enabled arm; then
2241
2242 case $cpu in
2243 armv*)
2244 cpuflags="-march=$cpu"
2245 subarch=$(echo $cpu | sed 's/[^a-z0-9]//g')
2246 ;;
2247 *)
2248 cpuflags="-mcpu=$cpu"
2249 case $cpu in
2250 cortex-a*) subarch=armv7a ;;
2251 cortex-r*) subarch=armv7r ;;
2252 cortex-m*) subarch=armv7m ;;
2253 arm11*) subarch=armv6 ;;
2254 arm[79]*e*|arm9[24]6*|arm96*|arm102[26]) subarch=armv5te ;;
2255 armv4*|arm7*|arm9[24]*) subarch=armv4 ;;
2256 esac
2257 ;;
2258 esac
2259
2260 elif enabled alpha; then
2261
2262 enabled ccc && cpuflags="-arch $cpu" || cpuflags="-mcpu=$cpu"
2263
2264 elif enabled bfin; then
2265
2266 cpuflags="-mcpu=$cpu"
2267
2268 elif enabled mips; then
2269
2270 cpuflags="-march=$cpu"
2271
2272 elif enabled avr32; then
2273
2274 case $cpu in
2275 ap7[02]0[0-2])
2276 subarch="avr32_ap"
2277 cpuflags="-mpart=$cpu"
2278 ;;
2279 ap)
2280 subarch="avr32_ap"
2281 cpuflags="-march=$cpu"
2282 ;;
2283 uc3[ab]*)
2284 subarch="avr32_uc"
2285 cpuflags="-mcpu=$cpu"
2286 ;;
2287 uc)
2288 subarch="avr32_uc"
2289 cpuflags="-march=$cpu"
2290 ;;
2291 esac
2292
2293 fi
2294
2295 add_cflags $cpuflags
2296 add_asflags $cpuflags
2297
2298 # compiler sanity check
2299 check_exec <<EOF
2300 int main(void){ return 0; }
2301 EOF
2302 if test "$?" != 0; then
2303 echo "$cc is unable to create an executable file."
2304 if test -z "$cross_prefix" && ! enabled cross_compile ; then
2305 echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
2306 echo "Only do this if you know what cross compiling means."
2307 fi
2308 die "C compiler test failed."
2309 fi
2310
2311 add_cppflags -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112
2312 check_cflags -std=c99
2313 check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
2314 #include <stdlib.h>
2315 EOF
2316 check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
2317 #include <stdlib.h>
2318 EOF
2319
2320 check_host_cflags -std=c99
2321
2322 case "$arch" in
2323 alpha|ia64|mips|parisc|sparc)
2324 spic=$shared
2325 ;;
2326 x86)
2327 subarch="x86_32"
2328 check_cc <<EOF && subarch="x86_64"
2329 int test[(int)sizeof(char*) - 7];
2330 EOF
2331 if test "$subarch" = "x86_64"; then
2332 spic=$shared
2333 fi
2334 ;;
2335 esac
2336
2337 enable $subarch
2338 enabled spic && enable pic
2339
2340 # OS specific
2341 case $target_os in
2342 haiku)
2343 prefix_default="/boot/common"
2344 network_extralibs="-lnetwork"
2345 host_libs=
2346 ;;
2347 sunos)
2348 FFSERVERLDFLAGS=""
2349 SHFLAGS='-shared -Wl,-h,$$(@F)'
2350 enabled x86 && SHFLAGS="-mimpure-text $SHFLAGS"
2351 network_extralibs="-lsocket -lnsl"
2352 add_cppflags -D__EXTENSIONS__
2353 nm_opts='-P -g'
2354 ;;
2355 netbsd)
2356 disable symver
2357 oss_indev_extralibs="-lossaudio"
2358 oss_outdev_extralibs="-lossaudio"
2359 add_cppflags -D_XOPEN_SOURCE=600
2360 ;;
2361 openbsd)
2362 enable malloc_aligned
2363 # On OpenBSD 4.5. the compiler does not use PIC unless
2364 # explicitly using -fPIC. Libav builds fine without PIC,
2365 # however the generated executable will not do anything
2366 # (simply quits with exit-code 1, no crash, no output).
2367 # Thus explicitly enable PIC here.
2368 enable pic
2369 disable symver
2370 SHFLAGS='-shared'
2371 oss_indev_extralibs="-lossaudio"
2372 oss_outdev_extralibs="-lossaudio"
2373 ;;
2374 dragonfly)
2375 enable malloc_aligned
2376 disable symver
2377 ;;
2378 freebsd)
2379 enable malloc_aligned
2380 ;;
2381 bsd/os)
2382 add_extralibs -lpoll -lgnugetopt
2383 strip="strip -d"
2384 ;;
2385 darwin)
2386 enable malloc_aligned
2387 gas="gas-preprocessor.pl $cc"
2388 enabled ppc && add_asflags -force_cpusubtype_ALL
2389 SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR)'
2390 enabled x86_32 && append SHFLAGS -Wl,-read_only_relocs,suppress
2391 strip="${strip} -x"
2392 add_ldflags -Wl,-dynamic,-search_paths_first
2393 SLIBSUF=".dylib"
2394 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
2395 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
2396 FFSERVERLDFLAGS=-Wl,-bind_at_load
2397 objformat="macho"
2398 enabled x86_64 && objformat="macho64"
2399 enabled_any pic shared ||
2400 { check_cflags -mdynamic-no-pic && add_asflags -mdynamic-no-pic; }
2401 ;;
2402 mingw32*)
2403 if test $target_os = "mingw32ce"; then
2404 disable network
2405 else
2406 target_os=mingw32
2407 fi
2408 LIBTARGET=i386
2409 if enabled x86_64; then
2410 enable malloc_aligned
2411 LIBTARGET=x64
2412 elif enabled arm; then
2413 LIBTARGET=arm
2414 fi
2415 shlibdir_default="$bindir_default"
2416 disable ffserver
2417 SLIBPREF=""
2418 SLIBSUF=".dll"
2419 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
2420 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
2421 SLIB_EXTRA_CMD='-lib.exe /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)'
2422 SLIB_INSTALL_EXTRA_CMD='-install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"; \
2423 install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)"; \
2424 install -d "$(LIBDIR)"; \
2425 install -m 644 $(SUBDIR)lib$(SLIBNAME:$(SLIBSUF)=.dll.a) "$(LIBDIR)/lib$(SLIBNAME:$(SLIBSUF)=.dll.a)"'
2426 SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"'
2427 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'
2428 objformat="win32"
2429 enable dos_paths
2430 check_cflags -fno-common
2431 check_cpp_condition _mingw.h "defined (__MINGW64_VERSION_MAJOR) || (__MINGW32_MAJOR_VERSION > 3) \
2432 || (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
2433 die "ERROR: MinGW runtime version must be >= 3.15."
2434 ;;
2435 cygwin*)
2436 target_os=cygwin
2437 shlibdir_default="$bindir_default"
2438 SLIBPREF="cyg"
2439 SLIBSUF=".dll"
2440 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
2441 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
2442 SHFLAGS='-shared -Wl,--enable-auto-image-base'
2443 objformat="win32"
2444 enable dos_paths
2445 check_cflags -fno-common
2446 ;;
2447 *-dos|freedos|opendos)
2448 disable ffplay ffserver
2449 disable $INDEV_LIST $OUTDEV_LIST
2450 network_extralibs="-lsocket"
2451 objformat="coff"
2452 enable dos_paths
2453 ;;
2454 linux)
2455 enable dv1394
2456 ;;
2457 irix*)
2458 target_os=irix
2459 ranlib="echo ignoring ranlib"
2460 ;;
2461 os/2*)
2462 strip="lxlite -CS"
2463 ln_s="cp -f"
2464 add_ldflags -Zomf -Zbin-files -Zargs-wild -Zmap
2465 SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
2466 FFSERVERLDFLAGS=""
2467 LIBSUF="_s.a"
2468 SLIBPREF=""
2469 SLIBSUF=".dll"
2470 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
2471 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
2472 SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
2473 echo PROTMODE >> $(SUBDIR)$(NAME).def; \
2474 echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
2475 echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
2476 echo EXPORTS >> $(SUBDIR)$(NAME).def; \
2477 emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
2478 SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
2479 emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
2480 SLIB_INSTALL_EXTRA_CMD='install -m 644 $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib "$(LIBDIR)"'
2481 SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.a "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.lib'
2482 enable dos_paths
2483 ;;
2484 gnu/kfreebsd)
2485 ;;
2486 gnu)
2487 ;;
2488 qnx)
2489 add_cppflags -D_QNX_SOURCE
2490 network_extralibs="-lsocket"
2491 ;;
2492 none)
2493 ;;
2494 *)
2495 die "Unknown OS '$target_os'."
2496 ;;
2497 esac
2498
2499 echo "config:$arch:$subarch:$cpu:$target_os:$cc_ident:$LIBAV_CONFIGURATION" >config.fate
2500
2501 check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable pic
2502
2503 set_default $PATHS_LIST
2504
2505 # we need to build at least one lib type
2506 if ! enabled_any static shared; then
2507 cat <<EOF
2508 At least one library type must be built.
2509 Specify --enable-static to build the static libraries or --enable-shared to
2510 build the shared libraries as well. To only build the shared libraries specify
2511 --disable-static in addition to --enable-shared.
2512 EOF
2513 exit 1;
2514 fi
2515
2516 disabled static && LIBNAME=""
2517
2518 die_license_disabled() {
2519 enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
2520 }
2521
2522 die_license_disabled gpl libx264
2523 die_license_disabled gpl libxavs
2524 die_license_disabled gpl libxvid
2525 die_license_disabled gpl postproc
2526 die_license_disabled gpl x11grab
2527
2528 die_license_disabled nonfree libfaac
2529
2530 die_license_disabled version3 libopencore_amrnb
2531 die_license_disabled version3 libopencore_amrwb
2532
2533 enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
2534
2535 disabled optimizations || check_cflags -fomit-frame-pointer
2536
2537 enable_pic() {
2538 enable pic
2539 add_cppflags -DPIC
2540 add_cflags -fPIC
2541 add_asflags -fPIC
2542 }
2543
2544 enabled pic && enable_pic
2545
2546 check_cc <<EOF || die "Symbol mangling check failed."
2547 int ff_extern;
2548 EOF
2549 sym=$($nm $nm_opts $TMPO | awk '/ff_extern/{ print substr($0, match($0, /[^ \t]*ff_extern/)) }')
2550 extern_prefix=${sym%%ff_extern*}
2551
2552 check_cc <<EOF && enable inline_asm
2553 void foo(void) { __asm__ volatile ("" ::); }
2554 EOF
2555
2556 _restrict=
2557 for restrict_keyword in restrict __restrict__ __restrict; do
2558 check_cc <<EOF && _restrict=$restrict_keyword && break
2559 void foo(char * $restrict_keyword p);
2560 EOF
2561 done
2562
2563 check_cc <<EOF && enable attribute_packed
2564 struct { int x; } __attribute__((packed)) x;
2565 EOF
2566
2567 check_cc <<EOF && enable attribute_may_alias
2568 union { int x; } __attribute__((may_alias)) x;
2569 EOF
2570
2571 check_cc <<EOF || die "endian test failed"
2572 unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
2573 EOF
2574 od -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
2575
2576 if enabled alpha; then
2577
2578 check_cflags -mieee
2579
2580 elif enabled arm; then
2581
2582 check_cflags -marm
2583 nogas=die
2584
2585 if check_cpp_condition stddef.h "defined __ARM_PCS_VFP"; then
2586 enable vfp_args
2587 elif ! check_cpp_condition stddef.h "defined __ARM_PCS || defined __SOFTFP__"; then
2588 case "${cross_prefix:-$cc}" in
2589 *hardfloat*) enable vfp_args; fpabi=vfp ;;
2590 *) check_ld <<EOF && enable vfp_args && fpabi=vfp || fpabi=soft ;;
2591 __asm__ (".eabi_attribute 28, 1");
2592 int main(void) { return 0; }
2593 EOF
2594 esac
2595 warn "Compiler does not indicate floating-point ABI, guessing $fpabi."
2596 fi
2597
2598 # We have to check if pld is a nop and disable it.
2599 check_asm pld '"pld [r0]"'
2600
2601 enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
2602 enabled armv6 && check_asm armv6 '"sadd16 r0, r0, r0"'
2603 enabled armv6t2 && check_asm armv6t2 '"movt r0, #0"'
2604 enabled armvfp && check_asm armvfp '"fadds s0, s0, s0"'
2605 enabled iwmmxt && check_asm iwmmxt '"wunpckelub wr6, wr4"'
2606 enabled neon && check_asm neon '"vadd.i16 q0, q0, q0"'
2607
2608 enabled_all armv6t2 shared !pic && enable_pic
2609
2610 elif enabled mips; then
2611
2612 check_asm loongson '"dmult.g $1, $2, $3"'
2613 enabled mmi && check_asm mmi '"lq $2, 0($2)"'
2614
2615 elif enabled ppc; then
2616
2617 enable local_aligned_8 local_aligned_16
2618
2619 check_asm dcbzl '"dcbzl 0, %0" :: "r"(0)'
2620 check_asm ibm_asm '"add 0, 0, 0"'
2621 check_asm ppc4xx '"maclhw r10, r11, r12"'
2622 check_asm xform_asm '"lwzx %1, %y0" :: "Z"(*(int*)0), "r"(0)'
2623
2624 # AltiVec flags: The FSF version of GCC differs from the Apple version
2625 if enabled altivec; then
2626 nogas=warn
2627 check_cflags -maltivec -mabi=altivec &&
2628 { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
2629 check_cflags -faltivec
2630
2631 # check if our compiler supports Motorola AltiVec C API
2632 check_cc <<EOF || disable altivec
2633 $inc_altivec_h
2634 int main(void) {
2635 vector signed int v1, v2, v3;
2636 v1 = vec_add(v2,v3);
2637 return 0;
2638 }
2639 EOF
2640
2641 # check if our compiler supports braces for vector declarations
2642 check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
2643 $inc_altivec_h
2644 int main (void) { (vector int) {1}; return 0; }
2645 EOF
2646 fi
2647
2648 elif enabled sparc; then
2649
2650 enabled vis && check_asm vis '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc &&
2651 add_cflags -mcpu=ultrasparc -mtune=ultrasparc
2652
2653 elif enabled x86; then
2654
2655 enable local_aligned_8 local_aligned_16
2656
2657 # check whether EBP is available on x86
2658 # As 'i' is stored on the stack, this program will crash
2659 # if the base pointer is used to access it because the
2660 # base pointer is cleared in the inline assembly code.
2661 check_exec_crash <<EOF && enable ebp_available
2662 volatile int i=0;
2663 __asm__ volatile (
2664 "xorl %%ebp, %%ebp"
2665 ::: "%ebp");
2666 return i;
2667 EOF
2668
2669 # check whether EBX is available on x86
2670 check_asm ebx_available '""::"b"(0)' &&
2671 check_asm ebx_available '"":::"%ebx"'
2672
2673 # check whether xmm clobbers are supported
2674 check_asm xmm_clobbers '"":::"%xmm0"'
2675
2676 # check whether more than 10 operands are supported
2677 check_cc <<EOF && enable ten_operands
2678 int main(void) {
2679 int x=0;
2680 __asm__ volatile(
2681 ""
2682 :"+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x)
2683 );
2684 return 0;
2685 }
2686 EOF
2687
2688 # check whether binutils is new enough to compile SSSE3/MMX2
2689 enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
2690 enabled mmx2 && check_asm mmx2 '"pmaxub %mm0, %mm1"'
2691
2692 check_asm bswap '"bswap %%eax" ::: "%eax"'
2693
2694 if ! disabled_any asm mmx yasm; then
2695 if check_cmd $yasmexe --version; then
2696 enabled x86_64 && yasm_extra="-m amd64"
2697 yasm_debug="-g dwarf2"
2698 elif check_cmd nasm -v; then
2699 yasmexe=nasm
2700 yasm_debug="-g -F dwarf"
2701 enabled x86_64 && test "$objformat" = elf && objformat=elf64
2702 fi
2703
2704 YASMFLAGS="-f $objformat $yasm_extra"
2705 enabled pic && append YASMFLAGS "-DPIC"
2706 test -n "$extern_prefix" && append YASMFLAGS "-DPREFIX"
2707 case "$objformat" in
2708 elf*) enabled debug && append YASMFLAGS $yasm_debug ;;
2709 esac
2710
2711 check_yasm "pextrd [eax], xmm0, 1" && enable yasm ||
2712 die "yasm not found, use --disable-yasm for a crippled build"
2713 check_yasm "vpaddw xmm0, xmm0, xmm0" || disable avx
2714 fi
2715
2716 case "$cpu" in
2717 athlon*|opteron*|k8*|pentium|pentium-mmx|prescott|nocona|atom|geode)
2718 disable fast_clz
2719 ;;
2720 esac
2721
2722 fi
2723
2724 if enabled asm; then
2725 as=${gas:=$as}
2726 check_asm gnu_as '".macro m n\n\\n:.int 0\n.endm\nm x"' ||
2727 $nogas "GNU assembler not found, install gas-preprocessor"
2728 fi
2729
2730 if check_func dlopen; then
2731 ldl=
2732 elif check_func dlopen -ldl; then
2733 ldl=-ldl
2734 fi
2735
2736 if enabled network; then
2737 check_type "sys/types.h sys/socket.h" socklen_t
2738 check_type netdb.h "struct addrinfo"
2739 check_type netinet/in.h "struct ipv6_mreq" -D_DARWIN_C_SOURCE
2740 check_type netinet/in.h "struct sockaddr_in6"
2741 check_type "sys/types.h sys/socket.h" "struct sockaddr_storage"
2742 check_struct "sys/types.h sys/socket.h" "struct sockaddr" sa_len
2743 # Prefer arpa/inet.h over winsock2
2744 if check_header arpa/inet.h ; then
2745 check_func closesocket
2746 elif check_header winsock2.h ; then
2747 check_func_headers winsock2.h closesocket -lws2 && \
2748 network_extralibs="-lws2" || \
2749 { check_func_headers winsock2.h closesocket -lws2_32 && \
2750 network_extralibs="-lws2_32"; }
2751 check_type ws2tcpip.h socklen_t
2752 check_type ws2tcpip.h "struct addrinfo"
2753 check_type ws2tcpip.h "struct ipv6_mreq"
2754 check_type ws2tcpip.h "struct sockaddr_in6"
2755 check_type ws2tcpip.h "struct sockaddr_storage"
2756 check_struct winsock2.h "struct sockaddr" sa_len
2757 else
2758 disable network
2759 fi
2760 fi
2761
2762 # Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
2763 check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
2764
2765 check_func fcntl
2766 check_func fork
2767 check_func getaddrinfo $network_extralibs
2768 check_func gethrtime
2769 check_func getrusage
2770 check_struct "sys/time.h sys/resource.h" "struct rusage" ru_maxrss
2771 check_func inet_aton $network_extralibs
2772 check_func isatty
2773 check_func ${malloc_prefix}memalign && enable memalign
2774 check_func mkstemp
2775 check_func mmap
2776 check_func ${malloc_prefix}posix_memalign && enable posix_memalign
2777 check_func setrlimit
2778 check_func strerror_r
2779 check_func strtok_r
2780 check_func_headers io.h setmode
2781 check_func_headers lzo/lzo1x.h lzo1x_999_compress
2782 check_lib2 "windows.h psapi.h" GetProcessMemoryInfo -lpsapi
2783 check_func_headers windows.h GetProcessTimes
2784 check_func_headers windows.h MapViewOfFile
2785 check_func_headers windows.h VirtualAlloc
2786
2787 check_header conio.h
2788 check_header dlfcn.h
2789 check_header dxva2api.h
2790 check_header malloc.h
2791 check_header poll.h
2792 check_header sys/mman.h
2793 check_header sys/resource.h
2794 check_header sys/select.h
2795 check_header termios.h
2796 check_header vdpau/vdpau.h
2797 check_header vdpau/vdpau_x11.h
2798 check_header X11/extensions/XvMClib.h
2799
2800 check_struct dxva2api.h DXVA_PictureParameters wDecodedPictureIndex
2801
2802 if ! enabled_any memalign memalign_hack posix_memalign malloc_aligned &&
2803 enabled_any $need_memalign ; then
2804 die "Error, no aligned memory allocator but SSE enabled, disable it or use --enable-memalign-hack."
2805 fi
2806
2807 disabled zlib || check_lib zlib.h zlibVersion -lz || disable zlib
2808 disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
2809
2810 # check for some common methods of building with pthread support
2811 # do this before the optional library checks as some of them require pthreads
2812 if ! disabled pthreads && ! enabled w32threads; then
2813 enable pthreads
2814 if check_func pthread_create; then
2815 :
2816 elif check_func pthread_create -pthread; then
2817 add_cflags -pthread
2818 add_extralibs -pthread
2819 elif check_func pthread_create -pthreads; then
2820 add_cflags -pthreads
2821 add_extralibs -pthreads
2822 elif check_func pthread_create -lpthreadGC2; then
2823 add_extralibs -lpthreadGC2
2824 elif ! check_lib pthread.h pthread_create -lpthread; then
2825 disable pthreads
2826 fi
2827 fi
2828
2829 for thread in $THREADS_LIST; do
2830 if enabled $thread; then
2831 test -n "$thread_type" &&
2832 die "ERROR: Only one thread type must be selected." ||
2833 thread_type="$thread"
2834 fi
2835 done
2836
2837 check_lib math.h sin -lm
2838 disabled vaapi || check_lib va/va.h vaInitialize -lva
2839
2840 check_mathfunc exp2
2841 check_mathfunc exp2f
2842 check_mathfunc llrint
2843 check_mathfunc llrintf
2844 check_mathfunc log2
2845 check_mathfunc log2f
2846 check_mathfunc lrint
2847 check_mathfunc lrintf
2848 check_mathfunc round
2849 check_mathfunc roundf
2850 check_mathfunc truncf
2851
2852 # these are off by default, so fail if requested and not available
2853 enabled avisynth && require2 vfw32 "windows.h vfw.h" AVIFileInit -lavifil32
2854 enabled frei0r && { check_header frei0r.h || die "ERROR: frei0r.h header not found"; }
2855 enabled libdirac && require_pkg_config dirac \
2856 "libdirac_decoder/dirac_parser.h libdirac_encoder/dirac_encoder.h" \
2857 "dirac_decoder_init dirac_encoder_init"
2858 enabled libfaac && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
2859 enabled libgsm && require libgsm gsm/gsm.h gsm_create -lgsm
2860 enabled libmp3lame && require "libmp3lame >= 3.98.3" lame/lame.h lame_set_VBR_quality -lmp3lame
2861 enabled libnut && require libnut libnut.h nut_demuxer_init -lnut
2862 enabled libopencore_amrnb && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb
2863 enabled libopencore_amrwb && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb
2864 enabled libopencv && require_pkg_config opencv opencv/cv.h cvCreateImageHeader
2865 enabled libopenjpeg && require libopenjpeg openjpeg.h opj_version -lopenjpeg
2866 enabled librtmp && require_pkg_config librtmp librtmp/rtmp.h RTMP_Socket
2867 enabled libschroedinger && require_pkg_config schroedinger-1.0 schroedinger/schro.h schro_init
2868 enabled libspeex && require libspeex speex/speex.h speex_decoder_init -lspeex
2869 enabled libtheora && require libtheora theora/theoraenc.h th_info_init -ltheoraenc -ltheoradec -logg
2870 enabled libvorbis && require libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
2871 enabled libvpx && {
2872 enabled libvpx_decoder && { check_lib2 "vpx/vpx_decoder.h vpx/vp8dx.h" vpx_codec_dec_init_ver -lvpx ||
2873 die "ERROR: libvpx decoder version must be >=0.9.1"; }
2874 enabled libvpx_encoder && { check_lib2 "vpx/vpx_encoder.h vpx/vp8cx.h" vpx_codec_enc_init_ver -lvpx ||
2875 die "ERROR: libvpx encoder version must be >=0.9.1"; } }
2876 enabled libx264 && require libx264 x264.h x264_encoder_encode -lx264 &&
2877 { check_cpp_condition x264.h "X264_BUILD >= 99" ||
2878 die "ERROR: libx264 version must be >= 0.99."; }
2879 enabled libxavs && require libxavs xavs.h xavs_encoder_encode -lxavs
2880 enabled libxvid && require libxvid xvid.h xvid_global -lxvidcore
2881 enabled mlib && require mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
2882
2883 # libdc1394 check
2884 if enabled libdc1394; then
2885 { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
2886 enable libdc1394_2; } ||
2887 { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
2888 enable libdc1394_1; } ||
2889 die "ERROR: No version of libdc1394 found "
2890 fi
2891
2892 if check_pkg_config sdl SDL.h SDL_Init; then
2893 check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
2894 enable sdl &&
2895 check_struct SDL.h SDL_VideoInfo current_w $sdl_cflags && enable sdl_video_size
2896 fi
2897
2898 texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
2899
2900 check_header linux/videodev.h
2901 check_header linux/videodev2.h
2902 check_header sys/videoio.h
2903
2904 check_func_headers "windows.h vfw.h" capCreateCaptureWindow "$vfwcap_indev_extralibs"
2905 # check that WM_CAP_DRIVER_CONNECT is defined to the proper value
2906 # w32api 3.12 had it defined wrong
2907 check_cpp_condition vfw.h "WM_CAP_DRIVER_CONNECT > WM_USER" && enable vfwcap_defines
2908
2909 # check for ioctl_meteor.h, ioctl_bt848.h and alternatives
2910 { check_header dev/bktr/ioctl_meteor.h &&
2911 check_header dev/bktr/ioctl_bt848.h; } ||
2912 { check_header machine/ioctl_meteor.h &&
2913 check_header machine/ioctl_bt848.h; } ||
2914 { check_header dev/video/meteor/ioctl_meteor.h &&
2915 check_header dev/video/bktr/ioctl_bt848.h; } ||
2916 check_header dev/ic/bt8xx.h
2917
2918 check_header sys/soundcard.h
2919 check_header soundcard.h
2920
2921 enabled_any alsa_indev alsa_outdev && check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
2922
2923 enabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack
2924
2925 enabled x11grab &&
2926 check_header X11/Xlib.h &&
2927 check_header X11/extensions/XShm.h &&
2928 check_header X11/extensions/Xfixes.h &&
2929 check_func XOpenDisplay -lX11 &&
2930 check_func XShmCreateImage -lX11 -lXext &&
2931 check_func XFixesGetCursorImage -lX11 -lXext -lXfixes
2932
2933 if ! disabled vdpau && enabled vdpau_vdpau_h; then
2934 check_cpp_condition \
2935 vdpau/vdpau.h "defined VDP_DECODER_PROFILE_MPEG4_PART2_ASP" ||
2936 { echolog "Please upgrade to libvdpau >= 0.2 if you would like vdpau support." &&
2937 disable vdpau; }
2938 fi
2939
2940 enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel"
2941
2942 # add some useful compiler flags if supported
2943 check_cflags -Wdeclaration-after-statement
2944 check_cflags -Wall
2945 check_cflags -Wno-parentheses
2946 check_cflags -Wno-switch
2947 check_cflags -Wdisabled-optimization
2948 check_cflags -Wpointer-arith
2949 check_cflags -Wredundant-decls
2950 check_cflags -Wno-pointer-sign
2951 check_cflags -Wcast-qual
2952 check_cflags -Wwrite-strings
2953 check_cflags -Wtype-limits
2954 check_cflags -Wundef
2955 check_cflags -Wmissing-prototypes
2956 enabled extra_warnings && check_cflags -Winline
2957
2958 # add some linker flags
2959 check_ldflags -Wl,--warn-common
2960 check_ldflags -Wl,--as-needed
2961 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'
2962 test_ldflags -Wl,-Bsymbolic && append SHFLAGS -Wl,-Bsymbolic
2963
2964 echo "X{};" > $TMPV
2965 if test_ldflags -Wl,--version-script,$TMPV; then
2966 append SHFLAGS '-Wl,--version-script,\$(SUBDIR)lib\$(NAME).ver'
2967 check_cc <<EOF && enable symver_asm_label
2968 void ff_foo(void) __asm__ ("av_foo@VERSION");
2969 void ff_foo(void) { ${inline_asm+__asm__($quotes);} }
2970 EOF
2971 check_cc <<EOF && enable symver_gnu_asm
2972 __asm__(".symver ff_foo,av_foo@VERSION");
2973 void ff_foo(void) {}
2974 EOF
2975 fi
2976
2977 if enabled small; then
2978 add_cflags $size_cflags
2979 optimizations="small"
2980 elif enabled optimizations; then
2981 add_cflags $speed_cflags
2982 else
2983 add_cflags $noopt_cflags
2984 fi
2985 check_cflags -fno-math-errno
2986 check_cflags -fno-signed-zeros
2987
2988 if enabled icc; then
2989 # Just warnings, no remarks
2990 check_cflags -w1
2991 # -wd: Disable following warnings
2992 # 144, 167, 556: -Wno-pointer-sign
2993 # 10006: ignoring unknown option -fno-signed-zeros
2994 # 10148: ignoring unknown option -Wno-parentheses
2995 # 10156: ignoring option '-W'; no argument required
2996 check_cflags -wd144,167,556,10006,10148,10156
2997 # 11030: Warning unknown option --as-needed
2998 # 10156: ignoring option '-export'; no argument required
2999 check_ldflags -wd10156,11030
3000 # Allow to compile with optimizations
3001 check_ldflags -march=$cpu
3002 # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
3003 enable ebp_available
3004 if enabled x86_32; then
3005 test ${icc_version%%.*} -ge 11 && \
3006 check_cflags -falign-stack=maintain-16-byte || \
3007 disable aligned_stack
3008 fi
3009 elif enabled ccc; then
3010 # disable some annoying warnings
3011 add_cflags -msg_disable cvtu32to64
3012 add_cflags -msg_disable embedcomment
3013 add_cflags -msg_disable needconstext
3014 add_cflags -msg_disable nomainieee
3015 add_cflags -msg_disable ptrmismatch1
3016 add_cflags -msg_disable unreachcode
3017 elif enabled gcc; then
3018 check_cflags -fno-tree-vectorize
3019 check_cflags -Werror=implicit-function-declaration
3020 check_cflags -Werror=missing-prototypes
3021 elif enabled llvm_gcc; then
3022 check_cflags -mllvm -stack-alignment=16
3023 elif enabled clang; then
3024 check_cflags -mllvm -stack-alignment=16
3025 check_cflags -Qunused-arguments
3026 elif enabled armcc; then
3027 # 2523: use of inline assembler is deprecated
3028 add_cflags -W${armcc_opt},--diag_suppress=2523
3029 add_cflags -W${armcc_opt},--diag_suppress=1207
3030 add_cflags -W${armcc_opt},--diag_suppress=1293 # assignment in condition
3031 add_cflags -W${armcc_opt},--diag_suppress=3343 # hardfp compat
3032 elif enabled tms470; then
3033 add_cflags -pds=824 -pds=837
3034 elif enabled pathscale; then
3035 add_cflags -fstrict-overflow -OPT:wrap_around_unsafe_opt=OFF
3036 fi
3037
3038 enabled_any $THREADS_LIST && enable threads
3039
3040 check_deps $CONFIG_LIST \
3041 $CONFIG_EXTRA \
3042 $HAVE_LIST \
3043 $DECODER_LIST \
3044 $ENCODER_LIST \
3045 $HWACCEL_LIST \
3046 $PARSER_LIST \
3047 $BSF_LIST \
3048 $DEMUXER_LIST \
3049 $MUXER_LIST \
3050 $FILTER_LIST \
3051 $INDEV_LIST \
3052 $OUTDEV_LIST \
3053 $PROTOCOL_LIST \
3054 $ACODEC_TESTS \
3055 $VCODEC_TESTS \
3056 $LAVF_TESTS \
3057 $LAVFI_TESTS \
3058 $SEEK_TESTS \
3059
3060 enabled asm || { arch=c; disable $ARCH_LIST $ARCH_EXT_LIST; }
3061
3062 echo "install prefix $prefix"
3063 echo "source path $source_path"
3064 echo "C compiler $cc"
3065 echo "ARCH $arch ($cpu)"
3066 if test "$build_suffix" != ""; then
3067 echo "build suffix $build_suffix"
3068 fi
3069 if test "$extra_version" != ""; then
3070 echo "version string suffix $extra_version"
3071 fi
3072 echo "big-endian ${bigendian-no}"
3073 echo "runtime cpu detection ${runtime_cpudetect-no}"
3074 if enabled x86; then
3075 echo "yasm ${yasm-no}"
3076 echo "MMX enabled ${mmx-no}"
3077 echo "MMX2 enabled ${mmx2-no}"
3078 echo "3DNow! enabled ${amd3dnow-no}"
3079 echo "3DNow! extended enabled ${amd3dnowext-no}"
3080 echo "SSE enabled ${sse-no}"
3081 echo "SSSE3 enabled ${ssse3-no}"
3082 echo "CMOV enabled ${cmov-no}"
3083 echo "CMOV is fast ${fast_cmov-no}"
3084 echo "EBX available ${ebx_available-no}"
3085 echo "EBP available ${ebp_available-no}"
3086 echo "10 operands supported ${ten_operands-no}"
3087 fi
3088 if enabled arm; then
3089 echo "ARMv5TE enabled ${armv5te-no}"
3090 echo "ARMv6 enabled ${armv6-no}"
3091 echo "ARMv6T2 enabled ${armv6t2-no}"
3092 echo "ARM VFP enabled ${armvfp-no}"
3093 echo "IWMMXT enabled ${iwmmxt-no}"
3094 echo "NEON enabled ${neon-no}"
3095 fi
3096 if enabled mips; then
3097 echo "MMI enabled ${mmi-no}"
3098 fi
3099 if enabled ppc; then
3100 echo "AltiVec enabled ${altivec-no}"
3101 echo "PPC 4xx optimizations ${ppc4xx-no}"
3102 echo "dcbzl available ${dcbzl-no}"
3103 fi
3104 if enabled sparc; then
3105 echo "VIS enabled ${vis-no}"
3106 fi
3107 echo "debug symbols ${debug-no}"
3108 echo "strip symbols ${stripping-no}"
3109 echo "optimizations ${optimizations-no}"
3110 echo "static ${static-no}"
3111 echo "shared ${shared-no}"
3112 echo "postprocessing support ${postproc-no}"
3113 echo "new filter support ${avfilter-no}"
3114 echo "network support ${network-no}"
3115 echo "threading support ${thread_type-no}"
3116 echo "SDL support ${sdl-no}"
3117 echo "Sun medialib support ${mlib-no}"
3118 echo "AVISynth enabled ${avisynth-no}"
3119 echo "frei0r enabled ${frei0r-no}"
3120 echo "libdc1394 support ${libdc1394-no}"
3121 echo "libdirac enabled ${libdirac-no}"
3122 echo "libfaac enabled ${libfaac-no}"
3123 echo "libgsm enabled ${libgsm-no}"
3124 echo "libmp3lame enabled ${libmp3lame-no}"
3125 echo "libnut enabled ${libnut-no}"
3126 echo "libopencore-amrnb support ${libopencore_amrnb-no}"
3127 echo "libopencore-amrwb support ${libopencore_amrwb-no}"
3128 echo "libopencv support ${libopencv-no}"
3129 echo "libopenjpeg enabled ${libopenjpeg-no}"
3130 echo "librtmp enabled ${librtmp-no}"
3131 echo "libschroedinger enabled ${libschroedinger-no}"
3132 echo "libspeex enabled ${libspeex-no}"
3133 echo "libtheora enabled ${libtheora-no}"
3134 echo "libvorbis enabled ${libvorbis-no}"
3135 echo "libvpx enabled ${libvpx-no}"
3136 echo "libx264 enabled ${libx264-no}"
3137 echo "libxavs enabled ${libxavs-no}"
3138 echo "libxvid enabled ${libxvid-no}"
3139 echo "zlib enabled ${zlib-no}"
3140 echo "bzlib enabled ${bzlib-no}"
3141 echo
3142
3143 for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
3144 echo "Enabled ${type}s:"
3145 eval list=\$$(toupper $type)_LIST
3146 print_enabled '_*' $list | sort | pr -3 -t
3147 echo
3148 done
3149
3150 license="LGPL version 2.1 or later"
3151 if enabled nonfree; then
3152 license="nonfree and unredistributable"
3153 elif enabled gplv3; then
3154 license="GPL version 3 or later"
3155 elif enabled lgplv3; then
3156 license="LGPL version 3 or later"
3157 elif enabled gpl; then
3158 license="GPL version 2 or later"
3159 fi
3160
3161 echo "License: $license"
3162
3163 echo "Creating config.mak and config.h..."
3164
3165 # build tree in object directory if source path is different from current one
3166 if enabled source_path_used; then
3167 DIRS="
3168 doc
3169 libavcodec
3170 libavcodec/$arch
3171 libavdevice
3172 libavfilter
3173 libavfilter/$arch
3174 libavformat
3175 libavutil
3176 libavutil/$arch
3177 libpostproc
3178 libswscale
3179 libswscale/$arch
3180 tests
3181 tools
3182 "
3183 FILES="
3184 Makefile
3185 common.mak
3186 subdir.mak
3187 doc/texi2pod.pl
3188 libavcodec/Makefile
3189 libavcodec/${arch}/Makefile
3190 libavdevice/Makefile
3191 libavfilter/Makefile
3192 libavfilter/${arch}/Makefile
3193 libavformat/Makefile
3194 libavutil/Makefile
3195 libpostproc/Makefile
3196 libswscale/Makefile
3197 "
3198 map 'mkdir -p $v' $DIRS;
3199 map 'test -f "$source_path/$v" && $ln_s "$source_path/$v" $v' $FILES
3200 fi
3201
3202 enabled stripping || strip="echo skipping strip"
3203
3204 config_files="$TMPH config.mak"
3205
3206 cat > config.mak <<EOF
3207 # Automatically generated by configure - do not modify!
3208 ifndef LIBAV_CONFIG_MAK
3209 LIBAV_CONFIG_MAK=1
3210 LIBAV_CONFIGURATION=$LIBAV_CONFIGURATION
3211 prefix=$prefix
3212 LIBDIR=\$(DESTDIR)$libdir
3213 SHLIBDIR=\$(DESTDIR)$shlibdir
3214 INCDIR=\$(DESTDIR)$incdir
3215 BINDIR=\$(DESTDIR)$bindir
3216 DATADIR=\$(DESTDIR)$datadir
3217 MANDIR=\$(DESTDIR)$mandir
3218 SRC_PATH="$source_path"
3219 SRC_PATH_BARE=$source_path
3220 BUILD_ROOT="$PWD"
3221 CC_IDENT=$cc_ident
3222 ARCH=$arch
3223 CC=$cc
3224 AS=$as
3225 LD=$ld
3226 DEPCC=$dep_cc
3227 YASM=$yasmexe
3228 YASMDEP=$yasmexe
3229 AR=$ar
3230 RANLIB=$ranlib
3231 CP=cp -p
3232 LN_S=$ln_s
3233 STRIP=$strip
3234 CPPFLAGS=$CPPFLAGS
3235 CFLAGS=$CFLAGS
3236 ASFLAGS=$ASFLAGS
3237 CC_O=$CC_O
3238 LDFLAGS=$LDFLAGS
3239 FFSERVERLDFLAGS=$FFSERVERLDFLAGS
3240 SHFLAGS=$SHFLAGS
3241 YASMFLAGS=$YASMFLAGS
3242 BUILDSUF=$build_suffix
3243 FULLNAME=$FULLNAME
3244 LIBPREF=$LIBPREF
3245 LIBSUF=$LIBSUF
3246 LIBNAME=$LIBNAME
3247 SLIBPREF=$SLIBPREF
3248 SLIBSUF=$SLIBSUF
3249 EXESUF=$EXESUF
3250 EXTRA_VERSION=$extra_version
3251 DEPFLAGS=$DEPFLAGS
3252 CCDEP=$CCDEP
3253 ASDEP=$ASDEP
3254 CC_DEPFLAGS=$CC_DEPFLAGS
3255 AS_DEPFLAGS=$AS_DEPFLAGS
3256 HOSTCC=$host_cc
3257 HOSTCFLAGS=$host_cflags
3258 HOSTEXESUF=$HOSTEXESUF
3259 HOSTLDFLAGS=$host_ldflags
3260 HOSTLIBS=$host_libs
3261 TARGET_EXEC=$target_exec
3262 TARGET_PATH=$target_path
3263 SDL_LIBS=$sdl_libs
3264 SDL_CFLAGS=$sdl_cflags
3265 LIB_INSTALL_EXTRA_CMD=$LIB_INSTALL_EXTRA_CMD
3266 EXTRALIBS=$extralibs
3267 INSTALL=install
3268 LIBTARGET=${LIBTARGET}
3269 SLIBNAME=${SLIBNAME}
3270 SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}
3271 SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}
3272 SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}
3273 SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}
3274 SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}
3275 SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}
3276 SAMPLES=${samples:-\$(FATE_SAMPLES)}
3277 EOF
3278
3279 get_version(){
3280 name=$1
3281 file=$source_path/$2
3282 eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
3283 eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
3284 lcname=$(tolower $name)
3285 eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
3286 eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
3287 }
3288
3289 get_version LIBSWSCALE libswscale/swscale.h
3290 get_version LIBPOSTPROC libpostproc/postprocess.h
3291 get_version LIBAVCODEC libavcodec/avcodec.h
3292 get_version LIBAVDEVICE libavdevice/avdevice.h
3293 get_version LIBAVFORMAT libavformat/version.h
3294 get_version LIBAVUTIL libavutil/avutil.h
3295 get_version LIBAVFILTER libavfilter/avfilter.h
3296
3297 cat > $TMPH <<EOF
3298 /* Automatically generated by configure - do not modify! */
3299 #ifndef LIBAV_CONFIG_H
3300 #define LIBAV_CONFIG_H
3301 #define LIBAV_CONFIGURATION "$(c_escape $LIBAV_CONFIGURATION)"
3302 #define LIBAV_LICENSE "$(c_escape $license)"
3303 #define FFMPEG_DATADIR "$(eval c_escape $datadir)"
3304 #define CC_TYPE "$cc_type"
3305 #define CC_VERSION $cc_version
3306 #define restrict $_restrict
3307 #define EXTERN_PREFIX "${extern_prefix}"
3308 #define EXTERN_ASM ${extern_prefix}
3309 #define SLIBSUF "$SLIBSUF"
3310 EOF
3311
3312 test -n "$malloc_prefix" &&
3313 echo "#define MALLOC_PREFIX $malloc_prefix" >>$TMPH
3314
3315 if enabled small || disabled optimizations; then
3316 echo "#undef av_always_inline" >> $TMPH
3317 if enabled small; then
3318 echo "#define av_always_inline inline" >> $TMPH
3319 else
3320 echo "#define av_always_inline av_unused" >> $TMPH
3321 fi
3322 fi
3323
3324 if enabled yasm; then
3325 append config_files $TMPASM
3326 printf '' >$TMPASM
3327 fi
3328
3329 print_config ARCH_ "$config_files" $ARCH_LIST
3330 print_config HAVE_ "$config_files" $HAVE_LIST
3331 print_config CONFIG_ "$config_files" $CONFIG_LIST \
3332 $CONFIG_EXTRA \
3333 $DECODER_LIST \
3334 $ENCODER_LIST \
3335 $HWACCEL_LIST \
3336 $PARSER_LIST \
3337 $BSF_LIST \
3338 $DEMUXER_LIST \
3339 $MUXER_LIST \
3340 $FILTER_LIST \
3341 $PROTOCOL_LIST \
3342 $INDEV_LIST \
3343 $OUTDEV_LIST \
3344
3345 cat >>config.mak <<EOF
3346 ACODEC_TESTS=$(print_enabled -n _test $ACODEC_TESTS)
3347 VCODEC_TESTS=$(print_enabled -n _test $VCODEC_TESTS)
3348 LAVF_TESTS=$(print_enabled -n _test $LAVF_TESTS)
3349 LAVFI_TESTS=$(print_enabled -n _test $LAVFI_TESTS)
3350 SEEK_TESTS=$(print_enabled -n _test $SEEK_TESTS)
3351 EOF
3352
3353 echo "#endif /* LIBAV_CONFIG_H */" >> $TMPH
3354 echo "endif # LIBAV_CONFIG_MAK" >> config.mak
3355
3356 # Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
3357 cp_if_changed $TMPH config.h
3358 touch .config
3359
3360 enabled yasm && cp_if_changed $TMPASM config.asm
3361
3362 cat > $TMPH <<EOF
3363 /* Generated by ffconf */
3364 #ifndef AVUTIL_AVCONFIG_H
3365 #define AVUTIL_AVCONFIG_H
3366 EOF
3367
3368 print_config AV_HAVE_ $TMPH $HAVE_LIST_PUB
3369
3370 echo "#endif /* AVUTIL_AVCONFIG_H */" >> $TMPH
3371
3372 cp_if_changed $TMPH libavutil/avconfig.h
3373
3374 test -n "$WARNINGS" && printf "\n$WARNINGS"
3375
3376 # build pkg-config files
3377
3378 pkgconfig_generate(){
3379 name=$1
3380 shortname=${name#lib}${build_suffix}
3381 comment=$2
3382 version=$3
3383 libs=$4
3384 requires=$5
3385 enabled ${name#lib} || return 0
3386 cat <<EOF > $name/$name.pc
3387 prefix=$prefix
3388 exec_prefix=\${prefix}
3389 libdir=$libdir
3390 includedir=$incdir
3391
3392 Name: $name
3393 Description: $comment
3394 Version: $version
3395 Requires: $(enabled shared || echo $requires)
3396 Requires.private: $(enabled shared && echo $requires)
3397 Conflicts:
3398 Libs: -L\${libdir} -l${shortname} $(enabled shared || echo $libs)
3399 Libs.private: $(enabled shared && echo $libs)
3400 Cflags: -I\${includedir}
3401 EOF
3402 cat <<EOF > $name/$name-uninstalled.pc
3403 prefix=
3404 exec_prefix=
3405 libdir=\${pcfiledir}
3406 includedir=${source_path}
3407
3408 Name: $name
3409 Description: $comment
3410 Version: $version
3411 Requires: $requires
3412 Conflicts:
3413 Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
3414 Cflags: -I\${includedir}
3415 EOF
3416 }
3417
3418 pkgconfig_generate libavutil "Libav utility library" "$LIBAVUTIL_VERSION"
3419 pkgconfig_generate libavcodec "Libav codec library" "$LIBAVCODEC_VERSION" "$extralibs"
3420 pkgconfig_generate libavformat "Libav container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
3421 pkgconfig_generate libavdevice "Libav device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "libavformat = $LIBAVFORMAT_VERSION"
3422 pkgconfig_generate libavfilter "Libav video filtering library" "$LIBAVFILTER_VERSION" "$extralibs"
3423 pkgconfig_generate libpostproc "Libav post processing library" "$LIBPOSTPROC_VERSION"
3424 pkgconfig_generate libswscale "Libav image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"