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