Allow disabling doc generation with --disable-doc
[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 " --datadir=DIR install data files in DIR [PREFIX/share/ffmpeg]"
68 echo " --libdir=DIR install libs in DIR [PREFIX/lib]"
69 echo " --shlibdir=DIR install shared libs in DIR [PREFIX/lib]"
70 echo " --incdir=DIR install includes in DIR [PREFIX/include]"
71 echo " --mandir=DIR install man page in DIR [PREFIX/share/man]"
72 echo
73 echo "Configuration options:"
74 echo " --disable-static do not build static libraries [no]"
75 echo " --enable-shared build shared libraries [no]"
76 echo " --enable-gpl allow use of GPL code, the resulting libs"
77 echo " and binaries will be under GPL [no]"
78 echo " --enable-version3 upgrade (L)GPL to version 3 [no]"
79 echo " --enable-nonfree allow use of nonfree code, the resulting libs"
80 echo " and binaries will be unredistributable [no]"
81 echo " --disable-doc do not build documentation"
82 echo " --disable-ffmpeg disable ffmpeg build"
83 echo " --disable-ffplay disable ffplay build"
84 echo " --disable-ffserver disable ffserver build"
85 echo " --enable-postproc enable GPLed postprocessing support [no]"
86 echo " --enable-avfilter video filter support [no]"
87 echo " --enable-avfilter-lavf video filters dependent on avformat [no]"
88 echo " --enable-beosthreads use BeOS threads [no]"
89 echo " --enable-os2threads use OS/2 threads [no]"
90 echo " --enable-pthreads use pthreads [no]"
91 echo " --enable-w32threads use Win32 threads [no]"
92 echo " --enable-x11grab enable X11 grabbing [no]"
93 echo " --disable-network disable network support [no]"
94 echo " --disable-ipv6 disable IPv6 support [no]"
95 echo " --disable-mpegaudio-hp faster (but less accurate) MPEG audio decoding [no]"
96 echo " --enable-gray enable full grayscale support (slower color)"
97 echo " --disable-swscale-alpha disable alpha channel support in swscale"
98 echo " --disable-fastdiv disable table-based division"
99 echo " --enable-small optimize for size instead of speed"
100 echo " --disable-aandct disable AAN DCT code"
101 echo " --disable-fft disable FFT code"
102 echo " --disable-golomb disable Golomb code"
103 echo " --disable-lpc disable LPC code"
104 echo " --disable-mdct disable MDCT code"
105 echo " --disable-rdft disable RDFT code"
106 echo " --disable-vaapi disable VAAPI code"
107 echo " --disable-vdpau disable VDPAU code"
108 echo " --enable-runtime-cpudetect detect cpu capabilities at runtime (bigger binary)"
109 echo " --enable-hardcoded-tables use hardcoded tables instead of runtime generation"
110 echo " --enable-memalign-hack emulate memalign, interferes with memory debuggers"
111 echo " --enable-beos-netserver enable BeOS netserver"
112 echo " --disable-encoder=NAME disable encoder NAME"
113 echo " --enable-encoder=NAME enable encoder NAME"
114 echo " --disable-encoders disable all encoders"
115 echo " --disable-decoder=NAME disable decoder NAME"
116 echo " --enable-decoder=NAME enable decoder NAME"
117 echo " --disable-decoders disable all decoders"
118 echo " --disable-hwaccel=NAME disable hwaccel NAME"
119 echo " --enable-hwaccel=NAME enable hwaccel NAME"
120 echo " --disable-hwaccels disable all hwaccels"
121 echo " --disable-muxer=NAME disable muxer NAME"
122 echo " --enable-muxer=NAME enable muxer NAME"
123 echo " --disable-muxers disable all muxers"
124 echo " --disable-demuxer=NAME disable demuxer NAME"
125 echo " --enable-demuxer=NAME enable demuxer NAME"
126 echo " --disable-demuxers disable all demuxers"
127 echo " --enable-parser=NAME enable parser NAME"
128 echo " --disable-parser=NAME disable parser NAME"
129 echo " --disable-parsers disable all parsers"
130 echo " --enable-bsf=NAME enable bitstream filter NAME"
131 echo " --disable-bsf=NAME disable bitstream filter NAME"
132 echo " --disable-bsfs disable all bitstream filters"
133 echo " --enable-protocol=NAME enable protocol NAME"
134 echo " --disable-protocol=NAME disable protocol NAME"
135 echo " --disable-protocols disable all protocols"
136 echo " --disable-indev=NAME disable input device NAME"
137 echo " --disable-outdev=NAME disable output device NAME"
138 echo " --disable-indevs disable input devices"
139 echo " --disable-outdevs disable output devices"
140 echo " --disable-devices disable all devices"
141 echo " --enable-filter=NAME enable filter NAME"
142 echo " --disable-filter=NAME disable filter NAME"
143 echo " --disable-filters disable all filters"
144 echo " --list-decoders show all available decoders"
145 echo " --list-encoders show all available encoders"
146 echo " --list-hwaccels show all available hardware accelerators"
147 echo " --list-muxers show all available muxers"
148 echo " --list-demuxers show all available demuxers"
149 echo " --list-parsers show all available parsers"
150 echo " --list-protocols show all available protocols"
151 echo " --list-bsfs show all available bitstream filters"
152 echo " --list-indevs show all available input devices"
153 echo " --list-outdevs show all available output devices"
154 echo " --list-filters show all available filters"
155 echo
156 echo "External library support:"
157 echo " --enable-avisynth enable reading of AVISynth script files [no]"
158 echo " --enable-bzlib enable bzlib [autodetect]"
159 echo " --enable-libopencore-amrnb enable AMR-NB de/encoding via libopencore-amrnb [no]"
160 echo " --enable-libopencore-amrwb enable AMR-WB decoding via libopencore-amrwb [no]"
161 echo " --enable-libdc1394 enable IIDC-1394 grabbing using libdc1394"
162 echo " and libraw1394 [no]"
163 echo " --enable-libdirac enable Dirac support via libdirac [no]"
164 echo " --enable-libfaac enable FAAC support via libfaac [no]"
165 echo " --enable-libfaad enable FAAD support via libfaad [no]"
166 echo " --enable-libfaadbin open libfaad.so.0 at runtime [no]"
167 echo " --enable-libgsm enable GSM support via libgsm [no]"
168 echo " --enable-libmp3lame enable MP3 encoding via libmp3lame [no]"
169 echo " --enable-libnut enable NUT (de)muxing via libnut,"
170 echo " native (de)muxer exists [no]"
171 echo " --enable-libopenjpeg enable JPEG 2000 decoding via OpenJPEG [no]"
172 echo " --enable-libschroedinger enable Dirac support via libschroedinger [no]"
173 echo " --enable-libspeex enable Speex decoding via libspeex [no]"
174 echo " --enable-libtheora enable Theora encoding via libtheora [no]"
175 echo " --enable-libvorbis enable Vorbis encoding via libvorbis,"
176 echo " native implementation exists [no]"
177 echo " --enable-libx264 enable H.264 encoding via x264 [no]"
178 echo " --enable-libxvid enable Xvid encoding via xvidcore,"
179 echo " native MPEG-4/Xvid encoder exists [no]"
180 echo " --enable-mlib enable Sun medialib [no]"
181 echo " --enable-zlib enable zlib [autodetect]"
182 echo ""
183 echo "Advanced options (experts only):"
184 echo " --source-path=PATH path to source code [$source_path]"
185 echo " --cross-prefix=PREFIX use PREFIX for compilation tools [$cross_prefix]"
186 echo " --enable-cross-compile assume a cross-compiler is used"
187 echo " --sysroot=PATH root of cross-build tree"
188 echo " --sysinclude=PATH location of cross-build system headers"
189 echo " --target-os=OS compiler targets OS [$target_os]"
190 echo " --target-exec=CMD command to run executables on target"
191 echo " --target-path=DIR path to view of build directory on target"
192 echo " --nm=NM use nm tool"
193 echo " --as=AS use assembler AS [$as_default]"
194 echo " --cc=CC use C compiler CC [$cc_default]"
195 echo " --ld=LD use linker LD"
196 echo " --host-cc=HOSTCC use host C compiler HOSTCC"
197 echo " --host-cflags=HCFLAGS use HCFLAGS when compiling for host"
198 echo " --host-ldflags=HLDFLAGS use HLDFLAGS when linking for host"
199 echo " --host-libs=HLIBS use libs HLIBS when linking for host"
200 echo " --extra-cflags=ECFLAGS add ECFLAGS to CFLAGS [$CFLAGS]"
201 echo " --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]"
202 echo " --extra-libs=ELIBS add ELIBS [$ELIBS]"
203 echo " --extra-version=STRING version string suffix []"
204 echo " --build-suffix=SUFFIX library name suffix []"
205 echo " --arch=ARCH select architecture [$arch]"
206 echo " --cpu=CPU select the minimum required CPU (affects"
207 echo " instruction selection, may crash on older CPUs)"
208 echo " --enable-powerpc-perf enable performance report on PPC"
209 echo " (requires enabling PMC)"
210 echo " --disable-altivec disable AltiVec optimizations"
211 echo " --disable-amd3dnow disable 3DNow! optimizations"
212 echo " --disable-amd3dnowext disable 3DNow! extended optimizations"
213 echo " --disable-mmx disable MMX optimizations"
214 echo " --disable-mmx2 disable MMX2 optimizations"
215 echo " --disable-sse disable SSE optimizations"
216 echo " --disable-ssse3 disable SSSE3 optimizations"
217 echo " --disable-armv5te disable armv5te optimizations"
218 echo " --disable-armv6 disable armv6 optimizations"
219 echo " --disable-armv6t2 disable armv6t2 optimizations"
220 echo " --disable-armvfp disable ARM VFP optimizations"
221 echo " --disable-iwmmxt disable iwmmxt optimizations"
222 echo " --disable-mmi disable MMI optimizations"
223 echo " --disable-neon disable neon optimizations"
224 echo " --disable-vis disable VIS optimizations"
225 echo " --disable-yasm disable use of yasm assembler"
226 echo " --enable-pic build position-independent code"
227 echo
228 echo "Developer options (useful when working on FFmpeg itself):"
229 echo " --disable-debug disable debugging symbols"
230 echo " --enable-debug=LEVEL set the debug level [$debuglevel]"
231 echo " --enable-gprof enable profiling with gprof [$gprof]"
232 echo " --disable-optimizations disable compiler optimizations"
233 echo " --enable-extra-warnings enable more compiler warnings"
234 echo " --disable-stripping disable stripping of executables and shared libraries"
235 echo ""
236 echo "NOTE: Object files are built at the place where configure is launched."
237 exit 0
238 }
239
240 log(){
241 echo "$@" >> $logfile
242 }
243
244 log_file(){
245 log BEGIN $1
246 pr -n -t $1 >> $logfile
247 log END $1
248 }
249
250 echolog(){
251 log "$@"
252 echo "$@"
253 }
254
255 die(){
256 echolog "$@"
257 cat <<EOF
258
259 If you think configure made a mistake, make sure you are using the latest
260 version from SVN. If the latest version fails, report the problem to the
261 ffmpeg-user@mplayerhq.hu mailing list or IRC #ffmpeg on irc.freenode.net.
262 EOF
263 if disabled logging; then
264 cat <<EOF
265 Rerun configure with logging enabled (do not use --disable-logging), and
266 include the log this produces with your report.
267 EOF
268 else
269 cat <<EOF
270 Include the log file "$logfile" produced by configure as this will help
271 solving the problem.
272 EOF
273 fi
274 exit 1
275 }
276
277 # Avoid locale weirdness, besides we really just want to translate ASCII.
278 toupper(){
279 echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
280 }
281
282 tolower(){
283 echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
284 }
285
286 c_escape(){
287 echo "$*" | sed 's/["\\]/\\\0/g'
288 }
289
290 sh_quote(){
291 v=$(echo "$1" | sed "s/'/'\\\\''/g")
292 test "$v" = "${v#*[ |&;<>()$\`\\\"\'*?\[\]#~=%]}" || v="'$v'"
293 echo "$v"
294 }
295
296 filter(){
297 pat=$1
298 shift
299 for v; do
300 eval "case $v in $pat) echo $v ;; esac"
301 done
302 }
303
304 set_all(){
305 value=$1
306 shift
307 for var in $*; do
308 eval $var=$value
309 done
310 }
311
312 set_weak(){
313 value=$1
314 shift
315 for var; do
316 eval : \${$var:=$value}
317 done
318 }
319
320 pushvar(){
321 for var in $*; do
322 eval level=\${${var}_level:=0}
323 eval ${var}_${level}="\$$var"
324 eval ${var}_level=$(($level+1))
325 done
326 }
327
328 popvar(){
329 for var in $*; do
330 eval level=\${${var}_level:-0}
331 test $level = 0 && continue
332 eval level=$(($level-1))
333 eval $var="\${${var}_${level}}"
334 eval ${var}_level=$level
335 eval unset ${var}_${level}
336 done
337 }
338
339 enable(){
340 set_all yes $*
341 }
342
343 disable(){
344 set_all no $*
345 }
346
347 enable_weak(){
348 set_weak yes $*
349 }
350
351 disable_weak(){
352 set_weak no $*
353 }
354
355 enable_safe(){
356 enable $(echo "$*" | sed 's/[^A-Za-z0-9_ ]/_/g')
357 }
358
359 disable_safe(){
360 disable $(echo "$*" | sed 's/[^A-Za-z0-9_ ]/_/g')
361 }
362
363 do_enable_deep(){
364 for var; do
365 enabled $var && continue
366 eval sel="\$${var}_select"
367 eval sgs="\$${var}_suggest"
368 pushvar var sgs
369 enable_deep $sel
370 popvar sgs
371 enable_deep_weak $sgs
372 popvar var
373 done
374 }
375
376 enable_deep(){
377 do_enable_deep $*
378 enable $*
379 }
380
381 enable_deep_weak(){
382 do_enable_deep $*
383 enable_weak $*
384 }
385
386 enabled(){
387 test "${1#!}" = "$1" && op== || op=!=
388 eval test "x\$${1#!}" $op "xyes"
389 }
390
391 disabled(){
392 test "${1#!}" = "$1" && op== || op=!=
393 eval test "x\$${1#!}" $op "xno"
394 }
395
396 enabled_all(){
397 for opt; do
398 enabled $opt || return 1
399 done
400 }
401
402 disabled_all(){
403 for opt; do
404 disabled $opt || return 1
405 done
406 }
407
408 enabled_any(){
409 for opt; do
410 enabled $opt && return 0
411 done
412 }
413
414 disabled_any(){
415 for opt; do
416 disabled $opt && return 0
417 done
418 return 1
419 }
420
421 set_default(){
422 for opt; do
423 eval : \${$opt:=\$${opt}_default}
424 done
425 }
426
427 is_in(){
428 value=$1
429 shift
430 for var in $*; do
431 [ $var = $value ] && return 0
432 done
433 return 1
434 }
435
436 check_deps(){
437 for cfg; do
438 cfg="${cfg#!}"
439 enabled ${cfg}_checking && die "Circular dependency for $cfg."
440 disabled ${cfg}_checking && continue
441 enable ${cfg}_checking
442
443 eval dep_all="\$${cfg}_deps"
444 eval dep_any="\$${cfg}_deps_any"
445 eval dep_sel="\$${cfg}_select"
446 eval dep_sgs="\$${cfg}_suggest"
447
448 pushvar cfg dep_all dep_any dep_sel dep_sgs
449 check_deps $dep_all $dep_any $dep_sel $dep_sgs
450 popvar cfg dep_all dep_any dep_sel dep_sgs
451
452 enabled_all $dep_all || disable $cfg
453 enabled_any $dep_any || disable $cfg
454 disabled_any $dep_sel && disable $cfg
455
456 if enabled $cfg; then
457 eval dep_extralibs="\$${cfg}_extralibs"
458 test -n "$dep_extralibs" && add_extralibs $dep_extralibs
459 enable_deep $dep_sel
460 enable_deep_weak $dep_sgs
461 fi
462
463 disable ${cfg}_checking
464 done
465 }
466
467 print_config(){
468 pfx=$1
469 header=$2
470 makefile=$3
471 shift 3
472 for cfg; do
473 ucname="$(toupper $cfg)"
474 if enabled $cfg; then
475 echo "#define ${pfx}${ucname} 1" >> $header
476 echo "${pfx}${ucname}=yes" >> $makefile
477 else
478 echo "#define ${pfx}${ucname} 0" >> $header
479 fi
480 done
481 }
482
483 flags_saved(){
484 (: ${SAVE_CFLAGS?}) 2> /dev/null
485 }
486
487 save_flags(){
488 flags_saved && return
489 SAVE_CFLAGS="$CFLAGS"
490 SAVE_LDFLAGS="$LDFLAGS"
491 SAVE_extralibs="$extralibs"
492 }
493
494 restore_flags(){
495 flags_saved || return
496 CFLAGS="$SAVE_CFLAGS"
497 LDFLAGS="$SAVE_LDFLAGS"
498 extralibs="$SAVE_extralibs"
499 unset SAVE_CFLAGS
500 unset SAVE_LDFLAGS
501 unset SAVE_extralibs
502 }
503
504 temp_cflags(){
505 save_flags
506 CFLAGS="$CFLAGS $*"
507 }
508
509 temp_ldflags(){
510 save_flags
511 LDFLAGS="$LDFLAGS $*"
512 }
513
514 temp_extralibs(){
515 save_flags
516 extralibs="$extralibs $*"
517 }
518
519 append(){
520 var=$1
521 shift
522 flags_saved && eval "SAVE_$var=\"\$SAVE_$var $*\""
523 eval "$var=\"\$$var $*\""
524 }
525
526 add_cppflags(){
527 append CPPFLAGS $($filter_cppflags "$@")
528 }
529
530 add_cflags(){
531 append CFLAGS $($filter_cflags "$@")
532 }
533
534 add_asflags(){
535 append ASFLAGS $($filter_asflags "$@")
536 }
537
538 add_ldflags(){
539 append LDFLAGS "$@"
540 }
541
542 add_extralibs(){
543 append extralibs "$@"
544 }
545
546 check_cmd(){
547 log "$@"
548 "$@" >> $logfile 2>&1
549 }
550
551 check_cc(){
552 log check_cc "$@"
553 cat > $TMPC
554 log_file $TMPC
555 check_cmd $cc $CPPFLAGS $CFLAGS "$@" -c -o $TMPO $TMPC
556 }
557
558 check_cpp(){
559 log check_cpp "$@"
560 cat > $TMPC
561 log_file $TMPC
562 check_cmd $cc $CPPFLAGS $CFLAGS "$@" -E -o $TMPO $TMPC
563 }
564
565 check_as(){
566 log check_as "$@"
567 cat > $TMPC
568 log_file $TMPC
569 check_cmd $as $CPPFLAGS $ASFLAGS "$@" -c -o $TMPO $TMPC
570 }
571
572 check_asm(){
573 log check_asm "$@"
574 name="$1"
575 asm="$2"
576 shift 2
577 disable $name
578 check_as "$@" <<EOF && enable $name
579 void foo(void){ __asm__ volatile($asm); }
580 EOF
581 }
582
583 check_yasm(){
584 log check_yasm "$@"
585 echo "$1" > $TMPS
586 log_file $TMPS
587 shift 1
588 check_cmd $yasmexe $YASMFLAGS "$@" -o $TMPO $TMPS
589 }
590
591 check_ld(){
592 log check_ld "$@"
593 check_cc || return
594 flags=''
595 libs=''
596 for f; do
597 test "${f}" = "${f#-l}" && flags="$flags $f" || libs="$libs $f"
598 done
599 check_cmd $ld $LDFLAGS $flags -o $TMPE $TMPO $extralibs $libs
600 }
601
602 check_cppflags(){
603 log check_cppflags "$@"
604 set -- $($filter_cppflags "$@")
605 check_cc "$@" <<EOF && append CPPFLAGS "$@"
606 int x;
607 EOF
608 }
609
610 check_cflags(){
611 log check_cflags "$@"
612 set -- $($filter_cflags "$@")
613 check_cc "$@" <<EOF && append CFLAGS "$@"
614 int x;
615 EOF
616 }
617
618 check_ldflags(){
619 log check_ldflags "$@"
620 check_ld "$@" <<EOF && add_ldflags "$@"
621 int main(void){ return 0; }
622 EOF
623 }
624
625 check_header(){
626 log check_header "$@"
627 header=$1
628 shift
629 disable_safe $header
630 check_cpp "$@" <<EOF && enable_safe $header
631 #include <$header>
632 int x;
633 EOF
634 }
635
636 check_func(){
637 log check_func "$@"
638 func=$1
639 shift
640 disable $func
641 check_ld "$@" <<EOF && enable $func
642 extern int $func();
643 int main(void){ $func(); }
644 EOF
645 }
646
647 check_func_headers(){
648 log check_func_headers "$@"
649 headers=$1
650 func=$2
651 shift 2
652 disable $func
653 incs=""
654 for hdr in $headers; do
655 incs="$incs
656 #include <$hdr>"
657 done
658 check_ld "$@" <<EOF && enable $func && enable_safe $headers
659 $incs
660 int main(int argc, char **argv){
661 return (long) $func;
662 }
663 EOF
664 }
665
666 check_cpp_condition(){
667 log check_cpp_condition "$@"
668 header=$1
669 condition=$2
670 check_cpp <<EOF
671 #include <$header>
672 #if !($condition)
673 #error "unsatisfied condition: $condition"
674 #endif
675 EOF
676 }
677
678 check_lib(){
679 log check_lib "$@"
680 header="$1"
681 func="$2"
682 shift 2
683 temp_extralibs "$@"
684 check_header $header && check_func $func && add_extralibs "$@"
685 err=$?
686 restore_flags
687 return $err
688 }
689
690 check_lib2(){
691 log check_lib2 "$@"
692 headers="$1"
693 func="$2"
694 shift 2
695 temp_extralibs "$@"
696 check_func_headers "$headers" $func && add_extralibs "$@"
697 err=$?
698 restore_flags
699 return $err
700 }
701
702 check_exec(){
703 check_ld "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
704 }
705
706 check_exec_crash(){
707 code=$(cat)
708
709 # exit() is not async signal safe. _Exit (C99) and _exit (POSIX)
710 # are safe but may not be available everywhere. Thus we use
711 # raise(SIGTERM) instead. The check is run in a subshell so we
712 # can redirect the "Terminated" message from the shell. SIGBUS
713 # is not defined by standard C so it is used conditionally.
714
715 (check_exec "$@") >> $logfile 2>&1 <<EOF
716 #include <signal.h>
717 static void sighandler(int sig){
718 raise(SIGTERM);
719 }
720 int main(void){
721 signal(SIGILL, sighandler);
722 signal(SIGFPE, sighandler);
723 signal(SIGSEGV, sighandler);
724 #ifdef SIGBUS
725 signal(SIGBUS, sighandler);
726 #endif
727 { $code }
728 }
729 EOF
730 }
731
732 check_type(){
733 log check_type "$@"
734 headers=$1
735 type=$2
736 shift 2
737 disable $type
738 incs=""
739 for hdr in $headers; do
740 incs="$incs
741 #include <$hdr>"
742 done
743 check_cc "$@" <<EOF && enable $type
744 $incs
745 $type v;
746 EOF
747 }
748
749 require(){
750 name="$1"
751 header="$2"
752 func="$3"
753 shift 3
754 check_lib $header $func "$@" || die "ERROR: $name not found"
755 }
756
757 require2(){
758 name="$1"
759 headers="$2"
760 func="$3"
761 shift 3
762 check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
763 }
764
765 check_foo_config(){
766 cfg=$1
767 pkg=$2
768 header=$3
769 func=$4
770 shift 4
771 disable $cfg
772 check_cmd ${pkg}-config --version
773 err=$?
774 if test "$err" = 0; then
775 temp_cflags $(${pkg}-config --cflags)
776 temp_extralibs $(${pkg}-config --libs)
777 check_lib "$@" $header $func && enable $cfg
778 fi
779 return $err
780 }
781
782 check_host_cc(){
783 log check_host_cc "$@"
784 cat > $TMPC
785 log_file $TMPC
786 check_cmd $host_cc $host_cflags "$@" -c -o $TMPO $TMPC
787 }
788
789 check_host_cflags(){
790 log check_host_cflags "$@"
791 check_host_cc "$@" <<EOF && append host_cflags "$@"
792 int x;
793 EOF
794 }
795
796 apply(){
797 file=$1
798 shift
799 "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
800 }
801
802 # CONFIG_LIST contains configurable options, while HAVE_LIST is for
803 # system-dependent things.
804
805 COMPONENT_LIST="
806 bsfs
807 decoders
808 demuxers
809 encoders
810 filters
811 hwaccels
812 indevs
813 muxers
814 outdevs
815 parsers
816 protocols
817 "
818
819 CONFIG_LIST="
820 $COMPONENT_LIST
821 aandct
822 avfilter
823 avfilter_lavf
824 avisynth
825 beos_netserver
826 bzlib
827 doc
828 fastdiv
829 ffmpeg
830 ffplay
831 ffserver
832 fft
833 golomb
834 gpl
835 gprof
836 gray
837 hardcoded_tables
838 ipv6
839 libdc1394
840 libdirac
841 libfaac
842 libfaad
843 libfaadbin
844 libgsm
845 libmp3lame
846 libnut
847 libopencore_amrnb
848 libopencore_amrwb
849 libopenjpeg
850 libschroedinger
851 libspeex
852 libtheora
853 libvorbis
854 libx264
855 libxvid
856 lpc
857 mdct
858 memalign_hack
859 mlib
860 mpegaudio_hp
861 network
862 nonfree
863 pic
864 postproc
865 powerpc_perf
866 rdft
867 runtime_cpudetect
868 shared
869 small
870 static
871 swscale_alpha
872 vaapi
873 vdpau
874 version3
875 x11grab
876 zlib
877 "
878
879 THREADS_LIST='
880 beosthreads
881 os2threads
882 pthreads
883 w32threads
884 '
885
886 ARCH_LIST='
887 alpha
888 arm
889 avr32
890 avr32_ap
891 avr32_uc
892 bfin
893 ia64
894 m68k
895 mips
896 mips64
897 parisc
898 ppc
899 ppc64
900 s390
901 sh4
902 sparc
903 sparc64
904 x86
905 x86_32
906 x86_64
907 '
908
909 ARCH_EXT_LIST='
910 altivec
911 amd3dnow
912 amd3dnowext
913 armv5te
914 armv6
915 armv6t2
916 armvfp
917 iwmmxt
918 mmi
919 mmx
920 mmx2
921 neon
922 ppc4xx
923 sse
924 ssse3
925 vis
926 '
927
928 HAVE_LIST="
929 $ARCH_EXT_LIST
930 $THREADS_LIST
931 alsa_asoundlib_h
932 altivec_h
933 arpa_inet_h
934 attribute_packed
935 bigendian
936 bswap
937 closesocket
938 cmov
939 conio_h
940 dcbzl
941 dev_bktr_ioctl_bt848_h
942 dev_bktr_ioctl_meteor_h
943 dev_ic_bt8xx_h
944 dev_video_meteor_ioctl_meteor_h
945 dev_video_bktr_ioctl_bt848_h
946 dlfcn_h
947 dlopen
948 dos_paths
949 ebp_available
950 ebx_available
951 fast_64bit
952 fast_cmov
953 fast_unaligned
954 fork
955 gethrtime
956 GetProcessTimes
957 getrusage
958 inet_aton
959 inline_asm
960 isatty
961 ldbrx
962 libdc1394_1
963 libdc1394_2
964 llrint
965 log2
966 loongson
967 lrint
968 lrintf
969 lzo1x_999_compress
970 machine_ioctl_bt848_h
971 machine_ioctl_meteor_h
972 malloc_h
973 memalign
974 mkstemp
975 pld
976 posix_memalign
977 round
978 roundf
979 sdl
980 sdl_video_size
981 setmode
982 socklen_t
983 soundcard_h
984 poll_h
985 sys_mman_h
986 sys_resource_h
987 sys_select_h
988 sys_soundcard_h
989 sys_videoio_h
990 ten_operands
991 termios_h
992 threads
993 truncf
994 vfp_args
995 VirtualAlloc
996 winsock2_h
997 xform_asm
998 yasm
999 "
1000
1001 # options emitted with CONFIG_ prefix but not available on command line
1002 CONFIG_EXTRA="
1003 gplv3
1004 lgplv3
1005 "
1006
1007 CMDLINE_SELECT="
1008 $ARCH_EXT_LIST
1009 $CONFIG_LIST
1010 $THREADS_LIST
1011 cross_compile
1012 debug
1013 extra_warnings
1014 logging
1015 optimizations
1016 stripping
1017 yasm
1018 "
1019
1020 PATHS_LIST='
1021 bindir
1022 datadir
1023 incdir
1024 libdir
1025 mandir
1026 prefix
1027 shlibdir
1028 '
1029
1030 CMDLINE_SET="
1031 $PATHS_LIST
1032 arch
1033 as
1034 build_suffix
1035 cc
1036 cpu
1037 cross_prefix
1038 dep_cc
1039 extra_version
1040 host_cc
1041 host_cflags
1042 host_ldflags
1043 host_libs
1044 host_os
1045 ld
1046 logfile
1047 nm
1048 source_path
1049 sysinclude
1050 sysroot
1051 target_exec
1052 target_os
1053 target_path
1054 "
1055
1056 CMDLINE_APPEND="
1057 extra_cflags
1058 "
1059
1060 # code dependency declarations
1061
1062 # architecture extensions
1063 altivec_deps="ppc"
1064 amd3dnow_deps="mmx"
1065 amd3dnowext_deps="amd3dnow"
1066 armv5te_deps="arm"
1067 armv6_deps="arm"
1068 armv6t2_deps="arm"
1069 armvfp_deps="arm"
1070 iwmmxt_deps="arm"
1071 mmi_deps="mips"
1072 mmx_deps="x86"
1073 mmx2_deps="mmx"
1074 neon_deps="arm"
1075 ppc4xx_deps="ppc"
1076 sse_deps="mmx"
1077 ssse3_deps="sse"
1078 vis_deps="sparc"
1079
1080 need_memalign="altivec neon sse"
1081 inline_asm_deps="!tms470"
1082
1083 # decoders / encoders / hardware accelerators
1084 aac_decoder_select="fft mdct"
1085 aac_encoder_select="fft mdct"
1086 ac3_decoder_select="fft mdct"
1087 alac_encoder_select="lpc"
1088 atrac3_decoder_select="fft mdct"
1089 cavs_decoder_select="golomb"
1090 cook_decoder_select="fft mdct"
1091 cscd_decoder_suggest="zlib"
1092 dca_decoder_select="fft mdct"
1093 dnxhd_encoder_select="aandct"
1094 dxa_decoder_select="zlib"
1095 eac3_decoder_select="ac3_decoder"
1096 eamad_decoder_select="aandct"
1097 eatgq_decoder_select="aandct"
1098 eatqi_decoder_select="aandct"
1099 ffv1_decoder_select="golomb"
1100 flac_decoder_select="golomb"
1101 flac_encoder_select="golomb lpc"
1102 flashsv_decoder_select="zlib"
1103 flashsv_encoder_select="zlib"
1104 flv_encoder_select="h263_encoder"
1105 h261_encoder_select="aandct"
1106 h263_encoder_select="aandct"
1107 h263_vaapi_hwaccel_deps="va_va_h"
1108 h263_vaapi_hwaccel_select="vaapi h263_decoder"
1109 h263p_encoder_select="h263_encoder"
1110 h264_decoder_select="golomb"
1111 h264_vaapi_hwaccel_deps="va_va_h"
1112 h264_vaapi_hwaccel_select="vaapi"
1113 h264_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1114 h264_vdpau_decoder_select="vdpau h264_decoder"
1115 imc_decoder_select="fft mdct"
1116 jpegls_decoder_select="golomb"
1117 jpegls_encoder_select="golomb"
1118 ljpeg_encoder_select="aandct"
1119 loco_decoder_select="golomb"
1120 mjpeg_encoder_select="aandct"
1121 mpeg1video_encoder_select="aandct"
1122 mpeg2video_encoder_select="aandct"
1123 mpeg4_encoder_select="h263_encoder"
1124 mpeg_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1125 mpeg_vdpau_decoder_select="vdpau mpegvideo_decoder"
1126 mpeg1_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1127 mpeg1_vdpau_decoder_select="vdpau mpeg1video_decoder"
1128 mpeg2_vaapi_hwaccel_deps="va_va_h"
1129 mpeg2_vaapi_hwaccel_select="vaapi mpeg2video_decoder"
1130 mpeg4_vaapi_hwaccel_deps="va_va_h"
1131 mpeg4_vaapi_hwaccel_select="vaapi mpeg4_decoder"
1132 mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h"
1133 mpeg_xvmc_decoder_select="mpegvideo_decoder"
1134 msmpeg4v1_encoder_select="h263_encoder"
1135 msmpeg4v2_encoder_select="h263_encoder"
1136 msmpeg4v3_encoder_select="h263_encoder"
1137 nellymoser_decoder_select="fft mdct"
1138 nellymoser_encoder_select="fft mdct"
1139 png_decoder_select="zlib"
1140 png_encoder_select="zlib"
1141 qdm2_decoder_select="fft mdct rdft"
1142 rv10_encoder_select="h263_encoder"
1143 rv20_encoder_select="h263_encoder"
1144 rv30_decoder_select="golomb"
1145 rv40_decoder_select="golomb"
1146 shorten_decoder_select="golomb"
1147 sonic_decoder_select="golomb"
1148 sonic_encoder_select="golomb"
1149 sonic_ls_encoder_select="golomb"
1150 svq3_decoder_select="golomb"
1151 svq3_decoder_suggest="zlib"
1152 theora_decoder_select="vp3_decoder"
1153 tiff_decoder_suggest="zlib"
1154 tiff_encoder_suggest="zlib"
1155 tscc_decoder_select="zlib"
1156 vc1_vaapi_hwaccel_deps="va_va_h"
1157 vc1_vaapi_hwaccel_select="vaapi vc1_decoder"
1158 vc1_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1159 vc1_vdpau_decoder_select="vdpau vc1_decoder"
1160 vorbis_decoder_select="fft mdct"
1161 vorbis_encoder_select="fft mdct"
1162 vp6a_decoder_select="vp6_decoder"
1163 vp6f_decoder_select="vp6_decoder"
1164 wmav1_decoder_select="fft mdct"
1165 wmav1_encoder_select="fft mdct"
1166 wmav2_decoder_select="fft mdct"
1167 wmav2_encoder_select="fft mdct"
1168 wmv1_encoder_select="h263_encoder"
1169 wmv2_encoder_select="h263_encoder"
1170 wmv3_decoder_select="vc1_decoder"
1171 wmv3_vaapi_hwaccel_select="vc1_vaapi_hwaccel"
1172 wmv3_vdpau_decoder_select="vc1_vdpau_decoder"
1173 zlib_decoder_select="zlib"
1174 zlib_encoder_select="zlib"
1175 zmbv_decoder_select="zlib"
1176 zmbv_encoder_select="zlib"
1177
1178 # parsers
1179 h264_parser_select="golomb"
1180
1181 # external libraries
1182 libdirac_decoder_deps="libdirac !libschroedinger"
1183 libdirac_encoder_deps="libdirac"
1184 libfaac_encoder_deps="libfaac"
1185 libfaad_decoder_deps="libfaad"
1186 libfaadbin_decoder_extralibs='$ldl'
1187 libgsm_decoder_deps="libgsm"
1188 libgsm_encoder_deps="libgsm"
1189 libgsm_ms_decoder_deps="libgsm"
1190 libgsm_ms_encoder_deps="libgsm"
1191 libmp3lame_encoder_deps="libmp3lame"
1192 libopencore_amrnb_decoder_deps="libopencore_amrnb"
1193 libopencore_amrnb_encoder_deps="libopencore_amrnb"
1194 libopencore_amrwb_decoder_deps="libopencore_amrwb"
1195 libopenjpeg_decoder_deps="libopenjpeg"
1196 libschroedinger_decoder_deps="libschroedinger"
1197 libschroedinger_encoder_deps="libschroedinger"
1198 libspeex_decoder_deps="libspeex"
1199 libtheora_encoder_deps="libtheora"
1200 libvorbis_encoder_deps="libvorbis"
1201 libx264_encoder_deps="libx264"
1202 libxvid_encoder_deps="libxvid"
1203
1204 # demuxers / muxers
1205 ac3_demuxer_deps="ac3_parser"
1206 asf_stream_muxer_select="asf_muxer"
1207 avisynth_demuxer_deps="avisynth"
1208 dirac_demuxer_deps="dirac_parser"
1209 ipod_muxer_select="mov_muxer"
1210 libnut_demuxer_deps="libnut"
1211 libnut_muxer_deps="libnut"
1212 matroska_audio_muxer_select="matroska_muxer"
1213 matroska_demuxer_suggest="zlib bzlib"
1214 mov_demuxer_suggest="zlib"
1215 mp3_demuxer_deps="mpegaudio_parser"
1216 mp4_muxer_select="mov_muxer"
1217 mpegtsraw_demuxer_select="mpegts_demuxer"
1218 mxf_d10_muxer_select="mxf_muxer"
1219 psp_muxer_select="mov_muxer"
1220 rtp_muxer_deps="network rtp_protocol"
1221 rtsp_demuxer_deps="sdp_demuxer"
1222 sdp_demuxer_deps="rtp_protocol mpegts_demuxer"
1223 tg2_muxer_select="mov_muxer"
1224 tgp_muxer_select="mov_muxer"
1225 w64_demuxer_deps="wav_demuxer"
1226
1227 # indevs / outdevs
1228 alsa_indev_deps="alsa_asoundlib_h snd_pcm_htimestamp"
1229 alsa_indev_extralibs="-lasound"
1230 alsa_outdev_deps="alsa_asoundlib_h"
1231 alsa_outdev_extralibs="-lasound"
1232 audio_beos_indev_deps="audio_beos"
1233 audio_beos_indev_extralibs="-lmedia -lbe"
1234 audio_beos_outdev_deps="audio_beos"
1235 audio_beos_outdev_extralibs="-lmedia -lbe"
1236 bktr_indev_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
1237 dv1394_indev_deps="dv1394 dv_demuxer"
1238 jack_indev_deps="jack_jack_h"
1239 jack_indev_extralibs="-ljack"
1240 libdc1394_indev_deps="libdc1394"
1241 oss_indev_deps_any="soundcard_h sys_soundcard_h"
1242 oss_outdev_deps_any="soundcard_h sys_soundcard_h"
1243 v4l_indev_deps="linux_videodev_h"
1244 v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h"
1245 vfwcap_indev_deps="capCreateCaptureWindow"
1246 vfwcap_indev_extralibs="-lvfw32"
1247 x11_grab_device_indev_deps="x11grab XShmCreateImage"
1248 x11_grab_device_indev_extralibs="-lX11 -lXext"
1249
1250 # protocols
1251 gopher_protocol_deps="network"
1252 http_protocol_deps="network"
1253 rtmp_protocol_deps="tcp_protocol"
1254 rtp_protocol_deps="udp_protocol"
1255 tcp_protocol_deps="network"
1256 udp_protocol_deps="network"
1257
1258 # filters
1259 movie_filter_deps="avfilter_lavf"
1260
1261 # programs
1262 ffplay_deps="sdl"
1263 ffserver_deps="ffm_muxer rtp_protocol rtsp_demuxer"
1264 ffserver_extralibs='$ldl'
1265
1266 doc_deps="texi2html"
1267
1268 # default parameters
1269
1270 logfile="config.err"
1271
1272 # installation paths
1273 prefix_default="/usr/local"
1274 bindir_default='${prefix}/bin'
1275 datadir_default='${prefix}/share/ffmpeg'
1276 incdir_default='${prefix}/include'
1277 libdir_default='${prefix}/lib'
1278 mandir_default='${prefix}/share/man'
1279 shlibdir_default="$libdir_default"
1280
1281 # toolchain
1282 ar="ar"
1283 cc_default="gcc"
1284 cc_version=\"unknown\"
1285 host_cc_default="gcc"
1286 ln_s="ln -sf"
1287 nm_default="nm"
1288 objformat="elf"
1289 ranlib="ranlib"
1290 strip="strip"
1291 yasmexe="yasm"
1292
1293 # machine
1294 arch=$(uname -m)
1295 cpu="generic"
1296
1297 # OS
1298 target_os=$(tolower $(uname -s))
1299 host_os=$target_os
1300
1301 # configurable options
1302 enable debug
1303 enable doc
1304 enable fastdiv
1305 enable ffmpeg
1306 enable ffplay
1307 enable ffserver
1308 enable ipv6
1309 enable mpegaudio_hp
1310 enable network
1311 enable optimizations
1312 enable protocols
1313 enable static
1314 enable stripping
1315 enable swscale_alpha
1316
1317 # build settings
1318 SHFLAGS='-shared -Wl,-soname,$$(@F)'
1319 FFSERVERLDFLAGS=-Wl,-E
1320 LIBPREF="lib"
1321 LIBSUF=".a"
1322 FULLNAME='$(NAME)$(BUILDSUF)'
1323 LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
1324 SLIBPREF="lib"
1325 SLIBSUF=".so"
1326 SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
1327 SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
1328 SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
1329 LIB_INSTALL_EXTRA_CMD='$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
1330
1331 CC_O='-o $@'
1332
1333 host_cflags='-D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112 -O3 -g -Wall'
1334 host_libs='-lm'
1335
1336 target_path='.'
1337
1338 # gcc stupidly only outputs the basename of targets with -MM, but we need the
1339 # full relative path for objects in subdirectories for non-recursive Make.
1340 DEPEND_CMD='$(DEPCC) $(DEPFLAGS) $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o," > $(@:.o=.d)'
1341 DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -MM'
1342
1343 # find source path
1344 source_path="$(dirname "$0")"
1345 enable source_path_used
1346 if test -f configure; then
1347 source_path="$(pwd)"
1348 disable source_path_used
1349 else
1350 source_path="$(cd "$source_path"; pwd)"
1351 echo "$source_path" | grep -q '[[:blank:]]' &&
1352 die "Out of tree builds are impossible with whitespace in source path."
1353 test -e "$source_path/config.h" &&
1354 die "Out of tree builds are impossible with config.h in source dir."
1355 fi
1356
1357 for v in "$@"; do
1358 r=${v#*=}
1359 l=${v%"$r"}
1360 r=$(sh_quote "$r")
1361 FFMPEG_CONFIGURATION="${FFMPEG_CONFIGURATION# } ${l}${r}"
1362 done
1363
1364 find_things(){
1365 thing=$1
1366 pattern=$2
1367 file=$source_path/$3
1368 sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
1369 }
1370
1371 ENCODER_LIST=$(find_things encoder ENC libavcodec/allcodecs.c)
1372 DECODER_LIST=$(find_things decoder DEC libavcodec/allcodecs.c)
1373 HWACCEL_LIST=$(find_things hwaccel HWACCEL libavcodec/allcodecs.c)
1374 PARSER_LIST=$(find_things parser PARSER libavcodec/allcodecs.c)
1375 BSF_LIST=$(find_things bsf BSF libavcodec/allcodecs.c)
1376 MUXER_LIST=$(find_things muxer _MUX libavformat/allformats.c)
1377 DEMUXER_LIST=$(find_things demuxer DEMUX libavformat/allformats.c)
1378 OUTDEV_LIST=$(find_things outdev OUTDEV libavdevice/alldevices.c)
1379 INDEV_LIST=$(find_things indev _IN libavdevice/alldevices.c)
1380 PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
1381 FILTER_LIST=$(find_things filter FILTER libavfilter/allfilters.c)
1382
1383 enable $ARCH_EXT_LIST \
1384 $DECODER_LIST \
1385 $ENCODER_LIST \
1386 $HWACCEL_LIST \
1387 $PARSER_LIST \
1388 $BSF_LIST \
1389 $DEMUXER_LIST \
1390 $MUXER_LIST \
1391 $FILTER_LIST \
1392 $PROTOCOL_LIST \
1393 $INDEV_LIST \
1394 $OUTDEV_LIST \
1395
1396 die_unknown(){
1397 echo "Unknown option \"$1\"."
1398 echo "See $0 --help for available options."
1399 exit 1
1400 }
1401
1402 show_list() {
1403 suffix=_$1
1404 shift
1405 echo $* | sed s/$suffix//g | tr ' ' '\n' | sort
1406 exit 0
1407 }
1408
1409 for opt do
1410 optval="${opt#*=}"
1411 case "$opt" in
1412 --extra-ldflags=*) add_ldflags $optval
1413 ;;
1414 --extra-libs=*) add_extralibs $optval
1415 ;;
1416 --disable-devices) disable $INDEV_LIST $OUTDEV_LIST
1417 ;;
1418 --enable-debug=*) debuglevel="$optval"
1419 ;;
1420 --enable-*=*|--disable-*=*)
1421 eval $(echo "${opt%%=*}" | sed 's/--/action=/;s/-/ thing=/')
1422 is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt"
1423 eval list=\$$(toupper $thing)_LIST
1424 name=$(echo "${optval}" | sed "s/,/_${thing}|/g")_${thing}
1425 $action $(filter "$name" $list)
1426 ;;
1427 --enable-?*|--disable-?*)
1428 eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
1429 if is_in $option $COMPONENT_LIST; then
1430 test $action = disable && action=unset
1431 eval $action \$$(toupper ${option%s})_LIST
1432 elif is_in $option $CMDLINE_SELECT; then
1433 $action $option
1434 else
1435 die_unknown $opt
1436 fi
1437 ;;
1438 --list-*)
1439 NAME="${opt#--list-}"
1440 is_in $NAME $COMPONENT_LIST || die_unknown $opt
1441 NAME=${NAME%s}
1442 eval show_list $NAME \$$(toupper $NAME)_LIST
1443 ;;
1444 --help|-h) show_help
1445 ;;
1446 *)
1447 optname="${opt%%=*}"
1448 optname="${optname#--}"
1449 optname=$(echo "$optname" | sed 's/-/_/g')
1450 if is_in $optname $CMDLINE_SET; then
1451 eval $optname='$optval'
1452 elif is_in $optname $CMDLINE_APPEND; then
1453 append $optname "$optval"
1454 else
1455 die_unknown $opt
1456 fi
1457 ;;
1458 esac
1459 done
1460
1461 disabled logging && logfile=/dev/null
1462
1463 echo "# $0 $FFMPEG_CONFIGURATION" > $logfile
1464 set >> $logfile
1465
1466 test -n "$cross_prefix" && enable cross_compile
1467
1468 ar="${cross_prefix}${ar}"
1469 cc_default="${cross_prefix}${cc_default}"
1470 nm_default="${cross_prefix}${nm_default}"
1471 ranlib="${cross_prefix}${ranlib}"
1472 strip="${cross_prefix}${strip}"
1473
1474 sysinclude_default="${sysroot}/usr/include"
1475
1476 set_default cc nm sysinclude
1477 enabled cross_compile || host_cc_default=$cc
1478 set_default host_cc
1479
1480 exesuf() {
1481 case $1 in
1482 mingw32*|cygwin*|*-dos|freedos|opendos|os/2*) echo .exe ;;
1483 esac
1484 }
1485
1486 EXESUF=$(exesuf $target_os)
1487 HOSTEXESUF=$(exesuf $host_os)
1488
1489 # set temporary file name
1490 : ${TMPDIR:=$TEMPDIR}
1491 : ${TMPDIR:=$TMP}
1492 : ${TMPDIR:=/tmp}
1493
1494 if ! check_cmd type mktemp; then
1495 # simple replacement for missing mktemp
1496 # NOT SAFE FOR GENERAL USE
1497 mktemp(){
1498 echo "${2%XXX*}.${HOSTNAME}.${UID}.$$"
1499 }
1500 fi
1501
1502 tmpfile(){
1503 tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
1504 (set -C; exec > $tmp) 2>/dev/null ||
1505 die "Unable to create temporary file in $TMPDIR."
1506 append TMPFILES $tmp
1507 eval $1=$tmp
1508 }
1509
1510 trap 'rm -f -- $TMPFILES' EXIT
1511 trap exit HUP INT TERM
1512
1513 tmpfile TMPC .c
1514 tmpfile TMPE $EXESUF
1515 tmpfile TMPH .h
1516 tmpfile TMPO .o
1517 tmpfile TMPS .S
1518 tmpfile TMPSH .sh
1519
1520 unset -f mktemp
1521
1522 # make sure we can execute files in $TMPDIR
1523 cat > $TMPSH 2>> $logfile <<EOF
1524 #! /bin/sh
1525 EOF
1526 chmod +x $TMPSH >> $logfile 2>&1
1527 if ! $TMPSH >> $logfile 2>&1; then
1528 cat <<EOF
1529 Unable to create and execute files in $TMPDIR. Set the TMPDIR environment
1530 variable to another directory and make sure that it is not mounted noexec.
1531 EOF
1532 die "Sanity test failed."
1533 fi
1534
1535 filter_cflags=echo
1536 filter_cppflags=echo
1537 filter_asflags=echo
1538
1539 if $cc -v 2>&1 | grep -qi ^gcc; then
1540 cc_type=gcc
1541 cc_version=__VERSION__
1542 if ! $cc -dumpversion | grep -q '^2\.'; then
1543 CC_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
1544 AS_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
1545 fi
1546 elif $cc --version 2>/dev/null | grep -q Intel; then
1547 cc_type=icc
1548 cc_version="AV_STRINGIFY(__INTEL_COMPILER)"
1549 CC_DEPFLAGS='-MMD'
1550 AS_DEPFLAGS='-MMD'
1551 elif $cc -v 2>&1 | grep -q xlc; then
1552 cc_type=xlc
1553 cc_version="AV_STRINGIFY(__IBMC__)"
1554 elif $cc -V 2>/dev/null | grep -q Compaq; then
1555 cc_type=ccc
1556 cc_version="AV_STRINGIFY(__DECC_VER)"
1557 DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -M'
1558 debuglevel=3
1559 add_ldflags -Wl,-z,now # calls to libots crash without this
1560 elif $cc --vsn 2>/dev/null | grep -q "ARM C/C++ Compiler"; then
1561 test -d "$sysroot" || die "No valid sysroot specified."
1562 cc_type=armcc
1563 cc_version="AV_STRINGIFY(__ARMCC_VERSION)"
1564 armcc_conf="$PWD/armcc.conf"
1565 $cc --arm_linux_configure \
1566 --arm_linux_config_file="$armcc_conf" \
1567 --configure_sysroot="$sysroot" \
1568 --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
1569 die "Error creating armcc configuration file."
1570 cc="$cc --arm_linux_config_file=$armcc_conf --translate_gcc"
1571 as_default="${cross_prefix}gcc"
1572 CC_DEPFLAGS='-MMD'
1573 AS_DEPFLAGS='-MMD'
1574 elif $cc -version 2>/dev/null | grep -q TMS470; then
1575 cc_type=tms470
1576 cc_version="AV_STRINGIFY(__TI_COMPILER_VERSION__)"
1577 cc="$cc --gcc --abi=eabi -eo=.o -mc -me"
1578 CC_O='-fr=$(@D)'
1579 as_default="${cross_prefix}gcc"
1580 ld_default="${cross_prefix}gcc"
1581 TMPO=$(basename $TMPC .c).o
1582 append TMPFILES $TMPO
1583 add_cflags -D__gnuc_va_list=va_list -D__USER_LABEL_PREFIX__=
1584 CC_DEPFLAGS='-ppa -ppd=$(@:.o=.d)'
1585 AS_DEPFLAGS='-MMD'
1586 filter_cflags=tms470_flags
1587 tms470_flags(){
1588 for flag; do
1589 case $flag in
1590 -march=*|-mcpu=*)
1591 case "${flag#*=}" in
1592 armv7-a|cortex-a*) echo -mv=7a8 ;;
1593 armv7-r|cortex-r*) echo -mv=7r4 ;;
1594 armv7-m|cortex-m*) echo -mv=7m3 ;;
1595 armv6*|arm11*) echo -mv=6 ;;
1596 armv5*e|arm[79]*e*|arm9[24]6*|arm96*|arm102[26])
1597 echo -mv=5e ;;
1598 armv4*|arm7*|arm9[24]*) echo -mv=4 ;;
1599 esac
1600 ;;
1601 -mfpu=neon) echo --float_support=vfpv3 --neon ;;
1602 -mfpu=vfp) echo --float_support=vfpv2 ;;
1603 -msoft-float) echo --float_support=vfplib ;;
1604 -Os) echo -O3 -mf=2 ;;
1605 -O[0-3]) echo $flag -mf=5 ;;
1606 -g) echo -g -mn ;;
1607 esac
1608 done
1609 }
1610 elif $cc -v 2>&1 | grep -q clang; then
1611 cc_type=clang
1612 cc_version=__VERSION__
1613 CC_DEPFLAGS='-MMD'
1614 AS_DEPFLAGS='-MMD'
1615 elif $cc -V 2>&1 | grep -q Sun; then
1616 cc_type=suncc
1617 cc_version="AV_STRINGIFY(__SUNPRO_C)"
1618 DEPEND_CMD='$(DEPCC) $(DEPFLAGS) $< | sed -e "1s,^.*: ,$@: ," -e "\$$!s,\$$, \\\\\\," -e "1!s,^.*: , ," > $(@:.o=.d)'
1619 DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -xM1'
1620 fi
1621
1622 test -n "$cc_type" && enable $cc_type || echolog "Unknown C compiler $cc"
1623
1624 : ${as_default:=$cc}
1625 : ${dep_cc_default:=$cc}
1626 : ${ld_default:=$cc}
1627 set_default as dep_cc ld
1628
1629 test -n "$CC_DEPFLAGS" || CCDEP=$DEPEND_CMD
1630 test -n "$AS_DEPFLAGS" || ASDEP=$DEPEND_CMD
1631
1632 add_cflags $extra_cflags
1633 add_asflags $extra_cflags
1634
1635 if test -n "$sysroot"; then
1636 case "$cc_type" in
1637 gcc)
1638 add_cppflags --sysroot="$sysroot"
1639 add_ldflags --sysroot="$sysroot"
1640 ;;
1641 tms470)
1642 add_cppflags -I"$sysinclude"
1643 add_ldflags --sysroot="$sysroot"
1644 ;;
1645 clang)
1646 add_cppflags -isysroot="$sysroot"
1647 add_ldflags -isysroot="$sysroot"
1648 ;;
1649 esac
1650 fi
1651
1652 if test "$cpu" = host; then
1653 enabled cross_compile && die "--cpu=host makes no sense when cross-compiling."
1654
1655 case "$cc_type" in
1656 gcc)
1657 check_native(){
1658 $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
1659 awk "/$1=/{ match(\$0, /$1=(\\w+)/, a);print a[1];exit }" $TMPE
1660 }
1661 cpu=$(check_native -march || check_native -mcpu)
1662 ;;
1663 esac
1664
1665 test "${cpu:-host}" = host && die "--cpu=host not supported with compiler $cc"
1666 fi
1667
1668 # Add processor-specific flags
1669 case $cpu in
1670 601|ppc601|PowerPC601)
1671 cpuflags="-mcpu=601"
1672 ;;
1673 603*|ppc603*|PowerPC603*)
1674 cpuflags="-mcpu=603"
1675 ;;
1676 604*|ppc604*|PowerPC604*)
1677 cpuflags="-mcpu=604"
1678 ;;
1679 G3|g3|75*|ppc75*|PowerPC75*)
1680 cpuflags="-mcpu=750 -mpowerpc-gfxopt"
1681 ;;
1682 G4|g4|745*|ppc745*|PowerPC745*)
1683 cpuflags="-mcpu=7450 -mpowerpc-gfxopt"
1684 ;;
1685 74*|ppc74*|PowerPC74*)
1686 cpuflags="-mcpu=7400 -mpowerpc-gfxopt"
1687 ;;
1688 G5|g5|970|ppc970|PowerPC970|power4*|Power4*)
1689 cpuflags="-mcpu=970 -mpowerpc-gfxopt -mpowerpc64"
1690 ;;
1691 Cell|CELL|cell)
1692 cpuflags="-mcpu=cell"
1693 enable ldbrx
1694 ;;
1695 # targets that do NOT support conditional mov (cmov)
1696 i[345]86|pentium|pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
1697 cpuflags="-march=$cpu"
1698 disable cmov
1699 ;;
1700 # targets that do support conditional mov (cmov)
1701 i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2|amdfam10)
1702 cpuflags="-march=$cpu"
1703 enable cmov
1704 enable fast_cmov
1705 ;;
1706 # targets that do support conditional mov but on which it's slow
1707 pentium4|pentium4m|prescott|nocona)
1708 cpuflags="-march=$cpu"
1709 enable cmov
1710 disable fast_cmov
1711 ;;
1712 sparc64)
1713 cpuflags="-mcpu=v9"
1714 ;;
1715 arm11*|cortex*)
1716 cpuflags="-mcpu=$cpu"
1717 enable fast_unaligned
1718 ;;
1719 armv[67]*)
1720 cpuflags="-march=$cpu"
1721 enable fast_unaligned
1722 ;;
1723 armv*)
1724 cpuflags="-march=$cpu"
1725 ;;
1726 arm*)
1727 cpuflags="-mcpu=$cpu"
1728 ;;
1729 ev4|ev45|ev5|ev56|pca56|ev6|ev67)
1730 enabled ccc && cpuflags="-arch $cpu" || cpuflags="-mcpu=$cpu"
1731 ;;
1732 bf*)
1733 cpuflags="-mcpu=$cpu"
1734 ;;
1735 mips*|[45]k*|[237]4k*|m4k|r*000|loongson2[ef])
1736 cpuflags="-march=$cpu"
1737 ;;
1738 ap7[02]0[0-2])
1739 subarch="avr32_ap"
1740 cpuflags="-mpart=$cpu"
1741 ;;
1742 ap)
1743 subarch="avr32_ap"
1744 cpuflags="-march=$cpu"
1745 ;;
1746 uc3[ab]*)
1747 subarch="avr32_uc"
1748 cpuflags="-mcpu=$cpu"
1749 ;;
1750 uc)
1751 subarch="avr32_uc"
1752 cpuflags="-march=$cpu"
1753 ;;
1754 generic)
1755 ;;
1756 *)
1757 echo "WARNING: Unknown CPU \"$cpu\", ignored."
1758 ;;
1759 esac
1760
1761 add_cflags $cpuflags
1762 add_asflags $cpuflags
1763
1764 # compiler sanity check
1765 check_exec <<EOF
1766 int main(void){ return 0; }
1767 EOF
1768 if test "$?" != 0; then
1769 echo "$cc is unable to create an executable file."
1770 if test -z "$cross_prefix" && ! enabled cross_compile ; then
1771 echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
1772 echo "Only do this if you know what cross compiling means."
1773 fi
1774 die "C compiler test failed."
1775 fi
1776
1777 add_cppflags -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112
1778 check_cflags -std=c99
1779 check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
1780 #include <stdlib.h>
1781 EOF
1782 check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
1783 #include <stdlib.h>
1784 EOF
1785
1786 check_host_cflags -std=c99
1787
1788 case "$arch" in
1789 alpha)
1790 arch="alpha"
1791 enable fast_64bit
1792 check_cflags -mieee
1793 spic=$shared
1794 ;;
1795 arm|armv[4567]*l)
1796 arch="arm"
1797 ;;
1798 avr32)
1799 ;;
1800 bfin)
1801 arch="bfin"
1802 ;;
1803 ia64)
1804 arch="ia64"
1805 enable fast_64bit
1806 spic=$shared
1807 # HACK: currently fails to build if .bss is > 4MB and shared libs are built
1808 enabled shared && enable hardcoded_tables
1809 ;;
1810 m68k)
1811 arch="m68k"
1812 ;;
1813 mips|mipsel|IP*)
1814 arch="mips"
1815 spic=$shared
1816 ;;
1817 mips64)
1818 arch="mips"
1819 subarch="mips64"
1820 enable fast_64bit
1821 spic=$shared
1822 ;;
1823 parisc|hppa)
1824 arch="parisc"
1825 spic=$shared
1826 ;;
1827 parisc64|hppa64)
1828 arch="parisc"
1829 enable fast_64bit
1830 spic=$shared
1831 ;;
1832 "Power Macintosh"|ppc|powerpc)
1833 arch="ppc"
1834 enable fast_unaligned
1835 ;;
1836 ppc64)
1837 arch="ppc"
1838 subarch="ppc64"
1839 enable fast_64bit
1840 enable fast_unaligned
1841 ;;
1842 s390|s390x)
1843 arch="s390"
1844 ;;
1845 sh4|sh)
1846 arch="sh4"
1847 ;;
1848 sparc)
1849 arch="sparc"
1850 spic=$shared
1851 ;;
1852 sun4u|sparc64)
1853 arch="sparc"
1854 subarch="sparc64"
1855 enable fast_64bit
1856 spic=$shared
1857 ;;
1858 i386|i486|i586|i686|i86pc|BePC|x86_64|amd64)
1859 arch="x86"
1860 subarch="x86_32"
1861 enable fast_unaligned
1862 check_cc <<EOF && enable fast_64bit && subarch="x86_64" && spic=$shared
1863 int test[sizeof(char*) - 7];
1864 EOF
1865 if test "$subarch" = "x86_64"; then
1866 enable cmov
1867 enable fast_cmov
1868 fi
1869 ;;
1870 *)
1871 arch="unknown"
1872 ;;
1873 esac
1874
1875 enable $arch $subarch
1876 enabled spic && enable pic
1877
1878 # OS specific
1879 case $target_os in
1880 beos|haiku|zeta)
1881 prefix_default="$HOME/config"
1882 # helps building libavcodec
1883 add_cppflags -DPIC
1884 add_cflags -fomit-frame-pointer
1885 # 3 gcc releases known for BeOS, each with ugly bugs
1886 gcc_version="$($cc -v 2>&1 | grep version | cut -d ' ' -f3-)"
1887 case "$gcc_version" in
1888 2.9-beos-991026*|2.9-beos-000224*) echo "R5/GG gcc"
1889 disable mmx
1890 ;;
1891 *20010315*) echo "BeBits gcc"
1892 add_cflags -fno-expensive-optimizations
1893 ;;
1894 esac
1895 SHFLAGS=-nostart
1896 # enable BeOS things
1897 enable audio_beos
1898 # no need for libm, but the inet stuff
1899 # Check for BONE
1900 # XXX: actually should check for NOT net_server
1901 if echo $BEINCLUDES | grep -q 'headers/be/bone'; then
1902 network_extralibs="-lbind -lsocket"
1903 else
1904 enable beos_netserver
1905 network_extralibs="-lnet"
1906 fi ;;
1907 sunos)
1908 FFSERVERLDFLAGS=""
1909 SHFLAGS='-shared -Wl,-h,$$(@F)'
1910 enabled x86 && SHFLAGS="-mimpure-text $SHFLAGS"
1911 network_extralibs="-lsocket -lnsl"
1912 add_cppflags -D__EXTENSIONS__
1913 ;;
1914 netbsd)
1915 oss_indev_extralibs="-lossaudio"
1916 oss_outdev_extralibs="-lossaudio"
1917 ;;
1918 openbsd)
1919 enable malloc_aligned
1920 enable pic
1921 SHFLAGS='-shared'
1922 oss_indev_extralibs="-lossaudio"
1923 oss_outdev_extralibs="-lossaudio"
1924 ;;
1925 freebsd|dragonfly)
1926 enable malloc_aligned
1927 ;;
1928 bsd/os)
1929 osextralibs="-lpoll -lgnugetopt"
1930 strip="strip -d"
1931 ;;
1932 darwin)
1933 enable malloc_aligned
1934 SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR) -Wl,-read_only_relocs,suppress'
1935 strip="strip -x"
1936 FFLDFLAGS="-Wl,-dynamic,-search_paths_first"
1937 SLIBSUF=".dylib"
1938 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
1939 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
1940 FFSERVERLDFLAGS=-Wl,-bind_at_load
1941 objformat="macho"
1942 enabled x86_64 && objformat="macho64"
1943 enabled_any pic shared ||
1944 { check_cflags -mdynamic-no-pic && add_asflags -mdynamic-no-pic; }
1945 ;;
1946 mingw32*)
1947 if test $target_os = "mingw32ce"; then
1948 disable network
1949 else
1950 target_os=mingw32
1951 fi
1952 LIBTARGET=i386
1953 if enabled x86_64; then
1954 enable malloc_aligned
1955 LIBTARGET=x64
1956 elif enabled arm; then
1957 LIBTARGET=arm
1958 fi
1959 shlibdir_default="$bindir_default"
1960 disable ffserver
1961 SLIBPREF=""
1962 SLIBSUF=".dll"
1963 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1964 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1965 SLIB_EXTRA_CMD='-lib.exe /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)'
1966 SLIB_INSTALL_EXTRA_CMD='-install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"; \
1967 install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)"; \
1968 install -d "$(LIBDIR)"; \
1969 install -m 644 $(SUBDIR)lib$(SLIBNAME:$(SLIBSUF)=.dll.a) "$(LIBDIR)/lib$(SLIBNAME:$(SLIBSUF)=.dll.a)"'
1970 SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"'
1971 SHFLAGS='-shared -Wl,--output-def,$$(@:$(SLIBSUF)=.def) -Wl,--out-implib,$(SUBDIR)lib$(SLIBNAME:$(SLIBSUF)=.dll.a) -Wl,--enable-runtime-pseudo-reloc -Wl,--enable-auto-image-base'
1972 objformat="win32"
1973 enable dos_paths
1974 check_cflags -fno-common
1975 if ! enabled x86_64; then
1976 check_cpp_condition _mingw.h "(__MINGW32_MAJOR_VERSION > 3) || (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
1977 die "ERROR: MinGW runtime version must be >= 3.15."
1978 enabled_any avisynth vfwcap_indev &&
1979 { check_cpp_condition w32api.h "(__W32API_MAJOR_VERSION > 3) || (__W32API_MAJOR_VERSION == 3 && __W32API_MINOR_VERSION >= 13)" ||
1980 die "ERROR: avisynth and vfwcap_indev require w32api version 3.13 or later."; }
1981 fi
1982 ;;
1983 cygwin*)
1984 target_os=cygwin
1985 shlibdir_default="$bindir_default"
1986 SLIBPREF="cyg"
1987 SLIBSUF=".dll"
1988 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1989 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1990 SHFLAGS='-shared -Wl,--enable-auto-image-base'
1991 objformat="win32"
1992 enable dos_paths
1993 check_cflags -fno-common
1994 ;;
1995 *-dos|freedos|opendos)
1996 disable ffplay ffserver
1997 disable $INDEV_LIST $OUTDEV_LIST
1998 network_extralibs="-lsocket"
1999 objformat="coff"
2000 enable dos_paths
2001 ;;
2002 linux)
2003 enable dv1394
2004 ;;
2005 irix*)
2006 target_os=irix
2007 ranlib="echo ignoring ranlib"
2008 ;;
2009 os/2*)
2010 strip="lxlite"
2011 ln_s="cp -f"
2012 FFLDFLAGS="-Zomf -Zbin-files -Zargs-wild -Zmap"
2013 SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
2014 FFSERVERLDFLAGS=""
2015 LIBSUF="_s.a"
2016 SLIBPREF=""
2017 SLIBSUF=".dll"
2018 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
2019 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
2020 SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
2021 echo PROTMODE >> $(SUBDIR)$(NAME).def; \
2022 echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
2023 echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
2024 echo EXPORTS >> $(SUBDIR)$(NAME).def; \
2025 emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
2026 SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
2027 emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
2028 SLIB_INSTALL_EXTRA_CMD='install -m 644 $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib "$(LIBDIR)"'
2029 SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.a "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.lib'
2030 enable dos_paths
2031 ;;
2032 gnu/kfreebsd)
2033 ;;
2034 gnu)
2035 ;;
2036
2037 *)
2038 die "Unknown OS '$target_os'."
2039 ;;
2040 esac
2041
2042 set_default $PATHS_LIST
2043
2044 add_extralibs $osextralibs
2045
2046 # Combine FFLDFLAGS and the LDFLAGS environment variable.
2047 LDFLAGS="$FFLDFLAGS $LDFLAGS"
2048
2049 # we need to build at least one lib type
2050 if ! enabled_any static shared; then
2051 cat <<EOF
2052 At least one library type must be built.
2053 Specify --enable-static to build the static libraries or --enable-shared to
2054 build the shared libraries as well. To only build the shared libraries specify
2055 --disable-static in addition to --enable-shared.
2056 EOF
2057 exit 1;
2058 fi
2059
2060 disabled static && LIBNAME=""
2061
2062 if enabled_any libfaad libfaadbin ; then
2063 if check_header faad.h; then
2064 check_cc <<EOF
2065 #include <faad.h>
2066 #ifndef FAAD2_VERSION
2067 ok faad1
2068 #endif
2069 int main(void) { return 0; }
2070 EOF
2071 test $? = 0 && enable libfaad2
2072 else
2073 die "FAAD test failed."
2074 fi
2075 fi
2076
2077
2078 die_license_disabled() {
2079 enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
2080 }
2081
2082 die_license_disabled gpl libfaad2
2083 die_license_disabled gpl libx264
2084 die_license_disabled gpl libxvid
2085 die_license_disabled gpl postproc
2086 die_license_disabled gpl x11grab
2087
2088 die_license_disabled nonfree libfaac
2089
2090 die_license_disabled version3 libopencore_amrnb
2091 die_license_disabled version3 libopencore_amrwb
2092
2093 enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
2094
2095 check_deps $ARCH_EXT_LIST
2096
2097 disabled optimizations || check_cflags -fomit-frame-pointer
2098
2099 enable_pic() {
2100 enable pic
2101 add_cppflags -DPIC
2102 add_cflags -fPIC
2103 add_asflags -fPIC
2104 }
2105
2106 enabled pic && enable_pic
2107
2108 check_cc <<EOF || die "Symbol mangling check failed."
2109 int ff_extern;
2110 EOF
2111 sym=$($nm -P -g $TMPO | grep ff_extern)
2112 extern_prefix=${sym%%ff_extern*}
2113
2114 check_cc <<EOF && enable inline_asm
2115 void foo(void) { __asm__ volatile ("" ::); }
2116 EOF
2117
2118 _restrict=
2119 for restrict_keyword in restrict __restrict__ __restrict; do
2120 check_cc <<EOF && _restrict=$restrict_keyword && break
2121 void foo(char * $restrict_keyword p);
2122 EOF
2123 done
2124
2125 check_cc <<EOF && enable attribute_packed
2126 struct { int x; } __attribute__((packed)) x;
2127 EOF
2128
2129 check_cc <<EOF || die "endian test failed"
2130 unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
2131 EOF
2132 od -A n -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
2133
2134 if enabled arm; then
2135
2136 check_cflags -marm
2137
2138 check_ld <<EOF && enable vfp_args
2139 __asm__ (".eabi_attribute 28, 1");
2140 int main(void) { return 0; }
2141 EOF
2142
2143 # We have to check if pld is a nop and disable it.
2144 check_asm pld '"pld [r0]"'
2145
2146 enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
2147 enabled armv6 && check_asm armv6 '"sadd16 r0, r0, r0"'
2148 enabled armv6t2 && check_asm armv6t2 '"movt r0, #0"'
2149 enabled armvfp && check_asm armvfp '"fadds s0, s0, s0"'
2150 enabled iwmmxt && check_asm iwmmxt '"wunpckelub wr6, wr4"'
2151 enabled neon && check_asm neon '"vadd.i16 q0, q0, q0"'
2152
2153 enabled_all armv6t2 shared !pic && enable_pic
2154
2155 elif enabled mips; then
2156
2157 check_asm loongson '"dmult.g $1, $2, $3"'
2158 enabled mmi && check_asm mmi '"lq $2, 0($2)"'
2159
2160 elif enabled ppc; then
2161
2162 check_asm dcbzl '"dcbzl 0, 1"'
2163 check_asm ppc4xx '"maclhw r10, r11, r12"'
2164 check_asm xform_asm '"lwzx 0, %y0" :: "Z"(*(int*)0)'
2165
2166 # AltiVec flags: The FSF version of GCC differs from the Apple version
2167 if enabled altivec; then
2168 check_cflags -maltivec -mabi=altivec &&
2169 { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
2170 check_cflags -faltivec
2171
2172 # check if our compiler supports Motorola AltiVec C API
2173 check_cc <<EOF || disable altivec
2174 $inc_altivec_h
2175 int main(void) {
2176 vector signed int v1, v2, v3;
2177 v1 = vec_add(v2,v3);
2178 return 0;
2179 }
2180 EOF
2181
2182 # check if our compiler supports braces for vector declarations
2183 check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
2184 $inc_altivec_h
2185 int main (void) { (vector int) {1}; return 0; }
2186 EOF
2187 fi
2188
2189 elif enabled sparc; then
2190
2191 enabled vis && check_asm vis '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc &&
2192 add_cflags -mcpu=ultrasparc -mtune=ultrasparc
2193
2194 elif enabled x86; then
2195
2196 # check whether EBP is available on x86
2197 # As 'i' is stored on the stack, this program will crash
2198 # if the base pointer is used to access it because the
2199 # base pointer is cleared in the inline assembly code.
2200 check_exec_crash <<EOF && enable ebp_available
2201 volatile int i=0;
2202 __asm__ volatile (
2203 "xorl %%ebp, %%ebp"
2204 ::: "%ebp");
2205 return i;
2206 EOF
2207
2208 # check whether EBX is available on x86
2209 check_asm ebx_available '""::"b"(0)' &&
2210 check_asm ebx_available '"":::"%ebx"'
2211
2212 # check whether more than 10 operands are supported
2213 check_cc <<EOF && enable ten_operands
2214 int main(void) {
2215 int x=0;
2216 __asm__ volatile(
2217 ""
2218 :"+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x)
2219 );
2220 return 0;
2221 }
2222 EOF
2223
2224 # check whether binutils is new enough to compile SSSE3/MMX2
2225 enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
2226 enabled mmx2 && check_asm mmx2 '"pmaxub %mm0, %mm1"'
2227
2228 check_asm bswap '"bswap %%eax" ::: "%eax"'
2229
2230 YASMFLAGS="-f $objformat -DARCH_$(toupper $subarch)"
2231 enabled x86_64 && append YASMFLAGS "-m amd64"
2232 enabled_all x86_64 shared && append YASMFLAGS "-DPIC"
2233 case "$objformat" in
2234 elf) enabled debug && append YASMFLAGS "-g dwarf2" ;;
2235 macho64) append YASMFLAGS "-DPIC -DPREFIX" ;;
2236 *) append YASMFLAGS "-DPREFIX" ;;
2237 esac
2238 disabled yasm || { check_yasm "pabsw xmm0, xmm0" && enable yasm; }
2239
2240 fi
2241
2242 if check_func dlopen; then
2243 ldl=
2244 elif check_func dlopen -ldl; then
2245 ldl=-ldl
2246 fi
2247
2248 # Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
2249 check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
2250
2251 check_func fork
2252 check_func gethrtime
2253 check_func getrusage
2254 check_func inet_aton $network_extralibs
2255 check_func isatty
2256 check_func memalign
2257 check_func mkstemp
2258 check_func posix_memalign
2259 check_func_headers io.h setmode
2260 check_func_headers lzo/lzo1x.h lzo1x_999_compress
2261 check_func_headers windows.h GetProcessTimes
2262 check_func_headers windows.h VirtualAlloc
2263
2264 check_header conio.h
2265 check_header dlfcn.h
2266 check_header malloc.h
2267 check_header poll.h
2268 check_header sys/mman.h
2269 check_header sys/resource.h
2270 check_header sys/select.h
2271 check_header termios.h
2272 check_header vdpau/vdpau.h
2273 check_header vdpau/vdpau_x11.h
2274 check_header X11/extensions/XvMClib.h
2275
2276 if ! enabled_any memalign memalign_hack posix_memalign malloc_aligned &&
2277 enabled_any $need_memalign ; then
2278 die "Error, no aligned memory allocator but SSE enabled, disable it or use --enable-memalign-hack."
2279 fi
2280
2281 disabled zlib || check_lib zlib.h zlibVersion -lz || disable zlib
2282 disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
2283
2284 # check for some common methods of building with pthread support
2285 # do this before the optional library checks as some of them require pthreads
2286 if enabled pthreads; then
2287 if check_func pthread_create; then
2288 :
2289 elif check_func pthread_create -pthread; then
2290 add_cflags -pthread
2291 add_extralibs -pthread
2292 elif check_func pthread_create -pthreads; then
2293 add_cflags -pthreads
2294 add_extralibs -pthreads
2295 elif check_func pthread_create -lpthreadGC2; then
2296 add_extralibs -lpthreadGC2
2297 elif ! check_lib pthread.h pthread_create -lpthread; then
2298 die "ERROR: can't find pthreads library"
2299 fi
2300 fi
2301
2302 for thread in $THREADS_LIST; do
2303 if enabled $thread; then
2304 test -n "$thread_type" &&
2305 die "ERROR: Only one thread type must be selected." ||
2306 thread_type="$thread"
2307 fi
2308 done
2309
2310 check_lib math.h sin -lm
2311 check_lib va/va.h vaInitialize -lva
2312
2313 check_func llrint
2314 check_func log2
2315 check_func lrint
2316 check_func lrintf
2317 check_func round
2318 check_func roundf
2319 check_func truncf
2320
2321 # these are off by default, so fail if requested and not available
2322 enabled avisynth && require2 vfw32 "windows.h vfw.h" AVIFileInit -lvfw32
2323 enabled libdirac && add_cflags $(pkg-config --cflags dirac) &&
2324 require libdirac libdirac_decoder/dirac_parser.h dirac_decoder_init $(pkg-config --libs dirac) &&
2325 require libdirac libdirac_encoder/dirac_encoder.h dirac_encoder_init $(pkg-config --libs dirac)
2326 enabled libfaac && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
2327 enabled libfaad && require2 libfaad faad.h faacDecOpen -lfaad
2328 enabled libgsm && require libgsm gsm.h gsm_create -lgsm
2329 enabled libmp3lame && require libmp3lame lame/lame.h lame_init -lmp3lame -lm
2330 enabled libnut && require libnut libnut.h nut_demuxer_init -lnut
2331 enabled libopencore_amrnb && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb -lm
2332 enabled libopencore_amrwb && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb -lm
2333 enabled libopenjpeg && require libopenjpeg openjpeg.h opj_version -lopenjpeg
2334 enabled libschroedinger && add_cflags $(pkg-config --cflags schroedinger-1.0) &&
2335 require libschroedinger schroedinger/schro.h schro_init $(pkg-config --libs schroedinger-1.0)
2336 enabled libspeex && require libspeex speex/speex.h speex_decoder_init -lspeex
2337 enabled libtheora && require libtheora theora/theora.h theora_info_init -ltheora -logg
2338 enabled libvorbis && require libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
2339 enabled libx264 && require libx264 x264.h x264_encoder_encode -lx264 -lm &&
2340 { check_cpp_condition x264.h "X264_BUILD >= 78" ||
2341 die "ERROR: libx264 version must be >= 0.78."; }
2342 enabled libxvid && require libxvid xvid.h xvid_global -lxvidcore
2343 enabled mlib && require mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
2344
2345 # libdc1394 check
2346 if enabled libdc1394; then
2347 { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
2348 enable libdc1394_2; } ||
2349 { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
2350 enable libdc1394_1; } ||
2351 die "ERROR: No version of libdc1394 found "
2352 fi
2353
2354 disable sdl_too_old
2355 disable sdl
2356 SDL_CONFIG="${cross_prefix}sdl-config"
2357 if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
2358 sdl_cflags=$("${SDL_CONFIG}" --cflags)
2359 temp_cflags $sdl_cflags
2360 temp_extralibs $("${SDL_CONFIG}" --libs)
2361 if check_lib2 SDL.h SDL_Init; then
2362 _sdlversion=$("${SDL_CONFIG}" --version | sed 's/[^0-9]//g')
2363 if test "$_sdlversion" -lt 121 ; then
2364 enable sdl_too_old
2365 else
2366 enable sdl
2367 check_cc $sdl_cflags <<EOF && enable sdl_video_size
2368 #include <SDL.h>
2369 int main(int argc, char **argv){
2370 const SDL_VideoInfo *vi = SDL_GetVideoInfo();
2371 int w = vi->current_w;
2372 return 0;
2373 }
2374 EOF
2375 fi
2376 fi
2377 restore_flags
2378 fi
2379
2380 texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
2381
2382 if enabled network; then
2383 check_type "sys/types.h sys/socket.h" socklen_t
2384 # Prefer arpa/inet.h over winsock2
2385 if check_header arpa/inet.h ; then
2386 check_func closesocket
2387 elif check_header winsock2.h ; then
2388 check_func_headers winsock2.h closesocket -lws2 && \
2389 network_extralibs="-lws2" || \
2390 { check_func_headers winsock2.h closesocket -lws2_32 && \
2391 network_extralibs="-lws2_32"; }
2392 check_type ws2tcpip.h socklen_t
2393 else
2394 disable network
2395 fi
2396 fi
2397
2398 enabled_all network ipv6 && check_ld <<EOF || disable ipv6
2399 #include <sys/types.h>
2400 #include <sys/socket.h>
2401 #include <netinet/in.h>
2402 #include <netdb.h>
2403 int main(void) {
2404 struct sockaddr_storage saddr;
2405 struct ipv6_mreq mreq6;
2406 getaddrinfo(0,0,0,0);
2407 getnameinfo(0,0,0,0,0,0,0);
2408 IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
2409 }
2410 EOF
2411
2412 check_header linux/videodev.h
2413 check_header linux/videodev2.h
2414 check_header sys/videoio.h
2415
2416 check_func_headers "windows.h vfw.h" capCreateCaptureWindow -lvfw32
2417
2418 # check for ioctl_meteor.h, ioctl_bt848.h and alternatives
2419 { check_header dev/bktr/ioctl_meteor.h &&
2420 check_header dev/bktr/ioctl_bt848.h; } ||
2421 { check_header machine/ioctl_meteor.h &&
2422 check_header machine/ioctl_bt848.h; } ||
2423 { check_header dev/video/meteor/ioctl_meteor.h &&
2424 check_header dev/video/bktr/ioctl_bt848.h; } ||
2425 check_header dev/ic/bt8xx.h
2426
2427 check_header sys/soundcard.h
2428 check_header soundcard.h
2429
2430 enabled_any alsa_indev alsa_outdev && check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
2431
2432 enabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack
2433
2434 enabled x11grab &&
2435 check_header X11/Xlib.h &&
2436 check_header X11/extensions/XShm.h &&
2437 check_func XOpenDisplay -lX11 &&
2438 check_func XShmCreateImage -lX11 -lXext
2439
2440 enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel"
2441
2442 # add some useful compiler flags if supported
2443 check_cflags -Wdeclaration-after-statement
2444 check_cflags -Wall
2445 check_cflags -Wno-switch
2446 check_cflags -Wdisabled-optimization
2447 check_cflags -Wpointer-arith
2448 check_cflags -Wredundant-decls
2449 check_cflags -Wno-pointer-sign
2450 check_cflags -Wcast-qual
2451 check_cflags -Wwrite-strings
2452 check_cflags -Wtype-limits
2453 check_cflags -Wundef
2454 enabled extra_warnings && check_cflags -Winline
2455
2456 # add some linker flags
2457 check_ldflags -Wl,--warn-common
2458 check_ldflags -Wl,--as-needed
2459 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'
2460 check_ldflags -Wl,-Bsymbolic
2461
2462 if enabled small; then
2463 check_cflags -Os # not all compilers support -Os
2464 optimizations="small"
2465 elif enabled optimizations; then
2466 if enabled xlc; then
2467 add_cflags -O5
2468 add_ldflags -O5
2469 elif enabled ccc; then
2470 add_cflags -fast
2471 else
2472 add_cflags -O3
2473 fi
2474 fi
2475 check_cflags -fno-math-errno
2476 check_cflags -fno-signed-zeros
2477
2478 if enabled icc; then
2479 # Just warnings, no remarks
2480 check_cflags -w1
2481 # -wd: Disable following warnings
2482 # 144, 167, 556: -Wno-pointer-sign
2483 # 10006: ignoring unknown option -fno-signed-zeros
2484 # 10156: ignoring option '-W'; no argument required
2485 check_cflags -wd144,167,556,10006,10156
2486 # 11030: Warning unknown option --as-needed
2487 # 10156: ignoring option '-export'; no argument required
2488 check_ldflags -wd10156,11030
2489 # Allow to compile with optimizations
2490 check_ldflags -march=$cpu
2491 # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
2492 enable ebp_available
2493 elif enabled ccc; then
2494 # disable some annoying warnings
2495 add_cflags -msg_disable cvtu32to64
2496 add_cflags -msg_disable embedcomment
2497 add_cflags -msg_disable needconstext
2498 add_cflags -msg_disable nomainieee
2499 add_cflags -msg_disable ptrmismatch1
2500 add_cflags -msg_disable unreachcode
2501 elif enabled gcc; then
2502 check_cflags -fno-tree-vectorize
2503 elif enabled clang; then
2504 check_cflags -Qunused-arguments
2505 fi
2506
2507 if enabled gprof; then
2508 add_cflags -p
2509 add_ldflags -p
2510 fi
2511
2512 # Find out if the .align argument is a power of two or not.
2513 check_asm asmalign_pot '".align 3"'
2514
2515 enabled_any $DECODER_LIST && enable decoders
2516 enabled_any $ENCODER_LIST && enable encoders
2517 enabled_any $HWACCEL_LIST && enable hwaccels
2518 enabled_any $BSF_LIST && enable bsfs
2519 enabled_any $DEMUXER_LIST && enable demuxers
2520 enabled_any $MUXER_LIST && enable muxers
2521 enabled_any $FILTER_LIST && enable filters
2522 enabled_any $INDEV_LIST && enable indevs
2523 enabled_any $OUTDEV_LIST && enable outdevs
2524 enabled_any $PROTOCOL_LIST && enable protocols
2525
2526 enabled_any $THREADS_LIST && enable threads
2527
2528 check_deps $CONFIG_LIST \
2529 $CONFIG_EXTRA \
2530 $HAVE_LIST \
2531 $DECODER_LIST \
2532 $ENCODER_LIST \
2533 $HWACCEL_LIST \
2534 $PARSER_LIST \
2535 $BSF_LIST \
2536 $DEMUXER_LIST \
2537 $MUXER_LIST \
2538 $FILTER_LIST \
2539 $INDEV_LIST \
2540 $OUTDEV_LIST \
2541 $PROTOCOL_LIST \
2542
2543 echo "install prefix $prefix"
2544 echo "source path $source_path"
2545 echo "C compiler $cc"
2546 echo ".align is power-of-two $asmalign_pot"
2547 echo "ARCH $arch ($cpu)"
2548 if test "$build_suffix" != ""; then
2549 echo "build suffix $build_suffix"
2550 fi
2551 if test "$extra_version" != ""; then
2552 echo "version string suffix $extra_version"
2553 fi
2554 echo "big-endian ${bigendian-no}"
2555 echo "runtime cpu detection ${runtime_cpudetect-no}"
2556 if enabled x86; then
2557 echo "yasm ${yasm-no}"
2558 echo "MMX enabled ${mmx-no}"
2559 echo "MMX2 enabled ${mmx2-no}"
2560 echo "3DNow! enabled ${amd3dnow-no}"
2561 echo "3DNow! extended enabled ${amd3dnowext-no}"
2562 echo "SSE enabled ${sse-no}"
2563 echo "SSSE3 enabled ${ssse3-no}"
2564 echo "CMOV enabled ${cmov-no}"
2565 echo "CMOV is fast ${fast_cmov-no}"
2566 echo "EBX available ${ebx_available-no}"
2567 echo "EBP available ${ebp_available-no}"
2568 echo "10 operands supported ${ten_operands-no}"
2569 fi
2570 if enabled arm; then
2571 echo "ARMv5TE enabled ${armv5te-no}"
2572 echo "ARMv6 enabled ${armv6-no}"
2573 echo "ARMv6T2 enabled ${armv6t2-no}"
2574 echo "ARM VFP enabled ${armvfp-no}"
2575 echo "IWMMXT enabled ${iwmmxt-no}"
2576 echo "NEON enabled ${neon-no}"
2577 fi
2578 if enabled mips; then
2579 echo "MMI enabled ${mmi-no}"
2580 fi
2581 if enabled ppc; then
2582 echo "AltiVec enabled ${altivec-no}"
2583 echo "PPC 4xx optimizations ${ppc4xx-no}"
2584 echo "dcbzl available ${dcbzl-no}"
2585 echo "performance report ${powerpc_perf-no}"
2586 fi
2587 if enabled sparc; then
2588 echo "VIS enabled ${vis-no}"
2589 fi
2590 echo "gprof enabled ${gprof-no}"
2591 echo "debug symbols ${debug-no}"
2592 echo "strip symbols ${stripping-no}"
2593 echo "optimizations ${optimizations-no}"
2594 echo "static ${static-no}"
2595 echo "shared ${shared-no}"
2596 echo "postprocessing support ${postproc-no}"
2597 echo "new filter support ${avfilter-no}"
2598 echo "filters using lavformat ${avfilter_lavf-no}"
2599 echo "network support ${network-no}"
2600 if enabled network; then
2601 echo "IPv6 support ${ipv6-no}"
2602 fi
2603 echo "threading support ${thread_type-no}"
2604 echo "SDL support ${sdl-no}"
2605 if enabled sdl_too_old; then
2606 echo "-> Your SDL version is too old - please upgrade to have FFplay/SDL support."
2607 fi
2608 echo "Sun medialib support ${mlib-no}"
2609 echo "AVISynth enabled ${avisynth-no}"
2610 echo "libdc1394 support ${libdc1394-no}"
2611 echo "libdirac enabled ${libdirac-no}"
2612 echo "libfaac enabled ${libfaac-no}"
2613 echo "libfaad enabled ${libfaad-no}"
2614 echo "libfaad dlopened ${libfaadbin-no}"
2615 echo "libgsm enabled ${libgsm-no}"
2616 echo "libmp3lame enabled ${libmp3lame-no}"
2617 echo "libnut enabled ${libnut-no}"
2618 echo "libopencore-amrnb support ${libopencore_amrnb-no}"
2619 echo "libopencore-amrwb support ${libopencore_amrwb-no}"
2620 echo "libopenjpeg enabled ${libopenjpeg-no}"
2621 echo "libschroedinger enabled ${libschroedinger-no}"
2622 echo "libspeex enabled ${libspeex-no}"
2623 echo "libtheora enabled ${libtheora-no}"
2624 echo "libvorbis enabled ${libvorbis-no}"
2625 echo "libx264 enabled ${libx264-no}"
2626 echo "libxvid enabled ${libxvid-no}"
2627 echo "zlib enabled ${zlib-no}"
2628 echo "bzlib enabled ${bzlib-no}"
2629 echo
2630
2631 for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
2632 echo "Enabled ${type}s:"
2633 eval list=\$$(toupper $type)_LIST
2634 for part in $list; do
2635 enabled $part && echo ${part%_*}
2636 done | sort | pr -3 -t
2637 echo
2638 done
2639
2640 license="LGPL version 2.1 or later"
2641 if enabled nonfree; then
2642 license="nonfree and unredistributable"
2643 elif enabled gplv3; then
2644 license="GPL version 3 or later"
2645 elif enabled lgplv3; then
2646 license="LGPL version 3 or later"
2647 elif enabled gpl; then
2648 license="GPL version 2 or later"
2649 fi
2650
2651 echo "License: $license"
2652
2653 echo "Creating config.mak and config.h..."
2654
2655 enabled stripping || strip="echo skipping strip"
2656
2657 echo "# Automatically generated by configure - do not modify!" > config.mak
2658 echo "ifndef FFMPEG_CONFIG_MAK" >> config.mak
2659 echo "FFMPEG_CONFIG_MAK=1" >> config.mak
2660
2661 echo "FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION" >> config.mak
2662 echo "prefix=$prefix" >> config.mak
2663 echo "LIBDIR=\$(DESTDIR)$libdir" >> config.mak
2664 echo "SHLIBDIR=\$(DESTDIR)$shlibdir" >> config.mak
2665 echo "INCDIR=\$(DESTDIR)$incdir" >> config.mak
2666 echo "BINDIR=\$(DESTDIR)$bindir" >> config.mak
2667 echo "DATADIR=\$(DESTDIR)$datadir" >> config.mak
2668 echo "MANDIR=\$(DESTDIR)$mandir" >> config.mak
2669 echo "SRC_PATH=\"$source_path\"" >> config.mak
2670 echo "SRC_PATH_BARE=$source_path" >> config.mak
2671 echo "BUILD_ROOT=\"$PWD\"" >> config.mak
2672 echo "CC=$cc" >> config.mak
2673 echo "AS=$as" >> config.mak
2674 echo "LD=$ld" >> config.mak
2675 echo "DEPCC=$dep_cc" >> config.mak
2676 echo "YASM=$yasmexe" >> config.mak
2677 echo "AR=$ar" >> config.mak
2678 echo "RANLIB=$ranlib" >> config.mak
2679 echo "LN_S=$ln_s" >> config.mak
2680 echo "STRIP=$strip" >> config.mak
2681 echo "CPPFLAGS=$CPPFLAGS" >> config.mak
2682 echo "CFLAGS=$CFLAGS" >> config.mak
2683 echo "ASFLAGS=$ASFLAGS" >> config.mak
2684 echo "CC_O=$CC_O" >> config.mak
2685 echo "LDFLAGS=$LDFLAGS" >> config.mak
2686 echo "FFSERVERLDFLAGS=$FFSERVERLDFLAGS" >> config.mak
2687 echo "SHFLAGS=$SHFLAGS" >> config.mak
2688 echo "YASMFLAGS=$YASMFLAGS" >> config.mak
2689 echo "BUILDSUF=$build_suffix" >> config.mak
2690 echo "FULLNAME=$FULLNAME" >> config.mak
2691 echo "LIBPREF=$LIBPREF" >> config.mak
2692 echo "LIBSUF=$LIBSUF" >> config.mak
2693 echo "LIBNAME=$LIBNAME" >> config.mak
2694 echo "SLIBPREF=$SLIBPREF" >> config.mak
2695 echo "SLIBSUF=$SLIBSUF" >> config.mak
2696 echo "EXESUF=$EXESUF" >> config.mak
2697 echo "EXTRA_VERSION=$extra_version" >> config.mak
2698 echo "DEPFLAGS=$DEPFLAGS" >> config.mak
2699 echo "CCDEP=$CCDEP" >> config.mak
2700 echo "ASDEP=$ASDEP" >> config.mak
2701 echo "CC_DEPFLAGS=$CC_DEPFLAGS" >> config.mak
2702 echo "AS_DEPFLAGS=$AS_DEPFLAGS" >> config.mak
2703 echo "HOSTCC=$host_cc" >> config.mak
2704 echo "HOSTCFLAGS=$host_cflags" >> config.mak
2705 echo "HOSTEXESUF=$HOSTEXESUF" >> config.mak
2706 echo "HOSTLDFLAGS=$host_ldflags" >> config.mak
2707 echo "HOSTLIBS=$host_libs" >> config.mak
2708 echo "TARGET_EXEC=$target_exec" >> config.mak
2709 echo "TARGET_PATH=$target_path" >> config.mak
2710
2711 if enabled sdl; then
2712 echo "SDL_LIBS=$("${SDL_CONFIG}" --libs)" >> config.mak
2713 echo "SDL_CFLAGS=$("${SDL_CONFIG}" --cflags)" >> config.mak
2714 fi
2715
2716 get_version(){
2717 name=$1
2718 file=$source_path/$2
2719 eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
2720 eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
2721 lcname=$(tolower $name)
2722 eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
2723 eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
2724 }
2725
2726 get_version LIBSWSCALE libswscale/swscale.h
2727 get_version LIBPOSTPROC libpostproc/postprocess.h
2728 get_version LIBAVCODEC libavcodec/avcodec.h
2729 get_version LIBAVDEVICE libavdevice/avdevice.h
2730 get_version LIBAVFORMAT libavformat/avformat.h
2731 get_version LIBAVUTIL libavutil/avutil.h
2732 get_version LIBAVFILTER libavfilter/avfilter.h
2733
2734 if enabled shared; then
2735 echo "LIBTARGET=${LIBTARGET}" >> config.mak
2736 echo "SLIBNAME=${SLIBNAME}" >> config.mak
2737 echo "SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}" >> config.mak
2738 echo "SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}" >> config.mak
2739 echo "SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}" >> config.mak
2740 echo "SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}" >> config.mak
2741 echo "SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}" >> config.mak
2742 echo "SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}" >> config.mak
2743 fi
2744 echo "LIB_INSTALL_EXTRA_CMD=${LIB_INSTALL_EXTRA_CMD}" >> config.mak
2745 echo "EXTRALIBS=$extralibs" >> config.mak
2746
2747 echo "ARCH=$arch" >> config.mak
2748
2749
2750 echo "/* Automatically generated by configure - do not modify! */" > $TMPH
2751 echo "#ifndef FFMPEG_CONFIG_H" >> $TMPH
2752 echo "#define FFMPEG_CONFIG_H" >> $TMPH
2753 echo "#define FFMPEG_CONFIGURATION \"$(c_escape $FFMPEG_CONFIGURATION)\"" >> $TMPH
2754 echo "#define FFMPEG_DATADIR \"$(eval c_escape $datadir)\"" >> $TMPH
2755
2756 echo "#define CC_TYPE \"$cc_type\"" >> $TMPH
2757 echo "#define CC_VERSION $cc_version" >> $TMPH
2758 echo "#define restrict $_restrict" >> $TMPH
2759
2760 if enabled small || disabled optimizations; then
2761 echo "#define av_always_inline" >> $TMPH
2762 fi
2763
2764
2765 # Apparently it's not possible to portably echo a backslash.
2766 enabled asmalign_pot &&
2767 printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH ||
2768 printf '#define ASMALIGN(ZEROBITS) ".align 1 << " #ZEROBITS "\\n\\t"\n' >> $TMPH
2769
2770 echo "#define EXTERN_PREFIX \"${extern_prefix}\"" >> $TMPH
2771 echo "#define EXTERN_ASM ${extern_prefix}" >> $TMPH
2772
2773 print_config ARCH_ $TMPH config.mak $ARCH_LIST
2774 print_config HAVE_ $TMPH config.mak $HAVE_LIST
2775 print_config CONFIG_ $TMPH config.mak $CONFIG_LIST \
2776 $CONFIG_EXTRA \
2777 $DECODER_LIST \
2778 $ENCODER_LIST \
2779 $HWACCEL_LIST \
2780 $PARSER_LIST \
2781 $BSF_LIST \
2782 $DEMUXER_LIST \
2783 $MUXER_LIST \
2784 $FILTER_LIST \
2785 $PROTOCOL_LIST \
2786 $INDEV_LIST \
2787 $OUTDEV_LIST \
2788
2789 echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
2790 echo "endif # FFMPEG_CONFIG_MAK" >> config.mak
2791
2792 # Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
2793 cmp -s $TMPH config.h &&
2794 echo "config.h is unchanged" ||
2795 mv -f $TMPH config.h
2796
2797 # build tree in object directory if source path is different from current one
2798 if enabled source_path_used; then
2799 DIRS="
2800 doc
2801 libavcodec
2802 libavcodec/$arch
2803 libavdevice
2804 libavfilter
2805 libavformat
2806 libavutil
2807 libavutil/$arch
2808 libpostproc
2809 libswscale
2810 libswscale/$arch
2811 tests
2812 tools
2813 "
2814 FILES="
2815 Makefile
2816 common.mak
2817 subdir.mak
2818 doc/texi2pod.pl
2819 libavcodec/Makefile
2820 libavdevice/Makefile
2821 libavfilter/Makefile
2822 libavformat/Makefile
2823 libavutil/Makefile
2824 libpostproc/Makefile
2825 libswscale/Makefile
2826 "
2827 for dir in $DIRS ; do
2828 mkdir -p $dir
2829 done
2830 for f in $FILES ; do
2831 $ln_s "$source_path/$f" $f
2832 done
2833 fi
2834
2835
2836 # build pkg-config files
2837
2838 pkgconfig_generate(){
2839 name=$1
2840 shortname=${name#lib}${build_suffix}
2841 comment=$2
2842 version=$3
2843 libs=$4
2844 requires=$5
2845 cat <<EOF > $name/$name.pc
2846 prefix=$prefix
2847 exec_prefix=\${prefix}
2848 libdir=$libdir
2849 includedir=$incdir
2850
2851 Name: $name
2852 Description: $comment
2853 Version: $version
2854 Requires: $(enabled shared || echo $requires)
2855 Requires.private: $(enabled shared && echo $requires)
2856 Conflicts:
2857 Libs: -L\${libdir} -l${shortname} $(enabled shared || echo $libs)
2858 Libs.private: $(enabled shared && echo $libs)
2859 Cflags: -I\${includedir}
2860 EOF
2861 cat <<EOF > $name/$name-uninstalled.pc
2862 prefix=
2863 exec_prefix=
2864 libdir=\${pcfiledir}
2865 includedir=${source_path}
2866
2867 Name: $name
2868 Description: $comment
2869 Version: $version
2870 Requires: $requires
2871 Conflicts:
2872 Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
2873 Cflags: -I\${includedir}
2874 EOF
2875 }
2876
2877 pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
2878 pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
2879 pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
2880 pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "libavformat = $LIBAVFORMAT_VERSION"
2881 enabled avfilter &&
2882 pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
2883 enabled postproc &&
2884 pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
2885 pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"