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