summaryrefslogtreecommitdiff
path: root/configure (plain)
blob: 25d58da657b4d4f08f43edcfc0ebe75314f0bf31
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 section_data_rel_ro
1518 SetConsoleTextAttribute
1519 setmode
1520 setrlimit
1521 Sleep
1522 sndio_h
1523 socklen_t
1524 soundcard_h
1525 strerror_r
1526 struct_addrinfo
1527 struct_group_source_req
1528 struct_ip_mreq_source
1529 struct_ipv6_mreq
1530 struct_pollfd
1531 struct_rusage_ru_maxrss
1532 struct_sctp_event_subscribe
1533 struct_sockaddr_in6
1534 struct_sockaddr_sa_len
1535 struct_sockaddr_storage
1536 struct_stat_st_mtim_tv_nsec
1537 struct_v4l2_frmivalenum_discrete
1538 symver_asm_label
1539 symver_gnu_asm
1540 sync_val_compare_and_swap
1541 sysconf
1542 sysctl
1543 sys_mman_h
1544 sys_param_h
1545 sys_resource_h
1546 sys_select_h
1547 sys_soundcard_h
1548 sys_time_h
1549 sys_un_h
1550 sys_videoio_h
1551 termios_h
1552 texi2html
1553 threads
1554 unistd_h
1555 usleep
1556 vfp_args
1557 VirtualAlloc
1558 windows_h
1559 winsock2_h
1560 xform_asm
1561 xmm_clobbers
1562"
1563
1564# options emitted with CONFIG_ prefix but not available on the command line
1565CONFIG_EXTRA="
1566 aandcttables
1567 ac3dsp
1568 audio_frame_queue
1569 dsputil
1570 exif
1571 frame_thread_encoder
1572 gcrypt
1573 golomb
1574 gplv3
1575 h264chroma
1576 h264dsp
1577 h264pred
1578 h264qpel
1579 hpeldsp
1580 huffman
1581 lgplv3
1582 lpc
1583 mpegaudio
1584 mpegaudiodsp
1585 mpegvideo
1586 mpegvideoenc
1587 nettle
1588 rangecoder
1589 riffdec
1590 riffenc
1591 rtpdec
1592 rtpenc_chain
1593 sinewin
1594 videodsp
1595 vp3dsp
1596"
1597
1598CMDLINE_SELECT="
1599 $ARCH_EXT_LIST
1600 $CONFIG_LIST
1601 $HAVE_LIST_CMDLINE
1602 $THREADS_LIST
1603 asm
1604 cross_compile
1605 debug
1606 extra_warnings
1607 logging
1608 lto
1609 optimizations
1610 stripping
1611"
1612
1613PATHS_LIST='
1614 bindir
1615 datadir
1616 docdir
1617 incdir
1618 libdir
1619 mandir
1620 prefix
1621 shlibdir
1622'
1623
1624CMDLINE_SET="
1625 $PATHS_LIST
1626 ar
1627 arch
1628 as
1629 assert_level
1630 build_suffix
1631 cc
1632 cpu
1633 cross_prefix
1634 cxx
1635 dep_cc
1636 extra_version
1637 host_cc
1638 host_cflags
1639 host_ld
1640 host_ldflags
1641 host_libs
1642 host_os
1643 install
1644 ld
1645 logfile
1646 malloc_prefix
1647 nm
1648 optflags
1649 pkg_config
1650 progs_suffix
1651 random_seed
1652 samples
1653 strip
1654 sysinclude
1655 sysroot
1656 target_exec
1657 target_os
1658 target_path
1659 target_samples
1660 tempprefix
1661 toolchain
1662 valgrind
1663 yasmexe
1664"
1665
1666CMDLINE_APPEND="
1667 extra_cflags
1668 extra_cxxflags
1669 host_cppflags
1670"
1671
1672# code dependency declarations
1673
1674# architecture extensions
1675
1676armv5te_deps="arm"
1677armv6_deps="arm"
1678armv6t2_deps="arm"
1679neon_deps="arm"
1680vfp_deps="arm"
1681vfpv3_deps="vfp"
1682
1683map 'eval ${v}_inline_deps=inline_asm' $ARCH_EXT_LIST_ARM
1684
1685mipsfpu_deps="mips"
1686mips32r2_deps="mips"
1687mipsdspr1_deps="mips"
1688mipsdspr2_deps="mips"
1689
1690altivec_deps="ppc"
1691ppc4xx_deps="ppc"
1692
1693vis_deps="sparc"
1694
1695cpunop_deps="i686"
1696x86_64_select="i686"
1697x86_64_suggest="fast_cmov"
1698
1699amd3dnow_deps="mmx"
1700amd3dnowext_deps="amd3dnow"
1701mmx_deps="x86"
1702mmxext_deps="mmx"
1703sse_deps="mmxext"
1704sse2_deps="sse"
1705sse3_deps="sse2"
1706ssse3_deps="sse3"
1707sse4_deps="ssse3"
1708sse42_deps="sse4"
1709avx_deps="sse42"
1710fma4_deps="avx"
1711avx2_deps="avx"
1712
1713mmx_external_deps="yasm"
1714mmx_inline_deps="inline_asm"
1715mmx_suggest="mmx_external mmx_inline"
1716
1717for ext in $(filter_out mmx $ARCH_EXT_LIST_X86); do
1718 eval dep=\$${ext}_deps
1719 eval ${ext}_external_deps='"${dep}_external"'
1720 eval ${ext}_inline_deps='"${dep}_inline"'
1721 eval ${ext}_suggest='"${ext}_external ${ext}_inline"'
1722done
1723
1724aligned_stack_if_any="ppc x86"
1725fast_64bit_if_any="alpha ia64 mips64 parisc64 ppc64 sparc64 x86_64"
1726fast_clz_if_any="alpha avr32 mips ppc x86"
1727fast_unaligned_if_any="ppc x86"
1728
1729inline_asm_deps="!tms470"
1730need_memalign="altivec neon sse"
1731
1732symver_if_any="symver_asm_label symver_gnu_asm"
1733
1734log2_deps="!msvcrt"
1735
1736# subsystems
1737dct_select="rdft"
1738error_resilience_select="dsputil"
1739frame_thread_encoder_deps="encoders threads"
1740lpc_select="dsputil"
1741mdct_select="fft"
1742rdft_select="fft"
1743mpegaudio_select="mpegaudiodsp"
1744mpegaudiodsp_select="dct"
1745mpegvideo_select="dsputil h264chroma hpeldsp videodsp"
1746mpegvideoenc_select="mpegvideo"
1747
1748# decoders / encoders
1749aac_decoder_select="mdct sinewin"
1750aac_encoder_select="audio_frame_queue mdct sinewin"
1751aac_latm_decoder_select="aac_decoder aac_latm_parser"
1752ac3_decoder_select="mdct ac3dsp ac3_parser dsputil"
1753ac3_encoder_select="mdct ac3dsp dsputil"
1754ac3_fixed_encoder_select="mdct ac3dsp dsputil"
1755aic_decoder_select="dsputil golomb"
1756alac_encoder_select="lpc"
1757als_decoder_select="dsputil"
1758amrnb_decoder_select="lsp"
1759amrwb_decoder_select="lsp"
1760amv_decoder_select="dsputil hpeldsp exif"
1761amv_encoder_select="aandcttables"
1762ape_decoder_select="dsputil"
1763asv1_decoder_select="dsputil"
1764asv1_encoder_select="dsputil"
1765asv2_decoder_select="dsputil"
1766asv2_encoder_select="dsputil"
1767atrac1_decoder_select="mdct sinewin"
1768atrac3_decoder_select="mdct"
1769avrn_decoder_select="exif"
1770bink_decoder_select="dsputil hpeldsp"
1771binkaudio_dct_decoder_select="mdct rdft dct sinewin"
1772binkaudio_rdft_decoder_select="mdct rdft sinewin"
1773cavs_decoder_select="dsputil golomb h264chroma videodsp"
1774cllc_decoder_select="dsputil"
1775comfortnoise_encoder_select="lpc"
1776cook_decoder_select="dsputil mdct sinewin"
1777cscd_decoder_select="lzo"
1778cscd_decoder_suggest="zlib"
1779dca_decoder_select="mdct"
1780dirac_decoder_select="dsputil dwt golomb videodsp"
1781dnxhd_decoder_select="dsputil"
1782dnxhd_encoder_select="aandcttables dsputil mpegvideoenc"
1783dvvideo_decoder_select="dsputil"
1784dvvideo_encoder_select="dsputil"
1785dxa_decoder_select="zlib"
1786eac3_decoder_select="ac3_decoder"
1787eac3_encoder_select="ac3_encoder"
1788eamad_decoder_select="aandcttables dsputil mpegvideo"
1789eatgq_decoder_select="aandcttables"
1790eatqi_decoder_select="aandcttables error_resilience mpegvideo"
1791exr_decoder_select="zlib"
1792ffv1_decoder_select="dsputil golomb rangecoder"
1793ffv1_encoder_select="dsputil rangecoder"
1794ffvhuff_decoder_select="dsputil"
1795ffvhuff_encoder_select="dsputil huffman"
1796flac_decoder_select="golomb"
1797flac_encoder_select="dsputil golomb lpc"
1798flashsv_decoder_select="zlib"
1799flashsv_encoder_select="zlib"
1800flashsv2_encoder_select="zlib"
1801flashsv2_decoder_select="zlib"
1802flv_decoder_select="h263_decoder"
1803flv_encoder_select="h263_encoder"
1804fourxm_decoder_select="dsputil"
1805fraps_decoder_select="dsputil huffman"
1806g2m_decoder_select="dsputil zlib"
1807g729_decoder_select="dsputil"
1808h261_decoder_select="error_resilience mpegvideo"
1809h261_encoder_select="aandcttables mpegvideoenc"
1810h263_decoder_select="error_resilience h263_parser mpegvideo"
1811h263_encoder_select="aandcttables mpegvideoenc"
1812h263i_decoder_select="h263_decoder"
1813h263p_encoder_select="h263_encoder"
1814h264_decoder_select="golomb h264chroma h264dsp h264pred h264qpel videodsp"
1815h264_decoder_suggest="error_resilience"
1816hevc_decoder_select="dsputil golomb videodsp"
1817huffyuv_decoder_select="dsputil"
1818huffyuv_encoder_select="dsputil huffman"
1819iac_decoder_select="dsputil fft mdct sinewin"
1820imc_decoder_select="dsputil fft mdct sinewin"
1821indeo3_decoder_select="hpeldsp"
1822interplay_video_decoder_select="hpeldsp"
1823jpegls_decoder_select="dsputil golomb hpeldsp exif"
1824jpegls_encoder_select="golomb"
1825jv_decoder_select="dsputil"
1826lagarith_decoder_select="dsputil"
1827ljpeg_encoder_select="aandcttables mpegvideoenc"
1828loco_decoder_select="golomb"
1829mdec_decoder_select="dsputil error_resilience mpegvideo"
1830metasound_decoder_select="lsp mdct sinewin"
1831mimic_decoder_select="dsputil hpeldsp"
1832mjpeg_decoder_select="dsputil hpeldsp exif"
1833mjpegb_decoder_select="dsputil hpeldsp exif"
1834mjpeg_encoder_select="aandcttables dsputil mpegvideoenc"
1835mlp_decoder_select="dsputil mlp_parser"
1836motionpixels_decoder_select="dsputil"
1837mp1_decoder_select="mpegaudio"
1838mp1float_decoder_select="mpegaudio"
1839mp2_decoder_select="mpegaudio"
1840mp2float_decoder_select="mpegaudio"
1841mp3_decoder_select="mpegaudio"
1842mp3adu_decoder_select="mpegaudio"
1843mp3adufloat_decoder_select="mpegaudio"
1844mp3float_decoder_select="mpegaudio"
1845mp3on4_decoder_select="mpegaudio"
1846mp3on4float_decoder_select="mpegaudio"
1847mpc7_decoder_select="dsputil mpegaudiodsp"
1848mpc8_decoder_select="dsputil mpegaudiodsp"
1849mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h"
1850mpeg_xvmc_decoder_select="mpeg2video_decoder"
1851mpeg1video_decoder_select="error_resilience mpegvideo"
1852mpeg1video_encoder_select="aandcttables mpegvideoenc"
1853mpeg2video_decoder_select="error_resilience mpegvideo"
1854mpeg2video_encoder_select="aandcttables mpegvideoenc"
1855mpeg4_decoder_select="h263_decoder mpeg4video_parser"
1856mpeg4_encoder_select="h263_encoder"
1857msmpeg4v1_decoder_select="h263_decoder"
1858msmpeg4v2_decoder_select="h263_decoder"
1859msmpeg4v2_encoder_select="h263_encoder"
1860msmpeg4v3_decoder_select="h263_decoder"
1861msmpeg4v3_encoder_select="h263_encoder"
1862mss2_decoder_select="error_resilience vc1_decoder"
1863mxpeg_decoder_select="dsputil hpeldsp exif"
1864nellymoser_decoder_select="mdct sinewin"
1865nellymoser_encoder_select="audio_frame_queue mdct sinewin"
1866nuv_decoder_select="dsputil lzo"
1867png_decoder_select="zlib"
1868png_encoder_select="dsputil zlib"
1869prores_decoder_select="dsputil"
1870prores_encoder_select="dsputil"
1871qcelp_decoder_select="lsp"
1872qdm2_decoder_select="mdct rdft mpegaudiodsp"
1873ra_144_encoder_select="audio_frame_queue lpc"
1874ralf_decoder_select="golomb"
1875rtjpeg_decoder_select="dsputil"
1876rv10_decoder_select="error_resilience h263_decoder"
1877rv10_encoder_select="h263_encoder"
1878rv20_decoder_select="error_resilience h263_decoder"
1879rv20_encoder_select="h263_encoder"
1880rv30_decoder_select="error_resilience golomb h264chroma h264pred h264qpel mpegvideo videodsp"
1881rv40_decoder_select="error_resilience golomb h264chroma h264pred h264qpel mpegvideo videodsp"
1882shorten_decoder_select="golomb"
1883sipr_decoder_select="lsp"
1884snow_decoder_select="dsputil dwt h264qpel hpeldsp rangecoder"
1885snow_encoder_select="aandcttables dsputil dwt h264qpel hpeldsp mpegvideoenc rangecoder"
1886sonic_decoder_select="golomb"
1887sonic_encoder_select="golomb"
1888sonic_ls_encoder_select="golomb"
1889sp5x_decoder_select="dsputil hpeldsp exif"
1890svq1_decoder_select="hpeldsp"
1891svq1_encoder_select="aandcttables dsputil hpeldsp mpegvideoenc"
1892svq3_decoder_select="golomb h264chroma h264dsp h264pred h264qpel hpeldsp mpegvideo videodsp"
1893svq3_decoder_suggest="error_resilience zlib"
1894tak_decoder_select="dsputil"
1895theora_decoder_select="vp3_decoder"
1896tiff_decoder_suggest="zlib"
1897tiff_encoder_suggest="zlib"
1898thp_decoder_select="dsputil hpeldsp exif"
1899truehd_decoder_select="mlp_parser"
1900truemotion2_decoder_select="dsputil"
1901truespeech_decoder_select="dsputil"
1902tscc_decoder_select="zlib"
1903twinvq_decoder_select="mdct lsp sinewin"
1904utvideo_decoder_select="dsputil"
1905utvideo_encoder_select="dsputil huffman"
1906vble_decoder_select="dsputil"
1907vc1_decoder_select="error_resilience h263_decoder h264chroma h264qpel"
1908vc1image_decoder_select="vc1_decoder"
1909vorbis_decoder_select="mdct"
1910vorbis_encoder_select="mdct"
1911vp3_decoder_select="hpeldsp vp3dsp videodsp"
1912vp5_decoder_select="h264chroma hpeldsp videodsp vp3dsp"
1913vp6_decoder_select="h264chroma hpeldsp huffman videodsp vp3dsp"
1914vp6a_decoder_select="vp6_decoder"
1915vp6f_decoder_select="vp6_decoder"
1916vp8_decoder_select="h264pred videodsp"
1917vp9_decoder_select="videodsp"
1918webp_decoder_select="vp8_decoder"
1919wmapro_decoder_select="mdct sinewin"
1920wmav1_decoder_select="mdct sinewin"
1921wmav1_encoder_select="mdct sinewin"
1922wmav2_decoder_select="mdct sinewin"
1923wmav2_encoder_select="mdct sinewin"
1924wmavoice_decoder_select="lsp rdft dct mdct sinewin"
1925wmv1_decoder_select="h263_decoder"
1926wmv1_encoder_select="h263_encoder"
1927wmv2_decoder_select="h263_decoder videodsp"
1928wmv2_encoder_select="h263_encoder"
1929wmv3_decoder_select="vc1_decoder"
1930wmv3image_decoder_select="wmv3_decoder"
1931zerocodec_decoder_select="zlib"
1932zlib_decoder_select="zlib"
1933zlib_encoder_select="zlib"
1934zmbv_decoder_select="zlib"
1935zmbv_encoder_select="zlib"
1936
1937# hardware accelerators
1938crystalhd_deps="libcrystalhd_libcrystalhd_if_h"
1939dxva2_deps="dxva2api_h"
1940vaapi_deps="va_va_h"
1941vda_deps="VideoDecodeAcceleration_VDADecoder_h pthreads"
1942vda_extralibs="-framework CoreFoundation -framework VideoDecodeAcceleration -framework QuartzCore"
1943vdpau_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1944
1945h263_vaapi_hwaccel_deps="vaapi"
1946h263_vaapi_hwaccel_select="h263_decoder"
1947h263_vdpau_hwaccel_deps="vdpau"
1948h263_vdpau_hwaccel_select="h263_decoder"
1949h264_crystalhd_decoder_select="crystalhd h264_mp4toannexb_bsf h264_parser"
1950h264_dxva2_hwaccel_deps="dxva2"
1951h264_dxva2_hwaccel_select="h264_decoder"
1952h264_vaapi_hwaccel_deps="vaapi"
1953h264_vaapi_hwaccel_select="h264_decoder"
1954h264_vda_decoder_deps="vda"
1955h264_vda_decoder_select="h264_decoder"
1956h264_vda_hwaccel_deps="vda"
1957h264_vda_hwaccel_select="h264_decoder"
1958h264_vdpau_decoder_deps="vdpau"
1959h264_vdpau_decoder_select="h264_decoder"
1960h264_vdpau_hwaccel_deps="vdpau"
1961h264_vdpau_hwaccel_select="h264_decoder"
1962mpeg_vdpau_decoder_deps="vdpau"
1963mpeg_vdpau_decoder_select="mpeg2video_decoder"
1964mpeg1_vdpau_decoder_deps="vdpau"
1965mpeg1_vdpau_decoder_select="mpeg1video_decoder"
1966mpeg1_vdpau_hwaccel_deps="vdpau"
1967mpeg1_vdpau_hwaccel_select="mpeg1video_decoder"
1968mpeg2_crystalhd_decoder_select="crystalhd"
1969mpeg2_dxva2_hwaccel_deps="dxva2"
1970mpeg2_dxva2_hwaccel_select="mpeg2video_decoder"
1971mpeg2_vaapi_hwaccel_deps="vaapi"
1972mpeg2_vaapi_hwaccel_select="mpeg2video_decoder"
1973mpeg2_vdpau_hwaccel_deps="vdpau"
1974mpeg2_vdpau_hwaccel_select="mpeg2video_decoder"
1975mpeg4_crystalhd_decoder_select="crystalhd"
1976mpeg4_vaapi_hwaccel_deps="vaapi"
1977mpeg4_vaapi_hwaccel_select="mpeg4_decoder"
1978mpeg4_vdpau_decoder_deps="vdpau"
1979mpeg4_vdpau_decoder_select="mpeg4_decoder"
1980mpeg4_vdpau_hwaccel_deps="vdpau"
1981mpeg4_vdpau_hwaccel_select="mpeg4_decoder"
1982msmpeg4_crystalhd_decoder_select="crystalhd"
1983vc1_crystalhd_decoder_select="crystalhd"
1984vc1_dxva2_hwaccel_deps="dxva2"
1985vc1_dxva2_hwaccel_select="vc1_decoder"
1986vc1_vaapi_hwaccel_deps="vaapi"
1987vc1_vaapi_hwaccel_select="vc1_decoder"
1988vc1_vdpau_decoder_deps="vdpau"
1989vc1_vdpau_decoder_select="vc1_decoder"
1990vc1_vdpau_hwaccel_deps="vdpau"
1991vc1_vdpau_hwaccel_select="vc1_decoder"
1992wmv3_crystalhd_decoder_select="crystalhd"
1993wmv3_dxva2_hwaccel_select="vc1_dxva2_hwaccel"
1994wmv3_vaapi_hwaccel_select="vc1_vaapi_hwaccel"
1995wmv3_vdpau_decoder_select="vc1_vdpau_decoder"
1996wmv3_vdpau_hwaccel_select="vc1_vdpau_hwaccel"
1997
1998# parsers
1999h264_parser_select="golomb h264chroma h264dsp h264pred h264qpel videodsp"
2000mpeg4video_parser_select="error_resilience mpegvideo"
2001mpegvideo_parser_select="error_resilience mpegvideo"
2002vc1_parser_select="mpegvideo"
2003
2004# external libraries
2005libaacplus_encoder_deps="libaacplus"
2006libcelt_decoder_deps="libcelt"
2007libfaac_encoder_deps="libfaac"
2008libfaac_encoder_select="audio_frame_queue"
2009libfdk_aac_decoder_deps="libfdk_aac"
2010libfdk_aac_encoder_deps="libfdk_aac"
2011libfdk_aac_encoder_select="audio_frame_queue"
2012libgme_demuxer_deps="libgme"
2013libgsm_decoder_deps="libgsm"
2014libgsm_encoder_deps="libgsm"
2015libgsm_ms_decoder_deps="libgsm"
2016libgsm_ms_encoder_deps="libgsm"
2017libilbc_decoder_deps="libilbc"
2018libilbc_encoder_deps="libilbc"
2019libmodplug_demuxer_deps="libmodplug"
2020libmp3lame_encoder_deps="libmp3lame"
2021libmp3lame_encoder_select="audio_frame_queue"
2022libopencore_amrnb_decoder_deps="libopencore_amrnb"
2023libopencore_amrnb_encoder_deps="libopencore_amrnb"
2024libopencore_amrnb_encoder_select="audio_frame_queue"
2025libopencore_amrwb_decoder_deps="libopencore_amrwb"
2026libopenjpeg_decoder_deps="libopenjpeg"
2027libopenjpeg_encoder_deps="libopenjpeg"
2028libopus_decoder_deps="libopus"
2029libopus_encoder_deps="libopus"
2030libopus_encoder_select="audio_frame_queue"
2031libquvi_demuxer_deps="libquvi"
2032libschroedinger_decoder_deps="libschroedinger"
2033libschroedinger_encoder_deps="libschroedinger"
2034libshine_encoder_deps="libshine"
2035libshine_encoder_select="audio_frame_queue"
2036libspeex_decoder_deps="libspeex"
2037libspeex_encoder_deps="libspeex"
2038libspeex_encoder_select="audio_frame_queue"
2039libstagefright_h264_decoder_deps="libstagefright_h264"
2040libtheora_encoder_deps="libtheora"
2041libtwolame_encoder_deps="libtwolame"
2042libvo_aacenc_encoder_deps="libvo_aacenc"
2043libvo_aacenc_encoder_select="audio_frame_queue"
2044libvo_amrwbenc_encoder_deps="libvo_amrwbenc"
2045libvorbis_decoder_deps="libvorbis"
2046libvorbis_encoder_deps="libvorbis"
2047libvorbis_encoder_select="audio_frame_queue"
2048libvpx_vp8_decoder_deps="libvpx"
2049libvpx_vp8_encoder_deps="libvpx"
2050libvpx_vp9_decoder_deps="libvpx"
2051libvpx_vp9_encoder_deps="libvpx"
2052libwavpack_encoder_deps="libwavpack"
2053libx264_encoder_deps="libx264"
2054libx264rgb_encoder_deps="libx264"
2055libxavs_encoder_deps="libxavs"
2056libxvid_encoder_deps="libxvid"
2057libutvideo_decoder_deps="libutvideo"
2058libutvideo_encoder_deps="libutvideo"
2059libzvbi_teletext_decoder_deps="libzvbi"
2060
2061# demuxers / muxers
2062ac3_demuxer_select="ac3_parser"
2063asf_demuxer_select="riffdec"
2064asf_muxer_select="riffenc"
2065asf_stream_muxer_select="asf_muxer"
2066avi_demuxer_select="riffdec"
2067avi_muxer_select="riffenc"
2068avisynth_demuxer_deps="avisynth"
2069avisynth_demuxer_select="riffdec"
2070caf_demuxer_select="riffdec"
2071dirac_demuxer_select="dirac_parser"
2072dts_demuxer_select="dca_parser"
2073dtshd_demuxer_select="dca_parser"
2074dxa_demuxer_select="riffdec"
2075eac3_demuxer_select="ac3_parser"
2076f4v_muxer_select="mov_muxer"
2077flac_demuxer_select="flac_parser"
2078hls_muxer_select="mpegts_muxer"
2079ipod_muxer_select="mov_muxer"
2080ismv_muxer_select="mov_muxer"
2081libnut_demuxer_deps="libnut"
2082libnut_muxer_deps="libnut"
2083matroska_audio_muxer_select="matroska_muxer"
2084matroska_demuxer_select="riffdec"
2085matroska_demuxer_suggest="bzlib lzo zlib"
2086matroska_muxer_select="riffenc"
2087mmf_muxer_select="riffenc"
2088mov_demuxer_select="riffdec"
2089mov_demuxer_suggest="zlib"
2090mov_muxer_select="riffenc rtpenc_chain"
2091mp3_demuxer_select="mpegaudio_parser"
2092mp4_muxer_select="mov_muxer"
2093mpegts_muxer_select="adts_muxer latm_muxer"
2094mpegtsraw_demuxer_select="mpegts_demuxer"
2095mxf_d10_muxer_select="mxf_muxer"
2096nut_muxer_select="riffenc"
2097nuv_demuxer_select="riffdec"
2098ogg_demuxer_select="golomb"
2099psp_muxer_select="mov_muxer"
2100rtp_demuxer_select="sdp_demuxer"
2101rtpdec_select="asf_demuxer rm_demuxer rtp_protocol mpegts_demuxer mov_demuxer"
2102rtsp_demuxer_select="http_protocol rtpdec"
2103rtsp_muxer_select="rtp_muxer http_protocol rtp_protocol rtpenc_chain"
2104sap_demuxer_select="sdp_demuxer"
2105sap_muxer_select="rtp_muxer rtp_protocol rtpenc_chain"
2106sdp_demuxer_select="rtpdec"
2107smoothstreaming_muxer_select="ismv_muxer"
2108spdif_muxer_select="aac_parser"
2109tak_demuxer_select="tak_parser"
2110tg2_muxer_select="mov_muxer"
2111tgp_muxer_select="mov_muxer"
2112vobsub_demuxer_select="mpegps_demuxer"
2113w64_demuxer_select="wav_demuxer"
2114w64_muxer_select="wav_muxer"
2115wav_demuxer_select="riffdec"
2116wav_muxer_select="riffenc"
2117webm_muxer_select="riffenc"
2118wtv_demuxer_select="riffdec"
2119xmv_demuxer_select="riffdec"
2120xwma_demuxer_select="riffdec"
2121
2122# indevs / outdevs
2123alsa_indev_deps="alsa_asoundlib_h snd_pcm_htimestamp"
2124alsa_outdev_deps="alsa_asoundlib_h"
2125bktr_indev_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
2126caca_outdev_deps="libcaca"
2127dshow_indev_deps="IBaseFilter"
2128dshow_indev_extralibs="-lpsapi -lole32 -lstrmiids -luuid"
2129dv1394_indev_deps="dv1394"
2130dv1394_indev_select="dv_demuxer"
2131fbdev_indev_deps="linux_fb_h"
2132fbdev_outdev_deps="linux_fb_h"
2133iec61883_indev_deps="libiec61883"
2134jack_indev_deps="jack_jack_h sem_timedwait"
2135lavfi_indev_deps="avfilter"
2136libcdio_indev_deps="libcdio"
2137libdc1394_indev_deps="libdc1394"
2138libv4l2_indev_deps="libv4l2"
2139openal_indev_deps="openal"
2140oss_indev_deps_any="soundcard_h sys_soundcard_h"
2141oss_outdev_deps_any="soundcard_h sys_soundcard_h"
2142pulse_indev_deps="libpulse"
2143pulse_outdev_deps="libpulse"
2144sdl_outdev_deps="sdl"
2145sndio_indev_deps="sndio_h"
2146sndio_outdev_deps="sndio_h"
2147v4l_indev_deps="linux_videodev_h"
2148v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h"
2149v4l2_outdev_deps_any="linux_videodev2_h sys_videoio_h"
2150vfwcap_indev_deps="capCreateCaptureWindow vfwcap_defines"
2151vfwcap_indev_extralibs="-lavicap32"
2152xv_outdev_deps="X11_extensions_Xvlib_h XvGetPortAttribute"
2153xv_outdev_extralibs="-lXv -lX11 -lXext"
2154x11grab_indev_deps="x11grab"
2155
2156# protocols
2157bluray_protocol_deps="libbluray"
2158ffrtmpcrypt_protocol_deps="!librtmp_protocol"
2159ffrtmpcrypt_protocol_deps_any="gcrypt nettle openssl"
2160ffrtmpcrypt_protocol_select="tcp_protocol"
2161ffrtmphttp_protocol_deps="!librtmp_protocol"
2162ffrtmphttp_protocol_select="http_protocol"
2163ftp_protocol_select="tcp_protocol"
2164gopher_protocol_select="network"
2165httpproxy_protocol_select="tcp_protocol"
2166http_protocol_select="tcp_protocol"
2167https_protocol_select="tls_protocol"
2168librtmp_protocol_deps="librtmp"
2169librtmpe_protocol_deps="librtmp"
2170librtmps_protocol_deps="librtmp"
2171librtmpt_protocol_deps="librtmp"
2172librtmpte_protocol_deps="librtmp"
2173libssh_protocol_deps="libssh"
2174mmsh_protocol_select="http_protocol"
2175mmst_protocol_select="network"
2176rtmp_protocol_deps="!librtmp_protocol"
2177rtmp_protocol_select="tcp_protocol"
2178rtmpe_protocol_select="ffrtmpcrypt_protocol"
2179rtmps_protocol_deps="!librtmp_protocol"
2180rtmps_protocol_select="tls_protocol"
2181rtmpt_protocol_select="ffrtmphttp_protocol"
2182rtmpte_protocol_select="ffrtmpcrypt_protocol ffrtmphttp_protocol"
2183rtmpts_protocol_select="ffrtmphttp_protocol https_protocol"
2184rtp_protocol_select="udp_protocol"
2185sctp_protocol_deps="struct_sctp_event_subscribe"
2186sctp_protocol_select="network"
2187srtp_protocol_select="rtp_protocol"
2188tcp_protocol_select="network"
2189tls_protocol_deps_any="openssl gnutls"
2190tls_protocol_select="tcp_protocol"
2191udp_protocol_select="network"
2192unix_protocol_deps="sys_un_h"
2193unix_protocol_select="network"
2194
2195# filters
2196aconvert_filter_deps="swresample"
2197amovie_filter_deps="avcodec avformat"
2198aresample_filter_deps="swresample"
2199ass_filter_deps="libass"
2200asyncts_filter_deps="avresample"
2201atempo_filter_deps="avcodec"
2202atempo_filter_select="rdft"
2203azmq_filter_deps="libzmq"
2204blackframe_filter_deps="gpl"
2205boxblur_filter_deps="gpl"
2206colormatrix_filter_deps="gpl"
2207cropdetect_filter_deps="gpl"
2208dctdnoiz_filter_deps="avcodec"
2209dctdnoiz_filter_select="fft"
2210delogo_filter_deps="gpl"
2211deshake_filter_deps="avcodec"
2212deshake_filter_select="dsputil"
2213drawtext_filter_deps="libfreetype"
2214ebur128_filter_deps="gpl"
2215flite_filter_deps="libflite"
2216frei0r_filter_deps="frei0r dlopen"
2217frei0r_filter_extralibs='$ldl'
2218frei0r_src_filter_deps="frei0r dlopen"
2219frei0r_src_filter_extralibs='$ldl'
2220geq_filter_deps="gpl"
2221histeq_filter_deps="gpl"
2222hqdn3d_filter_deps="gpl"
2223interlace_filter_deps="gpl"
2224kerndeint_filter_deps="gpl"
2225ladspa_filter_deps="ladspa dlopen"
2226mcdeint_filter_deps="avcodec gpl"
2227movie_filter_deps="avcodec avformat"
2228mp_filter_deps="gpl avcodec swscale inline_asm"
2229mpdecimate_filter_deps="gpl avcodec"
2230mptestsrc_filter_deps="gpl"
2231negate_filter_deps="lut_filter"
2232perspective_filter_deps="gpl"
2233resample_filter_deps="avresample"
2234ocv_filter_deps="libopencv"
2235owdenoise_filter_deps="gpl"
2236pan_filter_deps="swresample"
2237phase_filter_deps="gpl"
2238pp_filter_deps="gpl postproc"
2239pullup_filter_deps="gpl"
2240removelogo_filter_deps="avcodec avformat swscale"
2241sab_filter_deps="gpl swscale"
2242scale_filter_deps="swscale"
2243smartblur_filter_deps="gpl swscale"
2244showspectrum_filter_deps="avcodec"
2245showspectrum_filter_select="rdft"
2246spp_filter_deps="gpl avcodec"
2247spp_filter_select="fft"
2248stereo3d_filter_deps="gpl"
2249subtitles_filter_deps="avformat avcodec libass"
2250super2xsai_filter_deps="gpl"
2251tinterlace_filter_deps="gpl"
2252vidstabdetect_filter_deps="libvidstab"
2253vidstabtransform_filter_deps="libvidstab"
2254yadif_filter_deps="gpl"
2255pixfmts_super2xsai_test_deps="super2xsai_filter"
2256tinterlace_merge_test_deps="tinterlace_filter"
2257tinterlace_pad_test_deps="tinterlace_filter"
2258zmq_filter_deps="libzmq"
2259
2260# libraries
2261avcodec_deps="avutil"
2262avdevice_deps="avutil avcodec avformat"
2263avfilter_deps="avutil"
2264avformat_deps="avutil avcodec"
2265avresample_deps="avutil"
2266postproc_deps="avutil gpl"
2267swscale_deps="avutil"
2268
2269# programs
2270ffmpeg_deps="avcodec avfilter avformat swresample"
2271ffmpeg_select="aformat_filter anull_filter atrim_filter format_filter
2272 null_filter
2273 setpts_filter trim_filter"
2274ffplay_deps="avcodec avformat swscale swresample sdl"
2275ffplay_select="rdft crop_filter"
2276ffprobe_deps="avcodec avformat"
2277ffserver_deps="avformat fork sarestart"
2278ffserver_select="ffm_muxer rtp_protocol rtsp_demuxer"
2279ffserver_extralibs='$ldl'
2280
2281# documentation
2282podpages_deps="perl"
2283manpages_deps="perl pod2man"
2284htmlpages_deps="texi2html"
2285txtpages_deps="makeinfo"
2286doc_deps_any="manpages htmlpages podpages txtpages"
2287
2288# default parameters
2289
2290logfile="config.log"
2291
2292# installation paths
2293prefix_default="/usr/local"
2294bindir_default='${prefix}/bin'
2295datadir_default='${prefix}/share/ffmpeg'
2296docdir_default='${prefix}/share/doc/ffmpeg'
2297incdir_default='${prefix}/include'
2298libdir_default='${prefix}/lib'
2299mandir_default='${prefix}/share/man'
2300shlibdir_default="$libdir_default"
2301
2302# toolchain
2303ar_default="ar"
2304cc_default="gcc"
2305cxx_default="g++"
2306host_cc_default="gcc"
2307cp_f="cp -f"
2308install="install"
2309ln_s="ln -s -f"
2310nm_default="nm -g"
2311objformat="elf"
2312pkg_config_default=pkg-config
2313ranlib="ranlib"
2314strip_default="strip"
2315yasmexe_default="yasm"
2316
2317nogas=":"
2318
2319# machine
2320arch_default=$(uname -m)
2321cpu="generic"
2322
2323# OS
2324target_os_default=$(tolower $(uname -s))
2325host_os=$target_os_default
2326
2327# configurable options
2328enable $PROGRAM_LIST
2329enable $DOCUMENT_LIST
2330enable $(filter_out avresample $LIBRARY_LIST)
2331enable stripping
2332
2333enable asm
2334enable debug
2335enable doc
2336enable optimizations
2337enable runtime_cpudetect
2338enable safe_bitstream_reader
2339enable static
2340enable swscale_alpha
2341
2342# Enable hwaccels by default.
2343enable dxva2 vaapi vdpau
2344
2345# build settings
2346SHFLAGS='-shared -Wl,-soname,$$(@F)'
2347LIBPREF="lib"
2348LIBSUF=".a"
2349FULLNAME='$(NAME)$(BUILDSUF)'
2350LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
2351SLIBPREF="lib"
2352SLIBSUF=".so"
2353SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
2354SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
2355SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
2356LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
2357SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'
2358SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR) $(SLIBNAME)'
2359
2360asflags_filter=echo
2361cflags_filter=echo
2362ldflags_filter=echo
2363
2364AS_C='-c'
2365AS_O='-o $@'
2366CC_C='-c'
2367CC_E='-E -o $@'
2368CC_O='-o $@'
2369CXX_C='-c'
2370CXX_O='-o $@'
2371LD_O='-o $@'
2372LD_LIB='-l%'
2373LD_PATH='-L'
2374HOSTCC_C='-c'
2375HOSTCC_O='-o $@'
2376HOSTLD_O='-o $@'
2377
2378host_cflags='-O3 -g'
2379host_cppflags='-D_ISOC99_SOURCE -D_XOPEN_SOURCE=600'
2380host_libs='-lm'
2381host_cflags_filter=echo
2382host_ldflags_filter=echo
2383
2384target_path='$(CURDIR)'
2385
2386# since the object filename is not given with the -MM flag, the compiler
2387# is only able to print the basename, and we must add the path ourselves
2388DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o," > $(@:.o=.d)'
2389DEPFLAGS='-MM'
2390
2391# find source path
2392if test -f configure; then
2393 source_path=.
2394else
2395 source_path=$(cd $(dirname "$0"); pwd)
2396 echo "$source_path" | grep -q '[[:blank:]]' &&
2397 die "Out of tree builds are impossible with whitespace in source path."
2398 test -e "$source_path/config.h" &&
2399 die "Out of tree builds are impossible with config.h in source dir."
2400fi
2401
2402for v in "$@"; do
2403 r=${v#*=}
2404 l=${v%"$r"}
2405 r=$(sh_quote "$r")
2406 FFMPEG_CONFIGURATION="${FFMPEG_CONFIGURATION# } ${l}${r}"
2407done
2408
2409find_things(){
2410 thing=$1
2411 pattern=$2
2412 file=$source_path/$3
2413 sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
2414}
2415
2416ENCODER_LIST=$(find_things encoder ENC libavcodec/allcodecs.c)
2417DECODER_LIST=$(find_things decoder DEC libavcodec/allcodecs.c)
2418HWACCEL_LIST=$(find_things hwaccel HWACCEL libavcodec/allcodecs.c)
2419PARSER_LIST=$(find_things parser PARSER libavcodec/allcodecs.c)
2420BSF_LIST=$(find_things bsf BSF libavcodec/allcodecs.c)
2421MUXER_LIST=$(find_things muxer _MUX libavformat/allformats.c)
2422DEMUXER_LIST=$(find_things demuxer DEMUX libavformat/allformats.c)
2423OUTDEV_LIST=$(find_things outdev OUTDEV libavdevice/alldevices.c)
2424INDEV_LIST=$(find_things indev _IN libavdevice/alldevices.c)
2425PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
2426FILTER_LIST=$(find_things filter FILTER libavfilter/allfilters.c)
2427
2428ALL_COMPONENTS="
2429 $BSF_LIST
2430 $DECODER_LIST
2431 $DEMUXER_LIST
2432 $ENCODER_LIST
2433 $FILTER_LIST
2434 $HWACCEL_LIST
2435 $INDEV_LIST
2436 $MUXER_LIST
2437 $OUTDEV_LIST
2438 $PARSER_LIST
2439 $PROTOCOL_LIST
2440"
2441
2442for n in $COMPONENT_LIST; do
2443 v=$(toupper ${n%s})_LIST
2444 eval enable \$$v
2445 eval ${n}_if_any="\$$v"
2446done
2447
2448enable $ARCH_EXT_LIST
2449
2450die_unknown(){
2451 echo "Unknown option \"$1\"."
2452 echo "See $0 --help for available options."
2453 exit 1
2454}
2455
2456print_3_columns() {
2457 cat | tr ' ' '\n' | sort | pr -r -3 -t
2458}
2459
2460show_list() {
2461 suffix=_$1
2462 shift
2463 echo $* | sed s/$suffix//g | print_3_columns
2464 exit 0
2465}
2466
2467rand_list(){
2468 IFS=', '
2469 set -- $*
2470 unset IFS
2471 for thing; do
2472 comp=${thing%:*}
2473 prob=${thing#$comp}
2474 prob=${prob#:}
2475 is_in ${comp} $COMPONENT_LIST && eval comp=\$$(toupper ${comp%s})_LIST
2476 echo "prob ${prob:-0.5}"
2477 printf '%s\n' $comp
2478 done
2479}
2480
2481do_random(){
2482 action=$1
2483 shift
2484 random_seed=$(awk "BEGIN { srand($random_seed); print srand() }")
2485 $action $(rand_list "$@" | awk "BEGIN { srand($random_seed) } \$1 == \"prob\" { prob = \$2; next } rand() < prob { print }")
2486}
2487
2488for opt do
2489 optval="${opt#*=}"
2490 case "$opt" in
2491 --extra-ldflags=*)
2492 add_ldflags $optval
2493 ;;
2494 --extra-libs=*)
2495 add_extralibs $optval
2496 ;;
2497 --disable-devices)
2498 disable $INDEV_LIST $OUTDEV_LIST
2499 ;;
2500 --enable-debug=*)
2501 debuglevel="$optval"
2502 ;;
2503 --disable-programs)
2504 disable $PROGRAM_LIST
2505 ;;
2506 --disable-everything)
2507 map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
2508 ;;
2509 --disable-all)
2510 map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
2511 disable $LIBRARY_LIST $PROGRAM_LIST doc
2512 ;;
2513 --enable-random|--disable-random)
2514 action=${opt%%-random}
2515 do_random ${action#--} $COMPONENT_LIST
2516 ;;
2517 --enable-random=*|--disable-random=*)
2518 action=${opt%%-random=*}
2519 do_random ${action#--} $optval
2520 ;;
2521 --enable-*=*|--disable-*=*)
2522 eval $(echo "${opt%%=*}" | sed 's/--/action=/;s/-/ thing=/')
2523 is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt"
2524 eval list=\$$(toupper $thing)_LIST
2525 name=$(echo "${optval}" | sed "s/,/_${thing}|/g")_${thing}
2526 list=$(filter "$name" $list)
2527 [ "$list" = "" ] && warn "Option $opt did not match anything"
2528 $action $list
2529 ;;
2530 --enable-?*|--disable-?*)
2531 eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
2532 if is_in $option $COMPONENT_LIST; then
2533 test $action = disable && action=unset
2534 eval $action \$$(toupper ${option%s})_LIST
2535 elif is_in $option $CMDLINE_SELECT; then
2536 $action $option
2537 else
2538 die_unknown $opt
2539 fi
2540 ;;
2541 --list-*)
2542 NAME="${opt#--list-}"
2543 is_in $NAME $COMPONENT_LIST || die_unknown $opt
2544 NAME=${NAME%s}
2545 eval show_list $NAME \$$(toupper $NAME)_LIST
2546 ;;
2547 --help|-h) show_help
2548 ;;
2549 --fatal-warnings) enable fatal_warnings
2550 ;;
2551 *)
2552 optname="${opt%%=*}"
2553 optname="${optname#--}"
2554 optname=$(echo "$optname" | sed 's/-/_/g')
2555 if is_in $optname $CMDLINE_SET; then
2556 eval $optname='$optval'
2557 elif is_in $optname $CMDLINE_APPEND; then
2558 append $optname "$optval"
2559 else
2560 die_unknown $opt
2561 fi
2562 ;;
2563 esac
2564done
2565
2566disabled logging && logfile=/dev/null
2567
2568echo "# $0 $FFMPEG_CONFIGURATION" > $logfile
2569set >> $logfile
2570
2571test -n "$cross_prefix" && enable cross_compile
2572
2573if enabled cross_compile; then
2574 test -n "$arch" && test -n "$target_os" ||
2575 die "Must specify target arch and OS when cross-compiling"
2576fi
2577
2578ar_default="${cross_prefix}${ar_default}"
2579cc_default="${cross_prefix}${cc_default}"
2580cxx_default="${cross_prefix}${cxx_default}"
2581nm_default="${cross_prefix}${nm_default}"
2582pkg_config_default="${cross_prefix}${pkg_config_default}"
2583ranlib="${cross_prefix}${ranlib}"
2584strip_default="${cross_prefix}${strip_default}"
2585
2586sysinclude_default="${sysroot}/usr/include"
2587
2588test -n "$valgrind" && toolchain="valgrind-memcheck"
2589
2590case "$toolchain" in
2591 clang-asan)
2592 cc_default="clang"
2593 add_cflags -fsanitize=address
2594 add_ldflags -fsanitize=address
2595 ;;
2596 clang-tsan)
2597 cc_default="clang"
2598 add_cflags -fsanitize=thread -pie
2599 add_ldflags -fsanitize=thread -pie
2600 ;;
2601 gcc-asan)
2602 cc_default="gcc"
2603 add_cflags -fsanitize=address
2604 add_ldflags -fsanitize=address
2605 ;;
2606 gcc-tsan)
2607 cc_default="gcc"
2608 add_cflags -fsanitize=thread -pie -fPIC
2609 add_ldflags -fsanitize=thread -pie -fPIC
2610 ;;
2611 valgrind-massif)
2612 target_exec_default=${valgrind:-"valgrind"}
2613 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"
2614 ;;
2615 valgrind-memcheck)
2616 target_exec_default=${valgrind:-"valgrind"}
2617 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"
2618 ;;
2619 msvc)
2620 cc_default="c99wrap cl"
2621 ld_default="c99wrap link"
2622 nm_default="dumpbin -symbols"
2623 ar_default="lib"
2624 target_os_default="win32"
2625 ;;
2626 icl)
2627 cc_default="c99wrap -noconv icl"
2628 ld_default="c99wrap xilink"
2629 nm_default="dumpbin -symbols"
2630 ar_default="xilib"
2631 target_os_default="win32"
2632 ;;
2633 gcov)
2634 add_cflags -fprofile-arcs -ftest-coverage
2635 add_ldflags -fprofile-arcs -ftest-coverage
2636 ;;
2637 hardened)
2638 add_cflags -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fno-strict-overflow -fstack-protector-all
2639 add_ldflags -Wl,-z,relro -Wl,-z,now
2640 ;;
2641 ?*)
2642 die "Unknown toolchain $toolchain"
2643 ;;
2644esac
2645
2646set_default arch cc cxx pkg_config strip sysinclude target_exec target_os yasmexe
2647enabled cross_compile || host_cc_default=$cc
2648set_default host_cc
2649
2650if ! $pkg_config --version >/dev/null 2>&1; then
2651 warn "$pkg_config not found, library detection may fail."
2652 pkg_config=false
2653fi
2654
2655exesuf() {
2656 case $1 in
2657 mingw32*|win32|win64|cygwin*|*-dos|freedos|opendos|os/2*|symbian) echo .exe ;;
2658 esac
2659}
2660
2661EXESUF=$(exesuf $target_os)
2662HOSTEXESUF=$(exesuf $host_os)
2663
2664# set temporary file name
2665: ${TMPDIR:=$TEMPDIR}
2666: ${TMPDIR:=$TMP}
2667: ${TMPDIR:=/tmp}
2668
2669if [ -n "$tempprefix" ] ; then
2670 mktemp(){
2671 echo $tempprefix.${HOSTNAME}.${UID}
2672 }
2673elif ! check_cmd mktemp -u XXXXXX; then
2674 # simple replacement for missing mktemp
2675 # NOT SAFE FOR GENERAL USE
2676 mktemp(){
2677 echo "${2%%XXX*}.${HOSTNAME}.${UID}.$$"
2678 }
2679fi
2680
2681tmpfile(){
2682 tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
2683 (set -C; exec > $tmp) 2>/dev/null ||
2684 die "Unable to create temporary file in $TMPDIR."
2685 append TMPFILES $tmp
2686 eval $1=$tmp
2687}
2688
2689trap 'rm -f -- $TMPFILES' EXIT
2690
2691tmpfile TMPASM .asm
2692tmpfile TMPC .c
2693tmpfile TMPCPP .cpp
2694tmpfile TMPE $EXESUF
2695tmpfile TMPH .h
2696tmpfile TMPO .o
2697tmpfile TMPS .S
2698tmpfile TMPSH .sh
2699tmpfile TMPV .ver
2700
2701unset -f mktemp
2702
2703chmod +x $TMPE
2704
2705# make sure we can execute files in $TMPDIR
2706cat > $TMPSH 2>> $logfile <<EOF
2707#! /bin/sh
2708EOF
2709chmod +x $TMPSH >> $logfile 2>&1
2710if ! $TMPSH >> $logfile 2>&1; then
2711 cat <<EOF
2712Unable to create and execute files in $TMPDIR. Set the TMPDIR environment
2713variable to another directory and make sure that it is not mounted noexec.
2714EOF
2715 die "Sanity test failed."
2716fi
2717
2718ccc_flags(){
2719 for flag; do
2720 case $flag in
2721 -std=c99) echo -c99 ;;
2722 -mcpu=*) echo -arch ${flag#*=} ;;
2723 -mieee) echo -ieee ;;
2724 -O*|-fast) echo $flag ;;
2725 -fno-math-errno) echo -assume nomath_errno ;;
2726 -g) echo -g3 ;;
2727 -Wall) echo -msg_enable level2 ;;
2728 -Wno-pointer-sign) echo -msg_disable ptrmismatch1 ;;
2729 -Wl,*) echo $flag ;;
2730 -f*|-W*) ;;
2731 *) echo $flag ;;
2732 esac
2733 done
2734}
2735
2736cparser_flags(){
2737 for flag; do
2738 case $flag in
2739 -Wno-switch) echo -Wno-switch-enum ;;
2740 -Wno-format-zero-length) ;;
2741 -Wdisabled-optimization) ;;
2742 -Wno-pointer-sign) echo -Wno-other ;;
2743 *) echo $flag ;;
2744 esac
2745 done
2746}
2747
2748msvc_common_flags(){
2749 for flag; do
2750 case $flag in
2751 # In addition to specifying certain flags under the compiler
2752 # specific filters, they must be specified here as well or else the
2753 # generic catch all at the bottom will print the original flag.
2754 -Wall) ;;
2755 -std=c99) ;;
2756 # Common flags
2757 -fomit-frame-pointer) ;;
2758 -g) echo -Z7 ;;
2759 -fno-math-errno) ;;
2760 -fno-common) ;;
2761 -fno-signed-zeros) ;;
2762 -fPIC) ;;
2763 -mthumb) ;;
2764 -march=*) ;;
2765 -lz) echo zlib.lib ;;
2766 -lavifil32) echo vfw32.lib ;;
2767 -lavicap32) echo vfw32.lib user32.lib ;;
2768 -l*) echo ${flag#-l}.lib ;;
2769 *) echo $flag ;;
2770 esac
2771 done
2772}
2773
2774msvc_flags(){
2775 msvc_common_flags "$@"
2776 for flag; do
2777 case $flag in
2778 -Wall) echo -W4 -wd4244 -wd4127 -wd4018 -wd4389 \
2779 -wd4146 -wd4057 -wd4204 -wd4706 -wd4305 \
2780 -wd4152 -wd4324 -we4013 -wd4100 -wd4214 \
2781 -wd4554 \
2782 -wd4273 ;;
2783 esac
2784 done
2785}
2786
2787icl_flags(){
2788 msvc_common_flags "$@"
2789 for flag; do
2790 case $flag in
2791 # Despite what Intel's documentation says -Wall, which is supported
2792 # on Windows, does enable remarks so disable them here.
2793 -Wall) echo $flag -Qdiag-disable:remark ;;
2794 -std=c99) echo -Qstd=c99 ;;
2795 esac
2796 done
2797}
2798
2799pgi_flags(){
2800 for flag; do
2801 case $flag in
2802 -flto) echo -Mipa=fast,libopt,libinline,vestigial ;;
2803 -fomit-frame-pointer) echo -Mnoframe ;;
2804 -g) echo -gopt ;;
2805 *) echo $flag ;;
2806 esac
2807 done
2808}
2809
2810suncc_flags(){
2811 for flag; do
2812 case $flag in
2813 -march=*|-mcpu=*)
2814 case "${flag#*=}" in
2815 native) echo -xtarget=native ;;
2816 v9|niagara) echo -xarch=sparc ;;
2817 ultrasparc) echo -xarch=sparcvis ;;
2818 ultrasparc3|niagara2) echo -xarch=sparcvis2 ;;
2819 i586|pentium) echo -xchip=pentium ;;
2820 i686|pentiumpro|pentium2) echo -xtarget=pentium_pro ;;
2821 pentium3*|c3-2) echo -xtarget=pentium3 ;;
2822 pentium-m) echo -xarch=sse2 -xchip=pentium3 ;;
2823 pentium4*) echo -xtarget=pentium4 ;;
2824 prescott|nocona) echo -xarch=sse3 -xchip=pentium4 ;;
2825 *-sse3) echo -xarch=sse3 ;;
2826 core2) echo -xarch=ssse3 -xchip=core2 ;;
2827 corei7) echo -xarch=sse4_2 -xchip=nehalem ;;
2828 corei7-avx) echo -xarch=avx -xchip=sandybridge ;;
2829 amdfam10|barcelona) echo -xtarget=barcelona ;;
2830 bdver*) echo -xarch=avx ;;
2831 athlon-4|athlon-[mx]p) echo -xarch=ssea ;;
2832 k8|opteron|athlon64|athlon-fx)
2833 echo -xarch=sse2a ;;
2834 athlon*) echo -xarch=pentium_proa ;;
2835 esac
2836 ;;
2837 -std=c99) echo -xc99 ;;
2838 -fomit-frame-pointer) echo -xregs=frameptr ;;
2839 -fPIC) echo -KPIC -xcode=pic32 ;;
2840 -W*,*) echo $flag ;;
2841 -f*-*|-W*|-mimpure-text) ;;
2842 -shared) echo -G ;;
2843 *) echo $flag ;;
2844 esac
2845 done
2846}
2847
2848tms470_flags(){
2849 for flag; do
2850 case $flag in
2851 -march=*|-mcpu=*)
2852 case "${flag#*=}" in
2853 armv7-a|cortex-a*) echo -mv=7a8 ;;
2854 armv7-r|cortex-r*) echo -mv=7r4 ;;
2855 armv7-m|cortex-m*) echo -mv=7m3 ;;
2856 armv6*|arm11*) echo -mv=6 ;;
2857 armv5*e|arm[79]*e*|arm9[24]6*|arm96*|arm102[26])
2858 echo -mv=5e ;;
2859 armv4*|arm7*|arm9[24]*) echo -mv=4 ;;
2860 esac
2861 ;;
2862 -mfpu=neon) echo --float_support=vfpv3 --neon ;;
2863 -mfpu=vfp) echo --float_support=vfpv2 ;;
2864 -mfpu=vfpv3) echo --float_support=vfpv3 ;;
2865 -mfpu=vfpv3-d16) echo --float_support=vfpv3d16 ;;
2866 -msoft-float) echo --float_support=vfplib ;;
2867 -O[0-3]|-mf=*) echo $flag ;;
2868 -g) echo -g -mn ;;
2869 -pds=*) echo $flag ;;
2870 -D*|-I*) echo $flag ;;
2871 --gcc|--abi=*) echo $flag ;;
2872 -me) echo $flag ;;
2873 esac
2874 done
2875}
2876
2877probe_cc(){
2878 pfx=$1
2879 _cc=$2
2880
2881 unset _type _ident _cc_c _cc_e _cc_o _flags _cflags
2882 unset _ld_o _ldflags _ld_lib _ld_path
2883 unset _depflags _DEPCMD _DEPFLAGS
2884 _flags_filter=echo
2885
2886 if $_cc -v 2>&1 | grep -q '^gcc.*LLVM'; then
2887 _type=llvm_gcc
2888 gcc_extra_ver=$(expr "$($_cc --version | head -n1)" : '.*\((.*)\)')
2889 _ident="llvm-gcc $($_cc -dumpversion) $gcc_extra_ver"
2890 _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2891 _cflags_speed='-O3'
2892 _cflags_size='-Os'
2893 elif $_cc -v 2>&1 | grep -qi ^gcc; then
2894 _type=gcc
2895 gcc_version=$($_cc --version | head -n1)
2896 gcc_basever=$($_cc -dumpversion)
2897 gcc_pkg_ver=$(expr "$gcc_version" : '[^ ]* \(([^)]*)\)')
2898 gcc_ext_ver=$(expr "$gcc_version" : ".*$gcc_pkg_ver $gcc_basever \\(.*\\)")
2899 _ident=$(cleanws "gcc $gcc_basever $gcc_pkg_ver $gcc_ext_ver")
2900 if ! $_cc -dumpversion | grep -q '^2\.'; then
2901 _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2902 fi
2903 _cflags_speed='-O3'
2904 _cflags_size='-Os'
2905 elif $_cc --version 2>/dev/null | grep -q ^icc; then
2906 _type=icc
2907 _ident=$($_cc --version | head -n1)
2908 _depflags='-MMD'
2909 _cflags_speed='-O3'
2910 _cflags_size='-Os'
2911 _cflags_noopt='-O1'
2912 elif $_cc -v 2>&1 | grep -q xlc; then
2913 _type=xlc
2914 _ident=$($_cc -qversion 2>/dev/null | head -n1)
2915 _cflags_speed='-O5'
2916 _cflags_size='-O5 -qcompact'
2917 elif $_cc -V 2>/dev/null | grep -q Compaq; then
2918 _type=ccc
2919 _ident=$($_cc -V | head -n1 | cut -d' ' -f1-3)
2920 _DEPFLAGS='-M'
2921 _cflags_speed='-fast'
2922 _cflags_size='-O1'
2923 _flags_filter=ccc_flags
2924 elif $_cc --vsn 2>/dev/null | grep -q "ARM C/C++ Compiler"; then
2925 test -d "$sysroot" || die "No valid sysroot specified."
2926 _type=armcc
2927 _ident=$($_cc --vsn | head -n1)
2928 armcc_conf="$PWD/armcc.conf"
2929 $_cc --arm_linux_configure \
2930 --arm_linux_config_file="$armcc_conf" \
2931 --configure_sysroot="$sysroot" \
2932 --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
2933 die "Error creating armcc configuration file."
2934 $_cc --vsn | grep -q RVCT && armcc_opt=rvct || armcc_opt=armcc
2935 _flags="--arm_linux_config_file=$armcc_conf --translate_gcc"
2936 as_default="${cross_prefix}gcc"
2937 _depflags='-MMD'
2938 _cflags_speed='-O3'
2939 _cflags_size='-Os'
2940 elif $_cc -version 2>/dev/null | grep -Eq 'TMS470|TI ARM'; then
2941 _type=tms470
2942 _ident=$($_cc -version | head -n1 | tr -s ' ')
2943 _flags='--gcc --abi=eabi -me'
2944 _cc_e='-ppl -fe=$@'
2945 _cc_o='-fe=$@'
2946 _depflags='-ppa -ppd=$(@:.o=.d)'
2947 _cflags_speed='-O3 -mf=5'
2948 _cflags_size='-O3 -mf=2'
2949 _flags_filter=tms470_flags
2950 elif $_cc -v 2>&1 | grep -q clang; then
2951 _type=clang
2952 _ident=$($_cc --version | head -n1)
2953 _depflags='-MMD'
2954 _cflags_speed='-O3'
2955 _cflags_size='-Os'
2956 elif $_cc -V 2>&1 | grep -q Sun; then
2957 _type=suncc
2958 _ident=$($_cc -V 2>&1 | head -n1 | cut -d' ' -f 2-)
2959 _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "1s,^.*: ,$@: ," -e "\$$!s,\$$, \\\," -e "1!s,^.*: , ," > $(@:.o=.d)'
2960 _DEPFLAGS='-xM1 -xc99'
2961 _ldflags='-std=c99'
2962 _cflags_speed='-O5'
2963 _cflags_size='-O5 -xspace'
2964 _flags_filter=suncc_flags
2965 elif $_cc -v 2>&1 | grep -q 'PathScale\|Path64'; then
2966 _type=pathscale
2967 _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
2968 _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2969 _cflags_speed='-O2'
2970 _cflags_size='-Os'
2971 _flags_filter='filter_out -Wdisabled-optimization'
2972 elif $_cc -v 2>&1 | grep -q Open64; then
2973 _type=open64
2974 _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
2975 _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2976 _cflags_speed='-O2'
2977 _cflags_size='-Os'
2978 _flags_filter='filter_out -Wdisabled-optimization|-Wtype-limits|-fno-signed-zeros'
2979 elif $_cc -V 2>&1 | grep -q Portland; then
2980 _type=pgi
2981 _ident="PGI $($_cc -V 2>&1 | awk '/^pgcc/ { print $2; exit }')"
2982 opt_common='-alias=ansi -Mdse -Mlre -Mpre'
2983 _cflags_speed="-O3 -Mautoinline -Munroll=c:4 $opt_common"
2984 _cflags_size="-O2 -Munroll=c:1 $opt_common"
2985 _cflags_noopt="-O"
2986 _flags_filter=pgi_flags
2987 elif $_cc 2>&1 | grep -q Microsoft; then
2988 _type=msvc
2989 _ident=$($cc 2>&1 | head -n1)
2990 _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< 2>&1 | awk '\''/including/ { sub(/^.*file: */, ""); gsub(/\\/, "/"); if (!match($$0, / /)) print "$@:", $$0 }'\'' > $(@:.o=.d)'
2991 _DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -showIncludes -Zs'
2992 _cflags_speed="-O2"
2993 _cflags_size="-O1"
2994 # Nonstandard output options, to avoid msys path conversion issues.
2995 # Relies on wrapper to remap it.
2996 if $_cc 2>&1 | grep -q Linker; then
2997 _ld_o='-out $@'
2998 else
2999 _ld_o='-Fe$@'
3000 fi
3001 _cc_o='-Fo $@'
3002 _cc_e='-P -Fi $@'
3003 _flags_filter=msvc_flags
3004 _ld_lib='lib%.a'
3005 _ld_path='-libpath:'
3006 _flags='-nologo'
3007 _cflags='-D_USE_MATH_DEFINES -D_CRT_SECURE_NO_WARNINGS -Dinline=__inline -FIstdlib.h -Dstrtoll=_strtoi64'
3008 if [ $pfx = hostcc ]; then
3009 append _cflags -Dsnprintf=_snprintf
3010 fi
3011 disable stripping
3012 elif $_cc 2>&1 | grep -q Intel; then
3013 _type=icl
3014 _ident=$($cc 2>&1 | head -n1)
3015 _depflags='-QMMD -QMF$(@:.o=.d) -QMT$@'
3016 # Not only is O3 broken on 13.x+ but it is slower on all previous
3017 # versions (tested) as well.
3018 _cflags_speed="-O2"
3019 _cflags_size="-O1 -Oi" # -O1 without -Oi miscompiles stuff
3020 # Nonstandard output options, to avoid msys path conversion issues.
3021 # Relies on wrapper to remap it.
3022 if $_cc 2>&1 | grep -q Linker; then
3023 _ld_o='-out $@'
3024 else
3025 _ld_o='-Fe$@'
3026 fi
3027 _cc_o='-Fo $@'
3028 _cc_e='-P'
3029 _flags_filter=icl_flags
3030 _ld_lib='lib%.a'
3031 _ld_path='-libpath:'
3032 # -Qdiag-error to make icl error when seeing certain unknown arguments
3033 _flags='-nologo -Qdiag-error:4044,10157'
3034 # -Qvec- -Qsimd- to prevent miscompilation, -GS for consistency
3035 # with MSVC which enables it by default.
3036 _cflags='-D_USE_MATH_DEFINES -FIstdlib.h -Dstrtoll=_strtoi64 -Qms0 -Qvec- -Qsimd- -GS'
3037 if [ $pfx = hostcc ]; then
3038 append _cflags -Dsnprintf=_snprintf
3039 fi
3040 elif $_cc --version 2>/dev/null | grep -q ^cparser; then
3041 _type=cparser
3042 _ident=$($_cc --version | head -n1)
3043 _depflags='-MMD'
3044 _cflags_speed='-O4'
3045 _cflags_size='-O2'
3046 _flags_filter=cparser_flags
3047 fi
3048
3049 eval ${pfx}_type=\$_type
3050 eval ${pfx}_ident=\$_ident
3051}
3052
3053set_ccvars(){
3054 eval ${1}_C=\${_cc_c-\${${1}_C}}
3055 eval ${1}_E=\${_cc_e-\${${1}_E}}
3056 eval ${1}_O=\${_cc_o-\${${1}_O}}
3057
3058 if [ -n "$_depflags" ]; then
3059 eval ${1}_DEPFLAGS=\$_depflags
3060 else
3061 eval ${1}DEP=\${_DEPCMD:-\$DEPCMD}
3062 eval ${1}DEP_FLAGS=\${_DEPFLAGS:-\$DEPFLAGS}
3063 eval DEP${1}FLAGS=\$_flags
3064 fi
3065}
3066
3067probe_cc cc "$cc"
3068cflags_filter=$_flags_filter
3069cflags_speed=$_cflags_speed
3070cflags_size=$_cflags_size
3071cflags_noopt=$_cflags_noopt
3072add_cflags $_flags $_cflags
3073cc_ldflags=$_ldflags
3074set_ccvars CC
3075
3076probe_cc hostcc "$host_cc"
3077host_cflags_filter=$_flags_filter
3078add_host_cflags $_flags $_cflags
3079set_ccvars HOSTCC
3080
3081test -n "$cc_type" && enable $cc_type ||
3082 warn "Unknown C compiler $cc, unable to select optimal CFLAGS"
3083
3084: ${as_default:=$cc}
3085: ${dep_cc_default:=$cc}
3086: ${ld_default:=$cc}
3087: ${host_ld_default:=$host_cc}
3088set_default ar as dep_cc ld host_ld
3089
3090probe_cc as "$as"
3091asflags_filter=$_flags_filter
3092add_asflags $_flags $_cflags
3093set_ccvars AS
3094
3095probe_cc ld "$ld"
3096ldflags_filter=$_flags_filter
3097add_ldflags $_flags $_ldflags
3098test "$cc_type" != "$ld_type" && add_ldflags $cc_ldflags
3099LD_O=${_ld_o-$LD_O}
3100LD_LIB=${_ld_lib-$LD_LIB}
3101LD_PATH=${_ld_path-$LD_PATH}
3102
3103probe_cc hostld "$host_ld"
3104host_ldflags_filter=$_flags_filter
3105add_host_ldflags $_flags $_ldflags
3106HOSTLD_O=${_ld_o-$HOSTLD_O}
3107
3108if [ -z "$CC_DEPFLAGS" ] && [ "$dep_cc" != "$cc" ]; then
3109 probe_cc depcc "$dep_cc"
3110 CCDEP=${_DEPCMD:-$DEPCMD}
3111 CCDEP_FLAGS=${_DEPFLAGS:=$DEPFLAGS}
3112 DEPCCFLAGS=$_flags
3113fi
3114
3115if $ar 2>&1 | grep -q Microsoft; then
3116 arflags="-nologo"
3117 ar_o='-out:$@'
3118elif $ar 2>&1 | grep -q 'Texas Instruments'; then
3119 arflags="rq"
3120 ar_o='$@'
3121elif $ar 2>&1 | grep -q 'Usage: ar.*-X.*any'; then
3122 arflags='-Xany -r -c'
3123 ar_o='$@'
3124else
3125 arflags="rc"
3126 ar_o='$@'
3127fi
3128
3129add_cflags $extra_cflags
3130add_cxxflags $extra_cxxflags
3131add_asflags $extra_cflags
3132
3133if test -n "$sysroot"; then
3134 case "$cc_type" in
3135 gcc|llvm_gcc|clang)
3136 add_cppflags --sysroot="$sysroot"
3137 add_ldflags --sysroot="$sysroot"
3138 ;;
3139 tms470)
3140 add_cppflags -I"$sysinclude"
3141 add_ldflags --sysroot="$sysroot"
3142 ;;
3143 esac
3144fi
3145
3146if test "$cpu" = host; then
3147 enabled cross_compile &&
3148 die "--cpu=host makes no sense when cross-compiling."
3149
3150 case "$cc_type" in
3151 gcc|llvm_gcc)
3152 check_native(){
3153 $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
3154 sed -n "/cc1.*$1=/{
3155 s/.*$1=\\([^ ]*\\).*/\\1/
3156 p
3157 q
3158 }" $TMPE
3159 }
3160 cpu=$(check_native -march || check_native -mcpu)
3161 ;;
3162 esac
3163
3164 test "${cpu:-host}" = host &&
3165 die "--cpu=host not supported with compiler $cc"
3166fi
3167
3168# Deal with common $arch aliases
3169case "$arch" in
3170 aarch64|arm64)
3171 arch="aarch64"
3172 ;;
3173 arm*|iPad*|iPhone*)
3174 arch="arm"
3175 ;;
3176 mips*|IP*)
3177 arch="mips"
3178 ;;
3179 parisc*|hppa*)
3180 arch="parisc"
3181 ;;
3182 "Power Macintosh"|ppc*|powerpc*)
3183 arch="ppc"
3184 ;;
3185 s390|s390x)
3186 arch="s390"
3187 ;;
3188 sh4|sh)
3189 arch="sh4"
3190 ;;
3191 sun4u|sparc*)
3192 arch="sparc"
3193 ;;
3194 tilegx|tile-gx)
3195 arch="tilegx"
3196 ;;
3197 i[3-6]86|i86pc|BePC|x86pc|x86_64|x86_32|amd64)
3198 arch="x86"
3199 ;;
3200esac
3201
3202is_in $arch $ARCH_LIST || warn "unknown architecture $arch"
3203enable $arch
3204
3205# Add processor-specific flags
3206if enabled aarch64; then
3207
3208 case $cpu in
3209 armv*)
3210 cpuflags="-march=$cpu"
3211 ;;
3212 *)
3213 cpuflags="-mcpu=$cpu"
3214 ;;
3215 esac
3216
3217elif enabled alpha; then
3218
3219 cpuflags="-mcpu=$cpu"
3220
3221elif enabled arm; then
3222
3223 check_arm_arch() {
3224 check_cpp_condition stddef.h \
3225 "defined __ARM_ARCH_${1}__ || defined __TARGET_ARCH_${2:-$1}" \
3226 $cpuflags
3227 }
3228
3229 probe_arm_arch() {
3230 if check_arm_arch 4; then echo armv4;
3231 elif check_arm_arch 4T; then echo armv4t;
3232 elif check_arm_arch 5; then echo armv5;
3233 elif check_arm_arch 5E; then echo armv5e;
3234 elif check_arm_arch 5T; then echo armv5t;
3235 elif check_arm_arch 5TE; then echo armv5te;
3236 elif check_arm_arch 5TEJ; then echo armv5te;
3237 elif check_arm_arch 6; then echo armv6;
3238 elif check_arm_arch 6J; then echo armv6j;
3239 elif check_arm_arch 6K; then echo armv6k;
3240 elif check_arm_arch 6Z; then echo armv6z;
3241 elif check_arm_arch 6ZK; then echo armv6zk;
3242 elif check_arm_arch 6T2; then echo armv6t2;
3243 elif check_arm_arch 7; then echo armv7;
3244 elif check_arm_arch 7A 7_A; then echo armv7-a;
3245 elif check_arm_arch 7R 7_R; then echo armv7-r;
3246 elif check_arm_arch 7M 7_M; then echo armv7-m;
3247 elif check_arm_arch 7EM 7E_M; then echo armv7-m;
3248 elif check_arm_arch 8A 8_A; then echo armv8-a;
3249 fi
3250 }
3251
3252 [ "$cpu" = generic ] && cpu=$(probe_arm_arch)
3253
3254 case $cpu in
3255 armv*)
3256 cpuflags="-march=$cpu"
3257 subarch=$(echo $cpu | sed 's/[^a-z0-9]//g')
3258 ;;
3259 *)
3260 cpuflags="-mcpu=$cpu"
3261 case $cpu in
3262 cortex-a*) subarch=armv7a ;;
3263 cortex-r*) subarch=armv7r ;;
3264 cortex-m*) enable thumb; subarch=armv7m ;;
3265 arm11*) subarch=armv6 ;;
3266 arm[79]*e*|arm9[24]6*|arm96*|arm102[26]) subarch=armv5te ;;
3267 armv4*|arm7*|arm9[24]*) subarch=armv4 ;;
3268 *) subarch=$(probe_arm_arch) ;;
3269 esac
3270 ;;
3271 esac
3272
3273 case "$subarch" in
3274 armv5t*) enable fast_clz ;;
3275 armv[6-8]*) enable fast_clz fast_unaligned ;;
3276 esac
3277
3278elif enabled avr32; then
3279
3280 case $cpu in
3281 ap7[02]0[0-2])
3282 subarch="avr32_ap"
3283 cpuflags="-mpart=$cpu"
3284 ;;
3285 ap)
3286 subarch="avr32_ap"
3287 cpuflags="-march=$cpu"
3288 ;;
3289 uc3[ab]*)
3290 subarch="avr32_uc"
3291 cpuflags="-mcpu=$cpu"
3292 ;;
3293 uc)
3294 subarch="avr32_uc"
3295 cpuflags="-march=$cpu"
3296 ;;
3297 esac
3298
3299elif enabled bfin; then
3300
3301 cpuflags="-mcpu=$cpu"
3302
3303elif enabled mips; then
3304
3305 cpuflags="-march=$cpu"
3306
3307 case $cpu in
3308 24kc)
3309 disable mipsfpu
3310 disable mipsdspr1
3311 disable mipsdspr2
3312 ;;
3313 24kf*)
3314 disable mipsdspr1
3315 disable mipsdspr2
3316 ;;
3317 24kec|34kc|1004kc)
3318 disable mipsfpu
3319 disable mipsdspr2
3320 ;;
3321 24kef*|34kf*|1004kf*)
3322 disable mipsdspr2
3323 ;;
3324 74kc)
3325 disable mipsfpu
3326 ;;
3327 esac
3328
3329elif enabled ppc; then
3330
3331 case $(tolower $cpu) in
3332 601|ppc601|powerpc601)
3333 cpuflags="-mcpu=601"
3334 disable altivec
3335 ;;
3336 603*|ppc603*|powerpc603*)
3337 cpuflags="-mcpu=603"
3338 disable altivec
3339 ;;
3340 604*|ppc604*|powerpc604*)
3341 cpuflags="-mcpu=604"
3342 disable altivec
3343 ;;
3344 g3|75*|ppc75*|powerpc75*)
3345 cpuflags="-mcpu=750"
3346 disable altivec
3347 ;;
3348 g4|745*|ppc745*|powerpc745*)
3349 cpuflags="-mcpu=7450"
3350 ;;
3351 74*|ppc74*|powerpc74*)
3352 cpuflags="-mcpu=7400"
3353 ;;
3354 g5|970|ppc970|powerpc970)
3355 cpuflags="-mcpu=970"
3356 ;;
3357 power[3-7]*)
3358 cpuflags="-mcpu=$cpu"
3359 ;;
3360 cell)
3361 cpuflags="-mcpu=cell"
3362 enable ldbrx
3363 ;;
3364 e500mc)
3365 cpuflags="-mcpu=e500mc"
3366 disable altivec
3367 ;;
3368 e500v2)
3369 cpuflags="-mcpu=8548 -mhard-float -mfloat-gprs=double"
3370 disable altivec
3371 ;;
3372 e500)
3373 cpuflags="-mcpu=8540 -mhard-float"
3374 disable altivec
3375 ;;
3376 esac
3377
3378elif enabled sparc; then
3379
3380 case $cpu in
3381 cypress|f93[04]|tsc701|sparcl*|supersparc|hypersparc|niagara|v[789])
3382 cpuflags="-mcpu=$cpu"
3383 disable vis
3384 ;;
3385 ultrasparc*|niagara[234])
3386 cpuflags="-mcpu=$cpu"
3387 ;;
3388 esac
3389
3390elif enabled x86; then
3391
3392 case $cpu in
3393 i[345]86|pentium)
3394 cpuflags="-march=$cpu"
3395 disable mmx
3396 ;;
3397 # targets that do NOT support nopl and conditional mov (cmov)
3398 pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
3399 cpuflags="-march=$cpu"
3400 disable i686
3401 ;;
3402 # targets that do support nopl and conditional mov (cmov)
3403 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*)
3404 cpuflags="-march=$cpu"
3405 enable i686
3406 enable fast_cmov
3407 ;;
3408 # targets that do support conditional mov but on which it's slow
3409 pentium4|pentium4m|prescott|nocona)
3410 cpuflags="-march=$cpu"
3411 enable i686
3412 disable fast_cmov
3413 ;;
3414 esac
3415
3416fi
3417
3418if [ "$cpu" != generic ]; then
3419 add_cflags $cpuflags
3420 add_asflags $cpuflags
3421fi
3422
3423# compiler sanity check
3424check_exec <<EOF
3425int main(void){ return 0; }
3426EOF
3427if test "$?" != 0; then
3428 echo "$cc is unable to create an executable file."
3429 if test -z "$cross_prefix" && ! enabled cross_compile ; then
3430 echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
3431 echo "Only do this if you know what cross compiling means."
3432 fi
3433 die "C compiler test failed."
3434fi
3435
3436add_cppflags -D_ISOC99_SOURCE
3437add_cxxflags -D__STDC_CONSTANT_MACROS
3438check_cflags -std=c99
3439check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
3440#include <stdlib.h>
3441EOF
3442check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
3443#include <stdlib.h>
3444EOF
3445
3446check_host_cflags -std=c99
3447check_host_cflags -Wall
3448
3449check_64bit(){
3450 arch32=$1
3451 arch64=$2
3452 expr=$3
3453 check_code cc "" "int test[2*($expr) - 1]" &&
3454 subarch=$arch64 || subarch=$arch32
3455}
3456
3457case "$arch" in
3458 aarch64|alpha|ia64)
3459 spic=$shared
3460 ;;
3461 mips)
3462 check_64bit mips mips64 '_MIPS_SIM > 1'
3463 spic=$shared
3464 ;;
3465 parisc)
3466 check_64bit parisc parisc64 'sizeof(void *) > 4'
3467 spic=$shared
3468 ;;
3469 ppc)
3470 check_64bit ppc ppc64 'sizeof(void *) > 4'
3471 spic=$shared
3472 ;;
3473 sparc)
3474 check_64bit sparc sparc64 'sizeof(void *) > 4'
3475 spic=$shared
3476 ;;
3477 x86)
3478 check_64bit x86_32 x86_64 'sizeof(void *) > 4'
3479 if test "$subarch" = "x86_64"; then
3480 spic=$shared
3481 fi
3482 ;;
3483 ppc)
3484 check_cc <<EOF && subarch="ppc64"
3485 int test[(int)sizeof(char*) - 7];
3486EOF
3487 ;;
3488esac
3489
3490enable $subarch
3491enabled spic && enable_weak pic
3492
3493# OS specific
3494case $target_os in
3495 aix)
3496 SHFLAGS=-shared
3497 add_cppflags '-I\$(SRC_PATH)/compat/aix'
3498 enabled shared && add_ldflags -Wl,-brtl
3499 ;;
3500 haiku)
3501 prefix_default="/boot/common"
3502 network_extralibs="-lnetwork"
3503 host_libs=
3504 ;;
3505 sunos)
3506 SHFLAGS='-shared -Wl,-h,$$(@F)'
3507 enabled x86 && SHFLAGS="-mimpure-text $SHFLAGS"
3508 network_extralibs="-lsocket -lnsl"
3509 add_cppflags -D__EXTENSIONS__ -D_XOPEN_SOURCE=600
3510 # When using suncc to build, the Solaris linker will mark
3511 # an executable with each instruction set encountered by
3512 # the Solaris assembler. As our libraries contain their own
3513 # guards for processor-specific code, instead suppress
3514 # generation of the HWCAPS ELF section on Solaris x86 only.
3515 enabled_all suncc x86 &&
3516 echo "hwcap_1 = OVERRIDE;" > mapfile &&
3517 add_ldflags -Wl,-M,mapfile
3518 nm_default='nm -P -g'
3519 ;;
3520 netbsd)
3521 disable symver
3522 oss_indev_extralibs="-lossaudio"
3523 oss_outdev_extralibs="-lossaudio"
3524 enabled gcc || check_ldflags -Wl,-zmuldefs
3525 ;;
3526 openbsd|bitrig)
3527 disable symver
3528 SHFLAGS='-shared'
3529 SLIB_INSTALL_NAME='$(SLIBNAME).$(LIBMAJOR).$(LIBMINOR)'
3530 SLIB_INSTALL_LINKS=
3531 oss_indev_extralibs="-lossaudio"
3532 oss_outdev_extralibs="-lossaudio"
3533 ;;
3534 dragonfly)
3535 disable symver
3536 ;;
3537 freebsd)
3538 ;;
3539 bsd/os)
3540 add_extralibs -lpoll -lgnugetopt
3541 strip="strip -d"
3542 ;;
3543 darwin)
3544 gas="gas-preprocessor.pl $cc"
3545 enabled ppc && add_asflags -force_cpusubtype_ALL
3546 SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR)'
3547 enabled x86_32 && append SHFLAGS -Wl,-read_only_relocs,suppress
3548 strip="${strip} -x"
3549 add_ldflags -Wl,-dynamic,-search_paths_first
3550 SLIBSUF=".dylib"
3551 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
3552 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
3553 objformat="macho"
3554 enabled x86_64 && objformat="macho64"
3555 enabled_any pic shared ||
3556 { check_cflags -mdynamic-no-pic && add_asflags -mdynamic-no-pic; }
3557 ;;
3558 mingw32*)
3559 if test $target_os = "mingw32ce"; then
3560 disable network
3561 else
3562 target_os=mingw32
3563 fi
3564 LIBTARGET=i386
3565 if enabled x86_64; then
3566 LIBTARGET="i386:x86-64"
3567 elif enabled arm; then
3568 LIBTARGET=arm-wince
3569 fi
3570 check_ldflags -Wl,--nxcompat
3571 check_ldflags -Wl,--dynamicbase
3572 shlibdir_default="$bindir_default"
3573 SLIBPREF=""
3574 SLIBSUF=".dll"
3575 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
3576 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
3577 dlltool="${cross_prefix}dlltool"
3578 if check_cmd lib.exe -list; then
3579 SLIB_EXTRA_CMD=-'sed -e "s/ @[^ ]*//" $$(@:$(SLIBSUF)=.orig.def) > $$(@:$(SLIBSUF)=.def); lib.exe /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib)'
3580 if enabled x86_64; then
3581 LIBTARGET=x64
3582 fi
3583 elif check_cmd $dlltool --version; then
3584 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)'
3585 fi
3586 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
3587 SLIB_INSTALL_LINKS=
3588 SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
3589 SLIB_INSTALL_EXTRA_LIB='lib$(SLIBNAME:$(SLIBSUF)=.dll.a) $(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
3590 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'
3591 objformat="win32"
3592 ranlib=:
3593 enable dos_paths
3594 ;;
3595 win32|win64)
3596 if enabled shared; then
3597 # Link to the import library instead of the normal static library
3598 # for shared libs.
3599 LD_LIB='%.lib'
3600 # Cannot build both shared and static libs with MSVC or icl.
3601 disable static
3602 fi
3603 shlibdir_default="$bindir_default"
3604 SLIBPREF=""
3605 SLIBSUF=".dll"
3606 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
3607 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
3608 SLIB_CREATE_DEF_CMD='makedef $(SUBDIR)lib$(NAME).ver $(OBJS) > $$(@:$(SLIBSUF)=.def)'
3609 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
3610 SLIB_INSTALL_LINKS=
3611 SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
3612 SLIB_INSTALL_EXTRA_LIB='$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
3613 SHFLAGS='-dll -def:$$(@:$(SLIBSUF)=.def) -implib:$(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib)'
3614 objformat="win32"
3615 ranlib=:
3616 enable dos_paths
3617 ;;
3618 cygwin*)
3619 target_os=cygwin
3620 shlibdir_default="$bindir_default"
3621 SLIBPREF="cyg"
3622 SLIBSUF=".dll"
3623 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
3624 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
3625 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
3626 SLIB_INSTALL_LINKS=
3627 SLIB_INSTALL_EXTRA_LIB='lib$(FULLNAME).dll.a'
3628 SHFLAGS='-shared -Wl,--out-implib,$(SUBDIR)lib$(FULLNAME).dll.a'
3629 objformat="win32"
3630 enable dos_paths
3631 ;;
3632 *-dos|freedos|opendos)
3633 network_extralibs="-lsocket"
3634 objformat="coff"
3635 enable dos_paths
3636 add_cppflags -U__STRICT_ANSI__
3637 ;;
3638 linux)
3639 enable section_data_rel_ro
3640 enable dv1394
3641 ;;
3642 irix*)
3643 target_os=irix
3644 ranlib="echo ignoring ranlib"
3645 ;;
3646 os/2*)
3647 strip="lxlite -CS"
3648 ln_s="cp -f"
3649 objformat="aout"
3650 add_cppflags -D_GNU_SOURCE
3651 add_ldflags -Zomf -Zbin-files -Zargs-wild -Zmap
3652 SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
3653 LIBSUF="_s.a"
3654 SLIBPREF=""
3655 SLIBSUF=".dll"
3656 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
3657 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
3658 SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
3659 echo PROTMODE >> $(SUBDIR)$(NAME).def; \
3660 echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
3661 echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
3662 echo EXPORTS >> $(SUBDIR)$(NAME).def; \
3663 emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
3664 SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
3665 emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
3666 SLIB_INSTALL_EXTRA_LIB='$(LIBPREF)$(NAME)_dll.a $(LIBPREF)$(NAME)_dll.lib'
3667 enable dos_paths
3668 enable_weak os2threads
3669 ;;
3670 gnu/kfreebsd)
3671 add_cppflags -D_BSD_SOURCE
3672 ;;
3673 gnu)
3674 ;;
3675 qnx)
3676 add_cppflags -D_QNX_SOURCE
3677 network_extralibs="-lsocket"
3678 ;;
3679 symbian)
3680 SLIBSUF=".dll"
3681 enable dos_paths
3682 add_cflags --include=$sysinclude/gcce/gcce.h -fvisibility=default
3683 add_cppflags -D__GCCE__ -D__SYMBIAN32__ -DSYMBIAN_OE_POSIX_SIGNALS
3684 add_ldflags -Wl,--target1-abs,--no-undefined \
3685 -Wl,-Ttext,0x80000,-Tdata,0x1000000 -shared \
3686 -Wl,--entry=_E32Startup -Wl,-u,_E32Startup
3687 add_extralibs -l:eexe.lib -l:usrt2_2.lib -l:dfpaeabi.dso \
3688 -l:drtaeabi.dso -l:scppnwdl.dso -lsupc++ -lgcc \
3689 -l:libc.dso -l:libm.dso -l:euser.dso -l:libcrt0.lib
3690 ;;
3691 osf1)
3692 add_cppflags -D_OSF_SOURCE -D_POSIX_PII -D_REENTRANT
3693 ;;
3694 minix)
3695 ;;
3696 plan9)
3697 add_cppflags -D_C99_SNPRINTF_EXTENSION \
3698 -D_REENTRANT_SOURCE \
3699 -D_RESEARCH_SOURCE \
3700 -DFD_SETSIZE=96 \
3701 -DHAVE_SOCK_OPTS
3702 add_compat strtod.o strtod=avpriv_strtod
3703 network_extralibs='-lbsd'
3704 exeobjs=compat/plan9/main.o
3705 disable ffserver
3706 cp_f='cp'
3707 ;;
3708 none)
3709 ;;
3710 *)
3711 die "Unknown OS '$target_os'."
3712 ;;
3713esac
3714
3715# determine libc flavour
3716
3717# uclibc defines __GLIBC__, so it needs to be checked before glibc.
3718if check_cpp_condition features.h "defined __UCLIBC__"; then
3719 libc_type=uclibc
3720 add_cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
3721elif check_cpp_condition features.h "defined __GLIBC__"; then
3722 libc_type=glibc
3723 add_cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
3724# MinGW headers can be installed on Cygwin, so check for newlib first.
3725elif check_cpp_condition newlib.h "defined _NEWLIB_VERSION"; then
3726 libc_type=newlib
3727 add_cppflags -U__STRICT_ANSI__
3728elif check_header _mingw.h; then
3729 libc_type=mingw
3730 check_cpp_condition _mingw.h \
3731 "defined (__MINGW64_VERSION_MAJOR) || (__MINGW32_MAJOR_VERSION > 3) || \
3732 (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
3733 die "ERROR: MinGW runtime version must be >= 3.15."
3734 add_cppflags -U__STRICT_ANSI__
3735 if check_cpp_condition _mingw.h "defined(__MINGW64_VERSION_MAJOR) && \
3736 __MINGW64_VERSION_MAJOR < 3"; then
3737 add_compat msvcrt/snprintf.o
3738 add_cflags "-include $source_path/compat/msvcrt/snprintf.h"
3739 else
3740 add_cppflags -D__USE_MINGW_ANSI_STDIO=1
3741 fi
3742elif check_func_headers stdlib.h _get_doserrno; then
3743 libc_type=msvcrt
3744 add_compat strtod.o strtod=avpriv_strtod
3745 add_compat msvcrt/snprintf.o snprintf=avpriv_snprintf \
3746 _snprintf=avpriv_snprintf \
3747 vsnprintf=avpriv_vsnprintf
3748 # The MSVC 2010 headers (Win 7.0 SDK) set _WIN32_WINNT to
3749 # 0x601 by default unless something else is set by the user.
3750 # This can easily lead to us detecting functions only present
3751 # in such new versions and producing binaries requiring windows 7.0.
3752 # Therefore explicitly set the default to XP unless the user has
3753 # set something else on the command line.
3754 check_cpp_condition stdlib.h "defined(_WIN32_WINNT)" || add_cppflags -D_WIN32_WINNT=0x0502
3755elif check_cpp_condition stddef.h "defined __KLIBC__"; then
3756 libc_type=klibc
3757elif check_cpp_condition sys/cdefs.h "defined __BIONIC__"; then
3758 libc_type=bionic
3759 add_compat strtod.o strtod=avpriv_strtod
3760fi
3761
3762test -n "$libc_type" && enable $libc_type
3763
3764# hacks for compiler/libc/os combinations
3765
3766if enabled_all tms470 glibc; then
3767 CPPFLAGS="-I${source_path}/compat/tms470 ${CPPFLAGS}"
3768 add_cppflags -D__USER_LABEL_PREFIX__=
3769 add_cppflags -D__builtin_memset=memset
3770 add_cppflags -D__gnuc_va_list=va_list -D_VA_LIST_DEFINED
3771 add_cflags -pds=48 # incompatible redefinition of macro
3772fi
3773
3774if enabled_all ccc glibc; then
3775 add_ldflags -Wl,-z,now # calls to libots crash without this
3776fi
3777
3778esc(){
3779 echo "$*" | sed 's/%/%25/g;s/:/%3a/g'
3780}
3781
3782echo "config:$arch:$subarch:$cpu:$target_os:$(esc $cc_ident):$(esc $FFMPEG_CONFIGURATION)" >config.fate
3783
3784check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable_weak pic
3785
3786set_default $PATHS_LIST
3787set_default nm
3788
3789# we need to build at least one lib type
3790if ! enabled_any static shared; then
3791 cat <<EOF
3792At least one library type must be built.
3793Specify --enable-static to build the static libraries or --enable-shared to
3794build the shared libraries as well. To only build the shared libraries specify
3795--disable-static in addition to --enable-shared.
3796EOF
3797 exit 1;
3798fi
3799
3800# backward compatibility layer for incompatible_libav/fork_abi
3801enabled incompatible_fork_abi && enable incompatible_libav_abi
3802enabled incompatible_libav_abi && enable incompatible_fork_abi
3803
3804die_license_disabled() {
3805 enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
3806}
3807
3808die_license_disabled_gpl() {
3809 enabled $1 || { enabled $2 && die "$2 is incompatible with the gpl and --enable-$1 is not specified."; }
3810}
3811
3812die_license_disabled gpl frei0r
3813die_license_disabled gpl libcdio
3814die_license_disabled gpl libutvideo
3815die_license_disabled gpl libvidstab
3816die_license_disabled gpl libx264
3817die_license_disabled gpl libxavs
3818die_license_disabled gpl libxvid
3819die_license_disabled gpl libzvbi
3820die_license_disabled gpl x11grab
3821
3822die_license_disabled nonfree libaacplus
3823die_license_disabled nonfree libfaac
3824enabled gpl && die_license_disabled_gpl nonfree libfdk_aac
3825enabled gpl && die_license_disabled_gpl nonfree openssl
3826
3827die_license_disabled version3 libopencore_amrnb
3828die_license_disabled version3 libopencore_amrwb
3829die_license_disabled version3 libvo_aacenc
3830die_license_disabled version3 libvo_amrwbenc
3831
3832enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
3833
3834disabled optimizations || check_cflags -fomit-frame-pointer
3835
3836enable_weak_pic() {
3837 disabled pic && return
3838 enable pic
3839 add_cppflags -DPIC
3840 case "$target_os" in
3841 mingw*|cygwin*)
3842 ;;
3843 *)
3844 add_cflags -fPIC
3845 ;;
3846 esac
3847 add_asflags -fPIC
3848}
3849
3850enabled pic && enable_weak_pic
3851
3852check_cc <<EOF || die "Symbol mangling check failed."
3853int ff_extern;
3854EOF
3855sym=$($nm $TMPO | awk '/ff_extern/{ print substr($0, match($0, /[^ \t]*ff_extern/)) }')
3856extern_prefix=${sym%%ff_extern*}
3857
3858check_cc <<EOF && enable_weak inline_asm
3859void foo(void) { __asm__ volatile ("" ::); }
3860EOF
3861
3862_restrict=
3863for restrict_keyword in restrict __restrict__ __restrict; do
3864 check_cc <<EOF && _restrict=$restrict_keyword && break
3865void foo(char * $restrict_keyword p);
3866EOF
3867done
3868
3869check_cc <<EOF && enable pragma_deprecated
3870void foo(void) { _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") }
3871EOF
3872
3873check_cc <<EOF && enable attribute_packed
3874struct { int x; } __attribute__((packed)) x;
3875EOF
3876
3877check_cc <<EOF && enable attribute_may_alias
3878union { int x; } __attribute__((may_alias)) x;
3879EOF
3880
3881check_cc <<EOF || die "endian test failed"
3882unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
3883EOF
3884od -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
3885
3886check_inline_asm inline_asm_labels '"1:\n"'
3887
3888if enabled alpha; then
3889
3890 check_cflags -mieee
3891
3892elif enabled arm; then
3893
3894 check_cpp_condition stddef.h "defined __thumb__" && check_cc <<EOF && enable_weak thumb
3895float func(float a, float b){ return a+b; }
3896EOF
3897
3898 enabled thumb && check_cflags -mthumb || check_cflags -marm
3899 nogas=die
3900
3901 if check_cpp_condition stddef.h "defined __ARM_PCS_VFP"; then
3902 enable vfp_args
3903 elif ! check_cpp_condition stddef.h "defined __ARM_PCS || defined __SOFTFP__"; then
3904 case "${cross_prefix:-$cc}" in
3905 *hardfloat*) enable vfp_args; fpabi=vfp ;;
3906 *) check_ld "cc" <<EOF && enable vfp_args && fpabi=vfp || fpabi=soft ;;
3907__asm__ (".eabi_attribute 28, 1");
3908int main(void) { return 0; }
3909EOF
3910 esac
3911 warn "Compiler does not indicate floating-point ABI, guessing $fpabi."
3912 fi
3913
3914 enabled armv5te && check_insn armv5te 'qadd r0, r0, r0'
3915 enabled armv6 && check_insn armv6 'sadd16 r0, r0, r0'
3916 enabled armv6t2 && check_insn armv6t2 'movt r0, #0'
3917 enabled neon && check_insn neon 'vadd.i16 q0, q0, q0'
3918 enabled vfp && check_insn vfp 'fadds s0, s0, s0'
3919 enabled vfpv3 && check_insn vfpv3 'vmov.f32 s0, #1.0'
3920
3921 [ $target_os = linux ] ||
3922 map 'enabled_any ${v}_external ${v}_inline || disable $v' \
3923 $ARCH_EXT_LIST_ARM
3924
3925 check_inline_asm asm_mod_q '"add r0, %Q0, %R0" :: "r"((long long)0)'
3926 check_inline_asm asm_mod_y '"vmul.i32 d0, d0, %y0" :: "x"(0)'
3927
3928 [ $target_os != win32 ] && enabled_all armv6t2 shared !pic && enable_weak_pic
3929
3930elif enabled mips; then
3931
3932 check_inline_asm loongson '"dmult.g $1, $2, $3"'
3933 enabled mips32r2 && add_cflags "-mips32r2" && add_asflags "-mips32r2" &&
3934 check_inline_asm mips32r2 '"rotr $t0, $t1, 1"'
3935 enabled mipsdspr1 && add_cflags "-mdsp" && add_asflags "-mdsp" &&
3936 check_inline_asm mipsdspr1 '"addu.qb $t0, $t1, $t2"'
3937 enabled mipsdspr2 && add_cflags "-mdspr2" && add_asflags "-mdspr2" &&
3938 check_inline_asm mipsdspr2 '"absq_s.qb $t0, $t1"'
3939 enabled mipsfpu && add_cflags "-mhard-float" && add_asflags "-mhard-float" &&
3940 check_inline_asm mipsfpu '"madd.d $f0, $f2, $f4, $f6"'
3941
3942elif enabled parisc; then
3943
3944 if enabled gcc; then
3945 case $($cc -dumpversion) in
3946 4.[3-8].*) check_cflags -fno-optimize-sibling-calls ;;
3947 esac
3948 fi
3949
3950elif enabled ppc; then
3951
3952 enable local_aligned_8 local_aligned_16
3953
3954 check_inline_asm dcbzl '"dcbzl 0, %0" :: "r"(0)'
3955 check_inline_asm ibm_asm '"add 0, 0, 0"'
3956 check_inline_asm ppc4xx '"maclhw r10, r11, r12"'
3957 check_inline_asm xform_asm '"lwzx %1, %y0" :: "Z"(*(int*)0), "r"(0)'
3958
3959 # AltiVec flags: The FSF version of GCC differs from the Apple version
3960 if enabled altivec; then
3961 if ! enabled_any pic ppc64; then
3962 nogas=warn
3963 fi
3964 check_cflags -maltivec -mabi=altivec &&
3965 { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
3966 check_cflags -faltivec
3967
3968 # check if our compiler supports Motorola AltiVec C API
3969 check_cc <<EOF || disable altivec
3970$inc_altivec_h
3971int main(void) {
3972 vector signed int v1 = (vector signed int) { 0 };
3973 vector signed int v2 = (vector signed int) { 1 };
3974 v1 = vec_add(v1, v2);
3975 return 0;
3976}
3977EOF
3978
3979 enabled altivec || warn "Altivec disabled, possibly missing --cpu flag"
3980 fi
3981
3982elif enabled sparc; then
3983
3984 enabled vis && check_inline_asm vis '"pdist %f0, %f0, %f0"'
3985
3986elif enabled x86; then
3987
3988 check_builtin rdtsc intrin.h "__rdtsc()"
3989 check_builtin mm_empty mmintrin.h "_mm_empty()"
3990
3991 enable local_aligned_8 local_aligned_16
3992
3993 # check whether EBP is available on x86
3994 # As 'i' is stored on the stack, this program will crash
3995 # if the base pointer is used to access it because the
3996 # base pointer is cleared in the inline assembly code.
3997 check_exec_crash <<EOF && enable ebp_available
3998volatile int i=0;
3999__asm__ volatile ("xorl %%ebp, %%ebp" ::: "%ebp");
4000return i;
4001EOF
4002
4003 # check whether EBX is available on x86
4004 check_inline_asm ebx_available '""::"b"(0)' &&
4005 check_inline_asm ebx_available '"":::"%ebx"'
4006
4007 # check whether xmm clobbers are supported
4008 check_inline_asm xmm_clobbers '"":::"%xmm0"'
4009
4010 # check whether binutils is new enough to compile SSSE3/MMXEXT
4011 enabled ssse3 && check_inline_asm ssse3_inline '"pabsw %xmm0, %xmm0"'
4012 enabled mmxext && check_inline_asm mmxext_inline '"pmaxub %mm0, %mm1"'
4013
4014 if ! disabled_any asm mmx yasm; then
4015 if check_cmd $yasmexe --version; then
4016 enabled x86_64 && yasm_extra="-m amd64"
4017 yasm_debug="-g dwarf2"
4018 elif check_cmd nasm -v; then
4019 yasmexe=nasm
4020 yasm_debug="-g -F dwarf"
4021 enabled x86_64 && test "$objformat" = elf && objformat=elf64
4022 fi
4023
4024 YASMFLAGS="-f $objformat $yasm_extra"
4025 enabled pic && append YASMFLAGS "-DPIC"
4026 test -n "$extern_prefix" && append YASMFLAGS "-DPREFIX"
4027 case "$objformat" in
4028 elf*) enabled debug && append YASMFLAGS $yasm_debug ;;
4029 esac
4030
4031 check_yasm "movbe ecx, [5]" && enable yasm ||
4032 die "yasm/nasm not found or too old. Use --disable-yasm for a crippled build."
4033 check_yasm "vextractf128 xmm0, ymm0, 0" || disable avx_external avresample
4034 check_yasm "vfmaddps ymm0, ymm1, ymm2, ymm3" || disable fma4_external
4035 check_yasm "CPU amdnop" && enable cpunop
4036 fi
4037
4038 case "$cpu" in
4039 athlon*|opteron*|k8*|pentium|pentium-mmx|prescott|nocona|atom|geode)
4040 disable fast_clz
4041 ;;
4042 esac
4043
4044fi
4045
4046if enabled asm; then
4047 as=${gas:=$as}
4048 check_as <<EOF && enable gnu_as || \
4049 $nogas "GNU assembler not found, install gas-preprocessor"
4050.macro m n
4051\n: .int 0
4052.endm
4053m x
4054EOF
4055fi
4056
4057check_ldflags -Wl,--as-needed
4058
4059if check_func dlopen; then
4060 ldl=
4061elif check_func dlopen -ldl; then
4062 ldl=-ldl
4063fi
4064
4065if ! disabled network; then
4066 check_type "sys/types.h sys/socket.h" socklen_t
4067 check_type netdb.h "struct addrinfo"
4068 check_type netinet/in.h "struct group_source_req" -D_BSD_SOURCE
4069 check_type netinet/in.h "struct ip_mreq_source" -D_BSD_SOURCE
4070 check_type netinet/in.h "struct ipv6_mreq" -D_DARWIN_C_SOURCE
4071 check_type netinet/in.h "struct sockaddr_in6"
4072 check_type poll.h "struct pollfd"
4073 check_type "sys/types.h sys/socket.h" "struct sockaddr_storage"
4074 check_struct "sys/types.h sys/socket.h" "struct sockaddr" sa_len
4075 check_type netinet/sctp.h "struct sctp_event_subscribe"
4076 check_func getaddrinfo $network_extralibs
4077 check_func getservbyport $network_extralibs
4078 # Prefer arpa/inet.h over winsock2
4079 if check_header arpa/inet.h ; then
4080 check_func closesocket
4081 elif check_header winsock2.h ; then
4082 check_func_headers winsock2.h closesocket -lws2 &&
4083 network_extralibs="-lws2" ||
4084 { check_func_headers winsock2.h closesocket -lws2_32 &&
4085 network_extralibs="-lws2_32"; }
4086 check_func_headers ws2tcpip.h getaddrinfo $network_extralibs
4087 check_type ws2tcpip.h socklen_t
4088 check_type ws2tcpip.h "struct addrinfo"
4089 check_type ws2tcpip.h "struct group_source_req"
4090 check_type ws2tcpip.h "struct ip_mreq_source"
4091 check_type ws2tcpip.h "struct ipv6_mreq"
4092 check_type winsock2.h "struct pollfd"
4093 check_type ws2tcpip.h "struct sockaddr_in6"
4094 check_type ws2tcpip.h "struct sockaddr_storage"
4095 check_struct winsock2.h "struct sockaddr" sa_len
4096 else
4097 disable network
4098 fi
4099fi
4100
4101# Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
4102check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
4103
4104check_func access
4105check_func clock_gettime || { check_func clock_gettime -lrt && add_extralibs -lrt; }
4106check_func fcntl
4107check_func fork
4108check_func_headers stdlib.h getenv
4109check_func gethrtime
4110check_func getopt
4111check_func getrusage
4112check_struct "sys/time.h sys/resource.h" "struct rusage" ru_maxrss
4113check_func gettimeofday
4114check_func inet_aton $network_extralibs
4115check_func isatty
4116check_func localtime_r
4117check_func ${malloc_prefix}memalign && enable memalign
4118check_func mkstemp
4119check_func mmap
4120check_func mprotect
4121check_func ${malloc_prefix}posix_memalign && enable posix_memalign
4122check_func_headers malloc.h _aligned_malloc && enable aligned_malloc
4123check_func setrlimit
4124check_struct "sys/stat.h" "struct stat" st_mtim.tv_nsec -D_BSD_SOURCE
4125check_func strerror_r
4126check_func sched_getaffinity
4127check_builtin sync_val_compare_and_swap "" "int *ptr; int oldval, newval; __sync_val_compare_and_swap(ptr, oldval, newval)"
4128check_builtin machine_rw_barrier mbarrier.h "__machine_rw_barrier()"
4129check_builtin atomic_cas_ptr atomic.h "void **ptr; void *oldval, *newval; atomic_cas_ptr(ptr, oldval, newval)"
4130check_builtin MemoryBarrier windows.h "MemoryBarrier()"
4131check_builtin sarestart signal.h "SA_RESTART"
4132check_func sysconf
4133check_func sysctl
4134check_func usleep
4135check_func_headers conio.h kbhit
4136check_func_headers windows.h PeekNamedPipe
4137check_func_headers io.h setmode
4138check_func_headers lzo/lzo1x.h lzo1x_999_compress
4139check_lib2 "windows.h shellapi.h" CommandLineToArgvW -lshell32
4140check_lib2 "windows.h wincrypt.h" CryptGenRandom -ladvapi32
4141check_lib2 "windows.h psapi.h" GetProcessMemoryInfo -lpsapi
4142check_func_headers windows.h GetProcessAffinityMask
4143check_func_headers windows.h GetProcessTimes
4144check_func_headers windows.h GetSystemTimeAsFileTime
4145check_func_headers windows.h MapViewOfFile
4146check_func_headers windows.h SetConsoleTextAttribute
4147check_func_headers windows.h Sleep
4148check_func_headers windows.h VirtualAlloc
4149check_func_headers glob.h glob
4150check_func_headers "X11/Xlib.h X11/extensions/Xvlib.h" XvGetPortAttribute -lXv -lX11 -lXext
4151
4152check_header cl/cl.h
4153check_header direct.h
4154check_header dlfcn.h
4155check_header dxva.h
4156check_header dxva2api.h -D_WIN32_WINNT=0x0600
4157check_header io.h
4158check_header libcrystalhd/libcrystalhd_if.h
4159check_header malloc.h
4160check_header poll.h
4161check_header sys/mman.h
4162check_header sys/param.h
4163check_header sys/resource.h
4164check_header sys/select.h
4165check_header sys/time.h
4166check_header sys/un.h
4167check_header termios.h
4168check_header unistd.h
4169check_header vdpau/vdpau.h
4170check_header vdpau/vdpau_x11.h
4171check_header VideoDecodeAcceleration/VDADecoder.h
4172check_header windows.h
4173check_header X11/extensions/XvMClib.h
4174check_header asm/types.h
4175
4176disabled zlib || check_lib zlib.h zlibVersion -lz || disable zlib
4177disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
4178
4179if ! disabled w32threads && ! enabled pthreads; then
4180 check_func_headers "windows.h process.h" _beginthreadex && enable w32threads
4181fi
4182
4183# check for some common methods of building with pthread support
4184# do this before the optional library checks as some of them require pthreads
4185if ! disabled pthreads && ! enabled w32threads && ! enabled os2threads; then
4186 enable pthreads
4187 if check_func pthread_create; then
4188 :
4189 elif check_func pthread_create -pthread; then
4190 add_cflags -pthread
4191 add_extralibs -pthread
4192 elif check_func pthread_create -pthreads; then
4193 add_cflags -pthreads
4194 add_extralibs -pthreads
4195 elif check_func pthread_create -lpthreadGC2; then
4196 add_extralibs -lpthreadGC2
4197 elif ! check_lib pthread.h pthread_create -lpthread; then
4198 disable pthreads
4199 fi
4200fi
4201
4202for thread in $THREADS_LIST; do
4203 if enabled $thread; then
4204 test -n "$thread_type" &&
4205 die "ERROR: Only one thread type must be selected." ||
4206 thread_type="$thread"
4207 fi
4208done
4209
4210if enabled pthreads; then
4211 check_func pthread_cancel
4212fi
4213
4214enabled sync_val_compare_and_swap && enable atomics_gcc
4215enabled_all atomic_cas_ptr machine_rw_barrier && enable atomics_suncc
4216enabled MemoryBarrier && enable atomics_win32
4217
4218check_lib math.h sin -lm && LIBM="-lm"
4219disabled crystalhd || check_lib libcrystalhd/libcrystalhd_if.h DtsCrystalHDVersion -lcrystalhd || disable crystalhd
4220
4221atan2f_args=2
4222ldexpf_args=2
4223powf_args=2
4224
4225for func in $MATH_FUNCS; do
4226 eval check_mathfunc $func \${${func}_args:-1}
4227done
4228
4229# these are off by default, so fail if requested and not available
4230enabled avisynth && { { check_lib2 "windows.h" LoadLibrary; } ||
4231 { check_lib2 "dlfcn.h" dlopen -ldl; } ||
4232 die "ERROR: LoadLibrary/dlopen not found for avisynth"; }
4233enabled fontconfig && require_pkg_config fontconfig "fontconfig/fontconfig.h" FcInit
4234enabled frei0r && { check_header frei0r.h || die "ERROR: frei0r.h header not found"; }
4235enabled gnutls && require_pkg_config gnutls gnutls/gnutls.h gnutls_global_init
4236enabled ladspa && { check_header ladspa.h || die "ERROR: ladspa.h header not found"; }
4237enabled libiec61883 && require libiec61883 libiec61883/iec61883.h iec61883_cmp_connect -lraw1394 -lavc1394 -lrom1394 -liec61883
4238enabled libaacplus && require "libaacplus >= 2.0.0" aacplus.h aacplusEncOpen -laacplus
4239enabled libass && require_pkg_config libass ass/ass.h ass_library_init
4240enabled libbluray && require libbluray libbluray/bluray.h bd_open -lbluray
4241enabled libcelt && require libcelt celt/celt.h celt_decode -lcelt0 &&
4242 { check_lib celt/celt.h celt_decoder_create_custom -lcelt0 ||
4243 die "ERROR: libcelt must be installed and version must be >= 0.11.0."; }
4244enabled libcaca && require_pkg_config caca caca.h caca_create_canvas
4245enabled libfaac && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
4246enabled libfdk_aac && require libfdk_aac fdk-aac/aacenc_lib.h aacEncOpen -lfdk-aac
4247flite_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"
4248enabled libflite && require2 libflite "flite/flite.h" flite_init $flite_libs
4249enabled libfreetype && require_pkg_config freetype2 "ft2build.h freetype/freetype.h" FT_Init_FreeType
4250enabled libgme && require libgme gme/gme.h gme_new_emu -lgme -lstdc++
4251enabled libgsm && { for gsm_hdr in "gsm.h" "gsm/gsm.h"; do
4252 check_lib "${gsm_hdr}" gsm_create -lgsm && break;
4253 done || die "ERROR: libgsm not found"; }
4254enabled libilbc && require libilbc ilbc.h WebRtcIlbcfix_InitDecode -lilbc
4255enabled libmodplug && require libmodplug libmodplug/modplug.h ModPlug_Load -lmodplug
4256enabled libmp3lame && require "libmp3lame >= 3.98.3" lame/lame.h lame_set_VBR_quality -lmp3lame
4257enabled libnut && require libnut libnut.h nut_demuxer_init -lnut
4258enabled libopencore_amrnb && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb
4259enabled libopencore_amrwb && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb
4260enabled libopencv && require_pkg_config opencv opencv/cxcore.h cvCreateImageHeader
4261enabled libopenjpeg && { check_lib openjpeg-1.5/openjpeg.h opj_version -lopenjpeg ||
4262 check_lib openjpeg.h opj_version -lopenjpeg ||
4263 die "ERROR: libopenjpeg not found"; }
4264enabled libopus && require_pkg_config opus opus_multistream.h opus_multistream_decoder_create
4265enabled libpulse && require_pkg_config libpulse-simple pulse/simple.h pa_simple_new
4266enabled libquvi && require_pkg_config libquvi quvi/quvi.h quvi_init
4267enabled librtmp && require_pkg_config librtmp librtmp/rtmp.h RTMP_Socket
4268enabled libschroedinger && require_pkg_config schroedinger-1.0 schroedinger/schro.h schro_init
4269enabled libshine && require_pkg_config shine shine/layer3.h shine_encode_buffer
4270enabled libsoxr && require libsoxr soxr.h soxr_create -lsoxr
4271enabled libssh && require_pkg_config libssh libssh/sftp.h sftp_init
4272enabled libspeex && require libspeex speex/speex.h speex_decoder_init -lspeex
4273enabled libstagefright_h264 && require_cpp libstagefright_h264 "binder/ProcessState.h media/stagefright/MetaData.h
4274 media/stagefright/MediaBufferGroup.h media/stagefright/MediaDebug.h media/stagefright/MediaDefs.h
4275 media/stagefright/OMXClient.h media/stagefright/OMXCodec.h" android::OMXClient -lstagefright -lmedia -lutils -lbinder -lgnustl_static
4276enabled libtheora && require libtheora theora/theoraenc.h th_info_init -ltheoraenc -ltheoradec -logg
4277enabled libtwolame && require libtwolame twolame.h twolame_init -ltwolame &&
4278 { check_lib twolame.h twolame_encode_buffer_float32_interleaved -ltwolame ||
4279 die "ERROR: libtwolame must be installed and version must be >= 0.3.10"; }
4280enabled libutvideo && require_cpp utvideo "stdint.h stdlib.h utvideo/utvideo.h utvideo/Codec.h" 'CCodec*' -lutvideo -lstdc++
4281enabled libv4l2 && require_pkg_config libv4l2 libv4l2.h v4l2_ioctl
4282enabled libvidstab && require_pkg_config vidstab vid.stab/libvidstab.h vsMotionDetectInit
4283enabled libvo_aacenc && require libvo_aacenc vo-aacenc/voAAC.h voGetAACEncAPI -lvo-aacenc
4284enabled libvo_amrwbenc && require libvo_amrwbenc vo-amrwbenc/enc_if.h E_IF_init -lvo-amrwbenc
4285enabled libvorbis && require libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
4286enabled libvpx && {
4287 enabled libvpx_vp8_decoder && { check_lib2 "vpx/vpx_decoder.h vpx/vp8dx.h" vpx_codec_dec_init_ver -lvpx ||
4288 die "ERROR: libvpx decoder version must be >=0.9.1"; }
4289 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 ||
4290 die "ERROR: libvpx encoder version must be >=0.9.7"; }
4291 enabled libvpx_vp9_decoder && { check_lib2 "vpx/vpx_decoder.h vpx/vp8dx.h" "vpx_codec_vp9_dx" -lvpx || disable libvpx_vp9_decoder; }
4292 enabled libvpx_vp9_encoder && { check_lib2 "vpx/vpx_encoder.h vpx/vp8cx.h" "vpx_codec_vp9_cx" -lvpx || disable libvpx_vp9_encoder; } }
4293enabled libwavpack && require libwavpack wavpack/wavpack.h WavpackOpenFileOutput -lwavpack
4294enabled libx264 && require libx264 x264.h x264_encoder_encode -lx264 &&
4295 { check_cpp_condition x264.h "X264_BUILD >= 118" ||
4296 die "ERROR: libx264 must be installed and version must be >= 0.118."; }
4297enabled libxavs && require libxavs xavs.h xavs_encoder_encode -lxavs
4298enabled libxvid && require libxvid xvid.h xvid_global -lxvidcore
4299enabled libzmq && require_pkg_config libzmq zmq.h zmq_ctx_new
4300enabled libzvbi && require libzvbi libzvbi.h vbi_decoder_new -lzvbi
4301enabled openal && { { for al_libs in "${OPENAL_LIBS}" "-lopenal" "-lOpenAL32"; do
4302 check_lib 'AL/al.h' alGetError "${al_libs}" && break; done } ||
4303 die "ERROR: openal not found"; } &&
4304 { check_cpp_condition "AL/al.h" "defined(AL_VERSION_1_1)" ||
4305 die "ERROR: openal must be installed and version must be 1.1 or compatible"; }
4306enabled opencl && { check_lib2 OpenCL/cl.h clEnqueueNDRangeKernel -Wl,-framework,OpenCL ||
4307 check_lib2 CL/cl.h clEnqueueNDRangeKernel -lOpenCL ||
4308 die "ERROR: opencl not found"; } &&
4309 { ! enabled_any w32threads os2threads ||
4310 die "opencl currently needs --enable-pthreads or --disable-w32threads"; } &&
4311 { check_cpp_condition "OpenCL/cl.h" "defined(CL_VERSION_1_2)" ||
4312 check_cpp_condition "CL/cl.h" "defined(CL_VERSION_1_2)" ||
4313 die "ERROR: opencl must be installed and version must be 1.2 or compatible"; }
4314enabled openssl && { check_lib openssl/ssl.h SSL_library_init -lssl -lcrypto ||
4315 check_lib openssl/ssl.h SSL_library_init -lssl32 -leay32 ||
4316 check_lib openssl/ssl.h SSL_library_init -lssl -lcrypto -lws2_32 -lgdi32 ||
4317 die "ERROR: openssl not found"; }
4318
4319if enabled gnutls; then
4320 { check_lib nettle/bignum.h nettle_mpz_get_str_256 -lnettle -lhogweed -lgmp && enable nettle; } ||
4321 { check_lib gcrypt.h gcry_mpi_new -lgcrypt && enable gcrypt; }
4322fi
4323
4324# libdc1394 check
4325if enabled libdc1394; then
4326 { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
4327 enable libdc1394_2; } ||
4328 { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
4329 enable libdc1394_1; } ||
4330 die "ERROR: No version of libdc1394 found "
4331fi
4332
4333SDL_CONFIG="${cross_prefix}sdl-config"
4334if check_pkg_config sdl SDL_events.h SDL_PollEvent; then
4335 check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
4336 check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) < 0x010300" $sdl_cflags &&
4337 enable sdl
4338else
4339 if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
4340 sdl_cflags=$("${SDL_CONFIG}" --cflags)
4341 sdl_libs=$("${SDL_CONFIG}" --libs)
4342 check_func_headers SDL_version.h SDL_Linked_Version $sdl_cflags $sdl_libs &&
4343 check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
4344 check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) < 0x010300" $sdl_cflags &&
4345 enable sdl
4346 fi
4347fi
4348enabled sdl && add_cflags $sdl_cflags && add_extralibs $sdl_libs
4349
4350texi2html --help 2> /dev/null | grep -q 'init-file' && enable texi2html || disable texi2html
4351makeinfo --version > /dev/null 2>&1 && enable makeinfo || disable makeinfo
4352perl --version > /dev/null 2>&1 && enable perl || disable perl
4353pod2man --help > /dev/null 2>&1 && enable pod2man || disable pod2man
4354rsync --help 2> /dev/null | grep -q 'contimeout' && enable rsync_contimeout || disable rsync_contimeout
4355
4356check_header linux/fb.h
4357check_header linux/videodev.h
4358check_header linux/videodev2.h
4359check_code cc linux/videodev2.h "struct v4l2_frmsizeenum vfse; vfse.discrete.width = 0;" && enable_safe struct_v4l2_frmivalenum_discrete
4360
4361check_header sys/videoio.h
4362
4363check_func_headers "windows.h vfw.h" capCreateCaptureWindow "$vfwcap_indev_extralibs"
4364# check that WM_CAP_DRIVER_CONNECT is defined to the proper value
4365# w32api 3.12 had it defined wrong
4366check_cpp_condition vfw.h "WM_CAP_DRIVER_CONNECT > WM_USER" && enable vfwcap_defines
4367
4368check_type "dshow.h" IBaseFilter
4369
4370# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
4371{ check_header dev/bktr/ioctl_meteor.h &&
4372 check_header dev/bktr/ioctl_bt848.h; } ||
4373{ check_header machine/ioctl_meteor.h &&
4374 check_header machine/ioctl_bt848.h; } ||
4375{ check_header dev/video/meteor/ioctl_meteor.h &&
4376 check_header dev/video/bktr/ioctl_bt848.h; } ||
4377check_header dev/ic/bt8xx.h
4378
4379check_header sndio.h
4380if check_struct sys/soundcard.h audio_buf_info bytes; then
4381 enable_safe sys/soundcard.h
4382else
4383 check_cc -D__BSD_VISIBLE -D__XSI_VISIBLE <<EOF && add_cppflags -D__BSD_VISIBLE -D__XSI_VISIBLE && enable_safe sys/soundcard.h
4384 #include <sys/soundcard.h>
4385 audio_buf_info abc;
4386EOF
4387fi
4388check_header soundcard.h
4389
4390enabled_any alsa_indev alsa_outdev &&
4391 check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
4392
4393enabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack && check_func sem_timedwait &&
4394 check_func jack_port_get_latency_range -ljack
4395
4396enabled_any sndio_indev sndio_outdev && check_lib2 sndio.h sio_open -lsndio
4397
4398if enabled libcdio; then
4399 check_lib2 "cdio/cdda.h cdio/paranoia.h" cdio_cddap_open -lcdio_paranoia -lcdio_cdda -lcdio ||
4400 check_lib2 "cdio/paranoia/cdda.h cdio/paranoia/paranoia.h" cdio_cddap_open -lcdio_paranoia -lcdio_cdda -lcdio ||
4401 die "ERROR: libcdio-paranoia not found"
4402fi
4403
4404enabled x11grab &&
4405require X11 X11/Xlib.h XOpenDisplay -lX11 &&
4406require Xext X11/extensions/XShm.h XShmCreateImage -lXext &&
4407require Xfixes X11/extensions/Xfixes.h XFixesGetCursorImage -lXfixes
4408
4409enabled vaapi &&
4410 check_lib va/va.h vaInitialize -lva ||
4411 disable vaapi
4412
4413enabled vdpau &&
4414 check_cpp_condition vdpau/vdpau.h "defined VDP_DECODER_PROFILE_MPEG4_PART2_ASP" ||
4415 disable vdpau
4416
4417# Funny iconv installations are not unusual, so check it after all flags have been set
4418disabled iconv || check_func_headers iconv.h iconv || check_lib2 iconv.h iconv -liconv || disable iconv
4419
4420enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel"
4421
4422# add some useful compiler flags if supported
4423check_cflags -Wdeclaration-after-statement
4424check_cflags -Wall
4425check_cflags -Wno-parentheses
4426check_cflags -Wno-switch
4427check_cflags -Wno-format-zero-length
4428check_cflags -Wdisabled-optimization
4429check_cflags -Wpointer-arith
4430check_cflags -Wredundant-decls
4431check_cflags -Wno-pointer-sign
4432check_cflags -Wwrite-strings
4433check_cflags -Wtype-limits
4434check_cflags -Wundef
4435check_cflags -Wmissing-prototypes
4436check_cflags -Wno-pointer-to-int-cast
4437check_cflags -Wstrict-prototypes
4438enabled extra_warnings && check_cflags -Winline
4439
4440# add some linker flags
4441check_ldflags -Wl,--warn-common
4442check_ldflags -Wl,-rpath-link=libpostproc:libswresample:libswscale:libavfilter:libavdevice:libavformat:libavcodec:libavutil:libavresample
4443test_ldflags -Wl,-Bsymbolic && append SHFLAGS -Wl,-Bsymbolic
4444
4445enabled xmm_clobber_test &&
4446 check_ldflags -Wl,--wrap,avcodec_open2 \
4447 -Wl,--wrap,avcodec_decode_audio4 \
4448 -Wl,--wrap,avcodec_decode_video2 \
4449 -Wl,--wrap,avcodec_decode_subtitle2 \
4450 -Wl,--wrap,avcodec_encode_audio2 \
4451 -Wl,--wrap,avcodec_encode_video \
4452 -Wl,--wrap,avcodec_encode_video2 \
4453 -Wl,--wrap,avcodec_encode_subtitle \
4454 -Wl,--wrap,sws_scale ||
4455 disable xmm_clobber_test
4456
4457echo "X{};" > $TMPV
4458if test_ldflags -Wl,--version-script,$TMPV; then
4459 append SHFLAGS '-Wl,--version-script,\$(SUBDIR)lib\$(NAME).ver'
4460 check_cc <<EOF && enable symver_asm_label
4461void ff_foo(void) __asm__ ("av_foo@VERSION");
4462void ff_foo(void) { ${inline_asm+__asm__($quotes);} }
4463EOF
4464 check_cc <<EOF && enable symver_gnu_asm
4465__asm__(".symver ff_foo,av_foo@VERSION");
4466void ff_foo(void) {}
4467EOF
4468fi
4469
4470if [ -z "$optflags" ]; then
4471 if enabled small; then
4472 optflags=$cflags_size
4473 elif enabled optimizations; then
4474 optflags=$cflags_speed
4475 else
4476 optflags=$cflags_noopt
4477 fi
4478fi
4479
4480check_optflags(){
4481 check_cflags "$@"
4482 enabled lto && check_ldflags "$@"
4483}
4484
4485
4486if enabled lto; then
4487 test "$cc_type" != "$ld_type" && die "LTO requires same compiler and linker"
4488 check_cflags -flto
4489 check_ldflags -flto $cpuflags
4490fi
4491
4492check_optflags $optflags
4493check_optflags -fno-math-errno
4494check_optflags -fno-signed-zeros
4495
4496enabled ftrapv && check_cflags -ftrapv
4497
4498check_cc -mno-red-zone <<EOF && noredzone_flags="-mno-red-zone"
4499int x;
4500EOF
4501
4502
4503if enabled icc; then
4504 # Just warnings, no remarks
4505 check_cflags -w1
4506 # -wd: Disable following warnings
4507 # 144, 167, 556: -Wno-pointer-sign
4508 # 188: enumerated type mixed with another type
4509 # 1292: attribute "foo" ignored
4510 # 1419: external declaration in primary source file
4511 # 10006: ignoring unknown option -fno-signed-zeros
4512 # 10148: ignoring unknown option -Wno-parentheses
4513 # 10156: ignoring option '-W'; no argument required
4514 check_cflags -wd144,167,188,556,1292,1419,10006,10148,10156
4515 # 11030: Warning unknown option --as-needed
4516 # 10156: ignoring option '-export'; no argument required
4517 check_ldflags -wd10156,11030
4518 # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
4519 enable ebp_available
4520 if enabled x86_32; then
4521 icc_version=$($cc -dumpversion)
4522 test ${icc_version%%.*} -ge 11 &&
4523 check_cflags -falign-stack=maintain-16-byte ||
4524 disable aligned_stack
4525 fi
4526elif enabled ccc; then
4527 # disable some annoying warnings
4528 add_cflags -msg_disable bitnotint
4529 add_cflags -msg_disable mixfuncvoid
4530 add_cflags -msg_disable nonstandcast
4531 add_cflags -msg_disable unsupieee
4532elif enabled gcc; then
4533 check_optflags -fno-tree-vectorize
4534 check_cflags -Werror=implicit-function-declaration
4535 check_cflags -Werror=missing-prototypes
4536 check_cflags -Werror=return-type
4537 check_cflags -Werror=vla
4538 enabled extra_warnings || check_cflags -Wno-maybe-uninitialized
4539elif enabled llvm_gcc; then
4540 check_cflags -mllvm -stack-alignment=16
4541elif enabled clang; then
4542 check_cflags -mllvm -stack-alignment=16
4543 check_cflags -Qunused-arguments
4544 check_cflags -Werror=implicit-function-declaration
4545 check_cflags -Werror=missing-prototypes
4546 check_cflags -Werror=return-type
4547elif enabled cparser; then
4548 add_cflags -Wno-missing-variable-declarations
4549 add_cflags -Wno-empty-statement
4550elif enabled armcc; then
4551 # 2523: use of inline assembler is deprecated
4552 add_cflags -W${armcc_opt},--diag_suppress=2523
4553 add_cflags -W${armcc_opt},--diag_suppress=1207
4554 add_cflags -W${armcc_opt},--diag_suppress=1293 # assignment in condition
4555 add_cflags -W${armcc_opt},--diag_suppress=3343 # hardfp compat
4556 add_cflags -W${armcc_opt},--diag_suppress=167 # pointer sign
4557 add_cflags -W${armcc_opt},--diag_suppress=513 # pointer sign
4558elif enabled tms470; then
4559 add_cflags -pds=824 -pds=837
4560elif enabled pathscale; then
4561 add_cflags -fstrict-overflow -OPT:wrap_around_unsafe_opt=OFF
4562elif enabled_any msvc icl; then
4563 enabled x86_32 && disable aligned_stack
4564 enabled_all x86_32 debug && add_cflags -Oy-
4565 enabled debug && add_ldflags -debug
4566 enable pragma_deprecated
4567 if enabled icl; then
4568 # -Qansi-alias is basically -fstrict-aliasing, but does not work
4569 # (correctly) on icl 13.x.
4570 check_cpp_condition "windows.h" "__ICL < 1300 || __ICL >= 1400" &&
4571 add_cflags -Qansi-alias
4572 # icl will pass the inline asm tests but inline asm is currently
4573 # not supported (build will fail)
4574 disabled inline_asm || warn "inline asm disabled due to issues with it in ICL"
4575 disable inline_asm
4576 fi
4577fi
4578
4579case $target_os in
4580 osf1)
4581 enabled ccc && add_ldflags '-Wl,-expect_unresolved,*'
4582 ;;
4583 plan9)
4584 add_cppflags -Dmain=plan9_main
4585 ;;
4586esac
4587
4588enable frame_thread_encoder
4589enabled_any $THREADS_LIST && enable threads
4590enabled_any $ATOMICS_LIST && enable atomics_native
4591
4592enabled 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"
4593
4594enabled asm || { arch=c; disable $ARCH_LIST $ARCH_EXT_LIST; }
4595
4596check_deps $CONFIG_LIST \
4597 $CONFIG_EXTRA \
4598 $HAVE_LIST \
4599 $ALL_COMPONENTS \
4600
4601
4602if test $target_os = "haiku"; then
4603 disable memalign
4604 disable posix_memalign
4605fi
4606
4607! enabled_any memalign posix_memalign aligned_malloc &&
4608 enabled_any $need_memalign && enable memalign_hack
4609
4610# add_dep lib dep
4611# -> enable ${lib}_deps_${dep}
4612# -> add $dep to ${lib}_deps only once
4613add_dep() {
4614 lib=$1
4615 dep=$2
4616 enabled "${lib}_deps_${dep}" && return 0
4617 enable "${lib}_deps_${dep}"
4618 prepend "${lib}_deps" $dep
4619}
4620
4621# merge deps lib components
4622# merge all ${component}_deps into ${lib}_deps and ${lib}_deps_*
4623merge_deps() {
4624 lib=$1
4625 shift
4626 for comp in $*; do
4627 enabled $comp || continue
4628 eval "dep=\"\$${comp}_deps\""
4629 for d in $dep; do
4630 add_dep $lib $d
4631 done
4632 done
4633}
4634
4635merge_deps libavfilter $FILTER_LIST
4636
4637echo "install prefix $prefix"
4638echo "source path $source_path"
4639echo "C compiler $cc"
4640echo "ARCH $arch ($cpu)"
4641if test "$build_suffix" != ""; then
4642 echo "build suffix $build_suffix"
4643fi
4644if test "$progs_suffix" != ""; then
4645 echo "progs suffix $progs_suffix"
4646fi
4647if test "$extra_version" != ""; then
4648 echo "version string suffix $extra_version"
4649fi
4650echo "big-endian ${bigendian-no}"
4651echo "runtime cpu detection ${runtime_cpudetect-no}"
4652if enabled x86; then
4653 echo "${yasmexe} ${yasm-no}"
4654 echo "MMX enabled ${mmx-no}"
4655 echo "MMXEXT enabled ${mmxext-no}"
4656 echo "3DNow! enabled ${amd3dnow-no}"
4657 echo "3DNow! extended enabled ${amd3dnowext-no}"
4658 echo "SSE enabled ${sse-no}"
4659 echo "SSSE3 enabled ${ssse3-no}"
4660 echo "AVX enabled ${avx-no}"
4661 echo "FMA4 enabled ${fma4-no}"
4662 echo "i686 features enabled ${i686-no}"
4663 echo "CMOV is fast ${fast_cmov-no}"
4664 echo "EBX available ${ebx_available-no}"
4665 echo "EBP available ${ebp_available-no}"
4666fi
4667if enabled arm; then
4668 echo "ARMv5TE enabled ${armv5te-no}"
4669 echo "ARMv6 enabled ${armv6-no}"
4670 echo "ARMv6T2 enabled ${armv6t2-no}"
4671 echo "VFP enabled ${vfp-no}"
4672 echo "NEON enabled ${neon-no}"
4673 echo "THUMB enabled ${thumb-no}"
4674fi
4675if enabled mips; then
4676 echo "MIPS FPU enabled ${mipsfpu-no}"
4677 echo "MIPS32R2 enabled ${mips32r2-no}"
4678 echo "MIPS DSP R1 enabled ${mipsdspr1-no}"
4679 echo "MIPS DSP R2 enabled ${mipsdspr2-no}"
4680fi
4681if enabled ppc; then
4682 echo "AltiVec enabled ${altivec-no}"
4683 echo "PPC 4xx optimizations ${ppc4xx-no}"
4684 echo "dcbzl available ${dcbzl-no}"
4685fi
4686if enabled sparc; then
4687 echo "VIS enabled ${vis-no}"
4688fi
4689echo "debug symbols ${debug-no}"
4690echo "strip symbols ${stripping-no}"
4691echo "optimize for size ${small-no}"
4692echo "optimizations ${optimizations-no}"
4693echo "static ${static-no}"
4694echo "shared ${shared-no}"
4695echo "postprocessing support ${postproc-no}"
4696echo "new filter support ${avfilter-no}"
4697echo "network support ${network-no}"
4698echo "threading support ${thread_type-no}"
4699echo "safe bitstream reader ${safe_bitstream_reader-no}"
4700echo "SDL support ${sdl-no}"
4701echo "opencl enabled ${opencl-no}"
4702echo "libzvbi enabled ${libzvbi-no}"
4703echo "texi2html enabled ${texi2html-no}"
4704echo "perl enabled ${perl-no}"
4705echo "pod2man enabled ${pod2man-no}"
4706echo "makeinfo enabled ${makeinfo-no}"
4707test -n "$random_seed" &&
4708 echo "random seed ${random_seed}"
4709echo
4710
4711echo "External libraries:"
4712print_enabled '' $EXTERNAL_LIBRARY_LIST | print_3_columns
4713echo
4714
4715for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
4716 echo "Enabled ${type}s:"
4717 eval list=\$$(toupper $type)_LIST
4718 print_enabled '_*' $list | print_3_columns
4719 echo
4720done
4721
4722license="LGPL version 2.1 or later"
4723if enabled nonfree; then
4724 license="nonfree and unredistributable"
4725elif enabled gplv3; then
4726 license="GPL version 3 or later"
4727elif enabled lgplv3; then
4728 license="LGPL version 3 or later"
4729elif enabled gpl; then
4730 license="GPL version 2 or later"
4731fi
4732
4733echo "License: $license"
4734
4735echo "Creating config.mak, config.h, and doc/config.texi..."
4736
4737test -e Makefile || $ln_s "$source_path/Makefile" .
4738
4739enabled stripping || strip="echo skipping strip"
4740
4741config_files="$TMPH config.mak doc/config.texi"
4742
4743cat > config.mak <<EOF
4744# Automatically generated by configure - do not modify!
4745ifndef FFMPEG_CONFIG_MAK
4746FFMPEG_CONFIG_MAK=1
4747FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION
4748prefix=$prefix
4749LIBDIR=\$(DESTDIR)$libdir
4750SHLIBDIR=\$(DESTDIR)$shlibdir
4751INCDIR=\$(DESTDIR)$incdir
4752BINDIR=\$(DESTDIR)$bindir
4753DATADIR=\$(DESTDIR)$datadir
4754DOCDIR=\$(DESTDIR)$docdir
4755MANDIR=\$(DESTDIR)$mandir
4756SRC_PATH=$source_path
4757ifndef MAIN_MAKEFILE
4758SRC_PATH:=\$(SRC_PATH:.%=..%)
4759endif
4760CC_IDENT=$cc_ident
4761ARCH=$arch
4762CC=$cc
4763CXX=$cxx
4764AS=$as
4765LD=$ld
4766DEPCC=$dep_cc
4767DEPCCFLAGS=$DEPCCFLAGS \$(CPPFLAGS)
4768DEPAS=$as
4769DEPASFLAGS=$DEPASFLAGS \$(CPPFLAGS)
4770YASM=$yasmexe
4771DEPYASM=$yasmexe
4772AR=$ar
4773ARFLAGS=$arflags
4774AR_O=$ar_o
4775RANLIB=$ranlib
4776STRIP=$strip
4777CP=cp -p
4778LN_S=$ln_s
4779CPPFLAGS=$CPPFLAGS
4780CFLAGS=$CFLAGS
4781CXXFLAGS=$CXXFLAGS
4782ASFLAGS=$ASFLAGS
4783AS_C=$AS_C
4784AS_O=$AS_O
4785CC_C=$CC_C
4786CC_E=$CC_E
4787CC_O=$CC_O
4788CXX_C=$CXX_C
4789CXX_O=$CXX_O
4790LD_O=$LD_O
4791LD_LIB=$LD_LIB
4792LD_PATH=$LD_PATH
4793DLLTOOL=$dlltool
4794LDFLAGS=$LDFLAGS
4795SHFLAGS=$(echo $($ldflags_filter $SHFLAGS))
4796YASMFLAGS=$YASMFLAGS
4797BUILDSUF=$build_suffix
4798PROGSSUF=$progs_suffix
4799FULLNAME=$FULLNAME
4800LIBPREF=$LIBPREF
4801LIBSUF=$LIBSUF
4802LIBNAME=$LIBNAME
4803SLIBPREF=$SLIBPREF
4804SLIBSUF=$SLIBSUF
4805EXESUF=$EXESUF
4806EXTRA_VERSION=$extra_version
4807CCDEP=$CCDEP
4808CXXDEP=$CXXDEP
4809CCDEP_FLAGS=$CCDEP_FLAGS
4810ASDEP=$ASDEP
4811ASDEP_FLAGS=$ASDEP_FLAGS
4812CC_DEPFLAGS=$CC_DEPFLAGS
4813AS_DEPFLAGS=$AS_DEPFLAGS
4814HOSTCC=$host_cc
4815HOSTLD=$host_ld
4816HOSTCFLAGS=$host_cflags
4817HOSTCPPFLAGS=$host_cppflags
4818HOSTEXESUF=$HOSTEXESUF
4819HOSTLDFLAGS=$host_ldflags
4820HOSTLIBS=$host_libs
4821DEPHOSTCC=$host_cc
4822DEPHOSTCCFLAGS=$DEPHOSTCCFLAGS \$(HOSTCCFLAGS)
4823HOSTCCDEP=$HOSTCCDEP
4824HOSTCCDEP_FLAGS=$HOSTCCDEP_FLAGS
4825HOSTCC_DEPFLAGS=$HOSTCC_DEPFLAGS
4826HOSTCC_C=$HOSTCC_C
4827HOSTCC_O=$HOSTCC_O
4828HOSTLD_O=$HOSTLD_O
4829TARGET_EXEC=$target_exec $target_exec_args
4830TARGET_PATH=$target_path
4831TARGET_SAMPLES=${target_samples:-\$(SAMPLES)}
4832LIBS-ffplay=$sdl_libs
4833CFLAGS-ffplay=$sdl_cflags
4834ZLIB=$($ldflags_filter -lz)
4835LIB_INSTALL_EXTRA_CMD=$LIB_INSTALL_EXTRA_CMD
4836EXTRALIBS=$extralibs
4837COMPAT_OBJS=$compat_objs
4838EXEOBJS=$exeobjs
4839INSTALL=$install
4840LIBTARGET=${LIBTARGET}
4841SLIBNAME=${SLIBNAME}
4842SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}
4843SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}
4844SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}
4845SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}
4846SLIB_INSTALL_NAME=${SLIB_INSTALL_NAME}
4847SLIB_INSTALL_LINKS=${SLIB_INSTALL_LINKS}
4848SLIB_INSTALL_EXTRA_LIB=${SLIB_INSTALL_EXTRA_LIB}
4849SLIB_INSTALL_EXTRA_SHLIB=${SLIB_INSTALL_EXTRA_SHLIB}
4850SAMPLES:=${samples:-\$(FATE_SAMPLES)}
4851NOREDZONE_FLAGS=$noredzone_flags
4852EOF
4853
4854get_version(){
4855 lcname=lib${1}
4856 name=$(toupper $lcname)
4857 file=$source_path/$lcname/version.h
4858 eval $(awk "/#define ${name}_VERSION_M/ { print \$2 \"=\" \$3 }" "$file")
4859 eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
4860 eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
4861 eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
4862 eval echo "${lcname}_VERSION_MINOR=\$${name}_VERSION_MINOR" >> config.mak
4863}
4864
4865map 'get_version $v' $LIBRARY_LIST
4866
4867cat > $TMPH <<EOF
4868/* Automatically generated by configure - do not modify! */
4869#ifndef FFMPEG_CONFIG_H
4870#define FFMPEG_CONFIG_H
4871#define FFMPEG_CONFIGURATION "$(c_escape $FFMPEG_CONFIGURATION)"
4872#define FFMPEG_LICENSE "$(c_escape $license)"
4873#define FFMPEG_DATADIR "$(eval c_escape $datadir)"
4874#define AVCONV_DATADIR "$(eval c_escape $datadir)"
4875#define CC_IDENT "$(c_escape ${cc_ident:-Unknown compiler})"
4876#define av_restrict $_restrict
4877#define EXTERN_PREFIX "${extern_prefix}"
4878#define EXTERN_ASM ${extern_prefix}
4879#define SLIBSUF "$SLIBSUF"
4880#define HAVE_MMX2 HAVE_MMXEXT
4881EOF
4882
4883test -n "$assert_level" &&
4884 echo "#define ASSERT_LEVEL $assert_level" >>$TMPH
4885
4886test -n "$malloc_prefix" &&
4887 echo "#define MALLOC_PREFIX $malloc_prefix" >>$TMPH
4888
4889if enabled yasm; then
4890 append config_files $TMPASM
4891 printf '' >$TMPASM
4892fi
4893
4894enabled getenv || echo "#define getenv(x) NULL" >> $TMPH
4895
4896
4897mkdir -p doc
4898echo "@c auto-generated by configure" > doc/config.texi
4899
4900print_config ARCH_ "$config_files" $ARCH_LIST
4901print_config HAVE_ "$config_files" $HAVE_LIST
4902print_config CONFIG_ "$config_files" $CONFIG_LIST \
4903 $CONFIG_EXTRA \
4904 $ALL_COMPONENTS \
4905
4906echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
4907echo "endif # FFMPEG_CONFIG_MAK" >> config.mak
4908
4909# Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
4910cp_if_changed $TMPH config.h
4911touch .config
4912
4913enabled yasm && cp_if_changed $TMPASM config.asm
4914
4915cat > $TMPH <<EOF
4916/* Generated by ffconf */
4917#ifndef AVUTIL_AVCONFIG_H
4918#define AVUTIL_AVCONFIG_H
4919EOF
4920
4921print_config AV_HAVE_ $TMPH $HAVE_LIST_PUB
4922
4923echo "#endif /* AVUTIL_AVCONFIG_H */" >> $TMPH
4924
4925cp_if_changed $TMPH libavutil/avconfig.h
4926
4927if test -n "$WARNINGS"; then
4928 printf "\n$WARNINGS"
4929 enabled fatal_warnings && exit 1
4930fi
4931
4932# build pkg-config files
4933
4934pkgconfig_generate(){
4935 name=$1
4936 shortname=${name#lib}${build_suffix}
4937 comment=$2
4938 version=$3
4939 libs=$4
4940 requires=$5
4941 enabled ${name#lib} || return 0
4942 mkdir -p $name
4943 cat <<EOF > $name/$name${build_suffix}.pc
4944prefix=$prefix
4945exec_prefix=\${prefix}
4946libdir=$libdir
4947includedir=$incdir
4948
4949Name: $name
4950Description: $comment
4951Version: $version
4952Requires: $(enabled shared || echo $requires)
4953Requires.private: $(enabled shared && echo $requires)
4954Conflicts:
4955Libs: -L\${libdir} -l${shortname} $(enabled shared || echo $libs)
4956Libs.private: $(enabled shared && echo $libs)
4957Cflags: -I\${includedir}
4958EOF
4959
4960mkdir -p doc/examples/pc-uninstalled
4961includedir=${source_path}
4962[ "$includedir" = . ] && includedir="\${pcfiledir}/../../.."
4963 cat <<EOF > doc/examples/pc-uninstalled/$name.pc
4964prefix=
4965exec_prefix=
4966libdir=\${pcfiledir}/../../../$name
4967includedir=${includedir}
4968
4969Name: $name
4970Description: $comment
4971Version: $version
4972Requires: $requires
4973Conflicts:
4974Libs: -L\${libdir} -Wl,-rpath,\${libdir} -l${shortname} $(enabled shared || echo $libs)
4975Cflags: -I\${includedir}
4976EOF
4977}
4978
4979lavfi_libs="libavutil${build_suffix} = $LIBAVUTIL_VERSION"
4980enabled libavfilter_deps_avcodec && prepend lavfi_libs "libavcodec${build_suffix} = $LIBAVCODEC_VERSION,"
4981enabled libavfilter_deps_avformat && prepend lavfi_libs "libavformat${build_suffix} = $LIBAVFORMAT_VERSION,"
4982enabled libavfilter_deps_avresample && prepend lavfi_libs "libavresample${build_suffix} = $LIBAVRESAMPLE_VERSION,"
4983enabled libavfilter_deps_swscale && prepend lavfi_libs "libswscale${build_suffix} = $LIBSWSCALE_VERSION,"
4984enabled libavfilter_deps_swresample && prepend lavfi_libs "libswresample${build_suffix} = $LIBSWRESAMPLE_VERSION,"
4985enabled libavfilter_deps_postproc && prepend lavfi_libs "libpostproc${build_suffix} = $LIBPOSTPROC_VERSION,"
4986lavfi_libs=${lavfi_libs%, }
4987
4988lavd_libs="libavformat${build_suffix} = $LIBAVFORMAT_VERSION"
4989enabled lavfi_indev && prepend lavd_libs "libavfilter${build_suffix} = $LIBAVFILTER_VERSION,"
4990
4991pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION" "$LIBM"
4992pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavutil${build_suffix} = $LIBAVUTIL_VERSION"
4993pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec${build_suffix} = $LIBAVCODEC_VERSION"
4994pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "$lavd_libs"
4995pkgconfig_generate libavfilter "FFmpeg audio/video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "$lavfi_libs"
4996pkgconfig_generate libpostproc "FFmpeg postprocessing library" "$LIBPOSTPROC_VERSION" "" "libavutil${build_suffix} = $LIBAVUTIL_VERSION"
4997pkgconfig_generate libavresample "Libav audio resampling library" "$LIBAVRESAMPLE_VERSION" "$extralibs" "libavutil${build_suffix} = $LIBAVUTIL_VERSION"
4998pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "$LIBM" "libavutil${build_suffix} = $LIBAVUTIL_VERSION"
4999pkgconfig_generate libswresample "FFmpeg audio resampling library" "$LIBSWRESAMPLE_VERSION" "$LIBM" "libavutil${build_suffix} = $LIBAVUTIL_VERSION"
5000
5001fix_ffmpeg_remote(){
5002 git_remote_from=$1
5003 git_remote_to=$2
5004 fixme_remote=$(git --git-dir=$source_path/.git --work-tree=$source_path remote -v | grep $git_remote_from | cut -f 1 | sort | uniq)
5005 if [ "$fixme_remote" != "" ]; then
5006 echolog "
5007Outdated domain in git config, the official domain for ffmpeg git is since
5008November 2011, source.ffmpeg.org, both the old and the new point to the same
5009repository and server. To update it enter the following commands:
5010"
5011 for remote in $fixme_remote; do
5012 echolog "git remote set-url $remote $git_remote_to"
5013 done
5014 fi
5015}
5016
5017if test -f "$source_path/.git/config"; then
5018 remote_from=git.videolan.org
5019 remote_to=source.ffmpeg.org
5020 fix_ffmpeg_remote git@$remote_from:ffmpeg git@$remote_to:ffmpeg
5021 fix_ffmpeg_remote git://$remote_from/ffmpeg git://$remote_to/ffmpeg
5022fi
5023