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