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-libilbc ILBC audio encoding/decoding
201 --enable-libkvazaar HEVC video encoding
202 --enable-libmp3lame MP3 audio encoding
203 --enable-libopencore-amrnb AMR-NB audio encoding/decoding
204 --enable-libopencore-amrwb AMR-WB audio decoding
205 --enable-libopencv computer vision
206 --enable-libopenh264 H.264 video encoding/decoding
207 --enable-libopenjpeg JPEG 2000 image encoding/decoding
208 --enable-libopus Opus audio encoding/decoding
209 --enable-libpulse Pulseaudio sound server
210 --enable-librtmp RTMP streaming
211 --enable-libschroedinger Dirac video encoding/decoding
212 --enable-libsnappy snappy compression
213 --enable-libspeex Speex audio encoding/decoding
214 --enable-libtheora Theora video encoding/decoding
215 --enable-libtwolame MP2 audio encoding
216 --enable-libvo-aacenc AAC audio encoding
217 --enable-libvo-amrwbenc AMR-WB audio encoding
218 --enable-libvorbis Vorbis audio encoding/decoding
219 --enable-libvpx VP* video encoding/decoding
220 --enable-libwavpack Wavpack audio encoding/decoding
221 --enable-libwebp WebP image encoding/decoding
222 --enable-libx264 H.264 video encoding
223 --enable-libx265 HEVC video encoding
224 --enable-libxavs Chinese AVS video encoding
225 --enable-libxcb X window system protocol communication
226 --enable-libxcb-shm X11 shm communication [auto]
227 --enable-libxcb-xfixes X11 mouse rendering [auto]
228 --enable-libxvid MPEG-4 ASP video encoding
229 --enable-openssl crypto
230 --enable-x11grab X11 grabbing through xlib (legacy, use xcb instead)
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_LIST="
1236 EXTERNAL_LIBRARY_LIST="
1289 safe_bitstream_reader
1335 $EXTERNAL_LIBRARY_LIST
1336 $HWACCEL_LIBRARY_LIST
1400 ARCH_EXT_LIST_X86_SIMD="
1428 $ARCH_EXT_LIST_X86_SIMD
1433 ARCH_EXT_LIST_MIPS="
1468 sync_val_compare_and_swap
1482 AVFoundation_AVFoundation_h
1487 cdio_paranoia_paranoia_h
1489 dev_bktr_ioctl_bt848_h
1490 dev_bktr_ioctl_meteor_h
1492 dev_video_bktr_ioctl_bt848_h
1493 dev_video_meteor_ioctl_meteor_h
1501 machine_ioctl_bt848_h
1502 machine_ioctl_meteor_h
1566 GetProcessAffinityMask
1567 GetProcessMemoryInfo
1570 GetSystemTimeAsFileTime
1575 jack_port_get_latency_range
1587 SetConsoleTextAttribute
1598 TOOLCHAIN_FEATURES="
1619 CONDITION_VARIABLE_Ptr
1622 struct_group_source_req
1623 struct_ip_mreq_source
1626 struct_rusage_ru_maxrss
1628 struct_sockaddr_sa_len
1629 struct_sockaddr_storage
1630 struct_v4l2_frmivalenum_discrete
1635 $(add_suffix _external $ARCH_EXT_LIST)
1636 $(add_suffix _inline $ARCH_EXT_LIST)
1655 MMAL_PARAMETER_VIDEO_MAX_NUM_CALLBACKS
1665 # options emitted with CONFIG_ prefix but not available on the command line
1812 # code dependency declarations
1814 # architecture extensions
1819 armv8_deps="aarch64"
1820 neon_deps_any="aarch64 arm"
1821 intrinsics_neon_deps="neon"
1822 vfp_deps_any="aarch64 arm"
1825 map 'eval ${v}_inline_deps=inline_asm' $ARCH_EXT_LIST_ARM
1833 x86_64_select="i686"
1834 x86_64_suggest="fast_cmov"
1837 amd3dnowext_deps="amd3dnow"
1853 mmx_external_deps="yasm"
1854 mmx_inline_deps="inline_asm"
1855 mmx_suggest="mmx_external mmx_inline"
1857 for ext in $(filter_out mmx $ARCH_EXT_LIST_X86_SIMD); do
1858 eval dep=\$${ext}_deps
1859 eval ${ext}_external_deps='"${dep}_external"'
1860 eval ${ext}_inline_deps='"${dep}_inline"'
1861 eval ${ext}_suggest='"${ext}_external ${ext}_inline"'
1864 aligned_stack_if_any="aarch64 ppc x86"
1865 fast_64bit_if_any="aarch64 alpha ia64 mips64 parisc64 ppc64 sparc64 x86_64"
1866 fast_clz_if_any="aarch64 alpha avr32 mips ppc x86"
1867 fast_unaligned_if_any="aarch64 ppc x86"
1868 simd_align_16_if_any="altivec neon sse"
1870 # system capabilities
1871 symver_if_any="symver_asm_label symver_gnu_asm"
1872 valgrind_backtrace_deps="!optimizations valgrind_valgrind_h"
1875 atomics_gcc_if="sync_val_compare_and_swap"
1876 atomics_suncc_if="atomic_cas_ptr machine_rw_barrier"
1877 atomics_win32_if="MemoryBarrier"
1878 atomics_native_if_any="$ATOMICS_LIST"
1879 w32threads_deps="atomics_native"
1880 threads_if_any="$THREADS_LIST"
1884 dirac_parse_select="golomb"
1885 error_resilience_select="me_cmp"
1886 faandct_deps="faan fdctdsp"
1887 faanidct_deps="faan idctdsp"
1888 h264dsp_select="startcode"
1889 intrax8_select="blockdsp idctdsp"
1892 me_cmp_select="fdctdsp idctdsp pixblockdsp"
1893 mpeg_er_select="error_resilience"
1894 mpegaudio_select="mpegaudiodsp"
1895 mpegaudiodsp_select="dct"
1896 mpegvideo_select="blockdsp hpeldsp idctdsp me_cmp mpeg_er videodsp"
1897 mpegvideoenc_select="me_cmp mpegvideo pixblockdsp qpeldsp"
1898 vc1dsp_select="h264chroma qpeldsp startcode"
1900 # decoders / encoders
1901 aac_decoder_select="imdct15 mdct sinewin"
1902 aac_encoder_select="audio_frame_queue iirfilter mdct sinewin"
1903 aac_latm_decoder_select="aac_decoder aac_latm_parser"
1904 ac3_decoder_select="ac3_parser ac3dsp bswapdsp fmtconvert mdct"
1905 ac3_encoder_select="ac3dsp audiodsp mdct me_cmp"
1906 ac3_fixed_encoder_select="ac3dsp audiodsp mdct me_cmp"
1907 adpcm_g722_decoder_select="g722dsp"
1908 adpcm_g722_encoder_select="g722dsp"
1909 aic_decoder_select="golomb idctdsp"
1910 alac_encoder_select="lpc"
1911 als_decoder_select="bswapdsp"
1912 amrnb_decoder_select="lsp"
1913 amrwb_decoder_select="lsp"
1914 amv_decoder_select="sp5x_decoder"
1915 ape_decoder_select="bswapdsp"
1916 asv1_decoder_select="blockdsp bswapdsp idctdsp"
1917 asv1_encoder_select="bswapdsp fdctdsp pixblockdsp"
1918 asv2_decoder_select="blockdsp bswapdsp idctdsp"
1919 asv2_encoder_select="bswapdsp fdctdsp pixblockdsp"
1920 atrac1_decoder_select="mdct sinewin"
1921 atrac3_decoder_select="mdct"
1922 atrac3p_decoder_select="mdct sinewin"
1923 bink_decoder_select="blockdsp hpeldsp"
1924 binkaudio_dct_decoder_select="mdct rdft dct sinewin wma_freqs"
1925 binkaudio_rdft_decoder_select="mdct rdft sinewin wma_freqs"
1926 cavs_decoder_select="blockdsp golomb h264chroma idctdsp qpeldsp videodsp"
1927 cllc_decoder_select="bswapdsp"
1928 comfortnoise_encoder_select="lpc"
1929 cook_decoder_select="audiodsp mdct sinewin"
1930 cscd_decoder_select="lzo"
1931 cscd_decoder_suggest="zlib"
1932 dca_decoder_select="fmtconvert mdct"
1933 dds_decoder_select="texturedsp"
1934 dnxhd_decoder_select="blockdsp idctdsp"
1935 dnxhd_encoder_select="aandcttables blockdsp fdctdsp idctdsp mpegvideoenc pixblockdsp"
1936 dvvideo_decoder_select="dvprofile idctdsp"
1937 dvvideo_encoder_select="dvprofile fdctdsp me_cmp pixblockdsp"
1938 dxa_decoder_deps="zlib"
1939 dxv_decoder_select="lzf texturedsp"
1940 eac3_decoder_select="ac3_decoder"
1941 eac3_encoder_select="ac3_encoder"
1942 eamad_decoder_select="aandcttables blockdsp bswapdsp idctdsp mpegvideo"
1943 eatgq_decoder_select="aandcttables idctdsp"
1944 eatqi_decoder_select="aandcttables blockdsp bswapdsp idctdsp"
1945 exr_decoder_deps="zlib"
1946 ffv1_decoder_select="golomb rangecoder"
1947 ffv1_encoder_select="rangecoder"
1948 ffvhuff_decoder_select="huffyuv_decoder"
1949 ffvhuff_encoder_select="huffyuv_encoder"
1950 fic_decoder_select="golomb"
1951 flac_decoder_select="flacdsp golomb"
1952 flac_encoder_select="bswapdsp flacdsp golomb lpc"
1953 flashsv_decoder_deps="zlib"
1954 flashsv_encoder_deps="zlib"
1955 flashsv2_decoder_deps="zlib"
1956 flv_decoder_select="h263_decoder"
1957 flv_encoder_select="h263_encoder"
1958 fourxm_decoder_select="blockdsp bswapdsp"
1959 fraps_decoder_select="bswapdsp huffman"
1960 g2m_decoder_deps="zlib"
1961 g2m_decoder_select="blockdsp idctdsp jpegtables"
1962 h261_decoder_select="mpeg_er mpegvideo"
1963 h261_encoder_select="aandcttables mpegvideoenc"
1964 h263_decoder_select="error_resilience h263_parser h263dsp mpeg_er mpegvideo qpeldsp"
1965 h263_encoder_select="aandcttables h263dsp mpegvideoenc"
1966 h263i_decoder_select="h263_decoder"
1967 h263p_encoder_select="h263_encoder"
1968 h264_decoder_select="cabac golomb h264chroma h264dsp h264parse h264pred h264qpel videodsp"
1969 h264_decoder_suggest="error_resilience"
1970 hap_decoder_select="snappy texturedsp"
1971 hap_encoder_deps="libsnappy"
1972 hap_encoder_select="texturedspenc"
1973 hevc_decoder_select="bswapdsp cabac golomb videodsp"
1974 huffyuv_decoder_select="bswapdsp huffyuvdsp"
1975 huffyuv_encoder_select="bswapdsp huffman huffyuvencdsp"
1976 iac_decoder_select="imc_decoder"
1977 imc_decoder_select="bswapdsp fft mdct sinewin"
1978 indeo3_decoder_select="hpeldsp"
1979 indeo4_decoder_select="ividsp"
1980 indeo5_decoder_select="ividsp"
1981 interplay_video_decoder_select="hpeldsp"
1982 jpegls_decoder_select="golomb mjpeg_decoder"
1983 jpegls_encoder_select="golomb"
1984 jv_decoder_select="blockdsp"
1985 lagarith_decoder_select="huffyuvdsp"
1986 ljpeg_encoder_select="aandcttables idctdsp jpegtables"
1987 loco_decoder_select="golomb"
1988 magicyuv_decoder_select="huffyuvdsp"
1989 mdec_decoder_select="blockdsp idctdsp mpegvideo"
1990 metasound_decoder_select="lsp mdct sinewin"
1991 mimic_decoder_select="blockdsp bswapdsp hpeldsp idctdsp"
1992 mjpeg_decoder_select="blockdsp hpeldsp idctdsp jpegtables"
1993 mjpeg_encoder_select="aandcttables jpegtables mpegvideoenc"
1994 mjpegb_decoder_select="mjpeg_decoder"
1995 mjpeg_vaapi_encoder_deps="VAEncPictureParameterBufferJPEG"
1996 mjpeg_vaapi_encoder_select="vaapi_encode jpegtables"
1997 mlp_decoder_select="mlp_parser"
1998 motionpixels_decoder_select="bswapdsp"
1999 mp1_decoder_select="mpegaudio"
2000 mp1float_decoder_select="mpegaudio"
2001 mp2_decoder_select="mpegaudio"
2002 mp2float_decoder_select="mpegaudio"
2003 mp3_decoder_select="mpegaudio"
2004 mp3adu_decoder_select="mpegaudio"
2005 mp3adufloat_decoder_select="mpegaudio"
2006 mp3float_decoder_select="mpegaudio"
2007 mp3on4_decoder_select="mpegaudio"
2008 mp3on4float_decoder_select="mpegaudio"
2009 mpc7_decoder_select="bswapdsp mpegaudiodsp"
2010 mpc8_decoder_select="mpegaudiodsp"
2011 mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h"
2012 mpeg_xvmc_decoder_select="mpeg2video_decoder"
2013 mpeg1video_decoder_select="error_resilience mpeg_er mpegvideo"
2014 mpeg1video_encoder_select="aandcttables mpegvideoenc"
2015 mpeg2video_decoder_select="error_resilience mpeg_er mpegvideo"
2016 mpeg2video_encoder_select="aandcttables mpegvideoenc"
2017 mpeg4_decoder_select="h263_decoder mpeg4video_parser"
2018 mpeg4_encoder_select="h263_encoder"
2019 msa1_decoder_select="mss34dsp"
2020 msmpeg4v1_decoder_select="h263_decoder"
2021 msmpeg4v2_decoder_select="h263_decoder"
2022 msmpeg4v2_encoder_select="h263_encoder"
2023 msmpeg4v3_decoder_select="h263_decoder"
2024 msmpeg4v3_encoder_select="h263_encoder"
2025 mss2_decoder_select="error_resilience mpeg_er mpegvideo vc1_decoder"
2026 mts2_decoder_select="mss34dsp"
2027 mxpeg_decoder_select="mjpeg_decoder"
2028 nellymoser_decoder_select="mdct sinewin"
2029 nellymoser_encoder_select="audio_frame_queue mdct sinewin"
2030 nuv_decoder_select="idctdsp lzo"
2031 on2avc_decoder_select="mdct"
2032 opus_decoder_deps="avresample"
2033 opus_decoder_select="imdct15"
2034 png_decoder_deps="zlib"
2035 png_encoder_deps="zlib"
2036 png_encoder_select="huffyuvencdsp"
2037 prores_decoder_select="idctdsp"
2038 prores_encoder_select="fdctdsp"
2039 qcelp_decoder_select="lsp"
2040 qdm2_decoder_select="mdct rdft mpegaudiodsp"
2041 ra_144_encoder_select="audio_frame_queue lpc"
2042 ralf_decoder_select="golomb"
2043 rscc_decoder_deps="zlib"
2044 rv10_decoder_select="error_resilience h263_decoder h263dsp mpeg_er"
2045 rv10_encoder_select="h263_encoder"
2046 rv20_decoder_select="error_resilience h263_decoder h263dsp mpeg_er"
2047 rv20_encoder_select="h263_encoder"
2048 rv30_decoder_select="error_resilience golomb h264chroma h264pred h264qpel mpeg_er mpegvideo rv34dsp videodsp"
2049 rv40_decoder_select="error_resilience golomb h264chroma h264pred h264qpel mpeg_er mpegvideo rv34dsp videodsp"
2050 screenpresso_decoder_deps="zlib"
2051 shorten_decoder_select="golomb"
2052 sipr_decoder_select="lsp"
2053 sp5x_decoder_select="mjpeg_decoder"
2054 svq1_decoder_select="hpeldsp"
2055 svq1_encoder_select="aandcttables hpeldsp me_cmp mpegvideoenc"
2056 svq3_decoder_select="golomb h264dsp h264parse h264pred hpeldsp tpeldsp videodsp"
2057 svq3_decoder_suggest="zlib"
2058 tak_decoder_select="audiodsp"
2059 tdsc_decoder_deps="zlib"
2060 tdsc_decoder_select="mjpeg_decoder"
2061 theora_decoder_select="vp3_decoder"
2062 thp_decoder_select="mjpeg_decoder"
2063 tiff_decoder_suggest="zlib"
2064 tiff_encoder_suggest="zlib"
2065 truehd_decoder_select="mlp_decoder"
2066 truemotion2_decoder_select="bswapdsp"
2067 truespeech_decoder_select="bswapdsp"
2068 tscc_decoder_deps="zlib"
2069 txd_decoder_select="texturedsp"
2070 twinvq_decoder_select="mdct lsp sinewin"
2071 utvideo_decoder_select="bswapdsp"
2072 utvideo_encoder_select="bswapdsp huffman huffyuvencdsp"
2073 vble_decoder_select="huffyuvdsp"
2074 vc1_decoder_select="blockdsp error_resilience h263_decoder h264qpel intrax8 mpeg_er mpegvideo vc1dsp"
2075 vc1image_decoder_select="vc1_decoder"
2076 vorbis_decoder_select="mdct"
2077 vorbis_encoder_select="mdct"
2078 vp3_decoder_select="hpeldsp vp3dsp videodsp"
2079 vp5_decoder_select="h264chroma hpeldsp videodsp vp3dsp vp56dsp"
2080 vp6_decoder_select="h264chroma hpeldsp huffman videodsp vp3dsp vp56dsp"
2081 vp6a_decoder_select="vp6_decoder"
2082 vp6f_decoder_select="vp6_decoder"
2083 vp7_decoder_select="h264pred videodsp vp8dsp"
2084 vp8_decoder_select="h264pred videodsp vp8dsp"
2085 vp9_decoder_select="videodsp"
2086 webp_decoder_select="vp8_decoder"
2087 wmapro_decoder_select="mdct sinewin wma_freqs"
2088 wmav1_decoder_select="mdct sinewin wma_freqs"
2089 wmav1_encoder_select="mdct sinewin wma_freqs"
2090 wmav2_decoder_select="mdct sinewin wma_freqs"
2091 wmav2_encoder_select="mdct sinewin wma_freqs"
2092 wmavoice_decoder_select="lsp rdft dct mdct sinewin"
2093 wmv1_decoder_select="h263_decoder"
2094 wmv1_encoder_select="h263_encoder"
2095 wmv2_decoder_select="blockdsp error_resilience h263_decoder idctdsp intrax8 videodsp wmv2dsp"
2096 wmv2_encoder_select="h263_encoder wmv2dsp"
2097 wmv3_decoder_select="vc1_decoder"
2098 wmv3image_decoder_select="wmv3_decoder"
2099 zerocodec_decoder_deps="zlib"
2100 zlib_decoder_deps="zlib"
2101 zlib_encoder_deps="zlib"
2102 zmbv_decoder_deps="zlib"
2103 zmbv_encoder_deps="zlib"
2105 # hardware accelerators
2106 d3d11va_deps="d3d11_h dxva_h ID3D11VideoDecoder"
2107 dxva2_deps="dxva2api_h DXVA2_ConfigPictureDecode"
2108 vaapi_deps="va_va_h"
2109 vda_deps="VideoDecodeAcceleration_VDADecoder_h pthreads"
2110 vda_extralibs="-framework CoreFoundation -framework VideoDecodeAcceleration -framework QuartzCore"
2111 vdpau_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
2113 h263_vaapi_hwaccel_deps="vaapi"
2114 h263_vaapi_hwaccel_select="h263_decoder"
2115 h264_d3d11va_hwaccel_deps="d3d11va"
2116 h264_d3d11va_hwaccel_select="h264_decoder"
2117 h264_dxva2_hwaccel_deps="dxva2"
2118 h264_dxva2_hwaccel_select="h264_decoder"
2119 h264_mmal_decoder_deps="mmal"
2120 h264_mmal_decoder_select="mmal"
2121 h264_mmal_hwaccel_deps="mmal"
2122 h264_omx_encoder_deps="omx"
2123 h264_qsv_hwaccel_deps="libmfx"
2124 h264_vaapi_hwaccel_deps="vaapi"
2125 h264_vaapi_hwaccel_select="h264_decoder"
2126 h264_vda_hwaccel_deps="vda"
2127 h264_vda_hwaccel_select="h264_decoder"
2128 h264_vda_old_hwaccel_deps="vda"
2129 h264_vda_old_hwaccel_select="h264_decoder"
2130 h264_vdpau_hwaccel_deps="vdpau"
2131 h264_vdpau_hwaccel_select="h264_decoder"
2132 hevc_d3d11va_hwaccel_deps="d3d11va DXVA_PicParams_HEVC"
2133 hevc_d3d11va_hwaccel_select="hevc_decoder"
2134 hevc_dxva2_hwaccel_deps="dxva2 DXVA_PicParams_HEVC"
2135 hevc_dxva2_hwaccel_select="hevc_decoder"
2136 hevc_qsv_hwaccel_deps="libmfx"
2137 hevc_vdpau_hwaccel_deps="vdpau VdpPictureInfoHEVC"
2138 hevc_vdpau_hwaccel_select="hevc_decoder"
2139 mpeg1_vdpau_hwaccel_deps="vdpau"
2140 mpeg1_vdpau_hwaccel_select="mpeg1video_decoder"
2141 mpeg2_d3d11va_hwaccel_deps="d3d11va"
2142 mpeg2_d3d11va_hwaccel_select="mpeg2video_decoder"
2143 mpeg2_dxva2_hwaccel_deps="dxva2"
2144 mpeg2_dxva2_hwaccel_select="mpeg2video_decoder"
2145 mpeg2_mmal_decoder_deps="mmal"
2146 mpeg2_mmal_decoder_select="mmal"
2147 mpeg2_mmal_hwaccel_deps="mmal"
2148 mpeg2_qsv_hwaccel_deps="libmfx"
2149 mpeg2_vaapi_hwaccel_deps="vaapi"
2150 mpeg2_vaapi_hwaccel_select="mpeg2video_decoder"
2151 mpeg2_vdpau_hwaccel_deps="vdpau"
2152 mpeg2_vdpau_hwaccel_select="mpeg2video_decoder"
2153 mpeg4_omx_encoder_deps="omx"
2154 mpeg4_vaapi_hwaccel_deps="vaapi"
2155 mpeg4_vaapi_hwaccel_select="mpeg4_decoder"
2156 mpeg4_vdpau_hwaccel_deps="vdpau"
2157 mpeg4_vdpau_hwaccel_select="mpeg4_decoder"
2158 vc1_d3d11va_hwaccel_deps="d3d11va"
2159 vc1_d3d11va_hwaccel_select="vc1_decoder"
2160 vc1_dxva2_hwaccel_deps="dxva2"
2161 vc1_dxva2_hwaccel_select="vc1_decoder"
2162 vc1_mmal_decoder_deps="mmal"
2163 vc1_mmal_decoder_select="mmal"
2164 vc1_mmal_hwaccel_deps="mmal"
2165 vc1_vaapi_hwaccel_deps="vaapi"
2166 vc1_vaapi_hwaccel_select="vc1_decoder"
2167 vc1_vdpau_hwaccel_deps="vdpau"
2168 vc1_vdpau_hwaccel_select="vc1_decoder"
2169 wmv3_d3d11va_hwaccel_select="vc1_d3d11va_hwaccel"
2170 wmv3_dxva2_hwaccel_select="vc1_dxva2_hwaccel"
2171 wmv3_vaapi_hwaccel_select="vc1_vaapi_hwaccel"
2172 wmv3_vdpau_hwaccel_select="vc1_vdpau_hwaccel"
2174 # hardware-accelerated codecs
2175 nvenc_deps_any="dlopen LoadLibrary"
2176 nvenc_extralibs='$ldl'
2177 omx_deps="dlopen pthreads"
2178 omx_extralibs='$ldl'
2181 vaapi_encode_deps="vaapi"
2183 hwupload_cuda_filter_deps="cuda"
2184 scale_npp_filter_deps="cuda libnpp"
2186 h264_nvenc_encoder_deps="nvenc"
2187 h264_qsv_decoder_deps="libmfx"
2188 h264_qsv_decoder_select="h264_mp4toannexb_bsf h264_parser qsvdec h264_qsv_hwaccel"
2189 h264_qsv_encoder_deps="libmfx"
2190 h264_qsv_encoder_select="qsvenc"
2191 h264_vaapi_encoder_deps="VAEncPictureParameterBufferH264"
2192 h264_vaapi_encoder_select="vaapi_encode golomb"
2194 hevc_nvenc_encoder_deps="nvenc"
2195 hevc_qsv_decoder_deps="libmfx"
2196 hevc_qsv_encoder_deps="libmfx"
2197 hevc_qsv_decoder_select="hevc_mp4toannexb_bsf hevc_parser hevc_qsv_hwaccel qsvdec"
2198 hevc_qsv_encoder_select="qsvenc"
2199 hevc_vaapi_encoder_deps="VAEncPictureParameterBufferHEVC"
2200 hevc_vaapi_encoder_select="vaapi_encode golomb"
2201 mpeg2_qsv_decoder_deps="libmfx"
2202 mpeg2_qsv_decoder_select="qsvdec mpeg2_qsv_hwaccel mpegvideo_parser"
2203 mpeg2_qsv_encoder_deps="libmfx"
2204 mpeg2_qsv_encoder_select="qsvenc"
2206 nvenc_h264_encoder_deps="nvenc"
2207 nvenc_hevc_encoder_deps="nvenc"
2210 h264_parser_select="golomb h264dsp h264parse"
2211 hevc_parser_select="golomb"
2212 mpegvideo_parser_select="mpegvideo"
2213 mpeg4video_parser_select="error_resilience h263dsp mpegvideo qpeldsp"
2214 vc1_parser_select="vc1dsp"
2217 mjpeg2jpeg_bsf_select="jpegtables"
2219 # external libraries
2220 libdcadec_decoder_deps="libdcadec"
2221 libfaac_encoder_deps="libfaac"
2222 libfaac_encoder_select="audio_frame_queue"
2223 libfdk_aac_decoder_deps="libfdk_aac"
2224 libfdk_aac_encoder_deps="libfdk_aac"
2225 libfdk_aac_encoder_select="audio_frame_queue"
2226 libgsm_decoder_deps="libgsm"
2227 libgsm_encoder_deps="libgsm"
2228 libgsm_ms_decoder_deps="libgsm"
2229 libgsm_ms_encoder_deps="libgsm"
2230 libilbc_decoder_deps="libilbc"
2231 libilbc_encoder_deps="libilbc"
2232 libkvazaar_encoder_deps="libkvazaar"
2233 libmp3lame_encoder_deps="libmp3lame"
2234 libmp3lame_encoder_select="audio_frame_queue"
2235 libopencore_amrnb_decoder_deps="libopencore_amrnb"
2236 libopencore_amrnb_encoder_deps="libopencore_amrnb"
2237 libopencore_amrnb_encoder_select="audio_frame_queue"
2238 libopencore_amrwb_decoder_deps="libopencore_amrwb"
2239 libopenh264_decoder_deps="libopenh264"
2240 libopenh264_decoder_select="h264_mp4toannexb_bsf"
2241 libopenh264_encoder_deps="libopenh264"
2242 libopenjpeg_decoder_deps="libopenjpeg"
2243 libopenjpeg_encoder_deps="libopenjpeg"
2244 libopus_decoder_deps="libopus"
2245 libopus_encoder_deps="libopus"
2246 libopus_encoder_select="audio_frame_queue"
2247 libschroedinger_decoder_deps="libschroedinger"
2248 libschroedinger_encoder_deps="libschroedinger"
2249 libspeex_decoder_deps="libspeex"
2250 libspeex_encoder_deps="libspeex"
2251 libspeex_encoder_select="audio_frame_queue"
2252 libtheora_encoder_deps="libtheora"
2253 libtwolame_encoder_deps="libtwolame"
2254 libvo_aacenc_encoder_deps="libvo_aacenc"
2255 libvo_aacenc_encoder_select="audio_frame_queue"
2256 libvo_amrwbenc_encoder_deps="libvo_amrwbenc"
2257 libvorbis_encoder_deps="libvorbis"
2258 libvorbis_encoder_select="audio_frame_queue"
2259 libvpx_vp8_decoder_deps="libvpx"
2260 libvpx_vp8_encoder_deps="libvpx"
2261 libvpx_vp9_decoder_deps="libvpx"
2262 libvpx_vp9_encoder_deps="libvpx"
2263 libwavpack_encoder_deps="libwavpack"
2264 libwebp_encoder_deps="libwebp"
2265 libx262_encoder_deps="libx262"
2266 libx264_encoder_deps="libx264"
2267 libx265_encoder_deps="libx265"
2268 libxavs_encoder_deps="libxavs"
2269 libxvid_encoder_deps="libxvid"
2272 ac3_demuxer_select="ac3_parser"
2273 asf_demuxer_select="riffdec"
2274 asf_muxer_select="riffenc"
2275 asf_stream_muxer_select="asf_muxer"
2276 avi_demuxer_select="iso_media riffdec"
2277 avi_muxer_select="riffenc"
2278 avisynth_demuxer_deps="avisynth"
2279 avisynth_demuxer_select="riffdec"
2280 caf_demuxer_select="iso_media riffdec"
2281 dash_muxer_select="mp4_muxer"
2282 dirac_demuxer_select="dirac_parser"
2283 dv_demuxer_select="dvprofile"
2284 dv_muxer_select="dvprofile"
2285 dxa_demuxer_select="riffdec"
2286 eac3_demuxer_select="ac3_parser"
2287 f4v_muxer_select="mov_muxer"
2288 flac_demuxer_select="flac_parser"
2289 hds_muxer_select="flv_muxer"
2290 hls_muxer_select="mpegts_muxer"
2291 ipod_muxer_select="mov_muxer"
2292 ismv_muxer_select="mov_muxer"
2293 matroska_audio_muxer_select="matroska_muxer"
2294 matroska_demuxer_select="iso_media riffdec"
2295 matroska_demuxer_suggest="bzlib lzo zlib"
2296 matroska_muxer_select="iso_media riffenc"
2297 mmf_muxer_select="riffenc"
2298 mov_demuxer_select="iso_media riffdec"
2299 mov_demuxer_suggest="zlib"
2300 mov_muxer_select="iso_media riffenc rtpenc_chain"
2301 mp3_demuxer_select="mpegaudio_parser"
2302 mp4_muxer_select="mov_muxer"
2303 mpegts_demuxer_select="iso_media"
2304 mpegts_muxer_select="adts_muxer latm_muxer"
2305 mpegtsraw_demuxer_select="mpegts_demuxer"
2306 mxf_d10_muxer_select="mxf_muxer"
2307 nut_muxer_select="riffenc"
2308 nuv_demuxer_select="riffdec"
2309 oga_muxer_select="ogg_muxer"
2310 ogg_demuxer_select="dirac_parse"
2311 opus_muxer_select="ogg_muxer"
2312 psp_muxer_select="mov_muxer"
2313 rtp_demuxer_select="sdp_demuxer"
2314 rtpdec_select="asf_demuxer jpegtables mov_demuxer mpegts_demuxer rm_demuxer rtp_protocol srtp"
2315 rtsp_demuxer_select="http_protocol rtpdec"
2316 rtsp_muxer_select="rtp_muxer http_protocol rtp_protocol rtpenc_chain"
2317 sap_demuxer_select="sdp_demuxer"
2318 sap_muxer_select="rtp_muxer rtp_protocol rtpenc_chain"
2319 sdp_demuxer_select="rtpdec"
2320 smoothstreaming_muxer_select="ismv_muxer"
2321 spdif_muxer_select="aac_parser"
2322 spx_muxer_select="ogg_muxer"
2323 swf_demuxer_suggest="zlib"
2324 tak_demuxer_select="tak_parser"
2325 tg2_muxer_select="mov_muxer"
2326 tgp_muxer_select="mov_muxer"
2327 w64_demuxer_select="wav_demuxer"
2328 wav_demuxer_select="riffdec"
2329 wav_muxer_select="riffenc"
2330 webm_muxer_select="iso_media riffenc"
2331 webm_muxer_suggest="libopus_encoder libvorbis_encoder libvpx_vp8_encoder libvpx_vp9_encoder"
2332 wtv_demuxer_select="mpegts_demuxer riffdec"
2333 xmv_demuxer_select="riffdec"
2334 xwma_demuxer_select="riffdec"
2337 alsa_indev_deps="alsa_asoundlib_h snd_pcm_htimestamp"
2338 alsa_outdev_deps="alsa_asoundlib_h"
2339 avfoundation_indev_deps="AVFoundation_AVFoundation_h"
2340 bktr_indev_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
2341 dv1394_indev_deps="dv1394"
2342 dv1394_indev_select="dv_demuxer"
2343 fbdev_indev_deps="linux_fb_h"
2344 jack_indev_deps="jack_jack_h"
2345 jack_indev_deps_any="sem_timedwait dispatch_dispatch_h"
2346 libcdio_indev_deps="libcdio"
2347 libdc1394_indev_deps="libdc1394"
2348 oss_indev_deps_any="soundcard_h sys_soundcard_h"
2349 oss_outdev_deps_any="soundcard_h sys_soundcard_h"
2350 pulse_indev_deps="libpulse"
2351 sndio_indev_deps="sndio_h"
2352 sndio_outdev_deps="sndio_h"
2353 v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h"
2354 vfwcap_indev_deps="capCreateCaptureWindow vfwcap_defines"
2355 vfwcap_indev_extralibs="-lavicap32"
2356 x11grab_indev_deps="x11grab"
2357 x11grab_xcb_indev_deps="libxcb"
2360 ffrtmpcrypt_protocol_deps="!librtmp_protocol"
2361 ffrtmpcrypt_protocol_deps_any="gcrypt gmp openssl"
2362 ffrtmpcrypt_protocol_select="tcp_protocol"
2363 ffrtmphttp_protocol_deps="!librtmp_protocol"
2364 ffrtmphttp_protocol_select="http_protocol"
2365 gopher_protocol_select="network"
2366 http_protocol_select="tcp_protocol"
2367 httpproxy_protocol_select="tcp_protocol"
2368 https_protocol_select="tls_protocol"
2369 icecast_protocol_select="http_protocol"
2370 librtmp_protocol_deps="librtmp"
2371 librtmpe_protocol_deps="librtmp"
2372 librtmps_protocol_deps="librtmp"
2373 librtmpt_protocol_deps="librtmp"
2374 librtmpte_protocol_deps="librtmp"
2375 mmsh_protocol_select="http_protocol"
2376 mmst_protocol_select="network"
2377 rtmp_protocol_deps="!librtmp_protocol"
2378 rtmp_protocol_select="tcp_protocol"
2379 rtmpe_protocol_select="ffrtmpcrypt_protocol"
2380 rtmps_protocol_deps="!librtmp_protocol"
2381 rtmps_protocol_select="tls_protocol"
2382 rtmpt_protocol_select="ffrtmphttp_protocol"
2383 rtmpte_protocol_select="ffrtmpcrypt_protocol ffrtmphttp_protocol"
2384 rtmpts_protocol_select="ffrtmphttp_protocol https_protocol"
2385 rtp_protocol_select="udp_protocol"
2386 sctp_protocol_deps="struct_sctp_event_subscribe"
2387 sctp_protocol_select="network"
2388 srtp_protocol_select="rtp_protocol srtp"
2389 tcp_protocol_select="network"
2390 tls_gnutls_protocol_deps="gnutls"
2391 tls_gnutls_protocol_select="tcp_protocol"
2392 tls_openssl_protocol_deps="openssl !tls_gnutls_protocol"
2393 tls_openssl_protocol_select="tcp_protocol"
2394 tls_protocol_deps_any="tls_gnutls_protocol tls_openssl_protocol"
2395 udp_protocol_select="network"
2396 unix_protocol_deps="sys_un_h"
2397 unix_protocol_select="network"
2400 blackframe_filter_deps="gpl"
2401 boxblur_filter_deps="gpl"
2402 bs2b_filter_deps="libbs2b"
2403 cropdetect_filter_deps="gpl"
2404 delogo_filter_deps="gpl"
2405 drawtext_filter_deps="libfreetype"
2406 frei0r_filter_deps="frei0r dlopen"
2407 frei0r_filter_extralibs='$ldl'
2408 frei0r_src_filter_deps="frei0r dlopen"
2409 frei0r_src_filter_extralibs='$ldl'
2410 hqdn3d_filter_deps="gpl"
2411 interlace_filter_deps="gpl"
2412 ocv_filter_deps="libopencv"
2413 resample_filter_deps="avresample"
2414 scale_filter_deps="swscale"
2415 scale_qsv_filter_deps="libmfx"
2416 scale_vaapi_filter_deps="vaapi VAProcPipelineParameterBuffer"
2419 avcodec_example_deps="avcodec avutil"
2420 filter_audio_example_deps="avfilter avutil"
2421 metadata_example_deps="avformat avutil"
2422 output_example_deps="avcodec avformat avutil swscale"
2423 qsvdec_example_deps="avcodec avutil libmfx h264_qsv_decoder vaapi_x11"
2424 transcode_aac_example_deps="avcodec avformat avresample"
2426 # libraries, in linking order
2427 avcodec_deps="avutil"
2428 avdevice_deps="avformat avcodec avutil"
2429 avfilter_deps="avutil"
2430 avformat_deps="avcodec avutil"
2431 avresample_deps="avutil"
2432 swscale_deps="avutil"
2435 avconv_deps="avcodec avfilter avformat avresample swscale"
2436 avconv_select="aformat_filter anull_filter asyncts_filter atrim_filter format_filter
2437 fps_filter null_filter resample_filter scale_filter
2438 setpts_filter trim_filter"
2439 avplay_deps="avcodec avfilter avformat avresample sdl"
2440 avplay_libs='$sdl_libs'
2441 avplay_select="rdft format_filter transpose_filter hflip_filter vflip_filter"
2442 avprobe_deps="avcodec avformat"
2446 texi2html_deps="doc"
2448 # default parameters
2450 logfile="config.log"
2452 # installation paths
2453 prefix_default="/usr/local"
2454 bindir_default='${prefix}/bin'
2455 datadir_default='${prefix}/share/avconv'
2456 docdir_default='${prefix}/share/doc/libav'
2457 incdir_default='${prefix}/include'
2458 libdir_default='${prefix}/lib'
2459 mandir_default='${prefix}/share/man'
2460 shlibdir_default="$libdir_default"
2465 host_cc_default="gcc"
2470 pkg_config_default=pkg-config
2473 version_script='--version-script'
2477 arch_default=$(uname -m)
2482 target_os_default=$(tolower $(uname -s))
2483 host_os=$target_os_default
2485 # configurable options
2486 enable $EXAMPLE_LIST $LIBRARY_LIST $PROGRAM_LIST
2491 enable faan faandct faanidct
2492 enable optimizations
2493 enable safe_bitstream_reader
2495 enable swscale_alpha
2496 enable valgrind_backtrace
2498 # By default, enable only those hwaccels that have no external dependencies.
2499 enable d3d11va dxva2 vda vdpau
2502 SHFLAGS='-shared -Wl,-soname,$$(@F)'
2505 FULLNAME='$(NAME)$(BUILDSUF)'
2506 LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
2509 SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
2510 SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
2511 SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
2512 LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
2513 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'
2514 SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR) $(SLIBNAME)'
2515 VERSION_SCRIPT_POSTPROCESS_CMD="cat"
2538 host_cflags_filter=echo
2539 host_ldflags_filter=echo
2541 target_path='$(CURDIR)'
2543 # since the object filename is not given with the -MM flag, the compiler
2544 # is only able to print the basename, and we must add the path ourselves
2545 DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o," > $(@:.o=.d)'
2549 if test -f configure; then
2552 source_path=$(cd $(dirname "$0"); pwd)
2553 echo "$source_path" | grep -q '[[:blank:]]' &&
2554 die "Out of tree builds are impossible with whitespace in source path."
2555 test -e "$source_path/config.h" &&
2556 die "Out of tree builds are impossible with config.h in source dir."
2563 LIBAV_CONFIGURATION="${LIBAV_CONFIGURATION# } ${l}${r}"
2569 file=$source_path/$3
2570 sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
2573 ENCODER_LIST=$(find_things encoder ENC libavcodec/allcodecs.c)
2574 DECODER_LIST=$(find_things decoder DEC libavcodec/allcodecs.c)
2575 HWACCEL_LIST=$(find_things hwaccel HWACCEL libavcodec/allcodecs.c)
2576 PARSER_LIST=$(find_things parser PARSER libavcodec/allcodecs.c)
2577 MUXER_LIST=$(find_things muxer _MUX libavformat/allformats.c)
2578 DEMUXER_LIST=$(find_things demuxer DEMUX libavformat/allformats.c)
2579 OUTDEV_LIST=$(find_things outdev OUTDEV libavdevice/alldevices.c)
2580 INDEV_LIST=$(find_things indev _IN libavdevice/alldevices.c)
2581 FILTER_LIST=$(find_things filter FILTER libavfilter/allfilters.c)
2583 find_things_extern(){
2586 file=$source_path/$3
2587 sed -n "s/^[^#]*extern.*$pattern *ff_\([^ ]*\)_$thing;/\1_$thing/p" "$file"
2590 BSF_LIST=$(find_things_extern bsf AVBitStreamFilter libavcodec/bitstream_filters.c)
2591 PROTOCOL_LIST=$(find_things_extern protocol URLProtocol libavformat/protocols.c)
2607 for n in $COMPONENT_LIST; do
2608 v=$(toupper ${n%s})_LIST
2610 eval ${n}_if_any="\$$v"
2613 enable $ARCH_EXT_LIST
2616 echo "Unknown option \"$1\"."
2617 echo "See $0 --help for available options."
2622 printf "%-25s %-25s %-25s\n" $(cat | tr ' ' '\n' | sort)
2628 echo $* | sed s/$suffix//g | print_3_columns
2640 is_in ${comp} $COMPONENT_LIST && eval comp=\$$(toupper ${comp%s})_LIST
2641 echo "prob ${prob:-0.5}"
2649 random_seed=$(awk "BEGIN { srand($random_seed); print srand() }")
2650 $action $(rand_list "$@" | awk "BEGIN { srand($random_seed) } \$1 == \"prob\" { prob = \$2; next } rand() < prob { print }")
2659 --extra-ldexeflags=*)
2660 add_ldexeflags $optval
2663 add_extralibs $optval
2666 disable $INDEV_LIST $OUTDEV_LIST
2669 debuglevel="$optval"
2672 disable $PROGRAM_LIST
2674 --disable-everything)
2675 map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
2678 map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
2679 disable $LIBRARY_LIST $PROGRAM_LIST doc
2681 --enable-random|--disable-random)
2682 action=${opt%%-random}
2683 do_random ${action#--} $COMPONENT_LIST
2685 --enable-random=*|--disable-random=*)
2686 action=${opt%%-random=*}
2687 do_random ${action#--} $optval
2689 --enable-*=*|--disable-*=*)
2690 eval $(echo "${opt%%=*}" | sed 's/--/action=/;s/-/ thing=/')
2691 is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt"
2692 eval list=\$$(toupper $thing)_LIST
2693 name=$(echo "${optval}" | sed "s/,/_${thing}|/g")_${thing}
2694 $action $(filter "$name" $list)
2696 --enable-avserver|--disable-avserver*)
2697 warn "avserver has been removed, the ${opt} option is only"\
2698 "provided for compatibility and will be removed in the future"
2700 --enable-?*|--disable-?*)
2701 eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
2702 if is_in $option $COMPONENT_LIST; then
2703 test $action = disable && action=unset
2704 eval $action \$$(toupper ${option%s})_LIST
2705 elif is_in $option $CMDLINE_SELECT; then
2712 NAME="${opt#--list-}"
2713 is_in $NAME $COMPONENT_LIST || die_unknown $opt
2715 eval show_list $NAME \$$(toupper $NAME)_LIST
2717 --help|-h) show_help
2720 optname="${opt%%=*}"
2721 optname="${optname#--}"
2722 optname=$(echo "$optname" | sed 's/-/_/g')
2723 if is_in $optname $CMDLINE_SET; then
2724 eval $optname='$optval'
2725 elif is_in $optname $CMDLINE_APPEND; then
2726 append $optname "$optval"
2738 disabled logging && logfile=/dev/null
2740 # Disable all the library-specific components if the library itself
2741 # is disabled, see AVCODEC_LIST and following _LIST variables.
2743 disable_components(){
2744 disabled ${1} && disable $(
2745 eval components="\$$(toupper ${1})_COMPONENTS"
2746 map 'eval echo \${$(toupper ${v%s})_LIST}' $components
2750 map 'disable_components $v' $LIBRARY_LIST
2752 echo "# $0 $LIBAV_CONFIGURATION" > $logfile
2755 case "$toolchain" in
2757 cc_default="${toolchain%-asan}"
2758 add_cflags -fsanitize=address
2759 add_ldflags -fsanitize=address
2762 cc_default="${toolchain%-msan}"
2763 add_cflags -fsanitize=memory -fsanitize-memory-track-origins
2764 add_ldflags -fsanitize=memory
2767 cc_default="${toolchain%-tsan}"
2768 add_cflags -fsanitize=thread -pie
2769 add_ldflags -fsanitize=thread -pie
2770 case "$toolchain" in
2778 cc_default="${toolchain%-usan}"
2779 add_cflags -fsanitize=undefined
2780 add_ldflags -fsanitize=undefined
2781 case "$toolchain" in
2788 target_exec_default="valgrind"
2789 case "$toolchain" in
2791 target_exec_args="--alloc-fn=av_malloc --alloc-fn=av_mallocz"
2794 target_exec_args="--track-origins=yes --leak-check=full"
2799 # Check whether the current MSVC version needs the C99 converter.
2800 # From MSVC 2013 (compiler major version 18) onwards, it does actually
2801 # support enough of C99 to build libav. Default to the new
2802 # behaviour if the regexp was unable to match anything, since this
2803 # successfully parses the version number of existing supported
2804 # versions that require the converter (MSVC 2010 and 2012).
2805 cl_major_ver=$(cl 2>&1 | sed -n 's/.*Version \([[:digit:]]\{1,\}\)\..*/\1/p')
2806 if [ -z "$cl_major_ver" ] || [ $cl_major_ver -ge 18 ]; then
2809 cc_default="c99wrap cl"
2811 ld_default="$source_path/compat/windows/mslink"
2812 nm_default="dumpbin -symbols"
2819 target_os_default="win32"
2820 # Use a relative path for TMPDIR. This makes sure all the
2821 # ffconf temp files are written with a relative path, avoiding
2822 # issues with msys/win32 path conversion for MSVC parameters
2823 # such as -Fo<file> or -out:<file>.
2829 nm_default="dumpbin -symbols"
2831 target_os_default="win32"
2835 add_cflags -fprofile-arcs -ftest-coverage
2836 add_ldflags -fprofile-arcs -ftest-coverage
2839 add_cflags -fprofile-arcs -ftest-coverage
2840 add_ldflags --coverage
2843 add_cppflags -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2
2844 add_cflags -fno-strict-overflow -fstack-protector-all
2845 add_ldflags -Wl,-z,relro -Wl,-z,now
2848 die "Unknown toolchain $toolchain"
2852 test -n "$cross_prefix" && enable cross_compile
2854 if enabled cross_compile; then
2855 test -n "$arch" && test -n "$target_os" ||
2856 die "Must specify target arch and OS when cross-compiling"
2859 ar_default="${cross_prefix}${ar_default}"
2860 cc_default="${cross_prefix}${cc_default}"
2861 occ_default="${cross_prefix}${occ_default}"
2862 nm_default="${cross_prefix}${nm_default}"
2863 pkg_config_default="${cross_prefix}${pkg_config_default}"
2864 ranlib="${cross_prefix}${ranlib}"
2865 strip="${cross_prefix}${strip}"
2867 sysinclude_default="${sysroot}/usr/include"
2869 set_default arch cc pkg_config sysinclude target_exec target_os
2870 enabled cross_compile || host_cc_default=$cc
2873 if ! $pkg_config --version >/dev/null 2>&1; then
2874 warn "$pkg_config not found, library detection may fail."
2880 mingw32*|mingw64*|win32|win64|cygwin*|*-dos|freedos|opendos|os/2*|symbian) echo .exe ;;
2884 EXESUF=$(exesuf $target_os)
2885 HOSTEXESUF=$(exesuf $host_os)
2887 # set temporary file name
2888 : ${TMPDIR:=$TEMPDIR}
2892 if ! check_cmd mktemp -u XXXXXX; then
2893 # simple replacement for missing mktemp
2894 # NOT SAFE FOR GENERAL USE
2896 echo "${2%%XXX*}.${HOSTNAME}.${UID}.$$"
2901 tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
2902 (set -C; exec > $tmp) 2>/dev/null ||
2903 die "Unable to create temporary file in $TMPDIR."
2904 append TMPFILES $tmp
2908 trap 'rm -f -- $TMPFILES' EXIT
2912 tmpfile TMPE $EXESUF
2923 # make sure we can execute files in $TMPDIR
2924 cat > $TMPSH 2>> $logfile <<EOF
2927 chmod +x $TMPSH >> $logfile 2>&1
2928 if ! $TMPSH >> $logfile 2>&1; then
2930 Unable to create and execute files in $TMPDIR. Set the TMPDIR environment
2931 variable to another directory and make sure that it is not mounted noexec.
2933 die "Sanity test failed."
2939 # Filter out MSVC cl.exe options from cflags that shouldn't
2940 # be passed to gas-preprocessor
2950 -std=c99) echo -c99 ;;
2951 -mcpu=*) echo -arch ${flag#*=} ;;
2952 -mieee) echo -ieee ;;
2953 -O*|-fast) echo $flag ;;
2954 -fno-math-errno) echo -assume nomath_errno ;;
2956 -Wall) echo -msg_enable level2 ;;
2957 -Wno-pointer-sign) echo -msg_disable ptrmismatch1 ;;
2958 -Wl,*) echo $flag ;;
2968 -Wno-switch) echo -Wno-switch-enum ;;
2969 -Wno-format-zero-length) ;;
2970 -Wdisabled-optimization) ;;
2971 -Wno-pointer-sign) echo -Wno-other ;;
2977 msvc_common_flags(){
2980 # In addition to specifying certain flags under the compiler
2981 # specific filters, they must be specified here as well or else the
2982 # generic catch all at the bottom will print the original flag.
2986 -fomit-frame-pointer) ;;
2990 -fno-signed-zeros) ;;
2994 -lz) echo zlib.lib ;;
2995 -lavifil32) echo vfw32.lib ;;
2996 -lavicap32) echo vfw32.lib user32.lib ;;
2997 -lx264) echo libx264.lib ;;
2998 -l*) echo ${flag#-l}.lib ;;
2999 -L*) echo -libpath:${flag#-L} ;;
3006 msvc_common_flags "$@"
3009 -Wall) echo -W4 -wd4244 -wd4127 -wd4018 -wd4389 \
3010 -wd4146 -wd4057 -wd4204 -wd4706 -wd4305 \
3011 -wd4152 -wd4324 -we4013 -wd4100 -wd4214 \
3012 -wd4273 -wd4554 -wd4701 ;;
3018 msvc_common_flags "$@"
3021 # Despite what Intel's documentation says -Wall, which is supported
3022 # on Windows, does enable remarks so disable them here.
3023 -Wall) echo $flag -Qdiag-disable:remark ;;
3024 -std=c99) echo -Qstd=c99 ;;
3032 -flto) echo -Mipa=fast,libopt,libinline,vestigial ;;
3033 -fomit-frame-pointer) echo -Mnoframe ;;
3044 case "${flag#*=}" in
3045 native) echo -xtarget=native ;;
3046 v9|niagara) echo -xarch=sparc ;;
3047 ultrasparc) echo -xarch=sparcvis ;;
3048 ultrasparc3|niagara2) echo -xarch=sparcvis2 ;;
3049 i586|pentium) echo -xchip=pentium ;;
3050 i686|pentiumpro|pentium2) echo -xtarget=pentium_pro ;;
3051 pentium3*|c3-2) echo -xtarget=pentium3 ;;
3052 pentium-m) echo -xarch=sse2 -xchip=pentium3 ;;
3053 pentium4*) echo -xtarget=pentium4 ;;
3054 prescott|nocona) echo -xarch=sse3 -xchip=pentium4 ;;
3055 *-sse3) echo -xarch=sse3 ;;
3056 core2) echo -xarch=ssse3 -xchip=core2 ;;
3057 corei7) echo -xarch=sse4_2 -xchip=nehalem ;;
3058 corei7-avx) echo -xarch=avx -xchip=sandybridge ;;
3059 amdfam10|barcelona|bdver*) echo -xarch=sse4_1 ;;
3060 athlon-4|athlon-[mx]p) echo -xarch=ssea ;;
3061 k8|opteron|athlon64|athlon-fx)
3062 echo -xarch=sse2a ;;
3063 athlon*) echo -xarch=pentium_proa ;;
3066 -std=c99) echo -xc99 ;;
3067 -fomit-frame-pointer) echo -xregs=frameptr ;;
3068 -fPIC) echo -KPIC -xcode=pic32 ;;
3069 -W*,*) echo $flag ;;
3070 -f*-*|-W*|-mimpure-text) ;;
3081 case "${flag#*=}" in
3082 armv7-a|cortex-a*) echo -mv=7a8 ;;
3083 armv7-r|cortex-r*) echo -mv=7r4 ;;
3084 armv7-m|cortex-m*) echo -mv=7m3 ;;
3085 armv6*|arm11*) echo -mv=6 ;;
3086 armv5*e|arm[79]*e*|arm9[24]6*|arm96*|arm102[26])
3088 armv4*|arm7*|arm9[24]*) echo -mv=4 ;;
3091 -mfpu=neon) echo --float_support=vfpv3 --neon ;;
3092 -mfpu=vfp) echo --float_support=vfpv2 ;;
3093 -mfpu=vfpv3) echo --float_support=vfpv3 ;;
3094 -mfpu=vfpv3-d16) echo --float_support=vfpv3d16 ;;
3095 -msoft-float) echo --float_support=vfplib ;;
3096 -O[0-3]|-mf=*) echo $flag ;;
3098 -pds=*) echo $flag ;;
3099 -D*|-I*) echo $flag ;;
3100 --gcc|--abi=*) echo $flag ;;
3110 unset _type _ident _cc_c _cc_e _cc_o _flags _cflags
3111 unset _ld_o _ldflags _ld_lib _ld_path
3112 unset _depflags _DEPCMD _DEPFLAGS
3115 if $_cc -v 2>&1 | grep -q '^gcc.*LLVM'; then
3117 gcc_extra_ver=$(expr "$($_cc --version 2>/dev/null | head -n1)" : '.*\((.*)\)')
3118 _ident="llvm-gcc $($_cc -dumpversion 2>/dev/null) $gcc_extra_ver"
3119 _depflags='-MMD -MF $(@:.o=.d) -MT $@'
3122 elif $_cc -v 2>&1 | grep -qi ^gcc; then
3124 gcc_version=$($_cc --version | head -n1)
3125 gcc_basever=$($_cc -dumpversion)
3126 gcc_pkg_ver=$(expr "$gcc_version" : '[^ ]* \(([^)]*)\)')
3127 gcc_ext_ver=$(expr "$gcc_version" : ".*$gcc_pkg_ver $gcc_basever \\(.*\\)")
3128 _ident=$(cleanws "gcc $gcc_basever $gcc_pkg_ver $gcc_ext_ver")
3129 if ! $_cc -dumpversion | grep -q '^2\.'; then
3130 _depflags='-MMD -MF $(@:.o=.d) -MT $@'
3134 elif $_cc --version 2>/dev/null | grep -q ^icc; then
3136 _ident=$($_cc --version | head -n1)
3141 elif $_cc -v 2>&1 | grep -q xlc; then
3143 _ident=$($_cc -qversion 2>/dev/null | head -n1)
3145 _cflags_size='-O5 -qcompact'
3146 elif $_cc -V 2>/dev/null | grep -q Compaq; then
3148 _ident=$($_cc -V | head -n1 | cut -d' ' -f1-3)
3150 _cflags_speed='-fast'
3152 _flags_filter=ccc_flags
3153 elif $_cc --vsn 2>/dev/null | grep -Eq "ARM (C/C\+\+ )?Compiler"; then
3154 test -d "$sysroot" || die "No valid sysroot specified."
3156 _ident=$($_cc --vsn | grep -i build | head -n1 | sed 's/.*: //')
3157 armcc_conf="$PWD/armcc.conf"
3158 $_cc --arm_linux_configure \
3159 --arm_linux_config_file="$armcc_conf" \
3160 --configure_sysroot="$sysroot" \
3161 --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
3162 die "Error creating armcc configuration file."
3163 $_cc --vsn | grep -q RVCT && armcc_opt=rvct || armcc_opt=armcc
3164 _flags="--arm_linux_config_file=$armcc_conf --translate_gcc"
3165 as_default="${cross_prefix}gcc"
3169 elif $_cc -version 2>/dev/null | grep -Eq 'TMS470|TI ARM'; then
3171 _ident=$($_cc -version | head -n1 | tr -s ' ')
3172 _flags='--gcc --abi=eabi -me'
3175 _depflags='-ppa -ppd=$(@:.o=.d)'
3176 _cflags_speed='-O3 -mf=5'
3177 _cflags_size='-O3 -mf=2'
3178 _flags_filter=tms470_flags
3179 elif $_cc -v 2>&1 | grep -q clang; then
3181 _ident=$($_cc --version 2>/dev/null | head -n1)
3182 _depflags='-MMD -MF $(@:.o=.d) -MT $@'
3185 elif $_cc -V 2>&1 | grep -q Sun; then
3187 _ident=$($_cc -V 2>&1 | head -n1 | cut -d' ' -f 2-)
3188 _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "1s,^.*: ,$@: ," -e "\$$!s,\$$, \\\," -e "1!s,^.*: , ," > $(@:.o=.d)'
3189 _DEPFLAGS='-xM1 -xc99'
3192 _cflags_size='-O5 -xspace'
3193 _flags_filter=suncc_flags
3194 elif $_cc -v 2>&1 | grep -q 'PathScale\|Path64'; then
3196 _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
3197 _depflags='-MMD -MF $(@:.o=.d) -MT $@'
3200 _flags_filter='filter_out -Wdisabled-optimization'
3201 elif $_cc -v 2>&1 | grep -q Open64; then
3203 _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
3204 _depflags='-MMD -MF $(@:.o=.d) -MT $@'
3207 _flags_filter='filter_out -Wdisabled-optimization|-Wtype-limits|-fno-signed-zeros'
3208 elif $_cc -V 2>&1 | grep -q Portland; then
3210 _ident="PGI $($_cc -V 2>&1 | awk '/^pgcc/ { print $2; exit }')"
3211 opt_common='-alias=ansi -Mdse -Mlre -Mpre'
3212 _cflags_speed="-O3 -Mautoinline -Munroll=c:4 $opt_common"
3213 _cflags_size="-O2 -Munroll=c:1 $opt_common"
3215 _flags_filter=pgi_flags
3216 elif $_cc 2>&1 | grep -q 'Microsoft.*ARM.*Assembler'; then
3218 _ident=$($_cc | head -n1)
3219 # 4509: "This form of conditional instruction is deprecated"
3220 _flags="-nologo -ignore 4509"
3221 _flags_filter=armasm_flags
3222 elif $_cc -nologo- 2>&1 | grep -q Microsoft; then
3224 _ident=$($_cc 2>&1 | head -n1)
3225 _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< 2>&1 | awk '\''/including/ { sub(/^.*file: */, ""); gsub(/\\/, "/"); if (!match($$0, / /)) print "$@:", $$0 }'\'' > $(@:.o=.d)'
3226 _DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -showIncludes -Zs'
3229 if $_cc -nologo- 2>&1 | grep -q Linker; then
3236 _flags_filter=msvc_flags
3238 _ld_path='-libpath:'
3240 _cflags='-D_USE_MATH_DEFINES -D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_WARNINGS'
3241 elif $_cc 2>&1 | grep -q Intel; then
3243 _ident=$($_cc 2>&1 | head -n1)
3244 _depflags='-QMMD -QMF$(@:.o=.d) -QMT$@'
3245 # Not only is O3 broken on 13.x+ but it is slower on all previous
3246 # versions (tested) as well.
3248 _cflags_size="-O1 -Oi" # -O1 without -Oi miscompiles stuff
3249 if $_cc 2>&1 | grep -q Linker; then
3256 _flags_filter=icl_flags
3258 _ld_path='-libpath:'
3259 # -Qdiag-error to make icl error when seeing certain unknown arguments
3260 _flags='-nologo -Qdiag-error:4044,10157'
3261 # -Qvec- -Qsimd- to prevent miscompilation, -GS for consistency
3262 # with MSVC which enables it by default.
3263 _cflags='-D_USE_MATH_DEFINES -Qms0 -Qvec- -Qsimd- -GS'
3264 elif $_cc --version 2>/dev/null | grep -q ^cparser; then
3266 _ident=$($_cc --version | head -n1)
3270 _flags_filter=cparser_flags
3273 eval ${pfx}_type=\$_type
3274 eval ${pfx}_ident=\$_ident
3278 eval ${1}_C=\${_cc_c-\${${1}_C}}
3279 eval ${1}_E=\${_cc_e-\${${1}_E}}
3280 eval ${1}_O=\${_cc_o-\${${1}_O}}
3282 if [ -n "$_depflags" ]; then
3283 eval ${1}_DEPFLAGS=\$_depflags
3285 eval ${1}DEP=\${_DEPCMD:-\$DEPCMD}
3286 eval ${1}DEP_FLAGS=\${_DEPFLAGS:-\$DEPFLAGS}
3287 eval DEP${1}FLAGS=\$_flags
3292 cflags_filter=$_flags_filter
3293 cflags_speed=$_cflags_speed
3294 cflags_size=$_cflags_size
3295 cflags_noopt=$_cflags_noopt
3296 add_cflags $_flags $_cflags
3297 cc_ldflags=$_ldflags
3300 probe_cc hostcc "$host_cc"
3301 host_cflags_filter=$_flags_filter
3302 add_host_cflags $_flags $_cflags
3305 test -n "$cc_type" && enable $cc_type ||
3306 warn "Unknown C compiler $cc, unable to select optimal CFLAGS"
3308 : ${as_default:=$cc}
3309 : ${objcc_default:=$cc}
3310 : ${dep_cc_default:=$cc}
3311 : ${ld_default:=$cc}
3312 : ${host_ld_default:=$host_cc}
3313 set_default ar as objcc dep_cc ld host_ld
3316 asflags_filter=$_flags_filter
3317 add_asflags $_flags $_cflags
3320 probe_cc objcc "$objcc"
3321 objcflags_filter=$_flags_filter
3322 add_objcflags $_flags $_cflags
3326 ldflags_filter=$_flags_filter
3327 add_ldflags $_flags $_ldflags
3328 test "$cc_type" != "$ld_type" && add_ldflags $cc_ldflags
3330 LD_LIB=${_ld_lib-$LD_LIB}
3331 LD_PATH=${_ld_path-$LD_PATH}
3333 probe_cc hostld "$host_ld"
3334 host_ldflags_filter=$_flags_filter
3335 add_host_ldflags $_flags $_ldflags
3336 HOSTLD_O=${_ld_o-$HOSTLD_O}
3338 if [ -z "$CC_DEPFLAGS" ] && [ "$dep_cc" != "$cc" ]; then
3339 probe_cc depcc "$dep_cc"
3340 CCDEP=${_DEPCMD:-$DEPCMD}
3341 CCDEP_FLAGS=${_DEPFLAGS:=$DEPFLAGS}
3345 if $ar 2>&1 | grep -q Microsoft; then
3348 elif $ar 2>&1 | grep -q 'Texas Instruments'; then
3351 elif $ar 2>&1 | grep -q 'Usage: ar.*-X.*any'; then
3352 arflags='-Xany -r -c'
3359 add_cflags $extra_cflags
3360 add_objcflags $extra_objcflags
3361 add_asflags $extra_cflags
3363 if test -n "$sysroot"; then
3366 add_cppflags --sysroot="$sysroot"
3367 add_ldflags --sysroot="$sysroot"
3370 add_cppflags -I"$sysinclude"
3371 add_ldflags --sysroot="$sysroot"
3376 if test "$cpu" = host; then
3377 enabled cross_compile &&
3378 die "--cpu=host makes no sense when cross-compiling."
3383 $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
3385 s/.*$1=\\([^ ]*\\).*/\\1/
3390 cpu=$(check_native -march || check_native -mcpu)
3394 test "${cpu:-host}" = host &&
3395 die "--cpu=host not supported with compiler $cc"
3398 # Deal with common $arch aliases
3422 "Power Macintosh"|ppc*|powerpc*)
3437 i[3-6]86|i86pc|BePC|x86pc|x86_64|amd64)
3442 is_in $arch $ARCH_LIST || warn "unknown architecture $arch"
3445 # Add processor-specific flags
3446 if enabled aarch64; then
3450 cpuflags="-march=$cpu"
3453 cpuflags="-mcpu=$cpu"
3457 elif enabled alpha; then
3459 cpuflags="-mcpu=$cpu"
3461 elif enabled arm; then
3464 check_cpp_condition stddef.h \
3465 "defined __ARM_ARCH_${1}__ || defined __TARGET_ARCH_${2:-$1}" \
3470 if check_arm_arch 4; then echo armv4
3471 elif check_arm_arch 4T; then echo armv4t
3472 elif check_arm_arch 5; then echo armv5
3473 elif check_arm_arch 5E; then echo armv5e
3474 elif check_arm_arch 5T; then echo armv5t
3475 elif check_arm_arch 5TE; then echo armv5te
3476 elif check_arm_arch 5TEJ; then echo armv5te
3477 elif check_arm_arch 6; then echo armv6
3478 elif check_arm_arch 6J; then echo armv6j
3479 elif check_arm_arch 6K; then echo armv6k
3480 elif check_arm_arch 6Z; then echo armv6z
3481 elif check_arm_arch 6ZK; then echo armv6zk
3482 elif check_arm_arch 6T2; then echo armv6t2
3483 elif check_arm_arch 7; then echo armv7
3484 elif check_arm_arch 7A 7_A; then echo armv7-a
3485 elif check_arm_arch 7S; then echo armv7-a
3486 elif check_arm_arch 7R 7_R; then echo armv7-r
3487 elif check_arm_arch 7M 7_M; then echo armv7-m
3488 elif check_arm_arch 7EM 7E_M; then echo armv7-m
3489 elif check_arm_arch 8A 8_A; then echo armv8-a
3493 [ "$cpu" = generic ] && cpu=$(probe_arm_arch)
3497 cpuflags="-march=$cpu"
3498 subarch=$(echo $cpu | sed 's/[^a-z0-9]//g')
3501 cpuflags="-mcpu=$cpu"
3503 cortex-a*) subarch=armv7a ;;
3504 cortex-r*) subarch=armv7r ;;
3505 cortex-m*) enable thumb; subarch=armv7m ;;
3506 arm11*) subarch=armv6 ;;
3507 arm[79]*e*|arm9[24]6*|arm96*|arm102[26]) subarch=armv5te ;;
3508 armv4*|arm7*|arm9[24]*) subarch=armv4 ;;
3509 *) subarch=$(probe_arm_arch) ;;
3515 armv5t*) enable fast_clz ;;
3516 armv[6-8]*) enable fast_clz fast_unaligned ;;
3519 elif enabled avr32; then
3524 cpuflags="-mpart=$cpu"
3528 cpuflags="-march=$cpu"
3532 cpuflags="-mcpu=$cpu"
3536 cpuflags="-march=$cpu"
3540 elif enabled bfin; then
3542 cpuflags="-mcpu=$cpu"
3544 elif enabled mips; then
3546 cpuflags="-march=$cpu"
3548 elif enabled ppc; then
3552 case $(tolower $cpu) in
3553 601|ppc601|powerpc601)
3554 cpuflags="-mcpu=601"
3557 603*|ppc603*|powerpc603*)
3558 cpuflags="-mcpu=603"
3561 604*|ppc604*|powerpc604*)
3562 cpuflags="-mcpu=604"
3565 g3|75*|ppc75*|powerpc75*)
3566 cpuflags="-mcpu=750"
3569 g4|745*|ppc745*|powerpc745*)
3570 cpuflags="-mcpu=7450"
3573 74*|ppc74*|powerpc74*)
3574 cpuflags="-mcpu=7400"
3577 g5|970|ppc970|powerpc970)
3578 cpuflags="-mcpu=970"
3582 cpuflags="-mcpu=$cpu"
3586 cpuflags="-mcpu=$cpu"
3590 cpuflags="-mcpu=cell"
3595 cpuflags="-mcpu=e500mc"
3599 cpuflags="-mcpu=8548 -mhard-float -mfloat-gprs=double"
3604 cpuflags="-mcpu=8540 -mhard-float"
3610 elif enabled sparc; then
3613 cypress|f93[04]|tsc701|sparcl*|supersparc|hypersparc|niagara|v[789])
3614 cpuflags="-mcpu=$cpu"
3616 ultrasparc*|niagara[234])
3617 cpuflags="-mcpu=$cpu"
3621 elif enabled x86; then
3625 cpuflags="-march=$cpu"
3629 # targets that do NOT support nopl and conditional mov (cmov)
3630 pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
3631 cpuflags="-march=$cpu"
3634 # targets that do support nopl and conditional mov (cmov)
3635 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*)
3636 cpuflags="-march=$cpu"
3640 # targets that do support conditional mov but on which it's slow
3641 pentium4|pentium4m|prescott|nocona)
3642 cpuflags="-march=$cpu"
3650 if [ "$cpu" != generic ]; then
3651 add_cflags $cpuflags
3652 add_asflags $cpuflags
3653 test "$cc_type" = "$ld_type" && add_ldflags $cpuflags
3656 # compiler sanity check
3658 int main(void){ return 0; }
3660 if test "$?" != 0; then
3661 echo "$cc is unable to create an executable file."
3662 if test -z "$cross_prefix" && ! enabled cross_compile ; then
3663 echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
3664 echo "Only do this if you know what cross compiling means."
3666 die "C compiler test failed."
3669 add_cppflags -D_ISOC99_SOURCE
3670 check_cflags -std=c99
3671 check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
3674 check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
3678 add_host_cppflags -D_ISOC99_SOURCE
3679 check_host_cflags -std=c99
3680 check_host_cflags -Wall
3681 check_host_cflags -O3
3687 check_code cc "" "int test[2*($expr) - 1]" &&
3688 subarch=$arch64 || subarch=$arch32
3696 check_64bit mips mips64 '_MIPS_SIM > 1'
3700 check_64bit parisc parisc64 'sizeof(void *) > 4'
3704 check_64bit ppc ppc64 'sizeof(void *) > 4'
3708 check_64bit s390 s390x 'sizeof(void *) > 4'
3712 check_64bit sparc sparc64 'sizeof(void *) > 4'
3716 check_64bit x86_32 x86_64 'sizeof(void *) > 4'
3717 if test "$subarch" = "x86_64"; then
3724 enabled spic && enable_weak pic
3730 add_cppflags '-I\$(SRC_PATH)/compat/aix'
3731 enabled shared && add_ldflags -Wl,-brtl
3735 enable section_data_rel_ro
3736 SLIB_INSTALL_NAME='$(SLIBNAME)'
3738 SHFLAGS='-shared -Wl,-soname,$(SLIBNAME)'
3741 prefix_default="/boot/common"
3742 network_extralibs="-lnetwork"
3746 SHFLAGS='-shared -Wl,-h,$$(@F)'
3747 enabled x86 && SHFLAGS="-mimpure-text $SHFLAGS"
3748 network_extralibs="-lsocket -lnsl"
3749 # When using suncc to build, the Solaris linker will mark
3750 # an executable with each instruction set encountered by
3751 # the Solaris assembler. As our libraries contain their own
3752 # guards for processor-specific code, instead suppress
3753 # generation of the HWCAPS ELF section on Solaris x86 only.
3754 enabled_all suncc x86 &&
3755 echo "hwcap_1 = OVERRIDE;" > mapfile &&
3756 add_ldflags -Wl,-M,mapfile
3757 nm_default='nm -P -g'
3759 VERSION_SCRIPT_POSTPROCESS_CMD='perl $(SRC_PATH)/compat/solaris/make_sunver.pl - $(OBJS)'
3763 oss_indev_extralibs="-lossaudio"
3764 oss_outdev_extralibs="-lossaudio"
3769 SLIB_INSTALL_NAME='$(SLIBNAME).$(LIBMAJOR).$(LIBMINOR)'
3771 oss_indev_extralibs="-lossaudio"
3772 oss_outdev_extralibs="-lossaudio"
3780 add_extralibs -lpoll -lgnugetopt
3783 enabled ppc && add_asflags -force_cpusubtype_ALL
3784 SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR)'
3785 enabled x86_32 && append SHFLAGS -Wl,-read_only_relocs,suppress
3786 add_ldflags -Wl,-dynamic,-search_paths_first
3788 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
3789 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
3791 enabled x86_64 && objformat="macho64"
3792 enabled_any pic shared ||
3793 { check_cflags -mdynamic-no-pic && add_asflags -mdynamic-no-pic; }
3794 check_header dispatch/dispatch.h &&
3795 add_cppflags '-I\$(SRC_PATH)/compat/dispatch_semaphore'
3798 die "Native MSYS builds are discouraged, please use the MINGW environment."
3801 if test $target_os = "mingw32ce"; then
3807 if enabled x86_64; then
3808 LIBTARGET="i386:x86-64"
3809 elif enabled arm; then
3812 check_ldflags -Wl,--nxcompat
3813 check_ldflags -Wl,--dynamicbase
3814 shlibdir_default="$bindir_default"
3817 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
3818 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
3819 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)'
3820 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
3822 SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
3823 SLIB_INSTALL_EXTRA_LIB='lib$(SLIBNAME:$(SLIBSUF)=.dll.a) $(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
3824 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'
3826 dlltool="${cross_prefix}dlltool"
3832 if enabled shared; then
3833 # Link to the import library instead of the normal static library
3836 # Cannot build both shared and static libs with MSVC or icl.
3839 shlibdir_default="$bindir_default"
3842 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
3843 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
3844 SLIB_CREATE_DEF_CMD='$(SRC_PATH)/compat/windows/makedef $(SUBDIR)lib$(NAME).ver $(OBJS) > $$(@:$(SLIBSUF)=.def)'
3845 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
3847 SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
3848 SLIB_INSTALL_EXTRA_LIB='$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
3849 SHFLAGS='-dll -def:$$(@:$(SLIBSUF)=.def) -implib:$(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib)'
3856 shlibdir_default="$bindir_default"
3859 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
3860 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
3861 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
3863 SLIB_INSTALL_EXTRA_LIB='lib$(FULLNAME).dll.a'
3864 SHFLAGS='-shared -Wl,--out-implib,$(SUBDIR)lib$(FULLNAME).dll.a'
3868 *-dos|freedos|opendos)
3869 network_extralibs="-lsocket"
3872 add_cppflags -U__STRICT_ANSI__
3876 enable section_data_rel_ro
3880 ranlib="echo ignoring ranlib"
3885 add_cppflags -D_GNU_SOURCE
3886 add_ldflags -Zomf -Zbin-files -Zargs-wild -Zmap
3887 SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
3891 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
3892 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
3893 SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
3894 echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
3895 echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
3896 echo EXPORTS >> $(SUBDIR)$(NAME).def; \
3897 emxexp $(OBJS) >> $(SUBDIR)$(NAME).def'
3898 SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
3899 emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
3900 SLIB_INSTALL_EXTRA_LIB='$(LIBPREF)$(NAME)_dll.a $(LIBPREF)$(NAME)_dll.lib'
3904 add_cppflags -D_BSD_SOURCE
3909 add_cppflags -D_QNX_SOURCE
3910 network_extralibs="-lsocket"
3915 add_cflags --include=$sysinclude/gcce/gcce.h -fvisibility=default
3916 add_cppflags -D__GCCE__ -D__SYMBIAN32__ -DSYMBIAN_OE_POSIX_SIGNALS
3917 add_ldflags -Wl,--target1-abs,--no-undefined \
3918 -Wl,-Ttext,0x80000,-Tdata,0x1000000 -shared \
3919 -Wl,--entry=_E32Startup -Wl,-u,_E32Startup
3920 add_extralibs -l:eexe.lib -l:usrt2_2.lib -l:dfpaeabi.dso \
3921 -l:drtaeabi.dso -l:scppnwdl.dso -lsupc++ -lgcc \
3922 -l:libc.dso -l:libm.dso -l:euser.dso -l:libcrt0.lib
3925 add_cppflags -D_OSF_SOURCE -D_POSIX_PII -D_REENTRANT
3930 add_cppflags -D_C99_SNPRINTF_EXTENSION \
3931 -D_REENTRANT_SOURCE \
3932 -D_RESEARCH_SOURCE \
3935 add_compat strtod.o strtod=avpriv_strtod
3936 network_extralibs='-lbsd'
3937 exeobjs=compat/plan9/main.o
3943 die "Unknown OS '$target_os'."
3947 # determine libc flavour
3952 # uclibc defines __GLIBC__, so it needs to be checked before glibc.
3953 if check_${pfx}cpp_condition features.h "defined __UCLIBC__"; then
3954 eval ${pfx}libc_type=uclibc
3955 add_${pfx}cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
3956 elif check_${pfx}cpp_condition features.h "defined __GLIBC__"; then
3957 eval ${pfx}libc_type=glibc
3958 add_${pfx}cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
3959 # MinGW headers can be installed on Cygwin, so check for newlib first.
3960 elif check_${pfx}cpp_condition newlib.h "defined _NEWLIB_VERSION"; then
3961 eval ${pfx}libc_type=newlib
3962 add_${pfx}cppflags -U__STRICT_ANSI__
3963 # MinGW64 is backwards compatible with MinGW32, so check for it first.
3964 elif check_${pfx}cpp_condition _mingw.h "defined __MINGW64_VERSION_MAJOR"; then
3965 eval ${pfx}libc_type=mingw64
3966 add_${pfx}cppflags -U__STRICT_ANSI__ -D__USE_MINGW_ANSI_STDIO=1
3967 eval test \$${pfx_no_}cc_type = "gcc" &&
3968 add_${pfx}cppflags -D__printf__=__gnu_printf__
3969 elif check_${pfx}cpp_condition _mingw.h "defined __MINGW_VERSION" ||
3970 check_${pfx}cpp_condition _mingw.h "defined __MINGW32_VERSION"; then
3971 eval ${pfx}libc_type=mingw32
3972 check_${pfx}cpp_condition _mingw.h "__MINGW32_MAJOR_VERSION > 3 || \
3973 (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
3974 die "ERROR: MinGW32 runtime version must be >= 3.15."
3975 add_${pfx}cppflags -U__STRICT_ANSI__ -D__USE_MINGW_ANSI_STDIO=1
3976 eval test \$${pfx_no_}cc_type = "gcc" &&
3977 add_${pfx}cppflags -D__printf__=__gnu_printf__
3978 elif check_${pfx}cpp_condition crtversion.h "defined _VC_CRT_MAJOR_VERSION"; then
3979 eval ${pfx}libc_type=msvcrt
3980 if check_${pfx}cpp_condition crtversion.h "_VC_CRT_MAJOR_VERSION < 14"; then
3981 if [ "$pfx" = host_ ]; then
3982 add_host_cppflags -Dsnprintf=_snprintf
3984 add_compat strtod.o strtod=avpriv_strtod
3985 add_compat msvcrt/snprintf.o snprintf=avpriv_snprintf \
3986 _snprintf=avpriv_snprintf \
3987 vsnprintf=avpriv_vsnprintf
3990 # The MSVC 2010 headers (Win 7.0 SDK) set _WIN32_WINNT to
3991 # 0x601 by default unless something else is set by the user.
3992 # This can easily lead to us detecting functions only present
3993 # in such new versions and producing binaries requiring windows 7.0.
3994 # Therefore explicitly set the default to XP unless the user has
3995 # set something else on the command line.
3996 # Don't do this if WINAPI_FAMILY is set and is set to a non-desktop
3997 # family. For these cases, configure is free to use any functions
3998 # found in the SDK headers by default. (Alternatively, we could force
3999 # _WIN32_WINNT to 0x0602 in that case.)
4000 check_${pfx}cpp_condition stdlib.h "defined(_WIN32_WINNT)" ||
4001 { check_${pfx}cpp <<EOF && add_${pfx}cppflags -D_WIN32_WINNT=0x0502; }
4002 #ifdef WINAPI_FAMILY
4003 #include <winapifamily.h>
4004 #if !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
4009 elif check_${pfx}cpp_condition stddef.h "defined __KLIBC__"; then
4010 eval ${pfx}libc_type=klibc
4011 elif check_${pfx}cpp_condition sys/cdefs.h "defined __BIONIC__"; then
4012 eval ${pfx}libc_type=bionic
4013 elif check_${pfx}cpp_condition sys/brand.h "defined LABELED_BRAND_NAME"; then
4014 eval ${pfx}libc_type=solaris
4015 add_${pfx}cppflags -D__EXTENSIONS__ -D_XOPEN_SOURCE=600
4017 eval ${pfx}libc_type=default
4018 add_${pfx}cppflags -D_DEFAULT_SOURCE
4023 test -n "$libc_type" && enable libc_$libc_type
4025 test -n "$host_libc_type" && enable host_libc_$host_libc_type
4029 add_compat strtod.o strtod=avpriv_strtod
4033 # hacks for compiler/libc/os combinations
4035 if enabled_all tms470 libc_glibc; then
4036 CPPFLAGS="-I${source_path}/compat/tms470 ${CPPFLAGS}"
4037 add_cppflags -D__USER_LABEL_PREFIX__=
4038 add_cppflags -D__builtin_memset=memset
4039 add_cppflags -D__gnuc_va_list=va_list -D_VA_LIST_DEFINED
4040 add_cflags -pds=48 # incompatible redefinition of macro
4043 if enabled_all ccc libc_glibc; then
4044 add_ldflags -Wl,-z,now # calls to libots crash without this
4047 check_compile_assert flt_lim "float.h limits.h" "DBL_MAX == (double)DBL_MAX" ||
4048 add_cppflags '-I\$(SRC_PATH)/compat/float'
4051 echo "$*" | sed 's/%/%25/g;s/:/%3a/g'
4054 echo "config:$arch:$subarch:$cpu:$target_os:$(esc $cc_ident):$(esc $LIBAV_CONFIGURATION)" >config.fate
4056 check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable_weak pic
4058 set_default $PATHS_LIST
4061 # we need to build at least one lib type
4062 if ! enabled_any static shared; then
4064 At least one library type must be built.
4065 Specify --enable-static to build the static libraries or --enable-shared to
4066 build the shared libraries as well. To only build the shared libraries specify
4067 --disable-static in addition to --enable-shared.
4072 die_license_disabled() {
4073 enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
4076 die_license_disabled gpl libcdio
4077 die_license_disabled gpl libx264
4078 die_license_disabled gpl libx265
4079 die_license_disabled gpl libxavs
4080 die_license_disabled gpl libxvid
4081 die_license_disabled gpl x11grab
4083 die_license_disabled nonfree cuda
4084 die_license_disabled nonfree libfaac
4085 die_license_disabled nonfree libfdk_aac
4086 die_license_disabled nonfree libnpp
4087 die_license_disabled nonfree openssl
4089 die_license_disabled version3 libopencore_amrnb
4090 die_license_disabled version3 libopencore_amrwb
4091 die_license_disabled version3 libvo_aacenc
4092 die_license_disabled version3 libvo_amrwbenc
4094 enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
4096 disabled optimizations || check_cflags -fomit-frame-pointer
4099 disabled pic && return
4102 case "$target_os" in
4112 enabled pic && enable_weak_pic
4114 check_cc <<EOF || die "Symbol mangling check failed."
4117 sym=$($nm $TMPO | awk '/ff_extern/{ print substr($0, match($0, /[^ \t]*ff_extern/)) }')
4118 extern_prefix=${sym%%ff_extern*}
4120 check_cc <<EOF && enable_weak inline_asm
4121 void foo(void) { __asm__ volatile ("" ::); }
4125 for restrict_keyword in restrict __restrict__ __restrict; do
4126 check_cc <<EOF && _restrict=$restrict_keyword && break
4127 void foo(char * $restrict_keyword p);
4131 check_cc <<EOF && enable pragma_deprecated
4132 void foo(void) { _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") }
4135 check_cc <<EOF && enable attribute_packed
4136 struct { int x; } __attribute__((packed)) x;
4139 check_cc <<EOF && enable attribute_may_alias
4140 union { int x; } __attribute__((may_alias)) x;
4143 check_cc <<EOF || die "endian test failed"
4144 unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
4146 od -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
4149 log "check_gas using '$as' as AS"
4150 # :vararg is used on aarch64, arm and ppc altivec
4151 check_as <<EOF || return 1
4152 .macro m n, y:vararg=0
4157 # .altmacro is only used in arm asm
4158 ! enabled arm || check_as <<EOF || return 1
4165 if enabled_any arm aarch64 || enabled_all ppc altivec && enabled asm; then
4167 enabled_any arm aarch64 && nogas=die
4168 enabled_all ppc altivec && nogas=warn
4172 arm*) gaspp_as_type=armasm; as_noop=-h ;;
4173 gcc) gaspp_as_type=gas ;;
4174 *) gaspp_as_type=$as_type ;;
4177 [ $target_os = "darwin" ] && gaspp_as_type="apple-$gaspp_as_type"
4179 check_cmd gas-preprocessor.pl -arch $arch -as-type $gaspp_as_type -- $as $as_noop &&
4180 gas="gas-preprocessor.pl -arch $arch -as-type $gaspp_as_type -- $as"
4182 if ! check_gas ; then
4185 $nogas "GNU assembler not found, install/update gas-preprocessor"
4188 check_as <<EOF && enable as_func
4194 check_inline_asm inline_asm_labels '"1:\n"'
4196 if enabled aarch64; then
4197 enabled armv8 && check_insn armv8 'prfm pldl1strm, [x0]'
4198 # internal assembler in clang 3.3 does not support this instruction
4199 enabled neon && check_insn neon 'ext v0.8B, v0.8B, v1.8B, #1'
4200 enabled vfp && check_insn vfp 'fmadd d0, d0, d1, d2'
4202 map 'enabled_any ${v}_external ${v}_inline || disable $v' $ARCH_EXT_LIST_ARM
4204 elif enabled alpha; then
4208 elif enabled arm; then
4210 enabled msvc && check_cpp_condition stddef.h "defined _M_ARMT" && enable thumb
4211 check_cpp_condition stddef.h "defined __thumb__" && enable_weak thumb
4212 enabled thumb && check_cflags -mthumb || check_cflags -marm
4214 if check_cpp_condition stddef.h "defined __ARM_PCS_VFP"; then
4216 elif check_cpp_condition stddef.h "defined _M_ARM_FP && _M_ARM_FP >= 30"; then
4218 elif ! check_cpp_condition stddef.h "defined __ARM_PCS || defined __SOFTFP__" && [ $target_os != darwin ]; then
4219 case "${cross_prefix:-$cc}" in
4220 *hardfloat*) enable vfp_args; fpabi=vfp ;;
4221 *) check_ld <<EOF && enable vfp_args && fpabi=vfp || fpabi=soft ;;
4222 __asm__ (".eabi_attribute 28, 1");
4223 int main(void) { return 0; }
4226 warn "Compiler does not indicate floating-point ABI, guessing $fpabi."
4229 enabled armv5te && check_insn armv5te 'qadd r0, r0, r0'
4230 enabled armv6 && check_insn armv6 'sadd16 r0, r0, r0'
4231 enabled armv6t2 && check_insn armv6t2 'movt r0, #0'
4232 enabled neon && check_insn neon 'vadd.i16 q0, q0, q0'
4233 enabled vfp && check_insn vfp 'fadds s0, s0, s0'
4234 enabled vfpv3 && check_insn vfpv3 'vmov.f32 s0, #1.0'
4236 [ $target_os = linux ] || [ $target_os = android ] ||
4237 map 'enabled_any ${v}_external ${v}_inline || disable $v' \
4240 check_inline_asm asm_mod_q '"add r0, %Q0, %R0" :: "r"((long long)0)'
4242 check_as <<EOF && enable as_dn_directive
4247 # llvm's integrated assembler supports .object_arch from llvm 3.5
4248 [ "$objformat" = elf ] && check_as <<EOF && enable as_object_arch
4252 [ $target_os != win32 ] && enabled_all armv6t2 shared !pic && enable_weak_pic
4254 elif enabled mips; then
4256 check_inline_asm loongson '"dmult.g $1, $2, $3"'
4258 # make sure that only an instruction set is enabled
4259 disable mips64r6 mips32r6 mips64r2 mips32r2 mips64r1 mips32r1
4261 if enabled mips64; then
4262 check_inline_asm mips64r6 '"dlsa $0, $0, $0, 1"' ||
4263 check_inline_asm mips64r2 '"dext $0, $0, 0, 1"' ||
4264 check_inline_asm mips64r1 '"daddi $0, $0, 0"'
4266 check_inline_asm mips32r6 '"aui $0, $0, 0"' ||
4267 check_inline_asm mips32r2 '"ext $0, $0, 0, 1"' ||
4268 check_inline_asm mips32r1 '"addi $0, $0, 0"'
4271 elif enabled parisc; then
4273 if enabled gcc; then
4274 case $($cc -dumpversion) in
4275 4.[3-8].*) check_cflags -fno-optimize-sibling-calls ;;
4279 elif enabled ppc; then
4281 enable local_aligned_8 local_aligned_16
4283 check_inline_asm dcbzl '"dcbzl 0, %0" :: "r"(0)'
4284 check_inline_asm ibm_asm '"add 0, 0, 0"'
4285 check_inline_asm ppc4xx '"maclhw r10, r11, r12"'
4286 check_inline_asm xform_asm '"lwzx %1, %y0" :: "Z"(*(int*)0), "r"(0)'
4288 # AltiVec flags: The FSF version of GCC differs from the Apple version
4289 if enabled altivec; then
4290 check_cflags -maltivec -mabi=altivec &&
4291 { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
4292 check_cflags -faltivec
4294 # check if our compiler supports Motorola AltiVec C API
4295 check_cc <<EOF || disable altivec
4298 vector signed int v1 = (vector signed int) { 0 };
4299 vector signed int v2 = (vector signed int) { 1 };
4300 v1 = vec_add(v1, v2);
4305 enabled altivec || warn "Altivec disabled, possibly missing --cpu flag"
4308 if enabled vsx; then
4309 check_cflags -mvsx &&
4310 check_builtin vec_vsx_ld "altivec.h" "__builtin_vec_vsx_ld" || disable vsx
4313 if enabled power8; then
4314 check_cpp_condition "altivec.h" "defined(_ARCH_PWR8)" || disable power8
4317 elif enabled x86; then
4319 check_builtin rdtsc intrin.h "__rdtsc()"
4320 check_builtin mm_empty mmintrin.h "_mm_empty()"
4322 enable local_aligned_8 local_aligned_16
4324 # check whether EBP is available on x86
4325 # As 'i' is stored on the stack, this program will crash
4326 # if the base pointer is used to access it because the
4327 # base pointer is cleared in the inline assembly code.
4328 check_exec_crash <<EOF && enable ebp_available
4330 __asm__ volatile ("xorl %%ebp, %%ebp" ::: "%ebp");
4334 # check whether EBX is available on x86
4335 check_inline_asm ebx_available '""::"b"(0)' &&
4336 check_inline_asm ebx_available '"":::"%ebx"'
4338 # check whether xmm clobbers are supported
4339 check_inline_asm xmm_clobbers '"":::"%xmm0"'
4341 # check whether binutils is new enough to compile SSSE3/MMXEXT
4342 enabled ssse3 && check_inline_asm ssse3_inline '"pabsw %xmm0, %xmm0"'
4343 enabled mmxext && check_inline_asm mmxext_inline '"pmaxub %mm0, %mm1"'
4345 if ! disabled_any asm mmx yasm; then
4346 if check_cmd $yasmexe --version; then
4347 enabled x86_64 && yasm_extra="-m amd64"
4348 yasm_debug="-g dwarf2"
4349 elif check_cmd nasm -v; then
4351 yasm_debug="-g -F dwarf"
4352 enabled x86_64 && test "$objformat" = elf && objformat=elf64
4355 YASMFLAGS="-f $objformat $yasm_extra"
4356 enabled pic && append YASMFLAGS "-DPIC"
4357 test -n "$extern_prefix" && append YASMFLAGS "-DPREFIX"
4358 case "$objformat" in
4359 elf*) enabled debug && append YASMFLAGS $yasm_debug ;;
4362 check_yasm "movbe ecx, [5]" && enable yasm ||
4363 die "yasm/nasm not found or too old. Use --disable-yasm for a crippled build."
4364 check_yasm "vextracti128 xmm0, ymm0, 0" || disable avx2_external
4365 check_yasm "vpmacsdd xmm0, xmm1, xmm2, xmm3" || disable xop_external
4366 check_yasm "vfmadd132ps ymm0, ymm1, ymm2" || disable fma3_external
4367 check_yasm "vfmaddps ymm0, ymm1, ymm2, ymm3" || disable fma4_external
4368 check_yasm "CPU amdnop" || disable cpunop
4372 athlon*|opteron*|k8*|pentium|pentium-mmx|prescott|nocona|atom|geode)
4379 check_code cc arm_neon.h "int16x8_t test = vdupq_n_s16(0)" && enable intrinsics_neon
4381 check_ldflags -Wl,--as-needed
4383 if check_func dlopen; then
4385 elif check_func dlopen -ldl; then
4389 if ! disabled network; then
4390 check_func getaddrinfo $network_extralibs
4391 check_func inet_aton $network_extralibs
4393 check_type netdb.h "struct addrinfo"
4394 check_type netinet/in.h "struct group_source_req" -D_BSD_SOURCE
4395 check_type netinet/in.h "struct ip_mreq_source" -D_BSD_SOURCE
4396 check_type netinet/in.h "struct ipv6_mreq" -D_DARWIN_C_SOURCE
4397 check_type poll.h "struct pollfd"
4398 check_type netinet/sctp.h "struct sctp_event_subscribe"
4399 check_struct "sys/types.h sys/socket.h" "struct sockaddr" sa_len
4400 check_type netinet/in.h "struct sockaddr_in6"
4401 check_type "sys/types.h sys/socket.h" "struct sockaddr_storage"
4402 check_type "sys/types.h sys/socket.h" socklen_t
4404 # Prefer arpa/inet.h over winsock2
4405 if check_header arpa/inet.h ; then
4406 check_func closesocket
4407 elif check_header winsock2.h ; then
4408 check_func_headers winsock2.h closesocket -lws2 &&
4409 network_extralibs="-lws2" ||
4410 { check_func_headers winsock2.h closesocket -lws2_32 &&
4411 network_extralibs="-lws2_32"; } || disable winsock2_h network
4412 check_func_headers ws2tcpip.h getaddrinfo $network_extralibs
4414 check_type ws2tcpip.h socklen_t
4415 check_type ws2tcpip.h "struct addrinfo"
4416 check_type ws2tcpip.h "struct group_source_req"
4417 check_type ws2tcpip.h "struct ip_mreq_source"
4418 check_type ws2tcpip.h "struct ipv6_mreq"
4419 check_type winsock2.h "struct pollfd"
4420 check_struct winsock2.h "struct sockaddr" sa_len
4421 check_type ws2tcpip.h "struct sockaddr_in6"
4422 check_type ws2tcpip.h "struct sockaddr_storage"
4428 check_builtin atomic_cas_ptr atomic.h "void **ptr; void *oldval, *newval; atomic_cas_ptr(ptr, oldval, newval)"
4429 check_builtin machine_rw_barrier mbarrier.h "__machine_rw_barrier()"
4430 check_builtin MemoryBarrier windows.h "MemoryBarrier()"
4431 check_builtin sync_val_compare_and_swap "" "int *ptr; int oldval, newval; __sync_val_compare_and_swap(ptr, oldval, newval)"
4433 case "$custom_allocator" in
4435 # jemalloc by default does not use a prefix
4436 require libjemalloc jemalloc/jemalloc.h malloc -ljemalloc
4439 require_pkg_config libtcmalloc gperftools/tcmalloc.h tc_malloc
4444 check_func_headers malloc.h _aligned_malloc && enable aligned_malloc
4445 check_func ${malloc_prefix}memalign && enable memalign
4446 check_func ${malloc_prefix}posix_memalign && enable posix_memalign
4448 check_cpp_condition unistd.h "defined(_POSIX_MONOTONIC_CLOCK)" &&
4449 check_func_headers time.h clock_gettime || { check_func_headers time.h clock_gettime -lrt && add_extralibs -lrt && LIBRT="-lrt"; }
4453 check_func gethrtime
4455 check_func getrusage
4456 check_func gettimeofday
4459 check_func localtime_r
4460 check_func mach_absolute_time
4464 # Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
4465 check_func_headers time.h nanosleep || { check_func_headers time.h nanosleep -lrt && add_extralibs -lrt; }
4466 check_func sched_getaffinity
4467 check_func setrlimit
4468 check_func strerror_r
4473 check_func_headers io.h setmode
4474 check_func_headers stdlib.h getenv
4476 check_func_headers windows.h CoTaskMemFree -lole32
4477 check_func_headers windows.h GetProcessAffinityMask
4478 check_func_headers windows.h GetProcessTimes
4479 check_func_headers windows.h GetSystemTimeAsFileTime
4480 check_func_headers windows.h LoadLibrary
4481 check_func_headers windows.h MapViewOfFile
4482 check_func_headers windows.h SetConsoleTextAttribute
4483 check_func_headers windows.h Sleep
4484 check_func_headers windows.h VirtualAlloc
4485 check_struct windows.h "CONDITION_VARIABLE" Ptr
4487 check_header direct.h
4488 check_header dlfcn.h
4489 check_header d3d11.h
4491 check_header dxva2api.h
4493 check_header mach/mach_time.h
4494 check_header malloc.h
4496 check_header sys/mman.h
4497 check_header sys/param.h
4498 check_header sys/resource.h
4499 check_header sys/select.h
4500 check_header sys/time.h
4501 check_header sys/un.h
4502 check_header unistd.h
4503 check_header valgrind/valgrind.h
4504 check_header vdpau/vdpau.h
4505 check_header vdpau/vdpau_x11.h
4506 check_header VideoDecodeAcceleration/VDADecoder.h
4507 check_header windows.h
4508 check_header X11/extensions/XvMClib.h
4510 check_lib2 "windows.h shellapi.h" CommandLineToArgvW -lshell32
4511 check_lib2 "windows.h wincrypt.h" CryptGenRandom -ladvapi32
4512 check_lib2 "windows.h psapi.h" GetProcessMemoryInfo -lpsapi
4514 check_struct "sys/time.h sys/resource.h" "struct rusage" ru_maxrss
4516 check_type "windows.h dxva.h" "DXVA_PicParams_HEVC" -DWINAPI_FAMILY=WINAPI_FAMILY_DESKTOP_APP -D_CRT_BUILD_DESKTOP_APP=0
4517 check_type "windows.h d3d11.h" "ID3D11VideoDecoder"
4518 check_type "d3d9.h dxva2api.h" DXVA2_ConfigPictureDecode -D_WIN32_WINNT=0x0602
4520 check_type "va/va.h va/va_vpp.h" "VAProcPipelineParameterBuffer"
4521 check_type "va/va.h va/va_enc_h264.h" "VAEncPictureParameterBufferH264"
4522 check_type "va/va.h va/va_enc_hevc.h" "VAEncPictureParameterBufferHEVC"
4523 check_type "va/va.h va/va_enc_jpeg.h" "VAEncPictureParameterBufferJPEG"
4525 check_type "vdpau/vdpau.h" "VdpPictureInfoHEVC"
4527 if ! disabled w32threads && ! enabled pthreads; then
4528 check_func_headers "windows.h process.h" _beginthreadex &&
4529 enable w32threads || disable w32threads
4532 # check for some common methods of building with pthread support
4533 # do this before the optional library checks as some of them require pthreads
4534 if ! disabled pthreads && ! enabled w32threads; then
4536 if check_func pthread_join -pthread; then
4538 add_extralibs -pthread
4539 elif check_func pthread_join -pthreads; then
4540 add_cflags -pthreads
4541 add_extralibs -pthreads
4542 elif check_func pthread_join -lpthreadGC2; then
4543 add_extralibs -lpthreadGC2
4544 elif check_lib pthread.h pthread_join -lpthread; then
4546 elif ! check_func pthread_join; then
4552 check_builtin sem_timedwait semaphore.h "sem_t *s; sem_init(s,0,0); sem_timedwait(s,0); sem_destroy(s)"
4554 disabled zlib || check_lib zlib.h zlibVersion -lz || disable zlib
4555 disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
4557 check_lib math.h sin -lm && LIBM="-lm"
4558 enabled vaapi && require vaapi va/va.h vaInitialize -lva
4564 for func in $MATH_FUNCS; do
4565 eval check_mathfunc $func \${${func}_args:-1}
4568 # these are off by default, so fail if requested and not available
4569 enabled avisynth && { check_lib2 "avisynth/avisynth_c.h windows.h" LoadLibrary ||
4570 check_lib2 "avxsynth/avxsynth_c.h dlfcn.h" dlopen -ldl ||
4571 die "ERROR: LoadLibrary/dlopen not found, or avisynth header not found"; }
4572 enabled cuda && check_lib cuda.h cuInit -lcuda
4573 enabled frei0r && { check_header frei0r.h || die "ERROR: frei0r.h header not found"; }
4574 enabled gnutls && require_pkg_config gnutls gnutls/gnutls.h gnutls_global_init
4575 enabled libbs2b && require_pkg_config libbs2b bs2b.h bs2b_open
4576 enabled libdcadec && require libdcadec libdcadec/dca_context.h dcadec_context_create -ldcadec
4577 enabled libfaac && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
4578 enabled libfdk_aac && require_pkg_config fdk-aac "fdk-aac/aacenc_lib.h" aacEncOpen
4579 enabled libfontconfig && require_pkg_config fontconfig "fontconfig/fontconfig.h" FcInit
4580 enabled libfreetype && require_pkg_config freetype2 "ft2build.h FT_FREETYPE_H" FT_Init_FreeType
4581 enabled libgsm && { for gsm_hdr in "gsm.h" "gsm/gsm.h"; do
4582 check_lib "${gsm_hdr}" gsm_create -lgsm && break;
4583 done || die "ERROR: libgsm not found"; }
4584 enabled libilbc && require libilbc ilbc.h WebRtcIlbcfix_InitDecode -lilbc
4585 enabled libkvazaar && require_pkg_config "kvazaar >= 0.8.1" kvazaar.h kvz_api_get
4586 enabled libmfx && require_pkg_config libmfx "mfx/mfxvideo.h" MFXInit
4587 enabled libmp3lame && require "libmp3lame >= 3.98.3" lame/lame.h lame_set_VBR_quality -lmp3lame
4588 enabled libnpp && require libnpp npp.h nppGetLibVersion -lnppi -lnppc
4589 enabled libopencore_amrnb && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb
4590 enabled libopencore_amrwb && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb
4591 enabled libopencv && require_pkg_config opencv opencv/cv.h cvCreateImageHeader
4592 enabled libopenh264 && require_pkg_config openh264 wels/codec_api.h WelsGetCodecVersion
4593 enabled libopenjpeg && { { check_header openjpeg.h && check_lib2 openjpeg.h opj_version -lopenjpeg -DOPJ_STATIC; } ||
4594 { require_pkg_config libopenjpeg1 openjpeg.h opj_version -DOPJ_STATIC; } }
4595 enabled libopus && require_pkg_config opus opus_multistream.h opus_multistream_decoder_create
4596 enabled libpulse && require_pkg_config libpulse-simple pulse/simple.h pa_simple_new
4597 enabled librtmp && require_pkg_config librtmp librtmp/rtmp.h RTMP_Socket
4598 enabled libschroedinger && require_pkg_config schroedinger-1.0 schroedinger/schro.h schro_init
4599 enabled libsnappy && require snappy snappy-c.h snappy_compress -lsnappy
4600 enabled libspeex && require_pkg_config speex speex/speex.h speex_decoder_init -lspeex
4601 enabled libtheora && require libtheora theora/theoraenc.h th_info_init -ltheoraenc -ltheoradec -logg
4602 enabled libtwolame && require libtwolame twolame.h twolame_init -ltwolame
4603 enabled libvo_aacenc && require libvo_aacenc vo-aacenc/voAAC.h voGetAACEncAPI -lvo-aacenc
4604 enabled libvo_amrwbenc && require libvo_amrwbenc vo-amrwbenc/enc_if.h E_IF_init -lvo-amrwbenc
4605 enabled libvorbis && require libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
4606 enabled libvpx && require_pkg_config "vpx >= 1.3.0" vpx/vpx_codec.h vpx_codec_version && {
4607 enabled libvpx_vp8_decoder && {
4608 check_pkg_config vpx "vpx/vpx_decoder.h vpx/vp8dx.h" vpx_codec_vp8_dx ||
4609 disable libvpx_vp8_decoder;
4611 enabled libvpx_vp8_encoder && {
4612 check_pkg_config vpx "vpx/vpx_encoder.h vpx/vp8cx.h" vpx_codec_vp8_cx ||
4613 disable libvpx_vp8_encoder;
4615 enabled libvpx_vp9_decoder && {
4616 check_pkg_config vpx "vpx/vpx_decoder.h vpx/vp8dx.h" vpx_codec_vp9_dx ||
4617 disable libvpx_vp9_decoder;
4619 enabled libvpx_vp9_encoder && {
4620 check_pkg_config vpx "vpx/vpx_encoder.h vpx/vp8cx.h" vpx_codec_vp9_cx ||
4621 disable libvpx_vp9_encoder;
4623 if disabled_all libvpx_vp8_decoder libvpx_vp9_decoder libvpx_vp8_encoder libvpx_vp9_encoder; then
4624 die "libvpx enabled but no supported decoders found"
4627 enabled libwavpack && require libwavpack wavpack/wavpack.h WavpackOpenFileOutput -lwavpack
4628 enabled libwebp && require_pkg_config libwebp webp/encode.h WebPGetEncoderVersion
4629 enabled libx264 && require_pkg_config x264 "stdint.h x264.h" x264_encoder_encode &&
4630 { check_cpp_condition x264.h "X264_BUILD >= 118" ||
4631 die "ERROR: libx264 version must be >= 0.118."; } &&
4632 { check_cpp_condition x264.h "X264_MPEG2" &&
4634 enabled libx265 && require_pkg_config x265 x265.h x265_api_get &&
4635 { check_cpp_condition x265.h "X265_BUILD >= 57" ||
4636 die "ERROR: libx265 version must be >= 57."; }
4637 enabled libxavs && require libxavs xavs.h xavs_encoder_encode -lxavs
4638 enabled libxvid && require libxvid xvid.h xvid_global -lxvidcore
4639 enabled mmal && { check_lib interface/mmal/mmal.h mmal_port_connect -lmmal_core -lmmal_util -lmmal_vc_client -lbcm_host ||
4640 { ! enabled cross_compile && {
4641 add_cflags -isystem/opt/vc/include/ -isystem/opt/vc/include/interface/vmcs_host/linux -isystem/opt/vc/include/interface/vcos/pthreads -fgnu89-inline ;
4642 add_extralibs -L/opt/vc/lib/ -lmmal_core -lmmal_util -lmmal_vc_client -lbcm_host ;
4643 check_lib interface/mmal/mmal.h mmal_port_connect ; }
4644 check_lib interface/mmal/mmal.h mmal_port_connect ; } ||
4645 die "ERROR: mmal not found"; }
4646 enabled mmal && check_func_headers interface/mmal/mmal.h "MMAL_PARAMETER_VIDEO_MAX_NUM_CALLBACKS"
4647 enabled omx_rpi && enable omx
4648 enabled omx && { check_header OMX_Core.h ||
4649 { ! enabled cross_compile && enabled omx_rpi && {
4650 add_cflags -isystem/opt/vc/include/IL ; }
4651 check_header OMX_Core.h ; } ||
4652 die "ERROR: OpenMAX IL headers not found"; }
4653 enabled openssl && { check_pkg_config openssl openssl/ssl.h SSL_library_init && {
4654 add_cflags $openssl_cflags && add_extralibs $openssl_libs; }||
4655 check_lib openssl/ssl.h SSL_library_init -lssl -lcrypto ||
4656 check_lib openssl/ssl.h SSL_library_init -lssl32 -leay32 ||
4657 check_lib openssl/ssl.h SSL_library_init -lssl -lcrypto -lws2_32 -lgdi32 ||
4658 die "ERROR: openssl not found"; }
4660 if enabled gnutls; then
4661 { check_lib2 gmp.h mpz_export -lgmp && enable gmp; } ||
4662 { check_lib gcrypt.h gcry_mpi_new -lgcrypt && enable gcrypt; }
4666 if enabled libdc1394; then
4667 { require_pkg_config libdc1394-2 dc1394/dc1394.h dc1394_new &&
4668 enable libdc1394_2; } ||
4669 { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
4670 enable libdc1394_1; } ||
4671 die "ERROR: No version of libdc1394 found "
4674 if enabled nvenc; then
4675 check_header nvEncodeAPI.h || die "ERROR: nvEncodeAPI.h not found."
4676 check_cpp_condition nvEncodeAPI.h "NVENCAPI_MAJOR_VERSION >= 6" ||
4677 die "ERROR: NVENC API version 5 or older is not supported"
4680 if check_pkg_config sdl SDL_events.h SDL_PollEvent; then
4681 check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
4682 check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) < 0x010300" $sdl_cflags &&
4686 pod2man --help > /dev/null 2>&1 && enable pod2man || disable pod2man
4687 texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
4689 check_header linux/fb.h
4690 check_header linux/videodev2.h
4691 check_struct linux/videodev2.h "struct v4l2_frmivalenum" discrete
4693 check_header AVFoundation/AVFoundation.h &&
4694 check_objcflags -fobjc-arc &&
4695 add_extralibs -framework Foundation -framework AVFoundation -framework CoreVideo -framework CoreMedia ||
4696 disable AVFoundation_AVFoundation_h
4698 check_header sys/videoio.h
4700 check_func_headers "windows.h vfw.h" capCreateCaptureWindow "$vfwcap_indev_extralibs"
4701 # check that WM_CAP_DRIVER_CONNECT is defined to the proper value
4702 # w32api 3.12 had it defined wrong
4703 check_cpp_condition vfw.h "WM_CAP_DRIVER_CONNECT > WM_USER" && enable vfwcap_defines
4705 # check for ioctl_meteor.h, ioctl_bt848.h and alternatives
4706 { check_header dev/bktr/ioctl_meteor.h &&
4707 check_header dev/bktr/ioctl_bt848.h; } ||
4708 { check_header machine/ioctl_meteor.h &&
4709 check_header machine/ioctl_bt848.h; } ||
4710 { check_header dev/video/meteor/ioctl_meteor.h &&
4711 check_header dev/video/bktr/ioctl_bt848.h; } ||
4712 check_header dev/ic/bt8xx.h
4714 check_header sndio.h
4715 check_header sys/soundcard.h
4716 check_header soundcard.h
4718 enabled_any alsa_indev alsa_outdev &&
4719 check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
4721 enabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack &&
4722 check_func jack_port_get_latency_range -ljack
4724 enabled_any sndio_indev sndio_outdev && check_lib2 sndio.h sio_open -lsndio
4726 if enabled libcdio; then
4727 check_lib2 "cdio/cdda.h cdio/paranoia.h" cdio_cddap_open -lcdio_paranoia -lcdio_cdda -lcdio ||
4728 check_lib2 "cdio/paranoia/cdda.h cdio/paranoia/paranoia.h" cdio_cddap_open -lcdio_paranoia -lcdio_cdda -lcdio ||
4729 die "ERROR: No usable libcdio/cdparanoia found"
4732 check_lib X11/Xlib.h XOpenDisplay -lX11 && enable xlib
4734 if enabled libxcb || enabled x11grab && ! disabled libxcb; then
4735 check_pkg_config xcb-shape xcb/shape.h xcb_shape_rectangles || {
4736 enabled libxcb && die "ERROR: libxcb not found";
4737 } && disable x11grab && enable libxcb
4739 disabled libxcb_shm ||
4740 check_pkg_config xcb-shm xcb/shm.h xcb_shm_attach || {
4741 enabled libxcb_shm && die "ERROR: libxcb_shm not found";
4742 } && check_header sys/shm.h && enable libxcb_shm
4744 disabled libxcb_xfixes ||
4745 check_pkg_config xcb-xfixes xcb/xfixes.h xcb_xfixes_get_cursor_image || {
4746 enabled libxcb_xfixes && die "ERROR: libxcb_xfixes not found";
4747 } && enable libxcb_xfixes
4749 add_cflags "$xcb_event_cflags $xcb_shm_cflags $xcb_xfixes_cflags"
4750 add_extralibs "$xcb_event_libs $xcb_shm_libs $xcb_xfixes_libs"
4753 if enabled x11grab; then
4754 enabled xlib || die "ERROR: Xlib not found"
4755 require Xext X11/extensions/XShm.h XShmCreateImage -lXext
4756 require Xfixes X11/extensions/Xfixes.h XFixesGetCursorImage -lXfixes
4760 check_code cc "va/va.h" "vaCreateSurfaces(0, 0, 0, 0, 0, 0, 0, 0)" ||
4763 if enabled vaapi ; then
4765 check_lib2 "va/va.h va/va_x11.h" vaGetDisplay -lva -lva-x11 &&
4768 check_lib2 "va/va.h va/va_drm.h" vaGetDisplayDRM -lva -lva-drm &&
4773 check_cpp_condition vdpau/vdpau.h "defined VDP_DECODER_PROFILE_MPEG4_PART2_ASP" ||
4776 enabled vdpau && enabled xlib &&
4777 check_lib2 "vdpau/vdpau.h vdpau/vdpau_x11.h" vdp_device_create_x11 -lvdpau &&
4780 enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel"
4782 # add some useful compiler flags if supported
4783 check_cflags -Wdeclaration-after-statement
4785 check_cflags -Wdisabled-optimization
4786 check_cflags -Wpointer-arith
4787 check_cflags -Wredundant-decls
4788 check_cflags -Wwrite-strings
4789 check_cflags -Wtype-limits
4790 check_cflags -Wundef
4791 check_cflags -Wmissing-prototypes
4792 check_cflags -Wstrict-prototypes
4793 enabled extra_warnings && check_cflags -Winline
4794 enabled extra_warnings && check_cflags -Wcast-qual
4796 check_disable_warning(){
4797 warning_flag=-W${1#-Wno-}
4798 test_cflags $warning_flag && add_cflags $1
4801 check_disable_warning -Wno-parentheses
4802 check_disable_warning -Wno-switch
4803 check_disable_warning -Wno-format-zero-length
4804 check_disable_warning -Wno-pointer-sign
4806 # add some linker flags
4807 check_ldflags -Wl,--warn-common
4808 check_ldflags -Wl,-rpath-link=libswscale:libavfilter:libavdevice:libavformat:libavcodec:libavutil:libavresample
4809 enabled rpath && add_ldexeflags -Wl,-rpath,$libdir
4810 test_ldflags -Wl,-Bsymbolic && append SHFLAGS -Wl,-Bsymbolic
4812 # add some strip flags
4813 # -wN '..@*' is more selective than -x, but not available everywhere.
4814 check_stripflags -wN \'..@*\' || check_stripflags -x || strip='true'
4816 enabled neon_clobber_test &&
4817 check_ldflags -Wl,--wrap,avcodec_open2 \
4818 -Wl,--wrap,avcodec_decode_audio4 \
4819 -Wl,--wrap,avcodec_decode_video2 \
4820 -Wl,--wrap,avcodec_decode_subtitle2 \
4821 -Wl,--wrap,avcodec_encode_audio2 \
4822 -Wl,--wrap,avcodec_encode_video2 \
4823 -Wl,--wrap,avcodec_encode_subtitle \
4824 -Wl,--wrap,avresample_convert ||
4825 disable neon_clobber_test
4827 enabled xmm_clobber_test &&
4828 check_ldflags -Wl,--wrap,avcodec_open2 \
4829 -Wl,--wrap,avcodec_decode_audio4 \
4830 -Wl,--wrap,avcodec_decode_video2 \
4831 -Wl,--wrap,avcodec_decode_subtitle2 \
4832 -Wl,--wrap,avcodec_encode_audio2 \
4833 -Wl,--wrap,avcodec_encode_video2 \
4834 -Wl,--wrap,avcodec_encode_subtitle \
4835 -Wl,--wrap,avresample_convert \
4836 -Wl,--wrap,sws_scale ||
4837 disable xmm_clobber_test
4839 check_ld <<EOF && enable proper_dce
4840 extern const int array[512];
4841 static inline int func(void) { return array[0]; }
4842 int main(void) { return 0; }
4845 if enabled proper_dce; then
4846 echo "X { local: *; };" > $TMPV
4847 if test_ldflags -Wl,${version_script},$TMPV; then
4848 append SHFLAGS '-Wl,${version_script},\$(SUBDIR)lib\$(NAME).ver'
4849 check_cc <<EOF && enable symver_asm_label
4850 void ff_foo(void) __asm__ ("av_foo@VERSION");
4851 void ff_foo(void) { ${inline_asm+__asm__($quotes);} }
4853 check_cc <<EOF && enable symver_gnu_asm
4854 __asm__(".symver ff_foo,av_foo@VERSION");
4855 void ff_foo(void) {}
4860 if [ -z "$optflags" ]; then
4861 if enabled small; then
4862 optflags=$cflags_size
4863 elif enabled optimizations; then
4864 optflags=$cflags_speed
4866 optflags=$cflags_noopt
4872 enabled lto && check_ldflags "$@"
4876 if enabled lto; then
4877 test "$cc_type" != "$ld_type" && die "LTO requires same compiler and linker"
4879 check_ldflags -flto $cpuflags
4882 check_optflags $optflags
4883 check_optflags -fno-math-errno
4884 check_optflags -fno-signed-zeros
4886 if enabled icc; then
4887 # Just warnings, no remarks
4889 # -wd: Disable following warnings
4890 # 144, 167, 556: -Wno-pointer-sign
4891 # 1292: attribute "foo" ignored
4892 # 1419: external declaration in primary source file
4893 # 10006: ignoring unknown option -fno-signed-zeros
4894 # 10148: ignoring unknown option -Wno-parentheses
4895 # 10156: ignoring option '-W'; no argument required
4896 check_cflags -wd144,167,556,1292,1419,10006,10148,10156
4897 # 11030: Warning unknown option --as-needed
4898 # 10156: ignoring option '-export'; no argument required
4899 check_ldflags -wd10156,11030
4900 # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
4901 enable ebp_available
4902 if enabled x86_32; then
4903 icc_version=$($cc -dumpversion)
4904 test ${icc_version%%.*} -ge 11 &&
4905 check_cflags -falign-stack=maintain-16-byte ||
4906 disable aligned_stack
4908 elif enabled ccc; then
4909 # disable some annoying warnings
4910 add_cflags -msg_disable bitnotint
4911 add_cflags -msg_disable mixfuncvoid
4912 add_cflags -msg_disable nonstandcast
4913 add_cflags -msg_disable unsupieee
4914 elif enabled gcc; then
4915 check_optflags -fno-tree-vectorize
4916 check_cflags -Werror=implicit-function-declaration
4917 check_cflags -Werror=missing-prototypes
4918 check_cflags -Werror=return-type
4919 check_cflags -Werror=declaration-after-statement
4920 check_cflags -Werror=vla
4921 check_cflags -Werror=format-security
4922 check_cflags -fdiagnostics-color=auto
4923 enabled extra_warnings || check_disable_warning -Wno-maybe-uninitialized
4924 elif enabled llvm_gcc; then
4925 check_cflags -mllvm -stack-alignment=16
4926 elif enabled clang; then
4927 check_cflags -mllvm -stack-alignment=16
4928 check_cflags -Qunused-arguments
4929 check_cflags -Werror=implicit-function-declaration
4930 check_cflags -Werror=missing-prototypes
4931 check_cflags -Werror=return-type
4932 elif enabled cparser; then
4933 add_cflags -Wno-missing-variable-declarations
4934 add_cflags -Wno-empty-statement
4935 elif enabled armcc; then
4936 add_cflags -W${armcc_opt},--diag_suppress=4343 # hardfp compat
4937 add_cflags -W${armcc_opt},--diag_suppress=3036 # using . as system include dir
4938 # 2523: use of inline assembly is deprecated
4939 add_cflags -W${armcc_opt},--diag_suppress=2523
4940 add_cflags -W${armcc_opt},--diag_suppress=1207
4941 add_cflags -W${armcc_opt},--diag_suppress=1293 # assignment in condition
4942 add_cflags -W${armcc_opt},--diag_suppress=3343 # hardfp compat
4943 add_cflags -W${armcc_opt},--diag_suppress=167 # pointer sign
4944 add_cflags -W${armcc_opt},--diag_suppress=513 # pointer sign
4945 elif enabled tms470; then
4946 add_cflags -pds=824 -pds=837
4948 elif enabled pathscale; then
4949 add_cflags -fstrict-overflow -OPT:wrap_around_unsafe_opt=OFF
4950 elif enabled_any msvc icl; then
4951 enabled x86_32 && disable aligned_stack
4952 enabled_all x86_32 debug && add_cflags -Oy-
4953 enabled debug && add_ldflags -debug
4954 enable pragma_deprecated
4955 if enabled icl; then
4956 # -Qansi-alias is basically -fstrict-aliasing, but does not work
4957 # (correctly) on icl 13.x.
4958 check_cpp_condition "windows.h" "__ICL < 1300 || __ICL >= 1400" &&
4959 add_cflags -Qansi-alias
4960 # icl will pass the inline asm tests but inline asm is currently
4961 # not supported (build will fail)
4964 # msvcrt10 x64 incorrectly enables log2, only msvcrt12 (MSVC 2013) onwards actually has log2.
4965 check_cpp_condition crtversion.h "_VC_CRT_MAJOR_VERSION >= 12" || disable log2
4966 # The CRT headers contain __declspec(restrict) in a few places, but if redefining
4967 # restrict, this might break. MSVC 2010 and 2012 fail with __declspec(__restrict)
4968 # (as it ends up if the restrict redefine is done before including stdlib.h), while
4969 # MSVC 2013 and newer can handle it fine.
4970 # If this declspec fails, force including stdlib.h before the restrict redefinition
4971 # happens in config.h.
4972 if [ $_restrict != restrict ]; then
4973 check_cc <<EOF || add_cflags -FIstdlib.h
4974 __declspec($_restrict) void* foo(int);
4977 check_func strtoll || add_cflags -Dstrtoll=_strtoi64
4980 for pfx in "" host_; do
4981 varname=${pfx%_}cc_type
4982 eval "type=\$$varname"
4983 if [ $type = "msvc" ]; then
4984 check_${pfx}cc <<EOF || add_${pfx}cflags -Dinline=__inline
4985 static inline int foo(int a) { return a; }
4992 add_asflags -Qunused-arguments
4998 check_ldflags -Qunused-arguments
5004 enabled ccc && add_ldflags '-Wl,-expect_unresolved,*'
5007 add_cppflags -Dmain=plan9_main
5011 enabled asm || { arch=c; disable $ARCH_LIST $ARCH_EXT_LIST; }
5013 check_deps $CONFIG_LIST \
5018 enabled_all dxva2 CoTaskMemFree &&
5019 prepend avconv_libs $($ldflags_filter "-lole32") &&
5022 ! enabled_any memalign posix_memalign aligned_malloc &&
5023 enabled simd_align_16 && enable memalign_hack
5025 map 'enabled $v && intrinsics=${v#intrinsics_}' $INTRINSICS_LIST
5027 for thread in $THREADS_LIST; do
5028 if enabled $thread; then
5029 test -n "$thread_type" &&
5030 die "ERROR: Only one thread type must be selected." ||
5031 thread_type="$thread"
5035 enabled zlib && add_cppflags -DZLIB_CONST
5037 # conditional library dependencies, in linking order
5038 enabled movie_filter && prepend avfilter_deps "avformat avcodec"
5039 enabled resample_filter && prepend avfilter_deps "avresample"
5040 enabled scale_filter && prepend avfilter_deps "swscale"
5042 enabled opus_decoder && prepend avcodec_deps "avresample"
5046 eval "deps=\$$lib_deps"
5047 append $lib_deps $(map 'eval echo \$${v}_deps' $deps)
5051 map 'expand_deps $v' $LIBRARY_LIST
5053 echo "install prefix $prefix"
5054 echo "source path $source_path"
5055 echo "C compiler $cc"
5056 echo "C library $libc_type"
5057 if test "$host_cc" != "$cc"; then
5058 echo "host C compiler $host_cc"
5059 echo "host C library $host_libc_type"
5061 echo "ARCH $arch ($cpu)"
5062 if test "$build_suffix" != ""; then
5063 echo "build suffix $build_suffix"
5065 if test "$extra_version" != ""; then
5066 echo "version string suffix $extra_version"
5068 echo "big-endian ${bigendian-no}"
5069 echo "runtime cpu detection ${runtime_cpudetect-no}"
5070 if enabled x86; then
5071 echo "${yasmexe} ${yasm-no}"
5072 echo "MMX enabled ${mmx-no}"
5073 echo "MMXEXT enabled ${mmxext-no}"
5074 echo "3DNow! enabled ${amd3dnow-no}"
5075 echo "3DNow! extended enabled ${amd3dnowext-no}"
5076 echo "SSE enabled ${sse-no}"
5077 echo "SSSE3 enabled ${ssse3-no}"
5078 echo "AVX enabled ${avx-no}"
5079 echo "XOP enabled ${xop-no}"
5080 echo "FMA3 enabled ${fma3-no}"
5081 echo "FMA4 enabled ${fma4-no}"
5082 echo "i686 features enabled ${i686-no}"
5083 echo "CMOV is fast ${fast_cmov-no}"
5084 echo "EBX available ${ebx_available-no}"
5085 echo "EBP available ${ebp_available-no}"
5087 if enabled aarch64; then
5088 echo "NEON enabled ${neon-no}"
5089 echo "VFP enabled ${vfp-no}"
5091 if enabled arm; then
5092 echo "ARMv5TE enabled ${armv5te-no}"
5093 echo "ARMv6 enabled ${armv6-no}"
5094 echo "ARMv6T2 enabled ${armv6t2-no}"
5095 echo "VFP enabled ${vfp-no}"
5096 echo "NEON enabled ${neon-no}"
5098 if enabled ppc; then
5099 echo "AltiVec enabled ${altivec-no}"
5100 echo "VSX enabled ${vsx-no}"
5101 echo "POWER8 enabled ${power8-no}"
5102 echo "PPC 4xx optimizations ${ppc4xx-no}"
5103 echo "dcbzl available ${dcbzl-no}"
5105 echo "debug symbols ${debug-no}"
5106 echo "optimize for size ${small-no}"
5107 echo "optimizations ${optimizations-no}"
5108 echo "static ${static-no}"
5109 echo "shared ${shared-no}"
5110 echo "new filter support ${avfilter-no}"
5111 echo "network support ${network-no}"
5112 echo "threading support ${thread_type-no}"
5113 echo "safe bitstream reader ${safe_bitstream_reader-no}"
5114 echo "SDL support ${sdl-no}"
5115 test -n "$random_seed" &&
5116 echo "random seed ${random_seed}"
5119 echo "External libraries:"
5120 print_enabled '' $EXTERNAL_LIBRARY_LIST | print_3_columns
5122 echo "External libraries providing hardware acceleration:"
5123 print_enabled '' $HWACCEL_LIBRARY_LIST | print_3_columns
5127 print_enabled '' $LIBRARY_LIST | print_3_columns
5130 for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
5131 echo "Enabled ${type}s:"
5132 eval list=\$$(toupper $type)_LIST
5133 print_enabled '_*' $list | print_3_columns
5137 license="LGPL version 2.1 or later"
5138 if enabled nonfree; then
5139 license="nonfree and unredistributable"
5140 elif enabled gplv3; then
5141 license="GPL version 3 or later"
5142 elif enabled lgplv3; then
5143 license="LGPL version 3 or later"
5144 elif enabled gpl; then
5145 license="GPL version 2 or later"
5148 echo "License: $license"
5150 echo "Creating config.mak and config.h..."
5152 test -e Makefile || echo "include $source_path/Makefile" > Makefile
5154 config_files="$TMPH config.mak"
5156 cat > config.mak <<EOF
5157 # Automatically generated by configure - do not modify!
5158 LIBAV_CONFIGURATION=$LIBAV_CONFIGURATION
5160 LIBDIR=\$(DESTDIR)$libdir
5161 SHLIBDIR=\$(DESTDIR)$shlibdir
5162 INCDIR=\$(DESTDIR)$incdir
5163 BINDIR=\$(DESTDIR)$bindir
5164 DATADIR=\$(DESTDIR)$datadir
5165 DOCDIR=\$(DESTDIR)$docdir
5166 MANDIR=\$(DESTDIR)$mandir
5167 SRC_PATH=$source_path
5170 INTRINSICS=$intrinsics
5177 DEPCCFLAGS=$DEPCCFLAGS \$(CPPFLAGS)
5179 DEPASFLAGS=$DEPASFLAGS \$(CPPFLAGS)
5190 OBJCFLAGS=$OBJCFLAGS
5205 LDEXEFLAGS=$LDEXEFLAGS
5206 SHFLAGS=$(echo $($ldflags_filter $SHFLAGS))
5207 STRIPFLAGS=$STRIPFLAGS
5208 YASMFLAGS=$YASMFLAGS
5209 BUILDSUF=$build_suffix
5217 EXTRA_VERSION=$extra_version
5219 CCDEP_FLAGS=$CCDEP_FLAGS
5221 ASDEP_FLAGS=$ASDEP_FLAGS
5222 CC_DEPFLAGS=$CC_DEPFLAGS
5223 AS_DEPFLAGS=$AS_DEPFLAGS
5226 HOSTCFLAGS=$host_cflags
5227 HOSTCPPFLAGS=$host_cppflags
5228 HOSTEXESUF=$HOSTEXESUF
5229 HOSTLDFLAGS=$host_ldflags
5232 DEPHOSTCCFLAGS=$DEPHOSTCCFLAGS \$(HOSTCCFLAGS)
5233 HOSTCCDEP=$HOSTCCDEP
5234 HOSTCCDEP_FLAGS=$HOSTCCDEP_FLAGS
5235 HOSTCC_DEPFLAGS=$HOSTCC_DEPFLAGS
5239 TARGET_EXEC=$target_exec $target_exec_args
5240 TARGET_PATH=$target_path
5241 TARGET_SAMPLES=${target_samples:-\$(SAMPLES)}
5242 CFLAGS-avplay=$sdl_cflags
5243 ZLIB=$($ldflags_filter -lz)
5244 LIB_INSTALL_EXTRA_CMD=$LIB_INSTALL_EXTRA_CMD
5245 EXTRALIBS=$extralibs
5246 COMPAT_OBJS=$compat_objs
5249 LIBTARGET=${LIBTARGET}
5250 SLIBNAME=${SLIBNAME}
5251 SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}
5252 SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}
5253 SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}
5254 SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}
5255 SLIB_INSTALL_NAME=${SLIB_INSTALL_NAME}
5256 SLIB_INSTALL_LINKS=${SLIB_INSTALL_LINKS}
5257 SLIB_INSTALL_EXTRA_LIB=${SLIB_INSTALL_EXTRA_LIB}
5258 SLIB_INSTALL_EXTRA_SHLIB=${SLIB_INSTALL_EXTRA_SHLIB}
5259 VERSION_SCRIPT_POSTPROCESS_CMD=${VERSION_SCRIPT_POSTPROCESS_CMD}
5260 SAMPLES:=${samples:-\$(LIBAV_SAMPLES)}
5265 name=$(toupper $lcname)
5266 file=$source_path/$lcname/version.h
5267 eval $(awk "/#define ${name}_VERSION_M/ { print \$2 \"=\" \$3 }" "$file")
5268 eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
5269 eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
5270 eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
5271 eval echo "${lcname}_VERSION_MINOR=\$${name}_VERSION_MINOR" >> config.mak
5274 map 'get_version $v' $LIBRARY_LIST
5276 map 'eval echo "${v}_FFLIBS=\$${v}_deps" >> config.mak' $LIBRARY_LIST
5278 print_program_libs(){
5279 eval "program_libs=\$${1}_libs"
5280 eval echo "LIBS-${1}=${program_libs}" >> config.mak
5283 map 'print_program_libs $v' $PROGRAM_LIST
5286 /* Automatically generated by configure - do not modify! */
5287 #ifndef LIBAV_CONFIG_H
5288 #define LIBAV_CONFIG_H
5289 #define LIBAV_CONFIGURATION "$(c_escape $LIBAV_CONFIGURATION)"
5290 #define LIBAV_LICENSE "$(c_escape $license)"
5291 #define AVCONV_DATADIR "$(eval c_escape $datadir)"
5292 #define CC_IDENT "$(c_escape ${cc_ident:-Unknown compiler})"
5293 #define restrict $_restrict
5294 #define EXTERN_PREFIX "${extern_prefix}"
5295 #define EXTERN_ASM ${extern_prefix}
5296 #define SLIBSUF "$SLIBSUF"
5299 test -n "$malloc_prefix" &&
5300 echo "#define MALLOC_PREFIX $malloc_prefix" >>$TMPH
5302 if enabled yasm; then
5303 append config_files $TMPASM
5307 enabled getenv || echo "#define getenv(x) NULL" >> $TMPH
5309 print_config ARCH_ "$config_files" $ARCH_LIST
5310 print_config HAVE_ "$config_files" $HAVE_LIST
5311 print_config CONFIG_ "$config_files" $CONFIG_LIST \
5315 echo "#endif /* LIBAV_CONFIG_H */" >> $TMPH
5317 # Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
5318 cp_if_changed $TMPH config.h
5321 enabled yasm && cp_if_changed $TMPASM config.asm
5324 /* Generated by ffconf */
5325 #ifndef AVUTIL_AVCONFIG_H
5326 #define AVUTIL_AVCONFIG_H
5329 print_config AV_HAVE_ $TMPH $HAVE_LIST_PUB
5331 echo "#endif /* AVUTIL_AVCONFIG_H */" >> $TMPH
5333 cp_if_changed $TMPH libavutil/avconfig.h
5335 test -n "$WARNINGS" && printf "\n$WARNINGS"
5337 # generate the lists of enabled components
5338 print_enabled_components(){
5343 echo "static const $struct_name *$name[] = {" > $TMPH
5345 enabled $c && printf " &ff_%s,\n" $c >> $TMPH
5347 echo " NULL };" >> $TMPH
5348 cp_if_changed $TMPH $file
5351 print_enabled_components libavcodec/bsf_list.c AVBitStreamFilter bitstream_filters $BSF_LIST
5352 print_enabled_components libavformat/protocol_list.c URLProtocol url_protocols $PROTOCOL_LIST
5354 # build pkg-config files
5357 eval printf "\"lib${1} >= \$LIB$(toupper ${1})_VERSION, \""
5360 pkgconfig_generate(){
5362 shortname=${name#lib}${build_suffix}
5366 requires=$(map 'lib_version $v' $(eval echo \$${name#lib}_deps))
5367 requires=${requires%, }
5368 enabled ${name#lib} || return 0
5370 cat <<EOF > $name/$name.pc
5372 exec_prefix=\${prefix}
5377 Description: $comment
5379 Requires: $(enabled shared || echo $requires)
5380 Requires.private: $(enabled shared && echo $requires)
5382 Libs: -L\${libdir} -l${shortname} $(enabled shared || echo $libs)
5383 Libs.private: $(enabled shared && echo $libs)
5384 Cflags: -I\${includedir}
5386 cat <<EOF > $name/$name-uninstalled.pc
5389 libdir=\${pcfiledir}
5390 includedir=${source_path}
5393 Description: $comment
5397 Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
5398 Cflags: -I\${includedir}
5402 pkgconfig_generate libavutil "Libav utility library" "$LIBAVUTIL_VERSION" "$LIBRT $LIBM"
5403 pkgconfig_generate libavcodec "Libav codec library" "$LIBAVCODEC_VERSION" "$extralibs"
5404 pkgconfig_generate libavformat "Libav container format library" "$LIBAVFORMAT_VERSION" "$extralibs"
5405 pkgconfig_generate libavdevice "Libav device handling library" "$LIBAVDEVICE_VERSION" "$extralibs"
5406 pkgconfig_generate libavfilter "Libav video filtering library" "$LIBAVFILTER_VERSION" "$extralibs"
5407 pkgconfig_generate libavresample "Libav audio resampling library" "$LIBAVRESAMPLE_VERSION" "$LIBM"
5408 pkgconfig_generate libswscale "Libav image rescaling library" "$LIBSWSCALE_VERSION" "$LIBM"