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