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