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