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