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