configure: properly quote configure options stored in config.*
[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-indevs disable input devices"
135 echo " --disable-outdevs disable output devices"
136 echo " --disable-devices disable all devices"
137 echo " --enable-filter=NAME enable filter NAME"
138 echo " --disable-filter=NAME disable filter NAME"
139 echo " --disable-filters disable all filters"
140 echo " --list-decoders show all available decoders"
141 echo " --list-encoders show all available encoders"
142 echo " --list-hwaccels show all available hardware accelerators"
143 echo " --list-muxers show all available muxers"
144 echo " --list-demuxers show all available demuxers"
145 echo " --list-parsers show all available parsers"
146 echo " --list-protocols show all available protocols"
147 echo " --list-bsfs show all available bitstream filters"
148 echo " --list-indevs show all available input devices"
149 echo " --list-outdevs show all available output devices"
150 echo " --list-filters show all available filters"
151 echo
152 echo "External library support:"
153 echo " --enable-avisynth enable reading of AVISynth script files [no]"
154 echo " --enable-bzlib enable bzlib [autodetect]"
155 echo " --enable-libamr-nb enable libamr-nb floating point audio codec [no]"
156 echo " --enable-libamr-wb enable libamr-wb floating point audio codec [no]"
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 libamr_nb
796 libamr_wb
797 libdc1394
798 libdirac
799 libfaac
800 libfaad
801 libfaadbin
802 libgsm
803 libmp3lame
804 libnut
805 libopencore_amrnb
806 libopencore_amrwb
807 libopenjpeg
808 libschroedinger
809 libspeex
810 libtheora
811 libvorbis
812 libx264
813 libxvid
814 mdct
815 memalign_hack
816 mlib
817 mpegaudio_hp
818 network
819 nonfree
820 postproc
821 powerpc_perf
822 rdft
823 runtime_cpudetect
824 shared
825 small
826 static
827 swscale_alpha
828 vaapi
829 vdpau
830 version3
831 x11grab
832 zlib
833 "
834
835 THREADS_LIST='
836 beosthreads
837 os2threads
838 pthreads
839 w32threads
840 '
841
842 ARCH_LIST='
843 alpha
844 arm
845 bfin
846 ia64
847 m68k
848 mips
849 mips64
850 parisc
851 ppc
852 ppc64
853 s390
854 sh4
855 sparc
856 sparc64
857 x86
858 x86_32
859 x86_64
860 '
861
862 ARCH_EXT_LIST='
863 altivec
864 amd3dnow
865 amd3dnowext
866 armv5te
867 armv6
868 armv6t2
869 armvfp
870 iwmmxt
871 mmi
872 mmx
873 mmx2
874 neon
875 ppc4xx
876 sse
877 ssse3
878 vis
879 '
880
881 HAVE_LIST="
882 $ARCH_EXT_LIST
883 $THREADS_LIST
884 alsa_asoundlib_h
885 altivec_h
886 arpa_inet_h
887 bigendian
888 bswap
889 closesocket
890 cmov
891 conio_h
892 dcbzl
893 dev_bktr_ioctl_bt848_h
894 dev_bktr_ioctl_meteor_h
895 dev_ic_bt8xx_h
896 dev_video_meteor_ioctl_meteor_h
897 dev_video_bktr_ioctl_bt848_h
898 dlfcn_h
899 dlopen
900 dos_paths
901 ebp_available
902 ebx_available
903 fast_64bit
904 fast_cmov
905 fast_unaligned
906 fork
907 gethrtime
908 GetProcessTimes
909 getrusage
910 inet_aton
911 inline_asm
912 ldbrx
913 libdc1394_1
914 libdc1394_2
915 llrint
916 loongson
917 lrint
918 lrintf
919 lzo1x_999_compress
920 machine_ioctl_bt848_h
921 machine_ioctl_meteor_h
922 malloc_h
923 memalign
924 mkstemp
925 pld
926 posix_memalign
927 round
928 roundf
929 sdl
930 sdl_video_size
931 setmode
932 socklen_t
933 soundcard_h
934 poll_h
935 sys_mman_h
936 sys_resource_h
937 sys_select_h
938 sys_soundcard_h
939 sys_videoio_h
940 ten_operands
941 termios_h
942 threads
943 truncf
944 VirtualAlloc
945 winsock2_h
946 xform_asm
947 yasm
948 "
949
950 # options emitted with CONFIG_ prefix but not available on command line
951 CONFIG_EXTRA="
952 gplv3
953 lgplv3
954 "
955
956 CMDLINE_SELECT="
957 $ARCH_EXT_LIST
958 $CONFIG_LIST
959 $THREADS_LIST
960 cross_compile
961 debug
962 extra_warnings
963 logging
964 optimizations
965 stripping
966 yasm
967 "
968
969 PATHS_LIST='
970 bindir
971 datadir
972 incdir
973 libdir
974 mandir
975 prefix
976 shlibdir
977 '
978
979 CMDLINE_SET="
980 $PATHS_LIST
981 arch
982 as
983 build_suffix
984 cc
985 cpu
986 cross_prefix
987 extra_version
988 host_cc
989 host_cflags
990 host_ldflags
991 host_libs
992 host_os
993 logfile
994 nm
995 source_path
996 sysinclude
997 sysroot
998 target_exec
999 target_os
1000 target_path
1001 "
1002
1003 # code dependency declarations
1004
1005 # architecture extensions
1006 altivec_deps="ppc"
1007 amd3dnow_deps="mmx"
1008 amd3dnowext_deps="amd3dnow"
1009 armv5te_deps="arm"
1010 armv6_deps="arm"
1011 armv6t2_deps="arm"
1012 armvfp_deps="arm"
1013 iwmmxt_deps="arm"
1014 mmi_deps="mips"
1015 mmx_deps="x86"
1016 mmx2_deps="mmx"
1017 neon_deps="arm"
1018 ppc4xx_deps="ppc"
1019 sse_deps="mmx"
1020 ssse3_deps="sse"
1021 vis_deps="sparc"
1022
1023 # decoders / encoders / hardware accelerators
1024 aac_decoder_select="fft mdct"
1025 ac3_decoder_select="fft mdct"
1026 atrac3_decoder_select="fft mdct"
1027 cavs_decoder_select="golomb"
1028 cook_decoder_select="fft mdct"
1029 cscd_decoder_suggest="zlib"
1030 dca_decoder_select="fft mdct"
1031 dnxhd_encoder_select="aandct"
1032 dxa_decoder_select="zlib"
1033 eac3_decoder_select="fft mdct"
1034 eatgq_decoder_select="aandct"
1035 eatqi_decoder_select="aandct"
1036 ffv1_decoder_select="golomb"
1037 flac_decoder_select="golomb"
1038 flac_encoder_select="golomb"
1039 flashsv_decoder_select="zlib"
1040 flashsv_encoder_select="zlib"
1041 flv_encoder_select="aandct"
1042 h261_encoder_select="aandct"
1043 h263_encoder_select="aandct"
1044 h263_vaapi_hwaccel_deps="va_va_h"
1045 h263_vaapi_hwaccel_select="vaapi"
1046 h263p_encoder_select="aandct"
1047 h264_decoder_select="golomb"
1048 h264_vaapi_hwaccel_deps="va_va_h"
1049 h264_vaapi_hwaccel_select="vaapi"
1050 h264_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1051 h264_vdpau_decoder_select="vdpau"
1052 imc_decoder_select="fft mdct"
1053 jpegls_decoder_select="golomb"
1054 jpegls_encoder_select="golomb"
1055 ljpeg_encoder_select="aandct"
1056 loco_decoder_select="golomb"
1057 mjpeg_encoder_select="aandct"
1058 mpeg1video_encoder_select="aandct"
1059 mpeg2video_encoder_select="aandct"
1060 mpeg4_encoder_select="aandct"
1061 mpeg_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1062 mpeg_vdpau_decoder_select="vdpau"
1063 mpeg1_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1064 mpeg1_vdpau_decoder_select="vdpau"
1065 mpeg2_vaapi_hwaccel_deps="va_va_h"
1066 mpeg2_vaapi_hwaccel_select="vaapi"
1067 mpeg4_vaapi_hwaccel_deps="va_va_h"
1068 mpeg4_vaapi_hwaccel_select="vaapi"
1069 mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h"
1070 msmpeg4v1_encoder_select="aandct"
1071 msmpeg4v2_encoder_select="aandct"
1072 msmpeg4v3_encoder_select="aandct"
1073 nellymoser_decoder_select="fft mdct"
1074 nellymoser_encoder_select="fft mdct"
1075 png_decoder_select="zlib"
1076 png_encoder_select="zlib"
1077 qdm2_decoder_select="fft mdct rdft"
1078 rv10_encoder_select="aandct"
1079 rv20_encoder_select="aandct"
1080 rv30_decoder_select="golomb"
1081 rv40_decoder_select="golomb"
1082 shorten_decoder_select="golomb"
1083 sonic_decoder_select="golomb"
1084 sonic_encoder_select="golomb"
1085 sonic_ls_encoder_select="golomb"
1086 svq3_decoder_select="golomb"
1087 svq3_decoder_suggest="zlib"
1088 tiff_decoder_suggest="zlib"
1089 tiff_encoder_suggest="zlib"
1090 tscc_decoder_select="zlib"
1091 vc1_vaapi_hwaccel_deps="va_va_h"
1092 vc1_vaapi_hwaccel_select="vaapi"
1093 vc1_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1094 vc1_vdpau_decoder_select="vdpau"
1095 vorbis_decoder_select="fft mdct"
1096 vorbis_encoder_select="fft mdct"
1097 wmav1_decoder_select="fft mdct"
1098 wmav1_encoder_select="fft mdct"
1099 wmav2_decoder_select="fft mdct"
1100 wmav2_encoder_select="fft mdct"
1101 wmv1_encoder_select="aandct"
1102 wmv2_encoder_select="aandct"
1103 wmv3_vaapi_hwaccel_deps="va_va_h"
1104 wmv3_vaapi_hwaccel_select="vaapi"
1105 wmv3_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1106 wmv3_vdpau_decoder_select="vdpau"
1107 zlib_decoder_select="zlib"
1108 zlib_encoder_select="zlib"
1109 zmbv_decoder_select="zlib"
1110 zmbv_encoder_select="zlib"
1111
1112 # parsers
1113 h264_parser_select="golomb"
1114
1115 # external libraries
1116 libamr_nb_decoder_deps="libamr_nb"
1117 libamr_nb_encoder_deps="libamr_nb"
1118 libamr_wb_decoder_deps="libamr_wb"
1119 libamr_wb_encoder_deps="libamr_wb"
1120 libdirac_decoder_deps="libdirac !libschroedinger"
1121 libdirac_encoder_deps="libdirac"
1122 libfaac_encoder_deps="libfaac"
1123 libfaad_decoder_deps="libfaad"
1124 libfaadbin_decoder_extralibs='$ldl'
1125 libgsm_decoder_deps="libgsm"
1126 libgsm_encoder_deps="libgsm"
1127 libgsm_ms_decoder_deps="libgsm"
1128 libgsm_ms_encoder_deps="libgsm"
1129 libmp3lame_encoder_deps="libmp3lame"
1130 libopencore_amrnb_decoder_deps="libopencore_amrnb"
1131 libopencore_amrnb_encoder_deps="libopencore_amrnb"
1132 libopencore_amrwb_decoder_deps="libopencore_amrwb"
1133 libopenjpeg_decoder_deps="libopenjpeg"
1134 libschroedinger_decoder_deps="libschroedinger"
1135 libschroedinger_encoder_deps="libschroedinger"
1136 libspeex_decoder_deps="libspeex"
1137 libtheora_encoder_deps="libtheora"
1138 libvorbis_encoder_deps="libvorbis"
1139 libx264_encoder_deps="libx264"
1140 libxvid_encoder_deps="libxvid"
1141
1142 # demuxers / muxers
1143 ac3_demuxer_deps="ac3_parser"
1144 alsa_demuxer_deps="alsa_asoundlib_h snd_pcm_htimestamp"
1145 alsa_demuxer_extralibs="-lasound"
1146 alsa_muxer_deps="alsa_asoundlib_h"
1147 alsa_muxer_extralibs="-lasound"
1148 audio_beos_demuxer_deps="audio_beos"
1149 audio_beos_demuxer_extralibs="-lmedia -lbe"
1150 audio_beos_muxer_deps="audio_beos"
1151 audio_beos_muxer_extralibs="-lmedia -lbe"
1152 avisynth_demuxer_deps="avisynth"
1153 bktr_demuxer_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
1154 dirac_demuxer_deps="dirac_parser"
1155 dv1394_demuxer_deps="dv1394 dv_demuxer"
1156 jack_demuxer_deps="jack_jack_h"
1157 jack_demuxer_extralibs="-ljack"
1158 libdc1394_demuxer_deps="libdc1394"
1159 libnut_demuxer_deps="libnut"
1160 libnut_muxer_deps="libnut"
1161 matroska_demuxer_suggest="zlib bzlib"
1162 mov_demuxer_suggest="zlib"
1163 mp3_demuxer_deps="mpegaudio_parser"
1164 oss_demuxer_deps_any="soundcard_h sys_soundcard_h"
1165 oss_muxer_deps_any="soundcard_h sys_soundcard_h"
1166 redir_demuxer_deps="network"
1167 rtp_muxer_deps="network rtp_protocol"
1168 rtsp_demuxer_deps="sdp_demuxer"
1169 sdp_demuxer_deps="rtp_protocol mpegts_demuxer"
1170 v4l_demuxer_deps="linux_videodev_h"
1171 v4l2_demuxer_deps_any="linux_videodev2_h sys_videoio_h"
1172 vfwcap_demuxer_deps="capCreateCaptureWindow"
1173 vfwcap_demuxer_extralibs="-lvfw32"
1174 x11_grab_device_demuxer_deps="x11grab XShmCreateImage"
1175 x11_grab_device_demuxer_extralibs="-lX11 -lXext"
1176
1177 # protocols
1178 gopher_protocol_deps="network"
1179 http_protocol_deps="network"
1180 rtp_protocol_deps="udp_protocol"
1181 tcp_protocol_deps="network"
1182 udp_protocol_deps="network"
1183
1184 # filters
1185 movie_filter_deps="avfilter_lavf"
1186
1187 # programs
1188 ffplay_deps="sdl"
1189 ffserver_deps="ffm_muxer rtp_protocol rtsp_demuxer"
1190 ffserver_extralibs='$ldl'
1191
1192
1193 # default parameters
1194
1195 logfile="config.err"
1196
1197 # installation paths
1198 prefix_default="/usr/local"
1199 bindir_default='${prefix}/bin'
1200 datadir_default='${prefix}/share/ffmpeg'
1201 incdir_default='${prefix}/include'
1202 libdir_default='${prefix}/lib'
1203 mandir_default='${prefix}/share/man'
1204 shlibdir_default="$libdir_default"
1205
1206 # toolchain
1207 ar="ar"
1208 cc_default="gcc"
1209 host_cc_default="gcc"
1210 ln_s="ln -sf"
1211 nm_default="nm"
1212 objformat="elf"
1213 ranlib="ranlib"
1214 strip="strip"
1215 yasmexe="yasm"
1216
1217 # machine
1218 arch=$(uname -m)
1219 cpu="generic"
1220
1221 # OS
1222 target_os=$(tolower $(uname -s))
1223 host_os=$target_os
1224
1225 # configurable options
1226 enable debug
1227 enable fastdiv
1228 enable ffmpeg
1229 enable ffplay
1230 enable ffserver
1231 enable ipv6
1232 enable mpegaudio_hp
1233 enable network
1234 enable optimizations
1235 enable protocols
1236 enable static
1237 enable stripping
1238 enable swscale_alpha
1239
1240 # build settings
1241 add_cflags -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112
1242 SHFLAGS='-shared -Wl,-soname,$$(@F)'
1243 FFSERVERLDFLAGS=-Wl,-E
1244 LIBPREF="lib"
1245 LIBSUF=".a"
1246 FULLNAME='$(NAME)$(BUILDSUF)'
1247 LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
1248 SLIBPREF="lib"
1249 SLIBSUF=".so"
1250 SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
1251 SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
1252 SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
1253 LIB_INSTALL_EXTRA_CMD='$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
1254
1255 host_cflags='-O3 -g -Wall'
1256 host_libs='-lm'
1257
1258 target_path='.'
1259
1260 # gcc stupidly only outputs the basename of targets with -MM, but we need the
1261 # full relative path for objects in subdirectories for non-recursive Make.
1262 DEPEND_CMD='$(CC) $(CFLAGS) -MM $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o,"'
1263
1264 # find source path
1265 source_path="$(dirname "$0")"
1266 enable source_path_used
1267 if test -z "$source_path" -o "$source_path" = "." ; then
1268 source_path="$(pwd)"
1269 disable source_path_used
1270 else
1271 source_path="$(cd "$source_path"; pwd)"
1272 echo "$source_path" | grep -q '[[:blank:]]' &&
1273 die "Out of tree builds are impossible with whitespace in source path."
1274 test -e "$source_path/config.h" &&
1275 die "Out of tree builds are impossible with config.h in source dir."
1276 fi
1277
1278 for v in "$@"; do
1279 r=${v#*=}
1280 l=${v%"$r"}
1281 r=$(sh_quote "$r")
1282 FFMPEG_CONFIGURATION="${FFMPEG_CONFIGURATION# } ${l}${r}"
1283 done
1284
1285 find_things(){
1286 thing=$1
1287 pattern=$2
1288 file=$source_path/$3
1289 sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
1290 }
1291
1292 ENCODER_LIST=$(find_things encoder ENC libavcodec/allcodecs.c)
1293 DECODER_LIST=$(find_things decoder DEC libavcodec/allcodecs.c)
1294 HWACCEL_LIST=$(find_things hwaccel HWACCEL libavcodec/allcodecs.c)
1295 PARSER_LIST=$(find_things parser PARSER libavcodec/allcodecs.c)
1296 BSF_LIST=$(find_things bsf BSF libavcodec/allcodecs.c)
1297 MUXER_LIST=$(find_things muxer _MUX libavformat/allformats.c)
1298 DEMUXER_LIST=$(find_things demuxer DEMUX libavformat/allformats.c)
1299 OUTDEV_LIST=$(find_things muxer _MUX libavdevice/alldevices.c)
1300 INDEV_LIST=$(find_things demuxer DEMUX libavdevice/alldevices.c)
1301 PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
1302 FILTER_LIST=$(find_things filter FILTER libavfilter/allfilters.c)
1303
1304 enable $ARCH_EXT_LIST \
1305 $DECODER_LIST \
1306 $ENCODER_LIST \
1307 $HWACCEL_LIST \
1308 $PARSER_LIST \
1309 $BSF_LIST \
1310 $DEMUXER_LIST \
1311 $MUXER_LIST \
1312 $FILTER_LIST \
1313 $PROTOCOL_LIST \
1314 $INDEV_LIST \
1315 $OUTDEV_LIST \
1316
1317 die_unknown(){
1318 echo "Unknown option \"$1\"."
1319 echo "See $0 --help for available options."
1320 exit 1
1321 }
1322
1323 show_list() {
1324 suffix=_$1
1325 shift
1326 echo $* | sed s/$suffix//g | tr ' ' '\n' | sort
1327 exit 0
1328 }
1329
1330 for opt do
1331 optval="${opt#*=}"
1332 case "$opt" in
1333 --extra-cflags=*) add_cflags $optval
1334 ;;
1335 --extra-ldflags=*) add_ldflags $optval
1336 ;;
1337 --extra-libs=*) add_extralibs $optval
1338 ;;
1339 --disable-devices) disable $INDEV_LIST $OUTDEV_LIST
1340 ;;
1341 --enable-debug=*) debuglevel="$optval"
1342 ;;
1343 --enable-*=*|--disable-*=*)
1344 eval $(echo "$opt" | sed 's/=/-/;s/--/action=/;s/-/ thing=/;s/-/ name=/')
1345 case "$thing" in
1346 encoder|decoder|hwaccel|muxer|demuxer|parser|bsf|protocol|filter) $action ${optval}_${thing} ;;
1347 *) die_unknown "$opt" ;;
1348 esac
1349 ;;
1350 --enable-?*|--disable-?*)
1351 eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
1352 if is_in $option $COMPONENT_LIST; then
1353 eval $action \$$(toupper ${option%s})_LIST
1354 elif is_in $option $CMDLINE_SELECT; then
1355 $action $option
1356 else
1357 die_unknown $opt
1358 fi
1359 ;;
1360 --list-*)
1361 NAME="${opt#--list-}"
1362 is_in $NAME $COMPONENT_LIST || die_unknown $opt
1363 NAME=${NAME%s}
1364 eval show_list $NAME \$$(toupper $NAME)_LIST
1365 ;;
1366 --help|-h) show_help
1367 ;;
1368 *)
1369 optname="${opt%%=*}"
1370 optname="${optname#--}"
1371 optname=$(echo "$optname" | sed 's/-/_/g')
1372 is_in $optname $CMDLINE_SET || die_unknown $opt
1373 eval $optname='$optval'
1374 ;;
1375 esac
1376 done
1377
1378 disabled logging && logfile=/dev/null
1379
1380 echo "# $0 $FFMPEG_CONFIGURATION" > $logfile
1381 set >> $logfile
1382
1383 test -n "$cross_prefix" && enable cross_compile
1384
1385 ar="${cross_prefix}${ar}"
1386 cc_default="${cross_prefix}${cc_default}"
1387 nm_default="${cross_prefix}${nm_default}"
1388 ranlib="${cross_prefix}${ranlib}"
1389 strip="${cross_prefix}${strip}"
1390
1391 sysinclude_default="${sysroot}/usr/include"
1392
1393 set_default cc nm sysinclude
1394 as_default=$cc
1395 enabled cross_compile || host_cc_default=$cc
1396 set_default host_cc
1397
1398 exesuf() {
1399 case $1 in
1400 mingw32*|cygwin*|*-dos|freedos|opendos|os/2*) echo .exe ;;
1401 esac
1402 }
1403
1404 EXESUF=$(exesuf $target_os)
1405 HOSTEXESUF=$(exesuf $host_os)
1406
1407 # set temporary file name
1408 : ${TMPDIR:=$TEMPDIR}
1409 : ${TMPDIR:=$TMP}
1410 : ${TMPDIR:=/tmp}
1411
1412 if ! check_cmd type mktemp; then
1413 # simple replacement for missing mktemp
1414 # NOT SAFE FOR GENERAL USE
1415 mktemp(){
1416 echo "${2%XXX*}.${HOSTNAME}.${UID}.$$"
1417 }
1418 fi
1419
1420 tmpfile(){
1421 tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
1422 (set -C; exec > $tmp) 2>/dev/null ||
1423 die "Unable to create temoporary file in $TMPDIR."
1424 append TMPFILES $tmp
1425 eval $1=$tmp
1426 }
1427
1428 trap 'rm -f -- $TMPFILES' EXIT
1429 trap exit HUP INT TERM
1430
1431 tmpfile TMPC .c
1432 tmpfile TMPE $EXESUF
1433 tmpfile TMPH .h
1434 tmpfile TMPO .o
1435 tmpfile TMPS .S
1436 tmpfile TMPSH .sh
1437
1438 unset -f mktemp
1439
1440 # make sure we can execute files in $TMPDIR
1441 cat > $TMPSH 2>> $logfile <<EOF
1442 #! /bin/sh
1443 EOF
1444 chmod +x $TMPSH >> $logfile 2>&1
1445 if ! $TMPSH >> $logfile 2>&1; then
1446 cat <<EOF
1447 Unable to create and execute files in $TMPDIR. Set the TMPDIR environment
1448 variable to another directory and make sure that it is not mounted noexec.
1449 EOF
1450 die "Sanity test failed."
1451 fi
1452
1453 if $cc --version 2>/dev/null | grep -qi gcc; then
1454 cc_type=gcc
1455 elif $cc --version 2>/dev/null | grep -q Intel; then
1456 cc_type=icc
1457 elif $cc -v 2>&1 | grep -q xlc; then
1458 cc_type=xlc
1459 elif $cc -V 2>/dev/null | grep -q Compaq; then
1460 cc_type=ccc
1461 DEPEND_CMD='$(CC) $(CFLAGS) -M $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o,"'
1462 debuglevel=3
1463 add_ldflags -Wl,-z,now # calls to libots crash without this
1464 elif $cc --vsn 2>/dev/null | grep -q RVCT; then
1465 test -d "$sysroot" || die "No valid sysroot specified."
1466 cc_type=armcc
1467 armcc_conf="$PWD/armcc.conf"
1468 $cc --arm_linux_configure \
1469 --arm_linux_config_file="$armcc_conf" \
1470 --configure_sysroot="$sysroot" \
1471 --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
1472 die "Error creating armcc configuration file."
1473 cc="$cc --arm_linux_config_file=$armcc_conf --translate_gcc"
1474 as_default="${cross_prefix}gcc"
1475 fi
1476
1477 test -n "$cc_type" && enable $cc_type || echolog "Unknown C compiler $cc"
1478
1479 set_default as
1480
1481 if test -n "$sysroot"; then
1482 case "$cc_type" in
1483 gcc)
1484 add_cflags --sysroot="$sysroot"
1485 add_ldflags --sysroot="$sysroot"
1486 ;;
1487 esac
1488 fi
1489
1490 # compiler sanity check
1491 check_exec <<EOF
1492 int main(void){ return 0; }
1493 EOF
1494 if test "$?" != 0; then
1495 echo "$cc is unable to create an executable file."
1496 if test -z "$cross_prefix" && ! enabled cross_compile ; then
1497 echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
1498 echo "Only do this if you know what cross compiling means."
1499 fi
1500 die "C compiler test failed."
1501 fi
1502
1503 check_cflags -std=c99
1504 check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cflags -D_FILE_OFFSET_BITS=64
1505 #include <stdlib.h>
1506 EOF
1507 check_cc -D_LARGEFILE_SOURCE <<EOF && add_cflags -D_LARGEFILE_SOURCE
1508 #include <stdlib.h>
1509 EOF
1510
1511 case "$arch" in
1512 alpha)
1513 arch="alpha"
1514 enable fast_64bit
1515 check_cflags -mieee
1516 ;;
1517 arm|armv[4567]*l)
1518 arch="arm"
1519 ;;
1520 avr32)
1521 ;;
1522 bfin)
1523 arch="bfin"
1524 ;;
1525 ia64)
1526 arch="ia64"
1527 enable fast_64bit
1528 ;;
1529 m68k)
1530 arch="m68k"
1531 ;;
1532 mips|mipsel|IP*)
1533 arch="mips"
1534 ;;
1535 mips64)
1536 arch="mips"
1537 subarch="mips64"
1538 enable fast_64bit
1539 ;;
1540 parisc|hppa)
1541 arch="parisc"
1542 ;;
1543 parisc64|hppa64)
1544 arch="parisc"
1545 enable fast_64bit
1546 ;;
1547 "Power Macintosh"|ppc|powerpc)
1548 arch="ppc"
1549 enable fast_unaligned
1550 ;;
1551 ppc64)
1552 arch="ppc"
1553 subarch="ppc64"
1554 enable fast_64bit
1555 enable fast_unaligned
1556 ;;
1557 s390|s390x)
1558 arch="s390"
1559 ;;
1560 sh4|sh)
1561 arch="sh4"
1562 ;;
1563 sparc)
1564 arch="sparc"
1565 ;;
1566 sun4u|sparc64)
1567 arch="sparc"
1568 subarch="sparc64"
1569 enable fast_64bit
1570 ;;
1571 i386|i486|i586|i686|i86pc|BePC)
1572 arch="x86"
1573 subarch="x86_32"
1574 enable fast_unaligned
1575 ;;
1576 x86_64|amd64)
1577 arch="x86"
1578 subarch="x86_32"
1579 enable cmov
1580 enable fast_cmov
1581 enable fast_unaligned
1582 check_cc <<EOF && enable fast_64bit && subarch="x86_64"
1583 int test[sizeof(char*) - 7];
1584 EOF
1585 ;;
1586 *)
1587 arch="unknown"
1588 ;;
1589 esac
1590
1591 enable $arch $subarch
1592
1593 # OS specific
1594 case $target_os in
1595 beos|haiku|zeta)
1596 prefix_default="$HOME/config"
1597 # helps building libavcodec
1598 add_cflags -DPIC -fomit-frame-pointer
1599 # 3 gcc releases known for BeOS, each with ugly bugs
1600 gcc_version="$($cc -v 2>&1 | grep version | cut -d ' ' -f3-)"
1601 case "$gcc_version" in
1602 2.9-beos-991026*|2.9-beos-000224*) echo "R5/GG gcc"
1603 disable mmx
1604 ;;
1605 *20010315*) echo "BeBits gcc"
1606 add_cflags -fno-expensive-optimizations
1607 ;;
1608 esac
1609 SHFLAGS=-nostart
1610 # enable BeOS things
1611 enable audio_beos
1612 # no need for libm, but the inet stuff
1613 # Check for BONE
1614 # XXX: actually should check for NOT net_server
1615 if echo $BEINCLUDES | grep -q 'headers/be/bone'; then
1616 network_extralibs="-lbind -lsocket"
1617 else
1618 enable beos_netserver
1619 network_extralibs="-lnet"
1620 fi ;;
1621 sunos)
1622 FFSERVERLDFLAGS=""
1623 SHFLAGS='-shared -Wl,-h,$$(@F)'
1624 network_extralibs="-lsocket -lnsl"
1625 add_cflags -D__EXTENSIONS__
1626 ;;
1627 netbsd)
1628 oss_demuxer_extralibs="-lossaudio"
1629 oss_muxer_extralibs="-lossaudio"
1630 ;;
1631 openbsd)
1632 disable need_memalign
1633 LIBOBJFLAGS='$(PIC)'
1634 SHFLAGS='-shared'
1635 oss_demuxer_extralibs="-lossaudio"
1636 oss_muxer_extralibs="-lossaudio"
1637 ;;
1638 freebsd|dragonfly)
1639 disable need_memalign
1640 ;;
1641 bsd/os)
1642 osextralibs="-lpoll -lgnugetopt"
1643 strip="strip -d"
1644 ;;
1645 darwin)
1646 disable need_memalign
1647 SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR) -Wl,-read_only_relocs,suppress'
1648 strip="strip -x"
1649 FFLDFLAGS="-Wl,-dynamic,-search_paths_first"
1650 SLIBSUF=".dylib"
1651 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
1652 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
1653 FFSERVERLDFLAGS=-Wl,-bind_at_load
1654 objformat="macho"
1655 enabled x86_64 && objformat="macho64"
1656 ;;
1657 mingw32*)
1658 target_os=mingw32
1659 LIBTARGET=i386
1660 if enabled x86_64; then
1661 disable need_memalign
1662 LIBTARGET=x64
1663 fi
1664 shlibdir_default="$bindir_default"
1665 disable ffserver
1666 SLIBPREF=""
1667 SLIBSUF=".dll"
1668 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1669 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1670 SLIB_EXTRA_CMD='-lib.exe /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)'
1671 SLIB_INSTALL_EXTRA_CMD='-install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"; \
1672 install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)"'
1673 SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"'
1674 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'
1675 objformat="win32"
1676 enable dos_paths
1677 check_cflags -fno-common
1678 if ! enabled x86_64; then
1679 check_cpp_condition _mingw.h "(__MINGW32_MAJOR_VERSION > 3) || (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
1680 die "ERROR: MinGW runtime version must be >= 3.15."
1681 enabled_any avisynth vfwcap_demuxer &&
1682 { check_cpp_condition w32api.h "(__W32API_MAJOR_VERSION > 3) || (__W32API_MAJOR_VERSION == 3 && __W32API_MINOR_VERSION >= 13)" ||
1683 die "ERROR: avisynth and vfwcap_demuxer require w32api version 3.13 or later."; }
1684 fi
1685 ;;
1686 cygwin*)
1687 target_os=cygwin
1688 shlibdir_default="$bindir_default"
1689 SLIBPREF="cyg"
1690 SLIBSUF=".dll"
1691 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1692 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1693 SHFLAGS='-shared -Wl,--enable-auto-image-base'
1694 objformat="win32"
1695 enable dos_paths
1696 check_cflags -fno-common
1697 ;;
1698 *-dos|freedos|opendos)
1699 disable ffplay ffserver
1700 disable $INDEV_LIST $OUTDEV_LIST
1701 network_extralibs="-lsocket"
1702 objformat="coff"
1703 enable dos_paths
1704 ;;
1705 linux)
1706 enable dv1394
1707 ;;
1708 irix*)
1709 target_os=irix
1710 ranlib="echo ignoring ranlib"
1711 ;;
1712 os/2*)
1713 strip="lxlite"
1714 ln_s="cp -f"
1715 FFLDFLAGS="-Zomf -Zbin-files -Zargs-wild -Zmap"
1716 SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
1717 FFSERVERLDFLAGS=""
1718 LIBSUF="_s.a"
1719 SLIBPREF=""
1720 SLIBSUF=".dll"
1721 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
1722 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
1723 SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
1724 echo PROTMODE >> $(SUBDIR)$(NAME).def; \
1725 echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
1726 echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
1727 echo EXPORTS >> $(SUBDIR)$(NAME).def; \
1728 emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
1729 SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
1730 emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
1731 SLIB_INSTALL_EXTRA_CMD='install -m 644 $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib "$(LIBDIR)"'
1732 SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.a "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.lib'
1733 enable dos_paths
1734 ;;
1735 gnu/kfreebsd)
1736 ;;
1737 gnu)
1738 ;;
1739
1740 *)
1741 die "Unknown OS '$target_os'."
1742 ;;
1743 esac
1744
1745 set_default $PATHS_LIST
1746
1747 add_extralibs $osextralibs
1748
1749 # Combine FFLDFLAGS and the LDFLAGS environment variable.
1750 LDFLAGS="$FFLDFLAGS $LDFLAGS"
1751
1752 # we need to build at least one lib type
1753 if ! enabled_any static shared; then
1754 cat <<EOF
1755 At least one library type must be built.
1756 Specify --enable-static to build the static libraries or --enable-shared to
1757 build the shared libraries as well. To only build the shared libraries specify
1758 --disable-static in addition to --enable-shared.
1759 EOF
1760 exit 1;
1761 fi
1762
1763 disabled static && LIBNAME=""
1764
1765 if enabled_any libfaad libfaadbin ; then
1766 if check_header faad.h; then
1767 check_cc <<EOF
1768 #include <faad.h>
1769 #ifndef FAAD2_VERSION
1770 ok faad1
1771 #endif
1772 int main(void) { return 0; }
1773 EOF
1774 test $? = 0 && enable libfaad2
1775 else
1776 die "FAAD test failed."
1777 fi
1778 fi
1779
1780
1781 die_license_disabled() {
1782 enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
1783 }
1784
1785 die_license_disabled gpl libfaad2
1786 die_license_disabled gpl libx264
1787 die_license_disabled gpl libxvid
1788 die_license_disabled gpl postproc
1789 die_license_disabled gpl x11grab
1790
1791 die_license_disabled nonfree libamr_nb
1792 die_license_disabled nonfree libamr_wb
1793 die_license_disabled nonfree libfaac
1794
1795 die_license_disabled version3 libopencore_amrnb
1796 die_license_disabled version3 libopencore_amrwb
1797
1798 enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
1799
1800 check_deps $ARCH_EXT_LIST
1801
1802 test -z "$need_memalign" && need_memalign="$mmx"
1803
1804 #Darwin CC versions
1805 if test $target_os = darwin; then
1806 if enabled xlc; then
1807 add_cflags -qpdf2 -qlanglvl=extc99 -qmaxmem=-1 -qarch=auto -qtune=auto
1808 else
1809 add_cflags -pipe
1810 check_cflags -force_cpusubtype_ALL
1811 check_cflags -Wno-sign-compare
1812 enabled shared || check_cflags -mdynamic-no-pic
1813 fi
1814 fi
1815
1816 disabled optimizations || check_cflags -fomit-frame-pointer
1817
1818 # Add processor-specific flags
1819 if test $cpu != "generic"; then
1820 warn_altivec(){
1821 $1 altivec && echo "WARNING: Tuning for $2 but AltiVec $1.";
1822 }
1823 case $cpu in
1824 601|ppc601|PowerPC601)
1825 add_cflags -mcpu=601
1826 warn_altivec enabled PPC601
1827 ;;
1828 603*|ppc603*|PowerPC603*)
1829 add_cflags -mcpu=603
1830 warn_altivec enabled PPC603
1831 ;;
1832 604*|ppc604*|PowerPC604*)
1833 add_cflags -mcpu=604
1834 warn_altivec enabled PPC604
1835 ;;
1836 G3|g3|75*|ppc75*|PowerPC75*)
1837 add_cflags -mcpu=750 -mpowerpc-gfxopt
1838 warn_altivec enabled PPC75x
1839 ;;
1840 G4|g4|745*|ppc745*|PowerPC745*)
1841 add_cflags -mcpu=7450 -mpowerpc-gfxopt
1842 warn_altivec disabled PPC745x
1843 ;;
1844 74*|ppc74*|PowerPC74*)
1845 add_cflags -mcpu=7400 -mpowerpc-gfxopt
1846 warn_altivec disabled PPC74xx
1847 ;;
1848 G5|g5|970|ppc970|PowerPC970|power4*|Power4*)
1849 add_cflags -mcpu=970 -mpowerpc-gfxopt -mpowerpc64
1850 warn_altivec disabled PPC970
1851 ;;
1852 Cell|CELL|cell)
1853 add_cflags -mcpu=cell
1854 warn_altivec disabled Cell
1855 enable ldbrx
1856 ;;
1857 # targets that do NOT support conditional mov (cmov)
1858 i[345]86|pentium|pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
1859 add_cflags -march=$cpu
1860 disable cmov
1861 ;;
1862 # targets that do support conditional mov (cmov)
1863 i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2)
1864 add_cflags -march=$cpu
1865 enable cmov
1866 enable fast_cmov
1867 ;;
1868 # targets that do support conditional mov but on which it's slow
1869 pentium4|pentium4m|prescott|nocona)
1870 add_cflags -march=$cpu
1871 enable cmov
1872 disable fast_cmov
1873 ;;
1874 sparc64)
1875 add_cflags -mcpu=v9
1876 ;;
1877 arm11*|cortex*)
1878 add_cflags -mcpu=$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 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 libamr_nb && require libamrnb amrnb/interf_dec.h Decoder_Interface_init -lamrnb -lm
2093 enabled libamr_wb && require libamrwb amrwb/dec_if.h D_IF_init -lamrwb -lm
2094 enabled libdirac && add_cflags $(pkg-config --cflags dirac) &&
2095 require libdirac libdirac_decoder/dirac_parser.h dirac_decoder_init -ldirac_decoder &&
2096 require libdirac libdirac_encoder/dirac_encoder.h dirac_encoder_init -ldirac_encoder
2097 enabled libfaac && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
2098 enabled libfaad && require2 libfaad faad.h faacDecOpen -lfaad
2099 enabled libgsm && require libgsm gsm.h gsm_create -lgsm
2100 enabled libmp3lame && require libmp3lame lame/lame.h lame_init -lmp3lame -lm
2101 enabled libnut && require libnut libnut.h nut_demuxer_init -lnut
2102 enabled libopencore_amrnb && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb -lm
2103 enabled libopencore_amrwb && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb -lm
2104 enabled libopenjpeg && require libopenjpeg openjpeg.h opj_version -lopenjpeg
2105 enabled libschroedinger && add_cflags $(pkg-config --cflags schroedinger-1.0) &&
2106 require libschroedinger schroedinger/schro.h schro_init $(pkg-config --libs schroedinger-1.0)
2107 enabled libspeex && require libspeex speex/speex.h speex_decoder_init -lspeex
2108 enabled libtheora && require libtheora theora/theora.h theora_info_init -ltheora -logg
2109 enabled libvorbis && require libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
2110 enabled libx264 && require libx264 x264.h x264_encoder_open -lx264 -lm &&
2111 { check_cpp_condition x264.h "X264_BUILD >= 65" ||
2112 die "ERROR: libx264 version must be >= 0.65."; }
2113 enabled libxvid && require libxvid xvid.h xvid_global -lxvidcore
2114 enabled mlib && require mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
2115
2116 # libdc1394 check
2117 if enabled libdc1394; then
2118 { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
2119 enable libdc1394_2; } ||
2120 { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
2121 enable libdc1394_1; } ||
2122 die "ERROR: No version of libdc1394 found "
2123 fi
2124
2125
2126 _restrict=
2127 for restrict_keyword in restrict __restrict__ __restrict; do
2128 check_cc <<EOF && _restrict=$restrict_keyword && break
2129 void foo(char * $restrict_keyword p);
2130 EOF
2131 done
2132
2133 ##########################################
2134 # SDL check
2135
2136 disable sdl_too_old
2137 disable sdl
2138 SDL_CONFIG="${cross_prefix}sdl-config"
2139 if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
2140 sdl_cflags=$("${SDL_CONFIG}" --cflags)
2141 temp_cflags $sdl_cflags
2142 temp_extralibs $("${SDL_CONFIG}" --libs)
2143 if check_lib2 SDL.h SDL_Init; then
2144 _sdlversion=$("${SDL_CONFIG}" --version | sed 's/[^0-9]//g')
2145 if test "$_sdlversion" -lt 121 ; then
2146 enable sdl_too_old
2147 else
2148 enable sdl
2149 check_cc $sdl_cflags <<EOF && enable sdl_video_size
2150 #include <SDL.h>
2151 int main(int argc, char **argv){
2152 const SDL_VideoInfo *vi = SDL_GetVideoInfo();
2153 int w = vi->current_w;
2154 return 0;
2155 }
2156 EOF
2157 fi
2158 fi
2159 restore_flags
2160 fi
2161
2162 texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
2163
2164 ##########################################
2165 # Network check
2166
2167 if enabled network; then
2168 check_type "sys/types.h sys/socket.h" socklen_t
2169 # Prefer arpa/inet.h over winsock2
2170 if check_header arpa/inet.h ; then
2171 check_func closesocket
2172 elif check_header winsock2.h ; then
2173 network_extralibs="-lws2_32"
2174 check_type ws2tcpip.h socklen_t
2175 check_func_headers winsock2.h closesocket
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 check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
2215
2216 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 "libamr-nb support ${libamr_nb-no}"
2403 echo "libamr-wb support ${libamr_wb-no}"
2404 echo "libdc1394 support ${libdc1394-no}"
2405 echo "libdirac enabled ${libdirac-no}"
2406 echo "libfaac enabled ${libfaac-no}"
2407 echo "libfaad enabled ${libfaad-no}"
2408 echo "libfaad dlopened ${libfaadbin-no}"
2409 echo "libgsm enabled ${libgsm-no}"
2410 echo "libmp3lame enabled ${libmp3lame-no}"
2411 echo "libnut enabled ${libnut-no}"
2412 echo "libopencore-amrnb support ${libopencore_amrnb-no}"
2413 echo "libopencore-amrwb support ${libopencore_amrwb-no}"
2414 echo "libopenjpeg enabled ${libopenjpeg-no}"
2415 echo "libschroedinger enabled ${libschroedinger-no}"
2416 echo "libspeex enabled ${libspeex-no}"
2417 echo "libtheora enabled ${libtheora-no}"
2418 echo "libvorbis enabled ${libvorbis-no}"
2419 echo "libx264 enabled ${libx264-no}"
2420 echo "libxvid enabled ${libxvid-no}"
2421 echo "zlib enabled ${zlib-no}"
2422 echo "bzlib enabled ${bzlib-no}"
2423 echo
2424
2425 for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
2426 echo "Enabled ${type}s:"
2427 eval list=\$$(toupper $type)_LIST
2428 for part in $list; do
2429 enabled $part && echo ${part%_*}
2430 done | sort | pr -3 -t
2431 echo
2432 done
2433
2434 license="LGPL version 2.1 or later"
2435 if enabled nonfree; then
2436 license="nonfree and unredistributable"
2437 elif enabled gplv3; then
2438 license="GPL version 3 or later"
2439 elif enabled lgplv3; then
2440 license="LGPL version 3 or later"
2441 elif enabled gpl; then
2442 license="GPL version 2 or later"
2443 fi
2444
2445 echo "License: $license"
2446
2447 echo "Creating config.mak and config.h..."
2448
2449 echo "# Automatically generated by configure - do not modify!" > config.mak
2450 echo "/* Automatically generated by configure - do not modify! */" > $TMPH
2451 echo "#ifndef FFMPEG_CONFIG_H" >> $TMPH
2452 echo "#define FFMPEG_CONFIG_H" >> $TMPH
2453 echo "#define FFMPEG_CONFIGURATION \"$(c_escape $FFMPEG_CONFIGURATION)\"" >> $TMPH
2454 echo "#define FFMPEG_DATADIR \"$(eval c_escape $datadir)\"" >> $TMPH
2455
2456 echo "FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION" >> config.mak
2457 echo "prefix=$prefix" >> config.mak
2458 echo "LIBDIR=\$(DESTDIR)$libdir" >> config.mak
2459 echo "SHLIBDIR=\$(DESTDIR)$shlibdir" >> config.mak
2460 echo "INCDIR=\$(DESTDIR)$incdir" >> config.mak
2461 echo "BINDIR=\$(DESTDIR)$bindir" >> config.mak
2462 echo "DATADIR=\$(DESTDIR)$datadir" >> config.mak
2463 echo "MANDIR=\$(DESTDIR)$mandir" >> config.mak
2464 echo "SRC_PATH=\"$source_path\"" >> config.mak
2465 echo "SRC_PATH_BARE=$source_path" >> config.mak
2466 echo "BUILD_ROOT=\"$PWD\"" >> config.mak
2467 echo "CC=$cc" >> config.mak
2468 echo "AS=$as" >> config.mak
2469 echo "YASM=$yasmexe" >> config.mak
2470 echo "AR=$ar" >> config.mak
2471 echo "RANLIB=$ranlib" >> config.mak
2472 echo "LN_S=$ln_s" >> config.mak
2473 enabled stripping &&
2474 echo "STRIP=$strip" >> config.mak ||
2475 echo "STRIP=echo ignoring strip" >> config.mak
2476
2477 echo "OPTFLAGS=$CFLAGS" >> config.mak
2478 echo "LDFLAGS=$LDFLAGS" >> config.mak
2479 echo "FFSERVERLDFLAGS=$FFSERVERLDFLAGS" >> config.mak
2480 echo "SHFLAGS=$SHFLAGS" >> config.mak
2481 echo "YASMFLAGS=$YASMFLAGS" >> config.mak
2482 echo "LIBOBJFLAGS=$LIBOBJFLAGS" >> config.mak
2483 echo "BUILD_STATIC=$static" >> config.mak
2484 echo "BUILDSUF=$build_suffix" >> config.mak
2485 echo "FULLNAME=$FULLNAME" >> config.mak
2486 echo "LIBPREF=$LIBPREF" >> config.mak
2487 echo "LIBSUF=$LIBSUF" >> config.mak
2488 echo "LIBNAME=$LIBNAME" >> config.mak
2489 echo "SLIBPREF=$SLIBPREF" >> config.mak
2490 echo "SLIBSUF=$SLIBSUF" >> config.mak
2491 echo "EXESUF=$EXESUF" >> config.mak
2492 echo "EXTRA_VERSION=$extra_version" >> config.mak
2493 echo "DEPEND_CMD=$DEPEND_CMD" >> config.mak
2494 echo "HOSTCC=$host_cc" >> config.mak
2495 echo "HOSTCFLAGS=$host_cflags" >> config.mak
2496 echo "HOSTEXESUF=$HOSTEXESUF" >> config.mak
2497 echo "HOSTLDFLAGS=$host_ldflags" >> config.mak
2498 echo "HOSTLIBS=$host_libs" >> config.mak
2499 echo "TARGET_EXEC=$target_exec" >> config.mak
2500 echo "TARGET_PATH=$target_path" >> config.mak
2501
2502 if enabled bigendian; then
2503 echo "WORDS_BIGENDIAN=yes" >> config.mak
2504 echo "#define WORDS_BIGENDIAN 1" >> $TMPH
2505 fi
2506
2507 if enabled sdl; then
2508 echo "SDL_LIBS=$("${SDL_CONFIG}" --libs)" >> config.mak
2509 echo "SDL_CFLAGS=$("${SDL_CONFIG}" --cflags)" >> config.mak
2510 fi
2511 if enabled texi2html; then
2512 echo "BUILD_DOC=yes" >> config.mak
2513 fi
2514
2515 get_version(){
2516 name=$1
2517 file=$source_path/$2
2518 eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
2519 eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
2520 lcname=$(tolower $name)
2521 eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
2522 eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
2523 }
2524
2525 get_version LIBSWSCALE libswscale/swscale.h
2526 get_version LIBPOSTPROC libpostproc/postprocess.h
2527 get_version LIBAVCODEC libavcodec/avcodec.h
2528 get_version LIBAVDEVICE libavdevice/avdevice.h
2529 get_version LIBAVFORMAT libavformat/avformat.h
2530 get_version LIBAVUTIL libavutil/avutil.h
2531 get_version LIBAVFILTER libavfilter/avfilter.h
2532
2533 if enabled shared; then
2534 echo "BUILD_SHARED=yes" >> config.mak
2535 echo "PIC=-fPIC -DPIC" >> config.mak
2536 echo "LIBTARGET=${LIBTARGET}" >> config.mak
2537 echo "SLIBNAME=${SLIBNAME}" >> config.mak
2538 echo "SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}" >> config.mak
2539 echo "SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}" >> config.mak
2540 echo "SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}" >> config.mak
2541 echo "SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}" >> config.mak
2542 echo "SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}" >> config.mak
2543 echo "SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}" >> config.mak
2544 fi
2545 echo "LIB_INSTALL_EXTRA_CMD=${LIB_INSTALL_EXTRA_CMD}" >> config.mak
2546 echo "EXTRALIBS=$extralibs" >> config.mak
2547
2548 echo "ARCH=$arch" >> config.mak
2549
2550 print_config ARCH_ $TMPH config.mak $ARCH_LIST
2551 print_config HAVE_ $TMPH config.mak $HAVE_LIST
2552 print_config CONFIG_ $TMPH config.mak $CONFIG_LIST \
2553 $CONFIG_EXTRA \
2554 $DECODER_LIST \
2555 $ENCODER_LIST \
2556 $HWACCEL_LIST \
2557 $PARSER_LIST \
2558 $BSF_LIST \
2559 $DEMUXER_LIST \
2560 $MUXER_LIST \
2561 $FILTER_LIST \
2562 $PROTOCOL_LIST \
2563 $INDEV_LIST \
2564 $OUTDEV_LIST \
2565
2566 echo "#define restrict $_restrict" >> $TMPH
2567
2568 if enabled small; then
2569 echo "#define av_always_inline" >> $TMPH
2570 fi
2571
2572
2573 # Apparently it's not possible to portably echo a backslash.
2574 enabled asmalign_pot &&
2575 printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH ||
2576 printf '#define ASMALIGN(ZEROBITS) ".align 1 << " #ZEROBITS "\\n\\t"\n' >> $TMPH
2577
2578 echo "#define EXTERN_PREFIX \"${extern_prefix}\"" >> $TMPH
2579
2580 echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
2581
2582 # Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
2583 cmp -s $TMPH config.h &&
2584 echo "config.h is unchanged" ||
2585 mv -f $TMPH config.h
2586
2587 # build tree in object directory if source path is different from current one
2588 if enabled source_path_used; then
2589 DIRS="\
2590 doc \
2591 libavcodec \
2592 libavcodec/alpha \
2593 libavcodec/arm \
2594 libavcodec/bfin \
2595 libavcodec/mlib \
2596 libavcodec/ppc \
2597 libavcodec/sh4 \
2598 libavcodec/sparc \
2599 libavcodec/x86 \
2600 libavdevice \
2601 libavfilter \
2602 libavformat \
2603 libavutil \
2604 libpostproc \
2605 libswscale \
2606 libswscale/bfin \
2607 libswscale/mlib \
2608 libswscale/ppc \
2609 libswscale/sparc \
2610 libswscale/x86 \
2611 tests \
2612 tools \
2613 "
2614 FILES="\
2615 Makefile \
2616 common.mak \
2617 subdir.mak \
2618 doc/texi2pod.pl \
2619 libavcodec/Makefile \
2620 libavdevice/Makefile \
2621 libavfilter/Makefile \
2622 libavformat/Makefile \
2623 libavutil/Makefile \
2624 libpostproc/Makefile \
2625 libswscale/Makefile \
2626 "
2627 for dir in $DIRS ; do
2628 mkdir -p $dir
2629 done
2630 for f in $FILES ; do
2631 $ln_s "$source_path/$f" $f
2632 done
2633 fi
2634
2635
2636 # build pkg-config files
2637
2638 pkgconfig_generate(){
2639 name=$1
2640 shortname=${name#lib}${build_suffix}
2641 comment=$2
2642 version=$3
2643 libs=$4
2644 requires=$5
2645 cat <<EOF > $name/$name.pc
2646 prefix=$prefix
2647 exec_prefix=\${prefix}
2648 libdir=$libdir
2649 includedir=$incdir
2650
2651 Name: $name
2652 Description: $comment
2653 Version: $version
2654 Requires: $(disabled shared && echo $requires)
2655 Requires.private: $(enabled shared && echo $requires)
2656 Conflicts:
2657 Libs: -L\${libdir} -l${shortname} $(disabled shared && echo $libs)
2658 Libs.private: $(enabled shared && echo $libs)
2659 Cflags: -I\${includedir}
2660 EOF
2661 cat <<EOF > $name/$name-uninstalled.pc
2662 prefix=
2663 exec_prefix=
2664 libdir=\${pcfiledir}
2665 includedir=${source_path}
2666
2667 Name: $name
2668 Description: $comment
2669 Version: $version
2670 Requires: $requires
2671 Conflicts:
2672 Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
2673 Cflags: -I\${includedir}
2674 EOF
2675 }
2676
2677 pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
2678 pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
2679 pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
2680 pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "libavformat = $LIBAVFORMAT_VERSION"
2681 enabled avfilter &&
2682 pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
2683 enabled postproc &&
2684 pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
2685 pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"