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