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