3 # Libav configure script
5 # Copyright (c) 2000-2002 Fabrice Bellard
6 # Copyright (c) 2005-2008 Diego Biurrun
7 # Copyright (c) 2005-2008 Mans Rullgard
10 # Prevent locale nonsense from breaking basic text processing.
14 # make sure we are running under a compatible shell
15 # try to make this part work with most shells
18 echo "Trying shell $1"
19 type "$1" > /dev/null 2>&1 && exec "$@"
23 (: ${foo%%bar}) 2> /dev/null
26 (: ${foo?}) 2> /dev/null
29 if test "$E1" != 0 || test "$E2" = 0; then
30 echo "Broken shell detected. Trying alternatives."
32 if test "0$FF_CONF_EXEC" -lt 1; then
34 try_exec bash "$0" "$@"
36 if test "0$FF_CONF_EXEC" -lt 2; then
38 try_exec ksh "$0" "$@"
40 if test "0$FF_CONF_EXEC" -lt 3; then
42 try_exec /usr/xpg4/bin/sh "$0" "$@"
44 echo "No compatible shell script interpreter found."
45 echo "This configure script requires a POSIX-compatible shell"
46 echo "such as bash or ksh."
47 echo "THIS IS NOT A BUG IN LIBAV, DO NOT REPORT IT AS SUCH."
48 echo "Instead, install a working POSIX-compatible shell."
49 echo "Disabling this configure test will create a broken Libav."
50 if test "$BASH_VERSION" = '2.04.0(1)-release'; then
51 echo "This bash version ($BASH_VERSION) is broken on your platform."
52 echo "Upgrade to a later version if available."
57 test -d /usr/xpg4/bin && PATH=/usr/xpg4/bin:$PATH
61 Usage: configure [options]
62 Options: [defaults in brackets after descriptions]
65 --help print this message
66 --quiet Suppress showing informative output
67 --list-decoders show all available decoders
68 --list-encoders show all available encoders
69 --list-hwaccels show all available hardware accelerators
70 --list-demuxers show all available demuxers
71 --list-muxers show all available muxers
72 --list-parsers show all available parsers
73 --list-protocols show all available protocols
74 --list-bsfs show all available bitstream filters
75 --list-indevs show all available input devices
76 --list-outdevs show all available output devices
77 --list-filters show all available filters
80 --logfile=FILE log tests and output to FILE [config.log]
81 --disable-logging do not log configure debug information
82 --prefix=PREFIX install in PREFIX [$prefix_default]
83 --bindir=DIR install binaries in DIR [PREFIX/bin]
84 --datadir=DIR install data files in DIR [PREFIX/share/avconv]
85 --docdir=DIR install documentation in DIR [PREFIX/share/doc/libav]
86 --libdir=DIR install libs in DIR [PREFIX/lib]
87 --shlibdir=DIR install shared libs in DIR [PREFIX/lib]
88 --incdir=DIR install includes in DIR [PREFIX/include]
89 --mandir=DIR install man page in DIR [PREFIX/share/man]
90 --enable-rpath use rpath when linking programs (USE WITH CARE)
93 --enable-gpl allow use of GPL code, the resulting libs
94 and binaries will be under GPL [no]
95 --enable-version3 upgrade (L)GPL to version 3 [no]
96 --enable-nonfree allow use of nonfree code, the resulting libs
97 and binaries will be unredistributable [no]
99 Configuration options:
100 --disable-static do not build static libraries [no]
101 --enable-shared build shared libraries [no]
102 --enable-small optimize for size instead of speed
103 --enable-runtime-cpudetect detect CPU capabilities at runtime (bigger binary)
104 --enable-gray enable full grayscale support (slower color)
105 --disable-swscale-alpha disable alpha channel support in swscale
106 --disable-all disable building components, libraries and programs
109 --disable-programs do not build command line programs
110 --disable-avconv disable avconv build
111 --disable-avplay disable avplay build
112 --disable-avprobe disable avprobe build
113 --disable-avserver deprecated, does nothing
116 --disable-doc do not build documentation
117 --disable-pod2man do not build manual pages
118 --disable-texi2html do not build HTML documentation
119 --disable-avdevice disable libavdevice build
120 --disable-avcodec disable libavcodec build
121 --disable-avformat disable libavformat build
122 --disable-avutil disable libavutil build
123 --disable-swscale disable libswscale build
124 --disable-avfilter disable video filter support [no]
125 --disable-avresample disable libavresample build [no]
126 --disable-pthreads disable pthreads [auto]
127 --disable-w32threads disable Win32 threads [auto]
128 --disable-network disable network support [no]
129 --disable-dct disable DCT code
130 --disable-error-resilience disable error resilience code
131 --disable-lsp disable LSP code
132 --disable-lzo disable LZO decoder code
133 --disable-mdct disable MDCT code
134 --disable-rdft disable RDFT code
135 --disable-fft disable FFT code
136 --disable-faan disable floating point AAN (I)DCT code
138 Individual component options:
139 --disable-everything disable all components listed below
140 --disable-encoder=NAME disable encoder NAME
141 --enable-encoder=NAME enable encoder NAME
142 --disable-encoders disable all encoders
143 --disable-decoder=NAME disable decoder NAME
144 --enable-decoder=NAME enable decoder NAME
145 --disable-decoders disable all decoders
146 --disable-hwaccel=NAME disable hwaccel NAME
147 --enable-hwaccel=NAME enable hwaccel NAME
148 --disable-hwaccels disable all hwaccels
149 --disable-muxer=NAME disable muxer NAME
150 --enable-muxer=NAME enable muxer NAME
151 --disable-muxers disable all muxers
152 --disable-demuxer=NAME disable demuxer NAME
153 --enable-demuxer=NAME enable demuxer NAME
154 --disable-demuxers disable all demuxers
155 --enable-parser=NAME enable parser NAME
156 --disable-parser=NAME disable parser NAME
157 --disable-parsers disable all parsers
158 --enable-bsf=NAME enable bitstream filter NAME
159 --disable-bsf=NAME disable bitstream filter NAME
160 --disable-bsfs disable all bitstream filters
161 --enable-protocol=NAME enable protocol NAME
162 --disable-protocol=NAME disable protocol NAME
163 --disable-protocols disable all protocols
164 --enable-indev=NAME enable input device NAME
165 --disable-indev=NAME disable input device NAME
166 --disable-indevs disable input devices
167 --enable-outdev=NAME enable output device NAME
168 --disable-outdev=NAME disable output device NAME
169 --disable-outdevs disable output devices
170 --disable-devices disable all devices
171 --enable-filter=NAME enable filter NAME
172 --disable-filter=NAME disable filter NAME
173 --disable-filters disable all filters
175 External library support:
177 Using any of the following switches will allow Libav to link to the
178 corresponding external library. All the components depending on that library
179 will become enabled, if all their other dependencies are met and they are not
180 explicitly disabled. E.g. --enable-libwavpack will enable linking to
181 libwavpack and allow the libwavpack encoder to be built, unless it is
182 specifically disabled with --disable-encoder=libwavpack.
184 Note that only the system libraries are auto-detected. All the other external
185 libraries must be explicitly enabled.
187 Also note that the following help text describes the purpose of the libraries
188 themselves, not all their features will necessarily be usable by Libav.
190 --enable-avisynth video frameserver
191 --enable-bzlib bzip2 compression [autodetect]
192 --enable-frei0r video filtering plugins
193 --enable-gnutls crypto
194 --enable-libbs2b Bauer stereophonic-to-binaural DSP
195 --enable-libcdio audio CD input
196 --enable-libdc1394 IEEE 1394/Firewire camera input
197 --enable-libdcadec DCA audio decoding
198 --enable-libfaac AAC audio encoding
199 --enable-libfdk-aac AAC audio encoding/decoding
200 --enable-libfontconfig font configuration and management
201 --enable-libfreetype font rendering
202 --enable-libgsm GSM audio encoding/decoding
203 --enable-libhdcd HDCD decoding filter
204 --enable-libilbc ILBC audio encoding/decoding
205 --enable-libkvazaar HEVC video encoding
206 --enable-libmp3lame MP3 audio encoding
207 --enable-libopencore-amrnb AMR-NB audio encoding/decoding
208 --enable-libopencore-amrwb AMR-WB audio decoding
209 --enable-libopencv computer vision
210 --enable-libopenh264 H.264 video encoding/decoding
211 --enable-libopenjpeg JPEG 2000 image encoding/decoding
212 --enable-libopus Opus audio encoding/decoding
213 --enable-libpulse Pulseaudio sound server
214 --enable-librtmp RTMP streaming
215 --enable-libschroedinger Dirac video encoding/decoding
216 --enable-libsnappy snappy compression
217 --enable-libspeex Speex audio encoding/decoding
218 --enable-libtheora Theora video encoding/decoding
219 --enable-libtwolame MP2 audio encoding
220 --enable-libvo-aacenc AAC audio encoding
221 --enable-libvo-amrwbenc AMR-WB audio encoding
222 --enable-libvorbis Vorbis audio encoding/decoding
223 --enable-libvpx VP* video encoding/decoding
224 --enable-libwavpack Wavpack audio encoding/decoding
225 --enable-libwebp WebP image encoding/decoding
226 --enable-libx264 H.264 video encoding
227 --enable-libx265 HEVC video encoding
228 --enable-libxavs Chinese AVS video encoding
229 --enable-libxcb X window system protocol communication
230 --enable-libxcb-shm X11 shm communication [auto]
231 --enable-libxcb-xfixes X11 mouse rendering [auto]
232 --enable-libxvid MPEG-4 ASP video encoding
233 --enable-openssl crypto
234 --enable-zlib compression [autodetect]
236 The following libraries provide various hardware acceleration features:
237 --enable-cuda Nvidia CUDA (dynamically linked)
238 --enable-d3d11va Microsoft Direct3D 11 video acceleration [auto]
239 --enable-dxva2 Microsoft DirectX 9 video acceleration [auto]
240 --enable-libmfx Intel MediaSDK (AKA Quick Sync Video)
241 --enable-libnpp Nvidia CUDA processing
242 --enable-mmal Broadcom Multi-Media Abstraction Layer (Raspberry Pi)
243 --enable-nvenc Nvidia video encoding
244 --enable-omx OpenMAX IL
245 --enable-omx-rpi OpenMAX IL for Raspberry Pi
246 --enable-vaapi Video Acceleration API (mainly Unix/Intel)
247 --enable-vda Apple Video Decode Acceleration [auto]
248 --enable-vdpau Nvidia Video Decode and Presentation API for Unix [auto]
251 --arch=ARCH select architecture [$arch]
252 --cpu=CPU select the minimum required CPU (affects
253 instruction selection, may crash on older CPUs)
254 --cross-prefix=PREFIX use PREFIX for compilation tools [$cross_prefix]
255 --enable-cross-compile assume a cross-compiler is used
256 --sysroot=PATH root of cross-build tree
257 --sysinclude=PATH location of cross-build system headers
258 --target-os=OS compiler targets OS [$target_os]
259 --target-exec=CMD command to run executables on target
260 --target-path=DIR path to view of build directory on target
261 --target-samples=DIR path to samples directory on target
262 --toolchain=NAME set tool defaults according to NAME
264 --ar=AR use archive tool AR [$ar_default]
265 --as=AS use assembler AS [$as_default]
266 --cc=CC use C compiler CC [$cc_default]
267 --objcc=OCC use ObjC compiler OCC [$cc_default]
268 --dep-cc=DEPCC use dependency generator DEPCC [$cc_default]
269 --ld=LD use linker LD
270 --pkg-config=PKGCONFIG use pkg-config tool PKGCONFIG [$pkg_config_default]
271 --pkg-config-flags=FLAGS pass additional flags to pkgconf []
272 --host-cc=HOSTCC use host C compiler HOSTCC
273 --host-cflags=HCFLAGS use HCFLAGS when compiling for host
274 --host-cppflags=HCPPFLAGS use HCPPFLAGS when compiling for host
275 --host-ld=HOSTLD use host linker HOSTLD
276 --host-ldflags=HLDFLAGS use HLDFLAGS when linking for host
277 --host-libs=HLIBS use libs HLIBS when linking for host
278 --host-os=OS compiler host OS [$target_os]
279 --extra-cflags=ECFLAGS add ECFLAGS to CFLAGS [$CFLAGS]
280 --extra-objcflags=FLAGS add FLAGS to OBJCFLAGS [$CFLAGS]
281 --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]
282 --extra-ldexeflags=ELDFLAGS add ELDFLAGS to LDEXEFLAGS [$LDEXEFLAGS]
283 --extra-libs=ELIBS add ELIBS [$ELIBS]
284 --extra-version=STRING version string suffix []
285 --optflags=OPTFLAGS override optimization-related compiler flags
286 --enable-pic build position-independent code
287 --enable-thumb compile for Thumb instruction set
288 --enable-lto use link-time optimization
289 --env="ENV=override" override the environment variables
291 Advanced options (experts only):
292 --malloc-prefix=PREFIX prefix malloc and related names with PREFIX
293 --custom-allocator=NAME use a supported custom allocator
294 --disable-symver disable symbol versioning
295 --enable-hardcoded-tables use hardcoded tables instead of runtime generation
296 --disable-safe-bitstream-reader
297 disable buffer boundary checking in bitreaders
298 (faster, but may crash)
299 --enable-sram allow use of on-chip SRAM
301 Optimization options (experts only):
302 --disable-asm disable all assembly optimizations
303 --disable-altivec disable AltiVec optimizations
304 --disable-vsx disable VSX optimizations
305 --disable-power8 disable POWER8 optimizations
306 --disable-amd3dnow disable 3DNow! optimizations
307 --disable-amd3dnowext disable 3DNow! extended optimizations
308 --disable-mmx disable MMX optimizations
309 --disable-mmxext disable MMXEXT optimizations
310 --disable-sse disable SSE optimizations
311 --disable-sse2 disable SSE2 optimizations
312 --disable-sse3 disable SSE3 optimizations
313 --disable-ssse3 disable SSSE3 optimizations
314 --disable-sse4 disable SSE4 optimizations
315 --disable-sse42 disable SSE4.2 optimizations
316 --disable-avx disable AVX optimizations
317 --disable-xop disable XOP optimizations
318 --disable-fma3 disable FMA3 optimizations
319 --disable-fma4 disable FMA4 optimizations
320 --disable-avx2 disable AVX2 optimizations
321 --disable-armv5te disable armv5te optimizations
322 --disable-armv6 disable armv6 optimizations
323 --disable-armv6t2 disable armv6t2 optimizations
324 --disable-vfp disable VFP optimizations
325 --disable-neon disable NEON optimizations
326 --disable-inline-asm disable use of inline assembly
327 --disable-yasm disable use of nasm/yasm assembly
329 Developer options (useful when working on Libav itself):
330 --disable-debug disable debugging symbols
331 --enable-debug=LEVEL set the debug level [$debuglevel]
332 --disable-optimizations disable compiler optimizations
333 --enable-extra-warnings enable more compiler warnings
334 --samples=PATH location of test samples for FATE, if not set use
335 \$LIBAV_SAMPLES at make invocation time.
336 --enable-neon-clobber-test check NEON registers for clobbering (should be
337 used only for debugging purposes)
338 --enable-xmm-clobber-test check XMM registers for clobbering (Win64-only;
339 should be used only for debugging purposes)
340 --enable-random randomly enable/disable components
342 --enable-random=LIST randomly enable/disable specific components or
343 --disable-random=LIST component groups. LIST is a comma-separated list
344 of NAME[:PROB] entries where NAME is a component
345 (group) and PROB the probability associated with
347 --random-seed=VALUE seed value for --enable/disable-random
348 --disable-valgrind-backtrace do not print a backtrace under Valgrind
349 (only applies to --disable-optimizations builds)
351 NOTE: Object files are built at the place where configure is launched.
359 echo "$@" >> $logfile
366 printf '%5s %s\n' "${i}" "${line}"
368 done < $1 >> $logfile
379 WARNINGS="${WARNINGS}WARNING: $*\n"
386 If you think configure made a mistake, make sure you are using the latest
387 version from Git. If the latest version fails, report the problem to the
388 libav-tools@libav.org mailing list or IRC #libav on irc.freenode.net.
390 if disabled logging; then
392 Rerun configure with logging enabled (do not use --disable-logging), and
393 include the log this produces with your report.
397 Include the log file "$logfile" produced by configure as this will help
404 # Avoid locale weirdness, besides we really just want to translate ASCII.
406 echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
410 echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
414 echo "$*" | sed 's/["\\]/\\\0/g'
418 v=$(echo "$1" | sed "s/'/'\\\\''/g")
419 test "x$v" = "x${v#*[!A-Za-z0-9_/.+-]}" || v="'$v'"
424 echo "$@" | sed 's/^ *//;s/ */ /g;s/ *$//'
431 eval "case $v in $pat) printf '%s ' $v ;; esac"
439 eval "case $v in $pat) ;; *) printf '%s ' $v ;; esac"
446 for v; do eval $m; done
452 for v; do echo ${v}${suffix}; done
467 eval : \${$var:=$value}
472 echo $@ | sed 's/[^A-Za-z0-9_]/_/g'
478 eval $(sanitize_var_name "$var")='$*'
482 eval echo \$$(sanitize_var_name "$1")
487 eval level=\${${pvar}_level:=0}
488 eval ${pvar}_${level}="\$$pvar"
489 eval ${pvar}_level=$(($level+1))
495 eval level=\${${pvar}_level:-0}
496 test $level = 0 && continue
497 eval level=$(($level-1))
498 eval $pvar="\${${pvar}_${level}}"
499 eval ${pvar}_level=$level
500 eval unset ${pvar}_${level}
522 enable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
528 disable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
534 enabled $var && continue
535 eval sel="\$${var}_select"
536 eval sgs="\$${var}_suggest"
540 enable_deep_weak $sgs
552 disabled $var && continue
561 test "${1#!}" = "$1" && op== || op=!=
562 eval test "x\$${1#!}" $op "xyes"
566 test "${1#!}" = "$1" && op== || op=!=
567 eval test "x\$${1#!}" $op "xno"
572 enabled $opt || return 1
578 disabled $opt || return 1
584 enabled $opt && return 0
590 disabled $opt && return 0
597 eval : \${$opt:=\$${opt}_default}
605 [ $var = $value ] && return 0
613 enabled ${cfg}_checking && die "Circular dependency for $cfg."
614 disabled ${cfg}_checking && continue
615 enable ${cfg}_checking
618 eval dep_all="\$${cfg}_deps"
619 eval dep_any="\$${cfg}_deps_any"
620 eval dep_sel="\$${cfg}_select"
621 eval dep_sgs="\$${cfg}_suggest"
622 eval dep_ifa="\$${cfg}_if"
623 eval dep_ifn="\$${cfg}_if_any"
625 pushvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
626 do_check_deps $dep_all $dep_any $dep_sel $dep_sgs $dep_ifa $dep_ifn
627 popvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
629 [ -n "$dep_ifa" ] && { enabled_all $dep_ifa && enable_weak $cfg; }
630 [ -n "$dep_ifn" ] && { enabled_any $dep_ifn && enable_weak $cfg; }
631 enabled_all $dep_all || disable $cfg
632 enabled_any $dep_any || disable $cfg
633 disabled_any $dep_sel && disable $cfg
635 if enabled $cfg; then
637 enable_deep_weak $dep_sgs
640 disable ${cfg}_checking
649 for cfg in $allopts; do
650 enabled $cfg || continue
651 eval dep_extralibs="\$${cfg}_extralibs"
652 test -n "$dep_extralibs" && add_extralibs $dep_extralibs
660 map 'eval echo "$v \${$v:-no}"' "$@" |
661 awk "BEGIN { split(\"$files\", files) }
663 c = \"$pfx\" toupper(\$1);
669 if (file ~ /\\.h\$/) {
670 printf(\"#define %s %d\\n\", c, v) >>file;
671 } else if (file ~ /\\.asm\$/) {
672 printf(\"%%define %s %d\\n\", c, v) >>file;
673 } else if (file ~ /\\.mak\$/) {
674 n = -v ? \"\" : \"!\";
675 printf(\"%s%s=yes\\n\", n, c) >>file;
685 enabled $v && printf "%s\n" ${v%$suf}
692 eval "$var=\"\$$var $*\""
698 eval "$var=\"$* \$$var\""
704 for tok in $(eval echo \$$var); do
705 uniq_list="$(filter_out $tok $uniq_list) $tok"
707 eval "$var=\"${uniq_list}\""
715 append CFLAGS $($cflags_filter "$@")
719 append ASFLAGS $($asflags_filter "$@")
723 append OBJCFLAGS $($objcflags_filter "$@")
727 append LDFLAGS $($ldflags_filter "$@")
731 append LDEXEFLAGS $($ldflags_filter "$@")
735 append STRIPFLAGS "$@"
739 prepend extralibs $($ldflags_filter "$@")
743 append host_cppflags "$@"
747 append host_cflags $($host_cflags_filter "$@")
751 append host_ldflags $($host_ldflags_filter "$@")
755 append compat_objs $1
757 map 'add_cppflags -D$v' "$@"
762 "$@" >> $logfile 2>&1
766 eval printf '%s\\n' $CC_O
770 eval printf '%s\\n' $CC_E
777 check_cmd $cc $CPPFLAGS $CFLAGS "$@" $CC_C $(cc_o $TMPO) $TMPC
784 check_cmd $objcc $CPPFLAGS $CFLAGS $OBJCFLAGS "$@" $OBJCC_C $(cc_o $TMPO) $TMPC
791 check_cmd $cc $CPPFLAGS $CFLAGS "$@" $(cc_e $TMPO) $TMPC
795 eval printf '%s\\n' $AS_O
802 check_cmd $as $CPPFLAGS $ASFLAGS "$@" $AS_C $(as_o $TMPO) $TMPS
806 log check_inline_asm "$@"
811 check_cc "$@" <<EOF && enable $name
812 void foo(void){ __asm__ volatile($code); }
818 check_inline_asm ${1}_inline "\"$2\""
819 echo "$2" | check_as && enable ${1}_external || disable ${1}_external
827 check_cmd $yasmexe $YASMFLAGS "$@" -o $TMPO $TMPS
831 eval printf '%s\\n' $LD_O
836 flags=$(filter_out '-l*' "$@")
837 libs=$(filter '-l*' "$@")
838 check_cc $($cflags_filter $flags) || return
839 flags=$($ldflags_filter $flags)
840 libs=$($ldflags_filter $libs)
841 check_cmd $ld $LDFLAGS $flags $(ld_o $TMPE) $TMPO $libs $extralibs
846 test "${hdr%.h}" = "${hdr}" &&
847 echo "#include $hdr" ||
848 echo "#include <$hdr>"
858 for hdr in $headers; do
861 echo "int main(void) { $code; return 0; }"
862 } | check_$check "$@"
866 log check_cppflags "$@"
867 check_cpp "$@" <<EOF && append CPPFLAGS "$@"
874 set -- $($cflags_filter "$@")
881 log check_cflags "$@"
882 test_cflags "$@" && add_cflags "$@"
886 log test_objcflags "$@"
887 set -- $($objcflags_filter "$@")
888 check_objcc "$@" <<EOF
894 log check_objcflags "$@"
895 test_objcflags "$@" && add_objcflags "$@"
899 log test_ldflags "$@"
901 int main(void){ return 0; }
906 log check_ldflags "$@"
907 test_ldflags "$@" && add_ldflags "$@"
911 log test_stripflags "$@"
912 # call check_cc to get a fresh TMPO
914 int main(void) { return 0; }
916 check_cmd $strip $STRIPFLAGS "$@" $TMPO
920 log check_stripflags "$@"
921 test_stripflags "$@" && add_stripflags "$@"
925 log check_header "$@"
929 check_cpp "$@" <<EOF && enable_safe $header
940 check_ld "$@" <<EOF && enable $func
942 int main(void){ $func(); }
947 log check_mathfunc "$@"
951 test $narg = 2 && args="f, g" || args="f"
953 check_ld "$@" <<EOF && enable $func
955 float foo(float f, float g) { return $func($args); }
956 int main(void){ return 0; }
960 check_func_headers(){
961 log check_func_headers "$@"
966 for hdr in $headers; do
969 for func in $funcs; do
970 echo "long check_$func(void) { return (long) $func; }"
972 echo "int main(void) { return 0; }"
973 } | check_ld "$@" && enable $funcs && enable_safe $headers
976 check_cpp_condition(){
977 log check_cpp_condition "$@"
984 #error "unsatisfied condition: $condition"
990 log test_cflags_cpp "$@"
994 set -- $($cflags_filter "$flags")
997 #error "unsatisfied condition: $condition"
1007 check_func_headers "$headers" "$funcs" "$@" && add_extralibs "$@"
1011 log check_pkg_config "$@"
1017 check_cmd $pkg_config --exists --print-errors $pkg_version || return
1018 pkg_cflags=$($pkg_config --cflags $pkg_config_flags $pkg)
1019 pkg_libs=$($pkg_config --libs $pkg_config_flags $pkg)
1020 check_func_headers "$headers" "$funcs" $pkg_cflags $pkg_libs "$@" &&
1021 set_safe "${pkg}_cflags" $pkg_cflags &&
1022 set_safe "${pkg}_libs" $pkg_libs
1026 check_ld "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
1030 log check_exec_crash "$@"
1033 # exit() is not async signal safe. _Exit (C99) and _exit (POSIX)
1034 # are safe but may not be available everywhere. Thus we use
1035 # raise(SIGTERM) instead. The check is run in a subshell so we
1036 # can redirect the "Terminated" message from the shell. SIGBUS
1037 # is not defined by standard C so it is used conditionally.
1039 (check_exec "$@") >> $logfile 2>&1 <<EOF
1041 static void sighandler(int sig){
1047 int (*func_ptr)(void) = foo;
1049 signal(SIGILL, sighandler);
1050 signal(SIGFPE, sighandler);
1051 signal(SIGSEGV, sighandler);
1053 signal(SIGBUS, sighandler);
1065 disable_safe "$type"
1066 check_code cc "$headers" "$type v" "$@" && enable_safe "$type"
1070 log check_struct "$@"
1075 disable_safe "${struct}_${member}"
1076 check_code cc "$headers" "const void *p = &(($struct *)0)->$member" "$@" &&
1077 enable_safe "${struct}_${member}"
1081 log check_builtin "$@"
1087 check_code ld "$headers" "$builtin" "$@" && enable "$name"
1090 check_compile_assert(){
1091 log check_compile_assert "$@"
1097 check_code cc "$headers" "char c[2 * !!($condition) - 1]" "$@" && enable "$name"
1106 check_lib "$headers" $func "$@" || die "ERROR: $name_version not found"
1109 require_pkg_config(){
1110 log require_pkg_config "$@"
1113 check_pkg_config "$@" || die "ERROR: $pkg_version not found"
1114 add_cflags $(get_safe "${pkg}_cflags")
1115 add_extralibs $(get_safe "${pkg}_libs")
1119 eval printf '%s\\n' $HOSTCC_E
1123 eval printf '%s\\n' $HOSTCC_O
1127 log check_host_cc "$@"
1130 check_cmd $host_cc $host_cflags "$@" $HOSTCC_C $(hostcc_o $TMPO) $TMPC
1134 log check_host_cpp "$@"
1137 check_cmd $host_cc $host_cppflags $host_cflags "$@" $(hostcc_e $TMPO) $TMPC
1140 check_host_cppflags(){
1141 log check_host_cppflags "$@"
1142 check_host_cpp "$@" <<EOF && append host_cppflags "$@"
1147 check_host_cflags(){
1148 log check_host_cflags "$@"
1149 set -- $($host_cflags_filter "$@")
1150 check_host_cc "$@" <<EOF && append host_cflags "$@"
1155 check_host_cpp_condition(){
1156 log check_host_cpp_condition "$@"
1160 check_host_cpp "$@" <<EOF
1163 #error "unsatisfied condition: $condition"
1171 "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
1175 cmp -s "$1" "$2" && { test "$quiet" != "yes" && echo "$2 is unchanged"; } && return
1176 mkdir -p "$(dirname $2)"
1180 # CONFIG_LIST contains configurable options, while HAVE_LIST is for
1181 # system-dependent things.
1183 AVCODEC_COMPONENTS="
1191 AVDEVICE_COMPONENTS="
1195 AVFILTER_COMPONENTS="
1198 AVFORMAT_COMPONENTS="
1204 AVRESAMPLE_COMPONENTS=""
1205 AVUTIL_COMPONENTS=""
1209 $AVDEVICE_COMPONENTS
1210 $AVFILTER_COMPONENTS
1211 $AVFORMAT_COMPONENTS
1212 $AVRESAMPLE_COMPONENTS
1217 decode_audio_example
1218 decode_video_example
1219 encode_audio_example
1220 encode_video_example
1221 filter_audio_example
1225 transcode_aac_example
1228 HWACCEL_LIBRARY_NONFREE_LIST="
1232 HWACCEL_LIBRARY_LIST="
1233 $HWACCEL_LIBRARY_NONFREE_LIST
1245 EXTERNAL_LIBRARY_GPL_LIST="
1253 EXTERNAL_LIBRARY_NONFREE_LIST="
1259 EXTERNAL_LIBRARY_VERSION3_LIST="
1266 EXTERNAL_LIBRARY_LIST="
1267 $EXTERNAL_LIBRARY_GPL_LIST
1268 $EXTERNAL_LIBRARY_NONFREE_LIST
1269 $EXTERNAL_LIBRARY_VERSION3_LIST
1310 safe_bitstream_reader
1356 $EXTERNAL_LIBRARY_LIST
1357 $HWACCEL_LIBRARY_LIST
1420 ARCH_EXT_LIST_X86_SIMD="
1448 $ARCH_EXT_LIST_X86_SIMD
1453 ARCH_EXT_LIST_MIPS="
1490 sync_val_compare_and_swap
1504 AVFoundation_AVFoundation_h
1509 cdio_paranoia_paranoia_h
1511 dev_bktr_ioctl_bt848_h
1512 dev_bktr_ioctl_meteor_h
1514 dev_video_bktr_ioctl_bt848_h
1515 dev_video_meteor_ioctl_meteor_h
1523 machine_ioctl_bt848_h
1524 machine_ioctl_meteor_h
1589 GetProcessAffinityMask
1590 GetProcessMemoryInfo
1593 GetSystemTimeAsFileTime
1598 jack_port_get_latency_range
1610 SetConsoleTextAttribute
1621 TOOLCHAIN_FEATURES="
1643 CONDITION_VARIABLE_Ptr
1646 struct_group_source_req
1647 struct_ip_mreq_source
1650 struct_rusage_ru_maxrss
1652 struct_sockaddr_sa_len
1653 struct_sockaddr_storage
1654 struct_v4l2_frmivalenum_discrete
1659 $(add_suffix _external $ARCH_EXT_LIST)
1660 $(add_suffix _inline $ARCH_EXT_LIST)
1675 MMAL_PARAMETER_VIDEO_MAX_NUM_CALLBACKS
1684 # options emitted with CONFIG_ prefix but not available on the command line
1830 # code dependency declarations
1832 # architecture extensions
1837 armv8_deps="aarch64"
1838 neon_deps_any="aarch64 arm"
1839 intrinsics_neon_deps="neon"
1840 vfp_deps_any="aarch64 arm"
1843 map 'eval ${v}_inline_deps=inline_asm' $ARCH_EXT_LIST_ARM
1851 x86_64_select="i686"
1852 x86_64_suggest="fast_cmov"
1855 amd3dnowext_deps="amd3dnow"
1871 mmx_external_deps="yasm"
1872 mmx_inline_deps="inline_asm"
1873 mmx_suggest="mmx_external mmx_inline"
1875 for ext in $(filter_out mmx $ARCH_EXT_LIST_X86_SIMD); do
1876 eval dep=\$${ext}_deps
1877 eval ${ext}_external_deps='"${dep}_external"'
1878 eval ${ext}_inline_deps='"${dep}_inline"'
1879 eval ${ext}_suggest='"${ext}_external ${ext}_inline"'
1882 aligned_stack_if_any="aarch64 ppc x86"
1883 fast_64bit_if_any="aarch64 alpha ia64 mips64 parisc64 ppc64 sparc64 x86_64"
1884 fast_clz_if_any="aarch64 alpha avr32 mips ppc x86"
1885 fast_unaligned_if_any="aarch64 ppc x86"
1886 simd_align_16_if_any="altivec neon sse"
1887 simd_align_32_if_any="avx"
1889 # system capabilities
1890 symver_if_any="symver_asm_label symver_gnu_asm"
1891 valgrind_backtrace_deps="!optimizations valgrind_valgrind_h"
1894 atomics_gcc_if="sync_val_compare_and_swap"
1895 atomics_suncc_if="atomic_cas_ptr machine_rw_barrier"
1896 atomics_win32_if="MemoryBarrier"
1897 atomics_native_if_any="$ATOMICS_LIST"
1898 w32threads_deps="atomics_native"
1899 threads_if_any="$THREADS_LIST"
1903 dirac_parse_select="golomb"
1904 error_resilience_select="me_cmp"
1905 faandct_deps="faan fdctdsp"
1906 faanidct_deps="faan idctdsp"
1907 h264dsp_select="startcode"
1908 intrax8_select="blockdsp idctdsp"
1911 me_cmp_select="fdctdsp idctdsp pixblockdsp"
1912 mpeg_er_select="error_resilience"
1913 mpegaudio_select="mpegaudiodsp mpegaudioheader"
1914 mpegaudiodsp_select="dct"
1915 mpegvideo_select="blockdsp hpeldsp idctdsp me_cmp mpeg_er videodsp"
1916 mpegvideoenc_select="me_cmp mpegvideo pixblockdsp qpeldsp"
1917 vc1dsp_select="h264chroma qpeldsp startcode"
1919 # decoders / encoders
1920 aac_decoder_select="imdct15 mdct sinewin"
1921 aac_encoder_select="audio_frame_queue iirfilter mdct sinewin"
1922 aac_latm_decoder_select="aac_decoder aac_latm_parser"
1923 ac3_decoder_select="ac3_parser ac3dsp bswapdsp fmtconvert mdct"
1924 ac3_encoder_select="ac3dsp audiodsp mdct me_cmp"
1925 ac3_fixed_encoder_select="ac3dsp audiodsp mdct me_cmp"
1926 adpcm_g722_decoder_select="g722dsp"
1927 adpcm_g722_encoder_select="g722dsp"
1928 aic_decoder_select="golomb idctdsp"
1929 alac_encoder_select="lpc"
1930 als_decoder_select="bswapdsp"
1931 amrnb_decoder_select="lsp"
1932 amrwb_decoder_select="lsp"
1933 amv_decoder_select="sp5x_decoder"
1934 ape_decoder_select="bswapdsp"
1935 asv1_decoder_select="blockdsp bswapdsp idctdsp"
1936 asv1_encoder_select="bswapdsp fdctdsp pixblockdsp"
1937 asv2_decoder_select="blockdsp bswapdsp idctdsp"
1938 asv2_encoder_select="bswapdsp fdctdsp pixblockdsp"
1939 atrac1_decoder_select="mdct sinewin"
1940 atrac3_decoder_select="mdct"
1941 atrac3p_decoder_select="mdct sinewin"
1942 bink_decoder_select="blockdsp hpeldsp"
1943 binkaudio_dct_decoder_select="mdct rdft dct sinewin wma_freqs"
1944 binkaudio_rdft_decoder_select="mdct rdft sinewin wma_freqs"
1945 cavs_decoder_select="blockdsp golomb h264chroma idctdsp qpeldsp videodsp"
1946 cllc_decoder_select="bswapdsp"
1947 comfortnoise_encoder_select="lpc"
1948 cook_decoder_select="audiodsp mdct sinewin"
1949 cscd_decoder_select="lzo"
1950 cscd_decoder_suggest="zlib"
1951 dca_decoder_select="fmtconvert mdct"
1952 dds_decoder_select="texturedsp"
1953 dnxhd_decoder_select="blockdsp idctdsp"
1954 dnxhd_encoder_select="aandcttables blockdsp fdctdsp idctdsp mpegvideoenc pixblockdsp"
1955 dvvideo_decoder_select="dvprofile idctdsp"
1956 dvvideo_encoder_select="dvprofile fdctdsp me_cmp pixblockdsp"
1957 dxa_decoder_deps="zlib"
1958 dxv_decoder_select="lzf texturedsp"
1959 eac3_decoder_select="ac3_decoder"
1960 eac3_encoder_select="ac3_encoder"
1961 eamad_decoder_select="aandcttables blockdsp bswapdsp idctdsp mpegvideo"
1962 eatgq_decoder_select="aandcttables idctdsp"
1963 eatqi_decoder_select="aandcttables blockdsp bswapdsp idctdsp"
1964 exr_decoder_deps="zlib"
1965 ffv1_decoder_select="golomb rangecoder"
1966 ffv1_encoder_select="rangecoder"
1967 ffvhuff_decoder_select="huffyuv_decoder"
1968 ffvhuff_encoder_select="huffyuv_encoder"
1969 fic_decoder_select="golomb"
1970 flac_decoder_select="flacdsp golomb"
1971 flac_encoder_select="bswapdsp flacdsp golomb lpc"
1972 flashsv_decoder_deps="zlib"
1973 flashsv_encoder_deps="zlib"
1974 flashsv2_decoder_deps="zlib"
1975 flv_decoder_select="h263_decoder"
1976 flv_encoder_select="h263_encoder"
1977 fourxm_decoder_select="blockdsp bswapdsp"
1978 fraps_decoder_select="bswapdsp huffman"
1979 g2m_decoder_deps="zlib"
1980 g2m_decoder_select="blockdsp idctdsp jpegtables"
1981 h261_decoder_select="mpeg_er mpegvideo"
1982 h261_encoder_select="aandcttables mpegvideoenc"
1983 h263_decoder_select="error_resilience h263_parser h263dsp mpeg_er mpegvideo qpeldsp"
1984 h263_encoder_select="aandcttables h263dsp mpegvideoenc"
1985 h263i_decoder_select="h263_decoder"
1986 h263p_encoder_select="h263_encoder"
1987 h264_decoder_select="cabac golomb h264chroma h264dsp h264parse h264pred h264qpel videodsp"
1988 h264_decoder_suggest="error_resilience"
1989 hap_decoder_select="snappy texturedsp"
1990 hap_encoder_deps="libsnappy"
1991 hap_encoder_select="texturedspenc"
1992 hevc_decoder_select="bswapdsp cabac golomb videodsp"
1993 huffyuv_decoder_select="bswapdsp huffyuvdsp"
1994 huffyuv_encoder_select="bswapdsp huffman huffyuvencdsp"
1995 iac_decoder_select="imc_decoder"
1996 imc_decoder_select="bswapdsp fft mdct sinewin"
1997 indeo3_decoder_select="hpeldsp"
1998 indeo4_decoder_select="ividsp"
1999 indeo5_decoder_select="ividsp"
2000 interplay_video_decoder_select="hpeldsp"
2001 jpegls_decoder_select="golomb mjpeg_decoder"
2002 jpegls_encoder_select="golomb"
2003 jv_decoder_select="blockdsp"
2004 lagarith_decoder_select="huffyuvdsp"
2005 ljpeg_encoder_select="aandcttables idctdsp jpegtables"
2006 loco_decoder_select="golomb"
2007 magicyuv_decoder_select="huffyuvdsp"
2008 mdec_decoder_select="blockdsp idctdsp mpegvideo"
2009 metasound_decoder_select="lsp mdct sinewin"
2010 mimic_decoder_select="blockdsp bswapdsp hpeldsp idctdsp"
2011 mjpeg_decoder_select="blockdsp hpeldsp idctdsp jpegtables"
2012 mjpeg_encoder_select="aandcttables jpegtables mpegvideoenc"
2013 mjpegb_decoder_select="mjpeg_decoder"
2014 mlp_decoder_select="mlp_parser"
2015 motionpixels_decoder_select="bswapdsp"
2016 mp1_decoder_select="mpegaudio"
2017 mp1float_decoder_select="mpegaudio"
2018 mp2_decoder_select="mpegaudio"
2019 mp2float_decoder_select="mpegaudio"
2020 mp3_decoder_select="mpegaudio"
2021 mp3adu_decoder_select="mpegaudio"
2022 mp3adufloat_decoder_select="mpegaudio"
2023 mp3float_decoder_select="mpegaudio"
2024 mp3on4_decoder_select="mpegaudio"
2025 mp3on4float_decoder_select="mpegaudio"
2026 mpc7_decoder_select="bswapdsp mpegaudiodsp"
2027 mpc8_decoder_select="mpegaudiodsp"
2028 mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h"
2029 mpeg_xvmc_decoder_select="mpeg2video_decoder"
2030 mpeg1video_decoder_select="error_resilience mpeg_er mpegvideo"
2031 mpeg1video_encoder_select="aandcttables mpegvideoenc"
2032 mpeg2video_decoder_select="error_resilience mpeg_er mpegvideo"
2033 mpeg2video_encoder_select="aandcttables mpegvideoenc"
2034 mpeg4_decoder_select="h263_decoder mpeg4video_parser"
2035 mpeg4_encoder_select="h263_encoder"
2036 msa1_decoder_select="mss34dsp"
2037 msmpeg4v1_decoder_select="h263_decoder"
2038 msmpeg4v2_decoder_select="h263_decoder"
2039 msmpeg4v2_encoder_select="h263_encoder"
2040 msmpeg4v3_decoder_select="h263_decoder"
2041 msmpeg4v3_encoder_select="h263_encoder"
2042 mss2_decoder_select="error_resilience mpeg_er mpegvideo qpeldsp vc1_decoder"
2043 mts2_decoder_select="mss34dsp"
2044 mxpeg_decoder_select="mjpeg_decoder"
2045 nellymoser_decoder_select="mdct sinewin"
2046 nellymoser_encoder_select="audio_frame_queue mdct sinewin"
2047 nuv_decoder_select="idctdsp lzo"
2048 on2avc_decoder_select="mdct"
2049 opus_decoder_deps="avresample"
2050 opus_decoder_select="imdct15"
2051 png_decoder_deps="zlib"
2052 png_encoder_deps="zlib"
2053 png_encoder_select="huffyuvencdsp"
2054 prores_decoder_select="idctdsp"
2055 prores_encoder_select="fdctdsp"
2056 qcelp_decoder_select="lsp"
2057 qdm2_decoder_select="mdct rdft mpegaudiodsp"
2058 ra_144_encoder_select="audio_frame_queue lpc"
2059 ralf_decoder_select="golomb"
2060 rscc_decoder_deps="zlib"
2061 rv10_decoder_select="error_resilience h263_decoder h263dsp mpeg_er"
2062 rv10_encoder_select="h263_encoder"
2063 rv20_decoder_select="error_resilience h263_decoder h263dsp mpeg_er"
2064 rv20_encoder_select="h263_encoder"
2065 rv30_decoder_select="error_resilience golomb h264chroma h264pred h264qpel mpeg_er mpegvideo rv34dsp videodsp"
2066 rv40_decoder_select="error_resilience golomb h264chroma h264pred h264qpel mpeg_er mpegvideo rv34dsp videodsp"
2067 screenpresso_decoder_deps="zlib"
2068 shorten_decoder_select="golomb"
2069 sipr_decoder_select="lsp"
2070 sp5x_decoder_select="mjpeg_decoder"
2071 svq1_decoder_select="hpeldsp"
2072 svq1_encoder_select="aandcttables hpeldsp me_cmp mpegvideoenc"
2073 svq3_decoder_select="golomb h264dsp h264parse h264pred hpeldsp tpeldsp videodsp"
2074 svq3_decoder_suggest="zlib"
2075 tak_decoder_select="audiodsp"
2076 tdsc_decoder_deps="zlib"
2077 tdsc_decoder_select="mjpeg_decoder"
2078 theora_decoder_select="vp3_decoder"
2079 thp_decoder_select="mjpeg_decoder"
2080 tiff_decoder_suggest="zlib"
2081 tiff_encoder_suggest="zlib"
2082 truehd_decoder_select="mlp_decoder"
2083 truemotion2_decoder_select="bswapdsp"
2084 truespeech_decoder_select="bswapdsp"
2085 tscc_decoder_deps="zlib"
2086 txd_decoder_select="texturedsp"
2087 twinvq_decoder_select="mdct lsp sinewin"
2088 utvideo_decoder_select="bswapdsp"
2089 utvideo_encoder_select="bswapdsp huffman huffyuvencdsp"
2090 vble_decoder_select="huffyuvdsp"
2091 vc1_decoder_select="blockdsp error_resilience h263_decoder h264qpel intrax8 mpeg_er mpegvideo vc1dsp"
2092 vc1image_decoder_select="vc1_decoder"
2093 vorbis_decoder_select="mdct"
2094 vorbis_encoder_select="mdct"
2095 vp3_decoder_select="hpeldsp vp3dsp videodsp"
2096 vp5_decoder_select="h264chroma hpeldsp videodsp vp3dsp vp56dsp"
2097 vp6_decoder_select="h264chroma hpeldsp huffman videodsp vp3dsp vp56dsp"
2098 vp6a_decoder_select="vp6_decoder"
2099 vp6f_decoder_select="vp6_decoder"
2100 vp7_decoder_select="h264pred videodsp vp8dsp"
2101 vp8_decoder_select="h264pred videodsp vp8dsp"
2102 vp9_decoder_select="videodsp"
2103 webp_decoder_select="vp8_decoder"
2104 wmapro_decoder_select="mdct sinewin wma_freqs"
2105 wmav1_decoder_select="mdct sinewin wma_freqs"
2106 wmav1_encoder_select="mdct sinewin wma_freqs"
2107 wmav2_decoder_select="mdct sinewin wma_freqs"
2108 wmav2_encoder_select="mdct sinewin wma_freqs"
2109 wmavoice_decoder_select="lsp rdft dct mdct sinewin"
2110 wmv1_decoder_select="h263_decoder"
2111 wmv1_encoder_select="h263_encoder"
2112 wmv2_decoder_select="blockdsp error_resilience h263_decoder idctdsp intrax8 videodsp wmv2dsp"
2113 wmv2_encoder_select="h263_encoder wmv2dsp"
2114 wmv3_decoder_select="vc1_decoder"
2115 wmv3image_decoder_select="wmv3_decoder"
2116 zerocodec_decoder_deps="zlib"
2117 zlib_decoder_deps="zlib"
2118 zlib_encoder_deps="zlib"
2119 zmbv_decoder_deps="zlib"
2120 zmbv_encoder_deps="zlib"
2122 # hardware accelerators
2123 d3d11va_deps="d3d11_h dxva_h ID3D11VideoDecoder"
2124 dxva2_deps="dxva2api_h DXVA2_ConfigPictureDecode"
2125 vaapi_deps="va_va_h"
2126 vda_deps="VideoDecodeAcceleration_VDADecoder_h pthreads"
2127 vda_extralibs="-framework CoreFoundation -framework VideoDecodeAcceleration -framework QuartzCore"
2128 vdpau_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
2130 h263_vaapi_hwaccel_deps="vaapi"
2131 h263_vaapi_hwaccel_select="h263_decoder"
2132 h264_d3d11va_hwaccel_deps="d3d11va"
2133 h264_d3d11va_hwaccel_select="h264_decoder"
2134 h264_dxva2_hwaccel_deps="dxva2"
2135 h264_dxva2_hwaccel_select="h264_decoder"
2136 h264_mmal_hwaccel_deps="mmal"
2137 h264_qsv_hwaccel_deps="libmfx"
2138 h264_vaapi_hwaccel_deps="vaapi"
2139 h264_vaapi_hwaccel_select="h264_decoder"
2140 h264_vda_hwaccel_deps="vda"
2141 h264_vda_hwaccel_select="h264_decoder"
2142 h264_vda_old_hwaccel_deps="vda"
2143 h264_vda_old_hwaccel_select="h264_decoder"
2144 h264_vdpau_hwaccel_deps="vdpau"
2145 h264_vdpau_hwaccel_select="h264_decoder"
2146 hevc_d3d11va_hwaccel_deps="d3d11va DXVA_PicParams_HEVC"
2147 hevc_d3d11va_hwaccel_select="hevc_decoder"
2148 hevc_dxva2_hwaccel_deps="dxva2 DXVA_PicParams_HEVC"
2149 hevc_dxva2_hwaccel_select="hevc_decoder"
2150 hevc_qsv_hwaccel_deps="libmfx"
2151 hevc_vdpau_hwaccel_deps="vdpau VdpPictureInfoHEVC"
2152 hevc_vdpau_hwaccel_select="hevc_decoder"
2153 mpeg1_vdpau_hwaccel_deps="vdpau"
2154 mpeg1_vdpau_hwaccel_select="mpeg1video_decoder"
2155 mpeg2_d3d11va_hwaccel_deps="d3d11va"
2156 mpeg2_d3d11va_hwaccel_select="mpeg2video_decoder"
2157 mpeg2_dxva2_hwaccel_deps="dxva2"
2158 mpeg2_dxva2_hwaccel_select="mpeg2video_decoder"
2159 mpeg2_mmal_hwaccel_deps="mmal"
2160 mpeg2_qsv_hwaccel_deps="libmfx"
2161 mpeg2_vaapi_hwaccel_deps="vaapi"
2162 mpeg2_vaapi_hwaccel_select="mpeg2video_decoder"
2163 mpeg2_vdpau_hwaccel_deps="vdpau"
2164 mpeg2_vdpau_hwaccel_select="mpeg2video_decoder"
2165 mpeg4_vaapi_hwaccel_deps="vaapi"
2166 mpeg4_vaapi_hwaccel_select="mpeg4_decoder"
2167 mpeg4_vdpau_hwaccel_deps="vdpau"
2168 mpeg4_vdpau_hwaccel_select="mpeg4_decoder"
2169 vc1_d3d11va_hwaccel_deps="d3d11va"
2170 vc1_d3d11va_hwaccel_select="vc1_decoder"
2171 vc1_dxva2_hwaccel_deps="dxva2"
2172 vc1_dxva2_hwaccel_select="vc1_decoder"
2173 vc1_mmal_hwaccel_deps="mmal"
2174 vc1_qsv_hwaccel_deps="libmfx"
2175 vc1_vaapi_hwaccel_deps="vaapi"
2176 vc1_vaapi_hwaccel_select="vc1_decoder"
2177 vc1_vdpau_hwaccel_deps="vdpau"
2178 vc1_vdpau_hwaccel_select="vc1_decoder"
2179 vp8_qsv_hwaccel_deps="libmfx"
2180 vp8_vaapi_hwaccel_deps="vaapi VAPictureParameterBufferVP8"
2181 vp8_vaapi_hwaccel_select="vp8_decoder"
2182 wmv3_d3d11va_hwaccel_select="vc1_d3d11va_hwaccel"
2183 wmv3_dxva2_hwaccel_select="vc1_dxva2_hwaccel"
2184 wmv3_vaapi_hwaccel_select="vc1_vaapi_hwaccel"
2185 wmv3_vdpau_hwaccel_select="vc1_vdpau_hwaccel"
2187 # hardware-accelerated codecs
2188 nvenc_deps_any="dlopen LoadLibrary"
2189 nvenc_extralibs='$ldl'
2190 omx_deps="dlopen pthreads"
2191 omx_extralibs='$ldl'
2194 vaapi_encode_deps="vaapi"
2196 hwupload_cuda_filter_deps="cuda"
2197 scale_npp_filter_deps="cuda libnpp"
2199 h264_mmal_decoder_deps="mmal"
2200 h264_nvenc_encoder_deps="nvenc"
2201 h264_omx_encoder_deps="omx"
2202 h264_qsv_decoder_deps="libmfx"
2203 h264_qsv_decoder_select="h264_mp4toannexb_bsf h264_parser qsvdec h264_qsv_hwaccel"
2204 h264_qsv_encoder_deps="libmfx"
2205 h264_qsv_encoder_select="qsvenc"
2206 h264_vaapi_encoder_deps="VAEncPictureParameterBufferH264"
2207 h264_vaapi_encoder_select="vaapi_encode golomb"
2208 hevc_nvenc_encoder_deps="nvenc"
2209 hevc_qsv_decoder_deps="libmfx"
2210 hevc_qsv_encoder_deps="libmfx"
2211 hevc_qsv_decoder_select="hevc_mp4toannexb_bsf hevc_parser hevc_qsv_hwaccel qsvdec"
2212 hevc_qsv_encoder_select="qsvenc"
2213 hevc_vaapi_encoder_deps="VAEncPictureParameterBufferHEVC"
2214 hevc_vaapi_encoder_select="vaapi_encode golomb"
2215 mjpeg_vaapi_encoder_deps="VAEncPictureParameterBufferJPEG"
2216 mjpeg_vaapi_encoder_select="vaapi_encode jpegtables"
2217 mpeg2_mmal_decoder_deps="mmal"
2218 mpeg2_qsv_decoder_deps="libmfx"
2219 mpeg2_qsv_decoder_select="qsvdec mpeg2_qsv_hwaccel mpegvideo_parser"
2220 mpeg2_qsv_encoder_deps="libmfx"
2221 mpeg2_qsv_encoder_select="qsvenc"
2222 mpeg4_omx_encoder_deps="omx"
2223 vc1_mmal_decoder_deps="mmal"
2224 vc1_qsv_decoder_deps="libmfx"
2225 vc1_qsv_decoder_select="qsvdec vc1_qsv_hwaccel vc1_parser"
2226 vp8_qsv_decoder_deps="libmfx"
2227 vp8_qsv_decoder_select="qsvdec vp8_qsv_hwaccel vp8_parser"
2229 nvenc_h264_encoder_deps="nvenc"
2230 nvenc_hevc_encoder_deps="nvenc"
2233 h264_parser_select="golomb h264dsp h264parse"
2234 hevc_parser_select="golomb"
2235 mpegaudio_parser_select="mpegaudioheader"
2236 mpegvideo_parser_select="mpegvideo"
2237 mpeg4video_parser_select="error_resilience h263dsp mpegvideo qpeldsp"
2238 vc1_parser_select="vc1dsp"
2241 mjpeg2jpeg_bsf_select="jpegtables"
2243 # external libraries
2244 libdcadec_decoder_deps="libdcadec"
2245 libfaac_encoder_deps="libfaac"
2246 libfaac_encoder_select="audio_frame_queue"
2247 libfdk_aac_decoder_deps="libfdk_aac"
2248 libfdk_aac_encoder_deps="libfdk_aac"
2249 libfdk_aac_encoder_select="audio_frame_queue"
2250 libgsm_decoder_deps="libgsm"
2251 libgsm_encoder_deps="libgsm"
2252 libgsm_ms_decoder_deps="libgsm"
2253 libgsm_ms_encoder_deps="libgsm"
2254 libilbc_decoder_deps="libilbc"
2255 libilbc_encoder_deps="libilbc"
2256 libkvazaar_encoder_deps="libkvazaar"
2257 libmp3lame_encoder_deps="libmp3lame"
2258 libmp3lame_encoder_select="audio_frame_queue mpegaudioheader"
2259 libopencore_amrnb_decoder_deps="libopencore_amrnb"
2260 libopencore_amrnb_encoder_deps="libopencore_amrnb"
2261 libopencore_amrnb_encoder_select="audio_frame_queue"
2262 libopencore_amrwb_decoder_deps="libopencore_amrwb"
2263 libopenh264_decoder_deps="libopenh264"
2264 libopenh264_decoder_select="h264_mp4toannexb_bsf"
2265 libopenh264_encoder_deps="libopenh264"
2266 libopenjpeg_decoder_deps="libopenjpeg"
2267 libopenjpeg_encoder_deps="libopenjpeg"
2268 libopus_decoder_deps="libopus"
2269 libopus_encoder_deps="libopus"
2270 libopus_encoder_select="audio_frame_queue"
2271 libschroedinger_decoder_deps="libschroedinger"
2272 libschroedinger_encoder_deps="libschroedinger"
2273 libspeex_decoder_deps="libspeex"
2274 libspeex_encoder_deps="libspeex"
2275 libspeex_encoder_select="audio_frame_queue"
2276 libtheora_encoder_deps="libtheora"
2277 libtwolame_encoder_deps="libtwolame"
2278 libvo_aacenc_encoder_deps="libvo_aacenc"
2279 libvo_aacenc_encoder_select="audio_frame_queue"
2280 libvo_amrwbenc_encoder_deps="libvo_amrwbenc"
2281 libvorbis_encoder_deps="libvorbis"
2282 libvorbis_encoder_select="audio_frame_queue"
2283 libvpx_vp8_decoder_deps="libvpx"
2284 libvpx_vp8_encoder_deps="libvpx"
2285 libvpx_vp9_decoder_deps="libvpx"
2286 libvpx_vp9_encoder_deps="libvpx"
2287 libwavpack_encoder_deps="libwavpack"
2288 libwavpack_encoder_select="audio_frame_queue"
2289 libwebp_encoder_deps="libwebp"
2290 libx262_encoder_deps="libx262"
2291 libx264_encoder_deps="libx264"
2292 libx265_encoder_deps="libx265"
2293 libxavs_encoder_deps="libxavs"
2294 libxvid_encoder_deps="libxvid mkstemp"
2297 ac3_demuxer_select="ac3_parser"
2298 asf_demuxer_select="riffdec"
2299 asf_muxer_select="riffenc"
2300 asf_stream_muxer_select="asf_muxer"
2301 avi_demuxer_select="iso_media riffdec"
2302 avi_muxer_select="riffenc"
2303 avisynth_demuxer_deps="avisynth"
2304 avisynth_demuxer_select="riffdec"
2305 caf_demuxer_select="iso_media riffdec"
2306 dash_muxer_select="mp4_muxer"
2307 dirac_demuxer_select="dirac_parser"
2308 dv_demuxer_select="dvprofile"
2309 dv_muxer_select="dvprofile"
2310 dxa_demuxer_select="riffdec"
2311 eac3_demuxer_select="ac3_parser"
2312 f4v_muxer_select="mov_muxer"
2313 flac_demuxer_select="flac_parser"
2314 hds_muxer_select="flv_muxer"
2315 hls_muxer_select="mpegts_muxer"
2316 ipod_muxer_select="mov_muxer"
2317 ismv_muxer_select="mov_muxer"
2318 matroska_audio_muxer_select="matroska_muxer"
2319 matroska_demuxer_select="iso_media riffdec"
2320 matroska_demuxer_suggest="bzlib lzo zlib"
2321 matroska_muxer_select="iso_media riffenc"
2322 mmf_muxer_select="riffenc"
2323 mov_demuxer_select="iso_media riffdec"
2324 mov_demuxer_suggest="zlib"
2325 mov_muxer_select="iso_media riffenc rtpenc_chain"
2326 mp3_demuxer_select="mpegaudio_parser"
2327 mp3_muxer_select="mpegaudioheader"
2328 mp4_muxer_select="mov_muxer"
2329 mpegts_demuxer_select="iso_media"
2330 mpegts_muxer_select="adts_muxer latm_muxer"
2331 mpegtsraw_demuxer_select="mpegts_demuxer"
2332 mxf_d10_muxer_select="mxf_muxer"
2333 nut_muxer_select="riffenc"
2334 nuv_demuxer_select="riffdec"
2335 oga_muxer_select="ogg_muxer"
2336 ogg_demuxer_select="dirac_parse"
2337 opus_muxer_select="ogg_muxer"
2338 psp_muxer_select="mov_muxer"
2339 rtp_demuxer_select="sdp_demuxer"
2340 rtpdec_select="asf_demuxer jpegtables mov_demuxer mpegts_demuxer rm_demuxer rtp_protocol srtp"
2341 rtsp_demuxer_select="http_protocol rtpdec"
2342 rtsp_muxer_select="rtp_muxer http_protocol rtp_protocol rtpenc_chain"
2343 sap_demuxer_select="sdp_demuxer"
2344 sap_muxer_select="rtp_muxer rtp_protocol rtpenc_chain"
2345 sdp_demuxer_select="rtpdec"
2346 smoothstreaming_muxer_select="ismv_muxer"
2347 spdif_muxer_select="aac_parser"
2348 spx_muxer_select="ogg_muxer"
2349 swf_demuxer_suggest="zlib"
2350 tak_demuxer_select="tak_parser"
2351 tg2_muxer_select="mov_muxer"
2352 tgp_muxer_select="mov_muxer"
2353 w64_demuxer_select="wav_demuxer"
2354 wav_demuxer_select="riffdec"
2355 wav_muxer_select="riffenc"
2356 webm_muxer_select="iso_media riffenc"
2357 webm_muxer_suggest="libopus_encoder libvorbis_encoder libvpx_vp8_encoder libvpx_vp9_encoder"
2358 wtv_demuxer_select="mpegts_demuxer riffdec"
2359 xmv_demuxer_select="riffdec"
2360 xwma_demuxer_select="riffdec"
2363 alsa_indev_deps="alsa_asoundlib_h snd_pcm_htimestamp"
2364 alsa_outdev_deps="alsa_asoundlib_h"
2365 avfoundation_indev_deps="AVFoundation_AVFoundation_h objc_arc pthreads"
2366 avfoundation_indev_extralibs="-framework Foundation -framework AVFoundation -framework CoreVideo -framework CoreMedia"
2367 bktr_indev_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
2368 dv1394_indev_deps="dv1394"
2369 dv1394_indev_select="dv_demuxer"
2370 fbdev_indev_deps="linux_fb_h"
2371 jack_indev_deps="jack_jack_h"
2372 jack_indev_deps_any="sem_timedwait dispatch_dispatch_h"
2373 libcdio_indev_deps="libcdio"
2374 libdc1394_indev_deps="libdc1394"
2375 oss_indev_deps_any="soundcard_h sys_soundcard_h"
2376 oss_outdev_deps_any="soundcard_h sys_soundcard_h"
2377 pulse_indev_deps="libpulse"
2378 sndio_indev_deps="sndio_h"
2379 sndio_outdev_deps="sndio_h"
2380 v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h"
2381 vfwcap_indev_deps="capCreateCaptureWindow vfwcap_defines"
2382 vfwcap_indev_extralibs="-lavicap32"
2383 xcbgrab_indev_deps="libxcb"
2386 ffrtmpcrypt_protocol_deps="!librtmp_protocol"
2387 ffrtmpcrypt_protocol_deps_any="gmp openssl"
2388 ffrtmpcrypt_protocol_select="tcp_protocol"
2389 ffrtmphttp_protocol_deps="!librtmp_protocol"
2390 ffrtmphttp_protocol_select="http_protocol"
2391 gopher_protocol_select="network"
2392 http_protocol_select="tcp_protocol"
2393 httpproxy_protocol_select="tcp_protocol"
2394 https_protocol_select="tls_protocol"
2395 icecast_protocol_select="http_protocol"
2396 librtmp_protocol_deps="librtmp"
2397 librtmpe_protocol_deps="librtmp"
2398 librtmps_protocol_deps="librtmp"
2399 librtmpt_protocol_deps="librtmp"
2400 librtmpte_protocol_deps="librtmp"
2401 mmsh_protocol_select="http_protocol"
2402 mmst_protocol_select="network"
2403 rtmp_protocol_deps="!librtmp_protocol"
2404 rtmp_protocol_select="tcp_protocol"
2405 rtmpe_protocol_select="ffrtmpcrypt_protocol"
2406 rtmps_protocol_deps="!librtmp_protocol"
2407 rtmps_protocol_select="tls_protocol"
2408 rtmpt_protocol_select="ffrtmphttp_protocol"
2409 rtmpte_protocol_select="ffrtmpcrypt_protocol ffrtmphttp_protocol"
2410 rtmpts_protocol_select="ffrtmphttp_protocol https_protocol"
2411 rtp_protocol_select="udp_protocol"
2412 sctp_protocol_deps="struct_sctp_event_subscribe"
2413 sctp_protocol_select="network"
2414 srtp_protocol_select="rtp_protocol srtp"
2415 tcp_protocol_select="network"
2416 tls_gnutls_protocol_deps="gnutls"
2417 tls_gnutls_protocol_select="tcp_protocol"
2418 tls_openssl_protocol_deps="openssl !tls_gnutls_protocol"
2419 tls_openssl_protocol_select="tcp_protocol"
2420 tls_protocol_deps_any="tls_gnutls_protocol tls_openssl_protocol"
2421 udp_protocol_select="network"
2422 unix_protocol_deps="sys_un_h"
2423 unix_protocol_select="network"
2426 asyncts_filter_deps="avresample"
2427 blackframe_filter_deps="gpl"
2428 boxblur_filter_deps="gpl"
2429 bs2b_filter_deps="libbs2b"
2430 cropdetect_filter_deps="gpl"
2431 deinterlace_qsv_filter_deps="libmfx"
2432 delogo_filter_deps="gpl"
2433 drawtext_filter_deps="libfreetype"
2434 frei0r_filter_deps="frei0r dlopen"
2435 frei0r_filter_extralibs='$ldl'
2436 frei0r_src_filter_deps="frei0r dlopen"
2437 frei0r_src_filter_extralibs='$ldl'
2438 hdcd_filter_deps="libhdcd"
2439 hqdn3d_filter_deps="gpl"
2440 interlace_filter_deps="gpl"
2441 movie_filter_deps="avcodec avformat"
2442 ocv_filter_deps="libopencv"
2443 resample_filter_deps="avresample"
2444 scale_filter_deps="swscale"
2445 scale_qsv_filter_deps="libmfx"
2446 scale_vaapi_filter_deps="vaapi VAProcPipelineParameterBuffer"
2449 decode_audio_example_deps="avcodec avutil"
2450 decode_video_example_deps="avcodec avutil"
2451 encode_audio_example_deps="avcodec avutil"
2452 encode_video_example_deps="avcodec avutil"
2453 filter_audio_example_deps="avfilter avutil"
2454 metadata_example_deps="avformat avutil"
2455 output_example_deps="avcodec avformat avresample avutil swscale"
2456 qsvdec_example_deps="avcodec avutil libmfx h264_qsv_decoder"
2457 transcode_aac_example_deps="avcodec avformat avresample"
2459 # libraries, in linking order
2460 avcodec_deps="avutil"
2461 avdevice_deps="avformat avcodec avutil"
2462 avfilter_deps="avutil"
2463 avformat_deps="avcodec avutil"
2464 avresample_deps="avutil"
2465 swscale_deps="avutil"
2468 avconv_deps="avcodec avfilter avformat avresample swscale"
2469 avconv_select="aformat_filter anull_filter asyncts_filter atrim_filter format_filter
2470 fps_filter null_filter resample_filter scale_filter
2472 avplay_deps="avcodec avfilter avformat avresample sdl"
2473 avplay_libs='$sdl_libs'
2474 avplay_select="rdft format_filter transpose_filter hflip_filter vflip_filter"
2475 avprobe_deps="avcodec avformat"
2479 texi2html_deps="doc"
2481 # default parameters
2483 logfile="config.log"
2485 # installation paths
2486 prefix_default="/usr/local"
2487 bindir_default='${prefix}/bin'
2488 datadir_default='${prefix}/share/avconv'
2489 docdir_default='${prefix}/share/doc/libav'
2490 incdir_default='${prefix}/include'
2491 libdir_default='${prefix}/lib'
2492 mandir_default='${prefix}/share/man'
2493 shlibdir_default="$libdir_default"
2498 host_cc_default="gcc"
2502 pkg_config_default=pkg-config
2505 version_script='--version-script'
2509 arch_default=$(uname -m)
2514 target_os_default=$(tolower $(uname -s))
2515 host_os=$target_os_default
2517 # configurable options
2518 enable $EXAMPLE_LIST $LIBRARY_LIST $PROGRAM_LIST
2523 enable faan faandct faanidct
2524 enable optimizations
2525 enable safe_bitstream_reader
2527 enable swscale_alpha
2528 enable valgrind_backtrace
2530 # By default, enable only those hwaccels that have no external dependencies.
2531 enable d3d11va dxva2 vda vdpau
2534 SHFLAGS='-shared -Wl,-soname,$$(@F)'
2537 LIBNAME='$(LIBPREF)$(NAME)$(LIBSUF)'
2540 SLIBNAME='$(SLIBPREF)$(NAME)$(SLIBSUF)'
2541 SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
2542 SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
2543 LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
2544 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'
2545 SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR) $(SLIBNAME)'
2546 VERSION_SCRIPT_POSTPROCESS_CMD="cat"
2569 host_cflags_filter=echo
2570 host_ldflags_filter=echo
2572 target_path='$(CURDIR)'
2574 # since the object filename is not given with the -MM flag, the compiler
2575 # is only able to print the basename, and we must add the path ourselves
2576 DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o," > $(@:.o=.d)'
2580 if test -f configure; then
2583 source_path=$(cd $(dirname "$0"); pwd)
2584 echo "$source_path" | grep -q '[[:blank:]]' &&
2585 die "Out of tree builds are impossible with whitespace in source path."
2586 test -e "$source_path/config.h" &&
2587 die "Out of tree builds are impossible with config.h in source dir."
2594 LIBAV_CONFIGURATION="${LIBAV_CONFIGURATION# } ${l}${r}"
2600 file=$source_path/$3
2601 sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
2604 ENCODER_LIST=$(find_things encoder ENC libavcodec/allcodecs.c)
2605 DECODER_LIST=$(find_things decoder DEC libavcodec/allcodecs.c)
2606 HWACCEL_LIST=$(find_things hwaccel HWACCEL libavcodec/allcodecs.c)
2607 PARSER_LIST=$(find_things parser PARSER libavcodec/allcodecs.c)
2608 MUXER_LIST=$(find_things muxer _MUX libavformat/allformats.c)
2609 DEMUXER_LIST=$(find_things demuxer DEMUX libavformat/allformats.c)
2610 OUTDEV_LIST=$(find_things outdev OUTDEV libavdevice/alldevices.c)
2611 INDEV_LIST=$(find_things indev _IN libavdevice/alldevices.c)
2612 FILTER_LIST=$(find_things filter FILTER libavfilter/allfilters.c)
2614 find_things_extern(){
2617 file=$source_path/$3
2618 sed -n "s/^[^#]*extern.*$pattern *ff_\([^ ]*\)_$thing;/\1_$thing/p" "$file"
2621 BSF_LIST=$(find_things_extern bsf AVBitStreamFilter libavcodec/bitstream_filters.c)
2622 PROTOCOL_LIST=$(find_things_extern protocol URLProtocol libavformat/protocols.c)
2638 for n in $COMPONENT_LIST; do
2639 v=$(toupper ${n%s})_LIST
2641 eval ${n}_if_any="\$$v"
2644 enable $ARCH_EXT_LIST
2647 echo "Unknown option \"$1\"."
2648 echo "See $0 --help for available options."
2653 printf "%-25s %-25s %-25s\n" $(cat | tr ' ' '\n' | sort)
2659 echo $* | sed s/$suffix//g | print_3_columns
2671 is_in ${comp} $COMPONENT_LIST && eval comp=\$$(toupper ${comp%s})_LIST
2672 echo "prob ${prob:-0.5}"
2680 random_seed=$(awk "BEGIN { srand($random_seed); print srand() }")
2681 $action $(rand_list "$@" | awk "BEGIN { srand($random_seed) } \$1 == \"prob\" { prob = \$2; next } rand() < prob { print }")
2690 --extra-ldexeflags=*)
2691 add_ldexeflags $optval
2694 add_extralibs $optval
2697 disable $INDEV_LIST $OUTDEV_LIST
2700 debuglevel="$optval"
2703 disable $PROGRAM_LIST
2705 --disable-everything)
2706 map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
2709 map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
2710 disable $LIBRARY_LIST $PROGRAM_LIST doc
2712 --enable-random|--disable-random)
2713 action=${opt%%-random}
2714 do_random ${action#--} $COMPONENT_LIST
2716 --enable-random=*|--disable-random=*)
2717 action=${opt%%-random=*}
2718 do_random ${action#--} $optval
2720 --enable-*=*|--disable-*=*)
2721 eval $(echo "${opt%%=*}" | sed 's/--/action=/;s/-/ thing=/')
2722 is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt"
2723 eval list=\$$(toupper $thing)_LIST
2724 name=$(echo "${optval}" | sed "s/,/_${thing}|/g")_${thing}
2725 $action $(filter "$name" $list)
2727 --enable-avserver|--disable-avserver*)
2728 warn "avserver has been removed, the ${opt} option is only"\
2729 "provided for compatibility and will be removed in the future"
2731 --enable-?*|--disable-?*)
2732 eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
2733 if is_in $option $COMPONENT_LIST; then
2734 test $action = disable && action=unset
2735 eval $action \$$(toupper ${option%s})_LIST
2736 elif is_in $option $CMDLINE_SELECT; then
2743 NAME="${opt#--list-}"
2744 is_in $NAME $COMPONENT_LIST || die_unknown $opt
2746 eval show_list $NAME \$$(toupper $NAME)_LIST
2748 --help|-h) show_help
2750 --quiet|-q) quiet=yes
2753 optname="${opt%%=*}"
2754 optname="${optname#--}"
2755 optname=$(echo "$optname" | sed 's/-/_/g')
2756 if is_in $optname $CMDLINE_SET; then
2757 eval $optname='$optval'
2758 elif is_in $optname $CMDLINE_APPEND; then
2759 append $optname "$optval"
2771 disabled logging && logfile=/dev/null
2773 # Die early if licensing-related configure options are incompatible.
2774 die_license_disabled() {
2775 enabled $1 || { enabled $v && die "$v is $1 and --enable-$1 is not specified."; }
2778 map "die_license_disabled gpl" $EXTERNAL_LIBRARY_GPL_LIST
2779 map "die_license_disabled nonfree" $EXTERNAL_LIBRARY_NONFREE_LIST $HWACCEL_LIBRARY_NONFREE_LIST
2780 map "die_license_disabled version3" $EXTERNAL_LIBRARY_VERSION3_LIST
2782 enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
2784 # Disable all the library-specific components if the library itself
2785 # is disabled, see AVCODEC_LIST and following _LIST variables.
2787 disable_components(){
2788 disabled ${1} && disable $(
2789 eval components="\$$(toupper ${1})_COMPONENTS"
2790 map 'eval echo \${$(toupper ${v%s})_LIST}' $components
2794 map 'disable_components $v' $LIBRARY_LIST
2796 echo "# $0 $LIBAV_CONFIGURATION" > $logfile
2799 case "$toolchain" in
2801 cc_default="${toolchain%-asan}"
2802 add_cflags -fsanitize=address
2803 add_ldflags -fsanitize=address
2806 cc_default="${toolchain%-msan}"
2807 add_cflags -fsanitize=memory -fsanitize-memory-track-origins
2808 add_ldflags -fsanitize=memory
2811 cc_default="${toolchain%-tsan}"
2812 add_cflags -fsanitize=thread -pie
2813 add_ldflags -fsanitize=thread -pie
2814 case "$toolchain" in
2822 cc_default="${toolchain%-usan}"
2823 add_cflags -fsanitize=undefined
2824 add_ldflags -fsanitize=undefined
2825 case "$toolchain" in
2832 target_exec_default="valgrind"
2833 case "$toolchain" in
2835 target_exec_args="--alloc-fn=av_malloc --alloc-fn=av_mallocz"
2838 target_exec_args="--track-origins=yes --leak-check=full"
2843 # Check whether the current MSVC version needs the C99 converter.
2844 # From MSVC 2013 (compiler major version 18) onwards, it does actually
2845 # support enough of C99 to build libav. Default to the new
2846 # behaviour if the regexp was unable to match anything, since this
2847 # successfully parses the version number of existing supported
2848 # versions that require the converter (MSVC 2010 and 2012).
2849 cl_major_ver=$(cl 2>&1 | sed -n 's/.*Version \([[:digit:]]\{1,\}\)\..*/\1/p')
2850 if [ -z "$cl_major_ver" ] || [ $cl_major_ver -ge 18 ]; then
2853 cc_default="c99wrap cl"
2855 ld_default="$source_path/compat/windows/mslink"
2856 nm_default="dumpbin -symbols"
2863 target_os_default="win32"
2864 # Use a relative path for TMPDIR. This makes sure all the
2865 # ffconf temp files are written with a relative path, avoiding
2866 # issues with msys/win32 path conversion for MSVC parameters
2867 # such as -Fo<file> or -out:<file>.
2873 nm_default="dumpbin -symbols"
2875 target_os_default="win32"
2879 add_cflags -fprofile-arcs -ftest-coverage
2880 add_ldflags -fprofile-arcs -ftest-coverage
2883 add_cflags -fprofile-arcs -ftest-coverage
2884 add_ldflags --coverage
2887 add_cppflags -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2
2888 add_cflags -fno-strict-overflow -fstack-protector-all
2889 add_ldflags -Wl,-z,relro -Wl,-z,now
2892 die "Unknown toolchain $toolchain"
2896 test -n "$cross_prefix" && enable cross_compile
2898 if enabled cross_compile; then
2899 test -n "$arch" && test -n "$target_os" ||
2900 die "Must specify target arch (--arch) and OS (--target-os) when cross-compiling"
2903 ar_default="${cross_prefix}${ar_default}"
2904 cc_default="${cross_prefix}${cc_default}"
2905 occ_default="${cross_prefix}${occ_default}"
2906 nm_default="${cross_prefix}${nm_default}"
2907 pkg_config_default="${cross_prefix}${pkg_config_default}"
2908 ranlib="${cross_prefix}${ranlib}"
2909 strip="${cross_prefix}${strip}"
2911 sysinclude_default="${sysroot}/usr/include"
2913 set_default arch cc pkg_config sysinclude target_exec target_os
2914 enabled cross_compile || host_cc_default=$cc
2917 if ! $pkg_config --version >/dev/null 2>&1; then
2918 warn "$pkg_config not found, library detection may fail."
2924 mingw32*|mingw64*|win32|win64|cygwin*|*-dos|freedos|opendos|os/2*|symbian) echo .exe ;;
2928 EXESUF=$(exesuf $target_os)
2929 HOSTEXESUF=$(exesuf $host_os)
2931 # set temporary file name
2932 : ${TMPDIR:=$TEMPDIR}
2936 if ! check_cmd mktemp -u XXXXXX; then
2937 # simple replacement for missing mktemp
2938 # NOT SAFE FOR GENERAL USE
2940 echo "${2%%XXX*}.${HOSTNAME}.${UID}.$$"
2945 tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
2946 (set -C; exec > $tmp) 2>/dev/null ||
2947 die "Unable to create temporary file in $TMPDIR."
2948 append TMPFILES $tmp
2952 trap 'rm -f -- $TMPFILES' EXIT
2956 tmpfile TMPE $EXESUF
2967 # make sure we can execute files in $TMPDIR
2968 cat > $TMPSH 2>> $logfile <<EOF
2971 chmod +x $TMPSH >> $logfile 2>&1
2972 if ! $TMPSH >> $logfile 2>&1; then
2974 Unable to create and execute files in $TMPDIR. Set the TMPDIR environment
2975 variable to another directory and make sure that it is not mounted noexec.
2977 die "Sanity test failed."
2983 # Filter out MSVC cl.exe options from cflags that shouldn't
2984 # be passed to gas-preprocessor
2994 -std=c99) echo -c99 ;;
2995 -mcpu=*) echo -arch ${flag#*=} ;;
2996 -mieee) echo -ieee ;;
2997 -O*|-fast) echo $flag ;;
2998 -fno-math-errno) echo -assume nomath_errno ;;
3000 -Wall) echo -msg_enable level2 ;;
3001 -Wno-pointer-sign) echo -msg_disable ptrmismatch1 ;;
3002 -Wl,*) echo $flag ;;
3012 -Wno-switch) echo -Wno-switch-enum ;;
3013 -Wno-format-zero-length) ;;
3014 -Wdisabled-optimization) ;;
3015 -Wno-pointer-sign) echo -Wno-other ;;
3021 msvc_common_flags(){
3024 # In addition to specifying certain flags under the compiler
3025 # specific filters, they must be specified here as well or else the
3026 # generic catch all at the bottom will print the original flag.
3030 -fomit-frame-pointer) ;;
3034 -fno-signed-zeros) ;;
3038 -lz) echo zlib.lib ;;
3039 -lavicap32) echo vfw32.lib user32.lib ;;
3040 -lx264) echo libx264.lib ;;
3041 -l*) echo ${flag#-l}.lib ;;
3042 -L*) echo -libpath:${flag#-L} ;;
3049 msvc_common_flags "$@"
3052 -Wall) echo -W4 -wd4244 -wd4127 -wd4018 -wd4389 \
3053 -wd4146 -wd4057 -wd4204 -wd4706 -wd4305 \
3054 -wd4152 -wd4324 -we4013 -wd4100 -wd4214 \
3055 -wd4273 -wd4554 -wd4701 -wd4703 ;;
3061 msvc_common_flags "$@"
3064 # Despite what Intel's documentation says -Wall, which is supported
3065 # on Windows, does enable remarks so disable them here.
3066 -Wall) echo $flag -Qdiag-disable:remark ;;
3067 -std=c99) echo -Qstd=c99 ;;
3075 -flto) echo -Mipa=fast,libopt,libinline,vestigial ;;
3076 -fomit-frame-pointer) echo -Mnoframe ;;
3087 case "${flag#*=}" in
3088 native) echo -xtarget=native ;;
3089 v9|niagara) echo -xarch=sparc ;;
3090 ultrasparc) echo -xarch=sparcvis ;;
3091 ultrasparc3|niagara2) echo -xarch=sparcvis2 ;;
3092 i586|pentium) echo -xchip=pentium ;;
3093 i686|pentiumpro|pentium2) echo -xtarget=pentium_pro ;;
3094 pentium3*|c3-2) echo -xtarget=pentium3 ;;
3095 pentium-m) echo -xarch=sse2 -xchip=pentium3 ;;
3096 pentium4*) echo -xtarget=pentium4 ;;
3097 prescott|nocona) echo -xarch=sse3 -xchip=pentium4 ;;
3098 *-sse3) echo -xarch=sse3 ;;
3099 core2) echo -xarch=ssse3 -xchip=core2 ;;
3100 corei7) echo -xarch=sse4_2 -xchip=nehalem ;;
3101 corei7-avx) echo -xarch=avx -xchip=sandybridge ;;
3102 amdfam10|barcelona|bdver*) echo -xarch=sse4_1 ;;
3103 athlon-4|athlon-[mx]p) echo -xarch=ssea ;;
3104 k8|opteron|athlon64|athlon-fx)
3105 echo -xarch=sse2a ;;
3106 athlon*) echo -xarch=pentium_proa ;;
3109 -std=c99) echo -xc99 ;;
3110 -fomit-frame-pointer) echo -xregs=frameptr ;;
3111 -fPIC) echo -KPIC -xcode=pic32 ;;
3112 -W*,*) echo $flag ;;
3113 -f*-*|-W*|-mimpure-text) ;;
3124 case "${flag#*=}" in
3125 armv7-a|cortex-a*) echo -mv=7a8 ;;
3126 armv7-r|cortex-r*) echo -mv=7r4 ;;
3127 armv7-m|cortex-m*) echo -mv=7m3 ;;
3128 armv6*|arm11*) echo -mv=6 ;;
3129 armv5*e|arm[79]*e*|arm9[24]6*|arm96*|arm102[26])
3131 armv4*|arm7*|arm9[24]*) echo -mv=4 ;;
3134 -mfpu=neon) echo --float_support=vfpv3 --neon ;;
3135 -mfpu=vfp) echo --float_support=vfpv2 ;;
3136 -mfpu=vfpv3) echo --float_support=vfpv3 ;;
3137 -mfpu=vfpv3-d16) echo --float_support=vfpv3d16 ;;
3138 -msoft-float) echo --float_support=vfplib ;;
3139 -O[0-3]|-mf=*) echo $flag ;;
3141 -pds=*) echo $flag ;;
3142 -D*|-I*) echo $flag ;;
3143 --gcc|--abi=*) echo $flag ;;
3153 unset _type _ident _cc_c _cc_e _cc_o _flags _cflags
3154 unset _ld_o _ldflags _ld_lib _ld_path
3155 unset _depflags _DEPCMD _DEPFLAGS
3158 if $_cc -v 2>&1 | grep -q '^gcc.*LLVM'; then
3160 gcc_extra_ver=$(expr "$($_cc --version 2>/dev/null | head -n1)" : '.*\((.*)\)')
3161 _ident="llvm-gcc $($_cc -dumpversion 2>/dev/null) $gcc_extra_ver"
3162 _depflags='-MMD -MF $(@:.o=.d) -MT $@'
3165 elif $_cc -v 2>&1 | grep -qi ^gcc; then
3167 gcc_version=$($_cc --version | head -n1)
3168 gcc_basever=$($_cc -dumpversion)
3169 gcc_pkg_ver=$(expr "$gcc_version" : '[^ ]* \(([^)]*)\)')
3170 gcc_ext_ver=$(expr "$gcc_version" : ".*$gcc_pkg_ver $gcc_basever \\(.*\\)")
3171 _ident=$(cleanws "gcc $gcc_basever $gcc_pkg_ver $gcc_ext_ver")
3172 if ! $_cc -dumpversion | grep -q '^2\.'; then
3173 _depflags='-MMD -MF $(@:.o=.d) -MT $@'
3177 elif $_cc --version 2>/dev/null | grep -q ^icc; then
3179 _ident=$($_cc --version | head -n1)
3184 elif $_cc -v 2>&1 | grep -q xlc; then
3186 _ident=$($_cc -qversion 2>/dev/null | head -n1)
3188 _cflags_size='-O5 -qcompact'
3189 elif $_cc -V 2>/dev/null | grep -q Compaq; then
3191 _ident=$($_cc -V | head -n1 | cut -d' ' -f1-3)
3193 _cflags_speed='-fast'
3195 _flags_filter=ccc_flags
3196 elif $_cc --vsn 2>/dev/null | grep -Eq "ARM (C/C\+\+ )?Compiler"; then
3197 test -d "$sysroot" || die "No valid sysroot specified."
3199 _ident=$($_cc --vsn | grep -i build | head -n1 | sed 's/.*: //')
3200 armcc_conf="$PWD/armcc.conf"
3201 $_cc --arm_linux_configure \
3202 --arm_linux_config_file="$armcc_conf" \
3203 --configure_sysroot="$sysroot" \
3204 --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
3205 die "Error creating armcc configuration file."
3206 $_cc --vsn | grep -q RVCT && armcc_opt=rvct || armcc_opt=armcc
3207 _flags="--arm_linux_config_file=$armcc_conf --translate_gcc"
3208 as_default="${cross_prefix}gcc"
3212 elif $_cc -version 2>/dev/null | grep -Eq 'TMS470|TI ARM'; then
3214 _ident=$($_cc -version | head -n1 | tr -s ' ')
3215 _flags='--gcc --abi=eabi -me'
3218 _depflags='-ppa -ppd=$(@:.o=.d)'
3219 _cflags_speed='-O3 -mf=5'
3220 _cflags_size='-O3 -mf=2'
3221 _flags_filter=tms470_flags
3222 elif $_cc -v 2>&1 | grep -q clang; then
3224 _ident=$($_cc --version 2>/dev/null | head -n1)
3225 _depflags='-MMD -MF $(@:.o=.d) -MT $@'
3228 elif $_cc -V 2>&1 | grep -q Sun; then
3230 _ident=$($_cc -V 2>&1 | head -n1 | cut -d' ' -f 2-)
3231 _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "1s,^.*: ,$@: ," -e "\$$!s,\$$, \\\," -e "1!s,^.*: , ," > $(@:.o=.d)'
3232 _DEPFLAGS='-xM1 -xc99'
3235 _cflags_size='-O5 -xspace'
3236 _flags_filter=suncc_flags
3237 elif $_cc -v 2>&1 | grep -q 'PathScale\|Path64'; then
3239 _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
3240 _depflags='-MMD -MF $(@:.o=.d) -MT $@'
3243 _flags_filter='filter_out -Wdisabled-optimization'
3244 elif $_cc -v 2>&1 | grep -q Open64; then
3246 _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
3247 _depflags='-MMD -MF $(@:.o=.d) -MT $@'
3250 _flags_filter='filter_out -Wdisabled-optimization|-Wtype-limits|-fno-signed-zeros'
3251 elif $_cc -V 2>&1 | grep -q Portland; then
3253 _ident="PGI $($_cc -V 2>&1 | awk '/^pgcc/ { print $2; exit }')"
3254 opt_common='-alias=ansi -Mdse -Mlre -Mpre'
3255 _cflags_speed="-O3 -Mautoinline -Munroll=c:4 $opt_common"
3256 _cflags_size="-O2 -Munroll=c:1 $opt_common"
3258 _flags_filter=pgi_flags
3259 elif $_cc 2>&1 | grep -q 'Microsoft.*ARM.*Assembler'; then
3261 _ident=$($_cc | head -n1)
3262 # 4509: "This form of conditional instruction is deprecated"
3263 _flags="-nologo -ignore 4509"
3264 _flags_filter=armasm_flags
3265 elif $_cc -nologo- 2>&1 | grep -q Microsoft; then
3267 _ident=$($_cc 2>&1 | head -n1)
3268 _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< 2>&1 | awk '\''/including/ { sub(/^.*file: */, ""); gsub(/\\/, "/"); if (!match($$0, / /)) print "$@:", $$0 }'\'' > $(@:.o=.d)'
3269 _DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -showIncludes -Zs'
3272 if $_cc -nologo- 2>&1 | grep -q Linker; then
3279 _flags_filter=msvc_flags
3281 _ld_path='-libpath:'
3283 elif $_cc 2>&1 | grep -q Intel; then
3285 _ident=$($_cc 2>&1 | head -n1)
3286 _depflags='-QMMD -QMF$(@:.o=.d) -QMT$@'
3287 # Not only is O3 broken on 13.x+ but it is slower on all previous
3288 # versions (tested) as well.
3290 _cflags_size="-O1 -Oi" # -O1 without -Oi miscompiles stuff
3291 if $_cc 2>&1 | grep -q Linker; then
3298 _flags_filter=icl_flags
3300 _ld_path='-libpath:'
3301 # -Qdiag-error to make icl error when seeing certain unknown arguments
3302 _flags='-nologo -Qdiag-error:4044,10157'
3303 # -Qvec- -Qsimd- to prevent miscompilation, -GS for consistency
3304 # with MSVC which enables it by default.
3305 _cflags='-Qms0 -Qvec- -Qsimd- -GS'
3306 elif $_cc -? 2>/dev/null | grep -q 'LLVM.*Linker'; then
3307 # lld can emulate multiple different linkers; in ms link.exe mode,
3308 # the -? parameter gives the help output which contains an identifyable
3309 # string, while it gives an error in other modes.
3311 # The link.exe mode doesn't have a switch for getting the version,
3312 # but we can force it back to gnu mode and get the version from there.
3313 _ident=$($_cc -flavor gnu --version 2>/dev/null)
3315 _flags_filter=msvc_flags
3317 _ld_path='-libpath:'
3318 elif $_cc --version 2>/dev/null | grep -q ^cparser; then
3320 _ident=$($_cc --version | head -n1)
3324 _flags_filter=cparser_flags
3327 eval ${pfx}_type=\$_type
3328 eval ${pfx}_ident=\$_ident
3332 eval ${1}_C=\${_cc_c-\${${1}_C}}
3333 eval ${1}_E=\${_cc_e-\${${1}_E}}
3334 eval ${1}_O=\${_cc_o-\${${1}_O}}
3336 if [ -n "$_depflags" ]; then
3337 eval ${1}_DEPFLAGS=\$_depflags
3339 eval ${1}DEP=\${_DEPCMD:-\$DEPCMD}
3340 eval ${1}DEP_FLAGS=\${_DEPFLAGS:-\$DEPFLAGS}
3341 eval DEP${1}FLAGS=\$_flags
3346 cflags_filter=$_flags_filter
3347 cflags_speed=$_cflags_speed
3348 cflags_size=$_cflags_size
3349 cflags_noopt=$_cflags_noopt
3350 add_cflags $_flags $_cflags
3351 cc_ldflags=$_ldflags
3354 probe_cc hostcc "$host_cc"
3355 host_cflags_filter=$_flags_filter
3356 add_host_cflags $_flags $_cflags
3359 test -n "$cc_type" && enable $cc_type ||
3360 warn "Unknown C compiler $cc, unable to select optimal CFLAGS"
3362 : ${as_default:=$cc}
3363 : ${objcc_default:=$cc}
3364 : ${dep_cc_default:=$cc}
3365 : ${ld_default:=$cc}
3366 : ${host_ld_default:=$host_cc}
3367 set_default ar as objcc dep_cc ld host_ld
3370 asflags_filter=$_flags_filter
3371 add_asflags $_flags $_cflags
3374 probe_cc objcc "$objcc"
3375 objcflags_filter=$_flags_filter
3376 add_objcflags $_flags $_cflags
3380 ldflags_filter=$_flags_filter
3381 add_ldflags $_flags $_ldflags
3382 test "$cc_type" != "$ld_type" && add_ldflags $cc_ldflags
3384 LD_LIB=${_ld_lib-$LD_LIB}
3385 LD_PATH=${_ld_path-$LD_PATH}
3387 probe_cc hostld "$host_ld"
3388 host_ldflags_filter=$_flags_filter
3389 add_host_ldflags $_flags $_ldflags
3390 HOSTLD_O=${_ld_o-$HOSTLD_O}
3392 if [ -z "$CC_DEPFLAGS" ] && [ "$dep_cc" != "$cc" ]; then
3393 probe_cc depcc "$dep_cc"
3394 CCDEP=${_DEPCMD:-$DEPCMD}
3395 CCDEP_FLAGS=${_DEPFLAGS:=$DEPFLAGS}
3399 if $ar 2>&1 | grep -q Microsoft; then
3402 elif $ar 2>&1 | grep -q 'Texas Instruments'; then
3405 elif $ar 2>&1 | grep -q 'Usage: ar.*-X.*any'; then
3406 arflags='-Xany -r -c'
3413 add_cflags $extra_cflags
3414 add_objcflags $extra_objcflags
3415 add_asflags $extra_cflags
3417 if test -n "$sysroot"; then
3420 add_cppflags --sysroot="$sysroot"
3421 add_ldflags --sysroot="$sysroot"
3424 add_cppflags -I"$sysinclude"
3425 add_ldflags --sysroot="$sysroot"
3430 if test "$cpu" = host; then
3431 enabled cross_compile &&
3432 die "--cpu=host makes no sense when cross-compiling."
3437 $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
3439 s/.*$1=\\([^ ]*\\).*/\\1/
3444 cpu=$(check_native -march || check_native -mcpu)
3448 test "${cpu:-host}" = host &&
3449 die "--cpu=host not supported with compiler $cc"
3452 # Deal with common $arch aliases
3476 "Power Macintosh"|ppc*|powerpc*)
3491 i[3-6]86|i86pc|BePC|x86pc|x86_64|amd64)
3496 is_in $arch $ARCH_LIST || warn "unknown architecture $arch"
3499 # Add processor-specific flags
3500 if enabled aarch64; then
3504 cpuflags="-march=$cpu"
3507 cpuflags="-mcpu=$cpu"
3511 elif enabled alpha; then
3513 cpuflags="-mcpu=$cpu"
3515 elif enabled arm; then
3518 check_cpp_condition stddef.h \
3519 "defined __ARM_ARCH_${1}__ || defined __TARGET_ARCH_${2:-$1}" \
3524 if check_arm_arch 4; then echo armv4
3525 elif check_arm_arch 4T; then echo armv4t
3526 elif check_arm_arch 5; then echo armv5
3527 elif check_arm_arch 5E; then echo armv5e
3528 elif check_arm_arch 5T; then echo armv5t
3529 elif check_arm_arch 5TE; then echo armv5te
3530 elif check_arm_arch 5TEJ; then echo armv5te
3531 elif check_arm_arch 6; then echo armv6
3532 elif check_arm_arch 6J; then echo armv6j
3533 elif check_arm_arch 6K; then echo armv6k
3534 elif check_arm_arch 6Z; then echo armv6z
3535 elif check_arm_arch 6ZK; then echo armv6zk
3536 elif check_arm_arch 6T2; then echo armv6t2
3537 elif check_arm_arch 7; then echo armv7
3538 elif check_arm_arch 7A 7_A; then echo armv7-a
3539 elif check_arm_arch 7S; then echo armv7-a
3540 elif check_arm_arch 7R 7_R; then echo armv7-r
3541 elif check_arm_arch 7M 7_M; then echo armv7-m
3542 elif check_arm_arch 7EM 7E_M; then echo armv7-m
3543 elif check_arm_arch 8A 8_A; then echo armv8-a
3547 [ "$cpu" = generic ] && cpu=$(probe_arm_arch)
3551 cpuflags="-march=$cpu"
3552 subarch=$(echo $cpu | sed 's/[^a-z0-9]//g')
3555 cpuflags="-mcpu=$cpu"
3557 cortex-a*) subarch=armv7a ;;
3558 cortex-r*) subarch=armv7r ;;
3559 cortex-m*) enable thumb; subarch=armv7m ;;
3560 arm11*) subarch=armv6 ;;
3561 arm[79]*e*|arm9[24]6*|arm96*|arm102[26]) subarch=armv5te ;;
3562 armv4*|arm7*|arm9[24]*) subarch=armv4 ;;
3563 *) subarch=$(probe_arm_arch) ;;
3569 armv5t*) enable fast_clz ;;
3570 armv[6-8]*) enable fast_clz fast_unaligned ;;
3573 elif enabled avr32; then
3578 cpuflags="-mpart=$cpu"
3582 cpuflags="-march=$cpu"
3586 cpuflags="-mcpu=$cpu"
3590 cpuflags="-march=$cpu"
3594 elif enabled bfin; then
3596 cpuflags="-mcpu=$cpu"
3598 elif enabled mips; then
3600 cpuflags="-march=$cpu"
3602 elif enabled ppc; then
3606 case $(tolower $cpu) in
3607 601|ppc601|powerpc601)
3608 cpuflags="-mcpu=601"
3611 603*|ppc603*|powerpc603*)
3612 cpuflags="-mcpu=603"
3615 604*|ppc604*|powerpc604*)
3616 cpuflags="-mcpu=604"
3619 g3|75*|ppc75*|powerpc75*)
3620 cpuflags="-mcpu=750"
3623 g4|745*|ppc745*|powerpc745*)
3624 cpuflags="-mcpu=7450"
3627 74*|ppc74*|powerpc74*)
3628 cpuflags="-mcpu=7400"
3631 g5|970|ppc970|powerpc970)
3632 cpuflags="-mcpu=970"
3636 cpuflags="-mcpu=$cpu"
3640 cpuflags="-mcpu=$cpu"
3644 cpuflags="-mcpu=cell"
3649 cpuflags="-mcpu=e500mc"
3653 cpuflags="-mcpu=8548 -mhard-float -mfloat-gprs=double"
3658 cpuflags="-mcpu=8540 -mhard-float"
3664 elif enabled sparc; then
3667 cypress|f93[04]|tsc701|sparcl*|supersparc|hypersparc|niagara|v[789])
3668 cpuflags="-mcpu=$cpu"
3670 ultrasparc*|niagara[234])
3671 cpuflags="-mcpu=$cpu"
3675 elif enabled x86; then
3679 cpuflags="-march=$cpu"
3683 # targets that do NOT support nopl and conditional mov (cmov)
3684 pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
3685 cpuflags="-march=$cpu"
3688 # targets that do support nopl and conditional mov (cmov)
3689 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*)
3690 cpuflags="-march=$cpu"
3694 # targets that do support conditional mov but on which it's slow
3695 pentium4|pentium4m|prescott|nocona)
3696 cpuflags="-march=$cpu"
3704 if [ "$cpu" != generic ]; then
3705 add_cflags $cpuflags
3706 add_asflags $cpuflags
3707 test "$cc_type" = "$ld_type" && add_ldflags $cpuflags
3710 # compiler sanity check
3712 int main(void){ return 0; }
3714 if test "$?" != 0; then
3715 echo "$cc is unable to create an executable file."
3716 if test -z "$cross_prefix" && ! enabled cross_compile ; then
3717 echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
3718 echo "Only do this if you know what cross compiling means."
3720 die "C compiler test failed."
3723 add_cppflags -D_ISOC99_SOURCE
3725 # some compilers silently accept -std=c11, so we also need to check that the
3726 # version macro is defined properly
3727 if test_cflags_cpp -std=c11 "__STDC_VERSION__ >= 201112L"; then
3730 check_cflags -std=c99
3733 check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
3736 check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
3740 add_host_cppflags -D_ISOC99_SOURCE
3741 check_host_cflags -std=c99
3742 check_host_cflags -Wall
3743 check_host_cflags -O3
3749 check_code cc "" "int test[2*($expr) - 1]" &&
3750 subarch=$arch64 || subarch=$arch32
3758 check_64bit mips mips64 '_MIPS_SIM > 1'
3762 check_64bit parisc parisc64 'sizeof(void *) > 4'
3766 check_64bit ppc ppc64 'sizeof(void *) > 4'
3770 check_64bit s390 s390x 'sizeof(void *) > 4'
3774 check_64bit sparc sparc64 'sizeof(void *) > 4'
3778 check_64bit x86_32 x86_64 'sizeof(void *) > 4'
3779 if test "$subarch" = "x86_64"; then
3786 enabled spic && enable_weak pic
3792 add_cppflags '-I\$(SRC_PATH)/compat/aix'
3793 enabled shared && add_ldflags -Wl,-brtl
3797 enable section_data_rel_ro
3798 SLIB_INSTALL_NAME='$(SLIBNAME)'
3800 SHFLAGS='-shared -Wl,-soname,$(SLIBNAME)'
3803 prefix_default="/boot/common"
3804 network_extralibs="-lnetwork"
3808 SHFLAGS='-shared -Wl,-h,$$(@F)'
3809 enabled x86 && SHFLAGS="-mimpure-text $SHFLAGS"
3810 network_extralibs="-lsocket -lnsl"
3811 # When using suncc to build, the Solaris linker will mark
3812 # an executable with each instruction set encountered by
3813 # the Solaris assembler. As our libraries contain their own
3814 # guards for processor-specific code, instead suppress
3815 # generation of the HWCAPS ELF section on Solaris x86 only.
3816 enabled_all suncc x86 &&
3817 echo "hwcap_1 = OVERRIDE;" > mapfile &&
3818 add_ldflags -Wl,-M,mapfile
3819 nm_default='nm -P -g'
3821 VERSION_SCRIPT_POSTPROCESS_CMD='perl $(SRC_PATH)/compat/solaris/make_sunver.pl - $(OBJS)'
3825 oss_indev_extralibs="-lossaudio"
3826 oss_outdev_extralibs="-lossaudio"
3831 SLIB_INSTALL_NAME='$(SLIBNAME).$(LIBMAJOR).$(LIBMINOR)'
3833 oss_indev_extralibs="-lossaudio"
3834 oss_outdev_extralibs="-lossaudio"
3842 add_extralibs -lpoll -lgnugetopt
3845 enabled ppc && add_asflags -force_cpusubtype_ALL
3846 SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR)'
3847 enabled x86_32 && append SHFLAGS -Wl,-read_only_relocs,suppress
3848 add_ldflags -Wl,-dynamic,-search_paths_first
3850 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME).$(LIBVERSION)$(SLIBSUF)'
3851 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(NAME).$(LIBMAJOR)$(SLIBSUF)'
3853 enabled x86_64 && objformat="macho64"
3854 enabled_any pic shared ||
3855 { check_cflags -mdynamic-no-pic && add_asflags -mdynamic-no-pic; }
3856 check_header dispatch/dispatch.h &&
3857 add_cppflags '-I\$(SRC_PATH)/compat/dispatch_semaphore'
3860 die "Native MSYS builds are discouraged, please use the MINGW environment."
3863 if test $target_os = "mingw32ce"; then
3869 if enabled x86_64; then
3870 LIBTARGET="i386:x86-64"
3871 elif enabled arm; then
3874 check_ldflags -Wl,--nxcompat
3875 check_ldflags -Wl,--dynamicbase
3876 shlibdir_default="$bindir_default"
3879 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
3880 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(NAME)-$(LIBMAJOR)$(SLIBSUF)'
3881 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)'
3882 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
3884 SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
3885 SLIB_INSTALL_EXTRA_LIB='lib$(SLIBNAME:$(SLIBSUF)=.dll.a) $(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
3886 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'
3888 dlltool="${cross_prefix}dlltool"
3894 if enabled shared; then
3895 # Link to the import library instead of the normal static library
3898 # Cannot build both shared and static libs with MSVC or icl.
3901 shlibdir_default="$bindir_default"
3904 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
3905 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(NAME)-$(LIBMAJOR)$(SLIBSUF)'
3906 SLIB_CREATE_DEF_CMD='$(SRC_PATH)/compat/windows/makedef $(SUBDIR)lib$(NAME).ver $(OBJS) > $$(@:$(SLIBSUF)=.def)'
3907 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
3909 SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
3910 SLIB_INSTALL_EXTRA_LIB='$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
3911 SHFLAGS='-dll -def:$$(@:$(SLIBSUF)=.def) -implib:$(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib)'
3918 shlibdir_default="$bindir_default"
3921 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
3922 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(NAME)-$(LIBMAJOR)$(SLIBSUF)'
3923 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
3925 SLIB_INSTALL_EXTRA_LIB='lib$(NAME).dll.a'
3926 SHFLAGS='-shared -Wl,--out-implib,$(SUBDIR)lib$(NAME).dll.a'
3930 *-dos|freedos|opendos)
3931 network_extralibs="-lsocket"
3934 add_cppflags -U__STRICT_ANSI__
3938 enable section_data_rel_ro
3942 ranlib="echo ignoring ranlib"
3947 add_cppflags -D_GNU_SOURCE
3948 add_ldflags -Zomf -Zbin-files -Zargs-wild -Zmap
3949 SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
3953 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
3954 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
3955 SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
3956 echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
3957 echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
3958 echo EXPORTS >> $(SUBDIR)$(NAME).def; \
3959 emxexp $(OBJS) >> $(SUBDIR)$(NAME).def'
3960 SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
3961 emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
3962 SLIB_INSTALL_EXTRA_LIB='$(LIBPREF)$(NAME)_dll.a $(LIBPREF)$(NAME)_dll.lib'
3966 add_cppflags -D_BSD_SOURCE
3971 add_cppflags -D_QNX_SOURCE
3972 network_extralibs="-lsocket"
3977 add_cflags --include=$sysinclude/gcce/gcce.h -fvisibility=default
3978 add_cppflags -D__GCCE__ -D__SYMBIAN32__ -DSYMBIAN_OE_POSIX_SIGNALS
3979 add_ldflags -Wl,--target1-abs,--no-undefined \
3980 -Wl,-Ttext,0x80000,-Tdata,0x1000000 -shared \
3981 -Wl,--entry=_E32Startup -Wl,-u,_E32Startup
3982 add_extralibs -l:eexe.lib -l:usrt2_2.lib -l:dfpaeabi.dso \
3983 -l:drtaeabi.dso -l:scppnwdl.dso -lsupc++ -lgcc \
3984 -l:libc.dso -l:libm.dso -l:euser.dso -l:libcrt0.lib
3987 add_cppflags -D_OSF_SOURCE -D_POSIX_PII -D_REENTRANT
3994 die "Unknown OS '$target_os'."
3998 # determine libc flavour
4003 # uclibc defines __GLIBC__, so it needs to be checked before glibc.
4004 if check_${pfx}cpp_condition features.h "defined __UCLIBC__"; then
4005 eval ${pfx}libc_type=uclibc
4006 add_${pfx}cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
4007 elif check_${pfx}cpp_condition features.h "defined __GLIBC__"; then
4008 eval ${pfx}libc_type=glibc
4009 add_${pfx}cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
4010 # MinGW headers can be installed on Cygwin, so check for newlib first.
4011 elif check_${pfx}cpp_condition newlib.h "defined _NEWLIB_VERSION"; then
4012 eval ${pfx}libc_type=newlib
4013 add_${pfx}cppflags -U__STRICT_ANSI__
4014 # MinGW64 is backwards compatible with MinGW32, so check for it first.
4015 elif check_${pfx}cpp_condition _mingw.h "defined __MINGW64_VERSION_MAJOR"; then
4016 eval ${pfx}libc_type=mingw64
4017 add_${pfx}cppflags -U__STRICT_ANSI__ -D__USE_MINGW_ANSI_STDIO=1
4018 eval test \$${pfx_no_}cc_type = "gcc" &&
4019 add_${pfx}cppflags -D__printf__=__gnu_printf__
4020 elif check_${pfx}cpp_condition _mingw.h "defined __MINGW_VERSION" ||
4021 check_${pfx}cpp_condition _mingw.h "defined __MINGW32_VERSION"; then
4022 eval ${pfx}libc_type=mingw32
4023 check_${pfx}cpp_condition _mingw.h "__MINGW32_MAJOR_VERSION > 3 || \
4024 (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
4025 die "ERROR: MinGW32 runtime version must be >= 3.15."
4026 add_${pfx}cppflags -U__STRICT_ANSI__ -D__USE_MINGW_ANSI_STDIO=1
4027 check_${pfx}cpp_condition _mingw.h "__MSVCRT_VERSION__ < 0x0700__" &&
4028 add_${pfx}cppflags -D__MSVCRT_VERSION__=0x0700
4029 eval test \$${pfx_no_}cc_type = "gcc" &&
4030 add_${pfx}cppflags -D__printf__=__gnu_printf__
4031 elif check_${pfx}cpp_condition crtversion.h "defined _VC_CRT_MAJOR_VERSION"; then
4032 eval ${pfx}libc_type=msvcrt
4033 if check_${pfx}cpp_condition crtversion.h "_VC_CRT_MAJOR_VERSION < 14"; then
4034 if [ "$pfx" = host_ ]; then
4035 add_host_cppflags -Dsnprintf=_snprintf
4037 add_compat strtod.o strtod=avpriv_strtod
4038 add_compat msvcrt/snprintf.o snprintf=avpriv_snprintf \
4039 _snprintf=avpriv_snprintf \
4040 vsnprintf=avpriv_vsnprintf
4043 add_${pfx}cppflags -D_USE_MATH_DEFINES -D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_WARNINGS
4044 # The MSVC 2010 headers (Win 7.0 SDK) set _WIN32_WINNT to
4045 # 0x601 by default unless something else is set by the user.
4046 # This can easily lead to us detecting functions only present
4047 # in such new versions and producing binaries requiring windows 7.0.
4048 # Therefore explicitly set the default to XP unless the user has
4049 # set something else on the command line.
4050 # Don't do this if WINAPI_FAMILY is set and is set to a non-desktop
4051 # family. For these cases, configure is free to use any functions
4052 # found in the SDK headers by default. (Alternatively, we could force
4053 # _WIN32_WINNT to 0x0602 in that case.)
4054 check_${pfx}cpp_condition stdlib.h "defined(_WIN32_WINNT)" ||
4055 { check_${pfx}cpp <<EOF && add_${pfx}cppflags -D_WIN32_WINNT=0x0502; }
4056 #ifdef WINAPI_FAMILY
4057 #include <winapifamily.h>
4058 #if !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
4063 if [ "$pfx" = "" ]; then
4064 check_func strtoll || add_cflags -Dstrtoll=_strtoi64
4066 elif check_${pfx}cpp_condition stddef.h "defined __KLIBC__"; then
4067 eval ${pfx}libc_type=klibc
4068 elif check_${pfx}cpp_condition sys/cdefs.h "defined __BIONIC__"; then
4069 eval ${pfx}libc_type=bionic
4070 elif check_${pfx}cpp_condition sys/brand.h "defined LABELED_BRAND_NAME"; then
4071 eval ${pfx}libc_type=solaris
4072 add_${pfx}cppflags -D__EXTENSIONS__ -D_XOPEN_SOURCE=600
4074 eval ${pfx}libc_type=default
4075 add_${pfx}cppflags -D_DEFAULT_SOURCE
4080 test -n "$libc_type" && enable libc_$libc_type
4082 test -n "$host_libc_type" && enable host_libc_$host_libc_type
4086 add_compat strtod.o strtod=avpriv_strtod
4090 # hacks for compiler/libc/os combinations
4092 if enabled_all tms470 libc_glibc; then
4093 CPPFLAGS="-I${source_path}/compat/tms470 ${CPPFLAGS}"
4094 add_cppflags -D__USER_LABEL_PREFIX__=
4095 add_cppflags -D__builtin_memset=memset
4096 add_cppflags -D__gnuc_va_list=va_list -D_VA_LIST_DEFINED
4097 add_cflags -pds=48 # incompatible redefinition of macro
4100 if enabled_all ccc libc_glibc; then
4101 add_ldflags -Wl,-z,now # calls to libots crash without this
4104 check_compile_assert flt_lim "float.h limits.h" "DBL_MAX == (double)DBL_MAX" ||
4105 add_cppflags '-I\$(SRC_PATH)/compat/float'
4108 echo "$*" | sed 's/%/%25/g;s/:/%3a/g'
4111 echo "config:$arch:$subarch:$cpu:$target_os:$(esc $cc_ident):$(esc $LIBAV_CONFIGURATION)" >config.fate
4113 check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable_weak pic
4115 set_default $PATHS_LIST
4118 # we need to build at least one lib type
4119 if ! enabled_any static shared; then
4121 At least one library type must be built.
4122 Specify --enable-static to build the static libraries or --enable-shared to
4123 build the shared libraries as well. To only build the shared libraries specify
4124 --disable-static in addition to --enable-shared.
4129 disabled optimizations || check_cflags -fomit-frame-pointer
4132 disabled pic && return
4135 case "$target_os" in
4145 enabled pic && enable_weak_pic
4147 check_cc <<EOF || die "Symbol mangling check failed."
4150 sym=$($nm $TMPO | awk '/ff_extern/{ print substr($0, match($0, /[^ \t]*ff_extern/)) }')
4151 extern_prefix=${sym%%ff_extern*}
4153 check_cc <<EOF && enable_weak inline_asm
4154 void foo(void) { __asm__ volatile ("" ::); }
4158 for restrict_keyword in restrict __restrict__ __restrict; do
4159 check_cc <<EOF && _restrict=$restrict_keyword && break
4160 void foo(char * $restrict_keyword p);
4164 check_cc <<EOF && enable pragma_deprecated
4165 void foo(void) { _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") }
4168 check_cc <<EOF && enable attribute_packed
4169 struct { int x; } __attribute__((packed)) x;
4172 check_cc <<EOF && enable attribute_may_alias
4173 union { int x; } __attribute__((may_alias)) x;
4176 check_cc <<EOF || die "endian test failed"
4177 unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
4179 od -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
4182 log "check_gas using '$as' as AS"
4183 # :vararg is used on aarch64, arm and ppc altivec
4184 check_as <<EOF || return 1
4185 .macro m n, y:vararg=0
4190 # .altmacro is only used in arm asm
4191 ! enabled arm || check_as <<EOF || return 1
4198 if enabled_any arm aarch64 || enabled_all ppc altivec && enabled asm; then
4200 enabled_any arm aarch64 && nogas=die
4201 enabled_all ppc altivec && nogas=warn
4205 arm*) gaspp_as_type=armasm; as_noop=-h ;;
4206 gcc) gaspp_as_type=gas ;;
4207 *) gaspp_as_type=$as_type ;;
4210 [ $target_os = "darwin" ] && gaspp_as_type="apple-$gaspp_as_type"
4212 check_cmd gas-preprocessor.pl -arch $arch -as-type $gaspp_as_type -- $as $as_noop &&
4213 gas="gas-preprocessor.pl -arch $arch -as-type $gaspp_as_type -- $as"
4215 if ! check_gas ; then
4218 $nogas "GNU assembler not found, install/update gas-preprocessor"
4221 check_as <<EOF && enable as_func
4227 check_inline_asm inline_asm_labels '"1:\n"'
4229 if enabled aarch64; then
4230 enabled armv8 && check_insn armv8 'prfm pldl1strm, [x0]'
4231 # internal assembler in clang 3.3 does not support this instruction
4232 enabled neon && check_insn neon 'ext v0.8B, v0.8B, v1.8B, #1'
4233 enabled vfp && check_insn vfp 'fmadd d0, d0, d1, d2'
4235 map 'enabled_any ${v}_external ${v}_inline || disable $v' $ARCH_EXT_LIST_ARM
4237 elif enabled alpha; then
4241 elif enabled arm; then
4243 enabled msvc && check_cpp_condition stddef.h "defined _M_ARMT" && enable thumb
4244 check_cpp_condition stddef.h "defined __thumb__" && enable_weak thumb
4245 enabled thumb && check_cflags -mthumb || check_cflags -marm
4247 if check_cpp_condition stddef.h "defined __ARM_PCS_VFP"; then
4249 elif check_cpp_condition stddef.h "defined _M_ARM_FP && _M_ARM_FP >= 30"; then
4251 elif ! check_cpp_condition stddef.h "defined __ARM_PCS || defined __SOFTFP__" && [ $target_os != darwin ]; then
4252 case "${cross_prefix:-$cc}" in
4253 *hardfloat*) enable vfp_args; fpabi=vfp ;;
4254 *) check_ld <<EOF && enable vfp_args && fpabi=vfp || fpabi=soft ;;
4255 __asm__ (".eabi_attribute 28, 1");
4256 int main(void) { return 0; }
4259 warn "Compiler does not indicate floating-point ABI, guessing $fpabi."
4262 enabled armv5te && check_insn armv5te 'qadd r0, r0, r0'
4263 enabled armv6 && check_insn armv6 'sadd16 r0, r0, r0'
4264 enabled armv6t2 && check_insn armv6t2 'movt r0, #0'
4265 enabled neon && check_insn neon 'vadd.i16 q0, q0, q0'
4266 enabled vfp && check_insn vfp 'fadds s0, s0, s0'
4267 enabled vfpv3 && check_insn vfpv3 'vmov.f32 s0, #1.0'
4269 [ $target_os = linux ] || [ $target_os = android ] ||
4270 map 'enabled_any ${v}_external ${v}_inline || disable $v' \
4273 check_inline_asm asm_mod_q '"add r0, %Q0, %R0" :: "r"((long long)0)'
4275 check_as <<EOF && enable as_dn_directive
4279 check_as <<EOF && enable as_fpu_directive
4283 # llvm's integrated assembler supports .object_arch from llvm 3.5
4284 [ "$objformat" = elf ] && check_as <<EOF && enable as_object_arch
4288 [ $target_os != win32 ] && enabled_all armv6t2 shared !pic && enable_weak_pic
4290 elif enabled mips; then
4292 check_inline_asm loongson '"dmult.g $1, $2, $3"'
4294 # make sure that only an instruction set is enabled
4295 disable mips64r6 mips32r6 mips64r2 mips32r2 mips64r1 mips32r1
4297 if enabled mips64; then
4298 check_inline_asm mips64r6 '"dlsa $0, $0, $0, 1"' ||
4299 check_inline_asm mips64r2 '"dext $0, $0, 0, 1"' ||
4300 check_inline_asm mips64r1 '"daddi $0, $0, 0"'
4302 check_inline_asm mips32r6 '"aui $0, $0, 0"' ||
4303 check_inline_asm mips32r2 '"ext $0, $0, 0, 1"' ||
4304 check_inline_asm mips32r1 '"addi $0, $0, 0"'
4307 elif enabled parisc; then
4309 if enabled gcc; then
4310 case $($cc -dumpversion) in
4311 4.[3-8].*) check_cflags -fno-optimize-sibling-calls ;;
4315 elif enabled ppc; then
4317 enable local_aligned_8 local_aligned_16 local_aligned_32
4319 check_inline_asm dcbzl '"dcbzl 0, %0" :: "r"(0)'
4320 check_inline_asm ibm_asm '"add 0, 0, 0"'
4321 check_inline_asm ppc4xx '"maclhw r10, r11, r12"'
4322 check_inline_asm xform_asm '"lwzx %1, %y0" :: "Z"(*(int*)0), "r"(0)'
4324 # AltiVec flags: The FSF version of GCC differs from the Apple version
4325 if enabled altivec; then
4326 check_cflags -maltivec -mabi=altivec &&
4327 { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
4328 check_cflags -faltivec
4330 # check if our compiler supports Motorola AltiVec C API
4331 check_cc <<EOF || disable altivec
4334 vector signed int v1 = (vector signed int) { 0 };
4335 vector signed int v2 = (vector signed int) { 1 };
4336 v1 = vec_add(v1, v2);
4341 enabled altivec || warn "Altivec disabled, possibly missing --cpu flag"
4344 if enabled vsx; then
4345 check_cflags -mvsx &&
4346 check_builtin vec_vsx_ld "altivec.h" "__builtin_vec_vsx_ld" || disable vsx
4349 if enabled power8; then
4350 check_cpp_condition "altivec.h" "defined(_ARCH_PWR8)" || disable power8
4353 elif enabled x86; then
4355 check_builtin rdtsc intrin.h "__rdtsc()"
4356 check_builtin mm_empty mmintrin.h "_mm_empty()"
4358 enable local_aligned_8 local_aligned_16 local_aligned_32
4360 # check whether EBP is available on x86
4361 # As 'i' is stored on the stack, this program will crash
4362 # if the base pointer is used to access it because the
4363 # base pointer is cleared in the inline assembly code.
4364 check_exec_crash <<EOF && enable ebp_available
4366 __asm__ volatile ("xorl %%ebp, %%ebp" ::: "%ebp");
4370 # check whether EBX is available on x86
4371 check_inline_asm ebx_available '""::"b"(0)' &&
4372 check_inline_asm ebx_available '"":::"%ebx"'
4374 # check whether xmm clobbers are supported
4375 check_inline_asm xmm_clobbers '"":::"%xmm0"'
4377 # check whether binutils is new enough to compile SSSE3/MMXEXT
4378 enabled ssse3 && check_inline_asm ssse3_inline '"pabsw %xmm0, %xmm0"'
4379 enabled mmxext && check_inline_asm mmxext_inline '"pmaxub %mm0, %mm1"'
4381 if ! disabled_any asm mmx yasm; then
4382 if check_cmd $yasmexe --version; then
4383 enabled x86_64 && yasm_extra="-m amd64"
4384 yasm_debug="-g dwarf2"
4385 elif check_cmd nasm -v; then
4387 yasm_debug="-g -F dwarf"
4388 enabled x86_64 && test "$objformat" = elf && objformat=elf64
4391 YASMFLAGS="-f $objformat $yasm_extra"
4392 enabled pic && append YASMFLAGS "-DPIC"
4393 test -n "$extern_prefix" && append YASMFLAGS "-DPREFIX"
4394 case "$objformat" in
4395 elf*) enabled debug && append YASMFLAGS $yasm_debug ;;
4398 check_yasm "movbe ecx, [5]" && enable yasm ||
4399 die "yasm/nasm not found or too old. Use --disable-yasm for a crippled build."
4400 check_yasm "vextracti128 xmm0, ymm0, 0" || disable avx2_external
4401 check_yasm "vpmacsdd xmm0, xmm1, xmm2, xmm3" || disable xop_external
4402 check_yasm "vfmadd132ps ymm0, ymm1, ymm2" || disable fma3_external
4403 check_yasm "vfmaddps ymm0, ymm1, ymm2, ymm3" || disable fma4_external
4404 check_yasm "CPU amdnop" || disable cpunop
4408 athlon*|opteron*|k8*|pentium|pentium-mmx|prescott|nocona|atom|geode)
4415 check_code cc arm_neon.h "int16x8_t test = vdupq_n_s16(0)" && enable intrinsics_neon
4417 check_ldflags -Wl,--as-needed
4419 if check_func dlopen; then
4421 elif check_func dlopen -ldl; then
4425 if ! disabled network; then
4426 check_func getaddrinfo $network_extralibs
4427 check_func inet_aton $network_extralibs
4429 check_type netdb.h "struct addrinfo"
4430 check_type netinet/in.h "struct group_source_req" -D_BSD_SOURCE
4431 check_type netinet/in.h "struct ip_mreq_source" -D_BSD_SOURCE
4432 check_type netinet/in.h "struct ipv6_mreq" -D_DARWIN_C_SOURCE
4433 check_type poll.h "struct pollfd"
4434 check_type netinet/sctp.h "struct sctp_event_subscribe"
4435 check_struct "sys/types.h sys/socket.h" "struct sockaddr" sa_len
4436 check_type netinet/in.h "struct sockaddr_in6"
4437 check_type "sys/types.h sys/socket.h" "struct sockaddr_storage"
4438 check_type "sys/types.h sys/socket.h" socklen_t
4440 # Prefer arpa/inet.h over winsock2
4441 if check_header arpa/inet.h ; then
4442 check_func closesocket
4443 elif check_header winsock2.h ; then
4444 check_func_headers winsock2.h closesocket -lws2 &&
4445 network_extralibs="-lws2" ||
4446 { check_func_headers winsock2.h closesocket -lws2_32 &&
4447 network_extralibs="-lws2_32"; } || disable winsock2_h network
4448 check_func_headers ws2tcpip.h getaddrinfo $network_extralibs
4450 check_type ws2tcpip.h socklen_t
4451 check_type ws2tcpip.h "struct addrinfo"
4452 check_type ws2tcpip.h "struct group_source_req"
4453 check_type ws2tcpip.h "struct ip_mreq_source"
4454 check_type ws2tcpip.h "struct ipv6_mreq"
4455 check_type winsock2.h "struct pollfd"
4456 check_struct winsock2.h "struct sockaddr" sa_len
4457 check_type ws2tcpip.h "struct sockaddr_in6"
4458 check_type ws2tcpip.h "struct sockaddr_storage"
4464 check_builtin atomic_cas_ptr atomic.h "void **ptr; void *oldval, *newval; atomic_cas_ptr(ptr, oldval, newval)"
4465 check_builtin machine_rw_barrier mbarrier.h "__machine_rw_barrier()"
4466 check_builtin MemoryBarrier windows.h "MemoryBarrier()"
4467 check_builtin sync_val_compare_and_swap "" "int *ptr; int oldval, newval; __sync_val_compare_and_swap(ptr, oldval, newval)"
4469 case "$custom_allocator" in
4471 # jemalloc by default does not use a prefix
4472 require libjemalloc jemalloc/jemalloc.h malloc -ljemalloc
4475 require_pkg_config libtcmalloc gperftools/tcmalloc.h tc_malloc
4480 check_func_headers malloc.h _aligned_malloc && enable aligned_malloc
4481 check_func ${malloc_prefix}memalign && enable memalign
4482 check_func ${malloc_prefix}posix_memalign && enable posix_memalign
4484 check_cpp_condition unistd.h "defined(_POSIX_MONOTONIC_CLOCK)" &&
4485 check_func_headers time.h clock_gettime ||
4486 { check_lib time.h clock_gettime -lrt && LIBRT="-lrt"; }
4490 check_func gethrtime
4492 check_func getrusage
4493 check_func gettimeofday
4496 check_func localtime_r
4497 check_func mach_absolute_time
4501 # Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
4502 check_func_headers time.h nanosleep || { check_func_headers time.h nanosleep -lrt && add_extralibs -lrt; }
4503 check_func sched_getaffinity
4504 check_func setrlimit
4505 check_func strerror_r
4510 check_func_headers io.h setmode
4511 check_func_headers stdlib.h getenv
4513 check_func_headers windows.h CoTaskMemFree -lole32
4514 check_func_headers windows.h GetProcessAffinityMask
4515 check_func_headers windows.h GetProcessTimes
4516 check_func_headers windows.h GetSystemTimeAsFileTime
4517 check_func_headers windows.h LoadLibrary
4518 check_func_headers windows.h MapViewOfFile
4519 check_func_headers windows.h SetConsoleTextAttribute
4520 check_func_headers windows.h Sleep
4521 check_func_headers windows.h VirtualAlloc
4522 check_struct windows.h "CONDITION_VARIABLE" Ptr
4524 check_header direct.h
4525 check_header dlfcn.h
4526 check_header d3d11.h
4528 check_header dxva2api.h
4530 check_header mach/mach_time.h
4531 check_header malloc.h
4533 check_header sys/mman.h
4534 check_header sys/param.h
4535 check_header sys/resource.h
4536 check_header sys/select.h
4537 check_header sys/time.h
4538 check_header sys/un.h
4539 check_header unistd.h
4540 check_header valgrind/valgrind.h
4541 check_header vdpau/vdpau.h
4542 check_header vdpau/vdpau_x11.h
4543 check_header VideoDecodeAcceleration/VDADecoder.h
4544 check_header windows.h
4545 check_header X11/extensions/XvMClib.h
4547 # it seems there are versions of clang in some distros that try to use the
4548 # gcc headers, which explodes for stdatomic
4549 # so we also check that atomics actually work here
4550 check_builtin stdatomic_h stdatomic.h "atomic_int foo; atomic_store(&foo, 0)"
4552 check_lib "windows.h shellapi.h" CommandLineToArgvW -lshell32
4553 check_lib "windows.h wincrypt.h" CryptGenRandom -ladvapi32
4554 check_lib "windows.h psapi.h" GetProcessMemoryInfo -lpsapi
4556 check_struct "sys/time.h sys/resource.h" "struct rusage" ru_maxrss
4558 check_type "windows.h dxva.h" "DXVA_PicParams_HEVC" -DWINAPI_FAMILY=WINAPI_FAMILY_DESKTOP_APP -D_CRT_BUILD_DESKTOP_APP=0
4559 check_type "windows.h d3d11.h" "ID3D11VideoDecoder"
4560 check_type "d3d9.h dxva2api.h" DXVA2_ConfigPictureDecode -D_WIN32_WINNT=0x0602
4562 check_type "va/va.h va/va_dec_vp8.h" "VAPictureParameterBufferVP8"
4563 check_type "va/va.h va/va_vpp.h" "VAProcPipelineParameterBuffer"
4564 check_type "va/va.h va/va_enc_h264.h" "VAEncPictureParameterBufferH264"
4565 check_type "va/va.h va/va_enc_hevc.h" "VAEncPictureParameterBufferHEVC"
4566 check_type "va/va.h va/va_enc_jpeg.h" "VAEncPictureParameterBufferJPEG"
4568 check_type "vdpau/vdpau.h" "VdpPictureInfoHEVC"
4570 if ! disabled w32threads && ! enabled pthreads; then
4571 check_func_headers "windows.h process.h" _beginthreadex &&
4572 enable w32threads || disable w32threads
4575 # check for some common methods of building with pthread support
4576 # do this before the optional library checks as some of them require pthreads
4577 if ! disabled pthreads && ! enabled w32threads; then
4579 if check_func pthread_join -pthread; then
4581 add_extralibs -pthread
4582 elif check_func pthread_join -pthreads; then
4583 add_cflags -pthreads
4584 add_extralibs -pthreads
4585 elif check_func pthread_join -lpthreadGC2; then
4586 add_extralibs -lpthreadGC2
4587 elif check_lib pthread.h pthread_join -lpthread; then
4589 elif ! check_func pthread_join; then
4595 check_builtin sem_timedwait semaphore.h "sem_t *s; sem_init(s,0,0); sem_timedwait(s,0); sem_destroy(s)"
4597 disabled zlib || check_lib zlib.h zlibVersion -lz || disable zlib
4598 disabled bzlib || check_lib bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
4600 check_lib math.h sin -lm && LIBM="-lm"
4606 for func in $MATH_FUNCS; do
4607 eval check_mathfunc $func \${${func}_args:-1} $LIBM
4610 # these are off by default, so fail if requested and not available
4611 enabled avisynth && { check_lib "avisynth/avisynth_c.h windows.h" LoadLibrary ||
4612 check_lib "avxsynth/avxsynth_c.h dlfcn.h" dlopen -ldl ||
4613 die "ERROR: LoadLibrary/dlopen not found, or avisynth header not found"; }
4614 enabled cuda && check_lib cuda.h cuInit -lcuda
4615 enabled frei0r && { check_header frei0r.h || die "ERROR: frei0r.h header not found"; }
4616 enabled gnutls && require_pkg_config gnutls gnutls/gnutls.h gnutls_global_init
4617 enabled libbs2b && require_pkg_config libbs2b bs2b.h bs2b_open
4618 enabled libdc1394 && require_pkg_config libdc1394-2 dc1394/dc1394.h dc1394_new
4619 enabled libdcadec && require libdcadec libdcadec/dca_context.h dcadec_context_create -ldcadec
4620 enabled libfaac && require libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
4621 enabled libfdk_aac && require_pkg_config fdk-aac "fdk-aac/aacenc_lib.h" aacEncOpen
4622 enabled libfontconfig && require_pkg_config fontconfig "fontconfig/fontconfig.h" FcInit
4623 enabled libfreetype && require_pkg_config freetype2 "ft2build.h FT_FREETYPE_H" FT_Init_FreeType
4624 enabled libgsm && { for gsm_hdr in "gsm.h" "gsm/gsm.h"; do
4625 check_lib "${gsm_hdr}" gsm_create -lgsm && break;
4626 done || die "ERROR: libgsm not found"; }
4627 enabled libhdcd && require_pkg_config libhdcd "hdcd/hdcd_simple.h" hdcd_new
4628 enabled libilbc && require libilbc ilbc.h WebRtcIlbcfix_InitDecode -lilbc
4629 enabled libkvazaar && require_pkg_config "kvazaar >= 0.8.1" kvazaar.h kvz_api_get
4630 enabled libmfx && require_pkg_config libmfx "mfx/mfxvideo.h" MFXInit
4631 enabled libmp3lame && require "libmp3lame >= 3.98.3" lame/lame.h lame_set_VBR_quality -lmp3lame
4632 enabled libnpp && require libnpp npp.h nppGetLibVersion -lnppi -lnppc
4633 enabled libopencore_amrnb && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb
4634 enabled libopencore_amrwb && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb
4635 enabled libopencv && require_pkg_config opencv opencv/cv.h cvCreateImageHeader
4636 enabled libopenh264 && require_pkg_config openh264 wels/codec_api.h WelsGetCodecVersion
4637 enabled libopenjpeg && { check_lib openjpeg.h opj_version -lopenjpeg -DOPJ_STATIC ||
4638 require_pkg_config libopenjpeg1 openjpeg.h opj_version -DOPJ_STATIC; }
4639 enabled libopus && require_pkg_config opus opus_multistream.h opus_multistream_decoder_create
4640 enabled libpulse && require_pkg_config libpulse-simple pulse/simple.h pa_simple_new
4641 enabled librtmp && require_pkg_config librtmp librtmp/rtmp.h RTMP_Socket
4642 enabled libschroedinger && require_pkg_config schroedinger-1.0 schroedinger/schro.h schro_init
4643 enabled libsnappy && require libsnappy snappy-c.h snappy_compress -lsnappy
4644 enabled libspeex && require_pkg_config speex speex/speex.h speex_decoder_init -lspeex
4645 enabled libtheora && require libtheora theora/theoraenc.h th_info_init -ltheoraenc -ltheoradec -logg
4646 enabled libtwolame && require libtwolame twolame.h twolame_init -ltwolame
4647 enabled libvo_aacenc && require libvo_aacenc vo-aacenc/voAAC.h voGetAACEncAPI -lvo-aacenc
4648 enabled libvo_amrwbenc && require libvo_amrwbenc vo-amrwbenc/enc_if.h E_IF_init -lvo-amrwbenc
4649 enabled libvorbis && require libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
4650 enabled libvpx && require_pkg_config "vpx >= 1.3.0" vpx/vpx_codec.h vpx_codec_version && {
4651 enabled libvpx_vp8_decoder && {
4652 check_pkg_config vpx "vpx/vpx_decoder.h vpx/vp8dx.h" vpx_codec_vp8_dx ||
4653 disable libvpx_vp8_decoder;
4655 enabled libvpx_vp8_encoder && {
4656 check_pkg_config vpx "vpx/vpx_encoder.h vpx/vp8cx.h" vpx_codec_vp8_cx ||
4657 disable libvpx_vp8_encoder;
4659 enabled libvpx_vp9_decoder && {
4660 check_pkg_config vpx "vpx/vpx_decoder.h vpx/vp8dx.h" vpx_codec_vp9_dx ||
4661 disable libvpx_vp9_decoder;
4663 enabled libvpx_vp9_encoder && {
4664 check_pkg_config vpx "vpx/vpx_encoder.h vpx/vp8cx.h" vpx_codec_vp9_cx ||
4665 disable libvpx_vp9_encoder;
4667 if disabled_all libvpx_vp8_decoder libvpx_vp9_decoder libvpx_vp8_encoder libvpx_vp9_encoder; then
4668 die "libvpx enabled but no supported decoders found"
4671 enabled libwavpack && require libwavpack wavpack/wavpack.h WavpackOpenFileOutput -lwavpack
4672 enabled libwebp && require_pkg_config libwebp webp/encode.h WebPGetEncoderVersion
4673 enabled libx264 && require_pkg_config x264 "stdint.h x264.h" x264_encoder_encode &&
4674 { check_cpp_condition x264.h "X264_BUILD >= 118" ||
4675 die "ERROR: libx264 version must be >= 0.118."; } &&
4676 { check_cpp_condition x264.h "X264_MPEG2" &&
4678 enabled libx265 && require_pkg_config x265 x265.h x265_api_get &&
4679 { check_cpp_condition x265.h "X265_BUILD >= 57" ||
4680 die "ERROR: libx265 version must be >= 57."; }
4681 enabled libxavs && require libxavs "stdint.h xavs.h" xavs_encoder_encode -lxavs
4682 enabled libxvid && require libxvid xvid.h xvid_global -lxvidcore
4683 enabled mmal && { check_lib interface/mmal/mmal.h mmal_port_connect -lmmal_core -lmmal_util -lmmal_vc_client -lbcm_host ||
4684 { ! enabled cross_compile &&
4685 add_cflags -isystem/opt/vc/include/ -isystem/opt/vc/include/interface/vmcs_host/linux -isystem/opt/vc/include/interface/vcos/pthreads -fgnu89-inline &&
4686 add_ldflags -L/opt/vc/lib/ &&
4687 check_lib interface/mmal/mmal.h mmal_port_connect -lmmal_core -lmmal_util -lmmal_vc_client -lbcm_host; } ||
4688 die "ERROR: mmal not found" &&
4689 check_func_headers interface/mmal/mmal.h "MMAL_PARAMETER_VIDEO_MAX_NUM_CALLBACKS"; }
4690 enabled omx_rpi && enable omx
4691 enabled omx && { check_header OMX_Core.h ||
4692 { ! enabled cross_compile && enabled omx_rpi && {
4693 add_cflags -isystem/opt/vc/include/IL ; }
4694 check_header OMX_Core.h ; } ||
4695 die "ERROR: OpenMAX IL headers not found"; }
4696 enabled openssl && { { check_pkg_config openssl openssl/ssl.h OPENSSL_init_ssl ||
4697 check_pkg_config openssl openssl/ssl.h SSL_library_init; } && {
4698 add_cflags $openssl_cflags && add_extralibs $openssl_libs; }||
4699 check_lib openssl/ssl.h SSL_library_init -lssl -lcrypto ||
4700 check_lib openssl/ssl.h SSL_library_init -lssl32 -leay32 ||
4701 check_lib openssl/ssl.h SSL_library_init -lssl -lcrypto -lws2_32 -lgdi32 ||
4702 die "ERROR: openssl not found"; }
4704 enabled gnutls && check_lib gmp.h mpz_export -lgmp && enable gmp
4706 if enabled nvenc; then
4707 check_header nvEncodeAPI.h || die "ERROR: nvEncodeAPI.h not found."
4708 check_cpp_condition nvEncodeAPI.h "NVENCAPI_MAJOR_VERSION >= 6" ||
4709 die "ERROR: NVENC API version 5 or older is not supported"
4712 if check_pkg_config sdl SDL_events.h SDL_PollEvent; then
4713 check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
4714 check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) < 0x010300" $sdl_cflags &&
4718 ! disabled pod2man && check_cmd pod2man --help && enable pod2man || disable pod2man
4719 ! disabled texi2html && check_cmd texi2html -version && enable texi2html || disable texi2html
4721 check_header linux/fb.h
4722 check_header linux/videodev2.h
4723 check_struct linux/videodev2.h "struct v4l2_frmivalenum" discrete
4725 check_header AVFoundation/AVFoundation.h
4727 check_header sys/videoio.h
4729 check_func_headers "windows.h vfw.h" capCreateCaptureWindow "$vfwcap_indev_extralibs"
4730 # check that WM_CAP_DRIVER_CONNECT is defined to the proper value
4731 # w32api 3.12 had it defined wrong
4732 check_cpp_condition vfw.h "WM_CAP_DRIVER_CONNECT > WM_USER" && enable vfwcap_defines
4734 # check for ioctl_meteor.h, ioctl_bt848.h and alternatives
4735 { check_header dev/bktr/ioctl_meteor.h &&
4736 check_header dev/bktr/ioctl_bt848.h; } ||
4737 { check_header machine/ioctl_meteor.h &&
4738 check_header machine/ioctl_bt848.h; } ||
4739 { check_header dev/video/meteor/ioctl_meteor.h &&
4740 check_header dev/video/bktr/ioctl_bt848.h; } ||
4741 check_header dev/ic/bt8xx.h
4743 check_header sndio.h
4744 check_header sys/soundcard.h
4745 check_header soundcard.h
4747 enabled_any alsa_indev alsa_outdev &&
4748 check_lib alsa/asoundlib.h snd_pcm_htimestamp -lasound
4750 enabled jack_indev && check_lib jack/jack.h jack_client_open -ljack &&
4751 check_func jack_port_get_latency_range -ljack
4753 enabled_any sndio_indev sndio_outdev && check_lib sndio.h sio_open -lsndio
4755 if enabled libcdio; then
4756 check_lib "cdio/cdda.h cdio/paranoia.h" cdio_cddap_open -lcdio_paranoia -lcdio_cdda -lcdio ||
4757 check_lib "cdio/paranoia/cdda.h cdio/paranoia/paranoia.h" cdio_cddap_open -lcdio_paranoia -lcdio_cdda -lcdio ||
4758 die "ERROR: No usable libcdio/cdparanoia found"
4761 if enabled libxcb; then
4762 check_pkg_config xcb-shape xcb/shape.h xcb_shape_rectangles || {
4763 enabled libxcb && die "ERROR: libxcb not found";
4766 disabled libxcb_shm ||
4767 check_pkg_config xcb-shm xcb/shm.h xcb_shm_attach || {
4768 enabled libxcb_shm && die "ERROR: libxcb_shm not found";
4769 } && check_header sys/shm.h && enable libxcb_shm
4771 disabled libxcb_xfixes ||
4772 check_pkg_config xcb-xfixes xcb/xfixes.h xcb_xfixes_get_cursor_image || {
4773 enabled libxcb_xfixes && die "ERROR: libxcb_xfixes not found";
4774 } && enable libxcb_xfixes
4776 add_cflags "$xcb_shape_cflags $xcb_shm_cflags $xcb_xfixes_cflags"
4777 add_extralibs "$xcb_shape_libs $xcb_shm_libs $xcb_xfixes_libs"
4780 enabled vaapi && require vaapi va/va.h vaInitialize -lva
4783 check_code cc "va/va.h" "vaCreateSurfaces(0, 0, 0, 0, 0, 0, 0, 0)" ||
4787 check_lib "va/va.h va/va_drm.h" vaGetDisplayDRM -lva -lva-drm &&
4791 check_lib "va/va.h va/va_x11.h" vaGetDisplay -lva -lva-x11 -lX11 &&
4795 check_cpp_condition vdpau/vdpau.h "defined VDP_DECODER_PROFILE_MPEG4_PART2_ASP" ||
4799 check_lib "vdpau/vdpau.h vdpau/vdpau_x11.h" vdp_device_create_x11 -lvdpau -lX11 &&
4802 enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel"
4804 # add some useful compiler flags if supported
4805 check_cflags -Wdeclaration-after-statement
4807 check_cflags -Wdisabled-optimization
4808 check_cflags -Wpointer-arith
4809 check_cflags -Wredundant-decls
4810 check_cflags -Wwrite-strings
4811 check_cflags -Wtype-limits
4812 check_cflags -Wundef
4813 check_cflags -Wmissing-prototypes
4814 check_cflags -Wstrict-prototypes
4816 if enabled extra_warnings; then
4817 check_cflags -Wcast-qual
4818 check_cflags -Wextra
4819 check_cflags -Wpedantic
4822 check_disable_warning(){
4823 warning_flag=-W${1#-Wno-}
4824 test_cflags $warning_flag && add_cflags $1
4827 check_disable_warning -Wno-parentheses
4828 check_disable_warning -Wno-switch
4829 check_disable_warning -Wno-format-zero-length
4830 check_disable_warning -Wno-pointer-sign
4832 check_disable_warning_headers(){
4833 warning_flag=-W${1#-Wno-}
4834 test_cflags $warning_flag && append cflags_headers $1
4837 check_disable_warning_headers -Wno-deprecated-declarations
4838 check_disable_warning_headers -Wno-unused-variable
4840 check_objcflags -fobjc-arc && enable objc_arc
4842 # add some linker flags
4843 check_ldflags -Wl,--warn-common
4844 check_ldflags -Wl,-rpath-link=libswscale:libavfilter:libavdevice:libavformat:libavcodec:libavutil:libavresample
4845 enabled rpath && add_ldexeflags -Wl,-rpath,$libdir
4846 test_ldflags -Wl,-Bsymbolic && append SHFLAGS -Wl,-Bsymbolic
4848 # add some strip flags
4849 # -wN '..@*' is more selective than -x, but not available everywhere.
4850 check_stripflags -wN \'..@*\' || check_stripflags -x || strip='true'
4852 enabled neon_clobber_test &&
4853 check_ldflags -Wl,--wrap,avcodec_open2 \
4854 -Wl,--wrap,avcodec_decode_audio4 \
4855 -Wl,--wrap,avcodec_decode_video2 \
4856 -Wl,--wrap,avcodec_decode_subtitle2 \
4857 -Wl,--wrap,avcodec_encode_audio2 \
4858 -Wl,--wrap,avcodec_encode_video2 \
4859 -Wl,--wrap,avcodec_encode_subtitle \
4860 -Wl,--wrap,avcodec_send_packet \
4861 -Wl,--wrap,avcodec_receive_packet \
4862 -Wl,--wrap,avcodec_send_frame \
4863 -Wl,--wrap,avcodec_receive_frame \
4864 -Wl,--wrap,avresample_convert ||
4865 disable neon_clobber_test
4867 enabled xmm_clobber_test &&
4868 check_ldflags -Wl,--wrap,avcodec_open2 \
4869 -Wl,--wrap,avcodec_decode_audio4 \
4870 -Wl,--wrap,avcodec_decode_video2 \
4871 -Wl,--wrap,avcodec_decode_subtitle2 \
4872 -Wl,--wrap,avcodec_encode_audio2 \
4873 -Wl,--wrap,avcodec_encode_video2 \
4874 -Wl,--wrap,avcodec_encode_subtitle \
4875 -Wl,--wrap,avcodec_send_packet \
4876 -Wl,--wrap,avcodec_receive_packet \
4877 -Wl,--wrap,avcodec_send_frame \
4878 -Wl,--wrap,avcodec_receive_frame \
4879 -Wl,--wrap,avresample_convert \
4880 -Wl,--wrap,sws_scale ||
4881 disable xmm_clobber_test
4883 check_ld <<EOF && enable proper_dce
4884 extern const int array[512];
4885 static inline int func(void) { return array[0]; }
4886 int main(void) { return 0; }
4889 if enabled proper_dce; then
4890 echo "X { local: *; };" > $TMPV
4891 if test_ldflags -Wl,${version_script},$TMPV; then
4892 append SHFLAGS '-Wl,${version_script},\$(SUBDIR)lib\$(NAME).ver'
4893 check_cc <<EOF && enable symver_asm_label
4894 void ff_foo(void) __asm__ ("av_foo@VERSION");
4895 void ff_foo(void) { ${inline_asm+__asm__($quotes);} }
4897 check_cc <<EOF && enable symver_gnu_asm
4898 __asm__(".symver ff_foo,av_foo@VERSION");
4899 void ff_foo(void) {}
4904 if [ -z "$optflags" ]; then
4905 if enabled small; then
4906 optflags=$cflags_size
4907 elif enabled optimizations; then
4908 optflags=$cflags_speed
4910 optflags=$cflags_noopt
4916 enabled lto && check_ldflags "$@"
4920 if enabled lto; then
4921 test "$cc_type" != "$ld_type" && die "LTO requires same compiler and linker"
4923 check_ldflags -flto $cpuflags
4926 check_optflags $optflags
4927 check_optflags -fno-math-errno
4928 check_optflags -fno-signed-zeros
4930 if enabled icc; then
4931 # Just warnings, no remarks
4933 # -wd: Disable following warnings
4934 # 144, 167, 556: -Wno-pointer-sign
4935 # 1292: attribute "foo" ignored
4936 # 1419: external declaration in primary source file
4937 # 10006: ignoring unknown option -fno-signed-zeros
4938 # 10148: ignoring unknown option -Wno-parentheses
4939 # 10156: ignoring option '-W'; no argument required
4940 check_cflags -wd144,167,556,1292,1419,10006,10148,10156
4941 # 11030: Warning unknown option --as-needed
4942 # 10156: ignoring option '-export'; no argument required
4943 check_ldflags -wd10156,11030
4944 # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
4945 enable ebp_available
4946 if enabled x86_32; then
4947 icc_version=$($cc -dumpversion)
4948 test ${icc_version%%.*} -ge 11 &&
4949 check_cflags -falign-stack=maintain-16-byte ||
4950 disable aligned_stack
4952 elif enabled ccc; then
4953 # disable some annoying warnings
4954 add_cflags -msg_disable bitnotint
4955 add_cflags -msg_disable mixfuncvoid
4956 add_cflags -msg_disable nonstandcast
4957 add_cflags -msg_disable unsupieee
4958 elif enabled gcc; then
4959 check_optflags -fno-tree-vectorize
4960 check_cflags -Werror=implicit-function-declaration
4961 check_cflags -Werror=missing-prototypes
4962 check_cflags -Werror=return-type
4963 check_cflags -Werror=declaration-after-statement
4964 check_cflags -Werror=vla
4965 check_cflags -Werror=format-security
4966 check_cflags -fdiagnostics-color=auto
4967 enabled extra_warnings || check_disable_warning -Wno-maybe-uninitialized
4968 elif enabled llvm_gcc; then
4969 check_cflags -mllvm -stack-alignment=16
4970 elif enabled clang; then
4971 check_cflags -mllvm -stack-alignment=16
4972 check_cflags -Qunused-arguments
4973 check_cflags -Werror=implicit-function-declaration
4974 check_cflags -Werror=missing-prototypes
4975 check_cflags -Werror=return-type
4976 elif enabled cparser; then
4977 add_cflags -Wno-missing-variable-declarations
4978 add_cflags -Wno-empty-statement
4979 elif enabled armcc; then
4980 add_cflags -W${armcc_opt},--diag_suppress=4343 # hardfp compat
4981 add_cflags -W${armcc_opt},--diag_suppress=3036 # using . as system include dir
4982 # 2523: use of inline assembly is deprecated
4983 add_cflags -W${armcc_opt},--diag_suppress=2523
4984 add_cflags -W${armcc_opt},--diag_suppress=1207
4985 add_cflags -W${armcc_opt},--diag_suppress=1293 # assignment in condition
4986 add_cflags -W${armcc_opt},--diag_suppress=3343 # hardfp compat
4987 add_cflags -W${armcc_opt},--diag_suppress=167 # pointer sign
4988 add_cflags -W${armcc_opt},--diag_suppress=513 # pointer sign
4989 elif enabled tms470; then
4990 add_cflags -pds=824 -pds=837
4992 elif enabled pathscale; then
4993 add_cflags -fstrict-overflow -OPT:wrap_around_unsafe_opt=OFF
4994 elif enabled_any msvc icl; then
4995 enabled x86_32 && disable aligned_stack
4996 enabled_all x86_32 debug && add_cflags -Oy-
4997 enabled debug && add_ldflags -debug
4998 enable pragma_deprecated
4999 if enabled icl; then
5000 # -Qansi-alias is basically -fstrict-aliasing, but does not work
5001 # (correctly) on icl 13.x.
5002 check_cpp_condition "windows.h" "__ICL < 1300 || __ICL >= 1400" &&
5003 add_cflags -Qansi-alias
5004 # icl will pass the inline asm tests but inline asm is currently
5005 # not supported (build will fail)
5008 # msvcrt10 x64 incorrectly enables log2, only msvcrt12 (MSVC 2013) onwards actually has log2.
5009 check_cpp_condition crtversion.h "_VC_CRT_MAJOR_VERSION >= 12" || disable log2
5010 # The CRT headers contain __declspec(restrict) in a few places, but if redefining
5011 # restrict, this might break. MSVC 2010 and 2012 fail with __declspec(__restrict)
5012 # (as it ends up if the restrict redefine is done before including stdlib.h), while
5013 # MSVC 2013 and newer can handle it fine.
5014 # If this declspec fails, force including stdlib.h before the restrict redefinition
5015 # happens in config.h.
5016 if [ $_restrict != restrict ]; then
5017 check_cc <<EOF || add_cflags -FIstdlib.h
5018 __declspec($_restrict) void* foo(int);
5023 for pfx in "" host_; do
5024 varname=${pfx%_}cc_type
5025 eval "type=\$$varname"
5026 if [ $type = "msvc" ]; then
5027 check_${pfx}cc <<EOF || add_${pfx}cflags -Dinline=__inline
5028 static inline int foo(int a) { return a; }
5035 add_asflags -Qunused-arguments
5041 check_ldflags -Qunused-arguments
5047 enabled ccc && add_ldflags '-Wl,-expect_unresolved,*'
5051 enabled asm || { arch=c; disable $ARCH_LIST $ARCH_EXT_LIST; }
5053 check_deps $CONFIG_LIST \
5058 enabled_all dxva2 CoTaskMemFree &&
5059 prepend avconv_libs $($ldflags_filter "-lole32") &&
5062 map 'enabled $v && intrinsics=${v#intrinsics_}' $INTRINSICS_LIST
5064 for thread in $THREADS_LIST; do
5065 if enabled $thread; then
5066 test -n "$thread_type" &&
5067 die "ERROR: Only one thread type must be selected." ||
5068 thread_type="$thread"
5072 if disabled stdatomic_h; then
5073 if enabled atomics_gcc; then
5074 add_cppflags '-I\$(SRC_PATH)/compat/atomics/gcc'
5075 elif enabled atomics_win32; then
5076 add_cppflags '-I\$(SRC_PATH)/compat/atomics/win32'
5077 elif enabled atomics_suncc; then
5078 add_cppflags '-I\$(SRC_PATH)/compat/atomics/suncc'
5079 elif enabled pthreads; then
5080 add_compat atomics/pthread/stdatomic.o
5081 add_cppflags '-I\$(SRC_PATH)/compat/atomics/pthread'
5083 enabled threads && die "Threading is enabled, but no atomics are available"
5084 add_cppflags '-I\$(SRC_PATH)/compat/atomics/dummy'
5088 enabled zlib && add_cppflags -DZLIB_CONST
5090 # conditional library dependencies, in linking order
5091 enabled movie_filter && prepend avfilter_deps "avformat avcodec"
5092 enabled_any asyncts_filter resample_filter &&
5093 prepend avfilter_deps "avresample"
5094 enabled scale_filter && prepend avfilter_deps "swscale"
5096 enabled opus_decoder && prepend avcodec_deps "avresample"
5100 eval "deps=\$$lib_deps"
5101 append $lib_deps $(map 'eval echo \$${v}_deps' $deps)
5105 map 'expand_deps $v' $LIBRARY_LIST
5107 if test "$quiet" != "yes"; then
5109 echo "install prefix $prefix"
5110 echo "source path $source_path"
5111 echo "C compiler $cc"
5112 echo "C library $libc_type"
5113 if test "$host_cc" != "$cc"; then
5114 echo "host C compiler $host_cc"
5115 echo "host C library $host_libc_type"
5117 echo "ARCH $arch ($cpu)"
5118 if test "$extra_version" != ""; then
5119 echo "version string suffix $extra_version"
5121 echo "big-endian ${bigendian-no}"
5122 echo "runtime cpu detection ${runtime_cpudetect-no}"
5123 if enabled x86; then
5124 echo "${yasmexe} ${yasm-no}"
5125 echo "MMX enabled ${mmx-no}"
5126 echo "MMXEXT enabled ${mmxext-no}"
5127 echo "3DNow! enabled ${amd3dnow-no}"
5128 echo "3DNow! extended enabled ${amd3dnowext-no}"
5129 echo "SSE enabled ${sse-no}"
5130 echo "SSSE3 enabled ${ssse3-no}"
5131 echo "AVX enabled ${avx-no}"
5132 echo "XOP enabled ${xop-no}"
5133 echo "FMA3 enabled ${fma3-no}"
5134 echo "FMA4 enabled ${fma4-no}"
5135 echo "i686 features enabled ${i686-no}"
5136 echo "CMOV is fast ${fast_cmov-no}"
5137 echo "EBX available ${ebx_available-no}"
5138 echo "EBP available ${ebp_available-no}"
5140 if enabled aarch64; then
5141 echo "NEON enabled ${neon-no}"
5142 echo "VFP enabled ${vfp-no}"
5144 if enabled arm; then
5145 echo "ARMv5TE enabled ${armv5te-no}"
5146 echo "ARMv6 enabled ${armv6-no}"
5147 echo "ARMv6T2 enabled ${armv6t2-no}"
5148 echo "VFP enabled ${vfp-no}"
5149 echo "NEON enabled ${neon-no}"
5151 if enabled ppc; then
5152 echo "AltiVec enabled ${altivec-no}"
5153 echo "VSX enabled ${vsx-no}"
5154 echo "POWER8 enabled ${power8-no}"
5155 echo "PPC 4xx optimizations ${ppc4xx-no}"
5156 echo "dcbzl available ${dcbzl-no}"
5158 echo "debug symbols ${debug-no}"
5159 echo "optimize for size ${small-no}"
5160 echo "optimizations ${optimizations-no}"
5161 echo "static ${static-no}"
5162 echo "shared ${shared-no}"
5163 echo "network support ${network-no}"
5164 echo "threading support ${thread_type-no}"
5165 echo "safe bitstream reader ${safe_bitstream_reader-no}"
5166 test -n "$random_seed" &&
5167 echo "random seed ${random_seed}"
5170 echo "External libraries:"
5171 print_enabled '' $EXTERNAL_LIBRARY_LIST | print_3_columns
5173 echo "External libraries providing hardware acceleration:"
5174 print_enabled '' $HWACCEL_LIBRARY_LIST | print_3_columns
5178 print_enabled '' $LIBRARY_LIST | print_3_columns
5182 print_enabled '' $PROGRAM_LIST | print_3_columns
5185 for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
5186 echo "Enabled ${type}s:"
5187 eval list=\$$(toupper $type)_LIST
5188 print_enabled '_*' $list | print_3_columns
5192 license="LGPL version 2.1 or later"
5193 if enabled nonfree; then
5194 license="nonfree and unredistributable"
5195 elif enabled gplv3; then
5196 license="GPL version 3 or later"
5197 elif enabled lgplv3; then
5198 license="LGPL version 3 or later"
5199 elif enabled gpl; then
5200 license="GPL version 2 or later"
5203 echo "License: $license"
5205 echo "Creating configuration files ..."
5207 fi # test "$quiet" != "yes"
5209 test -e Makefile || echo "include $source_path/Makefile" > Makefile
5211 config_files="$TMPH config.mak"
5213 cat > config.mak <<EOF
5214 # Automatically generated by configure - do not modify!
5215 LIBAV_CONFIGURATION=$LIBAV_CONFIGURATION
5217 LIBDIR=\$(DESTDIR)$libdir
5218 SHLIBDIR=\$(DESTDIR)$shlibdir
5219 INCDIR=\$(DESTDIR)$incdir
5220 BINDIR=\$(DESTDIR)$bindir
5221 DATADIR=\$(DESTDIR)$datadir
5222 DOCDIR=\$(DESTDIR)$docdir
5223 MANDIR=\$(DESTDIR)$mandir
5224 SRC_PATH=$source_path
5227 INTRINSICS=$intrinsics
5234 DEPCCFLAGS=$DEPCCFLAGS \$(CPPFLAGS)
5236 DEPASFLAGS=$DEPASFLAGS \$(CPPFLAGS)
5247 OBJCFLAGS=$OBJCFLAGS
5262 LDEXEFLAGS=$LDEXEFLAGS
5263 SHFLAGS=$(echo $($ldflags_filter $SHFLAGS))
5264 STRIPFLAGS=$STRIPFLAGS
5265 YASMFLAGS=$YASMFLAGS
5272 EXTRA_VERSION=$extra_version
5274 CCDEP_FLAGS=$CCDEP_FLAGS
5276 ASDEP_FLAGS=$ASDEP_FLAGS
5277 CC_DEPFLAGS=$CC_DEPFLAGS
5278 AS_DEPFLAGS=$AS_DEPFLAGS
5281 HOSTCFLAGS=$host_cflags
5282 HOSTCPPFLAGS=$host_cppflags
5283 HOSTEXESUF=$HOSTEXESUF
5284 HOSTLDFLAGS=$host_ldflags
5287 DEPHOSTCCFLAGS=$DEPHOSTCCFLAGS \$(HOSTCCFLAGS)
5288 HOSTCCDEP=$HOSTCCDEP
5289 HOSTCCDEP_FLAGS=$HOSTCCDEP_FLAGS
5290 HOSTCC_DEPFLAGS=$HOSTCC_DEPFLAGS
5294 TARGET_EXEC=$target_exec $target_exec_args
5295 TARGET_PATH=$target_path
5296 TARGET_SAMPLES=${target_samples:-\$(SAMPLES)}
5297 CFLAGS-avplay=$sdl_cflags
5298 CFLAGS_HEADERS=$cflags_headers
5299 ZLIB=$($ldflags_filter -lz)
5300 LIB_INSTALL_EXTRA_CMD=$LIB_INSTALL_EXTRA_CMD
5301 EXTRALIBS=$extralibs
5302 COMPAT_OBJS=$compat_objs
5304 LIBTARGET=${LIBTARGET}
5305 SLIBNAME=${SLIBNAME}
5306 SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}
5307 SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}
5308 SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}
5309 SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}
5310 SLIB_INSTALL_NAME=${SLIB_INSTALL_NAME}
5311 SLIB_INSTALL_LINKS=${SLIB_INSTALL_LINKS}
5312 SLIB_INSTALL_EXTRA_LIB=${SLIB_INSTALL_EXTRA_LIB}
5313 SLIB_INSTALL_EXTRA_SHLIB=${SLIB_INSTALL_EXTRA_SHLIB}
5314 VERSION_SCRIPT_POSTPROCESS_CMD=${VERSION_SCRIPT_POSTPROCESS_CMD}
5315 SAMPLES:=${samples:-\$(LIBAV_SAMPLES)}
5320 name=$(toupper $lcname)
5321 file=$source_path/$lcname/version.h
5322 eval $(awk "/#define ${name}_VERSION_M/ { print \$2 \"=\" \$3 }" "$file")
5323 eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
5324 eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
5325 eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
5326 eval echo "${lcname}_VERSION_MINOR=\$${name}_VERSION_MINOR" >> config.mak
5329 map 'get_version $v' $LIBRARY_LIST
5331 map 'eval echo "${v}_FFLIBS=\$${v}_deps" >> config.mak' $LIBRARY_LIST
5333 print_program_libs(){
5334 eval "program_libs=\$${1}_libs"
5335 eval echo "LIBS-${1}=${program_libs}" >> config.mak
5338 map 'print_program_libs $v' $PROGRAM_LIST
5341 /* Automatically generated by configure - do not modify! */
5342 #ifndef LIBAV_CONFIG_H
5343 #define LIBAV_CONFIG_H
5344 #define LIBAV_CONFIGURATION "$(c_escape $LIBAV_CONFIGURATION)"
5345 #define LIBAV_LICENSE "$(c_escape $license)"
5346 #define AVCONV_DATADIR "$(eval c_escape $datadir)"
5347 #define CC_IDENT "$(c_escape ${cc_ident:-Unknown compiler})"
5348 #define restrict $_restrict
5349 #define EXTERN_PREFIX "${extern_prefix}"
5350 #define EXTERN_ASM ${extern_prefix}
5351 #define SLIBSUF "$SLIBSUF"
5354 test -n "$malloc_prefix" &&
5355 echo "#define MALLOC_PREFIX $malloc_prefix" >>$TMPH
5357 if enabled yasm; then
5358 append config_files $TMPASM
5362 enabled getenv || echo "#define getenv(x) NULL" >> $TMPH
5364 print_config ARCH_ "$config_files" $ARCH_LIST
5365 print_config HAVE_ "$config_files" $HAVE_LIST
5366 print_config CONFIG_ "$config_files" $CONFIG_LIST \
5370 echo "#endif /* LIBAV_CONFIG_H */" >> $TMPH
5372 # Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
5373 cp_if_changed $TMPH config.h
5376 enabled yasm && cp_if_changed $TMPASM config.asm
5379 /* Generated by ffconf */
5380 #ifndef AVUTIL_AVCONFIG_H
5381 #define AVUTIL_AVCONFIG_H
5384 print_config AV_HAVE_ $TMPH $HAVE_LIST_PUB
5386 echo "#endif /* AVUTIL_AVCONFIG_H */" >> $TMPH
5388 cp_if_changed $TMPH libavutil/avconfig.h
5390 # generate the lists of enabled components
5391 print_enabled_components(){
5396 echo "static const $struct_name *$name[] = {" > $TMPH
5398 enabled $c && printf " &ff_%s,\n" $c >> $TMPH
5400 echo " NULL };" >> $TMPH
5401 cp_if_changed $TMPH $file
5404 print_enabled_components libavcodec/bsf_list.c AVBitStreamFilter bitstream_filters $BSF_LIST
5405 print_enabled_components libavformat/protocol_list.c URLProtocol url_protocols $PROTOCOL_LIST
5407 test -n "$WARNINGS" && printf "\n$WARNINGS"
5409 # build pkg-config files
5412 eval printf "\"lib${1} >= \$LIB$(toupper ${1})_VERSION, \""
5415 pkgconfig_generate(){
5417 shortname=${name#lib}
5421 requires=$(map 'lib_version $v' $(eval echo \$${name#lib}_deps))
5422 requires=${requires%, }
5423 enabled ${name#lib} || return 0
5425 cat <<EOF > $name/$name.pc
5427 exec_prefix=\${prefix}
5432 Description: $comment
5434 Requires: $(enabled shared || echo $requires)
5435 Requires.private: $(enabled shared && echo $requires)
5437 Libs: -L\${libdir} -l${shortname} $(enabled shared || echo $libs)
5438 Libs.private: $(enabled shared && echo $libs)
5439 Cflags: -I\${includedir}
5441 cat <<EOF > $name/$name-uninstalled.pc
5444 libdir=\${pcfiledir}
5445 includedir=${source_path}
5448 Description: $comment
5452 Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
5453 Cflags: -I\${includedir}
5457 pkgconfig_generate libavutil "Libav utility library" "$LIBAVUTIL_VERSION" "$LIBRT $LIBM"
5458 pkgconfig_generate libavcodec "Libav codec library" "$LIBAVCODEC_VERSION" "$extralibs"
5459 pkgconfig_generate libavformat "Libav container format library" "$LIBAVFORMAT_VERSION" "$extralibs"
5460 pkgconfig_generate libavdevice "Libav device handling library" "$LIBAVDEVICE_VERSION" "$extralibs"
5461 pkgconfig_generate libavfilter "Libav video filtering library" "$LIBAVFILTER_VERSION" "$extralibs"
5462 pkgconfig_generate libavresample "Libav audio resampling library" "$LIBAVRESAMPLE_VERSION" "$LIBM"
5463 pkgconfig_generate libswscale "Libav image rescaling library" "$LIBSWSCALE_VERSION" "$LIBM"