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