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