V4L2 support for OpenBSD, patch by Brad, brad comstyle com
[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_func_headers(){
505 log check_func_headers "$@"
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_func_headers "$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 sys_videoio_h
790 termios_h
791 threads
792 winsock2_h
793 yasm
794 "
795
796 CMDLINE_SELECT="
797 $ARCH_EXT_LIST
798 $CONFIG_LIST
799 $THREADS_LIST
800 cross_compile
801 debug
802 extra_warnings
803 logging
804 optimizations
805 shared
806 static
807 stripping
808 "
809
810 PATHS_LIST='
811 bindir
812 incdir
813 libdir
814 mandir
815 prefix
816 shlibdir
817 '
818
819 CMDLINE_SET="
820 $PATHS_LIST
821 arch
822 build_suffix
823 cc
824 cpu
825 cross_prefix
826 logfile
827 source_path
828 target_os
829 "
830
831 # code dependency declarations
832
833 # architecture extensions
834 altivec_deps="powerpc"
835 armv5te_deps="armv4l"
836 armv6_deps="armv4l"
837 armvfp_deps="armv4l"
838 iwmmxt_deps="armv4l"
839 mmi_deps="mips"
840 mmx_deps="x86"
841 mmx2_deps="x86 mmx"
842 neon_deps="armv4l"
843 ssse3_deps="x86"
844 vis_deps="sparc"
845
846 # system headers and functions
847 byteswap_h_deps="!armv4l"
848
849 # decoders / encoders
850 ac3_decoder_deps="gpl !liba52"
851 dxa_decoder_deps="zlib"
852 eac3_decoder_deps="gpl"
853 flashsv_decoder_deps="zlib"
854 flashsv_encoder_deps="zlib"
855 mlp_decoder_deps="mlp_parser"
856 mpeg_xvmc_decoder_deps="xvmc"
857 png_decoder_deps="zlib"
858 png_encoder_deps="zlib"
859 zmbv_decoder_deps="zlib"
860 zmbv_encoder_deps="zlib"
861
862 # external libraries
863 liba52_decoder_deps="liba52"
864 liba52bin_decoder_extralibs='$ldl'
865 libamr_nb_decoder_deps="libamr_nb"
866 libamr_nb_encoder_deps="libamr_nb"
867 libamr_wb_decoder_deps="libamr_wb"
868 libamr_wb_encoder_deps="libamr_wb"
869 libdirac_decoder_deps="libdirac !libschroedinger"
870 libdirac_encoder_deps="libdirac"
871 libfaac_encoder_deps="libfaac"
872 libfaad_decoder_deps="libfaad"
873 libfaadbin_decoder_extralibs='$ldl'
874 libgsm_decoder_deps="libgsm"
875 libgsm_encoder_deps="libgsm"
876 libgsm_ms_decoder_deps="libgsm"
877 libgsm_ms_encoder_deps="libgsm"
878 libmp3lame_encoder_deps="libmp3lame"
879 libschroedinger_decoder_deps="libschroedinger"
880 libschroedinger_encoder_deps="libschroedinger"
881 libtheora_encoder_deps="libtheora"
882 libvorbis_encoder_deps="libvorbis"
883 libx264_encoder_deps="libx264"
884 libxvid_encoder_deps="libxvid"
885 mpeg4aac_decoder_deps="libfaad"
886
887 # demuxers / muxers
888 ac3_demuxer_deps="ac3_parser"
889 audio_beos_demuxer_deps="audio_beos"
890 audio_beos_demuxer_extralibs="-lmedia -lbe"
891 audio_beos_muxer_deps="audio_beos"
892 audio_beos_muxer_extralibs="-lmedia -lbe"
893 avisynth_demuxer_deps="avisynth"
894 bktr_demuxer_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
895 dirac_demuxer_deps="dirac_parser"
896 dv1394_demuxer_deps="dv1394 dv_demuxer"
897 libdc1394_demuxer_deps="libdc1394"
898 libnut_demuxer_deps="libnut"
899 libnut_muxer_deps="libnut"
900 mp3_demuxer_deps="mpegaudio_parser"
901 oss_demuxer_deps_any="soundcard_h sys_soundcard_h"
902 oss_muxer_deps_any="soundcard_h sys_soundcard_h"
903 redir_demuxer_deps="network"
904 rtp_muxer_deps="network rtp_protocol"
905 rtsp_demuxer_deps="sdp_demuxer"
906 sdp_demuxer_deps="rtp_protocol mpegts_demuxer"
907 v4l_demuxer_deps="linux_videodev_h"
908 v4l2_demuxer_deps_any="linux_videodev2_h sys_videoio_h"
909 vfwcap_demuxer_deps="capCreateCaptureWindow"
910 vfwcap_demuxer_extralibs="-lvfw32"
911 x11_grab_device_demuxer_deps="x11grab XShmCreateImage"
912 x11_grab_device_demuxer_extralibs="-lX11 -lXext"
913
914 # protocols
915 http_protocol_deps="network"
916 rtp_protocol_deps="udp_protocol"
917 tcp_protocol_deps="network"
918 udp_protocol_deps="network"
919
920 # filters
921 movie_filter_deps="avfilter_lavf"
922
923 # programs
924 ffplay_deps="sdl"
925 ffserver_deps="ffm_muxer rtp_protocol rtsp_demuxer"
926 ffserver_extralibs='$ldl'
927 vhook_extralibs='$ldl'
928
929
930 # default parameters
931
932 logfile="config.err"
933
934 # installation paths
935 prefix_default="/usr/local"
936 bindir_default='${prefix}/bin'
937 incdir_default='${prefix}/include'
938 libdir_default='${prefix}/lib'
939 mandir_default='${prefix}/share/man'
940 shlibdir_default="$libdir_default"
941
942 # toolchain
943 cc="gcc"
944 yasmexe="yasm"
945 ar="ar"
946 nm="nm"
947 ranlib="ranlib"
948 strip="strip"
949 asmalign_pot="unknown"
950 ln_s="ln -sf"
951 objformat="elf"
952
953 # machine
954 arch=`uname -m`
955 cpu="generic"
956
957 # OS
958 target_os=$(tolower $(uname -s))
959
960 # libraries
961 enable bzlib
962 enable zlib
963
964 # configurable options
965 enable debug
966 enable ffmpeg
967 enable ffplay
968 enable ffserver
969 enable ipv6
970 enable mpegaudio_hp
971 enable network
972 enable optimizations
973 enable protocols
974 enable static
975 enable stripping
976 vhook="default"
977
978 # build settings
979 add_cflags -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112
980 SHFLAGS='-shared -Wl,-soname,$$(@F)'
981 VHOOKSHFLAGS='$(SHFLAGS)'
982 FFSERVERLDFLAGS=-Wl,-E
983 LIBPREF="lib"
984 LIBSUF=".a"
985 FULLNAME='$(NAME)$(BUILDSUF)'
986 LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
987 SLIBPREF="lib"
988 SLIBSUF=".so"
989 SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
990 SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
991 SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
992 LIB_INSTALL_EXTRA_CMD='$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
993
994 # gcc stupidly only outputs the basename of targets with -MM
995 DEPEND_CMD='$(CC) $(CFLAGS) -MM -MG $< | sed -e "/^\#.*/d" -e "1s,^,$(@D)/," -e "s,\\([[:space:]]\\)\\(version\\.h\\),\\1\$$(BUILD_ROOT_REL)/\\2,"'
996
997 # find source path
998 source_path="`dirname \"$0\"`"
999 enable source_path_used
1000 if test -z "$source_path" -o "$source_path" = "." ; then
1001 source_path="`pwd`"
1002 disable source_path_used
1003 else
1004 source_path="`cd \"$source_path\"; pwd`"
1005 echo "$source_path" | grep -q '[[:blank:]]' &&
1006 die "Out of tree builds are impossible with whitespace in source path."
1007 fi
1008
1009 FFMPEG_CONFIGURATION="$@"
1010
1011 find_things(){
1012 thing=$1
1013 pattern=$2
1014 file=$source_path/$3
1015 sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
1016 }
1017
1018 ENCODER_LIST=$(find_things encoder ENC libavcodec/allcodecs.c)
1019 DECODER_LIST=$(find_things decoder DEC libavcodec/allcodecs.c)
1020 PARSER_LIST=$(find_things parser PARSER libavcodec/allcodecs.c)
1021 BSF_LIST=$(find_things bsf BSF libavcodec/allcodecs.c)
1022 MUXER_LIST=$(find_things muxer _MUX libavformat/allformats.c)
1023 DEMUXER_LIST=$(find_things demuxer DEMUX libavformat/allformats.c)
1024 OUTDEV_LIST=$(find_things muxer _MUX libavdevice/alldevices.c)
1025 INDEV_LIST=$(find_things demuxer DEMUX libavdevice/alldevices.c)
1026 PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
1027 FILTER_LIST=$(find_things filter FILTER libavfilter/allfilters.c)
1028
1029 enable $ARCH_EXT_LIST \
1030 $DECODER_LIST \
1031 $ENCODER_LIST \
1032 $PARSER_LIST \
1033 $BSF_LIST \
1034 $DEMUXER_LIST \
1035 $MUXER_LIST \
1036 $FILTER_LIST \
1037 $PROTOCOL_LIST \
1038 $INDEV_LIST \
1039 $OUTDEV_LIST \
1040
1041 die_unknown(){
1042 echo "Unknown option \"$1\"."
1043 echo "See $0 --help for available options."
1044 exit 1
1045 }
1046
1047 show_list() {
1048 suffix=_$1
1049 shift
1050 echo $* | sed s/$suffix//g | tr ' ' '\n' | sort
1051 exit 0
1052 }
1053
1054 for opt do
1055 optval="${opt#*=}"
1056 case "$opt" in
1057 --extra-cflags=*) add_cflags "$optval"
1058 ;;
1059 --extra-ldflags=*) add_ldflags "$optval"
1060 ;;
1061 --extra-libs=*) add_extralibs "$optval"
1062 ;;
1063 --disable-devices) disable $INDEV_LIST $OUTDEV_LIST
1064 ;;
1065 --enable-debug=*) debuglevel="$optval"
1066 ;;
1067 --enable-*=*|--disable-*=*)
1068 eval `echo "$opt" | sed 's/=/-/;s/--/action=/;s/-/ thing=/;s/-/ name=/'`
1069 case "$thing" in
1070 encoder|decoder|muxer|demuxer|parser|bsf|protocol|filter) $action ${optval}_${thing} ;;
1071 *) die_unknown "$opt" ;;
1072 esac
1073 ;;
1074 --enable-?*|--disable-?*)
1075 eval `echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g'`
1076 if is_in $option $COMPONENT_LIST; then
1077 eval $action \$$(toupper ${option%s})_LIST
1078 elif is_in $option $CMDLINE_SELECT; then
1079 $action $option
1080 else
1081 die_unknown $opt
1082 fi
1083 ;;
1084 --list-*)
1085 NAME="${opt#--list-}"
1086 is_in $NAME $COMPONENT_LIST || die_unknown $opt
1087 NAME=${NAME%s}
1088 eval show_list $NAME \$$(toupper $NAME)_LIST
1089 ;;
1090 --help|-h) show_help
1091 ;;
1092 *)
1093 optname="${opt%=*}"
1094 optname="${optname#--}"
1095 optname=$(echo "$optname" | sed 's/-/_/g')
1096 is_in $optname $CMDLINE_SET || die_unknown $opt
1097 eval $optname='$optval'
1098 ;;
1099 esac
1100 done
1101
1102 disabled logging && logfile=/dev/null
1103
1104 echo "# $0 $@" > $logfile
1105 set >> $logfile
1106
1107 cc="${cross_prefix}${cc}"
1108 yasmexe="${cross_prefix}${yasmexe}"
1109 ar="${cross_prefix}${ar}"
1110 nm="${cross_prefix}${nm}"
1111 ranlib="${cross_prefix}${ranlib}"
1112 strip="${cross_prefix}${strip}"
1113
1114 # set temporary file name
1115 if test ! -z "$TMPDIR" ; then
1116 TMPDIR1="${TMPDIR}"
1117 elif test ! -z "$TEMPDIR" ; then
1118 TMPDIR1="${TEMPDIR}"
1119 else
1120 TMPDIR1="/tmp"
1121 fi
1122
1123 TMPC="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.c"
1124 TMPE="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}${EXESUF}"
1125 TMPH="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.h"
1126 TMPO="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.o"
1127 TMPS="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.S"
1128 TMPSH="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.sh"
1129
1130 check_cflags -fasm
1131 check_cflags -std=c99
1132
1133 case "$arch" in
1134 i386|i486|i586|i686|i86pc|BePC)
1135 arch="x86_32"
1136 enable fast_unaligned
1137 ;;
1138 x86_64|amd64)
1139 arch="x86_32"
1140 enable fast_unaligned
1141 check_cc <<EOF && enable fast_64bit && arch="x86_64"
1142 int test[sizeof(char*) - 7];
1143 EOF
1144 ;;
1145 # armv4l is a subset of armv[567]*l
1146 arm|armv[4567]*l)
1147 arch="armv4l"
1148 ;;
1149 alpha)
1150 arch="alpha"
1151 enable fast_64bit
1152 ;;
1153 "Power Macintosh"|ppc|powerpc)
1154 arch="powerpc"
1155 ;;
1156 ppc64)
1157 arch="powerpc"
1158 enable fast_64bit
1159 ;;
1160 mips|mipsel|IP*)
1161 arch="mips"
1162 ;;
1163 sun4u|sparc64)
1164 arch="sparc64"
1165 enable fast_64bit
1166 ;;
1167 sparc)
1168 arch="sparc"
1169 ;;
1170 sh4)
1171 arch="sh4"
1172 ;;
1173 parisc)
1174 arch="parisc"
1175 ;;
1176 parisc64)
1177 arch="parisc"
1178 enable fast_64bit
1179 ;;
1180 s390|s390x)
1181 arch="s390"
1182 ;;
1183 m68k)
1184 arch="m68k"
1185 ;;
1186 ia64)
1187 arch="ia64"
1188 enable fast_64bit
1189 ;;
1190 bfin)
1191 arch="bfin"
1192 ;;
1193 *)
1194 arch="unknown"
1195 ;;
1196 esac
1197
1198 enable $arch
1199 enabled_any x86_32 x86_64 && enable x86
1200 enabled sparc64 && enable sparc
1201
1202 # OS specific
1203 case $target_os in
1204 beos|haiku|zeta)
1205 prefix_default="$HOME/config"
1206 # helps building libavcodec
1207 add_cflags "-DPIC -fomit-frame-pointer"
1208 # 3 gcc releases known for BeOS, each with ugly bugs
1209 gcc_version="`$cc -v 2>&1 | grep version | cut -d ' ' -f3-`"
1210 case "$gcc_version" in
1211 2.9-beos-991026*|2.9-beos-000224*) echo "R5/GG gcc"
1212 disable mmx
1213 ;;
1214 *20010315*) echo "BeBits gcc"
1215 add_cflags "-fno-expensive-optimizations"
1216 ;;
1217 esac
1218 SHFLAGS=-nostart
1219 # enable BeOS things
1220 enable audio_beos
1221 # no need for libm, but the inet stuff
1222 # Check for BONE
1223 # XXX: actually should check for NOT net_server
1224 if echo $BEINCLUDES | grep -q 'headers/be/bone'; then
1225 network_extralibs="-lbind -lsocket"
1226 else
1227 enable beos_netserver
1228 network_extralibs="-lnet"
1229 fi ;;
1230 sunos)
1231 FFSERVERLDFLAGS=""
1232 SHFLAGS='-shared -Wl,-h,$$(@F)'
1233 network_extralibs="-lsocket -lnsl"
1234 ;;
1235 netbsd)
1236 oss_demuxer_extralibs="-lossaudio"
1237 oss_muxer_extralibs="-lossaudio"
1238 ;;
1239 openbsd)
1240 disable need_memalign
1241 LIBOBJFLAGS='$(PIC)'
1242 SHFLAGS='-shared'
1243 SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF).$(LIBVERSION)'
1244 SLIBNAME_WITH_VERSION='$(SLIBNAME)'
1245 SLIBNAME_WITH_MAJOR='$(SLIBNAME)'
1246 oss_demuxer_extralibs="-lossaudio"
1247 oss_muxer_extralibs="-lossaudio"
1248 ;;
1249 freebsd)
1250 disable need_memalign
1251 ;;
1252 bsd/os)
1253 osextralibs="-lpoll -lgnugetopt"
1254 strip="strip -d"
1255 ;;
1256 darwin)
1257 disable need_memalign
1258 SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR) -Wl,-read_only_relocs,suppress'
1259 VHOOKSHFLAGS='-dynamiclib -Wl,-single_module -flat_namespace -undefined suppress -Wl,-install_name,$(SHLIBDIR)/vhook/$$(@F)'
1260 strip="strip -x"
1261 FFLDFLAGS="-Wl,-dynamic,-search_paths_first"
1262 SLIBSUF=".dylib"
1263 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
1264 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
1265 FFSERVERLDFLAGS=-Wl,-bind_at_load
1266 objformat="macho"
1267 enabled x86_64 && objformat="macho64"
1268 ;;
1269 mingw32*)
1270 target_os=mingw32
1271 LIBTARGET=i386
1272 if test $arch = x86_64; then
1273 disable need_memalign
1274 LIBTARGET=x64
1275 fi
1276 shlibdir_default="$bindir_default"
1277 VHOOKSHFLAGS='-shared -L$(BUILD_ROOT)/libavformat -L$(BUILD_ROOT)/libavcodec -L$(BUILD_ROOT)/libavutil'
1278 VHOOKLIBS='-lavformat$(BUILDSUF) -lavcodec$(BUILDSUF) -lavutil$(BUILDSUF) $(EXTRALIBS)'
1279 if enabled swscale; then
1280 VHOOKSHFLAGS="$VHOOKSHFLAGS -L\$(BUILD_ROOT)/libswscale"
1281 VHOOKLIBS="$VHOOKLIBS -lswscale\$(BUILDSUF)"
1282 fi
1283 disable ffserver
1284 SLIBPREF=""
1285 SLIBSUF=".dll"
1286 EXESUF=".exe"
1287 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1288 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1289 SLIB_EXTRA_CMD='-lib /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)'
1290 SLIB_INSTALL_EXTRA_CMD='-install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"; \
1291 install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)"'
1292 SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"'
1293 SHFLAGS='-shared -Wl,--output-def,$$(@:$(SLIBSUF)=.def) -Wl,--enable-runtime-pseudo-reloc -Wl,--enable-auto-image-base'
1294 objformat="win32"
1295 ;;
1296 cygwin*)
1297 target_os=cygwin
1298 shlibdir_default="$bindir_default"
1299 VHOOKSHFLAGS='-shared -L$(BUILD_ROOT)/libavformat -L$(BUILD_ROOT)/libavcodec -L$(BUILD_ROOT)/libavutil'
1300 VHOOKLIBS='-lavformat$(BUILDSUF) -lavcodec$(BUILDSUF) -lavutil$(BUILDSUF) $(EXTRALIBS)'
1301 if enabled swscale; then
1302 VHOOKSHFLAGS="$VHOOKSHFLAGS -L\$(BUILD_ROOT)/libswscale"
1303 VHOOKLIBS="$VHOOKLIBS -lswscale\$(BUILDSUF)"
1304 fi
1305 EXESUF=".exe"
1306 SLIBPREF="cyg"
1307 SLIBSUF=".dll"
1308 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1309 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1310 SHFLAGS='-shared -Wl,--enable-auto-image-base'
1311 objformat="win32"
1312 ;;
1313 *-dos|freedos|opendos)
1314 disable ffplay ffserver vhook
1315 disable $INDEV_LIST $OUTDEV_LIST
1316 network_extralibs="-lsocket"
1317 EXESUF=".exe"
1318 objformat="win32"
1319 ;;
1320 linux)
1321 enable dv1394
1322 ;;
1323 irix*)
1324 target_os=irix
1325 ranlib="echo ignoring ranlib"
1326 ;;
1327 os/2*)
1328 strip="lxlite"
1329 ln_s="cp -f"
1330 EXESUF=".exe"
1331 FFLDFLAGS="-Zomf -Zbin-files -Zargs-wild -Zmap"
1332 SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
1333 FFSERVERLDFLAGS=""
1334 LIBSUF="_s.a"
1335 SLIBPREF=""
1336 SLIBSUF=".dll"
1337 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
1338 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
1339 SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
1340 echo PROTMODE >> $(SUBDIR)$(NAME).def; \
1341 echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
1342 echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
1343 echo EXPORTS >> $(SUBDIR)$(NAME).def; \
1344 emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
1345 SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
1346 emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
1347 SLIB_INSTALL_EXTRA_CMD='install -m 644 $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib "$(LIBDIR)"'
1348 SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.a "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.lib'
1349 disable vhook
1350 ;;
1351 interix)
1352 disable vhook
1353 ;;
1354
1355 *)
1356 target_os="${target_os}-UNKNOWN"
1357 ;;
1358 esac
1359
1360 set_default $PATHS_LIST
1361
1362 add_extralibs $osextralibs
1363
1364 # Combine FFLDFLAGS and the LDFLAGS environment variable.
1365 LDFLAGS="$FFLDFLAGS $LDFLAGS"
1366
1367 test -n "$cross_prefix" && enable cross_compile
1368
1369 # we need to build at least one lib type
1370 if ! enabled_any static shared; then
1371 cat <<EOF
1372 At least one library type must be built.
1373 Specify --enable-static to build the static libraries or --enable-shared to
1374 build the shared libraries as well. To only build the shared libraries specify
1375 --disable-static in addition to --enable-shared.
1376 EOF
1377 exit 1;
1378 fi
1379
1380 disabled static && LIBNAME=""
1381
1382 if enabled_any libfaad libfaadbin ; then
1383 if check_header faad.h; then
1384 check_cc << EOF
1385 #include <faad.h>
1386 #ifndef FAAD2_VERSION
1387 ok faad1
1388 #endif
1389 int main(void) { return 0; }
1390 EOF
1391 test $? = 0 && enable libfaad2
1392 else
1393 die "FAAD test failed."
1394 fi
1395 fi
1396
1397
1398 if ! enabled gpl; then
1399 die_gpl_disabled(){
1400 name=$1
1401 shift
1402 enabled_any $@ && die "$name is under GPL and --enable-gpl is not specified."
1403 }
1404 die_gpl_disabled "The Postprocessing code" postproc
1405 die_gpl_disabled "liba52" liba52
1406 die_gpl_disabled "libx264" libx264
1407 die_gpl_disabled "libxvidcore" libxvid
1408 die_gpl_disabled "FAAD2" libfaad2
1409 die_gpl_disabled "The X11 grabber" x11grab
1410 die_gpl_disabled "The software scaler" swscale
1411 fi
1412
1413 if ! enabled nonfree && enabled_any libamr_nb libamr_wb; then
1414 die "libamr is nonfree and --enable-nonfree is not specified."
1415 fi
1416
1417 check_deps $ARCH_EXT_LIST
1418
1419 test -z "$need_memalign" && need_memalign="$mmx"
1420
1421 #Darwin CC versions
1422 if test $target_os = darwin; then
1423 if $cc -v 2>&1 | grep -q xlc; then
1424 add_cflags "-qpdf2 -qlanglvl=extc99 -qmaxmem=-1 -qarch=auto -qtune=auto"
1425 else
1426 add_cflags "-pipe"
1427 check_cflags "-force_cpusubtype_ALL"
1428 check_cflags "-Wno-sign-compare"
1429 enabled shared || check_cflags -mdynamic-no-pic
1430 fi
1431 fi
1432
1433 disabled optimizations || check_cflags -fomit-frame-pointer
1434
1435 # Add processor-specific flags
1436 if test $cpu != "generic"; then
1437 warn_altivec(){
1438 $1 altivec && echo "WARNING: Tuning for $2 but AltiVec $1.";
1439 }
1440 case $cpu in
1441 601|ppc601|PowerPC601)
1442 add_cflags "-mcpu=601"
1443 warn_altivec enabled PPC601
1444 ;;
1445 603*|ppc603*|PowerPC603*)
1446 add_cflags "-mcpu=603"
1447 warn_altivec enabled PPC603
1448 ;;
1449 604*|ppc604*|PowerPC604*)
1450 add_cflags "-mcpu=604"
1451 warn_altivec enabled PPC604
1452 ;;
1453 G3|g3|75*|ppc75*|PowerPC75*)
1454 add_cflags "-mcpu=750 -mpowerpc-gfxopt"
1455 warn_altivec enabled PPC75x
1456 ;;
1457 G4|g4|745*|ppc745*|PowerPC745*)
1458 add_cflags "-mcpu=7450 -mpowerpc-gfxopt"
1459 warn_altivec disabled PPC745x
1460 ;;
1461 74*|ppc74*|PowerPC74*)
1462 add_cflags "-mcpu=7400 -mpowerpc-gfxopt"
1463 warn_altivec disabled PPC74xx
1464 ;;
1465 G5|g5|970|ppc970|PowerPC970|power4*|Power4*)
1466 add_cflags "-mcpu=970 -mpowerpc-gfxopt -mpowerpc64"
1467 warn_altivec disabled PPC970
1468 enable ppc64
1469 ;;
1470 Cell|CELL|cell)
1471 add_cflags "-mcpu=cell"
1472 warn_altivec disabled Cell
1473 enable ppc64
1474 ;;
1475 # targets that do NOT support conditional mov (cmov)
1476 i[345]86|pentium|pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
1477 add_cflags "-march=$cpu"
1478 disable cmov
1479 ;;
1480 # targets that do support conditional mov (cmov)
1481 i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2)
1482 add_cflags "-march=$cpu"
1483 enable cmov
1484 enable fast_cmov
1485 ;;
1486 # targets that do support conditional mov but on which it's slow
1487 pentium4|pentium4m|prescott|nocona)
1488 add_cflags "-march=$cpu"
1489 enable cmov
1490 disable fast_cmov
1491 ;;
1492 sparc64)
1493 add_cflags "-mcpu=v9"
1494 ;;
1495 arm*|cortex*)
1496 add_cflags "-mcpu=$cpu"
1497 ;;
1498 *)
1499 echo "WARNING: Unknown CPU \"$cpu\", ignored."
1500 ;;
1501 esac
1502 fi
1503
1504 # make sure we can execute files in $TMPDIR
1505 cat > $TMPSH 2>> $logfile <<EOF
1506 #! /bin/sh
1507 EOF
1508 chmod +x $TMPSH >> $logfile 2>&1
1509 if ! $TMPSH >> $logfile 2>&1; then
1510 cat <<EOF
1511 Unable to create and execute files in $TMPDIR1. Set the TMPDIR environment
1512 variable to another directory and make sure that $TMPDIR1 is not mounted
1513 noexec.
1514 EOF
1515 die "Sanity test failed."
1516 fi
1517 rm $TMPSH
1518
1519 # compiler sanity check
1520 check_exec <<EOF
1521 int main(void){ return 0; }
1522 EOF
1523 if test "$?" != 0; then
1524 echo "$cc is unable to create an executable file."
1525 if test -z "$cross_prefix" && ! enabled cross_compile ; then
1526 echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
1527 echo "Only do this if you know what cross compiling means."
1528 fi
1529 die "C compiler test failed."
1530 fi
1531
1532 check_cc <<EOF || die "Symbol mangling check failed."
1533 int ff_extern;
1534 EOF
1535 sym=$($nm -P -g $TMPO | grep ff_extern)
1536 extern_prefix=${sym%%ff_extern*}
1537
1538 check_asm inline_asm '""'
1539
1540 if enabled x86; then
1541 # check whether EBP is available on x86
1542 # As 'i' is stored on the stack, this program will crash
1543 # if the base pointer is used to access it because the
1544 # base pointer is cleared in the inline assembly code.
1545 check_exec_crash <<EOF && enable ebp_available
1546 volatile int i=0;
1547 asm volatile (
1548 "xorl %%ebp, %%ebp"
1549 ::: "%ebp");
1550 return i;
1551 EOF
1552
1553 # check wether EBX is available on x86
1554 check_asm ebx_available '"":::"%ebx"'
1555
1556 # check whether binutils is new enough to compile SSSE3/MMX2
1557 enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
1558 enabled mmx2 && check_asm mmx2 '"movss %xmm0, %xmm0"'
1559
1560 check_asm bswap '"bswap %%eax" ::: "%eax"'
1561
1562 YASMFLAGS="-f $objformat -DARCH_$(toupper $arch)"
1563 enabled x86_64 && append YASMFLAGS "-m amd64"
1564 enabled_all x86_64 shared && append YASMFLAGS "-DPIC"
1565 case "$objformat" in
1566 elf) enabled debug && append YASMFLAGS "-g dwarf2" ;;
1567 macho64) append YASMFLAGS "-DPIC -DPREFIX" ;;
1568 *) append YASMFLAGS "-DPREFIX" ;;
1569 esac
1570 check_yasm "pabsw xmm0, xmm0" && enable yasm
1571 fi
1572
1573 # check for assembler specific support
1574
1575 if test $arch = "powerpc"; then
1576 check_cc <<EOF && enable dcbzl
1577 int main(void) {
1578 register long zero = 0;
1579 char data[1024];
1580 asm volatile("dcbzl %0, %1" : : "b" (data), "r" (zero));
1581 return 0;
1582 }
1583 EOF
1584 fi
1585
1586 # check for SIMD availability
1587
1588 # AltiVec flags: The FSF version of GCC differs from the Apple version
1589 if enabled altivec; then
1590 check_cflags -maltivec -mabi=altivec &&
1591 { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
1592 check_cflags -faltivec
1593
1594 # check if our compiler supports Motorola AltiVec C API
1595 check_cc <<EOF || disable altivec
1596 $inc_altivec_h
1597 int main(void) {
1598 vector signed int v1, v2, v3;
1599 v1 = vec_add(v2,v3);
1600 return 0;
1601 }
1602 EOF
1603
1604 # check if our compiler supports braces for vector declarations
1605 check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
1606 $inc_altivec_h
1607 int main (void) { (vector int) {1}; return 0; }
1608 EOF
1609 fi
1610
1611 # We have to check if pld is a nop and disable it.
1612 enabled armv4l && check_asm pld '"pld [r0]"'
1613 enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
1614 enabled armv6 && check_asm armv6 '"sadd16 r0, r0, r0"'
1615 enabled armvfp && check_asm armvfp '"fadds s0, s0, s0"'
1616 enabled iwmmxt && check_asm iwmmxt '"wunpckelub wr6, wr4"'
1617 enabled mmi && check_asm mmi '"lq $2, 0($2)"'
1618 enabled neon && check_asm neon '"vadd.i16 q0, q0, q0"'
1619 enabled vis && check_asm vis '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc
1620
1621 enabled vis && add_cflags "-mcpu=ultrasparc -mtune=ultrasparc"
1622
1623 # ---
1624 # big/little-endian test
1625 check_cc <<EOF || die "endian test failed"
1626 unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
1627 EOF
1628 od -A n -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
1629
1630 # ---
1631 # check availability of some header files
1632
1633 if check_func dlopen; then
1634 ldl=
1635 elif check_func dlopen -ldl; then
1636 ldl=-ldl
1637 fi
1638
1639 check_func fork
1640 check_func gethrtime
1641 check_func getrusage
1642 check_func inet_aton $network_extralibs
1643 check_func memalign
1644 check_func mkstemp
1645 check_func_headers windows.h GetProcessTimes
1646
1647 check_header byteswap.h
1648 check_header conio.h
1649 check_header dlfcn.h
1650 check_header malloc.h
1651 check_header poll.h
1652 check_header sys/mman.h
1653 check_header sys/resource.h
1654 check_header sys/select.h
1655 check_header termios.h
1656
1657 if ! enabled_any memalign memalign_hack && enabled need_memalign ; then
1658 die "Error, no memalign() but SSE enabled, disable it or use --enable-memalign-hack."
1659 fi
1660
1661 enabled zlib && check_lib zlib.h zlibVersion -lz || disable zlib
1662 enabled bzlib && check_lib bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
1663
1664 # check for some common methods of building with pthread support
1665 # do this before the optional library checks as some of them require pthreads
1666 if enabled pthreads; then
1667 if check_func pthread_create; then
1668 :
1669 elif check_func pthread_create -pthread; then
1670 add_cflags -pthread
1671 add_extralibs -pthread
1672 elif check_func pthread_create -pthreads; then
1673 add_cflags -pthreads
1674 add_extralibs -pthreads
1675 elif check_func pthread_create -lpthreadGC2; then
1676 add_extralibs -lpthreadGC2
1677 elif ! check_lib pthread.h pthread_create -lpthread; then
1678 die "ERROR: can't find pthreads library"
1679 fi
1680 fi
1681
1682 for thread in $THREADS_LIST; do
1683 if enabled $thread; then
1684 test -n "$thread_type" &&
1685 die "ERROR: Only one thread type must be selected." ||
1686 thread_type="$thread"
1687 fi
1688 done
1689
1690 check_lib math.h sin -lm
1691
1692 # test for C99 functions in math.h
1693 for func in llrint lrint lrintf round roundf; do
1694 check_exec <<EOF && enable $func || disable $func
1695 #include <math.h>
1696 int main(void) { return ($func(3.999f) > 0)?0:1; }
1697 EOF
1698 done
1699
1700 # these are off by default, so fail if requested and not available
1701 enabled avisynth && require2 vfw32 "windows.h vfw.h" AVIFileInit -lvfw32
1702 enabled liba52 && require liba52 a52dec/a52.h a52_init -la52
1703 enabled libamr_nb && require libamrnb amrnb/interf_dec.h Speech_Decode_Frame_init -lamrnb -lm
1704 enabled libamr_wb && require libamrwb amrwb/dec_if.h D_IF_init -lamrwb -lm
1705 enabled libdirac && add_cflags "$(pkg-config --cflags dirac)" \
1706 && require libdirac libdirac_decoder/dirac_parser.h dirac_decoder_init -ldirac_decoder \
1707 && require libdirac libdirac_encoder/dirac_encoder.h dirac_encoder_init -ldirac_encoder
1708 enabled libfaac && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
1709 enabled libfaad && require2 libfaad faad.h faacDecOpen -lfaad
1710 enabled libgsm && require libgsm gsm.h gsm_create -lgsm
1711 enabled libmp3lame && require LAME lame/lame.h lame_init -lmp3lame -lm
1712 enabled libnut && require libnut libnut.h nut_demuxer_init -lnut
1713 enabled libschroedinger && add_cflags $(pkg-config --cflags schroedinger-1.0) \
1714 && require libschroedinger schroedinger/schro.h schro_init $(pkg-config --libs schroedinger-1.0)
1715 enabled libtheora && require libtheora theora/theora.h theora_info_init -ltheora -logg
1716 enabled libvorbis && require libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
1717 enabled libx264 && require x264 x264.h x264_encoder_open -lx264 -lm
1718 enabled libxvid && require Xvid xvid.h xvid_global -lxvidcore
1719 enabled mlib && require mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
1720
1721 # libdc1394 check
1722 if enabled libdc1394; then
1723 { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
1724 enable libdc1394_2; } ||
1725 { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
1726 enable libdc1394_1; } ||
1727 die "ERROR: No version of libdc1394 found "
1728 fi
1729
1730
1731 _restrict=
1732 for restrict_keyword in restrict __restrict__ __restrict; do
1733 check_cc <<EOF && _restrict=$restrict_keyword && break
1734 void foo(char * $restrict_keyword p);
1735 EOF
1736 done
1737
1738 test "$vhook" = "default" && vhook="$dlopen"
1739
1740 if test "$target_os" = cygwin -o "$target_os" = mingw32 && enabled_all static vhook ; then
1741 disable vhook
1742 echo
1743 echo "At the moment vhooks don't work on Cygwin or MinGW static builds."
1744 echo "Patches welcome."
1745 echo
1746 fi
1747
1748 if enabled vhook; then
1749 check_ldflags -rdynamic
1750 check_ldflags -export-dynamic
1751 fi
1752
1753 check_foo_config imlib2 imlib2 Imlib2.h imlib_load_font
1754 check_foo_config freetype2 freetype ft2build.h FT_Init_FreeType
1755
1756 ##########################################
1757 # SDL check
1758
1759 disable sdl_too_old
1760 disable sdl
1761 SDL_CONFIG="${cross_prefix}sdl-config"
1762 if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
1763 sdl_cflags=`"${SDL_CONFIG}" --cflags`
1764 temp_cflags $sdl_cflags
1765 temp_extralibs `"${SDL_CONFIG}" --libs`
1766 if check_lib2 SDL.h SDL_Init; then
1767 _sdlversion=`"${SDL_CONFIG}" --version | sed 's/[^0-9]//g'`
1768 if test "$_sdlversion" -lt 121 ; then
1769 enable sdl_too_old
1770 else
1771 enable sdl
1772 check_cc $sdl_cflags <<EOF && enable sdl_video_size
1773 #include <SDL.h>
1774 int main(int argc, char **argv){
1775 const SDL_VideoInfo *vi = SDL_GetVideoInfo();
1776 int w = vi->current_w;
1777 return 0;
1778 }
1779 EOF
1780 fi
1781 fi
1782 restore_flags
1783 fi
1784
1785 texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
1786
1787 ##########################################
1788 # Network check
1789
1790 if enabled network; then
1791 check_type sys/socket.h socklen_t
1792 # Prefer arpa/inet.h over winsock2
1793 if check_header arpa/inet.h ; then
1794 check_func closesocket
1795 elif check_header winsock2.h ; then
1796 network_extralibs="-lws2_32"
1797 check_type ws2tcpip.h socklen_t
1798 check_func_headers winsock2.h closesocket
1799 fi
1800 fi
1801
1802 ##########################################
1803 # IPv6 check
1804
1805 enabled network && enabled ipv6 && check_ld <<EOF && enable ipv6 || disable ipv6
1806 #include <sys/types.h>
1807 #include <sys/socket.h>
1808 #include <netinet/in.h>
1809 #include <netdb.h>
1810 int main(void) {
1811 struct sockaddr_storage saddr;
1812 struct ipv6_mreq mreq6;
1813 getaddrinfo(0,0,0,0);
1814 getnameinfo(0,0,0,0,0,0,0);
1815 IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
1816 }
1817 EOF
1818
1819 check_header linux/videodev.h
1820 check_header linux/videodev2.h
1821 check_header sys/videoio.h
1822
1823 check_func_headers "windows.h vfw.h" capCreateCaptureWindow -lvfw32
1824
1825 # check for ioctl_meteor.h, ioctl_bt848.h and alternatives
1826 { check_header dev/bktr/ioctl_meteor.h &&
1827 check_header dev/bktr/ioctl_bt848.h; } ||
1828 { check_header machine/ioctl_meteor.h &&
1829 check_header machine/ioctl_bt848.h; } ||
1830 { check_header dev/video/meteor/ioctl_meteor.h &&
1831 check_header dev/video/bktr/ioctl_bt848.h; } ||
1832 check_header dev/ic/bt8xx.h
1833
1834 check_header sys/soundcard.h
1835 check_header soundcard.h
1836
1837 # deal with the X11 frame grabber
1838 enabled x11grab &&
1839 check_header X11/Xlib.h &&
1840 check_header X11/extensions/XShm.h &&
1841 check_func XOpenDisplay -lX11 &&
1842 check_func XShmCreateImage -lX11 -lXext
1843
1844 enabled debug && add_cflags -g"$debuglevel"
1845
1846 # add some useful compiler flags if supported
1847 check_cflags -Wdeclaration-after-statement
1848 check_cflags -Wall
1849 check_cflags -Wno-switch
1850 check_cflags -Wdisabled-optimization
1851 check_cflags -Wpointer-arith
1852 check_cflags -Wredundant-decls
1853 check_cflags -Wno-pointer-sign
1854 check_cflags -Wcast-qual
1855 check_cflags -Wwrite-strings
1856 check_cflags -Wtype-limits
1857 enabled extra_warnings && check_cflags -Winline
1858
1859 # add some linker flags
1860 check_ldflags -Wl,--warn-common
1861 check_ldflags -Wl,--as-needed
1862 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'
1863 check_ldflags -Wl,-Bsymbolic
1864
1865 if enabled small; then
1866 check_cflags -Os # not all compilers support -Os
1867 optimizations="small"
1868 elif enabled optimizations; then
1869 if $cc -v 2>&1 | grep -q xlc; then
1870 add_cflags "-O5"
1871 add_ldflags "-O5"
1872 else
1873 add_cflags "-O3"
1874 fi
1875 fi
1876 check_cflags -fno-math-errno
1877 check_cflags -fno-signed-zeros
1878
1879 # add some flags for Intel C Compiler
1880 if $cc --version | grep -q Intel; then
1881 # Just warnings, no remarks
1882 check_cflags -w1
1883 # -wd: Disable following warnings
1884 # 144, 167, 556: -Wno-pointer-sign
1885 # 10006: ignoring unknown option -fno-signed-zeros
1886 # 10156: ignoring option '-W'; no argument required
1887 check_cflags -wd144,167,556,10006,10156
1888 # 11030: Warning unknown option --as-needed
1889 # 10156: ignoring option '-export'; no argument required
1890 check_ldflags -wd10156,11030
1891 # Allow to compile with optimizations
1892 check_ldflags -march=$cpu
1893 fi
1894
1895 # PIC flags for shared library objects where they are needed
1896 if enabled shared; then
1897 # LIBOBJFLAGS may have already been set in the OS configuration
1898 if test -z "$LIBOBJFLAGS" ; then
1899 case "$arch" in
1900 x86_64|ia64|alpha|sparc*|power*|parisc*) LIBOBJFLAGS='$(PIC)' ;;
1901 esac
1902 fi
1903 fi
1904
1905 if enabled gprof; then
1906 add_cflags "-p"
1907 add_ldflags "-p"
1908 fi
1909
1910 VHOOKCFLAGS="-fPIC"
1911
1912 # Find out if the .align argument is a power of two or not.
1913 if test $asmalign_pot = "unknown"; then
1914 disable asmalign_pot
1915 echo 'asm (".align 3");' | check_cc && enable asmalign_pot
1916 fi
1917
1918 enabled_any $DECODER_LIST && enable decoders
1919 enabled_any $ENCODER_LIST && enable encoders
1920 enabled_any $BSF_LIST && enable bsfs
1921 enabled_any $DEMUXER_LIST && enable demuxers
1922 enabled_any $MUXER_LIST && enable muxers
1923 enabled_any $FILTER_LIST && enable filters
1924 enabled_any $INDEV_LIST && enable demuxers
1925 enabled_any $OUTDEV_LIST && enable muxers
1926 enabled_any $PROTOCOL_LIST && enable protocols
1927
1928 enabled_any $THREADS_LIST && enable threads
1929
1930 check_deps $CONFIG_LIST \
1931 $HAVE_LIST \
1932 $DECODER_LIST \
1933 $ENCODER_LIST \
1934 $PARSER_LIST \
1935 $BSF_LIST \
1936 $DEMUXER_LIST \
1937 $MUXER_LIST \
1938 $FILTER_LIST \
1939 $INDEV_LIST \
1940 $OUTDEV_LIST \
1941 $PROTOCOL_LIST \
1942
1943 enabled libdc1394 && append pkg_requires "libraw1394"
1944 enabled libdirac && append pkg_requires "dirac"
1945 enabled libtheora && append pkg_requires "theora"
1946 enabled libvorbis && append pkg_requires "vorbisenc"
1947
1948 echo "install prefix $prefix"
1949 echo "source path $source_path"
1950 echo "C compiler $cc"
1951 echo ".align is power-of-two $asmalign_pot"
1952 echo "ARCH $arch ($cpu)"
1953 if test "$build_suffix" != ""; then
1954 echo "build suffix $build_suffix"
1955 fi
1956 echo "big-endian ${bigendian-no}"
1957 if test $arch = "x86_32" -o $arch = "x86_64"; then
1958 echo "yasm ${yasm-no}"
1959 echo "MMX enabled ${mmx-no}"
1960 echo "CMOV enabled ${cmov-no}"
1961 echo "CMOV is fast ${fast_cmov-no}"
1962 echo "EBX available ${ebx_available-no}"
1963 echo "EBP available ${ebp_available-no}"
1964 fi
1965 if test $arch = "armv4l"; then
1966 echo "ARMv5TE enabled ${armv5te-no}"
1967 echo "ARMv6 enabled ${armv6-no}"
1968 echo "ARM VFP enabled ${armvfp-no}"
1969 echo "IWMMXT enabled ${iwmmxt-no}"
1970 echo "NEON enabled ${neon-no}"
1971 fi
1972 if test $arch = "mips"; then
1973 echo "MMI enabled ${mmi-no}"
1974 fi
1975 if test $arch = "powerpc"; then
1976 echo "AltiVec enabled ${altivec-no}"
1977 echo "dcbzl available ${dcbzl-no}"
1978 fi
1979 echo "gprof enabled ${gprof-no}"
1980 echo "debug symbols ${debug-no}"
1981 echo "strip symbols ${stripping-no}"
1982 echo "optimizations ${optimizations-no}"
1983 echo "static ${static-no}"
1984 echo "shared ${shared-no}"
1985 echo "postprocessing support ${postproc-no}"
1986 echo "software scaler enabled ${swscale-no}"
1987 echo "new filter support ${avfilter-no}"
1988 echo "filters using lavformat ${avfilter_lavf-no}"
1989 echo "video hooking ${vhook-no}"
1990 if enabled vhook; then
1991 echo "Imlib2 support ${imlib2-no}"
1992 echo "FreeType support ${freetype2-no}"
1993 fi
1994 echo "network support ${network-no}"
1995 if enabled network; then
1996 echo "IPv6 support ${ipv6-no}"
1997 fi
1998 echo "threading support ${thread_type-no}"
1999 echo "SDL support ${sdl-no}"
2000 if enabled sdl_too_old; then
2001 echo "-> Your SDL version is too old - please upgrade to have FFplay/SDL support."
2002 fi
2003 echo "Sun medialib support ${mlib-no}"
2004 echo "AVISynth enabled ${avisynth-no}"
2005 echo "liba52 support ${liba52-no}"
2006 echo "liba52 dlopened ${liba52bin-no}"
2007 echo "libamr-nb support ${libamr_nb-no}"
2008 echo "libamr-wb support ${libamr_wb-no}"
2009 echo "libdc1394 support ${libdc1394-no}"
2010 echo "libdirac enabled ${libdirac-no}"
2011 echo "libfaac enabled ${libfaac-no}"
2012 echo "libfaad enabled ${libfaad-no}"
2013 echo "libfaad dlopened ${libfaadbin-no}"
2014 echo "libgsm enabled ${libgsm-no}"
2015 echo "libmp3lame enabled ${libmp3lame-no}"
2016 echo "libnut enabled ${libnut-no}"
2017 echo "libschroedinger enabled ${libschroedinger-no}"
2018 echo "libtheora enabled ${libtheora-no}"
2019 echo "libvorbis enabled ${libvorbis-no}"
2020 echo "libx264 enabled ${libx264-no}"
2021 echo "libxvid enabled ${libxvid-no}"
2022 echo "zlib enabled ${zlib-no}"
2023 echo "bzlib enabled ${bzlib-no}"
2024 echo
2025
2026 for type in decoder encoder parser demuxer muxer protocol filter bsf indev outdev; do
2027 echo "Enabled ${type}s:"
2028 eval list=\$$(toupper $type)_LIST
2029 for part in $list; do
2030 enabled $part && echo ${part%_*}
2031 done | sort | pr -3 -t
2032 echo
2033 done
2034
2035 license="LGPL"
2036 if enabled nonfree; then
2037 license="unredistributable"
2038 elif enabled gpl; then
2039 license="GPL"
2040 fi
2041
2042 echo "License: $license"
2043
2044 echo "Creating config.mak and config.h..."
2045
2046 echo "# Automatically generated by configure - do not modify!" > config.mak
2047 echo "/* Automatically generated by configure - do not modify! */" > $TMPH
2048 echo "#ifndef FFMPEG_CONFIG_H" >> $TMPH
2049 echo "#define FFMPEG_CONFIG_H" >> $TMPH
2050 echo "#define FFMPEG_CONFIGURATION \"$FFMPEG_CONFIGURATION\"" >> $TMPH
2051
2052 echo "FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION" >> config.mak
2053 echo "prefix=$prefix" >> config.mak
2054 echo "LIBDIR=\$(DESTDIR)$libdir" >> config.mak
2055 echo "SHLIBDIR=\$(DESTDIR)$shlibdir" >> config.mak
2056 echo "INCDIR=\$(DESTDIR)$incdir" >> config.mak
2057 echo "BINDIR=\$(DESTDIR)$bindir" >> config.mak
2058 echo "MANDIR=\$(DESTDIR)$mandir" >> config.mak
2059 echo "CC=$cc" >> config.mak
2060 echo "YASM=$yasmexe" >> config.mak
2061 echo "AR=$ar" >> config.mak
2062 echo "RANLIB=$ranlib" >> config.mak
2063 echo "LN_S=$ln_s" >> config.mak
2064 enabled stripping &&
2065 echo "STRIP=$strip" >> config.mak ||
2066 echo "STRIP=echo ignoring strip" >> config.mak
2067
2068 echo "OPTFLAGS=$CFLAGS" >> config.mak
2069 echo "VHOOKCFLAGS=$VHOOKCFLAGS" >> config.mak
2070 echo "LDFLAGS=$LDFLAGS" >> config.mak
2071 echo "FFSERVERLDFLAGS=$FFSERVERLDFLAGS" >> config.mak
2072 echo "SHFLAGS=$SHFLAGS" >> config.mak
2073 echo "YASMFLAGS=$YASMFLAGS" >> config.mak
2074 echo "VHOOKSHFLAGS=$VHOOKSHFLAGS" >> config.mak
2075 echo "VHOOKLIBS=$VHOOKLIBS" >> config.mak
2076 echo "LIBOBJFLAGS=$LIBOBJFLAGS" >> config.mak
2077 echo "BUILD_STATIC=$static" >> config.mak
2078 echo "BUILDSUF=$build_suffix" >> config.mak
2079 echo "FULLNAME=$FULLNAME" >> config.mak
2080 echo "LIBPREF=$LIBPREF" >> config.mak
2081 echo "LIBSUF=$LIBSUF" >> config.mak
2082 echo "LIBNAME=$LIBNAME" >> config.mak
2083 echo "SLIBPREF=$SLIBPREF" >> config.mak
2084 echo "SLIBSUF=$SLIBSUF" >> config.mak
2085 echo "EXESUF=$EXESUF" >> config.mak
2086 echo "DEPEND_CMD=$DEPEND_CMD" >> config.mak
2087
2088 if enabled bigendian; then
2089 echo "WORDS_BIGENDIAN=yes" >> config.mak
2090 echo "#define WORDS_BIGENDIAN 1" >> $TMPH
2091 fi
2092
2093 if enabled sdl; then
2094 echo "SDL_LIBS=`"${SDL_CONFIG}" --libs`" >> config.mak
2095 echo "SDL_CFLAGS=`"${SDL_CONFIG}" --cflags`" >> config.mak
2096 fi
2097 if enabled texi2html; then
2098 echo "BUILD_DOC=yes" >> config.mak
2099 fi
2100
2101 get_version(){
2102 name=$1
2103 file=$source_path/$2
2104 eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
2105 eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
2106 lcname=$(tolower $name)
2107 eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
2108 eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
2109 }
2110
2111 get_version LIBSWSCALE libswscale/swscale.h
2112 get_version LIBPOSTPROC libpostproc/postprocess.h
2113 get_version LIBAVCODEC libavcodec/avcodec.h
2114 get_version LIBAVDEVICE libavdevice/avdevice.h
2115 get_version LIBAVFORMAT libavformat/avformat.h
2116 get_version LIBAVUTIL libavutil/avutil.h
2117 get_version LIBAVFILTER libavfilter/avfilter.h
2118
2119 if enabled shared; then
2120 echo "BUILD_SHARED=yes" >> config.mak
2121 echo "PIC=-fPIC -DPIC" >> config.mak
2122 echo "LIBTARGET=${LIBTARGET}" >> config.mak
2123 echo "SLIBNAME=${SLIBNAME}" >> config.mak
2124 echo "SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}" >> config.mak
2125 echo "SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}" >> config.mak
2126 echo "SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}" >> config.mak
2127 echo "SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}" >> config.mak
2128 echo "SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}" >> config.mak
2129 echo "SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}" >> config.mak
2130 fi
2131 echo "LIB_INSTALL_EXTRA_CMD=${LIB_INSTALL_EXTRA_CMD}" >> config.mak
2132 echo "EXTRALIBS=$extralibs" >> config.mak
2133
2134 print_config ARCH_ $TMPH config.mak $ARCH_LIST
2135 print_config HAVE_ $TMPH config.mak $HAVE_LIST
2136 print_config CONFIG_ $TMPH config.mak $CONFIG_LIST \
2137 $DECODER_LIST \
2138 $ENCODER_LIST \
2139 $PARSER_LIST \
2140 $BSF_LIST \
2141 $DEMUXER_LIST \
2142 $MUXER_LIST \
2143 $FILTER_LIST \
2144 $PROTOCOL_LIST \
2145 $INDEV_LIST \
2146 $OUTDEV_LIST \
2147
2148 echo "#define restrict $_restrict" >> $TMPH
2149
2150 if enabled small; then
2151 echo "#define av_always_inline" >> $TMPH
2152 fi
2153
2154 echo "SRC_PATH=\"$source_path\"" >> config.mak
2155 echo "SRC_PATH_BARE=$source_path" >> config.mak
2156 echo "BUILD_ROOT=\"$PWD\"" >> config.mak
2157
2158 # Apparently it's not possible to portably echo a backslash.
2159 enabled asmalign_pot &&
2160 printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH ||
2161 printf '#define ASMALIGN(ZEROBITS) ".align 1<<" #ZEROBITS "\\n\\t"\n' >> $TMPH
2162
2163 echo "#define EXTERN_PREFIX \"${extern_prefix}\"" >> $TMPH
2164
2165 echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
2166
2167 # Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
2168 cmp -s $TMPH config.h &&
2169 echo "config.h is unchanged" ||
2170 mv -f $TMPH config.h
2171
2172 rm -f $TMPC $TMPE $TMPH $TMPO $TMPS $TMPSH
2173
2174 # build tree in object directory if source path is different from current one
2175 if enabled source_path_used; then
2176 DIRS="\
2177 doc \
2178 libavcodec \
2179 libavcodec/alpha \
2180 libavcodec/armv4l \
2181 libavcodec/bfin \
2182 libavcodec/i386 \
2183 libavcodec/mlib \
2184 libavcodec/ppc \
2185 libavcodec/sh4 \
2186 libavcodec/sparc \
2187 libavdevice \
2188 libavfilter \
2189 libavformat \
2190 libavutil \
2191 libpostproc \
2192 libswscale \
2193 tests \
2194 tools \
2195 vhook \
2196 "
2197 FILES="\
2198 Makefile \
2199 common.mak \
2200 subdir.mak \
2201 doc/texi2pod.pl \
2202 libavcodec/Makefile \
2203 libavdevice/Makefile \
2204 libavfilter/Makefile \
2205 libavformat/Makefile \
2206 libavutil/Makefile \
2207 libpostproc/Makefile \
2208 libswscale/Makefile \
2209 "
2210 for dir in $DIRS ; do
2211 mkdir -p $dir
2212 done
2213 for f in $FILES ; do
2214 $ln_s "$source_path/$f" $f
2215 done
2216 fi
2217
2218
2219 # build pkg-config files
2220
2221 pkgconfig_generate(){
2222 name=$1
2223 shortname=${name#lib}
2224 comment=$2
2225 version=$3
2226 libs=$4
2227 requires=$5
2228 cat <<EOF > $name/$name.pc
2229 prefix=$prefix
2230 exec_prefix=\${prefix}
2231 libdir=$libdir
2232 includedir=$incdir
2233
2234 Name: $name
2235 Description: $comment
2236 Version: $version
2237 Requires: $(disabled shared && echo $requires)
2238 Requires.private: $(enabled shared && echo $requires)
2239 Conflicts:
2240 Libs: -L\${libdir} -l${shortname} $(disabled shared && echo $libs)
2241 Libs.private: $(enabled shared && echo $libs)
2242 Cflags: -I\${includedir}
2243 EOF
2244 cat <<EOF > $name/$name-uninstalled.pc
2245 prefix=
2246 exec_prefix=
2247 libdir=\${pcfiledir}
2248 includedir=\${pcfiledir}/..
2249
2250 Name: $name
2251 Description: $comment
2252 Version: $version
2253 Requires: $requires
2254 Conflicts:
2255 Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
2256 Cflags: -I\${includedir}
2257 EOF
2258 }
2259
2260 pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
2261 pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "$pkg_requires libavutil = $LIBAVUTIL_VERSION"
2262 pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "$pkg_requires libavcodec = $LIBAVCODEC_VERSION"
2263 pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "$pkg_requires libavformat = $LIBAVFORMAT_VERSION"
2264 enabled avfilter &&
2265 pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "$pkg_requires libavutil = $LIBAVUTIL_VERSION"
2266 enabled postproc &&
2267 pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
2268 if enabled swscale; then
2269 pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"
2270 else
2271 pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "$pkg_requires libavcodec = $LIBAVCODEC_VERSION"
2272 apply libswscale/libswscale.pc sed s/^Libs:.*$/Libs:/
2273 fi