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