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