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