handle network dependency on protocols with check_deps()
[libav.git] / configure
1 #!/bin/sh
2 #
3 # FFmpeg configure script
4 #
5 # Copyright (c) 2000, 2001, 2002 Fabrice Bellard
6 # Copyright (c) 2005-2006 Diego Biurrun
7 # Copyright (c) 2005-2006 Mans Rullgard
8 #
9
10 # make sure we are running under a compatible shell
11 # try to make this part work with most shells
12
13 try_exec(){
14 echo "Trying shell $1"
15 type "$1" >/dev/null 2>&1 && exec "$@"
16 }
17
18 unset foo
19 (: ${foo%%bar}) 2>/dev/null
20 E1="$?"
21
22 (: ${foo?}) 2>/dev/null
23 E2="$?"
24
25 if test "$E1" != 0 || test "$E2" = 0; then
26 echo "Broken shell detected. Trying alternatives."
27 export FF_CONF_EXEC
28 if test "0$FF_CONF_EXEC" -lt 1; then
29 FF_CONF_EXEC=1
30 try_exec bash "$0" "$@"
31 fi
32 if test "0$FF_CONF_EXEC" -lt 2; then
33 FF_CONF_EXEC=2
34 try_exec ksh "$0" "$@"
35 fi
36 if test "0$FF_CONF_EXEC" -lt 3; then
37 FF_CONF_EXEC=3
38 try_exec /usr/xpg4/bin/sh "$0" "$@"
39 fi
40 echo "No compatible shell script interpreter found."
41 echo "This configure script requires a POSIX-compatible shell"
42 echo "such as bash or ksh."
43 echo "THIS IS NOT A BUG IN FFMPEG, DO NOT REPORT IT AS SUCH."
44 echo "Instead, install a working POSIX-compatible shell."
45 echo "Disabling this configure test will create a broken FFmpeg."
46 if test "$BASH_VERSION" = '2.04.0(1)-release'; then
47 echo "This bash version ($BASH_VERSION) is broken on your platform."
48 echo "Upgrade to a later version if available."
49 fi
50 exit 1
51 fi
52
53 show_help(){
54 echo "Usage: configure [options]"
55 echo "Options: [defaults in brackets after descriptions]"
56 echo
57 echo "Standard options:"
58 echo " --help print this message"
59 echo " --log[=FILE|yes|no] log tests and output to FILE [config.err]"
60 echo " --prefix=PREFIX install in PREFIX [$PREFIX]"
61 echo " --libdir=DIR install libs in DIR [PREFIX/lib]"
62 echo " --shlibdir=DIR install shared libs in DIR [PREFIX/lib]"
63 echo " --incdir=DIR install includes in DIR [PREFIX/include/ffmpeg]"
64 echo " --mandir=DIR install man page in DIR [PREFIX/man]"
65 echo " --enable-mingw32 enable MinGW native/cross Windows compile"
66 echo " --enable-mingwce enable MinGW native/cross WinCE compile"
67 echo " --enable-static build static libraries [default=yes]"
68 echo " --disable-static do not build static libraries [default=no]"
69 echo " --enable-shared build shared libraries [default=no]"
70 echo " --disable-shared do not build shared libraries [default=yes]"
71 echo " --enable-pp enable GPLed postprocessing support [default=no]"
72 echo " --enable-swscaler software scaler support [default=no]"
73 echo " --enable-sunmlib use Sun medialib [default=no]"
74 echo " --enable-beosthreads use BeOS threads [default=no]"
75 echo " --enable-os2threads use OS/2 threads [default=no]"
76 echo " --enable-pthreads use pthreads [default=no]"
77 echo " --enable-w32threads use Win32 threads [default=no]"
78 echo " --enable-x11grab enable X11 grabbing [default=no]"
79 echo " --enable-dc1394 enable IIDC-1394 grabbing using libdc1394"
80 echo " and libraw1394 [default=no]"
81 echo " --enable-a52 enable GPLed liba52 support [default=no]"
82 echo " --enable-a52bin open liba52.so.0 at runtime [default=no]"
83 echo " --enable-avisynth allow reading AVISynth script files [default=no]"
84 echo " --enable-dts enable GPLed libdts support [default=no]"
85 echo " --enable-faac enable FAAC support via libfaac [default=no]"
86 echo " --enable-faad enable FAAD support via libfaad [default=no]"
87 echo " --enable-faadbin build FAAD support with runtime linking [default=no]"
88 echo " --enable-libgsm enable GSM support via libgsm [default=no]"
89 echo " --enable-mp3lame enable MP3 encoding via libmp3lame [default=no]"
90 echo " --enable-libnut enable NUT (de)muxing via libnut,"
91 echo " native demuxer exists [default=no]"
92 echo " --enable-libogg enable Ogg muxing via libogg [default=no]"
93 echo " --enable-libtheora enable Theora encoding via libtheora [default=no]"
94 echo " --enable-vorbis enable Vorbis en/decoding via libvorbis,"
95 echo " native implementations exist [default=no]"
96 echo " --enable-x264 enable H.264 encoding via x264 [default=no]"
97 echo " --enable-xvid enable Xvid encoding via xvidcore,"
98 echo " native MPEG-4/Xvid encoder exists [default=no]"
99 echo " --enable-amr_nb enable amr_nb float audio codec"
100 echo " --enable-amr_nb-fixed use fixed point for amr-nb codec"
101 echo " --enable-amr_wb enable amr_wb float audio codec"
102 echo " --enable-amr_if2 enable amr_wb IF2 audio codec"
103 echo " --enable-gpl allow use of GPL code, the resulting libav*"
104 echo " and ffmpeg will be under GPL [default=no]"
105 echo ""
106 echo "Advanced options (experts only):"
107 echo " --source-path=PATH path to source code [$source_path]"
108 echo " --cross-prefix=PREFIX use PREFIX for compilation tools [$cross_prefix]"
109 echo " --cross-compile assume a cross-compiler is used"
110 echo " --cc=CC use C compiler CC [$cc]"
111 echo " --make=MAKE use specified make [$make]"
112 echo " --extra-cflags=ECFLAGS add ECFLAGS to CFLAGS [$CFLAGS]"
113 echo " --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]"
114 echo " --extra-libs=ELIBS add ELIBS [$ELIBS]"
115 echo " --build-suffix=SUFFIX suffix for application specific build []"
116 echo " --arch=ARCH select architecture [$arch]"
117 echo " --cpu=CPU selects the minimum cpu required (affects
118 instruction selection, may crash on older CPUs)"
119 echo " --powerpc-perf-enable enable performance report on PPC"
120 echo " (requires enabling PMC)"
121 echo " --disable-mmx disable MMX usage"
122 echo " --disable-armv5te disable armv5te usage"
123 echo " --disable-armv6 disable armv6 usage"
124 echo " --disable-iwmmxt disable iwmmxt usage"
125 echo " --disable-altivec disable AltiVec usage"
126 echo " --disable-audio-oss disable OSS audio support [default=no]"
127 echo " --disable-audio-beos disable BeOS audio support [default=no]"
128 echo " --disable-v4l disable video4linux grabbing [default=no]"
129 echo " --disable-v4l2 disable video4linux2 grabbing [default=no]"
130 echo " --disable-bktr disable bktr video grabbing [default=no]"
131 echo " --disable-dv1394 disable DV1394 grabbing [default=no]"
132 echo " --disable-network disable network support [default=no]"
133 echo " --disable-ipv6 disable ipv6 support [default=no]"
134 echo " --disable-zlib disable zlib [default=no]"
135 echo " --disable-vhook disable video hooking support"
136 echo " --enable-gprof enable profiling with gprof [$gprof]"
137 echo " --disable-debug disable debugging symbols"
138 echo " --disable-opts disable compiler optimizations"
139 echo " --enable-extra-warnings enable more compiler warnings"
140 echo " --disable-mpegaudio-hp faster (but less accurate)"
141 echo " MPEG audio decoding [default=no]"
142 echo " --disable-protocols disable I/O protocols support [default=no]"
143 echo " --disable-ffmpeg disable ffmpeg build"
144 echo " --disable-ffserver disable ffserver build"
145 echo " --disable-ffplay disable ffplay build"
146 echo " --enable-small optimize for size instead of speed"
147 echo " --enable-memalign-hack emulate memalign, interferes with memory debuggers"
148 echo " --disable-strip disable stripping of executables and shared libraries"
149 echo " --disable-encoder=NAME disables encoder NAME"
150 echo " --enable-encoder=NAME enables encoder NAME"
151 echo " --disable-decoder=NAME disables decoder NAME"
152 echo " --enable-decoder=NAME enables decoder NAME"
153 echo " --disable-encoders disables all encoders"
154 echo " --disable-decoders disables all decoders"
155 echo " --disable-muxer=NAME disables muxer NAME"
156 echo " --enable-muxer=NAME enables muxer NAME"
157 echo " --disable-muxers disables all muxers"
158 echo " --disable-demuxer=NAME disables demuxer NAME"
159 echo " --enable-demuxer=NAME enables demuxer NAME"
160 echo " --disable-demuxers disables all demuxers"
161 echo " --enable-parser=NAME enables parser NAME"
162 echo " --disable-parser=NAME disables parser NAME"
163 echo " --disable-parsers disables all parsers"
164 echo ""
165 echo "NOTE: Object files are built at the place where configure is launched."
166 exit 1
167 }
168
169 log(){
170 echo "$@" >>$logfile
171 }
172
173 log_file(){
174 log BEGIN $1
175 cat -n $1 >>$logfile
176 log END $1
177 }
178
179 echolog(){
180 log "$@"
181 echo "$@"
182 }
183
184 die(){
185 echolog "$@"
186 cat <<EOF
187 If you think configure made a mistake, make sure you are using the latest
188 version from SVN. If the latest version fails, report the problem to the
189 ffmpeg-devel@mplayerhq.hu mailing list or IRC #ffmpeg on irc.freenode.net.
190 EOF
191 if enabled logging; then
192 cat <<EOF
193 Include the log file "$logfile" produced by configure as this will help
194 solving the problem.
195 EOF
196 else
197 cat <<EOF
198 Rerun configure with logging enabled (do not use --log=no), and include the
199 log this produces with your report.
200 EOF
201 fi
202 rm -f $TMPC $TMPO $TMPE $TMPS $TMPH
203 exit 1
204 }
205
206 # "tr '[a-z]' '[A-Z]'" is a workaround for Solaris tr not grokking "tr a-z A-Z"
207 toupper(){
208 echo "$@" | tr '[a-z]' '[A-Z]'
209 }
210
211 set_all(){
212 value=$1
213 shift
214 for var in $*; do
215 eval $var=$value
216 done
217 }
218
219 pushvar(){
220 for var in $*; do
221 eval level=\${${var}_level:=0}
222 eval ${var}_${level}="\$$var"
223 eval ${var}_level=$(($level+1))
224 done
225 }
226
227 popvar(){
228 for var in $*; do
229 eval level=\${${var}_level:-0}
230 test $level = 0 && continue
231 eval level=$(($level-1))
232 eval $var="\${${var}_${level}}"
233 eval ${var}_level=$level
234 eval unset ${var}_${level}
235 done
236 }
237
238 enable(){
239 set_all yes $*
240 }
241
242 disable(){
243 set_all no $*
244 }
245
246 enabled(){
247 eval test "x\$$1" = "xyes"
248 }
249
250 disabled(){
251 eval test "x\$$1" = "xno"
252 }
253
254 enabled_all(){
255 for opt; do
256 enabled $opt || return 1
257 done
258 }
259
260 disabled_all(){
261 for opt; do
262 disabled $opt || return 1
263 done
264 }
265
266 enabled_any(){
267 for opt; do
268 enabled $opt && return 0
269 done
270 }
271
272 disabled_any(){
273 for opt; do
274 disabled $opt && return 0
275 done
276 }
277
278 check_deps(){
279 for cfg; do
280 enabled ${cfg}_checking && die "Circular dependency for $cfg."
281 disabled ${cfg}_checking && continue
282 enable ${cfg}_checking
283
284 eval dep_all="\$${cfg}_deps"
285 eval dep_any="\$${cfg}_deps_any"
286
287 pushvar cfg dep_all dep_any
288 check_deps $dep_all $dep_any
289 popvar cfg dep_all dep_any
290
291 enabled_all $dep_all || disable $cfg
292 enabled_any $dep_any || disable $cfg
293
294 disable ${cfg}_checking
295 done
296 }
297
298 print_config(){
299 pfx=$1
300 header=$2
301 makefile=$3
302 shift 3
303 for cfg; do
304 if enabled $cfg; then
305 ucname="${pfx}`toupper $cfg`"
306 echo "#define ${ucname} 1" >> $header
307 echo "${ucname}=yes" >> $makefile
308 fi
309 done
310 }
311
312 flags_saved(){
313 (: ${SAVE_CFLAGS?}) 2>/dev/null
314 }
315
316 save_flags(){
317 flags_saved && return
318 SAVE_CFLAGS="$CFLAGS"
319 SAVE_LDFLAGS="$LDFLAGS"
320 SAVE_extralibs="$extralibs"
321 }
322
323 restore_flags(){
324 flags_saved || return
325 CFLAGS="$SAVE_CFLAGS"
326 LDFLAGS="$SAVE_LDFLAGS"
327 extralibs="$SAVE_extralibs"
328 unset SAVE_CFLAGS
329 unset SAVE_LDFLAGS
330 unset SAVE_extralibs
331 }
332
333 temp_cflags(){
334 save_flags
335 CFLAGS="$CFLAGS $*"
336 }
337
338 temp_ldflags(){
339 save_flags
340 LDFLAGS="$LDFLAGS $*"
341 }
342
343 temp_extralibs(){
344 save_flags
345 extralibs="$extralibs $*"
346 }
347
348 append(){
349 var=$1
350 shift
351 flags_saved && eval "SAVE_$var=\"\$SAVE_$var $*\""
352 eval "$var=\"\$$var $*\""
353 }
354
355 add_cflags(){
356 append CFLAGS "$@"
357 }
358
359 add_ldflags(){
360 append LDFLAGS "$@"
361 }
362
363 add_extralibs(){
364 append extralibs "$@"
365 }
366
367 check_cmd(){
368 log "$@"
369 "$@" >>$logfile 2>&1
370 }
371
372 check_cc(){
373 log check_cc "$@"
374 cat >$TMPC
375 log_file $TMPC
376 check_cmd $cc $CFLAGS "$@" -c -o $TMPO $TMPC
377 }
378
379 check_cpp(){
380 log check_cpp "$@"
381 cat >$TMPC
382 log_file $TMPC
383 check_cmd $cc $CFLAGS "$@" -E -o $TMPO $TMPC
384 }
385
386 check_ld(){
387 log check_ld "$@"
388 check_cc || return
389 check_cmd $cc $LDFLAGS "$@" -o $TMPE $TMPO $extralibs
390 }
391
392 check_cflags(){
393 log check_cflags "$@"
394 check_cc "$@" <<EOF && add_cflags "$@"
395 int x;
396 EOF
397 }
398
399 check_ldflags(){
400 log check_ldflags "$@"
401 check_ld "$@" <<EOF && add_ldflags "$@"
402 int main(){
403 return 0;
404 }
405 EOF
406 }
407
408 check_header(){
409 log check_header "$@"
410 header=$1
411 shift
412 check_cpp "$@" <<EOF
413 #include <$header>
414 int x;
415 EOF
416 err=$?
417 var=`echo $header | sed 's/[^A-Za-z0-9_]/_/g'`
418 test "$err" = 0 && enable $var || disable $var
419 return $err
420 }
421
422 check_func(){
423 log check_func "$@"
424 func=$1
425 shift
426 check_ld "$@" <<EOF
427 extern int $func();
428 int main(){
429 $func();
430 }
431 EOF
432 err=$?
433 test "$err" = 0 && enable $func || disable $func
434 return $err
435 }
436
437 check_lib(){
438 log check_lib "$@"
439 header="$1"
440 func="$2"
441 shift 2
442 temp_extralibs "$@"
443 check_header $header && check_func $func && add_extralibs "$@"
444 err=$?
445 restore_flags
446 return $err
447 }
448
449 check_exec(){
450 check_ld "$@" && { enabled cross_compile || $TMPE >>$logfile 2>&1; }
451 }
452
453 require(){
454 name="$1"
455 header="$2"
456 func="$3"
457 shift 3
458 check_lib $header $func "$@" || die "ERROR: $name not found"
459 }
460
461 apply(){
462 file=$1
463 shift
464 "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
465 }
466
467 CONFIG_LIST='
468 encoders
469 decoders
470 parsers
471 muxers
472 demuxers
473 amr
474 amr_nb
475 amr_nb_fixed
476 amr_wb
477 audio_beos
478 audio_oss
479 avisynth
480 beos_netserver
481 bktr
482 dc1394
483 dv1394
484 ffmpeg
485 ffplay
486 ffserver
487 gpl
488 ipv6
489 liba52
490 liba52bin
491 libdts
492 libfaac
493 libfaad
494 libfaadbin
495 libgsm
496 libmp3lame
497 libnut
498 libogg
499 libtheora
500 libvorbis
501 memalign_hack
502 mpegaudio_hp
503 network
504 pp
505 protocols
506 swscaler
507 vhook
508 video4linux
509 video4linux2
510 wince
511 x11grab
512 x264
513 xvid
514 zlib
515 '
516
517 HAVE_LIST='
518 altivec
519 altivec_h
520 armv5te
521 armv6
522 beosthreads
523 byteswap_h
524 cmov
525 dcbzl
526 dev_bktr_ioctl_bt848_h
527 dev_bktr_ioctl_meteor_h
528 dev_ic_bt8xx_h
529 dev_video_meteor_ioctl_meteor_h
530 dev_video_bktr_ioctl_bt848_h
531 dlfcn_h
532 dlopen
533 fast_cmov
534 freetype2
535 gprof
536 imlib2
537 inet_aton
538 iwmmxt
539 localtime_r
540 lrintf
541 machine_ioctl_bt848_h
542 machine_ioctl_meteor_h
543 malloc_h
544 memalign
545 mlib
546 mmi
547 mmx
548 os2
549 os2threads
550 pthreads
551 sdl
552 sdl_video_size
553 soundcard_h
554 sys_soundcard_h
555 threads
556 w32threads
557 '
558
559 TARGET_LIST='
560 altivec
561 armv5te
562 iwmmxt
563 mmi
564 mmx
565 '
566
567 flashsv_decoder_deps="zlib"
568 flashsv_encoder_deps="zlib"
569 mpeg_xvmc_decoder_deps="xvmc"
570 png_decoder_deps="zlib"
571 png_encoder_deps="zlib"
572 x264_encoder_deps="x264"
573 xvid_encoder_deps="xvid"
574 zmbv_decoder_deps="zlib"
575 zmbv_encoder_deps="zlib"
576
577 aac_decoder_deps="libfaad"
578 mpeg4aac_decoder_deps="libfaad"
579 ac3_decoder_deps="liba52"
580 amr_nb_decoder_deps_any="amr_nb amr_nb_fixed"
581 amr_nb_encoder_deps_any="amr_nb amr_nb_fixed"
582 amr_wb_decoder_deps="amr_wb"
583 amr_wb_encoder_deps="amr_wb"
584 dts_decoder_deps="libdts"
585 faac_encoder_deps="libfaac"
586 libgsm_decoder_deps="libgsm"
587 libgsm_encoder_deps="libgsm"
588 libtheora_encoder_deps="libtheora"
589 mp3lame_encoder_deps="libmp3lame"
590 oggvorbis_decoder_deps="libvorbis"
591 oggvorbis_encoder_deps="libvorbis"
592
593 audio_demuxer_deps_any="audio_oss audio_beos"
594 audio_muxer_deps_any="audio_oss audio_beos"
595 dc1394_demuxer_deps="dc1394"
596 dv1394_demuxer_deps="dv1394"
597 gxf_muxer_deps="gpl"
598 libnut_demuxer_deps="libnut"
599 libnut_muxer_deps="libnut"
600 ogg_muxer_deps="libogg"
601 redir_demuxer_deps="network"
602 rtp_muxer_deps="network"
603 rtsp_demuxer_deps="network"
604 sdp_demuxer_deps="network"
605 v4l2_demuxer_deps="video4linux2"
606 video_grab_device_demuxer_deps_any="video4linux bktr"
607 x11_grab_device_demuxer_deps="x11grab"
608
609 ffplay_deps="sdl"
610 ffserver_deps="network protocols muxers"
611 network_deps="protocols"
612
613 # set temporary file name
614 if test ! -z "$TMPDIR" ; then
615 TMPDIR1="${TMPDIR}"
616 elif test ! -z "$TEMPDIR" ; then
617 TMPDIR1="${TEMPDIR}"
618 else
619 TMPDIR1="/tmp"
620 fi
621
622 TMPC="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.c"
623 TMPO="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.o"
624 TMPE="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}"
625 TMPS="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.S"
626 TMPH="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.h"
627
628 # default parameters
629
630 logging="yes"
631 logfile="config.err"
632
633 # installation paths
634 PREFIX="/usr/local"
635 libdir='${PREFIX}/lib'
636 shlibdir="$libdir"
637 incdir='${PREFIX}/include/ffmpeg'
638 mandir='${PREFIX}/man'
639 bindir='${PREFIX}/bin'
640
641 # toolchain
642 cross_prefix=""
643 cross_compile="no"
644 cc="gcc"
645 ar="ar"
646 ranlib="ranlib"
647 make="make"
648 strip="strip"
649 asmalign_pot="unknown"
650
651 # machine
652 arch=`uname -m`
653 cpu="generic"
654 powerpc_perf="no"
655 mmx="default"
656 cmov="no"
657 fast_cmov="no"
658 armv5te="default"
659 armv6="default"
660 iwmmxt="default"
661 altivec="default"
662 dcbzl="no"
663 mmi="default"
664 bigendian="no"
665
666 case "$arch" in
667 i386|i486|i586|i686|i86pc|BePC)
668 arch="x86_32"
669 ;;
670 x86_64|amd64)
671 arch="x86_32"
672 canon_arch="`$cc -dumpmachine | sed -e 's,\([^-]*\)-.*,\1,'`"
673 if [ x"$canon_arch" = x"x86_64" -o x"$canon_arch" = x"amd64" ]; then
674 if [ -z "`echo $CFLAGS | grep -- -m32`" ]; then
675 arch="x86_64"
676 fi
677 fi
678 ;;
679 # armv4l is a subset of armv[567]*l
680 arm|armv[4567]*l)
681 arch="armv4l"
682 ;;
683 alpha)
684 arch="alpha"
685 ;;
686 "Power Macintosh"|ppc|ppc64|powerpc)
687 arch="powerpc"
688 ;;
689 mips|mipsel|IP*)
690 arch="mips"
691 ;;
692 sun4u|sparc64)
693 arch="sparc64"
694 ;;
695 sparc)
696 arch="sparc"
697 ;;
698 sh4)
699 arch="sh4"
700 ;;
701 parisc|parisc64)
702 arch="parisc"
703 ;;
704 s390|s390x)
705 arch="s390"
706 ;;
707 m68k)
708 arch="m68k"
709 ;;
710 ia64)
711 arch="ia64"
712 ;;
713 bfin)
714 arch="bfin"
715 ;;
716 *)
717 arch="unknown"
718 ;;
719 esac
720
721 # OS
722 beos_netserver="no"
723 mingw32="no"
724 os2="no"
725 wince="no"
726
727 # non-library system interfaces
728 audio_beos="no"
729 audio_oss="yes"
730 bktr="yes"
731 dv1394="yes"
732 video4linux2="yes"
733 video4linux="yes"
734
735 # libraries
736 amr_if2="no"
737 amr_nb="no"
738 amr_nb_fixed="no"
739 amr_wb="no"
740 avisynth="no"
741 dc1394="no"
742 dlfcn_h="no"
743 dlopen="no"
744 liba52="no"
745 liba52bin="no"
746 libdts="no"
747 libfaac="no"
748 libfaad2="no"
749 libfaad="no"
750 libfaadbin="no"
751 libgsm="no"
752 libmp3lame="no"
753 libnut="no"
754 libogg="no"
755 libtheora="no"
756 libvorbis="no"
757 mlib="no"
758 x11grab="no"
759 x264="no"
760 xvid="no"
761 zlib="yes"
762
763 # configurable options
764 debug="yes"
765 dostrip="yes"
766 extrawarnings="no"
767 ffmpeg="yes"
768 ffplay="yes"
769 ffserver="yes"
770 gpl="no"
771 gprof="no"
772 ipv6="yes"
773 lshared="no"
774 lstatic="yes"
775 memalign_hack="no"
776 mpegaudio_hp="yes"
777 network="yes"
778 optimize="yes"
779 pp="no"
780 protocols="yes"
781 swscaler="no"
782 vhook="default"
783
784 # threading
785 beosthreads="no"
786 os2threads="no"
787 pthreads="no"
788 w32threads="no"
789 thread_type="no"
790
791 # build settings
792 extralibs="-lm"
793 SHFLAGS='-shared -Wl,-soname,$@'
794 VHOOKSHFLAGS='$(SHFLAGS)'
795 LIBOBJFLAGS=""
796 FFLDFLAGS=-Wl,--warn-common
797 LDLATEFLAGS='-Wl,-rpath-link,\$(BUILD_ROOT)/libavcodec -Wl,-rpath-link,\$(BUILD_ROOT)/libavformat -Wl,-rpath-link,\$(BUILD_ROOT)/libavutil'
798 FFSERVERLDFLAGS=-Wl,-E
799 LDCONFIG="ldconfig"
800 LIBPREF="lib"
801 LIBSUF=".a"
802 LIB='$(LIBPREF)$(NAME)$(LIBSUF)'
803 SLIBPREF="lib"
804 SLIBSUF=".so"
805 SLIBNAME='$(SLIBPREF)$(NAME)$(SLIBSUF)'
806 SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
807 SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
808 EXESUF=""
809 BUILDSUF=""
810 LIB_INSTALL_EXTRA_CMD='$(RANLIB) "$(libdir)/$(LIB)"'
811
812 # OS specific
813 targetos=`uname -s`
814 case $targetos in
815 BeOS|Haiku|Zeta)
816 PREFIX="$HOME/config"
817 # helps building libavcodec
818 add_cflags "-DPIC -fomit-frame-pointer"
819 # 3 gcc releases known for BeOS, each with ugly bugs
820 gcc_version="`$cc -v 2>&1 | grep version | cut -d ' ' -f3-`"
821 case "$gcc_version" in
822 2.9-beos-991026*|2.9-beos-000224*) echo "R5/GG gcc"
823 mmx="no"
824 ;;
825 *20010315*) echo "BeBits gcc"
826 add_cflags "-fno-expensive-optimizations"
827 ;;
828 esac
829 LDCONFIG="echo ignoring ldconfig"
830 SHFLAGS=-nostart
831 # disable Linux things
832 dv1394="no"
833 # enable BeOS things
834 audio_beos="yes"
835 # no need for libm, but the inet stuff
836 # Check for BONE
837 # XXX: actually should check for NOT net_server
838 if (echo $BEINCLUDES|grep 'headers/be/bone' >/dev/null); then
839 extralibs="-lbind -lsocket"
840 else
841 beos_netserver="yes"
842 extralibs="-lnet"
843 fi ;;
844 SunOS)
845 dv1394="no"
846 FFLDFLAGS=""
847 FFSERVERLDFLAGS=""
848 SHFLAGS="-shared -Wl,-h,\$@"
849 add_extralibs "-lsocket -lnsl"
850 ;;
851 NetBSD)
852 dv1394="no"
853 add_extralibs "-lossaudio"
854 ;;
855 OpenBSD)
856 dv1394="no"
857 need_memalign="no"
858 LIBOBJFLAGS="\$(PIC)"
859 LDCONFIG="ldconfig -m \$(shlibdir)"
860 SHFLAGS='-shared'
861 SLIBNAME='$(SLIBPREF)$(NAME)$(SLIBSUF).$(LIBVERSION)'
862 SLIBNAME_WITH_VERSION='$(SLIBNAME)'
863 SLIBNAME_WITH_MAJOR='$(SLIBNAME)'
864 add_extralibs "-lossaudio"
865 ;;
866 FreeBSD)
867 dv1394="no"
868 need_memalign="no"
869 add_cflags "-pthread"
870 ;;
871 GNU/kFreeBSD)
872 dv1394="no"
873 add_cflags "-pthread"
874 ;;
875 BSD/OS)
876 dv1394="no"
877 extralibs="-lpoll -lgnugetopt -lm"
878 strip="strip -d"
879 ;;
880 Darwin)
881 cc="cc"
882 dv1394="no"
883 need_memalign="no"
884 SHFLAGS="-dynamiclib -Wl,-single_module -Wl,-install_name,\$(shlibdir)/\$(SLIBNAME),-current_version,\$(SPPVERSION),-compatibility_version,\$(SPPVERSION) -Wl,-read_only_relocs,suppress"
885 VHOOKSHFLAGS='-dynamiclib -Wl,-single_module -flat_namespace -undefined suppress -Wl,-install_name,$(shlibdir)/vhook/$@'
886 extralibs=""
887 strip="strip -x"
888 FFLDFLAGS="-Wl,-dynamic,-search_paths_first"
889 SLIBSUF=".dylib"
890 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME).$(LIBVERSION)$(SLIBSUF)'
891 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(NAME).$(LIBMAJOR)$(SLIBSUF)'
892 FFSERVERLDFLAGS=-Wl,-bind_at_load
893 ;;
894 MINGW32*)
895 # Note: the rest of the mingw32 config is done afterwards as mingw32
896 # can be forced on the command line for Linux cross compilation.
897 mingw32="yes"
898 ;;
899 CYGWIN*)
900 targetos=CYGWIN
901 shlibdir="$bindir"
902 dv1394="no"
903 VHOOKSHFLAGS='-shared -L$(BUILD_ROOT)/libavformat -L$(BUILD_ROOT)/libavcodec -L$(BUILD_ROOT)/libavutil'
904 VHOOKLIBS='-lavformat$(BUILDSUF) -lavcodec$(BUILDSUF) -lavutil$(BUILDSUF) $(EXTRALIBS)'
905 extralibs=""
906 EXESUF=".exe"
907 SLIBPREF="cyg"
908 SLIBSUF=".dll"
909 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
910 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(NAME)-$(LIBMAJOR)$(SLIBSUF)'
911 SHFLAGS='-shared -Wl,--out-implib=lib$(NAME).dll.a'
912 ;;
913 Linux)
914 LDLATEFLAGS="-Wl,--as-needed $LDLATEFLAGS"
915 ;;
916 IRIX*)
917 targetos=IRIX
918 ranlib="echo ignoring ranlib"
919 ;;
920 OS/2)
921 TMPE=$TMPE".exe"
922 ar="emxomfar -p128"
923 ranlib="echo ignoring ranlib"
924 strip="echo ignoring strip"
925 add_cflags "-Zomf"
926 FFLDFLAGS="-Zomf -Zstack 16384 -s"
927 SHFLAGS="-Zdll -Zomf"
928 FFSERVERLDFLAGS=""
929 LIBPREF=""
930 LIBSUF=".lib"
931 SLIBPREF=""
932 SLIBSUF=".dll"
933 EXESUF=".exe"
934 extralibs=""
935 pkg_requires=""
936 dv1394="no"
937 ffserver="no"
938 vhook="no"
939 os2="yes"
940 ;;
941 *)
942 targetos="${targetos}-UNKNOWN"
943 ;;
944 esac
945
946 # find source path
947 source_path="`dirname \"$0\"`"
948 source_path_used="yes"
949 if test -z "$source_path" -o "$source_path" = "." ; then
950 source_path="`pwd`"
951 source_path_used="no"
952 else
953 source_path="`cd \"$source_path\"; pwd`"
954 echo "$source_path" | grep -q '[[:blank:]]' &&
955 die "Out of tree builds are impossible with whitespace in source path."
956 fi
957
958 if test x"$1" = x"-h" -o x"$1" = x"--help" ; then
959 show_help
960 fi
961
962 FFMPEG_CONFIGURATION="$@"
963
964 ENCODER_LIST=`sed -n 's/^[^#]*ENC.*, *\(.*\)).*/\1_encoder/p' "$source_path/libavcodec/allcodecs.c"`
965 DECODER_LIST=`sed -n 's/^[^#]*DEC.*, *\(.*\)).*/\1_decoder/p' "$source_path/libavcodec/allcodecs.c"`
966 PARSER_LIST=`sed -n 's/^[^#]*PARSER.*, *\(.*\)).*/\1_parser/p' "$source_path/libavcodec/allcodecs.c"`
967 MUXER_LIST=`sed -n 's/^[^#]*_MUX.*, *\(.*\)).*/\1_muxer/p' "$source_path/libavformat/allformats.c"`
968 DEMUXER_LIST=`sed -n 's/^[^#]*DEMUX.*, *\(.*\)).*/\1_demuxer/p' "$source_path/libavformat/allformats.c"`
969
970 enable $ENCODER_LIST $DECODER_LIST $PARSER_LIST $MUXER_LIST $DEMUXER_LIST
971
972 for opt do
973 optval="${opt#*=}"
974 case "$opt" in
975 --log)
976 ;;
977 --log=*) logging="$optval"
978 ;;
979 --prefix=*) PREFIX="$optval"
980 ;;
981 --libdir=*) libdir="$optval"
982 ;;
983 --shlibdir=*) shlibdir="$optval"
984 ;;
985 --incdir=*) incdir="$optval"
986 ;;
987 --mandir=*) mandir="$optval"
988 ;;
989 --source-path=*) source_path="$optval"
990 ;;
991 --cross-prefix=*) cross_prefix="$optval"
992 ;;
993 --cross-compile) cross_compile="yes"
994 ;;
995 --cc=*) cc="$optval"
996 ;;
997 --make=*) make="$optval"
998 ;;
999 --extra-cflags=*) add_cflags "$optval"
1000 ;;
1001 --extra-ldflags=*) add_ldflags "$optval"
1002 ;;
1003 --extra-libs=*) add_extralibs "$optval"
1004 ;;
1005 --build-suffix=*) BUILDSUF="$optval"
1006 ;;
1007 --arch=*) arch="$optval"
1008 ;;
1009 --cpu=*) cpu="$optval"
1010 ;;
1011 --powerpc-perf-enable) powerpc_perf="yes"
1012 ;;
1013 --disable-mmx) mmx="no"
1014 ;;
1015 --disable-armv5te) armv5te="no"
1016 ;;
1017 --disable-armv6) armv6="no"
1018 ;;
1019 --disable-iwmmxt) iwmmxt="no"
1020 ;;
1021 --disable-altivec) altivec="no"
1022 ;;
1023 --enable-gprof) gprof="yes"
1024 ;;
1025 --disable-v4l) video4linux="no"
1026 ;;
1027 --disable-v4l2) video4linux2="no"
1028 ;;
1029 --disable-bktr) bktr="no"
1030 ;;
1031 --disable-audio-oss) audio_oss="no"
1032 ;;
1033 --disable-audio-beos) audio_beos="no"
1034 ;;
1035 --disable-dv1394) dv1394="no"
1036 ;;
1037 --disable-network) network="no"
1038 ;;
1039 --disable-ipv6) ipv6="no"
1040 ;;
1041 --disable-zlib) zlib="no"
1042 ;;
1043 --enable-a52) liba52="yes"
1044 ;;
1045 --enable-a52bin) liba52bin="yes"; liba52="yes"
1046 ;;
1047 --enable-dts) libdts="yes"
1048 ;;
1049 --enable-pp) pp="yes"
1050 ;;
1051 --enable-libgsm) libgsm="yes"
1052 ;;
1053 --enable-mp3lame) libmp3lame="yes"
1054 ;;
1055 --enable-libnut) libnut="yes"
1056 ;;
1057 --enable-libogg) libogg="yes"
1058 pkg_requires="$pkg_requires ogg >= 1.1"
1059 ;;
1060 --enable-libtheora) libtheora="yes"
1061 pkg_requires="$pkg_requires theora"
1062 ;;
1063 --enable-vorbis) libvorbis="yes"
1064 pkg_requires="$pkg_requires vorbis vorbisenc"
1065 ;;
1066 --enable-faad) libfaad="yes"
1067 ;;
1068 --enable-faadbin) libfaadbin="yes"
1069 ;;
1070 --enable-faac) libfaac="yes"
1071 ;;
1072 --enable-xvid) xvid="yes"
1073 ;;
1074 --enable-x264) x264="yes"
1075 ;;
1076 --enable-avisynth) avisynth="yes"
1077 ;;
1078 --enable-x11grab) x11grab="yes"
1079 ;;
1080 --enable-dc1394) dc1394="yes"
1081 pkg_requires="$pkg_requires libraw1394"
1082 ;;
1083 --disable-vhook) vhook="no"
1084 ;;
1085 --enable-mingw32) mingw32="yes"
1086 ;;
1087 --enable-mingwce) wince="yes"
1088 ;;
1089 --enable-static) lstatic="yes"
1090 ;;
1091 --disable-static) lstatic="no"
1092 ;;
1093 --enable-shared) lshared="yes"
1094 ;;
1095 --disable-shared) lshared="no"
1096 ;;
1097 --disable-debug) debug="no"
1098 ;;
1099 --disable-opts) optimize="no"
1100 ;;
1101 --enable-extra-warnings) extrawarnings="yes"
1102 ;;
1103 --disable-mpegaudio-hp) mpegaudio_hp="no"
1104 ;;
1105 --disable-protocols) protocols="no"
1106 ;;
1107 --disable-ffmpeg) ffmpeg="no"
1108 ;;
1109 --disable-ffserver) ffserver="no"
1110 ;;
1111 --disable-ffplay) ffplay="no"
1112 ;;
1113 --enable-small) optimize="small"
1114 ;;
1115 --enable-amr_nb) amr="yes"; amr_nb="yes"; amr_nb_fixed="no"
1116 ;;
1117 --enable-amr_nb-fixed) amr="yes"; amr_nb_fixed="yes"; amr_nb="no"
1118 ;;
1119 --enable-amr_wb) amr="yes"; amr_wb="yes"
1120 ;;
1121 --enable-amr_if2) amr="yes"; amr_if2="yes"
1122 ;;
1123 --enable-sunmlib) mlib="yes"
1124 ;;
1125 --enable-pthreads) pthreads="yes"
1126 ;;
1127 --enable-w32threads) w32threads="yes"
1128 ;;
1129 --enable-beosthreads) beosthreads="yes"
1130 ;;
1131 --enable-os2threads) os2threads="yes"
1132 ;;
1133 --enable-swscaler) swscaler="yes"
1134 ;;
1135 --enable-gpl) gpl="yes"
1136 ;;
1137 --enable-memalign-hack) memalign_hack="yes"
1138 ;;
1139 --disable-strip) dostrip="no"
1140 ;;
1141 --enable-encoder=*) enable ${optval}_encoder
1142 ;;
1143 --enable-decoder=*) enable ${optval}_decoder
1144 ;;
1145 --disable-encoder=*) disable ${optval}_encoder
1146 ;;
1147 --disable-decoder=*) disable ${optval}_decoder
1148 ;;
1149 --disable-encoders) disable $ENCODER_LIST
1150 ;;
1151 --disable-decoders) disable $DECODER_LIST
1152 ;;
1153 --enable-muxer=*) enable ${optval}_muxer
1154 ;;
1155 --disable-muxer=*) disable ${optval}_muxer
1156 ;;
1157 --disable-muxers) disable $MUXER_LIST
1158 ;;
1159 --enable-demuxer=*) enable ${optval}_demuxer
1160 ;;
1161 --disable-demuxer=*) disable ${optval}_demuxer
1162 ;;
1163 --disable-demuxers) disable $DEMUXER_LIST
1164 ;;
1165 --enable-parser=*) enable ${optval}_parser
1166 ;;
1167 --disable-parser=*) disable ${optval}_parser
1168 ;;
1169 --disable-parsers) disable $PARSER_LIST
1170 ;;
1171 --help) show_help
1172 ;;
1173 *)
1174 echo "Unknown option \"$opt\"."
1175 echo "See $0 --help for available options."
1176 exit 1
1177 ;;
1178 esac
1179 done
1180
1181 if ! disabled logging ; then
1182 enabled logging || logfile="$logging"
1183 echo "# $0 $@" >$logfile
1184 set >>$logfile
1185 else
1186 logfile=/dev/null
1187 fi
1188
1189 if enabled_any mingw32 wince; then
1190 if enabled_all lshared lstatic; then
1191 cat <<EOF
1192 You can only build one library type at once on MinGW.
1193 Specify --disable-static --enable-shared to only build
1194 the shared libraries. To build only the static libraries
1195 you do not need to pass additional options.
1196 EOF
1197 exit 1
1198 fi
1199 dv1394="no"
1200 dc1394="no"
1201 ffserver="no"
1202 network="no"
1203 if enabled wince; then
1204 protocols="no"
1205 fi
1206 SLIBPREF=""
1207 SLIBSUF=".dll"
1208 EXESUF=".exe"
1209 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
1210 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(NAME)-$(LIBMAJOR)$(SLIBSUF)'
1211 SLIB_EXTRA_CMD="-lib /machine:i386 /def:\$(@:${SLIBSUF}=.def)"
1212 SLIB_INSTALL_EXTRA_CMD="-install -m 644 \$(SLIBNAME_WITH_MAJOR:\$(SLIBSUF)=.lib) \"\$(shlibdir)/\$(SLIBNAME_WITH_MAJOR:\$(SLIBSUF)=.lib)\""
1213 SHFLAGS="-shared -Wl,--output-def,\$(@:${SLIBSUF}=.def),--out-implib,lib\$(SLIBNAME:\$(SLIBSUF)=.dll.a) -Wl,--enable-runtime-pseudo-reloc"
1214 fi
1215
1216 # Combine FFLDFLAGS and the LDFLAGS environment variable.
1217 LDFLAGS="$FFLDFLAGS $LDFLAGS"
1218
1219 test -n "$cross_prefix" && cross_compile=yes
1220 cc="${cross_prefix}${cc}"
1221 ar="${cross_prefix}${ar}"
1222 ranlib="${cross_prefix}${ranlib}"
1223 strip="${cross_prefix}${strip}"
1224
1225 # we need to build at least one lib type
1226 if disabled_all lstatic lshared; then
1227 cat <<EOF
1228 At least one library type must be built.
1229 Specify --enable-static to build the static libraries or --enable-shared to
1230 build the shared libraries as well. To only build the shared libraries specify
1231 --disable-static in addition to --enable-shared.
1232 EOF
1233 exit 1;
1234 fi
1235
1236 if disabled libogg; then
1237 enabled libtheora && die "libogg must be enabled to enable libtheora."
1238 enabled libvorbis && die "libogg must be enabled to enable libvorbis."
1239 fi
1240
1241 if enabled_any libfaad libfaadbin ; then
1242 if check_header faad.h; then
1243 check_cc << EOF
1244 #include <faad.h>
1245 #ifndef FAAD2_VERSION
1246 ok faad1
1247 #endif
1248 int main( void ) { return 0; }
1249 EOF
1250 test $? = 0 && enable libfaad2
1251 else
1252 die "FAAD test failed."
1253 fi
1254 fi
1255
1256
1257 if disabled gpl ; then
1258 die_gpl_disabled(){
1259 name=$1
1260 shift
1261 enabled_any $@ && die "$name is under GPL and --enable-gpl is not specified."
1262 }
1263 die_gpl_disabled "The Postprocessing code" pp
1264 die_gpl_disabled "liba52" liba52 liba52bin
1265 die_gpl_disabled "libxvidcore" xvid
1266 die_gpl_disabled "x264" x264
1267 die_gpl_disabled "libdts" libdts
1268 die_gpl_disabled "FAAD2" libfaad2
1269 die_gpl_disabled "The X11 grabber" x11grab
1270 die_gpl_disabled "The software scaler" swscaler
1271 fi
1272
1273 # compute MMX state
1274 if test $mmx = "default"; then
1275 if test $arch = "x86_32" -o $arch = "x86_64"; then
1276 mmx="yes"
1277 else
1278 mmx="no"
1279 fi
1280 fi
1281
1282 test -z "$need_memalign" && need_memalign="$mmx"
1283
1284 #Darwin CC versions
1285 needmdynamicnopic="no"
1286 if test $targetos = Darwin; then
1287 if test -n "`$cc -v 2>&1 | grep xlc`"; then
1288 add_cflags "-qpdf2 -qlanglvl=extc99 -qmaxmem=-1 -qarch=auto -qtune=auto"
1289 else
1290 gcc_version="`$cc -v 2>&1 | grep version | cut -d ' ' -f3-`"
1291 case "$gcc_version" in
1292 *2.95*)
1293 add_cflags "-no-cpp-precomp -pipe"
1294 ;;
1295 *[34].*)
1296 add_cflags "-no-cpp-precomp -pipe -force_cpusubtype_ALL -Wno-sign-compare"
1297 if disabled lshared; then
1298 needmdynamicnopic="yes"
1299 fi
1300 ;;
1301 *)
1302 add_cflags "-no-cpp-precomp -pipe"
1303 if disabled lshared; then
1304 needmdynamicnopic="yes"
1305 fi
1306 ;;
1307 esac
1308 fi
1309 fi
1310
1311 disabled optimize || add_cflags -fomit-frame-pointer
1312
1313 # Can only do AltiVec on PowerPC
1314 if test $altivec = "default"; then
1315 if test $arch = "powerpc"; then
1316 altivec="yes"
1317 else
1318 altivec="no"
1319 fi
1320 fi
1321
1322 # Add processor-specific flags
1323 POWERPCMODE="32bits"
1324 if test $cpu != "generic"; then
1325 warn_altivec(){
1326 $1 altivec && echo "WARNING: Tuning for $2 but AltiVec $1.";
1327 }
1328 case $cpu in
1329 601|ppc601|PowerPC601)
1330 add_cflags "-mcpu=601"
1331 warn_altivec enabled PPC601
1332 ;;
1333 603*|ppc603*|PowerPC603*)
1334 add_cflags "-mcpu=603"
1335 warn_altivec enabled PPC603
1336 ;;
1337 604*|ppc604*|PowerPC604*)
1338 add_cflags "-mcpu=604"
1339 warn_altivec enabled PPC604
1340 ;;
1341 G3|g3|75*|ppc75*|PowerPC75*)
1342 add_cflags "-mcpu=750 -mpowerpc-gfxopt"
1343 warn_altivec enabled PPC75x
1344 ;;
1345 G4|g4|745*|ppc745*|PowerPC745*)
1346 add_cflags "-mcpu=7450 -mpowerpc-gfxopt"
1347 warn_altivec disabled PPC745x
1348 ;;
1349 74*|ppc74*|PowerPC74*)
1350 add_cflags "-mcpu=7400 -mpowerpc-gfxopt"
1351 warn_altivec disabled PPC74xx
1352 ;;
1353 G5|g5|970|ppc970|PowerPC970|power4*|Power4*)
1354 add_cflags "-mcpu=970 -mpowerpc-gfxopt -mpowerpc64"
1355 warn_altivec disabled PPC970
1356 POWERPCMODE="64bits"
1357 ;;
1358 # targets that do NOT support conditional mov (cmov)
1359 i[345]86|pentium|pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
1360 add_cflags "-march=$cpu"
1361 cmov="no"
1362 ;;
1363 # targets that do support conditional mov (cmov)
1364 i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2)
1365 add_cflags "-march=$cpu"
1366 cmov="yes"
1367 fast_cmov="yes"
1368 ;;
1369 # targets that do support conditional mov but on which it's slow
1370 pentium4|prescott|nocona)
1371 add_cflags "-march=$cpu"
1372 cmov="yes"
1373 fast_cmov="no"
1374 ;;
1375 sparc64)
1376 add_cflags "-mcpu=v9"
1377 ;;
1378 *)
1379 echo "WARNING: Unknown CPU \"$cpu\", ignored."
1380 ;;
1381 esac
1382 fi
1383
1384 gnu_make(){
1385 $1 --version 2>&1 | grep -q GNU
1386 }
1387
1388 if ! gnu_make $make; then
1389 gnu_make gmake && make=gmake || die "GNU make not found."
1390 fi
1391
1392 # make sure we can execute files in $TMPDIR
1393 cat >$TMPE 2>>$logfile <<EOF
1394 #! /bin/sh
1395 EOF
1396 chmod +x $TMPE >>$logfile 2>&1
1397 if ! $TMPE >>$logfile 2>&1; then
1398 cat <<EOF
1399 Unable to create and execute files in $TMPDIR1. Set the TMPDIR environment
1400 variable to another directory and make sure that $TMPDIR1 is not mounted
1401 noexec.
1402 EOF
1403 die "Sanity test failed."
1404 fi
1405 rm $TMPE
1406
1407 # compiler sanity check
1408 check_exec <<EOF
1409 int main(){
1410 return 0;
1411 }
1412 EOF
1413 if test "$?" != 0; then
1414 echo "$cc is unable to create an executable file."
1415 if test -z "$cross_prefix" && disabled cross_compile ; then
1416 echo "If $cc is a cross-compiler, use the --cross-compile option."
1417 echo "Only do this if you know what cross compiling means."
1418 fi
1419 die "C compiler test failed."
1420 fi
1421
1422 # check for assembler specific support
1423
1424 if test $arch = "powerpc"; then
1425 check_cc <<EOF && dcbzl=yes
1426 int main(void) {
1427 register long zero = 0;
1428 char data[1024];
1429 asm volatile("dcbzl %0, %1" : : "b" (data), "r" (zero));
1430 return 0;
1431 }
1432 EOF
1433 fi
1434
1435 # check for SIMD availability
1436
1437 # AltiVec flags: The FSF version of GCC differs from the Apple version
1438 if test $arch = "powerpc"; then
1439 if enabled altivec; then
1440 if test -n "`$cc -v 2>&1 | grep version | grep Apple`"; then
1441 add_cflags "-faltivec"
1442 else
1443 add_cflags "-maltivec -mabi=altivec"
1444 fi
1445 fi
1446 fi
1447
1448 check_header altivec.h
1449
1450 # check if our compiler supports Motorola AltiVec C API
1451 if enabled altivec; then
1452 if enabled altivec_h; then
1453 inc_altivec_h="#include <altivec.h>"
1454 else
1455 inc_altivec_h=
1456 fi
1457 check_cc <<EOF || altivec=no
1458 $inc_altivec_h
1459 int main(void) {
1460 vector signed int v1, v2, v3;
1461 v1 = vec_add(v2,v3);
1462 return 0;
1463 }
1464 EOF
1465 fi
1466
1467 # check armv5te instructions support
1468 if test $armv5te = "default" -a $arch = "armv4l"; then
1469 armv5te=no
1470 check_cc <<EOF && armv5te=yes
1471 int main(void) {
1472 __asm__ __volatile__ ("qadd r0, r0, r0");
1473 }
1474 EOF
1475 fi
1476
1477 if test $armv6 = "default" -a $arch = "armv4l"; then
1478 check_cc <<EOF && armv6=yes || armv6=no
1479 int main(void) {
1480 __asm__ __volatile__ ("sadd16 r0, r0, r0");
1481 }
1482 EOF
1483 fi
1484
1485 # check iwmmxt support
1486 if test $iwmmxt = "default" -a $arch = "armv4l"; then
1487 iwmmxt=no
1488 check_cc <<EOF && iwmmxt=yes
1489 int main(void) {
1490 __asm__ __volatile__ ("wunpckelub wr6, wr4");
1491 }
1492 EOF
1493 fi
1494
1495 # mmi only available on mips
1496 if test $mmi = "default"; then
1497 if test $arch = "mips"; then
1498 mmi="yes"
1499 else
1500 mmi="no"
1501 fi
1502 fi
1503
1504 # check if our compiler supports mmi
1505 enabled mmi && check_cc <<EOF || mmi="no"
1506 int main(void) {
1507 __asm__ ("lq \$2, 0(\$2)");
1508 return 0;
1509 }
1510 EOF
1511
1512 # ---
1513 # big/little-endian test
1514 if disabled cross_compile; then
1515 check_ld <<EOF || die "endian test failed" && $TMPE && bigendian="yes"
1516 #include <inttypes.h>
1517 int main(int argc, char ** argv){
1518 volatile uint32_t i=0x01234567;
1519 return (*((uint8_t*)(&i))) == 0x67;
1520 }
1521 EOF
1522 else
1523 # programs cannot be launched if cross compiling, so make a static guess
1524 if test "$arch" = "powerpc" -o "$arch" = "mips" ; then
1525 bigendian="yes"
1526 fi
1527 fi
1528
1529 # ---
1530 # check availability of some header files
1531
1532 check_header malloc.h
1533 check_func memalign
1534
1535 if disabled_all memalign memalign_hack && enabled need_memalign ; then
1536 die "Error, no memalign() but SSE enabled, disable it or use --enable-memalign-hack."
1537 fi
1538
1539 check_header byteswap.h
1540
1541 check_func inet_aton
1542 check_func localtime_r
1543 enabled zlib && check_lib zlib.h zlibVersion -lz || zlib="no"
1544
1545 # check for some common methods of building with pthread support
1546 # do this before the optional library checks as some of them require pthreads
1547 if enabled pthreads; then
1548 if check_func pthread_create; then
1549 :
1550 elif check_func pthread_create -pthread; then
1551 add_cflags -pthread
1552 add_ldflags -pthread
1553 elif check_func pthread_create -pthreads; then
1554 add_cflags -pthreads
1555 add_ldflags -pthreads
1556 elif ! check_lib pthread.h pthread_create -lpthread; then
1557 die "ERROR: can't find pthreads library"
1558 fi
1559 fi
1560
1561 for thread in pthreads beosthreads os2threads w32threads; do
1562 if enabled $thread; then
1563 if ! disabled thread_type ; then
1564 die "ERROR: Only one thread type must be selected."
1565 else
1566 thread_type="$thread"
1567 fi
1568 fi
1569 done
1570
1571 # these are off by default, so fail if requested and not available
1572 enabled libdts && require libdts dts.h dts_init -ldts -lm
1573 enabled libgsm && require libgsm gsm.h gsm_create -lgsm
1574 enabled libmp3lame && require LAME lame/lame.h lame_init -lmp3lame -lm
1575 enabled libtheora && require libtheora theora/theora.h theora_info_init -ltheora -logg
1576 enabled libvorbis && require libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbis -lvorbisenc -logg
1577 enabled libogg && require libogg ogg/ogg.h ogg_sync_init -logg
1578 enabled libnut && require libnut libnut.h nut_demuxer_init -lnut
1579 enabled xvid && require XviD xvid.h xvid_global -lxvidcore
1580 enabled x264 && require x264 x264.h x264_encoder_open -lx264
1581 enabled dc1394 && require libdc1394 libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394
1582 enabled mlib && require mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
1583
1584 # Ugh, libfaac uses stdcall calling convention on win32 so we can't use
1585 # the generic test functions
1586 if enabled libfaac; then
1587 save_flags
1588 temp_extralibs -lfaac
1589 check_ld <<EOF && add_extralibs -lfaac || die "ERROR: libfaac not found"
1590 #include <stdint.h>
1591 #include <faac.h>
1592 int main(){
1593 char *id, *cpr;
1594 faacEncGetVersion(&id, &cpr);
1595 return 0;
1596 }
1597 EOF
1598 restore_flags
1599 fi
1600
1601 # Ugh, recent faad2 versions have renamed all functions and #define the
1602 # old names in faad.h. Generic tests won't work.
1603 if enabled libfaad; then
1604 save_flags
1605 temp_extralibs -lfaad
1606 check_ld <<EOF && add_extralibs -lfaad || die "ERROR: libfaad not found"
1607 #include <faad.h>
1608 int main(){
1609 faacDecOpen();
1610 return 0;
1611 }
1612 EOF
1613 restore_flags
1614 fi
1615
1616 # Ugh, avisynth uses WINAPI calls. Generic tests won't work.
1617 if enabled avisynth; then
1618 save_flags
1619 temp_extralibs -lvfw32
1620 check_ld <<EOF && add_extralibs -lvfw32 || die "ERROR: vfw32 not found"
1621 #include <windows.h>
1622 #include <vfw.h>
1623 int main(){
1624 AVIFileInit();
1625 return 0;
1626 }
1627 EOF
1628 restore_flags
1629 fi
1630
1631
1632 # test for lrintf in math.h
1633 check_exec <<EOF && lrintf=yes || lrintf=no
1634 #define _ISOC9X_SOURCE 1
1635 #include <math.h>
1636 int main( void ) { return (lrintf(3.999f) > 0)?0:1; }
1637 EOF
1638
1639 _restrict=
1640 for restrict_keyword in restrict __restrict__ __restrict; do
1641 check_cc <<EOF && _restrict=$restrict_keyword && break
1642 void foo(char * $restrict_keyword p);
1643 EOF
1644 done
1645
1646 # dlopen/dlfcn.h probing
1647
1648 check_header dlfcn.h
1649
1650 if check_func dlopen; then
1651 ldl=
1652 elif check_func dlopen -ldl; then
1653 ldl=-ldl
1654 fi
1655
1656 test "$vhook" = "default" && vhook="$dlopen"
1657
1658 enabled_any vhook liba52bin libfaadbin && add_extralibs $ldl
1659
1660 if test "$targetos" = "CYGWIN" && enabled lstatic ; then
1661 vhook="no"
1662 echo
1663 echo "At the moment vhooks don't work on Cygwin static builds."
1664 echo "Patches welcome."
1665 echo
1666 fi
1667
1668 if enabled vhook; then
1669 check_ldflags -rdynamic
1670 check_ldflags -export-dynamic
1671 fi
1672
1673 enabled audio_beos && add_extralibs "-lmedia -lbe"
1674
1675 ##########################################
1676 # imlib check
1677
1678 imlib2=no
1679 if imlib2-config --version >/dev/null 2>&1; then
1680 temp_cflags `imlib2-config --cflags`
1681 temp_extralibs `imlib2-config --libs`
1682 check_lib Imlib2.h imlib_load_font && enable imlib2
1683 restore_flags
1684 fi
1685
1686 ##########################################
1687 # FreeType check
1688
1689 freetype2=no
1690 if freetype-config --version >/dev/null 2>&1; then
1691 temp_cflags `freetype-config --cflags`
1692 temp_extralibs `freetype-config --libs`
1693 check_lib ft2build.h FT_Init_FreeType && enable freetype2
1694 restore_flags
1695 fi
1696
1697 ##########################################
1698 # SDL check
1699
1700 sdl_too_old=no
1701 sdl=no
1702 SDL_CONFIG="${cross_prefix}sdl-config"
1703 if "${SDL_CONFIG}" --version >/dev/null 2>&1; then
1704 sdl_cflags=`"${SDL_CONFIG}" --cflags`
1705 temp_cflags $sdl_cflags
1706 temp_extralibs `"${SDL_CONFIG}" --libs`
1707 if check_lib SDL.h SDL_Init; then
1708 _sdlversion=`"${SDL_CONFIG}" --version | sed 's/[^0-9]//g'`
1709 if test "$_sdlversion" -lt 121 ; then
1710 sdl_too_old=yes
1711 else
1712 sdl=yes
1713 check_cc $sdl_cflags <<EOF && enable sdl_video_size
1714 #include <SDL.h>
1715 int main(void){
1716 const SDL_VideoInfo *vi = SDL_GetVideoInfo();
1717 int w = vi->current_w;
1718 return 0;
1719 }
1720 EOF
1721 fi
1722 fi
1723 restore_flags
1724 fi
1725
1726 texi2html -version >/dev/null 2>&1 && enable texi2html || disable texi2html
1727
1728 ##########################################
1729 # IPv6 check
1730
1731 enabled network && enabled ipv6 && check_ld <<EOF && ipv6=yes || ipv6=no
1732 #include <sys/types.h>
1733 #include <sys/socket.h>
1734 #include <netinet/in.h>
1735 #include <netdb.h>
1736 int main( void ) {
1737 struct sockaddr_storage saddr;
1738 struct ipv6_mreq mreq6;
1739 getaddrinfo(0,0,0,0);
1740 getnameinfo(0,0,0,0,0,0,0);
1741 IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
1742 }
1743 EOF
1744
1745 enabled video4linux && check_header linux/videodev.h || disable video4linux
1746 enabled video4linux2 && check_header linux/videodev2.h || disable video4linux2
1747
1748 # check for ioctl_meteor.h, ioctl_bt848.h and alternatives
1749 if enabled bktr; then
1750 { check_header dev/bktr/ioctl_meteor.h &&
1751 check_header dev/bktr/ioctl_bt848.h; } ||
1752 { check_header machine/ioctl_meteor.h &&
1753 check_header machine/ioctl_bt848.h; } ||
1754 { check_header dev/video/meteor/ioctl_meteor.h &&
1755 check_header dev/video/bktr/ioctl_bt848.h; } ||
1756 check_header dev/ic/bt8xx.h ||
1757 disable bktr
1758 fi
1759
1760 enabled audio_oss &&
1761 check_header sys/soundcard.h ||
1762 check_header soundcard.h ||
1763 disable audio_oss
1764
1765 # Deal with the x11 frame grabber
1766 enabled x11grab &&
1767 enabled gpl &&
1768 enabled x11_grab_device_demuxer &&
1769 check_header X11/Xlib.h &&
1770 check_header X11/extensions/XShm.h &&
1771 check_func XOpenDisplay -lX11 &&
1772 check_func XShmCreateImage -lX11 -lXext &&
1773 add_extralibs -lX11 -lXext ||
1774 disable x11_grab_device_demuxer
1775
1776 enabled debug && add_cflags -g
1777
1778 # add some useful compiler flags if supported
1779 check_cflags -Wdeclaration-after-statement
1780 check_cflags -Wall
1781 check_cflags -Wno-switch
1782 check_cflags -Wdisabled-optimization
1783 check_cflags -Wpointer-arith
1784 check_cflags -Wredundant-decls
1785 check_cflags -Wno-pointer-sign
1786 enabled extrawarnings && check_cflags -Winline
1787
1788 # add some linker flags
1789 check_ldflags $LDLATEFLAGS
1790
1791 # not all compilers support -Os
1792 test "$optimize" = "small" && check_cflags -Os
1793
1794 if enabled optimize; then
1795 if test -n "`$cc -v 2>&1 | grep xlc`"; then
1796 add_cflags "-O5"
1797 add_ldflags "-O5"
1798 else
1799 add_cflags "-O3"
1800 fi
1801 fi
1802
1803 # PIC flags for shared library objects where they are needed
1804 if enabled lshared; then
1805 # LIBOBJFLAGS may have already been set in the OS configuration
1806 if test -z "$LIBOBJFLAGS" ; then
1807 case "$arch" in
1808 x86_64|ia64|alpha|sparc*|power*) LIBOBJFLAGS="\$(PIC)" ;;
1809 esac
1810 fi
1811 fi
1812
1813 if enabled gprof; then
1814 add_cflags "-p"
1815 add_ldflags "-p"
1816 fi
1817
1818 VHOOKCFLAGS="-fPIC $CFLAGS"
1819 enabled needmdynamicnopic && add_cflags -mdynamic-no-pic
1820
1821 # find if .align arg is power-of-two or not
1822 if test $asmalign_pot = "unknown"; then
1823 asmalign_pot="no"
1824 echo 'asm (".align 3");' | check_cc && asmalign_pot="yes"
1825 fi
1826
1827 echo "install prefix $PREFIX"
1828 echo "source path $source_path"
1829 echo "C compiler $cc"
1830 echo "make $make"
1831 echo ".align is power-of-two $asmalign_pot"
1832 echo "ARCH $arch ($cpu)"
1833 if test "$BUILDSUF" != ""; then
1834 echo "build suffix $BUILDSUF"
1835 fi
1836 echo "big-endian $bigendian"
1837 if test $arch = "x86_32" -o $arch = "x86_64"; then
1838 echo "MMX enabled $mmx"
1839 echo "CMOV enabled $cmov"
1840 echo "CMOV is fast $fast_cmov"
1841 fi
1842 if test $arch = "armv4l"; then
1843 echo "ARMv5TE enabled $armv5te"
1844 echo "ARMv6 enabled $armv6"
1845 echo "IWMMXT enabled $iwmmxt"
1846 fi
1847 if test $arch = "mips"; then
1848 echo "MMI enabled $mmi"
1849 fi
1850 if test $arch = "powerpc"; then
1851 echo "AltiVec enabled $altivec"
1852 echo "dcbzl available $dcbzl"
1853 fi
1854 echo "gprof enabled $gprof"
1855 echo "debug symbols $debug"
1856 echo "strip symbols $dostrip"
1857 echo "optimize $optimize"
1858 echo "static $lstatic"
1859 echo "shared $lshared"
1860 echo "postprocessing support $pp"
1861 echo "software scaler enabled $swscaler"
1862 echo "video hooking $vhook"
1863 if enabled vhook; then
1864 echo "Imlib2 support $imlib2"
1865 echo "FreeType support $freetype2"
1866 fi
1867 echo "network support $network"
1868 if enabled network; then
1869 echo "IPv6 support $ipv6"
1870 fi
1871 echo "threading support $thread_type"
1872 echo "SDL support $sdl"
1873 if enabled sdl_too_old; then
1874 echo "-> Your SDL version is too old - please upgrade to have FFplay/SDL support."
1875 fi
1876 echo "Sun medialib support $mlib"
1877 echo "AVISynth enabled $avisynth"
1878 echo "liba52 support $liba52"
1879 echo "liba52 dlopened $liba52bin"
1880 echo "libdts support $libdts"
1881 echo "libfaac enabled $libfaac"
1882 echo "libfaad enabled $libfaad"
1883 echo "faadbin enabled $libfaadbin"
1884 echo "libgsm enabled $libgsm"
1885 echo "libmp3lame enabled $libmp3lame"
1886 echo "libnut enabled $libnut"
1887 echo "libogg enabled $libogg"
1888 echo "libtheora enabled $libtheora"
1889 echo "libvorbis enabled $libvorbis"
1890 echo "x264 enabled $x264"
1891 echo "XviD enabled $xvid"
1892 echo "zlib enabled $zlib"
1893 echo "AMR-NB float support $amr_nb"
1894 echo "AMR-NB fixed support $amr_nb_fixed"
1895 echo "AMR-WB float support $amr_wb"
1896 echo "AMR-WB IF2 support $amr_if2"
1897 if disabled gpl; then
1898 echo "License: LGPL"
1899 else
1900 echo "License: GPL"
1901 fi
1902
1903 echo "Creating config.mak and config.h..."
1904
1905 echo "# Automatically generated by configure - do not modify!" > config.mak
1906 echo "/* Automatically generated by configure - do not modify! */" > $TMPH
1907 echo "#define FFMPEG_CONFIGURATION \"$FFMPEG_CONFIGURATION\"" >> $TMPH
1908
1909 echo "PREFIX=$PREFIX" >> config.mak
1910 echo "prefix=\$(DESTDIR)\${PREFIX}" >> config.mak
1911 echo "libdir=\$(DESTDIR)$libdir" >> config.mak
1912 echo "shlibdir=\$(DESTDIR)$shlibdir" >> config.mak
1913 echo "incdir=\$(DESTDIR)$incdir" >> config.mak
1914 echo "bindir=\$(DESTDIR)$bindir" >> config.mak
1915 echo "mandir=\$(DESTDIR)$mandir" >> config.mak
1916 echo "MAKE=$make" >> config.mak
1917 echo "CC=$cc" >> config.mak
1918 echo "AR=$ar" >> config.mak
1919 echo "RANLIB=$ranlib" >> config.mak
1920 if enabled dostrip; then
1921 echo "STRIP=$strip" >> config.mak
1922 else
1923 echo "STRIP=echo ignoring strip" >> config.mak
1924 fi
1925
1926 echo "OPTFLAGS=$CFLAGS" >> config.mak
1927 echo "VHOOKCFLAGS=$VHOOKCFLAGS">>config.mak
1928 echo "LDFLAGS=$LDFLAGS" >> config.mak
1929 echo "LDCONFIG=$LDCONFIG" >> config.mak
1930 echo "FFSERVERLDFLAGS=$FFSERVERLDFLAGS" >> config.mak
1931 echo "SHFLAGS=$SHFLAGS" >> config.mak
1932 echo "VHOOKSHFLAGS=$VHOOKSHFLAGS" >> config.mak
1933 echo "VHOOKLIBS=$VHOOKLIBS" >> config.mak
1934 echo "LIBOBJFLAGS=$LIBOBJFLAGS" >> config.mak
1935 echo "BUILD_STATIC=$lstatic" >> config.mak
1936 echo "BUILDSUF=$BUILDSUF" >> config.mak
1937 echo "LIBPREF=$LIBPREF" >> config.mak
1938 echo "LIBSUF=\${BUILDSUF}$LIBSUF" >> config.mak
1939 if enabled lstatic; then
1940 echo "LIB=$LIB" >> config.mak
1941 else # Some Make complain if this variable does not exist.
1942 echo "LIB=" >> config.mak
1943 fi
1944 echo "SLIBPREF=$SLIBPREF" >> config.mak
1945 echo "SLIBSUF=\${BUILDSUF}$SLIBSUF" >> config.mak
1946 echo "EXESUF=\${BUILDSUF}$EXESUF" >> config.mak
1947 echo "TARGET_OS=$targetos" >> config.mak
1948
1949 ucarch=`toupper $arch`
1950 echo "TARGET_ARCH_${ucarch}=yes" >> config.mak
1951 echo "#define ARCH_${ucarch} 1" >> $TMPH
1952
1953 # special cases
1954 case "$arch" in
1955 x86_32|x86_64)
1956 echo "TARGET_ARCH_X86=yes" >> config.mak
1957 echo "#define ARCH_X86 1" >> $TMPH
1958 ;;
1959 powerpc)
1960 if test "$POWERPCMODE" = "64bits"; then
1961 echo "#define POWERPC_MODE_64BITS 1" >> $TMPH
1962 fi
1963 if enabled powerpc_perf; then
1964 echo "#define POWERPC_PERFORMANCE_REPORT 1" >> $TMPH
1965 fi
1966 ;;
1967 sparc64)
1968 echo "TARGET_ARCH_SPARC=yes" >> config.mak
1969 echo "#define ARCH_SPARC 1" >> $TMPH
1970 ;;
1971 esac
1972
1973 if enabled bigendian; then
1974 echo "WORDS_BIGENDIAN=yes" >> config.mak
1975 echo "#define WORDS_BIGENDIAN 1" >> $TMPH
1976 fi
1977 if enabled mmx; then
1978 echo "#define __CPU__ 586" >> $TMPH
1979 fi
1980
1981 if enabled sdl; then
1982 echo "SDL_LIBS=`"${SDL_CONFIG}" --libs`" >> config.mak
1983 echo "SDL_CFLAGS=`"${SDL_CONFIG}" --cflags`" >> config.mak
1984 fi
1985 if enabled texi2html; then
1986 echo "BUILD_DOC=yes" >> config.mak
1987 fi
1988
1989 sws_version=`grep '#define LIBSWSCALE_VERSION ' "$source_path/libswscale/swscale.h" | sed 's/[^0-9\.]//g'`
1990 pp_version=`grep '#define LIBPOSTPROC_VERSION ' "$source_path/libpostproc/postprocess.h" | sed 's/[^0-9\.]//g'`
1991 lavc_version=`grep '#define LIBAVCODEC_VERSION ' "$source_path/libavcodec/avcodec.h" | sed 's/[^0-9\.]//g'`
1992 lavf_version=`grep '#define LIBAVFORMAT_VERSION ' "$source_path/libavformat/avformat.h" | sed 's/[^0-9\.]//g'`
1993 lavu_version=`grep '#define LIBAVUTIL_VERSION ' "$source_path/libavutil/avutil.h" | sed 's/[^0-9\.]//g'`
1994
1995
1996
1997 if enabled lshared; then
1998 echo "BUILD_SHARED=yes" >> config.mak
1999 echo "PIC=-fPIC -DPIC" >> config.mak
2000 echo "SPPMAJOR=${pp_version%%.*}" >> config.mak
2001 echo "SPPVERSION=$pp_version" >> config.mak
2002 echo "LAVCMAJOR=${lavc_version%%.*}" >> config.mak
2003 echo "LAVCVERSION=$lavc_version" >> config.mak
2004 echo "LAVFMAJOR=${lavf_version%%.*}" >> config.mak
2005 echo "LAVFVERSION=$lavf_version" >> config.mak
2006 echo "LAVUMAJOR=${lavu_version%%.*}" >> config.mak
2007 echo "LAVUVERSION=$lavu_version" >> config.mak
2008 echo "SWSMAJOR=${sws_version%%.*}" >> config.mak
2009 echo "SWSVERSION=$sws_version" >> config.mak
2010 echo "SLIBNAME=${SLIBNAME}" >> config.mak
2011 echo "SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}" >> config.mak
2012 echo "SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}" >> config.mak
2013 echo "SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}" >> config.mak
2014 echo "SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}" >> config.mak
2015 fi
2016 echo "LIB_INSTALL_EXTRA_CMD=${LIB_INSTALL_EXTRA_CMD}" >> config.mak
2017 echo "EXTRALIBS=$extralibs" >> config.mak
2018
2019 enabled_any $ENCODER_LIST && enable encoders
2020 enabled_any $DECODER_LIST && enable decoders
2021 enabled_any $MUXER_LIST && enable muxers
2022 enabled_any $DEMUXER_LIST && enable demuxers
2023
2024 enabled_any pthreads beosthreads os2threads w32threads && enable threads
2025
2026 check_deps $CONFIG_LIST $HAVE_LIST $DECODER_LIST $ENCODER_LIST $PARSER_LIST \
2027 $DEMUXER_LIST $MUXER_LIST
2028
2029 print_config HAVE_ $TMPH config.mak $HAVE_LIST
2030 print_config CONFIG_ $TMPH config.mak $CONFIG_LIST
2031 print_config TARGET_ $TMPH config.mak $TARGET_LIST
2032
2033 if test "$targetos" = "Darwin"; then
2034 echo "#define CONFIG_DARWIN 1" >> $TMPH
2035 fi
2036
2037 echo "#define restrict $_restrict" >> $TMPH
2038
2039 if test "$optimize" = "small"; then
2040 echo "#define always_inline" >> $TMPH
2041 echo "#define CONFIG_SMALL 1" >> $TMPH
2042 fi
2043
2044 echo "SRC_PATH=\"$source_path\"" >> config.mak
2045 echo "SRC_PATH_BARE=$source_path" >> config.mak
2046 echo "BUILD_ROOT=\"$PWD\"" >> config.mak
2047
2048 if enabled amr_if2; then
2049 echo "AMR_CFLAGS=-DIF2=1" >> config.mak
2050 fi
2051
2052 # Apparently it's not possible to portably echo a backslash.
2053 if enabled asmalign_pot; then
2054 printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH
2055 else
2056 printf '#define ASMALIGN(ZEROBITS) ".align 1<<" #ZEROBITS "\\n\\t"\n' >> $TMPH
2057 fi
2058
2059
2060 for codec in $DECODER_LIST $ENCODER_LIST $PARSER_LIST $DEMUXER_LIST $MUXER_LIST; do
2061 ucname="`toupper $codec`"
2062 config_name="CONFIG_$ucname"
2063 enabled_name="ENABLE_$ucname"
2064 if enabled $codec; then
2065 echo "#define $config_name 1" >> $TMPH
2066 echo "#define $enabled_name 1" >> $TMPH
2067 echo "$config_name=yes" >> config.mak
2068 else
2069 echo "#define $enabled_name 0" >> $TMPH
2070 fi
2071 done
2072
2073 # Do not overwrite config.h if unchanged to avoid superfluous rebuilds.
2074 if ! cmp -s $TMPH config.h; then
2075 mv -f $TMPH config.h
2076 else
2077 echo "config.h is unchanged"
2078 fi
2079
2080 rm -f $TMPO $TMPC $TMPE $TMPS $TMPH
2081
2082 # build tree in object directory if source path is different from current one
2083 if enabled source_path_used; then
2084 DIRS="\
2085 doc \
2086 libavformat \
2087 libavcodec \
2088 libavcodec/alpha \
2089 libavcodec/armv4l \
2090 libavcodec/bfin \
2091 libavcodec/i386 \
2092 libavcodec/sparc \
2093 libavcodec/mlib \
2094 libavcodec/ppc \
2095 libavcodec/liba52 \
2096 libavcodec/amr \
2097 libavcodec/amr_float \
2098 libavcodec/amrwb_float \
2099 libpostproc \
2100 libavutil \
2101 libswscale \
2102 tests \
2103 vhook \
2104 "
2105 FILES="\
2106 Makefile \
2107 common.mak \
2108 libavformat/Makefile \
2109 libavcodec/Makefile \
2110 libpostproc/Makefile \
2111 libavutil/Makefile \
2112 libswscale/Makefile \
2113 tests/Makefile \
2114 vhook/Makefile \
2115 doc/Makefile \
2116 doc/texi2pod.pl \
2117 "
2118 for dir in $DIRS ; do
2119 mkdir -p $dir
2120 done
2121 for f in $FILES ; do
2122 ln -sf "$source_path/$f" $f
2123 done
2124 fi
2125
2126
2127 # build pkg-config files
2128 # FIXME: libdir and includedir are hardcoded and may differ from the real path.
2129
2130 pkgconfig_generate(){
2131 name=$1
2132 comment=$2
2133 version=$3
2134 libs=$4
2135 requires=$5
2136 include=$6
2137 cat <<EOF >$name.pc
2138 prefix=$PREFIX
2139 exec_prefix=\${prefix}
2140 libdir=\${exec_prefix}/lib
2141 includedir=\${prefix}/include
2142
2143 Name: $name
2144 Description: $comment
2145 Version: $version
2146 Requires: $requires
2147 Conflicts:
2148 Libs: -L\${libdir} $libs
2149 Cflags: -I\${includedir} -I\${includedir}/$include
2150 EOF
2151 }
2152
2153 pkgconfig_generate_uninstalled(){
2154 name=$1
2155 shortname=${name#lib}
2156 comment=$2
2157 version=$3
2158 libs=$4
2159 requires=$5
2160 cat <<EOF >$name-uninstalled.pc
2161 prefix=
2162 exec_prefix=
2163 libdir=\${pcfiledir}/$name
2164 includedir=\${pcfiledir}/$name
2165
2166 Name: $name
2167 Description: $comment
2168 Version: $version
2169 Requires: $requires
2170 Conflicts:
2171 Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
2172 Cflags: -I\${includedir}
2173 EOF
2174 }
2175
2176 pkgconfig_generate libavutil "FFmpeg utility library" "$lavu_version" -lavutil "" ffmpeg
2177 pkgconfig_generate_uninstalled libavutil "FFmpeg utility library" "$lavu_version"
2178
2179 pkgconfig_generate libavcodec "FFmpeg codec library" "$lavc_version" "-lavcodec $extralibs" "$pkg_requires libavutil = $lavu_version" ffmpeg
2180 pkgconfig_generate_uninstalled libavcodec "FFmpeg codec library" "$lavc_version" "$extralibs" "$pkg_requires libavutil = $lavu_version"
2181
2182 pkgconfig_generate libavformat "FFmpeg container format library" "$lavf_version" "-lavformat $extralibs" "$pkg_requires libavcodec = $lavc_version" ffmpeg
2183 pkgconfig_generate_uninstalled libavformat "FFmpeg container format library" "$lavf_version" "$extralibs" "$pkg_requires libavcodec = $lavc_version"
2184
2185 if enabled pp; then
2186 pkgconfig_generate libpostproc "FFmpeg post processing library" "$pp_version" -lpostproc "" postproc
2187 pkgconfig_generate_uninstalled libpostproc "FFmpeg post processing library" "$pp_version"
2188 fi
2189
2190 if enabled swscaler; then
2191 pkgconfig_generate libswscale "FFmpeg image rescaling library" "$sws_version" "-lswscale" "libavutil = $lavu_version" swscale
2192 pkgconfig_generate_uninstalled libswscale "FFmpeg image rescaling library" "$sws_version" "" "libavutil = $lavu_version"
2193 else
2194 pkgconfig_generate libswscale "FFmpeg image rescaling library" "$sws_version" "" "$pkg_requires libavcodec = $lavc_version" swscale
2195 pkgconfig_generate_uninstalled libswscale "FFmpeg image rescaling library" "$sws_version" "" "$pkg_requires libavcodec = $lavc_version"
2196 apply libswscale.pc sed s/^Libs:.*$/Libs:/
2197 apply libswscale-uninstalled.pc sed s/^Libs:.*$/Libs:/
2198 fi