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