summaryrefslogtreecommitdiff
path: root/configure (plain)
blob: 9b5789ab83309076b31254261db271fa5aed946a
1#!/bin/sh
2#
3# FFmpeg configure script
4#
5# Copyright (c) 2000-2002 Fabrice Bellard
6# Copyright (c) 2005-2008 Diego Biurrun
7# Copyright (c) 2005-2008 Mans Rullgard
8#
9
10# Prevent locale nonsense from breaking basic text processing.
11LC_ALL=C
12export LC_ALL
13
14# make sure we are running under a compatible shell
15# try to make this part work with most shells
16
17try_exec(){
18 echo "Trying shell $1"
19 type "$1" > /dev/null 2>&1 && exec "$@"
20}
21
22unset foo
23(: ${foo%%bar}) 2> /dev/null
24E1="$?"
25
26(: ${foo?}) 2> /dev/null
27E2="$?"
28
29if test "$E1" != 0 || test "$E2" = 0; then
30 echo "Broken shell detected. Trying alternatives."
31 export FF_CONF_EXEC
32 if test "0$FF_CONF_EXEC" -lt 1; then
33 FF_CONF_EXEC=1
34 try_exec bash "$0" "$@"
35 fi
36 if test "0$FF_CONF_EXEC" -lt 2; then
37 FF_CONF_EXEC=2
38 try_exec ksh "$0" "$@"
39 fi
40 if test "0$FF_CONF_EXEC" -lt 3; then
41 FF_CONF_EXEC=3
42 try_exec /usr/xpg4/bin/sh "$0" "$@"
43 fi
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 FFMPEG, 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 FFmpeg."
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."
53 fi
54 exit 1
55fi
56
57test -d /usr/xpg4/bin && PATH=/usr/xpg4/bin:$PATH
58
59show_help(){
60 cat <<EOF
61Usage: configure [options]
62Options: [defaults in brackets after descriptions]
63
64Help options:
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
78
79Standard options:
80 --logfile=FILE log tests and output to FILE [config.log]
81 --disable-logging do not log configure debug information
82 --fatal-warnings fail if any configure warning is generated
83 --prefix=PREFIX install in PREFIX [$prefix_default]
84 --bindir=DIR install binaries in DIR [PREFIX/bin]
85 --datadir=DIR install data files in DIR [PREFIX/share/ffmpeg]
86 --docdir=DIR install documentation in DIR [PREFIX/share/doc/ffmpeg]
87 --libdir=DIR install libs in DIR [PREFIX/lib]
88 --shlibdir=DIR install shared libs in DIR [LIBDIR]
89 --incdir=DIR install includes in DIR [PREFIX/include]
90 --mandir=DIR install man page in DIR [PREFIX/share/man]
91 --pkgconfigdir=DIR install pkg-config files in DIR [LIBDIR/pkgconfig]
92 --enable-rpath use rpath to allow installing libraries in paths
93 not part of the dynamic linker search path
94 use rpath when linking programs (USE WITH CARE)
95 --install-name-dir=DIR Darwin directory name for installed targets
96
97Licensing options:
98 --enable-gpl allow use of GPL code, the resulting libs
99 and binaries will be under GPL [no]
100 --enable-version3 upgrade (L)GPL to version 3 [no]
101 --enable-nonfree allow use of nonfree code, the resulting libs
102 and binaries will be unredistributable [no]
103
104Configuration options:
105 --disable-static do not build static libraries [no]
106 --enable-shared build shared libraries [no]
107 --enable-small optimize for size instead of speed
108 --disable-runtime-cpudetect disable detecting CPU capabilities at runtime (smaller binary)
109 --enable-gray enable full grayscale support (slower color)
110 --disable-swscale-alpha disable alpha channel support in swscale
111 --disable-all disable building components, libraries and programs
112 --enable-raise-major increase major version numbers in sonames [no]
113
114Program options:
115 --disable-programs do not build command line programs
116 --disable-ffmpeg disable ffmpeg build
117 --disable-ffplay disable ffplay build
118 --disable-ffprobe disable ffprobe build
119 --disable-ffserver disable ffserver build
120
121Documentation options:
122 --disable-doc do not build documentation
123 --disable-htmlpages do not build HTML documentation pages
124 --disable-manpages do not build man documentation pages
125 --disable-podpages do not build POD documentation pages
126 --disable-txtpages do not build text documentation pages
127
128Component options:
129 --disable-avdevice disable libavdevice build
130 --disable-avcodec disable libavcodec build
131 --disable-avformat disable libavformat build
132 --disable-swresample disable libswresample build
133 --disable-swscale disable libswscale build
134 --disable-postproc disable libpostproc build
135 --disable-avfilter disable libavfilter build
136 --enable-avresample enable libavresample build [no]
137 --disable-pthreads disable pthreads [autodetect]
138 --disable-w32threads disable Win32 threads [autodetect]
139 --disable-os2threads disable OS/2 threads [autodetect]
140 --disable-network disable network support [no]
141 --disable-dct disable DCT code
142 --disable-dwt disable DWT code
143 --disable-error-resilience disable error resilience code
144 --disable-lsp disable LSP code
145 --disable-lzo disable LZO decoder code
146 --disable-mdct disable MDCT code
147 --disable-rdft disable RDFT code
148 --disable-fft disable FFT code
149 --disable-faan disable floating point AAN (I)DCT code
150 --disable-pixelutils disable pixel utils in libavutil
151
152Individual component options:
153 --disable-everything disable all components listed below
154 --disable-encoder=NAME disable encoder NAME
155 --enable-encoder=NAME enable encoder NAME
156 --disable-encoders disable all encoders
157 --disable-decoder=NAME disable decoder NAME
158 --enable-decoder=NAME enable decoder NAME
159 --disable-decoders disable all decoders
160 --disable-hwaccel=NAME disable hwaccel NAME
161 --enable-hwaccel=NAME enable hwaccel NAME
162 --disable-hwaccels disable all hwaccels
163 --disable-muxer=NAME disable muxer NAME
164 --enable-muxer=NAME enable muxer NAME
165 --disable-muxers disable all muxers
166 --disable-demuxer=NAME disable demuxer NAME
167 --enable-demuxer=NAME enable demuxer NAME
168 --disable-demuxers disable all demuxers
169 --enable-parser=NAME enable parser NAME
170 --disable-parser=NAME disable parser NAME
171 --disable-parsers disable all parsers
172 --enable-bsf=NAME enable bitstream filter NAME
173 --disable-bsf=NAME disable bitstream filter NAME
174 --disable-bsfs disable all bitstream filters
175 --enable-protocol=NAME enable protocol NAME
176 --disable-protocol=NAME disable protocol NAME
177 --disable-protocols disable all protocols
178 --enable-indev=NAME enable input device NAME
179 --disable-indev=NAME disable input device NAME
180 --disable-indevs disable input devices
181 --enable-outdev=NAME enable output device NAME
182 --disable-outdev=NAME disable output device NAME
183 --disable-outdevs disable output devices
184 --disable-devices disable all devices
185 --enable-filter=NAME enable filter NAME
186 --disable-filter=NAME disable filter NAME
187 --disable-filters disable all filters
188
189External library support:
190
191 Using any of the following switches will allow FFmpeg to link to the
192 corresponding external library. All the components depending on that library
193 will become enabled, if all their other dependencies are met and they are not
194 explicitly disabled. E.g. --enable-libwavpack will enable linking to
195 libwavpack and allow the libwavpack encoder to be built, unless it is
196 specifically disabled with --disable-encoder=libwavpack.
197
198 Note that only the system libraries are auto-detected. All the other external
199 libraries must be explicitly enabled.
200
201 Also note that the following help text describes the purpose of the libraries
202 themselves, not all their features will necessarily be usable by FFmpeg.
203
204 --enable-avisynth enable reading of AviSynth script files [no]
205 --disable-bzlib disable bzlib [autodetect]
206 --enable-chromaprint enable audio fingerprinting with chromaprint [no]
207 --enable-frei0r enable frei0r video filtering [no]
208 --enable-gcrypt enable gcrypt, needed for rtmp(t)e support
209 if openssl, librtmp or gmp is not used [no]
210 --enable-gmp enable gmp, needed for rtmp(t)e support
211 if openssl or librtmp is not used [no]
212 --enable-gnutls enable gnutls, needed for https support
213 if openssl is not used [no]
214 --disable-iconv disable iconv [autodetect]
215 --enable-jni enable JNI support [no]
216 --enable-ladspa enable LADSPA audio filtering [no]
217 --enable-libass enable libass subtitles rendering,
218 needed for subtitles and ass filter [no]
219 --enable-libbluray enable BluRay reading using libbluray [no]
220 --enable-libbs2b enable bs2b DSP library [no]
221 --enable-libcaca enable textual display using libcaca [no]
222 --enable-libcelt enable CELT decoding via libcelt [no]
223 --enable-libcdio enable audio CD grabbing with libcdio [no]
224 --enable-libdc1394 enable IIDC-1394 grabbing using libdc1394
225 and libraw1394 [no]
226 --enable-libfdk-aac enable AAC de/encoding via libfdk-aac [no]
227 --enable-libflite enable flite (voice synthesis) support via libflite [no]
228 --enable-libfontconfig enable libfontconfig, useful for drawtext filter [no]
229 --enable-libfreetype enable libfreetype, needed for drawtext filter [no]
230 --enable-libfribidi enable libfribidi, improves drawtext filter [no]
231 --enable-libgme enable Game Music Emu via libgme [no]
232 --enable-libgsm enable GSM de/encoding via libgsm [no]
233 --enable-libiec61883 enable iec61883 via libiec61883 [no]
234 --enable-libilbc enable iLBC de/encoding via libilbc [no]
235 --enable-libkvazaar enable HEVC encoding via libkvazaar [no]
236 --enable-libmodplug enable ModPlug via libmodplug [no]
237 --enable-libmp3lame enable MP3 encoding via libmp3lame [no]
238 --enable-libnut enable NUT (de)muxing via libnut,
239 native (de)muxer exists [no]
240 --enable-libopencore-amrnb enable AMR-NB de/encoding via libopencore-amrnb [no]
241 --enable-libopencore-amrwb enable AMR-WB decoding via libopencore-amrwb [no]
242 --enable-libopencv enable video filtering via libopencv [no]
243 --enable-libopenh264 enable H.264 encoding via OpenH264 [no]
244 --enable-libopenjpeg enable JPEG 2000 de/encoding via OpenJPEG [no]
245 --enable-libopenmpt enable decoding tracked files via libopenmpt [no]
246 --enable-libopus enable Opus de/encoding via libopus [no]
247 --enable-libpulse enable Pulseaudio input via libpulse [no]
248 --enable-librubberband enable rubberband needed for rubberband filter [no]
249 --enable-librtmp enable RTMP[E] support via librtmp [no]
250 --enable-libschroedinger enable Dirac de/encoding via libschroedinger [no]
251 --enable-libshine enable fixed-point MP3 encoding via libshine [no]
252 --enable-libsmbclient enable Samba protocol via libsmbclient [no]
253 --enable-libsnappy enable Snappy compression, needed for hap encoding [no]
254 --enable-libsoxr enable Include libsoxr resampling [no]
255 --enable-libspeex enable Speex de/encoding via libspeex [no]
256 --enable-libssh enable SFTP protocol via libssh [no]
257 --enable-libtesseract enable Tesseract, needed for ocr filter [no]
258 --enable-libtheora enable Theora encoding via libtheora [no]
259 --enable-libtwolame enable MP2 encoding via libtwolame [no]
260 --enable-libv4l2 enable libv4l2/v4l-utils [no]
261 --enable-libvidstab enable video stabilization using vid.stab [no]
262 --enable-libvo-amrwbenc enable AMR-WB encoding via libvo-amrwbenc [no]
263 --enable-libvorbis enable Vorbis en/decoding via libvorbis,
264 native implementation exists [no]
265 --enable-libvpx enable VP8 and VP9 de/encoding via libvpx [no]
266 --enable-libwavpack enable wavpack encoding via libwavpack [no]
267 --enable-libwebp enable WebP encoding via libwebp [no]
268 --enable-libx264 enable H.264 encoding via x264 [no]
269 --enable-libx265 enable HEVC encoding via x265 [no]
270 --enable-libxavs enable AVS encoding via xavs [no]
271 --enable-libxcb enable X11 grabbing using XCB [autodetect]
272 --enable-libxcb-shm enable X11 grabbing shm communication [autodetect]
273 --enable-libxcb-xfixes enable X11 grabbing mouse rendering [autodetect]
274 --enable-libxcb-shape enable X11 grabbing shape rendering [autodetect]
275 --enable-libxvid enable Xvid encoding via xvidcore,
276 native MPEG-4/Xvid encoder exists [no]
277 --enable-libzimg enable z.lib, needed for zscale filter [no]
278 --enable-libzmq enable message passing via libzmq [no]
279 --enable-libzvbi enable teletext support via libzvbi [no]
280 --disable-lzma disable lzma [autodetect]
281 --enable-decklink enable Blackmagic DeckLink I/O support [no]
282 --enable-mediacodec enable Android MediaCodec support [no]
283 --enable-netcdf enable NetCDF, needed for sofalizer filter [no]
284 --enable-openal enable OpenAL 1.1 capture support [no]
285 --enable-opencl enable OpenCL code
286 --enable-opengl enable OpenGL rendering [no]
287 --enable-openssl enable openssl, needed for https support
288 if gnutls is not used [no]
289 --disable-schannel disable SChannel SSP, needed for TLS support on
290 Windows if openssl and gnutls are not used [autodetect]
291 --disable-sdl2 disable sdl2 [autodetect]
292 --disable-securetransport disable Secure Transport, needed for TLS support
293 on OSX if openssl and gnutls are not used [autodetect]
294 --disable-xlib disable xlib [autodetect]
295 --disable-zlib disable zlib [autodetect]
296
297 The following libraries provide various hardware acceleration features:
298 --disable-audiotoolbox disable Apple AudioToolbox code [autodetect]
299 --disable-cuda disable dynamically linked Nvidia CUDA code [autodetect]
300 --disable-cuvid disable Nvidia CUVID support [autodetect]
301 --disable-d3d11va disable Microsoft Direct3D 11 video acceleration code [autodetect]
302 --disable-dxva2 disable Microsoft DirectX 9 video acceleration code [autodetect]
303 --enable-libmfx enable Intel MediaSDK (AKA Quick Sync Video) code via libmfx [no]
304 --enable-libnpp enable Nvidia Performance Primitives-based code [no]
305 --enable-mmal enable Broadcom Multi-Media Abstraction Layer (Raspberry Pi) via MMAL [no]
306 --disable-nvenc disable Nvidia video encoding code [autodetect]
307 --enable-omx enable OpenMAX IL code [no]
308 --enable-omx-rpi enable OpenMAX IL code for Raspberry Pi [no]
309 --disable-vaapi disable Video Acceleration API (mainly Unix/Intel) code [autodetect]
310 --disable-vda disable Apple Video Decode Acceleration code [autodetect]
311 --disable-vdpau disable Nvidia Video Decode and Presentation API for Unix code [autodetect]
312 --disable-videotoolbox disable VideoToolbox code [autodetect]
313
314Toolchain options:
315 --arch=ARCH select architecture [$arch]
316 --cpu=CPU select the minimum required CPU (affects
317 instruction selection, may crash on older CPUs)
318 --cross-prefix=PREFIX use PREFIX for compilation tools [$cross_prefix]
319 --progs-suffix=SUFFIX program name suffix []
320 --enable-cross-compile assume a cross-compiler is used
321 --sysroot=PATH root of cross-build tree
322 --sysinclude=PATH location of cross-build system headers
323 --target-os=OS compiler targets OS [$target_os]
324 --target-exec=CMD command to run executables on target
325 --target-path=DIR path to view of build directory on target
326 --target-samples=DIR path to samples directory on target
327 --tempprefix=PATH force fixed dir/prefix instead of mktemp for checks
328 --toolchain=NAME set tool defaults according to NAME
329 --nm=NM use nm tool NM [$nm_default]
330 --ar=AR use archive tool AR [$ar_default]
331 --as=AS use assembler AS [$as_default]
332 --ln_s=LN_S use symbolic link tool LN_S [$ln_s_default]
333 --strip=STRIP use strip tool STRIP [$strip_default]
334 --windres=WINDRES use windows resource compiler WINDRES [$windres_default]
335 --yasmexe=EXE use yasm-compatible assembler EXE [$yasmexe_default]
336 --cc=CC use C compiler CC [$cc_default]
337 --cxx=CXX use C compiler CXX [$cxx_default]
338 --objcc=OCC use ObjC compiler OCC [$cc_default]
339 --dep-cc=DEPCC use dependency generator DEPCC [$cc_default]
340 --ld=LD use linker LD [$ld_default]
341 --pkg-config=PKGCONFIG use pkg-config tool PKGCONFIG [$pkg_config_default]
342 --pkg-config-flags=FLAGS pass additional flags to pkgconf []
343 --ranlib=RANLIB use ranlib RANLIB [$ranlib_default]
344 --doxygen=DOXYGEN use DOXYGEN to generate API doc [$doxygen_default]
345 --host-cc=HOSTCC use host C compiler HOSTCC
346 --host-cflags=HCFLAGS use HCFLAGS when compiling for host
347 --host-cppflags=HCPPFLAGS use HCPPFLAGS when compiling for host
348 --host-ld=HOSTLD use host linker HOSTLD
349 --host-ldflags=HLDFLAGS use HLDFLAGS when linking for host
350 --host-libs=HLIBS use libs HLIBS when linking for host
351 --host-os=OS compiler host OS [$target_os]
352 --extra-cflags=ECFLAGS add ECFLAGS to CFLAGS [$CFLAGS]
353 --extra-cxxflags=ECFLAGS add ECFLAGS to CXXFLAGS [$CXXFLAGS]
354 --extra-objcflags=FLAGS add FLAGS to OBJCFLAGS [$CFLAGS]
355 --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]
356 --extra-ldexeflags=ELDFLAGS add ELDFLAGS to LDEXEFLAGS [$LDEXEFLAGS]
357 --extra-ldlibflags=ELDFLAGS add ELDFLAGS to LDLIBFLAGS [$LDLIBFLAGS]
358 --extra-libs=ELIBS add ELIBS [$ELIBS]
359 --extra-version=STRING version string suffix []
360 --optflags=OPTFLAGS override optimization-related compiler flags
361 --build-suffix=SUFFIX library name suffix []
362 --enable-pic build position-independent code
363 --enable-thumb compile for Thumb instruction set
364 --enable-lto use link-time optimization
365 --env="ENV=override" override the environment variables
366
367Advanced options (experts only):
368 --malloc-prefix=PREFIX prefix malloc and related names with PREFIX
369 --custom-allocator=NAME use a supported custom allocator
370 --disable-symver disable symbol versioning
371 --enable-hardcoded-tables use hardcoded tables instead of runtime generation
372 --disable-safe-bitstream-reader
373 disable buffer boundary checking in bitreaders
374 (faster, but may crash)
375 --sws-max-filter-size=N the max filter size swscale uses [$sws_max_filter_size_default]
376
377Optimization options (experts only):
378 --disable-asm disable all assembly optimizations
379 --disable-altivec disable AltiVec optimizations
380 --disable-vsx disable VSX optimizations
381 --disable-power8 disable POWER8 optimizations
382 --disable-amd3dnow disable 3DNow! optimizations
383 --disable-amd3dnowext disable 3DNow! extended optimizations
384 --disable-mmx disable MMX optimizations
385 --disable-mmxext disable MMXEXT optimizations
386 --disable-sse disable SSE optimizations
387 --disable-sse2 disable SSE2 optimizations
388 --disable-sse3 disable SSE3 optimizations
389 --disable-ssse3 disable SSSE3 optimizations
390 --disable-sse4 disable SSE4 optimizations
391 --disable-sse42 disable SSE4.2 optimizations
392 --disable-avx disable AVX optimizations
393 --disable-xop disable XOP optimizations
394 --disable-fma3 disable FMA3 optimizations
395 --disable-fma4 disable FMA4 optimizations
396 --disable-avx2 disable AVX2 optimizations
397 --disable-aesni disable AESNI optimizations
398 --disable-armv5te disable armv5te optimizations
399 --disable-armv6 disable armv6 optimizations
400 --disable-armv6t2 disable armv6t2 optimizations
401 --disable-vfp disable VFP optimizations
402 --disable-neon disable NEON optimizations
403 --disable-inline-asm disable use of inline assembly
404 --disable-yasm disable use of nasm/yasm assembly
405 --disable-mipsdsp disable MIPS DSP ASE R1 optimizations
406 --disable-mipsdspr2 disable MIPS DSP ASE R2 optimizations
407 --disable-msa disable MSA optimizations
408 --disable-mipsfpu disable floating point MIPS optimizations
409 --disable-mmi disable Loongson SIMD optimizations
410 --disable-fast-unaligned consider unaligned accesses slow
411
412Developer options (useful when working on FFmpeg itself):
413 --disable-debug disable debugging symbols
414 --enable-debug=LEVEL set the debug level [$debuglevel]
415 --disable-optimizations disable compiler optimizations
416 --enable-extra-warnings enable more compiler warnings
417 --disable-stripping disable stripping of executables and shared libraries
418 --assert-level=level 0(default), 1 or 2, amount of assertion testing,
419 2 causes a slowdown at runtime.
420 --enable-memory-poisoning fill heap uninitialized allocated space with arbitrary data
421 --valgrind=VALGRIND run "make fate" tests through valgrind to detect memory
422 leaks and errors, using the specified valgrind binary.
423 Cannot be combined with --target-exec
424 --enable-ftrapv Trap arithmetic overflows
425 --samples=PATH location of test samples for FATE, if not set use
426 \$FATE_SAMPLES at make invocation time.
427 --enable-neon-clobber-test check NEON registers for clobbering (should be
428 used only for debugging purposes)
429 --enable-xmm-clobber-test check XMM registers for clobbering (Win64-only;
430 should be used only for debugging purposes)
431 --enable-random randomly enable/disable components
432 --disable-random
433 --enable-random=LIST randomly enable/disable specific components or
434 --disable-random=LIST component groups. LIST is a comma-separated list
435 of NAME[:PROB] entries where NAME is a component
436 (group) and PROB the probability associated with
437 NAME (default 0.5).
438 --random-seed=VALUE seed value for --enable/disable-random
439 --disable-valgrind-backtrace do not print a backtrace under Valgrind
440 (only applies to --disable-optimizations builds)
441
442NOTE: Object files are built at the place where configure is launched.
443EOF
444 exit 0
445}
446
447quotes='""'
448if test -t 1 && which tput >/dev/null 2>&1; then
449 ncolors=$(tput colors)
450 if test -n "$ncolors" && test $ncolors -ge 8; then
451 bold_color=$(tput bold)
452 warn_color=$(tput setaf 3)
453 error_color=$(tput setaf 1)
454 reset_color=$(tput sgr0)
455 fi
456 # 72 used instead of 80 since that's the default of pr
457 ncols=$(tput cols)
458fi
459: ${ncols:=72}
460
461log(){
462 echo "$@" >> $logfile
463}
464
465log_file(){
466 log BEGIN $1
467 pr -n -t $1 >> $logfile
468 log END $1
469}
470
471warn(){
472 log "WARNING: $*"
473 WARNINGS="${WARNINGS}WARNING: $*\n"
474}
475
476die(){
477 log "$@"
478 echo "$error_color$bold_color$@$reset_color"
479 cat <<EOF
480
481If you think configure made a mistake, make sure you are using the latest
482version from Git. If the latest version fails, report the problem to the
483ffmpeg-user@ffmpeg.org mailing list or IRC #ffmpeg on irc.freenode.net.
484EOF
485 if disabled logging; then
486 cat <<EOF
487Rerun configure with logging enabled (do not use --disable-logging), and
488include the log this produces with your report.
489EOF
490 else
491 cat <<EOF
492Include the log file "$logfile" produced by configure as this will help
493solve the problem.
494EOF
495 fi
496 exit 1
497}
498
499# Avoid locale weirdness, besides we really just want to translate ASCII.
500toupper(){
501 echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
502}
503
504tolower(){
505 echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
506}
507
508c_escape(){
509 echo "$*" | sed 's/["\\]/\\\0/g'
510}
511
512sh_quote(){
513 v=$(echo "$1" | sed "s/'/'\\\\''/g")
514 test "x$v" = "x${v#*[!A-Za-z0-9_/.+-]}" || v="'$v'"
515 echo "$v"
516}
517
518cleanws(){
519 echo "$@" | sed 's/^ *//;s/[[:space:]][[:space:]]*/ /g;s/ *$//'
520}
521
522filter(){
523 pat=$1
524 shift
525 for v; do
526 eval "case $v in $pat) echo $v ;; esac"
527 done
528}
529
530filter_out(){
531 pat=$1
532 shift
533 for v; do
534 eval "case $v in $pat) ;; *) echo $v ;; esac"
535 done
536}
537
538map(){
539 m=$1
540 shift
541 for v; do eval $m; done
542}
543
544add_suffix(){
545 suffix=$1
546 shift
547 for v; do echo ${v}${suffix}; done
548}
549
550set_all(){
551 value=$1
552 shift
553 for var in $*; do
554 eval $var=$value
555 done
556}
557
558set_weak(){
559 value=$1
560 shift
561 for var; do
562 eval : \${$var:=$value}
563 done
564}
565
566sanitize_var_name(){
567 echo $@ | sed 's/[^A-Za-z0-9_]/_/g'
568}
569
570set_safe(){
571 var=$1
572 shift
573 eval $(sanitize_var_name "$var")='$*'
574}
575
576get_safe(){
577 eval echo \$$(sanitize_var_name "$1")
578}
579
580pushvar(){
581 for pvar in $*; do
582 eval level=\${${pvar}_level:=0}
583 eval ${pvar}_${level}="\$$pvar"
584 eval ${pvar}_level=$(($level+1))
585 done
586}
587
588popvar(){
589 for pvar in $*; do
590 eval level=\${${pvar}_level:-0}
591 test $level = 0 && continue
592 eval level=$(($level-1))
593 eval $pvar="\${${pvar}_${level}}"
594 eval ${pvar}_level=$level
595 eval unset ${pvar}_${level}
596 done
597}
598
599request(){
600 for var in $*; do
601 eval ${var}_requested=yes
602 eval $var=
603 done
604}
605
606enable(){
607 set_all yes $*
608}
609
610disable(){
611 set_all no $*
612}
613
614enable_weak(){
615 set_weak yes $*
616}
617
618disable_weak(){
619 set_weak no $*
620}
621
622enable_safe(){
623 for var; do
624 enable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
625 done
626}
627
628disable_safe(){
629 for var; do
630 disable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
631 done
632}
633
634do_enable_deep(){
635 for var; do
636 enabled $var && continue
637 eval sel="\$${var}_select"
638 eval sgs="\$${var}_suggest"
639 pushvar var sgs
640 enable_deep $sel
641 popvar sgs
642 enable_deep_weak $sgs
643 popvar var
644 done
645}
646
647enable_deep(){
648 do_enable_deep $*
649 enable $*
650}
651
652enable_deep_weak(){
653 for var; do
654 disabled $var && continue
655 pushvar var
656 do_enable_deep $var
657 popvar var
658 enable_weak $var
659 done
660}
661
662requested(){
663 test "${1#!}" = "$1" && op='=' || op=!=
664 eval test "x\$${1#!}_requested" $op "xyes"
665}
666
667enabled(){
668 test "${1#!}" = "$1" && op='=' || op=!=
669 eval test "x\$${1#!}" $op "xyes"
670}
671
672disabled(){
673 test "${1#!}" = "$1" && op='=' || op=!=
674 eval test "x\$${1#!}" $op "xno"
675}
676
677enabled_all(){
678 for opt; do
679 enabled $opt || return 1
680 done
681}
682
683disabled_all(){
684 for opt; do
685 disabled $opt || return 1
686 done
687}
688
689enabled_any(){
690 for opt; do
691 enabled $opt && return 0
692 done
693}
694
695disabled_any(){
696 for opt; do
697 disabled $opt && return 0
698 done
699 return 1
700}
701
702set_default(){
703 for opt; do
704 eval : \${$opt:=\$${opt}_default}
705 done
706}
707
708is_in(){
709 value=$1
710 shift
711 for var in $*; do
712 [ $var = $value ] && return 0
713 done
714 return 1
715}
716
717do_check_deps(){
718 for cfg; do
719 cfg="${cfg#!}"
720 enabled ${cfg}_checking && die "Circular dependency for $cfg."
721 disabled ${cfg}_checking && continue
722 enable ${cfg}_checking
723 append allopts $cfg
724
725 eval dep_all="\$${cfg}_deps"
726 eval dep_any="\$${cfg}_deps_any"
727 eval dep_sel="\$${cfg}_select"
728 eval dep_sgs="\$${cfg}_suggest"
729 eval dep_ifa="\$${cfg}_if"
730 eval dep_ifn="\$${cfg}_if_any"
731
732 pushvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
733 do_check_deps $dep_all $dep_any $dep_sel $dep_sgs $dep_ifa $dep_ifn
734 popvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
735
736 [ -n "$dep_ifa" ] && { enabled_all $dep_ifa && enable_weak $cfg; }
737 [ -n "$dep_ifn" ] && { enabled_any $dep_ifn && enable_weak $cfg; }
738 enabled_all $dep_all || { disable $cfg && requested $cfg && die "ERROR: $cfg requested, but not all dependencies are satisfied: $dep_all"; }
739 enabled_any $dep_any || { disable $cfg && requested $cfg && die "ERROR: $cfg requested, but not any dependency is satisfied: $dep_any"; }
740 disabled_any $dep_sel && { disable $cfg && requested $cfg && die "ERROR: $cfg requested, but some selected dependency is unsatisfied: $dep_sel"; }
741
742 if enabled $cfg; then
743 enable_deep $dep_sel
744 enable_deep_weak $dep_sgs
745 fi
746
747 disable ${cfg}_checking
748 done
749}
750
751check_deps(){
752 unset allopts
753
754 do_check_deps "$@"
755
756 for cfg in $allopts; do
757 enabled $cfg || continue
758 eval dep_extralibs="\$${cfg}_extralibs"
759 test -n "$dep_extralibs" && add_extralibs $dep_extralibs
760 done
761}
762
763print_config(){
764 pfx=$1
765 files=$2
766 shift 2
767 map 'eval echo "$v \${$v:-no}"' "$@" |
768 awk "BEGIN { split(\"$files\", files) }
769 {
770 c = \"$pfx\" toupper(\$1);
771 v = \$2;
772 sub(/yes/, 1, v);
773 sub(/no/, 0, v);
774 for (f in files) {
775 file = files[f];
776 if (file ~ /\\.h\$/) {
777 printf(\"#define %s %d\\n\", c, v) >>file;
778 } else if (file ~ /\\.asm\$/) {
779 printf(\"%%define %s %d\\n\", c, v) >>file;
780 } else if (file ~ /\\.mak\$/) {
781 n = -v ? \"\" : \"!\";
782 printf(\"%s%s=yes\\n\", n, c) >>file;
783 } else if (file ~ /\\.texi\$/) {
784 pre = -v ? \"\" : \"@c \";
785 yesno = \$2;
786 c2 = tolower(c);
787 gsub(/_/, \"-\", c2);
788 printf(\"%s@set %s %s\\n\", pre, c2, yesno) >>file;
789 }
790 }
791 }"
792}
793
794print_enabled(){
795 suf=$1
796 shift
797 for v; do
798 enabled $v && printf "%s\n" ${v%$suf}
799 done
800}
801
802append(){
803 var=$1
804 shift
805 eval "$var=\"\$$var $*\""
806}
807
808prepend(){
809 var=$1
810 shift
811 eval "$var=\"$* \$$var\""
812}
813
814unique(){
815 var=$1
816 uniq_list=""
817 for tok in $(eval echo \$$var); do
818 uniq_list="$(filter_out $tok $uniq_list) $tok"
819 done
820 eval "$var=\"${uniq_list}\""
821}
822
823add_cppflags(){
824 append CPPFLAGS "$@"
825}
826
827add_cflags(){
828 append CFLAGS $($cflags_filter "$@")
829}
830
831add_cxxflags(){
832 append CXXFLAGS $($cflags_filter "$@")
833}
834
835add_asflags(){
836 append ASFLAGS $($asflags_filter "$@")
837}
838
839add_objcflags(){
840 append OBJCFLAGS $($objcflags_filter "$@")
841}
842
843add_ldflags(){
844 append LDFLAGS $($ldflags_filter "$@")
845}
846
847add_ldexeflags(){
848 append LDEXEFLAGS $($ldflags_filter "$@")
849}
850
851add_ldlibflags(){
852 append LDLIBFLAGS $($ldflags_filter "$@")
853}
854
855add_stripflags(){
856 append ASMSTRIPFLAGS "$@"
857}
858
859add_extralibs(){
860 prepend extralibs $($ldflags_filter "$@")
861}
862
863add_host_cppflags(){
864 append host_cppflags "$@"
865}
866
867add_host_cflags(){
868 append host_cflags $($host_cflags_filter "$@")
869}
870
871add_host_ldflags(){
872 append host_ldflags $($host_ldflags_filter "$@")
873}
874
875add_compat(){
876 append compat_objs $1
877 shift
878 map 'add_cppflags -D$v' "$@"
879}
880
881check_cmd(){
882 log "$@"
883 "$@" >> $logfile 2>&1
884}
885
886check_stat(){
887 log check_stat "$@"
888 stat "$1" >> $logfile 2>&1
889}
890
891cc_o(){
892 eval printf '%s\\n' $CC_O
893}
894
895cc_e(){
896 eval printf '%s\\n' $CC_E
897}
898
899check_cc(){
900 log check_cc "$@"
901 cat > $TMPC
902 log_file $TMPC
903 check_cmd $cc $CPPFLAGS $CFLAGS "$@" $CC_C $(cc_o $TMPO) $TMPC
904}
905
906check_cxx(){
907 log check_cxx "$@"
908 cat > $TMPCPP
909 log_file $TMPCPP
910 check_cmd $cxx $CPPFLAGS $CFLAGS $CXXFLAGS "$@" $CXX_C -o $TMPO $TMPCPP
911}
912
913check_objcc(){
914 log check_objcc "$@"
915 cat > $TMPM
916 log_file $TMPM
917 check_cmd $objcc -Werror=missing-prototypes $CPPFLAGS $CFLAGS $OBJCFLAGS "$@" $OBJCC_C $(cc_o $TMPO) $TMPM
918}
919
920check_cpp(){
921 log check_cpp "$@"
922 cat > $TMPC
923 log_file $TMPC
924 check_cmd $cc $CPPFLAGS $CFLAGS "$@" $(cc_e $TMPO) $TMPC
925}
926
927as_o(){
928 eval printf '%s\\n' $AS_O
929}
930
931check_as(){
932 log check_as "$@"
933 cat > $TMPS
934 log_file $TMPS
935 check_cmd $as $CPPFLAGS $ASFLAGS "$@" $AS_C $(as_o $TMPO) $TMPS
936}
937
938check_inline_asm(){
939 log check_inline_asm "$@"
940 name="$1"
941 code="$2"
942 shift 2
943 disable $name
944 check_cc "$@" <<EOF && enable $name
945void foo(void){ __asm__ volatile($code); }
946EOF
947}
948
949check_inline_asm_flags(){
950 log check_inline_asm_flags "$@"
951 name="$1"
952 code="$2"
953 flags=''
954 shift 2
955 while [ "$1" != "" ]; do
956 append flags $1
957 shift
958 done;
959 disable $name
960 cat > $TMPC <<EOF
961void foo(void){ __asm__ volatile($code); }
962EOF
963 log_file $TMPC
964 check_cmd $cc $CPPFLAGS $CFLAGS $flags "$@" $CC_C $(cc_o $TMPO) $TMPC &&
965 enable $name && add_cflags $flags && add_asflags $flags && add_ldflags $flags
966}
967
968check_insn(){
969 log check_insn "$@"
970 check_inline_asm ${1}_inline "\"$2\""
971 echo "$2" | check_as && enable ${1}_external || disable ${1}_external
972}
973
974check_yasm(){
975 log check_yasm "$@"
976 echo "$1" > $TMPS
977 log_file $TMPS
978 shift 1
979 check_cmd $yasmexe $YASMFLAGS -Werror "$@" -o $TMPO $TMPS
980}
981
982ld_o(){
983 eval printf '%s\\n' $LD_O
984}
985
986check_ld(){
987 log check_ld "$@"
988 type=$1
989 shift 1
990 flags=$(filter_out '-l*|*.so' $@)
991 libs=$(filter '-l*|*.so' $@)
992 check_$type $($cflags_filter $flags) || return
993 flags=$($ldflags_filter $flags)
994 libs=$($ldflags_filter $libs)
995 check_cmd $ld $LDFLAGS $LDEXEFLAGS $flags $(ld_o $TMPE) $TMPO $libs $extralibs
996}
997
998print_include(){
999 hdr=$1
1000 test "${hdr%.h}" = "${hdr}" &&
1001 echo "#include $hdr" ||
1002 echo "#include <$hdr>"
1003}
1004
1005check_code(){
1006 log check_code "$@"
1007 check=$1
1008 headers=$2
1009 code=$3
1010 shift 3
1011 {
1012 for hdr in $headers; do
1013 print_include $hdr
1014 done
1015 echo "int main(void) { $code; return 0; }"
1016 } | check_$check "$@"
1017}
1018
1019check_cppflags(){
1020 log check_cppflags "$@"
1021 check_cpp "$@" <<EOF && append CPPFLAGS "$@"
1022int x;
1023EOF
1024}
1025
1026test_cflags(){
1027 log test_cflags "$@"
1028 set -- $($cflags_filter "$@")
1029 check_cc "$@" <<EOF
1030int x;
1031EOF
1032}
1033
1034check_cflags(){
1035 log check_cflags "$@"
1036 test_cflags "$@" && add_cflags "$@"
1037}
1038
1039check_cxxflags(){
1040 log check_cxxflags "$@"
1041 set -- $($cflags_filter "$@")
1042 check_cxx "$@" <<EOF && append CXXFLAGS "$@"
1043int x;
1044EOF
1045}
1046
1047test_objcflags(){
1048 log test_objcflags "$@"
1049 set -- $($objcflags_filter "$@")
1050 check_objcc "$@" <<EOF
1051int x;
1052EOF
1053}
1054
1055check_objcflags(){
1056 log check_objcflags "$@"
1057 test_objcflags "$@" && add_objcflags "$@"
1058}
1059
1060test_ldflags(){
1061 log test_ldflags "$@"
1062 check_ld "cc" "$@" <<EOF
1063int main(void){ return 0; }
1064EOF
1065}
1066
1067check_ldflags(){
1068 log check_ldflags "$@"
1069 test_ldflags "$@" && add_ldflags "$@"
1070}
1071
1072test_stripflags(){
1073 log test_stripflags "$@"
1074 # call check_cc to get a fresh TMPO
1075 check_cc <<EOF
1076int main(void) { return 0; }
1077EOF
1078 check_cmd $strip $ASMSTRIPFLAGS "$@" $TMPO
1079}
1080
1081check_stripflags(){
1082 log check_stripflags "$@"
1083 test_stripflags "$@" && add_stripflags "$@"
1084}
1085
1086check_header(){
1087 log check_header "$@"
1088 header=$1
1089 shift
1090 disable_safe $header
1091 check_cpp "$@" <<EOF && enable_safe $header
1092#include <$header>
1093int x;
1094EOF
1095}
1096
1097check_header_objcc(){
1098 log check_header_objcc "$@"
1099 rm -f -- "$TMPO"
1100 header=$1
1101 shift
1102 disable_safe $header
1103 {
1104 echo "#include <$header>"
1105 echo "int main(void) { return 0; }"
1106 } | check_objcc && check_stat "$TMPO" && enable_safe $headers
1107}
1108
1109check_func(){
1110 log check_func "$@"
1111 func=$1
1112 shift
1113 disable $func
1114 check_ld "cc" "$@" <<EOF && enable $func
1115extern int $func();
1116int main(void){ $func(); }
1117EOF
1118}
1119
1120check_complexfunc(){
1121 log check_complexfunc "$@"
1122 func=$1
1123 narg=$2
1124 shift 2
1125 test $narg = 2 && args="f, g" || args="f * I"
1126 disable $func
1127 check_ld "cc" "$@" <<EOF && enable $func
1128#include <complex.h>
1129#include <math.h>
1130float foo(complex float f, complex float g) { return $func($args); }
1131int main(void){ return (int) foo; }
1132EOF
1133}
1134
1135check_mathfunc(){
1136 log check_mathfunc "$@"
1137 func=$1
1138 narg=$2
1139 shift 2
1140 test $narg = 2 && args="f, g" || args="f"
1141 disable $func
1142 check_ld "cc" "$@" <<EOF && enable $func
1143#include <math.h>
1144float foo(float f, float g) { return $func($args); }
1145int main(void){ return (int) foo; }
1146EOF
1147}
1148
1149check_func_headers(){
1150 log check_func_headers "$@"
1151 headers=$1
1152 funcs=$2
1153 shift 2
1154 {
1155 for hdr in $headers; do
1156 print_include $hdr
1157 done
1158 echo "#include <stdint.h>"
1159 for func in $funcs; do
1160 echo "long check_$func(void) { return (long) $func; }"
1161 done
1162 echo "int main(void) { int ret = 0;"
1163 # LTO could optimize out the test functions without this
1164 for func in $funcs; do
1165 echo " ret |= ((intptr_t)check_$func) & 0xFFFF;"
1166 done
1167 echo "return ret; }"
1168 } | check_ld "cc" "$@" && enable $funcs && enable_safe $headers
1169}
1170
1171check_class_headers_cpp(){
1172 log check_class_headers_cpp "$@"
1173 headers=$1
1174 classes=$2
1175 shift 2
1176 {
1177 for hdr in $headers; do
1178 echo "#include <$hdr>"
1179 done
1180 echo "int main(void) { "
1181 i=1
1182 for class in $classes; do
1183 echo "$class obj$i;"
1184 i=$(expr $i + 1)
1185 done
1186 echo "return 0; }"
1187 } | check_ld "cxx" "$@" && enable $funcs && enable_safe $headers
1188}
1189
1190check_cpp_condition(){
1191 log check_cpp_condition "$@"
1192 header=$1
1193 condition=$2
1194 shift 2
1195 check_cpp "$@" <<EOF
1196#include <$header>
1197#if !($condition)
1198#error "unsatisfied condition: $condition"
1199#endif
1200EOF
1201}
1202
1203test_cflags_cc(){
1204 log test_cflags_cc "$@"
1205 flags=$1
1206 header=$2
1207 condition=$3
1208 shift 3
1209 set -- $($cflags_filter "$flags")
1210 check_cc "$@" <<EOF
1211#include <$header>
1212#if !($condition)
1213#error "unsatisfied condition: $condition"
1214#endif
1215EOF
1216}
1217
1218check_lib(){
1219 log check_lib "$@"
1220 headers="$1"
1221 funcs="$2"
1222 shift 2
1223 check_func_headers "$headers" "$funcs" "$@" && add_extralibs "$@"
1224}
1225
1226check_lib_cpp(){
1227 log check_lib_cpp "$@"
1228 headers="$1"
1229 classes="$2"
1230 shift 2
1231 check_class_headers_cpp "$headers" "$classes" "$@" && add_extralibs "$@"
1232}
1233
1234check_pkg_config(){
1235 log check_pkg_config "$@"
1236 pkgandversion="$1"
1237 pkg="${1%% *}"
1238 headers="$2"
1239 funcs="$3"
1240 shift 3
1241 check_cmd $pkg_config --exists --print-errors $pkgandversion || return
1242 pkg_cflags=$($pkg_config --cflags $pkg_config_flags $pkg)
1243 pkg_libs=$($pkg_config --libs $pkg_config_flags $pkg)
1244 check_func_headers "$headers" "$funcs" $pkg_cflags $pkg_libs "$@" &&
1245 set_safe "${pkg}_cflags" $pkg_cflags &&
1246 set_safe "${pkg}_libs" $pkg_libs
1247}
1248
1249check_exec(){
1250 check_ld "cc" "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
1251}
1252
1253check_exec_crash(){
1254 log check_exec_crash "$@"
1255 code=$(cat)
1256
1257 # exit() is not async signal safe. _Exit (C99) and _exit (POSIX)
1258 # are safe but may not be available everywhere. Thus we use
1259 # raise(SIGTERM) instead. The check is run in a subshell so we
1260 # can redirect the "Terminated" message from the shell. SIGBUS
1261 # is not defined by standard C so it is used conditionally.
1262
1263 (check_exec "$@") >> $logfile 2>&1 <<EOF
1264#include <signal.h>
1265static void sighandler(int sig){
1266 raise(SIGTERM);
1267}
1268int foo(void){
1269 $code
1270}
1271int (*func_ptr)(void) = foo;
1272int main(void){
1273 signal(SIGILL, sighandler);
1274 signal(SIGFPE, sighandler);
1275 signal(SIGSEGV, sighandler);
1276#ifdef SIGBUS
1277 signal(SIGBUS, sighandler);
1278#endif
1279 return func_ptr();
1280}
1281EOF
1282}
1283
1284check_type(){
1285 log check_type "$@"
1286 headers=$1
1287 type=$2
1288 shift 2
1289 disable_safe "$type"
1290 check_code cc "$headers" "$type v" "$@" && enable_safe "$type"
1291}
1292
1293check_struct(){
1294 log check_struct "$@"
1295 headers=$1
1296 struct=$2
1297 member=$3
1298 shift 3
1299 disable_safe "${struct}_${member}"
1300 check_code cc "$headers" "const void *p = &(($struct *)0)->$member" "$@" &&
1301 enable_safe "${struct}_${member}"
1302}
1303
1304check_builtin(){
1305 log check_builtin "$@"
1306 name=$1
1307 headers=$2
1308 builtin=$3
1309 shift 3
1310 disable "$name"
1311 check_code ld "$headers" "$builtin" "cc" "$@" && enable "$name"
1312}
1313
1314check_compile_assert(){
1315 log check_compile_assert "$@"
1316 name=$1
1317 headers=$2
1318 condition=$3
1319 shift 3
1320 disable "$name"
1321 check_code cc "$headers" "char c[2 * !!($condition) - 1]" "$@" && enable "$name"
1322}
1323
1324require(){
1325 log require "$@"
1326 name="$1"
1327 headers="$2"
1328 func="$3"
1329 shift 3
1330 check_lib "$headers" $func "$@" || die "ERROR: $name not found"
1331}
1332
1333require_cpp(){
1334 name="$1"
1335 headers="$2"
1336 classes="$3"
1337 shift 3
1338 check_lib_cpp "$headers" "$classes" "$@" || die "ERROR: $name not found"
1339}
1340
1341use_pkg_config(){
1342 log use_pkg_config "$@"
1343 pkg="$1"
1344 check_pkg_config "$@" || return 1
1345 add_cflags $(get_safe "${pkg}_cflags")
1346 add_extralibs $(get_safe "${pkg}_libs")
1347}
1348
1349require_pkg_config(){
1350 use_pkg_config "$@" || die "ERROR: $pkg not found using pkg-config$pkg_config_fail_message"
1351}
1352
1353require_libfreetype(){
1354 log require_libfreetype "$@"
1355 pkg="freetype2"
1356 check_cmd $pkg_config --exists --print-errors $pkg \
1357 || die "ERROR: $pkg not found"
1358 pkg_cflags=$($pkg_config --cflags $pkg_config_flags $pkg)
1359 pkg_libs=$($pkg_config --libs $pkg_config_flags $pkg)
1360 {
1361 echo "#include <ft2build.h>"
1362 echo "#include FT_FREETYPE_H"
1363 echo "long check_func(void) { return (long) FT_Init_FreeType; }"
1364 echo "int main(void) { return 0; }"
1365 } | check_ld "cc" $pkg_cflags $pkg_libs \
1366 && set_safe "${pkg}_cflags" $pkg_cflags \
1367 && set_safe "${pkg}_libs" $pkg_libs \
1368 || die "ERROR: $pkg not found"
1369 add_cflags $(get_safe "${pkg}_cflags")
1370 add_extralibs $(get_safe "${pkg}_libs")
1371}
1372
1373hostcc_e(){
1374 eval printf '%s\\n' $HOSTCC_E
1375}
1376
1377hostcc_o(){
1378 eval printf '%s\\n' $HOSTCC_O
1379}
1380
1381check_host_cc(){
1382 log check_host_cc "$@"
1383 cat > $TMPC
1384 log_file $TMPC
1385 check_cmd $host_cc $host_cflags "$@" $HOSTCC_C $(hostcc_o $TMPO) $TMPC
1386}
1387
1388check_host_cpp(){
1389 log check_host_cpp "$@"
1390 cat > $TMPC
1391 log_file $TMPC
1392 check_cmd $host_cc $host_cppflags $host_cflags "$@" $(hostcc_e $TMPO) $TMPC
1393}
1394
1395check_host_cppflags(){
1396 log check_host_cppflags "$@"
1397 check_host_cpp "$@" <<EOF && append host_cppflags "$@"
1398int x;
1399EOF
1400}
1401
1402check_host_cflags(){
1403 log check_host_cflags "$@"
1404 set -- $($host_cflags_filter "$@")
1405 check_host_cc "$@" <<EOF && append host_cflags "$@"
1406int x;
1407EOF
1408}
1409
1410check_host_cpp_condition(){
1411 log check_host_cpp_condition "$@"
1412 header=$1
1413 condition=$2
1414 shift 2
1415 check_host_cpp "$@" <<EOF
1416#include <$header>
1417#if !($condition)
1418#error "unsatisfied condition: $condition"
1419#endif
1420EOF
1421}
1422
1423cp_if_changed(){
1424 cmp -s "$1" "$2" && { test "$quiet" != "yes" && echo "$2 is unchanged"; } && return
1425 mkdir -p "$(dirname $2)"
1426 $cp_f "$1" "$2"
1427}
1428
1429# CONFIG_LIST contains configurable options, while HAVE_LIST is for
1430# system-dependent things.
1431
1432AVCODEC_COMPONENTS="
1433 bsfs
1434 decoders
1435 encoders
1436 hwaccels
1437 parsers
1438"
1439
1440AVDEVICE_COMPONENTS="
1441 indevs
1442 outdevs
1443"
1444AVFILTER_COMPONENTS="
1445 filters
1446"
1447AVFORMAT_COMPONENTS="
1448 demuxers
1449 muxers
1450 protocols
1451"
1452
1453AVRESAMPLE_COMPONENTS=""
1454AVUTIL_COMPONENTS=""
1455
1456COMPONENT_LIST="
1457 $AVCODEC_COMPONENTS
1458 $AVDEVICE_COMPONENTS
1459 $AVFILTER_COMPONENTS
1460 $AVFORMAT_COMPONENTS
1461 $AVRESAMPLE_COMPONENTS
1462 $AVUTIL_COMPONENTS
1463"
1464
1465EXAMPLE_LIST="
1466 avio_dir_cmd_example
1467 avio_reading_example
1468 decode_audio_example
1469 decode_video_example
1470 demuxing_decoding_example
1471 encode_audio_example
1472 encode_video_example
1473 extract_mvs_example
1474 filter_audio_example
1475 filtering_audio_example
1476 filtering_video_example
1477 http_multiclient_example
1478 metadata_example
1479 muxing_example
1480 qsvdec_example
1481 remuxing_example
1482 resampling_audio_example
1483 scaling_video_example
1484 transcode_aac_example
1485 transcoding_example
1486"
1487EXTERNAL_AUTODETECT_LIBRARY_LIST="
1488 bzlib
1489 iconv
1490 libxcb
1491 libxcb_shm
1492 libxcb_shape
1493 libxcb_xfixes
1494 lzma
1495 schannel
1496 sdl
1497 sdl2
1498 securetransport
1499 xlib
1500 zlib
1501"
1502
1503EXTERNAL_LIBRARY_GPL_LIST="
1504 avisynth
1505 frei0r
1506 libcdio
1507 librubberband
1508 libvidstab
1509 libx264
1510 libx265
1511 libxavs
1512 libxvid
1513"
1514
1515EXTERNAL_LIBRARY_NONFREE_LIST="
1516 decklink
1517 libfdk_aac
1518 openssl
1519"
1520
1521EXTERNAL_LIBRARY_VERSION3_LIST="
1522 gmp
1523 libopencore_amrnb
1524 libopencore_amrwb
1525 libvo_amrwbenc
1526"
1527
1528EXTERNAL_LIBRARY_GPLV3_LIST="
1529 libsmbclient
1530"
1531
1532EXTERNAL_LIBRARY_LIST="
1533 $EXTERNAL_AUTODETECT_LIBRARY_LIST
1534 $EXTERNAL_LIBRARY_GPL_LIST
1535 $EXTERNAL_LIBRARY_NONFREE_LIST
1536 $EXTERNAL_LIBRARY_VERSION3_LIST
1537 $EXTERNAL_LIBRARY_GPLV3_LIST
1538 chromaprint
1539 crystalhd
1540 gcrypt
1541 gnutls
1542 jni
1543 ladspa
1544 libass
1545 libbluray
1546 libbs2b
1547 libcaca
1548 libcelt
1549 libdc1394
1550 libflite
1551 libfontconfig
1552 libfreetype
1553 libfribidi
1554 libgme
1555 libgsm
1556 libiec61883
1557 libilbc
1558 libkvazaar
1559 libmodplug
1560 libmp3lame
1561 libnut
1562 libopencv
1563 libopenh264
1564 libopenjpeg
1565 libopenmpt
1566 libopus
1567 libpulse
1568 librtmp
1569 libschroedinger
1570 libshine
1571 libsmbclient
1572 libsnappy
1573 libsoxr
1574 libspeex
1575 libssh
1576 libtesseract
1577 libtheora
1578 libtwolame
1579 libv4l2
1580 libvorbis
1581 libvpx
1582 libwavpack
1583 libwebp
1584 libzimg
1585 libzmq
1586 libzvbi
1587 mediacodec
1588 netcdf
1589 openal
1590 opencl
1591 opengl
1592 videotoolbox
1593"
1594HWACCEL_AUTODETECT_LIBRARY_LIST="
1595 audiotoolbox
1596 cuda
1597 cuvid
1598 d3d11va
1599 dxva2
1600 nvenc
1601 vaapi
1602 vda
1603 vdpau
1604 videotoolbox_hwaccel
1605 xvmc
1606"
1607
1608HWACCEL_LIBRARY_NONFREE_LIST="
1609 libnpp
1610"
1611
1612HWACCEL_LIBRARY_LIST="
1613 $HWACCEL_AUTODETECT_LIBRARY_LIST
1614 $HWACCEL_LIBRARY_NONFREE_LIST
1615 libmfx
1616 mmal
1617 omx
1618"
1619
1620DOCUMENT_LIST="
1621 doc
1622 htmlpages
1623 manpages
1624 podpages
1625 txtpages
1626"
1627
1628FEATURE_LIST="
1629 ftrapv
1630 gray
1631 hardcoded_tables
1632 omx_rpi
1633 runtime_cpudetect
1634 safe_bitstream_reader
1635 shared
1636 small
1637 static
1638 swscale_alpha
1639"
1640
1641LIBRARY_LIST="
1642 avcodec
1643 avdevice
1644 avfilter
1645 avformat
1646 avresample
1647 avutil
1648 postproc
1649 swresample
1650 swscale
1651"
1652
1653LICENSE_LIST="
1654 gpl
1655 nonfree
1656 version3
1657"
1658
1659PROGRAM_LIST="
1660 ffplay
1661 ffprobe
1662 ffserver
1663 ffmpeg
1664"
1665
1666SUBSYSTEM_LIST="
1667 dct
1668 dwt
1669 error_resilience
1670 faan
1671 fast_unaligned
1672 fft
1673 lsp
1674 lzo
1675 mdct
1676 pixelutils
1677 network
1678 rdft
1679"
1680
1681CONFIG_LIST="
1682 $COMPONENT_LIST
1683 $DOCUMENT_LIST
1684 $EXAMPLE_LIST
1685 $EXTERNAL_LIBRARY_LIST
1686 $HWACCEL_LIBRARY_LIST
1687 $FEATURE_LIST
1688 $LICENSE_LIST
1689 $LIBRARY_LIST
1690 $PROGRAM_LIST
1691 $SUBSYSTEM_LIST
1692 fontconfig
1693 memory_poisoning
1694 neon_clobber_test
1695 pic
1696 raise_major
1697 thumb
1698 valgrind_backtrace
1699 xmm_clobber_test
1700"
1701
1702THREADS_LIST="
1703 pthreads
1704 os2threads
1705 w32threads
1706"
1707
1708ATOMICS_LIST="
1709 atomics_gcc
1710 atomics_suncc
1711 atomics_win32
1712"
1713
1714AUTODETECT_LIBS="
1715 $EXTERNAL_AUTODETECT_LIBRARY_LIST
1716 $HWACCEL_AUTODETECT_LIBRARY_LIST
1717 $THREADS_LIST
1718"
1719
1720ARCH_LIST="
1721 aarch64
1722 alpha
1723 arm
1724 avr32
1725 avr32_ap
1726 avr32_uc
1727 bfin
1728 ia64
1729 m68k
1730 mips
1731 mips64
1732 parisc
1733 ppc
1734 ppc64
1735 s390
1736 sh4
1737 sparc
1738 sparc64
1739 tilegx
1740 tilepro
1741 tomi
1742 x86
1743 x86_32
1744 x86_64
1745"
1746
1747ARCH_EXT_LIST_ARM="
1748 armv5te
1749 armv6
1750 armv6t2
1751 armv8
1752 neon
1753 vfp
1754 vfpv3
1755 setend
1756"
1757
1758ARCH_EXT_LIST_MIPS="
1759 mipsfpu
1760 mips32r2
1761 mips32r5
1762 mips64r2
1763 mips32r6
1764 mips64r6
1765 mipsdsp
1766 mipsdspr2
1767 msa
1768"
1769
1770ARCH_EXT_LIST_LOONGSON="
1771 loongson2
1772 loongson3
1773 mmi
1774"
1775
1776ARCH_EXT_LIST_X86_SIMD="
1777 aesni
1778 amd3dnow
1779 amd3dnowext
1780 avx
1781 avx2
1782 fma3
1783 fma4
1784 mmx
1785 mmxext
1786 sse
1787 sse2
1788 sse3
1789 sse4
1790 sse42
1791 ssse3
1792 xop
1793"
1794
1795ARCH_EXT_LIST_PPC="
1796 altivec
1797 dcbzl
1798 ldbrx
1799 power8
1800 ppc4xx
1801 vsx
1802"
1803
1804ARCH_EXT_LIST_X86="
1805 $ARCH_EXT_LIST_X86_SIMD
1806 cpunop
1807 i686
1808"
1809
1810ARCH_EXT_LIST="
1811 $ARCH_EXT_LIST_ARM
1812 $ARCH_EXT_LIST_PPC
1813 $ARCH_EXT_LIST_X86
1814 $ARCH_EXT_LIST_MIPS
1815 $ARCH_EXT_LIST_LOONGSON
1816"
1817
1818ARCH_FEATURES="
1819 aligned_stack
1820 fast_64bit
1821 fast_clz
1822 fast_cmov
1823 local_aligned_8
1824 local_aligned_16
1825 local_aligned_32
1826 simd_align_16
1827 simd_align_32
1828"
1829
1830BUILTIN_LIST="
1831 atomic_cas_ptr
1832 machine_rw_barrier
1833 MemoryBarrier
1834 mm_empty
1835 rdtsc
1836 sarestart
1837 sem_timedwait
1838 sync_val_compare_and_swap
1839"
1840HAVE_LIST_CMDLINE="
1841 inline_asm
1842 symver
1843 yasm
1844"
1845
1846HAVE_LIST_PUB="
1847 bigendian
1848 fast_unaligned
1849"
1850
1851HEADERS_LIST="
1852 alsa_asoundlib_h
1853 altivec_h
1854 arpa_inet_h
1855 asm_types_h
1856 cdio_paranoia_h
1857 cdio_paranoia_paranoia_h
1858 cuda_h
1859 dispatch_dispatch_h
1860 dev_bktr_ioctl_bt848_h
1861 dev_bktr_ioctl_meteor_h
1862 dev_ic_bt8xx_h
1863 dev_video_bktr_ioctl_bt848_h
1864 dev_video_meteor_ioctl_meteor_h
1865 direct_h
1866 dirent_h
1867 dlfcn_h
1868 d3d11_h
1869 dxva_h
1870 ES2_gl_h
1871 gsm_h
1872 io_h
1873 mach_mach_time_h
1874 machine_ioctl_bt848_h
1875 machine_ioctl_meteor_h
1876 malloc_h
1877 opencv2_core_core_c_h
1878 openjpeg_2_1_openjpeg_h
1879 openjpeg_2_0_openjpeg_h
1880 openjpeg_1_5_openjpeg_h
1881 OpenGL_gl3_h
1882 poll_h
1883 sndio_h
1884 soundcard_h
1885 stdatomic_h
1886 sys_mman_h
1887 sys_param_h
1888 sys_resource_h
1889 sys_select_h
1890 sys_soundcard_h
1891 sys_time_h
1892 sys_un_h
1893 sys_videoio_h
1894 termios_h
1895 udplite_h
1896 unistd_h
1897 valgrind_valgrind_h
1898 windows_h
1899 winsock2_h
1900"
1901
1902INTRINSICS_LIST="
1903 intrinsics_neon
1904"
1905
1906COMPLEX_FUNCS="
1907 cabs
1908 cexp
1909"
1910
1911MATH_FUNCS="
1912 atanf
1913 atan2f
1914 cbrt
1915 cbrtf
1916 copysign
1917 cosf
1918 erf
1919 exp2
1920 exp2f
1921 expf
1922 hypot
1923 isfinite
1924 isinf
1925 isnan
1926 ldexpf
1927 llrint
1928 llrintf
1929 log2
1930 log2f
1931 log10f
1932 lrint
1933 lrintf
1934 powf
1935 rint
1936 round
1937 roundf
1938 sinf
1939 trunc
1940 truncf
1941"
1942
1943SYSTEM_FUNCS="
1944 access
1945 aligned_malloc
1946 arc4random
1947 clock_gettime
1948 closesocket
1949 CommandLineToArgvW
1950 CoTaskMemFree
1951 CryptGenRandom
1952 dlopen
1953 fcntl
1954 flt_lim
1955 fork
1956 getaddrinfo
1957 gethrtime
1958 getopt
1959 GetProcessAffinityMask
1960 GetProcessMemoryInfo
1961 GetProcessTimes
1962 getrusage
1963 GetSystemTimeAsFileTime
1964 gettimeofday
1965 glob
1966 glXGetProcAddress
1967 gmtime_r
1968 inet_aton
1969 isatty
1970 jack_port_get_latency_range
1971 kbhit
1972 LoadLibrary
1973 localtime_r
1974 lstat
1975 lzo1x_999_compress
1976 mach_absolute_time
1977 MapViewOfFile
1978 memalign
1979 mkstemp
1980 mmap
1981 mprotect
1982 nanosleep
1983 PeekNamedPipe
1984 posix_memalign
1985 pthread_cancel
1986 sched_getaffinity
1987 SetConsoleTextAttribute
1988 SetConsoleCtrlHandler
1989 setmode
1990 setrlimit
1991 Sleep
1992 strerror_r
1993 sysconf
1994 sysctl
1995 usleep
1996 UTGetOSTypeFromString
1997 VirtualAlloc
1998 wglGetProcAddress
1999"
2000
2001TOOLCHAIN_FEATURES="
2002 as_dn_directive
2003 as_fpu_directive
2004 as_func
2005 as_object_arch
2006 asm_mod_q
2007 attribute_may_alias
2008 attribute_packed
2009 ebp_available
2010 ebx_available
2011 gnu_as
2012 gnu_windres
2013 ibm_asm
2014 inline_asm_direct_symbol_refs
2015 inline_asm_labels
2016 inline_asm_nonlocal_labels
2017 pragma_deprecated
2018 rsync_contimeout
2019 symver_asm_label
2020 symver_gnu_asm
2021 vfp_args
2022 xform_asm
2023 xmm_clobbers
2024"
2025
2026TYPES_LIST="
2027 CONDITION_VARIABLE_Ptr
2028 socklen_t
2029 struct_addrinfo
2030 struct_group_source_req
2031 struct_ip_mreq_source
2032 struct_ipv6_mreq
2033 struct_msghdr_msg_flags
2034 struct_pollfd
2035 struct_rusage_ru_maxrss
2036 struct_sctp_event_subscribe
2037 struct_sockaddr_in6
2038 struct_sockaddr_sa_len
2039 struct_sockaddr_storage
2040 struct_stat_st_mtim_tv_nsec
2041 struct_v4l2_frmivalenum_discrete
2042"
2043
2044HAVE_LIST="
2045 $ARCH_EXT_LIST
2046 $(add_suffix _external $ARCH_EXT_LIST)
2047 $(add_suffix _inline $ARCH_EXT_LIST)
2048 $ARCH_FEATURES
2049 $ATOMICS_LIST
2050 $BUILTIN_LIST
2051 $COMPLEX_FUNCS
2052 $HAVE_LIST_CMDLINE
2053 $HAVE_LIST_PUB
2054 $HEADERS_LIST
2055 $INTRINSICS_LIST
2056 $MATH_FUNCS
2057 $SYSTEM_FUNCS
2058 $THREADS_LIST
2059 $TOOLCHAIN_FEATURES
2060 $TYPES_LIST
2061 atomics_native
2062 dos_paths
2063 dxva2_lib
2064 dxva2api_cobj
2065 libc_msvcrt
2066 libdc1394_1
2067 libdc1394_2
2068 makeinfo
2069 makeinfo_html
2070 MMAL_PARAMETER_VIDEO_MAX_NUM_CALLBACKS
2071 perl
2072 pod2man
2073 sdl2
2074 section_data_rel_ro
2075 texi2html
2076 threads
2077 vaapi_drm
2078 vaapi_x11
2079 vdpau_x11
2080 winrt
2081 xlib
2082"
2083
2084# options emitted with CONFIG_ prefix but not available on the command line
2085CONFIG_EXTRA="
2086 aandcttables
2087 ac3dsp
2088 audio_frame_queue
2089 audiodsp
2090 blockdsp
2091 bswapdsp
2092 cabac
2093 dirac_parse
2094 dvprofile
2095 exif
2096 faandct
2097 faanidct
2098 fdctdsp
2099 flacdsp
2100 fmtconvert
2101 frame_thread_encoder
2102 g722dsp
2103 golomb
2104 gplv3
2105 h263dsp
2106 h264chroma
2107 h264dsp
2108 h264parse
2109 h264pred
2110 h264qpel
2111 hpeldsp
2112 huffman
2113 huffyuvdsp
2114 huffyuvencdsp
2115 idctdsp
2116 iirfilter
2117 mdct15
2118 intrax8
2119 iso_media
2120 ividsp
2121 jpegtables
2122 lgplv3
2123 libx262
2124 llauddsp
2125 llviddsp
2126 llvidencdsp
2127 lpc
2128 lzf
2129 me_cmp
2130 mpeg_er
2131 mpegaudio
2132 mpegaudiodsp
2133 mpegvideo
2134 mpegvideoenc
2135 mss34dsp
2136 pixblockdsp
2137 qpeldsp
2138 qsv
2139 qsvdec
2140 qsvenc
2141 rangecoder
2142 riffdec
2143 riffenc
2144 rtpdec
2145 rtpenc_chain
2146 rv34dsp
2147 sinewin
2148 snappy
2149 srtp
2150 startcode
2151 texturedsp
2152 texturedspenc
2153 tpeldsp
2154 vaapi_encode
2155 vc1dsp
2156 videodsp
2157 vp3dsp
2158 vp56dsp
2159 vp8dsp
2160 vt_bt2020
2161 wma_freqs
2162 wmv2dsp
2163"
2164
2165CMDLINE_SELECT="
2166 $ARCH_EXT_LIST
2167 $CONFIG_LIST
2168 $HAVE_LIST_CMDLINE
2169 $THREADS_LIST
2170 asm
2171 cross_compile
2172 debug
2173 extra_warnings
2174 logging
2175 lto
2176 optimizations
2177 rpath
2178 stripping
2179"
2180
2181PATHS_LIST="
2182 bindir
2183 datadir
2184 docdir
2185 incdir
2186 libdir
2187 mandir
2188 pkgconfigdir
2189 prefix
2190 shlibdir
2191 install_name_dir
2192"
2193
2194CMDLINE_SET="
2195 $PATHS_LIST
2196 ar
2197 arch
2198 as
2199 assert_level
2200 build_suffix
2201 cc
2202 objcc
2203 cpu
2204 cross_prefix
2205 custom_allocator
2206 cxx
2207 dep_cc
2208 doxygen
2209 env
2210 extra_version
2211 gas
2212 host_cc
2213 host_cflags
2214 host_ld
2215 host_ldflags
2216 host_libs
2217 host_os
2218 install
2219 ld
2220 ln_s
2221 logfile
2222 malloc_prefix
2223 nm
2224 optflags
2225 pkg_config
2226 pkg_config_flags
2227 progs_suffix
2228 random_seed
2229 ranlib
2230 samples
2231 strip
2232 sws_max_filter_size
2233 sysinclude
2234 sysroot
2235 target_exec
2236 target_os
2237 target_path
2238 target_samples
2239 tempprefix
2240 toolchain
2241 valgrind
2242 yasmexe
2243"
2244
2245CMDLINE_APPEND="
2246 extra_cflags
2247 extra_cxxflags
2248 extra_objcflags
2249 host_cppflags
2250"
2251
2252# code dependency declarations
2253
2254# architecture extensions
2255
2256armv5te_deps="arm"
2257armv6_deps="arm"
2258armv6t2_deps="arm"
2259armv8_deps="aarch64"
2260neon_deps_any="aarch64 arm"
2261intrinsics_neon_deps="neon"
2262vfp_deps_any="aarch64 arm"
2263vfpv3_deps="vfp"
2264setend_deps="arm"
2265
2266map 'eval ${v}_inline_deps=inline_asm' $ARCH_EXT_LIST_ARM
2267
2268loongson2_deps="mips"
2269loongson3_deps="mips"
2270mipsfpu_deps="mips"
2271mipsdsp_deps="mips"
2272mipsdspr2_deps="mips"
2273mips32r2_deps="mips"
2274mips32r5_deps="mips"
2275mips32r6_deps="mips"
2276mips64r2_deps="mips"
2277mips64r6_deps="mips"
2278msa_deps="mipsfpu"
2279mmi_deps="mips"
2280
2281altivec_deps="ppc"
2282dcbzl_deps="ppc"
2283ldbrx_deps="ppc"
2284ppc4xx_deps="ppc"
2285vsx_deps="altivec"
2286power8_deps="vsx"
2287
2288cpunop_deps="i686"
2289x86_64_select="i686"
2290x86_64_suggest="fast_cmov"
2291
2292amd3dnow_deps="mmx"
2293amd3dnowext_deps="amd3dnow"
2294i686_deps="x86"
2295mmx_deps="x86"
2296mmxext_deps="mmx"
2297sse_deps="mmxext"
2298sse2_deps="sse"
2299sse3_deps="sse2"
2300ssse3_deps="sse3"
2301sse4_deps="ssse3"
2302sse42_deps="sse4"
2303aesni_deps="sse42"
2304avx_deps="sse42"
2305xop_deps="avx"
2306fma3_deps="avx"
2307fma4_deps="avx"
2308avx2_deps="avx"
2309
2310mmx_external_deps="yasm"
2311mmx_inline_deps="inline_asm"
2312mmx_suggest="mmx_external mmx_inline"
2313
2314for ext in $(filter_out mmx $ARCH_EXT_LIST_X86_SIMD); do
2315 eval dep=\$${ext}_deps
2316 eval ${ext}_external_deps='"${dep}_external"'
2317 eval ${ext}_inline_deps='"${dep}_inline"'
2318 eval ${ext}_suggest='"${ext}_external ${ext}_inline"'
2319done
2320
2321aligned_stack_if_any="aarch64 ppc x86"
2322fast_64bit_if_any="aarch64 alpha ia64 mips64 parisc64 ppc64 sparc64 x86_64"
2323fast_clz_if_any="aarch64 alpha avr32 mips ppc x86"
2324fast_unaligned_if_any="aarch64 ppc x86"
2325simd_align_16_if_any="altivec neon sse"
2326simd_align_32_if_any="avx"
2327
2328# system capabilities
2329symver_if_any="symver_asm_label symver_gnu_asm"
2330valgrind_backtrace_deps="!optimizations valgrind_valgrind_h"
2331
2332# threading support
2333atomics_gcc_if="sync_val_compare_and_swap"
2334atomics_suncc_if="atomic_cas_ptr machine_rw_barrier"
2335atomics_win32_if="MemoryBarrier"
2336atomics_native_if_any="$ATOMICS_LIST"
2337w32threads_deps="atomics_native"
2338threads_if_any="$THREADS_LIST"
2339
2340# subsystems
2341dct_select="rdft"
2342dirac_parse_select="golomb"
2343error_resilience_select="me_cmp"
2344faandct_deps="faan fdctdsp"
2345faanidct_deps="faan idctdsp"
2346h264dsp_select="startcode"
2347frame_thread_encoder_deps="encoders threads"
2348intrax8_select="blockdsp idctdsp"
2349mdct_select="fft"
2350mdct15_select="fft"
2351me_cmp_select="fdctdsp idctdsp pixblockdsp"
2352mpeg_er_select="error_resilience"
2353mpegaudio_select="mpegaudiodsp"
2354mpegaudiodsp_select="dct"
2355mpegvideo_select="blockdsp h264chroma hpeldsp idctdsp me_cmp mpeg_er videodsp"
2356mpegvideoenc_select="me_cmp mpegvideo pixblockdsp qpeldsp"
2357vc1dsp_select="h264chroma qpeldsp startcode"
2358rdft_select="fft"
2359
2360# decoders / encoders
2361aac_decoder_select="mdct15 mdct sinewin"
2362aac_fixed_decoder_select="mdct sinewin"
2363aac_encoder_select="audio_frame_queue iirfilter lpc mdct sinewin"
2364aac_latm_decoder_select="aac_decoder aac_latm_parser"
2365ac3_decoder_select="ac3_parser ac3dsp bswapdsp fmtconvert mdct"
2366ac3_fixed_decoder_select="ac3_parser ac3dsp bswapdsp mdct"
2367ac3_encoder_select="ac3dsp audiodsp mdct me_cmp"
2368ac3_fixed_encoder_select="ac3dsp audiodsp mdct me_cmp"
2369adpcm_g722_decoder_select="g722dsp"
2370adpcm_g722_encoder_select="g722dsp"
2371aic_decoder_select="golomb idctdsp"
2372alac_encoder_select="lpc"
2373als_decoder_select="bswapdsp"
2374amrnb_decoder_select="lsp"
2375amrwb_decoder_select="lsp"
2376amv_decoder_select="sp5x_decoder exif"
2377amv_encoder_select="aandcttables jpegtables mpegvideoenc"
2378ape_decoder_select="bswapdsp llauddsp"
2379apng_decoder_select="zlib"
2380apng_encoder_select="llvidencdsp zlib"
2381asv1_decoder_select="blockdsp bswapdsp idctdsp"
2382asv1_encoder_select="bswapdsp fdctdsp pixblockdsp"
2383asv2_decoder_select="blockdsp bswapdsp idctdsp"
2384asv2_encoder_select="bswapdsp fdctdsp pixblockdsp"
2385atrac1_decoder_select="mdct sinewin"
2386atrac3_decoder_select="mdct"
2387atrac3p_decoder_select="mdct sinewin"
2388avrn_decoder_select="exif jpegtables"
2389bink_decoder_select="blockdsp hpeldsp"
2390binkaudio_dct_decoder_select="mdct rdft dct sinewin wma_freqs"
2391binkaudio_rdft_decoder_select="mdct rdft sinewin wma_freqs"
2392cavs_decoder_select="blockdsp golomb h264chroma idctdsp qpeldsp videodsp"
2393cllc_decoder_select="bswapdsp"
2394comfortnoise_encoder_select="lpc"
2395cook_decoder_select="audiodsp mdct sinewin"
2396cscd_decoder_select="lzo"
2397cscd_decoder_suggest="zlib"
2398dca_decoder_select="mdct"
2399dds_decoder_select="texturedsp"
2400dirac_decoder_select="dirac_parse dwt golomb videodsp mpegvideoenc"
2401dnxhd_decoder_select="blockdsp idctdsp"
2402dnxhd_encoder_select="aandcttables blockdsp fdctdsp idctdsp mpegvideoenc pixblockdsp"
2403dvvideo_decoder_select="dvprofile idctdsp"
2404dvvideo_encoder_select="dvprofile fdctdsp me_cmp pixblockdsp"
2405dxa_decoder_select="zlib"
2406dxv_decoder_select="lzf texturedsp"
2407eac3_decoder_select="ac3_decoder"
2408eac3_encoder_select="ac3_encoder"
2409eamad_decoder_select="aandcttables blockdsp bswapdsp idctdsp mpegvideo"
2410eatgq_decoder_select="aandcttables"
2411eatqi_decoder_select="aandcttables blockdsp bswapdsp idctdsp"
2412exr_decoder_select="zlib"
2413ffv1_decoder_select="golomb rangecoder"
2414ffv1_encoder_select="rangecoder"
2415ffvhuff_decoder_select="huffyuv_decoder"
2416ffvhuff_encoder_select="huffyuv_encoder"
2417fic_decoder_select="golomb"
2418flac_decoder_select="flacdsp golomb"
2419flac_encoder_select="bswapdsp flacdsp golomb lpc"
2420flashsv2_decoder_select="zlib"
2421flashsv2_encoder_select="zlib"
2422flashsv_decoder_select="zlib"
2423flashsv_encoder_select="zlib"
2424flv_decoder_select="h263_decoder"
2425flv_encoder_select="h263_encoder"
2426fourxm_decoder_select="blockdsp bswapdsp"
2427fraps_decoder_select="bswapdsp huffman"
2428g2m_decoder_select="blockdsp idctdsp jpegtables zlib"
2429g729_decoder_select="audiodsp"
2430h261_decoder_select="mpegvideo"
2431h261_encoder_select="aandcttables mpegvideoenc"
2432h263_decoder_select="h263_parser h263dsp mpegvideo qpeldsp"
2433h263_encoder_select="aandcttables h263dsp mpegvideoenc"
2434h263i_decoder_select="h263_decoder"
2435h263p_decoder_select="h263_decoder"
2436h263p_encoder_select="h263_encoder"
2437h264_decoder_select="cabac golomb h264chroma h264dsp h264parse h264pred h264qpel videodsp"
2438h264_decoder_suggest="error_resilience"
2439hap_decoder_select="snappy texturedsp"
2440hap_encoder_deps="libsnappy"
2441hap_encoder_select="texturedspenc"
2442hevc_decoder_select="bswapdsp cabac golomb videodsp"
2443huffyuv_decoder_select="bswapdsp huffyuvdsp llviddsp"
2444huffyuv_encoder_select="bswapdsp huffman huffyuvencdsp llvidencdsp"
2445iac_decoder_select="imc_decoder"
2446imc_decoder_select="bswapdsp fft mdct sinewin"
2447indeo3_decoder_select="hpeldsp"
2448indeo4_decoder_select="ividsp"
2449indeo5_decoder_select="ividsp"
2450interplay_video_decoder_select="hpeldsp"
2451jpegls_decoder_select="golomb mjpeg_decoder"
2452jpegls_encoder_select="golomb"
2453jv_decoder_select="blockdsp"
2454lagarith_decoder_select="llviddsp"
2455ljpeg_encoder_select="aandcttables idctdsp jpegtables mpegvideoenc"
2456loco_decoder_select="golomb"
2457magicyuv_decoder_select="llviddsp"
2458mdec_decoder_select="blockdsp idctdsp mpegvideo"
2459metasound_decoder_select="lsp mdct sinewin"
2460mimic_decoder_select="blockdsp bswapdsp hpeldsp idctdsp"
2461mjpeg_decoder_select="blockdsp hpeldsp exif idctdsp jpegtables"
2462mjpeg_encoder_select="aandcttables jpegtables mpegvideoenc"
2463mjpegb_decoder_select="mjpeg_decoder"
2464mlp_decoder_select="mlp_parser"
2465motionpixels_decoder_select="bswapdsp"
2466mp1_decoder_select="mpegaudio"
2467mp1float_decoder_select="mpegaudio"
2468mp2_decoder_select="mpegaudio"
2469mp2float_decoder_select="mpegaudio"
2470mp3_decoder_select="mpegaudio"
2471mp3adu_decoder_select="mpegaudio"
2472mp3adufloat_decoder_select="mpegaudio"
2473mp3float_decoder_select="mpegaudio"
2474mp3on4_decoder_select="mpegaudio"
2475mp3on4float_decoder_select="mpegaudio"
2476mpc7_decoder_select="bswapdsp mpegaudiodsp"
2477mpc8_decoder_select="mpegaudiodsp"
2478mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h"
2479mpeg_xvmc_decoder_select="mpeg2video_decoder"
2480mpegvideo_decoder_select="mpegvideo"
2481mpeg1video_decoder_select="mpegvideo"
2482mpeg1video_encoder_select="aandcttables mpegvideoenc h263dsp"
2483mpeg2video_decoder_select="mpegvideo"
2484mpeg2video_encoder_select="aandcttables mpegvideoenc h263dsp"
2485mpeg4_decoder_select="h263_decoder mpeg4video_parser"
2486mpeg4_encoder_select="h263_encoder"
2487msa1_decoder_select="mss34dsp"
2488msmpeg4v1_decoder_select="h263_decoder"
2489msmpeg4v2_decoder_select="h263_decoder"
2490msmpeg4v2_encoder_select="h263_encoder"
2491msmpeg4v3_decoder_select="h263_decoder"
2492msmpeg4v3_encoder_select="h263_encoder"
2493mss2_decoder_select="vc1_decoder mpegvideo"
2494mts2_decoder_select="mss34dsp"
2495mxpeg_decoder_select="mjpeg_decoder"
2496nellymoser_decoder_select="mdct sinewin"
2497nellymoser_encoder_select="audio_frame_queue mdct sinewin"
2498nuv_decoder_select="idctdsp lzo"
2499on2avc_decoder_select="mdct"
2500opus_decoder_deps="swresample"
2501opus_decoder_select="mdct15"
2502opus_encoder_select="audio_frame_queue mdct15"
2503png_decoder_select="zlib"
2504png_encoder_select="llvidencdsp zlib"
2505prores_decoder_select="blockdsp idctdsp"
2506prores_encoder_select="fdctdsp"
2507qcelp_decoder_select="lsp"
2508qdm2_decoder_select="mdct rdft mpegaudiodsp"
2509ra_144_decoder_select="audiodsp"
2510ra_144_encoder_select="audio_frame_queue lpc audiodsp"
2511ralf_decoder_select="golomb"
2512rawvideo_decoder_select="bswapdsp"
2513rscc_decoder_select="zlib"
2514rtjpeg_decoder_select="me_cmp"
2515rv10_decoder_select="h263_decoder"
2516rv10_encoder_select="h263_encoder"
2517rv20_decoder_select="h263_decoder"
2518rv20_encoder_select="h263_encoder"
2519rv30_decoder_select="golomb h264pred h264qpel mpegvideo rv34dsp"
2520rv40_decoder_select="golomb h264pred h264qpel mpegvideo rv34dsp"
2521screenpresso_decoder_select="zlib"
2522shorten_decoder_select="golomb bswapdsp"
2523sipr_decoder_select="lsp"
2524snow_decoder_select="dwt h264qpel hpeldsp me_cmp rangecoder videodsp"
2525snow_encoder_select="aandcttables dwt h264qpel hpeldsp me_cmp mpegvideoenc rangecoder"
2526sonic_decoder_select="golomb rangecoder"
2527sonic_encoder_select="golomb rangecoder"
2528sonic_ls_encoder_select="golomb rangecoder"
2529sp5x_decoder_select="mjpeg_decoder"
2530svq1_decoder_select="hpeldsp"
2531svq1_encoder_select="aandcttables hpeldsp me_cmp mpegvideoenc"
2532svq3_decoder_select="golomb h264dsp h264parse h264pred hpeldsp tpeldsp videodsp"
2533svq3_decoder_suggest="zlib"
2534tak_decoder_select="audiodsp"
2535tdsc_decoder_select="zlib mjpeg_decoder"
2536theora_decoder_select="vp3_decoder"
2537thp_decoder_select="mjpeg_decoder"
2538tiff_decoder_suggest="zlib lzma"
2539tiff_encoder_suggest="zlib"
2540truehd_decoder_select="mlp_parser"
2541truemotion2_decoder_select="bswapdsp"
2542truespeech_decoder_select="bswapdsp"
2543tscc_decoder_select="zlib"
2544twinvq_decoder_select="mdct lsp sinewin"
2545txd_decoder_select="texturedsp"
2546utvideo_decoder_select="bswapdsp llviddsp"
2547utvideo_encoder_select="bswapdsp huffman llvidencdsp"
2548vble_decoder_select="llviddsp"
2549vc1_decoder_select="blockdsp h263_decoder h264qpel intrax8 mpegvideo vc1dsp"
2550vc1_qsv_decoder_deps="libmfx"
2551vc1_qsv_decoder_select="qsvdec vc1_qsv_hwaccel vc1_parser"
2552vc1image_decoder_select="vc1_decoder"
2553vorbis_decoder_select="mdct"
2554vorbis_encoder_select="mdct"
2555vp3_decoder_select="hpeldsp vp3dsp videodsp"
2556vp5_decoder_select="h264chroma hpeldsp videodsp vp3dsp vp56dsp"
2557vp6_decoder_select="h264chroma hpeldsp huffman videodsp vp3dsp vp56dsp"
2558vp6a_decoder_select="vp6_decoder"
2559vp6f_decoder_select="vp6_decoder"
2560vp7_decoder_select="h264pred videodsp vp8dsp"
2561vp8_decoder_select="h264pred videodsp vp8dsp"
2562vp9_decoder_select="videodsp vp9_parser"
2563webp_decoder_select="vp8_decoder exif"
2564wmalossless_decoder_select="llauddsp"
2565wmapro_decoder_select="mdct sinewin wma_freqs"
2566wmav1_decoder_select="mdct sinewin wma_freqs"
2567wmav1_encoder_select="mdct sinewin wma_freqs"
2568wmav2_decoder_select="mdct sinewin wma_freqs"
2569wmav2_encoder_select="mdct sinewin wma_freqs"
2570wmavoice_decoder_select="lsp rdft dct mdct sinewin"
2571wmv1_decoder_select="h263_decoder"
2572wmv1_encoder_select="h263_encoder"
2573wmv2_decoder_select="blockdsp error_resilience h263_decoder idctdsp intrax8 videodsp wmv2dsp"
2574wmv2_encoder_select="h263_encoder wmv2dsp"
2575wmv3_decoder_select="vc1_decoder"
2576wmv3image_decoder_select="wmv3_decoder"
2577xma1_decoder_select="wmapro_decoder"
2578xma2_decoder_select="wmapro_decoder"
2579zerocodec_decoder_select="zlib"
2580zlib_decoder_select="zlib"
2581zlib_encoder_select="zlib"
2582zmbv_decoder_select="zlib"
2583zmbv_encoder_select="zlib"
2584
2585# platform codecs
2586audiotoolbox_deps="AudioToolbox_AudioToolbox_h"
2587audiotoolbox_extralibs="-framework CoreFoundation -framework AudioToolbox -framework CoreMedia"
2588
2589# hardware accelerators
2590crystalhd_deps="libcrystalhd_libcrystalhd_if_h"
2591cuda_deps_any="dlopen LoadLibrary"
2592cuvid_deps="cuda"
2593d3d11va_deps="d3d11_h dxva_h ID3D11VideoDecoder ID3D11VideoContext"
2594dxva2_deps="dxva2api_h DXVA2_ConfigPictureDecode"
2595dxva2_extralibs="-luser32"
2596vaapi_deps="va_va_h"
2597vda_framework_deps="VideoDecodeAcceleration_VDADecoder_h"
2598vda_framework_extralibs="-framework VideoDecodeAcceleration"
2599vda_deps="vda_framework pthreads"
2600vda_extralibs="-framework CoreFoundation -framework QuartzCore"
2601vdpau_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
2602videotoolbox_hwaccel_deps="videotoolbox pthreads"
2603videotoolbox_hwaccel_extralibs="-framework QuartzCore"
2604xvmc_deps="X11_extensions_XvMClib_h"
2605
2606h263_vaapi_hwaccel_deps="vaapi"
2607h263_vaapi_hwaccel_select="h263_decoder"
2608h263_videotoolbox_hwaccel_deps="videotoolbox"
2609h263_videotoolbox_hwaccel_select="h263_decoder"
2610h264_crystalhd_decoder_select="crystalhd h264_mp4toannexb_bsf h264_parser"
2611h264_cuvid_hwaccel_deps="cuda cuvid"
2612h264_cuvid_hwaccel_select="h264_cuvid_decoder"
2613h264_d3d11va_hwaccel_deps="d3d11va"
2614h264_d3d11va_hwaccel_select="h264_decoder"
2615h264_dxva2_hwaccel_deps="dxva2"
2616h264_dxva2_hwaccel_select="h264_decoder"
2617h264_mediacodec_decoder_deps="mediacodec"
2618h264_mediacodec_hwaccel_deps="mediacodec"
2619h264_mediacodec_decoder_select="h264_mp4toannexb_bsf h264_parser"
2620h264_mmal_decoder_deps="mmal"
2621h264_mmal_decoder_select="mmal"
2622h264_mmal_hwaccel_deps="mmal"
2623h264_omx_encoder_deps="omx"
2624h264_qsv_hwaccel_deps="libmfx"
2625h264_vaapi_hwaccel_deps="vaapi"
2626h264_vaapi_hwaccel_select="h264_decoder"
2627h264_vda_decoder_deps="vda"
2628h264_vda_decoder_select="h264_decoder"
2629h264_vda_hwaccel_deps="vda"
2630h264_vda_hwaccel_select="h264_decoder"
2631h264_vda_old_hwaccel_deps="vda"
2632h264_vda_old_hwaccel_select="h264_decoder"
2633h264_vdpau_decoder_deps="vdpau"
2634h264_vdpau_decoder_select="h264_decoder"
2635h264_vdpau_hwaccel_deps="vdpau"
2636h264_vdpau_hwaccel_select="h264_decoder"
2637h264_videotoolbox_hwaccel_deps="videotoolbox"
2638h264_videotoolbox_hwaccel_select="h264_decoder"
2639hevc_cuvid_hwaccel_deps="cuda cuvid"
2640hevc_cuvid_hwaccel_select="hevc_cuvid_decoder"
2641hevc_d3d11va_hwaccel_deps="d3d11va DXVA_PicParams_HEVC"
2642hevc_d3d11va_hwaccel_select="hevc_decoder"
2643hevc_mediacodec_decoder_deps="mediacodec"
2644hevc_mediacodec_hwaccel_deps="mediacodec"
2645hevc_mediacodec_decoder_select="hevc_mp4toannexb_bsf hevc_parser"
2646hevc_dxva2_hwaccel_deps="dxva2 DXVA_PicParams_HEVC"
2647hevc_dxva2_hwaccel_select="hevc_decoder"
2648hevc_qsv_hwaccel_deps="libmfx"
2649hevc_vaapi_hwaccel_deps="vaapi VAPictureParameterBufferHEVC"
2650hevc_vaapi_hwaccel_select="hevc_decoder"
2651hevc_vdpau_hwaccel_deps="vdpau VdpPictureInfoHEVC"
2652hevc_vdpau_hwaccel_select="hevc_decoder"
2653mjpeg_cuvid_hwaccel_deps="cuda cuvid"
2654mjpeg_cuvid_hwaccel_select="mjpeg_cuvid_decoder"
2655mjpeg_vaapi_encoder_deps="VAEncPictureParameterBufferJPEG"
2656mjpeg_vaapi_encoder_select="vaapi_encode jpegtables"
2657mpeg_vdpau_decoder_deps="vdpau"
2658mpeg_vdpau_decoder_select="mpeg2video_decoder"
2659mpeg_xvmc_hwaccel_deps="xvmc"
2660mpeg_xvmc_hwaccel_select="mpeg2video_decoder"
2661mpeg1_cuvid_hwaccel_deps="cuda cuvid"
2662mpeg1_cuvid_hwaccel_select="mpeg1_cuvid_decoder"
2663mpeg1_vdpau_decoder_deps="vdpau"
2664mpeg1_vdpau_decoder_select="mpeg1video_decoder"
2665mpeg1_vdpau_hwaccel_deps="vdpau"
2666mpeg1_vdpau_hwaccel_select="mpeg1video_decoder"
2667mpeg1_videotoolbox_hwaccel_deps="videotoolbox"
2668mpeg1_videotoolbox_hwaccel_select="mpeg1video_decoder"
2669mpeg1_xvmc_hwaccel_deps="xvmc"
2670mpeg1_xvmc_hwaccel_select="mpeg1video_decoder"
2671mpeg2_crystalhd_decoder_select="crystalhd"
2672mpeg2_cuvid_hwaccel_deps="cuda cuvid"
2673mpeg2_cuvid_hwaccel_select="mpeg2_cuvid_decoder"
2674mpeg2_d3d11va_hwaccel_deps="d3d11va"
2675mpeg2_d3d11va_hwaccel_select="mpeg2video_decoder"
2676mpeg2_dxva2_hwaccel_deps="dxva2"
2677mpeg2_dxva2_hwaccel_select="mpeg2video_decoder"
2678mpeg2_mmal_decoder_deps="mmal"
2679mpeg2_mmal_decoder_select="mmal"
2680mpeg2_mmal_hwaccel_deps="mmal"
2681mpeg2_qsv_hwaccel_deps="libmfx"
2682mpeg2_qsv_hwaccel_select="qsvdec_mpeg2"
2683mpeg2_vaapi_hwaccel_deps="vaapi"
2684mpeg2_vaapi_hwaccel_select="mpeg2video_decoder"
2685mpeg2_vdpau_hwaccel_deps="vdpau"
2686mpeg2_vdpau_hwaccel_select="mpeg2video_decoder"
2687mpeg2_videotoolbox_hwaccel_deps="videotoolbox"
2688mpeg2_videotoolbox_hwaccel_select="mpeg2video_decoder"
2689mpeg2_xvmc_hwaccel_deps="xvmc"
2690mpeg2_xvmc_hwaccel_select="mpeg2video_decoder"
2691mpeg4_crystalhd_decoder_select="crystalhd"
2692mpeg4_cuvid_hwaccel_deps="cuda cuvid"
2693mpeg4_cuvid_hwaccel_select="mpeg4_cuvid_decoder"
2694mpeg4_mediacodec_decoder_deps="mediacodec"
2695mpeg4_mediacodec_hwaccel_deps="mediacodec"
2696mpeg4_mmal_decoder_deps="mmal"
2697mpeg4_mmal_decoder_select="mmal"
2698mpeg4_mmal_hwaccel_deps="mmal"
2699mpeg4_omx_encoder_deps="omx"
2700mpeg4_vaapi_hwaccel_deps="vaapi"
2701mpeg4_vaapi_hwaccel_select="mpeg4_decoder"
2702mpeg4_vdpau_decoder_deps="vdpau"
2703mpeg4_vdpau_decoder_select="mpeg4_decoder"
2704mpeg4_vdpau_hwaccel_deps="vdpau"
2705mpeg4_vdpau_hwaccel_select="mpeg4_decoder"
2706mpeg4_videotoolbox_hwaccel_deps="videotoolbox"
2707mpeg4_videotoolbox_hwaccel_select="mpeg4_decoder"
2708msmpeg4_crystalhd_decoder_select="crystalhd"
2709vc1_crystalhd_decoder_select="crystalhd"
2710vc1_cuvid_hwaccel_deps="cuda cuvid"
2711vc1_cuvid_hwaccel_select="vc1_cuvid_decoder"
2712vc1_d3d11va_hwaccel_deps="d3d11va"
2713vc1_d3d11va_hwaccel_select="vc1_decoder"
2714vc1_dxva2_hwaccel_deps="dxva2"
2715vc1_dxva2_hwaccel_select="vc1_decoder"
2716vc1_mmal_decoder_deps="mmal"
2717vc1_mmal_decoder_select="mmal"
2718vc1_mmal_hwaccel_deps="mmal"
2719vc1_qsv_hwaccel_deps="libmfx"
2720vc1_qsv_hwaccel_select="qsvdec_vc1"
2721vc1_vaapi_hwaccel_deps="vaapi"
2722vc1_vaapi_hwaccel_select="vc1_decoder"
2723vc1_vdpau_decoder_deps="vdpau"
2724vc1_vdpau_decoder_select="vc1_decoder"
2725vc1_vdpau_hwaccel_deps="vdpau"
2726vc1_vdpau_hwaccel_select="vc1_decoder"
2727vp8_cuvid_hwaccel_deps="cuda cuvid"
2728vp8_cuvid_hwaccel_select="vp8_cuvid_decoder"
2729vp9_cuvid_hwaccel_deps="cuda cuvid"
2730vp9_cuvid_hwaccel_select="vp9_cuvid_decoder"
2731vp8_mediacodec_decoder_deps="mediacodec"
2732vp8_mediacodec_hwaccel_deps="mediacodec"
2733vp8_qsv_hwaccel_deps="libmfx"
2734vp9_d3d11va_hwaccel_deps="d3d11va DXVA_PicParams_VP9"
2735vp9_d3d11va_hwaccel_select="vp9_decoder"
2736vp9_dxva2_hwaccel_deps="dxva2 DXVA_PicParams_VP9"
2737vp9_dxva2_hwaccel_select="vp9_decoder"
2738vp9_mediacodec_decoder_deps="mediacodec"
2739vp9_mediacodec_hwaccel_deps="mediacodec"
2740vp9_vaapi_hwaccel_deps="vaapi VADecPictureParameterBufferVP9_bit_depth"
2741vp9_vaapi_hwaccel_select="vp9_decoder"
2742wmv3_crystalhd_decoder_select="crystalhd"
2743wmv3_d3d11va_hwaccel_select="vc1_d3d11va_hwaccel"
2744wmv3_dxva2_hwaccel_select="vc1_dxva2_hwaccel"
2745wmv3_vaapi_hwaccel_select="vc1_vaapi_hwaccel"
2746wmv3_vdpau_decoder_select="vc1_vdpau_decoder"
2747wmv3_vdpau_hwaccel_select="vc1_vdpau_hwaccel"
2748
2749# hardware-accelerated codecs
2750omx_deps="dlopen pthreads"
2751omx_extralibs='$ldl'
2752qsvdec_select="qsv"
2753qsvenc_select="qsv"
2754vaapi_encode_deps="vaapi"
2755
2756hwupload_cuda_filter_deps="cuda"
2757scale_npp_filter_deps="cuda libnpp"
2758
2759nvenc_deps="cuda"
2760nvenc_deps_any="dlopen LoadLibrary"
2761nvenc_encoder_deps="nvenc"
2762h264_cuvid_decoder_deps="cuda cuvid"
2763h264_cuvid_decoder_select="h264_mp4toannexb_bsf"
2764h264_nvenc_encoder_deps="nvenc"
2765h264_qsv_decoder_deps="libmfx"
2766h264_qsv_decoder_select="h264_mp4toannexb_bsf h264_parser qsvdec h264_qsv_hwaccel"
2767h264_qsv_encoder_deps="libmfx"
2768h264_qsv_encoder_select="qsvenc"
2769h264_vaapi_encoder_deps="VAEncPictureParameterBufferH264"
2770h264_vaapi_encoder_select="vaapi_encode golomb"
2771
2772hevc_cuvid_decoder_deps="cuda cuvid"
2773hevc_cuvid_decoder_select="hevc_mp4toannexb_bsf"
2774hevc_nvenc_encoder_deps="nvenc"
2775hevc_qsv_decoder_deps="libmfx"
2776hevc_qsv_decoder_select="hevc_mp4toannexb_bsf hevc_parser qsvdec hevc_qsv_hwaccel"
2777hevc_qsv_encoder_deps="libmfx"
2778hevc_qsv_encoder_select="qsvenc"
2779hevc_vaapi_encoder_deps="VAEncPictureParameterBufferHEVC"
2780hevc_vaapi_encoder_select="vaapi_encode golomb"
2781mjpeg_cuvid_decoder_deps="cuda cuvid"
2782mpeg1_cuvid_decoder_deps="cuda cuvid"
2783mpeg2_cuvid_decoder_deps="cuda cuvid"
2784mpeg2_qsv_decoder_deps="libmfx"
2785mpeg2_qsv_decoder_select="qsvdec mpeg2_qsv_hwaccel"
2786mpeg2_qsv_encoder_deps="libmfx"
2787mpeg2_qsv_encoder_select="qsvenc"
2788mpeg2_vaapi_encoder_deps="VAEncPictureParameterBufferMPEG2"
2789mpeg2_vaapi_encoder_select="vaapi_encode"
2790mpeg4_cuvid_decoder_deps="cuda cuvid"
2791nvenc_h264_encoder_deps="nvenc"
2792nvenc_hevc_encoder_deps="nvenc"
2793
2794vc1_cuvid_decoder_deps="cuda cuvid"
2795vp8_cuvid_decoder_deps="cuda cuvid"
2796vp8_qsv_decoder_deps="libmfx"
2797vp8_qsv_decoder_select="qsvdec vp8_qsv_hwaccel vp8_parser"
2798vp8_vaapi_encoder_deps="VAEncPictureParameterBufferVP8"
2799vp8_vaapi_encoder_select="vaapi_encode"
2800vp9_cuvid_decoder_deps="cuda cuvid"
2801
2802# parsers
2803h264_parser_select="golomb h264dsp h264parse"
2804hevc_parser_select="golomb"
2805mpegvideo_parser_select="mpegvideo"
2806mpeg4video_parser_select="h263dsp mpegvideo qpeldsp"
2807vc1_parser_select="vc1dsp"
2808
2809# bitstream_filters
2810mjpeg2jpeg_bsf_select="jpegtables"
2811
2812# external libraries
2813aac_at_decoder_deps="audiotoolbox"
2814ac3_at_decoder_deps="audiotoolbox"
2815ac3_at_decoder_select="ac3_parser"
2816adpcm_ima_qt_at_decoder_deps="audiotoolbox"
2817alac_at_decoder_deps="audiotoolbox"
2818amr_nb_at_decoder_deps="audiotoolbox"
2819avisynth_deps_any="dlopen LoadLibrary"
2820avisynth_demuxer_deps="avisynth"
2821avisynth_demuxer_select="riffdec"
2822eac3_at_decoder_deps="audiotoolbox"
2823eac3_at_decoder_select="ac3_parser"
2824gsm_ms_at_decoder_deps="audiotoolbox"
2825ilbc_at_decoder_deps="audiotoolbox"
2826mp1_at_decoder_deps="audiotoolbox"
2827mp2_at_decoder_deps="audiotoolbox"
2828mp3_at_decoder_deps="audiotoolbox"
2829pcm_alaw_at_decoder_deps="audiotoolbox"
2830pcm_mulaw_at_decoder_deps="audiotoolbox"
2831qdmc_at_decoder_deps="audiotoolbox"
2832qdm2_at_decoder_deps="audiotoolbox"
2833aac_at_encoder_deps="audiotoolbox"
2834aac_at_encoder_select="audio_frame_queue"
2835alac_at_encoder_deps="audiotoolbox"
2836alac_at_encoder_select="audio_frame_queue"
2837ilbc_at_encoder_deps="audiotoolbox"
2838ilbc_at_encoder_select="audio_frame_queue"
2839pcm_alaw_at_encoder_deps="audiotoolbox"
2840pcm_alaw_at_encoder_select="audio_frame_queue"
2841pcm_mulaw_at_encoder_deps="audiotoolbox"
2842pcm_mulaw_at_encoder_select="audio_frame_queue"
2843chromaprint_muxer_deps="chromaprint"
2844h264_videotoolbox_encoder_deps="videotoolbox_encoder pthreads"
2845libcelt_decoder_deps="libcelt"
2846libfdk_aac_decoder_deps="libfdk_aac"
2847libfdk_aac_encoder_deps="libfdk_aac"
2848libfdk_aac_encoder_select="audio_frame_queue"
2849libgme_demuxer_deps="libgme"
2850libgsm_decoder_deps="libgsm"
2851libgsm_encoder_deps="libgsm"
2852libgsm_ms_decoder_deps="libgsm"
2853libgsm_ms_encoder_deps="libgsm"
2854libilbc_decoder_deps="libilbc"
2855libilbc_encoder_deps="libilbc"
2856libkvazaar_encoder_deps="libkvazaar"
2857libmodplug_demuxer_deps="libmodplug"
2858libmp3lame_encoder_deps="libmp3lame"
2859libmp3lame_encoder_select="audio_frame_queue"
2860libopencore_amrnb_decoder_deps="libopencore_amrnb"
2861libopencore_amrnb_encoder_deps="libopencore_amrnb"
2862libopencore_amrnb_encoder_select="audio_frame_queue"
2863libopencore_amrwb_decoder_deps="libopencore_amrwb"
2864libopenh264_decoder_deps="libopenh264"
2865libopenh264_decoder_select="h264_mp4toannexb_bsf"
2866libopenh264_encoder_deps="libopenh264"
2867libopenjpeg_decoder_deps="libopenjpeg"
2868libopenjpeg_encoder_deps="libopenjpeg"
2869libopenmpt_demuxer_deps="libopenmpt"
2870libopus_decoder_deps="libopus"
2871libopus_encoder_deps="libopus"
2872libopus_encoder_select="audio_frame_queue"
2873libschroedinger_decoder_deps="libschroedinger"
2874libschroedinger_encoder_deps="libschroedinger"
2875libshine_encoder_deps="libshine"
2876libshine_encoder_select="audio_frame_queue"
2877libspeex_decoder_deps="libspeex"
2878libspeex_encoder_deps="libspeex"
2879libspeex_encoder_select="audio_frame_queue"
2880libtheora_encoder_deps="libtheora"
2881libtwolame_encoder_deps="libtwolame"
2882libvo_amrwbenc_encoder_deps="libvo_amrwbenc"
2883libvorbis_decoder_deps="libvorbis"
2884libvorbis_encoder_deps="libvorbis"
2885libvorbis_encoder_select="audio_frame_queue"
2886libvpx_vp8_decoder_deps="libvpx"
2887libvpx_vp8_encoder_deps="libvpx"
2888libvpx_vp9_decoder_deps="libvpx"
2889libvpx_vp9_encoder_deps="libvpx"
2890libwavpack_encoder_deps="libwavpack"
2891libwebp_encoder_deps="libwebp"
2892libwebp_anim_encoder_deps="libwebp"
2893libx262_encoder_deps="libx262"
2894libx264_encoder_deps="libx264"
2895libx264rgb_encoder_deps="libx264 x264_csp_bgr"
2896libx264rgb_encoder_select="libx264_encoder"
2897libx265_encoder_deps="libx265"
2898libxavs_encoder_deps="libxavs"
2899libxvid_encoder_deps="libxvid"
2900libzvbi_teletext_decoder_deps="libzvbi"
2901videotoolbox_deps="VideoToolbox_VideoToolbox_h"
2902videotoolbox_extralibs="-framework CoreFoundation -framework VideoToolbox -framework CoreMedia -framework CoreVideo"
2903videotoolbox_encoder_deps="videotoolbox VTCompressionSessionPrepareToEncodeFrames"
2904videotoolbox_encoder_suggest="vda_framework vt_bt2020"
2905vt_bt2020_deps="kCVImageBufferColorPrimaries_ITU_R_2020"
2906
2907# demuxers / muxers
2908ac3_demuxer_select="ac3_parser"
2909aiff_muxer_select="iso_media"
2910asf_demuxer_select="riffdec"
2911asf_o_demuxer_select="riffdec"
2912asf_muxer_select="riffenc"
2913asf_stream_muxer_select="asf_muxer"
2914avi_demuxer_select="iso_media riffdec exif"
2915avi_muxer_select="riffenc"
2916caf_demuxer_select="iso_media riffdec"
2917caf_muxer_select="iso_media"
2918dash_muxer_select="mp4_muxer"
2919dirac_demuxer_select="dirac_parser"
2920dts_demuxer_select="dca_parser"
2921dtshd_demuxer_select="dca_parser"
2922dv_demuxer_select="dvprofile"
2923dv_muxer_select="dvprofile"
2924dxa_demuxer_select="riffdec"
2925eac3_demuxer_select="ac3_parser"
2926f4v_muxer_select="mov_muxer"
2927fifo_muxer_deps="threads"
2928flac_demuxer_select="flac_parser"
2929hds_muxer_select="flv_muxer"
2930hls_muxer_select="mpegts_muxer"
2931image2_alias_pix_demuxer_select="image2_demuxer"
2932image2_brender_pix_demuxer_select="image2_demuxer"
2933ipod_muxer_select="mov_muxer"
2934ismv_muxer_select="mov_muxer"
2935libnut_demuxer_deps="libnut"
2936libnut_muxer_deps="libnut"
2937matroska_audio_muxer_select="matroska_muxer"
2938matroska_demuxer_select="iso_media riffdec"
2939matroska_demuxer_suggest="bzlib lzo zlib"
2940matroska_muxer_select="iso_media riffenc"
2941mmf_muxer_select="riffenc"
2942mov_demuxer_select="iso_media riffdec"
2943mov_demuxer_suggest="zlib"
2944mov_muxer_select="iso_media riffenc rtpenc_chain"
2945mp3_demuxer_select="mpegaudio_parser"
2946mp4_muxer_select="mov_muxer"
2947mpegts_demuxer_select="iso_media"
2948mpegts_muxer_select="adts_muxer latm_muxer"
2949mpegtsraw_demuxer_select="mpegts_demuxer"
2950mxf_d10_muxer_select="mxf_muxer"
2951mxf_opatom_muxer_select="mxf_muxer"
2952nut_muxer_select="riffenc"
2953nuv_demuxer_select="riffdec"
2954oga_muxer_select="ogg_muxer"
2955ogg_demuxer_select="dirac_parse"
2956ogv_muxer_select="ogg_muxer"
2957opus_muxer_select="ogg_muxer"
2958psp_muxer_select="mov_muxer"
2959rtp_demuxer_select="sdp_demuxer"
2960rtp_muxer_select="golomb"
2961rtpdec_select="asf_demuxer jpegtables mov_demuxer mpegts_demuxer rm_demuxer rtp_protocol srtp"
2962rtsp_demuxer_select="http_protocol rtpdec"
2963rtsp_muxer_select="rtp_muxer http_protocol rtp_protocol rtpenc_chain"
2964sap_demuxer_select="sdp_demuxer"
2965sap_muxer_select="rtp_muxer rtp_protocol rtpenc_chain"
2966sdp_demuxer_select="rtpdec"
2967smoothstreaming_muxer_select="ismv_muxer"
2968spdif_muxer_select="aac_parser"
2969spx_muxer_select="ogg_muxer"
2970swf_demuxer_suggest="zlib"
2971tak_demuxer_select="tak_parser"
2972tg2_muxer_select="mov_muxer"
2973tgp_muxer_select="mov_muxer"
2974vobsub_demuxer_select="mpegps_demuxer"
2975w64_demuxer_select="wav_demuxer"
2976w64_muxer_select="wav_muxer"
2977wav_demuxer_select="riffdec"
2978wav_muxer_select="riffenc"
2979webm_muxer_select="iso_media riffenc"
2980webm_dash_manifest_demuxer_select="matroska_demuxer"
2981wtv_demuxer_select="mpegts_demuxer riffdec"
2982wtv_muxer_select="mpegts_muxer riffenc"
2983xmv_demuxer_select="riffdec"
2984xwma_demuxer_select="riffdec"
2985
2986# indevs / outdevs
2987alsa_indev_deps="alsa_asoundlib_h snd_pcm_htimestamp"
2988alsa_outdev_deps="alsa_asoundlib_h"
2989avfoundation_indev_extralibs="-framework CoreVideo -framework Foundation -framework AVFoundation -framework CoreMedia"
2990avfoundation_indev_select="avfoundation"
2991bktr_indev_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
2992caca_outdev_deps="libcaca"
2993decklink_indev_deps="decklink pthreads"
2994decklink_indev_extralibs="-lstdc++"
2995decklink_outdev_deps="decklink pthreads"
2996decklink_outdev_extralibs="-lstdc++"
2997dshow_indev_deps="IBaseFilter"
2998dshow_indev_extralibs="-lpsapi -lole32 -lstrmiids -luuid -loleaut32 -lshlwapi"
2999dv1394_indev_deps="dv1394"
3000dv1394_indev_select="dv_demuxer"
3001fbdev_indev_deps="linux_fb_h"
3002fbdev_outdev_deps="linux_fb_h"
3003gdigrab_indev_deps="CreateDIBSection"
3004gdigrab_indev_extralibs="-lgdi32"
3005gdigrab_indev_select="bmp_decoder"
3006iec61883_indev_deps="libiec61883"
3007jack_indev_deps="jack_jack_h"
3008jack_indev_deps_any="sem_timedwait dispatch_dispatch_h"
3009lavfi_indev_deps="avfilter"
3010libcdio_indev_deps="libcdio"
3011libdc1394_indev_deps="libdc1394"
3012libv4l2_indev_deps="libv4l2"
3013openal_indev_deps="openal"
3014opengl_outdev_deps="opengl"
3015oss_indev_deps_any="soundcard_h sys_soundcard_h"
3016oss_outdev_deps_any="soundcard_h sys_soundcard_h"
3017pulse_indev_deps="libpulse"
3018pulse_outdev_deps="libpulse"
3019qtkit_indev_extralibs="-framework QTKit -framework Foundation -framework QuartzCore"
3020qtkit_indev_select="qtkit"
3021sdl2_outdev_deps="sdl2"
3022sndio_indev_deps="sndio_h"
3023sndio_outdev_deps="sndio_h"
3024v4l_indev_deps="linux_videodev_h"
3025v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h"
3026v4l2_outdev_deps_any="linux_videodev2_h sys_videoio_h"
3027vfwcap_indev_deps="capCreateCaptureWindow vfwcap_defines"
3028vfwcap_indev_extralibs="-lavicap32"
3029xcbgrab_indev_deps="libxcb"
3030xv_outdev_deps="X11_extensions_Xvlib_h XvGetPortAttribute"
3031xv_outdev_extralibs="-lXv -lX11 -lXext"
3032
3033# protocols
3034async_protocol_deps="threads"
3035bluray_protocol_deps="libbluray"
3036ffrtmpcrypt_protocol_deps="!librtmp_protocol"
3037ffrtmpcrypt_protocol_deps_any="gcrypt gmp openssl"
3038ffrtmpcrypt_protocol_select="tcp_protocol"
3039ffrtmphttp_protocol_deps="!librtmp_protocol"
3040ffrtmphttp_protocol_select="http_protocol"
3041ftp_protocol_select="tcp_protocol"
3042gopher_protocol_select="network"
3043http_protocol_select="tcp_protocol"
3044httpproxy_protocol_select="tcp_protocol"
3045https_protocol_select="tls_protocol"
3046icecast_protocol_select="http_protocol"
3047librtmp_protocol_deps="librtmp"
3048librtmpe_protocol_deps="librtmp"
3049librtmps_protocol_deps="librtmp"
3050librtmpt_protocol_deps="librtmp"
3051librtmpte_protocol_deps="librtmp"
3052libsmbclient_protocol_deps="libsmbclient gplv3"
3053libssh_protocol_deps="libssh"
3054mmsh_protocol_select="http_protocol"
3055mmst_protocol_select="network"
3056rtmp_protocol_deps="!librtmp_protocol"
3057rtmp_protocol_select="tcp_protocol"
3058rtmpe_protocol_select="ffrtmpcrypt_protocol"
3059rtmps_protocol_deps="!librtmp_protocol"
3060rtmps_protocol_select="tls_protocol"
3061rtmpt_protocol_select="ffrtmphttp_protocol"
3062rtmpte_protocol_select="ffrtmpcrypt_protocol ffrtmphttp_protocol"
3063rtmpts_protocol_select="ffrtmphttp_protocol https_protocol"
3064rtp_protocol_select="udp_protocol"
3065sctp_protocol_deps="struct_sctp_event_subscribe struct_msghdr_msg_flags"
3066sctp_protocol_select="network"
3067srtp_protocol_select="rtp_protocol srtp"
3068tcp_protocol_select="network"
3069tls_gnutls_protocol_deps="gnutls !tls_schannel_protocol !tls_securetransport_protocol"
3070tls_gnutls_protocol_select="tcp_protocol"
3071tls_openssl_protocol_deps="openssl !tls_schannel_protocol !tls_securetransport_protocol !tls_gnutls_protocol"
3072tls_openssl_protocol_select="tcp_protocol"
3073tls_schannel_protocol_deps="schannel"
3074tls_schannel_protocol_select="tcp_protocol"
3075tls_securetransport_protocol_deps="securetransport"
3076tls_securetransport_protocol_select="tcp_protocol"
3077tls_protocol_deps_any="tls_schannel_protocol tls_securetransport_protocol tls_gnutls_protocol tls_openssl_protocol"
3078udp_protocol_select="network"
3079udplite_protocol_select="network"
3080unix_protocol_deps="sys_un_h"
3081unix_protocol_select="network"
3082
3083# filters
3084afftfilt_filter_deps="avcodec"
3085afftfilt_filter_select="fft"
3086amovie_filter_deps="avcodec avformat"
3087aresample_filter_deps="swresample"
3088ass_filter_deps="libass"
3089atempo_filter_deps="avcodec"
3090atempo_filter_select="rdft"
3091azmq_filter_deps="libzmq"
3092blackframe_filter_deps="gpl"
3093boxblur_filter_deps="gpl"
3094bs2b_filter_deps="libbs2b"
3095colormatrix_filter_deps="gpl"
3096cover_rect_filter_deps="avcodec avformat gpl"
3097cropdetect_filter_deps="gpl"
3098deinterlace_qsv_filter_deps="libmfx"
3099deinterlace_vaapi_filter_deps="vaapi"
3100delogo_filter_deps="gpl"
3101deshake_filter_select="pixelutils"
3102drawtext_filter_deps="libfreetype"
3103eq_filter_deps="gpl"
3104fftfilt_filter_deps="avcodec"
3105fftfilt_filter_select="rdft"
3106find_rect_filter_deps="avcodec avformat gpl"
3107firequalizer_filter_deps="avcodec"
3108firequalizer_filter_select="rdft"
3109flite_filter_deps="libflite"
3110framerate_filter_select="pixelutils"
3111frei0r_filter_deps="frei0r dlopen"
3112frei0r_src_filter_deps="frei0r dlopen"
3113fspp_filter_deps="gpl"
3114geq_filter_deps="gpl"
3115histeq_filter_deps="gpl"
3116hqdn3d_filter_deps="gpl"
3117interlace_filter_deps="gpl"
3118kerndeint_filter_deps="gpl"
3119ladspa_filter_deps="ladspa dlopen"
3120mcdeint_filter_deps="avcodec gpl"
3121movie_filter_deps="avcodec avformat"
3122mpdecimate_filter_deps="gpl"
3123mpdecimate_filter_select="pixelutils"
3124mptestsrc_filter_deps="gpl"
3125negate_filter_deps="lut_filter"
3126nnedi_filter_deps="gpl"
3127ocr_filter_deps="libtesseract"
3128ocv_filter_deps="libopencv"
3129owdenoise_filter_deps="gpl"
3130pan_filter_deps="swresample"
3131perspective_filter_deps="gpl"
3132phase_filter_deps="gpl"
3133pp7_filter_deps="gpl"
3134pp_filter_deps="gpl postproc"
3135pullup_filter_deps="gpl"
3136removelogo_filter_deps="avcodec avformat swscale"
3137repeatfields_filter_deps="gpl"
3138resample_filter_deps="avresample"
3139rubberband_filter_deps="librubberband"
3140sab_filter_deps="gpl swscale"
3141scale2ref_filter_deps="swscale"
3142scale_filter_deps="swscale"
3143scale_qsv_filter_deps="libmfx"
3144select_filter_select="pixelutils"
3145showcqt_filter_deps="avcodec avformat swscale"
3146showcqt_filter_select="fft"
3147showfreqs_filter_deps="avcodec"
3148showfreqs_filter_select="fft"
3149showspectrum_filter_deps="avcodec"
3150showspectrum_filter_select="fft"
3151showspectrumpic_filter_deps="avcodec"
3152showspectrumpic_filter_select="fft"
3153signature_filter_deps="gpl avcodec avformat"
3154smartblur_filter_deps="gpl swscale"
3155sofalizer_filter_deps="netcdf avcodec"
3156sofalizer_filter_select="fft"
3157spectrumsynth_filter_deps="avcodec"
3158spectrumsynth_filter_select="fft"
3159spp_filter_deps="gpl avcodec"
3160spp_filter_select="fft idctdsp fdctdsp me_cmp pixblockdsp"
3161stereo3d_filter_deps="gpl"
3162subtitles_filter_deps="avformat avcodec libass"
3163super2xsai_filter_deps="gpl"
3164pixfmts_super2xsai_test_deps="super2xsai_filter"
3165tinterlace_filter_deps="gpl"
3166tinterlace_merge_test_deps="tinterlace_filter"
3167tinterlace_pad_test_deps="tinterlace_filter"
3168uspp_filter_deps="gpl avcodec"
3169vaguedenoiser_filter_deps="gpl"
3170vidstabdetect_filter_deps="libvidstab"
3171vidstabtransform_filter_deps="libvidstab"
3172zmq_filter_deps="libzmq"
3173zoompan_filter_deps="swscale"
3174zscale_filter_deps="libzimg"
3175scale_vaapi_filter_deps="vaapi VAProcPipelineParameterBuffer"
3176
3177# examples
3178avio_dir_cmd_deps="avformat avutil"
3179avio_reading_deps="avformat avcodec avutil"
3180decode_audio_example_deps="avcodec avutil"
3181decode_video_example_deps="avcodec avutil"
3182demuxing_decoding_example_deps="avcodec avformat avutil"
3183encode_audio_example_deps="avcodec avutil"
3184encode_video_example_deps="avcodec avutil"
3185extract_mvs_example_deps="avcodec avformat avutil"
3186filter_audio_example_deps="avfilter avutil"
3187filtering_audio_example_deps="avfilter avcodec avformat avutil"
3188filtering_video_example_deps="avfilter avcodec avformat avutil"
3189http_multiclient_example_deps="avformat avutil fork"
3190metadata_example_deps="avformat avutil"
3191muxing_example_deps="avcodec avformat avutil swscale"
3192qsvdec_example_deps="avcodec avutil libmfx h264_qsv_decoder vaapi_x11"
3193remuxing_example_deps="avcodec avformat avutil"
3194resampling_audio_example_deps="avutil swresample"
3195scaling_video_example_deps="avutil swscale"
3196transcode_aac_example_deps="avcodec avformat swresample"
3197transcoding_example_deps="avfilter avcodec avformat avutil"
3198
3199# libraries, in linking order
3200avcodec_deps="avutil"
3201avdevice_deps="avformat avcodec avutil"
3202avfilter_deps="avutil"
3203avformat_deps="avcodec avutil"
3204avresample_deps="avutil"
3205postproc_deps="avutil gpl"
3206swresample_deps="avutil"
3207swscale_deps="avutil"
3208
3209# programs
3210ffmpeg_deps="avcodec avfilter avformat swresample"
3211ffmpeg_select="aformat_filter anull_filter atrim_filter format_filter
3212 null_filter
3213 trim_filter"
3214ffplay_deps="avcodec avformat swscale swresample sdl2"
3215ffplay_libs='$sdl2_libs'
3216ffplay_select="rdft crop_filter transpose_filter hflip_filter vflip_filter rotate_filter"
3217ffprobe_deps="avcodec avformat"
3218ffserver_deps="avformat fork sarestart"
3219ffserver_select="ffm_muxer rtp_protocol rtsp_demuxer"
3220
3221# documentation
3222podpages_deps="perl"
3223manpages_deps="perl pod2man"
3224htmlpages_deps="perl"
3225htmlpages_deps_any="makeinfo_html texi2html"
3226txtpages_deps="perl makeinfo"
3227doc_deps_any="manpages htmlpages podpages txtpages"
3228
3229# default parameters
3230
3231logfile="config.log"
3232
3233# installation paths
3234prefix_default="/usr/local"
3235bindir_default='${prefix}/bin'
3236datadir_default='${prefix}/share/ffmpeg'
3237docdir_default='${prefix}/share/doc/ffmpeg'
3238incdir_default='${prefix}/include'
3239libdir_default='${prefix}/lib'
3240mandir_default='${prefix}/share/man'
3241
3242# toolchain
3243ar_default="ar"
3244cc_default="gcc"
3245cxx_default="g++"
3246host_cc_default="gcc"
3247cp_f="cp -f"
3248doxygen_default="doxygen"
3249install="install"
3250ln_s_default="ln -s -f"
3251nm_default="nm -g"
3252objformat="elf"
3253pkg_config_default=pkg-config
3254ranlib_default="ranlib"
3255strip_default="strip"
3256version_script='--version-script'
3257yasmexe_default="yasm"
3258windres_default="windres"
3259
3260# OS
3261target_os_default=$(tolower $(uname -s))
3262host_os=$target_os_default
3263
3264# machine
3265if test "$target_os_default" = aix; then
3266 arch_default=$(uname -p)
3267 strip_default="strip -X32_64"
3268else
3269 arch_default=$(uname -m)
3270fi
3271cpu="generic"
3272intrinsics="none"
3273
3274# configurable options
3275enable $PROGRAM_LIST
3276enable $DOCUMENT_LIST
3277enable $EXAMPLE_LIST
3278enable $(filter_out avresample $LIBRARY_LIST)
3279enable stripping
3280
3281enable asm
3282enable debug
3283enable doc
3284enable faan faandct faanidct
3285enable optimizations
3286enable runtime_cpudetect
3287enable safe_bitstream_reader
3288enable static
3289enable swscale_alpha
3290enable valgrind_backtrace
3291
3292sws_max_filter_size_default=256
3293set_default sws_max_filter_size
3294
3295# build settings
3296SHFLAGS='-shared -Wl,-soname,$$(@F)'
3297LIBPREF="lib"
3298LIBSUF=".a"
3299FULLNAME='$(NAME)$(BUILDSUF)'
3300LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
3301SLIBPREF="lib"
3302SLIBSUF=".so"
3303SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
3304SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
3305SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
3306LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
3307SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'
3308SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR) $(SLIBNAME)'
3309VERSION_SCRIPT_POSTPROCESS_CMD="cat"
3310
3311asflags_filter=echo
3312cflags_filter=echo
3313ldflags_filter=echo
3314
3315AS_C='-c'
3316AS_O='-o $@'
3317CC_C='-c'
3318CC_E='-E -o $@'
3319CC_O='-o $@'
3320CXX_C='-c'
3321CXX_O='-o $@'
3322OBJCC_C='-c'
3323OBJCC_E='-E -o $@'
3324OBJCC_O='-o $@'
3325LD_O='-o $@'
3326LD_LIB='-l%'
3327LD_PATH='-L'
3328HOSTCC_C='-c'
3329HOSTCC_E='-E -o $@'
3330HOSTCC_O='-o $@'
3331HOSTLD_O='-o $@'
3332
3333host_libs='-lm'
3334host_cflags_filter=echo
3335host_ldflags_filter=echo
3336
3337target_path='$(CURDIR)'
3338
3339# since the object filename is not given with the -MM flag, the compiler
3340# is only able to print the basename, and we must add the path ourselves
3341DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< 2>/dev/null | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(@F),$(@D)/$(@F)," > $(@:.o=.d)'
3342DEPFLAGS='-MM'
3343
3344# find source path
3345if test -f configure; then
3346 source_path=.
3347else
3348 source_path=$(cd $(dirname "$0"); pwd)
3349 case "$source_path" in
3350 *[[:blank:]]*) die "Out of tree builds are impossible with whitespace in source path." ;;
3351 esac
3352 test -e "$source_path/config.h" &&
3353 die "Out of tree builds are impossible with config.h in source dir."
3354fi
3355
3356for v in "$@"; do
3357 r=${v#*=}
3358 l=${v%"$r"}
3359 r=$(sh_quote "$r")
3360 FFMPEG_CONFIGURATION="${FFMPEG_CONFIGURATION# } ${l}${r}"
3361done
3362
3363find_things(){
3364 thing=$1
3365 pattern=$2
3366 file=$source_path/$3
3367 sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
3368}
3369
3370ENCODER_LIST=$(find_things encoder ENC libavcodec/allcodecs.c)
3371DECODER_LIST=$(find_things decoder DEC libavcodec/allcodecs.c)
3372HWACCEL_LIST=$(find_things hwaccel HWACCEL libavcodec/allcodecs.c)
3373PARSER_LIST=$(find_things parser PARSER libavcodec/allcodecs.c)
3374MUXER_LIST=$(find_things muxer _MUX libavformat/allformats.c)
3375DEMUXER_LIST=$(find_things demuxer DEMUX libavformat/allformats.c)
3376OUTDEV_LIST=$(find_things outdev OUTDEV libavdevice/alldevices.c)
3377INDEV_LIST=$(find_things indev _IN libavdevice/alldevices.c)
3378FILTER_LIST=$(find_things filter FILTER libavfilter/allfilters.c)
3379
3380find_things_extern(){
3381 thing=$1
3382 pattern=$2
3383 file=$source_path/$3
3384 sed -n "s/^[^#]*extern.*$pattern *ff_\([^ ]*\)_$thing;/\1_$thing/p" "$file"
3385}
3386
3387BSF_LIST=$(find_things_extern bsf AVBitStreamFilter libavcodec/bitstream_filters.c)
3388PROTOCOL_LIST=$(find_things_extern protocol URLProtocol libavformat/protocols.c)
3389
3390ALL_COMPONENTS="
3391 $BSF_LIST
3392 $DECODER_LIST
3393 $DEMUXER_LIST
3394 $ENCODER_LIST
3395 $FILTER_LIST
3396 $HWACCEL_LIST
3397 $INDEV_LIST
3398 $MUXER_LIST
3399 $OUTDEV_LIST
3400 $PARSER_LIST
3401 $PROTOCOL_LIST
3402"
3403
3404for n in $COMPONENT_LIST; do
3405 v=$(toupper ${n%s})_LIST
3406 eval enable \$$v
3407 eval ${n}_if_any="\$$v"
3408done
3409
3410enable $ARCH_EXT_LIST
3411
3412die_unknown(){
3413 echo "Unknown option \"$1\"."
3414 echo "See $0 --help for available options."
3415 exit 1
3416}
3417
3418print_in_columns() {
3419 cols=$(expr $ncols / 24)
3420 cat | tr ' ' '\n' | sort | pr -r "-$cols" -w $ncols -t
3421}
3422
3423show_list() {
3424 suffix=_$1
3425 shift
3426 echo $* | sed s/$suffix//g | print_in_columns
3427 exit 0
3428}
3429
3430rand_list(){
3431 IFS=', '
3432 set -- $*
3433 unset IFS
3434 for thing; do
3435 comp=${thing%:*}
3436 prob=${thing#$comp}
3437 prob=${prob#:}
3438 is_in ${comp} $COMPONENT_LIST && eval comp=\$$(toupper ${comp%s})_LIST
3439 echo "prob ${prob:-0.5}"
3440 printf '%s\n' $comp
3441 done
3442}
3443
3444do_random(){
3445 action=$1
3446 shift
3447 random_seed=$(awk "BEGIN { srand($random_seed); print srand() }")
3448 $action $(rand_list "$@" | awk "BEGIN { srand($random_seed) } \$1 == \"prob\" { prob = \$2; next } rand() < prob { print }")
3449}
3450
3451for opt do
3452 optval="${opt#*=}"
3453 case "$opt" in
3454 --extra-ldflags=*)
3455 add_ldflags $optval
3456 ;;
3457 --extra-ldexeflags=*)
3458 add_ldexeflags $optval
3459 ;;
3460 --extra-ldlibflags=*)
3461 add_ldlibflags $optval
3462 ;;
3463 --extra-libs=*)
3464 add_extralibs $optval
3465 ;;
3466 --disable-devices)
3467 disable $INDEV_LIST $OUTDEV_LIST
3468 ;;
3469 --enable-debug=*)
3470 debuglevel="$optval"
3471 ;;
3472 --disable-programs)
3473 disable $PROGRAM_LIST
3474 ;;
3475 --disable-everything)
3476 map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
3477 ;;
3478 --disable-all)
3479 map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
3480 disable $LIBRARY_LIST $PROGRAM_LIST doc
3481 enable avutil
3482 ;;
3483 --enable-random|--disable-random)
3484 action=${opt%%-random}
3485 do_random ${action#--} $COMPONENT_LIST
3486 ;;
3487 --enable-random=*|--disable-random=*)
3488 action=${opt%%-random=*}
3489 do_random ${action#--} $optval
3490 ;;
3491 --enable-*=*|--disable-*=*)
3492 eval $(echo "${opt%%=*}" | sed 's/--/action=/;s/-/ thing=/')
3493 is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt"
3494 eval list=\$$(toupper $thing)_LIST
3495 name=$(echo "${optval}" | sed "s/,/_${thing}|/g")_${thing}
3496 list=$(filter "$name" $list)
3497 [ "$list" = "" ] && warn "Option $opt did not match anything"
3498 $action $list
3499 ;;
3500 --enable-?*|--disable-?*)
3501 eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
3502 if is_in $option $COMPONENT_LIST; then
3503 test $action = disable && action=unset
3504 eval $action \$$(toupper ${option%s})_LIST
3505 elif is_in $option $CMDLINE_SELECT; then
3506 $action $option
3507 else
3508 die_unknown $opt
3509 fi
3510 ;;
3511 --list-*)
3512 NAME="${opt#--list-}"
3513 is_in $NAME $COMPONENT_LIST || die_unknown $opt
3514 NAME=${NAME%s}
3515 eval show_list $NAME \$$(toupper $NAME)_LIST
3516 ;;
3517 --help|-h) show_help
3518 ;;
3519 --quiet|-q) quiet=yes
3520 ;;
3521 --fatal-warnings) enable fatal_warnings
3522 ;;
3523 *)
3524 optname="${opt%%=*}"
3525 optname="${optname#--}"
3526 optname=$(echo "$optname" | sed 's/-/_/g')
3527 if is_in $optname $CMDLINE_SET; then
3528 eval $optname='$optval'
3529 elif is_in $optname $CMDLINE_APPEND; then
3530 append $optname "$optval"
3531 else
3532 die_unknown $opt
3533 fi
3534 ;;
3535 esac
3536done
3537
3538for e in $env; do
3539 eval "export $e"
3540done
3541
3542# Mark specifically enabled, but normally autodetected libraries as requested.
3543for lib in $AUTODETECT_LIBS; do
3544 enabled $lib && request $lib
3545done
3546
3547# Enable platform codecs by default.
3548enable_weak audiotoolbox
3549
3550# Enable hwaccels by default.
3551enable_weak d3d11va dxva2 vaapi vda vdpau videotoolbox_hwaccel xvmc
3552enable_weak xlib
3553
3554enable_weak cuda cuvid nvenc vda_framework videotoolbox videotoolbox_encoder
3555
3556disabled logging && logfile=/dev/null
3557
3558die_license_disabled() {
3559 enabled $1 || { enabled $v && die "$v is $1 and --enable-$1 is not specified."; }
3560}
3561
3562die_license_disabled_gpl() {
3563 enabled $1 || { enabled $v && die "$v is incompatible with the gpl and --enable-$1 is not specified."; }
3564}
3565
3566map "die_license_disabled gpl" $EXTERNAL_LIBRARY_GPL_LIST $EXTERNAL_LIBRARY_GPLV3_LIST
3567map "die_license_disabled version3" $EXTERNAL_LIBRARY_VERSION3_LIST $EXTERNAL_LIBRARY_GPLV3_LIST
3568
3569enabled gpl && map "die_license_disabled_gpl nonfree" $EXTERNAL_LIBRARY_NONFREE_LIST
3570map "die_license_disabled nonfree" $HWACCEL_LIBRARY_NONFREE_LIST
3571
3572enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
3573
3574# Disable all the library-specific components if the library itself
3575# is disabled, see AVCODEC_LIST and following _LIST variables.
3576
3577disable_components(){
3578 disabled ${1} && disable $(
3579 eval components="\$$(toupper ${1})_COMPONENTS"
3580 map 'eval echo \${$(toupper ${v%s})_LIST}' $components
3581 )
3582}
3583
3584map 'disable_components $v' $LIBRARY_LIST
3585
3586echo "# $0 $FFMPEG_CONFIGURATION" > $logfile
3587set >> $logfile
3588
3589test -n "$valgrind" && toolchain="valgrind-memcheck"
3590
3591case "$toolchain" in
3592 *-asan)
3593 cc_default="${toolchain%-asan}"
3594 add_cflags -fsanitize=address
3595 add_ldflags -fsanitize=address
3596 ;;
3597 *-msan)
3598 cc_default="${toolchain%-msan}"
3599 add_cflags -fsanitize=memory -fsanitize-memory-track-origins
3600 add_ldflags -fsanitize=memory
3601 ;;
3602 *-tsan)
3603 cc_default="${toolchain%-tsan}"
3604 add_cflags -fsanitize=thread -fPIE
3605 add_ldflags -fsanitize=thread -pie
3606 case "$toolchain" in
3607 gcc-tsan)
3608 add_cflags -fPIC
3609 add_ldflags -fPIC
3610 ;;
3611 esac
3612 ;;
3613 *-usan)
3614 cc_default="${toolchain%-usan}"
3615 add_cflags -fsanitize=undefined
3616 add_ldflags -fsanitize=undefined
3617 ;;
3618 valgrind-*)
3619 target_exec_default="valgrind"
3620 case "$toolchain" in
3621 valgrind-massif)
3622 target_exec_args="--tool=massif --alloc-fn=av_malloc --alloc-fn=av_mallocz --alloc-fn=av_calloc --alloc-fn=av_fast_padded_malloc --alloc-fn=av_fast_malloc --alloc-fn=av_realloc_f --alloc-fn=av_fast_realloc --alloc-fn=av_realloc"
3623 ;;
3624 valgrind-memcheck)
3625 target_exec_args="--error-exitcode=1 --malloc-fill=0x2a --track-origins=yes --leak-check=full --gen-suppressions=all --suppressions=$source_path/tests/fate-valgrind.supp"
3626 ;;
3627 esac
3628 ;;
3629 msvc)
3630 # Check whether the current MSVC version needs the C99 converter.
3631 # From MSVC 2013 (compiler major version 18) onwards, it does actually
3632 # support enough of C99 to build ffmpeg. Default to the new
3633 # behaviour if the regexp was unable to match anything, since this
3634 # successfully parses the version number of existing supported
3635 # versions that require the converter (MSVC 2010 and 2012).
3636 cl_major_ver=$(cl 2>&1 | sed -n 's/.*Version \([[:digit:]]\{1,\}\)\..*/\1/p')
3637 if [ -z "$cl_major_ver" ] || [ $cl_major_ver -ge 18 ]; then
3638 cc_default="cl"
3639 else
3640 cc_default="c99wrap cl"
3641 fi
3642 ld_default="$source_path/compat/windows/mslink"
3643 nm_default="dumpbin -symbols"
3644 ar_default="lib"
3645 case "$arch" in
3646 arm*)
3647 as_default="armasm"
3648 ;;
3649 esac
3650 target_os_default="win32"
3651 # Use a relative path for TMPDIR. This makes sure all the
3652 # ffconf temp files are written with a relative path, avoiding
3653 # issues with msys/win32 path conversion for MSVC parameters
3654 # such as -Fo<file> or -out:<file>.
3655 TMPDIR=.
3656 ;;
3657 icl)
3658 cc_default="icl"
3659 ld_default="xilink"
3660 nm_default="dumpbin -symbols"
3661 ar_default="xilib"
3662 target_os_default="win32"
3663 TMPDIR=.
3664 ;;
3665 gcov)
3666 add_cflags -fprofile-arcs -ftest-coverage
3667 add_ldflags -fprofile-arcs -ftest-coverage
3668 ;;
3669 llvm-cov)
3670 add_cflags -fprofile-arcs -ftest-coverage
3671 add_ldflags --coverage
3672 ;;
3673 hardened)
3674 add_cppflags -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2
3675 add_cflags -fno-strict-overflow -fstack-protector-all
3676 add_ldflags -Wl,-z,relro -Wl,-z,now
3677 add_cflags -fPIE
3678 add_ldexeflags -fPIE -pie
3679 ;;
3680 ?*)
3681 die "Unknown toolchain $toolchain"
3682 ;;
3683esac
3684
3685test -n "$cross_prefix" && enable cross_compile
3686
3687if enabled cross_compile; then
3688 test -n "$arch" && test -n "$target_os" ||
3689 die "Must specify target arch and OS when cross-compiling"
3690fi
3691
3692ar_default="${cross_prefix}${ar_default}"
3693cc_default="${cross_prefix}${cc_default}"
3694cxx_default="${cross_prefix}${cxx_default}"
3695nm_default="${cross_prefix}${nm_default}"
3696pkg_config_default="${cross_prefix}${pkg_config_default}"
3697if ${cross_prefix}${ranlib_default} 2>&1 | grep -q "\-D "; then
3698 ranlib_default="${cross_prefix}${ranlib_default} -D"
3699else
3700 ranlib_default="${cross_prefix}${ranlib_default}"
3701fi
3702strip_default="${cross_prefix}${strip_default}"
3703windres_default="${cross_prefix}${windres_default}"
3704
3705sysinclude_default="${sysroot}/usr/include"
3706
3707set_default arch cc cxx doxygen pkg_config ranlib strip sysinclude \
3708 target_exec target_os yasmexe
3709enabled cross_compile || host_cc_default=$cc
3710set_default host_cc
3711
3712pkg_config_fail_message=""
3713if ! $pkg_config --version >/dev/null 2>&1; then
3714 warn "$pkg_config not found, library detection may fail."
3715 pkg_config=false
3716elif is_in -static $cc $LDFLAGS && ! is_in --static $pkg_config $pkg_config_flags; then
3717 pkg_config_fail_message="
3718Note: When building a static binary, add --pkg-config-flags=\"--static\"."
3719fi
3720
3721if test $doxygen != $doxygen_default && \
3722 ! $doxygen --version >/dev/null 2>&1; then
3723 warn "Specified doxygen \"$doxygen\" not found, API documentation will fail to build."
3724fi
3725
3726exesuf() {
3727 case $1 in
3728 mingw32*|mingw64*|win32|win64|cygwin*|*-dos|freedos|opendos|os/2*|symbian) echo .exe ;;
3729 esac
3730}
3731
3732EXESUF=$(exesuf $target_os)
3733HOSTEXESUF=$(exesuf $host_os)
3734
3735# set temporary file name
3736: ${TMPDIR:=$TEMPDIR}
3737: ${TMPDIR:=$TMP}
3738: ${TMPDIR:=/tmp}
3739
3740if [ -n "$tempprefix" ] ; then
3741 mktemp(){
3742 echo $tempprefix.${HOSTNAME}.${UID}
3743 }
3744elif ! check_cmd mktemp -u XXXXXX; then
3745 # simple replacement for missing mktemp
3746 # NOT SAFE FOR GENERAL USE
3747 mktemp(){
3748 echo "${2%%XXX*}.${HOSTNAME}.${UID}.$$"
3749 }
3750fi
3751
3752tmpfile(){
3753 tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
3754 (set -C; exec > $tmp) 2>/dev/null ||
3755 die "Unable to create temporary file in $TMPDIR."
3756 append TMPFILES $tmp
3757 eval $1=$tmp
3758}
3759
3760trap 'rm -f -- $TMPFILES' EXIT
3761
3762tmpfile TMPASM .asm
3763tmpfile TMPC .c
3764tmpfile TMPCPP .cpp
3765tmpfile TMPE $EXESUF
3766tmpfile TMPH .h
3767tmpfile TMPM .m
3768tmpfile TMPO .o
3769tmpfile TMPS .S
3770tmpfile TMPSH .sh
3771tmpfile TMPV .ver
3772
3773unset -f mktemp
3774
3775chmod +x $TMPE
3776
3777# make sure we can execute files in $TMPDIR
3778cat > $TMPSH 2>> $logfile <<EOF
3779#! /bin/sh
3780EOF
3781chmod +x $TMPSH >> $logfile 2>&1
3782if ! $TMPSH >> $logfile 2>&1; then
3783 cat <<EOF
3784Unable to create and execute files in $TMPDIR. Set the TMPDIR environment
3785variable to another directory and make sure that it is not mounted noexec.
3786EOF
3787 die "Sanity test failed."
3788fi
3789
3790armasm_flags(){
3791 for flag; do
3792 case $flag in
3793 # Filter out MSVC cl.exe options from cflags that shouldn't
3794 # be passed to gas-preprocessor
3795 -M[TD]*) ;;
3796 *) echo $flag ;;
3797 esac
3798 done
3799}
3800
3801ccc_flags(){
3802 for flag; do
3803 case $flag in
3804 -std=c99) echo -c99 ;;
3805 -mcpu=*) echo -arch ${flag#*=} ;;
3806 -mieee) echo -ieee ;;
3807 -O*|-fast) echo $flag ;;
3808 -fno-math-errno) echo -assume nomath_errno ;;
3809 -g) echo -g3 ;;
3810 -Wall) echo -msg_enable level2 ;;
3811 -Wno-pointer-sign) echo -msg_disable ptrmismatch1 ;;
3812 -Wl,*) echo $flag ;;
3813 -f*|-W*) ;;
3814 *) echo $flag ;;
3815 esac
3816 done
3817}
3818
3819cparser_flags(){
3820 for flag; do
3821 case $flag in
3822 -Wno-switch) echo -Wno-switch-enum ;;
3823 -Wno-format-zero-length) ;;
3824 -Wdisabled-optimization) ;;
3825 -Wno-pointer-sign) echo -Wno-other ;;
3826 *) echo $flag ;;
3827 esac
3828 done
3829}
3830
3831msvc_common_flags(){
3832 for flag; do
3833 case $flag in
3834 # In addition to specifying certain flags under the compiler
3835 # specific filters, they must be specified here as well or else the
3836 # generic catch all at the bottom will print the original flag.
3837 -Wall) ;;
3838 -std=c99) ;;
3839 # Common flags
3840 -fomit-frame-pointer) ;;
3841 -g) echo -Z7 ;;
3842 -fno-math-errno) ;;
3843 -fno-common) ;;
3844 -fno-signed-zeros) ;;
3845 -fPIC) ;;
3846 -mthumb) ;;
3847 -march=*) ;;
3848 -lz) echo zlib.lib ;;
3849 -lavifil32) echo vfw32.lib ;;
3850 -lavicap32) echo vfw32.lib user32.lib ;;
3851 -lx264) echo libx264.lib ;;
3852 -l*) echo ${flag#-l}.lib ;;
3853 -LARGEADDRESSAWARE) echo $flag ;;
3854 -L*) echo -libpath:${flag#-L} ;;
3855 *) echo $flag ;;
3856 esac
3857 done
3858}
3859
3860msvc_flags(){
3861 msvc_common_flags "$@"
3862 for flag; do
3863 case $flag in
3864 -Wall) echo -W4 -wd4244 -wd4127 -wd4018 -wd4389 \
3865 -wd4146 -wd4057 -wd4204 -wd4706 -wd4305 \
3866 -wd4152 -wd4324 -we4013 -wd4100 -wd4214 \
3867 -wd4307 \
3868 -wd4273 -wd4554 -wd4701 ;;
3869 esac
3870 done
3871}
3872
3873icl_flags(){
3874 msvc_common_flags "$@"
3875 for flag; do
3876 case $flag in
3877 # Despite what Intel's documentation says -Wall, which is supported
3878 # on Windows, does enable remarks so disable them here.
3879 -Wall) echo $flag -Qdiag-disable:remark ;;
3880 -std=c99) echo -Qstd=c99 ;;
3881 -flto) echo -ipo ;;
3882 esac
3883 done
3884}
3885
3886icc_flags(){
3887 for flag; do
3888 case $flag in
3889 -flto) echo -ipo ;;
3890 *) echo $flag ;;
3891 esac
3892 done
3893}
3894
3895pgi_flags(){
3896 for flag; do
3897 case $flag in
3898 -flto) echo -Mipa=fast,libopt,libinline,vestigial ;;
3899 -fomit-frame-pointer) echo -Mnoframe ;;
3900 -g) echo -gopt ;;
3901 *) echo $flag ;;
3902 esac
3903 done
3904}
3905
3906suncc_flags(){
3907 for flag; do
3908 case $flag in
3909 -march=*|-mcpu=*)
3910 case "${flag#*=}" in
3911 native) echo -xtarget=native ;;
3912 v9|niagara) echo -xarch=sparc ;;
3913 ultrasparc) echo -xarch=sparcvis ;;
3914 ultrasparc3|niagara2) echo -xarch=sparcvis2 ;;
3915 i586|pentium) echo -xchip=pentium ;;
3916 i686|pentiumpro|pentium2) echo -xtarget=pentium_pro ;;
3917 pentium3*|c3-2) echo -xtarget=pentium3 ;;
3918 pentium-m) echo -xarch=sse2 -xchip=pentium3 ;;
3919 pentium4*) echo -xtarget=pentium4 ;;
3920 prescott|nocona) echo -xarch=sse3 -xchip=pentium4 ;;
3921 *-sse3) echo -xarch=sse3 ;;
3922 core2) echo -xarch=ssse3 -xchip=core2 ;;
3923 bonnell) echo -xarch=ssse3 ;;
3924 corei7|nehalem) echo -xtarget=nehalem ;;
3925 westmere) echo -xtarget=westmere ;;
3926 silvermont) echo -xarch=sse4_2 ;;
3927 corei7-avx|sandybridge) echo -xtarget=sandybridge ;;
3928 core-avx*|ivybridge|haswell|broadwell|skylake*|knl)
3929 echo -xarch=avx ;;
3930 amdfam10|barcelona) echo -xtarget=barcelona ;;
3931 btver1) echo -xarch=amdsse4a ;;
3932 btver2|bdver*|znver*) echo -xarch=avx ;;
3933 athlon-4|athlon-[mx]p) echo -xarch=ssea ;;
3934 k8|opteron|athlon64|athlon-fx)
3935 echo -xarch=sse2a ;;
3936 athlon*) echo -xarch=pentium_proa ;;
3937 esac
3938 ;;
3939 -std=c99) echo -xc99 ;;
3940 -fomit-frame-pointer) echo -xregs=frameptr ;;
3941 -fPIC) echo -KPIC -xcode=pic32 ;;
3942 -W*,*) echo $flag ;;
3943 -f*-*|-W*|-mimpure-text) ;;
3944 -shared) echo -G ;;
3945 *) echo $flag ;;
3946 esac
3947 done
3948}
3949
3950tms470_flags(){
3951 for flag; do
3952 case $flag in
3953 -march=*|-mcpu=*)
3954 case "${flag#*=}" in
3955 armv7-a|cortex-a*) echo -mv=7a8 ;;
3956 armv7-r|cortex-r*) echo -mv=7r4 ;;
3957 armv7-m|cortex-m*) echo -mv=7m3 ;;
3958 armv6*|arm11*) echo -mv=6 ;;
3959 armv5*e|arm[79]*e*|arm9[24]6*|arm96*|arm102[26])
3960 echo -mv=5e ;;
3961 armv4*|arm7*|arm9[24]*) echo -mv=4 ;;
3962 esac
3963 ;;
3964 -mfpu=neon) echo --float_support=vfpv3 --neon ;;
3965 -mfpu=vfp) echo --float_support=vfpv2 ;;
3966 -mfpu=vfpv3) echo --float_support=vfpv3 ;;
3967 -mfpu=vfpv3-d16) echo --float_support=vfpv3d16 ;;
3968 -msoft-float) echo --float_support=vfplib ;;
3969 -O[0-3]|-mf=*) echo $flag ;;
3970 -g) echo -g -mn ;;
3971 -pds=*) echo $flag ;;
3972 -D*|-I*) echo $flag ;;
3973 --gcc|--abi=*) echo $flag ;;
3974 -me) echo $flag ;;
3975 esac
3976 done
3977}
3978
3979probe_cc(){
3980 pfx=$1
3981 _cc=$2
3982 first=$3
3983
3984 unset _type _ident _cc_c _cc_e _cc_o _flags _cflags
3985 unset _ld_o _ldflags _ld_lib _ld_path
3986 unset _depflags _DEPCMD _DEPFLAGS
3987 _flags_filter=echo
3988
3989 if $_cc --version 2>&1 | grep -q '^GNU assembler'; then
3990 true # no-op to avoid reading stdin in following checks
3991 elif $_cc -v 2>&1 | grep -q '^gcc.*LLVM'; then
3992 _type=llvm_gcc
3993 gcc_extra_ver=$(expr "$($_cc --version 2>/dev/null | head -n1)" : '.*\((.*)\)')
3994 _ident="llvm-gcc $($_cc -dumpversion 2>/dev/null) $gcc_extra_ver"
3995 _depflags='-MMD -MF $(@:.o=.d) -MT $@'
3996 _cflags_speed='-O3'
3997 _cflags_size='-Os'
3998 elif $_cc -v 2>&1 | grep -qi ^gcc; then
3999 _type=gcc
4000 gcc_version=$($_cc --version | head -n1)
4001 gcc_basever=$($_cc -dumpversion)
4002 gcc_pkg_ver=$(expr "$gcc_version" : '[^ ]* \(([^)]*)\)')
4003 gcc_ext_ver=$(expr "$gcc_version" : ".*$gcc_pkg_ver $gcc_basever \\(.*\\)")
4004 _ident=$(cleanws "gcc $gcc_basever $gcc_pkg_ver $gcc_ext_ver")
4005 case $gcc_basever in
4006 2) ;;
4007 2.*) ;;
4008 *) _depflags='-MMD -MF $(@:.o=.d) -MT $@' ;;
4009 esac
4010 if [ "$first" = true ]; then
4011 case $gcc_basever in
4012 4.2*)
4013 warn "gcc 4.2 is outdated and may miscompile FFmpeg. Please use a newer compiler." ;;
4014 esac
4015 fi
4016 _cflags_speed='-O3'
4017 _cflags_size='-Os'
4018 elif $_cc --version 2>/dev/null | grep -q ^icc; then
4019 _type=icc
4020 _ident=$($_cc --version | head -n1)
4021 _depflags='-MMD'
4022 _cflags_speed='-O3'
4023 _cflags_size='-Os'
4024 _cflags_noopt='-O1'
4025 _flags_filter=icc_flags
4026 elif $_cc -v 2>&1 | grep -q xlc; then
4027 _type=xlc
4028 _ident=$($_cc -qversion 2>/dev/null | head -n1)
4029 _cflags_speed='-O5'
4030 _cflags_size='-O5 -qcompact'
4031 elif $_cc -V 2>/dev/null | grep -q Compaq; then
4032 _type=ccc
4033 _ident=$($_cc -V | head -n1 | cut -d' ' -f1-3)
4034 _DEPFLAGS='-M'
4035 _cflags_speed='-fast'
4036 _cflags_size='-O1'
4037 _flags_filter=ccc_flags
4038 elif $_cc --vsn 2>/dev/null | grep -Eq "ARM (C/C\+\+ )?Compiler"; then
4039 test -d "$sysroot" || die "No valid sysroot specified."
4040 _type=armcc
4041 _ident=$($_cc --vsn | grep -i build | head -n1 | sed 's/.*: //')
4042 armcc_conf="$PWD/armcc.conf"
4043 $_cc --arm_linux_configure \
4044 --arm_linux_config_file="$armcc_conf" \
4045 --configure_sysroot="$sysroot" \
4046 --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
4047 die "Error creating armcc configuration file."
4048 $_cc --vsn | grep -q RVCT && armcc_opt=rvct || armcc_opt=armcc
4049 _flags="--arm_linux_config_file=$armcc_conf --translate_gcc"
4050 as_default="${cross_prefix}gcc"
4051 _depflags='-MMD'
4052 _cflags_speed='-O3'
4053 _cflags_size='-Os'
4054 elif $_cc -version 2>/dev/null | grep -Eq 'TMS470|TI ARM'; then
4055 _type=tms470
4056 _ident=$($_cc -version | head -n1 | tr -s ' ')
4057 _flags='--gcc --abi=eabi -me'
4058 _cc_e='-ppl -fe=$@'
4059 _cc_o='-fe=$@'
4060 _depflags='-ppa -ppd=$(@:.o=.d)'
4061 _cflags_speed='-O3 -mf=5'
4062 _cflags_size='-O3 -mf=2'
4063 _flags_filter=tms470_flags
4064 elif $_cc -v 2>&1 | grep -q clang; then
4065 _type=clang
4066 _ident=$($_cc --version 2>/dev/null | head -n1)
4067 _depflags='-MMD -MF $(@:.o=.d) -MT $@'
4068 _cflags_speed='-O3'
4069 _cflags_size='-Oz'
4070 elif $_cc -V 2>&1 | grep -q Sun; then
4071 _type=suncc
4072 _ident=$($_cc -V 2>&1 | head -n1 | cut -d' ' -f 2-)
4073 _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "1s,^.*: ,$@: ," -e "\$$!s,\$$, \\\," -e "1!s,^.*: , ," > $(@:.o=.d)'
4074 _DEPFLAGS='-xM1 -xc99'
4075 _ldflags='-std=c99'
4076 _cflags_speed='-O5'
4077 _cflags_size='-O5 -xspace'
4078 _flags_filter=suncc_flags
4079 elif $_cc -v 2>&1 | grep -q 'PathScale\|Path64'; then
4080 _type=pathscale
4081 _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
4082 _depflags='-MMD -MF $(@:.o=.d) -MT $@'
4083 _cflags_speed='-O2'
4084 _cflags_size='-Os'
4085 _flags_filter='filter_out -Wdisabled-optimization'
4086 elif $_cc -v 2>&1 | grep -q Open64; then
4087 _type=open64
4088 _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
4089 _depflags='-MMD -MF $(@:.o=.d) -MT $@'
4090 _cflags_speed='-O2'
4091 _cflags_size='-Os'
4092 _flags_filter='filter_out -Wdisabled-optimization|-Wtype-limits|-fno-signed-zeros'
4093 elif $_cc -V 2>&1 | grep -q Portland; then
4094 _type=pgi
4095 _ident="PGI $($_cc -V 2>&1 | awk '/^pgcc/ { print $2; exit }')"
4096 opt_common='-alias=ansi -Mdse -Mlre -Mpre'
4097 _cflags_speed="-O3 -Mautoinline -Munroll=c:4 $opt_common"
4098 _cflags_size="-O2 -Munroll=c:1 $opt_common"
4099 _cflags_noopt="-O"
4100 _flags_filter=pgi_flags
4101 elif $_cc 2>&1 | grep -q 'Microsoft.*ARM.*Assembler'; then
4102 _type=armasm
4103 _ident=$($_cc | head -n1)
4104 # 4509: "This form of conditional instruction is deprecated"
4105 _flags="-nologo -ignore 4509"
4106 _flags_filter=armasm_flags
4107 elif $_cc 2>&1 | grep -q Intel; then
4108 _type=icl
4109 _ident=$($_cc 2>&1 | head -n1)
4110 _depflags='-QMMD -QMF$(@:.o=.d) -QMT$@'
4111 # Not only is O3 broken on 13.x+ but it is slower on all previous
4112 # versions (tested) as well.
4113 _cflags_speed="-O2"
4114 _cflags_size="-O1 -Oi" # -O1 without -Oi miscompiles stuff
4115 if $_cc 2>&1 | grep -q Linker; then
4116 _ld_o='-out:$@'
4117 else
4118 _ld_o='-Fe$@'
4119 fi
4120 _cc_o='-Fo$@'
4121 _cc_e='-P'
4122 _flags_filter=icl_flags
4123 _ld_lib='lib%.a'
4124 _ld_path='-libpath:'
4125 # -Qdiag-error to make icl error when seeing certain unknown arguments
4126 _flags='-nologo -Qdiag-error:4044,10157'
4127 # -Qvec- -Qsimd- to prevent miscompilation, -GS, fp:precise for consistency
4128 # with MSVC which enables it by default.
4129 _cflags='-Qms0 -Qvec- -Qsimd- -GS -fp:precise'
4130 disable stripping
4131 elif $_cc -? 2>/dev/null | grep -q 'LLVM.*Linker'; then
4132 # lld can emulate multiple different linkers; in ms link.exe mode,
4133 # the -? parameter gives the help output which contains an identifyable
4134 # string, while it gives an error in other modes.
4135 _type=lld-link
4136 # The link.exe mode doesn't have a switch for getting the version,
4137 # but we can force it back to gnu mode and get the version from there.
4138 _ident=$($_cc -flavor gnu --version 2>/dev/null)
4139 _ld_o='-out:$@'
4140 _flags_filter=msvc_flags
4141 _ld_lib='lib%.a'
4142 _ld_path='-libpath:'
4143 elif $_cc -nologo- 2>&1 | grep -q Microsoft; then
4144 _type=msvc
4145 _ident=$($_cc 2>&1 | head -n1)
4146 _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< 2>&1 | awk '\''/including/ { sub(/^.*file: */, ""); gsub(/\\/, "/"); if (!match($$0, / /)) print "$@:", $$0 }'\'' > $(@:.o=.d)'
4147 _DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -showIncludes -Zs'
4148 _cflags_speed="-O2"
4149 _cflags_size="-O1"
4150 if $_cc -nologo- 2>&1 | grep -q Linker; then
4151 _ld_o='-out:$@'
4152 else
4153 _ld_o='-Fe$@'
4154 fi
4155 _cc_o='-Fo$@'
4156 _cc_e='-P -Fi$@'
4157 _flags_filter=msvc_flags
4158 _ld_lib='lib%.a'
4159 _ld_path='-libpath:'
4160 _flags='-nologo'
4161 disable stripping
4162 elif $_cc --version 2>/dev/null | grep -q ^cparser; then
4163 _type=cparser
4164 _ident=$($_cc --version | head -n1)
4165 _depflags='-MMD'
4166 _cflags_speed='-O4'
4167 _cflags_size='-O2'
4168 _flags_filter=cparser_flags
4169 fi
4170
4171 eval ${pfx}_type=\$_type
4172 eval ${pfx}_ident=\$_ident
4173}
4174
4175set_ccvars(){
4176 eval ${1}_C=\${_cc_c-\${${1}_C}}
4177 eval ${1}_E=\${_cc_e-\${${1}_E}}
4178 eval ${1}_O=\${_cc_o-\${${1}_O}}
4179
4180 if [ -n "$_depflags" ]; then
4181 eval ${1}_DEPFLAGS=\$_depflags
4182 else
4183 eval ${1}DEP=\${_DEPCMD:-\$DEPCMD}
4184 eval ${1}DEP_FLAGS=\${_DEPFLAGS:-\$DEPFLAGS}
4185 eval DEP${1}FLAGS=\$_flags
4186 fi
4187}
4188
4189probe_cc cc "$cc" "true"
4190cflags_filter=$_flags_filter
4191cflags_speed=$_cflags_speed
4192cflags_size=$_cflags_size
4193cflags_noopt=$_cflags_noopt
4194add_cflags $_flags $_cflags
4195cc_ldflags=$_ldflags
4196set_ccvars CC
4197
4198probe_cc hostcc "$host_cc"
4199host_cflags_filter=$_flags_filter
4200add_host_cflags $_flags $_cflags
4201set_ccvars HOSTCC
4202
4203test -n "$cc_type" && enable $cc_type ||
4204 warn "Unknown C compiler $cc, unable to select optimal CFLAGS"
4205
4206: ${as_default:=$cc}
4207: ${objcc_default:=$cc}
4208: ${dep_cc_default:=$cc}
4209: ${ld_default:=$cc}
4210: ${host_ld_default:=$host_cc}
4211set_default ar as objcc dep_cc ld ln_s host_ld windres
4212
4213probe_cc as "$as"
4214asflags_filter=$_flags_filter
4215add_asflags $_flags $_cflags
4216set_ccvars AS
4217
4218probe_cc objcc "$objcc"
4219objcflags_filter=$_flags_filter
4220add_objcflags $_flags $_cflags
4221set_ccvars OBJC
4222
4223probe_cc ld "$ld"
4224ldflags_filter=$_flags_filter
4225add_ldflags $_flags $_ldflags
4226test "$cc_type" != "$ld_type" && add_ldflags $cc_ldflags
4227LD_O=${_ld_o-$LD_O}
4228LD_LIB=${_ld_lib-$LD_LIB}
4229LD_PATH=${_ld_path-$LD_PATH}
4230
4231probe_cc hostld "$host_ld"
4232host_ldflags_filter=$_flags_filter
4233add_host_ldflags $_flags $_ldflags
4234HOSTLD_O=${_ld_o-$HOSTLD_O}
4235
4236if [ -z "$CC_DEPFLAGS" ] && [ "$dep_cc" != "$cc" ]; then
4237 probe_cc depcc "$dep_cc"
4238 CCDEP=${_DEPCMD:-$DEPCMD}
4239 CCDEP_FLAGS=${_DEPFLAGS:=$DEPFLAGS}
4240 DEPCCFLAGS=$_flags
4241fi
4242
4243if $ar 2>&1 | grep -q Microsoft; then
4244 arflags="-nologo"
4245 ar_o='-out:$@'
4246elif $ar 2>&1 | grep -q 'Texas Instruments'; then
4247 arflags="rq"
4248 ar_o='$@'
4249elif $ar 2>&1 | grep -q 'Usage: ar.*-X.*any'; then
4250 arflags='-Xany -r -c'
4251 ar_o='$@'
4252elif $ar 2>&1 | grep -q "\[D\] "; then
4253 arflags="rcD"
4254 ar_o='$@'
4255else
4256 arflags="rc"
4257 ar_o='$@'
4258fi
4259
4260add_cflags $extra_cflags
4261add_cxxflags $extra_cxxflags
4262add_objcflags $extra_objcflags
4263add_asflags $extra_cflags
4264
4265if test -n "$sysroot"; then
4266 case "$cc_type" in
4267 gcc|llvm_gcc|clang)
4268 add_cppflags --sysroot="$sysroot"
4269 add_ldflags --sysroot="$sysroot"
4270# On Darwin --sysroot may be ignored, -isysroot always affects headers and linking
4271 add_cppflags -isysroot "$sysroot"
4272 add_ldflags -isysroot "$sysroot"
4273 ;;
4274 tms470)
4275 add_cppflags -I"$sysinclude"
4276 add_ldflags --sysroot="$sysroot"
4277 ;;
4278 esac
4279fi
4280
4281if test "$cpu" = host; then
4282 enabled cross_compile &&
4283 die "--cpu=host makes no sense when cross-compiling."
4284
4285 case "$cc_type" in
4286 gcc|llvm_gcc)
4287 check_native(){
4288 $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
4289 sed -n "/cc1.*$1=/{
4290 s/.*$1=\\([^ ]*\\).*/\\1/
4291 p
4292 q
4293 }" $TMPE
4294 }
4295 cpu=$(check_native -march || check_native -mcpu)
4296 ;;
4297 clang)
4298 check_native(){
4299 $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
4300 sed -n "/cc1.*-target-cpu /{
4301 s/.*-target-cpu \\([^ ]*\\).*/\\1/
4302 p
4303 q
4304 }" $TMPE
4305 }
4306 cpu=$(check_native -march)
4307 ;;
4308 esac
4309
4310 test "${cpu:-host}" = host &&
4311 die "--cpu=host not supported with compiler $cc"
4312fi
4313
4314# Deal with common $arch aliases
4315case "$arch" in
4316 aarch64|arm64)
4317 arch="aarch64"
4318 ;;
4319 arm*|iPad*|iPhone*)
4320 arch="arm"
4321 ;;
4322 mips*|IP*)
4323 case "$arch" in
4324 *el)
4325 add_cppflags -EL
4326 add_ldflags -EL
4327 ;;
4328 *eb)
4329 add_cppflags -EB
4330 add_ldflags -EB
4331 ;;
4332 esac
4333 arch="mips"
4334 ;;
4335 parisc*|hppa*)
4336 arch="parisc"
4337 ;;
4338 "Power Macintosh"|ppc*|powerpc*)
4339 arch="ppc"
4340 ;;
4341 s390|s390x)
4342 arch="s390"
4343 ;;
4344 sh4|sh)
4345 arch="sh4"
4346 ;;
4347 sun4*|sparc*)
4348 arch="sparc"
4349 ;;
4350 tilegx|tile-gx)
4351 arch="tilegx"
4352 ;;
4353 i[3-6]86*|i86pc|BePC|x86pc|x86_64|x86_32|amd64)
4354 arch="x86"
4355 ;;
4356esac
4357
4358is_in $arch $ARCH_LIST || warn "unknown architecture $arch"
4359enable $arch
4360
4361# Add processor-specific flags
4362if enabled aarch64; then
4363
4364 case $cpu in
4365 armv*)
4366 cpuflags="-march=$cpu"
4367 ;;
4368 *)
4369 cpuflags="-mcpu=$cpu"
4370 ;;
4371 esac
4372
4373elif enabled alpha; then
4374
4375 cpuflags="-mcpu=$cpu"
4376
4377elif enabled arm; then
4378
4379 check_arm_arch() {
4380 check_cpp_condition stddef.h \
4381 "defined __ARM_ARCH_${1}__ || defined __TARGET_ARCH_${2:-$1}" \
4382 $cpuflags
4383 }
4384
4385 probe_arm_arch() {
4386 if check_arm_arch 4; then echo armv4
4387 elif check_arm_arch 4T; then echo armv4t
4388 elif check_arm_arch 5; then echo armv5
4389 elif check_arm_arch 5E; then echo armv5e
4390 elif check_arm_arch 5T; then echo armv5t
4391 elif check_arm_arch 5TE; then echo armv5te
4392 elif check_arm_arch 5TEJ; then echo armv5te
4393 elif check_arm_arch 6; then echo armv6
4394 elif check_arm_arch 6J; then echo armv6j
4395 elif check_arm_arch 6K; then echo armv6k
4396 elif check_arm_arch 6Z; then echo armv6z
4397 elif check_arm_arch 6ZK; then echo armv6zk
4398 elif check_arm_arch 6T2; then echo armv6t2
4399 elif check_arm_arch 7; then echo armv7
4400 elif check_arm_arch 7A 7_A; then echo armv7-a
4401 elif check_arm_arch 7S; then echo armv7-a
4402 elif check_arm_arch 7R 7_R; then echo armv7-r
4403 elif check_arm_arch 7M 7_M; then echo armv7-m
4404 elif check_arm_arch 7EM 7E_M; then echo armv7-m
4405 elif check_arm_arch 8A 8_A; then echo armv8-a
4406 fi
4407 }
4408
4409 [ "$cpu" = generic ] && cpu=$(probe_arm_arch)
4410
4411 case $cpu in
4412 armv*)
4413 cpuflags="-march=$cpu"
4414 subarch=$(echo $cpu | sed 's/[^a-z0-9]//g')
4415 ;;
4416 *)
4417 cpuflags="-mcpu=$cpu"
4418 case $cpu in
4419 cortex-a*) subarch=armv7a ;;
4420 cortex-r*) subarch=armv7r ;;
4421 cortex-m*) enable thumb; subarch=armv7m ;;
4422 arm11*) subarch=armv6 ;;
4423 arm[79]*e*|arm9[24]6*|arm96*|arm102[26]) subarch=armv5te ;;
4424 armv4*|arm7*|arm9[24]*) subarch=armv4 ;;
4425 *) subarch=$(probe_arm_arch) ;;
4426 esac
4427 ;;
4428 esac
4429
4430 case "$subarch" in
4431 armv5t*) enable fast_clz ;;
4432 armv[6-8]*)
4433 enable fast_clz
4434 disabled fast_unaligned || enable fast_unaligned
4435 ;;
4436 esac
4437
4438elif enabled avr32; then
4439
4440 case $cpu in
4441 ap7[02]0[0-2])
4442 subarch="avr32_ap"
4443 cpuflags="-mpart=$cpu"
4444 ;;
4445 ap)
4446 subarch="avr32_ap"
4447 cpuflags="-march=$cpu"
4448 ;;
4449 uc3[ab]*)
4450 subarch="avr32_uc"
4451 cpuflags="-mcpu=$cpu"
4452 ;;
4453 uc)
4454 subarch="avr32_uc"
4455 cpuflags="-march=$cpu"
4456 ;;
4457 esac
4458
4459elif enabled bfin; then
4460
4461 cpuflags="-mcpu=$cpu"
4462
4463elif enabled mips; then
4464
4465 cpuflags="-march=$cpu"
4466
4467 if [ "$cpu" != "generic" ]; then
4468 disable mips32r2
4469 disable mips32r5
4470 disable mips64r2
4471 disable mips32r6
4472 disable mips64r6
4473 disable loongson2
4474 disable loongson3
4475
4476 case $cpu in
4477 24kc|24kf*|24kec|34kc|1004kc|24kef*|34kf*|1004kf*|74kc|74kf)
4478 enable mips32r2
4479 disable msa
4480 ;;
4481 p5600|i6400|p6600)
4482 disable mipsdsp
4483 disable mipsdspr2
4484 ;;
4485 loongson*)
4486 enable loongson2
4487 enable loongson3
4488 enable local_aligned_8 local_aligned_16 local_aligned_32
4489 enable simd_align_16
4490 enable fast_64bit
4491 enable fast_clz
4492 enable fast_cmov
4493 enable fast_unaligned
4494 disable aligned_stack
4495 disable mipsfpu
4496 disable mipsdsp
4497 disable mipsdspr2
4498 case $cpu in
4499 loongson3*)
4500 cpuflags="-march=loongson3a -mhard-float -fno-expensive-optimizations"
4501 ;;
4502 loongson2e)
4503 cpuflags="-march=loongson2e -mhard-float -fno-expensive-optimizations"
4504 ;;
4505 loongson2f)
4506 cpuflags="-march=loongson2f -mhard-float -fno-expensive-optimizations"
4507 ;;
4508 esac
4509 ;;
4510 *)
4511 # Unknown CPU. Disable everything.
4512 warn "unknown CPU. Disabling all MIPS optimizations."
4513 disable mipsfpu
4514 disable mipsdsp
4515 disable mipsdspr2
4516 disable msa
4517 disable mmi
4518 ;;
4519 esac
4520
4521 case $cpu in
4522 24kc)
4523 disable mipsfpu
4524 disable mipsdsp
4525 disable mipsdspr2
4526 ;;
4527 24kf*)
4528 disable mipsdsp
4529 disable mipsdspr2
4530 ;;
4531 24kec|34kc|1004kc)
4532 disable mipsfpu
4533 disable mipsdspr2
4534 ;;
4535 24kef*|34kf*|1004kf*)
4536 disable mipsdspr2
4537 ;;
4538 74kc)
4539 disable mipsfpu
4540 ;;
4541 p5600)
4542 enable mips32r5
4543 check_cflags "-mtune=p5600" && check_cflags "-msched-weight -mload-store-pairs -funroll-loops"
4544 ;;
4545 i6400)
4546 enable mips64r6
4547 check_cflags "-mtune=i6400 -mabi=64" && check_cflags "-msched-weight -mload-store-pairs -funroll-loops" && check_ldflags "-mabi=64"
4548 ;;
4549 p6600)
4550 enable mips64r6
4551 check_cflags "-mtune=p6600 -mabi=64" && check_cflags "-msched-weight -mload-store-pairs -funroll-loops" && check_ldflags "-mabi=64"
4552 ;;
4553 esac
4554 else
4555 # We do not disable anything. Is up to the user to disable the unwanted features.
4556 warn 'generic cpu selected'
4557 fi
4558
4559elif enabled ppc; then
4560
4561 disable ldbrx
4562
4563 case $(tolower $cpu) in
4564 601|ppc601|powerpc601)
4565 cpuflags="-mcpu=601"
4566 disable altivec
4567 ;;
4568 603*|ppc603*|powerpc603*)
4569 cpuflags="-mcpu=603"
4570 disable altivec
4571 ;;
4572 604*|ppc604*|powerpc604*)
4573 cpuflags="-mcpu=604"
4574 disable altivec
4575 ;;
4576 g3|75*|ppc75*|powerpc75*)
4577 cpuflags="-mcpu=750"
4578 disable altivec
4579 ;;
4580 g4|745*|ppc745*|powerpc745*)
4581 cpuflags="-mcpu=7450"
4582 disable vsx
4583 ;;
4584 74*|ppc74*|powerpc74*)
4585 cpuflags="-mcpu=7400"
4586 disable vsx
4587 ;;
4588 g5|970|ppc970|powerpc970)
4589 cpuflags="-mcpu=970"
4590 disable vsx
4591 ;;
4592 power[3-6]*)
4593 cpuflags="-mcpu=$cpu"
4594 disable vsx
4595 ;;
4596 power[7-8]*)
4597 cpuflags="-mcpu=$cpu"
4598 ;;
4599 cell)
4600 cpuflags="-mcpu=cell"
4601 enable ldbrx
4602 disable vsx
4603 ;;
4604 e500mc)
4605 cpuflags="-mcpu=e500mc"
4606 disable altivec
4607 ;;
4608 e500v2)
4609 cpuflags="-mcpu=8548 -mhard-float -mfloat-gprs=double"
4610 disable altivec
4611 disable dcbzl
4612 ;;
4613 e500)
4614 cpuflags="-mcpu=8540 -mhard-float"
4615 disable altivec
4616 disable dcbzl
4617 ;;
4618 esac
4619
4620elif enabled sparc; then
4621
4622 case $cpu in
4623 cypress|f93[04]|tsc701|sparcl*|supersparc|hypersparc|niagara|v[789])
4624 cpuflags="-mcpu=$cpu"
4625 ;;
4626 ultrasparc*|niagara[234])
4627 cpuflags="-mcpu=$cpu"
4628 ;;
4629 esac
4630
4631elif enabled x86; then
4632
4633 case $cpu in
4634 i[345]86|pentium)
4635 cpuflags="-march=$cpu"
4636 disable i686
4637 disable mmx
4638 ;;
4639 # targets that do NOT support nopl and conditional mov (cmov)
4640 pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
4641 cpuflags="-march=$cpu"
4642 disable i686
4643 ;;
4644 # targets that do support nopl and conditional mov (cmov)
4645 i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64*|k8*|opteron*|athlon-fx\
4646 |core*|atom|bonnell|nehalem|westmere|silvermont|sandybridge|ivybridge|haswell|broadwell|skylake*|knl\
4647 |amdfam10|barcelona|b[dt]ver*|znver*)
4648 cpuflags="-march=$cpu"
4649 enable i686
4650 enable fast_cmov
4651 ;;
4652 # targets that do support conditional mov but on which it's slow
4653 pentium4|pentium4m|prescott|nocona)
4654 cpuflags="-march=$cpu"
4655 enable i686
4656 disable fast_cmov
4657 ;;
4658 esac
4659
4660fi
4661
4662if [ "$cpu" != generic ]; then
4663 add_cflags $cpuflags
4664 add_asflags $cpuflags
4665 test "$cc_type" = "$ld_type" && add_ldflags $cpuflags
4666fi
4667
4668# compiler sanity check
4669check_exec <<EOF
4670int main(void){ return 0; }
4671EOF
4672if test "$?" != 0; then
4673 echo "$cc is unable to create an executable file."
4674 if test -z "$cross_prefix" && ! enabled cross_compile ; then
4675 echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
4676 echo "Only do this if you know what cross compiling means."
4677 fi
4678 die "C compiler test failed."
4679fi
4680
4681add_cppflags -D_ISOC99_SOURCE
4682add_cxxflags -D__STDC_CONSTANT_MACROS
4683check_cxxflags -std=c++11 || check_cxxflags -std=c++0x
4684
4685# some compilers silently accept -std=c11, so we also need to check that the
4686# version macro is defined properly
4687if test_cflags_cc -std=c11 ctype.h "__STDC_VERSION__ >= 201112L"; then
4688 add_cflags -std=c11
4689else
4690 check_cflags -std=c99
4691fi
4692
4693check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
4694#include <stdlib.h>
4695EOF
4696check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
4697#include <stdlib.h>
4698EOF
4699
4700add_host_cppflags -D_ISOC99_SOURCE
4701check_host_cflags -std=c99
4702check_host_cflags -Wall
4703check_host_cflags -O3
4704
4705check_64bit(){
4706 arch32=$1
4707 arch64=$2
4708 expr=$3
4709 check_code cc "" "int test[2*($expr) - 1]" &&
4710 subarch=$arch64 || subarch=$arch32
4711}
4712
4713case "$arch" in
4714 aarch64|alpha|ia64)
4715 spic=$shared
4716 ;;
4717 mips)
4718 check_64bit mips mips64 '_MIPS_SIM > 1'
4719 spic=$shared
4720 ;;
4721 parisc)
4722 check_64bit parisc parisc64 'sizeof(void *) > 4'
4723 spic=$shared
4724 ;;
4725 ppc)
4726 check_64bit ppc ppc64 'sizeof(void *) > 4'
4727 spic=$shared
4728 ;;
4729 s390)
4730 check_64bit s390 s390x 'sizeof(void *) > 4'
4731 spic=$shared
4732 ;;
4733 sparc)
4734 check_64bit sparc sparc64 'sizeof(void *) > 4'
4735 spic=$shared
4736 ;;
4737 x86)
4738 check_64bit x86_32 x86_64 'sizeof(void *) > 4'
4739 # Treat x32 as x64 for now. Note it also needs spic=$shared
4740 test "$subarch" = "x86_32" && check_cpp_condition stddef.h 'defined(__x86_64__)' &&
4741 subarch=x86_64
4742 if test "$subarch" = "x86_64"; then
4743 spic=$shared
4744 fi
4745 ;;
4746 ppc)
4747 check_cc <<EOF && subarch="ppc64"
4748 int test[(int)sizeof(char*) - 7];
4749EOF
4750 ;;
4751esac
4752
4753enable $subarch
4754enabled spic && enable_weak pic
4755
4756# OS specific
4757case $target_os in
4758 aix)
4759 SHFLAGS=-shared
4760 add_cppflags '-I\$(SRC_PATH)/compat/aix'
4761 enabled shared && add_ldflags -Wl,-brtl
4762 ;;
4763 android)
4764 disable symver
4765 enable section_data_rel_ro
4766 SLIB_INSTALL_NAME='$(SLIBNAME)'
4767 SLIB_INSTALL_LINKS=
4768 SHFLAGS='-shared -Wl,-soname,$(SLIBNAME)'
4769 ;;
4770 haiku)
4771 prefix_default="/boot/common"
4772 network_extralibs="-lnetwork"
4773 host_libs=
4774 ;;
4775 sunos)
4776 SHFLAGS='-shared -Wl,-h,$$(@F)'
4777 enabled x86 && SHFLAGS="-mimpure-text $SHFLAGS"
4778 network_extralibs="-lsocket -lnsl"
4779 add_cppflags -D__EXTENSIONS__
4780 # When using suncc to build, the Solaris linker will mark
4781 # an executable with each instruction set encountered by
4782 # the Solaris assembler. As our libraries contain their own
4783 # guards for processor-specific code, instead suppress
4784 # generation of the HWCAPS ELF section on Solaris x86 only.
4785 enabled_all suncc x86 &&
4786 echo "hwcap_1 = OVERRIDE;" > mapfile &&
4787 add_ldflags -Wl,-M,mapfile
4788 nm_default='nm -P -g'
4789 version_script='-M'
4790 VERSION_SCRIPT_POSTPROCESS_CMD='perl $(SRC_PATH)/compat/solaris/make_sunver.pl - $(OBJS)'
4791 ;;
4792 netbsd)
4793 disable symver
4794 oss_indev_extralibs="-lossaudio"
4795 oss_outdev_extralibs="-lossaudio"
4796 enabled gcc || check_ldflags -Wl,-zmuldefs
4797 ;;
4798 openbsd|bitrig)
4799 disable symver
4800 SHFLAGS='-shared'
4801 SLIB_INSTALL_NAME='$(SLIBNAME).$(LIBMAJOR).$(LIBMINOR)'
4802 SLIB_INSTALL_LINKS=
4803 oss_indev_extralibs="-lossaudio"
4804 oss_outdev_extralibs="-lossaudio"
4805 ;;
4806 dragonfly)
4807 disable symver
4808 ;;
4809 freebsd)
4810 ;;
4811 bsd/os)
4812 add_extralibs -lpoll -lgnugetopt
4813 strip="strip -d"
4814 ;;
4815 darwin)
4816 enabled ppc && add_asflags -force_cpusubtype_ALL
4817 install_name_dir_default='$(SHLIBDIR)'
4818 SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(INSTALL_NAME_DIR)/$(SLIBNAME_WITH_MAJOR),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR)'
4819 enabled x86_32 && append SHFLAGS -Wl,-read_only_relocs,suppress
4820 strip="${strip} -x"
4821 add_ldflags -Wl,-dynamic,-search_paths_first
4822 SLIBSUF=".dylib"
4823 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
4824 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
4825 objformat="macho"
4826 enabled x86_64 && objformat="macho64"
4827 enabled_any pic shared x86_64 ||
4828 { check_cflags -mdynamic-no-pic && add_asflags -mdynamic-no-pic; }
4829 check_header dispatch/dispatch.h &&
4830 add_cppflags '-I\$(SRC_PATH)/compat/dispatch_semaphore'
4831 version_script='-exported_symbols_list'
4832 VERSION_SCRIPT_POSTPROCESS_CMD='tr " " "\n" | sed -n /global:/,/local:/p | grep ";" | tr ";" "\n" | sed -E "s/(.+)/_\1/g" | sed -E "s/(.+[^*])$$$$/\1*/"'
4833 ;;
4834 msys*)
4835 die "Native MSYS builds are discouraged, please use the MINGW environment."
4836 ;;
4837 mingw32*|mingw64*)
4838 if test $target_os = "mingw32ce"; then
4839 disable network
4840 else
4841 target_os=mingw32
4842 fi
4843 decklink_outdev_extralibs="$decklink_outdev_extralibs -lole32 -loleaut32"
4844 decklink_indev_extralibs="$decklink_indev_extralibs -lole32 -loleaut32"
4845 LIBTARGET=i386
4846 if enabled x86_64; then
4847 LIBTARGET="i386:x86-64"
4848 elif enabled arm; then
4849 LIBTARGET=arm-wince
4850 fi
4851 enabled shared && ! enabled small && check_cmd $windres --version && enable gnu_windres
4852 enabled x86_32 && check_ldflags -Wl,--large-address-aware
4853 shlibdir_default="$bindir_default"
4854 SLIBPREF=""
4855 SLIBSUF=".dll"
4856 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
4857 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
4858 dlltool="${cross_prefix}dlltool"
4859 if check_cmd lib.exe -list; then
4860 SLIB_EXTRA_CMD=-'sed -e "s/ @[^ ]*//" $$(@:$(SLIBSUF)=.orig.def) > $$(@:$(SLIBSUF)=.def); lib.exe -nologo -machine:$(LIBTARGET) -def:$$(@:$(SLIBSUF)=.def) -out:$(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib)'
4861 if enabled x86_64; then
4862 LIBTARGET=x64
4863 fi
4864 elif check_cmd $dlltool --version; then
4865 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)'
4866 fi
4867 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
4868 SLIB_INSTALL_LINKS=
4869 SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
4870 SLIB_INSTALL_EXTRA_LIB='lib$(SLIBNAME:$(SLIBSUF)=.dll.a) $(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
4871 SHFLAGS='-shared -Wl,--output-def,$$(@:$(SLIBSUF)=.orig.def) -Wl,--out-implib,$(SUBDIR)lib$(SLIBNAME:$(SLIBSUF)=.dll.a) -Wl,--enable-runtime-pseudo-reloc -Wl,--disable-auto-image-base'
4872 objformat="win32"
4873 ranlib=:
4874 enable dos_paths
4875 check_ldflags -Wl,--nxcompat,--dynamicbase
4876 # Lets work around some stupidity in binutils.
4877 # ld will strip relocations from executables even though we need them
4878 # for dynamicbase (ASLR). Using -pie does retain the reloc section
4879 # however ld then forgets what the entry point should be (oops) so we
4880 # have to manually (re)set it.
4881 if enabled x86_32; then
4882 disabled debug && add_ldexeflags -Wl,--pic-executable,-e,_mainCRTStartup
4883 elif enabled x86_64; then
4884 disabled debug && add_ldexeflags -Wl,--pic-executable,-e,mainCRTStartup
4885 check_ldflags -Wl,--high-entropy-va # binutils 2.25
4886 # Set image base >4GB for extra entropy with HEASLR
4887 add_ldexeflags -Wl,--image-base,0x140000000
4888 append SHFLAGS -Wl,--image-base,0x180000000
4889 fi
4890 ;;
4891 win32|win64)
4892 disable symver
4893 if enabled shared; then
4894 # Link to the import library instead of the normal static library
4895 # for shared libs.
4896 LD_LIB='%.lib'
4897 # Cannot build both shared and static libs with MSVC or icl.
4898 disable static
4899 fi
4900 enabled x86_32 && check_ldflags -LARGEADDRESSAWARE
4901 shlibdir_default="$bindir_default"
4902 SLIBPREF=""
4903 SLIBSUF=".dll"
4904 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
4905 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
4906 SLIB_CREATE_DEF_CMD='$(SRC_PATH)/compat/windows/makedef $(SUBDIR)lib$(NAME).ver $(OBJS) > $$(@:$(SLIBSUF)=.def)'
4907 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
4908 SLIB_INSTALL_LINKS=
4909 SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
4910 SLIB_INSTALL_EXTRA_LIB='$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
4911 SHFLAGS='-dll -def:$$(@:$(SLIBSUF)=.def) -implib:$(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib)'
4912 objformat="win32"
4913 ranlib=:
4914 enable dos_paths
4915 ;;
4916 cygwin*)
4917 target_os=cygwin
4918 shlibdir_default="$bindir_default"
4919 SLIBPREF="cyg"
4920 SLIBSUF=".dll"
4921 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
4922 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
4923 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
4924 SLIB_INSTALL_LINKS=
4925 SLIB_INSTALL_EXTRA_LIB='lib$(FULLNAME).dll.a'
4926 SHFLAGS='-shared -Wl,--out-implib,$(SUBDIR)lib$(FULLNAME).dll.a'
4927 objformat="win32"
4928 enable dos_paths
4929 enabled shared && ! enabled small && check_cmd $windres --version && enable gnu_windres
4930 add_cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
4931 ;;
4932 *-dos|freedos|opendos)
4933 network_extralibs="-lsocket"
4934 objformat="coff"
4935 enable dos_paths
4936 add_cppflags -U__STRICT_ANSI__
4937 ;;
4938 linux)
4939 enable dv1394
4940 enable section_data_rel_ro
4941 ;;
4942 irix*)
4943 target_os=irix
4944 ranlib="echo ignoring ranlib"
4945 ;;
4946 os/2*)
4947 strip="lxlite -CS"
4948 objformat="aout"
4949 add_cppflags -D_GNU_SOURCE
4950 add_ldflags -Zomf -Zbin-files -Zargs-wild -Zmap
4951 SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
4952 LIBSUF="_s.a"
4953 SLIBPREF=""
4954 SLIBSUF=".dll"
4955 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
4956 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(FULLNAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
4957 SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(FULLNAME).def; \
4958 echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(FULLNAME).def; \
4959 echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(FULLNAME).def; \
4960 echo EXPORTS >> $(SUBDIR)$(FULLNAME).def; \
4961 emxexp $(OBJS) >> $(SUBDIR)$(FULLNAME).def'
4962 SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(FULLNAME)_dll.a $(SUBDIR)$(FULLNAME).def; \
4963 emximp -o $(SUBDIR)$(LIBPREF)$(FULLNAME)_dll.lib $(SUBDIR)$(FULLNAME).def;'
4964 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
4965 SLIB_INSTALL_LINKS=
4966 SLIB_INSTALL_EXTRA_LIB='$(LIBPREF)$(FULLNAME)_dll.a $(LIBPREF)$(FULLNAME)_dll.lib'
4967 enable dos_paths
4968 enable_weak os2threads
4969 ;;
4970 gnu/kfreebsd)
4971 add_cppflags -D_BSD_SOURCE
4972 ;;
4973 gnu)
4974 ;;
4975 qnx)
4976 add_cppflags -D_QNX_SOURCE
4977 network_extralibs="-lsocket"
4978 ;;
4979 symbian)
4980 SLIBSUF=".dll"
4981 enable dos_paths
4982 add_cflags --include=$sysinclude/gcce/gcce.h -fvisibility=default
4983 add_cppflags -D__GCCE__ -D__SYMBIAN32__ -DSYMBIAN_OE_POSIX_SIGNALS
4984 add_ldflags -Wl,--target1-abs,--no-undefined \
4985 -Wl,-Ttext,0x80000,-Tdata,0x1000000 -shared \
4986 -Wl,--entry=_E32Startup -Wl,-u,_E32Startup
4987 add_extralibs -l:eexe.lib -l:usrt2_2.lib -l:dfpaeabi.dso \
4988 -l:drtaeabi.dso -l:scppnwdl.dso -lsupc++ -lgcc \
4989 -l:libc.dso -l:libm.dso -l:euser.dso -l:libcrt0.lib
4990 ;;
4991 osf1)
4992 add_cppflags -D_OSF_SOURCE -D_POSIX_PII -D_REENTRANT
4993 ;;
4994 minix)
4995 ;;
4996 plan9)
4997 add_cppflags -D_C99_SNPRINTF_EXTENSION \
4998 -D_REENTRANT_SOURCE \
4999 -D_RESEARCH_SOURCE \
5000 -DFD_SETSIZE=96 \
5001 -DHAVE_SOCK_OPTS
5002 add_compat strtod.o strtod=avpriv_strtod
5003 network_extralibs='-lbsd'
5004 exeobjs=compat/plan9/main.o
5005 disable ffserver
5006 cp_f='cp'
5007 ;;
5008 none)
5009 ;;
5010 *)
5011 die "Unknown OS '$target_os'."
5012 ;;
5013esac
5014
5015# test if creating links works
5016link_dest=$(mktemp -u $TMPDIR/dest_XXXXXXXX)
5017link_name=$(mktemp -u $TMPDIR/name_XXXXXXXX)
5018mkdir "$link_dest"
5019$ln_s "$link_dest" "$link_name"
5020touch "$link_dest/test_file"
5021if [ "$source_path" != "." ] && ([ ! -d src ] || [ -L src ]) && [ -e "$link_name/test_file" ]; then
5022 # create link to source path
5023 [ -e src ] && rm src
5024 $ln_s "$source_path" src
5025 source_link=src
5026else
5027 # creating directory links doesn't work
5028 # fall back to using the full source path
5029 source_link="$source_path"
5030fi
5031# cleanup
5032rm -r "$link_dest"
5033rm -r "$link_name"
5034
5035# determine libc flavour
5036
5037probe_libc(){
5038 pfx=$1
5039 pfx_no_=${pfx%_}
5040 # uclibc defines __GLIBC__, so it needs to be checked before glibc.
5041 if check_${pfx}cpp_condition features.h "defined __UCLIBC__"; then
5042 eval ${pfx}libc_type=uclibc
5043 add_${pfx}cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
5044 elif check_${pfx}cpp_condition features.h "defined __GLIBC__"; then
5045 eval ${pfx}libc_type=glibc
5046 add_${pfx}cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
5047 # MinGW headers can be installed on Cygwin, so check for newlib first.
5048 elif check_${pfx}cpp_condition newlib.h "defined _NEWLIB_VERSION"; then
5049 eval ${pfx}libc_type=newlib
5050 add_${pfx}cppflags -U__STRICT_ANSI__
5051 # MinGW64 is backwards compatible with MinGW32, so check for it first.
5052 elif check_${pfx}cpp_condition _mingw.h "defined __MINGW64_VERSION_MAJOR"; then
5053 eval ${pfx}libc_type=mingw64
5054 if check_${pfx}cpp_condition _mingw.h "__MINGW64_VERSION_MAJOR < 3"; then
5055 add_compat msvcrt/snprintf.o
5056 add_cflags "-include $source_path/compat/msvcrt/snprintf.h"
5057 fi
5058 add_${pfx}cppflags -U__STRICT_ANSI__ -D__USE_MINGW_ANSI_STDIO=1
5059 eval test \$${pfx_no_}cc_type = "gcc" &&
5060 add_${pfx}cppflags -D__printf__=__gnu_printf__
5061 elif check_${pfx}cpp_condition _mingw.h "defined __MINGW_VERSION" ||
5062 check_${pfx}cpp_condition _mingw.h "defined __MINGW32_VERSION"; then
5063 eval ${pfx}libc_type=mingw32
5064 check_${pfx}cpp_condition _mingw.h "__MINGW32_MAJOR_VERSION > 3 || \
5065 (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
5066 die "ERROR: MinGW32 runtime version must be >= 3.15."
5067 add_${pfx}cppflags -U__STRICT_ANSI__ -D__USE_MINGW_ANSI_STDIO=1
5068 check_${pfx}cpp_condition _mingw.h "defined(_WIN32_WINNT) && _WIN32_WINNT >= 0x0502" ||
5069 add_${pfx}cppflags -D_WIN32_WINNT=0x0502
5070 check_${pfx}cpp_condition _mingw.h "__MSVCRT_VERSION__ < 0x0700__" &&
5071 add_${pfx}cppflags -D__MSVCRT_VERSION__=0x0700
5072 eval test \$${pfx_no_}cc_type = "gcc" &&
5073 add_${pfx}cppflags -D__printf__=__gnu_printf__
5074 elif check_${pfx}cpp_condition crtversion.h "defined _VC_CRT_MAJOR_VERSION"; then
5075 eval ${pfx}libc_type=msvcrt
5076 if check_${pfx}cpp_condition crtversion.h "_VC_CRT_MAJOR_VERSION < 14"; then
5077 if [ "$pfx" = host_ ]; then
5078 add_host_cppflags -Dsnprintf=_snprintf
5079 else
5080 add_compat strtod.o strtod=avpriv_strtod
5081 add_compat msvcrt/snprintf.o snprintf=avpriv_snprintf \
5082 _snprintf=avpriv_snprintf \
5083 vsnprintf=avpriv_vsnprintf
5084 fi
5085 fi
5086 add_${pfx}cppflags -D_USE_MATH_DEFINES -D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_WARNINGS
5087 # The MSVC 2010 headers (Win 7.0 SDK) set _WIN32_WINNT to
5088 # 0x601 by default unless something else is set by the user.
5089 # This can easily lead to us detecting functions only present
5090 # in such new versions and producing binaries requiring windows 7.0.
5091 # Therefore explicitly set the default to XP unless the user has
5092 # set something else on the command line.
5093 # Don't do this if WINAPI_FAMILY is set and is set to a non-desktop
5094 # family. For these cases, configure is free to use any functions
5095 # found in the SDK headers by default. (Alternatively, we could force
5096 # _WIN32_WINNT to 0x0602 in that case.)
5097 check_${pfx}cpp_condition stdlib.h "defined(_WIN32_WINNT)" ||
5098 { check_${pfx}cpp <<EOF && add_${pfx}cppflags -D_WIN32_WINNT=0x0502; }
5099#ifdef WINAPI_FAMILY
5100#include <winapifamily.h>
5101#if !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
5102#error not desktop
5103#endif
5104#endif
5105EOF
5106 if [ "$pfx" = "" ]; then
5107 check_func strtoll || add_cflags -Dstrtoll=_strtoi64
5108 check_func strtoull || add_cflags -Dstrtoull=_strtoui64
5109 fi
5110 elif check_${pfx}cpp_condition stddef.h "defined __KLIBC__"; then
5111 eval ${pfx}libc_type=klibc
5112 elif check_${pfx}cpp_condition sys/cdefs.h "defined __BIONIC__"; then
5113 eval ${pfx}libc_type=bionic
5114 elif check_${pfx}cpp_condition sys/brand.h "defined LABELED_BRAND_NAME"; then
5115 eval ${pfx}libc_type=solaris
5116 add_${pfx}cppflags -D__EXTENSIONS__ -D_XOPEN_SOURCE=600
5117 fi
5118 check_${pfx}cc <<EOF
5119#include <time.h>
5120void *v = localtime_r;
5121EOF
5122test "$?" != 0 && check_${pfx}cc -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 <<EOF && add_${pfx}cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
5123#include <time.h>
5124void *v = localtime_r;
5125EOF
5126
5127}
5128
5129probe_libc
5130test -n "$libc_type" && enable libc_$libc_type
5131probe_libc host_
5132test -n "$host_libc_type" && enable host_libc_$host_libc_type
5133
5134case $libc_type in
5135 bionic)
5136 add_compat strtod.o strtod=avpriv_strtod
5137 ;;
5138esac
5139
5140# hacks for compiler/libc/os combinations
5141
5142if enabled_all tms470 libc_glibc; then
5143 CPPFLAGS="-I${source_path}/compat/tms470 ${CPPFLAGS}"
5144 add_cppflags -D__USER_LABEL_PREFIX__=
5145 add_cppflags -D__builtin_memset=memset
5146 add_cppflags -D__gnuc_va_list=va_list -D_VA_LIST_DEFINED
5147 add_cflags -pds=48 # incompatible redefinition of macro
5148fi
5149
5150if enabled_all ccc libc_glibc; then
5151 add_ldflags -Wl,-z,now # calls to libots crash without this
5152fi
5153
5154check_compile_assert flt_lim "float.h limits.h" "DBL_MAX == (double)DBL_MAX" ||
5155 add_cppflags '-I\$(SRC_PATH)/compat/float'
5156
5157esc(){
5158 echo "$*" | sed 's/%/%25/g;s/:/%3a/g'
5159}
5160
5161echo "config:$arch:$subarch:$cpu:$target_os:$(esc $cc_ident):$(esc $FFMPEG_CONFIGURATION)" >config.fate
5162
5163check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable_weak pic
5164
5165set_default libdir
5166: ${shlibdir_default:="$libdir"}
5167: ${pkgconfigdir_default:="$libdir/pkgconfig"}
5168
5169set_default $PATHS_LIST
5170set_default nm
5171
5172# we need to build at least one lib type
5173if ! enabled_any static shared; then
5174 cat <<EOF
5175At least one library type must be built.
5176Specify --enable-static to build the static libraries or --enable-shared to
5177build the shared libraries as well. To only build the shared libraries specify
5178--disable-static in addition to --enable-shared.
5179EOF
5180 exit 1
5181fi
5182
5183disabled optimizations || check_cflags -fomit-frame-pointer
5184
5185enable_weak_pic() {
5186 disabled pic && return
5187 enable pic
5188 add_cppflags -DPIC
5189 case "$target_os" in
5190 mingw*|cygwin*)
5191 ;;
5192 *)
5193 add_cflags -fPIC
5194 ;;
5195 esac
5196 add_asflags -fPIC
5197}
5198
5199enabled pic && enable_weak_pic
5200
5201check_cc <<EOF || die "Symbol mangling check failed."
5202int ff_extern;
5203EOF
5204sym=$($nm $TMPO | awk '/ff_extern/{ print substr($0, match($0, /[^ \t]*ff_extern/)) }')
5205extern_prefix=${sym%%ff_extern*}
5206
5207check_cc <<EOF && enable_weak inline_asm
5208void foo(void) { __asm__ volatile ("" ::); }
5209EOF
5210
5211_restrict=
5212for restrict_keyword in restrict __restrict__ __restrict; do
5213 check_cc <<EOF && _restrict=$restrict_keyword && break
5214void foo(char * $restrict_keyword p);
5215EOF
5216done
5217
5218check_cc <<EOF && enable pragma_deprecated
5219void foo(void) { _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") }
5220EOF
5221
5222check_cc <<EOF && enable attribute_packed
5223struct { int x; } __attribute__((packed)) x;
5224EOF
5225
5226check_cc <<EOF && enable attribute_may_alias
5227union { int x; } __attribute__((may_alias)) x;
5228EOF
5229
5230check_cc <<EOF || die "endian test failed"
5231unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
5232EOF
5233od -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
5234
5235if ! enabled ppc64 || enabled bigendian; then
5236 disable vsx
5237fi
5238
5239check_gas() {
5240 log "check_gas using '$as' as AS"
5241 # :vararg is used on aarch64, arm and ppc altivec
5242 check_as <<EOF || return 1
5243.macro m n, y:vararg=0
5244\n: .int \y
5245.endm
5246m x
5247EOF
5248 # .altmacro is only used in arm asm
5249 ! enabled arm || check_as <<EOF || return 1
5250.altmacro
5251EOF
5252 enable gnu_as
5253 return 0
5254}
5255
5256if enabled_any arm aarch64 || enabled_all ppc altivec && enabled asm; then
5257 nogas=:
5258 enabled_any arm aarch64 && nogas=die
5259 enabled_all ppc altivec && [ $target_os_default != aix ] && nogas=warn
5260 as_noop=-v
5261
5262 case $as_type in
5263 arm*) gaspp_as_type=armasm; as_noop=-h ;;
5264 gcc) gaspp_as_type=gas ;;
5265 *) gaspp_as_type=$as_type ;;
5266 esac
5267
5268 [ $target_os = "darwin" ] && gaspp_as_type="apple-$gaspp_as_type"
5269
5270 test "${as#*gas-preprocessor.pl}" != "$as" ||
5271 check_cmd gas-preprocessor.pl -arch $arch -as-type $gaspp_as_type -- ${as:=$cc} $as_noop &&
5272 gas="${gas:=gas-preprocessor.pl} -arch $arch -as-type $gaspp_as_type -- ${as:=$cc}"
5273
5274 if ! check_gas ; then
5275 as=${gas:=$as}
5276 check_gas || \
5277 $nogas "GNU assembler not found, install/update gas-preprocessor"
5278 fi
5279
5280 check_as <<EOF && enable as_func
5281.func test
5282.endfunc
5283EOF
5284fi
5285
5286check_inline_asm inline_asm_labels '"1:\n"'
5287
5288check_inline_asm inline_asm_nonlocal_labels '"Label:\n"'
5289
5290if enabled aarch64; then
5291 enabled armv8 && check_insn armv8 'prfm pldl1strm, [x0]'
5292 # internal assembler in clang 3.3 does not support this instruction
5293 enabled neon && check_insn neon 'ext v0.8B, v0.8B, v1.8B, #1'
5294 enabled vfp && check_insn vfp 'fmadd d0, d0, d1, d2'
5295
5296 map 'enabled_any ${v}_external ${v}_inline || disable $v' $ARCH_EXT_LIST_ARM
5297
5298elif enabled alpha; then
5299
5300 check_cflags -mieee
5301
5302elif enabled arm; then
5303
5304 enabled msvc && check_cpp_condition stddef.h "defined _M_ARMT" && enable thumb
5305
5306 check_cpp_condition stddef.h "defined __thumb__" && check_cc <<EOF && enable_weak thumb
5307float func(float a, float b){ return a+b; }
5308EOF
5309
5310 enabled thumb && check_cflags -mthumb || check_cflags -marm
5311
5312 if check_cpp_condition stddef.h "defined __ARM_PCS_VFP"; then
5313 enable vfp_args
5314 elif check_cpp_condition stddef.h "defined _M_ARM_FP && _M_ARM_FP >= 30"; then
5315 enable vfp_args
5316 elif ! check_cpp_condition stddef.h "defined __ARM_PCS || defined __SOFTFP__" && [ $target_os != darwin ]; then
5317 case "${cross_prefix:-$cc}" in
5318 *hardfloat*) enable vfp_args; fpabi=vfp ;;
5319 *) check_ld "cc" <<EOF && enable vfp_args && fpabi=vfp || fpabi=soft ;;
5320__asm__ (".eabi_attribute 28, 1");
5321int main(void) { return 0; }
5322EOF
5323 esac
5324 warn "Compiler does not indicate floating-point ABI, guessing $fpabi."
5325 fi
5326
5327 enabled armv5te && check_insn armv5te 'qadd r0, r0, r0'
5328 enabled armv6 && check_insn armv6 'sadd16 r0, r0, r0'
5329 enabled armv6t2 && check_insn armv6t2 'movt r0, #0'
5330 enabled neon && check_insn neon 'vadd.i16 q0, q0, q0'
5331 enabled vfp && check_insn vfp 'fadds s0, s0, s0'
5332 enabled vfpv3 && check_insn vfpv3 'vmov.f32 s0, #1.0'
5333 enabled setend && check_insn setend 'setend be'
5334
5335 [ $target_os = linux ] || [ $target_os = android ] ||
5336 map 'enabled_any ${v}_external ${v}_inline || disable $v' \
5337 $ARCH_EXT_LIST_ARM
5338
5339 check_inline_asm asm_mod_q '"add r0, %Q0, %R0" :: "r"((long long)0)'
5340
5341 check_as <<EOF && enable as_dn_directive
5342ra .dn d0.i16
5343.unreq ra
5344EOF
5345 check_as <<EOF && enable as_fpu_directive
5346.fpu neon
5347EOF
5348
5349 # llvm's integrated assembler supports .object_arch from llvm 3.5
5350 [ "$objformat" = elf ] && check_as <<EOF && enable as_object_arch
5351.object_arch armv4
5352EOF
5353
5354 [ $target_os != win32 ] && enabled_all armv6t2 shared !pic && enable_weak_pic
5355
5356elif enabled mips; then
5357
5358 enabled loongson2 && check_inline_asm loongson2 '"dmult.g $8, $9, $10"'
5359 enabled loongson3 && check_inline_asm loongson3 '"gsldxc1 $f0, 0($2, $3)"'
5360 enabled mmi && check_inline_asm mmi '"punpcklhw $f0, $f0, $f0"'
5361
5362 # Enable minimum ISA based on selected options
5363 if enabled mips64; then
5364 enabled mips64r6 && check_inline_asm_flags mips64r6 '"dlsa $0, $0, $0, 1"' '-mips64r6'
5365 enabled mips64r2 && check_inline_asm_flags mips64r2 '"dext $0, $0, 0, 1"' '-mips64r2'
5366 disabled mips64r6 && disabled mips64r2 && check_inline_asm_flags mips64r1 '"daddi $0, $0, 0"' '-mips64'
5367 else
5368 enabled mips32r6 && check_inline_asm_flags mips32r6 '"aui $0, $0, 0"' '-mips32r6'
5369 enabled mips32r5 && check_inline_asm_flags mips32r5 '"eretnc"' '-mips32r5'
5370 enabled mips32r2 && check_inline_asm_flags mips32r2 '"ext $0, $0, 0, 1"' '-mips32r2'
5371 disabled mips32r6 && disabled mips32r5 && disabled mips32r2 && check_inline_asm_flags mips32r1 '"addi $0, $0, 0"' '-mips32'
5372 fi
5373
5374 enabled mipsfpu && check_inline_asm_flags mipsfpu '"cvt.d.l $f0, $f2"' '-mhard-float'
5375 enabled mipsfpu && (enabled mips32r5 || enabled mips32r6 || enabled mips64r6) && check_inline_asm_flags mipsfpu '"cvt.d.l $f0, $f1"' '-mfp64'
5376 enabled mipsfpu && enabled msa && check_inline_asm_flags msa '"addvi.b $w0, $w1, 1"' '-mmsa' && check_header msa.h || disable msa
5377 enabled mipsdsp && check_inline_asm_flags mipsdsp '"addu.qb $t0, $t1, $t2"' '-mdsp'
5378 enabled mipsdspr2 && check_inline_asm_flags mipsdspr2 '"absq_s.qb $t0, $t1"' '-mdspr2'
5379
5380elif enabled parisc; then
5381
5382 if enabled gcc; then
5383 case $($cc -dumpversion) in
5384 4.[3-9].*) check_cflags -fno-optimize-sibling-calls ;;
5385 esac
5386 fi
5387
5388elif enabled ppc; then
5389
5390 enable local_aligned_8 local_aligned_16 local_aligned_32
5391
5392 check_inline_asm dcbzl '"dcbzl 0, %0" :: "r"(0)'
5393 check_inline_asm ibm_asm '"add 0, 0, 0"'
5394 check_inline_asm ppc4xx '"maclhw r10, r11, r12"'
5395 check_inline_asm xform_asm '"lwzx %1, %y0" :: "Z"(*(int*)0), "r"(0)'
5396
5397 # AltiVec flags: The FSF version of GCC differs from the Apple version
5398 if enabled altivec; then
5399 check_cflags -maltivec -mabi=altivec &&
5400 { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
5401 check_cflags -faltivec
5402
5403 # check if our compiler supports Motorola AltiVec C API
5404 check_cc <<EOF || disable altivec
5405$inc_altivec_h
5406int main(void) {
5407 vector signed int v1 = (vector signed int) { 0 };
5408 vector signed int v2 = (vector signed int) { 1 };
5409 v1 = vec_add(v1, v2);
5410 return 0;
5411}
5412EOF
5413
5414 enabled altivec || warn "Altivec disabled, possibly missing --cpu flag"
5415 fi
5416
5417 if enabled vsx; then
5418 check_cflags -mvsx &&
5419 check_builtin vec_vsx_ld "altivec.h" "__builtin_vec_vsx_ld" || disable vsx
5420 fi
5421
5422 if enabled power8; then
5423 check_cpp_condition "altivec.h" "defined(_ARCH_PWR8)" || disable power8
5424 fi
5425
5426elif enabled x86; then
5427
5428 check_builtin rdtsc intrin.h "__rdtsc()"
5429 check_builtin mm_empty mmintrin.h "_mm_empty()"
5430
5431 enable local_aligned_8 local_aligned_16 local_aligned_32
5432
5433 # check whether EBP is available on x86
5434 # As 'i' is stored on the stack, this program will crash
5435 # if the base pointer is used to access it because the
5436 # base pointer is cleared in the inline assembly code.
5437 check_exec_crash <<EOF && enable ebp_available
5438volatile int i=0;
5439__asm__ volatile ("xorl %%ebp, %%ebp" ::: "%ebp");
5440return i;
5441EOF
5442
5443 # check whether EBX is available on x86
5444 check_inline_asm ebx_available '""::"b"(0)' &&
5445 check_inline_asm ebx_available '"":::"%ebx"'
5446
5447 # check whether xmm clobbers are supported
5448 check_inline_asm xmm_clobbers '"":::"%xmm0"'
5449
5450 check_inline_asm inline_asm_direct_symbol_refs '"movl '$extern_prefix'test, %eax"' ||
5451 check_inline_asm inline_asm_direct_symbol_refs '"movl '$extern_prefix'test(%rip), %eax"'
5452
5453 # check whether binutils is new enough to compile SSSE3/MMXEXT
5454 enabled ssse3 && check_inline_asm ssse3_inline '"pabsw %xmm0, %xmm0"'
5455 enabled mmxext && check_inline_asm mmxext_inline '"pmaxub %mm0, %mm1"'
5456
5457 if ! disabled_any asm mmx yasm; then
5458 if check_cmd $yasmexe --version; then
5459 enabled x86_64 && yasm_extra="-m amd64"
5460 yasm_debug="-g dwarf2"
5461 elif check_cmd nasm -v; then
5462 yasmexe=nasm
5463 yasm_debug="-g -F dwarf"
5464 if enabled x86_64; then
5465 case "$objformat" in
5466 elf) objformat=elf64 ;;
5467 win32) objformat=win64 ;;
5468 esac
5469 fi
5470 fi
5471
5472 YASMFLAGS="-f $objformat $yasm_extra"
5473 enabled pic && append YASMFLAGS "-DPIC"
5474 test -n "$extern_prefix" && append YASMFLAGS "-DPREFIX"
5475 case "$objformat" in
5476 elf*) enabled debug && append YASMFLAGS $yasm_debug ;;
5477 esac
5478
5479 check_yasm "movbe ecx, [5]" && enable yasm ||
5480 die "yasm/nasm not found or too old. Use --disable-yasm for a crippled build."
5481 check_yasm "vextracti128 xmm0, ymm0, 0" || disable avx2_external
5482 check_yasm "vpmacsdd xmm0, xmm1, xmm2, xmm3" || disable xop_external
5483 check_yasm "vfmaddps ymm0, ymm1, ymm2, ymm3" || disable fma4_external
5484 check_yasm "CPU amdnop" || disable cpunop
5485 fi
5486
5487 case "$cpu" in
5488 athlon*|opteron*|k8*|pentium|pentium-mmx|prescott|nocona|atom|geode)
5489 disable fast_clz
5490 ;;
5491 esac
5492
5493fi
5494
5495check_code cc arm_neon.h "int16x8_t test = vdupq_n_s16(0)" && enable intrinsics_neon
5496
5497check_ldflags -Wl,--as-needed
5498check_ldflags -Wl,-z,noexecstack
5499
5500if check_func dlopen && check_func dlsym; then
5501 ldl=
5502elif check_func dlopen -ldl && check_func dlsym -ldl; then
5503 ldl=-ldl
5504fi
5505
5506avisynth_demuxer_extralibs='$ldl'
5507cuda_extralibs='$ldl'
5508decklink_outdev_extralibs="$decklink_outdev_extralibs $ldl"
5509decklink_indev_extralibs="$decklink_indev_extralibs $ldl"
5510frei0r_filter_extralibs='$ldl'
5511frei0r_src_filter_extralibs='$ldl'
5512ladspa_filter_extralibs='$ldl'
5513nvenc_extralibs='$ldl'
5514coreimage_filter_extralibs="-framework QuartzCore -framework AppKit -framework OpenGL"
5515coreimagesrc_filter_extralibs="-framework QuartzCore -framework AppKit -framework OpenGL"
5516
5517if ! disabled network; then
5518 check_func getaddrinfo $network_extralibs
5519 check_func inet_aton $network_extralibs
5520
5521 check_type netdb.h "struct addrinfo"
5522 check_type netinet/in.h "struct group_source_req" -D_BSD_SOURCE
5523 check_type netinet/in.h "struct ip_mreq_source" -D_BSD_SOURCE
5524 check_type netinet/in.h "struct ipv6_mreq" -D_DARWIN_C_SOURCE
5525 check_type poll.h "struct pollfd"
5526 check_type netinet/sctp.h "struct sctp_event_subscribe"
5527 check_struct "sys/socket.h" "struct msghdr" msg_flags
5528 check_struct "sys/types.h sys/socket.h" "struct sockaddr" sa_len
5529 check_type netinet/in.h "struct sockaddr_in6"
5530 check_type "sys/types.h sys/socket.h" "struct sockaddr_storage"
5531 check_type "sys/types.h sys/socket.h" socklen_t
5532
5533 # Prefer arpa/inet.h over winsock2
5534 if check_header arpa/inet.h ; then
5535 check_func closesocket
5536 elif check_header winsock2.h ; then
5537 check_func_headers winsock2.h closesocket -lws2 &&
5538 network_extralibs="-lws2" ||
5539 { check_func_headers winsock2.h closesocket -lws2_32 &&
5540 network_extralibs="-lws2_32"; } || disable winsock2_h network
5541 check_func_headers ws2tcpip.h getaddrinfo $network_extralibs
5542
5543 check_type ws2tcpip.h socklen_t
5544 check_type ws2tcpip.h "struct addrinfo"
5545 check_type ws2tcpip.h "struct group_source_req"
5546 check_type ws2tcpip.h "struct ip_mreq_source"
5547 check_type ws2tcpip.h "struct ipv6_mreq"
5548 check_type winsock2.h "struct pollfd"
5549 check_struct winsock2.h "struct sockaddr" sa_len
5550 check_type ws2tcpip.h "struct sockaddr_in6"
5551 check_type ws2tcpip.h "struct sockaddr_storage"
5552 else
5553 disable network
5554 fi
5555fi
5556
5557check_builtin atomic_cas_ptr atomic.h "void **ptr; void *oldval, *newval; atomic_cas_ptr(ptr, oldval, newval)"
5558check_builtin machine_rw_barrier mbarrier.h "__machine_rw_barrier()"
5559check_builtin MemoryBarrier windows.h "MemoryBarrier()"
5560check_builtin sarestart signal.h "SA_RESTART"
5561check_builtin sem_timedwait semaphore.h "sem_t *s; sem_init(s,0,0); sem_timedwait(s,0); sem_destroy(s)" -lpthread
5562check_builtin sync_val_compare_and_swap "" "int *ptr; int oldval, newval; __sync_val_compare_and_swap(ptr, oldval, newval)"
5563check_builtin gmtime_r time.h "time_t *time; struct tm *tm; gmtime_r(time, tm)"
5564check_builtin localtime_r time.h "time_t *time; struct tm *tm; localtime_r(time, tm)"
5565check_builtin x264_csp_bgr "stdint.h x264.h" "X264_CSP_BGR"
5566
5567case "$custom_allocator" in
5568 jemalloc)
5569 # jemalloc by default does not use a prefix
5570 require libjemalloc jemalloc/jemalloc.h malloc -ljemalloc
5571 ;;
5572 tcmalloc)
5573 require_pkg_config libtcmalloc gperftools/tcmalloc.h tc_malloc
5574 malloc_prefix=tc_
5575 ;;
5576esac
5577
5578check_func_headers malloc.h _aligned_malloc && enable aligned_malloc
5579check_func ${malloc_prefix}memalign && enable memalign
5580check_func ${malloc_prefix}posix_memalign && enable posix_memalign
5581
5582check_func access
5583check_func_headers stdlib.h arc4random
5584check_func_headers time.h clock_gettime ||
5585 { check_lib time.h clock_gettime -lrt && LIBRT="-lrt"; }
5586check_func fcntl
5587check_func fork
5588check_func gethrtime
5589check_func getopt
5590check_func getrusage
5591check_func gettimeofday
5592check_func isatty
5593check_func mach_absolute_time
5594check_func mkstemp
5595check_func mmap
5596check_func mprotect
5597# Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
5598check_func_headers time.h nanosleep ||
5599 { check_lib time.h nanosleep -lrt && LIBRT="-lrt"; }
5600check_func sched_getaffinity
5601check_func setrlimit
5602check_struct "sys/stat.h" "struct stat" st_mtim.tv_nsec -D_BSD_SOURCE
5603check_func strerror_r
5604check_func sysconf
5605check_func sysctl
5606check_func usleep
5607
5608check_func_headers conio.h kbhit
5609check_func_headers io.h setmode
5610check_func_headers lzo/lzo1x.h lzo1x_999_compress
5611check_func_headers stdlib.h getenv
5612check_func_headers sys/stat.h lstat
5613
5614check_func_headers windows.h CoTaskMemFree -lole32
5615check_func_headers windows.h GetProcessAffinityMask
5616check_func_headers windows.h GetProcessTimes
5617check_func_headers windows.h GetSystemTimeAsFileTime
5618check_func_headers windows.h LoadLibrary
5619check_func_headers windows.h MapViewOfFile
5620check_func_headers windows.h PeekNamedPipe
5621check_func_headers windows.h SetConsoleTextAttribute
5622check_func_headers windows.h SetConsoleCtrlHandler
5623check_func_headers windows.h Sleep
5624check_func_headers windows.h VirtualAlloc
5625check_struct windows.h "CONDITION_VARIABLE" Ptr
5626check_func_headers glob.h glob
5627enabled xlib &&
5628 check_func_headers "X11/Xlib.h X11/extensions/Xvlib.h" XvGetPortAttribute -lXv -lX11 -lXext
5629
5630check_header AudioToolbox/AudioToolbox.h
5631check_header direct.h
5632check_header dirent.h
5633check_header dlfcn.h
5634check_header d3d11.h
5635check_header dxva.h
5636check_header dxva2api.h -D_WIN32_WINNT=0x0600
5637check_header io.h
5638check_header libcrystalhd/libcrystalhd_if.h
5639check_header mach/mach_time.h
5640check_header malloc.h
5641check_header net/udplite.h
5642check_header poll.h
5643check_header sys/mman.h
5644check_header sys/param.h
5645check_header sys/resource.h
5646check_header sys/select.h
5647check_header sys/time.h
5648check_header sys/un.h
5649check_header termios.h
5650check_header unistd.h
5651check_header valgrind/valgrind.h
5652check_header vdpau/vdpau.h
5653check_header vdpau/vdpau_x11.h
5654check_header VideoDecodeAcceleration/VDADecoder.h
5655check_header VideoToolbox/VideoToolbox.h
5656check_func_headers VideoToolbox/VTCompressionSession.h VTCompressionSessionPrepareToEncodeFrames -framework VideoToolbox
5657enabled videotoolbox && check_func_headers CoreVideo/CVImageBuffer.h kCVImageBufferColorPrimaries_ITU_R_2020 -framework CoreVideo
5658check_header windows.h
5659check_header X11/extensions/XvMClib.h
5660check_header asm/types.h
5661
5662# it seems there are versions of clang in some distros that try to use the
5663# gcc headers, which explodes for stdatomic
5664# so we also check that atomics actually work here
5665check_builtin stdatomic_h stdatomic.h "atomic_int foo, bar = ATOMIC_VAR_INIT(-1); atomic_store(&foo, 0)"
5666
5667check_lib "windows.h shellapi.h" CommandLineToArgvW -lshell32
5668check_lib "windows.h wincrypt.h" CryptGenRandom -ladvapi32
5669check_lib "windows.h psapi.h" GetProcessMemoryInfo -lpsapi
5670
5671check_lib "CoreServices/CoreServices.h" UTGetOSTypeFromString "-framework CoreServices"
5672
5673check_struct "sys/time.h sys/resource.h" "struct rusage" ru_maxrss
5674
5675check_type "windows.h dxva.h" "DXVA_PicParams_HEVC" -DWINAPI_FAMILY=WINAPI_FAMILY_DESKTOP_APP -D_CRT_BUILD_DESKTOP_APP=0
5676check_type "windows.h dxva.h" "DXVA_PicParams_VP9" -DWINAPI_FAMILY=WINAPI_FAMILY_DESKTOP_APP -D_CRT_BUILD_DESKTOP_APP=0
5677check_type "windows.h d3d11.h" "ID3D11VideoDecoder"
5678check_type "windows.h d3d11.h" "ID3D11VideoContext"
5679check_type "d3d9.h dxva2api.h" DXVA2_ConfigPictureDecode -D_WIN32_WINNT=0x0602
5680
5681check_type "va/va.h va/va_dec_hevc.h" "VAPictureParameterBufferHEVC"
5682check_struct "va/va.h" "VADecPictureParameterBufferVP9" bit_depth
5683check_type "va/va.h va/va_vpp.h" "VAProcPipelineParameterBuffer"
5684check_type "va/va.h va/va_enc_h264.h" "VAEncPictureParameterBufferH264"
5685check_type "va/va.h va/va_enc_hevc.h" "VAEncPictureParameterBufferHEVC"
5686check_type "va/va.h va/va_enc_jpeg.h" "VAEncPictureParameterBufferJPEG"
5687check_type "va/va.h va/va_enc_mpeg2.h" "VAEncPictureParameterBufferMPEG2"
5688check_type "va/va.h va/va_enc_vp8.h" "VAEncPictureParameterBufferVP8"
5689
5690check_type "vdpau/vdpau.h" "VdpPictureInfoHEVC"
5691
5692check_cpp_condition windows.h "!WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)" && enable winrt || disable winrt
5693
5694if ! disabled w32threads && ! enabled pthreads; then
5695 check_func_headers "windows.h process.h" _beginthreadex &&
5696 enable w32threads || disable w32threads
5697 if ! enabled w32threads && enabled winrt; then
5698 check_func_headers "windows.h" CreateThread &&
5699 enable w32threads || disable w32threads
5700 fi
5701fi
5702
5703# check for some common methods of building with pthread support
5704# do this before the optional library checks as some of them require pthreads
5705if ! disabled pthreads && ! enabled w32threads && ! enabled os2threads; then
5706 enable pthreads
5707 if check_func pthread_join -pthread && check_func pthread_create -pthread; then
5708 add_cflags -pthread
5709 add_extralibs -pthread
5710 elif check_func pthread_join -pthreads && check_func pthread_create -pthreads; then
5711 add_cflags -pthreads
5712 add_extralibs -pthreads
5713 elif check_func pthread_join -ldl -pthread && check_func pthread_create -ldl -pthread; then
5714 add_cflags -ldl -pthread
5715 add_extralibs -ldl -pthread
5716 elif check_func pthread_join -lpthreadGC2 && check_func pthread_create -lpthreadGC2; then
5717 add_extralibs -lpthreadGC2
5718 elif check_lib pthread.h pthread_join -lpthread && check_lib pthread.h pthread_create -lpthread; then
5719 :
5720 elif ! check_func pthread_join && ! check_func pthread_create; then
5721 disable pthreads
5722 fi
5723 check_code cc "pthread.h" "static pthread_mutex_t atomic_lock = PTHREAD_MUTEX_INITIALIZER" || disable pthreads
5724fi
5725
5726
5727if enabled pthreads; then
5728 check_func pthread_cancel
5729fi
5730
5731enabled pthreads &&
5732 check_builtin sem_timedwait semaphore.h "sem_t *s; sem_init(s,0,0); sem_timedwait(s,0); sem_destroy(s)"
5733
5734disabled zlib || check_lib zlib.h zlibVersion -lz || disable zlib
5735disabled bzlib || check_lib bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
5736disabled lzma || check_lib lzma.h lzma_version_number -llzma || disable lzma
5737
5738check_lib math.h sin -lm && LIBM="-lm"
5739disabled crystalhd || check_lib "stdint.h libcrystalhd/libcrystalhd_if.h" DtsCrystalHDVersion -lcrystalhd || disable crystalhd
5740
5741atan2f_args=2
5742copysign_args=2
5743hypot_args=2
5744ldexpf_args=2
5745powf_args=2
5746
5747for func in $MATH_FUNCS; do
5748 eval check_mathfunc $func \${${func}_args:-1}
5749done
5750
5751for func in $COMPLEX_FUNCS; do
5752 eval check_complexfunc $func \${${func}_args:-1}
5753done
5754
5755# these are off by default, so fail if requested and not available
5756enabled avfoundation_indev && { check_header_objcc AVFoundation/AVFoundation.h || disable avfoundation_indev; }
5757enabled avfoundation_indev && { check_lib CoreGraphics/CoreGraphics.h CGGetActiveDisplayList -framework CoreGraphics ||
5758 check_lib ApplicationServices/ApplicationServices.h CGGetActiveDisplayList -framework ApplicationServices; }
5759enabled cuda && check_header cuda.h # this is not a dependency
5760enabled cuvid && { enabled cuda ||
5761 die "ERROR: CUVID requires CUDA"; }
5762enabled chromaprint && require chromaprint chromaprint.h chromaprint_get_version -lchromaprint
5763enabled coreimage_filter && { check_header_objcc QuartzCore/CoreImage.h || disable coreimage_filter; }
5764enabled coreimagesrc_filter && { check_header_objcc QuartzCore/CoreImage.h || disable coreimagesrc_filter; }
5765enabled decklink && { { check_header DeckLinkAPI.h || die "ERROR: DeckLinkAPI.h header not found"; } &&
5766 { check_cpp_condition DeckLinkAPIVersion.h "BLACKMAGIC_DECKLINK_API_VERSION >= 0x0a060100" || die "ERROR: Decklink API version must be >= 10.6.1."; } }
5767enabled frei0r && { check_header frei0r.h || die "ERROR: frei0r.h header not found"; }
5768enabled gmp && require gmp gmp.h mpz_export -lgmp
5769enabled gnutls && require_pkg_config gnutls gnutls/gnutls.h gnutls_global_init
5770enabled jni && { [ $target_os = "android" ] && check_header jni.h && enabled pthreads &&
5771 check_lib "dlfcn.h" dlopen -ldl || die "ERROR: jni not found"; }
5772enabled ladspa && { check_header ladspa.h || die "ERROR: ladspa.h header not found"; }
5773enabled libiec61883 && require libiec61883 libiec61883/iec61883.h iec61883_cmp_connect -lraw1394 -lavc1394 -lrom1394 -liec61883
5774enabled libass && require_pkg_config libass ass/ass.h ass_library_init
5775enabled libbluray && require_pkg_config libbluray libbluray/bluray.h bd_open
5776enabled libbs2b && require_pkg_config libbs2b bs2b.h bs2b_open
5777enabled libcelt && require libcelt celt/celt.h celt_decode -lcelt0 &&
5778 { check_lib celt/celt.h celt_decoder_create_custom -lcelt0 ||
5779 die "ERROR: libcelt must be installed and version must be >= 0.11.0."; }
5780enabled libcaca && require_pkg_config caca caca.h caca_create_canvas
5781enabled libfdk_aac && { use_pkg_config fdk-aac "fdk-aac/aacenc_lib.h" aacEncOpen ||
5782 { require libfdk_aac fdk-aac/aacenc_lib.h aacEncOpen -lfdk-aac &&
5783 warn "using libfdk without pkg-config"; } }
5784flite_libs="-lflite_cmu_time_awb -lflite_cmu_us_awb -lflite_cmu_us_kal -lflite_cmu_us_kal16 -lflite_cmu_us_rms -lflite_cmu_us_slt -lflite_usenglish -lflite_cmulex -lflite"
5785enabled libflite && require libflite "flite/flite.h" flite_init $flite_libs
5786enabled fontconfig && enable libfontconfig
5787enabled libfontconfig && require_pkg_config fontconfig "fontconfig/fontconfig.h" FcInit
5788enabled libfreetype && require_libfreetype
5789enabled libfribidi && require_pkg_config fribidi fribidi.h fribidi_version_info
5790enabled libgme && require libgme gme/gme.h gme_new_emu -lgme -lstdc++
5791enabled libgsm && { for gsm_hdr in "gsm.h" "gsm/gsm.h"; do
5792 check_lib "${gsm_hdr}" gsm_create -lgsm && break;
5793 done || die "ERROR: libgsm not found"; }
5794enabled libilbc && require libilbc ilbc.h WebRtcIlbcfix_InitDecode -lilbc
5795enabled libkvazaar && require_pkg_config "kvazaar >= 0.8.1" kvazaar.h kvz_api_get
5796enabled libmfx && require_pkg_config libmfx "mfx/mfxvideo.h" MFXInit
5797enabled libmodplug && require_pkg_config libmodplug libmodplug/modplug.h ModPlug_Load
5798enabled libmp3lame && require "libmp3lame >= 3.98.3" lame/lame.h lame_set_VBR_quality -lmp3lame
5799enabled libnut && require libnut libnut.h nut_demuxer_init -lnut
5800enabled libnpp && require libnpp npp.h nppGetLibVersion -lnppi -lnppc
5801enabled libopencore_amrnb && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb
5802enabled libopencore_amrwb && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb
5803enabled libopencv && { check_header opencv2/core/core_c.h &&
5804 { use_pkg_config opencv opencv2/core/core_c.h cvCreateImageHeader ||
5805 require opencv opencv2/core/core_c.h cvCreateImageHeader -lopencv_core -lopencv_imgproc; } ||
5806 require_pkg_config opencv opencv/cxcore.h cvCreateImageHeader; }
5807enabled libopenh264 && require_pkg_config openh264 wels/codec_api.h WelsGetCodecVersion
5808enabled libopenjpeg && { { check_lib openjpeg-2.1/openjpeg.h opj_version -lopenjp2 -DOPJ_STATIC && add_cppflags -DOPJ_STATIC; } ||
5809 check_lib openjpeg-2.1/openjpeg.h opj_version -lopenjp2 ||
5810 { check_lib openjpeg-2.0/openjpeg.h opj_version -lopenjp2 -DOPJ_STATIC && add_cppflags -DOPJ_STATIC; } ||
5811 { check_lib openjpeg-1.5/openjpeg.h opj_version -lopenjpeg -DOPJ_STATIC && add_cppflags -DOPJ_STATIC; } ||
5812 { check_lib openjpeg.h opj_version -lopenjpeg -DOPJ_STATIC && add_cppflags -DOPJ_STATIC; } ||
5813 die "ERROR: libopenjpeg not found"; }
5814enabled libopenmpt && require_pkg_config "libopenmpt >= 0.2.6557" libopenmpt/libopenmpt.h openmpt_module_create
5815enabled libopus && require_pkg_config opus opus_multistream.h opus_multistream_decoder_create
5816enabled libpulse && require_pkg_config libpulse pulse/pulseaudio.h pa_context_new
5817enabled librtmp && require_pkg_config librtmp librtmp/rtmp.h RTMP_Socket
5818enabled librubberband && require_pkg_config "rubberband >= 1.8.1" rubberband/rubberband-c.h rubberband_new
5819enabled libschroedinger && require_pkg_config schroedinger-1.0 schroedinger/schro.h schro_init
5820enabled libshine && require_pkg_config shine shine/layer3.h shine_encode_buffer
5821enabled libsmbclient && { use_pkg_config smbclient libsmbclient.h smbc_init ||
5822 require smbclient libsmbclient.h smbc_init -lsmbclient; }
5823enabled libsnappy && require snappy snappy-c.h snappy_compress -lsnappy
5824enabled libsoxr && require libsoxr soxr.h soxr_create -lsoxr && LIBSOXR="-lsoxr"
5825enabled libssh && require_pkg_config libssh libssh/sftp.h sftp_init
5826enabled libspeex && require_pkg_config speex speex/speex.h speex_decoder_init -lspeex
5827enabled libtesseract && require_pkg_config tesseract tesseract/capi.h TessBaseAPICreate
5828enabled libtheora && require libtheora theora/theoraenc.h th_info_init -ltheoraenc -ltheoradec -logg
5829enabled libtwolame && require libtwolame twolame.h twolame_init -ltwolame &&
5830 { check_lib twolame.h twolame_encode_buffer_float32_interleaved -ltwolame ||
5831 die "ERROR: libtwolame must be installed and version must be >= 0.3.10"; }
5832enabled libv4l2 && require_pkg_config libv4l2 libv4l2.h v4l2_ioctl
5833enabled libvidstab && require_pkg_config "vidstab >= 0.98" vid.stab/libvidstab.h vsMotionDetectInit
5834enabled libvo_amrwbenc && require libvo_amrwbenc vo-amrwbenc/enc_if.h E_IF_init -lvo-amrwbenc
5835enabled libvorbis && require libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
5836
5837enabled libvpx && {
5838 enabled libvpx_vp8_decoder && {
5839 use_pkg_config "vpx >= 0.9.1" "vpx/vpx_decoder.h vpx/vp8dx.h" vpx_codec_vp8_dx ||
5840 check_lib "vpx/vpx_decoder.h vpx/vp8dx.h" vpx_codec_dec_init_ver -lvpx ||
5841 die "ERROR: libvpx decoder version must be >=0.9.1";
5842 }
5843 enabled libvpx_vp8_encoder && {
5844 use_pkg_config "vpx >= 0.9.7" "vpx/vpx_encoder.h vpx/vp8cx.h" vpx_codec_vp8_cx ||
5845 check_lib "vpx/vpx_encoder.h vpx/vp8cx.h" "vpx_codec_enc_init_ver VP8E_SET_MAX_INTRA_BITRATE_PCT" -lvpx ||
5846 die "ERROR: libvpx encoder version must be >=0.9.7";
5847 }
5848 enabled libvpx_vp9_decoder && {
5849 use_pkg_config "vpx >= 1.3.0" "vpx/vpx_decoder.h vpx/vp8dx.h" vpx_codec_vp9_dx ||
5850 check_lib "vpx/vpx_decoder.h vpx/vp8dx.h" "vpx_codec_vp9_dx" -lvpx ||
5851 disable libvpx_vp9_decoder;
5852 }
5853 enabled libvpx_vp9_encoder && {
5854 use_pkg_config "vpx >= 1.3.0" "vpx/vpx_encoder.h vpx/vp8cx.h" vpx_codec_vp9_cx ||
5855 check_lib "vpx/vpx_encoder.h vpx/vp8cx.h" "vpx_codec_vp9_cx VP9E_SET_AQ_MODE" -lvpx ||
5856 disable libvpx_vp9_encoder;
5857 }
5858 if disabled_all libvpx_vp8_decoder libvpx_vp9_decoder libvpx_vp8_encoder libvpx_vp9_encoder; then
5859 die "libvpx enabled but no supported decoders found"
5860 fi
5861}
5862
5863enabled libwavpack && require libwavpack wavpack/wavpack.h WavpackOpenFileOutput -lwavpack
5864enabled libwebp && {
5865 enabled libwebp_encoder && require_pkg_config "libwebp >= 0.2.0" webp/encode.h WebPGetEncoderVersion
5866 enabled libwebp_anim_encoder && { use_pkg_config "libwebpmux >= 0.4.0" webp/mux.h WebPAnimEncoderOptionsInit || disable libwebp_anim_encoder; } }
5867enabled libx264 && { use_pkg_config x264 "stdint.h x264.h" x264_encoder_encode ||
5868 { require libx264 "stdint.h x264.h" x264_encoder_encode -lx264 &&
5869 warn "using libx264 without pkg-config"; } } &&
5870 { check_cpp_condition x264.h "X264_BUILD >= 118" ||
5871 die "ERROR: libx264 must be installed and version must be >= 0.118."; } &&
5872 { check_cpp_condition x264.h "X264_MPEG2" &&
5873 enable libx262; }
5874enabled libx265 && require_pkg_config x265 x265.h x265_api_get &&
5875 { check_cpp_condition x265.h "X265_BUILD >= 68" ||
5876 die "ERROR: libx265 version must be >= 68."; }
5877enabled libxavs && require libxavs "stdint.h xavs.h" xavs_encoder_encode -lxavs
5878enabled libxvid && require libxvid xvid.h xvid_global -lxvidcore
5879enabled libzimg && require_pkg_config "zimg >= 2.3.0" zimg.h zimg_get_api_version
5880enabled libzmq && require_pkg_config libzmq zmq.h zmq_ctx_new
5881enabled libzvbi && require libzvbi libzvbi.h vbi_decoder_new -lzvbi &&
5882 { check_cpp_condition libzvbi.h "VBI_VERSION_MAJOR > 0 || VBI_VERSION_MINOR > 2 || VBI_VERSION_MINOR == 2 && VBI_VERSION_MICRO >= 28" ||
5883 enabled gpl || die "ERROR: libzvbi requires version 0.2.28 or --enable-gpl."; }
5884enabled mediacodec && { enabled jni || die "ERROR: mediacodec requires --enable-jni"; }
5885enabled mmal && { check_lib interface/mmal/mmal.h mmal_port_connect -lmmal_core -lmmal_util -lmmal_vc_client -lbcm_host ||
5886 { ! enabled cross_compile && {
5887 add_cflags -isystem/opt/vc/include/ -isystem/opt/vc/include/interface/vmcs_host/linux -isystem/opt/vc/include/interface/vcos/pthreads -fgnu89-inline ;
5888 add_extralibs -L/opt/vc/lib/ -lmmal_core -lmmal_util -lmmal_vc_client -lbcm_host ;
5889 check_lib interface/mmal/mmal.h mmal_port_connect ; }
5890 check_lib interface/mmal/mmal.h mmal_port_connect ; } ||
5891 die "ERROR: mmal not found"; }
5892enabled mmal && check_func_headers interface/mmal/mmal.h "MMAL_PARAMETER_VIDEO_MAX_NUM_CALLBACKS"
5893
5894enabled netcdf && require_pkg_config netcdf netcdf.h nc_inq_libvers
5895enabled openal && { { for al_libs in "${OPENAL_LIBS}" "-lopenal" "-lOpenAL32"; do
5896 check_lib 'AL/al.h' alGetError "${al_libs}" && break; done } ||
5897 die "ERROR: openal not found"; } &&
5898 { check_cpp_condition "AL/al.h" "defined(AL_VERSION_1_1)" ||
5899 die "ERROR: openal must be installed and version must be 1.1 or compatible"; }
5900enabled opencl && { check_lib OpenCL/cl.h clEnqueueNDRangeKernel -Wl,-framework,OpenCL ||
5901 check_lib CL/cl.h clEnqueueNDRangeKernel -lOpenCL ||
5902 die "ERROR: opencl not found"; } &&
5903 { check_cpp_condition "OpenCL/cl.h" "defined(CL_VERSION_1_2)" ||
5904 check_cpp_condition "CL/cl.h" "defined(CL_VERSION_1_2)" ||
5905 die "ERROR: opencl must be installed and version must be 1.2 or compatible"; }
5906enabled opengl && { check_lib GL/glx.h glXGetProcAddress "-lGL" ||
5907 check_lib windows.h wglGetProcAddress "-lopengl32 -lgdi32" ||
5908 check_lib OpenGL/gl3.h glGetError "-Wl,-framework,OpenGL" ||
5909 check_lib ES2/gl.h glGetError "-isysroot=${sysroot} -Wl,-framework,OpenGLES" ||
5910 die "ERROR: opengl not found."
5911 }
5912enabled omx_rpi && enable omx
5913enabled omx && { check_header OMX_Core.h ||
5914 { ! enabled cross_compile && enabled omx_rpi && {
5915 add_cflags -isystem/opt/vc/include/IL ; }
5916 check_header OMX_Core.h ; } ||
5917 die "ERROR: OpenMAX IL headers not found"; }
5918enabled openssl && { use_pkg_config openssl openssl/ssl.h OPENSSL_init_ssl ||
5919 use_pkg_config openssl openssl/ssl.h SSL_library_init ||
5920 check_lib openssl/ssl.h SSL_library_init -lssl -lcrypto ||
5921 check_lib openssl/ssl.h SSL_library_init -lssl32 -leay32 ||
5922 check_lib openssl/ssl.h SSL_library_init -lssl -lcrypto -lws2_32 -lgdi32 ||
5923 die "ERROR: openssl not found"; }
5924enabled qtkit_indev && { check_header_objcc QTKit/QTKit.h || disable qtkit_indev; }
5925
5926# libdc1394 check
5927if enabled libdc1394; then
5928 { require_pkg_config libdc1394-2 dc1394/dc1394.h dc1394_new &&
5929 enable libdc1394_2; } ||
5930 { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
5931 enable libdc1394_1; } ||
5932 die "ERROR: No version of libdc1394 found "
5933fi
5934
5935if enabled gcrypt; then
5936 GCRYPT_CONFIG="${cross_prefix}libgcrypt-config"
5937 if "${GCRYPT_CONFIG}" --version > /dev/null 2>&1; then
5938 gcrypt_cflags=$("${GCRYPT_CONFIG}" --cflags)
5939 gcrypt_libs=$("${GCRYPT_CONFIG}" --libs)
5940 check_func_headers gcrypt.h gcry_mpi_new $gcrypt_cflags $gcrypt_libs ||
5941 die "ERROR: gcrypt not found"
5942 add_cflags $gcrypt_cflags && add_extralibs $gcrypt_libs
5943 else
5944 require gcrypt gcrypt.h gcry_mpi_new -lgcrypt
5945 fi
5946fi
5947
5948disabled sdl && disable sdl2
5949if ! disabled sdl2; then
5950 SDL2_CONFIG="${cross_prefix}sdl2-config"
5951 if check_pkg_config sdl2 SDL_events.h SDL_PollEvent; then
5952 check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x020001" $sdl2_cflags &&
5953 check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) < 0x020100" $sdl2_cflags &&
5954 check_func SDL_Init $sdl2_libs $sdl2_cflags && enable sdl2
5955 else
5956 if "${SDL2_CONFIG}" --version > /dev/null 2>&1; then
5957 sdl2_cflags=$("${SDL2_CONFIG}" --cflags)
5958 sdl2_libs=$("${SDL2_CONFIG}" --libs)
5959 check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x020001" $sdl2_cflags &&
5960 check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) < 0x020100" $sdl2_cflags &&
5961 check_func SDL_Init $sdl2_libs $sdl2_cflags && enable sdl2
5962 fi
5963 fi
5964 if test $target_os = "mingw32"; then
5965 sdl2_libs="$sdl2_libs -mconsole"
5966 fi
5967fi
5968enabled sdl2 && enable sdl && add_cflags $sdl2_cflags && add_extralibs $sdl2_libs
5969
5970disabled securetransport || { check_func SecIdentityCreate "-Wl,-framework,CoreFoundation -Wl,-framework,Security" &&
5971 check_lib "Security/SecureTransport.h Security/Security.h" "SSLCreateContext SecItemImport" "-Wl,-framework,CoreFoundation -Wl,-framework,Security" &&
5972 enable securetransport; }
5973
5974disabled schannel || { check_func_headers "windows.h security.h" InitializeSecurityContext -DSECURITY_WIN32 -lsecur32 &&
5975 check_cpp_condition winerror.h "defined(SEC_I_CONTEXT_EXPIRED)" && enable schannel && add_extralibs -lsecur32; }
5976
5977makeinfo --version > /dev/null 2>&1 && enable makeinfo || disable makeinfo
5978enabled makeinfo \
5979 && [ 0$(makeinfo --version | grep "texinfo" | sed 's/.*texinfo[^0-9]*\([0-9]*\)\..*/\1/') -ge 5 ] \
5980 && enable makeinfo_html || disable makeinfo_html
5981disabled makeinfo_html && texi2html --help 2> /dev/null | grep -q 'init-file' && enable texi2html || disable texi2html
5982perl -v > /dev/null 2>&1 && enable perl || disable perl
5983pod2man --help > /dev/null 2>&1 && enable pod2man || disable pod2man
5984rsync --help 2> /dev/null | grep -q 'contimeout' && enable rsync_contimeout || disable rsync_contimeout
5985
5986check_header linux/fb.h
5987check_header linux/videodev.h
5988check_header linux/videodev2.h
5989check_code cc linux/videodev2.h "struct v4l2_frmsizeenum vfse; vfse.discrete.width = 0;" && enable_safe struct_v4l2_frmivalenum_discrete
5990
5991check_header sys/videoio.h
5992check_code cc sys/videoio.h "struct v4l2_frmsizeenum vfse; vfse.discrete.width = 0;" && enable_safe struct_v4l2_frmivalenum_discrete
5993
5994check_func_headers "windows.h vfw.h" capCreateCaptureWindow "$vfwcap_indev_extralibs"
5995# check that WM_CAP_DRIVER_CONNECT is defined to the proper value
5996# w32api 3.12 had it defined wrong
5997check_cpp_condition vfw.h "WM_CAP_DRIVER_CONNECT > WM_USER" && enable vfwcap_defines
5998
5999check_type "dshow.h" IBaseFilter
6000
6001# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
6002{ check_header dev/bktr/ioctl_meteor.h &&
6003 check_header dev/bktr/ioctl_bt848.h; } ||
6004{ check_header machine/ioctl_meteor.h &&
6005 check_header machine/ioctl_bt848.h; } ||
6006{ check_header dev/video/meteor/ioctl_meteor.h &&
6007 check_header dev/video/bktr/ioctl_bt848.h; } ||
6008check_header dev/ic/bt8xx.h
6009
6010check_header sndio.h
6011if check_struct sys/soundcard.h audio_buf_info bytes; then
6012 enable_safe sys/soundcard.h
6013else
6014 check_cc -D__BSD_VISIBLE -D__XSI_VISIBLE <<EOF && add_cppflags -D__BSD_VISIBLE -D__XSI_VISIBLE && enable_safe sys/soundcard.h
6015 #include <sys/soundcard.h>
6016 audio_buf_info abc;
6017EOF
6018fi
6019check_header soundcard.h
6020
6021enabled_any alsa_indev alsa_outdev &&
6022 check_lib alsa/asoundlib.h snd_pcm_htimestamp -lasound
6023
6024enabled jack_indev && check_lib jack/jack.h jack_client_open -ljack &&
6025 check_func jack_port_get_latency_range -ljack
6026
6027enabled_any sndio_indev sndio_outdev && check_lib sndio.h sio_open -lsndio
6028
6029if enabled libcdio; then
6030 check_lib "cdio/cdda.h cdio/paranoia.h" cdio_cddap_open -lcdio_paranoia -lcdio_cdda -lcdio ||
6031 check_lib "cdio/paranoia/cdda.h cdio/paranoia/paranoia.h" cdio_cddap_open -lcdio_paranoia -lcdio_cdda -lcdio ||
6032 die "ERROR: No usable libcdio/cdparanoia found"
6033fi
6034
6035if ! disabled libxcb; then
6036 check_pkg_config "xcb >= 1.4" xcb/xcb.h xcb_connect || {
6037 enabled libxcb && die "ERROR: libxcb >= 1.4 not found";
6038 } && enable libxcb
6039
6040if enabled libxcb; then
6041 disabled libxcb_shm || {
6042 check_pkg_config xcb-shm xcb/shm.h xcb_shm_attach || {
6043 enabled libxcb_shm && die "ERROR: libxcb_shm not found";
6044 } && check_header sys/shm.h && enable libxcb_shm; }
6045
6046 disabled libxcb_xfixes || {
6047 check_pkg_config xcb-xfixes xcb/xfixes.h xcb_xfixes_get_cursor_image || {
6048 enabled libxcb_xfixes && die "ERROR: libxcb_xfixes not found";
6049 } && enable libxcb_xfixes; }
6050
6051 disabled libxcb_shape || {
6052 check_pkg_config xcb-shape xcb/shape.h xcb_shape_get_rectangles || {
6053 enabled libxcb_shape && die "ERROR: libxcb_shape not found";
6054 } && enable libxcb_shape; }
6055
6056 add_cflags $xcb_cflags $xcb_shm_cflags $xcb_xfixes_cflags $xcb_shape_cflags
6057 add_extralibs $xcb_libs $xcb_shm_libs $xcb_xfixes_libs $xcb_shape_libs
6058fi
6059fi
6060
6061check_func_headers "windows.h" CreateDIBSection "$gdigrab_indev_extralibs"
6062
6063enabled dxva2api_h &&
6064 check_cc <<EOF && enable dxva2api_cobj
6065#define _WIN32_WINNT 0x0600
6066#define COBJMACROS
6067#include <windows.h>
6068#include <d3d9.h>
6069#include <dxva2api.h>
6070int main(void) { IDirectXVideoDecoder *o = NULL; IDirectXVideoDecoder_Release(o); return 0; }
6071EOF
6072
6073enabled vaapi &&
6074 check_lib va/va.h vaInitialize -lva ||
6075 disable vaapi
6076
6077enabled vaapi &&
6078 check_code cc "va/va.h" "vaCreateSurfaces(0, 0, 0, 0, 0, 0, 0, 0)" ||
6079 disable vaapi
6080
6081enabled vaapi &&
6082 check_lib "va/va.h va/va_drm.h" vaGetDisplayDRM -lva -lva-drm &&
6083 enable vaapi_drm
6084
6085enabled vdpau &&
6086 check_cpp_condition vdpau/vdpau.h "defined VDP_DECODER_PROFILE_MPEG4_PART2_ASP" ||
6087 disable vdpau
6088
6089enabled_any vaapi vdpau && check_lib X11/Xlib.h XOpenDisplay -lX11 && enable xlib
6090
6091enabled vaapi && enabled xlib &&
6092 check_lib "va/va.h va/va_x11.h" vaGetDisplay -lva -lva-x11 &&
6093 enable vaapi_x11
6094
6095enabled vdpau && enabled xlib &&
6096 check_lib "vdpau/vdpau.h vdpau/vdpau_x11.h" vdp_device_create_x11 -lvdpau &&
6097 enable vdpau_x11
6098
6099if enabled x86; then
6100 case $target_os in
6101 mingw32*|mingw64*|win32|win64|linux|cygwin*)
6102 ;;
6103 *)
6104 disable cuda cuvid nvenc
6105 ;;
6106 esac
6107else
6108 disable cuda cuvid nvenc
6109fi
6110
6111enabled nvenc &&
6112 check_cc -I$source_path <<EOF || disable nvenc
6113#include "compat/nvenc/nvEncodeAPI.h"
6114NV_ENCODE_API_FUNCTION_LIST flist;
6115void f(void) { struct { const GUID guid; } s[] = { { NV_ENC_PRESET_HQ_GUID } }; }
6116int main(void) { return 0; }
6117EOF
6118
6119# Funny iconv installations are not unusual, so check it after all flags have been set
6120disabled iconv || check_func_headers iconv.h iconv || check_lib iconv.h iconv -liconv || disable iconv
6121
6122enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel"
6123
6124# add some useful compiler flags if supported
6125check_cflags -Wdeclaration-after-statement
6126check_cflags -Wall
6127check_cflags -Wdisabled-optimization
6128check_cflags -Wpointer-arith
6129check_cflags -Wredundant-decls
6130check_cflags -Wwrite-strings
6131check_cflags -Wtype-limits
6132check_cflags -Wundef
6133check_cflags -Wmissing-prototypes
6134check_cflags -Wno-pointer-to-int-cast
6135check_cflags -Wstrict-prototypes
6136check_cflags -Wempty-body
6137enabled extra_warnings && check_cflags -Winline
6138enabled extra_warnings && check_cflags -Wcast-qual
6139
6140check_disable_warning(){
6141 warning_flag=-W${1#-Wno-}
6142 test_cflags $warning_flag && add_cflags $1
6143}
6144
6145check_disable_warning -Wno-parentheses
6146check_disable_warning -Wno-switch
6147check_disable_warning -Wno-format-zero-length
6148check_disable_warning -Wno-pointer-sign
6149check_disable_warning -Wno-unused-const-variable
6150
6151# add some linker flags
6152check_ldflags -Wl,--warn-common
6153check_ldflags -Wl,-rpath-link=libpostproc:libswresample:libswscale:libavfilter:libavdevice:libavformat:libavcodec:libavutil:libavresample
6154enabled rpath && add_ldexeflags -Wl,-rpath,$libdir
6155enabled rpath && add_ldlibflags -Wl,-rpath,$libdir
6156test_ldflags -Wl,-Bsymbolic && append SHFLAGS -Wl,-Bsymbolic
6157
6158# add some strip flags
6159# -wN '..@*' is more selective than -x, but not available everywhere.
6160check_stripflags -wN \'..@*\' || check_stripflags -x
6161
6162enabled neon_clobber_test &&
6163 check_ldflags -Wl,--wrap,avcodec_open2 \
6164 -Wl,--wrap,avcodec_decode_audio4 \
6165 -Wl,--wrap,avcodec_decode_video2 \
6166 -Wl,--wrap,avcodec_decode_subtitle2 \
6167 -Wl,--wrap,avcodec_encode_audio2 \
6168 -Wl,--wrap,avcodec_encode_video2 \
6169 -Wl,--wrap,avcodec_encode_subtitle \
6170 -Wl,--wrap,avcodec_send_packet \
6171 -Wl,--wrap,avcodec_receive_packet \
6172 -Wl,--wrap,avcodec_send_frame \
6173 -Wl,--wrap,avcodec_receive_frame \
6174 -Wl,--wrap,swr_convert \
6175 -Wl,--wrap,avresample_convert ||
6176 disable neon_clobber_test
6177
6178enabled xmm_clobber_test &&
6179 check_ldflags -Wl,--wrap,avcodec_open2 \
6180 -Wl,--wrap,avcodec_decode_audio4 \
6181 -Wl,--wrap,avcodec_decode_video2 \
6182 -Wl,--wrap,avcodec_decode_subtitle2 \
6183 -Wl,--wrap,avcodec_encode_audio2 \
6184 -Wl,--wrap,avcodec_encode_video2 \
6185 -Wl,--wrap,avcodec_encode_subtitle \
6186 -Wl,--wrap,avcodec_send_packet \
6187 -Wl,--wrap,avcodec_receive_packet \
6188 -Wl,--wrap,avcodec_send_frame \
6189 -Wl,--wrap,avcodec_receive_frame \
6190 -Wl,--wrap,swr_convert \
6191 -Wl,--wrap,avresample_convert \
6192 -Wl,--wrap,sws_scale ||
6193 disable xmm_clobber_test
6194
6195check_ld "cc" <<EOF && enable proper_dce
6196extern const int array[512];
6197static inline int func(void) { return array[0]; }
6198int main(void) { return 0; }
6199EOF
6200
6201if enabled proper_dce; then
6202 echo "X { local: *; };" > $TMPV
6203 if test_ldflags -Wl,${version_script},$TMPV; then
6204 append SHFLAGS '-Wl,${version_script},\$(SUBDIR)lib\$(NAME).ver'
6205 check_cc <<EOF && enable symver_asm_label
6206void ff_foo(void) __asm__ ("av_foo@VERSION");
6207void ff_foo(void) { ${inline_asm+__asm__($quotes);} }
6208EOF
6209 check_cc <<EOF && enable symver_gnu_asm
6210__asm__(".symver ff_foo,av_foo@VERSION");
6211void ff_foo(void) {}
6212EOF
6213 fi
6214fi
6215
6216if [ -z "$optflags" ]; then
6217 if enabled small; then
6218 optflags=$cflags_size
6219 elif enabled optimizations; then
6220 optflags=$cflags_speed
6221 else
6222 optflags=$cflags_noopt
6223 fi
6224fi
6225
6226check_optflags(){
6227 check_cflags "$@"
6228 enabled lto && check_ldflags "$@"
6229}
6230
6231
6232if enabled lto; then
6233 test "$cc_type" != "$ld_type" && die "LTO requires same compiler and linker"
6234 check_cflags -flto
6235 check_ldflags -flto $cpuflags
6236 disable inline_asm_direct_symbol_refs
6237fi
6238
6239check_optflags $optflags
6240check_optflags -fno-math-errno
6241check_optflags -fno-signed-zeros
6242
6243enabled ftrapv && check_cflags -ftrapv
6244
6245check_cc -mno-red-zone <<EOF && noredzone_flags="-mno-red-zone"
6246int x;
6247EOF
6248
6249
6250if enabled icc; then
6251 # Just warnings, no remarks
6252 check_cflags -w1
6253 # -wd: Disable following warnings
6254 # 144, 167, 556: -Wno-pointer-sign
6255 # 188: enumerated type mixed with another type
6256 # 1292: attribute "foo" ignored
6257 # 1419: external declaration in primary source file
6258 # 10006: ignoring unknown option -fno-signed-zeros
6259 # 10148: ignoring unknown option -Wno-parentheses
6260 # 10156: ignoring option '-W'; no argument required
6261 # 13200: No EMMS instruction before call to function
6262 # 13203: No EMMS instruction before return from function
6263 check_cflags -wd144,167,188,556,1292,1419,10006,10148,10156,13200,13203
6264 # 11030: Warning unknown option --as-needed
6265 # 10156: ignoring option '-export'; no argument required
6266 check_ldflags -wd10156,11030
6267 # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
6268 enable ebp_available
6269 # The test above does not test linking
6270 enabled lto && disable symver_asm_label
6271 if enabled x86_32; then
6272 icc_version=$($cc -dumpversion)
6273 test ${icc_version%%.*} -ge 11 &&
6274 check_cflags -falign-stack=maintain-16-byte ||
6275 disable aligned_stack
6276 fi
6277elif enabled ccc; then
6278 # disable some annoying warnings
6279 add_cflags -msg_disable bitnotint
6280 add_cflags -msg_disable mixfuncvoid
6281 add_cflags -msg_disable nonstandcast
6282 add_cflags -msg_disable unsupieee
6283elif enabled gcc; then
6284 check_optflags -fno-tree-vectorize
6285 check_cflags -Werror=format-security
6286 check_cflags -Werror=implicit-function-declaration
6287 check_cflags -Werror=missing-prototypes
6288 check_cflags -Werror=return-type
6289 check_cflags -Werror=vla
6290 check_cflags -Wformat
6291 check_cflags -fdiagnostics-color=auto
6292 enabled extra_warnings || check_disable_warning -Wno-maybe-uninitialized
6293elif enabled llvm_gcc; then
6294 check_cflags -mllvm -stack-alignment=16
6295elif enabled clang; then
6296 check_cflags -mllvm -stack-alignment=16
6297 check_cflags -mstack-alignment=16
6298 check_cflags -Qunused-arguments
6299 check_cflags -Werror=implicit-function-declaration
6300 check_cflags -Werror=missing-prototypes
6301 check_cflags -Werror=return-type
6302elif enabled cparser; then
6303 add_cflags -Wno-missing-variable-declarations
6304 add_cflags -Wno-empty-statement
6305elif enabled armcc; then
6306 add_cflags -W${armcc_opt},--diag_suppress=4343 # hardfp compat
6307 add_cflags -W${armcc_opt},--diag_suppress=3036 # using . as system include dir
6308 # 2523: use of inline assembly is deprecated
6309 add_cflags -W${armcc_opt},--diag_suppress=2523
6310 add_cflags -W${armcc_opt},--diag_suppress=1207
6311 add_cflags -W${armcc_opt},--diag_suppress=1293 # assignment in condition
6312 add_cflags -W${armcc_opt},--diag_suppress=3343 # hardfp compat
6313 add_cflags -W${armcc_opt},--diag_suppress=167 # pointer sign
6314 add_cflags -W${armcc_opt},--diag_suppress=513 # pointer sign
6315elif enabled tms470; then
6316 add_cflags -pds=824 -pds=837
6317 disable inline_asm
6318elif enabled pathscale; then
6319 add_cflags -fstrict-overflow -OPT:wrap_around_unsafe_opt=OFF
6320elif enabled_any msvc icl; then
6321 enabled x86_32 && disable aligned_stack
6322 enabled_all x86_32 debug && add_cflags -Oy-
6323 enabled debug && add_ldflags -debug
6324 enable pragma_deprecated
6325 if enabled icl; then
6326 # -Qansi-alias is basically -fstrict-aliasing, but does not work
6327 # (correctly) on icl 13.x.
6328 check_cpp_condition "windows.h" "__ICL < 1300 || __ICL >= 1400" &&
6329 add_cflags -Qansi-alias
6330 # Some inline asm is not compilable in debug
6331 if enabled debug; then
6332 disable ebp_available
6333 disable ebx_available
6334 fi
6335 fi
6336 # msvcrt10 x64 incorrectly enables log2, only msvcrt12 (MSVC 2013) onwards actually has log2.
6337 check_cpp_condition crtversion.h "_VC_CRT_MAJOR_VERSION >= 12" || disable log2
6338 # The CRT headers contain __declspec(restrict) in a few places, but if redefining
6339 # restrict, this might break. MSVC 2010 and 2012 fail with __declspec(__restrict)
6340 # (as it ends up if the restrict redefine is done before including stdlib.h), while
6341 # MSVC 2013 and newer can handle it fine.
6342 # If this declspec fails, force including stdlib.h before the restrict redefinition
6343 # happens in config.h.
6344 if [ $_restrict != restrict ]; then
6345 check_cc <<EOF || add_cflags -FIstdlib.h
6346__declspec($_restrict) void* foo(int);
6347EOF
6348 fi
6349 # the new SSA optimzer in VS2015 U3 is mis-optimizing some parts of the code
6350 # Issue has been fixed in MSVC v19.00.24218.
6351 check_cpp_condition windows.h "_MSC_FULL_VER >= 190024218" ||
6352 check_cflags -d2SSAOptimizer-
6353 # enable utf-8 source processing on VS2015 U2 and newer
6354 check_cpp_condition windows.h "_MSC_FULL_VER >= 190023918" &&
6355 add_cflags -utf-8
6356fi
6357
6358for pfx in "" host_; do
6359 varname=${pfx%_}cc_type
6360 eval "type=\$$varname"
6361 if [ $type = "msvc" ]; then
6362 check_${pfx}cc <<EOF || add_${pfx}cflags -Dinline=__inline
6363static inline int foo(int a) { return a; }
6364EOF
6365 fi
6366done
6367
6368case $as_type in
6369 clang)
6370 add_asflags -Qunused-arguments
6371 ;;
6372esac
6373
6374case $ld_type in
6375 clang)
6376 check_ldflags -Qunused-arguments
6377 ;;
6378esac
6379
6380case $target_os in
6381 osf1)
6382 enabled ccc && add_ldflags '-Wl,-expect_unresolved,*'
6383 ;;
6384 plan9)
6385 add_cppflags -Dmain=plan9_main
6386 ;;
6387esac
6388
6389enable frame_thread_encoder
6390
6391enabled asm || { arch=c; disable $ARCH_LIST $ARCH_EXT_LIST; }
6392
6393check_deps $CONFIG_LIST \
6394 $CONFIG_EXTRA \
6395 $HAVE_LIST \
6396 $ALL_COMPONENTS \
6397
6398enabled threads && ! enabled pthreads && ! enabled atomics_native && die "non pthread threading without atomics not supported, try adding --enable-pthreads or --cpu=i486 or higher if you are on x86"
6399
6400
6401if test $target_os = "haiku"; then
6402 disable memalign
6403 disable posix_memalign
6404fi
6405
6406enabled_all dxva2 dxva2api_cobj CoTaskMemFree &&
6407 prepend ffmpeg_libs $($ldflags_filter "-lole32") &&
6408 enable dxva2_lib
6409
6410# add_dep lib dep
6411# -> enable ${lib}_deps_${dep}
6412# -> add $dep to ${lib}_deps only once
6413add_dep() {
6414 lib=$1
6415 dep=$2
6416 enabled "${lib}_deps_${dep}" && return 0
6417 enable "${lib}_deps_${dep}"
6418 prepend "${lib}_deps" $dep
6419}
6420
6421# merge deps lib components
6422# merge all ${component}_deps into ${lib}_deps and ${lib}_deps_*
6423merge_deps() {
6424 lib=$1
6425 shift
6426 for comp in $*; do
6427 enabled $comp || continue
6428 eval "dep=\"\$${comp}_deps\""
6429 for d in $dep; do
6430 add_dep $lib $d
6431 done
6432 done
6433}
6434
6435merge_deps libavfilter $FILTER_LIST
6436
6437map 'enabled $v && intrinsics=${v#intrinsics_}' $INTRINSICS_LIST
6438
6439for thread in $THREADS_LIST; do
6440 if enabled $thread; then
6441 test -n "$thread_type" &&
6442 die "ERROR: Only one thread type must be selected." ||
6443 thread_type="$thread"
6444 fi
6445done
6446
6447if disabled stdatomic_h; then
6448 if enabled atomics_gcc; then
6449 add_cppflags '-I\$(SRC_PATH)/compat/atomics/gcc'
6450 elif enabled atomics_win32; then
6451 add_cppflags '-I\$(SRC_PATH)/compat/atomics/win32'
6452 elif enabled atomics_suncc; then
6453 add_cppflags '-I\$(SRC_PATH)/compat/atomics/suncc'
6454 elif enabled pthreads; then
6455 add_compat atomics/pthread/stdatomic.o
6456 add_cppflags '-I\$(SRC_PATH)/compat/atomics/pthread'
6457 else
6458 enabled threads && die "Threading is enabled, but no atomics are available"
6459 add_cppflags '-I\$(SRC_PATH)/compat/atomics/dummy'
6460 fi
6461fi
6462
6463# Check if requested libraries were found.
6464for lib in $AUTODETECT_LIBS; do
6465 requested $lib && ! enabled $lib && die "ERROR: $lib requested but not found";
6466done
6467
6468enabled zlib && add_cppflags -DZLIB_CONST
6469
6470# conditional library dependencies, in linking order
6471enabled afftfilt_filter && prepend avfilter_deps "avcodec"
6472enabled amovie_filter && prepend avfilter_deps "avformat avcodec"
6473enabled aresample_filter && prepend avfilter_deps "swresample"
6474enabled atempo_filter && prepend avfilter_deps "avcodec"
6475enabled cover_rect_filter && prepend avfilter_deps "avformat avcodec"
6476enabled ebur128_filter && enabled swresample && prepend avfilter_deps "swresample"
6477enabled elbg_filter && prepend avfilter_deps "avcodec"
6478enabled fftfilt_filter && prepend avfilter_deps "avcodec"
6479enabled find_rect_filter && prepend avfilter_deps "avformat avcodec"
6480enabled mcdeint_filter && prepend avfilter_deps "avcodec"
6481enabled movie_filter && prepend avfilter_deps "avformat avcodec"
6482enabled pan_filter && prepend avfilter_deps "swresample"
6483enabled pp_filter && prepend avfilter_deps "postproc"
6484enabled removelogo_filter && prepend avfilter_deps "avformat avcodec swscale"
6485enabled resample_filter && prepend avfilter_deps "avresample"
6486enabled sab_filter && prepend avfilter_deps "swscale"
6487enabled scale_filter && prepend avfilter_deps "swscale"
6488enabled scale2ref_filter && prepend avfilter_deps "swscale"
6489enabled sofalizer_filter && prepend avfilter_deps "avcodec"
6490enabled showcqt_filter && prepend avfilter_deps "avformat avcodec swscale"
6491enabled showfreqs_filter && prepend avfilter_deps "avcodec"
6492enabled showspectrum_filter && prepend avfilter_deps "avcodec"
6493enabled smartblur_filter && prepend avfilter_deps "swscale"
6494enabled spectrumsynth_filter && prepend avfilter_deps "avcodec"
6495enabled subtitles_filter && prepend avfilter_deps "avformat avcodec"
6496enabled uspp_filter && prepend avfilter_deps "avcodec"
6497
6498enabled lavfi_indev && prepend avdevice_deps "avfilter"
6499
6500enabled opus_decoder && prepend avcodec_deps "swresample"
6501
6502expand_deps(){
6503 lib_deps=${1}_deps
6504 eval "deps=\$$lib_deps"
6505 append $lib_deps $(map 'eval echo \$${v}_deps' $deps)
6506 unique $lib_deps
6507}
6508
6509#we have to remove gpl from the deps here as some code assumes all lib deps are libs
6510postproc_deps="$(filter_out 'gpl' $postproc_deps)"
6511
6512map 'expand_deps $v' $LIBRARY_LIST
6513
6514license="LGPL version 2.1 or later"
6515if enabled nonfree; then
6516 license="nonfree and unredistributable"
6517elif enabled gplv3; then
6518 license="GPL version 3 or later"
6519elif enabled lgplv3; then
6520 license="LGPL version 3 or later"
6521elif enabled gpl; then
6522 license="GPL version 2 or later"
6523fi
6524
6525if test "$quiet" != "yes"; then
6526
6527echo "install prefix $prefix"
6528echo "source path $source_path"
6529echo "C compiler $cc"
6530echo "C library $libc_type"
6531if test "$host_cc" != "$cc"; then
6532 echo "host C compiler $host_cc"
6533 echo "host C library $host_libc_type"
6534fi
6535echo "ARCH $arch ($cpu)"
6536if test "$build_suffix" != ""; then
6537 echo "build suffix $build_suffix"
6538fi
6539if test "$progs_suffix" != ""; then
6540 echo "progs suffix $progs_suffix"
6541fi
6542if test "$extra_version" != ""; then
6543 echo "version string suffix $extra_version"
6544fi
6545echo "big-endian ${bigendian-no}"
6546echo "runtime cpu detection ${runtime_cpudetect-no}"
6547if enabled x86; then
6548 echo "${yasmexe} ${yasm-no}"
6549 echo "MMX enabled ${mmx-no}"
6550 echo "MMXEXT enabled ${mmxext-no}"
6551 echo "3DNow! enabled ${amd3dnow-no}"
6552 echo "3DNow! extended enabled ${amd3dnowext-no}"
6553 echo "SSE enabled ${sse-no}"
6554 echo "SSSE3 enabled ${ssse3-no}"
6555 echo "AESNI enabled ${aesni-no}"
6556 echo "AVX enabled ${avx-no}"
6557 echo "XOP enabled ${xop-no}"
6558 echo "FMA3 enabled ${fma3-no}"
6559 echo "FMA4 enabled ${fma4-no}"
6560 echo "i686 features enabled ${i686-no}"
6561 echo "CMOV is fast ${fast_cmov-no}"
6562 echo "EBX available ${ebx_available-no}"
6563 echo "EBP available ${ebp_available-no}"
6564fi
6565if enabled aarch64; then
6566 echo "NEON enabled ${neon-no}"
6567 echo "VFP enabled ${vfp-no}"
6568fi
6569if enabled arm; then
6570 echo "ARMv5TE enabled ${armv5te-no}"
6571 echo "ARMv6 enabled ${armv6-no}"
6572 echo "ARMv6T2 enabled ${armv6t2-no}"
6573 echo "VFP enabled ${vfp-no}"
6574 echo "NEON enabled ${neon-no}"
6575 echo "THUMB enabled ${thumb-no}"
6576fi
6577if enabled mips; then
6578 echo "MIPS FPU enabled ${mipsfpu-no}"
6579 echo "MIPS DSP R1 enabled ${mipsdsp-no}"
6580 echo "MIPS DSP R2 enabled ${mipsdspr2-no}"
6581 echo "MIPS MSA enabled ${msa-no}"
6582 echo "LOONGSON MMI enabled ${mmi-no}"
6583fi
6584if enabled ppc; then
6585 echo "AltiVec enabled ${altivec-no}"
6586 echo "VSX enabled ${vsx-no}"
6587 echo "POWER8 enabled ${power8-no}"
6588 echo "PPC 4xx optimizations ${ppc4xx-no}"
6589 echo "dcbzl available ${dcbzl-no}"
6590fi
6591echo "debug symbols ${debug-no}"
6592echo "strip symbols ${stripping-no}"
6593echo "optimize for size ${small-no}"
6594echo "optimizations ${optimizations-no}"
6595echo "static ${static-no}"
6596echo "shared ${shared-no}"
6597echo "postprocessing support ${postproc-no}"
6598echo "network support ${network-no}"
6599echo "threading support ${thread_type-no}"
6600echo "safe bitstream reader ${safe_bitstream_reader-no}"
6601echo "texi2html enabled ${texi2html-no}"
6602echo "perl enabled ${perl-no}"
6603echo "pod2man enabled ${pod2man-no}"
6604echo "makeinfo enabled ${makeinfo-no}"
6605echo "makeinfo supports HTML ${makeinfo_html-no}"
6606test -n "$random_seed" &&
6607 echo "random seed ${random_seed}"
6608echo
6609
6610echo "External libraries:"
6611print_enabled '' $EXTERNAL_LIBRARY_LIST | print_in_columns
6612echo
6613
6614echo "External libraries providing hardware acceleration:"
6615print_enabled '' $HWACCEL_LIBRARY_LIST | print_in_columns
6616echo
6617
6618echo "Libraries:"
6619print_enabled '' $LIBRARY_LIST | print_in_columns
6620echo
6621
6622echo "Programs:"
6623print_enabled '' $PROGRAM_LIST | print_in_columns
6624echo
6625
6626for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
6627 echo "Enabled ${type}s:"
6628 eval list=\$$(toupper $type)_LIST
6629 print_enabled '_*' $list | print_in_columns
6630 echo
6631done
6632
6633echo "License: $license"
6634
6635echo "Creating configuration files ..."
6636
6637fi # test "$quiet" != "yes"
6638
6639test -e Makefile || echo "include $source_path/Makefile" > Makefile
6640
6641enabled stripping || strip="echo skipping strip"
6642
6643config_files="$TMPH config.mak doc/config.texi"
6644
6645cat > config.mak <<EOF
6646# Automatically generated by configure - do not modify!
6647ifndef FFMPEG_CONFIG_MAK
6648FFMPEG_CONFIG_MAK=1
6649FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION
6650prefix=$prefix
6651LIBDIR=\$(DESTDIR)$libdir
6652SHLIBDIR=\$(DESTDIR)$shlibdir
6653INCDIR=\$(DESTDIR)$incdir
6654BINDIR=\$(DESTDIR)$bindir
6655DATADIR=\$(DESTDIR)$datadir
6656DOCDIR=\$(DESTDIR)$docdir
6657MANDIR=\$(DESTDIR)$mandir
6658PKGCONFIGDIR=\$(DESTDIR)$pkgconfigdir
6659INSTALL_NAME_DIR=$install_name_dir
6660SRC_PATH=$source_path
6661SRC_LINK=$source_link
6662ifndef MAIN_MAKEFILE
6663SRC_PATH:=\$(SRC_PATH:.%=..%)
6664endif
6665CC_IDENT=$cc_ident
6666ARCH=$arch
6667INTRINSICS=$intrinsics
6668CC=$cc
6669CXX=$cxx
6670AS=$as
6671OBJCC=$objcc
6672LD=$ld
6673DEPCC=$dep_cc
6674DEPCCFLAGS=$DEPCCFLAGS \$(CPPFLAGS)
6675DEPAS=$as
6676DEPASFLAGS=$DEPASFLAGS \$(CPPFLAGS)
6677YASM=$yasmexe
6678DEPYASM=$yasmexe
6679AR=$ar
6680ARFLAGS=$arflags
6681AR_O=$ar_o
6682RANLIB=$ranlib
6683STRIP=$strip
6684CP=cp -p
6685LN_S=$ln_s
6686CPPFLAGS=$CPPFLAGS
6687CFLAGS=$CFLAGS
6688CXXFLAGS=$CXXFLAGS
6689OBJCFLAGS=$OBJCFLAGS
6690ASFLAGS=$ASFLAGS
6691AS_C=$AS_C
6692AS_O=$AS_O
6693OBJCC_C=$OBJCC_C
6694OBJCC_E=$OBJCC_E
6695OBJCC_O=$OBJCC_O
6696CC_C=$CC_C
6697CC_E=$CC_E
6698CC_O=$CC_O
6699CXX_C=$CXX_C
6700CXX_O=$CXX_O
6701LD_O=$LD_O
6702LD_LIB=$LD_LIB
6703LD_PATH=$LD_PATH
6704DLLTOOL=$dlltool
6705WINDRES=$windres
6706DEPWINDRES=$dep_cc
6707DOXYGEN=$doxygen
6708LDFLAGS=$LDFLAGS
6709LDEXEFLAGS=$LDEXEFLAGS
6710LDLIBFLAGS=$LDLIBFLAGS
6711SHFLAGS=$(echo $($ldflags_filter $SHFLAGS))
6712ASMSTRIPFLAGS=$ASMSTRIPFLAGS
6713YASMFLAGS=$YASMFLAGS
6714BUILDSUF=$build_suffix
6715PROGSSUF=$progs_suffix
6716FULLNAME=$FULLNAME
6717LIBPREF=$LIBPREF
6718LIBSUF=$LIBSUF
6719LIBNAME=$LIBNAME
6720SLIBPREF=$SLIBPREF
6721SLIBSUF=$SLIBSUF
6722EXESUF=$EXESUF
6723EXTRA_VERSION=$extra_version
6724CCDEP=$CCDEP
6725CXXDEP=$CXXDEP
6726CCDEP_FLAGS=$CCDEP_FLAGS
6727ASDEP=$ASDEP
6728ASDEP_FLAGS=$ASDEP_FLAGS
6729CC_DEPFLAGS=$CC_DEPFLAGS
6730AS_DEPFLAGS=$AS_DEPFLAGS
6731HOSTCC=$host_cc
6732HOSTLD=$host_ld
6733HOSTCFLAGS=$host_cflags
6734HOSTCPPFLAGS=$host_cppflags
6735HOSTEXESUF=$HOSTEXESUF
6736HOSTLDFLAGS=$host_ldflags
6737HOSTLIBS=$host_libs
6738DEPHOSTCC=$host_cc
6739DEPHOSTCCFLAGS=$DEPHOSTCCFLAGS \$(HOSTCCFLAGS)
6740HOSTCCDEP=$HOSTCCDEP
6741HOSTCCDEP_FLAGS=$HOSTCCDEP_FLAGS
6742HOSTCC_DEPFLAGS=$HOSTCC_DEPFLAGS
6743HOSTCC_C=$HOSTCC_C
6744HOSTCC_O=$HOSTCC_O
6745HOSTLD_O=$HOSTLD_O
6746TARGET_EXEC=$target_exec $target_exec_args
6747TARGET_PATH=$target_path
6748TARGET_SAMPLES=${target_samples:-\$(SAMPLES)}
6749CFLAGS-ffplay=${sdl2_cflags}
6750ZLIB=$($ldflags_filter -lz)
6751LIB_INSTALL_EXTRA_CMD=$LIB_INSTALL_EXTRA_CMD
6752EXTRALIBS=$extralibs
6753COMPAT_OBJS=$compat_objs
6754EXEOBJS=$exeobjs
6755INSTALL=$install
6756LIBTARGET=${LIBTARGET}
6757SLIBNAME=${SLIBNAME}
6758SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}
6759SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}
6760SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}
6761SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}
6762SLIB_INSTALL_NAME=${SLIB_INSTALL_NAME}
6763SLIB_INSTALL_LINKS=${SLIB_INSTALL_LINKS}
6764SLIB_INSTALL_EXTRA_LIB=${SLIB_INSTALL_EXTRA_LIB}
6765SLIB_INSTALL_EXTRA_SHLIB=${SLIB_INSTALL_EXTRA_SHLIB}
6766VERSION_SCRIPT_POSTPROCESS_CMD=${VERSION_SCRIPT_POSTPROCESS_CMD}
6767SAMPLES:=${samples:-\$(FATE_SAMPLES)}
6768NOREDZONE_FLAGS=$noredzone_flags
6769EOF
6770
6771get_version(){
6772 lcname=lib${1}
6773 name=$(toupper $lcname)
6774 file=$source_path/$lcname/version.h
6775 eval $(awk "/#define ${name}_VERSION_M/ { print \$2 \"=\" \$3 }" "$file")
6776 enabled raise_major && eval ${name}_VERSION_MAJOR=$((${name}_VERSION_MAJOR+100))
6777 eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
6778 eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
6779 eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
6780 eval echo "${lcname}_VERSION_MINOR=\$${name}_VERSION_MINOR" >> config.mak
6781}
6782
6783map 'get_version $v' $LIBRARY_LIST
6784
6785map 'eval echo "${v}_FFLIBS=\$${v}_deps" >> config.mak' $LIBRARY_LIST
6786
6787print_program_libs(){
6788 eval "program_libs=\$${1}_libs"
6789 eval echo "LIBS-${1}=${program_libs}" >> config.mak
6790}
6791
6792map 'print_program_libs $v' $PROGRAM_LIST
6793
6794cat > $TMPH <<EOF
6795/* Automatically generated by configure - do not modify! */
6796#ifndef FFMPEG_CONFIG_H
6797#define FFMPEG_CONFIG_H
6798#define FFMPEG_CONFIGURATION "$(c_escape $FFMPEG_CONFIGURATION)"
6799#define FFMPEG_LICENSE "$(c_escape $license)"
6800#define CONFIG_THIS_YEAR 2017
6801#define FFMPEG_DATADIR "$(eval c_escape $datadir)"
6802#define AVCONV_DATADIR "$(eval c_escape $datadir)"
6803#define CC_IDENT "$(c_escape ${cc_ident:-Unknown compiler})"
6804#define av_restrict $_restrict
6805#define EXTERN_PREFIX "${extern_prefix}"
6806#define EXTERN_ASM ${extern_prefix}
6807#define BUILDSUF "$build_suffix"
6808#define SLIBSUF "$SLIBSUF"
6809#define HAVE_MMX2 HAVE_MMXEXT
6810#define SWS_MAX_FILTER_SIZE $sws_max_filter_size
6811EOF
6812
6813test -n "$assert_level" &&
6814 echo "#define ASSERT_LEVEL $assert_level" >>$TMPH
6815
6816test -n "$malloc_prefix" &&
6817 echo "#define MALLOC_PREFIX $malloc_prefix" >>$TMPH
6818
6819if enabled yasm; then
6820 append config_files $TMPASM
6821 printf '' >$TMPASM
6822fi
6823
6824enabled getenv || echo "#define getenv(x) NULL" >> $TMPH
6825
6826
6827mkdir -p doc
6828mkdir -p tests
6829mkdir -p tests/api
6830echo "@c auto-generated by configure - do not modify! " > doc/config.texi
6831
6832print_config ARCH_ "$config_files" $ARCH_LIST
6833print_config HAVE_ "$config_files" $HAVE_LIST
6834print_config CONFIG_ "$config_files" $CONFIG_LIST \
6835 $CONFIG_EXTRA \
6836 $ALL_COMPONENTS \
6837
6838echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
6839echo "endif # FFMPEG_CONFIG_MAK" >> config.mak
6840
6841# Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
6842cp_if_changed $TMPH config.h
6843touch .config
6844
6845enabled yasm && cp_if_changed $TMPASM config.asm
6846
6847cat > $TMPH <<EOF
6848/* Generated by ffconf */
6849#ifndef AVUTIL_AVCONFIG_H
6850#define AVUTIL_AVCONFIG_H
6851EOF
6852
6853print_config AV_HAVE_ $TMPH $HAVE_LIST_PUB
6854
6855echo "#endif /* AVUTIL_AVCONFIG_H */" >> $TMPH
6856
6857cp_if_changed $TMPH libavutil/avconfig.h
6858
6859# generate the lists of enabled components
6860print_enabled_components(){
6861 file=$1
6862 struct_name=$2
6863 name=$3
6864 shift 3
6865 echo "static const $struct_name *$name[] = {" > $TMPH
6866 for c in $*; do
6867 enabled $c && printf " &ff_%s,\n" $c >> $TMPH
6868 done
6869 echo " NULL };" >> $TMPH
6870 cp_if_changed $TMPH $file
6871}
6872
6873print_enabled_components libavcodec/bsf_list.c AVBitStreamFilter bitstream_filters $BSF_LIST
6874print_enabled_components libavformat/protocol_list.c URLProtocol url_protocols $PROTOCOL_LIST
6875
6876if test -n "$WARNINGS"; then
6877 printf "\n%s%s$WARNINGS%s" "$warn_color" "$bold_color" "$reset_color"
6878 enabled fatal_warnings && exit 1
6879fi
6880
6881# build pkg-config files
6882
6883lib_version(){
6884 eval printf "\"lib${1}${build_suffix} >= \$LIB$(toupper ${1})_VERSION, \""
6885}
6886
6887pkgconfig_generate(){
6888 name=$1
6889 shortname=${name#lib}${build_suffix}
6890 comment=$2
6891 version=$3
6892 libs=$4
6893 requires=$(map 'lib_version $v' $(eval echo \$${name#lib}_deps))
6894 requires=${requires%, }
6895 enabled ${name#lib} || return 0
6896 mkdir -p $name
6897 cat <<EOF > $name/$name${build_suffix}.pc
6898prefix=$prefix
6899exec_prefix=\${prefix}
6900libdir=$libdir
6901includedir=$incdir
6902
6903Name: $name
6904Description: $comment
6905Version: $version
6906Requires: $(enabled shared || echo $requires)
6907Requires.private: $(enabled shared && echo $requires)
6908Conflicts:
6909Libs: -L\${libdir} $(enabled rpath && echo "-Wl,-rpath,\${libdir}") -l${shortname} $(enabled shared || echo $libs)
6910Libs.private: $(enabled shared && echo $libs)
6911Cflags: -I\${includedir}
6912EOF
6913
6914mkdir -p doc/examples/pc-uninstalled
6915includedir=${source_path}
6916[ "$includedir" = . ] && includedir="\${pcfiledir}/../../.."
6917 cat <<EOF > doc/examples/pc-uninstalled/${name}-uninstalled.pc
6918prefix=
6919exec_prefix=
6920libdir=\${pcfiledir}/../../../$name
6921includedir=${includedir}
6922
6923Name: $name
6924Description: $comment
6925Version: $version
6926Requires: $requires
6927Conflicts:
6928Libs: -L\${libdir} -Wl,-rpath,\${libdir} -l${shortname} $(enabled shared || echo $libs)
6929Cflags: -I\${includedir}
6930EOF
6931}
6932
6933pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION" "$LIBRT $LIBM"
6934pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs"
6935pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs"
6936pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs"
6937pkgconfig_generate libavfilter "FFmpeg audio/video filtering library" "$LIBAVFILTER_VERSION" "$extralibs"
6938pkgconfig_generate libpostproc "FFmpeg postprocessing library" "$LIBPOSTPROC_VERSION" ""
6939pkgconfig_generate libavresample "Libav audio resampling library" "$LIBAVRESAMPLE_VERSION" "$LIBM"
6940pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "$LIBM"
6941pkgconfig_generate libswresample "FFmpeg audio resampling library" "$LIBSWRESAMPLE_VERSION" "$LIBM $LIBSOXR"
6942