Rename --disable-opts option to --disable-optimizations in order to be less
[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-pthreads use pthreads [default=no]"
75 echo " --enable-w32threads use Win32 threads [default=no]"
76 echo " --enable-x11grab enable X11 grabbing [default=no]"
77 echo
78 echo "External library support:"
79 echo " --enable-sunmlib use Sun medialib [default=no]"
80 echo " --enable-liba52 enable GPLed liba52 support [default=no]"
81 echo " --enable-liba52bin open liba52.so.0 at runtime [default=no]"
82 echo " --enable-avisynth allow reading AVISynth script files [default=no]"
83 echo " --enable-libamr-nb enable libamr-nb floating point audio codec"
84 echo " --enable-libamr-wb enable libamr-wb floating point audio codec"
85 echo " --enable-libdc1394 enable IIDC-1394 grabbing using libdc1394"
86 echo " and libraw1394 [default=no]"
87 echo " --enable-libfaac enable FAAC support via libfaac [default=no]"
88 echo " --enable-libfaad enable FAAD support via libfaad [default=no]"
89 echo " --enable-libfaadbin open libfaad.so.0 at runtime [default=no]"
90 echo " --enable-libgsm enable GSM support via libgsm [default=no]"
91 echo " --enable-libmp3lame enable MP3 encoding via libmp3lame [default=no]"
92 echo " --enable-libnut enable NUT (de)muxing via libnut,"
93 echo " native demuxer exists [default=no]"
94 echo " --enable-libogg enable Ogg muxing via libogg [default=no]"
95 echo " --enable-libtheora enable Theora encoding via libtheora [default=no]"
96 echo " --enable-libvorbis enable Vorbis en/decoding via libvorbis,"
97 echo " native implementations exist [default=no]"
98 echo " --enable-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(){
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(){
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(){
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(){
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 libogg
624 libtheora
625 libvorbis
626 libx264
627 libxvid
628 memalign_hack
629 mpegaudio_hp
630 network
631 powerpc_perf
632 pp
633 small
634 swscaler
635 vhook
636 x11grab
637 zlib
638 "
639
640 THREADS_LIST='
641 beosthreads
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_decoder_deps="libvorbis"
786 libvorbis_encoder_deps="libvorbis"
787 libx264_encoder_deps="libx264"
788 libxvid_encoder_deps="libxvid"
789 mpeg4aac_decoder_deps="libfaad"
790
791 # demuxers / muxers
792 ac3_demuxer_deps="ac3_parser"
793 audio_beos_demuxer_deps="audio_beos"
794 audio_beos_demuxer_extralibs="-lmedia -lbe"
795 audio_beos_muxer_deps="audio_beos"
796 audio_beos_muxer_extralibs="-lmedia -lbe"
797 avisynth_demuxer_deps="avisynth"
798 bktr_demuxer_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
799 dv1394_demuxer_deps="dv1394"
800 libdc1394_demuxer_deps="libdc1394"
801 libnut_demuxer_deps="libnut"
802 libnut_muxer_deps="libnut"
803 mp3_demuxer_deps="mpegaudio_parser"
804 ogg_muxer_deps="libogg"
805 oss_demuxer_deps_any="soundcard_h sys_soundcard_h"
806 oss_muxer_deps_any="soundcard_h sys_soundcard_h"
807 redir_demuxer_deps="network"
808 rtp_muxer_deps="network mpegts_demuxer"
809 rtsp_demuxer_deps="rtp_protocol rtp_muxer"
810 sdp_demuxer_deps="rtsp_demuxer"
811 v4l2_demuxer_deps="linux_videodev2_h"
812 v4l_demuxer_deps="linux_videodev_h"
813 x11_grab_device_demuxer_deps="x11grab XShmCreateImage"
814 x11_grab_device_demuxer_extralibs="-lX11 -lXext"
815
816 # protocols
817 http_protocol_deps="network"
818 rtp_protocol_deps="udp_protocol"
819 tcp_protocol_deps="network"
820 udp_protocol_deps="network"
821
822 # programs
823 ffplay_deps="sdl"
824 ffserver_deps="ffm_muxer rtp_protocol rtsp_demuxer"
825 ffserver_extralibs='$ldl'
826 vhook_extralibs='$ldl'
827
828
829 # set temporary file name
830 if test ! -z "$TMPDIR" ; then
831 TMPDIR1="${TMPDIR}"
832 elif test ! -z "$TEMPDIR" ; then
833 TMPDIR1="${TEMPDIR}"
834 else
835 TMPDIR1="/tmp"
836 fi
837
838 TMPC="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.c"
839 TMPO="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.o"
840 TMPE="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}"
841 TMPS="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.S"
842 TMPH="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.h"
843
844 # default parameters
845
846 enable logging
847 logfile="config.err"
848
849 # installation paths
850 PREFIX="/usr/local"
851 libdir='$(PREFIX)/lib'
852 shlibdir="$libdir"
853 incdir='$(PREFIX)/include/ffmpeg'
854 mandir='$(PREFIX)/share/man'
855 bindir='$(PREFIX)/bin'
856
857 # toolchain
858 cc="gcc"
859 ar="ar"
860 ranlib="ranlib"
861 make="make"
862 strip="strip"
863 asmalign_pot="unknown"
864 ln_s="ln -sf"
865
866 # machine
867 arch=`uname -m`
868 cpu="generic"
869
870 # OS
871 targetos=$(tolower $(uname -s))
872
873 # libraries
874 enable zlib
875
876 # configurable options
877 enable debug
878 enable dostrip
879 enable ffmpeg
880 enable ffplay
881 enable ffserver
882 enable ipv6
883 enable static
884 enable mpegaudio_hp
885 enable network
886 enable optimizations
887 enable protocols
888 vhook="default"
889
890 # build settings
891 SHFLAGS='-shared -Wl,-soname,$@'
892 VHOOKSHFLAGS='$(SHFLAGS)'
893 LDLATEFLAGS='-Wl,-rpath-link,\$(BUILD_ROOT)/libavcodec -Wl,-rpath-link,\$(BUILD_ROOT)/libavformat -Wl,-rpath-link,\$(BUILD_ROOT)/libavutil'
894 FFSERVERLDFLAGS=-Wl,-E
895 LDCONFIG="ldconfig"
896 LIBPREF="lib"
897 LIBSUF=".a"
898 FULLNAME='$(NAME)$(BUILDSUF)'
899 LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
900 SLIBPREF="lib"
901 SLIBSUF=".so"
902 SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
903 SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
904 SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
905 LIB_INSTALL_EXTRA_CMD='$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
906
907 # find source path
908 source_path="`dirname \"$0\"`"
909 enable source_path_used
910 if test -z "$source_path" -o "$source_path" = "." ; then
911 source_path="`pwd`"
912 disable source_path_used
913 else
914 source_path="`cd \"$source_path\"; pwd`"
915 echo "$source_path" | grep -q '[[:blank:]]' &&
916 die "Out of tree builds are impossible with whitespace in source path."
917 fi
918
919 FFMPEG_CONFIGURATION="$@"
920
921 ENCODER_LIST=`sed -n 's/^[^#]*ENC.*(.*, *\(.*\)).*/\1_encoder/p' "$source_path/libavcodec/allcodecs.c"`
922 DECODER_LIST=`sed -n 's/^[^#]*DEC.*(.*, *\(.*\)).*/\1_decoder/p' "$source_path/libavcodec/allcodecs.c"`
923 PARSER_LIST=`sed -n 's/^[^#]*PARSER.*(.*, *\(.*\)).*/\1_parser/p' "$source_path/libavcodec/allcodecs.c"`
924 BSF_LIST=`sed -n 's/^[^#]*BSF.*(.*, *\(.*\)).*/\1_bsf/p' "$source_path/libavcodec/allcodecs.c"`
925 MUXER_LIST=`sed -n 's/^[^#]*_MUX.*(.*, *\(.*\)).*/\1_muxer/p' "$source_path/libavformat/allformats.c"`
926 DEMUXER_LIST=`sed -n 's/^[^#]*DEMUX.*(.*, *\(.*\)).*/\1_demuxer/p' "$source_path/libavformat/allformats.c"`
927 PROTOCOL_LIST=`sed -n 's/^[^#]*PROTOCOL.*(.*, *\(.*\)).*/\1_protocol/p' "$source_path/libavformat/allformats.c"`
928
929 enable $ENCODER_LIST $DECODER_LIST $PARSER_LIST $MUXER_LIST $DEMUXER_LIST $PROTOCOL_LIST $BSF_LIST
930 enable $ARCH_EXT_LIST
931
932 die_unknown(){
933 echo "Unknown option \"$1\"."
934 echo "See $0 --help for available options."
935 exit 1
936 }
937
938 show_list() {
939 for part in $*; do
940 echo $part | sed 's/_[^_]*$//'
941 done | sort
942 exit 0
943 }
944
945 for opt do
946 optval="${opt#*=}"
947 case "$opt" in
948 --log)
949 ;;
950 --log=*) logging="$optval"
951 ;;
952 --prefix=*) PREFIX="$optval"
953 ;;
954 --libdir=*) libdir="$optval"
955 ;;
956 --shlibdir=*) shlibdir="$optval"
957 ;;
958 --incdir=*) incdir="$optval"
959 ;;
960 --mandir=*) mandir="$optval"
961 ;;
962 --source-path=*) source_path="$optval"
963 ;;
964 --cross-prefix=*) cross_prefix="$optval"
965 ;;
966 --cross-compile) enable cross_compile
967 ;;
968 --target-os=*) targetos="$optval"
969 ;;
970 --cc=*) cc="$optval"
971 ;;
972 --make=*) make="$optval"
973 ;;
974 --extra-cflags=*) add_cflags "$optval"
975 ;;
976 --extra-ldflags=*) add_ldflags "$optval"
977 ;;
978 --extra-libs=*) add_extralibs "$optval"
979 ;;
980 --build-suffix=*) BUILDSUF="$optval"
981 ;;
982 --arch=*) arch="$optval"
983 ;;
984 --cpu=*) cpu="$optval"
985 ;;
986 --enable-sunmlib) enable mlib
987 ;;
988 --disable-strip) disable dostrip
989 ;;
990 --disable-encoders) disable $ENCODER_LIST
991 ;;
992 --disable-decoders) disable $DECODER_LIST
993 ;;
994 --disable-muxers) disable $MUXER_LIST
995 ;;
996 --disable-demuxers) disable $DEMUXER_LIST
997 ;;
998 --disable-parsers) disable $PARSER_LIST
999 ;;
1000 --disable-bsfs) disable $BSF_LIST
1001 ;;
1002 --disable-protocols) disable $PROTOCOL_LIST
1003 ;;
1004 --enable-*=*|--disable-*=*)
1005 eval `echo "$opt" | sed 's/=/-/;s/--/action=/;s/-/ thing=/;s/-/ name=/'`
1006 case "$thing" in
1007 encoder|decoder|muxer|demuxer|parser|bsf|protocol) $action ${optval}_${thing} ;;
1008 *) die_unknown "$opt" ;;
1009 esac
1010 ;;
1011 --enable-?*|--disable-?*)
1012 eval `echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g'`
1013 echo "$CMDLINE_SELECT" | grep -q "^ *$option\$" || die_unknown $opt
1014 $action $option
1015 ;;
1016 --list-*)
1017 NAME="${opt#--list-}"
1018 is_in $NAME $COMPONENT_LIST || die_unknown $opt
1019 NAME=$(toupper ${NAME%s})
1020 eval show_list \$${NAME}_LIST
1021 ;;
1022 --help|-h) show_help
1023 ;;
1024 *)
1025 die_unknown $opt
1026 ;;
1027 esac
1028 done
1029
1030 case "$arch" in
1031 i386|i486|i586|i686|i86pc|BePC)
1032 arch="x86_32"
1033 enable fast_unaligned
1034 ;;
1035 x86_64|amd64)
1036 arch="x86_32"
1037 enable fast_unaligned
1038 canon_arch="`$cc -dumpmachine | sed -e 's,\([^-]*\)-.*,\1,'`"
1039 if [ x"$canon_arch" = x"x86_64" -o x"$canon_arch" = x"amd64" ]; then
1040 if [ -z "`echo $CFLAGS | grep -- -m32`" ]; then
1041 arch="x86_64"
1042 enable fast_64bit
1043 fi
1044 fi
1045 ;;
1046 # armv4l is a subset of armv[567]*l
1047 arm|armv[4567]*l)
1048 arch="armv4l"
1049 ;;
1050 alpha)
1051 arch="alpha"
1052 enable fast_64bit
1053 ;;
1054 "Power Macintosh"|ppc|powerpc)
1055 arch="powerpc"
1056 ;;
1057 ppc64)
1058 arch="powerpc"
1059 enable fast_64bit
1060 ;;
1061 mips|mipsel|IP*)
1062 arch="mips"
1063 ;;
1064 sun4u|sparc64)
1065 arch="sparc64"
1066 enable fast_64bit
1067 ;;
1068 sparc)
1069 arch="sparc"
1070 ;;
1071 sh4)
1072 arch="sh4"
1073 ;;
1074 parisc)
1075 arch="parisc"
1076 ;;
1077 parisc64)
1078 arch="parisc"
1079 enable fast_64bit
1080 ;;
1081 s390|s390x)
1082 arch="s390"
1083 ;;
1084 m68k)
1085 arch="m68k"
1086 ;;
1087 ia64)
1088 arch="ia64"
1089 enable fast_64bit
1090 ;;
1091 bfin)
1092 arch="bfin"
1093 ;;
1094 *)
1095 arch="unknown"
1096 ;;
1097 esac
1098
1099 enable $arch
1100 enabled_any x86_32 x86_64 && enable x86
1101 enabled sparc64 && enable sparc
1102
1103 # OS specific
1104 case $targetos in
1105 beos|haiku|zeta)
1106 PREFIX="$HOME/config"
1107 # helps building libavcodec
1108 add_cflags "-DPIC -fomit-frame-pointer"
1109 # 3 gcc releases known for BeOS, each with ugly bugs
1110 gcc_version="`$cc -v 2>&1 | grep version | cut -d ' ' -f3-`"
1111 case "$gcc_version" in
1112 2.9-beos-991026*|2.9-beos-000224*) echo "R5/GG gcc"
1113 disable mmx
1114 ;;
1115 *20010315*) echo "BeBits gcc"
1116 add_cflags "-fno-expensive-optimizations"
1117 ;;
1118 esac
1119 LDCONFIG="echo ignoring ldconfig"
1120 SHFLAGS=-nostart
1121 # enable BeOS things
1122 enable audio_beos
1123 # no need for libm, but the inet stuff
1124 # Check for BONE
1125 # XXX: actually should check for NOT net_server
1126 if (echo $BEINCLUDES|grep 'headers/be/bone' >/dev/null); then
1127 network_extralibs="-lbind -lsocket"
1128 else
1129 enable beos_netserver
1130 network_extralibs="-lnet"
1131 fi ;;
1132 sunos)
1133 FFSERVERLDFLAGS=""
1134 SHFLAGS='-shared -Wl,-h,$@'
1135 network_extralibs="-lsocket -lnsl"
1136 ;;
1137 netbsd)
1138 oss_demuxer_extralibs="-lossaudio"
1139 oss_muxer_extralibs="-lossaudio"
1140 ;;
1141 openbsd)
1142 disable need_memalign
1143 LIBOBJFLAGS='$(PIC)'
1144 LDCONFIG='ldconfig -m $(SHLIBDIR)'
1145 SHFLAGS='-shared'
1146 SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF).$(LIBVERSION)'
1147 SLIBNAME_WITH_VERSION='$(SLIBNAME)'
1148 SLIBNAME_WITH_MAJOR='$(SLIBNAME)'
1149 oss_demuxer_extralibs="-lossaudio"
1150 oss_muxer_extralibs="-lossaudio"
1151 ;;
1152 freebsd)
1153 disable need_memalign
1154 ;;
1155 bsd/os)
1156 osextralibs="-lpoll -lgnugetopt"
1157 strip="strip -d"
1158 ;;
1159 darwin)
1160 disable need_memalign
1161 SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME),-current_version,$(SPPVERSION),-compatibility_version,$(SPPVERSION) -Wl,-read_only_relocs,suppress'
1162 VHOOKSHFLAGS='-dynamiclib -Wl,-single_module -flat_namespace -undefined suppress -Wl,-install_name,$(SHLIBDIR)/vhook/$@'
1163 strip="strip -x"
1164 FFLDFLAGS="-Wl,-dynamic,-search_paths_first"
1165 SLIBSUF=".dylib"
1166 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
1167 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
1168 FFSERVERLDFLAGS=-Wl,-bind_at_load
1169 ;;
1170 mingw32*)
1171 targetos=mingw32
1172 shlibdir="$bindir"
1173 VHOOKSHFLAGS='-shared -L$(BUILD_ROOT)/libavformat -L$(BUILD_ROOT)/libavcodec -L$(BUILD_ROOT)/libavutil'
1174 VHOOKLIBS='-lavformat$(BUILDSUF) -lavcodec$(BUILDSUF) -lavutil$(BUILDSUF) $(EXTRALIBS)'
1175 if enabled swscaler; then
1176 VHOOKSHFLAGS="$VHOOKSHFLAGS -L\$(BUILD_ROOT)/libswscale"
1177 VHOOKLIBS="$VHOOKLIBS -lswscale\$(BUILDSUF)"
1178 fi
1179 disable ffserver
1180 SLIBPREF=""
1181 SLIBSUF=".dll"
1182 EXESUF=".exe"
1183 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1184 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1185 SLIB_EXTRA_CMD='-lib /machine:i386 /def:$(@:$(SLIBSUF)=.def)'
1186 SLIB_INSTALL_EXTRA_CMD='-install -m 644 $(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"'
1187 SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"'
1188 SHFLAGS='-shared -Wl,--output-def,$(@:$(SLIBSUF)=.def) -Wl,--enable-runtime-pseudo-reloc -Wl,--enable-auto-image-base'
1189 ;;
1190 cygwin*)
1191 targetos=cygwin
1192 shlibdir="$bindir"
1193 VHOOKSHFLAGS='-shared -L$(BUILD_ROOT)/libavformat -L$(BUILD_ROOT)/libavcodec -L$(BUILD_ROOT)/libavutil'
1194 VHOOKLIBS='-lavformat$(BUILDSUF) -lavcodec$(BUILDSUF) -lavutil$(BUILDSUF) $(EXTRALIBS)'
1195 if enabled swscaler; then
1196 VHOOKSHFLAGS="$VHOOKSHFLAGS -L\$(BUILD_ROOT)/libswscale"
1197 VHOOKLIBS="$VHOOKLIBS -lswscale\$(BUILDSUF)"
1198 fi
1199 EXESUF=".exe"
1200 SLIBPREF="cyg"
1201 SLIBSUF=".dll"
1202 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1203 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1204 SHFLAGS='-shared -Wl,--enable-auto-image-base'
1205 ;;
1206 linux)
1207 LDLATEFLAGS="-Wl,--as-needed $LDLATEFLAGS"
1208 enable dv1394
1209 ;;
1210 irix*)
1211 targetos=irix
1212 ranlib="echo ignoring ranlib"
1213 ;;
1214 *)
1215 targetos="${targetos}-UNKNOWN"
1216 ;;
1217 esac
1218
1219 add_extralibs $osextralibs
1220
1221 if ! disabled logging ; then
1222 enabled logging || logfile="$logging"
1223 echo "# $0 $@" >$logfile
1224 set >>$logfile
1225 else
1226 logfile=/dev/null
1227 fi
1228
1229 # Combine FFLDFLAGS and the LDFLAGS environment variable.
1230 LDFLAGS="$FFLDFLAGS $LDFLAGS"
1231
1232 test -n "$cross_prefix" && enable cross_compile
1233 cc="${cross_prefix}${cc}"
1234 ar="${cross_prefix}${ar}"
1235 ranlib="${cross_prefix}${ranlib}"
1236 strip="${cross_prefix}${strip}"
1237
1238 # we need to build at least one lib type
1239 if ! enabled_any static shared; then
1240 cat <<EOF
1241 At least one library type must be built.
1242 Specify --enable-static to build the static libraries or --enable-shared to
1243 build the shared libraries as well. To only build the shared libraries specify
1244 --disable-static in addition to --enable-shared.
1245 EOF
1246 exit 1;
1247 fi
1248
1249 disabled static && LIBNAME=""
1250
1251 if ! enabled libogg; then
1252 enabled libtheora && die "libogg must be enabled to enable libtheora."
1253 enabled libvorbis && die "libogg must be enabled to enable libvorbis."
1254 fi
1255
1256 if enabled_any libfaad libfaadbin ; then
1257 if check_header faad.h; then
1258 check_cc << EOF
1259 #include <faad.h>
1260 #ifndef FAAD2_VERSION
1261 ok faad1
1262 #endif
1263 int main( void ) { return 0; }
1264 EOF
1265 test $? = 0 && enable libfaad2
1266 else
1267 die "FAAD test failed."
1268 fi
1269 fi
1270
1271
1272 if ! enabled gpl; then
1273 die_gpl_disabled(){
1274 name=$1
1275 shift
1276 enabled_any $@ && die "$name is under GPL and --enable-gpl is not specified."
1277 }
1278 die_gpl_disabled "The Postprocessing code" pp
1279 die_gpl_disabled "liba52" liba52
1280 die_gpl_disabled "libx264" libx264
1281 die_gpl_disabled "libxvidcore" libxvid
1282 die_gpl_disabled "FAAD2" libfaad2
1283 die_gpl_disabled "The X11 grabber" x11grab
1284 die_gpl_disabled "The software scaler" swscaler
1285 fi
1286
1287 check_deps $ARCH_EXT_LIST
1288
1289 test -z "$need_memalign" && need_memalign="$mmx"
1290
1291 #Darwin CC versions
1292 if test $targetos = darwin; then
1293 if test -n "`$cc -v 2>&1 | grep xlc`"; then
1294 add_cflags "-qpdf2 -qlanglvl=extc99 -qmaxmem=-1 -qarch=auto -qtune=auto"
1295 else
1296 add_cflags "-no-cpp-precomp -pipe"
1297 check_cflags "-force_cpusubtype_ALL"
1298 check_cflags "-Wno-sign-compare"
1299 disabled shared && add_cflags -mdynamic-no-pic
1300 fi
1301 fi
1302
1303 disabled optimizations || add_cflags -fomit-frame-pointer
1304
1305 # Add processor-specific flags
1306 if test $cpu != "generic"; then
1307 warn_altivec(){
1308 $1 altivec && echo "WARNING: Tuning for $2 but AltiVec $1.";
1309 }
1310 case $cpu in
1311 601|ppc601|PowerPC601)
1312 add_cflags "-mcpu=601"
1313 warn_altivec enabled PPC601
1314 ;;
1315 603*|ppc603*|PowerPC603*)
1316 add_cflags "-mcpu=603"
1317 warn_altivec enabled PPC603
1318 ;;
1319 604*|ppc604*|PowerPC604*)
1320 add_cflags "-mcpu=604"
1321 warn_altivec enabled PPC604
1322 ;;
1323 G3|g3|75*|ppc75*|PowerPC75*)
1324 add_cflags "-mcpu=750 -mpowerpc-gfxopt"
1325 warn_altivec enabled PPC75x
1326 ;;
1327 G4|g4|745*|ppc745*|PowerPC745*)
1328 add_cflags "-mcpu=7450 -mpowerpc-gfxopt"
1329 warn_altivec disabled PPC745x
1330 ;;
1331 74*|ppc74*|PowerPC74*)
1332 add_cflags "-mcpu=7400 -mpowerpc-gfxopt"
1333 warn_altivec disabled PPC74xx
1334 ;;
1335 G5|g5|970|ppc970|PowerPC970|power4*|Power4*)
1336 add_cflags "-mcpu=970 -mpowerpc-gfxopt -mpowerpc64"
1337 warn_altivec disabled PPC970
1338 enable ppc64
1339 ;;
1340 Cell|CELL|cell)
1341 add_cflags "-mcpu=cell"
1342 warn_altivec disabled Cell
1343 enable ppc64
1344 ;;
1345 # targets that do NOT support conditional mov (cmov)
1346 i[345]86|pentium|pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
1347 add_cflags "-march=$cpu"
1348 disable cmov
1349 ;;
1350 # targets that do support conditional mov (cmov)
1351 i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2)
1352 add_cflags "-march=$cpu"
1353 enable cmov
1354 enable fast_cmov
1355 ;;
1356 # targets that do support conditional mov but on which it's slow
1357 pentium4|prescott|nocona)
1358 add_cflags "-march=$cpu"
1359 enable cmov
1360 disable fast_cmov
1361 ;;
1362 sparc64)
1363 add_cflags "-mcpu=v9"
1364 ;;
1365 bf*) #bf531 bf532 bf533 bf561 bf5xx all get this config
1366 add_cflags "-mfdpic"
1367 add_ldflags "-mfdpic"
1368 ;;
1369 arm*)
1370 add_cflags "-mcpu=$cpu"
1371 ;;
1372 *)
1373 echo "WARNING: Unknown CPU \"$cpu\", ignored."
1374 ;;
1375 esac
1376 fi
1377
1378 gnu_make(){
1379 $1 --version 2>&1 | grep -q GNU
1380 }
1381
1382 if ! gnu_make $make; then
1383 gnu_make gmake && make=gmake || die "GNU make not found."
1384 fi
1385
1386 # make sure we can execute files in $TMPDIR
1387 cat >$TMPE 2>>$logfile <<EOF
1388 #! /bin/sh
1389 EOF
1390 chmod +x $TMPE >>$logfile 2>&1
1391 if ! $TMPE >>$logfile 2>&1; then
1392 cat <<EOF
1393 Unable to create and execute files in $TMPDIR1. Set the TMPDIR environment
1394 variable to another directory and make sure that $TMPDIR1 is not mounted
1395 noexec.
1396 EOF
1397 die "Sanity test failed."
1398 fi
1399 rm $TMPE
1400
1401 # compiler sanity check
1402 check_exec <<EOF
1403 int main(){
1404 return 0;
1405 }
1406 EOF
1407 if test "$?" != 0; then
1408 echo "$cc is unable to create an executable file."
1409 if test -z "$cross_prefix" && ! enabled cross_compile ; then
1410 echo "If $cc is a cross-compiler, use the --cross-compile option."
1411 echo "Only do this if you know what cross compiling means."
1412 fi
1413 die "C compiler test failed."
1414 fi
1415
1416 if enabled x86; then
1417 # check whether EBP is available on x86
1418 # As 'i' is stored on the stack, this program will crash
1419 # if the base pointer is used to access it because the
1420 # base pointer is cleared in the inline assembly code.
1421 check_exec_crash <<EOF && enable ebp_available
1422 volatile int i=0;
1423 asm volatile (
1424 "xorl %%ebp, %%ebp"
1425 ::: "%ebp");
1426 return i;
1427 EOF
1428
1429 # check wether EBX is available on x86
1430 check_asm ebx_available '"":::"%ebx"'
1431
1432 # check whether binutils is new enough to compile SSSE3
1433 enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
1434 fi
1435
1436 # check for assembler specific support
1437
1438 if test $arch = "powerpc"; then
1439 check_cc <<EOF && enable dcbzl
1440 int main(void) {
1441 register long zero = 0;
1442 char data[1024];
1443 asm volatile("dcbzl %0, %1" : : "b" (data), "r" (zero));
1444 return 0;
1445 }
1446 EOF
1447 fi
1448
1449 # check for SIMD availability
1450
1451 # AltiVec flags: The FSF version of GCC differs from the Apple version
1452 if enabled altivec; then
1453 test -n "`$cc -v 2>&1 | grep version | grep Apple`" &&
1454 add_cflags "-faltivec" ||
1455 add_cflags "-maltivec -mabi=altivec"
1456
1457 check_header altivec.h
1458
1459 # check if our compiler supports Motorola AltiVec C API
1460 enabled altivec_h &&
1461 inc_altivec_h="#include <altivec.h>" ||
1462 inc_altivec_h=
1463 check_cc <<EOF || disable altivec
1464 $inc_altivec_h
1465 int main(void) {
1466 vector signed int v1, v2, v3;
1467 v1 = vec_add(v2,v3);
1468 return 0;
1469 }
1470 EOF
1471 fi
1472
1473 enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
1474 enabled armv6 && check_asm armv6 '"sadd16 r0, r0, r0"'
1475 enabled iwmmxt && check_asm iwmmxt '"wunpckelub wr6, wr4"'
1476 enabled mmi && check_asm mmi '"lq $2, 0($2)"'
1477 enabled vis && check_asm vis '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc
1478
1479 enabled vis && add_cflags "-mcpu=ultrasparc -mtune=ultrasparc"
1480
1481 # ---
1482 # big/little-endian test
1483 check_cc <<EOF || die "endian test failed"
1484 unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
1485 EOF
1486 grep -q BIGE $TMPO && enable bigendian
1487
1488 # ---
1489 # check availability of some header files
1490
1491 if check_func dlopen; then
1492 ldl=
1493 elif check_func dlopen -ldl; then
1494 ldl=-ldl
1495 fi
1496
1497 check_func fork
1498 check_func gethrtime
1499 check_func getrusage
1500 check_func inet_aton
1501 check_func memalign
1502 check_func mkstemp
1503 check_func2 windows.h GetProcessTimes
1504
1505 check_header byteswap.h
1506 check_header conio.h
1507 check_header dlfcn.h
1508 check_header malloc.h
1509 check_header termios.h
1510
1511 if ! enabled_any memalign memalign_hack && enabled need_memalign ; then
1512 die "Error, no memalign() but SSE enabled, disable it or use --enable-memalign-hack."
1513 fi
1514
1515 enabled zlib && check_lib zlib.h zlibVersion -lz || disable zlib
1516
1517 # ffserver uses poll(),
1518 # if it's not found we can emulate it using select().
1519 if enabled ffserver; then
1520 check_header sys/poll.h
1521 fi
1522
1523 # check for some common methods of building with pthread support
1524 # do this before the optional library checks as some of them require pthreads
1525 if enabled pthreads; then
1526 if check_func pthread_create; then
1527 :
1528 elif check_func pthread_create -pthread; then
1529 add_cflags -pthread
1530 add_ldflags -pthread
1531 elif check_func pthread_create -pthreads; then
1532 add_cflags -pthreads
1533 add_ldflags -pthreads
1534 elif ! check_lib pthread.h pthread_create -lpthread; then
1535 die "ERROR: can't find pthreads library"
1536 fi
1537 fi
1538
1539 for thread in $THREADS_LIST; do
1540 if enabled $thread; then
1541 test -n "$thread_type" &&
1542 die "ERROR: Only one thread type must be selected." ||
1543 thread_type="$thread"
1544 fi
1545 done
1546
1547 check_lib math.h sin -lm
1548
1549 # test for lrintf in math.h
1550 check_exec <<EOF && enable lrintf || disable lrintf
1551 #define _ISOC9X_SOURCE 1
1552 #include <math.h>
1553 int main( void ) { return (lrintf(3.999f) > 0)?0:1; }
1554 EOF
1555
1556 enabled_any libamr_nb libamr_wb && enable libamr
1557
1558 # these are off by default, so fail if requested and not available
1559 enabled avisynth && require2 vfw32 "windows.h vfw.h" AVIFileInit -lvfw32
1560 enabled liba52 && require liba52 a52dec/a52.h a52_init -la52
1561 enabled libamr_nb && require libamrnb amrnb/interf_dec.h Speech_Decode_Frame_init -lamrnb -lm
1562 enabled libamr_wb && require libamrwb amrwb/dec_if.h D_IF_init -lamrwb -lm
1563 enabled libdc1394 && require libdc1394 libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394
1564 enabled libfaac && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
1565 enabled libfaad && require2 libfaad faad.h faacDecOpen -lfaad
1566 enabled libgsm && require libgsm gsm.h gsm_create -lgsm
1567 enabled libmp3lame && require LAME lame/lame.h lame_init -lmp3lame -lm
1568 enabled libnut && require libnut libnut.h nut_demuxer_init -lnut
1569 enabled libogg && require libogg ogg/ogg.h ogg_sync_init -logg
1570 enabled libtheora && require libtheora theora/theora.h theora_info_init -ltheora -logg
1571 enabled libvorbis && require libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbis -lvorbisenc -logg
1572 enabled libx264 && require x264 x264.h x264_encoder_open -lx264
1573 enabled libxvid && require Xvid xvid.h xvid_global -lxvidcore
1574 enabled mlib && require mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
1575
1576 # disable the native AC-3 decoder if liba52 is enabled
1577 enabled liba52 && disable ac3_decoder
1578
1579 _restrict=
1580 for restrict_keyword in restrict __restrict__ __restrict; do
1581 check_cc <<EOF && _restrict=$restrict_keyword && break
1582 void foo(char * $restrict_keyword p);
1583 EOF
1584 done
1585
1586 test "$vhook" = "default" && vhook="$dlopen"
1587
1588 if test "$targetos" = cygwin -o "$targetos" = mingw32 && enabled_all static vhook ; then
1589 disable vhook
1590 echo
1591 echo "At the moment vhooks don't work on Cygwin or MinGW static builds."
1592 echo "Patches welcome."
1593 echo
1594 fi
1595
1596 if enabled vhook; then
1597 check_ldflags -rdynamic
1598 check_ldflags -export-dynamic
1599 fi
1600
1601 check_foo_config imlib2 imlib2 Imlib2.h imlib_load_font
1602 check_foo_config freetype2 freetype ft2build.h FT_Init_FreeType
1603
1604 ##########################################
1605 # SDL check
1606
1607 disable sdl_too_old
1608 disable sdl
1609 SDL_CONFIG="${cross_prefix}sdl-config"
1610 if "${SDL_CONFIG}" --version >/dev/null 2>&1; then
1611 sdl_cflags=`"${SDL_CONFIG}" --cflags`
1612 temp_cflags $sdl_cflags
1613 temp_extralibs `"${SDL_CONFIG}" --libs`
1614 if check_lib SDL.h SDL_Init; then
1615 _sdlversion=`"${SDL_CONFIG}" --version | sed 's/[^0-9]//g'`
1616 if test "$_sdlversion" -lt 121 ; then
1617 enable sdl_too_old
1618 else
1619 enable sdl
1620 check_cc $sdl_cflags <<EOF && enable sdl_video_size
1621 #include <SDL.h>
1622 int main(void){
1623 const SDL_VideoInfo *vi = SDL_GetVideoInfo();
1624 int w = vi->current_w;
1625 return 0;
1626 }
1627 EOF
1628 fi
1629 fi
1630 restore_flags
1631 fi
1632
1633 texi2html -version >/dev/null 2>&1 && enable texi2html || disable texi2html
1634
1635 ##########################################
1636 # Network check
1637
1638 if enabled network; then
1639 # Prefer arpa/inet.h over winsock2
1640 if check_header arpa/inet.h ; then
1641 check_func closesocket
1642 elif check_header winsock2.h ; then
1643 network_extralibs="-lws2_32"
1644 check_func2 winsock2.h closesocket
1645 fi
1646 fi
1647
1648 ##########################################
1649 # IPv6 check
1650
1651 enabled network && enabled ipv6 && check_ld <<EOF && enable ipv6 || disable ipv6
1652 #include <sys/types.h>
1653 #include <sys/socket.h>
1654 #include <netinet/in.h>
1655 #include <netdb.h>
1656 int main( void ) {
1657 struct sockaddr_storage saddr;
1658 struct ipv6_mreq mreq6;
1659 getaddrinfo(0,0,0,0);
1660 getnameinfo(0,0,0,0,0,0,0);
1661 IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
1662 }
1663 EOF
1664
1665 check_header linux/videodev.h
1666 check_header linux/videodev2.h
1667
1668 # check for ioctl_meteor.h, ioctl_bt848.h and alternatives
1669 { check_header dev/bktr/ioctl_meteor.h &&
1670 check_header dev/bktr/ioctl_bt848.h; } ||
1671 { check_header machine/ioctl_meteor.h &&
1672 check_header machine/ioctl_bt848.h; } ||
1673 { check_header dev/video/meteor/ioctl_meteor.h &&
1674 check_header dev/video/bktr/ioctl_bt848.h; } ||
1675 check_header dev/ic/bt8xx.h
1676
1677 check_header sys/soundcard.h
1678 check_header soundcard.h
1679
1680 # Deal with the x11 frame grabber
1681 enabled x11grab &&
1682 check_header X11/Xlib.h &&
1683 check_header X11/extensions/XShm.h &&
1684 check_func XOpenDisplay -lX11 &&
1685 check_func XShmCreateImage -lX11 -lXext
1686
1687 enabled debug && add_cflags -g
1688
1689 # add some useful compiler flags if supported
1690 check_cflags -Wdeclaration-after-statement
1691 check_cflags -Wall
1692 check_cflags -Wno-switch
1693 check_cflags -Wdisabled-optimization
1694 check_cflags -Wpointer-arith
1695 check_cflags -Wredundant-decls
1696 check_cflags -Wno-pointer-sign
1697 enabled extra_warnings && check_cflags -Winline
1698
1699 # add some linker flags
1700 check_ldflags -Wl,--warn-common
1701 check_ldflags $LDLATEFLAGS
1702
1703 if enabled small; then
1704 check_cflags -Os # not all compilers support -Os
1705 optimizations="small"
1706 elif enabled optimizations; then
1707 if test -n "`$cc -v 2>&1 | grep xlc`"; then
1708 add_cflags "-O5"
1709 add_ldflags "-O5"
1710 else
1711 add_cflags "-O3"
1712 fi
1713 fi
1714
1715 # PIC flags for shared library objects where they are needed
1716 if enabled shared; then
1717 # LIBOBJFLAGS may have already been set in the OS configuration
1718 if test -z "$LIBOBJFLAGS" ; then
1719 case "$arch" in
1720 x86_64|ia64|alpha|sparc*|power*) LIBOBJFLAGS='$(PIC)' ;;
1721 esac
1722 fi
1723 fi
1724
1725 if enabled gprof; then
1726 add_cflags "-p"
1727 add_ldflags "-p"
1728 fi
1729
1730 VHOOKCFLAGS="-fPIC"
1731
1732 # Find out if the .align argument is a power of two or not.
1733 if test $asmalign_pot = "unknown"; then
1734 disable asmalign_pot
1735 echo 'asm (".align 3");' | check_cc && enable asmalign_pot
1736 fi
1737
1738 enabled_any $ENCODER_LIST && enable encoders
1739 enabled_any $DECODER_LIST && enable decoders
1740 enabled_any $MUXER_LIST && enable muxers
1741 enabled_any $DEMUXER_LIST && enable demuxers
1742 enabled_any $PROTOCOL_LIST && enable protocols
1743 enabled_any $BSF_LIST && enable bsfs
1744
1745 enabled_any $THREADS_LIST && enable threads
1746
1747 check_deps $CONFIG_LIST $HAVE_LIST $DECODER_LIST $ENCODER_LIST $PARSER_LIST \
1748 $BSF_LIST $DEMUXER_LIST $MUXER_LIST $PROTOCOL_LIST
1749
1750 enabled libdc1394 && append pkg_requires "libraw1394"
1751 enabled libogg && append pkg_requires "ogg >= 1.1"
1752 enabled libtheora && append pkg_requires "theora"
1753 enabled libvorbis && append pkg_requires "vorbis vorbisenc"
1754
1755 echo "install prefix $PREFIX"
1756 echo "source path $source_path"
1757 echo "C compiler $cc"
1758 echo "make $make"
1759 echo ".align is power-of-two $asmalign_pot"
1760 echo "ARCH $arch ($cpu)"
1761 if test "$BUILDSUF" != ""; then
1762 echo "build suffix $BUILDSUF"
1763 fi
1764 echo "big-endian ${bigendian-no}"
1765 if test $arch = "x86_32" -o $arch = "x86_64"; then
1766 echo "MMX enabled ${mmx-no}"
1767 echo "CMOV enabled ${cmov-no}"
1768 echo "CMOV is fast ${fast_cmov-no}"
1769 echo "EBX available ${ebx_available-no}"
1770 echo "EBP available ${ebp_available-no}"
1771 fi
1772 if test $arch = "armv4l"; then
1773 echo "ARMv5TE enabled ${armv5te-no}"
1774 echo "ARMv6 enabled ${armv6-no}"
1775 echo "IWMMXT enabled ${iwmmxt-no}"
1776 fi
1777 if test $arch = "mips"; then
1778 echo "MMI enabled ${mmi-no}"
1779 fi
1780 if test $arch = "powerpc"; then
1781 echo "AltiVec enabled ${altivec-no}"
1782 echo "dcbzl available ${dcbzl-no}"
1783 fi
1784 echo "gprof enabled ${gprof-no}"
1785 echo "debug symbols ${debug-no}"
1786 echo "strip symbols ${dostrip-no}"
1787 echo "optimizations ${optimizations-no}"
1788 echo "static ${static-no}"
1789 echo "shared ${shared-no}"
1790 echo "postprocessing support ${pp-no}"
1791 echo "software scaler enabled ${swscaler-no}"
1792 echo "video hooking ${vhook-no}"
1793 if enabled vhook; then
1794 echo "Imlib2 support ${imlib2-no}"
1795 echo "FreeType support ${freetype2-no}"
1796 fi
1797 echo "network support ${network-no}"
1798 if enabled network; then
1799 echo "IPv6 support ${ipv6-no}"
1800 fi
1801 echo "threading support ${thread_type-no}"
1802 echo "SDL support ${sdl-no}"
1803 if enabled sdl_too_old; then
1804 echo "-> Your SDL version is too old - please upgrade to have FFplay/SDL support."
1805 fi
1806 echo "Sun medialib support ${mlib-no}"
1807 echo "AVISynth enabled ${avisynth-no}"
1808 echo "liba52 support ${liba52-no}"
1809 echo "liba52 dlopened ${liba52bin-no}"
1810 echo "libamr-nb support ${libamr_nb-no}"
1811 echo "libamr-wb support ${libamr_wb-no}"
1812 echo "libdc1394 support ${libdc1394-no}"
1813 echo "libfaac enabled ${libfaac-no}"
1814 echo "libfaad enabled ${libfaad-no}"
1815 echo "libfaad dlopened ${libfaadbin-no}"
1816 echo "libgsm enabled ${libgsm-no}"
1817 echo "libmp3lame enabled ${libmp3lame-no}"
1818 echo "libnut enabled ${libnut-no}"
1819 echo "libogg enabled ${libogg-no}"
1820 echo "libtheora enabled ${libtheora-no}"
1821 echo "libvorbis enabled ${libvorbis-no}"
1822 echo "x264 enabled ${libx264-no}"
1823 echo "XviD enabled ${libxvid-no}"
1824 echo "zlib enabled ${zlib-no}"
1825 enabled gpl &&
1826 echo "License: GPL" ||
1827 echo "License: LGPL"
1828
1829 echo "Creating config.mak and config.h..."
1830
1831 echo "# Automatically generated by configure - do not modify!" > config.mak
1832 echo "/* Automatically generated by configure - do not modify! */" > $TMPH
1833 echo "#ifndef FFMPEG_CONFIG_H" >> $TMPH
1834 echo "#define FFMPEG_CONFIG_H" >> $TMPH
1835 echo "#define FFMPEG_CONFIGURATION \"$FFMPEG_CONFIGURATION\"" >> $TMPH
1836
1837 echo "PREFIX=$PREFIX" >> config.mak
1838 echo "prefix=\$(DESTDIR)\$(PREFIX)" >> config.mak
1839 echo "LIBDIR=\$(DESTDIR)$libdir" >> config.mak
1840 echo "SHLIBDIR=\$(DESTDIR)$shlibdir" >> config.mak
1841 echo "INCDIR=\$(DESTDIR)$incdir" >> config.mak
1842 echo "BINDIR=\$(DESTDIR)$bindir" >> config.mak
1843 echo "MANDIR=\$(DESTDIR)$mandir" >> config.mak
1844 echo "MAKE=$make" >> config.mak
1845 echo "CC=$cc" >> config.mak
1846 echo "AR=$ar" >> config.mak
1847 echo "RANLIB=$ranlib" >> config.mak
1848 echo "LDCONFIG=$LDCONFIG" >> config.mak
1849 echo "LN_S=$ln_s" >> config.mak
1850 enabled dostrip &&
1851 echo "STRIP=$strip" >> config.mak ||
1852 echo "STRIP=echo ignoring strip" >> config.mak
1853
1854 echo "OPTFLAGS=$CFLAGS" >> config.mak
1855 echo "VHOOKCFLAGS=$VHOOKCFLAGS">>config.mak
1856 echo "LDFLAGS=$LDFLAGS" >> config.mak
1857 echo "FFSERVERLDFLAGS=$FFSERVERLDFLAGS" >> config.mak
1858 echo "SHFLAGS=$SHFLAGS" >> config.mak
1859 echo "VHOOKSHFLAGS=$VHOOKSHFLAGS" >> config.mak
1860 echo "VHOOKLIBS=$VHOOKLIBS" >> config.mak
1861 echo "LIBOBJFLAGS=$LIBOBJFLAGS" >> config.mak
1862 echo "BUILD_STATIC=$static" >> config.mak
1863 echo "BUILDSUF=$BUILDSUF" >> config.mak
1864 echo "FULLNAME=$FULLNAME" >> config.mak
1865 echo "LIBPREF=$LIBPREF" >> config.mak
1866 echo "LIBSUF=$LIBSUF" >> config.mak
1867 echo "LIBNAME=$LIBNAME" >> config.mak
1868 echo "SLIBPREF=$SLIBPREF" >> config.mak
1869 echo "SLIBSUF=$SLIBSUF" >> config.mak
1870 echo "EXESUF=$EXESUF" >> config.mak
1871
1872 if enabled bigendian; then
1873 echo "WORDS_BIGENDIAN=yes" >> config.mak
1874 echo "#define WORDS_BIGENDIAN 1" >> $TMPH
1875 fi
1876 if enabled mmx; then
1877 echo "#define __CPU__ 586" >> $TMPH
1878 fi
1879
1880 if enabled sdl; then
1881 echo "SDL_LIBS=`"${SDL_CONFIG}" --libs`" >> config.mak
1882 echo "SDL_CFLAGS=`"${SDL_CONFIG}" --cflags`" >> config.mak
1883 fi
1884 if enabled texi2html; then
1885 echo "BUILD_DOC=yes" >> config.mak
1886 fi
1887
1888 sws_version=`grep '#define LIBSWSCALE_VERSION ' "$source_path/libswscale/swscale.h" | sed 's/[^0-9\.]//g'`
1889 pp_version=`grep '#define LIBPOSTPROC_VERSION ' "$source_path/libpostproc/postprocess.h" | sed 's/[^0-9\.]//g'`
1890 lavc_version=`grep '#define LIBAVCODEC_VERSION ' "$source_path/libavcodec/avcodec.h" | sed 's/[^0-9\.]//g'`
1891 lavf_version=`grep '#define LIBAVFORMAT_VERSION ' "$source_path/libavformat/avformat.h" | sed 's/[^0-9\.]//g'`
1892 lavu_version=`grep '#define LIBAVUTIL_VERSION ' "$source_path/libavutil/avutil.h" | sed 's/[^0-9\.]//g'`
1893
1894
1895
1896 if enabled shared; then
1897 echo "BUILD_SHARED=yes" >> config.mak
1898 echo "PIC=-fPIC -DPIC" >> config.mak
1899 echo "SPPMAJOR=${pp_version%%.*}" >> config.mak
1900 echo "SPPVERSION=$pp_version" >> config.mak
1901 echo "LAVCMAJOR=${lavc_version%%.*}" >> config.mak
1902 echo "LAVCVERSION=$lavc_version" >> config.mak
1903 echo "LAVFMAJOR=${lavf_version%%.*}" >> config.mak
1904 echo "LAVFVERSION=$lavf_version" >> config.mak
1905 echo "LAVUMAJOR=${lavu_version%%.*}" >> config.mak
1906 echo "LAVUVERSION=$lavu_version" >> config.mak
1907 echo "SWSMAJOR=${sws_version%%.*}" >> config.mak
1908 echo "SWSVERSION=$sws_version" >> config.mak
1909 echo "SLIBNAME=${SLIBNAME}" >> config.mak
1910 echo "SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}" >> config.mak
1911 echo "SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}" >> config.mak
1912 echo "SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}" >> config.mak
1913 echo "SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}" >> config.mak
1914 echo "SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}" >> config.mak
1915 fi
1916 echo "LIB_INSTALL_EXTRA_CMD=${LIB_INSTALL_EXTRA_CMD}" >> config.mak
1917 echo "EXTRALIBS=$extralibs" >> config.mak
1918
1919 print_config ARCH_ $TMPH config.mak $ARCH_LIST
1920 print_config HAVE_ $TMPH config.mak $HAVE_LIST
1921 print_config CONFIG_ $TMPH config.mak $CONFIG_LIST \
1922 $DECODER_LIST \
1923 $ENCODER_LIST \
1924 $PARSER_LIST \
1925 $BSF_LIST \
1926 $DEMUXER_LIST \
1927 $MUXER_LIST \
1928 $PROTOCOL_LIST \
1929
1930 echo "#define restrict $_restrict" >> $TMPH
1931
1932 if enabled small; then
1933 echo "#define av_always_inline" >> $TMPH
1934 fi
1935
1936 echo "SRC_PATH=\"$source_path\"" >> config.mak
1937 echo "SRC_PATH_BARE=$source_path" >> config.mak
1938 echo "BUILD_ROOT=\"$PWD\"" >> config.mak
1939
1940 # Apparently it's not possible to portably echo a backslash.
1941 enabled asmalign_pot &&
1942 printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH ||
1943 printf '#define ASMALIGN(ZEROBITS) ".align 1<<" #ZEROBITS "\\n\\t"\n' >> $TMPH
1944
1945
1946 echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
1947
1948 # Do not overwrite config.h if unchanged to avoid superfluous rebuilds.
1949 cmp -s $TMPH config.h &&
1950 echo "config.h is unchanged" ||
1951 mv -f $TMPH config.h
1952
1953 rm -f $TMPO $TMPC $TMPE $TMPS $TMPH
1954
1955 # build tree in object directory if source path is different from current one
1956 if enabled source_path_used; then
1957 DIRS="\
1958 doc \
1959 libavcodec \
1960 libavcodec/alpha \
1961 libavcodec/armv4l \
1962 libavcodec/bfin \
1963 libavcodec/i386 \
1964 libavcodec/mlib \
1965 libavcodec/ppc \
1966 libavcodec/sh4 \
1967 libavcodec/sparc \
1968 libavformat \
1969 libavutil \
1970 libpostproc \
1971 libswscale \
1972 tests \
1973 tools \
1974 vhook \
1975 "
1976 FILES="\
1977 Makefile \
1978 common.mak \
1979 doc/texi2pod.pl \
1980 libavcodec/Makefile \
1981 libavformat/Makefile \
1982 libavutil/Makefile \
1983 libpostproc/Makefile \
1984 libswscale/Makefile \
1985 "
1986 for dir in $DIRS ; do
1987 mkdir -p $dir
1988 done
1989 for f in $FILES ; do
1990 $ln_s "$source_path/$f" $f
1991 done
1992 fi
1993
1994
1995 # build pkg-config files
1996 # FIXME: libdir and includedir are hardcoded and may differ from the real path.
1997
1998 pkgconfig_generate(){
1999 name=$1
2000 comment=$2
2001 version=$3
2002 libs=$4
2003 requires=$5
2004 include=$6
2005 cat <<EOF >$name.pc
2006 prefix=$PREFIX
2007 exec_prefix=\${prefix}
2008 libdir=\${exec_prefix}/lib
2009 includedir=\${prefix}/include
2010
2011 Name: $name
2012 Description: $comment
2013 Version: $version
2014 Requires: $requires
2015 Conflicts:
2016 Libs: -L\${libdir} $libs
2017 Cflags: -I\${includedir} -I\${includedir}/$include
2018 EOF
2019 }
2020
2021 pkgconfig_generate_uninstalled(){
2022 name=$1
2023 shortname=${name#lib}
2024 comment=$2
2025 version=$3
2026 libs=$4
2027 requires=$5
2028 cat <<EOF >$name-uninstalled.pc
2029 prefix=
2030 exec_prefix=
2031 libdir=\${pcfiledir}/$name
2032 includedir=\${pcfiledir}/$name
2033
2034 Name: $name
2035 Description: $comment
2036 Version: $version
2037 Requires: $requires
2038 Conflicts:
2039 Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
2040 Cflags: -I\${includedir}
2041 EOF
2042 }
2043
2044 pkgconfig_generate libavutil "FFmpeg utility library" "$lavu_version" -lavutil "" ffmpeg
2045 pkgconfig_generate_uninstalled libavutil "FFmpeg utility library" "$lavu_version"
2046
2047 pkgconfig_generate libavcodec "FFmpeg codec library" "$lavc_version" "-lavcodec $extralibs" "$pkg_requires libavutil = $lavu_version" ffmpeg
2048 pkgconfig_generate_uninstalled libavcodec "FFmpeg codec library" "$lavc_version" "$extralibs" "$pkg_requires libavutil = $lavu_version"
2049
2050 pkgconfig_generate libavformat "FFmpeg container format library" "$lavf_version" "-lavformat $extralibs" "$pkg_requires libavcodec = $lavc_version" ffmpeg
2051 pkgconfig_generate_uninstalled libavformat "FFmpeg container format library" "$lavf_version" "$extralibs" "$pkg_requires libavcodec = $lavc_version"
2052
2053 if enabled pp; then
2054 pkgconfig_generate libpostproc "FFmpeg post processing library" "$pp_version" -lpostproc "" postproc
2055 pkgconfig_generate_uninstalled libpostproc "FFmpeg post processing library" "$pp_version"
2056 fi
2057
2058 if enabled swscaler; then
2059 pkgconfig_generate libswscale "FFmpeg image rescaling library" "$sws_version" -lswscale "libavutil = $lavu_version" ffmpeg
2060 pkgconfig_generate_uninstalled libswscale "FFmpeg image rescaling library" "$sws_version" "" "libavutil = $lavu_version"
2061 else
2062 pkgconfig_generate libswscale "FFmpeg image rescaling library" "$sws_version" "" "$pkg_requires libavcodec = $lavc_version" ffmpeg
2063 pkgconfig_generate_uninstalled libswscale "FFmpeg image rescaling library" "$sws_version" "" "$pkg_requires libavcodec = $lavc_version"
2064 apply libswscale.pc sed s/^Libs:.*$/Libs:/
2065 apply libswscale-uninstalled.pc sed s/^Libs:.*$/Libs:/
2066 fi