3 # FFmpeg configure script
5 # Copyright (c) 2000-2002 Fabrice Bellard
6 # Copyright (c) 2005-2008 Diego Biurrun
7 # Copyright (c) 2005-2008 Mans Rullgard
10 # Prevent locale nonsense from breaking basic text processing.
14 # make sure we are running under a compatible shell
15 # try to make this part work with most shells
18 echo "Trying shell $1"
19 type "$1" > /dev/null 2>&1 && exec "$@"
23 (: ${foo%%bar}) 2> /dev/null
26 (: ${foo?}) 2> /dev/null
29 if test "$E1" != 0 || test "$E2" = 0; then
30 echo "Broken shell detected. Trying alternatives."
32 if test "0$FF_CONF_EXEC" -lt 1; then
34 try_exec bash "$0" "$@"
36 if test "0$FF_CONF_EXEC" -lt 2; then
38 try_exec ksh "$0" "$@"
40 if test "0$FF_CONF_EXEC" -lt 3; then
42 try_exec /usr/xpg4/bin/sh "$0" "$@"
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."
57 test -d /usr/xpg4/bin && PATH=/usr/xpg4/bin:$PATH
61 Usage: configure [options]
62 Options: [defaults in brackets after descriptions]
65 --help print this message
66 --list-decoders show all available decoders
67 --list-encoders show all available encoders
68 --list-hwaccels show all available hardware accelerators
69 --list-demuxers show all available demuxers
70 --list-muxers show all available muxers
71 --list-parsers show all available parsers
72 --list-protocols show all available protocols
73 --list-bsfs show all available bitstream filters
74 --list-indevs show all available input devices
75 --list-outdevs show all available output devices
76 --list-filters show all available filters
79 --logfile=FILE log tests and output to FILE [config.log]
80 --disable-logging do not log configure debug information
81 --fatal-warnings fail if any configure warning is generated
82 --prefix=PREFIX install in PREFIX [$prefix]
83 --bindir=DIR install binaries in DIR [PREFIX/bin]
84 --datadir=DIR install data files in DIR [PREFIX/share/ffmpeg]
85 --libdir=DIR install libs in DIR [PREFIX/lib]
86 --shlibdir=DIR install shared libs in DIR [PREFIX/lib]
87 --incdir=DIR install includes in DIR [PREFIX/include]
88 --mandir=DIR install man page in DIR [PREFIX/share/man]
91 --enable-gpl allow use of GPL code, the resulting libs
92 and binaries will be under GPL [no]
93 --enable-version3 upgrade (L)GPL to version 3 [no]
94 --enable-nonfree allow use of nonfree code, the resulting libs
95 and binaries will be unredistributable [no]
97 Configuration options:
98 --disable-static do not build static libraries [no]
99 --enable-shared build shared libraries [no]
100 --enable-small optimize for size instead of speed
101 --disable-runtime-cpudetect disable detecting cpu capabilities at runtime (smaller binary)
102 --enable-gray enable full grayscale support (slower color)
103 --disable-swscale-alpha disable alpha channel support in swscale
106 --disable-programs do not build command line programs
107 --disable-ffmpeg disable ffmpeg build
108 --disable-ffplay disable ffplay build
109 --disable-ffprobe disable ffprobe build
110 --disable-ffserver disable ffserver build
112 Documentation options:
113 --disable-doc do not build documentation
114 --disable-htmlpages do not build HTML documentation pages
115 --disable-manpages do not build man documentation pages
116 --disable-podpages do not build POD documentation pages
117 --disable-txtpages do not build text documentation pages
120 --disable-avdevice disable libavdevice build
121 --disable-avcodec disable libavcodec build
122 --disable-avformat disable libavformat build
123 --disable-swresample disable libswresample build
124 --disable-swscale disable libswscale build
125 --disable-postproc disable libpostproc build
126 --disable-avfilter disable libavfilter build
127 --enable-avresample enable libavresample build [no]
128 --disable-pthreads disable pthreads [auto]
129 --disable-w32threads disable Win32 threads [auto]
130 --disable-os2threads disable OS/2 threads [auto]
131 --enable-x11grab enable X11 grabbing [no]
132 --disable-network disable network support [no]
133 --disable-dct disable DCT code
134 --disable-dwt disable DWT code
135 --disable-lsp disable LSP code
136 --disable-lzo disable LZO decoder code
137 --disable-mdct disable MDCT code
138 --disable-rdft disable RDFT code
139 --disable-fft disable FFT code
140 --enable-dxva2 enable DXVA2 code
141 --enable-vaapi enable VAAPI code [autodetect]
142 --enable-vda enable VDA code [autodetect]
143 --enable-vdpau enable VDPAU code [autodetect]
145 Individual component options:
146 --disable-everything disable all components listed below
147 --disable-encoder=NAME disable encoder NAME
148 --enable-encoder=NAME enable encoder NAME
149 --disable-encoders disable all encoders
150 --disable-decoder=NAME disable decoder NAME
151 --enable-decoder=NAME enable decoder NAME
152 --disable-decoders disable all decoders
153 --disable-hwaccel=NAME disable hwaccel NAME
154 --enable-hwaccel=NAME enable hwaccel NAME
155 --disable-hwaccels disable all hwaccels
156 --disable-muxer=NAME disable muxer NAME
157 --enable-muxer=NAME enable muxer NAME
158 --disable-muxers disable all muxers
159 --disable-demuxer=NAME disable demuxer NAME
160 --enable-demuxer=NAME enable demuxer NAME
161 --disable-demuxers disable all demuxers
162 --enable-parser=NAME enable parser NAME
163 --disable-parser=NAME disable parser NAME
164 --disable-parsers disable all parsers
165 --enable-bsf=NAME enable bitstream filter NAME
166 --disable-bsf=NAME disable bitstream filter NAME
167 --disable-bsfs disable all bitstream filters
168 --enable-protocol=NAME enable protocol NAME
169 --disable-protocol=NAME disable protocol NAME
170 --disable-protocols disable all protocols
171 --enable-indev=NAME enable input device NAME
172 --disable-indev=NAME disable input device NAME
173 --disable-indevs disable input devices
174 --enable-outdev=NAME enable output device NAME
175 --disable-outdev=NAME disable output device NAME
176 --disable-outdevs disable output devices
177 --disable-devices disable all devices
178 --enable-filter=NAME enable filter NAME
179 --disable-filter=NAME disable filter NAME
180 --disable-filters disable all filters
182 External library support:
183 --enable-avisynth enable reading of AVISynth script files [no]
184 --enable-bzlib enable bzlib [autodetect]
185 --enable-fontconfig enable fontconfig
186 --enable-frei0r enable frei0r video filtering
187 --enable-gnutls enable gnutls [no]
188 --enable-libaacplus enable AAC+ encoding via libaacplus [no]
189 --enable-libass enable libass subtitles rendering [no]
190 --enable-libbluray enable BluRay reading using libbluray [no]
191 --enable-libcaca enable textual display using libcaca
192 --enable-libcelt enable CELT decoding via libcelt [no]
193 --enable-libcdio enable audio CD grabbing with libcdio
194 --enable-libdc1394 enable IIDC-1394 grabbing using libdc1394
196 --enable-libfaac enable AAC encoding via libfaac [no]
197 --enable-libfdk-aac enable AAC encoding via libfdk-aac [no]
198 --enable-libflite enable flite (voice synthesis) support via libflite [no]
199 --enable-libfreetype enable libfreetype [no]
200 --enable-libgsm enable GSM de/encoding via libgsm [no]
201 --enable-libiec61883 enable iec61883 via libiec61883 [no]
202 --enable-libilbc enable iLBC de/encoding via libilbc [no]
203 --enable-libmodplug enable ModPlug via libmodplug [no]
204 --enable-libmp3lame enable MP3 encoding via libmp3lame [no]
205 --enable-libnut enable NUT (de)muxing via libnut,
206 native (de)muxer exists [no]
207 --enable-libopencore-amrnb enable AMR-NB de/encoding via libopencore-amrnb [no]
208 --enable-libopencore-amrwb enable AMR-WB decoding via libopencore-amrwb [no]
209 --enable-libopencv enable video filtering via libopencv [no]
210 --enable-libopenjpeg enable JPEG 2000 de/encoding via OpenJPEG [no]
211 --enable-libopus enable Opus decoding via libopus [no]
212 --enable-libpulse enable Pulseaudio input via libpulse [no]
213 --enable-librtmp enable RTMP[E] support via librtmp [no]
214 --enable-libschroedinger enable Dirac de/encoding via libschroedinger [no]
215 --enable-libspeex enable Speex de/encoding via libspeex [no]
216 --enable-libstagefright-h264 enable H.264 decoding via libstagefright [no]
217 --enable-libtheora enable Theora encoding via libtheora [no]
218 --enable-libtwolame enable MP2 encoding via libtwolame [no]
219 --enable-libutvideo enable Ut Video encoding and decoding via libutvideo [no]
220 --enable-libv4l2 enable libv4l2/v4l-utils [no]
221 --enable-libvo-aacenc enable AAC encoding via libvo-aacenc [no]
222 --enable-libvo-amrwbenc enable AMR-WB encoding via libvo-amrwbenc [no]
223 --enable-libvorbis enable Vorbis en/decoding via libvorbis,
224 native implementation exists [no]
225 --enable-libvpx enable VP8 de/encoding via libvpx [no]
226 --enable-libx264 enable H.264 encoding via x264 [no]
227 --enable-libxavs enable AVS encoding via xavs [no]
228 --enable-libxvid enable Xvid encoding via xvidcore,
229 native MPEG-4/Xvid encoder exists [no]
230 --enable-openal enable OpenAL 1.1 capture support [no]
231 --enable-openssl enable openssl [no]
232 --enable-zlib enable zlib [autodetect]
234 Advanced options (experts only):
235 --cross-prefix=PREFIX use PREFIX for compilation tools [$cross_prefix]
236 --enable-cross-compile assume a cross-compiler is used
237 --sysroot=PATH root of cross-build tree
238 --sysinclude=PATH location of cross-build system headers
239 --target-os=OS compiler targets OS [$target_os]
240 --target-exec=CMD command to run executables on target
241 --target-path=DIR path to view of build directory on target
242 --toolchain=NAME set tool defaults according to NAME
243 --nm=NM use nm tool NM [$nm_default]
244 --ar=AR use archive tool AR [$ar_default]
245 --as=AS use assembler AS [$as_default]
246 --yasmexe=EXE use yasm-compatible assembler EXE [$yasmexe_default]
247 --cc=CC use C compiler CC [$cc_default]
248 --cxx=CXX use C compiler CXX [$cxx_default]
249 --dep-cc=DEPCC use dependency generator DEPCC [$cc_default]
250 --ld=LD use linker LD [$ld_default]
251 --host-cc=HOSTCC use host C compiler HOSTCC
252 --host-cflags=HCFLAGS use HCFLAGS when compiling for host
253 --host-ld=HOSTLD use host linker HOSTLD
254 --host-ldflags=HLDFLAGS use HLDFLAGS when linking for host
255 --host-libs=HLIBS use libs HLIBS when linking for host
256 --host-os=OS compiler host OS [$target_os]
257 --extra-cflags=ECFLAGS add ECFLAGS to CFLAGS [$CFLAGS]
258 --extra-cxxflags=ECFLAGS add ECFLAGS to CXXFLAGS [$CXXFLAGS]
259 --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]
260 --extra-libs=ELIBS add ELIBS [$ELIBS]
261 --extra-version=STRING version string suffix []
262 --optflags=OPTFLAGS override optimization-related compiler flags
263 --build-suffix=SUFFIX library name suffix []
264 --malloc-prefix=PREFIX prefix malloc and related names with PREFIX
265 --progs-suffix=SUFFIX program name suffix []
266 --arch=ARCH select architecture [$arch]
267 --cpu=CPU select the minimum required CPU (affects
268 instruction selection, may crash on older CPUs)
269 --enable-pic build position-independent code
270 --enable-sram allow use of on-chip SRAM
271 --enable-thumb compile for Thumb instruction set
272 --disable-symver disable symbol versioning
273 --enable-hardcoded-tables use hardcoded tables instead of runtime generation
274 --disable-safe-bitstream-reader
275 disable buffer boundary checking in bitreaders
276 (faster, but may crash)
277 --enable-memalign-hack emulate memalign, interferes with memory debuggers
278 --enable-lto use link-time optimization
280 Optimization options (experts only):
281 --disable-asm disable all assembler optimizations
282 --disable-altivec disable AltiVec optimizations
283 --disable-amd3dnow disable 3DNow! optimizations
284 --disable-amd3dnowext disable 3DNow! extended optimizations
285 --disable-mmx disable MMX optimizations
286 --disable-mmxext disable MMXEXT optimizations
287 --disable-sse disable SSE optimizations
288 --disable-sse2 disable SSE2 optimizations
289 --disable-sse3 disable SSE3 optimizations
290 --disable-ssse3 disable SSSE3 optimizations
291 --disable-sse4 disable SSE4 optimizations
292 --disable-sse42 disable SSE4.2 optimizations
293 --disable-avx disable AVX optimizations
294 --disable-fma4 disable FMA4 optimizations
295 --disable-armv5te disable armv5te optimizations
296 --disable-armv6 disable armv6 optimizations
297 --disable-armv6t2 disable armv6t2 optimizations
298 --disable-armvfp disable ARM VFP optimizations
299 --disable-neon disable NEON optimizations
300 --disable-vis disable VIS optimizations
301 --disable-inline-asm disable use of inline assembler
302 --disable-yasm disable use of yasm assembler
303 --disable-mips32r2 disable MIPS32R2 optimizations
304 --disable-mipsdspr1 disable MIPS DSP ASE R1 optimizations
305 --disable-mipsdspr2 disable MIPS DSP ASE R2 optimizations
306 --disable-mipsfpu disable floating point MIPS optimizations
307 --disable-fast-unaligned consider unaligned accesses slow
308 --postproc-version=V build libpostproc version V.
309 Where V can be '$ALT_PP_VER_MAJOR.$ALT_PP_VER_MINOR.$ALT_PP_VER_MICRO' or 'current'. [$postproc_version_default]
311 Developer options (useful when working on FFmpeg itself):
312 --enable-coverage build with test coverage instrumentation
313 --disable-debug disable debugging symbols
314 --enable-debug=LEVEL set the debug level [$debuglevel]
315 --disable-optimizations disable compiler optimizations
316 --enable-extra-warnings enable more compiler warnings
317 --disable-stripping disable stripping of executables and shared libraries
318 --assert-level=level 0(default), 1 or 2, amount of assertion testing,
319 2 causes a slowdown at runtime.
320 --enable-memory-poisoning fill heap uninitialized allocated space with arbitrary data
321 --valgrind=VALGRIND run "make fate" tests through valgrind to detect memory
322 leaks and errors, using the specified valgrind binary.
323 Cannot be combined with --target-exec
324 --enable-ftrapv Trap arithmetic overflows
325 --samples=PATH location of test samples for FATE, if not set use
326 \$FATE_SAMPLES at make invocation time.
327 --enable-xmm-clobber-test check XMM registers for clobbering (Win64-only;
328 should be used only for debugging purposes)
329 --enable-random randomly enable/disable components
331 --enable-random=LIST randomly enable/disable specific components or
332 --disable-random=LIST component groups. LIST is a comma-separated list
333 of NAME[:PROB] entries where NAME is a component
334 (group) and PROB the probability associated with
336 --random-seed=VALUE seed value for --enable/disable-random
338 NOTE: Object files are built at the place where configure is launched.
346 echo "$@" >> $logfile
351 pr -n -t $1 >> $logfile
362 WARNINGS="${WARNINGS}WARNING: $*\n"
369 If you think configure made a mistake, make sure you are using the latest
370 version from Git. If the latest version fails, report the problem to the
371 ffmpeg-user@ffmpeg.org mailing list or IRC #ffmpeg on irc.freenode.net.
373 if disabled logging; then
375 Rerun configure with logging enabled (do not use --disable-logging), and
376 include the log this produces with your report.
380 Include the log file "$logfile" produced by configure as this will help
387 # Avoid locale weirdness, besides we really just want to translate ASCII.
389 echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
393 echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
397 echo "$*" | sed 's/["\\]/\\\0/g'
401 v=$(echo "$1" | sed "s/'/'\\\\''/g")
402 test "x$v" = "x${v#*[!A-Za-z0-9_/.+-]}" || v="'$v'"
407 echo "$@" | sed 's/^ *//;s/ */ /g;s/ *$//'
414 eval "case $v in $pat) echo $v ;; esac"
422 eval "case $v in $pat) ;; *) echo $v ;; esac"
429 for v; do eval $m; done
435 for v; do echo ${v}${suffix}; done
450 eval : \${$var:=$value}
457 eval $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')='$*'
461 eval echo \$$(echo "$1" | sed 's/[^A-Za-z0-9_]/_/g')
466 eval level=\${${var}_level:=0}
467 eval ${var}_${level}="\$$var"
468 eval ${var}_level=$(($level+1))
474 eval level=\${${var}_level:-0}
475 test $level = 0 && continue
476 eval level=$(($level-1))
477 eval $var="\${${var}_${level}}"
478 eval ${var}_level=$level
479 eval unset ${var}_${level}
501 enable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
507 disable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
513 enabled $var && continue
514 eval sel="\$${var}_select"
515 eval sgs="\$${var}_suggest"
519 enable_deep_weak $sgs
535 test "${1#!}" = "$1" && op== || op=!=
536 eval test "x\$${1#!}" $op "xyes"
540 test "${1#!}" = "$1" && op== || op=!=
541 eval test "x\$${1#!}" $op "xno"
546 enabled $opt || return 1
552 disabled $opt || return 1
558 enabled $opt && return 0
564 disabled $opt && return 0
571 eval : \${$opt:=\$${opt}_default}
579 [ $var = $value ] && return 0
587 enabled ${cfg}_checking && die "Circular dependency for $cfg."
588 disabled ${cfg}_checking && continue
589 enable ${cfg}_checking
591 eval dep_all="\$${cfg}_deps"
592 eval dep_any="\$${cfg}_deps_any"
593 eval dep_sel="\$${cfg}_select"
594 eval dep_sgs="\$${cfg}_suggest"
595 eval dep_ifa="\$${cfg}_if"
596 eval dep_ifn="\$${cfg}_if_any"
598 pushvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
599 check_deps $dep_all $dep_any $dep_sel $dep_sgs $dep_ifa $dep_ifn
600 popvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
602 [ -n "$dep_ifa" ] && { enabled_all $dep_ifa && enable_weak $cfg; }
603 [ -n "$dep_ifn" ] && { enabled_any $dep_ifn && enable_weak $cfg; }
604 enabled_all $dep_all || disable $cfg
605 enabled_any $dep_any || disable $cfg
606 disabled_any $dep_sel && disable $cfg
608 if enabled $cfg; then
609 eval dep_extralibs="\$${cfg}_extralibs"
610 test -n "$dep_extralibs" && add_extralibs $dep_extralibs
612 enable_deep_weak $dep_sgs
615 disable ${cfg}_checking
623 map 'eval echo "$v \${$v:-no}"' "$@" |
624 awk "BEGIN { split(\"$files\", files) }
626 c = \"$pfx\" toupper(\$1);
632 if (file ~ /\\.h\$/) {
633 printf(\"#define %s %d\\n\", c, v) >>file;
634 } else if (file ~ /\\.asm\$/) {
635 printf(\"%%define %s %d\\n\", c, v) >>file;
636 } else if (file ~ /\\.mak\$/) {
637 n = -v ? \"\" : \"!\";
638 printf(\"%s%s=yes\\n\", n, c) >>file;
648 enabled $v && printf "%s\n" ${v%$suf};
655 eval "$var=\"\$$var $*\""
661 eval "$var=\"$* \$$var\""
669 append CFLAGS $($cflags_filter "$@")
673 append CXXFLAGS $($cflags_filter "$@")
677 append ASFLAGS $($asflags_filter "$@")
681 append LDFLAGS $($ldflags_filter "$@")
685 prepend extralibs $($ldflags_filter "$@")
689 append host_cflags $($host_cflags_filter "$@")
693 append host_ldflags $($host_ldflags_filter "$@")
697 append compat_objs $1
699 map 'add_cppflags -D$v' "$@"
704 "$@" >> $logfile 2>&1
708 eval printf '%s\\n' $CC_O
712 eval printf '%s\\n' $CC_E
719 check_cmd $cc $CPPFLAGS $CFLAGS "$@" $CC_C $(cc_o $TMPO) $TMPC
726 check_cmd $cxx $CPPFLAGS $CFLAGS $CXXFLAGS "$@" $CXX_C -o $TMPO $TMPCPP
733 check_cmd $cc $CPPFLAGS $CFLAGS "$@" $(cc_e $TMPO) $TMPC
737 eval printf '%s\\n' $AS_O
744 check_cmd $as $CPPFLAGS $ASFLAGS "$@" $AS_C $(as_o $TMPO) $TMPC
748 log check_inline_asm "$@"
753 check_as "$@" <<EOF && enable $name
754 void foo(void){ __asm__ volatile($code); }
763 check_cmd $yasmexe $YASMFLAGS -Werror "$@" -o $TMPO $TMPS
767 eval printf '%s\\n' $LD_O
774 flags=$(filter_out '-l*' $@)
775 libs=$(filter '-l*' $@)
776 check_$type $($cflags_filter $flags) || return
777 flags=$($ldflags_filter $flags)
778 libs=$($ldflags_filter $libs)
779 check_cmd $ld $LDFLAGS $flags $(ld_o $TMPE) $TMPO $libs $extralibs
789 for hdr in $headers; do
790 echo "#include <$hdr>"
792 echo "int main(void) { $code; return 0; }"
793 } | check_$check "$@"
797 log check_cppflags "$@"
798 check_cc "$@" <<EOF && append CPPFLAGS "$@"
804 log check_cflags "$@"
805 set -- $($cflags_filter "$@")
806 check_cc "$@" <<EOF && append CFLAGS "$@"
812 log check_cxxflags "$@"
813 set -- $($cflags_filter "$@")
814 check_cxx "$@" <<EOF && append CXXFLAGS "$@"
820 log test_ldflags "$@"
821 check_ld "cc" "$@" <<EOF
822 int main(void){ return 0; }
827 log check_ldflags "$@"
828 test_ldflags "$@" && add_ldflags "$@"
832 log check_header "$@"
836 check_cpp "$@" <<EOF && enable_safe $header
847 check_ld "cc" "$@" <<EOF && enable $func
849 int main(void){ $func(); }
854 log check_mathfunc "$@"
858 test $narg = 2 && args="f, g" || args="f"
860 check_ld "cc" "$@" <<EOF && enable $func
862 float foo(float f, float g) { return $func($args); }
863 int main(void){ return (int) foo; }
867 check_func_headers(){
868 log check_func_headers "$@"
873 for hdr in $headers; do
874 echo "#include <$hdr>"
876 for func in $funcs; do
877 echo "long check_$func(void) { return (long) $func; }"
879 echo "int main(void) { return 0; }"
880 } | check_ld "cc" "$@" && enable $funcs && enable_safe $headers
883 check_class_headers_cpp(){
884 log check_class_headers_cpp "$@"
889 for hdr in $headers; do
890 echo "#include <$hdr>"
892 echo "int main(void) { "
894 for class in $classes; do
899 } | check_ld "cxx" "$@" && enable $funcs && enable_safe $headers
902 check_cpp_condition(){
903 log check_cpp_condition "$@"
910 #error "unsatisfied condition: $condition"
920 check_header $header && check_func $func "$@" && add_extralibs "$@"
928 check_func_headers "$headers" "$funcs" "$@" && add_extralibs "$@"
932 log check_lib_cpp "$@"
936 check_class_headers_cpp "$headers" "$classes" "$@" && add_extralibs "$@"
940 log check_pkg_config "$@"
945 $pkg_config --exists $pkg 2>/dev/null || return
946 pkg_cflags=$($pkg_config --cflags $pkg)
947 pkg_libs=$($pkg_config --libs $pkg)
948 check_func_headers "$headers" "$funcs" $pkg_cflags $pkg_libs "$@" &&
949 set_safe ${pkg}_cflags $pkg_cflags &&
950 set_safe ${pkg}_libs $pkg_libs
954 check_ld "cc" "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
960 # exit() is not async signal safe. _Exit (C99) and _exit (POSIX)
961 # are safe but may not be available everywhere. Thus we use
962 # raise(SIGTERM) instead. The check is run in a subshell so we
963 # can redirect the "Terminated" message from the shell. SIGBUS
964 # is not defined by standard C so it is used conditionally.
966 (check_exec "$@") >> $logfile 2>&1 <<EOF
968 static void sighandler(int sig){
974 int (*func_ptr)(void) = func;
976 signal(SIGILL, sighandler);
977 signal(SIGFPE, sighandler);
978 signal(SIGSEGV, sighandler);
980 signal(SIGBUS, sighandler);
993 check_code cc "$headers" "$type v" "$@" && enable_safe "$type"
1002 disable_safe "${struct}_${member}"
1003 check_code cc "$headers" "const void *p = &(($struct *)0)->$member" "$@" &&
1004 enable_safe "${struct}_${member}"
1012 check_lib $header $func "$@" || die "ERROR: $name not found"
1020 check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
1028 check_lib_cpp "$headers" "$classes" "$@" || die "ERROR: $name not found"
1031 require_pkg_config(){
1033 check_pkg_config "$@" || die "ERROR: $pkg not found"
1034 add_cflags $(get_safe ${pkg}_cflags)
1035 add_extralibs $(get_safe ${pkg}_libs)
1039 eval printf '%s\\n' $HOSTCC_O
1043 log check_host_cc "$@"
1046 check_cmd $host_cc $host_cflags "$@" $HOSTCC_C $(hostcc_o $TMPO) $TMPC
1049 check_host_cflags(){
1050 log check_host_cflags "$@"
1051 set -- $($host_cflags_filter "$@")
1052 check_host_cc "$@" <<EOF && append host_cflags "$@"
1060 "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
1064 cmp -s "$1" "$2" && echo "$2 is unchanged" && return
1065 mkdir -p "$(dirname $2)"
1069 # CONFIG_LIST contains configurable options, while HAVE_LIST is for
1070 # system-dependent things.
1125 incompatible_fork_abi
1177 safe_bitstream_reader
1269 incompatible_fork_abi
1301 $(add_suffix _external $ARCH_EXT_LIST)
1302 $(add_suffix _inline $ARCH_EXT_LIST)
1323 dev_bktr_ioctl_bt848_h
1324 dev_bktr_ioctl_meteor_h
1326 dev_video_bktr_ioctl_bt848_h
1327 dev_video_meteor_ioctl_meteor_h
1343 GetProcessAffinityMask
1344 GetProcessMemoryInfo
1346 GetSystemTimeAsFileTime
1356 jack_port_get_latency_range
1366 machine_ioctl_bt848_h
1367 machine_ioctl_meteor_h
1396 struct_group_source_req
1397 struct_ip_mreq_source
1400 struct_rusage_ru_maxrss
1401 struct_sctp_event_subscribe
1403 struct_sockaddr_sa_len
1404 struct_sockaddr_storage
1405 struct_v4l2_frmivalenum_discrete
1430 # options emitted with CONFIG_ prefix but not available on command line
1529 # code dependency declarations
1531 # architecture extensions
1541 mips32r2_deps="mips"
1542 mipsdspr1_deps="mips"
1543 mipsdspr2_deps="mips"
1550 x86_64_suggest="cmov fast_cmov"
1553 amd3dnowext_deps="amd3dnow"
1565 mmx_external_deps="yasm"
1566 mmx_inline_deps="inline_asm"
1567 mmx_suggest="mmx_external mmx_inline"
1569 for ext in $(filter_out mmx $ARCH_EXT_LIST_X86); do
1570 eval dep=\$${ext}_deps
1571 eval ${ext}_external_deps='"${dep}_external"'
1572 eval ${ext}_inline_deps='"${dep}_inline"'
1573 eval ${ext}_suggest='"${ext}_external ${ext}_inline"'
1576 aligned_stack_if_any="ppc x86"
1577 fast_64bit_if_any="alpha ia64 mips64 parisc64 ppc64 sparc64 x86_64"
1578 fast_clz_if_any="alpha armv5te avr32 mips ppc x86"
1579 fast_unaligned_if_any="armv6 ppc x86"
1581 inline_asm_deps="!tms470"
1582 need_memalign="altivec neon sse"
1584 symver_if_any="symver_asm_label symver_gnu_asm"
1592 mpegaudio_select="mpegaudiodsp"
1593 mpegaudiodsp_select="dct"
1594 mpegvideoenc_select="mpegvideo"
1596 # decoders / encoders / hardware accelerators
1597 aac_decoder_select="mdct sinewin"
1598 aac_encoder_select="mdct sinewin"
1599 aac_latm_decoder_select="aac_decoder aac_latm_parser"
1600 ac3_decoder_select="mdct ac3dsp ac3_parser"
1601 ac3_encoder_select="mdct ac3dsp"
1602 ac3_fixed_encoder_select="mdct ac3dsp"
1603 alac_encoder_select="lpc"
1604 amrnb_decoder_select="lsp"
1605 amrwb_decoder_select="lsp"
1606 amv_encoder_select="aandcttables"
1607 atrac1_decoder_select="mdct sinewin"
1608 atrac3_decoder_select="mdct"
1609 binkaudio_dct_decoder_select="mdct rdft dct sinewin"
1610 binkaudio_rdft_decoder_select="mdct rdft sinewin"
1611 cavs_decoder_select="golomb mpegvideo"
1612 comfortnoise_encoder_select="lpc"
1613 cook_decoder_select="mdct sinewin"
1614 cscd_decoder_select="lzo"
1615 cscd_decoder_suggest="zlib"
1616 dca_decoder_select="mdct"
1617 dirac_decoder_select="dwt golomb"
1618 dnxhd_encoder_select="aandcttables mpegvideoenc"
1619 dxa_decoder_select="zlib"
1620 eac3_decoder_select="ac3_decoder"
1621 eac3_encoder_select="ac3_encoder"
1622 eamad_decoder_select="aandcttables error_resilience mpegvideo"
1623 eatgq_decoder_select="aandcttables"
1624 eatqi_decoder_select="aandcttables error_resilience mpegvideo"
1625 exr_decoder_select="zlib"
1626 ffv1_decoder_select="golomb rangecoder"
1627 ffv1_encoder_select="rangecoder"
1628 ffvhuff_encoder_select="huffman"
1629 flac_decoder_select="golomb"
1630 flac_encoder_select="golomb lpc"
1631 flashsv_decoder_select="zlib"
1632 flashsv_encoder_select="zlib"
1633 flashsv2_encoder_select="zlib"
1634 flashsv2_decoder_select="zlib"
1635 flv_decoder_select="h263_decoder"
1636 flv_encoder_select="h263_encoder"
1637 fraps_decoder_select="huffman"
1638 h261_decoder_select="error_resilience mpegvideo"
1639 h261_encoder_select="aandcttables mpegvideoenc"
1640 h263_decoder_select="error_resilience h263_parser mpegvideo"
1641 h263_encoder_select="aandcttables error_resilience mpegvideoenc"
1642 h263_vaapi_hwaccel_select="vaapi h263_decoder"
1643 h263i_decoder_select="h263_decoder"
1644 h263p_encoder_select="h263_encoder"
1645 h264_crystalhd_decoder_select="crystalhd h264_mp4toannexb_bsf h264_parser"
1646 h264_decoder_select="error_resilience golomb h264chroma h264dsp h264pred h264qpel mpegvideo"
1647 h264_dxva2_hwaccel_deps="dxva2api_h"
1648 h264_dxva2_hwaccel_select="dxva2 h264_decoder"
1649 h264_vaapi_hwaccel_select="vaapi h264_decoder"
1650 h264_vda_decoder_select="vda h264_parser h264_decoder"
1651 h264_vda_hwaccel_deps="VideoDecodeAcceleration_VDADecoder_h pthreads"
1652 h264_vda_hwaccel_select="vda h264_decoder"
1653 h264_vdpau_decoder_select="vdpau h264_decoder"
1654 huffyuv_encoder_select="huffman"
1655 iac_decoder_select="fft mdct sinewin"
1656 imc_decoder_select="fft mdct sinewin"
1657 jpegls_decoder_select="golomb"
1658 jpegls_encoder_select="golomb"
1659 ljpeg_encoder_select="aandcttables mpegvideoenc"
1660 loco_decoder_select="golomb"
1661 mdec_decoder_select="error_resilience mpegvideo"
1662 mjpeg_encoder_select="aandcttables mpegvideoenc"
1663 mlp_decoder_select="mlp_parser"
1664 mp1_decoder_select="mpegaudio"
1665 mp1float_decoder_select="mpegaudio"
1666 mp2_decoder_select="mpegaudio"
1667 mp2float_decoder_select="mpegaudio"
1668 mp3_decoder_select="mpegaudio"
1669 mp3adu_decoder_select="mpegaudio"
1670 mp3adufloat_decoder_select="mpegaudio"
1671 mp3float_decoder_select="mpegaudio"
1672 mp3on4_decoder_select="mpegaudio"
1673 mp3on4float_decoder_select="mpegaudio"
1674 mpc7_decoder_select="mpegaudiodsp"
1675 mpc8_decoder_select="mpegaudiodsp"
1676 mpeg_vdpau_decoder_select="vdpau mpegvideo_decoder"
1677 mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h"
1678 mpeg_xvmc_decoder_select="mpegvideo_decoder"
1679 mpeg1_vdpau_decoder_select="vdpau mpeg1video_decoder"
1680 mpeg1_vdpau_hwaccel_select="vdpau mpeg1video_decoder"
1681 mpeg1video_decoder_select="error_resilience mpegvideo"
1682 mpeg1video_encoder_select="aandcttables error_resilience mpegvideoenc"
1683 mpeg2_crystalhd_decoder_select="crystalhd"
1684 mpeg2_dxva2_hwaccel_deps="dxva2api_h"
1685 mpeg2_dxva2_hwaccel_select="dxva2 mpeg2video_decoder"
1686 mpeg2_vdpau_hwaccel_select="vdpau mpeg2video_decoder"
1687 mpeg2_vaapi_hwaccel_select="vaapi mpeg2video_decoder"
1688 mpeg2video_decoder_select="error_resilience mpegvideo"
1689 mpeg2video_encoder_select="aandcttables error_resilience mpegvideoenc"
1690 mpeg4_crystalhd_decoder_select="crystalhd"
1691 mpeg4_decoder_select="h263_decoder mpeg4video_parser"
1692 mpeg4_encoder_select="h263_encoder"
1693 mpeg4_vaapi_hwaccel_select="vaapi mpeg4_decoder"
1694 mpeg4_vdpau_decoder_select="vdpau mpeg4_decoder"
1695 msmpeg4_crystalhd_decoder_select="crystalhd"
1696 msmpeg4v1_decoder_select="h263_decoder"
1697 msmpeg4v1_encoder_select="h263_encoder"
1698 msmpeg4v2_decoder_select="h263_decoder"
1699 msmpeg4v2_encoder_select="h263_encoder"
1700 msmpeg4v3_decoder_select="h263_decoder"
1701 msmpeg4v3_encoder_select="h263_encoder"
1702 mss2_decoder_select="vc1_decoder"
1703 nellymoser_decoder_select="mdct sinewin"
1704 nellymoser_encoder_select="mdct sinewin"
1705 nuv_decoder_select="lzo"
1706 png_decoder_select="zlib"
1707 png_encoder_select="zlib"
1708 qcelp_decoder_select="lsp"
1709 qdm2_decoder_select="mdct rdft mpegaudiodsp"
1710 ra_144_encoder_select="lpc"
1711 ralf_decoder_select="golomb"
1712 rv10_decoder_select="h263_decoder"
1713 rv10_encoder_select="h263_encoder"
1714 rv20_decoder_select="h263_decoder"
1715 rv20_encoder_select="h263_encoder"
1716 rv30_decoder_select="error_resilience golomb h264chroma h264pred h264qpel mpegvideo"
1717 rv40_decoder_select="error_resilience golomb h264chroma h264pred h264qpel mpegvideo"
1718 shorten_decoder_select="golomb"
1719 sipr_decoder_select="lsp"
1720 snow_decoder_select="dwt rangecoder"
1721 snow_encoder_select="aandcttables dwt error_resilience mpegvideoenc rangecoder"
1722 sonic_decoder_select="golomb"
1723 sonic_encoder_select="golomb"
1724 sonic_ls_encoder_select="golomb"
1725 svq1_decoder_select="error_resilience mpegvideo"
1726 svq1_encoder_select="aandcttables error_resilience mpegvideoenc"
1727 svq3_decoder_select="error_resilience golomb h264chroma h264dsp h264pred h264qpel mpegvideo"
1728 svq3_decoder_suggest="zlib"
1729 theora_decoder_select="vp3_decoder"
1730 tiff_decoder_suggest="zlib"
1731 tiff_encoder_suggest="zlib"
1732 truehd_decoder_select="mlp_parser"
1733 tscc_decoder_select="zlib"
1734 twinvq_decoder_select="mdct lsp sinewin"
1735 utvideo_encoder_select="huffman"
1736 vc1_crystalhd_decoder_select="crystalhd"
1737 vc1_decoder_select="h263_decoder h264chroma h264qpel"
1738 vc1_dxva2_hwaccel_deps="dxva2api_h"
1739 vc1_dxva2_hwaccel_select="dxva2 vc1_decoder"
1740 vc1_vaapi_hwaccel_select="vaapi vc1_decoder"
1741 vc1_vdpau_decoder_select="vdpau vc1_decoder"
1742 vc1image_decoder_select="vc1_decoder"
1743 vorbis_decoder_select="mdct"
1744 vorbis_encoder_select="mdct"
1745 vp3_decoder_select="vp3dsp"
1746 vp5_decoder_select="vp3dsp"
1747 vp6_decoder_select="huffman vp3dsp"
1748 vp6a_decoder_select="vp6_decoder"
1749 vp6f_decoder_select="vp6_decoder"
1750 vp8_decoder_select="h264pred h264qpel"
1751 wmapro_decoder_select="mdct sinewin"
1752 wmav1_decoder_select="mdct sinewin"
1753 wmav1_encoder_select="mdct sinewin"
1754 wmav2_decoder_select="mdct sinewin"
1755 wmav2_encoder_select="mdct sinewin"
1756 wmavoice_decoder_select="lsp rdft dct mdct sinewin"
1757 wmv1_decoder_select="h263_decoder"
1758 wmv1_encoder_select="h263_encoder"
1759 wmv2_decoder_select="h263_decoder"
1760 wmv2_encoder_select="h263_encoder"
1761 wmv3_decoder_select="vc1_decoder"
1762 wmv3_crystalhd_decoder_select="crystalhd"
1763 wmv3_dxva2_hwaccel_select="vc1_dxva2_hwaccel"
1764 wmv3_vaapi_hwaccel_select="vc1_vaapi_hwaccel"
1765 wmv3_vdpau_decoder_select="vc1_vdpau_decoder"
1766 wmv3image_decoder_select="wmv3_decoder"
1767 zerocodec_decoder_select="zlib"
1768 zlib_decoder_select="zlib"
1769 zlib_encoder_select="zlib"
1770 zmbv_decoder_select="zlib"
1771 zmbv_encoder_select="zlib"
1773 crystalhd_deps="libcrystalhd_libcrystalhd_if_h"
1774 vaapi_deps="va_va_h"
1775 vda_deps="VideoDecodeAcceleration_VDADecoder_h pthreads"
1776 vdpau_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1779 h264_parser_select="error_resilience golomb h264dsp h264pred mpegvideo"
1780 mpeg4video_parser_select="error_resilience mpegvideo"
1781 mpegvideo_parser_select="error_resilience mpegvideo"
1782 vc1_parser_select="error_resilience mpegvideo"
1784 # external libraries
1785 libaacplus_encoder_deps="libaacplus"
1786 libcelt_decoder_deps="libcelt"
1787 libfaac_encoder_deps="libfaac"
1788 libfdk_aac_encoder_deps="libfdk_aac"
1789 libgsm_decoder_deps="libgsm"
1790 libgsm_encoder_deps="libgsm"
1791 libgsm_ms_decoder_deps="libgsm"
1792 libgsm_ms_encoder_deps="libgsm"
1793 libilbc_decoder_deps="libilbc"
1794 libilbc_encoder_deps="libilbc"
1795 libmodplug_demuxer_deps="libmodplug"
1796 libmp3lame_encoder_deps="libmp3lame"
1797 libopencore_amrnb_decoder_deps="libopencore_amrnb"
1798 libopencore_amrnb_encoder_deps="libopencore_amrnb"
1799 libopencore_amrwb_decoder_deps="libopencore_amrwb"
1800 libopenjpeg_decoder_deps="libopenjpeg"
1801 libopenjpeg_encoder_deps="libopenjpeg"
1802 libopus_decoder_deps="libopus"
1803 libopus_encoder_deps="libopus"
1804 libschroedinger_decoder_deps="libschroedinger"
1805 libschroedinger_encoder_deps="libschroedinger"
1806 libspeex_decoder_deps="libspeex"
1807 libspeex_encoder_deps="libspeex"
1808 libstagefright_h264_decoder_deps="libstagefright_h264"
1809 libtheora_encoder_deps="libtheora"
1810 libtwolame_encoder_deps="libtwolame"
1811 libvo_aacenc_encoder_deps="libvo_aacenc"
1812 libvo_amrwbenc_encoder_deps="libvo_amrwbenc"
1813 libvorbis_decoder_deps="libvorbis"
1814 libvorbis_encoder_deps="libvorbis"
1815 libvpx_decoder_deps="libvpx"
1816 libvpx_encoder_deps="libvpx"
1817 libx264_encoder_deps="libx264"
1818 libx264rgb_encoder_deps="libx264"
1819 libxavs_encoder_deps="libxavs"
1820 libxvid_encoder_deps="libxvid"
1821 libutvideo_decoder_deps="libutvideo"
1822 libutvideo_encoder_deps="libutvideo"
1825 ac3_demuxer_select="ac3_parser"
1826 asf_stream_muxer_select="asf_muxer"
1827 avisynth_demuxer_deps="avisynth"
1828 dirac_demuxer_select="dirac_parser"
1829 dts_demuxer_select="dca_parser"
1830 dtshd_demuxer_select="dca_parser"
1831 eac3_demuxer_select="ac3_parser"
1832 f4v_muxer_select="mov_muxer"
1833 flac_demuxer_select="flac_parser"
1834 ipod_muxer_select="mov_muxer"
1835 libnut_demuxer_deps="libnut"
1836 libnut_muxer_deps="libnut"
1837 matroska_audio_muxer_select="matroska_muxer"
1838 matroska_demuxer_suggest="bzlib lzo zlib"
1839 mov_demuxer_suggest="zlib"
1840 mp3_demuxer_select="mpegaudio_parser"
1841 mp4_muxer_select="mov_muxer"
1842 mpegts_muxer_select="adts_muxer latm_muxer mpegvideo"
1843 mpegtsraw_demuxer_select="mpegts_demuxer"
1844 mxf_d10_muxer_select="mxf_muxer"
1845 ogg_demuxer_select="golomb"
1846 psp_muxer_select="mov_muxer"
1847 rtp_demuxer_select="sdp_demuxer"
1848 rtp_muxer_select="mpegvideo"
1849 rtpdec_select="asf_demuxer rm_demuxer rtp_protocol mpegts_demuxer mov_demuxer"
1850 rtsp_demuxer_select="http_protocol rtpdec"
1851 rtsp_muxer_select="rtp_muxer http_protocol rtp_protocol"
1852 sap_demuxer_select="sdp_demuxer"
1853 sap_muxer_select="rtp_muxer rtp_protocol"
1854 sdp_demuxer_select="rtpdec"
1855 smoothstreaming_muxer_select="ismv_muxer"
1856 spdif_muxer_select="aac_parser"
1857 tak_demuxer_select="tak_parser"
1858 tg2_muxer_select="mov_muxer"
1859 tgp_muxer_select="mov_muxer"
1860 w64_demuxer_deps="wav_demuxer"
1863 alsa_indev_deps="alsa_asoundlib_h snd_pcm_htimestamp"
1864 alsa_outdev_deps="alsa_asoundlib_h"
1865 bktr_indev_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
1866 caca_outdev_deps="libcaca"
1867 dshow_indev_deps="IBaseFilter"
1868 dshow_indev_extralibs="-lpsapi -lole32 -lstrmiids -luuid"
1869 dv1394_indev_deps="dv1394 dv_demuxer"
1870 fbdev_indev_deps="linux_fb_h"
1871 iec61883_indev_deps="libiec61883"
1872 jack_indev_deps="jack_jack_h sem_timedwait"
1873 lavfi_indev_deps="avfilter"
1874 libcdio_indev_deps="libcdio"
1875 libdc1394_indev_deps="libdc1394"
1876 libv4l2_indev_deps="libv4l2"
1877 openal_indev_deps="openal"
1878 oss_indev_deps_any="soundcard_h sys_soundcard_h"
1879 oss_outdev_deps_any="soundcard_h sys_soundcard_h"
1880 pulse_indev_deps="libpulse"
1881 sdl_outdev_deps="sdl"
1882 sndio_indev_deps="sndio_h"
1883 sndio_outdev_deps="sndio_h"
1884 v4l_indev_deps="linux_videodev_h"
1885 v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h"
1886 vfwcap_indev_deps="capCreateCaptureWindow vfwcap_defines"
1887 vfwcap_indev_extralibs="-lavicap32"
1888 x11grab_indev_deps="x11grab"
1891 bluray_protocol_deps="libbluray"
1892 ffrtmpcrypt_protocol_deps="!librtmp_protocol"
1893 ffrtmpcrypt_protocol_deps_any="gcrypt nettle openssl"
1894 ffrtmpcrypt_protocol_select="tcp_protocol"
1895 ffrtmphttp_protocol_deps="!librtmp_protocol"
1896 ffrtmphttp_protocol_select="http_protocol"
1897 gopher_protocol_deps="network"
1898 httpproxy_protocol_deps="network"
1899 httpproxy_protocol_select="tcp_protocol"
1900 http_protocol_deps="network"
1901 http_protocol_select="tcp_protocol"
1902 https_protocol_select="tls_protocol"
1903 librtmp_protocol_deps="librtmp"
1904 librtmpe_protocol_deps="librtmp"
1905 librtmps_protocol_deps="librtmp"
1906 librtmpt_protocol_deps="librtmp"
1907 librtmpte_protocol_deps="librtmp"
1908 mmsh_protocol_select="http_protocol"
1909 mmst_protocol_deps="network"
1910 rtmp_protocol_deps="!librtmp_protocol"
1911 rtmp_protocol_select="tcp_protocol"
1912 rtmpe_protocol_select="ffrtmpcrypt_protocol"
1913 rtmps_protocol_deps="!librtmp_protocol"
1914 rtmps_protocol_select="tls_protocol"
1915 rtmpt_protocol_select="ffrtmphttp_protocol"
1916 rtmpte_protocol_select="ffrtmpcrypt_protocol ffrtmphttp_protocol"
1917 rtmpts_protocol_select="ffrtmphttp_protocol https_protocol"
1918 rtp_protocol_select="udp_protocol"
1919 sctp_protocol_deps="network struct_sctp_event_subscribe"
1920 tcp_protocol_deps="network"
1921 tls_protocol_deps_any="openssl gnutls"
1922 tls_protocol_select="tcp_protocol"
1923 udp_protocol_deps="network"
1926 aconvert_filter_deps="swresample"
1927 amovie_filter_deps="avcodec avformat"
1928 aresample_filter_deps="swresample"
1929 ass_filter_deps="libass"
1930 asyncts_filter_deps="avresample"
1931 atempo_filter_deps="avcodec rdft"
1932 blackframe_filter_deps="gpl"
1933 boxblur_filter_deps="gpl"
1934 colormatrix_filter_deps="gpl"
1935 cropdetect_filter_deps="gpl"
1936 decimate_filter_deps="gpl avcodec"
1937 delogo_filter_deps="gpl"
1938 deshake_filter_deps="avcodec"
1939 drawtext_filter_deps="libfreetype"
1940 ebur128_filter_deps="gpl"
1941 flite_filter_deps="libflite"
1942 frei0r_filter_deps="frei0r dlopen"
1943 frei0r_filter_extralibs='$ldl'
1944 frei0r_src_filter_deps="frei0r dlopen"
1945 frei0r_src_filter_extralibs='$ldl'
1946 geq_filter_deps="gpl"
1947 hqdn3d_filter_deps="gpl"
1948 hue_filter_deps="gpl"
1949 movie_filter_deps="avcodec avformat"
1950 mp_filter_deps="gpl avcodec swscale postproc inline_asm"
1951 mptestsrc_filter_deps="gpl"
1952 negate_filter_deps="lut_filter"
1953 resample_filter_deps="avresample"
1954 ocv_filter_deps="libopencv"
1955 pan_filter_deps="swresample"
1956 removelogo_filter_deps="avcodec avformat swscale"
1957 scale_filter_deps="swscale"
1958 smartblur_filter_deps="gpl swscale"
1959 showspectrum_filter_deps="avcodec rdft"
1960 super2xsai_filter_deps="gpl"
1961 tinterlace_filter_deps="gpl"
1962 yadif_filter_deps="gpl"
1963 pixfmts_super2xsai_test_deps="super2xsai_filter"
1964 tinterlace_merge_test_deps="tinterlace_filter"
1965 tinterlace_pad_test_deps="tinterlace_filter"
1968 avdevice_deps="avcodec avformat"
1969 avformat_deps="avcodec"
1973 ffmpeg_deps="avcodec avfilter avformat swscale swresample"
1974 ffmpeg_select="ffbuffersink_filter format_filter aformat_filter
1975 setpts_filter null_filter anull_filter ffabuffersink_filter"
1976 ffplay_deps="avcodec avformat swscale swresample sdl"
1977 ffplay_select="ffbuffersink_filter rdft crop_filter"
1978 ffprobe_deps="avcodec avformat"
1979 ffserver_deps="avformat ffm_muxer fork rtp_protocol rtsp_demuxer"
1980 ffserver_extralibs='$ldl'
1983 podpages_deps="perl"
1984 manpages_deps="perl pod2man"
1985 htmlpages_deps="texi2html"
1986 txtpages_deps="makeinfo"
1987 doc_deps_any="manpages htmlpages podpages txtpages"
1989 # default parameters
1991 logfile="config.log"
1993 # installation paths
1994 prefix_default="/usr/local"
1995 bindir_default='${prefix}/bin'
1996 datadir_default='${prefix}/share/ffmpeg'
1997 incdir_default='${prefix}/include'
1998 libdir_default='${prefix}/lib'
1999 mandir_default='${prefix}/share/man'
2000 shlibdir_default="$libdir_default"
2001 postproc_version_default="current"
2007 host_cc_default="gcc"
2013 pkg_config_default=pkg-config
2015 strip_default="strip"
2016 yasmexe_default="yasm"
2021 arch_default=$(uname -m)
2025 target_os_default=$(tolower $(uname -s))
2026 host_os=$target_os_default
2028 # alternative libpostproc version
2031 ALT_PP_VER_MICRO=101
2032 ALT_PP_VER=$ALT_PP_VER_MAJOR.$ALT_PP_VER_MINOR.$ALT_PP_VER_MICRO
2034 # configurable options
2035 enable $PROGRAM_LIST
2036 enable $DOCUMENT_LIST
2052 enable optimizations
2053 enable runtime_cpudetect
2054 enable safe_bitstream_reader
2056 enable swscale_alpha
2059 SHFLAGS='-shared -Wl,-soname,$$(@F)'
2060 FFSERVERLDFLAGS=-Wl,-E
2063 FULLNAME='$(NAME)$(BUILDSUF)'
2064 LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
2067 SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
2068 SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
2069 SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
2070 LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
2071 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'
2072 SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR) $(SLIBNAME)'
2092 host_cflags='-D_ISOC99_SOURCE -D_XOPEN_SOURCE=600 -O3 -g'
2094 host_cflags_filter=echo
2095 host_ldflags_filter=echo
2097 target_path='$(CURDIR)'
2099 # since the object filename is not given with the -MM flag, the compiler
2100 # is only able to print the basename, and we must add the path ourselves
2101 DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o," > $(@:.o=.d)'
2105 if test -f configure; then
2108 source_path=$(cd $(dirname "$0"); pwd)
2109 echo "$source_path" | grep -q '[[:blank:]]' &&
2110 die "Out of tree builds are impossible with whitespace in source path."
2111 test -e "$source_path/config.h" &&
2112 die "Out of tree builds are impossible with config.h in source dir."
2119 FFMPEG_CONFIGURATION="${FFMPEG_CONFIGURATION# } ${l}${r}"
2125 file=$source_path/$3
2126 sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
2129 ENCODER_LIST=$(find_things encoder ENC libavcodec/allcodecs.c)
2130 DECODER_LIST=$(find_things decoder DEC libavcodec/allcodecs.c)
2131 HWACCEL_LIST=$(find_things hwaccel HWACCEL libavcodec/allcodecs.c)
2132 PARSER_LIST=$(find_things parser PARSER libavcodec/allcodecs.c)
2133 BSF_LIST=$(find_things bsf BSF libavcodec/allcodecs.c)
2134 MUXER_LIST=$(find_things muxer _MUX libavformat/allformats.c)
2135 DEMUXER_LIST=$(find_things demuxer DEMUX libavformat/allformats.c)
2136 OUTDEV_LIST=$(find_things outdev OUTDEV libavdevice/alldevices.c)
2137 INDEV_LIST=$(find_things indev _IN libavdevice/alldevices.c)
2138 PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
2139 FILTER_LIST=$(find_things filter FILTER libavfilter/allfilters.c)
2155 for n in $COMPONENT_LIST; do
2156 v=$(toupper ${n%s})_LIST
2158 eval ${n}_if_any="\$$v"
2161 enable $ARCH_EXT_LIST
2164 echo "Unknown option \"$1\"."
2165 echo "See $0 --help for available options."
2172 echo $* | sed s/$suffix//g | tr ' ' '\n' | sort | pr -3 -t
2184 is_in ${comp} $COMPONENT_LIST && eval comp=\$$(toupper ${comp%s})_LIST
2185 echo "prob ${prob:-0.5}"
2193 random_seed=$(awk "BEGIN { srand($random_seed); print srand() }")
2194 $action $(rand_list "$@" | awk "BEGIN { srand($random_seed) } \$1 == \"prob\" { prob = \$2; next } rand() < prob { print }")
2200 --extra-ldflags=*) add_ldflags $optval
2202 --extra-libs=*) add_extralibs $optval
2204 --disable-devices) disable $INDEV_LIST $OUTDEV_LIST
2206 --enable-debug=*) debuglevel="$optval"
2209 disable $PROGRAM_LIST
2211 --disable-everything)
2212 map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
2214 --enable-random|--disable-random)
2215 action=${opt%%-random}
2216 do_random ${action#--} $COMPONENT_LIST
2218 --enable-random=*|--disable-random=*)
2219 action=${opt%%-random=*}
2220 do_random ${action#--} $optval
2222 --enable-*=*|--disable-*=*)
2223 eval $(echo "${opt%%=*}" | sed 's/--/action=/;s/-/ thing=/')
2224 is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt"
2225 eval list=\$$(toupper $thing)_LIST
2226 name=$(echo "${optval}" | sed "s/,/_${thing}|/g")_${thing}
2227 list=$(filter "$name" $list)
2228 [ "$list" = "" ] && warn "Option $opt did not match anything"
2231 --enable-?*|--disable-?*)
2232 eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
2233 if is_in $option $COMPONENT_LIST; then
2234 test $action = disable && action=unset
2235 eval $action \$$(toupper ${option%s})_LIST
2236 elif is_in $option $CMDLINE_SELECT; then
2243 NAME="${opt#--list-}"
2244 is_in $NAME $COMPONENT_LIST || die_unknown $opt
2246 eval show_list $NAME \$$(toupper $NAME)_LIST
2248 --help|-h) show_help
2250 --fatal-warnings) enable fatal_warnings
2253 optname="${opt%%=*}"
2254 optname="${optname#--}"
2255 optname=$(echo "$optname" | sed 's/-/_/g')
2256 if is_in $optname $CMDLINE_SET; then
2257 eval $optname='$optval'
2258 elif is_in $optname $CMDLINE_APPEND; then
2259 append $optname "$optval"
2267 disabled logging && logfile=/dev/null
2269 echo "# $0 $FFMPEG_CONFIGURATION" > $logfile
2272 test -n "$cross_prefix" && enable cross_compile
2274 if enabled cross_compile; then
2275 test -n "$arch" && test -n "$target_os" ||
2276 die "Must specify target arch and OS when cross-compiling"
2279 set_default postproc_version
2281 # Check if we should build alternative libpostproc version instead of current
2282 if test "$postproc_version" = $ALT_PP_VER; then
2283 LIBPOSTPROC_VERSION=$ALT_PP_VER
2284 LIBPOSTPROC_VERSION_MAJOR=$ALT_PP_VER_MAJOR
2285 LIBPOSTPROC_VERSION_MINOR=$ALT_PP_VER_MINOR
2286 LIBPOSTPROC_VERSION_MICRO=$ALT_PP_VER_MICRO
2287 elif test "$postproc_version" != current; then
2288 die "Invalid argument to --postproc-version. See --help output."
2291 ar_default="${cross_prefix}${ar_default}"
2292 cc_default="${cross_prefix}${cc_default}"
2293 cxx_default="${cross_prefix}${cxx_default}"
2294 nm_default="${cross_prefix}${nm_default}"
2295 pkg_config_default="${cross_prefix}${pkg_config_default}"
2296 ranlib="${cross_prefix}${ranlib}"
2297 strip_default="${cross_prefix}${strip_default}"
2299 sysinclude_default="${sysroot}/usr/include"
2301 case "$toolchain" in
2304 add_cflags -faddress-sanitizer
2305 add_ldflags -faddress-sanitizer
2309 add_cflags -fthread-sanitizer
2310 add_ldflags -fthread-sanitizer
2313 cc_default="c99wrap cl"
2314 ld_default="c99wrap link"
2315 nm_default="dumpbin -symbols"
2317 target_os_default="win32"
2320 die "Unknown toolchain $toolchain"
2324 set_default arch cc cxx pkg_config strip sysinclude target_os yasmexe
2325 enabled cross_compile || host_cc_default=$cc
2328 if ! $pkg_config --version >/dev/null 2>&1; then
2329 warn "$pkg_config not found, library detection may fail."
2335 mingw32*|win32|win64|cygwin*|*-dos|freedos|opendos|os/2*|symbian) echo .exe ;;
2339 EXESUF=$(exesuf $target_os)
2340 HOSTEXESUF=$(exesuf $host_os)
2342 # set temporary file name
2343 : ${TMPDIR:=$TEMPDIR}
2347 if ! check_cmd mktemp -u XXXXXX; then
2348 # simple replacement for missing mktemp
2349 # NOT SAFE FOR GENERAL USE
2351 echo "${2%%XXX*}.${HOSTNAME}.${UID}.$$"
2356 tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
2357 (set -C; exec > $tmp) 2>/dev/null ||
2358 die "Unable to create temporary file in $TMPDIR."
2359 append TMPFILES $tmp
2363 trap 'rm -f -- $TMPFILES' EXIT
2368 tmpfile TMPE $EXESUF
2379 # make sure we can execute files in $TMPDIR
2380 cat > $TMPSH 2>> $logfile <<EOF
2383 chmod +x $TMPSH >> $logfile 2>&1
2384 if ! $TMPSH >> $logfile 2>&1; then
2386 Unable to create and execute files in $TMPDIR. Set the TMPDIR environment
2387 variable to another directory and make sure that it is not mounted noexec.
2389 die "Sanity test failed."
2395 -fomit-frame-pointer) echo -Oy ;;
2397 -Wall) echo -W4 -wd4244 -wd4127 -wd4018 -wd4389 \
2398 -wd4146 -wd4057 -wd4204 -wd4706 -wd4305 \
2399 -wd4152 -wd4324 -we4013 -wd4100 -wd4214 \
2405 -fno-signed-zeros) ;;
2406 -lz) echo zlib.lib ;;
2407 -lavifil32) echo vfw32.lib ;;
2408 -lavicap32) echo vfw32.lib user32.lib ;;
2409 -l*) echo ${flag#-l}.lib ;;
2418 -flto) echo -Mipa=fast,libopt,libinline,vestigial ;;
2419 -fomit-frame-pointer) echo -Mnoframe ;;
2430 case "${flag#*=}" in
2431 native) echo -xtarget=native ;;
2432 v9|niagara) echo -xarch=sparc ;;
2433 ultrasparc) echo -xarch=sparcvis ;;
2434 ultrasparc3|niagara2) echo -xarch=sparcvis2 ;;
2435 i586|pentium) echo -xchip=pentium ;;
2436 i686|pentiumpro|pentium2) echo -xtarget=pentium_pro ;;
2437 pentium3*|c3-2) echo -xtarget=pentium3 ;;
2438 pentium-m) echo -xarch=sse2 -xchip=pentium3 ;;
2439 pentium4*) echo -xtarget=pentium4 ;;
2440 prescott|nocona) echo -xarch=sse3 -xchip=pentium4 ;;
2441 *-sse3) echo -xarch=sse3 ;;
2442 core2) echo -xarch=ssse3 -xchip=core2 ;;
2443 amdfam10|barcelona|bdver*) echo -xarch=sse4_1 ;;
2444 athlon-4|athlon-[mx]p) echo -xarch=ssea ;;
2445 k8|opteron|athlon64|athlon-fx)
2446 echo -xarch=sse2a ;;
2447 athlon*) echo -xarch=pentium_proa ;;
2450 -std=c99) echo -xc99 ;;
2451 -fomit-frame-pointer) echo -xregs=frameptr ;;
2452 -fPIC) echo -KPIC -xcode=pic32 ;;
2453 -W*,*) echo $flag ;;
2464 case "${flag#*=}" in
2465 armv7-a|cortex-a*) echo -mv=7a8 ;;
2466 armv7-r|cortex-r*) echo -mv=7r4 ;;
2467 armv7-m|cortex-m*) echo -mv=7m3 ;;
2468 armv6*|arm11*) echo -mv=6 ;;
2469 armv5*e|arm[79]*e*|arm9[24]6*|arm96*|arm102[26])
2471 armv4*|arm7*|arm9[24]*) echo -mv=4 ;;
2474 -mfpu=neon) echo --float_support=vfpv3 --neon ;;
2475 -mfpu=vfp) echo --float_support=vfpv2 ;;
2476 -mfpu=vfpv3) echo --float_support=vfpv3 ;;
2477 -mfpu=vfpv3-d16) echo --float_support=vfpv3d16 ;;
2478 -msoft-float) echo --float_support=vfplib ;;
2479 -O[0-3]|-mf=*) echo $flag ;;
2481 -pds=*) echo $flag ;;
2482 -D*|-I*) echo $flag ;;
2483 --gcc|--abi=*) echo $flag ;;
2493 unset _type _ident _cc_c _cc_e _cc_o _flags _cflags
2494 unset _ld_o _ldflags _ld_lib _ld_path
2495 unset _depflags _DEPCMD _DEPFLAGS
2498 if $_cc -v 2>&1 | grep -q '^gcc.*LLVM'; then
2500 gcc_extra_ver=$(expr "$($_cc --version | head -n1)" : '.*\((.*)\)')
2501 _ident="llvm-gcc $($_cc -dumpversion) $gcc_extra_ver"
2502 _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2505 elif $_cc -v 2>&1 | grep -qi ^gcc; then
2507 gcc_version=$($_cc --version | head -n1)
2508 gcc_basever=$($_cc -dumpversion)
2509 gcc_pkg_ver=$(expr "$gcc_version" : '[^ ]* \(([^)]*)\)')
2510 gcc_ext_ver=$(expr "$gcc_version" : ".*$gcc_pkg_ver $gcc_basever \\(.*\\)")
2511 _ident=$(cleanws "gcc $gcc_basever $gcc_pkg_ver $gcc_ext_ver")
2512 if ! $_cc -dumpversion | grep -q '^2\.'; then
2513 _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2517 elif $_cc --version 2>/dev/null | grep -q Intel; then
2519 _ident=$($_cc --version | head -n1)
2524 elif $_cc -v 2>&1 | grep -q xlc; then
2526 _ident=$($_cc -qversion 2>/dev/null | head -n1)
2528 _cflags_size='-O5 -qcompact'
2529 elif $_cc -V 2>/dev/null | grep -q Compaq; then
2531 _ident=$($_cc -V | head -n1 | cut -d' ' -f1-3)
2534 _ldflags='-Wl,-z,now' # calls to libots crash without this
2535 _cflags_speed='-fast'
2537 elif $_cc --vsn 2>/dev/null | grep -q "ARM C/C++ Compiler"; then
2538 test -d "$sysroot" || die "No valid sysroot specified."
2540 _ident=$($_cc --vsn | head -n1)
2541 armcc_conf="$PWD/armcc.conf"
2542 $_cc --arm_linux_configure \
2543 --arm_linux_config_file="$armcc_conf" \
2544 --configure_sysroot="$sysroot" \
2545 --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
2546 die "Error creating armcc configuration file."
2547 $_cc --vsn | grep -q RVCT && armcc_opt=rvct || armcc_opt=armcc
2548 _flags="--arm_linux_config_file=$armcc_conf --translate_gcc"
2549 as_default="${cross_prefix}gcc"
2553 elif $_cc -version 2>/dev/null | grep -Eq 'TMS470|TI ARM'; then
2555 _ident=$($_cc -version | head -n1 | tr -s ' ')
2556 _flags='--gcc --abi=eabi -me'
2559 _depflags='-ppa -ppd=$(@:.o=.d)'
2560 _cflags_speed='-O3 -mf=5'
2561 _cflags_size='-O3 -mf=2'
2562 _flags_filter=tms470_flags
2563 elif $_cc -v 2>&1 | grep -q clang; then
2565 _ident=$($_cc --version | head -n1)
2569 elif $_cc -V 2>&1 | grep -q Sun; then
2571 _ident=$($_cc -V 2>&1 | head -n1 | cut -d' ' -f 2-)
2572 _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "1s,^.*: ,$@: ," -e "\$$!s,\$$, \\\," -e "1!s,^.*: , ," > $(@:.o=.d)'
2573 _DEPFLAGS='-xM1 -xc99'
2576 _cflags_size='-O5 -xspace'
2577 _flags_filter=suncc_flags
2578 elif $_cc -v 2>&1 | grep -q 'PathScale\|Path64'; then
2580 _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
2581 _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2584 _flags_filter='filter_out -Wdisabled-optimization'
2585 elif $_cc -v 2>&1 | grep -q Open64; then
2587 _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
2588 _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2591 _flags_filter='filter_out -Wdisabled-optimization|-Wtype-limits|-fno-signed-zeros'
2592 elif $_cc -V 2>&1 | grep -q Portland; then
2594 _ident="PGI $($_cc -V 2>&1 | awk '/^pgcc/ { print $2; exit }')"
2595 opt_common='-alias=ansi -Mdse -Mlre -Mpre'
2596 _cflags_speed="-O3 -Mautoinline -Munroll=c:4 $opt_common"
2597 _cflags_size="-O2 -Munroll=c:1 $opt_common"
2599 _flags_filter=pgi_flags
2600 elif $_cc 2>&1 | grep -q Microsoft; then
2602 _ident=$($cc 2>&1 | head -n1)
2603 _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< 2>&1 | awk '\''/including/ { sub(/^.*file: */, ""); gsub(/\\/, "/"); if (!match($$0, / /)) print "$@:", $$0 }'\'' > $(@:.o=.d)'
2604 _DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -showIncludes -Zs'
2607 # Nonstandard output options, to avoid msys path conversion issues, relies on wrapper to remap it
2608 if $_cc 2>&1 | grep -q Linker; then
2615 _flags_filter=msvc_flags
2617 _ld_path='-libpath:'
2619 _cflags='-D_USE_MATH_DEFINES -Dinline=__inline -FIstdlib.h -Dstrtoll=_strtoi64'
2620 if [ $pfx = hostcc ]; then
2621 append _cflags -Dsnprintf=_snprintf
2626 eval ${pfx}_type=\$_type
2627 eval ${pfx}_ident=\$_ident
2631 eval ${1}_C=\${_cc_c-\${${1}_C}}
2632 eval ${1}_E=\${_cc_e-\${${1}_E}}
2633 eval ${1}_O=\${_cc_o-\${${1}_O}}
2635 if [ -n "$_depflags" ]; then
2636 eval ${1}_DEPFLAGS=\$_depflags
2638 eval ${1}DEP=\${_DEPCMD:-\$DEPCMD}
2639 eval ${1}DEP_FLAGS=\${_DEPFLAGS:-\$DEPFLAGS}
2640 eval DEP${1}FLAGS=\$_flags
2645 cflags_filter=$_flags_filter
2646 cflags_speed=$_cflags_speed
2647 cflags_size=$_cflags_size
2648 cflags_noopt=$_cflags_noopt
2649 add_cflags $_flags $_cflags
2650 cc_ldflags=$_ldflags
2653 probe_cc hostcc "$host_cc"
2654 host_cflags_filter=$_flags_filter
2655 add_host_cflags $_flags $_cflags
2658 test -n "$cc_type" && enable $cc_type ||
2659 warn "Unknown C compiler $cc, unable to select optimal CFLAGS"
2661 : ${as_default:=$cc}
2662 : ${dep_cc_default:=$cc}
2663 : ${ld_default:=$cc}
2664 : ${host_ld_default:=$host_cc}
2665 set_default ar as dep_cc ld host_ld
2668 asflags_filter=$_flags_filter
2669 add_asflags $_flags $_cflags
2673 ldflags_filter=$_flags_filter
2674 add_ldflags $_flags $_ldflags
2675 test "$cc_type" != "$ld_type" && add_ldflags $cc_ldflags
2677 LD_LIB=${_ld_lib-$LD_LIB}
2678 LD_PATH=${_ld_path-$LD_PATH}
2680 probe_cc hostld "$host_ld"
2681 host_ldflags_filter=$_flags_filter
2682 add_host_ldflags $_flags $_ldflags
2683 HOSTLD_O=${_ld_o-$HOSTLD_O}
2685 if [ -z "$CC_DEPFLAGS" ] && [ "$dep_cc" != "$cc" ]; then
2686 probe_cc depcc "$dep_cc"
2687 CCDEP=${_DEPCMD:-$DEPCMD}
2688 CCDEP_FLAGS=${_DEPFLAGS:=$DEPFLAGS}
2692 if $ar 2>&1 | grep -q Microsoft; then
2695 elif $ar 2>&1 | grep -q 'Texas Instruments'; then
2703 add_cflags $extra_cflags
2704 add_cxxflags $extra_cxxflags
2705 add_asflags $extra_cflags
2707 if test -n "$sysroot"; then
2710 add_cppflags --sysroot="$sysroot"
2711 add_ldflags --sysroot="$sysroot"
2714 add_cppflags -I"$sysinclude"
2715 add_ldflags --sysroot="$sysroot"
2720 if test "$cpu" = host; then
2721 enabled cross_compile && die "--cpu=host makes no sense when cross-compiling."
2726 $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
2728 s/.*$1=\\([^ ]*\\).*/\\1/
2733 cpu=$(check_native -march || check_native -mcpu)
2737 test "${cpu:-host}" = host && die "--cpu=host not supported with compiler $cc"
2740 # Deal with common $arch aliases
2754 "Power Macintosh"|ppc*|powerpc*)
2769 i[3-6]86|i86pc|BePC|x86pc|x86_64|x86_32|amd64)
2774 is_in $arch $ARCH_LIST || warn "unknown architecture $arch"
2777 # Add processor-specific flags
2778 if test "$cpu" = generic; then
2780 elif enabled ppc; then
2782 case $(tolower $cpu) in
2783 601|ppc601|powerpc601)
2784 cpuflags="-mcpu=601"
2787 603*|ppc603*|powerpc603*)
2788 cpuflags="-mcpu=603"
2791 604*|ppc604*|powerpc604*)
2792 cpuflags="-mcpu=604"
2795 g3|75*|ppc75*|powerpc75*)
2796 cpuflags="-mcpu=750"
2799 g4|745*|ppc745*|powerpc745*)
2800 cpuflags="-mcpu=7450"
2802 74*|ppc74*|powerpc74*)
2803 cpuflags="-mcpu=7400"
2805 g5|970|ppc970|powerpc970)
2806 cpuflags="-mcpu=970"
2809 cpuflags="-mcpu=$cpu"
2812 cpuflags="-mcpu=cell"
2816 cpuflags="-mcpu=e500mc"
2820 cpuflags="-mcpu=8548 -mhard-float -mfloat-gprs=double"
2824 cpuflags="-mcpu=8540 -mhard-float"
2829 elif enabled x86; then
2833 cpuflags="-march=$cpu"
2836 # targets that do NOT support conditional mov (cmov)
2837 pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
2838 cpuflags="-march=$cpu"
2841 # targets that do support conditional mov (cmov)
2842 i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64*|k8*|opteron*|athlon-fx|core2|amdfam10|barcelona|atom|bdver*)
2843 cpuflags="-march=$cpu"
2847 # targets that do support conditional mov but on which it's slow
2848 pentium4|pentium4m|prescott|nocona)
2849 cpuflags="-march=$cpu"
2855 elif enabled sparc; then
2858 cypress|f93[04]|tsc701|sparcl*|supersparc|hypersparc|niagara|v[789])
2859 cpuflags="-mcpu=$cpu"
2862 ultrasparc*|niagara[234])
2863 cpuflags="-mcpu=$cpu"
2867 elif enabled arm; then
2871 cpuflags="-march=$cpu"
2872 subarch=$(echo $cpu | sed 's/[^a-z0-9]//g')
2875 cpuflags="-mcpu=$cpu"
2877 cortex-a*) subarch=armv7a ;;
2878 cortex-r*) subarch=armv7r ;;
2879 cortex-m*) enable thumb; subarch=armv7m ;;
2880 arm11*) subarch=armv6 ;;
2881 arm[79]*e*|arm9[24]6*|arm96*|arm102[26]) subarch=armv5te ;;
2882 armv4*|arm7*|arm9[24]*) subarch=armv4 ;;
2887 elif enabled alpha; then
2889 enabled ccc && cpuflags="-arch $cpu" || cpuflags="-mcpu=$cpu"
2891 elif enabled bfin; then
2893 cpuflags="-mcpu=$cpu"
2895 elif enabled mips; then
2897 cpuflags="-march=$cpu"
2913 24kef*|34kf*|1004kf*)
2921 elif enabled avr32; then
2926 cpuflags="-mpart=$cpu"
2930 cpuflags="-march=$cpu"
2934 cpuflags="-mcpu=$cpu"
2938 cpuflags="-march=$cpu"
2942 elif enabled aarch64; then
2946 cpuflags="-march=$cpu"
2949 cpuflags="-mcpu=$cpu"
2955 add_cflags $cpuflags
2956 add_asflags $cpuflags
2958 # compiler sanity check
2960 int main(void){ return 0; }
2962 if test "$?" != 0; then
2963 echo "$cc is unable to create an executable file."
2964 if test -z "$cross_prefix" && ! enabled cross_compile ; then
2965 echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
2966 echo "Only do this if you know what cross compiling means."
2968 die "C compiler test failed."
2971 add_cppflags -D_ISOC99_SOURCE
2972 add_cxxflags -D__STDC_CONSTANT_MACROS
2973 check_cflags -std=c99
2974 check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
2977 check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
2981 check_host_cflags -std=c99
2982 check_host_cflags -Wall
2988 check_code cc "" "int test[2*($expr) - 1]" &&
2989 subarch=$arch64 || subarch=$arch32
2997 check_64bit mips mips64 '_MIPS_SIM > 1'
3001 check_64bit parisc parisc64 'sizeof(void *) > 4'
3005 check_64bit ppc ppc64 'sizeof(void *) > 4'
3008 check_64bit sparc sparc64 'sizeof(void *) > 4'
3012 check_64bit x86_32 x86_64 'sizeof(void *) > 4'
3013 if test "$subarch" = "x86_64"; then
3018 check_cc <<EOF && subarch="ppc64"
3019 int test[(int)sizeof(char*) - 7];
3025 enabled spic && enable pic
3030 prefix_default="/boot/common"
3031 network_extralibs="-lnetwork"
3036 SHFLAGS='-shared -Wl,-h,$$(@F)'
3037 enabled x86 && SHFLAGS="-mimpure-text $SHFLAGS"
3038 network_extralibs="-lsocket -lnsl"
3039 add_cppflags -D__EXTENSIONS__ -D_XOPEN_SOURCE=600
3040 # When using suncc to build, the Solaris linker will mark
3041 # an executable with each instruction set encountered by
3042 # the Solaris assembler. As our libraries contain their own
3043 # guards for processor-specific code, instead suppress
3044 # generation of the HWCAPS ELF section on Solaris x86 only.
3045 enabled_all suncc x86 && echo "hwcap_1 = OVERRIDE;" > mapfile && add_ldflags -Wl,-M,mapfile
3046 nm_default='nm -P -g'
3050 oss_indev_extralibs="-lossaudio"
3051 oss_outdev_extralibs="-lossaudio"
3052 enabled gcc || check_ldflags -Wl,-zmuldefs
3055 # On OpenBSD 4.5. the compiler does not use PIC unless
3056 # explicitly using -fPIC. FFmpeg builds fine without PIC,
3057 # however the generated executable will not do anything
3058 # (simply quits with exit-code 1, no crash, no output).
3059 # Thus explicitly enable PIC here.
3063 SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBVERSION)'
3065 oss_indev_extralibs="-lossaudio"
3066 oss_outdev_extralibs="-lossaudio"
3074 add_extralibs -lpoll -lgnugetopt
3078 gas="gas-preprocessor.pl $cc"
3079 enabled ppc && add_asflags -force_cpusubtype_ALL
3080 SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR)'
3081 enabled x86_32 && append SHFLAGS -Wl,-read_only_relocs,suppress
3083 add_ldflags -Wl,-dynamic,-search_paths_first
3085 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
3086 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
3087 FFSERVERLDFLAGS=-Wl,-bind_at_load
3089 enabled x86_64 && objformat="macho64"
3090 enabled_any pic shared ||
3091 { check_cflags -mdynamic-no-pic && add_asflags -mdynamic-no-pic; }
3094 if test $target_os = "mingw32ce"; then
3100 if enabled x86_64; then
3101 LIBTARGET="i386:x86-64"
3102 elif enabled arm; then
3105 shlibdir_default="$bindir_default"
3108 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
3109 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
3110 dlltool="${cross_prefix}dlltool"
3111 if check_cmd lib.exe -list; then
3112 SLIB_EXTRA_CMD='-lib.exe /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib)'
3113 if enabled x86_64; then
3116 elif check_cmd $dlltool --version; then
3117 SLIB_EXTRA_CMD=-'$(DLLTOOL) -m $(LIBTARGET) -d $$(@:$(SLIBSUF)=.def) -l $(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib) -D $(SLIBNAME_WITH_MAJOR)'
3119 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
3121 SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
3122 SLIB_INSTALL_EXTRA_LIB='lib$(SLIBNAME:$(SLIBSUF)=.dll.a) $(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
3123 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'
3127 add_cppflags -U__STRICT_ANSI__
3130 if enabled shared; then
3131 # Link to the import library instead of the normal static library
3134 # Cannot build shared and static libraries at the same time with
3138 shlibdir_default="$bindir_default"
3141 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
3142 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
3143 SLIB_CREATE_DEF_CMD='makedef $(SUBDIR)lib$(NAME).ver $(OBJS) > $$(@:$(SLIBSUF)=.def)'
3144 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
3146 SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
3147 SLIB_INSTALL_EXTRA_LIB='$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
3148 SHFLAGS='-dll -def:$$(@:$(SLIBSUF)=.def) -implib:$(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib)'
3155 shlibdir_default="$bindir_default"
3158 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
3159 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
3160 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
3162 SLIB_INSTALL_EXTRA_LIB='lib$(FULLNAME).dll.a'
3163 SHFLAGS='-shared -Wl,--out-implib,$(SUBDIR)lib$(FULLNAME).dll.a'
3167 *-dos|freedos|opendos)
3168 network_extralibs="-lsocket"
3171 add_cppflags -U__STRICT_ANSI__
3178 ranlib="echo ignoring ranlib"
3184 add_cppflags -D_GNU_SOURCE
3185 add_ldflags -Zomf -Zbin-files -Zargs-wild -Zmap
3186 SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
3191 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
3192 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
3193 SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
3194 echo PROTMODE >> $(SUBDIR)$(NAME).def; \
3195 echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
3196 echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
3197 echo EXPORTS >> $(SUBDIR)$(NAME).def; \
3198 emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
3199 SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
3200 emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
3201 SLIB_INSTALL_EXTRA_LIB='$(LIBPREF)$(NAME)_dll.a $(LIBPREF)$(NAME)_dll.lib'
3203 enable_weak os2threads
3206 add_cppflags -D_BSD_SOURCE
3211 add_cppflags -D_QNX_SOURCE
3212 network_extralibs="-lsocket"
3217 add_cflags --include=$sysinclude/gcce/gcce.h -fvisibility=default
3218 add_cppflags -D__GCCE__ -D__SYMBIAN32__ -DSYMBIAN_OE_POSIX_SIGNALS
3219 add_ldflags -Wl,--target1-abs,--no-undefined \
3220 -Wl,-Ttext,0x80000,-Tdata,0x1000000 -shared \
3221 -Wl,--entry=_E32Startup -Wl,-u,_E32Startup
3222 add_extralibs -l:eexe.lib -l:usrt2_2.lib -l:dfpaeabi.dso \
3223 -l:drtaeabi.dso -l:scppnwdl.dso -lsupc++ -lgcc \
3224 -l:libc.dso -l:libm.dso -l:euser.dso -l:libcrt0.lib
3227 add_cppflags -D_OSF_SOURCE -D_POSIX_PII -D_REENTRANT
3233 add_cppflags -D_C99_SNPRINTF_EXTENSION \
3234 -D_REENTRANT_SOURCE \
3235 -D_RESEARCH_SOURCE \
3238 add_compat strtod.o strtod=avpriv_strtod
3239 network_extralibs='-lbsd'
3240 exeobjs=compat/plan9/main.o
3248 die "Unknown OS '$target_os'."
3252 # determine libc flavour
3254 if check_cpp_condition features.h "defined __UCLIBC__"; then
3256 add_cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
3257 elif check_cpp_condition features.h "defined __GLIBC__"; then
3259 add_cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
3260 elif check_header _mingw.h; then
3262 check_cpp_condition _mingw.h \
3263 "defined (__MINGW64_VERSION_MAJOR) || (__MINGW32_MAJOR_VERSION > 3) || \
3264 (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
3265 die "ERROR: MinGW runtime version must be >= 3.15."
3266 if check_cpp_condition _mingw.h "defined(__MINGW64_VERSION_MAJOR) && \
3267 __MINGW64_VERSION_MAJOR < 3"; then
3268 add_compat msvcrt/snprintf.o
3269 add_cflags "-include $source_path/compat/msvcrt/snprintf.h"
3271 elif check_cpp_condition newlib.h "defined _NEWLIB_VERSION"; then
3273 add_cppflags -U__STRICT_ANSI__
3274 elif check_func_headers stdlib.h _get_doserrno; then
3276 add_compat strtod.o strtod=avpriv_strtod
3277 add_compat msvcrt/snprintf.o snprintf=avpriv_snprintf \
3278 _snprintf=avpriv_snprintf \
3279 vsnprintf=avpriv_vsnprintf
3280 elif check_cpp_condition stddef.h "defined __KLIBC__"; then
3284 test -n "$libc_type" && enable $libc_type
3286 # hacks for compiler/libc/os combinations
3288 if enabled_all tms470 glibc; then
3289 CPPFLAGS="-I${source_path}/compat/tms470 ${CPPFLAGS}"
3290 add_cppflags -D__USER_LABEL_PREFIX__=
3291 add_cppflags -D__builtin_memset=memset
3292 add_cppflags -D__gnuc_va_list=va_list -D_VA_LIST_DEFINED
3293 add_cflags -pds=48 # incompatible redefinition of macro
3297 echo "$*" | sed 's/%/%25/g;s/:/%3a/g'
3300 echo "config:$arch:$subarch:$cpu:$target_os:$(esc $cc_ident):$(esc $FFMPEG_CONFIGURATION)" >config.fate
3302 check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable pic
3304 set_default $PATHS_LIST
3307 # we need to build at least one lib type
3308 if ! enabled_any static shared; then
3310 At least one library type must be built.
3311 Specify --enable-static to build the static libraries or --enable-shared to
3312 build the shared libraries as well. To only build the shared libraries specify
3313 --disable-static in addition to --enable-shared.
3318 die_license_disabled() {
3319 enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
3322 die_license_disabled_gpl() {
3323 enabled $1 || { enabled $2 && die "$2 is incompatible with the gpl and --enable-$1 is not specified."; }
3326 die_license_disabled gpl libcdio
3327 die_license_disabled gpl libutvideo
3328 die_license_disabled gpl libx264
3329 die_license_disabled gpl libxavs
3330 die_license_disabled gpl libxvid
3331 die_license_disabled gpl x11grab
3333 die_license_disabled nonfree libaacplus
3334 die_license_disabled nonfree libfaac
3335 enabled gpl && die_license_disabled_gpl nonfree libfdk_aac
3336 enabled gpl && die_license_disabled_gpl nonfree openssl
3338 die_license_disabled version3 libopencore_amrnb
3339 die_license_disabled version3 libopencore_amrwb
3340 die_license_disabled version3 libvo_aacenc
3341 die_license_disabled version3 libvo_amrwbenc
3343 enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
3345 disabled optimizations || check_cflags -fomit-frame-pointer
3354 enabled pic && enable_pic
3356 check_cc <<EOF || die "Symbol mangling check failed."
3359 sym=$($nm $TMPO | awk '/ff_extern/{ print substr($0, match($0, /[^ \t]*ff_extern/)) }')
3360 extern_prefix=${sym%%ff_extern*}
3362 check_cc <<EOF && enable_weak inline_asm
3363 void foo(void) { __asm__ volatile ("" ::); }
3367 for restrict_keyword in restrict __restrict__ __restrict; do
3368 check_cc <<EOF && _restrict=$restrict_keyword && break
3369 void foo(char * $restrict_keyword p);
3373 check_cc <<EOF && enable attribute_packed
3374 struct { int x; } __attribute__((packed)) x;
3377 check_cc <<EOF && enable attribute_may_alias
3378 union { int x; } __attribute__((may_alias)) x;
3381 check_cc <<EOF || die "endian test failed"
3382 unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
3384 od -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
3386 if enabled alpha; then
3390 elif enabled arm; then
3392 enabled thumb && check_cflags -mthumb || check_cflags -marm
3395 if check_cpp_condition stddef.h "defined __ARM_PCS_VFP"; then
3397 elif ! check_cpp_condition stddef.h "defined __ARM_PCS || defined __SOFTFP__"; then
3398 case "${cross_prefix:-$cc}" in
3399 *hardfloat*) enable vfp_args; fpabi=vfp ;;
3400 *) check_ld "cc" <<EOF && enable vfp_args && fpabi=vfp || fpabi=soft ;;
3401 __asm__ (".eabi_attribute 28, 1");
3402 int main(void) { return 0; }
3405 warn "Compiler does not indicate floating-point ABI, guessing $fpabi."
3408 enabled armv5te && check_inline_asm armv5te '"qadd r0, r0, r0"'
3409 enabled armv6 && check_inline_asm armv6 '"sadd16 r0, r0, r0"'
3410 enabled armv6t2 && check_inline_asm armv6t2 '"movt r0, #0"'
3411 enabled armvfp && check_inline_asm armvfp '"fadds s0, s0, s0"'
3412 enabled neon && check_inline_asm neon '"vadd.i16 q0, q0, q0"'
3413 enabled vfpv3 && check_inline_asm vfpv3 '"vmov.f32 s0, #1.0"'
3415 check_inline_asm asm_mod_q '"add r0, %Q0, %R0" :: "r"((long long)0)'
3416 check_inline_asm asm_mod_y '"vmul.i32 d0, d0, %y0" :: "x"(0)'
3418 enabled_all armv6t2 shared !pic && enable_pic
3420 elif enabled mips; then
3422 check_inline_asm loongson '"dmult.g $1, $2, $3"'
3423 enabled mips32r2 && add_cflags "-mips32r2" && add_asflags "-mips32r2" &&
3424 check_inline_asm mips32r2 '"rotr $t0, $t1, 1"'
3425 enabled mipsdspr1 && add_cflags "-mdsp" && add_asflags "-mdsp" &&
3426 check_inline_asm mipsdspr1 '"addu.qb $t0, $t1, $t2"'
3427 enabled mipsdspr2 && add_cflags "-mdspr2" && add_asflags "-mdspr2" &&
3428 check_inline_asm mipsdspr2 '"absq_s.qb $t0, $t1"'
3429 enabled mipsfpu && add_cflags "-mhard-float" && add_asflags "-mhard-float" &&
3430 check_inline_asm mipsfpu '"madd.d $f0, $f2, $f4, $f6"'
3432 elif enabled parisc; then
3434 if enabled gcc; then
3435 case $($cc -dumpversion) in
3436 4.[3-8].*) check_cflags -fno-optimize-sibling-calls ;;
3440 elif enabled ppc; then
3442 enable local_aligned_8 local_aligned_16
3444 check_inline_asm dcbzl '"dcbzl 0, %0" :: "r"(0)'
3445 check_inline_asm ibm_asm '"add 0, 0, 0"'
3446 check_inline_asm ppc4xx '"maclhw r10, r11, r12"'
3447 check_inline_asm xform_asm '"lwzx %1, %y0" :: "Z"(*(int*)0), "r"(0)'
3449 # AltiVec flags: The FSF version of GCC differs from the Apple version
3450 if enabled altivec; then
3452 check_cflags -maltivec -mabi=altivec &&
3453 { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
3454 check_cflags -faltivec
3456 # check if our compiler supports Motorola AltiVec C API
3457 check_cc <<EOF || disable altivec
3460 vector signed int v1 = (vector signed int) { 0 };
3461 vector signed int v2 = (vector signed int) { 1 };
3462 v1 = vec_add(v1, v2);
3467 enabled altivec || warn "Altivec disabled, possibly missing --cpu flag"
3470 elif enabled sparc; then
3472 enabled vis && check_inline_asm vis '"pdist %f0, %f0, %f0"'
3474 elif enabled x86; then
3476 check_code ld intrin.h "__rdtsc()" "cc" && enable rdtsc
3478 check_code ld mmintrin.h "_mm_empty()" "cc" && enable mm_empty
3480 enable local_aligned_8 local_aligned_16
3482 # check whether EBP is available on x86
3483 # As 'i' is stored on the stack, this program will crash
3484 # if the base pointer is used to access it because the
3485 # base pointer is cleared in the inline assembly code.
3486 check_exec_crash <<EOF && enable ebp_available
3488 __asm__ volatile ("xorl %%ebp, %%ebp" ::: "%ebp");
3492 # check whether EBX is available on x86
3493 check_inline_asm ebx_available '""::"b"(0)' &&
3494 check_inline_asm ebx_available '"":::"%ebx"'
3496 # check whether xmm clobbers are supported
3497 check_inline_asm xmm_clobbers '"":::"%xmm0"'
3499 # check whether binutils is new enough to compile SSSE3/MMXEXT
3500 enabled ssse3 && check_inline_asm ssse3_inline '"pabsw %xmm0, %xmm0"'
3501 enabled mmxext && check_inline_asm mmxext_inline '"pmaxub %mm0, %mm1"'
3503 if ! disabled_any asm mmx yasm; then
3504 if check_cmd $yasmexe --version; then
3505 enabled x86_64 && yasm_extra="-m amd64"
3506 yasm_debug="-g dwarf2"
3507 elif check_cmd nasm -v; then
3509 yasm_debug="-g -F dwarf"
3510 enabled x86_64 && test "$objformat" = elf && objformat=elf64
3513 YASMFLAGS="-f $objformat $yasm_extra"
3514 enabled pic && append YASMFLAGS "-DPIC"
3515 test -n "$extern_prefix" && append YASMFLAGS "-DPREFIX"
3516 case "$objformat" in
3517 elf*) enabled debug && append YASMFLAGS $yasm_debug ;;
3520 check_yasm "pextrd [eax], xmm0, 1" && enable yasm ||
3521 die "yasm not found, use --disable-yasm for a crippled build"
3522 check_yasm "vextractf128 xmm0, ymm0, 0" || disable avx_external
3523 check_yasm "vfmaddps ymm0, ymm1, ymm2, ymm3" || disable fma4_external
3524 check_yasm "CPU amdnop" && enable cpunop
3528 athlon*|opteron*|k8*|pentium|pentium-mmx|prescott|nocona|atom|geode)
3535 if enabled asm; then
3537 check_inline_asm gnu_as '".macro m n\n\\n:.int 0\n.endm\nm x"' ||
3538 $nogas "GNU assembler not found, install gas-preprocessor"
3541 check_ldflags -Wl,--as-needed
3543 if check_func dlopen; then
3545 elif check_func dlopen -ldl; then
3549 if enabled network; then
3550 check_type "sys/types.h sys/socket.h" socklen_t
3551 check_type netdb.h "struct addrinfo"
3552 check_type netinet/in.h "struct group_source_req" -D_BSD_SOURCE
3553 check_type netinet/in.h "struct ip_mreq_source" -D_BSD_SOURCE
3554 check_type netinet/in.h "struct ipv6_mreq" -D_DARWIN_C_SOURCE
3555 check_type netinet/in.h "struct sockaddr_in6"
3556 check_type poll.h "struct pollfd"
3557 check_type "sys/types.h sys/socket.h" "struct sockaddr_storage"
3558 check_struct "sys/types.h sys/socket.h" "struct sockaddr" sa_len
3559 check_type netinet/sctp.h "struct sctp_event_subscribe"
3560 check_func getaddrinfo $network_extralibs
3561 check_func getservbyport $network_extralibs
3562 # Prefer arpa/inet.h over winsock2
3563 if check_header arpa/inet.h ; then
3564 check_func closesocket
3565 elif check_header winsock2.h ; then
3566 check_func_headers winsock2.h closesocket -lws2 &&
3567 network_extralibs="-lws2" ||
3568 { check_func_headers winsock2.h closesocket -lws2_32 &&
3569 network_extralibs="-lws2_32"; }
3570 check_func_headers ws2tcpip.h getaddrinfo $network_extralibs
3571 check_type ws2tcpip.h socklen_t
3572 check_type ws2tcpip.h "struct addrinfo"
3573 check_type ws2tcpip.h "struct group_source_req"
3574 check_type ws2tcpip.h "struct ip_mreq_source"
3575 check_type ws2tcpip.h "struct ipv6_mreq"
3576 check_type winsock2.h "struct pollfd"
3577 check_type ws2tcpip.h "struct sockaddr_in6"
3578 check_type ws2tcpip.h "struct sockaddr_storage"
3579 check_struct winsock2.h "struct sockaddr" sa_len
3585 # Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
3586 check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
3588 check_func clock_gettime || { check_func clock_gettime -lrt && add_extralibs -lrt; }
3591 check_func gethrtime
3593 check_func getrusage
3594 check_struct "sys/time.h sys/resource.h" "struct rusage" ru_maxrss
3595 check_func gettimeofday
3596 check_func inet_aton $network_extralibs
3598 check_func localtime_r
3599 check_func ${malloc_prefix}memalign && enable memalign
3603 check_func ${malloc_prefix}posix_memalign && enable posix_memalign
3604 check_func_headers malloc.h _aligned_malloc && enable aligned_malloc
3605 check_func setrlimit
3606 check_func strerror_r
3607 check_func sched_getaffinity
3611 check_func_headers conio.h kbhit
3612 check_func_headers windows.h PeekNamedPipe
3613 check_func_headers io.h setmode
3614 check_func_headers lzo/lzo1x.h lzo1x_999_compress
3615 check_lib2 "windows.h shellapi.h" CommandLineToArgvW -lshell32
3616 check_lib2 "windows.h wincrypt.h" CryptGenRandom -ladvapi32
3617 check_lib2 "windows.h psapi.h" GetProcessMemoryInfo -lpsapi
3618 check_func_headers windows.h GetProcessAffinityMask
3619 check_func_headers windows.h GetProcessTimes
3620 check_func_headers windows.h GetSystemTimeAsFileTime
3621 check_func_headers windows.h MapViewOfFile
3622 check_func_headers windows.h Sleep
3623 check_func_headers windows.h VirtualAlloc
3624 check_func_headers glob.h glob
3626 check_header direct.h
3627 check_header dlfcn.h
3629 check_header dxva2api.h -D_WIN32_WINNT=0x0600
3631 check_header libcrystalhd/libcrystalhd_if.h
3632 check_header malloc.h
3634 check_header sys/mman.h
3635 check_header sys/param.h
3636 check_header sys/resource.h
3637 check_header sys/select.h
3638 check_header sys/time.h
3639 check_header termios.h
3640 check_header unistd.h
3641 check_header vdpau/vdpau.h
3642 check_header vdpau/vdpau_x11.h
3643 check_header windows.h
3644 check_header X11/extensions/XvMClib.h
3645 check_header asm/types.h
3647 disabled zlib || check_lib zlib.h zlibVersion -lz || disable zlib
3648 disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
3650 # check for VDA header
3651 if ! disabled vda && ! enabled ppc; then
3652 if check_header VideoDecodeAcceleration/VDADecoder.h; then
3654 add_extralibs -framework CoreFoundation -framework VideoDecodeAcceleration -framework QuartzCore
3658 if ! disabled w32threads && ! enabled pthreads; then
3659 check_func _beginthreadex && enable w32threads
3662 # check for some common methods of building with pthread support
3663 # do this before the optional library checks as some of them require pthreads
3664 if ! disabled pthreads && ! enabled w32threads && ! enabled os2threads; then
3666 if check_func pthread_create; then
3668 elif check_func pthread_create -pthread; then
3670 add_extralibs -pthread
3671 elif check_func pthread_create -pthreads; then
3672 add_cflags -pthreads
3673 add_extralibs -pthreads
3674 elif check_func pthread_create -lpthreadGC2; then
3675 add_extralibs -lpthreadGC2
3676 elif ! check_lib pthread.h pthread_create -lpthread; then
3681 for thread in $THREADS_LIST; do
3682 if enabled $thread; then
3683 test -n "$thread_type" &&
3684 die "ERROR: Only one thread type must be selected." ||
3685 thread_type="$thread"
3689 if enabled pthreads; then
3690 check_func pthread_cancel
3693 check_lib math.h sin -lm && LIBM="-lm"
3694 disabled crystalhd || check_lib libcrystalhd/libcrystalhd_if.h DtsCrystalHDVersion -lcrystalhd || disable crystalhd
3695 enabled vaapi && require vaapi va/va.h vaInitialize -lva
3701 for func in $MATH_FUNCS; do
3702 eval check_mathfunc $func \${${func}_args:-1}
3705 # these are off by default, so fail if requested and not available
3706 enabled avisynth && require2 vfw32 "windows.h vfw.h" AVIFileInit -lavifil32
3707 enabled fontconfig && require_pkg_config fontconfig "fontconfig/fontconfig.h" FcInit
3708 enabled frei0r && { check_header frei0r.h || die "ERROR: frei0r.h header not found"; }
3709 enabled gnutls && require_pkg_config gnutls gnutls/gnutls.h gnutls_global_init
3710 enabled libiec61883 && require libiec61883 libiec61883/iec61883.h iec61883_cmp_connect -lraw1394 -lavc1394 -lrom1394 -liec61883
3711 enabled libaacplus && require "libaacplus >= 2.0.0" aacplus.h aacplusEncOpen -laacplus
3712 enabled libass && require_pkg_config libass ass/ass.h ass_library_init
3713 enabled libbluray && require libbluray libbluray/bluray.h bd_open -lbluray
3714 enabled libcdio && require2 libcdio "cdio/cdda.h cdio/paranoia.h" cdio_cddap_open -lcdio_paranoia -lcdio_cdda -lcdio
3715 enabled libcelt && require libcelt celt/celt.h celt_decode -lcelt0 &&
3716 { check_lib celt/celt.h celt_decoder_create_custom -lcelt0 ||
3717 die "ERROR: libcelt must be installed and version must be >= 0.11.0."; }
3718 enabled libcaca && require_pkg_config caca caca.h caca_create_canvas
3719 enabled libfaac && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
3720 enabled libfdk_aac && require libfdk_aac fdk-aac/aacenc_lib.h aacEncOpen -lfdk-aac
3721 flite_libs="-lflite_cmu_time_awb -lflite_cmu_us_awb -lflite_cmu_us_kal -lflite_cmu_us_kal16 -lflite_cmu_us_rms -lflite_cmu_us_slt -lflite_usenglish -lflite_cmulex -lflite"
3722 enabled libflite && require2 libflite "flite/flite.h" flite_init $flite_libs
3723 enabled libfreetype && require_pkg_config freetype2 "ft2build.h freetype/freetype.h" FT_Init_FreeType
3724 enabled libgsm && require libgsm gsm/gsm.h gsm_create -lgsm
3725 enabled libilbc && require libilbc ilbc.h WebRtcIlbcfix_InitDecode -lilbc
3726 enabled libmodplug && require libmodplug libmodplug/modplug.h ModPlug_Load -lmodplug
3727 enabled libmp3lame && require "libmp3lame >= 3.98.3" lame/lame.h lame_set_VBR_quality -lmp3lame
3728 enabled libnut && require libnut libnut.h nut_demuxer_init -lnut
3729 enabled libopencore_amrnb && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb
3730 enabled libopencore_amrwb && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb
3731 enabled libopencv && require_pkg_config opencv opencv/cxcore.h cvCreateImageHeader
3732 enabled libopenjpeg && require libopenjpeg openjpeg.h opj_version -lopenjpeg
3733 enabled libopus && require_pkg_config opus opus_multistream.h opus_multistream_decoder_create
3734 enabled libpulse && require_pkg_config libpulse-simple pulse/simple.h pa_simple_new
3735 enabled librtmp && require_pkg_config librtmp librtmp/rtmp.h RTMP_Socket
3736 enabled libschroedinger && require_pkg_config schroedinger-1.0 schroedinger/schro.h schro_init
3737 enabled libspeex && require libspeex speex/speex.h speex_decoder_init -lspeex
3738 enabled libstagefright_h264 && require_cpp libstagefright_h264 "binder/ProcessState.h media/stagefright/MetaData.h
3739 media/stagefright/MediaBufferGroup.h media/stagefright/MediaDebug.h media/stagefright/MediaDefs.h
3740 media/stagefright/OMXClient.h media/stagefright/OMXCodec.h" android::OMXClient -lstagefright -lmedia -lutils -lbinder -lgnustl_static
3741 enabled libtheora && require libtheora theora/theoraenc.h th_info_init -ltheoraenc -ltheoradec -logg
3742 enabled libtwolame && require libtwolame twolame.h twolame_init -ltwolame &&
3743 { check_lib twolame.h twolame_encode_buffer_float32_interleaved -ltwolame ||
3744 die "ERROR: libtwolame must be installed and version must be >= 0.3.10"; }
3745 enabled libutvideo && require_cpp utvideo "stdint.h stdlib.h utvideo/utvideo.h utvideo/Codec.h" 'CCodec*' -lutvideo -lstdc++
3746 enabled libv4l2 && require_pkg_config libv4l2 libv4l2.h v4l2_ioctl
3747 enabled libvo_aacenc && require libvo_aacenc vo-aacenc/voAAC.h voGetAACEncAPI -lvo-aacenc
3748 enabled libvo_amrwbenc && require libvo_amrwbenc vo-amrwbenc/enc_if.h E_IF_init -lvo-amrwbenc
3749 enabled libvorbis && require libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
3751 enabled libvpx_decoder && { check_lib2 "vpx/vpx_decoder.h vpx/vp8dx.h" vpx_codec_dec_init_ver -lvpx ||
3752 die "ERROR: libvpx decoder must be installed and version must be >=0.9.1"; }
3753 enabled libvpx_encoder && { check_lib2 "vpx/vpx_encoder.h vpx/vp8cx.h" "vpx_codec_enc_init_ver VP8E_SET_MAX_INTRA_BITRATE_PCT" -lvpx ||
3754 die "ERROR: libvpx encoder version must be >=0.9.7"; } }
3755 enabled libx264 && require libx264 x264.h x264_encoder_encode -lx264 &&
3756 { check_cpp_condition x264.h "X264_BUILD >= 118" ||
3757 die "ERROR: libx264 must be installed and version must be >= 0.118."; }
3758 enabled libxavs && require libxavs xavs.h xavs_encoder_encode -lxavs
3759 enabled libxvid && require libxvid xvid.h xvid_global -lxvidcore
3760 enabled openal && { { for al_libs in "${OPENAL_LIBS}" "-lopenal" "-lOpenAL32"; do
3761 check_lib 'AL/al.h' alGetError "${al_libs}" && break; done } ||
3762 die "ERROR: openal not found"; } &&
3763 { check_cpp_condition "AL/al.h" "defined(AL_VERSION_1_1)" ||
3764 die "ERROR: openal must be installed and version must be 1.1 or compatible"; }
3765 enabled openssl && { check_lib openssl/ssl.h SSL_library_init -lssl -lcrypto ||
3766 check_lib openssl/ssl.h SSL_library_init -lssl32 -leay32 ||
3767 check_lib openssl/ssl.h SSL_library_init -lssl -lcrypto -lws2_32 -lgdi32 ||
3768 die "ERROR: openssl not found"; }
3770 if enabled gnutls; then
3771 { check_lib nettle/bignum.h nettle_mpz_get_str_256 -lnettle -lhogweed -lgmp && enable nettle; } ||
3772 { check_lib gcrypt.h gcry_mpi_new -lgcrypt && enable gcrypt; }
3776 if enabled libdc1394; then
3777 { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
3778 enable libdc1394_2; } ||
3779 { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
3780 enable libdc1394_1; } ||
3781 die "ERROR: No version of libdc1394 found "
3784 SDL_CONFIG="${cross_prefix}sdl-config"
3785 if check_pkg_config sdl SDL_events.h SDL_PollEvent; then
3786 check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
3788 check_struct SDL.h SDL_VideoInfo current_w $sdl_cflags && enable sdl_video_size
3790 if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
3791 sdl_cflags=$("${SDL_CONFIG}" --cflags)
3792 sdl_libs=$("${SDL_CONFIG}" --libs)
3793 check_func_headers SDL_version.h SDL_Linked_Version $sdl_cflags $sdl_libs &&
3794 check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
3796 check_struct SDL.h SDL_VideoInfo current_w $sdl_cflags && enable sdl_video_size
3799 enabled sdl && add_cflags $sdl_cflags && add_extralibs $sdl_libs
3801 texi2html --help 2> /dev/null | grep -q 'init-file' && enable texi2html || disable texi2html
3802 makeinfo --version > /dev/null 2>&1 && enable makeinfo || disable makeinfo
3803 perl --version > /dev/null 2>&1 && enable perl || disable perl
3804 pod2man --help > /dev/null 2>&1 && enable pod2man || disable pod2man
3806 check_header linux/fb.h
3807 check_header linux/videodev.h
3808 check_header linux/videodev2.h
3809 check_struct linux/videodev2.h "struct v4l2_frmivalenum" discrete
3811 check_header sys/videoio.h
3813 check_func_headers "windows.h vfw.h" capCreateCaptureWindow "$vfwcap_indev_extralibs"
3814 # check that WM_CAP_DRIVER_CONNECT is defined to the proper value
3815 # w32api 3.12 had it defined wrong
3816 check_cpp_condition vfw.h "WM_CAP_DRIVER_CONNECT > WM_USER" && enable vfwcap_defines
3818 check_type "dshow.h" IBaseFilter
3820 # check for ioctl_meteor.h, ioctl_bt848.h and alternatives
3821 { check_header dev/bktr/ioctl_meteor.h &&
3822 check_header dev/bktr/ioctl_bt848.h; } ||
3823 { check_header machine/ioctl_meteor.h &&
3824 check_header machine/ioctl_bt848.h; } ||
3825 { check_header dev/video/meteor/ioctl_meteor.h &&
3826 check_header dev/video/bktr/ioctl_bt848.h; } ||
3827 check_header dev/ic/bt8xx.h
3829 check_header sndio.h
3830 if check_struct sys/soundcard.h audio_buf_info bytes; then
3831 enable_safe sys/soundcard.h
3833 check_cc -D__BSD_VISIBLE -D__XSI_VISIBLE <<EOF && add_cppflags -D__BSD_VISIBLE -D__XSI_VISIBLE && enable_safe sys/soundcard.h
3834 #include <sys/soundcard.h>
3838 check_header soundcard.h
3840 enabled_any alsa_indev alsa_outdev && check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
3842 enabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack && check_func sem_timedwait &&
3843 check_func jack_port_get_latency_range -ljack
3845 enabled_any sndio_indev sndio_outdev && check_lib2 sndio.h sio_open -lsndio
3849 require X11 X11/Xlib.h XOpenDisplay -lX11 &&
3850 require Xext X11/extensions/XShm.h XShmCreateImage -lXext &&
3851 require Xfixes X11/extensions/Xfixes.h XFixesGetCursorImage -lXfixes
3853 if ! disabled vaapi; then
3854 check_lib va/va.h vaInitialize -lva && {
3855 check_cpp_condition va/va_version.h "VA_CHECK_VERSION(0,32,0)" ||
3856 warn "Please upgrade to VA-API >= 0.32 if you would like full VA-API support.";
3860 if ! disabled vdpau && enabled vdpau_vdpau_h; then
3861 check_cpp_condition vdpau/vdpau.h "defined VDP_DECODER_PROFILE_MPEG4_PART2_ASP" ||
3862 { echolog "Please upgrade to libvdpau >= 0.2 if you would like vdpau support." && disable vdpau; }
3865 enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel"
3866 enabled coverage && add_cflags "-fprofile-arcs -ftest-coverage" && add_ldflags "-fprofile-arcs -ftest-coverage"
3867 test -n "$valgrind" && target_exec="$valgrind --error-exitcode=1 --malloc-fill=0x2a --track-origins=yes --leak-check=full --gen-suppressions=all --suppressions=$source_path/tests/fate-valgrind.supp"
3869 # add some useful compiler flags if supported
3870 check_cflags -Wdeclaration-after-statement
3872 check_cflags -Wno-parentheses
3873 check_cflags -Wno-switch
3874 check_cflags -Wno-format-zero-length
3875 check_cflags -Wdisabled-optimization
3876 check_cflags -Wpointer-arith
3877 check_cflags -Wredundant-decls
3878 check_cflags -Wno-pointer-sign
3879 check_cflags -Wwrite-strings
3880 check_cflags -Wtype-limits
3881 check_cflags -Wundef
3882 check_cflags -Wmissing-prototypes
3883 check_cflags -Wno-pointer-to-int-cast
3884 check_cflags -Wstrict-prototypes
3885 enabled extra_warnings && check_cflags -Winline
3887 # add some linker flags
3888 check_ldflags -Wl,--warn-common
3889 check_ldflags -Wl,-rpath-link=libpostproc:libswresample:libswscale:libavfilter:libavdevice:libavformat:libavcodec:libavutil:libavresample
3890 test_ldflags -Wl,-Bsymbolic && append SHFLAGS -Wl,-Bsymbolic
3892 enabled xmm_clobber_test &&
3893 check_ldflags -Wl,--wrap,avcodec_open2 \
3894 -Wl,--wrap,avcodec_decode_audio4 \
3895 -Wl,--wrap,avcodec_decode_video2 \
3896 -Wl,--wrap,avcodec_decode_subtitle2 \
3897 -Wl,--wrap,avcodec_encode_audio2 \
3898 -Wl,--wrap,avcodec_encode_video \
3899 -Wl,--wrap,avcodec_encode_subtitle \
3900 -Wl,--wrap,sws_scale ||
3901 disable xmm_clobber_test
3904 if test_ldflags -Wl,--version-script,$TMPV; then
3905 append SHFLAGS '-Wl,--version-script,\$(SUBDIR)lib\$(NAME).ver'
3906 check_cc <<EOF && enable symver_asm_label
3907 void ff_foo(void) __asm__ ("av_foo@VERSION");
3908 void ff_foo(void) { ${inline_asm+__asm__($quotes);} }
3910 check_cc <<EOF && enable symver_gnu_asm
3911 __asm__(".symver ff_foo,av_foo@VERSION");
3912 void ff_foo(void) {}
3916 if [ -z "$optflags" ]; then
3917 if enabled small; then
3918 optflags=$cflags_size
3919 elif enabled optimizations; then
3920 optflags=$cflags_speed
3922 optflags=$cflags_noopt
3928 enabled lto && check_ldflags "$@"
3932 if enabled lto; then
3933 test "$cc_type" != "$ld_type" && die "LTO requires same compiler and linker"
3935 check_ldflags -flto $cpuflags
3938 check_optflags $optflags
3939 check_optflags -fno-math-errno
3940 check_optflags -fno-signed-zeros
3942 enabled ftrapv && check_cflags -ftrapv
3944 check_cc -mno-red-zone <<EOF && noredzone_flags="-mno-red-zone"
3949 if enabled icc; then
3950 # Just warnings, no remarks
3952 # -wd: Disable following warnings
3953 # 144, 167, 556: -Wno-pointer-sign
3954 # 1292: attribute "foo" ignored
3955 # 1419: external declaration in primary source file
3956 # 10006: ignoring unknown option -fno-signed-zeros
3957 # 10148: ignoring unknown option -Wno-parentheses
3958 # 10156: ignoring option '-W'; no argument required
3959 check_cflags -wd144,167,556,1292,1419,10006,10148,10156
3960 # 11030: Warning unknown option --as-needed
3961 # 10156: ignoring option '-export'; no argument required
3962 check_ldflags -wd10156,11030
3963 # Allow to compile with optimizations
3964 check_ldflags -march=$cpu
3965 # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
3966 enable ebp_available
3967 if enabled x86_32; then
3968 icc_version=$($cc -dumpversion)
3969 test ${icc_version%%.*} -ge 11 &&
3970 check_cflags -falign-stack=maintain-16-byte ||
3971 disable aligned_stack
3973 elif enabled ccc; then
3974 # disable some annoying warnings
3975 add_cflags -msg_disable cvtu32to64
3976 add_cflags -msg_disable embedcomment
3977 add_cflags -msg_disable needconstext
3978 add_cflags -msg_disable nomainieee
3979 add_cflags -msg_disable ptrmismatch1
3980 add_cflags -msg_disable unreachcode
3981 elif enabled gcc; then
3982 check_optflags -fno-tree-vectorize
3983 check_cflags -Werror=implicit-function-declaration
3984 check_cflags -Werror=missing-prototypes
3985 check_cflags -Werror=vla
3986 elif enabled llvm_gcc; then
3987 check_cflags -mllvm -stack-alignment=16
3988 elif enabled clang; then
3989 check_cflags -mllvm -stack-alignment=16
3990 check_cflags -Qunused-arguments
3991 check_cflags -Werror=implicit-function-declaration
3992 check_cflags -Werror=missing-prototypes
3993 elif enabled armcc; then
3994 # 2523: use of inline assembler is deprecated
3995 add_cflags -W${armcc_opt},--diag_suppress=2523
3996 add_cflags -W${armcc_opt},--diag_suppress=1207
3997 add_cflags -W${armcc_opt},--diag_suppress=1293 # assignment in condition
3998 add_cflags -W${armcc_opt},--diag_suppress=3343 # hardfp compat
3999 add_cflags -W${armcc_opt},--diag_suppress=167 # pointer sign
4000 add_cflags -W${armcc_opt},--diag_suppress=513 # pointer sign
4001 elif enabled tms470; then
4002 add_cflags -pds=824 -pds=837
4003 elif enabled pathscale; then
4004 add_cflags -fstrict-overflow -OPT:wrap_around_unsafe_opt=OFF
4005 elif enabled msvc; then
4006 enabled x86_32 && disable aligned_stack
4011 add_cppflags -Dmain=plan9_main
4015 enabled_any $THREADS_LIST && enable threads
4017 enabled asm || { arch=c; disable $ARCH_LIST $ARCH_EXT_LIST; }
4019 check_deps $CONFIG_LIST \
4025 if test $target_os = "haiku"; then
4027 disable posix_memalign
4030 ! enabled_any memalign posix_memalign aligned_malloc &&
4031 enabled_any $need_memalign && enable memalign_hack
4034 # -> enable ${lib}_deps_${dep}
4035 # -> add $dep to ${lib}_deps only once
4039 enabled "${lib}_deps_${dep}" && return 0
4040 enable "${lib}_deps_${dep}"
4041 prepend "${lib}_deps" $dep
4044 # merge deps lib components
4045 # merge all ${component}_deps into ${lib}_deps and ${lib}_deps_*
4050 enabled $comp || continue
4051 eval "dep=\"\$${comp}_deps\""
4058 merge_deps libavfilter $FILTER_LIST
4060 echo "install prefix $prefix"
4061 echo "source path $source_path"
4062 echo "C compiler $cc"
4063 echo "ARCH $arch ($cpu)"
4064 if test "$build_suffix" != ""; then
4065 echo "build suffix $build_suffix"
4067 if test "$progs_suffix" != ""; then
4068 echo "progs suffix $progs_suffix"
4070 if test "$extra_version" != ""; then
4071 echo "version string suffix $extra_version"
4073 echo "big-endian ${bigendian-no}"
4074 echo "runtime cpu detection ${runtime_cpudetect-no}"
4075 if enabled x86; then
4076 echo "${yasmexe} ${yasm-no}"
4077 echo "MMX enabled ${mmx-no}"
4078 echo "MMXEXT enabled ${mmxext-no}"
4079 echo "3DNow! enabled ${amd3dnow-no}"
4080 echo "3DNow! extended enabled ${amd3dnowext-no}"
4081 echo "SSE enabled ${sse-no}"
4082 echo "SSSE3 enabled ${ssse3-no}"
4083 echo "AVX enabled ${avx-no}"
4084 echo "FMA4 enabled ${fma4-no}"
4085 echo "CMOV enabled ${cmov-no}"
4086 echo "CMOV is fast ${fast_cmov-no}"
4087 echo "EBX available ${ebx_available-no}"
4088 echo "EBP available ${ebp_available-no}"
4090 if enabled arm; then
4091 echo "ARMv5TE enabled ${armv5te-no}"
4092 echo "ARMv6 enabled ${armv6-no}"
4093 echo "ARMv6T2 enabled ${armv6t2-no}"
4094 echo "ARM VFP enabled ${armvfp-no}"
4095 echo "NEON enabled ${neon-no}"
4097 if enabled mips; then
4098 echo "MIPS FPU enabled ${mipsfpu-no}"
4099 echo "MIPS32R2 enabled ${mips32r2-no}"
4100 echo "MIPS DSP R1 enabled ${mipsdspr1-no}"
4101 echo "MIPS DSP R2 enabled ${mipsdspr2-no}"
4103 if enabled ppc; then
4104 echo "AltiVec enabled ${altivec-no}"
4105 echo "PPC 4xx optimizations ${ppc4xx-no}"
4106 echo "dcbzl available ${dcbzl-no}"
4108 if enabled sparc; then
4109 echo "VIS enabled ${vis-no}"
4111 echo "debug symbols ${debug-no}"
4112 echo "strip symbols ${stripping-no}"
4113 echo "optimize for size ${small-no}"
4114 echo "optimizations ${optimizations-no}"
4115 echo "static ${static-no}"
4116 echo "shared ${shared-no}"
4117 echo "postprocessing support ${postproc-no}"
4118 echo "new filter support ${avfilter-no}"
4119 echo "network support ${network-no}"
4120 echo "threading support ${thread_type-no}"
4121 echo "safe bitstream reader ${safe_bitstream_reader-no}"
4122 echo "SDL support ${sdl-no}"
4123 echo "libdxva2 enabled ${dxva2-no}"
4124 echo "libva enabled ${vaapi-no}"
4125 echo "libvdpau enabled ${vdpau-no}"
4126 echo "AVISynth enabled ${avisynth-no}"
4127 echo "frei0r enabled ${frei0r-no}"
4128 echo "gnutls enabled ${gnutls-no}"
4129 echo "libaacplus enabled ${libaacplus-no}"
4130 echo "libass enabled ${libass-no}"
4131 echo "libcaca enabled ${libcaca-no}"
4132 echo "libcdio support ${libcdio-no}"
4133 echo "libcelt enabled ${libcelt-no}"
4134 echo "libdc1394 support ${libdc1394-no}"
4135 echo "libfaac enabled ${libfaac-no}"
4136 echo "libfdk-aac enabled ${libfdk_aac-no}"
4137 echo "libgsm enabled ${libgsm-no}"
4138 echo "libiec61883 support ${libiec61883-no}"
4139 echo "libilbc enabled ${libilbc-no}"
4140 echo "libmodplug enabled ${libmodplug-no}"
4141 echo "libmp3lame enabled ${libmp3lame-no}"
4142 echo "libnut enabled ${libnut-no}"
4143 echo "libopencore-amrnb support ${libopencore_amrnb-no}"
4144 echo "libopencore-amrwb support ${libopencore_amrwb-no}"
4145 echo "libopencv support ${libopencv-no}"
4146 echo "libopenjpeg enabled ${libopenjpeg-no}"
4147 echo "libopus enabled ${libopus-no}"
4148 echo "libpulse enabled ${libpulse-no}"
4149 echo "librtmp enabled ${librtmp-no}"
4150 echo "libschroedinger enabled ${libschroedinger-no}"
4151 echo "libspeex enabled ${libspeex-no}"
4152 echo "libstagefright-h264 enabled ${libstagefright_h264-no}"
4153 echo "libtheora enabled ${libtheora-no}"
4154 echo "libtwolame enabled ${libtwolame-no}"
4155 echo "libutvideo enabled ${libutvideo-no}"
4156 echo "libv4l2 enabled ${libv4l2-no}"
4157 echo "libvo-aacenc support ${libvo_aacenc-no}"
4158 echo "libvo-amrwbenc support ${libvo_amrwbenc-no}"
4159 echo "libvorbis enabled ${libvorbis-no}"
4160 echo "libvpx enabled ${libvpx-no}"
4161 echo "libx264 enabled ${libx264-no}"
4162 echo "libxavs enabled ${libxavs-no}"
4163 echo "libxvid enabled ${libxvid-no}"
4164 echo "openal enabled ${openal-no}"
4165 echo "openssl enabled ${openssl-no}"
4166 echo "zlib enabled ${zlib-no}"
4167 echo "bzlib enabled ${bzlib-no}"
4168 echo "texi2html enabled ${texi2html-no}"
4169 echo "perl enabled ${perl-no}"
4170 echo "pod2man enabled ${pod2man-no}"
4171 echo "makeinfo enabled ${makeinfo-no}"
4172 test -n "$random_seed" &&
4173 echo "random seed ${random_seed}"
4176 for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
4177 echo "Enabled ${type}s:"
4178 eval list=\$$(toupper $type)_LIST
4179 print_enabled '_*' $list | sort | pr -r -3 -t
4183 license="LGPL version 2.1 or later"
4184 if enabled nonfree; then
4185 license="nonfree and unredistributable"
4186 elif enabled gplv3; then
4187 license="GPL version 3 or later"
4188 elif enabled lgplv3; then
4189 license="LGPL version 3 or later"
4190 elif enabled gpl; then
4191 license="GPL version 2 or later"
4194 echo "License: $license"
4196 echo "Creating config.mak and config.h..."
4198 test -e Makefile || $ln_s "$source_path/Makefile" .
4200 enabled stripping || strip="echo skipping strip"
4202 config_files="$TMPH config.mak"
4204 cat > config.mak <<EOF
4205 # Automatically generated by configure - do not modify!
4206 ifndef FFMPEG_CONFIG_MAK
4208 FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION
4210 LIBDIR=\$(DESTDIR)$libdir
4211 SHLIBDIR=\$(DESTDIR)$shlibdir
4212 INCDIR=\$(DESTDIR)$incdir
4213 BINDIR=\$(DESTDIR)$bindir
4214 DATADIR=\$(DESTDIR)$datadir
4215 MANDIR=\$(DESTDIR)$mandir
4216 SRC_PATH=$source_path
4217 ifndef MAIN_MAKEFILE
4218 SRC_PATH:=\$(SRC_PATH:.%=..%)
4227 DEPCCFLAGS=$DEPCCFLAGS \$(CPPFLAGS)
4229 DEPASFLAGS=$DEPASFLAGS \$(CPPFLAGS)
4254 LDFLAGS-ffserver=$FFSERVERLDFLAGS
4256 YASMFLAGS=$YASMFLAGS
4257 BUILDSUF=$build_suffix
4258 PROGSSUF=$progs_suffix
4266 EXTRA_VERSION=$extra_version
4269 CCDEP_FLAGS=$CCDEP_FLAGS
4271 ASDEP_FLAGS=$ASDEP_FLAGS
4272 CC_DEPFLAGS=$CC_DEPFLAGS
4273 AS_DEPFLAGS=$AS_DEPFLAGS
4276 HOSTCFLAGS=$host_cflags
4277 HOSTEXESUF=$HOSTEXESUF
4278 HOSTLDFLAGS=$host_ldflags
4281 DEPHOSTCCFLAGS=$DEPHOSTCCFLAGS \$(HOSTCCFLAGS)
4282 HOSTCCDEP=$HOSTCCDEP
4283 HOSTCCDEP_FLAGS=$HOSTCCDEP_FLAGS
4284 HOSTCC_DEPFLAGS=$HOSTCC_DEPFLAGS
4288 TARGET_EXEC=$target_exec
4289 TARGET_PATH=$target_path
4290 LIBS-ffplay=$sdl_libs
4291 CFLAGS-ffplay=$sdl_cflags
4292 ZLIB=$($ldflags_filter -lz)
4293 LIB_INSTALL_EXTRA_CMD=$LIB_INSTALL_EXTRA_CMD
4294 EXTRALIBS=$extralibs
4295 COMPAT_OBJS=$compat_objs
4298 LIBTARGET=${LIBTARGET}
4299 SLIBNAME=${SLIBNAME}
4300 SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}
4301 SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}
4302 SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}
4303 SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}
4304 SLIB_INSTALL_NAME=${SLIB_INSTALL_NAME}
4305 SLIB_INSTALL_LINKS=${SLIB_INSTALL_LINKS}
4306 SLIB_INSTALL_EXTRA_LIB=${SLIB_INSTALL_EXTRA_LIB}
4307 SLIB_INSTALL_EXTRA_SHLIB=${SLIB_INSTALL_EXTRA_SHLIB}
4308 SAMPLES:=${samples:-\$(FATE_SAMPLES)}
4309 NOREDZONE_FLAGS=$noredzone_flags
4314 name=$(toupper $lcname)
4315 file=$source_path/$lcname/version.h
4316 eval $(awk "/#define ${name}_VERSION_M/ { print \$2 \"=\" \$3 }" "$file")
4317 eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
4318 eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
4319 eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
4324 file=$source_path/$2
4325 # This condition will be removed when we stop supporting old libpostproc versions
4326 if ! test "$name" = LIBPOSTPROC || test "$postproc_version" = current; then
4327 eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
4328 eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
4330 lcname=$(tolower $name)
4331 eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
4332 eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
4335 get_version_old LIBPOSTPROC libpostproc/version.h
4337 get_version libavcodec
4338 get_version libavdevice
4339 get_version libavfilter
4340 get_version libavformat
4341 get_version libavresample
4342 get_version libavutil
4343 get_version libswresample
4344 get_version libswscale
4347 /* Automatically generated by configure - do not modify! */
4348 #ifndef FFMPEG_CONFIG_H
4349 #define FFMPEG_CONFIG_H
4350 #define FFMPEG_CONFIGURATION "$(c_escape $FFMPEG_CONFIGURATION)"
4351 #define FFMPEG_LICENSE "$(c_escape $license)"
4352 #define FFMPEG_DATADIR "$(eval c_escape $datadir)"
4353 #define AVCONV_DATADIR "$(eval c_escape $datadir)"
4354 #define CC_IDENT "$(c_escape ${cc_ident:-Unknown compiler})"
4355 #define av_restrict $_restrict
4356 #define EXTERN_PREFIX "${extern_prefix}"
4357 #define EXTERN_ASM ${extern_prefix}
4358 #define SLIBSUF "$SLIBSUF"
4359 #define HAVE_MMX2 HAVE_MMXEXT
4362 test -n "$assert_level" &&
4363 echo "#define ASSERT_LEVEL $assert_level" >>$TMPH
4365 test -n "$malloc_prefix" &&
4366 echo "#define MALLOC_PREFIX $malloc_prefix" >>$TMPH
4368 if enabled yasm; then
4369 append config_files $TMPASM
4373 print_config ARCH_ "$config_files" $ARCH_LIST
4374 print_config HAVE_ "$config_files" $HAVE_LIST
4375 print_config CONFIG_ "$config_files" $CONFIG_LIST \
4379 echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
4380 echo "endif # FFMPEG_CONFIG_MAK" >> config.mak
4382 # Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
4383 cp_if_changed $TMPH config.h
4386 enabled yasm && cp_if_changed $TMPASM config.asm
4389 /* Generated by ffconf */
4390 #ifndef AVUTIL_AVCONFIG_H
4391 #define AVUTIL_AVCONFIG_H
4394 test "$postproc_version" != current && cat >> $TMPH <<EOF
4395 #define LIBPOSTPROC_VERSION_MAJOR $LIBPOSTPROC_VERSION_MAJOR
4396 #define LIBPOSTPROC_VERSION_MINOR $LIBPOSTPROC_VERSION_MINOR
4397 #define LIBPOSTPROC_VERSION_MICRO $LIBPOSTPROC_VERSION_MICRO
4400 print_config AV_HAVE_ $TMPH $HAVE_LIST_PUB
4402 echo "#endif /* AVUTIL_AVCONFIG_H */" >> $TMPH
4404 cp_if_changed $TMPH libavutil/avconfig.h
4406 if test -n "$WARNINGS"; then
4407 printf "\n$WARNINGS"
4408 enabled fatal_warnings && exit 1
4411 # build pkg-config files
4413 pkgconfig_generate(){
4415 shortname=${name#lib}${build_suffix}
4420 enabled ${name#lib} || return 0
4422 cat <<EOF > $name/$name.pc
4424 exec_prefix=\${prefix}
4429 Description: $comment
4431 Requires: $(enabled shared || echo $requires)
4432 Requires.private: $(enabled shared && echo $requires)
4434 Libs: -L\${libdir} -l${shortname} $(enabled shared || echo $libs)
4435 Libs.private: $(enabled shared && echo $libs)
4436 Cflags: -I\${includedir}
4439 mkdir -p doc/examples/pc-uninstalled
4440 includedir=${source_path}
4441 [ "$includedir" = . ] && includedir="\${pcfiledir}/../../.."
4442 cat <<EOF > doc/examples/pc-uninstalled/$name.pc
4445 libdir=\${pcfiledir}/../../../$name
4446 includedir=${includedir}
4449 Description: $comment
4453 Libs: -L\${libdir} -l${shortname} $(enabled shared || echo $libs)
4454 Cflags: -I\${includedir}
4458 libavfilter_pc_deps="libavutil = $LIBAVUTIL_VERSION"
4459 enabled libavfilter_deps_avcodec && prepend libavfilter_pc_deps "libavcodec = $LIBAVCODEC_VERSION,"
4460 enabled libavfilter_deps_avformat && prepend libavfilter_pc_deps "libavformat = $LIBAVFORMAT_VERSION,"
4461 enabled libavfilter_deps_swscale && prepend libavfilter_pc_deps "libswscale = $LIBSWSCALE_VERSION,"
4462 enabled libavfilter_deps_swresample && prepend libavfilter_pc_deps "libswresample = $LIBSWRESAMPLE_VERSION,"
4463 enabled libavfilter_deps_postproc && prepend libavfilter_pc_deps "libpostproc = $LIBPOSTPROC_VERSION,"
4464 libavfilter_pc_deps=${libavfilter_pc_deps%, }
4466 libavdevice_pc_deps="libavformat = $LIBAVFORMAT_VERSION"
4467 enabled lavfi_indev && prepend libavdevice_pc_deps "libavfilter = $LIBAVFILTER_VERSION,"
4469 pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION" "$LIBM"
4470 pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
4471 pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
4472 pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "$libavdevice_pc_deps"
4473 pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "$libavfilter_pc_deps"
4474 pkgconfig_generate libpostproc "FFmpeg postprocessing library" "$LIBPOSTPROC_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"
4475 pkgconfig_generate libavresample "Libav audio resampling library" "$LIBAVRESAMPLE_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
4476 pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "$LIBM" "libavutil = $LIBAVUTIL_VERSION"
4477 pkgconfig_generate libswresample "FFmpeg audio rescaling library" "$LIBSWRESAMPLE_VERSION" "$LIBM" "libavutil = $LIBAVUTIL_VERSION"
4479 fix_ffmpeg_remote(){
4482 fixme_remote=$(git --git-dir=$source_path/.git --work-tree=$source_path remote -v | grep $git_remote_from | cut -f 1 | sort | uniq)
4483 if [ "$fixme_remote" != "" ]; then
4485 Outdated domain in git config, the official domain for ffmpeg git is since
4486 November 2011, source.ffmpeg.org, both the old and the new point to the same
4487 repository and server. To update it enter the following commands:
4489 for remote in $fixme_remote; do
4490 echolog "git remote set-url $remote $git_remote_to"
4495 if test -f "$source_path/.git/config"; then
4496 remote_from=git.videolan.org
4497 remote_to=source.ffmpeg.org
4498 fix_ffmpeg_remote git@$remote_from:ffmpeg git@$remote_to:ffmpeg
4499 fix_ffmpeg_remote git://$remote_from/ffmpeg git://$remote_to/ffmpeg