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