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