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