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