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