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