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