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