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