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