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