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