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