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