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