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