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