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