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 --list-decoders show all available decoders
67 --list-encoders show all available encoders
68 --list-hwaccels show all available hardware accelerators
69 --list-demuxers show all available demuxers
70 --list-muxers show all available muxers
71 --list-parsers show all available parsers
72 --list-protocols show all available protocols
73 --list-bsfs show all available bitstream filters
74 --list-indevs show all available input devices
75 --list-outdevs show all available output devices
76 --list-filters show all available filters
79 --logfile=FILE log tests and output to FILE [config.log]
80 --disable-logging do not log configure debug information
81 --prefix=PREFIX install in PREFIX [$prefix]
82 --bindir=DIR install binaries in DIR [PREFIX/bin]
83 --datadir=DIR install data files in DIR [PREFIX/share/avconv]
84 --docdir=DIR install documentation in DIR [PREFIX/share/doc/libav]
85 --libdir=DIR install libs in DIR [PREFIX/lib]
86 --shlibdir=DIR install shared libs in DIR [PREFIX/lib]
87 --incdir=DIR install includes in DIR [PREFIX/include]
88 --mandir=DIR install man page in DIR [PREFIX/share/man]
89 --enable-rpath use rpath when linking programs [USE WITH CARE]
92 --enable-gpl allow use of GPL code, the resulting libs
93 and binaries will be under GPL [no]
94 --enable-version3 upgrade (L)GPL to version 3 [no]
95 --enable-nonfree allow use of nonfree code, the resulting libs
96 and binaries will be unredistributable [no]
98 Configuration options:
99 --disable-static do not build static libraries [no]
100 --enable-shared build shared libraries [no]
101 --enable-small optimize for size instead of speed
102 --enable-runtime-cpudetect detect cpu capabilities at runtime (bigger binary)
103 --enable-gray enable full grayscale support (slower color)
104 --disable-swscale-alpha disable alpha channel support in swscale
105 --disable-all disable building components, libraries and programs
108 --disable-programs do not build command line programs
109 --disable-avconv disable avconv build
110 --disable-avplay disable avplay build
111 --disable-avprobe disable avprobe build
112 --disable-avserver deprecated, does nothing
115 --disable-doc do not build documentation
116 --disable-avdevice disable libavdevice build
117 --disable-avcodec disable libavcodec build
118 --disable-avformat disable libavformat build
119 --disable-avutil disable libavutil build
120 --disable-swscale disable libswscale build
121 --disable-avfilter disable video filter support [no]
122 --disable-avresample disable libavresample build [no]
123 --disable-pthreads disable pthreads [auto]
124 --disable-w32threads disable Win32 threads [auto]
125 --disable-network disable network support [no]
126 --disable-dct disable DCT code
127 --disable-error-resilience disable error resilience code
128 --disable-lsp disable LSP code
129 --disable-lzo disable LZO decoder code
130 --disable-mdct disable MDCT code
131 --disable-rdft disable RDFT code
132 --disable-fft disable FFT code
133 --disable-faan disable floating point AAN (I)DCT code
135 Individual component options:
136 --disable-everything disable all components listed below
137 --disable-encoder=NAME disable encoder NAME
138 --enable-encoder=NAME enable encoder NAME
139 --disable-encoders disable all encoders
140 --disable-decoder=NAME disable decoder NAME
141 --enable-decoder=NAME enable decoder NAME
142 --disable-decoders disable all decoders
143 --disable-hwaccel=NAME disable hwaccel NAME
144 --enable-hwaccel=NAME enable hwaccel NAME
145 --disable-hwaccels disable all hwaccels
146 --disable-muxer=NAME disable muxer NAME
147 --enable-muxer=NAME enable muxer NAME
148 --disable-muxers disable all muxers
149 --disable-demuxer=NAME disable demuxer NAME
150 --enable-demuxer=NAME enable demuxer NAME
151 --disable-demuxers disable all demuxers
152 --enable-parser=NAME enable parser NAME
153 --disable-parser=NAME disable parser NAME
154 --disable-parsers disable all parsers
155 --enable-bsf=NAME enable bitstream filter NAME
156 --disable-bsf=NAME disable bitstream filter NAME
157 --disable-bsfs disable all bitstream filters
158 --enable-protocol=NAME enable protocol NAME
159 --disable-protocol=NAME disable protocol NAME
160 --disable-protocols disable all protocols
161 --enable-indev=NAME enable input device NAME
162 --disable-indev=NAME disable input device NAME
163 --disable-indevs disable input devices
164 --enable-outdev=NAME enable output device NAME
165 --disable-outdev=NAME disable output device NAME
166 --disable-outdevs disable output devices
167 --disable-devices disable all devices
168 --enable-filter=NAME enable filter NAME
169 --disable-filter=NAME disable filter NAME
170 --disable-filters disable all filters
172 External library support:
174 Using any of the following switches will allow Libav to link to the
175 corresponding external library. All the components depending on that library
176 will become enabled, if all their other dependencies are met and they are not
177 explicitly disabled. E.g. --enable-libwavpack will enable linking to
178 libwavpack and allow the libwavpack encoder to be built, unless it is
179 specifically disabled with --disable-encoder=libwavpack.
181 Note that only the system libraries are auto-detected. All the other external
182 libraries must be explicitly enabled.
184 Also note that the following help text describes the purpose of the libraries
185 themselves, not all their features will necessarily be usable by Libav.
187 --enable-avisynth video frameserver
188 --enable-bzlib bzip2 compression [autodetect]
189 --enable-frei0r video filtering plugins
190 --enable-gnutls crypto
191 --enable-libbs2b Bauer stereophonic-to-binaural DSP
192 --enable-libcdio audio CD input
193 --enable-libdc1394 IEEE 1394/Firewire camera input
194 --enable-libdcadec DCA audio decoding
195 --enable-libfaac AAC audio encoding
196 --enable-libfdk-aac AAC audio encoding/decoding
197 --enable-libfontconfig font configuration and management
198 --enable-libfreetype font rendering
199 --enable-libgsm GSM audio encoding/decoding
200 --enable-libhdcd HDCD decoding filter
201 --enable-libilbc ILBC audio encoding/decoding
202 --enable-libkvazaar HEVC video encoding
203 --enable-libmp3lame MP3 audio encoding
204 --enable-libopencore-amrnb AMR-NB audio encoding/decoding
205 --enable-libopencore-amrwb AMR-WB audio decoding
206 --enable-libopencv computer vision
207 --enable-libopenh264 H.264 video encoding/decoding
208 --enable-libopenjpeg JPEG 2000 image encoding/decoding
209 --enable-libopus Opus audio encoding/decoding
210 --enable-libpulse Pulseaudio sound server
211 --enable-librtmp RTMP streaming
212 --enable-libschroedinger Dirac video encoding/decoding
213 --enable-libsnappy snappy compression
214 --enable-libspeex Speex audio encoding/decoding
215 --enable-libtheora Theora video encoding/decoding
216 --enable-libtwolame MP2 audio encoding
217 --enable-libvo-aacenc AAC audio encoding
218 --enable-libvo-amrwbenc AMR-WB audio encoding
219 --enable-libvorbis Vorbis audio encoding/decoding
220 --enable-libvpx VP* video encoding/decoding
221 --enable-libwavpack Wavpack audio encoding/decoding
222 --enable-libwebp WebP image encoding/decoding
223 --enable-libx264 H.264 video encoding
224 --enable-libx265 HEVC video encoding
225 --enable-libxavs Chinese AVS video encoding
226 --enable-libxcb X window system protocol communication
227 --enable-libxcb-shm X11 shm communication [auto]
228 --enable-libxcb-xfixes X11 mouse rendering [auto]
229 --enable-libxvid MPEG-4 ASP video encoding
230 --enable-openssl crypto
231 --enable-zlib compression [autodetect]
233 The following libraries provide various hardware acceleration features:
234 --enable-cuda Nvidia CUDA (dynamically linked)
235 --enable-d3d11va Microsoft Direct3D 11 video acceleration [auto]
236 --enable-dxva2 Microsoft DirectX 9 video acceleration [auto]
237 --enable-libmfx Intel MediaSDK (AKA Quick Sync Video)
238 --enable-libnpp Nvidia CUDA processing
239 --enable-mmal Broadcom Multi-Media Abstraction Layer (Raspberry Pi)
240 --enable-nvenc Nvidia video encoding
241 --enable-omx OpenMAX IL
242 --enable-omx-rpi OpenMAX IL for Raspberry Pi
243 --enable-vaapi Video Acceleration API (mainly Unix/Intel)
244 --enable-vda Apple Video Decode Acceleration [auto]
245 --enable-vdpau Nvidia Video Decode and Presentation API for Unix [auto]
248 --arch=ARCH select architecture [$arch]
249 --cpu=CPU select the minimum required CPU (affects
250 instruction selection, may crash on older CPUs)
251 --cross-prefix=PREFIX use PREFIX for compilation tools [$cross_prefix]
252 --enable-cross-compile assume a cross-compiler is used
253 --sysroot=PATH root of cross-build tree
254 --sysinclude=PATH location of cross-build system headers
255 --target-os=OS compiler targets OS [$target_os]
256 --target-exec=CMD command to run executables on target
257 --target-path=DIR path to view of build directory on target
258 --target-samples=DIR path to samples directory on target
259 --toolchain=NAME set tool defaults according to NAME
261 --ar=AR use archive tool AR [$ar_default]
262 --as=AS use assembler AS [$as_default]
263 --cc=CC use C compiler CC [$cc_default]
264 --objcc=OCC use ObjC compiler OCC [$cc_default]
265 --dep-cc=DEPCC use dependency generator DEPCC [$cc_default]
266 --ld=LD use linker LD
267 --pkg-config=PKGCONFIG use pkg-config tool PKGCONFIG [$pkg_config_default]
268 --pkg-config-flags=FLAGS pass additional flags to pkgconf []
269 --host-cc=HOSTCC use host C compiler HOSTCC
270 --host-cflags=HCFLAGS use HCFLAGS when compiling for host
271 --host-cppflags=HCPPFLAGS use HCPPFLAGS when compiling for host
272 --host-ld=HOSTLD use host linker HOSTLD
273 --host-ldflags=HLDFLAGS use HLDFLAGS when linking for host
274 --host-libs=HLIBS use libs HLIBS when linking for host
275 --host-os=OS compiler host OS [$target_os]
276 --extra-cflags=ECFLAGS add ECFLAGS to CFLAGS [$CFLAGS]
277 --extra-objcflags=FLAGS add FLAGS to OBJCFLAGS [$CFLAGS]
278 --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]
279 --extra-ldexeflags=ELDFLAGS add ELDFLAGS to LDEXEFLAGS [$LDEXEFLAGS]
280 --extra-libs=ELIBS add ELIBS [$ELIBS]
281 --extra-version=STRING version string suffix []
282 --optflags=OPTFLAGS override optimization-related compiler flags
283 --build-suffix=SUFFIX library name suffix []
284 --enable-pic build position-independent code
285 --enable-thumb compile for Thumb instruction set
286 --enable-lto use link-time optimization
287 --env="ENV=override" override the environment variables
289 Advanced options (experts only):
290 --malloc-prefix=PREFIX prefix malloc and related names with PREFIX
291 --custom-allocator=NAME use a supported custom allocator
292 --disable-symver disable symbol versioning
293 --enable-hardcoded-tables use hardcoded tables instead of runtime generation
294 --disable-safe-bitstream-reader
295 disable buffer boundary checking in bitreaders
296 (faster, but may crash)
297 --enable-memalign-hack emulate memalign, interferes with memory debuggers
298 --enable-sram allow use of on-chip SRAM
300 Optimization options (experts only):
301 --disable-asm disable all assembly optimizations
302 --disable-altivec disable AltiVec optimizations
303 --disable-vsx disable VSX optimizations
304 --disable-power8 disable POWER8 optimizations
305 --disable-amd3dnow disable 3DNow! optimizations
306 --disable-amd3dnowext disable 3DNow! extended optimizations
307 --disable-mmx disable MMX optimizations
308 --disable-mmxext disable MMXEXT optimizations
309 --disable-sse disable SSE optimizations
310 --disable-sse2 disable SSE2 optimizations
311 --disable-sse3 disable SSE3 optimizations
312 --disable-ssse3 disable SSSE3 optimizations
313 --disable-sse4 disable SSE4 optimizations
314 --disable-sse42 disable SSE4.2 optimizations
315 --disable-avx disable AVX optimizations
316 --disable-xop disable XOP optimizations
317 --disable-fma3 disable FMA3 optimizations
318 --disable-fma4 disable FMA4 optimizations
319 --disable-avx2 disable AVX2 optimizations
320 --disable-armv5te disable armv5te optimizations
321 --disable-armv6 disable armv6 optimizations
322 --disable-armv6t2 disable armv6t2 optimizations
323 --disable-vfp disable VFP optimizations
324 --disable-neon disable NEON optimizations
325 --disable-inline-asm disable use of inline assembly
326 --disable-yasm disable use of nasm/yasm assembly
328 Developer options (useful when working on Libav itself):
329 --disable-debug disable debugging symbols
330 --enable-debug=LEVEL set the debug level [$debuglevel]
331 --disable-optimizations disable compiler optimizations
332 --enable-extra-warnings enable more compiler warnings
333 --samples=PATH location of test samples for FATE, if not set use
334 \$LIBAV_SAMPLES at make invocation time.
335 --enable-neon-clobber-test check NEON registers for clobbering (should be
336 used only for debugging purposes)
337 --enable-xmm-clobber-test check XMM registers for clobbering (Win64-only;
338 should be used only for debugging purposes)
339 --enable-random randomly enable/disable components
341 --enable-random=LIST randomly enable/disable specific components or
342 --disable-random=LIST component groups. LIST is a comma-separated list
343 of NAME[:PROB] entries where NAME is a component
344 (group) and PROB the probability associated with
346 --random-seed=VALUE seed value for --enable/disable-random
347 --disable-valgrind-backtrace do not print a backtrace under Valgrind
348 (only applies to --disable-optimizations builds)
350 NOTE: Object files are built at the place where configure is launched.
358 echo "$@" >> $logfile
365 printf '%5s %s\n' "${i}" "${line}"
367 done < $1 >> $logfile
378 WARNINGS="${WARNINGS}WARNING: $*\n"
385 If you think configure made a mistake, make sure you are using the latest
386 version from Git. If the latest version fails, report the problem to the
387 libav-tools@libav.org mailing list or IRC #libav on irc.freenode.net.
389 if disabled logging; then
391 Rerun configure with logging enabled (do not use --disable-logging), and
392 include the log this produces with your report.
396 Include the log file "$logfile" produced by configure as this will help
403 # Avoid locale weirdness, besides we really just want to translate ASCII.
405 echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
409 echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
413 echo "$*" | sed 's/["\\]/\\\0/g'
417 v=$(echo "$1" | sed "s/'/'\\\\''/g")
418 test "x$v" = "x${v#*[!A-Za-z0-9_/.+-]}" || v="'$v'"
423 echo "$@" | sed 's/^ *//;s/ */ /g;s/ *$//'
430 eval "case $v in $pat) echo $v ;; esac"
438 eval "case $v in $pat) ;; *) echo $v ;; esac"
445 for v; do eval $m; done
451 for v; do echo ${v}${suffix}; done
466 eval : \${$var:=$value}
471 echo $@ | sed 's/[^A-Za-z0-9_]/_/g'
477 eval $(sanitize_var_name "$var")='$*'
481 eval echo \$$(sanitize_var_name "$1")
486 eval level=\${${pvar}_level:=0}
487 eval ${pvar}_${level}="\$$pvar"
488 eval ${pvar}_level=$(($level+1))
494 eval level=\${${pvar}_level:-0}
495 test $level = 0 && continue
496 eval level=$(($level-1))
497 eval $pvar="\${${pvar}_${level}}"
498 eval ${pvar}_level=$level
499 eval unset ${pvar}_${level}
521 enable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
527 disable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
533 enabled $var && continue
534 eval sel="\$${var}_select"
535 eval sgs="\$${var}_suggest"
539 enable_deep_weak $sgs
551 disabled $var && continue
560 test "${1#!}" = "$1" && op== || op=!=
561 eval test "x\$${1#!}" $op "xyes"
565 test "${1#!}" = "$1" && op== || op=!=
566 eval test "x\$${1#!}" $op "xno"
571 enabled $opt || return 1
577 disabled $opt || return 1
583 enabled $opt && return 0
589 disabled $opt && return 0
596 eval : \${$opt:=\$${opt}_default}
604 [ $var = $value ] && return 0
612 enabled ${cfg}_checking && die "Circular dependency for $cfg."
613 disabled ${cfg}_checking && continue
614 enable ${cfg}_checking
617 eval dep_all="\$${cfg}_deps"
618 eval dep_any="\$${cfg}_deps_any"
619 eval dep_sel="\$${cfg}_select"
620 eval dep_sgs="\$${cfg}_suggest"
621 eval dep_ifa="\$${cfg}_if"
622 eval dep_ifn="\$${cfg}_if_any"
624 pushvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
625 do_check_deps $dep_all $dep_any $dep_sel $dep_sgs $dep_ifa $dep_ifn
626 popvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
628 [ -n "$dep_ifa" ] && { enabled_all $dep_ifa && enable_weak $cfg; }
629 [ -n "$dep_ifn" ] && { enabled_any $dep_ifn && enable_weak $cfg; }
630 enabled_all $dep_all || disable $cfg
631 enabled_any $dep_any || disable $cfg
632 disabled_any $dep_sel && disable $cfg
634 if enabled $cfg; then
636 enable_deep_weak $dep_sgs
639 disable ${cfg}_checking
648 for cfg in $allopts; do
649 enabled $cfg || continue
650 eval dep_extralibs="\$${cfg}_extralibs"
651 test -n "$dep_extralibs" && add_extralibs $dep_extralibs
659 map 'eval echo "$v \${$v:-no}"' "$@" |
660 awk "BEGIN { split(\"$files\", files) }
662 c = \"$pfx\" toupper(\$1);
668 if (file ~ /\\.h\$/) {
669 printf(\"#define %s %d\\n\", c, v) >>file;
670 } else if (file ~ /\\.asm\$/) {
671 printf(\"%%define %s %d\\n\", c, v) >>file;
672 } else if (file ~ /\\.mak\$/) {
673 n = -v ? \"\" : \"!\";
674 printf(\"%s%s=yes\\n\", n, c) >>file;
684 enabled $v && printf "%s\n" ${v%$suf}
691 eval "$var=\"\$$var $*\""
697 eval "$var=\"$* \$$var\""
703 for tok in $(eval echo \$$var); do
704 uniq_list="$(filter_out $tok $uniq_list) $tok"
706 eval "$var=\"${uniq_list}\""
714 append CFLAGS $($cflags_filter "$@")
718 append ASFLAGS $($asflags_filter "$@")
722 append OBJCFLAGS $($objcflags_filter "$@")
726 append LDFLAGS $($ldflags_filter "$@")
730 append LDEXEFLAGS $($ldflags_filter "$@")
734 append STRIPFLAGS "$@"
738 prepend extralibs $($ldflags_filter "$@")
742 append host_cppflags "$@"
746 append host_cflags $($host_cflags_filter "$@")
750 append host_ldflags $($host_ldflags_filter "$@")
754 append compat_objs $1
756 map 'add_cppflags -D$v' "$@"
761 "$@" >> $logfile 2>&1
765 eval printf '%s\\n' $CC_O
769 eval printf '%s\\n' $CC_E
776 check_cmd $cc $CPPFLAGS $CFLAGS "$@" $CC_C $(cc_o $TMPO) $TMPC
783 check_cmd $objcc $CPPFLAGS $CFLAGS $OBJCFLAGS "$@" $OBJCC_C $(cc_o $TMPO) $TMPC
790 check_cmd $cc $CPPFLAGS $CFLAGS "$@" $(cc_e $TMPO) $TMPC
794 eval printf '%s\\n' $AS_O
801 check_cmd $as $CPPFLAGS $ASFLAGS "$@" $AS_C $(as_o $TMPO) $TMPS
805 log check_inline_asm "$@"
810 check_cc "$@" <<EOF && enable $name
811 void foo(void){ __asm__ volatile($code); }
817 check_inline_asm ${1}_inline "\"$2\""
818 echo "$2" | check_as && enable ${1}_external || disable ${1}_external
826 check_cmd $yasmexe $YASMFLAGS "$@" -o $TMPO $TMPS
830 eval printf '%s\\n' $LD_O
835 flags=$(filter_out '-l*' "$@")
836 libs=$(filter '-l*' "$@")
837 check_cc $($cflags_filter $flags) || return
838 flags=$($ldflags_filter $flags)
839 libs=$($ldflags_filter $libs)
840 check_cmd $ld $LDFLAGS $flags $(ld_o $TMPE) $TMPO $libs $extralibs
845 test "${hdr%.h}" = "${hdr}" &&
846 echo "#include $hdr" ||
847 echo "#include <$hdr>"
857 for hdr in $headers; do
860 echo "int main(void) { $code; return 0; }"
861 } | check_$check "$@"
865 log check_cppflags "$@"
866 check_cc "$@" <<EOF && append CPPFLAGS "$@"
873 set -- $($cflags_filter "$@")
880 log check_cflags "$@"
881 test_cflags "$@" && add_cflags "$@"
886 set -- $($cflags_filter "$@")
887 check_objcc "$@" <<EOF
893 log check_cflags "$@"
894 test_objcflags "$@" && add_objcflags "$@"
898 log test_ldflags "$@"
900 int main(void){ return 0; }
905 log check_ldflags "$@"
906 test_ldflags "$@" && add_ldflags "$@"
910 log test_stripflags "$@"
911 # call check_cc to get a fresh TMPO
913 int main(void) { return 0; }
915 check_cmd $strip $STRIPFLAGS "$@" $TMPO
919 log check_stripflags "$@"
920 test_stripflags "$@" && add_stripflags "$@"
924 log check_header "$@"
928 check_cpp "$@" <<EOF && enable_safe $header
939 check_ld "$@" <<EOF && enable $func
941 int main(void){ $func(); }
946 log check_mathfunc "$@"
950 test $narg = 2 && args="f, g" || args="f"
952 check_ld "$@" <<EOF && enable $func
954 float foo(float f, float g) { return $func($args); }
955 int main(void){ return 0; }
959 check_func_headers(){
960 log check_func_headers "$@"
965 for hdr in $headers; do
968 for func in $funcs; do
969 echo "long check_$func(void) { return (long) $func; }"
971 echo "int main(void) { return 0; }"
972 } | check_ld "$@" && enable $funcs && enable_safe $headers
975 check_cpp_condition(){
976 log check_cpp_condition "$@"
983 #error "unsatisfied condition: $condition"
993 check_header $header && check_func $func "$@" && add_extralibs "$@"
1001 check_func_headers "$headers" "$funcs" "$@" && add_extralibs "$@"
1005 log check_pkg_config "$@"
1010 check_cmd $pkg_config --exists --print-errors $pkg || return
1011 pkg_cflags=$($pkg_config --cflags $pkg_config_flags $pkg)
1012 pkg_libs=$($pkg_config --libs $pkg_config_flags $pkg)
1013 check_func_headers "$headers" "$funcs" $pkg_cflags $pkg_libs "$@" &&
1014 set_safe "${pkg}_cflags" $pkg_cflags &&
1015 set_safe "${pkg}_libs" $pkg_libs
1019 check_ld "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
1025 # exit() is not async signal safe. _Exit (C99) and _exit (POSIX)
1026 # are safe but may not be available everywhere. Thus we use
1027 # raise(SIGTERM) instead. The check is run in a subshell so we
1028 # can redirect the "Terminated" message from the shell. SIGBUS
1029 # is not defined by standard C so it is used conditionally.
1031 (check_exec "$@") >> $logfile 2>&1 <<EOF
1033 static void sighandler(int sig){
1039 int (*func_ptr)(void) = foo;
1041 signal(SIGILL, sighandler);
1042 signal(SIGFPE, sighandler);
1043 signal(SIGSEGV, sighandler);
1045 signal(SIGBUS, sighandler);
1057 disable_safe "$type"
1058 check_code cc "$headers" "$type v" "$@" && enable_safe "$type"
1062 log check_struct "$@"
1067 disable_safe "${struct}_${member}"
1068 check_code cc "$headers" "const void *p = &(($struct *)0)->$member" "$@" &&
1069 enable_safe "${struct}_${member}"
1073 log check_builtin "$@"
1079 check_code ld "$headers" "$builtin" "$@" && enable "$name"
1082 check_compile_assert(){
1083 log check_compile_assert "$@"
1089 check_code cc "$headers" "char c[2 * !!($condition) - 1]" "$@" && enable "$name"
1097 check_lib $header $func "$@" || die "ERROR: $name not found"
1105 check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
1108 require_pkg_config(){
1110 check_pkg_config "$@" || die "ERROR: $pkg not found"
1111 add_cflags $(get_safe "${pkg}_cflags")
1112 add_extralibs $(get_safe "${pkg}_libs")
1116 eval printf '%s\\n' $HOSTCC_E
1120 eval printf '%s\\n' $HOSTCC_O
1124 log check_host_cc "$@"
1127 check_cmd $host_cc $host_cflags "$@" $HOSTCC_C $(hostcc_o $TMPO) $TMPC
1131 log check_host_cpp "$@"
1134 check_cmd $host_cc $host_cppflags $host_cflags "$@" $(hostcc_e $TMPO) $TMPC
1137 check_host_cppflags(){
1138 log check_host_cppflags "$@"
1139 check_host_cc "$@" <<EOF && append host_cppflags "$@"
1144 check_host_cflags(){
1145 log check_host_cflags "$@"
1146 set -- $($host_cflags_filter "$@")
1147 check_host_cc "$@" <<EOF && append host_cflags "$@"
1152 check_host_cpp_condition(){
1153 log check_host_cpp_condition "$@"
1157 check_host_cpp "$@" <<EOF
1160 #error "unsatisfied condition: $condition"
1168 "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
1172 cmp -s "$1" "$2" && echo "$2 is unchanged" && return
1173 mkdir -p "$(dirname $2)"
1177 # CONFIG_LIST contains configurable options, while HAVE_LIST is for
1178 # system-dependent things.
1180 AVCODEC_COMPONENTS="
1188 AVDEVICE_COMPONENTS="
1192 AVFILTER_COMPONENTS="
1195 AVFORMAT_COMPONENTS="
1201 AVRESAMPLE_COMPONENTS=""
1202 AVUTIL_COMPONENTS=""
1206 $AVDEVICE_COMPONENTS
1207 $AVFILTER_COMPONENTS
1208 $AVFORMAT_COMPONENTS
1209 $AVRESAMPLE_COMPONENTS
1215 filter_audio_example
1219 transcode_aac_example
1222 HWACCEL_LIBRARY_NONFREE_LIST="
1226 HWACCEL_LIBRARY_LIST="
1227 $HWACCEL_LIBRARY_NONFREE_LIST
1239 EXTERNAL_LIBRARY_GPL_LIST="
1247 EXTERNAL_LIBRARY_NONFREE_LIST="
1253 EXTERNAL_LIBRARY_VERSION3_LIST="
1260 EXTERNAL_LIBRARY_LIST="
1261 $EXTERNAL_LIBRARY_GPL_LIST
1262 $EXTERNAL_LIBRARY_NONFREE_LIST
1263 $EXTERNAL_LIBRARY_VERSION3_LIST
1304 safe_bitstream_reader
1350 $EXTERNAL_LIBRARY_LIST
1351 $HWACCEL_LIBRARY_LIST
1415 ARCH_EXT_LIST_X86_SIMD="
1443 $ARCH_EXT_LIST_X86_SIMD
1448 ARCH_EXT_LIST_MIPS="
1486 sync_val_compare_and_swap
1500 AVFoundation_AVFoundation_h
1505 cdio_paranoia_paranoia_h
1507 dev_bktr_ioctl_bt848_h
1508 dev_bktr_ioctl_meteor_h
1510 dev_video_bktr_ioctl_bt848_h
1511 dev_video_meteor_ioctl_meteor_h
1519 machine_ioctl_bt848_h
1520 machine_ioctl_meteor_h
1584 GetProcessAffinityMask
1585 GetProcessMemoryInfo
1588 GetSystemTimeAsFileTime
1593 jack_port_get_latency_range
1605 SetConsoleTextAttribute
1616 TOOLCHAIN_FEATURES="
1638 CONDITION_VARIABLE_Ptr
1641 struct_group_source_req
1642 struct_ip_mreq_source
1645 struct_rusage_ru_maxrss
1647 struct_sockaddr_sa_len
1648 struct_sockaddr_storage
1649 struct_v4l2_frmivalenum_discrete
1654 $(add_suffix _external $ARCH_EXT_LIST)
1655 $(add_suffix _inline $ARCH_EXT_LIST)
1674 MMAL_PARAMETER_VIDEO_MAX_NUM_CALLBACKS
1684 # options emitted with CONFIG_ prefix but not available on the command line
1831 # code dependency declarations
1833 # architecture extensions
1838 armv8_deps="aarch64"
1839 neon_deps_any="aarch64 arm"
1840 intrinsics_neon_deps="neon"
1841 vfp_deps_any="aarch64 arm"
1844 map 'eval ${v}_inline_deps=inline_asm' $ARCH_EXT_LIST_ARM
1852 x86_64_select="i686"
1853 x86_64_suggest="fast_cmov"
1856 amd3dnowext_deps="amd3dnow"
1872 mmx_external_deps="yasm"
1873 mmx_inline_deps="inline_asm"
1874 mmx_suggest="mmx_external mmx_inline"
1876 for ext in $(filter_out mmx $ARCH_EXT_LIST_X86_SIMD); do
1877 eval dep=\$${ext}_deps
1878 eval ${ext}_external_deps='"${dep}_external"'
1879 eval ${ext}_inline_deps='"${dep}_inline"'
1880 eval ${ext}_suggest='"${ext}_external ${ext}_inline"'
1883 aligned_stack_if_any="aarch64 ppc x86"
1884 fast_64bit_if_any="aarch64 alpha ia64 mips64 parisc64 ppc64 sparc64 x86_64"
1885 fast_clz_if_any="aarch64 alpha avr32 mips ppc x86"
1886 fast_unaligned_if_any="aarch64 ppc x86"
1887 simd_align_if_any="simd_align_16 simd_align_32"
1888 simd_align_16_if_any="altivec neon sse"
1889 simd_align_32_if_any="avx"
1891 # system capabilities
1892 symver_if_any="symver_asm_label symver_gnu_asm"
1893 valgrind_backtrace_deps="!optimizations valgrind_valgrind_h"
1896 atomics_gcc_if="sync_val_compare_and_swap"
1897 atomics_suncc_if="atomic_cas_ptr machine_rw_barrier"
1898 atomics_win32_if="MemoryBarrier"
1899 atomics_native_if_any="$ATOMICS_LIST"
1900 w32threads_deps="atomics_native"
1901 threads_if_any="$THREADS_LIST"
1905 dirac_parse_select="golomb"
1906 error_resilience_select="me_cmp"
1907 faandct_deps="faan fdctdsp"
1908 faanidct_deps="faan idctdsp"
1909 h264dsp_select="startcode"
1910 intrax8_select="blockdsp idctdsp"
1913 me_cmp_select="fdctdsp idctdsp pixblockdsp"
1914 mpeg_er_select="error_resilience"
1915 mpegaudio_select="mpegaudiodsp"
1916 mpegaudiodsp_select="dct"
1917 mpegvideo_select="blockdsp hpeldsp idctdsp me_cmp mpeg_er videodsp"
1918 mpegvideoenc_select="me_cmp mpegvideo pixblockdsp qpeldsp"
1919 vc1dsp_select="h264chroma qpeldsp startcode"
1921 # decoders / encoders
1922 aac_decoder_select="imdct15 mdct sinewin"
1923 aac_encoder_select="audio_frame_queue iirfilter mdct sinewin"
1924 aac_latm_decoder_select="aac_decoder aac_latm_parser"
1925 ac3_decoder_select="ac3_parser ac3dsp bswapdsp fmtconvert mdct"
1926 ac3_encoder_select="ac3dsp audiodsp mdct me_cmp"
1927 ac3_fixed_encoder_select="ac3dsp audiodsp mdct me_cmp"
1928 adpcm_g722_decoder_select="g722dsp"
1929 adpcm_g722_encoder_select="g722dsp"
1930 aic_decoder_select="golomb idctdsp"
1931 alac_encoder_select="lpc"
1932 als_decoder_select="bswapdsp"
1933 amrnb_decoder_select="lsp"
1934 amrwb_decoder_select="lsp"
1935 amv_decoder_select="sp5x_decoder"
1936 ape_decoder_select="bswapdsp"
1937 asv1_decoder_select="blockdsp bswapdsp idctdsp"
1938 asv1_encoder_select="bswapdsp fdctdsp pixblockdsp"
1939 asv2_decoder_select="blockdsp bswapdsp idctdsp"
1940 asv2_encoder_select="bswapdsp fdctdsp pixblockdsp"
1941 atrac1_decoder_select="mdct sinewin"
1942 atrac3_decoder_select="mdct"
1943 atrac3p_decoder_select="mdct sinewin"
1944 bink_decoder_select="blockdsp hpeldsp"
1945 binkaudio_dct_decoder_select="mdct rdft dct sinewin wma_freqs"
1946 binkaudio_rdft_decoder_select="mdct rdft sinewin wma_freqs"
1947 cavs_decoder_select="blockdsp golomb h264chroma idctdsp qpeldsp videodsp"
1948 cllc_decoder_select="bswapdsp"
1949 comfortnoise_encoder_select="lpc"
1950 cook_decoder_select="audiodsp mdct sinewin"
1951 cscd_decoder_select="lzo"
1952 cscd_decoder_suggest="zlib"
1953 dca_decoder_select="fmtconvert mdct"
1954 dds_decoder_select="texturedsp"
1955 dnxhd_decoder_select="blockdsp idctdsp"
1956 dnxhd_encoder_select="aandcttables blockdsp fdctdsp idctdsp mpegvideoenc pixblockdsp"
1957 dvvideo_decoder_select="dvprofile idctdsp"
1958 dvvideo_encoder_select="dvprofile fdctdsp me_cmp pixblockdsp"
1959 dxa_decoder_deps="zlib"
1960 dxv_decoder_select="lzf texturedsp"
1961 eac3_decoder_select="ac3_decoder"
1962 eac3_encoder_select="ac3_encoder"
1963 eamad_decoder_select="aandcttables blockdsp bswapdsp idctdsp mpegvideo"
1964 eatgq_decoder_select="aandcttables idctdsp"
1965 eatqi_decoder_select="aandcttables blockdsp bswapdsp idctdsp"
1966 exr_decoder_deps="zlib"
1967 ffv1_decoder_select="golomb rangecoder"
1968 ffv1_encoder_select="rangecoder"
1969 ffvhuff_decoder_select="huffyuv_decoder"
1970 ffvhuff_encoder_select="huffyuv_encoder"
1971 fic_decoder_select="golomb"
1972 flac_decoder_select="flacdsp golomb"
1973 flac_encoder_select="bswapdsp flacdsp golomb lpc"
1974 flashsv_decoder_deps="zlib"
1975 flashsv_encoder_deps="zlib"
1976 flashsv2_decoder_deps="zlib"
1977 flv_decoder_select="h263_decoder"
1978 flv_encoder_select="h263_encoder"
1979 fourxm_decoder_select="blockdsp bswapdsp"
1980 fraps_decoder_select="bswapdsp huffman"
1981 g2m_decoder_deps="zlib"
1982 g2m_decoder_select="blockdsp idctdsp jpegtables"
1983 h261_decoder_select="mpeg_er mpegvideo"
1984 h261_encoder_select="aandcttables mpegvideoenc"
1985 h263_decoder_select="error_resilience h263_parser h263dsp mpeg_er mpegvideo qpeldsp"
1986 h263_encoder_select="aandcttables h263dsp mpegvideoenc"
1987 h263i_decoder_select="h263_decoder"
1988 h263p_encoder_select="h263_encoder"
1989 h264_decoder_select="cabac golomb h264chroma h264dsp h264parse h264pred h264qpel videodsp"
1990 h264_decoder_suggest="error_resilience"
1991 hap_decoder_select="snappy texturedsp"
1992 hap_encoder_deps="libsnappy"
1993 hap_encoder_select="texturedspenc"
1994 hevc_decoder_select="bswapdsp cabac golomb videodsp"
1995 huffyuv_decoder_select="bswapdsp huffyuvdsp"
1996 huffyuv_encoder_select="bswapdsp huffman huffyuvencdsp"
1997 iac_decoder_select="imc_decoder"
1998 imc_decoder_select="bswapdsp fft mdct sinewin"
1999 indeo3_decoder_select="hpeldsp"
2000 indeo4_decoder_select="ividsp"
2001 indeo5_decoder_select="ividsp"
2002 interplay_video_decoder_select="hpeldsp"
2003 jpegls_decoder_select="golomb mjpeg_decoder"
2004 jpegls_encoder_select="golomb"
2005 jv_decoder_select="blockdsp"
2006 lagarith_decoder_select="huffyuvdsp"
2007 ljpeg_encoder_select="aandcttables idctdsp jpegtables"
2008 loco_decoder_select="golomb"
2009 magicyuv_decoder_select="huffyuvdsp"
2010 mdec_decoder_select="blockdsp idctdsp mpegvideo"
2011 metasound_decoder_select="lsp mdct sinewin"
2012 mimic_decoder_select="blockdsp bswapdsp hpeldsp idctdsp"
2013 mjpeg_decoder_select="blockdsp hpeldsp idctdsp jpegtables"
2014 mjpeg_encoder_select="aandcttables jpegtables mpegvideoenc"
2015 mjpegb_decoder_select="mjpeg_decoder"
2016 mjpeg_vaapi_encoder_deps="VAEncPictureParameterBufferJPEG"
2017 mjpeg_vaapi_encoder_select="vaapi_encode jpegtables"
2018 mlp_decoder_select="mlp_parser"
2019 motionpixels_decoder_select="bswapdsp"
2020 mp1_decoder_select="mpegaudio"
2021 mp1float_decoder_select="mpegaudio"
2022 mp2_decoder_select="mpegaudio"
2023 mp2float_decoder_select="mpegaudio"
2024 mp3_decoder_select="mpegaudio"
2025 mp3adu_decoder_select="mpegaudio"
2026 mp3adufloat_decoder_select="mpegaudio"
2027 mp3float_decoder_select="mpegaudio"
2028 mp3on4_decoder_select="mpegaudio"
2029 mp3on4float_decoder_select="mpegaudio"
2030 mpc7_decoder_select="bswapdsp mpegaudiodsp"
2031 mpc8_decoder_select="mpegaudiodsp"
2032 mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h"
2033 mpeg_xvmc_decoder_select="mpeg2video_decoder"
2034 mpeg1video_decoder_select="error_resilience mpeg_er mpegvideo"
2035 mpeg1video_encoder_select="aandcttables mpegvideoenc"
2036 mpeg2video_decoder_select="error_resilience mpeg_er mpegvideo"
2037 mpeg2video_encoder_select="aandcttables mpegvideoenc"
2038 mpeg4_decoder_select="h263_decoder mpeg4video_parser"
2039 mpeg4_encoder_select="h263_encoder"
2040 msa1_decoder_select="mss34dsp"
2041 msmpeg4v1_decoder_select="h263_decoder"
2042 msmpeg4v2_decoder_select="h263_decoder"
2043 msmpeg4v2_encoder_select="h263_encoder"
2044 msmpeg4v3_decoder_select="h263_decoder"
2045 msmpeg4v3_encoder_select="h263_encoder"
2046 mss2_decoder_select="error_resilience mpeg_er mpegvideo vc1_decoder"
2047 mts2_decoder_select="mss34dsp"
2048 mxpeg_decoder_select="mjpeg_decoder"
2049 nellymoser_decoder_select="mdct sinewin"
2050 nellymoser_encoder_select="audio_frame_queue mdct sinewin"
2051 nuv_decoder_select="idctdsp lzo"
2052 on2avc_decoder_select="mdct"
2053 opus_decoder_deps="avresample"
2054 opus_decoder_select="imdct15"
2055 png_decoder_deps="zlib"
2056 png_encoder_deps="zlib"
2057 png_encoder_select="huffyuvencdsp"
2058 prores_decoder_select="idctdsp"
2059 prores_encoder_select="fdctdsp"
2060 qcelp_decoder_select="lsp"
2061 qdm2_decoder_select="mdct rdft mpegaudiodsp"
2062 ra_144_encoder_select="audio_frame_queue lpc"
2063 ralf_decoder_select="golomb"
2064 rscc_decoder_deps="zlib"
2065 rv10_decoder_select="error_resilience h263_decoder h263dsp mpeg_er"
2066 rv10_encoder_select="h263_encoder"
2067 rv20_decoder_select="error_resilience h263_decoder h263dsp mpeg_er"
2068 rv20_encoder_select="h263_encoder"
2069 rv30_decoder_select="error_resilience golomb h264chroma h264pred h264qpel mpeg_er mpegvideo rv34dsp videodsp"
2070 rv40_decoder_select="error_resilience golomb h264chroma h264pred h264qpel mpeg_er mpegvideo rv34dsp videodsp"
2071 screenpresso_decoder_deps="zlib"
2072 shorten_decoder_select="golomb"
2073 sipr_decoder_select="lsp"
2074 sp5x_decoder_select="mjpeg_decoder"
2075 svq1_decoder_select="hpeldsp"
2076 svq1_encoder_select="aandcttables hpeldsp me_cmp mpegvideoenc"
2077 svq3_decoder_select="golomb h264dsp h264parse h264pred hpeldsp tpeldsp videodsp"
2078 svq3_decoder_suggest="zlib"
2079 tak_decoder_select="audiodsp"
2080 tdsc_decoder_deps="zlib"
2081 tdsc_decoder_select="mjpeg_decoder"
2082 theora_decoder_select="vp3_decoder"
2083 thp_decoder_select="mjpeg_decoder"
2084 tiff_decoder_suggest="zlib"
2085 tiff_encoder_suggest="zlib"
2086 truehd_decoder_select="mlp_decoder"
2087 truemotion2_decoder_select="bswapdsp"
2088 truespeech_decoder_select="bswapdsp"
2089 tscc_decoder_deps="zlib"
2090 txd_decoder_select="texturedsp"
2091 twinvq_decoder_select="mdct lsp sinewin"
2092 utvideo_decoder_select="bswapdsp"
2093 utvideo_encoder_select="bswapdsp huffman huffyuvencdsp"
2094 vble_decoder_select="huffyuvdsp"
2095 vc1_decoder_select="blockdsp error_resilience h263_decoder h264qpel intrax8 mpeg_er mpegvideo vc1dsp"
2096 vc1image_decoder_select="vc1_decoder"
2097 vorbis_decoder_select="mdct"
2098 vorbis_encoder_select="mdct"
2099 vp3_decoder_select="hpeldsp vp3dsp videodsp"
2100 vp5_decoder_select="h264chroma hpeldsp videodsp vp3dsp vp56dsp"
2101 vp6_decoder_select="h264chroma hpeldsp huffman videodsp vp3dsp vp56dsp"
2102 vp6a_decoder_select="vp6_decoder"
2103 vp6f_decoder_select="vp6_decoder"
2104 vp7_decoder_select="h264pred videodsp vp8dsp"
2105 vp8_decoder_select="h264pred videodsp vp8dsp"
2106 vp9_decoder_select="videodsp"
2107 webp_decoder_select="vp8_decoder"
2108 wmapro_decoder_select="mdct sinewin wma_freqs"
2109 wmav1_decoder_select="mdct sinewin wma_freqs"
2110 wmav1_encoder_select="mdct sinewin wma_freqs"
2111 wmav2_decoder_select="mdct sinewin wma_freqs"
2112 wmav2_encoder_select="mdct sinewin wma_freqs"
2113 wmavoice_decoder_select="lsp rdft dct mdct sinewin"
2114 wmv1_decoder_select="h263_decoder"
2115 wmv1_encoder_select="h263_encoder"
2116 wmv2_decoder_select="blockdsp error_resilience h263_decoder idctdsp intrax8 videodsp wmv2dsp"
2117 wmv2_encoder_select="h263_encoder wmv2dsp"
2118 wmv3_decoder_select="vc1_decoder"
2119 wmv3image_decoder_select="wmv3_decoder"
2120 zerocodec_decoder_deps="zlib"
2121 zlib_decoder_deps="zlib"
2122 zlib_encoder_deps="zlib"
2123 zmbv_decoder_deps="zlib"
2124 zmbv_encoder_deps="zlib"
2126 # hardware accelerators
2127 d3d11va_deps="d3d11_h dxva_h ID3D11VideoDecoder"
2128 dxva2_deps="dxva2api_h DXVA2_ConfigPictureDecode"
2129 vaapi_deps="va_va_h"
2130 vda_deps="VideoDecodeAcceleration_VDADecoder_h pthreads"
2131 vda_extralibs="-framework CoreFoundation -framework VideoDecodeAcceleration -framework QuartzCore"
2132 vdpau_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
2134 h263_vaapi_hwaccel_deps="vaapi"
2135 h263_vaapi_hwaccel_select="h263_decoder"
2136 h264_d3d11va_hwaccel_deps="d3d11va"
2137 h264_d3d11va_hwaccel_select="h264_decoder"
2138 h264_dxva2_hwaccel_deps="dxva2"
2139 h264_dxva2_hwaccel_select="h264_decoder"
2140 h264_mmal_decoder_deps="mmal"
2141 h264_mmal_decoder_select="mmal"
2142 h264_mmal_hwaccel_deps="mmal"
2143 h264_omx_encoder_deps="omx"
2144 h264_qsv_hwaccel_deps="libmfx"
2145 h264_vaapi_hwaccel_deps="vaapi"
2146 h264_vaapi_hwaccel_select="h264_decoder"
2147 h264_vda_hwaccel_deps="vda"
2148 h264_vda_hwaccel_select="h264_decoder"
2149 h264_vda_old_hwaccel_deps="vda"
2150 h264_vda_old_hwaccel_select="h264_decoder"
2151 h264_vdpau_hwaccel_deps="vdpau"
2152 h264_vdpau_hwaccel_select="h264_decoder"
2153 hevc_d3d11va_hwaccel_deps="d3d11va DXVA_PicParams_HEVC"
2154 hevc_d3d11va_hwaccel_select="hevc_decoder"
2155 hevc_dxva2_hwaccel_deps="dxva2 DXVA_PicParams_HEVC"
2156 hevc_dxva2_hwaccel_select="hevc_decoder"
2157 hevc_qsv_hwaccel_deps="libmfx"
2158 hevc_vdpau_hwaccel_deps="vdpau VdpPictureInfoHEVC"
2159 hevc_vdpau_hwaccel_select="hevc_decoder"
2160 mpeg1_vdpau_hwaccel_deps="vdpau"
2161 mpeg1_vdpau_hwaccel_select="mpeg1video_decoder"
2162 mpeg2_d3d11va_hwaccel_deps="d3d11va"
2163 mpeg2_d3d11va_hwaccel_select="mpeg2video_decoder"
2164 mpeg2_dxva2_hwaccel_deps="dxva2"
2165 mpeg2_dxva2_hwaccel_select="mpeg2video_decoder"
2166 mpeg2_mmal_decoder_deps="mmal"
2167 mpeg2_mmal_decoder_select="mmal"
2168 mpeg2_mmal_hwaccel_deps="mmal"
2169 mpeg2_qsv_hwaccel_deps="libmfx"
2170 mpeg2_vaapi_hwaccel_deps="vaapi"
2171 mpeg2_vaapi_hwaccel_select="mpeg2video_decoder"
2172 mpeg2_vdpau_hwaccel_deps="vdpau"
2173 mpeg2_vdpau_hwaccel_select="mpeg2video_decoder"
2174 mpeg4_omx_encoder_deps="omx"
2175 mpeg4_vaapi_hwaccel_deps="vaapi"
2176 mpeg4_vaapi_hwaccel_select="mpeg4_decoder"
2177 mpeg4_vdpau_hwaccel_deps="vdpau"
2178 mpeg4_vdpau_hwaccel_select="mpeg4_decoder"
2179 vc1_d3d11va_hwaccel_deps="d3d11va"
2180 vc1_d3d11va_hwaccel_select="vc1_decoder"
2181 vc1_dxva2_hwaccel_deps="dxva2"
2182 vc1_dxva2_hwaccel_select="vc1_decoder"
2183 vc1_mmal_decoder_deps="mmal"
2184 vc1_mmal_decoder_select="mmal"
2185 vc1_mmal_hwaccel_deps="mmal"
2186 vc1_vaapi_hwaccel_deps="vaapi"
2187 vc1_vaapi_hwaccel_select="vc1_decoder"
2188 vc1_vdpau_hwaccel_deps="vdpau"
2189 vc1_vdpau_hwaccel_select="vc1_decoder"
2190 wmv3_d3d11va_hwaccel_select="vc1_d3d11va_hwaccel"
2191 wmv3_dxva2_hwaccel_select="vc1_dxva2_hwaccel"
2192 wmv3_vaapi_hwaccel_select="vc1_vaapi_hwaccel"
2193 wmv3_vdpau_hwaccel_select="vc1_vdpau_hwaccel"
2195 # hardware-accelerated codecs
2196 nvenc_deps_any="dlopen LoadLibrary"
2197 nvenc_extralibs='$ldl'
2198 omx_deps="dlopen pthreads"
2199 omx_extralibs='$ldl'
2202 vaapi_encode_deps="vaapi"
2204 hwupload_cuda_filter_deps="cuda"
2205 scale_npp_filter_deps="cuda libnpp"
2207 h264_nvenc_encoder_deps="nvenc"
2208 h264_qsv_decoder_deps="libmfx"
2209 h264_qsv_decoder_select="h264_mp4toannexb_bsf h264_parser qsvdec h264_qsv_hwaccel"
2210 h264_qsv_encoder_deps="libmfx"
2211 h264_qsv_encoder_select="qsvenc"
2212 h264_vaapi_encoder_deps="VAEncPictureParameterBufferH264"
2213 h264_vaapi_encoder_select="vaapi_encode golomb"
2215 hevc_nvenc_encoder_deps="nvenc"
2216 hevc_qsv_decoder_deps="libmfx"
2217 hevc_qsv_encoder_deps="libmfx"
2218 hevc_qsv_decoder_select="hevc_mp4toannexb_bsf hevc_parser hevc_qsv_hwaccel qsvdec"
2219 hevc_qsv_encoder_select="qsvenc"
2220 hevc_vaapi_encoder_deps="VAEncPictureParameterBufferHEVC"
2221 hevc_vaapi_encoder_select="vaapi_encode golomb"
2222 mpeg2_qsv_decoder_deps="libmfx"
2223 mpeg2_qsv_decoder_select="qsvdec mpeg2_qsv_hwaccel mpegvideo_parser"
2224 mpeg2_qsv_encoder_deps="libmfx"
2225 mpeg2_qsv_encoder_select="qsvenc"
2227 nvenc_h264_encoder_deps="nvenc"
2228 nvenc_hevc_encoder_deps="nvenc"
2231 h264_parser_select="golomb h264dsp h264parse"
2232 hevc_parser_select="golomb"
2233 mpegvideo_parser_select="mpegvideo"
2234 mpeg4video_parser_select="error_resilience h263dsp mpegvideo qpeldsp"
2235 vc1_parser_select="vc1dsp"
2238 mjpeg2jpeg_bsf_select="jpegtables"
2240 # external libraries
2241 libdcadec_decoder_deps="libdcadec"
2242 libfaac_encoder_deps="libfaac"
2243 libfaac_encoder_select="audio_frame_queue"
2244 libfdk_aac_decoder_deps="libfdk_aac"
2245 libfdk_aac_encoder_deps="libfdk_aac"
2246 libfdk_aac_encoder_select="audio_frame_queue"
2247 libgsm_decoder_deps="libgsm"
2248 libgsm_encoder_deps="libgsm"
2249 libgsm_ms_decoder_deps="libgsm"
2250 libgsm_ms_encoder_deps="libgsm"
2251 libilbc_decoder_deps="libilbc"
2252 libilbc_encoder_deps="libilbc"
2253 libkvazaar_encoder_deps="libkvazaar"
2254 libmp3lame_encoder_deps="libmp3lame"
2255 libmp3lame_encoder_select="audio_frame_queue"
2256 libopencore_amrnb_decoder_deps="libopencore_amrnb"
2257 libopencore_amrnb_encoder_deps="libopencore_amrnb"
2258 libopencore_amrnb_encoder_select="audio_frame_queue"
2259 libopencore_amrwb_decoder_deps="libopencore_amrwb"
2260 libopenh264_decoder_deps="libopenh264"
2261 libopenh264_decoder_select="h264_mp4toannexb_bsf"
2262 libopenh264_encoder_deps="libopenh264"
2263 libopenjpeg_decoder_deps="libopenjpeg"
2264 libopenjpeg_encoder_deps="libopenjpeg"
2265 libopus_decoder_deps="libopus"
2266 libopus_encoder_deps="libopus"
2267 libopus_encoder_select="audio_frame_queue"
2268 libschroedinger_decoder_deps="libschroedinger"
2269 libschroedinger_encoder_deps="libschroedinger"
2270 libspeex_decoder_deps="libspeex"
2271 libspeex_encoder_deps="libspeex"
2272 libspeex_encoder_select="audio_frame_queue"
2273 libtheora_encoder_deps="libtheora"
2274 libtwolame_encoder_deps="libtwolame"
2275 libvo_aacenc_encoder_deps="libvo_aacenc"
2276 libvo_aacenc_encoder_select="audio_frame_queue"
2277 libvo_amrwbenc_encoder_deps="libvo_amrwbenc"
2278 libvorbis_encoder_deps="libvorbis"
2279 libvorbis_encoder_select="audio_frame_queue"
2280 libvpx_vp8_decoder_deps="libvpx"
2281 libvpx_vp8_encoder_deps="libvpx"
2282 libvpx_vp9_decoder_deps="libvpx"
2283 libvpx_vp9_encoder_deps="libvpx"
2284 libwavpack_encoder_deps="libwavpack"
2285 libwebp_encoder_deps="libwebp"
2286 libx262_encoder_deps="libx262"
2287 libx264_encoder_deps="libx264"
2288 libx265_encoder_deps="libx265"
2289 libxavs_encoder_deps="libxavs"
2290 libxvid_encoder_deps="libxvid"
2293 ac3_demuxer_select="ac3_parser"
2294 asf_demuxer_select="riffdec"
2295 asf_muxer_select="riffenc"
2296 asf_stream_muxer_select="asf_muxer"
2297 avi_demuxer_select="iso_media riffdec"
2298 avi_muxer_select="riffenc"
2299 avisynth_demuxer_deps="avisynth"
2300 avisynth_demuxer_select="riffdec"
2301 caf_demuxer_select="iso_media riffdec"
2302 dash_muxer_select="mp4_muxer"
2303 dirac_demuxer_select="dirac_parser"
2304 dv_demuxer_select="dvprofile"
2305 dv_muxer_select="dvprofile"
2306 dxa_demuxer_select="riffdec"
2307 eac3_demuxer_select="ac3_parser"
2308 f4v_muxer_select="mov_muxer"
2309 flac_demuxer_select="flac_parser"
2310 hds_muxer_select="flv_muxer"
2311 hls_muxer_select="mpegts_muxer"
2312 ipod_muxer_select="mov_muxer"
2313 ismv_muxer_select="mov_muxer"
2314 matroska_audio_muxer_select="matroska_muxer"
2315 matroska_demuxer_select="iso_media riffdec"
2316 matroska_demuxer_suggest="bzlib lzo zlib"
2317 matroska_muxer_select="iso_media riffenc"
2318 mmf_muxer_select="riffenc"
2319 mov_demuxer_select="iso_media riffdec"
2320 mov_demuxer_suggest="zlib"
2321 mov_muxer_select="iso_media riffenc rtpenc_chain"
2322 mp3_demuxer_select="mpegaudio_parser"
2323 mp4_muxer_select="mov_muxer"
2324 mpegts_demuxer_select="iso_media"
2325 mpegts_muxer_select="adts_muxer latm_muxer"
2326 mpegtsraw_demuxer_select="mpegts_demuxer"
2327 mxf_d10_muxer_select="mxf_muxer"
2328 nut_muxer_select="riffenc"
2329 nuv_demuxer_select="riffdec"
2330 oga_muxer_select="ogg_muxer"
2331 ogg_demuxer_select="dirac_parse"
2332 opus_muxer_select="ogg_muxer"
2333 psp_muxer_select="mov_muxer"
2334 rtp_demuxer_select="sdp_demuxer"
2335 rtpdec_select="asf_demuxer jpegtables mov_demuxer mpegts_demuxer rm_demuxer rtp_protocol srtp"
2336 rtsp_demuxer_select="http_protocol rtpdec"
2337 rtsp_muxer_select="rtp_muxer http_protocol rtp_protocol rtpenc_chain"
2338 sap_demuxer_select="sdp_demuxer"
2339 sap_muxer_select="rtp_muxer rtp_protocol rtpenc_chain"
2340 sdp_demuxer_select="rtpdec"
2341 smoothstreaming_muxer_select="ismv_muxer"
2342 spdif_muxer_select="aac_parser"
2343 spx_muxer_select="ogg_muxer"
2344 swf_demuxer_suggest="zlib"
2345 tak_demuxer_select="tak_parser"
2346 tg2_muxer_select="mov_muxer"
2347 tgp_muxer_select="mov_muxer"
2348 w64_demuxer_select="wav_demuxer"
2349 wav_demuxer_select="riffdec"
2350 wav_muxer_select="riffenc"
2351 webm_muxer_select="iso_media riffenc"
2352 webm_muxer_suggest="libopus_encoder libvorbis_encoder libvpx_vp8_encoder libvpx_vp9_encoder"
2353 wtv_demuxer_select="mpegts_demuxer riffdec"
2354 xmv_demuxer_select="riffdec"
2355 xwma_demuxer_select="riffdec"
2358 alsa_indev_deps="alsa_asoundlib_h snd_pcm_htimestamp"
2359 alsa_outdev_deps="alsa_asoundlib_h"
2360 avfoundation_indev_deps="AVFoundation_AVFoundation_h"
2361 bktr_indev_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
2362 dv1394_indev_deps="dv1394"
2363 dv1394_indev_select="dv_demuxer"
2364 fbdev_indev_deps="linux_fb_h"
2365 jack_indev_deps="jack_jack_h"
2366 jack_indev_deps_any="sem_timedwait dispatch_dispatch_h"
2367 libcdio_indev_deps="libcdio"
2368 libdc1394_indev_deps="libdc1394"
2369 oss_indev_deps_any="soundcard_h sys_soundcard_h"
2370 oss_outdev_deps_any="soundcard_h sys_soundcard_h"
2371 pulse_indev_deps="libpulse"
2372 sndio_indev_deps="sndio_h"
2373 sndio_outdev_deps="sndio_h"
2374 v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h"
2375 vfwcap_indev_deps="capCreateCaptureWindow vfwcap_defines"
2376 vfwcap_indev_extralibs="-lavicap32"
2377 xcbgrab_indev_deps="libxcb"
2380 ffrtmpcrypt_protocol_deps="!librtmp_protocol"
2381 ffrtmpcrypt_protocol_deps_any="gcrypt gmp openssl"
2382 ffrtmpcrypt_protocol_select="tcp_protocol"
2383 ffrtmphttp_protocol_deps="!librtmp_protocol"
2384 ffrtmphttp_protocol_select="http_protocol"
2385 gopher_protocol_select="network"
2386 http_protocol_select="tcp_protocol"
2387 httpproxy_protocol_select="tcp_protocol"
2388 https_protocol_select="tls_protocol"
2389 icecast_protocol_select="http_protocol"
2390 librtmp_protocol_deps="librtmp"
2391 librtmpe_protocol_deps="librtmp"
2392 librtmps_protocol_deps="librtmp"
2393 librtmpt_protocol_deps="librtmp"
2394 librtmpte_protocol_deps="librtmp"
2395 mmsh_protocol_select="http_protocol"
2396 mmst_protocol_select="network"
2397 rtmp_protocol_deps="!librtmp_protocol"
2398 rtmp_protocol_select="tcp_protocol"
2399 rtmpe_protocol_select="ffrtmpcrypt_protocol"
2400 rtmps_protocol_deps="!librtmp_protocol"
2401 rtmps_protocol_select="tls_protocol"
2402 rtmpt_protocol_select="ffrtmphttp_protocol"
2403 rtmpte_protocol_select="ffrtmpcrypt_protocol ffrtmphttp_protocol"
2404 rtmpts_protocol_select="ffrtmphttp_protocol https_protocol"
2405 rtp_protocol_select="udp_protocol"
2406 sctp_protocol_deps="struct_sctp_event_subscribe"
2407 sctp_protocol_select="network"
2408 srtp_protocol_select="rtp_protocol srtp"
2409 tcp_protocol_select="network"
2410 tls_gnutls_protocol_deps="gnutls"
2411 tls_gnutls_protocol_select="tcp_protocol"
2412 tls_openssl_protocol_deps="openssl !tls_gnutls_protocol"
2413 tls_openssl_protocol_select="tcp_protocol"
2414 tls_protocol_deps_any="tls_gnutls_protocol tls_openssl_protocol"
2415 udp_protocol_select="network"
2416 unix_protocol_deps="sys_un_h"
2417 unix_protocol_select="network"
2420 blackframe_filter_deps="gpl"
2421 boxblur_filter_deps="gpl"
2422 bs2b_filter_deps="libbs2b"
2423 cropdetect_filter_deps="gpl"
2424 deinterlace_qsv_filter_deps="libmfx"
2425 delogo_filter_deps="gpl"
2426 drawtext_filter_deps="libfreetype"
2427 frei0r_filter_deps="frei0r dlopen"
2428 frei0r_filter_extralibs='$ldl'
2429 frei0r_src_filter_deps="frei0r dlopen"
2430 frei0r_src_filter_extralibs='$ldl'
2431 hdcd_filter_deps="libhdcd"
2432 hqdn3d_filter_deps="gpl"
2433 interlace_filter_deps="gpl"
2434 ocv_filter_deps="libopencv"
2435 resample_filter_deps="avresample"
2436 scale_filter_deps="swscale"
2437 scale_qsv_filter_deps="libmfx"
2438 scale_vaapi_filter_deps="vaapi VAProcPipelineParameterBuffer"
2441 avcodec_example_deps="avcodec avutil"
2442 filter_audio_example_deps="avfilter avutil"
2443 metadata_example_deps="avformat avutil"
2444 output_example_deps="avcodec avformat avutil swscale"
2445 qsvdec_example_deps="avcodec avutil libmfx h264_qsv_decoder vaapi_x11"
2446 transcode_aac_example_deps="avcodec avformat avresample"
2448 # libraries, in linking order
2449 avcodec_deps="avutil"
2450 avdevice_deps="avformat avcodec avutil"
2451 avfilter_deps="avutil"
2452 avformat_deps="avcodec avutil"
2453 avresample_deps="avutil"
2454 swscale_deps="avutil"
2457 avconv_deps="avcodec avfilter avformat avresample swscale"
2458 avconv_select="aformat_filter anull_filter asyncts_filter atrim_filter format_filter
2459 fps_filter null_filter resample_filter scale_filter
2461 avplay_deps="avcodec avfilter avformat avresample sdl"
2462 avplay_libs='$sdl_libs'
2463 avplay_select="rdft format_filter transpose_filter hflip_filter vflip_filter"
2464 avprobe_deps="avcodec avformat"
2468 texi2html_deps="doc"
2470 # default parameters
2472 logfile="config.log"
2474 # installation paths
2475 prefix_default="/usr/local"
2476 bindir_default='${prefix}/bin'
2477 datadir_default='${prefix}/share/avconv'
2478 docdir_default='${prefix}/share/doc/libav'
2479 incdir_default='${prefix}/include'
2480 libdir_default='${prefix}/lib'
2481 mandir_default='${prefix}/share/man'
2482 shlibdir_default="$libdir_default"
2487 host_cc_default="gcc"
2492 pkg_config_default=pkg-config
2495 version_script='--version-script'
2499 arch_default=$(uname -m)
2504 target_os_default=$(tolower $(uname -s))
2505 host_os=$target_os_default
2507 # configurable options
2508 enable $EXAMPLE_LIST $LIBRARY_LIST $PROGRAM_LIST
2513 enable faan faandct faanidct
2514 enable optimizations
2515 enable safe_bitstream_reader
2517 enable swscale_alpha
2518 enable valgrind_backtrace
2520 # By default, enable only those hwaccels that have no external dependencies.
2521 enable d3d11va dxva2 vda vdpau
2524 SHFLAGS='-shared -Wl,-soname,$$(@F)'
2527 FULLNAME='$(NAME)$(BUILDSUF)'
2528 LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
2531 SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
2532 SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
2533 SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
2534 LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
2535 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'
2536 SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR) $(SLIBNAME)'
2537 VERSION_SCRIPT_POSTPROCESS_CMD="cat"
2560 host_cflags_filter=echo
2561 host_ldflags_filter=echo
2563 target_path='$(CURDIR)'
2565 # since the object filename is not given with the -MM flag, the compiler
2566 # is only able to print the basename, and we must add the path ourselves
2567 DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o," > $(@:.o=.d)'
2571 if test -f configure; then
2574 source_path=$(cd $(dirname "$0"); pwd)
2575 echo "$source_path" | grep -q '[[:blank:]]' &&
2576 die "Out of tree builds are impossible with whitespace in source path."
2577 test -e "$source_path/config.h" &&
2578 die "Out of tree builds are impossible with config.h in source dir."
2585 LIBAV_CONFIGURATION="${LIBAV_CONFIGURATION# } ${l}${r}"
2591 file=$source_path/$3
2592 sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
2595 ENCODER_LIST=$(find_things encoder ENC libavcodec/allcodecs.c)
2596 DECODER_LIST=$(find_things decoder DEC libavcodec/allcodecs.c)
2597 HWACCEL_LIST=$(find_things hwaccel HWACCEL libavcodec/allcodecs.c)
2598 PARSER_LIST=$(find_things parser PARSER libavcodec/allcodecs.c)
2599 MUXER_LIST=$(find_things muxer _MUX libavformat/allformats.c)
2600 DEMUXER_LIST=$(find_things demuxer DEMUX libavformat/allformats.c)
2601 OUTDEV_LIST=$(find_things outdev OUTDEV libavdevice/alldevices.c)
2602 INDEV_LIST=$(find_things indev _IN libavdevice/alldevices.c)
2603 FILTER_LIST=$(find_things filter FILTER libavfilter/allfilters.c)
2605 find_things_extern(){
2608 file=$source_path/$3
2609 sed -n "s/^[^#]*extern.*$pattern *ff_\([^ ]*\)_$thing;/\1_$thing/p" "$file"
2612 BSF_LIST=$(find_things_extern bsf AVBitStreamFilter libavcodec/bitstream_filters.c)
2613 PROTOCOL_LIST=$(find_things_extern protocol URLProtocol libavformat/protocols.c)
2629 for n in $COMPONENT_LIST; do
2630 v=$(toupper ${n%s})_LIST
2632 eval ${n}_if_any="\$$v"
2635 enable $ARCH_EXT_LIST
2638 echo "Unknown option \"$1\"."
2639 echo "See $0 --help for available options."
2644 printf "%-25s %-25s %-25s\n" $(cat | tr ' ' '\n' | sort)
2650 echo $* | sed s/$suffix//g | print_3_columns
2662 is_in ${comp} $COMPONENT_LIST && eval comp=\$$(toupper ${comp%s})_LIST
2663 echo "prob ${prob:-0.5}"
2671 random_seed=$(awk "BEGIN { srand($random_seed); print srand() }")
2672 $action $(rand_list "$@" | awk "BEGIN { srand($random_seed) } \$1 == \"prob\" { prob = \$2; next } rand() < prob { print }")
2681 --extra-ldexeflags=*)
2682 add_ldexeflags $optval
2685 add_extralibs $optval
2688 disable $INDEV_LIST $OUTDEV_LIST
2691 debuglevel="$optval"
2694 disable $PROGRAM_LIST
2696 --disable-everything)
2697 map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
2700 map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
2701 disable $LIBRARY_LIST $PROGRAM_LIST doc
2703 --enable-random|--disable-random)
2704 action=${opt%%-random}
2705 do_random ${action#--} $COMPONENT_LIST
2707 --enable-random=*|--disable-random=*)
2708 action=${opt%%-random=*}
2709 do_random ${action#--} $optval
2711 --enable-*=*|--disable-*=*)
2712 eval $(echo "${opt%%=*}" | sed 's/--/action=/;s/-/ thing=/')
2713 is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt"
2714 eval list=\$$(toupper $thing)_LIST
2715 name=$(echo "${optval}" | sed "s/,/_${thing}|/g")_${thing}
2716 $action $(filter "$name" $list)
2718 --enable-avserver|--disable-avserver*)
2719 warn "avserver has been removed, the ${opt} option is only"\
2720 "provided for compatibility and will be removed in the future"
2722 --enable-?*|--disable-?*)
2723 eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
2724 if is_in $option $COMPONENT_LIST; then
2725 test $action = disable && action=unset
2726 eval $action \$$(toupper ${option%s})_LIST
2727 elif is_in $option $CMDLINE_SELECT; then
2734 NAME="${opt#--list-}"
2735 is_in $NAME $COMPONENT_LIST || die_unknown $opt
2737 eval show_list $NAME \$$(toupper $NAME)_LIST
2739 --help|-h) show_help
2742 optname="${opt%%=*}"
2743 optname="${optname#--}"
2744 optname=$(echo "$optname" | sed 's/-/_/g')
2745 if is_in $optname $CMDLINE_SET; then
2746 eval $optname='$optval'
2747 elif is_in $optname $CMDLINE_APPEND; then
2748 append $optname "$optval"
2760 disabled logging && logfile=/dev/null
2762 # Disable all the library-specific components if the library itself
2763 # is disabled, see AVCODEC_LIST and following _LIST variables.
2765 disable_components(){
2766 disabled ${1} && disable $(
2767 eval components="\$$(toupper ${1})_COMPONENTS"
2768 map 'eval echo \${$(toupper ${v%s})_LIST}' $components
2772 map 'disable_components $v' $LIBRARY_LIST
2774 echo "# $0 $LIBAV_CONFIGURATION" > $logfile
2777 case "$toolchain" in
2779 cc_default="${toolchain%-asan}"
2780 add_cflags -fsanitize=address
2781 add_ldflags -fsanitize=address
2784 cc_default="${toolchain%-msan}"
2785 add_cflags -fsanitize=memory -fsanitize-memory-track-origins
2786 add_ldflags -fsanitize=memory
2789 cc_default="${toolchain%-tsan}"
2790 add_cflags -fsanitize=thread -pie
2791 add_ldflags -fsanitize=thread -pie
2792 case "$toolchain" in
2800 cc_default="${toolchain%-usan}"
2801 add_cflags -fsanitize=undefined
2802 add_ldflags -fsanitize=undefined
2803 case "$toolchain" in
2810 target_exec_default="valgrind"
2811 case "$toolchain" in
2813 target_exec_args="--alloc-fn=av_malloc --alloc-fn=av_mallocz"
2816 target_exec_args="--track-origins=yes --leak-check=full"
2821 # Check whether the current MSVC version needs the C99 converter.
2822 # From MSVC 2013 (compiler major version 18) onwards, it does actually
2823 # support enough of C99 to build libav. Default to the new
2824 # behaviour if the regexp was unable to match anything, since this
2825 # successfully parses the version number of existing supported
2826 # versions that require the converter (MSVC 2010 and 2012).
2827 cl_major_ver=$(cl 2>&1 | sed -n 's/.*Version \([[:digit:]]\{1,\}\)\..*/\1/p')
2828 if [ -z "$cl_major_ver" ] || [ $cl_major_ver -ge 18 ]; then
2831 cc_default="c99wrap cl"
2833 ld_default="$source_path/compat/windows/mslink"
2834 nm_default="dumpbin -symbols"
2841 target_os_default="win32"
2842 # Use a relative path for TMPDIR. This makes sure all the
2843 # ffconf temp files are written with a relative path, avoiding
2844 # issues with msys/win32 path conversion for MSVC parameters
2845 # such as -Fo<file> or -out:<file>.
2851 nm_default="dumpbin -symbols"
2853 target_os_default="win32"
2857 add_cflags -fprofile-arcs -ftest-coverage
2858 add_ldflags -fprofile-arcs -ftest-coverage
2861 add_cflags -fprofile-arcs -ftest-coverage
2862 add_ldflags --coverage
2865 add_cppflags -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2
2866 add_cflags -fno-strict-overflow -fstack-protector-all
2867 add_ldflags -Wl,-z,relro -Wl,-z,now
2870 die "Unknown toolchain $toolchain"
2874 test -n "$cross_prefix" && enable cross_compile
2876 if enabled cross_compile; then
2877 test -n "$arch" && test -n "$target_os" ||
2878 die "Must specify target arch and OS when cross-compiling"
2881 ar_default="${cross_prefix}${ar_default}"
2882 cc_default="${cross_prefix}${cc_default}"
2883 occ_default="${cross_prefix}${occ_default}"
2884 nm_default="${cross_prefix}${nm_default}"
2885 pkg_config_default="${cross_prefix}${pkg_config_default}"
2886 ranlib="${cross_prefix}${ranlib}"
2887 strip="${cross_prefix}${strip}"
2889 sysinclude_default="${sysroot}/usr/include"
2891 set_default arch cc pkg_config sysinclude target_exec target_os
2892 enabled cross_compile || host_cc_default=$cc
2895 if ! $pkg_config --version >/dev/null 2>&1; then
2896 warn "$pkg_config not found, library detection may fail."
2902 mingw32*|mingw64*|win32|win64|cygwin*|*-dos|freedos|opendos|os/2*|symbian) echo .exe ;;
2906 EXESUF=$(exesuf $target_os)
2907 HOSTEXESUF=$(exesuf $host_os)
2909 # set temporary file name
2910 : ${TMPDIR:=$TEMPDIR}
2914 if ! check_cmd mktemp -u XXXXXX; then
2915 # simple replacement for missing mktemp
2916 # NOT SAFE FOR GENERAL USE
2918 echo "${2%%XXX*}.${HOSTNAME}.${UID}.$$"
2923 tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
2924 (set -C; exec > $tmp) 2>/dev/null ||
2925 die "Unable to create temporary file in $TMPDIR."
2926 append TMPFILES $tmp
2930 trap 'rm -f -- $TMPFILES' EXIT
2934 tmpfile TMPE $EXESUF
2945 # make sure we can execute files in $TMPDIR
2946 cat > $TMPSH 2>> $logfile <<EOF
2949 chmod +x $TMPSH >> $logfile 2>&1
2950 if ! $TMPSH >> $logfile 2>&1; then
2952 Unable to create and execute files in $TMPDIR. Set the TMPDIR environment
2953 variable to another directory and make sure that it is not mounted noexec.
2955 die "Sanity test failed."
2961 # Filter out MSVC cl.exe options from cflags that shouldn't
2962 # be passed to gas-preprocessor
2972 -std=c99) echo -c99 ;;
2973 -mcpu=*) echo -arch ${flag#*=} ;;
2974 -mieee) echo -ieee ;;
2975 -O*|-fast) echo $flag ;;
2976 -fno-math-errno) echo -assume nomath_errno ;;
2978 -Wall) echo -msg_enable level2 ;;
2979 -Wno-pointer-sign) echo -msg_disable ptrmismatch1 ;;
2980 -Wl,*) echo $flag ;;
2990 -Wno-switch) echo -Wno-switch-enum ;;
2991 -Wno-format-zero-length) ;;
2992 -Wdisabled-optimization) ;;
2993 -Wno-pointer-sign) echo -Wno-other ;;
2999 msvc_common_flags(){
3002 # In addition to specifying certain flags under the compiler
3003 # specific filters, they must be specified here as well or else the
3004 # generic catch all at the bottom will print the original flag.
3008 -fomit-frame-pointer) ;;
3012 -fno-signed-zeros) ;;
3016 -lz) echo zlib.lib ;;
3017 -lavifil32) echo vfw32.lib ;;
3018 -lavicap32) echo vfw32.lib user32.lib ;;
3019 -lx264) echo libx264.lib ;;
3020 -l*) echo ${flag#-l}.lib ;;
3021 -L*) echo -libpath:${flag#-L} ;;
3028 msvc_common_flags "$@"
3031 -Wall) echo -W4 -wd4244 -wd4127 -wd4018 -wd4389 \
3032 -wd4146 -wd4057 -wd4204 -wd4706 -wd4305 \
3033 -wd4152 -wd4324 -we4013 -wd4100 -wd4214 \
3034 -wd4273 -wd4554 -wd4701 ;;
3040 msvc_common_flags "$@"
3043 # Despite what Intel's documentation says -Wall, which is supported
3044 # on Windows, does enable remarks so disable them here.
3045 -Wall) echo $flag -Qdiag-disable:remark ;;
3046 -std=c99) echo -Qstd=c99 ;;
3054 -flto) echo -Mipa=fast,libopt,libinline,vestigial ;;
3055 -fomit-frame-pointer) echo -Mnoframe ;;
3066 case "${flag#*=}" in
3067 native) echo -xtarget=native ;;
3068 v9|niagara) echo -xarch=sparc ;;
3069 ultrasparc) echo -xarch=sparcvis ;;
3070 ultrasparc3|niagara2) echo -xarch=sparcvis2 ;;
3071 i586|pentium) echo -xchip=pentium ;;
3072 i686|pentiumpro|pentium2) echo -xtarget=pentium_pro ;;
3073 pentium3*|c3-2) echo -xtarget=pentium3 ;;
3074 pentium-m) echo -xarch=sse2 -xchip=pentium3 ;;
3075 pentium4*) echo -xtarget=pentium4 ;;
3076 prescott|nocona) echo -xarch=sse3 -xchip=pentium4 ;;
3077 *-sse3) echo -xarch=sse3 ;;
3078 core2) echo -xarch=ssse3 -xchip=core2 ;;
3079 corei7) echo -xarch=sse4_2 -xchip=nehalem ;;
3080 corei7-avx) echo -xarch=avx -xchip=sandybridge ;;
3081 amdfam10|barcelona|bdver*) echo -xarch=sse4_1 ;;
3082 athlon-4|athlon-[mx]p) echo -xarch=ssea ;;
3083 k8|opteron|athlon64|athlon-fx)
3084 echo -xarch=sse2a ;;
3085 athlon*) echo -xarch=pentium_proa ;;
3088 -std=c99) echo -xc99 ;;
3089 -fomit-frame-pointer) echo -xregs=frameptr ;;
3090 -fPIC) echo -KPIC -xcode=pic32 ;;
3091 -W*,*) echo $flag ;;
3092 -f*-*|-W*|-mimpure-text) ;;
3103 case "${flag#*=}" in
3104 armv7-a|cortex-a*) echo -mv=7a8 ;;
3105 armv7-r|cortex-r*) echo -mv=7r4 ;;
3106 armv7-m|cortex-m*) echo -mv=7m3 ;;
3107 armv6*|arm11*) echo -mv=6 ;;
3108 armv5*e|arm[79]*e*|arm9[24]6*|arm96*|arm102[26])
3110 armv4*|arm7*|arm9[24]*) echo -mv=4 ;;
3113 -mfpu=neon) echo --float_support=vfpv3 --neon ;;
3114 -mfpu=vfp) echo --float_support=vfpv2 ;;
3115 -mfpu=vfpv3) echo --float_support=vfpv3 ;;
3116 -mfpu=vfpv3-d16) echo --float_support=vfpv3d16 ;;
3117 -msoft-float) echo --float_support=vfplib ;;
3118 -O[0-3]|-mf=*) echo $flag ;;
3120 -pds=*) echo $flag ;;
3121 -D*|-I*) echo $flag ;;
3122 --gcc|--abi=*) echo $flag ;;
3132 unset _type _ident _cc_c _cc_e _cc_o _flags _cflags
3133 unset _ld_o _ldflags _ld_lib _ld_path
3134 unset _depflags _DEPCMD _DEPFLAGS
3137 if $_cc -v 2>&1 | grep -q '^gcc.*LLVM'; then
3139 gcc_extra_ver=$(expr "$($_cc --version 2>/dev/null | head -n1)" : '.*\((.*)\)')
3140 _ident="llvm-gcc $($_cc -dumpversion 2>/dev/null) $gcc_extra_ver"
3141 _depflags='-MMD -MF $(@:.o=.d) -MT $@'
3144 elif $_cc -v 2>&1 | grep -qi ^gcc; then
3146 gcc_version=$($_cc --version | head -n1)
3147 gcc_basever=$($_cc -dumpversion)
3148 gcc_pkg_ver=$(expr "$gcc_version" : '[^ ]* \(([^)]*)\)')
3149 gcc_ext_ver=$(expr "$gcc_version" : ".*$gcc_pkg_ver $gcc_basever \\(.*\\)")
3150 _ident=$(cleanws "gcc $gcc_basever $gcc_pkg_ver $gcc_ext_ver")
3151 if ! $_cc -dumpversion | grep -q '^2\.'; then
3152 _depflags='-MMD -MF $(@:.o=.d) -MT $@'
3156 elif $_cc --version 2>/dev/null | grep -q ^icc; then
3158 _ident=$($_cc --version | head -n1)
3163 elif $_cc -v 2>&1 | grep -q xlc; then
3165 _ident=$($_cc -qversion 2>/dev/null | head -n1)
3167 _cflags_size='-O5 -qcompact'
3168 elif $_cc -V 2>/dev/null | grep -q Compaq; then
3170 _ident=$($_cc -V | head -n1 | cut -d' ' -f1-3)
3172 _cflags_speed='-fast'
3174 _flags_filter=ccc_flags
3175 elif $_cc --vsn 2>/dev/null | grep -Eq "ARM (C/C\+\+ )?Compiler"; then
3176 test -d "$sysroot" || die "No valid sysroot specified."
3178 _ident=$($_cc --vsn | grep -i build | head -n1 | sed 's/.*: //')
3179 armcc_conf="$PWD/armcc.conf"
3180 $_cc --arm_linux_configure \
3181 --arm_linux_config_file="$armcc_conf" \
3182 --configure_sysroot="$sysroot" \
3183 --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
3184 die "Error creating armcc configuration file."
3185 $_cc --vsn | grep -q RVCT && armcc_opt=rvct || armcc_opt=armcc
3186 _flags="--arm_linux_config_file=$armcc_conf --translate_gcc"
3187 as_default="${cross_prefix}gcc"
3191 elif $_cc -version 2>/dev/null | grep -Eq 'TMS470|TI ARM'; then
3193 _ident=$($_cc -version | head -n1 | tr -s ' ')
3194 _flags='--gcc --abi=eabi -me'
3197 _depflags='-ppa -ppd=$(@:.o=.d)'
3198 _cflags_speed='-O3 -mf=5'
3199 _cflags_size='-O3 -mf=2'
3200 _flags_filter=tms470_flags
3201 elif $_cc -v 2>&1 | grep -q clang; then
3203 _ident=$($_cc --version 2>/dev/null | head -n1)
3204 _depflags='-MMD -MF $(@:.o=.d) -MT $@'
3207 elif $_cc -V 2>&1 | grep -q Sun; then
3209 _ident=$($_cc -V 2>&1 | head -n1 | cut -d' ' -f 2-)
3210 _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "1s,^.*: ,$@: ," -e "\$$!s,\$$, \\\," -e "1!s,^.*: , ," > $(@:.o=.d)'
3211 _DEPFLAGS='-xM1 -xc99'
3214 _cflags_size='-O5 -xspace'
3215 _flags_filter=suncc_flags
3216 elif $_cc -v 2>&1 | grep -q 'PathScale\|Path64'; then
3218 _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
3219 _depflags='-MMD -MF $(@:.o=.d) -MT $@'
3222 _flags_filter='filter_out -Wdisabled-optimization'
3223 elif $_cc -v 2>&1 | grep -q Open64; then
3225 _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
3226 _depflags='-MMD -MF $(@:.o=.d) -MT $@'
3229 _flags_filter='filter_out -Wdisabled-optimization|-Wtype-limits|-fno-signed-zeros'
3230 elif $_cc -V 2>&1 | grep -q Portland; then
3232 _ident="PGI $($_cc -V 2>&1 | awk '/^pgcc/ { print $2; exit }')"
3233 opt_common='-alias=ansi -Mdse -Mlre -Mpre'
3234 _cflags_speed="-O3 -Mautoinline -Munroll=c:4 $opt_common"
3235 _cflags_size="-O2 -Munroll=c:1 $opt_common"
3237 _flags_filter=pgi_flags
3238 elif $_cc 2>&1 | grep -q 'Microsoft.*ARM.*Assembler'; then
3240 _ident=$($_cc | head -n1)
3241 # 4509: "This form of conditional instruction is deprecated"
3242 _flags="-nologo -ignore 4509"
3243 _flags_filter=armasm_flags
3244 elif $_cc -nologo- 2>&1 | grep -q Microsoft; then
3246 _ident=$($_cc 2>&1 | head -n1)
3247 _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< 2>&1 | awk '\''/including/ { sub(/^.*file: */, ""); gsub(/\\/, "/"); if (!match($$0, / /)) print "$@:", $$0 }'\'' > $(@:.o=.d)'
3248 _DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -showIncludes -Zs'
3251 if $_cc -nologo- 2>&1 | grep -q Linker; then
3258 _flags_filter=msvc_flags
3260 _ld_path='-libpath:'
3262 elif $_cc 2>&1 | grep -q Intel; then
3264 _ident=$($_cc 2>&1 | head -n1)
3265 _depflags='-QMMD -QMF$(@:.o=.d) -QMT$@'
3266 # Not only is O3 broken on 13.x+ but it is slower on all previous
3267 # versions (tested) as well.
3269 _cflags_size="-O1 -Oi" # -O1 without -Oi miscompiles stuff
3270 if $_cc 2>&1 | grep -q Linker; then
3277 _flags_filter=icl_flags
3279 _ld_path='-libpath:'
3280 # -Qdiag-error to make icl error when seeing certain unknown arguments
3281 _flags='-nologo -Qdiag-error:4044,10157'
3282 # -Qvec- -Qsimd- to prevent miscompilation, -GS for consistency
3283 # with MSVC which enables it by default.
3284 _cflags='-Qms0 -Qvec- -Qsimd- -GS'
3285 elif $_cc -? 2>/dev/null | grep -q 'LLVM.*Linker'; then
3286 # lld can emulate multiple different linkers; in ms link.exe mode,
3287 # the -? parameter gives the help output which contains an identifyable
3288 # string, while it gives an error in other modes.
3290 # The link.exe mode doesn't have a switch for getting the version,
3291 # but we can force it back to gnu mode and get the version from there.
3292 _ident=$($_cc -flavor gnu --version)
3294 _flags_filter=msvc_flags
3296 _ld_path='-libpath:'
3297 elif $_cc --version 2>/dev/null | grep -q ^cparser; then
3299 _ident=$($_cc --version | head -n1)
3303 _flags_filter=cparser_flags
3306 eval ${pfx}_type=\$_type
3307 eval ${pfx}_ident=\$_ident
3311 eval ${1}_C=\${_cc_c-\${${1}_C}}
3312 eval ${1}_E=\${_cc_e-\${${1}_E}}
3313 eval ${1}_O=\${_cc_o-\${${1}_O}}
3315 if [ -n "$_depflags" ]; then
3316 eval ${1}_DEPFLAGS=\$_depflags
3318 eval ${1}DEP=\${_DEPCMD:-\$DEPCMD}
3319 eval ${1}DEP_FLAGS=\${_DEPFLAGS:-\$DEPFLAGS}
3320 eval DEP${1}FLAGS=\$_flags
3325 cflags_filter=$_flags_filter
3326 cflags_speed=$_cflags_speed
3327 cflags_size=$_cflags_size
3328 cflags_noopt=$_cflags_noopt
3329 add_cflags $_flags $_cflags
3330 cc_ldflags=$_ldflags
3333 probe_cc hostcc "$host_cc"
3334 host_cflags_filter=$_flags_filter
3335 add_host_cflags $_flags $_cflags
3338 test -n "$cc_type" && enable $cc_type ||
3339 warn "Unknown C compiler $cc, unable to select optimal CFLAGS"
3341 : ${as_default:=$cc}
3342 : ${objcc_default:=$cc}
3343 : ${dep_cc_default:=$cc}
3344 : ${ld_default:=$cc}
3345 : ${host_ld_default:=$host_cc}
3346 set_default ar as objcc dep_cc ld host_ld
3349 asflags_filter=$_flags_filter
3350 add_asflags $_flags $_cflags
3353 probe_cc objcc "$objcc"
3354 objcflags_filter=$_flags_filter
3355 add_objcflags $_flags $_cflags
3359 ldflags_filter=$_flags_filter
3360 add_ldflags $_flags $_ldflags
3361 test "$cc_type" != "$ld_type" && add_ldflags $cc_ldflags
3363 LD_LIB=${_ld_lib-$LD_LIB}
3364 LD_PATH=${_ld_path-$LD_PATH}
3366 probe_cc hostld "$host_ld"
3367 host_ldflags_filter=$_flags_filter
3368 add_host_ldflags $_flags $_ldflags
3369 HOSTLD_O=${_ld_o-$HOSTLD_O}
3371 if [ -z "$CC_DEPFLAGS" ] && [ "$dep_cc" != "$cc" ]; then
3372 probe_cc depcc "$dep_cc"
3373 CCDEP=${_DEPCMD:-$DEPCMD}
3374 CCDEP_FLAGS=${_DEPFLAGS:=$DEPFLAGS}
3378 if $ar 2>&1 | grep -q Microsoft; then
3381 elif $ar 2>&1 | grep -q 'Texas Instruments'; then
3384 elif $ar 2>&1 | grep -q 'Usage: ar.*-X.*any'; then
3385 arflags='-Xany -r -c'
3392 add_cflags $extra_cflags
3393 add_objcflags $extra_objcflags
3394 add_asflags $extra_cflags
3396 if test -n "$sysroot"; then
3399 add_cppflags --sysroot="$sysroot"
3400 add_ldflags --sysroot="$sysroot"
3403 add_cppflags -I"$sysinclude"
3404 add_ldflags --sysroot="$sysroot"
3409 if test "$cpu" = host; then
3410 enabled cross_compile &&
3411 die "--cpu=host makes no sense when cross-compiling."
3416 $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
3418 s/.*$1=\\([^ ]*\\).*/\\1/
3423 cpu=$(check_native -march || check_native -mcpu)
3427 test "${cpu:-host}" = host &&
3428 die "--cpu=host not supported with compiler $cc"
3431 # Deal with common $arch aliases
3455 "Power Macintosh"|ppc*|powerpc*)
3470 i[3-6]86|i86pc|BePC|x86pc|x86_64|amd64)
3475 is_in $arch $ARCH_LIST || warn "unknown architecture $arch"
3478 # Add processor-specific flags
3479 if enabled aarch64; then
3483 cpuflags="-march=$cpu"
3486 cpuflags="-mcpu=$cpu"
3490 elif enabled alpha; then
3492 cpuflags="-mcpu=$cpu"
3494 elif enabled arm; then
3497 check_cpp_condition stddef.h \
3498 "defined __ARM_ARCH_${1}__ || defined __TARGET_ARCH_${2:-$1}" \
3503 if check_arm_arch 4; then echo armv4
3504 elif check_arm_arch 4T; then echo armv4t
3505 elif check_arm_arch 5; then echo armv5
3506 elif check_arm_arch 5E; then echo armv5e
3507 elif check_arm_arch 5T; then echo armv5t
3508 elif check_arm_arch 5TE; then echo armv5te
3509 elif check_arm_arch 5TEJ; then echo armv5te
3510 elif check_arm_arch 6; then echo armv6
3511 elif check_arm_arch 6J; then echo armv6j
3512 elif check_arm_arch 6K; then echo armv6k
3513 elif check_arm_arch 6Z; then echo armv6z
3514 elif check_arm_arch 6ZK; then echo armv6zk
3515 elif check_arm_arch 6T2; then echo armv6t2
3516 elif check_arm_arch 7; then echo armv7
3517 elif check_arm_arch 7A 7_A; then echo armv7-a
3518 elif check_arm_arch 7S; then echo armv7-a
3519 elif check_arm_arch 7R 7_R; then echo armv7-r
3520 elif check_arm_arch 7M 7_M; then echo armv7-m
3521 elif check_arm_arch 7EM 7E_M; then echo armv7-m
3522 elif check_arm_arch 8A 8_A; then echo armv8-a
3526 [ "$cpu" = generic ] && cpu=$(probe_arm_arch)
3530 cpuflags="-march=$cpu"
3531 subarch=$(echo $cpu | sed 's/[^a-z0-9]//g')
3534 cpuflags="-mcpu=$cpu"
3536 cortex-a*) subarch=armv7a ;;
3537 cortex-r*) subarch=armv7r ;;
3538 cortex-m*) enable thumb; subarch=armv7m ;;
3539 arm11*) subarch=armv6 ;;
3540 arm[79]*e*|arm9[24]6*|arm96*|arm102[26]) subarch=armv5te ;;
3541 armv4*|arm7*|arm9[24]*) subarch=armv4 ;;
3542 *) subarch=$(probe_arm_arch) ;;
3548 armv5t*) enable fast_clz ;;
3549 armv[6-8]*) enable fast_clz fast_unaligned ;;
3552 elif enabled avr32; then
3557 cpuflags="-mpart=$cpu"
3561 cpuflags="-march=$cpu"
3565 cpuflags="-mcpu=$cpu"
3569 cpuflags="-march=$cpu"
3573 elif enabled bfin; then
3575 cpuflags="-mcpu=$cpu"
3577 elif enabled mips; then
3579 cpuflags="-march=$cpu"
3581 elif enabled ppc; then
3585 case $(tolower $cpu) in
3586 601|ppc601|powerpc601)
3587 cpuflags="-mcpu=601"
3590 603*|ppc603*|powerpc603*)
3591 cpuflags="-mcpu=603"
3594 604*|ppc604*|powerpc604*)
3595 cpuflags="-mcpu=604"
3598 g3|75*|ppc75*|powerpc75*)
3599 cpuflags="-mcpu=750"
3602 g4|745*|ppc745*|powerpc745*)
3603 cpuflags="-mcpu=7450"
3606 74*|ppc74*|powerpc74*)
3607 cpuflags="-mcpu=7400"
3610 g5|970|ppc970|powerpc970)
3611 cpuflags="-mcpu=970"
3615 cpuflags="-mcpu=$cpu"
3619 cpuflags="-mcpu=$cpu"
3623 cpuflags="-mcpu=cell"
3628 cpuflags="-mcpu=e500mc"
3632 cpuflags="-mcpu=8548 -mhard-float -mfloat-gprs=double"
3637 cpuflags="-mcpu=8540 -mhard-float"
3643 elif enabled sparc; then
3646 cypress|f93[04]|tsc701|sparcl*|supersparc|hypersparc|niagara|v[789])
3647 cpuflags="-mcpu=$cpu"
3649 ultrasparc*|niagara[234])
3650 cpuflags="-mcpu=$cpu"
3654 elif enabled x86; then
3658 cpuflags="-march=$cpu"
3662 # targets that do NOT support nopl and conditional mov (cmov)
3663 pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
3664 cpuflags="-march=$cpu"
3667 # targets that do support nopl and conditional mov (cmov)
3668 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*)
3669 cpuflags="-march=$cpu"
3673 # targets that do support conditional mov but on which it's slow
3674 pentium4|pentium4m|prescott|nocona)
3675 cpuflags="-march=$cpu"
3683 if [ "$cpu" != generic ]; then
3684 add_cflags $cpuflags
3685 add_asflags $cpuflags
3686 test "$cc_type" = "$ld_type" && add_ldflags $cpuflags
3689 # compiler sanity check
3691 int main(void){ return 0; }
3693 if test "$?" != 0; then
3694 echo "$cc is unable to create an executable file."
3695 if test -z "$cross_prefix" && ! enabled cross_compile ; then
3696 echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
3697 echo "Only do this if you know what cross compiling means."
3699 die "C compiler test failed."
3702 add_cppflags -D_ISOC99_SOURCE
3703 check_cflags -std=c99
3704 check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
3707 check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
3711 add_host_cppflags -D_ISOC99_SOURCE
3712 check_host_cflags -std=c99
3713 check_host_cflags -Wall
3714 check_host_cflags -O3
3720 check_code cc "" "int test[2*($expr) - 1]" &&
3721 subarch=$arch64 || subarch=$arch32
3729 check_64bit mips mips64 '_MIPS_SIM > 1'
3733 check_64bit parisc parisc64 'sizeof(void *) > 4'
3737 check_64bit ppc ppc64 'sizeof(void *) > 4'
3741 check_64bit s390 s390x 'sizeof(void *) > 4'
3745 check_64bit sparc sparc64 'sizeof(void *) > 4'
3749 check_64bit x86_32 x86_64 'sizeof(void *) > 4'
3750 if test "$subarch" = "x86_64"; then
3757 enabled spic && enable_weak pic
3763 add_cppflags '-I\$(SRC_PATH)/compat/aix'
3764 enabled shared && add_ldflags -Wl,-brtl
3768 enable section_data_rel_ro
3769 SLIB_INSTALL_NAME='$(SLIBNAME)'
3771 SHFLAGS='-shared -Wl,-soname,$(SLIBNAME)'
3774 prefix_default="/boot/common"
3775 network_extralibs="-lnetwork"
3779 SHFLAGS='-shared -Wl,-h,$$(@F)'
3780 enabled x86 && SHFLAGS="-mimpure-text $SHFLAGS"
3781 network_extralibs="-lsocket -lnsl"
3782 # When using suncc to build, the Solaris linker will mark
3783 # an executable with each instruction set encountered by
3784 # the Solaris assembler. As our libraries contain their own
3785 # guards for processor-specific code, instead suppress
3786 # generation of the HWCAPS ELF section on Solaris x86 only.
3787 enabled_all suncc x86 &&
3788 echo "hwcap_1 = OVERRIDE;" > mapfile &&
3789 add_ldflags -Wl,-M,mapfile
3790 nm_default='nm -P -g'
3792 VERSION_SCRIPT_POSTPROCESS_CMD='perl $(SRC_PATH)/compat/solaris/make_sunver.pl - $(OBJS)'
3796 oss_indev_extralibs="-lossaudio"
3797 oss_outdev_extralibs="-lossaudio"
3802 SLIB_INSTALL_NAME='$(SLIBNAME).$(LIBMAJOR).$(LIBMINOR)'
3804 oss_indev_extralibs="-lossaudio"
3805 oss_outdev_extralibs="-lossaudio"
3813 add_extralibs -lpoll -lgnugetopt
3816 enabled ppc && add_asflags -force_cpusubtype_ALL
3817 SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR)'
3818 enabled x86_32 && append SHFLAGS -Wl,-read_only_relocs,suppress
3819 add_ldflags -Wl,-dynamic,-search_paths_first
3821 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
3822 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
3824 enabled x86_64 && objformat="macho64"
3825 enabled_any pic shared ||
3826 { check_cflags -mdynamic-no-pic && add_asflags -mdynamic-no-pic; }
3827 check_header dispatch/dispatch.h &&
3828 add_cppflags '-I\$(SRC_PATH)/compat/dispatch_semaphore'
3831 die "Native MSYS builds are discouraged, please use the MINGW environment."
3834 if test $target_os = "mingw32ce"; then
3840 if enabled x86_64; then
3841 LIBTARGET="i386:x86-64"
3842 elif enabled arm; then
3845 check_ldflags -Wl,--nxcompat
3846 check_ldflags -Wl,--dynamicbase
3847 shlibdir_default="$bindir_default"
3850 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
3851 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
3852 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)'
3853 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
3855 SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
3856 SLIB_INSTALL_EXTRA_LIB='lib$(SLIBNAME:$(SLIBSUF)=.dll.a) $(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
3857 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'
3859 dlltool="${cross_prefix}dlltool"
3865 if enabled shared; then
3866 # Link to the import library instead of the normal static library
3869 # Cannot build both shared and static libs with MSVC or icl.
3872 shlibdir_default="$bindir_default"
3875 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
3876 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
3877 SLIB_CREATE_DEF_CMD='$(SRC_PATH)/compat/windows/makedef $(SUBDIR)lib$(NAME).ver $(OBJS) > $$(@:$(SLIBSUF)=.def)'
3878 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
3880 SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
3881 SLIB_INSTALL_EXTRA_LIB='$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
3882 SHFLAGS='-dll -def:$$(@:$(SLIBSUF)=.def) -implib:$(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib)'
3889 shlibdir_default="$bindir_default"
3892 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
3893 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
3894 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
3896 SLIB_INSTALL_EXTRA_LIB='lib$(FULLNAME).dll.a'
3897 SHFLAGS='-shared -Wl,--out-implib,$(SUBDIR)lib$(FULLNAME).dll.a'
3901 *-dos|freedos|opendos)
3902 network_extralibs="-lsocket"
3905 add_cppflags -U__STRICT_ANSI__
3909 enable section_data_rel_ro
3913 ranlib="echo ignoring ranlib"
3918 add_cppflags -D_GNU_SOURCE
3919 add_ldflags -Zomf -Zbin-files -Zargs-wild -Zmap
3920 SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
3924 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
3925 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
3926 SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
3927 echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
3928 echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
3929 echo EXPORTS >> $(SUBDIR)$(NAME).def; \
3930 emxexp $(OBJS) >> $(SUBDIR)$(NAME).def'
3931 SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
3932 emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
3933 SLIB_INSTALL_EXTRA_LIB='$(LIBPREF)$(NAME)_dll.a $(LIBPREF)$(NAME)_dll.lib'
3937 add_cppflags -D_BSD_SOURCE
3942 add_cppflags -D_QNX_SOURCE
3943 network_extralibs="-lsocket"
3948 add_cflags --include=$sysinclude/gcce/gcce.h -fvisibility=default
3949 add_cppflags -D__GCCE__ -D__SYMBIAN32__ -DSYMBIAN_OE_POSIX_SIGNALS
3950 add_ldflags -Wl,--target1-abs,--no-undefined \
3951 -Wl,-Ttext,0x80000,-Tdata,0x1000000 -shared \
3952 -Wl,--entry=_E32Startup -Wl,-u,_E32Startup
3953 add_extralibs -l:eexe.lib -l:usrt2_2.lib -l:dfpaeabi.dso \
3954 -l:drtaeabi.dso -l:scppnwdl.dso -lsupc++ -lgcc \
3955 -l:libc.dso -l:libm.dso -l:euser.dso -l:libcrt0.lib
3958 add_cppflags -D_OSF_SOURCE -D_POSIX_PII -D_REENTRANT
3963 add_cppflags -D_C99_SNPRINTF_EXTENSION \
3964 -D_REENTRANT_SOURCE \
3965 -D_RESEARCH_SOURCE \
3968 add_compat strtod.o strtod=avpriv_strtod
3969 network_extralibs='-lbsd'
3970 exeobjs=compat/plan9/main.o
3976 die "Unknown OS '$target_os'."
3980 # determine libc flavour
3985 # uclibc defines __GLIBC__, so it needs to be checked before glibc.
3986 if check_${pfx}cpp_condition features.h "defined __UCLIBC__"; then
3987 eval ${pfx}libc_type=uclibc
3988 add_${pfx}cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
3989 elif check_${pfx}cpp_condition features.h "defined __GLIBC__"; then
3990 eval ${pfx}libc_type=glibc
3991 add_${pfx}cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
3992 # MinGW headers can be installed on Cygwin, so check for newlib first.
3993 elif check_${pfx}cpp_condition newlib.h "defined _NEWLIB_VERSION"; then
3994 eval ${pfx}libc_type=newlib
3995 add_${pfx}cppflags -U__STRICT_ANSI__
3996 # MinGW64 is backwards compatible with MinGW32, so check for it first.
3997 elif check_${pfx}cpp_condition _mingw.h "defined __MINGW64_VERSION_MAJOR"; then
3998 eval ${pfx}libc_type=mingw64
3999 add_${pfx}cppflags -U__STRICT_ANSI__ -D__USE_MINGW_ANSI_STDIO=1
4000 eval test \$${pfx_no_}cc_type = "gcc" &&
4001 add_${pfx}cppflags -D__printf__=__gnu_printf__
4002 elif check_${pfx}cpp_condition _mingw.h "defined __MINGW_VERSION" ||
4003 check_${pfx}cpp_condition _mingw.h "defined __MINGW32_VERSION"; then
4004 eval ${pfx}libc_type=mingw32
4005 check_${pfx}cpp_condition _mingw.h "__MINGW32_MAJOR_VERSION > 3 || \
4006 (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
4007 die "ERROR: MinGW32 runtime version must be >= 3.15."
4008 add_${pfx}cppflags -U__STRICT_ANSI__ -D__USE_MINGW_ANSI_STDIO=1
4009 check_${pfx}cpp_condition _mingw.h "__MSVCRT_VERSION__ < 0x0700__" &&
4010 add_${pfx}cppflags -D__MSVCRT_VERSION__=0x0700
4011 eval test \$${pfx_no_}cc_type = "gcc" &&
4012 add_${pfx}cppflags -D__printf__=__gnu_printf__
4013 elif check_${pfx}cpp_condition crtversion.h "defined _VC_CRT_MAJOR_VERSION"; then
4014 eval ${pfx}libc_type=msvcrt
4015 if check_${pfx}cpp_condition crtversion.h "_VC_CRT_MAJOR_VERSION < 14"; then
4016 if [ "$pfx" = host_ ]; then
4017 add_host_cppflags -Dsnprintf=_snprintf
4019 add_compat strtod.o strtod=avpriv_strtod
4020 add_compat msvcrt/snprintf.o snprintf=avpriv_snprintf \
4021 _snprintf=avpriv_snprintf \
4022 vsnprintf=avpriv_vsnprintf
4025 add_${pfx}cppflags -D_USE_MATH_DEFINES -D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_WARNINGS
4026 # The MSVC 2010 headers (Win 7.0 SDK) set _WIN32_WINNT to
4027 # 0x601 by default unless something else is set by the user.
4028 # This can easily lead to us detecting functions only present
4029 # in such new versions and producing binaries requiring windows 7.0.
4030 # Therefore explicitly set the default to XP unless the user has
4031 # set something else on the command line.
4032 # Don't do this if WINAPI_FAMILY is set and is set to a non-desktop
4033 # family. For these cases, configure is free to use any functions
4034 # found in the SDK headers by default. (Alternatively, we could force
4035 # _WIN32_WINNT to 0x0602 in that case.)
4036 check_${pfx}cpp_condition stdlib.h "defined(_WIN32_WINNT)" ||
4037 { check_${pfx}cpp <<EOF && add_${pfx}cppflags -D_WIN32_WINNT=0x0502; }
4038 #ifdef WINAPI_FAMILY
4039 #include <winapifamily.h>
4040 #if !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
4045 if [ "$pfx" = "" ]; then
4046 check_func strtoll || add_cflags -Dstrtoll=_strtoi64
4048 elif check_${pfx}cpp_condition stddef.h "defined __KLIBC__"; then
4049 eval ${pfx}libc_type=klibc
4050 elif check_${pfx}cpp_condition sys/cdefs.h "defined __BIONIC__"; then
4051 eval ${pfx}libc_type=bionic
4052 elif check_${pfx}cpp_condition sys/brand.h "defined LABELED_BRAND_NAME"; then
4053 eval ${pfx}libc_type=solaris
4054 add_${pfx}cppflags -D__EXTENSIONS__ -D_XOPEN_SOURCE=600
4056 eval ${pfx}libc_type=default
4057 add_${pfx}cppflags -D_DEFAULT_SOURCE
4062 test -n "$libc_type" && enable libc_$libc_type
4064 test -n "$host_libc_type" && enable host_libc_$host_libc_type
4068 add_compat strtod.o strtod=avpriv_strtod
4072 # hacks for compiler/libc/os combinations
4074 if enabled_all tms470 libc_glibc; then
4075 CPPFLAGS="-I${source_path}/compat/tms470 ${CPPFLAGS}"
4076 add_cppflags -D__USER_LABEL_PREFIX__=
4077 add_cppflags -D__builtin_memset=memset
4078 add_cppflags -D__gnuc_va_list=va_list -D_VA_LIST_DEFINED
4079 add_cflags -pds=48 # incompatible redefinition of macro
4082 if enabled_all ccc libc_glibc; then
4083 add_ldflags -Wl,-z,now # calls to libots crash without this
4086 check_compile_assert flt_lim "float.h limits.h" "DBL_MAX == (double)DBL_MAX" ||
4087 add_cppflags '-I\$(SRC_PATH)/compat/float'
4090 echo "$*" | sed 's/%/%25/g;s/:/%3a/g'
4093 echo "config:$arch:$subarch:$cpu:$target_os:$(esc $cc_ident):$(esc $LIBAV_CONFIGURATION)" >config.fate
4095 check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable_weak pic
4097 set_default $PATHS_LIST
4100 # we need to build at least one lib type
4101 if ! enabled_any static shared; then
4103 At least one library type must be built.
4104 Specify --enable-static to build the static libraries or --enable-shared to
4105 build the shared libraries as well. To only build the shared libraries specify
4106 --disable-static in addition to --enable-shared.
4111 die_license_disabled() {
4112 enabled $1 || { enabled $v && die "$v is $1 and --enable-$1 is not specified."; }
4115 map "die_license_disabled gpl" $EXTERNAL_LIBRARY_GPL_LIST
4116 map "die_license_disabled nonfree" $EXTERNAL_LIBRARY_NONFREE_LIST $HWACCEL_LIBRARY_NONFREE_LIST
4117 map "die_license_disabled version3" $EXTERNAL_LIBRARY_VERSION3_LIST
4119 enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
4121 disabled optimizations || check_cflags -fomit-frame-pointer
4124 disabled pic && return
4127 case "$target_os" in
4137 enabled pic && enable_weak_pic
4139 check_cc <<EOF || die "Symbol mangling check failed."
4142 sym=$($nm $TMPO | awk '/ff_extern/{ print substr($0, match($0, /[^ \t]*ff_extern/)) }')
4143 extern_prefix=${sym%%ff_extern*}
4145 check_cc <<EOF && enable_weak inline_asm
4146 void foo(void) { __asm__ volatile ("" ::); }
4150 for restrict_keyword in restrict __restrict__ __restrict; do
4151 check_cc <<EOF && _restrict=$restrict_keyword && break
4152 void foo(char * $restrict_keyword p);
4156 check_cc <<EOF && enable pragma_deprecated
4157 void foo(void) { _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") }
4160 check_cc <<EOF && enable attribute_packed
4161 struct { int x; } __attribute__((packed)) x;
4164 check_cc <<EOF && enable attribute_may_alias
4165 union { int x; } __attribute__((may_alias)) x;
4168 check_cc <<EOF || die "endian test failed"
4169 unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
4171 od -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
4174 log "check_gas using '$as' as AS"
4175 # :vararg is used on aarch64, arm and ppc altivec
4176 check_as <<EOF || return 1
4177 .macro m n, y:vararg=0
4182 # .altmacro is only used in arm asm
4183 ! enabled arm || check_as <<EOF || return 1
4190 if enabled_any arm aarch64 || enabled_all ppc altivec && enabled asm; then
4192 enabled_any arm aarch64 && nogas=die
4193 enabled_all ppc altivec && nogas=warn
4197 arm*) gaspp_as_type=armasm; as_noop=-h ;;
4198 gcc) gaspp_as_type=gas ;;
4199 *) gaspp_as_type=$as_type ;;
4202 [ $target_os = "darwin" ] && gaspp_as_type="apple-$gaspp_as_type"
4204 check_cmd gas-preprocessor.pl -arch $arch -as-type $gaspp_as_type -- $as $as_noop &&
4205 gas="gas-preprocessor.pl -arch $arch -as-type $gaspp_as_type -- $as"
4207 if ! check_gas ; then
4210 $nogas "GNU assembler not found, install/update gas-preprocessor"
4213 check_as <<EOF && enable as_func
4219 check_inline_asm inline_asm_labels '"1:\n"'
4221 if enabled aarch64; then
4222 enabled armv8 && check_insn armv8 'prfm pldl1strm, [x0]'
4223 # internal assembler in clang 3.3 does not support this instruction
4224 enabled neon && check_insn neon 'ext v0.8B, v0.8B, v1.8B, #1'
4225 enabled vfp && check_insn vfp 'fmadd d0, d0, d1, d2'
4227 map 'enabled_any ${v}_external ${v}_inline || disable $v' $ARCH_EXT_LIST_ARM
4229 elif enabled alpha; then
4233 elif enabled arm; then
4235 enabled msvc && check_cpp_condition stddef.h "defined _M_ARMT" && enable thumb
4236 check_cpp_condition stddef.h "defined __thumb__" && enable_weak thumb
4237 enabled thumb && check_cflags -mthumb || check_cflags -marm
4239 if check_cpp_condition stddef.h "defined __ARM_PCS_VFP"; then
4241 elif check_cpp_condition stddef.h "defined _M_ARM_FP && _M_ARM_FP >= 30"; then
4243 elif ! check_cpp_condition stddef.h "defined __ARM_PCS || defined __SOFTFP__" && [ $target_os != darwin ]; then
4244 case "${cross_prefix:-$cc}" in
4245 *hardfloat*) enable vfp_args; fpabi=vfp ;;
4246 *) check_ld <<EOF && enable vfp_args && fpabi=vfp || fpabi=soft ;;
4247 __asm__ (".eabi_attribute 28, 1");
4248 int main(void) { return 0; }
4251 warn "Compiler does not indicate floating-point ABI, guessing $fpabi."
4254 enabled armv5te && check_insn armv5te 'qadd r0, r0, r0'
4255 enabled armv6 && check_insn armv6 'sadd16 r0, r0, r0'
4256 enabled armv6t2 && check_insn armv6t2 'movt r0, #0'
4257 enabled neon && check_insn neon 'vadd.i16 q0, q0, q0'
4258 enabled vfp && check_insn vfp 'fadds s0, s0, s0'
4259 enabled vfpv3 && check_insn vfpv3 'vmov.f32 s0, #1.0'
4261 [ $target_os = linux ] || [ $target_os = android ] ||
4262 map 'enabled_any ${v}_external ${v}_inline || disable $v' \
4265 check_inline_asm asm_mod_q '"add r0, %Q0, %R0" :: "r"((long long)0)'
4267 check_as <<EOF && enable as_dn_directive
4271 check_as <<EOF && enable as_fpu_directive
4275 # llvm's integrated assembler supports .object_arch from llvm 3.5
4276 [ "$objformat" = elf ] && check_as <<EOF && enable as_object_arch
4280 [ $target_os != win32 ] && enabled_all armv6t2 shared !pic && enable_weak_pic
4282 elif enabled mips; then
4284 check_inline_asm loongson '"dmult.g $1, $2, $3"'
4286 # make sure that only an instruction set is enabled
4287 disable mips64r6 mips32r6 mips64r2 mips32r2 mips64r1 mips32r1
4289 if enabled mips64; then
4290 check_inline_asm mips64r6 '"dlsa $0, $0, $0, 1"' ||
4291 check_inline_asm mips64r2 '"dext $0, $0, 0, 1"' ||
4292 check_inline_asm mips64r1 '"daddi $0, $0, 0"'
4294 check_inline_asm mips32r6 '"aui $0, $0, 0"' ||
4295 check_inline_asm mips32r2 '"ext $0, $0, 0, 1"' ||
4296 check_inline_asm mips32r1 '"addi $0, $0, 0"'
4299 elif enabled parisc; then
4301 if enabled gcc; then
4302 case $($cc -dumpversion) in
4303 4.[3-8].*) check_cflags -fno-optimize-sibling-calls ;;
4307 elif enabled ppc; then
4309 enable local_aligned_8 local_aligned_16 local_aligned_32
4311 check_inline_asm dcbzl '"dcbzl 0, %0" :: "r"(0)'
4312 check_inline_asm ibm_asm '"add 0, 0, 0"'
4313 check_inline_asm ppc4xx '"maclhw r10, r11, r12"'
4314 check_inline_asm xform_asm '"lwzx %1, %y0" :: "Z"(*(int*)0), "r"(0)'
4316 # AltiVec flags: The FSF version of GCC differs from the Apple version
4317 if enabled altivec; then
4318 check_cflags -maltivec -mabi=altivec &&
4319 { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
4320 check_cflags -faltivec
4322 # check if our compiler supports Motorola AltiVec C API
4323 check_cc <<EOF || disable altivec
4326 vector signed int v1 = (vector signed int) { 0 };
4327 vector signed int v2 = (vector signed int) { 1 };
4328 v1 = vec_add(v1, v2);
4333 enabled altivec || warn "Altivec disabled, possibly missing --cpu flag"
4336 if enabled vsx; then
4337 check_cflags -mvsx &&
4338 check_builtin vec_vsx_ld "altivec.h" "__builtin_vec_vsx_ld" || disable vsx
4341 if enabled power8; then
4342 check_cpp_condition "altivec.h" "defined(_ARCH_PWR8)" || disable power8
4345 elif enabled x86; then
4347 check_builtin rdtsc intrin.h "__rdtsc()"
4348 check_builtin mm_empty mmintrin.h "_mm_empty()"
4350 enable local_aligned_8 local_aligned_16 local_aligned_32
4352 # check whether EBP is available on x86
4353 # As 'i' is stored on the stack, this program will crash
4354 # if the base pointer is used to access it because the
4355 # base pointer is cleared in the inline assembly code.
4356 check_exec_crash <<EOF && enable ebp_available
4358 __asm__ volatile ("xorl %%ebp, %%ebp" ::: "%ebp");
4362 # check whether EBX is available on x86
4363 check_inline_asm ebx_available '""::"b"(0)' &&
4364 check_inline_asm ebx_available '"":::"%ebx"'
4366 # check whether xmm clobbers are supported
4367 check_inline_asm xmm_clobbers '"":::"%xmm0"'
4369 # check whether binutils is new enough to compile SSSE3/MMXEXT
4370 enabled ssse3 && check_inline_asm ssse3_inline '"pabsw %xmm0, %xmm0"'
4371 enabled mmxext && check_inline_asm mmxext_inline '"pmaxub %mm0, %mm1"'
4373 if ! disabled_any asm mmx yasm; then
4374 if check_cmd $yasmexe --version; then
4375 enabled x86_64 && yasm_extra="-m amd64"
4376 yasm_debug="-g dwarf2"
4377 elif check_cmd nasm -v; then
4379 yasm_debug="-g -F dwarf"
4380 enabled x86_64 && test "$objformat" = elf && objformat=elf64
4383 YASMFLAGS="-f $objformat $yasm_extra"
4384 enabled pic && append YASMFLAGS "-DPIC"
4385 test -n "$extern_prefix" && append YASMFLAGS "-DPREFIX"
4386 case "$objformat" in
4387 elf*) enabled debug && append YASMFLAGS $yasm_debug ;;
4390 check_yasm "movbe ecx, [5]" && enable yasm ||
4391 die "yasm/nasm not found or too old. Use --disable-yasm for a crippled build."
4392 check_yasm "vextracti128 xmm0, ymm0, 0" || disable avx2_external
4393 check_yasm "vpmacsdd xmm0, xmm1, xmm2, xmm3" || disable xop_external
4394 check_yasm "vfmadd132ps ymm0, ymm1, ymm2" || disable fma3_external
4395 check_yasm "vfmaddps ymm0, ymm1, ymm2, ymm3" || disable fma4_external
4396 check_yasm "CPU amdnop" || disable cpunop
4400 athlon*|opteron*|k8*|pentium|pentium-mmx|prescott|nocona|atom|geode)
4407 check_code cc arm_neon.h "int16x8_t test = vdupq_n_s16(0)" && enable intrinsics_neon
4409 check_ldflags -Wl,--as-needed
4411 if check_func dlopen; then
4413 elif check_func dlopen -ldl; then
4417 if ! disabled network; then
4418 check_func getaddrinfo $network_extralibs
4419 check_func inet_aton $network_extralibs
4421 check_type netdb.h "struct addrinfo"
4422 check_type netinet/in.h "struct group_source_req" -D_BSD_SOURCE
4423 check_type netinet/in.h "struct ip_mreq_source" -D_BSD_SOURCE
4424 check_type netinet/in.h "struct ipv6_mreq" -D_DARWIN_C_SOURCE
4425 check_type poll.h "struct pollfd"
4426 check_type netinet/sctp.h "struct sctp_event_subscribe"
4427 check_struct "sys/types.h sys/socket.h" "struct sockaddr" sa_len
4428 check_type netinet/in.h "struct sockaddr_in6"
4429 check_type "sys/types.h sys/socket.h" "struct sockaddr_storage"
4430 check_type "sys/types.h sys/socket.h" socklen_t
4432 # Prefer arpa/inet.h over winsock2
4433 if check_header arpa/inet.h ; then
4434 check_func closesocket
4435 elif check_header winsock2.h ; then
4436 check_func_headers winsock2.h closesocket -lws2 &&
4437 network_extralibs="-lws2" ||
4438 { check_func_headers winsock2.h closesocket -lws2_32 &&
4439 network_extralibs="-lws2_32"; } || disable winsock2_h network
4440 check_func_headers ws2tcpip.h getaddrinfo $network_extralibs
4442 check_type ws2tcpip.h socklen_t
4443 check_type ws2tcpip.h "struct addrinfo"
4444 check_type ws2tcpip.h "struct group_source_req"
4445 check_type ws2tcpip.h "struct ip_mreq_source"
4446 check_type ws2tcpip.h "struct ipv6_mreq"
4447 check_type winsock2.h "struct pollfd"
4448 check_struct winsock2.h "struct sockaddr" sa_len
4449 check_type ws2tcpip.h "struct sockaddr_in6"
4450 check_type ws2tcpip.h "struct sockaddr_storage"
4456 check_builtin atomic_cas_ptr atomic.h "void **ptr; void *oldval, *newval; atomic_cas_ptr(ptr, oldval, newval)"
4457 check_builtin machine_rw_barrier mbarrier.h "__machine_rw_barrier()"
4458 check_builtin MemoryBarrier windows.h "MemoryBarrier()"
4459 check_builtin sync_val_compare_and_swap "" "int *ptr; int oldval, newval; __sync_val_compare_and_swap(ptr, oldval, newval)"
4461 case "$custom_allocator" in
4463 # jemalloc by default does not use a prefix
4464 require libjemalloc jemalloc/jemalloc.h malloc -ljemalloc
4467 require_pkg_config libtcmalloc gperftools/tcmalloc.h tc_malloc
4472 check_func_headers malloc.h _aligned_malloc && enable aligned_malloc
4473 check_func ${malloc_prefix}memalign && enable memalign
4474 check_func ${malloc_prefix}posix_memalign && enable posix_memalign
4476 check_cpp_condition unistd.h "defined(_POSIX_MONOTONIC_CLOCK)" &&
4477 check_func_headers time.h clock_gettime || { check_func_headers time.h clock_gettime -lrt && add_extralibs -lrt && LIBRT="-lrt"; }
4481 check_func gethrtime
4483 check_func getrusage
4484 check_func gettimeofday
4487 check_func localtime_r
4488 check_func mach_absolute_time
4492 # Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
4493 check_func_headers time.h nanosleep || { check_func_headers time.h nanosleep -lrt && add_extralibs -lrt; }
4494 check_func sched_getaffinity
4495 check_func setrlimit
4496 check_func strerror_r
4501 check_func_headers io.h setmode
4502 check_func_headers stdlib.h getenv
4504 check_func_headers windows.h CoTaskMemFree -lole32
4505 check_func_headers windows.h GetProcessAffinityMask
4506 check_func_headers windows.h GetProcessTimes
4507 check_func_headers windows.h GetSystemTimeAsFileTime
4508 check_func_headers windows.h LoadLibrary
4509 check_func_headers windows.h MapViewOfFile
4510 check_func_headers windows.h SetConsoleTextAttribute
4511 check_func_headers windows.h Sleep
4512 check_func_headers windows.h VirtualAlloc
4513 check_struct windows.h "CONDITION_VARIABLE" Ptr
4515 check_header direct.h
4516 check_header dlfcn.h
4517 check_header d3d11.h
4519 check_header dxva2api.h
4521 check_header mach/mach_time.h
4522 check_header malloc.h
4524 check_header sys/mman.h
4525 check_header sys/param.h
4526 check_header sys/resource.h
4527 check_header sys/select.h
4528 check_header sys/time.h
4529 check_header sys/un.h
4530 check_header unistd.h
4531 check_header valgrind/valgrind.h
4532 check_header vdpau/vdpau.h
4533 check_header vdpau/vdpau_x11.h
4534 check_header VideoDecodeAcceleration/VDADecoder.h
4535 check_header windows.h
4536 check_header X11/extensions/XvMClib.h
4538 check_lib2 "windows.h shellapi.h" CommandLineToArgvW -lshell32
4539 check_lib2 "windows.h wincrypt.h" CryptGenRandom -ladvapi32
4540 check_lib2 "windows.h psapi.h" GetProcessMemoryInfo -lpsapi
4542 check_struct "sys/time.h sys/resource.h" "struct rusage" ru_maxrss
4544 check_type "windows.h dxva.h" "DXVA_PicParams_HEVC" -DWINAPI_FAMILY=WINAPI_FAMILY_DESKTOP_APP -D_CRT_BUILD_DESKTOP_APP=0
4545 check_type "windows.h d3d11.h" "ID3D11VideoDecoder"
4546 check_type "d3d9.h dxva2api.h" DXVA2_ConfigPictureDecode -D_WIN32_WINNT=0x0602
4548 check_type "va/va.h va/va_vpp.h" "VAProcPipelineParameterBuffer"
4549 check_type "va/va.h va/va_enc_h264.h" "VAEncPictureParameterBufferH264"
4550 check_type "va/va.h va/va_enc_hevc.h" "VAEncPictureParameterBufferHEVC"
4551 check_type "va/va.h va/va_enc_jpeg.h" "VAEncPictureParameterBufferJPEG"
4553 check_type "vdpau/vdpau.h" "VdpPictureInfoHEVC"
4555 if ! disabled w32threads && ! enabled pthreads; then
4556 check_func_headers "windows.h process.h" _beginthreadex &&
4557 enable w32threads || disable w32threads
4560 # check for some common methods of building with pthread support
4561 # do this before the optional library checks as some of them require pthreads
4562 if ! disabled pthreads && ! enabled w32threads; then
4564 if check_func pthread_join -pthread; then
4566 add_extralibs -pthread
4567 elif check_func pthread_join -pthreads; then
4568 add_cflags -pthreads
4569 add_extralibs -pthreads
4570 elif check_func pthread_join -lpthreadGC2; then
4571 add_extralibs -lpthreadGC2
4572 elif check_lib pthread.h pthread_join -lpthread; then
4574 elif ! check_func pthread_join; then
4580 check_builtin sem_timedwait semaphore.h "sem_t *s; sem_init(s,0,0); sem_timedwait(s,0); sem_destroy(s)"
4582 disabled zlib || check_lib zlib.h zlibVersion -lz || disable zlib
4583 disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
4585 check_lib math.h sin -lm && LIBM="-lm"
4586 enabled vaapi && require vaapi va/va.h vaInitialize -lva
4592 for func in $MATH_FUNCS; do
4593 eval check_mathfunc $func \${${func}_args:-1}
4596 # these are off by default, so fail if requested and not available
4597 enabled avisynth && { check_lib2 "avisynth/avisynth_c.h windows.h" LoadLibrary ||
4598 check_lib2 "avxsynth/avxsynth_c.h dlfcn.h" dlopen -ldl ||
4599 die "ERROR: LoadLibrary/dlopen not found, or avisynth header not found"; }
4600 enabled cuda && check_lib cuda.h cuInit -lcuda
4601 enabled frei0r && { check_header frei0r.h || die "ERROR: frei0r.h header not found"; }
4602 enabled gnutls && require_pkg_config gnutls gnutls/gnutls.h gnutls_global_init
4603 enabled libbs2b && require_pkg_config libbs2b bs2b.h bs2b_open
4604 enabled libdcadec && require libdcadec libdcadec/dca_context.h dcadec_context_create -ldcadec
4605 enabled libfaac && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
4606 enabled libfdk_aac && require_pkg_config fdk-aac "fdk-aac/aacenc_lib.h" aacEncOpen
4607 enabled libfontconfig && require_pkg_config fontconfig "fontconfig/fontconfig.h" FcInit
4608 enabled libfreetype && require_pkg_config freetype2 "ft2build.h FT_FREETYPE_H" FT_Init_FreeType
4609 enabled libgsm && { for gsm_hdr in "gsm.h" "gsm/gsm.h"; do
4610 check_lib "${gsm_hdr}" gsm_create -lgsm && break;
4611 done || die "ERROR: libgsm not found"; }
4612 enabled libhdcd && require_pkg_config libhdcd "hdcd/hdcd_simple.h" hdcd_new
4613 enabled libilbc && require libilbc ilbc.h WebRtcIlbcfix_InitDecode -lilbc
4614 enabled libkvazaar && require_pkg_config "kvazaar >= 0.8.1" kvazaar.h kvz_api_get
4615 enabled libmfx && require_pkg_config libmfx "mfx/mfxvideo.h" MFXInit
4616 enabled libmp3lame && require "libmp3lame >= 3.98.3" lame/lame.h lame_set_VBR_quality -lmp3lame
4617 enabled libnpp && require libnpp npp.h nppGetLibVersion -lnppi -lnppc
4618 enabled libopencore_amrnb && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb
4619 enabled libopencore_amrwb && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb
4620 enabled libopencv && require_pkg_config opencv opencv/cv.h cvCreateImageHeader
4621 enabled libopenh264 && require_pkg_config openh264 wels/codec_api.h WelsGetCodecVersion
4622 enabled libopenjpeg && { { check_header openjpeg.h && check_lib2 openjpeg.h opj_version -lopenjpeg -DOPJ_STATIC; } ||
4623 { require_pkg_config libopenjpeg1 openjpeg.h opj_version -DOPJ_STATIC; } }
4624 enabled libopus && require_pkg_config opus opus_multistream.h opus_multistream_decoder_create
4625 enabled libpulse && require_pkg_config libpulse-simple pulse/simple.h pa_simple_new
4626 enabled librtmp && require_pkg_config librtmp librtmp/rtmp.h RTMP_Socket
4627 enabled libschroedinger && require_pkg_config schroedinger-1.0 schroedinger/schro.h schro_init
4628 enabled libsnappy && require snappy snappy-c.h snappy_compress -lsnappy
4629 enabled libspeex && require_pkg_config speex speex/speex.h speex_decoder_init -lspeex
4630 enabled libtheora && require libtheora theora/theoraenc.h th_info_init -ltheoraenc -ltheoradec -logg
4631 enabled libtwolame && require libtwolame twolame.h twolame_init -ltwolame
4632 enabled libvo_aacenc && require libvo_aacenc vo-aacenc/voAAC.h voGetAACEncAPI -lvo-aacenc
4633 enabled libvo_amrwbenc && require libvo_amrwbenc vo-amrwbenc/enc_if.h E_IF_init -lvo-amrwbenc
4634 enabled libvorbis && require libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
4635 enabled libvpx && require_pkg_config "vpx >= 1.3.0" vpx/vpx_codec.h vpx_codec_version && {
4636 enabled libvpx_vp8_decoder && {
4637 check_pkg_config vpx "vpx/vpx_decoder.h vpx/vp8dx.h" vpx_codec_vp8_dx ||
4638 disable libvpx_vp8_decoder;
4640 enabled libvpx_vp8_encoder && {
4641 check_pkg_config vpx "vpx/vpx_encoder.h vpx/vp8cx.h" vpx_codec_vp8_cx ||
4642 disable libvpx_vp8_encoder;
4644 enabled libvpx_vp9_decoder && {
4645 check_pkg_config vpx "vpx/vpx_decoder.h vpx/vp8dx.h" vpx_codec_vp9_dx ||
4646 disable libvpx_vp9_decoder;
4648 enabled libvpx_vp9_encoder && {
4649 check_pkg_config vpx "vpx/vpx_encoder.h vpx/vp8cx.h" vpx_codec_vp9_cx ||
4650 disable libvpx_vp9_encoder;
4652 if disabled_all libvpx_vp8_decoder libvpx_vp9_decoder libvpx_vp8_encoder libvpx_vp9_encoder; then
4653 die "libvpx enabled but no supported decoders found"
4656 enabled libwavpack && require libwavpack wavpack/wavpack.h WavpackOpenFileOutput -lwavpack
4657 enabled libwebp && require_pkg_config libwebp webp/encode.h WebPGetEncoderVersion
4658 enabled libx264 && require_pkg_config x264 "stdint.h x264.h" x264_encoder_encode &&
4659 { check_cpp_condition x264.h "X264_BUILD >= 118" ||
4660 die "ERROR: libx264 version must be >= 0.118."; } &&
4661 { check_cpp_condition x264.h "X264_MPEG2" &&
4663 enabled libx265 && require_pkg_config x265 x265.h x265_api_get &&
4664 { check_cpp_condition x265.h "X265_BUILD >= 57" ||
4665 die "ERROR: libx265 version must be >= 57."; }
4666 enabled libxavs && require libxavs xavs.h xavs_encoder_encode -lxavs
4667 enabled libxvid && require libxvid xvid.h xvid_global -lxvidcore
4668 enabled mmal && { check_lib interface/mmal/mmal.h mmal_port_connect -lmmal_core -lmmal_util -lmmal_vc_client -lbcm_host ||
4669 { ! enabled cross_compile && {
4670 add_cflags -isystem/opt/vc/include/ -isystem/opt/vc/include/interface/vmcs_host/linux -isystem/opt/vc/include/interface/vcos/pthreads -fgnu89-inline ;
4671 add_extralibs -L/opt/vc/lib/ -lmmal_core -lmmal_util -lmmal_vc_client -lbcm_host ;
4672 check_lib interface/mmal/mmal.h mmal_port_connect ; }
4673 check_lib interface/mmal/mmal.h mmal_port_connect ; } ||
4674 die "ERROR: mmal not found"; }
4675 enabled mmal && check_func_headers interface/mmal/mmal.h "MMAL_PARAMETER_VIDEO_MAX_NUM_CALLBACKS"
4676 enabled omx_rpi && enable omx
4677 enabled omx && { check_header OMX_Core.h ||
4678 { ! enabled cross_compile && enabled omx_rpi && {
4679 add_cflags -isystem/opt/vc/include/IL ; }
4680 check_header OMX_Core.h ; } ||
4681 die "ERROR: OpenMAX IL headers not found"; }
4682 enabled openssl && { check_pkg_config openssl openssl/ssl.h SSL_library_init && {
4683 add_cflags $openssl_cflags && add_extralibs $openssl_libs; }||
4684 check_lib openssl/ssl.h SSL_library_init -lssl -lcrypto ||
4685 check_lib openssl/ssl.h SSL_library_init -lssl32 -leay32 ||
4686 check_lib openssl/ssl.h SSL_library_init -lssl -lcrypto -lws2_32 -lgdi32 ||
4687 die "ERROR: openssl not found"; }
4689 if enabled gnutls; then
4690 { check_lib2 gmp.h mpz_export -lgmp && enable gmp; } ||
4691 { check_lib gcrypt.h gcry_mpi_new -lgcrypt && enable gcrypt; }
4695 if enabled libdc1394; then
4696 { require_pkg_config libdc1394-2 dc1394/dc1394.h dc1394_new &&
4697 enable libdc1394_2; } ||
4698 { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
4699 enable libdc1394_1; } ||
4700 die "ERROR: No version of libdc1394 found "
4703 if enabled nvenc; then
4704 check_header nvEncodeAPI.h || die "ERROR: nvEncodeAPI.h not found."
4705 check_cpp_condition nvEncodeAPI.h "NVENCAPI_MAJOR_VERSION >= 6" ||
4706 die "ERROR: NVENC API version 5 or older is not supported"
4709 if check_pkg_config sdl SDL_events.h SDL_PollEvent; then
4710 check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
4711 check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) < 0x010300" $sdl_cflags &&
4715 pod2man --help > /dev/null 2>&1 && enable pod2man || disable pod2man
4716 texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
4718 check_header linux/fb.h
4719 check_header linux/videodev2.h
4720 check_struct linux/videodev2.h "struct v4l2_frmivalenum" discrete
4722 check_header AVFoundation/AVFoundation.h &&
4723 check_objcflags -fobjc-arc &&
4724 add_extralibs -framework Foundation -framework AVFoundation -framework CoreVideo -framework CoreMedia ||
4725 disable AVFoundation_AVFoundation_h
4727 check_header sys/videoio.h
4729 check_func_headers "windows.h vfw.h" capCreateCaptureWindow "$vfwcap_indev_extralibs"
4730 # check that WM_CAP_DRIVER_CONNECT is defined to the proper value
4731 # w32api 3.12 had it defined wrong
4732 check_cpp_condition vfw.h "WM_CAP_DRIVER_CONNECT > WM_USER" && enable vfwcap_defines
4734 # check for ioctl_meteor.h, ioctl_bt848.h and alternatives
4735 { check_header dev/bktr/ioctl_meteor.h &&
4736 check_header dev/bktr/ioctl_bt848.h; } ||
4737 { check_header machine/ioctl_meteor.h &&
4738 check_header machine/ioctl_bt848.h; } ||
4739 { check_header dev/video/meteor/ioctl_meteor.h &&
4740 check_header dev/video/bktr/ioctl_bt848.h; } ||
4741 check_header dev/ic/bt8xx.h
4743 check_header sndio.h
4744 check_header sys/soundcard.h
4745 check_header soundcard.h
4747 enabled_any alsa_indev alsa_outdev &&
4748 check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
4750 enabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack &&
4751 check_func jack_port_get_latency_range -ljack
4753 enabled_any sndio_indev sndio_outdev && check_lib2 sndio.h sio_open -lsndio
4755 if enabled libcdio; then
4756 check_lib2 "cdio/cdda.h cdio/paranoia.h" cdio_cddap_open -lcdio_paranoia -lcdio_cdda -lcdio ||
4757 check_lib2 "cdio/paranoia/cdda.h cdio/paranoia/paranoia.h" cdio_cddap_open -lcdio_paranoia -lcdio_cdda -lcdio ||
4758 die "ERROR: No usable libcdio/cdparanoia found"
4761 check_lib X11/Xlib.h XOpenDisplay -lX11 && enable xlib
4763 if enabled libxcb; then
4764 check_pkg_config xcb-shape xcb/shape.h xcb_shape_rectangles || {
4765 enabled libxcb && die "ERROR: libxcb not found";
4768 disabled libxcb_shm ||
4769 check_pkg_config xcb-shm xcb/shm.h xcb_shm_attach || {
4770 enabled libxcb_shm && die "ERROR: libxcb_shm not found";
4771 } && check_header sys/shm.h && enable libxcb_shm
4773 disabled libxcb_xfixes ||
4774 check_pkg_config xcb-xfixes xcb/xfixes.h xcb_xfixes_get_cursor_image || {
4775 enabled libxcb_xfixes && die "ERROR: libxcb_xfixes not found";
4776 } && enable libxcb_xfixes
4778 add_cflags "$xcb_event_cflags $xcb_shm_cflags $xcb_xfixes_cflags"
4779 add_extralibs "$xcb_event_libs $xcb_shm_libs $xcb_xfixes_libs"
4783 check_code cc "va/va.h" "vaCreateSurfaces(0, 0, 0, 0, 0, 0, 0, 0)" ||
4786 if enabled vaapi ; then
4788 check_lib2 "va/va.h va/va_x11.h" vaGetDisplay -lva -lva-x11 &&
4791 check_lib2 "va/va.h va/va_drm.h" vaGetDisplayDRM -lva -lva-drm &&
4796 check_cpp_condition vdpau/vdpau.h "defined VDP_DECODER_PROFILE_MPEG4_PART2_ASP" ||
4799 enabled vdpau && enabled xlib &&
4800 check_lib2 "vdpau/vdpau.h vdpau/vdpau_x11.h" vdp_device_create_x11 -lvdpau &&
4803 enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel"
4805 # add some useful compiler flags if supported
4806 check_cflags -Wdeclaration-after-statement
4808 check_cflags -Wdisabled-optimization
4809 check_cflags -Wpointer-arith
4810 check_cflags -Wredundant-decls
4811 check_cflags -Wwrite-strings
4812 check_cflags -Wtype-limits
4813 check_cflags -Wundef
4814 check_cflags -Wmissing-prototypes
4815 check_cflags -Wstrict-prototypes
4816 enabled extra_warnings && check_cflags -Winline
4817 enabled extra_warnings && check_cflags -Wcast-qual
4819 check_disable_warning(){
4820 warning_flag=-W${1#-Wno-}
4821 test_cflags $warning_flag && add_cflags $1
4824 check_disable_warning -Wno-parentheses
4825 check_disable_warning -Wno-switch
4826 check_disable_warning -Wno-format-zero-length
4827 check_disable_warning -Wno-pointer-sign
4829 # add some linker flags
4830 check_ldflags -Wl,--warn-common
4831 check_ldflags -Wl,-rpath-link=libswscale:libavfilter:libavdevice:libavformat:libavcodec:libavutil:libavresample
4832 enabled rpath && add_ldexeflags -Wl,-rpath,$libdir
4833 test_ldflags -Wl,-Bsymbolic && append SHFLAGS -Wl,-Bsymbolic
4835 # add some strip flags
4836 # -wN '..@*' is more selective than -x, but not available everywhere.
4837 check_stripflags -wN \'..@*\' || check_stripflags -x || strip='true'
4839 enabled neon_clobber_test &&
4840 check_ldflags -Wl,--wrap,avcodec_open2 \
4841 -Wl,--wrap,avcodec_decode_audio4 \
4842 -Wl,--wrap,avcodec_decode_video2 \
4843 -Wl,--wrap,avcodec_decode_subtitle2 \
4844 -Wl,--wrap,avcodec_encode_audio2 \
4845 -Wl,--wrap,avcodec_encode_video2 \
4846 -Wl,--wrap,avcodec_encode_subtitle \
4847 -Wl,--wrap,avresample_convert ||
4848 disable neon_clobber_test
4850 enabled xmm_clobber_test &&
4851 check_ldflags -Wl,--wrap,avcodec_open2 \
4852 -Wl,--wrap,avcodec_decode_audio4 \
4853 -Wl,--wrap,avcodec_decode_video2 \
4854 -Wl,--wrap,avcodec_decode_subtitle2 \
4855 -Wl,--wrap,avcodec_encode_audio2 \
4856 -Wl,--wrap,avcodec_encode_video2 \
4857 -Wl,--wrap,avcodec_encode_subtitle \
4858 -Wl,--wrap,avresample_convert \
4859 -Wl,--wrap,sws_scale ||
4860 disable xmm_clobber_test
4862 check_ld <<EOF && enable proper_dce
4863 extern const int array[512];
4864 static inline int func(void) { return array[0]; }
4865 int main(void) { return 0; }
4868 if enabled proper_dce; then
4869 echo "X { local: *; };" > $TMPV
4870 if test_ldflags -Wl,${version_script},$TMPV; then
4871 append SHFLAGS '-Wl,${version_script},\$(SUBDIR)lib\$(NAME).ver'
4872 check_cc <<EOF && enable symver_asm_label
4873 void ff_foo(void) __asm__ ("av_foo@VERSION");
4874 void ff_foo(void) { ${inline_asm+__asm__($quotes);} }
4876 check_cc <<EOF && enable symver_gnu_asm
4877 __asm__(".symver ff_foo,av_foo@VERSION");
4878 void ff_foo(void) {}
4883 if [ -z "$optflags" ]; then
4884 if enabled small; then
4885 optflags=$cflags_size
4886 elif enabled optimizations; then
4887 optflags=$cflags_speed
4889 optflags=$cflags_noopt
4895 enabled lto && check_ldflags "$@"
4899 if enabled lto; then
4900 test "$cc_type" != "$ld_type" && die "LTO requires same compiler and linker"
4902 check_ldflags -flto $cpuflags
4905 check_optflags $optflags
4906 check_optflags -fno-math-errno
4907 check_optflags -fno-signed-zeros
4909 if enabled icc; then
4910 # Just warnings, no remarks
4912 # -wd: Disable following warnings
4913 # 144, 167, 556: -Wno-pointer-sign
4914 # 1292: attribute "foo" ignored
4915 # 1419: external declaration in primary source file
4916 # 10006: ignoring unknown option -fno-signed-zeros
4917 # 10148: ignoring unknown option -Wno-parentheses
4918 # 10156: ignoring option '-W'; no argument required
4919 check_cflags -wd144,167,556,1292,1419,10006,10148,10156
4920 # 11030: Warning unknown option --as-needed
4921 # 10156: ignoring option '-export'; no argument required
4922 check_ldflags -wd10156,11030
4923 # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
4924 enable ebp_available
4925 if enabled x86_32; then
4926 icc_version=$($cc -dumpversion)
4927 test ${icc_version%%.*} -ge 11 &&
4928 check_cflags -falign-stack=maintain-16-byte ||
4929 disable aligned_stack
4931 elif enabled ccc; then
4932 # disable some annoying warnings
4933 add_cflags -msg_disable bitnotint
4934 add_cflags -msg_disable mixfuncvoid
4935 add_cflags -msg_disable nonstandcast
4936 add_cflags -msg_disable unsupieee
4937 elif enabled gcc; then
4938 check_optflags -fno-tree-vectorize
4939 check_cflags -Werror=implicit-function-declaration
4940 check_cflags -Werror=missing-prototypes
4941 check_cflags -Werror=return-type
4942 check_cflags -Werror=declaration-after-statement
4943 check_cflags -Werror=vla
4944 check_cflags -Werror=format-security
4945 check_cflags -fdiagnostics-color=auto
4946 enabled extra_warnings || check_disable_warning -Wno-maybe-uninitialized
4947 elif enabled llvm_gcc; then
4948 check_cflags -mllvm -stack-alignment=16
4949 elif enabled clang; then
4950 check_cflags -mllvm -stack-alignment=16
4951 check_cflags -Qunused-arguments
4952 check_cflags -Werror=implicit-function-declaration
4953 check_cflags -Werror=missing-prototypes
4954 check_cflags -Werror=return-type
4955 elif enabled cparser; then
4956 add_cflags -Wno-missing-variable-declarations
4957 add_cflags -Wno-empty-statement
4958 elif enabled armcc; then
4959 add_cflags -W${armcc_opt},--diag_suppress=4343 # hardfp compat
4960 add_cflags -W${armcc_opt},--diag_suppress=3036 # using . as system include dir
4961 # 2523: use of inline assembly is deprecated
4962 add_cflags -W${armcc_opt},--diag_suppress=2523
4963 add_cflags -W${armcc_opt},--diag_suppress=1207
4964 add_cflags -W${armcc_opt},--diag_suppress=1293 # assignment in condition
4965 add_cflags -W${armcc_opt},--diag_suppress=3343 # hardfp compat
4966 add_cflags -W${armcc_opt},--diag_suppress=167 # pointer sign
4967 add_cflags -W${armcc_opt},--diag_suppress=513 # pointer sign
4968 elif enabled tms470; then
4969 add_cflags -pds=824 -pds=837
4971 elif enabled pathscale; then
4972 add_cflags -fstrict-overflow -OPT:wrap_around_unsafe_opt=OFF
4973 elif enabled_any msvc icl; then
4974 enabled x86_32 && disable aligned_stack
4975 enabled_all x86_32 debug && add_cflags -Oy-
4976 enabled debug && add_ldflags -debug
4977 enable pragma_deprecated
4978 if enabled icl; then
4979 # -Qansi-alias is basically -fstrict-aliasing, but does not work
4980 # (correctly) on icl 13.x.
4981 check_cpp_condition "windows.h" "__ICL < 1300 || __ICL >= 1400" &&
4982 add_cflags -Qansi-alias
4983 # icl will pass the inline asm tests but inline asm is currently
4984 # not supported (build will fail)
4987 # msvcrt10 x64 incorrectly enables log2, only msvcrt12 (MSVC 2013) onwards actually has log2.
4988 check_cpp_condition crtversion.h "_VC_CRT_MAJOR_VERSION >= 12" || disable log2
4989 # The CRT headers contain __declspec(restrict) in a few places, but if redefining
4990 # restrict, this might break. MSVC 2010 and 2012 fail with __declspec(__restrict)
4991 # (as it ends up if the restrict redefine is done before including stdlib.h), while
4992 # MSVC 2013 and newer can handle it fine.
4993 # If this declspec fails, force including stdlib.h before the restrict redefinition
4994 # happens in config.h.
4995 if [ $_restrict != restrict ]; then
4996 check_cc <<EOF || add_cflags -FIstdlib.h
4997 __declspec($_restrict) void* foo(int);
5002 for pfx in "" host_; do
5003 varname=${pfx%_}cc_type
5004 eval "type=\$$varname"
5005 if [ $type = "msvc" ]; then
5006 check_${pfx}cc <<EOF || add_${pfx}cflags -Dinline=__inline
5007 static inline int foo(int a) { return a; }
5014 add_asflags -Qunused-arguments
5020 check_ldflags -Qunused-arguments
5026 enabled ccc && add_ldflags '-Wl,-expect_unresolved,*'
5029 add_cppflags -Dmain=plan9_main
5033 enabled asm || { arch=c; disable $ARCH_LIST $ARCH_EXT_LIST; }
5035 check_deps $CONFIG_LIST \
5040 enabled_all dxva2 CoTaskMemFree &&
5041 prepend avconv_libs $($ldflags_filter "-lole32") &&
5044 ! enabled_any memalign posix_memalign aligned_malloc &&
5045 enabled simd_align && enable memalign_hack
5047 map 'enabled $v && intrinsics=${v#intrinsics_}' $INTRINSICS_LIST
5049 for thread in $THREADS_LIST; do
5050 if enabled $thread; then
5051 test -n "$thread_type" &&
5052 die "ERROR: Only one thread type must be selected." ||
5053 thread_type="$thread"
5057 enabled zlib && add_cppflags -DZLIB_CONST
5059 # conditional library dependencies, in linking order
5060 enabled movie_filter && prepend avfilter_deps "avformat avcodec"
5061 enabled resample_filter && prepend avfilter_deps "avresample"
5062 enabled scale_filter && prepend avfilter_deps "swscale"
5064 enabled opus_decoder && prepend avcodec_deps "avresample"
5068 eval "deps=\$$lib_deps"
5069 append $lib_deps $(map 'eval echo \$${v}_deps' $deps)
5073 map 'expand_deps $v' $LIBRARY_LIST
5075 echo "install prefix $prefix"
5076 echo "source path $source_path"
5077 echo "C compiler $cc"
5078 echo "C library $libc_type"
5079 if test "$host_cc" != "$cc"; then
5080 echo "host C compiler $host_cc"
5081 echo "host C library $host_libc_type"
5083 echo "ARCH $arch ($cpu)"
5084 if test "$build_suffix" != ""; then
5085 echo "build suffix $build_suffix"
5087 if test "$extra_version" != ""; then
5088 echo "version string suffix $extra_version"
5090 echo "big-endian ${bigendian-no}"
5091 echo "runtime cpu detection ${runtime_cpudetect-no}"
5092 if enabled x86; then
5093 echo "${yasmexe} ${yasm-no}"
5094 echo "MMX enabled ${mmx-no}"
5095 echo "MMXEXT enabled ${mmxext-no}"
5096 echo "3DNow! enabled ${amd3dnow-no}"
5097 echo "3DNow! extended enabled ${amd3dnowext-no}"
5098 echo "SSE enabled ${sse-no}"
5099 echo "SSSE3 enabled ${ssse3-no}"
5100 echo "AVX enabled ${avx-no}"
5101 echo "XOP enabled ${xop-no}"
5102 echo "FMA3 enabled ${fma3-no}"
5103 echo "FMA4 enabled ${fma4-no}"
5104 echo "i686 features enabled ${i686-no}"
5105 echo "CMOV is fast ${fast_cmov-no}"
5106 echo "EBX available ${ebx_available-no}"
5107 echo "EBP available ${ebp_available-no}"
5109 if enabled aarch64; then
5110 echo "NEON enabled ${neon-no}"
5111 echo "VFP enabled ${vfp-no}"
5113 if enabled arm; then
5114 echo "ARMv5TE enabled ${armv5te-no}"
5115 echo "ARMv6 enabled ${armv6-no}"
5116 echo "ARMv6T2 enabled ${armv6t2-no}"
5117 echo "VFP enabled ${vfp-no}"
5118 echo "NEON enabled ${neon-no}"
5120 if enabled ppc; then
5121 echo "AltiVec enabled ${altivec-no}"
5122 echo "VSX enabled ${vsx-no}"
5123 echo "POWER8 enabled ${power8-no}"
5124 echo "PPC 4xx optimizations ${ppc4xx-no}"
5125 echo "dcbzl available ${dcbzl-no}"
5127 echo "debug symbols ${debug-no}"
5128 echo "optimize for size ${small-no}"
5129 echo "optimizations ${optimizations-no}"
5130 echo "static ${static-no}"
5131 echo "shared ${shared-no}"
5132 echo "new filter support ${avfilter-no}"
5133 echo "network support ${network-no}"
5134 echo "threading support ${thread_type-no}"
5135 echo "safe bitstream reader ${safe_bitstream_reader-no}"
5136 echo "SDL support ${sdl-no}"
5137 test -n "$random_seed" &&
5138 echo "random seed ${random_seed}"
5141 echo "External libraries:"
5142 print_enabled '' $EXTERNAL_LIBRARY_LIST | print_3_columns
5144 echo "External libraries providing hardware acceleration:"
5145 print_enabled '' $HWACCEL_LIBRARY_LIST | print_3_columns
5149 print_enabled '' $LIBRARY_LIST | print_3_columns
5152 for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
5153 echo "Enabled ${type}s:"
5154 eval list=\$$(toupper $type)_LIST
5155 print_enabled '_*' $list | print_3_columns
5159 license="LGPL version 2.1 or later"
5160 if enabled nonfree; then
5161 license="nonfree and unredistributable"
5162 elif enabled gplv3; then
5163 license="GPL version 3 or later"
5164 elif enabled lgplv3; then
5165 license="LGPL version 3 or later"
5166 elif enabled gpl; then
5167 license="GPL version 2 or later"
5170 echo "License: $license"
5172 echo "Creating config.mak and config.h..."
5174 test -e Makefile || echo "include $source_path/Makefile" > Makefile
5176 config_files="$TMPH config.mak"
5178 cat > config.mak <<EOF
5179 # Automatically generated by configure - do not modify!
5180 LIBAV_CONFIGURATION=$LIBAV_CONFIGURATION
5182 LIBDIR=\$(DESTDIR)$libdir
5183 SHLIBDIR=\$(DESTDIR)$shlibdir
5184 INCDIR=\$(DESTDIR)$incdir
5185 BINDIR=\$(DESTDIR)$bindir
5186 DATADIR=\$(DESTDIR)$datadir
5187 DOCDIR=\$(DESTDIR)$docdir
5188 MANDIR=\$(DESTDIR)$mandir
5189 SRC_PATH=$source_path
5192 INTRINSICS=$intrinsics
5199 DEPCCFLAGS=$DEPCCFLAGS \$(CPPFLAGS)
5201 DEPASFLAGS=$DEPASFLAGS \$(CPPFLAGS)
5212 OBJCFLAGS=$OBJCFLAGS
5227 LDEXEFLAGS=$LDEXEFLAGS
5228 SHFLAGS=$(echo $($ldflags_filter $SHFLAGS))
5229 STRIPFLAGS=$STRIPFLAGS
5230 YASMFLAGS=$YASMFLAGS
5231 BUILDSUF=$build_suffix
5239 EXTRA_VERSION=$extra_version
5241 CCDEP_FLAGS=$CCDEP_FLAGS
5243 ASDEP_FLAGS=$ASDEP_FLAGS
5244 CC_DEPFLAGS=$CC_DEPFLAGS
5245 AS_DEPFLAGS=$AS_DEPFLAGS
5248 HOSTCFLAGS=$host_cflags
5249 HOSTCPPFLAGS=$host_cppflags
5250 HOSTEXESUF=$HOSTEXESUF
5251 HOSTLDFLAGS=$host_ldflags
5254 DEPHOSTCCFLAGS=$DEPHOSTCCFLAGS \$(HOSTCCFLAGS)
5255 HOSTCCDEP=$HOSTCCDEP
5256 HOSTCCDEP_FLAGS=$HOSTCCDEP_FLAGS
5257 HOSTCC_DEPFLAGS=$HOSTCC_DEPFLAGS
5261 TARGET_EXEC=$target_exec $target_exec_args
5262 TARGET_PATH=$target_path
5263 TARGET_SAMPLES=${target_samples:-\$(SAMPLES)}
5264 CFLAGS-avplay=$sdl_cflags
5265 ZLIB=$($ldflags_filter -lz)
5266 LIB_INSTALL_EXTRA_CMD=$LIB_INSTALL_EXTRA_CMD
5267 EXTRALIBS=$extralibs
5268 COMPAT_OBJS=$compat_objs
5271 LIBTARGET=${LIBTARGET}
5272 SLIBNAME=${SLIBNAME}
5273 SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}
5274 SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}
5275 SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}
5276 SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}
5277 SLIB_INSTALL_NAME=${SLIB_INSTALL_NAME}
5278 SLIB_INSTALL_LINKS=${SLIB_INSTALL_LINKS}
5279 SLIB_INSTALL_EXTRA_LIB=${SLIB_INSTALL_EXTRA_LIB}
5280 SLIB_INSTALL_EXTRA_SHLIB=${SLIB_INSTALL_EXTRA_SHLIB}
5281 VERSION_SCRIPT_POSTPROCESS_CMD=${VERSION_SCRIPT_POSTPROCESS_CMD}
5282 SAMPLES:=${samples:-\$(LIBAV_SAMPLES)}
5287 name=$(toupper $lcname)
5288 file=$source_path/$lcname/version.h
5289 eval $(awk "/#define ${name}_VERSION_M/ { print \$2 \"=\" \$3 }" "$file")
5290 eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
5291 eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
5292 eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
5293 eval echo "${lcname}_VERSION_MINOR=\$${name}_VERSION_MINOR" >> config.mak
5296 map 'get_version $v' $LIBRARY_LIST
5298 map 'eval echo "${v}_FFLIBS=\$${v}_deps" >> config.mak' $LIBRARY_LIST
5300 print_program_libs(){
5301 eval "program_libs=\$${1}_libs"
5302 eval echo "LIBS-${1}=${program_libs}" >> config.mak
5305 map 'print_program_libs $v' $PROGRAM_LIST
5308 /* Automatically generated by configure - do not modify! */
5309 #ifndef LIBAV_CONFIG_H
5310 #define LIBAV_CONFIG_H
5311 #define LIBAV_CONFIGURATION "$(c_escape $LIBAV_CONFIGURATION)"
5312 #define LIBAV_LICENSE "$(c_escape $license)"
5313 #define AVCONV_DATADIR "$(eval c_escape $datadir)"
5314 #define CC_IDENT "$(c_escape ${cc_ident:-Unknown compiler})"
5315 #define restrict $_restrict
5316 #define EXTERN_PREFIX "${extern_prefix}"
5317 #define EXTERN_ASM ${extern_prefix}
5318 #define SLIBSUF "$SLIBSUF"
5321 test -n "$malloc_prefix" &&
5322 echo "#define MALLOC_PREFIX $malloc_prefix" >>$TMPH
5324 if enabled yasm; then
5325 append config_files $TMPASM
5329 enabled getenv || echo "#define getenv(x) NULL" >> $TMPH
5331 print_config ARCH_ "$config_files" $ARCH_LIST
5332 print_config HAVE_ "$config_files" $HAVE_LIST
5333 print_config CONFIG_ "$config_files" $CONFIG_LIST \
5337 echo "#endif /* LIBAV_CONFIG_H */" >> $TMPH
5339 # Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
5340 cp_if_changed $TMPH config.h
5343 enabled yasm && cp_if_changed $TMPASM config.asm
5346 /* Generated by ffconf */
5347 #ifndef AVUTIL_AVCONFIG_H
5348 #define AVUTIL_AVCONFIG_H
5351 print_config AV_HAVE_ $TMPH $HAVE_LIST_PUB
5353 echo "#endif /* AVUTIL_AVCONFIG_H */" >> $TMPH
5355 cp_if_changed $TMPH libavutil/avconfig.h
5357 test -n "$WARNINGS" && printf "\n$WARNINGS"
5359 # generate the lists of enabled components
5360 print_enabled_components(){
5365 echo "static const $struct_name *$name[] = {" > $TMPH
5367 enabled $c && printf " &ff_%s,\n" $c >> $TMPH
5369 echo " NULL };" >> $TMPH
5370 cp_if_changed $TMPH $file
5373 print_enabled_components libavcodec/bsf_list.c AVBitStreamFilter bitstream_filters $BSF_LIST
5374 print_enabled_components libavformat/protocol_list.c URLProtocol url_protocols $PROTOCOL_LIST
5376 # build pkg-config files
5379 eval printf "\"lib${1} >= \$LIB$(toupper ${1})_VERSION, \""
5382 pkgconfig_generate(){
5384 shortname=${name#lib}${build_suffix}
5388 requires=$(map 'lib_version $v' $(eval echo \$${name#lib}_deps))
5389 requires=${requires%, }
5390 enabled ${name#lib} || return 0
5392 cat <<EOF > $name/$name.pc
5394 exec_prefix=\${prefix}
5399 Description: $comment
5401 Requires: $(enabled shared || echo $requires)
5402 Requires.private: $(enabled shared && echo $requires)
5404 Libs: -L\${libdir} -l${shortname} $(enabled shared || echo $libs)
5405 Libs.private: $(enabled shared && echo $libs)
5406 Cflags: -I\${includedir}
5408 cat <<EOF > $name/$name-uninstalled.pc
5411 libdir=\${pcfiledir}
5412 includedir=${source_path}
5415 Description: $comment
5419 Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
5420 Cflags: -I\${includedir}
5424 pkgconfig_generate libavutil "Libav utility library" "$LIBAVUTIL_VERSION" "$LIBRT $LIBM"
5425 pkgconfig_generate libavcodec "Libav codec library" "$LIBAVCODEC_VERSION" "$extralibs"
5426 pkgconfig_generate libavformat "Libav container format library" "$LIBAVFORMAT_VERSION" "$extralibs"
5427 pkgconfig_generate libavdevice "Libav device handling library" "$LIBAVDEVICE_VERSION" "$extralibs"
5428 pkgconfig_generate libavfilter "Libav video filtering library" "$LIBAVFILTER_VERSION" "$extralibs"
5429 pkgconfig_generate libavresample "Libav audio resampling library" "$LIBAVRESAMPLE_VERSION" "$LIBM"
5430 pkgconfig_generate libswscale "Libav image rescaling library" "$LIBSWSCALE_VERSION" "$LIBM"