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 [avbuild/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-avxsynth Linux version of AviSynth
192 --enable-bzlib bzip2 compression [autodetect]
193 --enable-frei0r video filtering plugins
194 --enable-gnutls crypto
195 --enable-libbs2b Bauer stereophonic-to-binaural DSP
196 --enable-libcdio audio CD input
197 --enable-libdc1394 IEEE 1394/Firewire camera input
198 --enable-libdcadec DCA audio decoding
199 --enable-libfaac AAC audio encoding
200 --enable-libfdk-aac AAC audio encoding/decoding
201 --enable-libfontconfig font configuration and management
202 --enable-libfreetype font rendering
203 --enable-libgsm GSM audio encoding/decoding
204 --enable-libhdcd HDCD decoding filter
205 --enable-libilbc ILBC audio encoding/decoding
206 --enable-libkvazaar HEVC video encoding
207 --enable-libmp3lame MP3 audio encoding
208 --enable-libopencore-amrnb AMR-NB audio encoding/decoding
209 --enable-libopencore-amrwb AMR-WB audio decoding
210 --enable-libopencv computer vision
211 --enable-libopenh264 H.264 video encoding/decoding
212 --enable-libopenjpeg JPEG 2000 image encoding/decoding
213 --enable-libopus Opus audio encoding/decoding
214 --enable-libpulse Pulseaudio sound server
215 --enable-librtmp RTMP streaming
216 --enable-libschroedinger Dirac video encoding/decoding
217 --enable-libsnappy snappy compression
218 --enable-libspeex Speex audio encoding/decoding
219 --enable-libtheora Theora video encoding/decoding
220 --enable-libtwolame MP2 audio encoding
221 --enable-libvo-aacenc AAC audio encoding
222 --enable-libvo-amrwbenc AMR-WB audio encoding
223 --enable-libvorbis Vorbis audio encoding/decoding
224 --enable-libvpx VP* video encoding/decoding
225 --enable-libwavpack Wavpack audio encoding/decoding
226 --enable-libwebp WebP image encoding/decoding
227 --enable-libx264 H.264 video encoding
228 --enable-libx265 HEVC video encoding
229 --enable-libxavs Chinese AVS video encoding
230 --enable-libxcb X window system protocol communication
231 --enable-libxcb-shm X11 shm communication [auto]
232 --enable-libxcb-xfixes X11 mouse rendering [auto]
233 --enable-libxvid MPEG-4 ASP video encoding
234 --enable-openssl crypto
235 --enable-zlib compression [autodetect]
237 The following libraries provide various hardware acceleration features:
238 --enable-cuda Nvidia CUDA (dynamically linked)
239 --enable-d3d11va Microsoft Direct3D 11 video acceleration [auto]
240 --enable-dxva2 Microsoft DirectX 9 video acceleration [auto]
241 --enable-libmfx Intel MediaSDK (AKA Quick Sync Video)
242 --enable-libnpp Nvidia CUDA processing
243 --enable-mmal Broadcom Multi-Media Abstraction Layer (Raspberry Pi)
244 --enable-nvenc Nvidia video encoding
245 --enable-omx OpenMAX IL
246 --enable-omx-rpi OpenMAX IL for Raspberry Pi
247 --enable-vaapi Video Acceleration API (mainly Unix/Intel)
248 --enable-vda Apple Video Decode Acceleration [auto]
249 --enable-vdpau Nvidia Video Decode and Presentation API for Unix [auto]
252 --arch=ARCH select architecture [$arch]
253 --cpu=CPU select the minimum required CPU (affects
254 instruction selection, may crash on older CPUs)
255 --cross-prefix=PREFIX use PREFIX for compilation tools [$cross_prefix]
256 --enable-cross-compile assume a cross-compiler is used
257 --sysroot=PATH root of cross-build tree
258 --sysinclude=PATH location of cross-build system headers
259 --target-os=OS compiler targets OS [$target_os]
260 --target-exec=CMD command to run executables on target
261 --target-path=DIR path to view of build directory on target
262 --target-samples=DIR path to samples directory on target
263 --toolchain=NAME set tool defaults according to NAME
265 --ar=AR use archive tool AR [$ar_default]
266 --as=AS use assembler AS [$as_default]
267 --cc=CC use C compiler CC [$cc_default]
268 --objcc=OCC use ObjC compiler OCC [$cc_default]
269 --dep-cc=DEPCC use dependency generator DEPCC [$cc_default]
270 --ld=LD use linker LD
271 --pkg-config=PKGCONFIG use pkg-config tool PKGCONFIG [$pkg_config_default]
272 --pkg-config-flags=FLAGS pass additional flags to pkgconf []
273 --host-cc=HOSTCC use host C compiler HOSTCC
274 --host-cflags=HCFLAGS use HCFLAGS when compiling for host
275 --host-cppflags=HCPPFLAGS use HCPPFLAGS when compiling for host
276 --host-ld=HOSTLD use host linker HOSTLD
277 --host-ldflags=HLDFLAGS use HLDFLAGS when linking for host
278 --host-libs=HLIBS use libs HLIBS when linking for host
279 --host-os=OS compiler host OS [$target_os]
280 --extra-cflags=ECFLAGS add ECFLAGS to CFLAGS [$CFLAGS]
281 --extra-objcflags=FLAGS add FLAGS to OBJCFLAGS [$CFLAGS]
282 --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]
283 --extra-ldexeflags=ELDFLAGS add ELDFLAGS to LDEXEFLAGS [$LDEXEFLAGS]
284 --extra-libs=ELIBS add ELIBS [$ELIBS]
285 --extra-version=STRING version string suffix []
286 --optflags=OPTFLAGS override optimization-related compiler flags
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)
351 --ignore-tests=TESTS comma-separated list (without "fate-" prefix
352 in the name) of tests whose result is ignored
354 NOTE: Object files are built at the place where configure is launched.
362 echo "$@" >> $logfile
369 printf '%5s %s\n' "${i}" "${line}"
371 done < $1 >> $logfile
382 WARNINGS="${WARNINGS}WARNING: $*\n"
389 If you think configure made a mistake, make sure you are using the latest
390 version from Git. If the latest version fails, report the problem to the
391 libav-tools@libav.org mailing list or IRC #libav on irc.freenode.net.
393 if disabled logging; then
395 Rerun configure with logging enabled (do not use --disable-logging), and
396 include the log this produces with your report.
400 Include the log file "$logfile" produced by configure as this will help
407 # Avoid locale weirdness, besides we really just want to translate ASCII.
409 echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
413 echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
417 echo "$*" | sed 's/["\\]/\\\0/g'
421 v=$(echo "$1" | sed "s/'/'\\\\''/g")
422 test "x$v" = "x${v#*[!A-Za-z0-9_/.+-]}" || v="'$v'"
427 echo "$@" | sed 's/^ *//;s/ */ /g;s/ *$//'
434 eval "case $v in $pat) printf '%s ' $v ;; esac"
442 eval "case $v in $pat) ;; *) printf '%s ' $v ;; esac"
449 for v; do eval $m; done
455 for v; do echo ${v}${suffix}; done
470 eval : \${$var:=$value}
475 echo $@ | sed 's/[^A-Za-z0-9_]/_/g'
481 eval $(sanitize_var_name "$var")='$*'
485 eval echo \$$(sanitize_var_name "$1")
490 eval level=\${${pvar}_level:=0}
491 eval ${pvar}_${level}="\$$pvar"
492 eval ${pvar}_level=$(($level+1))
498 eval level=\${${pvar}_level:-0}
499 test $level = 0 && continue
500 eval level=$(($level-1))
501 eval $pvar="\${${pvar}_${level}}"
502 eval ${pvar}_level=$level
503 eval unset ${pvar}_${level}
525 enable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
531 disable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
537 enabled $var && continue
538 eval sel="\$${var}_select"
539 eval sgs="\$${var}_suggest"
543 enable_deep_weak $sgs
555 disabled $var && continue
564 test "${1#!}" = "$1" && op== || op=!=
565 eval test "x\$${1#!}" $op "xyes"
569 test "${1#!}" = "$1" && op== || op=!=
570 eval test "x\$${1#!}" $op "xno"
575 enabled $opt || return 1
581 disabled $opt || return 1
587 enabled $opt && return 0
593 disabled $opt && return 0
600 eval : \${$opt:=\$${opt}_default}
608 [ $var = $value ] && return 0
615 enabled ${cfg}_checking && die "Circular dependency for $cfg."
616 disabled ${cfg}_checking && continue
617 enable ${cfg}_checking
620 eval dep_all="\$${cfg}_deps"
621 eval dep_any="\$${cfg}_deps_any"
622 eval dep_con="\$${cfg}_conflict"
623 eval dep_sel="\$${cfg}_select"
624 eval dep_sgs="\$${cfg}_suggest"
625 eval dep_ifa="\$${cfg}_if"
626 eval dep_ifn="\$${cfg}_if_any"
628 pushvar cfg dep_all dep_any dep_con dep_sel dep_sgs dep_ifa dep_ifn
629 do_check_deps $dep_all $dep_any $dep_con $dep_sel $dep_sgs $dep_ifa $dep_ifn
630 popvar cfg dep_all dep_any dep_con dep_sel dep_sgs dep_ifa dep_ifn
632 [ -n "$dep_ifa" ] && { enabled_all $dep_ifa && enable_weak $cfg; }
633 [ -n "$dep_ifn" ] && { enabled_any $dep_ifn && enable_weak $cfg; }
634 enabled_all $dep_all || disable $cfg
635 enabled_any $dep_any || disable $cfg
636 disabled_all $dep_con || disable $cfg
637 disabled_any $dep_sel && disable $cfg
639 if enabled $cfg; then
641 enable_deep_weak $dep_sgs
644 disable ${cfg}_checking
653 for cfg in $allopts; do
654 enabled $cfg || continue
655 eval dep_extralibs="\$${cfg}_extralibs"
656 test -n "$dep_extralibs" && add_extralibs $dep_extralibs
664 map 'eval echo "$v \${$v:-no}"' "$@" |
665 awk "BEGIN { split(\"$files\", files) }
667 c = \"$pfx\" toupper(\$1);
673 if (file ~ /\\.h\$/) {
674 printf(\"#define %s %d\\n\", c, v) >>file;
675 } else if (file ~ /\\.asm\$/) {
676 printf(\"%%define %s %d\\n\", c, v) >>file;
677 } else if (file ~ /\\.mak\$/) {
678 n = -v ? \"\" : \"!\";
679 printf(\"%s%s=yes\\n\", n, c) >>file;
689 enabled $v && printf "%s\n" ${v%$suf}
696 eval "$var=\"\$$var $*\""
702 eval "$var=\"$* \$$var\""
708 for tok in $(eval echo \$$var); do
709 uniq_list="$(filter_out $tok $uniq_list) $tok"
711 eval "$var=\"${uniq_list}\""
719 append CFLAGS $($cflags_filter "$@")
722 add_cflags_headers(){
723 append CFLAGS_HEADERS $($cflags_filter "$@")
727 append ASFLAGS $($asflags_filter "$@")
731 append OBJCFLAGS $($objcflags_filter "$@")
735 append LDFLAGS $($ldflags_filter "$@")
739 append LDEXEFLAGS $($ldflags_filter "$@")
743 append STRIPFLAGS "$@"
747 prepend extralibs $($ldflags_filter "$@")
751 append host_cppflags "$@"
755 append host_cflags $($host_cflags_filter "$@")
759 append host_ldflags $($host_ldflags_filter "$@")
763 append compat_objs $1
765 map 'add_cppflags -D$v' "$@"
770 "$@" >> $logfile 2>&1
774 eval printf '%s\\n' $CC_O
778 eval printf '%s\\n' $CC_E
785 check_cmd $cc $CPPFLAGS $CFLAGS "$@" $CC_C $(cc_o $TMPO) $TMPC
792 check_cmd $objcc $CPPFLAGS $CFLAGS $OBJCFLAGS "$@" $OBJCC_C $(cc_o $TMPO) $TMPC
799 check_cmd $cc $CPPFLAGS $CFLAGS "$@" $(cc_e $TMPO) $TMPC
803 eval printf '%s\\n' $AS_O
810 check_cmd $as $CPPFLAGS $ASFLAGS "$@" $AS_C $(as_o $TMPO) $TMPS
814 log check_inline_asm "$@"
819 check_cc "$@" <<EOF && enable $name
820 void foo(void){ __asm__ volatile($code); }
826 check_inline_asm ${1}_inline "\"$2\""
827 echo "$2" | check_as && enable ${1}_external || disable ${1}_external
835 check_cmd $yasmexe $YASMFLAGS "$@" -o $TMPO $TMPS
839 eval printf '%s\\n' $LD_O
844 flags=$(filter_out '-l*' "$@")
845 libs=$(filter '-l*' "$@")
846 check_cc $($cflags_filter $flags) || return
847 flags=$($ldflags_filter $flags)
848 libs=$($ldflags_filter $libs)
849 check_cmd $ld $LDFLAGS $flags $(ld_o $TMPE) $TMPO $libs $extralibs
854 test "${hdr%.h}" = "${hdr}" &&
855 echo "#include $hdr" ||
856 echo "#include <$hdr>"
866 for hdr in $headers; do
869 echo "int main(void) { $code; return 0; }"
870 } | check_$check "$@"
874 log check_cppflags "$@"
875 check_cpp "$@" <<EOF && append CPPFLAGS "$@"
882 set -- $($cflags_filter "$@")
889 log check_cflags "$@"
890 test_cflags "$@" && add_cflags "$@"
894 log test_objcflags "$@"
895 set -- $($objcflags_filter "$@")
896 check_objcc "$@" <<EOF
902 log check_objcflags "$@"
903 test_objcflags "$@" && add_objcflags "$@"
907 log test_ldflags "$@"
909 int main(void){ return 0; }
914 log check_ldflags "$@"
915 test_ldflags "$@" && add_ldflags "$@"
919 log test_stripflags "$@"
920 # call check_cc to get a fresh TMPO
922 int main(void) { return 0; }
924 check_cmd $strip $STRIPFLAGS "$@" $TMPO
928 log check_stripflags "$@"
929 test_stripflags "$@" && add_stripflags "$@"
933 log check_header "$@"
937 check_cpp "$@" <<EOF && enable_safe $header
948 check_ld "$@" <<EOF && enable $func
950 int main(void){ $func(); }
955 log check_mathfunc "$@"
959 test $narg = 2 && args="f, g" || args="f"
961 check_ld "$@" <<EOF && enable $func
963 float foo(float f, float g) { return $func($args); }
964 int main(void){ return 0; }
968 check_func_headers(){
969 log check_func_headers "$@"
974 for hdr in $headers; do
977 for func in $funcs; do
978 echo "long check_$func(void) { return (long) $func; }"
980 echo "int main(void) { return 0; }"
981 } | check_ld "$@" && enable $funcs && enable_safe $headers
984 check_cpp_condition(){
985 log check_cpp_condition "$@"
992 #error "unsatisfied condition: $condition"
998 log test_cflags_cpp "$@"
1002 set -- $($cflags_filter "$flags")
1003 check_cpp "$@" <<EOF
1005 #error "unsatisfied condition: $condition"
1017 check_func_headers "$headers" "$funcs" "$@" &&
1018 enable $name && add_extralibs "$@"
1022 log check_pkg_config "$@"
1028 check_cmd $pkg_config --exists --print-errors $pkg_version || return
1029 pkg_cflags=$($pkg_config --cflags $pkg_config_flags $pkg)
1030 pkg_libs=$($pkg_config --libs $pkg_config_flags $pkg)
1031 check_func_headers "$headers" "$funcs" $pkg_cflags $pkg_libs "$@" &&
1032 set_safe "${pkg}_cflags" $pkg_cflags &&
1033 set_safe "${pkg}_extralibs" $pkg_libs
1037 check_ld "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
1041 log check_exec_crash "$@"
1044 # exit() is not async signal safe. _Exit (C99) and _exit (POSIX)
1045 # are safe but may not be available everywhere. Thus we use
1046 # raise(SIGTERM) instead. The check is run in a subshell so we
1047 # can redirect the "Terminated" message from the shell. SIGBUS
1048 # is not defined by standard C so it is used conditionally.
1050 (check_exec "$@") >> $logfile 2>&1 <<EOF
1052 static void sighandler(int sig){
1058 int (*func_ptr)(void) = foo;
1060 signal(SIGILL, sighandler);
1061 signal(SIGFPE, sighandler);
1062 signal(SIGSEGV, sighandler);
1064 signal(SIGBUS, sighandler);
1076 disable_safe "$type"
1077 check_code cc "$headers" "$type v" "$@" && enable_safe "$type"
1081 log check_struct "$@"
1086 disable_safe "${struct}_${member}"
1087 check_code cc "$headers" "const void *p = &(($struct *)0)->$member" "$@" &&
1088 enable_safe "${struct}_${member}"
1092 log check_builtin "$@"
1098 check_code ld "$headers" "$builtin" "$@" && enable "$name"
1101 check_compile_assert(){
1102 log check_compile_assert "$@"
1108 check_code cc "$headers" "char c[2 * !!($condition) - 1]" "$@" && enable "$name"
1118 check_lib $name "$headers" $func "$@" || die "ERROR: $name_version not found"
1125 check_header "$header" "$@" || die "ERROR: $header not found"
1128 require_cpp_condition(){
1133 check_cpp_condition "$header" "$condition" "$@" || die "ERROR: $condition not satisfied"
1136 require_pkg_config(){
1137 log require_pkg_config "$@"
1142 test "$name" = "" && name=$pkg
1143 check_pkg_config "$@" || die "ERROR: $pkg_version not found"
1144 add_cflags $(get_safe "${pkg}_cflags")
1145 add_extralibs $(get_safe "${pkg}_extralibs")
1149 eval printf '%s\\n' $HOSTCC_E
1153 eval printf '%s\\n' $HOSTCC_O
1157 log check_host_cc "$@"
1160 check_cmd $host_cc $host_cflags "$@" $HOSTCC_C $(hostcc_o $TMPO) $TMPC
1164 log check_host_cpp "$@"
1167 check_cmd $host_cc $host_cppflags $host_cflags "$@" $(hostcc_e $TMPO) $TMPC
1170 check_host_cppflags(){
1171 log check_host_cppflags "$@"
1172 check_host_cpp "$@" <<EOF && append host_cppflags "$@"
1173 #include <stdlib.h>;
1177 check_host_cflags(){
1178 log check_host_cflags "$@"
1179 set -- $($host_cflags_filter "$@")
1180 check_host_cc "$@" <<EOF && append host_cflags "$@"
1185 check_host_cpp_condition(){
1186 log check_host_cpp_condition "$@"
1190 check_host_cpp "$@" <<EOF
1193 #error "unsatisfied condition: $condition"
1201 "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
1205 cmp -s "$1" "$2" && { test "$quiet" != "yes" && echo "$2 is unchanged"; } && return
1206 mkdir -p "$(dirname $2)"
1210 # CONFIG_LIST contains configurable options, while HAVE_LIST is for
1211 # system-dependent things.
1213 AVCODEC_COMPONENTS="
1221 AVDEVICE_COMPONENTS="
1225 AVFILTER_COMPONENTS="
1228 AVFORMAT_COMPONENTS="
1234 AVRESAMPLE_COMPONENTS=""
1235 AVUTIL_COMPONENTS=""
1239 $AVDEVICE_COMPONENTS
1240 $AVFILTER_COMPONENTS
1241 $AVFORMAT_COMPONENTS
1242 $AVRESAMPLE_COMPONENTS
1247 decode_audio_example
1248 decode_video_example
1249 encode_audio_example
1250 encode_video_example
1251 filter_audio_example
1255 transcode_aac_example
1258 HWACCEL_LIBRARY_NONFREE_LIST="
1262 HWACCEL_LIBRARY_LIST="
1263 $HWACCEL_LIBRARY_NONFREE_LIST
1275 EXTERNAL_LIBRARY_GPL_LIST="
1283 EXTERNAL_LIBRARY_NONFREE_LIST="
1289 EXTERNAL_LIBRARY_VERSION3_LIST="
1296 EXTERNAL_LIBRARY_LIST="
1297 $EXTERNAL_LIBRARY_GPL_LIST
1298 $EXTERNAL_LIBRARY_NONFREE_LIST
1299 $EXTERNAL_LIBRARY_VERSION3_LIST
1341 safe_bitstream_reader
1384 # COMPONENT_LIST needs to come last to ensure correct dependency checking
1387 $EXTERNAL_LIBRARY_LIST
1388 $HWACCEL_LIBRARY_LIST
1452 ARCH_EXT_LIST_X86_SIMD="
1480 $ARCH_EXT_LIST_X86_SIMD
1485 ARCH_EXT_LIST_MIPS="
1522 sync_val_compare_and_swap
1536 AVFoundation_AVFoundation_h
1541 cdio_paranoia_paranoia_h
1544 dev_bktr_ioctl_bt848_h
1545 dev_bktr_ioctl_meteor_h
1547 dev_video_bktr_ioctl_bt848_h
1548 dev_video_meteor_ioctl_meteor_h
1555 machine_ioctl_bt848_h
1556 machine_ioctl_meteor_h
1621 GetProcessAffinityMask
1622 GetProcessMemoryInfo
1625 GetSystemTimeAsFileTime
1630 jack_port_get_latency_range
1642 SetConsoleTextAttribute
1653 TOOLCHAIN_FEATURES="
1676 CONDITION_VARIABLE_Ptr
1679 struct_group_source_req
1680 struct_ip_mreq_source
1683 struct_rusage_ru_maxrss
1685 struct_sockaddr_sa_len
1686 struct_sockaddr_storage
1687 struct_v4l2_frmivalenum_discrete
1692 $(add_suffix _external $ARCH_EXT_LIST)
1693 $(add_suffix _inline $ARCH_EXT_LIST)
1708 MMAL_PARAMETER_VIDEO_MAX_NUM_CALLBACKS
1717 # options emitted with CONFIG_ prefix but not available on the command line
1865 # code dependency declarations
1867 # architecture extensions
1872 armv8_deps="aarch64"
1873 neon_deps_any="aarch64 arm"
1874 intrinsics_neon_deps="neon"
1875 vfp_deps_any="aarch64 arm"
1878 map 'eval ${v}_inline_deps=inline_asm' $ARCH_EXT_LIST_ARM
1886 x86_64_select="i686"
1887 x86_64_suggest="fast_cmov"
1890 amd3dnowext_deps="amd3dnow"
1906 mmx_external_deps="yasm"
1907 mmx_inline_deps="inline_asm"
1908 mmx_suggest="mmx_external mmx_inline"
1910 for ext in $(filter_out mmx $ARCH_EXT_LIST_X86_SIMD); do
1911 eval dep=\$${ext}_deps
1912 eval ${ext}_external_deps='"${dep}_external"'
1913 eval ${ext}_inline_deps='"${dep}_inline"'
1914 eval ${ext}_suggest='"${ext}_external ${ext}_inline"'
1917 aligned_stack_if_any="aarch64 ppc x86"
1918 fast_64bit_if_any="aarch64 alpha ia64 mips64 parisc64 ppc64 sparc64 x86_64"
1919 fast_clz_if_any="aarch64 alpha avr32 mips ppc x86"
1920 fast_unaligned_if_any="aarch64 ppc x86"
1921 simd_align_16_if_any="altivec neon sse"
1922 simd_align_32_if_any="avx"
1924 # system capabilities
1925 symver_if_any="symver_asm_label symver_gnu_asm"
1926 valgrind_backtrace_conflict="optimizations"
1927 valgrind_backtrace_deps="valgrind_valgrind_h"
1930 atomics_gcc_if="sync_val_compare_and_swap"
1931 atomics_suncc_if="atomic_cas_ptr machine_rw_barrier"
1932 atomics_win32_if="MemoryBarrier"
1933 atomics_native_if_any="$ATOMICS_LIST"
1934 w32threads_deps="atomics_native"
1935 threads_if_any="$THREADS_LIST"
1939 dirac_parse_select="golomb"
1940 error_resilience_select="me_cmp"
1941 faandct_deps="faan fdctdsp"
1942 faanidct_deps="faan idctdsp"
1943 h264dsp_select="startcode"
1944 hevc_ps_select="golomb"
1945 intrax8_select="blockdsp idctdsp"
1948 me_cmp_select="fdctdsp idctdsp pixblockdsp"
1949 mpeg_er_select="error_resilience"
1950 mpegaudio_select="mpegaudiodsp mpegaudioheader"
1951 mpegaudiodsp_select="dct"
1952 mpegvideo_select="blockdsp hpeldsp idctdsp me_cmp mpeg_er videodsp"
1953 mpegvideoenc_select="me_cmp mpegvideo pixblockdsp qpeldsp"
1954 vc1dsp_select="h264chroma qpeldsp startcode"
1956 # decoders / encoders
1957 aac_decoder_select="imdct15 mdct sinewin"
1958 aac_encoder_select="audio_frame_queue iirfilter mdct sinewin"
1959 aac_latm_decoder_select="aac_decoder aac_latm_parser"
1960 ac3_decoder_select="ac3_parser ac3dsp bswapdsp fmtconvert mdct"
1961 ac3_encoder_select="ac3dsp audiodsp mdct me_cmp"
1962 ac3_fixed_encoder_select="ac3dsp audiodsp mdct me_cmp"
1963 adpcm_g722_decoder_select="g722dsp"
1964 adpcm_g722_encoder_select="g722dsp"
1965 aic_decoder_select="golomb idctdsp"
1966 alac_encoder_select="lpc"
1967 als_decoder_select="bswapdsp"
1968 amrnb_decoder_select="lsp"
1969 amrwb_decoder_select="lsp"
1970 amv_decoder_select="sp5x_decoder"
1971 ape_decoder_select="bswapdsp"
1972 asv1_decoder_select="blockdsp bswapdsp idctdsp"
1973 asv1_encoder_select="bswapdsp fdctdsp pixblockdsp"
1974 asv2_decoder_select="blockdsp bswapdsp idctdsp"
1975 asv2_encoder_select="bswapdsp fdctdsp pixblockdsp"
1976 atrac1_decoder_select="mdct sinewin"
1977 atrac3_decoder_select="mdct"
1978 atrac3p_decoder_select="mdct sinewin"
1979 bink_decoder_select="blockdsp hpeldsp"
1980 binkaudio_dct_decoder_select="mdct rdft dct sinewin wma_freqs"
1981 binkaudio_rdft_decoder_select="mdct rdft sinewin wma_freqs"
1982 cavs_decoder_select="blockdsp golomb h264chroma idctdsp qpeldsp videodsp"
1983 cllc_decoder_select="bswapdsp"
1984 comfortnoise_encoder_select="lpc"
1985 cook_decoder_select="audiodsp mdct sinewin"
1986 cscd_decoder_select="lzo"
1987 cscd_decoder_suggest="zlib"
1988 dca_decoder_select="fmtconvert mdct"
1989 dds_decoder_select="texturedsp"
1990 dnxhd_decoder_select="blockdsp idctdsp"
1991 dnxhd_encoder_select="aandcttables blockdsp fdctdsp idctdsp mpegvideoenc pixblockdsp"
1992 dvvideo_decoder_select="dvprofile idctdsp"
1993 dvvideo_encoder_select="dvprofile fdctdsp me_cmp pixblockdsp"
1994 dxa_decoder_deps="zlib"
1995 dxv_decoder_select="lzf texturedsp"
1996 eac3_decoder_select="ac3_decoder"
1997 eac3_encoder_select="ac3_encoder"
1998 eamad_decoder_select="aandcttables blockdsp bswapdsp idctdsp mpegvideo"
1999 eatgq_decoder_select="aandcttables idctdsp"
2000 eatqi_decoder_select="aandcttables blockdsp bswapdsp idctdsp"
2001 exr_decoder_deps="zlib"
2002 ffv1_decoder_select="rangecoder"
2003 ffv1_encoder_select="rangecoder"
2004 ffvhuff_decoder_select="huffyuv_decoder"
2005 ffvhuff_encoder_select="huffyuv_encoder"
2006 fic_decoder_select="golomb"
2007 flac_decoder_select="flacdsp"
2008 flac_encoder_select="bswapdsp flacdsp lpc"
2009 flashsv_decoder_deps="zlib"
2010 flashsv_encoder_deps="zlib"
2011 flashsv2_decoder_deps="zlib"
2012 flv_decoder_select="h263_decoder"
2013 flv_encoder_select="h263_encoder"
2014 fourxm_decoder_select="blockdsp bswapdsp"
2015 fraps_decoder_select="bswapdsp huffman"
2016 g2m_decoder_deps="zlib"
2017 g2m_decoder_select="blockdsp idctdsp jpegtables"
2018 h261_decoder_select="mpeg_er mpegvideo"
2019 h261_encoder_select="aandcttables mpegvideoenc"
2020 h263_decoder_select="error_resilience h263_parser h263dsp mpeg_er mpegvideo qpeldsp"
2021 h263_encoder_select="aandcttables h263dsp mpegvideoenc"
2022 h263i_decoder_select="h263_decoder"
2023 h263p_encoder_select="h263_encoder"
2024 h264_decoder_select="cabac golomb h264chroma h264dsp h264parse h264pred h264qpel videodsp"
2025 h264_decoder_suggest="error_resilience"
2026 hap_decoder_select="snappy texturedsp"
2027 hap_encoder_deps="libsnappy"
2028 hap_encoder_select="texturedspenc"
2029 hevc_decoder_select="bswapdsp cabac hevc_ps videodsp"
2030 huffyuv_decoder_select="bswapdsp huffyuvdsp"
2031 huffyuv_encoder_select="bswapdsp huffman huffyuvencdsp"
2032 iac_decoder_select="imc_decoder"
2033 imc_decoder_select="bswapdsp fft mdct sinewin"
2034 indeo3_decoder_select="hpeldsp"
2035 indeo4_decoder_select="ividsp"
2036 indeo5_decoder_select="ividsp"
2037 interplay_video_decoder_select="hpeldsp"
2038 jpegls_decoder_select="mjpeg_decoder"
2039 jv_decoder_select="blockdsp"
2040 lagarith_decoder_select="huffyuvdsp"
2041 ljpeg_encoder_select="aandcttables idctdsp jpegtables"
2042 magicyuv_decoder_select="huffyuvdsp"
2043 mdec_decoder_select="blockdsp idctdsp mpegvideo"
2044 metasound_decoder_select="lsp mdct sinewin"
2045 mimic_decoder_select="blockdsp bswapdsp hpeldsp idctdsp"
2046 mjpeg_decoder_select="blockdsp hpeldsp idctdsp jpegtables"
2047 mjpeg_encoder_select="aandcttables jpegtables mpegvideoenc"
2048 mjpegb_decoder_select="mjpeg_decoder"
2049 mlp_decoder_select="mlp_parser"
2050 motionpixels_decoder_select="bswapdsp"
2051 mp1_decoder_select="mpegaudio"
2052 mp1float_decoder_select="mpegaudio"
2053 mp2_decoder_select="mpegaudio"
2054 mp2float_decoder_select="mpegaudio"
2055 mp3_decoder_select="mpegaudio"
2056 mp3adu_decoder_select="mpegaudio"
2057 mp3adufloat_decoder_select="mpegaudio"
2058 mp3float_decoder_select="mpegaudio"
2059 mp3on4_decoder_select="mpegaudio"
2060 mp3on4float_decoder_select="mpegaudio"
2061 mpc7_decoder_select="bswapdsp mpegaudiodsp"
2062 mpc8_decoder_select="mpegaudiodsp"
2063 mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h"
2064 mpeg_xvmc_decoder_select="mpeg2video_decoder"
2065 mpeg1video_decoder_select="error_resilience mpeg_er mpegvideo"
2066 mpeg1video_encoder_select="aandcttables mpegvideoenc"
2067 mpeg2video_decoder_select="error_resilience mpeg_er mpegvideo"
2068 mpeg2video_encoder_select="aandcttables mpegvideoenc"
2069 mpeg4_decoder_select="h263_decoder mpeg4video_parser"
2070 mpeg4_encoder_select="h263_encoder"
2071 msa1_decoder_select="mss34dsp"
2072 msmpeg4v1_decoder_select="h263_decoder"
2073 msmpeg4v2_decoder_select="h263_decoder"
2074 msmpeg4v2_encoder_select="h263_encoder"
2075 msmpeg4v3_decoder_select="h263_decoder"
2076 msmpeg4v3_encoder_select="h263_encoder"
2077 mss2_decoder_select="error_resilience mpeg_er mpegvideo qpeldsp vc1_decoder"
2078 mts2_decoder_select="mss34dsp"
2079 mxpeg_decoder_select="mjpeg_decoder"
2080 nellymoser_decoder_select="mdct sinewin"
2081 nellymoser_encoder_select="audio_frame_queue mdct sinewin"
2082 nuv_decoder_select="idctdsp lzo"
2083 on2avc_decoder_select="mdct"
2084 opus_decoder_deps="avresample"
2085 opus_decoder_select="imdct15"
2086 png_decoder_deps="zlib"
2087 png_encoder_deps="zlib"
2088 png_encoder_select="huffyuvencdsp"
2089 prores_decoder_select="idctdsp"
2090 prores_encoder_select="fdctdsp"
2091 qcelp_decoder_select="lsp"
2092 qdm2_decoder_select="mdct rdft mpegaudiodsp"
2093 ra_144_encoder_select="audio_frame_queue lpc"
2094 ralf_decoder_select="golomb"
2095 rscc_decoder_deps="zlib"
2096 rv10_decoder_select="error_resilience h263_decoder h263dsp mpeg_er"
2097 rv10_encoder_select="h263_encoder"
2098 rv20_decoder_select="error_resilience h263_decoder h263dsp mpeg_er"
2099 rv20_encoder_select="h263_encoder"
2100 rv30_decoder_select="error_resilience golomb h264chroma h264pred h264qpel mpeg_er mpegvideo rv34dsp videodsp"
2101 rv40_decoder_select="error_resilience golomb h264chroma h264pred h264qpel mpeg_er mpegvideo rv34dsp videodsp"
2102 screenpresso_decoder_deps="zlib"
2103 sipr_decoder_select="lsp"
2104 sp5x_decoder_select="mjpeg_decoder"
2105 svq1_decoder_select="hpeldsp"
2106 svq1_encoder_select="aandcttables hpeldsp me_cmp mpegvideoenc"
2107 svq3_decoder_select="golomb h264dsp h264parse h264pred hpeldsp tpeldsp videodsp"
2108 svq3_decoder_suggest="zlib"
2109 tak_decoder_select="audiodsp"
2110 tdsc_decoder_deps="zlib"
2111 tdsc_decoder_select="mjpeg_decoder"
2112 theora_decoder_select="vp3_decoder"
2113 thp_decoder_select="mjpeg_decoder"
2114 tiff_decoder_suggest="zlib"
2115 tiff_encoder_suggest="zlib"
2116 truehd_decoder_select="mlp_decoder"
2117 truemotion2_decoder_select="bswapdsp"
2118 truespeech_decoder_select="bswapdsp"
2119 tscc_decoder_deps="zlib"
2120 txd_decoder_select="texturedsp"
2121 twinvq_decoder_select="mdct lsp sinewin"
2122 utvideo_decoder_select="bswapdsp"
2123 utvideo_encoder_select="bswapdsp huffman huffyuvencdsp"
2124 vble_decoder_select="huffyuvdsp"
2125 vc1_decoder_select="blockdsp error_resilience h263_decoder h264qpel intrax8 mpeg_er mpegvideo vc1dsp"
2126 vc1image_decoder_select="vc1_decoder"
2127 vorbis_decoder_select="mdct"
2128 vorbis_encoder_select="mdct"
2129 vp3_decoder_select="hpeldsp vp3dsp videodsp"
2130 vp5_decoder_select="h264chroma hpeldsp videodsp vp3dsp vp56dsp"
2131 vp6_decoder_select="h264chroma hpeldsp huffman videodsp vp3dsp vp56dsp"
2132 vp6a_decoder_select="vp6_decoder"
2133 vp6f_decoder_select="vp6_decoder"
2134 vp7_decoder_select="h264pred videodsp vp8dsp"
2135 vp8_decoder_select="h264pred videodsp vp8dsp"
2136 vp9_decoder_select="videodsp vp9_superframe_split_bsf"
2137 webp_decoder_select="vp8_decoder"
2138 wmapro_decoder_select="mdct sinewin wma_freqs"
2139 wmav1_decoder_select="mdct sinewin wma_freqs"
2140 wmav1_encoder_select="mdct sinewin wma_freqs"
2141 wmav2_decoder_select="mdct sinewin wma_freqs"
2142 wmav2_encoder_select="mdct sinewin wma_freqs"
2143 wmavoice_decoder_select="lsp rdft dct mdct sinewin"
2144 wmv1_decoder_select="h263_decoder"
2145 wmv1_encoder_select="h263_encoder"
2146 wmv2_decoder_select="blockdsp error_resilience h263_decoder idctdsp intrax8 videodsp wmv2dsp"
2147 wmv2_encoder_select="h263_encoder wmv2dsp"
2148 wmv3_decoder_select="vc1_decoder"
2149 wmv3image_decoder_select="wmv3_decoder"
2150 zerocodec_decoder_deps="zlib"
2151 zlib_decoder_deps="zlib"
2152 zlib_encoder_deps="zlib"
2153 zmbv_decoder_deps="zlib"
2154 zmbv_encoder_deps="zlib"
2156 # hardware accelerators
2157 d3d11va_deps="d3d11_h dxva_h ID3D11VideoDecoder"
2158 dxva2_deps="dxva2api_h DXVA2_ConfigPictureDecode"
2159 dxva2_lib_deps="dxva2"
2160 vda_deps="VideoDecodeAcceleration_VDADecoder_h blocks_extension pthreads"
2161 vda_extralibs="-framework CoreFoundation -framework VideoDecodeAcceleration -framework QuartzCore"
2163 h263_vaapi_hwaccel_deps="vaapi"
2164 h263_vaapi_hwaccel_select="h263_decoder"
2165 h264_d3d11va_hwaccel_deps="d3d11va"
2166 h264_d3d11va_hwaccel_select="h264_decoder"
2167 h264_dxva2_hwaccel_deps="dxva2"
2168 h264_dxva2_hwaccel_select="h264_decoder"
2169 h264_mmal_hwaccel_deps="mmal"
2170 h264_qsv_hwaccel_deps="libmfx"
2171 h264_vaapi_hwaccel_deps="vaapi"
2172 h264_vaapi_hwaccel_select="h264_decoder"
2173 h264_vda_hwaccel_deps="vda"
2174 h264_vda_hwaccel_select="h264_decoder"
2175 h264_vda_old_hwaccel_deps="vda"
2176 h264_vda_old_hwaccel_select="h264_decoder"
2177 h264_vdpau_hwaccel_deps="vdpau"
2178 h264_vdpau_hwaccel_select="h264_decoder"
2179 hevc_d3d11va_hwaccel_deps="d3d11va DXVA_PicParams_HEVC"
2180 hevc_d3d11va_hwaccel_select="hevc_decoder"
2181 hevc_dxva2_hwaccel_deps="dxva2 DXVA_PicParams_HEVC"
2182 hevc_dxva2_hwaccel_select="hevc_decoder"
2183 hevc_qsv_hwaccel_deps="libmfx"
2184 hevc_vaapi_hwaccel_deps="vaapi VAPictureParameterBufferHEVC"
2185 hevc_vaapi_hwaccel_select="hevc_decoder"
2186 hevc_vdpau_hwaccel_deps="vdpau VdpPictureInfoHEVC"
2187 hevc_vdpau_hwaccel_select="hevc_decoder"
2188 mpeg1_vdpau_hwaccel_deps="vdpau"
2189 mpeg1_vdpau_hwaccel_select="mpeg1video_decoder"
2190 mpeg2_d3d11va_hwaccel_deps="d3d11va"
2191 mpeg2_d3d11va_hwaccel_select="mpeg2video_decoder"
2192 mpeg2_dxva2_hwaccel_deps="dxva2"
2193 mpeg2_dxva2_hwaccel_select="mpeg2video_decoder"
2194 mpeg2_mmal_hwaccel_deps="mmal"
2195 mpeg2_qsv_hwaccel_deps="libmfx"
2196 mpeg2_vaapi_hwaccel_deps="vaapi"
2197 mpeg2_vaapi_hwaccel_select="mpeg2video_decoder"
2198 mpeg2_vdpau_hwaccel_deps="vdpau"
2199 mpeg2_vdpau_hwaccel_select="mpeg2video_decoder"
2200 mpeg4_vaapi_hwaccel_deps="vaapi"
2201 mpeg4_vaapi_hwaccel_select="mpeg4_decoder"
2202 mpeg4_vdpau_hwaccel_deps="vdpau"
2203 mpeg4_vdpau_hwaccel_select="mpeg4_decoder"
2204 vc1_d3d11va_hwaccel_deps="d3d11va"
2205 vc1_d3d11va_hwaccel_select="vc1_decoder"
2206 vc1_dxva2_hwaccel_deps="dxva2"
2207 vc1_dxva2_hwaccel_select="vc1_decoder"
2208 vc1_mmal_hwaccel_deps="mmal"
2209 vc1_qsv_hwaccel_deps="libmfx"
2210 vc1_vaapi_hwaccel_deps="vaapi"
2211 vc1_vaapi_hwaccel_select="vc1_decoder"
2212 vc1_vdpau_hwaccel_deps="vdpau"
2213 vc1_vdpau_hwaccel_select="vc1_decoder"
2214 vp8_qsv_hwaccel_deps="libmfx"
2215 vp8_vaapi_hwaccel_deps="vaapi VAPictureParameterBufferVP8"
2216 vp8_vaapi_hwaccel_select="vp8_decoder"
2217 wmv3_d3d11va_hwaccel_select="vc1_d3d11va_hwaccel"
2218 wmv3_dxva2_hwaccel_select="vc1_dxva2_hwaccel"
2219 wmv3_vaapi_hwaccel_select="vc1_vaapi_hwaccel"
2220 wmv3_vdpau_hwaccel_select="vc1_vdpau_hwaccel"
2222 # hardware-accelerated codecs
2223 nvenc_deps_any="dlopen LoadLibrary"
2224 nvenc_extralibs='$ldl'
2225 omx_deps="dlopen pthreads"
2226 omx_extralibs='$ldl'
2227 omx_rpi_select="omx"
2230 vaapi_encode_deps="vaapi"
2232 hwupload_cuda_filter_deps="cuda"
2233 scale_npp_filter_deps="cuda libnpp"
2235 h264_mmal_decoder_deps="mmal"
2236 h264_nvenc_encoder_deps="nvenc"
2237 h264_omx_encoder_deps="omx"
2238 h264_qsv_decoder_deps="libmfx"
2239 h264_qsv_decoder_select="h264_mp4toannexb_bsf h264_parser qsvdec h264_qsv_hwaccel"
2240 h264_qsv_encoder_deps="libmfx"
2241 h264_qsv_encoder_select="qsvenc"
2242 h264_vaapi_encoder_deps="VAEncPictureParameterBufferH264"
2243 h264_vaapi_encoder_select="vaapi_encode golomb"
2244 hevc_nvenc_encoder_deps="nvenc"
2245 hevc_qsv_decoder_deps="libmfx"
2246 hevc_qsv_decoder_select="hevc_mp4toannexb_bsf hevc_parser hevc_qsv_hwaccel qsvdec"
2247 hevc_qsv_encoder_deps="libmfx"
2248 hevc_qsv_encoder_select="hevc_ps qsvenc"
2249 hevc_vaapi_encoder_deps="VAEncPictureParameterBufferHEVC"
2250 hevc_vaapi_encoder_select="vaapi_encode golomb"
2251 mjpeg_vaapi_encoder_deps="VAEncPictureParameterBufferJPEG"
2252 mjpeg_vaapi_encoder_select="vaapi_encode jpegtables"
2253 mpeg2_mmal_decoder_deps="mmal"
2254 mpeg2_qsv_decoder_deps="libmfx"
2255 mpeg2_qsv_decoder_select="qsvdec mpeg2_qsv_hwaccel mpegvideo_parser"
2256 mpeg2_qsv_encoder_deps="libmfx"
2257 mpeg2_qsv_encoder_select="qsvenc"
2258 mpeg2_vaapi_encoder_deps="VAEncPictureParameterBufferMPEG2"
2259 mpeg2_vaapi_encoder_select="vaapi_encode"
2260 mpeg4_omx_encoder_deps="omx"
2261 vc1_mmal_decoder_deps="mmal"
2262 vc1_qsv_decoder_deps="libmfx"
2263 vc1_qsv_decoder_select="qsvdec vc1_qsv_hwaccel vc1_parser"
2264 vp8_qsv_decoder_deps="libmfx"
2265 vp8_qsv_decoder_select="qsvdec vp8_qsv_hwaccel vp8_parser"
2266 vp8_vaapi_encoder_deps="VAEncPictureParameterBufferVP8"
2267 vp8_vaapi_encoder_select="vaapi_encode"
2269 nvenc_h264_encoder_select="h264_nvenc_encoder"
2270 nvenc_hevc_encoder_select="hevc_nvenc_encoder"
2273 h264_parser_select="golomb h264dsp h264parse"
2274 hevc_parser_select="hevc_ps"
2275 mpegaudio_parser_select="mpegaudioheader"
2276 mpegvideo_parser_select="mpegvideo"
2277 mpeg4video_parser_select="error_resilience h263dsp mpegvideo qpeldsp"
2278 vc1_parser_select="vc1dsp"
2281 mjpeg2jpeg_bsf_select="jpegtables"
2283 # external libraries
2284 avisynth_deps="LoadLibrary"
2285 avxsynth_deps="dlopen"
2286 avisynth_demuxer_deps_any="avisynth avxsynth"
2287 avisynth_demuxer_select="riffdec"
2288 libdcadec_decoder_deps="libdcadec"
2289 libfaac_encoder_deps="libfaac"
2290 libfaac_encoder_select="audio_frame_queue"
2291 libfdk_aac_decoder_deps="libfdk_aac"
2292 libfdk_aac_encoder_deps="libfdk_aac"
2293 libfdk_aac_encoder_select="audio_frame_queue"
2294 libgsm_decoder_deps="libgsm"
2295 libgsm_encoder_deps="libgsm"
2296 libgsm_ms_decoder_deps="libgsm"
2297 libgsm_ms_encoder_deps="libgsm"
2298 libilbc_decoder_deps="libilbc"
2299 libilbc_encoder_deps="libilbc"
2300 libkvazaar_encoder_deps="libkvazaar"
2301 libmp3lame_encoder_deps="libmp3lame"
2302 libmp3lame_encoder_select="audio_frame_queue mpegaudioheader"
2303 libopencore_amrnb_decoder_deps="libopencore_amrnb"
2304 libopencore_amrnb_encoder_deps="libopencore_amrnb"
2305 libopencore_amrnb_encoder_select="audio_frame_queue"
2306 libopencore_amrwb_decoder_deps="libopencore_amrwb"
2307 libopenh264_decoder_deps="libopenh264"
2308 libopenh264_decoder_select="h264_mp4toannexb_bsf"
2309 libopenh264_encoder_deps="libopenh264"
2310 libopenjpeg_decoder_deps="libopenjpeg"
2311 libopenjpeg_encoder_deps="libopenjpeg"
2312 libopus_decoder_deps="libopus"
2313 libopus_encoder_deps="libopus"
2314 libopus_encoder_select="audio_frame_queue"
2315 libschroedinger_decoder_deps="libschroedinger"
2316 libschroedinger_encoder_deps="libschroedinger"
2317 libspeex_decoder_deps="libspeex"
2318 libspeex_encoder_deps="libspeex"
2319 libspeex_encoder_select="audio_frame_queue"
2320 libtheora_encoder_deps="libtheora"
2321 libtwolame_encoder_deps="libtwolame"
2322 libvo_aacenc_encoder_deps="libvo_aacenc"
2323 libvo_aacenc_encoder_select="audio_frame_queue"
2324 libvo_amrwbenc_encoder_deps="libvo_amrwbenc"
2325 libvorbis_encoder_deps="libvorbis"
2326 libvorbis_encoder_select="audio_frame_queue"
2327 libvpx_vp8_decoder_deps="libvpx"
2328 libvpx_vp8_encoder_deps="libvpx"
2329 libvpx_vp9_decoder_deps="libvpx"
2330 libvpx_vp9_encoder_deps="libvpx"
2331 libwavpack_encoder_deps="libwavpack"
2332 libwavpack_encoder_select="audio_frame_queue"
2333 libwebp_encoder_deps="libwebp"
2334 libx262_encoder_deps="libx262"
2335 libx264_encoder_deps="libx264"
2336 libx265_encoder_deps="libx265"
2337 libxavs_encoder_deps="libxavs"
2338 libxvid_encoder_deps="libxvid mkstemp"
2341 ac3_demuxer_select="ac3_parser"
2342 asf_demuxer_select="riffdec"
2343 asf_muxer_select="riffenc"
2344 asf_stream_muxer_select="asf_muxer"
2345 avi_demuxer_select="iso_media riffdec"
2346 avi_muxer_select="riffenc"
2347 caf_demuxer_select="iso_media riffdec"
2348 dash_muxer_select="mp4_muxer"
2349 dirac_demuxer_select="dirac_parser"
2350 dv_demuxer_select="dvprofile"
2351 dv_muxer_select="dvprofile"
2352 dxa_demuxer_select="riffdec"
2353 eac3_demuxer_select="ac3_parser"
2354 f4v_muxer_select="mov_muxer"
2355 flac_demuxer_select="flac_parser"
2356 hds_muxer_select="flv_muxer"
2357 hls_muxer_select="mpegts_muxer"
2358 ipod_muxer_select="mov_muxer"
2359 ismv_muxer_select="mov_muxer"
2360 matroska_audio_muxer_select="matroska_muxer"
2361 matroska_demuxer_select="iso_media riffdec"
2362 matroska_demuxer_suggest="bzlib lzo zlib"
2363 matroska_muxer_select="iso_media riffenc"
2364 mmf_muxer_select="riffenc"
2365 mov_demuxer_select="iso_media riffdec"
2366 mov_demuxer_suggest="zlib"
2367 mov_muxer_select="iso_media riffenc rtpenc_chain"
2368 mp3_demuxer_select="mpegaudio_parser"
2369 mp3_muxer_select="mpegaudioheader"
2370 mp4_muxer_select="mov_muxer"
2371 mpegts_demuxer_select="iso_media"
2372 mpegts_muxer_select="adts_muxer latm_muxer"
2373 mpegtsraw_demuxer_select="mpegts_demuxer"
2374 mxf_d10_muxer_select="mxf_muxer"
2375 nut_muxer_select="riffenc"
2376 nuv_demuxer_select="riffdec"
2377 oga_muxer_select="ogg_muxer"
2378 ogg_demuxer_select="dirac_parse"
2379 opus_muxer_select="ogg_muxer"
2380 psp_muxer_select="mov_muxer"
2381 rtp_demuxer_select="sdp_demuxer"
2382 rtpdec_select="asf_demuxer jpegtables mov_demuxer mpegts_demuxer rm_demuxer rtp_protocol srtp"
2383 rtsp_demuxer_select="http_protocol rtpdec"
2384 rtsp_muxer_select="rtp_muxer http_protocol rtp_protocol rtpenc_chain"
2385 sap_demuxer_select="sdp_demuxer"
2386 sap_muxer_select="rtp_muxer rtp_protocol rtpenc_chain"
2387 sdp_demuxer_select="rtpdec"
2388 smoothstreaming_muxer_select="ismv_muxer"
2389 spdif_muxer_select="aac_parser"
2390 spx_muxer_select="ogg_muxer"
2391 swf_demuxer_suggest="zlib"
2392 tak_demuxer_select="tak_parser"
2393 tg2_muxer_select="mov_muxer"
2394 tgp_muxer_select="mov_muxer"
2395 w64_demuxer_select="wav_demuxer"
2396 wav_demuxer_select="riffdec"
2397 wav_muxer_select="riffenc"
2398 webm_muxer_select="iso_media riffenc"
2399 wtv_demuxer_select="mpegts_demuxer riffdec"
2400 xmv_demuxer_select="riffdec"
2401 xwma_demuxer_select="riffdec"
2404 alsa_indev_deps="alsa"
2405 alsa_outdev_deps="alsa"
2406 avfoundation_indev_deps="AVFoundation_AVFoundation_h objc_arc pthreads"
2407 avfoundation_indev_extralibs="-framework Foundation -framework AVFoundation -framework CoreVideo -framework CoreMedia"
2408 bktr_indev_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
2409 dv1394_indev_deps="dv1394"
2410 dv1394_indev_select="dv_demuxer"
2411 fbdev_indev_deps="linux_fb_h"
2412 jack_indev_deps="jack"
2413 jack_indev_deps_any="sem_timedwait dispatch_dispatch_h"
2414 libcdio_indev_deps="libcdio"
2415 libdc1394_indev_deps="libdc1394"
2416 oss_indev_deps_any="soundcard_h sys_soundcard_h"
2417 oss_outdev_deps_any="soundcard_h sys_soundcard_h"
2418 pulse_indev_deps="libpulse"
2419 sndio_indev_deps="sndio"
2420 sndio_outdev_deps="sndio"
2421 v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h"
2422 vfwcap_indev_deps="vfw32 vfwcap_defines"
2423 xcbgrab_indev_deps="libxcb"
2424 xcbgrab_indev_suggest="libxcb_shm libxcb_xfixes"
2427 ffrtmpcrypt_protocol_conflict="librtmp_protocol"
2428 ffrtmpcrypt_protocol_deps_any="gmp openssl"
2429 ffrtmpcrypt_protocol_select="tcp_protocol"
2430 ffrtmphttp_protocol_conflict="librtmp_protocol"
2431 ffrtmphttp_protocol_select="http_protocol"
2432 gopher_protocol_select="network"
2433 http_protocol_select="tcp_protocol"
2434 httpproxy_protocol_select="tcp_protocol"
2435 https_protocol_select="tls_protocol"
2436 icecast_protocol_select="http_protocol"
2437 librtmp_protocol_deps="librtmp"
2438 librtmpe_protocol_deps="librtmp"
2439 librtmps_protocol_deps="librtmp"
2440 librtmpt_protocol_deps="librtmp"
2441 librtmpte_protocol_deps="librtmp"
2442 mmsh_protocol_select="http_protocol"
2443 mmst_protocol_select="network"
2444 rtmp_protocol_conflict="librtmp_protocol"
2445 rtmp_protocol_select="tcp_protocol"
2446 rtmpe_protocol_select="ffrtmpcrypt_protocol"
2447 rtmps_protocol_conflict="librtmp_protocol"
2448 rtmps_protocol_select="tls_protocol"
2449 rtmpt_protocol_select="ffrtmphttp_protocol"
2450 rtmpte_protocol_select="ffrtmpcrypt_protocol ffrtmphttp_protocol"
2451 rtmpts_protocol_select="ffrtmphttp_protocol https_protocol"
2452 rtp_protocol_select="udp_protocol"
2453 sctp_protocol_deps="struct_sctp_event_subscribe"
2454 sctp_protocol_select="network"
2455 srtp_protocol_select="rtp_protocol srtp"
2456 tcp_protocol_select="network"
2457 tls_gnutls_protocol_deps="gnutls"
2458 tls_gnutls_protocol_select="tcp_protocol"
2459 tls_openssl_protocol_conflict="tls_gnutls_protocol"
2460 tls_openssl_protocol_deps="openssl"
2461 tls_openssl_protocol_select="tcp_protocol"
2462 tls_protocol_deps_any="tls_gnutls_protocol tls_openssl_protocol"
2463 udp_protocol_select="network"
2464 unix_protocol_deps="sys_un_h"
2465 unix_protocol_select="network"
2468 asyncts_filter_deps="avresample"
2469 blackframe_filter_deps="gpl"
2470 boxblur_filter_deps="gpl"
2471 bs2b_filter_deps="libbs2b"
2472 cropdetect_filter_deps="gpl"
2473 deinterlace_qsv_filter_deps="libmfx"
2474 deinterlace_vaapi_filter_deps="vaapi"
2475 delogo_filter_deps="gpl"
2476 drawtext_filter_deps="libfreetype"
2477 drawtext_filter_suggest="libfontconfig"
2478 frei0r_filter_deps="frei0r dlopen"
2479 frei0r_filter_extralibs='$ldl'
2480 frei0r_src_filter_deps="frei0r dlopen"
2481 frei0r_src_filter_extralibs='$ldl'
2482 hdcd_filter_deps="libhdcd"
2483 hqdn3d_filter_deps="gpl"
2484 interlace_filter_deps="gpl"
2485 movie_filter_deps="avcodec avformat"
2486 ocv_filter_deps="libopencv"
2487 resample_filter_deps="avresample"
2488 scale_filter_deps="swscale"
2489 scale_qsv_filter_deps="libmfx"
2490 scale_vaapi_filter_deps="vaapi VAProcPipelineParameterBuffer"
2493 decode_audio_example_deps="avcodec avutil"
2494 decode_video_example_deps="avcodec avutil"
2495 encode_audio_example_deps="avcodec avutil"
2496 encode_video_example_deps="avcodec avutil"
2497 filter_audio_example_deps="avfilter avutil"
2498 metadata_example_deps="avformat avutil"
2499 output_example_deps="avcodec avformat avresample avutil swscale"
2500 qsvdec_example_deps="avcodec avutil libmfx h264_qsv_decoder"
2501 transcode_aac_example_deps="avcodec avformat avresample"
2503 # libraries, in linking order
2504 avcodec_deps="avutil"
2505 avcodec_select="null_bsf"
2506 avdevice_deps="avformat avcodec avutil"
2507 avfilter_deps="avutil"
2508 avformat_deps="avcodec avutil"
2509 avformat_suggest="network"
2510 avresample_deps="avutil"
2511 swscale_deps="avutil"
2514 avconv_deps="avcodec avfilter avformat avresample swscale"
2515 avconv_select="aformat_filter anull_filter asyncts_filter atrim_filter format_filter
2516 fps_filter null_filter resample_filter scale_filter
2518 avplay_deps="avcodec avfilter avformat avresample sdl"
2519 avplay_extralibs='$sdl_extralibs'
2520 avplay_select="rdft format_filter transpose_filter hflip_filter vflip_filter"
2521 avprobe_deps="avcodec avformat"
2525 texi2html_deps="doc"
2527 # default parameters
2529 logfile="avbuild/config.log"
2531 # installation paths
2532 prefix_default="/usr/local"
2533 bindir_default='${prefix}/bin'
2534 datadir_default='${prefix}/share/avconv'
2535 docdir_default='${prefix}/share/doc/libav'
2536 incdir_default='${prefix}/include'
2537 libdir_default='${prefix}/lib'
2538 mandir_default='${prefix}/share/man'
2539 shlibdir_default="$libdir_default"
2544 host_cc_default="gcc"
2548 pkg_config_default=pkg-config
2551 version_script='--version-script'
2555 arch_default=$(uname -m)
2560 target_os_default=$(tolower $(uname -s))
2561 host_os=$target_os_default
2563 # configurable options
2564 enable $EXAMPLE_LIST $LIBRARY_LIST $PROGRAM_LIST
2569 enable faan faandct faanidct
2570 enable optimizations
2571 enable safe_bitstream_reader
2573 enable swscale_alpha
2574 enable valgrind_backtrace
2576 # By default, enable only those hwaccels that have no external dependencies.
2577 enable d3d11va dxva2 vda vdpau
2580 SHFLAGS='-shared -Wl,-soname,$$(@F)'
2583 LIBNAME='$(LIBPREF)$(NAME)$(LIBSUF)'
2586 SLIBNAME='$(SLIBPREF)$(NAME)$(SLIBSUF)'
2587 SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
2588 SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
2589 LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
2590 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'
2591 SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR) $(SLIBNAME)'
2592 VERSION_SCRIPT_POSTPROCESS_CMD="cat"
2614 host_extralibs='-lm'
2615 host_cflags_filter=echo
2616 host_ldflags_filter=echo
2618 target_path='$(CURDIR)'
2620 # since the object filename is not given with the -MM flag, the compiler
2621 # is only able to print the basename, and we must add the path ourselves
2622 DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o," > $(@:.o=.d)'
2628 if test -f configure; then
2631 source_path=$(cd $(dirname "$0"); pwd)
2632 echo "$source_path" | grep -q '[[:blank:]]' &&
2633 die "Out of tree builds are impossible with whitespace in source path."
2634 test -e "$source_path/config.h" &&
2635 die "Out of tree builds are impossible with config.h in source dir."
2642 LIBAV_CONFIGURATION="${LIBAV_CONFIGURATION# } ${l}${r}"
2648 file=$source_path/$3
2649 sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
2652 ENCODER_LIST=$(find_things encoder ENC libavcodec/allcodecs.c)
2653 DECODER_LIST=$(find_things decoder DEC libavcodec/allcodecs.c)
2654 HWACCEL_LIST=$(find_things hwaccel HWACCEL libavcodec/allcodecs.c)
2655 PARSER_LIST=$(find_things parser PARSER libavcodec/allcodecs.c)
2656 MUXER_LIST=$(find_things muxer _MUX libavformat/allformats.c)
2657 DEMUXER_LIST=$(find_things demuxer DEMUX libavformat/allformats.c)
2658 OUTDEV_LIST=$(find_things outdev OUTDEV libavdevice/alldevices.c)
2659 INDEV_LIST=$(find_things indev _IN libavdevice/alldevices.c)
2660 FILTER_LIST=$(find_things filter FILTER libavfilter/allfilters.c)
2662 find_things_extern(){
2665 file=$source_path/$3
2666 sed -n "s/^[^#]*extern.*$pattern *ff_\([^ ]*\)_$thing;/\1_$thing/p" "$file"
2669 BSF_LIST=$(find_things_extern bsf AVBitStreamFilter libavcodec/bitstream_filters.c)
2670 PROTOCOL_LIST=$(find_things_extern protocol URLProtocol libavformat/protocols.c)
2686 for n in $COMPONENT_LIST; do
2687 v=$(toupper ${n%s})_LIST
2689 eval ${n}_if_any="\$$v"
2692 enable $ARCH_EXT_LIST
2695 echo "Unknown option \"$1\"."
2696 echo "See $0 --help for available options."
2701 printf "%-25s %-25s %-25s\n" $(cat | tr ' ' '\n' | sort)
2707 echo $* | sed s/$suffix//g | print_3_columns
2719 is_in ${comp} $COMPONENT_LIST && eval comp=\$$(toupper ${comp%s})_LIST
2720 echo "prob ${prob:-0.5}"
2728 random_seed=$(awk "BEGIN { srand($random_seed); print srand() }")
2729 $action $(rand_list "$@" | awk "BEGIN { srand($random_seed) } \$1 == \"prob\" { prob = \$2; next } rand() < prob { print }")
2738 --extra-ldexeflags=*)
2739 add_ldexeflags $optval
2742 add_extralibs $optval
2745 disable $INDEV_LIST $OUTDEV_LIST
2748 debuglevel="$optval"
2751 disable $PROGRAM_LIST
2753 --disable-everything)
2754 map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
2757 map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
2758 disable $LIBRARY_LIST $PROGRAM_LIST doc
2760 --enable-random|--disable-random)
2761 action=${opt%%-random}
2762 do_random ${action#--} $COMPONENT_LIST
2764 --enable-random=*|--disable-random=*)
2765 action=${opt%%-random=*}
2766 do_random ${action#--} $optval
2768 --enable-*=*|--disable-*=*)
2769 eval $(echo "${opt%%=*}" | sed 's/--/action=/;s/-/ thing=/')
2770 is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt"
2771 eval list=\$$(toupper $thing)_LIST
2772 name=$(echo "${optval}" | sed "s/,/_${thing}|/g")_${thing}
2773 $action $(filter "$name" $list)
2775 --enable-avserver|--disable-avserver*)
2776 warn "avserver has been removed, the ${opt} option is only"\
2777 "provided for compatibility and will be removed in the future"
2779 --enable-?*|--disable-?*)
2780 eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
2781 if is_in $option $COMPONENT_LIST; then
2782 test $action = disable && action=unset
2783 eval $action \$$(toupper ${option%s})_LIST
2784 elif is_in $option $CMDLINE_SELECT; then
2791 NAME="${opt#--list-}"
2792 is_in $NAME $COMPONENT_LIST || die_unknown $opt
2794 eval show_list $NAME \$$(toupper $NAME)_LIST
2796 --help|-h) show_help
2798 --quiet|-q) quiet=yes
2801 optname="${opt%%=*}"
2802 optname="${optname#--}"
2803 optname=$(echo "$optname" | sed 's/-/_/g')
2804 if is_in $optname $CMDLINE_SET; then
2805 eval $optname='$optval'
2806 elif is_in $optname $CMDLINE_APPEND; then
2807 append $optname "$optval"
2819 disabled logging && logfile=/dev/null
2821 # Die early if licensing-related configure options are incompatible.
2822 die_license_disabled() {
2823 enabled $1 || { enabled $v && die "$v is $1 and --enable-$1 is not specified."; }
2826 map "die_license_disabled gpl" $EXTERNAL_LIBRARY_GPL_LIST
2827 map "die_license_disabled nonfree" $EXTERNAL_LIBRARY_NONFREE_LIST $HWACCEL_LIBRARY_NONFREE_LIST
2828 map "die_license_disabled version3" $EXTERNAL_LIBRARY_VERSION3_LIST
2830 enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
2832 # Disable all the library-specific components if the library itself
2833 # is disabled, see AVCODEC_LIST and following _LIST variables.
2835 disable_components(){
2836 disabled ${1} && disable $(
2837 eval components="\$$(toupper ${1})_COMPONENTS"
2838 map 'eval echo \${$(toupper ${v%s})_LIST}' $components
2842 map 'disable_components $v' $LIBRARY_LIST
2844 echo "# $0 $LIBAV_CONFIGURATION" > $logfile
2847 case "$toolchain" in
2849 cc_default="${toolchain%-asan}"
2850 add_cflags -fsanitize=address
2851 add_ldflags -fsanitize=address
2854 cc_default="${toolchain%-msan}"
2855 add_cflags -fsanitize=memory -fsanitize-memory-track-origins
2856 add_ldflags -fsanitize=memory
2859 cc_default="${toolchain%-tsan}"
2860 add_cflags -fsanitize=thread -fPIE
2861 add_ldflags -fsanitize=thread -pie
2862 case "$toolchain" in
2870 cc_default="${toolchain%-usan}"
2871 add_cflags -fsanitize=undefined
2872 add_ldflags -fsanitize=undefined
2873 case "$toolchain" in
2880 target_exec_default="valgrind"
2881 case "$toolchain" in
2883 target_exec_args="--alloc-fn=av_malloc --alloc-fn=av_mallocz"
2886 target_exec_args="--track-origins=yes --leak-check=full"
2891 # Check whether the current MSVC version needs the C99 converter.
2892 # From MSVC 2013 (compiler major version 18) onwards, it does actually
2893 # support enough of C99 to build libav. Default to the new
2894 # behaviour if the regexp was unable to match anything, since this
2895 # successfully parses the version number of existing supported
2896 # versions that require the converter (MSVC 2010 and 2012).
2897 cl_major_ver=$(cl 2>&1 | sed -n 's/.*Version \([[:digit:]]\{1,\}\)\..*/\1/p')
2898 if [ -z "$cl_major_ver" ] || [ $cl_major_ver -ge 18 ]; then
2901 cc_default="c99wrap cl"
2903 ld_default="$source_path/compat/windows/mslink"
2904 nm_default="dumpbin -symbols"
2911 target_os_default="win32"
2912 # Use a relative path for TMPDIR. This makes sure all the
2913 # ffconf temp files are written with a relative path, avoiding
2914 # issues with msys/win32 path conversion for MSVC parameters
2915 # such as -Fo<file> or -out:<file>.
2921 nm_default="dumpbin -symbols"
2923 target_os_default="win32"
2927 add_cflags -fprofile-arcs -ftest-coverage
2928 add_ldflags -fprofile-arcs -ftest-coverage
2931 add_cflags -fprofile-arcs -ftest-coverage
2932 add_ldflags --coverage
2935 add_cppflags -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2
2936 add_cflags -fno-strict-overflow -fstack-protector-all
2937 add_ldflags -Wl,-z,relro -Wl,-z,now
2940 die "Unknown toolchain $toolchain"
2944 test -n "$cross_prefix" && enable cross_compile
2946 if enabled cross_compile; then
2947 test -n "$arch" && test -n "$target_os" ||
2948 die "Must specify target arch (--arch) and OS (--target-os) when cross-compiling"
2951 ar_default="${cross_prefix}${ar_default}"
2952 cc_default="${cross_prefix}${cc_default}"
2953 occ_default="${cross_prefix}${occ_default}"
2954 nm_default="${cross_prefix}${nm_default}"
2955 pkg_config_default="${cross_prefix}${pkg_config_default}"
2956 ranlib="${cross_prefix}${ranlib}"
2957 strip="${cross_prefix}${strip}"
2959 sysinclude_default="${sysroot}/usr/include"
2961 set_default arch cc pkg_config sysinclude target_exec target_os
2962 enabled cross_compile || host_cc_default=$cc
2965 if ! $pkg_config --version >/dev/null 2>&1; then
2966 warn "$pkg_config not found, library detection may fail."
2972 mingw32*|mingw64*|win32|win64|cygwin*|*-dos|freedos|opendos|os/2*|symbian) echo .exe ;;
2976 EXESUF=$(exesuf $target_os)
2977 HOSTEXESUF=$(exesuf $host_os)
2979 # set temporary file name
2980 : ${TMPDIR:=$TEMPDIR}
2984 if ! check_cmd mktemp -u XXXXXX; then
2985 # simple replacement for missing mktemp
2986 # NOT SAFE FOR GENERAL USE
2988 tmpname="${2%%XXX*}.${HOSTNAME}.${UID}.$$"
2994 AVTMPDIR=$(mktemp -d "${TMPDIR}/avconf.XXXXXXXX" 2> /dev/null) ||
2995 die "Unable to create temporary directory in $TMPDIR."
2998 tmp="${AVTMPDIR}/test"$2
2999 (set -C; exec > $tmp) 2> /dev/null ||
3000 die "Unable to create temporary file in $AVTMPDIR."
3004 trap 'rm -rf -- "$AVTMPDIR"' EXIT
3009 tmpfile TMPE $EXESUF
3020 # make sure we can execute files in $TMPDIR
3021 cat > $TMPSH 2>> $logfile <<EOF
3024 chmod +x $TMPSH >> $logfile 2>&1
3025 if ! $TMPSH >> $logfile 2>&1; then
3027 Unable to create and execute files in $TMPDIR. Set the TMPDIR environment
3028 variable to another directory and make sure that it is not mounted noexec.
3030 die "Sanity test failed."
3036 # Filter out MSVC cl.exe options from cflags that shouldn't
3037 # be passed to gas-preprocessor
3047 -std=c99) echo -c99 ;;
3048 -mcpu=*) echo -arch ${flag#*=} ;;
3049 -mieee) echo -ieee ;;
3050 -O*|-fast) echo $flag ;;
3051 -fno-math-errno) echo -assume nomath_errno ;;
3053 -Wall) echo -msg_enable level2 ;;
3054 -Wno-pointer-sign) echo -msg_disable ptrmismatch1 ;;
3055 -Wl,*) echo $flag ;;
3065 -Wno-switch) echo -Wno-switch-enum ;;
3066 -Wno-format-zero-length) ;;
3067 -Wdisabled-optimization) ;;
3068 -Wno-pointer-sign) echo -Wno-other ;;
3074 msvc_common_flags(){
3077 # In addition to specifying certain flags under the compiler
3078 # specific filters, they must be specified here as well or else the
3079 # generic catch all at the bottom will print the original flag.
3084 -fomit-frame-pointer) ;;
3088 -fno-signed-zeros) ;;
3092 -lz) echo zlib.lib ;;
3093 -lx264) echo libx264.lib ;;
3094 -l*) echo ${flag#-l}.lib ;;
3095 -L*) echo -libpath:${flag#-L} ;;
3102 msvc_common_flags "$@"
3105 -Wall) echo -W3 -wd4018 -wd4146 -wd4244 -wd4305 \
3107 -Wextra) echo -W4 -wd4244 -wd4127 -wd4018 -wd4389 \
3108 -wd4146 -wd4057 -wd4204 -wd4706 -wd4305 \
3109 -wd4152 -wd4324 -we4013 -wd4100 -wd4214 \
3110 -wd4273 -wd4554 -wd4701 -wd4703 ;;
3116 msvc_common_flags "$@"
3119 # Despite what Intel's documentation says -Wall, which is supported
3120 # on Windows, does enable remarks so disable them here.
3121 -Wall) echo $flag -Qdiag-disable:remark ;;
3122 -std=c99) echo -Qstd=c99 ;;
3130 -flto) echo -Mipa=fast,libopt,libinline,vestigial ;;
3131 -fomit-frame-pointer) echo -Mnoframe ;;
3142 case "${flag#*=}" in
3143 native) echo -xtarget=native ;;
3144 v9|niagara) echo -xarch=sparc ;;
3145 ultrasparc) echo -xarch=sparcvis ;;
3146 ultrasparc3|niagara2) echo -xarch=sparcvis2 ;;
3147 i586|pentium) echo -xchip=pentium ;;
3148 i686|pentiumpro|pentium2) echo -xtarget=pentium_pro ;;
3149 pentium3*|c3-2) echo -xtarget=pentium3 ;;
3150 pentium-m) echo -xarch=sse2 -xchip=pentium3 ;;
3151 pentium4*) echo -xtarget=pentium4 ;;
3152 prescott|nocona) echo -xarch=sse3 -xchip=pentium4 ;;
3153 *-sse3) echo -xarch=sse3 ;;
3154 core2) echo -xarch=ssse3 -xchip=core2 ;;
3155 corei7) echo -xarch=sse4_2 -xchip=nehalem ;;
3156 corei7-avx) echo -xarch=avx -xchip=sandybridge ;;
3157 amdfam10|barcelona|bdver*) echo -xarch=sse4_1 ;;
3158 athlon-4|athlon-[mx]p) echo -xarch=ssea ;;
3159 k8|opteron|athlon64|athlon-fx)
3160 echo -xarch=sse2a ;;
3161 athlon*) echo -xarch=pentium_proa ;;
3164 -std=c99) echo -xc99 ;;
3165 -fomit-frame-pointer) echo -xregs=frameptr ;;
3166 -fPIC) echo -KPIC -xcode=pic32 ;;
3167 -W*,*) echo $flag ;;
3168 -f*-*|-W*|-mimpure-text) ;;
3179 case "${flag#*=}" in
3180 armv7-a|cortex-a*) echo -mv=7a8 ;;
3181 armv7-r|cortex-r*) echo -mv=7r4 ;;
3182 armv7-m|cortex-m*) echo -mv=7m3 ;;
3183 armv6*|arm11*) echo -mv=6 ;;
3184 armv5*e|arm[79]*e*|arm9[24]6*|arm96*|arm102[26])
3186 armv4*|arm7*|arm9[24]*) echo -mv=4 ;;
3189 -mfpu=neon) echo --float_support=vfpv3 --neon ;;
3190 -mfpu=vfp) echo --float_support=vfpv2 ;;
3191 -mfpu=vfpv3) echo --float_support=vfpv3 ;;
3192 -mfpu=vfpv3-d16) echo --float_support=vfpv3d16 ;;
3193 -msoft-float) echo --float_support=vfplib ;;
3194 -O[0-3]|-mf=*) echo $flag ;;
3196 -pds=*) echo $flag ;;
3197 -D*|-I*) echo $flag ;;
3198 --gcc|--abi=*) echo $flag ;;
3208 unset _type _ident _cc_c _cc_e _cc_o _flags _cflags
3209 unset _ld_o _ldflags _ld_lib _ld_path
3210 unset _depflags _DEPCMD _DEPFLAGS
3213 if $_cc -v 2>&1 | grep -q '^gcc.*LLVM'; then
3215 gcc_extra_ver=$(expr "$($_cc --version 2>/dev/null | head -n1)" : '.*\((.*)\)')
3216 _ident="llvm-gcc $($_cc -dumpversion 2>/dev/null) $gcc_extra_ver"
3217 _depflags='-MMD -MF $(@:.o=.d) -MT $@'
3220 elif $_cc -v 2>&1 | grep -qi ^gcc; then
3222 gcc_version=$($_cc --version | head -n1)
3223 gcc_basever=$($_cc -dumpversion)
3224 gcc_pkg_ver=$(expr "$gcc_version" : '[^ ]* \(([^)]*)\)')
3225 gcc_ext_ver=$(expr "$gcc_version" : ".*$gcc_pkg_ver $gcc_basever \\(.*\\)")
3226 _ident=$(cleanws "gcc $gcc_basever $gcc_pkg_ver $gcc_ext_ver")
3227 if ! $_cc -dumpversion | grep -q '^2\.'; then
3228 _depflags='-MMD -MF $(@:.o=.d) -MT $@'
3232 elif $_cc --version 2>/dev/null | grep -q ^icc; then
3234 _ident=$($_cc --version | head -n1)
3239 elif $_cc -v 2>&1 | grep -q xlc; then
3241 _ident=$($_cc -qversion 2>/dev/null | head -n1)
3243 _cflags_size='-O5 -qcompact'
3244 elif $_cc -V 2>/dev/null | grep -q Compaq; then
3246 _ident=$($_cc -V | head -n1 | cut -d' ' -f1-3)
3248 _cflags_speed='-fast'
3250 _flags_filter=ccc_flags
3251 elif $_cc --vsn 2>/dev/null | grep -Eq "ARM (C/C\+\+ )?Compiler"; then
3252 test -d "$sysroot" || die "No valid sysroot specified."
3254 _ident=$($_cc --vsn | grep -i build | head -n1 | sed 's/.*: //')
3255 armcc_conf="$PWD/armcc.conf"
3256 $_cc --arm_linux_configure \
3257 --arm_linux_config_file="$armcc_conf" \
3258 --configure_sysroot="$sysroot" \
3259 --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
3260 die "Error creating armcc configuration file."
3261 $_cc --vsn | grep -q RVCT && armcc_opt=rvct || armcc_opt=armcc
3262 _flags="--arm_linux_config_file=$armcc_conf --translate_gcc"
3263 as_default="${cross_prefix}gcc"
3267 elif $_cc -version 2>/dev/null | grep -Eq 'TMS470|TI ARM'; then
3269 _ident=$($_cc -version | head -n1 | tr -s ' ')
3270 _flags='--gcc --abi=eabi -me'
3273 _depflags='-ppa -ppd=$(@:.o=.d)'
3274 _cflags_speed='-O3 -mf=5'
3275 _cflags_size='-O3 -mf=2'
3276 _flags_filter=tms470_flags
3277 elif $_cc -v 2>&1 | grep -q clang; then
3279 _ident=$($_cc --version 2>/dev/null | head -n1)
3280 _depflags='-MMD -MF $(@:.o=.d) -MT $@'
3283 elif $_cc -V 2>&1 | grep -q Sun; then
3285 _ident=$($_cc -V 2>&1 | head -n1 | cut -d' ' -f 2-)
3286 _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "1s,^.*: ,$@: ," -e "\$$!s,\$$, \\\," -e "1!s,^.*: , ," > $(@:.o=.d)'
3287 _DEPFLAGS='-xM1 -xc99'
3290 _cflags_size='-O5 -xspace'
3291 _flags_filter=suncc_flags
3292 elif $_cc -v 2>&1 | grep -q 'PathScale\|Path64'; then
3294 _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
3295 _depflags='-MMD -MF $(@:.o=.d) -MT $@'
3298 _flags_filter='filter_out -Wdisabled-optimization'
3299 elif $_cc -v 2>&1 | grep -q Open64; then
3301 _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
3302 _depflags='-MMD -MF $(@:.o=.d) -MT $@'
3305 _flags_filter='filter_out -Wdisabled-optimization|-Wtype-limits|-fno-signed-zeros'
3306 elif $_cc -V 2>&1 | grep -q Portland; then
3308 _ident="PGI $($_cc -V 2>&1 | awk '/^pgcc/ { print $2; exit }')"
3309 opt_common='-alias=ansi -Mdse -Mlre -Mpre'
3310 _cflags_speed="-O3 -Mautoinline -Munroll=c:4 $opt_common"
3311 _cflags_size="-O2 -Munroll=c:1 $opt_common"
3313 _flags_filter=pgi_flags
3314 elif $_cc 2>&1 | grep -q 'Microsoft.*ARM.*Assembler'; then
3316 _ident=$($_cc | head -n1)
3317 # 4509: "This form of conditional instruction is deprecated"
3318 _flags="-nologo -ignore 4509"
3319 _flags_filter=armasm_flags
3320 elif $_cc -nologo- 2>&1 | grep -q Microsoft; then
3322 _ident=$($_cc 2>&1 | head -n1)
3323 _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< 2>&1 | awk '\''/including/ { sub(/^.*file: */, ""); gsub(/\\/, "/"); if (!match($$0, / /)) print "$@:", $$0 }'\'' > $(@:.o=.d)'
3324 _DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -showIncludes -Zs'
3328 if $_cc -nologo- 2>&1 | grep -q Linker; then
3335 _flags_filter=msvc_flags
3337 _ld_path='-libpath:'
3339 elif $_cc 2>&1 | grep -q Intel; then
3341 _ident=$($_cc 2>&1 | head -n1)
3342 _depflags='-QMMD -QMF$(@:.o=.d) -QMT$@'
3343 # Not only is O3 broken on 13.x+ but it is slower on all previous
3344 # versions (tested) as well.
3346 _cflags_size="-O1 -Oi" # -O1 without -Oi miscompiles stuff
3347 if $_cc 2>&1 | grep -q Linker; then
3354 _flags_filter=icl_flags
3356 _ld_path='-libpath:'
3357 # -Qdiag-error to make icl error when seeing certain unknown arguments
3358 _flags='-nologo -Qdiag-error:4044,10157'
3359 # -Qvec- -Qsimd- to prevent miscompilation, -GS for consistency
3360 # with MSVC which enables it by default.
3361 _cflags='-Qms0 -Qvec- -Qsimd- -GS'
3362 elif $_cc -? 2>/dev/null | grep -q 'LLVM.*Linker'; then
3363 # lld can emulate multiple different linkers; in ms link.exe mode,
3364 # the -? parameter gives the help output which contains an identifyable
3365 # string, while it gives an error in other modes.
3367 # The link.exe mode doesn't have a switch for getting the version,
3368 # but we can force it back to gnu mode and get the version from there.
3369 _ident=$($_cc -flavor gnu --version 2>/dev/null)
3371 _flags_filter=msvc_flags
3373 _ld_path='-libpath:'
3374 elif $_cc --version 2>/dev/null | grep -q ^cparser; then
3376 _ident=$($_cc --version | head -n1)
3380 _flags_filter=cparser_flags
3383 eval ${pfx}_type=\$_type
3384 eval ${pfx}_ident=\$_ident
3388 eval ${1}_C=\${_cc_c-\${${1}_C}}
3389 eval ${1}_E=\${_cc_e-\${${1}_E}}
3390 eval ${1}_O=\${_cc_o-\${${1}_O}}
3392 if [ -n "$_depflags" ]; then
3393 eval ${1}_DEPFLAGS=\$_depflags
3395 eval ${1}DEP=\${_DEPCMD:-\$DEPCMD}
3396 eval ${1}DEP_FLAGS=\${_DEPFLAGS:-\$DEPFLAGS}
3397 eval DEP${1}FLAGS=\$_flags
3402 cflags_filter=$_flags_filter
3403 cflags_speed=$_cflags_speed
3404 cflags_size=$_cflags_size
3405 cflags_noopt=$_cflags_noopt
3406 add_cflags $_flags $_cflags
3407 cc_ldflags=$_ldflags
3410 probe_cc hostcc "$host_cc"
3411 host_cflags_filter=$_flags_filter
3412 host_cflags_speed=$_cflags_speed
3413 add_host_cflags $_flags $_cflags
3416 test -n "$cc_type" && enable $cc_type ||
3417 warn "Unknown C compiler $cc, unable to select optimal CFLAGS"
3419 : ${as_default:=$cc}
3420 : ${objcc_default:=$cc}
3421 : ${dep_cc_default:=$cc}
3422 : ${ld_default:=$cc}
3423 : ${host_ld_default:=$host_cc}
3424 set_default ar as objcc dep_cc ld host_ld
3427 asflags_filter=$_flags_filter
3428 add_asflags $_flags $_cflags
3431 probe_cc objcc "$objcc"
3432 objcflags_filter=$_flags_filter
3433 add_objcflags $_flags $_cflags
3437 ldflags_filter=$_flags_filter
3438 add_ldflags $_flags $_ldflags
3439 test "$cc_type" != "$ld_type" && add_ldflags $cc_ldflags
3441 LD_LIB=${_ld_lib-$LD_LIB}
3442 LD_PATH=${_ld_path-$LD_PATH}
3444 probe_cc hostld "$host_ld"
3445 host_ldflags_filter=$_flags_filter
3446 add_host_ldflags $_flags $_ldflags
3447 HOSTLD_O=${_ld_o-$HOSTLD_O}
3449 if [ -z "$CC_DEPFLAGS" ] && [ "$dep_cc" != "$cc" ]; then
3450 probe_cc depcc "$dep_cc"
3451 CCDEP=${_DEPCMD:-$DEPCMD}
3452 CCDEP_FLAGS=${_DEPFLAGS:=$DEPFLAGS}
3456 if $ar 2>&1 | grep -q Microsoft; then
3459 elif $ar 2>&1 | grep -q 'Texas Instruments'; then
3462 elif $ar 2>&1 | grep -q 'Usage: ar.*-X.*any'; then
3463 arflags='-Xany -r -c'
3470 add_cflags $extra_cflags
3471 add_objcflags $extra_objcflags
3472 add_asflags $extra_cflags
3474 if test -n "$sysroot"; then
3477 add_cppflags --sysroot="$sysroot"
3478 add_ldflags --sysroot="$sysroot"
3481 add_cppflags -I"$sysinclude"
3482 add_ldflags --sysroot="$sysroot"
3487 if test "$cpu" = host; then
3488 enabled cross_compile &&
3489 die "--cpu=host makes no sense when cross-compiling."
3494 $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
3496 s/.*$1=\\([^ ]*\\).*/\\1/
3501 cpu=$(check_native -march || check_native -mcpu)
3505 test "${cpu:-host}" = host &&
3506 die "--cpu=host not supported with compiler $cc"
3509 # Deal with common $arch aliases
3533 "Power Macintosh"|ppc*|powerpc*)
3548 i[3-6]86|i86pc|BePC|x86pc|x86_64|amd64)
3553 is_in $arch $ARCH_LIST || warn "unknown architecture $arch"
3556 # Add processor-specific flags
3557 if enabled aarch64; then
3561 cpuflags="-march=$cpu"
3564 cpuflags="-mcpu=$cpu"
3568 elif enabled alpha; then
3570 cpuflags="-mcpu=$cpu"
3572 elif enabled arm; then
3575 check_cpp_condition stddef.h \
3576 "defined __ARM_ARCH_${1}__ || defined __TARGET_ARCH_${2:-$1}" \
3581 if check_arm_arch 4; then echo armv4
3582 elif check_arm_arch 4T; then echo armv4t
3583 elif check_arm_arch 5; then echo armv5
3584 elif check_arm_arch 5E; then echo armv5e
3585 elif check_arm_arch 5T; then echo armv5t
3586 elif check_arm_arch 5TE; then echo armv5te
3587 elif check_arm_arch 5TEJ; then echo armv5te
3588 elif check_arm_arch 6; then echo armv6
3589 elif check_arm_arch 6J; then echo armv6j
3590 elif check_arm_arch 6K; then echo armv6k
3591 elif check_arm_arch 6Z; then echo armv6z
3592 elif check_arm_arch 6ZK; then echo armv6zk
3593 elif check_arm_arch 6T2; then echo armv6t2
3594 elif check_arm_arch 7; then echo armv7
3595 elif check_arm_arch 7A 7_A; then echo armv7-a
3596 elif check_arm_arch 7S; then echo armv7-a
3597 elif check_arm_arch 7R 7_R; then echo armv7-r
3598 elif check_arm_arch 7M 7_M; then echo armv7-m
3599 elif check_arm_arch 7EM 7E_M; then echo armv7-m
3600 elif check_arm_arch 8A 8_A; then echo armv8-a
3604 [ "$cpu" = generic ] && cpu=$(probe_arm_arch)
3608 cpuflags="-march=$cpu"
3609 subarch=$(echo $cpu | sed 's/[^a-z0-9]//g')
3612 cpuflags="-mcpu=$cpu"
3614 cortex-a*) subarch=armv7a ;;
3615 cortex-r*) subarch=armv7r ;;
3616 cortex-m*) enable thumb; subarch=armv7m ;;
3617 arm11*) subarch=armv6 ;;
3618 arm[79]*e*|arm9[24]6*|arm96*|arm102[26]) subarch=armv5te ;;
3619 armv4*|arm7*|arm9[24]*) subarch=armv4 ;;
3620 *) subarch=$(probe_arm_arch) ;;
3626 armv5t*) enable fast_clz ;;
3627 armv[6-8]*) enable fast_clz fast_unaligned ;;
3630 elif enabled avr32; then
3635 cpuflags="-mpart=$cpu"
3639 cpuflags="-march=$cpu"
3643 cpuflags="-mcpu=$cpu"
3647 cpuflags="-march=$cpu"
3651 elif enabled bfin; then
3653 cpuflags="-mcpu=$cpu"
3655 elif enabled mips; then
3657 cpuflags="-march=$cpu"
3659 elif enabled ppc; then
3663 case $(tolower $cpu) in
3664 601|ppc601|powerpc601)
3665 cpuflags="-mcpu=601"
3668 603*|ppc603*|powerpc603*)
3669 cpuflags="-mcpu=603"
3672 604*|ppc604*|powerpc604*)
3673 cpuflags="-mcpu=604"
3676 g3|75*|ppc75*|powerpc75*)
3677 cpuflags="-mcpu=750"
3680 g4|745*|ppc745*|powerpc745*)
3681 cpuflags="-mcpu=7450"
3684 74*|ppc74*|powerpc74*)
3685 cpuflags="-mcpu=7400"
3688 g5|970|ppc970|powerpc970)
3689 cpuflags="-mcpu=970"
3693 cpuflags="-mcpu=$cpu"
3697 cpuflags="-mcpu=$cpu"
3701 cpuflags="-mcpu=cell"
3706 cpuflags="-mcpu=e500mc"
3710 cpuflags="-mcpu=8548 -mhard-float -mfloat-gprs=double"
3715 cpuflags="-mcpu=8540 -mhard-float"
3721 elif enabled sparc; then
3724 cypress|f93[04]|tsc701|sparcl*|supersparc|hypersparc|niagara|v[789])
3725 cpuflags="-mcpu=$cpu"
3727 ultrasparc*|niagara[234])
3728 cpuflags="-mcpu=$cpu"
3732 elif enabled x86; then
3736 cpuflags="-march=$cpu"
3740 # targets that do NOT support nopl and conditional mov (cmov)
3741 pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
3742 cpuflags="-march=$cpu"
3745 # targets that do support nopl and conditional mov (cmov)
3746 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*)
3747 cpuflags="-march=$cpu"
3751 # targets that do support conditional mov but on which it's slow
3752 pentium4|pentium4m|prescott|nocona)
3753 cpuflags="-march=$cpu"
3761 if [ "$cpu" != generic ]; then
3762 add_cflags $cpuflags
3763 add_asflags $cpuflags
3764 test "$cc_type" = "$ld_type" && add_ldflags $cpuflags
3767 # compiler sanity check
3769 int main(void){ return 0; }
3771 if test "$?" != 0; then
3772 echo "$cc is unable to create an executable file."
3773 if test -z "$cross_prefix" && ! enabled cross_compile ; then
3774 echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
3775 echo "Only do this if you know what cross compiling means."
3777 die "C compiler test failed."
3780 add_cppflags -D_ISOC99_SOURCE
3782 # some compilers silently accept -std=c11, so we also need to check that the
3783 # version macro is defined properly
3784 check_cpp_condition stdlib.h "__STDC_VERSION__ >= 201112L" -std=c11 &&
3785 add_cflags -std=c11 ||
3786 check_cflags -std=c99
3788 check_cppflags -D_FILE_OFFSET_BITS=64
3789 check_cppflags -D_LARGEFILE_SOURCE
3791 add_host_cppflags -D_ISOC99_SOURCE
3792 check_host_cflags -std=c99
3793 check_host_cflags -Wall
3794 check_host_cflags $host_cflags_speed
3800 check_code cc "" "int test[2*($expr) - 1]" &&
3801 subarch=$arch64 || subarch=$arch32
3809 check_64bit mips mips64 '_MIPS_SIM > 1'
3813 check_64bit parisc parisc64 'sizeof(void *) > 4'
3817 check_64bit ppc ppc64 'sizeof(void *) > 4'
3821 check_64bit s390 s390x 'sizeof(void *) > 4'
3825 check_64bit sparc sparc64 'sizeof(void *) > 4'
3829 check_64bit x86_32 x86_64 'sizeof(void *) > 4'
3830 if test "$subarch" = "x86_64"; then
3837 enabled spic && enable_weak pic
3843 add_cppflags '-I\$(SRC_PATH)/compat/aix'
3844 enabled shared && add_ldflags -Wl,-brtl
3848 enable section_data_rel_ro
3849 SLIB_INSTALL_NAME='$(SLIBNAME)'
3851 SHFLAGS='-shared -Wl,-soname,$(SLIBNAME)'
3854 prefix_default="/boot/common"
3855 network_extralibs="-lnetwork"
3859 SHFLAGS='-shared -Wl,-h,$$(@F)'
3860 enabled x86 && SHFLAGS="-mimpure-text $SHFLAGS"
3861 network_extralibs="-lsocket -lnsl"
3862 # When using suncc to build, the Solaris linker will mark
3863 # an executable with each instruction set encountered by
3864 # the Solaris assembler. As our libraries contain their own
3865 # guards for processor-specific code, instead suppress
3866 # generation of the HWCAPS ELF section on Solaris x86 only.
3867 enabled_all suncc x86 &&
3868 echo "hwcap_1 = OVERRIDE;" > mapfile &&
3869 add_ldflags -Wl,-M,mapfile
3870 nm_default='nm -P -g'
3872 VERSION_SCRIPT_POSTPROCESS_CMD='perl $(SRC_PATH)/compat/solaris/make_sunver.pl - $(OBJS)'
3876 oss_indev_extralibs="-lossaudio"
3877 oss_outdev_extralibs="-lossaudio"
3882 SLIB_INSTALL_NAME='$(SLIBNAME).$(LIBMAJOR).$(LIBMINOR)'
3884 oss_indev_extralibs="-lossaudio"
3885 oss_outdev_extralibs="-lossaudio"
3893 add_extralibs -lpoll -lgnugetopt
3896 enabled ppc && add_asflags -force_cpusubtype_ALL
3897 SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR)'
3898 enabled x86_32 && append SHFLAGS -Wl,-read_only_relocs,suppress
3899 add_ldflags -Wl,-dynamic,-search_paths_first
3901 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME).$(LIBVERSION)$(SLIBSUF)'
3902 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(NAME).$(LIBMAJOR)$(SLIBSUF)'
3904 enabled x86_64 && objformat="macho64"
3905 enabled_any pic shared ||
3906 { check_cflags -mdynamic-no-pic && add_asflags -mdynamic-no-pic; }
3907 check_header dispatch/dispatch.h &&
3908 add_cppflags '-I\$(SRC_PATH)/compat/dispatch_semaphore'
3911 die "Native MSYS builds are discouraged, please use the MINGW environment."
3914 if test $target_os = "mingw32ce"; then
3920 if enabled x86_64; then
3921 LIBTARGET="i386:x86-64"
3922 elif enabled arm; then
3925 check_ldflags -Wl,--nxcompat
3926 check_ldflags -Wl,--dynamicbase
3927 shlibdir_default="$bindir_default"
3930 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
3931 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(NAME)-$(LIBMAJOR)$(SLIBSUF)'
3932 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)'
3933 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
3935 SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
3936 SLIB_INSTALL_EXTRA_LIB='lib$(SLIBNAME:$(SLIBSUF)=.dll.a) $(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
3937 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'
3939 dlltool="${cross_prefix}dlltool"
3945 if enabled shared; then
3946 # Link to the import library instead of the normal static library
3949 # Cannot build both shared and static libs with MSVC or icl.
3952 shlibdir_default="$bindir_default"
3955 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
3956 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(NAME)-$(LIBMAJOR)$(SLIBSUF)'
3957 SLIB_CREATE_DEF_CMD='$(SRC_PATH)/compat/windows/makedef $(SUBDIR)lib$(NAME).ver $(OBJS) > $$(@:$(SLIBSUF)=.def)'
3958 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
3960 SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
3961 SLIB_INSTALL_EXTRA_LIB='$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
3962 SHFLAGS='-dll -def:$$(@:$(SLIBSUF)=.def) -implib:$(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib)'
3969 shlibdir_default="$bindir_default"
3972 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
3973 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(NAME)-$(LIBMAJOR)$(SLIBSUF)'
3974 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
3976 SLIB_INSTALL_EXTRA_LIB='lib$(NAME).dll.a'
3977 SHFLAGS='-shared -Wl,--out-implib,$(SUBDIR)lib$(NAME).dll.a'
3981 *-dos|freedos|opendos)
3982 network_extralibs="-lsocket"
3985 add_cppflags -U__STRICT_ANSI__
3989 enable section_data_rel_ro
3993 ranlib="echo ignoring ranlib"
3998 add_cppflags -D_GNU_SOURCE
3999 add_ldflags -Zomf -Zbin-files -Zargs-wild -Zhigh-mem -Zmap
4000 SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
4004 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
4005 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
4006 SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
4007 echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
4008 echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
4009 echo EXPORTS >> $(SUBDIR)$(NAME).def; \
4010 emxexp $(OBJS) >> $(SUBDIR)$(NAME).def'
4011 SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
4012 emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
4013 SLIB_INSTALL_EXTRA_LIB='$(LIBPREF)$(NAME)_dll.a $(LIBPREF)$(NAME)_dll.lib'
4017 add_cppflags -D_BSD_SOURCE
4022 add_cppflags -D_QNX_SOURCE
4023 network_extralibs="-lsocket"
4028 add_cflags --include=$sysinclude/gcce/gcce.h -fvisibility=default
4029 add_cppflags -D__GCCE__ -D__SYMBIAN32__ -DSYMBIAN_OE_POSIX_SIGNALS
4030 add_ldflags -Wl,--target1-abs,--no-undefined \
4031 -Wl,-Ttext,0x80000,-Tdata,0x1000000 -shared \
4032 -Wl,--entry=_E32Startup -Wl,-u,_E32Startup
4033 add_extralibs -l:eexe.lib -l:usrt2_2.lib -l:dfpaeabi.dso \
4034 -l:drtaeabi.dso -l:scppnwdl.dso -lsupc++ -lgcc \
4035 -l:libc.dso -l:libm.dso -l:euser.dso -l:libcrt0.lib
4038 add_cppflags -D_OSF_SOURCE -D_POSIX_PII -D_REENTRANT
4045 die "Unknown OS '$target_os'."
4049 # determine libc flavour
4054 # uclibc defines __GLIBC__, so it needs to be checked before glibc.
4055 if check_${pfx}cpp_condition features.h "defined __UCLIBC__"; then
4056 eval ${pfx}libc_type=uclibc
4057 add_${pfx}cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
4058 elif check_${pfx}cpp_condition features.h "defined __GLIBC__"; then
4059 eval ${pfx}libc_type=glibc
4060 add_${pfx}cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
4061 # MinGW headers can be installed on Cygwin, so check for newlib first.
4062 elif check_${pfx}cpp_condition newlib.h "defined _NEWLIB_VERSION"; then
4063 eval ${pfx}libc_type=newlib
4064 add_${pfx}cppflags -U__STRICT_ANSI__ -D_XOPEN_SOURCE=600
4065 # MinGW64 is backwards compatible with MinGW32, so check for it first.
4066 elif check_${pfx}cpp_condition _mingw.h "defined __MINGW64_VERSION_MAJOR"; then
4067 eval ${pfx}libc_type=mingw64
4068 add_${pfx}cppflags -U__STRICT_ANSI__ -D__USE_MINGW_ANSI_STDIO=1
4069 eval test \$${pfx_no_}cc_type = "gcc" &&
4070 add_${pfx}cppflags -D__printf__=__gnu_printf__
4071 elif check_${pfx}cpp_condition _mingw.h "defined __MINGW_VERSION" ||
4072 check_${pfx}cpp_condition _mingw.h "defined __MINGW32_VERSION"; then
4073 eval ${pfx}libc_type=mingw32
4074 check_${pfx}cpp_condition _mingw.h "__MINGW32_MAJOR_VERSION > 3 || \
4075 (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
4076 die "ERROR: MinGW32 runtime version must be >= 3.15."
4077 add_${pfx}cppflags -U__STRICT_ANSI__ -D__USE_MINGW_ANSI_STDIO=1
4078 check_${pfx}cpp_condition _mingw.h "__MSVCRT_VERSION__ < 0x0700__" &&
4079 add_${pfx}cppflags -D__MSVCRT_VERSION__=0x0700
4080 eval test \$${pfx_no_}cc_type = "gcc" &&
4081 add_${pfx}cppflags -D__printf__=__gnu_printf__
4082 elif check_${pfx}cpp_condition crtversion.h "defined _VC_CRT_MAJOR_VERSION"; then
4083 eval ${pfx}libc_type=msvcrt
4084 if check_${pfx}cpp_condition crtversion.h "_VC_CRT_MAJOR_VERSION < 14"; then
4085 if [ "$pfx" = host_ ]; then
4086 add_host_cppflags -Dsnprintf=_snprintf
4088 add_compat strtod.o strtod=avpriv_strtod
4089 add_compat msvcrt/snprintf.o snprintf=avpriv_snprintf \
4090 _snprintf=avpriv_snprintf \
4091 vsnprintf=avpriv_vsnprintf
4094 add_${pfx}cppflags -D_USE_MATH_DEFINES -D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_WARNINGS
4095 # The MSVC 2010 headers (Win 7.0 SDK) set _WIN32_WINNT to
4096 # 0x601 by default unless something else is set by the user.
4097 # This can easily lead to us detecting functions only present
4098 # in such new versions and producing binaries requiring windows 7.0.
4099 # Therefore explicitly set the default to XP unless the user has
4100 # set something else on the command line.
4101 # Don't do this if WINAPI_FAMILY is set and is set to a non-desktop
4102 # family. For these cases, configure is free to use any functions
4103 # found in the SDK headers by default. (Alternatively, we could force
4104 # _WIN32_WINNT to 0x0602 in that case.)
4105 check_${pfx}cpp_condition stdlib.h "defined(_WIN32_WINNT)" ||
4106 { check_${pfx}cpp <<EOF && add_${pfx}cppflags -D_WIN32_WINNT=0x0502; }
4107 #ifdef WINAPI_FAMILY
4108 #include <winapifamily.h>
4109 #if !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
4114 if [ "$pfx" = "" ]; then
4115 check_func strtoll || add_cflags -Dstrtoll=_strtoi64
4117 elif check_${pfx}cpp_condition stddef.h "defined __KLIBC__"; then
4118 eval ${pfx}libc_type=klibc
4119 elif check_${pfx}cpp_condition sys/cdefs.h "defined __BIONIC__"; then
4120 eval ${pfx}libc_type=bionic
4121 elif check_${pfx}cpp_condition sys/brand.h "defined LABELED_BRAND_NAME"; then
4122 eval ${pfx}libc_type=solaris
4123 add_${pfx}cppflags -D__EXTENSIONS__ -D_XOPEN_SOURCE=600
4125 eval ${pfx}libc_type=default
4126 add_${pfx}cppflags -D_DEFAULT_SOURCE
4131 test -n "$libc_type" && enable libc_$libc_type
4133 test -n "$host_libc_type" && enable host_libc_$host_libc_type
4135 # hacks for compiler/libc/os combinations
4139 add_compat strtod.o strtod=avpriv_strtod
4142 if enabled tms470; then
4143 CPPFLAGS="-I${source_path}/compat/tms470 ${CPPFLAGS}"
4144 add_cppflags -D__USER_LABEL_PREFIX__=
4145 add_cppflags -D__builtin_memset=memset
4146 add_cppflags -D__gnuc_va_list=va_list -D_VA_LIST_DEFINED
4147 add_cflags -pds=48 # incompatible redefinition of macro
4148 elif enabled ccc; then
4149 add_ldflags -Wl,-z,now # calls to libots crash without this
4154 check_compile_assert flt_lim "float.h limits.h" "DBL_MAX == (double)DBL_MAX" ||
4155 add_cppflags '-I\$(SRC_PATH)/compat/float'
4158 echo "$*" | sed 's/%/%25/g;s/:/%3a/g'
4161 echo "config:$arch:$subarch:$cpu:$target_os:$(esc $cc_ident):$(esc $LIBAV_CONFIGURATION)" > avbuild/config.fate
4163 check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable_weak pic
4165 set_default $PATHS_LIST
4168 # we need to build at least one lib type
4169 if ! enabled_any static shared; then
4171 At least one library type must be built.
4172 Specify --enable-static to build the static libraries or --enable-shared to
4173 build the shared libraries as well. To only build the shared libraries specify
4174 --disable-static in addition to --enable-shared.
4179 disabled optimizations || check_cflags -fomit-frame-pointer
4182 disabled pic && return
4185 case "$target_os" in
4195 enabled pic && enable_weak_pic
4197 check_cc <<EOF || die "Symbol mangling check failed."
4200 sym=$($nm $TMPO | awk '/ff_extern/{ print substr($0, match($0, /[^ \t]*ff_extern/)) }')
4201 extern_prefix=${sym%%ff_extern*}
4203 check_inline_asm inline_asm '"" ::'
4206 for restrict_keyword in restrict __restrict__ __restrict; do
4207 check_cc <<EOF && _restrict=$restrict_keyword && break
4208 void foo(char * $restrict_keyword p);
4212 check_cc <<EOF && enable pragma_deprecated
4213 void foo(void) { _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") }
4216 check_cc <<EOF && enable attribute_packed
4217 struct { int x; } __attribute__((packed)) x;
4220 check_cc <<EOF && enable attribute_may_alias
4221 union { int x; } __attribute__((may_alias)) x;
4224 check_cc <<EOF || die "endian test failed"
4225 unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
4227 od -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
4230 log "check_gas using '$as' as AS"
4231 # :vararg is used on aarch64, arm and ppc altivec
4232 check_as <<EOF || return 1
4233 .macro m n, y:vararg=0
4238 # .altmacro is only used in arm asm
4239 ! enabled arm || check_as <<EOF || return 1
4246 if enabled_any arm aarch64 || enabled_all ppc altivec && enabled asm; then
4248 enabled_any arm aarch64 && nogas=die
4249 enabled_all ppc altivec && nogas=warn
4253 arm*) gaspp_as_type=armasm; as_noop=-h ;;
4254 gcc) gaspp_as_type=gas ;;
4255 *) gaspp_as_type=$as_type ;;
4258 [ $target_os = "darwin" ] && gaspp_as_type="apple-$gaspp_as_type"
4260 check_cmd gas-preprocessor.pl -arch $arch -as-type $gaspp_as_type -- $as $as_noop &&
4261 gas="gas-preprocessor.pl -arch $arch -as-type $gaspp_as_type -- $as"
4263 if ! check_gas ; then
4266 $nogas "GNU assembler not found, install/update gas-preprocessor"
4269 check_as <<EOF && enable as_func
4275 check_inline_asm inline_asm_labels '"1:\n"'
4277 if enabled aarch64; then
4278 enabled armv8 && check_insn armv8 'prfm pldl1strm, [x0]'
4279 # internal assembler in clang 3.3 does not support this instruction
4280 enabled neon && check_insn neon 'ext v0.8B, v0.8B, v1.8B, #1'
4281 enabled vfp && check_insn vfp 'fmadd d0, d0, d1, d2'
4283 map 'enabled_any ${v}_external ${v}_inline || disable $v' $ARCH_EXT_LIST_ARM
4285 elif enabled alpha; then
4289 elif enabled arm; then
4291 enabled msvc && check_cpp_condition stddef.h "defined _M_ARMT" && enable thumb
4292 check_cpp_condition stddef.h "defined __thumb__" && enable_weak thumb
4293 enabled thumb && check_cflags -mthumb || check_cflags -marm
4295 if check_cpp_condition stddef.h "defined __ARM_PCS_VFP"; then
4297 elif check_cpp_condition stddef.h "defined _M_ARM_FP && _M_ARM_FP >= 30"; then
4299 elif ! check_cpp_condition stddef.h "defined __ARM_PCS || defined __SOFTFP__" && [ $target_os != darwin ]; then
4300 case "${cross_prefix:-$cc}" in
4301 *hardfloat*) enable vfp_args; fpabi=vfp ;;
4302 *) check_ld <<EOF && enable vfp_args && fpabi=vfp || fpabi=soft ;;
4303 __asm__ (".eabi_attribute 28, 1");
4304 int main(void) { return 0; }
4307 warn "Compiler does not indicate floating-point ABI, guessing $fpabi."
4310 enabled armv5te && check_insn armv5te 'qadd r0, r0, r0'
4311 enabled armv6 && check_insn armv6 'sadd16 r0, r0, r0'
4312 enabled armv6t2 && check_insn armv6t2 'movt r0, #0'
4313 enabled neon && check_insn neon 'vadd.i16 q0, q0, q0'
4314 enabled vfp && check_insn vfp 'fadds s0, s0, s0'
4315 enabled vfpv3 && check_insn vfpv3 'vmov.f32 s0, #1.0'
4317 [ $target_os = linux ] || [ $target_os = android ] ||
4318 map 'enabled_any ${v}_external ${v}_inline || disable $v' \
4321 check_inline_asm asm_mod_q '"add r0, %Q0, %R0" :: "r"((long long)0)'
4323 check_as <<EOF && enable as_dn_directive
4327 check_as <<EOF && enable as_fpu_directive
4331 # llvm's integrated assembler supports .object_arch from llvm 3.5
4332 [ "$objformat" = elf ] && check_as <<EOF && enable as_object_arch
4336 [ $target_os != win32 ] && enabled_all armv6t2 shared !pic && enable_weak_pic
4338 elif enabled mips; then
4340 check_inline_asm loongson '"dmult.g $1, $2, $3"'
4342 # make sure that only an instruction set is enabled
4343 disable mips64r6 mips32r6 mips64r2 mips32r2 mips64r1 mips32r1
4345 if enabled mips64; then
4346 check_inline_asm mips64r6 '"dlsa $0, $0, $0, 1"' ||
4347 check_inline_asm mips64r2 '"dext $0, $0, 0, 1"' ||
4348 check_inline_asm mips64r1 '"daddi $0, $0, 0"'
4350 check_inline_asm mips32r6 '"aui $0, $0, 0"' ||
4351 check_inline_asm mips32r2 '"ext $0, $0, 0, 1"' ||
4352 check_inline_asm mips32r1 '"addi $0, $0, 0"'
4355 elif enabled parisc; then
4357 if enabled gcc; then
4358 case $($cc -dumpversion) in
4359 4.[3-8].*) check_cflags -fno-optimize-sibling-calls ;;
4363 elif enabled ppc; then
4365 enable local_aligned_8 local_aligned_16 local_aligned_32
4367 check_inline_asm dcbzl '"dcbzl 0, %0" :: "r"(0)'
4368 check_inline_asm ibm_asm '"add 0, 0, 0"'
4369 check_inline_asm ppc4xx '"maclhw r10, r11, r12"'
4370 check_inline_asm xform_asm '"lwzx %1, %y0" :: "Z"(*(int*)0), "r"(0)'
4372 # AltiVec flags: The FSF version of GCC differs from the Apple version
4373 if enabled altivec; then
4374 check_cflags -maltivec -mabi=altivec &&
4375 { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
4376 check_cflags -faltivec
4378 # check if our compiler supports Motorola AltiVec C API
4379 check_cc <<EOF || disable altivec
4382 vector signed int v1 = (vector signed int) { 0 };
4383 vector signed int v2 = (vector signed int) { 1 };
4384 v1 = vec_add(v1, v2);
4389 enabled altivec || warn "Altivec disabled, possibly missing --cpu flag"
4392 if enabled vsx; then
4393 check_cflags -mvsx &&
4394 check_builtin vec_vsx_ld "altivec.h" "__builtin_vec_vsx_ld" || disable vsx
4397 if enabled power8; then
4398 check_cpp_condition "altivec.h" "defined(_ARCH_PWR8)" || disable power8
4401 elif enabled x86; then
4403 check_builtin rdtsc intrin.h "__rdtsc()"
4404 check_builtin mm_empty mmintrin.h "_mm_empty()"
4406 enable local_aligned_8 local_aligned_16 local_aligned_32
4408 # check whether EBP is available on x86
4409 # As 'i' is stored on the stack, this program will crash
4410 # if the base pointer is used to access it because the
4411 # base pointer is cleared in the inline assembly code.
4412 check_exec_crash <<EOF && enable ebp_available
4414 __asm__ volatile ("xorl %%ebp, %%ebp" ::: "%ebp");
4418 # check whether EBX is available on x86
4419 check_inline_asm ebx_available '""::"b"(0)' &&
4420 check_inline_asm ebx_available '"":::"%ebx"'
4422 # check whether xmm clobbers are supported
4423 check_inline_asm xmm_clobbers '"":::"%xmm0"'
4425 # check whether binutils is new enough to compile SSSE3/MMXEXT
4426 enabled ssse3 && check_inline_asm ssse3_inline '"pabsw %xmm0, %xmm0"'
4427 enabled mmxext && check_inline_asm mmxext_inline '"pmaxub %mm0, %mm1"'
4429 if ! disabled_any asm mmx yasm; then
4430 if check_cmd $yasmexe --version; then
4431 enabled x86_64 && yasm_extra="-m amd64"
4432 yasm_debug="-g dwarf2"
4433 elif check_cmd nasm -v; then
4435 yasm_debug="-g -F dwarf"
4436 enabled x86_64 && test "$objformat" = elf && objformat=elf64
4439 YASMFLAGS="-f $objformat $yasm_extra"
4440 enabled pic && append YASMFLAGS "-DPIC"
4441 test -n "$extern_prefix" && append YASMFLAGS "-DPREFIX"
4442 case "$objformat" in
4443 elf*) enabled debug && append YASMFLAGS $yasm_debug ;;
4446 check_yasm "movbe ecx, [5]" && enable yasm ||
4447 die "yasm/nasm not found or too old. Use --disable-yasm for a crippled build."
4448 check_yasm "vextracti128 xmm0, ymm0, 0" || disable avx2_external
4449 check_yasm "vpmacsdd xmm0, xmm1, xmm2, xmm3" || disable xop_external
4450 check_yasm "vfmadd132ps ymm0, ymm1, ymm2" || disable fma3_external
4451 check_yasm "vfmaddps ymm0, ymm1, ymm2, ymm3" || disable fma4_external
4452 check_yasm "CPU amdnop" || disable cpunop
4456 athlon*|opteron*|k8*|pentium|pentium-mmx|prescott|nocona|atom|geode)
4463 check_code cc arm_neon.h "int16x8_t test = vdupq_n_s16(0)" && enable intrinsics_neon
4465 check_ldflags -Wl,--as-needed
4467 if check_func dlopen; then
4469 elif check_func dlopen -ldl; then
4473 if ! disabled network; then
4474 check_func getaddrinfo $network_extralibs
4475 check_func inet_aton $network_extralibs
4477 check_type netdb.h "struct addrinfo"
4478 check_type netinet/in.h "struct group_source_req" -D_BSD_SOURCE
4479 check_type netinet/in.h "struct ip_mreq_source" -D_BSD_SOURCE
4480 check_type netinet/in.h "struct ipv6_mreq" -D_DARWIN_C_SOURCE
4481 check_type poll.h "struct pollfd"
4482 check_type netinet/sctp.h "struct sctp_event_subscribe"
4483 check_struct "sys/types.h sys/socket.h" "struct sockaddr" sa_len
4484 check_type netinet/in.h "struct sockaddr_in6"
4485 check_type "sys/types.h sys/socket.h" "struct sockaddr_storage"
4486 check_type "sys/types.h sys/socket.h" socklen_t
4488 # Prefer arpa/inet.h over winsock2
4489 if check_header arpa/inet.h ; then
4490 check_func closesocket
4491 elif check_header winsock2.h ; then
4492 check_func_headers winsock2.h closesocket -lws2 &&
4493 network_extralibs="-lws2" ||
4494 { check_func_headers winsock2.h closesocket -lws2_32 &&
4495 network_extralibs="-lws2_32"; } || disable winsock2_h network
4496 check_func_headers ws2tcpip.h getaddrinfo $network_extralibs
4498 check_type ws2tcpip.h socklen_t
4499 check_type ws2tcpip.h "struct addrinfo"
4500 check_type ws2tcpip.h "struct group_source_req"
4501 check_type ws2tcpip.h "struct ip_mreq_source"
4502 check_type ws2tcpip.h "struct ipv6_mreq"
4503 check_type winsock2.h "struct pollfd"
4504 check_struct winsock2.h "struct sockaddr" sa_len
4505 check_type ws2tcpip.h "struct sockaddr_in6"
4506 check_type ws2tcpip.h "struct sockaddr_storage"
4512 check_builtin atomic_cas_ptr atomic.h "void **ptr; void *oldval, *newval; atomic_cas_ptr(ptr, oldval, newval)"
4513 check_builtin machine_rw_barrier mbarrier.h "__machine_rw_barrier()"
4514 check_builtin MemoryBarrier windows.h "MemoryBarrier()"
4515 check_builtin sync_val_compare_and_swap "" "int *ptr; int oldval, newval; __sync_val_compare_and_swap(ptr, oldval, newval)"
4517 case "$custom_allocator" in
4519 # jemalloc by default does not use a prefix
4520 require libjemalloc jemalloc/jemalloc.h malloc -ljemalloc
4523 require_pkg_config "" libtcmalloc gperftools/tcmalloc.h tc_malloc
4528 check_func_headers malloc.h _aligned_malloc && enable aligned_malloc
4529 check_func ${malloc_prefix}memalign && enable memalign
4530 check_func ${malloc_prefix}posix_memalign && enable posix_memalign
4532 check_cpp_condition unistd.h "defined(_POSIX_MONOTONIC_CLOCK)" &&
4533 check_func_headers time.h clock_gettime ||
4534 { check_lib clock_gettime time.h clock_gettime -lrt && LIBRT="-lrt"; }
4538 check_func gethrtime
4540 check_func getrusage
4541 check_func gettimeofday
4544 check_func localtime_r
4545 check_func mach_absolute_time
4549 # Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
4550 check_func_headers time.h nanosleep || check_lib nanosleep time.h nanosleep -lrt
4551 check_func sched_getaffinity
4552 check_func setrlimit
4553 check_func strerror_r
4558 check_func_headers io.h setmode
4559 check_func_headers stdlib.h getenv
4561 check_func_headers windows.h GetProcessAffinityMask
4562 check_func_headers windows.h GetProcessTimes
4563 check_func_headers windows.h GetSystemTimeAsFileTime
4564 check_func_headers windows.h LoadLibrary
4565 check_func_headers windows.h MapViewOfFile
4566 check_func_headers windows.h SetConsoleTextAttribute
4567 check_func_headers windows.h Sleep
4568 check_func_headers windows.h VirtualAlloc
4569 check_struct windows.h "CONDITION_VARIABLE" Ptr
4571 check_header d3d11.h
4572 check_header direct.h
4573 check_header dlfcn.h
4575 check_header dxva2api.h
4577 check_header mach/mach_time.h
4578 check_header malloc.h
4580 check_header sys/mman.h
4581 check_header sys/param.h
4582 check_header sys/resource.h
4583 check_header sys/select.h
4584 check_header sys/time.h
4585 check_header sys/un.h
4586 check_header unistd.h
4587 check_header valgrind/valgrind.h
4588 check_header VideoDecodeAcceleration/VDADecoder.h
4589 check_header windows.h
4590 check_header X11/extensions/XvMClib.h
4592 # it seems there are versions of clang in some distros that try to use the
4593 # gcc headers, which explodes for stdatomic
4594 # so we also check that atomics actually work here
4595 check_builtin stdatomic_h stdatomic.h "atomic_int foo; atomic_store(&foo, 0)"
4597 check_lib shell32 "windows.h shellapi.h" CommandLineToArgvW -lshell32
4598 check_lib wincrypt "windows.h wincrypt.h" CryptGenRandom -ladvapi32
4599 check_lib psapi "windows.h psapi.h" GetProcessMemoryInfo -lpsapi
4601 check_struct "sys/time.h sys/resource.h" "struct rusage" ru_maxrss
4603 check_type "windows.h dxva.h" "DXVA_PicParams_HEVC" -DWINAPI_FAMILY=WINAPI_FAMILY_DESKTOP_APP -D_CRT_BUILD_DESKTOP_APP=0
4604 check_type "windows.h d3d11.h" "ID3D11VideoDecoder"
4605 check_type "d3d9.h dxva2api.h" DXVA2_ConfigPictureDecode -D_WIN32_WINNT=0x0602
4607 check_type "va/va.h va/va_dec_hevc.h" "VAPictureParameterBufferHEVC"
4608 check_type "va/va.h va/va_dec_vp8.h" "VAPictureParameterBufferVP8"
4609 check_type "va/va.h va/va_vpp.h" "VAProcPipelineParameterBuffer"
4610 check_type "va/va.h va/va_enc_h264.h" "VAEncPictureParameterBufferH264"
4611 check_type "va/va.h va/va_enc_hevc.h" "VAEncPictureParameterBufferHEVC"
4612 check_type "va/va.h va/va_enc_jpeg.h" "VAEncPictureParameterBufferJPEG"
4613 check_type "va/va.h va/va_enc_mpeg2.h" "VAEncPictureParameterBufferMPEG2"
4614 check_type "va/va.h va/va_enc_vp8.h" "VAEncPictureParameterBufferVP8"
4616 check_type "vdpau/vdpau.h" "VdpPictureInfoHEVC"
4618 if ! disabled w32threads && ! enabled pthreads; then
4619 check_lib w32threads "windows.h process.h" _beginthreadex
4622 # check for some common methods of building with pthread support
4623 # do this before the optional library checks as some of them require pthreads
4624 if ! disabled pthreads && ! enabled w32threads; then
4625 if check_lib pthreads pthread.h pthread_join -pthread; then
4627 elif check_lib pthreads pthread.h pthread_join -pthreads; then
4628 add_cflags -pthreads
4629 elif check_lib pthreads pthread.h pthread_join -lpthreadGC2; then
4631 elif check_lib pthreads pthread.h pthread_join -lpthread; then
4633 elif check_func pthread_join; then
4639 check_builtin sem_timedwait semaphore.h "sem_t *s; sem_init(s,0,0); sem_timedwait(s,0); sem_destroy(s)"
4641 disabled zlib || check_lib zlib zlib.h zlibVersion -lz
4642 disabled bzlib || check_lib bzlib bzlib.h BZ2_bzlibVersion -lbz2
4644 check_lib libm math.h sin -lm && LIBM="-lm"
4650 for func in $MATH_FUNCS; do
4651 eval check_mathfunc $func \${${func}_args:-1} $LIBM
4654 # these are off by default, so fail if requested and not available
4655 enabled avisynth && require_header avisynth/avisynth_c.h
4656 enabled avxsynth && require avxsynth "avxsynth/avxsynth_c.h dlfcn.h" dlopen -ldl
4657 enabled cuda && require cuda cuda.h cuInit -lcuda
4658 enabled frei0r && require_header frei0r.h
4659 enabled gnutls && require_pkg_config "" gnutls gnutls/gnutls.h gnutls_global_init
4660 enabled libbs2b && require_pkg_config "" libbs2b bs2b.h bs2b_open
4661 enabled libdc1394 && require_pkg_config libdc1394 libdc1394-2 dc1394/dc1394.h dc1394_new
4662 enabled libdcadec && require libdcadec libdcadec/dca_context.h dcadec_context_create -ldcadec
4663 enabled libfaac && require libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
4664 enabled libfdk_aac && require_pkg_config libfdk_aac fdk-aac "fdk-aac/aacenc_lib.h" aacEncOpen
4665 enabled libfontconfig && require_pkg_config libfontconfig fontconfig "fontconfig/fontconfig.h" FcInit
4666 enabled libfreetype && require_pkg_config libfreetype freetype2 "ft2build.h FT_FREETYPE_H" FT_Init_FreeType
4667 enabled libgsm && { for gsm_hdr in "gsm.h" "gsm/gsm.h"; do
4668 check_lib libgsm "${gsm_hdr}" gsm_create -lgsm && break;
4669 done || die "ERROR: libgsm not found"; }
4670 enabled libhdcd && require_pkg_config "" libhdcd "hdcd/hdcd_simple.h" hdcd_new
4671 enabled libilbc && require libilbc ilbc.h WebRtcIlbcfix_InitDecode -lilbc
4672 enabled libkvazaar && require_pkg_config libkvazaar "kvazaar >= 0.8.1" kvazaar.h kvz_api_get
4673 enabled libmfx && require_pkg_config "" libmfx "mfx/mfxvideo.h" MFXInit
4674 enabled libmp3lame && require "libmp3lame >= 3.98.3" lame/lame.h lame_set_VBR_quality -lmp3lame
4675 enabled libnpp && require libnpp npp.h nppGetLibVersion -lnppi -lnppc
4676 enabled libopencore_amrnb && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb
4677 enabled libopencore_amrwb && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb
4678 enabled libopencv && require_pkg_config libopencv opencv opencv/cv.h cvCreateImageHeader
4679 enabled libopenh264 && require_pkg_config libopenh264 openh264 wels/codec_api.h WelsGetCodecVersion
4680 enabled libopenjpeg && { check_lib libopenjpeg openjpeg.h opj_version -lopenjpeg -DOPJ_STATIC ||
4681 require_pkg_config libopenjpeg libopenjpeg1 openjpeg.h opj_version -DOPJ_STATIC; }
4682 enabled libopus && require_pkg_config libopus opus opus_multistream.h opus_multistream_decoder_create
4683 enabled libpulse && require_pkg_config libpulse libpulse-simple pulse/simple.h pa_simple_new
4684 enabled librtmp && require_pkg_config "" librtmp librtmp/rtmp.h RTMP_Socket
4685 enabled libschroedinger && require_pkg_config libschroedinger schroedinger-1.0 schroedinger/schro.h schro_init
4686 enabled libsnappy && require libsnappy snappy-c.h snappy_compress -lsnappy
4687 enabled libspeex && require_pkg_config libspeex speex speex/speex.h speex_decoder_init -lspeex
4688 enabled libtheora && require libtheora theora/theoraenc.h th_info_init -ltheoraenc -ltheoradec -logg
4689 enabled libtwolame && require libtwolame twolame.h twolame_init -ltwolame
4690 enabled libvo_aacenc && require libvo_aacenc vo-aacenc/voAAC.h voGetAACEncAPI -lvo-aacenc
4691 enabled libvo_amrwbenc && require libvo_amrwbenc vo-amrwbenc/enc_if.h E_IF_init -lvo-amrwbenc
4692 enabled libvorbis && require libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
4693 enabled libvpx && require_pkg_config libvpx "vpx >= 1.3.0" vpx/vpx_codec.h vpx_codec_version && {
4694 enabled libvpx_vp8_decoder && {
4695 check_pkg_config vpx "vpx/vpx_decoder.h vpx/vp8dx.h" vpx_codec_vp8_dx ||
4696 disable libvpx_vp8_decoder;
4698 enabled libvpx_vp8_encoder && {
4699 check_pkg_config vpx "vpx/vpx_encoder.h vpx/vp8cx.h" vpx_codec_vp8_cx ||
4700 disable libvpx_vp8_encoder;
4702 enabled libvpx_vp9_decoder && {
4703 check_pkg_config vpx "vpx/vpx_decoder.h vpx/vp8dx.h" vpx_codec_vp9_dx ||
4704 disable libvpx_vp9_decoder;
4706 enabled libvpx_vp9_encoder && {
4707 check_pkg_config vpx "vpx/vpx_encoder.h vpx/vp8cx.h" vpx_codec_vp9_cx ||
4708 disable libvpx_vp9_encoder;
4710 if disabled_all libvpx_vp8_decoder libvpx_vp9_decoder libvpx_vp8_encoder libvpx_vp9_encoder; then
4711 die "libvpx enabled but no supported decoders found"
4714 enabled libwavpack && require libwavpack wavpack/wavpack.h WavpackOpenFileOutput -lwavpack
4715 enabled libwebp && require_pkg_config "" libwebp webp/encode.h WebPGetEncoderVersion
4716 enabled libx264 && require_pkg_config libx264 x264 "stdint.h x264.h" x264_encoder_encode &&
4717 require_cpp_condition x264.h "X264_BUILD >= 118" &&
4718 { check_cpp_condition x264.h "X264_MPEG2" &&
4720 enabled libx265 && require_pkg_config libx265 x265 x265.h x265_api_get &&
4721 require_cpp_condition x265.h "X265_BUILD >= 57"
4722 enabled libxavs && require libxavs "stdint.h xavs.h" xavs_encoder_encode -lxavs
4723 enabled libxvid && require libxvid xvid.h xvid_global -lxvidcore
4724 enabled mmal && { check_lib mmal interface/mmal/mmal.h mmal_port_connect -lmmal_core -lmmal_util -lmmal_vc_client -lbcm_host ||
4725 { ! enabled cross_compile &&
4726 add_cflags -isystem/opt/vc/include/ -isystem/opt/vc/include/interface/vmcs_host/linux -isystem/opt/vc/include/interface/vcos/pthreads -fgnu89-inline &&
4727 add_ldflags -L/opt/vc/lib/ &&
4728 check_lib mmal interface/mmal/mmal.h mmal_port_connect -lmmal_core -lmmal_util -lmmal_vc_client -lbcm_host; } ||
4729 die "ERROR: mmal not found" &&
4730 check_func_headers interface/mmal/mmal.h "MMAL_PARAMETER_VIDEO_MAX_NUM_CALLBACKS"; }
4731 enabled omx_rpi && { check_header OMX_Core.h ||
4732 { ! enabled cross_compile && add_cflags -isystem/opt/vc/include/IL && check_header OMX_Core.h ; } ||
4733 die "ERROR: OpenMAX IL headers not found"; }
4734 enabled omx && require_header OMX_Core.h
4735 enabled openssl && { { check_pkg_config openssl openssl/ssl.h OPENSSL_init_ssl ||
4736 check_pkg_config openssl openssl/ssl.h SSL_library_init; } && {
4737 add_cflags $openssl_cflags && add_extralibs $openssl_extralibs; } ||
4738 check_lib openssl openssl/ssl.h SSL_library_init -lssl -lcrypto ||
4739 check_lib openssl openssl/ssl.h SSL_library_init -lssl32 -leay32 ||
4740 check_lib openssl openssl/ssl.h SSL_library_init -lssl -lcrypto -lws2_32 -lgdi32 ||
4741 die "ERROR: openssl not found"; }
4743 enabled gnutls && check_lib gmp gmp.h mpz_export -lgmp
4745 if enabled nvenc; then
4746 require_header nvEncodeAPI.h
4747 require_cpp_condition nvEncodeAPI.h "NVENCAPI_MAJOR_VERSION >= 6"
4750 if check_pkg_config sdl SDL_events.h SDL_PollEvent; then
4751 check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
4752 check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) < 0x010300" $sdl_cflags &&
4756 ! disabled pod2man && check_cmd pod2man --help && enable pod2man || disable pod2man
4757 ! disabled texi2html && check_cmd texi2html -version && enable texi2html || disable texi2html
4759 check_header linux/fb.h
4760 check_header linux/videodev2.h
4761 check_struct linux/videodev2.h "struct v4l2_frmivalenum" discrete
4763 check_header AVFoundation/AVFoundation.h
4765 check_header sys/videoio.h
4767 check_lib user32 "windows.h winuser.h" GetShellWindow -luser32
4768 check_lib vfw32 "windows.h vfw.h" capCreateCaptureWindow -lvfw32
4769 # check that WM_CAP_DRIVER_CONNECT is defined to the proper value
4770 # w32api 3.12 had it defined wrong
4771 check_cpp_condition vfw.h "WM_CAP_DRIVER_CONNECT > WM_USER" && enable vfwcap_defines
4773 # check for ioctl_meteor.h, ioctl_bt848.h and alternatives
4774 { check_header dev/bktr/ioctl_meteor.h &&
4775 check_header dev/bktr/ioctl_bt848.h; } ||
4776 { check_header machine/ioctl_meteor.h &&
4777 check_header machine/ioctl_bt848.h; } ||
4778 { check_header dev/video/meteor/ioctl_meteor.h &&
4779 check_header dev/video/bktr/ioctl_bt848.h; } ||
4780 check_header dev/ic/bt8xx.h
4782 check_header sys/soundcard.h
4783 check_header soundcard.h
4785 enabled_any alsa_indev alsa_outdev &&
4786 check_lib alsa alsa/asoundlib.h snd_pcm_htimestamp -lasound
4788 enabled jack_indev && check_lib jack jack/jack.h jack_client_open -ljack &&
4789 check_func jack_port_get_latency_range -ljack
4791 enabled_any sndio_indev sndio_outdev && check_lib sndio sndio.h sio_open -lsndio
4793 if enabled libcdio; then
4794 check_lib libcdio "cdio/cdda.h cdio/paranoia.h" cdio_cddap_open -lcdio_paranoia -lcdio_cdda -lcdio ||
4795 check_lib libcdio "cdio/paranoia/cdda.h cdio/paranoia/paranoia.h" cdio_cddap_open -lcdio_paranoia -lcdio_cdda -lcdio ||
4796 die "ERROR: No usable libcdio/cdparanoia found"
4799 if enabled libxcb; then
4800 require_pkg_config libxcb xcb-shape xcb/shape.h xcb_shape_rectangles
4801 disabled libxcb_shm ||
4802 require_pkg_config libxcb_shm xcb-shm xcb/shm.h xcb_shm_attach
4803 disabled libxcb_xfixes ||
4804 require_pkg_config libxcb_xfixes xcb-xfixes xcb/xfixes.h xcb_xfixes_get_cursor_image
4808 check_lib dxva2_lib windows.h CoTaskMemFree -lole32
4810 enabled vaapi && require vaapi va/va.h vaInitialize -lva
4813 check_code cc "va/va.h" "vaCreateSurfaces(0, 0, 0, 0, 0, 0, 0, 0)" ||
4817 check_lib vaapi_drm "va/va.h va/va_drm.h" vaGetDisplayDRM -lva -lva-drm
4820 check_lib vaapi_x11 "va/va.h va/va_x11.h" vaGetDisplay -lva -lva-x11 -lX11
4823 check_cpp_condition vdpau/vdpau.h "defined VDP_DECODER_PROFILE_MPEG4_PART2_ASP" ||
4827 check_lib vdpau_x11 "vdpau/vdpau.h vdpau/vdpau_x11.h" vdp_device_create_x11 -lvdpau -lX11
4829 enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel"
4831 # add some useful compiler flags if supported
4832 check_cflags -Wdeclaration-after-statement
4834 check_cflags -Wdisabled-optimization
4835 check_cflags -Wpointer-arith
4836 check_cflags -Wredundant-decls
4837 check_cflags -Wwrite-strings
4838 check_cflags -Wtype-limits
4839 check_cflags -Wundef
4840 check_cflags -Wmissing-prototypes
4841 check_cflags -Wstrict-prototypes
4843 if enabled extra_warnings; then
4844 check_cflags -Wcast-qual
4845 check_cflags -Wextra
4846 check_cflags -Wpedantic
4849 check_disable_warning(){
4850 warning_flag=-W${1#-Wno-}
4851 test_cflags $warning_flag && add_cflags $1
4854 check_disable_warning -Wno-parentheses
4855 check_disable_warning -Wno-switch
4856 check_disable_warning -Wno-format-zero-length
4857 check_disable_warning -Wno-pointer-sign
4859 check_disable_warning_headers(){
4860 warning_flag=-W${1#-Wno-}
4861 test_cflags $warning_flag && add_cflags_headers $1
4864 check_disable_warning_headers -Wno-deprecated-declarations
4865 check_disable_warning_headers -Wno-unused-variable
4867 check_objcflags -fobjc-arc && enable objc_arc
4869 check_cc <<EOF && enable blocks_extension
4870 void (^block)(void);
4873 # add some linker flags
4874 check_ldflags -Wl,--warn-common
4875 check_ldflags -Wl,-rpath-link=libswscale:libavfilter:libavdevice:libavformat:libavcodec:libavutil:libavresample
4876 enabled rpath && add_ldexeflags -Wl,-rpath,$libdir
4877 test_ldflags -Wl,-Bsymbolic && append SHFLAGS -Wl,-Bsymbolic
4879 # add some strip flags
4880 # -wN '..@*' is more selective than -x, but not available everywhere.
4881 check_stripflags -wN \'..@*\' || check_stripflags -x || strip='true'
4883 enabled neon_clobber_test &&
4884 check_ldflags -Wl,--wrap,avcodec_open2 \
4885 -Wl,--wrap,avcodec_decode_audio4 \
4886 -Wl,--wrap,avcodec_decode_video2 \
4887 -Wl,--wrap,avcodec_decode_subtitle2 \
4888 -Wl,--wrap,avcodec_encode_audio2 \
4889 -Wl,--wrap,avcodec_encode_video2 \
4890 -Wl,--wrap,avcodec_encode_subtitle \
4891 -Wl,--wrap,avcodec_send_packet \
4892 -Wl,--wrap,avcodec_receive_packet \
4893 -Wl,--wrap,avcodec_send_frame \
4894 -Wl,--wrap,avcodec_receive_frame \
4895 -Wl,--wrap,avresample_convert ||
4896 disable neon_clobber_test
4898 enabled xmm_clobber_test &&
4899 check_ldflags -Wl,--wrap,avcodec_open2 \
4900 -Wl,--wrap,avcodec_decode_audio4 \
4901 -Wl,--wrap,avcodec_decode_video2 \
4902 -Wl,--wrap,avcodec_decode_subtitle2 \
4903 -Wl,--wrap,avcodec_encode_audio2 \
4904 -Wl,--wrap,avcodec_encode_video2 \
4905 -Wl,--wrap,avcodec_encode_subtitle \
4906 -Wl,--wrap,avcodec_send_packet \
4907 -Wl,--wrap,avcodec_receive_packet \
4908 -Wl,--wrap,avcodec_send_frame \
4909 -Wl,--wrap,avcodec_receive_frame \
4910 -Wl,--wrap,avresample_convert \
4911 -Wl,--wrap,sws_scale ||
4912 disable xmm_clobber_test
4914 check_ld <<EOF && enable proper_dce
4915 extern const int array[512];
4916 static inline int func(void) { return array[0]; }
4917 int main(void) { return 0; }
4920 if enabled proper_dce; then
4921 echo "X { local: *; };" > $TMPV
4922 if test_ldflags -Wl,${version_script},$TMPV; then
4923 append SHFLAGS '-Wl,${version_script},\$(SUBDIR)lib\$(NAME).ver'
4924 check_cc <<EOF && enable symver_asm_label
4925 void ff_foo(void) __asm__ ("av_foo@VERSION");
4926 void ff_foo(void) { ${inline_asm+__asm__($quotes);} }
4928 check_cc <<EOF && enable symver_gnu_asm
4929 __asm__(".symver ff_foo,av_foo@VERSION");
4930 void ff_foo(void) {}
4935 if [ -z "$optflags" ]; then
4936 if enabled small; then
4937 optflags=$cflags_size
4938 elif enabled optimizations; then
4939 optflags=$cflags_speed
4941 optflags=$cflags_noopt
4947 enabled lto && check_ldflags "$@"
4950 check_optflags $optflags
4951 check_optflags -fno-math-errno
4952 check_optflags -fno-signed-zeros
4954 if enabled lto; then
4955 test "$cc_type" != "$ld_type" && die "LTO requires same compiler and linker"
4957 check_ldflags -flto $cpuflags
4960 if enabled icc; then
4961 # Just warnings, no remarks
4963 # -wd: Disable following warnings
4964 # 144, 167, 556: -Wno-pointer-sign
4965 # 1292: attribute "foo" ignored
4966 # 1419: external declaration in primary source file
4967 # 10006: ignoring unknown option -fno-signed-zeros
4968 # 10148: ignoring unknown option -Wno-parentheses
4969 # 10156: ignoring option '-W'; no argument required
4970 check_cflags -wd144,167,556,1292,1419,10006,10148,10156
4971 # 11030: Warning unknown option --as-needed
4972 # 10156: ignoring option '-export'; no argument required
4973 check_ldflags -wd10156,11030
4974 # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
4975 enable ebp_available
4976 if enabled x86_32; then
4977 icc_version=$($cc -dumpversion)
4978 test ${icc_version%%.*} -ge 11 &&
4979 check_cflags -falign-stack=maintain-16-byte ||
4980 disable aligned_stack
4982 elif enabled ccc; then
4983 # disable some annoying warnings
4984 add_cflags -msg_disable bitnotint
4985 add_cflags -msg_disable mixfuncvoid
4986 add_cflags -msg_disable nonstandcast
4987 add_cflags -msg_disable unsupieee
4988 elif enabled gcc; then
4989 check_optflags -fno-tree-vectorize
4990 check_cflags -Werror=implicit-function-declaration
4991 check_cflags -Werror=missing-prototypes
4992 check_cflags -Werror=return-type
4993 check_cflags -Werror=declaration-after-statement
4994 check_cflags -Werror=vla
4995 check_cflags -Werror=format-security
4996 check_cflags -fdiagnostics-color=auto
4997 enabled extra_warnings || check_disable_warning -Wno-maybe-uninitialized
4998 elif enabled llvm_gcc; then
4999 check_cflags -mllvm -stack-alignment=16
5000 elif enabled clang; then
5001 check_cflags -mllvm -stack-alignment=16
5002 check_cflags -Qunused-arguments
5003 check_cflags -Werror=implicit-function-declaration
5004 check_cflags -Werror=missing-prototypes
5005 check_cflags -Werror=return-type
5006 elif enabled cparser; then
5007 add_cflags -Wno-missing-variable-declarations
5008 add_cflags -Wno-empty-statement
5009 elif enabled armcc; then
5010 add_cflags -W${armcc_opt},--diag_suppress=4343 # hardfp compat
5011 add_cflags -W${armcc_opt},--diag_suppress=3036 # using . as system include dir
5012 # 2523: use of inline assembly is deprecated
5013 add_cflags -W${armcc_opt},--diag_suppress=2523
5014 add_cflags -W${armcc_opt},--diag_suppress=1207
5015 add_cflags -W${armcc_opt},--diag_suppress=1293 # assignment in condition
5016 add_cflags -W${armcc_opt},--diag_suppress=3343 # hardfp compat
5017 add_cflags -W${armcc_opt},--diag_suppress=167 # pointer sign
5018 add_cflags -W${armcc_opt},--diag_suppress=513 # pointer sign
5019 elif enabled tms470; then
5020 add_cflags -pds=824 -pds=837
5022 elif enabled pathscale; then
5023 add_cflags -fstrict-overflow -OPT:wrap_around_unsafe_opt=OFF
5024 elif enabled_any msvc icl; then
5025 enabled x86_32 && disable aligned_stack
5026 enabled_all x86_32 debug && add_cflags -Oy-
5027 enabled debug && add_ldflags -debug
5028 enable pragma_deprecated
5029 if enabled icl; then
5030 # -Qansi-alias is basically -fstrict-aliasing, but does not work
5031 # (correctly) on icl 13.x.
5032 check_cpp_condition "windows.h" "__ICL < 1300 || __ICL >= 1400" &&
5033 add_cflags -Qansi-alias
5034 # icl will pass the inline asm tests but inline asm is currently
5035 # not supported (build will fail)
5038 # msvcrt10 x64 incorrectly enables log2, only msvcrt12 (MSVC 2013) onwards actually has log2.
5039 check_cpp_condition crtversion.h "_VC_CRT_MAJOR_VERSION >= 12" || disable log2
5040 # The CRT headers contain __declspec(restrict) in a few places, but if redefining
5041 # restrict, this might break. MSVC 2010 and 2012 fail with __declspec(__restrict)
5042 # (as it ends up if the restrict redefine is done before including stdlib.h), while
5043 # MSVC 2013 and newer can handle it fine.
5044 # If this declspec fails, force including stdlib.h before the restrict redefinition
5045 # happens in config.h.
5046 if [ $_restrict != restrict ]; then
5047 check_cc <<EOF || add_cflags -FIstdlib.h
5048 __declspec($_restrict) void* foo(int);
5053 for pfx in "" host_; do
5054 varname=${pfx%_}cc_type
5055 eval "type=\$$varname"
5056 if [ "$type" = "msvc" ]; then
5057 check_${pfx}cc <<EOF || add_${pfx}cflags -Dinline=__inline
5058 static inline int foo(int a) { return a; }
5065 add_asflags -Qunused-arguments
5071 check_ldflags -Qunused-arguments
5077 enabled ccc && add_ldflags '-Wl,-expect_unresolved,*'
5081 enabled asm || { arch=c; disable $ARCH_LIST $ARCH_EXT_LIST; }
5083 check_deps $CONFIG_LIST \
5088 map 'enabled $v && intrinsics=${v#intrinsics_}' $INTRINSICS_LIST
5090 for thread in $THREADS_LIST; do
5091 if enabled $thread; then
5092 test -n "$thread_type" &&
5093 die "ERROR: Only one thread type must be selected." ||
5094 thread_type="$thread"
5098 if disabled stdatomic_h; then
5099 if enabled atomics_gcc; then
5100 add_cppflags '-I\$(SRC_PATH)/compat/atomics/gcc'
5101 elif enabled atomics_win32; then
5102 add_cppflags '-I\$(SRC_PATH)/compat/atomics/win32'
5103 elif enabled atomics_suncc; then
5104 add_cppflags '-I\$(SRC_PATH)/compat/atomics/suncc'
5105 elif enabled pthreads; then
5106 add_compat atomics/pthread/stdatomic.o
5107 add_cppflags '-I\$(SRC_PATH)/compat/atomics/pthread'
5109 enabled threads && die "Threading is enabled, but no atomics are available"
5110 add_cppflags '-I\$(SRC_PATH)/compat/atomics/dummy'
5114 enabled zlib && add_cppflags -DZLIB_CONST
5116 # conditional library dependencies, in linking order
5117 enabled movie_filter && prepend avfilter_deps "avformat avcodec"
5118 enabled_any asyncts_filter resample_filter &&
5119 prepend avfilter_deps "avresample"
5120 enabled scale_filter && prepend avfilter_deps "swscale"
5122 enabled opus_decoder && prepend avcodec_deps "avresample"
5126 eval "deps=\$$lib_deps"
5127 append $lib_deps $(map 'eval echo \$${v}_deps' $deps)
5131 map 'expand_deps $v' $LIBRARY_LIST
5133 if test "$quiet" != "yes"; then
5135 echo "install prefix $prefix"
5136 echo "source path $source_path"
5137 echo "C compiler $cc"
5138 echo "C library $libc_type"
5139 if test "$host_cc" != "$cc"; then
5140 echo "host C compiler $host_cc"
5141 echo "host C library $host_libc_type"
5143 echo "ARCH $arch ($cpu)"
5144 if test "$extra_version" != ""; then
5145 echo "version string suffix $extra_version"
5147 echo "big-endian ${bigendian-no}"
5148 echo "runtime cpu detection ${runtime_cpudetect-no}"
5149 if enabled x86; then
5150 echo "${yasmexe} ${yasm-no}"
5151 echo "MMX enabled ${mmx-no}"
5152 echo "MMXEXT enabled ${mmxext-no}"
5153 echo "3DNow! enabled ${amd3dnow-no}"
5154 echo "3DNow! extended enabled ${amd3dnowext-no}"
5155 echo "SSE enabled ${sse-no}"
5156 echo "SSSE3 enabled ${ssse3-no}"
5157 echo "AVX enabled ${avx-no}"
5158 echo "XOP enabled ${xop-no}"
5159 echo "FMA3 enabled ${fma3-no}"
5160 echo "FMA4 enabled ${fma4-no}"
5161 echo "i686 features enabled ${i686-no}"
5162 echo "CMOV is fast ${fast_cmov-no}"
5163 echo "EBX available ${ebx_available-no}"
5164 echo "EBP available ${ebp_available-no}"
5166 if enabled aarch64; then
5167 echo "NEON enabled ${neon-no}"
5168 echo "VFP enabled ${vfp-no}"
5170 if enabled arm; then
5171 echo "ARMv5TE enabled ${armv5te-no}"
5172 echo "ARMv6 enabled ${armv6-no}"
5173 echo "ARMv6T2 enabled ${armv6t2-no}"
5174 echo "VFP enabled ${vfp-no}"
5175 echo "NEON enabled ${neon-no}"
5177 if enabled ppc; then
5178 echo "AltiVec enabled ${altivec-no}"
5179 echo "VSX enabled ${vsx-no}"
5180 echo "POWER8 enabled ${power8-no}"
5181 echo "PPC 4xx optimizations ${ppc4xx-no}"
5182 echo "dcbzl available ${dcbzl-no}"
5184 echo "debug symbols ${debug-no}"
5185 echo "optimize for size ${small-no}"
5186 echo "optimizations ${optimizations-no}"
5187 echo "static ${static-no}"
5188 echo "shared ${shared-no}"
5189 echo "network support ${network-no}"
5190 echo "threading support ${thread_type-no}"
5191 echo "safe bitstream reader ${safe_bitstream_reader-no}"
5192 test -n "$random_seed" &&
5193 echo "random seed ${random_seed}"
5196 echo "External libraries:"
5197 print_enabled '' $EXTERNAL_LIBRARY_LIST | print_3_columns
5199 echo "External libraries providing hardware acceleration:"
5200 print_enabled '' $HWACCEL_LIBRARY_LIST | print_3_columns
5204 print_enabled '' $LIBRARY_LIST | print_3_columns
5208 print_enabled '' $PROGRAM_LIST | print_3_columns
5211 for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
5212 echo "Enabled ${type}s:"
5213 eval list=\$$(toupper $type)_LIST
5214 print_enabled '_*' $list | print_3_columns
5218 if test -n "$ignore_tests"; then
5219 ignore_tests=$(echo $ignore_tests | tr ',' ' ')
5220 echo "Ignored FATE tests:"
5221 echo $ignore_tests | print_3_columns
5225 license="LGPL version 2.1 or later"
5226 if enabled nonfree; then
5227 license="nonfree and unredistributable"
5228 elif enabled gplv3; then
5229 license="GPL version 3 or later"
5230 elif enabled lgplv3; then
5231 license="LGPL version 3 or later"
5232 elif enabled gpl; then
5233 license="GPL version 2 or later"
5236 echo "License: $license"
5238 echo "Creating configuration files ..."
5240 fi # test "$quiet" != "yes"
5242 test -e Makefile || echo "include $source_path/Makefile" > Makefile
5244 config_files="$TMPH avbuild/config.mak"
5246 cat > avbuild/config.mak <<EOF
5247 # Automatically generated by configure - do not modify!
5248 LIBAV_CONFIGURATION=$LIBAV_CONFIGURATION
5250 LIBDIR=\$(DESTDIR)$libdir
5251 SHLIBDIR=\$(DESTDIR)$shlibdir
5252 INCDIR=\$(DESTDIR)$incdir
5253 BINDIR=\$(DESTDIR)$bindir
5254 DATADIR=\$(DESTDIR)$datadir
5255 DOCDIR=\$(DESTDIR)$docdir
5256 MANDIR=\$(DESTDIR)$mandir
5257 SRC_PATH=$source_path
5260 INTRINSICS=$intrinsics
5267 DEPCCFLAGS=$DEPCCFLAGS \$(CPPFLAGS)
5269 DEPASFLAGS=$DEPASFLAGS \$(CPPFLAGS)
5280 OBJCFLAGS=$OBJCFLAGS
5295 LDEXEFLAGS=$LDEXEFLAGS
5296 SHFLAGS=$(echo $($ldflags_filter $SHFLAGS))
5297 STRIPFLAGS=$STRIPFLAGS
5298 YASMFLAGS=$YASMFLAGS
5305 EXTRA_VERSION=$extra_version
5307 CCDEP_FLAGS=$CCDEP_FLAGS
5309 ASDEP_FLAGS=$ASDEP_FLAGS
5310 CC_DEPFLAGS=$CC_DEPFLAGS
5311 AS_DEPFLAGS=$AS_DEPFLAGS
5314 HOSTCFLAGS=$host_cflags
5315 HOSTCPPFLAGS=$host_cppflags
5316 HOSTEXESUF=$HOSTEXESUF
5317 HOSTLDFLAGS=$host_ldflags
5318 HOSTEXTRALIBS=$host_extralibs
5320 DEPHOSTCCFLAGS=$DEPHOSTCCFLAGS \$(HOSTCCFLAGS)
5321 HOSTCCDEP=$HOSTCCDEP
5322 HOSTCCDEP_FLAGS=$HOSTCCDEP_FLAGS
5323 HOSTCC_DEPFLAGS=$HOSTCC_DEPFLAGS
5327 TARGET_EXEC=$target_exec $target_exec_args
5328 TARGET_PATH=$target_path
5329 TARGET_SAMPLES=${target_samples:-\$(SAMPLES)}
5330 CFLAGS-avplay=$sdl_cflags
5331 CFLAGS_HEADERS=$CFLAGS_HEADERS
5332 ZLIB=$($ldflags_filter -lz)
5333 LIB_INSTALL_EXTRA_CMD=$LIB_INSTALL_EXTRA_CMD
5334 EXTRALIBS=$extralibs
5335 COMPAT_OBJS=$compat_objs
5337 LIBTARGET=${LIBTARGET}
5338 SLIBNAME=${SLIBNAME}
5339 SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}
5340 SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}
5341 SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}
5342 SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}
5343 SLIB_INSTALL_NAME=${SLIB_INSTALL_NAME}
5344 SLIB_INSTALL_LINKS=${SLIB_INSTALL_LINKS}
5345 SLIB_INSTALL_EXTRA_LIB=${SLIB_INSTALL_EXTRA_LIB}
5346 SLIB_INSTALL_EXTRA_SHLIB=${SLIB_INSTALL_EXTRA_SHLIB}
5347 VERSION_SCRIPT_POSTPROCESS_CMD=${VERSION_SCRIPT_POSTPROCESS_CMD}
5348 SAMPLES:=${samples:-\$(LIBAV_SAMPLES)}
5349 IGNORE_TESTS=$ignore_tests
5352 map 'eval echo "${v}_FFLIBS=\$${v}_deps" >> avbuild/config.mak' $LIBRARY_LIST
5354 print_program_extralibs(){
5355 eval "program_extralibs=\$${1}_extralibs"
5356 eval echo "EXTRALIBS-${1}=${program_extralibs}" >> avbuild/config.mak
5359 map 'print_program_extralibs $v' $PROGRAM_LIST
5362 /* Automatically generated by configure - do not modify! */
5363 #ifndef LIBAV_CONFIG_H
5364 #define LIBAV_CONFIG_H
5365 #define LIBAV_CONFIGURATION "$(c_escape $LIBAV_CONFIGURATION)"
5366 #define LIBAV_LICENSE "$(c_escape $license)"
5367 #define AVCONV_DATADIR "$(eval c_escape $datadir)"
5368 #define CC_IDENT "$(c_escape ${cc_ident:-Unknown compiler})"
5369 #define restrict $_restrict
5370 #define EXTERN_PREFIX "${extern_prefix}"
5371 #define EXTERN_ASM ${extern_prefix}
5372 #define SLIBSUF "$SLIBSUF"
5375 test -n "$malloc_prefix" &&
5376 echo "#define MALLOC_PREFIX $malloc_prefix" >>$TMPH
5378 if enabled yasm; then
5379 append config_files $TMPASM
5383 enabled getenv || echo "#define getenv(x) NULL" >> $TMPH
5385 print_config ARCH_ "$config_files" $ARCH_LIST
5386 print_config HAVE_ "$config_files" $HAVE_LIST
5387 print_config CONFIG_ "$config_files" $CONFIG_LIST \
5391 echo "#endif /* LIBAV_CONFIG_H */" >> $TMPH
5393 # Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
5394 cp_if_changed $TMPH config.h
5395 touch avbuild/.config
5397 enabled yasm && cp_if_changed $TMPASM config.asm
5400 /* Generated by ffconf */
5401 #ifndef AVUTIL_AVCONFIG_H
5402 #define AVUTIL_AVCONFIG_H
5405 print_config AV_HAVE_ $TMPH $HAVE_LIST_PUB
5407 echo "#endif /* AVUTIL_AVCONFIG_H */" >> $TMPH
5409 cp_if_changed $TMPH libavutil/avconfig.h
5411 # generate the lists of enabled components
5412 print_enabled_components(){
5417 echo "static const $struct_name * const $name[] = {" > $TMPH
5419 enabled $c && printf " &ff_%s,\n" $c >> $TMPH
5421 echo " NULL };" >> $TMPH
5422 cp_if_changed $TMPH $file
5425 print_enabled_components libavcodec/bsf_list.c AVBitStreamFilter bitstream_filters $BSF_LIST
5426 print_enabled_components libavformat/protocol_list.c URLProtocol url_protocols $PROTOCOL_LIST
5428 test -n "$WARNINGS" && printf "\n$WARNINGS"
5430 # Settings for pkg-config files
5432 cat > avbuild/config.sh <<EOF
5433 # Automatically generated by configure - do not modify!
5438 source_path=${source_path}
5441 extralibs_avutil="$LIBRT $LIBM"
5442 extralibs_avcodec="$extralibs"
5443 extralibs_avformat="$extralibs"
5444 extralibs_avdevice="$extralibs"
5445 extralibs_avfilter="$extralibs"
5446 extralibs_avresample="$LIBM"
5447 extralibs_swscale="$LIBM"
5450 for lib in $LIBRARY_LIST; do
5451 lib_deps="$(eval echo \$${lib}_deps)"
5452 echo ${lib}_deps=\"$lib_deps\" >> avbuild/config.sh