FATE: add a bink version 'b' test
[libav.git] / configure
CommitLineData
aeb29222 1#!/bin/sh
0f3cb305 2#
070c5d0f 3# Libav configure script
f57620d5 4#
949906ea
DB
5# Copyright (c) 2000-2002 Fabrice Bellard
6# Copyright (c) 2005-2008 Diego Biurrun
7# Copyright (c) 2005-2008 Mans Rullgard
0f3cb305 8#
cf9d24ad 9
31e647f8 10# Prevent locale nonsense from breaking basic text processing.
79ab96ba
DB
11LC_ALL=C
12export LC_ALL
31e647f8 13
cde2d79a 14# make sure we are running under a compatible shell
c21d6325
MR
15# try to make this part work with most shells
16
17try_exec(){
0dbe81bb 18 echo "Trying shell $1"
2270b4b2 19 type "$1" > /dev/null 2>&1 && exec "$@"
c21d6325
MR
20}
21
5237ce67 22unset foo
2270b4b2 23(: ${foo%%bar}) 2> /dev/null
0dbe81bb
MR
24E1="$?"
25
2270b4b2 26(: ${foo?}) 2> /dev/null
0dbe81bb
MR
27E2="$?"
28
29if test "$E1" != 0 || test "$E2" = 0; then
30 echo "Broken shell detected. Trying alternatives."
c21d6325
MR
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" "$@"
cde2d79a
MR
43 fi
44 echo "No compatible shell script interpreter found."
fc53da20 45 echo "This configure script requires a POSIX-compatible shell"
c21d6325 46 echo "such as bash or ksh."
070c5d0f 47 echo "THIS IS NOT A BUG IN LIBAV, DO NOT REPORT IT AS SUCH."
505dfb09 48 echo "Instead, install a working POSIX-compatible shell."
070c5d0f 49 echo "Disabling this configure test will create a broken Libav."
c21d6325
MR
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
cde2d79a
MR
54 exit 1
55fi
56
a77f01c7
MR
57test -d /usr/xpg4/bin && PATH=/usr/xpg4/bin:$PATH
58
74c53c2d 59show_help(){
f69f51b3 60 cat <<EOF
06454877
MR
61Usage: configure [options]
62Options: [defaults in brackets after descriptions]
63
3b327a4b 64Help options:
06454877 65 --help print this message
3b327a4b
DB
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:
19bd477d 79 --logfile=FILE log tests and output to FILE [config.log]
06454877
MR
80 --disable-logging do not log configure debug information
81 --prefix=PREFIX install in PREFIX [$prefix]
82 --bindir=DIR install binaries in DIR [PREFIX/bin]
6291d7e4 83 --datadir=DIR install data files in DIR [PREFIX/share/avconv]
06454877
MR
84 --libdir=DIR install libs in DIR [PREFIX/lib]
85 --shlibdir=DIR install shared libs in DIR [PREFIX/lib]
86 --incdir=DIR install includes in DIR [PREFIX/include]
87 --mandir=DIR install man page in DIR [PREFIX/share/man]
88
3b327a4b 89Licensing options:
06454877
MR
90 --enable-gpl allow use of GPL code, the resulting libs
91 and binaries will be under GPL [no]
92 --enable-version3 upgrade (L)GPL to version 3 [no]
93 --enable-nonfree allow use of nonfree code, the resulting libs
94 and binaries will be unredistributable [no]
3b327a4b
DB
95
96Configuration options:
97 --disable-static do not build static libraries [no]
98 --enable-shared build shared libraries [no]
99 --enable-small optimize for size instead of speed
100 --enable-runtime-cpudetect detect cpu capabilities at runtime (bigger binary)
101 --enable-gray enable full grayscale support (slower color)
102 --disable-swscale-alpha disable alpha channel support in swscale
103
e28b7553
DB
104Program options:
105 --disable-programs do not build command line programs
6291d7e4 106 --disable-avconv disable avconv build
266463da 107 --disable-avplay disable avplay build
9e12f0bf 108 --disable-avprobe disable avprobe build
4d58e4cb 109 --disable-avserver disable avserver build
e28b7553
DB
110
111Component options:
112 --disable-doc do not build documentation
5a0f7131
MR
113 --disable-avdevice disable libavdevice build
114 --disable-avcodec disable libavcodec build
115 --disable-avformat disable libavformat build
116 --disable-swscale disable libswscale build
cccc039f 117 --disable-avfilter disable video filter support [no]
c8af852b 118 --disable-avresample disable libavresample build [no]
0dbfc1db 119 --disable-pthreads disable pthreads [auto]
7b7b220c 120 --disable-w32threads disable Win32 threads [auto]
06454877
MR
121 --enable-x11grab enable X11 grabbing [no]
122 --disable-network disable network support [no]
7f3f5f46 123 --disable-dct disable DCT code
193cdd9a
DB
124 --disable-dwt disable DWT code
125 --disable-lsp disable LSP code
2a91ada8 126 --disable-lzo disable LZO decoder code
06454877
MR
127 --disable-mdct disable MDCT code
128 --disable-rdft disable RDFT code
3b327a4b
DB
129 --disable-fft disable FFT code
130 --enable-dxva2 enable DXVA2 code
dcb73592 131 --enable-vaapi enable VAAPI code
ac3dbb4d 132 --enable-vda enable VDA code
e8f6bd4b 133 --enable-vdpau enable VDPAU code
3b327a4b
DB
134
135Individual component options:
bb55e3a3 136 --disable-everything disable all components listed below
06454877
MR
137 --disable-encoder=NAME disable encoder NAME
138 --enable-encoder=NAME enable encoder NAME
139 --disable-encoders disable all encoders
140 --disable-decoder=NAME disable decoder NAME
141 --enable-decoder=NAME enable decoder NAME
142 --disable-decoders disable all decoders
143 --disable-hwaccel=NAME disable hwaccel NAME
144 --enable-hwaccel=NAME enable hwaccel NAME
145 --disable-hwaccels disable all hwaccels
146 --disable-muxer=NAME disable muxer NAME
147 --enable-muxer=NAME enable muxer NAME
148 --disable-muxers disable all muxers
149 --disable-demuxer=NAME disable demuxer NAME
150 --enable-demuxer=NAME enable demuxer NAME
151 --disable-demuxers disable all demuxers
152 --enable-parser=NAME enable parser NAME
153 --disable-parser=NAME disable parser NAME
154 --disable-parsers disable all parsers
155 --enable-bsf=NAME enable bitstream filter NAME
156 --disable-bsf=NAME disable bitstream filter NAME
157 --disable-bsfs disable all bitstream filters
158 --enable-protocol=NAME enable protocol NAME
159 --disable-protocol=NAME disable protocol NAME
160 --disable-protocols disable all protocols
3b327a4b 161 --enable-indev=NAME enable input device NAME
06454877 162 --disable-indev=NAME disable input device NAME
06454877 163 --disable-indevs disable input devices
3b327a4b
DB
164 --enable-outdev=NAME enable output device NAME
165 --disable-outdev=NAME disable output device NAME
06454877
MR
166 --disable-outdevs disable output devices
167 --disable-devices disable all devices
168 --enable-filter=NAME enable filter NAME
169 --disable-filter=NAME disable filter NAME
170 --disable-filters disable all filters
06454877
MR
171
172External library support:
173 --enable-avisynth enable reading of AVISynth script files [no]
174 --enable-bzlib enable bzlib [autodetect]
47941088 175 --enable-frei0r enable frei0r video filtering
bc8c1395 176 --enable-gnutls enable gnutls [no]
e417d80d 177 --enable-libcdio enable audio CD grabbing with libcdio
06454877
MR
178 --enable-libdc1394 enable IIDC-1394 grabbing using libdc1394
179 and libraw1394 [no]
c547e5ff
DB
180 --enable-libfaac enable AAC encoding via libfaac [no]
181 --enable-libfdk-aac enable AAC encoding via libfdk-aac [no]
a5b64584 182 --enable-libfreetype enable libfreetype [no]
c547e5ff 183 --enable-libgsm enable GSM de/encoding via libgsm [no]
3641b048 184 --enable-libilbc enable iLBC de/encoding via libilbc [no]
06454877 185 --enable-libmp3lame enable MP3 encoding via libmp3lame [no]
becc3c62
MS
186 --enable-libopencore-amrnb enable AMR-NB de/encoding via libopencore-amrnb [no]
187 --enable-libopencore-amrwb enable AMR-WB decoding via libopencore-amrwb [no]
188 --enable-libopencv enable video filtering via libopencv [no]
453c02f9 189 --enable-libopenjpeg enable JPEG 2000 de/encoding via OpenJPEG [no]
44617d6e 190 --enable-libopus enable Opus decoding via libopus [no]
7c922411 191 --enable-libpulse enable Pulseaudio input via libpulse [no]
0f943ce6 192 --enable-librtmp enable RTMP[E] support via librtmp [no]
c547e5ff
DB
193 --enable-libschroedinger enable Dirac de/encoding via libschroedinger [no]
194 --enable-libspeex enable Speex de/encoding via libspeex [no]
06454877 195 --enable-libtheora enable Theora encoding via libtheora [no]
d89e738a 196 --enable-libvo-aacenc enable AAC encoding via libvo-aacenc [no]
f502ff3f 197 --enable-libvo-amrwbenc enable AMR-WB encoding via libvo-amrwbenc [no]
c547e5ff
DB
198 --enable-libvorbis enable Vorbis encoding via libvorbis [no]
199 --enable-libvpx enable VP8 de/encoding via libvpx [no]
06454877 200 --enable-libx264 enable H.264 encoding via x264 [no]
de295976 201 --enable-libxavs enable AVS encoding via xavs [no]
06454877
MR
202 --enable-libxvid enable Xvid encoding via xvidcore,
203 native MPEG-4/Xvid encoder exists [no]
a060866f 204 --enable-openssl enable openssl [no]
06454877
MR
205 --enable-zlib enable zlib [autodetect]
206
207Advanced options (experts only):
06454877
MR
208 --cross-prefix=PREFIX use PREFIX for compilation tools [$cross_prefix]
209 --enable-cross-compile assume a cross-compiler is used
210 --sysroot=PATH root of cross-build tree
211 --sysinclude=PATH location of cross-build system headers
212 --target-os=OS compiler targets OS [$target_os]
213 --target-exec=CMD command to run executables on target
214 --target-path=DIR path to view of build directory on target
aeeb782c 215 --toolchain=NAME set tool defaults according to NAME
06454877 216 --nm=NM use nm tool
121d78d0 217 --ar=AR use archive tool AR [$ar_default]
06454877
MR
218 --as=AS use assembler AS [$as_default]
219 --cc=CC use C compiler CC [$cc_default]
193cdd9a 220 --dep-cc=DEPCC use dependency generator DEPCC [$cc_default]
06454877
MR
221 --ld=LD use linker LD
222 --host-cc=HOSTCC use host C compiler HOSTCC
223 --host-cflags=HCFLAGS use HCFLAGS when compiling for host
095792f2 224 --host-ld=HOSTLD use host linker HOSTLD
06454877
MR
225 --host-ldflags=HLDFLAGS use HLDFLAGS when linking for host
226 --host-libs=HLIBS use libs HLIBS when linking for host
193cdd9a 227 --host-os=OS compiler host OS [$target_os]
06454877
MR
228 --extra-cflags=ECFLAGS add ECFLAGS to CFLAGS [$CFLAGS]
229 --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]
230 --extra-libs=ELIBS add ELIBS [$ELIBS]
231 --extra-version=STRING version string suffix []
193cdd9a 232 --optflags=OPTFLAGS override optimization-related compiler flags
06454877 233 --build-suffix=SUFFIX library name suffix []
3b327a4b 234 --malloc-prefix=PREFIX prefix malloc and related names with PREFIX
06454877
MR
235 --arch=ARCH select architecture [$arch]
236 --cpu=CPU select the minimum required CPU (affects
237 instruction selection, may crash on older CPUs)
3b327a4b
DB
238 --enable-pic build position-independent code
239 --enable-sram allow use of on-chip SRAM
193cdd9a 240 --enable-thumb compile for Thumb instruction set
3b327a4b 241 --disable-symver disable symbol versioning
3b327a4b
DB
242 --enable-hardcoded-tables use hardcoded tables instead of runtime generation
243 --disable-safe-bitstream-reader
244 disable buffer boundary checking in bitreaders
245 (faster, but may crash)
246 --enable-memalign-hack emulate memalign, interferes with memory debuggers
65d12900 247 --enable-lto use link-time optimization
3b327a4b
DB
248
249Optimization options (experts only):
c8a4ae00 250 --disable-asm disable all assembler optimizations
06454877
MR
251 --disable-altivec disable AltiVec optimizations
252 --disable-amd3dnow disable 3DNow! optimizations
253 --disable-amd3dnowext disable 3DNow! extended optimizations
254 --disable-mmx disable MMX optimizations
239fdf1b 255 --disable-mmxext disable MMXEXT optimizations
06454877 256 --disable-sse disable SSE optimizations
50cd43f2
DB
257 --disable-sse2 disable SSE2 optimizations
258 --disable-sse3 disable SSE3 optimizations
06454877 259 --disable-ssse3 disable SSSE3 optimizations
50cd43f2
DB
260 --disable-sse4 disable SSE4 optimizations
261 --disable-sse42 disable SSE4.2 optimizations
87f1355f 262 --disable-avx disable AVX optimizations
79687079 263 --disable-fma4 disable FMA4 optimizations
06454877
MR
264 --disable-armv5te disable armv5te optimizations
265 --disable-armv6 disable armv6 optimizations
266 --disable-armv6t2 disable armv6t2 optimizations
267 --disable-armvfp disable ARM VFP optimizations
5ea20630 268 --disable-neon disable NEON optimizations
06454877 269 --disable-vis disable VIS optimizations
afb5ed55 270 --disable-inline-asm disable use of inline assembler
06454877 271 --disable-yasm disable use of yasm assembler
06454877 272
070c5d0f 273Developer options (useful when working on Libav itself):
06454877
MR
274 --disable-debug disable debugging symbols
275 --enable-debug=LEVEL set the debug level [$debuglevel]
06454877
MR
276 --disable-optimizations disable compiler optimizations
277 --enable-extra-warnings enable more compiler warnings
52b3cc60 278 --samples=PATH location of test samples for FATE, if not set use
9309bdfe 279 \$LIBAV_SAMPLES at make invocation time.
7e4d9d5d
RB
280 --enable-xmm-clobber-test check XMM registers for clobbering (Win64-only;
281 should be used only for debugging purposes)
154caa67
MR
282 --enable-random randomly enable/disable components
283 --disable-random
284 --enable-random=LIST randomly enable/disable specific components or
285 --disable-random=LIST component groups. LIST is a comma-separated list
286 of NAME[:PROB] entries where NAME is a component
287 (group) and PROB the probability associated with
288 NAME (default 0.5).
289 --random-seed=VALUE seed value for --enable/disable-random
06454877
MR
290
291NOTE: Object files are built at the place where configure is launched.
292EOF
60e8bc13 293 exit 0
74c53c2d 294}
cf9d24ad 295
0884fadf
MR
296quotes='""'
297
57bd82d4 298log(){
2270b4b2 299 echo "$@" >> $logfile
57bd82d4
MR
300}
301
720c69da 302log_file(){
c8e9f801 303 log BEGIN $1
2270b4b2 304 pr -n -t $1 >> $logfile
c8e9f801
MR
305 log END $1
306}
307
2ba042a7 308echolog(){
c8e9f801 309 log "$@"
57bd82d4 310 echo "$@"
2ba042a7
MR
311}
312
7bfc8ae6
MR
313warn(){
314 log "WARNING: $*"
315 WARNINGS="${WARNINGS}WARNING: $*\n"
316}
317
2ba042a7
MR
318die(){
319 echolog "$@"
320 cat <<EOF
d326cf7f 321
2ba042a7 322If you think configure made a mistake, make sure you are using the latest
4a6a21f5 323version from Git. If the latest version fails, report the problem to the
070c5d0f 324libav-user@libav.org mailing list or IRC #libav on irc.freenode.net.
2ba042a7 325EOF
e155a21a 326 if disabled logging; then
2ba042a7 327 cat <<EOF
e155a21a
DB
328Rerun configure with logging enabled (do not use --disable-logging), and
329include the log this produces with your report.
2ba042a7
MR
330EOF
331 else
f69f51b3 332 cat <<EOF
e155a21a
DB
333Include the log file "$logfile" produced by configure as this will help
334solving the problem.
2ba042a7
MR
335EOF
336 fi
57bd82d4
MR
337 exit 1
338}
339
6c6007d6 340# Avoid locale weirdness, besides we really just want to translate ASCII.
44161118 341toupper(){
6c6007d6 342 echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
44161118
MR
343}
344
4a5444db 345tolower(){
6c6007d6 346 echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
4a5444db
MR
347}
348
14a8acf1
MR
349c_escape(){
350 echo "$*" | sed 's/["\\]/\\\0/g'
351}
352
b04251c5
MR
353sh_quote(){
354 v=$(echo "$1" | sed "s/'/'\\\\''/g")
d72c981c 355 test "x$v" = "x${v#*[!A-Za-z0-9_/.+-]}" || v="'$v'"
b04251c5
MR
356 echo "$v"
357}
358
bb7a22b5
MR
359cleanws(){
360 echo "$@" | sed 's/^ *//;s/ */ /g;s/ *$//'
361}
362
be8f2501
MR
363filter(){
364 pat=$1
365 shift
366 for v; do
98ef6079 367 eval "case $v in $pat) echo $v ;; esac"
be8f2501
MR
368 done
369}
370
9d201b26
MR
371filter_out(){
372 pat=$1
373 shift
374 for v; do
375 eval "case $v in $pat) ;; *) echo $v ;; esac"
376 done
377}
378
36e2dea0
MR
379map(){
380 m=$1
381 shift
e0e335a0 382 for v; do eval $m; done
36e2dea0
MR
383}
384
43b73d59
DB
385add_suffix(){
386 suffix=$1
387 shift
388 for v; do echo ${v}${suffix}; done
389}
390
a8d04fba
MR
391set_all(){
392 value=$1
393 shift
394 for var in $*; do
395 eval $var=$value
396 done
397}
398
72a43668
MR
399set_weak(){
400 value=$1
401 shift
402 for var; do
403 eval : \${$var:=$value}
404 done
405}
406
3f8040db
MR
407set_safe(){
408 var=$1
409 shift
410 eval $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')='$*'
411}
412
413get_safe(){
414 eval echo \$$(echo "$1" | sed 's/[^A-Za-z0-9_]/_/g')
415}
416
799c9e9b
MR
417pushvar(){
418 for var in $*; do
419 eval level=\${${var}_level:=0}
420 eval ${var}_${level}="\$$var"
421 eval ${var}_level=$(($level+1))
422 done
423}
424
425popvar(){
426 for var in $*; do
427 eval level=\${${var}_level:-0}
428 test $level = 0 && continue
429 eval level=$(($level-1))
430 eval $var="\${${var}_${level}}"
431 eval ${var}_level=$level
432 eval unset ${var}_${level}
433 done
434}
435
a8d04fba
MR
436enable(){
437 set_all yes $*
438}
439
440disable(){
441 set_all no $*
442}
443
72a43668
MR
444enable_weak(){
445 set_weak yes $*
446}
447
448disable_weak(){
449 set_weak no $*
450}
451
72702705 452enable_safe(){
fd07f803
MR
453 for var; do
454 enable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
455 done
72702705
MR
456}
457
458disable_safe(){
fd07f803
MR
459 for var; do
460 disable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
461 done
72702705
MR
462}
463
f9d328da
MR
464do_enable_deep(){
465 for var; do
466 enabled $var && continue
467 eval sel="\$${var}_select"
c510c7b5
MR
468 eval sgs="\$${var}_suggest"
469 pushvar var sgs
f9d328da 470 enable_deep $sel
c510c7b5
MR
471 popvar sgs
472 enable_deep_weak $sgs
f9d328da
MR
473 popvar var
474 done
475}
476
477enable_deep(){
478 do_enable_deep $*
479 enable $*
480}
481
72a43668
MR
482enable_deep_weak(){
483 do_enable_deep $*
484 enable_weak $*
485}
486
57bd82d4 487enabled(){
3250003c
MR
488 test "${1#!}" = "$1" && op== || op=!=
489 eval test "x\$${1#!}" $op "xyes"
44161118
MR
490}
491
37970ebf 492disabled(){
3250003c
MR
493 test "${1#!}" = "$1" && op== || op=!=
494 eval test "x\$${1#!}" $op "xno"
37970ebf
RP
495}
496
44161118
MR
497enabled_all(){
498 for opt; do
499 enabled $opt || return 1
500 done
501}
502
85bca2c5
DB
503disabled_all(){
504 for opt; do
505 disabled $opt || return 1
506 done
507}
508
44161118
MR
509enabled_any(){
510 for opt; do
511 enabled $opt && return 0
512 done
513}
514
85bca2c5
DB
515disabled_any(){
516 for opt; do
517 disabled $opt && return 0
518 done
f7b230a7 519 return 1
85bca2c5
DB
520}
521
c9d19248
MR
522set_default(){
523 for opt; do
88268e94 524 eval : \${$opt:=\$${opt}_default}
c9d19248
MR
525 done
526}
527
4a0d6686
AJ
528is_in(){
529 value=$1
530 shift
531 for var in $*; do
532 [ $var = $value ] && return 0
533 done
534 return 1
535}
536
30fd06be
MR
537check_deps(){
538 for cfg; do
3250003c 539 cfg="${cfg#!}"
799c9e9b
MR
540 enabled ${cfg}_checking && die "Circular dependency for $cfg."
541 disabled ${cfg}_checking && continue
542 enable ${cfg}_checking
543
30fd06be
MR
544 eval dep_all="\$${cfg}_deps"
545 eval dep_any="\$${cfg}_deps_any"
7ef3425f 546 eval dep_sel="\$${cfg}_select"
c510c7b5 547 eval dep_sgs="\$${cfg}_suggest"
3d7453e0
MR
548 eval dep_ifa="\$${cfg}_if"
549 eval dep_ifn="\$${cfg}_if_any"
799c9e9b 550
3d7453e0
MR
551 pushvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
552 check_deps $dep_all $dep_any $dep_sel $dep_sgs $dep_ifa $dep_ifn
553 popvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
799c9e9b 554
3d7453e0
MR
555 [ -n "$dep_ifa" ] && { enabled_all $dep_ifa && enable_weak $cfg; }
556 [ -n "$dep_ifn" ] && { enabled_any $dep_ifn && enable_weak $cfg; }
6a702d4c
MR
557 enabled_all $dep_all || disable $cfg
558 enabled_any $dep_any || disable $cfg
7ef3425f 559 disabled_any $dep_sel && disable $cfg
799c9e9b 560
4ec45764
RP
561 if enabled $cfg; then
562 eval dep_extralibs="\$${cfg}_extralibs"
563 test -n "$dep_extralibs" && add_extralibs $dep_extralibs
f9d328da 564 enable_deep $dep_sel
c510c7b5 565 enable_deep_weak $dep_sgs
4ec45764
RP
566 fi
567
799c9e9b 568 disable ${cfg}_checking
30fd06be
MR
569 done
570}
571
44161118
MR
572print_config(){
573 pfx=$1
72cfcf41
MR
574 files=$2
575 shift 2
f454e879
MR
576 map 'eval echo "$v \${$v:-no}"' "$@" |
577 awk "BEGIN { split(\"$files\", files) }
578 {
579 c = \"$pfx\" toupper(\$1);
580 v = \$2;
581 sub(/yes/, 1, v);
582 sub(/no/, 0, v);
583 for (f in files) {
584 file = files[f];
585 if (file ~ /\\.h\$/) {
586 printf(\"#define %s %d\\n\", c, v) >>file;
587 } else if (file ~ /\\.asm\$/) {
588 printf(\"%%define %s %d\\n\", c, v) >>file;
589 } else if (file ~ /\\.mak\$/) {
d16c4aeb 590 n = -v ? \"\" : \"!\";
f454e879
MR
591 printf(\"%s%s=yes\\n\", n, c) >>file;
592 }
593 }
594 }"
57bd82d4
MR
595}
596
31c0121d 597print_enabled(){
31c0121d
MR
598 suf=$1
599 shift
600 for v; do
9eda2a85 601 enabled $v && printf "%s\n" ${v%$suf};
31c0121d
MR
602 done
603}
604
57bd82d4
MR
605append(){
606 var=$1
607 shift
57bd82d4
MR
608 eval "$var=\"\$$var $*\""
609}
610
60361817
MR
611prepend(){
612 var=$1
613 shift
614 eval "$var=\"$* \$$var\""
615}
616
50a334e4 617add_cppflags(){
cd52ec95 618 append CPPFLAGS "$@"
50a334e4
MR
619}
620
57bd82d4 621add_cflags(){
01d31e16 622 append CFLAGS $($cflags_filter "$@")
57bd82d4
MR
623}
624
2f2e6c7c 625add_asflags(){
01d31e16 626 append ASFLAGS $($asflags_filter "$@")
2f2e6c7c
MR
627}
628
57bd82d4 629add_ldflags(){
64933b6c 630 append LDFLAGS $($ldflags_filter "$@")
57bd82d4
MR
631}
632
633add_extralibs(){
64933b6c 634 prepend extralibs $($ldflags_filter "$@")
57bd82d4
MR
635}
636
6c3fa06a
MR
637add_host_cflags(){
638 append host_cflags $($host_cflags_filter "$@")
639}
640
641add_host_ldflags(){
642 append host_ldflags $($host_ldflags_filter "$@")
643}
644
84e65c76
MR
645add_compat(){
646 append compat_objs $1
647 shift
648 map 'add_cppflags -D$v' "$@"
649}
650
b0cfb663 651check_cmd(){
b3cb5d51 652 log "$@"
2270b4b2 653 "$@" >> $logfile 2>&1
b0cfb663
MR
654}
655
b2704a65
MR
656cc_o(){
657 eval printf '%s\\n' $CC_O
658}
659
18031c49
MR
660cc_e(){
661 eval printf '%s\\n' $CC_E
662}
663
dcd479c0 664check_cc(){
57bd82d4 665 log check_cc "$@"
2270b4b2 666 cat > $TMPC
720c69da 667 log_file $TMPC
23565c26 668 check_cmd $cc $CPPFLAGS $CFLAGS "$@" $CC_C $(cc_o $TMPO) $TMPC
57bd82d4
MR
669}
670
671check_cpp(){
672 log check_cpp "$@"
2270b4b2 673 cat > $TMPC
720c69da 674 log_file $TMPC
18031c49 675 check_cmd $cc $CPPFLAGS $CFLAGS "$@" $(cc_e $TMPO) $TMPC
dcd479c0
MR
676}
677
df0d6341
MR
678as_o(){
679 eval printf '%s\\n' $AS_O
680}
681
f65883c8
MR
682check_as(){
683 log check_as "$@"
684 cat > $TMPC
685 log_file $TMPC
df0d6341 686 check_cmd $as $CPPFLAGS $ASFLAGS "$@" $AS_C $(as_o $TMPO) $TMPC
f65883c8
MR
687}
688
575db883
DB
689check_inline_asm(){
690 log check_inline_asm "$@"
940f335a 691 name="$1"
3784e82e 692 code="$2"
940f335a 693 shift 2
49214f61
MR
694 disable $name
695 check_as "$@" <<EOF && enable $name
3784e82e 696void foo(void){ __asm__ volatile($code); }
940f335a
MR
697EOF
698}
699
304d586d
LM
700check_yasm(){
701 log check_yasm "$@"
702 echo "$1" > $TMPS
703 log_file $TMPS
704 shift 1
705 check_cmd $yasmexe $YASMFLAGS "$@" -o $TMPO $TMPS
706}
707
29b64b68
MR
708ld_o(){
709 eval printf '%s\\n' $LD_O
710}
711
dcd479c0 712check_ld(){
57bd82d4 713 log check_ld "$@"
66a1ccd7
MR
714 flags=$(filter_out '-l*' "$@")
715 libs=$(filter '-l*' "$@")
01d31e16 716 check_cc $($cflags_filter $flags) || return
64933b6c
MR
717 flags=$($ldflags_filter $flags)
718 libs=$($ldflags_filter $libs)
29b64b68 719 check_cmd $ld $LDFLAGS $flags $(ld_o $TMPE) $TMPO $libs $extralibs
dcd479c0
MR
720}
721
5adc829e
MR
722check_code(){
723 log check_code "$@"
724 check=$1
725 headers=$2
726 code=$3
727 shift 3
728 {
729 for hdr in $headers; do
730 echo "#include <$hdr>"
731 done
732 echo "int main(void) { $code; return 0; }"
733 } | check_$check "$@"
734}
735
50a334e4
MR
736check_cppflags(){
737 log check_cppflags "$@"
caf458dd 738 check_cc "$@" <<EOF && append CPPFLAGS "$@"
50a334e4
MR
739int x;
740EOF
741}
742
dcd479c0 743check_cflags(){
57bd82d4 744 log check_cflags "$@"
01d31e16 745 set -- $($cflags_filter "$@")
caf458dd 746 check_cc "$@" <<EOF && append CFLAGS "$@"
dcd479c0
MR
747int x;
748EOF
749}
750
2ed46eea
MR
751test_ldflags(){
752 log test_ldflags "$@"
753 check_ld "$@" <<EOF
c23a0ac8 754int main(void){ return 0; }
dcd479c0
MR
755EOF
756}
757
2ed46eea
MR
758check_ldflags(){
759 log check_ldflags "$@"
760 test_ldflags "$@" && add_ldflags "$@"
761}
762
dcd479c0 763check_header(){
57bd82d4 764 log check_header "$@"
dcd479c0
MR
765 header=$1
766 shift
b77df637
MR
767 disable_safe $header
768 check_cpp "$@" <<EOF && enable_safe $header
dcd479c0
MR
769#include <$header>
770int x;
771EOF
772}
773
774check_func(){
57bd82d4 775 log check_func "$@"
dcd479c0
MR
776 func=$1
777 shift
d8bc5f06
MR
778 disable $func
779 check_ld "$@" <<EOF && enable $func
dcd479c0 780extern int $func();
c23a0ac8 781int main(void){ $func(); }
dcd479c0
MR
782EOF
783}
784
645d2652 785check_mathfunc(){
6b73c0ae 786 log check_mathfunc "$@"
645d2652 787 func=$1
1aa07aa2
MR
788 narg=$2
789 shift 2
790 test $narg = 2 && args="f, g" || args="f"
645d2652
MR
791 disable $func
792 check_ld "$@" <<EOF && enable $func
793#include <math.h>
1aa07aa2 794float foo(float f, float g) { return $func($args); }
33bd38db 795int main(void){ return 0; }
645d2652
MR
796EOF
797}
798
2446d3d6
DB
799check_func_headers(){
800 log check_func_headers "$@"
f8d7b072 801 headers=$1
edaf1ae2 802 funcs=$2
f8d7b072 803 shift 2
edaf1ae2
MR
804 {
805 for hdr in $headers; do
806 echo "#include <$hdr>"
807 done
808 for func in $funcs; do
809 echo "long check_$func(void) { return (long) $func; }"
810 done
811 echo "int main(void) { return 0; }"
812 } | check_ld "$@" && enable $funcs && enable_safe $headers
f8d7b072
MR
813}
814
a5344cf7
SS
815check_cpp_condition(){
816 log check_cpp_condition "$@"
817 header=$1
818 condition=$2
f855b7b9 819 shift 2
cd52ec95 820 check_cpp "$@" <<EOF
a5344cf7
SS
821#include <$header>
822#if !($condition)
823#error "unsatisfied condition: $condition"
824#endif
825EOF
826}
827
57bd82d4
MR
828check_lib(){
829 log check_lib "$@"
830 header="$1"
831 func="$2"
832 shift 2
84400e9d 833 check_header $header && check_func $func "$@" && add_extralibs "$@"
57bd82d4
MR
834}
835
f8d7b072
MR
836check_lib2(){
837 log check_lib2 "$@"
838 headers="$1"
edaf1ae2 839 funcs="$2"
f8d7b072 840 shift 2
edaf1ae2 841 check_func_headers "$headers" "$funcs" "$@" && add_extralibs "$@"
f8d7b072
MR
842}
843
3f8040db
MR
844check_pkg_config(){
845 log check_pkg_config "$@"
846 pkg="$1"
847 headers="$2"
848 funcs="$3"
849 shift 3
850 $pkg_config --exists $pkg || return
851 pkg_cflags=$($pkg_config --cflags $pkg)
852 pkg_libs=$($pkg_config --libs $pkg)
853 check_func_headers "$headers" "$funcs" $pkg_cflags $pkg_libs "$@" &&
854 set_safe ${pkg}_cflags $pkg_cflags &&
855 set_safe ${pkg}_libs $pkg_libs
856}
857
dcd479c0 858check_exec(){
2270b4b2 859 check_ld "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
57bd82d4
MR
860}
861
7dfef245 862check_exec_crash(){
5e622c40 863 code=$(cat)
7dfef245
MR
864
865 # exit() is not async signal safe. _Exit (C99) and _exit (POSIX)
866 # are safe but may not be available everywhere. Thus we use
867 # raise(SIGTERM) instead. The check is run in a subshell so we
868 # can redirect the "Terminated" message from the shell. SIGBUS
869 # is not defined by standard C so it is used conditionally.
870
2270b4b2 871 (check_exec "$@") >> $logfile 2>&1 <<EOF
7dfef245
MR
872#include <signal.h>
873static void sighandler(int sig){
874 raise(SIGTERM);
875}
692dd8ed
MR
876int foo(void){
877 $code
878}
e5af4a11 879int main(void){
7dfef245
MR
880 signal(SIGILL, sighandler);
881 signal(SIGFPE, sighandler);
882 signal(SIGSEGV, sighandler);
883#ifdef SIGBUS
884 signal(SIGBUS, sighandler);
885#endif
692dd8ed 886 foo();
7dfef245
MR
887}
888EOF
889}
890
72be9e73
DY
891check_type(){
892 log check_type "$@"
893 headers=$1
894 type=$2
895 shift 2
ae550ce9 896 disable_safe "$type"
5adc829e 897 check_code cc "$headers" "$type v" "$@" && enable_safe "$type"
72be9e73
DY
898}
899
14d36751
MR
900check_struct(){
901 log check_type "$@"
902 headers=$1
903 struct=$2
904 member=$3
905 shift 3
906 disable_safe "${struct}_${member}"
5adc829e
MR
907 check_code cc "$headers" "const void *p = &(($struct *)0)->$member" "$@" &&
908 enable_safe "${struct}_${member}"
14d36751
MR
909}
910
57bd82d4
MR
911require(){
912 name="$1"
913 header="$2"
914 func="$3"
915 shift 3
916 check_lib $header $func "$@" || die "ERROR: $name not found"
dcd479c0
MR
917}
918
f8d7b072
MR
919require2(){
920 name="$1"
921 headers="$2"
922 func="$3"
923 shift 3
924 check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
925}
926
3f8040db
MR
927require_pkg_config(){
928 pkg="$1"
929 check_pkg_config "$@" || die "ERROR: $pkg not found"
930 add_cflags $(get_safe ${pkg}_cflags)
931 add_extralibs $(get_safe ${pkg}_libs)
932}
933
ae43c4c0
MR
934hostcc_o(){
935 eval printf '%s\\n' $HOSTCC_O
936}
937
f0125de9
MR
938check_host_cc(){
939 log check_host_cc "$@"
940 cat > $TMPC
941 log_file $TMPC
ae43c4c0 942 check_cmd $host_cc $host_cflags "$@" $HOSTCC_C $(hostcc_o $TMPO) $TMPC
f0125de9
MR
943}
944
945check_host_cflags(){
946 log check_host_cflags "$@"
6c3fa06a 947 set -- $($host_cflags_filter "$@")
f0125de9
MR
948 check_host_cc "$@" <<EOF && append host_cflags "$@"
949int x;
950EOF
951}
952
c505dd31
MR
953apply(){
954 file=$1
955 shift
956 "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
957}
958
c34681df 959cp_if_changed(){
5e27ec28
MR
960 cmp -s "$1" "$2" && echo "$2 is unchanged" && return
961 mkdir -p "$(dirname $2)"
4ebc6a74 962 $cp_f "$1" "$2"
c34681df
MR
963}
964
dcd61286
DB
965# CONFIG_LIST contains configurable options, while HAVE_LIST is for
966# system-dependent things.
967
4a0d6686
AJ
968COMPONENT_LIST="
969 bsfs
970 decoders
971 demuxers
972 encoders
3cde40aa 973 filters
5666fd73 974 hwaccels
c552605c 975 indevs
4a0d6686 976 muxers
c552605c 977 outdevs
4a0d6686
AJ
978 parsers
979 protocols
980"
981
055c61b8
DB
982PROGRAM_LIST="
983 avconv
984 avplay
985 avprobe
986 avserver
055c61b8
DB
987"
988
4a0d6686
AJ
989CONFIG_LIST="
990 $COMPONENT_LIST
055c61b8 991 $PROGRAM_LIST
5a0f7131
MR
992 avcodec
993 avdevice
f7679c54 994 avfilter
5a0f7131 995 avformat
c8af852b 996 avresample
c88f5d72 997 avisynth
f402916e 998 bzlib
7f3f5f46 999 dct
c73f65d9 1000 doc
05aec7bb 1001 dwt
92c6a099 1002 dxva2
1848f7d9 1003 fft
47941088 1004 frei0r
bc8c1395 1005 gnutls
c88f5d72 1006 gpl
d8d0d0b2 1007 gray
3abe5fbd 1008 hardcoded_tables
e417d80d 1009 libcdio
f7b8bffe 1010 libdc1394
2eed5a46 1011 libfaac
37eeb5e2 1012 libfdk_aac
a5b64584 1013 libfreetype
c88f5d72 1014 libgsm
3641b048 1015 libilbc
6ebe07fb 1016 libmp3lame
0b175caa
DB
1017 libopencore_amrnb
1018 libopencore_amrwb
6ebf0bfc 1019 libopencv
9a77d59a 1020 libopenjpeg
44617d6e 1021 libopus
0de9c41f 1022 libpulse
0f943ce6 1023 librtmp
f7cd9eed 1024 libschroedinger
ae14f311 1025 libspeex
150d2772 1026 libtheora
d89e738a 1027 libvo_aacenc
f502ff3f 1028 libvo_amrwbenc
c88f5d72 1029 libvorbis
8299a7f8 1030 libvpx
1cc60c47 1031 libx264
de295976 1032 libxavs
1cc60c47 1033 libxvid
b781cc12 1034 lsp
2a91ada8 1035 lzo
47a158cb 1036 mdct
c88f5d72 1037 memalign_hack
c88f5d72 1038 network
3fe142e2 1039 nonfree
a060866f 1040 openssl
8a3c8627 1041 pic
68602540 1042 rdft
e90f5b5a 1043 runtime_cpudetect
8cfbbd92 1044 safe_bitstream_reader
2e35e684 1045 shared
bd2216e4 1046 small
6b35d421 1047 sram
2e35e684 1048 static
5a0f7131 1049 swscale
a9ddb5b1 1050 swscale_alpha
8986fddc 1051 thumb
17492d5e 1052 vaapi
ac3dbb4d 1053 vda
17492d5e 1054 vdpau
9cad0e4e 1055 version3
7e4d9d5d 1056 xmm_clobber_test
56a059ac 1057 x11grab
c88f5d72 1058 zlib
4a0d6686 1059"
c88f5d72 1060
8eee7025 1061THREADS_LIST='
8eee7025
DB
1062 pthreads
1063 w32threads
1064'
1065
3f5b56e5
MR
1066ARCH_LIST='
1067 alpha
a2fc0f6a 1068 arm
fdcd782d
MR
1069 avr32
1070 avr32_ap
1071 avr32_uc
3f5b56e5
MR
1072 bfin
1073 ia64
1074 m68k
1075 mips
bae3abb0 1076 mips64
3f5b56e5 1077 parisc
79cb09b2 1078 ppc
34d11b87 1079 ppc64
3f5b56e5
MR
1080 s390
1081 sh4
1082 sparc
1083 sparc64
c75848cd
DB
1084 tilegx
1085 tilepro
0844bae1 1086 tomi
3f5b56e5
MR
1087 x86
1088 x86_32
1089 x86_64
1090'
1091
50cd43f2 1092ARCH_EXT_LIST_X86='
3bf96eec 1093 amd3dnow
a1ef9f08 1094 amd3dnowext
50cd43f2
DB
1095 avx
1096 fma4
1097 mmx
1098 mmxext
1099 sse
1100 sse2
1101 sse3
1102 sse4
1103 sse42
1104 ssse3
1105'
1106
1107ARCH_EXT_LIST="
1108 $ARCH_EXT_LIST_X86
1109 altivec
1ac9331a 1110 armv5te
edab3048 1111 armv6
ab5cb084 1112 armv6t2
f55b299a 1113 armvfp
6b18d278 1114 neon
799fde37 1115 ppc4xx
93eb8e4d 1116 vfpv3
bd9d34a0 1117 vis
50cd43f2 1118"
3f5b56e5 1119
fd712a55
DB
1120HAVE_LIST_CMDLINE='
1121 inline_asm
1122 symver
1123 yasm
1124'
1125
a3e02a8c
MR
1126HAVE_LIST_PUB='
1127 bigendian
d268eee9 1128 fast_unaligned
a3e02a8c
MR
1129'
1130
79042ab3 1131MATH_FUNCS="
fab0a8b2
MR
1132 atanf
1133 atan2f
79042ab3 1134 cbrtf
fab0a8b2 1135 cosf
79042ab3
DB
1136 exp2
1137 exp2f
fab0a8b2 1138 expf
79042ab3
DB
1139 isinf
1140 isnan
fab0a8b2 1141 ldexpf
79042ab3
DB
1142 llrint
1143 llrintf
1144 log2
1145 log2f
fab0a8b2 1146 log10f
79042ab3
DB
1147 lrint
1148 lrintf
fab0a8b2 1149 powf
79042ab3
DB
1150 rint
1151 round
1152 roundf
fab0a8b2 1153 sinf
79042ab3
DB
1154 trunc
1155 truncf
1156"
1157
3f5b56e5
MR
1158HAVE_LIST="
1159 $ARCH_EXT_LIST
43b73d59
DB
1160 $(add_suffix _external $ARCH_EXT_LIST)
1161 $(add_suffix _inline $ARCH_EXT_LIST)
fd712a55 1162 $HAVE_LIST_CMDLINE
a3e02a8c 1163 $HAVE_LIST_PUB
3f5b56e5 1164 $THREADS_LIST
79042ab3 1165 $MATH_FUNCS
be1a839c 1166 aligned_malloc
59782b82 1167 aligned_stack
35fd8122 1168 alsa_asoundlib_h
3f5b56e5 1169 altivec_h
c9fdab0d 1170 arpa_inet_h
ec9d2c15 1171 asm_mod_q
6308729e 1172 asm_mod_y
dffb41b9 1173 attribute_may_alias
e7ea5e3d 1174 attribute_packed
ecf97f22 1175 closesocket
1ac9331a 1176 cmov
180d43bc 1177 cpunop
1093383d 1178 CryptGenRandom
c88f5d72 1179 dcbzl
f8aa696f
DB
1180 dev_bktr_ioctl_bt848_h
1181 dev_bktr_ioctl_meteor_h
1182 dev_ic_bt8xx_h
f8aa696f 1183 dev_video_bktr_ioctl_bt848_h
3e0b1c9a 1184 dev_video_meteor_ioctl_meteor_h
ca6b544a 1185 direct_h
18b67ae5 1186 dlfcn_h
c88f5d72 1187 dlopen
bc574408 1188 dos_paths
fa845061 1189 dxva_h
245626d0
DB
1190 ebp_available
1191 ebx_available
c2a29455 1192 fast_64bit
669b5583 1193 fast_clz
7073e9fc 1194 fast_cmov
534a2231 1195 fcntl
9d99cc5a 1196 fork
84882df6 1197 getaddrinfo
da9e86f8 1198 gethrtime
667fb97a 1199 getopt
02e8f427 1200 GetProcessAffinityMask
fc5607f8 1201 GetProcessMemoryInfo
4e68cb8a 1202 GetProcessTimes
61183b5a 1203 GetSystemTimeAsFileTime
66be5b45 1204 getrusage
c3e73100 1205 getservbyport
61183b5a 1206 gettimeofday
a49d3025 1207 gnu_as
2f0c136e 1208 ibm_asm
2e1913b1 1209 inet_aton
3b1ab197 1210 io_h
abfc8d05 1211 isatty
8772997d 1212 jack_port_get_latency_range
9f5ff83f 1213 ldbrx
0b4a1821
AS
1214 libdc1394_1
1215 libdc1394_2
d96cd429
MR
1216 local_aligned_16
1217 local_aligned_8
a5b64584 1218 localtime_r
85dd97ad 1219 loongson
f8aa696f
DB
1220 machine_ioctl_bt848_h
1221 machine_ioctl_meteor_h
c88f5d72 1222 malloc_h
73f6d31e 1223 MapViewOfFile
c88f5d72 1224 memalign
6ffa87d3 1225 mkstemp
f80ddd5b 1226 mm_empty
0328b9ea 1227 mmap
e98b02de 1228 mprotect
4fa661a8 1229 msvcrt
d3d3a32c 1230 nanosleep
3e0b1c9a 1231 poll_h
1f91cdce 1232 posix_memalign
07b28702 1233 rdtsc
ea4d5f48 1234 sched_getaffinity
c88f5d72
MR
1235 sdl
1236 sdl_video_size
b507ebd1 1237 setmode
3e0b1c9a 1238 setrlimit
d3d3a32c 1239 Sleep
15d59d2c 1240 sndio_h
72be9e73 1241 socklen_t
deb29777 1242 soundcard_h
87958234 1243 strerror_r
6379900c 1244 strptime
47941088 1245 strtok_r
c0018613 1246 struct_addrinfo
75d339e0
MS
1247 struct_group_source_req
1248 struct_ip_mreq_source
b4d68544 1249 struct_ipv6_mreq
cdee08e3 1250 struct_pollfd
3e0b1c9a 1251 struct_rusage_ru_maxrss
b4d68544 1252 struct_sockaddr_in6
3b2372bf 1253 struct_sockaddr_sa_len
33a4dbdd 1254 struct_sockaddr_storage
a6a4793d 1255 struct_v4l2_frmivalenum_discrete
b462d132 1256 symver_asm_label
3e0b1c9a 1257 symver_gnu_asm
bcc73960 1258 sysconf
b9e22269 1259 sysctl
b58412f1 1260 sys_mman_h
06bb5905 1261 sys_param_h
b091aa44 1262 sys_resource_h
81644c2e 1263 sys_select_h
deb29777 1264 sys_soundcard_h
e64bceea 1265 sys_time_h
1b6e8b73 1266 sys_videoio_h
b265431e 1267 threads
542920b7 1268 unistd_h
d3d3a32c 1269 usleep
ce742de2 1270 vfp_args
7c5bfe7a 1271 VirtualAlloc
d3d3a32c 1272 windows_h
6ff3f3e7 1273 winsock2_h
cc078b5d 1274 xform_asm
6f74fb03 1275 xmm_clobbers
0cb78cef 1276"
44161118 1277
b6bb00b0
MR
1278# options emitted with CONFIG_ prefix but not available on command line
1279CONFIG_EXTRA="
87849592 1280 aandcttables
bfe9f48a 1281 ac3dsp
dc4f5a1c 1282 avutil
c292f6a2 1283 error_resilience
bfe9f48a 1284 gcrypt
478fd534 1285 golomb
9cad0e4e 1286 gplv3
478fd534
DB
1287 h264chroma
1288 h264dsp
1289 h264pred
915a2a0a 1290 h264qpel
478fd534 1291 huffman
9cad0e4e 1292 lgplv3
478fd534 1293 lpc
1e164c0b 1294 mpegaudio
bfe9f48a 1295 mpegaudiodsp
18bbca1f 1296 mpegvideo
ad08dfd5 1297 mpegvideoenc
bfe9f48a 1298 nettle
f704a079 1299 rangecoder
bfe9f48a
DB
1300 rtpdec
1301 sinewin
ab9f9876 1302 vp3dsp
b6bb00b0
MR
1303"
1304
520cc7f1 1305CMDLINE_SELECT="
3f5b56e5 1306 $ARCH_EXT_LIST
520cc7f1 1307 $CONFIG_LIST
fd712a55 1308 $HAVE_LIST_CMDLINE
8eee7025 1309 $THREADS_LIST
c8a4ae00 1310 asm
db6107b6 1311 cross_compile
520cc7f1
MR
1312 debug
1313 extra_warnings
8c6afa4d 1314 logging
65d12900 1315 lto
d2bbb2f7 1316 optimizations
520cc7f1 1317"
426be5dc
DB
1318
1319PATHS_LIST='
d156bede 1320 bindir
14a8acf1 1321 datadir
26759c44
MR
1322 incdir
1323 libdir
26759c44
MR
1324 mandir
1325 prefix
1326 shlibdir
426be5dc
DB
1327'
1328
1329CMDLINE_SET="
1330 $PATHS_LIST
121d78d0 1331 ar
426be5dc 1332 arch
313c46a6 1333 as
426be5dc
DB
1334 build_suffix
1335 cc
1336 cpu
1337 cross_prefix
50567afa 1338 dep_cc
ac63af34 1339 extra_version
9da6609f
MR
1340 host_cc
1341 host_cflags
095792f2 1342 host_ld
9da6609f
MR
1343 host_ldflags
1344 host_libs
82bb3329 1345 host_os
684b28e0 1346 ld
426be5dc 1347 logfile
4ae40685 1348 malloc_prefix
89641463 1349 nm
9cd7b854 1350 optflags
3f8040db 1351 pkg_config
154caa67 1352 random_seed
2fad0977 1353 samples
c5200f17
MR
1354 sysinclude
1355 sysroot
a7ada2ba 1356 target_exec
26759c44 1357 target_os
a7ada2ba 1358 target_path
aeeb782c 1359 toolchain
426be5dc 1360"
520cc7f1 1361
89f2932b
MR
1362CMDLINE_APPEND="
1363 extra_cflags
1364"
1365
912f3148
DB
1366# code dependency declarations
1367
9eeed841 1368# architecture extensions
808fa33c 1369
a2fc0f6a
MR
1370armv5te_deps="arm"
1371armv6_deps="arm"
ab5cb084 1372armv6t2_deps="arm"
a2fc0f6a 1373armvfp_deps="arm"
808fa33c 1374neon_deps="arm"
93eb8e4d 1375vfpv3_deps="armvfp"
808fa33c 1376
808fa33c
MR
1377altivec_deps="ppc"
1378ppc4xx_deps="ppc"
1379
1380vis_deps="sparc"
1381
7f8c3d1f 1382x86_64_suggest="cmov fast_cmov"
50cd43f2 1383
808fa33c
MR
1384amd3dnow_deps="mmx"
1385amd3dnowext_deps="amd3dnow"
9eeed841 1386mmx_deps="x86"
239fdf1b 1387mmxext_deps="mmx"
50cd43f2
DB
1388sse_deps="mmxext"
1389sse2_deps="sse"
1390sse3_deps="sse2"
1391ssse3_deps="sse3"
1392sse4_deps="ssse3"
1393sse42_deps="sse4"
1394avx_deps="sse42"
79687079 1395fma4_deps="avx"
9eeed841 1396
43b73d59
DB
1397mmx_external_deps="yasm"
1398mmx_inline_deps="inline_asm"
1399mmx_suggest="mmx_external mmx_inline"
1400
1401for ext in $(filter_out mmx $ARCH_EXT_LIST_X86); do
1402 eval dep=\$${ext}_deps
1403 eval ${ext}_external_deps='"${dep}_external"'
1404 eval ${ext}_inline_deps='"${dep}_inline"'
1405 eval ${ext}_suggest='"${ext}_external ${ext}_inline"'
1406done
1407
59782b82 1408aligned_stack_if_any="ppc x86"
e939cedd 1409fast_64bit_if_any="alpha ia64 mips64 parisc64 ppc64 sparc64 x86_64"
669b5583 1410fast_clz_if_any="alpha armv5te avr32 mips ppc x86"
e939cedd 1411fast_unaligned_if_any="armv6 ppc x86"
669b5583 1412
6fec122a 1413inline_asm_deps="!tms470"
3e0b1c9a 1414need_memalign="altivec neon sse"
89e053f8 1415
b462d132
MR
1416symver_if_any="symver_asm_label symver_gnu_asm"
1417
88a35699
MS
1418log2_deps="!msvcrt"
1419
26fbcc85 1420# subsystems
dc609252 1421dct_select="rdft"
26fbcc85
MR
1422mdct_select="fft"
1423rdft_select="fft"
1e164c0b 1424mpegaudio_select="mpegaudiodsp"
c4f5c2d6 1425mpegaudiodsp_select="dct"
ad08dfd5 1426mpegvideoenc_select="mpegvideo"
26fbcc85 1427
5666fd73 1428# decoders / encoders / hardware accelerators
cfc2a0cf 1429aac_decoder_select="mdct sinewin"
4538729a 1430aac_encoder_select="mdct sinewin"
136e19e1 1431aac_latm_decoder_select="aac_decoder aac_latm_parser"
6d9f52b2 1432ac3_decoder_select="mdct ac3dsp ac3_parser"
a5444fee 1433ac3_encoder_select="mdct ac3dsp"
3d269059 1434ac3_fixed_encoder_select="mdct ac3dsp"
f4d608e3 1435alac_encoder_select="lpc"
b781cc12 1436amrnb_decoder_select="lsp"
2b2a597e 1437amrwb_decoder_select="lsp"
4538729a 1438atrac1_decoder_select="mdct sinewin"
26fbcc85 1439atrac3_decoder_select="mdct"
a33657ce
DB
1440binkaudio_dct_decoder_select="mdct rdft dct sinewin"
1441binkaudio_rdft_decoder_select="mdct rdft sinewin"
18bbca1f 1442cavs_decoder_select="golomb mpegvideo"
9b500b8f 1443comfortnoise_encoder_select="lpc"
4538729a 1444cook_decoder_select="mdct sinewin"
2a91ada8 1445cscd_decoder_select="lzo"
2eef7c62 1446cscd_decoder_suggest="zlib"
26fbcc85 1447dca_decoder_select="mdct"
ad08dfd5 1448dnxhd_encoder_select="aandcttables mpegvideoenc"
2eef7c62 1449dxa_decoder_select="zlib"
baf91bb9 1450eac3_decoder_select="ac3_decoder"
4264a0dd 1451eac3_encoder_select="ac3_encoder"
69804535 1452eamad_decoder_select="aandcttables error_resilience mpegvideo"
87849592 1453eatgq_decoder_select="aandcttables"
c292f6a2 1454eatqi_decoder_select="aandcttables error_resilience mpegvideo"
f704a079
DB
1455ffv1_decoder_select="golomb rangecoder"
1456ffv1_encoder_select="rangecoder"
5a582bd3 1457ffvhuff_encoder_select="huffman"
4f034993 1458flac_decoder_select="golomb"
f4d608e3 1459flac_encoder_select="golomb lpc"
2eef7c62
AJ
1460flashsv_decoder_select="zlib"
1461flashsv_encoder_select="zlib"
c2d23309 1462flashsv2_decoder_select="zlib"
4414137e 1463flv_decoder_select="h263_decoder"
4d4b4bd1 1464flv_encoder_select="h263_encoder"
3447f12d 1465fraps_decoder_select="huffman"
c292f6a2 1466h261_decoder_select="error_resilience mpegvideo"
ad08dfd5 1467h261_encoder_select="aandcttables mpegvideoenc"
c292f6a2
DB
1468h263_decoder_select="error_resilience h263_parser mpegvideo"
1469h263_encoder_select="aandcttables error_resilience mpegvideoenc"
95a61cfc 1470h263_vaapi_hwaccel_select="vaapi h263_decoder"
4414137e 1471h263i_decoder_select="h263_decoder"
fe629c2d 1472h263p_encoder_select="h263_encoder"
c292f6a2 1473h264_decoder_select="error_resilience golomb h264chroma h264dsp h264pred h264qpel mpegvideo"
92c6a099
LA
1474h264_dxva2_hwaccel_deps="dxva2api_h"
1475h264_dxva2_hwaccel_select="dxva2 h264_decoder"
76718f3f 1476h264_vaapi_hwaccel_select="vaapi h264_decoder"
ac3dbb4d 1477h264_vda_hwaccel_select="vda h264_decoder"
95a61cfc 1478h264_vdpau_decoder_select="vdpau h264_decoder"
5a582bd3 1479huffyuv_encoder_select="huffman"
19be0f3c 1480iac_decoder_select="fft mdct sinewin"
56c8227d 1481imc_decoder_select="fft mdct sinewin"
4f034993
MR
1482jpegls_decoder_select="golomb"
1483jpegls_encoder_select="golomb"
ad08dfd5 1484ljpeg_encoder_select="aandcttables mpegvideoenc"
4f034993 1485loco_decoder_select="golomb"
c292f6a2 1486mdec_decoder_select="error_resilience mpegvideo"
ad08dfd5 1487mjpeg_encoder_select="aandcttables mpegvideoenc"
2cca233b 1488mlp_decoder_select="mlp_parser"
1e164c0b
DB
1489mp1_decoder_select="mpegaudio"
1490mp1float_decoder_select="mpegaudio"
1491mp2_decoder_select="mpegaudio"
1492mp2float_decoder_select="mpegaudio"
1493mp3_decoder_select="mpegaudio"
1494mp3adu_decoder_select="mpegaudio"
1495mp3adufloat_decoder_select="mpegaudio"
1496mp3float_decoder_select="mpegaudio"
1497mp3on4_decoder_select="mpegaudio"
1498mp3on4float_decoder_select="mpegaudio"
606c9297
DB
1499mpc7_decoder_select="mpegaudiodsp"
1500mpc8_decoder_select="mpegaudiodsp"
95a61cfc 1501mpeg_vdpau_decoder_select="vdpau mpegvideo_decoder"
3e0b1c9a
DB
1502mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h"
1503mpeg_xvmc_decoder_select="mpegvideo_decoder"
95a61cfc 1504mpeg1_vdpau_decoder_select="vdpau mpeg1video_decoder"
c292f6a2
DB
1505mpeg1video_decoder_select="error_resilience mpegvideo"
1506mpeg1video_encoder_select="aandcttables error_resilience mpegvideoenc"
164aab02
LA
1507mpeg2_dxva2_hwaccel_deps="dxva2api_h"
1508mpeg2_dxva2_hwaccel_select="dxva2 mpeg2video_decoder"
95a61cfc 1509mpeg2_vaapi_hwaccel_select="vaapi mpeg2video_decoder"
c292f6a2
DB
1510mpeg2video_decoder_select="error_resilience mpegvideo"
1511mpeg2video_encoder_select="aandcttables error_resilience mpegvideoenc"
3e0b1c9a
DB
1512mpeg4_decoder_select="h263_decoder mpeg4video_parser"
1513mpeg4_encoder_select="h263_encoder"
95a61cfc 1514mpeg4_vaapi_hwaccel_select="vaapi mpeg4_decoder"
70e0c871 1515mpeg4_vdpau_decoder_select="vdpau mpeg4_decoder"
4414137e 1516msmpeg4v1_decoder_select="h263_decoder"
4e169d89 1517msmpeg4v1_encoder_select="h263_encoder"
4414137e 1518msmpeg4v2_decoder_select="h263_decoder"
4e169d89 1519msmpeg4v2_encoder_select="h263_encoder"
4414137e 1520msmpeg4v3_decoder_select="h263_decoder"
4e169d89 1521msmpeg4v3_encoder_select="h263_encoder"
ee769c6a 1522mss2_decoder_select="vc1_decoder"
4538729a
MR
1523nellymoser_decoder_select="mdct sinewin"
1524nellymoser_encoder_select="mdct sinewin"
2a91ada8 1525nuv_decoder_select="lzo"
2eef7c62
AJ
1526png_decoder_select="zlib"
1527png_encoder_select="zlib"
b781cc12 1528qcelp_decoder_select="lsp"
c4f5c2d6 1529qdm2_decoder_select="mdct rdft mpegaudiodsp"
31ed3f1f 1530ra_144_encoder_select="lpc"
9f43fdda 1531ralf_decoder_select="golomb"
a8beb22f 1532rv10_decoder_select="h263_decoder"
b2bf38b4 1533rv10_encoder_select="h263_encoder"
a8beb22f 1534rv20_decoder_select="h263_decoder"
b2bf38b4 1535rv20_encoder_select="h263_encoder"
c292f6a2
DB
1536rv30_decoder_select="error_resilience golomb h264chroma h264pred h264qpel mpegvideo"
1537rv40_decoder_select="error_resilience golomb h264chroma h264pred h264qpel mpegvideo"
4f034993 1538shorten_decoder_select="golomb"
b781cc12 1539sipr_decoder_select="lsp"
f704a079
DB
1540snow_decoder_select="dwt rangecoder"
1541snow_encoder_select="aandcttables dwt error_resilience mpegvideoenc rangecoder"
c292f6a2
DB
1542svq1_decoder_select="error_resilience mpegvideo"
1543svq1_encoder_select="aandcttables error_resilience mpegvideoenc"
1544svq3_decoder_select="error_resilience golomb h264chroma h264dsp h264pred h264qpel mpegvideo"
bee2eac5 1545svq3_decoder_suggest="zlib"
4eef77c1 1546theora_decoder_select="vp3_decoder"
2eef7c62
AJ
1547tiff_decoder_suggest="zlib"
1548tiff_encoder_suggest="zlib"
aec09a00 1549truehd_decoder_select="mlp_decoder"
2eef7c62 1550tscc_decoder_select="zlib"
4538729a 1551twinvq_decoder_select="mdct lsp sinewin"
aa661113 1552utvideo_encoder_select="huffman"
915a2a0a 1553vc1_decoder_select="h263_decoder h264chroma h264qpel"
562ebc30 1554vc1_dxva2_hwaccel_deps="dxva2api_h"
f0f86627 1555vc1_dxva2_hwaccel_select="dxva2 vc1_decoder"
95a61cfc 1556vc1_vaapi_hwaccel_select="vaapi vc1_decoder"
95a61cfc 1557vc1_vdpau_decoder_select="vdpau vc1_decoder"
45ecda85 1558vc1image_decoder_select="vc1_decoder"
26fbcc85
MR
1559vorbis_decoder_select="mdct"
1560vorbis_encoder_select="mdct"
ab9f9876
MR
1561vp3_decoder_select="vp3dsp"
1562vp5_decoder_select="vp3dsp"
1563vp6_decoder_select="huffman vp3dsp"
e82dc4c9
DB
1564vp6a_decoder_select="vp6_decoder"
1565vp6f_decoder_select="vp6_decoder"
915a2a0a 1566vp8_decoder_select="h264pred h264qpel"
4538729a
MR
1567wmapro_decoder_select="mdct sinewin"
1568wmav1_decoder_select="mdct sinewin"
1569wmav1_encoder_select="mdct sinewin"
1570wmav2_decoder_select="mdct sinewin"
1571wmav2_encoder_select="mdct sinewin"
1572wmavoice_decoder_select="lsp rdft dct mdct sinewin"
f95bfab0 1573wmv1_decoder_select="h263_decoder"
665507aa 1574wmv1_encoder_select="h263_encoder"
f95bfab0 1575wmv2_decoder_select="h263_decoder"
1746e2a9 1576wmv2_encoder_select="h263_encoder"
015f8ee0 1577wmv3_decoder_select="vc1_decoder"
f0f86627 1578wmv3_dxva2_hwaccel_select="vc1_dxva2_hwaccel"
015f8ee0
DB
1579wmv3_vaapi_hwaccel_select="vc1_vaapi_hwaccel"
1580wmv3_vdpau_decoder_select="vc1_vdpau_decoder"
45ecda85 1581wmv3image_decoder_select="wmv3_decoder"
0e714f88 1582zerocodec_decoder_select="zlib"
2eef7c62
AJ
1583zlib_decoder_select="zlib"
1584zlib_encoder_select="zlib"
1585zmbv_decoder_select="zlib"
1586zmbv_encoder_select="zlib"
30fd06be 1587
0afab17e 1588vaapi_deps="va_va_h"
ac3dbb4d 1589vda_deps="VideoDecodeAcceleration_VDADecoder_h pthreads"
c89c96e9
MR
1590vdpau_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1591
28b80940 1592# parsers
c292f6a2
DB
1593h264_parser_select="error_resilience golomb h264dsp h264pred mpegvideo"
1594mpeg4video_parser_select="error_resilience mpegvideo"
1595mpegvideo_parser_select="error_resilience mpegvideo"
1596vc1_parser_select="error_resilience mpegvideo"
28b80940 1597
912f3148 1598# external libraries
c9171a83 1599libfaac_encoder_deps="libfaac"
37eeb5e2 1600libfdk_aac_encoder_deps="libfdk_aac"
299c77d5
MR
1601libgsm_decoder_deps="libgsm"
1602libgsm_encoder_deps="libgsm"
8ffed8d8
MR
1603libgsm_ms_decoder_deps="libgsm"
1604libgsm_ms_encoder_deps="libgsm"
3641b048
MS
1605libilbc_decoder_deps="libilbc"
1606libilbc_encoder_deps="libilbc"
1cc60c47 1607libmp3lame_encoder_deps="libmp3lame"
0b175caa
DB
1608libopencore_amrnb_decoder_deps="libopencore_amrnb"
1609libopencore_amrnb_encoder_deps="libopencore_amrnb"
1610libopencore_amrwb_decoder_deps="libopencore_amrwb"
9a77d59a 1611libopenjpeg_decoder_deps="libopenjpeg"
453c02f9 1612libopenjpeg_encoder_deps="libopenjpeg"
44617d6e 1613libopus_decoder_deps="libopus"
6cb8c854 1614libopus_encoder_deps="libopus"
f7cd9eed
AS
1615libschroedinger_decoder_deps="libschroedinger"
1616libschroedinger_encoder_deps="libschroedinger"
ae14f311 1617libspeex_decoder_deps="libspeex"
b606a017 1618libspeex_encoder_deps="libspeex"
150d2772 1619libtheora_encoder_deps="libtheora"
d89e738a 1620libvo_aacenc_encoder_deps="libvo_aacenc"
f502ff3f 1621libvo_amrwbenc_encoder_deps="libvo_amrwbenc"
b0caf888 1622libvorbis_encoder_deps="libvorbis"
8299a7f8 1623libvpx_decoder_deps="libvpx"
ee0e9146 1624libvpx_encoder_deps="libvpx"
1cc60c47 1625libx264_encoder_deps="libx264"
de295976 1626libxavs_encoder_deps="libxavs"
1cc60c47 1627libxvid_encoder_deps="libxvid"
30fd06be 1628
912f3148 1629# demuxers / muxers
c2dd0e9e 1630ac3_demuxer_select="ac3_parser"
647c2356 1631asf_stream_muxer_select="asf_muxer"
4e622dea 1632avisynth_demuxer_deps="avisynth"
c2dd0e9e 1633dirac_demuxer_select="dirac_parser"
5b423887 1634eac3_demuxer_select="ac3_parser"
c2dd0e9e 1635flac_demuxer_select="flac_parser"
647c2356 1636ipod_muxer_select="mov_muxer"
647c2356 1637matroska_audio_muxer_select="matroska_muxer"
2a91ada8 1638matroska_demuxer_suggest="bzlib lzo zlib"
4e622dea 1639mov_demuxer_suggest="zlib"
c2dd0e9e 1640mp3_demuxer_select="mpegaudio_parser"
647c2356 1641mp4_muxer_select="mov_muxer"
18bbca1f 1642mpegts_muxer_select="adts_muxer latm_muxer mpegvideo"
647c2356
DB
1643mpegtsraw_demuxer_select="mpegts_demuxer"
1644mxf_d10_muxer_select="mxf_muxer"
24ca518b 1645ogg_demuxer_select="golomb"
647c2356 1646psp_muxer_select="mov_muxer"
44594cc7 1647rtp_demuxer_select="sdp_demuxer"
18bbca1f 1648rtp_muxer_select="mpegvideo"
44b70ce5
MS
1649rtpdec_select="asf_demuxer rm_demuxer rtp_protocol mpegts_demuxer mov_demuxer"
1650rtsp_demuxer_select="http_protocol rtpdec"
1651rtsp_muxer_select="rtp_muxer http_protocol rtp_protocol"
01c8d258 1652sap_demuxer_select="sdp_demuxer"
2aab70c4 1653sap_muxer_select="rtp_muxer rtp_protocol"
44b70ce5 1654sdp_demuxer_select="rtpdec"
e772f9fa 1655smoothstreaming_muxer_select="ismv_muxer"
f1e94694 1656spdif_muxer_select="aac_parser"
647c2356
DB
1657tg2_muxer_select="mov_muxer"
1658tgp_muxer_select="mov_muxer"
6bdaa5f4 1659w64_demuxer_deps="wav_demuxer"
4e622dea
SS
1660
1661# indevs / outdevs
38e54a75 1662alsa_indev_deps="alsa_asoundlib_h snd_pcm_htimestamp"
38e54a75 1663alsa_outdev_deps="alsa_asoundlib_h"
38e54a75 1664bktr_indev_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
38e54a75 1665dv1394_indev_deps="dv1394 dv_demuxer"
c6f95144 1666fbdev_indev_deps="linux_fb_h"
38e54a75 1667jack_indev_deps="jack_jack_h"
e417d80d 1668libcdio_indev_deps="libcdio"
38e54a75 1669libdc1394_indev_deps="libdc1394"
38e54a75
SS
1670oss_indev_deps_any="soundcard_h sys_soundcard_h"
1671oss_outdev_deps_any="soundcard_h sys_soundcard_h"
0de9c41f 1672pulse_indev_deps="libpulse"
15d59d2c
B
1673sndio_indev_deps="sndio_h"
1674sndio_outdev_deps="sndio_h"
38e54a75 1675v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h"
ec1ee802 1676vfwcap_indev_deps="capCreateCaptureWindow vfwcap_defines"
a1b3c5a3 1677vfwcap_indev_extralibs="-lavicap32"
24f8961f 1678x11grab_indev_deps="x11grab XShmCreateImage"
30fd06be 1679
912f3148 1680# protocols
acd554c1
SP
1681ffrtmpcrypt_protocol_deps="!librtmp_protocol"
1682ffrtmpcrypt_protocol_deps_any="gcrypt nettle openssl"
1683ffrtmpcrypt_protocol_select="tcp_protocol"
775c4d36
SP
1684ffrtmphttp_protocol_deps="!librtmp_protocol"
1685ffrtmphttp_protocol_select="http_protocol"
3fff6382 1686gopher_protocol_deps="network"
c40e1757
JS
1687httpproxy_protocol_deps="network"
1688httpproxy_protocol_select="tcp_protocol"
c08fb000 1689http_protocol_deps="network"
279a0c97 1690http_protocol_select="tcp_protocol"
183baead 1691https_protocol_select="tls_protocol"
c3b57d6e
DB
1692librtmp_protocol_deps="librtmp"
1693librtmpe_protocol_deps="librtmp"
1694librtmps_protocol_deps="librtmp"
1695librtmpt_protocol_deps="librtmp"
1696librtmpte_protocol_deps="librtmp"
c60a2d70 1697mmsh_protocol_select="http_protocol"
b4cf3f6c 1698mmst_protocol_deps="network"
c3b57d6e 1699rtmp_protocol_deps="!librtmp_protocol"
deeb7012 1700rtmp_protocol_select="tcp_protocol"
acd554c1 1701rtmpe_protocol_select="ffrtmpcrypt_protocol"
6aedabc9
SP
1702rtmps_protocol_deps="!librtmp_protocol"
1703rtmps_protocol_select="tls_protocol"
775c4d36 1704rtmpt_protocol_select="ffrtmphttp_protocol"
08cd95e8 1705rtmpte_protocol_select="ffrtmpcrypt_protocol ffrtmphttp_protocol"
6c1ed454 1706rtmpts_protocol_select="ffrtmphttp_protocol https_protocol"
deeb7012 1707rtp_protocol_select="udp_protocol"
83c93fe7 1708sctp_protocol_deps="network struct_sctp_event_subscribe"
c08fb000 1709tcp_protocol_deps="network"
558d192d
MS
1710tls_protocol_deps_any="openssl gnutls"
1711tls_protocol_select="tcp_protocol"
c08fb000
AB
1712udp_protocol_deps="network"
1713
6ebf0bfc 1714# filters
13fabd7a 1715blackframe_filter_deps="gpl"
ce6b6ef6 1716boxblur_filter_deps="gpl"
68b79bfc 1717cropdetect_filter_deps="gpl"
b157be1f 1718delogo_filter_deps="gpl"
a5b64584 1719drawtext_filter_deps="libfreetype"
2e5ff4d0 1720frei0r_filter_deps="frei0r dlopen strtok_r"
cfec77aa 1721frei0r_filter_extralibs='$ldl'
a42bb9d6 1722frei0r_src_filter_deps="frei0r dlopen strtok_r"
cfec77aa 1723frei0r_src_filter_extralibs='$ldl'
a4dc7aa5 1724hqdn3d_filter_deps="gpl"
d371e7b9 1725resample_filter_deps="avresample"
cf69ad35 1726ocv_filter_deps="libopencv"
2f296e39 1727scale_filter_deps="swscale"
acbac567 1728yadif_filter_deps="gpl"
6ebf0bfc 1729
5a0f7131
MR
1730# libraries
1731avdevice_deps="avcodec avformat"
1732avformat_deps="avcodec"
f7679c54 1733
912f3148 1734# programs
ce03b088
AK
1735avconv_deps="avcodec avfilter avformat avresample swscale
1736 aformat_filter asyncts_filter
1737 format_filter fps_filter scale_filter setpts_filter"
266463da
AK
1738avplay_deps="avcodec avformat swscale sdl"
1739avplay_select="rdft"
9e12f0bf 1740avprobe_deps="avcodec avformat"
b263bf66 1741avserver_deps="avformat ffm_muxer fork rtp_protocol rtsp_demuxer !shared"
4d58e4cb 1742avserver_extralibs='$ldl'
a2830dca 1743
c73f65d9 1744doc_deps="texi2html"
912f3148 1745
de6d9b64 1746# default parameters
8a608357 1747
19bd477d 1748logfile="config.log"
8a608357
MR
1749
1750# installation paths
c9d19248
MR
1751prefix_default="/usr/local"
1752bindir_default='${prefix}/bin'
6291d7e4 1753datadir_default='${prefix}/share/avconv'
c9d19248
MR
1754incdir_default='${prefix}/include'
1755libdir_default='${prefix}/lib'
1756mandir_default='${prefix}/share/man'
1757shlibdir_default="$libdir_default"
8a608357
MR
1758
1759# toolchain
121d78d0 1760ar_default="ar"
13c7df3d 1761cc_default="gcc"
9da6609f 1762host_cc_default="gcc"
4ebc6a74 1763cp_f="cp -f"
11e6d03a 1764ln_s="ln -sf"
2a8a860a 1765nm_default="nm -g"
11e6d03a 1766objformat="elf"
3f8040db 1767pkg_config_default=pkg-config
be7109c1 1768ranlib="ranlib"
11e6d03a 1769yasmexe="yasm"
8a608357 1770
3e0b1c9a 1771nogas=":"
8182dc34 1772
8a608357 1773# machine
8d4c00ed 1774arch_default=$(uname -m)
38d0a8aa 1775cpu="generic"
8a608357 1776
8a608357 1777# OS
8d4c00ed
MR
1778target_os_default=$(tolower $(uname -s))
1779host_os=$target_os_default
8a608357 1780
8a608357 1781# configurable options
055c61b8
DB
1782enable $PROGRAM_LIST
1783
5a0f7131
MR
1784enable avcodec
1785enable avdevice
cccc039f 1786enable avfilter
5a0f7131 1787enable avformat
c8af852b 1788enable avresample
dc4f5a1c 1789enable avutil
3e0b1c9a
DB
1790enable swscale
1791
3e0b1c9a
DB
1792enable asm
1793enable debug
1794enable doc
497237c7 1795enable network
8400d6b8 1796enable optimizations
8cfbbd92 1797enable safe_bitstream_reader
530dc538 1798enable static
a9ddb5b1 1799enable swscale_alpha
8a608357 1800
8a608357 1801# build settings
9987769a 1802SHFLAGS='-shared -Wl,-soname,$$(@F)'
4d58e4cb 1803AVSERVERLDFLAGS=-Wl,-E
f3ec2d46
SG
1804LIBPREF="lib"
1805LIBSUF=".a"
c5f14466
RP
1806FULLNAME='$(NAME)$(BUILDSUF)'
1807LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
f3ec2d46
SG
1808SLIBPREF="lib"
1809SLIBSUF=".so"
c5f14466 1810SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
b29bddab
DB
1811SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
1812SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
6cfac0e9 1813LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
2f138f0b
MR
1814SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'
1815SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR) $(SLIBNAME)'
ef0bc4c9 1816
68485d1f
MR
1817asflags_filter=echo
1818cflags_filter=echo
64933b6c
MR
1819ldflags_filter=echo
1820
23565c26 1821AS_C='-c'
bc877faf 1822AS_O='-o $@'
23565c26 1823CC_C='-c'
18031c49 1824CC_E='-E -o $@'
7e6c86e6 1825CC_O='-o $@'
a758c5e2 1826LD_O='-o $@'
8db73c61
MR
1827LD_LIB='-l%'
1828LD_PATH='-L'
23565c26 1829HOSTCC_C='-c'
a758c5e2 1830HOSTCC_O='-o $@'
095792f2 1831HOSTLD_O='-o $@'
7e6c86e6 1832
1d01fee9 1833host_cflags='-D_ISOC99_SOURCE -D_XOPEN_SOURCE=600 -O3 -g'
9da6609f 1834host_libs='-lm'
6c3fa06a
MR
1835host_cflags_filter=echo
1836host_ldflags_filter=echo
9da6609f 1837
9b861379 1838target_path='$(CURDIR)'
a7ada2ba 1839
a158446b
MR
1840# since the object filename is not given with the -MM flag, the compiler
1841# is only able to print the basename, and we must add the path ourselves
a758c5e2
MR
1842DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o," > $(@:.o=.d)'
1843DEPFLAGS='-MM'
315c741d 1844
c597172e 1845# find source path
24524f36 1846if test -f configure; then
f038cf3c 1847 source_path=.
c597172e 1848else
8477f2de 1849 source_path=$(cd $(dirname "$0"); pwd)
c597172e 1850 echo "$source_path" | grep -q '[[:blank:]]' &&
7483e694 1851 die "Out of tree builds are impossible with whitespace in source path."
337cee68
MC
1852 test -e "$source_path/config.h" &&
1853 die "Out of tree builds are impossible with config.h in source dir."
c597172e
MR
1854fi
1855
13cbe2c0 1856for v in "$@"; do
b04251c5
MR
1857 r=${v#*=}
1858 l=${v%"$r"}
1859 r=$(sh_quote "$r")
29ba0911 1860 LIBAV_CONFIGURATION="${LIBAV_CONFIGURATION# } ${l}${r}"
13cbe2c0 1861done
c597172e 1862
73ef8980
MR
1863find_things(){
1864 thing=$1
1865 pattern=$2
1866 file=$source_path/$3
932ccf39 1867 sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
73ef8980
MR
1868}
1869
1870ENCODER_LIST=$(find_things encoder ENC libavcodec/allcodecs.c)
1871DECODER_LIST=$(find_things decoder DEC libavcodec/allcodecs.c)
5666fd73 1872HWACCEL_LIST=$(find_things hwaccel HWACCEL libavcodec/allcodecs.c)
73ef8980
MR
1873PARSER_LIST=$(find_things parser PARSER libavcodec/allcodecs.c)
1874BSF_LIST=$(find_things bsf BSF libavcodec/allcodecs.c)
1875MUXER_LIST=$(find_things muxer _MUX libavformat/allformats.c)
1876DEMUXER_LIST=$(find_things demuxer DEMUX libavformat/allformats.c)
38e54a75
SS
1877OUTDEV_LIST=$(find_things outdev OUTDEV libavdevice/alldevices.c)
1878INDEV_LIST=$(find_things indev _IN libavdevice/alldevices.c)
73ef8980 1879PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
81124ba0 1880FILTER_LIST=$(find_things filter FILTER libavfilter/allfilters.c)
c597172e 1881
54e75be4
DB
1882ALL_COMPONENTS="
1883 $BSF_LIST
1884 $DECODER_LIST
1885 $DEMUXER_LIST
1886 $ENCODER_LIST
1887 $FILTER_LIST
1888 $HWACCEL_LIST
1889 $INDEV_LIST
1890 $MUXER_LIST
1891 $OUTDEV_LIST
1892 $PARSER_LIST
1893 $PROTOCOL_LIST
1894"
1895
8469ae22
MR
1896for n in $COMPONENT_LIST; do
1897 v=$(toupper ${n%s})_LIST
1898 eval enable \$$v
1899 eval ${n}_if_any="\$$v"
1900done
1901
4b587848
DB
1902disable snow_decoder snow_encoder
1903
206a070d 1904enable $ARCH_EXT_LIST
c597172e
MR
1905
1906die_unknown(){
1907 echo "Unknown option \"$1\"."
1908 echo "See $0 --help for available options."
1909 exit 1
1910}
1911
794f8e97 1912show_list() {
bf0c4afa
RP
1913 suffix=_$1
1914 shift
2b444ea7 1915 echo $* | sed s/$suffix//g | tr ' ' '\n' | sort | pr -3 -t
794f8e97
PI
1916 exit 0
1917}
1918
154caa67
MR
1919rand_list(){
1920 IFS=', '
1921 set -- $*
1922 unset IFS
1923 for thing; do
1924 comp=${thing%:*}
1925 prob=${thing#$comp}
1926 prob=${prob#:}
1927 is_in ${comp} $COMPONENT_LIST && eval comp=\$$(toupper ${comp%s})_LIST
1928 echo "prob ${prob:-0.5}"
1929 printf '%s\n' $comp
1930 done
1931}
1932
1933do_random(){
1934 action=$1
1935 shift
1936 random_seed=$(awk "BEGIN { srand($random_seed); print srand() }")
1937 $action $(rand_list "$@" | awk "BEGIN { srand($random_seed) } \$1 == \"prob\" { prob = \$2; next } rand() < prob { print }")
1938}
1939
c597172e 1940for opt do
7483e694
DB
1941 optval="${opt#*=}"
1942 case "$opt" in
0f010b2f 1943 --extra-ldflags=*) add_ldflags $optval
7483e694 1944 ;;
0f010b2f 1945 --extra-libs=*) add_extralibs $optval
7483e694 1946 ;;
8fb1cb58 1947 --disable-devices) disable $INDEV_LIST $OUTDEV_LIST
9aa8ed9d 1948 ;;
40bcf4c7
BL
1949 --enable-debug=*) debuglevel="$optval"
1950 ;;
e28b7553
DB
1951 --disable-programs)
1952 disable $PROGRAM_LIST
1953 ;;
36e2dea0 1954 --disable-everything)
1b15dc3c 1955 map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
36e2dea0 1956 ;;
154caa67
MR
1957 --enable-random|--disable-random)
1958 action=${opt%%-random}
1959 do_random ${action#--} $COMPONENT_LIST
1960 ;;
1961 --enable-random=*|--disable-random=*)
1962 action=${opt%%-random=*}
1963 do_random ${action#--} $optval
1964 ;;
7483e694 1965 --enable-*=*|--disable-*=*)
8b93ddc3 1966 eval $(echo "${opt%%=*}" | sed 's/--/action=/;s/-/ thing=/')
be8f2501
MR
1967 is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt"
1968 eval list=\$$(toupper $thing)_LIST
8b93ddc3
MR
1969 name=$(echo "${optval}" | sed "s/,/_${thing}|/g")_${thing}
1970 $action $(filter "$name" $list)
7483e694
DB
1971 ;;
1972 --enable-?*|--disable-?*)
5e622c40 1973 eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
e3773a55 1974 if is_in $option $COMPONENT_LIST; then
fed5d54b 1975 test $action = disable && action=unset
e3773a55
MR
1976 eval $action \$$(toupper ${option%s})_LIST
1977 elif is_in $option $CMDLINE_SELECT; then
1978 $action $option
1979 else
1980 die_unknown $opt
1981 fi
7483e694
DB
1982 ;;
1983 --list-*)
1984 NAME="${opt#--list-}"
1985 is_in $NAME $COMPONENT_LIST || die_unknown $opt
1986 NAME=${NAME%s}
1987 eval show_list $NAME \$$(toupper $NAME)_LIST
1988 ;;
1989 --help|-h) show_help
1990 ;;
1991 *)
884a36a7 1992 optname="${opt%%=*}"
26759c44
MR
1993 optname="${optname#--}"
1994 optname=$(echo "$optname" | sed 's/-/_/g')
89f2932b
MR
1995 if is_in $optname $CMDLINE_SET; then
1996 eval $optname='$optval'
1997 elif is_in $optname $CMDLINE_APPEND; then
1998 append $optname "$optval"
1999 else
2000 die_unknown $opt
2001 fi
7483e694
DB
2002 ;;
2003 esac
c597172e
MR
2004done
2005
bcea99bb
MR
2006disabled logging && logfile=/dev/null
2007
29ba0911 2008echo "# $0 $LIBAV_CONFIGURATION" > $logfile
bcea99bb
MR
2009set >> $logfile
2010
9da6609f
MR
2011test -n "$cross_prefix" && enable cross_compile
2012
8d4c00ed
MR
2013if enabled cross_compile; then
2014 test -n "$arch" && test -n "$target_os" ||
2015 die "Must specify target arch and OS when cross-compiling"
2016fi
2017
121d78d0 2018ar_default="${cross_prefix}${ar_default}"
11e6d03a 2019cc_default="${cross_prefix}${cc_default}"
20e0ed95 2020nm_default="${cross_prefix}${nm_default}"
3f8040db 2021pkg_config_default="${cross_prefix}${pkg_config_default}"
adb2b908 2022ranlib="${cross_prefix}${ranlib}"
adb2b908 2023
c5200f17
MR
2024sysinclude_default="${sysroot}/usr/include"
2025
aeeb782c 2026case "$toolchain" in
0fbb62a8
LB
2027 clang-asan)
2028 cc_default="clang"
2029 add_cflags -faddress-sanitizer
2030 add_ldflags -faddress-sanitizer
2031 ;;
2032 clang-tsan)
2033 cc_default="clang"
2034 add_cflags -fthread-sanitizer
2035 add_ldflags -fthread-sanitizer
2036 ;;
aeeb782c
MR
2037 msvc)
2038 cc_default="c99wrap cl"
2039 ld_default="c99wrap link"
2040 nm_default="dumpbin -symbols"
ac3a9b51 2041 ar_default="lib"
53e8cd68 2042 target_os_default="win32"
aeeb782c
MR
2043 ;;
2044 ?*)
2045 die "Unknown toolchain $toolchain"
2046 ;;
2047esac
2048
53e8cd68 2049set_default arch cc pkg_config sysinclude target_os
9da6609f
MR
2050enabled cross_compile || host_cc_default=$cc
2051set_default host_cc
13c7df3d 2052
762f95e4
MR
2053if ! $pkg_config --version >/dev/null 2>&1; then
2054 warn "$pkg_config not found, library detection may fail."
2055 pkg_config=false
2056fi
2057
82bb3329
MR
2058exesuf() {
2059 case $1 in
53e8cd68 2060 mingw32*|win32|win64|cygwin*|*-dos|freedos|opendos|os/2*|symbian) echo .exe ;;
82bb3329
MR
2061 esac
2062}
2063
2064EXESUF=$(exesuf $target_os)
2065HOSTEXESUF=$(exesuf $host_os)
c0f5b7f1 2066
e4e69e0b 2067# set temporary file name
a49d42c2 2068: ${TMPDIR:=$TEMPDIR}
c51fafa1 2069: ${TMPDIR:=$TMP}
a49d42c2 2070: ${TMPDIR:=/tmp}
e4e69e0b 2071
a210bce2 2072if ! check_cmd mktemp -u XXXXXX; then
54460a83
MR
2073 # simple replacement for missing mktemp
2074 # NOT SAFE FOR GENERAL USE
2075 mktemp(){
09a5c245 2076 echo "${2%%XXX*}.${HOSTNAME}.${UID}.$$"
54460a83
MR
2077 }
2078fi
2079
2080tmpfile(){
2081 tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
2082 (set -C; exec > $tmp) 2>/dev/null ||
f7ba16a7 2083 die "Unable to create temporary file in $TMPDIR."
54460a83
MR
2084 append TMPFILES $tmp
2085 eval $1=$tmp
2086}
2087
2088trap 'rm -f -- $TMPFILES' EXIT
54460a83 2089
55127e7b 2090tmpfile TMPASM .asm
3e0b1c9a
DB
2091tmpfile TMPC .c
2092tmpfile TMPE $EXESUF
2093tmpfile TMPH .h
2094tmpfile TMPO .o
2095tmpfile TMPS .S
2096tmpfile TMPSH .sh
2097tmpfile TMPV .ver
54460a83
MR
2098
2099unset -f mktemp
e4e69e0b 2100
fb3c4ffc
MR
2101chmod +x $TMPE
2102
993f2d0f
MR
2103# make sure we can execute files in $TMPDIR
2104cat > $TMPSH 2>> $logfile <<EOF
2105#! /bin/sh
2106EOF
2107chmod +x $TMPSH >> $logfile 2>&1
2108if ! $TMPSH >> $logfile 2>&1; then
2109 cat <<EOF
2110Unable to create and execute files in $TMPDIR. Set the TMPDIR environment
2111variable to another directory and make sure that it is not mounted noexec.
2112EOF
2113 die "Sanity test failed."
2114fi
993f2d0f 2115
dfa559bc
RB
2116msvc_flags(){
2117 for flag; do
2118 case $flag in
2119 -fomit-frame-pointer) echo -Oy ;;
2120 -g) echo -Z7 ;;
2121 -Wall) echo -W4 -wd4244 -wd4127 -wd4018 -wd4389 \
2122 -wd4146 -wd4057 -wd4204 -wd4706 -wd4305 \
4a185ed2 2123 -wd4152 -wd4324 -we4013 -wd4100 -wd4214 \
d66c52c2 2124 -wd4996 -wd4273 ;;
dfa559bc
RB
2125 -std=c99) ;;
2126 -fno-math-errno) ;;
2127 -fno-common) ;;
2128 -fno-signed-zeros) ;;
2129 -lz) echo zlib.lib ;;
bd680c7b
DB
2130 -lavifil32) echo vfw32.lib ;;
2131 -lavicap32) echo vfw32.lib user32.lib ;;
dfa559bc
RB
2132 -l*) echo ${flag#-l}.lib ;;
2133 *) echo $flag ;;
2134 esac
2135 done
2136}
2137
d0c6d424
MR
2138pgi_flags(){
2139 for flag; do
2140 case $flag in
643933f5 2141 -flto) echo -Mipa=fast,libopt,libinline,vestigial ;;
d0c6d424
MR
2142 -fomit-frame-pointer) echo -Mnoframe ;;
2143 -g) echo -gopt ;;
2144 *) echo $flag ;;
2145 esac
2146 done
2147}
2148
2149suncc_flags(){
2150 for flag; do
2151 case $flag in
2152 -march=*|-mcpu=*)
2153 case "${flag#*=}" in
2154 native) echo -xtarget=native ;;
2155 v9|niagara) echo -xarch=sparc ;;
2156 ultrasparc) echo -xarch=sparcvis ;;
2157 ultrasparc3|niagara2) echo -xarch=sparcvis2 ;;
2158 i586|pentium) echo -xchip=pentium ;;
2159 i686|pentiumpro|pentium2) echo -xtarget=pentium_pro ;;
2160 pentium3*|c3-2) echo -xtarget=pentium3 ;;
2161 pentium-m) echo -xarch=sse2 -xchip=pentium3 ;;
2162 pentium4*) echo -xtarget=pentium4 ;;
2163 prescott|nocona) echo -xarch=sse3 -xchip=pentium4 ;;
2164 *-sse3) echo -xarch=sse3 ;;
2165 core2) echo -xarch=ssse3 -xchip=core2 ;;
b36f87ff 2166 amdfam10|barcelona|bdver*) echo -xarch=sse4_1 ;;
d0c6d424
MR
2167 athlon-4|athlon-[mx]p) echo -xarch=ssea ;;
2168 k8|opteron|athlon64|athlon-fx)
2169 echo -xarch=sse2a ;;
2170 athlon*) echo -xarch=pentium_proa ;;
2171 esac
2172 ;;
2173 -std=c99) echo -xc99 ;;
2174 -fomit-frame-pointer) echo -xregs=frameptr ;;
2175 -fPIC) echo -KPIC -xcode=pic32 ;;
2176 -W*,*) echo $flag ;;
2177 -f*-*|-W*) ;;
2178 *) echo $flag ;;
2179 esac
2180 done
2181}
2182
2183tms470_flags(){
2184 for flag; do
2185 case $flag in
2186 -march=*|-mcpu=*)
2187 case "${flag#*=}" in
2188 armv7-a|cortex-a*) echo -mv=7a8 ;;
2189 armv7-r|cortex-r*) echo -mv=7r4 ;;
2190 armv7-m|cortex-m*) echo -mv=7m3 ;;
2191 armv6*|arm11*) echo -mv=6 ;;
2192 armv5*e|arm[79]*e*|arm9[24]6*|arm96*|arm102[26])
2193 echo -mv=5e ;;
2194 armv4*|arm7*|arm9[24]*) echo -mv=4 ;;
2195 esac
2196 ;;
2197 -mfpu=neon) echo --float_support=vfpv3 --neon ;;
2198 -mfpu=vfp) echo --float_support=vfpv2 ;;
2199 -mfpu=vfpv3) echo --float_support=vfpv3 ;;
b5198a26 2200 -mfpu=vfpv3-d16) echo --float_support=vfpv3d16 ;;
d0c6d424
MR
2201 -msoft-float) echo --float_support=vfplib ;;
2202 -O[0-3]|-mf=*) echo $flag ;;
2203 -g) echo -g -mn ;;
2204 -pds=*) echo $flag ;;
ad93dccb
MR
2205 -D*|-I*) echo $flag ;;
2206 --gcc|--abi=*) echo $flag ;;
2207 -me) echo $flag ;;
d0c6d424
MR
2208 esac
2209 done
2210}
2211
a758c5e2
MR
2212probe_cc(){
2213 pfx=$1
2214 _cc=$2
2215
8db73c61
MR
2216 unset _type _ident _cc_c _cc_e _cc_o _flags _cflags
2217 unset _ld_o _ldflags _ld_lib _ld_path
18031c49 2218 unset _depflags _DEPCMD _DEPFLAGS
a758c5e2
MR
2219 _flags_filter=echo
2220
2221 if $_cc -v 2>&1 | grep -q '^gcc.*LLVM'; then
2222 _type=llvm_gcc
2223 gcc_extra_ver=$(expr "$($_cc --version | head -n1)" : '.*\((.*)\)')
2224 _ident="llvm-gcc $($_cc -dumpversion) $gcc_extra_ver"
2225 _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2226 _cflags_speed='-O3'
2227 _cflags_size='-Os'
2228 elif $_cc -v 2>&1 | grep -qi ^gcc; then
2229 _type=gcc
2230 gcc_version=$($_cc --version | head -n1)
2231 gcc_basever=$($_cc -dumpversion)
2232 gcc_pkg_ver=$(expr "$gcc_version" : '[^ ]* \(([^)]*)\)')
2233 gcc_ext_ver=$(expr "$gcc_version" : ".*$gcc_pkg_ver $gcc_basever \\(.*\\)")
2234 _ident=$(cleanws "gcc $gcc_basever $gcc_pkg_ver $gcc_ext_ver")
2235 if ! $_cc -dumpversion | grep -q '^2\.'; then
2236 _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2237 fi
2238 _cflags_speed='-O3'
2239 _cflags_size='-Os'
2240 elif $_cc --version 2>/dev/null | grep -q Intel; then
2241 _type=icc
2242 _ident=$($_cc --version | head -n1)
2243 _depflags='-MMD'
2244 _cflags_speed='-O3'
2245 _cflags_size='-Os'
2246 _cflags_noopt='-O1'
2247 elif $_cc -v 2>&1 | grep -q xlc; then
2248 _type=xlc
2249 _ident=$($_cc -qversion 2>/dev/null | head -n1)
2250 _cflags_speed='-O5'
2251 _cflags_size='-O5 -qcompact'
2252 elif $_cc -V 2>/dev/null | grep -q Compaq; then
2253 _type=ccc
2254 _ident=$($_cc -V | head -n1 | cut -d' ' -f1-3)
2255 _DEPFLAGS='-M'
2256 debuglevel=3
2257 _ldflags='-Wl,-z,now' # calls to libots crash without this
2258 _cflags_speed='-fast'
2259 _cflags_size='-O1'
2260 elif $_cc --vsn 2>/dev/null | grep -q "ARM C/C++ Compiler"; then
2261 test -d "$sysroot" || die "No valid sysroot specified."
2262 _type=armcc
2263 _ident=$($_cc --vsn | head -n1)
2264 armcc_conf="$PWD/armcc.conf"
2265 $_cc --arm_linux_configure \
2266 --arm_linux_config_file="$armcc_conf" \
2267 --configure_sysroot="$sysroot" \
2268 --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
2269 die "Error creating armcc configuration file."
2270 $_cc --vsn | grep -q RVCT && armcc_opt=rvct || armcc_opt=armcc
2271 _flags="--arm_linux_config_file=$armcc_conf --translate_gcc"
2272 as_default="${cross_prefix}gcc"
2273 _depflags='-MMD'
2274 _cflags_speed='-O3'
2275 _cflags_size='-Os'
0122118e 2276 elif $_cc -version 2>/dev/null | grep -Eq 'TMS470|TI ARM'; then
a758c5e2
MR
2277 _type=tms470
2278 _ident=$($_cc -version | head -n1 | tr -s ' ')
2279 _flags='--gcc --abi=eabi -me'
18031c49 2280 _cc_e='-ppl -fe=$@'
a758c5e2 2281 _cc_o='-fe=$@'
a758c5e2
MR
2282 _depflags='-ppa -ppd=$(@:.o=.d)'
2283 _cflags_speed='-O3 -mf=5'
2284 _cflags_size='-O3 -mf=2'
2285 _flags_filter=tms470_flags
2286 elif $_cc -v 2>&1 | grep -q clang; then
2287 _type=clang
2288 _ident=$($_cc --version | head -n1)
2289 _depflags='-MMD'
2290 _cflags_speed='-O3'
2291 _cflags_size='-Os'
2292 elif $_cc -V 2>&1 | grep -q Sun; then
2293 _type=suncc
2294 _ident=$($_cc -V 2>&1 | head -n1 | cut -d' ' -f 2-)
2295 _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "1s,^.*: ,$@: ," -e "\$$!s,\$$, \\\," -e "1!s,^.*: , ," > $(@:.o=.d)'
c72f12cb 2296 _DEPFLAGS='-xM1 -xc99'
a758c5e2
MR
2297 _ldflags='-std=c99'
2298 _cflags_speed='-O5'
2299 _cflags_size='-O5 -xspace'
2300 _flags_filter=suncc_flags
2301 elif $_cc -v 2>&1 | grep -q 'PathScale\|Path64'; then
2302 _type=pathscale
2303 _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
2304 _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2305 _cflags_speed='-O2'
2306 _cflags_size='-Os'
2307 _flags_filter='filter_out -Wdisabled-optimization'
2308 elif $_cc -v 2>&1 | grep -q Open64; then
2309 _type=open64
2310 _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
2311 _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2312 _cflags_speed='-O2'
2313 _cflags_size='-Os'
2314 _flags_filter='filter_out -Wdisabled-optimization|-Wtype-limits|-fno-signed-zeros'
2315 elif $_cc -V 2>&1 | grep -q Portland; then
2316 _type=pgi
2317 _ident="PGI $($_cc -V 2>&1 | awk '/^pgcc/ { print $2; exit }')"
8f23907f 2318 opt_common='-alias=ansi -Mdse -Mlre -Mpre'
a758c5e2
MR
2319 _cflags_speed="-O3 -Mautoinline -Munroll=c:4 $opt_common"
2320 _cflags_size="-O2 -Munroll=c:1 $opt_common"
2321 _cflags_noopt="-O1"
2322 _flags_filter=pgi_flags
dfa559bc
RB
2323 elif $_cc 2>&1 | grep -q Microsoft; then
2324 _type=msvc
2325 _ident=$($cc 2>&1 | head -n1)
2326 _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< 2>&1 | awk '\''/including/ { sub(/^.*file: */, ""); gsub(/\\/, "/"); if (!match($$0, / /)) print "$@:", $$0 }'\'' > $(@:.o=.d)'
2327 _DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -showIncludes -Zs'
2328 _cflags_speed="-O2"
2329 _cflags_size="-O1"
2330 # Nonstandard output options, to avoid msys path conversion issues, relies on wrapper to remap it
2331 if $_cc 2>&1 | grep -q Linker; then
2332 _ld_o='-out $@'
2333 else
2334 _ld_o='-Fe$@'
2335 fi
2336 _cc_o='-Fo $@'
a224b2cb 2337 _cc_e='-P -Fi $@'
dfa559bc
RB
2338 _flags_filter=msvc_flags
2339 _ld_lib='lib%.a'
2340 _ld_path='-libpath:'
2341 _flags='-nologo'
2342 _cflags='-D_USE_MATH_DEFINES -Dinline=__inline -FIstdlib.h -Dstrtoll=_strtoi64'
2343 if [ $pfx = hostcc ]; then
6a0200f2 2344 append _cflags -Dsnprintf=_snprintf
dfa559bc 2345 fi
aef6bd1b 2346 fi
a758c5e2
MR
2347
2348 eval ${pfx}_type=\$_type
2349 eval ${pfx}_ident=\$_ident
2350}
2351
2352set_ccvars(){
23565c26 2353 eval ${1}_C=\${_cc_c-\${${1}_C}}
18031c49 2354 eval ${1}_E=\${_cc_e-\${${1}_E}}
a758c5e2
MR
2355 eval ${1}_O=\${_cc_o-\${${1}_O}}
2356
2357 if [ -n "$_depflags" ]; then
2358 eval ${1}_DEPFLAGS=\$_depflags
2359 else
2360 eval ${1}DEP=\${_DEPCMD:-\$DEPCMD}
2361 eval ${1}DEP_FLAGS=\${_DEPFLAGS:-\$DEPFLAGS}
2362 eval DEP${1}FLAGS=\$_flags
2363 fi
2364}
2365
2366probe_cc cc "$cc"
2367cflags_filter=$_flags_filter
2368cflags_speed=$_cflags_speed
2369cflags_size=$_cflags_size
2370cflags_noopt=$_cflags_noopt
2371add_cflags $_flags $_cflags
2372cc_ldflags=$_ldflags
2373set_ccvars CC
2374
2375probe_cc hostcc "$host_cc"
2376host_cflags_filter=$_flags_filter
a758c5e2 2377add_host_cflags $_flags $_cflags
a758c5e2 2378set_ccvars HOSTCC
629687f6 2379
851ffa80
MR
2380test -n "$cc_type" && enable $cc_type ||
2381 warn "Unknown C compiler $cc, unable to select optimal CFLAGS"
629687f6 2382
75bafbac 2383: ${as_default:=$cc}
50567afa 2384: ${dep_cc_default:=$cc}
684b28e0 2385: ${ld_default:=$cc}
095792f2
MR
2386: ${host_ld_default:=$host_cc}
2387set_default ar as dep_cc ld host_ld
75800dce 2388
a758c5e2
MR
2389probe_cc as "$as"
2390asflags_filter=$_flags_filter
2391add_asflags $_flags $_cflags
2392set_ccvars AS
2393
2394probe_cc ld "$ld"
2395ldflags_filter=$_flags_filter
2396add_ldflags $_flags $_ldflags
2397test "$cc_type" != "$ld_type" && add_ldflags $cc_ldflags
2763587c 2398LD_O=${_ld_o-$LD_O}
8db73c61
MR
2399LD_LIB=${_ld_lib-$LD_LIB}
2400LD_PATH=${_ld_path-$LD_PATH}
a758c5e2 2401
095792f2
MR
2402probe_cc hostld "$host_ld"
2403host_ldflags_filter=$_flags_filter
2404add_host_ldflags $_flags $_ldflags
2405HOSTLD_O=${_ld_o-$HOSTLD_O}
2406
a758c5e2
MR
2407if [ -z "$CC_DEPFLAGS" ] && [ "$dep_cc" != "$cc" ]; then
2408 probe_cc depcc "$dep_cc"
2409 CCDEP=${_DEPCMD:-$DEPCMD}
2410 CCDEP_FLAGS=${_DEPFLAGS:=$DEPFLAGS}
2411 DEPCCFLAGS=$_flags
2412fi
07dec06e 2413
3dbc777c
MR
2414if $ar 2>&1 | grep -q Microsoft; then
2415 arflags="-nologo"
2416 ar_o='-out:$@'
2417elif $ar 2>&1 | grep -q 'Texas Instruments'; then
2418 arflags="rq"
2419 ar_o='$@'
2420else
2421 arflags="rc"
2422 ar_o='$@'
2423fi
2424
7f32f40c 2425add_cflags $extra_cflags
2f2e6c7c 2426add_asflags $extra_cflags
7f32f40c 2427
154d432c
MR
2428if test -n "$sysroot"; then
2429 case "$cc_type" in
00ba041c 2430 gcc|llvm_gcc|clang)
467256f2 2431 add_cppflags --sysroot="$sysroot"
154d432c
MR
2432 add_ldflags --sysroot="$sysroot"
2433 ;;
6fec122a
MR
2434 tms470)
2435 add_cppflags -I"$sysinclude"
2436 add_ldflags --sysroot="$sysroot"
2437 ;;
154d432c
MR
2438 esac
2439fi
2440
d22c13a8
MR
2441if test "$cpu" = host; then
2442 enabled cross_compile && die "--cpu=host makes no sense when cross-compiling."
2443
2444 case "$cc_type" in
613a4e3f 2445 gcc|llvm_gcc)
d22c13a8
MR
2446 check_native(){
2447 $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
b695256e 2448 sed -n "/cc1.*$1=/{
27ce1be8
MR
2449 s/.*$1=\\([^ ]*\\).*/\\1/
2450 p
2451 q
2452 }" $TMPE
d22c13a8
MR
2453 }
2454 cpu=$(check_native -march || check_native -mcpu)
2455 ;;
2456 esac
2457
2458 test "${cpu:-host}" = host && die "--cpu=host not supported with compiler $cc"
2459fi
2460
e939cedd
MR
2461# Deal with common $arch aliases
2462case "$arch" in
2463 arm*)
2464 arch="arm"
2465 ;;
2acda282 2466 mips*|IP*)
e939cedd
MR
2467 arch="mips"
2468 ;;
a6e9d649 2469 parisc*|hppa*)
e939cedd
MR
2470 arch="parisc"
2471 ;;
56203596 2472 "Power Macintosh"|ppc*|powerpc*)
e939cedd
MR
2473 arch="ppc"
2474 ;;
e939cedd
MR
2475 s390|s390x)
2476 arch="s390"
2477 ;;
2478 sh4|sh)
2479 arch="sh4"
2480 ;;
4cd217c0 2481 sun4u|sparc*)
e939cedd 2482 arch="sparc"
e939cedd 2483 ;;
c75848cd
DB
2484 tilegx|tile-gx)
2485 arch="tilegx"
2486 ;;
d33ed7b3 2487 i[3-6]86|i86pc|BePC|x86pc|x86_64|amd64)
e939cedd
MR
2488 arch="x86"
2489 ;;
2490esac
2491
851ffa80 2492is_in $arch $ARCH_LIST || warn "unknown architecture $arch"
343aef9b 2493enable $arch
e939cedd 2494
df5cdc24 2495# Add processor-specific flags
5d54c126
MR
2496if test "$cpu" = generic; then
2497 : do nothing
2498elif enabled ppc; then
343aef9b 2499
56348891
MR
2500 case $(tolower $cpu) in
2501 601|ppc601|powerpc601)
9dbd5c3d 2502 cpuflags="-mcpu=601"
64ad53ff 2503 disable altivec
9dbd5c3d 2504 ;;
56348891 2505 603*|ppc603*|powerpc603*)
9dbd5c3d 2506 cpuflags="-mcpu=603"
64ad53ff 2507 disable altivec
9dbd5c3d 2508 ;;
56348891 2509 604*|ppc604*|powerpc604*)
9dbd5c3d 2510 cpuflags="-mcpu=604"
64ad53ff 2511 disable altivec
9dbd5c3d 2512 ;;
56348891 2513 g3|75*|ppc75*|powerpc75*)
7f1fcaf0 2514 cpuflags="-mcpu=750"
64ad53ff 2515 disable altivec
9dbd5c3d 2516 ;;
56348891 2517 g4|745*|ppc745*|powerpc745*)
7f1fcaf0 2518 cpuflags="-mcpu=7450"
9dbd5c3d 2519 ;;
56348891 2520 74*|ppc74*|powerpc74*)
7f1fcaf0 2521 cpuflags="-mcpu=7400"
9dbd5c3d 2522 ;;
313f9fbf 2523 g5|970|ppc970|powerpc970)
7f1fcaf0 2524 cpuflags="-mcpu=970"
9dbd5c3d 2525 ;;
313f9fbf 2526 power[3-7]*)
7f1fcaf0 2527 cpuflags="-mcpu=$cpu"
313f9fbf 2528 ;;
56348891 2529 cell)
9dbd5c3d
MR
2530 cpuflags="-mcpu=cell"
2531 enable ldbrx
2532 ;;
4ab26cb4
DB
2533 e500mc)
2534 cpuflags="-mcpu=e500mc"
2535 disable altivec
2536 ;;
7b0b81a1
AL
2537 e500v2)
2538 cpuflags="-mcpu=8548 -mhard-float -mfloat-gprs=double"
2539 disable altivec
2540 ;;
2541 e500)
2542 cpuflags="-mcpu=8540 -mhard-float"
2543 disable altivec
2544 ;;
9dbd5c3d 2545 esac
343aef9b
MR
2546
2547elif enabled x86; then
2548
9dbd5c3d
MR
2549 case $cpu in
2550 i[345]86|pentium)
2551 cpuflags="-march=$cpu"
2552 disable mmx
2553 ;;
2554 # targets that do NOT support conditional mov (cmov)
2555 pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
2556 cpuflags="-march=$cpu"
2557 disable cmov
2558 ;;
2559 # targets that do support conditional mov (cmov)
b36f87ff 2560 i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64*|k8*|opteron*|athlon-fx|core2|amdfam10|barcelona|atom|bdver*)
9dbd5c3d
MR
2561 cpuflags="-march=$cpu"
2562 enable cmov
2563 enable fast_cmov
2564 ;;
2565 # targets that do support conditional mov but on which it's slow
2566 pentium4|pentium4m|prescott|nocona)
2567 cpuflags="-march=$cpu"
2568 enable cmov
2569 disable fast_cmov
2570 ;;
2571 esac
343aef9b
MR
2572
2573elif enabled sparc; then
2574
9dbd5c3d 2575 case $cpu in
eadfb056 2576 cypress|f93[04]|tsc701|sparcl*|supersparc|hypersparc|niagara|v[789])
26b7199e
MK
2577 cpuflags="-mcpu=$cpu"
2578 disable vis
2579 ;;
eadfb056
MK
2580 ultrasparc*|niagara[234])
2581 cpuflags="-mcpu=$cpu"
9dbd5c3d
MR
2582 ;;
2583 esac
343aef9b
MR
2584
2585elif enabled arm; then
2586
34ba23c9
MR
2587 case $cpu in
2588 armv*)
2589 cpuflags="-march=$cpu"
c2eae137 2590 subarch=$(echo $cpu | sed 's/[^a-z0-9]//g')
34ba23c9
MR
2591 ;;
2592 *)
2593 cpuflags="-mcpu=$cpu"
c2eae137
MR
2594 case $cpu in
2595 cortex-a*) subarch=armv7a ;;
2596 cortex-r*) subarch=armv7r ;;
9e19704a 2597 cortex-m*) enable thumb; subarch=armv7m ;;
c2eae137
MR
2598 arm11*) subarch=armv6 ;;
2599 arm[79]*e*|arm9[24]6*|arm96*|arm102[26]) subarch=armv5te ;;
2600 armv4*|arm7*|arm9[24]*) subarch=armv4 ;;
2601 esac
34ba23c9
MR
2602 ;;
2603 esac
343aef9b
MR
2604
2605elif enabled alpha; then
2606
34ba23c9 2607 enabled ccc && cpuflags="-arch $cpu" || cpuflags="-mcpu=$cpu"
343aef9b
MR
2608
2609elif enabled bfin; then
2610
34ba23c9 2611 cpuflags="-mcpu=$cpu"
343aef9b
MR
2612
2613elif enabled mips; then
2614
34ba23c9 2615 cpuflags="-march=$cpu"
343aef9b
MR
2616
2617elif enabled avr32; then
2618
9dbd5c3d
MR
2619 case $cpu in
2620 ap7[02]0[0-2])
2621 subarch="avr32_ap"
2622 cpuflags="-mpart=$cpu"
2623 ;;
2624 ap)
2625 subarch="avr32_ap"
2626 cpuflags="-march=$cpu"
2627 ;;
2628 uc3[ab]*)
2629 subarch="avr32_uc"
2630 cpuflags="-mcpu=$cpu"
2631 ;;
2632 uc)
2633 subarch="avr32_uc"
2634 cpuflags="-march=$cpu"
2635 ;;
2636 esac
df5cdc24 2637
343aef9b
MR
2638fi
2639
df5cdc24
MR
2640add_cflags $cpuflags
2641add_asflags $cpuflags
2642
993f2d0f
MR
2643# compiler sanity check
2644check_exec <<EOF
2645int main(void){ return 0; }
2646EOF
2647if test "$?" != 0; then
2648 echo "$cc is unable to create an executable file."
2649 if test -z "$cross_prefix" && ! enabled cross_compile ; then
2650 echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
2651 echo "Only do this if you know what cross compiling means."
2652 fi
2653 die "C compiler test failed."
2654fi
2655
046f081b 2656add_cppflags -D_ISOC99_SOURCE
e9b9a2f8 2657check_cflags -std=c99
50a334e4 2658check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
9d821fc2
DB
2659#include <stdlib.h>
2660EOF
50a334e4 2661check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
9d821fc2
DB
2662#include <stdlib.h>
2663EOF
e9b9a2f8 2664
f0125de9 2665check_host_cflags -std=c99
0a6db2a2 2666check_host_cflags -Wall
f0125de9 2667
d4c99513
MR
2668check_64bit(){
2669 arch32=$1
2670 arch64=$2
2671 expr=$3
2672 check_code cc "" "int test[2*($expr) - 1]" &&
2673 subarch=$arch64 || subarch=$arch32
2674}
2675
b24dbcbd 2676case "$arch" in
4cd217c0 2677 alpha|ia64)
2acda282
MR
2678 spic=$shared
2679 ;;
2680 mips)
2681 check_64bit mips mips64 '_MIPS_SIM > 1'
8a3c8627 2682 spic=$shared
b24dbcbd 2683 ;;
a6e9d649
MR
2684 parisc)
2685 check_64bit parisc parisc64 'sizeof(void *) > 4'
2686 spic=$shared
2687 ;;
56203596
MR
2688 ppc)
2689 check_64bit ppc ppc64 'sizeof(void *) > 4'
2690 ;;
4cd217c0
MR
2691 sparc)
2692 check_64bit sparc sparc64 'sizeof(void *) > 4'
2693 spic=$shared
2694 ;;
e939cedd 2695 x86)
d4c99513 2696 check_64bit x86_32 x86_64 'sizeof(void *) > 4'
de27f4d9 2697 if test "$subarch" = "x86_64"; then
e939cedd 2698 spic=$shared
de27f4d9 2699 fi
b24dbcbd 2700 ;;
b24dbcbd
RP
2701esac
2702
343aef9b 2703enable $subarch
8a3c8627 2704enabled spic && enable pic
b24dbcbd 2705
7483e694 2706# OS specific
4f854758 2707case $target_os in
a1629e28 2708 haiku)
63ae7e7c 2709 prefix_default="/boot/common"
108caaaa 2710 network_extralibs="-lnetwork"
f59c4bd6 2711 host_libs=
a1629e28 2712 ;;
7483e694 2713 sunos)
4d58e4cb 2714 AVSERVERLDFLAGS=""
9987769a 2715 SHFLAGS='-shared -Wl,-h,$$(@F)'
0600d30a 2716 enabled x86 && SHFLAGS="-mimpure-text $SHFLAGS"
7483e694 2717 network_extralibs="-lsocket -lnsl"
779222db 2718 add_cppflags -D__EXTENSIONS__ -D_XOPEN_SOURCE=600
87a74f47
SM
2719 # When using suncc to build, the Solaris linker will mark
2720 # an executable with each instruction set encountered by
2721 # the Solaris assembler. As our libraries contain their own
2722 # guards for processor-specific code, instead suppress
2723 # generation of the HWCAPS ELF section on Solaris x86 only.
2724 enabled_all suncc x86 && echo "hwcap_1 = OVERRIDE;" > mapfile && add_ldflags -Wl,-M,mapfile
2a8a860a 2725 nm_default='nm -P -g'
7483e694
DB
2726 ;;
2727 netbsd)
a1e4b3f6 2728 disable symver
07a8eef6
MR
2729 oss_indev_extralibs="-lossaudio"
2730 oss_outdev_extralibs="-lossaudio"
7483e694 2731 ;;
d488c3bc 2732 openbsd|bitrig)
7c4a001a 2733 # On OpenBSD 4.5. the compiler does not use PIC unless
070c5d0f 2734 # explicitly using -fPIC. Libav builds fine without PIC,
7c4a001a
MR
2735 # however the generated executable will not do anything
2736 # (simply quits with exit-code 1, no crash, no output).
a7b9c8ae 2737 # Thus explicitly enable PIC here.
cd78208b 2738 enable pic
a1e4b3f6 2739 disable symver
7483e694 2740 SHFLAGS='-shared'
d5683aba
BS
2741 SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBVERSION)'
2742 SLIB_INSTALL_LINKS=
07a8eef6
MR
2743 oss_indev_extralibs="-lossaudio"
2744 oss_outdev_extralibs="-lossaudio"
7483e694 2745 ;;
a1e4b3f6 2746 dragonfly)
a1e4b3f6
MR
2747 disable symver
2748 ;;
2749 freebsd)
7483e694
DB
2750 ;;
2751 bsd/os)
355d81df 2752 add_extralibs -lpoll -lgnugetopt
7483e694
DB
2753 ;;
2754 darwin)
301ab19d 2755 gas="gas-preprocessor.pl $cc"
e08b8239 2756 enabled ppc && add_asflags -force_cpusubtype_ALL
49e35f49 2757 SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR)'
dff68563 2758 enabled x86_32 && append SHFLAGS -Wl,-read_only_relocs,suppress
355d81df 2759 add_ldflags -Wl,-dynamic,-search_paths_first
7483e694
DB
2760 SLIBSUF=".dylib"
2761 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
2762 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
4d58e4cb 2763 AVSERVERLDFLAGS=-Wl,-bind_at_load
304d586d 2764 objformat="macho"
1b0f6fb8 2765 enabled x86_64 && objformat="macho64"
8dfa86f7 2766 enabled_any pic shared ||
2704bd1a 2767 { check_cflags -mdynamic-no-pic && add_asflags -mdynamic-no-pic; }
7483e694
DB
2768 ;;
2769 mingw32*)
9d3f4f50 2770 if test $target_os = "mingw32ce"; then
1aa71e25
MS
2771 disable network
2772 else
2773 target_os=mingw32
2774 fi
dcc01c06 2775 LIBTARGET=i386
1fc9fb8a 2776 if enabled x86_64; then
417516f6 2777 LIBTARGET="i386:x86-64"
336cc1b0 2778 elif enabled arm; then
15c5156d 2779 LIBTARGET=arm-wince
dcc01c06 2780 fi
fbd971a4 2781 shlibdir_default="$bindir_default"
7483e694
DB
2782 SLIBPREF=""
2783 SLIBSUF=".dll"
7483e694
DB
2784 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
2785 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
2f138f0b
MR
2786 SLIB_EXTRA_CMD=-'$(DLLTOOL) -m $(LIBTARGET) -d $$(@:$(SLIBSUF)=.def) -l $(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib) -D $(SLIBNAME_WITH_MAJOR)'
2787 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
2788 SLIB_INSTALL_LINKS=
2789 SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
2790 SLIB_INSTALL_EXTRA_LIB='lib$(SLIBNAME:$(SLIBSUF)=.dll.a) $(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
4b51fb1c 2791 SHFLAGS='-shared -Wl,--output-def,$$(@:$(SLIBSUF)=.def) -Wl,--out-implib,$(SUBDIR)lib$(SLIBNAME:$(SLIBSUF)=.dll.a) -Wl,--enable-runtime-pseudo-reloc -Wl,--enable-auto-image-base'
304d586d 2792 objformat="win32"
ec10a9ab 2793 dlltool="${cross_prefix}dlltool"
a3222470 2794 ranlib=:
bc574408 2795 enable dos_paths
5666a9f2 2796 add_cppflags -U__STRICT_ANSI__
7483e694 2797 ;;
53e8cd68 2798 win32|win64)
d66c52c2
MS
2799 if enabled shared; then
2800 # Link to the import library instead of the normal static library
2801 # for shared libs.
2802 LD_LIB='%.lib'
2803 # Cannot build shared and static libraries at the same time with
2804 # MSVC.
2805 disable static
2806 fi
2807 shlibdir_default="$bindir_default"
2808 SLIBPREF=""
2809 SLIBSUF=".dll"
2810 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
2811 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
2812 SLIB_CREATE_DEF_CMD='makedef $(SUBDIR)lib$(NAME).ver $(OBJS) > $$(@:$(SLIBSUF)=.def)'
2813 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
2814 SLIB_INSTALL_LINKS=
2815 SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
2816 SLIB_INSTALL_EXTRA_LIB='$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
2817 SHFLAGS='-dll -def:$$(@:$(SLIBSUF)=.def) -implib:$(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib)'
53e8cd68
MS
2818 objformat="win32"
2819 ranlib=:
2820 enable dos_paths
2821 ;;
7483e694 2822 cygwin*)
4f854758 2823 target_os=cygwin
fbd971a4 2824 shlibdir_default="$bindir_default"
7483e694
DB
2825 SLIBPREF="cyg"
2826 SLIBSUF=".dll"
2827 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
2828 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
f5d2c597
YS
2829 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
2830 SLIB_INSTALL_LINKS=
2831 SLIB_INSTALL_EXTRA_LIB='lib$(FULLNAME).dll.a'
2832 SHFLAGS='-shared -Wl,--out-implib,$(SUBDIR)lib$(FULLNAME).dll.a'
304d586d 2833 objformat="win32"
bc574408 2834 enable dos_paths
a7a187a1 2835 add_cppflags -U__STRICT_ANSI__
7483e694 2836 ;;
4f365f37 2837 *-dos|freedos|opendos)
4f365f37 2838 network_extralibs="-lsocket"
ff1c015d 2839 objformat="coff"
bc574408 2840 enable dos_paths
a7a187a1 2841 add_cppflags -U__STRICT_ANSI__
4f365f37 2842 ;;
7483e694 2843 linux)
046f081b 2844 add_cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
7483e694
DB
2845 enable dv1394
2846 ;;
2847 irix*)
4f854758 2848 target_os=irix
7483e694
DB
2849 ranlib="echo ignoring ranlib"
2850 ;;
d22e8442 2851 os/2*)
d22e8442 2852 ln_s="cp -f"
9297f1ed 2853 objformat="aout"
e14574eb 2854 add_cppflags -D_GNU_SOURCE
355d81df 2855 add_ldflags -Zomf -Zbin-files -Zargs-wild -Zmap
71c61f62 2856 SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
4d58e4cb 2857 AVSERVERLDFLAGS=""
287d3b13 2858 LIBSUF="_s.a"
d22e8442
DY
2859 SLIBPREF=""
2860 SLIBSUF=".dll"
2861 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
2862 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
71c61f62 2863 SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
f69f51b3
DB
2864 echo PROTMODE >> $(SUBDIR)$(NAME).def; \
2865 echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
2866 echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
2867 echo EXPORTS >> $(SUBDIR)$(NAME).def; \
2868 emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
71c61f62 2869 SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
f69f51b3 2870 emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
2f138f0b 2871 SLIB_INSTALL_EXTRA_LIB='$(LIBPREF)$(NAME)_dll.a $(LIBPREF)$(NAME)_dll.lib'
bc574408 2872 enable dos_paths
d22e8442 2873 ;;
83993c1c 2874 gnu/kfreebsd)
c1f54478 2875 add_cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -D_BSD_SOURCE
83993c1c 2876 ;;
34e82167 2877 gnu)
f60d1366 2878 add_cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
34e82167 2879 ;;
d33ed7b3
MR
2880 qnx)
2881 add_cppflags -D_QNX_SOURCE
2882 network_extralibs="-lsocket"
2883 ;;
1c69c79f
MS
2884 symbian)
2885 SLIBSUF=".dll"
2886 enable dos_paths
e3bc07f4
MS
2887 add_cflags --include=$sysinclude/gcce/gcce.h -fvisibility=default
2888 add_cppflags -D__GCCE__ -D__SYMBIAN32__ -DSYMBIAN_OE_POSIX_SIGNALS
2889 add_ldflags -Wl,--target1-abs,--no-undefined \
2890 -Wl,-Ttext,0x80000,-Tdata,0x1000000 -shared \
2891 -Wl,--entry=_E32Startup -Wl,-u,_E32Startup
2892 add_extralibs -l:eexe.lib -l:usrt2_2.lib -l:dfpaeabi.dso \
2893 -l:drtaeabi.dso -l:scppnwdl.dso -lsupc++ -lgcc \
2894 -l:libc.dso -l:libm.dso -l:euser.dso -l:libcrt0.lib
1c69c79f 2895 ;;
fdd66609
MR
2896 osf1)
2897 add_cppflags -D_OSF_SOURCE -D_POSIX_PII -D_REENTRANT
2898 AVSERVERLDFLAGS=
2899 ;;
741a8b72
MR
2900 minix)
2901 ;;
4ebc6a74
MR
2902 plan9)
2903 add_cppflags -D_C99_SNPRINTF_EXTENSION \
2904 -D_REENTRANT_SOURCE \
2905 -D_RESEARCH_SOURCE \
2906 -DFD_SETSIZE=96 \
2907 -DHAVE_SOCK_OPTS
2908 add_compat strtod.o strtod=avpriv_strtod
2909 network_extralibs='-lbsd'
2910 exeobjs=compat/plan9/main.o
2911 disable avserver
2912 ln_s='ln -s -f'
2913 cp_f='cp'
2914 ;;
614d8911
MR
2915 none)
2916 ;;
7483e694 2917 *)
4f924f9a 2918 die "Unknown OS '$target_os'."
7483e694
DB
2919 ;;
2920esac
2921
b797f3c4
MR
2922# determine libc flavour
2923
2924if check_cpp_condition features.h "defined __UCLIBC__"; then
2925 libc_type=uclibc
2926elif check_cpp_condition features.h "defined __GLIBC__"; then
2927 libc_type=glibc
2928elif check_header _mingw.h; then
2929 libc_type=mingw
2930 check_cpp_condition _mingw.h \
2931 "defined (__MINGW64_VERSION_MAJOR) || (__MINGW32_MAJOR_VERSION > 3) || \
2932 (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
2933 die "ERROR: MinGW runtime version must be >= 3.15."
2934elif check_cpp_condition newlib.h "defined _NEWLIB_VERSION"; then
2935 libc_type=newlib
4fa661a8
RB
2936elif check_func_headers stdlib.h _get_doserrno; then
2937 libc_type=msvcrt
84e65c76
MR
2938 add_compat strtod.o strtod=avpriv_strtod
2939 add_compat msvcrt/snprintf.o snprintf=avpriv_snprintf \
2940 _snprintf=avpriv_snprintf \
2941 vsnprintf=avpriv_vsnprintf
b797f3c4
MR
2942elif check_cpp_condition stddef.h "defined __KLIBC__"; then
2943 libc_type=klibc
2944fi
2945
2946test -n "$libc_type" && enable $libc_type
2947
5ab432fa
MR
2948# hacks for compiler/libc/os combinations
2949
2950if enabled_all tms470 glibc; then
b6f8d635 2951 CPPFLAGS="-I${source_path}/compat/tms470 ${CPPFLAGS}"
5ab432fa
MR
2952 add_cppflags -D__USER_LABEL_PREFIX__=
2953 add_cppflags -D__builtin_memset=memset
2954 add_cppflags -D__gnuc_va_list=va_list -D_VA_LIST_DEFINED
2955 add_cflags -pds=48 # incompatible redefinition of macro
2956fi
2957
6555acad
MR
2958esc(){
2959 echo "$*" | sed 's/%/%25/g;s/:/%3a/g'
2960}
2961
2962echo "config:$arch:$subarch:$cpu:$target_os:$(esc $cc_ident):$(esc $LIBAV_CONFIGURATION)" >config.fate
db7515fd 2963
13cb2187
AS
2964check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable pic
2965
c9d19248 2966set_default $PATHS_LIST
2a8a860a 2967set_default nm
c9d19248 2968
320d060a 2969# we need to build at least one lib type
93b3c083 2970if ! enabled_any static shared; then
320d060a
DB
2971 cat <<EOF
2972At least one library type must be built.
2973Specify --enable-static to build the static libraries or --enable-shared to
2974build the shared libraries as well. To only build the shared libraries specify
2975--disable-static in addition to --enable-shared.
2976EOF
2977 exit 1;
2978fi
2979
2184c6f7 2980die_license_disabled() {
4c27207c 2981 enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
2184c6f7
DB
2982}
2983
e417d80d 2984die_license_disabled gpl libcdio
2184c6f7 2985die_license_disabled gpl libx264
de295976 2986die_license_disabled gpl libxavs
2184c6f7 2987die_license_disabled gpl libxvid
2184c6f7
DB
2988die_license_disabled gpl x11grab
2989
2f7ae63b 2990die_license_disabled nonfree libfaac
87246953 2991die_license_disabled nonfree libfdk_aac
a060866f 2992die_license_disabled nonfree openssl
b2e3c528 2993
0b175caa
DB
2994die_license_disabled version3 libopencore_amrnb
2995die_license_disabled version3 libopencore_amrwb
d89e738a 2996die_license_disabled version3 libvo_aacenc
f502ff3f 2997die_license_disabled version3 libvo_amrwbenc
0b175caa 2998
9cad0e4e 2999enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
3fe142e2 3000
40617a6d 3001disabled optimizations || check_cflags -fomit-frame-pointer
cf9d24ad 3002
e276d9e8
MR
3003enable_pic() {
3004 enable pic
bce7b696
MR
3005 add_cppflags -DPIC
3006 add_cflags -fPIC
3007 add_asflags -fPIC
e276d9e8
MR
3008}
3009
3010enabled pic && enable_pic
bce7b696 3011
b4d96ba2
MR
3012check_cc <<EOF || die "Symbol mangling check failed."
3013int ff_extern;
3014EOF
2a8a860a 3015sym=$($nm $TMPO | awk '/ff_extern/{ print substr($0, match($0, /[^ \t]*ff_extern/)) }')
b4d96ba2
MR
3016extern_prefix=${sym%%ff_extern*}
3017
afb5ed55 3018check_cc <<EOF && enable_weak inline_asm
f65883c8
MR
3019void foo(void) { __asm__ volatile ("" ::); }
3020EOF
61d251db 3021
df5e3978
MR
3022_restrict=
3023for restrict_keyword in restrict __restrict__ __restrict; do
3024 check_cc <<EOF && _restrict=$restrict_keyword && break
3025void foo(char * $restrict_keyword p);
3026EOF
3027done
3028
3029check_cc <<EOF && enable attribute_packed
3030struct { int x; } __attribute__((packed)) x;
3031EOF
3032
dffb41b9
MR
3033check_cc <<EOF && enable attribute_may_alias
3034union { int x; } __attribute__((may_alias)) x;
3035EOF
3036
df5e3978
MR
3037check_cc <<EOF || die "endian test failed"
3038unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
3039EOF
48fc536a 3040od -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
df5e3978 3041
e939cedd
MR
3042if enabled alpha; then
3043
3044 check_cflags -mieee
3045
3046elif enabled arm; then
e45391bb 3047
8986fddc 3048 enabled thumb && check_cflags -mthumb || check_cflags -marm
301ab19d 3049 nogas=die
50fa82e6 3050
44caaa56
MR
3051 if check_cpp_condition stddef.h "defined __ARM_PCS_VFP"; then
3052 enable vfp_args
3053 elif ! check_cpp_condition stddef.h "defined __ARM_PCS || defined __SOFTFP__"; then
3054 case "${cross_prefix:-$cc}" in
3055 *hardfloat*) enable vfp_args; fpabi=vfp ;;
3056 *) check_ld <<EOF && enable vfp_args && fpabi=vfp || fpabi=soft ;;
fa0912fe
MR
3057__asm__ (".eabi_attribute 28, 1");
3058int main(void) { return 0; }
3059EOF
44caaa56
MR
3060 esac
3061 warn "Compiler does not indicate floating-point ABI, guessing $fpabi."
3062 fi
fa0912fe 3063
575db883
DB
3064 enabled armv5te && check_inline_asm armv5te '"qadd r0, r0, r0"'
3065 enabled armv6 && check_inline_asm armv6 '"sadd16 r0, r0, r0"'
3066 enabled armv6t2 && check_inline_asm armv6t2 '"movt r0, #0"'
3067 enabled armvfp && check_inline_asm armvfp '"fadds s0, s0, s0"'
3068 enabled neon && check_inline_asm neon '"vadd.i16 q0, q0, q0"'
3069 enabled vfpv3 && check_inline_asm vfpv3 '"vmov.f32 s0, #1.0"'
e45391bb 3070
575db883
DB
3071 check_inline_asm asm_mod_q '"add r0, %Q0, %R0" :: "r"((long long)0)'
3072 check_inline_asm asm_mod_y '"vmul.i32 d0, d0, %y0" :: "x"(0)'
6308729e 3073
e276d9e8
MR
3074 enabled_all armv6t2 shared !pic && enable_pic
3075
fa0912fe 3076elif enabled mips; then
e45391bb 3077
575db883 3078 check_inline_asm loongson '"dmult.g $1, $2, $3"'
e45391bb 3079
fa0912fe 3080elif enabled ppc; then
e45391bb 3081
e6a0c354
MR
3082 enable local_aligned_8 local_aligned_16
3083
575db883
DB
3084 check_inline_asm dcbzl '"dcbzl 0, %0" :: "r"(0)'
3085 check_inline_asm ibm_asm '"add 0, 0, 0"'
3086 check_inline_asm ppc4xx '"maclhw r10, r11, r12"'
3087 check_inline_asm xform_asm '"lwzx %1, %y0" :: "Z"(*(int*)0), "r"(0)'
fa0912fe
MR
3088
3089 # AltiVec flags: The FSF version of GCC differs from the Apple version
3090 if enabled altivec; then
301ab19d 3091 nogas=warn
fa0912fe
MR
3092 check_cflags -maltivec -mabi=altivec &&
3093 { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
3094 check_cflags -faltivec
3095
3096 # check if our compiler supports Motorola AltiVec C API
3097 check_cc <<EOF || disable altivec
3098$inc_altivec_h
3099int main(void) {
20bcce50
MR
3100 vector signed int v1 = (vector signed int) { 0 };
3101 vector signed int v2 = (vector signed int) { 1 };
3102 v1 = vec_add(v1, v2);
fa0912fe
MR
3103 return 0;
3104}
3105EOF
3106
20bcce50 3107 enabled altivec || warn "Altivec disabled, possibly missing --cpu flag"
fa0912fe 3108 fi
e45391bb 3109
fa0912fe 3110elif enabled sparc; then
e45391bb 3111
6aa93689 3112 enabled vis && check_inline_asm vis '"pdist %f0, %f0, %f0"'
e45391bb 3113
fa0912fe 3114elif enabled x86; then
e45391bb 3115
8e85ba8d
DB
3116 check_code ld intrin.h "__rdtsc()" && enable rdtsc
3117
f80ddd5b
RB
3118 check_code ld mmintrin.h "_mm_empty()" && enable mm_empty
3119
e6a0c354
MR
3120 enable local_aligned_8 local_aligned_16
3121
44965991
PI
3122 # check whether EBP is available on x86
3123 # As 'i' is stored on the stack, this program will crash
3124 # if the base pointer is used to access it because the
3125 # base pointer is cleared in the inline assembly code.
7dfef245 3126 check_exec_crash <<EOF && enable ebp_available
f69f51b3
DB
3127volatile int i=0;
3128__asm__ volatile ("xorl %%ebp, %%ebp" ::: "%ebp");
3129return i;
44965991
PI
3130EOF
3131
f494213c 3132 # check whether EBX is available on x86
575db883
DB
3133 check_inline_asm ebx_available '""::"b"(0)' &&
3134 check_inline_asm ebx_available '"":::"%ebx"'
8e380710 3135
6f74fb03 3136 # check whether xmm clobbers are supported
575db883 3137 check_inline_asm xmm_clobbers '"":::"%xmm0"'
6f74fb03 3138
239fdf1b 3139 # check whether binutils is new enough to compile SSSE3/MMXEXT
43b73d59
DB
3140 enabled ssse3 && check_inline_asm ssse3_inline '"pabsw %xmm0, %xmm0"'
3141 enabled mmxext && check_inline_asm mmxext_inline '"pmaxub %mm0, %mm1"'
6bd859d6 3142
9cca1e40 3143 if ! disabled_any asm mmx yasm; then
b6c06894
MR
3144 if check_cmd $yasmexe --version; then
3145 enabled x86_64 && yasm_extra="-m amd64"
3146 yasm_debug="-g dwarf2"
3147 elif check_cmd nasm -v; then
3148 yasmexe=nasm
3149 yasm_debug="-g -F dwarf"
3150 enabled x86_64 && test "$objformat" = elf && objformat=elf64
3151 fi
3152
3153 YASMFLAGS="-f $objformat $yasm_extra"
3154 enabled pic && append YASMFLAGS "-DPIC"
3155 test -n "$extern_prefix" && append YASMFLAGS "-DPREFIX"
3156 case "$objformat" in
3157 elf*) enabled debug && append YASMFLAGS $yasm_debug ;;
3158 esac
3159
b8e8a07c 3160 check_yasm "vextractf128 xmm0, ymm0, 0" && enable yasm ||
25432e85 3161 die "yasm not found, use --disable-yasm for a crippled build"
43b73d59 3162 check_yasm "vfmaddps ymm0, ymm1, ymm2, ymm3" || disable fma4_external
180d43bc 3163 check_yasm "CPU amdnop" && enable cpunop
31a0dcb2 3164 fi
e45391bb 3165
669b5583
MR
3166 case "$cpu" in
3167 athlon*|opteron*|k8*|pentium|pentium-mmx|prescott|nocona|atom|geode)
3168 disable fast_clz
3169 ;;
3170 esac
3171
44965991
PI
3172fi
3173
301ab19d
MR
3174if enabled asm; then
3175 as=${gas:=$as}
575db883 3176 check_inline_asm gnu_as '".macro m n\n\\n:.int 0\n.endm\nm x"' ||
301ab19d
MR
3177 $nogas "GNU assembler not found, install gas-preprocessor"
3178fi
3179
4a7e068b
MR
3180check_ldflags -Wl,--as-needed
3181
a98bb16d
RP
3182if check_func dlopen; then
3183 ldl=
3184elif check_func dlopen -ldl; then
3185 ldl=-ldl
8bf5d58f
MN
3186fi
3187
54fe299b
DV
3188if enabled network; then
3189 check_type "sys/types.h sys/socket.h" socklen_t
3190 check_type netdb.h "struct addrinfo"
75d339e0
MS
3191 check_type netinet/in.h "struct group_source_req" -D_BSD_SOURCE
3192 check_type netinet/in.h "struct ip_mreq_source" -D_BSD_SOURCE
54fe299b
DV
3193 check_type netinet/in.h "struct ipv6_mreq" -D_DARWIN_C_SOURCE
3194 check_type netinet/in.h "struct sockaddr_in6"
cdee08e3 3195 check_type poll.h "struct pollfd"
54fe299b
DV
3196 check_type "sys/types.h sys/socket.h" "struct sockaddr_storage"
3197 check_struct "sys/types.h sys/socket.h" "struct sockaddr" sa_len
83c93fe7 3198 check_type netinet/sctp.h "struct sctp_event_subscribe"
f06dee77 3199 check_func getaddrinfo $network_extralibs
c3e73100 3200 check_func getservbyport $network_extralibs
54fe299b
DV
3201 # Prefer arpa/inet.h over winsock2
3202 if check_header arpa/inet.h ; then
3203 check_func closesocket
3204 elif check_header winsock2.h ; then
47876d66
DB
3205 check_func_headers winsock2.h closesocket -lws2 &&
3206 network_extralibs="-lws2" ||
3207 { check_func_headers winsock2.h closesocket -lws2_32 &&
54fe299b 3208 network_extralibs="-lws2_32"; }
f06dee77 3209 check_func_headers ws2tcpip.h getaddrinfo $network_extralibs
54fe299b
DV
3210 check_type ws2tcpip.h socklen_t
3211 check_type ws2tcpip.h "struct addrinfo"
75d339e0
MS
3212 check_type ws2tcpip.h "struct group_source_req"
3213 check_type ws2tcpip.h "struct ip_mreq_source"
54fe299b 3214 check_type ws2tcpip.h "struct ipv6_mreq"
cdee08e3 3215 check_type winsock2.h "struct pollfd"
54fe299b
DV
3216 check_type ws2tcpip.h "struct sockaddr_in6"
3217 check_type ws2tcpip.h "struct sockaddr_storage"
3218 check_struct winsock2.h "struct sockaddr" sa_len
3219 else
3220 disable network
3221 fi
3222fi
3223
75ecf149
DB
3224# Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
3225check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
3226
534a2231 3227check_func fcntl
7483e694
DB
3228check_func fork
3229check_func gethrtime
667fb97a 3230check_func getopt
7483e694 3231check_func getrusage
fc5607f8 3232check_struct "sys/time.h sys/resource.h" "struct rusage" ru_maxrss
61183b5a 3233check_func gettimeofday
094c09bb 3234check_func inet_aton $network_extralibs
abfc8d05 3235check_func isatty
a5b64584 3236check_func localtime_r
4ae40685 3237check_func ${malloc_prefix}memalign && enable memalign
7483e694 3238check_func mkstemp
0328b9ea 3239check_func mmap
e98b02de 3240check_func mprotect
4ae40685 3241check_func ${malloc_prefix}posix_memalign && enable posix_memalign
be1a839c 3242check_func_headers malloc.h _aligned_malloc && enable aligned_malloc
0104b608 3243check_func setrlimit
87958234 3244check_func strerror_r
6379900c 3245check_func strptime
47941088 3246check_func strtok_r
ea4d5f48 3247check_func sched_getaffinity
bcc73960 3248check_func sysconf
b9e22269 3249check_func sysctl
d3d3a32c 3250check_func usleep
b507ebd1 3251check_func_headers io.h setmode
b4675d0f 3252check_lib2 "windows.h shellapi.h" CommandLineToArgvW -lshell32
1093383d 3253check_lib2 "windows.h wincrypt.h" CryptGenRandom -ladvapi32
fc5607f8 3254check_lib2 "windows.h psapi.h" GetProcessMemoryInfo -lpsapi
02e8f427 3255check_func_headers windows.h GetProcessAffinityMask
2446d3d6 3256check_func_headers windows.h GetProcessTimes
61183b5a 3257check_func_headers windows.h GetSystemTimeAsFileTime
73f6d31e 3258check_func_headers windows.h MapViewOfFile
d3d3a32c 3259check_func_headers windows.h Sleep
7c5bfe7a 3260check_func_headers windows.h VirtualAlloc
6ffa87d3 3261
ca6b544a 3262check_header direct.h
a98bb16d 3263check_header dlfcn.h
fa845061 3264check_header dxva.h
92c6a099 3265check_header dxva2api.h
3b1ab197 3266check_header io.h
a98bb16d 3267check_header malloc.h
bf6ce82d 3268check_header poll.h
b58412f1 3269check_header sys/mman.h
06bb5905 3270check_header sys/param.h
b091aa44 3271check_header sys/resource.h
bf6ce82d 3272check_header sys/select.h
e64bceea 3273check_header sys/time.h
542920b7 3274check_header unistd.h
272081b0
CEH
3275check_header vdpau/vdpau.h
3276check_header vdpau/vdpau_x11.h
d3d3a32c 3277check_header windows.h
68178ca9 3278check_header X11/extensions/XvMClib.h
a98bb16d 3279
a4fa192c 3280