summaryrefslogtreecommitdiff
path: root/configure (plain)
blob: af322f5a5761714760ea281555dc3befd7ac2b15
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 hardened)
2637 add_cflags -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fno-strict-overflow -fstack-protector-all
2638 add_ldflags -Wl,-z,relro -Wl,-z,now
2639 ;;
2640 ?*)
2641 die "Unknown toolchain $toolchain"
2642 ;;
2643esac
2644
2645set_default arch cc cxx pkg_config strip sysinclude target_exec target_os yasmexe
2646enabled cross_compile || host_cc_default=$cc
2647set_default host_cc
2648
2649if ! $pkg_config --version >/dev/null 2>&1; then
2650 warn "$pkg_config not found, library detection may fail."
2651 pkg_config=false
2652fi
2653
2654exesuf() {
2655 case $1 in
2656 mingw32*|win32|win64|cygwin*|*-dos|freedos|opendos|os/2*|symbian) echo .exe ;;
2657 esac
2658}
2659
2660EXESUF=$(exesuf $target_os)
2661HOSTEXESUF=$(exesuf $host_os)
2662
2663# set temporary file name
2664: ${TMPDIR:=$TEMPDIR}
2665: ${TMPDIR:=$TMP}
2666: ${TMPDIR:=/tmp}
2667
2668if [ -n "$tempprefix" ] ; then
2669 mktemp(){
2670 echo $tempprefix.${HOSTNAME}.${UID}
2671 }
2672elif ! check_cmd mktemp -u XXXXXX; then
2673 # simple replacement for missing mktemp
2674 # NOT SAFE FOR GENERAL USE
2675 mktemp(){
2676 echo "${2%%XXX*}.${HOSTNAME}.${UID}.$$"
2677 }
2678fi
2679
2680tmpfile(){
2681 tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
2682 (set -C; exec > $tmp) 2>/dev/null ||
2683 die "Unable to create temporary file in $TMPDIR."
2684 append TMPFILES $tmp
2685 eval $1=$tmp
2686}
2687
2688trap 'rm -f -- $TMPFILES' EXIT
2689
2690tmpfile TMPASM .asm
2691tmpfile TMPC .c
2692tmpfile TMPCPP .cpp
2693tmpfile TMPE $EXESUF
2694tmpfile TMPH .h
2695tmpfile TMPO .o
2696tmpfile TMPS .S
2697tmpfile TMPSH .sh
2698tmpfile TMPV .ver
2699
2700unset -f mktemp
2701
2702chmod +x $TMPE
2703
2704# make sure we can execute files in $TMPDIR
2705cat > $TMPSH 2>> $logfile <<EOF
2706#! /bin/sh
2707EOF
2708chmod +x $TMPSH >> $logfile 2>&1
2709if ! $TMPSH >> $logfile 2>&1; then
2710 cat <<EOF
2711Unable to create and execute files in $TMPDIR. Set the TMPDIR environment
2712variable to another directory and make sure that it is not mounted noexec.
2713EOF
2714 die "Sanity test failed."
2715fi
2716
2717ccc_flags(){
2718 for flag; do
2719 case $flag in
2720 -std=c99) echo -c99 ;;
2721 -mcpu=*) echo -arch ${flag#*=} ;;
2722 -mieee) echo -ieee ;;
2723 -O*|-fast) echo $flag ;;
2724 -fno-math-errno) echo -assume nomath_errno ;;
2725 -g) echo -g3 ;;
2726 -Wall) echo -msg_enable level2 ;;
2727 -Wno-pointer-sign) echo -msg_disable ptrmismatch1 ;;
2728 -Wl,*) echo $flag ;;
2729 -f*|-W*) ;;
2730 *) echo $flag ;;
2731 esac
2732 done
2733}
2734
2735cparser_flags(){
2736 for flag; do
2737 case $flag in
2738 -Wno-switch) echo -Wno-switch-enum ;;
2739 -Wno-format-zero-length) ;;
2740 -Wdisabled-optimization) ;;
2741 -Wno-pointer-sign) echo -Wno-other ;;
2742 *) echo $flag ;;
2743 esac
2744 done
2745}
2746
2747msvc_common_flags(){
2748 for flag; do
2749 case $flag in
2750 # In addition to specifying certain flags under the compiler
2751 # specific filters, they must be specified here as well or else the
2752 # generic catch all at the bottom will print the original flag.
2753 -Wall) ;;
2754 -std=c99) ;;
2755 # Common flags
2756 -fomit-frame-pointer) ;;
2757 -g) echo -Z7 ;;
2758 -fno-math-errno) ;;
2759 -fno-common) ;;
2760 -fno-signed-zeros) ;;
2761 -fPIC) ;;
2762 -mthumb) ;;
2763 -march=*) ;;
2764 -lz) echo zlib.lib ;;
2765 -lavifil32) echo vfw32.lib ;;
2766 -lavicap32) echo vfw32.lib user32.lib ;;
2767 -l*) echo ${flag#-l}.lib ;;
2768 *) echo $flag ;;
2769 esac
2770 done
2771}
2772
2773msvc_flags(){
2774 msvc_common_flags "$@"
2775 for flag; do
2776 case $flag in
2777 -Wall) echo -W4 -wd4244 -wd4127 -wd4018 -wd4389 \
2778 -wd4146 -wd4057 -wd4204 -wd4706 -wd4305 \
2779 -wd4152 -wd4324 -we4013 -wd4100 -wd4214 \
2780 -wd4554 \
2781 -wd4273 ;;
2782 esac
2783 done
2784}
2785
2786icl_flags(){
2787 msvc_common_flags "$@"
2788 for flag; do
2789 case $flag in
2790 # Despite what Intel's documentation says -Wall, which is supported
2791 # on Windows, does enable remarks so disable them here.
2792 -Wall) echo $flag -Qdiag-disable:remark ;;
2793 -std=c99) echo -Qstd=c99 ;;
2794 esac
2795 done
2796}
2797
2798pgi_flags(){
2799 for flag; do
2800 case $flag in
2801 -flto) echo -Mipa=fast,libopt,libinline,vestigial ;;
2802 -fomit-frame-pointer) echo -Mnoframe ;;
2803 -g) echo -gopt ;;
2804 *) echo $flag ;;
2805 esac
2806 done
2807}
2808
2809suncc_flags(){
2810 for flag; do
2811 case $flag in
2812 -march=*|-mcpu=*)
2813 case "${flag#*=}" in
2814 native) echo -xtarget=native ;;
2815 v9|niagara) echo -xarch=sparc ;;
2816 ultrasparc) echo -xarch=sparcvis ;;
2817 ultrasparc3|niagara2) echo -xarch=sparcvis2 ;;
2818 i586|pentium) echo -xchip=pentium ;;
2819 i686|pentiumpro|pentium2) echo -xtarget=pentium_pro ;;
2820 pentium3*|c3-2) echo -xtarget=pentium3 ;;
2821 pentium-m) echo -xarch=sse2 -xchip=pentium3 ;;
2822 pentium4*) echo -xtarget=pentium4 ;;
2823 prescott|nocona) echo -xarch=sse3 -xchip=pentium4 ;;
2824 *-sse3) echo -xarch=sse3 ;;
2825 core2) echo -xarch=ssse3 -xchip=core2 ;;
2826 corei7) echo -xarch=sse4_2 -xchip=nehalem ;;
2827 corei7-avx) echo -xarch=avx -xchip=sandybridge ;;
2828 amdfam10|barcelona) echo -xtarget=barcelona ;;
2829 bdver*) echo -xarch=avx ;;
2830 athlon-4|athlon-[mx]p) echo -xarch=ssea ;;
2831 k8|opteron|athlon64|athlon-fx)
2832 echo -xarch=sse2a ;;
2833 athlon*) echo -xarch=pentium_proa ;;
2834 esac
2835 ;;
2836 -std=c99) echo -xc99 ;;
2837 -fomit-frame-pointer) echo -xregs=frameptr ;;
2838 -fPIC) echo -KPIC -xcode=pic32 ;;
2839 -W*,*) echo $flag ;;
2840 -f*-*|-W*|-mimpure-text) ;;
2841 -shared) echo -G ;;
2842 *) echo $flag ;;
2843 esac
2844 done
2845}
2846
2847tms470_flags(){
2848 for flag; do
2849 case $flag in
2850 -march=*|-mcpu=*)
2851 case "${flag#*=}" in
2852 armv7-a|cortex-a*) echo -mv=7a8 ;;
2853 armv7-r|cortex-r*) echo -mv=7r4 ;;
2854 armv7-m|cortex-m*) echo -mv=7m3 ;;
2855 armv6*|arm11*) echo -mv=6 ;;
2856 armv5*e|arm[79]*e*|arm9[24]6*|arm96*|arm102[26])
2857 echo -mv=5e ;;
2858 armv4*|arm7*|arm9[24]*) echo -mv=4 ;;
2859 esac
2860 ;;
2861 -mfpu=neon) echo --float_support=vfpv3 --neon ;;
2862 -mfpu=vfp) echo --float_support=vfpv2 ;;
2863 -mfpu=vfpv3) echo --float_support=vfpv3 ;;
2864 -mfpu=vfpv3-d16) echo --float_support=vfpv3d16 ;;
2865 -msoft-float) echo --float_support=vfplib ;;
2866 -O[0-3]|-mf=*) echo $flag ;;
2867 -g) echo -g -mn ;;
2868 -pds=*) echo $flag ;;
2869 -D*|-I*) echo $flag ;;
2870 --gcc|--abi=*) echo $flag ;;
2871 -me) echo $flag ;;
2872 esac
2873 done
2874}
2875
2876probe_cc(){
2877 pfx=$1
2878 _cc=$2
2879
2880 unset _type _ident _cc_c _cc_e _cc_o _flags _cflags
2881 unset _ld_o _ldflags _ld_lib _ld_path
2882 unset _depflags _DEPCMD _DEPFLAGS
2883 _flags_filter=echo
2884
2885 if $_cc -v 2>&1 | grep -q '^gcc.*LLVM'; then
2886 _type=llvm_gcc
2887 gcc_extra_ver=$(expr "$($_cc --version | head -n1)" : '.*\((.*)\)')
2888 _ident="llvm-gcc $($_cc -dumpversion) $gcc_extra_ver"
2889 _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2890 _cflags_speed='-O3'
2891 _cflags_size='-Os'
2892 elif $_cc -v 2>&1 | grep -qi ^gcc; then
2893 _type=gcc
2894 gcc_version=$($_cc --version | head -n1)
2895 gcc_basever=$($_cc -dumpversion)
2896 gcc_pkg_ver=$(expr "$gcc_version" : '[^ ]* \(([^)]*)\)')
2897 gcc_ext_ver=$(expr "$gcc_version" : ".*$gcc_pkg_ver $gcc_basever \\(.*\\)")
2898 _ident=$(cleanws "gcc $gcc_basever $gcc_pkg_ver $gcc_ext_ver")
2899 if ! $_cc -dumpversion | grep -q '^2\.'; then
2900 _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2901 fi
2902 _cflags_speed='-O3'
2903 _cflags_size='-Os'
2904 elif $_cc --version 2>/dev/null | grep -q ^icc; then
2905 _type=icc
2906 _ident=$($_cc --version | head -n1)
2907 _depflags='-MMD'
2908 _cflags_speed='-O3'
2909 _cflags_size='-Os'
2910 _cflags_noopt='-O1'
2911 elif $_cc -v 2>&1 | grep -q xlc; then
2912 _type=xlc
2913 _ident=$($_cc -qversion 2>/dev/null | head -n1)
2914 _cflags_speed='-O5'
2915 _cflags_size='-O5 -qcompact'
2916 elif $_cc -V 2>/dev/null | grep -q Compaq; then
2917 _type=ccc
2918 _ident=$($_cc -V | head -n1 | cut -d' ' -f1-3)
2919 _DEPFLAGS='-M'
2920 _cflags_speed='-fast'
2921 _cflags_size='-O1'
2922 _flags_filter=ccc_flags
2923 elif $_cc --vsn 2>/dev/null | grep -q "ARM C/C++ Compiler"; then
2924 test -d "$sysroot" || die "No valid sysroot specified."
2925 _type=armcc
2926 _ident=$($_cc --vsn | head -n1)
2927 armcc_conf="$PWD/armcc.conf"
2928 $_cc --arm_linux_configure \
2929 --arm_linux_config_file="$armcc_conf" \
2930 --configure_sysroot="$sysroot" \
2931 --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
2932 die "Error creating armcc configuration file."
2933 $_cc --vsn | grep -q RVCT && armcc_opt=rvct || armcc_opt=armcc
2934 _flags="--arm_linux_config_file=$armcc_conf --translate_gcc"
2935 as_default="${cross_prefix}gcc"
2936 _depflags='-MMD'
2937 _cflags_speed='-O3'
2938 _cflags_size='-Os'
2939 elif $_cc -version 2>/dev/null | grep -Eq 'TMS470|TI ARM'; then
2940 _type=tms470
2941 _ident=$($_cc -version | head -n1 | tr -s ' ')
2942 _flags='--gcc --abi=eabi -me'
2943 _cc_e='-ppl -fe=$@'
2944 _cc_o='-fe=$@'
2945 _depflags='-ppa -ppd=$(@:.o=.d)'
2946 _cflags_speed='-O3 -mf=5'
2947 _cflags_size='-O3 -mf=2'
2948 _flags_filter=tms470_flags
2949 elif $_cc -v 2>&1 | grep -q clang; then
2950 _type=clang
2951 _ident=$($_cc --version | head -n1)
2952 _depflags='-MMD'
2953 _cflags_speed='-O3'
2954 _cflags_size='-Os'
2955 elif $_cc -V 2>&1 | grep -q Sun; then
2956 _type=suncc
2957 _ident=$($_cc -V 2>&1 | head -n1 | cut -d' ' -f 2-)
2958 _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "1s,^.*: ,$@: ," -e "\$$!s,\$$, \\\," -e "1!s,^.*: , ," > $(@:.o=.d)'
2959 _DEPFLAGS='-xM1 -xc99'
2960 _ldflags='-std=c99'
2961 _cflags_speed='-O5'
2962 _cflags_size='-O5 -xspace'
2963 _flags_filter=suncc_flags
2964 elif $_cc -v 2>&1 | grep -q 'PathScale\|Path64'; then
2965 _type=pathscale
2966 _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
2967 _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2968 _cflags_speed='-O2'
2969 _cflags_size='-Os'
2970 _flags_filter='filter_out -Wdisabled-optimization'
2971 elif $_cc -v 2>&1 | grep -q Open64; then
2972 _type=open64
2973 _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
2974 _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2975 _cflags_speed='-O2'
2976 _cflags_size='-Os'
2977 _flags_filter='filter_out -Wdisabled-optimization|-Wtype-limits|-fno-signed-zeros'
2978 elif $_cc -V 2>&1 | grep -q Portland; then
2979 _type=pgi
2980 _ident="PGI $($_cc -V 2>&1 | awk '/^pgcc/ { print $2; exit }')"
2981 opt_common='-alias=ansi -Mdse -Mlre -Mpre'
2982 _cflags_speed="-O3 -Mautoinline -Munroll=c:4 $opt_common"
2983 _cflags_size="-O2 -Munroll=c:1 $opt_common"
2984 _cflags_noopt="-O"
2985 _flags_filter=pgi_flags
2986 elif $_cc 2>&1 | grep -q Microsoft; then
2987 _type=msvc
2988 _ident=$($cc 2>&1 | head -n1)
2989 _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< 2>&1 | awk '\''/including/ { sub(/^.*file: */, ""); gsub(/\\/, "/"); if (!match($$0, / /)) print "$@:", $$0 }'\'' > $(@:.o=.d)'
2990 _DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -showIncludes -Zs'
2991 _cflags_speed="-O2"
2992 _cflags_size="-O1"
2993 # Nonstandard output options, to avoid msys path conversion issues.
2994 # Relies on wrapper to remap it.
2995 if $_cc 2>&1 | grep -q Linker; then
2996 _ld_o='-out $@'
2997 else
2998 _ld_o='-Fe$@'
2999 fi
3000 _cc_o='-Fo $@'
3001 _cc_e='-P -Fi $@'
3002 _flags_filter=msvc_flags
3003 _ld_lib='lib%.a'
3004 _ld_path='-libpath:'
3005 _flags='-nologo'
3006 _cflags='-D_USE_MATH_DEFINES -D_CRT_SECURE_NO_WARNINGS -Dinline=__inline -FIstdlib.h -Dstrtoll=_strtoi64'
3007 if [ $pfx = hostcc ]; then
3008 append _cflags -Dsnprintf=_snprintf
3009 fi
3010 disable stripping
3011 elif $_cc 2>&1 | grep -q Intel; then
3012 _type=icl
3013 _ident=$($cc 2>&1 | head -n1)
3014 _depflags='-QMMD -QMF$(@:.o=.d) -QMT$@'
3015 # Not only is O3 broken on 13.x+ but it is slower on all previous
3016 # versions (tested) as well.
3017 _cflags_speed="-O2"
3018 _cflags_size="-O1 -Oi" # -O1 without -Oi miscompiles stuff
3019 # Nonstandard output options, to avoid msys path conversion issues.
3020 # Relies on wrapper to remap it.
3021 if $_cc 2>&1 | grep -q Linker; then
3022 _ld_o='-out $@'
3023 else
3024 _ld_o='-Fe$@'
3025 fi
3026 _cc_o='-Fo $@'
3027 _cc_e='-P'
3028 _flags_filter=icl_flags
3029 _ld_lib='lib%.a'
3030 _ld_path='-libpath:'
3031 # -Qdiag-error to make icl error when seeing certain unknown arguments
3032 _flags='-nologo -Qdiag-error:4044,10157'
3033 # -Qvec- -Qsimd- to prevent miscompilation, -GS for consistency
3034 # with MSVC which enables it by default.
3035 _cflags='-D_USE_MATH_DEFINES -FIstdlib.h -Dstrtoll=_strtoi64 -Qms0 -Qvec- -Qsimd- -GS'
3036 if [ $pfx = hostcc ]; then
3037 append _cflags -Dsnprintf=_snprintf
3038 fi
3039 elif $_cc --version 2>/dev/null | grep -q ^cparser; then
3040 _type=cparser
3041 _ident=$($_cc --version | head -n1)
3042 _depflags='-MMD'
3043 _cflags_speed='-O4'
3044 _cflags_size='-O2'
3045 _flags_filter=cparser_flags
3046 fi
3047
3048 eval ${pfx}_type=\$_type
3049 eval ${pfx}_ident=\$_ident
3050}
3051
3052set_ccvars(){
3053 eval ${1}_C=\${_cc_c-\${${1}_C}}
3054 eval ${1}_E=\${_cc_e-\${${1}_E}}
3055 eval ${1}_O=\${_cc_o-\${${1}_O}}
3056
3057 if [ -n "$_depflags" ]; then
3058 eval ${1}_DEPFLAGS=\$_depflags
3059 else
3060 eval ${1}DEP=\${_DEPCMD:-\$DEPCMD}
3061 eval ${1}DEP_FLAGS=\${_DEPFLAGS:-\$DEPFLAGS}
3062 eval DEP${1}FLAGS=\$_flags
3063 fi
3064}
3065
3066probe_cc cc "$cc"
3067cflags_filter=$_flags_filter
3068cflags_speed=$_cflags_speed
3069cflags_size=$_cflags_size
3070cflags_noopt=$_cflags_noopt
3071add_cflags $_flags $_cflags
3072cc_ldflags=$_ldflags
3073set_ccvars CC
3074
3075probe_cc hostcc "$host_cc"
3076host_cflags_filter=$_flags_filter
3077add_host_cflags $_flags $_cflags
3078set_ccvars HOSTCC
3079
3080test -n "$cc_type" && enable $cc_type ||
3081 warn "Unknown C compiler $cc, unable to select optimal CFLAGS"
3082
3083: ${as_default:=$cc}
3084: ${dep_cc_default:=$cc}
3085: ${ld_default:=$cc}
3086: ${host_ld_default:=$host_cc}
3087set_default ar as dep_cc ld host_ld
3088
3089probe_cc as "$as"
3090asflags_filter=$_flags_filter
3091add_asflags $_flags $_cflags
3092set_ccvars AS
3093
3094probe_cc ld "$ld"
3095ldflags_filter=$_flags_filter
3096add_ldflags $_flags $_ldflags
3097test "$cc_type" != "$ld_type" && add_ldflags $cc_ldflags
3098LD_O=${_ld_o-$LD_O}
3099LD_LIB=${_ld_lib-$LD_LIB}
3100LD_PATH=${_ld_path-$LD_PATH}
3101
3102probe_cc hostld "$host_ld"
3103host_ldflags_filter=$_flags_filter
3104add_host_ldflags $_flags $_ldflags
3105HOSTLD_O=${_ld_o-$HOSTLD_O}
3106
3107if [ -z "$CC_DEPFLAGS" ] && [ "$dep_cc" != "$cc" ]; then
3108 probe_cc depcc "$dep_cc"
3109 CCDEP=${_DEPCMD:-$DEPCMD}
3110 CCDEP_FLAGS=${_DEPFLAGS:=$DEPFLAGS}
3111 DEPCCFLAGS=$_flags
3112fi
3113
3114if $ar 2>&1 | grep -q Microsoft; then
3115 arflags="-nologo"
3116 ar_o='-out:$@'
3117elif $ar 2>&1 | grep -q 'Texas Instruments'; then
3118 arflags="rq"
3119 ar_o='$@'
3120elif $ar 2>&1 | grep -q 'Usage: ar.*-X.*any'; then
3121 arflags='-Xany -r -c'
3122 ar_o='$@'
3123else
3124 arflags="rc"
3125 ar_o='$@'
3126fi
3127
3128add_cflags $extra_cflags
3129add_cxxflags $extra_cxxflags
3130add_asflags $extra_cflags
3131
3132if test -n "$sysroot"; then
3133 case "$cc_type" in
3134 gcc|llvm_gcc|clang)
3135 add_cppflags --sysroot="$sysroot"
3136 add_ldflags --sysroot="$sysroot"
3137 ;;
3138 tms470)
3139 add_cppflags -I"$sysinclude"
3140 add_ldflags --sysroot="$sysroot"
3141 ;;
3142 esac
3143fi
3144
3145if test "$cpu" = host; then
3146 enabled cross_compile &&
3147 die "--cpu=host makes no sense when cross-compiling."
3148
3149 case "$cc_type" in
3150 gcc|llvm_gcc)
3151 check_native(){
3152 $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
3153 sed -n "/cc1.*$1=/{
3154 s/.*$1=\\([^ ]*\\).*/\\1/
3155 p
3156 q
3157 }" $TMPE
3158 }
3159 cpu=$(check_native -march || check_native -mcpu)
3160 ;;
3161 esac
3162
3163 test "${cpu:-host}" = host &&
3164 die "--cpu=host not supported with compiler $cc"
3165fi
3166
3167# Deal with common $arch aliases
3168case "$arch" in
3169 aarch64|arm64)
3170 arch="aarch64"
3171 ;;
3172 arm*|iPad*|iPhone*)
3173 arch="arm"
3174 ;;
3175 mips*|IP*)
3176 arch="mips"
3177 ;;
3178 parisc*|hppa*)
3179 arch="parisc"
3180 ;;
3181 "Power Macintosh"|ppc*|powerpc*)
3182 arch="ppc"
3183 ;;
3184 s390|s390x)
3185 arch="s390"
3186 ;;
3187 sh4|sh)
3188 arch="sh4"
3189 ;;
3190 sun4u|sparc*)
3191 arch="sparc"
3192 ;;
3193 tilegx|tile-gx)
3194 arch="tilegx"
3195 ;;
3196 i[3-6]86|i86pc|BePC|x86pc|x86_64|x86_32|amd64)
3197 arch="x86"
3198 ;;
3199esac
3200
3201is_in $arch $ARCH_LIST || warn "unknown architecture $arch"
3202enable $arch
3203
3204# Add processor-specific flags
3205if enabled aarch64; then
3206
3207 case $cpu in
3208 armv*)
3209 cpuflags="-march=$cpu"
3210 ;;
3211 *)
3212 cpuflags="-mcpu=$cpu"
3213 ;;
3214 esac
3215
3216elif enabled alpha; then
3217
3218 cpuflags="-mcpu=$cpu"
3219
3220elif enabled arm; then
3221
3222 check_arm_arch() {
3223 check_cpp_condition stddef.h \
3224 "defined __ARM_ARCH_${1}__ || defined __TARGET_ARCH_${2:-$1}" \
3225 $cpuflags
3226 }
3227
3228 probe_arm_arch() {
3229 if check_arm_arch 4; then echo armv4;
3230 elif check_arm_arch 4T; then echo armv4t;
3231 elif check_arm_arch 5; then echo armv5;
3232 elif check_arm_arch 5E; then echo armv5e;
3233 elif check_arm_arch 5T; then echo armv5t;
3234 elif check_arm_arch 5TE; then echo armv5te;
3235 elif check_arm_arch 5TEJ; then echo armv5te;
3236 elif check_arm_arch 6; then echo armv6;
3237 elif check_arm_arch 6J; then echo armv6j;
3238 elif check_arm_arch 6K; then echo armv6k;
3239 elif check_arm_arch 6Z; then echo armv6z;
3240 elif check_arm_arch 6ZK; then echo armv6zk;
3241 elif check_arm_arch 6T2; then echo armv6t2;
3242 elif check_arm_arch 7; then echo armv7;
3243 elif check_arm_arch 7A 7_A; then echo armv7-a;
3244 elif check_arm_arch 7R 7_R; then echo armv7-r;
3245 elif check_arm_arch 7M 7_M; then echo armv7-m;
3246 elif check_arm_arch 7EM 7E_M; then echo armv7-m;
3247 elif check_arm_arch 8A 8_A; then echo armv8-a;
3248 fi
3249 }
3250
3251 [ "$cpu" = generic ] && cpu=$(probe_arm_arch)
3252
3253 case $cpu in
3254 armv*)
3255 cpuflags="-march=$cpu"
3256 subarch=$(echo $cpu | sed 's/[^a-z0-9]//g')
3257 ;;
3258 *)
3259 cpuflags="-mcpu=$cpu"
3260 case $cpu in
3261 cortex-a*) subarch=armv7a ;;
3262 cortex-r*) subarch=armv7r ;;
3263 cortex-m*) enable thumb; subarch=armv7m ;;
3264 arm11*) subarch=armv6 ;;
3265 arm[79]*e*|arm9[24]6*|arm96*|arm102[26]) subarch=armv5te ;;
3266 armv4*|arm7*|arm9[24]*) subarch=armv4 ;;
3267 *) subarch=$(probe_arm_arch) ;;
3268 esac
3269 ;;
3270 esac
3271
3272 case "$subarch" in
3273 armv5t*) enable fast_clz ;;
3274 armv[6-8]*) enable fast_clz fast_unaligned ;;
3275 esac
3276
3277elif enabled avr32; then
3278
3279 case $cpu in
3280 ap7[02]0[0-2])
3281 subarch="avr32_ap"
3282 cpuflags="-mpart=$cpu"
3283 ;;
3284 ap)
3285 subarch="avr32_ap"
3286 cpuflags="-march=$cpu"
3287 ;;
3288 uc3[ab]*)
3289 subarch="avr32_uc"
3290 cpuflags="-mcpu=$cpu"
3291 ;;
3292 uc)
3293 subarch="avr32_uc"
3294 cpuflags="-march=$cpu"
3295 ;;
3296 esac
3297
3298elif enabled bfin; then
3299
3300 cpuflags="-mcpu=$cpu"
3301
3302elif enabled mips; then
3303
3304 cpuflags="-march=$cpu"
3305
3306 case $cpu in
3307 24kc)
3308 disable mipsfpu
3309 disable mipsdspr1
3310 disable mipsdspr2
3311 ;;
3312 24kf*)
3313 disable mipsdspr1
3314 disable mipsdspr2
3315 ;;
3316 24kec|34kc|1004kc)
3317 disable mipsfpu
3318 disable mipsdspr2
3319 ;;
3320 24kef*|34kf*|1004kf*)
3321 disable mipsdspr2
3322 ;;
3323 74kc)
3324 disable mipsfpu
3325 ;;
3326 esac
3327
3328elif enabled ppc; then
3329
3330 case $(tolower $cpu) in
3331 601|ppc601|powerpc601)
3332 cpuflags="-mcpu=601"
3333 disable altivec
3334 ;;
3335 603*|ppc603*|powerpc603*)
3336 cpuflags="-mcpu=603"
3337 disable altivec
3338 ;;
3339 604*|ppc604*|powerpc604*)
3340 cpuflags="-mcpu=604"
3341 disable altivec
3342 ;;
3343 g3|75*|ppc75*|powerpc75*)
3344 cpuflags="-mcpu=750"
3345 disable altivec
3346 ;;
3347 g4|745*|ppc745*|powerpc745*)
3348 cpuflags="-mcpu=7450"
3349 ;;
3350 74*|ppc74*|powerpc74*)
3351 cpuflags="-mcpu=7400"
3352 ;;
3353 g5|970|ppc970|powerpc970)
3354 cpuflags="-mcpu=970"
3355 ;;
3356 power[3-7]*)
3357 cpuflags="-mcpu=$cpu"
3358 ;;
3359 cell)
3360 cpuflags="-mcpu=cell"
3361 enable ldbrx
3362 ;;
3363 e500mc)
3364 cpuflags="-mcpu=e500mc"
3365 disable altivec
3366 ;;
3367 e500v2)
3368 cpuflags="-mcpu=8548 -mhard-float -mfloat-gprs=double"
3369 disable altivec
3370 ;;
3371 e500)
3372 cpuflags="-mcpu=8540 -mhard-float"
3373 disable altivec
3374 ;;
3375 esac
3376
3377elif enabled sparc; then
3378
3379 case $cpu in
3380 cypress|f93[04]|tsc701|sparcl*|supersparc|hypersparc|niagara|v[789])
3381 cpuflags="-mcpu=$cpu"
3382 disable vis
3383 ;;
3384 ultrasparc*|niagara[234])
3385 cpuflags="-mcpu=$cpu"
3386 ;;
3387 esac
3388
3389elif enabled x86; then
3390
3391 case $cpu in
3392 i[345]86|pentium)
3393 cpuflags="-march=$cpu"
3394 disable mmx
3395 ;;
3396 # targets that do NOT support nopl and conditional mov (cmov)
3397 pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
3398 cpuflags="-march=$cpu"
3399 disable i686
3400 ;;
3401 # targets that do support nopl and conditional mov (cmov)
3402 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*)
3403 cpuflags="-march=$cpu"
3404 enable i686
3405 enable fast_cmov
3406 ;;
3407 # targets that do support conditional mov but on which it's slow
3408 pentium4|pentium4m|prescott|nocona)
3409 cpuflags="-march=$cpu"
3410 enable i686
3411 disable fast_cmov
3412 ;;
3413 esac
3414
3415fi
3416
3417if [ "$cpu" != generic ]; then
3418 add_cflags $cpuflags
3419 add_asflags $cpuflags
3420fi
3421
3422# compiler sanity check
3423check_exec <<EOF
3424int main(void){ return 0; }
3425EOF
3426if test "$?" != 0; then
3427 echo "$cc is unable to create an executable file."
3428 if test -z "$cross_prefix" && ! enabled cross_compile ; then
3429 echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
3430 echo "Only do this if you know what cross compiling means."
3431 fi
3432 die "C compiler test failed."
3433fi
3434
3435add_cppflags -D_ISOC99_SOURCE
3436add_cxxflags -D__STDC_CONSTANT_MACROS
3437check_cflags -std=c99
3438check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
3439#include <stdlib.h>
3440EOF
3441check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
3442#include <stdlib.h>
3443EOF
3444
3445check_host_cflags -std=c99
3446check_host_cflags -Wall
3447
3448check_64bit(){
3449 arch32=$1
3450 arch64=$2
3451 expr=$3
3452 check_code cc "" "int test[2*($expr) - 1]" &&
3453 subarch=$arch64 || subarch=$arch32
3454}
3455
3456case "$arch" in
3457 aarch64|alpha|ia64)
3458 spic=$shared
3459 ;;
3460 mips)
3461 check_64bit mips mips64 '_MIPS_SIM > 1'
3462 spic=$shared
3463 ;;
3464 parisc)
3465 check_64bit parisc parisc64 'sizeof(void *) > 4'
3466 spic=$shared
3467 ;;
3468 ppc)
3469 check_64bit ppc ppc64 'sizeof(void *) > 4'
3470 spic=$shared
3471 ;;
3472 sparc)
3473 check_64bit sparc sparc64 'sizeof(void *) > 4'
3474 spic=$shared
3475 ;;
3476 x86)
3477 check_64bit x86_32 x86_64 'sizeof(void *) > 4'
3478 if test "$subarch" = "x86_64"; then
3479 spic=$shared
3480 fi
3481 ;;
3482 ppc)
3483 check_cc <<EOF && subarch="ppc64"
3484 int test[(int)sizeof(char*) - 7];
3485EOF
3486 ;;
3487esac
3488
3489enable $subarch
3490enabled spic && enable_weak pic
3491
3492# OS specific
3493case $target_os in
3494 aix)
3495 SHFLAGS=-shared
3496 add_cppflags '-I\$(SRC_PATH)/compat/aix'
3497 enabled shared && add_ldflags -Wl,-brtl
3498 ;;
3499 haiku)
3500 prefix_default="/boot/common"
3501 network_extralibs="-lnetwork"
3502 host_libs=
3503 ;;
3504 sunos)
3505 SHFLAGS='-shared -Wl,-h,$$(@F)'
3506 enabled x86 && SHFLAGS="-mimpure-text $SHFLAGS"
3507 network_extralibs="-lsocket -lnsl"
3508 add_cppflags -D__EXTENSIONS__ -D_XOPEN_SOURCE=600
3509 # When using suncc to build, the Solaris linker will mark
3510 # an executable with each instruction set encountered by
3511 # the Solaris assembler. As our libraries contain their own
3512 # guards for processor-specific code, instead suppress
3513 # generation of the HWCAPS ELF section on Solaris x86 only.
3514 enabled_all suncc x86 &&
3515 echo "hwcap_1 = OVERRIDE;" > mapfile &&
3516 add_ldflags -Wl,-M,mapfile
3517 nm_default='nm -P -g'
3518 ;;
3519 netbsd)
3520 disable symver
3521 oss_indev_extralibs="-lossaudio"
3522 oss_outdev_extralibs="-lossaudio"
3523 enabled gcc || check_ldflags -Wl,-zmuldefs
3524 ;;
3525 openbsd|bitrig)
3526 disable symver
3527 SHFLAGS='-shared'
3528 SLIB_INSTALL_NAME='$(SLIBNAME).$(LIBMAJOR).$(LIBMINOR)'
3529 SLIB_INSTALL_LINKS=
3530 oss_indev_extralibs="-lossaudio"
3531 oss_outdev_extralibs="-lossaudio"
3532 ;;
3533 dragonfly)
3534 disable symver
3535 ;;
3536 freebsd)
3537 ;;
3538 bsd/os)
3539 add_extralibs -lpoll -lgnugetopt
3540 strip="strip -d"
3541 ;;
3542 darwin)
3543 gas="gas-preprocessor.pl $cc"
3544 enabled ppc && add_asflags -force_cpusubtype_ALL
3545 SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR)'
3546 enabled x86_32 && append SHFLAGS -Wl,-read_only_relocs,suppress
3547 strip="${strip} -x"
3548 add_ldflags -Wl,-dynamic,-search_paths_first
3549 SLIBSUF=".dylib"
3550 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
3551 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
3552 objformat="macho"
3553 enabled x86_64 && objformat="macho64"
3554 enabled_any pic shared ||
3555 { check_cflags -mdynamic-no-pic && add_asflags -mdynamic-no-pic; }
3556 ;;
3557 mingw32*)
3558 if test $target_os = "mingw32ce"; then
3559 disable network
3560 else
3561 target_os=mingw32
3562 fi
3563 LIBTARGET=i386
3564 if enabled x86_64; then
3565 LIBTARGET="i386:x86-64"
3566 elif enabled arm; then
3567 LIBTARGET=arm-wince
3568 fi
3569 check_ldflags -Wl,--nxcompat
3570 check_ldflags -Wl,--dynamicbase
3571 shlibdir_default="$bindir_default"
3572 SLIBPREF=""
3573 SLIBSUF=".dll"
3574 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
3575 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
3576 dlltool="${cross_prefix}dlltool"
3577 if check_cmd lib.exe -list; then
3578 SLIB_EXTRA_CMD=-'sed -e "s/ @[^ ]*//" $$(@:$(SLIBSUF)=.orig.def) > $$(@:$(SLIBSUF)=.def); lib.exe /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib)'
3579 if enabled x86_64; then
3580 LIBTARGET=x64
3581 fi
3582 elif check_cmd $dlltool --version; then
3583 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)'
3584 fi
3585 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
3586 SLIB_INSTALL_LINKS=
3587 SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
3588 SLIB_INSTALL_EXTRA_LIB='lib$(SLIBNAME:$(SLIBSUF)=.dll.a) $(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
3589 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'
3590 objformat="win32"
3591 ranlib=:
3592 enable dos_paths
3593 ;;
3594 win32|win64)
3595 if enabled shared; then
3596 # Link to the import library instead of the normal static library
3597 # for shared libs.
3598 LD_LIB='%.lib'
3599 # Cannot build both shared and static libs with MSVC or icl.
3600 disable static
3601 fi
3602 shlibdir_default="$bindir_default"
3603 SLIBPREF=""
3604 SLIBSUF=".dll"
3605 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
3606 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
3607 SLIB_CREATE_DEF_CMD='makedef $(SUBDIR)lib$(NAME).ver $(OBJS) > $$(@:$(SLIBSUF)=.def)'
3608 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
3609 SLIB_INSTALL_LINKS=
3610 SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
3611 SLIB_INSTALL_EXTRA_LIB='$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
3612 SHFLAGS='-dll -def:$$(@:$(SLIBSUF)=.def) -implib:$(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib)'
3613 objformat="win32"
3614 ranlib=:
3615 enable dos_paths
3616 ;;
3617 cygwin*)
3618 target_os=cygwin
3619 shlibdir_default="$bindir_default"
3620 SLIBPREF="cyg"
3621 SLIBSUF=".dll"
3622 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
3623 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
3624 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
3625 SLIB_INSTALL_LINKS=
3626 SLIB_INSTALL_EXTRA_LIB='lib$(FULLNAME).dll.a'
3627 SHFLAGS='-shared -Wl,--out-implib,$(SUBDIR)lib$(FULLNAME).dll.a'
3628 objformat="win32"
3629 enable dos_paths
3630 ;;
3631 *-dos|freedos|opendos)
3632 network_extralibs="-lsocket"
3633 objformat="coff"
3634 enable dos_paths
3635 add_cppflags -U__STRICT_ANSI__
3636 ;;
3637 linux)
3638 enable dv1394
3639 ;;
3640 irix*)
3641 target_os=irix
3642 ranlib="echo ignoring ranlib"
3643 ;;
3644 os/2*)
3645 strip="lxlite -CS"
3646 ln_s="cp -f"
3647 objformat="aout"
3648 add_cppflags -D_GNU_SOURCE
3649 add_ldflags -Zomf -Zbin-files -Zargs-wild -Zmap
3650 SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
3651 LIBSUF="_s.a"
3652 SLIBPREF=""
3653 SLIBSUF=".dll"
3654 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
3655 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
3656 SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
3657 echo PROTMODE >> $(SUBDIR)$(NAME).def; \
3658 echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
3659 echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
3660 echo EXPORTS >> $(SUBDIR)$(NAME).def; \
3661 emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
3662 SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
3663 emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
3664 SLIB_INSTALL_EXTRA_LIB='$(LIBPREF)$(NAME)_dll.a $(LIBPREF)$(NAME)_dll.lib'
3665 enable dos_paths
3666 enable_weak os2threads
3667 ;;
3668 gnu/kfreebsd)
3669 add_cppflags -D_BSD_SOURCE
3670 ;;
3671 gnu)
3672 ;;
3673 qnx)
3674 add_cppflags -D_QNX_SOURCE
3675 network_extralibs="-lsocket"
3676 ;;
3677 symbian)
3678 SLIBSUF=".dll"
3679 enable dos_paths
3680 add_cflags --include=$sysinclude/gcce/gcce.h -fvisibility=default
3681 add_cppflags -D__GCCE__ -D__SYMBIAN32__ -DSYMBIAN_OE_POSIX_SIGNALS
3682 add_ldflags -Wl,--target1-abs,--no-undefined \
3683 -Wl,-Ttext,0x80000,-Tdata,0x1000000 -shared \
3684 -Wl,--entry=_E32Startup -Wl,-u,_E32Startup
3685 add_extralibs -l:eexe.lib -l:usrt2_2.lib -l:dfpaeabi.dso \
3686 -l:drtaeabi.dso -l:scppnwdl.dso -lsupc++ -lgcc \
3687 -l:libc.dso -l:libm.dso -l:euser.dso -l:libcrt0.lib
3688 ;;
3689 osf1)
3690 add_cppflags -D_OSF_SOURCE -D_POSIX_PII -D_REENTRANT
3691 ;;
3692 minix)
3693 ;;
3694 plan9)
3695 add_cppflags -D_C99_SNPRINTF_EXTENSION \
3696 -D_REENTRANT_SOURCE \
3697 -D_RESEARCH_SOURCE \
3698 -DFD_SETSIZE=96 \
3699 -DHAVE_SOCK_OPTS
3700 add_compat strtod.o strtod=avpriv_strtod
3701 network_extralibs='-lbsd'
3702 exeobjs=compat/plan9/main.o
3703 disable ffserver
3704 cp_f='cp'
3705 ;;
3706 none)
3707 ;;
3708 *)
3709 die "Unknown OS '$target_os'."
3710 ;;
3711esac
3712
3713# determine libc flavour
3714
3715# uclibc defines __GLIBC__, so it needs to be checked before glibc.
3716if check_cpp_condition features.h "defined __UCLIBC__"; then
3717 libc_type=uclibc
3718 add_cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
3719elif check_cpp_condition features.h "defined __GLIBC__"; then
3720 libc_type=glibc
3721 add_cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
3722# MinGW headers can be installed on Cygwin, so check for newlib first.
3723elif check_cpp_condition newlib.h "defined _NEWLIB_VERSION"; then
3724 libc_type=newlib
3725 add_cppflags -U__STRICT_ANSI__
3726elif check_header _mingw.h; then
3727 libc_type=mingw
3728 check_cpp_condition _mingw.h \
3729 "defined (__MINGW64_VERSION_MAJOR) || (__MINGW32_MAJOR_VERSION > 3) || \
3730 (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
3731 die "ERROR: MinGW runtime version must be >= 3.15."
3732 add_cppflags -U__STRICT_ANSI__
3733 if check_cpp_condition _mingw.h "defined(__MINGW64_VERSION_MAJOR) && \
3734 __MINGW64_VERSION_MAJOR < 3"; then
3735 add_compat msvcrt/snprintf.o
3736 add_cflags "-include $source_path/compat/msvcrt/snprintf.h"
3737 else
3738 add_cppflags -D__USE_MINGW_ANSI_STDIO=1
3739 fi
3740elif check_func_headers stdlib.h _get_doserrno; then
3741 libc_type=msvcrt
3742 add_compat strtod.o strtod=avpriv_strtod
3743 add_compat msvcrt/snprintf.o snprintf=avpriv_snprintf \
3744 _snprintf=avpriv_snprintf \
3745 vsnprintf=avpriv_vsnprintf
3746 # The MSVC 2010 headers (Win 7.0 SDK) set _WIN32_WINNT to
3747 # 0x601 by default unless something else is set by the user.
3748 # This can easily lead to us detecting functions only present
3749 # in such new versions and producing binaries requiring windows 7.0.
3750 # Therefore explicitly set the default to XP unless the user has
3751 # set something else on the command line.
3752 check_cpp_condition stdlib.h "defined(_WIN32_WINNT)" || add_cppflags -D_WIN32_WINNT=0x0502
3753elif check_cpp_condition stddef.h "defined __KLIBC__"; then
3754 libc_type=klibc
3755elif check_cpp_condition sys/cdefs.h "defined __BIONIC__"; then
3756 libc_type=bionic
3757 add_compat strtod.o strtod=avpriv_strtod
3758fi
3759
3760test -n "$libc_type" && enable $libc_type
3761
3762# hacks for compiler/libc/os combinations
3763
3764if enabled_all tms470 glibc; then
3765 CPPFLAGS="-I${source_path}/compat/tms470 ${CPPFLAGS}"
3766 add_cppflags -D__USER_LABEL_PREFIX__=
3767 add_cppflags -D__builtin_memset=memset
3768 add_cppflags -D__gnuc_va_list=va_list -D_VA_LIST_DEFINED
3769 add_cflags -pds=48 # incompatible redefinition of macro
3770fi
3771
3772if enabled_all ccc glibc; then
3773 add_ldflags -Wl,-z,now # calls to libots crash without this
3774fi
3775
3776esc(){
3777 echo "$*" | sed 's/%/%25/g;s/:/%3a/g'
3778}
3779
3780echo "config:$arch:$subarch:$cpu:$target_os:$(esc $cc_ident):$(esc $FFMPEG_CONFIGURATION)" >config.fate
3781
3782check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable_weak pic
3783
3784set_default $PATHS_LIST
3785set_default nm
3786
3787# we need to build at least one lib type
3788if ! enabled_any static shared; then
3789 cat <<EOF
3790At least one library type must be built.
3791Specify --enable-static to build the static libraries or --enable-shared to
3792build the shared libraries as well. To only build the shared libraries specify
3793--disable-static in addition to --enable-shared.
3794EOF
3795 exit 1;
3796fi
3797
3798# backward compatibility layer for incompatible_libav/fork_abi
3799enabled incompatible_fork_abi && enable incompatible_libav_abi
3800enabled incompatible_libav_abi && enable incompatible_fork_abi
3801
3802die_license_disabled() {
3803 enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
3804}
3805
3806die_license_disabled_gpl() {
3807 enabled $1 || { enabled $2 && die "$2 is incompatible with the gpl and --enable-$1 is not specified."; }
3808}
3809
3810die_license_disabled gpl frei0r
3811die_license_disabled gpl libcdio
3812die_license_disabled gpl libutvideo
3813die_license_disabled gpl libvidstab
3814die_license_disabled gpl libx264
3815die_license_disabled gpl libxavs
3816die_license_disabled gpl libxvid
3817die_license_disabled gpl libzvbi
3818die_license_disabled gpl x11grab
3819
3820die_license_disabled nonfree libaacplus
3821die_license_disabled nonfree libfaac
3822enabled gpl && die_license_disabled_gpl nonfree libfdk_aac
3823enabled gpl && die_license_disabled_gpl nonfree openssl
3824
3825die_license_disabled version3 libopencore_amrnb
3826die_license_disabled version3 libopencore_amrwb
3827die_license_disabled version3 libvo_aacenc
3828die_license_disabled version3 libvo_amrwbenc
3829
3830enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
3831
3832disabled optimizations || check_cflags -fomit-frame-pointer
3833
3834enable_weak_pic() {
3835 disabled pic && return
3836 enable pic
3837 add_cppflags -DPIC
3838 case "$target_os" in
3839 mingw*|cygwin*)
3840 ;;
3841 *)
3842 add_cflags -fPIC
3843 ;;
3844 esac
3845 add_asflags -fPIC
3846}
3847
3848enabled pic && enable_weak_pic
3849
3850check_cc <<EOF || die "Symbol mangling check failed."
3851int ff_extern;
3852EOF
3853sym=$($nm $TMPO | awk '/ff_extern/{ print substr($0, match($0, /[^ \t]*ff_extern/)) }')
3854extern_prefix=${sym%%ff_extern*}
3855
3856check_cc <<EOF && enable_weak inline_asm
3857void foo(void) { __asm__ volatile ("" ::); }
3858EOF
3859
3860_restrict=
3861for restrict_keyword in restrict __restrict__ __restrict; do
3862 check_cc <<EOF && _restrict=$restrict_keyword && break
3863void foo(char * $restrict_keyword p);
3864EOF
3865done
3866
3867check_cc <<EOF && enable pragma_deprecated
3868void foo(void) { _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") }
3869EOF
3870
3871check_cc <<EOF && enable attribute_packed
3872struct { int x; } __attribute__((packed)) x;
3873EOF
3874
3875check_cc <<EOF && enable attribute_may_alias
3876union { int x; } __attribute__((may_alias)) x;
3877EOF
3878
3879check_cc <<EOF || die "endian test failed"
3880unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
3881EOF
3882od -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
3883
3884check_inline_asm inline_asm_labels '"1:\n"'
3885
3886if enabled alpha; then
3887
3888 check_cflags -mieee
3889
3890elif enabled arm; then
3891
3892 check_cpp_condition stddef.h "defined __thumb__" && check_cc <<EOF && enable_weak thumb
3893float func(float a, float b){ return a+b; }
3894EOF
3895
3896 enabled thumb && check_cflags -mthumb || check_cflags -marm
3897 nogas=die
3898
3899 if check_cpp_condition stddef.h "defined __ARM_PCS_VFP"; then
3900 enable vfp_args
3901 elif ! check_cpp_condition stddef.h "defined __ARM_PCS || defined __SOFTFP__"; then
3902 case "${cross_prefix:-$cc}" in
3903 *hardfloat*) enable vfp_args; fpabi=vfp ;;
3904 *) check_ld "cc" <<EOF && enable vfp_args && fpabi=vfp || fpabi=soft ;;
3905__asm__ (".eabi_attribute 28, 1");
3906int main(void) { return 0; }
3907EOF
3908 esac
3909 warn "Compiler does not indicate floating-point ABI, guessing $fpabi."
3910 fi
3911
3912 enabled armv5te && check_insn armv5te 'qadd r0, r0, r0'
3913 enabled armv6 && check_insn armv6 'sadd16 r0, r0, r0'
3914 enabled armv6t2 && check_insn armv6t2 'movt r0, #0'
3915 enabled neon && check_insn neon 'vadd.i16 q0, q0, q0'
3916 enabled vfp && check_insn vfp 'fadds s0, s0, s0'
3917 enabled vfpv3 && check_insn vfpv3 'vmov.f32 s0, #1.0'
3918
3919 [ $target_os = linux ] ||
3920 map 'enabled_any ${v}_external ${v}_inline || disable $v' \
3921 $ARCH_EXT_LIST_ARM
3922
3923 check_inline_asm asm_mod_q '"add r0, %Q0, %R0" :: "r"((long long)0)'
3924 check_inline_asm asm_mod_y '"vmul.i32 d0, d0, %y0" :: "x"(0)'
3925
3926 [ $target_os != win32 ] && enabled_all armv6t2 shared !pic && enable_weak_pic
3927
3928elif enabled mips; then
3929
3930 check_inline_asm loongson '"dmult.g $1, $2, $3"'
3931 enabled mips32r2 && add_cflags "-mips32r2" && add_asflags "-mips32r2" &&
3932 check_inline_asm mips32r2 '"rotr $t0, $t1, 1"'
3933 enabled mipsdspr1 && add_cflags "-mdsp" && add_asflags "-mdsp" &&
3934 check_inline_asm mipsdspr1 '"addu.qb $t0, $t1, $t2"'
3935 enabled mipsdspr2 && add_cflags "-mdspr2" && add_asflags "-mdspr2" &&
3936 check_inline_asm mipsdspr2 '"absq_s.qb $t0, $t1"'
3937 enabled mipsfpu && add_cflags "-mhard-float" && add_asflags "-mhard-float" &&
3938 check_inline_asm mipsfpu '"madd.d $f0, $f2, $f4, $f6"'
3939
3940elif enabled parisc; then
3941
3942 if enabled gcc; then
3943 case $($cc -dumpversion) in
3944 4.[3-8].*) check_cflags -fno-optimize-sibling-calls ;;
3945 esac
3946 fi
3947
3948elif enabled ppc; then
3949
3950 enable local_aligned_8 local_aligned_16
3951
3952 check_inline_asm dcbzl '"dcbzl 0, %0" :: "r"(0)'
3953 check_inline_asm ibm_asm '"add 0, 0, 0"'
3954 check_inline_asm ppc4xx '"maclhw r10, r11, r12"'
3955 check_inline_asm xform_asm '"lwzx %1, %y0" :: "Z"(*(int*)0), "r"(0)'
3956
3957 # AltiVec flags: The FSF version of GCC differs from the Apple version
3958 if enabled altivec; then
3959 if ! enabled_any pic ppc64; then
3960 nogas=warn
3961 fi
3962 check_cflags -maltivec -mabi=altivec &&
3963 { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
3964 check_cflags -faltivec
3965
3966 # check if our compiler supports Motorola AltiVec C API
3967 check_cc <<EOF || disable altivec
3968$inc_altivec_h
3969int main(void) {
3970 vector signed int v1 = (vector signed int) { 0 };
3971 vector signed int v2 = (vector signed int) { 1 };
3972 v1 = vec_add(v1, v2);
3973 return 0;
3974}
3975EOF
3976
3977 enabled altivec || warn "Altivec disabled, possibly missing --cpu flag"
3978 fi
3979
3980elif enabled sparc; then
3981
3982 enabled vis && check_inline_asm vis '"pdist %f0, %f0, %f0"'
3983
3984elif enabled x86; then
3985
3986 check_builtin rdtsc intrin.h "__rdtsc()"
3987 check_builtin mm_empty mmintrin.h "_mm_empty()"
3988
3989 enable local_aligned_8 local_aligned_16
3990
3991 # check whether EBP is available on x86
3992 # As 'i' is stored on the stack, this program will crash
3993 # if the base pointer is used to access it because the
3994 # base pointer is cleared in the inline assembly code.
3995 check_exec_crash <<EOF && enable ebp_available
3996volatile int i=0;
3997__asm__ volatile ("xorl %%ebp, %%ebp" ::: "%ebp");
3998return i;
3999EOF
4000
4001 # check whether EBX is available on x86
4002 check_inline_asm ebx_available '""::"b"(0)' &&
4003 check_inline_asm ebx_available '"":::"%ebx"'
4004
4005 # check whether xmm clobbers are supported
4006 check_inline_asm xmm_clobbers '"":::"%xmm0"'
4007
4008 # check whether binutils is new enough to compile SSSE3/MMXEXT
4009 enabled ssse3 && check_inline_asm ssse3_inline '"pabsw %xmm0, %xmm0"'
4010 enabled mmxext && check_inline_asm mmxext_inline '"pmaxub %mm0, %mm1"'
4011
4012 if ! disabled_any asm mmx yasm; then
4013 if check_cmd $yasmexe --version; then
4014 enabled x86_64 && yasm_extra="-m amd64"
4015 yasm_debug="-g dwarf2"
4016 elif check_cmd nasm -v; then
4017 yasmexe=nasm
4018 yasm_debug="-g -F dwarf"
4019 enabled x86_64 && test "$objformat" = elf && objformat=elf64
4020 fi
4021
4022 YASMFLAGS="-f $objformat $yasm_extra"
4023 enabled pic && append YASMFLAGS "-DPIC"
4024 test -n "$extern_prefix" && append YASMFLAGS "-DPREFIX"
4025 case "$objformat" in
4026 elf*) enabled debug && append YASMFLAGS $yasm_debug ;;
4027 esac
4028
4029 check_yasm "movbe ecx, [5]" && enable yasm ||
4030 die "yasm/nasm not found or too old. Use --disable-yasm for a crippled build."
4031 check_yasm "vextractf128 xmm0, ymm0, 0" || disable avx_external avresample
4032 check_yasm "vfmaddps ymm0, ymm1, ymm2, ymm3" || disable fma4_external
4033 check_yasm "CPU amdnop" && enable cpunop
4034 fi
4035
4036 case "$cpu" in
4037 athlon*|opteron*|k8*|pentium|pentium-mmx|prescott|nocona|atom|geode)
4038 disable fast_clz
4039 ;;
4040 esac
4041
4042fi
4043
4044if enabled asm; then
4045 as=${gas:=$as}
4046 check_as <<EOF && enable gnu_as || \
4047 $nogas "GNU assembler not found, install gas-preprocessor"
4048.macro m n
4049\n: .int 0
4050.endm
4051m x
4052EOF
4053fi
4054
4055check_ldflags -Wl,--as-needed
4056
4057if check_func dlopen; then
4058 ldl=
4059elif check_func dlopen -ldl; then
4060 ldl=-ldl
4061fi
4062
4063if ! disabled network; then
4064 check_type "sys/types.h sys/socket.h" socklen_t
4065 check_type netdb.h "struct addrinfo"
4066 check_type netinet/in.h "struct group_source_req" -D_BSD_SOURCE
4067 check_type netinet/in.h "struct ip_mreq_source" -D_BSD_SOURCE
4068 check_type netinet/in.h "struct ipv6_mreq" -D_DARWIN_C_SOURCE
4069 check_type netinet/in.h "struct sockaddr_in6"
4070 check_type poll.h "struct pollfd"
4071 check_type "sys/types.h sys/socket.h" "struct sockaddr_storage"
4072 check_struct "sys/types.h sys/socket.h" "struct sockaddr" sa_len
4073 check_type netinet/sctp.h "struct sctp_event_subscribe"
4074 check_func getaddrinfo $network_extralibs
4075 check_func getservbyport $network_extralibs
4076 # Prefer arpa/inet.h over winsock2
4077 if check_header arpa/inet.h ; then
4078 check_func closesocket
4079 elif check_header winsock2.h ; then
4080 check_func_headers winsock2.h closesocket -lws2 &&
4081 network_extralibs="-lws2" ||
4082 { check_func_headers winsock2.h closesocket -lws2_32 &&
4083 network_extralibs="-lws2_32"; }
4084 check_func_headers ws2tcpip.h getaddrinfo $network_extralibs
4085 check_type ws2tcpip.h socklen_t
4086 check_type ws2tcpip.h "struct addrinfo"
4087 check_type ws2tcpip.h "struct group_source_req"
4088 check_type ws2tcpip.h "struct ip_mreq_source"
4089 check_type ws2tcpip.h "struct ipv6_mreq"
4090 check_type winsock2.h "struct pollfd"
4091 check_type ws2tcpip.h "struct sockaddr_in6"
4092 check_type ws2tcpip.h "struct sockaddr_storage"
4093 check_struct winsock2.h "struct sockaddr" sa_len
4094 else
4095 disable network
4096 fi
4097fi
4098
4099# Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
4100check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
4101
4102check_func access
4103check_func clock_gettime || { check_func clock_gettime -lrt && add_extralibs -lrt; }
4104check_func fcntl
4105check_func fork
4106check_func_headers stdlib.h getenv
4107check_func gethrtime
4108check_func getopt
4109check_func getrusage
4110check_struct "sys/time.h sys/resource.h" "struct rusage" ru_maxrss
4111check_func gettimeofday
4112check_func inet_aton $network_extralibs
4113check_func isatty
4114check_func localtime_r
4115check_func ${malloc_prefix}memalign && enable memalign
4116check_func mkstemp
4117check_func mmap
4118check_func mprotect
4119check_func ${malloc_prefix}posix_memalign && enable posix_memalign
4120check_func_headers malloc.h _aligned_malloc && enable aligned_malloc
4121check_func setrlimit
4122check_struct "sys/stat.h" "struct stat" st_mtim.tv_nsec -D_BSD_SOURCE
4123check_func strerror_r
4124check_func sched_getaffinity
4125check_builtin sync_val_compare_and_swap "" "int *ptr; int oldval, newval; __sync_val_compare_and_swap(ptr, oldval, newval)"
4126check_builtin machine_rw_barrier mbarrier.h "__machine_rw_barrier()"
4127check_builtin atomic_cas_ptr atomic.h "void **ptr; void *oldval, *newval; atomic_cas_ptr(ptr, oldval, newval)"
4128check_builtin MemoryBarrier windows.h "MemoryBarrier()"
4129check_builtin sarestart signal.h "SA_RESTART"
4130check_func sysconf
4131check_func sysctl
4132check_func usleep
4133check_func_headers conio.h kbhit
4134check_func_headers windows.h PeekNamedPipe
4135check_func_headers io.h setmode
4136check_func_headers lzo/lzo1x.h lzo1x_999_compress
4137check_lib2 "windows.h shellapi.h" CommandLineToArgvW -lshell32
4138check_lib2 "windows.h wincrypt.h" CryptGenRandom -ladvapi32
4139check_lib2 "windows.h psapi.h" GetProcessMemoryInfo -lpsapi
4140check_func_headers windows.h GetProcessAffinityMask
4141check_func_headers windows.h GetProcessTimes
4142check_func_headers windows.h GetSystemTimeAsFileTime
4143check_func_headers windows.h MapViewOfFile
4144check_func_headers windows.h SetConsoleTextAttribute
4145check_func_headers windows.h Sleep
4146check_func_headers windows.h VirtualAlloc
4147check_func_headers glob.h glob
4148check_func_headers "X11/Xlib.h X11/extensions/Xvlib.h" XvGetPortAttribute -lXv -lX11 -lXext
4149
4150check_header cl/cl.h
4151check_header direct.h
4152check_header dlfcn.h
4153check_header dxva.h
4154check_header dxva2api.h -D_WIN32_WINNT=0x0600
4155check_header io.h
4156check_header libcrystalhd/libcrystalhd_if.h
4157check_header malloc.h
4158check_header poll.h
4159check_header sys/mman.h
4160check_header sys/param.h
4161check_header sys/resource.h
4162check_header sys/select.h
4163check_header sys/time.h
4164check_header sys/un.h
4165check_header termios.h
4166check_header unistd.h
4167check_header vdpau/vdpau.h
4168check_header vdpau/vdpau_x11.h
4169check_header VideoDecodeAcceleration/VDADecoder.h
4170check_header windows.h
4171check_header X11/extensions/XvMClib.h
4172check_header asm/types.h
4173
4174disabled zlib || check_lib zlib.h zlibVersion -lz || disable zlib
4175disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
4176
4177if ! disabled w32threads && ! enabled pthreads; then
4178 check_func_headers "windows.h process.h" _beginthreadex && enable w32threads
4179fi
4180
4181# check for some common methods of building with pthread support
4182# do this before the optional library checks as some of them require pthreads
4183if ! disabled pthreads && ! enabled w32threads && ! enabled os2threads; then
4184 enable pthreads
4185 if check_func pthread_create; then
4186 :
4187 elif check_func pthread_create -pthread; then
4188 add_cflags -pthread
4189 add_extralibs -pthread
4190 elif check_func pthread_create -pthreads; then
4191 add_cflags -pthreads
4192 add_extralibs -pthreads
4193 elif check_func pthread_create -lpthreadGC2; then
4194 add_extralibs -lpthreadGC2
4195 elif ! check_lib pthread.h pthread_create -lpthread; then
4196 disable pthreads
4197 fi
4198fi
4199
4200for thread in $THREADS_LIST; do
4201 if enabled $thread; then
4202 test -n "$thread_type" &&
4203 die "ERROR: Only one thread type must be selected." ||
4204 thread_type="$thread"
4205 fi
4206done
4207
4208if enabled pthreads; then
4209 check_func pthread_cancel
4210fi
4211
4212enabled sync_val_compare_and_swap && enable atomics_gcc
4213enabled_all atomic_cas_ptr machine_rw_barrier && enable atomics_suncc
4214enabled MemoryBarrier && enable atomics_win32
4215
4216check_lib math.h sin -lm && LIBM="-lm"
4217disabled crystalhd || check_lib libcrystalhd/libcrystalhd_if.h DtsCrystalHDVersion -lcrystalhd || disable crystalhd
4218
4219atan2f_args=2
4220ldexpf_args=2
4221powf_args=2
4222
4223for func in $MATH_FUNCS; do
4224 eval check_mathfunc $func \${${func}_args:-1}
4225done
4226
4227# these are off by default, so fail if requested and not available
4228enabled avisynth && { { check_lib2 "windows.h" LoadLibrary; } ||
4229 { check_lib2 "dlfcn.h" dlopen -ldl; } ||
4230 die "ERROR: LoadLibrary/dlopen not found for avisynth"; }
4231enabled fontconfig && require_pkg_config fontconfig "fontconfig/fontconfig.h" FcInit
4232enabled frei0r && { check_header frei0r.h || die "ERROR: frei0r.h header not found"; }
4233enabled gnutls && require_pkg_config gnutls gnutls/gnutls.h gnutls_global_init
4234enabled ladspa && { check_header ladspa.h || die "ERROR: ladspa.h header not found"; }
4235enabled libiec61883 && require libiec61883 libiec61883/iec61883.h iec61883_cmp_connect -lraw1394 -lavc1394 -lrom1394 -liec61883
4236enabled libaacplus && require "libaacplus >= 2.0.0" aacplus.h aacplusEncOpen -laacplus
4237enabled libass && require_pkg_config libass ass/ass.h ass_library_init
4238enabled libbluray && require libbluray libbluray/bluray.h bd_open -lbluray
4239enabled libcelt && require libcelt celt/celt.h celt_decode -lcelt0 &&
4240 { check_lib celt/celt.h celt_decoder_create_custom -lcelt0 ||
4241 die "ERROR: libcelt must be installed and version must be >= 0.11.0."; }
4242enabled libcaca && require_pkg_config caca caca.h caca_create_canvas
4243enabled libfaac && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
4244enabled libfdk_aac && require libfdk_aac fdk-aac/aacenc_lib.h aacEncOpen -lfdk-aac
4245flite_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"
4246enabled libflite && require2 libflite "flite/flite.h" flite_init $flite_libs
4247enabled libfreetype && require_pkg_config freetype2 "ft2build.h freetype/freetype.h" FT_Init_FreeType
4248enabled libgme && require libgme gme/gme.h gme_new_emu -lgme -lstdc++
4249enabled libgsm && { for gsm_hdr in "gsm.h" "gsm/gsm.h"; do
4250 check_lib "${gsm_hdr}" gsm_create -lgsm && break;
4251 done || die "ERROR: libgsm not found"; }
4252enabled libilbc && require libilbc ilbc.h WebRtcIlbcfix_InitDecode -lilbc
4253enabled libmodplug && require libmodplug libmodplug/modplug.h ModPlug_Load -lmodplug
4254enabled libmp3lame && require "libmp3lame >= 3.98.3" lame/lame.h lame_set_VBR_quality -lmp3lame
4255enabled libnut && require libnut libnut.h nut_demuxer_init -lnut
4256enabled libopencore_amrnb && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb
4257enabled libopencore_amrwb && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb
4258enabled libopencv && require_pkg_config opencv opencv/cxcore.h cvCreateImageHeader
4259enabled libopenjpeg && { check_lib openjpeg-1.5/openjpeg.h opj_version -lopenjpeg ||
4260 check_lib openjpeg.h opj_version -lopenjpeg ||
4261 die "ERROR: libopenjpeg not found"; }
4262enabled libopus && require_pkg_config opus opus_multistream.h opus_multistream_decoder_create
4263enabled libpulse && require_pkg_config libpulse-simple pulse/simple.h pa_simple_new
4264enabled libquvi && require_pkg_config libquvi quvi/quvi.h quvi_init
4265enabled librtmp && require_pkg_config librtmp librtmp/rtmp.h RTMP_Socket
4266enabled libschroedinger && require_pkg_config schroedinger-1.0 schroedinger/schro.h schro_init
4267enabled libshine && require_pkg_config shine shine/layer3.h shine_encode_buffer
4268enabled libsoxr && require libsoxr soxr.h soxr_create -lsoxr
4269enabled libssh && require_pkg_config libssh libssh/sftp.h sftp_init
4270enabled libspeex && require libspeex speex/speex.h speex_decoder_init -lspeex
4271enabled libstagefright_h264 && require_cpp libstagefright_h264 "binder/ProcessState.h media/stagefright/MetaData.h
4272 media/stagefright/MediaBufferGroup.h media/stagefright/MediaDebug.h media/stagefright/MediaDefs.h
4273 media/stagefright/OMXClient.h media/stagefright/OMXCodec.h" android::OMXClient -lstagefright -lmedia -lutils -lbinder -lgnustl_static
4274enabled libtheora && require libtheora theora/theoraenc.h th_info_init -ltheoraenc -ltheoradec -logg
4275enabled libtwolame && require libtwolame twolame.h twolame_init -ltwolame &&
4276 { check_lib twolame.h twolame_encode_buffer_float32_interleaved -ltwolame ||
4277 die "ERROR: libtwolame must be installed and version must be >= 0.3.10"; }
4278enabled libutvideo && require_cpp utvideo "stdint.h stdlib.h utvideo/utvideo.h utvideo/Codec.h" 'CCodec*' -lutvideo -lstdc++
4279enabled libv4l2 && require_pkg_config libv4l2 libv4l2.h v4l2_ioctl
4280enabled libvidstab && require_pkg_config vidstab vid.stab/libvidstab.h vsMotionDetectInit
4281enabled libvo_aacenc && require libvo_aacenc vo-aacenc/voAAC.h voGetAACEncAPI -lvo-aacenc
4282enabled libvo_amrwbenc && require libvo_amrwbenc vo-amrwbenc/enc_if.h E_IF_init -lvo-amrwbenc
4283enabled libvorbis && require libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
4284enabled libvpx && {
4285 enabled libvpx_vp8_decoder && { check_lib2 "vpx/vpx_decoder.h vpx/vp8dx.h" vpx_codec_dec_init_ver -lvpx ||
4286 die "ERROR: libvpx decoder version must be >=0.9.1"; }
4287 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 ||
4288 die "ERROR: libvpx encoder version must be >=0.9.7"; }
4289 enabled libvpx_vp9_decoder && { check_lib2 "vpx/vpx_decoder.h vpx/vp8dx.h" "vpx_codec_vp9_dx" -lvpx || disable libvpx_vp9_decoder; }
4290 enabled libvpx_vp9_encoder && { check_lib2 "vpx/vpx_encoder.h vpx/vp8cx.h" "vpx_codec_vp9_cx" -lvpx || disable libvpx_vp9_encoder; } }
4291enabled libwavpack && require libwavpack wavpack/wavpack.h WavpackOpenFileOutput -lwavpack
4292enabled libx264 && require libx264 x264.h x264_encoder_encode -lx264 &&
4293 { check_cpp_condition x264.h "X264_BUILD >= 118" ||
4294 die "ERROR: libx264 must be installed and version must be >= 0.118."; }
4295enabled libxavs && require libxavs xavs.h xavs_encoder_encode -lxavs
4296enabled libxvid && require libxvid xvid.h xvid_global -lxvidcore
4297enabled libzmq && require_pkg_config libzmq zmq.h zmq_ctx_new
4298enabled libzvbi && require libzvbi libzvbi.h vbi_decoder_new -lzvbi
4299enabled openal && { { for al_libs in "${OPENAL_LIBS}" "-lopenal" "-lOpenAL32"; do
4300 check_lib 'AL/al.h' alGetError "${al_libs}" && break; done } ||
4301 die "ERROR: openal not found"; } &&
4302 { check_cpp_condition "AL/al.h" "defined(AL_VERSION_1_1)" ||
4303 die "ERROR: openal must be installed and version must be 1.1 or compatible"; }
4304enabled opencl && { check_lib2 OpenCL/cl.h clEnqueueNDRangeKernel -Wl,-framework,OpenCL ||
4305 check_lib2 CL/cl.h clEnqueueNDRangeKernel -lOpenCL ||
4306 die "ERROR: opencl not found"; } &&
4307 { ! enabled_any w32threads os2threads ||
4308 die "opencl currently needs --enable-pthreads or --disable-w32threads"; } &&
4309 { check_cpp_condition "OpenCL/cl.h" "defined(CL_VERSION_1_2)" ||
4310 check_cpp_condition "CL/cl.h" "defined(CL_VERSION_1_2)" ||
4311 die "ERROR: opencl must be installed and version must be 1.2 or compatible"; }
4312enabled openssl && { check_lib openssl/ssl.h SSL_library_init -lssl -lcrypto ||
4313 check_lib openssl/ssl.h SSL_library_init -lssl32 -leay32 ||
4314 check_lib openssl/ssl.h SSL_library_init -lssl -lcrypto -lws2_32 -lgdi32 ||
4315 die "ERROR: openssl not found"; }
4316
4317if enabled gnutls; then
4318 { check_lib nettle/bignum.h nettle_mpz_get_str_256 -lnettle -lhogweed -lgmp && enable nettle; } ||
4319 { check_lib gcrypt.h gcry_mpi_new -lgcrypt && enable gcrypt; }
4320fi
4321
4322# libdc1394 check
4323if enabled libdc1394; then
4324 { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
4325 enable libdc1394_2; } ||
4326 { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
4327 enable libdc1394_1; } ||
4328 die "ERROR: No version of libdc1394 found "
4329fi
4330
4331SDL_CONFIG="${cross_prefix}sdl-config"
4332if check_pkg_config sdl SDL_events.h SDL_PollEvent; then
4333 check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
4334 check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) < 0x010300" $sdl_cflags &&
4335 enable sdl
4336else
4337 if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
4338 sdl_cflags=$("${SDL_CONFIG}" --cflags)
4339 sdl_libs=$("${SDL_CONFIG}" --libs)
4340 check_func_headers SDL_version.h SDL_Linked_Version $sdl_cflags $sdl_libs &&
4341 check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
4342 check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) < 0x010300" $sdl_cflags &&
4343 enable sdl
4344 fi
4345fi
4346enabled sdl && add_cflags $sdl_cflags && add_extralibs $sdl_libs
4347
4348texi2html --help 2> /dev/null | grep -q 'init-file' && enable texi2html || disable texi2html
4349makeinfo --version > /dev/null 2>&1 && enable makeinfo || disable makeinfo
4350perl --version > /dev/null 2>&1 && enable perl || disable perl
4351pod2man --help > /dev/null 2>&1 && enable pod2man || disable pod2man
4352rsync --help 2> /dev/null | grep -q 'contimeout' && enable rsync_contimeout || disable rsync_contimeout
4353
4354check_header linux/fb.h
4355check_header linux/videodev.h
4356check_header linux/videodev2.h
4357check_code cc linux/videodev2.h "struct v4l2_frmsizeenum vfse; vfse.discrete.width = 0;" && enable_safe struct_v4l2_frmivalenum_discrete
4358
4359check_header sys/videoio.h
4360
4361check_func_headers "windows.h vfw.h" capCreateCaptureWindow "$vfwcap_indev_extralibs"
4362# check that WM_CAP_DRIVER_CONNECT is defined to the proper value
4363# w32api 3.12 had it defined wrong
4364check_cpp_condition vfw.h "WM_CAP_DRIVER_CONNECT > WM_USER" && enable vfwcap_defines
4365
4366check_type "dshow.h" IBaseFilter
4367
4368# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
4369{ check_header dev/bktr/ioctl_meteor.h &&
4370 check_header dev/bktr/ioctl_bt848.h; } ||
4371{ check_header machine/ioctl_meteor.h &&
4372 check_header machine/ioctl_bt848.h; } ||
4373{ check_header dev/video/meteor/ioctl_meteor.h &&
4374 check_header dev/video/bktr/ioctl_bt848.h; } ||
4375check_header dev/ic/bt8xx.h
4376
4377check_header sndio.h
4378if check_struct sys/soundcard.h audio_buf_info bytes; then
4379 enable_safe sys/soundcard.h
4380else
4381 check_cc -D__BSD_VISIBLE -D__XSI_VISIBLE <<EOF && add_cppflags -D__BSD_VISIBLE -D__XSI_VISIBLE && enable_safe sys/soundcard.h
4382 #include <sys/soundcard.h>
4383 audio_buf_info abc;
4384EOF
4385fi
4386check_header soundcard.h
4387
4388enabled_any alsa_indev alsa_outdev &&
4389 check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
4390
4391enabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack && check_func sem_timedwait &&
4392 check_func jack_port_get_latency_range -ljack
4393
4394enabled_any sndio_indev sndio_outdev && check_lib2 sndio.h sio_open -lsndio
4395
4396if enabled libcdio; then
4397 check_lib2 "cdio/cdda.h cdio/paranoia.h" cdio_cddap_open -lcdio_paranoia -lcdio_cdda -lcdio ||
4398 check_lib2 "cdio/paranoia/cdda.h cdio/paranoia/paranoia.h" cdio_cddap_open -lcdio_paranoia -lcdio_cdda -lcdio ||
4399 die "ERROR: libcdio-paranoia not found"
4400fi
4401
4402enabled x11grab &&
4403require X11 X11/Xlib.h XOpenDisplay -lX11 &&
4404require Xext X11/extensions/XShm.h XShmCreateImage -lXext &&
4405require Xfixes X11/extensions/Xfixes.h XFixesGetCursorImage -lXfixes
4406
4407enabled vaapi &&
4408 check_lib va/va.h vaInitialize -lva ||
4409 disable vaapi
4410
4411enabled vdpau &&
4412 check_cpp_condition vdpau/vdpau.h "defined VDP_DECODER_PROFILE_MPEG4_PART2_ASP" ||
4413 disable vdpau
4414
4415# Funny iconv installations are not unusual, so check it after all flags have been set
4416disabled iconv || check_func_headers iconv.h iconv || check_lib2 iconv.h iconv -liconv || disable iconv
4417
4418enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel"
4419
4420# add some useful compiler flags if supported
4421check_cflags -Wdeclaration-after-statement
4422check_cflags -Wall
4423check_cflags -Wno-parentheses
4424check_cflags -Wno-switch
4425check_cflags -Wno-format-zero-length
4426check_cflags -Wdisabled-optimization
4427check_cflags -Wpointer-arith
4428check_cflags -Wredundant-decls
4429check_cflags -Wno-pointer-sign
4430check_cflags -Wwrite-strings
4431check_cflags -Wtype-limits
4432check_cflags -Wundef
4433check_cflags -Wmissing-prototypes
4434check_cflags -Wno-pointer-to-int-cast
4435check_cflags -Wstrict-prototypes
4436enabled extra_warnings && check_cflags -Winline
4437
4438# add some linker flags
4439check_ldflags -Wl,--warn-common
4440check_ldflags -Wl,-rpath-link=libpostproc:libswresample:libswscale:libavfilter:libavdevice:libavformat:libavcodec:libavutil:libavresample
4441test_ldflags -Wl,-Bsymbolic && append SHFLAGS -Wl,-Bsymbolic
4442
4443enabled xmm_clobber_test &&
4444 check_ldflags -Wl,--wrap,avcodec_open2 \
4445 -Wl,--wrap,avcodec_decode_audio4 \
4446 -Wl,--wrap,avcodec_decode_video2 \
4447 -Wl,--wrap,avcodec_decode_subtitle2 \
4448 -Wl,--wrap,avcodec_encode_audio2 \
4449 -Wl,--wrap,avcodec_encode_video \
4450 -Wl,--wrap,avcodec_encode_video2 \
4451 -Wl,--wrap,avcodec_encode_subtitle \
4452 -Wl,--wrap,sws_scale ||
4453 disable xmm_clobber_test
4454
4455echo "X{};" > $TMPV
4456if test_ldflags -Wl,--version-script,$TMPV; then
4457 append SHFLAGS '-Wl,--version-script,\$(SUBDIR)lib\$(NAME).ver'
4458 check_cc <<EOF && enable symver_asm_label
4459void ff_foo(void) __asm__ ("av_foo@VERSION");
4460void ff_foo(void) { ${inline_asm+__asm__($quotes);} }
4461EOF
4462 check_cc <<EOF && enable symver_gnu_asm
4463__asm__(".symver ff_foo,av_foo@VERSION");
4464void ff_foo(void) {}
4465EOF
4466fi
4467
4468if [ -z "$optflags" ]; then
4469 if enabled small; then
4470 optflags=$cflags_size
4471 elif enabled optimizations; then
4472 optflags=$cflags_speed
4473 else
4474 optflags=$cflags_noopt
4475 fi
4476fi
4477
4478check_optflags(){
4479 check_cflags "$@"
4480 enabled lto && check_ldflags "$@"
4481}
4482
4483
4484if enabled lto; then
4485 test "$cc_type" != "$ld_type" && die "LTO requires same compiler and linker"
4486 check_cflags -flto
4487 check_ldflags -flto $cpuflags
4488fi
4489
4490check_optflags $optflags
4491check_optflags -fno-math-errno
4492check_optflags -fno-signed-zeros
4493
4494enabled ftrapv && check_cflags -ftrapv
4495
4496check_cc -mno-red-zone <<EOF && noredzone_flags="-mno-red-zone"
4497int x;
4498EOF
4499
4500
4501if enabled icc; then
4502 # Just warnings, no remarks
4503 check_cflags -w1
4504 # -wd: Disable following warnings
4505 # 144, 167, 556: -Wno-pointer-sign
4506 # 188: enumerated type mixed with another type
4507 # 1292: attribute "foo" ignored
4508 # 1419: external declaration in primary source file
4509 # 10006: ignoring unknown option -fno-signed-zeros
4510 # 10148: ignoring unknown option -Wno-parentheses
4511 # 10156: ignoring option '-W'; no argument required
4512 check_cflags -wd144,167,188,556,1292,1419,10006,10148,10156
4513 # 11030: Warning unknown option --as-needed
4514 # 10156: ignoring option '-export'; no argument required
4515 check_ldflags -wd10156,11030
4516 # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
4517 enable ebp_available
4518 if enabled x86_32; then
4519 icc_version=$($cc -dumpversion)
4520 test ${icc_version%%.*} -ge 11 &&
4521 check_cflags -falign-stack=maintain-16-byte ||
4522 disable aligned_stack
4523 fi
4524elif enabled ccc; then
4525 # disable some annoying warnings
4526 add_cflags -msg_disable bitnotint
4527 add_cflags -msg_disable mixfuncvoid
4528 add_cflags -msg_disable nonstandcast
4529 add_cflags -msg_disable unsupieee
4530elif enabled gcc; then
4531 check_optflags -fno-tree-vectorize
4532 check_cflags -Werror=implicit-function-declaration
4533 check_cflags -Werror=missing-prototypes
4534 check_cflags -Werror=return-type
4535 check_cflags -Werror=vla
4536 enabled extra_warnings || check_cflags -Wno-maybe-uninitialized
4537elif enabled llvm_gcc; then
4538 check_cflags -mllvm -stack-alignment=16
4539elif enabled clang; then
4540 check_cflags -mllvm -stack-alignment=16
4541 check_cflags -Qunused-arguments
4542 check_cflags -Werror=implicit-function-declaration
4543 check_cflags -Werror=missing-prototypes
4544 check_cflags -Werror=return-type
4545elif enabled cparser; then
4546 add_cflags -Wno-missing-variable-declarations
4547 add_cflags -Wno-empty-statement
4548elif enabled armcc; then
4549 # 2523: use of inline assembler is deprecated
4550 add_cflags -W${armcc_opt},--diag_suppress=2523
4551 add_cflags -W${armcc_opt},--diag_suppress=1207
4552 add_cflags -W${armcc_opt},--diag_suppress=1293 # assignment in condition
4553 add_cflags -W${armcc_opt},--diag_suppress=3343 # hardfp compat
4554 add_cflags -W${armcc_opt},--diag_suppress=167 # pointer sign
4555 add_cflags -W${armcc_opt},--diag_suppress=513 # pointer sign
4556elif enabled tms470; then
4557 add_cflags -pds=824 -pds=837
4558elif enabled pathscale; then
4559 add_cflags -fstrict-overflow -OPT:wrap_around_unsafe_opt=OFF
4560elif enabled_any msvc icl; then
4561 enabled x86_32 && disable aligned_stack
4562 enabled_all x86_32 debug && add_cflags -Oy-
4563 enabled debug && add_ldflags -debug
4564 enable pragma_deprecated
4565 if enabled icl; then
4566 # -Qansi-alias is basically -fstrict-aliasing, but does not work
4567 # (correctly) on icl 13.x.
4568 check_cpp_condition "windows.h" "__ICL < 1300 || __ICL >= 1400" &&
4569 add_cflags -Qansi-alias
4570 # icl will pass the inline asm tests but inline asm is currently
4571 # not supported (build will fail)
4572 disabled inline_asm || warn "inline asm disabled due to issues with it in ICL"
4573 disable inline_asm
4574 fi
4575fi
4576
4577case $target_os in
4578 osf1)
4579 enabled ccc && add_ldflags '-Wl,-expect_unresolved,*'
4580 ;;
4581 plan9)
4582 add_cppflags -Dmain=plan9_main
4583 ;;
4584esac
4585
4586enable frame_thread_encoder
4587enabled_any $THREADS_LIST && enable threads
4588enabled_any $ATOMICS_LIST && enable atomics_native
4589
4590enabled 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"
4591
4592enabled asm || { arch=c; disable $ARCH_LIST $ARCH_EXT_LIST; }
4593
4594check_deps $CONFIG_LIST \
4595 $CONFIG_EXTRA \
4596 $HAVE_LIST \
4597 $ALL_COMPONENTS \
4598
4599
4600if test $target_os = "haiku"; then
4601 disable memalign
4602 disable posix_memalign
4603fi
4604
4605! enabled_any memalign posix_memalign aligned_malloc &&
4606 enabled_any $need_memalign && enable memalign_hack
4607
4608# add_dep lib dep
4609# -> enable ${lib}_deps_${dep}
4610# -> add $dep to ${lib}_deps only once
4611add_dep() {
4612 lib=$1
4613 dep=$2
4614 enabled "${lib}_deps_${dep}" && return 0
4615 enable "${lib}_deps_${dep}"
4616 prepend "${lib}_deps" $dep
4617}
4618
4619# merge deps lib components
4620# merge all ${component}_deps into ${lib}_deps and ${lib}_deps_*
4621merge_deps() {
4622 lib=$1
4623 shift
4624 for comp in $*; do
4625 enabled $comp || continue
4626 eval "dep=\"\$${comp}_deps\""
4627 for d in $dep; do
4628 add_dep $lib $d
4629 done
4630 done
4631}
4632
4633merge_deps libavfilter $FILTER_LIST
4634
4635echo "install prefix $prefix"
4636echo "source path $source_path"
4637echo "C compiler $cc"
4638echo "ARCH $arch ($cpu)"
4639if test "$build_suffix" != ""; then
4640 echo "build suffix $build_suffix"
4641fi
4642if test "$progs_suffix" != ""; then
4643 echo "progs suffix $progs_suffix"
4644fi
4645if test "$extra_version" != ""; then
4646 echo "version string suffix $extra_version"
4647fi
4648echo "big-endian ${bigendian-no}"
4649echo "runtime cpu detection ${runtime_cpudetect-no}"
4650if enabled x86; then
4651 echo "${yasmexe} ${yasm-no}"
4652 echo "MMX enabled ${mmx-no}"
4653 echo "MMXEXT enabled ${mmxext-no}"
4654 echo "3DNow! enabled ${amd3dnow-no}"
4655 echo "3DNow! extended enabled ${amd3dnowext-no}"
4656 echo "SSE enabled ${sse-no}"
4657 echo "SSSE3 enabled ${ssse3-no}"
4658 echo "AVX enabled ${avx-no}"
4659 echo "FMA4 enabled ${fma4-no}"
4660 echo "i686 features enabled ${i686-no}"
4661 echo "CMOV is fast ${fast_cmov-no}"
4662 echo "EBX available ${ebx_available-no}"
4663 echo "EBP available ${ebp_available-no}"
4664fi
4665if enabled arm; then
4666 echo "ARMv5TE enabled ${armv5te-no}"
4667 echo "ARMv6 enabled ${armv6-no}"
4668 echo "ARMv6T2 enabled ${armv6t2-no}"
4669 echo "VFP enabled ${vfp-no}"
4670 echo "NEON enabled ${neon-no}"
4671 echo "THUMB enabled ${thumb-no}"
4672fi
4673if enabled mips; then
4674 echo "MIPS FPU enabled ${mipsfpu-no}"
4675 echo "MIPS32R2 enabled ${mips32r2-no}"
4676 echo "MIPS DSP R1 enabled ${mipsdspr1-no}"
4677 echo "MIPS DSP R2 enabled ${mipsdspr2-no}"
4678fi
4679if enabled ppc; then
4680 echo "AltiVec enabled ${altivec-no}"
4681 echo "PPC 4xx optimizations ${ppc4xx-no}"
4682 echo "dcbzl available ${dcbzl-no}"
4683fi
4684if enabled sparc; then
4685 echo "VIS enabled ${vis-no}"
4686fi
4687echo "debug symbols ${debug-no}"
4688echo "strip symbols ${stripping-no}"
4689echo "optimize for size ${small-no}"
4690echo "optimizations ${optimizations-no}"
4691echo "static ${static-no}"
4692echo "shared ${shared-no}"
4693echo "postprocessing support ${postproc-no}"
4694echo "new filter support ${avfilter-no}"
4695echo "network support ${network-no}"
4696echo "threading support ${thread_type-no}"
4697echo "safe bitstream reader ${safe_bitstream_reader-no}"
4698echo "SDL support ${sdl-no}"
4699echo "opencl enabled ${opencl-no}"
4700echo "libzvbi enabled ${libzvbi-no}"
4701echo "texi2html enabled ${texi2html-no}"
4702echo "perl enabled ${perl-no}"
4703echo "pod2man enabled ${pod2man-no}"
4704echo "makeinfo enabled ${makeinfo-no}"
4705test -n "$random_seed" &&
4706 echo "random seed ${random_seed}"
4707echo
4708
4709echo "External libraries:"
4710print_enabled '' $EXTERNAL_LIBRARY_LIST | print_3_columns
4711echo
4712
4713for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
4714 echo "Enabled ${type}s:"
4715 eval list=\$$(toupper $type)_LIST
4716 print_enabled '_*' $list | print_3_columns
4717 echo
4718done
4719
4720license="LGPL version 2.1 or later"
4721if enabled nonfree; then
4722 license="nonfree and unredistributable"
4723elif enabled gplv3; then
4724 license="GPL version 3 or later"
4725elif enabled lgplv3; then
4726 license="LGPL version 3 or later"
4727elif enabled gpl; then
4728 license="GPL version 2 or later"
4729fi
4730
4731echo "License: $license"
4732
4733echo "Creating config.mak, config.h, and doc/config.texi..."
4734
4735test -e Makefile || $ln_s "$source_path/Makefile" .
4736
4737enabled stripping || strip="echo skipping strip"
4738
4739config_files="$TMPH config.mak doc/config.texi"
4740
4741cat > config.mak <<EOF
4742# Automatically generated by configure - do not modify!
4743ifndef FFMPEG_CONFIG_MAK
4744FFMPEG_CONFIG_MAK=1
4745FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION
4746prefix=$prefix
4747LIBDIR=\$(DESTDIR)$libdir
4748SHLIBDIR=\$(DESTDIR)$shlibdir
4749INCDIR=\$(DESTDIR)$incdir
4750BINDIR=\$(DESTDIR)$bindir
4751DATADIR=\$(DESTDIR)$datadir
4752DOCDIR=\$(DESTDIR)$docdir
4753MANDIR=\$(DESTDIR)$mandir
4754SRC_PATH=$source_path
4755ifndef MAIN_MAKEFILE
4756SRC_PATH:=\$(SRC_PATH:.%=..%)
4757endif
4758CC_IDENT=$cc_ident
4759ARCH=$arch
4760CC=$cc
4761CXX=$cxx
4762AS=$as
4763LD=$ld
4764DEPCC=$dep_cc
4765DEPCCFLAGS=$DEPCCFLAGS \$(CPPFLAGS)
4766DEPAS=$as
4767DEPASFLAGS=$DEPASFLAGS \$(CPPFLAGS)
4768YASM=$yasmexe
4769DEPYASM=$yasmexe
4770AR=$ar
4771ARFLAGS=$arflags
4772AR_O=$ar_o
4773RANLIB=$ranlib
4774STRIP=$strip
4775CP=cp -p
4776LN_S=$ln_s
4777CPPFLAGS=$CPPFLAGS
4778CFLAGS=$CFLAGS
4779CXXFLAGS=$CXXFLAGS
4780ASFLAGS=$ASFLAGS
4781AS_C=$AS_C
4782AS_O=$AS_O
4783CC_C=$CC_C
4784CC_E=$CC_E
4785CC_O=$CC_O
4786CXX_C=$CXX_C
4787CXX_O=$CXX_O
4788LD_O=$LD_O
4789LD_LIB=$LD_LIB
4790LD_PATH=$LD_PATH
4791DLLTOOL=$dlltool
4792LDFLAGS=$LDFLAGS
4793SHFLAGS=$(echo $($ldflags_filter $SHFLAGS))
4794YASMFLAGS=$YASMFLAGS
4795BUILDSUF=$build_suffix
4796PROGSSUF=$progs_suffix
4797FULLNAME=$FULLNAME
4798LIBPREF=$LIBPREF
4799LIBSUF=$LIBSUF
4800LIBNAME=$LIBNAME
4801SLIBPREF=$SLIBPREF
4802SLIBSUF=$SLIBSUF
4803EXESUF=$EXESUF
4804EXTRA_VERSION=$extra_version
4805CCDEP=$CCDEP
4806CXXDEP=$CXXDEP
4807CCDEP_FLAGS=$CCDEP_FLAGS
4808ASDEP=$ASDEP
4809ASDEP_FLAGS=$ASDEP_FLAGS
4810CC_DEPFLAGS=$CC_DEPFLAGS
4811AS_DEPFLAGS=$AS_DEPFLAGS
4812HOSTCC=$host_cc
4813HOSTLD=$host_ld
4814HOSTCFLAGS=$host_cflags
4815HOSTCPPFLAGS=$host_cppflags
4816HOSTEXESUF=$HOSTEXESUF
4817HOSTLDFLAGS=$host_ldflags
4818HOSTLIBS=$host_libs
4819DEPHOSTCC=$host_cc
4820DEPHOSTCCFLAGS=$DEPHOSTCCFLAGS \$(HOSTCCFLAGS)
4821HOSTCCDEP=$HOSTCCDEP
4822HOSTCCDEP_FLAGS=$HOSTCCDEP_FLAGS
4823HOSTCC_DEPFLAGS=$HOSTCC_DEPFLAGS
4824HOSTCC_C=$HOSTCC_C
4825HOSTCC_O=$HOSTCC_O
4826HOSTLD_O=$HOSTLD_O
4827TARGET_EXEC=$target_exec $target_exec_args
4828TARGET_PATH=$target_path
4829TARGET_SAMPLES=${target_samples:-\$(SAMPLES)}
4830LIBS-ffplay=$sdl_libs
4831CFLAGS-ffplay=$sdl_cflags
4832ZLIB=$($ldflags_filter -lz)
4833LIB_INSTALL_EXTRA_CMD=$LIB_INSTALL_EXTRA_CMD
4834EXTRALIBS=$extralibs
4835COMPAT_OBJS=$compat_objs
4836EXEOBJS=$exeobjs
4837INSTALL=$install
4838LIBTARGET=${LIBTARGET}
4839SLIBNAME=${SLIBNAME}
4840SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}
4841SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}
4842SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}
4843SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}
4844SLIB_INSTALL_NAME=${SLIB_INSTALL_NAME}
4845SLIB_INSTALL_LINKS=${SLIB_INSTALL_LINKS}
4846SLIB_INSTALL_EXTRA_LIB=${SLIB_INSTALL_EXTRA_LIB}
4847SLIB_INSTALL_EXTRA_SHLIB=${SLIB_INSTALL_EXTRA_SHLIB}
4848SAMPLES:=${samples:-\$(FATE_SAMPLES)}
4849NOREDZONE_FLAGS=$noredzone_flags
4850EOF
4851
4852get_version(){
4853 lcname=lib${1}
4854 name=$(toupper $lcname)
4855 file=$source_path/$lcname/version.h
4856 eval $(awk "/#define ${name}_VERSION_M/ { print \$2 \"=\" \$3 }" "$file")
4857 eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
4858 eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
4859 eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
4860 eval echo "${lcname}_VERSION_MINOR=\$${name}_VERSION_MINOR" >> config.mak
4861}
4862
4863map 'get_version $v' $LIBRARY_LIST
4864
4865cat > $TMPH <<EOF
4866/* Automatically generated by configure - do not modify! */
4867#ifndef FFMPEG_CONFIG_H
4868#define FFMPEG_CONFIG_H
4869#define FFMPEG_CONFIGURATION "$(c_escape $FFMPEG_CONFIGURATION)"
4870#define FFMPEG_LICENSE "$(c_escape $license)"
4871#define FFMPEG_DATADIR "$(eval c_escape $datadir)"
4872#define AVCONV_DATADIR "$(eval c_escape $datadir)"
4873#define CC_IDENT "$(c_escape ${cc_ident:-Unknown compiler})"
4874#define av_restrict $_restrict
4875#define EXTERN_PREFIX "${extern_prefix}"
4876#define EXTERN_ASM ${extern_prefix}
4877#define SLIBSUF "$SLIBSUF"
4878#define HAVE_MMX2 HAVE_MMXEXT
4879EOF
4880
4881test -n "$assert_level" &&
4882 echo "#define ASSERT_LEVEL $assert_level" >>$TMPH
4883
4884test -n "$malloc_prefix" &&
4885 echo "#define MALLOC_PREFIX $malloc_prefix" >>$TMPH
4886
4887if enabled yasm; then
4888 append config_files $TMPASM
4889 printf '' >$TMPASM
4890fi
4891
4892enabled getenv || echo "#define getenv(x) NULL" >> $TMPH
4893
4894
4895mkdir -p doc
4896echo "@c auto-generated by configure" > doc/config.texi
4897
4898print_config ARCH_ "$config_files" $ARCH_LIST
4899print_config HAVE_ "$config_files" $HAVE_LIST
4900print_config CONFIG_ "$config_files" $CONFIG_LIST \
4901 $CONFIG_EXTRA \
4902 $ALL_COMPONENTS \
4903
4904echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
4905echo "endif # FFMPEG_CONFIG_MAK" >> config.mak
4906
4907# Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
4908cp_if_changed $TMPH config.h
4909touch .config
4910
4911enabled yasm && cp_if_changed $TMPASM config.asm
4912
4913cat > $TMPH <<EOF
4914/* Generated by ffconf */
4915#ifndef AVUTIL_AVCONFIG_H
4916#define AVUTIL_AVCONFIG_H
4917EOF
4918
4919print_config AV_HAVE_ $TMPH $HAVE_LIST_PUB
4920
4921echo "#endif /* AVUTIL_AVCONFIG_H */" >> $TMPH
4922
4923cp_if_changed $TMPH libavutil/avconfig.h
4924
4925if test -n "$WARNINGS"; then
4926 printf "\n$WARNINGS"
4927 enabled fatal_warnings && exit 1
4928fi
4929
4930# build pkg-config files
4931
4932pkgconfig_generate(){
4933 name=$1
4934 shortname=${name#lib}${build_suffix}
4935 comment=$2
4936 version=$3
4937 libs=$4
4938 requires=$5
4939 enabled ${name#lib} || return 0
4940 mkdir -p $name
4941 cat <<EOF > $name/$name${build_suffix}.pc
4942prefix=$prefix
4943exec_prefix=\${prefix}
4944libdir=$libdir
4945includedir=$incdir
4946
4947Name: $name
4948Description: $comment
4949Version: $version
4950Requires: $(enabled shared || echo $requires)
4951Requires.private: $(enabled shared && echo $requires)
4952Conflicts:
4953Libs: -L\${libdir} -l${shortname} $(enabled shared || echo $libs)
4954Libs.private: $(enabled shared && echo $libs)
4955Cflags: -I\${includedir}
4956EOF
4957
4958mkdir -p doc/examples/pc-uninstalled
4959includedir=${source_path}
4960[ "$includedir" = . ] && includedir="\${pcfiledir}/../../.."
4961 cat <<EOF > doc/examples/pc-uninstalled/$name.pc
4962prefix=
4963exec_prefix=
4964libdir=\${pcfiledir}/../../../$name
4965includedir=${includedir}
4966
4967Name: $name
4968Description: $comment
4969Version: $version
4970Requires: $requires
4971Conflicts:
4972Libs: -L\${libdir} -Wl,-rpath,\${libdir} -l${shortname} $(enabled shared || echo $libs)
4973Cflags: -I\${includedir}
4974EOF
4975}
4976
4977lavfi_libs="libavutil${build_suffix} = $LIBAVUTIL_VERSION"
4978enabled libavfilter_deps_avcodec && prepend lavfi_libs "libavcodec${build_suffix} = $LIBAVCODEC_VERSION,"
4979enabled libavfilter_deps_avformat && prepend lavfi_libs "libavformat${build_suffix} = $LIBAVFORMAT_VERSION,"
4980enabled libavfilter_deps_avresample && prepend lavfi_libs "libavresample${build_suffix} = $LIBAVRESAMPLE_VERSION,"
4981enabled libavfilter_deps_swscale && prepend lavfi_libs "libswscale${build_suffix} = $LIBSWSCALE_VERSION,"
4982enabled libavfilter_deps_swresample && prepend lavfi_libs "libswresample${build_suffix} = $LIBSWRESAMPLE_VERSION,"
4983enabled libavfilter_deps_postproc && prepend lavfi_libs "libpostproc${build_suffix} = $LIBPOSTPROC_VERSION,"
4984lavfi_libs=${lavfi_libs%, }
4985
4986lavd_libs="libavformat${build_suffix} = $LIBAVFORMAT_VERSION"
4987enabled lavfi_indev && prepend lavd_libs "libavfilter${build_suffix} = $LIBAVFILTER_VERSION,"
4988
4989pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION" "$LIBM"
4990pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavutil${build_suffix} = $LIBAVUTIL_VERSION"
4991pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec${build_suffix} = $LIBAVCODEC_VERSION"
4992pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "$lavd_libs"
4993pkgconfig_generate libavfilter "FFmpeg audio/video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "$lavfi_libs"
4994pkgconfig_generate libpostproc "FFmpeg postprocessing library" "$LIBPOSTPROC_VERSION" "" "libavutil${build_suffix} = $LIBAVUTIL_VERSION"
4995pkgconfig_generate libavresample "Libav audio resampling library" "$LIBAVRESAMPLE_VERSION" "$extralibs" "libavutil${build_suffix} = $LIBAVUTIL_VERSION"
4996pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "$LIBM" "libavutil${build_suffix} = $LIBAVUTIL_VERSION"
4997pkgconfig_generate libswresample "FFmpeg audio resampling library" "$LIBSWRESAMPLE_VERSION" "$LIBM" "libavutil${build_suffix} = $LIBAVUTIL_VERSION"
4998
4999fix_ffmpeg_remote(){
5000 git_remote_from=$1
5001 git_remote_to=$2
5002 fixme_remote=$(git --git-dir=$source_path/.git --work-tree=$source_path remote -v | grep $git_remote_from | cut -f 1 | sort | uniq)
5003 if [ "$fixme_remote" != "" ]; then
5004 echolog "
5005Outdated domain in git config, the official domain for ffmpeg git is since
5006November 2011, source.ffmpeg.org, both the old and the new point to the same
5007repository and server. To update it enter the following commands:
5008"
5009 for remote in $fixme_remote; do
5010 echolog "git remote set-url $remote $git_remote_to"
5011 done
5012 fi
5013}
5014
5015if test -f "$source_path/.git/config"; then
5016 remote_from=git.videolan.org
5017 remote_to=source.ffmpeg.org
5018 fix_ffmpeg_remote git@$remote_from:ffmpeg git@$remote_to:ffmpeg
5019 fix_ffmpeg_remote git://$remote_from/ffmpeg git://$remote_to/ffmpeg
5020fi
5021