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