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