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