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