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