3 # Libav 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 LIBAV, 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 Libav."
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 --quiet Suppress showing informative output
67 --list-decoders show all available decoders
68 --list-encoders show all available encoders
69 --list-hwaccels show all available hardware accelerators
70 --list-demuxers show all available demuxers
71 --list-muxers show all available muxers
72 --list-parsers show all available parsers
73 --list-protocols show all available protocols
74 --list-bsfs show all available bitstream filters
75 --list-indevs show all available input devices
76 --list-outdevs show all available output devices
77 --list-filters show all available filters
80 --logfile=FILE log tests and output to FILE [config.log]
81 --disable-logging do not log configure debug information
82 --prefix=PREFIX install in PREFIX [$prefix_default]
83 --bindir=DIR install binaries in DIR [PREFIX/bin]
84 --datadir=DIR install data files in DIR [PREFIX/share/avconv]
85 --docdir=DIR install documentation in DIR [PREFIX/share/doc/libav]
86 --libdir=DIR install libs in DIR [PREFIX/lib]
87 --shlibdir=DIR install shared libs in DIR [PREFIX/lib]
88 --incdir=DIR install includes in DIR [PREFIX/include]
89 --mandir=DIR install man page in DIR [PREFIX/share/man]
90 --enable-rpath use rpath when linking programs (USE WITH CARE)
93 --enable-gpl allow use of GPL code, the resulting libs
94 and binaries will be under GPL [no]
95 --enable-version3 upgrade (L)GPL to version 3 [no]
96 --enable-nonfree allow use of nonfree code, the resulting libs
97 and binaries will be unredistributable [no]
99 Configuration options:
100 --disable-static do not build static libraries [no]
101 --enable-shared build shared libraries [no]
102 --enable-small optimize for size instead of speed
103 --enable-runtime-cpudetect detect CPU capabilities at runtime (bigger binary)
104 --enable-gray enable full grayscale support (slower color)
105 --disable-swscale-alpha disable alpha channel support in swscale
106 --disable-all disable building components, libraries and programs
109 --disable-programs do not build command line programs
110 --disable-avconv disable avconv build
111 --disable-avplay disable avplay build
112 --disable-avprobe disable avprobe build
113 --disable-avserver deprecated, does nothing
116 --disable-doc do not build documentation
117 --disable-pod2man do not build manual pages
118 --disable-texi2html do not build HTML documentation
119 --disable-avdevice disable libavdevice build
120 --disable-avcodec disable libavcodec build
121 --disable-avformat disable libavformat build
122 --disable-avutil disable libavutil build
123 --disable-swscale disable libswscale build
124 --disable-avfilter disable video filter support [no]
125 --disable-avresample disable libavresample build [no]
126 --disable-pthreads disable pthreads [auto]
127 --disable-w32threads disable Win32 threads [auto]
128 --disable-network disable network support [no]
129 --disable-dct disable DCT code
130 --disable-error-resilience disable error resilience code
131 --disable-lsp disable LSP code
132 --disable-lzo disable LZO decoder code
133 --disable-mdct disable MDCT code
134 --disable-rdft disable RDFT code
135 --disable-fft disable FFT code
136 --disable-faan disable floating point AAN (I)DCT code
138 Individual component options:
139 --disable-everything disable all components listed below
140 --disable-encoder=NAME disable encoder NAME
141 --enable-encoder=NAME enable encoder NAME
142 --disable-encoders disable all encoders
143 --disable-decoder=NAME disable decoder NAME
144 --enable-decoder=NAME enable decoder NAME
145 --disable-decoders disable all decoders
146 --disable-hwaccel=NAME disable hwaccel NAME
147 --enable-hwaccel=NAME enable hwaccel NAME
148 --disable-hwaccels disable all hwaccels
149 --disable-muxer=NAME disable muxer NAME
150 --enable-muxer=NAME enable muxer NAME
151 --disable-muxers disable all muxers
152 --disable-demuxer=NAME disable demuxer NAME
153 --enable-demuxer=NAME enable demuxer NAME
154 --disable-demuxers disable all demuxers
155 --enable-parser=NAME enable parser NAME
156 --disable-parser=NAME disable parser NAME
157 --disable-parsers disable all parsers
158 --enable-bsf=NAME enable bitstream filter NAME
159 --disable-bsf=NAME disable bitstream filter NAME
160 --disable-bsfs disable all bitstream filters
161 --enable-protocol=NAME enable protocol NAME
162 --disable-protocol=NAME disable protocol NAME
163 --disable-protocols disable all protocols
164 --enable-indev=NAME enable input device NAME
165 --disable-indev=NAME disable input device NAME
166 --disable-indevs disable input devices
167 --enable-outdev=NAME enable output device NAME
168 --disable-outdev=NAME disable output device NAME
169 --disable-outdevs disable output devices
170 --disable-devices disable all devices
171 --enable-filter=NAME enable filter NAME
172 --disable-filter=NAME disable filter NAME
173 --disable-filters disable all filters
175 External library support:
177 Using any of the following switches will allow Libav to link to the
178 corresponding external library. All the components depending on that library
179 will become enabled, if all their other dependencies are met and they are not
180 explicitly disabled. E.g. --enable-libwavpack will enable linking to
181 libwavpack and allow the libwavpack encoder to be built, unless it is
182 specifically disabled with --disable-encoder=libwavpack.
184 Note that only the system libraries are auto-detected. All the other external
185 libraries must be explicitly enabled.
187 Also note that the following help text describes the purpose of the libraries
188 themselves, not all their features will necessarily be usable by Libav.
190 --enable-avisynth video frameserver
191 --enable-bzlib bzip2 compression [autodetect]
192 --enable-frei0r video filtering plugins
193 --enable-gnutls crypto
194 --enable-libbs2b Bauer stereophonic-to-binaural DSP
195 --enable-libcdio audio CD input
196 --enable-libdc1394 IEEE 1394/Firewire camera input
197 --enable-libdcadec DCA audio decoding
198 --enable-libfaac AAC audio encoding
199 --enable-libfdk-aac AAC audio encoding/decoding
200 --enable-libfontconfig font configuration and management
201 --enable-libfreetype font rendering
202 --enable-libgsm GSM audio encoding/decoding
203 --enable-libhdcd HDCD decoding filter
204 --enable-libilbc ILBC audio encoding/decoding
205 --enable-libkvazaar HEVC video encoding
206 --enable-libmp3lame MP3 audio encoding
207 --enable-libopencore-amrnb AMR-NB audio encoding/decoding
208 --enable-libopencore-amrwb AMR-WB audio decoding
209 --enable-libopencv computer vision
210 --enable-libopenh264 H.264 video encoding/decoding
211 --enable-libopenjpeg JPEG 2000 image encoding/decoding
212 --enable-libopus Opus audio encoding/decoding
213 --enable-libpulse Pulseaudio sound server
214 --enable-librtmp RTMP streaming
215 --enable-libschroedinger Dirac video encoding/decoding
216 --enable-libsnappy snappy compression
217 --enable-libspeex Speex audio encoding/decoding
218 --enable-libtheora Theora video encoding/decoding
219 --enable-libtwolame MP2 audio encoding
220 --enable-libvo-aacenc AAC audio encoding
221 --enable-libvo-amrwbenc AMR-WB audio encoding
222 --enable-libvorbis Vorbis audio encoding/decoding
223 --enable-libvpx VP* video encoding/decoding
224 --enable-libwavpack Wavpack audio encoding/decoding
225 --enable-libwebp WebP image encoding/decoding
226 --enable-libx264 H.264 video encoding
227 --enable-libx265 HEVC video encoding
228 --enable-libxavs Chinese AVS video encoding
229 --enable-libxcb X window system protocol communication
230 --enable-libxcb-shm X11 shm communication [auto]
231 --enable-libxcb-xfixes X11 mouse rendering [auto]
232 --enable-libxvid MPEG-4 ASP video encoding
233 --enable-openssl crypto
234 --enable-zlib compression [autodetect]
236 The following libraries provide various hardware acceleration features:
237 --enable-cuda Nvidia CUDA (dynamically linked)
238 --enable-d3d11va Microsoft Direct3D 11 video acceleration [auto]
239 --enable-dxva2 Microsoft DirectX 9 video acceleration [auto]
240 --enable-libmfx Intel MediaSDK (AKA Quick Sync Video)
241 --enable-libnpp Nvidia CUDA processing
242 --enable-mmal Broadcom Multi-Media Abstraction Layer (Raspberry Pi)
243 --enable-nvenc Nvidia video encoding
244 --enable-omx OpenMAX IL
245 --enable-omx-rpi OpenMAX IL for Raspberry Pi
246 --enable-vaapi Video Acceleration API (mainly Unix/Intel)
247 --enable-vda Apple Video Decode Acceleration [auto]
248 --enable-vdpau Nvidia Video Decode and Presentation API for Unix [auto]
251 --arch=ARCH select architecture [$arch]
252 --cpu=CPU select the minimum required CPU (affects
253 instruction selection, may crash on older CPUs)
254 --cross-prefix=PREFIX use PREFIX for compilation tools [$cross_prefix]
255 --enable-cross-compile assume a cross-compiler is used
256 --sysroot=PATH root of cross-build tree
257 --sysinclude=PATH location of cross-build system headers
258 --target-os=OS compiler targets OS [$target_os]
259 --target-exec=CMD command to run executables on target
260 --target-path=DIR path to view of build directory on target
261 --target-samples=DIR path to samples directory on target
262 --toolchain=NAME set tool defaults according to NAME
264 --ar=AR use archive tool AR [$ar_default]
265 --as=AS use assembler AS [$as_default]
266 --cc=CC use C compiler CC [$cc_default]
267 --objcc=OCC use ObjC compiler OCC [$cc_default]
268 --dep-cc=DEPCC use dependency generator DEPCC [$cc_default]
269 --ld=LD use linker LD
270 --pkg-config=PKGCONFIG use pkg-config tool PKGCONFIG [$pkg_config_default]
271 --pkg-config-flags=FLAGS pass additional flags to pkgconf []
272 --host-cc=HOSTCC use host C compiler HOSTCC
273 --host-cflags=HCFLAGS use HCFLAGS when compiling for host
274 --host-cppflags=HCPPFLAGS use HCPPFLAGS when compiling for host
275 --host-ld=HOSTLD use host linker HOSTLD
276 --host-ldflags=HLDFLAGS use HLDFLAGS when linking for host
277 --host-libs=HLIBS use libs HLIBS when linking for host
278 --host-os=OS compiler host OS [$target_os]
279 --extra-cflags=ECFLAGS add ECFLAGS to CFLAGS [$CFLAGS]
280 --extra-objcflags=FLAGS add FLAGS to OBJCFLAGS [$CFLAGS]
281 --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]
282 --extra-ldexeflags=ELDFLAGS add ELDFLAGS to LDEXEFLAGS [$LDEXEFLAGS]
283 --extra-libs=ELIBS add ELIBS [$ELIBS]
284 --extra-version=STRING version string suffix []
285 --optflags=OPTFLAGS override optimization-related compiler flags
286 --build-suffix=SUFFIX library name suffix []
287 --enable-pic build position-independent code
288 --enable-thumb compile for Thumb instruction set
289 --enable-lto use link-time optimization
290 --env="ENV=override" override the environment variables
292 Advanced options (experts only):
293 --malloc-prefix=PREFIX prefix malloc and related names with PREFIX
294 --custom-allocator=NAME use a supported custom allocator
295 --disable-symver disable symbol versioning
296 --enable-hardcoded-tables use hardcoded tables instead of runtime generation
297 --disable-safe-bitstream-reader
298 disable buffer boundary checking in bitreaders
299 (faster, but may crash)
300 --enable-sram allow use of on-chip SRAM
302 Optimization options (experts only):
303 --disable-asm disable all assembly optimizations
304 --disable-altivec disable AltiVec optimizations
305 --disable-vsx disable VSX optimizations
306 --disable-power8 disable POWER8 optimizations
307 --disable-amd3dnow disable 3DNow! optimizations
308 --disable-amd3dnowext disable 3DNow! extended optimizations
309 --disable-mmx disable MMX optimizations
310 --disable-mmxext disable MMXEXT optimizations
311 --disable-sse disable SSE optimizations
312 --disable-sse2 disable SSE2 optimizations
313 --disable-sse3 disable SSE3 optimizations
314 --disable-ssse3 disable SSSE3 optimizations
315 --disable-sse4 disable SSE4 optimizations
316 --disable-sse42 disable SSE4.2 optimizations
317 --disable-avx disable AVX optimizations
318 --disable-xop disable XOP optimizations
319 --disable-fma3 disable FMA3 optimizations
320 --disable-fma4 disable FMA4 optimizations
321 --disable-avx2 disable AVX2 optimizations
322 --disable-armv5te disable armv5te optimizations
323 --disable-armv6 disable armv6 optimizations
324 --disable-armv6t2 disable armv6t2 optimizations
325 --disable-vfp disable VFP optimizations
326 --disable-neon disable NEON optimizations
327 --disable-inline-asm disable use of inline assembly
328 --disable-yasm disable use of nasm/yasm assembly
330 Developer options (useful when working on Libav itself):
331 --disable-debug disable debugging symbols
332 --enable-debug=LEVEL set the debug level [$debuglevel]
333 --disable-optimizations disable compiler optimizations
334 --enable-extra-warnings enable more compiler warnings
335 --samples=PATH location of test samples for FATE, if not set use
336 \$LIBAV_SAMPLES at make invocation time.
337 --enable-neon-clobber-test check NEON registers for clobbering (should be
338 used only for debugging purposes)
339 --enable-xmm-clobber-test check XMM registers for clobbering (Win64-only;
340 should be used only for debugging purposes)
341 --enable-random randomly enable/disable components
343 --enable-random=LIST randomly enable/disable specific components or
344 --disable-random=LIST component groups. LIST is a comma-separated list
345 of NAME[:PROB] entries where NAME is a component
346 (group) and PROB the probability associated with
348 --random-seed=VALUE seed value for --enable/disable-random
349 --disable-valgrind-backtrace do not print a backtrace under Valgrind
350 (only applies to --disable-optimizations builds)
352 NOTE: Object files are built at the place where configure is launched.
360 echo "$@" >> $logfile
367 printf '%5s %s\n' "${i}" "${line}"
369 done < $1 >> $logfile
380 WARNINGS="${WARNINGS}WARNING: $*\n"
387 If you think configure made a mistake, make sure you are using the latest
388 version from Git. If the latest version fails, report the problem to the
389 libav-tools@libav.org mailing list or IRC #libav on irc.freenode.net.
391 if disabled logging; then
393 Rerun configure with logging enabled (do not use --disable-logging), and
394 include the log this produces with your report.
398 Include the log file "$logfile" produced by configure as this will help
405 # Avoid locale weirdness, besides we really just want to translate ASCII.
407 echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
411 echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
415 echo "$*" | sed 's/["\\]/\\\0/g'
419 v=$(echo "$1" | sed "s/'/'\\\\''/g")
420 test "x$v" = "x${v#*[!A-Za-z0-9_/.+-]}" || v="'$v'"
425 echo "$@" | sed 's/^ *//;s/ */ /g;s/ *$//'
432 eval "case $v in $pat) printf '%s ' $v ;; esac"
440 eval "case $v in $pat) ;; *) printf '%s ' $v ;; esac"
447 for v; do eval $m; done
453 for v; do echo ${v}${suffix}; done
468 eval : \${$var:=$value}
473 echo $@ | sed 's/[^A-Za-z0-9_]/_/g'
479 eval $(sanitize_var_name "$var")='$*'
483 eval echo \$$(sanitize_var_name "$1")
488 eval level=\${${pvar}_level:=0}
489 eval ${pvar}_${level}="\$$pvar"
490 eval ${pvar}_level=$(($level+1))
496 eval level=\${${pvar}_level:-0}
497 test $level = 0 && continue
498 eval level=$(($level-1))
499 eval $pvar="\${${pvar}_${level}}"
500 eval ${pvar}_level=$level
501 eval unset ${pvar}_${level}
523 enable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
529 disable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
535 enabled $var && continue
536 eval sel="\$${var}_select"
537 eval sgs="\$${var}_suggest"
541 enable_deep_weak $sgs
553 disabled $var && continue
562 test "${1#!}" = "$1" && op== || op=!=
563 eval test "x\$${1#!}" $op "xyes"
567 test "${1#!}" = "$1" && op== || op=!=
568 eval test "x\$${1#!}" $op "xno"
573 enabled $opt || return 1
579 disabled $opt || return 1
585 enabled $opt && return 0
591 disabled $opt && return 0
598 eval : \${$opt:=\$${opt}_default}
606 [ $var = $value ] && return 0
614 enabled ${cfg}_checking && die "Circular dependency for $cfg."
615 disabled ${cfg}_checking && continue
616 enable ${cfg}_checking
619 eval dep_all="\$${cfg}_deps"
620 eval dep_any="\$${cfg}_deps_any"
621 eval dep_sel="\$${cfg}_select"
622 eval dep_sgs="\$${cfg}_suggest"
623 eval dep_ifa="\$${cfg}_if"
624 eval dep_ifn="\$${cfg}_if_any"
626 pushvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
627 do_check_deps $dep_all $dep_any $dep_sel $dep_sgs $dep_ifa $dep_ifn
628 popvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
630 [ -n "$dep_ifa" ] && { enabled_all $dep_ifa && enable_weak $cfg; }
631 [ -n "$dep_ifn" ] && { enabled_any $dep_ifn && enable_weak $cfg; }
632 enabled_all $dep_all || disable $cfg
633 enabled_any $dep_any || disable $cfg
634 disabled_any $dep_sel && disable $cfg
636 if enabled $cfg; then
638 enable_deep_weak $dep_sgs
641 disable ${cfg}_checking
650 for cfg in $allopts; do
651 enabled $cfg || continue
652 eval dep_extralibs="\$${cfg}_extralibs"
653 test -n "$dep_extralibs" && add_extralibs $dep_extralibs
661 map 'eval echo "$v \${$v:-no}"' "$@" |
662 awk "BEGIN { split(\"$files\", files) }
664 c = \"$pfx\" toupper(\$1);
670 if (file ~ /\\.h\$/) {
671 printf(\"#define %s %d\\n\", c, v) >>file;
672 } else if (file ~ /\\.asm\$/) {
673 printf(\"%%define %s %d\\n\", c, v) >>file;
674 } else if (file ~ /\\.mak\$/) {
675 n = -v ? \"\" : \"!\";
676 printf(\"%s%s=yes\\n\", n, c) >>file;
686 enabled $v && printf "%s\n" ${v%$suf}
693 eval "$var=\"\$$var $*\""
699 eval "$var=\"$* \$$var\""
705 for tok in $(eval echo \$$var); do
706 uniq_list="$(filter_out $tok $uniq_list) $tok"
708 eval "$var=\"${uniq_list}\""
716 append CFLAGS $($cflags_filter "$@")
720 append ASFLAGS $($asflags_filter "$@")
724 append OBJCFLAGS $($objcflags_filter "$@")
728 append LDFLAGS $($ldflags_filter "$@")
732 append LDEXEFLAGS $($ldflags_filter "$@")
736 append STRIPFLAGS "$@"
740 prepend extralibs $($ldflags_filter "$@")
744 append host_cppflags "$@"
748 append host_cflags $($host_cflags_filter "$@")
752 append host_ldflags $($host_ldflags_filter "$@")
756 append compat_objs $1
758 map 'add_cppflags -D$v' "$@"
763 "$@" >> $logfile 2>&1
767 eval printf '%s\\n' $CC_O
771 eval printf '%s\\n' $CC_E
778 check_cmd $cc $CPPFLAGS $CFLAGS "$@" $CC_C $(cc_o $TMPO) $TMPC
785 check_cmd $objcc $CPPFLAGS $CFLAGS $OBJCFLAGS "$@" $OBJCC_C $(cc_o $TMPO) $TMPC
792 check_cmd $cc $CPPFLAGS $CFLAGS "$@" $(cc_e $TMPO) $TMPC
796 eval printf '%s\\n' $AS_O
803 check_cmd $as $CPPFLAGS $ASFLAGS "$@" $AS_C $(as_o $TMPO) $TMPS
807 log check_inline_asm "$@"
812 check_cc "$@" <<EOF && enable $name
813 void foo(void){ __asm__ volatile($code); }
819 check_inline_asm ${1}_inline "\"$2\""
820 echo "$2" | check_as && enable ${1}_external || disable ${1}_external
828 check_cmd $yasmexe $YASMFLAGS "$@" -o $TMPO $TMPS
832 eval printf '%s\\n' $LD_O
837 flags=$(filter_out '-l*' "$@")
838 libs=$(filter '-l*' "$@")
839 check_cc $($cflags_filter $flags) || return
840 flags=$($ldflags_filter $flags)
841 libs=$($ldflags_filter $libs)
842 check_cmd $ld $LDFLAGS $flags $(ld_o $TMPE) $TMPO $libs $extralibs
847 test "${hdr%.h}" = "${hdr}" &&
848 echo "#include $hdr" ||
849 echo "#include <$hdr>"
859 for hdr in $headers; do
862 echo "int main(void) { $code; return 0; }"
863 } | check_$check "$@"
867 log check_cppflags "$@"
868 check_cpp "$@" <<EOF && append CPPFLAGS "$@"
875 set -- $($cflags_filter "$@")
882 log check_cflags "$@"
883 test_cflags "$@" && add_cflags "$@"
887 log test_objcflags "$@"
888 set -- $($objcflags_filter "$@")
889 check_objcc "$@" <<EOF
895 log check_objcflags "$@"
896 test_objcflags "$@" && add_objcflags "$@"
900 log test_ldflags "$@"
902 int main(void){ return 0; }
907 log check_ldflags "$@"
908 test_ldflags "$@" && add_ldflags "$@"
912 log test_stripflags "$@"
913 # call check_cc to get a fresh TMPO
915 int main(void) { return 0; }
917 check_cmd $strip $STRIPFLAGS "$@" $TMPO
921 log check_stripflags "$@"
922 test_stripflags "$@" && add_stripflags "$@"
926 log check_header "$@"
930 check_cpp "$@" <<EOF && enable_safe $header
941 check_ld "$@" <<EOF && enable $func
943 int main(void){ $func(); }
948 log check_mathfunc "$@"
952 test $narg = 2 && args="f, g" || args="f"
954 check_ld "$@" <<EOF && enable $func
956 float foo(float f, float g) { return $func($args); }
957 int main(void){ return 0; }
961 check_func_headers(){
962 log check_func_headers "$@"
967 for hdr in $headers; do
970 for func in $funcs; do
971 echo "long check_$func(void) { return (long) $func; }"
973 echo "int main(void) { return 0; }"
974 } | check_ld "$@" && enable $funcs && enable_safe $headers
977 check_cpp_condition(){
978 log check_cpp_condition "$@"
985 #error "unsatisfied condition: $condition"
991 log test_cflags_cpp "$@"
995 set -- $($cflags_filter "$flags")
998 #error "unsatisfied condition: $condition"
1008 check_func_headers "$headers" "$funcs" "$@" && add_extralibs "$@"
1012 log check_pkg_config "$@"
1017 check_cmd $pkg_config --exists --print-errors $pkg || return
1018 pkg_cflags=$($pkg_config --cflags $pkg_config_flags $pkg)
1019 pkg_libs=$($pkg_config --libs $pkg_config_flags $pkg)
1020 check_func_headers "$headers" "$funcs" $pkg_cflags $pkg_libs "$@" &&
1021 set_safe "${pkg}_cflags" $pkg_cflags &&
1022 set_safe "${pkg}_libs" $pkg_libs
1026 check_ld "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
1030 log check_exec_crash "$@"
1033 # exit() is not async signal safe. _Exit (C99) and _exit (POSIX)
1034 # are safe but may not be available everywhere. Thus we use
1035 # raise(SIGTERM) instead. The check is run in a subshell so we
1036 # can redirect the "Terminated" message from the shell. SIGBUS
1037 # is not defined by standard C so it is used conditionally.
1039 (check_exec "$@") >> $logfile 2>&1 <<EOF
1041 static void sighandler(int sig){
1047 int (*func_ptr)(void) = foo;
1049 signal(SIGILL, sighandler);
1050 signal(SIGFPE, sighandler);
1051 signal(SIGSEGV, sighandler);
1053 signal(SIGBUS, sighandler);
1065 disable_safe "$type"
1066 check_code cc "$headers" "$type v" "$@" && enable_safe "$type"
1070 log check_struct "$@"
1075 disable_safe "${struct}_${member}"
1076 check_code cc "$headers" "const void *p = &(($struct *)0)->$member" "$@" &&
1077 enable_safe "${struct}_${member}"
1081 log check_builtin "$@"
1087 check_code ld "$headers" "$builtin" "$@" && enable "$name"
1090 check_compile_assert(){
1091 log check_compile_assert "$@"
1097 check_code cc "$headers" "char c[2 * !!($condition) - 1]" "$@" && enable "$name"
1106 check_lib "$headers" $func "$@" || die "ERROR: $name not found"
1109 require_pkg_config(){
1110 log require_pkg_config "$@"
1112 check_pkg_config "$@" || die "ERROR: $pkg not found"
1113 add_cflags $(get_safe "${pkg}_cflags")
1114 add_extralibs $(get_safe "${pkg}_libs")
1118 eval printf '%s\\n' $HOSTCC_E
1122 eval printf '%s\\n' $HOSTCC_O
1126 log check_host_cc "$@"
1129 check_cmd $host_cc $host_cflags "$@" $HOSTCC_C $(hostcc_o $TMPO) $TMPC
1133 log check_host_cpp "$@"
1136 check_cmd $host_cc $host_cppflags $host_cflags "$@" $(hostcc_e $TMPO) $TMPC
1139 check_host_cppflags(){
1140 log check_host_cppflags "$@"
1141 check_host_cpp "$@" <<EOF && append host_cppflags "$@"
1146 check_host_cflags(){
1147 log check_host_cflags "$@"
1148 set -- $($host_cflags_filter "$@")
1149 check_host_cc "$@" <<EOF && append host_cflags "$@"
1154 check_host_cpp_condition(){
1155 log check_host_cpp_condition "$@"
1159 check_host_cpp "$@" <<EOF
1162 #error "unsatisfied condition: $condition"
1170 "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
1174 cmp -s "$1" "$2" && { test "$quiet" != "yes" && echo "$2 is unchanged"; } && return
1175 mkdir -p "$(dirname $2)"
1179 # CONFIG_LIST contains configurable options, while HAVE_LIST is for
1180 # system-dependent things.
1182 AVCODEC_COMPONENTS="
1190 AVDEVICE_COMPONENTS="
1194 AVFILTER_COMPONENTS="
1197 AVFORMAT_COMPONENTS="
1203 AVRESAMPLE_COMPONENTS=""
1204 AVUTIL_COMPONENTS=""
1208 $AVDEVICE_COMPONENTS
1209 $AVFILTER_COMPONENTS
1210 $AVFORMAT_COMPONENTS
1211 $AVRESAMPLE_COMPONENTS
1216 decode_audio_example
1217 decode_video_example
1218 encode_audio_example
1219 encode_video_example
1220 filter_audio_example
1224 transcode_aac_example
1227 HWACCEL_LIBRARY_NONFREE_LIST="
1231 HWACCEL_LIBRARY_LIST="
1232 $HWACCEL_LIBRARY_NONFREE_LIST
1244 EXTERNAL_LIBRARY_GPL_LIST="
1252 EXTERNAL_LIBRARY_NONFREE_LIST="
1258 EXTERNAL_LIBRARY_VERSION3_LIST="
1265 EXTERNAL_LIBRARY_LIST="
1266 $EXTERNAL_LIBRARY_GPL_LIST
1267 $EXTERNAL_LIBRARY_NONFREE_LIST
1268 $EXTERNAL_LIBRARY_VERSION3_LIST
1309 safe_bitstream_reader
1355 $EXTERNAL_LIBRARY_LIST
1356 $HWACCEL_LIBRARY_LIST
1419 ARCH_EXT_LIST_X86_SIMD="
1447 $ARCH_EXT_LIST_X86_SIMD
1452 ARCH_EXT_LIST_MIPS="
1489 sync_val_compare_and_swap
1503 AVFoundation_AVFoundation_h
1508 cdio_paranoia_paranoia_h
1510 dev_bktr_ioctl_bt848_h
1511 dev_bktr_ioctl_meteor_h
1513 dev_video_bktr_ioctl_bt848_h
1514 dev_video_meteor_ioctl_meteor_h
1522 machine_ioctl_bt848_h
1523 machine_ioctl_meteor_h
1588 GetProcessAffinityMask
1589 GetProcessMemoryInfo
1592 GetSystemTimeAsFileTime
1597 jack_port_get_latency_range
1609 SetConsoleTextAttribute
1620 TOOLCHAIN_FEATURES="
1642 CONDITION_VARIABLE_Ptr
1645 struct_group_source_req
1646 struct_ip_mreq_source
1649 struct_rusage_ru_maxrss
1651 struct_sockaddr_sa_len
1652 struct_sockaddr_storage
1653 struct_v4l2_frmivalenum_discrete
1658 $(add_suffix _external $ARCH_EXT_LIST)
1659 $(add_suffix _inline $ARCH_EXT_LIST)
1676 MMAL_PARAMETER_VIDEO_MAX_NUM_CALLBACKS
1685 # options emitted with CONFIG_ prefix but not available on the command line
1831 # code dependency declarations
1833 # architecture extensions
1838 armv8_deps="aarch64"
1839 neon_deps_any="aarch64 arm"
1840 intrinsics_neon_deps="neon"
1841 vfp_deps_any="aarch64 arm"
1844 map 'eval ${v}_inline_deps=inline_asm' $ARCH_EXT_LIST_ARM
1852 x86_64_select="i686"
1853 x86_64_suggest="fast_cmov"
1856 amd3dnowext_deps="amd3dnow"
1872 mmx_external_deps="yasm"
1873 mmx_inline_deps="inline_asm"
1874 mmx_suggest="mmx_external mmx_inline"
1876 for ext in $(filter_out mmx $ARCH_EXT_LIST_X86_SIMD); do
1877 eval dep=\$${ext}_deps
1878 eval ${ext}_external_deps='"${dep}_external"'
1879 eval ${ext}_inline_deps='"${dep}_inline"'
1880 eval ${ext}_suggest='"${ext}_external ${ext}_inline"'
1883 aligned_stack_if_any="aarch64 ppc x86"
1884 fast_64bit_if_any="aarch64 alpha ia64 mips64 parisc64 ppc64 sparc64 x86_64"
1885 fast_clz_if_any="aarch64 alpha avr32 mips ppc x86"
1886 fast_unaligned_if_any="aarch64 ppc x86"
1887 simd_align_16_if_any="altivec neon sse"
1888 simd_align_32_if_any="avx"
1890 # system capabilities
1891 symver_if_any="symver_asm_label symver_gnu_asm"
1892 valgrind_backtrace_deps="!optimizations valgrind_valgrind_h"
1895 atomics_gcc_if="sync_val_compare_and_swap"
1896 atomics_suncc_if="atomic_cas_ptr machine_rw_barrier"
1897 atomics_win32_if="MemoryBarrier"
1898 atomics_native_if_any="$ATOMICS_LIST"
1899 w32threads_deps="atomics_native"
1900 threads_if_any="$THREADS_LIST"
1904 dirac_parse_select="golomb"
1905 error_resilience_select="me_cmp"
1906 faandct_deps="faan fdctdsp"
1907 faanidct_deps="faan idctdsp"
1908 h264dsp_select="startcode"
1909 intrax8_select="blockdsp idctdsp"
1912 me_cmp_select="fdctdsp idctdsp pixblockdsp"
1913 mpeg_er_select="error_resilience"
1914 mpegaudio_select="mpegaudiodsp"
1915 mpegaudiodsp_select="dct"
1916 mpegvideo_select="blockdsp hpeldsp idctdsp me_cmp mpeg_er videodsp"
1917 mpegvideoenc_select="me_cmp mpegvideo pixblockdsp qpeldsp"
1918 vc1dsp_select="h264chroma qpeldsp startcode"
1920 # decoders / encoders
1921 aac_decoder_select="imdct15 mdct sinewin"
1922 aac_encoder_select="audio_frame_queue iirfilter mdct sinewin"
1923 aac_latm_decoder_select="aac_decoder aac_latm_parser"
1924 ac3_decoder_select="ac3_parser ac3dsp bswapdsp fmtconvert mdct"
1925 ac3_encoder_select="ac3dsp audiodsp mdct me_cmp"
1926 ac3_fixed_encoder_select="ac3dsp audiodsp mdct me_cmp"
1927 adpcm_g722_decoder_select="g722dsp"
1928 adpcm_g722_encoder_select="g722dsp"
1929 aic_decoder_select="golomb idctdsp"
1930 alac_encoder_select="lpc"
1931 als_decoder_select="bswapdsp"
1932 amrnb_decoder_select="lsp"
1933 amrwb_decoder_select="lsp"
1934 amv_decoder_select="sp5x_decoder"
1935 ape_decoder_select="bswapdsp"
1936 asv1_decoder_select="blockdsp bswapdsp idctdsp"
1937 asv1_encoder_select="bswapdsp fdctdsp pixblockdsp"
1938 asv2_decoder_select="blockdsp bswapdsp idctdsp"
1939 asv2_encoder_select="bswapdsp fdctdsp pixblockdsp"
1940 atrac1_decoder_select="mdct sinewin"
1941 atrac3_decoder_select="mdct"
1942 atrac3p_decoder_select="mdct sinewin"
1943 bink_decoder_select="blockdsp hpeldsp"
1944 binkaudio_dct_decoder_select="mdct rdft dct sinewin wma_freqs"
1945 binkaudio_rdft_decoder_select="mdct rdft sinewin wma_freqs"
1946 cavs_decoder_select="blockdsp golomb h264chroma idctdsp qpeldsp videodsp"
1947 cllc_decoder_select="bswapdsp"
1948 comfortnoise_encoder_select="lpc"
1949 cook_decoder_select="audiodsp mdct sinewin"
1950 cscd_decoder_select="lzo"
1951 cscd_decoder_suggest="zlib"
1952 dca_decoder_select="fmtconvert mdct"
1953 dds_decoder_select="texturedsp"
1954 dnxhd_decoder_select="blockdsp idctdsp"
1955 dnxhd_encoder_select="aandcttables blockdsp fdctdsp idctdsp mpegvideoenc pixblockdsp"
1956 dvvideo_decoder_select="dvprofile idctdsp"
1957 dvvideo_encoder_select="dvprofile fdctdsp me_cmp pixblockdsp"
1958 dxa_decoder_deps="zlib"
1959 dxv_decoder_select="lzf texturedsp"
1960 eac3_decoder_select="ac3_decoder"
1961 eac3_encoder_select="ac3_encoder"
1962 eamad_decoder_select="aandcttables blockdsp bswapdsp idctdsp mpegvideo"
1963 eatgq_decoder_select="aandcttables idctdsp"
1964 eatqi_decoder_select="aandcttables blockdsp bswapdsp idctdsp"
1965 exr_decoder_deps="zlib"
1966 ffv1_decoder_select="golomb rangecoder"
1967 ffv1_encoder_select="rangecoder"
1968 ffvhuff_decoder_select="huffyuv_decoder"
1969 ffvhuff_encoder_select="huffyuv_encoder"
1970 fic_decoder_select="golomb"
1971 flac_decoder_select="flacdsp golomb"
1972 flac_encoder_select="bswapdsp flacdsp golomb lpc"
1973 flashsv_decoder_deps="zlib"
1974 flashsv_encoder_deps="zlib"
1975 flashsv2_decoder_deps="zlib"
1976 flv_decoder_select="h263_decoder"
1977 flv_encoder_select="h263_encoder"
1978 fourxm_decoder_select="blockdsp bswapdsp"
1979 fraps_decoder_select="bswapdsp huffman"
1980 g2m_decoder_deps="zlib"
1981 g2m_decoder_select="blockdsp idctdsp jpegtables"
1982 h261_decoder_select="mpeg_er mpegvideo"
1983 h261_encoder_select="aandcttables mpegvideoenc"
1984 h263_decoder_select="error_resilience h263_parser h263dsp mpeg_er mpegvideo qpeldsp"
1985 h263_encoder_select="aandcttables h263dsp mpegvideoenc"
1986 h263i_decoder_select="h263_decoder"
1987 h263p_encoder_select="h263_encoder"
1988 h264_decoder_select="cabac golomb h264chroma h264dsp h264parse h264pred h264qpel videodsp"
1989 h264_decoder_suggest="error_resilience"
1990 hap_decoder_select="snappy texturedsp"
1991 hap_encoder_deps="libsnappy"
1992 hap_encoder_select="texturedspenc"
1993 hevc_decoder_select="bswapdsp cabac golomb videodsp"
1994 huffyuv_decoder_select="bswapdsp huffyuvdsp"
1995 huffyuv_encoder_select="bswapdsp huffman huffyuvencdsp"
1996 iac_decoder_select="imc_decoder"
1997 imc_decoder_select="bswapdsp fft mdct sinewin"
1998 indeo3_decoder_select="hpeldsp"
1999 indeo4_decoder_select="ividsp"
2000 indeo5_decoder_select="ividsp"
2001 interplay_video_decoder_select="hpeldsp"
2002 jpegls_decoder_select="golomb mjpeg_decoder"
2003 jpegls_encoder_select="golomb"
2004 jv_decoder_select="blockdsp"
2005 lagarith_decoder_select="huffyuvdsp"
2006 ljpeg_encoder_select="aandcttables idctdsp jpegtables"
2007 loco_decoder_select="golomb"
2008 magicyuv_decoder_select="huffyuvdsp"
2009 mdec_decoder_select="blockdsp idctdsp mpegvideo"
2010 metasound_decoder_select="lsp mdct sinewin"
2011 mimic_decoder_select="blockdsp bswapdsp hpeldsp idctdsp"
2012 mjpeg_decoder_select="blockdsp hpeldsp idctdsp jpegtables"
2013 mjpeg_encoder_select="aandcttables jpegtables mpegvideoenc"
2014 mjpegb_decoder_select="mjpeg_decoder"
2015 mlp_decoder_select="mlp_parser"
2016 motionpixels_decoder_select="bswapdsp"
2017 mp1_decoder_select="mpegaudio"
2018 mp1float_decoder_select="mpegaudio"
2019 mp2_decoder_select="mpegaudio"
2020 mp2float_decoder_select="mpegaudio"
2021 mp3_decoder_select="mpegaudio"
2022 mp3adu_decoder_select="mpegaudio"
2023 mp3adufloat_decoder_select="mpegaudio"
2024 mp3float_decoder_select="mpegaudio"
2025 mp3on4_decoder_select="mpegaudio"
2026 mp3on4float_decoder_select="mpegaudio"
2027 mpc7_decoder_select="bswapdsp mpegaudiodsp"
2028 mpc8_decoder_select="mpegaudiodsp"
2029 mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h"
2030 mpeg_xvmc_decoder_select="mpeg2video_decoder"
2031 mpeg1video_decoder_select="error_resilience mpeg_er mpegvideo"
2032 mpeg1video_encoder_select="aandcttables mpegvideoenc"
2033 mpeg2video_decoder_select="error_resilience mpeg_er mpegvideo"
2034 mpeg2video_encoder_select="aandcttables mpegvideoenc"
2035 mpeg4_decoder_select="h263_decoder mpeg4video_parser"
2036 mpeg4_encoder_select="h263_encoder"
2037 msa1_decoder_select="mss34dsp"
2038 msmpeg4v1_decoder_select="h263_decoder"
2039 msmpeg4v2_decoder_select="h263_decoder"
2040 msmpeg4v2_encoder_select="h263_encoder"
2041 msmpeg4v3_decoder_select="h263_decoder"
2042 msmpeg4v3_encoder_select="h263_encoder"
2043 mss2_decoder_select="error_resilience mpeg_er mpegvideo vc1_decoder"
2044 mts2_decoder_select="mss34dsp"
2045 mxpeg_decoder_select="mjpeg_decoder"
2046 nellymoser_decoder_select="mdct sinewin"
2047 nellymoser_encoder_select="audio_frame_queue mdct sinewin"
2048 nuv_decoder_select="idctdsp lzo"
2049 on2avc_decoder_select="mdct"
2050 opus_decoder_deps="avresample"
2051 opus_decoder_select="imdct15"
2052 png_decoder_deps="zlib"
2053 png_encoder_deps="zlib"
2054 png_encoder_select="huffyuvencdsp"
2055 prores_decoder_select="idctdsp"
2056 prores_encoder_select="fdctdsp"
2057 qcelp_decoder_select="lsp"
2058 qdm2_decoder_select="mdct rdft mpegaudiodsp"
2059 ra_144_encoder_select="audio_frame_queue lpc"
2060 ralf_decoder_select="golomb"
2061 rscc_decoder_deps="zlib"
2062 rv10_decoder_select="error_resilience h263_decoder h263dsp mpeg_er"
2063 rv10_encoder_select="h263_encoder"
2064 rv20_decoder_select="error_resilience h263_decoder h263dsp mpeg_er"
2065 rv20_encoder_select="h263_encoder"
2066 rv30_decoder_select="error_resilience golomb h264chroma h264pred h264qpel mpeg_er mpegvideo rv34dsp videodsp"
2067 rv40_decoder_select="error_resilience golomb h264chroma h264pred h264qpel mpeg_er mpegvideo rv34dsp videodsp"
2068 screenpresso_decoder_deps="zlib"
2069 shorten_decoder_select="golomb"
2070 sipr_decoder_select="lsp"
2071 sp5x_decoder_select="mjpeg_decoder"
2072 svq1_decoder_select="hpeldsp"
2073 svq1_encoder_select="aandcttables hpeldsp me_cmp mpegvideoenc"
2074 svq3_decoder_select="golomb h264dsp h264parse h264pred hpeldsp tpeldsp videodsp"
2075 svq3_decoder_suggest="zlib"
2076 tak_decoder_select="audiodsp"
2077 tdsc_decoder_deps="zlib"
2078 tdsc_decoder_select="mjpeg_decoder"
2079 theora_decoder_select="vp3_decoder"
2080 thp_decoder_select="mjpeg_decoder"
2081 tiff_decoder_suggest="zlib"
2082 tiff_encoder_suggest="zlib"
2083 truehd_decoder_select="mlp_decoder"
2084 truemotion2_decoder_select="bswapdsp"
2085 truespeech_decoder_select="bswapdsp"
2086 tscc_decoder_deps="zlib"
2087 txd_decoder_select="texturedsp"
2088 twinvq_decoder_select="mdct lsp sinewin"
2089 utvideo_decoder_select="bswapdsp"
2090 utvideo_encoder_select="bswapdsp huffman huffyuvencdsp"
2091 vble_decoder_select="huffyuvdsp"
2092 vc1_decoder_select="blockdsp error_resilience h263_decoder h264qpel intrax8 mpeg_er mpegvideo vc1dsp"
2093 vc1image_decoder_select="vc1_decoder"
2094 vorbis_decoder_select="mdct"
2095 vorbis_encoder_select="mdct"
2096 vp3_decoder_select="hpeldsp vp3dsp videodsp"
2097 vp5_decoder_select="h264chroma hpeldsp videodsp vp3dsp vp56dsp"
2098 vp6_decoder_select="h264chroma hpeldsp huffman videodsp vp3dsp vp56dsp"
2099 vp6a_decoder_select="vp6_decoder"
2100 vp6f_decoder_select="vp6_decoder"
2101 vp7_decoder_select="h264pred videodsp vp8dsp"
2102 vp8_decoder_select="h264pred videodsp vp8dsp"
2103 vp9_decoder_select="videodsp"
2104 webp_decoder_select="vp8_decoder"
2105 wmapro_decoder_select="mdct sinewin wma_freqs"
2106 wmav1_decoder_select="mdct sinewin wma_freqs"
2107 wmav1_encoder_select="mdct sinewin wma_freqs"
2108 wmav2_decoder_select="mdct sinewin wma_freqs"
2109 wmav2_encoder_select="mdct sinewin wma_freqs"
2110 wmavoice_decoder_select="lsp rdft dct mdct sinewin"
2111 wmv1_decoder_select="h263_decoder"
2112 wmv1_encoder_select="h263_encoder"
2113 wmv2_decoder_select="blockdsp error_resilience h263_decoder idctdsp intrax8 videodsp wmv2dsp"
2114 wmv2_encoder_select="h263_encoder wmv2dsp"
2115 wmv3_decoder_select="vc1_decoder"
2116 wmv3image_decoder_select="wmv3_decoder"
2117 zerocodec_decoder_deps="zlib"
2118 zlib_decoder_deps="zlib"
2119 zlib_encoder_deps="zlib"
2120 zmbv_decoder_deps="zlib"
2121 zmbv_encoder_deps="zlib"
2123 # hardware accelerators
2124 d3d11va_deps="d3d11_h dxva_h ID3D11VideoDecoder"
2125 dxva2_deps="dxva2api_h DXVA2_ConfigPictureDecode"
2126 vaapi_deps="va_va_h"
2127 vda_deps="VideoDecodeAcceleration_VDADecoder_h pthreads"
2128 vda_extralibs="-framework CoreFoundation -framework VideoDecodeAcceleration -framework QuartzCore"
2129 vdpau_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
2131 h263_vaapi_hwaccel_deps="vaapi"
2132 h263_vaapi_hwaccel_select="h263_decoder"
2133 h264_d3d11va_hwaccel_deps="d3d11va"
2134 h264_d3d11va_hwaccel_select="h264_decoder"
2135 h264_dxva2_hwaccel_deps="dxva2"
2136 h264_dxva2_hwaccel_select="h264_decoder"
2137 h264_mmal_hwaccel_deps="mmal"
2138 h264_qsv_hwaccel_deps="libmfx"
2139 h264_vaapi_hwaccel_deps="vaapi"
2140 h264_vaapi_hwaccel_select="h264_decoder"
2141 h264_vda_hwaccel_deps="vda"
2142 h264_vda_hwaccel_select="h264_decoder"
2143 h264_vda_old_hwaccel_deps="vda"
2144 h264_vda_old_hwaccel_select="h264_decoder"
2145 h264_vdpau_hwaccel_deps="vdpau"
2146 h264_vdpau_hwaccel_select="h264_decoder"
2147 hevc_d3d11va_hwaccel_deps="d3d11va DXVA_PicParams_HEVC"
2148 hevc_d3d11va_hwaccel_select="hevc_decoder"
2149 hevc_dxva2_hwaccel_deps="dxva2 DXVA_PicParams_HEVC"
2150 hevc_dxva2_hwaccel_select="hevc_decoder"
2151 hevc_qsv_hwaccel_deps="libmfx"
2152 hevc_vdpau_hwaccel_deps="vdpau VdpPictureInfoHEVC"
2153 hevc_vdpau_hwaccel_select="hevc_decoder"
2154 mpeg1_vdpau_hwaccel_deps="vdpau"
2155 mpeg1_vdpau_hwaccel_select="mpeg1video_decoder"
2156 mpeg2_d3d11va_hwaccel_deps="d3d11va"
2157 mpeg2_d3d11va_hwaccel_select="mpeg2video_decoder"
2158 mpeg2_dxva2_hwaccel_deps="dxva2"
2159 mpeg2_dxva2_hwaccel_select="mpeg2video_decoder"
2160 mpeg2_mmal_hwaccel_deps="mmal"
2161 mpeg2_qsv_hwaccel_deps="libmfx"
2162 mpeg2_vaapi_hwaccel_deps="vaapi"
2163 mpeg2_vaapi_hwaccel_select="mpeg2video_decoder"
2164 mpeg2_vdpau_hwaccel_deps="vdpau"
2165 mpeg2_vdpau_hwaccel_select="mpeg2video_decoder"
2166 mpeg4_vaapi_hwaccel_deps="vaapi"
2167 mpeg4_vaapi_hwaccel_select="mpeg4_decoder"
2168 mpeg4_vdpau_hwaccel_deps="vdpau"
2169 mpeg4_vdpau_hwaccel_select="mpeg4_decoder"
2170 vc1_d3d11va_hwaccel_deps="d3d11va"
2171 vc1_d3d11va_hwaccel_select="vc1_decoder"
2172 vc1_dxva2_hwaccel_deps="dxva2"
2173 vc1_dxva2_hwaccel_select="vc1_decoder"
2174 vc1_mmal_hwaccel_deps="mmal"
2175 vc1_qsv_hwaccel_deps="libmfx"
2176 vc1_vaapi_hwaccel_deps="vaapi"
2177 vc1_vaapi_hwaccel_select="vc1_decoder"
2178 vc1_vdpau_hwaccel_deps="vdpau"
2179 vc1_vdpau_hwaccel_select="vc1_decoder"
2180 vp8_qsv_hwaccel_deps="libmfx"
2181 vp8_vaapi_hwaccel_deps="vaapi VAPictureParameterBufferVP8"
2182 vp8_vaapi_hwaccel_select="vp8_decoder"
2183 wmv3_d3d11va_hwaccel_select="vc1_d3d11va_hwaccel"
2184 wmv3_dxva2_hwaccel_select="vc1_dxva2_hwaccel"
2185 wmv3_vaapi_hwaccel_select="vc1_vaapi_hwaccel"
2186 wmv3_vdpau_hwaccel_select="vc1_vdpau_hwaccel"
2188 # hardware-accelerated codecs
2189 nvenc_deps_any="dlopen LoadLibrary"
2190 nvenc_extralibs='$ldl'
2191 omx_deps="dlopen pthreads"
2192 omx_extralibs='$ldl'
2195 vaapi_encode_deps="vaapi"
2197 hwupload_cuda_filter_deps="cuda"
2198 scale_npp_filter_deps="cuda libnpp"
2200 h264_mmal_decoder_deps="mmal"
2201 h264_nvenc_encoder_deps="nvenc"
2202 h264_omx_encoder_deps="omx"
2203 h264_qsv_decoder_deps="libmfx"
2204 h264_qsv_decoder_select="h264_mp4toannexb_bsf h264_parser qsvdec h264_qsv_hwaccel"
2205 h264_qsv_encoder_deps="libmfx"
2206 h264_qsv_encoder_select="qsvenc"
2207 h264_vaapi_encoder_deps="VAEncPictureParameterBufferH264"
2208 h264_vaapi_encoder_select="vaapi_encode golomb"
2209 hevc_nvenc_encoder_deps="nvenc"
2210 hevc_qsv_decoder_deps="libmfx"
2211 hevc_qsv_encoder_deps="libmfx"
2212 hevc_qsv_decoder_select="hevc_mp4toannexb_bsf hevc_parser hevc_qsv_hwaccel qsvdec"
2213 hevc_qsv_encoder_select="qsvenc"
2214 hevc_vaapi_encoder_deps="VAEncPictureParameterBufferHEVC"
2215 hevc_vaapi_encoder_select="vaapi_encode golomb"
2216 mjpeg_vaapi_encoder_deps="VAEncPictureParameterBufferJPEG"
2217 mjpeg_vaapi_encoder_select="vaapi_encode jpegtables"
2218 mpeg2_mmal_decoder_deps="mmal"
2219 mpeg2_qsv_decoder_deps="libmfx"
2220 mpeg2_qsv_decoder_select="qsvdec mpeg2_qsv_hwaccel mpegvideo_parser"
2221 mpeg2_qsv_encoder_deps="libmfx"
2222 mpeg2_qsv_encoder_select="qsvenc"
2223 mpeg4_omx_encoder_deps="omx"
2224 vc1_mmal_decoder_deps="mmal"
2225 vc1_qsv_decoder_deps="libmfx"
2226 vc1_qsv_decoder_select="qsvdec vc1_qsv_hwaccel vc1_parser"
2227 vp8_qsv_decoder_deps="libmfx"
2228 vp8_qsv_decoder_select="qsvdec vp8_qsv_hwaccel vp8_parser"
2230 nvenc_h264_encoder_deps="nvenc"
2231 nvenc_hevc_encoder_deps="nvenc"
2234 h264_parser_select="golomb h264dsp h264parse"
2235 hevc_parser_select="golomb"
2236 mpegvideo_parser_select="mpegvideo"
2237 mpeg4video_parser_select="error_resilience h263dsp mpegvideo qpeldsp"
2238 vc1_parser_select="vc1dsp"
2241 mjpeg2jpeg_bsf_select="jpegtables"
2243 # external libraries
2244 libdcadec_decoder_deps="libdcadec"
2245 libfaac_encoder_deps="libfaac"
2246 libfaac_encoder_select="audio_frame_queue"
2247 libfdk_aac_decoder_deps="libfdk_aac"
2248 libfdk_aac_encoder_deps="libfdk_aac"
2249 libfdk_aac_encoder_select="audio_frame_queue"
2250 libgsm_decoder_deps="libgsm"
2251 libgsm_encoder_deps="libgsm"
2252 libgsm_ms_decoder_deps="libgsm"
2253 libgsm_ms_encoder_deps="libgsm"
2254 libilbc_decoder_deps="libilbc"
2255 libilbc_encoder_deps="libilbc"
2256 libkvazaar_encoder_deps="libkvazaar"
2257 libmp3lame_encoder_deps="libmp3lame"
2258 libmp3lame_encoder_select="audio_frame_queue"
2259 libopencore_amrnb_decoder_deps="libopencore_amrnb"
2260 libopencore_amrnb_encoder_deps="libopencore_amrnb"
2261 libopencore_amrnb_encoder_select="audio_frame_queue"
2262 libopencore_amrwb_decoder_deps="libopencore_amrwb"
2263 libopenh264_decoder_deps="libopenh264"
2264 libopenh264_decoder_select="h264_mp4toannexb_bsf"
2265 libopenh264_encoder_deps="libopenh264"
2266 libopenjpeg_decoder_deps="libopenjpeg"
2267 libopenjpeg_encoder_deps="libopenjpeg"
2268 libopus_decoder_deps="libopus"
2269 libopus_encoder_deps="libopus"
2270 libopus_encoder_select="audio_frame_queue"
2271 libschroedinger_decoder_deps="libschroedinger"
2272 libschroedinger_encoder_deps="libschroedinger"
2273 libspeex_decoder_deps="libspeex"
2274 libspeex_encoder_deps="libspeex"
2275 libspeex_encoder_select="audio_frame_queue"
2276 libtheora_encoder_deps="libtheora"
2277 libtwolame_encoder_deps="libtwolame"
2278 libvo_aacenc_encoder_deps="libvo_aacenc"
2279 libvo_aacenc_encoder_select="audio_frame_queue"
2280 libvo_amrwbenc_encoder_deps="libvo_amrwbenc"
2281 libvorbis_encoder_deps="libvorbis"
2282 libvorbis_encoder_select="audio_frame_queue"
2283 libvpx_vp8_decoder_deps="libvpx"
2284 libvpx_vp8_encoder_deps="libvpx"
2285 libvpx_vp9_decoder_deps="libvpx"
2286 libvpx_vp9_encoder_deps="libvpx"
2287 libwavpack_encoder_deps="libwavpack"
2288 libwebp_encoder_deps="libwebp"
2289 libx262_encoder_deps="libx262"
2290 libx264_encoder_deps="libx264"
2291 libx265_encoder_deps="libx265"
2292 libxavs_encoder_deps="libxavs"
2293 libxvid_encoder_deps="libxvid mkstemp"
2296 ac3_demuxer_select="ac3_parser"
2297 asf_demuxer_select="riffdec"
2298 asf_muxer_select="riffenc"
2299 asf_stream_muxer_select="asf_muxer"
2300 avi_demuxer_select="iso_media riffdec"
2301 avi_muxer_select="riffenc"
2302 avisynth_demuxer_deps="avisynth"
2303 avisynth_demuxer_select="riffdec"
2304 caf_demuxer_select="iso_media riffdec"
2305 dash_muxer_select="mp4_muxer"
2306 dirac_demuxer_select="dirac_parser"
2307 dv_demuxer_select="dvprofile"
2308 dv_muxer_select="dvprofile"
2309 dxa_demuxer_select="riffdec"
2310 eac3_demuxer_select="ac3_parser"
2311 f4v_muxer_select="mov_muxer"
2312 flac_demuxer_select="flac_parser"
2313 hds_muxer_select="flv_muxer"
2314 hls_muxer_select="mpegts_muxer"
2315 ipod_muxer_select="mov_muxer"
2316 ismv_muxer_select="mov_muxer"
2317 matroska_audio_muxer_select="matroska_muxer"
2318 matroska_demuxer_select="iso_media riffdec"
2319 matroska_demuxer_suggest="bzlib lzo zlib"
2320 matroska_muxer_select="iso_media riffenc"
2321 mmf_muxer_select="riffenc"
2322 mov_demuxer_select="iso_media riffdec"
2323 mov_demuxer_suggest="zlib"
2324 mov_muxer_select="iso_media riffenc rtpenc_chain"
2325 mp3_demuxer_select="mpegaudio_parser"
2326 mp4_muxer_select="mov_muxer"
2327 mpegts_demuxer_select="iso_media"
2328 mpegts_muxer_select="adts_muxer latm_muxer"
2329 mpegtsraw_demuxer_select="mpegts_demuxer"
2330 mxf_d10_muxer_select="mxf_muxer"
2331 nut_muxer_select="riffenc"
2332 nuv_demuxer_select="riffdec"
2333 oga_muxer_select="ogg_muxer"
2334 ogg_demuxer_select="dirac_parse"
2335 opus_muxer_select="ogg_muxer"
2336 psp_muxer_select="mov_muxer"
2337 rtp_demuxer_select="sdp_demuxer"
2338 rtpdec_select="asf_demuxer jpegtables mov_demuxer mpegts_demuxer rm_demuxer rtp_protocol srtp"
2339 rtsp_demuxer_select="http_protocol rtpdec"
2340 rtsp_muxer_select="rtp_muxer http_protocol rtp_protocol rtpenc_chain"
2341 sap_demuxer_select="sdp_demuxer"
2342 sap_muxer_select="rtp_muxer rtp_protocol rtpenc_chain"
2343 sdp_demuxer_select="rtpdec"
2344 smoothstreaming_muxer_select="ismv_muxer"
2345 spdif_muxer_select="aac_parser"
2346 spx_muxer_select="ogg_muxer"
2347 swf_demuxer_suggest="zlib"
2348 tak_demuxer_select="tak_parser"
2349 tg2_muxer_select="mov_muxer"
2350 tgp_muxer_select="mov_muxer"
2351 w64_demuxer_select="wav_demuxer"
2352 wav_demuxer_select="riffdec"
2353 wav_muxer_select="riffenc"
2354 webm_muxer_select="iso_media riffenc"
2355 webm_muxer_suggest="libopus_encoder libvorbis_encoder libvpx_vp8_encoder libvpx_vp9_encoder"
2356 wtv_demuxer_select="mpegts_demuxer riffdec"
2357 xmv_demuxer_select="riffdec"
2358 xwma_demuxer_select="riffdec"
2361 alsa_indev_deps="alsa_asoundlib_h snd_pcm_htimestamp"
2362 alsa_outdev_deps="alsa_asoundlib_h"
2363 avfoundation_indev_deps="AVFoundation_AVFoundation_h"
2364 bktr_indev_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
2365 dv1394_indev_deps="dv1394"
2366 dv1394_indev_select="dv_demuxer"
2367 fbdev_indev_deps="linux_fb_h"
2368 jack_indev_deps="jack_jack_h"
2369 jack_indev_deps_any="sem_timedwait dispatch_dispatch_h"
2370 libcdio_indev_deps="libcdio"
2371 libdc1394_indev_deps="libdc1394"
2372 oss_indev_deps_any="soundcard_h sys_soundcard_h"
2373 oss_outdev_deps_any="soundcard_h sys_soundcard_h"
2374 pulse_indev_deps="libpulse"
2375 sndio_indev_deps="sndio_h"
2376 sndio_outdev_deps="sndio_h"
2377 v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h"
2378 vfwcap_indev_deps="capCreateCaptureWindow vfwcap_defines"
2379 vfwcap_indev_extralibs="-lavicap32"
2380 xcbgrab_indev_deps="libxcb"
2383 ffrtmpcrypt_protocol_deps="!librtmp_protocol"
2384 ffrtmpcrypt_protocol_deps_any="gmp openssl"
2385 ffrtmpcrypt_protocol_select="tcp_protocol"
2386 ffrtmphttp_protocol_deps="!librtmp_protocol"
2387 ffrtmphttp_protocol_select="http_protocol"
2388 gopher_protocol_select="network"
2389 http_protocol_select="tcp_protocol"
2390 httpproxy_protocol_select="tcp_protocol"
2391 https_protocol_select="tls_protocol"
2392 icecast_protocol_select="http_protocol"
2393 librtmp_protocol_deps="librtmp"
2394 librtmpe_protocol_deps="librtmp"
2395 librtmps_protocol_deps="librtmp"
2396 librtmpt_protocol_deps="librtmp"
2397 librtmpte_protocol_deps="librtmp"
2398 mmsh_protocol_select="http_protocol"
2399 mmst_protocol_select="network"
2400 rtmp_protocol_deps="!librtmp_protocol"
2401 rtmp_protocol_select="tcp_protocol"
2402 rtmpe_protocol_select="ffrtmpcrypt_protocol"
2403 rtmps_protocol_deps="!librtmp_protocol"
2404 rtmps_protocol_select="tls_protocol"
2405 rtmpt_protocol_select="ffrtmphttp_protocol"
2406 rtmpte_protocol_select="ffrtmpcrypt_protocol ffrtmphttp_protocol"
2407 rtmpts_protocol_select="ffrtmphttp_protocol https_protocol"
2408 rtp_protocol_select="udp_protocol"
2409 sctp_protocol_deps="struct_sctp_event_subscribe"
2410 sctp_protocol_select="network"
2411 srtp_protocol_select="rtp_protocol srtp"
2412 tcp_protocol_select="network"
2413 tls_gnutls_protocol_deps="gnutls"
2414 tls_gnutls_protocol_select="tcp_protocol"
2415 tls_openssl_protocol_deps="openssl !tls_gnutls_protocol"
2416 tls_openssl_protocol_select="tcp_protocol"
2417 tls_protocol_deps_any="tls_gnutls_protocol tls_openssl_protocol"
2418 udp_protocol_select="network"
2419 unix_protocol_deps="sys_un_h"
2420 unix_protocol_select="network"
2423 asyncts_filter_deps="avresample"
2424 blackframe_filter_deps="gpl"
2425 boxblur_filter_deps="gpl"
2426 bs2b_filter_deps="libbs2b"
2427 cropdetect_filter_deps="gpl"
2428 deinterlace_qsv_filter_deps="libmfx"
2429 delogo_filter_deps="gpl"
2430 drawtext_filter_deps="libfreetype"
2431 frei0r_filter_deps="frei0r dlopen"
2432 frei0r_filter_extralibs='$ldl'
2433 frei0r_src_filter_deps="frei0r dlopen"
2434 frei0r_src_filter_extralibs='$ldl'
2435 hdcd_filter_deps="libhdcd"
2436 hqdn3d_filter_deps="gpl"
2437 interlace_filter_deps="gpl"
2438 movie_filter_deps="avcodec avformat"
2439 ocv_filter_deps="libopencv"
2440 resample_filter_deps="avresample"
2441 scale_filter_deps="swscale"
2442 scale_qsv_filter_deps="libmfx"
2443 scale_vaapi_filter_deps="vaapi VAProcPipelineParameterBuffer"
2446 decode_audio_example_deps="avcodec avutil"
2447 decode_video_example_deps="avcodec avutil"
2448 encode_audio_example_deps="avcodec avutil"
2449 encode_video_example_deps="avcodec avutil"
2450 filter_audio_example_deps="avfilter avutil"
2451 metadata_example_deps="avformat avutil"
2452 output_example_deps="avcodec avformat avresample avutil swscale"
2453 qsvdec_example_deps="avcodec avutil libmfx h264_qsv_decoder"
2454 transcode_aac_example_deps="avcodec avformat avresample"
2456 # libraries, in linking order
2457 avcodec_deps="avutil"
2458 avdevice_deps="avformat avcodec avutil"
2459 avfilter_deps="avutil"
2460 avformat_deps="avcodec avutil"
2461 avresample_deps="avutil"
2462 swscale_deps="avutil"
2465 avconv_deps="avcodec avfilter avformat avresample swscale"
2466 avconv_select="aformat_filter anull_filter asyncts_filter atrim_filter format_filter
2467 fps_filter null_filter resample_filter scale_filter
2469 avplay_deps="avcodec avfilter avformat avresample sdl"
2470 avplay_libs='$sdl_libs'
2471 avplay_select="rdft format_filter transpose_filter hflip_filter vflip_filter"
2472 avprobe_deps="avcodec avformat"
2476 texi2html_deps="doc"
2478 # default parameters
2480 logfile="config.log"
2482 # installation paths
2483 prefix_default="/usr/local"
2484 bindir_default='${prefix}/bin'
2485 datadir_default='${prefix}/share/avconv'
2486 docdir_default='${prefix}/share/doc/libav'
2487 incdir_default='${prefix}/include'
2488 libdir_default='${prefix}/lib'
2489 mandir_default='${prefix}/share/man'
2490 shlibdir_default="$libdir_default"
2495 host_cc_default="gcc"
2500 pkg_config_default=pkg-config
2503 version_script='--version-script'
2507 arch_default=$(uname -m)
2512 target_os_default=$(tolower $(uname -s))
2513 host_os=$target_os_default
2515 # configurable options
2516 enable $EXAMPLE_LIST $LIBRARY_LIST $PROGRAM_LIST
2521 enable faan faandct faanidct
2522 enable optimizations
2523 enable safe_bitstream_reader
2525 enable swscale_alpha
2526 enable valgrind_backtrace
2528 # By default, enable only those hwaccels that have no external dependencies.
2529 enable d3d11va dxva2 vda vdpau
2532 SHFLAGS='-shared -Wl,-soname,$$(@F)'
2535 FULLNAME='$(NAME)$(BUILDSUF)'
2536 LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
2539 SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
2540 SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
2541 SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
2542 LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
2543 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'
2544 SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR) $(SLIBNAME)'
2545 VERSION_SCRIPT_POSTPROCESS_CMD="cat"
2568 host_cflags_filter=echo
2569 host_ldflags_filter=echo
2571 target_path='$(CURDIR)'
2573 # since the object filename is not given with the -MM flag, the compiler
2574 # is only able to print the basename, and we must add the path ourselves
2575 DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o," > $(@:.o=.d)'
2579 if test -f configure; then
2582 source_path=$(cd $(dirname "$0"); pwd)
2583 echo "$source_path" | grep -q '[[:blank:]]' &&
2584 die "Out of tree builds are impossible with whitespace in source path."
2585 test -e "$source_path/config.h" &&
2586 die "Out of tree builds are impossible with config.h in source dir."
2593 LIBAV_CONFIGURATION="${LIBAV_CONFIGURATION# } ${l}${r}"
2599 file=$source_path/$3
2600 sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
2603 ENCODER_LIST=$(find_things encoder ENC libavcodec/allcodecs.c)
2604 DECODER_LIST=$(find_things decoder DEC libavcodec/allcodecs.c)
2605 HWACCEL_LIST=$(find_things hwaccel HWACCEL libavcodec/allcodecs.c)
2606 PARSER_LIST=$(find_things parser PARSER libavcodec/allcodecs.c)
2607 MUXER_LIST=$(find_things muxer _MUX libavformat/allformats.c)
2608 DEMUXER_LIST=$(find_things demuxer DEMUX libavformat/allformats.c)
2609 OUTDEV_LIST=$(find_things outdev OUTDEV libavdevice/alldevices.c)
2610 INDEV_LIST=$(find_things indev _IN libavdevice/alldevices.c)
2611 FILTER_LIST=$(find_things filter FILTER libavfilter/allfilters.c)
2613 find_things_extern(){
2616 file=$source_path/$3
2617 sed -n "s/^[^#]*extern.*$pattern *ff_\([^ ]*\)_$thing;/\1_$thing/p" "$file"
2620 BSF_LIST=$(find_things_extern bsf AVBitStreamFilter libavcodec/bitstream_filters.c)
2621 PROTOCOL_LIST=$(find_things_extern protocol URLProtocol libavformat/protocols.c)
2637 for n in $COMPONENT_LIST; do
2638 v=$(toupper ${n%s})_LIST
2640 eval ${n}_if_any="\$$v"
2643 enable $ARCH_EXT_LIST
2646 echo "Unknown option \"$1\"."
2647 echo "See $0 --help for available options."
2652 printf "%-25s %-25s %-25s\n" $(cat | tr ' ' '\n' | sort)
2658 echo $* | sed s/$suffix//g | print_3_columns
2670 is_in ${comp} $COMPONENT_LIST && eval comp=\$$(toupper ${comp%s})_LIST
2671 echo "prob ${prob:-0.5}"
2679 random_seed=$(awk "BEGIN { srand($random_seed); print srand() }")
2680 $action $(rand_list "$@" | awk "BEGIN { srand($random_seed) } \$1 == \"prob\" { prob = \$2; next } rand() < prob { print }")
2689 --extra-ldexeflags=*)
2690 add_ldexeflags $optval
2693 add_extralibs $optval
2696 disable $INDEV_LIST $OUTDEV_LIST
2699 debuglevel="$optval"
2702 disable $PROGRAM_LIST
2704 --disable-everything)
2705 map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
2708 map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
2709 disable $LIBRARY_LIST $PROGRAM_LIST doc
2711 --enable-random|--disable-random)
2712 action=${opt%%-random}
2713 do_random ${action#--} $COMPONENT_LIST
2715 --enable-random=*|--disable-random=*)
2716 action=${opt%%-random=*}
2717 do_random ${action#--} $optval
2719 --enable-*=*|--disable-*=*)
2720 eval $(echo "${opt%%=*}" | sed 's/--/action=/;s/-/ thing=/')
2721 is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt"
2722 eval list=\$$(toupper $thing)_LIST
2723 name=$(echo "${optval}" | sed "s/,/_${thing}|/g")_${thing}
2724 $action $(filter "$name" $list)
2726 --enable-avserver|--disable-avserver*)
2727 warn "avserver has been removed, the ${opt} option is only"\
2728 "provided for compatibility and will be removed in the future"
2730 --enable-?*|--disable-?*)
2731 eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
2732 if is_in $option $COMPONENT_LIST; then
2733 test $action = disable && action=unset
2734 eval $action \$$(toupper ${option%s})_LIST
2735 elif is_in $option $CMDLINE_SELECT; then
2742 NAME="${opt#--list-}"
2743 is_in $NAME $COMPONENT_LIST || die_unknown $opt
2745 eval show_list $NAME \$$(toupper $NAME)_LIST
2747 --help|-h) show_help
2749 --quiet|-q) quiet=yes
2752 optname="${opt%%=*}"
2753 optname="${optname#--}"
2754 optname=$(echo "$optname" | sed 's/-/_/g')
2755 if is_in $optname $CMDLINE_SET; then
2756 eval $optname='$optval'
2757 elif is_in $optname $CMDLINE_APPEND; then
2758 append $optname "$optval"
2770 disabled logging && logfile=/dev/null
2772 # Die early if licensing-related configure options are incompatible.
2773 die_license_disabled() {
2774 enabled $1 || { enabled $v && die "$v is $1 and --enable-$1 is not specified."; }
2777 map "die_license_disabled gpl" $EXTERNAL_LIBRARY_GPL_LIST
2778 map "die_license_disabled nonfree" $EXTERNAL_LIBRARY_NONFREE_LIST $HWACCEL_LIBRARY_NONFREE_LIST
2779 map "die_license_disabled version3" $EXTERNAL_LIBRARY_VERSION3_LIST
2781 enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
2783 # Disable all the library-specific components if the library itself
2784 # is disabled, see AVCODEC_LIST and following _LIST variables.
2786 disable_components(){
2787 disabled ${1} && disable $(
2788 eval components="\$$(toupper ${1})_COMPONENTS"
2789 map 'eval echo \${$(toupper ${v%s})_LIST}' $components
2793 map 'disable_components $v' $LIBRARY_LIST
2795 echo "# $0 $LIBAV_CONFIGURATION" > $logfile
2798 case "$toolchain" in
2800 cc_default="${toolchain%-asan}"
2801 add_cflags -fsanitize=address
2802 add_ldflags -fsanitize=address
2805 cc_default="${toolchain%-msan}"
2806 add_cflags -fsanitize=memory -fsanitize-memory-track-origins
2807 add_ldflags -fsanitize=memory
2810 cc_default="${toolchain%-tsan}"
2811 add_cflags -fsanitize=thread -pie
2812 add_ldflags -fsanitize=thread -pie
2813 case "$toolchain" in
2821 cc_default="${toolchain%-usan}"
2822 add_cflags -fsanitize=undefined
2823 add_ldflags -fsanitize=undefined
2824 case "$toolchain" in
2831 target_exec_default="valgrind"
2832 case "$toolchain" in
2834 target_exec_args="--alloc-fn=av_malloc --alloc-fn=av_mallocz"
2837 target_exec_args="--track-origins=yes --leak-check=full"
2842 # Check whether the current MSVC version needs the C99 converter.
2843 # From MSVC 2013 (compiler major version 18) onwards, it does actually
2844 # support enough of C99 to build libav. Default to the new
2845 # behaviour if the regexp was unable to match anything, since this
2846 # successfully parses the version number of existing supported
2847 # versions that require the converter (MSVC 2010 and 2012).
2848 cl_major_ver=$(cl 2>&1 | sed -n 's/.*Version \([[:digit:]]\{1,\}\)\..*/\1/p')
2849 if [ -z "$cl_major_ver" ] || [ $cl_major_ver -ge 18 ]; then
2852 cc_default="c99wrap cl"
2854 ld_default="$source_path/compat/windows/mslink"
2855 nm_default="dumpbin -symbols"
2862 target_os_default="win32"
2863 # Use a relative path for TMPDIR. This makes sure all the
2864 # ffconf temp files are written with a relative path, avoiding
2865 # issues with msys/win32 path conversion for MSVC parameters
2866 # such as -Fo<file> or -out:<file>.
2872 nm_default="dumpbin -symbols"
2874 target_os_default="win32"
2878 add_cflags -fprofile-arcs -ftest-coverage
2879 add_ldflags -fprofile-arcs -ftest-coverage
2882 add_cflags -fprofile-arcs -ftest-coverage
2883 add_ldflags --coverage
2886 add_cppflags -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2
2887 add_cflags -fno-strict-overflow -fstack-protector-all
2888 add_ldflags -Wl,-z,relro -Wl,-z,now
2891 die "Unknown toolchain $toolchain"
2895 test -n "$cross_prefix" && enable cross_compile
2897 if enabled cross_compile; then
2898 test -n "$arch" && test -n "$target_os" ||
2899 die "Must specify target arch and OS when cross-compiling"
2902 ar_default="${cross_prefix}${ar_default}"
2903 cc_default="${cross_prefix}${cc_default}"
2904 occ_default="${cross_prefix}${occ_default}"
2905 nm_default="${cross_prefix}${nm_default}"
2906 pkg_config_default="${cross_prefix}${pkg_config_default}"
2907 ranlib="${cross_prefix}${ranlib}"
2908 strip="${cross_prefix}${strip}"
2910 sysinclude_default="${sysroot}/usr/include"
2912 set_default arch cc pkg_config sysinclude target_exec target_os
2913 enabled cross_compile || host_cc_default=$cc
2916 if ! $pkg_config --version >/dev/null 2>&1; then
2917 warn "$pkg_config not found, library detection may fail."
2923 mingw32*|mingw64*|win32|win64|cygwin*|*-dos|freedos|opendos|os/2*|symbian) echo .exe ;;
2927 EXESUF=$(exesuf $target_os)
2928 HOSTEXESUF=$(exesuf $host_os)
2930 # set temporary file name
2931 : ${TMPDIR:=$TEMPDIR}
2935 if ! check_cmd mktemp -u XXXXXX; then
2936 # simple replacement for missing mktemp
2937 # NOT SAFE FOR GENERAL USE
2939 echo "${2%%XXX*}.${HOSTNAME}.${UID}.$$"
2944 tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
2945 (set -C; exec > $tmp) 2>/dev/null ||
2946 die "Unable to create temporary file in $TMPDIR."
2947 append TMPFILES $tmp
2951 trap 'rm -f -- $TMPFILES' EXIT
2955 tmpfile TMPE $EXESUF
2966 # make sure we can execute files in $TMPDIR
2967 cat > $TMPSH 2>> $logfile <<EOF
2970 chmod +x $TMPSH >> $logfile 2>&1
2971 if ! $TMPSH >> $logfile 2>&1; then
2973 Unable to create and execute files in $TMPDIR. Set the TMPDIR environment
2974 variable to another directory and make sure that it is not mounted noexec.
2976 die "Sanity test failed."
2982 # Filter out MSVC cl.exe options from cflags that shouldn't
2983 # be passed to gas-preprocessor
2993 -std=c99) echo -c99 ;;
2994 -mcpu=*) echo -arch ${flag#*=} ;;
2995 -mieee) echo -ieee ;;
2996 -O*|-fast) echo $flag ;;
2997 -fno-math-errno) echo -assume nomath_errno ;;
2999 -Wall) echo -msg_enable level2 ;;
3000 -Wno-pointer-sign) echo -msg_disable ptrmismatch1 ;;
3001 -Wl,*) echo $flag ;;
3011 -Wno-switch) echo -Wno-switch-enum ;;
3012 -Wno-format-zero-length) ;;
3013 -Wdisabled-optimization) ;;
3014 -Wno-pointer-sign) echo -Wno-other ;;
3020 msvc_common_flags(){
3023 # In addition to specifying certain flags under the compiler
3024 # specific filters, they must be specified here as well or else the
3025 # generic catch all at the bottom will print the original flag.
3029 -fomit-frame-pointer) ;;
3033 -fno-signed-zeros) ;;
3037 -lz) echo zlib.lib ;;
3038 -lavicap32) echo vfw32.lib user32.lib ;;
3039 -lx264) echo libx264.lib ;;
3040 -l*) echo ${flag#-l}.lib ;;
3041 -L*) echo -libpath:${flag#-L} ;;
3048 msvc_common_flags "$@"
3051 -Wall) echo -W4 -wd4244 -wd4127 -wd4018 -wd4389 \
3052 -wd4146 -wd4057 -wd4204 -wd4706 -wd4305 \
3053 -wd4152 -wd4324 -we4013 -wd4100 -wd4214 \
3054 -wd4273 -wd4554 -wd4701 -wd4703 ;;
3060 msvc_common_flags "$@"
3063 # Despite what Intel's documentation says -Wall, which is supported
3064 # on Windows, does enable remarks so disable them here.
3065 -Wall) echo $flag -Qdiag-disable:remark ;;
3066 -std=c99) echo -Qstd=c99 ;;
3074 -flto) echo -Mipa=fast,libopt,libinline,vestigial ;;
3075 -fomit-frame-pointer) echo -Mnoframe ;;
3086 case "${flag#*=}" in
3087 native) echo -xtarget=native ;;
3088 v9|niagara) echo -xarch=sparc ;;
3089 ultrasparc) echo -xarch=sparcvis ;;
3090 ultrasparc3|niagara2) echo -xarch=sparcvis2 ;;
3091 i586|pentium) echo -xchip=pentium ;;
3092 i686|pentiumpro|pentium2) echo -xtarget=pentium_pro ;;
3093 pentium3*|c3-2) echo -xtarget=pentium3 ;;
3094 pentium-m) echo -xarch=sse2 -xchip=pentium3 ;;
3095 pentium4*) echo -xtarget=pentium4 ;;
3096 prescott|nocona) echo -xarch=sse3 -xchip=pentium4 ;;
3097 *-sse3) echo -xarch=sse3 ;;
3098 core2) echo -xarch=ssse3 -xchip=core2 ;;
3099 corei7) echo -xarch=sse4_2 -xchip=nehalem ;;
3100 corei7-avx) echo -xarch=avx -xchip=sandybridge ;;
3101 amdfam10|barcelona|bdver*) echo -xarch=sse4_1 ;;
3102 athlon-4|athlon-[mx]p) echo -xarch=ssea ;;
3103 k8|opteron|athlon64|athlon-fx)
3104 echo -xarch=sse2a ;;
3105 athlon*) echo -xarch=pentium_proa ;;
3108 -std=c99) echo -xc99 ;;
3109 -fomit-frame-pointer) echo -xregs=frameptr ;;
3110 -fPIC) echo -KPIC -xcode=pic32 ;;
3111 -W*,*) echo $flag ;;
3112 -f*-*|-W*|-mimpure-text) ;;
3123 case "${flag#*=}" in
3124 armv7-a|cortex-a*) echo -mv=7a8 ;;
3125 armv7-r|cortex-r*) echo -mv=7r4 ;;
3126 armv7-m|cortex-m*) echo -mv=7m3 ;;
3127 armv6*|arm11*) echo -mv=6 ;;
3128 armv5*e|arm[79]*e*|arm9[24]6*|arm96*|arm102[26])
3130 armv4*|arm7*|arm9[24]*) echo -mv=4 ;;
3133 -mfpu=neon) echo --float_support=vfpv3 --neon ;;
3134 -mfpu=vfp) echo --float_support=vfpv2 ;;
3135 -mfpu=vfpv3) echo --float_support=vfpv3 ;;
3136 -mfpu=vfpv3-d16) echo --float_support=vfpv3d16 ;;
3137 -msoft-float) echo --float_support=vfplib ;;
3138 -O[0-3]|-mf=*) echo $flag ;;
3140 -pds=*) echo $flag ;;
3141 -D*|-I*) echo $flag ;;
3142 --gcc|--abi=*) echo $flag ;;
3152 unset _type _ident _cc_c _cc_e _cc_o _flags _cflags
3153 unset _ld_o _ldflags _ld_lib _ld_path
3154 unset _depflags _DEPCMD _DEPFLAGS
3157 if $_cc -v 2>&1 | grep -q '^gcc.*LLVM'; then
3159 gcc_extra_ver=$(expr "$($_cc --version 2>/dev/null | head -n1)" : '.*\((.*)\)')
3160 _ident="llvm-gcc $($_cc -dumpversion 2>/dev/null) $gcc_extra_ver"
3161 _depflags='-MMD -MF $(@:.o=.d) -MT $@'
3164 elif $_cc -v 2>&1 | grep -qi ^gcc; then
3166 gcc_version=$($_cc --version | head -n1)
3167 gcc_basever=$($_cc -dumpversion)
3168 gcc_pkg_ver=$(expr "$gcc_version" : '[^ ]* \(([^)]*)\)')
3169 gcc_ext_ver=$(expr "$gcc_version" : ".*$gcc_pkg_ver $gcc_basever \\(.*\\)")
3170 _ident=$(cleanws "gcc $gcc_basever $gcc_pkg_ver $gcc_ext_ver")
3171 if ! $_cc -dumpversion | grep -q '^2\.'; then
3172 _depflags='-MMD -MF $(@:.o=.d) -MT $@'
3176 elif $_cc --version 2>/dev/null | grep -q ^icc; then
3178 _ident=$($_cc --version | head -n1)
3183 elif $_cc -v 2>&1 | grep -q xlc; then
3185 _ident=$($_cc -qversion 2>/dev/null | head -n1)
3187 _cflags_size='-O5 -qcompact'
3188 elif $_cc -V 2>/dev/null | grep -q Compaq; then
3190 _ident=$($_cc -V | head -n1 | cut -d' ' -f1-3)
3192 _cflags_speed='-fast'
3194 _flags_filter=ccc_flags
3195 elif $_cc --vsn 2>/dev/null | grep -Eq "ARM (C/C\+\+ )?Compiler"; then
3196 test -d "$sysroot" || die "No valid sysroot specified."
3198 _ident=$($_cc --vsn | grep -i build | head -n1 | sed 's/.*: //')
3199 armcc_conf="$PWD/armcc.conf"
3200 $_cc --arm_linux_configure \
3201 --arm_linux_config_file="$armcc_conf" \
3202 --configure_sysroot="$sysroot" \
3203 --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
3204 die "Error creating armcc configuration file."
3205 $_cc --vsn | grep -q RVCT && armcc_opt=rvct || armcc_opt=armcc
3206 _flags="--arm_linux_config_file=$armcc_conf --translate_gcc"
3207 as_default="${cross_prefix}gcc"
3211 elif $_cc -version 2>/dev/null | grep -Eq 'TMS470|TI ARM'; then
3213 _ident=$($_cc -version | head -n1 | tr -s ' ')
3214 _flags='--gcc --abi=eabi -me'
3217 _depflags='-ppa -ppd=$(@:.o=.d)'
3218 _cflags_speed='-O3 -mf=5'
3219 _cflags_size='-O3 -mf=2'
3220 _flags_filter=tms470_flags
3221 elif $_cc -v 2>&1 | grep -q clang; then
3223 _ident=$($_cc --version 2>/dev/null | head -n1)
3224 _depflags='-MMD -MF $(@:.o=.d) -MT $@'
3227 elif $_cc -V 2>&1 | grep -q Sun; then
3229 _ident=$($_cc -V 2>&1 | head -n1 | cut -d' ' -f 2-)
3230 _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "1s,^.*: ,$@: ," -e "\$$!s,\$$, \\\," -e "1!s,^.*: , ," > $(@:.o=.d)'
3231 _DEPFLAGS='-xM1 -xc99'
3234 _cflags_size='-O5 -xspace'
3235 _flags_filter=suncc_flags
3236 elif $_cc -v 2>&1 | grep -q 'PathScale\|Path64'; then
3238 _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
3239 _depflags='-MMD -MF $(@:.o=.d) -MT $@'
3242 _flags_filter='filter_out -Wdisabled-optimization'
3243 elif $_cc -v 2>&1 | grep -q Open64; then
3245 _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
3246 _depflags='-MMD -MF $(@:.o=.d) -MT $@'
3249 _flags_filter='filter_out -Wdisabled-optimization|-Wtype-limits|-fno-signed-zeros'
3250 elif $_cc -V 2>&1 | grep -q Portland; then
3252 _ident="PGI $($_cc -V 2>&1 | awk '/^pgcc/ { print $2; exit }')"
3253 opt_common='-alias=ansi -Mdse -Mlre -Mpre'
3254 _cflags_speed="-O3 -Mautoinline -Munroll=c:4 $opt_common"
3255 _cflags_size="-O2 -Munroll=c:1 $opt_common"
3257 _flags_filter=pgi_flags
3258 elif $_cc 2>&1 | grep -q 'Microsoft.*ARM.*Assembler'; then
3260 _ident=$($_cc | head -n1)
3261 # 4509: "This form of conditional instruction is deprecated"
3262 _flags="-nologo -ignore 4509"
3263 _flags_filter=armasm_flags
3264 elif $_cc -nologo- 2>&1 | grep -q Microsoft; then
3266 _ident=$($_cc 2>&1 | head -n1)
3267 _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< 2>&1 | awk '\''/including/ { sub(/^.*file: */, ""); gsub(/\\/, "/"); if (!match($$0, / /)) print "$@:", $$0 }'\'' > $(@:.o=.d)'
3268 _DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -showIncludes -Zs'
3271 if $_cc -nologo- 2>&1 | grep -q Linker; then
3278 _flags_filter=msvc_flags
3280 _ld_path='-libpath:'
3282 elif $_cc 2>&1 | grep -q Intel; then
3284 _ident=$($_cc 2>&1 | head -n1)
3285 _depflags='-QMMD -QMF$(@:.o=.d) -QMT$@'
3286 # Not only is O3 broken on 13.x+ but it is slower on all previous
3287 # versions (tested) as well.
3289 _cflags_size="-O1 -Oi" # -O1 without -Oi miscompiles stuff
3290 if $_cc 2>&1 | grep -q Linker; then
3297 _flags_filter=icl_flags
3299 _ld_path='-libpath:'
3300 # -Qdiag-error to make icl error when seeing certain unknown arguments
3301 _flags='-nologo -Qdiag-error:4044,10157'
3302 # -Qvec- -Qsimd- to prevent miscompilation, -GS for consistency
3303 # with MSVC which enables it by default.
3304 _cflags='-Qms0 -Qvec- -Qsimd- -GS'
3305 elif $_cc -? 2>/dev/null | grep -q 'LLVM.*Linker'; then
3306 # lld can emulate multiple different linkers; in ms link.exe mode,
3307 # the -? parameter gives the help output which contains an identifyable
3308 # string, while it gives an error in other modes.
3310 # The link.exe mode doesn't have a switch for getting the version,
3311 # but we can force it back to gnu mode and get the version from there.
3312 _ident=$($_cc -flavor gnu --version 2>/dev/null)
3314 _flags_filter=msvc_flags
3316 _ld_path='-libpath:'
3317 elif $_cc --version 2>/dev/null | grep -q ^cparser; then
3319 _ident=$($_cc --version | head -n1)
3323 _flags_filter=cparser_flags
3326 eval ${pfx}_type=\$_type
3327 eval ${pfx}_ident=\$_ident
3331 eval ${1}_C=\${_cc_c-\${${1}_C}}
3332 eval ${1}_E=\${_cc_e-\${${1}_E}}
3333 eval ${1}_O=\${_cc_o-\${${1}_O}}
3335 if [ -n "$_depflags" ]; then
3336 eval ${1}_DEPFLAGS=\$_depflags
3338 eval ${1}DEP=\${_DEPCMD:-\$DEPCMD}
3339 eval ${1}DEP_FLAGS=\${_DEPFLAGS:-\$DEPFLAGS}
3340 eval DEP${1}FLAGS=\$_flags
3345 cflags_filter=$_flags_filter
3346 cflags_speed=$_cflags_speed
3347 cflags_size=$_cflags_size
3348 cflags_noopt=$_cflags_noopt
3349 add_cflags $_flags $_cflags
3350 cc_ldflags=$_ldflags
3353 probe_cc hostcc "$host_cc"
3354 host_cflags_filter=$_flags_filter
3355 add_host_cflags $_flags $_cflags
3358 test -n "$cc_type" && enable $cc_type ||
3359 warn "Unknown C compiler $cc, unable to select optimal CFLAGS"
3361 : ${as_default:=$cc}
3362 : ${objcc_default:=$cc}
3363 : ${dep_cc_default:=$cc}
3364 : ${ld_default:=$cc}
3365 : ${host_ld_default:=$host_cc}
3366 set_default ar as objcc dep_cc ld host_ld
3369 asflags_filter=$_flags_filter
3370 add_asflags $_flags $_cflags
3373 probe_cc objcc "$objcc"
3374 objcflags_filter=$_flags_filter
3375 add_objcflags $_flags $_cflags
3379 ldflags_filter=$_flags_filter
3380 add_ldflags $_flags $_ldflags
3381 test "$cc_type" != "$ld_type" && add_ldflags $cc_ldflags
3383 LD_LIB=${_ld_lib-$LD_LIB}
3384 LD_PATH=${_ld_path-$LD_PATH}
3386 probe_cc hostld "$host_ld"
3387 host_ldflags_filter=$_flags_filter
3388 add_host_ldflags $_flags $_ldflags
3389 HOSTLD_O=${_ld_o-$HOSTLD_O}
3391 if [ -z "$CC_DEPFLAGS" ] && [ "$dep_cc" != "$cc" ]; then
3392 probe_cc depcc "$dep_cc"
3393 CCDEP=${_DEPCMD:-$DEPCMD}
3394 CCDEP_FLAGS=${_DEPFLAGS:=$DEPFLAGS}
3398 if $ar 2>&1 | grep -q Microsoft; then
3401 elif $ar 2>&1 | grep -q 'Texas Instruments'; then
3404 elif $ar 2>&1 | grep -q 'Usage: ar.*-X.*any'; then
3405 arflags='-Xany -r -c'
3412 add_cflags $extra_cflags
3413 add_objcflags $extra_objcflags
3414 add_asflags $extra_cflags
3416 if test -n "$sysroot"; then
3419 add_cppflags --sysroot="$sysroot"
3420 add_ldflags --sysroot="$sysroot"
3423 add_cppflags -I"$sysinclude"
3424 add_ldflags --sysroot="$sysroot"
3429 if test "$cpu" = host; then
3430 enabled cross_compile &&
3431 die "--cpu=host makes no sense when cross-compiling."
3436 $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
3438 s/.*$1=\\([^ ]*\\).*/\\1/
3443 cpu=$(check_native -march || check_native -mcpu)
3447 test "${cpu:-host}" = host &&
3448 die "--cpu=host not supported with compiler $cc"
3451 # Deal with common $arch aliases
3475 "Power Macintosh"|ppc*|powerpc*)
3490 i[3-6]86|i86pc|BePC|x86pc|x86_64|amd64)
3495 is_in $arch $ARCH_LIST || warn "unknown architecture $arch"
3498 # Add processor-specific flags
3499 if enabled aarch64; then
3503 cpuflags="-march=$cpu"
3506 cpuflags="-mcpu=$cpu"
3510 elif enabled alpha; then
3512 cpuflags="-mcpu=$cpu"
3514 elif enabled arm; then
3517 check_cpp_condition stddef.h \
3518 "defined __ARM_ARCH_${1}__ || defined __TARGET_ARCH_${2:-$1}" \
3523 if check_arm_arch 4; then echo armv4
3524 elif check_arm_arch 4T; then echo armv4t
3525 elif check_arm_arch 5; then echo armv5
3526 elif check_arm_arch 5E; then echo armv5e
3527 elif check_arm_arch 5T; then echo armv5t
3528 elif check_arm_arch 5TE; then echo armv5te
3529 elif check_arm_arch 5TEJ; then echo armv5te
3530 elif check_arm_arch 6; then echo armv6
3531 elif check_arm_arch 6J; then echo armv6j
3532 elif check_arm_arch 6K; then echo armv6k
3533 elif check_arm_arch 6Z; then echo armv6z
3534 elif check_arm_arch 6ZK; then echo armv6zk
3535 elif check_arm_arch 6T2; then echo armv6t2
3536 elif check_arm_arch 7; then echo armv7
3537 elif check_arm_arch 7A 7_A; then echo armv7-a
3538 elif check_arm_arch 7S; then echo armv7-a
3539 elif check_arm_arch 7R 7_R; then echo armv7-r
3540 elif check_arm_arch 7M 7_M; then echo armv7-m
3541 elif check_arm_arch 7EM 7E_M; then echo armv7-m
3542 elif check_arm_arch 8A 8_A; then echo armv8-a
3546 [ "$cpu" = generic ] && cpu=$(probe_arm_arch)
3550 cpuflags="-march=$cpu"
3551 subarch=$(echo $cpu | sed 's/[^a-z0-9]//g')
3554 cpuflags="-mcpu=$cpu"
3556 cortex-a*) subarch=armv7a ;;
3557 cortex-r*) subarch=armv7r ;;
3558 cortex-m*) enable thumb; subarch=armv7m ;;
3559 arm11*) subarch=armv6 ;;
3560 arm[79]*e*|arm9[24]6*|arm96*|arm102[26]) subarch=armv5te ;;
3561 armv4*|arm7*|arm9[24]*) subarch=armv4 ;;
3562 *) subarch=$(probe_arm_arch) ;;
3568 armv5t*) enable fast_clz ;;
3569 armv[6-8]*) enable fast_clz fast_unaligned ;;
3572 elif enabled avr32; then
3577 cpuflags="-mpart=$cpu"
3581 cpuflags="-march=$cpu"
3585 cpuflags="-mcpu=$cpu"
3589 cpuflags="-march=$cpu"
3593 elif enabled bfin; then
3595 cpuflags="-mcpu=$cpu"
3597 elif enabled mips; then
3599 cpuflags="-march=$cpu"
3601 elif enabled ppc; then
3605 case $(tolower $cpu) in
3606 601|ppc601|powerpc601)
3607 cpuflags="-mcpu=601"
3610 603*|ppc603*|powerpc603*)
3611 cpuflags="-mcpu=603"
3614 604*|ppc604*|powerpc604*)
3615 cpuflags="-mcpu=604"
3618 g3|75*|ppc75*|powerpc75*)
3619 cpuflags="-mcpu=750"
3622 g4|745*|ppc745*|powerpc745*)
3623 cpuflags="-mcpu=7450"
3626 74*|ppc74*|powerpc74*)
3627 cpuflags="-mcpu=7400"
3630 g5|970|ppc970|powerpc970)
3631 cpuflags="-mcpu=970"
3635 cpuflags="-mcpu=$cpu"
3639 cpuflags="-mcpu=$cpu"
3643 cpuflags="-mcpu=cell"
3648 cpuflags="-mcpu=e500mc"
3652 cpuflags="-mcpu=8548 -mhard-float -mfloat-gprs=double"
3657 cpuflags="-mcpu=8540 -mhard-float"
3663 elif enabled sparc; then
3666 cypress|f93[04]|tsc701|sparcl*|supersparc|hypersparc|niagara|v[789])
3667 cpuflags="-mcpu=$cpu"
3669 ultrasparc*|niagara[234])
3670 cpuflags="-mcpu=$cpu"
3674 elif enabled x86; then
3678 cpuflags="-march=$cpu"
3682 # targets that do NOT support nopl and conditional mov (cmov)
3683 pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
3684 cpuflags="-march=$cpu"
3687 # targets that do support nopl and conditional mov (cmov)
3688 i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64*|k8*|opteron*|athlon-fx|core2|corei7*|amdfam10|barcelona|atom|bdver*)
3689 cpuflags="-march=$cpu"
3693 # targets that do support conditional mov but on which it's slow
3694 pentium4|pentium4m|prescott|nocona)
3695 cpuflags="-march=$cpu"
3703 if [ "$cpu" != generic ]; then
3704 add_cflags $cpuflags
3705 add_asflags $cpuflags
3706 test "$cc_type" = "$ld_type" && add_ldflags $cpuflags
3709 # compiler sanity check
3711 int main(void){ return 0; }
3713 if test "$?" != 0; then
3714 echo "$cc is unable to create an executable file."
3715 if test -z "$cross_prefix" && ! enabled cross_compile ; then
3716 echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
3717 echo "Only do this if you know what cross compiling means."
3719 die "C compiler test failed."
3722 add_cppflags -D_ISOC99_SOURCE
3724 # some compilers silently accept -std=c11, so we also need to check that the
3725 # version macro is defined properly
3726 if test_cflags_cpp -std=c11 "__STDC_VERSION__ >= 201112L"; then
3729 check_cflags -std=c99
3732 check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
3735 check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
3739 add_host_cppflags -D_ISOC99_SOURCE
3740 check_host_cflags -std=c99
3741 check_host_cflags -Wall
3742 check_host_cflags -O3
3748 check_code cc "" "int test[2*($expr) - 1]" &&
3749 subarch=$arch64 || subarch=$arch32
3757 check_64bit mips mips64 '_MIPS_SIM > 1'
3761 check_64bit parisc parisc64 'sizeof(void *) > 4'
3765 check_64bit ppc ppc64 'sizeof(void *) > 4'
3769 check_64bit s390 s390x 'sizeof(void *) > 4'
3773 check_64bit sparc sparc64 'sizeof(void *) > 4'
3777 check_64bit x86_32 x86_64 'sizeof(void *) > 4'
3778 if test "$subarch" = "x86_64"; then
3785 enabled spic && enable_weak pic
3791 add_cppflags '-I\$(SRC_PATH)/compat/aix'
3792 enabled shared && add_ldflags -Wl,-brtl
3796 enable section_data_rel_ro
3797 SLIB_INSTALL_NAME='$(SLIBNAME)'
3799 SHFLAGS='-shared -Wl,-soname,$(SLIBNAME)'
3802 prefix_default="/boot/common"
3803 network_extralibs="-lnetwork"
3807 SHFLAGS='-shared -Wl,-h,$$(@F)'
3808 enabled x86 && SHFLAGS="-mimpure-text $SHFLAGS"
3809 network_extralibs="-lsocket -lnsl"
3810 # When using suncc to build, the Solaris linker will mark
3811 # an executable with each instruction set encountered by
3812 # the Solaris assembler. As our libraries contain their own
3813 # guards for processor-specific code, instead suppress
3814 # generation of the HWCAPS ELF section on Solaris x86 only.
3815 enabled_all suncc x86 &&
3816 echo "hwcap_1 = OVERRIDE;" > mapfile &&
3817 add_ldflags -Wl,-M,mapfile
3818 nm_default='nm -P -g'
3820 VERSION_SCRIPT_POSTPROCESS_CMD='perl $(SRC_PATH)/compat/solaris/make_sunver.pl - $(OBJS)'
3824 oss_indev_extralibs="-lossaudio"
3825 oss_outdev_extralibs="-lossaudio"
3830 SLIB_INSTALL_NAME='$(SLIBNAME).$(LIBMAJOR).$(LIBMINOR)'
3832 oss_indev_extralibs="-lossaudio"
3833 oss_outdev_extralibs="-lossaudio"
3841 add_extralibs -lpoll -lgnugetopt
3844 enabled ppc && add_asflags -force_cpusubtype_ALL
3845 SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR)'
3846 enabled x86_32 && append SHFLAGS -Wl,-read_only_relocs,suppress
3847 add_ldflags -Wl,-dynamic,-search_paths_first
3849 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
3850 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
3852 enabled x86_64 && objformat="macho64"
3853 enabled_any pic shared ||
3854 { check_cflags -mdynamic-no-pic && add_asflags -mdynamic-no-pic; }
3855 check_header dispatch/dispatch.h &&
3856 add_cppflags '-I\$(SRC_PATH)/compat/dispatch_semaphore'
3859 die "Native MSYS builds are discouraged, please use the MINGW environment."
3862 if test $target_os = "mingw32ce"; then
3868 if enabled x86_64; then
3869 LIBTARGET="i386:x86-64"
3870 elif enabled arm; then
3873 check_ldflags -Wl,--nxcompat
3874 check_ldflags -Wl,--dynamicbase
3875 shlibdir_default="$bindir_default"
3878 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
3879 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
3880 SLIB_EXTRA_CMD=-'sed -e "s/ @[^ ]*//" $$(@:$(SLIBSUF)=.orig.def) > $$(@:$(SLIBSUF)=.def); $(DLLTOOL) -m $(LIBTARGET) -d $$(@:$(SLIBSUF)=.def) -l $(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib) -D $(SLIBNAME_WITH_MAJOR)'
3881 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
3883 SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
3884 SLIB_INSTALL_EXTRA_LIB='lib$(SLIBNAME:$(SLIBSUF)=.dll.a) $(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
3885 SHFLAGS='-shared -Wl,--output-def,$$(@:$(SLIBSUF)=.orig.def) -Wl,--out-implib,$(SUBDIR)lib$(SLIBNAME:$(SLIBSUF)=.dll.a) -Wl,--enable-runtime-pseudo-reloc -Wl,--enable-auto-image-base'
3887 dlltool="${cross_prefix}dlltool"
3893 if enabled shared; then
3894 # Link to the import library instead of the normal static library
3897 # Cannot build both shared and static libs with MSVC or icl.
3900 shlibdir_default="$bindir_default"
3903 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
3904 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
3905 SLIB_CREATE_DEF_CMD='$(SRC_PATH)/compat/windows/makedef $(SUBDIR)lib$(NAME).ver $(OBJS) > $$(@:$(SLIBSUF)=.def)'
3906 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
3908 SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
3909 SLIB_INSTALL_EXTRA_LIB='$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
3910 SHFLAGS='-dll -def:$$(@:$(SLIBSUF)=.def) -implib:$(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib)'
3917 shlibdir_default="$bindir_default"
3920 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
3921 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
3922 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
3924 SLIB_INSTALL_EXTRA_LIB='lib$(FULLNAME).dll.a'
3925 SHFLAGS='-shared -Wl,--out-implib,$(SUBDIR)lib$(FULLNAME).dll.a'
3929 *-dos|freedos|opendos)
3930 network_extralibs="-lsocket"
3933 add_cppflags -U__STRICT_ANSI__
3937 enable section_data_rel_ro
3941 ranlib="echo ignoring ranlib"
3946 add_cppflags -D_GNU_SOURCE
3947 add_ldflags -Zomf -Zbin-files -Zargs-wild -Zmap
3948 SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
3952 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
3953 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
3954 SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
3955 echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
3956 echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
3957 echo EXPORTS >> $(SUBDIR)$(NAME).def; \
3958 emxexp $(OBJS) >> $(SUBDIR)$(NAME).def'
3959 SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
3960 emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
3961 SLIB_INSTALL_EXTRA_LIB='$(LIBPREF)$(NAME)_dll.a $(LIBPREF)$(NAME)_dll.lib'
3965 add_cppflags -D_BSD_SOURCE
3970 add_cppflags -D_QNX_SOURCE
3971 network_extralibs="-lsocket"
3976 add_cflags --include=$sysinclude/gcce/gcce.h -fvisibility=default
3977 add_cppflags -D__GCCE__ -D__SYMBIAN32__ -DSYMBIAN_OE_POSIX_SIGNALS
3978 add_ldflags -Wl,--target1-abs,--no-undefined \
3979 -Wl,-Ttext,0x80000,-Tdata,0x1000000 -shared \
3980 -Wl,--entry=_E32Startup -Wl,-u,_E32Startup
3981 add_extralibs -l:eexe.lib -l:usrt2_2.lib -l:dfpaeabi.dso \
3982 -l:drtaeabi.dso -l:scppnwdl.dso -lsupc++ -lgcc \
3983 -l:libc.dso -l:libm.dso -l:euser.dso -l:libcrt0.lib
3986 add_cppflags -D_OSF_SOURCE -D_POSIX_PII -D_REENTRANT
3991 add_cppflags -D_C99_SNPRINTF_EXTENSION \
3992 -D_REENTRANT_SOURCE \
3993 -D_RESEARCH_SOURCE \
3996 add_compat strtod.o strtod=avpriv_strtod
3997 network_extralibs='-lbsd'
3998 exeobjs=compat/plan9/main.o
4004 die "Unknown OS '$target_os'."
4008 # determine libc flavour
4013 # uclibc defines __GLIBC__, so it needs to be checked before glibc.
4014 if check_${pfx}cpp_condition features.h "defined __UCLIBC__"; then
4015 eval ${pfx}libc_type=uclibc
4016 add_${pfx}cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
4017 elif check_${pfx}cpp_condition features.h "defined __GLIBC__"; then
4018 eval ${pfx}libc_type=glibc
4019 add_${pfx}cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
4020 # MinGW headers can be installed on Cygwin, so check for newlib first.
4021 elif check_${pfx}cpp_condition newlib.h "defined _NEWLIB_VERSION"; then
4022 eval ${pfx}libc_type=newlib
4023 add_${pfx}cppflags -U__STRICT_ANSI__
4024 # MinGW64 is backwards compatible with MinGW32, so check for it first.
4025 elif check_${pfx}cpp_condition _mingw.h "defined __MINGW64_VERSION_MAJOR"; then
4026 eval ${pfx}libc_type=mingw64
4027 add_${pfx}cppflags -U__STRICT_ANSI__ -D__USE_MINGW_ANSI_STDIO=1
4028 eval test \$${pfx_no_}cc_type = "gcc" &&
4029 add_${pfx}cppflags -D__printf__=__gnu_printf__
4030 elif check_${pfx}cpp_condition _mingw.h "defined __MINGW_VERSION" ||
4031 check_${pfx}cpp_condition _mingw.h "defined __MINGW32_VERSION"; then
4032 eval ${pfx}libc_type=mingw32
4033 check_${pfx}cpp_condition _mingw.h "__MINGW32_MAJOR_VERSION > 3 || \
4034 (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
4035 die "ERROR: MinGW32 runtime version must be >= 3.15."
4036 add_${pfx}cppflags -U__STRICT_ANSI__ -D__USE_MINGW_ANSI_STDIO=1
4037 check_${pfx}cpp_condition _mingw.h "__MSVCRT_VERSION__ < 0x0700__" &&
4038 add_${pfx}cppflags -D__MSVCRT_VERSION__=0x0700
4039 eval test \$${pfx_no_}cc_type = "gcc" &&
4040 add_${pfx}cppflags -D__printf__=__gnu_printf__
4041 elif check_${pfx}cpp_condition crtversion.h "defined _VC_CRT_MAJOR_VERSION"; then
4042 eval ${pfx}libc_type=msvcrt
4043 if check_${pfx}cpp_condition crtversion.h "_VC_CRT_MAJOR_VERSION < 14"; then
4044 if [ "$pfx" = host_ ]; then
4045 add_host_cppflags -Dsnprintf=_snprintf
4047 add_compat strtod.o strtod=avpriv_strtod
4048 add_compat msvcrt/snprintf.o snprintf=avpriv_snprintf \
4049 _snprintf=avpriv_snprintf \
4050 vsnprintf=avpriv_vsnprintf
4053 add_${pfx}cppflags -D_USE_MATH_DEFINES -D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_WARNINGS
4054 # The MSVC 2010 headers (Win 7.0 SDK) set _WIN32_WINNT to
4055 # 0x601 by default unless something else is set by the user.
4056 # This can easily lead to us detecting functions only present
4057 # in such new versions and producing binaries requiring windows 7.0.
4058 # Therefore explicitly set the default to XP unless the user has
4059 # set something else on the command line.
4060 # Don't do this if WINAPI_FAMILY is set and is set to a non-desktop
4061 # family. For these cases, configure is free to use any functions
4062 # found in the SDK headers by default. (Alternatively, we could force