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