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 --prefix=PREFIX install in PREFIX [$prefix]
82 --bindir=DIR install binaries in DIR [PREFIX/bin]
83 --datadir=DIR install data files in DIR [PREFIX/share/ffmpeg]
84 --libdir=DIR install libs in DIR [PREFIX/lib]
85 --shlibdir=DIR install shared libs in DIR [PREFIX/lib]
86 --incdir=DIR install includes in DIR [PREFIX/include]
87 --mandir=DIR install man page in DIR [PREFIX/share/man]
90 --enable-gpl allow use of GPL code, the resulting libs
91 and binaries will be under GPL [no]
92 --enable-version3 upgrade (L)GPL to version 3 [no]
93 --enable-nonfree allow use of nonfree code, the resulting libs
94 and binaries will be unredistributable [no]
96 Configuration options:
97 --disable-static do not build static libraries [no]
98 --enable-shared build shared libraries [no]
99 --enable-small optimize for size instead of speed
100 --disable-runtime-cpudetect disable detecting cpu capabilities at runtime (smaller binary)
101 --enable-gray enable full grayscale support (slower color)
102 --disable-swscale-alpha disable alpha channel support in swscale
104 Documentation options:
105 --disable-doc do not build documentation
106 --disable-htmlpages do not build HTML documentation pages
107 --disable-manpages do not build man documentation pages
108 --disable-podpages do not build POD documentation pages
109 --disable-txtpages do not build text documentation pages
112 --disable-ffmpeg disable ffmpeg build
113 --disable-ffplay disable ffplay build
114 --disable-ffprobe disable ffprobe build
115 --disable-ffserver disable ffserver build
116 --disable-avdevice disable libavdevice build
117 --disable-avcodec disable libavcodec build
118 --disable-avformat disable libavformat build
119 --disable-swresample disable libswresample build
120 --disable-swscale disable libswscale build
121 --disable-postproc disable libpostproc build
122 --disable-avfilter disable libavfilter build
123 --enable-avresample enable libavresample build [no]
124 --disable-pthreads disable pthreads [auto]
125 --disable-w32threads disable Win32 threads [auto]
126 --disable-os2threads disable OS/2 threads [auto]
127 --enable-x11grab enable X11 grabbing [no]
128 --disable-network disable network support [no]
129 --disable-dct disable DCT code
130 --disable-dwt disable DWT code
131 --disable-lsp disable LSP code
132 --disable-mdct disable MDCT code
133 --disable-rdft disable RDFT code
134 --disable-fft disable FFT code
135 --enable-dxva2 enable DXVA2 code
136 --enable-vaapi enable VAAPI code [autodetect]
137 --enable-vda enable VDA code [autodetect]
138 --enable-vdpau enable VDPAU code [autodetect]
140 Individual component options:
141 --disable-everything disable all components listed below
142 --disable-encoder=NAME disable encoder NAME
143 --enable-encoder=NAME enable encoder NAME
144 --disable-encoders disable all encoders
145 --disable-decoder=NAME disable decoder NAME
146 --enable-decoder=NAME enable decoder NAME
147 --disable-decoders disable all decoders
148 --disable-hwaccel=NAME disable hwaccel NAME
149 --enable-hwaccel=NAME enable hwaccel NAME
150 --disable-hwaccels disable all hwaccels
151 --disable-muxer=NAME disable muxer NAME
152 --enable-muxer=NAME enable muxer NAME
153 --disable-muxers disable all muxers
154 --disable-demuxer=NAME disable demuxer NAME
155 --enable-demuxer=NAME enable demuxer NAME
156 --disable-demuxers disable all demuxers
157 --enable-parser=NAME enable parser NAME
158 --disable-parser=NAME disable parser NAME
159 --disable-parsers disable all parsers
160 --enable-bsf=NAME enable bitstream filter NAME
161 --disable-bsf=NAME disable bitstream filter NAME
162 --disable-bsfs disable all bitstream filters
163 --enable-protocol=NAME enable protocol NAME
164 --disable-protocol=NAME disable protocol NAME
165 --disable-protocols disable all protocols
166 --enable-indev=NAME enable input device NAME
167 --disable-indev=NAME disable input device NAME
168 --disable-indevs disable input devices
169 --enable-outdev=NAME enable output device NAME
170 --disable-outdev=NAME disable output device NAME
171 --disable-outdevs disable output devices
172 --disable-devices disable all devices
173 --enable-filter=NAME enable filter NAME
174 --disable-filter=NAME disable filter NAME
175 --disable-filters disable all filters
177 External library support:
178 --enable-avisynth enable reading of AVISynth script files [no]
179 --enable-bzlib enable bzlib [autodetect]
180 --enable-fontconfig enable fontconfig
181 --enable-frei0r enable frei0r video filtering
182 --enable-gnutls enable gnutls [no]
183 --enable-libaacplus enable AAC+ encoding via libaacplus [no]
184 --enable-libass enable libass subtitles rendering [no]
185 --enable-libbluray enable BluRay reading using libbluray [no]
186 --enable-libcaca enable textual display using libcaca
187 --enable-libcelt enable CELT decoding via libcelt [no]
188 --enable-libcdio enable audio CD grabbing with libcdio
189 --enable-libdc1394 enable IIDC-1394 grabbing using libdc1394
191 --enable-libfaac enable AAC encoding via libfaac [no]
192 --enable-libfdk-aac enable AAC encoding via libfdk-aac [no]
193 --enable-libflite enable flite (voice synthesis) support via libflite [no]
194 --enable-libfreetype enable libfreetype [no]
195 --enable-libgsm enable GSM de/encoding via libgsm [no]
196 --enable-libiec61883 enable iec61883 via libiec61883 [no]
197 --enable-libilbc enable iLBC de/encoding via libilbc [no]
198 --enable-libmodplug enable ModPlug via libmodplug [no]
199 --enable-libmp3lame enable MP3 encoding via libmp3lame [no]
200 --enable-libnut enable NUT (de)muxing via libnut,
201 native (de)muxer exists [no]
202 --enable-libopencore-amrnb enable AMR-NB de/encoding via libopencore-amrnb [no]
203 --enable-libopencore-amrwb enable AMR-WB decoding via libopencore-amrwb [no]
204 --enable-libopencv enable video filtering via libopencv [no]
205 --enable-libopenjpeg enable JPEG 2000 de/encoding via OpenJPEG [no]
206 --enable-libopus enable Opus decoding via libopus [no]
207 --enable-libpulse enable Pulseaudio input via libpulse [no]
208 --enable-librtmp enable RTMP[E] support via librtmp [no]
209 --enable-libschroedinger enable Dirac de/encoding via libschroedinger [no]
210 --enable-libspeex enable Speex de/encoding via libspeex [no]
211 --enable-libstagefright-h264 enable H.264 decoding via libstagefright [no]
212 --enable-libtheora enable Theora encoding via libtheora [no]
213 --enable-libtwolame enable MP2 encoding via libtwolame [no]
214 --enable-libutvideo enable Ut Video encoding and decoding via libutvideo [no]
215 --enable-libv4l2 enable libv4l2/v4l-utils [no]
216 --enable-libvo-aacenc enable AAC encoding via libvo-aacenc [no]
217 --enable-libvo-amrwbenc enable AMR-WB encoding via libvo-amrwbenc [no]
218 --enable-libvorbis enable Vorbis en/decoding via libvorbis,
219 native implementation exists [no]
220 --enable-libvpx enable VP8 de/encoding via libvpx [no]
221 --enable-libx264 enable H.264 encoding via x264 [no]
222 --enable-libxavs enable AVS encoding via xavs [no]
223 --enable-libxvid enable Xvid encoding via xvidcore,
224 native MPEG-4/Xvid encoder exists [no]
225 --enable-openal enable OpenAL 1.1 capture support [no]
226 --enable-openssl enable openssl [no]
227 --enable-zlib enable zlib [autodetect]
229 Advanced options (experts only):
230 --cross-prefix=PREFIX use PREFIX for compilation tools [$cross_prefix]
231 --enable-cross-compile assume a cross-compiler is used
232 --sysroot=PATH root of cross-build tree
233 --sysinclude=PATH location of cross-build system headers
234 --target-os=OS compiler targets OS [$target_os]
235 --target-exec=CMD command to run executables on target
236 --target-path=DIR path to view of build directory on target
237 --toolchain=NAME set tool defaults according to NAME
238 --nm=NM use nm tool NM [$nm_default]
239 --ar=AR use archive tool AR [$ar_default]
240 --as=AS use assembler AS [$as_default]
241 --yasmexe=EXE use yasm-compatible assembler EXE [$yasmexe_default]
242 --cc=CC use C compiler CC [$cc_default]
243 --cxx=CXX use C compiler CXX [$cxx_default]
244 --dep-cc=DEPCC use dependency generator DEPCC [$cc_default]
245 --ld=LD use linker LD [$ld_default]
246 --host-cc=HOSTCC use host C compiler HOSTCC
247 --host-cflags=HCFLAGS use HCFLAGS when compiling for host
248 --host-ld=HOSTLD use host linker HOSTLD
249 --host-ldflags=HLDFLAGS use HLDFLAGS when linking for host
250 --host-libs=HLIBS use libs HLIBS when linking for host
251 --host-os=OS compiler host OS [$target_os]
252 --extra-cflags=ECFLAGS add ECFLAGS to CFLAGS [$CFLAGS]
253 --extra-cxxflags=ECFLAGS add ECFLAGS to CXXFLAGS [$CXXFLAGS]
254 --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]
255 --extra-libs=ELIBS add ELIBS [$ELIBS]
256 --extra-version=STRING version string suffix []
257 --optflags=OPTFLAGS override optimization-related compiler flags
258 --build-suffix=SUFFIX library name suffix []
259 --malloc-prefix=PREFIX prefix malloc and related names with PREFIX
260 --progs-suffix=SUFFIX program name suffix []
261 --arch=ARCH select architecture [$arch]
262 --cpu=CPU select the minimum required CPU (affects
263 instruction selection, may crash on older CPUs)
264 --enable-pic build position-independent code
265 --enable-sram allow use of on-chip SRAM
266 --enable-thumb compile for Thumb instruction set
267 --disable-symver disable symbol versioning
268 --enable-hardcoded-tables use hardcoded tables instead of runtime generation
269 --disable-safe-bitstream-reader
270 disable buffer boundary checking in bitreaders
271 (faster, but may crash)
272 --enable-memalign-hack emulate memalign, interferes with memory debuggers
273 --enable-lto use link-time optimization
275 Optimization options (experts only):
276 --disable-asm disable all assembler optimizations
277 --disable-altivec disable AltiVec optimizations
278 --disable-amd3dnow disable 3DNow! optimizations
279 --disable-amd3dnowext disable 3DNow! extended optimizations
280 --disable-mmx disable MMX optimizations
281 --disable-mmxext disable MMXEXT optimizations
282 --disable-sse disable SSE optimizations
283 --disable-sse2 disable SSE2 optimizations
284 --disable-sse3 disable SSE3 optimizations
285 --disable-ssse3 disable SSSE3 optimizations
286 --disable-sse4 disable SSE4 optimizations
287 --disable-sse42 disable SSE4.2 optimizations
288 --disable-avx disable AVX optimizations
289 --disable-fma4 disable FMA4 optimizations
290 --disable-armv5te disable armv5te optimizations
291 --disable-armv6 disable armv6 optimizations
292 --disable-armv6t2 disable armv6t2 optimizations
293 --disable-armvfp disable ARM VFP optimizations
294 --disable-neon disable NEON optimizations
295 --disable-vis disable VIS optimizations
296 --disable-inline-asm disable use of inline assembler
297 --disable-yasm disable use of yasm assembler
298 --disable-mips32r2 disable MIPS32R2 optimizations
299 --disable-mipsdspr1 disable MIPS DSP ASE R1 optimizations
300 --disable-mipsdspr2 disable MIPS DSP ASE R2 optimizations
301 --disable-mipsfpu disable floating point MIPS optimizations
302 --disable-fast-unaligned consider unaligned accesses slow
303 --postproc-version=V build libpostproc version V.
304 Where V can be '$ALT_PP_VER_MAJOR.$ALT_PP_VER_MINOR.$ALT_PP_VER_MICRO' or 'current'. [$postproc_version_default]
306 Developer options (useful when working on FFmpeg itself):
307 --enable-coverage build with test coverage instrumentation
308 --disable-debug disable debugging symbols
309 --enable-debug=LEVEL set the debug level [$debuglevel]
310 --disable-optimizations disable compiler optimizations
311 --enable-extra-warnings enable more compiler warnings
312 --disable-stripping disable stripping of executables and shared libraries
313 --assert-level=level 0(default), 1 or 2, amount of assertion testing,
314 2 causes a slowdown at runtime.
315 --enable-memory-poisoning fill heap uninitialized allocated space with arbitrary data
316 --valgrind=VALGRIND run "make fate" tests through valgrind to detect memory
317 leaks and errors, using the specified valgrind binary.
318 Cannot be combined with --target-exec
319 --enable-ftrapv Trap arithmetic overflows
320 --samples=PATH location of test samples for FATE, if not set use
321 \$FATE_SAMPLES at make invocation time.
322 --enable-xmm-clobber-test check XMM registers for clobbering (Win64-only;
323 should be used only for debugging purposes)
324 --enable-random randomly enable/disable components
326 --enable-random=LIST randomly enable/disable specific components or
327 --disable-random=LIST component groups. LIST is a comma-separated list
328 of NAME[:PROB] entries where NAME is a component
329 (group) and PROB the probability associated with
331 --random-seed=VALUE seed value for --enable/disable-random
333 NOTE: Object files are built at the place where configure is launched.
341 echo "$@" >> $logfile
346 pr -n -t $1 >> $logfile
357 WARNINGS="${WARNINGS}WARNING: $*\n"
364 If you think configure made a mistake, make sure you are using the latest
365 version from Git. If the latest version fails, report the problem to the
366 ffmpeg-user@ffmpeg.org mailing list or IRC #ffmpeg on irc.freenode.net.
368 if disabled logging; then
370 Rerun configure with logging enabled (do not use --disable-logging), and
371 include the log this produces with your report.
375 Include the log file "$logfile" produced by configure as this will help
382 # Avoid locale weirdness, besides we really just want to translate ASCII.
384 echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
388 echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
392 echo "$*" | sed 's/["\\]/\\\0/g'
396 v=$(echo "$1" | sed "s/'/'\\\\''/g")
397 test "x$v" = "x${v#*[!A-Za-z0-9_/.+-]}" || v="'$v'"
402 echo "$@" | sed 's/^ *//;s/ */ /g;s/ *$//'
409 eval "case $v in $pat) echo $v ;; esac"
417 eval "case $v in $pat) ;; *) echo $v ;; esac"
424 for v; do eval $m; done
430 for v; do echo ${v}${suffix}; done
445 eval : \${$var:=$value}
452 eval $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')='$*'
456 eval echo \$$(echo "$1" | sed 's/[^A-Za-z0-9_]/_/g')
461 eval level=\${${var}_level:=0}
462 eval ${var}_${level}="\$$var"
463 eval ${var}_level=$(($level+1))
469 eval level=\${${var}_level:-0}
470 test $level = 0 && continue
471 eval level=$(($level-1))
472 eval $var="\${${var}_${level}}"
473 eval ${var}_level=$level
474 eval unset ${var}_${level}
496 enable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
502 disable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
508 enabled $var && continue
509 eval sel="\$${var}_select"
510 eval sgs="\$${var}_suggest"
514 enable_deep_weak $sgs
530 test "${1#!}" = "$1" && op== || op=!=
531 eval test "x\$${1#!}" $op "xyes"
535 test "${1#!}" = "$1" && op== || op=!=
536 eval test "x\$${1#!}" $op "xno"
541 enabled $opt || return 1
547 disabled $opt || return 1
553 enabled $opt && return 0
559 disabled $opt && return 0
566 eval : \${$opt:=\$${opt}_default}
574 [ $var = $value ] && return 0
582 enabled ${cfg}_checking && die "Circular dependency for $cfg."
583 disabled ${cfg}_checking && continue
584 enable ${cfg}_checking
586 eval dep_all="\$${cfg}_deps"
587 eval dep_any="\$${cfg}_deps_any"
588 eval dep_sel="\$${cfg}_select"
589 eval dep_sgs="\$${cfg}_suggest"
590 eval dep_ifa="\$${cfg}_if"
591 eval dep_ifn="\$${cfg}_if_any"
593 pushvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
594 check_deps $dep_all $dep_any $dep_sel $dep_sgs $dep_ifa $dep_ifn
595 popvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
597 [ -n "$dep_ifa" ] && { enabled_all $dep_ifa && enable_weak $cfg; }
598 [ -n "$dep_ifn" ] && { enabled_any $dep_ifn && enable_weak $cfg; }
599 enabled_all $dep_all || disable $cfg
600 enabled_any $dep_any || disable $cfg
601 disabled_any $dep_sel && disable $cfg
603 if enabled $cfg; then
604 eval dep_extralibs="\$${cfg}_extralibs"
605 test -n "$dep_extralibs" && add_extralibs $dep_extralibs
607 enable_deep_weak $dep_sgs
610 disable ${cfg}_checking
615 enabled $1 && v=1 || v=0
620 enabled $1 && v= || v=!
625 enabled $1 && v=1 || v=0
634 ucname="$(toupper $cfg)"
636 "print_config_${f##*.}" $cfg ${pfx}${ucname} >>$f
642 test x"$1" = x-n && end=" " && shift || end="\n"
646 enabled $v && printf "%s$end" ${v%$suf};
653 eval "$var=\"\$$var $*\""
659 eval "$var=\"$* \$$var\""
667 append CFLAGS $($cflags_filter "$@")
671 append CXXFLAGS $($cflags_filter "$@")
675 append ASFLAGS $($asflags_filter "$@")
679 append LDFLAGS $($ldflags_filter "$@")
683 prepend extralibs $($ldflags_filter "$@")
687 append host_cflags $($host_cflags_filter "$@")
691 append host_ldflags $($host_ldflags_filter "$@")
695 append compat_objs $1
697 map 'add_cppflags -D$v' "$@"
702 "$@" >> $logfile 2>&1
706 eval printf '%s\\n' $CC_O
710 eval printf '%s\\n' $CC_E
717 check_cmd $cc $CPPFLAGS $CFLAGS "$@" $CC_C $(cc_o $TMPO) $TMPC
724 check_cmd $cxx $CPPFLAGS $CFLAGS $CXXFLAGS "$@" $CXX_C -o $TMPO $TMPCPP
731 check_cmd $cc $CPPFLAGS $CFLAGS "$@" $(cc_e $TMPO) $TMPC
735 eval printf '%s\\n' $AS_O
742 check_cmd $as $CPPFLAGS $ASFLAGS "$@" $AS_C $(as_o $TMPO) $TMPC
746 log check_inline_asm "$@"
751 check_as "$@" <<EOF && enable $name
752 void foo(void){ __asm__ volatile($code); }
761 check_cmd $yasmexe $YASMFLAGS -Werror "$@" -o $TMPO $TMPS
765 eval printf '%s\\n' $LD_O
772 flags=$(filter_out '-l*' "$@")
773 libs=$(filter '-l*' "$@")
774 check_$type $($cflags_filter $flags) || return
775 flags=$($ldflags_filter $flags)
776 libs=$($ldflags_filter $libs)
777 check_cmd $ld $LDFLAGS $flags $(ld_o $TMPE) $TMPO $libs $extralibs
787 for hdr in $headers; do
788 echo "#include <$hdr>"
790 echo "int main(void) { $code; return 0; }"
791 } | check_$check "$@"
795 log check_cppflags "$@"
796 check_cc "$@" <<EOF && append CPPFLAGS "$@"
802 log check_cflags "$@"
803 set -- $($cflags_filter "$@")
804 check_cc "$@" <<EOF && append CFLAGS "$@"
810 log check_cxxflags "$@"
811 set -- $($cflags_filter "$@")
812 check_cxx "$@" <<EOF && append CXXFLAGS "$@"
818 log test_ldflags "$@"
819 check_ld "cc" "$@" <<EOF
820 int main(void){ return 0; }
825 log check_ldflags "$@"
826 test_ldflags "$@" && add_ldflags "$@"
830 log check_header "$@"
834 check_cpp "$@" <<EOF && enable_safe $header
845 check_ld "cc" "$@" <<EOF && enable $func
847 int main(void){ $func(); }
852 log check_mathfunc "$@"
856 check_ld "cc" "$@" <<EOF && enable $func
858 float foo(float f) { return $func(f); }
859 int main(void){ return (int) foo; }
863 check_func_headers(){
864 log check_func_headers "$@"
869 for hdr in $headers; do
870 echo "#include <$hdr>"
872 for func in $funcs; do
873 echo "long check_$func(void) { return (long) $func; }"
875 echo "int main(void) { return 0; }"
876 } | check_ld "cc" "$@" && enable $funcs && enable_safe $headers
879 check_class_headers_cpp(){
880 log check_class_headers_cpp "$@"
885 for hdr in $headers; do
886 echo "#include <$hdr>"
888 echo "int main(void) { "
890 for class in $classes; do
895 } | check_ld "cxx" "$@" && enable $funcs && enable_safe $headers
898 check_cpp_condition(){
899 log check_cpp_condition "$@"
906 #error "unsatisfied condition: $condition"
916 check_header $header && check_func $func "$@" && add_extralibs "$@"
924 check_func_headers "$headers" "$funcs" "$@" && add_extralibs "$@"
928 log check_lib_cpp "$@"
932 check_class_headers_cpp "$headers" "$classes" "$@" && add_extralibs "$@"
936 log check_pkg_config "$@"
941 $pkg_config --exists $pkg 2>/dev/null || return
942 pkg_cflags=$($pkg_config --cflags $pkg)
943 pkg_libs=$($pkg_config --libs $pkg)
944 check_func_headers "$headers" "$funcs" $pkg_cflags $pkg_libs "$@" &&
945 set_safe ${pkg}_cflags $pkg_cflags &&
946 set_safe ${pkg}_libs $pkg_libs
950 check_ld "cc" "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
956 # exit() is not async signal safe. _Exit (C99) and _exit (POSIX)
957 # are safe but may not be available everywhere. Thus we use
958 # raise(SIGTERM) instead. The check is run in a subshell so we
959 # can redirect the "Terminated" message from the shell. SIGBUS
960 # is not defined by standard C so it is used conditionally.
962 (check_exec "$@") >> $logfile 2>&1 <<EOF
964 static void sighandler(int sig){
970 int (*func_ptr)(void) = func;
972 signal(SIGILL, sighandler);
973 signal(SIGFPE, sighandler);
974 signal(SIGSEGV, sighandler);
976 signal(SIGBUS, sighandler);
989 check_code cc "$headers" "$type v" "$@" && enable_safe "$type"
998 disable_safe "${struct}_${member}"
999 check_code cc "$headers" "const void *p = &(($struct *)0)->$member" "$@" &&
1000 enable_safe "${struct}_${member}"
1008 check_lib $header $func "$@" || die "ERROR: $name not found"
1016 check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
1024 check_lib_cpp "$headers" "$classes" "$@" || die "ERROR: $name not found"
1027 require_pkg_config(){
1029 check_pkg_config "$@" || die "ERROR: $pkg not found"
1030 add_cflags $(get_safe ${pkg}_cflags)
1031 add_extralibs $(get_safe ${pkg}_libs)
1035 eval printf '%s\\n' $HOSTCC_O
1039 log check_host_cc "$@"
1042 check_cmd $host_cc $host_cflags "$@" $HOSTCC_C $(hostcc_o $TMPO) $TMPC
1045 check_host_cflags(){
1046 log check_host_cflags "$@"
1047 set -- $($host_cflags_filter "$@")
1048 check_host_cc "$@" <<EOF && append host_cflags "$@"
1056 "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
1060 cmp -s "$1" "$2" && echo "$2 is unchanged" && return
1061 mkdir -p "$(dirname $2)"
1065 # CONFIG_LIST contains configurable options, while HAVE_LIST is for
1066 # system-dependent things.
1121 incompatible_fork_abi
1172 safe_bitstream_reader
1263 incompatible_fork_abi
1268 $(add_suffix _external $ARCH_EXT_LIST)
1269 $(add_suffix _inline $ARCH_EXT_LIST)
1290 dev_bktr_ioctl_bt848_h
1291 dev_bktr_ioctl_meteor_h
1293 dev_video_bktr_ioctl_bt848_h
1294 dev_video_meteor_ioctl_meteor_h
1312 GetProcessAffinityMask
1313 GetProcessMemoryInfo
1315 GetSystemTimeAsFileTime
1326 jack_port_get_latency_range
1342 machine_ioctl_bt848_h
1343 machine_ioctl_meteor_h
1375 struct_group_source_req
1376 struct_ip_mreq_source
1379 struct_rusage_ru_maxrss
1380 struct_sctp_event_subscribe
1382 struct_sockaddr_sa_len
1383 struct_sockaddr_storage
1384 struct_v4l2_frmivalenum_discrete
1411 # options emitted with CONFIG_ prefix but not available on command line
1510 # code dependency declarations
1512 # architecture extensions
1522 mips32r2_deps="mips"
1523 mipsdspr1_deps="mips"
1524 mipsdspr2_deps="mips"
1531 x86_64_suggest="cmov fast_cmov"
1534 amd3dnowext_deps="amd3dnow"
1546 mmx_external_deps="yasm"
1547 mmx_inline_deps="inline_asm"
1548 mmx_suggest="mmx_external mmx_inline"
1550 for ext in $(filter_out mmx $ARCH_EXT_LIST_X86); do
1551 eval dep=\$${ext}_deps
1552 eval ${ext}_external_deps='"${dep}_external"'
1553 eval ${ext}_inline_deps='"${dep}_inline"'
1554 eval ${ext}_suggest='"${ext}_external ${ext}_inline"'
1557 aligned_stack_if_any="ppc x86"
1558 fast_64bit_if_any="alpha ia64 mips64 parisc64 ppc64 sparc64 x86_64"
1559 fast_clz_if_any="alpha armv5te avr32 mips ppc x86"
1560 fast_unaligned_if_any="armv6 ppc x86"
1562 inline_asm_deps="!tms470"
1563 need_memalign="altivec neon sse"
1565 symver_if_any="symver_asm_label symver_gnu_asm"
1573 mpegaudio_select="mpegaudiodsp"
1574 mpegaudiodsp_select="dct"
1575 mpegvideoenc_select="mpegvideo"
1577 # decoders / encoders / hardware accelerators
1578 aac_decoder_select="mdct sinewin"
1579 aac_encoder_select="mdct sinewin"
1580 aac_latm_decoder_select="aac_decoder aac_latm_parser"
1581 ac3_decoder_select="mdct ac3dsp ac3_parser"
1582 ac3_encoder_select="mdct ac3dsp"
1583 ac3_fixed_encoder_select="mdct ac3dsp"
1584 alac_encoder_select="lpc"
1585 amrnb_decoder_select="lsp"
1586 amrwb_decoder_select="lsp"
1587 amv_encoder_select="aandcttables"
1588 atrac1_decoder_select="mdct sinewin"
1589 atrac3_decoder_select="mdct"
1590 binkaudio_dct_decoder_select="mdct rdft dct sinewin"
1591 binkaudio_rdft_decoder_select="mdct rdft sinewin"
1592 cavs_decoder_select="golomb mpegvideo"
1593 cook_decoder_select="mdct sinewin"
1594 cscd_decoder_suggest="zlib"
1595 dca_decoder_select="mdct"
1596 dirac_decoder_select="dwt golomb"
1597 dnxhd_encoder_select="aandcttables mpegvideoenc"
1598 dxa_decoder_select="zlib"
1599 eac3_decoder_select="ac3_decoder"
1600 eac3_encoder_select="ac3_encoder"
1601 eamad_decoder_select="aandcttables error_resilience mpegvideo"
1602 eatgq_decoder_select="aandcttables"
1603 eatqi_decoder_select="aandcttables error_resilience mpegvideo"
1604 exr_decoder_select="zlib"
1605 ffv1_decoder_select="golomb rangecoder"
1606 ffv1_encoder_select="rangecoder"
1607 ffvhuff_encoder_select="huffman"
1608 flac_decoder_select="golomb"
1609 flac_encoder_select="golomb lpc"
1610 flashsv_decoder_select="zlib"
1611 flashsv_encoder_select="zlib"
1612 flashsv2_encoder_select="zlib"
1613 flashsv2_decoder_select="zlib"
1614 flv_decoder_select="h263_decoder"
1615 flv_encoder_select="h263_encoder"
1616 fraps_decoder_select="huffman"
1617 h261_decoder_select="error_resilience mpegvideo"
1618 h261_encoder_select="aandcttables mpegvideoenc"
1619 h263_decoder_select="error_resilience h263_parser mpegvideo"
1620 h263_encoder_select="aandcttables error_resilience mpegvideoenc"
1621 h263_vaapi_hwaccel_select="vaapi h263_decoder"
1622 h263i_decoder_select="h263_decoder"
1623 h263p_encoder_select="h263_encoder"
1624 h264_crystalhd_decoder_select="crystalhd h264_mp4toannexb_bsf h264_parser"
1625 h264_decoder_select="error_resilience golomb h264chroma h264dsp h264pred h264qpel mpegvideo"
1626 h264_dxva2_hwaccel_deps="dxva2api_h"
1627 h264_dxva2_hwaccel_select="dxva2 h264_decoder"
1628 h264_vaapi_hwaccel_select="vaapi h264_decoder"
1629 h264_vda_decoder_select="vda h264_parser h264_decoder"
1630 h264_vda_hwaccel_deps="VideoDecodeAcceleration_VDADecoder_h pthreads"
1631 h264_vda_hwaccel_select="vda h264_decoder"
1632 h264_vdpau_decoder_select="vdpau h264_decoder"
1633 huffyuv_encoder_select="huffman"
1634 iac_decoder_select="fft mdct sinewin"
1635 imc_decoder_select="fft mdct sinewin"
1636 jpegls_decoder_select="golomb"
1637 jpegls_encoder_select="golomb"
1638 ljpeg_encoder_select="aandcttables mpegvideoenc"
1639 loco_decoder_select="golomb"
1640 mdec_decoder_select="error_resilience mpegvideo"
1641 mjpeg_encoder_select="aandcttables mpegvideoenc"
1642 mlp_decoder_select="mlp_parser"
1643 mp1_decoder_select="mpegaudio"
1644 mp1float_decoder_select="mpegaudio"
1645 mp2_decoder_select="mpegaudio"
1646 mp2float_decoder_select="mpegaudio"
1647 mp3_decoder_select="mpegaudio"
1648 mp3adu_decoder_select="mpegaudio"
1649 mp3adufloat_decoder_select="mpegaudio"
1650 mp3float_decoder_select="mpegaudio"
1651 mp3on4_decoder_select="mpegaudio"
1652 mp3on4float_decoder_select="mpegaudio"
1653 mpc7_decoder_select="mpegaudiodsp"
1654 mpc8_decoder_select="mpegaudiodsp"
1655 mpeg_vdpau_decoder_select="vdpau mpegvideo_decoder"
1656 mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h"
1657 mpeg_xvmc_decoder_select="mpegvideo_decoder"
1658 mpeg1_vdpau_decoder_select="vdpau mpeg1video_decoder"
1659 mpeg1_vdpau_hwaccel_select="vdpau mpeg1video_decoder"
1660 mpeg1video_decoder_select="error_resilience mpegvideo"
1661 mpeg1video_encoder_select="aandcttables error_resilience mpegvideoenc"
1662 mpeg2_crystalhd_decoder_select="crystalhd"
1663 mpeg2_dxva2_hwaccel_deps="dxva2api_h"
1664 mpeg2_dxva2_hwaccel_select="dxva2 mpeg2video_decoder"
1665 mpeg2_vdpau_hwaccel_select="vdpau mpeg2video_decoder"
1666 mpeg2_vaapi_hwaccel_select="vaapi mpeg2video_decoder"
1667 mpeg2video_decoder_select="error_resilience mpegvideo"
1668 mpeg2video_encoder_select="aandcttables error_resilience mpegvideoenc"
1669 mpeg4_crystalhd_decoder_select="crystalhd"
1670 mpeg4_decoder_select="h263_decoder mpeg4video_parser"
1671 mpeg4_encoder_select="h263_encoder"
1672 mpeg4_vaapi_hwaccel_select="vaapi mpeg4_decoder"
1673 mpeg4_vdpau_decoder_select="vdpau mpeg4_decoder"
1674 msmpeg4_crystalhd_decoder_select="crystalhd"
1675 msmpeg4v1_decoder_select="h263_decoder"
1676 msmpeg4v1_encoder_select="h263_encoder"
1677 msmpeg4v2_decoder_select="h263_decoder"
1678 msmpeg4v2_encoder_select="h263_encoder"
1679 msmpeg4v3_decoder_select="h263_decoder"
1680 msmpeg4v3_encoder_select="h263_encoder"
1681 mss2_decoder_select="vc1_decoder"
1682 nellymoser_decoder_select="mdct sinewin"
1683 nellymoser_encoder_select="mdct sinewin"
1684 png_decoder_select="zlib"
1685 png_encoder_select="zlib"
1686 qcelp_decoder_select="lsp"
1687 qdm2_decoder_select="mdct rdft mpegaudiodsp"
1688 ra_144_encoder_select="lpc"
1689 ralf_decoder_select="golomb"
1690 rv10_decoder_select="h263_decoder"
1691 rv10_encoder_select="h263_encoder"
1692 rv20_decoder_select="h263_decoder"
1693 rv20_encoder_select="h263_encoder"
1694 rv30_decoder_select="error_resilience golomb h264chroma h264pred h264qpel mpegvideo"
1695 rv40_decoder_select="error_resilience golomb h264chroma h264pred h264qpel mpegvideo"
1696 shorten_decoder_select="golomb"
1697 sipr_decoder_select="lsp"
1698 snow_decoder_select="dwt rangecoder"
1699 snow_encoder_select="aandcttables dwt error_resilience mpegvideoenc rangecoder"
1700 sonic_decoder_select="golomb"
1701 sonic_encoder_select="golomb"
1702 sonic_ls_encoder_select="golomb"
1703 svq1_decoder_select="error_resilience mpegvideo"
1704 svq1_encoder_select="aandcttables error_resilience mpegvideoenc"
1705 svq3_decoder_select="error_resilience golomb h264chroma h264dsp h264pred h264qpel mpegvideo"
1706 svq3_decoder_suggest="zlib"
1707 theora_decoder_select="vp3_decoder"
1708 tiff_decoder_suggest="zlib"
1709 tiff_encoder_suggest="zlib"
1710 truehd_decoder_select="mlp_parser"
1711 tscc_decoder_select="zlib"
1712 twinvq_decoder_select="mdct lsp sinewin"
1713 utvideo_encoder_select="huffman"
1714 vc1_crystalhd_decoder_select="crystalhd"
1715 vc1_decoder_select="h263_decoder h264chroma h264qpel"
1716 vc1_dxva2_hwaccel_deps="dxva2api_h"
1717 vc1_dxva2_hwaccel_select="dxva2 vc1_decoder"
1718 vc1_vaapi_hwaccel_select="vaapi vc1_decoder"
1719 vc1_vdpau_decoder_select="vdpau vc1_decoder"
1720 vc1image_decoder_select="vc1_decoder"
1721 vorbis_decoder_select="mdct"
1722 vorbis_encoder_select="mdct"
1723 vp3_decoder_select="vp3dsp"
1724 vp5_decoder_select="vp3dsp"
1725 vp6_decoder_select="huffman vp3dsp"
1726 vp6a_decoder_select="vp6_decoder"
1727 vp6f_decoder_select="vp6_decoder"
1728 vp8_decoder_select="h264pred h264qpel"
1729 wmapro_decoder_select="mdct sinewin"
1730 wmav1_decoder_select="mdct sinewin"
1731 wmav1_encoder_select="mdct sinewin"
1732 wmav2_decoder_select="mdct sinewin"
1733 wmav2_encoder_select="mdct sinewin"
1734 wmavoice_decoder_select="lsp rdft dct mdct sinewin"
1735 wmv1_decoder_select="h263_decoder"
1736 wmv1_encoder_select="h263_encoder"
1737 wmv2_decoder_select="h263_decoder"
1738 wmv2_encoder_select="h263_encoder"
1739 wmv3_decoder_select="vc1_decoder"
1740 wmv3_crystalhd_decoder_select="crystalhd"
1741 wmv3_dxva2_hwaccel_select="vc1_dxva2_hwaccel"
1742 wmv3_vaapi_hwaccel_select="vc1_vaapi_hwaccel"
1743 wmv3_vdpau_decoder_select="vc1_vdpau_decoder"
1744 wmv3image_decoder_select="wmv3_decoder"
1745 zerocodec_decoder_select="zlib"
1746 zlib_decoder_select="zlib"
1747 zlib_encoder_select="zlib"
1748 zmbv_decoder_select="zlib"
1749 zmbv_encoder_select="zlib"
1751 crystalhd_deps="libcrystalhd_libcrystalhd_if_h"
1752 vaapi_deps="va_va_h"
1753 vda_deps="VideoDecodeAcceleration_VDADecoder_h pthreads"
1754 vdpau_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1757 h264_parser_select="error_resilience golomb h264dsp h264pred mpegvideo"
1758 mpeg4video_parser_select="error_resilience mpegvideo"
1759 mpegvideo_parser_select="error_resilience mpegvideo"
1760 vc1_parser_select="error_resilience mpegvideo"
1762 # external libraries
1763 libaacplus_encoder_deps="libaacplus"
1764 libcelt_decoder_deps="libcelt"
1765 libfaac_encoder_deps="libfaac"
1766 libfdk_aac_encoder_deps="libfdk_aac"
1767 libgsm_decoder_deps="libgsm"
1768 libgsm_encoder_deps="libgsm"
1769 libgsm_ms_decoder_deps="libgsm"
1770 libgsm_ms_encoder_deps="libgsm"
1771 libilbc_decoder_deps="libilbc"
1772 libilbc_encoder_deps="libilbc"
1773 libmodplug_demuxer_deps="libmodplug"
1774 libmp3lame_encoder_deps="libmp3lame"
1775 libopencore_amrnb_decoder_deps="libopencore_amrnb"
1776 libopencore_amrnb_encoder_deps="libopencore_amrnb"
1777 libopencore_amrwb_decoder_deps="libopencore_amrwb"
1778 libopenjpeg_decoder_deps="libopenjpeg"
1779 libopenjpeg_encoder_deps="libopenjpeg"
1780 libopus_decoder_deps="libopus"
1781 libopus_encoder_deps="libopus"
1782 libschroedinger_decoder_deps="libschroedinger"
1783 libschroedinger_encoder_deps="libschroedinger"
1784 libspeex_decoder_deps="libspeex"
1785 libspeex_encoder_deps="libspeex"
1786 libstagefright_h264_decoder_deps="libstagefright_h264"
1787 libtheora_encoder_deps="libtheora"
1788 libtwolame_encoder_deps="libtwolame"
1789 libvo_aacenc_encoder_deps="libvo_aacenc"
1790 libvo_amrwbenc_encoder_deps="libvo_amrwbenc"
1791 libvorbis_decoder_deps="libvorbis"
1792 libvorbis_encoder_deps="libvorbis"
1793 libvpx_decoder_deps="libvpx"
1794 libvpx_encoder_deps="libvpx"
1795 libx264_encoder_deps="libx264"
1796 libx264rgb_encoder_deps="libx264"
1797 libxavs_encoder_deps="libxavs"
1798 libxvid_encoder_deps="libxvid"
1799 libutvideo_decoder_deps="libutvideo"
1800 libutvideo_encoder_deps="libutvideo"
1803 ac3_demuxer_select="ac3_parser"
1804 asf_stream_muxer_select="asf_muxer"
1805 avisynth_demuxer_deps="avisynth"
1806 dirac_demuxer_select="dirac_parser"
1807 dts_demuxer_select="dca_parser"
1808 dtshd_demuxer_select="dca_parser"
1809 eac3_demuxer_select="ac3_parser"
1810 f4v_muxer_select="mov_muxer"
1811 flac_demuxer_select="flac_parser"
1812 ipod_muxer_select="mov_muxer"
1813 libnut_demuxer_deps="libnut"
1814 libnut_muxer_deps="libnut"
1815 matroska_audio_muxer_select="matroska_muxer"
1816 matroska_demuxer_suggest="zlib bzlib"
1817 mov_demuxer_suggest="zlib"
1818 mp3_demuxer_select="mpegaudio_parser"
1819 mp4_muxer_select="mov_muxer"
1820 mpegts_muxer_select="adts_muxer latm_muxer mpegvideo"
1821 mpegtsraw_demuxer_select="mpegts_demuxer"
1822 mxf_d10_muxer_select="mxf_muxer"
1823 ogg_demuxer_select="golomb"
1824 psp_muxer_select="mov_muxer"
1825 rtp_demuxer_select="sdp_demuxer"
1826 rtp_muxer_select="mpegvideo"
1827 rtpdec_select="asf_demuxer rm_demuxer rtp_protocol mpegts_demuxer mov_demuxer"
1828 rtsp_demuxer_select="http_protocol rtpdec"
1829 rtsp_muxer_select="rtp_muxer http_protocol rtp_protocol"
1830 sap_demuxer_select="sdp_demuxer"
1831 sap_muxer_select="rtp_muxer rtp_protocol"
1832 sdp_demuxer_select="rtpdec"
1833 smoothstreaming_muxer_select="ismv_muxer"
1834 spdif_muxer_select="aac_parser"
1835 tak_demuxer_select="tak_parser"
1836 tg2_muxer_select="mov_muxer"
1837 tgp_muxer_select="mov_muxer"
1838 w64_demuxer_deps="wav_demuxer"
1841 alsa_indev_deps="alsa_asoundlib_h snd_pcm_htimestamp"
1842 alsa_outdev_deps="alsa_asoundlib_h"
1843 bktr_indev_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
1844 caca_outdev_deps="libcaca"
1845 dshow_indev_deps="IBaseFilter"
1846 dshow_indev_extralibs="-lpsapi -lole32 -lstrmiids -luuid"
1847 dv1394_indev_deps="dv1394 dv_demuxer"
1848 fbdev_indev_deps="linux_fb_h"
1849 iec61883_indev_deps="libiec61883"
1850 jack_indev_deps="jack_jack_h sem_timedwait"
1851 lavfi_indev_deps="avfilter"
1852 libcdio_indev_deps="libcdio"
1853 libdc1394_indev_deps="libdc1394"
1854 libv4l2_indev_deps="libv4l2"
1855 openal_indev_deps="openal"
1856 oss_indev_deps_any="soundcard_h sys_soundcard_h"
1857 oss_outdev_deps_any="soundcard_h sys_soundcard_h"
1858 pulse_indev_deps="libpulse"
1859 sdl_outdev_deps="sdl"
1860 sndio_indev_deps="sndio_h"
1861 sndio_outdev_deps="sndio_h"
1862 v4l_indev_deps="linux_videodev_h"
1863 v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h"
1864 vfwcap_indev_deps="capCreateCaptureWindow vfwcap_defines"
1865 vfwcap_indev_extralibs="-lavicap32"
1866 x11grab_indev_deps="x11grab"
1869 bluray_protocol_deps="libbluray"
1870 ffrtmpcrypt_protocol_deps="!librtmp_protocol"
1871 ffrtmpcrypt_protocol_deps_any="gcrypt nettle openssl"
1872 ffrtmpcrypt_protocol_select="tcp_protocol"
1873 ffrtmphttp_protocol_deps="!librtmp_protocol"
1874 ffrtmphttp_protocol_select="http_protocol"
1875 gopher_protocol_deps="network"
1876 httpproxy_protocol_deps="network"
1877 httpproxy_protocol_select="tcp_protocol"
1878 http_protocol_deps="network"
1879 http_protocol_select="tcp_protocol"
1880 https_protocol_select="tls_protocol"
1881 librtmp_protocol_deps="librtmp"
1882 librtmpe_protocol_deps="librtmp"
1883 librtmps_protocol_deps="librtmp"
1884 librtmpt_protocol_deps="librtmp"
1885 librtmpte_protocol_deps="librtmp"
1886 mmsh_protocol_select="http_protocol"
1887 mmst_protocol_deps="network"
1888 rtmp_protocol_deps="!librtmp_protocol"
1889 rtmp_protocol_select="tcp_protocol"
1890 rtmpe_protocol_select="ffrtmpcrypt_protocol"
1891 rtmps_protocol_deps="!librtmp_protocol"
1892 rtmps_protocol_select="tls_protocol"
1893 rtmpt_protocol_select="ffrtmphttp_protocol"
1894 rtmpte_protocol_select="ffrtmpcrypt_protocol ffrtmphttp_protocol"
1895 rtmpts_protocol_select="ffrtmphttp_protocol https_protocol"
1896 rtp_protocol_select="udp_protocol"
1897 sctp_protocol_deps="network struct_sctp_event_subscribe"
1898 tcp_protocol_deps="network"
1899 tls_protocol_deps_any="openssl gnutls"
1900 tls_protocol_select="tcp_protocol"
1901 udp_protocol_deps="network"
1904 aconvert_filter_deps="swresample"
1905 amovie_filter_deps="avcodec avformat"
1906 aresample_filter_deps="swresample"
1907 ass_filter_deps="libass"
1908 asyncts_filter_deps="avresample"
1909 atempo_filter_deps="avcodec rdft"
1910 blackframe_filter_deps="gpl"
1911 boxblur_filter_deps="gpl"
1912 colormatrix_filter_deps="gpl"
1913 cropdetect_filter_deps="gpl"
1914 decimate_filter_deps="gpl avcodec"
1915 delogo_filter_deps="gpl"
1916 deshake_filter_deps="avcodec"
1917 drawtext_filter_deps="libfreetype"
1918 ebur128_filter_deps="gpl"
1919 flite_filter_deps="libflite"
1920 frei0r_filter_deps="frei0r dlopen"
1921 frei0r_filter_extralibs='$ldl'
1922 frei0r_src_filter_deps="frei0r dlopen"
1923 frei0r_src_filter_extralibs='$ldl'
1924 hqdn3d_filter_deps="gpl"
1925 movie_filter_deps="avcodec avformat"
1926 mp_filter_deps="gpl avcodec swscale postproc inline_asm"
1927 mptestsrc_filter_deps="gpl"
1928 negate_filter_deps="lut_filter"
1929 resample_filter_deps="avresample"
1930 ocv_filter_deps="libopencv"
1931 pan_filter_deps="swresample"
1932 removelogo_filter_deps="avcodec avformat swscale"
1933 scale_filter_deps="swscale"
1934 smartblur_filter_deps="gpl swscale"
1935 showspectrum_filter_deps="avcodec rdft"
1936 super2xsai_filter_deps="gpl"
1937 tinterlace_filter_deps="gpl"
1938 yadif_filter_deps="gpl"
1939 pixfmts_super2xsai_test_deps="super2xsai_filter"
1940 tinterlace_merge_test_deps="tinterlace_filter"
1941 tinterlace_pad_test_deps="tinterlace_filter"
1944 avdevice_deps="avcodec avformat"
1945 avformat_deps="avcodec"
1949 ffmpeg_deps="avcodec avfilter avformat swscale swresample"
1950 ffmpeg_select="ffbuffersink_filter format_filter aformat_filter
1951 setpts_filter null_filter anull_filter ffabuffersink_filter"
1952 ffplay_deps="avcodec avformat swscale swresample sdl"
1953 ffplay_select="ffbuffersink_filter rdft crop_filter"
1954 ffprobe_deps="avcodec avformat"
1955 ffserver_deps="avformat ffm_muxer fork rtp_protocol rtsp_demuxer"
1956 ffserver_extralibs='$ldl'
1959 podpages_deps="perl"
1960 manpages_deps="perl pod2man"
1961 htmlpages_deps="texi2html"
1962 txtpages_deps="makeinfo"
1963 doc_deps_any="manpages htmlpages podpages txtpages"
1965 # default parameters
1967 logfile="config.log"
1969 # installation paths
1970 prefix_default="/usr/local"
1971 bindir_default='${prefix}/bin'
1972 datadir_default='${prefix}/share/ffmpeg'
1973 incdir_default='${prefix}/include'
1974 libdir_default='${prefix}/lib'
1975 mandir_default='${prefix}/share/man'
1976 shlibdir_default="$libdir_default"
1977 postproc_version_default="current"
1983 host_cc_default="gcc"
1988 pkg_config_default=pkg-config
1990 strip_default="strip"
1991 yasmexe_default="yasm"
1996 arch_default=$(uname -m)
2000 target_os_default=$(tolower $(uname -s))
2001 host_os=$target_os_default
2003 # alternative libpostproc version
2006 ALT_PP_VER_MICRO=101
2007 ALT_PP_VER=$ALT_PP_VER_MAJOR.$ALT_PP_VER_MINOR.$ALT_PP_VER_MICRO
2009 # configurable options
2010 enable $PROGRAM_LIST
2011 enable $DOCUMENT_LIST
2027 enable optimizations
2028 enable runtime_cpudetect
2029 enable safe_bitstream_reader
2031 enable swscale_alpha
2034 SHFLAGS='-shared -Wl,-soname,$$(@F)'
2035 FFSERVERLDFLAGS=-Wl,-E
2038 FULLNAME='$(NAME)$(BUILDSUF)'
2039 LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
2042 SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
2043 SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
2044 SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
2045 LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
2046 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'
2047 SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR) $(SLIBNAME)'
2067 host_cflags='-D_ISOC99_SOURCE -D_XOPEN_SOURCE=600 -O3 -g'
2069 host_cflags_filter=echo
2070 host_ldflags_filter=echo
2072 target_path='$(CURDIR)'
2074 # since the object filename is not given with the -MM flag, the compiler
2075 # is only able to print the basename, and we must add the path ourselves
2076 DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o," > $(@:.o=.d)'
2080 if test -f configure; then
2083 source_path=$(cd $(dirname "$0"); pwd)
2084 echo "$source_path" | grep -q '[[:blank:]]' &&
2085 die "Out of tree builds are impossible with whitespace in source path."
2086 test -e "$source_path/config.h" &&
2087 die "Out of tree builds are impossible with config.h in source dir."
2094 FFMPEG_CONFIGURATION="${FFMPEG_CONFIGURATION# } ${l}${r}"
2100 file=$source_path/$3
2101 sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
2104 ENCODER_LIST=$(find_things encoder ENC libavcodec/allcodecs.c)
2105 DECODER_LIST=$(find_things decoder DEC libavcodec/allcodecs.c)
2106 HWACCEL_LIST=$(find_things hwaccel HWACCEL libavcodec/allcodecs.c)
2107 PARSER_LIST=$(find_things parser PARSER libavcodec/allcodecs.c)
2108 BSF_LIST=$(find_things bsf BSF libavcodec/allcodecs.c)
2109 MUXER_LIST=$(find_things muxer _MUX libavformat/allformats.c)
2110 DEMUXER_LIST=$(find_things demuxer DEMUX libavformat/allformats.c)
2111 OUTDEV_LIST=$(find_things outdev OUTDEV libavdevice/alldevices.c)
2112 INDEV_LIST=$(find_things indev _IN libavdevice/alldevices.c)
2113 PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
2114 FILTER_LIST=$(find_things filter FILTER libavfilter/allfilters.c)
2130 for n in $COMPONENT_LIST; do
2131 v=$(toupper ${n%s})_LIST
2133 eval ${n}_if_any="\$$v"
2136 enable $ARCH_EXT_LIST
2139 echo "Unknown option \"$1\"."
2140 echo "See $0 --help for available options."
2147 echo $* | sed s/$suffix//g | tr ' ' '\n' | sort | pr -3 -t
2159 is_in ${comp} $COMPONENT_LIST && eval comp=\$$(toupper ${comp%s})_LIST
2160 echo "prob ${prob:-0.5}"
2168 random_seed=$(awk "BEGIN { srand($random_seed); print srand() }")
2169 $action $(rand_list "$@" | awk "BEGIN { srand($random_seed) } \$1 == \"prob\" { prob = \$2; next } rand() < prob { print }")
2175 --extra-ldflags=*) add_ldflags $optval
2177 --extra-libs=*) add_extralibs $optval
2179 --disable-devices) disable $INDEV_LIST $OUTDEV_LIST
2181 --enable-debug=*) debuglevel="$optval"
2183 --disable-everything)
2184 map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
2186 --enable-random|--disable-random)
2187 action=${opt%%-random}
2188 do_random ${action#--} $COMPONENT_LIST
2190 --enable-random=*|--disable-random=*)
2191 action=${opt%%-random=*}
2192 do_random ${action#--} $optval
2194 --enable-*=*|--disable-*=*)
2195 eval $(echo "${opt%%=*}" | sed 's/--/action=/;s/-/ thing=/')
2196 is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt"
2197 eval list=\$$(toupper $thing)_LIST
2198 name=$(echo "${optval}" | sed "s/,/_${thing}|/g")_${thing}
2199 $action $(filter "$name" $list)
2201 --enable-?*|--disable-?*)
2202 eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
2203 if is_in $option $COMPONENT_LIST; then
2204 test $action = disable && action=unset
2205 eval $action \$$(toupper ${option%s})_LIST
2206 elif is_in $option $CMDLINE_SELECT; then
2213 NAME="${opt#--list-}"
2214 is_in $NAME $COMPONENT_LIST || die_unknown $opt
2216 eval show_list $NAME \$$(toupper $NAME)_LIST
2218 --help|-h) show_help
2221 optname="${opt%%=*}"
2222 optname="${optname#--}"
2223 optname=$(echo "$optname" | sed 's/-/_/g')
2224 if is_in $optname $CMDLINE_SET; then
2225 eval $optname='$optval'
2226 elif is_in $optname $CMDLINE_APPEND; then
2227 append $optname "$optval"
2235 disabled logging && logfile=/dev/null
2237 echo "# $0 $FFMPEG_CONFIGURATION" > $logfile
2240 test -n "$cross_prefix" && enable cross_compile
2242 if enabled cross_compile; then
2243 test -n "$arch" && test -n "$target_os" ||
2244 die "Must specify target arch and OS when cross-compiling"
2247 set_default postproc_version
2249 # Check if we should build alternative libpostproc version instead of current
2250 if test "$postproc_version" = $ALT_PP_VER; then
2251 LIBPOSTPROC_VERSION=$ALT_PP_VER
2252 LIBPOSTPROC_VERSION_MAJOR=$ALT_PP_VER_MAJOR
2253 LIBPOSTPROC_VERSION_MINOR=$ALT_PP_VER_MINOR
2254 LIBPOSTPROC_VERSION_MICRO=$ALT_PP_VER_MICRO
2255 elif test "$postproc_version" != current; then
2256 die "Invalid argument to --postproc-version. See --help output."
2259 ar_default="${cross_prefix}${ar_default}"
2260 cc_default="${cross_prefix}${cc_default}"
2261 cxx_default="${cross_prefix}${cxx_default}"
2262 nm_default="${cross_prefix}${nm_default}"
2263 pkg_config_default="${cross_prefix}${pkg_config_default}"
2264 ranlib="${cross_prefix}${ranlib}"
2265 strip_default="${cross_prefix}${strip_default}"
2267 sysinclude_default="${sysroot}/usr/include"
2269 case "$toolchain" in
2272 add_cflags -faddress-sanitizer
2273 add_ldflags -faddress-sanitizer
2277 add_cflags -fthread-sanitizer
2278 add_ldflags -fthread-sanitizer
2281 cc_default="c99wrap cl"
2282 ld_default="c99wrap link"
2283 nm_default="dumpbin -symbols"
2285 target_os_default="win32"
2288 die "Unknown toolchain $toolchain"
2292 set_default arch cc cxx pkg_config strip sysinclude target_os yasmexe
2293 enabled cross_compile || host_cc_default=$cc
2296 if ! $pkg_config --version >/dev/null 2>&1; then
2297 warn "$pkg_config not found, library detection may fail."
2303 mingw32*|win32|win64|cygwin*|*-dos|freedos|opendos|os/2*|symbian) echo .exe ;;
2307 EXESUF=$(exesuf $target_os)
2308 HOSTEXESUF=$(exesuf $host_os)
2310 # set temporary file name
2311 : ${TMPDIR:=$TEMPDIR}
2315 if ! check_cmd mktemp -u XXXXXX; then
2316 # simple replacement for missing mktemp
2317 # NOT SAFE FOR GENERAL USE
2319 echo "${2%%XXX*}.${HOSTNAME}.${UID}.$$"
2324 tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
2325 (set -C; exec > $tmp) 2>/dev/null ||
2326 die "Unable to create temporary file in $TMPDIR."
2327 append TMPFILES $tmp
2331 trap 'rm -f -- $TMPFILES' EXIT
2336 tmpfile TMPE $EXESUF
2347 # make sure we can execute files in $TMPDIR
2348 cat > $TMPSH 2>> $logfile <<EOF
2351 chmod +x $TMPSH >> $logfile 2>&1
2352 if ! $TMPSH >> $logfile 2>&1; then
2354 Unable to create and execute files in $TMPDIR. Set the TMPDIR environment
2355 variable to another directory and make sure that it is not mounted noexec.
2357 die "Sanity test failed."
2363 -fomit-frame-pointer) echo -Oy ;;
2365 -Wall) echo -W4 -wd4244 -wd4127 -wd4018 -wd4389 \
2366 -wd4146 -wd4057 -wd4204 -wd4706 -wd4305 \
2367 -wd4152 -wd4324 -we4013 -wd4100 -wd4214 \
2373 -fno-signed-zeros) ;;
2374 -lz) echo zlib.lib ;;
2375 -lavifil32) echo vfw32.lib ;;
2376 -lavicap32) echo vfw32.lib user32.lib ;;
2377 -l*) echo ${flag#-l}.lib ;;
2386 -flto) echo -Mipa=fast,libopt,libinline,vestigial ;;
2387 -fomit-frame-pointer) echo -Mnoframe ;;
2398 case "${flag#*=}" in
2399 native) echo -xtarget=native ;;
2400 v9|niagara) echo -xarch=sparc ;;
2401 ultrasparc) echo -xarch=sparcvis ;;
2402 ultrasparc3|niagara2) echo -xarch=sparcvis2 ;;
2403 i586|pentium) echo -xchip=pentium ;;
2404 i686|pentiumpro|pentium2) echo -xtarget=pentium_pro ;;
2405 pentium3*|c3-2) echo -xtarget=pentium3 ;;
2406 pentium-m) echo -xarch=sse2 -xchip=pentium3 ;;
2407 pentium4*) echo -xtarget=pentium4 ;;
2408 prescott|nocona) echo -xarch=sse3 -xchip=pentium4 ;;
2409 *-sse3) echo -xarch=sse3 ;;
2410 core2) echo -xarch=ssse3 -xchip=core2 ;;
2411 amdfam10|barcelona|bdver*) echo -xarch=sse4_1 ;;
2412 athlon-4|athlon-[mx]p) echo -xarch=ssea ;;
2413 k8|opteron|athlon64|athlon-fx)
2414 echo -xarch=sse2a ;;
2415 athlon*) echo -xarch=pentium_proa ;;
2418 -std=c99) echo -xc99 ;;
2419 -fomit-frame-pointer) echo -xregs=frameptr ;;
2420 -fPIC) echo -KPIC -xcode=pic32 ;;
2421 -W*,*) echo $flag ;;
2432 case "${flag#*=}" in
2433 armv7-a|cortex-a*) echo -mv=7a8 ;;
2434 armv7-r|cortex-r*) echo -mv=7r4 ;;
2435 armv7-m|cortex-m*) echo -mv=7m3 ;;
2436 armv6*|arm11*) echo -mv=6 ;;
2437 armv5*e|arm[79]*e*|arm9[24]6*|arm96*|arm102[26])
2439 armv4*|arm7*|arm9[24]*) echo -mv=4 ;;
2442 -mfpu=neon) echo --float_support=vfpv3 --neon ;;
2443 -mfpu=vfp) echo --float_support=vfpv2 ;;
2444 -mfpu=vfpv3) echo --float_support=vfpv3 ;;
2445 -mfpu=vfpv3-d16) echo --float_support=vfpv3d16 ;;
2446 -msoft-float) echo --float_support=vfplib ;;
2447 -O[0-3]|-mf=*) echo $flag ;;
2449 -pds=*) echo $flag ;;
2450 -D*|-I*) echo $flag ;;
2451 --gcc|--abi=*) echo $flag ;;
2461 unset _type _ident _cc_c _cc_e _cc_o _flags _cflags
2462 unset _ld_o _ldflags _ld_lib _ld_path
2463 unset _depflags _DEPCMD _DEPFLAGS
2466 if $_cc -v 2>&1 | grep -q '^gcc.*LLVM'; then
2468 gcc_extra_ver=$(expr "$($_cc --version | head -n1)" : '.*\((.*)\)')
2469 _ident="llvm-gcc $($_cc -dumpversion) $gcc_extra_ver"
2470 _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2473 elif $_cc -v 2>&1 | grep -qi ^gcc; then
2475 gcc_version=$($_cc --version | head -n1)
2476 gcc_basever=$($_cc -dumpversion)
2477 gcc_pkg_ver=$(expr "$gcc_version" : '[^ ]* \(([^)]*)\)')
2478 gcc_ext_ver=$(expr "$gcc_version" : ".*$gcc_pkg_ver $gcc_basever \\(.*\\)")
2479 _ident=$(cleanws "gcc $gcc_basever $gcc_pkg_ver $gcc_ext_ver")
2480 if ! $_cc -dumpversion | grep -q '^2\.'; then
2481 _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2485 elif $_cc --version 2>/dev/null | grep -q Intel; then
2487 _ident=$($_cc --version | head -n1)
2492 elif $_cc -v 2>&1 | grep -q xlc; then
2494 _ident=$($_cc -qversion 2>/dev/null | head -n1)
2496 _cflags_size='-O5 -qcompact'
2497 elif $_cc -V 2>/dev/null | grep -q Compaq; then
2499 _ident=$($_cc -V | head -n1 | cut -d' ' -f1-3)
2502 _ldflags='-Wl,-z,now' # calls to libots crash without this
2503 _cflags_speed='-fast'
2505 elif $_cc --vsn 2>/dev/null | grep -q "ARM C/C++ Compiler"; then
2506 test -d "$sysroot" || die "No valid sysroot specified."
2508 _ident=$($_cc --vsn | head -n1)
2509 armcc_conf="$PWD/armcc.conf"
2510 $_cc --arm_linux_configure \
2511 --arm_linux_config_file="$armcc_conf" \
2512 --configure_sysroot="$sysroot" \
2513 --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
2514 die "Error creating armcc configuration file."
2515 $_cc --vsn | grep -q RVCT && armcc_opt=rvct || armcc_opt=armcc
2516 _flags="--arm_linux_config_file=$armcc_conf --translate_gcc"
2517 as_default="${cross_prefix}gcc"
2521 elif $_cc -version 2>/dev/null | grep -Eq 'TMS470|TI ARM'; then
2523 _ident=$($_cc -version | head -n1 | tr -s ' ')
2524 _flags='--gcc --abi=eabi -me'
2527 _depflags='-ppa -ppd=$(@:.o=.d)'
2528 _cflags_speed='-O3 -mf=5'
2529 _cflags_size='-O3 -mf=2'
2530 _flags_filter=tms470_flags
2531 elif $_cc -v 2>&1 | grep -q clang; then
2533 _ident=$($_cc --version | head -n1)
2537 elif $_cc -V 2>&1 | grep -q Sun; then
2539 _ident=$($_cc -V 2>&1 | head -n1 | cut -d' ' -f 2-)
2540 _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "1s,^.*: ,$@: ," -e "\$$!s,\$$, \\\," -e "1!s,^.*: , ," > $(@:.o=.d)'
2541 _DEPFLAGS='-xM1 -xc99'
2544 _cflags_size='-O5 -xspace'
2545 _flags_filter=suncc_flags
2546 elif $_cc -v 2>&1 | grep -q 'PathScale\|Path64'; then
2548 _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
2549 _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2552 _flags_filter='filter_out -Wdisabled-optimization'
2553 elif $_cc -v 2>&1 | grep -q Open64; then
2555 _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
2556 _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2559 _flags_filter='filter_out -Wdisabled-optimization|-Wtype-limits|-fno-signed-zeros'
2560 elif $_cc -V 2>&1 | grep -q Portland; then
2562 _ident="PGI $($_cc -V 2>&1 | awk '/^pgcc/ { print $2; exit }')"
2563 opt_common='-alias=ansi -Mdse -Mlre -Mpre'
2564 _cflags_speed="-O3 -Mautoinline -Munroll=c:4 $opt_common"
2565 _cflags_size="-O2 -Munroll=c:1 $opt_common"
2567 _flags_filter=pgi_flags
2568 elif $_cc 2>&1 | grep -q Microsoft; then
2570 _ident=$($cc 2>&1 | head -n1)
2571 _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< 2>&1 | awk '\''/including/ { sub(/^.*file: */, ""); gsub(/\\/, "/"); if (!match($$0, / /)) print "$@:", $$0 }'\'' > $(@:.o=.d)'
2572 _DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -showIncludes -Zs'
2575 # Nonstandard output options, to avoid msys path conversion issues, relies on wrapper to remap it
2576 if $_cc 2>&1 | grep -q Linker; then
2583 _flags_filter=msvc_flags
2585 _ld_path='-libpath:'
2587 _cflags='-D_USE_MATH_DEFINES -Dinline=__inline -FIstdlib.h -Dstrtoll=_strtoi64'
2588 if [ $pfx = hostcc ]; then
2589 append _cflags -Dsnprintf=_snprintf
2594 eval ${pfx}_type=\$_type
2595 eval ${pfx}_ident=\$_ident
2599 eval ${1}_C=\${_cc_c-\${${1}_C}}
2600 eval ${1}_E=\${_cc_e-\${${1}_E}}
2601 eval ${1}_O=\${_cc_o-\${${1}_O}}
2603 if [ -n "$_depflags" ]; then
2604 eval ${1}_DEPFLAGS=\$_depflags
2606 eval ${1}DEP=\${_DEPCMD:-\$DEPCMD}
2607 eval ${1}DEP_FLAGS=\${_DEPFLAGS:-\$DEPFLAGS}
2608 eval DEP${1}FLAGS=\$_flags
2613 cflags_filter=$_flags_filter
2614 cflags_speed=$_cflags_speed
2615 cflags_size=$_cflags_size
2616 cflags_noopt=$_cflags_noopt
2617 add_cflags $_flags $_cflags
2618 cc_ldflags=$_ldflags
2621 probe_cc hostcc "$host_cc"
2622 host_cflags_filter=$_flags_filter
2623 add_host_cflags $_flags $_cflags
2626 test -n "$cc_type" && enable $cc_type ||
2627 warn "Unknown C compiler $cc, unable to select optimal CFLAGS"
2629 : ${as_default:=$cc}
2630 : ${dep_cc_default:=$cc}
2631 : ${ld_default:=$cc}
2632 : ${host_ld_default:=$host_cc}
2633 set_default ar as dep_cc ld host_ld
2636 asflags_filter=$_flags_filter
2637 add_asflags $_flags $_cflags
2641 ldflags_filter=$_flags_filter
2642 add_ldflags $_flags $_ldflags
2643 test "$cc_type" != "$ld_type" && add_ldflags $cc_ldflags
2645 LD_LIB=${_ld_lib-$LD_LIB}
2646 LD_PATH=${_ld_path-$LD_PATH}
2648 probe_cc hostld "$host_ld"
2649 host_ldflags_filter=$_flags_filter
2650 add_host_ldflags $_flags $_ldflags
2651 HOSTLD_O=${_ld_o-$HOSTLD_O}
2653 if [ -z "$CC_DEPFLAGS" ] && [ "$dep_cc" != "$cc" ]; then
2654 probe_cc depcc "$dep_cc"
2655 CCDEP=${_DEPCMD:-$DEPCMD}
2656 CCDEP_FLAGS=${_DEPFLAGS:=$DEPFLAGS}
2660 if $ar 2>&1 | grep -q Microsoft; then
2663 elif $ar 2>&1 | grep -q 'Texas Instruments'; then
2671 add_cflags $extra_cflags
2672 add_cxxflags $extra_cxxflags
2673 add_asflags $extra_cflags
2675 if test -n "$sysroot"; then
2678 add_cppflags --sysroot="$sysroot"
2679 add_ldflags --sysroot="$sysroot"
2682 add_cppflags -I"$sysinclude"
2683 add_ldflags --sysroot="$sysroot"
2688 if test "$cpu" = host; then
2689 enabled cross_compile && die "--cpu=host makes no sense when cross-compiling."
2694 $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
2696 s/.*$1=\\([^ ]*\\).*/\\1/
2701 cpu=$(check_native -march || check_native -mcpu)
2705 test "${cpu:-host}" = host && die "--cpu=host not supported with compiler $cc"
2708 # Deal with common $arch aliases
2727 "Power Macintosh"|ppc|powerpc|ppc64|powerpc64)
2743 i[3-6]86|i86pc|BePC|x86pc|x86_64|x86_32|amd64)
2748 is_in $arch $ARCH_LIST || warn "unknown architecture $arch"
2751 # Add processor-specific flags
2752 if test "$cpu" = generic; then
2754 elif enabled ppc; then
2756 case $(tolower $cpu) in
2757 601|ppc601|powerpc601)
2758 cpuflags="-mcpu=601"
2761 603*|ppc603*|powerpc603*)
2762 cpuflags="-mcpu=603"
2765 604*|ppc604*|powerpc604*)
2766 cpuflags="-mcpu=604"
2769 g3|75*|ppc75*|powerpc75*)
2770 cpuflags="-mcpu=750 -mpowerpc-gfxopt"
2773 g4|745*|ppc745*|powerpc745*)
2774 cpuflags="-mcpu=7450 -mpowerpc-gfxopt"
2776 74*|ppc74*|powerpc74*)
2777 cpuflags="-mcpu=7400 -mpowerpc-gfxopt"
2779 g5|970|ppc970|powerpc970)
2780 cpuflags="-mcpu=970 -mpowerpc-gfxopt -mpowerpc64"
2783 cpuflags="-mcpu=$cpu -mpowerpc-gfxopt -mpowerpc64"
2786 cpuflags="-mcpu=cell"
2790 cpuflags="-mcpu=e500mc"
2794 cpuflags="-mcpu=8548 -mhard-float -mfloat-gprs=double"
2798 cpuflags="-mcpu=8540 -mhard-float"
2803 elif enabled x86; then
2807 cpuflags="-march=$cpu"
2810 # targets that do NOT support conditional mov (cmov)
2811 pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
2812 cpuflags="-march=$cpu"
2815 # targets that do support conditional mov (cmov)
2816 i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64*|k8*|opteron*|athlon-fx|core2|amdfam10|barcelona|atom|bdver*)
2817 cpuflags="-march=$cpu"
2821 # targets that do support conditional mov but on which it's slow
2822 pentium4|pentium4m|prescott|nocona)
2823 cpuflags="-march=$cpu"
2829 elif enabled sparc; then
2833 cpuflags="-mcpu=$cpu"
2841 elif enabled arm; then
2845 cpuflags="-march=$cpu"
2846 subarch=$(echo $cpu | sed 's/[^a-z0-9]//g')
2849 cpuflags="-mcpu=$cpu"
2851 cortex-a*) subarch=armv7a ;;
2852 cortex-r*) subarch=armv7r ;;
2853 cortex-m*) enable thumb; subarch=armv7m ;;
2854 arm11*) subarch=armv6 ;;
2855 arm[79]*e*|arm9[24]6*|arm96*|arm102[26]) subarch=armv5te ;;
2856 armv4*|arm7*|arm9[24]*) subarch=armv4 ;;
2861 elif enabled alpha; then
2863 enabled ccc && cpuflags="-arch $cpu" || cpuflags="-mcpu=$cpu"
2865 elif enabled bfin; then
2867 cpuflags="-mcpu=$cpu"
2869 elif enabled mips; then
2871 cpuflags="-march=$cpu"
2887 24kef*|34kf*|1004kf*)
2895 elif enabled avr32; then
2900 cpuflags="-mpart=$cpu"
2904 cpuflags="-march=$cpu"
2908 cpuflags="-mcpu=$cpu"
2912 cpuflags="-march=$cpu"
2918 add_cflags $cpuflags
2919 add_asflags $cpuflags
2921 # compiler sanity check
2923 int main(void){ return 0; }
2925 if test "$?" != 0; then
2926 echo "$cc is unable to create an executable file."
2927 if test -z "$cross_prefix" && ! enabled cross_compile ; then
2928 echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
2929 echo "Only do this if you know what cross compiling means."
2931 die "C compiler test failed."
2934 add_cppflags -D_ISOC99_SOURCE
2935 add_cxxflags -D__STDC_CONSTANT_MACROS
2936 check_cflags -std=c99
2937 check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
2940 check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
2944 check_host_cflags -std=c99
2945 check_host_cflags -Wall
2948 alpha|ia64|mips|parisc|sparc)
2953 check_code cc "" "int test[(int)sizeof(char*) - 7]" && subarch="x86_64"
2954 if test "$subarch" = "x86_64"; then
2959 check_cc <<EOF && subarch="ppc64"
2960 int test[(int)sizeof(char*) - 7];
2966 enabled spic && enable pic
2971 prefix_default="/boot/common"
2972 network_extralibs="-lnetwork"
2977 SHFLAGS='-shared -Wl,-h,$$(@F)'
2978 enabled x86 && SHFLAGS="-mimpure-text $SHFLAGS"
2979 network_extralibs="-lsocket -lnsl"
2980 add_cppflags -D__EXTENSIONS__ -D_XOPEN_SOURCE=600
2981 # When using suncc to build, the Solaris linker will mark
2982 # an executable with each instruction set encountered by
2983 # the Solaris assembler. As our libraries contain their own
2984 # guards for processor-specific code, instead suppress
2985 # generation of the HWCAPS ELF section on Solaris x86 only.
2986 enabled_all suncc x86 && echo "hwcap_1 = OVERRIDE;" > mapfile && add_ldflags -Wl,-M,mapfile
2987 nm_default='nm -P -g'
2991 oss_indev_extralibs="-lossaudio"
2992 oss_outdev_extralibs="-lossaudio"
2993 enabled gcc || check_ldflags -Wl,-zmuldefs
2996 # On OpenBSD 4.5. the compiler does not use PIC unless
2997 # explicitly using -fPIC. FFmpeg builds fine without PIC,
2998 # however the generated executable will not do anything
2999 # (simply quits with exit-code 1, no crash, no output).
3000 # Thus explicitly enable PIC here.
3004 SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBVERSION)'
3006 oss_indev_extralibs="-lossaudio"
3007 oss_outdev_extralibs="-lossaudio"
3015 add_extralibs -lpoll -lgnugetopt
3019 gas="gas-preprocessor.pl $cc"
3020 enabled ppc && add_asflags -force_cpusubtype_ALL
3021 SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR)'
3022 enabled x86_32 && append SHFLAGS -Wl,-read_only_relocs,suppress
3024 add_ldflags -Wl,-dynamic,-search_paths_first
3026 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
3027 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
3028 FFSERVERLDFLAGS=-Wl,-bind_at_load
3030 enabled x86_64 && objformat="macho64"
3031 enabled_any pic shared ||
3032 { check_cflags -mdynamic-no-pic && add_asflags -mdynamic-no-pic; }
3035 if test $target_os = "mingw32ce"; then
3041 if enabled x86_64; then
3042 LIBTARGET="i386:x86-64"
3043 elif enabled arm; then
3046 shlibdir_default="$bindir_default"
3049 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
3050 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
3051 dlltool="${cross_prefix}dlltool"
3052 if check_cmd lib.exe -list; then
3053 SLIB_EXTRA_CMD='-lib.exe /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib)'
3054 if enabled x86_64; then
3057 elif check_cmd $dlltool --version; then
3058 SLIB_EXTRA_CMD=-'$(DLLTOOL) -m $(LIBTARGET) -d $$(@:$(SLIBSUF)=.def) -l $(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib) -D $(SLIBNAME_WITH_MAJOR)'
3060 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
3062 SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
3063 SLIB_INSTALL_EXTRA_LIB='lib$(SLIBNAME:$(SLIBSUF)=.dll.a) $(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
3064 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'
3068 add_cppflags -U__STRICT_ANSI__
3071 if enabled shared; then
3072 # Link to the import library instead of the normal static library
3075 # Cannot build shared and static libraries at the same time with
3079 shlibdir_default="$bindir_default"
3082 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
3083 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
3084 SLIB_CREATE_DEF_CMD='makedef $(SUBDIR)lib$(NAME).ver $(OBJS) > $$(@:$(SLIBSUF)=.def)'
3085 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
3087 SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
3088 SLIB_INSTALL_EXTRA_LIB='$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
3089 SHFLAGS='-dll -def:$$(@:$(SLIBSUF)=.def) -implib:$(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib)'
3096 shlibdir_default="$bindir_default"
3099 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
3100 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
3101 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
3103 SLIB_INSTALL_EXTRA_LIB='lib$(FULLNAME).dll.a'
3104 SHFLAGS='-shared -Wl,--out-implib,$(SUBDIR)lib$(FULLNAME).dll.a'
3107 add_cppflags -U__STRICT_ANSI__
3109 *-dos|freedos|opendos)
3110 network_extralibs="-lsocket"
3113 add_cppflags -U__STRICT_ANSI__
3116 add_cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
3121 ranlib="echo ignoring ranlib"
3127 add_cppflags -D_GNU_SOURCE
3128 add_ldflags -Zomf -Zbin-files -Zargs-wild -Zmap
3129 SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
3134 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
3135 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
3136 SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
3137 echo PROTMODE >> $(SUBDIR)$(NAME).def; \
3138 echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
3139 echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
3140 echo EXPORTS >> $(SUBDIR)$(NAME).def; \
3141 emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
3142 SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
3143 emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
3144 SLIB_INSTALL_EXTRA_LIB='$(LIBPREF)$(NAME)_dll.a $(LIBPREF)$(NAME)_dll.lib'
3146 enable_weak os2threads
3149 add_cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -D_BSD_SOURCE
3152 add_cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
3155 add_cppflags -D_QNX_SOURCE
3156 network_extralibs="-lsocket"
3161 add_cflags --include=$sysinclude/gcce/gcce.h -fvisibility=default
3162 add_cppflags -D__GCCE__ -D__SYMBIAN32__ -DSYMBIAN_OE_POSIX_SIGNALS
3163 add_ldflags -Wl,--target1-abs,--no-undefined \
3164 -Wl,-Ttext,0x80000,-Tdata,0x1000000 -shared \
3165 -Wl,--entry=_E32Startup -Wl,-u,_E32Startup
3166 add_extralibs -l:eexe.lib -l:usrt2_2.lib -l:dfpaeabi.dso \
3167 -l:drtaeabi.dso -l:scppnwdl.dso -lsupc++ -lgcc \
3168 -l:libc.dso -l:libm.dso -l:euser.dso -l:libcrt0.lib
3171 add_cppflags -D_OSF_SOURCE -D_POSIX_PII -D_REENTRANT
3179 die "Unknown OS '$target_os'."
3183 # determine libc flavour
3185 if check_cpp_condition features.h "defined __UCLIBC__"; then
3187 elif check_cpp_condition features.h "defined __GLIBC__"; then
3189 elif check_header _mingw.h; then
3191 check_cpp_condition _mingw.h \
3192 "defined (__MINGW64_VERSION_MAJOR) || (__MINGW32_MAJOR_VERSION > 3) || \
3193 (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
3194 die "ERROR: MinGW runtime version must be >= 3.15."
3195 if check_cpp_condition _mingw.h "defined(__MINGW64_VERSION_MAJOR) && \
3196 __MINGW64_VERSION_MAJOR < 3"; then
3197 add_compat msvcrt/snprintf.o
3198 add_cflags "-include $source_path/compat/msvcrt/snprintf.h"
3200 elif check_cpp_condition newlib.h "defined _NEWLIB_VERSION"; then
3202 elif check_func_headers stdlib.h _get_doserrno; then
3204 add_compat strtod.o strtod=avpriv_strtod
3205 add_compat msvcrt/snprintf.o snprintf=avpriv_snprintf \
3206 _snprintf=avpriv_snprintf \
3207 vsnprintf=avpriv_vsnprintf
3208 elif check_cpp_condition stddef.h "defined __KLIBC__"; then
3212 test -n "$libc_type" && enable $libc_type
3214 # hacks for compiler/libc/os combinations
3216 if enabled_all tms470 glibc; then
3217 CPPFLAGS="-I${source_path}/compat/tms470 ${CPPFLAGS}"
3218 add_cppflags -D__USER_LABEL_PREFIX__=
3219 add_cppflags -D__builtin_memset=memset
3220 add_cppflags -D__gnuc_va_list=va_list -D_VA_LIST_DEFINED
3221 add_cflags -pds=48 # incompatible redefinition of macro
3225 echo "$*" | sed 's/%/%25/g;s/:/%3a/g'
3228 echo "config:$arch:$subarch:$cpu:$target_os:$(esc $cc_ident):$(esc $FFMPEG_CONFIGURATION)" >config.fate
3230 check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable pic
3232 set_default $PATHS_LIST
3235 # we need to build at least one lib type
3236 if ! enabled_any static shared; then
3238 At least one library type must be built.
3239 Specify --enable-static to build the static libraries or --enable-shared to
3240 build the shared libraries as well. To only build the shared libraries specify
3241 --disable-static in addition to --enable-shared.
3246 die_license_disabled() {
3247 enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
3250 die_license_disabled_gpl() {
3251 enabled $1 || { enabled $2 && die "$2 is incompatible with the gpl and --enable-$1 is not specified."; }
3254 die_license_disabled gpl libcdio
3255 die_license_disabled gpl libutvideo
3256 die_license_disabled gpl libx264
3257 die_license_disabled gpl libxavs
3258 die_license_disabled gpl libxvid
3259 die_license_disabled gpl x11grab
3261 die_license_disabled nonfree libaacplus
3262 die_license_disabled nonfree libfaac
3263 enabled gpl && die_license_disabled_gpl nonfree libfdk_aac
3264 enabled gpl && die_license_disabled_gpl nonfree openssl
3266 die_license_disabled version3 libopencore_amrnb
3267 die_license_disabled version3 libopencore_amrwb
3268 die_license_disabled version3 libvo_aacenc
3269 die_license_disabled version3 libvo_amrwbenc
3271 enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
3273 disabled optimizations || check_cflags -fomit-frame-pointer
3282 enabled pic && enable_pic
3284 check_cc <<EOF || die "Symbol mangling check failed."
3287 sym=$($nm $TMPO | awk '/ff_extern/{ print substr($0, match($0, /[^ \t]*ff_extern/)) }')
3288 extern_prefix=${sym%%ff_extern*}
3290 check_cc <<EOF && enable_weak inline_asm
3291 void foo(void) { __asm__ volatile ("" ::); }
3295 for restrict_keyword in restrict __restrict__ __restrict; do
3296 check_cc <<EOF && _restrict=$restrict_keyword && break
3297 void foo(char * $restrict_keyword p);
3301 check_cc <<EOF && enable attribute_packed
3302 struct { int x; } __attribute__((packed)) x;
3305 check_cc <<EOF && enable attribute_may_alias
3306 union { int x; } __attribute__((may_alias)) x;
3309 check_cc <<EOF || die "endian test failed"
3310 unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
3312 od -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
3314 if enabled alpha; then
3318 elif enabled arm; then
3320 enabled thumb && check_cflags -mthumb || check_cflags -marm
3323 if check_cpp_condition stddef.h "defined __ARM_PCS_VFP"; then
3325 elif ! check_cpp_condition stddef.h "defined __ARM_PCS || defined __SOFTFP__"; then
3326 case "${cross_prefix:-$cc}" in
3327 *hardfloat*) enable vfp_args; fpabi=vfp ;;
3328 *) check_ld "cc" <<EOF && enable vfp_args && fpabi=vfp || fpabi=soft ;;
3329 __asm__ (".eabi_attribute 28, 1");
3330 int main(void) { return 0; }
3333 warn "Compiler does not indicate floating-point ABI, guessing $fpabi."
3336 enabled armv5te && check_inline_asm armv5te '"qadd r0, r0, r0"'
3337 enabled armv6 && check_inline_asm armv6 '"sadd16 r0, r0, r0"'
3338 enabled armv6t2 && check_inline_asm armv6t2 '"movt r0, #0"'
3339 enabled armvfp && check_inline_asm armvfp '"fadds s0, s0, s0"'
3340 enabled neon && check_inline_asm neon '"vadd.i16 q0, q0, q0"'
3341 enabled vfpv3 && check_inline_asm vfpv3 '"vmov.f32 s0, #1.0"'
3343 check_inline_asm asm_mod_q '"add r0, %Q0, %R0" :: "r"((long long)0)'
3344 check_inline_asm asm_mod_y '"vmul.i32 d0, d0, %y0" :: "x"(0)'
3346 enabled_all armv6t2 shared !pic && enable_pic
3348 elif enabled mips; then
3350 check_inline_asm loongson '"dmult.g $1, $2, $3"'
3351 enabled mips32r2 && add_cflags "-mips32r2" && add_asflags "-mips32r2" &&
3352 check_inline_asm mips32r2 '"rotr $t0, $t1, 1"'
3353 enabled mipsdspr1 && add_cflags "-mdsp" && add_asflags "-mdsp" &&
3354 check_inline_asm mipsdspr1 '"addu.qb $t0, $t1, $t2"'
3355 enabled mipsdspr2 && add_cflags "-mdspr2" && add_asflags "-mdspr2" &&
3356 check_inline_asm mipsdspr2 '"absq_s.qb $t0, $t1"'
3357 enabled mipsfpu && add_cflags "-mhard-float" && add_asflags "-mhard-float" &&
3358 check_inline_asm mipsfpu '"madd.d $f0, $f2, $f4, $f6"'
3360 elif enabled ppc; then
3362 enable local_aligned_8 local_aligned_16
3364 check_inline_asm dcbzl '"dcbzl 0, %0" :: "r"(0)'
3365 check_inline_asm ibm_asm '"add 0, 0, 0"'
3366 check_inline_asm ppc4xx '"maclhw r10, r11, r12"'
3367 check_inline_asm xform_asm '"lwzx %1, %y0" :: "Z"(*(int*)0), "r"(0)'
3369 # AltiVec flags: The FSF version of GCC differs from the Apple version
3370 if enabled altivec; then
3372 check_cflags -maltivec -mabi=altivec &&
3373 { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
3374 check_cflags -faltivec
3376 # check if our compiler supports Motorola AltiVec C API
3377 check_cc <<EOF || disable altivec
3380 vector signed int v1 = (vector signed int) { 0 };
3381 vector signed int v2 = (vector signed int) { 1 };
3382 v1 = vec_add(v1, v2);
3387 enabled altivec || warn "Altivec disabled, possibly missing --cpu flag"
3390 elif enabled sparc; then
3393 check_inline_asm vis '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc &&
3394 add_cflags -mcpu=ultrasparc -mtune=ultrasparc
3396 elif enabled x86; then
3398 check_code ld intrin.h "__rdtsc()" "cc" && enable rdtsc
3400 check_code ld mmintrin.h "_mm_empty()" "cc" && enable mm_empty
3402 enable local_aligned_8 local_aligned_16
3404 # check whether EBP is available on x86
3405 # As 'i' is stored on the stack, this program will crash
3406 # if the base pointer is used to access it because the
3407 # base pointer is cleared in the inline assembly code.
3408 check_exec_crash <<EOF && enable ebp_available
3410 __asm__ volatile ("xorl %%ebp, %%ebp" ::: "%ebp");
3414 # check whether EBX is available on x86
3415 check_inline_asm ebx_available '""::"b"(0)' &&
3416 check_inline_asm ebx_available '"":::"%ebx"'
3418 # check whether xmm clobbers are supported
3419 check_inline_asm xmm_clobbers '"":::"%xmm0"'
3421 # check whether binutils is new enough to compile SSSE3/MMXEXT
3422 enabled ssse3 && check_inline_asm ssse3_inline '"pabsw %xmm0, %xmm0"'
3423 enabled mmxext && check_inline_asm mmxext_inline '"pmaxub %mm0, %mm1"'
3425 if ! disabled_any asm mmx yasm; then
3426 if check_cmd $yasmexe --version; then
3427 enabled x86_64 && yasm_extra="-m amd64"
3428 yasm_debug="-g dwarf2"
3429 elif check_cmd nasm -v; then
3431 yasm_debug="-g -F dwarf"
3432 enabled x86_64 && test "$objformat" = elf && objformat=elf64
3435 YASMFLAGS="-f $objformat $yasm_extra"
3436 enabled pic && append YASMFLAGS "-DPIC"
3437 test -n "$extern_prefix" && append YASMFLAGS "-DPREFIX"
3438 case "$objformat" in
3439 elf*) enabled debug && append YASMFLAGS $yasm_debug ;;
3442 check_yasm "pextrd [eax], xmm0, 1" && enable yasm ||
3443 die "yasm not found, use --disable-yasm for a crippled build"
3444 check_yasm "vextractf128 xmm0, ymm0, 0" || disable avx_external
3445 check_yasm "vfmaddps ymm0, ymm1, ymm2, ymm3" || disable fma4_external
3446 check_yasm "CPU amdnop" && enable cpunop
3450 athlon*|opteron*|k8*|pentium|pentium-mmx|prescott|nocona|atom|geode)
3457 if enabled asm; then
3459 check_inline_asm gnu_as '".macro m n\n\\n:.int 0\n.endm\nm x"' ||
3460 $nogas "GNU assembler not found, install gas-preprocessor"
3463 check_ldflags -Wl,--as-needed
3465 if check_func dlopen; then
3467 elif check_func dlopen -ldl; then
3471 if enabled network; then
3472 check_type "sys/types.h sys/socket.h" socklen_t
3473 check_type netdb.h "struct addrinfo"
3474 check_type netinet/in.h "struct group_source_req" -D_BSD_SOURCE
3475 check_type netinet/in.h "struct ip_mreq_source" -D_BSD_SOURCE
3476 check_type netinet/in.h "struct ipv6_mreq" -D_DARWIN_C_SOURCE
3477 check_type netinet/in.h "struct sockaddr_in6"
3478 check_type poll.h "struct pollfd"
3479 check_type "sys/types.h sys/socket.h" "struct sockaddr_storage"
3480 check_struct "sys/types.h sys/socket.h" "struct sockaddr" sa_len
3481 check_type netinet/sctp.h "struct sctp_event_subscribe"
3482 check_func getaddrinfo $network_extralibs
3483 # Prefer arpa/inet.h over winsock2
3484 if check_header arpa/inet.h ; then
3485 check_func closesocket
3486 elif check_header winsock2.h ; then
3487 check_func_headers winsock2.h closesocket -lws2 &&
3488 network_extralibs="-lws2" ||
3489 { check_func_headers winsock2.h closesocket -lws2_32 &&
3490 network_extralibs="-lws2_32"; }
3491 check_func_headers ws2tcpip.h getaddrinfo $network_extralibs
3492 check_type ws2tcpip.h socklen_t
3493 check_type ws2tcpip.h "struct addrinfo"
3494 check_type ws2tcpip.h "struct group_source_req"
3495 check_type ws2tcpip.h "struct ip_mreq_source"
3496 check_type ws2tcpip.h "struct ipv6_mreq"
3497 check_type winsock2.h "struct pollfd"
3498 check_type ws2tcpip.h "struct sockaddr_in6"
3499 check_type ws2tcpip.h "struct sockaddr_storage"
3500 check_struct winsock2.h "struct sockaddr" sa_len
3506 # Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
3507 check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
3509 check_func clock_gettime || { check_func clock_gettime -lrt && add_extralibs -lrt; }
3512 check_func gethrtime
3514 check_func getrusage
3515 check_struct "sys/time.h sys/resource.h" "struct rusage" ru_maxrss
3516 check_func gettimeofday
3517 check_func inet_aton $network_extralibs
3519 check_func localtime_r
3520 check_func ${malloc_prefix}memalign && enable memalign
3524 check_func ${malloc_prefix}posix_memalign && enable posix_memalign
3525 check_func_headers malloc.h _aligned_malloc && enable aligned_malloc
3526 check_func setrlimit
3527 check_func strerror_r
3528 check_func sched_getaffinity
3532 check_func_headers conio.h kbhit
3533 check_func_headers windows.h PeekNamedPipe
3534 check_func_headers io.h setmode
3535 check_func_headers lzo/lzo1x.h lzo1x_999_compress
3536 check_lib2 "windows.h shellapi.h" CommandLineToArgvW -lshell32
3537 check_lib2 "windows.h wincrypt.h" CryptGenRandom -ladvapi32
3538 check_lib2 "windows.h psapi.h" GetProcessMemoryInfo -lpsapi
3539 check_func_headers windows.h GetProcessAffinityMask
3540 check_func_headers windows.h GetProcessTimes
3541 check_func_headers windows.h GetSystemTimeAsFileTime
3542 check_func_headers windows.h MapViewOfFile
3543 check_func_headers windows.h Sleep
3544 check_func_headers windows.h VirtualAlloc
3545 check_func_headers glob.h glob
3547 check_header direct.h
3548 check_header dlfcn.h
3550 check_header dxva2api.h -D_WIN32_WINNT=0x0600
3552 check_header libcrystalhd/libcrystalhd_if.h
3553 check_header malloc.h
3555 check_header sys/mman.h
3556 check_header sys/param.h
3557 check_header sys/resource.h
3558 check_header sys/select.h
3559 check_header sys/time.h
3560 check_header termios.h
3561 check_header unistd.h
3562 check_header vdpau/vdpau.h
3563 check_header vdpau/vdpau_x11.h
3564 check_header windows.h
3565 check_header X11/extensions/XvMClib.h
3566 check_header asm/types.h
3568 disabled zlib || check_lib zlib.h zlibVersion -lz || disable zlib
3569 disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
3571 # check for VDA header
3572 if ! disabled vda && ! enabled ppc; then
3573 if check_header VideoDecodeAcceleration/VDADecoder.h; then
3575 add_extralibs -framework CoreFoundation -framework VideoDecodeAcceleration -framework QuartzCore
3579 if ! disabled w32threads && ! enabled pthreads; then
3580 check_func _beginthreadex && enable w32threads
3583 # check for some common methods of building with pthread support
3584 # do this before the optional library checks as some of them require pthreads
3585 if ! disabled pthreads && ! enabled w32threads && ! enabled os2threads; then
3587 if check_func pthread_create; then
3589 elif check_func pthread_create -pthread; then
3591 add_extralibs -pthread
3592 elif check_func pthread_create -pthreads; then
3593 add_cflags -pthreads
3594 add_extralibs -pthreads
3595 elif check_func pthread_create -lpthreadGC2; then
3596 add_extralibs -lpthreadGC2
3597 elif ! check_lib pthread.h pthread_create -lpthread; then
3602 for thread in $THREADS_LIST; do
3603 if enabled $thread; then
3604 test -n "$thread_type" &&
3605 die "ERROR: Only one thread type must be selected." ||
3606 thread_type="$thread"
3610 if enabled pthreads; then
3611 check_func pthread_cancel
3614 check_lib math.h sin -lm && LIBM="-lm"
3615 disabled crystalhd || check_lib libcrystalhd/libcrystalhd_if.h DtsCrystalHDVersion -lcrystalhd || disable crystalhd
3616 enabled vaapi && require vaapi va/va.h vaInitialize -lva
3618 check_mathfunc cbrtf
3620 check_mathfunc exp2f
3621 check_mathfunc isinf
3622 check_mathfunc isnan
3623 check_mathfunc llrint
3624 check_mathfunc llrintf
3626 check_mathfunc log2f
3627 check_mathfunc lrint
3628 check_mathfunc lrintf
3630 check_mathfunc round
3631 check_mathfunc roundf
3632 check_mathfunc trunc
3633 check_mathfunc truncf
3635 # these are off by default, so fail if requested and not available
3636 enabled avisynth && require2 vfw32 "windows.h vfw.h" AVIFileInit -lavifil32
3637 enabled fontconfig && require_pkg_config fontconfig "fontconfig/fontconfig.h" FcInit
3638 enabled frei0r && { check_header frei0r.h || die "ERROR: frei0r.h header not found"; }
3639 enabled gnutls && require_pkg_config gnutls gnutls/gnutls.h gnutls_global_init
3640 enabled libiec61883 && require libiec61883 libiec61883/iec61883.h iec61883_cmp_connect -lraw1394 -lavc1394 -lrom1394 -liec61883
3641 enabled libaacplus && require "libaacplus >= 2.0.0" aacplus.h aacplusEncOpen -laacplus
3642 enabled libass && require_pkg_config libass ass/ass.h ass_library_init
3643 enabled libbluray && require libbluray libbluray/bluray.h bd_open -lbluray
3644 enabled libcdio && require2 libcdio "cdio/cdda.h cdio/paranoia.h" cdio_cddap_open -lcdio_paranoia -lcdio_cdda -lcdio
3645 enabled libcelt && require libcelt celt/celt.h celt_decode -lcelt0 &&
3646 { check_lib celt/celt.h celt_decoder_create_custom -lcelt0 ||
3647 die "ERROR: libcelt must be installed and version must be >= 0.11.0."; }
3648 enabled libcaca && require_pkg_config caca caca.h caca_create_canvas
3649 enabled libfaac && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
3650 enabled libfdk_aac && require libfdk_aac fdk-aac/aacenc_lib.h aacEncOpen -lfdk-aac
3651 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"
3652 enabled libflite && require2 libflite "flite/flite.h" flite_init $flite_libs
3653 enabled libfreetype && require_pkg_config freetype2 "ft2build.h freetype/freetype.h" FT_Init_FreeType
3654 enabled libgsm && require libgsm gsm/gsm.h gsm_create -lgsm
3655 enabled libilbc && require libilbc ilbc.h WebRtcIlbcfix_InitDecode -lilbc
3656 enabled libmodplug && require libmodplug libmodplug/modplug.h ModPlug_Load -lmodplug
3657 enabled libmp3lame && require "libmp3lame >= 3.98.3" lame/lame.h lame_set_VBR_quality -lmp3lame
3658 enabled libnut && require libnut libnut.h nut_demuxer_init -lnut
3659 enabled libopencore_amrnb && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb
3660 enabled libopencore_amrwb && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb
3661 enabled libopencv && require_pkg_config opencv opencv/cxcore.h cvCreateImageHeader
3662 enabled libopenjpeg && require libopenjpeg openjpeg.h opj_version -lopenjpeg
3663 enabled libopus && require_pkg_config opus opus_multistream.h opus_multistream_decoder_create
3664 enabled libpulse && require_pkg_config libpulse-simple pulse/simple.h pa_simple_new
3665 enabled librtmp && require_pkg_config librtmp librtmp/rtmp.h RTMP_Socket
3666 enabled libschroedinger && require_pkg_config schroedinger-1.0 schroedinger/schro.h schro_init
3667 enabled libspeex && require libspeex speex/speex.h speex_decoder_init -lspeex
3668 enabled libstagefright_h264 && require_cpp libstagefright_h264 "binder/ProcessState.h media/stagefright/MetaData.h
3669 media/stagefright/MediaBufferGroup.h media/stagefright/MediaDebug.h media/stagefright/MediaDefs.h
3670 media/stagefright/OMXClient.h media/stagefright/OMXCodec.h" android::OMXClient -lstagefright -lmedia -lutils -lbinder -lgnustl_static
3671 enabled libtheora && require libtheora theora/theoraenc.h th_info_init -ltheoraenc -ltheoradec -logg
3672 enabled libtwolame && require libtwolame twolame.h twolame_init -ltwolame &&
3673 { check_lib twolame.h twolame_encode_buffer_float32_interleaved -ltwolame ||
3674 die "ERROR: libtwolame must be installed and version must be >= 0.3.10"; }
3675 enabled libutvideo && require_cpp utvideo "stdint.h stdlib.h utvideo/utvideo.h utvideo/Codec.h" 'CCodec*' -lutvideo -lstdc++
3676 enabled libv4l2 && require_pkg_config libv4l2 libv4l2.h v4l2_ioctl
3677 enabled libvo_aacenc && require libvo_aacenc vo-aacenc/voAAC.h voGetAACEncAPI -lvo-aacenc
3678 enabled libvo_amrwbenc && require libvo_amrwbenc vo-amrwbenc/enc_if.h E_IF_init -lvo-amrwbenc
3679 enabled libvorbis && require libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
3681 enabled libvpx_decoder && { check_lib2 "vpx/vpx_decoder.h vpx/vp8dx.h" vpx_codec_dec_init_ver -lvpx ||
3682 die "ERROR: libvpx decoder must be installed and version must be >=0.9.1"; }
3683 enabled libvpx_encoder && { check_lib2 "vpx/vpx_encoder.h vpx/vp8cx.h" "vpx_codec_enc_init_ver VP8E_SET_MAX_INTRA_BITRATE_PCT" -lvpx ||
3684 die "ERROR: libvpx encoder version must be >=0.9.7"; } }
3685 enabled libx264 && require libx264 x264.h x264_encoder_encode -lx264 &&
3686 { check_cpp_condition x264.h "X264_BUILD >= 118" ||
3687 die "ERROR: libx264 must be installed and version must be >= 0.118."; }
3688 enabled libxavs && require libxavs xavs.h xavs_encoder_encode -lxavs
3689 enabled libxvid && require libxvid xvid.h xvid_global -lxvidcore
3690 enabled openal && { { for al_libs in "${OPENAL_LIBS}" "-lopenal" "-lOpenAL32"; do
3691 check_lib 'AL/al.h' alGetError "${al_libs}" && break; done } ||
3692 die "ERROR: openal not found"; } &&
3693 { check_cpp_condition "AL/al.h" "defined(AL_VERSION_1_1)" ||
3694 die "ERROR: openal must be installed and version must be 1.1 or compatible"; }
3695 enabled openssl && { check_lib openssl/ssl.h SSL_library_init -lssl -lcrypto ||
3696 check_lib openssl/ssl.h SSL_library_init -lssl32 -leay32 ||
3697 check_lib openssl/ssl.h SSL_library_init -lssl -lcrypto -lws2_32 -lgdi32 ||
3698 die "ERROR: openssl not found"; }
3700 if enabled gnutls; then
3701 { check_lib nettle/bignum.h nettle_mpz_get_str_256 -lnettle -lhogweed -lgmp && enable nettle; } ||
3702 { check_lib gcrypt.h gcry_mpi_new -lgcrypt && enable gcrypt; }
3706 if enabled libdc1394; then
3707 { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
3708 enable libdc1394_2; } ||
3709 { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
3710 enable libdc1394_1; } ||
3711 die "ERROR: No version of libdc1394 found "
3714 SDL_CONFIG="${cross_prefix}sdl-config"
3715 if check_pkg_config sdl SDL_events.h SDL_PollEvent; then
3716 check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
3718 check_struct SDL.h SDL_VideoInfo current_w $sdl_cflags && enable sdl_video_size
3720 if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
3721 sdl_cflags=$("${SDL_CONFIG}" --cflags)
3722 sdl_libs=$("${SDL_CONFIG}" --libs)
3723 check_func_headers SDL_version.h SDL_Linked_Version $sdl_cflags $sdl_libs &&
3724 check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
3726 check_struct SDL.h SDL_VideoInfo current_w $sdl_cflags && enable sdl_video_size
3729 enabled sdl && add_cflags $sdl_cflags && add_extralibs $sdl_libs
3731 texi2html --help 2> /dev/null | grep -q 'init-file' && enable texi2html || disable texi2html
3732 makeinfo --version > /dev/null 2>&1 && enable makeinfo || disable makeinfo
3733 perl --version > /dev/null 2>&1 && enable perl || disable perl
3734 pod2man --help > /dev/null 2>&1 && enable pod2man || disable pod2man
3736 check_header linux/fb.h
3737 check_header linux/videodev.h
3738 check_header linux/videodev2.h
3739 check_struct linux/videodev2.h "struct v4l2_frmivalenum" discrete
3741 check_header sys/videoio.h
3743 check_func_headers "windows.h vfw.h" capCreateCaptureWindow "$vfwcap_indev_extralibs"
3744 # check that WM_CAP_DRIVER_CONNECT is defined to the proper value
3745 # w32api 3.12 had it defined wrong
3746 check_cpp_condition vfw.h "WM_CAP_DRIVER_CONNECT > WM_USER" && enable vfwcap_defines
3748 check_type "dshow.h" IBaseFilter
3750 # check for ioctl_meteor.h, ioctl_bt848.h and alternatives
3751 { check_header dev/bktr/ioctl_meteor.h &&
3752 check_header dev/bktr/ioctl_bt848.h; } ||
3753 { check_header machine/ioctl_meteor.h &&
3754 check_header machine/ioctl_bt848.h; } ||
3755 { check_header dev/video/meteor/ioctl_meteor.h &&
3756 check_header dev/video/bktr/ioctl_bt848.h; } ||
3757 check_header dev/ic/bt8xx.h
3759 check_header sndio.h
3760 if check_struct sys/soundcard.h audio_buf_info bytes; then
3761 enable_safe sys/soundcard.h
3763 check_cc -D__BSD_VISIBLE -D__XSI_VISIBLE <<EOF && add_cppflags -D__BSD_VISIBLE -D__XSI_VISIBLE && enable_safe sys/soundcard.h
3764 #include <sys/soundcard.h>
3768 check_header soundcard.h
3770 enabled_any alsa_indev alsa_outdev && check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
3772 enabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack && check_func sem_timedwait &&
3773 check_func jack_port_get_latency_range -ljack
3775 enabled_any sndio_indev sndio_outdev && check_lib2 sndio.h sio_open -lsndio
3779 require X11 X11/Xlib.h XOpenDisplay -lX11 &&
3780 require Xext X11/extensions/XShm.h XShmCreateImage -lXext &&
3781 require Xfixes X11/extensions/Xfixes.h XFixesGetCursorImage -lXfixes
3783 if ! disabled vaapi; then
3784 check_lib va/va.h vaInitialize -lva && {
3785 check_cpp_condition va/va_version.h "VA_CHECK_VERSION(0,32,0)" ||
3786 warn "Please upgrade to VA-API >= 0.32 if you would like full VA-API support.";
3790 if ! disabled vdpau && enabled vdpau_vdpau_h; then
3791 check_cpp_condition vdpau/vdpau.h "defined VDP_DECODER_PROFILE_MPEG4_PART2_ASP" ||
3792 { echolog "Please upgrade to libvdpau >= 0.2 if you would like vdpau support." && disable vdpau; }
3795 enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel"
3796 enabled coverage && add_cflags "-fprofile-arcs -ftest-coverage" && add_ldflags "-fprofile-arcs -ftest-coverage"
3797 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"
3799 # add some useful compiler flags if supported
3800 check_cflags -Wdeclaration-after-statement
3802 check_cflags -Wno-parentheses
3803 check_cflags -Wno-switch
3804 check_cflags -Wno-format-zero-length
3805 check_cflags -Wdisabled-optimization
3806 check_cflags -Wpointer-arith
3807 check_cflags -Wredundant-decls
3808 check_cflags -Wno-pointer-sign
3809 check_cflags -Wwrite-strings
3810 check_cflags -Wtype-limits
3811 check_cflags -Wundef
3812 check_cflags -Wmissing-prototypes
3813 check_cflags -Wno-pointer-to-int-cast
3814 check_cflags -Wstrict-prototypes
3815 enabled extra_warnings && check_cflags -Winline
3817 # add some linker flags
3818 check_ldflags -Wl,--warn-common
3819 check_ldflags -Wl,-rpath-link=libpostproc:libswresample:libswscale:libavfilter:libavdevice:libavformat:libavcodec:libavutil:libavresample
3820 test_ldflags -Wl,-Bsymbolic && append SHFLAGS -Wl,-Bsymbolic
3822 enabled xmm_clobber_test &&
3823 check_ldflags -Wl,--wrap,avcodec_open2 \
3824 -Wl,--wrap,avcodec_decode_audio4 \
3825 -Wl,--wrap,avcodec_decode_video2 \
3826 -Wl,--wrap,avcodec_decode_subtitle2 \
3827 -Wl,--wrap,avcodec_encode_audio2 \
3828 -Wl,--wrap,avcodec_encode_video \
3829 -Wl,--wrap,avcodec_encode_subtitle \
3830 -Wl,--wrap,sws_scale ||
3831 disable xmm_clobber_test
3834 if test_ldflags -Wl,--version-script,$TMPV; then
3835 append SHFLAGS '-Wl,--version-script,\$(SUBDIR)lib\$(NAME).ver'
3836 check_cc <<EOF && enable symver_asm_label
3837 void ff_foo(void) __asm__ ("av_foo@VERSION");
3838 void ff_foo(void) { ${inline_asm+__asm__($quotes);} }
3840 check_cc <<EOF && enable symver_gnu_asm
3841 __asm__(".symver ff_foo,av_foo@VERSION");
3842 void ff_foo(void) {}
3846 if [ -z "$optflags" ]; then
3847 if enabled small; then
3848 optflags=$cflags_size
3849 elif enabled optimizations; then
3850 optflags=$cflags_speed
3852 optflags=$cflags_noopt
3858 enabled lto && check_ldflags "$@"
3862 if enabled lto; then
3863 test "$cc_type" != "$ld_type" && die "LTO requires same compiler and linker"
3865 check_ldflags -flto $cpuflags
3868 check_optflags $optflags
3869 check_optflags -fno-math-errno
3870 check_optflags -fno-signed-zeros
3872 enabled ftrapv && check_cflags -ftrapv
3874 check_cc -mno-red-zone <<EOF && noredzone_flags="-mno-red-zone"
3879 if enabled icc; then
3880 # Just warnings, no remarks
3882 # -wd: Disable following warnings
3883 # 144, 167, 556: -Wno-pointer-sign
3884 # 1292: attribute "foo" ignored
3885 # 1419: external declaration in primary source file
3886 # 10006: ignoring unknown option -fno-signed-zeros
3887 # 10148: ignoring unknown option -Wno-parentheses
3888 # 10156: ignoring option '-W'; no argument required
3889 check_cflags -wd144,167,556,1292,1419,10006,10148,10156
3890 # 11030: Warning unknown option --as-needed
3891 # 10156: ignoring option '-export'; no argument required
3892 check_ldflags -wd10156,11030
3893 # Allow to compile with optimizations
3894 check_ldflags -march=$cpu
3895 # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
3896 enable ebp_available
3897 if enabled x86_32; then
3898 icc_version=$($cc -dumpversion)
3899 test ${icc_version%%.*} -ge 11 &&
3900 check_cflags -falign-stack=maintain-16-byte ||
3901 disable aligned_stack
3903 elif enabled ccc; then
3904 # disable some annoying warnings
3905 add_cflags -msg_disable cvtu32to64
3906 add_cflags -msg_disable embedcomment
3907 add_cflags -msg_disable needconstext
3908 add_cflags -msg_disable nomainieee
3909 add_cflags -msg_disable ptrmismatch1
3910 add_cflags -msg_disable unreachcode
3911 elif enabled gcc; then
3912 check_optflags -fno-tree-vectorize
3913 check_cflags -Werror=implicit-function-declaration
3914 check_cflags -Werror=missing-prototypes
3915 check_cflags -Werror=vla
3916 elif enabled llvm_gcc; then
3917 check_cflags -mllvm -stack-alignment=16
3918 elif enabled clang; then
3919 check_cflags -mllvm -stack-alignment=16
3920 check_cflags -Qunused-arguments
3921 elif enabled armcc; then
3922 # 2523: use of inline assembler is deprecated
3923 add_cflags -W${armcc_opt},--diag_suppress=2523
3924 add_cflags -W${armcc_opt},--diag_suppress=1207
3925 add_cflags -W${armcc_opt},--diag_suppress=1293 # assignment in condition
3926 add_cflags -W${armcc_opt},--diag_suppress=3343 # hardfp compat
3927 add_cflags -W${armcc_opt},--diag_suppress=167 # pointer sign
3928 add_cflags -W${armcc_opt},--diag_suppress=513 # pointer sign
3929 elif enabled tms470; then
3930 add_cflags -pds=824 -pds=837
3931 elif enabled pathscale; then
3932 add_cflags -fstrict-overflow -OPT:wrap_around_unsafe_opt=OFF
3933 elif enabled msvc; then
3934 enabled x86_32 && disable aligned_stack
3937 enabled_any $THREADS_LIST && enable threads
3939 enabled asm || { arch=c; disable $ARCH_LIST $ARCH_EXT_LIST; }
3941 check_deps $CONFIG_LIST \
3947 if test $target_os = "haiku"; then
3949 disable posix_memalign
3952 ! enabled_any memalign posix_memalign aligned_malloc &&
3953 enabled_any $need_memalign && enable memalign_hack
3956 # -> enable ${lib}_deps_${dep}
3957 # -> add $dep to ${lib}_deps only once
3961 enabled "${lib}_deps_${dep}" && return 0
3962 enable "${lib}_deps_${dep}"
3963 prepend "${lib}_deps" $dep
3966 # merge deps lib components
3967 # merge all ${component}_deps into ${lib}_deps and ${lib}_deps_*
3972 enabled $comp || continue
3973 eval "dep=\"\$${comp}_deps\""
3980 merge_deps libavfilter $FILTER_LIST
3982 echo "install prefix $prefix"
3983 echo "source path $source_path"
3984 echo "C compiler $cc"
3985 echo "ARCH $arch ($cpu)"
3986 if test "$build_suffix" != ""; then
3987 echo "build suffix $build_suffix"
3989 if test "$progs_suffix" != ""; then
3990 echo "progs suffix $progs_suffix"
3992 if test "$extra_version" != ""; then
3993 echo "version string suffix $extra_version"
3995 echo "big-endian ${bigendian-no}"
3996 echo "runtime cpu detection ${runtime_cpudetect-no}"
3997 if enabled x86; then
3998 echo "${yasmexe} ${yasm-no}"
3999 echo "MMX enabled ${mmx-no}"
4000 echo "MMXEXT enabled ${mmxext-no}"
4001 echo "3DNow! enabled ${amd3dnow-no}"
4002 echo "3DNow! extended enabled ${amd3dnowext-no}"
4003 echo "SSE enabled ${sse-no}"
4004 echo "SSSE3 enabled ${ssse3-no}"
4005 echo "AVX enabled ${avx-no}"
4006 echo "FMA4 enabled ${fma4-no}"
4007 echo "CMOV enabled ${cmov-no}"
4008 echo "CMOV is fast ${fast_cmov-no}"
4009 echo "EBX available ${ebx_available-no}"
4010 echo "EBP available ${ebp_available-no}"
4012 if enabled arm; then
4013 echo "ARMv5TE enabled ${armv5te-no}"
4014 echo "ARMv6 enabled ${armv6-no}"
4015 echo "ARMv6T2 enabled ${armv6t2-no}"
4016 echo "ARM VFP enabled ${armvfp-no}"
4017 echo "NEON enabled ${neon-no}"
4019 if enabled mips; then
4020 echo "MIPS FPU enabled ${mipsfpu-no}"
4021 echo "MIPS32R2 enabled ${mips32r2-no}"
4022 echo "MIPS DSP R1 enabled ${mipsdspr1-no}"
4023 echo "MIPS DSP R2 enabled ${mipsdspr2-no}"
4025 if enabled ppc; then
4026 echo "AltiVec enabled ${altivec-no}"
4027 echo "PPC 4xx optimizations ${ppc4xx-no}"
4028 echo "dcbzl available ${dcbzl-no}"
4030 if enabled sparc; then
4031 echo "VIS enabled ${vis-no}"
4033 echo "debug symbols ${debug-no}"
4034 echo "strip symbols ${stripping-no}"
4035 echo "optimize for size ${small-no}"
4036 echo "optimizations ${optimizations-no}"
4037 echo "static ${static-no}"
4038 echo "shared ${shared-no}"
4039 echo "postprocessing support ${postproc-no}"
4040 echo "new filter support ${avfilter-no}"
4041 echo "network support ${network-no}"
4042 echo "threading support ${thread_type-no}"
4043 echo "safe bitstream reader ${safe_bitstream_reader-no}"
4044 echo "SDL support ${sdl-no}"
4045 echo "libdxva2 enabled ${dxva2-no}"
4046 echo "libva enabled ${vaapi-no}"
4047 echo "libvdpau enabled ${vdpau-no}"
4048 echo "AVISynth enabled ${avisynth-no}"
4049 echo "frei0r enabled ${frei0r-no}"
4050 echo "gnutls enabled ${gnutls-no}"
4051 echo "libaacplus enabled ${libaacplus-no}"
4052 echo "libass enabled ${libass-no}"
4053 echo "libcaca enabled ${libcaca-no}"
4054 echo "libcdio support ${libcdio-no}"
4055 echo "libcelt enabled ${libcelt-no}"
4056 echo "libdc1394 support ${libdc1394-no}"
4057 echo "libfaac enabled ${libfaac-no}"
4058 echo "libfdk-aac enabled ${libfdk_aac-no}"
4059 echo "libgsm enabled ${libgsm-no}"
4060 echo "libiec61883 support ${libiec61883-no}"
4061 echo "libilbc enabled ${libilbc-no}"
4062 echo "libmodplug enabled ${libmodplug-no}"
4063 echo "libmp3lame enabled ${libmp3lame-no}"
4064 echo "libnut enabled ${libnut-no}"
4065 echo "libopencore-amrnb support ${libopencore_amrnb-no}"
4066 echo "libopencore-amrwb support ${libopencore_amrwb-no}"
4067 echo "libopencv support ${libopencv-no}"
4068 echo "libopenjpeg enabled ${libopenjpeg-no}"
4069 echo "libopus enabled ${libopus-no}"
4070 echo "libpulse enabled ${libpulse-no}"
4071 echo "librtmp enabled ${librtmp-no}"
4072 echo "libschroedinger enabled ${libschroedinger-no}"
4073 echo "libspeex enabled ${libspeex-no}"
4074 echo "libstagefright-h264 enabled ${libstagefright_h264-no}"
4075 echo "libtheora enabled ${libtheora-no}"
4076 echo "libtwolame enabled ${libtwolame-no}"
4077 echo "libutvideo enabled ${libutvideo-no}"
4078 echo "libv4l2 enabled ${libv4l2-no}"
4079 echo "libvo-aacenc support ${libvo_aacenc-no}"
4080 echo "libvo-amrwbenc support ${libvo_amrwbenc-no}"
4081 echo "libvorbis enabled ${libvorbis-no}"
4082 echo "libvpx enabled ${libvpx-no}"
4083 echo "libx264 enabled ${libx264-no}"
4084 echo "libxavs enabled ${libxavs-no}"
4085 echo "libxvid enabled ${libxvid-no}"
4086 echo "openal enabled ${openal-no}"
4087 echo "openssl enabled ${openssl-no}"
4088 echo "zlib enabled ${zlib-no}"
4089 echo "bzlib enabled ${bzlib-no}"
4090 echo "texi2html enabled ${texi2html-no}"
4091 echo "perl enabled ${perl-no}"
4092 echo "pod2man enabled ${pod2man-no}"
4093 echo "makeinfo enabled ${makeinfo-no}"
4094 test -n "$random_seed" &&
4095 echo "random seed ${random_seed}"
4098 for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
4099 echo "Enabled ${type}s:"
4100 eval list=\$$(toupper $type)_LIST
4101 print_enabled '_*' $list | sort | pr -r -3 -t
4105 license="LGPL version 2.1 or later"
4106 if enabled nonfree; then
4107 license="nonfree and unredistributable"
4108 elif enabled gplv3; then
4109 license="GPL version 3 or later"
4110 elif enabled lgplv3; then
4111 license="LGPL version 3 or later"
4112 elif enabled gpl; then
4113 license="GPL version 2 or later"
4116 echo "License: $license"
4118 echo "Creating config.mak and config.h..."
4120 test -e Makefile || $ln_s "$source_path/Makefile" .
4122 enabled stripping || strip="echo skipping strip"
4124 config_files="$TMPH config.mak"
4126 cat > config.mak <<EOF
4127 # Automatically generated by configure - do not modify!
4128 ifndef FFMPEG_CONFIG_MAK
4130 FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION
4132 LIBDIR=\$(DESTDIR)$libdir
4133 SHLIBDIR=\$(DESTDIR)$shlibdir
4134 INCDIR=\$(DESTDIR)$incdir
4135 BINDIR=\$(DESTDIR)$bindir
4136 DATADIR=\$(DESTDIR)$datadir
4137 MANDIR=\$(DESTDIR)$mandir
4138 SRC_PATH=$source_path
4139 ifndef MAIN_MAKEFILE
4140 SRC_PATH:=\$(SRC_PATH:.%=..%)
4149 DEPCCFLAGS=$DEPCCFLAGS \$(CPPFLAGS)
4151 DEPASFLAGS=$DEPASFLAGS \$(CPPFLAGS)
4176 LDFLAGS-ffserver=$FFSERVERLDFLAGS
4178 YASMFLAGS=$YASMFLAGS
4179 BUILDSUF=$build_suffix
4180 PROGSSUF=$progs_suffix
4188 EXTRA_VERSION=$extra_version
4191 CCDEP_FLAGS=$CCDEP_FLAGS
4193 ASDEP_FLAGS=$ASDEP_FLAGS
4194 CC_DEPFLAGS=$CC_DEPFLAGS
4195 AS_DEPFLAGS=$AS_DEPFLAGS
4198 HOSTCFLAGS=$host_cflags
4199 HOSTEXESUF=$HOSTEXESUF
4200 HOSTLDFLAGS=$host_ldflags
4203 DEPHOSTCCFLAGS=$DEPHOSTCCFLAGS \$(HOSTCCFLAGS)
4204 HOSTCCDEP=$HOSTCCDEP
4205 HOSTCCDEP_FLAGS=$HOSTCCDEP_FLAGS
4206 HOSTCC_DEPFLAGS=$HOSTCC_DEPFLAGS
4210 TARGET_EXEC=$target_exec
4211 TARGET_PATH=$target_path
4212 LIBS-ffplay=$sdl_libs
4213 CFLAGS-ffplay=$sdl_cflags
4214 ZLIB=$($ldflags_filter -lz)
4215 LIB_INSTALL_EXTRA_CMD=$LIB_INSTALL_EXTRA_CMD
4216 EXTRALIBS=$extralibs
4217 COMPAT_OBJS=$compat_objs
4219 LIBTARGET=${LIBTARGET}
4220 SLIBNAME=${SLIBNAME}
4221 SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}
4222 SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}
4223 SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}
4224 SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}
4225 SLIB_INSTALL_NAME=${SLIB_INSTALL_NAME}
4226 SLIB_INSTALL_LINKS=${SLIB_INSTALL_LINKS}
4227 SLIB_INSTALL_EXTRA_LIB=${SLIB_INSTALL_EXTRA_LIB}
4228 SLIB_INSTALL_EXTRA_SHLIB=${SLIB_INSTALL_EXTRA_SHLIB}
4229 SAMPLES:=${samples:-\$(FATE_SAMPLES)}
4230 NOREDZONE_FLAGS=$noredzone_flags
4235 name=$(toupper $lcname)
4236 file=$source_path/$lcname/version.h
4237 eval $(awk "/#define ${name}_VERSION_M/ { print \$2 \"=\" \$3 }" "$file")
4238 eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
4239 eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
4240 eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
4245 file=$source_path/$2
4246 # This condition will be removed when we stop supporting old libpostproc versions
4247 if ! test "$name" = LIBPOSTPROC || test "$postproc_version" = current; then
4248 eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
4249 eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
4251 lcname=$(tolower $name)
4252 eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
4253 eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
4256 get_version_old LIBPOSTPROC libpostproc/version.h
4258 get_version libavcodec
4259 get_version libavdevice
4260 get_version libavfilter
4261 get_version libavformat
4262 get_version libavresample
4263 get_version libavutil
4264 get_version libswresample
4265 get_version libswscale
4268 /* Automatically generated by configure - do not modify! */
4269 #ifndef FFMPEG_CONFIG_H
4270 #define FFMPEG_CONFIG_H
4271 #define FFMPEG_CONFIGURATION "$(c_escape $FFMPEG_CONFIGURATION)"
4272 #define FFMPEG_LICENSE "$(c_escape $license)"
4273 #define FFMPEG_DATADIR "$(eval c_escape $datadir)"
4274 #define AVCONV_DATADIR "$(eval c_escape $datadir)"
4275 #define CC_IDENT "$(c_escape ${cc_ident:-Unknown compiler})"
4276 #define av_restrict $_restrict
4277 #define EXTERN_PREFIX "${extern_prefix}"
4278 #define EXTERN_ASM ${extern_prefix}
4279 #define SLIBSUF "$SLIBSUF"
4280 #define HAVE_MMX2 HAVE_MMXEXT
4283 test -n "$assert_level" &&
4284 echo "#define ASSERT_LEVEL $assert_level" >>$TMPH
4286 test -n "$malloc_prefix" &&
4287 echo "#define MALLOC_PREFIX $malloc_prefix" >>$TMPH
4289 if enabled yasm; then
4290 append config_files $TMPASM
4294 print_config ARCH_ "$config_files" $ARCH_LIST
4295 print_config HAVE_ "$config_files" $HAVE_LIST
4296 print_config CONFIG_ "$config_files" $CONFIG_LIST \
4300 echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
4301 echo "endif # FFMPEG_CONFIG_MAK" >> config.mak
4303 # Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
4304 cp_if_changed $TMPH config.h
4307 enabled yasm && cp_if_changed $TMPASM config.asm
4310 /* Generated by ffconf */
4311 #ifndef AVUTIL_AVCONFIG_H
4312 #define AVUTIL_AVCONFIG_H
4315 test "$postproc_version" != current && cat >> $TMPH <<EOF
4316 #define LIBPOSTPROC_VERSION_MAJOR $LIBPOSTPROC_VERSION_MAJOR
4317 #define LIBPOSTPROC_VERSION_MINOR $LIBPOSTPROC_VERSION_MINOR
4318 #define LIBPOSTPROC_VERSION_MICRO $LIBPOSTPROC_VERSION_MICRO
4321 print_config AV_HAVE_ $TMPH $HAVE_LIST_PUB
4323 echo "#endif /* AVUTIL_AVCONFIG_H */" >> $TMPH
4325 cp_if_changed $TMPH libavutil/avconfig.h
4327 test -n "$WARNINGS" && printf "\n$WARNINGS"
4329 # build pkg-config files
4331 pkgconfig_generate(){
4333 shortname=${name#lib}${build_suffix}
4338 enabled ${name#lib} || return 0
4340 cat <<EOF > $name/$name.pc
4342 exec_prefix=\${prefix}
4347 Description: $comment
4349 Requires: $(enabled shared || echo $requires)
4350 Requires.private: $(enabled shared && echo $requires)
4352 Libs: -L\${libdir} -l${shortname} $(enabled shared || echo $libs)
4353 Libs.private: $(enabled shared && echo $libs)
4354 Cflags: -I\${includedir}
4357 mkdir -p doc/examples/pc-uninstalled
4358 includedir=${source_path}
4359 [ "$includedir" = . ] && includedir="\${pcfiledir}/../../.."
4360 cat <<EOF > doc/examples/pc-uninstalled/$name.pc
4363 libdir=\${pcfiledir}/../../../$name
4364 includedir=${includedir}
4367 Description: $comment
4371 Libs: -L\${libdir} -l${shortname} $(enabled shared || echo $libs)
4372 Cflags: -I\${includedir}
4376 libavfilter_pc_deps=""
4377 enabled libavfilter_deps_avcodec && prepend libavfilter_pc_deps "libavcodec = $LIBAVCODEC_VERSION,"
4378 enabled libavfilter_deps_avformat && prepend libavfilter_pc_deps "libavformat = $LIBAVFORMAT_VERSION,"
4379 enabled libavfilter_deps_swscale && prepend libavfilter_pc_deps "libswscale = $LIBSWSCALE_VERSION,"
4380 enabled libavfilter_deps_swresample && prepend libavfilter_pc_deps "libswresample = $LIBSWRESAMPLE_VERSION,"
4381 enabled libavfilter_deps_postproc && prepend libavfilter_pc_deps "libpostproc = $LIBPOSTPROC_VERSION,"
4382 libavfilter_pc_deps=${libavfilter_pc_deps%, }
4384 libavdevice_pc_deps="libavformat = $LIBAVFORMAT_VERSION"
4385 enabled lavfi_indev && prepend libavdevice_pc_deps "libavfilter = $LIBAVFILTER_VERSION,"
4387 pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION" "$LIBM"
4388 pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
4389 pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
4390 pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "$libavdevice_pc_deps"
4391 pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "$libavfilter_pc_deps"
4392 pkgconfig_generate libpostproc "FFmpeg postprocessing library" "$LIBPOSTPROC_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"
4393 pkgconfig_generate libavresample "Libav audio resampling library" "$LIBAVRESAMPLE_VERSION" "$extralibs"
4394 pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "$LIBM" "libavutil = $LIBAVUTIL_VERSION"
4395 pkgconfig_generate libswresample "FFmpeg audio rescaling library" "$LIBSWRESAMPLE_VERSION" "$LIBM" "libavutil = $LIBAVUTIL_VERSION"
4397 fix_ffmpeg_remote(){
4400 fixme_remote=$(git --git-dir=$source_path/.git --work-tree=$source_path remote -v | grep $git_remote_from | cut -f 1 | sort | uniq)
4401 if [ "$fixme_remote" != "" ]; then
4403 Outdated domain in git config, the official domain for ffmpeg git is since
4404 November 2011, source.ffmpeg.org, both the old and the new point to the same
4405 repository and server. To update it enter the following commands:
4407 for remote in $fixme_remote; do
4408 echolog "git remote set-url $remote $git_remote_to"
4413 if test -f "$source_path/.git/config"; then
4414 remote_from=git.videolan.org
4415 remote_to=source.ffmpeg.org
4416 fix_ffmpeg_remote git@$remote_from:ffmpeg git@$remote_to:ffmpeg
4417 fix_ffmpeg_remote git://$remote_from/ffmpeg git://$remote_to/ffmpeg