58f36c2de170356a3a40a91149b8c5b8c25d3e61
[libav.git] / configure
1 #!/bin/sh
2 #
3 # FFmpeg 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 FFMPEG, 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 FFmpeg."
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 echo "Usage: configure [options]"
59 echo "Options: [defaults in brackets after descriptions]"
60 echo
61 echo "Standard options:"
62 echo " --help print this message"
63 echo " --logfile=FILE log tests and output to FILE [config.err]"
64 echo " --disable-logging do not log configure debug information"
65 echo " --prefix=PREFIX install in PREFIX [$prefix]"
66 echo " --bindir=DIR install binaries in DIR [PREFIX/bin]"
67 echo " --datadir=DIR install data files in DIR [PREFIX/share/ffmpeg]"
68 echo " --libdir=DIR install libs in DIR [PREFIX/lib]"
69 echo " --shlibdir=DIR install shared libs in DIR [PREFIX/lib]"
70 echo " --incdir=DIR install includes in DIR [PREFIX/include]"
71 echo " --mandir=DIR install man page in DIR [PREFIX/share/man]"
72 echo
73 echo "Configuration options:"
74 echo " --disable-static do not build static libraries [no]"
75 echo " --enable-shared build shared libraries [no]"
76 echo " --enable-gpl allow use of GPL code, the resulting libs"
77 echo " and binaries will be under GPL [no]"
78 echo " --enable-version3 upgrade (L)GPL to version 3 [no]"
79 echo " --enable-nonfree allow use of nonfree code, the resulting libs"
80 echo " and binaries will be unredistributable [no]"
81 echo " --disable-ffmpeg disable ffmpeg build"
82 echo " --disable-ffplay disable ffplay build"
83 echo " --disable-ffserver disable ffserver build"
84 echo " --enable-postproc enable GPLed postprocessing support [no]"
85 echo " --enable-avfilter video filter support [no]"
86 echo " --enable-avfilter-lavf video filters dependent on avformat [no]"
87 echo " --enable-beosthreads use BeOS threads [no]"
88 echo " --enable-os2threads use OS/2 threads [no]"
89 echo " --enable-pthreads use pthreads [no]"
90 echo " --enable-w32threads use Win32 threads [no]"
91 echo " --enable-x11grab enable X11 grabbing [no]"
92 echo " --disable-network disable network support [no]"
93 echo " --disable-ipv6 disable IPv6 support [no]"
94 echo " --disable-mpegaudio-hp faster (but less accurate) MPEG audio decoding [no]"
95 echo " --enable-gray enable full grayscale support (slower color)"
96 echo " --disable-swscale-alpha disable alpha channel support in swscale"
97 echo " --disable-fastdiv disable table-based division"
98 echo " --enable-small optimize for size instead of speed"
99 echo " --disable-aandct disable AAN DCT code"
100 echo " --disable-fft disable FFT code"
101 echo " --disable-golomb disable Golomb code"
102 echo " --disable-mdct disable MDCT code"
103 echo " --disable-rdft disable RDFT code"
104 echo " --enable-runtime-cpudetect detect cpu capabilities at runtime (bigger binary)"
105 echo " --enable-hardcoded-tables use hardcoded tables instead of runtime generation"
106 echo " --enable-memalign-hack emulate memalign, interferes with memory debuggers"
107 echo " --enable-beos-netserver enable BeOS netserver"
108 echo " --disable-encoder=NAME disable encoder NAME"
109 echo " --enable-encoder=NAME enable encoder NAME"
110 echo " --disable-encoders disable all encoders"
111 echo " --disable-decoder=NAME disable decoder NAME"
112 echo " --enable-decoder=NAME enable decoder NAME"
113 echo " --disable-decoders disable all decoders"
114 echo " --disable-hwaccel=NAME disable hwaccel NAME"
115 echo " --enable-hwaccel=NAME enable hwaccel NAME"
116 echo " --disable-hwaccels disable all hwaccels"
117 echo " --disable-muxer=NAME disable muxer NAME"
118 echo " --enable-muxer=NAME enable muxer NAME"
119 echo " --disable-muxers disable all muxers"
120 echo " --disable-demuxer=NAME disable demuxer NAME"
121 echo " --enable-demuxer=NAME enable demuxer NAME"
122 echo " --disable-demuxers disable all demuxers"
123 echo " --enable-parser=NAME enable parser NAME"
124 echo " --disable-parser=NAME disable parser NAME"
125 echo " --disable-parsers disable all parsers"
126 echo " --enable-bsf=NAME enable bitstream filter NAME"
127 echo " --disable-bsf=NAME disable bitstream filter NAME"
128 echo " --disable-bsfs disable all bitstream filters"
129 echo " --enable-protocol=NAME enable protocol NAME"
130 echo " --disable-protocol=NAME disable protocol NAME"
131 echo " --disable-protocols disable all protocols"
132 echo " --disable-indevs disable input devices"
133 echo " --disable-outdevs disable output devices"
134 echo " --disable-devices disable all devices"
135 echo " --enable-filter=NAME enable filter NAME"
136 echo " --disable-filter=NAME disable filter NAME"
137 echo " --disable-filters disable all filters"
138 echo " --list-decoders show all available decoders"
139 echo " --list-encoders show all available encoders"
140 echo " --list-hwaccels show all available hardware accelerators"
141 echo " --list-muxers show all available muxers"
142 echo " --list-demuxers show all available demuxers"
143 echo " --list-parsers show all available parsers"
144 echo " --list-protocols show all available protocols"
145 echo " --list-bsfs show all available bitstream filters"
146 echo " --list-indevs show all available input devices"
147 echo " --list-outdevs show all available output devices"
148 echo " --list-filters show all available filters"
149 echo
150 echo "External library support:"
151 echo " --enable-avisynth enable reading of AVISynth script files [no]"
152 echo " --enable-bzlib enable bzlib [autodetect]"
153 echo " --enable-libamr-nb enable libamr-nb floating point audio codec [no]"
154 echo " --enable-libamr-wb enable libamr-wb floating point audio codec [no]"
155 echo " --enable-libdc1394 enable IIDC-1394 grabbing using libdc1394"
156 echo " and libraw1394 [no]"
157 echo " --enable-libdirac enable Dirac support via libdirac [no]"
158 echo " --enable-libfaac enable FAAC support via libfaac [no]"
159 echo " --enable-libfaad enable FAAD support via libfaad [no]"
160 echo " --enable-libfaadbin open libfaad.so.0 at runtime [no]"
161 echo " --enable-libgsm enable GSM support via libgsm [no]"
162 echo " --enable-libmp3lame enable MP3 encoding via libmp3lame [no]"
163 echo " --enable-libnut enable NUT (de)muxing via libnut,"
164 echo " native (de)muxer exists [no]"
165 echo " --enable-libopenjpeg enable JPEG 2000 decoding via OpenJPEG [no]"
166 echo " --enable-libschroedinger enable Dirac support via libschroedinger [no]"
167 echo " --enable-libspeex enable Speex decoding via libspeex [no]"
168 echo " --enable-libtheora enable Theora encoding via libtheora [no]"
169 echo " --enable-libvorbis enable Vorbis encoding via libvorbis,"
170 echo " native implementation exists [no]"
171 echo " --enable-libx264 enable H.264 encoding via x264 [no]"
172 echo " --enable-libxvid enable Xvid encoding via xvidcore,"
173 echo " native MPEG-4/Xvid encoder exists [no]"
174 echo " --enable-mlib enable Sun medialib [no]"
175 echo " --enable-zlib enable zlib [autodetect]"
176 echo ""
177 echo "Advanced options (experts only):"
178 echo " --source-path=PATH path to source code [$source_path]"
179 echo " --cross-prefix=PREFIX use PREFIX for compilation tools [$cross_prefix]"
180 echo " --enable-cross-compile assume a cross-compiler is used"
181 echo " --sysroot=PATH root of cross-build tree"
182 echo " --sysinclude=PATH location of cross-build system headers"
183 echo " --target-os=OS compiler targets OS [$target_os]"
184 echo " --target-exec=CMD command to run executables on target"
185 echo " --target-path=DIR path to view of build directory on target"
186 echo " --nm=NM use nm tool"
187 echo " --as=AS use assembler AS [$as_default]"
188 echo " --cc=CC use C compiler CC [$cc_default]"
189 echo " --host-cc=HOSTCC use host C compiler HOSTCC"
190 echo " --host-cflags=HCFLAGS use HCFLAGS when compiling for host"
191 echo " --host-ldflags=HLDFLAGS use HLDFLAGS when linking for host"
192 echo " --host-libs=HLIBS use libs HLIBS when linking for host"
193 echo " --extra-cflags=ECFLAGS add ECFLAGS to CFLAGS [$CFLAGS]"
194 echo " --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]"
195 echo " --extra-libs=ELIBS add ELIBS [$ELIBS]"
196 echo " --extra-version=STRING version string suffix []"
197 echo " --build-suffix=SUFFIX library name suffix []"
198 echo " --arch=ARCH select architecture [$arch]"
199 echo " --cpu=CPU select the minimum required CPU (affects"
200 echo " instruction selection, may crash on older CPUs)"
201 echo " --enable-powerpc-perf enable performance report on PPC"
202 echo " (requires enabling PMC)"
203 echo " --disable-altivec disable AltiVec optimizations"
204 echo " --disable-amd3dnow disable 3DNow! optimizations"
205 echo " --disable-amd3dnowext disable 3DNow! extended optimizations"
206 echo " --disable-mmx disable MMX optimizations"
207 echo " --disable-mmx2 disable MMX2 optimizations"
208 echo " --disable-sse disable SSE optimizations"
209 echo " --disable-ssse3 disable SSSE3 optimizations"
210 echo " --disable-armv5te disable armv5te optimizations"
211 echo " --disable-armv6 disable armv6 optimizations"
212 echo " --disable-armv6t2 disable armv6t2 optimizations"
213 echo " --disable-armvfp disable ARM VFP optimizations"
214 echo " --disable-iwmmxt disable iwmmxt optimizations"
215 echo " --disable-mmi disable MMI optimizations"
216 echo " --disable-neon disable neon optimizations"
217 echo " --disable-vis disable VIS optimizations"
218 echo " --disable-yasm disable use of yasm assembler"
219 echo
220 echo "Developer options (useful when working on FFmpeg itself):"
221 echo " --disable-debug disable debugging symbols"
222 echo " --enable-debug=LEVEL set the debug level [$debuglevel]"
223 echo " --enable-gprof enable profiling with gprof [$gprof]"
224 echo " --disable-optimizations disable compiler optimizations"
225 echo " --enable-extra-warnings enable more compiler warnings"
226 echo " --disable-stripping disable stripping of executables and shared libraries"
227 echo ""
228 echo "NOTE: Object files are built at the place where configure is launched."
229 exit 0
230 }
231
232 log(){
233 echo "$@" >> $logfile
234 }
235
236 log_file(){
237 log BEGIN $1
238 pr -n -t $1 >> $logfile
239 log END $1
240 }
241
242 echolog(){
243 log "$@"
244 echo "$@"
245 }
246
247 die(){
248 echolog "$@"
249 cat <<EOF
250
251 If you think configure made a mistake, make sure you are using the latest
252 version from SVN. If the latest version fails, report the problem to the
253 ffmpeg-user@mplayerhq.hu mailing list or IRC #ffmpeg on irc.freenode.net.
254 EOF
255 if disabled logging; then
256 cat <<EOF
257 Rerun configure with logging enabled (do not use --disable-logging), and
258 include the log this produces with your report.
259 EOF
260 else
261 cat <<EOF
262 Include the log file "$logfile" produced by configure as this will help
263 solving the problem.
264 EOF
265 fi
266 exit 1
267 }
268
269 # Avoid locale weirdness, besides we really just want to translate ASCII.
270 toupper(){
271 echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
272 }
273
274 tolower(){
275 echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
276 }
277
278 c_escape(){
279 echo "$*" | sed 's/["\\]/\\\0/g'
280 }
281
282 set_all(){
283 value=$1
284 shift
285 for var in $*; do
286 eval $var=$value
287 done
288 }
289
290 set_weak(){
291 value=$1
292 shift
293 for var; do
294 eval : \${$var:=$value}
295 done
296 }
297
298 pushvar(){
299 for var in $*; do
300 eval level=\${${var}_level:=0}
301 eval ${var}_${level}="\$$var"
302 eval ${var}_level=$(($level+1))
303 done
304 }
305
306 popvar(){
307 for var in $*; do
308 eval level=\${${var}_level:-0}
309 test $level = 0 && continue
310 eval level=$(($level-1))
311 eval $var="\${${var}_${level}}"
312 eval ${var}_level=$level
313 eval unset ${var}_${level}
314 done
315 }
316
317 enable(){
318 set_all yes $*
319 }
320
321 disable(){
322 set_all no $*
323 }
324
325 enable_weak(){
326 set_weak yes $*
327 }
328
329 disable_weak(){
330 set_weak no $*
331 }
332
333 enable_safe(){
334 enable $(echo "$*" | sed 's/[^A-Za-z0-9_ ]/_/g')
335 }
336
337 disable_safe(){
338 disable $(echo "$*" | sed 's/[^A-Za-z0-9_ ]/_/g')
339 }
340
341 do_enable_deep(){
342 for var; do
343 enabled $var && continue
344 eval sel="\$${var}_select"
345 eval sgs="\$${var}_suggest"
346 pushvar var sgs
347 enable_deep $sel
348 popvar sgs
349 enable_deep_weak $sgs
350 popvar var
351 done
352 }
353
354 enable_deep(){
355 do_enable_deep $*
356 enable $*
357 }
358
359 enable_deep_weak(){
360 do_enable_deep $*
361 enable_weak $*
362 }
363
364 enabled(){
365 test "${1#!}" = "$1" && op== || op=!=
366 eval test "x\$${1#!}" $op "xyes"
367 }
368
369 disabled(){
370 test "${1#!}" = "$1" && op== || op=!=
371 eval test "x\$${1#!}" $op "xno"
372 }
373
374 enabled_all(){
375 for opt; do
376 enabled $opt || return 1
377 done
378 }
379
380 disabled_all(){
381 for opt; do
382 disabled $opt || return 1
383 done
384 }
385
386 enabled_any(){
387 for opt; do
388 enabled $opt && return 0
389 done
390 }
391
392 disabled_any(){
393 for opt; do
394 disabled $opt && return 0
395 done
396 return 1
397 }
398
399 set_default(){
400 for opt; do
401 eval : \${$opt:=\$${opt}_default}
402 done
403 }
404
405 is_in(){
406 value=$1
407 shift
408 for var in $*; do
409 [ $var = $value ] && return 0
410 done
411 return 1
412 }
413
414 check_deps(){
415 for cfg; do
416 cfg="${cfg#!}"
417 enabled ${cfg}_checking && die "Circular dependency for $cfg."
418 disabled ${cfg}_checking && continue
419 enable ${cfg}_checking
420
421 eval dep_all="\$${cfg}_deps"
422 eval dep_any="\$${cfg}_deps_any"
423 eval dep_sel="\$${cfg}_select"
424 eval dep_sgs="\$${cfg}_suggest"
425
426 pushvar cfg dep_all dep_any dep_sel dep_sgs
427 check_deps $dep_all $dep_any $dep_sel $dep_sgs
428 popvar cfg dep_all dep_any dep_sel dep_sgs
429
430 enabled_all $dep_all || disable $cfg
431 enabled_any $dep_any || disable $cfg
432 disabled_any $dep_sel && disable $cfg
433
434 if enabled $cfg; then
435 eval dep_extralibs="\$${cfg}_extralibs"
436 test -n "$dep_extralibs" && add_extralibs $dep_extralibs
437 enable_deep $dep_sel
438 enable_deep_weak $dep_sgs
439 fi
440
441 disable ${cfg}_checking
442 done
443 }
444
445 print_config(){
446 pfx=$1
447 header=$2
448 makefile=$3
449 shift 3
450 for cfg; do
451 ucname="$(toupper $cfg)"
452 if enabled $cfg; then
453 echo "#define ${pfx}${ucname} 1" >> $header
454 echo "${pfx}${ucname}=yes" >> $makefile
455 else
456 echo "#define ${pfx}${ucname} 0" >> $header
457 fi
458 done
459 }
460
461 flags_saved(){
462 (: ${SAVE_CFLAGS?}) 2> /dev/null
463 }
464
465 save_flags(){
466 flags_saved && return
467 SAVE_CFLAGS="$CFLAGS"
468 SAVE_LDFLAGS="$LDFLAGS"
469 SAVE_extralibs="$extralibs"
470 }
471
472 restore_flags(){
473 flags_saved || return
474 CFLAGS="$SAVE_CFLAGS"
475 LDFLAGS="$SAVE_LDFLAGS"
476 extralibs="$SAVE_extralibs"
477 unset SAVE_CFLAGS
478 unset SAVE_LDFLAGS
479 unset SAVE_extralibs
480 }
481
482 temp_cflags(){
483 save_flags
484 CFLAGS="$CFLAGS $*"
485 }
486
487 temp_ldflags(){
488 save_flags
489 LDFLAGS="$LDFLAGS $*"
490 }
491
492 temp_extralibs(){
493 save_flags
494 extralibs="$extralibs $*"
495 }
496
497 append(){
498 var=$1
499 shift
500 flags_saved && eval "SAVE_$var=\"\$SAVE_$var $*\""
501 eval "$var=\"\$$var $*\""
502 }
503
504 add_cflags(){
505 append CFLAGS "$@"
506 }
507
508 add_ldflags(){
509 append LDFLAGS "$@"
510 }
511
512 add_extralibs(){
513 append extralibs "$@"
514 }
515
516 check_cmd(){
517 log "$@"
518 "$@" >> $logfile 2>&1
519 }
520
521 check_cc(){
522 log check_cc "$@"
523 cat > $TMPC
524 log_file $TMPC
525 check_cmd $cc $CFLAGS "$@" -c -o $TMPO $TMPC
526 }
527
528 check_cpp(){
529 log check_cpp "$@"
530 cat > $TMPC
531 log_file $TMPC
532 check_cmd $cc $CFLAGS "$@" -E -o $TMPO $TMPC
533 }
534
535 check_as(){
536 log check_as "$@"
537 cat > $TMPC
538 log_file $TMPC
539 check_cmd $as $CFLAGS "$@" -c -o $TMPO $TMPC
540 }
541
542 check_asm(){
543 log check_asm "$@"
544 name="$1"
545 asm="$2"
546 shift 2
547 check_as "$@" <<EOF && enable $name || disable $name
548 void foo(void){ __asm__ volatile($asm); }
549 EOF
550 }
551
552 check_yasm(){
553 log check_yasm "$@"
554 echo "$1" > $TMPS
555 log_file $TMPS
556 shift 1
557 check_cmd $yasmexe $YASMFLAGS "$@" -o $TMPO $TMPS
558 }
559
560 check_ld(){
561 log check_ld "$@"
562 check_cc || return
563 flags=''
564 libs=''
565 for f; do
566 test "${f}" = "${f#-l}" && flags="$flags $f" || libs="$libs $f"
567 done
568 check_cmd $cc $LDFLAGS $flags -o $TMPE $TMPO $extralibs $libs
569 }
570
571 check_cflags(){
572 log check_cflags "$@"
573 check_cc "$@" <<EOF && add_cflags "$@"
574 int x;
575 EOF
576 }
577
578 check_ldflags(){
579 log check_ldflags "$@"
580 check_ld "$@" <<EOF && add_ldflags "$@"
581 int main(void){ return 0; }
582 EOF
583 }
584
585 check_header(){
586 log check_header "$@"
587 header=$1
588 shift
589 disable_safe $header
590 check_cpp "$@" <<EOF && enable_safe $header
591 #include <$header>
592 int x;
593 EOF
594 }
595
596 check_func(){
597 log check_func "$@"
598 func=$1
599 shift
600 disable $func
601 check_ld "$@" <<EOF && enable $func
602 extern int $func();
603 int main(void){ $func(); }
604 EOF
605 }
606
607 check_func_headers(){
608 log check_func_headers "$@"
609 headers=$1
610 func=$2
611 shift 2
612 disable $func
613 incs=""
614 for hdr in $headers; do
615 incs="$incs
616 #include <$hdr>"
617 done
618 check_ld "$@" <<EOF && enable $func && enable_safe $headers
619 $incs
620 int main(int argc, char **argv){
621 (void) $func;
622 return 0;
623 }
624 EOF
625 }
626
627 check_cpp_condition(){
628 log check_cpp_condition "$@"
629 header=$1
630 condition=$2
631 check_cpp <<EOF
632 #include <$header>
633 #if !($condition)
634 #error "unsatisfied condition: $condition"
635 #endif
636 EOF
637 }
638
639 check_lib(){
640 log check_lib "$@"
641 header="$1"
642 func="$2"
643 shift 2
644 temp_extralibs "$@"
645 check_header $header && check_func $func && add_extralibs "$@"
646 err=$?
647 restore_flags
648 return $err
649 }
650
651 check_lib2(){
652 log check_lib2 "$@"
653 headers="$1"
654 func="$2"
655 shift 2
656 temp_extralibs "$@"
657 check_func_headers "$headers" $func && add_extralibs "$@"
658 err=$?
659 restore_flags
660 return $err
661 }
662
663 check_exec(){
664 check_ld "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
665 }
666
667 check_exec_crash(){
668 code=$(cat)
669
670 # exit() is not async signal safe. _Exit (C99) and _exit (POSIX)
671 # are safe but may not be available everywhere. Thus we use
672 # raise(SIGTERM) instead. The check is run in a subshell so we
673 # can redirect the "Terminated" message from the shell. SIGBUS
674 # is not defined by standard C so it is used conditionally.
675
676 (check_exec "$@") >> $logfile 2>&1 <<EOF
677 #include <signal.h>
678 static void sighandler(int sig){
679 raise(SIGTERM);
680 }
681 int main(void){
682 signal(SIGILL, sighandler);
683 signal(SIGFPE, sighandler);
684 signal(SIGSEGV, sighandler);
685 #ifdef SIGBUS
686 signal(SIGBUS, sighandler);
687 #endif
688 { $code }
689 }
690 EOF
691 }
692
693 check_type(){
694 log check_type "$@"
695 headers=$1
696 type=$2
697 shift 2
698 disable $type
699 incs=""
700 for hdr in $headers; do
701 incs="$incs
702 #include <$hdr>"
703 done
704 check_cc "$@" <<EOF && enable $type
705 $incs
706 $type v;
707 EOF
708 }
709
710 require(){
711 name="$1"
712 header="$2"
713 func="$3"
714 shift 3
715 check_lib $header $func "$@" || die "ERROR: $name not found"
716 }
717
718 require2(){
719 name="$1"
720 headers="$2"
721 func="$3"
722 shift 3
723 check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
724 }
725
726 check_foo_config(){
727 cfg=$1
728 pkg=$2
729 header=$3
730 func=$4
731 shift 4
732 disable $cfg
733 check_cmd ${pkg}-config --version
734 err=$?
735 if test "$err" = 0; then
736 temp_cflags $(${pkg}-config --cflags)
737 temp_extralibs $(${pkg}-config --libs)
738 check_lib "$@" $header $func && enable $cfg
739 fi
740 return $err
741 }
742
743 apply(){
744 file=$1
745 shift
746 "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
747 }
748
749 # CONFIG_LIST contains configurable options, while HAVE_LIST is for
750 # system-dependent things.
751
752 COMPONENT_LIST="
753 bsfs
754 decoders
755 demuxers
756 encoders
757 filters
758 hwaccels
759 indevs
760 muxers
761 outdevs
762 parsers
763 protocols
764 "
765
766 CONFIG_LIST="
767 $COMPONENT_LIST
768 aandct
769 avfilter
770 avfilter_lavf
771 avisynth
772 beos_netserver
773 bzlib
774 fastdiv
775 ffmpeg
776 ffplay
777 ffserver
778 fft
779 golomb
780 gpl
781 gprof
782 gray
783 hardcoded_tables
784 ipv6
785 libamr_nb
786 libamr_wb
787 libdc1394
788 libdirac
789 libfaac
790 libfaad
791 libfaadbin
792 libgsm
793 libmp3lame
794 libnut
795 libopenjpeg
796 libschroedinger
797 libspeex
798 libtheora
799 libvorbis
800 libx264
801 libxvid
802 mdct
803 memalign_hack
804 mlib
805 mpegaudio_hp
806 network
807 nonfree
808 postproc
809 powerpc_perf
810 rdft
811 runtime_cpudetect
812 shared
813 small
814 static
815 swscale_alpha
816 version3
817 x11grab
818 zlib
819 "
820
821 THREADS_LIST='
822 beosthreads
823 os2threads
824 pthreads
825 w32threads
826 '
827
828 ARCH_LIST='
829 alpha
830 arm
831 bfin
832 ia64
833 m68k
834 mips
835 mips64
836 parisc
837 ppc
838 ppc64
839 s390
840 sh4
841 sparc
842 sparc64
843 x86
844 x86_32
845 x86_64
846 '
847
848 ARCH_EXT_LIST='
849 altivec
850 amd3dnow
851 amd3dnowext
852 armv5te
853 armv6
854 armv6t2
855 armvfp
856 iwmmxt
857 mmi
858 mmx
859 mmx2
860 neon
861 ppc4xx
862 sse
863 ssse3
864 vis
865 '
866
867 HAVE_LIST="
868 $ARCH_EXT_LIST
869 $THREADS_LIST
870 alsa_asoundlib_h
871 altivec_h
872 arpa_inet_h
873 bigendian
874 bswap
875 closesocket
876 cmov
877 conio_h
878 dcbzl
879 dev_bktr_ioctl_bt848_h
880 dev_bktr_ioctl_meteor_h
881 dev_ic_bt8xx_h
882 dev_video_meteor_ioctl_meteor_h
883 dev_video_bktr_ioctl_bt848_h
884 dlfcn_h
885 dlopen
886 dos_paths
887 ebp_available
888 ebx_available
889 fast_64bit
890 fast_cmov
891 fast_unaligned
892 fork
893 gethrtime
894 GetProcessTimes
895 getrusage
896 inet_aton
897 inline_asm
898 ldbrx
899 libdc1394_1
900 libdc1394_2
901 llrint
902 loongson
903 lrint
904 lrintf
905 lzo1x_999_compress
906 machine_ioctl_bt848_h
907 machine_ioctl_meteor_h
908 malloc_h
909 memalign
910 mkstemp
911 pld
912 posix_memalign
913 round
914 roundf
915 sdl
916 sdl_video_size
917 setmode
918 socklen_t
919 soundcard_h
920 poll_h
921 sys_mman_h
922 sys_resource_h
923 sys_select_h
924 sys_soundcard_h
925 sys_videoio_h
926 ten_operands
927 termios_h
928 threads
929 truncf
930 VirtualAlloc
931 winsock2_h
932 xform_asm
933 yasm
934 "
935
936 # options emitted with CONFIG_ prefix but not available on command line
937 CONFIG_EXTRA="
938 gplv3
939 lgplv3
940 "
941
942 CMDLINE_SELECT="
943 $ARCH_EXT_LIST
944 $CONFIG_LIST
945 $THREADS_LIST
946 cross_compile
947 debug
948 extra_warnings
949 logging
950 optimizations
951 stripping
952 yasm
953 "
954
955 PATHS_LIST='
956 bindir
957 datadir
958 incdir
959 libdir
960 mandir
961 prefix
962 shlibdir
963 '
964
965 CMDLINE_SET="
966 $PATHS_LIST
967 arch
968 as
969 build_suffix
970 cc
971 cpu
972 cross_prefix
973 extra_version
974 host_cc
975 host_cflags
976 host_ldflags
977 host_libs
978 host_os
979 logfile
980 nm
981 source_path
982 sysinclude
983 sysroot
984 target_exec
985 target_os
986 target_path
987 "
988
989 # code dependency declarations
990
991 # architecture extensions
992 altivec_deps="ppc"
993 amd3dnow_deps="mmx"
994 amd3dnowext_deps="amd3dnow"
995 armv5te_deps="arm"
996 armv6_deps="arm"
997 armv6t2_deps="arm"
998 armvfp_deps="arm"
999 iwmmxt_deps="arm"
1000 mmi_deps="mips"
1001 mmx_deps="x86"
1002 mmx2_deps="mmx"
1003 neon_deps="arm"
1004 ppc4xx_deps="ppc"
1005 sse_deps="mmx"
1006 ssse3_deps="sse"
1007 vis_deps="sparc"
1008
1009 # decoders / encoders / hardware accelerators
1010 aac_decoder_select="fft mdct"
1011 ac3_decoder_select="fft mdct"
1012 atrac3_decoder_select="fft mdct"
1013 cavs_decoder_select="golomb"
1014 cook_decoder_select="fft mdct"
1015 cscd_decoder_suggest="zlib"
1016 dca_decoder_select="fft mdct"
1017 dnxhd_encoder_select="aandct"
1018 dxa_decoder_select="zlib"
1019 eac3_decoder_select="fft mdct"
1020 eatgq_decoder_select="aandct"
1021 eatqi_decoder_select="aandct"
1022 ffv1_decoder_select="golomb"
1023 flac_decoder_select="golomb"
1024 flac_encoder_select="golomb"
1025 flashsv_decoder_select="zlib"
1026 flashsv_encoder_select="zlib"
1027 flv_encoder_select="aandct"
1028 h261_encoder_select="aandct"
1029 h263_encoder_select="aandct"
1030 h263_vaapi_hwaccel_deps="va_va_h"
1031 h263p_encoder_select="aandct"
1032 h264_decoder_select="golomb"
1033 h264_vaapi_hwaccel_deps="va_va_h"
1034 h264_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1035 imc_decoder_select="fft mdct"
1036 jpegls_decoder_select="golomb"
1037 jpegls_encoder_select="golomb"
1038 ljpeg_encoder_select="aandct"
1039 loco_decoder_select="golomb"
1040 mjpeg_encoder_select="aandct"
1041 mpeg1video_encoder_select="aandct"
1042 mpeg2video_encoder_select="aandct"
1043 mpeg4_encoder_select="aandct"
1044 mpeg_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1045 mpeg1_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1046 mpeg2_vaapi_hwaccel_deps="va_va_h"
1047 mpeg4_vaapi_hwaccel_deps="va_va_h"
1048 mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h"
1049 msmpeg4v1_encoder_select="aandct"
1050 msmpeg4v2_encoder_select="aandct"
1051 msmpeg4v3_encoder_select="aandct"
1052 nellymoser_decoder_select="fft mdct"
1053 nellymoser_encoder_select="fft mdct"
1054 png_decoder_select="zlib"
1055 png_encoder_select="zlib"
1056 qdm2_decoder_select="fft mdct rdft"
1057 rv10_encoder_select="aandct"
1058 rv20_encoder_select="aandct"
1059 rv30_decoder_select="golomb"
1060 rv40_decoder_select="golomb"
1061 shorten_decoder_select="golomb"
1062 sonic_decoder_select="golomb"
1063 sonic_encoder_select="golomb"
1064 sonic_ls_encoder_select="golomb"
1065 svq3_decoder_select="golomb"
1066 svq3_decoder_suggest="zlib"
1067 tiff_decoder_suggest="zlib"
1068 tiff_encoder_suggest="zlib"
1069 tscc_decoder_select="zlib"
1070 vc1_vaapi_hwaccel_deps="va_va_h"
1071 vc1_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1072 vorbis_decoder_select="fft mdct"
1073 vorbis_encoder_select="fft mdct"
1074 wmav1_decoder_select="fft mdct"
1075 wmav1_encoder_select="fft mdct"
1076 wmav2_decoder_select="fft mdct"
1077 wmav2_encoder_select="fft mdct"
1078 wmv1_encoder_select="aandct"
1079 wmv2_encoder_select="aandct"
1080 wmv3_vaapi_hwaccel_deps="va_va_h"
1081 wmv3_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1082 zlib_decoder_select="zlib"
1083 zlib_encoder_select="zlib"
1084 zmbv_decoder_select="zlib"
1085 zmbv_encoder_select="zlib"
1086
1087 # external libraries
1088 libamr_nb_decoder_deps="libamr_nb"
1089 libamr_nb_encoder_deps="libamr_nb"
1090 libamr_wb_decoder_deps="libamr_wb"
1091 libamr_wb_encoder_deps="libamr_wb"
1092 libdirac_decoder_deps="libdirac !libschroedinger"
1093 libdirac_encoder_deps="libdirac"
1094 libfaac_encoder_deps="libfaac"
1095 libfaad_decoder_deps="libfaad"
1096 libfaadbin_decoder_extralibs='$ldl'
1097 libgsm_decoder_deps="libgsm"
1098 libgsm_encoder_deps="libgsm"
1099 libgsm_ms_decoder_deps="libgsm"
1100 libgsm_ms_encoder_deps="libgsm"
1101 libmp3lame_encoder_deps="libmp3lame"
1102 libopenjpeg_decoder_deps="libopenjpeg"
1103 libschroedinger_decoder_deps="libschroedinger"
1104 libschroedinger_encoder_deps="libschroedinger"
1105 libspeex_decoder_deps="libspeex"
1106 libtheora_encoder_deps="libtheora"
1107 libvorbis_encoder_deps="libvorbis"
1108 libx264_encoder_deps="libx264"
1109 libxvid_encoder_deps="libxvid"
1110
1111 # demuxers / muxers
1112 ac3_demuxer_deps="ac3_parser"
1113 alsa_demuxer_deps="alsa_asoundlib_h snd_pcm_htimestamp"
1114 alsa_demuxer_extralibs="-lasound"
1115 alsa_muxer_deps="alsa_asoundlib_h"
1116 alsa_muxer_extralibs="-lasound"
1117 audio_beos_demuxer_deps="audio_beos"
1118 audio_beos_demuxer_extralibs="-lmedia -lbe"
1119 audio_beos_muxer_deps="audio_beos"
1120 audio_beos_muxer_extralibs="-lmedia -lbe"
1121 avisynth_demuxer_deps="avisynth"
1122 bktr_demuxer_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
1123 dirac_demuxer_deps="dirac_parser"
1124 dv1394_demuxer_deps="dv1394 dv_demuxer"
1125 jack_demuxer_deps="jack_jack_h"
1126 jack_demuxer_extralibs="-ljack"
1127 libdc1394_demuxer_deps="libdc1394"
1128 libnut_demuxer_deps="libnut"
1129 libnut_muxer_deps="libnut"
1130 matroska_demuxer_suggest="zlib bzlib"
1131 mov_demuxer_suggest="zlib"
1132 mp3_demuxer_deps="mpegaudio_parser"
1133 oss_demuxer_deps_any="soundcard_h sys_soundcard_h"
1134 oss_muxer_deps_any="soundcard_h sys_soundcard_h"
1135 redir_demuxer_deps="network"
1136 rtp_muxer_deps="network rtp_protocol"
1137 rtsp_demuxer_deps="sdp_demuxer"
1138 sdp_demuxer_deps="rtp_protocol mpegts_demuxer"
1139 v4l_demuxer_deps="linux_videodev_h"
1140 v4l2_demuxer_deps_any="linux_videodev2_h sys_videoio_h"
1141 vfwcap_demuxer_deps="capCreateCaptureWindow"
1142 vfwcap_demuxer_extralibs="-lvfw32"
1143 x11_grab_device_demuxer_deps="x11grab XShmCreateImage"
1144 x11_grab_device_demuxer_extralibs="-lX11 -lXext"
1145
1146 # protocols
1147 gopher_protocol_deps="network"
1148 http_protocol_deps="network"
1149 rtp_protocol_deps="udp_protocol"
1150 tcp_protocol_deps="network"
1151 udp_protocol_deps="network"
1152
1153 # filters
1154 movie_filter_deps="avfilter_lavf"
1155
1156 # programs
1157 ffplay_deps="sdl"
1158 ffserver_deps="ffm_muxer rtp_protocol rtsp_demuxer"
1159 ffserver_extralibs='$ldl'
1160
1161
1162 # default parameters
1163
1164 logfile="config.err"
1165
1166 # installation paths
1167 prefix_default="/usr/local"
1168 bindir_default='${prefix}/bin'
1169 datadir_default='${prefix}/share/ffmpeg'
1170 incdir_default='${prefix}/include'
1171 libdir_default='${prefix}/lib'
1172 mandir_default='${prefix}/share/man'
1173 shlibdir_default="$libdir_default"
1174
1175 # toolchain
1176 ar="ar"
1177 cc_default="gcc"
1178 host_cc_default="gcc"
1179 ln_s="ln -sf"
1180 nm_default="nm"
1181 objformat="elf"
1182 ranlib="ranlib"
1183 strip="strip"
1184 yasmexe="yasm"
1185
1186 # machine
1187 arch=$(uname -m)
1188 cpu="generic"
1189
1190 # OS
1191 target_os=$(tolower $(uname -s))
1192 host_os=$target_os
1193
1194 # configurable options
1195 enable debug
1196 enable fastdiv
1197 enable ffmpeg
1198 enable ffplay
1199 enable ffserver
1200 enable ipv6
1201 enable mpegaudio_hp
1202 enable network
1203 enable optimizations
1204 enable protocols
1205 enable static
1206 enable stripping
1207 enable swscale_alpha
1208
1209 # build settings
1210 add_cflags -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112
1211 SHFLAGS='-shared -Wl,-soname,$$(@F)'
1212 FFSERVERLDFLAGS=-Wl,-E
1213 LIBPREF="lib"
1214 LIBSUF=".a"
1215 FULLNAME='$(NAME)$(BUILDSUF)'
1216 LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
1217 SLIBPREF="lib"
1218 SLIBSUF=".so"
1219 SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
1220 SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
1221 SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
1222 LIB_INSTALL_EXTRA_CMD='$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
1223
1224 host_cflags='-O3 -g -Wall'
1225 host_libs='-lm'
1226
1227 target_path='.'
1228
1229 # gcc stupidly only outputs the basename of targets with -MM, but we need the
1230 # full relative path for objects in subdirectories for non-recursive Make.
1231 DEPEND_CMD='$(CC) $(CFLAGS) -MM $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o,"'
1232
1233 # find source path
1234 source_path="$(dirname "$0")"
1235 enable source_path_used
1236 if test -z "$source_path" -o "$source_path" = "." ; then
1237 source_path="$(pwd)"
1238 disable source_path_used
1239 else
1240 source_path="$(cd "$source_path"; pwd)"
1241 echo "$source_path" | grep -q '[[:blank:]]' &&
1242 die "Out of tree builds are impossible with whitespace in source path."
1243 test -e "$source_path/config.h" &&
1244 die "Out of tree builds are impossible with config.h in source dir."
1245 fi
1246
1247 for v in "$@"; do
1248 r="${v#*=}"
1249 l="${v%$r}"
1250 test "$r" = "${r#* }" || r="'$r'"
1251 FFMPEG_CONFIGURATION="${FFMPEG_CONFIGURATION# } ${l}${r}"
1252 done
1253
1254 find_things(){
1255 thing=$1
1256 pattern=$2
1257 file=$source_path/$3
1258 sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
1259 }
1260
1261 ENCODER_LIST=$(find_things encoder ENC libavcodec/allcodecs.c)
1262 DECODER_LIST=$(find_things decoder DEC libavcodec/allcodecs.c)
1263 HWACCEL_LIST=$(find_things hwaccel HWACCEL libavcodec/allcodecs.c)
1264 PARSER_LIST=$(find_things parser PARSER libavcodec/allcodecs.c)
1265 BSF_LIST=$(find_things bsf BSF libavcodec/allcodecs.c)
1266 MUXER_LIST=$(find_things muxer _MUX libavformat/allformats.c)
1267 DEMUXER_LIST=$(find_things demuxer DEMUX libavformat/allformats.c)
1268 OUTDEV_LIST=$(find_things muxer _MUX libavdevice/alldevices.c)
1269 INDEV_LIST=$(find_things demuxer DEMUX libavdevice/alldevices.c)
1270 PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
1271 FILTER_LIST=$(find_things filter FILTER libavfilter/allfilters.c)
1272
1273 enable $ARCH_EXT_LIST \
1274 $DECODER_LIST \
1275 $ENCODER_LIST \
1276 $HWACCEL_LIST \
1277 $PARSER_LIST \
1278 $BSF_LIST \
1279 $DEMUXER_LIST \
1280 $MUXER_LIST \
1281 $FILTER_LIST \
1282 $PROTOCOL_LIST \
1283 $INDEV_LIST \
1284 $OUTDEV_LIST \
1285
1286 die_unknown(){
1287 echo "Unknown option \"$1\"."
1288 echo "See $0 --help for available options."
1289 exit 1
1290 }
1291
1292 show_list() {
1293 suffix=_$1
1294 shift
1295 echo $* | sed s/$suffix//g | tr ' ' '\n' | sort
1296 exit 0
1297 }
1298
1299 for opt do
1300 optval="${opt#*=}"
1301 case "$opt" in
1302 --extra-cflags=*) add_cflags $optval
1303 ;;
1304 --extra-ldflags=*) add_ldflags $optval
1305 ;;
1306 --extra-libs=*) add_extralibs $optval
1307 ;;
1308 --disable-devices) disable $INDEV_LIST $OUTDEV_LIST
1309 ;;
1310 --enable-debug=*) debuglevel="$optval"
1311 ;;
1312 --enable-*=*|--disable-*=*)
1313 eval $(echo "$opt" | sed 's/=/-/;s/--/action=/;s/-/ thing=/;s/-/ name=/')
1314 case "$thing" in
1315 encoder|decoder|hwaccel|muxer|demuxer|parser|bsf|protocol|filter) $action ${optval}_${thing} ;;
1316 *) die_unknown "$opt" ;;
1317 esac
1318 ;;
1319 --enable-?*|--disable-?*)
1320 eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
1321 if is_in $option $COMPONENT_LIST; then
1322 eval $action \$$(toupper ${option%s})_LIST
1323 elif is_in $option $CMDLINE_SELECT; then
1324 $action $option
1325 else
1326 die_unknown $opt
1327 fi
1328 ;;
1329 --list-*)
1330 NAME="${opt#--list-}"
1331 is_in $NAME $COMPONENT_LIST || die_unknown $opt
1332 NAME=${NAME%s}
1333 eval show_list $NAME \$$(toupper $NAME)_LIST
1334 ;;
1335 --help|-h) show_help
1336 ;;
1337 *)
1338 optname="${opt%%=*}"
1339 optname="${optname#--}"
1340 optname=$(echo "$optname" | sed 's/-/_/g')
1341 is_in $optname $CMDLINE_SET || die_unknown $opt
1342 eval $optname='$optval'
1343 ;;
1344 esac
1345 done
1346
1347 disabled logging && logfile=/dev/null
1348
1349 echo "# $0 $FFMPEG_CONFIGURATION" > $logfile
1350 set >> $logfile
1351
1352 test -n "$cross_prefix" && enable cross_compile
1353
1354 ar="${cross_prefix}${ar}"
1355 cc_default="${cross_prefix}${cc_default}"
1356 nm_default="${cross_prefix}${nm_default}"
1357 ranlib="${cross_prefix}${ranlib}"
1358 strip="${cross_prefix}${strip}"
1359
1360 sysinclude_default="${sysroot}/usr/include"
1361
1362 set_default cc nm sysinclude
1363 as_default=$cc
1364 enabled cross_compile || host_cc_default=$cc
1365 set_default host_cc
1366
1367 exesuf() {
1368 case $1 in
1369 mingw32*|cygwin*|*-dos|freedos|opendos|os/2*) echo .exe ;;
1370 esac
1371 }
1372
1373 EXESUF=$(exesuf $target_os)
1374 HOSTEXESUF=$(exesuf $host_os)
1375
1376 # set temporary file name
1377 : ${TMPDIR:=$TEMPDIR}
1378 : ${TMPDIR:=$TMP}
1379 : ${TMPDIR:=/tmp}
1380
1381 if ! check_cmd type mktemp; then
1382 # simple replacement for missing mktemp
1383 # NOT SAFE FOR GENERAL USE
1384 mktemp(){
1385 echo "${2%XXX*}.${HOSTNAME}.${UID}.$$"
1386 }
1387 fi
1388
1389 tmpfile(){
1390 tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
1391 (set -C; exec > $tmp) 2>/dev/null ||
1392 die "Unable to create temoporary file in $TMPDIR."
1393 append TMPFILES $tmp
1394 eval $1=$tmp
1395 }
1396
1397 trap 'rm -f -- $TMPFILES' EXIT
1398 trap exit HUP INT TERM
1399
1400 tmpfile TMPC .c
1401 tmpfile TMPE $EXESUF
1402 tmpfile TMPH .h
1403 tmpfile TMPO .o
1404 tmpfile TMPS .S
1405 tmpfile TMPSH .sh
1406
1407 unset -f mktemp
1408
1409 # make sure we can execute files in $TMPDIR
1410 cat > $TMPSH 2>> $logfile <<EOF
1411 #! /bin/sh
1412 EOF
1413 chmod +x $TMPSH >> $logfile 2>&1
1414 if ! $TMPSH >> $logfile 2>&1; then
1415 cat <<EOF
1416 Unable to create and execute files in $TMPDIR. Set the TMPDIR environment
1417 variable to another directory and make sure that it is not mounted noexec.
1418 EOF
1419 die "Sanity test failed."
1420 fi
1421
1422 if $cc --version 2>/dev/null | grep -qi gcc; then
1423 cc_type=gcc
1424 elif $cc --version 2>/dev/null | grep -q Intel; then
1425 cc_type=icc
1426 elif $cc -v 2>&1 | grep -q xlc; then
1427 cc_type=xlc
1428 elif $cc -V 2>/dev/null | grep -q Compaq; then
1429 cc_type=ccc
1430 DEPEND_CMD='$(CC) $(CFLAGS) -M $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o,"'
1431 debuglevel=3
1432 add_ldflags -Wl,-z,now # calls to libots crash without this
1433 elif $cc --vsn 2>/dev/null | grep -q RVCT; then
1434 test -d "$sysroot" || die "No valid sysroot specified."
1435 cc_type=armcc
1436 armcc_conf="$PWD/armcc.conf"
1437 $cc --arm_linux_configure \
1438 --arm_linux_config_file="$armcc_conf" \
1439 --configure_sysroot="$sysroot" \
1440 --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
1441 die "Error creating armcc configuration file."
1442 cc="$cc --arm_linux_config_file=$armcc_conf --translate_gcc"
1443 as_default="${cross_prefix}gcc"
1444 fi
1445
1446 test -n "$cc_type" && enable $cc_type || echolog "Unknown C compiler $cc"
1447
1448 set_default as
1449
1450 if test -n "$sysroot"; then
1451 case "$cc_type" in
1452 gcc)
1453 add_cflags --sysroot="$sysroot"
1454 add_ldflags --sysroot="$sysroot"
1455 ;;
1456 esac
1457 fi
1458
1459 # compiler sanity check
1460 check_exec <<EOF
1461 int main(void){ return 0; }
1462 EOF
1463 if test "$?" != 0; then
1464 echo "$cc is unable to create an executable file."
1465 if test -z "$cross_prefix" && ! enabled cross_compile ; then
1466 echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
1467 echo "Only do this if you know what cross compiling means."
1468 fi
1469 die "C compiler test failed."
1470 fi
1471
1472 check_cflags -std=c99
1473 check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cflags -D_FILE_OFFSET_BITS=64
1474 #include <stdlib.h>
1475 EOF
1476 check_cc -D_LARGEFILE_SOURCE <<EOF && add_cflags -D_LARGEFILE_SOURCE
1477 #include <stdlib.h>
1478 EOF
1479
1480 case "$arch" in
1481 alpha)
1482 arch="alpha"
1483 enable fast_64bit
1484 check_cflags -mieee
1485 ;;
1486 arm|armv[4567]*l)
1487 arch="arm"
1488 ;;
1489 avr32)
1490 ;;
1491 bfin)
1492 arch="bfin"
1493 ;;
1494 ia64)
1495 arch="ia64"
1496 enable fast_64bit
1497 ;;
1498 m68k)
1499 arch="m68k"
1500 ;;
1501 mips|mipsel|IP*)
1502 arch="mips"
1503 ;;
1504 mips64)
1505 arch="mips"
1506 subarch="mips64"
1507 enable fast_64bit
1508 ;;
1509 parisc|hppa)
1510 arch="parisc"
1511 ;;
1512 parisc64|hppa64)
1513 arch="parisc"
1514 enable fast_64bit
1515 ;;
1516 "Power Macintosh"|ppc|powerpc)
1517 arch="ppc"
1518 enable fast_unaligned
1519 ;;
1520 ppc64)
1521 arch="ppc"
1522 subarch="ppc64"
1523 enable fast_64bit
1524 enable fast_unaligned
1525 ;;
1526 s390|s390x)
1527 arch="s390"
1528 ;;
1529 sh4|sh)
1530 arch="sh4"
1531 ;;
1532 sparc)
1533 arch="sparc"
1534 ;;
1535 sun4u|sparc64)
1536 arch="sparc"
1537 subarch="sparc64"
1538 enable fast_64bit
1539 ;;
1540 i386|i486|i586|i686|i86pc|BePC)
1541 arch="x86"
1542 subarch="x86_32"
1543 enable fast_unaligned
1544 ;;
1545 x86_64|amd64)
1546 arch="x86"
1547 subarch="x86_32"
1548 enable cmov
1549 enable fast_cmov
1550 enable fast_unaligned
1551 check_cc <<EOF && enable fast_64bit && subarch="x86_64"
1552 int test[sizeof(char*) - 7];
1553 EOF
1554 ;;
1555 *)
1556 arch="unknown"
1557 ;;
1558 esac
1559
1560 enable $arch $subarch
1561
1562 # OS specific
1563 case $target_os in
1564 beos|haiku|zeta)
1565 prefix_default="$HOME/config"
1566 # helps building libavcodec
1567 add_cflags -DPIC -fomit-frame-pointer
1568 # 3 gcc releases known for BeOS, each with ugly bugs
1569 gcc_version="$($cc -v 2>&1 | grep version | cut -d ' ' -f3-)"
1570 case "$gcc_version" in
1571 2.9-beos-991026*|2.9-beos-000224*) echo "R5/GG gcc"
1572 disable mmx
1573 ;;
1574 *20010315*) echo "BeBits gcc"
1575 add_cflags -fno-expensive-optimizations
1576 ;;
1577 esac
1578 SHFLAGS=-nostart
1579 # enable BeOS things
1580 enable audio_beos
1581 # no need for libm, but the inet stuff
1582 # Check for BONE
1583 # XXX: actually should check for NOT net_server
1584 if echo $BEINCLUDES | grep -q 'headers/be/bone'; then
1585 network_extralibs="-lbind -lsocket"
1586 else
1587 enable beos_netserver
1588 network_extralibs="-lnet"
1589 fi ;;
1590 sunos)
1591 FFSERVERLDFLAGS=""
1592 SHFLAGS='-shared -Wl,-h,$$(@F)'
1593 network_extralibs="-lsocket -lnsl"
1594 add_cflags -D__EXTENSIONS__
1595 ;;
1596 netbsd)
1597 oss_demuxer_extralibs="-lossaudio"
1598 oss_muxer_extralibs="-lossaudio"
1599 ;;
1600 openbsd)
1601 disable need_memalign
1602 LIBOBJFLAGS='$(PIC)'
1603 SHFLAGS='-shared'
1604 oss_demuxer_extralibs="-lossaudio"
1605 oss_muxer_extralibs="-lossaudio"
1606 ;;
1607 freebsd)
1608 disable need_memalign
1609 ;;
1610 bsd/os)
1611 osextralibs="-lpoll -lgnugetopt"
1612 strip="strip -d"
1613 ;;
1614 darwin)
1615 disable need_memalign
1616 SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR) -Wl,-read_only_relocs,suppress'
1617 strip="strip -x"
1618 FFLDFLAGS="-Wl,-dynamic,-search_paths_first"
1619 SLIBSUF=".dylib"
1620 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
1621 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
1622 FFSERVERLDFLAGS=-Wl,-bind_at_load
1623 objformat="macho"
1624 enabled x86_64 && objformat="macho64"
1625 ;;
1626 mingw32*)
1627 target_os=mingw32
1628 LIBTARGET=i386
1629 if enabled x86_64; then
1630 disable need_memalign
1631 LIBTARGET=x64
1632 fi
1633 shlibdir_default="$bindir_default"
1634 disable ffserver
1635 SLIBPREF=""
1636 SLIBSUF=".dll"
1637 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1638 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1639 SLIB_EXTRA_CMD='-lib.exe /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)'
1640 SLIB_INSTALL_EXTRA_CMD='-install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"; \
1641 install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)"'
1642 SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"'
1643 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'
1644 objformat="win32"
1645 enable dos_paths
1646 check_cflags -fno-common
1647 if ! enabled x86_64; then
1648 check_cpp_condition _mingw.h "(__MINGW32_MAJOR_VERSION > 3) || (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
1649 die "ERROR: MinGW runtime version must be >= 3.15."
1650 enabled_any avisynth vfwcap_demuxer &&
1651 { check_cpp_condition w32api.h "(__W32API_MAJOR_VERSION > 3) || (__W32API_MAJOR_VERSION == 3 && __W32API_MINOR_VERSION >= 13)" ||
1652 die "ERROR: avisynth and vfwcap_demuxer require w32api version 3.13 or later."; }
1653 fi
1654 ;;
1655 cygwin*)
1656 target_os=cygwin
1657 shlibdir_default="$bindir_default"
1658 SLIBPREF="cyg"
1659 SLIBSUF=".dll"
1660 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1661 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1662 SHFLAGS='-shared -Wl,--enable-auto-image-base'
1663 objformat="win32"
1664 enable dos_paths
1665 check_cflags -fno-common
1666 ;;
1667 *-dos|freedos|opendos)
1668 disable ffplay ffserver
1669 disable $INDEV_LIST $OUTDEV_LIST
1670 network_extralibs="-lsocket"
1671 objformat="coff"
1672 enable dos_paths
1673 ;;
1674 linux)
1675 enable dv1394
1676 ;;
1677 irix*)
1678 target_os=irix
1679 ranlib="echo ignoring ranlib"
1680 ;;
1681 os/2*)
1682 strip="lxlite"
1683 ln_s="cp -f"
1684 FFLDFLAGS="-Zomf -Zbin-files -Zargs-wild -Zmap"
1685 SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
1686 FFSERVERLDFLAGS=""
1687 LIBSUF="_s.a"
1688 SLIBPREF=""
1689 SLIBSUF=".dll"
1690 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
1691 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
1692 SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
1693 echo PROTMODE >> $(SUBDIR)$(NAME).def; \
1694 echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
1695 echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
1696 echo EXPORTS >> $(SUBDIR)$(NAME).def; \
1697 emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
1698 SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
1699 emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
1700 SLIB_INSTALL_EXTRA_CMD='install -m 644 $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib "$(LIBDIR)"'
1701 SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.a "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.lib'
1702 enable dos_paths
1703 ;;
1704 gnu/kfreebsd)
1705 ;;
1706 gnu)
1707 ;;
1708
1709 *)
1710 die "Unknown OS '$target_os'."
1711 ;;
1712 esac
1713
1714 set_default $PATHS_LIST
1715
1716 add_extralibs $osextralibs
1717
1718 # Combine FFLDFLAGS and the LDFLAGS environment variable.
1719 LDFLAGS="$FFLDFLAGS $LDFLAGS"
1720
1721 # we need to build at least one lib type
1722 if ! enabled_any static shared; then
1723 cat <<EOF
1724 At least one library type must be built.
1725 Specify --enable-static to build the static libraries or --enable-shared to
1726 build the shared libraries as well. To only build the shared libraries specify
1727 --disable-static in addition to --enable-shared.
1728 EOF
1729 exit 1;
1730 fi
1731
1732 disabled static && LIBNAME=""
1733
1734 if enabled_any libfaad libfaadbin ; then
1735 if check_header faad.h; then
1736 check_cc <<EOF
1737 #include <faad.h>
1738 #ifndef FAAD2_VERSION
1739 ok faad1
1740 #endif
1741 int main(void) { return 0; }
1742 EOF
1743 test $? = 0 && enable libfaad2
1744 else
1745 die "FAAD test failed."
1746 fi
1747 fi
1748
1749
1750 die_license_disabled() {
1751 enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
1752 }
1753
1754 die_license_disabled gpl libfaad2
1755 die_license_disabled gpl libx264
1756 die_license_disabled gpl libxvid
1757 die_license_disabled gpl postproc
1758 die_license_disabled gpl x11grab
1759
1760 die_license_disabled nonfree libamr_nb
1761 die_license_disabled nonfree libamr_wb
1762 die_license_disabled nonfree libfaac
1763
1764 enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
1765
1766 check_deps $ARCH_EXT_LIST
1767
1768 test -z "$need_memalign" && need_memalign="$mmx"
1769
1770 #Darwin CC versions
1771 if test $target_os = darwin; then
1772 if enabled xlc; then
1773 add_cflags -qpdf2 -qlanglvl=extc99 -qmaxmem=-1 -qarch=auto -qtune=auto
1774 else
1775 add_cflags -pipe
1776 check_cflags -force_cpusubtype_ALL
1777 check_cflags -Wno-sign-compare
1778 enabled shared || check_cflags -mdynamic-no-pic
1779 fi
1780 fi
1781
1782 disabled optimizations || check_cflags -fomit-frame-pointer
1783
1784 # Add processor-specific flags
1785 if test $cpu != "generic"; then
1786 warn_altivec(){
1787 $1 altivec && echo "WARNING: Tuning for $2 but AltiVec $1.";
1788 }
1789 case $cpu in
1790 601|ppc601|PowerPC601)
1791 add_cflags -mcpu=601
1792 warn_altivec enabled PPC601
1793 ;;
1794 603*|ppc603*|PowerPC603*)
1795 add_cflags -mcpu=603
1796 warn_altivec enabled PPC603
1797 ;;
1798 604*|ppc604*|PowerPC604*)
1799 add_cflags -mcpu=604
1800 warn_altivec enabled PPC604
1801 ;;
1802 G3|g3|75*|ppc75*|PowerPC75*)
1803 add_cflags -mcpu=750 -mpowerpc-gfxopt
1804 warn_altivec enabled PPC75x
1805 ;;
1806 G4|g4|745*|ppc745*|PowerPC745*)
1807 add_cflags -mcpu=7450 -mpowerpc-gfxopt
1808 warn_altivec disabled PPC745x
1809 ;;
1810 74*|ppc74*|PowerPC74*)
1811 add_cflags -mcpu=7400 -mpowerpc-gfxopt
1812 warn_altivec disabled PPC74xx
1813 ;;
1814 G5|g5|970|ppc970|PowerPC970|power4*|Power4*)
1815 add_cflags -mcpu=970 -mpowerpc-gfxopt -mpowerpc64
1816 warn_altivec disabled PPC970
1817 ;;
1818 Cell|CELL|cell)
1819 add_cflags -mcpu=cell
1820 warn_altivec disabled Cell
1821 enable ldbrx
1822 ;;
1823 # targets that do NOT support conditional mov (cmov)
1824 i[345]86|pentium|pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
1825 add_cflags -march=$cpu
1826 disable cmov
1827 ;;
1828 # targets that do support conditional mov (cmov)
1829 i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2)
1830 add_cflags -march=$cpu
1831 enable cmov
1832 enable fast_cmov
1833 ;;
1834 # targets that do support conditional mov but on which it's slow
1835 pentium4|pentium4m|prescott|nocona)
1836 add_cflags -march=$cpu
1837 enable cmov
1838 disable fast_cmov
1839 ;;
1840 sparc64)
1841 add_cflags -mcpu=v9
1842 ;;
1843 arm11*|cortex*)
1844 add_cflags -mcpu=$cpu
1845 enable fast_unaligned
1846 ;;
1847 armv*)
1848 add_cflags -march=$cpu
1849 ;;
1850 arm*)
1851 add_cflags -mcpu=$cpu
1852 ;;
1853 ev4|ev45|ev5|ev56|pca56|ev6|ev67)
1854 enabled ccc && add_cflags -arch $cpu || add_cflags -mcpu=$cpu
1855 ;;
1856 bf*)
1857 add_cflags -mcpu=$cpu
1858 ;;
1859 mips*|[45]k*|[237]4k*|m4k|r*000|loongson2[ef])
1860 add_cflags -march=$cpu
1861 ;;
1862 *)
1863 echo "WARNING: Unknown CPU \"$cpu\", ignored."
1864 ;;
1865 esac
1866 fi
1867
1868 check_cc <<EOF || die "Symbol mangling check failed."
1869 int ff_extern;
1870 EOF
1871 sym=$($nm -P -g $TMPO | grep ff_extern)
1872 extern_prefix=${sym%%ff_extern*}
1873
1874 check_cc <<EOF && enable inline_asm
1875 void foo(void) { __asm__ volatile ("" ::); }
1876 EOF
1877
1878 if enabled x86; then
1879 # check whether EBP is available on x86
1880 # As 'i' is stored on the stack, this program will crash
1881 # if the base pointer is used to access it because the
1882 # base pointer is cleared in the inline assembly code.
1883 check_exec_crash <<EOF && enable ebp_available
1884 volatile int i=0;
1885 __asm__ volatile (
1886 "xorl %%ebp, %%ebp"
1887 ::: "%ebp");
1888 return i;
1889 EOF
1890
1891 # check wether EBX is available on x86
1892 check_asm ebx_available '"":::"%ebx"'
1893
1894 # check whether more than 10 operands are supported
1895 check_cc <<EOF && enable ten_operands
1896 int main(void) {
1897 int x=0;
1898 __asm__ volatile(
1899 ""
1900 :"+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x)
1901 );
1902 return 0;
1903 }
1904 EOF
1905
1906 # check whether binutils is new enough to compile SSSE3/MMX2
1907 enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
1908 enabled mmx2 && check_asm mmx2 '"pmaxub %mm0, %mm1"'
1909
1910 check_asm bswap '"bswap %%eax" ::: "%eax"'
1911
1912 YASMFLAGS="-f $objformat -DARCH_$(toupper $subarch)"
1913 enabled x86_64 && append YASMFLAGS "-m amd64"
1914 enabled_all x86_64 shared && append YASMFLAGS "-DPIC"
1915 case "$objformat" in
1916 elf) enabled debug && append YASMFLAGS "-g dwarf2" ;;
1917 macho64) append YASMFLAGS "-DPIC -DPREFIX" ;;
1918 *) append YASMFLAGS "-DPREFIX" ;;
1919 esac
1920 disabled yasm || { check_yasm "pabsw xmm0, xmm0" && enable yasm; }
1921 fi
1922
1923 # check for assembler specific support
1924
1925 enabled mips && check_asm loongson '"dmult.g $1, $2, $3"'
1926
1927 enabled ppc && check_asm dcbzl '"dcbzl 0, 1"'
1928 enabled ppc && check_asm ppc4xx '"maclhw r10, r11, r12"'
1929 enabled ppc && check_asm xform_asm '"lwzx 0, %y0" :: "Z"(*(int*)0)'
1930
1931 # check for SIMD availability
1932
1933 # AltiVec flags: The FSF version of GCC differs from the Apple version
1934 if enabled altivec; then
1935 check_cflags -maltivec -mabi=altivec &&
1936 { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
1937 check_cflags -faltivec
1938
1939 # check if our compiler supports Motorola AltiVec C API
1940 check_cc <<EOF || disable altivec
1941 $inc_altivec_h
1942 int main(void) {
1943 vector signed int v1, v2, v3;
1944 v1 = vec_add(v2,v3);
1945 return 0;
1946 }
1947 EOF
1948
1949 # check if our compiler supports braces for vector declarations
1950 check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
1951 $inc_altivec_h
1952 int main (void) { (vector int) {1}; return 0; }
1953 EOF
1954 fi
1955
1956 # We have to check if pld is a nop and disable it.
1957 enabled arm && check_asm pld '"pld [r0]"'
1958 enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
1959 enabled armv6 && check_asm armv6 '"sadd16 r0, r0, r0"'
1960 enabled armv6t2 && check_asm armv6t2 '"movt r0, #0"'
1961 enabled armvfp && check_asm armvfp '"fadds s0, s0, s0"'
1962 enabled iwmmxt && check_asm iwmmxt '"wunpckelub wr6, wr4"'
1963 enabled mmi && check_asm mmi '"lq $2, 0($2)"'
1964 enabled neon && check_asm neon '"vadd.i16 q0, q0, q0"'
1965 enabled vis && check_asm vis '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc
1966
1967 enabled vis && add_cflags -mcpu=ultrasparc -mtune=ultrasparc
1968
1969 # ---
1970 # big/little-endian test
1971 check_cc <<EOF || die "endian test failed"
1972 unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
1973 EOF
1974 od -A n -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
1975
1976 # ---
1977 # check availability of some header files
1978
1979 if check_func dlopen; then
1980 ldl=
1981 elif check_func dlopen -ldl; then
1982 ldl=-ldl
1983 fi
1984
1985 # Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
1986 check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
1987
1988 check_func fork
1989 check_func gethrtime
1990 check_func getrusage
1991 check_func inet_aton $network_extralibs
1992 check_func memalign
1993 check_func mkstemp
1994 check_func posix_memalign
1995 check_func_headers io.h setmode
1996 check_func_headers lzo/lzo1x.h lzo1x_999_compress
1997 check_func_headers windows.h GetProcessTimes
1998 check_func_headers windows.h VirtualAlloc
1999
2000 check_header conio.h
2001 check_header dlfcn.h
2002 check_header malloc.h
2003 check_header poll.h
2004 check_header sys/mman.h
2005 check_header sys/resource.h
2006 check_header sys/select.h
2007 check_header termios.h
2008 check_header vdpau/vdpau.h
2009 check_header vdpau/vdpau_x11.h
2010 check_header X11/extensions/XvMClib.h
2011
2012 if ! enabled_any memalign memalign_hack posix_memalign && enabled need_memalign ; then
2013 die "Error, no aligned memory allocator but SSE enabled, disable it or use --enable-memalign-hack."
2014 fi
2015
2016 disabled zlib || check_lib zlib.h zlibVersion -lz || disable zlib
2017 disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
2018
2019 # check for some common methods of building with pthread support
2020 # do this before the optional library checks as some of them require pthreads
2021 if enabled pthreads; then
2022 if check_func pthread_create; then
2023 :
2024 elif check_func pthread_create -pthread; then
2025 add_cflags -pthread
2026 add_extralibs -pthread
2027 elif check_func pthread_create -pthreads; then
2028 add_cflags -pthreads
2029 add_extralibs -pthreads
2030 elif check_func pthread_create -lpthreadGC2; then
2031 add_extralibs -lpthreadGC2
2032 elif ! check_lib pthread.h pthread_create -lpthread; then
2033 die "ERROR: can't find pthreads library"
2034 fi
2035 fi
2036
2037 for thread in $THREADS_LIST; do
2038 if enabled $thread; then
2039 test -n "$thread_type" &&
2040 die "ERROR: Only one thread type must be selected." ||
2041 thread_type="$thread"
2042 fi
2043 done
2044
2045 check_lib math.h sin -lm
2046 check_lib va/va.h vaInitialize -lva
2047
2048 # test for C99 functions in math.h
2049 for func in llrint lrint lrintf round roundf truncf; do
2050 check_exec <<EOF && enable $func || disable $func
2051 #include <math.h>
2052 int main(void) { return ($func(3.999f) > 0)?0:1; }
2053 EOF
2054 done
2055
2056 # these are off by default, so fail if requested and not available
2057 enabled avisynth && require2 vfw32 "windows.h vfw.h" AVIFileInit -lvfw32
2058 enabled libamr_nb && require libamrnb amrnb/interf_dec.h Decoder_Interface_init -lamrnb -lm
2059 enabled libamr_wb && require libamrwb amrwb/dec_if.h D_IF_init -lamrwb -lm
2060 enabled libdirac && add_cflags $(pkg-config --cflags dirac) &&
2061 require libdirac libdirac_decoder/dirac_parser.h dirac_decoder_init -ldirac_decoder &&
2062 require libdirac libdirac_encoder/dirac_encoder.h dirac_encoder_init -ldirac_encoder
2063 enabled libfaac && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
2064 enabled libfaad && require2 libfaad faad.h faacDecOpen -lfaad
2065 enabled libgsm && require libgsm gsm.h gsm_create -lgsm
2066 enabled libmp3lame && require libmp3lame lame/lame.h lame_init -lmp3lame -lm
2067 enabled libnut && require libnut libnut.h nut_demuxer_init -lnut
2068 enabled libopenjpeg && require libopenjpeg openjpeg.h opj_version -lopenjpeg
2069 enabled libschroedinger && add_cflags $(pkg-config --cflags schroedinger-1.0) &&
2070 require libschroedinger schroedinger/schro.h schro_init $(pkg-config --libs schroedinger-1.0)
2071 enabled libspeex && require libspeex speex/speex.h speex_decoder_init -lspeex
2072 enabled libtheora && require libtheora theora/theora.h theora_info_init -ltheora -logg
2073 enabled libvorbis && require libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
2074 enabled libx264 && require libx264 x264.h x264_encoder_open -lx264 -lm &&
2075 { check_cpp_condition x264.h "X264_BUILD >= 65" ||
2076 die "ERROR: libx264 version must be >= 0.65."; }
2077 enabled libxvid && require libxvid xvid.h xvid_global -lxvidcore
2078 enabled mlib && require mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
2079
2080 # libdc1394 check
2081 if enabled libdc1394; then
2082 { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
2083 enable libdc1394_2; } ||
2084 { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
2085 enable libdc1394_1; } ||
2086 die "ERROR: No version of libdc1394 found "
2087 fi
2088
2089
2090 _restrict=
2091 for restrict_keyword in restrict __restrict__ __restrict; do
2092 check_cc <<EOF && _restrict=$restrict_keyword && break
2093 void foo(char * $restrict_keyword p);
2094 EOF
2095 done
2096
2097 ##########################################
2098 # SDL check
2099
2100 disable sdl_too_old
2101 disable sdl
2102 SDL_CONFIG="${cross_prefix}sdl-config"
2103 if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
2104 sdl_cflags=$("${SDL_CONFIG}" --cflags)
2105 temp_cflags $sdl_cflags
2106 temp_extralibs $("${SDL_CONFIG}" --libs)
2107 if check_lib2 SDL.h SDL_Init; then
2108 _sdlversion=$("${SDL_CONFIG}" --version | sed 's/[^0-9]//g')
2109 if test "$_sdlversion" -lt 121 ; then
2110 enable sdl_too_old
2111 else
2112 enable sdl
2113 check_cc $sdl_cflags <<EOF && enable sdl_video_size
2114 #include <SDL.h>
2115 int main(int argc, char **argv){
2116 const SDL_VideoInfo *vi = SDL_GetVideoInfo();
2117 int w = vi->current_w;
2118 return 0;
2119 }
2120 EOF
2121 fi
2122 fi
2123 restore_flags
2124 fi
2125
2126 texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
2127
2128 ##########################################
2129 # Network check
2130
2131 if enabled network; then
2132 check_type "sys/types.h sys/socket.h" socklen_t
2133 # Prefer arpa/inet.h over winsock2
2134 if check_header arpa/inet.h ; then
2135 check_func closesocket
2136 elif check_header winsock2.h ; then
2137 network_extralibs="-lws2_32"
2138 check_type ws2tcpip.h socklen_t
2139 check_func_headers winsock2.h closesocket
2140 fi
2141 fi
2142
2143 ##########################################
2144 # IPv6 check
2145
2146 enabled network && enabled ipv6 && check_ld <<EOF && enable ipv6 || disable ipv6
2147 #include <sys/types.h>
2148 #include <sys/socket.h>
2149 #include <netinet/in.h>
2150 #include <netdb.h>
2151 int main(void) {
2152 struct sockaddr_storage saddr;
2153 struct ipv6_mreq mreq6;
2154 getaddrinfo(0,0,0,0);
2155 getnameinfo(0,0,0,0,0,0,0);
2156 IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
2157 }
2158 EOF
2159
2160 check_header linux/videodev.h
2161 check_header linux/videodev2.h
2162 check_header sys/videoio.h
2163
2164 check_func_headers "windows.h vfw.h" capCreateCaptureWindow -lvfw32
2165
2166 # check for ioctl_meteor.h, ioctl_bt848.h and alternatives
2167 { check_header dev/bktr/ioctl_meteor.h &&
2168 check_header dev/bktr/ioctl_bt848.h; } ||
2169 { check_header machine/ioctl_meteor.h &&
2170 check_header machine/ioctl_bt848.h; } ||
2171 { check_header dev/video/meteor/ioctl_meteor.h &&
2172 check_header dev/video/bktr/ioctl_bt848.h; } ||
2173 check_header dev/ic/bt8xx.h
2174
2175 check_header sys/soundcard.h
2176 check_header soundcard.h
2177
2178 check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
2179
2180 check_lib2 jack/jack.h jack_client_open -ljack
2181
2182 # deal with the X11 frame grabber
2183 enabled x11grab &&
2184 check_header X11/Xlib.h &&
2185 check_header X11/extensions/XShm.h &&
2186 check_func XOpenDisplay -lX11 &&
2187 check_func XShmCreateImage -lX11 -lXext
2188
2189 enabled debug && add_cflags -g"$debuglevel"
2190
2191 # add some useful compiler flags if supported
2192 check_cflags -Wdeclaration-after-statement
2193 check_cflags -Wall
2194 check_cflags -Wno-switch
2195 check_cflags -Wdisabled-optimization
2196 check_cflags -Wpointer-arith
2197 check_cflags -Wredundant-decls
2198 check_cflags -Wno-pointer-sign
2199 check_cflags -Wcast-qual
2200 check_cflags -Wwrite-strings
2201 check_cflags -Wtype-limits
2202 check_cflags -Wundef
2203 enabled extra_warnings && check_cflags -Winline
2204
2205 # add some linker flags
2206 check_ldflags -Wl,--warn-common
2207 check_ldflags -Wl,--as-needed
2208 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'
2209 check_ldflags -Wl,-Bsymbolic
2210
2211 if enabled small; then
2212 check_cflags -Os # not all compilers support -Os
2213 optimizations="small"
2214 elif enabled optimizations; then
2215 if enabled xlc; then
2216 add_cflags -O5
2217 add_ldflags -O5
2218 elif enabled ccc; then
2219 add_cflags -fast
2220 else
2221 add_cflags -O3
2222 fi
2223 fi
2224 check_cflags -fno-math-errno
2225 check_cflags -fno-signed-zeros
2226
2227 # add some flags for Intel C Compiler
2228 if enabled icc; then
2229 # Just warnings, no remarks
2230 check_cflags -w1
2231 # -wd: Disable following warnings
2232 # 144, 167, 556: -Wno-pointer-sign
2233 # 10006: ignoring unknown option -fno-signed-zeros
2234 # 10156: ignoring option '-W'; no argument required
2235 check_cflags -wd144,167,556,10006,10156
2236 # 11030: Warning unknown option --as-needed
2237 # 10156: ignoring option '-export'; no argument required
2238 check_ldflags -wd10156,11030
2239 # Allow to compile with optimizations
2240 check_ldflags -march=$cpu
2241 # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
2242 enable ebp_available
2243 elif enabled ccc; then
2244 # disable some annoying warnings
2245 add_cflags -msg_disable cvtu32to64
2246 add_cflags -msg_disable embedcomment
2247 add_cflags -msg_disable needconstext
2248 add_cflags -msg_disable nomainieee
2249 add_cflags -msg_disable ptrmismatch1
2250 add_cflags -msg_disable unreachcode
2251 fi
2252
2253 # PIC flags for shared library objects where they are needed
2254 if enabled shared; then
2255 # LIBOBJFLAGS may have already been set in the OS configuration
2256 if test -z "$LIBOBJFLAGS" ; then
2257 case "${subarch-$arch}" in
2258 x86_64|ia64|alpha|sparc*|power*|parisc*|mips*) LIBOBJFLAGS='$(PIC)' ;;
2259 esac
2260 fi
2261 fi
2262
2263 if enabled gprof; then
2264 add_cflags -p
2265 add_ldflags -p
2266 fi
2267
2268 # Find out if the .align argument is a power of two or not.
2269 check_asm asmalign_pot '".align 3"'
2270
2271 enabled_any $DECODER_LIST && enable decoders
2272 enabled_any $ENCODER_LIST && enable encoders
2273 enabled_any $HWACCEL_LIST && enable hwaccels
2274 enabled_any $BSF_LIST && enable bsfs
2275 enabled_any $DEMUXER_LIST && enable demuxers
2276 enabled_any $MUXER_LIST && enable muxers
2277 enabled_any $FILTER_LIST && enable filters
2278 enabled_any $INDEV_LIST && enable demuxers
2279 enabled_any $OUTDEV_LIST && enable muxers
2280 enabled_any $PROTOCOL_LIST && enable protocols
2281
2282 enabled_any $THREADS_LIST && enable threads
2283
2284 check_deps $CONFIG_LIST \
2285 $CONFIG_EXTRA \
2286 $HAVE_LIST \
2287 $DECODER_LIST \
2288 $ENCODER_LIST \
2289 $HWACCEL_LIST \
2290 $PARSER_LIST \
2291 $BSF_LIST \
2292 $DEMUXER_LIST \
2293 $MUXER_LIST \
2294 $FILTER_LIST \
2295 $INDEV_LIST \
2296 $OUTDEV_LIST \
2297 $PROTOCOL_LIST \
2298
2299 echo "install prefix $prefix"
2300 echo "source path $source_path"
2301 echo "C compiler $cc"
2302 echo ".align is power-of-two $asmalign_pot"
2303 echo "ARCH $arch ($cpu)"
2304 if test "$build_suffix" != ""; then
2305 echo "build suffix $build_suffix"
2306 fi
2307 if test "$extra_version" != ""; then
2308 echo "version string suffix $extra_version"
2309 fi
2310 echo "big-endian ${bigendian-no}"
2311 echo "runtime cpu detection ${runtime_cpudetect-no}"
2312 if enabled x86; then
2313 echo "yasm ${yasm-no}"
2314 echo "MMX enabled ${mmx-no}"
2315 echo "MMX2 enabled ${mmx2-no}"
2316 echo "3DNow! enabled ${amd3dnow-no}"
2317 echo "3DNow! extended enabled ${amd3dnowext-no}"
2318 echo "SSE enabled ${sse-no}"
2319 echo "SSSE3 enabled ${ssse3-no}"
2320 echo "CMOV enabled ${cmov-no}"
2321 echo "CMOV is fast ${fast_cmov-no}"
2322 echo "EBX available ${ebx_available-no}"
2323 echo "EBP available ${ebp_available-no}"
2324 echo "10 operands supported ${ten_operands-no}"
2325 fi
2326 if enabled arm; then
2327 echo "ARMv5TE enabled ${armv5te-no}"
2328 echo "ARMv6 enabled ${armv6-no}"
2329 echo "ARMv6T2 enabled ${armv6t2-no}"
2330 echo "ARM VFP enabled ${armvfp-no}"
2331 echo "IWMMXT enabled ${iwmmxt-no}"
2332 echo "NEON enabled ${neon-no}"
2333 fi
2334 if enabled mips; then
2335 echo "MMI enabled ${mmi-no}"
2336 fi
2337 if enabled ppc; then
2338 echo "AltiVec enabled ${altivec-no}"
2339 echo "PPC 4xx optimizations ${ppc4xx-no}"
2340 echo "dcbzl available ${dcbzl-no}"
2341 echo "performance report ${powerpc_perf-no}"
2342 fi
2343 if enabled sparc; then
2344 echo "VIS enabled ${vis-no}"
2345 fi
2346 echo "gprof enabled ${gprof-no}"
2347 echo "debug symbols ${debug-no}"
2348 echo "strip symbols ${stripping-no}"
2349 echo "optimizations ${optimizations-no}"
2350 echo "static ${static-no}"
2351 echo "shared ${shared-no}"
2352 echo "postprocessing support ${postproc-no}"
2353 echo "new filter support ${avfilter-no}"
2354 echo "filters using lavformat ${avfilter_lavf-no}"
2355 echo "network support ${network-no}"
2356 if enabled network; then
2357 echo "IPv6 support ${ipv6-no}"
2358 fi
2359 echo "threading support ${thread_type-no}"
2360 echo "SDL support ${sdl-no}"
2361 if enabled sdl_too_old; then
2362 echo "-> Your SDL version is too old - please upgrade to have FFplay/SDL support."
2363 fi
2364 echo "Sun medialib support ${mlib-no}"
2365 echo "AVISynth enabled ${avisynth-no}"
2366 echo "libamr-nb support ${libamr_nb-no}"
2367 echo "libamr-wb support ${libamr_wb-no}"
2368 echo "libdc1394 support ${libdc1394-no}"
2369 echo "libdirac enabled ${libdirac-no}"
2370 echo "libfaac enabled ${libfaac-no}"
2371 echo "libfaad enabled ${libfaad-no}"
2372 echo "libfaad dlopened ${libfaadbin-no}"
2373 echo "libgsm enabled ${libgsm-no}"
2374 echo "libmp3lame enabled ${libmp3lame-no}"
2375 echo "libnut enabled ${libnut-no}"
2376 echo "libopenjpeg enabled ${libopenjpeg-no}"
2377 echo "libschroedinger enabled ${libschroedinger-no}"
2378 echo "libspeex enabled ${libspeex-no}"
2379 echo "libtheora enabled ${libtheora-no}"
2380 echo "libvorbis enabled ${libvorbis-no}"
2381 echo "libx264 enabled ${libx264-no}"
2382 echo "libxvid enabled ${libxvid-no}"
2383 echo "zlib enabled ${zlib-no}"
2384 echo "bzlib enabled ${bzlib-no}"
2385 echo
2386
2387 for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
2388 echo "Enabled ${type}s:"
2389 eval list=\$$(toupper $type)_LIST
2390 for part in $list; do
2391 enabled $part && echo ${part%_*}
2392 done | sort | pr -3 -t
2393 echo
2394 done
2395
2396 license="LGPL version 2.1 or later"
2397 if enabled nonfree; then
2398 license="nonfree and unredistributable"
2399 elif enabled gplv3; then
2400 license="GPL version 3 or later"
2401 elif enabled lgplv3; then
2402 license="LGPL version 3 or later"
2403 elif enabled gpl; then
2404 license="GPL version 2 or later"
2405 fi
2406
2407 echo "License: $license"
2408
2409 echo "Creating config.mak and config.h..."
2410
2411 echo "# Automatically generated by configure - do not modify!" > config.mak
2412 echo "/* Automatically generated by configure - do not modify! */" > $TMPH
2413 echo "#ifndef FFMPEG_CONFIG_H" >> $TMPH
2414 echo "#define FFMPEG_CONFIG_H" >> $TMPH
2415 echo "#define FFMPEG_CONFIGURATION \"$FFMPEG_CONFIGURATION\"" >> $TMPH
2416 echo "#define FFMPEG_DATADIR \"$(eval c_escape $datadir)\"" >> $TMPH
2417
2418 echo "FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION" >> config.mak
2419 echo "prefix=$prefix" >> config.mak
2420 echo "LIBDIR=\$(DESTDIR)$libdir" >> config.mak
2421 echo "SHLIBDIR=\$(DESTDIR)$shlibdir" >> config.mak
2422 echo "INCDIR=\$(DESTDIR)$incdir" >> config.mak
2423 echo "BINDIR=\$(DESTDIR)$bindir" >> config.mak
2424 echo "DATADIR=\$(DESTDIR)$datadir" >> config.mak
2425 echo "MANDIR=\$(DESTDIR)$mandir" >> config.mak
2426 echo "SRC_PATH=\"$source_path\"" >> config.mak
2427 echo "SRC_PATH_BARE=$source_path" >> config.mak
2428 echo "BUILD_ROOT=\"$PWD\"" >> config.mak
2429 echo "CC=$cc" >> config.mak
2430 echo "AS=$as" >> config.mak
2431 echo "YASM=$yasmexe" >> config.mak
2432 echo "AR=$ar" >> config.mak
2433 echo "RANLIB=$ranlib" >> config.mak
2434 echo "LN_S=$ln_s" >> config.mak
2435 enabled stripping &&
2436 echo "STRIP=$strip" >> config.mak ||
2437 echo "STRIP=echo ignoring strip" >> config.mak
2438
2439 echo "OPTFLAGS=$CFLAGS" >> config.mak
2440 echo "LDFLAGS=$LDFLAGS" >> config.mak
2441 echo "FFSERVERLDFLAGS=$FFSERVERLDFLAGS" >> config.mak
2442 echo "SHFLAGS=$SHFLAGS" >> config.mak
2443 echo "YASMFLAGS=$YASMFLAGS" >> config.mak
2444 echo "LIBOBJFLAGS=$LIBOBJFLAGS" >> config.mak
2445 echo "BUILD_STATIC=$static" >> config.mak
2446 echo "BUILDSUF=$build_suffix" >> config.mak
2447 echo "FULLNAME=$FULLNAME" >> config.mak
2448 echo "LIBPREF=$LIBPREF" >> config.mak
2449 echo "LIBSUF=$LIBSUF" >> config.mak
2450 echo "LIBNAME=$LIBNAME" >> config.mak
2451 echo "SLIBPREF=$SLIBPREF" >> config.mak
2452 echo "SLIBSUF=$SLIBSUF" >> config.mak
2453 echo "EXESUF=$EXESUF" >> config.mak
2454 echo "EXTRA_VERSION=$extra_version" >> config.mak
2455 echo "DEPEND_CMD=$DEPEND_CMD" >> config.mak
2456 echo "HOSTCC=$host_cc" >> config.mak
2457 echo "HOSTCFLAGS=$host_cflags" >> config.mak
2458 echo "HOSTEXESUF=$HOSTEXESUF" >> config.mak
2459 echo "HOSTLDFLAGS=$host_ldflags" >> config.mak
2460 echo "HOSTLIBS=$host_libs" >> config.mak
2461 echo "TARGET_EXEC=$target_exec" >> config.mak
2462 echo "TARGET_PATH=$target_path" >> config.mak
2463
2464 if enabled bigendian; then
2465 echo "WORDS_BIGENDIAN=yes" >> config.mak
2466 echo "#define WORDS_BIGENDIAN 1" >> $TMPH
2467 fi
2468
2469 if enabled sdl; then
2470 echo "SDL_LIBS=$("${SDL_CONFIG}" --libs)" >> config.mak
2471 echo "SDL_CFLAGS=$("${SDL_CONFIG}" --cflags)" >> config.mak
2472 fi
2473 if enabled texi2html; then
2474 echo "BUILD_DOC=yes" >> config.mak
2475 fi
2476
2477 get_version(){
2478 name=$1
2479 file=$source_path/$2
2480 eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
2481 eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
2482 lcname=$(tolower $name)
2483 eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
2484 eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
2485 }
2486
2487 get_version LIBSWSCALE libswscale/swscale.h
2488 get_version LIBPOSTPROC libpostproc/postprocess.h
2489 get_version LIBAVCODEC libavcodec/avcodec.h
2490 get_version LIBAVDEVICE libavdevice/avdevice.h
2491 get_version LIBAVFORMAT libavformat/avformat.h
2492 get_version LIBAVUTIL libavutil/avutil.h
2493 get_version LIBAVFILTER libavfilter/avfilter.h
2494
2495 if enabled shared; then
2496 echo "BUILD_SHARED=yes" >> config.mak
2497 echo "PIC=-fPIC -DPIC" >> config.mak
2498 echo "LIBTARGET=${LIBTARGET}" >> config.mak
2499 echo "SLIBNAME=${SLIBNAME}" >> config.mak
2500 echo "SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}" >> config.mak
2501 echo "SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}" >> config.mak
2502 echo "SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}" >> config.mak
2503 echo "SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}" >> config.mak
2504 echo "SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}" >> config.mak
2505 echo "SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}" >> config.mak
2506 fi
2507 echo "LIB_INSTALL_EXTRA_CMD=${LIB_INSTALL_EXTRA_CMD}" >> config.mak
2508 echo "EXTRALIBS=$extralibs" >> config.mak
2509
2510 echo "ARCH=$arch" >> config.mak
2511
2512 print_config ARCH_ $TMPH config.mak $ARCH_LIST
2513 print_config HAVE_ $TMPH config.mak $HAVE_LIST
2514 print_config CONFIG_ $TMPH config.mak $CONFIG_LIST \
2515 $CONFIG_EXTRA \
2516 $DECODER_LIST \
2517 $ENCODER_LIST \
2518 $HWACCEL_LIST \
2519 $PARSER_LIST \
2520 $BSF_LIST \
2521 $DEMUXER_LIST \
2522 $MUXER_LIST \
2523 $FILTER_LIST \
2524 $PROTOCOL_LIST \
2525 $INDEV_LIST \
2526 $OUTDEV_LIST \
2527
2528 echo "#define restrict $_restrict" >> $TMPH
2529
2530 if enabled small; then
2531 echo "#define av_always_inline" >> $TMPH
2532 fi
2533
2534
2535 # Apparently it's not possible to portably echo a backslash.
2536 enabled asmalign_pot &&
2537 printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH ||
2538 printf '#define ASMALIGN(ZEROBITS) ".align 1 << " #ZEROBITS "\\n\\t"\n' >> $TMPH
2539
2540 echo "#define EXTERN_PREFIX \"${extern_prefix}\"" >> $TMPH
2541
2542 echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
2543
2544 # Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
2545 cmp -s $TMPH config.h &&
2546 echo "config.h is unchanged" ||
2547 mv -f $TMPH config.h
2548
2549 # build tree in object directory if source path is different from current one
2550 if enabled source_path_used; then
2551 DIRS="\
2552 doc \
2553 libavcodec \
2554 libavcodec/alpha \
2555 libavcodec/arm \
2556 libavcodec/bfin \
2557 libavcodec/mlib \
2558 libavcodec/ppc \
2559 libavcodec/sh4 \
2560 libavcodec/sparc \
2561 libavcodec/x86 \
2562 libavdevice \
2563 libavfilter \
2564 libavformat \
2565 libavutil \
2566 libpostproc \
2567 libswscale \
2568 libswscale/bfin \
2569 libswscale/mlib \
2570 libswscale/ppc \
2571 libswscale/sparc \
2572 libswscale/x86 \
2573 tests \
2574 tools \
2575 "
2576 FILES="\
2577 Makefile \
2578 common.mak \
2579 subdir.mak \
2580 doc/texi2pod.pl \
2581 libavcodec/Makefile \
2582 libavdevice/Makefile \
2583 libavfilter/Makefile \
2584 libavformat/Makefile \
2585 libavutil/Makefile \
2586 libpostproc/Makefile \
2587 libswscale/Makefile \
2588 "
2589 for dir in $DIRS ; do
2590 mkdir -p $dir
2591 done
2592 for f in $FILES ; do
2593 $ln_s "$source_path/$f" $f
2594 done
2595 fi
2596
2597
2598 # build pkg-config files
2599
2600 pkgconfig_generate(){
2601 name=$1
2602 shortname=${name#lib}${build_suffix}
2603 comment=$2
2604 version=$3
2605 libs=$4
2606 requires=$5
2607 cat <<EOF > $name/$name.pc
2608 prefix=$prefix
2609 exec_prefix=\${prefix}
2610 libdir=$libdir
2611 includedir=$incdir
2612
2613 Name: $name
2614 Description: $comment
2615 Version: $version
2616 Requires: $(disabled shared && echo $requires)
2617 Requires.private: $(enabled shared && echo $requires)
2618 Conflicts:
2619 Libs: -L\${libdir} -l${shortname} $(disabled shared && echo $libs)
2620 Libs.private: $(enabled shared && echo $libs)
2621 Cflags: -I\${includedir}
2622 EOF
2623 cat <<EOF > $name/$name-uninstalled.pc
2624 prefix=
2625 exec_prefix=
2626 libdir=\${pcfiledir}
2627 includedir=${source_path}
2628
2629 Name: $name
2630 Description: $comment
2631 Version: $version
2632 Requires: $requires
2633 Conflicts:
2634 Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
2635 Cflags: -I\${includedir}
2636 EOF
2637 }
2638
2639 pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
2640 pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
2641 pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
2642 pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "libavformat = $LIBAVFORMAT_VERSION"
2643 enabled avfilter &&
2644 pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
2645 enabled postproc &&
2646 pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
2647 pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"